-- cgit v1.2.3-18-g5258 From 8fc955223575738aa38cbca6c2e57f3ce2248c44 Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 23 Feb 2011 17:41:35 +0000 Subject: OG 1.0 ticket:299 instalador git-svn-id: https://opengnsys.es/svn/branches/version1.0@1479 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Sources/Services/ogAdmRepoAux | 26 +++++++ admin/Sources/Services/opengnsys.init | 17 ++++- admin/WebConsole/xajax_0.5_standard.zip | Bin 0 -> 241376 bytes installer/opengnsys_installer.sh | 130 ++++++++++++++++++++++++++++++-- repoman/bin/torrent-tracker | 22 ++++++ 5 files changed, 185 insertions(+), 10 deletions(-) create mode 100755 admin/Sources/Services/ogAdmRepoAux create mode 100644 admin/WebConsole/xajax_0.5_standard.zip create mode 100644 repoman/bin/torrent-tracker diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux new file mode 100755 index 00000000..af13f093 --- /dev/null +++ b/admin/Sources/Services/ogAdmRepoAux @@ -0,0 +1,26 @@ +#!/bin/bash +PARM=`cat` + + +PARM1=$(echo $PARM | cut -f1 -d" ") +PARM2=$(echo $PARM | cut -f2 -d" ") +PARM3=$(echo $PARM | cut -f3 -d" ") +PARM4=$(echo $PARM | cut -f4 -d" ") + +echo $PARM +echo $PARM1 +echo $PARM2 +echo $PARM3 +echo $PARM4 + +case $PARM1 in + START_MULTICAST) + #1 START_MULTICAST + #2 fichero a enviar + FILE=/opt/opengnsys/images$PARM2 + MCASTOPT=$PARM3 + #3 opciones protocolo multicast + echo "/opt/opengnsys/bin/SendFileMcast $FILE $MCASTOPT" + /opt/opengnsys/bin/sendFileMcast $FILE $MCASTOPT + ;; +esac \ No newline at end of file diff --git a/admin/Sources/Services/opengnsys.init b/admin/Sources/Services/opengnsys.init index ba08c7ad..c28f3736 100755 --- a/admin/Sources/Services/opengnsys.init +++ b/admin/Sources/Services/opengnsys.init @@ -1,6 +1,6 @@ #! /bin/sh -################################################################################################################## +##########1.0###################################################################################################### ####### Script de arranque de los servicios de OpenGnSys: Servidor ogAdmServer, Servidor de repositorio ogAdmRepo, ####### Tracker Bittorrent y seeder de imagenes por Bittorrent ####### autor: jcxifre @@ -40,7 +40,11 @@ REPODAEMON=$BASEDIR/sbin/$REPONAME REPOCFG=$BASEDIR/etc/$REPONAME.cfg REPOLOG=$BASEDIR/log/$REPONAME.log REPODAEMON_OPTIONS="-f $REPOCFG -l $REPOLOG" - +############## ADV +REPOAUXNAME=ogAdmRepoAux +REPOAUXDAEMON=$BASEDIR/sbin/$REPOAUXNAME +REPOAUXPORT=$((`cat $SERVERCFG | grep PUERTO | cut -f2 -d"="` + 1)) +############## ADV # # Opciones Bittorrent # @@ -83,6 +87,11 @@ arranca_demonios() { echo -n "Iniciando demonio: "$REPONAME start-stop-daemon --start --quiet --background --exec $REPODAEMON -- $REPODAEMON_OPTIONS echo "." + ############ ADV + echo -n "Iniciando demonio: "$REPOAUXNAME + faucet $REPOAUXPORT --daemon --in bash -c "$REPOAUXDAEMON" + echo "." + ############ ADV fi if [ $RUN_BTTRACKER = "yes" ] then @@ -117,6 +126,10 @@ para_demonios() { echo -n "Parando demonio: "$REPONAME start-stop-daemon --stop --quiet --oknodo --name $REPONAME echo "." + ############# ADV + echo -n "Parando demonio: "$REPOAUXNAME + pkill faucet + ############ ADV echo -n "Parando demonio: "$SERVERNAME start-stop-daemon --stop --quiet --oknodo --name $SERVERNAME echo "." diff --git a/admin/WebConsole/xajax_0.5_standard.zip b/admin/WebConsole/xajax_0.5_standard.zip new file mode 100644 index 00000000..d247c280 Binary files /dev/null and b/admin/WebConsole/xajax_0.5_standard.zip differ diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 73873e87..ee18cab0 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -7,12 +7,18 @@ -#### AVISO: Editar configuración de acceso por defecto +#### AVISO: Editar configuración de acceso por defecto a la Base de Datos. MYSQL_ROOT_PASSWORD="passwordroot" # Clave root de MySQL OPENGNSYS_DATABASE="ogAdmBD" # Nombre de la base datos OPENGNSYS_DB_USER="usuog" # Usuario de acceso OPENGNSYS_DB_PASSWD="passusuog" # Clave del usuario +#### AVISO: NO EDITAR. +#### configuración de acceso smb para clientes OG. +OPENGNSYS_CLIENT_USER="opengnsys" # Nombre del usuario +OPENGNSYS_CLIENT_PASSWD="og" # Clave del usuario opengnsys + + # Sólo ejecutable por usuario root if [ "$(whoami)" != 'root' ] @@ -27,7 +33,7 @@ if [ -d "$PROGRAMDIR/../installer" ]; then USESVN=0 else USESVN=1 - SVN_URL=http://www.opengnsys.es/svn/trunk + SVN_URL=http://www.opengnsys.es/svn/branches/version1.0 fi WORKDIR=/tmp/opengnsys_installer @@ -37,7 +43,7 @@ INSTALL_TARGET=/opt/opengnsys LOG_FILE=/tmp/opengnsys_installation.log # Array con las dependencias -DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql nfs-kernel-server dhcp3-server udpcast bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent ) +DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql nfs-kernel-server dhcp3-server udpcast bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba unzip netpipes debootstrap subversion schroot squashfs-tools ) # Base de datos OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogAdmBD.sql @@ -540,11 +546,16 @@ function tftpConfigure() { # prepamos el directorio de la configuracion de pxe mkdir -p ${basetftp}/pxelinux.cfg cat > ${basetftp}/pxelinux.cfg/default <> /etc/samba/smb.conf < /etc/cron.d/torrentcreator + echo "5 * * * * root [ -x $INSTALL_TARGET/bin/torrent-tracker ] && $INSTALL_TARGET/bin/torrent-tracker" > /etc/cron.d/torrenttracker echoAndLog "${FUNCNAME}(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"." perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DBUSER/$OPENGNSYS_DB_USER/g; s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g; s/DATABASE/$OPENGNSYS_DATABASE/g" $INSTALL_TARGET/etc/ogAdmServer.cfg perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg @@ -1114,6 +1189,15 @@ if [ $? -ne 0 ]; then exit 1 fi +# Configuración SMB +smbConfigure +if [ $? -ne 0 ]; then + errorAndLog "Error while configuring nfs server!" + exit 1 +fi + + + # Configuración ejemplo DHCP dhcpConfigure if [ $? -ne 0 ]; then @@ -1207,6 +1291,36 @@ if [ $? -ne 0 ]; then exit 1 fi +# integrando xajax a la consola web +unzip /opt/opengnsys/www/xajax_0.5_standard.zip -d /opt/opengnsys/www/xajax + +#anadiendo usuario opengnsys al sistema sin login +useradd opengnsys + +#anadiendo usuario opengnsys a samba" +echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | smbpasswd -a -s $OPENGNSYS_CLIENT_USER + +#descargando cliente ogclient +wget http://www.opengnsys.es/downloads/20 -O /tmp/ogpart1.tgz +wget http://www.opengnsys.es/downloads/21 -O /tmp/ogpart2.tgz +wget http://www.opengnsys.es/downloads/22 -O /tmp/ogpart3.tgz +cat /tmp/ogpart1.tgz /tmp/ogpart2.tgz /tmp/ogpart3.tgz > /tmp/ogclient.tgz +tar xzvf /tmp/ogclient.tgz -C /opt/opengnsys/tftpboot/ + + + +#definiendo permisos +chown -R :$OPENGNSYS_CLIENT_USER /opt/opengnsys/log/clients +chown -R :$OPENGNSYS_CLIENT_USER /opt/opengnsys/images +chmod -R 775 /opt/opengnsys/log/clients +chmod -R 775 /opt/opengnsys/images +chown -R :$OPENGNSYS_CLIENT_USER /var/lib/tftpboot/ogclient +chmod -R 755 /var/lib/tftpboot/ogclient +chown -R :$APACHE_RUN_GROUP /var/lib/tftpboot/pxelinux.cfg +chmod -R 775 /var/lib/tftpboot/pxelinux.cfg + + + # Configuración de servicios de OpenGnSys openGnsysConfigure diff --git a/repoman/bin/torrent-tracker b/repoman/bin/torrent-tracker new file mode 100644 index 00000000..7714ffda --- /dev/null +++ b/repoman/bin/torrent-tracker @@ -0,0 +1,22 @@ +#!/bin/bash +BTTRACK=/usr/bin/bttrack.bittorrent +BTSEEDER=/usr/bin/btlaunchmany.bittornado +BTTRACKPORT=6969 +BTTRACKDFILE=/tmp/dstate +BTTRACKLOG=/opt/opengnsys/log/bttrack.log +BTINTERVAL=10 +BTTORRENTSDIR=/opt/opengnsys/images +BTALLOW_GET=1 +#BTTRACK_OPTIONS=" --port $BTTRACKPORT --dfile $BTTRACKDFILE --reannounce_interval $BTINTERVAL --logfile $BTTRACKLOG --allowed_dir $BTTORRENTSDIR --allow_get $BTALLOW_GET --parse_allowed_interval 1" +# nuevos parametros basados en EAC 05-04-2009 antonio doblas viso. +BTTRACK_OPTIONS=" --save_dfile_interval $BTINTERVAL --timeout_downloaders_interval $BTINTERVAL --port $BTTRACKPORT --dfile $BTTRACKDFILE --reannounce_interval $BTINTERVAL --logfile $BTTRACKLOG --allowed_dir $BTTORRENTSDIR --allow_get $BTALLOW_GET " +BTTRACKPID="/var/run/bttrack.pid" +BTSEEDERPID="/var/run/btseeder.pid" + +########################################################## + +pkill bttrack +rm $BTTRACKDFILE +sleep 2 +bttrack $BTTRACK_OPTIONS &>> $BTTRACKLOG & +ps aux | grep bttrack | grep -v grep | awk -F: '{print $3}' -- cgit v1.2.3-18-g5258 From 6905716c975b065a7463d9b66e645aef100bc4a0 Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 23 Feb 2011 18:03:26 +0000 Subject: integracion 1.0 - /bin del repo - tiket:300 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1480 a21b9725-9963-47de-94b9-378ad31fedc9 --- repoman/bin/sendFileMcast | 6 ++++-- repoman/bin/torrent-creator | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/repoman/bin/sendFileMcast b/repoman/bin/sendFileMcast index ee934503..92237a50 100755 --- a/repoman/bin/sendFileMcast +++ b/repoman/bin/sendFileMcast @@ -59,5 +59,7 @@ CERROR="8x8/128" # Envío de fichero por Multicast. which mbuffer &> /dev/null && MBUFFER="--pipe 'mbuffer -m 20M'" -udp-sender $MBUFFER --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" - +##### ADV v. 1.0 23/02/2011 +#version 0.10 # udp-sender $MBUFFER --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" +udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" +##### ADV v. 1.0 23/02/2011 diff --git a/repoman/bin/torrent-creator b/repoman/bin/torrent-creator index 8a14e3c6..5d43c753 100755 --- a/repoman/bin/torrent-creator +++ b/repoman/bin/torrent-creator @@ -39,6 +39,13 @@ for IMG in *.{img,pgz}; do # Crear fichero Torrent. echo "`date` : Inicio creación de fichero $TORRENT" >> $LOGFILE rm -f "$TORRENT" + ##### ADV v. 1.0 23/02/2011 + rm -f $IMG.sum + DATASUM=`md5sum "$IMG" | cut -f1 -d" "` + echo $DATASUM > $IMG.sum + nice -8 ctorrent -t "$IMG" -u $TRACKERURL -s "$TORRENT" -c $DATASUM + #### ADV v. 1.0 23/02/2011 + nice -8 ctorrent -t "$IMG" -u $TRACKERURL -s "$TORRENT" if [ -f "$TORRENT" ]; then echo "`date` : Fin creación de fichero $TORRENT" >> $LOGFILE -- cgit v1.2.3-18-g5258 From 006da8f0e62bcd378ecd45df251cf1ba1be66532 Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 23 Feb 2011 18:30:18 +0000 Subject: integracion 1.0 - modulos web - ticket:301 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1481 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../comandos/AsistenteCloneRemotePartition.php | 112 ++++++++++ admin/WebConsole/comandos/AsistenteDeployImage.php | 138 +++++++++++++ .../WebConsole/comandos/AsistenteParticionado.php | 131 ++++++++++++ admin/WebConsole/comandos/AsistenteUpdateCache.php | 138 +++++++++++++ .../includes/asistentes/AyudanteFormularios.php | 230 +++++++++++++++++++++ .../asistentes/formCloneRemotePartition.php | 68 ++++++ .../includes/asistentes/formDeployImage.php | 45 ++++ .../includes/asistentes/formParticionado.php | 40 ++++ admin/WebConsole/comandos/jscripts/asistentes.js | 37 ++++ 9 files changed, 939 insertions(+) create mode 100644 admin/WebConsole/comandos/AsistenteCloneRemotePartition.php create mode 100644 admin/WebConsole/comandos/AsistenteDeployImage.php create mode 100644 admin/WebConsole/comandos/AsistenteParticionado.php create mode 100644 admin/WebConsole/comandos/AsistenteUpdateCache.php create mode 100644 admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php create mode 100644 admin/WebConsole/comandos/includes/asistentes/formCloneRemotePartition.php create mode 100644 admin/WebConsole/comandos/includes/asistentes/formDeployImage.php create mode 100644 admin/WebConsole/comandos/includes/asistentes/formParticionado.php create mode 100644 admin/WebConsole/comandos/jscripts/asistentes.js diff --git a/admin/WebConsole/comandos/AsistenteCloneRemotePartition.php b/admin/WebConsole/comandos/AsistenteCloneRemotePartition.php new file mode 100644 index 00000000..839dfb2b --- /dev/null +++ b/admin/WebConsole/comandos/AsistenteCloneRemotePartition.php @@ -0,0 +1,112 @@ + + + + + Administración web de aulas + + + + + + '?> + '?> +printJavascript('../xajax/'); +?> + + + + +'.$descricomando.' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + ?> + + +
+ + + + + + + + + + + + +
+
+ + + + + + \ No newline at end of file diff --git a/admin/WebConsole/comandos/AsistenteDeployImage.php b/admin/WebConsole/comandos/AsistenteDeployImage.php new file mode 100644 index 00000000..d7dfc695 --- /dev/null +++ b/admin/WebConsole/comandos/AsistenteDeployImage.php @@ -0,0 +1,138 @@ + + + + + Administración web de aulas + + + + + + '?> + '?> + + +printJavascript('../xajax/'); +?> + + + + +aulas 16->ordenadores +# idambito: id de los elementos en su correspondiente tabla-ambito (aulas, ordenadores...) +# nombreambito: nombre del elemento. + +switch($ambito){ + case $AMBITO_CENTROS : + $urlimg='../images/iconos/centros.gif'; + $textambito=$TbMsg[0]; + break; + case $AMBITO_GRUPOSAULAS : + $urlimg='../images/iconos/carpeta.gif'; + $textambito=$TbMsg[1]; + break; + case $AMBITO_AULAS : + $urlimg='../images/iconos/aula.gif'; + $textambito=$TbMsg[2]; + if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; + if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; + break; + case $AMBITO_GRUPOSORDENADORES : + $urlimg='../images/iconos/carpeta.gif'; + $textambito=$TbMsg[3]; + break; + case $AMBITO_ORDENADORES : + $urlimg='../images/iconos/ordenador.gif'; + $textambito=$TbMsg[4]; + if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; + if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; + break; + } + echo '

'.$descricomando.' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + + $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil; + pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false); + + ?> + + +
+ + + + + + + + + + +
+
+ + + + + + \ No newline at end of file diff --git a/admin/WebConsole/comandos/AsistenteParticionado.php b/admin/WebConsole/comandos/AsistenteParticionado.php new file mode 100644 index 00000000..b48e0cf5 --- /dev/null +++ b/admin/WebConsole/comandos/AsistenteParticionado.php @@ -0,0 +1,131 @@ + + + + + Administración web de aulas + + + + + + '?> + '?> + + +printJavascript('../xajax/'); +?> + + + + +'.$descricomando.' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + + $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil; + pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false); + + ?> + + +
+ + + + + + + + + + +
+
+ + + + + + \ No newline at end of file diff --git a/admin/WebConsole/comandos/AsistenteUpdateCache.php b/admin/WebConsole/comandos/AsistenteUpdateCache.php new file mode 100644 index 00000000..7e06210f --- /dev/null +++ b/admin/WebConsole/comandos/AsistenteUpdateCache.php @@ -0,0 +1,138 @@ + + + + + Administración web de aulas + + + + + + '?> + '?> + + +printJavascript('../xajax/'); +?> + + + + +aulas 16->ordenadores +# idambito: id de los elementos en su correspondiente tabla-ambito (aulas, ordenadores...) +# nombreambito: nombre del elemento. + +switch($ambito){ + case $AMBITO_CENTROS : + $urlimg='../images/iconos/centros.gif'; + $textambito=$TbMsg[0]; + break; + case $AMBITO_GRUPOSAULAS : + $urlimg='../images/iconos/carpeta.gif'; + $textambito=$TbMsg[1]; + break; + case $AMBITO_AULAS : + $urlimg='../images/iconos/aula.gif'; + $textambito=$TbMsg[2]; + if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; + if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; + break; + case $AMBITO_GRUPOSORDENADORES : + $urlimg='../images/iconos/carpeta.gif'; + $textambito=$TbMsg[3]; + break; + case $AMBITO_ORDENADORES : + $urlimg='../images/iconos/ordenador.gif'; + $textambito=$TbMsg[4]; + if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; + if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; + break; + } + echo '

'.$descricomando.' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + + $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil; + pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false); + + ?> + + +
+ + + + + + + + + + +
+
+ + + + + + diff --git a/admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php b/admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php new file mode 100644 index 00000000..3a311885 --- /dev/null +++ b/admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php @@ -0,0 +1,230 @@ +texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas where aulas.idaula=' . $idambito ; +} +if ($ambito=16) +{ +$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ; +} + + $rs=new Recordset; + $rs->Comando=&$cmd; +if ($rs->Abrir()){ + $rs->Primero(); + $SelectHtml.='puerto :
'; + $rs->Siguiente(); + $SelectHtml.='direccion Mcast :
'; + $rs->Siguiente(); + switch ($rs->campos["modomul"]) + { + case 1: + $modomulticast="half-duplex"; + break; + default: + $modomulticast="full-duplex"; + break; + } + $SelectHtml.='modo :
'; + $rs->Siguiente(); + $SelectHtml.='velocidad :
'; + + $rs->Cerrar(); + } + $SelectHtml.='nº Max. clientes :
'; + $SelectHtml.='Tiempo(seg) Max. Espera :
'; + + return($SelectHtml); +} + + +#devuelve los elementos [texto] p2p para un formulario. +#$ambito (aula=4 y ordenadores=16) +function htmlForm_p2p($cmd,$ambito,$idambito) +{ +//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; +if ($ambito=4) +{ +$cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas where aulas.idaula=' . $idambito ; +} +if ($ambito=16) +{ +$cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ; +} + + $rs=new Recordset; + $rs->Comando=&$cmd; +if ($rs->Abrir()){ + $rs->Primero(); + $SelectHtml.='modo :
'; + $rs->Siguiente(); + $SelectHtml.='tiempo de semilla :
'; + $rs->Siguiente(); + $rs->Cerrar(); + } + +return($SelectHtml); +} + + +function htmlOPTION_equipos($cmd,$idambito) +{ + $SelectHtml=""; + $cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaula=' . $idambito ; + $rs=new Recordset; + $rs->Comando=&$cmd; + //$SelectHtml.= ''; + return($SelectHtml); +} + +function htmlOPTION_images($cmd) +{ + $SelectHtml=""; + $cmd->texto="SELECT *,repositorios.ip as iprepositorio FROM imagenes + INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio"; + $rs=new Recordset; + $rs->Comando=&$cmd; + + if ($rs->Abrir()){ + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.=''; + $rs->Siguiente(); + } + $rs->Cerrar(); + } + return($SelectHtml); +} + + + +function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw) +{ + $SelectHtml=""; + $cmd->texto="SELECT *,repositorios.ip as iprepositorio FROM imagenes + INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio"; + if($sw) // Imágenes con el mismo tipo de partición + $cmd->texto.= " WHERE imagenes.codpar=".$codpar; + else + $cmd->texto.= " WHERE imagenes.codpar<>".$codpar; + + $cmd->texto.=" AND imagenes.numpar>0 AND imagenes.codpar>0 AND imagenes.idrepositorio>0"; // La imagene debe existir y estar creada + $rs=new Recordset; + $rs->Comando=&$cmd; + if($sw) $des=1; else $des=0; + $SelectHtml.= ''; + return($SelectHtml); +} + + + +function htmlOPTION_typepartnotcache($cmd) +{ + $SelectHtml=""; + $cmd->texto='SELECT tipopar FROM tipospar WHERE NOT tipopar = "CACHE"'; + $rs=new Recordset; + $rs->Comando=&$cmd; + //$SelectHtml.= ''; + return($SelectHtml); +} + + +function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) +{ + global $tbKeys; // Tabla contenedora de claves de configuración + global $conKeys; // Contador de claves de configuración + global $TbMsg; + + $colums=7; + echo ''; + echo ' '.$TbMsg[20].' '; // Número de partición + echo ' '.$TbMsg[24].' '; // Tipo de partición + echo ' '.$TbMsg[27].' '; // Sistema de ficheros + echo ' '.$TbMsg[21].' '; // Sistema Operativo Instalado + echo ' '.$TbMsg[22].' '; // Tamaño + echo ' '.$TbMsg[25].' '; // Imagen instalada + echo ' '.$TbMsg[26].' '; // Perfil software + echo ''; + + $auxCfg=split("@",$configuraciones); // Crea lista de particiones + for($i=0;$i'.chr(13); + echo' '.$tbKeys[$k]["numpar"].' '.chr(13); + echo' '.$tbKeys[$k]["tipopar"].' '.chr(13); + + //echo' '.$tbKeys[$k]["sistemafichero"].' '.chr(13); + echo' '.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + //echo ' '.$tbKeys[$k]["nombreso"].' '.chr(13); + echo ' '.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + //echo' '.formatomiles($tbKeys[$k]["tamano"]).' '.chr(13); + echo' '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + //echo' '.$tbKeys[$k]["imagen"].' '.chr(13); + echo' '.tomaImagenes($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + //echo' '.$tbKeys[$k]["perfilsoft"].' '.chr(13); + echo' '.tomaPerfiles($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + echo''.chr(13); + break; + } + } + } + echo ' '; +} + +?> \ No newline at end of file diff --git a/admin/WebConsole/comandos/includes/asistentes/formCloneRemotePartition.php b/admin/WebConsole/comandos/includes/asistentes/formCloneRemotePartition.php new file mode 100644 index 00000000..34dd83e9 --- /dev/null +++ b/admin/WebConsole/comandos/includes/asistentes/formCloneRemotePartition.php @@ -0,0 +1,68 @@ + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/WebConsole/comandos/includes/asistentes/formDeployImage.php b/admin/WebConsole/comandos/includes/asistentes/formDeployImage.php new file mode 100644 index 00000000..c02ad081 --- /dev/null +++ b/admin/WebConsole/comandos/includes/asistentes/formDeployImage.php @@ -0,0 +1,45 @@ + + + opciones basicas opciones multicast opciones torrent opciones unicast + + + + + +
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + diff --git a/admin/WebConsole/comandos/includes/asistentes/formParticionado.php b/admin/WebConsole/comandos/includes/asistentes/formParticionado.php new file mode 100644 index 00000000..aa669633 --- /dev/null +++ b/admin/WebConsole/comandos/includes/asistentes/formParticionado.php @@ -0,0 +1,40 @@ + + + + Particion + Tipo + Tamaño + + + + 1 + + + + + + 2 + + + + + + 3 + + + + + + 4 + + + \ No newline at end of file diff --git a/admin/WebConsole/comandos/jscripts/asistentes.js b/admin/WebConsole/comandos/jscripts/asistentes.js new file mode 100644 index 00000000..c5d37f3c --- /dev/null +++ b/admin/WebConsole/comandos/jscripts/asistentes.js @@ -0,0 +1,37 @@ +// *********************************************************************************************************** +// Libreria de scripts de Javascript +// Autor: +// Fecha Creación: 2011 +// Fecha Última modificación: enero-2011 +// Nombre del fichero: asistentes.js +// Descripción : +// Este fichero implementa las funciones javascript del fichero AsistentesEjecutarScripts.php (Comandos) +// *********************************************************************************************************** + +function codeCloneRemotePartition(form){ +//alert("codeCloneRemotePartition(form)"); +form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value; +} + +function codeDeployImage(form){ +alert("codeDeployImage(form)"); +switch (form.idmetodo.value) +{ +case "MULTICAST": + protocol="MULTICAST " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " "; +break; +case "TORRENT": +protocol=" TORRENT " + form.modp2p.value + ":" + form.timep2p.value; +break; +} +//form.codigo.value="deployImage REPO /"; +form.codigo.value="deployImage REPO /" + form.idimagen.value + " 1 " + form.idparticion.value + " " + protocol ; +} + +function codeParticionado(form){ +alert("codeParticionado(form)"); +form.codigo.value="ogUnmountCache \n ogUnmountAll 1 \n initCache " + form.size4.value +" \n ogListPartitions 1 \n ogCreatePartitions 1 " + form.part1.value + ":" + form.size1.value + " \n ogListPartitions 1"; +// +// ; +// + " " + form.part2.value + ":" + form.size2.value + " " + form.part3.value + ":" + form.size3.value + " ogListPartitions 1"; +} -- cgit v1.2.3-18-g5258 From 58d08a2da3bdfac6b12a0f037377dc5e972eac9f Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 23 Feb 2011 19:05:23 +0000 Subject: integrando modulos web version 1.0 ticket:301 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1482 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/gestores/gestor_aulas.php | 35 +++- admin/WebConsole/gestores/gestor_ordenadores.php | 18 +- admin/WebConsole/gestores/gestor_pxe.php | 179 +++++++++++++++++ admin/WebConsole/jscripts/aulas.js | 47 +++++ admin/WebConsole/principal/aula.php | 14 ++ admin/WebConsole/principal/aulas.php | 66 +++++++ admin/WebConsole/principal/boot.php | 217 +++++++++++++++++++++ admin/WebConsole/principal/verlog.php | 88 +++++++++ admin/WebConsole/principal/verlogseguimiento.php | 88 +++++++++ admin/WebConsole/propiedades/propiedades_aulas.php | 86 +++++++- .../propiedades/propiedades_ordenadores.php | 35 +++- admin/WebConsole/varios/incorporaordenadores.php | 3 +- 12 files changed, 864 insertions(+), 12 deletions(-) create mode 100755 admin/WebConsole/gestores/gestor_pxe.php create mode 100644 admin/WebConsole/principal/boot.php create mode 100644 admin/WebConsole/principal/verlog.php create mode 100644 admin/WebConsole/principal/verlogseguimiento.php diff --git a/admin/WebConsole/gestores/gestor_aulas.php b/admin/WebConsole/gestores/gestor_aulas.php index 27447ac5..013c03c1 100644 --- a/admin/WebConsole/gestores/gestor_aulas.php +++ b/admin/WebConsole/gestores/gestor_aulas.php @@ -41,7 +41,12 @@ $modomul=0; $ipmul=""; $pormul=0; $velmul=0; - +############## ADV +$router=0; +$netmask=0; +$modp2p=0; +$timep2p=0; +############ ADV if (isset($_POST["opcion"])) $opcion=$_POST["opcion"]; // Recoge parametros if (isset($_POST["grupoid"])) $grupoid=$_POST["grupoid"]; @@ -66,6 +71,12 @@ if (isset($_POST["modomul"])) $modomul=$_POST["modomul"]; if (isset($_POST["ipmul"])) $ipmul=$_POST["ipmul"]; if (isset($_POST["pormul"])) $pormul=$_POST["pormul"]; if (isset($_POST["velmul"])) $velmul=$_POST["velmul"]; +############## ADV +if (isset($_POST["router"])) $router=$_POST["router"]; +if (isset($_POST["netmask"])) $netmask=$_POST["netmask"]; +if (isset($_POST["modp2p"])) $modp2p=$_POST["modp2p"]; +if (isset($_POST["timep2p"])) $timep2p=$_POST["timep2p"]; +################# ADV $gidmenu=0; $gidproautoexec=0; @@ -166,12 +177,20 @@ function Gestiona(){ global $ipmul; global $pormul; global $velmul; - +######################### ADV + global $router; + global $netmask; + global $modp2p; + global $timep2p; +########################## ADV + global $op_alta; global $op_modificacion; global $op_eliminacion; global $tablanodo; + + $cmd->CreaParametro("@grupoid",$grupoid,1); $cmd->CreaParametro("@idcentro",$idcentro,1); @@ -194,13 +213,19 @@ function Gestiona(){ $cmd->CreaParametro("@ipmul",$ipmul,0); $cmd->CreaParametro("@pormul",$pormul,1); $cmd->CreaParametro("@velmul",$velmul,1); +############ ADV + $cmd->CreaParametro("@netmask",$netmask,0); + $cmd->CreaParametro("@router",$router,0); + $cmd->CreaParametro("@modp2p",$modp2p,0); + $cmd->CreaParametro("@timep2p",$timep2p,1); +############### ADV switch($opcion){ case $op_alta : $cmd->texto="INSERT INTO aulas(idcentro,grupoid,nombreaula,urlfoto,cagnon,pizarra,ubicacion,comentarios, - puestos,horaresevini,horaresevfin,modomul,ipmul,pormul,velmul) + puestos,horaresevini,horaresevfin,modomul,ipmul,pormul,velmul,router,netmask,modp2p,timep2p) VALUES (@idcentro,@grupoid,@nombreaula,@urlfoto,@cagnon,@pizarra,@ubicacion,@comentarios, - @puestos,@horaresevini,@horaresevfin,@modomul,@ipmul,@pormul,@velmul)"; + @puestos,@horaresevini,@horaresevfin,@modomul,@ipmul,@pormul,@velmul,@router,@netmask,@modp2p,@timep2p)"; $resul=$cmd->Ejecutar(); if ($resul){ // Crea una tabla nodo para devolver a la página que llamó ésta $idaula=$cmd->Autonumerico(); @@ -214,7 +239,7 @@ function Gestiona(){ case $op_modificacion: $cmd->texto="UPDATE aulas SET nombreaula=@nombreaula,urlfoto=@urlfoto,cagnon=@cagnon,pizarra=@pizarra, ubicacion=@ubicacion,comentarios=@comentarios,puestos=@puestos,horaresevini=@horaresevini, - horaresevfin=@horaresevfin,modomul=@modomul,ipmul=@ipmul,pormul=@pormul,velmul=@velmul WHERE idaula=@idaula"; + horaresevfin=@horaresevfin,modomul=@modomul,ipmul=@ipmul,pormul=@pormul,velmul=@velmul,router=@router,netmask=@netmask,modp2p=@modp2p,timep2p=@timep2p WHERE idaula=@idaula"; $resul=$cmd->Ejecutar(); //echo $cmd->texto; if ($resul){ // Crea una tabla nodo para devolver a la página que llamó ésta diff --git a/admin/WebConsole/gestores/gestor_ordenadores.php b/admin/WebConsole/gestores/gestor_ordenadores.php index 3316c428..3b5645b4 100644 --- a/admin/WebConsole/gestores/gestor_ordenadores.php +++ b/admin/WebConsole/gestores/gestor_ordenadores.php @@ -31,6 +31,10 @@ $idmenu=0; $idprocedimiento=0; $idimagen=0; $cache=0; +#### ADV +$netiface=""; +$netdriver=""; +### ADV if (isset($_POST["opcion"])) $opcion=$_POST["opcion"]; // Recoge parametros if (isset($_POST["grupoid"])) $grupoid=$_POST["grupoid"]; @@ -48,6 +52,9 @@ if (isset($_POST["cache"])) $cache=$_POST["cache"]; if(empty($cache)) $cache=0; +if (isset($_POST["netiface"])) $netiface=$_POST["netiface"]; +if (isset($_POST["netdriver"])) $netdriver=$_POST["netdriver"]; + $tablanodo=""; // Arbol para nodos insertados //________________________________________________________________________________________________________ $cmd=CreaComando($cadenaconexion); // Crea objeto comando @@ -138,6 +145,8 @@ function Gestiona(){ global $idmenu; global $idprocedimiento; global $cache; + global $netiface; + global $netdriver; global $op_alta; global $op_modificacion; @@ -156,12 +165,15 @@ function Gestiona(){ $cmd->CreaParametro("@idmenu",$idmenu,1); $cmd->CreaParametro("@idprocedimiento",$idprocedimiento,1); $cmd->CreaParametro("@cache",$cache,1); + $cmd->CreaParametro("@netiface",$netiface,0); + $cmd->CreaParametro("@netdriver",$netdriver,0); + switch($opcion){ case $op_alta : $cmd->texto="INSERT INTO ordenadores(nombreordenador,ip,mac,idperfilhard,idrepositorio, - idmenu,idproautoexec,idaula,grupoid,cache) VALUES (@nombreordenador,@ip,@mac,@idperfilhard,@idrepositorio, - @idmenu,@idprocedimiento,@idaula,@grupoid,@cache)"; + idmenu,idproautoexec,idaula,grupoid,cache,netiface,netdriver) VALUES (@nombreordenador,@ip,@mac,@idperfilhard,@idrepositorio, + @idmenu,@idprocedimiento,@idaula,@grupoid,@cache,@netiface,@netdriver)"; $resul=$cmd->Ejecutar(); //echo $cmd->texto; @@ -176,7 +188,7 @@ function Gestiona(){ break; case $op_modificacion: $cmd->texto="UPDATE ordenadores SET nombreordenador=@nombreordenador,ip=@ip,mac=@mac,idperfilhard=@idperfilhard, - idrepositorio=@idrepositorio,idmenu=@idmenu,idproautoexec=@idprocedimiento,cache=@cache + idrepositorio=@idrepositorio,idmenu=@idmenu,idproautoexec=@idprocedimiento,cache=@cache,netiface=@netiface,netdriver=@netdriver WHERE idordenador=@idordenador"; $resul=$cmd->Ejecutar(); //echo $cmd->texto; diff --git a/admin/WebConsole/gestores/gestor_pxe.php b/admin/WebConsole/gestores/gestor_pxe.php new file mode 100755 index 00000000..cbde8883 --- /dev/null +++ b/admin/WebConsole/gestores/gestor_pxe.php @@ -0,0 +1,179 @@ +"; +echo ""; +echo ""; +echo " gestion de equipos "; +echo ""; +echo ""; +echo ""; + + + +#echo('litambito con valor: '. $_GET['litambito']); +#echo ('idambito con valor: ' . $_GET['idaula']); +#echo ('nombreambito con valor: ' . $_GET['nombreambito']); + +$lista = explode(";",$_POST['listOfItems']); +foreach ($lista as $sublista) { + $elementos = explode("|",$sublista); + $hostname=$elementos[1]; + $optboot=$elementos[0]; + ogBootServer($cmd,$optboot,$hostname); +} +echo " "; +echo " "; + +function ogBootServer($cmd,$optboot,$hostname) +{ +global $cmd; +global $hostname; +global $optboot; +$cmd->CreaParametro("@optboot",$optboot,0); +$cmd->CreaParametro("@hostname",$hostname,0); +$cmd->texto="update ordenadores set arranque=@optboot where nombreordenador=@hostname"; +$cmd->Ejecutar(); + +$cmd->texto="SELECT ordenadores.ip AS ip, ordenadores.mac AS mac, + ordenadores.netiface AS netiface, aulas.netmask AS netmask, aulas.router AS router, + repositorios.ip AS iprepo FROM ordenadores + join aulas on ordenadores.idaula=aulas.idaula + join repositorios on ordenadores.idrepositorio=repositorios.idrepositorio + where ordenadores.nombreordenador='". $hostname ."'"; +$rs=new Recordset; +$rs->Comando=&$cmd; +if (!$rs->Abrir()) echo "error"; +$rs->Primero(); + $mac=$rs->campos["mac"]; + $netiface=$rs->campos["netiface"]; + $ip=$rs->campos["ip"]; + $router=$rs->campos["router"]; + $netmask=$rs->campos["netmask"]; + $repo=$rs->campos["iprepo"]; + $infohost=" IP=" + . $ip . ":" + . $repo .":" + . $router . ":" + . $netmask .":" + . $hostname .":" + . $netiface . ":none repo=" + . $repo; +$rs->Cerrar(); + +###################obtenemos las variables de red del aula. + + #02.1 obtenemos nombre fichero mac + $mac= substr($mac,0,2) . ":" . substr($mac,2,2) . ":" . substr($mac,4,2) . ":" . substr($mac,6,2) . ":" . substr($mac,8,2) . ":" . substr($mac,10,2); + $macfile="01-" . str_replace(":","-",strtolower($mac)); + $nombre_archivo="/var/lib/tftpboot/pxelinux.cfg/" . $macfile; + + +########## Escribimos el fichero mac +if (!$gestion=fopen($nombre_archivo, 'w+')) +{ + echo "No se puede abrir el archivo ($nombre_archivo)"; + return; +} +# cuales son los parametros del menu +fwrite($gestion, "DEFAULT syslinux/vesamenu.c32 \n"); +fwrite($gestion, "MENU TITLE Aplicacion OpenGnsys \n"); + +$cmd->texto="SELECT itemboot.label, itemboot.kernel, + itemboot.append, menuboot.timeout, menuboot.prompt, + menuboot.description, menuboot_itemboot.default + From itemboot,menuboot_itemboot,menuboot + WHERE menuboot_itemboot.labelmenu=menuboot.label + AND menuboot_itemboot.labelitem=itemboot.label + AND menuboot.label='" . $optboot . "'"; + +$rs->Comando=&$cmd; +if (!$rs->Abrir()) echo "error"; +$rs->Primero(); +while (!$rs->EOF) +{ + fwrite($gestion, " \n"); + fwrite($gestion, "LABEL " . $rs->campos['label'] . " \n"); + fwrite($gestion, "MENU LABEL " . $rs->campos['label'] . " \n"); + if ( $rs->campos["default"] == true) + { + fwrite($gestion, "MENU DEFAULT \n"); + } + fwrite($gestion, $rs->campos["kernel"] . " \n"); + # set netmask cird para ogclient + $isnfsroot=substr_count($rs->campos["append"] , "boot=oginit"); + if ($isnfsroot > 0) + { + $netmask=$netmask; + } + else + { + $netmask=netmask2cidr($netmask); + } + + $iseac=substr_count($rs->campos["append"] , "engine=testing"); + $isinitrd=substr_count($rs->campos["append"] , "initrd.gz"); + + if ($iseac > 0) + { + $append=$rs->campos["append"]; + fwrite($gestion, $append . " " . $infohost . " \n "); + } + + elseif ($isinitrd > 0) + { + $append=$rs->campos["append"]; + fwrite($gestion, $append . " repo=" . $repo . " \n"); + } + else + { + fwrite($gestion, $rs->campos["append"] . " \n"); + } + + $prompt=$rs->campos["prompt"]; + $timeout=$rs->campos["timeout"]; + + $rs->Siguiente(); +} +$rs->Cerrar(); + + + + fwrite($gestion, " \n"); + fwrite($gestion, "PROMPT " . $prompt ." \n"); + fwrite($gestion, "TIMEOUT " . $timeout . " \n"); + fwrite($gestion, " \n"); + fclose($gestion); + exec("chown www-data:www-data /var/lib/tftpboot/pxelinux.cfg/". $macfile); + exec("chmod 777 /var/lib/tftpboot/pxelinux.cfg/". $macfile); + + + + +} + +function netmask2cidr($netmask) { + $cidr = 0; + foreach (explode('.', $netmask) as $number) { + for (;$number> 0; $number = ($number <<1) % 256) { + $cidr++; + } + } + return $cidr; + } + +?> \ No newline at end of file diff --git a/admin/WebConsole/jscripts/aulas.js b/admin/WebConsole/jscripts/aulas.js index fb3fe373..b845ec7d 100644 --- a/admin/WebConsole/jscripts/aulas.js +++ b/admin/WebConsole/jscripts/aulas.js @@ -130,6 +130,31 @@ function consola_remota(ambito){ Ambito=ambito; consola_eco(1); } + +//________________________________________________________________________________________________________ +// +// Abre una ventana independiente, para ver el log del ordenador cliente +//________________________________________________________________________________________________________ + + +function ver_log(ambito){ + var nombre_ordenador=currentNodo.toma_infonodo(); + var whref="../principal/verlog.php?nombreordenador="+nombre_ordenador; + window.open(whref,"","width=400,height=100,scrollbars=YES,resizable=YES") +} + +//________________________________________________________________________________________________________ +// +// Abre una ventana independiente, para ver el log del ordenador cliente +//________________________________________________________________________________________________________ + + +function ver_log_seguimiento(ambito){ + var nombre_ordenador=currentNodo.toma_infonodo(); + var whref="../principal/verlogseguimiento.php?nombreordenador="+nombre_ordenador; + window.open(whref,"","width=400,height=100,scrollbars=YES,resizable=YES") +} + //________________________________________________________________________________________________________ // // Abre una ventana para mostrar el eco de una consola @@ -334,4 +359,26 @@ function incorporarordenador(){ window.open(whref,"frame_contenidos") } +function ver_boot(){ + reset_contextual(-1,-1) // Oculta menu contextual + var idambito=currentNodo.toma_identificador(); + var litambito=currentNodo.toma_sufijo(); + var nombreambito=currentNodo.toma_infonodo(); + //alert(idambito); + //alert('nombreambito' + nombreambito); + //alert('litambito' + litambito); + var whref="boot.php?litambito="+litambito+"&idambito="+idambito+"&nombreambito="+nombreambito + window.open(whref,"frame_contenidos") +} +function ver_startpages(){ + reset_contextual(-1,-1) // Oculta menu contextual + var idambito=currentNodo.toma_identificador(); + var litambito=currentNodo.toma_sufijo(); + var nombreambito=currentNodo.toma_infonodo(); + //alert(idambito); + //alert('nombreambito' + nombreambito); + //alert('litambito' + litambito); + var whref="./startpages/startpage.php?litambito="+litambito+"&idambito="+idambito+"&nombreambito="+nombreambito + window.open(whref,"frame_contenidos") +} diff --git a/admin/WebConsole/principal/aula.php b/admin/WebConsole/principal/aula.php index b7b878ae..a4f6136e 100644 --- a/admin/WebConsole/principal/aula.php +++ b/admin/WebConsole/principal/aula.php @@ -300,6 +300,8 @@ function ContextualXMLAulas(){ $layerXML.=''; $layerXML.=''; + + $layerXML.='CreaMenuContextual($XMLcontextual); $XMLcontextual=ContextualXMLComandos($LITAMBITO_ORDENADORES,$AMBITO_ORDENADORES); echo $flotante->CreaMenuContextual($XMLcontextual); + +// Crea submenu contextual de clase de gestion de arranque pxe +$XMLcontextual=ContextualXMLNetBoot(); // Crea submenu contextual de acciones +echo $flotante->CreaMenuContextual($XMLcontextual); + //___________________________________________________________________________________________________ ?> @@ -342,6 +347,8 @@ function ContextualXMLGruposAulas(){ $layerXML.=' clase="menu_contextual"'; $layerXML.='>'; + + $layerXML.=' diff --git a/admin/WebConsole/principal/boot.php b/admin/WebConsole/principal/boot.php new file mode 100644 index 00000000..39e01c9d --- /dev/null +++ b/admin/WebConsole/principal/boot.php @@ -0,0 +1,217 @@ + +Administración web de aulas + + + + + + + + + + + + + + + + + +

Gestión Arranque Avanzado
+ +

+ + + + + + + +"; +?> + + + + + + + +texto="SELECT * FROM menuboot where label <> 'pxe' "; +$rsmenu=new Recordset; +$rsmenu->Comando=&$cmd; +if (!$rsmenu->Abrir()) echo "error"; +$rsmenu->Primero(); +while (!$rsmenu->EOF) +{ + echo ""; + echo ""; + $rsmenu->Siguiente(); +} +$rsmenu->Cerrar(); + + + + + + + +// esta funcion genera los elementos de un select(formulario html) donde aparecen los nombres de los ordenadores, según su menu pxe +function listaequipos($cmd,$menupxe,$seleccion) +{ +$cmd->texto="SELECT * FROM ordenadores where arranque='" . $menupxe ."' " . $seleccion; +$rs=new Recordset; +$rs->Comando=&$cmd; +if (!$rs->Abrir()) echo "error"; +$rs->Primero(); +while (!$rs->EOF) +{ + echo ""; + $rs->Siguiente(); +} +$rs->Cerrar(); +} + +?> + + + + +
+ +OGclient
+ +
"; + echo $rsmenu->campos['description']; + #echo " " . $rsmenu->campos['description'] . "
". $rs->campos['label'] . "
"; + echo "
"; + echo ""; + echo ""; + echo "
"; + echo ""; + echo "
+ + + diff --git a/admin/WebConsole/principal/verlog.php b/admin/WebConsole/principal/verlog.php new file mode 100644 index 00000000..f971afff --- /dev/null +++ b/admin/WebConsole/principal/verlog.php @@ -0,0 +1,88 @@ +texto="SELECT * FROM ordenadores WHERE nombreordenador='".$nombreordenador."'"; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) return(false); // Error al abrir recordset + $rs->Primero(); + if (!$rs->EOF){ + $ip=$rs->campos["ip"]; + $rs->Cerrar(); + } +} + +?> + + + +Log: <? echo $_GET["nombreordenador"] ?> + + + + + + + + + +
+ + + Log del equipo ". $nombreordenador ." con ip " . $ip ." "; +?> + +
+ + +
+ + + \ No newline at end of file diff --git a/admin/WebConsole/principal/verlogseguimiento.php b/admin/WebConsole/principal/verlogseguimiento.php new file mode 100644 index 00000000..2a537998 --- /dev/null +++ b/admin/WebConsole/principal/verlogseguimiento.php @@ -0,0 +1,88 @@ +texto="SELECT * FROM ordenadores WHERE nombreordenador='".$nombreordenador."'"; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) return(false); // Error al abrir recordset + $rs->Primero(); + if (!$rs->EOF){ + $ip=$rs->campos["ip"]; + $rs->Cerrar(); + } +} + +?> + + + +Log: <? echo $_GET["nombreordenador"] ?> + + + + + + + + + +
+ + + Log del equipo ". $nombreordenador ." con ip " . $ip ." "; +?> + +
+ + +
+ + + \ No newline at end of file diff --git a/admin/WebConsole/propiedades/propiedades_aulas.php b/admin/WebConsole/propiedades/propiedades_aulas.php index e77efe11..afd914dd 100644 --- a/admin/WebConsole/propiedades/propiedades_aulas.php +++ b/admin/WebConsole/propiedades/propiedades_aulas.php @@ -167,7 +167,62 @@ else ?> + + Router   + '.$router.''; + else + echo ''; + ?> + + + + Netmask   + '.$netmask.''; + else + echo ''; + ?> + + + + + + P2P Modo:   + '.$modp2p.''; + else + echo ''; + $p2pmetodos="seeder=seeder".chr(13); + $p2pmetodos.="leecher=leecher".chr(13); + $p2pmetodos.="peer=peer"; + echo HTMLCTESELECT($p2pmetodos,"modp2p","estilodesple","",$modp2p,100).''; + ?> + + + + + + P2P tiempo (seg) para semilla:   + '.$timep2p.''; + else + echo ''; + ?> + + + + + + + + +   '.$pormul.''; else - echo ''; + echo ''; + $pormulmetodos="9000=9000".chr(13); + $pormulmetodos.="9002=9002".chr(13); + $pormulmetodos.="9004=9004".chr(13); + $pormulmetodos.="9006=9006".chr(13); + $pormulmetodos.="9010=9010".chr(13); + $pormulmetodos.="9012=9012".chr(13); + $pormulmetodos.="9014=9014"; + echo HTMLCTESELECT($pormulmetodos,"pormul","estilodesple","",$pormul,100).''; ?> @@ -314,7 +377,12 @@ function TomaPropiedades($cmd,$ida) global $gidrepositorio; global $gidperfilhard; global $gcache; - +###################### ADV + global $router; + global $netmask; + global $modp2p; + global $timep2p; +###################### ADV global $modomul; global $ipmul; global $pormul; @@ -332,6 +400,12 @@ function TomaPropiedades($cmd,$ida) $horaresevini=0; $horaresevfin=0; $grupoid=0; +## ADV ######################################### + $router=0; + $netmask=0; + $modp2p=0; + $timep2p=0; +### ADV ######################################## $modomul=0; $ipmul=0; $pormul=0; @@ -349,6 +423,8 @@ function TomaPropiedades($cmd,$ida) $gidperfilhard=0; $gcache=0; + + $rs=new Recordset; $cmd->texto="SELECT count( * ) AS numordenadores, aulas.* , group_concat(DISTINCT cast( ordenadores.idmenu AS char( 11 ) ) @@ -387,6 +463,12 @@ function TomaPropiedades($cmd,$ida) $ipmul=$rs->campos["ipmul"]; $pormul=$rs->campos["pormul"]; $velmul=$rs->campos["velmul"]; +#################### ADV + $router=$rs->campos["router"]; + $netmask=$rs->campos["netmask"]; + $modp2p=$rs->campos["modp2p"]; + $timep2p=$rs->campos["timep2p"]; +###################### ADV $ordenadores=$rs->campos["numordenadores"]; $idmenu=$rs->campos["idmenus"]; diff --git a/admin/WebConsole/propiedades/propiedades_ordenadores.php b/admin/WebConsole/propiedades/propiedades_ordenadores.php index ab8c832d..1d3e7b41 100644 --- a/admin/WebConsole/propiedades/propiedades_ordenadores.php +++ b/admin/WebConsole/propiedades/propiedades_ordenadores.php @@ -14,6 +14,7 @@ include_once("../includes/constantes.php"); include_once("../includes/CreaComando.php"); include_once("../includes/TomaDato.php"); include_once("../includes/HTMLSELECT.php"); +include_once("../includes/HTMLCTESELECT.php"); include_once("../clases/AdoPhp.php"); include_once("../idiomas/php/".$idioma."/propiedades_ordenadores_".$idioma.".php"); //________________________________________________________________________________________________________ @@ -31,6 +32,10 @@ $idprocedimiento=0; $idaula=0; $cache=""; $grupoid=0; +######################## ADV +$netiface=""; +$netdriver=""; +########################### ADV if (isset($_GET["opcion"])) $opcion=$_GET["opcion"]; // Recoge parametros if (isset($_GET["idordenador"])) $idordenador=$_GET["idordenador"]; @@ -146,8 +151,32 @@ if ($opcion!=$op_alta){ else echo ''; ?> - + + + + P2P Modo:   + '; + $iface="eth0=eth0".chr(13); + $iface.="eth1=eth1".chr(13); + $iface.="eth2=eth2"; + echo HTMLCTESELECT($iface,"netiface","estilodesple","",$netiface,100).''; + ?> + + + + +  > Driver de Red:   + '; + $driver="generic=generic"; + echo HTMLCTESELECT($driver,"netdriver","estilodesple","",$netdriver,100).''; + ?> + + + + @@ -186,6 +215,8 @@ function TomaPropiedades($cmd,$id){ global $idmenu; global $idprocedimiento; global $cache; + global $netiface; + global $netdriver; $rs=new Recordset; $cmd->texto="SELECT * FROM ordenadores WHERE idordenador=".$id; $rs->Comando=&$cmd; @@ -200,6 +231,8 @@ function TomaPropiedades($cmd,$id){ $idmenu=$rs->campos["idmenu"]; $idprocedimiento=$rs->campos["idproautoexec"]; $cache=$rs->campos["cache"]; + $netiface=$rs->campos["netiface"]; + $netdriver=$rs->campos["netdriver"]; $rs->Cerrar(); return(true); } diff --git a/admin/WebConsole/varios/incorporaordenadores.php b/admin/WebConsole/varios/incorporaordenadores.php index 3e2ae333..a9ed0163 100644 --- a/admin/WebConsole/varios/incorporaordenadores.php +++ b/admin/WebConsole/varios/incorporaordenadores.php @@ -146,7 +146,8 @@ function Inserta($cmd,$idaula,$nombre,$lamac,$laip) return(true); } $idperfilhard=0; - $idrepositorio=0; +## ADV: modificacion para asignar a los ordenadores, cuando se crean desde "incorpoar ordenadores" el repositorio "default" + $idrepositorio=1; $idconfiguracion=0; $cmd->CreaParametro("@grupoid",$grupoid,1); $cmd->CreaParametro("@idaula",$idaula,1); -- cgit v1.2.3-18-g5258 From cbe1fdf5e2d52500ee964818cf3754aa4251d008 Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 23 Feb 2011 19:26:07 +0000 Subject: version 1.0 -- integracion BD -- ticket:302 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1483 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Database/alterbd.sql | 103 +++++++++++++++++++++++++++++++++++++++++++++ admin/Database/ogAdmBD.sql | 77 ++++++++++++++++++++++++++++++++- 2 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 admin/Database/alterbd.sql diff --git a/admin/Database/alterbd.sql b/admin/Database/alterbd.sql new file mode 100644 index 00000000..d492d33f --- /dev/null +++ b/admin/Database/alterbd.sql @@ -0,0 +1,103 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- +-- Base de datos: `ogBDAdmin` +-- + +ALTER TABLE `ordenadores`ADD `arranque` VARCHAR( 30 ) NOT NULL DEFAULT '1', +ADD `netiface` enum('eth0','eth1','eth2') DEFAULT 'eth0', +ADD `netdriver` VARCHAR( 30 ) NOT NULL DEFAULT 'generic'; + + + + + +ALTER TABLE `aulas` ADD `router` VARCHAR( 30 ), +ADD `netmask` VARCHAR( 30 ), +ADD `dns` VARCHAR (30), +ADD `modp2p` enum('seeder','peer','leecher') DEFAULT 'seeder', +ADD `timep2p` INT(11) NOT NULL DEFAULT '60'; + + + + + + +CREATE TABLE IF NOT EXISTS `itemboot` ( + `label` varchar(50) collate utf8_spanish_ci NOT NULL, + `kernel` varchar(100) collate utf8_spanish_ci NOT NULL, + `append` varchar(500) collate utf8_spanish_ci NOT NULL, + PRIMARY KEY (`label`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci; + + + +INSERT INTO `itemboot` (`label`, `kernel`, `append`) VALUES +('1', 'KERNEL syslinux/chain.c32', 'APPEND hd0'), +('1_localboot', 'LOCALBOOT 0', ' '), +('11', 'KERNEL syslinux/chain.c32', 'APPEND hd0 1'), +('12', 'KERNEL syslinux/chain.c32', 'APPEND hd0 2'), +('ogClientUser', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb engine=testing ogactiveadmin=false'), +('ogClientAdmin', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb engine=testing ogactiveadmin=true'), +('ogInitrdUser', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=user '), +('ogInitrdAdmin', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin '); + + + + +CREATE TABLE IF NOT EXISTS `menuboot` ( + `label` varchar(50) collate utf8_spanish_ci NOT NULL, + `prompt` int(11) NOT NULL, + `timeout` int(30) default NULL, + `description` varchar(50) collate utf8_spanish_ci NOT NULL, + PRIMARY KEY (`label`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci; + + + +INSERT INTO `menuboot` (`label`, `prompt`, `timeout`, `description`) VALUES +('1', 0, 10, 'mbr 1hd'), +('11', 0, 10, '1hd 1particion'), +('12', 0, 10, '1hd 2particion'), +('pxe', 0, 10, 'og client - user'), +('pxeADMIN', 0, 10, 'OgClient - admin'); + + +CREATE TABLE IF NOT EXISTS `menuboot_itemboot` ( + `labelmenu` varchar(100) NOT NULL, + `labelitem` varchar(100) NOT NULL, + `default` tinyint(10) NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + + +INSERT INTO `menuboot_itemboot` (`labelmenu`, `labelitem`, `default`) VALUES +('0', '0', 0), +('11', '11', 0), +('12', '12', 0), +('1', '1', 0), +('pxe', 'ogClientUser', 0), +('pxeADMIN', 'ogClientAdmin', 0); + + +INSERT INTO `ogAdmBD`.`comandos` ( +`idcomando` , +`descripcion` , +`pagina` , +`gestor` , +`funcion` , +`urlimg` , +`aplicambito` , +`visuparametros` , +`parametros` , +`comentarios` , +`activo` +) +VALUES +('11', 'Asistente Clonacion Particiones Remotas', '../comandos/AsistenteCloneRemotePartition.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), +('12', 'Asistente "Deploy" de Imagenes', '../comandos/AsistenteDeployImage.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), +('13', 'Asistente "UpdateCache" con Imagenes', '../comandos/AsistenteUpdateCache.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), +('14', 'Asistente Restauracion de Imagenes', '../comandos/AsistenteRestoreImage.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), +('15', 'Asistente Particionado', '../comandos/AsistenteParticionado.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'); + + + diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql index 554514fb..91497f31 100644 --- a/admin/Database/ogAdmBD.sql +++ b/admin/Database/ogAdmBD.sql @@ -100,9 +100,16 @@ CREATE TABLE IF NOT EXISTS `aulas` ( `ipmul` varchar(16) NOT NULL, `pormul` int(11) NOT NULL, `velmul` smallint(6) NOT NULL, + `router` VARCHAR( 30 ), + `netmask` VARCHAR( 30 ), + `dns` VARCHAR (30), + `modp2p` enum('seeder','peer','leecher') DEFAULT 'seeder', + `timep2p` INT(11) NOT NULL DEFAULT '60' PRIMARY KEY (`idaula`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + + -- -------------------------------------------------------- -- @@ -181,7 +188,14 @@ INSERT INTO `comandos` (`idcomando`, `descripcion`, `pagina`, `gestor`, `funcion (7, 'Inventario Software', '../comandos/InventarioSoftware.php', '../comandos/gestores/gestor_Comandos.php', 'InventarioSoftware', '', 16, 'par', 'nfn;iph;mac;par', '', 1), (8, 'Ejecutar Script', '../comandos/EjecutarScripts.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1), (9, 'Iniciar Sesion', '../comandos/IniciarSesion.php', '../comandos/gestores/gestor_Comandos.php', 'IniciarSesion', '', 31, 'par', 'nfn;iph;par', '', 1), -(10, 'Particionar y Formatear', '../comandos/Configurar.php', '../comandos/gestores/gestor_Comandos.php', 'Configurar', '', 28, 'dsk;cfg;', 'nfn;iph;mac;dsk;cfg;par;cpt;sfi;tam;ope', '', 1); +(10, 'Particionar y Formatear', '../comandos/Configurar.php', '../comandos/gestores/gestor_Comandos.php', 'Configurar', '', 28, 'dsk;cfg;', 'nfn;iph;mac;dsk;cfg;par;cpt;sfi;tam;ope', '', 1), +(11, 'Asistente Clonacion Particiones Remotas', '../comandos/AsistenteCloneRemotePartition.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), +(12, 'Asistente "Deploy" de Imagenes', '../comandos/AsistenteDeployImage.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), +(13, 'Asistente "UpdateCache" con Imagenes', '../comandos/AsistenteUpdateCache.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), +(14, 'Asistente Restauracion de Imagenes', '../comandos/AsistenteRestoreImage.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), +(15, 'Asistente Particionado', '../comandos/AsistenteParticionado.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'); + + -- -------------------------------------------------------- @@ -432,9 +446,14 @@ CREATE TABLE IF NOT EXISTS `ordenadores` ( `router` varchar(16) NOT NULL, `mascara` varchar(16) NOT NULL, `idproautoexec` int(11) NOT NULL, + `arranque` VARCHAR( 30 ) NOT NULL DEFAULT '1', + `netiface` enum('eth0','eth1','eth2') DEFAULT 'eth0', + `netdriver` VARCHAR( 30 ) NOT NULL DEFAULT 'generic', PRIMARY KEY (`idordenador`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + + -- -------------------------------------------------------- -- @@ -917,3 +936,59 @@ CREATE TABLE IF NOT EXISTS `usuarios` ( INSERT INTO `usuarios` (`idusuario`, `usuario`, `pasguor`, `nombre`, `email`, `ididioma`, `idtipousuario`) VALUES (1, 'DBUSER', 'DBPASSWORD', 'Usuario de la base de datos MySql', '', 1, 1); + +CREATE TABLE IF NOT EXISTS `itemboot` ( + `label` varchar(50) collate utf8_spanish_ci NOT NULL, + `kernel` varchar(100) collate utf8_spanish_ci NOT NULL, + `append` varchar(500) collate utf8_spanish_ci NOT NULL, + PRIMARY KEY (`label`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci; + + + +INSERT INTO `itemboot` (`label`, `kernel`, `append`) VALUES +('1', 'KERNEL syslinux/chain.c32', 'APPEND hd0'), +('1_localboot', 'LOCALBOOT 0', ' '), +('11', 'KERNEL syslinux/chain.c32', 'APPEND hd0 1'), +('12', 'KERNEL syslinux/chain.c32', 'APPEND hd0 2'), +('ogClientUser', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb engine=testing ogactiveadmin=false'), +('ogClientAdmin', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb engine=testing ogactiveadmin=true'), +('ogInitrdUser', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=user '), +('ogInitrdAdmin', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin '); + + + + +CREATE TABLE IF NOT EXISTS `menuboot` ( + `label` varchar(50) collate utf8_spanish_ci NOT NULL, + `prompt` int(11) NOT NULL, + `timeout` int(30) default NULL, + `description` varchar(50) collate utf8_spanish_ci NOT NULL, + PRIMARY KEY (`label`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci; + + + +INSERT INTO `menuboot` (`label`, `prompt`, `timeout`, `description`) VALUES +('1', 0, 10, 'mbr 1hd'), +('11', 0, 10, '1hd 1particion'), +('12', 0, 10, '1hd 2particion'), +('pxe', 0, 10, 'og client - user'), +('pxeADMIN', 0, 10, 'OgClient - admin'); + + +CREATE TABLE IF NOT EXISTS `menuboot_itemboot` ( + `labelmenu` varchar(100) NOT NULL, + `labelitem` varchar(100) NOT NULL, + `default` tinyint(10) NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + + +INSERT INTO `menuboot_itemboot` (`labelmenu`, `labelitem`, `default`) VALUES +('0', '0', 0), +('11', '11', 0), +('12', '12', 0), +('1', '1', 0), +('pxe', 'ogClientUser', 0), +('pxeADMIN', 'ogClientAdmin', 0); + -- cgit v1.2.3-18-g5258 From bc55985ea2d013b828eac17042d3adb528ab0955 Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 23 Feb 2011 19:29:44 +0000 Subject: integracion 1.0 - proceso inicio cliente - ticket:303 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1484 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/nfsexport/etc/init/defaultTESTING.sh | 49 +++++++++++ client/nfsexport/etc/preinit/defaultTESTING.sh | 27 ++++++ client/nfsexport/etc/preinit/loadenvironTESTING.sh | 95 ++++++++++++++++++++++ client/nfsexport/etc/preinit/loadmodulesTESTING.sh | 28 +++++++ 4 files changed, 199 insertions(+) create mode 100755 client/nfsexport/etc/init/defaultTESTING.sh create mode 100755 client/nfsexport/etc/preinit/defaultTESTING.sh create mode 100755 client/nfsexport/etc/preinit/loadenvironTESTING.sh create mode 100755 client/nfsexport/etc/preinit/loadmodulesTESTING.sh diff --git a/client/nfsexport/etc/init/defaultTESTING.sh b/client/nfsexport/etc/init/defaultTESTING.sh new file mode 100755 index 00000000..7a258588 --- /dev/null +++ b/client/nfsexport/etc/init/defaultTESTING.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +/etc/init.d/ssh restart +#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 + +ethtool -s eth0 wol g + + +# Fichero de registro de incidencias (en el servidor; si no, en local). +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} +if ! touch $OGLOGFILE 2>/dev/null; then + OGLOGFILE=/var/log/opengnsys.log +fi + +echo -ne "og\nog\n" | passwd root + +#TODO => activacion de modo escritura en REPO + +if [ $ogactiveadmin == "true" ] +then + export boot=admin + umount /opt/opengnsys/images + + if [ "$ogprotocol" == "nfs" ] + then + mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock + fi + + if [ "$ogprotocol" == "smb" ] + then + echo "montando smb" + mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og + echo mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og + + fi +fi +# Arranque de OpenGnSys Client. +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + + + echo "$MSG_LAUNCHCLIENT modo cliente full" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 +fi + +# Si fallo en cliente y modo "admin", cargar shell; si no, salir. +#if [ "$boot" == "admin" ]; then + bash +#fi diff --git a/client/nfsexport/etc/preinit/defaultTESTING.sh b/client/nfsexport/etc/preinit/defaultTESTING.sh new file mode 100755 index 00000000..3d291cc5 --- /dev/null +++ b/client/nfsexport/etc/preinit/defaultTESTING.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Para que no haya problemas con el interprete +#ln -fs /opt/opengnsys/bin/bash /bin/bash + +set -a + +#source /opt/opengnsys/etc/preinit/loadenviron.sh +source /opt/opengnsys/etc/preinit/loadenvironTESTING.sh +#for f in fileslinks.sh loadudeb.sh loadmodules.sh metadevs.sh; do +for f in loadmodulesTESTING.sh; do + $OGETC/preinit/$f +done + +if [ -f $OGETC/init/$OG_IP.sh ]; then + $OGETC/init/$OG_IP.sh + +elif [ -f $OGETC/init/$OGGROUP.sh ]; then + $OGETC/init/$OGGROUP.sh + +elif [ -f $OGETC/init/defaultTESTING.sh ]; then + $OGETC/init/defaultTESTING.sh + +else + echo "No se ha encontrado script de inicio" + halt +fi diff --git a/client/nfsexport/etc/preinit/loadenvironTESTING.sh b/client/nfsexport/etc/preinit/loadenvironTESTING.sh new file mode 100755 index 00000000..1273db7f --- /dev/null +++ b/client/nfsexport/etc/preinit/loadenvironTESTING.sh @@ -0,0 +1,95 @@ +#!/bin/bash +#/** +#@file loadenviron.sh +#@brief Script de carga de la API de funciones de OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + +# Idioma por defecto. +export LANG="${LANG:-es_ES}" + +# Directorios del projecto OpenGnSys. +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" +if [ -d $OPENGNSYS ]; then + export OGBIN=$OPENGNSYS/bin/testing + #export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + + #export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH + #export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH + + # Cargar fichero de idioma. + LANGFILE=$OGETC/lang.$LANG.conf + if [ -f $LANGFILE ]; then + source $LANGFILE + for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do + export $i + done + fi + echo "$MSG_LOADAPI" + # Cargar mapa de teclado. + loadkeys ${LANG%_*} >/dev/null + # Cargar API de funciones. + for i in $OGAPI/*.lib; do + source $i + done + for i in $(typeset -F | cut -f3 -d" "); do + export -f $i + done + + # Añadir dependencia de arquitectura + ARCH=$(ogGetArch) +# if [ -n "$ARCH" ]; then + # export PATH=$OGBIN/$ARCH:$PATH + # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH + # fi + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + # Carga de las API testing + if [ "$engine" = "testing" ] + then + for i in $OGAPI/*.testing; do + source $i + done + #export PATH=$PATH:$OGBIN/$ARCH-testing + fi + + # Fichero de registros. + export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + # FIXME Pruebas para grupos de ordenadores + #export OGGROUP=$(ogGetGroup) + export OGGROUP="$group" +fi + +# Declaración de códigos de error. +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + diff --git a/client/nfsexport/etc/preinit/loadmodulesTESTING.sh b/client/nfsexport/etc/preinit/loadmodulesTESTING.sh new file mode 100755 index 00000000..cea7d53a --- /dev/null +++ b/client/nfsexport/etc/preinit/loadmodulesTESTING.sh @@ -0,0 +1,28 @@ +#!/bin/bash +#/** +#@file loadmodules.sh +#@brief Script de inicio para cargar módulos complementarios del kernel. +#@version 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-01-26 +#*/ + + +MSG_LOADMODULES=${MSG_LOADMODULES:-"."} +echo "$MSG_LOADMODULES para cliente full" + +# Directorio principal de módulos del kernel. +MODULESDIR=/lib/modules/$(uname -r)/kernel + +# Módulo del ratón. +insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null +# Módulos de discos. +#for m in $MODULESDIR/drivers/ata/*.ko; do + # insmod $m 2>/dev/null +#done +# Módulos de sistemas de archivos. +#for f in reiserfs jfs xfs hfs hfsplus; do +#for f in reiserfs xfs hfs hfsplus; do +# insmod $MODULESDIR/fs/$f/$f.ko 2>/dev/null +#done + -- cgit v1.2.3-18-g5258 From d9d17207d53b61d174c2b54f2695eb5a4e932acd Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 23 Feb 2011 19:33:11 +0000 Subject: version 1.0 - interfaz adm - ticket:304 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1485 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Interface/CrearImagen | 15 +++++++++++---- admin/Interface/EjecutarScript | 17 +++++++++++++++-- admin/Interface/RestaurarImagen | 14 ++++++++++---- 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/admin/Interface/CrearImagen b/admin/Interface/CrearImagen index 62f0de9c..ac20c339 100755 --- a/admin/Interface/CrearImagen +++ b/admin/Interface/CrearImagen @@ -4,9 +4,16 @@ # # PARAMETROS RECIBIDOS DESDE EL CLIENTE: # $1 disco -# $2 par=Nmero de particion -# $3 Nombre cannico de la imagen -# $4 Direccin del repositorio +# $2 par=N�mero de particion +# $3 Nombre can�nico de la imagen +# $4 Direcci�n del repositorio #_______________________________________________________________________________________________________________________________ -createImage "$1" "$2" "REPO" "$3" +if [ "$engine" == "testing" ] +then + echo $* >> $OGLOGFILE + createImage "$1" "$2" "REPO" "$3" &>> $OGLOGFILE || exit $? +else + createImage "$1" "$2" "REPO" "$3" +fi + diff --git a/admin/Interface/EjecutarScript b/admin/Interface/EjecutarScript index 8925ac2b..09e746cf 100755 --- a/admin/Interface/EjecutarScript +++ b/admin/Interface/EjecutarScript @@ -1,3 +1,16 @@ #!/bin/bash -chmod +x $1 -$1 || exit $? +if [ "$engine" == "testing" ] + then + echo -e >> $OGLOGFILE + echo "Contenido de la ejecucion: *****************************" >> $OGLOGFILE + cat $1 >> $OGLOGFILE + echo -e >> $OGLOGFILE + echo -e >> $OGLOGFILE + echo "Salida: *****************************" >> $OGLOGFILE + chmod +x $1 + $1 &>> $OGLOGFILE || exit $? + echo "Fin: *****************************" >> $OGLOGFILE +else + chmod +x $1 + $1 || exit $? +fi diff --git a/admin/Interface/RestaurarImagen b/admin/Interface/RestaurarImagen index 48f1e46a..8556807a 100755 --- a/admin/Interface/RestaurarImagen +++ b/admin/Interface/RestaurarImagen @@ -3,10 +3,16 @@ # # PARAMETROS RECIBIDOS DESDE EL CLIENTE: # $1 disco -# $2 par=Nmero de particion -# $3 Nombre cannico de la imagen -# $4 Direccin del repositorio +# $2 par=N�mero de particion +# $3 Nombre can�nico de la imagen +# $4 Direcci�n del repositorio #_______________________________________________________________________________________________________________________________ -ogRestoreImage REPO $3 $1 $2 UNICAST +if [ "$engine" == "testing" ] +then + echo $* >> $OGLOGFILE + restoreImage REPO $3 $1 $2 UNICAST &>> $OGLOGFILE || exit $? +else + ogRestoreImage REPO $3 $1 $2 UNICAST +fi -- cgit v1.2.3-18-g5258 From 99482033cbfbb86d581011cadf4edc8fffcf8f33 Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 23 Feb 2011 19:35:42 +0000 Subject: integracion version 1.0 - engine -- ticket:305 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1486 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/engine/Cache.lib.testing | 31 ++ client/engine/File.lib.testing | 0 client/engine/Image.lib.testing | 566 +++++++++++++++++++++++++++++++ client/engine/Net.lib.testing | 12 + client/engine/PostConf.lib.testing | 18 + client/engine/Protocol.lib.testing | 676 +++++++++++++++++++++++++++++++++++++ client/engine/String.lib.testing | 123 +++++++ client/engine/XFileSystem.lib | 293 ++++++++++++++++ 8 files changed, 1719 insertions(+) create mode 100644 client/engine/Cache.lib.testing create mode 100644 client/engine/File.lib.testing create mode 100644 client/engine/Image.lib.testing create mode 100644 client/engine/Net.lib.testing create mode 100644 client/engine/PostConf.lib.testing create mode 100755 client/engine/Protocol.lib.testing create mode 100644 client/engine/String.lib.testing create mode 100755 client/engine/XFileSystem.lib diff --git a/client/engine/Cache.lib.testing b/client/engine/Cache.lib.testing new file mode 100644 index 00000000..8b62d57a --- /dev/null +++ b/client/engine/Cache.lib.testing @@ -0,0 +1,31 @@ +function ogMountCache () +{ +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME ==> /mnt/sda4" + return +fi + +ogMountFs $(ogFindCache) 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "$MSG_NOCACHE" || return $? +} + + +function ogUnmountCache () +{ +# Variables locales. +local CACHE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME" + return +fi + +CACHE=$(ogFindCache) || ogRaiseError $OG_ERR_PARTITION "$MSG_NOCACHE" +ogIsMounted $CACHE || return 0 +ogUnmountFs $CACHE +# Borrar enlace simbólico de /mnt/ParticiónCache. +rm -f $(ogDiskToDev $CACHE | sed 's/dev/mnt/') +} + + + diff --git a/client/engine/File.lib.testing b/client/engine/File.lib.testing new file mode 100644 index 00000000..e69de29b diff --git a/client/engine/Image.lib.testing b/client/engine/Image.lib.testing new file mode 100644 index 00000000..e46049f3 --- /dev/null +++ b/client/engine/Image.lib.testing @@ -0,0 +1,566 @@ +#!/bin/bash +#/** +#@file Image.lib +#@brief Librería o clase Image testing +#@class Image +#@brief Funciones para creación, restauración y clonación de imágenes de sistemas. +#@version 0.9 +#@warning License: GNU GPLv3+ +#*/ +#/** +# ogCheckProgram +#@brief Función para determinar si el programa/s están disponibles +#@param 1 programa o programas a comprobar +#@return 0 si está disponible. +#@return 7 si NO está disponible +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTEXEC programas no disponibles. +#@note +#@TODO: en pruebas +#@version 0.91 - Definición de +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2010/05/09 +#*/ ## +#/** +ogCheckProgram () +{ +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME \"str_program1 program2 programN\" " \ + "$FUNCNAME \"partimage partclone mbuffer\" " + return +fi + +# Error si no se recibe 1 parámetro. +[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +local PERROR PLOG +PERROR=0 +PLOG=" " +for i in `echo $1` +do + if [ ! `which $i` ] + then + PERROR=1 + PLOG="$PLOG $i" + fi +done +if [ "$PERROR" == "1" ] +then + ogRaiseError $OG_ERR_NOTEXEC "$PLOG" || return $? +else + return 0 +fi +} + + +function ogPartcloneSyntax () +{ +#TODO: comprobar como unico parametro particion /dev/sda1 +#COMPAR="partclone.$FS --clone --force --source $PART" +COMPAR="-F -c -s " +TYPE="$(ogGetFsType `ogDevToDisk $1`)" +case "$TYPE" in + EXT[234]) + echo "partclone.extfs $COMPAR $1" + ;; + REISERFS|XFS|JFS) + echo "partclone.dd $COMPAR $1" + ;; + NTFS|HNTFS) + echo "partclone.ntfs $COMPAR $1" + ;; + FAT16|FAT32|HFAT16|HFAT32) + echo "partclone.fat $COMPAR $1" + ;; + HFS|HFS+) + echo "partclone.hfsp $COMPAR $1" + ;; + *) ogRaiseError $OG_ERR_PARTITION "$1 $TYPE" + return $? ;; +esac +} + + +#/** +# ogGetImageInfo filename +#@brief muestra información sobre la imagen monolitica. +#@param 1 filename path absoluto del fichero imagen +#@return cadena compuesta por clonacion:compresor:sistemaarchivos:tamañoKB +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero no encontrado. +#@exception OG_ERR_IMAGE "Image format is not valid $IMGFILE" + +#@warning En pruebas iniciales +#@TODO Definir sintaxis de salida (herramienta y compresor en minuscula) +#@TODO Arreglar loop para ntfsclone +#@TODO insertar parametros entrada tipo OG +#@version 1.0 - Primeras pruebas +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2010/02/08 +#*/ ## + +function ogGetImageInfo () { +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME filename " \ + "$FUNCNAME /opt/opengnsys/images/prueba.img " + return +fi + +# Error si no se reciben 1 parámetros. +[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +#comprobando que el parametro uno es un file. +[ -f $1 ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $? + +local TOOLS COMPRESSOR IMGFILE FILEHEAD FS SIZE PARTIMAGEINFO PARTCLONEINFO NTFSCLONEINFO IMGDETECT +IMGDETECT="FALSE" + +IMGFILE=$1 +FILEHEAD=/tmp/`basename $IMGFILE`.infohead +COMPRESSOR=`file $IMGFILE | awk '{print $2}'` +ogCheckStringInGroup "$COMPRESSOR" "gzip lzop" || ogRaiseError $OG_ERR_IMAGE "Image format is not valid $IMGFILE" || return $? +$($COMPRESSOR -dc $IMGFILE 2>/dev/null | head > $FILEHEAD) || ogRaiseError $OG_ERR_IMAGE "Image format is not valid $IMGFILE" || return $? + +## buscando Primera opción. +if [ "$IMGDETECT" == "FALSE" ] +then + PARTCLONEINFO=$(partclone.info $FILEHEAD 2>&1) + if `echo $PARTCLONEINFO | grep size > /dev/null` + then + TOOLS=PARTCLONE + FS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($8);}') + SIZE=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); printf "%d\n", $11*1024*1024;}') + IMGDETECT="TRUE" + fi +fi +#buscando segunda opcion. +if [ "$IMGDETECT" == "FALSE" -a ! -f /dev/loop2 ] +then + cat $FILEHEAD | grep -w ntfsclone-image > /dev/null && NTFSCLONEINFO=$(cat $FILEHEAD | ntfsclone --restore --overwrite /dev/loop2 - 2>&1) + if `echo $NTFSCLONEINFO | grep ntfsclone > /dev/null` + then + TOOLS=NTFSCLONE + SIZE=$(echo $NTFSCLONEINFO | awk '{gsub(/\(|\)|\./,""); printf "%d\n",$17/1000;}') + FS=NTFS + IMGDETECT="TRUE" + fi +fi +## buscando Tercer opción. +if [ "$IMGDETECT" == "FALSE" ] +then + PARTIMAGEINFO=$(partimage -B gui=no imginfo "$FILEHEAD" 2>&1) + if `echo $PARTIMAGEINFO | grep Partition > /dev/null` + then + TOOLS=PARTIMAGE + FS=$(echo $PARTIMAGEINFO | awk '{gsub(/ /,"\n"); print $17;}' | awk '{sub(/\.\.+/," "); print toupper($2)}') + SIZE=$( echo $PARTIMAGEINFO | awk '{gsub(/ /,"\n"); print $36;}' | awk '{sub(/\.\.+/," "); printf "%d\n",$2*1024*1024;}') + IMGDETECT="TRUE" + fi +fi +#comprobamos valores #Chequeamos los valores devueltos. +if [ -z "$TOOLS" -o -z "$COMPRESSOR" -o "$IMGDETECT" == "FALSE" ] +then + ogRaiseError $OG_ERR_IMAGE "Image format is not valid $IMGFILE" || return $? +else + COMPRESSOR=$(echo $COMPRESSOR | tr [a-z] [A-Z]) + echo $TOOLS:$COMPRESSOR:$FS:$SIZE +fi +} + + + + +#/** +# ogCreateImageSyntax partition filename [tools] [levelcompresor] +#@brief Genera una cadena de texto con la instrucción para crear un fichero imagen +#@param 1 partition identificador linux del dispositivo particion. +#@param 2 filename path absoluto del fichero imagen +#@param 3 [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone] +#@param 4 [opcional] str_levelcompresor nivel de compresion. [0 -none-, 1-lzop-, 2-gzip] +#@return cadena con el comando que se debe ejecutar. +#@exception OG_ERR_FORMAT formato incorrecto. +#@warning En pruebas iniciales +#@TODO introducir las herramientas fsarchiver, dd +#@TODO introducir el nivel de compresion gzip +#@version 1.0 - Primeras pruebas +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2010/02/08 +#*/ ## + +function ogCreateImageSyntax() +{ +local FS TOOL LEVEL PART IMGFILE BUFFER + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME partition filename [tool] [levelcompresor]" \ + "$FUNCNAME /dev/sda1 /opt/opengnsys/images/prueba.img partclone lzop" + return +fi +# Error si no se reciben al menos los 2 parámetros para obtener el valor default. +[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? + + +PART=`echo $1` +IMGFILE=`echo $2` + +case "$#" in + "2") + # Sintaxis por defecto OG PART IMGFILE + #echo "partimage -M -f3 -o -d -V0 -B gui=no -c -z1 save $PART $IMGFILE" + # Se comenta la instruccion que debería ir aqui + ogCreateImageSyntax $1 $2 partclone gzip + ;; + "4") + # Sintaxis condicionada. + # comprobamos parametro herramienta compresion. + TOOL=$(echo $3 | tr [A-Z] [a-z]) + #ogCheckProgram $TOOL + #comprobar parámetro compresor. + LEVEL=$(echo $4 | tr [A-Z] [a-z]) + #ogCheckProgram $LEVEL + + # herramienta + case "$TOOL" in + "ntfsclone") + PARAM1="ntfsclone --force --save-image -O - $PART" + ;; + "partimage"|DEFAULT) + PARAM1="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $PART stdout" + ;; + "partclone") + PARAM1=`ogPartcloneSyntax $PART` || ogRaiseError $OG_ERR_FORMAT || return $? + ;; + esac + # mbuffer + which mbuffer > /dev/null && PARAM2="| mbuffer -q -m 40M " || PARAM2=" " + + # nivel de compresion + case "$LEVEL" in + "0"|"none") + PARAM3=" > " + ;; + "1"|"lzop") + PARAM3=" | lzop > " + ;; + "2"|"gzip") + PARAM3=" | gzip -c > " + ;; + "3"|"bzip") + PARAM3=" | bzip -c > " + ;; + esac + #sintaxis final. + echo "$PARAM1 $PARAM2 $PARAM3 $IMGFILE" + ;; +esac +} + +#/** +# ogRestoreImageSyntax filename partition [tools] [levelcompresor] +#@brief Genera una cadena de texto con la instrucción para crear un fichero imagen +#@param 1 filename path absoluto del fichero imagen +#@param 2 partition identificador linux del dispositivo particion. +#@param 3 [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone] +#@param 4 [opcional] str_levelcompresor nivel de compresion. [0 -none-, 1-lzop-, 2-gzip] +#@return cadena con el comando que se debe ejecutar. +#@exception OG_ERR_FORMAT formato incorrecto. +#@warning En pruebas iniciales +#@TODO introducir las herramientas fsarchiver, dd +#@TODO introducir el nivel de compresion gzip +#@version 1.0 - Primeras pruebas +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2010/02/08 +#*/ ## + +ogRestoreImageSyntax () +{ +local TOOL COMPRESSOR LEVEL PART IMGFILE FILEHEAD INFOIMG + + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME filename partition [tool] [levelcompresor]" \ + "$FUNCNAME /opt/opengnsys/images/prueba.img /dev/sda1 [partclone] [lzop]" + return +fi + +# Error si no se reciben al menos 2 parámetros. +[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? + +# controlamos que el parametro 1 (imagen) es tipo file. +[ -f $1 ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $? + +# Si 2 parametros (file-origen-, device-destino-) = ogGetImageFull($1) +if [ "$#" -eq 2 ]; then + IMGFILE=$1 + PART=$2 + INFOIMG=$(ogGetImageInfo $IMGFILE) || ogRaiseError $OG_ERR_NOTFOUND "No Image $1" || return $? + TOOL=`echo $INFOIMG | cut -f1 -d:` + COMPRESSOR=`echo $INFOIMG | cut -f2 -d:` + ogRestoreImageSyntax $IMGFILE $PART $TOOL $COMPRESSOR +fi + + +# Si cuatro parametros genera sintaxis +if [ "$#" -eq 4 ]; then + IMGFILE=$1 + PART=$2 + # comprobamos parametro herramienta compresion. + TOOL=$(echo $3 | tr [A-Z] [a-z]) + #ogCheckProgram $TOOL + #comprobar parámetro compresor. + LEVEL=$(echo $4 | tr [A-Z] [a-z]) + #ogCheckProgram $LEVEL + + case "$LEVEL" in + "0"|"none") + COMPRESSOR=" " + ;; + "1"|"lzop" | "LZOP") + COMPRESSOR=" lzop -dc " + ;; + "2"|"gzip" | "GZIP") + COMPRESSOR=" gzip -dc " + ;; + "3"|"bzip" | "BZIP" ) + COMPRESSOR=" bzip -dc " + ;; + *) + ogRaiseError $OG_ERR_NOTFOUND "Compressor no valid $TOOL" || return $? + ;; + esac + #comprobar mbuffer + which mbuffer > /dev/null && MBUFFER="| mbuffer -q -m 40M " || MBUFFER=" " + + case "$TOOL" in + "ntfsclone" | "NTFSCLONE") + TOOL="| ntfsclone --restore-image --overwrite $PART -" + ;; + "partimage"| "PARTIMAGE") + TOOL="| partimage -f3 -B gui=no restore $PART stdin" + ;; + "partclone" | "PARTCLONE") + # -C para que no compruebe tamaños + TOOL="| partclone.restore -o $PART" + ;; + *) + ogRaiseError $OG_ERR_NOTFOUND "Tools imaging no valid $TOOL" || return $? + ;; + esac + + echo "$COMPRESSOR $IMGFILE $MBUFFER $TOOL" +fi + +} + + +function ogGetImageProgram () +{ +local IMGFILE +IMGFILE=$(ogGetPath "$1" "$2.img") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? +ogGetImageInfo $IMGFILE | awk -F: '{print $1}' + +} + +function ogGetImageCompressor () +{ +local IMGFILE +IMGFILE=$(ogGetPath "$1" "$2.img") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? +ogGetImageInfo $IMGFILE | awk -F: '{print $2}' +} + +####################### +########################### +########################### + + + +function ogGetImageType () +{ +local IMGFILE +IMGFILE=$(ogGetPath "$1" "$2.img") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? +#partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \ +# awk '/^Filesystem/ {sub(/\.\.+/," "); sub(/fs$/,""); print toupper($2);}' +ogGetImageInfo $IMGFILE | awk -F: '{print $3}' + +} + + + + + +function ogGetImageSize () +{ +# Variables locales +local IMGFILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME testing path_dir str_image int_ndisk int_npart" \ + "$FUNCNAME 1 1 REPO /aula1/winxp ==> 5642158" + return +fi +# Error si no se reciben menos de 2 parámetros. +[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? +# Error si el fichero de imagen no es accesible. +IMGFILE=$(ogGetPath "$1" "$2.img") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? + +# Devuelve el tamaño de la imagen en KB. +#partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \ +# awk '/Partition size/ {sub(/\.\.+/," "); printf "%d\n",$3*1024*1024;}' +ogGetImageInfo $IMGFILE | awk -F: '{print $4}' +} + + +#/** +# ogCreateImage int_ndisk int_npartition str_repo path_image +#@brief Crea una imagen a partir de una partición. +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@param str_repo repositorio de imágenes (remoto o caché local) +#@param path_image camino de la imagen (sin extensión) +#@return (nada, por determinar) +#@note repo = { REPO, CACHE } +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#@exception OG_ERR_PARTITION partición no accesible o no soportada. +#@exception OG_ERR_LOCKED particion bloqueada por otra operación. +#@exception OG_ERR_IMAGE error al crear la imagen del sistema. +#@warning En pruebas iniciales +#@todo Comprobaciones, control de errores, definir parámetros, etc. +#@version 0.1 - Integracion para Opengnsys - HIDRA:CrearImagen{EXT3, NTFS}.sh; EAC: CreateImageFromPartition () en Deploy.lib +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@Date 2008/05/13 +#@author Antonio J. Doblas Viso. Universidad de Malaga +#@date 2008/10/27 +#@version 0.9 - Versión en pruebas para OpenGnSys +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009/10/07 +#*/ ## +function ogCreateImage () +{ +# Variables locales +local PART PROGRAM IMGDIR IMGFILE IMGTYPE ERRCODE + +# TESTING mensajes +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart str_repo path_image [str_tools] [str_levelcompresor]" \ + "$FUNCNAME 1 1 REPO /aula1/winxp " \ + "$FUNCNAME 1 1 REPO /aula1/winxp partclone lzop" \ + "$FUNCNAME 1 1 REPO /aula1/winxp partimage gzip" \ + "$FUNCNAME 1 1 REPO /aula1/winxp ntfsclone lzop" + return +fi +# TESTING de -n a -lt +# Error si no se reciben 4 parámetros. +[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? + +# Comprobar que no está bloqueada ni la partición, ni la imagen. +PART="$(ogDiskToDev $1 $2)" || return $? +if ogIsLocked $1 $2; then + ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $1, $2" + return $? +fi +IMGTYPE="img" # Extensión genérica de imágenes. +IMGDIR=$(ogGetParentPath "$3" "$4") +[ -n "$IMGDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$3 $(dirname $4)" || return $? +IMGFILE="$IMGDIR/$(basename "$4").$IMGTYPE" +if ogIsImageLocked "$IMGFILE"; then + ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $3, $4" + return $? +fi +# Desmontar partición, bloquear partición e imagen. +ogUnmount $1 $2 2>/dev/null +ogLock $1 $2 || return $? +ogLockImage "$3" "$4.$IMGTYPE" || return $? + +# Crear Imagen. +trap "ogUnlock $1 $2; ogUnlockImage "$3" "$4.$IMGTYPE"; rm -f $IMGFILE" 1 2 3 6 9 + +################## TESTING ######################################### +#Solicitamos la generación de la instruccion a ejecutar +PROGRAM=`ogCreateImageSyntax $PART $IMGFILE $5 $6` +echo $PROGRAM +eval $PROGRAM + +# Controlar salida de error y desbloquear partición. +ERRCODE=$? +if [ $ERRCODE != 0 ]; then + ogRaiseError $OG_ERR_IMAGE "$1 $2 $IMGFILE" + rm -f "$IMGFILE" +fi +ogUnlock $1 $2 +ogUnlockImage "$3" "$4.$IMGTYPE" +return $ERRCODE +} + + + + +function ogRestoreImage () +{ +# Variables locales +local PART PROGRAM PARTSIZE IMGFILE IMGSIZE FSTYPE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk int_npart" \ + "$FUNCNAME REPO /aula1/winxp 1 1" + return +fi +# Error si no se reciben 4 parámetros. +[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? + +# Procesar parámetros. +PART="$(ogDiskToDev "$3" "$4")" || return $? +IMGFILE=$(ogGetPath "$1" "$2.img") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? + + +# Error si la imagen no cabe en la particion. +IMGSIZE=$(ogGetImageSize "$1" "$2") +PARTSIZE=$(ogGetPartitionSize $3 $4) +if [ $IMGSIZE -gt $PARTSIZE ]; then + ogRaiseError $OG_ERR_PARTITION "$IMGSIZE > $PARTSIZE" + return $? + else + echo "Tamanio de la imagen $IMGSIZE < al tamanio particion $PARTSIZE" +fi + +# Comprobar el bloqueo de la imagen y de la partición. +if ogIsImageLocked "$IMGFILE"; then + ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $1, $2" + return $? +fi +if ogIsLocked $3 $4; then + ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $3, $4" + return $? +fi +# Desmontar y bloquear partición. +ogUnmount $3 $4 2>/dev/null || return $? +ogLock $3 $4 || return $? +trap "ogUnlock $3 $4" 1 2 3 6 9 + + +#Solicitamos la generación de la instruccion a ejecutar +PROGRAM=`ogRestoreImageSyntax $IMGFILE $PART` +echo $PROGRAM +eval $PROGRAM + + +ERRCODE=$? +if [ $ERRCODE != 0 ]; then + ogRaiseError $OG_ERR_IMAGE "$IMGFILE, $3, $4" +fi +ogUnlock $3 $4 +return $ERRCODE + +} diff --git a/client/engine/Net.lib.testing b/client/engine/Net.lib.testing new file mode 100644 index 00000000..96bc2193 --- /dev/null +++ b/client/engine/Net.lib.testing @@ -0,0 +1,12 @@ +function ogGetIpAddress () +{ + echo $IPV4ADDR +} + + +function ogRequestRepo () +{ +REPOAUXPORT=$((cat /opt/opengnsys/etc/ogAdmClient.cfg | grep PUERTO | cut -f2 -d"="`+ 1)) +echo ogRequestRepo $1 $2 $3 +hose $repo $REPOAUXPORT --out sh -c "echo $1 $2 $3" +} \ No newline at end of file diff --git a/client/engine/PostConf.lib.testing b/client/engine/PostConf.lib.testing new file mode 100644 index 00000000..28a2aa49 --- /dev/null +++ b/client/engine/PostConf.lib.testing @@ -0,0 +1,18 @@ +function NtFixBoot () +{ +echo "en pruebas" +#boot_disk=0 +#boot_main_part=1 +#disk=0 +#main_part=1 +#boot_entry=Windows 7 +#;boot_entry=Windows Boot Manager +} + +function NtFixBootSector () +{ +echo "en pruebas" +#disk=0 +#main_part=1 +#fix_first_sector=yes +} \ No newline at end of file diff --git a/client/engine/Protocol.lib.testing b/client/engine/Protocol.lib.testing new file mode 100755 index 00000000..73a5e63a --- /dev/null +++ b/client/engine/Protocol.lib.testing @@ -0,0 +1,676 @@ +#!/bin/bash +#/** +#@file Protocol.lib +#@brief Librería o clase Protocol +#@class FileTransfer +#@brief Funciones para transmisión de datos +#@version 0.91 +#@warning License: GNU GPLv3+ +#*/ + + + + + +#/** +# ogMcastSyntax +#@brief Función para generar la instrucción de ejucción la transferencia de datos multicast +#@param 1 Tipo de operación [ SENDPARTITION RECEIVERPARTITION SENDFILE RECEIVERFILE ] +#@param 2 Sesión Mulicast +#@param 3 Dispositivo (opción PARTITION) o fichero(opción FILE) que será enviado. +#@param 4 Tools de clonación (opcion PARTITION) +#@param 5 Tools de compresion (opcion PARTITION) +#@return instrucción para ser ejecutada. +#@exception OG_ERR_FORMAT formato incorrecto. +#@note Requisitos: upd-cast 2009 +#@todo localvar check versionudp +#@version 0.91 - Definición de FileTransfer +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2010/05/09 +#*/ ## +#/** +# + + +function ogMcastSyntax () +{ + +local ISUDPCAST PARM SESSION SESSIONPARM MODE PORTBASE PERROR +local METHOD ADDRESS BITRATE NCLIENTS MAXTIME CERROR +local TOOL LEVEL DEVICE MBUFFER SYNTAXSERVER SYNTAXCLIENT + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" -o "$2" == "help" ]; then + ogHelp "$FUNCNAME SENDPARTITION str_sessionSERVER str_device str_tools str_level" \ + "$FUNCNAME RECEIVERPARTITION str_sessionCLIENT str_device str_tools str_level "\ + "$FUNCNAME SENDFILE str_sessionSERVER str_file "\ + "$FUNCNAME RECEIVERFILE str_sessionCLIENT str_file " \ + "sessionServer syntax: portbase:method:mcastaddress:speed:nclients:ntimeWaitingUntilNclients " \ + "sessionServer example: 9000:full-duplex|half-duplex|broadcast:239.194.17.36:80M:50:60 " \ + "sessionClient syntax: portbase " \ + "sessionClient example: 9000 " + return +fi +PERROR=0 + +#si no tenemos updcast o su version superior 2009 udpcast error. +ISUDPCAST=$(udp-receiver --help 2>&1) +echo $ISUDPCAST | grep start-timeout > /dev/null || ogRaiseError $OG_ERR_FORMAT "upd-cast no existe o version antigua -requerida 2009-"|| return $? + + +# Error si no se reciben $PARM parámetros. +echo "$1" | grep "PARTITION" > /dev/null && PARM=5 || PARM=3 +[ "$#" -eq "$PARM" ] || ogRaiseError $OG_ERR_FORMAT "sin parametros"|| return $? + + +# 1er param check +ogCheckStringInGroup "$1" "SENDPARTITION sendpartition RECEIVERPARTITION receiverpartition SENDFILE sendfile RECEIVERFILE receiverfile" || ogRaiseError $OG_ERR_FORMAT "1st param: $1" || PERROR=1 #return $? + +# 2º param check +echo "$1" | grep "SEND" > /dev/null && MODE=server || MODE=client + +#TODO: diferenciamos los paramatros especificos de la sessión multicast +#SI: controlamos todos los parametros de la sessión multicast. +[ $MODE == "client" ] && SESSIONPARM=1 || SESSIONPARM=6 +OIFS=$IFS; IFS=':' ; SESSION=($2); IFS=$OIFS + + +[[ ${#SESSION[*]} == $SESSIONPARM ]] || ogRaiseError $OG_ERR_FORMAT "parametros session multicast no completa" || PERROR=2# return $? + + +#controlamos el PORTBASE de la sesion. Comun.- +PORTBASE=${SESSION[0]} +ogCheckStringInGroup ${SESSION[0]} "9000 9002 9004 9006 9008 9010" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $? +if [ $MODE == "server" ] +then + ogCheckStringInGroup ${SESSION[1]} "full-duplex FULL-DUPLEX half-duplex HALF-DUPLEX broadcast BROADCAST" || ogRaiseError $OG_ERR_FORMAT "McastSession method ${SESSION[1]}" || PERROR=4 #return $? + METHOD=${SESSION[1]} + ogCheckIpAddress ${SESSION[2]} || ogRaiseError $OG_ERR_FORMAT "McastSession address ${SESSION[2]}" || PERROR=5 #return $? + ADDRESS=${SESSION[2]} + ogCheckStringInReg ${SESSION[3]} "^[0-9]{1,2}\M$" || ogRaiseError $OG_ERR_FORMAT "McastSession bitrate ${SESSION[3]}" || PERROR=6 # return $? + BITRATE=${SESSION[3]} + ogCheckStringInReg ${SESSION[4]} "^[0-9]{1,10}$" || ogRaiseError $OG_ERR_FORMAT "McastSession nclients ${SESSION[4]}" || PERROR=7 # return $? + NCLIENTS=${SESSION[4]} + ogCheckStringInReg ${SESSION[5]} "^[0-9]{1,10}$" || ogRaiseError $OG_ERR_FORMAT "McastSession maxtime ${SESSION[5]}" || PERROR=8 # return $? + MAXTIME=${SESSION[5]} +fi + +#3er param check - que puede ser un dispositvo o un fichero. +#ogGetPath "$3" > /dev/null || ogRaiseError $OG_ERR_NOTFOUND " device or file $3" || PERROR=9 #return $? +DEVICE=$3 + +#4 y 5 param check . solo si es sobre particiones. +if [ "$PARM" == "5" ] +then + # 4 param check + ogCheckStringInGroup "$4" "partclone partimage ntfsclone" || ogRaiseError $OG_ERR_NOTFOUND " herramienta $4 no soportada" || PERROR=10 #return $? + TOOL=$4 + ogCheckStringInGroup "$5" "lzop gzip 0 1" || ogRaiseError $OG_ERR_NOTFOUND " compresor $5 no valido" || PERROR=11 #return $? + LEVEL=$5 +fi + + +[ "$PERROR" -gt "0" ] && return 1 + +# Valores estandar no configurables. +CERROR="8x8/128" + +# opción del usuo de tuberia intermedia en memoria mbuffer. +which mbuffer > /dev/null && MBUFFER=" --pipe 'mbuffer -q -m 20M' " + +# Generamos la instrucción base de multicast -Envio,Recepcion- +SYNTAXSERVER="udp-sender $MBUFFER --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 16 --min-clients $NCLIENTS --max-wait $MAXTIME " +SYNTAXCLIENT="udp-receiver $MBUFFER --portbase $PORTBASE " + + +case "$1" in +SENDPARTITION) + PROG1=`ogCreateImageSyntax $DEVICE " " $TOOL $LEVEL | awk -F"|" '{print $1 "|" $3}' | tr -d ">"` + echo "$PROG1 | $SYNTAXSERVER" + ;; + RECEIVERPARTITION) + COMPRESSOR=`ogRestoreImageSyntax " " $DEVICE $TOOL $LEVEL | awk -F\| '{print $1}'` + TOOLS=`ogRestoreImageSyntax " " $DEVICE $TOOL $LEVEL | awk -F\| '{print $NF}'` + echo "$SYNTAXCLIENT | $COMPRESSOR | $TOOLS " + ;; + SENDFILE) + echo "$SYNTAXSERVER --file $3" + ;; + RECEIVERFILE) + echo "$SYNTAXCLIENT --file $3" + ;; + *) + ;; +esac +} + + + +#/** +# ogMcastSendFile [ str_repo | int_ndisk int_npart ] /Relative_path_file sessionMulticast +#@brief Envía un fichero por multicast ORIGEN(fichero) DESTINO(sessionmulticast) +#@param (2 parámetros) $1 path_aboluto_fichero $2 sesionMcast +#@param (3 parámetros) $1 Contenedor REPO|CACHE $2 path_absoluto_fichero $3 sesionMulticast +#@param (4 parámetros) $1 disk $2 particion $3 path_absoluto_fichero $4 sesionMulticast +#@return +#@exception OG_ERR_FORMAT formato incorrecto. +#@note Requisitos: +#@version 0.91 - Definición de Protocol.lib +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2010/05/09 +#*/ ## +#/** +# + +function ogMcastSendFile () +{ +# Variables locales. +local ARGS SOURCE TARGET COMMAND DEVICE +#ARGS usado para controlar ubicación de la sesion multicast + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME [str_REPOSITORY] [int_ndisk int_npart] /Relative_path_file sesionMcast" \ + "$FUNCNAME 1 1 /aula1/winxp.img sesionMcast" \ + "$FUNCNAME REPO /aula1/ubuntu.iso sesionMcast" \ + "$FUNCNAME CACHE /aula1/winxp.img sesionMcast" \ + "$FUNCNAME /opt/opengnsys/images/aula1/hd500.vmx sesionMcast" + return +fi + +ARGS="$@" +case "$1" in + /*) # Camino completo. */ (Comentrio Doxygen) + SOURCE=$(ogGetPath "$1") + ARG=2 + DEVICE="$1" + ;; + [1-9]*) # ndisco npartición. + SOURCE=$(ogGetPath "$1" "$2" "$3") + ARG=4 + DEVICE="$1 $2 $3" + ;; + *) # Otros: repo, cache, cdrom (no se permiten caminos relativos). + SOURCE=$(ogGetPath "$1" "$2") + ARG=3 + DEVICE="$1 $2 " + ;; +esac + + +# Error si no se reciben los argumentos ARG necesarios según la opcion. +[ $# == "$ARG" ] || ogRaiseError $OG_ERR_FORMAT || return $? + +# Comprobar fichero origen +ogGetPath $SOURCE &> /dev/null || ogRaiseError $OG_ERR_NOTFOUND " device or file $DEVICE not found" || return $? + +SESSION=${!ARG} +# llamando a la funcion con param1 session $SESSION y param2 $SOURCE +COMMAND=`ogMcastSyntax "SENDFILE" "$SESSION" "$SOURCE"` +echo $COMMAND +eval $COMMAND +} + + + +#/** +# ogMcastReceiverFile sesion Multicast [ str_repo | int_ndisk int_npart ] /Relative_path_file +#@brief Recibe un fichero multicast ORIGEN(sesionmulticast) DESTINO(fichero) +#@param (2 parámetros) $1 sesionMcastCLIENT $2 path_aboluto_fichero_destino +#@param (3 parámetros) $1 sesionMcastCLIENT $2 Contenedor REPO|CACHE $3 path_absoluto_fichero_destino +#@param (4 parámetros) $1 sesionMcastCLIENT $2 disk $3 particion $4 path_absoluto_fichero_destino +#@return +#@exception OG_ERR_FORMAT formato incorrecto. +#@note Requisitos: +#@version 0.91 - Definición de Protocol.lib +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2010/05/09 +#*/ ## +#/** +# + +ogMcastReceiverFile () +{ + +# Variables locales. +local ARGS ARG TARGETDIR TARGETFILE + + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [ str_portMcast] [ [Relative_path_file] | [str_REPOSITORY path_file] | [int_ndisk int_npart path_file ] ]" \ + "$FUNCNAME 9000 /PS1_PH1.img" \ + "$FUNCNAME 9000 CACHE /aula1/PS2_PH4.img" \ + "$FUNCNAME 9000 1 1 /isos/linux.iso" + return +fi + +ARGS="$@" +case "$2" in + /*) # Camino completo. */ (Comentrio Doxygen) + TARGETDIR=$(ogGetParentPath "$2") + ARG=2 + ;; + [1-9]*) # ndisco npartición. + TARGETDIR=$(ogGetParentPath "$2" "$3" "$4") + ARG=4 + ;; + *) # Otros: repo, cache, cdrom (no se permiten caminos relativos). + TARGETDIR=$(ogGetParentPath "$2" "$3") + ARG=3 + ;; +esac + +# Error si no se reciben los argumentos ARG necesarios según la opcion. +[ $# == "$ARG" ] || ogRaiseError $OG_ERR_FORMAT "Parametros no admitidos"|| return $? + +#obtenemos el nombre del fichero a descargar. +TARGETFILE=`basename ${!ARG}` + +#generamos la instrucción a ejecutar. +COMMAND=`ogMcastSyntax RECEIVERFILE "$1" $TARGETDIR/$TARGETFILE ` +echo $COMMAND +eval $COMMAND +} + +#/** +# ogMcastSendPartition +#@brief Función para enviar el contenido de una partición a multiples particiones remotas. +#@param +#@param +#@param +#@return +#@exception +#@note +#@todo: ogIsLocked siempre devuelve 1. crear ticket +#@version 0.1 - Integración para OpenGNSys. +#@author +#@date +#*/ ## + +ogMcastSendPartition () +{ + +# Variables locales +local PART COMMAND + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart SessionMulticastSERVER tools compresor" \ + "$FUNCNAME 1 1 9000:full-duplex:239.194.37.31:50M:20:2 partclone lzop" + return +fi +# Error si no se reciben 5 parámetros. +[ "$#" == 5 ] || ogRaiseError $OG_ERR_FORMAT || return $? +#chequeamos la particion. +PART=$(ogDiskToDev "$1" "$2") || return $? + +#ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $? +ogUnmount $1 $2 + + +#generamos la instrucción a ejecutar. +COMMAND=`ogMcastSyntax SENDPARTITION "$3" $PART $4 $5` +echo $COMMAND +eval $COMMAND +} + +#/** +# ogMcastReceiverPartition +#@brief Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado por multicast. +#@param +#@param +#@param +#@return +#@exception +#@note +#@todo: +#@version 0.1 - Integración para OpenGNSys. +#@author +#@date +#*/ ## +ogMcastReceiverPartition () +{ +# Variables locales +local PART COMMAND + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart SessionMulticastCLIENT tools compresor" \ + "$FUNCNAME 1 1 9000 partclone lzop" + return +fi +# Error si no se reciben 5 parámetros. +[ "$#" == 5 ] || ogRaiseError $OG_ERR_FORMAT || return $? +#chequeamos la particion. +PART=$(ogDiskToDev "$1" "$2") || return $? + +#ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $? +ogUnmount $1 $2 + +#generamos la instrucción a ejecutar. +COMMAND=`ogMcastSyntax RECEIVERPARTITION "$3" $PART $4 $5` +echo $COMMAND +eval $COMMAND +} + + +########################################## +############## funciones torrent +#/** +# ogTorrentStart [ str_repo | int_ndisk int_npart ] Relative_path_file.torrent | SessionProtocol +#@brief Función iniciar P2P - requiere un tracker para todos los modos, y un seeder para los modos peer y leecher y los ficheros .torrent. +#@param str_pathDirectory str_Relative_path_file +#@param int_disk int_partition str_Relative_path_file +#@param str_REPOSITORY(CACHE - LOCAL) str_Relative_path_file +#@param (2 parámetros) $1 path_aboluto_fichero_torrent $2 Parametros_Session_Torrent +#@param (3 parámetros) $1 Contenedor CACHE $2 path_absoluto_fichero_Torrent $3 Parametros_Session_Torrent +#@param (4 parámetros) $1 disk $2 particion $3 path_absoluto_fichero_Torrent 4$ Parametros_Session_Torrent + +#@return +#@note +#@todo: +#@version 0.1 - Integración para OpenGNSys. +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date +#@version 0.2 - Chequeo del tamaño de imagen descargado. +#@author Irina . Univesidad de Sevilla. +#@date +#@version 0.3 - Control de los modos de operación, y estado de descarga. +#@author Antonio J. Doblas Viso. Univesidad de Málaga. +#@date +#@version 0.4 - Enviadando señal (2) a ctorrent permiendo la comunicación final con tracker +#@author Antonio J. Doblas Viso. Univesidad de Málaga. +#@date +#*/ ## + +#protocoloTORRENT mode:time +#mode=seeder -> Dejar el equipo seedeando hasta que transcurra el tiempo indicado o un kill desde consola, +#mode=peer -> seedear mientras descarga +#mode=leecher -> NO seedear mientras descarga +#time tiempo que una vez descargada la imagen queremos dejar al cliente como seeder. + +ogTorrentStart () +{ + +# Variables locales. +local ARGS ARG TARGETDIR TARGETFILE SESSION ERROR +ERROR=0 + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME $FUNCNAME [ str_repo] [ [Relative_path_fileTORRENT] | [str_REPOSITORY path_fileTORRENT] | [int_ndisk int_npart path_fileTORRENT ] ] SessionTorrent" \ + "$FUNCNAME CACHE /PS1_PH1.img.torrent seeder:10000" \ + "$FUNCNAME /opt/opengnsys/cache/linux.iso peer:60" \ + "$FUNCNAME 1 1 /linux.iso.torrent leecher:60" + return +fi + +case "$1" in + /*) # Camino completo. */ (Comentrio Doxygen) + SOURCE=$(ogGetPath "$1") + ARG=2 + ;; + [1-9]*) # ndisco npartición. + SOURCE=$(ogGetPath "$1" "$2" "$3") + ARG=4 + ;; + *) # Otros: Solo cache (no se permiten caminos relativos). + SOURCE=$(ogGetPath "$1" "$2" 2>/dev/null) + ARG=3 + ;; +esac + +# Error si no se reciben los argumentos ARG necesarios según la opcion. +[ $# == "$ARG" ] || ogRaiseError $OG_ERR_FORMAT "Parametros no admitidos"|| return $? + +#controlar source, que no se haga al repo. +if [ $ARG == "3" ] +then + ogCheckStringInGroup "$1" "CACHE cache" || ogRaiseError $OG_ERR_FORMAT "La descarga torrent solo se hace desde local, copia el torrent a la cache y realiza la operación desde esa ubicación" || return $? +fi +if [ $ARG == "2" ] +then + if `ogCheckStringInReg "$1" "^/opt/opengnsys/images"` + then + ogRaiseError $OG_ERR_FORMAT "La descarga torrent solo se hace desde local, copia el torrent a la cache y realiza la operación desde esa ubicación" + return $? + fi +fi + +#controlar el source, para que sea un torrent. +ctorrent -x ${SOURCE} &> /dev/null; [ $? -eq 0 ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return $? + +TARGET=`echo $SOURCE | awk -F.torrent '{print $1}'` +DIRSOURCE=`ogGetParentPath $SOURCE` +cd $DIRSOURCE + + + +SESSION=${!ARG} +OIFS=$IFS; IFS=':' ; SESSION=($SESSION); IFS=$OIFS +[[ ${#SESSION[*]} == 2 ]] || ogRaiseError $OG_ERR_FORMAT "parametros session Torrent no completa: modo:tiempo" || ERROR=1# return $? +#controlamos el modo de operación del cliente- +ogCheckStringInGroup ${SESSION[0]} "seeder SEEDER peer PEER leecher LEECHER" || ogRaiseError $OG_ERR_FORMAT "valor modo Torrent no valido ${SESSION[0]}" || ERROR=1 #return $? +MODE=${SESSION[0]} +#contolamos el tiempo para el seeder o una vez descargada la imagen como peer o leecher. +ogCheckStringInReg ${SESSION[1]} "^[0-9]{1,10}$" || ogRaiseError $OG_ERR_FORMAT "valor tiempo no valido ${SESSION[1]}" || ERROR=1 # return $? +TIME=${SESSION[1]} +# si ha habido error en el control de parametros error. +[ "$ERROR" == "1" ] && return 1 + + +#SYNTAXSEEDER="echo MODE seeder ctorrent ; (sleep \$TIME && kill -9 \`pidof ctorrent\`) & ; ctorrent \${SOURCE}" + +# si No fichero .bf, y Si fichero destino imagen ya descargada y su chequeo fue comprobado en su descarga inicial. +if [ ! -f ${SOURCE}.bf -a -f ${TARGET} ] +then + echo "imagen ya descargada" + case "$MODE" in + seeder|SEEDER) + echo "MODE seeder ctorrent" #### ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100" + (sleep $TIME && kill -2 `pidof ctorrent`) & + ctorrent -f ${SOURCE} + esac + return 0 +fi + +#Si no existe bf ni fichero destino descarga inicial. +if [ ! -f ${SOURCE}.bf -a ! -f ${TARGET} ] +then + OPTION=DOWNLOAD + echo "descarga inicial" +fi + +# Si fichero bf descarga anterior no completada -. +if [ -f ${SOURCE}.bf -a -f ${TARGET} ] +then + echo Continuar con Descargar inicial no terminada. + OPTION=DOWNLOAD +fi + +if [ "$OPTION" == "DOWNLOAD" ] +then + case "$MODE" in + peer|PEER) + echo "Donwloading Torrent as peer" ### echo "ctorrent -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 $SOURCE -s $TARGET -b ${SOURCE}.bf" + ctorrent -f -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf + ;; + leecher|LEECHER) + echo "Donwloading Torrent as leecher" # echo "ctorrent ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 -U 0" + ctorrent ${SOURCE} -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 -U 0 + ;; + seeder|SEEDER) + echo "MODE seeder ctorrent" #### ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100" + ctorrent -f -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf + ;; + esac +fi +cd /tmp +} + +#/** +# ogCreateTorrent [ str_repo | int_ndisk int_npart ] Relative_path_file +#@brief Función para crear el fichero torrent. +#@param str_pathDirectory str_Relative_path_file +#@param int_disk int_partition str_Relative_path_file +#@param str_REPOSITORY(CACHE - LOCAL) str_Relative_path_file +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. +#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. +#@exception OG_ERR_NOTOS La partición no tiene instalado un sistema operativo. +#@note +#@version 0.1 - Integración para OpenGNSys. +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date +#@version 0.2 - Integración para btlaunch. +#@author Irina . Univesidad de Sevilla. +#@date +#*/ ## + +ogCreateTorrent () +{ +# Variables locales. +local ARGS ARG SOURCE EXT IPTORRENT + + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [str_REPOSITORY] [int_ndisk int_npart] Relative_path_file IpBttrack" \ "$FUNCNAME 1 1 /aula1/winxp 10.1.15.23" \ + "$FUNCNAME REPO /aula1/winxp 10.1.15.45" + + return +fi + +# Error si se quiere crear el fichero en cache y no existe +[ "$1" != "CACHE" ] || `ogFindCache >/dev/null` || ogRaiseError $OG_ERR_NOTFOUND "CACHE"|| return $? + +case "$1" in + /*) # Camino completo. */ (Comentrio Doxygen) + SOURCE=$(ogGetPath "$1.img") + ARG=2 + ;; + [1-9]*) # ndisco npartición. + SOURCE=$(ogGetPath "$1" "$2" "$3.img") + ARG=4 + ;; + *) # Otros: repo, cache, cdrom (no se permiten caminos relativos). + EXT=$(ogGetImageType "$1" "$2") + SOURCE=$(ogGetPath "$1" "$2.$EXT") + ARG=3 + ;; +esac + +# Error si no se reciben los argumentos ARG necesarios según la opcion. +[ $# -eq "$ARG" ] || ogRaiseError $OG_ERR_FORMAT || return $? + + +# Error si no existe la imagen +[ $SOURCE ] || ogRaiseError $OG_ERR_NOTFOUND || return $? + +[ -r $SOURCE.torrent ] && mv "$SOURCE.torrent" "$SOURCE.torrent.ant" && echo "Esperamos que se refresque el servidor" && sleep 20 + +IPTORRENT="${!#}" +# Si ponemos el path completo cuando creamos el fichero torrent da error +cd `dirname $SOURCE` +echo ctorrent -t `basename $SOURCE` -u http://$IPTORRENT:6969/announce -s $SOURCE.torrent +ctorrent -t `basename $SOURCE` -u http://$IPTORRENT:6969/announce -s $SOURCE.torrent + +} + +#/** +# ogUpdateCacheIsNecesary [ str_repo ] Relative_path_file_OGIMG_with_/ +#@brief Comprueba que el fichero que se desea almacenar en la cache del cliente, no esta. +#@param 1 str_REPO +#@param 2 str_Relative_path_file_OGIMG_with_/ +#@return 0 si es necesario actualizar el fichero. +#@return 1 si la imagen ya esta en la cache, por lo tanto no es necesario actualizar el fichero +#@note +#@todo: Proceso en el caso de que el fichero tenga el mismo nombre, pero su contenido sea distinto. +#@todo: Se dejan mensajes mientras se confirma su funcionamiento. +#@version 0.1 - Integracion para OpenGNSys. +#@author Antonio J. Doblas Viso. Universidad de Malaga +#@date +#*/ ## +function ogUpdateCacheIsNecesary () +{ + +# Variables locales. +local ERROR SOURCE CACHE FILESOURCE MD5SOURCE FILETARGET MD5TARGET +ERROR=0 + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME $FUNCNAME [ str_repo] [ [Relative_path_image] " \ + "$FUNCNAME REPO /PS1_PH1.img" \ + "$FUNCNAME REPO /ogclient.sqfs" + + return +fi + +# Error si no se reciben los argumentos ARG necesarios según la opcion. +[ $# == "2" ] || ogRaiseError $OG_ERR_FORMAT "Parametros no admitidos"|| return $? + + +ogCheckStringInGroup "$1" "REPO repo" || ogRaiseError $OG_ERR_FORMAT "El contendor $1 no es valido, solo se admite REPO" || return $? + +FILESOURCE=`ogGetPath $1 $2` +FILETARGET=`ogGetPath CACHE $2` + +echo "paso 1. si no existe la imagen, confirmamos que es necesaria la actualizacion de la cache." +if [ -z $FILETARGET ] +then + # borramos el fichero bf del torrent, en el caso de que se hubiese quedado de algun proceso fallido + ogDeleteFile CACHE /$2.torrent.bf &> /dev/null + ogDeleteFile CACHE /$2.sum &> /dev/null + echo "Salida con valor 0, paso 1, la cache no contiene esa imagen " + return 0 +fi +echo "Paso 2. Comprobamos que la imagen no estuviese en un proceso previo torrent" +if ogGetPath $FILETARGET.torrent.bf > /dev/null +then + echo "Salida con valor 0, paso 2 la imagen esta en un estado de descarga torrent interrumpido." + #TODO: comprobar los md5 para asegurarnos que la imagen es la misma. + return 0 +fi + +## En este punto la imagen en el repo y en la cache se llaman igual, +echo "paso 4. recuperamos o calculamos los md5 de los ficheros" +if [ -f $FILESOURCE.sum ] +then + echo "leyendo el sum del fichero sum del repo" + MD5SOURCE=$(cat $FILESOURCE.sum) +#elif [ -f $FILETARGET.torrent ] +#then +# echo "leyendo el sum del fichero torrent de la cache" +# MD5SOURCE=$(ctorrent -x $FILETARGET.torrent | grep Comment | awk -F": " '{print $2}') +else + echo "calculando el sun del repo" + MD5SOURCE=$(md5sum $FILESOURCE | cut -f1 -d" ") +fi +if [ -f $FILETARGET.sum ] +then + echo "leyendo el sum de la cache" + MD5TARGET=$(cat $FILETARGET.sum) +else + echo "calculando el sum de la cache" + md5sum $FILETARGET | cut -f1 -d" " > $FILETARGET.sum + MD5TARGET=$(cat $FILETARGET.sum) +fi + +echo "Paso 5. comparamos los md5" +#TODO: que hacer cuando los md5 son distintos. Por defecto borrar. +if [ "$MD5SOURCE" == "$MD5TARGET" ] +then + echo "paso5.A la imagen esta en cache" + return 1 +else + echo "paso 5.b la imagen en cache es distinta, borramos la imagen anterior y devolvemos 0 para confirmar la actualizacion" + rm $FILETARGET + return 0 +fi + +} + + diff --git a/client/engine/String.lib.testing b/client/engine/String.lib.testing new file mode 100644 index 00000000..a81e3b07 --- /dev/null +++ b/client/engine/String.lib.testing @@ -0,0 +1,123 @@ +#!/bin/bash + +#/** +# ogCheckStringInGroup +#@brief Función para determinar si el elemento pertenece a un conjunto +#@param 1 elemento a comprobar +#@param 2 grupo de elementos para comprobar tipo "valor1 valor2 valor3" +#@return 0 si pertenece al grupo +#@return 1 si NO pertenece al grupo +#@exception OG_ERR_FORMAT formato incorrecto. +#@note +#@todo +#@version 0.91 - Definición de +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2010/05/09 +#*/ ## +#/** +ogCheckStringInGroup () +{ +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME str_elemento str_grupo" \ + "$FUNCNAME full-duplex \"full-duplex half-duplex broadcast\" " + return +fi + +# Error si no se recibe 2 parámetro. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? + + +for i in `echo $2` +do + if [ "$1" == "$i" ] + then + return 0 + fi +done + +return 1 +} + +#/** +# ogCheckStringInReg +#@brief Función para determinar si el elemento contiene una "expresión regular" +#@param 1 elemento a comprobar +#@param 2 expresión regular" +#@return 0 si coincide con la expresión +#@return 1 si NO coincide con la expresión +#@exception OG_ERR_FORMAT formato incorrecto. +#@note +#@todo +#@version 0.91 - Definición de +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2010/05/09 +#*/ ## +#/** + + +ogCheckStringInReg() +{ + +local REG + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME str_elemento str_expresión_regular" \ + "$FUNCNAME 50M \"^[0-9]{1,2}\M$\" " + return +fi + +# Error si no se recibe 2 parámetro. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +REG=$2 +[[ $1 =~ $REG ]] && return 0 || return 1 +} + + + +#/** +# ogCheckIpAddress +#@brief Función para determinar si una cadena es una dirección ipv4 válida +#@param 1 string de la ip a comprobar +#@return 0 si es una dirección válida +#@return 1 si NO es una dirección válida +#@exception OG_ERR_FORMAT formato incorrecto. +#@note +#@todo +#@version 0.91 - Definición de +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2010/05/09 +#*/ ## +#/** +ogCheckIpAddress() +{ +local REG IP arrIP + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME str_IpAddressToCheck" \ + "$FUNCNAME 192.18.35.3" + return +fi + +# Error si no se recibe 1 parámetro. +[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? + + +IP=$1 +REG="^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" +if [[ "$IP" =~ $REG ]] +then + OIFS=$IFS; + IFS='.' ; + arrIP=($IP) + IFS=$OIFS + if [[ ${arrIP[0]} -le 255 && ${arrIP[1]} -le 255 && ${arrIP[2]} -le 255 && ${arrIP[3]} -le 255 ]] + then + return 0 + fi +fi +return 1 +} diff --git a/client/engine/XFileSystem.lib b/client/engine/XFileSystem.lib new file mode 100755 index 00000000..53d197fb --- /dev/null +++ b/client/engine/XFileSystem.lib @@ -0,0 +1,293 @@ +#!/bin/bash +#/** +#@file FileSystem.lib +#@brief Librería o clase FileSystem +#@class FileSystem +#@brief Funciones para gestión de sistemas de archivos. +#@version 0.9 +#@warning License: GNU GPLv3+ +#*/ + + + + +#/** +# ogReduceFs int_ndisk int_npartition +#@brief Reduce el tamaño del sistema de archivos, sin tener en cuenta el espacio libre. +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@return tamañoKB +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. +#@exception OG_ERR_PARTITION Partición desconocida o no accesible. +#@warning En Windows, se borran los ficheros pagefile.sys e hiberfile.sys +#@warning El sistema de archivos se amplía al mínimo + 1 KB. +#@note Requisitos: *resize* +#@version 0.9 - Primera versión para OpenGNSys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-09-23 +#*/ ## +function ogReduceFs () +{ +# Variables locales +local PART BLKS SIZE +echo "xfile" +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \ + "$FUNCNAME 1 1" + return +fi +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +# Obtener partición. +PART="$(ogDiskToDev $1 $2)" || return $? + +# Redimensionar según el tipo de particion. +case "$(ogGetFsType $1 $2)" in + EXT[234]) + ogUnmount $1 $2 2>/dev/null + # Ext2/3/4: Tamaño de los bloques del sistema de archivos + BLKS=$(tune2fs -l $PART | awk '/Block size/ {print int($3/512)}') + # Traduce el num. en sectores de 512B a tamano en MB. + SIZE=$(resize2fs -P $PART 2>/dev/null | \ + awk -v B=$BLKS '/minimum size/ {print int($7*B/2048+1000)}') + resize2fs -fp $PART "${SIZE}M" &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $? + ;; +# REISERFS) # Usar "resize_reiserfs" +# ;; + NTFS|HNTFS) + ogDeleteFile $1 $2 pagefile.sys &>/dev/null + ogDeleteFile $1 $2 hiberfile.sys &>/dev/null + ogUnmount $1 $2 2>/dev/null +### Modificaciones del trunk + # NTFS: Obtiene tamaño mínimo en MB. 1.16 + #SIZEDATA=$(ntfsresize -fi $PART | awk '/resize at/ {printf "%d", $8*1.16}') + #SIZEDATA=$(ntfsresize -fi $PART | awk '/resize at/ {print $8+500}') + echo "iniciando calculo reduccion FS" + SIZE=$(ReduceFsNT2 $1 $2) +### fin modificaciones + echo "iniciando proceso de reduccion con $SIZE" + [ "$SIZE" == 0 ] && return 1 + ntfsresize -fs "${SIZE}M" $PART <<<"y" || ogRaiseError $OG_ERR_PARTITION "error reduciendo $1,$2" || return $? + #ntfsresize -fs "${SIZE}M" $PART <<<"y" >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $? + ;; + *) + echo "sin tipo de sistema archivos" + ogRaiseError $OG_ERR_PARTITION "$1,$2" + return $? ;; +esac +#/// Mostrar nuevo tamaño en KB. +echo $[SIZE*1024] +#echo $SIZE +} + + + + +function ReduceFsNT2 () +{ +#IMPORTANTE: retorna el valor en MB que podrá reducir el FS de una particion ntfs +#valor devulto 0, y codigo error 1. No se puede reducir, probar a reiniciar windows. + + +local PART RC MODE SIZE SIZEDATA +[ $# == 2 ] && MODE=STAGE1 +[ $# == 3 ] && MODE=STAGE2 +[ -z $MODE ] && return + +PART="$(ogDiskToDev $1 $2)" || return $? +ogUnmount $1 $2 &>/dev/null + + +case $MODE in + STAGE1) + # echo "primera etapa $*" + ntfsresize -fi $PART &>/dev/null + RC=`echo $?` + # echo "RC es" $RC + if [ "$RC" -eq "1" ] + then + echo "0" + return 1 + fi + SIZEDATA=$(ntfsresize -fi $PART | awk '/resize at/ {print $8+1000}') + # echo "salida" $? + # echo $SIZEDATA + ReduceFsNT2 $1 $2 $SIZEDATA + return 0 + ;; + STAGE2) + # echo "segunda etapa $*" + SIZEDATA=$3 + ntfsresize -fns "${SIZEDATA}M" $PART &>/tmp/ntfsresize.txt + RC=$? + if [ "$RC" == "0" ] + then + SIZE=$SIZEDATA + echo $SIZE + else + SIZEEXTRA=$(cat /tmp/ntfsresize.txt | awk '/Needed relocations :/ {print $0}' | awk -F"(" '{print $2}' | awk '{print $1+500}') + SIZE=$(expr $SIZEDATA + $SIZEEXTRA) + ReduceFsNT2 $1 $2 $SIZE + return 0 + fi + ;; + *) + return + ;; +esac + +} + + +function ogGetFreeSize () { +if [ $# = 0 ] +then + echo "sintaxis: ogGetFreeSize int_disco int_partition str_SizeOutput [ kB MB GB -default GB]-]" red + echo "devuelve int_size : int_data : int_free" red +return +fi +if [ $# -ge 2 ] +then + particion=`ogMount $1 $2 ` #1>/dev/null 2>&1 + if [ -z $3 ] + then + unit=kB # s B kB MB GB TB % + else + unit=$3 + fi + case $unit in + kB) + factor="1.024"; + #valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d:%d:%d", size,used,free}'` + valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d", free}'` + ;; + MB) + factor="1.024/1000"; + valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000; used=$3*1.024/1000; free=$4*1.024/1000; printf "%d:%d:%d", size,used,free}'` + ;; + GB) + factor="1.024/1000000"; + valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000000; used=$3*1.024/1000000; free=$4*1.024/1000000; printf "%f:%f:%f", size,used,free}'` + ;; + esac + #echo $valor + #NumberRound $valor + #valor=`NumberRound $valor`; + ogUnmount $1 $2 1>/dev/null 2>&1 + echo $valor + +fi +} + + + + + + + + + + +#/** @function ogGetFsSize: @brief Muestra el tamanio del sistema de archivos indicado, permite definir la unidad de medida, por defecto GB +#@param $1 int_disk +#@param $2 int_Partition +#@param $3 str_UnidadMediada parametro opcional, admite [ kB MB GB -default kB] +#@return cadena con int_TotalSize no=>:int_DataSize:int_DataFree +#@warning Salidas de errores no determinada +#@warning +#@attention +#@version 0.1 - Integracion para Opengnsys - EAC: SizeFileSystem() en FileSystem.lib +#@author Antonio J. Doblas Viso. Universidad de Malaga +#@date 2008-10-27 +#*/ +function ogGetFsSize () { +if [ $# = 0 ] +then + echo "sintaxis: ogGetFsSize int_disco int_partition str_SizeOutput [ kB MB GB -default GB]-]" red + echo "devuelve int_size : int_data : int_free" red +return +fi +if [ $# -ge 2 ] +then + particion=`ogMount $1 $2 ` #1>/dev/null 2>&1 + if [ -z $3 ] + then + unit=kB # s B kB MB GB TB % + else + unit=$3 + fi + case $unit in + kB) + factor="1.024"; + #valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d:%d:%d", size,used,free}'` + valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d", size}'` + ;; + MB) + factor="1.024/1000"; + valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000; used=$3*1.024/1000; free=$4*1.024/1000; printf "%d:%d:%d", size,used,free}'` + ;; + GB) + factor="1.024/1000000"; + valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000000; used=$3*1.024/1000000; free=$4*1.024/1000000; printf "%f:%f:%f", size,used,free}'` + ;; + esac + #echo $valor + #NumberRound $valor + #valor=`NumberRound $valor`; + ogUnmount $1 $2 1>/dev/null 2>&1 + echo $valor + +fi +} + +#/** copia literal del engine 1.0 +function ogDeletePartitionsLabels () +{ +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME " \ + "$FUNCNAME " + return +fi +rm /dev/disk/by-label/* 2>/dev/null # */ COMENTARIO OBLIGATORIO PARA DOXYGEN +} + + + + + + + + + + + + + +#/** copia literal del engine 1.0 +function ogDeletePartitionTable () +{ + +# Variables locales. +local DISK + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME int_disk" \ + "$FUNCNAME 1" + return +fi +# Error si no se reciben 1 parámetros. +[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +# Obteniendo Identificador linux de la particion. +DISK=$(ogDiskToDev $1) || return $? + +# Elimando las particiones con fdisk +echo -ne "o\nw" | fdisk $DISK +} + + -- cgit v1.2.3-18-g5258 From 05cfc624db3f0649bc7e055e08731642acc56ff7 Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 23 Feb 2011 19:59:50 +0000 Subject: version 1.0 --- bd -- ticket:302 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1487 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Database/ogAdmBD.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql index 91497f31..8cf65dc1 100644 --- a/admin/Database/ogAdmBD.sql +++ b/admin/Database/ogAdmBD.sql @@ -104,7 +104,7 @@ CREATE TABLE IF NOT EXISTS `aulas` ( `netmask` VARCHAR( 30 ), `dns` VARCHAR (30), `modp2p` enum('seeder','peer','leecher') DEFAULT 'seeder', - `timep2p` INT(11) NOT NULL DEFAULT '60' + `timep2p` INT(11) NOT NULL DEFAULT '60', PRIMARY KEY (`idaula`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- cgit v1.2.3-18-g5258 From d7d9340df52a019519ad3fbfeefc8bf03aa150ef Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 23 Feb 2011 20:22:59 +0000 Subject: elimando programas compilados del directorio de exportacion bin para el cliente git-svn-id: https://opengnsys.es/svn/branches/version1.0@1488 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/nfsexport/bin/EACInterfaces | Bin 0 -> 9682 bytes client/nfsexport/bin/awk | Bin 932548 -> 0 bytes client/nfsexport/bin/bash | Bin 1373232 -> 0 bytes client/nfsexport/bin/chntpw | Bin 758632 -> 0 bytes client/nfsexport/bin/ctorrent | Bin 817372 -> 0 bytes client/nfsexport/bin/dosfsck | Bin 601276 -> 0 bytes client/nfsexport/bin/dosfslabel | Bin 593084 -> 0 bytes client/nfsexport/bin/i386/EACInterfaces | Bin 9682 -> 0 bytes client/nfsexport/bin/i386/gzip | Bin 599428 -> 0 bytes client/nfsexport/bin/i386/mbuffer | Bin 666884 -> 0 bytes client/nfsexport/bin/i386/mkntfs | Bin 228336 -> 0 bytes client/nfsexport/bin/i386/partclone.btrfs | Bin 695592 -> 0 bytes client/nfsexport/bin/i386/partclone.chkimg | Bin 556100 -> 0 bytes client/nfsexport/bin/i386/partclone.dd | Bin 556100 -> 0 bytes client/nfsexport/bin/i386/partclone.extfs | Bin 589048 -> 0 bytes client/nfsexport/bin/i386/partclone.fat | Bin 572484 -> 0 bytes client/nfsexport/bin/i386/partclone.hfsp | Bin 568388 -> 0 bytes client/nfsexport/bin/i386/partclone.info | Bin 547876 -> 0 bytes client/nfsexport/bin/i386/partclone.ntfs | Bin 711912 -> 0 bytes client/nfsexport/bin/i386/partclone.ntfsfixboot | Bin 523300 -> 0 bytes client/nfsexport/bin/i386/partclone.restore | Bin 556100 -> 0 bytes client/nfsexport/bin/i386/partprobe | Bin 17924 -> 0 bytes client/nfsexport/bin/i386/udp-receiver | Bin 48000 -> 0 bytes client/nfsexport/bin/i386/udp-sender | Bin 56836 -> 0 bytes client/nfsexport/bin/kexec | Bin 737604 -> 0 bytes client/nfsexport/bin/lshw | Bin 2073760 -> 0 bytes client/nfsexport/bin/mkdosfs | Bin 573148 -> 0 bytes client/nfsexport/bin/ms-sys | Bin 563072 -> 0 bytes client/nfsexport/bin/ntfscat | Bin 676904 -> 0 bytes client/nfsexport/bin/ntfsclone | Bin 698332 -> 0 bytes client/nfsexport/bin/ntfscluster | Bin 682572 -> 0 bytes client/nfsexport/bin/ntfscmp | Bin 685312 -> 0 bytes client/nfsexport/bin/ntfscp | Bin 682588 -> 0 bytes client/nfsexport/bin/ntfsfix | Bin 681000 -> 0 bytes client/nfsexport/bin/ntfsinfo | Bin 706168 -> 0 bytes client/nfsexport/bin/ntfslabel | Bin 676904 -> 0 bytes client/nfsexport/bin/ntfsls | Bin 682268 -> 0 bytes client/nfsexport/bin/ntfsundelete | Bin 767408 -> 0 bytes client/nfsexport/bin/partimage | Bin 1468144 -> 0 bytes client/nfsexport/bin/testing/ethtool | Bin 170640 -> 0 bytes client/nfsexport/bin/testing/faucet | Bin 17908 -> 0 bytes client/nfsexport/bin/testing/file | Bin 13784 -> 0 bytes client/nfsexport/bin/testing/fsarchiver | Bin 2045398 -> 0 bytes client/nfsexport/bin/testing/hdparm | Bin 80428 -> 0 bytes client/nfsexport/bin/testing/hose | Bin 17896 -> 0 bytes client/nfsexport/bin/testing/ifconfig | Bin 65648 -> 0 bytes client/nfsexport/bin/testing/libgcc_s.so.1 | Bin 116272 -> 0 bytes client/nfsexport/bin/testing/libmagic.so.1 | Bin 112256 -> 0 bytes client/nfsexport/bin/testing/lzop | Bin 31496 -> 0 bytes client/nfsexport/bin/testing/magic | 15283 -------------------- client/nfsexport/bin/testing/magic.mgc | Bin 1775200 -> 0 bytes client/nfsexport/bin/testing/magic.mime | 1027 -- client/nfsexport/bin/testing/mbuffer | Bin 112353 -> 0 bytes client/nfsexport/bin/testing/partimage | Bin 1382420 -> 0 bytes client/nfsexport/bin/testing/pv | Bin 14404 -> 0 bytes client/nfsexport/bin/testing/udp-receiver | Bin 48000 -> 0 bytes client/nfsexport/bin/testing/udp-sender | Bin 56836 -> 0 bytes client/nfsexport/bin/testing/whereis | Bin 9856 -> 0 bytes client/nfsexport/bin/x86_64/gzip | Bin 754712 -> 0 bytes client/nfsexport/bin/x86_64/mbuffer | Bin 849416 -> 0 bytes client/nfsexport/bin/x86_64/mkntfs | Bin 203496 -> 0 bytes client/nfsexport/bin/x86_64/ntfsresize | Bin 178920 -> 0 bytes client/nfsexport/bin/x86_64/partclone.btrfs | Bin 841112 -> 0 bytes client/nfsexport/bin/x86_64/partclone.chkimg | Bin 713880 -> 0 bytes client/nfsexport/bin/x86_64/partclone.dd | Bin 713880 -> 0 bytes client/nfsexport/bin/x86_64/partclone.extfs | Bin 746960 -> 0 bytes client/nfsexport/bin/x86_64/partclone.fat | Bin 726200 -> 0 bytes client/nfsexport/bin/x86_64/partclone.hfsp | Bin 722072 -> 0 bytes client/nfsexport/bin/x86_64/partclone.info | Bin 701592 -> 0 bytes client/nfsexport/bin/x86_64/partclone.ntfs | Bin 849240 -> 0 bytes client/nfsexport/bin/x86_64/partclone.ntfsfixboot | Bin 672888 -> 0 bytes client/nfsexport/bin/x86_64/partclone.restore | Bin 713880 -> 0 bytes client/nfsexport/bin/x86_64/partprobe | Bin 324856 -> 0 bytes client/nfsexport/bin/x86_64/udp-receiver | Bin 52704 -> 0 bytes client/nfsexport/bin/x86_64/udp-sender | Bin 61992 -> 0 bytes 75 files changed, 16310 deletions(-) create mode 100755 client/nfsexport/bin/EACInterfaces delete mode 100755 client/nfsexport/bin/awk delete mode 100755 client/nfsexport/bin/bash delete mode 100755 client/nfsexport/bin/chntpw delete mode 100755 client/nfsexport/bin/ctorrent delete mode 100755 client/nfsexport/bin/dosfsck delete mode 100755 client/nfsexport/bin/dosfslabel delete mode 100755 client/nfsexport/bin/i386/EACInterfaces delete mode 100755 client/nfsexport/bin/i386/gzip delete mode 100755 client/nfsexport/bin/i386/mbuffer delete mode 100755 client/nfsexport/bin/i386/mkntfs delete mode 100755 client/nfsexport/bin/i386/partclone.btrfs delete mode 100755 client/nfsexport/bin/i386/partclone.chkimg delete mode 100755 client/nfsexport/bin/i386/partclone.dd delete mode 100755 client/nfsexport/bin/i386/partclone.extfs delete mode 100755 client/nfsexport/bin/i386/partclone.fat delete mode 100755 client/nfsexport/bin/i386/partclone.hfsp delete mode 100755 client/nfsexport/bin/i386/partclone.info delete mode 100755 client/nfsexport/bin/i386/partclone.ntfs delete mode 100755 client/nfsexport/bin/i386/partclone.ntfsfixboot delete mode 100755 client/nfsexport/bin/i386/partclone.restore delete mode 100755 client/nfsexport/bin/i386/partprobe delete mode 100755 client/nfsexport/bin/i386/udp-receiver delete mode 100755 client/nfsexport/bin/i386/udp-sender delete mode 100755 client/nfsexport/bin/kexec delete mode 100755 client/nfsexport/bin/lshw delete mode 100755 client/nfsexport/bin/mkdosfs delete mode 100755 client/nfsexport/bin/ms-sys delete mode 100755 client/nfsexport/bin/ntfscat delete mode 100755 client/nfsexport/bin/ntfsclone delete mode 100755 client/nfsexport/bin/ntfscluster delete mode 100755 client/nfsexport/bin/ntfscmp delete mode 100755 client/nfsexport/bin/ntfscp delete mode 100755 client/nfsexport/bin/ntfsfix delete mode 100755 client/nfsexport/bin/ntfsinfo delete mode 100755 client/nfsexport/bin/ntfslabel delete mode 100755 client/nfsexport/bin/ntfsls delete mode 100755 client/nfsexport/bin/ntfsundelete delete mode 100755 client/nfsexport/bin/partimage delete mode 100755 client/nfsexport/bin/testing/ethtool delete mode 100755 client/nfsexport/bin/testing/faucet delete mode 100755 client/nfsexport/bin/testing/file delete mode 100755 client/nfsexport/bin/testing/fsarchiver delete mode 100755 client/nfsexport/bin/testing/hdparm delete mode 100755 client/nfsexport/bin/testing/hose delete mode 100755 client/nfsexport/bin/testing/ifconfig delete mode 100755 client/nfsexport/bin/testing/libgcc_s.so.1 delete mode 100644 client/nfsexport/bin/testing/libmagic.so.1 delete mode 100755 client/nfsexport/bin/testing/lzop delete mode 100644 client/nfsexport/bin/testing/magic delete mode 100644 client/nfsexport/bin/testing/magic.mgc delete mode 100644 client/nfsexport/bin/testing/magic.mime delete mode 100755 client/nfsexport/bin/testing/mbuffer delete mode 100755 client/nfsexport/bin/testing/partimage delete mode 100755 client/nfsexport/bin/testing/pv delete mode 100755 client/nfsexport/bin/testing/udp-receiver delete mode 100755 client/nfsexport/bin/testing/udp-sender delete mode 100755 client/nfsexport/bin/testing/whereis delete mode 100755 client/nfsexport/bin/x86_64/gzip delete mode 100755 client/nfsexport/bin/x86_64/mbuffer delete mode 100755 client/nfsexport/bin/x86_64/mkntfs delete mode 100755 client/nfsexport/bin/x86_64/ntfsresize delete mode 100755 client/nfsexport/bin/x86_64/partclone.btrfs delete mode 100755 client/nfsexport/bin/x86_64/partclone.chkimg delete mode 100755 client/nfsexport/bin/x86_64/partclone.dd delete mode 100755 client/nfsexport/bin/x86_64/partclone.extfs delete mode 100755 client/nfsexport/bin/x86_64/partclone.fat delete mode 100755 client/nfsexport/bin/x86_64/partclone.hfsp delete mode 100755 client/nfsexport/bin/x86_64/partclone.info delete mode 100755 client/nfsexport/bin/x86_64/partclone.ntfs delete mode 100755 client/nfsexport/bin/x86_64/partclone.ntfsfixboot delete mode 100755 client/nfsexport/bin/x86_64/partclone.restore delete mode 100755 client/nfsexport/bin/x86_64/partprobe delete mode 100755 client/nfsexport/bin/x86_64/udp-receiver delete mode 100755 client/nfsexport/bin/x86_64/udp-sender diff --git a/client/nfsexport/bin/EACInterfaces b/client/nfsexport/bin/EACInterfaces new file mode 100755 index 00000000..b63b1db1 Binary files /dev/null and b/client/nfsexport/bin/EACInterfaces differ diff --git a/client/nfsexport/bin/awk b/client/nfsexport/bin/awk deleted file mode 100755 index 572fd029..00000000 Binary files a/client/nfsexport/bin/awk and /dev/null differ diff --git a/client/nfsexport/bin/bash b/client/nfsexport/bin/bash deleted file mode 100755 index 90c65ec6..00000000 Binary files a/client/nfsexport/bin/bash and /dev/null differ diff --git a/client/nfsexport/bin/chntpw b/client/nfsexport/bin/chntpw deleted file mode 100755 index 2396206a..00000000 Binary files a/client/nfsexport/bin/chntpw and /dev/null differ diff --git a/client/nfsexport/bin/ctorrent b/client/nfsexport/bin/ctorrent deleted file mode 100755 index 5ffdcd83..00000000 Binary files a/client/nfsexport/bin/ctorrent and /dev/null differ diff --git a/client/nfsexport/bin/dosfsck b/client/nfsexport/bin/dosfsck deleted file mode 100755 index b041e1bd..00000000 Binary files a/client/nfsexport/bin/dosfsck and /dev/null differ diff --git a/client/nfsexport/bin/dosfslabel b/client/nfsexport/bin/dosfslabel deleted file mode 100755 index 007894bb..00000000 Binary files a/client/nfsexport/bin/dosfslabel and /dev/null differ diff --git a/client/nfsexport/bin/i386/EACInterfaces b/client/nfsexport/bin/i386/EACInterfaces deleted file mode 100755 index b63b1db1..00000000 Binary files a/client/nfsexport/bin/i386/EACInterfaces and /dev/null differ diff --git a/client/nfsexport/bin/i386/gzip b/client/nfsexport/bin/i386/gzip deleted file mode 100755 index 4cd612a8..00000000 Binary files a/client/nfsexport/bin/i386/gzip and /dev/null differ diff --git a/client/nfsexport/bin/i386/mbuffer b/client/nfsexport/bin/i386/mbuffer deleted file mode 100755 index 913121fb..00000000 Binary files a/client/nfsexport/bin/i386/mbuffer and /dev/null differ diff --git a/client/nfsexport/bin/i386/mkntfs b/client/nfsexport/bin/i386/mkntfs deleted file mode 100755 index e3a32f2e..00000000 Binary files a/client/nfsexport/bin/i386/mkntfs and /dev/null differ diff --git a/client/nfsexport/bin/i386/partclone.btrfs b/client/nfsexport/bin/i386/partclone.btrfs deleted file mode 100755 index f2bcff85..00000000 Binary files a/client/nfsexport/bin/i386/partclone.btrfs and /dev/null differ diff --git a/client/nfsexport/bin/i386/partclone.chkimg b/client/nfsexport/bin/i386/partclone.chkimg deleted file mode 100755 index 9499a8fb..00000000 Binary files a/client/nfsexport/bin/i386/partclone.chkimg and /dev/null differ diff --git a/client/nfsexport/bin/i386/partclone.dd b/client/nfsexport/bin/i386/partclone.dd deleted file mode 100755 index 440ea69c..00000000 Binary files a/client/nfsexport/bin/i386/partclone.dd and /dev/null differ diff --git a/client/nfsexport/bin/i386/partclone.extfs b/client/nfsexport/bin/i386/partclone.extfs deleted file mode 100755 index 8f5b2890..00000000 Binary files a/client/nfsexport/bin/i386/partclone.extfs and /dev/null differ diff --git a/client/nfsexport/bin/i386/partclone.fat b/client/nfsexport/bin/i386/partclone.fat deleted file mode 100755 index 038ee0a2..00000000 Binary files a/client/nfsexport/bin/i386/partclone.fat and /dev/null differ diff --git a/client/nfsexport/bin/i386/partclone.hfsp b/client/nfsexport/bin/i386/partclone.hfsp deleted file mode 100755 index fd60a93b..00000000 Binary files a/client/nfsexport/bin/i386/partclone.hfsp and /dev/null differ diff --git a/client/nfsexport/bin/i386/partclone.info b/client/nfsexport/bin/i386/partclone.info deleted file mode 100755 index 8a3cdaad..00000000 Binary files a/client/nfsexport/bin/i386/partclone.info and /dev/null differ diff --git a/client/nfsexport/bin/i386/partclone.ntfs b/client/nfsexport/bin/i386/partclone.ntfs deleted file mode 100755 index 221353b2..00000000 Binary files a/client/nfsexport/bin/i386/partclone.ntfs and /dev/null differ diff --git a/client/nfsexport/bin/i386/partclone.ntfsfixboot b/client/nfsexport/bin/i386/partclone.ntfsfixboot deleted file mode 100755 index 888b5087..00000000 Binary files a/client/nfsexport/bin/i386/partclone.ntfsfixboot and /dev/null differ diff --git a/client/nfsexport/bin/i386/partclone.restore b/client/nfsexport/bin/i386/partclone.restore deleted file mode 100755 index ddb00d9a..00000000 Binary files a/client/nfsexport/bin/i386/partclone.restore and /dev/null differ diff --git a/client/nfsexport/bin/i386/partprobe b/client/nfsexport/bin/i386/partprobe deleted file mode 100755 index acba5c6e..00000000 Binary files a/client/nfsexport/bin/i386/partprobe and /dev/null differ diff --git a/client/nfsexport/bin/i386/udp-receiver b/client/nfsexport/bin/i386/udp-receiver deleted file mode 100755 index 6b230aaa..00000000 Binary files a/client/nfsexport/bin/i386/udp-receiver and /dev/null differ diff --git a/client/nfsexport/bin/i386/udp-sender b/client/nfsexport/bin/i386/udp-sender deleted file mode 100755 index 87789a05..00000000 Binary files a/client/nfsexport/bin/i386/udp-sender and /dev/null differ diff --git a/client/nfsexport/bin/kexec b/client/nfsexport/bin/kexec deleted file mode 100755 index 279c9d21..00000000 Binary files a/client/nfsexport/bin/kexec and /dev/null differ diff --git a/client/nfsexport/bin/lshw b/client/nfsexport/bin/lshw deleted file mode 100755 index 2aba62b1..00000000 Binary files a/client/nfsexport/bin/lshw and /dev/null differ diff --git a/client/nfsexport/bin/mkdosfs b/client/nfsexport/bin/mkdosfs deleted file mode 100755 index 2fe2ce1f..00000000 Binary files a/client/nfsexport/bin/mkdosfs and /dev/null differ diff --git a/client/nfsexport/bin/ms-sys b/client/nfsexport/bin/ms-sys deleted file mode 100755 index 28ebe4ff..00000000 Binary files a/client/nfsexport/bin/ms-sys and /dev/null differ diff --git a/client/nfsexport/bin/ntfscat b/client/nfsexport/bin/ntfscat deleted file mode 100755 index 87d95353..00000000 Binary files a/client/nfsexport/bin/ntfscat and /dev/null differ diff --git a/client/nfsexport/bin/ntfsclone b/client/nfsexport/bin/ntfsclone deleted file mode 100755 index 280371dd..00000000 Binary files a/client/nfsexport/bin/ntfsclone and /dev/null differ diff --git a/client/nfsexport/bin/ntfscluster b/client/nfsexport/bin/ntfscluster deleted file mode 100755 index da9107cf..00000000 Binary files a/client/nfsexport/bin/ntfscluster and /dev/null differ diff --git a/client/nfsexport/bin/ntfscmp b/client/nfsexport/bin/ntfscmp deleted file mode 100755 index 81680cf6..00000000 Binary files a/client/nfsexport/bin/ntfscmp and /dev/null differ diff --git a/client/nfsexport/bin/ntfscp b/client/nfsexport/bin/ntfscp deleted file mode 100755 index 041ab83d..00000000 Binary files a/client/nfsexport/bin/ntfscp and /dev/null differ diff --git a/client/nfsexport/bin/ntfsfix b/client/nfsexport/bin/ntfsfix deleted file mode 100755 index a1ddcb8c..00000000 Binary files a/client/nfsexport/bin/ntfsfix and /dev/null differ diff --git a/client/nfsexport/bin/ntfsinfo b/client/nfsexport/bin/ntfsinfo deleted file mode 100755 index 4a4c456a..00000000 Binary files a/client/nfsexport/bin/ntfsinfo and /dev/null differ diff --git a/client/nfsexport/bin/ntfslabel b/client/nfsexport/bin/ntfslabel deleted file mode 100755 index edf31d90..00000000 Binary files a/client/nfsexport/bin/ntfslabel and /dev/null differ diff --git a/client/nfsexport/bin/ntfsls b/client/nfsexport/bin/ntfsls deleted file mode 100755 index bfbdb87b..00000000 Binary files a/client/nfsexport/bin/ntfsls and /dev/null differ diff --git a/client/nfsexport/bin/ntfsundelete b/client/nfsexport/bin/ntfsundelete deleted file mode 100755 index 383b348b..00000000 Binary files a/client/nfsexport/bin/ntfsundelete and /dev/null differ diff --git a/client/nfsexport/bin/partimage b/client/nfsexport/bin/partimage deleted file mode 100755 index 7e9cd8ee..00000000 Binary files a/client/nfsexport/bin/partimage and /dev/null differ diff --git a/client/nfsexport/bin/testing/ethtool b/client/nfsexport/bin/testing/ethtool deleted file mode 100755 index 36a9677c..00000000 Binary files a/client/nfsexport/bin/testing/ethtool and /dev/null differ diff --git a/client/nfsexport/bin/testing/faucet b/client/nfsexport/bin/testing/faucet deleted file mode 100755 index 85afbb19..00000000 Binary files a/client/nfsexport/bin/testing/faucet and /dev/null differ diff --git a/client/nfsexport/bin/testing/file b/client/nfsexport/bin/testing/file deleted file mode 100755 index 589afdf6..00000000 Binary files a/client/nfsexport/bin/testing/file and /dev/null differ diff --git a/client/nfsexport/bin/testing/fsarchiver b/client/nfsexport/bin/testing/fsarchiver deleted file mode 100755 index 0eb4a594..00000000 Binary files a/client/nfsexport/bin/testing/fsarchiver and /dev/null differ diff --git a/client/nfsexport/bin/testing/hdparm b/client/nfsexport/bin/testing/hdparm deleted file mode 100755 index 6be2c3ca..00000000 Binary files a/client/nfsexport/bin/testing/hdparm and /dev/null differ diff --git a/client/nfsexport/bin/testing/hose b/client/nfsexport/bin/testing/hose deleted file mode 100755 index 69f68573..00000000 Binary files a/client/nfsexport/bin/testing/hose and /dev/null differ diff --git a/client/nfsexport/bin/testing/ifconfig b/client/nfsexport/bin/testing/ifconfig deleted file mode 100755 index 788f898e..00000000 Binary files a/client/nfsexport/bin/testing/ifconfig and /dev/null differ diff --git a/client/nfsexport/bin/testing/libgcc_s.so.1 b/client/nfsexport/bin/testing/libgcc_s.so.1 deleted file mode 100755 index c57a3b64..00000000 Binary files a/client/nfsexport/bin/testing/libgcc_s.so.1 and /dev/null differ diff --git a/client/nfsexport/bin/testing/libmagic.so.1 b/client/nfsexport/bin/testing/libmagic.so.1 deleted file mode 100644 index deb6107a..00000000 Binary files a/client/nfsexport/bin/testing/libmagic.so.1 and /dev/null differ diff --git a/client/nfsexport/bin/testing/lzop b/client/nfsexport/bin/testing/lzop deleted file mode 100755 index 1389feb3..00000000 Binary files a/client/nfsexport/bin/testing/lzop and /dev/null differ diff --git a/client/nfsexport/bin/testing/magic b/client/nfsexport/bin/testing/magic deleted file mode 100644 index 7ae875db..00000000 --- a/client/nfsexport/bin/testing/magic +++ /dev/null @@ -1,15283 +0,0 @@ -# Magic data for file(1) command. -# Format is described in magic(5). -# Don't edit this file, edit /etc/magic or send your suggested inclusions to -# this file as a wishlist bug against file (using the reportbug utility). - - -#------------------------------------------------------------------------------ -# Localstuff: file(1) magic for locally observed files -# -# $File: Localstuff,v 1.4 2003/03/23 04:17:27 christos Exp $ -# Add any locally observed files here. Remember: -# text if readable, executable if runnable binary, data if unreadable. -#------------------------------------------------------------------------------ -# acorn: file(1) magic for files found on Acorn systems -# - -# RISC OS Chunk File Format -# From RISC OS Programmer's Reference Manual, Appendix D -# We guess the file type from the type of the first chunk. -0 lelong 0xc3cbc6c5 RISC OS Chunk data ->12 string OBJ_ \b, AOF object ->12 string LIB_ \b, ALF library - -# RISC OS AIF, contains "SWI OS_Exit" at offset 16. -16 lelong 0xef000011 RISC OS AIF executable - -# RISC OS Draw files -# From RISC OS Programmer's Reference Manual, Appendix E -0 string Draw RISC OS Draw file data - -# RISC OS new format font files -# From RISC OS Programmer's Reference Manual, Appendix E -0 string FONT\0 RISC OS outline font data, ->5 byte x version %d -0 string FONT\1 RISC OS 1bpp font data, ->5 byte x version %d -0 string FONT\4 RISC OS 4bpp font data ->5 byte x version %d - -# RISC OS Music files -# From RISC OS Programmer's Reference Manual, Appendix E -0 string Maestro\r RISC OS music file ->8 byte x version %d - ->8 byte x type %d - -# Digital Symphony data files -# From: Bernard Jungen (bern8817@euphonynet.be) -0 string \x02\x01\x13\x13\x13\x01\x0d\x10 Digital Symphony sound sample (RISC OS), ->8 byte x version %d, ->9 pstring x named "%s", ->(9.b+19) byte =0 8-bit logarithmic ->(9.b+19) byte =1 LZW-compressed linear ->(9.b+19) byte =2 8-bit linear signed ->(9.b+19) byte =3 16-bit linear signed ->(9.b+19) byte =4 SigmaDelta-compressed linear ->(9.b+19) byte =5 SigmaDelta-compressed logarithmic ->(9.b+19) byte >5 unknown format - -0 string \x02\x01\x13\x13\x14\x12\x01\x0b Digital Symphony song (RISC OS), ->8 byte x version %d, ->9 byte =1 1 voice, ->9 byte !1 %d voices, ->10 leshort =1 1 track, ->10 leshort !1 %d tracks, ->12 leshort =1 1 pattern ->12 leshort !1 %d patterns - -0 string \x02\x01\x13\x13\x10\x14\x12\x0e ->9 byte =0 Digital Symphony sequence (RISC OS), ->>8 byte x version %d, ->>10 byte =1 1 line, ->>10 byte !1 %d lines, ->>11 leshort =1 1 position ->>11 leshort !1 %d positions ->9 byte =1 Digital Symphony pattern data (RISC OS), ->>8 byte x version %d, ->>10 leshort =1 1 pattern ->>10 leshort !1 %d patterns - -#------------------------------------------------------------------------------ -# adi: file(1) magic for ADi's objects -# From Gregory McGarry -# -0 leshort 0x521c COFF DSP21k ->18 lelong &02 executable, ->18 lelong ^02 ->>18 lelong &01 static object, ->>18 lelong ^01 relocatable object, ->18 lelong &010 stripped ->18 lelong ^010 not stripped - -#------------------------------------------------------------------------------ -# adventure: file(1) magic for Adventure game files -# -# from Allen Garvin -# Edited by Dave Chapeskie Jun 28, 1998 -# Edited by Chris Chittleborough , March 2002 -# -# ALAN -# I assume there are other, lower versions, but these are the only ones I -# saw in the archive. -0 beshort 0x0206 ALAN game data ->2 byte <10 version 2.6%d - - -# Infocom (see z-machine) -#------------------------------------------------------------------------------ -# Z-machine: file(1) magic for Z-machine binaries. -# -# Updated by Adam Buchbinder -# -# The first byte is the Z-machine revision; it is always between 1 and 8. We -# had false matches (for instance, inbig5.ocp from the Omega TeX extension as -# well as an occasional MP3 file), so we sanity-check the version number. -# -# It might be possible to sanity-check the release number as well, as it seems -# (at least in classic Infocom games) to always be a relatively small number, -# always under 150 or so, but as this isn't rigorous, we'll wait on that until -# it becomes clear that it's needed. -# -0 ubyte >0 ->0 ubyte <9 ->>16 belong&0xfe00f0f0 0x3030 Infocom game data ->>>0 ubyte x (Z-machine %d, ->>>>2 ubeshort x Release %d / ->>>>18 string >\0 Serial %.6s) - -#------------------------------------------------------------------------------ -# Glulx: file(1) magic for Glulx binaries. -# -# I haven't checked for false matches yet. -# -0 string Glul Glulx game data ->4 beshort x (Version %d ->>6 byte x \b.%d ->>8 byte x \b.%d) ->36 string Info Compiled by Inform - - - -# For Quetzal and blorb magic see iff - - -# TADS (Text Adventure Development System) -# All files are machine-independent (games compile to byte-code) and are tagged -# with a version string of the form "V2..\0" (but TADS 3 is -# on the way). -# Game files start with "TADS2 bin\n\r\032\0" then the compiler version. -0 string TADS2\ bin TADS ->9 belong !0x0A0D1A00 game data, CORRUPTED ->9 belong 0x0A0D1A00 ->>13 string >\0 %s game data -# Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version. -0 string TADS2\ rsc TADS ->9 belong !0x0A0D1A00 resource data, CORRUPTED ->9 belong 0x0A0D1A00 ->>13 string >\0 %s resource data -# Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian -# 2-byte length N, the N-char name of the game file *without* a NUL (darn!), -# "TADS2 save\n\r\032\0" and the interpreter version. -0 string TADS2\ save/g TADS ->12 belong !0x0A0D1A00 saved game data, CORRUPTED ->12 belong 0x0A0D1A00 ->>(16.s+32) string >\0 %s saved game data -# Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter -# version. -0 string TADS2\ save TADS ->10 belong !0x0A0D1A00 saved game data, CORRUPTED ->10 belong 0x0A0D1A00 ->>14 string >\0 %s saved game data - -# Danny Milosavljevic -# this are adrift (adventure game standard) game files, extension .taf -# depending on version magic continues with 0x93453E6139FA (V 4.0) -# 0x9445376139FA (V 3.90) -# 0x9445366139FA (V 3.80) -# this is from source (http://www.adrift.org.uk/) and I have some taf -# files, and checked them. -#0 belong 0x3C423FC9 -#>4 belong 0x6A87C2CF Adrift game file -#!:mime application/x-adrift -#------------------------------------------------------------------------------ -# allegro: file(1) magic for Allegro datafiles -# Toby Deshane -# -0 belong 0x736C6821 Allegro datafile (packed) -0 belong 0x736C682E Allegro datafile (not packed/autodetect) -0 belong 0x736C682B Allegro datafile (appended exe data) - -#------------------------------------------------------------------------------ -# alliant: file(1) magic for Alliant FX series a.out files -# -# If the FX series is the one that had a processor with a 68K-derived -# instruction set, the "short" should probably become "beshort" and the -# "long" should probably become "belong". -# If it's the i860-based one, they should probably become either the -# big-endian or little-endian versions, depending on the mode they ran -# the 860 in.... -# -0 short 0420 0420 Alliant virtual executable ->2 short &0x0020 common library ->16 long >0 not stripped -0 short 0421 0421 Alliant compact executable ->2 short &0x0020 common library ->16 long >0 not stripped -#------------------------------------------------------------------------------ -# alpha architecture description -# - -0 leshort 0603 COFF format alpha ->22 leshort&030000 !020000 executable ->24 leshort 0410 pure ->24 leshort 0413 paged ->22 leshort&020000 !0 dynamically linked ->16 lelong !0 not stripped ->16 lelong 0 stripped ->22 leshort&030000 020000 shared library ->24 leshort 0407 object ->27 byte x - version %d ->26 byte x .%d ->28 byte x -%d - -# Basic recognition of Digital UNIX core dumps - Mike Bremford -# -# The actual magic number is just "Core", followed by a 2-byte version -# number; however, treating any file that begins with "Core" as a Digital -# UNIX core dump file may produce too many false hits, so we include one -# byte of the version number as well; DU 5.0 appears only to be up to -# version 2. -# -0 string Core\001 Alpha COFF format core dump (Digital UNIX) ->24 string >\0 \b, from '%s' -0 string Core\002 Alpha COFF format core dump (Digital UNIX) ->24 string >\0 \b, from '%s' - -#------------------------------------------------------------------------------ -# amanda: file(1) magic for amanda file format -# -0 string AMANDA:\ AMANDA ->8 string TAPESTART\ DATE tape header file, ->>23 string X ->>>25 string >\ Unused %s ->>23 string >\ DATE %s ->8 string FILE\ dump file, ->>13 string >\ DATE %s -#------------------------------------------------------------------------------ -# amigaos: file(1) magic for AmigaOS binary formats: - -# -# From ignatios@cs.uni-bonn.de (Ignatios Souvatzis) -# -0 belong 0x000003fa AmigaOS shared library -0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary -0 belong 0x000003e7 AmigaOS object/library data -# -0 beshort 0xe310 Amiga Workbench ->2 beshort 1 ->>48 byte 1 disk icon ->>48 byte 2 drawer icon ->>48 byte 3 tool icon ->>48 byte 4 project icon ->>48 byte 5 garbage icon ->>48 byte 6 device icon ->>48 byte 7 kickstart icon ->>48 byte 8 workbench application icon ->2 beshort >1 icon, vers. %d -# -# various sound formats from the Amiga -# G=F6tz Waschk -# -0 string FC14 Future Composer 1.4 Module sound file -0 string SMOD Future Composer 1.3 Module sound file -0 string AON4artofnoise Art Of Noise Module sound file -1 string MUGICIAN/SOFTEYES Mugician Module sound file -58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file -0 string Synth4.0 Synthesis Module sound file -0 string ARP. The Holy Noise Module sound file -0 string BeEp\0 JamCracker Module sound file -0 string COSO\0 Hippel-COSO Module sound file -# Too simple (short, pure ASCII, deep), MPi -#26 string V.3 Brian Postma's Soundmon Module sound file v3 -#26 string BPSM Brian Postma's Soundmon Module sound file v3 -#26 string V.2 Brian Postma's Soundmon Module sound file v2 - -# The following are from: "Stefan A. Haubenthal" -0 beshort 0x0f00 AmigaOS bitmap font -0 beshort 0x0f03 AmigaOS outline font -0 belong 0x80001001 AmigaOS outline tag -0 string ##\ version catalog translation -0 string EMOD\0 Amiga E module -8 string ECXM\0 ECX module -0 string/c @database AmigaGuide file - -# Amiga disk types -# -0 string RDSK Rigid Disk Block ->160 string x on %.24s -0 string DOS\0 Amiga DOS disk -0 string DOS\1 Amiga FFS disk -0 string DOS\2 Amiga Inter DOS disk -0 string DOS\3 Amiga Inter FFS disk -0 string DOS\4 Amiga Fastdir DOS disk -0 string DOS\5 Amiga Fastdir FFS disk -0 string KICK Kickstart disk - -# From: Alex Beregszaszi -0 string LZX LZX compressed archive (Amiga) - - -#------------------------------------------------------------------------------ -# animation: file(1) magic for animation/movie formats -# -# animation formats -# MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8) -# FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com) - -# SGI and Apple formats -0 string MOVI Silicon Graphics movie file -!:mime video/x-sgi-movie -4 string moov Apple QuickTime -!:mime video/quicktime ->12 string mvhd \b movie (fast start) ->12 string mdra \b URL ->12 string cmov \b movie (fast start, compressed header) ->12 string rmra \b multiple URLs -4 string mdat Apple QuickTime movie (unoptimized) -!:mime video/quicktime -#4 string wide Apple QuickTime movie (unoptimized) -#!:mime video/quicktime -#4 string skip Apple QuickTime movie (modified) -#!:mime video/quicktime -#4 string free Apple QuickTime movie (modified) -#!:mime video/quicktime -4 string idsc Apple QuickTime image (fast start) -!:mime image/x-quicktime -#4 string idat Apple QuickTime image (unoptimized) -#!:mime image/x-quicktime -4 string pckg Apple QuickTime compressed archive -!:mime application/x-quicktime-player -4 string/B jP JPEG 2000 image -!:mime image/jp2 -4 string ftyp ISO Media ->8 string isom \b, MPEG v4 system, version 1 -!:mime video/mp4 ->8 string iso2 \b, MPEG v4 system, part 12 revision ->8 string mp41 \b, MPEG v4 system, version 1 -!:mime video/mp4 ->8 string mp42 \b, MPEG v4 system, version 2 -!:mime video/mp4 ->8 string mp7t \b, MPEG v4 system, MPEG v7 XML ->8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML ->8 string/B jp2 \b, JPEG 2000 -!:mime image/jp2 ->8 string 3gp \b, MPEG v4 system, 3GPP -!:mime video/3gpp ->>11 byte 4 \b v4 (H.263/AMR GSM 6.10) ->>11 byte 5 \b v5 (H.263/AMR GSM 6.10) ->>11 byte 6 \b v6 (ITU H.264/AMR GSM 6.10) ->8 string mmp4 \b, MPEG v4 system, 3GPP Mobile -!:mime video/mp4 ->8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC -!:mime video/3gpp ->8 string/B M4A \b, MPEG v4 system, iTunes AAC-LC -!:mime audio/mp4 ->8 string/B M4V \b, MPEG v4 system, iTunes AVC-LC -!:mime video/mp4 ->8 string/B M4P \b, MPEG v4 system, iTunes AES encrypted ->8 string/B M4B \b, MPEG v4 system, iTunes bookmarked ->8 string/B qt \b, Apple QuickTime movie -!:mime video/quicktime - -# MPEG sequences -# Scans for all common MPEG header start codes -0 belong 0x00000001 ->4 byte&0x1F 0x07 JVT NAL sequence, H.264 video ->>5 byte 66 \b, baseline ->>5 byte 77 \b, main ->>5 byte 88 \b, extended ->>7 byte x \b @ L %u -0 belong&0xFFFFFF00 0x00000100 ->3 byte 0xBA MPEG sequence ->>4 byte &0x40 \b, v2, program multiplex ->>4 byte ^0x40 \b, v1, system multiplex ->3 byte 0xBB MPEG sequence, v1/2, multiplex (missing pack header) ->3 byte&0x1F 0x07 MPEG sequence, H.264 video ->>4 byte 66 \b, baseline ->>4 byte 77 \b, main ->>4 byte 88 \b, extended ->>6 byte x \b @ L %u ->3 byte 0xB0 MPEG sequence, v4 ->>5 belong 0x000001B5 ->>>9 byte &0x80 ->>>>10 byte&0xF0 16 \b, video ->>>>10 byte&0xF0 32 \b, still texture ->>>>10 byte&0xF0 48 \b, mesh ->>>>10 byte&0xF0 64 \b, face ->>>9 byte&0xF8 8 \b, video ->>>9 byte&0xF8 16 \b, still texture ->>>9 byte&0xF8 24 \b, mesh ->>>9 byte&0xF8 32 \b, face ->>4 byte 1 \b, simple @ L1 ->>4 byte 2 \b, simple @ L2 ->>4 byte 3 \b, simple @ L3 ->>4 byte 4 \b, simple @ L0 ->>4 byte 17 \b, simple scalable @ L1 ->>4 byte 18 \b, simple scalable @ L2 ->>4 byte 33 \b, core @ L1 ->>4 byte 34 \b, core @ L2 ->>4 byte 50 \b, main @ L2 ->>4 byte 51 \b, main @ L3 ->>4 byte 53 \b, main @ L4 ->>4 byte 66 \b, n-bit @ L2 ->>4 byte 81 \b, scalable texture @ L1 ->>4 byte 97 \b, simple face animation @ L1 ->>4 byte 98 \b, simple face animation @ L2 ->>4 byte 99 \b, simple face basic animation @ L1 ->>4 byte 100 \b, simple face basic animation @ L2 ->>4 byte 113 \b, basic animation text @ L1 ->>4 byte 114 \b, basic animation text @ L2 ->>4 byte 129 \b, hybrid @ L1 ->>4 byte 130 \b, hybrid @ L2 ->>4 byte 145 \b, advanced RT simple @ L! ->>4 byte 146 \b, advanced RT simple @ L2 ->>4 byte 147 \b, advanced RT simple @ L3 ->>4 byte 148 \b, advanced RT simple @ L4 ->>4 byte 161 \b, core scalable @ L1 ->>4 byte 162 \b, core scalable @ L2 ->>4 byte 163 \b, core scalable @ L3 ->>4 byte 177 \b, advanced coding efficiency @ L1 ->>4 byte 178 \b, advanced coding efficiency @ L2 ->>4 byte 179 \b, advanced coding efficiency @ L3 ->>4 byte 180 \b, advanced coding efficiency @ L4 ->>4 byte 193 \b, advanced core @ L1 ->>4 byte 194 \b, advanced core @ L2 ->>4 byte 209 \b, advanced scalable texture @ L1 ->>4 byte 210 \b, advanced scalable texture @ L2 ->>4 byte 211 \b, advanced scalable texture @ L3 ->>4 byte 225 \b, simple studio @ L1 ->>4 byte 226 \b, simple studio @ L2 ->>4 byte 227 \b, simple studio @ L3 ->>4 byte 228 \b, simple studio @ L4 ->>4 byte 229 \b, core studio @ L1 ->>4 byte 230 \b, core studio @ L2 ->>4 byte 231 \b, core studio @ L3 ->>4 byte 232 \b, core studio @ L4 ->>4 byte 240 \b, advanced simple @ L0 ->>4 byte 241 \b, advanced simple @ L1 ->>4 byte 242 \b, advanced simple @ L2 ->>4 byte 243 \b, advanced simple @ L3 ->>4 byte 244 \b, advanced simple @ L4 ->>4 byte 245 \b, advanced simple @ L5 ->>4 byte 247 \b, advanced simple @ L3b ->>4 byte 248 \b, FGS @ L0 ->>4 byte 249 \b, FGS @ L1 ->>4 byte 250 \b, FGS @ L2 ->>4 byte 251 \b, FGS @ L3 ->>4 byte 252 \b, FGS @ L4 ->>4 byte 253 \b, FGS @ L5 ->3 byte 0xB5 MPEG sequence, v4 ->>4 byte &0x80 ->>>5 byte&0xF0 16 \b, video (missing profile header) ->>>5 byte&0xF0 32 \b, still texture (missing profile header) ->>>5 byte&0xF0 48 \b, mesh (missing profile header) ->>>5 byte&0xF0 64 \b, face (missing profile header) ->>4 byte&0xF8 8 \b, video (missing profile header) ->>4 byte&0xF8 16 \b, still texture (missing profile header) ->>4 byte&0xF8 24 \b, mesh (missing profile header) ->>4 byte&0xF8 32 \b, face (missing profile header) ->3 byte 0xB3 MPEG sequence ->>12 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video ->>12 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video ->>12 belong 0x000001B5 \b, v2, ->>>16 byte&0x0F 1 \b HP ->>>16 byte&0x0F 2 \b Spt ->>>16 byte&0x0F 3 \b SNR ->>>16 byte&0x0F 4 \b MP ->>>16 byte&0x0F 5 \b SP ->>>17 byte&0xF0 64 \b@HL ->>>17 byte&0xF0 96 \b@H-14 ->>>17 byte&0xF0 128 \b@ML ->>>17 byte&0xF0 160 \b@LL ->>>17 byte &0x08 \b progressive ->>>17 byte ^0x08 \b interlaced ->>>17 byte&0x06 2 \b Y'CbCr 4:2:0 video ->>>17 byte&0x06 4 \b Y'CbCr 4:2:2 video ->>>17 byte&0x06 6 \b Y'CbCr 4:4:4 video ->>11 byte &0x02 ->>>75 byte &0x01 ->>>>140 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video ->>>>140 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video ->>>>140 belong 0x000001B5 \b, v2, ->>>>>144 byte&0x0F 1 \b HP ->>>>>144 byte&0x0F 2 \b Spt ->>>>>144 byte&0x0F 3 \b SNR ->>>>>144 byte&0x0F 4 \b MP ->>>>>144 byte&0x0F 5 \b SP ->>>>>145 byte&0xF0 64 \b@HL ->>>>>145 byte&0xF0 96 \b@H-14 ->>>>>145 byte&0xF0 128 \b@ML ->>>>>145 byte&0xF0 160 \b@LL ->>>>>145 byte &0x08 \b progressive ->>>>>145 byte ^0x08 \b interlaced ->>>>>145 byte&0x06 2 \b Y'CbCr 4:2:0 video ->>>>>145 byte&0x06 4 \b Y'CbCr 4:2:2 video ->>>>>145 byte&0x06 6 \b Y'CbCr 4:4:4 video ->>76 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video ->>76 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video ->>76 belong 0x000001B5 \b, v2, ->>>80 byte&0x0F 1 \b HP ->>>80 byte&0x0F 2 \b Spt ->>>80 byte&0x0F 3 \b SNR ->>>80 byte&0x0F 4 \b MP ->>>80 byte&0x0F 5 \b SP ->>>81 byte&0xF0 64 \b@HL ->>>81 byte&0xF0 96 \b@H-14 ->>>81 byte&0xF0 128 \b@ML ->>>81 byte&0xF0 160 \b@LL ->>>81 byte &0x08 \b progressive ->>>81 byte ^0x08 \b interlaced ->>>81 byte&0x06 2 \b Y'CbCr 4:2:0 video ->>>81 byte&0x06 4 \b Y'CbCr 4:2:2 video ->>>81 byte&0x06 6 \b Y'CbCr 4:4:4 video ->>4 belong&0xFFFFFF00 0x78043800 \b, HD-TV 1920P ->>>7 byte&0xF0 0x10 \b, 16:9 ->>4 belong&0xFFFFFF00 0x50002D00 \b, SD-TV 1280I ->>>7 byte&0xF0 0x10 \b, 16:9 ->>4 belong&0xFFFFFF00 0x30024000 \b, PAL Capture ->>>7 byte&0xF0 0x10 \b, 4:3 ->>4 beshort&0xFFF0 0x2C00 \b, 4CIF ->>>5 beshort&0x0FFF 0x01E0 \b NTSC ->>>5 beshort&0x0FFF 0x0240 \b PAL ->>>7 byte&0xF0 0x20 \b, 4:3 ->>>7 byte&0xF0 0x30 \b, 16:9 ->>>7 byte&0xF0 0x40 \b, 11:5 ->>>7 byte&0xF0 0x80 \b, PAL 4:3 ->>>7 byte&0xF0 0xC0 \b, NTSC 4:3 ->>4 belong&0xFFFFFF00 0x2801E000 \b, LD-TV 640P ->>>7 byte&0xF0 0x10 \b, 4:3 ->>4 belong&0xFFFFFF00 0x1400F000 \b, 320x240 ->>>7 byte&0xF0 0x10 \b, 4:3 ->>4 belong&0xFFFFFF00 0x0F00A000 \b, 240x160 ->>>7 byte&0xF0 0x10 \b, 4:3 ->>4 belong&0xFFFFFF00 0x0A007800 \b, 160x120 ->>>7 byte&0xF0 0x10 \b, 4:3 ->>4 beshort&0xFFF0 0x1600 \b, CIF ->>>5 beshort&0x0FFF 0x00F0 \b NTSC ->>>5 beshort&0x0FFF 0x0120 \b PAL ->>>7 byte&0xF0 0x20 \b, 4:3 ->>>7 byte&0xF0 0x30 \b, 16:9 ->>>7 byte&0xF0 0x40 \b, 11:5 ->>>7 byte&0xF0 0x80 \b, PAL 4:3 ->>>7 byte&0xF0 0xC0 \b, NTSC 4:3 ->>>5 beshort&0x0FFF 0x0240 \b PAL 625 ->>>>7 byte&0xF0 0x20 \b, 4:3 ->>>>7 byte&0xF0 0x30 \b, 16:9 ->>>>7 byte&0xF0 0x40 \b, 11:5 ->>4 beshort&0xFFF0 0x2D00 \b, CCIR/ITU ->>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 ->>>5 beshort&0x0FFF 0x0240 \b PAL 625 ->>>7 byte&0xF0 0x20 \b, 4:3 ->>>7 byte&0xF0 0x30 \b, 16:9 ->>>7 byte&0xF0 0x40 \b, 11:5 ->>4 beshort&0xFFF0 0x1E00 \b, SVCD ->>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 ->>>5 beshort&0x0FFF 0x0240 \b PAL 625 ->>>7 byte&0xF0 0x20 \b, 4:3 ->>>7 byte&0xF0 0x30 \b, 16:9 ->>>7 byte&0xF0 0x40 \b, 11:5 ->>7 byte&0x0F 1 \b, 23.976 fps ->>7 byte&0x0F 2 \b, 24 fps ->>7 byte&0x0F 3 \b, 25 fps ->>7 byte&0x0F 4 \b, 29.97 fps ->>7 byte&0x0F 5 \b, 30 fps ->>7 byte&0x0F 6 \b, 50 fps ->>7 byte&0x0F 7 \b, 59.94 fps ->>7 byte&0x0F 8 \b, 60 fps ->>11 byte &0x04 \b, Constrained - -# MPEG ADTS Audio (*.mpx/mxa/aac) -# from dreesen@math.fu-berlin.de -# modified to fully support MPEG ADTS - -# MP3, M1A -# modified by Joerg Jenderek -# GRR the original test are too common for many DOS files -# so don't accept as MP3 until we've tested the rate -0 beshort&0xFFFE 0xFFFA -# rates ->2 byte&0xF0 0x10 MPEG ADTS, layer III, v1, 32 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x20 MPEG ADTS, layer III, v1, 40 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x30 MPEG ADTS, layer III, v1, 48 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x40 MPEG ADTS, layer III, v1, 56 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x50 MPEG ADTS, layer III, v1, 64 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x60 MPEG ADTS, layer III, v1, 80 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x70 MPEG ADTS, layer III, v1, 96 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x80 MPEG ADTS, layer III, v1, 112 kbps -!:mime audio/mpeg ->2 byte&0xF0 0x90 MPEG ADTS, layer III, v1, 128 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xA0 MPEG ADTS, layer III, v1, 160 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xB0 MPEG ADTS, layer III, v1, 192 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xC0 MPEG ADTS, layer III, v1, 224 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xD0 MPEG ADTS, layer III, v1, 256 kbps -!:mime audio/mpeg ->2 byte&0xF0 0xE0 MPEG ADTS, layer III, v1, 320 kbps -!:mime audio/mpeg -# timing ->2 byte&0x0C 0x00 \b, 44.1 kHz ->2 byte&0x0C 0x04 \b, 48 kHz ->2 byte&0x0C 0x08 \b, 32 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MP2, M1A -0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1 -!:mime audio/mpeg -# rates ->2 byte&0xF0 0x10 \b, 32 kbps ->2 byte&0xF0 0x20 \b, 48 kbps ->2 byte&0xF0 0x30 \b, 56 kbps ->2 byte&0xF0 0x40 \b, 64 kbps ->2 byte&0xF0 0x50 \b, 80 kbps ->2 byte&0xF0 0x60 \b, 96 kbps ->2 byte&0xF0 0x70 \b, 112 kbps ->2 byte&0xF0 0x80 \b, 128 kbps ->2 byte&0xF0 0x90 \b, 160 kbps ->2 byte&0xF0 0xA0 \b, 192 kbps ->2 byte&0xF0 0xB0 \b, 224 kbps ->2 byte&0xF0 0xC0 \b, 256 kbps ->2 byte&0xF0 0xD0 \b, 320 kbps ->2 byte&0xF0 0xE0 \b, 384 kbps -# timing ->2 byte&0x0C 0x00 \b, 44.1 kHz ->2 byte&0x0C 0x04 \b, 48 kHz ->2 byte&0x0C 0x08 \b, 32 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MPA, M1A -# updated by Joerg Jenderek -# GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448 -# GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE) -# FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries -#0 beshort&0xFFFE 0xFFFE -#>2 ubyte&0xF0 >0x0F -#>>2 ubyte&0xF0 <0xE1 MPEG ADTS, layer I, v1 -## rate -#>>>2 byte&0xF0 0x10 \b, 32 kbps -#>>>2 byte&0xF0 0x20 \b, 64 kbps -#>>>2 byte&0xF0 0x30 \b, 96 kbps -#>>>2 byte&0xF0 0x40 \b, 128 kbps -#>>>2 byte&0xF0 0x50 \b, 160 kbps -#>>>2 byte&0xF0 0x60 \b, 192 kbps -#>>>2 byte&0xF0 0x70 \b, 224 kbps -#>>>2 byte&0xF0 0x80 \b, 256 kbps -#>>>2 byte&0xF0 0x90 \b, 288 kbps -#>>>2 byte&0xF0 0xA0 \b, 320 kbps -#>>>2 byte&0xF0 0xB0 \b, 352 kbps -#>>>2 byte&0xF0 0xC0 \b, 384 kbps -#>>>2 byte&0xF0 0xD0 \b, 416 kbps -#>>>2 byte&0xF0 0xE0 \b, 448 kbps -## timing -#>>>2 byte&0x0C 0x00 \b, 44.1 kHz -#>>>2 byte&0x0C 0x04 \b, 48 kHz -#>>>2 byte&0x0C 0x08 \b, 32 kHz -## channels/options -#>>>3 byte&0xC0 0x00 \b, Stereo -#>>>3 byte&0xC0 0x40 \b, JntStereo -#>>>3 byte&0xC0 0x80 \b, 2x Monaural -#>>>3 byte&0xC0 0xC0 \b, Monaural -##>1 byte ^0x01 \b, Data Verify -##>2 byte &0x02 \b, Packet Pad -##>2 byte &0x01 \b, Custom Flag -##>3 byte &0x08 \b, Copyrighted -##>3 byte &0x04 \b, Original Source -##>3 byte&0x03 1 \b, NR: 50/15 ms -##>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MP3, M2A -0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2 -!:mime audio/mpeg -# rate ->2 byte&0xF0 0x10 \b, 8 kbps ->2 byte&0xF0 0x20 \b, 16 kbps ->2 byte&0xF0 0x30 \b, 24 kbps ->2 byte&0xF0 0x40 \b, 32 kbps ->2 byte&0xF0 0x50 \b, 40 kbps ->2 byte&0xF0 0x60 \b, 48 kbps ->2 byte&0xF0 0x70 \b, 56 kbps ->2 byte&0xF0 0x80 \b, 64 kbps ->2 byte&0xF0 0x90 \b, 80 kbps ->2 byte&0xF0 0xA0 \b, 96 kbps ->2 byte&0xF0 0xB0 \b, 112 kbps ->2 byte&0xF0 0xC0 \b, 128 kbps ->2 byte&0xF0 0xD0 \b, 144 kbps ->2 byte&0xF0 0xE0 \b, 160 kbps -# timing ->2 byte&0x0C 0x00 \b, 22.05 kHz ->2 byte&0x0C 0x04 \b, 24 kHz ->2 byte&0x0C 0x08 \b, 16 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MP2, M2A -0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2 -# rate ->2 byte&0xF0 0x10 \b, 8 kbps ->2 byte&0xF0 0x20 \b, 16 kbps ->2 byte&0xF0 0x30 \b, 24 kbps ->2 byte&0xF0 0x40 \b, 32 kbps ->2 byte&0xF0 0x50 \b, 40 kbps ->2 byte&0xF0 0x60 \b, 48 kbps ->2 byte&0xF0 0x70 \b, 56 kbps ->2 byte&0xF0 0x80 \b, 64 kbps ->2 byte&0xF0 0x90 \b, 80 kbps ->2 byte&0xF0 0xA0 \b, 96 kbps ->2 byte&0xF0 0xB0 \b, 112 kbps ->2 byte&0xF0 0xC0 \b, 128 kbps ->2 byte&0xF0 0xD0 \b, 144 kbps ->2 byte&0xF0 0xE0 \b, 160 kbps -# timing ->2 byte&0x0C 0x00 \b, 22.05 kHz ->2 byte&0x0C 0x04 \b, 24 kHz ->2 byte&0x0C 0x08 \b, 16 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MPA, M2A -0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2 -# rate ->2 byte&0xF0 0x10 \b, 32 kbps ->2 byte&0xF0 0x20 \b, 48 kbps ->2 byte&0xF0 0x30 \b, 56 kbps ->2 byte&0xF0 0x40 \b, 64 kbps ->2 byte&0xF0 0x50 \b, 80 kbps ->2 byte&0xF0 0x60 \b, 96 kbps ->2 byte&0xF0 0x70 \b, 112 kbps ->2 byte&0xF0 0x80 \b, 128 kbps ->2 byte&0xF0 0x90 \b, 144 kbps ->2 byte&0xF0 0xA0 \b, 160 kbps ->2 byte&0xF0 0xB0 \b, 176 kbps ->2 byte&0xF0 0xC0 \b, 192 kbps ->2 byte&0xF0 0xD0 \b, 224 kbps ->2 byte&0xF0 0xE0 \b, 256 kbps -# timing ->2 byte&0x0C 0x00 \b, 22.05 kHz ->2 byte&0x0C 0x04 \b, 24 kHz ->2 byte&0x0C 0x08 \b, 16 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# MP3, M25A -0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5 -# rate ->2 byte&0xF0 0x10 \b, 8 kbps ->2 byte&0xF0 0x20 \b, 16 kbps ->2 byte&0xF0 0x30 \b, 24 kbps ->2 byte&0xF0 0x40 \b, 32 kbps ->2 byte&0xF0 0x50 \b, 40 kbps ->2 byte&0xF0 0x60 \b, 48 kbps ->2 byte&0xF0 0x70 \b, 56 kbps ->2 byte&0xF0 0x80 \b, 64 kbps ->2 byte&0xF0 0x90 \b, 80 kbps ->2 byte&0xF0 0xA0 \b, 96 kbps ->2 byte&0xF0 0xB0 \b, 112 kbps ->2 byte&0xF0 0xC0 \b, 128 kbps ->2 byte&0xF0 0xD0 \b, 144 kbps ->2 byte&0xF0 0xE0 \b, 160 kbps -# timing ->2 byte&0x0C 0x00 \b, 11.025 kHz ->2 byte&0x0C 0x04 \b, 12 kHz ->2 byte&0x0C 0x08 \b, 8 kHz -# channels/options ->3 byte&0xC0 0x00 \b, Stereo ->3 byte&0xC0 0x40 \b, JntStereo ->3 byte&0xC0 0x80 \b, 2x Monaural ->3 byte&0xC0 0xC0 \b, Monaural -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Packet Pad -#>2 byte &0x01 \b, Custom Flag -#>3 byte &0x08 \b, Copyrighted -#>3 byte &0x04 \b, Original Source -#>3 byte&0x03 1 \b, NR: 50/15 ms -#>3 byte&0x03 3 \b, NR: CCIT J.17 - -# AAC (aka MPEG-2 NBC audio) and MPEG-4 audio - -# Stored AAC streams (instead of the MP4 format) -0 string ADIF MPEG ADIF, AAC -!:mime audio/x-hx-aac-adif ->4 byte &0x80 ->>13 byte &0x10 \b, VBR ->>13 byte ^0x10 \b, CBR ->>16 byte&0x1E 0x02 \b, single stream ->>16 byte&0x1E 0x04 \b, 2 streams ->>16 byte&0x1E 0x06 \b, 3 streams ->>16 byte &0x08 \b, 4 or more streams ->>16 byte &0x10 \b, 8 or more streams ->>4 byte &0x80 \b, Copyrighted ->>13 byte &0x40 \b, Original Source ->>13 byte &0x20 \b, Home Flag ->4 byte ^0x80 ->>4 byte &0x10 \b, VBR ->>4 byte ^0x10 \b, CBR ->>7 byte&0x1E 0x02 \b, single stream ->>7 byte&0x1E 0x04 \b, 2 streams ->>7 byte&0x1E 0x06 \b, 3 streams ->>7 byte &0x08 \b, 4 or more streams ->>7 byte &0x10 \b, 8 or more streams ->>4 byte &0x40 \b, Original Stream(s) ->>4 byte &0x20 \b, Home Source - -# Live or stored single AAC stream (used with MPEG-2 systems) -0 beshort&0xFFF6 0xFFF0 MPEG ADTS, AAC -!:mime audio/x-hx-aac-adts ->1 byte &0x08 \b, v2 ->1 byte ^0x08 \b, v4 -# profile ->>2 byte &0xC0 \b LTP ->2 byte&0xc0 0x00 \b Main ->2 byte&0xc0 0x40 \b LC ->2 byte&0xc0 0x80 \b SSR -# timing ->2 byte&0x3c 0x00 \b, 96 kHz ->2 byte&0x3c 0x04 \b, 88.2 kHz ->2 byte&0x3c 0x08 \b, 64 kHz ->2 byte&0x3c 0x0c \b, 48 kHz ->2 byte&0x3c 0x10 \b, 44.1 kHz ->2 byte&0x3c 0x14 \b, 32 kHz ->2 byte&0x3c 0x18 \b, 24 kHz ->2 byte&0x3c 0x1c \b, 22.05 kHz ->2 byte&0x3c 0x20 \b, 16 kHz ->2 byte&0x3c 0x24 \b, 12 kHz ->2 byte&0x3c 0x28 \b, 11.025 kHz ->2 byte&0x3c 0x2c \b, 8 kHz -# channels ->2 beshort&0x01c0 0x0040 \b, monaural ->2 beshort&0x01c0 0x0080 \b, stereo ->2 beshort&0x01c0 0x00c0 \b, stereo + center ->2 beshort&0x01c0 0x0100 \b, stereo+center+LFE ->2 beshort&0x01c0 0x0140 \b, surround ->2 beshort&0x01c0 0x0180 \b, surround + LFE ->2 beshort &0x01C0 \b, surround + side -#>1 byte ^0x01 \b, Data Verify -#>2 byte &0x02 \b, Custom Flag -#>3 byte &0x20 \b, Original Stream -#>3 byte &0x10 \b, Home Source -#>3 byte &0x08 \b, Copyrighted - -# Live MPEG-4 audio streams (instead of RTP FlexMux) -0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS -!:mime audio/x-mp4a-latm -#>1 beshort&0x1FFF x \b, %u byte packet ->3 byte&0xE0 0x40 ->>4 byte&0x3C 0x04 \b, single stream ->>4 byte&0x3C 0x08 \b, 2 streams ->>4 byte&0x3C 0x0C \b, 3 streams ->>4 byte &0x08 \b, 4 or more streams ->>4 byte &0x20 \b, 8 or more streams ->3 byte&0xC0 0 ->>4 byte&0x78 0x08 \b, single stream ->>4 byte&0x78 0x10 \b, 2 streams ->>4 byte&0x78 0x18 \b, 3 streams ->>4 byte &0x20 \b, 4 or more streams ->>4 byte &0x40 \b, 8 or more streams -# This magic isn't strong enough (matches plausible ISO-8859-1 text) -#0 beshort 0x4DE1 MPEG-4 LO-EP audio stream -#!:mime audio/x-mp4a-latm - -# Summary: FLI animation format -# Created by: Daniel Quinlan -# Modified by (1): Abel Cheung (avoid over-generic detection) -4 leshort 0xAF11 -# standard FLI always has 320x200 resolution and 8 bit color ->8 leshort 320 ->>10 leshort 200 ->>>12 leshort 8 FLI animation, 320x200x8 -!:mime video/x-fli ->>>>6 leshort x \b, %d frames -# frame speed is multiple of 1/70s ->>>>16 leshort x \b, %d/70s per frame - -# Summary: FLC animation format -# Created by: Daniel Quinlan -# Modified by (1): Abel Cheung (avoid over-generic detection) -4 leshort 0xAF12 -# standard FLC always use 8 bit color ->12 leshort 8 FLC animation -!:mime video/x-flc ->>8 leshort x \b, %d ->>10 leshort x \bx%dx8 ->>6 uleshort x \b, %d frames ->>16 uleshort x \b, %dms per frame - -# DL animation format -# XXX - collision with most `mips' magic -# -# I couldn't find a real magic number for these, however, this -# -appears- to work. Note that it might catch other files, too, so be -# careful! -# -# Note that title and author appear in the two 20-byte chunks -# at decimal offsets 2 and 22, respectively, but they are XOR'ed with -# 255 (hex FF)! The DL format is really bad. -# -#0 byte 1 DL version 1, medium format (160x100, 4 images/screen) -#!:mime video/x-unknown -#>42 byte x - %d screens, -#>43 byte x %d commands -#0 byte 2 DL version 2 -#!:mime video/x-unknown -#>1 byte 1 - large format (320x200,1 image/screen), -#>1 byte 2 - medium format (160x100,4 images/screen), -#>1 byte >2 - unknown format, -#>42 byte x %d screens, -#>43 byte x %d commands -# Based on empirical evidence, DL version 3 have several nulls following the -# \003. Most of them start with non-null values at hex offset 0x34 or so. -#0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3 - -# iso 13818 transport stream -# -# from Oskar Schirmer Feb 3, 2001 (ISO 13818.1) -# (the following is a little bit restrictive and works fine for a stream -# that starts with PAT properly. it won't work for stream data, that is -# cut from an input device data right in the middle, but this shouldn't -# disturb) -# syncbyte 8 bit 0x47 -# error_ind 1 bit - -# payload_start 1 bit 1 -# priority 1 bit - -# PID 13 bit 0x0000 -# scrambling 2 bit - -# adaptfld_ctrl 2 bit 1 or 3 -# conti_count 4 bit 0 -0 belong&0xFF5FFF1F 0x47400010 MPEG transport stream data ->188 byte !0x47 CORRUPTED - -# DIF digital video file format -0 belong&0xffffff00 0x1f070000 DIF ->4 byte &0x01 (DVCPRO) movie file ->4 byte ^0x01 (DV) movie file ->3 byte &0x80 (PAL) ->3 byte ^0x80 (NTSC) - -# Microsoft Advanced Streaming Format (ASF) -0 belong 0x3026b275 Microsoft ASF -!:mime video/x-ms-asf - -# MNG Video Format, -0 string \x8aMNG MNG video data, -!:mime video/x-mng ->4 belong !0x0d0a1a0a CORRUPTED, ->4 belong 0x0d0a1a0a ->>16 belong x %ld x ->>20 belong x %ld - -# JNG Video Format, -0 string \x8bJNG JNG video data, -!:mime video/x-jng ->4 belong !0x0d0a1a0a CORRUPTED, ->4 belong 0x0d0a1a0a ->>16 belong x %ld x ->>20 belong x %ld - -# Vivo video (Wolfram Kleff) -3 string \x0D\x0AVersion:Vivo Vivo video data - -# VRML (Virtual Reality Modelling Language) -0 string/b #VRML\ V1.0\ ascii VRML 1 file -!:mime model/vrml -0 string/b #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file -!:mime model/vrml - -# X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd] -# From Michel Briand -0 string \20 search/1000/cb \, 2002-10-03 -# -0 string HVQM4 %s ->6 string >\0 v%s ->0 byte x GameCube movie, ->0x34 ubeshort x %d x ->0x36 ubeshort x %d, ->0x26 ubeshort x %dµs, ->0x42 ubeshort 0 no audio ->0x42 ubeshort >0 %dHz audio - -# From: "Stefan A. Haubenthal" -0 string DVDVIDEO-VTS Video title set, ->0x21 byte x v%x -0 string DVDVIDEO-VMG Video manager, ->0x21 byte x v%x - -# From: Behan Webster -# NuppelVideo used by Mythtv (*.nuv) -# Note: there are two identical stanzas here differing only in the -# initial string matched. It used to be done with a regex, but we're -# trying to get rid of those. -0 string NuppelVideo MythTV NuppelVideo ->12 string x v%s ->20 lelong x (%d ->24 lelong x \bx%d), ->36 string P \bprogressive, ->36 string I \binterlaced, ->40 ledouble x \baspect:%.2f, ->48 ledouble x \bfps:%.2f -0 string MythTV MythTV NuppelVideo ->12 string x v%s ->20 lelong x (%d ->24 lelong x \bx%d), ->36 string P \bprogressive, ->36 string I \binterlaced, ->40 ledouble x \baspect:%.2f, ->48 ledouble x \bfps:%.2f - -# MPEG file -# MPEG sequences -# FIXME: This section is from the old magic.mime file and needs integrating with the rest -0 belong 0x000001BA ->4 byte &0x40 -!:mime video/mp2p ->4 byte ^0x40 -!:mime video/mpeg -0 belong 0x000001BB -!:mime video/mpeg -0 belong 0x000001B0 -!:mime video/mp4v-es -0 belong 0x000001B5 -!:mime video/mp4v-es -0 belong 0x000001B3 -!:mime video/mpv -0 belong&0xFF5FFF1F 0x47400010 -!:mime video/mp2t -0 belong 0x00000001 ->4 byte&0x1F 0x07 -!:mime video/h264 - -# Type: Bink Video -# URL: http://wiki.multimedia.cx/index.php?title=3DBink_Container -# From: 2008-07-18 -0 string BIK Bink Video ->3 regex =[a-z] rev.%s -#>4 ulelong x size %d ->20 ulelong x \b, %d ->24 ulelong x \bx%d ->8 ulelong x \b, %d frames ->32 ulelong x at rate %d/ ->28 ulelong >1 \b%d ->40 ulelong =0 \b, no audio ->40 ulelong !0 \b, %d audio track ->>40 ulelong !1 \bs -# follow properties of the first audio track only ->>48 uleshort x %dHz ->>51 byte&0x20 0 mono ->>51 byte&0x20 !0 stereo -#>>51 byte&0x10 0 FFT -#>>51 byte&0x10 !0 DCT - -#------------------------------------------------------------------------------ -# apl: file(1) magic for APL (see also "pdp" and "vax" for other APL -# workspaces) -# -0 long 0100554 APL workspace (Ken's original?) -#------------------------------------------------------------------------------ -# apple: file(1) magic for Apple file formats -# -0 search/1 FiLeStArTfIlEsTaRt binscii (apple ][) text -0 string \x0aGL Binary II (apple ][) data -0 string \x76\xff Squeezed (apple ][) data -0 string NuFile NuFile archive (apple ][) data -0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data -0 belong 0x00051600 AppleSingle encoded Macintosh file -0 belong 0x00051607 AppleDouble encoded Macintosh file - -# Type: Apple Emulator 2IMG format -# From: Radek Vokal -0 string 2IMG Apple ][ 2IMG Disk Image ->4 string XGS! \b, XGS ->4 string CTKG \b, Catakig ->4 string ShIm \b, Sheppy's ImageMaker ->4 string WOOF \b, Sweet 16 ->4 string B2TR \b, Bernie ][ the Rescue ->4 string !nfc \b, ASIMOV2 ->4 string x \b, Unknown Format ->0xc byte 00 \b, DOS 3.3 sector order ->>0x10 byte 00 \b, Volume 254 ->>0x10 byte&0x7f x \b, Volume %u ->0xc byte 01 \b, ProDOS sector order ->>0x14 short x \b, %u Blocks ->0xc byte 02 \b, NIB data - -# magic for Newton PDA package formats -# from Ruda Moura -0 string package0 Newton package, NOS 1.x, ->12 belong &0x80000000 AutoRemove, ->12 belong &0x40000000 CopyProtect, ->12 belong &0x10000000 NoCompression, ->12 belong &0x04000000 Relocation, ->12 belong &0x02000000 UseFasterCompression, ->16 belong x version %d - -0 string package1 Newton package, NOS 2.x, ->12 belong &0x80000000 AutoRemove, ->12 belong &0x40000000 CopyProtect, ->12 belong &0x10000000 NoCompression, ->12 belong &0x04000000 Relocation, ->12 belong &0x02000000 UseFasterCompression, ->16 belong x version %d - -0 string package4 Newton package, ->8 byte 8 NOS 1.x, ->8 byte 9 NOS 2.x, ->12 belong &0x80000000 AutoRemove, ->12 belong &0x40000000 CopyProtect, ->12 belong &0x10000000 NoCompression, - -# The following entries for the Apple II are for files that have -# been transferred as raw binary data from an Apple, without having -# been encapsulated by any of the above archivers. -# -# In general, Apple II formats are hard to identify because Apple DOS -# and especially Apple ProDOS have strong typing in the file system and -# therefore programmers never felt much need to include type information -# in the files themselves. -# -# Eric Fischer - -# AppleWorks word processor: -# -# This matches the standard tab stops for an AppleWorks file, but if -# a file has a tab stop set in the first four columns this will fail. -# -# The "O" is really the magic number, but that's so common that it's -# necessary to check the tab stops that follow it to avoid false positives. - -4 string O==== AppleWorks word processor data ->85 byte&0x01 >0 \b, zoomed ->90 byte&0x01 >0 \b, paginated ->92 byte&0x01 >0 \b, with mail merge -#>91 byte x \b, left margin %d - -# AppleWorks database: -# -# This isn't really a magic number, but it's the closest thing to one -# that I could find. The 1 and 2 really mean "order in which you defined -# categories" and "left to right, top to bottom," respectively; the D and R -# mean that the cursor should move either down or right when you press Return. - -#30 string \x01D AppleWorks database data -#30 string \x02D AppleWorks database data -#30 string \x01R AppleWorks database data -#30 string \x02R AppleWorks database data - -# AppleWorks spreadsheet: -# -# Likewise, this isn't really meant as a magic number. The R or C means -# row- or column-order recalculation; the A or M means automatic or manual -# recalculation. - -#131 string RA AppleWorks spreadsheet data -#131 string RM AppleWorks spreadsheet data -#131 string CA AppleWorks spreadsheet data -#131 string CM AppleWorks spreadsheet data - -# Applesoft BASIC: -# -# This is incredibly sloppy, but will be true if the program was -# written at its usual memory location of 2048 and its first line -# number is less than 256. Yuck. - -0 belong&0xff00ff 0x80000 Applesoft BASIC program data -#>2 leshort x \b, first line number %d - -# ORCA/EZ assembler: -# -# This will not identify ORCA/M source files, since those have -# some sort of date code instead of the two zero bytes at 6 and 7 -# XXX Conflicts with ELF -#4 belong&0xff00ffff 0x01000000 ORCA/EZ assembler source data -#>5 byte x \b, build number %d - -# Broderbund Fantavision -# -# I don't know what these values really mean, but they seem to recur. -# Will they cause too many conflicts? - -# Probably :-) -#2 belong&0xFF00FF 0x040008 Fantavision movie data - -# Some attempts at images. -# -# These are actually just bit-for-bit dumps of the frame buffer, so -# there's really no reasonably way to distinguish them except for their -# address (if preserved) -- 8192 or 16384 -- and their length -- 8192 -# or, occasionally, 8184. -# -# Nevertheless this will manage to catch a lot of images that happen -# to have a solid-colored line at the bottom of the screen. - -# GRR: Magic too weak -#8144 string \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F Apple II image with white background -#8144 string \x55\x2A\x55\x2A\x55\x2A\x55\x2A Apple II image with purple background -#8144 string \x2A\x55\x2A\x55\x2A\x55\x2A\x55 Apple II image with green background -#8144 string \xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA Apple II image with blue background -#8144 string \xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5 Apple II image with orange background - -# Beagle Bros. Apple Mechanic fonts - -0 belong&0xFF00FFFF 0x6400D000 Apple Mechanic font - -# Apple Universal Disk Image Format (UDIF) - dmg files. -# From Johan Gade. -# These entries are disabled for now until we fix the following issues. -# -# Note there might be some problems with the "VAX COFF executable" -# entry. Note this entry should be placed before the mac filesystem section, -# particularly the "Apple Partition data" entry. -# -# The intended meaning of these tests is, that the file is only of the -# specified type if both of the lines are correct - i.e. if the first -# line matches and the second doesn't then it is not of that type. -# -#0 long 0x7801730d -#>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO) -# -# Note that this entry is recognized correctly by the "Apple Partition -# data" entry - however since this entry is more specific - this -# information seems to be more useful. -#0 long 0x45520200 -#>0x410 string disk\ image UDIF read/write image (UDRW) - -# From: Toby Peterson -0 string bplist00 Apple binary property list - -# Apple binary property list (bplist) -# Assumes version bytes are hex. -# Provides content hints for version 0 files. Assumes that the root -# object is the first object (true for CoreFoundation implementation). -# From: David Remahl -0 string bplist ->6 byte x \bCoreFoundation binary property list data, version 0x%c ->>7 byte x \b%c ->6 string 00 \b ->>8 byte&0xF0 0x00 \b ->>>8 byte&0x0F 0x00 \b, root type: null ->>>8 byte&0x0F 0x08 \b, root type: false boolean ->>>8 byte&0x0F 0x09 \b, root type: true boolean ->>8 byte&0xF0 0x10 \b, root type: integer ->>8 byte&0xF0 0x20 \b, root type: real ->>8 byte&0xF0 0x30 \b, root type: date ->>8 byte&0xF0 0x40 \b, root type: data ->>8 byte&0xF0 0x50 \b, root type: ascii string ->>8 byte&0xF0 0x60 \b, root type: unicode string ->>8 byte&0xF0 0x80 \b, root type: uid (CORRUPT) ->>8 byte&0xF0 0xa0 \b, root type: array ->>8 byte&0xF0 0xd0 \b, root type: dictionary - -# Apple/NeXT typedstream data -# Serialization format used by NeXT and Apple for various -# purposes in YellowStep/Cocoa, including some nib files. -# From: David Remahl -2 string typedstream NeXT/Apple typedstream data, big endian ->0 byte x \b, version %hhd ->0 byte <5 \b ->>13 byte 0x81 \b ->>>14 ubeshort x \b, system %hd -2 string streamtyped NeXT/Apple typedstream data, little endian ->0 byte x \b, version %hhd ->0 byte <5 \b ->>13 byte 0x81 \b ->>>14 uleshort x \b, system %hd - -#------------------------------------------------------------------------------ -# CAF: Apple CoreAudio File Format -# -# Container format for high-end audio purposes. -# From: David Remahl -# -0 string caff CoreAudio Format audio file ->4 beshort <10 version %d ->6 beshort x - - -#------------------------------------------------------------------------------ -# Keychain database files -0 string kych Mac OS X Keychain File - -#------------------------------------------------------------------------------ -# Code Signing related file types -0 belong 0xfade0c00 Mac OS X Code Requirement ->8 belong 1 (opExpr) ->4 belong x - %d bytes - -0 belong 0xfade0c01 Mac OS X Code Requirement Set ->8 belong >1 containing %d items ->4 belong x - %d bytes - -0 belong 0xfade0c02 Mac OS X Code Directory ->8 belong x version %x ->12 belong >0 flags 0x%x ->4 belong x - %d bytes - -0 belong 0xfade0cc0 Mac OS X Detached Code Signature (non-executable) ->4 belong x - %d bytes - -0 belong 0xfade0cc1 Mac OS X Detached Code Signature ->8 belong >1 (%d elements) ->4 belong x - %d bytes - -# From: "Nelson A. de Oliveira" -# .vdi -4 string innotek\ VirtualBox\ Disk\ Image %s - -#------------------------------------------------------------------------------ -# applix: file(1) magic for Applixware -# From: Peter Soos -# -0 string *BEGIN Applixware ->7 string WORDS Words Document ->7 string GRAPHICS Graphic ->7 string RASTER Bitmap ->7 string SPREADSHEETS Spreadsheet ->7 string MACRO Macro ->7 string BUILDER Builder Object -#------------------------------------------------------------------------------ -# archive: file(1) magic for archive formats (see also "msdos" for self- -# extracting compressed archives) -# -# cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc. -# pre-POSIX "tar" archives are handled in the C code. - -# POSIX tar archives -257 string ustar\0 POSIX tar archive -!:mime application/x-tar # encoding: posix -257 string ustar\040\040\0 GNU tar archive -!:mime application/x-tar # encoding: gnu - -# cpio archives -# -# Yes, the top two "cpio archive" formats *are* supposed to just be "short". -# The idea is to indicate archives produced on machines with the same -# byte order as the machine running "file" with "cpio archive", and -# to indicate archives produced on machines with the opposite byte order -# from the machine running "file" with "byte-swapped cpio archive". -# -# The SVR4 "cpio(4)" hints that there are additional formats, but they -# are defined as "short"s; I think all the new formats are -# character-header formats and thus are strings, not numbers. -0 short 070707 cpio archive -!:mime application/x-cpio -0 short 0143561 byte-swapped cpio archive -!:mime application/x-cpio # encoding: swapped -0 string 070707 ASCII cpio archive (pre-SVR4 or odc) -0 string 070701 ASCII cpio archive (SVR4 with no CRC) -0 string 070702 ASCII cpio archive (SVR4 with CRC) - -# Debian package (needs to go before regular portable archives) -# -0 string =!\ndebian -!:mime application/x-debian-package ->8 string debian-split part of multipart Debian package ->8 string debian-binary Debian binary package ->8 string !debian ->68 string >\0 (format %s) -# These next two lines do not work, because a bzip2 Debian archive -# still uses gzip for the control.tar (first in the archive). Only -# data.tar varies, and the location of its filename varies too. -# file/libmagic does not current have support for ascii-string based -# (offsets) as of 2005-09-15. -#>81 string bz2 \b, uses bzip2 compression -#>84 string gz \b, uses gzip compression -#>136 ledate x created: %s - -# other archives -0 long 0177555 very old archive -0 short 0177555 very old PDP-11 archive -0 long 0177545 old archive -0 short 0177545 old PDP-11 archive -0 long 0100554 apl workspace -0 string = archive -!:mime application/x-archive - -# MIPS archive (needs to go before regular portable archives) -# -0 string =!\n__________E MIPS archive ->20 string U with MIPS Ucode members ->21 string L with MIPSEL members ->21 string B with MIPSEB members ->19 string L and an EL hash table ->19 string B and an EB hash table ->22 string X -- out of date - -0 search/1 -h- Software Tools format archive text - -# -# XXX - why are there multiple thingies? Note that 0x213c6172 is -# "! current ar archive -# 0 long 0x213c6172 archive file -# -# and for SVR1 archives, we have: -# -# 0 string \ System V Release 1 ar archive -# 0 string = archive -# -# XXX - did Aegis really store shared libraries, breakpointed modules, -# and absolute code program modules in the same format as new-style -# "ar" archives? -# -0 string =! current ar archive -!:mime application/x-archive ->8 string __.SYMDEF random library ->0 belong =65538 - pre SR9.5 ->0 belong =65539 - post SR9.5 ->0 beshort 2 - object archive ->0 beshort 3 - shared library module ->0 beshort 4 - debug break-pointed module ->0 beshort 5 - absolute code program module -0 string \ System V Release 1 ar archive -0 string = archive -# -# XXX - from "vax", which appears to collect a bunch of byte-swapped -# thingies, to help you recognize VAX files on big-endian machines; -# with "leshort", "lelong", and "string", that's no longer necessary.... -# -0 belong 0x65ff0000 VAX 3.0 archive -0 belong 0x3c61723e VAX 5.0 archive -# -0 long 0x213c6172 archive file -0 lelong 0177555 very old VAX archive -0 leshort 0177555 very old PDP-11 archive -# -# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus -# be a random library (it said 0xff65 rather than 0177545). -# -0 lelong 0177545 old VAX archive ->8 string __.SYMDEF random library -0 leshort 0177545 old PDP-11 archive ->8 string __.SYMDEF random library -# -# From "pdp" (but why a 4-byte quantity?) -# -0 lelong 0x39bed PDP-11 old archive -0 lelong 0x39bee PDP-11 4.0 archive - -# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com) -# -# The first byte is the magic (0x1a), byte 2 is the compression type for -# the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS -# filename of the first file (null terminated). Since some types collide -# we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%), -# 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo. -0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000031a ARC archive data, packed -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched -!:mime application/x-arc -# [JW] stuff taken from idarc, obviously ARC successors: -0 lelong&0x8080ffff 0x00000a1a PAK archive data -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000141a ARC+ archive data -!:mime application/x-arc -0 lelong&0x8080ffff 0x0000481a HYP archive data -!:mime application/x-arc - -# Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk) -# I can't create either SPARK or ArcFS archives so I have not tested this stuff -# [GRR: the original entries collide with ARC, above; replaced with combined -# version (not tested)] -#0 byte 0x1a RISC OS archive (spark format) -0 string \032archive RISC OS archive (ArcFS format) -0 string Archive\000 RISC OS archive (ArcFS format) - -# All these were taken from idarc, many could not be verified. Unfortunately, -# there were many low-quality sigs, i.e. easy to trigger false positives. -# Please notify me of any real-world fishy/ambiguous signatures and I'll try -# to get my hands on the actual archiver and see if I find something better. [JW] -# probably many can be enhanced by finding some 0-byte or control char near the start - -# idarc calls this Crush/Uncompressed... *shrug* -0 string CRUSH Crush archive data -# Squeeze It (.sqz) -0 string HLSQZ Squeeze It archive data -# SQWEZ -0 string SQWEZ SQWEZ archive data -# HPack (.hpk) -0 string HPAK HPack archive data -# HAP -0 string \x91\x33HF HAP archive data -# MD/MDCD -0 string MDmd MDCD archive data -# LIM -0 string LIM\x1a LIM archive data -# SAR -3 string LH5 SAR archive data -# BSArc/BS2 -0 string \212\3SB \0 BSArc/BS2 archive data -# MAR -2 string =-ah MAR archive data -# ACB -0 belong&0x00f800ff 0x00800000 ACB archive data -# CPZ -# TODO, this is what idarc says: 0 string \0\0\0 CPZ archive data -# JRC -0 string JRchive JRC archive data -# Quantum -0 string DS\0 Quantum archive data -# ReSOF -0 string PK\3\6 ReSOF archive data -# QuArk -0 string 7\4 QuArk archive data -# YAC -14 string YC YAC archive data -# X1 -0 string X1 X1 archive data -0 string XhDr X1 archive data -# CDC Codec (.dqt) -0 belong&0xffffe000 0x76ff2000 CDC Codec archive data -# AMGC -0 string \xad6" AMGC archive data -# NuLIB -0 string NõFélå NuLIB archive data -# PakLeo -0 string LEOLZW PAKLeo archive data -# ChArc -0 string SChF ChArc archive data -# PSA -0 string PSA PSA archive data -# CrossePAC -0 string DSIGDCC CrossePAC archive data -# Freeze -0 string \x1f\x9f\x4a\x10\x0a Freeze archive data -# KBoom -0 string ¨MP¨ KBoom archive data -# NSQ, must go after CDC Codec -0 string \x76\xff NSQ archive data -# DPA -0 string Dirk\ Paehl DPA archive data -# BA -# TODO: idarc says "bytes 0-2 == bytes 3-5" -# TTComp -0 string \0\6 TTComp archive data -# ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation? -0 string ESP ESP archive data -# ZPack -0 string \1ZPK\1 ZPack archive data -# Sky -0 string \xbc\x40 Sky archive data -# UFA -0 string UFA UFA archive data -# Dry -0 string =-H2O DRY archive data -# FoxSQZ -0 string FOXSQZ FoxSQZ archive data -# AR7 -0 string ,AR7 AR7 archive data -# PPMZ -0 string PPMZ PPMZ archive data -# MS Compress -4 string \x88\xf0\x27 MS Compress archive data -# updated by Joerg Jenderek ->9 string \0 ->>0 string KWAJ ->>>7 string \321\003 MS Compress archive data ->>>>14 ulong >0 \b, original size: %ld bytes ->>>>18 ubyte >0x65 ->>>>>18 string x \b, was %.8s ->>>>>(10.b-4) string x \b.%.3s -# MP3 (archiver, not lossy audio compression) -0 string MP3\x1a MP3-Archiver archive data -# ZET -0 string OZÝ ZET archive data -# TSComp -0 string \x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive data -# ARQ -0 string gW\4\1 ARQ archive data -# Squash -3 string OctSqu Squash archive data -# Terse -0 string \5\1\1\0 Terse archive data -# PUCrunch -0 string \x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 PUCrunch archive data -# UHarc -0 string UHA UHarc archive data -# ABComp -0 string \2AB ABComp archive data -0 string \3AB2 ABComp archive data -# CMP -0 string CO\0 CMP archive data -# Splint -0 string \x93\xb9\x06 Splint archive data -# InstallShield -0 string \x13\x5d\x65\x8c InstallShield Z archive Data -# Gather -1 string GTH Gather archive data -# BOA -0 string BOA BOA archive data -# RAX -0 string ULEB\xa RAX archive data -# Xtreme -0 string ULEB\0 Xtreme archive data -# Pack Magic -0 string @â\1\0 Pack Magic archive data -# BTS -0 belong&0xfeffffff 0x1a034465 BTS archive data -# ELI 5750 -0 string Ora\ ELI 5750 archive data -# QFC -0 string \x1aFC\x1a QFC archive data -0 string \x1aQF\x1a QFC archive data -# PRO-PACK -0 string RNC PRO-PACK archive data -# 777 -0 string 777 777 archive data -# LZS221 -0 string sTaC LZS221 archive data -# HPA -0 string HPA HPA archive data -# Arhangel -0 string LG Arhangel archive data -# EXP1, uses bzip2 -0 string 0123456789012345BZh EXP1 archive data -# IMP -0 string IMP\xa IMP archive data -# NRV -0 string \x00\x9E\x6E\x72\x76\xFF NRV archive data -# Squish -0 string \x73\xb2\x90\xf4 Squish archive data -# Par -0 string PHILIPP Par archive data -0 string PAR Par archive data -# HIT -0 string UB HIT archive data -# SBX -0 belong&0xfffff000 0x53423000 SBX archive data -# NaShrink -0 string NSK NaShrink archive data -# SAPCAR -0 string #\ CAR\ archive\ header SAPCAR archive data -0 string CAR\ 2.00RG SAPCAR archive data -# Disintegrator -0 string DST Disintegrator archive data -# ASD -0 string ASD ASD archive data -# InstallShield CAB -0 string ISc( InstallShield CAB -# TOP4 -0 string T4\x1a TOP4 archive data -# BatComp left out: sig looks like COM executable -# so TODO: get real 4dos batcomp file and find sig -# BlakHole -0 string BH\5\7 BlakHole archive data -# BIX -0 string BIX0 BIX archive data -# ChiefLZA -0 string ChfLZ ChiefLZA archive data -# Blink -0 string Blink Blink archive data -# Logitech Compress -0 string \xda\xfa Logitech Compress archive data -# ARS-Sfx (FIXME: really a SFX? then goto COM/EXE) -1 string (C)\ STEPANYUK ARS-Sfx archive data -# AKT/AKT32 -0 string AKT32 AKT32 archive data -0 string AKT AKT archive data -# NPack -0 string MSTSM NPack archive data -# PFT -0 string \0\x50\0\x14 PFT archive data -# SemOne -0 string SEM SemOne archive data -# PPMD -0 string \x8f\xaf\xac\x84 PPMD archive data -# FIZ -0 string FIZ FIZ archive data -# MSXiE -0 belong&0xfffff0f0 0x4d530000 MSXiE archive data -# DeepFreezer -0 belong&0xfffffff0 0x797a3030 DeepFreezer archive data -# DC -0 string =2 byte x \b, version %i ->3 byte x \b.%i -# ZZip archiver (.zz) -0 string ZZ\ \0\0 ZZip archive data -0 string ZZ0 ZZip archive data -# PAQ archiver (.paq) -0 string \xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data -0 string PAQ PAQ archive data ->3 byte&0xf0 0x30 ->>3 byte x (v%c) -# JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP) -0xe string \x1aJar\x1b JAR (ARJ Software, Inc.) archive data -0 string JARCS JAR (ARJ Software, Inc.) archive data - -# ARJ archiver (jason@jarthur.Claremont.EDU) -0 leshort 0xea60 ARJ archive data -!:mime application/x-arj ->5 byte x \b, v%d, ->8 byte &0x04 multi-volume, ->8 byte &0x10 slash-switched, ->8 byte &0x20 backup, ->34 string x original name: %s, ->7 byte 0 os: MS-DOS ->7 byte 1 os: PRIMOS ->7 byte 2 os: Unix ->7 byte 3 os: Amiga ->7 byte 4 os: Macintosh ->7 byte 5 os: OS/2 ->7 byte 6 os: Apple ][ GS ->7 byte 7 os: Atari ST ->7 byte 8 os: NeXT ->7 byte 9 os: VAX/VMS ->3 byte >0 %d] -# [JW] idarc says this is also possible -2 leshort 0xea60 ARJ archive data - -# HA archiver (Greg Roelofs, newt@uchicago.edu) -# This is a really bad format. A file containing HAWAII will match this... -#0 string HA HA archive data, -#>2 leshort =1 1 file, -#>2 leshort >1 %u files, -#>4 byte&0x0f =0 first is type CPY -#>4 byte&0x0f =1 first is type ASC -#>4 byte&0x0f =2 first is type HSC -#>4 byte&0x0f =0x0e first is type DIR -#>4 byte&0x0f =0x0f first is type SPECIAL -# suggestion: at least identify small archives (<1024 files) -0 belong&0xffff00fc 0x48410000 HA archive data ->2 leshort =1 1 file, ->2 leshort >1 %u files, ->4 byte&0x0f =0 first is type CPY ->4 byte&0x0f =1 first is type ASC ->4 byte&0x0f =2 first is type HSC ->4 byte&0x0f =0x0e first is type DIR ->4 byte&0x0f =0x0f first is type SPECIAL - -# HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz) -0 string HPAK HPACK archive data - -# JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net -0 string \351,\001JAM\ JAM archive, ->7 string >\0 version %.4s ->0x26 byte =0x27 - ->>0x2b string >\0 label %.11s, ->>0x27 lelong x serial %08x, ->>0x36 string >\0 fstype %.8s - -# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu) -2 string -lh0- LHarc 1.x/ARX archive data [lh0] -!:mime application/x-lharc -2 string -lh1- LHarc 1.x/ARX archive data [lh1] -!:mime application/x-lharc -2 string -lz4- LHarc 1.x archive data [lz4] -!:mime application/x-lharc -2 string -lz5- LHarc 1.x archive data [lz5] -!:mime application/x-lharc -# [never seen any but the last; -lh4- reported in comp.compression:] -2 string -lzs- LHa/LZS archive data [lzs] -!:mime application/x-lha -2 string -lh\40- LHa 2.x? archive data [lh ] -!:mime application/x-lha -2 string -lhd- LHa 2.x? archive data [lhd] -!:mime application/x-lha -2 string -lh2- LHa 2.x? archive data [lh2] -!:mime application/x-lha -2 string -lh3- LHa 2.x? archive data [lh3] -!:mime application/x-lha -2 string -lh4- LHa (2.x) archive data [lh4] -!:mime application/x-lha -2 string -lh5- LHa (2.x) archive data [lh5] -!:mime application/x-lha -2 string -lh6- LHa (2.x) archive data [lh6] -!:mime application/x-lha -2 string -lh7- LHa (2.x)/LHark archive data [lh7] -!:mime application/x-lha ->20 byte x - header level %d -# taken from idarc [JW] -2 string -lZ PUT archive data -2 string -lz LZS archive data -2 string -sw1- Swag archive data - -# RAR archiver (Greg Roelofs, newt@uchicago.edu) -0 string Rar! RAR archive data, -!:mime application/x-rar ->44 byte x v%0x, ->10 byte >0 flags: ->>10 byte &0x01 Archive volume, ->>10 byte &0x02 Commented, ->>10 byte &0x04 Locked, ->>10 byte &0x08 Solid, ->>10 byte &0x20 Authenticated, ->35 byte 0 os: MS-DOS ->35 byte 1 os: OS/2 ->35 byte 2 os: Win32 ->35 byte 3 os: Unix -# some old version? idarc says: -0 string RE\x7e\x5e RAR archive data - -# SQUISH archiver (Greg Roelofs, newt@uchicago.edu) -0 string SQSH squished archive data (Acorn RISCOS) - -# UC2 archiver (Greg Roelofs, newt@uchicago.edu) -# [JW] see exe section for self-extracting version -0 string UC2\x1a UC2 archive data - -# ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) -0 string PK\003\004 ->4 byte 0x00 Zip archive data -!:mime application/zip ->4 byte 0x09 Zip archive data, at least v0.9 to extract -!:mime application/zip ->4 byte 0x0a Zip archive data, at least v1.0 to extract -!:mime application/zip ->4 byte 0x0b Zip archive data, at least v1.1 to extract -!:mime application/zip ->0x161 string WINZIP Zip archive data, WinZIP self-extracting -!:mime application/zip ->4 byte 0x14 ->>30 ubelong !0x6d696d65 Zip archive data, at least v2.0 to extract -!:mime application/zip - -# OpenOffice.org / KOffice / StarOffice documents -# Listed here because they ARE zip files -# -# From: Abel Cheung ->4 byte 0x14 ->>30 string mimetype - -# KOffice (1.2 or above) formats ->>>50 string vnd.kde. KOffice (>=1.2) ->>>>58 string karbon Karbon document ->>>>58 string kchart KChart document ->>>>58 string kformula KFormula document ->>>>58 string kivio Kivio document ->>>>58 string kontour Kontour document ->>>>58 string kpresenter KPresenter document ->>>>58 string kspread KSpread document ->>>>58 string kword KWord document - -# OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7) ->>>50 string vnd.sun.xml. OpenOffice.org 1.x ->>>>62 string writer Writer ->>>>>68 byte !0x2e document ->>>>>68 string .template template ->>>>>68 string .global global document ->>>>62 string calc Calc ->>>>>66 byte !0x2e spreadsheet ->>>>>66 string .template template ->>>>62 string draw Draw ->>>>>66 byte !0x2e document ->>>>>66 string .template template ->>>>62 string impress Impress ->>>>>69 byte !0x2e presentation ->>>>>69 string .template template ->>>>62 string math Math document ->>>>62 string base Database file - -# OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8) -# http://lists.oasis-open.org/archives/office/200505/msg00006.html ->>>50 string vnd.oasis.opendocument. OpenDocument ->>>>73 string text ->>>>>77 byte !0x2d Text -!:mime application/vnd.oasis.opendocument.text ->>>>>77 string -template Text Template ->>>>>77 string -web HTML Document Template ->>>>>77 string -master Master Document ->>>>73 string graphics Drawing ->>>>>81 string -template Template ->>>>73 string presentation Presentation ->>>>>85 string -template Template ->>>>73 string spreadsheet Spreadsheet ->>>>>84 string -template Template ->>>>73 string chart Chart ->>>>>78 string -template Template ->>>>73 string formula Formula ->>>>>80 string -template Template ->>>>73 string database Database ->>>>73 string image Image - -# Zoo archiver -20 lelong 0xfdc4a7dc Zoo archive data -!:mime application/x-zoo ->4 byte >48 \b, v%c. ->>6 byte >47 \b%c ->>>7 byte >47 \b%c ->32 byte >0 \b, modify: v%d ->>33 byte x \b.%d+ ->42 lelong 0xfdc4a7dc \b, ->>70 byte >0 extract: v%d ->>>71 byte x \b.%d+ - -# Shell archives -10 string #\ This\ is\ a\ shell\ archive shell archive text -!:mime application/octet-stream - -# -# LBR. NB: May conflict with the questionable -# "binary Computer Graphics Metafile" format. -# -0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data -# -# PMA (CP/M derivative of LHA) -# -2 string -pm0- PMarc archive data [pm0] -2 string -pm1- PMarc archive data [pm1] -2 string -pm2- PMarc archive data [pm2] -2 string -pms- PMarc SFX archive (CP/M, DOS) -5 string -pc1- PopCom compressed executable (CP/M) - -# From Rafael Laboissiere -# The Project Revision Control System (see -# http://prcs.sourceforge.net) generates a packaged project -# file which is recognized by the following entry: -0 leshort 0xeb81 PRCS packaged project - -# Microsoft cabinets -# by David Necas (Yeti) -#0 string MSCF\0\0\0\0 Microsoft cabinet file data, -#>25 byte x v%d -#>24 byte x \b.%d -# MPi: All CABs have version 1.3, so this is pointless. -# Better magic in debian-additions. - -# GTKtalog catalogs -# by David Necas (Yeti) -4 string gtktalog\ GTKtalog catalog data, ->13 string 3 version 3 ->>14 beshort 0x677a (gzipped) ->>14 beshort !0x677a (not gzipped) ->13 string >3 version %s - -############################################################################ -# Parity archive reconstruction file, the 'par' file format now used on Usenet. -0 string PAR\0 PARity archive data ->48 leshort =0 - Index file ->48 leshort >0 - file number %d - -# Felix von Leitner -0 string d8:announce BitTorrent file -!:mime application/x-bittorrent - -# Atari MSA archive - Teemu Hukkanen -0 beshort 0x0e0f Atari MSA archive data ->2 beshort x \b, %d sectors per track ->4 beshort 0 \b, 1 sided ->4 beshort 1 \b, 2 sided ->6 beshort x \b, starting track: %d ->8 beshort x \b, ending track: %d - -# Alternate ZIP string (amc@arwen.cs.berkeley.edu) -0 string PK00PK\003\004 Zip archive data - -# ACE archive (from http://www.wotsit.org/download.asp?f=ace) -# by Stefan `Sec` Zehl -7 string **ACE** ACE archive data ->15 byte >0 version %d ->16 byte =0x00 \b, from MS-DOS ->16 byte =0x01 \b, from OS/2 ->16 byte =0x02 \b, from Win/32 ->16 byte =0x03 \b, from Unix ->16 byte =0x04 \b, from MacOS ->16 byte =0x05 \b, from WinNT ->16 byte =0x06 \b, from Primos ->16 byte =0x07 \b, from AppleGS ->16 byte =0x08 \b, from Atari ->16 byte =0x09 \b, from Vax/VMS ->16 byte =0x0A \b, from Amiga ->16 byte =0x0B \b, from Next ->14 byte x \b, version %d to extract ->5 leshort &0x0080 \b, multiple volumes, ->>17 byte x \b (part %d), ->5 leshort &0x0002 \b, contains comment ->5 leshort &0x0200 \b, sfx ->5 leshort &0x0400 \b, small dictionary ->5 leshort &0x0800 \b, multi-volume ->5 leshort &0x1000 \b, contains AV-String ->>30 string \x16*UNREGISTERED\x20VERSION* (unregistered) ->5 leshort &0x2000 \b, with recovery record ->5 leshort &0x4000 \b, locked ->5 leshort &0x8000 \b, solid -# Date in MS-DOS format (whatever that is) -#>18 lelong x Created on - -# sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann -# -0x1A string sfArk sfArk compressed Soundfont ->0x15 string 2 ->>0x1 string >\0 Version %s ->>0x2A string >\0 : %s - -# DR-DOS 7.03 Packed File *.??_ -0 string Packed\ File\ Personal NetWare Packed File ->12 string x \b, was "%.12s" - -# EET archive -# From: Tilman Sauerbeck -0 belong 0x1ee7ff00 EET archive -!:mime application/x-eet - -# rzip archives -0 string RZIP rzip compressed data ->4 byte x - version %d ->5 byte x \b.%d ->6 belong x (%d bytes) - -# From: "Robert Dale" -0 belong 123 dar archive, ->4 belong x label "%.8x ->>8 belong x %.8x ->>>12 beshort x %.4x" ->14 byte 0x54 end slice ->14 beshort 0x4e4e multi-part ->14 beshort 0x4e53 multi-part, with -S - -# Symbian installation files -# http://www.thouky.co.uk/software/psifs/sis.html -# http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf -8 lelong 0x10000419 Symbian installation file -!:mime application/vnd.symbian.install ->4 lelong 0x1000006D (EPOC release 3/4/5) ->4 lelong 0x10003A12 (EPOC release 6) -0 lelong 0x10201A7A Symbian installation file (Symbian OS 9.x) -!:mime x-epoc/x-sisx-app - -# From "Nelson A. de Oliveira" -0 string MPQ\032 MoPaQ (MPQ) archive - -# From: Dirk Jagdmann -# xar archive format: http://code.google.com/p/xar/ -0 string xar! xar archive ->6 beshort x - version %ld - -# From: "Nelson A. de Oliveira" -# .kgb -0 string KGB_arch KGB Archiver file ->10 string x with compression level %.1s - -# xar (eXtensible ARchiver) archive -# From: "David Remahl" -0 string xar! xar archive -#>4 beshort x header size %d ->6 beshort x version %d, -#>8 quad x compressed TOC: %d, -#>16 quad x uncompressed TOC: %d, ->24 belong 0 no checksum ->24 belong 1 SHA-1 checksum ->24 belong 2 MD5 checksum - -# Type: Parity Archive -# From: Daniel van Eeden -0 string PAR2 Parity Archive Volume Set - -#------------------------------------------------------------------------------ -# asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character -# strings as "long" - we assume they're just strings: -# From: guy@netapp.com (Guy Harris) -# -0 string *STA Aster*x ->7 string WORD Words Document ->7 string GRAP Graphic ->7 string SPRE Spreadsheet ->7 string MACR Macro -0 string 2278 Aster*x Version 2 ->29 byte 0x36 Words Document ->29 byte 0x35 Graphic ->29 byte 0x32 Spreadsheet ->29 byte 0x38 Macro - - -#------------------------------------------------------------------------------ -# att3b: file(1) magic for AT&T 3B machines -# -# The `versions' should be un-commented if they work for you. -# (Was the problem just one of endianness?) -# -# 3B20 -# -# The 3B20 conflicts with SCCS. -#0 beshort 0550 3b20 COFF executable -#>12 belong >0 not stripped -#>22 beshort >0 - version %ld -#0 beshort 0551 3b20 COFF executable (TV) -#>12 belong >0 not stripped -#>22 beshort >0 - version %ld -# -# WE32K -# -0 beshort 0560 WE32000 COFF ->18 beshort ^00000020 object ->18 beshort &00000020 executable ->12 belong >0 not stripped ->18 beshort ^00010000 N/A on 3b2/300 w/paging ->18 beshort &00020000 32100 required ->18 beshort &00040000 and MAU hardware required ->20 beshort 0407 (impure) ->20 beshort 0410 (pure) ->20 beshort 0413 (demand paged) ->20 beshort 0443 (target shared library) ->22 beshort >0 - version %ld -0 beshort 0561 WE32000 COFF executable (TV) ->12 belong >0 not stripped -#>18 beshort &00020000 - 32100 required -#>18 beshort &00040000 and MAU hardware required -#>22 beshort >0 - version %ld -# -# core file for 3b2 -0 string \000\004\036\212\200 3b2 core file ->364 string >\0 of '%s' -#------------------------------------------------------------------------------ -# audio: file(1) magic for sound formats (see also "iff") -# -# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com), -# and others -# - -# Sun/NeXT audio data -0 string .snd Sun/NeXT audio data: ->12 belong 1 8-bit ISDN mu-law, -!:mime audio/basic ->12 belong 2 8-bit linear PCM [REF-PCM], -!:mime audio/basic ->12 belong 3 16-bit linear PCM, -!:mime audio/basic ->12 belong 4 24-bit linear PCM, -!:mime audio/basic ->12 belong 5 32-bit linear PCM, -!:mime audio/basic ->12 belong 6 32-bit IEEE floating point, -!:mime audio/basic ->12 belong 7 64-bit IEEE floating point, -!:mime audio/basic ->12 belong 8 Fragmented sample data, ->12 belong 10 DSP program, ->12 belong 11 8-bit fixed point, ->12 belong 12 16-bit fixed point, ->12 belong 13 24-bit fixed point, ->12 belong 14 32-bit fixed point, ->12 belong 18 16-bit linear with emphasis, ->12 belong 19 16-bit linear compressed, ->12 belong 20 16-bit linear with emphasis and compression, ->12 belong 21 Music kit DSP commands, ->12 belong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.), -!:mime audio/x-adpcm ->12 belong 24 compressed (8-bit CCITT G.722 ADPCM) ->12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), ->12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), ->12 belong 27 8-bit A-law (CCITT G.711), ->20 belong 1 mono, ->20 belong 2 stereo, ->20 belong 4 quad, ->16 belong >0 %d Hz - -# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format -# that uses little-endian encoding and has a different magic number -0 lelong 0x0064732E DEC audio data: ->12 lelong 1 8-bit ISDN mu-law, -!:mime audio/x-dec-basic ->12 lelong 2 8-bit linear PCM [REF-PCM], -!:mime audio/x-dec-basic ->12 lelong 3 16-bit linear PCM, -!:mime audio/x-dec-basic ->12 lelong 4 24-bit linear PCM, -!:mime audio/x-dec-basic ->12 lelong 5 32-bit linear PCM, -!:mime audio/x-dec-basic ->12 lelong 6 32-bit IEEE floating point, -!:mime audio/x-dec-basic ->12 lelong 7 64-bit IEEE floating point, -!:mime audio/x-dec-basic ->12 belong 8 Fragmented sample data, ->12 belong 10 DSP program, ->12 belong 11 8-bit fixed point, ->12 belong 12 16-bit fixed point, ->12 belong 13 24-bit fixed point, ->12 belong 14 32-bit fixed point, ->12 belong 18 16-bit linear with emphasis, ->12 belong 19 16-bit linear compressed, ->12 belong 20 16-bit linear with emphasis and compression, ->12 belong 21 Music kit DSP commands, ->12 lelong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.), -!:mime audio/x-dec-basic ->12 belong 24 compressed (8-bit CCITT G.722 ADPCM) ->12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), ->12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), ->12 belong 27 8-bit A-law (CCITT G.711), ->20 lelong 1 mono, ->20 lelong 2 stereo, ->20 lelong 4 quad, ->16 lelong >0 %d Hz - -# Creative Labs AUDIO stuff -0 string MThd Standard MIDI data -!:mime audio/midi ->8 beshort x (format %d) ->10 beshort x using %d track ->10 beshort >1 \bs ->12 beshort&0x7fff x at 1/%d ->12 beshort&0x8000 >0 SMPTE - -0 string CTMF Creative Music (CMF) data -!:mime audio/x-unknown -0 string SBI SoundBlaster instrument data -!:mime audio/x-unknown -0 string Creative\ Voice\ File Creative Labs voice data -!:mime audio/x-unknown -# is this next line right? it came this way... ->19 byte 0x1A ->23 byte >0 - version %d ->22 byte >0 \b.%d - -# first entry is also the string "NTRK" -0 belong 0x4e54524b MultiTrack sound data ->4 belong x - version %ld - -# Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED -# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi] -0 string EMOD Extended MOD sound data, ->4 byte&0xf0 x version %d ->4 byte&0x0f x \b.%d, ->45 byte x %d instruments ->83 byte 0 (module) ->83 byte 1 (song) - -# Real Audio (Magic .ra\0375) -0 belong 0x2e7261fd RealAudio sound file -!:mime audio/x-pn-realaudio -0 string .RMF\0\0\0 RealMedia file -!:mime application/vnd.rn-realmedia -#video/x-pn-realvideo -#video/vnd.rn-realvideo -#application/vnd.rn-realmedia -# sigh, there are many mimes for that but the above are the most common. - -# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net] -# Oct 31, 1995 -# fixed by 2003-06-24 -# Too short... -#0 string MTM MultiTracker Module sound file -#0 string if Composer 669 Module sound data -#0 string JN Composer 669 Module sound data (extended format) -0 string MAS_U ULT(imate) Module sound data - -#0 string FAR Module sound data -#>4 string >\15 Title: "%s" - -0x2c string SCRM ScreamTracker III Module sound data ->0 string >\0 Title: "%s" - -# Gravis UltraSound patches -# From - -0 string GF1PATCH110\0ID#000002\0 GUS patch -0 string GF1PATCH100\0ID#000002\0 Old GUS patch - -# mime types according to http://www.geocities.com/nevilo/mod.htm: -# audio/it .it -# audio/x-zipped-it .itz -# audio/xm fasttracker modules -# audio/x-s3m screamtracker modules -# audio/s3m screamtracker modules -# audio/x-zipped-mod mdz -# audio/mod mod -# audio/x-mod All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z) - -# -# Taken from loader code from mikmod version 2.14 -# by Steve McIntyre (stevem@chiark.greenend.org.uk) -# added title printing on 2003-06-24 -0 string MAS_UTrack_V00 ->14 string >/0 ultratracker V1.%.1s module sound data -!:mime audio/x-mod -#audio/x-tracker-module - -0 string UN05 MikMod UNI format module sound data - -0 string Extended\ Module: Fasttracker II module sound data -!:mime audio/x-mod -#audio/x-tracker-module ->17 string >\0 Title: "%s" - -21 string/c =!SCREAM! Screamtracker 2 module sound data -!:mime audio/x-mod -#audio/x-screamtracker-module -21 string BMOD2STM Screamtracker 2 module sound data -!:mime audio/x-mod -#audio/x-screamtracker-module -1080 string M.K. 4-channel Protracker module sound data -!:mime audio/x-mod -#audio/x-protracker-module ->0 string >\0 Title: "%s" -1080 string M!K! 4-channel Protracker module sound data -!:mime audio/x-mod -#audio/x-protracker-module ->0 string >\0 Title: "%s" -1080 string FLT4 4-channel Startracker module sound data -!:mime audio/x-mod -#audio/x-startracker-module ->0 string >\0 Title: "%s" -1080 string FLT8 8-channel Startracker module sound data -!:mime audio/x-mod -#audio/x-startracker-module ->0 string >\0 Title: "%s" -1080 string 4CHN 4-channel Fasttracker module sound data -!:mime audio/x-mod -#audio/x-fasttracker-module ->0 string >\0 Title: "%s" -1080 string 6CHN 6-channel Fasttracker module sound data -!:mime audio/x-mod -#audio/x-fasttracker-module ->0 string >\0 Title: "%s" -1080 string 8CHN 8-channel Fasttracker module sound data -!:mime audio/x-mod -#audio/x-fasttracker-module ->0 string >\0 Title: "%s" -1080 string CD81 8-channel Octalyser module sound data -!:mime audio/x-mod -#audio/x-octalysertracker-module ->0 string >\0 Title: "%s" -1080 string OKTA 8-channel Octalyzer module sound data -!:mime audio/x-mod -#audio/x-octalysertracker-module ->0 string >\0 Title: "%s" -# Not good enough. -#1082 string CH -#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data -1080 string 16CN 16-channel Taketracker module sound data -!:mime audio/x-mod -#audio/x-taketracker-module ->0 string >\0 Title: "%s" -1080 string 32CN 32-channel Taketracker module sound data -!:mime audio/x-mod -#audio/x-taketracker-module ->0 string >\0 Title: "%s" - -# TOC sound files -Trevor Johnson -# -0 string TOC TOC sound file - -# sidfiles -# added name,author,(c) and new RSID type by 2003-06-24 -0 string SIDPLAY\ INFOFILE Sidplay info file - -0 string PSID PlaySID v2.2+ (AMIGA) sidtune ->4 beshort >0 w/ header v%d, ->14 beshort =1 single song, ->14 beshort >1 %d songs, ->16 beshort >0 default song: %d ->0x16 string >\0 name: "%s" ->0x36 string >\0 author: "%s" ->0x56 string >\0 copyright: "%s" - -0 string RSID RSID sidtune PlaySID compatible ->4 beshort >0 w/ header v%d, ->14 beshort =1 single song, ->14 beshort >1 %d songs, ->16 beshort >0 default song: %d ->0x16 string >\0 name: "%s" ->0x36 string >\0 author: "%s" ->0x56 string >\0 copyright: "%s" - -# IRCAM -# VAX and MIPS files are little-endian; Sun and NeXT are big-endian -0 belong 0x64a30100 IRCAM file (VAX) -0 belong 0x64a30200 IRCAM file (Sun) -0 belong 0x64a30300 IRCAM file (MIPS little-endian) -0 belong 0x64a30400 IRCAM file (NeXT) - -# NIST SPHERE -0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file - -# Sample Vision -0 string SOUND\ SAMPLE\ DATA\ Sample Vision file - -# Audio Visual Research -0 string 2BIT Audio Visual Research file, ->12 beshort =0 mono, ->12 beshort =-1 stereo, ->14 beshort x %d bits ->16 beshort =0 unsigned, ->16 beshort =-1 signed, ->22 belong&0x00ffffff x %d Hz, ->18 beshort =0 no loop, ->18 beshort =-1 loop, ->21 ubyte <128 note %d, ->22 byte =0 replay 5.485 KHz ->22 byte =1 replay 8.084 KHz ->22 byte =2 replay 10.971 Khz ->22 byte =3 replay 16.168 Khz ->22 byte =4 replay 21.942 KHz ->22 byte =5 replay 32.336 KHz ->22 byte =6 replay 43.885 KHz ->22 byte =7 replay 47.261 KHz - -# SGI SoundTrack -0 string _SGI_SoundTrack SGI SoundTrack project file -# ID3 version 2 tags -0 string ID3 Audio file with ID3 version 2 ->3 byte x \b.%d ->4 byte x \b.%d ->>5 byte &0x80 \b, unsynchronized frames ->>5 byte &0x40 \b, extended header ->>5 byte &0x20 \b, experimental ->>5 byte &0x10 \b, footer present ->(6.I) indirect x \b, contains: - -# NSF (NES sound file) magic -0 string NESM\x1a NES Sound File ->14 string >\0 ("%s" by ->46 string >\0 %s, copyright ->78 string >\0 %s), ->5 byte x version %d, ->6 byte x %d tracks, ->122 byte&0x2 =1 dual PAL/NTSC ->122 byte&0x1 =1 PAL ->122 byte&0x1 =0 NTSC - -# Type: SNES SPC700 sound files -# From: Josh Triplett -0 string SNES-SPC700\ Sound\ File\ Data\ v SNES SPC700 sound file ->&0 string 0.30 \b, version %s ->>0x23 byte 0x1B \b, without ID666 tag ->>0x23 byte 0x1A \b, with ID666 tag ->>>0x2E string >\0 \b, song "%.32s" ->>>0x4E string >\0 \b, game "%.32s" - -# Impulse tracker module (audio/x-it) -0 string IMPM Impulse Tracker module sound data - -!:mime audio/x-mod ->4 string >\0 "%s" ->40 leshort !0 compatible w/ITv%x ->42 leshort !0 created w/ITv%x - -# Imago Orpheus module (audio/x-imf) -60 string IM10 Imago Orpheus module sound data - ->0 string >\0 "%s" - -# From -# These are the /etc/magic entries to decode modules, instruments, and -# samples in Impulse Tracker's native format. - -0 string IMPS Impulse Tracker Sample ->18 byte &2 16 bit ->18 byte ^2 8 bit ->18 byte &4 stereo ->18 byte ^4 mono -0 string IMPI Impulse Tracker Instrument ->28 leshort !0 ITv%x ->30 byte !0 %d samples - -# Yamaha TX Wave: file(1) magic for Yamaha TX Wave audio files -# From -0 string LM8953 Yamaha TX Wave ->22 byte 0x49 looped ->22 byte 0xC9 non-looped ->23 byte 1 33kHz ->23 byte 2 50kHz ->23 byte 3 16kHz - -# scream tracker: file(1) magic for Scream Tracker sample files -# -# From -76 string SCRS Scream Tracker Sample ->0 byte 1 sample ->0 byte 2 adlib melody ->0 byte >2 adlib drum ->31 byte &2 stereo ->31 byte ^2 mono ->31 byte &4 16bit little endian ->31 byte ^4 8bit ->30 byte 0 unpacked ->30 byte 1 packed - -# audio -# From: Cory Dikkers -0 string MMD0 MED music file, version 0 -0 string MMD1 OctaMED Pro music file, version 1 -0 string MMD3 OctaMED Soundstudio music file, version 3 -0 string OctaMEDCmpr OctaMED Soundstudio compressed file -0 string MED MED_Song -0 string SymM Symphonie SymMOD music file -# -0 string THX AHX version ->3 byte =0 1 module data ->3 byte =1 2 module data -# -0 string OKTASONG Oktalyzer module data -# -0 string DIGI\ Booster\ module\0 %s ->20 byte >0 %c ->>21 byte >0 \b%c ->>>22 byte >0 \b%c ->>>>23 byte >0 \b%c ->610 string >\0 \b, "%s" -# -0 string DBM0 DIGI Booster Pro Module ->4 byte >0 V%X. ->>5 byte x \b%02X ->16 string >\0 \b, "%s" -# -0 string FTMN FaceTheMusic module ->16 string >\0d \b, "%s" - -# From: 2003-06-24 -0 string AMShdr\32 Velvet Studio AMS Module v2.2 -0 string Extreme Extreme Tracker AMS Module v1.3 -0 string DDMF Xtracker DMF Module ->4 byte x v%i ->0xD string >\0 Title: "%s" ->0x2B string >\0 Composer: "%s" -0 string DSM\32 Dynamic Studio Module DSM -0 string SONG DigiTrekker DTM Module -0 string DMDL DigiTrakker MDL Module -0 string PSM\32 Protracker Studio PSM Module -44 string PTMF Poly Tracker PTM Module ->0 string >\32 Title: "%s" -0 string MT20 MadTracker 2.0 Module MT2 -0 string RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD -0 string RTMM RTM Module -0x426 string MaDoKaN96 XMS Adlib Module ->0 string >\0 Composer: "%s" -0 string AMF AMF Module ->4 string >\0 Title: "%s" -0 string MODINFO1 Open Cubic Player Module Inforation MDZ -0 string Extended\40Instrument: Fast Tracker II Instrument - -# From: Takeshi Hamasaki -# NOA Nancy Codec file -0 string \210NOA\015\012\032 NOA Nancy Codec Movie file -# Yamaha SMAF format -0 string MMMD Yamaha SMAF file -# Sharp Jisaku Melody format for PDC -0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody ->20 string Ver01.00 Ver. 1.00 ->>32 byte x , %d tracks - -# Free lossless audio codec -# From: Przemyslaw Augustyniak -0 string fLaC FLAC audio bitstream data -!:mime audio/x-flac ->4 byte&0x7f >0 \b, unknown version ->4 byte&0x7f 0 \b -# some common bits/sample values ->>20 beshort&0x1f0 0x030 \b, 4 bit ->>20 beshort&0x1f0 0x050 \b, 6 bit ->>20 beshort&0x1f0 0x070 \b, 8 bit ->>20 beshort&0x1f0 0x0b0 \b, 12 bit ->>20 beshort&0x1f0 0x0f0 \b, 16 bit ->>20 beshort&0x1f0 0x170 \b, 24 bit ->>20 byte&0xe 0x0 \b, mono ->>20 byte&0xe 0x2 \b, stereo ->>20 byte&0xe 0x4 \b, 3 channels ->>20 byte&0xe 0x6 \b, 4 channels ->>20 byte&0xe 0x8 \b, 5 channels ->>20 byte&0xe 0xa \b, 6 channels ->>20 byte&0xe 0xc \b, 7 channels ->>20 byte&0xe 0xe \b, 8 channels -# some common sample rates ->>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz ->>17 belong&0xfffff0 0x0bb800 \b, 48 kHz ->>17 belong&0xfffff0 0x07d000 \b, 32 kHz ->>17 belong&0xfffff0 0x056220 \b, 22.05 kHz ->>17 belong&0xfffff0 0x05dc00 \b, 24 kHz ->>17 belong&0xfffff0 0x03e800 \b, 16 kHz ->>17 belong&0xfffff0 0x02b110 \b, 11.025 kHz ->>17 belong&0xfffff0 0x02ee00 \b, 12 kHz ->>17 belong&0xfffff0 0x01f400 \b, 8 kHz ->>17 belong&0xfffff0 0x177000 \b, 96 kHz ->>17 belong&0xfffff0 0x0fa000 \b, 64 kHz ->>21 byte&0xf >0 \b, >4G samples ->>21 byte&0xf 0 \b ->>>22 belong >0 \b, %u samples ->>>22 belong 0 \b, length unknown - -# (ISDN) VBOX voice message file (Wolfram Kleff) -0 string VBOX VBOX voice message data - -# ReBorn Song Files (.rbs) -# David J. Singer -8 string RB40 RBS Song file ->29 string ReBorn created by ReBorn ->37 string Propellerhead created by ReBirth - -# Synthesizer Generator and Kimwitu share their file format -0 string A#S#C#S#S#L#V#3 Synthesizer Generator or Kimwitu data -# Kimwitu++ uses a slightly different magic -0 string A#S#C#S#S#L#HUB Kimwitu++ data - -# From "Simon Hosie -0 string TFMX-SONG TFMX module sound data - -# Monkey's Audio compressed audio format (.ape) -# From danny.milo@gmx.net (Danny Milosavljevic) -# New version from Abel Cheung -0 string MAC\040 Monkey's Audio compressed format ->4 uleshort >0x0F8B version %d ->>(0x08.l) uleshort =1000 with fast compression ->>(0x08.l) uleshort =2000 with normal compression ->>(0x08.l) uleshort =3000 with high compression ->>(0x08.l) uleshort =4000 with extra high compression ->>(0x08.l) uleshort =5000 with insane compression ->>(0x08.l+18) uleshort =1 \b, mono ->>(0x08.l+18) uleshort =2 \b, stereo ->>(0x08.l+20) ulelong x \b, sample rate %d ->4 uleshort <0x0F8C version %d ->>6 uleshort =1000 with fast compression ->>6 uleshort =2000 with normal compression ->>6 uleshort =3000 with high compression ->>6 uleshort =4000 with extra high compression ->>6 uleshort =5000 with insane compression ->>10 uleshort =1 \b, mono ->>10 uleshort =2 \b, stereo ->>12 ulelong x \b, sample rate %d - -# adlib sound files -# From Gürkan Sengün , http://www.linuks.mine.nu -0 string RAWADATA RdosPlay RAW - -1068 string RoR AMUSIC Adlib Tracker - -0 string JCH EdLib - -0 string mpu401tr MPU-401 Trakker - -0 string SAdT Surprise! Adlib Tracker ->4 byte x Version %d - -0 string XAD! eXotic ADlib - -0 string ofTAZ! eXtra Simple Music - -# Spectrum 128 tunes (.ay files). -# From: Emanuel Haupt -0 string ZXAYEMUL Spectrum 128 tune - -0 string \0BONK BONK, -#>5 byte x version %d ->14 byte x %d channel(s), ->15 byte =1 lossless, ->15 byte =0 lossy, ->16 byte x mid-side - -384 string LockStream LockStream Embedded file (mostly MP3 on old Nokia phones) - -# format VQF (proprietary codec for sound) -# some infos on the header file available at : -# http://www.twinvq.org/english/technology_format.html -0 string TWIN97012000 VQF data ->27 short 0 \b, Mono ->27 short 1 \b, Stereo ->31 short >0 \b, %d kbit/s ->35 short >0 \b, %d kHz - -# Nelson A. de Oliveira (naoliv@gmail.com) -# .eqf -0 string Winamp\ EQ\ library\ file %s -# it will match only versions like v. -# Since I saw only eqf files with version v1.1 I think that it's OK ->23 string x \b%.4s -# .preset -0 string [Equalizer\ preset] XMMS equalizer preset -# .m3u -0 search/1 #EXTM3U M3U playlist text -# .pls -0 search/1 [playlist] PLS playlist text -# licq.conf -1 string [licq] LICQ configuration file - -# Atari ST audio files by Dirk Jagdmann -0 string ICE! SNDH Atari ST music -0 string SC68\ Music-file\ /\ (c)\ (BeN)jami sc68 Atari ST music - -# musepak support From: "Jiri Pejchal" -0 string MP+ Musepack audio ->3 byte 255 \b, SV pre8 ->3 byte&0xF 0x6 \b, SV 6 ->3 byte&0xF 0x8 \b, SV 8 ->3 byte&0xF 0x7 \b, SV 7 ->>3 byte&0xF0 0x0 \b.0 ->>3 byte&0xF0 0x10 \b.1 ->>3 byte&0xF0 240 \b.15 ->>10 byte&0xF0 0x0 \b, no profile ->>10 byte&0xF0 0x10 \b, profile 'Unstable/Experimental' ->>10 byte&0xF0 0x50 \b, quality 0 ->>10 byte&0xF0 0x60 \b, quality 1 ->>10 byte&0xF0 0x70 \b, quality 2 (Telephone) ->>10 byte&0xF0 0x80 \b, quality 3 (Thumb) ->>10 byte&0xF0 0x90 \b, quality 4 (Radio) ->>10 byte&0xF0 0xA0 \b, quality 5 (Standard) ->>10 byte&0xF0 0xB0 \b, quality 6 (Xtreme) ->>10 byte&0xF0 0xC0 \b, quality 7 (Insane) ->>10 byte&0xF0 0xD0 \b, quality 8 (BrainDead) ->>10 byte&0xF0 0xE0 \b, quality 9 ->>10 byte&0xF0 0xF0 \b, quality 10 ->>27 byte 0x0 \b, Buschmann 1.7.0-9, Klemm 0.90-1.05 ->>27 byte 102 \b, Beta 1.02 ->>27 byte 104 \b, Beta 1.04 ->>27 byte 105 \b, Alpha 1.05 ->>27 byte 106 \b, Beta 1.06 ->>27 byte 110 \b, Release 1.1 ->>27 byte 111 \b, Alpha 1.11 ->>27 byte 112 \b, Beta 1.12 ->>27 byte 113 \b, Alpha 1.13 ->>27 byte 114 \b, Beta 1.14 ->>27 byte 115 \b, Alpha 1.15 - -# IMY -# from http://filext.com/detaillist.php?extdetail=IMY -# http://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm -# http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html -# http://www.wx800.com/msg/download/irda/iMelody.pdf -0 string BEGIN:IMELODY iMelody Ringtone Format - -# From: "Mateus Caruccio" -# guitar pro v3,4,5 from http://filext.com/file-extension/gp3 -0 string \030FICHIER\ GUITAR\ PRO\ v3. Guitar Pro Ver. 3 Tablature - -# From: "Leslie P. Polzer" -60 string SONG SoundFX Module sound file - -# Type: Adaptive Multi-Rate Codec -# URL: http://filext.com/detaillist.php?extdetail=AMR -# From: Russell Coker -0 string #!AMR Adaptive Multi-Rate Codec (GSM telephony) - -# Type: SuperCollider 3 Synth Definition File Format -# From: Mario Lang -0 string SCgf SuperCollider3 Synth Definition file, ->4 belong x version %d -#---------------------------------------------------------------- -# basis: file(1) magic for BBx/Pro5-files -# Oliver Dammer 2005/11/07 -# http://www.basis.com business-basic-files. -# -0 string \074\074bbx\076\076 BBx ->7 string \000 indexed file ->7 string \001 serial file ->7 string \002 keyed file ->>13 short 0 (sort) ->7 string \004 program ->>18 byte x (LEVEL %d) ->>>23 string >\000 psaved ->7 string \006 mkeyed file ->>13 short 0 (sort) ->>8 string \000 (mkey) -#------------------------------------------------------------------------------ -# bFLT: file(1) magic for BFLT uclinux binary files -# -# From Philippe De Muyter -# -0 string bFLT BFLT executable ->4 belong x - version %ld ->4 belong 4 ->>36 belong&0x1 0x1 ram ->>36 belong&0x2 0x2 gotpic ->>36 belong&0x4 0x4 gzip ->>36 belong&0x8 0x8 gzdata -#------------------------------------------------------------------------------ -# blender: file(1) magic for Blender 3D related files -# -# Native format rule v1.2. For questions use the developers list -# http://lists.blender.org/mailman/listinfo/bf-committers -# GLOB chunk was moved near start and provides subversion info since 2.42 - -0 string =BLENDER Blender3D, ->7 string =_ saved as 32-bits ->>8 string =v little endian ->>>9 byte x with version %c. ->>>10 byte x \b%c ->>>11 byte x \b%c ->>>0x40 string =GLOB \b. ->>>>0x58 leshort x \b%.4d ->>8 string =V big endian ->>>9 byte x with version %c. ->>>10 byte x \b%c ->>>11 byte x \b%c ->>>0x40 string =GLOB \b. ->>>>0x58 beshort x \b%.4d ->7 string =- saved as 64-bits ->>8 string =v little endian ->>9 byte x with version %c. ->>10 byte x \b%c ->>11 byte x \b%c ->>0x44 string =GLOB \b. ->>>0x60 leshort x \b%.4d ->>8 string =V big endian ->>>9 byte x with version %c. ->>>10 byte x \b%c ->>>11 byte x \b%c ->>>0x44 string =GLOB \b. ->>>>0x60 beshort x \b%.4d - -# Scripts that run in the embeded Python interpreter -0 string #!BPY Blender3D BPython script - -#------------------------------------------------------------------------------ -# blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine -# -# Note that this 0407 conflicts with several other a.out formats... -# -# XXX - should this be redone with "be" and "le", so that it works on -# little-endian machines as well? If so, what's the deal with -# "VAX-order" and "VAX-order2"? -# -#0 long 0407 68K Blit (standalone) executable -#0 short 0407 VAX-order2 68K Blit (standalone) executable -0 short 03401 VAX-order 68K Blit (standalone) executable -0 long 0406 68k Blit mpx/mux executable -0 short 0406 VAX-order2 68k Blit mpx/mux executable -0 short 03001 VAX-order 68k Blit mpx/mux executable -# Need more values for WE32 DMD executables. -# Note that 0520 is the same as COFF -#0 short 0520 tty630 layers executable -# -# i80960 b.out objects and archives -# -0 long 0x10d i960 b.out relocatable object ->16 long >0 not stripped -# -# b.out archive (hp-rt on i960) -0 string =! b.out archive ->8 string __.SYMDEF random library -#------------------------------------------------------------------------------ -# bsdi: file(1) magic for BSD/OS (from BSDI) objects -# - -0 lelong 0314 386 compact demand paged pure executable ->16 lelong >0 not stripped ->32 byte 0x6a (uses shared libs) - -0 lelong 0407 386 executable ->16 lelong >0 not stripped ->32 byte 0x6a (uses shared libs) - -0 lelong 0410 386 pure executable ->16 lelong >0 not stripped ->32 byte 0x6a (uses shared libs) - -0 lelong 0413 386 demand paged pure executable ->16 lelong >0 not stripped ->32 byte 0x6a (uses shared libs) - -# same as in SunOS 4.x, except for static shared libraries -0 belong&077777777 0600413 sparc demand paged ->0 byte &0x80 ->>20 belong <4096 shared library ->>20 belong =4096 dynamically linked executable ->>20 belong >4096 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped ->36 belong 0xb4100001 (uses shared libs) - -0 belong&077777777 0600410 sparc pure ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped ->36 belong 0xb4100001 (uses shared libs) - -0 belong&077777777 0600407 sparc ->0 byte &0x80 dynamically linked executable ->0 byte ^0x80 executable ->16 belong >0 not stripped ->36 belong 0xb4100001 (uses shared libs) -#------------------------------------------------------------------------------ -# BTSnoop: file(1) magic for BTSnoop files -# -# From -0 string btsnoop\0 BTSnoop ->8 belong x version %d, ->12 belong 1001 Unencapsulated HCI ->12 belong 1002 HCI UART (H4) ->12 belong 1003 HCI BCSP ->12 belong 1004 HCI Serial (H5) ->>12 belong x type %d -#------------------------------------------------------------------------------ -# c-lang: file(1) magic for C programs (or REXX) -# - -# XPM icons (Greg Roelofs, newt@uchicago.edu) -# if you uncomment "/*" for C/REXX below, also uncomment this entry -#0 string /*\ XPM\ */ X pixmap image data -#!:mime image/x-xpmi - -# 3DS (3d Studio files) Conflicts with diff output 0x3d '=' -#16 beshort 0x3d3d image/x-3ds - -# this first will upset you if you're a PL/1 shop... -# in which case rm it; ascmagic will catch real C programs -#0 search/1 /* C or REXX program text -#0 search/1 // C++ program text - -# From: Mikhail Teterin -0 string cscope cscope reference data ->7 string x version %.2s -# We skip the path here, because it is often long (so file will -# truncate it) and mostly redundant. -# The inverted index functionality was added some time betwen -# versions 11 and 15, so look for -q if version is above 14: ->7 string >14 ->>10 search/100 \ -q\ with inverted index ->10 search/100 \ -c\ text (non-compressed) -#------------------------------------------------------------------------------ -# c64: file(1) magic for various commodore 64 related files -# -# From: Dirk Jagdmann - -0x16500 belong 0x12014100 D64 Image -0x16500 belong 0x12014180 D71 Image -0x61800 belong 0x28034400 D81 Image -0 string C64\40CARTRIDGE CCS C64 Emultar Cartridge Image -0 belong 0x43154164 X64 Image - -0 string GCR-1541 GCR Image ->8 byte x version: %i ->9 byte x tracks: %i - -9 string PSUR ARC archive (c64) -2 string -LH1- LHA archive (c64) - -0 string C64File PC64 Emulator file ->8 string >\0 "%s" -0 string C64Image PC64 Freezer Image - -0 beshort 0x38CD C64 PCLink Image -0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot - -0 belong 0xFF424CFF WRAptor packer (c64) - -0 string C64S\x20tape\x20file T64 tape Image ->32 leshort x Version:0x%x ->36 leshort !0 Entries:%i ->40 string x Name:%.24s - -0 string C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image ->32 leshort x Version:0x%x ->36 leshort !0 Entries:%i ->40 string x Name:%.24s - -0 string C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 T64 tape Image ->32 leshort x Version:0x%x ->36 leshort !0 Entries:%i ->40 string x Name:%.24s - -#------------------------------------------------------------------------------ -# autocad: file(1) magic for cad files -# - -# AutoCAD DWG versions R13/R14 (www.autodesk.com) -# Written December 01, 2003 by Lester Hightower -# Based on the DWG File Format Specifications at http://www.opendwg.org/ -0 string \101\103\061\060\061 AutoCAD ->5 string \062\000\000\000\000 DWG ver. R13 ->5 string \064\000\000\000\000 DWG ver. R14 - -# Microstation DGN/CIT Files (www.bentley.com) -# Last updated July 29, 2005 by Lester Hightower -# DGN is the default file extension of Microstation/Intergraph CAD files. -# CIT is the proprietary raster format (similar to TIFF) used to attach -# raster underlays to Microstation DGN (vector) drawings. -# -# http://www.wotsit.org/search.asp -# http://filext.com/detaillist.php?extdetail=DGN -# http://filext.com/detaillist.php?extdetail=CIT -# -# http://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2 -# 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928 -# http://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682 -# 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F -0 string \010\011\376 Microstation ->3 string \002 ->>30 string \026\105 DGNFile ->>30 string \034\105 DGNFile ->>30 string \073\107 DGNFile ->>30 string \073\110 DGNFile ->>30 string \106\107 DGNFile ->>30 string \110\103 DGNFile ->>30 string \120\104 DGNFile ->>30 string \172\104 DGNFile ->>30 string \172\105 DGNFile ->>30 string \172\106 DGNFile ->>30 string \234\106 DGNFile ->>30 string \273\105 DGNFile ->>30 string \306\106 DGNFile ->>30 string \310\104 DGNFile ->>30 string \341\104 DGNFile ->>30 string \372\103 DGNFile ->>30 string \372\104 DGNFile ->>30 string \372\106 DGNFile ->>30 string \376\103 DGNFile ->4 string \030\000\000 CITFile ->4 string \030\000\003 CITFile - -# AutoCad, from Nahuel Greco -# AutoCAD DWG versions R12/R13/R14 (www.autodesk.com) -0 string AC1012 AutoCad (release 12) -0 string AC1013 AutoCad (release 13) -0 string AC1014 AutoCad (release 14) - -# CAD: file(1) magic for computer aided design files -# Phillip Griffith -# AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications. -# -0 belong 0x08051700 Bentley/Intergraph MicroStation DGN cell library -0 belong 0x0809fe02 Bentley/Intergraph MicroStation DGN vector CAD -0 belong 0xc809fe02 Bentley/Intergraph MicroStation DGN vector CAD -0 beshort 0x0809 Bentley/Intergraph MicroStation ->0x02 byte 0xfe ->>0x04 beshort 0x1800 CIT raster CAD -0 string AC1012 AutoDesk AutoCAD R13 -0 string AC1014 AutoDesk AutoCAD R14 -0 string AC1015 AutoDesk AutoCAD R2000 -#------------------------------------------------------------------------------ -# Cafe Babes unite! -# -# Since Java bytecode and Mach-O fat-files have the same magic number, the test -# must be performed in the same "magic" sequence to get both right. The long -# at offset 4 in a mach-O fat file tells the number of architectures; the short at -# offset 4 in a Java bytecode file is the JVM minor version and the -# short at offset 6 is the JVM major version. Since there are only -# only 18 labeled Mach-O architectures at current, and the first released -# Java class format was version 43.0, we can safely choose any number -# between 18 and 39 to test the number of architectures against -# (and use as a hack). Let's not use 18, because the Mach-O people -# might add another one or two as time goes by... -# -0 belong 0xcafebabe -!:mime application/x-java-applet ->4 belong >30 compiled Java class data, ->>6 beshort x version %d. ->>4 beshort x \b%d -# Which is which? -#>>4 belong 0x032d (Java 1.0) -#>>4 belong 0x032d (Java 1.1) ->>4 belong 0x002e (Java 1.2) ->>4 belong 0x002f (Java 1.3) ->>4 belong 0x0030 (Java 1.4) ->>4 belong 0x0031 (Java 1.5) ->>4 belong 0x0032 (Java 1.6) - - -0 belong 0xcafebabe ->4 belong 1 Mach-O fat file with 1 architecture ->4 belong >1 ->>4 belong <20 Mach-O fat file with %ld architectures - -0 belong 0xcafed00d JAR compressed with pack200, ->>5 byte x version %d. ->>4 byte x \b%d -!:mime application/x-java-pack200 -#------------------------------------------------------------------------------ -# CDDB: file(1) magic for CDDB(tm) format CD text data files -# -# From -# -# This is the /etc/magic entry to decode datafiles as used by -# CDDB-enabled CD player applications. -# - -0 search/1/b #\040xmcd CDDB(tm) format CD text data - -#------------------------------------------------------------------------------ -# chord: file(1) magic for Chord music sheet typesetting utility input files -# -# From Philippe De Muyter -# File format is actually free, but many distributed files begin with `{title' -# -0 string {title Chord text file - -# Type: PowerTab file format -# URL: http://www.power-tab.net/ -# From: Jelmer Vernooij -0 string ptab\003\000 Power-Tab v3 Tablature File -0 string ptab\004\000 Power-Tab v4 Tablature File -#------------------------------------------------------------------------------ -# cisco: file(1) magic for cisco Systems routers -# -# Most cisco file-formats are covered by the generic elf code -# -# Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha. -0 belong&0xffffff00 0x85011400 cisco IOS microcode ->7 string >\0 for '%s' -0 belong&0xffffff00 0x8501cb00 cisco IOS experimental microcode ->7 string >\0 for '%s' -#------------------------------------------------------------------------------ -# citrus locale declaration -# - -0 string RuneCT Citrus locale declaration for LC_CTYPE - - -#------------------------------------------------------------------------------ -# clarion: file(1) magic for # Clarion Personal/Professional Developer -# (v2 and above) -# From: Julien Blache - -# Database files -# signature -0 leshort 0x3343 Clarion Developer (v2 and above) data file -# attributes ->2 leshort &0x0001 \b, locked ->2 leshort &0x0004 \b, encrypted ->2 leshort &0x0008 \b, memo file exists ->2 leshort &0x0010 \b, compressed ->2 leshort &0x0040 \b, read only -# number of records ->5 lelong x \b, %ld records - -# Memo files -0 leshort 0x334d Clarion Developer (v2 and above) memo data - -# Key/Index files -# No magic? :( - -# Help files -0 leshort 0x49e0 Clarion Developer (v2 and above) help data - -#------------------------------------------------------------------------------ -# claris: file(1) magic for claris -# "H. Nanosecond" -# Claris Works a word processor, etc. -# Version 3.0 - -# .pct claris works clip art files -#0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 -#* -#0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000 -#null to byte 1000 octal -514 string \377\377\377\377\000 Claris clip art? ->0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes. -514 string \377\377\377\377\001 Claris clip art? ->0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 yes. - -# Claris works files -# .cwk -0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document -# .plt -0 string \020\341\000\000\010\010 Claris Works pallete files .plt - -# .msp a dictionary file I am not sure about this I have only one .msp file -0 string \002\271\262\000\040\002\000\164 Claris works dictionary - -# .usp are user dictionary bits -# I am not sure about a magic header: -#0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151 -# soh S p f 8 U D sp ^ S cr nl p o d i -#0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043 -# a t r i s t sp ^ S cr nl d i v sp # - -# .mth Thesaurus -# starts with \0 but no magic header - -# .chy Hyphenation file -# I am not sure: 000 210 034 000 000 - -# other claris files -#./windows/claris/useng.ndx: data -#./windows/claris/xtndtran.l32: data -#./windows/claris/xtndtran.lst: data -#./windows/claris/clworks.lbl: data -#./windows/claris/clworks.prf: data -#./windows/claris/userd.spl: data - -#------------------------------------------------------------------------------ -# clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper. -# -# XXX - what byte order does the Clipper use? -# -# XXX - what's the "!" stuff: -# -# >18 short !074000,000000 C1 R1 -# >18 short !074000,004000 C2 R1 -# >18 short !074000,010000 C3 R1 -# >18 short !074000,074000 TEST -# -# I shall assume it's ANDing the field with the first value and -# comparing it with the second, and rewrite it as: -# -# >18 short&074000 000000 C1 R1 -# >18 short&074000 004000 C2 R1 -# >18 short&074000 010000 C3 R1 -# >18 short&074000 074000 TEST -# -# as SVR3.1's "file" doesn't support anything of the "!074000,000000" -# sort, nor does SunOS 4.x, so either it's something Intergraph added -# in CLIX, or something AT&T added in SVR3.2 or later, or something -# somebody else thought was a good idea; it's not documented in the -# man page for this version of "magic", nor does it appear to be -# implemented (at least not after I blew off the bogus code to turn -# old-style "&"s into new-style "&"s, which just didn't work at all). -# -0 short 0575 CLIPPER COFF executable (VAX #) ->20 short 0407 (impure) ->20 short 0410 (5.2 compatible) ->20 short 0411 (pure) ->20 short 0413 (demand paged) ->20 short 0443 (target shared library) ->12 long >0 not stripped ->22 short >0 - version %ld -0 short 0577 CLIPPER COFF executable ->18 short&074000 000000 C1 R1 ->18 short&074000 004000 C2 R1 ->18 short&074000 010000 C3 R1 ->18 short&074000 074000 TEST ->20 short 0407 (impure) ->20 short 0410 (pure) ->20 short 0411 (separate I&D) ->20 short 0413 (paged) ->20 short 0443 (target shared library) ->12 long >0 not stripped ->22 short >0 - version %ld ->48 long&01 01 alignment trap enabled ->52 byte 1 -Ctnc ->52 byte 2 -Ctsw ->52 byte 3 -Ctpw ->52 byte 4 -Ctcb ->53 byte 1 -Cdnc ->53 byte 2 -Cdsw ->53 byte 3 -Cdpw ->53 byte 4 -Cdcb ->54 byte 1 -Csnc ->54 byte 2 -Cssw ->54 byte 3 -Cspw ->54 byte 4 -Cscb -4 string pipe CLIPPER instruction trace -4 string prof CLIPPER instruction profile - -#------------------------------------------------------------------------------ -# commands: file(1) magic for various shells and interpreters -# -#0 string : shell archive or script for antique kernel text -0 string/b #!\ /bin/sh POSIX shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /bin/csh C shell script text executable -!:mime text/x-shellscript -# korn shell magic, sent by George Wu, gwu@clyde.att.com -0 string/b #!\ /bin/ksh Korn shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /bin/tcsh Tenex C shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/bin/tcsh Tenex C shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/tcsh Tenex C shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/tcsh Tenex C shell script text executable -!:mime text/x-shellscript - -# -# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson) -0 string/b #!\ /bin/zsh Paul Falstad's zsh script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/bin/zsh Paul Falstad's zsh script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/ash Neil Brown's ash script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/ae Neil Brown's ae script text executable -!:mime text/x-shellscript -0 string/b #!\ /bin/nawk new awk script text executable -!:mime text/x-nawk -0 string/b #!\ /usr/bin/nawk new awk script text executable -!:mime text/x-nawk -0 string/b #!\ /usr/local/bin/nawk new awk script text executable -!:mime text/x-nawk -0 string/b #!\ /bin/gawk GNU awk script text executable -!:mime text/x-gawk -0 string/b #!\ /usr/bin/gawk GNU awk script text executable -!:mime text/x-gawk -0 string/b #!\ /usr/local/bin/gawk GNU awk script text executable -!:mime text/x-gawk -# -0 string/b #!\ /bin/awk awk script text executable -!:mime text/x-awk -0 string/b #!\ /usr/bin/awk awk script text executable -!:mime text/x-awk -# update to distinguish from *.vcf files -# this is broken because postscript has /EBEGIN{ for example. -#0 search/Bb BEGIN { awk script text -0 regex =^\\s*BEGIN\\s*[{] awk script text - -# AT&T Bell Labs' Plan 9 shell -0 string/b #!\ /bin/rc Plan 9 rc shell script text executable - -# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de) -0 string/b #!\ /bin/bash Bourne-Again shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/bin/bash Bourne-Again shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bash Bourne-Again shell script text executable -!:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/bash Bourne-Again shell script text executable -!:mime text/x-shellscript - -# using env -0 string #!/usr/bin/env a ->15 string >\0 %s script text executable -0 string #!\ /usr/bin/env a ->16 string >\0 %s script text executable - -# PHP scripts -# Ulf Harnhammar -0 search/1/c = -0 string #!/usr/bin/pdmenu Pdmenu configuration file text - -#---------------------------------------------------------------------------- -# communication - -# TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3. -# It is used for conformance testing of communication protocols. -# Added by W. Borgert . -0 string $Suite TTCN Abstract Test Suite ->&1 string $SuiteId ->>&1 string >\n %s ->&2 string $SuiteId ->>&1 string >\n %s ->&3 string $SuiteId ->>&1 string >\n %s - -# MSC (message sequence charts) are a formal description technique, -# described in ITU-T Z.120, mainly used for communication protocols. -# Added by W. Borgert . -0 string mscdocument Message Sequence Chart (document) -0 string msc Message Sequence Chart (chart) -0 string submsc Message Sequence Chart (subchart) - -#------------------------------------------------------------------------------ -# compress: file(1) magic for pure-compression formats (no archives) -# -# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc. -# -# Formats for various forms of compressed data -# Formats for "compress" proper have been moved into "compress.c", -# because it tries to uncompress it to figure out what's inside. - -# standard unix compress -0 string \037\235 compress'd data -!:mime application/x-compress -!:apple LZIVZIVU ->2 byte&0x80 >0 block compressed ->2 byte&0x1f x %d bits - -# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver) -# Edited by Chris Chittleborough , March 2002 -# * Original filename is only at offset 10 if "extra field" absent -# * Produce shorter output - notably, only report compression methods -# other than 8 ("deflate", the only method defined in RFC 1952). -0 string \037\213 gzip compressed data -!:mime application/x-gzip ->2 byte <8 \b, reserved method ->2 byte >8 \b, unknown method ->3 byte &0x01 \b, ASCII ->3 byte &0x02 \b, has CRC ->3 byte &0x04 \b, extra field ->3 byte&0xC =0x08 ->>10 string x \b, was "%s" ->3 byte &0x10 \b, has comment ->9 byte =0x00 \b, from FAT filesystem (MS-DOS, OS/2, NT) ->9 byte =0x01 \b, from Amiga ->9 byte =0x02 \b, from VMS ->9 byte =0x03 \b, from Unix ->9 byte =0x04 \b, from VM/CMS ->9 byte =0x05 \b, from Atari ->9 byte =0x06 \b, from HPFS filesystem (OS/2, NT) ->9 byte =0x07 \b, from MacOS ->9 byte =0x08 \b, from Z-System ->9 byte =0x09 \b, from CP/M ->9 byte =0x0A \b, from TOPS/20 ->9 byte =0x0B \b, from NTFS filesystem (NT) ->9 byte =0x0C \b, from QDOS ->9 byte =0x0D \b, from Acorn RISCOS ->3 byte &0x10 \b, comment ->3 byte &0x20 \b, encrypted ->4 ledate >0 \b, last modified: %s ->8 byte 2 \b, max compression ->8 byte 4 \b, max speed - -# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis -0 string \037\036 packed data -!:mime application/octet-stream ->2 belong >1 \b, %d characters originally ->2 belong =1 \b, %d character originally -# -# This magic number is byte-order-independent. -0 short 0x1f1f old packed data -!:mime application/octet-stream - -# XXX - why *two* entries for "compacted data", one of which is -# byte-order independent, and one of which is byte-order dependent? -# -0 short 0x1fff compacted data -!:mime application/octet-stream -# This string is valid for SunOS (BE) and a matching "short" is listed -# in the Ultrix (LE) magic file. -0 string \377\037 compacted data -!:mime application/octet-stream -0 short 0145405 huf output -!:mime application/octet-stream - -# bzip2 -0 string BZh bzip2 compressed data -!:mime application/x-bzip2 ->3 byte >47 \b, block size = %c00k - -# lzip -0 string LZIP lzip compressed data -!:mime application/x-lzip ->4 byte x \b, version: %d - -# squeeze and crunch -# Michael Haardt -0 beshort 0x76FF squeezed data, ->4 string x original name %s -0 beshort 0x76FE crunched data, ->2 string x original name %s -0 beshort 0x76FD LZH compressed data, ->2 string x original name %s - -# Freeze -0 string \037\237 frozen file 2.1 -0 string \037\236 frozen file 1.0 (or gzip 0.5) - -# SCO compress -H (LZH) -0 string \037\240 SCO compress -H (LZH) data - -# European GSM 06.10 is a provisional standard for full-rate speech -# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse -# excitation/long term prediction) coding at 13 kbit/s. -# -# There's only a magic nibble (4 bits); that nibble repeats every 33 -# bytes. This isn't suited for use, but maybe we can use it someday. -# -# This will cause very short GSM files to be declared as data and -# mismatches to be declared as data too! -#0 byte&0xF0 0xd0 data -#>33 byte&0xF0 0xd0 -#>66 byte&0xF0 0xd0 -#>99 byte&0xF0 0xd0 -#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio - -# bzip a block-sorting file compressor -# by Julian Seward and others -# -#0 string BZ bzip compressed data -#>2 byte x \b, version: %c -#>3 string =1 \b, compression block size 100k -#>3 string =2 \b, compression block size 200k -#>3 string =3 \b, compression block size 300k -#>3 string =4 \b, compression block size 400k -#>3 string =5 \b, compression block size 500k -#>3 string =6 \b, compression block size 600k -#>3 string =7 \b, compression block size 700k -#>3 string =8 \b, compression block size 800k -#>3 string =9 \b, compression block size 900k - -# lzop from -0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data ->9 beshort <0x0940 ->>9 byte&0xf0 =0x00 - version 0. ->>9 beshort&0x0fff x \b%03x, ->>13 byte 1 LZO1X-1, ->>13 byte 2 LZO1X-1(15), ->>13 byte 3 LZO1X-999, -## >>22 bedate >0 last modified: %s, ->>14 byte =0x00 os: MS-DOS ->>14 byte =0x01 os: Amiga ->>14 byte =0x02 os: VMS ->>14 byte =0x03 os: Unix ->>14 byte =0x05 os: Atari ->>14 byte =0x06 os: OS/2 ->>14 byte =0x07 os: MacOS ->>14 byte =0x0A os: Tops/20 ->>14 byte =0x0B os: WinNT ->>14 byte =0x0E os: Win32 ->9 beshort >0x0939 ->>9 byte&0xf0 =0x00 - version 0. ->>9 byte&0xf0 =0x10 - version 1. ->>9 byte&0xf0 =0x20 - version 2. ->>9 beshort&0x0fff x \b%03x, ->>15 byte 1 LZO1X-1, ->>15 byte 2 LZO1X-1(15), ->>15 byte 3 LZO1X-999, -## >>25 bedate >0 last modified: %s, ->>17 byte =0x00 os: MS-DOS ->>17 byte =0x01 os: Amiga ->>17 byte =0x02 os: VMS ->>17 byte =0x03 os: Unix ->>17 byte =0x05 os: Atari ->>17 byte =0x06 os: OS/2 ->>17 byte =0x07 os: MacOS ->>17 byte =0x0A os: Tops/20 ->>17 byte =0x0B os: WinNT ->>17 byte =0x0E os: Win32 - -# 4.3BSD-Quasijarus Strong Compression -# http://minnie.tuhs.org/Quasijarus/compress.html -0 string \037\241 Quasijarus strong compressed data - -# From: Cory Dikkers -0 string XPKF Amiga xpkf.library compressed data -0 string PP11 Power Packer 1.1 compressed data -0 string PP20 Power Packer 2.0 compressed data, ->4 belong 0x09090909 fast compression ->4 belong 0x090A0A0A mediocre compression ->4 belong 0x090A0B0B good compression ->4 belong 0x090A0C0C very good compression ->4 belong 0x090A0C0D best compression - -# 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at) -# http://www.7-zip.org or DOC/7zFormat.txt -# -0 string 7z\274\257\047\034 7-zip archive data, ->6 byte x version %d ->7 byte x \b.%d - -# Type: LZMA -# URL: http://www.7-zip.org/sdk.html -# From: Robert Millan and Reuben Thomas -# Commented out because apparently not reliable (according to Debian -# bug #364260) -#0 string ]\000\000\200\000 LZMA compressed data - -# http://tukaani.org/xz/xz-file-format.txt -0 ustring \xFD7zXZ\x00 xz compressed data -!:mime application/x-xz - -# AFX compressed files (Wolfram Kleff) -2 string -afx- AFX compressed file data - -# Supplementary magic data for the file(1) command to support -# rzip(1). The format is described in magic(5). -# -# Copyright (C) 2003 by Andrew Tridgell. You may do whatever you want with -# this file. -# -0 string RZIP rzip compressed data ->4 byte x - version %d ->5 byte x \b.%d ->6 belong x (%d bytes) - -# Type: XZ -# URL: http://tukaani.org/xz/ -0 string \xfd\x37\x7a\x58\x5a\x00 XZ compressed data -!:mime application/x-xz -#------------------------------------------------------------------------------ -# Console game magic -# Toby Deshane -# ines: file(1) magic for Marat's iNES Nintendo Entertainment System -# ROM dump format - -0 string NES\032 iNES ROM dump, ->4 byte x %dx16k PRG ->5 byte x \b, %dx8k CHR ->6 byte&0x01 =0x1 \b, [Vert.] ->6 byte&0x01 =0x0 \b, [Horiz.] ->6 byte&0x02 =0x2 \b, [SRAM] ->6 byte&0x04 =0x4 \b, [Trainer] ->6 byte&0x04 =0x8 \b, [4-Scr] - -#------------------------------------------------------------------------------ -# gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format -# -0x104 belong 0xCEED6666 Gameboy ROM: ->0x134 string >\0 "%.16s" ->0x146 byte 0x03 \b,[SGB] ->0x147 byte 0x00 \b, [ROM ONLY] ->0x147 byte 0x01 \b, [ROM+MBC1] ->0x147 byte 0x02 \b, [ROM+MBC1+RAM] ->0x147 byte 0x03 \b, [ROM+MBC1+RAM+BATT] ->0x147 byte 0x05 \b, [ROM+MBC2] ->0x147 byte 0x06 \b, [ROM+MBC2+BATTERY] ->0x147 byte 0x08 \b, [ROM+RAM] ->0x147 byte 0x09 \b, [ROM+RAM+BATTERY] ->0x147 byte 0x0B \b, [ROM+MMM01] ->0x147 byte 0x0C \b, [ROM+MMM01+SRAM] ->0x147 byte 0x0D \b, [ROM+MMM01+SRAM+BATT] ->0x147 byte 0x0F \b, [ROM+MBC3+TIMER+BATT] ->0x147 byte 0x10 \b, [ROM+MBC3+TIMER+RAM+BATT] ->0x147 byte 0x11 \b, [ROM+MBC3] ->0x147 byte 0x12 \b, [ROM+MBC3+RAM] ->0x147 byte 0x13 \b, [ROM+MBC3+RAM+BATT] ->0x147 byte 0x19 \b, [ROM+MBC5] ->0x147 byte 0x1A \b, [ROM+MBC5+RAM] ->0x147 byte 0x1B \b, [ROM+MBC5+RAM+BATT] ->0x147 byte 0x1C \b, [ROM+MBC5+RUMBLE] ->0x147 byte 0x1D \b, [ROM+MBC5+RUMBLE+SRAM] ->0x147 byte 0x1E \b, [ROM+MBC5+RUMBLE+SRAM+BATT] ->0x147 byte 0x1F \b, [Pocket Camera] ->0x147 byte 0xFD \b, [Bandai TAMA5] ->0x147 byte 0xFE \b, [Hudson HuC-3] ->0x147 byte 0xFF \b, [Hudson HuC-1] - ->0x148 byte 0 \b, ROM: 256Kbit ->0x148 byte 1 \b, ROM: 512Kbit ->0x148 byte 2 \b, ROM: 1Mbit ->0x148 byte 3 \b, ROM: 2Mbit ->0x148 byte 4 \b, ROM: 4Mbit ->0x148 byte 5 \b, ROM: 8Mbit ->0x148 byte 6 \b, ROM: 16Mbit ->0x148 byte 0x52 \b, ROM: 9Mbit ->0x148 byte 0x53 \b, ROM: 10Mbit ->0x148 byte 0x54 \b, ROM: 12Mbit - ->0x149 byte 1 \b, RAM: 16Kbit ->0x149 byte 2 \b, RAM: 64Kbit ->0x149 byte 3 \b, RAM: 128Kbit ->0x149 byte 4 \b, RAM: 1Mbit - -#>0x14e long x \b, CRC: %x - -#------------------------------------------------------------------------------ -# genesis: file(1) magic for the Sega MegaDrive/Genesis raw ROM format -# -0x100 string SEGA Sega MegaDrive/Genesis raw ROM dump ->0x120 string >\0 Name: "%.16s" ->0x110 string >\0 %.16s ->0x1B0 string RA with SRAM - -#------------------------------------------------------------------------------ -# genesis: file(1) magic for the Super MegaDrive ROM dump format -# -0x280 string EAGN Super MagicDrive ROM dump ->0 byte x %dx16k blocks ->2 byte 0 \b, last in series or standalone ->2 byte >0 \b, split ROM ->8 byte 0xAA ->9 byte 0xBB - -#------------------------------------------------------------------------------ -# genesis: file(1) alternate magic for the Super MegaDrive ROM dump format -# -0x280 string EAMG Super MagicDrive ROM dump ->0 byte x %dx16k blocks ->2 byte x \b, last in series or standalone ->8 byte 0xAA ->9 byte 0xBB - -#------------------------------------------------------------------------------ -# smsgg: file(1) magic for Sega Master System and Game Gear ROM dumps -# -# Does not detect all images. Very preliminary guesswork. Need more data -# on format. -# -# FIXME: need a little more info...;P -# -#0 byte 0xF3 -#>1 byte 0xED Sega Master System/Game Gear ROM dump -#>1 byte 0x31 Sega Master System/Game Gear ROM dump -#>1 byte 0xDB Sega Master System/Game Gear ROM dump -#>1 byte 0xAF Sega Master System/Game Gear ROM dump -#>1 byte 0xC3 Sega Master System/Game Gear ROM dump - -#------------------------------------------------------------------------------ -# dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format -# -0 belong 0x21068028 Sega Dreamcast VMU game image -0 string LCDi Dream Animator file - -#------------------------------------------------------------------------------ -# v64: file(1) uncertain magic for the V64 format N64 ROM dumps -# -0 belong 0x37804012 V64 Nintendo 64 ROM dump - -# From: "Nelson A. de Oliveira" -# Nintendo .nds -192 string \044\377\256Qi\232 Nintendo DS Game ROM Image -# Nintendo .gba -0 string \056\000\000\352$\377\256Qi Nintendo Game Boy Advance ROM Image - -#------------------------------------------------------------------------------ -# msx: file(1) magic for MSX game cartridge dumps -# Too simple - MPi -#0 beshort 0x4142 MSX game cartridge dump - -#------------------------------------------------------------------------------ -# Sony Playstation executables (Adam Sjoegren ) : -0 string PS-X\ EXE Sony Playstation executable -# Area: ->113 string x (%s) - -#------------------------------------------------------------------------------ -# Microsoft Xbox executables .xbe (Esa Hyytiä ) -0 string XBEH XBE, Microsoft Xbox executable -# probabilistic checks whether signed or not ->0x0004 ulelong =0x0 ->>&2 ulelong =0x0 ->>>&2 ulelong =0x0 \b, not signed ->0x0004 ulelong >0 ->>&2 ulelong >0 ->>>&2 ulelong >0 \b, signed -# expect base address of 0x10000 ->0x0104 ulelong =0x10000 ->>(0x0118-0x0FF60) ulelong&0x80000007 0x80000007 \b, all regions ->>(0x0118-0x0FF60) ulelong&0x80000007 !0x80000007 ->>>(0x0118-0x0FF60) ulelong >0 (regions: ->>>>(0x0118-0x0FF60) ulelong &0x00000001 NA ->>>>(0x0118-0x0FF60) ulelong &0x00000002 Japan ->>>>(0x0118-0x0FF60) ulelong &0x00000004 Rest_of_World ->>>>(0x0118-0x0FF60) ulelong &0x80000000 Manufacturer ->>>(0x0118-0x0FF60) ulelong >0 \b) - -# -------------------------------- -# Microsoft Xbox data file formats -0 string XIP0 XIP, Microsoft Xbox data -0 string XTF0 XTF, Microsoft Xbox data - -# Atari Lynx cartridge dump (EXE/BLL header) -# From: "Stefan A. Haubenthal" - -0 beshort 0x8008 Lynx cartridge, ->2 beshort x RAM start $%04x ->6 string BS93 - -# Opera file system that is used on the 3DO console -# From: Serge van den Boom -0 string \x01ZZZZZ\x01 3DO "Opera" file system - -# From Gürkan Sengün , www.linuks.mine.nu -0 string GBS Nintendo Gameboy Music/Audio Data -12 string GameBoy\ Music\ Module Nintendo Gameboy Music Module - -# Playstations Patch Files from: From: Thomas Klausner -0 string PPF30 Playstation Patch File version 3.0 ->5 byte 0 \b, PPF 1.0 patch ->5 byte 1 \b, PPF 2.0 patch ->5 byte 2 \b, PPF 3.0 patch ->>56 byte 0 \b, Imagetype BIN (any) ->>56 byte 1 \b, Imagetype GI (PrimoDVD) ->>57 byte 0 \b, Blockcheck disabled ->>57 byte 1 \b, Blockcheck enabled ->>58 byte 0 \b, Undo data not available ->>58 byte 1 \b, Undo data available ->6 string x \b, description: %s - -0 string PPF20 Playstation Patch File version 2.0 ->5 byte 0 \b, PPF 1.0 patch ->5 byte 1 \b, PPF 2.0 patch ->>56 lelong >0 \b, size of file to patch %d ->6 string x \b, description: %s - -0 string PPF10 Playstation Patch File version 1.0 ->5 byte 0 \b, Simple Encoding ->6 string x \b, description: %s - -# From: Daniel Dawson -# SNES9x .smv "movie" file format. -0 string SMV\x1A SNES9x input recording ->0x4 lelong x \b, version %d -# version 4 is latest so far ->0x4 lelong <5 ->>0x8 ledate x \b, recorded at %s ->>0xc lelong >0 \b, rerecorded %d times ->>0x10 lelong x \b, %d frames long ->>0x14 byte >0 \b, data for controller(s): ->>>0x14 byte &0x1 #1 ->>>0x14 byte &0x2 #2 ->>>0x14 byte &0x4 #3 ->>>0x14 byte &0x8 #4 ->>>0x14 byte &0x10 #5 ->>0x15 byte ^0x1 \b, begins from snapshot ->>0x15 byte &0x1 \b, begins from reset ->>0x15 byte ^0x2 \b, NTSC standard ->>0x15 byte &0x2 \b, PAL standard ->>0x17 byte &0x1 \b, settings: -# WIP1Timing not used as of version 4 ->>>0x4 lelong <4 ->>>>0x17 byte &0x2 WIP1Timing ->>>0x17 byte &0x4 Left+Right ->>>0x17 byte &0x8 VolumeEnvX ->>>0x17 byte &0x10 FakeMute ->>>0x17 byte &0x20 SyncSound -# New flag as of version 4 ->>>0x4 lelong >3 ->>>>0x17 byte &0x80 NoCPUShutdown ->>0x4 lelong <4 ->>>0x18 lelong >0x23 ->>>>0x20 leshort !0 ->>>>>0x20 lestring16 x \b, metadata: "%s" ->>0x4 lelong >3 ->>>0x24 byte >0 \b, port 1: ->>>>0x24 byte 1 joypad ->>>>0x24 byte 2 mouse ->>>>0x24 byte 3 SuperScope ->>>>0x24 byte 4 Justifier ->>>>0x24 byte 5 multitap ->>>0x24 byte >0 \b, port 2: ->>>>0x25 byte 1 joypad ->>>>0x25 byte 2 mouse ->>>>0x25 byte 3 SuperScope ->>>>0x25 byte 4 Justifier ->>>>0x25 byte 5 multitap ->>>0x18 lelong >0x43 ->>>>0x40 leshort !0 ->>>>>0x40 lestring16 x \b, metadata: "%s" ->>0x17 byte &0x40 \b, ROM: ->>>(0x18.l-26) lelong x CRC32 0x%08x ->>>(0x18.l-23) string x "%s" - -# Type: scummVM savegame files -# From: Sven Hartge -0 string SCVM ScummVM savegame ->12 string >\0 "%s" -#------------------------------------------------------------------------------ -# convex: file(1) magic for Convex boxes -# -# Convexes are big-endian. -# -# /*\ -# * Below are the magic numbers and tests added for Convex. -# * Added at beginning, because they are expected to be used most. -# \*/ -0 belong 0507 Convex old-style object ->16 belong >0 not stripped -0 belong 0513 Convex old-style demand paged executable ->16 belong >0 not stripped -0 belong 0515 Convex old-style pre-paged executable ->16 belong >0 not stripped -0 belong 0517 Convex old-style pre-paged, non-swapped executable ->16 belong >0 not stripped -0 belong 0x011257 Core file -# -# The following are a series of dump format magic numbers. Each one -# corresponds to a drastically different dump format. The first on is -# the original dump format on a 4.1 BSD or earlier file system. The -# second marks the change between the 4.1 file system and the 4.2 file -# system. The Third marks the changing of the block size from 1K -# to 2K to be compatible with an IDC file system. The fourth indicates -# a dump that is dependent on Convex Storage Manager, because data in -# secondary storage is not physically contained within the dump. -# The restore program uses these number to determine how the data is -# to be extracted. -# -24 belong =60011 dump format, 4.1 BSD or earlier -24 belong =60012 dump format, 4.2 or 4.3 BSD without IDC -24 belong =60013 dump format, 4.2 or 4.3 BSD (IDC compatible) -24 belong =60014 dump format, Convex Storage Manager by-reference dump -# -# what follows is a bunch of bit-mask checks on the flags field of the opthdr. -# If there is no `=' sign, assume just checking for whether the bit is set? -# -0 belong 0601 Convex SOFF ->88 belong&0x000f0000 =0x00000000 c1 ->88 belong &0x00010000 c2 ->88 belong &0x00020000 c2mp ->88 belong &0x00040000 parallel ->88 belong &0x00080000 intrinsic ->88 belong &0x00000001 demand paged ->88 belong &0x00000002 pre-paged ->88 belong &0x00000004 non-swapped ->88 belong &0x00000008 POSIX -# ->84 belong &0x80000000 executable ->84 belong &0x40000000 object ->84 belong&0x20000000 =0 not stripped ->84 belong&0x18000000 =0x00000000 native fpmode ->84 belong&0x18000000 =0x10000000 ieee fpmode ->84 belong&0x18000000 =0x18000000 undefined fpmode -# -0 belong 0605 Convex SOFF core -# -0 belong 0607 Convex SOFF checkpoint ->88 belong&0x000f0000 =0x00000000 c1 ->88 belong &0x00010000 c2 ->88 belong &0x00020000 c2mp ->88 belong &0x00040000 parallel ->88 belong &0x00080000 intrinsic ->88 belong &0x00000008 POSIX -# ->84 belong&0x18000000 =0x00000000 native fpmode ->84 belong&0x18000000 =0x10000000 ieee fpmode ->84 belong&0x18000000 =0x18000000 undefined fpmode - -#------------------------------------------------------------------------------ -# cracklib: file (1) magic for cracklib v2.7 - -0 lelong 0x70775631 Cracklib password index, little endian ->4 long >0 (%i words) ->4 long 0 ("64-bit") ->>8 long >-1 (%i words) -0 belong 0x70775631 Cracklib password index, big endian ->4 belong >-1 (%i words) -# really bellong 0x0000000070775631 -0 search/1 \0\0\0\0pwV1 Cracklib password index, big endian ("64-bit") ->12 belong >0 (%i words) -# ---------------------------------------------------------------------------- -# ctags: file (1) magic for Exuberant Ctags files -# From: Alexander Mai -0 search/1 =!_TAG Exuberant Ctags tag file text - -#------------------------------------------------------------------------------ -# dact: file(1) magic for DACT compressed files -# -0 long 0x444354C3 DACT compressed data ->4 byte >-1 (version %i. ->5 byte >-1 $BS%i. ->6 byte >-1 $BS%i) ->7 long >0 $BS, original size: %i bytes ->15 long >30 $BS, block size: %i bytes - -#------------------------------------------------------------------------------ -# database: file(1) magic for various databases -# -# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk) -# -# -# GDBM magic numbers -# Will be maintained as part of the GDBM distribution in the future. -# -0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian -!:mime application/x-gdbm -0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian -!:mime application/x-gdbm -0 string GDBM GNU dbm 2.x database -!:mime application/x-gdbm -# -# Berkeley DB -# -# Ian Darwin's file /etc/magic files: big/little-endian version. -# -# Hash 1.85/1.86 databases store metadata in network byte order. -# Btree 1.85/1.86 databases store the metadata in host byte order. -# Hash and Btree 2.X and later databases store the metadata in host byte order. - -0 long 0x00061561 Berkeley DB -!:mime application/x-dbm ->8 belong 4321 ->>4 belong >2 1.86 ->>4 belong <3 1.85 ->>4 belong >0 (Hash, version %d, native byte-order) ->8 belong 1234 ->>4 belong >2 1.86 ->>4 belong <3 1.85 ->>4 belong >0 (Hash, version %d, little-endian) - -0 belong 0x00061561 Berkeley DB ->8 belong 4321 ->>4 belong >2 1.86 ->>4 belong <3 1.85 ->>4 belong >0 (Hash, version %d, big-endian) ->8 belong 1234 ->>4 belong >2 1.86 ->>4 belong <3 1.85 ->>4 belong >0 (Hash, version %d, native byte-order) - -0 long 0x00053162 Berkeley DB 1.85/1.86 ->4 long >0 (Btree, version %d, native byte-order) -0 belong 0x00053162 Berkeley DB 1.85/1.86 ->4 belong >0 (Btree, version %d, big-endian) -0 lelong 0x00053162 Berkeley DB 1.85/1.86 ->4 lelong >0 (Btree, version %d, little-endian) - -12 long 0x00061561 Berkeley DB ->16 long >0 (Hash, version %d, native byte-order) -12 belong 0x00061561 Berkeley DB ->16 belong >0 (Hash, version %d, big-endian) -12 lelong 0x00061561 Berkeley DB ->16 lelong >0 (Hash, version %d, little-endian) - -12 long 0x00053162 Berkeley DB ->16 long >0 (Btree, version %d, native byte-order) -12 belong 0x00053162 Berkeley DB ->16 belong >0 (Btree, version %d, big-endian) -12 lelong 0x00053162 Berkeley DB ->16 lelong >0 (Btree, version %d, little-endian) - -12 long 0x00042253 Berkeley DB ->16 long >0 (Queue, version %d, native byte-order) -12 belong 0x00042253 Berkeley DB ->16 belong >0 (Queue, version %d, big-endian) -12 lelong 0x00042253 Berkeley DB ->16 lelong >0 (Queue, version %d, little-endian) - -# From Max Bowsher. -12 long 0x00040988 Berkeley DB ->16 long >0 (Log, version %d, native byte-order) -12 belong 0x00040988 Berkeley DB ->16 belong >0 (Log, version %d, big-endian) -12 lelong 0x00040988 Berkeley DB ->16 lelong >0 (Log, version %d, little-endian) - -# -# -# Round Robin Database Tool by Tobias Oetiker -0 string RRD RRDTool DB ->4 string x version %s -#---------------------------------------------------------------------- -# ROOT: file(1) magic for ROOT databases -# -0 string root\0 ROOT file ->4 belong x Version %d ->33 belong x (Compression: %d) - -# XXX: Weak magic. -# Alex Ott -## Paradox file formats -#2 leshort 0x0800 Paradox -#>0x39 byte 3 v. 3.0 -#>0x39 byte 4 v. 3.5 -#>0x39 byte 9 v. 4.x -#>0x39 byte 10 v. 5.x -#>0x39 byte 11 v. 5.x -#>0x39 byte 12 v. 7.x -#>>0x04 byte 0 indexed .DB data file -#>>0x04 byte 1 primary index .PX file -#>>0x04 byte 2 non-indexed .DB data file -#>>0x04 byte 3 non-incrementing secondary index .Xnn file -#>>0x04 byte 4 secondary index .Ynn file -#>>0x04 byte 5 incrementing secondary index .Xnn file -#>>0x04 byte 6 non-incrementing secondary index .XGn file -#>>0x04 byte 7 secondary index .YGn file -#>>>0x04 byte 8 incrementing secondary index .XGn file - -## XBase database files -#0 byte 0x02 -#>8 leshort >0 -#>>12 leshort 0 FoxBase -#!:mime application/x-dbf -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x03 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 FoxBase+, FoxPro, dBaseIII+, dBaseIV, no memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x04 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 dBASE IV no memo file -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x05 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 dBASE V no memo file -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x30 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 Visual FoxPro -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x43 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 FlagShip with memo var size -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x7b -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 dBASEIV with memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x83 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 FoxBase+, dBaseIII+ with memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x8b -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 dBaseIV with memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0x8e -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 dBaseIV with SQL Table -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0xb3 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 FlagShip with .dbt memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 byte 0xf5 -#!:mime application/x-dbf -#>8 leshort >0 -#>>12 leshort 0 FoxPro with memo -#>>>0x04 lelong 0 (no records) -#>>>0x04 lelong >0 (%ld records) -# -#0 leshort 0x0006 DBase 3 index file - -# MS Access database -4 string Standard\ Jet\ DB Microsoft Access Database -!:mime application/x-msaccess - -# TDB database from Samba et al - Martin Pool -0 string TDB\ file TDB database ->32 lelong 0x2601196D version 6, little-endian ->>36 lelong x hash size %d bytes - -# SE Linux policy database -0 lelong 0xf97cff8c SE Linux policy ->16 lelong x v%d ->20 lelong 1 MLS ->24 lelong x %d symbols ->28 lelong x %d ocons - -# ICE authority file data (Wolfram Kleff) -2 string ICE ICE authority data - -# X11 Xauthority file (Wolfram Kleff) -10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data -18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data - -# From: Maxime Henrion -# PostgreSQL's custom dump format, Maxime Henrion -0 string PGDMP PostgreSQL custom database dump ->5 byte x - v%d ->6 byte x \b.%d ->5 beshort <0x101 \b-0 ->5 beshort >0x100 ->>7 byte x \b-%d - -# Type: Advanced Data Format (ADF) database -# URL: http://www.grc.nasa.gov/WWW/cgns/adf/ -# From: Nicolas Chauvat -0 string @(#)ADF\ Database CGNS Advanced Data Format - -# Tokyo Cabinet magic data -# http://tokyocabinet.sourceforge.net/index.html -0 string ToKyO\ CaBiNeT\n Tokyo Cabinet ->14 string x \b (%s) ->32 byte 0 \b, Hash -!:mime application/x-tokyocabinet-hash ->32 byte 1 \b, B+ tree -!:mime application/x-tokyocabinet-btree ->32 byte 2 \b, Fixed-length -!:mime application/x-tokyocabinet-fixed ->32 byte 3 \b, Table -!:mime application/x-tokyocabinet-table ->33 byte &1 \b, [open] ->33 byte &2 \b, [fatal] ->34 byte x \b, apow=%d ->35 byte x \b, fpow=%d ->36 byte &0x01 \b, [large] ->36 byte &0x02 \b, [deflate] ->36 byte &0x04 \b, [bzip] ->36 byte &0x08 \b, [tcbs] ->36 byte &0x10 \b, [excodec] ->40 lequad x \b, bnum=%lld ->48 lequad x \b, rnum=%lld ->56 lequad x \b, fsiz=%lld - -# Type: QDBM Quick Database Manager -# From: Benoit Sibaud -0 string \\[depot\\]\n\f Quick Database Manager, little endian -0 string \\[DEPOT\\]\n\f Quick Database Manager, big endian - -# Type: TokyoCabinet database -# URL: http://tokyocabinet.sourceforge.net/ -# From: Benoit Sibaud -0 string ToKyO\ CaBiNeT\n TokyoCabinet database ->14 string x (version %s) - -#------------------------------------------------------------------------------ -# diamond: file(1) magic for Diamond system -# -# ... diamond is a multi-media mail and electronic conferencing system.... -# -# XXX - I think it was either renamed Slate, or replaced by Slate.... -# -# The full deal is too long... -#0 string \n Diamond Multimedia Document -0 string =\n\n________64E Alpha archive ->22 string X -- out of date -# -# Alpha COFF Based Executables -# The stripped stuff really needs to be an 8 byte (64 bit) compare, -# but this works -0 leshort 0x183 COFF format alpha ->22 leshort&020000 &010000 sharable library, ->22 leshort&020000 ^010000 dynamically linked, ->24 leshort 0410 pure ->24 leshort 0413 demand paged ->8 lelong >0 executable or object module, not stripped ->8 lelong 0 ->>12 lelong 0 executable or object module, stripped ->>12 lelong >0 executable or object module, not stripped ->27 byte >0 - version %d. ->26 byte >0 %d- ->28 leshort >0 %d -# -# The next is incomplete, we could tell more about this format, -# but its not worth it. -0 leshort 0x188 Alpha compressed COFF -0 leshort 0x18f Alpha u-code object -# -# -# Some other interesting Digital formats, -0 string \377\377\177 ddis/ddif -0 string \377\377\174 ddis/dots archive -0 string \377\377\176 ddis/dtif table data -0 string \033c\033 LN03 output -0 long 04553207 X image -# -0 string =!!\n profiling data file -# -# Locale data tables (MIPS and Alpha). -# -0 short 0x0501 locale data table ->6 short 0x24 for MIPS ->6 short 0x40 for Alpha -# ATSC A/53 aka AC-3 aka Dolby Digital -# from http://www.atsc.org/standards/a_52a.pdf -# corrections, additions, etc. are always welcome! -# -# syncword -0 beshort 0x0b77 ATSC A/52 aka AC-3 aka Dolby Digital stream, -# fscod ->4 byte&0xc0 0x00 48 kHz, ->4 byte&0xc0 0x40 44.1 kHz, ->4 byte&0xc0 0x80 32 kHz, -# is this one used for 96 kHz? ->4 byte&0xc0 0xc0 reserved frequency, -# ->5 byte&7 = 0 \b, complete main (CM) ->5 byte&7 = 1 \b, music and effects (ME) ->5 byte&7 = 2 \b, visually impaired (VI) ->5 byte&7 = 3 \b, hearing impaired (HI) ->5 byte&7 = 4 \b, dialogue (D) ->5 byte&7 = 5 \b, commentary (C) ->5 byte&7 = 6 \b, emergency (E) -# acmod ->6 byte&0xe0 0x00 1+1 front, ->6 byte&0xe0 0x20 1 front/0 rear, ->6 byte&0xe0 0x40 2 front/0 rear, ->6 byte&0xe0 0x60 3 front/0 rear, ->6 byte&0xe0 0x80 2 front/1 rear, ->6 byte&0xe0 0xa0 3 front/1 rear, ->6 byte&0xe0 0xc0 2 front/2 rear, ->6 byte&0xe0 0xe0 3 front/2 rear, -# lfeon (these may be incorrect) ->7 byte&0x40 0x00 LFE off, ->7 byte&0x40 0x40 LFE on, -# ->4 byte&0x3e = 0x00 \b, 32 kbit/s ->4 byte&0x3e = 0x02 \b, 40 kbit/s ->4 byte&0x3e = 0x04 \b, 48 kbit/s ->4 byte&0x3e = 0x06 \b, 56 kbit/s ->4 byte&0x3e = 0x08 \b, 64 kbit/s ->4 byte&0x3e = 0x0a \b, 80 kbit/s ->4 byte&0x3e = 0x0c \b, 96 kbit/s ->4 byte&0x3e = 0x0e \b, 112 kbit/s ->4 byte&0x3e = 0x10 \b, 128 kbit/s ->4 byte&0x3e = 0x12 \b, 160 kbit/s ->4 byte&0x3e = 0x14 \b, 192 kbit/s ->4 byte&0x3e = 0x16 \b, 224 kbit/s ->4 byte&0x3e = 0x18 \b, 256 kbit/s ->4 byte&0x3e = 0x1a \b, 320 kbit/s ->4 byte&0x3e = 0x1c \b, 384 kbit/s ->4 byte&0x3e = 0x1e \b, 448 kbit/s ->4 byte&0x3e = 0x20 \b, 512 kbit/s ->4 byte&0x3e = 0x22 \b, 576 kbit/s ->4 byte&0x3e = 0x24 \b, 640 kbit/s -# dsurmod (these may be incorrect) ->6 beshort&0x0180 0x0000 Dolby Surround not indicated ->6 beshort&0x0180 0x0080 not Dolby Surround encoded ->6 beshort&0x0180 0x0100 Dolby Surround encoded ->6 beshort&0x0180 0x0180 reserved Dolby Surround mode - -#------------------------------------------------------------------------------ -# dump: file(1) magic for dump file format--for new and old dump filesystems -# -# We specify both byte orders in order to recognize byte-swapped dumps. -# -24 belong 60012 new-fs dump file (big endian), ->4 bedate x Previous dump %s, ->8 bedate x This dump %s, ->12 belong >0 Volume %ld, ->692 belong 0 Level zero, type: ->692 belong >0 Level %d, type: ->0 belong 1 tape header, ->0 belong 2 beginning of file record, ->0 belong 3 map of inodes on tape, ->0 belong 4 continuation of file record, ->0 belong 5 end of volume, ->0 belong 6 map of inodes deleted, ->0 belong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 belong >0 Flags %x - -24 belong 60011 old-fs dump file (big endian), -#>4 bedate x Previous dump %s, -#>8 bedate x This dump %s, ->12 belong >0 Volume %ld, ->692 belong 0 Level zero, type: ->692 belong >0 Level %d, type: ->0 belong 1 tape header, ->0 belong 2 beginning of file record, ->0 belong 3 map of inodes on tape, ->0 belong 4 continuation of file record, ->0 belong 5 end of volume, ->0 belong 6 map of inodes deleted, ->0 belong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 belong >0 Flags %x - -24 lelong 60012 new-fs dump file (little endian), ->4 ledate x This dump %s, ->8 ledate x Previous dump %s, ->12 lelong >0 Volume %ld, ->692 lelong 0 Level zero, type: ->692 lelong >0 Level %d, type: ->0 lelong 1 tape header, ->0 lelong 2 beginning of file record, ->0 lelong 3 map of inodes on tape, ->0 lelong 4 continuation of file record, ->0 lelong 5 end of volume, ->0 lelong 6 map of inodes deleted, ->0 lelong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 lelong >0 Flags %x - -24 lelong 60011 old-fs dump file (little endian), -#>4 ledate x Previous dump %s, -#>8 ledate x This dump %s, ->12 lelong >0 Volume %ld, ->692 lelong 0 Level zero, type: ->692 lelong >0 Level %d, type: ->0 lelong 1 tape header, ->0 lelong 2 beginning of file record, ->0 lelong 3 map of inodes on tape, ->0 lelong 4 continuation of file record, ->0 lelong 5 end of volume, ->0 lelong 6 map of inodes deleted, ->0 lelong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 lelong >0 Flags %x - -18 leshort 60011 old-fs dump file (16-bit, assuming PDP-11 endianness), ->2 medate x Previous dump %s, ->6 medate x This dump %s, ->10 leshort >0 Volume %ld, ->0 leshort 1 tape header. ->0 leshort 2 beginning of file record. ->0 leshort 3 map of inodes on tape. ->0 leshort 4 continuation of file record. ->0 leshort 5 end of volume. ->0 leshort 6 map of inodes deleted. ->0 leshort 7 end of medium (for floppy). - -24 belong 0x19540119 new-fs dump file (ufs2, big endian), ->896 beqdate x Previous dump %s, ->904 beqdate x This dump %s, ->12 belong >0 Volume %ld, ->692 belong 0 Level zero, type: ->692 belong >0 Level %d, type: ->0 belong 1 tape header, ->0 belong 2 beginning of file record, ->0 belong 3 map of inodes on tape, ->0 belong 4 continuation of file record, ->0 belong 5 end of volume, ->0 belong 6 map of inodes deleted, ->0 belong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 belong >0 Flags %x - -24 lelong 0x19540119 new-fs dump file (ufs2, little endian), ->896 leqdate x This dump %s, ->904 leqdate x Previous dump %s, ->12 lelong >0 Volume %ld, ->692 lelong 0 Level zero, type: ->692 lelong >0 Level %d, type: ->0 lelong 1 tape header, ->0 lelong 2 beginning of file record, ->0 lelong 3 map of inodes on tape, ->0 lelong 4 continuation of file record, ->0 lelong 5 end of volume, ->0 lelong 6 map of inodes deleted, ->0 lelong 7 end of medium (for floppy), ->676 string >\0 Label %s, ->696 string >\0 Filesystem %s, ->760 string >\0 Device %s, ->824 string >\0 Host %s, ->888 lelong >0 Flags %x - -#------------------------------------------------------------------------------ -# Dyadic: file(1) magic for Dyalog APL. -# -0 byte 0xaa ->1 byte <4 Dyalog APL ->>1 byte 0x00 incomplete workspace ->>1 byte 0x01 component file ->>1 byte 0x02 external variable ->>1 byte 0x03 workspace ->>2 byte x version %d ->>3 byte x .%d - -#------------------------------------------------------------------------------ -# T602 editor documents -# by David Necas -0 string @CT\ T602 document data, ->4 string 0 Kamenicky ->4 string 1 CP 852 ->4 string 2 KOI8-CS ->4 string >2 unknown encoding - -# Vi IMproved Encrypted file -# by David Necas -0 string VimCrypt~ Vim encrypted file data -# Vi IMproved Swap file -# by Sven Wegener -0 string b0VIM\ Vim swap file ->&0 string >\0 \b, version %s - -#------------------------------------------------------------------------------ -# efi: file(1) magic for Universal EFI binaries - -0 lelong 0x0ef1fab9 ->4 lelong 1 Universal EFI binary with 1 architecture ->>&0 lelong 7 \b, i386 ->>&0 lelong 0x01000007 \b, x86_64 ->4 lelong 2 Universal EFI binary with 2 architectures ->>&0 lelong 7 \b, i386 ->>&0 lelong 0x01000007 \b, x86_64 ->>&20 lelong 7 \b, i386 ->>&20 lelong 0x01000007 \b, x86_64 ->4 lelong >2 Universal EFI binary with %ld architectures - -#------------------------------------------------------------------------------ -# elf: file(1) magic for ELF executables -# -# We have to check the byte order flag to see what byte order all the -# other stuff in the header is in. -# -# What're the correct byte orders for the nCUBE and the Fujitsu VPP500? -# -# Created by: unknown -# Modified by (1): Daniel Quinlan -# Modified by (2): Peter Tobias (core support) -# Modified by (3): Christian 'Dr. Disk' Hechelmann (fix of core support) -# Modified by (4): (VMS Itanium) -# Modified by (5): Matthias Urlichs (Listing of many architectures) -0 string \177ELF ELF ->4 byte 0 invalid class ->4 byte 1 32-bit ->4 byte 2 64-bit ->5 byte 0 invalid byte order ->5 byte 1 LSB ->>16 leshort 0 no file type, -!:strength *2 -!:mime application/octet-stream ->>16 leshort 1 relocatable, -!:mime application/x-object ->>16 leshort 2 executable, -!:mime application/x-executable ->>16 leshort 3 shared object, -!:mime application/x-sharedlib ->>16 leshort 4 core file -!:mime application/x-coredump -# Core file detection is not reliable. -#>>>(0x38+0xcc) string >\0 of '%s' -#>>>(0x38+0x10) lelong >0 (signal %d), ->>16 leshort &0xff00 processor-specific, ->>18 leshort 0 no machine, ->>18 leshort 1 AT&T WE32100 - invalid byte order, ->>18 leshort 2 SPARC - invalid byte order, ->>18 leshort 3 Intel 80386, ->>18 leshort 4 Motorola ->>>36 lelong &0x01000000 68000 - invalid byte order, ->>>36 lelong &0x00810000 CPU32 - invalid byte order, ->>>36 lelong 0 68020 - invalid byte order, ->>18 leshort 5 Motorola 88000 - invalid byte order, ->>18 leshort 6 Intel 80486, ->>18 leshort 7 Intel 80860, -# The official e_machine number for MIPS is now #8, regardless of endianness. -# The second number (#10) will be deprecated later. For now, we still -# say something if #10 is encountered, but only gory details for #8. ->>18 leshort 8 MIPS, ->>>36 lelong &0x20 N32 ->>18 leshort 10 MIPS, ->>>36 lelong &0x20 N32 ->>18 leshort 8 -# only for 32-bit ->>>4 byte 1 ->>>>36 lelong&0xf0000000 0x00000000 MIPS-I ->>>>36 lelong&0xf0000000 0x10000000 MIPS-II ->>>>36 lelong&0xf0000000 0x20000000 MIPS-III ->>>>36 lelong&0xf0000000 0x30000000 MIPS-IV ->>>>36 lelong&0xf0000000 0x40000000 MIPS-V ->>>>36 lelong&0xf0000000 0x50000000 MIPS32 ->>>>36 lelong&0xf0000000 0x60000000 MIPS64 ->>>>36 lelong&0xf0000000 0x70000000 MIPS32 rel2 ->>>>36 lelong&0xf0000000 0x80000000 MIPS64 rel2 -# only for 64-bit ->>>4 byte 2 ->>>>48 lelong&0xf0000000 0x00000000 MIPS-I ->>>>48 lelong&0xf0000000 0x10000000 MIPS-II ->>>>48 lelong&0xf0000000 0x20000000 MIPS-III ->>>>48 lelong&0xf0000000 0x30000000 MIPS-IV ->>>>48 lelong&0xf0000000 0x40000000 MIPS-V ->>>>48 lelong&0xf0000000 0x50000000 MIPS32 ->>>>48 lelong&0xf0000000 0x60000000 MIPS64 ->>>>48 lelong&0xf0000000 0x70000000 MIPS32 rel2 ->>>>48 lelong&0xf0000000 0x80000000 MIPS64 rel2 ->>18 leshort 9 Amdahl - invalid byte order, ->>18 leshort 10 MIPS (deprecated), ->>18 leshort 11 RS6000 - invalid byte order, ->>18 leshort 15 PA-RISC - invalid byte order, ->>>50 leshort 0x0214 2.0 ->>>48 leshort &0x0008 (LP64), ->>18 leshort 16 nCUBE, ->>18 leshort 17 Fujitsu VPP500, ->>18 leshort 18 SPARC32PLUS - invalid byte order, ->>18 leshort 20 PowerPC, ->>18 leshort 22 IBM S/390, ->>18 leshort 36 NEC V800, ->>18 leshort 37 Fujitsu FR20, ->>18 leshort 38 TRW RH-32, ->>18 leshort 39 Motorola RCE, ->>18 leshort 40 ARM, ->>18 leshort 41 Alpha, ->>18 leshort 0xa390 IBM S/390 (obsolete), ->>18 leshort 42 Renesas SH, ->>18 leshort 43 SPARC V9 - invalid byte order, ->>18 leshort 44 Siemens Tricore Embedded Processor, ->>18 leshort 45 Argonaut RISC Core, Argonaut Technologies Inc., ->>18 leshort 46 Renesas H8/300, ->>18 leshort 47 Renesas H8/300H, ->>18 leshort 48 Renesas H8S, ->>18 leshort 49 Renesas H8/500, ->>18 leshort 50 IA-64, ->>18 leshort 51 Stanford MIPS-X, ->>18 leshort 52 Motorola Coldfire, ->>18 leshort 53 Motorola M68HC12, ->>18 leshort 54 Fujitsu MMA, ->>18 leshort 55 Siemens PCP, ->>18 leshort 56 Sony nCPU, ->>18 leshort 57 Denso NDR1, ->>18 leshort 58 Start*Core, ->>18 leshort 59 Toyota ME16, ->>18 leshort 60 ST100, ->>18 leshort 61 Tinyj emb., ->>18 leshort 62 x86-64, ->>18 leshort 63 Sony DSP, ->>18 leshort 66 FX66, ->>18 leshort 67 ST9+ 8/16 bit, ->>18 leshort 68 ST7 8 bit, ->>18 leshort 69 MC68HC16, ->>18 leshort 70 MC68HC11, ->>18 leshort 71 MC68HC08, ->>18 leshort 72 MC68HC05, ->>18 leshort 73 SGI SVx, ->>18 leshort 74 ST19 8 bit, ->>18 leshort 75 Digital VAX, ->>18 leshort 76 Axis cris, ->>18 leshort 77 Infineon 32-bit embedded, ->>18 leshort 78 Element 14 64-bit DSP, ->>18 leshort 79 LSI Logic 16-bit DSP, ->>18 leshort 80 MMIX, ->>18 leshort 81 Harvard machine-independent, ->>18 leshort 82 SiTera Prism, ->>18 leshort 83 Atmel AVR 8-bit, ->>18 leshort 84 Fujitsu FR30, ->>18 leshort 85 Mitsubishi D10V, ->>18 leshort 86 Mitsubishi D30V, ->>18 leshort 87 NEC v850, ->>18 leshort 88 Renesas M32R, ->>18 leshort 89 Matsushita MN10300, ->>18 leshort 90 Matsushita MN10200, ->>18 leshort 91 picoJava, ->>18 leshort 92 OpenRISC, ->>18 leshort 93 ARC Cores Tangent-A5, ->>18 leshort 94 Tensilica Xtensa, ->>18 leshort 97 NatSemi 32k, ->>18 leshort 106 Analog Devices Blackfin, ->>18 leshort 113 Altera Nios II, ->>18 leshort 0xae META, ->>18 leshort 0x3426 OpenRISC (obsolete), ->>18 leshort 0x8472 OpenRISC (obsolete), ->>18 leshort 0x9026 Alpha (unofficial), ->>20 lelong 0 invalid version ->>20 lelong 1 version 1 ->>36 lelong 1 MathCoPro/FPU/MAU Required ->5 byte 2 MSB ->>16 beshort 0 no file type, -!:mime application/octet-stream ->>16 beshort 1 relocatable, -!:mime application/x-object ->>16 beshort 2 executable, -!:mime application/x-executable ->>16 beshort 3 shared object, -!:mime application/x-sharedlib ->>16 beshort 4 core file, -!:mime application/x-coredump -#>>>(0x38+0xcc) string >\0 of '%s' -#>>>(0x38+0x10) belong >0 (signal %d), ->>16 beshort &0xff00 processor-specific, ->>18 beshort 0 no machine, ->>18 beshort 1 AT&T WE32100, ->>18 beshort 2 SPARC, ->>18 beshort 3 Intel 80386 - invalid byte order, ->>18 beshort 4 Motorola ->>>36 belong &0x01000000 68000, ->>>36 belong &0x00810000 CPU32, ->>>36 belong 0 68020, ->>18 beshort 5 Motorola 88000, ->>18 beshort 6 Intel 80486 - invalid byte order, ->>18 beshort 7 Intel 80860, -# only for MIPS - see comment in little-endian section above. ->>18 beshort 8 MIPS, ->>>36 belong &0x20 N32 ->>18 beshort 10 MIPS, ->>>36 belong &0x20 N32 ->>18 beshort 8 -# only for 32-bit ->>>4 byte 1 ->>>>36 belong&0xf0000000 0x00000000 MIPS-I ->>>>36 belong&0xf0000000 0x10000000 MIPS-II ->>>>36 belong&0xf0000000 0x20000000 MIPS-III ->>>>36 belong&0xf0000000 0x30000000 MIPS-IV ->>>>36 belong&0xf0000000 0x40000000 MIPS-V ->>>>36 belong&0xf0000000 0x50000000 MIPS32 ->>>>36 belong&0xf0000000 0x60000000 MIPS64 ->>>>36 belong&0xf0000000 0x70000000 MIPS32 rel2 ->>>>36 belong&0xf0000000 0x80000000 MIPS64 rel2 -# only for 64-bit ->>>4 byte 2 ->>>>48 belong&0xf0000000 0x00000000 MIPS-I ->>>>48 belong&0xf0000000 0x10000000 MIPS-II ->>>>48 belong&0xf0000000 0x20000000 MIPS-III ->>>>48 belong&0xf0000000 0x30000000 MIPS-IV ->>>>48 belong&0xf0000000 0x40000000 MIPS-V ->>>>48 belong&0xf0000000 0x50000000 MIPS32 ->>>>48 belong&0xf0000000 0x60000000 MIPS64 ->>>>48 belong&0xf0000000 0x70000000 MIPS32 rel2 ->>>>48 belong&0xf0000000 0x80000000 MIPS64 rel2 ->>18 beshort 9 Amdahl, ->>18 beshort 10 MIPS (deprecated), ->>18 beshort 11 RS6000, ->>18 beshort 15 PA-RISC ->>>50 beshort 0x0214 2.0 ->>>48 beshort &0x0008 (LP64) ->>18 beshort 16 nCUBE, ->>18 beshort 17 Fujitsu VPP500, ->>18 beshort 18 SPARC32PLUS, ->>>36 belong&0xffff00 0x000100 V8+ Required, ->>>36 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, ->>>36 belong&0xffff00 0x000400 HaL R1 Extensions Required, ->>>36 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, ->>18 beshort 20 PowerPC or cisco 4500, ->>18 beshort 21 64-bit PowerPC or cisco 7500, ->>18 beshort 22 IBM S/390, ->>18 beshort 23 Cell SPU, ->>18 beshort 24 cisco SVIP, ->>18 beshort 25 cisco 7200, ->>18 beshort 36 NEC V800 or cisco 12000, ->>18 beshort 37 Fujitsu FR20, ->>18 beshort 38 TRW RH-32, ->>18 beshort 39 Motorola RCE, ->>18 beshort 40 ARM, ->>18 beshort 41 Alpha, ->>18 beshort 42 Renesas SH, ->>18 beshort 43 SPARC V9, ->>>48 belong&0xffff00 0x000200 Sun UltraSPARC1 Extensions Required, ->>>48 belong&0xffff00 0x000400 HaL R1 Extensions Required, ->>>48 belong&0xffff00 0x000800 Sun UltraSPARC3 Extensions Required, ->>>48 belong&0x3 0 total store ordering, ->>>48 belong&0x3 1 partial store ordering, ->>>48 belong&0x3 2 relaxed memory ordering, ->>18 beshort 44 Siemens Tricore Embedded Processor, ->>18 beshort 45 Argonaut RISC Core, Argonaut Technologies Inc., ->>18 beshort 46 Renesas H8/300, ->>18 beshort 47 Renesas H8/300H, ->>18 beshort 48 Renesas H8S, ->>18 beshort 49 Renesas H8/500, ->>18 beshort 50 IA-64, ->>18 beshort 51 Stanford MIPS-X, ->>18 beshort 52 Motorola Coldfire, ->>18 beshort 53 Motorola M68HC12, ->>18 beshort 73 Cray NV1, ->>18 beshort 75 Digital VAX, ->>18 beshort 88 Renesas M32R, ->>18 leshort 92 OpenRISC, ->>18 leshort 0x3426 OpenRISC (obsolete), ->>18 leshort 0x8472 OpenRISC (obsolete), ->>18 beshort 94 Tensilica Xtensa, ->>18 beshort 97 NatSemi 32k, ->>18 beshort 0x18ad AVR32 (unofficial), ->>18 beshort 0x9026 Alpha (unofficial), ->>18 beshort 0xa390 IBM S/390 (obsolete), ->>20 belong 0 invalid version ->>20 belong 1 version 1 ->>36 belong 1 MathCoPro/FPU/MAU Required -# Up to now only 0, 1 and 2 are defined; I've seen a file with 0x83, it seemed -# like proper ELF, but extracting the string had bad results. ->4 byte <0x80 ->>8 string >\0 (%s) ->8 string \0 ->>7 byte 0 (SYSV) ->>7 byte 1 (HP-UX) ->>7 byte 2 (NetBSD) ->>7 byte 3 (GNU/Linux) ->>7 byte 4 (GNU/Hurd) ->>7 byte 5 (86Open) ->>7 byte 6 (Solaris) ->>7 byte 7 (Monterey) ->>7 byte 8 (IRIX) ->>7 byte 9 (FreeBSD) ->>7 byte 10 (Tru64) ->>7 byte 11 (Novell Modesto) ->>7 byte 12 (OpenBSD) ->8 string \2 ->>7 byte 13 (OpenVMS) ->>7 byte 97 (ARM) ->>7 byte 255 (embedded) - -#------------------------------------------------------------------------------ -# encore: file(1) magic for Encore machines -# -# XXX - needs to have the byte order specified (NS32K was little-endian, -# dunno whether they run the 88K in little-endian mode or not). -# -0 short 0x154 Encore ->20 short 0x107 executable ->20 short 0x108 pure executable ->20 short 0x10b demand-paged executable ->20 short 0x10f unsupported executable ->12 long >0 not stripped ->22 short >0 - version %ld ->22 short 0 - -#>4 date x stamp %s -0 short 0x155 Encore unsupported executable ->12 long >0 not stripped ->22 short >0 - version %ld ->22 short 0 - -#>4 date x stamp %s -#------------------------------------------------------------------------------ -# EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1] -# Stefan Praszalowicz (hpicollo@worldnet.fr) -# Useful information for improving this file can be found at: -# http://software.frodo.looijaard.name/psiconv/formats/Index.html -0 lelong 0x10000037 ->4 lelong 0x1000006D ->>8 lelong 0x1000007F Psion Word ->>8 lelong 0x10000088 Psion Sheet ->>8 lelong 0x1000007D Psion Sketch ->>8 lelong 0x10000085 Psion TextEd - -#------------------------------------------------------------------------------ -# erlang: file(1) magic for Erlang JAM and BEAM files -# URL: http://www.erlang.org/faq/x779.html#AEN812 - -# OTP R3-R4 -0 string \0177BEAM! Old Erlang BEAM file ->6 short >0 - version %d - -# OTP R5 and onwards -0 string FOR1 ->8 string BEAM Erlang BEAM file - -# 4.2 version may have a copyright notice! -4 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2 -79 string Tue\ Jan\ 22\ 14:32:44\ MET\ 1991 Erlang JAM file - version 4.2 - -4 string 1.0\ Fri\ Feb\ 3\ 09:55:56\ MET\ 1995 Erlang JAM file - version 4.3 - -#------------------------------------------------------------------------------ -# ESRI Shapefile format (.shp .shx .dbf=DBaseIII) -# Based on info from -# -0 belong 9994 ESRI Shapefile ->4 belong =0 ->8 belong =0 ->12 belong =0 ->16 belong =0 ->20 belong =0 ->28 lelong x version %d ->24 belong x length %d ->32 lelong =0 type Null Shape ->32 lelong =1 type Point ->32 lelong =3 type PolyLine ->32 lelong =5 type Polygon ->32 lelong =8 type MultiPoint ->32 lelong =11 type PointZ ->32 lelong =13 type PolyLineZ ->32 lelong =15 type PolygonZ ->32 lelong =18 type MultiPointZ ->32 lelong =21 type PointM ->32 lelong =23 type PolyLineM ->32 lelong =25 type PolygonM ->32 lelong =28 type MultiPointM ->32 lelong =31 type MultiPatch - -#------------------------------------------------------------------------------ -# fcs: file(1) magic for FCS (Flow Cytometry Standard) data files -# From Roger Leigh -0 string FCS1.0 Flow Cytometry Standard (FCS) data, version 1.0 -0 string FCS2.0 Flow Cytometry Standard (FCS) data, version 2.0 -0 string FCS3.0 Flow Cytometry Standard (FCS) data, version 3.0 - - -#------------------------------------------------------------------------------ -# filesystems: file(1) magic for different filesystems -# -0 string \366\366\366\366 PC formatted floppy with no filesystem -# Sun disk labels -# From /usr/include/sun/dklabel.h: -0774 beshort 0xdabe -# modified by Joerg Jenderek, because original test -# succeeds for Cabinet archive dao360.dl_ with negative blocks ->0770 long >0 Sun disk label ->>0 string x '%s ->>>31 string >\0 \b%s ->>>>63 string >\0 \b%s ->>>>>95 string >\0 \b%s ->>0 string x \b' ->>0734 short >0 %d rpm, ->>0736 short >0 %d phys cys, ->>0740 short >0 %d alts/cyl, ->>0746 short >0 %d interleave, ->>0750 short >0 %d data cyls, ->>0752 short >0 %d alt cyls, ->>0754 short >0 %d heads/partition, ->>0756 short >0 %d sectors/track, ->>0764 long >0 start cyl %ld, ->>0770 long x %ld blocks -# Is there a boot block written 1 sector in? ->512 belong&077777777 0600407 \b, boot block present -# Joerg Jenderek: Smart Boot Manager backup file is 41 byte header + first sectors of disc -# (http://btmgr.sourceforge.net/docs/user-guide-3.html) -0 string SBMBAKUP_ Smart Boot Manager backup file ->9 string x \b, version %-5.5s ->>14 string =_ ->>>15 string x %-.1s ->>>>16 string =_ \b. ->>>>>17 string x \b%-.1s ->>>>>>18 string =_ \b. ->>>>>>>19 string x \b%-.1s ->>>22 ubyte 0 ->>>>21 ubyte x \b, from drive 0x%x ->>>22 ubyte >0 ->>>>21 string x \b, from drive %s - -# Joerg Jenderek -# DOS Emulator image is 128 byte, null right padded header + harddisc image -0 string DOSEMU\0 ->0x27E leshort 0xAA55 -#offset is 128 ->>19 ubyte 128 ->>>(19.b-1) ubyte 0x0 DOS Emulator image ->>>>7 ulelong >0 \b, %u heads ->>>>11 ulelong >0 \b, %d sectors/track ->>>>15 ulelong >0 \b, %d cylinders - -# updated by Joerg Jenderek at Sep 2007 -# only for sector sizes with 512 or more Bytes -0x1FE leshort 0xAA55 x86 boot sector -# to do also for sectors < than 512 Bytes and some other files, GRR -#30 search/481 \x55\xAA x86 boot sector -# not for BeOS floppy 1440k, MBRs -#(11.s-2) uleshort 0xAA55 x86 boot sector ->2 string OSBS \b, OS/BS MBR -# J\xf6rg Jenderek ->0x8C string Invalid\ partition\ table \b, MS-DOS MBR -# dr-dos with some upper-, lowercase variants ->0x9D string Invalid\ partition\ table$ ->>181 string No\ Operating\ System$ ->>>201 string Operating\ System\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03 ->0x9D string Invalid\ partition\ table$ ->>181 string No\ operating\ system$ ->>>201 string Operating\ system\ load\ error$ \b, DR-DOS MBR, Version 7.01 to 7.03 ->342 string Invalid\ partition\ table$ ->>366 string No\ operating\ system$ ->>>386 string Operating\ system\ load\ error$ \b, DR-DOS MBR, version 7.01 to 7.03 ->295 string NEWLDR\0 ->>302 string Bad\ PT\ $ ->>>310 string No\ OS\ $ ->>>>317 string OS\ load\ err$ ->>>>>329 string Moved\ or\ missing\ IBMBIO.LDR\n\r ->>>>>>358 string Press\ any\ key\ to\ continue.\n\r$ ->>>>>>>387 string Copyright\ (c)\ 1984,1998 ->>>>>>>>411 string Caldera\ Inc.\0 \b, DR-DOS MBR (IBMBIO.LDR) ->0x10F string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 4.10.1998, 4.10.2222 ->>0x1B8 ubelong >0 \b, Serial 0x%-.4x ->0x8B string Ung\201ltige\ Partitionstabelle \b, MS-DOS MBR, german version 5.00 to 4.00.950 ->271 string Invalid\ partition\ table\0 ->>295 string Error\ loading\ operating\ system\0 ->>>326 string Missing\ operating\ system\0 \b, mbr -# ->139 string Invalid\ partition\ table\0 ->>163 string Error\ loading\ operating\ system\0 ->>>194 string Missing\ operating\ system\0 \b, Microsoft Windows XP mbr -# http://www.heise.de/ct/05/09/006/ page 184 -#HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\DosDevices\?:=Serial4Bytes+8Bytes ->>>>0x1B8 ulelong >0 \b,Serial 0x%-.4x ->300 string Invalid\ partition\ table\0 ->>324 string Error\ loading\ operating\ system\0 ->>>355 string Missing\ operating\ system\0 \b, Microsoft Windows XP MBR -#??>>>389 string Invalid\ system\ disk ->>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x ->300 string Ung\201ltige\ Partitionstabelle -#split string to avoid error: String too long ->>328 string Fehler\ beim\ Laden\ ->>>346 string des\ Betriebssystems ->>>>366 string Betriebssystem\ nicht\ vorhanden \b, Microsoft Windows XP MBR (german) ->>>>>0x1B8 ulelong >0 \b, Serial 0x%-.4x -#>0x145 string Default:\ F \b, FREE-DOS MBR -#>0x14B string Default:\ F \b, FREE-DOS 1.0 MBR ->0x145 search/7 Default:\ F \b, FREE-DOS MBR -#>>313 string F0\ .\ .\ . -#>>>322 string disk\ 1 -#>>>>382 string FAT3 ->64 string no\ active\ partition\ found ->>96 string read\ error\ while\ reading\ drive \b, FREE-DOS Beta 0.9 MBR -# Ranish Partition Manager http://www.ranish.com/part/ ->387 search/4 \0\ Error!\r ->>378 search/7 Virus! ->>>397 search/4 Booting\ ->>>>408 search/4 HD1/\0 \b, Ranish MBR ( ->>>>>416 string Writing\ changes... \b2.37 ->>>>>>438 ubyte x \b,0x%x dots ->>>>>>440 ubyte >0 \b,virus check ->>>>>>441 ubyte >0 \b,partition %c -#2.38,2.42,2.44 ->>>>>416 string !Writing\ changes... \b ->>>>>>418 ubyte 1 \bvirus check, ->>>>>>419 ubyte x \b0x%x seconds ->>>>>>420 ubyte&0x0F >0 \b,partition ->>>>>>>420 ubyte&0x0F <5 \b %x ->>>>>>>420 ubyte&0x0F 0Xf \b ask ->>>>>420 ubyte x \b) -# ->271 string Operating\ system\ loading ->>296 string error\r \b, SYSLINUX MBR (2.10) -# http://www.acronis.de/ ->362 string MBR\ Error\ \0\r ->>376 string ress\ any\ key\ to\ ->>>392 string boot\ from\ floppy...\0 \b, Acronis MBR -# added by Joerg Jenderek -# http://www.visopsys.org/ -# http://partitionlogic.org.uk/ ->309 string No\ bootable\ partition\ found\r ->>339 string I/O\ Error\ reading\ boot\ sector\r \b, Visopsys MBR ->349 string No\ bootable\ partition\ found\r ->>379 string I/O\ Error\ reading\ boot\ sector\r \b, simple Visopsys MBR -# bootloader, bootmanager ->0x40 string SBML -# label with 11 characters of FAT 12 bit filesystem ->>43 string SMART\ BTMGR ->>>430 string SBMK\ Bad!\r \b, Smart Boot Manager -# OEM-ID not always "SBM" -#>>>>3 strings SBM ->>>>6 string >\0 \b, version %s ->382 string XOSLLOADXCF \b, eXtended Operating System Loader ->6 string LILO \b, LInux i386 boot LOader ->>120 string LILO \b, version 22.3.4 SuSe ->>172 string LILO \b, version 22.5.8 Debian -# updated by Joerg Jenderek at Oct 2008 -# variables according to grub-0.97/stage1/stage1.S or -# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data -# usual values are marked with comments to get only informations of strange GRUB loaders ->342 search/60 \0Geom\0 -#>0 ulelong x %x=0x009048EB , 0x2a9048EB 0 ->>0x41 ubyte <2 ->>>0x3E ubyte >2 \b; GRand Unified Bootloader -# 0x3 for 0.5.95,0.93,0.94,0.96 0x4 for 1.90 ->>>>0x3E ubyte x \b, stage1 version 0x%x -#If it is 0xFF, use a drive passed by BIOS ->>>>0x40 ubyte <0xFF \b, boot drive 0x%x -# in most case 0,1,0x2e for GRUB 0.5.95 ->>>>0x41 ubyte >0 \b, LBA flag 0x%x ->>>>0x42 uleshort <0x8000 \b, stage2 address 0x%x -#>>>>0x42 uleshort =0x8000 \b, stage2 address 0x%x (usual) ->>>>0x42 uleshort >0x8000 \b, stage2 address 0x%x -#>>>>0x44 ulelong =1 \b, 1st sector stage2 0x%x (default) ->>>>0x44 ulelong >1 \b, 1st sector stage2 0x%x ->>>>0x48 uleshort <0x800 \b, stage2 segment 0x%x -#>>>>0x48 uleshort =0x800 \b, stage2 segment 0x%x (usual) ->>>>0x48 uleshort >0x800 \b, stage2 segment 0x%x ->>>>402 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>>394 string stage1 \b, GRUB version 0.5.95 ->>>>382 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>>376 string GRUB\ \0 \b, GRUB version 0.93 or 1.94 ->>>>383 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>>377 string GRUB\ \0 \b, GRUB version 0.94 ->>>>385 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>>379 string GRUB\ \0 \b, GRUB version 0.95 or 0.96 ->>>>391 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>>385 string GRUB\ \0 \b, GRUB version 0.97 -#unkown version ->>>343 string Geom\0Read\0\ Error\0 ->>>>321 string Loading\ stage1.5 \b, GRUB version x.y ->>>380 string Geom\0Hard\ Disk\0Read\0\ Error\0 ->>>>374 string GRUB\ \0 \b, GRUB version n.m -# http://syslinux.zytor.com/ ->478 string Boot\ failed\r ->>495 string LDLINUX\ SYS \b, SYSLINUX bootloader (1.62) ->480 string Boot\ failed\r ->>495 string LDLINUX\ SYS \b, SYSLINUX bootloader (2.06 or 2.11) ->484 string Boot\ error\r \b, SYSLINUX bootloader (3.11) ->395 string chksum\0\ ERROR!\0 \b, Gujin bootloader -# http://www.bcdwb.de/bcdw/index_e.htm ->3 string BCDL ->>498 string BCDL\ \ \ \ BIN \b, Bootable CD Loader (1.50Z) -# mbr partion table entries -# OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs ->3 string !MS ->>3 string !SYSLINUX ->>>3 string !MTOOL ->>>>3 string !NEWLDR ->>>>>5 string !DOS -# not FAT (32 bit) ->>>>>>82 string !FAT32 -#not Linux kernel ->>>>>>>514 string !HdrS -#not BeOS ->>>>>>>>422 string !Be\ Boot\ Loader -# active flag 0 or 0x80 and type > 0 ->>>>>>>>>446 ubyte <0x81 ->>>>>>>>>>446 ubyte&0x7F 0 ->>>>>>>>>>>450 ubyte >0 \b; partition 1: ID=0x%x ->>>>>>>>>>>>446 ubyte 0x80 \b, active ->>>>>>>>>>>>447 ubyte x \b, starthead %u -#>>>>>>>>>>>>448 ubyte x \b, start C_S: 0x%x -#>>>>>>>>>>>>448 ubeshort&1023 x \b, startcylinder? %d ->>>>>>>>>>>>454 ulelong x \b, startsector %u ->>>>>>>>>>>>458 ulelong x \b, %u sectors -# ->>>>>>>>>462 ubyte <0x81 ->>>>>>>>>>462 ubyte&0x7F 0 ->>>>>>>>>>>466 ubyte >0 \b; partition 2: ID=0x%x ->>>>>>>>>>>>462 ubyte 0x80 \b, active ->>>>>>>>>>>>463 ubyte x \b, starthead %u -#>>>>>>>>>>>>464 ubyte x \b, start C_S: 0x%x -#>>>>>>>>>>>>464 ubeshort&1023 x \b, startcylinder? %d ->>>>>>>>>>>>470 ulelong x \b, startsector %u ->>>>>>>>>>>>474 ulelong x \b, %u sectors -# ->>>>>>>>>478 ubyte <0x81 ->>>>>>>>>>478 ubyte&0x7F 0 ->>>>>>>>>>>482 ubyte >0 \b; partition 3: ID=0x%x ->>>>>>>>>>>>478 ubyte 0x80 \b, active ->>>>>>>>>>>>479 ubyte x \b, starthead %u -#>>>>>>>>>>>>480 ubyte x \b, start C_S: 0x%x -#>>>>>>>>>>>>481 ubyte x \b, start C2S: 0x%x -#>>>>>>>>>>>>480 ubeshort&1023 x \b, startcylinder? %d ->>>>>>>>>>>>486 ulelong x \b, startsector %u ->>>>>>>>>>>>490 ulelong x \b, %u sectors -# ->>>>>>>>>494 ubyte <0x81 ->>>>>>>>>>494 ubyte&0x7F 0 ->>>>>>>>>>>498 ubyte >0 \b; partition 4: ID=0x%x ->>>>>>>>>>>>494 ubyte 0x80 \b, active ->>>>>>>>>>>>495 ubyte x \b, starthead %u -#>>>>>>>>>>>>496 ubyte x \b, start C_S: 0x%x -#>>>>>>>>>>>>496 ubeshort&1023 x \b, startcylinder? %d ->>>>>>>>>>>>502 ulelong x \b, startsector %u ->>>>>>>>>>>>506 ulelong x \b, %u sectors -# mbr partion table entries end -# http://www.acronis.de/ -#FAT label=ACRONIS\ SZ -#OEM-ID=BOOTWIZ0 ->442 string Non-system\ disk,\ ->>459 string press\ any\ key...\x7\0 \b, Acronis Startup Recovery Loader -# DOS names like F11.SYS are 8 right space padded bytes+3 bytes ->>>477 ubyte&0xDF >0 ->>>>477 string x \b %-.3s ->>>>>480 ubyte&0xDF >0 ->>>>>>480 string x \b%-.5s ->>>>485 ubyte&0xDF >0 ->>>>>485 string x \b.%-.3s -# ->185 string FDBOOT\ Version\ ->>204 string \rNo\ Systemdisk.\ ->>>220 string Booting\ from\ harddisk.\n\r ->>>245 string Cannot\ load\ from\ harddisk.\n\r ->>>>273 string Insert\ Systemdisk\ ->>>>>291 string and\ press\ any\ key.\n\r \b, FDBOOT harddisk Bootloader ->>>>>>200 string >\0 \b, version %-3s ->242 string Bootsector\ from\ C.H.\ Hochst\204 ->>278 string No\ Systemdisk.\ ->>>293 string Booting\ from\ harddisk.\n\r ->>>441 string Cannot\ load\ from\ harddisk.\n\r ->>>>469 string Insert\ Systemdisk\ ->>>>>487 string and\ press\ any\ key.\n\r \b, WinImage harddisk Bootloader ->>>>>>209 string >\0 \b, version %-4.4s ->(1.b+2) ubyte 0xe ->>(1.b+3) ubyte 0x1f ->>>(1.b+4) ubyte 0xbe ->>>>(1.b+5) ubyte 0x77 ->>>>(1.b+6) ubyte 0x7c ->>>>>(1.b+7) ubyte 0xac ->>>>>>(1.b+8) ubyte 0x22 ->>>>>>>(1.b+9) ubyte 0xc0 ->>>>>>>>(1.b+10) ubyte 0x74 ->>>>>>>>>(1.b+11) ubyte 0xb ->>>>>>>>>>(1.b+12) ubyte 0x56 ->>>>>>>>>>(1.b+13) ubyte 0xb4 \b, mkdosfs boot message display ->214 string Please\ try\ to\ install\ FreeDOS\ \b, DOS Emulator boot message display -#>>244 string from\ dosemu-freedos-*-bin.tgz\r -#>>>170 string Sorry,\ could\ not\ load\ an\ -#>>>>195 string operating\ system.\r\n -# ->103 string This\ is\ not\ a\ bootable\ disk.\ ->>132 string Please\ insert\ a\ bootable\ ->>>157 string floppy\ and\r\n ->>>>169 string press\ any\ key\ to\ try\ again...\r \b, FREE-DOS message display -# ->66 string Solaris\ Boot\ Sector ->>99 string Incomplete\ MDBoot\ load. ->>>89 string Version \b, Sun Solaris Bootloader ->>>>97 byte x version %c -# ->408 string OS/2\ !!\ SYS01475\r\0 ->>429 string OS/2\ !!\ SYS02025\r\0 ->>>450 string OS/2\ !!\ SYS02027\r\0 ->>>469 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp bootloader -# ->409 string OS/2\ !!\ SYS01475\r\0 ->>430 string OS/2\ !!\ SYS02025\r\0 ->>>451 string OS/2\ !!\ SYS02027\r\0 ->>>470 string OS2BOOT\ \ \ \ \b, IBM OS/2 Warp Bootloader ->112 string This\ disk\ is\ not\ bootable\r ->>142 string If\ you\ wish\ to\ make\ it\ bootable ->>>176 string run\ the\ DOS\ program\ SYS\ ->>>200 string after\ the\r ->>>>216 string system\ has\ been\ loaded\r\n ->>>>>242 string Please\ insert\ a\ DOS\ diskette\ ->>>>>271 string into\r\n\ the\ drive\ and\ ->>>>>>292 string strike\ any\ key...\0 \b, IBM OS/2 Warp message display -# XP ->430 string NTLDR\ is\ missing\xFF\r\n ->>449 string Disk\ error\xFF\r\n ->>>462 string Press\ any\ key\ to\ restart\r \b, Microsoft Windows XP Bootloader -# DOS names like NTLDR,CMLDR,$LDR$ are 8 right space padded bytes+3 bytes ->>>>417 ubyte&0xDF >0 ->>>>>417 string x %-.5s ->>>>>>422 ubyte&0xDF >0 ->>>>>>>422 string x \b%-.3s ->>>>>425 ubyte&0xDF >0 ->>>>>>425 string >\ \b.%-.3s -# ->>>>371 ubyte >0x20 ->>>>>368 ubyte&0xDF >0 ->>>>>>368 string x %-.5s ->>>>>>>373 ubyte&0xDF >0 ->>>>>>>>373 string x \b%-.3s ->>>>>>376 ubyte&0xDF >0 ->>>>>>>376 string x \b.%-.3s -# ->430 string NTLDR\ nicht\ gefunden\xFF\r\n ->>453 string Datentr\204gerfehler\xFF\r\n ->>>473 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (german) ->>>>417 ubyte&0xDF >0 ->>>>>417 string x %-.5s ->>>>>>422 ubyte&0xDF >0 ->>>>>>>422 string x \b%-.3s ->>>>>425 ubyte&0xDF >0 ->>>>>>425 string >\ \b.%-.3s -# offset variant ->>>>379 string \0 ->>>>>368 ubyte&0xDF >0 ->>>>>>368 string x %-.5s ->>>>>>>373 ubyte&0xDF >0 ->>>>>>>>373 string x \b%-.3s -# ->430 string NTLDR\ fehlt\xFF\r\n ->>444 string Datentr\204gerfehler\xFF\r\n ->>>464 string Neustart\ mit\ beliebiger\ Taste\r \b, Microsoft Windows XP Bootloader (2.german) ->>>>417 ubyte&0xDF >0 ->>>>>417 string x %-.5s ->>>>>>422 ubyte&0xDF >0 ->>>>>>>422 string x \b%-.3s ->>>>>425 ubyte&0xDF >0 ->>>>>>425 string >\ \b.%-.3s -# variant ->>>>371 ubyte >0x20 ->>>>>368 ubyte&0xDF >0 ->>>>>>368 string x %-.5s ->>>>>>>373 ubyte&0xDF >0 ->>>>>>>>373 string x \b%-.3s ->>>>>>376 ubyte&0xDF >0 ->>>>>>>376 string x \b.%-.3s -# ->430 string NTLDR\ fehlt\xFF\r\n ->>444 string Medienfehler\xFF\r\n ->>>459 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (3.german) ->>>>371 ubyte >0x20 ->>>>>368 ubyte&0xDF >0 ->>>>>>368 string x %-.5s ->>>>>>>373 ubyte&0xDF >0 ->>>>>>>>373 string x \b%-.3s ->>>>>>376 ubyte&0xDF >0 ->>>>>>>376 string x \b.%-.3s -# variant ->>>>417 ubyte&0xDF >0 ->>>>>417 string x %-.5s ->>>>>>422 ubyte&0xDF >0 ->>>>>>>422 string x \b%-.3s ->>>>>425 ubyte&0xDF >0 ->>>>>>425 string >\ \b.%-.3s -# ->430 string Datentr\204ger\ entfernen\xFF\r\n ->>454 string Medienfehler\xFF\r\n ->>>469 string Neustart:\ Taste\ dr\201cken\r \b, Microsoft Windows XP Bootloader (4.german) ->>>>379 string \0 ->>>>>368 ubyte&0xDF >0 ->>>>>>368 string x %-.5s ->>>>>>>373 ubyte&0xDF >0 ->>>>>>>>373 string x \b%-.3s ->>>>>>376 ubyte&0xDF >0 ->>>>>>>376 string x \b.%-.3s -# variant ->>>>417 ubyte&0xDF >0 ->>>>>417 string x %-.5s ->>>>>>422 ubyte&0xDF >0 ->>>>>>>422 string x \b%-.3s ->>>>>425 ubyte&0xDF >0 ->>>>>>425 string >\ \b.%-.3s -# - -#>3 string NTFS\ \ \ \ ->389 string Fehler\ beim\ Lesen\ ->>407 string des\ Datentr\204gers ->>>426 string NTLDR\ fehlt ->>>>440 string NTLDR\ ist\ komprimiert ->>>>>464 string Neustart\ mit\ Strg+Alt+Entf\r \b, Microsoft Windows XP Bootloader NTFS (german) -#>3 string NTFS\ \ \ \ ->313 string A\ disk\ read\ error\ occurred.\r ->>345 string A\ kernel\ file\ is\ missing\ ->>>370 string from\ the\ disk.\r ->>>>484 string NTLDR\ is\ compressed ->>>>>429 string Insert\ a\ system\ diskette\ ->>>>>>454 string and\ restart\r\nthe\ system.\r \b, Microsoft Windows XP Bootloader NTFS -# DOS loader variants different languages,offsets ->472 ubyte&0xDF >0 ->>389 string Invalid\ system\ disk\xFF\r\n ->>>411 string Disk\ I/O\ error ->>>>428 string Replace\ the\ disk,\ and\ ->>>>>455 string press\ any\ key \b, Microsoft Windows 98 Bootloader -#IO.SYS ->>>>>>472 ubyte&0xDF >0 ->>>>>>>472 string x \b %-.2s ->>>>>>>>474 ubyte&0xDF >0 ->>>>>>>>>474 string x \b%-.5s ->>>>>>>>>>479 ubyte&0xDF >0 ->>>>>>>>>>>479 string x \b%-.1s ->>>>>>>480 ubyte&0xDF >0 ->>>>>>>>480 string x \b.%-.3s -#MSDOS.SYS ->>>>>>>483 ubyte&0xDF >0 \b+ ->>>>>>>>483 string x \b%-.5s ->>>>>>>>>488 ubyte&0xDF >0 ->>>>>>>>>>488 string x \b%-.3s ->>>>>>>>491 ubyte&0xDF >0 ->>>>>>>>>491 string x \b.%-.3s -# ->>390 string Invalid\ system\ disk\xFF\r\n ->>>412 string Disk\ I/O\ error\xFF\r\n ->>>>429 string Replace\ the\ disk,\ and\ ->>>>>451 string then\ press\ any\ key\r \b, Microsoft Windows 98 Bootloader ->>388 string Ungueltiges\ System\ \xFF\r\n ->>>410 string E/A-Fehler\ \ \ \ \xFF\r\n ->>>>427 string Datentraeger\ wechseln\ und\ ->>>>>453 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (german) -#WINBOOT.SYS only not spaces (0xDF) ->>>>>>497 ubyte&0xDF >0 ->>>>>>>497 string x %-.5s ->>>>>>>>502 ubyte&0xDF >0 ->>>>>>>>>502 string x \b%-.1s ->>>>>>>>>>503 ubyte&0xDF >0 ->>>>>>>>>>>503 string x \b%-.1s ->>>>>>>>>>>>504 ubyte&0xDF >0 ->>>>>>>>>>>>>504 string x \b%-.1s ->>>>>>505 ubyte&0xDF >0 ->>>>>>>505 string x \b.%-.3s -#IO.SYS ->>>>>>472 ubyte&0xDF >0 or ->>>>>>>472 string x \b %-.2s ->>>>>>>>474 ubyte&0xDF >0 ->>>>>>>>>474 string x \b%-.5s ->>>>>>>>>>479 ubyte&0xDF >0 ->>>>>>>>>>>479 string x \b%-.1s ->>>>>>>480 ubyte&0xDF >0 ->>>>>>>>480 string x \b.%-.3s -#MSDOS.SYS ->>>>>>>483 ubyte&0xDF >0 \b+ ->>>>>>>>483 string x \b%-.5s ->>>>>>>>>488 ubyte&0xDF >0 ->>>>>>>>>>488 string x \b%-.3s ->>>>>>>>491 ubyte&0xDF >0 ->>>>>>>>>491 string x \b.%-.3s -# ->>390 string Ungueltiges\ System\ \xFF\r\n ->>>412 string E/A-Fehler\ \ \ \ \xFF\r\n ->>>>429 string Datentraeger\ wechseln\ und\ ->>>>>455 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (German) -#WINBOOT.SYS only not spaces (0xDF) ->>>>>>497 ubyte&0xDF >0 ->>>>>>>497 string x %-.7s ->>>>>>>>504 ubyte&0xDF >0 ->>>>>>>>>504 string x \b%-.1s ->>>>>>505 ubyte&0xDF >0 ->>>>>>>505 string x \b.%-.3s -#IO.SYS ->>>>>>472 ubyte&0xDF >0 or ->>>>>>>472 string x \b %-.2s ->>>>>>>>474 ubyte&0xDF >0 ->>>>>>>>>474 string x \b%-.6s ->>>>>>>480 ubyte&0xDF >0 ->>>>>>>>480 string x \b.%-.3s -#MSDOS.SYS ->>>>>>>483 ubyte&0xDF >0 \b+ ->>>>>>>>483 string x \b%-.5s ->>>>>>>>>488 ubyte&0xDF >0 ->>>>>>>>>>488 string x \b%-.3s ->>>>>>>>491 ubyte&0xDF >0 ->>>>>>>>>491 string x \b.%-.3s -# ->>389 string Ungueltiges\ System\ \xFF\r\n ->>>411 string E/A-Fehler\ \ \ \ \xFF\r\n ->>>>428 string Datentraeger\ wechseln\ und\ ->>>>>454 string Taste\ druecken\r \b, Microsoft Windows 95/98/ME Bootloader (GERMAN) -# DOS names like IO.SYS,WINBOOT.SYS,MSDOS.SYS,WINBOOT.INI are 8 right space padded bytes+3 bytes ->>>>>>472 string x %-.2s ->>>>>>>474 ubyte&0xDF >0 ->>>>>>>>474 string x \b%-.5s ->>>>>>>>479 ubyte&0xDF >0 ->>>>>>>>>479 string x \b%-.1s ->>>>>>480 ubyte&0xDF >0 ->>>>>>>480 string x \b.%-.3s ->>>>>>483 ubyte&0xDF >0 \b+ ->>>>>>>483 string x \b%-.5s ->>>>>>>488 ubyte&0xDF >0 ->>>>>>>>488 string x \b%-.2s ->>>>>>>>490 ubyte&0xDF >0 ->>>>>>>>>490 string x \b%-.1s ->>>>>>>491 ubyte&0xDF >0 ->>>>>>>>491 string x \b.%-.3s ->479 ubyte&0xDF >0 ->>416 string Kein\ System\ oder\ ->>>433 string Laufwerksfehler ->>>>450 string Wechseln\ und\ Taste\ dr\201cken \b, Microsoft DOS Bootloader (german) -#IO.SYS ->>>>>479 string x \b %-.2s ->>>>>>481 ubyte&0xDF >0 ->>>>>>>481 string x \b%-.6s ->>>>>487 ubyte&0xDF >0 ->>>>>>487 string x \b.%-.3s -#MSDOS.SYS ->>>>>>490 ubyte&0xDF >0 \b+ ->>>>>>>490 string x \b%-.5s ->>>>>>>>495 ubyte&0xDF >0 ->>>>>>>>>495 string x \b%-.3s ->>>>>>>498 ubyte&0xDF >0 ->>>>>>>>498 string x \b.%-.3s -# ->376 search/41 Non-System\ disk\ or\ ->>395 search/41 disk\ error\r ->>>407 search/41 Replace\ and\ ->>>>419 search/41 press\ \b, ->>>>419 search/41 strike\ \b, old ->>>>426 search/41 any\ key\ when\ ready\r MS or PC-DOS bootloader -#449 Disk\ Boot\ failure\r MS 3.21 -#466 Boot\ Failure\r MS 3.30 ->>>>>468 search/18 \0 -#IO.SYS,IBMBIO.COM ->>>>>>&0 string x \b %-.2s ->>>>>>>&-20 ubyte&0xDF >0 ->>>>>>>>&-1 string x \b%-.4s ->>>>>>>>>&-16 ubyte&0xDF >0 ->>>>>>>>>>&-1 string x \b%-.2s ->>>>>>&8 ubyte&0xDF >0 \b. ->>>>>>>&-1 string x \b%-.3s -#MSDOS.SYS,IBMDOS.COM ->>>>>>&11 ubyte&0xDF >0 \b+ ->>>>>>>&-1 string x \b%-.5s ->>>>>>>>&-6 ubyte&0xDF >0 ->>>>>>>>>&-1 string x \b%-.1s ->>>>>>>>>>&-5 ubyte&0xDF >0 ->>>>>>>>>>>&-1 string x \b%-.2s ->>>>>>>&7 ubyte&0xDF >0 \b. ->>>>>>>>&-1 string x \b%-.3s ->441 string Cannot\ load\ from\ harddisk.\n\r ->>469 string Insert\ Systemdisk\ ->>>487 string and\ press\ any\ key.\n\r \b, MS (2.11) DOS bootloader -#>43 string \224R-LOADER\ \ SYS =label ->54 string SYS ->>324 string VASKK ->>>495 string NEWLDR\0 \b, DR-DOS Bootloader (LOADER.SYS) -# ->98 string Press\ a\ key\ to\ retry\0\r ->>120 string Cannot\ find\ file\ \0\r ->>>139 string Disk\ read\ error\0\r ->>>>156 string Loading\ ...\0 \b, DR-DOS (3.41) Bootloader -#DRBIOS.SYS ->>>>>44 ubyte&0xDF >0 ->>>>>>44 string x \b %-.6s ->>>>>>>50 ubyte&0xDF >0 ->>>>>>>>50 string x \b%-.2s ->>>>>>52 ubyte&0xDF >0 ->>>>>>>52 string x \b.%-.3s -# ->70 string IBMBIO\ \ COM ->>472 string Cannot\ load\ DOS!\ ->>>489 string Any\ key\ to\ retry \b, DR-DOS Bootloader ->>471 string Cannot\ load\ DOS\ ->>487 string press\ key\ to\ retry \b, Open-DOS Bootloader -#?? ->444 string KERNEL\ \ SYS ->>314 string BOOT\ error! \b, FREE-DOS Bootloader ->499 string KERNEL\ \ SYS ->>305 string BOOT\ err!\0 \b, Free-DOS Bootloader ->449 string KERNEL\ \ SYS ->>319 string BOOT\ error! \b, FREE-DOS 0.5 Bootloader -# ->449 string Loading\ FreeDOS ->>0x1AF ulelong >0 \b, FREE-DOS 0.95,1.0 Bootloader ->>>497 ubyte&0xDF >0 ->>>>497 string x \b %-.6s ->>>>>503 ubyte&0xDF >0 ->>>>>>503 string x \b%-.1s ->>>>>>>504 ubyte&0xDF >0 ->>>>>>>>504 string x \b%-.1s ->>>>505 ubyte&0xDF >0 ->>>>>505 string x \b.%-.3s -# ->331 string Error!.0 \b, FREE-DOS 1.0 bootloader -# ->125 string Loading\ FreeDOS...\r ->>311 string BOOT\ error!\r \b, FREE-DOS bootloader ->>>441 ubyte&0xDF >0 ->>>>441 string x \b %-.6s ->>>>>447 ubyte&0xDF >0 ->>>>>>447 string x \b%-.1s ->>>>>>>448 ubyte&0xDF >0 ->>>>>>>>448 string x \b%-.1s ->>>>449 ubyte&0xDF >0 ->>>>>449 string x \b.%-.3s ->124 string FreeDOS\0 ->>331 string \ err\0 \b, FREE-DOS BETa 0.9 Bootloader -# DOS names like KERNEL.SYS,KERNEL16.SYS,KERNEL32.SYS,METAKERN.SYS are 8 right space padded bytes+3 bytes ->>>497 ubyte&0xDF >0 ->>>>497 string x \b %-.6s ->>>>>503 ubyte&0xDF >0 ->>>>>>503 string x \b%-.1s ->>>>>>>504 ubyte&0xDF >0 ->>>>>>>>504 string x \b%-.1s ->>>>505 ubyte&0xDF >0 ->>>>>505 string x \b.%-.3s ->>333 string \ err\0 \b, FREE-DOS BEta 0.9 Bootloader ->>>497 ubyte&0xDF >0 ->>>>497 string x \b %-.6s ->>>>>503 ubyte&0xDF >0 ->>>>>>503 string x \b%-.1s ->>>>>>>504 ubyte&0xDF >0 ->>>>>>>>504 string x \b%-.1s ->>>>505 ubyte&0xDF >0 ->>>>>505 string x \b.%-.3s ->>334 string \ err\0 \b, FREE-DOS Beta 0.9 Bootloader ->>>497 ubyte&0xDF >0 ->>>>497 string x \b %-.6s ->>>>>503 ubyte&0xDF >0 ->>>>>>503 string x \b%-.1s ->>>>>>>504 ubyte&0xDF >0 ->>>>>>>>504 string x \b%-.1s ->>>>505 ubyte&0xDF >0 ->>>>>505 string x \b.%-.3s ->336 string Error!\ ->>343 string Hit\ a\ key\ to\ reboot. \b, FREE-DOS Beta 0.9sr1 Bootloader ->>>497 ubyte&0xDF >0 ->>>>497 string x \b %-.6s ->>>>>503 ubyte&0xDF >0 ->>>>>>503 string x \b%-.1s ->>>>>>>504 ubyte&0xDF >0 ->>>>>>>>504 string x \b%-.1s ->>>>505 ubyte&0xDF >0 ->>>>>505 string x \b.%-.3s -# added by Joerg Jenderek -# http://www.visopsys.org/ -# http://partitionlogic.org.uk/ -# OEM-ID=Visopsys ->478 ulelong 0 ->>(1.b+326) string I/O\ Error\ reading\ ->>>(1.b+344) string Visopsys\ loader\r ->>>>(1.b+361) string Press\ any\ key\ to\ continue.\r \b, Visopsys loader -# http://alexfru.chat.ru/epm.html#bootprog ->494 ubyte >0x4D ->>495 string >E ->>>495 string >>>3 string BootProg -# It just looks for a program file name at the root directory -# and loads corresponding file with following execution. -# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes ->>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader ->>>>>499 string x \b %-.1s ->>>>>>500 ubyte&0xDF >0 ->>>>>>>500 string x \b%-.1s ->>>>>>>>501 ubyte&0xDF >0 ->>>>>>>>>501 string x \b%-.1s ->>>>>>>>>>502 ubyte&0xDF >0 ->>>>>>>>>>>502 string x \b%-.1s ->>>>>>>>>>>>503 ubyte&0xDF >0 ->>>>>>>>>>>>>503 string x \b%-.1s ->>>>>>>>>>>>>>504 ubyte&0xDF >0 ->>>>>>>>>>>>>>>504 string x \b%-.1s ->>>>>>>>>>>>>>>>505 ubyte&0xDF >0 ->>>>>>>>>>>>>>>>>505 string x \b%-.1s ->>>>>>>>>>>>>>>>>>506 ubyte&0xDF >0 ->>>>>>>>>>>>>>>>>>>506 string x \b%-.1s -#name extension ->>>>>507 ubyte&0xDF >0 \b. ->>>>>>507 string x \b%-.1s ->>>>>>>508 ubyte&0xDF >0 ->>>>>>>>508 string x \b%-.1s ->>>>>>>>>509 ubyte&0xDF >0 ->>>>>>>>>>509 string x \b%-.1s -#If the boot sector fails to read any other sector, -#it prints a very short message ("RE") to the screen and hangs the computer. -#If the boot sector fails to find needed program in the root directory, -#it also hangs with another message ("NF"). ->>>>>492 string RENF \b, FAT (12 bit) ->>>>>495 string RENF \b, FAT (16 bit) -# http://alexfru.chat.ru/epm.html#bootprog ->494 ubyte >0x4D ->>495 string >E ->>>495 string >>>3 string BootProg -# It just looks for a program file name at the root directory -# and loads corresponding file with following execution. -# DOS names like STARTUP.BIN,STARTUPC.COM,STARTUPE.EXE are 8 right space padded bytes+3 bytes ->>>>499 ubyte&0xDF >0 \b, COM/EXE Bootloader ->>>>>499 string x \b %-.1s ->>>>>>500 ubyte&0xDF >0 ->>>>>>>500 string x \b%-.1s ->>>>>>>>501 ubyte&0xDF >0 ->>>>>>>>>501 string x \b%-.1s ->>>>>>>>>>502 ubyte&0xDF >0 ->>>>>>>>>>>502 string x \b%-.1s ->>>>>>>>>>>>503 ubyte&0xDF >0 ->>>>>>>>>>>>>503 string x \b%-.1s ->>>>>>>>>>>>>>504 ubyte&0xDF >0 ->>>>>>>>>>>>>>>504 string x \b%-.1s ->>>>>>>>>>>>>>>>505 ubyte&0xDF >0 ->>>>>>>>>>>>>>>>>505 string x \b%-.1s ->>>>>>>>>>>>>>>>>>506 ubyte&0xDF >0 ->>>>>>>>>>>>>>>>>>>506 string x \b%-.1s -#name extension ->>>>>507 ubyte&0xDF >0 \b. ->>>>>>507 string x \b%-.1s ->>>>>>>508 ubyte&0xDF >0 ->>>>>>>>508 string x \b%-.1s ->>>>>>>>>509 ubyte&0xDF >0 ->>>>>>>>>>509 string x \b%-.1s -#If the boot sector fails to read any other sector, -#it prints a very short message ("RE") to the screen and hangs the computer. -#If the boot sector fails to find needed program in the root directory, -#it also hangs with another message ("NF"). ->>>>>492 string RENF \b, FAT (12 bit) ->>>>>495 string RENF \b, FAT (16 bit) -# x86 bootloader end -# updated by Joerg Jenderek at Sep 2007 ->3 ubyte 0 -#no active flag ->>446 ubyte 0 -# partition 1 not empty ->>>450 ubyte >0 -# partitions 3,4 empty ->>>>482 ubyte 0 ->>>>>498 ubyte 0 -# partition 2 ID=0,5,15 ->>>>>>466 ubyte <0x10 ->>>>>>>466 ubyte 0x05 \b, extended partition table ->>>>>>>466 ubyte 0x0F \b, extended partition table (LBA) ->>>>>>>466 ubyte 0x0 \b, extended partition table (last) -# JuMP short bootcodeoffset NOP assembler instructions will usually be EB xx 90 -# http://mirror.href.com/thestarman/asm/2bytejumps.htmm#FWD -# older drives may use Near JuMP instruction E9 xx xx ->0 lelong&0x009000EB 0x009000EB ->0 lelong&0x000000E9 0x000000E9 -# minimal short forward jump found 03cx?? -# maximal short forward jump is 07fx ->1 ubyte <0xff \b, code offset 0x%x -# mtools-3.9.8/msdos.h -# usual values are marked with comments to get only informations of strange FAT systems -# valid sectorsize must be a power of 2 from 32 to 32768 ->>11 uleshort&0x000f x ->>>11 uleshort <32769 ->>>>11 uleshort >31 ->>>>>21 ubyte&0xf0 0xF0 ->>>>>>3 string >\0 \b, OEM-ID "%8.8s" -#http://mirror.href.com/thestarman/asm/debug/debug2.htm#IHC ->>>>>>>8 string IHC \b cached by Windows 9M ->>>>>>11 uleshort >512 \b, Bytes/sector %u -#>>>>>>11 uleshort =512 \b, Bytes/sector %u=512 (usual) ->>>>>>11 uleshort <512 \b, Bytes/sector %u ->>>>>>13 ubyte >1 \b, sectors/cluster %u -#>>>>>>13 ubyte =1 \b, sectors/cluster %u (usual on Floppies) ->>>>>>14 uleshort >32 \b, reserved sectors %u -#>>>>>>14 uleshort =32 \b, reserved sectors %u (usual Fat32) -#>>>>>>14 uleshort >1 \b, reserved sectors %u -#>>>>>>14 uleshort =1 \b, reserved sectors %u (usual FAT12,FAT16) ->>>>>>14 uleshort <1 \b, reserved sectors %u ->>>>>>16 ubyte >2 \b, FATs %u -#>>>>>>16 ubyte =2 \b, FATs %u (usual) ->>>>>>16 ubyte =1 \b, FAT %u ->>>>>>16 ubyte >0 ->>>>>>17 uleshort >0 \b, root entries %u -#>>>>>>17 uleshort =0 \b, root entries %u=0 (usual Fat32) ->>>>>>19 uleshort >0 \b, sectors %u (volumes <=32 MB) -#>>>>>>19 uleshort =0 \b, sectors %u=0 (usual Fat32) ->>>>>>21 ubyte >0xF0 \b, Media descriptor 0x%x -#>>>>>>21 ubyte =0xF0 \b, Media descriptor 0x%x (usual floppy) ->>>>>>21 ubyte <0xF0 \b, Media descriptor 0x%x ->>>>>>22 uleshort >0 \b, sectors/FAT %u -#>>>>>>22 uleshort =0 \b, sectors/FAT %u=0 (usual Fat32) ->>>>>>26 ubyte >2 \b, heads %u -#>>>>>>26 ubyte =2 \b, heads %u (usual floppy) ->>>>>>26 ubyte =1 \b, heads %u -#skip for Digital Research DOS (version 3.41) 1440 kB Bootdisk ->>>>>>38 ubyte !0x70 ->>>>>>>28 ulelong >0 \b, hidden sectors %u -#>>>>>>>28 ulelong =0 \b, hidden sectors %u (usual floppy) ->>>>>>>32 ulelong >0 \b, sectors %u (volumes > 32 MB) -#>>>>>>>32 ulelong =0 \b, sectors %u (volumes > 32 MB) -# FAT<32 specific ->>>>>>82 string !FAT32 -#>>>>>>>36 ubyte 0x80 \b, physical drive 0x%x=0x80 (usual harddisk) -#>>>>>>>36 ubyte 0 \b, physical drive 0x%x=0 (usual floppy) ->>>>>>>36 ubyte !0x80 ->>>>>>>>36 ubyte !0 \b, physical drive 0x%x ->>>>>>>37 ubyte >0 \b, reserved 0x%x -#>>>>>>>37 ubyte =0 \b, reserved 0x%x ->>>>>>>38 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>>38 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>>38 ubyte =0x29 ->>>>>>>>39 ulelong x \b, serial number 0x%x ->>>>>>>>43 string >>>>>>>43 string >NO\ NAME \b, label: "%11.11s" ->>>>>>>>43 string =NO\ NAME \b, unlabeled ->>>>>>>54 string FAT \b, FAT ->>>>>>>>54 string FAT12 \b (12 bit) ->>>>>>>>54 string FAT16 \b (16 bit) -# FAT32 specific ->>>>>>82 string FAT32 \b, FAT (32 bit) ->>>>>>>36 ulelong x \b, sectors/FAT %u ->>>>>>>40 uleshort >0 \b, extension flags %u -#>>>>>>>40 uleshort =0 \b, extension flags %u ->>>>>>>42 uleshort >0 \b, fsVersion %u -#>>>>>>>42 uleshort =0 \b, fsVersion %u (usual) ->>>>>>>44 ulelong >2 \b, rootdir cluster %u -#>>>>>>>44 ulelong =2 \b, rootdir cluster %u -#>>>>>>>44 ulelong =1 \b, rootdir cluster %u ->>>>>>>48 uleshort >1 \b, infoSector %u -#>>>>>>>48 uleshort =1 \b, infoSector %u (usual) ->>>>>>>48 uleshort <1 \b, infoSector %u ->>>>>>>50 uleshort >6 \b, Backup boot sector %u -#>>>>>>>50 uleshort =6 \b, Backup boot sector %u (usual) ->>>>>>>50 uleshort <6 \b, Backup boot sector %u ->>>>>>>54 ulelong >0 \b, reserved1 0x%x ->>>>>>>58 ulelong >0 \b, reserved2 0x%x ->>>>>>>62 ulelong >0 \b, reserved3 0x%x -# same structure as FAT1X ->>>>>>>64 ubyte >0x80 \b, physical drive 0x%x -#>>>>>>>64 ubyte =0x80 \b, physical drive 0x%x=80 (usual harddisk) ->>>>>>>64 ubyte&0x7F >0 \b, physical drive 0x%x -#>>>>>>>64 ubyte =0 \b, physical drive 0x%x=0 (usual floppy) ->>>>>>>65 ubyte >0 \b, reserved 0x%x ->>>>>>>66 ubyte >0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>>66 ubyte <0x29 \b, dos < 4.0 BootSector (0x%x) ->>>>>>>66 ubyte =0x29 ->>>>>>>>67 ulelong x \b, serial number 0x%x ->>>>>>>>71 string >>>>>>71 string >NO\ NAME \b, label: "%11.11s" ->>>>>>>71 string =NO\ NAME \b, unlabeled -### FATs end ->0x200 lelong 0x82564557 \b, BSD disklabel -# FATX -0 string FATX FATX filesystem data - - -# Minix filesystems - Juan Cespedes -0x410 leshort 0x137f Minix filesystem -0x410 beshort 0x137f Minix filesystem (big endian) ->0x402 beshort !0 \b, %d zones ->0x1e string minix \b, bootable -0x410 leshort 0x138f Minix filesystem, 30 char names -0x410 leshort 0x2468 Minix filesystem, version 2 -0x410 leshort 0x2478 Minix filesystem, version 2, 30 char names - -# romfs filesystems - Juan Cespedes -0 string -rom1fs- romfs filesystem, version 1 ->8 belong x %d bytes, ->16 string x named %s. - -# netboot image - Juan Cespedes -0 lelong 0x1b031336L Netboot image, ->4 lelong&0xFFFFFF00 0 ->>4 lelong&0x100 0x000 mode 2 ->>4 lelong&0x100 0x100 mode 3 ->4 lelong&0xFFFFFF00 !0 unknown mode - -0x18b string OS/2 OS/2 Boot Manager - -# updated by Joerg Jenderek at Oct 2008!! -# http://syslinux.zytor.com/iso.php -0 ulelong 0x7c40eafa isolinux Loader -# http://syslinux.zytor.com/pxe.php -0 ulelong 0x007c05ea pxelinux Loader -0 ulelong 0x60669c66 pxelinux Loader - -# added by Joerg Jenderek -# In the second sector (+0x200) are variables according to grub-0.97/stage2/asm.S or -# grub-1.94/kern/i386/pc/startup.S -# http://www.gnu.org/software/grub/manual/grub.html#Embedded-data -# usual values are marked with comments to get only informations of strange GRUB loaders -0x200 uleshort 0x70EA -# found only version 3.{1,2} ->0x206 ubeshort >0x0300 -# GRUB version (0.5.)95,0.93,0.94,0.96,0.97 > "00" ->>0x212 ubyte >0x29 ->>>0x213 ubyte >0x29 -# not iso9660_stage1_5 -#>>>0 ulelong&0x00BE5652 0x00BE5652 ->>>>0x213 ubyte >0x29 GRand Unified Bootloader -# config_file for stage1_5 is 0xffffffff + default "/boot/grub/stage2" ->>>>0x217 ubyte 0xFF stage1_5 ->>>>0x217 ubyte <0xFF stage2 ->>>>0x206 ubyte x \b version %u ->>>>0x207 ubyte x \b.%u -# module_size for 1.94 ->>>>0x208 ulelong <0xffffff \b, installed partition %u -#>>>>0x208 ulelong =0xffffff \b, %u (default) ->>>>0x208 ulelong >0xffffff \b, installed partition %u -# GRUB 0.5.95 unofficial ->>>>0x20C ulelong&0x2E300000 0x2E300000 -# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs ->>>>>0x20C ubyte x \b, identifier 0x%x -#>>>>>0x20D ubyte =0 \b, LBA flag 0x%x (default) ->>>>>0x20D ubyte >0 \b, LBA flag 0x%x -# GRUB version as string ->>>>>0x20E string >\0 \b, GRUB version %-s -# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default ->>>>>>0x215 ulong 0xffffffff ->>>>>>>0x219 string >\0 \b, configuration file %-s ->>>>>>0x215 ulong !0xffffffff ->>>>>>>0x215 string >\0 \b, configuration file %-s -# newer GRUB versions ->>>>0x20C ulelong&0x2E300000 !0x2E300000 -##>>>>>0x20C ulelong =0 \b, saved entry %d (usual) ->>>>>0x20C ulelong >0 \b, saved entry %d -# for 1.94 contains kernel image size -# for 0.93,0.94,0.96,0.97 -# 0=stage2 1=ffs 2=e2fs 3=fat 4=minix 5=reiserfs 6=vstafs 7=jfs 8=xfs 9=iso9660 a=ufs2 ->>>>>0x210 ubyte x \b, identifier 0x%x -# The flag for LBA forcing is in most cases 0 -#>>>>>0x211 ubyte =0 \b, LBA flag 0x%x (default) ->>>>>0x211 ubyte >0 \b, LBA flag 0x%x -# GRUB version as string ->>>>>0x212 string >\0 \b, GRUB version %-s -# for stage1_5 is 0xffffffff + config_file "/boot/grub/stage2" default ->>>>>0x217 ulong 0xffffffff ->>>>>>0x21b string >\0 \b, configuration file %-s ->>>>>0x217 ulong !0xffffffff ->>>>>>0x217 string >\0 \b, configuration file %-s - -9564 lelong 0x00011954 Unix Fast File system [v1] (little-endian), ->8404 string x last mounted on %s, -#>9504 ledate x last checked at %s, ->8224 ledate x last written at %s, ->8401 byte x clean flag %d, ->8228 lelong x number of blocks %d, ->8232 lelong x number of data blocks %d, ->8236 lelong x number of cylinder groups %d, ->8240 lelong x block size %d, ->8244 lelong x fragment size %d, ->8252 lelong x minimum percentage of free blocks %d, ->8256 lelong x rotational delay %dms, ->8260 lelong x disk rotational speed %drps, ->8320 lelong 0 TIME optimization ->8320 lelong 1 SPACE optimization - -42332 lelong 0x19540119 Unix Fast File system [v2] (little-endian) ->&-1164 string x last mounted on %s, ->&-696 string >\0 volume name %s, ->&-304 leqldate x last written at %s, ->&-1167 byte x clean flag %d, ->&-1168 byte x readonly flag %d, ->&-296 lequad x number of blocks %lld, ->&-288 lequad x number of data blocks %lld, ->&-1332 lelong x number of cylinder groups %d, ->&-1328 lelong x block size %d, ->&-1324 lelong x fragment size %d, ->&-180 lelong x average file size %d, ->&-176 lelong x average number of files in dir %d, ->&-272 lequad x pending blocks to free %lld, ->&-264 lelong x pending inodes to free %ld, ->&-664 lequad x system-wide uuid %0llx, ->&-1316 lelong x minimum percentage of free blocks %d, ->&-1248 lelong 0 TIME optimization ->&-1248 lelong 1 SPACE optimization - -66908 lelong 0x19540119 Unix Fast File system [v2] (little-endian) ->&-1164 string x last mounted on %s, ->&-696 string >\0 volume name %s, ->&-304 leqldate x last written at %s, ->&-1167 byte x clean flag %d, ->&-1168 byte x readonly flag %d, ->&-296 lequad x number of blocks %lld, ->&-288 lequad x number of data blocks %lld, ->&-1332 lelong x number of cylinder groups %d, ->&-1328 lelong x block size %d, ->&-1324 lelong x fragment size %d, ->&-180 lelong x average file size %d, ->&-176 lelong x average number of files in dir %d, ->&-272 lequad x pending blocks to free %lld, ->&-264 lelong x pending inodes to free %ld, ->&-664 lequad x system-wide uuid %0llx, ->&-1316 lelong x minimum percentage of free blocks %d, ->&-1248 lelong 0 TIME optimization ->&-1248 lelong 1 SPACE optimization - -9564 belong 0x00011954 Unix Fast File system [v1] (big-endian), ->7168 belong 0x4c41424c Apple UFS Volume ->>7186 string x named %s, ->>7176 belong x volume label version %d, ->>7180 bedate x created on %s, ->8404 string x last mounted on %s, -#>9504 bedate x last checked at %s, ->8224 bedate x last written at %s, ->8401 byte x clean flag %d, ->8228 belong x number of blocks %d, ->8232 belong x number of data blocks %d, ->8236 belong x number of cylinder groups %d, ->8240 belong x block size %d, ->8244 belong x fragment size %d, ->8252 belong x minimum percentage of free blocks %d, ->8256 belong x rotational delay %dms, ->8260 belong x disk rotational speed %drps, ->8320 belong 0 TIME optimization ->8320 belong 1 SPACE optimization - -42332 belong 0x19540119 Unix Fast File system [v2] (big-endian) ->&-1164 string x last mounted on %s, ->&-696 string >\0 volume name %s, ->&-304 beqldate x last written at %s, ->&-1167 byte x clean flag %d, ->&-1168 byte x readonly flag %d, ->&-296 bequad x number of blocks %lld, ->&-288 bequad x number of data blocks %lld, ->&-1332 belong x number of cylinder groups %d, ->&-1328 belong x block size %d, ->&-1324 belong x fragment size %d, ->&-180 belong x average file size %d, ->&-176 belong x average number of files in dir %d, ->&-272 bequad x pending blocks to free %lld, ->&-264 belong x pending inodes to free %ld, ->&-664 bequad x system-wide uuid %0llx, ->&-1316 belong x minimum percentage of free blocks %d, ->&-1248 belong 0 TIME optimization ->&-1248 belong 1 SPACE optimization - -66908 belong 0x19540119 Unix Fast File system [v2] (big-endian) ->&-1164 string x last mounted on %s, ->&-696 string >\0 volume name %s, ->&-304 beqldate x last written at %s, ->&-1167 byte x clean flag %d, ->&-1168 byte x readonly flag %d, ->&-296 bequad x number of blocks %lld, ->&-288 bequad x number of data blocks %lld, ->&-1332 belong x number of cylinder groups %d, ->&-1328 belong x block size %d, ->&-1324 belong x fragment size %d, ->&-180 belong x average file size %d, ->&-176 belong x average number of files in dir %d, ->&-272 bequad x pending blocks to free %lld, ->&-264 belong x pending inodes to free %ld, ->&-664 bequad x system-wide uuid %0llx, ->&-1316 belong x minimum percentage of free blocks %d, ->&-1248 belong 0 TIME optimization ->&-1248 belong 1 SPACE optimization - -# ext2/ext3 filesystems - Andreas Dilger -# ext4 filesystem - Eric Sandeen -# volume label and UUID Russell Coker -# http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/ -0x438 leshort 0xEF53 Linux ->0x44c lelong x rev %d ->0x43e leshort x \b.%d -# No journal? ext2 ->0x45c lelong ^0x0000004 ext2 filesystem data ->>0x43a leshort ^0x0000001 (mounted or unclean) -# Has a journal? ext3 or ext4 ->0x45c lelong &0x0000004 -# and small INCOMPAT? ->>0x460 lelong <0x0000040 -# and small RO_COMPAT? ->>>0x464 lelong <0x0000008 ext3 filesystem data -# else large RO_COMPAT? ->>>0x464 lelong >0x0000007 ext4 filesystem data -# else large INCOMPAT? ->>0x460 lelong >0x000003f ext4 filesystem data ->0x468 belong x \b, UUID=%08x ->0x46c beshort x \b-%04x ->0x46e beshort x \b-%04x ->0x470 beshort x \b-%04x ->0x472 belong x \b-%08x ->0x476 beshort x \b%04x ->0x478 string >0 \b, volume name "%s" -# General flags for any ext* fs ->0x460 lelong &0x0000004 (needs journal recovery) ->0x43a leshort &0x0000002 (errors) -# INCOMPAT flags ->0x460 lelong &0x0000001 (compressed) -#>0x460 lelong &0x0000002 (filetype) -#>0x460 lelong &0x0000010 (meta bg) ->0x460 lelong &0x0000040 (extents) ->0x460 lelong &0x0000080 (64bit) -#>0x460 lelong &0x0000100 (mmp) -#>0x460 lelong &0x0000200 (flex bg) -# RO_INCOMPAT flags -#>0x464 lelong &0x0000001 (sparse super) ->0x464 lelong &0x0000002 (large files) ->0x464 lelong &0x0000008 (huge files) -#>0x464 lelong &0x0000010 (gdt checksum) -#>0x464 lelong &0x0000020 (many subdirs) -#>0x463 lelong &0x0000040 (extra isize) - -# SGI disk labels - Nathan Scott -0 belong 0x0BE5A941 SGI disk label (volume header) - -# SGI XFS filesystem - Nathan Scott -0 belong 0x58465342 SGI XFS filesystem data ->0x4 belong x (blksz %d, ->0x68 beshort x inosz %d, ->0x64 beshort ^0x2004 v1 dirs) ->0x64 beshort &0x2004 v2 dirs) - -############################################################################ -# Minix-ST kernel floppy -0x800 belong 0x46fc2700 Atari-ST Minix kernel image ->19 string \240\5\371\5\0\011\0\2\0 \b, 720k floppy ->19 string \320\2\370\5\0\011\0\1\0 \b, 360k floppy - -############################################################################ -# Hmmm, is this a better way of detecting _standard_ floppy images ? -19 string \320\2\360\3\0\011\0\1\0 DOS floppy 360k ->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector -19 string \240\5\371\3\0\011\0\2\0 DOS floppy 720k ->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector -19 string \100\013\360\011\0\022\0\2\0 DOS floppy 1440k ->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector - -19 string \240\5\371\5\0\011\0\2\0 DOS floppy 720k, IBM ->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector -19 string \100\013\371\5\0\011\0\2\0 DOS floppy 1440k, mkdosfs ->0x1FE leshort 0xAA55 \b, x86 hard disk boot sector - -19 string \320\2\370\5\0\011\0\1\0 Atari-ST floppy 360k -19 string \240\5\371\5\0\011\0\2\0 Atari-ST floppy 720k - -# Valid media descriptor bytes for MS-DOS: -# -# Byte Capacity Media Size and Type -# ------------------------------------------------- -# -# F0 2.88 MB 3.5-inch, 2-sided, 36-sector -# F0 1.44 MB 3.5-inch, 2-sided, 18-sector -# F9 720K 3.5-inch, 2-sided, 9-sector -# F9 1.2 MB 5.25-inch, 2-sided, 15-sector -# FD 360K 5.25-inch, 2-sided, 9-sector -# FF 320K 5.25-inch, 2-sided, 8-sector -# FC 180K 5.25-inch, 1-sided, 9-sector -# FE 160K 5.25-inch, 1-sided, 8-sector -# FE 250K 8-inch, 1-sided, single-density -# FD 500K 8-inch, 2-sided, single-density -# FE 1.2 MB 8-inch, 2-sided, double-density -# F8 ----- Fixed disk -# -# FC xxxK Apricot 70x1x9 boot disk. -# -# Originally a bitmap: -# xxxxxxx0 Not two sided -# xxxxxxx1 Double sided -# xxxxxx0x Not 8 SPT -# xxxxxx1x 8 SPT -# xxxxx0xx Not Removable drive -# xxxxx1xx Removable drive -# 11111xxx Must be one. -# -# But now it's rather random: -# 111111xx Low density disk -# 00 SS, Not 8 SPT -# 01 DS, Not 8 SPT -# 10 SS, 8 SPT -# 11 DS, 8 SPT -# -# 11111001 Double density 3 floppy disk, high density 5 -# 11110000 High density 3 floppy disk -# 11111000 Hard disk any format -# - -# CDROM Filesystems -# Modified for UDF by gerardo.cacciari@gmail.com -32769 string CD001 -!:mime application/x-iso9660-image ->38913 string !NSR0 ISO 9660 CD-ROM filesystem data ->38913 string NSR0 UDF filesystem data ->>38917 string 1 (version 1.0) ->>38917 string 2 (version 1.5) ->>38917 string 3 (version 2.0) ->>38917 byte >0x33 (unknown version, ID 0x%X) ->>38917 byte <0x31 (unknown version, ID 0x%X) -# "application id" which appears to be used as a volume label ->32808 string >\0 '%s' ->34816 string \000CD001\001EL\ TORITO\ SPECIFICATION (bootable) -37633 string CD001 ISO 9660 CD-ROM filesystem data (raw 2352 byte sectors) -!:mime application/x-iso9660-image -32776 string CDROM High Sierra CD-ROM filesystem data - -# cramfs filesystem - russell@coker.com.au -0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian ->4 lelong x size %lu ->8 lelong &1 version #2 ->8 lelong &2 sorted_dirs ->8 lelong &4 hole_support ->32 lelong x CRC 0x%x, ->36 lelong x edition %lu, ->40 lelong x %lu blocks, ->44 lelong x %lu files - -0 belong 0x28cd3d45 Linux Compressed ROM File System data, big endian ->4 belong x size %lu ->8 belong &1 version #2 ->8 belong &2 sorted_dirs ->8 belong &4 hole_support ->32 belong x CRC 0x%x, ->36 belong x edition %lu, ->40 belong x %lu blocks, ->44 belong x %lu files - -# reiserfs - russell@coker.com.au -0x10034 string ReIsErFs ReiserFS V3.5 -0x10034 string ReIsEr2Fs ReiserFS V3.6 -0x10034 string ReIsEr3Fs ReiserFS V3.6.19 ->0x1002c leshort x block size %d ->0x10032 leshort &2 (mounted or unclean) ->0x10000 lelong x num blocks %d ->0x10040 lelong 1 tea hash ->0x10040 lelong 2 yura hash ->0x10040 lelong 3 r5 hash - -# JFFS - russell@coker.com.au -0 lelong 0x34383931 Linux Journalled Flash File system, little endian -0 belong 0x34383931 Linux Journalled Flash File system, big endian - -# EST flat binary format (which isn't, but anyway) -# From: Mark Brown -0 string ESTFBINR EST flat binary - -# Aculab VoIP firmware -# From: Mark Brown -0 string VoIP\ Startup\ and Aculab VoIP firmware ->35 string x format %s - -# u-boot/PPCBoot image file -# From: Mark Brown -0 belong 0x27051956 u-boot/PPCBoot image ->4 string PPCBoot ->>12 string x version %s - -# JFFS2 file system -0 leshort 0x1984 Linux old jffs2 filesystem data little endian -0 leshort 0x1985 Linux jffs2 filesystem data little endian - -# Squashfs -0 string sqsh Squashfs filesystem, big endian, ->28 beshort x version %d. ->30 beshort x \b%d, ->28 beshort <3 ->>8 belong x %d bytes, ->28 beshort >2 ->>63 bequad x %lld bytes, -#>>67 belong x %d bytes, ->4 belong x %d inodes, ->28 beshort <2 ->>32 beshort x blocksize: %d bytes, ->28 beshort >1 ->>51 belong x blocksize: %d bytes, ->39 bedate x created: %s -0 string hsqs Squashfs filesystem, little endian, ->28 leshort x version %d. ->30 leshort x \b%d, ->28 leshort <3 ->>8 lelong x %d bytes, ->28 leshort >2 ->>63 lequad x %lld bytes, -#>>63 lelong x %d bytes, ->4 lelong x %d inodes, ->28 leshort <2 ->>32 leshort x blocksize: %d bytes, ->28 leshort >1 ->>51 lelong x blocksize: %d bytes, ->39 ledate x created: %s - -0 string td\000 floppy image data (TeleDisk) - -# AFS Dump Magic -# From: Ty Sarna -0 string \x01\xb3\xa1\x13\x22 AFS Dump ->&0 belong x (v%d) ->>&0 byte 0x76 ->>>&0 belong x Vol %d, ->>>>&0 byte 0x6e ->>>>>&0 string x %s ->>>>>>&1 byte 0x74 ->>>>>>>&0 beshort 2 ->>>>>>>>&4 bedate x on: %s ->>>>>>>>&0 bedate =0 full dump ->>>>>>>>&0 bedate !0 incremental since: %s - -#---------------------------------------------------------- -# VMS backup savesets - gerardo.cacciari@gmail.com -# -4 string \x01\x00\x01\x00\x01\x00 ->(0.s+16) string \x01\x01 ->>&(&0.b+8) byte 0x42 OpenVMS backup saveset data ->>>40 lelong x (block size %d, ->>>49 string >\0 original name '%s', ->>>2 short 1024 VAX generated) ->>>2 short 2048 AXP generated) ->>>2 short 4096 I64 generated) - -# Summary: Oracle Clustered Filesystem -# Created by: Aaron Botsis -8 string OracleCFS Oracle Clustered Filesystem, ->4 long x rev %d ->0 long x \b.%d, ->560 string x label: %.64s, ->136 string x mountpoint: %.128s - -# Summary: Oracle ASM tagged volume -# Created by: Aaron Botsis -32 string ORCLDISK Oracle ASM Volume, ->40 string x Disk Name: %0.12s -32 string ORCLCLRD Oracle ASM Volume (cleared), ->40 string x Disk Name: %0.12s - -# Oracle Clustered Filesystem - Aaron Botsis -8 string OracleCFS Oracle Clustered Filesystem, ->4 long x rev %d ->0 long x \b.%d, ->560 string x label: %.64s, ->136 string x mountpoint: %.128s - -# Oracle ASM tagged volume - Aaron Botsis -32 string ORCLDISK Oracle ASM Volume, ->40 string x Disk Name: %0.12s -32 string ORCLCLRD Oracle ASM Volume (cleared), ->40 string x Disk Name: %0.12s - -# Compaq/HP RILOE floppy image -# From: Dirk Jagdmann -0 string CPQRFBLO Compaq/HP RILOE floppy image - -#------------------------------------------------------------------------------ -# Files-11 On-Disk Structure (OpenVMS file system) - gerardo.cacciari@gmail.com -# These bits come from LBN 1 (home block) of ODS-2 and ODS-5 volumes, which is -# mapped to VBN 2 of [000000]INDEXF.SYS;1 -# -1008 string DECFILE11B Files-11 On-Disk Structure ->525 byte x Level %d ->525 byte x (ODS-%d OpenVMS file system), ->984 string x volume label is '%-12.12s' - -# From: Thomas Klausner -# http://filext.com/file-extension/DAA -# describes the daa file format. The magic would be: -0 string DAA\x0\x0\x0\x0\x0 PowerISO Direct-Access-Archive - -# From Albert Cahalan -# really le32 operation,destination,payloadsize (but quite predictable) -# 01 00 00 00 00 00 00 c0 00 02 00 00 -0 string \1\0\0\0\0\0\0\300\0\2\0\0 Marvell Libertas firmware - -# From Eric Sandeen -# GFS2 -0x10000 belong 0x01161970 GFS2 Filesystem ->0x10024 belong x (blocksize %d, ->0x10060 string >\0 lockproto %s) - -# BTRFS -0x10040 string _BHRfS_M BTRFS Filesystem ->0x1012b string >\0 (label "%s", ->0x10090 lelong x sectorsize %d, ->0x10094 lelong x nodesize %d, ->0x10098 lelong x leafsize %d) - - -# dvdisaster's .ecc -# From: "Nelson A. de Oliveira" -0 string *dvdisaster* dvdisaster error correction file - -# Type: CROM filesystem -# From: Werner Fink -0 string CROMFS CROMFS ->6 string >\0 \b version %2.2s, ->8 ulequad >0 \b block data at %lld, ->16 ulequad >0 \b fblock table at %lld, ->24 ulequad >0 \b inode table at %lld, ->32 ulequad >0 \b root at %lld, ->40 ulelong >0 \b fblock size = %ld, ->44 ulelong >0 \b block size = %ld, ->48 ulequad >0 \b bytes = %lld - -#------------------------------------------------------------------------------ -# flash: file(1) magic for Macromedia Flash file format -# -# See -# -# http://www.macromedia.com/software/flash/open/ -# -0 string FWS Macromedia Flash data, ->3 byte x version %d -!:mime application/x-shockwave-flash -0 string CWS Macromedia Flash data (compressed), -!:mime application/x-shockwave-flash ->3 byte x version %d -# From: Cal Peake -0 string FLV Macromedia Flash Video -!:mime video/x-flv - -# -# From Dave Wilson -0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document -#------------------------------------------------------------------------------ -# fonts: file(1) magic for font data -# -0 search/1 FONT ASCII vfont text -0 short 0436 Berkeley vfont data -0 short 017001 byte-swapped Berkeley vfont data - -# PostScript fonts (must precede "printer" entries), quinlan@yggdrasil.com -0 string %!PS-AdobeFont-1. PostScript Type 1 font text ->20 string >\0 (%s) -6 string %!PS-AdobeFont-1. PostScript Type 1 font program data - -# X11 font files in SNF (Server Natural Format) format -0 belong 00000004 X11 SNF font data, MSB first -0 lelong 00000004 X11 SNF font data, LSB first - -# X11 Bitmap Distribution Format, from Daniel Quinlan (quinlan@yggdrasil.com) -0 search/1 STARTFONT\ X11 BDF font text - -# X11 fonts, from Daniel Quinlan (quinlan@yggdrasil.com) -# PCF must come before SGI additions ("MIPSEL MIPS-II COFF" collides) -0 string \001fcp X11 Portable Compiled Font data ->12 byte 0x02 \b, LSB first ->12 byte 0x0a \b, MSB first -0 string D1.0\015 X11 Speedo font data - -#------------------------------------------------------------------------------ -# FIGlet fonts and controlfiles -# From figmagic supplied with Figlet version 2.2 -# "David E. O'Brien" -0 string flf FIGlet font ->3 string >2a version %-2.2s -0 string flc FIGlet controlfile ->3 string >2a version %-2.2s - -# libGrx graphics lib fonts, from Albert Cahalan (acahalan@cs.uml.edu) -# Used with djgpp (DOS Gnu C++), sometimes Linux or Turbo C++ -0 belong 0x14025919 libGrx font data, ->8 leshort x %dx ->10 leshort x \b%d ->40 string x %s -# Misc. DOS VGA fonts, from Albert Cahalan (acahalan@cs.uml.edu) -0 belong 0xff464f4e DOS code page font data collection -7 belong 0x00454741 DOS code page font data -7 belong 0x00564944 DOS code page font data (from Linux?) -4098 string DOSFONT DOSFONT2 encrypted font data - -# downloadable fonts for browser (prints type) anthon@mnt.org -0 string PFR1 PFR1 font ->102 string >0 \b: %s - -# True Type fonts -0 string \000\001\000\000\000 TrueType font data - -0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font -0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font - -0 string ttcf TrueType font collection data - -# Opentype font data from Avi Bercovich -0 string OTTO OpenType font data - -# Gürkan Sengün , www.linuks.mine.nu -0 string SplineFontDB: Spline Font Database ->14 string x version %s -# FORTRAN source -0 regex/100 \^[Cc][\ \t] FORTRAN program -!:mime text/x-fortran -#------------------------------------------------------------------------------ -# frame: file(1) magic for FrameMaker files -# -# This stuff came on a FrameMaker demo tape, most of which is -# copyright, but this file is "published" as witness the following: -# -# Note that this is the Framemaker Maker Interchange Format, not the -# Normal format which would be application/vnd.framemaker. -# -0 string \11 string 5.5 (5.5 ->11 string 5.0 (5.0 ->11 string 4.0 (4.0 ->11 string 3.0 (3.0 ->11 string 2.0 (2.0 ->11 string 1.0 (1.0 ->14 byte x %c) -0 string \9 string 4.0 (4.0) ->9 string 3.0 (3.0) ->9 string 2.0 (2.0) ->9 string 1.0 (1.x) -0 search/1 \17 string 3.0 (3.0) ->17 string 2.0 (2.0) ->17 string 1.0 (1.x) -0 string \17 string 1.01 (%s) -0 string \10 string 3.0 (3.0 ->10 string 2.0 (2.0 ->10 string 1.0 (1.0 ->13 byte x %c) -# XXX - this book entry should be verified, if you find one, uncomment this -#0 string \6 string 3.0 (3.0) -#>6 string 2.0 (2.0) -#>6 string 1.0 (1.0) -0 string \= 4096 (or >4095, same thing), then it's -# an executable, and is dynamically-linked if the "has run-time -# loader information" bit is set. -# -# On x86, NetBSD says: -# -# If it's neither pure nor demand-paged: -# -# if it has the "has run-time loader information" bit set, it's -# a dynamically-linked executable; -# -# if it doesn't have that bit set, then: -# -# if it has the "is position-independent" bit set, it's -# position-independent; -# -# if the entry point is non-zero, it's an executable, otherwise -# it's an object file. -# -# If it's pure: -# -# if it has the "has run-time loader information" bit set, it's -# a dynamically-linked executable, otherwise it's just an -# executable. -# -# If it's demand-paged: -# -# if it has the "has run-time loader information" bit set, -# then: -# -# if the entry point is < 4096, it's a shared library; -# -# if the entry point is = 4096 or > 4096 (i.e., >= 4096), -# it's a dynamically-linked executable); -# -# if it doesn't have the "has run-time loader information" bit -# set, then it's just an executable. -# -# (On non-x86, NetBSD does much the same thing, except that it uses -# 8192 on 68K - except for "68k4k", which is presumably "68K with 4K -# pages - SPARC, and MIPS, presumably because Sun-3's and Sun-4's -# had 8K pages; dunno about MIPS.) -# -# I suspect the two will differ only in perverse and uninteresting cases -# ("shared" libraries that aren't demand-paged and whose pages probably -# won't actually be shared, executables with entry points <4096). -# -# I leave it to those more familiar with FreeBSD and NetBSD to figure out -# what the right answer is (although using ">4095", FreeBSD-style, is -# probably better than separately checking for "=4096" and ">4096", -# NetBSD-style). (The old "netbsd" file analyzed FreeBSD demand paged -# executables using the NetBSD technique.) -# -0 lelong&0377777777 041400407 FreeBSD/i386 ->20 lelong <4096 ->>3 byte&0xC0 &0x80 shared library ->>3 byte&0xC0 0x40 PIC object ->>3 byte&0xC0 0x00 object ->20 lelong >4095 ->>3 byte&0x80 0x80 dynamically linked executable ->>3 byte&0x80 0x00 executable ->16 lelong >0 not stripped - -0 lelong&0377777777 041400410 FreeBSD/i386 pure ->20 lelong <4096 ->>3 byte&0xC0 &0x80 shared library ->>3 byte&0xC0 0x40 PIC object ->>3 byte&0xC0 0x00 object ->20 lelong >4095 ->>3 byte&0x80 0x80 dynamically linked executable ->>3 byte&0x80 0x00 executable ->16 lelong >0 not stripped - -0 lelong&0377777777 041400413 FreeBSD/i386 demand paged ->20 lelong <4096 ->>3 byte&0xC0 &0x80 shared library ->>3 byte&0xC0 0x40 PIC object ->>3 byte&0xC0 0x00 object ->20 lelong >4095 ->>3 byte&0x80 0x80 dynamically linked executable ->>3 byte&0x80 0x00 executable ->16 lelong >0 not stripped - -0 lelong&0377777777 041400314 FreeBSD/i386 compact demand paged ->20 lelong <4096 ->>3 byte&0xC0 &0x80 shared library ->>3 byte&0xC0 0x40 PIC object ->>3 byte&0xC0 0x00 object ->20 lelong >4095 ->>3 byte&0x80 0x80 dynamically linked executable ->>3 byte&0x80 0x00 executable ->16 lelong >0 not stripped - -# XXX gross hack to identify core files -# cores start with a struct tss; we take advantage of the following: -# byte 7: highest byte of the kernel stack pointer, always 0xfe -# 8/9: kernel (ring 0) ss value, always 0x0010 -# 10 - 27: ring 1 and 2 ss/esp, unused, thus always 0 -# 28: low order byte of the current PTD entry, always 0 since the -# PTD is page-aligned -# -7 string \357\020\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 FreeBSD/i386 a.out core file ->1039 string >\0 from '%s' - -# /var/run/ld.so.hints -# What are you laughing about? -0 lelong 011421044151 ld.so hints file (Little Endian ->4 lelong >0 \b, version %d) ->4 belong <1 \b) -0 belong 011421044151 ld.so hints file (Big Endian ->4 belong >0 \b, version %d) ->4 belong <1 \b) - -# -# Files generated by FreeBSD scrshot(1)/vidcontrol(1) utilities -# -0 string SCRSHOT_ scrshot(1) screenshot, ->8 byte x version %d, ->9 byte 2 %d bytes in header, ->>10 byte x %d chars wide by ->>11 byte x %d chars high - -#------------------------------------------------------------------------------ -# fsav: file(1) magic for datafellows fsav virus definition files -# Anthon van der Neut (anthon@mnt.org) - -# ftp://ftp.f-prot.com/pub/{macrdef2.zip,nomacro.def} -0 beshort 0x1575 fsav macro virus signatures ->8 leshort >0 (%d- ->11 byte >0 \b%02d- ->10 byte >0 \b%02d) -# ftp://ftp.f-prot.com/pub/sign.zip -#10 ubyte <12 -#>9 ubyte <32 -#>>8 ubyte 0x0a -#>>>12 ubyte 0x07 -#>>>>11 uleshort >0 fsav DOS/Windows virus signatures (%d- -#>>>>10 byte 0 \b01- -#>>>>10 byte 1 \b02- -#>>>>10 byte 2 \b03- -#>>>>10 byte 3 \b04- -#>>>>10 byte 4 \b05- -#>>>>10 byte 5 \b06- -#>>>>10 byte 6 \b07- -#>>>>10 byte 7 \b08- -#>>>>10 byte 8 \b09- -#>>>>10 byte 9 \b10- -#>>>>10 byte 10 \b11- -#>>>>10 byte 11 \b12- -#>>>>9 ubyte >0 \b%02d) -# ftp://ftp.f-prot.com/pub/sign2.zip -#0 ubyte 0x62 -#>1 ubyte 0xF5 -#>>2 ubyte 0x1 -#>>>3 ubyte 0x1 -#>>>>4 ubyte 0x0e -#>>>>>13 ubyte >0 fsav virus signatures -#>>>>>>11 ubyte x size 0x%02x -#>>>>>>12 ubyte x \b%02x -#>>>>>>13 ubyte x \b%02x bytes - -# Joerg Jenderek: joerg dot jenderek at web dot de -# http://www.clamav.net/doc/latest/html/node45.html -# .cvd files start with a 512 bytes colon separated header -# ClamAV-VDB:buildDate:version:signaturesNumbers:functionalityLevelRequired:MD5:Signature:builder:buildTime -# + gzipped tarball files -0 string ClamAV-VDB: ->11 string >\0 Clam AntiVirus database %-.23s ->>34 string : ->>>35 string !: \b, version ->>>>35 string x \b%-.1s ->>>>>36 string !: ->>>>>>36 string x \b%-.1s ->>>>>>>37 string !: ->>>>>>>>37 string x \b%-.1s ->>>>>>>>>38 string !: ->>>>>>>>>>38 string x \b%-.1s ->512 string \037\213 \b, gzipped ->769 string ustar\0 \b, tarred - -# Type: Grisoft AVG AntiVirus -# From: David Newgas -0 string AVG7_ANTIVIRUS_VAULT_FILE AVG 7 Antivirus vault file data -#------------------------------------------------------------------------------ -# games: file(1) for games - -# Fabio Bonelli -# Quake II - III data files -0 string IDP2 Quake II 3D Model file, ->20 long x %lu skin(s), ->8 long x (%lu x ->12 long x %lu), ->40 long x %lu frame(s), ->16 long x Frame size %lu bytes, ->24 long x %lu vertices/frame, ->28 long x %lu texture coordinates, ->32 long x %lu triangles/frame - -0 string IBSP Quake ->4 long 0x26 II Map file (BSP) ->4 long 0x2E III Map file (BSP) - -0 string IDS2 Quake II SP2 sprite file - -#--------------------------------------------------------------------------- -# Doom and Quake -# submitted by Nicolas Patrois - -0 string \xcb\x1dBoom\xe6\xff\x03\x01 Boom or linuxdoom demo -# some doom lmp files don't match, I've got one beginning with \x6d\x02\x01\x01 - -24 string LxD\ 203 Linuxdoom save ->0 string x , name=%s ->44 string x , world=%s - -# Quake - -0 string PACK Quake I or II world or extension ->8 lelong >0 \b, %d entries - -#0 string -1\x0a Quake I demo -#>30 string x version %.4s -#>61 string x level %s - -#0 string 5\x0a Quake I save - -# The levels - -# Quake 1 - -0 string 5\x0aIntroduction Quake I save: start Introduction -0 string 5\x0athe_Slipgate_Complex Quake I save: e1m1 The slipgate complex -0 string 5\x0aCastle_of_the_Damned Quake I save: e1m2 Castle of the damned -0 string 5\x0athe_Necropolis Quake I save: e1m3 The necropolis -0 string 5\x0athe_Grisly_Grotto Quake I save: e1m4 The grisly grotto -0 string 5\x0aZiggurat_Vertigo Quake I save: e1m8 Ziggurat vertigo (secret) -0 string 5\x0aGloom_Keep Quake I save: e1m5 Gloom keep -0 string 5\x0aThe_Door_To_Chthon Quake I save: e1m6 The door to Chthon -0 string 5\x0aThe_House_of_Chthon Quake I save: e1m7 The house of Chthon -0 string 5\x0athe_Installation Quake I save: e2m1 The installation -0 string 5\x0athe_Ogre_Citadel Quake I save: e2m2 The ogre citadel -0 string 5\x0athe_Crypt_of_Decay Quake I save: e2m3 The crypt of decay (dopefish lives!) -0 string 5\x0aUnderearth Quake I save: e2m7 Underearth (secret) -0 string 5\x0athe_Ebon_Fortress Quake I save: e2m4 The ebon fortress -0 string 5\x0athe_Wizard's_Manse Quake I save: e2m5 The wizard's manse -0 string 5\x0athe_Dismal_Oubliette Quake I save: e2m6 The dismal oubliette -0 string 5\x0aTermination_Central Quake I save: e3m1 Termination central -0 string 5\x0aVaults_of_Zin Quake I save: e3m2 Vaults of Zin -0 string 5\x0athe_Tomb_of_Terror Quake I save: e3m3 The tomb of terror -0 string 5\x0aSatan's_Dark_Delight Quake I save: e3m4 Satan's dark delight -0 string 5\x0athe_Haunted_Halls Quake I save: e3m7 The haunted halls (secret) -0 string 5\x0aWind_Tunnels Quake I save: e3m5 Wind tunnels -0 string 5\x0aChambers_of_Torment Quake I save: e3m6 Chambers of torment -0 string 5\x0athe_Sewage_System Quake I save: e4m1 The sewage system -0 string 5\x0aThe_Tower_of_Despair Quake I save: e4m2 The tower of despair -0 string 5\x0aThe_Elder_God_Shrine Quake I save: e4m3 The elder god shrine -0 string 5\x0athe_Palace_of_Hate Quake I save: e4m4 The palace of hate -0 string 5\x0aHell's_Atrium Quake I save: e4m5 Hell's atrium -0 string 5\x0athe_Nameless_City Quake I save: e4m8 The nameless city (secret) -0 string 5\x0aThe_Pain_Maze Quake I save: e4m6 The pain maze -0 string 5\x0aAzure_Agony Quake I save: e4m7 Azure agony -0 string 5\x0aShub-Niggurath's_Pit Quake I save: end Shub-Niggurath's pit - -# Quake DeathMatch levels - -0 string 5\x0aPlace_of_Two_Deaths Quake I save: dm1 Place of two deaths -0 string 5\x0aClaustrophobopolis Quake I save: dm2 Claustrophobopolis -0 string 5\x0aThe_Abandoned_Base Quake I save: dm3 The abandoned base -0 string 5\x0aThe_Bad_Place Quake I save: dm4 The bad place -0 string 5\x0aThe_Cistern Quake I save: dm5 The cistern -0 string 5\x0aThe_Dark_Zone Quake I save: dm6 The dark zone - -# Scourge of Armagon - -0 string 5\x0aCommand_HQ Quake I save: start Command HQ -0 string 5\x0aThe_Pumping_Station Quake I save: hip1m1 The pumping station -0 string 5\x0aStorage_Facility Quake I save: hip1m2 Storage facility -0 string 5\x0aMilitary_Complex Quake I save: hip1m5 Military complex (secret) -0 string 5\x0athe_Lost_Mine Quake I save: hip1m3 The lost mine -0 string 5\x0aResearch_Facility Quake I save: hip1m4 Research facility -0 string 5\x0aAncient_Realms Quake I save: hip2m1 Ancient realms -0 string 5\x0aThe_Gremlin's_Domain Quake I save: hip2m6 The gremlin's domain (secret) -0 string 5\x0aThe_Black_Cathedral Quake I save: hip2m2 The black cathedral -0 string 5\x0aThe_Catacombs Quake I save: hip2m3 The catacombs -0 string 5\x0athe_Crypt__ Quake I save: hip2m4 The crypt -0 string 5\x0aMortum's_Keep Quake I save: hip2m5 Mortum's keep -0 string 5\x0aTur_Torment Quake I save: hip3m1 Tur torment -0 string 5\x0aPandemonium Quake I save: hip3m2 Pandemonium -0 string 5\x0aLimbo Quake I save: hip3m3 Limbo -0 string 5\x0athe_Edge_of_Oblivion Quake I save: hipdm1 The edge of oblivion (secret) -0 string 5\x0aThe_Gauntlet Quake I save: hip3m4 The gauntlet -0 string 5\x0aArmagon's_Lair Quake I save: hipend Armagon's lair - -# Malice - -0 string 5\x0aThe_Academy Quake I save: start The academy -0 string 5\x0aThe_Lab Quake I save: d1 The lab -0 string 5\x0aArea_33 Quake I save: d1b Area 33 -0 string 5\x0aSECRET_MISSIONS Quake I save: d3b Secret missions -0 string 5\x0aThe_Hospital Quake I save: d10 The hospital (secret) -0 string 5\x0aThe_Genetics_Lab Quake I save: d11 The genetics lab (secret) -0 string 5\x0aBACK_2_MALICE Quake I save: d4b Back to Malice -0 string 5\x0aArea44 Quake I save: d1c Area 44 -0 string 5\x0aTakahiro_Towers Quake I save: d2 Takahiro towers -0 string 5\x0aA_Rat's_Life Quake I save: d3 A rat's life -0 string 5\x0aInto_The_Flood Quake I save: d4 Into the flood -0 string 5\x0aThe_Flood Quake I save: d5 The flood -0 string 5\x0aNuclear_Plant Quake I save: d6 Nuclear plant -0 string 5\x0aThe_Incinerator_Plant Quake I save: d7 The incinerator plant -0 string 5\x0aThe_Foundry Quake I save: d7b The foundry -0 string 5\x0aThe_Underwater_Base Quake I save: d8 The underwater base -0 string 5\x0aTakahiro_Base Quake I save: d9 Takahiro base -0 string 5\x0aTakahiro_Laboratories Quake I save: d12 Takahiro laboratories -0 string 5\x0aStayin'_Alive Quake I save: d13 Stayin' alive -0 string 5\x0aB.O.S.S._HQ Quake I save: d14 B.O.S.S. HQ -0 string 5\x0aSHOWDOWN! Quake I save: d15 Showdown! - -# Malice DeathMatch levels - -0 string 5\x0aThe_Seventh_Precinct Quake I save: ddm1 The seventh precinct -0 string 5\x0aSub_Station Quake I save: ddm2 Sub station -0 string 5\x0aCrazy_Eights! Quake I save: ddm3 Crazy eights! -0 string 5\x0aEast_Side_Invertationa Quake I save: ddm4 East side invertationa -0 string 5\x0aSlaughterhouse Quake I save: ddm5 Slaughterhouse -0 string 5\x0aDOMINO Quake I save: ddm6 Domino -0 string 5\x0aSANDRA'S_LADDER Quake I save: ddm7 Sandra's ladder - - -0 string MComprHD MAME CHD compressed hard disk image, ->12 belong x version %lu - -# doom - submitted by Jon Dowland - -0 string =IWAD doom main IWAD data ->4 lelong x containing %d lumps -0 string =PWAD doom patch PWAD data ->4 lelong x containing %d lumps - - -# Summary: Warcraft 3 save -# Extension: .w3g -# Created by: "Nelson A. de Oliveira" -0 string Warcraft\ III\ recorded\ game %s - - -# Summary: Warcraft 3 map -# Extension: .w3m -# Created by: "Nelson A. de Oliveira" -0 string HM3W Warcraft III map file - - -# Summary: SGF Smart Game Format -# Extension: .sgf -# Reference: http://www.red-bean.com/sgf/ -# Created by: Eduardo Sabbatella -# Modified by (1): Abel Cheung (regex, more game format) -# FIXME: Some games don't have GM (game type) -0 regex \\(;.*GM\\[[0-9]{1,2}\\] Smart Game Format ->2 search/0x200 GM[ ->>&0 string 1] (Go) ->>&0 string 2] (Othello) ->>&0 string 3] (chess) ->>&0 string 4] (Gomoku+Renju) ->>&0 string 5] (Nine Men's Morris) ->>&0 string 6] (Backgammon) ->>&0 string 7] (Chinese chess) ->>&0 string 8] (Shogi) ->>&0 string 9] (Lines of Action) ->>&0 string 10] (Ataxx) ->>&0 string 11] (Hex) ->>&0 string 12] (Jungle) ->>&0 string 13] (Neutron) ->>&0 string 14] (Philosopher's Football) ->>&0 string 15] (Quadrature) ->>&0 string 16] (Trax) ->>&0 string 17] (Tantrix) ->>&0 string 18] (Amazons) ->>&0 string 19] (Octi) ->>&0 string 20] (Gess) ->>&0 string 21] (Twixt) ->>&0 string 22] (Zertz) ->>&0 string 23] (Plateau) ->>&0 string 24] (Yinsh) ->>&0 string 25] (Punct) ->>&0 string 26] (Gobblet) ->>&0 string 27] (hive) ->>&0 string 28] (Exxit) ->>&0 string 29] (Hnefatal) ->>&0 string 30] (Kuba) ->>&0 string 31] (Tripples) ->>&0 string 32] (Chase) ->>&0 string 33] (Tumbling Down) ->>&0 string 34] (Sahara) ->>&0 string 35] (Byte) ->>&0 string 36] (Focus) ->>&0 string 37] (Dvonn) ->>&0 string 38] (Tamsk) ->>&0 string 39] (Gipf) ->>&0 string 40] (Kropki) - - -# Summary: Civilization 4 video -# Extension: .bik -# Created by: Abel Cheung -0 string BIKi Civilization 4 Video - - -############################################## -# NetImmerse/Gamebryo game engine entries - -# Summary: Gamebryo game engine file -# Extension: .nif, .kf -# Created by: Abel Cheung -0 string Gamebryo\ File\ Format,\ Version\ Gamebryo game engine file ->&0 regex [0-9a-z.]+ \b, version %s - -# Summary: Gamebryo game engine file -# Extension: .kfm -# Created by: Abel Cheung -0 string ;Gamebryo\ KFM\ File\ Version\ Gamebryo game engine animation File ->&0 regex [0-9a-z.]+ \b, version %s - -# Summary: NetImmerse game engine file -# Extension .nif -# Created by: Abel Cheung -0 string NetImmerse\ File\ Format,\ Versio ->&0 string n\ NetImmerse game engine file ->>&0 regex [0-9a-z.]+ \b, version %s - -# Type: SGF Smart Game Format -# URL: http://www.red-bean.com/sgf/ -# From: Eduardo Sabbatella -2 regex/c \\(;.*GM\\[[0-9]{1,2}\\] Smart Game Format ->2 regex/c GM\\[1\\] - Go Game ->2 regex/c GM\\[6\\] - BackGammon Game ->2 regex/c GM\\[11\\] - Hex Game ->2 regex/c GM\\[18\\] - Amazons Game ->2 regex/c GM\\[19\\] - Octi Game ->2 regex/c GM\\[20\\] - Gess Game ->2 regex/c GM\\[21\\] - twix Game - -#------------------------------------------------------------------------------ -# gcc: file(1) magic for GCC special files -# -0 string gpch GCC precompiled header - -# The version field is annoying. It's 3 characters, not zero-terminated. ->5 byte x (version %c ->6 byte x \b%c ->7 byte x \b%c) - -# 67 = 'C', 111 = 'o', 43 = '+', 79 = 'O' ->4 byte 67 for C ->4 byte 111 for Objective C ->4 byte 43 for C++ ->4 byte 79 for Objective C++ - -#------------------------------------------------------------------------------ -# GEOS files (Vidar Madsen, vidar@gimp.org) -# semi-commonly used in embedded and handheld systems. -0 belong 0xc745c153 GEOS ->40 byte 1 executable ->40 byte 2 VMFile ->40 byte 3 binary ->40 byte 4 directory label ->40 byte <1 unknown ->40 byte >4 unknown ->4 string >\0 \b, name "%s" -#>44 short x \b, version %d -#>46 short x \b.%d -#>48 short x \b, rev %d -#>50 short x \b.%d -#>52 short x \b, proto %d -#>54 short x \br%d -#>168 string >\0 \b, copyright "%s" -#------------------------------------------------------------------------------ -# GIMP Gradient: file(1) magic for the GIMP's gradient data files -# by Federico Mena - -0 string GIMP\ Gradient GIMP gradient data - -#------------------------------------------------------------------------------ -# XCF: file(1) magic for the XCF image format used in the GIMP developed -# by Spencer Kimball and Peter Mattis -# ('Bucky' LaDieu, nega@vt.edu) - -0 string gimp\ xcf GIMP XCF image data, -!:mime image/x-xcf ->9 string file version 0, ->9 string v version ->>10 string >\0 %s, ->14 belong x %lu x ->18 belong x %lu, ->22 belong 0 RGB Color ->22 belong 1 Greyscale ->22 belong 2 Indexed Color ->22 belong >2 Unknown Image Type. - -#------------------------------------------------------------------------------ -# XCF: file(1) magic for the patterns used in the GIMP, developed -# by Spencer Kimball and Peter Mattis -# ('Bucky' LaDieu, nega@vt.edu) - -20 string GPAT GIMP pattern data, ->24 string x %s - -#------------------------------------------------------------------------------ -# XCF: file(1) magic for the brushes used in the GIMP, developed -# by Spencer Kimball and Peter Mattis -# ('Bucky' LaDieu, nega@vt.edu) - -20 string GIMP GIMP brush data - -# GIMP Curves File -# From: "Nelson A. de Oliveira" -0 string #\040GIMP\040Curves\040File GIMP curve file -# GNOME keyring -# Contributed by Josh Triplett -# FIXME: Could be simplified if pstring supported two-byte counts -0 string GnomeKeyring\n\r\0\n GNOME keyring ->&0 ubyte 0 \b, major version 0 ->>&0 ubyte 0 \b, minor version 0 ->>>&0 ubyte 0 \b, crypto type 0 (AEL) ->>>&0 ubyte >0 \b, crypto type %hhu (unknown) ->>>&1 ubyte 0 \b, hash type 0 (MD5) ->>>&1 ubyte >0 \b, hash type %hhu (unknown) ->>>&2 ubelong 0xFFFFFFFF \b, name NULL ->>>&2 ubelong !0xFFFFFFFF ->>>>&-4 ubelong >255 \b, name too long for file's pstring type ->>>>&-4 ubelong <256 ->>>>>&-1 pstring x \b, name "%s" ->>>>>>&0 ubeqdate x \b, last modified %s ->>>>>>&8 ubeqdate x \b, created %s ->>>>>>&16 ubelong &1 ->>>>>>>&0 ubelong x \b, locked if idle for %u seconds ->>>>>>&16 ubelong ^1 \b, not locked if idle ->>>>>>&24 ubelong x \b, hash iterations %u ->>>>>>&28 ubequad x \b, salt %llu ->>>>>>&52 ubelong x \b, %u item(s) -#------------------------------------------------------------------------------ -# gnu: file(1) magic for various GNU tools -# -# GNU nlsutils message catalog file format -# -0 string \336\22\4\225 GNU message catalog (little endian), ->4 lelong x revision %d, ->8 lelong x %d messages -0 string \225\4\22\336 GNU message catalog (big endian), ->4 belong x revision %d, ->8 belong x %d messages -# message catalogs, from Mitchum DSouza -0 string *nazgul* Nazgul style compiled message catalog ->8 lelong >0 \b, version %ld - -# GnuPG -# The format is very similar to pgp -0 string \001gpg GPG key trust database ->4 byte x version %d -# Note: magic.mime had 0x8501 for the next line instead of 0x8502 -0 beshort 0x8502 GPG encrypted data -!:mime text/PGP # encoding: data - -# This magic is not particularly good, as the keyrings don't have true -# magic. Nevertheless, it covers many keyrings. -0 beshort 0x9901 GPG key public ring -!:mime application/x-gnupg-keyring - -# Gnumeric spreadsheet -# This entry is only semi-helpful, as Gnumeric compresses its files, so -# they will ordinarily reported as "compressed", but at least -z helps -39 string = -# gnu find magic -0 string \0LOCATE GNU findutils locate database data ->7 string >\0 \b, format %s ->7 string 02 \b (frcode) - -# Files produced by GNU gettext -0 long 0xDE120495 GNU-format message catalog data -0 long 0x950412DE GNU-format message catalog data - -#------------------------------------------------------------------------------ -# gnumeric: file(1) magic for Gnumeric spreadsheet -# This entry is only semi-helpful, as Gnumeric compresses its files, so -# they will ordinarily reported as "compressed", but at least -z helps -39 string =39 byte >0 - version %c -# ACE/gr ascii -0 string #\ xvgr\ parameter\ file ACE/gr ascii file -0 string #\ xmgr\ parameter\ file ACE/gr ascii file -0 string #\ ACE/gr\ parameter\ file ACE/gr ascii file -# Grace projects -0 string #\ Grace\ project\ file Grace project file ->23 string @version\ (version ->>32 byte >0 %c ->>33 string >\0 \b.%.2s ->>35 string >\0 \b.%.2s) -# ACE/gr fit description files -0 string #\ ACE/gr\ fit\ description\ ACE/gr fit description file -# end of ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE -#------------------------------------------------------------------------------ -# graphviz: file(1) magic for http://www.graphviz.org/ - -# FIXME: These patterns match too generally. For example, the first -# line matches a LaTeX file containing the word "graph" (with a { -# following later) and the second line matches this file. -#0 regex/100 [\r\n\t\ ]*graph[\r\n\t\ ]+.*\\{ graphviz graph text -#!:mime text/vnd.graphviz -#0 regex/100 [\r\n\t\ ]*digraph[\r\n\t\ ]+.*\\{ graphviz digraph text -#!:mime text/vnd.graphviz - -#------------------------------------------------------------------------------ -# gringotts: file(1) magic for Gringotts -# http://devel.pluto.linux.it/projects/Gringotts/ -# author: Germano Rizzo -#GRG3????Y -0 string GRG Gringotts data file -#file format 1 ->3 string 1 v.1, MCRYPT S2K, SERPENT crypt, SHA-256 hash, ZLib lvl.9 -#file format 2 ->3 string 2 v.2, MCRYPT S2K, ->>8 byte&0x70 0x00 RIJNDAEL-128 crypt, ->>8 byte&0x70 0x10 SERPENT crypt, ->>8 byte&0x70 0x20 TWOFISH crypt, ->>8 byte&0x70 0x30 CAST-256 crypt, ->>8 byte&0x70 0x40 SAFER+ crypt, ->>8 byte&0x70 0x50 LOKI97 crypt, ->>8 byte&0x70 0x60 3DES crypt, ->>8 byte&0x70 0x70 RIJNDAEL-256 crypt, ->>8 byte&0x08 0x00 SHA1 hash, ->>8 byte&0x08 0x08 RIPEMD-160 hash, ->>8 byte&0x04 0x00 ZLib ->>8 byte&0x04 0x04 BZip2 ->>8 byte&0x03 0x00 lvl.0 ->>8 byte&0x03 0x01 lvl.3 ->>8 byte&0x03 0x02 lvl.6 ->>8 byte&0x03 0x03 lvl.9 -#file format 3 ->3 string 3 v.3, OpenPGP S2K, ->>8 byte&0x70 0x00 RIJNDAEL-128 crypt, ->>8 byte&0x70 0x10 SERPENT crypt, ->>8 byte&0x70 0x20 TWOFISH crypt, ->>8 byte&0x70 0x30 CAST-256 crypt, ->>8 byte&0x70 0x40 SAFER+ crypt, ->>8 byte&0x70 0x50 LOKI97 crypt, ->>8 byte&0x70 0x60 3DES crypt, ->>8 byte&0x70 0x70 RIJNDAEL-256 crypt, ->>8 byte&0x08 0x00 SHA1 hash, ->>8 byte&0x08 0x08 RIPEMD-160 hash, ->>8 byte&0x04 0x00 ZLib ->>8 byte&0x04 0x04 BZip2 ->>8 byte&0x03 0x00 lvl.0 ->>8 byte&0x03 0x01 lvl.3 ->>8 byte&0x03 0x02 lvl.6 ->>8 byte&0x03 0x03 lvl.9 -#file format >3 ->3 string >3 v.%.1s (unknown details) - -#------------------------------------------------------------------------------ -# hitach-sh: file(1) magic for Hitachi Super-H -# -# Super-H COFF -# -0 beshort 0x0500 Hitachi SH big-endian COFF ->18 beshort&0x0002 =0x0000 object ->18 beshort&0x0002 =0x0002 executable ->18 beshort&0x0008 =0x0008 \b, stripped ->18 beshort&0x0008 =0x0000 \b, not stripped -# -0 leshort 0x0550 Hitachi SH little-endian COFF ->18 leshort&0x0002 =0x0000 object ->18 leshort&0x0002 =0x0002 executable ->18 leshort&0x0008 =0x0008 \b, stripped ->18 leshort&0x0008 =0x0000 \b, not stripped - -#------------------------------------------------------------------------------ -# hp: file(1) magic for Hewlett Packard machines (see also "printer") -# -# XXX - somebody should figure out whether any byte order needs to be -# applied to the "TML" stuff; I'm assuming the Apollo stuff is -# big-endian as it was mostly 68K-based. -# -# I think the 500 series was the old stack-based machines, running a -# UNIX environment atop the "SUN kernel"; dunno whether it was -# big-endian or little-endian. -# -# Daniel Quinlan (quinlan@yggdrasil.com): hp200 machines are 68010 based; -# hp300 are 68020+68881 based; hp400 are also 68k. The following basic -# HP magic is useful for reference, but using "long" magic is a better -# practice in order to avoid collisions. -# -# Guy Harris (guy@netapp.com): some additions to this list came from -# HP-UX 10.0's "/usr/include/sys/unistd.h" (68030, 68040, PA-RISC 1.1, -# 1.2, and 2.0). The 1.2 and 2.0 stuff isn't in the HP-UX 10.0 -# "/etc/magic", though, except for the "archive file relocatable library" -# stuff, and the 68030 and 68040 stuff isn't there at all - are they not -# used in executables, or have they just not yet updated "/etc/magic" -# completely? -# -# 0 beshort 200 hp200 (68010) BSD binary -# 0 beshort 300 hp300 (68020+68881) BSD binary -# 0 beshort 0x20c hp200/300 HP-UX binary -# 0 beshort 0x20d hp400 (68030) HP-UX binary -# 0 beshort 0x20e hp400 (68040?) HP-UX binary -# 0 beshort 0x20b PA-RISC1.0 HP-UX binary -# 0 beshort 0x210 PA-RISC1.1 HP-UX binary -# 0 beshort 0x211 PA-RISC1.2 HP-UX binary -# 0 beshort 0x214 PA-RISC2.0 HP-UX binary - -# -# The "misc" stuff needs a byte order; the archives look suspiciously -# like the old 177545 archives (0xff65 = 0177545). -# -#### Old Apollo stuff -0 beshort 0627 Apollo m68k COFF executable ->18 beshort ^040000 not stripped ->22 beshort >0 - version %ld -0 beshort 0624 apollo a88k COFF executable ->18 beshort ^040000 not stripped ->22 beshort >0 - version %ld -0 long 01203604016 TML 0123 byte-order format -0 long 01702407010 TML 1032 byte-order format -0 long 01003405017 TML 2301 byte-order format -0 long 01602007412 TML 3210 byte-order format -#### PA-RISC 1.1 -0 belong 0x02100106 PA-RISC1.1 relocatable object -0 belong 0x02100107 PA-RISC1.1 executable ->168 belong &0x00000004 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x02100108 PA-RISC1.1 shared executable ->168 belong&0x4 0x4 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x0210010b PA-RISC1.1 demand-load executable ->168 belong&0x4 0x4 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x0210010e PA-RISC1.1 shared library ->96 belong >0 - not stripped - -0 belong 0x0210010d PA-RISC1.1 dynamic load library ->96 belong >0 - not stripped - -#### PA-RISC 2.0 -0 belong 0x02140106 PA-RISC2.0 relocatable object - -0 belong 0x02140107 PA-RISC2.0 executable ->168 belong &0x00000004 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x02140108 PA-RISC2.0 shared executable ->168 belong &0x00000004 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x0214010b PA-RISC2.0 demand-load executable ->168 belong &0x00000004 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x0214010e PA-RISC2.0 shared library ->96 belong >0 - not stripped - -0 belong 0x0214010d PA-RISC2.0 dynamic load library ->96 belong >0 - not stripped - -#### 800 -0 belong 0x020b0106 PA-RISC1.0 relocatable object - -0 belong 0x020b0107 PA-RISC1.0 executable ->168 belong&0x4 0x4 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x020b0108 PA-RISC1.0 shared executable ->168 belong&0x4 0x4 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x020b010b PA-RISC1.0 demand-load executable ->168 belong&0x4 0x4 dynamically linked ->(144) belong 0x054ef630 dynamically linked ->96 belong >0 - not stripped - -0 belong 0x020b010e PA-RISC1.0 shared library ->96 belong >0 - not stripped - -0 belong 0x020b010d PA-RISC1.0 dynamic load library ->96 belong >0 - not stripped - -0 belong 0x213c6172 archive file ->68 belong 0x020b0619 - PA-RISC1.0 relocatable library ->68 belong 0x02100619 - PA-RISC1.1 relocatable library ->68 belong 0x02110619 - PA-RISC1.2 relocatable library ->68 belong 0x02140619 - PA-RISC2.0 relocatable library - -#### 500 -0 long 0x02080106 HP s500 relocatable executable ->16 long >0 - version %ld - -0 long 0x02080107 HP s500 executable ->16 long >0 - version %ld - -0 long 0x02080108 HP s500 pure executable ->16 long >0 - version %ld - -#### 200 -0 belong 0x020c0108 HP s200 pure executable ->4 beshort >0 - version %ld ->8 belong &0x80000000 save fp regs ->8 belong &0x40000000 dynamically linked ->8 belong &0x20000000 debuggable ->36 belong >0 not stripped - -0 belong 0x020c0107 HP s200 executable ->4 beshort >0 - version %ld ->8 belong &0x80000000 save fp regs ->8 belong &0x40000000 dynamically linked ->8 belong &0x20000000 debuggable ->36 belong >0 not stripped - -0 belong 0x020c010b HP s200 demand-load executable ->4 beshort >0 - version %ld ->8 belong &0x80000000 save fp regs ->8 belong &0x40000000 dynamically linked ->8 belong &0x20000000 debuggable ->36 belong >0 not stripped - -0 belong 0x020c0106 HP s200 relocatable executable ->4 beshort >0 - version %ld ->6 beshort >0 - highwater %d ->8 belong &0x80000000 save fp regs ->8 belong &0x20000000 debuggable ->8 belong &0x10000000 PIC - -0 belong 0x020a0108 HP s200 (2.x release) pure executable ->4 beshort >0 - version %ld ->36 belong >0 not stripped - -0 belong 0x020a0107 HP s200 (2.x release) executable ->4 beshort >0 - version %ld ->36 belong >0 not stripped - -0 belong 0x020c010e HP s200 shared library ->4 beshort >0 - version %ld ->6 beshort >0 - highwater %d ->36 belong >0 not stripped - -0 belong 0x020c010d HP s200 dynamic load library ->4 beshort >0 - version %ld ->6 beshort >0 - highwater %d ->36 belong >0 not stripped - -#### MISC -0 long 0x0000ff65 HP old archive -0 long 0x020aff65 HP s200 old archive -0 long 0x020cff65 HP s200 old archive -0 long 0x0208ff65 HP s500 old archive - -0 long 0x015821a6 HP core file - -0 long 0x4da7eee8 HP-WINDOWS font ->8 byte >0 - version %ld -0 string Bitmapfile HP Bitmapfile - -0 string IMGfile CIS compimg HP Bitmapfile -# XXX - see "lif" -#0 short 0x8000 lif file -0 long 0x020c010c compiled Lisp - -0 string msgcat01 HP NLS message catalog, ->8 long >0 %d messages - -# Summary: HP-48/49 calculator -# Created by: phk@data.fls.dk -# Modified by (1): AMAKAWA Shuhei -# Modified by (2): Samuel Thibault (HP49 support) -0 string HPHP HP ->4 string 48 48 binary ->4 string 49 49 binary ->7 byte >64 - Rev %c ->8 leshort 0x2911 (ADR) ->8 leshort 0x2933 (REAL) ->8 leshort 0x2955 (LREAL) ->8 leshort 0x2977 (COMPLX) ->8 leshort 0x299d (LCOMPLX) ->8 leshort 0x29bf (CHAR) ->8 leshort 0x29e8 (ARRAY) ->8 leshort 0x2a0a (LNKARRAY) ->8 leshort 0x2a2c (STRING) ->8 leshort 0x2a4e (HXS) ->8 leshort 0x2a74 (LIST) ->8 leshort 0x2a96 (DIR) ->8 leshort 0x2ab8 (ALG) ->8 leshort 0x2ada (UNIT) ->8 leshort 0x2afc (TAGGED) ->8 leshort 0x2b1e (GROB) ->8 leshort 0x2b40 (LIB) ->8 leshort 0x2b62 (BACKUP) ->8 leshort 0x2b88 (LIBDATA) ->8 leshort 0x2d9d (PROG) ->8 leshort 0x2dcc (CODE) ->8 leshort 0x2e48 (GNAME) ->8 leshort 0x2e6d (LNAME) ->8 leshort 0x2e92 (XLIB) - -0 string %%HP: HP text ->6 string T(0) - T(0) ->6 string T(1) - T(1) ->6 string T(2) - T(2) ->6 string T(3) - T(3) ->10 string A(D) A(D) ->10 string A(R) A(R) ->10 string A(G) A(G) ->14 string F(.) F(.); ->14 string F(,) F(,); - - -# Summary: HP-38/39 calculator -# Created by: Samuel Thibault -0 string HP3 ->3 string 8 HP 38 ->3 string 9 HP 39 ->4 string Bin binary ->4 string Asc ASCII ->7 string A (Directory List) ->7 string B (Zaplet) ->7 string C (Note) ->7 string D (Program) ->7 string E (Variable) ->7 string F (List) ->7 string G (Matrix) ->7 string H (Library) ->7 string I (Target List) ->7 string J (ASCII Vector specification) ->7 string K (wildcard) - -# Summary: HP-38/39 calculator -# Created by: Samuel Thibault -0 string HP3 ->3 string 8 HP 38 ->3 string 9 HP 39 ->4 string Bin binary ->4 string Asc ASCII ->7 string A (Directory List) ->7 string B (Zaplet) ->7 string C (Note) ->7 string D (Program) ->7 string E (Variable) ->7 string F (List) ->7 string G (Matrix) ->7 string H (Library) ->7 string I (Target List) ->7 string J (ASCII Vector specification) ->7 string K (wildcard) - -# hpBSD magic numbers -0 beshort 200 hp200 (68010) BSD ->2 beshort 0407 impure binary ->2 beshort 0410 read-only binary ->2 beshort 0413 demand paged binary -0 beshort 300 hp300 (68020+68881) BSD ->2 beshort 0407 impure binary ->2 beshort 0410 read-only binary ->2 beshort 0413 demand paged binary -# -# From David Gero -# HP-UX 10.20 core file format from /usr/include/sys/core.h -# Unfortunately, HP-UX uses corehead blocks without specifying the order -# There are four we care about: -# CORE_KERNEL, which starts with the string "HP-UX" -# CORE_EXEC, which contains the name of the command -# CORE_PROC, which contains the signal number that caused the core dump -# CORE_FORMAT, which contains the version of the core file format (== 1) -# The only observed order in real core files is KERNEL, EXEC, FORMAT, PROC -# but we include all 6 variations of the order of the first 3, and -# assume that PROC will always be last -# Order 1: KERNEL, EXEC, FORMAT, PROC -0x10 string HP-UX ->0 belong 2 ->>0xC belong 0x3C ->>>0x4C belong 0x100 ->>>>0x58 belong 0x44 ->>>>>0xA0 belong 1 ->>>>>>0xAC belong 4 ->>>>>>>0xB0 belong 1 ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0x90 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ -# Order 2: KERNEL, FORMAT, EXEC, PROC ->>>0x4C belong 1 ->>>>0x58 belong 4 ->>>>>0x5C belong 1 ->>>>>>0x60 belong 0x100 ->>>>>>>0x6C belong 0x44 ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0xA4 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ -# Order 3: FORMAT, KERNEL, EXEC, PROC -0x24 string HP-UX ->0 belong 1 ->>0xC belong 4 ->>>0x10 belong 1 ->>>>0x14 belong 2 ->>>>>0x20 belong 0x3C ->>>>>>0x60 belong 0x100 ->>>>>>>0x6C belong 0x44 ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0xA4 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ -# Order 4: EXEC, KERNEL, FORMAT, PROC -0x64 string HP-UX ->0 belong 0x100 ->>0xC belong 0x44 ->>>0x54 belong 2 ->>>>0x60 belong 0x3C ->>>>>0xA0 belong 1 ->>>>>>0xAC belong 4 ->>>>>>>0xB0 belong 1 ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0x44 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ -# Order 5: FORMAT, EXEC, KERNEL, PROC -0x78 string HP-UX ->0 belong 1 ->>0xC belong 4 ->>>0x10 belong 1 ->>>>0x14 belong 0x100 ->>>>>0x20 belong 0x44 ->>>>>>0x68 belong 2 ->>>>>>>0x74 belong 0x3C ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0x58 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ -# Order 6: EXEC, FORMAT, KERNEL, PROC ->0 belong 0x100 ->>0xC belong 0x44 ->>>0x54 belong 1 ->>>>0x60 belong 4 ->>>>>0x64 belong 1 ->>>>>>0x68 belong 2 ->>>>>>>0x74 belong 0x2C ->>>>>>>>0xB4 belong 4 core file ->>>>>>>>>0x44 string >\0 from '%s' ->>>>>>>>>0xC4 belong 3 - received SIGQUIT ->>>>>>>>>0xC4 belong 4 - received SIGILL ->>>>>>>>>0xC4 belong 5 - received SIGTRAP ->>>>>>>>>0xC4 belong 6 - received SIGABRT ->>>>>>>>>0xC4 belong 7 - received SIGEMT ->>>>>>>>>0xC4 belong 8 - received SIGFPE ->>>>>>>>>0xC4 belong 10 - received SIGBUS ->>>>>>>>>0xC4 belong 11 - received SIGSEGV ->>>>>>>>>0xC4 belong 12 - received SIGSYS ->>>>>>>>>0xC4 belong 33 - received SIGXCPU ->>>>>>>>>0xC4 belong 34 - received SIGXFSZ - - - -#------------------------------------------------------------------------------ -# human68k: file(1) magic for Human68k (X680x0 DOS) binary formats -# Magic too short! -#0 string HU Human68k -#>68 string LZX LZX compressed -#>>72 string >\0 (version %s) -#>(8.L+74) string LZX LZX compressed -#>>(8.L+78) string >\0 (version %s) -#>60 belong >0 binded -#>(8.L+66) string #HUPAIR hupair -#>0 string HU X executable -#>(8.L+74) string #LIBCV1 - linked PD LIBC ver 1 -#>4 belong >0 - base address 0x%x -#>28 belong >0 not stripped -#>32 belong >0 with debug information -#0 beshort 0x601a Human68k Z executable -#0 beshort 0x6000 Human68k object file -#0 belong 0xd1000000 Human68k ar binary archive -#0 belong 0xd1010000 Human68k ar ascii archive -#0 beshort 0x0068 Human68k lib archive -#4 string LZX Human68k LZX compressed -#>8 string >\0 (version %s) -#>4 string LZX R executable -#2 string #HUPAIR Human68k hupair R executable - -#------------------------------------------------------------------------------ -# ibm370: file(1) magic for IBM 370 and compatibles. -# -# "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable". -# What the heck *is* "USS/370"? -# AIX 4.1's "/etc/magic" has -# -# 0 short 0535 370 sysV executable -# >12 long >0 not stripped -# >22 short >0 - version %d -# >30 long >0 - 5.2 format -# 0 short 0530 370 sysV pure executable -# >12 long >0 not stripped -# >22 short >0 - version %d -# >30 long >0 - 5.2 format -# -# instead of the "USS/370" versions of the same magic numbers. -# -0 beshort 0537 370 XA sysV executable ->12 belong >0 not stripped ->22 beshort >0 - version %d ->30 belong >0 - 5.2 format -0 beshort 0532 370 XA sysV pure executable ->12 belong >0 not stripped ->22 beshort >0 - version %d ->30 belong >0 - 5.2 format -0 beshort 054001 370 sysV pure executable ->12 belong >0 not stripped -0 beshort 055001 370 XA sysV pure executable ->12 belong >0 not stripped -0 beshort 056401 370 sysV executable ->12 belong >0 not stripped -0 beshort 057401 370 XA sysV executable ->12 belong >0 not stripped -0 beshort 0531 SVR2 executable (Amdahl-UTS) ->12 belong >0 not stripped ->24 belong >0 - version %ld -0 beshort 0534 SVR2 pure executable (Amdahl-UTS) ->12 belong >0 not stripped ->24 belong >0 - version %ld -0 beshort 0530 SVR2 pure executable (USS/370) ->12 belong >0 not stripped ->24 belong >0 - version %ld -0 beshort 0535 SVR2 executable (USS/370) ->12 belong >0 not stripped ->24 belong >0 - version %ld - -#------------------------------------------------------------------------------ -# ibm6000: file(1) magic for RS/6000 and the RT PC. -# -0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module ->12 belong >0 not stripped -# Breaks sun4 statically linked execs. -#0 beshort 0x0103 executable (RT Version 2) or obj module -#>2 byte 0x50 pure -#>28 belong >0 not stripped -#>6 beshort >0 - version %ld -0 beshort 0x0104 shared library -0 beshort 0x0105 ctab data -0 beshort 0xfe04 structured file -0 string 0xabcdef AIX message catalog -0 belong 0x000001f9 AIX compiled message catalog -0 string \ archive -0 string \ archive (big format) - - -#------------------------------------------------------------------------------ -# iff: file(1) magic for Interchange File Format (see also "audio" & "images") -# -# Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic -# Arts for file interchange. It has also been used by Apple, SGI, and -# especially Commodore-Amiga. -# -# IFF files begin with an 8 byte FORM header, followed by a 4 character -# FORM type, which is followed by the first chunk in the FORM. - -0 string FORM IFF data -#>4 belong x \b, FORM is %d bytes long -# audio formats ->8 string AIFF \b, AIFF audio -!:mime audio/x-aiff ->8 string AIFC \b, AIFF-C compressed audio -!:mime audio/x-aiff ->8 string 8SVX \b, 8SVX 8-bit sampled sound voice -!:mime audio/x-aiff ->8 string 16SV \b, 16SV 16-bit sampled sound voice ->8 string SAMP \b, SAMP sampled audio ->8 string MAUD \b, MAUD MacroSystem audio ->8 string SMUS \b, SMUS simple music ->8 string CMUS \b, CMUS complex music -# image formats ->8 string ILBMBMHD \b, ILBM interleaved image ->>20 beshort x \b, %d x ->>22 beshort x %d ->8 string RGBN \b, RGBN 12-bit RGB image ->8 string RGB8 \b, RGB8 24-bit RGB image ->8 string DEEP \b, DEEP TVPaint/XiPaint image ->8 string DR2D \b, DR2D 2-D object ->8 string TDDD \b, TDDD 3-D rendering ->8 string LWOB \b, LWOB 3-D object ->8 string LWO2 \b, LWO2 3-D object, v2 ->8 string LWLO \b, LWLO 3-D layered object ->8 string REAL \b, REAL Real3D rendering ->8 string MC4D \b, MC4D MaxonCinema4D rendering ->8 string ANIM \b, ANIM animation ->8 string YAFA \b, YAFA animation ->8 string SSA\ \b, SSA super smooth animation ->8 string ACBM \b, ACBM continuous image ->8 string FAXX \b, FAXX fax image -# other formats ->8 string FTXT \b, FTXT formatted text ->8 string CTLG \b, CTLG message catalog ->8 string PREF \b, PREF preferences ->8 string DTYP \b, DTYP datatype description ->8 string PTCH \b, PTCH binary patch ->8 string AMFF \b, AMFF AmigaMetaFile format ->8 string WZRD \b, WZRD StormWIZARD resource ->8 string DOC\ \b, DOC desktop publishing document - -# These go at the end of the iff rules -# -# I don't see why these might collide with anything else. -# -# Interactive Fiction related formats -# ->8 string IFRS \b, Blorb Interactive Fiction ->>24 string Exec with executable chunk ->8 string IFZS \b, Z-machine or Glulx saved game file (Quetzal) -#------------------------------------------------------------------------------ -# images: file(1) magic for image formats (see also "iff", and "c-lang" for -# XPM bitmaps) -# -# originally from jef@helios.ee.lbl.gov (Jef Poskanzer), -# additions by janl@ifi.uio.no as well as others. Jan also suggested -# merging several one- and two-line files into here. -# -# little magic: PCX (first byte is 0x0a) - -# Targa - matches `povray', `ppmtotga' and `xv' outputs -# by Philippe De Muyter -# at 2, byte ImgType must be 1, 2, 3, 9, 10 or 11 -# at 1, byte CoMapType must be 1 if ImgType is 1 or 9, 0 otherwise -# at 3, leshort Index is 0 for povray, ppmtotga and xv outputs -# `xv' recognizes only a subset of the following (RGB with pixelsize = 24) -# `tgatoppm' recognizes a superset (Index may be anything) -1 belong&0xfff7ffff 0x01010000 Targa image data - Map ->2 byte&8 8 - RLE ->12 leshort >0 %hd x ->14 leshort >0 %hd -1 belong&0xfff7ffff 0x00020000 Targa image data - RGB ->2 byte&8 8 - RLE ->12 leshort >0 %hd x ->14 leshort >0 %hd -1 belong&0xfff7ffff 0x00030000 Targa image data - Mono ->2 byte&8 8 - RLE ->12 leshort >0 %hd x ->14 leshort >0 %hd - -# PBMPLUS images -# The next byte following the magic is always whitespace. -0 search/1 P1 Netpbm PBM image text -!:mime image/x-portable-bitmap -0 search/1 P2 Netpbm PGM image text -!:mime image/x-portable-greymap -0 search/1 P3 Netpbm PPM image text -!:mime image/x-portable-pixmap -0 string P4 Netpbm PBM "rawbits" image data -!:mime image/x-portable-bitmap -0 string P5 Netpbm PGM "rawbits" image data -!:mime image/x-portable-greymap -0 string P6 Netpbm PPM "rawbits" image data -!:mime image/x-portable-pixmap -0 string P7 Netpbm PAM image file -!:mime image/x-portable-pixmap - -# From: bryanh@giraffe-data.com (Bryan Henderson) -0 string \117\072 Solitaire Image Recorder format ->4 string \013 MGI Type 11 ->4 string \021 MGI Type 17 -0 string .MDA MicroDesign data ->21 byte 48 version 2 ->21 byte 51 version 3 -0 string .MDP MicroDesign page data ->21 byte 48 version 2 ->21 byte 51 version 3 - -# NIFF (Navy Interchange File Format, a modification of TIFF) images -# [GRR: this *must* go before TIFF] -0 string IIN1 NIFF image data -!:mime image/x-niff - -# Tag Image File Format, from Daniel Quinlan (quinlan@yggdrasil.com) -# The second word of TIFF files is the TIFF version number, 42, which has -# never changed. The TIFF specification recommends testing for it. -0 string MM\x00\x2a TIFF image data, big-endian -!:mime image/tiff -0 string II\x2a\x00 TIFF image data, little-endian -!:mime image/tiff - -# PNG [Portable Network Graphics, or "PNG's Not GIF"] images -# (Greg Roelofs, newt@uchicago.edu) -# (Albert Cahalan, acahalan@cs.uml.edu) -# -# 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ... -# -0 string \x89PNG\x0d\x0a\x1a\x0a PNG image -!:mime image/png ->16 belong x \b, %ld x ->20 belong x %ld, ->24 byte x %d-bit ->25 byte 0 grayscale, ->25 byte 2 \b/color RGB, ->25 byte 3 colormap, ->25 byte 4 gray+alpha, ->25 byte 6 \b/color RGBA, -#>26 byte 0 deflate/32K, ->28 byte 0 non-interlaced ->28 byte 1 interlaced - -# possible GIF replacements; none yet released! -# (Greg Roelofs, newt@uchicago.edu) -# -# GRR 950115: this was mine ("Zip GIF"): -0 string GIF94z ZIF image (GIF+deflate alpha) -!:mime image/x-unknown -# -# GRR 950115: this is Jeremy Wohl's Free Graphics Format (better): -# -0 string FGF95a FGF image (GIF+deflate beta) -!:mime image/x-unknown -# -# GRR 950115: this is Thomas Boutell's Portable Bitmap Format proposal -# (best; not yet implemented): -# -0 string PBF PBF image (deflate compression) -!:mime image/x-unknown - -# GIF -0 string GIF8 GIF image data -!:mime image/gif -!:apple 8BIMGIFf ->4 string 7a \b, version 8%s, ->4 string 9a \b, version 8%s, ->6 leshort >0 %hd x ->8 leshort >0 %hd -#>10 byte &0x80 color mapped, -#>10 byte&0x07 =0x00 2 colors -#>10 byte&0x07 =0x01 4 colors -#>10 byte&0x07 =0x02 8 colors -#>10 byte&0x07 =0x03 16 colors -#>10 byte&0x07 =0x04 32 colors -#>10 byte&0x07 =0x05 64 colors -#>10 byte&0x07 =0x06 128 colors -#>10 byte&0x07 =0x07 256 colors - -# ITC (CMU WM) raster files. It is essentially a byte-reversed Sun raster, -# 1 plane, no encoding. -0 string \361\0\100\273 CMU window manager raster image data ->4 lelong >0 %d x ->8 lelong >0 %d, ->12 lelong >0 %d-bit - -# Magick Image File Format -0 string id=ImageMagick MIFF image data - -# Artisan -0 long 1123028772 Artisan image data ->4 long 1 \b, rectangular 24-bit ->4 long 2 \b, rectangular 8-bit with colormap ->4 long 3 \b, rectangular 32-bit (24-bit with matte) - -# FIG (Facility for Interactive Generation of figures), an object-based format -0 search/1 #FIG FIG image text ->5 string x \b, version %.3s - -# PHIGS -0 string ARF_BEGARF PHIGS clear text archive -0 string @(#)SunPHIGS SunPHIGS -# version number follows, in the form m.n ->40 string SunBin binary ->32 string archive archive - -# GKS (Graphics Kernel System) -0 string GKSM GKS Metafile ->24 string SunGKS \b, SunGKS - -# CGM image files -0 string BEGMF clear text Computer Graphics Metafile - -# MGR bitmaps (Michael Haardt, u31b3hs@pool.informatik.rwth-aachen.de) -0 string yz MGR bitmap, modern format, 8-bit aligned -0 string zz MGR bitmap, old format, 1-bit deep, 16-bit aligned -0 string xz MGR bitmap, old format, 1-bit deep, 32-bit aligned -0 string yx MGR bitmap, modern format, squeezed - -# Fuzzy Bitmap (FBM) images -0 string %bitmap\0 FBM image data ->30 long 0x31 \b, mono ->30 long 0x33 \b, color - -# facsimile data -1 string PC\ Research,\ Inc group 3 fax data ->29 byte 0 \b, normal resolution (204x98 DPI) ->29 byte 1 \b, fine resolution (204x196 DPI) -# From: Herbert Rosmanith -0 string Sfff structured fax file - - -# PC bitmaps (OS/2, Windows BMP files) (Greg Roelofs, newt@uchicago.edu) -0 string BM ->14 leshort 12 PC bitmap, OS/2 1.x format -!:mime image/x-ms-bmp ->>18 leshort x \b, %d x ->>20 leshort x %d ->14 leshort 64 PC bitmap, OS/2 2.x format -!:mime image/x-ms-bmp ->>18 leshort x \b, %d x ->>20 leshort x %d ->14 leshort 40 PC bitmap, Windows 3.x format -!:mime image/x-ms-bmp ->>18 lelong x \b, %d x ->>22 lelong x %d x ->>28 leshort x %d ->14 leshort 128 PC bitmap, Windows NT/2000 format -!:mime image/x-ms-bmp ->>18 lelong x \b, %d x ->>22 lelong x %d x ->>28 leshort x %d -# Too simple - MPi -#0 string IC PC icon data -#0 string PI PC pointer image data -#0 string CI PC color icon data -#0 string CP PC color pointer image data -# Conflicts with other entries [BABYL] -#0 string BA PC bitmap array data - -# XPM icons (Greg Roelofs, newt@uchicago.edu) -# note possible collision with C/REXX entry in c-lang; currently commented out -0 search/1 /*\ XPM\ */ X pixmap image text - -# Utah Raster Toolkit RLE images (janl@ifi.uio.no) -0 leshort 0xcc52 RLE image data, ->6 leshort x %d x ->8 leshort x %d ->2 leshort >0 \b, lower left corner: %d ->4 leshort >0 \b, lower right corner: %d ->10 byte&0x1 =0x1 \b, clear first ->10 byte&0x2 =0x2 \b, no background ->10 byte&0x4 =0x4 \b, alpha channel ->10 byte&0x8 =0x8 \b, comment ->11 byte >0 \b, %d color channels ->12 byte >0 \b, %d bits per pixel ->13 byte >0 \b, %d color map channels - -# image file format (Robert Potter, potter@cs.rochester.edu) -0 string Imagefile\ version- iff image data -# this adds the whole header (inc. version number), informative but longish ->10 string >\0 %s - -# Sun raster images, from Daniel Quinlan (quinlan@yggdrasil.com) -0 belong 0x59a66a95 Sun raster image data ->4 belong >0 \b, %d x ->8 belong >0 %d, ->12 belong >0 %d-bit, -#>16 belong >0 %d bytes long, ->20 belong 0 old format, -#>20 belong 1 standard, ->20 belong 2 compressed, ->20 belong 3 RGB, ->20 belong 4 TIFF, ->20 belong 5 IFF, ->20 belong 0xffff reserved for testing, ->24 belong 0 no colormap ->24 belong 1 RGB colormap ->24 belong 2 raw colormap -#>28 belong >0 colormap is %d bytes long - -# SGI image file format, from Daniel Quinlan (quinlan@yggdrasil.com) -# -# See -# http://reality.sgi.com/grafica/sgiimage.html -# -0 beshort 474 SGI image data -#>2 byte 0 \b, verbatim ->2 byte 1 \b, RLE -#>3 byte 1 \b, normal precision ->3 byte 2 \b, high precision ->4 beshort x \b, %d-D ->6 beshort x \b, %d x ->8 beshort x %d ->10 beshort x \b, %d channel ->10 beshort !1 \bs ->80 string >0 \b, "%s" - -0 string IT01 FIT image data ->4 belong x \b, %d x ->8 belong x %d x ->12 belong x %d -# -0 string IT02 FIT image data ->4 belong x \b, %d x ->8 belong x %d x ->12 belong x %d -# -2048 string PCD_IPI Kodak Photo CD image pack file ->0xe02 byte&0x03 0x00 , landscape mode ->0xe02 byte&0x03 0x01 , portrait mode ->0xe02 byte&0x03 0x02 , landscape mode ->0xe02 byte&0x03 0x03 , portrait mode -0 string PCD_OPA Kodak Photo CD overview pack file - -# FITS format. Jeff Uphoff -# FITS is the Flexible Image Transport System, the de facto standard for -# data and image transfer, storage, etc., for the astronomical community. -# (FITS floating point formats are big-endian.) -0 string SIMPLE\ \ = FITS image data ->109 string 8 \b, 8-bit, character or unsigned binary integer ->108 string 16 \b, 16-bit, two's complement binary integer ->107 string \ 32 \b, 32-bit, two's complement binary integer ->107 string -32 \b, 32-bit, floating point, single precision ->107 string -64 \b, 64-bit, floating point, double precision - -# other images -0 string This\ is\ a\ BitMap\ file Lisp Machine bit-array-file - -# From SunOS 5.5.1 "/etc/magic" - appeared right before Sun raster image -# stuff. -# -0 beshort 0x1010 PEX Binary Archive - -# DICOM medical imaging data -128 string DICM DICOM medical imaging data -!:mime application/dicom - -# XWD - X Window Dump file. -# As described in /usr/X11R6/include/X11/XWDFile.h -# used by the xwd program. -# Bradford Castalia, idaeim, 1/01 -# updated by Adam Buchbinder, 2/09 -# The following assumes version 7 of the format; the first long is the length -# of the header, which is at least 25 4-byte longs, and the one at offset 8 -# is a constant which is always either 1 or 2. Offset 12 is the pixmap depth, -# which is a maximum of 32. -0 belong >100 ->8 belong <3 ->>12 belong <33 ->>>4 belong 7 XWD X Window Dump image data -!:mime image/x-xwindowdump ->>>>100 string >\0 \b, "%s" ->>>>16 belong x \b, %dx ->>>>20 belong x \b%dx ->>>>12 belong x \b%d - -# PDS - Planetary Data System -# These files use Parameter Value Language in the header section. -# Unfortunately, there is no certain magic, but the following -# strings have been found to be most likely. -0 string NJPL1I00 PDS (JPL) image data -2 string NJPL1I PDS (JPL) image data -0 string CCSD3ZF PDS (CCSD) image data -2 string CCSD3Z PDS (CCSD) image data -0 string PDS_ PDS image data -0 string LBLSIZE= PDS (VICAR) image data - -# pM8x: ATARI STAD compressed bitmap format -# -# from Oskar Schirmer Feb 2, 2001 -# p M 8 5/6 xx yy zz data... -# Atari ST STAD bitmap is always 640x400, bytewise runlength compressed. -# bytes either run horizontally (pM85) or vertically (pM86). yy is the -# most frequent byte, xx and zz are runlength escape codes, where xx is -# used for runs of yy. -# -0 string pM85 Atari ST STAD bitmap image data (hor) ->5 byte 0x00 (white background) ->5 byte 0xFF (black background) -0 string pM86 Atari ST STAD bitmap image data (vert) ->5 byte 0x00 (white background) ->5 byte 0xFF (black background) - -# Gürkan Sengün , www.linuks.mine.nu -# http://www.atarimax.com/jindroush.atari.org/afmtatr.html -0 leshort 0x0296 Atari ATR image - -# XXX: -# This is bad magic 0x5249 == 'RI' conflicts with RIFF and other -# magic. -# SGI RICE image file -#0 beshort 0x5249 RICE image -#>2 beshort x v%d -#>4 beshort x (%d x -#>6 beshort x %d) -#>8 beshort 0 8 bit -#>8 beshort 1 10 bit -#>8 beshort 2 12 bit -#>8 beshort 3 13 bit -#>10 beshort 0 4:2:2 -#>10 beshort 1 4:2:2:4 -#>10 beshort 2 4:4:4 -#>10 beshort 3 4:4:4:4 -#>12 beshort 1 RGB -#>12 beshort 2 CCIR601 -#>12 beshort 3 RP175 -#>12 beshort 4 YUV - -#------------------------------------------------------------------------------ -# -# Marco Schmidt (marcoschmidt@users.sourceforge.net) -- an image file format -# for the EPOC operating system, which is used with PDAs like those from Psion -# -# see http://huizen.dds.nl/~frodol/psiconv/html/Index.html for a description -# of various EPOC file formats - -0 string \x37\x00\x00\x10\x42\x00\x00\x10\x00\x00\x00\x00\x39\x64\x39\x47 EPOC MBM image file - -# PCX image files -# From: Dan Fandrich -0 beshort 0x0a00 PCX ver. 2.5 image data -0 beshort 0x0a02 PCX ver. 2.8 image data, with palette -0 beshort 0x0a03 PCX ver. 2.8 image data, without palette -0 beshort 0x0a04 PCX for Windows image data -0 beshort 0x0a05 PCX ver. 3.0 image data ->4 leshort x bounding box [%hd, ->6 leshort x %hd] - ->8 leshort x [%hd, ->10 leshort x %hd], ->65 byte >1 %d planes each of ->3 byte x %hhd-bit ->68 byte 0 image, ->68 byte 1 colour, ->68 byte 2 grayscale, ->68 byte >2 image, ->68 byte <0 image, ->12 leshort >0 %hd x ->>14 leshort x %hd dpi, ->2 byte 0 uncompressed ->2 byte 1 RLE compressed - -# Adobe Photoshop -0 string 8BPS Adobe Photoshop Image -!:mime image/vnd.adobe.photoshop - -# XV thumbnail indicator (ThMO) -0 string P7\ 332 XV thumbnail image data - -# NITF is defined by United States MIL-STD-2500A -0 string NITF National Imagery Transmission Format ->25 string >\0 dated %.14s - -# GEM Image: Version 1, Headerlen 8 (Wolfram Kleff) -0 belong 0x00010008 GEM Image data ->12 beshort x %d x ->14 beshort x %d, ->4 beshort x %d planes, ->8 beshort x %d x ->10 beshort x %d pixelsize - -# GEM Metafile (Wolfram Kleff) -0 lelong 0x0018FFFF GEM Metafile data ->4 leshort x version %d - -# -# SMJPEG. A custom Motion JPEG format used by Loki Entertainment -# Software Torbjorn Andersson . -# -0 string \0\nSMJPEG SMJPEG ->8 belong x %d.x data -# According to the specification you could find any number of _TXT -# headers here, but I can't think of any way of handling that. None of -# the SMJPEG files I tried it on used this feature. Even if such a -# file is encountered the output should still be reasonable. ->16 string _SND \b, ->>24 beshort >0 %d Hz ->>26 byte 8 8-bit ->>26 byte 16 16-bit ->>28 string NONE uncompressed -# >>28 string APCM ADPCM compressed ->>27 byte 1 mono ->>28 byte 2 stereo -# Help! Isn't there any way to avoid writing this part twice? ->>32 string _VID \b, -# >>>48 string JFIF JPEG ->>>40 belong >0 %d frames ->>>44 beshort >0 (%d x ->>>46 beshort >0 %d) ->16 string _VID \b, -# >>32 string JFIF JPEG ->>24 belong >0 %d frames ->>28 beshort >0 (%d x ->>30 beshort >0 %d) - -0 string Paint\ Shop\ Pro\ Image\ File Paint Shop Pro Image File - -# "thumbnail file" (icon) -# descended from "xv", but in use by other applications as well (Wolfram Kleff) -0 string P7\ 332 XV "thumbnail file" (icon) data - -# taken from fkiss: ( ?) -0 string KiSS KISS/GS ->4 byte 16 color ->>5 byte x %d bit ->>8 leshort x %d colors ->>10 leshort x %d groups ->4 byte 32 cell ->>5 byte x %d bit ->>8 leshort x %d x ->>10 leshort x %d ->>12 leshort x +%d ->>14 leshort x +%d - -# Webshots (www.webshots.com), by John Harrison -0 string C\253\221g\230\0\0\0 Webshots Desktop .wbz file - -# Hercules DASD image files -# From Jan Jaeger -0 string CKD_P370 Hercules CKD DASD image file ->8 long x \b, %d heads per cylinder ->12 long x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X - -0 string CKD_C370 Hercules compressed CKD DASD image file ->8 long x \b, %d heads per cylinder ->12 long x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X - -0 string CKD_S370 Hercules CKD DASD shadow file ->8 long x \b, %d heads per cylinder ->12 long x \b, track size %d bytes ->16 byte x \b, device type 33%2.2X - -# Squeak images and programs - etoffi@softhome.net -0 string \146\031\0\0 Squeak image data -0 search/1 'From\040Squeak Squeak program text - -# partimage: file(1) magic for PartImage files (experimental, incomplete) -# Author: Hans-Joachim Baader -0 string PaRtImAgE-VoLuMe PartImage ->0x0020 string 0.6.1 file version %s ->>0x0060 lelong >-1 volume %ld -#>>0x0064 8 byte identifier -#>>0x007c reserved ->>0x0200 string >\0 type %s ->>0x1400 string >\0 device %s, ->>0x1600 string >\0 original filename %s, -# Some fields omitted ->>0x2744 lelong 0 not compressed ->>0x2744 lelong 1 gzip compressed ->>0x2744 lelong 2 bzip2 compressed ->>0x2744 lelong >2 compressed with unknown algorithm ->0x0020 string >0.6.1 file version %s ->0x0020 string <0.6.1 file version %s - -# DCX is multi-page PCX, using a simple header of up to 1024 -# offsets for the respective PCX components. -# From: Joerg Wunsch -0 lelong 987654321 DCX multi-page PCX image data - -# Simon Walton -# Kodak Cineon format for scanned negatives -# http://www.kodak.com/US/en/motion/support/dlad/ -0 lelong 0xd75f2a80 Cineon image data ->200 belong >0 \b, %ld x ->204 belong >0 %ld - - -# Bio-Rad .PIC is an image format used by microscope control systems -# and related image processing software used by biologists. -# From: Vebjorn Ljosa -54 leshort 12345 Bio-Rad .PIC Image File ->0 leshort >0 %hd x ->2 leshort >0 %hd, ->4 leshort =1 1 image in file ->4 leshort >1 %hd images in file - -# From Jan "Yenya" Kasprzak -# The description of *.mrw format can be found at -# http://www.dalibor.cz/minolta/raw_file_format.htm -0 string \000MRM Minolta Dimage camera raw image data - -# Summary: DjVu image / document -# Extension: .djvu -# Reference: http://djvu.org/docs/DjVu3Spec.djvu -# Submitted by: Stephane Loeuillet -# Modified by (1): Abel Cheung -0 string AT&TFORM -!:mime image/vnd.djvu ->12 string DJVM DjVu multiple page document ->12 string DJVU DjVu image or single page document ->12 string DJVI DjVu shared document ->12 string THUM DjVu page thumbnails - - -# From Marc Espie -0 lelong 20000630 OpenEXR image data - -# From: Tom Hilinski -# http://www.unidata.ucar.edu/packages/netcdf/ -0 string CDF\001 NetCDF Data Format data - -#----------------------------------------------------------------------- -# Hierarchical Data Format, used to facilitate scientific data exchange -# specifications at http://hdf.ncsa.uiuc.edu/ -0 belong 0x0e031301 Hierarchical Data Format (version 4) data -!:mime application/x-hdf -0 string \211HDF\r\n\032 Hierarchical Data Format (version 5) data -!:mime application/x-hdf - -# From: Tobias Burnus -# Xara (for a while: Corel Xara) is a graphic package, see -# http://www.xara.com/ for Windows and as GPL application for Linux -0 string XARA\243\243 Xara graphics file - -# http://www.cartesianinc.com/Tech/ -0 string CPC\262 Cartesian Perceptual Compression image -!:mime image/x-cpi - -# From Albert Cahalan -# puredigital used it for the CVS disposable camcorder -#8 lelong 4 ZBM bitmap image data -#>4 leshort x %u x -#>6 leshort x %u - -# From Albert Cahalan -# uncompressed 5:6:5 HighColor image for OLPC XO firmware icons -0 string C565 OLPC firmware icon image data ->4 leshort x %u x ->6 leshort x %u - -# Applied Images - Image files from Cytovision -# Gustavo Junior Alves -0 string \xce\xda\xde\xfa Cytovision Metaphases file -0 string \xed\xad\xef\xac Cytovision Karyotype file -0 string \x0b\x00\x03\x00 Cytovision FISH Probe file -0 string \xed\xfe\xda\xbe Cytovision FLEX file -0 string \xed\xab\xed\xfe Cytovision FLEX file -0 string \xad\xfd\xea\xad Cytovision RATS file - -# Wavelet Scalar Quantization format used in gray-scale fingerprint images -# From Tano M Fotang -0 string \xff\xa0\xff\xa8\x00 Wavelet Scalar Quantization image data - -# JPEG 2000 Code Stream Bitmap -# From Petr Splichal -0 string \xFF\x4F\xFF\x51\x00 JPEG-2000 Code Stream Bitmap data - -# Type: Ulead Photo Explorer5 (.pe5) -# URL: http://www.jisyo.com/cgibin/view.cgi?EXT=pe5 (Japanese) -# From: Simon Horman -0 string IIO2H Ulead Photo Explorer5 - -# Type: X11 cursor -# URL: http://webcvs.freedesktop.org/mime/shared-mime-info/freedesktop.org.xml.in?view=markup -# From: Mathias Brodala -0 string Xcur X11 cursor - -#------------------------------------------------------------------------------ -# inform: file(1) magic for Inform interactive fiction language - -# URL: http://www.inform-fiction.org/ -# From: Reuben Thomas - -0 search/cB/100 constant\ story Inform source text - -#------------------------------------------------------------------------------ -# intel: file(1) magic for x86 Unix -# -# Various flavors of x86 UNIX executable/object (other than Xenix, which -# is in "microsoft"). DOS is in "msdos"; the ambitious soul can do -# Windows as well. -# -# Windows NT belongs elsewhere, as you need x86 and MIPS and Alpha and -# whatever comes next (HP-PA Hummingbird?). OS/2 may also go elsewhere -# as well, if, as, and when IBM makes it portable. -# -# The `versions' should be un-commented if they work for you. -# (Was the problem just one of endianness?) -# -0 leshort 0502 basic-16 executable ->12 lelong >0 not stripped -#>22 leshort >0 - version %ld -0 leshort 0503 basic-16 executable (TV) ->12 lelong >0 not stripped -#>22 leshort >0 - version %ld -0 leshort 0510 x86 executable ->12 lelong >0 not stripped -0 leshort 0511 x86 executable (TV) ->12 lelong >0 not stripped -0 leshort =0512 iAPX 286 executable small model (COFF) ->12 lelong >0 not stripped -#>22 leshort >0 - version %ld -0 leshort =0522 iAPX 286 executable large model (COFF) ->12 lelong >0 not stripped -#>22 leshort >0 - version %ld -# SGI labeled the next entry as "iAPX 386 executable" --Dan Quinlan -0 leshort =0514 80386 COFF executable ->12 lelong >0 not stripped ->22 leshort >0 - version %ld - -# rom: file(1) magic for BIOS ROM Extensions found in intel machines -# mapped into memory between 0xC0000 and 0xFFFFF -# From Gürkan Sengün , www.linuks.mine.nu -0 beshort 0x55AA BIOS (ia32) ROM Ext. ->5 string USB USB ->7 string LDR UNDI image ->30 string IBM IBM comp. Video ->26 string Adaptec Adaptec ->28 string Adaptec Adaptec ->42 string PROMISE Promise ->2 byte x (%d*512) - -#------------------------------------------------------------------------------ -# interleaf: file(1) magic for InterLeaf TPS: -# -0 string =\210OPS Interleaf saved data -0 string =5 string ,\ Version\ = \b, version ->>17 string >\0 %.3s - -#------------------------------------------------------------------------------ -# island: file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1 -# "/etc/magic": -# From: guy@netapp.com (Guy Harris) -# -4 string pgscriptver IslandWrite document -13 string DrawFile IslandDraw document - - -#------------------------------------------------------------------------------ -# ispell: file(1) magic for ispell -# -# Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic -# will match 0x9600 through 0x9603 in *both* little endian and big endian. -# (No other current magic entries collide.) -# -# Updated by Daniel Quinlan (quinlan@yggdrasil.com) -# -0 leshort&0xFFFC 0x9600 little endian ispell ->0 byte 0 hash file (?), ->0 byte 1 3.0 hash file, ->0 byte 2 3.1 hash file, ->0 byte 3 hash file (?), ->2 leshort 0x00 8-bit, no capitalization, 26 flags ->2 leshort 0x01 7-bit, no capitalization, 26 flags ->2 leshort 0x02 8-bit, capitalization, 26 flags ->2 leshort 0x03 7-bit, capitalization, 26 flags ->2 leshort 0x04 8-bit, no capitalization, 52 flags ->2 leshort 0x05 7-bit, no capitalization, 52 flags ->2 leshort 0x06 8-bit, capitalization, 52 flags ->2 leshort 0x07 7-bit, capitalization, 52 flags ->2 leshort 0x08 8-bit, no capitalization, 128 flags ->2 leshort 0x09 7-bit, no capitalization, 128 flags ->2 leshort 0x0A 8-bit, capitalization, 128 flags ->2 leshort 0x0B 7-bit, capitalization, 128 flags ->2 leshort 0x0C 8-bit, no capitalization, 256 flags ->2 leshort 0x0D 7-bit, no capitalization, 256 flags ->2 leshort 0x0E 8-bit, capitalization, 256 flags ->2 leshort 0x0F 7-bit, capitalization, 256 flags ->4 leshort >0 and %d string characters -0 beshort&0xFFFC 0x9600 big endian ispell ->1 byte 0 hash file (?), ->1 byte 1 3.0 hash file, ->1 byte 2 3.1 hash file, ->1 byte 3 hash file (?), ->2 beshort 0x00 8-bit, no capitalization, 26 flags ->2 beshort 0x01 7-bit, no capitalization, 26 flags ->2 beshort 0x02 8-bit, capitalization, 26 flags ->2 beshort 0x03 7-bit, capitalization, 26 flags ->2 beshort 0x04 8-bit, no capitalization, 52 flags ->2 beshort 0x05 7-bit, no capitalization, 52 flags ->2 beshort 0x06 8-bit, capitalization, 52 flags ->2 beshort 0x07 7-bit, capitalization, 52 flags ->2 beshort 0x08 8-bit, no capitalization, 128 flags ->2 beshort 0x09 7-bit, no capitalization, 128 flags ->2 beshort 0x0A 8-bit, capitalization, 128 flags ->2 beshort 0x0B 7-bit, capitalization, 128 flags ->2 beshort 0x0C 8-bit, no capitalization, 256 flags ->2 beshort 0x0D 7-bit, no capitalization, 256 flags ->2 beshort 0x0E 8-bit, capitalization, 256 flags ->2 beshort 0x0F 7-bit, capitalization, 256 flags ->4 beshort >0 and %d string characters -# ispell 4.0 hash files kromJx -# Ispell 4.0 -0 string ISPL ispell ->4 long x hash file version %d, ->8 long x lexletters %d, ->12 long x lexsize %d, ->16 long x hashsize %d, ->20 long x stblsize %d -#------------------------------------------------------------ -# Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the -# same magic number, 0xcafebabe, so they are both handled -# in the entry called "cafebabe". -#------------------------------------------------------------ -# Java serialization -# From Martin Pool (m.pool@pharos.com.au) -0 beshort 0xaced Java serialization data ->2 beshort >0x0004 \b, version %d - -0 belong 0xfeedfeed Java KeyStore -!:mime application/x-java-keystore -0 belong 0xcececece Java JCE KeyStore -!:mime application/x-java-jce-keystore - -# Dalvik .dex format. http://retrodev.com/android/dexformat.html -# From "Mike Fleming" -0 string dex\n ->0 regex dex\n[0-9][0-9][0-9]\0 Dalvik dex file ->4 string >000 version %s -0 string dey\n ->0 regex dey\n[0-9][0-9][0-9]\0 Dalvik dex file (optimized for host) ->4 string >000 version %s - - -#------------------------------------------------------------------------------ -# JPEG images -# SunOS 5.5.1 had -# -# 0 string \377\330\377\340 JPEG file -# 0 string \377\330\377\356 JPG file -# -# both of which turn into "JPEG image data" here. -# -0 beshort 0xffd8 JPEG image data -!:mime image/jpeg -!:apple 8BIMJPEG -!:strength +1 ->6 string JFIF \b, JFIF standard -# The following added by Erik Rossen 1999-09-06 -# in a vain attempt to add image size reporting for JFIF. Note that these -# tests are not fool-proof since some perfectly valid JPEGs are currently -# impossible to specify in magic(4) format. -# First, a little JFIF version info: ->>11 byte x \b %d. ->>12 byte x \b%02d -# Next, the resolution or aspect ratio of the image: -#>>13 byte 0 \b, aspect ratio -#>>13 byte 1 \b, resolution (DPI) -#>>13 byte 2 \b, resolution (DPCM) -#>>4 beshort x \b, segment length %d -# Next, show thumbnail info, if it exists: ->>18 byte !0 \b, thumbnail %dx ->>>19 byte x \b%d - -# EXIF moved down here to avoid reporting a bogus version number, -# and EXIF version number printing added. -# - Patrik R=E5dman ->6 string Exif \b, EXIF standard -# Look for EXIF IFD offset in IFD 0, and then look for EXIF version tag in EXIF IFD. -# All possible combinations of entries have to be enumerated, since no looping -# is possible. And both endians are possible... -# The combinations included below are from real-world JPEGs. -# Little-endian ->>12 string II -# IFD 0 Entry #5: ->>>70 leshort 0x8769 -# EXIF IFD Entry #1: ->>>>(78.l+14) leshort 0x9000 ->>>>>(78.l+23) byte x %c ->>>>>(78.l+24) byte x \b.%c ->>>>>(78.l+25) byte !0x30 \b%c -# IFD 0 Entry #9: ->>>118 leshort 0x8769 -# EXIF IFD Entry #3: ->>>>(126.l+38) leshort 0x9000 ->>>>>(126.l+47) byte x %c ->>>>>(126.l+48) byte x \b.%c ->>>>>(126.l+49) byte !0x30 \b%c -# IFD 0 Entry #10 ->>>130 leshort 0x8769 -# EXIF IFD Entry #3: ->>>>(138.l+38) leshort 0x9000 ->>>>>(138.l+47) byte x %c ->>>>>(138.l+48) byte x \b.%c ->>>>>(138.l+49) byte !0x30 \b%c -# EXIF IFD Entry #4: ->>>>(138.l+50) leshort 0x9000 ->>>>>(138.l+59) byte x %c ->>>>>(138.l+60) byte x \b.%c ->>>>>(138.l+61) byte !0x30 \b%c -# EXIF IFD Entry #5: ->>>>(138.l+62) leshort 0x9000 ->>>>>(138.l+71) byte x %c ->>>>>(138.l+72) byte x \b.%c ->>>>>(138.l+73) byte !0x30 \b%c -# IFD 0 Entry #11 ->>>142 leshort 0x8769 -# EXIF IFD Entry #3: ->>>>(150.l+38) leshort 0x9000 ->>>>>(150.l+47) byte x %c ->>>>>(150.l+48) byte x \b.%c ->>>>>(150.l+49) byte !0x30 \b%c -# EXIF IFD Entry #4: ->>>>(150.l+50) leshort 0x9000 ->>>>>(150.l+59) byte x %c ->>>>>(150.l+60) byte x \b.%c ->>>>>(150.l+61) byte !0x30 \b%c -# EXIF IFD Entry #5: ->>>>(150.l+62) leshort 0x9000 ->>>>>(150.l+71) byte x %c ->>>>>(150.l+72) byte x \b.%c ->>>>>(150.l+73) byte !0x30 \b%c -# Big-endian ->>12 string MM -# IFD 0 Entry #9: ->>>118 beshort 0x8769 -# EXIF IFD Entry #1: ->>>>(126.L+14) beshort 0x9000 ->>>>>(126.L+23) byte x %c ->>>>>(126.L+24) byte x \b.%c ->>>>>(126.L+25) byte !0x30 \b%c -# EXIF IFD Entry #3: ->>>>(126.L+38) beshort 0x9000 ->>>>>(126.L+47) byte x %c ->>>>>(126.L+48) byte x \b.%c ->>>>>(126.L+49) byte !0x30 \b%c -# IFD 0 Entry #10 ->>>130 beshort 0x8769 -# EXIF IFD Entry #3: ->>>>(138.L+38) beshort 0x9000 ->>>>>(138.L+47) byte x %c ->>>>>(138.L+48) byte x \b.%c ->>>>>(138.L+49) byte !0x30 \b%c -# EXIF IFD Entry #5: ->>>>(138.L+62) beshort 0x9000 ->>>>>(138.L+71) byte x %c ->>>>>(138.L+72) byte x \b.%c ->>>>>(138.L+73) byte !0x30 \b%c -# IFD 0 Entry #11 ->>>142 beshort 0x8769 -# EXIF IFD Entry #4: ->>>>(150.L+50) beshort 0x9000 ->>>>>(150.L+59) byte x %c ->>>>>(150.L+60) byte x \b.%c ->>>>>(150.L+61) byte !0x30 \b%c -# Here things get sticky. We can do ONE MORE marker segment with -# indirect addressing, and that's all. It would be great if we could -# do pointer arithemetic like in an assembler language. Christos? -# And if there was some sort of looping construct to do searches, plus a few -# named accumulators, it would be even more effective... -# At least we can show a comment if no other segments got inserted before: ->(4.S+5) byte 0xFE ->>(4.S+8) string >\0 \b, comment: "%s" -# FIXME: When we can do non-byte counted strings, we can use that to get -# the string's count, and fix Debian bug #283760 -#>(4.S+5) byte 0xFE \b, comment -#>>(4.S+6) beshort x \b length=%d -#>>(4.S+8) string >\0 \b, "%s" -# Or, we can show the encoding type (I've included only the three most common) -# and image dimensions if we are lucky and the SOFn (image segment) is here: ->(4.S+5) byte 0xC0 \b, baseline ->>(4.S+6) byte x \b, precision %d ->>(4.S+7) beshort x \b, %dx ->>(4.S+9) beshort x \b%d ->(4.S+5) byte 0xC1 \b, extended sequential ->>(4.S+6) byte x \b, precision %d ->>(4.S+7) beshort x \b, %dx ->>(4.S+9) beshort x \b%d ->(4.S+5) byte 0xC2 \b, progressive ->>(4.S+6) byte x \b, precision %d ->>(4.S+7) beshort x \b, %dx ->>(4.S+9) beshort x \b%d -# I've commented-out quantisation table reporting. I doubt anyone cares yet. -#>(4.S+5) byte 0xDB \b, quantisation table -#>>(4.S+6) beshort x \b length=%d -#>14 beshort x \b, %d x -#>16 beshort x \b %d - -# HSI is Handmade Software's proprietary JPEG encoding scheme -0 string hsi1 JPEG image data, HSI proprietary - -# From: David Santinoli -0 string \x00\x00\x00\x0C\x6A\x50\x20\x20\x0D\x0A\x87\x0A JPEG 2000 image data - -# Type: JPEG 2000 codesream -# From: Mathieu Malaterre -0 belong 0xff4fff51 JPEG 2000 codestream -45 beshort 0xff52 - -#------------------------------------------------------------------------------ -# karma: file(1) magic for Karma data files -# -# From - -0 string KarmaRHD Version Karma Data Structure Version ->16 belong x %lu - -#------------------------------------------------------------------------------ -# kde: file(1) magic for KDE - -0 string [KDE\ Desktop\ Entry] KDE desktop entry -!:mime application/x-kdelnk -0 string #\ KDE\ Config\ File KDE config file -!:mime application/x-kdelnk -0 string #\ xmcd xmcd database file for kscd -!:mime text/x-xmcd -#------------------------------------------------------------------------------ -# Type: Google KML, formerly Keyhole Markup Language -# Future development of this format has been handed -# over to the Open Geospatial Consortium. -# http://www.opengeospatial.org/standards/kml/ -# From: Asbjoern Sloth Toennesen -0 string \20 search/400 \ xmlns= ->>&0 regex ['"]http://earth.google.com/kml Google KML document -!:mime application/vnd.google-earth.kml+xml ->>>&1 string 2.0' \b, version 2.0 ->>>&1 string 2.1' \b, version 2.1 ->>>&1 string 2.2' \b, version 2.2 - -#------------------------------------------------------------------------------ -# Type: OpenGIS KML, formerly Keyhole Markup Language -# This standard is maintained by the -# Open Geospatial Consortium. -# http://www.opengeospatial.org/standards/kml/ -# From: Asbjoern Sloth Toennesen ->>&0 regex ['"]http://www.opengis.net/kml OpenGIS KML document -!:mime application/vnd.google-earth.kml+xml ->>>&1 string 2.2 \b, version 2.2 - -#------------------------------------------------------------------------------ -# Type: Google KML Archive (ZIP based) -# http://code.google.com/apis/kml/documentation/kml_tut.html -# From: Asbjoern Sloth Toennesen -0 string PK\003\004 ->4 byte 0x14 ->>30 string doc.kml Compressed Google KML Document, including resources. -!:mime application/vnd.google-earth.kmz -#------------------------------------------------------------------------------ -# DEC SRC Virtual Paper: Lectern files -# Karl M. Hegbloom -0 string lect DEC SRC Virtual Paper Lectern file -#------------------------------------------------------------------------------ -# lex: file(1) magic for lex -# -# derived empirically, your offsets may vary! -0 search/100 yyprevious C program text (from lex) ->3 search/1 >\0 for %s -# C program text from GNU flex, from Daniel Quinlan -0 search/100 generated\ by\ flex C program text (from flex) -# lex description file, from Daniel Quinlan -0 search/1 %{ lex description text - -#------------------------------------------------------------------------------ -# lif: file(1) magic for lif -# -# (Daniel Quinlan ) -# -0 beshort 0x8000 lif file -#------------------------------------------------------------------------------ -# linux: file(1) magic for Linux files -# -# Values for Linux/i386 binaries, from Daniel Quinlan -# The following basic Linux magic is useful for reference, but using -# "long" magic is a better practice in order to avoid collisions. -# -# 2 leshort 100 Linux/i386 -# >0 leshort 0407 impure executable (OMAGIC) -# >0 leshort 0410 pure executable (NMAGIC) -# >0 leshort 0413 demand-paged executable (ZMAGIC) -# >0 leshort 0314 demand-paged executable (QMAGIC) -# -0 lelong 0x00640107 Linux/i386 impure executable (OMAGIC) ->16 lelong 0 \b, stripped -0 lelong 0x00640108 Linux/i386 pure executable (NMAGIC) ->16 lelong 0 \b, stripped -0 lelong 0x0064010b Linux/i386 demand-paged executable (ZMAGIC) ->16 lelong 0 \b, stripped -0 lelong 0x006400cc Linux/i386 demand-paged executable (QMAGIC) ->16 lelong 0 \b, stripped -# -0 string \007\001\000 Linux/i386 object file ->20 lelong >0x1020 \b, DLL library -# Linux-8086 stuff: -0 string \01\03\020\04 Linux-8086 impure executable ->28 long !0 not stripped -0 string \01\03\040\04 Linux-8086 executable ->28 long !0 not stripped -# -0 string \243\206\001\0 Linux-8086 object file -# -0 string \01\03\020\20 Minix-386 impure executable ->28 long !0 not stripped -0 string \01\03\040\20 Minix-386 executable ->28 long !0 not stripped -# core dump file, from Bill Reynolds -216 lelong 0421 Linux/i386 core file ->220 string >\0 of '%s' ->200 lelong >0 (signal %d) -# -# LILO boot/chain loaders, from Daniel Quinlan -# this can be overridden by the DOS executable (COM) entry -2 string LILO Linux/i386 LILO boot/chain loader -# -# PSF fonts, from H. Peter Anvin -0 leshort 0x0436 Linux/i386 PC Screen Font data, ->2 byte 0 256 characters, no directory, ->2 byte 1 512 characters, no directory, ->2 byte 2 256 characters, Unicode directory, ->2 byte 3 512 characters, Unicode directory, ->3 byte >0 8x%d -# Linux swap file, from Daniel Quinlan -4086 string SWAP-SPACE Linux/i386 swap file -# From: Jeff Bailey -# Linux swap file with swsusp1 image, from Jeff Bailey -4076 string SWAPSPACE2S1SUSPEND Linux/i386 swap file (new style) with SWSUSP1 image -# according to man page of mkswap (8) March 1999 -# volume label and UUID Russell Coker -# http://etbe.coker.com.au/2008/07/08/label-vs-uuid-vs-device/ -4086 string SWAPSPACE2 Linux/i386 swap file (new style), ->0x400 long x version %d (4K pages), ->0x404 long x size %d pages, ->1052 string \0 no label, ->1052 string >\0 LABEL=%s, ->0x40c belong x UUID=%08x ->0x410 beshort x \b-%04x ->0x412 beshort x \b-%04x ->0x414 beshort x \b-%04x ->0x416 belong x \b-%08x ->0x41a beshort x \b%04x -# ECOFF magic for OSF/1 and Linux (only tested under Linux though) -# -# from Erik Troan (ewt@redhat.com) examining od dumps, so this -# could be wrong -# updated by David Mosberger (davidm@azstarnet.com) based on -# GNU BFD and MIPS info found below. -# -0 leshort 0x0183 ECOFF alpha ->24 leshort 0407 executable ->24 leshort 0410 pure ->24 leshort 0413 demand paged ->8 long >0 not stripped ->8 long 0 stripped ->23 leshort >0 - version %ld. -# -# Linux kernel boot images, from Albert Cahalan -# and others such as Axel Kohlmeyer -# and Nicols Lichtmaier -# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29 -# Linux kernel boot images (i386 arch) (Wolfram Kleff) -514 string HdrS Linux kernel ->510 leshort 0xAA55 x86 boot executable ->>518 leshort >0x1ff ->>>529 byte 0 zImage, ->>>529 byte 1 bzImage, ->>>(526.s+0x200) string >\0 version %s, ->>498 leshort 1 RO-rootFS, ->>498 leshort 0 RW-rootFS, ->>508 leshort >0 root_dev 0x%X, ->>502 leshort >0 swap_dev 0x%X, ->>504 leshort >0 RAMdisksize %u KB, ->>506 leshort 0xFFFF Normal VGA ->>506 leshort 0xFFFE Extended VGA ->>506 leshort 0xFFFD Prompt for Videomode ->>506 leshort >0 Video mode %d -# This also matches new kernels, which were caught above by "HdrS". -0 belong 0xb8c0078e Linux kernel ->0x1e3 string Loading version 1.3.79 or older ->0x1e9 string Loading from prehistoric times - -# System.map files - Nicols Lichtmaier -8 search/1 \ A\ _text Linux kernel symbol map text - -# LSM entries - Nicols Lichtmaier -0 search/1 Begin3 Linux Software Map entry text -0 search/1 Begin4 Linux Software Map entry text (new format) - -# From Matt Zimmerman, enhanced for v3 by Matthew Palmer -0 belong 0x4f4f4f4d User-mode Linux COW file ->4 belong <3 \b, version %d ->>8 string >\0 \b, backing file %s ->4 belong >2 \b, version %d ->>32 string >\0 \b, backing file %s - -############################################################################ -# Linux kernel versions - -0 string \xb8\xc0\x07\x8e\xd8\xb8\x00\x90 Linux ->497 leshort 0 x86 boot sector ->>514 belong 0x8e of a kernel from the dawn of time! ->>514 belong 0x908ed8b4 version 0.99-1.1.42 ->>514 belong 0x908ed8b8 for memtest86 - ->497 leshort !0 x86 kernel ->>504 leshort >0 RAMdisksize=%u KB ->>502 leshort >0 swap=0x%X ->>508 leshort >0 root=0x%X ->>>498 leshort 1 \b-ro ->>>498 leshort 0 \b-rw ->>506 leshort 0xFFFF vga=normal ->>506 leshort 0xFFFE vga=extended ->>506 leshort 0xFFFD vga=ask ->>506 leshort >0 vga=%d ->>514 belong 0x908ed881 version 1.1.43-1.1.45 ->>514 belong 0x15b281cd ->>>0xa8e belong 0x55AA5a5a version 1.1.46-1.2.13,1.3.0 ->>>0xa99 belong 0x55AA5a5a version 1.3.1,2 ->>>0xaa3 belong 0x55AA5a5a version 1.3.3-1.3.30 ->>>0xaa6 belong 0x55AA5a5a version 1.3.31-1.3.41 ->>>0xb2b belong 0x55AA5a5a version 1.3.42-1.3.45 ->>>0xaf7 belong 0x55AA5a5a version 1.3.46-1.3.72 ->>514 string HdrS ->>>518 leshort >0x1FF ->>>>529 byte 0 \b, zImage ->>>>529 byte 1 \b, bzImage ->>>>(526.s+0x200) string >\0 \b, version %s - -# Linux boot sector thefts. -0 belong 0xb8c0078e Linux ->0x1e6 belong 0x454c4b53 ELKS Kernel ->0x1e6 belong !0x454c4b53 style boot sector - -############################################################################ -# Linux 8086 executable -0 lelong&0xFF0000FF 0xC30000E9 Linux-Dev86 executable, headerless ->5 string . ->>4 string >\0 \b, libc version %s - -0 lelong&0xFF00FFFF 0x4000301 Linux-8086 executable ->2 byte&0x01 !0 \b, unmapped zero page ->2 byte&0x20 0 \b, impure ->2 byte&0x20 !0 ->>2 byte&0x10 !0 \b, A_EXEC ->2 byte&0x02 !0 \b, A_PAL ->2 byte&0x04 !0 \b, A_NSYM ->2 byte&0x08 !0 \b, A_STAND ->2 byte&0x40 !0 \b, A_PURE ->2 byte&0x80 !0 \b, A_TOVLY ->28 long !0 \b, not stripped ->37 string . ->>36 string >\0 \b, libc version %s - -# 0 lelong&0xFF00FFFF 0x10000301 ld86 I80386 executable -# 0 lelong&0xFF00FFFF 0xB000301 ld86 M68K executable -# 0 lelong&0xFF00FFFF 0xC000301 ld86 NS16K executable -# 0 lelong&0xFF00FFFF 0x17000301 ld86 SPARC executable - -# SYSLINUX boot logo files (from 'ppmtolss16' sources) -# http://syslinux.zytor.com/ -# -0 lelong =0x1413f33d SYSLINUX' LSS16 image data ->4 leshort x \b, width %d ->6 leshort x \b, height %d - -0 string OOOM User-Mode-Linux's Copy-On-Write disk image ->4 belong x version %d - -# SE Linux policy database -# From: Mike Frysinger -0 lelong 0xf97cff8c SE Linux policy ->16 lelong x v%d ->20 lelong 1 MLS ->24 lelong x %d symbols ->28 lelong x %d ocons - -# Linux Logical Volume Manager (LVM) -# Emmanuel VARAGNAT -# -# System ID, UUID and volume group name are 128 bytes long -# but they should never be full and initialized with zeros... -# -# LVM1 -# -0x0 string HM\001 LVM1 (Linux Logical Volume Manager), version 1 ->0x12c string >\0 , System ID: %s - -0x0 string HM\002 LVM1 (Linux Logical Volume Manager), version 2 ->0x12c string >\0 , System ID: %s - -# LVM2 -# -# It seems that the label header can be in one the four first sector -# of the disk... (from _find_labeller in lib/label/label.c of LVM2) -# -# 0x200 seems to be the common case - -0x218 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) -# read the offset to add to the start of the header, and the header -# start in 0x200 ->(0x214.l+0x200) string >\0 , UUID: %s - -0x018 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) ->(0x014.l) string >\0 , UUID: %s - -0x418 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) ->(0x414.l+0x400) string >\0 , UUID: %s - -0x618 string LVM2\ 001 LVM2 (Linux Logical Volume Manager) ->(0x614.l+0x600) string >\0 , UUID: %s - -# LVM snapshot -# from Jason Farrel -0 string SnAp LVM Snapshot (CopyOnWrite store) ->4 lelong !0 - valid, ->4 lelong 0 - invalid, ->8 lelong x version %d, ->12 lelong x chunk_size %d - -# SE Linux policy database -0 lelong 0xf97cff8c SE Linux policy ->16 lelong x v%d ->20 lelong 1 MLS ->24 lelong x %d symbols ->28 lelong x %d ocons - -# LUKS: Linux Unified Key Setup, On-Disk Format, http://luks.endorphin.org/spec -# Anthon van der Neut (anthon@mnt.org) -0 string LUKS\xba\xbe LUKS encrypted file, ->6 beshort x ver %d ->8 string x [%s, ->40 string x %s, ->72 string x %s] ->168 string x UUID: %s - - -# Summary: Xen saved domain file -# Created by: Radek Vokal -0 string LinuxGuestRecord Xen saved domain ->20 search/256 (name ->>&1 string x (name %s) - -# Type: Xen, the virtual machine monitor -# From: Radek Vokal -0 string LinuxGuestRecord Xen saved domain -#>2 regex \(name\ [^)]*\) %s ->20 search/256 (name (name ->>&1 string x %s...) -#------------------------------------------------------------------------------ -# lisp: file(1) magic for lisp programs -# -# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) - -# updated by Joerg Jenderek -# GRR: This lot is too weak -#0 string ;; -# windows INF files often begin with semicolon and use CRLF as line end -# lisp files are mainly created on unix system with LF as line end -#>2 search/4096 !\r Lisp/Scheme program text -#>2 search/4096 \r Windows INF file - -0 search/4096 (if\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (setq\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (defvar\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (defparam\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (defun\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (autoload\ Lisp/Scheme program text -!:mime text/x-lisp -0 search/4096 (custom-set-variables\ Lisp/Scheme program text -!:mime text/x-lisp - -# Emacs 18 - this is always correct, but not very magical. -0 string \012( Emacs v18 byte-compiled Lisp data -!:mime application/x-elc -# Emacs 19+ - ver. recognition added by Ian Springer -# Also applies to XEmacs 19+ .elc files; could tell them apart with regexs -# - Chris Chittleborough -0 string ;ELC ->4 byte >18 ->4 byte <32 Emacs/XEmacs v%d byte-compiled Lisp data -!:mime application/x-elc - -# Files produced by CLISP Common Lisp From: Bruno Haible -0 string (SYSTEM::VERSION\040' CLISP byte-compiled Lisp program (pre 2004-03-27) -0 string (|SYSTEM|::|VERSION|\040' CLISP byte-compiled Lisp program text - -0 long 0x70768BD2 CLISP memory image data -0 long 0xD28B7670 CLISP memory image data, other endian - -#.com and .bin for MIT scheme -0 string \372\372\372\372 MIT scheme (library?) - -# From: David Allouche -0 search/1 \ - -0 string llvm LLVM byte-codes, uncompressed -0 string llvc0 LLVM byte-codes, null compression -0 string llvc1 LLVM byte-codes, gzip compression -0 string llvc2 LLVM byte-codes, bzip2 compression -0 string \xde\xc0\x17\x0b LLVM bitcode, wrapper -0 string BC\xc0\xde LLVM bitcode -#------------------------------------------------------------------------------ -# lua: file(1) magic for Lua scripting language -# URL: http://www.lua.org/ -# From: Reuben Thomas , Seo Sanghyeon - -# Lua scripts -0 search/1/b #!\ /usr/bin/lua Lua script text executable -!:mime text/x-lua -0 search/1/b #!\ /usr/local/bin/lua Lua script text executable -!:mime text/x-lua -0 search/1 #!/usr/bin/env\ lua Lua script text executable -!:mime text/x-lua -0 search/1 #!\ /usr/bin/env\ lua Lua script text executable -!:mime text/x-lua - -# Lua bytecode -0 string \033Lua Lua bytecode, ->4 byte 0x50 version 5.0 ->4 byte 0x51 version 5.1 - -#------------------------------------------------------------------------------ -# luks: file(1) magic for Linux Unified Key Setup -# URL: http://luks.endorphin.org/spec -# From: Anthon van der Neut - -0 string LUKS\xba\xbe LUKS encrypted file, ->6 beshort x ver %d ->8 string x [%s, ->40 string x %s, ->72 string x %s] ->168 string x UUID: %s -#------------------------------------------------------------ -# Mach has two magic numbers, 0xcafebabe and 0xfeedface. -# Unfortunately the first, cafebabe, is shared with -# Java ByteCode, so they are both handled in the file "cafebabe". -# The "feedface" ones are handled herein. -#------------------------------------------------------------ -0 lelong&0xfffffffe 0xfeedface Mach-O ->0 byte 0xcf 64-bit ->12 lelong 1 object ->12 lelong 2 executable ->12 lelong 3 fixed virtual memory shared library ->12 lelong 4 core ->12 lelong 5 preload executable ->12 lelong 6 dynamically linked shared library ->12 lelong 7 dynamic linker ->12 lelong 8 bundle ->12 lelong 9 dynamically linked shared library stub ->12 lelong >9 ->>12 lelong x filetype=%ld ->4 lelong <0 ->>4 lelong x architecture=%ld ->4 lelong 1 vax ->4 lelong 2 romp ->4 lelong 3 architecture=3 ->4 lelong 4 ns32032 ->4 lelong 5 ns32332 ->4 lelong 6 m68k ->4 lelong 7 i386 ->4 lelong 8 mips ->4 lelong 9 ns32532 ->4 lelong 10 architecture=10 ->4 lelong 11 hppa ->4 lelong 12 acorn ->4 lelong 13 m88k ->4 lelong 14 sparc ->4 lelong 15 i860-big ->4 lelong 16 i860 ->4 lelong 17 rs6000 ->4 lelong 18 ppc ->4 lelong 16777234 ppc64 ->4 lelong >16777234 ->>4 lelong x architecture=%ld -# -0 belong&0xfffffffe 0xfeedface Mach-O ->3 byte 0xcf 64-bit ->12 belong 1 object ->12 belong 2 executable ->12 belong 3 fixed virtual memory shared library ->12 belong 4 core ->12 belong 5 preload executable ->12 belong 6 dynamically linked shared library ->12 belong 7 dynamic linker ->12 belong 8 bundle ->12 belong 9 dynamically linked shared library stub ->12 belong >9 ->>12 belong x filetype=%ld ->4 belong <0 ->>4 belong x architecture=%ld ->4 belong 1 vax ->4 belong 2 romp ->4 belong 3 architecture=3 ->4 belong 4 ns32032 ->4 belong 5 ns32332 ->4 belong 6 for m68k architecture -# from NeXTstep 3.0 -# i.e. mc680x0_all, ignore -# >>8 belong 1 (mc68030) ->>8 belong 2 (mc68040) ->>8 belong 3 (mc68030 only) ->4 belong 7 i386 ->4 belong 8 mips ->4 belong 9 ns32532 ->4 belong 10 architecture=10 ->4 belong 11 hppa ->4 belong 12 acorn ->4 belong 13 m88k ->4 belong 14 sparc ->4 belong 15 i860-big ->4 belong 16 i860 ->4 belong 17 rs6000 ->4 belong 18 ppc ->4 belong 16777234 ppc64 ->4 belong >16777234 ->>4 belong x architecture=%ld - -#------------------------------------------------------------------------------ -# macintosh description -# -# BinHex is the Macintosh ASCII-encoded file format (see also "apple") -# Daniel Quinlan, quinlan@yggdrasil.com -11 string must\ be\ converted\ with\ BinHex BinHex binary text -!:mime application/mac-binhex40 ->41 string x \b, version %.3s - -# Stuffit archives are the de facto standard of compression for Macintosh -# files obtained from most archives. (franklsm@tuns.ca) -0 string SIT! StuffIt Archive (data) -!:mime application/x-stuffit -!:apple SIT!SIT! ->2 string x : %s -0 string SITD StuffIt Deluxe (data) ->2 string x : %s -0 string Seg StuffIt Deluxe Segment (data) ->2 string x : %s - -# Newer StuffIt archives (grant@netbsd.org) -0 string StuffIt StuffIt Archive -!:mime application/x-stuffit -!:apple SIT!SIT! -#>162 string >0 : %s - -# Macintosh Applications and Installation binaries (franklsm@tuns.ca) -# GRR: Too weak -#0 string APPL Macintosh Application (data) -#>2 string x \b: %s - -# Macintosh System files (franklsm@tuns.ca) -# GRR: Too weak -#0 string zsys Macintosh System File (data) -#0 string FNDR Macintosh Finder (data) -#0 string libr Macintosh Library (data) -#>2 string x : %s -#0 string shlb Macintosh Shared Library (data) -#>2 string x : %s -#0 string cdev Macintosh Control Panel (data) -#>2 string x : %s -#0 string INIT Macintosh Extension (data) -#>2 string x : %s -#0 string FFIL Macintosh Truetype Font (data) -#>2 string x : %s -#0 string LWFN Macintosh Postscript Font (data) -#>2 string x : %s - -# Additional Macintosh Files (franklsm@tuns.ca) -# GRR: Too weak -#0 string PACT Macintosh Compact Pro Archive (data) -#>2 string x : %s -#0 string ttro Macintosh TeachText File (data) -#>2 string x : %s -#0 string TEXT Macintosh TeachText File (data) -#>2 string x : %s -#0 string PDF Macintosh PDF File (data) -#>2 string x : %s - -# MacBinary format (Eric Fischer, enf@pobox.com) -# -# Unfortunately MacBinary doesn't really have a magic number prior -# to the MacBinary III format. The checksum is really the way to -# do it, but the magic file format isn't up to the challenge. -# -# 0 byte 0 -# 1 byte # filename length -# 2 string # filename -# 65 string # file type -# 69 string # file creator -# 73 byte # Finder flags -# 74 byte 0 -# 75 beshort # vertical posn in window -# 77 beshort # horiz posn in window -# 79 beshort # window or folder ID -# 81 byte # protected? -# 82 byte 0 -# 83 belong # length of data segment -# 87 belong # length of resource segment -# 91 belong # file creation date -# 95 belong # file modification date -# 99 beshort # length of comment after resource -# 101 byte # new Finder flags -# 102 string mBIN # (only in MacBinary III) -# 106 byte # char. code of file name -# 107 byte # still more Finder flags -# 116 belong # total file length -# 120 beshort # length of add'l header -# 122 byte 129 # for MacBinary II -# 122 byte 130 # for MacBinary III -# 123 byte 129 # minimum version that can read fmt -# 124 beshort # checksum -# -# This attempts to use the version numbers as a magic number, requiring -# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second -# be 0x81. This works for the files I have, but maybe not for everyone's. - -# Unfortunately, this magic is quite weak - MPi -#122 beshort&0xFCFF 0x8081 Macintosh MacBinary data - -# MacBinary I doesn't have the version number field at all, but MacBinary II -# has been in use since 1987 so I hope there aren't many really old files -# floating around that this will miss. The original spec calls for using -# the nulls in 0, 74, and 82 as the magic number. -# -# Another possibility, that would also work for MacBinary I, is to use -# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will -# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset, -# and that 74 will be 0. So something like -# -# 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data -# -# >73 byte&0x01 0x01 \b, inited -# >73 byte&0x02 0x02 \b, changed -# >73 byte&0x04 0x04 \b, busy -# >73 byte&0x08 0x08 \b, bozo -# >73 byte&0x10 0x10 \b, system -# >73 byte&0x10 0x20 \b, bundle -# >73 byte&0x10 0x40 \b, invisible -# >73 byte&0x10 0x80 \b, locked - -#>65 string x \b, type "%4.4s" - -#>65 string 8BIM (PhotoShop) -#>65 string ALB3 (PageMaker 3) -#>65 string ALB4 (PageMaker 4) -#>65 string ALT3 (PageMaker 3) -#>65 string APPL (application) -#>65 string AWWP (AppleWorks word processor) -#>65 string CIRC (simulated circuit) -#>65 string DRWG (MacDraw) -#>65 string EPSF (Encapsulated PostScript) -#>65 string FFIL (font suitcase) -#>65 string FKEY (function key) -#>65 string FNDR (Macintosh Finder) -#>65 string GIFf (GIF image) -#>65 string Gzip (GNU gzip) -#>65 string INIT (system extension) -#>65 string LIB\ (library) -#>65 string LWFN (PostScript font) -#>65 string MSBC (Microsoft BASIC) -#>65 string PACT (Compact Pro archive) -#>65 string PDF\ (Portable Document Format) -#>65 string PICT (picture) -#>65 string PNTG (MacPaint picture) -#>65 string PREF (preferences) -#>65 string PROJ (Think C project) -#>65 string QPRJ (Think Pascal project) -#>65 string SCFL (Defender scores) -#>65 string SCRN (startup screen) -#>65 string SITD (StuffIt Deluxe) -#>65 string SPn3 (SuperPaint) -#>65 string STAK (HyperCard stack) -#>65 string Seg\ (StuffIt segment) -#>65 string TARF (Unix tar archive) -#>65 string TEXT (ASCII) -#>65 string TIFF (TIFF image) -#>65 string TOVF (Eudora table of contents) -#>65 string WDBN (Microsoft Word word processor) -#>65 string WORD (MacWrite word processor) -#>65 string XLS\ (Microsoft Excel) -#>65 string ZIVM (compress (.Z)) -#>65 string ZSYS (Pre-System 7 system file) -#>65 string acf3 (Aldus FreeHand) -#>65 string cdev (control panel) -#>65 string dfil (Desk Acessory suitcase) -#>65 string libr (library) -#>65 string nX^d (WriteNow word processor) -#>65 string nX^w (WriteNow dictionary) -#>65 string rsrc (resource) -#>65 string scbk (Scrapbook) -#>65 string shlb (shared library) -#>65 string ttro (SimpleText read-only) -#>65 string zsys (system file) - -#>69 string x \b, creator "%4.4s" - -# Somewhere, Apple has a repository of registered Creator IDs. These are -# just the ones that I happened to have files from and was able to identify. - -#>69 string 8BIM (Adobe Photoshop) -#>69 string ALD3 (PageMaker 3) -#>69 string ALD4 (PageMaker 4) -#>69 string ALFA (Alpha editor) -#>69 string APLS (Apple Scanner) -#>69 string APSC (Apple Scanner) -#>69 string BRKL (Brickles) -#>69 string BTFT (BitFont) -#>69 string CCL2 (Common Lisp 2) -#>69 string CCL\ (Common Lisp) -#>69 string CDmo (The Talking Moose) -#>69 string CPCT (Compact Pro) -#>69 string CSOm (Eudora) -#>69 string DMOV (Font/DA Mover) -#>69 string DSIM (DigSim) -#>69 string EDIT (Macintosh Edit) -#>69 string ERIK (Macintosh Finder) -#>69 string EXTR (self-extracting archive) -#>69 string Gzip (GNU gzip) -#>69 string KAHL (Think C) -#>69 string LWFU (LaserWriter Utility) -#>69 string LZIV (compress) -#>69 string MACA (MacWrite) -#>69 string MACS (Macintosh operating system) -#>69 string MAcK (MacKnowledge terminal emulator) -#>69 string MLND (Defender) -#>69 string MPNT (MacPaint) -#>69 string MSBB (Microsoft BASIC (binary)) -#>69 string MSWD (Microsoft Word) -#>69 string NCSA (NCSA Telnet) -#>69 string PJMM (Think Pascal) -#>69 string PSAL (Hunt the Wumpus) -#>69 string PSI2 (Apple File Exchange) -#>69 string R*ch (BBEdit) -#>69 string RMKR (Resource Maker) -#>69 string RSED (Resource Editor) -#>69 string Rich (BBEdit) -#>69 string SIT! (StuffIt) -#>69 string SPNT (SuperPaint) -#>69 string Unix (NeXT Mac filesystem) -#>69 string VIM! (Vim editor) -#>69 string WILD (HyperCard) -#>69 string XCEL (Microsoft Excel) -#>69 string aCa2 (Fontographer) -#>69 string aca3 (Aldus FreeHand) -#>69 string dosa (Macintosh MS-DOS file system) -#>69 string movr (Font/DA Mover) -#>69 string nX^n (WriteNow) -#>69 string pdos (Apple ProDOS file system) -#>69 string scbk (Scrapbook) -#>69 string ttxt (SimpleText) -#>69 string ufox (Foreign File Access) - -# Just in case... - -102 string mBIN MacBinary III data with surprising version number - -# sas magic from Bruce Foster (bef@nwu.edu) -# -#0 string SAS SAS -#>8 string x %s -0 string SAS SAS ->24 string DATA data file ->24 string CATALOG catalog ->24 string INDEX data file index ->24 string VIEW data view -# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com) -# -0x54 string SAS SAS 7+ ->0x9C string DATA data file ->0x9C string CATALOG catalog ->0x9C string INDEX data file index ->0x9C string VIEW data view - -# spss magic for SPSS system and portable files, -# from Bruce Foster (bef@nwu.edu). - -0 long 0xc1e2c3c9 SPSS Portable File ->40 string x %s - -0 string $FL2 SPSS System File ->24 string x %s - -# Macintosh filesystem data -# From "Tom N Harris" -# Fixed HFS+ and Partition map magic: Ethan Benson -# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these -# entries depend on the data arithmetic added after v.35 -# There's also some Pascal strings in here, ditto... - -# The boot block signature, according to IM:Files, is -# "for HFS volumes, this field always contains the value 0x4C4B." -# But if this is true for MFS or HFS+ volumes, I don't know. -# Alternatively, the boot block is supposed to be zeroed if it's -# unused, so a simply >0 should suffice. - -0x400 beshort 0xD2D7 Macintosh MFS data ->0 beshort 0x4C4B (bootable) ->0x40a beshort &0x8000 (locked) ->0x402 beldate-0x7C25B080 x created: %s, ->0x406 beldate-0x7C25B080 >0 last backup: %s, ->0x414 belong x block size: %d, ->0x412 beshort x number of blocks: %d, ->0x424 pstring x volume name: %s - -# "BD" is has many false positives -#0x400 beshort 0x4244 Macintosh HFS data -#>0 beshort 0x4C4B (bootable) -#>0x40a beshort &0x8000 (locked) -#>0x40a beshort ^0x0100 (mounted) -#>0x40a beshort &0x0200 (spared blocks) -#>0x40a beshort &0x0800 (unclean) -#>0x47C beshort 0x482B (Embedded HFS+ Volume) -#>0x402 beldate-0x7C25B080 x created: %s, -#>0x406 beldate-0x7C25B080 x last modified: %s, -#>0x440 beldate-0x7C25B080 >0 last backup: %s, -#>0x414 belong x block size: %d, -#>0x412 beshort x number of blocks: %d, -#>0x424 pstring x volume name: %s - -0x400 beshort 0x482B Macintosh HFS Extended ->&0 beshort x version %d data ->0 beshort 0x4C4B (bootable) ->0x404 belong ^0x00000100 (mounted) ->&2 belong &0x00000200 (spared blocks) ->&2 belong &0x00000800 (unclean) ->&2 belong &0x00008000 (locked) ->&6 string x last mounted by: '%.4s', -# really, that should be treated as a belong and we print a string -# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1" ->&14 beldate-0x7C25B080 x created: %s, -# only the creation date is local time, all other timestamps in HFS+ are UTC. ->&18 bedate-0x7C25B080 x last modified: %s, ->&22 bedate-0x7C25B080 >0 last backup: %s, ->&26 bedate-0x7C25B080 >0 last checked: %s, ->&38 belong x block size: %d, ->&42 belong x number of blocks: %d, ->&46 belong x free blocks: %d - -# I don't think this is really necessary since it doesn't do much and -# anything with a valid driver descriptor will also have a valid -# partition map -#0 beshort 0x4552 Apple Device Driver data -#>&24 beshort =1 \b, MacOS - -# Is that the partition type a cstring or a pstring? Well, IM says "strings -# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a -# cstring. Of course, partitions can contain more than four entries, but -# what're you gonna do? -# GRR: This magic is too weak, it is just "PM" -#0x200 beshort 0x504D Apple Partition data -#>0x2 beshort x (block size: %d): -#>0x230 string x first type: %s, -#>0x210 string x name: %s, -#>0x254 belong x number of blocks: %d, -#>0x400 beshort 0x504D -#>>0x430 string x second type: %s, -#>>0x410 string x name: %s, -#>>0x454 belong x number of blocks: %d, -#>>0x600 beshort 0x504D -#>>>0x630 string x third type: %s, -#>>>0x610 string x name: %s, -#>>>0x654 belong x number of blocks: %d, -#>>0x800 beshort 0x504D -#>>>0x830 string x fourth type: %s, -#>>>0x810 string x name: %s, -#>>>0x854 belong x number of blocks: %d, -#>>>0xa00 beshort 0x504D -#>>>>0xa30 string x fifth type: %s, -#>>>>0xa10 string x name: %s, -#>>>>0xa54 belong x number of blocks: %d -#>>>0xc00 beshort 0x504D -#>>>>0xc30 string x sixth type: %s, -#>>>>0xc10 string x name: %s, -#>>>>0xc54 belong x number of blocks: %d -## AFAIK, only the signature is different -#0x200 beshort 0x5453 Apple Old Partition data -#>0x2 beshort x block size: %d, -#>0x230 string x first type: %s, -#>0x210 string x name: %s, -#>0x254 belong x number of blocks: %d, -#>0x400 beshort 0x504D -#>>0x430 string x second type: %s, -#>>0x410 string x name: %s, -#>>0x454 belong x number of blocks: %d, -#>>0x800 beshort 0x504D -#>>>0x830 string x third type: %s, -#>>>0x810 string x name: %s, -#>>>0x854 belong x number of blocks: %d, -#>>>0xa00 beshort 0x504D -#>>>>0xa30 string x fourth type: %s, -#>>>>0xa10 string x name: %s, -#>>>>0xa54 belong x number of blocks: %d - -# From: Remi Mommsen -0 string BOMStore Mac OS X bill of materials (BOM) file - -#------------------------------------------------------------------------------ -# magic: file(1) magic for magic files -# -0 string #\ Magic magic text file for file(1) cmd -0 lelong 0xF11E041C magic binary file for file(1) cmd ->4 lelong x (version %d) (little endian) -0 belong 0xF11E041C magic binary file for file(1) cmd ->4 belong x (version %d) (big endian) -#------------------------------------------------------------------------------ -# mail.news: file(1) magic for mail and news -# -# Unfortunately, saved netnews also has From line added in some news software. -#0 string From mail text -# There are tests to ascmagic.c to cope with mail and news. -0 string Relay-Version: old news text -!:mime message/rfc822 -0 string #!\ rnews batched news text -!:mime message/rfc822 -0 string N#!\ rnews mailed, batched news text -!:mime message/rfc822 -0 string Forward\ to mail forwarding text -!:mime message/rfc822 -0 string Pipe\ to mail piping text -!:mime message/rfc822 -0 string Return-Path: smtp mail text -!:mime message/rfc822 -0 string Path: news text -!:mime message/news -0 string Xref: news text -!:mime message/news -0 string From: news or mail text -!:mime message/rfc822 -0 string Article saved news text -!:mime message/news -0 string BABYL Emacs RMAIL text -0 string Received: RFC 822 mail text -!:mime message/rfc822 -0 string MIME-Version: MIME entity text -#0 string Content- MIME entity text - -# TNEF files... -0 lelong 0x223E9F78 Transport Neutral Encapsulation Format - -# From: Kevin Sullivan -0 string *mbx* MBX mail folder - -# From: Simon Matter -0 string \241\002\213\015skiplist\ file\0\0\0 Cyrus skiplist DB - -# JAM(mbp) Fidonet message area databases -# JHR file -0 string JAM\0 JAM message area header file ->12 leshort >0 (%d messages) - -# Squish Fidonet message area databases -# SQD file (requires at least one message in the area) -# XXX: Weak magic -#256 leshort 0xAFAE4453 Squish message area data file -#>4 leshort >0 (%d messages) - -#0 string \ - P2P Modo:   + Interfaz de Red:   '; $iface="eth0=eth0".chr(13); @@ -167,7 +167,7 @@ if ($opcion!=$op_alta){ -  > Driver de Red:   + Driver de Red:   '; $driver="generic=generic"; -- cgit v1.2.3-18-g5258 From 914d834897ea6bbdf9f8486e737c820c87ca69d5 Mon Sep 17 00:00:00 2001 From: adv Date: Thu, 24 Feb 2011 21:19:31 +0000 Subject: branch version 1.0 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1503 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Database/alterbd.sql | 4 +- admin/Database/ogAdmBD.sql | 4 +- admin/Interface/CrearImagen | 23 +- admin/Interface/EjecutarScript | 24 +- admin/Interface/RestaurarImagen | 11 +- client/engine/Image.lib | 793 ++++++++++++++-------- client/engine/Image.lib.testing | 566 --------------- client/engine/Protocol.lib | 476 ++----------- client/engine/System.lib | 31 + client/engine/XFileSystem.lib | 293 -------- client/nfsexport/etc/init/default.sh | 20 +- client/nfsexport/etc/preinit/defaultTESTING.sh | 11 +- client/nfsexport/etc/preinit/fileslinks.sh | 38 -- client/nfsexport/etc/preinit/fileslinks.sh.NoUsed | 38 ++ client/nfsexport/etc/preinit/loadenviron.sh | 31 +- client/nfsexport/etc/preinit/loadmodules.sh | 10 +- client/nfsexport/etc/preinit/loadudeb.sh | 27 - client/nfsexport/etc/preinit/loadudeb.sh.NoUsed | 27 + client/nfsexport/etc/preinit/metadevs.sh | 28 - client/nfsexport/etc/preinit/metadevs.sh.NoUsed | 28 + client/nfsexport/scripts/cloneRemoteFromMaster | 215 ++++++ client/nfsexport/scripts/createImage | 11 +- client/nfsexport/scripts/deployImage | 20 + client/nfsexport/scripts/poweroff | 3 +- client/nfsexport/scripts/reboot | 3 +- client/nfsexport/scripts/restoreImage | 10 +- client/nfsexport/scripts/updateCache | 96 +++ 27 files changed, 1133 insertions(+), 1708 deletions(-) delete mode 100644 client/engine/Image.lib.testing delete mode 100755 client/engine/XFileSystem.lib delete mode 100755 client/nfsexport/etc/preinit/fileslinks.sh create mode 100755 client/nfsexport/etc/preinit/fileslinks.sh.NoUsed delete mode 100755 client/nfsexport/etc/preinit/loadudeb.sh create mode 100755 client/nfsexport/etc/preinit/loadudeb.sh.NoUsed delete mode 100755 client/nfsexport/etc/preinit/metadevs.sh create mode 100755 client/nfsexport/etc/preinit/metadevs.sh.NoUsed create mode 100755 client/nfsexport/scripts/cloneRemoteFromMaster create mode 100755 client/nfsexport/scripts/deployImage create mode 100755 client/nfsexport/scripts/updateCache diff --git a/admin/Database/alterbd.sql b/admin/Database/alterbd.sql index d492d33f..6838af65 100644 --- a/admin/Database/alterbd.sql +++ b/admin/Database/alterbd.sql @@ -37,8 +37,8 @@ INSERT INTO `itemboot` (`label`, `kernel`, `append`) VALUES ('1_localboot', 'LOCALBOOT 0', ' '), ('11', 'KERNEL syslinux/chain.c32', 'APPEND hd0 1'), ('12', 'KERNEL syslinux/chain.c32', 'APPEND hd0 2'), -('ogClientUser', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb engine=testing ogactiveadmin=false'), -('ogClientAdmin', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb engine=testing ogactiveadmin=true'), +('ogClientUser', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false'), +('ogClientAdmin', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true'), ('ogInitrdUser', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=user '), ('ogInitrdAdmin', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin '); diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql index 8cf65dc1..315fe0ea 100644 --- a/admin/Database/ogAdmBD.sql +++ b/admin/Database/ogAdmBD.sql @@ -951,8 +951,8 @@ INSERT INTO `itemboot` (`label`, `kernel`, `append`) VALUES ('1_localboot', 'LOCALBOOT 0', ' '), ('11', 'KERNEL syslinux/chain.c32', 'APPEND hd0 1'), ('12', 'KERNEL syslinux/chain.c32', 'APPEND hd0 2'), -('ogClientUser', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb engine=testing ogactiveadmin=false'), -('ogClientAdmin', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb engine=testing ogactiveadmin=true'), +('ogClientUser', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false'), +('ogClientAdmin', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true'), ('ogInitrdUser', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=user '), ('ogInitrdAdmin', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin '); diff --git a/admin/Interface/CrearImagen b/admin/Interface/CrearImagen index ac20c339..c5ac4a5b 100755 --- a/admin/Interface/CrearImagen +++ b/admin/Interface/CrearImagen @@ -8,12 +8,25 @@ # $3 Nombre can�nico de la imagen # $4 Direcci�n del repositorio #_______________________________________________________________________________________________________________________________ -if [ "$engine" == "testing" ] +echo $* >> $OGLOGFILE + +umount /opt/opengnsys/images + +if [ "$ogprotocol" == "nfs" ] +then + mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock +fi + +if [ "$ogprotocol" == "smb" ] +then + echo "montando smb" + mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og +fi + +if [ -f createImage$ogengine ] then - echo $* >> $OGLOGFILE - createImage "$1" "$2" "REPO" "$3" &>> $OGLOGFILE || exit $? + createImage$ogengine "$1" "$2" "REPO" "$3" &>> $OGLOGFILE || exit $? else - createImage "$1" "$2" "REPO" "$3" + createImage "$1" "$2" "REPO" "$3" &>> $OGLOGFILE || exit $? fi - diff --git a/admin/Interface/EjecutarScript b/admin/Interface/EjecutarScript index 09e746cf..101bd15f 100755 --- a/admin/Interface/EjecutarScript +++ b/admin/Interface/EjecutarScript @@ -1,16 +1,10 @@ #!/bin/bash -if [ "$engine" == "testing" ] - then - echo -e >> $OGLOGFILE - echo "Contenido de la ejecucion: *****************************" >> $OGLOGFILE - cat $1 >> $OGLOGFILE - echo -e >> $OGLOGFILE - echo -e >> $OGLOGFILE - echo "Salida: *****************************" >> $OGLOGFILE - chmod +x $1 - $1 &>> $OGLOGFILE || exit $? - echo "Fin: *****************************" >> $OGLOGFILE -else - chmod +x $1 - $1 || exit $? -fi + +echo -e >> $OGLOGFILE +echo "Contenido de la ejecucion: *****************************" >> $OGLOGFILE +cat $1 >> $OGLOGFILE +echo -e >> $OGLOGFILE +echo -e >> $OGLOGFILE +echo "Salida: *****************************" >> $OGLOGFILE +chmod +x $1 +$1 &>> $OGLOGFILE || exit $? diff --git a/admin/Interface/RestaurarImagen b/admin/Interface/RestaurarImagen index 8556807a..6e2ed2f6 100755 --- a/admin/Interface/RestaurarImagen +++ b/admin/Interface/RestaurarImagen @@ -8,11 +8,14 @@ # $4 Direcci�n del repositorio #_______________________________________________________________________________________________________________________________ -if [ "$engine" == "testing" ] +echo $* >> $OGLOGFILE +echo $* >> $OGLOGFILE +if [ -f createImage$ogengine ] then - echo $* >> $OGLOGFILE - restoreImage REPO $3 $1 $2 UNICAST &>> $OGLOGFILE || exit $? + restoreImage$ogengine REPO $3 $1 $2 UNICAST &>> $OGLOGFILE || exit $? else - ogRestoreImage REPO $3 $1 $2 UNICAST + restoreImage REPO $3 $1 $2 UNICAST &>> $OGLOGFILE || exit $? fi + + diff --git a/client/engine/Image.lib b/client/engine/Image.lib index 8163df3f..fcf2f7ce 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -8,6 +8,278 @@ #@warning License: GNU GPLv3+ #*/ +# Bloquear imagen para creación. +function ogLockImage () +{ +# Variables locales +local IMGDIR + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ + "$FUNCNAME /opt/opengnsys/images/aula1/winxp.img" \ + "$FUNCNAME REPO /aula1/winxp.img" + return +fi +# Error si no se reciben 1 o 2 parámetros. +[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? +# Comprobar que existe directorio de imagen +IMGDIR=$(ogGetParentPath $@) || return $? +# Crear fichero de bloqueo. +touch $IMGDIR/$(basename "${!#}").lock +} + +# Desbloquear imagen (borrar fichero de bloqueo). +function ogUnlockImage () +{ +# Variables locales +local IMGDIR + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ + "$FUNCNAME /opt/opengnsys/images/aula1/winxp.img" \ + "$FUNCNAME REPO /aula1/winxp.img" + return +fi +# Error si no se reciben 1 o 2 parámetros. +[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? +# Borrar fichero de bloqueo para la imagen. +rm -f $(ogGetPath $@.lock) +} + +# Comprobar si el fichero de bloqueo para una imagen. +function ogIsImageLocked () +{ +# Variables locales +local IMGDIR + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ + "if $FUNCNAME /opt/opengnsys/images/aula1/winxp.img; then ...; fi" \ + "if $FUNCNAME REPO /aula1/winxp.img; then ...; fi" + return +fi +# Comprobar si existe el fichero de bloqueo. +test -n "$(ogGetPath $@.lock)" +} + + +function ogPartcloneSyntax () +{ +#TODO: comprobar como unico parametro particion /dev/sda1 +#COMPAR="partclone.$FS --clone --force --source $PART" +COMPAR="-F -c -s " +TYPE="$(ogGetFsType `ogDevToDisk $1`)" +case "$TYPE" in + EXT[234]) + echo "partclone.extfs $COMPAR $1" + ;; + REISERFS|XFS|JFS) + echo "partclone.dd $COMPAR $1" + ;; + NTFS|HNTFS) + echo "partclone.ntfs $COMPAR $1" + ;; + FAT16|FAT32|HFAT16|HFAT32) + echo "partclone.fat $COMPAR $1" + ;; + HFS|HFS+) + echo "partclone.hfsp $COMPAR $1" + ;; + *) ogRaiseError $OG_ERR_PARTITION "$1 $TYPE" + return $? ;; +esac +} + +#/** +# ogCreateImageSyntax partition filename [tools] [levelcompresor] +#@brief Genera una cadena de texto con la instrucción para crear un fichero imagen +#@param 1 partition identificador linux del dispositivo particion. +#@param 2 filename path absoluto del fichero imagen +#@param 3 [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone] +#@param 4 [opcional] str_levelcompresor nivel de compresion. [0 -none-, 1-lzop-, 2-gzip] +#@return cadena con el comando que se debe ejecutar. +#@exception OG_ERR_FORMAT formato incorrecto. +#@warning En pruebas iniciales +#@TODO introducir las herramientas fsarchiver, dd +#@TODO introducir el nivel de compresion gzip +#@version 1.0 - Primeras pruebas +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2010/02/08 +#*/ ## + +function ogCreateImageSyntax() +{ +local FS TOOL LEVEL PART IMGFILE BUFFER + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME partition filename [tool] [levelcompresor]" \ + "$FUNCNAME /dev/sda1 /opt/opengnsys/images/prueba.img partclone lzop" + return +fi +# Error si no se reciben al menos los 2 parámetros para obtener el valor default. +[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? + + +PART=`echo $1` +IMGFILE=`echo $2` + +case "$#" in + "2") + # Sintaxis por defecto OG PART IMGFILE + #echo "partimage -M -f3 -o -d -V0 -B gui=no -c -z1 save $PART $IMGFILE" + # Se comenta la instruccion que debería ir aqui + ogCreateImageSyntax $1 $2 partclone gzip + ;; + "4") + # Sintaxis condicionada. + # comprobamos parametro herramienta compresion. + TOOL=$(echo $3 | tr [A-Z] [a-z]) + #ogCheckProgram $TOOL + #comprobar parámetro compresor. + LEVEL=$(echo $4 | tr [A-Z] [a-z]) + #ogCheckProgram $LEVEL + + # herramienta + case "$TOOL" in + "ntfsclone") + PARAM1="ntfsclone --force --save-image -O - $PART" + ;; + "partimage"|DEFAULT) + PARAM1="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $PART stdout" + ;; + "partclone") + PARAM1=`ogPartcloneSyntax $PART` || ogRaiseError $OG_ERR_FORMAT || return $? + ;; + esac + # mbuffer + which mbuffer > /dev/null && PARAM2="| mbuffer -q -m 40M " || PARAM2=" " + + # nivel de compresion + case "$LEVEL" in + "0"|"none") + PARAM3=" > " + ;; + "1"|"lzop") + PARAM3=" | lzop > " + ;; + "2"|"gzip") + PARAM3=" | gzip -c > " + ;; + "3"|"bzip") + PARAM3=" | bzip -c > " + ;; + esac + #sintaxis final. + echo "$PARAM1 $PARAM2 $PARAM3 $IMGFILE" + ;; +esac +} + + +#/** +# ogRestoreImageSyntax filename partition [tools] [levelcompresor] +#@brief Genera una cadena de texto con la instrucción para crear un fichero imagen +#@param 1 filename path absoluto del fichero imagen +#@param 2 partition identificador linux del dispositivo particion. +#@param 3 [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone] +#@param 4 [opcional] str_levelcompresor nivel de compresion. [0 -none-, 1-lzop-, 2-gzip] +#@return cadena con el comando que se debe ejecutar. +#@exception OG_ERR_FORMAT formato incorrecto. +#@warning En pruebas iniciales +#@TODO introducir las herramientas fsarchiver, dd +#@TODO introducir el nivel de compresion gzip +#@version 1.0 - Primeras pruebas +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2010/02/08 +#*/ ## + +ogRestoreImageSyntax () +{ +local TOOL COMPRESSOR LEVEL PART IMGFILE FILEHEAD INFOIMG + + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME filename partition [tool] [levelcompresor]" \ + "$FUNCNAME /opt/opengnsys/images/prueba.img /dev/sda1 [partclone] [lzop]" + return +fi + +# Error si no se reciben al menos 2 parámetros. +[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? + +# controlamos que el parametro 1 (imagen) es tipo file. +[ -f $1 ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $? + +# Si 2 parametros (file-origen-, device-destino-) = ogGetImageFull($1) +if [ "$#" -eq 2 ]; then + IMGFILE=$1 + PART=$2 + INFOIMG=$(ogGetImageInfo $IMGFILE) || ogRaiseError $OG_ERR_NOTFOUND "No Image $1" || return $? + TOOL=`echo $INFOIMG | cut -f1 -d:` + COMPRESSOR=`echo $INFOIMG | cut -f2 -d:` + ogRestoreImageSyntax $IMGFILE $PART $TOOL $COMPRESSOR +fi + + +# Si cuatro parametros genera sintaxis +if [ "$#" -eq 4 ]; then + IMGFILE=$1 + PART=$2 + # comprobamos parametro herramienta compresion. + TOOL=$(echo $3 | tr [A-Z] [a-z]) + #ogCheckProgram $TOOL + #comprobar parámetro compresor. + LEVEL=$(echo $4 | tr [A-Z] [a-z]) + #ogCheckProgram $LEVEL + + case "$LEVEL" in + "0"|"none") + COMPRESSOR=" " + ;; + "1"|"lzop" | "LZOP") + COMPRESSOR=" lzop -dc " + ;; + "2"|"gzip" | "GZIP") + COMPRESSOR=" gzip -dc " + ;; + "3"|"bzip" | "BZIP" ) + COMPRESSOR=" bzip -dc " + ;; + *) + ogRaiseError $OG_ERR_NOTFOUND "Compressor no valid $TOOL" || return $? + ;; + esac + #comprobar mbuffer + which mbuffer > /dev/null && MBUFFER="| mbuffer -q -m 40M " || MBUFFER=" " + + case "$TOOL" in + "ntfsclone" | "NTFSCLONE") + TOOL="| ntfsclone --restore-image --overwrite $PART -" + ;; + "partimage"| "PARTIMAGE") + TOOL="| partimage -f3 -B gui=no restore $PART stdin" + ;; + "partclone" | "PARTCLONE") + # -C para que no compruebe tamaños + TOOL="| partclone.restore -o $PART" + ;; + *) + ogRaiseError $OG_ERR_NOTFOUND "Tools imaging no valid $TOOL" || return $? + ;; + esac + + echo "$COMPRESSOR $IMGFILE $MBUFFER $TOOL" +fi + +} + + + #/** # ogCreateImage int_ndisk int_npartition str_repo path_image @@ -46,7 +318,7 @@ if [ "$*" == "help" ]; then return fi # Error si no se reciben 4 parámetros. -[ $# -ne 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? +[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? # Comprobar que no está bloqueada ni la partición, ni la imagen. PART="$(ogDiskToDev $1 $2)" || return $? @@ -54,8 +326,9 @@ if ogIsLocked $1 $2; then ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $1, $2" return $? fi -IMGTYPE="pgz" # Partclone / GZip +IMGTYPE="img" # Extensión genérica de imágenes. IMGDIR=$(ogGetParentPath "$3" "$4") + [ -n "$IMGDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$3 $(dirname $4)" || return $? IMGFILE="$IMGDIR/$(basename "$4").$IMGTYPE" if ogIsImageLocked "$IMGFILE"; then @@ -69,22 +342,10 @@ ogLockImage "$3" "$4.$IMGTYPE" || return $? # Crear Imagen. trap "ogUnlock $1 $2; ogUnlockImage "$3" "$4.$IMGTYPE"; rm -f $IMGFILE" 1 2 3 6 9 -TYPE="$(ogGetFsType $1 $2)" -case "$TYPE" in - EXT[234]) - PROGRAM=partclone.extfs ;; - REISERFS|XFS|JFS) - PROGRAM=partclone.dd ;; - NTFS|HNTFS) - PROGRAM=partclone.ntfs ;; - FAT16|FAT32|HFAT16|HFAT32) - PROGRAM=partclone.fat ;; - HFS|HFS+) - PROGRAM=partclone.hfsp ;; - *) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE" - return $? ;; -esac -$PROGRAM -c -C -F -s $PART | mbuffer -q -m 70% | gzip -c > "$IMGFILE" +#Solicitamos la generación de la instruccion a ejecutar +PROGRAM=`ogCreateImageSyntax $PART $IMGFILE $5 $6` +echo $PROGRAM +eval $PROGRAM # Controlar salida de error y desbloquear partición. ERRCODE=$? @@ -99,6 +360,230 @@ return $ERRCODE } + + + + + + +#/** +# ogRestoreImage str_repo path_image int_ndisk int_npartition +#@brief Restaura una imagen de sistema de archivos en una partición. +#@param str_repo repositorio de imágenes o caché local +#@param path_image camino de la imagen +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@return (por determinar) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados. +#@exception OG_ERR_LOCKED partición bloqueada por otra operación. +#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema. +#@todo Comprobar incongruencias partición-imagen, control de errores, definir parámetros, caché/repositorio, etc. +#@version 0.1 - Integracion para Opengnsys - HIDRA:RestaurarImagen{EXT3, NTFS}.sh; EAC: RestorePartitionFromImage() en Deploy.lib +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@Date 2008/05/13 +#@author Antonio J. Doblas Viso. Universidad de Malaga +#@date 2008/10/27 +#@version 0.9 - Primera version muy en pruebas para OpenGnSys +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009/09/10 +#*/ ## +function ogRestoreImage () +{ +# Variables locales +local PART PARTSIZE IMGFILE IMGTYPE IMGSIZE FSTYPE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk int_npart" \ + "$FUNCNAME REPO /aula1/winxp 1 1" + return +fi +# Error si no se reciben 4 parámetros. +[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? +# Procesar parámetros. +PART="$(ogDiskToDev "$3" "$4")" || return $? +#IMGTYPE=$(ogGetImageType "$1" "$2") +IMGTYPE=img +IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? +# Error si la imagen no cabe en la particion. +IMGSIZE=$(ogGetImageSize "$1" "$2") +PARTSIZE=$(ogGetPartitionSize $3 $4) +if [ $IMGSIZE -gt $PARTSIZE ]; then + ogRaiseError $OG_ERR_PARTITION "$IMGSIZE > $PARTSIZE" + return $? +fi + +# Comprobar el bloqueo de la imagen y de la partición. +if ogIsImageLocked "$IMGFILE"; then + ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $1, $2.$IMGTYPE" + return $? +fi +if ogIsLocked $3 $4; then + ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $3, $4" + return $? +fi +# Desmontar y bloquear partición. +ogUnmount $3 $4 2>/dev/null || return $? +ogLock $3 $4 || return $? +trap "ogUnlock $3 $4" 1 2 3 6 9 + +# Restaurar según el tipo de imagen. +# Atención: no se comprueba el tipo de sistema de archivos. +# Atención: no se comprueba incongruencia entre partición e imagen. +#Solicitamos la generación de la instruccion a ejecutar +PROGRAM=`ogRestoreImageSyntax $IMGFILE $PART` +echo $PROGRAM +eval $PROGRAM + +ERRCODE=$? +if [ $ERRCODE != 0 ]; then + ogRaiseError $OG_ERR_IMAGE "$IMGFILE, $3, $4" +fi +ogUnlock $3 $4 +return $ERRCODE +} + + +#/** +# ogGetImageInfo filename +#@brief muestra información sobre la imagen monolitica. +#@param 1 filename path absoluto del fichero imagen +#@return cadena compuesta por clonacion:compresor:sistemaarchivos:tamañoKB +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero no encontrado. +#@exception OG_ERR_IMAGE "Image format is not valid $IMGFILE" +#@warning En pruebas iniciales +#@TODO Definir sintaxis de salida (herramienta y compresor en minuscula) +#@TODO Arreglar loop para ntfsclone +#@TODO insertar parametros entrada tipo OG +#@version 1.0 - Primeras pruebas +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2010/02/08 +#*/ ## + +function ogGetImageInfo () { +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME filename " \ + "$FUNCNAME /opt/opengnsys/images/prueba.img " + return +fi + +# Error si no se reciben 1 parámetros. +[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +#comprobando que el parametro uno es un file. +[ -f $1 ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $? + +local TOOLS COMPRESSOR IMGFILE FILEHEAD FS SIZE PARTIMAGEINFO PARTCLONEINFO NTFSCLONEINFO IMGDETECT +IMGDETECT="FALSE" + +IMGFILE=$1 +FILEHEAD=/tmp/`basename $IMGFILE`.infohead +COMPRESSOR=`file $IMGFILE | awk '{print $2}'` +ogCheckStringInGroup "$COMPRESSOR" "gzip lzop" || ogRaiseError $OG_ERR_IMAGE "Image format is not valid $IMGFILE" || return $? +$($COMPRESSOR -dc $IMGFILE 2>/dev/null | head > $FILEHEAD) || ogRaiseError $OG_ERR_IMAGE "Image format is not valid $IMGFILE" || return $? + +## buscando Primera opción. +if [ "$IMGDETECT" == "FALSE" ] +then + PARTCLONEINFO=$(partclone.info $FILEHEAD 2>&1) + if `echo $PARTCLONEINFO | grep size > /dev/null` + then + TOOLS=PARTCLONE + FS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($8);}') + SIZE=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); printf "%d\n", $11*1024*1024;}') + IMGDETECT="TRUE" + fi +fi +#buscando segunda opcion. +if [ "$IMGDETECT" == "FALSE" -a ! -f /dev/loop2 ] +then + cat $FILEHEAD | grep -w ntfsclone-image > /dev/null && NTFSCLONEINFO=$(cat $FILEHEAD | ntfsclone --restore --overwrite /dev/loop2 - 2>&1) + if `echo $NTFSCLONEINFO | grep ntfsclone > /dev/null` + then + TOOLS=NTFSCLONE + SIZE=$(echo $NTFSCLONEINFO | awk '{gsub(/\(|\)|\./,""); printf "%d\n",$17/1000;}') + FS=NTFS + IMGDETECT="TRUE" + fi +fi +## buscando Tercer opción. +if [ "$IMGDETECT" == "FALSE" ] +then + PARTIMAGEINFO=$(partimage -B gui=no imginfo "$FILEHEAD" 2>&1) + if `echo $PARTIMAGEINFO | grep Partition > /dev/null` + then + TOOLS=PARTIMAGE + FS=$(echo $PARTIMAGEINFO | awk '{gsub(/ /,"\n"); print $17;}' | awk '{sub(/\.\.+/," "); print toupper($2)}') + SIZE=$( echo $PARTIMAGEINFO | awk '{gsub(/ /,"\n"); print $36;}' | awk '{sub(/\.\.+/," "); printf "%d\n",$2*1024*1024;}') + IMGDETECT="TRUE" + fi +fi +#comprobamos valores #Chequeamos los valores devueltos. +if [ -z "$TOOLS" -o -z "$COMPRESSOR" -o "$IMGDETECT" == "FALSE" ] +then + ogRaiseError $OG_ERR_IMAGE "Image format is not valid $IMGFILE" || return $? +else + COMPRESSOR=$(echo $COMPRESSOR | tr [a-z] [A-Z]) + echo $TOOLS:$COMPRESSOR:$FS:$SIZE +fi +} + +function ogGetImageProgram () +{ +local IMGFILE +IMGFILE=$(ogGetPath "$1" "$2.img") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? +ogGetImageInfo $IMGFILE | awk -F: '{print $1}' + +} + +function ogGetImageCompressor () +{ +local IMGFILE +IMGFILE=$(ogGetPath "$1" "$2.img") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? +ogGetImageInfo $IMGFILE | awk -F: '{print $2}' +} + +function ogGetImageType () +{ +local IMGFILE +IMGFILE=$(ogGetPath "$1" "$2.img") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? +#partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \ +# awk '/^Filesystem/ {sub(/\.\.+/," "); sub(/fs$/,""); print toupper($2);}' +ogGetImageInfo $IMGFILE | awk -F: '{print $3}' + +} + +function ogGetImageSize () +{ +# Variables locales +local IMGFILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME testing path_dir str_image int_ndisk int_npart" \ + "$FUNCNAME 1 1 REPO /aula1/winxp ==> 5642158" + return +fi +# Error si no se reciben menos de 2 parámetros. +[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? +# Error si el fichero de imagen no es accesible. +IMGFILE=$(ogGetPath "$1" "$2.img") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? + +# Devuelve el tamaño de la imagen en KB. +#partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \ +# awk '/Partition size/ {sub(/\.\.+/," "); printf "%d\n",$3*1024*1024;}' +ogGetImageInfo $IMGFILE | awk -F: '{print $4}' +} + + #/** # ogGetImageFs str_repo path_image #@brief Devuelve el tipo de sistema de archivos almacenado en un fichero de imagen. @@ -109,7 +594,7 @@ return $ERRCODE #@exception OG_ERR_NOTFOUND fichero de imagen no encontrado. #@todo Comprobar salidas para todos los tipos de sistemas de archivos. #/** -function ogGetImageFs () +function ogGetImageFsUS () { local IMGFILE IMGTYPE IMGTYPE=$(ogGetImageType "$1" "$2") @@ -146,7 +631,7 @@ esac #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/09/11 #*/ ## -function ogGetImageSize () +function ogGetImageSizeUS () { # Variables locales local IMGFILE IMGTYPE @@ -180,7 +665,7 @@ esac #### PRUEBAS # Obtener tipo de imagen -function ogGetImageType () +function ogGetImageTypeUS () { local IMGFILE IMGTYPE EXT for EXT in img pgz; do @@ -189,269 +674,3 @@ for EXT in img pgz; do done echo $IMGTYPE } - -# Comprobar si el fichero de bloqueo para una imagen. -function ogIsImageLocked () -{ -# Variables locales -local IMGDIR - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ - "if $FUNCNAME /opt/opengnsys/images/aula1/winxp.img; then ...; fi" \ - "if $FUNCNAME REPO /aula1/winxp.img; then ...; fi" - return -fi -# Comprobar si existe el fichero de bloqueo. -test -n "$(ogGetPath $@.lock)" -} - -# Bloquear imagen para creación. -function ogLockImage () -{ -# Variables locales -local IMGDIR - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ - "$FUNCNAME /opt/opengnsys/images/aula1/winxp.img" \ - "$FUNCNAME REPO /aula1/winxp.img" - return -fi -# Error si no se reciben 1 o 2 parámetros. -[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? -# Comprobar que existe directorio de imagen -IMGDIR=$(ogGetParentPath $@) || return $? -# Crear fichero de bloqueo. -touch $IMGDIR/$(basename "${!#}").lock -} - -# Desbloquear imagen (borrar fichero de bloqueo). -function ogUnlockImage () -{ -# Variables locales -local IMGDIR - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ - "$FUNCNAME /opt/opengnsys/images/aula1/winxp.img" \ - "$FUNCNAME REPO /aula1/winxp.img" - return -fi -# Error si no se reciben 1 o 2 parámetros. -[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? -# Borrar fichero de bloqueo para la imagen. -rm -f $(ogGetPath $@.lock) -} - -#/** -# ogRestoreImage str_repo path_image int_ndisk int_npartition -#@brief Restaura una imagen de sistema de archivos en una partición. -#@param str_repo repositorio de imágenes o caché local -#@param path_image camino de la imagen -#@param int_ndisk nº de orden del disco -#@param int_npartition nº de orden de la partición -#@return (por determinar) -#@exception OG_ERR_FORMAT formato incorrecto. -#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados. -#@exception OG_ERR_LOCKED partición bloqueada por otra operación. -#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema. -#@todo Comprobar incongruencias partición-imagen, control de errores, definir parámetros, caché/repositorio, etc. -#@version 0.1 - Integracion para Opengnsys - HIDRA:RestaurarImagen{EXT3, NTFS}.sh; EAC: RestorePartitionFromImage() en Deploy.lib -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@Date 2008/05/13 -#@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 2008/10/27 -#@version 0.9 - Primera version muy en pruebas para OpenGnSys -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/09/10 -#*/ ## -function ogRestoreImage () -{ -# Variables locales -local PART PARTSIZE IMGFILE IMGTYPE IMGSIZE FSTYPE - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk int_npart" \ - "$FUNCNAME REPO /aula1/winxp 1 1" - return -fi -# Error si no se reciben 4 parámetros. -[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? -# Procesar parámetros. -PART="$(ogDiskToDev "$3" "$4")" || return $? -IMGTYPE=$(ogGetImageType "$1" "$2") -IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") -[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? -# Error si la imagen no cabe en la particion. -IMGSIZE=$(ogGetImageSize "$1" "$2") -PARTSIZE=$(ogGetPartitionSize $3 $4) -if [ $IMGSIZE -gt $PARTSIZE ]; then - ogRaiseError $OG_ERR_PARTITION "$IMGSIZE > $PARTSIZE" - return $? -fi - -# Comprobar el bloqueo de la imagen y de la partición. -if ogIsImageLocked "$IMGFILE"; then - ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $1, $2.$IMGTYPE" - return $? -fi -if ogIsLocked $3 $4; then - ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $3, $4" - return $? -fi -# Desmontar y bloquear partición. -ogUnmount $3 $4 2>/dev/null || return $? -ogLock $3 $4 || return $? -trap "ogUnlock $3 $4" 1 2 3 6 9 - -# Restaurar según el tipo de imagen. -# Atención: no se comprueba el tipo de sistema de archivos. -# Atención: no se comprueba incongruencia entre partición e imagen. -#FSTYPE="$(ogGetFsType $3 $4)" -case "$IMGTYPE" in - img) # Partimage - partimage -M -f3 -o -d -V0 -B gui=no -c -z1 --volume=0 restore $PART "$IMGFILE" - ;; - pgz) # Partclone / GZip - gzip -dc "$IMGFILE" | mbuffer -q -m 70% | partclone.restore -C -F -o "$PART" - ;; - *) # Error si imagen no accesible o de tipo desconocido. - ogRaiseError $OG_ERR_FORMAT - return $? ;; -esac -ERRCODE=$? -if [ $ERRCODE != 0 ]; then - ogRaiseError $OG_ERR_IMAGE "$IMGFILE, $3, $4" -fi -ogUnlock $3 $4 -return $ERRCODE -} - - -function ogCreateImageFromPartition () { -#/** @function CreateImageFromPartition: @brief Crea una imagen de la particion indicada, utilizando el programa definido en las variable $CloneImageNTFS y $CloneImageEXT23 -#@param $1 int DiskEAC -#@param $2 int_PartitionEAC -#@param $3 str_Repositorio ......... parametro pasado a ConectToRepo, admite $REPO $CACHE str_IP_servidorAlterno -#@param $4 str_pathbase .............. Pathbase, directorio relativo, de la imagen, en EAC, se ha definido que todo repositorio comience por hdimages, pero puede variar, para adaparse a usb, o cualquier otro almacenamiento. -#@param $5 str_NameImage.str_compresion .......... (como compresion admite gzip y lzop) -#@param ejemplo: CreateImageFromPartition 1 1 $IP hdimages/pruebas/ base.gzip -#@return la propia de la herramienta de clonacion partimage o ntfsclone -#@return genera la imagen con el nombre (imagen.compresion), y se le a?ade un guion y el numero de particion(parametro $2). -#@return Tambien se solicita al servidor EAC, la creaci?n del fichero meta torrent, que tendra el nombre tal base.gzip-1.torrent, -#@return Tambien se crea el fichero base.gzip-1.mcast con informacion para su uso con multicast, tal base.gzip-1.mcast -#@warning Salidas de errores no determinada -#@attention -#@note Pendiente: que admita como segundo parametro el valor 0 (para que identifique el MBR del disco) -#@version 0.1 Date: 27/10/2008 Author Antonio J. Doblas Viso. Universidad de Malaga -#*/ -if [ $# != 5 ] -then - echo "sintaxis: CreateImageFromPartition " - echo "ejemplo: CreateImageFromPartition 1 1 \$IP images/pruebas/ base.gzip" - echo " en iprepositorio admite cualquier ip de un servdior EAC, se llama a la funcion MountRepo ip" -fi -if [ $# = 5 ] -then - CloneImageNTFS="${CLONETOOLSNTFS:-partimage}" - CloneImageEXT23="${CLONETOOLSEXT:-partimage}" - CompresionImage="${CLONETOOLSCOMPRESSOR:-gzip}" - - disco=`ogDiskToDev $1 $2` - ogUnmountPartition $1 $2 - fs=`ogGetFsType $1 $2` - - echo determinando tipo de Sistema Operativo y consulando la variable global CloneImageNTFS: $fs - case $fs in - "NTFS") - case $CloneImageNTFS in - "ntfsclone") - #imaged="ntfsclone --force --save-image -O - $disco | " - imaged="ntfsclone --force --save-image -O - $disco" - program=ntfsclone - ;; - "partimage") - #imaged="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $disco stdout |" - imaged="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $disco stdout" - program=partimage - ;; - "partimage-ng") - #echo "partimage-ng" - #imaged="partimage-ng save $disco stdout" - program=partimage-ng - ;; - "partclone") - #echo "partclone" - #imaged="partclone.ntfs -c -F -s $disco | " - imaged="partclone.ntfs -c -F -s $disco" - program=partclone.ntfs - #zcat ~/image_sda1.pcl.gz | partclone.ext4 -r -o /dev/sda1 - ;; - esac - ;; - EXT[234]|REISERFS) - case $CloneImageEXT23 in - "partimage") - imaged="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $disco stdout" - program=partimage - ;; - "partimage-ng") - #echo "partimage-ng" - imaged="partimage-ng save $disco stdout" - program=partimage-ng - ;; - "partclone") - echo "partclone" - imaged="partclone.ext3 -c -F -C -s $disco" - program=partclone.ext3 - #zcat ~/image_sda1.pcl.gz | partclone.ext4 -r -o /dev/sda1 - ;; - esac - ;; - esac - - # utilizando mbuffer para reducir posibles errores de acceso a discos - imaged="$imaged | mbuffer -m 70%" - #metodo de compresion. - case $CompresionImage in - "gzip") - comando="$imaged | gzip -c >" - ;; - "lzop") - comando="$imaged | lzop >" - ;; - esac - - #. determnamos el fichero donde se almacenar? la image - #camino=`ConnectToRepo $3 $4 $5` - #MkdirPath $camino - firstcamino=`ogNewPath $3 $4` - camino=$firstcamino$5 - echo $camino - sleep 1 - - #preparamos y ejecutamos el comanod a realizar - echo "Creando imagen particion $disco programa $program compresion $CompresionImage en el repositorio $3 como $4 $5 - $2" - comando="$comando ${camino}-$2" - echo "comando: $comando" - echo $comando > /tmp/run.sh - sh /tmp/run.sh - unset comando - - #iniciamos la creacion del torrent - echo "Iniciando la creacion del punto torrent con CreateTorrentFromImage ip=$3 path=$4 image=$5-$2" echo - #CreateTorrentFromImage $3 $4 $5-$2 - # iniciacmos el putno mcast - echo "creando un punto mcast ${camino}-$2.mcast" - echo "program;$program" > ${camino}.mcast - echo "compresion;$CompresionImage" >> ${camino}.mcast - echo "fsimage;$fs" >> ${camino}.mcast - - #UmountRepo $3 -fi -} diff --git a/client/engine/Image.lib.testing b/client/engine/Image.lib.testing deleted file mode 100644 index e46049f3..00000000 --- a/client/engine/Image.lib.testing +++ /dev/null @@ -1,566 +0,0 @@ -#!/bin/bash -#/** -#@file Image.lib -#@brief Librería o clase Image testing -#@class Image -#@brief Funciones para creación, restauración y clonación de imágenes de sistemas. -#@version 0.9 -#@warning License: GNU GPLv3+ -#*/ -#/** -# ogCheckProgram -#@brief Función para determinar si el programa/s están disponibles -#@param 1 programa o programas a comprobar -#@return 0 si está disponible. -#@return 7 si NO está disponible -#@exception OG_ERR_FORMAT formato incorrecto. -#@exception OG_ERR_NOTEXEC programas no disponibles. -#@note -#@TODO: en pruebas -#@version 0.91 - Definición de -#@author Antonio Doblas Viso, Universidad de Málaga -#@date 2010/05/09 -#*/ ## -#/** -ogCheckProgram () -{ -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME \"str_program1 program2 programN\" " \ - "$FUNCNAME \"partimage partclone mbuffer\" " - return -fi - -# Error si no se recibe 1 parámetro. -[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? - -local PERROR PLOG -PERROR=0 -PLOG=" " -for i in `echo $1` -do - if [ ! `which $i` ] - then - PERROR=1 - PLOG="$PLOG $i" - fi -done -if [ "$PERROR" == "1" ] -then - ogRaiseError $OG_ERR_NOTEXEC "$PLOG" || return $? -else - return 0 -fi -} - - -function ogPartcloneSyntax () -{ -#TODO: comprobar como unico parametro particion /dev/sda1 -#COMPAR="partclone.$FS --clone --force --source $PART" -COMPAR="-F -c -s " -TYPE="$(ogGetFsType `ogDevToDisk $1`)" -case "$TYPE" in - EXT[234]) - echo "partclone.extfs $COMPAR $1" - ;; - REISERFS|XFS|JFS) - echo "partclone.dd $COMPAR $1" - ;; - NTFS|HNTFS) - echo "partclone.ntfs $COMPAR $1" - ;; - FAT16|FAT32|HFAT16|HFAT32) - echo "partclone.fat $COMPAR $1" - ;; - HFS|HFS+) - echo "partclone.hfsp $COMPAR $1" - ;; - *) ogRaiseError $OG_ERR_PARTITION "$1 $TYPE" - return $? ;; -esac -} - - -#/** -# ogGetImageInfo filename -#@brief muestra información sobre la imagen monolitica. -#@param 1 filename path absoluto del fichero imagen -#@return cadena compuesta por clonacion:compresor:sistemaarchivos:tamañoKB -#@exception OG_ERR_FORMAT formato incorrecto. -#@exception OG_ERR_NOTFOUND fichero no encontrado. -#@exception OG_ERR_IMAGE "Image format is not valid $IMGFILE" - -#@warning En pruebas iniciales -#@TODO Definir sintaxis de salida (herramienta y compresor en minuscula) -#@TODO Arreglar loop para ntfsclone -#@TODO insertar parametros entrada tipo OG -#@version 1.0 - Primeras pruebas -#@author Antonio J. Doblas Viso. Universidad de Málaga -#@date 2010/02/08 -#*/ ## - -function ogGetImageInfo () { -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME filename " \ - "$FUNCNAME /opt/opengnsys/images/prueba.img " - return -fi - -# Error si no se reciben 1 parámetros. -[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? - -#comprobando que el parametro uno es un file. -[ -f $1 ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $? - -local TOOLS COMPRESSOR IMGFILE FILEHEAD FS SIZE PARTIMAGEINFO PARTCLONEINFO NTFSCLONEINFO IMGDETECT -IMGDETECT="FALSE" - -IMGFILE=$1 -FILEHEAD=/tmp/`basename $IMGFILE`.infohead -COMPRESSOR=`file $IMGFILE | awk '{print $2}'` -ogCheckStringInGroup "$COMPRESSOR" "gzip lzop" || ogRaiseError $OG_ERR_IMAGE "Image format is not valid $IMGFILE" || return $? -$($COMPRESSOR -dc $IMGFILE 2>/dev/null | head > $FILEHEAD) || ogRaiseError $OG_ERR_IMAGE "Image format is not valid $IMGFILE" || return $? - -## buscando Primera opción. -if [ "$IMGDETECT" == "FALSE" ] -then - PARTCLONEINFO=$(partclone.info $FILEHEAD 2>&1) - if `echo $PARTCLONEINFO | grep size > /dev/null` - then - TOOLS=PARTCLONE - FS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($8);}') - SIZE=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); printf "%d\n", $11*1024*1024;}') - IMGDETECT="TRUE" - fi -fi -#buscando segunda opcion. -if [ "$IMGDETECT" == "FALSE" -a ! -f /dev/loop2 ] -then - cat $FILEHEAD | grep -w ntfsclone-image > /dev/null && NTFSCLONEINFO=$(cat $FILEHEAD | ntfsclone --restore --overwrite /dev/loop2 - 2>&1) - if `echo $NTFSCLONEINFO | grep ntfsclone > /dev/null` - then - TOOLS=NTFSCLONE - SIZE=$(echo $NTFSCLONEINFO | awk '{gsub(/\(|\)|\./,""); printf "%d\n",$17/1000;}') - FS=NTFS - IMGDETECT="TRUE" - fi -fi -## buscando Tercer opción. -if [ "$IMGDETECT" == "FALSE" ] -then - PARTIMAGEINFO=$(partimage -B gui=no imginfo "$FILEHEAD" 2>&1) - if `echo $PARTIMAGEINFO | grep Partition > /dev/null` - then - TOOLS=PARTIMAGE - FS=$(echo $PARTIMAGEINFO | awk '{gsub(/ /,"\n"); print $17;}' | awk '{sub(/\.\.+/," "); print toupper($2)}') - SIZE=$( echo $PARTIMAGEINFO | awk '{gsub(/ /,"\n"); print $36;}' | awk '{sub(/\.\.+/," "); printf "%d\n",$2*1024*1024;}') - IMGDETECT="TRUE" - fi -fi -#comprobamos valores #Chequeamos los valores devueltos. -if [ -z "$TOOLS" -o -z "$COMPRESSOR" -o "$IMGDETECT" == "FALSE" ] -then - ogRaiseError $OG_ERR_IMAGE "Image format is not valid $IMGFILE" || return $? -else - COMPRESSOR=$(echo $COMPRESSOR | tr [a-z] [A-Z]) - echo $TOOLS:$COMPRESSOR:$FS:$SIZE -fi -} - - - - -#/** -# ogCreateImageSyntax partition filename [tools] [levelcompresor] -#@brief Genera una cadena de texto con la instrucción para crear un fichero imagen -#@param 1 partition identificador linux del dispositivo particion. -#@param 2 filename path absoluto del fichero imagen -#@param 3 [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone] -#@param 4 [opcional] str_levelcompresor nivel de compresion. [0 -none-, 1-lzop-, 2-gzip] -#@return cadena con el comando que se debe ejecutar. -#@exception OG_ERR_FORMAT formato incorrecto. -#@warning En pruebas iniciales -#@TODO introducir las herramientas fsarchiver, dd -#@TODO introducir el nivel de compresion gzip -#@version 1.0 - Primeras pruebas -#@author Antonio J. Doblas Viso. Universidad de Málaga -#@date 2010/02/08 -#*/ ## - -function ogCreateImageSyntax() -{ -local FS TOOL LEVEL PART IMGFILE BUFFER - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME partition filename [tool] [levelcompresor]" \ - "$FUNCNAME /dev/sda1 /opt/opengnsys/images/prueba.img partclone lzop" - return -fi -# Error si no se reciben al menos los 2 parámetros para obtener el valor default. -[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? - - -PART=`echo $1` -IMGFILE=`echo $2` - -case "$#" in - "2") - # Sintaxis por defecto OG PART IMGFILE - #echo "partimage -M -f3 -o -d -V0 -B gui=no -c -z1 save $PART $IMGFILE" - # Se comenta la instruccion que debería ir aqui - ogCreateImageSyntax $1 $2 partclone gzip - ;; - "4") - # Sintaxis condicionada. - # comprobamos parametro herramienta compresion. - TOOL=$(echo $3 | tr [A-Z] [a-z]) - #ogCheckProgram $TOOL - #comprobar parámetro compresor. - LEVEL=$(echo $4 | tr [A-Z] [a-z]) - #ogCheckProgram $LEVEL - - # herramienta - case "$TOOL" in - "ntfsclone") - PARAM1="ntfsclone --force --save-image -O - $PART" - ;; - "partimage"|DEFAULT) - PARAM1="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $PART stdout" - ;; - "partclone") - PARAM1=`ogPartcloneSyntax $PART` || ogRaiseError $OG_ERR_FORMAT || return $? - ;; - esac - # mbuffer - which mbuffer > /dev/null && PARAM2="| mbuffer -q -m 40M " || PARAM2=" " - - # nivel de compresion - case "$LEVEL" in - "0"|"none") - PARAM3=" > " - ;; - "1"|"lzop") - PARAM3=" | lzop > " - ;; - "2"|"gzip") - PARAM3=" | gzip -c > " - ;; - "3"|"bzip") - PARAM3=" | bzip -c > " - ;; - esac - #sintaxis final. - echo "$PARAM1 $PARAM2 $PARAM3 $IMGFILE" - ;; -esac -} - -#/** -# ogRestoreImageSyntax filename partition [tools] [levelcompresor] -#@brief Genera una cadena de texto con la instrucción para crear un fichero imagen -#@param 1 filename path absoluto del fichero imagen -#@param 2 partition identificador linux del dispositivo particion. -#@param 3 [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone] -#@param 4 [opcional] str_levelcompresor nivel de compresion. [0 -none-, 1-lzop-, 2-gzip] -#@return cadena con el comando que se debe ejecutar. -#@exception OG_ERR_FORMAT formato incorrecto. -#@warning En pruebas iniciales -#@TODO introducir las herramientas fsarchiver, dd -#@TODO introducir el nivel de compresion gzip -#@version 1.0 - Primeras pruebas -#@author Antonio J. Doblas Viso. Universidad de Málaga -#@date 2010/02/08 -#*/ ## - -ogRestoreImageSyntax () -{ -local TOOL COMPRESSOR LEVEL PART IMGFILE FILEHEAD INFOIMG - - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME filename partition [tool] [levelcompresor]" \ - "$FUNCNAME /opt/opengnsys/images/prueba.img /dev/sda1 [partclone] [lzop]" - return -fi - -# Error si no se reciben al menos 2 parámetros. -[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? - -# controlamos que el parametro 1 (imagen) es tipo file. -[ -f $1 ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $? - -# Si 2 parametros (file-origen-, device-destino-) = ogGetImageFull($1) -if [ "$#" -eq 2 ]; then - IMGFILE=$1 - PART=$2 - INFOIMG=$(ogGetImageInfo $IMGFILE) || ogRaiseError $OG_ERR_NOTFOUND "No Image $1" || return $? - TOOL=`echo $INFOIMG | cut -f1 -d:` - COMPRESSOR=`echo $INFOIMG | cut -f2 -d:` - ogRestoreImageSyntax $IMGFILE $PART $TOOL $COMPRESSOR -fi - - -# Si cuatro parametros genera sintaxis -if [ "$#" -eq 4 ]; then - IMGFILE=$1 - PART=$2 - # comprobamos parametro herramienta compresion. - TOOL=$(echo $3 | tr [A-Z] [a-z]) - #ogCheckProgram $TOOL - #comprobar parámetro compresor. - LEVEL=$(echo $4 | tr [A-Z] [a-z]) - #ogCheckProgram $LEVEL - - case "$LEVEL" in - "0"|"none") - COMPRESSOR=" " - ;; - "1"|"lzop" | "LZOP") - COMPRESSOR=" lzop -dc " - ;; - "2"|"gzip" | "GZIP") - COMPRESSOR=" gzip -dc " - ;; - "3"|"bzip" | "BZIP" ) - COMPRESSOR=" bzip -dc " - ;; - *) - ogRaiseError $OG_ERR_NOTFOUND "Compressor no valid $TOOL" || return $? - ;; - esac - #comprobar mbuffer - which mbuffer > /dev/null && MBUFFER="| mbuffer -q -m 40M " || MBUFFER=" " - - case "$TOOL" in - "ntfsclone" | "NTFSCLONE") - TOOL="| ntfsclone --restore-image --overwrite $PART -" - ;; - "partimage"| "PARTIMAGE") - TOOL="| partimage -f3 -B gui=no restore $PART stdin" - ;; - "partclone" | "PARTCLONE") - # -C para que no compruebe tamaños - TOOL="| partclone.restore -o $PART" - ;; - *) - ogRaiseError $OG_ERR_NOTFOUND "Tools imaging no valid $TOOL" || return $? - ;; - esac - - echo "$COMPRESSOR $IMGFILE $MBUFFER $TOOL" -fi - -} - - -function ogGetImageProgram () -{ -local IMGFILE -IMGFILE=$(ogGetPath "$1" "$2.img") || return $? -[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? -ogGetImageInfo $IMGFILE | awk -F: '{print $1}' - -} - -function ogGetImageCompressor () -{ -local IMGFILE -IMGFILE=$(ogGetPath "$1" "$2.img") || return $? -[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? -ogGetImageInfo $IMGFILE | awk -F: '{print $2}' -} - -####################### -########################### -########################### - - - -function ogGetImageType () -{ -local IMGFILE -IMGFILE=$(ogGetPath "$1" "$2.img") || return $? -[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? -#partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \ -# awk '/^Filesystem/ {sub(/\.\.+/," "); sub(/fs$/,""); print toupper($2);}' -ogGetImageInfo $IMGFILE | awk -F: '{print $3}' - -} - - - - - -function ogGetImageSize () -{ -# Variables locales -local IMGFILE - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME testing path_dir str_image int_ndisk int_npart" \ - "$FUNCNAME 1 1 REPO /aula1/winxp ==> 5642158" - return -fi -# Error si no se reciben menos de 2 parámetros. -[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? -# Error si el fichero de imagen no es accesible. -IMGFILE=$(ogGetPath "$1" "$2.img") || return $? -[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? - -# Devuelve el tamaño de la imagen en KB. -#partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \ -# awk '/Partition size/ {sub(/\.\.+/," "); printf "%d\n",$3*1024*1024;}' -ogGetImageInfo $IMGFILE | awk -F: '{print $4}' -} - - -#/** -# ogCreateImage int_ndisk int_npartition str_repo path_image -#@brief Crea una imagen a partir de una partición. -#@param int_ndisk nº de orden del disco -#@param int_npartition nº de orden de la partición -#@param str_repo repositorio de imágenes (remoto o caché local) -#@param path_image camino de la imagen (sin extensión) -#@return (nada, por determinar) -#@note repo = { REPO, CACHE } -#@exception OG_ERR_FORMAT formato incorrecto. -#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. -#@exception OG_ERR_PARTITION partición no accesible o no soportada. -#@exception OG_ERR_LOCKED particion bloqueada por otra operación. -#@exception OG_ERR_IMAGE error al crear la imagen del sistema. -#@warning En pruebas iniciales -#@todo Comprobaciones, control de errores, definir parámetros, etc. -#@version 0.1 - Integracion para Opengnsys - HIDRA:CrearImagen{EXT3, NTFS}.sh; EAC: CreateImageFromPartition () en Deploy.lib -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@Date 2008/05/13 -#@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 2008/10/27 -#@version 0.9 - Versión en pruebas para OpenGnSys -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009/10/07 -#*/ ## -function ogCreateImage () -{ -# Variables locales -local PART PROGRAM IMGDIR IMGFILE IMGTYPE ERRCODE - -# TESTING mensajes -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart str_repo path_image [str_tools] [str_levelcompresor]" \ - "$FUNCNAME 1 1 REPO /aula1/winxp " \ - "$FUNCNAME 1 1 REPO /aula1/winxp partclone lzop" \ - "$FUNCNAME 1 1 REPO /aula1/winxp partimage gzip" \ - "$FUNCNAME 1 1 REPO /aula1/winxp ntfsclone lzop" - return -fi -# TESTING de -n a -lt -# Error si no se reciben 4 parámetros. -[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? - -# Comprobar que no está bloqueada ni la partición, ni la imagen. -PART="$(ogDiskToDev $1 $2)" || return $? -if ogIsLocked $1 $2; then - ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $1, $2" - return $? -fi -IMGTYPE="img" # Extensión genérica de imágenes. -IMGDIR=$(ogGetParentPath "$3" "$4") -[ -n "$IMGDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$3 $(dirname $4)" || return $? -IMGFILE="$IMGDIR/$(basename "$4").$IMGTYPE" -if ogIsImageLocked "$IMGFILE"; then - ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $3, $4" - return $? -fi -# Desmontar partición, bloquear partición e imagen. -ogUnmount $1 $2 2>/dev/null -ogLock $1 $2 || return $? -ogLockImage "$3" "$4.$IMGTYPE" || return $? - -# Crear Imagen. -trap "ogUnlock $1 $2; ogUnlockImage "$3" "$4.$IMGTYPE"; rm -f $IMGFILE" 1 2 3 6 9 - -################## TESTING ######################################### -#Solicitamos la generación de la instruccion a ejecutar -PROGRAM=`ogCreateImageSyntax $PART $IMGFILE $5 $6` -echo $PROGRAM -eval $PROGRAM - -# Controlar salida de error y desbloquear partición. -ERRCODE=$? -if [ $ERRCODE != 0 ]; then - ogRaiseError $OG_ERR_IMAGE "$1 $2 $IMGFILE" - rm -f "$IMGFILE" -fi -ogUnlock $1 $2 -ogUnlockImage "$3" "$4.$IMGTYPE" -return $ERRCODE -} - - - - -function ogRestoreImage () -{ -# Variables locales -local PART PROGRAM PARTSIZE IMGFILE IMGSIZE FSTYPE - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk int_npart" \ - "$FUNCNAME REPO /aula1/winxp 1 1" - return -fi -# Error si no se reciben 4 parámetros. -[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? - -# Procesar parámetros. -PART="$(ogDiskToDev "$3" "$4")" || return $? -IMGFILE=$(ogGetPath "$1" "$2.img") || return $? -[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? - - -# Error si la imagen no cabe en la particion. -IMGSIZE=$(ogGetImageSize "$1" "$2") -PARTSIZE=$(ogGetPartitionSize $3 $4) -if [ $IMGSIZE -gt $PARTSIZE ]; then - ogRaiseError $OG_ERR_PARTITION "$IMGSIZE > $PARTSIZE" - return $? - else - echo "Tamanio de la imagen $IMGSIZE < al tamanio particion $PARTSIZE" -fi - -# Comprobar el bloqueo de la imagen y de la partición. -if ogIsImageLocked "$IMGFILE"; then - ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $1, $2" - return $? -fi -if ogIsLocked $3 $4; then - ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $3, $4" - return $? -fi -# Desmontar y bloquear partición. -ogUnmount $3 $4 2>/dev/null || return $? -ogLock $3 $4 || return $? -trap "ogUnlock $3 $4" 1 2 3 6 9 - - -#Solicitamos la generación de la instruccion a ejecutar -PROGRAM=`ogRestoreImageSyntax $IMGFILE $PART` -echo $PROGRAM -eval $PROGRAM - - -ERRCODE=$? -if [ $ERRCODE != 0 ]; then - ogRaiseError $OG_ERR_IMAGE "$IMGFILE, $3, $4" -fi -ogUnlock $3 $4 -return $ERRCODE - -} diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib index e1335bc1..149353e1 100755 --- a/client/engine/Protocol.lib +++ b/client/engine/Protocol.lib @@ -9,129 +9,6 @@ #*/ -#/** -# ogCheckStringInGroup -#@brief Función para determinar si el elemento pertenece a un conjunto -#@param 1 elemento a comprobar -#@param 2 grupo de elementos para comprobar tipo "valor1 valor2 valor3" -#@return 0 si pertenece al grupo -#@return 1 si NO pertenece al grupo -#@exception OG_ERR_FORMAT formato incorrecto. -#@note -#@todo -#@version 0.91 - Definición de -#@author Antonio Doblas Viso, Universidad de Málaga -#@date 2010/05/09 -#*/ ## -#/** -ogCheckStringInGroup () -{ -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME str_elemento str_grupo" \ - "$FUNCNAME full-duplex \"full-duplex half-duplex broadcast\" " - return -fi - -# Error si no se recibe 2 parámetro. -[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? - - -for i in `echo $2` -do - if [ "$1" == "$i" ] - then - return 0 - fi -done - -return 1 -} - -#/** -# ogCheckStringInReg -#@brief Función para determinar si el elemento contiene una "expresión regular" -#@param 1 elemento a comprobar -#@param 2 expresión regular" -#@return 0 si coincide con la expresión -#@return 1 si NO coincide con la expresión -#@exception OG_ERR_FORMAT formato incorrecto. -#@note -#@todo -#@version 0.91 - Definición de -#@author Antonio Doblas Viso, Universidad de Málaga -#@date 2010/05/09 -#*/ ## -#/** - - -ogCheckStringInReg() -{ - -local REG - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME str_elemento str_expresión_regular" \ - "$FUNCNAME 50M \"^[0-9]{1,2}\M$\" " - return -fi - -# Error si no se recibe 2 parámetro. -[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? - -REG=$2 -[[ $1 =~ $REG ]] && return 0 || return 1 -} - - - -#/** -# ogCheckIpAddress -#@brief Función para determinar si una cadena es una dirección ipv4 válida -#@param 1 string de la ip a comprobar -#@return 0 si es una dirección válida -#@return 1 si NO es una dirección válida -#@exception OG_ERR_FORMAT formato incorrecto. -#@note -#@todo -#@version 0.91 - Definición de -#@author Antonio Doblas Viso, Universidad de Málaga -#@date 2010/05/09 -#*/ ## -#/** -ogCheckIpAddress() -{ -local REG IP arrIP - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME str_IpAddressToCheck" \ - "$FUNCNAME 192.18.35.3" - return -fi - -# Error si no se recibe 1 parámetro. -[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? - - -IP=$1 -REG="^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" -if [[ "$IP" =~ $REG ]] -then - OIFS=$IFS; - IFS='.' ; - arrIP=($IP) - IFS=$OIFS - if [[ ${arrIP[0]} -le 255 && ${arrIP[1]} -le 255 && ${arrIP[2]} -le 255 && ${arrIP[3]} -le 255 ]] - then - return 0 - fi -fi -return 1 -} - - #/** # ogMcastSyntax @@ -615,7 +492,7 @@ then case "$MODE" in peer|PEER) echo "Donwloading Torrent as peer" ### echo "ctorrent -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 $SOURCE -s $TARGET -b ${SOURCE}.bf" - ctorrent -v -f -X "sleep 15; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf >> $OGLOGFILE + ctorrent -f -X "sleep 15; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf >> $OGLOGFILE ;; leecher|LEECHER) echo "Donwloading Torrent as leecher" # echo "ctorrent ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 -U 0" @@ -627,20 +504,6 @@ then ;; esac fi -if [ "$OPTION" == "DOWNLOAD" ] -then - echo "comprobando el fichero descargado. Espere: " - #echo " ctorrent -s $TARGET -c $SOURCE | tail -n1 | cut -f2 -d\( " - TOTAL=`ctorrent -s $TARGET -c $SOURCE | tail -n1 | cut -f2 -d\(` - if [ "$TOTAL" == "100%)" ] - then - return 0 - else - return 1 - fi - - fi - cd /tmp } @@ -715,296 +578,99 @@ ctorrent -t `basename $SOURCE` -u http://$IPTORRENT:6969/announce -s $SOURCE.tor } - - - - -############################################################ -### FUNCIONES MULTICAST EN DESARROLLO ########## - - -#/** -# ogMcastSessionCheck [session] -#@brief Controla los parámetros de una sessión multicast -#@param str_session -#@return (nada, por determinar) -#@exception OG_ERR_FORMAT formato incorrecto. -#@note Requisitos: -#@version 0.91 - Definición de FileTransfer -#@author Antonio Doblas Viso, Universidad de Málaga -#@date 2010/05/09 -#*/ ## -ogMcastSessionCheck () -{ -echo "en pruebas" -#sessionSERVER PORTBASE:METHOD:ADDRESS:BITRATE:NCLINTS:MAXTIME:TOOLCLONE:COMPRESSOR -#sessionCLIENT PORTBASE:TOOLCLONE:COMPRESSOR -#PORTBASE: 9000 (incluye el 9001), 9002 (incluye el 9003), 9004 -#METHOD: full-duplex half-duplex brodcast -#ADDRESS: Dirección habilitada para la transferencia. 339.194.ip2.ip3 -#BITRATE: 90M 80M 70M -#NCLIENTS: -#MAXTIME: -#TOOLCLONE: -#COMPRESSOR: -} - - #/** -# ogMcastSessionList -#@brief Lista las sessiones abiertas multicast. -#@param (en pruebas) -#@return (nada, por determinar) -#@exception OG_ERR_FORMAT formato incorrecto. -#@note Requisitos: -#@version 0.91 - Definición de FileTransfer -#@author Antonio Doblas Viso, Universidad de Málaga -#@date 2010/05/09 -#*/ ## -ogMcastSessionList() -{ -echo "en preubas" -#puertos a utilizar 9000 - 9008 => se definen 10 sesiones -#lsof -i -nP | grep 900 | awk '{print $9}' | awk -F: '{print $2}' | uniq -} - -#/** -# ogMcastSessionDelete -#@brief Libera una session Mulitcast. -#@param (en pruebas) -#@return (nada, por determinar) -#@exception OG_ERR_FORMAT formato incorrecto. -#@note Requisitos: -#@version 0.91 - Definición de FileTransfer -#@author Antonio Doblas Viso, Universidad de Málaga -#@date 2010/05/09 -#*/ ## -ogMcastSessionDelete() -{ -echo "en pruebas" -} - - - - - -########################## FUNCIONES TORRENT EN DESARROLLO -################################################## -#/** -# ogStartTracker -#@brief Inicia el tracker -#@param str_pathDirectory str_Relative_path_file -#@param int_disk int_partition str_Relative_path_file -#@param str_REPOSITORY(CACHE - LOCAL) str_Relative_path_file -#@return -#@exception OG_ERR_FORMAT Formato incorrecto. -#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. -#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@exception OG_ERR_NOTOS La partición no tiene instalado un sistema operativo. +# ogUpdateCacheIsNecesary [ str_repo ] Relative_path_file_OGIMG_with_/ +#@brief Comprueba que el fichero que se desea almacenar en la cache del cliente, no esta. +#@param 1 str_REPO +#@param 2 str_Relative_path_file_OGIMG_with_/ +#@return 0 si es necesario actualizar el fichero. +#@return 1 si la imagen ya esta en la cache, por lo tanto no es necesario actualizar el fichero #@note -#@version 0.1 - Integración para OpenGNSys. -#@author +#@todo: Proceso en el caso de que el fichero tenga el mismo nombre, pero su contenido sea distinto. +#@todo: Se dejan mensajes mientras se confirma su funcionamiento. +#@version 0.1 - Integracion para OpenGNSys. +#@author Antonio J. Doblas Viso. Universidad de Malaga #@date #*/ ## -ogStartTracker () +function ogUpdateCacheIsNecesary () { - echo " bug2: usar el tracker del bittornado. " - echo " solucion bug2: apt-get autoremove bittorrent python-bittorrent " - echo "soulución bug2: apt-get install bittornado. " - echo "#Paso 2: iniciar track " -local TESTBTT -TESTBTT=`ps aux | grep bttrack | egrep -v grep | wc -l` -if [ "$TESTBTT" == "0" ]; then - bttrack --reannounce_interval 10 --port 6969 --dfile /root/dstate --logfile /root/bttracker.log --save_dfile_interval 10 --timeout_downloaders_interval 10 2>/dev/null & -else - echo "bttrack iniciado" -fi - -} -ogShareTorrent () -{ # Variables locales. -local ARGS SOURCE EXT TARGET - +local ERROR SOURCE CACHE FILESOURCE MD5SOURCE FILETARGET MD5TARGET +ERROR=0 # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME [str_REPOSITORY] [int_ndisk int_npart] Relative_path_file" \ - "$FUNCNAME 1 1 /aula1/winxp" \ - "$FUNCNAME REPO /aula1/winxp" - + ogHelp "$FUNCNAME $FUNCNAME [ str_repo] [ [Relative_path_image] " \ + "$FUNCNAME REPO /PS1_PH1.img" \ + "$FUNCNAME REPO /ogclient.sqfs" + return fi -# Error si se quiere compartir un fichero en cache y no existe la cache -[ "$1" != "CACHE" ] || `ogFindCache >/dev/null` || ogRaiseError $OG_ERR_NOTFOUND "CACHE"|| return $? +# Error si no se reciben los argumentos ARG necesarios según la opcion. +[ $# == "2" ] || ogRaiseError $OG_ERR_FORMAT "Parametros no admitidos"|| return $? -case "$1" in - /*) # Camino completo. */ (Comentrio Doxygen) - SOURCE=$(ogGetPath "$1.img") - ARG=1 - ;; - [1-9]*) # ndisco npartición. - SOURCE=$(ogGetPath "$1" "$2" "$3.img") - ARG=3 - ;; - *) # Otros: repo, cache, cdrom (no se permiten caminos relativos). - EXT=$(ogGetImageType "$1" "$2") - SOURCE=$(ogGetPath "$1" "$2.$EXT" 2>/dev/null) - ARG=2 - ;; -esac +ogCheckStringInGroup "$1" "REPO repo" || ogRaiseError $OG_ERR_FORMAT "El contendor $1 no es valido, solo se admite REPO" || return $? -# Error si no se reciben los argumentos ARG necesarios según la opcion. -[ $# -ne "$ARG" ] && ogRaiseError $OG_ERR_FORMAT && return $? +FILESOURCE=`ogGetPath $1 $2` +FILETARGET=`ogGetPath CACHE $2` -# Comprobar fichero origen -[ -n "$SOURCE.torrent" ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return $? - -echo ctorrent $SOURCE.torrent -d -ctorrent $SOURCE.torrent -d - -} - - -ogTorrentReceiverFile () -{ -# obligatorio disponer de cache -# origen destino. -#origen es el .torrent -# origen: REPO /file.torrent -# Si REPO, (nfs, http) copiamos a CACHE. - -# destino es el fichero final. -# destino: CACHE /file -# destino: disk part /file - -# Variables locales. - local ARGS ARG SOURCEDIR SOURCEFILE TARGETDIR TARGETFILE - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME [str_REPOSITORY] [int_ndisk int_npart] Relative_path_file" \ - "$FUNCNAME REPO /aula1/winxp.torrent CACHE /aula1/winxp" \ - "$FUNCNAME REPO /aula1/winxp.torrent 1 1 /iso" +echo "paso 1. si no existe la imagen, confirmamos que es necesaria la actualizacion de la cache." +if [ -z $FILETARGET ] +then + # borramos el fichero bf del torrent, en el caso de que se hubiese quedado de algun proceso fallido + ogDeleteFile CACHE /$2.torrent.bf &> /dev/null + ogDeleteFile CACHE /$2.sum &> /dev/null + echo "Salida con valor 0, paso 1, la cache no contiene esa imagen " + return 0 fi -# Comprobamos que existe Cache -`ogFindCache > /dev/null` || ogRaiseError $OG_ERR_NOTFOUND "CACHE" || return $? - -# guardamos torrent. controlamos tamaño del fichero y comprobamos con cache. -ogCopyFile $1 $2 $3 $4 - - -} - -ogReceiveTorrent () -{ -# Variables locales. - local ARGS ARG TARGETDIR TARGETFILE - - - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME [str_REPOSITORY] [int_ndisk int_npart] Relative_path_file" \ - "$FUNCNAME 1 1 /aula1/winxp" \ - "$FUNCNAME REPO /aula1/winxp" \ - "$FUNCNAME /mnt/sda2/winxp" - - - return +echo "Paso 2. Comprobamos que la imagen no estuviese en un proceso previo torrent" +if ogGetPath $FILETARGET.torrent.bf > /dev/null +then + echo "Salida con valor 0, paso 2 la imagen esta en un estado de descarga torrent interrumpido." + #TODO: comprobar los md5 para asegurarnos que la imagen es la misma. + return 0 fi -# Comprobamos que existe Cache -`ogFindCache > /dev/null` || ogRaiseError $OG_ERR_NOTFOUND "CACHE" || return $? - -ARGS="$*" -case "$1" in - /*) # Camino completo. */ (Comentrio Doxygen) - TARGETDIR=$(ogGetParentPath "$1") - ARG=1 - ;; - [1-9]*) # ndisco npartición. - TARGETDIR=$(ogGetParentPath "$1" "$2" "$3") - ARG=3 - ;; - *) # Otros: repo, cache, cdrom (no se permiten caminos relativos). - EXT=$(ogGetImageType "$1" "$2") - TARGETDIR=$(ogGetParentPath "$1" "$2") - ARG=2 - ;; -esac -#echo $TARGETDIR -EXT=${EXT:-"img"} - -# Error si no se reciben los argumentos ARG necesarios según la opcion. -[ "$#" -ne "$ARG" ] && ogRaiseError $OG_ERR_FORMAT && return $? - -#obtenemos el nombre del fichero a descargar. -TARGETFILE=`basename ${!ARG}` -CACHE=`ogMountCache` - -# Error si no existe el fichero torrent -[ -r $TARGETDIR/$TARGETFILE.$EXT.torrent ] || ogRaiseError $OG_ERR_NOTFOUND || return $? -[ -d ${CACHE}/$OGIMG ] || ogRaiseError $OG_ERR_NOTFOUND || return $? - -TimeToWaitForCloseAfterDownload=20 # tiempo que deseamos que el cliente este como semilla, despues de la descarga. - -# Si el fichero ya se ha bajado antes de iniciar el ctorrent no se ejecuta el comando kill, siguen encendido siempre -# Comprobamos si se ha descargado antes, si es asi nos salimos -Total=`ctorrent -s ${CACHE}/$OGIMG/${TARGETFILE}.$EXT -c $TARGETDIR/$TARGETFILE.$EXT.torrent|tail -n1|cut -f2 -d\(` -[ $Total == "100%)" ] && return 0 - -#echo "ctorrent -X 'sleep $TimeToWaitForCloseAfterDownload; kill -9 \$(pidof ctorrent)' $TARGETDIR/$TARGETFILE.img.torrent -s ${CACHE}/$OGIMG/${TARGETFILE}.img -b ${CACHE}/$OGIMG/$TARGETFILE.bf -C 100" -ctorrent -X "sleep $TimeToWaitForCloseAfterDownload; kill -9 \$(pidof ctorrent)" $TARGETDIR/$TARGETFILE.$EXT.torrent -s ${CACHE}/$OGIMG/${TARGETFILE}.$EXT -b ${CACHE}/$OGIMG/$TARGETFILE.bf -C 100 - -[ -r ${CACHE}/$OGIMG/$TARGETFILE.bf ] && rm ${CACHE}/$OGIMG/$TARGETFILE.bf -} - -ogCheckSessionMulticast () -{ -# $1 tipo de sesion server client -# 2 la sesisón. -#variables locales -local NPARM MODE SESSION - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME str_mode array_session" \ - "$FUNCNAME client PORTBASE"\ - "$FUNCNAME server PORTBASE:METHOD:ADDRESS:BITRATE:NCLIENTS:MAXTIME" - return +## En este punto la imagen en el repo y en la cache se llaman igual, +echo "paso 4. recuperamos o calculamos los md5 de los ficheros" +if [ -f $FILESOURCE.sum ] +then + echo "leyendo el sum del fichero sum del repo" + MD5SOURCE=$(cat $FILESOURCE.sum) +#elif [ -f $FILETARGET.torrent ] +#then +# echo "leyendo el sum del fichero torrent de la cache" +# MD5SOURCE=$(ctorrent -x $FILETARGET.torrent | grep Comment | awk -F": " '{print $2}') +else + echo "calculando el sun del repo" + MD5SOURCE=$(md5sum $FILESOURCE | cut -f1 -d" ") +fi +if [ -f $FILETARGET.sum ] +then + echo "leyendo el sum de la cache" + MD5TARGET=$(cat $FILETARGET.sum) +else + echo "calculando el sum de la cache" + md5sum $FILETARGET | cut -f1 -d" " > $FILETARGET.sum + MD5TARGET=$(cat $FILETARGET.sum) fi +echo "Paso 5. comparamos los md5" +#TODO: que hacer cuando los md5 son distintos. Por defecto borrar. +if [ "$MD5SOURCE" == "$MD5TARGET" ] +then + echo "paso5.A la imagen esta en cache" + return 1 +else + echo "paso 5.b la imagen en cache es distinta, borramos la imagen anterior y devolvemos 0 para confirmar la actualizacion" + rm $FILETARGET + return 0 +fi -# Error si no se recibe 2 parámetro. -[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? - -# controlamos el primer parametro. -ogCheckStringInGroup "$1" "client server" || ogRaiseError $OG_ERR_OUTOFLIMIT || return $? +} -#controlamos el segundo parametro. La sessión multicast. -[ $1 == "client" ] && NPARM=1 || NPARM=6 -OIFS=$IFS; IFS=':' ; SESSION=($2); IFS=$OIFS -[[ ${#SESSION[*]} == $NPARM ]] || ogRaiseError $OG_ERR_OUTOFLIMIT || return $? -#controlamos el PORTBASE de la sesion. Comun.- -ogCheckStringInGroup ${SESSION[0]} "9000 9002 9004 9006 9008 9010" || ogRaiseError $OG_ERR_OUTOFLIMIT || return $? -if [ "$1" == "server" ] -then - # $METHOD - ogCheckStringInGroup ${SESSION[1]} "full-duplex half-duplex broadcast" || ogRaiseError $OG_ERR_OUTOFLIMIT || return $? - # $ADDRESS - ogCheckIpAddress ${SESSION[2]} || ogRaiseError $OG_ERR_OUTOFLIMIT || return $? - #BITRATE - ogCheckStringInReg ${SESSION[3]} "^[1-9]{1,2}M$" || ogRaiseError $OG_ERR_OUTOFLIMIT || return $? - #NCLIENTS - ogCheckStringInReg ${SESSION[4]} "^[0-9]{1,10}$" || ogRaiseError $OG_ERR_OUTOFLIMIT || return $? - #MAXTIME - ogCheckStringInReg ${SESSION[5]} "^[0-9]{1,10}$" || ogRaiseError $OG_ERR_OUTOFLIMIT " " || return $? -fi -return 0 -} diff --git a/client/engine/System.lib b/client/engine/System.lib index 6e41b634..1acb9364 100755 --- a/client/engine/System.lib +++ b/client/engine/System.lib @@ -158,3 +158,34 @@ while [ $# -gt 0 ]; do shift done } + +ogCheckProgram () +{ +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME \"str_program1 program2 programN\" " \ + "$FUNCNAME \"partimage partclone mbuffer\" " + return +fi + +# Error si no se recibe 1 parámetro. +[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +local PERROR PLOG +PERROR=0 +PLOG=" " +for i in `echo $1` +do + if [ ! `which $i` ] + then + PERROR=1 + PLOG="$PLOG $i" + fi +done +if [ "$PERROR" == "1" ] +then + ogRaiseError $OG_ERR_NOTEXEC "$PLOG" || return $? +else + return 0 +fi +} diff --git a/client/engine/XFileSystem.lib b/client/engine/XFileSystem.lib deleted file mode 100755 index 53d197fb..00000000 --- a/client/engine/XFileSystem.lib +++ /dev/null @@ -1,293 +0,0 @@ -#!/bin/bash -#/** -#@file FileSystem.lib -#@brief Librería o clase FileSystem -#@class FileSystem -#@brief Funciones para gestión de sistemas de archivos. -#@version 0.9 -#@warning License: GNU GPLv3+ -#*/ - - - - -#/** -# ogReduceFs int_ndisk int_npartition -#@brief Reduce el tamaño del sistema de archivos, sin tener en cuenta el espacio libre. -#@param int_ndisk nº de orden del disco -#@param int_npartition nº de orden de la partición -#@return tamañoKB -#@exception OG_ERR_FORMAT Formato incorrecto. -#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. -#@exception OG_ERR_PARTITION Partición desconocida o no accesible. -#@warning En Windows, se borran los ficheros pagefile.sys e hiberfile.sys -#@warning El sistema de archivos se amplía al mínimo + 1 KB. -#@note Requisitos: *resize* -#@version 0.9 - Primera versión para OpenGNSys. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-09-23 -#*/ ## -function ogReduceFs () -{ -# Variables locales -local PART BLKS SIZE -echo "xfile" -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \ - "$FUNCNAME 1 1" - return -fi -# Error si no se reciben 2 parámetros. -[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? - -# Obtener partición. -PART="$(ogDiskToDev $1 $2)" || return $? - -# Redimensionar según el tipo de particion. -case "$(ogGetFsType $1 $2)" in - EXT[234]) - ogUnmount $1 $2 2>/dev/null - # Ext2/3/4: Tamaño de los bloques del sistema de archivos - BLKS=$(tune2fs -l $PART | awk '/Block size/ {print int($3/512)}') - # Traduce el num. en sectores de 512B a tamano en MB. - SIZE=$(resize2fs -P $PART 2>/dev/null | \ - awk -v B=$BLKS '/minimum size/ {print int($7*B/2048+1000)}') - resize2fs -fp $PART "${SIZE}M" &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $? - ;; -# REISERFS) # Usar "resize_reiserfs" -# ;; - NTFS|HNTFS) - ogDeleteFile $1 $2 pagefile.sys &>/dev/null - ogDeleteFile $1 $2 hiberfile.sys &>/dev/null - ogUnmount $1 $2 2>/dev/null -### Modificaciones del trunk - # NTFS: Obtiene tamaño mínimo en MB. 1.16 - #SIZEDATA=$(ntfsresize -fi $PART | awk '/resize at/ {printf "%d", $8*1.16}') - #SIZEDATA=$(ntfsresize -fi $PART | awk '/resize at/ {print $8+500}') - echo "iniciando calculo reduccion FS" - SIZE=$(ReduceFsNT2 $1 $2) -### fin modificaciones - echo "iniciando proceso de reduccion con $SIZE" - [ "$SIZE" == 0 ] && return 1 - ntfsresize -fs "${SIZE}M" $PART <<<"y" || ogRaiseError $OG_ERR_PARTITION "error reduciendo $1,$2" || return $? - #ntfsresize -fs "${SIZE}M" $PART <<<"y" >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $? - ;; - *) - echo "sin tipo de sistema archivos" - ogRaiseError $OG_ERR_PARTITION "$1,$2" - return $? ;; -esac -#/// Mostrar nuevo tamaño en KB. -echo $[SIZE*1024] -#echo $SIZE -} - - - - -function ReduceFsNT2 () -{ -#IMPORTANTE: retorna el valor en MB que podrá reducir el FS de una particion ntfs -#valor devulto 0, y codigo error 1. No se puede reducir, probar a reiniciar windows. - - -local PART RC MODE SIZE SIZEDATA -[ $# == 2 ] && MODE=STAGE1 -[ $# == 3 ] && MODE=STAGE2 -[ -z $MODE ] && return - -PART="$(ogDiskToDev $1 $2)" || return $? -ogUnmount $1 $2 &>/dev/null - - -case $MODE in - STAGE1) - # echo "primera etapa $*" - ntfsresize -fi $PART &>/dev/null - RC=`echo $?` - # echo "RC es" $RC - if [ "$RC" -eq "1" ] - then - echo "0" - return 1 - fi - SIZEDATA=$(ntfsresize -fi $PART | awk '/resize at/ {print $8+1000}') - # echo "salida" $? - # echo $SIZEDATA - ReduceFsNT2 $1 $2 $SIZEDATA - return 0 - ;; - STAGE2) - # echo "segunda etapa $*" - SIZEDATA=$3 - ntfsresize -fns "${SIZEDATA}M" $PART &>/tmp/ntfsresize.txt - RC=$? - if [ "$RC" == "0" ] - then - SIZE=$SIZEDATA - echo $SIZE - else - SIZEEXTRA=$(cat /tmp/ntfsresize.txt | awk '/Needed relocations :/ {print $0}' | awk -F"(" '{print $2}' | awk '{print $1+500}') - SIZE=$(expr $SIZEDATA + $SIZEEXTRA) - ReduceFsNT2 $1 $2 $SIZE - return 0 - fi - ;; - *) - return - ;; -esac - -} - - -function ogGetFreeSize () { -if [ $# = 0 ] -then - echo "sintaxis: ogGetFreeSize int_disco int_partition str_SizeOutput [ kB MB GB -default GB]-]" red - echo "devuelve int_size : int_data : int_free" red -return -fi -if [ $# -ge 2 ] -then - particion=`ogMount $1 $2 ` #1>/dev/null 2>&1 - if [ -z $3 ] - then - unit=kB # s B kB MB GB TB % - else - unit=$3 - fi - case $unit in - kB) - factor="1.024"; - #valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d:%d:%d", size,used,free}'` - valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d", free}'` - ;; - MB) - factor="1.024/1000"; - valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000; used=$3*1.024/1000; free=$4*1.024/1000; printf "%d:%d:%d", size,used,free}'` - ;; - GB) - factor="1.024/1000000"; - valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000000; used=$3*1.024/1000000; free=$4*1.024/1000000; printf "%f:%f:%f", size,used,free}'` - ;; - esac - #echo $valor - #NumberRound $valor - #valor=`NumberRound $valor`; - ogUnmount $1 $2 1>/dev/null 2>&1 - echo $valor - -fi -} - - - - - - - - - - -#/** @function ogGetFsSize: @brief Muestra el tamanio del sistema de archivos indicado, permite definir la unidad de medida, por defecto GB -#@param $1 int_disk -#@param $2 int_Partition -#@param $3 str_UnidadMediada parametro opcional, admite [ kB MB GB -default kB] -#@return cadena con int_TotalSize no=>:int_DataSize:int_DataFree -#@warning Salidas de errores no determinada -#@warning -#@attention -#@version 0.1 - Integracion para Opengnsys - EAC: SizeFileSystem() en FileSystem.lib -#@author Antonio J. Doblas Viso. Universidad de Malaga -#@date 2008-10-27 -#*/ -function ogGetFsSize () { -if [ $# = 0 ] -then - echo "sintaxis: ogGetFsSize int_disco int_partition str_SizeOutput [ kB MB GB -default GB]-]" red - echo "devuelve int_size : int_data : int_free" red -return -fi -if [ $# -ge 2 ] -then - particion=`ogMount $1 $2 ` #1>/dev/null 2>&1 - if [ -z $3 ] - then - unit=kB # s B kB MB GB TB % - else - unit=$3 - fi - case $unit in - kB) - factor="1.024"; - #valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d:%d:%d", size,used,free}'` - valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d", size}'` - ;; - MB) - factor="1.024/1000"; - valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000; used=$3*1.024/1000; free=$4*1.024/1000; printf "%d:%d:%d", size,used,free}'` - ;; - GB) - factor="1.024/1000000"; - valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000000; used=$3*1.024/1000000; free=$4*1.024/1000000; printf "%f:%f:%f", size,used,free}'` - ;; - esac - #echo $valor - #NumberRound $valor - #valor=`NumberRound $valor`; - ogUnmount $1 $2 1>/dev/null 2>&1 - echo $valor - -fi -} - -#/** copia literal del engine 1.0 -function ogDeletePartitionsLabels () -{ -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME " \ - "$FUNCNAME " - return -fi -rm /dev/disk/by-label/* 2>/dev/null # */ COMENTARIO OBLIGATORIO PARA DOXYGEN -} - - - - - - - - - - - - - -#/** copia literal del engine 1.0 -function ogDeletePartitionTable () -{ - -# Variables locales. -local DISK - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME int_disk" \ - "$FUNCNAME 1" - return -fi -# Error si no se reciben 1 parámetros. -[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? - -# Obteniendo Identificador linux de la particion. -DISK=$(ogDiskToDev $1) || return $? - -# Elimando las particiones con fdisk -echo -ne "o\nw" | fdisk $DISK -} - - diff --git a/client/nfsexport/etc/init/default.sh b/client/nfsexport/etc/init/default.sh index b6752fad..c8285c28 100755 --- a/client/nfsexport/etc/init/default.sh +++ b/client/nfsexport/etc/init/default.sh @@ -1,4 +1,11 @@ -#!/opt/opengnsys/bin/bash +#!/bin/bash + +echo -ne "og\nog\n" | passwd root + +/etc/init.d/ssh restart +#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 + +ethtool -s $DEVICE wol g # Fichero de registro de incidencias (en el servidor; si no, en local). OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} @@ -7,10 +14,19 @@ if ! touch $OGLOGFILE 2>/dev/null; then OGLOGFILE=/var/log/opengnsys.log fi + + + +if [ $ogactiveadmin == "true" ] +then + export boot=admin +fi + + # Arranque de OpenGnSys Client. if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then echo "$MSG_LAUNCHCLIENT" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 fi # Si fallo en cliente y modo "admin", cargar shell; si no, salir. diff --git a/client/nfsexport/etc/preinit/defaultTESTING.sh b/client/nfsexport/etc/preinit/defaultTESTING.sh index 3d291cc5..73b75a0a 100755 --- a/client/nfsexport/etc/preinit/defaultTESTING.sh +++ b/client/nfsexport/etc/preinit/defaultTESTING.sh @@ -5,10 +5,9 @@ set -a -#source /opt/opengnsys/etc/preinit/loadenviron.sh -source /opt/opengnsys/etc/preinit/loadenvironTESTING.sh -#for f in fileslinks.sh loadudeb.sh loadmodules.sh metadevs.sh; do -for f in loadmodulesTESTING.sh; do +source /opt/opengnsys/etc/preinit/loadenviron.sh + +for f in loadmodules.sh; do $OGETC/preinit/$f done @@ -18,8 +17,8 @@ if [ -f $OGETC/init/$OG_IP.sh ]; then elif [ -f $OGETC/init/$OGGROUP.sh ]; then $OGETC/init/$OGGROUP.sh -elif [ -f $OGETC/init/defaultTESTING.sh ]; then - $OGETC/init/defaultTESTING.sh +elif [ -f $OGETC/init/default.sh ]; then + $OGETC/init/default.sh else echo "No se ha encontrado script de inicio" diff --git a/client/nfsexport/etc/preinit/fileslinks.sh b/client/nfsexport/etc/preinit/fileslinks.sh deleted file mode 100755 index 07b87399..00000000 --- a/client/nfsexport/etc/preinit/fileslinks.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -#/** -#@file fileslinks.sh -#@brief Script de inicio para copiar ficheros y deinir enlaces simbólicos. -#@note Desglose del script "loadenviron.sh". -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - - -# Si está configurado OpenGNSys ... -if [ -n "$OPENGNSYS" ]; then - echo "$MSG_MAKELINKS" - # Para tener /bin/bash y no haya problemas - ln -fs $OGBIN/bash /bin/bash - - # Crear directorio de bloqueos - mkdir -p /var/lock - - # Directorio de tipos de letras para el browser. - #QTLIBS=$(grep qt_libspath $OGBIN/browser 2>/dev/null | cut -f2 -d=) - QTVERS="/usr/local/QtEmbedded-4.6.3" - QTDIR="${QTVERS%-*}" - mkdir -p $QTDIR - ln -fs $QTDIR $QTVERS - mkdir -p $QTDIR/lib - ln -fs $OGLIB/fonts $QTDIR/lib - - # Datos de dispositivos PCI en /etc - ln -fs $OGLIB/pci.ids /etc -else - # FIXME Error: entorno de OpenGNSys no configurado. - echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje. - exit 1 -fi - diff --git a/client/nfsexport/etc/preinit/fileslinks.sh.NoUsed b/client/nfsexport/etc/preinit/fileslinks.sh.NoUsed new file mode 100755 index 00000000..07b87399 --- /dev/null +++ b/client/nfsexport/etc/preinit/fileslinks.sh.NoUsed @@ -0,0 +1,38 @@ +#!/bin/bash +#/** +#@file fileslinks.sh +#@brief Script de inicio para copiar ficheros y deinir enlaces simbólicos. +#@note Desglose del script "loadenviron.sh". +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + + +# Si está configurado OpenGNSys ... +if [ -n "$OPENGNSYS" ]; then + echo "$MSG_MAKELINKS" + # Para tener /bin/bash y no haya problemas + ln -fs $OGBIN/bash /bin/bash + + # Crear directorio de bloqueos + mkdir -p /var/lock + + # Directorio de tipos de letras para el browser. + #QTLIBS=$(grep qt_libspath $OGBIN/browser 2>/dev/null | cut -f2 -d=) + QTVERS="/usr/local/QtEmbedded-4.6.3" + QTDIR="${QTVERS%-*}" + mkdir -p $QTDIR + ln -fs $QTDIR $QTVERS + mkdir -p $QTDIR/lib + ln -fs $OGLIB/fonts $QTDIR/lib + + # Datos de dispositivos PCI en /etc + ln -fs $OGLIB/pci.ids /etc +else + # FIXME Error: entorno de OpenGNSys no configurado. + echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje. + exit 1 +fi + diff --git a/client/nfsexport/etc/preinit/loadenviron.sh b/client/nfsexport/etc/preinit/loadenviron.sh index e0a687c6..83b9b9a9 100755 --- a/client/nfsexport/etc/preinit/loadenviron.sh +++ b/client/nfsexport/etc/preinit/loadenviron.sh @@ -23,8 +23,15 @@ if [ -d $OPENGNSYS ]; then export OGCAC=$OPENGNSYS/cache export OGLOG=$OPENGNSYS/log - export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH - export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + # Cargar fichero de idioma. LANGFILE=$OGETC/lang.$LANG.conf @@ -35,30 +42,30 @@ if [ -d $OPENGNSYS ]; then done fi echo "$MSG_LOADAPI" + # Cargar mapa de teclado. loadkeys ${LANG%_*} >/dev/null + # Cargar API de funciones. for i in $OGAPI/*.lib; do source $i done + for i in $(typeset -F | cut -f3 -d" "); do export -f $i done - # Carga de las API testing - if [ "$engine" = "testing" ] + + # Carga de las API segun engine + if [ -n "$ogengine" ] then - for i in $OGAPI/*.testing; do - source $i + for i in $OGAPI/*.$ogengine; do + [ -f $i ] && source $i done fi - # Añadir dependencia de arquitectura - ARCH=$(ogGetArch) - if [ -n "$ARCH" ]; then - export PATH=$OGBIN/$ARCH:$PATH - export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH - fi + # Fichero de registros. export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + # FIXME Pruebas para grupos de ordenadores #export OGGROUP=$(ogGetGroup) export OGGROUP="$group" diff --git a/client/nfsexport/etc/preinit/loadmodules.sh b/client/nfsexport/etc/preinit/loadmodules.sh index 974ddded..d72cb6fb 100755 --- a/client/nfsexport/etc/preinit/loadmodules.sh +++ b/client/nfsexport/etc/preinit/loadmodules.sh @@ -16,12 +16,6 @@ MODULESDIR=/lib/modules/$(uname -r)/kernel # Módulo del ratón. insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null -# Módulos de discos. -for m in $MODULESDIR/drivers/ata/*.ko; do - insmod $m 2>/dev/null -done -# Módulos de sistemas de archivos. -for f in reiserfs jfs xfs hfs hfsplus; do - insmod $MODULESDIR/fs/$f/$f.ko 2>/dev/null -done + + diff --git a/client/nfsexport/etc/preinit/loadudeb.sh b/client/nfsexport/etc/preinit/loadudeb.sh deleted file mode 100755 index 662887c0..00000000 --- a/client/nfsexport/etc/preinit/loadudeb.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -#/** -#@file loadudeb.sh -#@brief Script de inicio para cargar paquetes udeb en el cliente. -#@note Desglose del script "loadenviron.sh". -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - - -# Si está configurado OpenGNSys ... -if [ -n "$OPENGNSYS" ]; then - # Cargar paquetes udeb. - echo "$MSG_LOADUDEBS" - for i in $OGLIB/udeb/*.udeb; do - udpkg -i "$i" >/dev/null || printf "$MSG_ERRLOADUDEB\n" $(basename $i) - done - # TEMPORAL: corregir biblioteca dinámica para "partprobe". - ln -s $(find /lib -type f -name "libparted*.so.*") /lib/$(grep libparted $OGBIN/$(ogGetArch)/partprobe) 2>/dev/null -else - # FIXME Error: entorno de OpenGnSys no configurado. - echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje. - exit 1 -fi - diff --git a/client/nfsexport/etc/preinit/loadudeb.sh.NoUsed b/client/nfsexport/etc/preinit/loadudeb.sh.NoUsed new file mode 100755 index 00000000..662887c0 --- /dev/null +++ b/client/nfsexport/etc/preinit/loadudeb.sh.NoUsed @@ -0,0 +1,27 @@ +#!/bin/bash +#/** +#@file loadudeb.sh +#@brief Script de inicio para cargar paquetes udeb en el cliente. +#@note Desglose del script "loadenviron.sh". +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + + +# Si está configurado OpenGNSys ... +if [ -n "$OPENGNSYS" ]; then + # Cargar paquetes udeb. + echo "$MSG_LOADUDEBS" + for i in $OGLIB/udeb/*.udeb; do + udpkg -i "$i" >/dev/null || printf "$MSG_ERRLOADUDEB\n" $(basename $i) + done + # TEMPORAL: corregir biblioteca dinámica para "partprobe". + ln -s $(find /lib -type f -name "libparted*.so.*") /lib/$(grep libparted $OGBIN/$(ogGetArch)/partprobe) 2>/dev/null +else + # FIXME Error: entorno de OpenGnSys no configurado. + echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje. + exit 1 +fi + diff --git a/client/nfsexport/etc/preinit/metadevs.sh b/client/nfsexport/etc/preinit/metadevs.sh deleted file mode 100755 index 0870e552..00000000 --- a/client/nfsexport/etc/preinit/metadevs.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -#/** -#@file metadevs.sh -#@brief Script de inicio para detectar metadispositivos LVM y RAID. -#@note Desglose del script "loadenviron.sh". -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#@version 0.9.4 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-04-19 -#*/ - - -# Si está configurado OpenGNSys ... -if [ -n "$OPENGNSYS" ]; then - echo "$MSG_DETECTLVMRAID" - # Detectar metadispositivos LVM. - vgchange -ay >/dev/null 2>&1 - # Detectar metadispositivos RAID. - dmraid -ay >/dev/null 2>&1 -else - # FIXME Error: entorno de OpenGNSys no configurado. - echo "Error: OpenGNSys environment is not configured." # FIXME: definir mensaje. - exit 1 -fi - diff --git a/client/nfsexport/etc/preinit/metadevs.sh.NoUsed b/client/nfsexport/etc/preinit/metadevs.sh.NoUsed new file mode 100755 index 00000000..0870e552 --- /dev/null +++ b/client/nfsexport/etc/preinit/metadevs.sh.NoUsed @@ -0,0 +1,28 @@ +#!/bin/bash +#/** +#@file metadevs.sh +#@brief Script de inicio para detectar metadispositivos LVM y RAID. +#@note Desglose del script "loadenviron.sh". +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#@version 0.9.4 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-04-19 +#*/ + + +# Si está configurado OpenGNSys ... +if [ -n "$OPENGNSYS" ]; then + echo "$MSG_DETECTLVMRAID" + # Detectar metadispositivos LVM. + vgchange -ay >/dev/null 2>&1 + # Detectar metadispositivos RAID. + dmraid -ay >/dev/null 2>&1 +else + # FIXME Error: entorno de OpenGNSys no configurado. + echo "Error: OpenGNSys environment is not configured." # FIXME: definir mensaje. + exit 1 +fi + diff --git a/client/nfsexport/scripts/cloneRemoteFromMaster b/client/nfsexport/scripts/cloneRemoteFromMaster new file mode 100755 index 00000000..a755871f --- /dev/null +++ b/client/nfsexport/scripts/cloneRemoteFromMaster @@ -0,0 +1,215 @@ +#!/bin/bash +# Script para la clonacion de particiones remotas. +# (puede usarse como base para el programa de restauración de imágenes usado por OpenGnSys Admin). +# Versión: 0.9.1, 2009/03/17, - Antonio J. Doblas Viso. Universidad de Malaga. +# Versión: 0.9.2, 2010/07/27, - Antonio J. Doblas Viso. Universidad de Malaga. +# Version: 0.1.0 2011/01/26, - Antonio J. Doblas Viso. Universidad de Malaga. + +TIME1=$SECONDS +PROG="$(basename $0)" +#if [ $# -ne 5 ]; then + # ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG tamaño" +# exit $? +#fi + + +#/** @function cloneremoteFromMaster: @brief Restaura una particion o imagen sobre las particiones de equipos cliente remotos +#@param $1 str_origen admite dirección IP del equipo Master. +#@param $2 str_origen admite int_disk str_REPO|str_CACHE +#@param $3 str_origen admite int partorigen stre_imagen +#@param $4 str_sesion multicast +#@param $5 int_disco_destino +#@param $6 init_particion_destino +#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 1 1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop +#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 REPO /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop +#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 CACHE /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop +#@return la propia de la herramienta de clonacion partimage o ntfsclone +# + + + +FOUNDSOURCE=false +HOSTIP=`ogGetIpAddress` + +SESSIONMCASTSERVER=$4 +SESSIONMCASTCLIENT=`echo $4 | awk -F: '{print $1}'` +DISKTARGET=$5 +PARTTARGET=$6 +TOOLCLONE=$7 +COMPRESOR=$8 + +TIME1=$SECONDS +PROG="$(basename $0)" +if [ $# -lt 1 ]; then + echo "cloneRemoteFromMaster ipmaster disk init session disk part tool comp" + exit 1 +fi + +if [ $# -lt 5 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ TORRENT|UNICAST | MULTICAST:npuerto ]" + exit $? +fi + +#Chequeamos variables-constantes + +# check HOSTIP +if [ -z "$HOSTIP" ] +then + source /tmp/net-eth0.conf + HOSTIP=`ogGetIpAddress` +fi +MODEMASTER=false + + +#Chequeamos parametros. + +# is $1 a valid IP +MASTERIP=$1 + +# contendor origen (disco particion o file) + + +# IP destino: session multicast. +SESSIONMCASTSERVER=$4 +SESSIONMCASTCLIENT=`echo $4 | awk -F: '{print $1}'` + +# contenedor destino (disco particion) +DISKTARGET=$5 +PARTTARGET=$6 + +#herramienta de compresión. +TOOLCLONE=$7 +COMPRESOR=$8 + + +###IMG=$(ogGetPath $2 $3.img) +###echo $IMG + +# Check command in Master (sendFile or sendPartition) +####if [ -n $IMG ] + + +case $MASTERIP in + $HOSTIP) + ogGetPath $2 $3.img + RC=`echo $?` + echo "$RC comenzando control del valor del origen $2 $3" + if [ $RC == "0" ] + then + echo "mode senfile" + IMG=$(ogGetPath $2 $3.img) + MODEMASTER=SENDFILE + else + if [ $(ogDiskToDev $2 $3) ] + then + echo "mode sendpartitons" + DISKSOURCE=$2 + PARTSOURCE=$3 + MODEMASTER=SENDPARTITION + fi + fi + + echo "modo " $MODEMASTER + + if [ "$MODEMASTER" == "false" ] + then + echo "cloneRemote: origen no encontrado" + exit 1 + else + echo "cloneRemote: sistema preparando para un $MODEMASTER" + fi + + case "$MODEMASTER" in + SENDPARTITION) + echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER" + echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE" + ogUnmount $2 $3 || exit + #Obtener tamaño de la partición. + SIZE=$(ogGetPartitionSize $2 $3) + # Reducir el sistema de archvios. + echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" + ogReduceFs $2 $3 || exit 1 + + #echo "salida de ogReduceFS" $? + #if [ $? == 1 ] + #then + # echo "no se ha podido reducir FS" +# exit 1 +# + REDSIZE=$(ogGetFsSize $2 $3) + echo "[20]: Reducido el sistema de archivos a $REDSIZE $DISKSOURCE $PARTSOURCE" + if [ $REDSIZE -lt $SIZE ]; then + echo "[24] Redimensionar partición a $REDSIZE KB." + ogSetPartitionSize $2 $3 $REDSIZE + fi + echo "[25] ofreciendo informacion a los clientes-slaves" + faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & + echo "[30] Enviando multicast " + echo ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR + ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR + if [ $REDSIZE -lt $SIZE ]; then + echo "[85] Redimensionar partición a $SIZE KB." + ogSetPartitionSize $2 $3 $SIZE + echo "[90] Extender sistema de archivos." + ogExtendFs $2 $3 + fi + pkill faucet + ;; + SENDFILE) + echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER" + echo "[10]: Preparando Imagen: $IMG" + TOOLCLONE=$(ogGetImageProgram $2 $3) + COMPRESOR=$(ogGetImageCompressor $2 $3) + REDSIZE=$(ogGetImageSize $2 $3) + echo "[25] ofreciendo informacion a los clientes-slaves: $TOOLCLONE $COMPRESOR $REDSIZE" + faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & + echo "[30] Enviando multicast: ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " + ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER + pkill faucet + ;; + esac + pkill faucet + ;; + *) + echo "[5]: cloneRemoteFromMaster: sistema preparando como CLIENTE modo $MODEMASTER" + ogUnmount $DISKTARGET $PARTTARGET + echo "[24] Cliente intentando conectar con el master $MASTERIP" + echo -n "[25] Buscando informacion extra sobre la clonacion: " + # While para esperar al servidor + while [ -z "$INFOEXTRA" ] + do + INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null` + sleep 10 + echo -n "." + done + TOOLCLONE=$(echo $INFOEXTRA | awk '{print $1}') + COMPRESOR=$(echo $INFOEXTRA | awk '{print $2}') + SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $3}') + echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " + # comprobamos que el tamaño de a imagen es menor que la del cliente. + SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET) + if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ] + then + echo -n "[30] Iniciando CLIENTE MULTICAST: " + echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR + ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" + echo "[90] Extender sistema de archivos" + ogExtendFs $DISKTARGET $PARTTARGET + # Cambiar nombre en sistemas Windows. + if [ "$(ogGetOsType $DISKTARGET $PARTTARGET)" = "Windows" ]; then + HOST=$(ogGetHostname) + HOST=${HOST:-"UNKNOWN"} + echo "[90] Cambiar nombre Windows a \"$HOST\"." + ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST" + fi + else + echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " + echo -n "[26] ERROR tamanio particion= $SIZEPARTTARGET tamanio de la imagen= $SIZEIMAGE" + exit 1 + fi + ;; +esac +TIME=$[SECONDS-TIME1] +echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s" + + diff --git a/client/nfsexport/scripts/createImage b/client/nfsexport/scripts/createImage index 08e6c691..5d347527 100755 --- a/client/nfsexport/scripts/createImage +++ b/client/nfsexport/scripts/createImage @@ -26,7 +26,7 @@ if [ $? != 0 ]; then ogMakeDir "$3" $(dirname "/$4") IMGDIR=$(ogGetParentPath "$3" "/$4") || exit $? fi -IMGFILE=$IMGDIR/$(basename "/$4").pgz +IMGFILE=$IMGDIR/$(basename "/$4").img # Renombrar el fichero de imagen si ya existe. if [ -f "$IMGFILE" ]; then echo "[10] Renombrar \"$IMGFILE\" por \"$IMGFILE.ant\"." @@ -40,10 +40,19 @@ echo "[15] $PROG: Origen=$PART, Destino=$IMGFILE" echo "[20] Comprobar sistema de archivos." ogCheckFs $1 $2 +echo "[21] Desmontando particion." +ogUnmount $1 $2 + +echo "[25]: Calculando la reduccion del sistema de archivos DISK:$1 PARTITION:$2" +ogReduceFs $1 $2 || exit 1 + # Crear la imagen. echo "[30] Crear imagen." ogCreateImage $1 "$2" $3 $4 || exit $? +echo "[90] Extender sistema de archivos." +ogExtendFs $1 $2 + TIME=$[SECONDS-TIME1] echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" diff --git a/client/nfsexport/scripts/deployImage b/client/nfsexport/scripts/deployImage new file mode 100755 index 00000000..15392ec7 --- /dev/null +++ b/client/nfsexport/scripts/deployImage @@ -0,0 +1,20 @@ +#!/bin/bash + +TIME1=$SECONDS +PROG="$(basename $0)" +if [ $# -lt 4 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" + exit $? +fi + +#controlar param1 REPO + +updateCache REPO $2.img $5 $6 +if [ $? != "0" ] +then + echo "fin del updateCache REPO $2.img $5 $6 con errores" + exit 1 +else + echo "comenzamos con restoreImage CACHE $2 $3 $4" + restoreImage CACHE $2 $3 $4 +fi \ No newline at end of file diff --git a/client/nfsexport/scripts/poweroff b/client/nfsexport/scripts/poweroff index 573e5956..f08fff3d 100755 --- a/client/nfsexport/scripts/poweroff +++ b/client/nfsexport/scripts/poweroff @@ -12,5 +12,6 @@ done echo "[50] Desmontar cache local." ogUnmountCache echo "[70] Reiniciar el equipo." -/sbin/poweroff +ethtool -s $DEVICE wol g +busybox poweroff diff --git a/client/nfsexport/scripts/reboot b/client/nfsexport/scripts/reboot index 88b4532b..859bfa0a 100755 --- a/client/nfsexport/scripts/reboot +++ b/client/nfsexport/scripts/reboot @@ -12,5 +12,6 @@ done echo "[50] Desmontar cache local." ogUnmountCache echo "[90] Reiniciar el equipo." -/sbin/reboot +ethtool -s eth0 wol g +busybox reboot diff --git a/client/nfsexport/scripts/restoreImage b/client/nfsexport/scripts/restoreImage index 8fb46fa5..a01f1a49 100755 --- a/client/nfsexport/scripts/restoreImage +++ b/client/nfsexport/scripts/restoreImage @@ -10,7 +10,7 @@ if [ $# -lt 4 ]; then fi # Procesar parámetros de entrada -IMGTYPE=$(ogGetImageType "$1" "$2") +IMGTYPE="img" IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") PROTO=${5:-"UNICAST"} if [ "$1" == "CACHE" -o "$1" == "cache" ]; then @@ -25,7 +25,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then case "$PROTO" in UNICAST|unicast) # Copiar fichero del repositorio al caché local. - IMGTYPE=$(ogGetImageType "repo" "$2") + #IMGTYPE=$(ogGetImageType "repo" "$2") IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") if [ -z "$IMGFILE" ] || [ $(ogIsNewerFile "repo" "$2.$IMGTYPE" "$IMGFILE") ]; then echo "[10] Copiando imagen \"$2\" del repositorio a caché local" @@ -33,7 +33,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then fi # Comprobar si existe el fichero en caché y no en el repositorio. if [ -z "$IMGFILE" ]; then - IMGTYPE=$(ogGetImageType "cache" "$2") + #IMGTYPE=$(ogGetImageType "cache" "$2") IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") if [ -z "$IMGFILE" ]; then ogRaiseError $OG_ERR_NOTFOUND "cache, $2.$IMGTYPE" @@ -44,7 +44,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then MULTICAST|multicast) if [ -z "$IMGFILE" ]; then echo "[10] Copiando imagen multicast \"$2\" del repositorio a caché local" - IMGTYPE=$(ogGetImageType "repo" "$2") + #IMGTYPE=$(ogGetImageType "repo" "$2") PORTBASE=`echo $6 | cut -f1 -d:` echo "ogMcastReceiverFile SOURCE:$PORTBASE TARGET:CACHE $2.$IMGTYPE" ogMcastReceiverFile "$PORTBASE" "CACHE" "$2.$IMGTYPE" || exit $? @@ -53,7 +53,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then ;; TORRENT|torrent) echo "[9] copiando el fichero torrent Unicast \"$2\" del repositorio a caché local" - IMGTYPE=$(ogGetImageType "repo" "$2") + #IMGTYPE=$(ogGetImageType "repo" "$2") ogCopyFile "repo" "$2.$IMGTYPE.torrent" "$IMGDIR" || exit $? echo "[10] descargando imagen torrent($6) \"$2\" del repositorio a caché local" ogTorrentStart "CACHE" "$2.$IMGTYPE.torrent" "peer:60" || exit $? diff --git a/client/nfsexport/scripts/updateCache b/client/nfsexport/scripts/updateCache new file mode 100755 index 00000000..5723c378 --- /dev/null +++ b/client/nfsexport/scripts/updateCache @@ -0,0 +1,96 @@ +#!/bin/bash + +# Scirpt para la actualizacion de datos en la cache. +# Versión: 0.9.1, 2008/03/17, - integracion eac +# Versión: 0.9.2, 2010/07/27, - integracion opengnsys + + + +#1 REPO +#2 nombre del fichero con su extension, tipo /imagen1.img o /ubuntu.iso +#3 Protocolo TORRENT | MULTICAST | UNICAST +#4 opciones protocolo +#5 opciones de update cache + + +PROG="$(basename $0)" +if [ $# -lt 4 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_REPO _str_Relative_Path_OGIMG_with_/ PROTOCOLO OPCIONES_PROTOCOLO OPCIONES_UPDATECACHE" + exit $? +fi + +REPOSITORIO=$1 +PROTOCOLO=$3 +OPTPROTOCOLO=$4 +echo $REPOSITORIO $PROTOCOLO $OPTPROTOCOLO +# Si el repositorio local CACHE no existe salimos. +if ! $(ogFindCache >/dev/null); then + ogRaiseError $OG_ERR_NOTFOUND "CACHE" + exit $? +fi + + +CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`) +FILESIZE=$(ls -sk $(ogGetPath $1 $2) | cut -f1 -d" ") + +if [ "$FILESIZE" -ge "$CACHESIZEFREE" ] +then + echo "el tamanio del fichero $2 = $FILESIZE es mayor que el espacio dispinible en la cache = $CACHESIZEFREE" + exit 1 +fi + +ogUpdateCacheIsNecesary $1 $2 || exit 0 + +ogMountCache + +## Si no existe, crear subdirectorio para el fichero en la cache. +IMGDIR=$(ogGetParentPath "$1" "/$2") +if [ $? != 0 ]; then + echo "[5] Crear subdirectorio del fichero \"$2 $(dirname "$2")." + ogMakeDir "CACHE" $(dirname "/$2") + IMGDIR=$(ogGetParentPath "$1" "/$2") || exit $? +fi + + +echo "ogCopyFile $1 $2.torrent absolute $OGCAC$OGIMG" +ogCopyFile $1 $2.torrent $OGCAC$OGIMG +#TODO: comprobar que el tracker definido en el fichero es correcto. +case "$PROTOCOLO" in + torrent | TORRENT ) + #[ -z $OPTPROTOCOLO ] && OPTPROTOCOL=leecher:10 + echo "ogTorrentStart CACHE $2.torrent $4" + ogTorrentStart CACHE $2.torrent $4 + ;; + multicast | MULTICAST ) + echo "determinando puerto principal y auxiliar." + PORT=$(echo $OPTPROTOCOLO | cut -f1 -d":") + let PORTAUX=$PORT+1 + echo "comprobando que el servidor está activo" + if (nmap -n -sU -p $PORTAUX $repo | grep open) + then + ogMcastReceiverFile $PORT CACHE $2 + else + echo "solicita la apertura: hose $repo 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO"" + hose $repo 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO" + #echo "espero y llamo a: ogMcastReceiverFile $PORT CACHE $2" + sleep 30 + ogMcastReceiverFile $PORT CACHE $2 + fi + ;; + unicast | UNICAST ) + echo "unicast" + ;; +esac + +if ogUpdateCacheIsNecesary $1 $2 +then + echo "algo ha fallado" + exit 1 +else + echo "updateCache ok" + exit 0 +fi + + + +# \ No newline at end of file -- cgit v1.2.3-18-g5258 From 70848f4b6596e143fdb57b129ad99a17d459df19 Mon Sep 17 00:00:00 2001 From: adv Date: Thu, 24 Feb 2011 22:15:53 +0000 Subject: branch version 1.0 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1504 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Sources/Services/ogAdmRepoAux | 2 +- admin/WebConsole/gestores/gestor_pxe.php | 2 +- installer/opengnsys_installer.sh | 2 +- repoman/bin/sendFileMcast | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux index af13f093..a0c26baa 100755 --- a/admin/Sources/Services/ogAdmRepoAux +++ b/admin/Sources/Services/ogAdmRepoAux @@ -20,7 +20,7 @@ case $PARM1 in FILE=/opt/opengnsys/images$PARM2 MCASTOPT=$PARM3 #3 opciones protocolo multicast - echo "/opt/opengnsys/bin/SendFileMcast $FILE $MCASTOPT" + echo "/opt/opengnsys/bin/sendFileMcast $FILE $MCASTOPT" /opt/opengnsys/bin/sendFileMcast $FILE $MCASTOPT ;; esac \ No newline at end of file diff --git a/admin/WebConsole/gestores/gestor_pxe.php b/admin/WebConsole/gestores/gestor_pxe.php index cbde8883..d4a9e4e3 100755 --- a/admin/WebConsole/gestores/gestor_pxe.php +++ b/admin/WebConsole/gestores/gestor_pxe.php @@ -125,7 +125,7 @@ while (!$rs->EOF) $netmask=netmask2cidr($netmask); } - $iseac=substr_count($rs->campos["append"] , "engine=testing"); + $iseac=substr_count($rs->campos["append"] , "boot=oginit"); $isinitrd=substr_count($rs->campos["append"] , "initrd.gz"); if ($iseac > 0) diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index cd6bd940..b4244243 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -43,7 +43,7 @@ INSTALL_TARGET=/opt/opengnsys LOG_FILE=/tmp/opengnsys_installation.log # Array con las dependencias -DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql nfs-kernel-server dhcp3-server udpcast bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba unzip netpipes debootstrap subversion schroot squashfs-tools ) +DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql nfs-kernel-server dhcp3-server bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba unzip netpipes debootstrap subversion schroot squashfs-tools ) # Base de datos OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogAdmBD.sql diff --git a/repoman/bin/sendFileMcast b/repoman/bin/sendFileMcast index 92237a50..4829d8db 100755 --- a/repoman/bin/sendFileMcast +++ b/repoman/bin/sendFileMcast @@ -61,5 +61,5 @@ CERROR="8x8/128" which mbuffer &> /dev/null && MBUFFER="--pipe 'mbuffer -m 20M'" ##### ADV v. 1.0 23/02/2011 #version 0.10 # udp-sender $MBUFFER --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" -udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" +/opt/opengnsys/bin/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" ##### ADV v. 1.0 23/02/2011 -- cgit v1.2.3-18-g5258 From aa91bf5cec941d0c50a61c3f062294e20add55d0 Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 25 Feb 2011 17:18:13 +0000 Subject: branch version 1.0 log REPOMAN: ogAdmRepoAux >> ogAdmRepo.log sendFileMcast >> ogAdmRepoMulticast.log git-svn-id: https://opengnsys.es/svn/branches/version1.0@1505 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Sources/Services/ogAdmRepoAux | 25 ++++++++++++------------ admin/WebConsole/comandos/jscripts/asistentes.js | 2 -- repoman/bin/sendFileMcast | 2 +- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux index a0c26baa..4ab3b634 100755 --- a/admin/Sources/Services/ogAdmRepoAux +++ b/admin/Sources/Services/ogAdmRepoAux @@ -1,26 +1,25 @@ #!/bin/bash PARM=`cat` +BASEDIR=/opt/opengnsys +REPONAME=ogAdmRepo +REPOLOG=$BASEDIR/log/$REPONAME.log + PARM1=$(echo $PARM | cut -f1 -d" ") PARM2=$(echo $PARM | cut -f2 -d" ") PARM3=$(echo $PARM | cut -f3 -d" ") PARM4=$(echo $PARM | cut -f4 -d" ") -echo $PARM -echo $PARM1 -echo $PARM2 -echo $PARM3 -echo $PARM4 case $PARM1 in START_MULTICAST) - #1 START_MULTICAST - #2 fichero a enviar - FILE=/opt/opengnsys/images$PARM2 - MCASTOPT=$PARM3 - #3 opciones protocolo multicast - echo "/opt/opengnsys/bin/sendFileMcast $FILE $MCASTOPT" - /opt/opengnsys/bin/sendFileMcast $FILE $MCASTOPT + #1 START_MULTICAST + #2 fichero a enviar + #3 opciones de multicast + FILE=/opt/opengnsys/images$PARM2 + MCASTOPT=$PARM3 + echo "/opt/opengnsys/bin/sendFileMcast $FILE $MCASTOPT" >> $REPOLOG + /opt/opengnsys/bin/sendFileMcast $FILE $MCASTOPT >> $REPOLOG ;; -esac \ No newline at end of file +esac \ No newline at end of file diff --git a/admin/WebConsole/comandos/jscripts/asistentes.js b/admin/WebConsole/comandos/jscripts/asistentes.js index 58eeb716..a15e7396 100644 --- a/admin/WebConsole/comandos/jscripts/asistentes.js +++ b/admin/WebConsole/comandos/jscripts/asistentes.js @@ -9,12 +9,10 @@ // *********************************************************************************************************** function codeCloneRemotePartition(form){ -//alert("codeCloneRemotePartition(form)"); form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value; } function codeDeployImage(form){ -alert("codeDeployImage(form)"); switch (form.idmetodo.value) { case "MULTICAST": diff --git a/repoman/bin/sendFileMcast b/repoman/bin/sendFileMcast index 4829d8db..cbe3271f 100755 --- a/repoman/bin/sendFileMcast +++ b/repoman/bin/sendFileMcast @@ -61,5 +61,5 @@ CERROR="8x8/128" which mbuffer &> /dev/null && MBUFFER="--pipe 'mbuffer -m 20M'" ##### ADV v. 1.0 23/02/2011 #version 0.10 # udp-sender $MBUFFER --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" -/opt/opengnsys/bin/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" +/opt/opengnsys/bin/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" --log /opt/opengnsys/log/ogAdmRepoMcast.log ##### ADV v. 1.0 23/02/2011 -- cgit v1.2.3-18-g5258 From 062b55a1d8cc3dece8fd30288fc31ad72e415cde Mon Sep 17 00:00:00 2001 From: adv Date: Sun, 27 Feb 2011 18:02:20 +0000 Subject: branch version 1.0 modulo ubicador de ordenadores dentro de aula. git-svn-id: https://opengnsys.es/svn/branches/version1.0@1506 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Database/alterbd.sql | 34 ++- .../includes/asistentes/AyudanteFormularios.php | 63 +++-- .../asistentes/formCloneRemotePartition.php | 8 +- .../includes/asistentes/formDeployImage.php | 9 +- .../includes/asistentes/formParticionado.php | 6 +- admin/WebConsole/comandos/jscripts/asistentes.js | 34 ++- .../gestores/gestor_ubicarordenadores.php | 84 +++++++ admin/WebConsole/jscripts/aulas.js | 4 +- admin/WebConsole/principal/aula.php | 53 ++++ admin/WebConsole/principal/aulas.php | 81 +++++- admin/WebConsole/principal/ubicarordenadores.php | 274 +++++++++++++++++++++ client/nfsexport/scripts/poweroff | 7 +- client/nfsexport/scripts/reboot | 4 +- 13 files changed, 615 insertions(+), 46 deletions(-) create mode 100755 admin/WebConsole/gestores/gestor_ubicarordenadores.php create mode 100644 admin/WebConsole/principal/ubicarordenadores.php diff --git a/admin/Database/alterbd.sql b/admin/Database/alterbd.sql index 6838af65..52d3b45d 100644 --- a/admin/Database/alterbd.sql +++ b/admin/Database/alterbd.sql @@ -79,7 +79,29 @@ INSERT INTO `menuboot_itemboot` (`labelmenu`, `labelitem`, `default`) VALUES ('pxeADMIN', 'ogClientAdmin', 0); -INSERT INTO `ogAdmBD`.`comandos` ( + +-- +-- Estructura de tabla para la tabla `comandos` +-- + +CREATE TABLE IF NOT EXISTS `asistentes` ( + `idcomando` int(11) NOT NULL AUTO_INCREMENT, + `descripcion` varchar(250) NOT NULL DEFAULT '', + `pagina` varchar(256) NOT NULL, + `gestor` varchar(256) NOT NULL, + `funcion` varchar(64) NOT NULL, + `urlimg` varchar(250) DEFAULT NULL, + `aplicambito` tinyint(4) DEFAULT NULL, + `visuparametros` varchar(250) DEFAULT NULL, + `parametros` varchar(250) DEFAULT NULL, + `comentarios` text, + `activo` tinyint(1) NOT NULL, + PRIMARY KEY (`idcomando`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ; + + + +INSERT INTO `ogAdmBD`.`asistentes` ( `idcomando` , `descripcion` , `pagina` , @@ -93,11 +115,11 @@ INSERT INTO `ogAdmBD`.`comandos` ( `activo` ) VALUES -('11', 'Asistente Clonacion Particiones Remotas', '../comandos/AsistenteCloneRemotePartition.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), -('12', 'Asistente "Deploy" de Imagenes', '../comandos/AsistenteDeployImage.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), -('13', 'Asistente "UpdateCache" con Imagenes', '../comandos/AsistenteUpdateCache.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), -('14', 'Asistente Restauracion de Imagenes', '../comandos/AsistenteRestoreImage.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), -('15', 'Asistente Particionado', '../comandos/AsistenteParticionado.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'); +('1', 'Asistente Clonacion Particiones Remotas', '../asistentes/AsistenteCloneRemotePartition.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), +('2', 'Asistente "Deploy" de Imagenes', '../asistentes/AsistenteDeployImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), +('3', 'Asistente "UpdateCache" con Imagenes', '../asistentes/AsistenteUpdateCache.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), +('4', 'Asistente Restauracion de Imagenes', '../asistentes/AsistenteRestoreImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), +('5', 'Asistente Particionado', '../asistentes/AsistenteParticionado.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'); diff --git a/admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php b/admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php index 43081c08..d3569aa3 100644 --- a/admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php +++ b/admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php @@ -6,11 +6,17 @@ function htmlForm_mcast($cmd,$ambito,$idambito) { //if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; -if ($ambito=4) +if ($ambito == 4) { $cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas where aulas.idaula=' . $idambito ; } -if ($ambito=16) + +if ($ambito == 8) +{ +$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula where gruposordenadores.idgrupo=' . $idambito ; +} + +if ($ambito == 16) { $cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ; } @@ -50,11 +56,17 @@ if ($rs->Abrir()){ function htmlForm_p2p($cmd,$ambito,$idambito) { //if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; -if ($ambito=4) +if ($ambito == 4) { $cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas where aulas.idaula=' . $idambito ; } -if ($ambito=16) +if ($ambito == 8) +{ +$cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula where gruposordenadores.idgrupo=' . $idambito ; +} + + +if ($ambito == 16) { $cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ; } @@ -74,14 +86,27 @@ return($SelectHtml); } -function htmlOPTION_equipos($cmd,$idambito) +function htmlOPTION_equipos($cmd,$ambito,$idambito) +{ + +//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; +if ($ambito == 4) { +$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaula=' . $idambito ; +} + +if ($ambito == 8) +{ +$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where grupoid=' . $idambito ; +} +if ($ambito == 16) +{ +$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaula=' . $idambito ; +} + $SelectHtml=""; - $cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaula=' . $idambito ; $rs=new Recordset; $rs->Comando=&$cmd; - //$SelectHtml.= ' - - + +
+ Elige particion del Master a enviar

+ Elige herramienta de clonacion:
+ Elige compresor para la herramienta de clonacion: +
- + Elige la imagen a distribuir:

+ Elige el metodo de transferencia
Particion 4 - + + \ No newline at end of file diff --git a/admin/WebConsole/comandos/jscripts/asistentes.js b/admin/WebConsole/comandos/jscripts/asistentes.js index a15e7396..e2b97903 100644 --- a/admin/WebConsole/comandos/jscripts/asistentes.js +++ b/admin/WebConsole/comandos/jscripts/asistentes.js @@ -15,12 +15,12 @@ form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form. function codeDeployImage(form){ switch (form.idmetodo.value) { -case "MULTICAST": - protocol="MULTICAST " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " "; -break; -case "TORRENT": -protocol=" TORRENT " + form.modp2p.value + ":" + form.timep2p.value; -break; + case "MULTICAST": + protocol="MULTICAST " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " "; + break; + case "TORRENT": + protocol=" TORRENT " + form.modp2p.value + ":" + form.timep2p.value; + break; } //form.codigo.value="deployImage REPO /"; form.codigo.value="deployImage REPO /" + form.idimagen.value + " 1 " + form.idparticion.value + " " + protocol ; @@ -30,6 +30,7 @@ function codeParticionado(form){ var value1; var value2; var value3; +var precache; if (form.check1.checked) { if (form.part1.value == "CUSTOM" ) {value1 = form.part1custom.value} else {value1 = form.part1.value}; @@ -60,14 +61,23 @@ else { value3 = "EMPTY:1" } + +if (form.size4.value == "0") { +precache="ogUnmountCache \n ogUnmountAll 1 \n sizecache=`ogGetPartitionSize 1 4` \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache $sizecache "; +//alert(precache); +} +else +{ +precache="ogUnmountCache \n ogUnmountAll 1 \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache " + form.size4.value + " "; +//alert(precache); +} + + form.codigo.value="\ -ogUnmountCache \n \ -ogUnmountAll 1 \n \ -ogDeletePartitionTable 1 \n \ -ogUpdatePartitionTable 1 \n \ -initCache " + form.size4.value +" \n \ +" + precache + " \n \ ogListPartitions 1 \n \ ogCreatePartitions 1 " + value1 + " " + value2 + " " + value3 + " \n \ ogSetPartitionActive 1 1 \n \ -ogListPartitions 1"; +ogUpdatePartitionTable 1 \n \ +ogListPartitions 1 \n"; } diff --git a/admin/WebConsole/gestores/gestor_ubicarordenadores.php b/admin/WebConsole/gestores/gestor_ubicarordenadores.php new file mode 100755 index 00000000..6be815db --- /dev/null +++ b/admin/WebConsole/gestores/gestor_ubicarordenadores.php @@ -0,0 +1,84 @@ +"; +echo ""; +echo ""; +echo " gestion de equipos "; +echo ""; +echo ""; +echo ""; + + + +#echo('litambito con valor: '. $_GET['litambito']); +#echo ('idambito con valor: ' . $_GET['idaula']); +#echo ('nombreambito con valor: ' . $_GET['nombreambito']); +#echo "
"; + +$lista = explode(";",$_POST['listOfItems']); +foreach ($lista as $sublista) { + $elementos = explode("|",$sublista); + $hostname=$elementos[1]; + $grupo=$elementos[0]; + ReubicarOrdenador($cmd,$hostname,$grupo); + #echo $elementos[0] . $elementos[1]; + #echo "
"; +} +echo " "; +echo " "; + +function ReubicarOrdenador($cmd,$hostname,$grupo) +{ +global $cmd; +global $hostname; +global $grupo; +if ($grupo == "pxe") +{ + $cmd->CreaParametro("@grupo","0",0); + $cmd->CreaParametro("@hostname",$hostname,0); + $cmd->texto="update ordenadores set grupoid=@grupo where nombreordenador=@hostname"; +} +else +{ + $cmd->CreaParametro("@grupo",$grupo,0); + $cmd->CreaParametro("@hostname",$hostname,0); + $cmd->texto="update ordenadores set grupoid=(Select idgrupo from gruposordenadores where nombregrupoordenador=@grupo) where nombreordenador=@hostname"; +} +$cmd->Ejecutar(); +#Update ordenadores Set grupoid=(Select idgrupo From gruposordenadores Where nombregrupoordenador="subgrupo1") where nombreordenador="prueba1" +} + + +# +# + +?> + + + + + + + + + diff --git a/admin/WebConsole/jscripts/aulas.js b/admin/WebConsole/jscripts/aulas.js index b845ec7d..c2634c3b 100644 --- a/admin/WebConsole/jscripts/aulas.js +++ b/admin/WebConsole/jscripts/aulas.js @@ -370,7 +370,7 @@ function ver_boot(){ var whref="boot.php?litambito="+litambito+"&idambito="+idambito+"&nombreambito="+nombreambito window.open(whref,"frame_contenidos") } -function ver_startpages(){ +function ver_ubicarordenadores(){ reset_contextual(-1,-1) // Oculta menu contextual var idambito=currentNodo.toma_identificador(); var litambito=currentNodo.toma_sufijo(); @@ -378,7 +378,7 @@ function ver_startpages(){ //alert(idambito); //alert('nombreambito' + nombreambito); //alert('litambito' + litambito); - var whref="./startpages/startpage.php?litambito="+litambito+"&idambito="+idambito+"&nombreambito="+nombreambito + var whref="ubicarordenadores.php?litambito="+litambito+"&idambito="+idambito+"&nombreambito="+nombreambito window.open(whref,"frame_contenidos") } diff --git a/admin/WebConsole/principal/aula.php b/admin/WebConsole/principal/aula.php index a4f6136e..4f62e9c8 100644 --- a/admin/WebConsole/principal/aula.php +++ b/admin/WebConsole/principal/aula.php @@ -111,6 +111,13 @@ $XMLcontextual=ContextualXMLComandos($LITAMBITO_AULAS,$AMBITO_AULAS); echo $flotante->CreaMenuContextual($XMLcontextual); $XMLcontextual=ContextualXMLComandos($LITAMBITO_ORDENADORES,$AMBITO_ORDENADORES); echo $flotante->CreaMenuContextual($XMLcontextual); + +// Crea contextual de los asistentes para los distintosn ámbitos +$XMLcontextual=ContextualXMLAsistentes($LITAMBITO_AULAS,$AMBITO_AULAS); +echo $flotante->CreaMenuContextual($XMLcontextual); +$XMLcontextual=ContextualXMLAsistentes($LITAMBITO_ORDENADORES,$AMBITO_ORDENADORES); +echo $flotante->CreaMenuContextual($XMLcontextual); + ?> + + + + + + + +aulas 16->ordenadores +# idambito: id de los elementos en su correspondiente tabla-ambito (aulas, ordenadores...) +# nombreambito: nombre del elemento. + +switch($ambito){ + case $AMBITO_CENTROS : + $urlimg='../images/iconos/centros.gif'; + $textambito=$TbMsg[0]; + break; + case $AMBITO_GRUPOSAULAS : + $urlimg='../images/iconos/carpeta.gif'; + $textambito=$TbMsg[1]; + break; + case $AMBITO_AULAS : + $urlimg='../images/iconos/aula.gif'; + $textambito=$TbMsg[2]; + if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; + if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; + $seleccion="and idaula=" . $idambito .""; + break; + case $AMBITO_GRUPOSORDENADORES : + $urlimg='../images/iconos/carpeta.gif'; + $textambito=$TbMsg[3]; + $seleccion= "and grupoid=" . $idambito . ""; + break; + case $AMBITO_ORDENADORES : + $urlimg='../images/iconos/ordenador.gif'; + $textambito=$TbMsg[4]; + if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; + if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; + break; + } + + +?> + + + + + +

Ubicador Ordenadores
+ +

+ + + + + + + +"; +?> + + + + + + + +texto="SELECT * FROM gruposordenadores where idaula = '".$idambito ."' "; +$rsmenu=new Recordset; +$rsmenu->Comando=&$cmd; +if (!$rsmenu->Abrir()) echo "error"; +$rsmenu->Primero(); +while (!$rsmenu->EOF) +{ + echo ""; + echo ""; + $rsmenu->Siguiente(); +} +$rsmenu->Cerrar(); + + + + + + +// esta funcion genera los elementos de un select(formulario html) donde aparecen los nombres de los ordenadores, según su menu pxe +function ListaEquiposGrupo($cmd,$idaula,$idgrupo) +{ +#componemos select dependiendo de idgrupo; si idgrupo=0, los ordenadores solo pertenenen al aula y no estan en ningun subgrupo. +switch ($idgrupo){ + case 0: + $cmd->texto="select nombreordenador from ordenadores where ordenadores.idaula='" . $idaula . "' AND ordenadores.grupoid = '0'"; + ;; + default: + $cmd->texto="select nombreordenador from ordenadores JOIN gruposordenadores ON ordenadores.grupoid = gruposordenadores.idgrupo where ordenadores.idaula='" . $idaula . "' AND gruposordenadores.idgrupo = '". $idgrupo ."'"; + ;; +} + +#$cmd->texto="select nombreordenador from ordenadores JOIN gruposordenadores ON ordenadores.grupoid = gruposordenadores.idgrupo where ordenadores.idaula='" . $idaula . "' AND gruposordenadores.idgrupo = '". $idgrupo ."'"; +#$cmd->texto="SELECT * FROM gruposordenadores where arranque='" . $menupxe ."' " . $seleccion; +$rs=new Recordset; +$rs->Comando=&$cmd; +if (!$rs->Abrir()) echo "error"; +$rs->Primero(); +while (!$rs->EOF) +{ + echo ""; + $rs->Siguiente(); +} +$rs->Cerrar(); +} + + +function ListaEquiposBase($cmd,$idaula) +{ +$cmd->texto="select nombreordenador from ordenadores where ordenadores.idaula='" . $idaula . "' AND ordenadores.grupoid = '0'"; +$rs=new Recordset; +$rs->Comando=&$cmd; +if (!$rs->Abrir()) echo "error"; +$rs->Primero(); +while (!$rs->EOF) +{ + echo ""; + $rs->Siguiente(); +} +$rs->Cerrar(); +} + + + +?> + + + + +
+
+ +
"; + echo $rsmenu->campos['nombregrupoordenador']; + echo "
"; + echo ""; + echo ""; + echo "
"; + echo ""; + echo "
+ + + diff --git a/client/nfsexport/scripts/poweroff b/client/nfsexport/scripts/poweroff index f08fff3d..bf867467 100755 --- a/client/nfsexport/scripts/poweroff +++ b/client/nfsexport/scripts/poweroff @@ -11,7 +11,8 @@ for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do done echo "[50] Desmontar cache local." ogUnmountCache -echo "[70] Reiniciar el equipo." -ethtool -s $DEVICE wol g -busybox poweroff +echo "[70] Apagando el equipo." +ethtool -s $DEVICE wol g +(sleep 5 && busybox poweroff) & + diff --git a/client/nfsexport/scripts/reboot b/client/nfsexport/scripts/reboot index 859bfa0a..7b7f3c94 100755 --- a/client/nfsexport/scripts/reboot +++ b/client/nfsexport/scripts/reboot @@ -12,6 +12,6 @@ done echo "[50] Desmontar cache local." ogUnmountCache echo "[90] Reiniciar el equipo." -ethtool -s eth0 wol g -busybox reboot +ethtool -s $DEVICE wol g +(sleep 5 && busybox reboot) & -- cgit v1.2.3-18-g5258 -- cgit v1.2.3-18-g5258 From eb3e2b89ad2832d010292b0efb2f9c727b9de90b Mon Sep 17 00:00:00 2001 From: adv Date: Sun, 27 Feb 2011 18:04:22 +0000 Subject: branch 1.0 menu asistentes git-svn-id: https://opengnsys.es/svn/branches/version1.0@1508 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/asistentes/Apagar.php | 72 +++++ admin/WebConsole/asistentes/Arrancar.php | 71 +++++ .../asistentes/AsistenteCloneRemotePartition.php | 112 +++++++ .../WebConsole/asistentes/AsistenteDeployImage.php | 138 +++++++++ .../asistentes/AsistenteParticionado.php | 131 ++++++++ .../WebConsole/asistentes/AsistenteUpdateCache.php | 138 +++++++++ admin/WebConsole/asistentes/Comando.php | 72 +++++ admin/WebConsole/asistentes/Configurar.php | 260 ++++++++++++++++ admin/WebConsole/asistentes/CrearImagen.php | 212 +++++++++++++ admin/WebConsole/asistentes/EjecutarScripts.php | 81 +++++ admin/WebConsole/asistentes/IniciarSesion.php | 154 ++++++++++ admin/WebConsole/asistentes/InventarioHardware.php | 72 +++++ admin/WebConsole/asistentes/InventarioSoftware.php | 122 ++++++++ admin/WebConsole/asistentes/Reiniciar.php | 71 +++++ admin/WebConsole/asistentes/RestaurarImagen.php | 269 ++++++++++++++++ .../asistentes/gestores/gestor_Comandos.php | 285 +++++++++++++++++ .../includes/asistentes/AyudanteFormularios.php | 337 +++++++++++++++++++++ .../asistentes/formCloneRemotePartition.php | 72 +++++ .../includes/asistentes/formDeployImage.php | 48 +++ .../includes/asistentes/formParticionado.php | 75 +++++ .../asistentes/includes/capturaacciones.php | 31 ++ .../asistentes/includes/formularioacciones.php | 20 ++ .../asistentes/includes/opcionesacciones.php | 93 ++++++ admin/WebConsole/asistentes/jscripts/Apagar.js | 24 ++ admin/WebConsole/asistentes/jscripts/Arrancar.js | 24 ++ admin/WebConsole/asistentes/jscripts/Comando.js | 24 ++ admin/WebConsole/asistentes/jscripts/Configurar.js | 174 +++++++++++ .../WebConsole/asistentes/jscripts/CrearImagen.js | 70 +++++ .../asistentes/jscripts/EjecutarScripts.js | 34 +++ .../asistentes/jscripts/IniciarSesion.js | 47 +++ .../asistentes/jscripts/InventarioHardware.js | 24 ++ .../asistentes/jscripts/InventarioSoftware.js | 44 +++ admin/WebConsole/asistentes/jscripts/Reiniciar.js | 24 ++ .../asistentes/jscripts/RestaurarImagen.js | 95 ++++++ admin/WebConsole/asistentes/jscripts/asistentes.js | 83 +++++ .../asistentes/jscripts/comunescomandos.js | 190 ++++++++++++ admin/WebConsole/asistentes/xajax.common.php | 7 + admin/WebConsole/asistentes/xajax.server.php | 91 ++++++ 38 files changed, 3891 insertions(+) create mode 100644 admin/WebConsole/asistentes/Apagar.php create mode 100644 admin/WebConsole/asistentes/Arrancar.php create mode 100644 admin/WebConsole/asistentes/AsistenteCloneRemotePartition.php create mode 100644 admin/WebConsole/asistentes/AsistenteDeployImage.php create mode 100644 admin/WebConsole/asistentes/AsistenteParticionado.php create mode 100644 admin/WebConsole/asistentes/AsistenteUpdateCache.php create mode 100644 admin/WebConsole/asistentes/Comando.php create mode 100644 admin/WebConsole/asistentes/Configurar.php create mode 100644 admin/WebConsole/asistentes/CrearImagen.php create mode 100644 admin/WebConsole/asistentes/EjecutarScripts.php create mode 100644 admin/WebConsole/asistentes/IniciarSesion.php create mode 100644 admin/WebConsole/asistentes/InventarioHardware.php create mode 100644 admin/WebConsole/asistentes/InventarioSoftware.php create mode 100644 admin/WebConsole/asistentes/Reiniciar.php create mode 100644 admin/WebConsole/asistentes/RestaurarImagen.php create mode 100644 admin/WebConsole/asistentes/gestores/gestor_Comandos.php create mode 100644 admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php create mode 100644 admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php create mode 100644 admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php create mode 100644 admin/WebConsole/asistentes/includes/asistentes/formParticionado.php create mode 100644 admin/WebConsole/asistentes/includes/capturaacciones.php create mode 100644 admin/WebConsole/asistentes/includes/formularioacciones.php create mode 100644 admin/WebConsole/asistentes/includes/opcionesacciones.php create mode 100644 admin/WebConsole/asistentes/jscripts/Apagar.js create mode 100644 admin/WebConsole/asistentes/jscripts/Arrancar.js create mode 100644 admin/WebConsole/asistentes/jscripts/Comando.js create mode 100644 admin/WebConsole/asistentes/jscripts/Configurar.js create mode 100644 admin/WebConsole/asistentes/jscripts/CrearImagen.js create mode 100644 admin/WebConsole/asistentes/jscripts/EjecutarScripts.js create mode 100644 admin/WebConsole/asistentes/jscripts/IniciarSesion.js create mode 100644 admin/WebConsole/asistentes/jscripts/InventarioHardware.js create mode 100644 admin/WebConsole/asistentes/jscripts/InventarioSoftware.js create mode 100644 admin/WebConsole/asistentes/jscripts/Reiniciar.js create mode 100644 admin/WebConsole/asistentes/jscripts/RestaurarImagen.js create mode 100644 admin/WebConsole/asistentes/jscripts/asistentes.js create mode 100644 admin/WebConsole/asistentes/jscripts/comunescomandos.js create mode 100644 admin/WebConsole/asistentes/xajax.common.php create mode 100644 admin/WebConsole/asistentes/xajax.server.php diff --git a/admin/WebConsole/asistentes/Apagar.php b/admin/WebConsole/asistentes/Apagar.php new file mode 100644 index 00000000..3ddb8f1a --- /dev/null +++ b/admin/WebConsole/asistentes/Apagar.php @@ -0,0 +1,72 @@ + + +Administración web de aulas + + + + + + '?> + + +'.$TbMsg[5].' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + //________________________________________________________________________________________________________ + include_once("./includes/formularioacciones.php"); + //________________________________________________________________________________________________________ + //________________________________________________________________________________________________________ + include_once("./includes/opcionesacciones.php"); + //________________________________________________________________________________________________________ +?> + + + diff --git a/admin/WebConsole/asistentes/Arrancar.php b/admin/WebConsole/asistentes/Arrancar.php new file mode 100644 index 00000000..68489a20 --- /dev/null +++ b/admin/WebConsole/asistentes/Arrancar.php @@ -0,0 +1,71 @@ + + +Administración web de aulas + + + + + + + '?> + + +'.$TbMsg[5].' 
'; + echo '  '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + //________________________________________________________________________________________________________ + include_once("./includes/formularioacciones.php"); + //________________________________________________________________________________________________________ + include_once("./includes/opcionesacciones.php"); + //________________________________________________________________________________________________________ +?> + + + diff --git a/admin/WebConsole/asistentes/AsistenteCloneRemotePartition.php b/admin/WebConsole/asistentes/AsistenteCloneRemotePartition.php new file mode 100644 index 00000000..839dfb2b --- /dev/null +++ b/admin/WebConsole/asistentes/AsistenteCloneRemotePartition.php @@ -0,0 +1,112 @@ + + + + + Administración web de aulas + + + + + + '?> + '?> +printJavascript('../xajax/'); +?> + + + + +'.$descricomando.' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + ?> + + +
+ + + + + + + + + + + + +
+
+ + + + + + \ No newline at end of file diff --git a/admin/WebConsole/asistentes/AsistenteDeployImage.php b/admin/WebConsole/asistentes/AsistenteDeployImage.php new file mode 100644 index 00000000..d7dfc695 --- /dev/null +++ b/admin/WebConsole/asistentes/AsistenteDeployImage.php @@ -0,0 +1,138 @@ + + + + + Administración web de aulas + + + + + + '?> + '?> + + +printJavascript('../xajax/'); +?> + + + + +aulas 16->ordenadores +# idambito: id de los elementos en su correspondiente tabla-ambito (aulas, ordenadores...) +# nombreambito: nombre del elemento. + +switch($ambito){ + case $AMBITO_CENTROS : + $urlimg='../images/iconos/centros.gif'; + $textambito=$TbMsg[0]; + break; + case $AMBITO_GRUPOSAULAS : + $urlimg='../images/iconos/carpeta.gif'; + $textambito=$TbMsg[1]; + break; + case $AMBITO_AULAS : + $urlimg='../images/iconos/aula.gif'; + $textambito=$TbMsg[2]; + if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; + if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; + break; + case $AMBITO_GRUPOSORDENADORES : + $urlimg='../images/iconos/carpeta.gif'; + $textambito=$TbMsg[3]; + break; + case $AMBITO_ORDENADORES : + $urlimg='../images/iconos/ordenador.gif'; + $textambito=$TbMsg[4]; + if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; + if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; + break; + } + echo '

'.$descricomando.' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + + $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil; + pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false); + + ?> + + +
+ + + + + + + + + + +
+
+ + + + + + \ No newline at end of file diff --git a/admin/WebConsole/asistentes/AsistenteParticionado.php b/admin/WebConsole/asistentes/AsistenteParticionado.php new file mode 100644 index 00000000..b48e0cf5 --- /dev/null +++ b/admin/WebConsole/asistentes/AsistenteParticionado.php @@ -0,0 +1,131 @@ + + + + + Administración web de aulas + + + + + + '?> + '?> + + +printJavascript('../xajax/'); +?> + + + + +'.$descricomando.' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + + $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil; + pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false); + + ?> + + +
+ + + + + + + + + + +
+
+ + + + + + \ No newline at end of file diff --git a/admin/WebConsole/asistentes/AsistenteUpdateCache.php b/admin/WebConsole/asistentes/AsistenteUpdateCache.php new file mode 100644 index 00000000..7e06210f --- /dev/null +++ b/admin/WebConsole/asistentes/AsistenteUpdateCache.php @@ -0,0 +1,138 @@ + + + + + Administración web de aulas + + + + + + '?> + '?> + + +printJavascript('../xajax/'); +?> + + + + +aulas 16->ordenadores +# idambito: id de los elementos en su correspondiente tabla-ambito (aulas, ordenadores...) +# nombreambito: nombre del elemento. + +switch($ambito){ + case $AMBITO_CENTROS : + $urlimg='../images/iconos/centros.gif'; + $textambito=$TbMsg[0]; + break; + case $AMBITO_GRUPOSAULAS : + $urlimg='../images/iconos/carpeta.gif'; + $textambito=$TbMsg[1]; + break; + case $AMBITO_AULAS : + $urlimg='../images/iconos/aula.gif'; + $textambito=$TbMsg[2]; + if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; + if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; + break; + case $AMBITO_GRUPOSORDENADORES : + $urlimg='../images/iconos/carpeta.gif'; + $textambito=$TbMsg[3]; + break; + case $AMBITO_ORDENADORES : + $urlimg='../images/iconos/ordenador.gif'; + $textambito=$TbMsg[4]; + if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; + if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; + break; + } + echo '

'.$descricomando.' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + + $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil; + pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false); + + ?> + + +
+ + + + + + + + + + +
+
+ + + + + + diff --git a/admin/WebConsole/asistentes/Comando.php b/admin/WebConsole/asistentes/Comando.php new file mode 100644 index 00000000..50a1e28c --- /dev/null +++ b/admin/WebConsole/asistentes/Comando.php @@ -0,0 +1,72 @@ + + +Administración web de aulas + + + + + + '?> + + +'.$descricomando.' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + //________________________________________________________________________________________________________ + include_once("./includes/formularioacciones.php"); + //________________________________________________________________________________________________________ + //________________________________________________________________________________________________________ + include_once("./includes/opcionesacciones.php"); + //________________________________________________________________________________________________________ +?> + + + diff --git a/admin/WebConsole/asistentes/Configurar.php b/admin/WebConsole/asistentes/Configurar.php new file mode 100644 index 00000000..a5e645b8 --- /dev/null +++ b/admin/WebConsole/asistentes/Configurar.php @@ -0,0 +1,260 @@ + + +Administración web de aulas + + + + + + + + +'?> +'?> + + +'.$TbMsg[5].'
'; // Cabecera + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; // Subcebecera + echo '

'.$TbMsg[19].'

'; + if($ambito!=$AMBITO_ORDENADORES){ + $cadenaid=""; + $cadenaip=""; + $cadenamac=""; + RecopilaIpesMacs($cmd,$ambito,$idambito); + + ?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
> > > 
 
+ +
+
+'; + echo ''; + echo ''.HTMLSELECT_particiones(0).''; + echo ''.HTMLSELECT_tipospar($cmd,0).''; + echo ''.HTMLSELECT_sistemasficheros($cmd,0).''; + echo ''; + echo ' '; + echo ''.HTMLSELECT_operaciones().''; + //________________________________________________________________________________________________________ + include_once("./includes/formularioacciones.php"); + //________________________________________________________________________________________________________ + $swb=true; // Este switch hace que se muestren o se oculten los botonotes de confirmación + //________________________________________________________________________________________________________ + include_once("./includes/opcionesacciones.php"); + //________________________________________________________________________________________________________ +?> + + +'; + echo ''; + echo ' '.$TbMsg[8].' '; + echo ' '.$TbMsg[24].' '; + echo ' '.$TbMsg[27].' '; + echo ' '.$TbMsg[22].' '; + echo ' '.$TbMsg[21].' '; + echo ' '.$TbMsg[12].' '; + echo ''; + + $auxCfg=split("@",$configuraciones); // Crea lista de particiones + for($i=0;$i'; + echo ''; + + echo ''.HTMLSELECT_particiones($tbKeys[$k]["numpar"]).''; + echo ''.HTMLSELECT_tipospar($cmd,$tbKeys[$k]["codpar"]).''; + + $sf=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,true); + echo''.HTMLSELECT_sistemasficheros($cmd,$sf).''; + + $tm=tomaTamano($tbKeys[$k]["numpar"],$idordenadores); + echo''; + + echo ''.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).''; + + echo ''.HTMLSELECT_operaciones().''; + echo ''; + } + } + } + /* Botones de añadir y confirmar */ + echo ' '; + echo ''; + echo ' + +          + + + '; +} +/*________________________________________________________________________________________________________ + Crea la etiqueta html de las operaciones +________________________________________________________________________________________________________*/ +function HTMLSELECT_operaciones() +{ + global $TbMsg; + + $SelectHtml=""; + $opciones="1=".$TbMsg[14]."".chr(13); + $opciones.="2=".$TbMsg[15]."".chr(13); + $opciones.="3=".$TbMsg[16].""; + $SelectHtml.=HTMLCTESELECT($opciones,"operaciones","estilodesple",$TbMsg[13],0,100,""); + return($SelectHtml); +} +/*________________________________________________________________________________________________________ + Crea la etiqueta html de los sistemas de ficheros +________________________________________________________________________________________________________*/ +function HTMLSELECT_sistemasficheros($cmd,$idsistemafichero) +{ + return(HTMLSELECT($cmd,0,"sistemasficheros",$idsistemafichero,"idsistemafichero","descripcion",150,"","formulariodatos")); +} +?> diff --git a/admin/WebConsole/asistentes/CrearImagen.php b/admin/WebConsole/asistentes/CrearImagen.php new file mode 100644 index 00000000..00e404b5 --- /dev/null +++ b/admin/WebConsole/asistentes/CrearImagen.php @@ -0,0 +1,212 @@ + + +Administración web de aulas + + + + + +'?> +'?> + + + +'.$TbMsg[0].' 
'; + echo '   + '.$TbMsg[14].': '.$textambito.','.$nombreambito.'  

'; +?> +

+ +
+ + + + + + + + +
           +    +
+
+ + + + +texto="SELECT nombreordenador,ip,mac,idperfilhard,idrepositorio FROM ordenadores WHERE idordenador='".$ido."'"; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) return(false); // Error al abrir recordset + $rs->Primero(); + if (!$rs->EOF){ + $nombreordenador=$rs->campos["nombreordenador"]; + $ip=$rs->campos["ip"]; + $mac=$rs->campos["mac"]; + $idperfilhard=$rs->campos["idperfilhard"]; + $idrepositorio=$rs->campos["idrepositorio"]; + $rs->Cerrar(); + return(true); + } + else + return(false); +} +/*________________________________________________________________________________________________________ + Crea la etiqueta html '; + $SelectHtml.= ' '; + if ($rs->Abrir()){ + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.=''; + $rs->Siguiente(); + } + $rs->Cerrar(); + } + $SelectHtml.= ''; + return($SelectHtml); +} +/*________________________________________________________________________________________________________ + Crea la etiqueta html '; + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.=''; + $rs->Siguiente(); + } + $SelectHtml.= ''; + $rs->Cerrar(); + return($SelectHtml); +} +/*________________________________________________________________________________________________________ + Crea la tabla de configuraciones y perfiles a crear +________________________________________________________________________________________________________*/ +function tablaConfiguraciones($cmd,$idordenador,$idrepositorio) +{ + global $idcentro; + global $TbMsg; + $tablaHtml=""; + $rs=new Recordset; + $cmd->texto="SELECT ordenadores_particiones.numpar,ordenadores_particiones.codpar,ordenadores_particiones.tamano, + ordenadores_particiones.idnombreso,nombresos.nombreso,tipospar.tipopar,tipospar.clonable, + imagenes.nombreca,imagenes.descripcion as imagen,perfilessoft.idperfilsoft, + perfilessoft.descripcion as perfilsoft,sistemasficheros.descripcion as sistemafichero + FROM ordenadores + INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador + LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso + INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar + LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen + LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft + LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero + WHERE ordenadores.idordenador=$idordenador ORDER BY ordenadores_particiones.numpar"; + //echo $cmd->texto; + $rs->Comando=&$cmd; + $rs=new Recordset; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset + $rs->Primero(); + while (!$rs->EOF){ + $swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); + $swc=$rs->campos["idperfilsoft"]>0; // Una partición es clonable si posee un identificador de perfil software + $swccc=$swcc && $swcc; + $tablaHtml.=''.chr(13); + if($swccc){ + $tablaHtml.='campos["codpar"].'">'.chr(13); + $tablaHtml.=' '.$rs->campos["numpar"].' '.chr(13); + $tablaHtml.=' '.$rs->campos["tipopar"].' '.chr(13); + if(empty($rs->campos["nombreso"]) && !empty($rs->campos["idnombreso"])) // Si el identificador del S.O. no es nulo pero no hay descripción + $tablaHtml.=' '.''.$TbMsg[12].''.chr(13); + else + $tablaHtml.=' '.$rs->campos["nombreso"].' '.chr(13); + $tablaHtml.=''.HTMLSELECT_imagenes($cmd,$rs->campos["idperfilsoft"],$rs->campos["numpar"]).''; + $tablaHtml.=''.HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$rs->campos["numpar"]).''; + $tablaHtml.=' '; + } + $tablaHtml.=''.chr(13); + $rs->Siguiente(); + } + $rs->Cerrar(); + return($tablaHtml); +} +?> diff --git a/admin/WebConsole/asistentes/EjecutarScripts.php b/admin/WebConsole/asistentes/EjecutarScripts.php new file mode 100644 index 00000000..b256daf9 --- /dev/null +++ b/admin/WebConsole/asistentes/EjecutarScripts.php @@ -0,0 +1,81 @@ + + +Administración web de aulas + + + + + + '?> + '?> + + +'.$descricomando.' 
'; + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + ?> +
+ + + + +
  
+
+ + + diff --git a/admin/WebConsole/asistentes/IniciarSesion.php b/admin/WebConsole/asistentes/IniciarSesion.php new file mode 100644 index 00000000..09862d4f --- /dev/null +++ b/admin/WebConsole/asistentes/IniciarSesion.php @@ -0,0 +1,154 @@ + + +Administración web de aulas + + + + + +'?> +'?> + + + +'.$TbMsg[5].' 
'; + echo '  '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; +?> +

+ +
+

+ + + + + + + +
      
+
+ + + +texto="SELECT nombreordenador,ip,mac,idperfilhard FROM ordenadores WHERE idordenador='".$idordenador."'"; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) return(false); // Error al abrir recordset + $rs->Primero(); + if (!$rs->EOF){ + $nombreordenador=$rs->campos["nombreordenador"]; + $ip=$rs->campos["ip"]; + $mac=$rs->campos["mac"]; + $idperfilhard=$rs->campos["idperfilhard"]; + $rs->Cerrar(); + return(true); + } + else + return(false); +} +/*________________________________________________________________________________________________________ + Crea la tabla de configuraciones y perfiles a crear +________________________________________________________________________________________________________*/ +function tabla_configuraciones($cmd,$idordenador){ + global $idcentro; + $tablaHtml=""; + $cmd->texto="SELECT ordenadores_particiones.idnombreso,ordenadores_particiones.numpar,ordenadores_particiones.tamano,nombresos.nombreso,tipospar.tipopar, + imagenes.descripcion as imagen,perfilessoft.descripcion as perfilsoft,sistemasficheros.descripcion as sistemafichero + FROM ordenadores + INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador + LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso + INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar + LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen + LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft + LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero + WHERE ordenadores.idordenador=".$idordenador." AND tipospar.clonable=1 ORDER BY ordenadores_particiones.numpar"; + + $rs->Comando=&$cmd; + $rs=new Recordset; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset + $rs->Primero(); + while (!$rs->EOF){ + if(!empty($rs->campos["idnombreso"])){ + $tablaHtml.=''.chr(13); + $tablaHtml.=''.chr(13); + $tablaHtml.=' '.$rs->campos["numpar"].' '.chr(13); + $tablaHtml.=' '.$rs->campos["nombreso"].' '.chr(13); + $tablaHtml.=''.chr(13); + } + $rs->Siguiente(); + } + $rs->Cerrar(); + return($tablaHtml); +} +?> diff --git a/admin/WebConsole/asistentes/InventarioHardware.php b/admin/WebConsole/asistentes/InventarioHardware.php new file mode 100644 index 00000000..64e896d9 --- /dev/null +++ b/admin/WebConsole/asistentes/InventarioHardware.php @@ -0,0 +1,72 @@ + + +Administración web de aulas + + + + + + + '?> + + +'.$TbMsg[5].' 
'; + echo '  '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + //________________________________________________________________________________________________________ + include_once("./includes/formularioacciones.php"); + //________________________________________________________________________________________________________ + //________________________________________________________________________________________________________ + include_once("./includes/opcionesacciones.php"); + //________________________________________________________________________________________________________ +?> + + + diff --git a/admin/WebConsole/asistentes/InventarioSoftware.php b/admin/WebConsole/asistentes/InventarioSoftware.php new file mode 100644 index 00000000..35772002 --- /dev/null +++ b/admin/WebConsole/asistentes/InventarioSoftware.php @@ -0,0 +1,122 @@ + + +Administración web de aulas + + + + + + +'?> + '?> + + +'.$TbMsg[5].' 
'; + echo '  '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; +?> + +

+ +
+ + + + + + + +
      
+ +
+ + + +texto="SELECT ordenadores_particiones.numpar,nombresos.nombreso + FROM ordenadores_particiones + INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar + INNER JOIN nombresos ON ordenadores_particiones.idnombreso=nombresos.idnombreso + WHERE ordenadores_particiones.idordenador=$idordenador + AND tipospar.clonable>0 AND ordenadores_particiones.idnombreso>0 + ORDER BY ordenadores_particiones.numpar"; + $rs->Comando=&$cmd; + $rs=new Recordset; + $rs->Comando=&$cmd; + if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset + $rs->Primero(); + while (!$rs->EOF){ + $tablaHtml.=''.chr(13); + $tablaHtml.=''.chr(13); + $tablaHtml.=' '.$rs->campos["numpar"].' '.chr(13); + $tablaHtml.=' '.$rs->campos["nombreso"].' '.chr(13); + $tablaHtml.=''.chr(13); + $rs->Siguiente(); + } + $rs->Cerrar(); + return($tablaHtml); +} +?> diff --git a/admin/WebConsole/asistentes/Reiniciar.php b/admin/WebConsole/asistentes/Reiniciar.php new file mode 100644 index 00000000..4c95ef52 --- /dev/null +++ b/admin/WebConsole/asistentes/Reiniciar.php @@ -0,0 +1,71 @@ + + +Administración web de aulas + + + + + + '?> + + +'.$TbMsg[5].' 
'; + echo '  '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + //________________________________________________________________________________________________________ + include_once("./includes/formularioacciones.php"); + //________________________________________________________________________________________________________ + //________________________________________________________________________________________________________ + include_once("./includes/opcionesacciones.php"); + //________________________________________________________________________________________________________ +?> + + + diff --git a/admin/WebConsole/asistentes/RestaurarImagen.php b/admin/WebConsole/asistentes/RestaurarImagen.php new file mode 100644 index 00000000..580302d7 --- /dev/null +++ b/admin/WebConsole/asistentes/RestaurarImagen.php @@ -0,0 +1,269 @@ + + +Administración web de aulas + + + + + + + + +'?> +'?> + + +'.$TbMsg[5].'
'; // Cabecera + echo '   + '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; // Subcebecera + echo '

'.$TbMsg[19].'

'; + if($ambito!=$AMBITO_ORDENADORES){ + $cadenaid=""; + $cadenaip=""; + $cadenamac=""; + RecopilaIpesMacs($cmd,$ambito,$idambito); + ?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
> > > 
 
+ +
+
+ + + +'; + echo '  '; + echo ' '.$TbMsg[8].' '; + echo ' '.$TbMsg[24].' '; + echo ' '.$TbMsg[31].' '; + echo ' '.$TbMsg[27].' '; + echo ' '.$TbMsg[22].' '; + echo ' '.$TbMsg[10].' '; + echo ' '.$TbMsg[11].' '; + echo ' '.$TbMsg[9].' '; + echo ''; + + $auxCfg=split("@",$configuraciones); // Crea lista de particiones + for($i=0;$i'.chr(13); + if($swcc){ + $icp=$cc."_".$tbKeys[$k]["numpar"]; // Identificador de la configuración-partición + echo ''.chr(13); + echo ' '.$tbKeys[$k]["numpar"].' '.chr(13); + echo ' '.$tbKeys[$k]["tipopar"].' '.chr(13); + + //echo ' '.$tbKeys[$k]["nombreso"].' '.chr(13); + echo ' '.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + //echo' '.$tbKeys[$k]["sistemafichero"].' '.chr(13); + echo' '.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + //echo' '.formatomiles($tbKeys[$k]["tamano"]).' '.chr(13); + echo' '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + echo ''.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true).''; + echo ''.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,false).''; + //Clonación + $metodos="1=UNICAST".chr(13); + $metodos.="2=MULTICAST".chr(13); + $metodos.="3=TORRENT"; + + $TBmetodos["UNICAST"]=1; + $TBmetodos["MULTICAST"]=2; + $TBmetodos["TORRENT"]=3; + $idxc=$_SESSION["protclonacion"]; + echo ''.HTMLCTESELECT($metodos,"protoclonacion_".$icp,"estilodesple","",$TBmetodos[$idxc],100).''; + } + echo ''.chr(13); + } + } + } + echo ' '; +} +/*________________________________________________________________________________________________________ + Crea la etiqueta html '; + $SelectHtml.= ' '; + + if ($rs->Abrir()){ + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.=''; + $rs->Siguiente(); + } + $rs->Cerrar(); + } + $SelectHtml.= ''; + return($SelectHtml); +} +/*________________________________________________________________________________________________________ + Crea la etiqueta html '; + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.=''; + $rs->Siguiente(); + } + $SelectHtml.= ''; + $rs->Cerrar(); + return($SelectHtml); +} +?> diff --git a/admin/WebConsole/asistentes/gestores/gestor_Comandos.php b/admin/WebConsole/asistentes/gestores/gestor_Comandos.php new file mode 100644 index 00000000..5425ea81 --- /dev/null +++ b/admin/WebConsole/asistentes/gestores/gestor_Comandos.php @@ -0,0 +1,285 @@ + + + + + + + '?> +CreaParametro("@tipoaccion",0,1); +$cmd->CreaParametro("@idtipoaccion",0,1); +$cmd->CreaParametro("@descriaccion","",0); +$cmd->CreaParametro("@idordenador",0,1); +$cmd->CreaParametro("@ip","",0); +$cmd->CreaParametro("@sesion",0,1); +$cmd->CreaParametro("@parametros","",0); +$cmd->CreaParametro("@fechahorareg","",0); +$cmd->CreaParametro("@estado",0,1); +$cmd->CreaParametro("@resultado",0,1); +$cmd->CreaParametro("@idcentro",0,1); +$cmd->CreaParametro("@idprocedimiento",0,1); +$cmd->CreaParametro("@descripcion","",0); +$cmd->CreaParametro("@idcomando",0,1); +$cmd->CreaParametro("@idtarea",0,1); +$cmd->CreaParametro("@ambito",0,1); +$cmd->CreaParametro("@idambito",0,1); +$cmd->CreaParametro("@restrambito","",0); +$cmd->CreaParametro("@ordprocedimiento",0,1); +$cmd->CreaParametro("@ordtarea",0,1); + +if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc) + $cmd->ParamSetValor("@restrambito",$idambito); + $idambito=0; +} +$resul=true; +/*-------------------------------------------------------------------------------------------------------------------- + Switch de ejecución inmediata y de seguimiento +--------------------------------------------------------------------------------------------------------------------*/ +if($sw_ejya=='on' || $sw_ejprg=="on" ){ + $parametros=$funcion.$atributos; + $aplicacion=chr(13)."ido=".$cadenaid.chr(13)."mac=".$cadenamac.chr(13)."iph=".$cadenaip.chr(13); + if($sw_seguimiento==1 || $sw_ejprg=="on"){ // Switch de ejecución con seguimiento o comando programado + $sesion=time(); + $cmd->ParamSetValor("@tipoaccion",$EJECUCION_COMANDO); + $cmd->ParamSetValor("@idtipoaccion",$idcomando); + $cmd->ParamSetValor("@descriaccion",$descricomando); + $cmd->ParamSetValor("@sesion",$sesion); + $cmd->ParamSetValor("@idcomando",$idcomando); + $cmd->ParamSetValor("@parametros",$parametros); + $cmd->ParamSetValor("@fechahorareg",date("y/m/d H:i:s")); + if($sw_ejprg=="on") // Switch de ejecución con programación (se para el comando tarea para lanzarlo posteriormente) + $cmd->ParamSetValor("@estado",$ACCION_DETENIDA); + else + $cmd->ParamSetValor("@estado",$ACCION_INICIADA); + $cmd->ParamSetValor("@resultado",$ACCION_SINRESULTADO); + $cmd->ParamSetValor("@ambito",$ambito); + $cmd->ParamSetValor("@idambito",$idambito); + $cmd->ParamSetValor("@idcentro",$idcentro); + $auxID=split(",",$cadenaid); + $auxIP=split(";",$cadenaip); + + for ($i=0;$iParamSetValor("@idordenador",$auxID[$i]); + $cmd->ParamSetValor("@ip",$auxIP[$i]); + $cmd->texto="INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip, + sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,restrambito,idcentro) + VALUES (@idordenador,@tipoaccion,@idtipoaccion,@descriaccion,@ip, + @sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idcentro)"; + $resul=$cmd->Ejecutar(); + //echo "
".$cmd->texto; + } + $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento + } + if (!$resul){ + echo ''; + } + else{ + if($sw_ejya=='on'){ + // Envio al servidor + $shidra=new SockHidra($servidorhidra,$hidraport); + if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra + $parametros.=$aplicacion; + $parametros.=$acciones; + //echo $parametros; + $resul=$shidra->envia_comando($parametros); + if($resul) + $trama=$shidra->recibe_respuesta(); + if($resul){ + $hlonprm=hexdec(substr($trama,$LONCABECERA,$LONHEXPRM)); + $parametros=substr($trama,$LONCABECERA+$LONHEXPRM,$hlonprm); + $ValorParametros=extrae_parametros($parametros,chr(13),'='); + $resul=$ValorParametros["res"]; + } + $shidra->desconectar(); + } + if (!$resul){ + echo ''; + } + else{ + echo ''.chr(13); + } + } + } +} +/*-------------------------------------------------------------------------------------------------------------------- + Switch de creación o inclusión en procedimiento +--------------------------------------------------------------------------------------------------------------------*/ +if($sw_mkprocedimiento=='on' || $sw_mktarea=='on'){ + $resul=false; + if($idprocedimiento==0 || $sw_mktarea=='on'){ // Nuevo procedimiento o Tarea + if($sw_mktarea=='on' && empty($nombreprocedimiento)){ // Si tarea con inclusión de procedimiento... + if(!empty($nombretarea)) + $nombreprocedimiento="Proc($nombretarea)"; // .. tarea nueva + else + $nombreprocedimiento="Proc($idtarea)"; // .. inclusión en tarea + } + $cmd->ParamSetValor("@descripcion",$nombreprocedimiento); + $cmd->ParamSetValor("@idcentro",$idcentro); + $cmd->texto="INSERT INTO procedimientos(descripcion,idcentro) VALUES (@descripcion,@idcentro)"; + $resul=$cmd->Ejecutar(); + if($resul){ + if($idprocedimiento==0) // Cambia el identificador sólo si es nuevo procedimiento + $idprocedimiento=$cmd->Autonumerico(); + if($sw_mktarea=='on') + $idprocedimientotarea=$cmd->Autonumerico(); // Identificador para la tarea; + } + } + if( $idprocedimiento>0 || $sw_mktarea=='on'){ // inclusión en procedimiento existente + $cmd->ParamSetValor("@idprocedimiento",$idprocedimiento); + $cmd->ParamSetValor("@idcomando",$idcomando); + $cmd->ParamSetValor("@ordprocedimiento",$ordprocedimiento); + $parametros=$funcion.$atributos; + $cmd->ParamSetValor("@parametros",$parametros); + $cmd->texto="INSERT INTO procedimientos_acciones(idprocedimiento,orden,idcomando,parametros) VALUES (@idprocedimiento,@ordprocedimiento,@idcomando,@parametros)"; + $resul=$cmd->Ejecutar(); + if($sw_mktarea=='on' && $idprocedimiento!=$idprocedimientotarea){ // Si es tarea se graba para su procedimiento independiente aunque los parametros sean los mismos + $cmd->ParamSetValor("@idprocedimiento",$idprocedimientotarea); + $cmd->texto="INSERT INTO procedimientos_acciones(idprocedimiento,orden,idcomando,parametros) VALUES (@idprocedimiento,@ordprocedimiento,@idcomando,@parametros)"; + $resul=$cmd->Ejecutar(); + } + } + if (!$resul){ + echo ''; + } + else{ + if($sw_mkprocedimiento=='on'){ + echo ''.chr(13); + } + } +} +/*-------------------------------------------------------------------------------------------------------------------- + Switch de creación o inclusión en tarea +--------------------------------------------------------------------------------------------------------------------*/ +if($sw_mktarea=='on'){ + $resul=false; + if($idtarea==0){ // Nueva tarea + $cmd->ParamSetValor("@descripcion",$nombretarea); + $cmd->ParamSetValor("@idcentro",$idcentro); + $cmd->ParamSetValor("@ambito",$ambito); + $cmd->ParamSetValor("@idambito",$idambito); + $cmd->texto="INSERT INTO tareas(descripcion,idcentro,ambito,idambito,restrambito) + VALUES (@descripcion,@idcentro,@ambito,@idambito,@restrambito)"; + $resul=$cmd->Ejecutar(); + if($resul) + $idtarea=$cmd->Autonumerico(); + } + if($idtarea>0){ // inclusión en tarea existente + $cmd->ParamSetValor("@idtarea",$idtarea); + $cmd->ParamSetValor("@idprocedimiento",$idprocedimientotarea); + $cmd->ParamSetValor("@ordtarea",$ordtarea); + $cmd->texto="INSERT INTO tareas_acciones(idtarea,orden,idprocedimiento) + VALUES (@idtarea,@ordtarea,@idprocedimiento)"; + $resul=$cmd->Ejecutar(); + //echo $cmd->texto; + } + if (!$resul){ + echo ''.chr(13); + } + else{ + echo ''.chr(13); + } +} +/* Programación del comando */ +if ($resul){ + if($sw_ejprg=="on" ){ + echo ''; + } +} +?> + + diff --git a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php new file mode 100644 index 00000000..d3569aa3 --- /dev/null +++ b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php @@ -0,0 +1,337 @@ +texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas where aulas.idaula=' . $idambito ; +} + +if ($ambito == 8) +{ +$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula where gruposordenadores.idgrupo=' . $idambito ; +} + +if ($ambito == 16) +{ +$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ; +} + + $rs=new Recordset; + $rs->Comando=&$cmd; +if ($rs->Abrir()){ + $rs->Primero(); + $SelectHtml.='puerto :
'; + $rs->Siguiente(); + $SelectHtml.='direccion Mcast :
'; + $rs->Siguiente(); + switch ($rs->campos["modomul"]) + { + case 1: + $modomulticast="half-duplex"; + break; + default: + $modomulticast="full-duplex"; + break; + } + $SelectHtml.='modo :
'; + $rs->Siguiente(); + $SelectHtml.='velocidad :
'; + + $rs->Cerrar(); + } + $SelectHtml.='nº Max. clientes :
'; + $SelectHtml.='Tiempo(seg) Max. Espera :
'; + + return($SelectHtml); +} + + +#devuelve los elementos [texto] p2p para un formulario. +#$ambito (aula=4 y ordenadores=16) +function htmlForm_p2p($cmd,$ambito,$idambito) +{ +//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; +if ($ambito == 4) +{ +$cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas where aulas.idaula=' . $idambito ; +} +if ($ambito == 8) +{ +$cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula where gruposordenadores.idgrupo=' . $idambito ; +} + + +if ($ambito == 16) +{ +$cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ; +} + + $rs=new Recordset; + $rs->Comando=&$cmd; +if ($rs->Abrir()){ + $rs->Primero(); + $SelectHtml.='modo :
'; + $rs->Siguiente(); + $SelectHtml.='tiempo de semilla :
'; + $rs->Siguiente(); + $rs->Cerrar(); + } + +return($SelectHtml); +} + + +function htmlOPTION_equipos($cmd,$ambito,$idambito) +{ + +//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; +if ($ambito == 4) +{ +$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaula=' . $idambito ; +} + +if ($ambito == 8) +{ +$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where grupoid=' . $idambito ; +} +if ($ambito == 16) +{ +$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaula=' . $idambito ; +} + + $SelectHtml=""; + $rs=new Recordset; + $rs->Comando=&$cmd; + + if ($rs->Abrir()){ + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.=''; + $rs->Siguiente(); + } + $rs->Cerrar(); + } + //$SelectHtml.= ''; + return($SelectHtml); +} + + + + + + +function htmlOPTION_images($cmd) +{ + $SelectHtml=""; + $cmd->texto="SELECT *,repositorios.ip as iprepositorio FROM imagenes + INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio"; + $rs=new Recordset; + $rs->Comando=&$cmd; + + if ($rs->Abrir()){ + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.=''; + $rs->Siguiente(); + } + $rs->Cerrar(); + } + return($SelectHtml); +} + + + +function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw) +{ + $SelectHtml=""; + $cmd->texto="SELECT *,repositorios.ip as iprepositorio FROM imagenes + INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio"; + if($sw) // Imágenes con el mismo tipo de partición + $cmd->texto.= " WHERE imagenes.codpar=".$codpar; + else + $cmd->texto.= " WHERE imagenes.codpar<>".$codpar; + + $cmd->texto.=" AND imagenes.numpar>0 AND imagenes.codpar>0 AND imagenes.idrepositorio>0"; // La imagene debe existir y estar creada + $rs=new Recordset; + $rs->Comando=&$cmd; + if($sw) $des=1; else $des=0; + $SelectHtml.= ''; + return($SelectHtml); +} + + + +function htmlOPTION_typepartnotcache($cmd) +{ + $SelectHtml=""; + $cmd->texto='SELECT tipopar FROM tipospar WHERE NOT tipopar = "CACHE"'; + $rs=new Recordset; + $rs->Comando=&$cmd; + //$SelectHtml.= ''; + return($SelectHtml); +} + + +function htmlForm_typepart($cmd,$numpar) +{ + $SelectHtml=""; + $cmd->texto='SELECT DISTINCT tipopar FROM tipospar JOIN ordenadores_particiones ON ordenadores_particiones.codpar = tipospar.codpar WHERE numpar = ' .$numpar; + $rs=new Recordset; + $rs->Comando=&$cmd; + + if ($rs->Abrir()){ + $rs->Primero(); + while (!$rs->EOF){ + if ( $rs->campos["tipopar"] == "LINUX" ) + { + $valor="EXT4"; + $valormostrar="LINUX:EXT[2:3:4]"; + } + else + { + $valor=$rs->campos["tipopar"]; + $valormostrar=$rs->campos["tipopar"]; + } + $SelectHtml.=''; +$SelectHtml.=''; +$SelectHtml.=''; +$SelectHtml.=''; +#$SelectHtml.=''; +#$SelectHtml.=''; +$SelectHtml.=''; +$SelectHtml.=''; +$SelectHtml.=''; +$SelectHtml.=''; +$SelectHtml.=''; +$SelectHtml.=''; +$SelectHtml.=''; +$SelectHtml.=''; +return($SelectHtml); +} + + +function htmlForm_sizepart($cmd,$numpar) +{ + $SelectHtml=""; + $cmd->texto='SELECT DISTINCT tamano FROM ordenadores_particiones WHERE numpar = ' .$numpar . ' AND NOT tamano = 0'; + $rs=new Recordset; + $rs->Comando=&$cmd; + + if ($rs->Abrir()){ + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.=''; + $rs->Siguiente(); + } + $rs->Cerrar(); + } + return($SelectHtml); +} + +function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) +{ + global $tbKeys; // Tabla contenedora de claves de configuración + global $conKeys; // Contador de claves de configuración + global $TbMsg; + + $colums=7; + echo ''; + echo ' '.$TbMsg[20].' '; // Número de partición + echo ' '.$TbMsg[24].' '; // Tipo de partición + echo ' '.$TbMsg[27].' '; // Sistema de ficheros + echo ' '.$TbMsg[21].' '; // Sistema Operativo Instalado + echo ' '.$TbMsg[22].' '; // Tamaño + echo ' '.$TbMsg[25].' '; // Imagen instalada + echo ' '.$TbMsg[26].' '; // Perfil software + echo ''; + + $auxCfg=split("@",$configuraciones); // Crea lista de particiones + for($i=0;$i'.chr(13); + echo' '.$tbKeys[$k]["numpar"].' '.chr(13); + echo' '.$tbKeys[$k]["tipopar"].' '.chr(13); + + //echo' '.$tbKeys[$k]["sistemafichero"].' '.chr(13); + echo' '.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + //echo ' '.$tbKeys[$k]["nombreso"].' '.chr(13); + echo ' '.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + //echo' '.formatomiles($tbKeys[$k]["tamano"]).' '.chr(13); + echo' '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + //echo' '.$tbKeys[$k]["imagen"].' '.chr(13); + echo' '.tomaImagenes($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + //echo' '.$tbKeys[$k]["perfilsoft"].' '.chr(13); + echo' '.tomaPerfiles($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); + + echo''.chr(13); + break; + } + } + } + echo ' '; +} + +?> \ No newline at end of file diff --git a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php new file mode 100644 index 00000000..510d3a55 --- /dev/null +++ b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php @@ -0,0 +1,72 @@ + + + + + + Elige equipo MASTER: + +
+ + Elige particion del Master a enviar +
+
+ Elige herramienta de clonacion: + +
+ Elige compresor para la herramienta de clonacion: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php b/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php new file mode 100644 index 00000000..2ee0920c --- /dev/null +++ b/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php @@ -0,0 +1,48 @@ + + + opciones basicas opciones multicast opciones torrent opciones unicast + + + + Elige la particion del disco donde se restaurar la imagen: + + + +
+ Elige la imagen a distribuir: + +
+ +
+ Elige el metodo de transferencia + +
+ + + + + + + + + + + + + + + + + + diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php new file mode 100644 index 00000000..dba79047 --- /dev/null +++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php @@ -0,0 +1,75 @@ + + + + Particion + Tipo + Tamano + + + +
Particion 1 + + +
+ + + +
+ + + +
Particion 2 + +
+ + + +
+ + + + +
Particion 3 + +
+ + + +
+ + + + + +
Particion 4 + + + + \ No newline at end of file diff --git a/admin/WebConsole/asistentes/includes/capturaacciones.php b/admin/WebConsole/asistentes/includes/capturaacciones.php new file mode 100644 index 00000000..e26e38e6 --- /dev/null +++ b/admin/WebConsole/asistentes/includes/capturaacciones.php @@ -0,0 +1,31 @@ + + diff --git a/admin/WebConsole/asistentes/includes/formularioacciones.php b/admin/WebConsole/asistentes/includes/formularioacciones.php new file mode 100644 index 00000000..4f8d401e --- /dev/null +++ b/admin/WebConsole/asistentes/includes/formularioacciones.php @@ -0,0 +1,20 @@ + +
+ + + + + + + + diff --git a/admin/WebConsole/asistentes/includes/opcionesacciones.php b/admin/WebConsole/asistentes/includes/opcionesacciones.php new file mode 100644 index 00000000..36672783 --- /dev/null +++ b/admin/WebConsole/asistentes/includes/opcionesacciones.php @@ -0,0 +1,93 @@ + +

+ + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Ejecutar inmediatamente
  Ejecutar con seguimiento 
  Sin seguimiento 

Programar comando

Guardar como procedimiento
  Guardar como nuevo procedimiento 
  Incluir en un procedimiento existente 
    Orden de ejecución 
 
Guardar como tarea
  Guardar como una tarea nueva 
  Incluir en una tarea existente 
    Orden de ejecución 
+
+ diff --git a/admin/WebConsole/asistentes/jscripts/Apagar.js b/admin/WebConsole/asistentes/jscripts/Apagar.js new file mode 100644 index 00000000..44106958 --- /dev/null +++ b/admin/WebConsole/asistentes/jscripts/Apagar.js @@ -0,0 +1,24 @@ +// ************************************************************************************************************************************************* +// Libreria de scripts de Javascript +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: 2009-2010 +// Fecha Última modificación: Agosto-2010 +// Nombre del fichero: Apagar.js +// Descripción : +// Este fichero implementa las funciones javascript del fichero Apagar.php (Comandos) +// ************************************************************************************************************************************************* + function confirmar(){ + if (comprobar_datos()){ + document.fdatosejecucion.submit(); + } + } +//________________________________________________________________________________________________________ + function cancelar(){ + alert(CTbMsg[0]); + location.href="../nada.php" + } +//________________________________________________________________________________________________________ + function comprobar_datos(){ + return(comprobar_datosejecucion()) +} + diff --git a/admin/WebConsole/asistentes/jscripts/Arrancar.js b/admin/WebConsole/asistentes/jscripts/Arrancar.js new file mode 100644 index 00000000..acd04a7e --- /dev/null +++ b/admin/WebConsole/asistentes/jscripts/Arrancar.js @@ -0,0 +1,24 @@ +// ************************************************************************************************************************************************* +// Libreria de scripts de Javascript +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: 2009-2010 +// Fecha Última modificación: Agosto-2010 +// Nombre del fichero: Arrancar.js +// Descripción : +// Este fichero implementa las funciones javascript del fichero Arrancar.php (Comandos) +// ************************************************************************************************************************************************* + function confirmar(){ + if (comprobar_datos()){ + document.fdatosejecucion.submit(); + } + } +//________________________________________________________________________________________________________ + function cancelar(){ + alert(CTbMsg[0]); + location.href="../nada.php" +} +//________________________________________________________________________________________________________ + function comprobar_datos(){ + return(comprobar_datosejecucion()) +} + diff --git a/admin/WebConsole/asistentes/jscripts/Comando.js b/admin/WebConsole/asistentes/jscripts/Comando.js new file mode 100644 index 00000000..a81f9a92 --- /dev/null +++ b/admin/WebConsole/asistentes/jscripts/Comando.js @@ -0,0 +1,24 @@ +// ************************************************************************************************************************************************* +// Libreria de scripts de Javascript +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: 2009-2010 +// Fecha Última modificación: Agosto-2010 +// Nombre del fichero: Apagar.js +// Descripción : +// Este fichero implementa las funciones javascript del fichero Comando.php (Comandos) +// ************************************************************************************************************************************************* + function confirmar(){ + if (comprobar_datos()){ + document.fdatosejecucion.submit(); + } + } +//________________________________________________________________________________________________________ + function cancelar(){ + alert(CTbMsg[0]); + location.href="../nada.php" + } +//________________________________________________________________________________________________________ + function comprobar_datos(){ + return(comprobar_datosejecucion()) +} + diff --git a/admin/WebConsole/asistentes/jscripts/Configurar.js b/admin/WebConsole/asistentes/jscripts/Configurar.js new file mode 100644 index 00000000..cc7eba86 --- /dev/null +++ b/admin/WebConsole/asistentes/jscripts/Configurar.js @@ -0,0 +1,174 @@ +// ************************************************************************************************************************************************* +// Libreria de scripts de Javascript +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: 2009-2010 +// Fecha Última modificación: Agosto-2010 +// Nombre del fichero: Configurar.js +// Descripción : +// Este fichero implementa las funciones javascript del fichero Configurar.php (Comandos) +// ************************************************************************************************************************************************* + +var atributos; // Variable global + +//________________________________________________________________________________________________________ +// +// Elimina una fila de una tabla de configuraciones perteneciente a las propiedades de una partición +// Parametros: +// icp: Identificador de la configuración-partición +// o: Objeto checkbox que invoca la función +//________________________________________________________________________________________________________ + +function eliminaParticion(icp,o) +{ + var res=confirm(TbMsg[4]); // Pide confirmación + if(!res){ + o.checked=false; + return; + } + var tbCfg = document.getElementById("tabla_conf"); // Recupera objeto + var trCfg = document.getElementById("TR_"+icp); // Recupera de la fila a eliminar + var tbodyObj=tbCfg.firstChild; // Recupera hijo del objeto
+ tbodyObj.removeChild(trCfg); // Elimina nodo completo +} +//________________________________________________________________________________________________________ + +function addParticion(objImg,cc) +{ + var tbCfg = document.getElementById("tabla_conf"); // Recupera objeto
+ var tbodyObj=tbCfg.firstChild; // Recupera hijo del objeto
+ + var trImg=document.getElementById("TRIMG_"+cc); // Recupera de los botones para insertar antes + + var k=objImg.getAttribute('value'); // Toma siguiente identificador de nodo + var icp=cc+"_"+k; // Identificador de la configuración-partición + + /* Crea objeto TR y lo añade al TBODY de la tabla*/ + var nwTR = document.createElement('TR'); + nwTR.setAttribute("id","TR_"+icp); + tbodyObj.insertBefore(nwTR,trImg); // Inserta nodo completo + var patron = document.getElementById("TR_patron"); // Recupera patron + nwTR.innerHTML=patron.innerHTML; + /* Actualiza objeto checkbox nuevo para que actue como los demás */ + var nwCHK = document.getElementById("CHK_patron"); // Recupera reciente chekcbox + var fclbk="eliminaParticion('"+icp+"');"; + nwCHK.setAttribute("onclick",fclbk); + nwCHK.removeAttribute("id"); + /* Incrementa para siguiente identificador de nodo */ + k++; + objImg.setAttribute('value',k); +} +//________________________________________________________________________________________________________ +// +// Confirma un bloque de configuración de particiones +// Parametros: +// idordenadores: Identificadores de los ordenadores a los que se aplicará el comando +// cc: Identificador de la configuración (bloque de particiones) +// Especificaciones: +// Cuando un comando se va a aplicar a un conjunto aleatorio de ordenaores, el código del +// ámbito será cero y la variable idambito contendrá la cadena con los identificadores de +// los oordenadores separados por coma (este dato aparece en esta función como promer parámetro) +//________________________________________________________________________________________________________ + +function Confirmar(cc) +{ + if(comprobarDatos(cc)){ + var RC="@"; + var disco=1; // Siempre disco 1 + atributos+=RC+"dsk="+disco+RC; // Le añade a la variable global el parámetro disco + //alert(atributos) + if(document.fdatosejecucion.ambito.value!=AMBITO_ORDENADORES){ + var tbOrd= document.getElementById("tbOrd_"+cc); // Recupera tabla de ordenadores de la configuración + var idordenadores=tbOrd.getAttribute('value'); // Toma identificadores de los ordenadores + var cadenaid=document.fdatos.cadenaid.value; // Cadena de identificadores de todos los ordenadores del ámbito + if(idordenadores!=cadenaid){ // Si no son iguales es que el ámbito de aplicación es restringido + document.fdatosejecucion.ambito.value=0; // Ambito de aplicación restringido + document.fdatosejecucion.idambito.value=idordenadores; + } + } + document.fdatosejecucion.atributos.value=atributos; + document.fdatosejecucion.submit(); + } +} +//________________________________________________________________________________________________________ +// +// Confirma un bloque de configuración de particiones +// Parametros: +// cc: Identificador de la configuración (bloque de particiones) +//________________________________________________________________________________________________________ + +function comprobarDatos(cc) +{ + // Indices de campos a recuperar + var ipar=1; + var icodpar=2; + var isysfi=3; + var itama=4; + var iope=6; + + var SL="#"; + var TB="$"; + + var tbpar=new Array(); // Para control de particiones duplicadas + atributos="cfg="; // Inicializa variable global de parámetros del comando + + var trCfg = document.getElementById("TR_"+cc); // Recupera primer de la configuración + trCfg=trCfg.nextSibling; // Primera fila de particiones + while(trCfg.id!="TRIMG_"+cc){ + var par=tomavalorDesple(trCfg.childNodes[ipar].childNodes[0]); // Partición + if(par==0){ + alert(TbMsg[1]); + trCfg.childNodes[ipar].childNodes[0].focus(); + return(false); + } + if(tbpar[par]==1){ // Existe ya una partición con ese número + alert(TbMsg[0]); + trCfg.childNodes[ipar].childNodes[0].focus(); + return(false); + } + tbpar[par]=1; + var codpar=tomavalorDesple(trCfg.childNodes[icodpar].childNodes[0]); // Tipo de partición + if(codpar==0){ + alert(TbMsg[2]); + trCfg.childNodes[icodpar].childNodes[0].focus(); + return(false); + } + + var sysfi=tomatextDesple(trCfg.childNodes[isysfi].childNodes[0]); // Sistema de ficheros + + var tama=trCfg.childNodes[itama].childNodes[0].value; // Tamaño de partición + if(tama==0){ + alert(TbMsg[3]); + trCfg.childNodes[itama].childNodes[0].focus(); + return(false); + } + var ope=tomavalorDesple(trCfg.childNodes[iope].childNodes[0]); // Operación a realizar + + trCfg=trCfg.nextSibling; // Primera fila de particiones + /* Compone formato del comando */ + atributos+="par="+par+TB+"cpt="+codpar+TB+"sfi="+sysfi+TB+"tam="+tama+TB+"ope="+ope+SL; + } + return(true); +} +//________________________________________________________________________________________________________ +// +// Devuelve el valor seleccionado de un desplegable cualquiera +//________________________________________________________________________________________________________ + +function tomavalorDesple(desplegable) +{ + var idx=desplegable.selectedIndex; // Indice seleccionado en el desplegable + var val=desplegable.options[idx].value; // Valor seleccionado en el desplegable + return(val); +} +//________________________________________________________________________________________________________ +// +// Devuelve el valor seleccionado de un desplegable cualquiera +//________________________________________________________________________________________________________ + +function tomatextDesple(desplegable) +{ + var idx=desplegable.selectedIndex; // Indice seleccionado en el desplegable + var txt=desplegable.options[idx].text; // Valor seleccionado en el desplegable + return(txt); +} + diff --git a/admin/WebConsole/asistentes/jscripts/CrearImagen.js b/admin/WebConsole/asistentes/jscripts/CrearImagen.js new file mode 100644 index 00000000..ebf37155 --- /dev/null +++ b/admin/WebConsole/asistentes/jscripts/CrearImagen.js @@ -0,0 +1,70 @@ +// ************************************************************************************************************************************************* +// Libreria de scripts de Javascript +// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla +// Fecha Creación: 2009-2010 +// Fecha Última modificación: Agosto-2010 +// Nombre del fichero: CrearImagen.js +// Descripción : +// Este fichero implementa las funciones javascript del fichero CrearImagen.php (Comandos) +// ************************************************************************************************************************************************* + function confirmar() + { + if (!comprobar_datos()) return; + + var RC="@"; + var disco=1; // Siempre disco 1 + var atributos="dsk="+disco+RC; + + var tb_conf=document.getElementById("tabla_conf"); + var ochecks=tb_conf.getElementsByTagName('INPUT') + for(var i=0;i0) despleimagen=despleimagenizda; + if(despleimagendrcha.selectedIndex>0) despleimagen=despleimagendrcha; + var imgcanrepo=despleimagen.value.split("_"); + atributos+="idi="+imgcanrepo[0]+RC; // Identificador de la imagen + atributos+="nci="+imgcanrepo[1]+RC; // Nombre canónico + atributos+="ipr="+imgcanrepo[2]+RC; // Ip del repositorio donde está alojada + atributos+="ifs="+imgcanrepo[3]+RC; // Identificador del perfil soft contenido en la imagen + atributos+="ptc="+protoclonacion.value+RC; // Identificador del protocolo de clonación + + var cc=ochecks[i].getAttribute('idcfg'); // Toma identificador del bloque de configuración + + if(document.fdatosejecucion.ambito.value!=AMBITO_ORDENADORES){ + var tbOrd=document.getElementById("tbOrd_"+cc); + var idordenadores=tbOrd.getAttribute('value'); // Toma identificadores de los ordenadores + var cadenaid=document.fdatos.cadenaid.value; // Cadena de identificadores de todos los ordenadores del ámbito + if(idordenadores!=cadenaid){ + document.fdatosejecucion.ambito.value=0; // Ambito de aplicación restringido + document.fdatosejecucion.idambito.value=idordenadores; + } + } + document.fdatosejecucion.atributos.value=atributos; + document.fdatosejecucion.submit(); + break; + } + } + } + } +//________________________________________________________________________________________________________ + function cancelar(){ + alert(CTbMsg[0]); + location.href="../nada.php" + } +//________________________________________________________________________________________________________ + function comprobar_datos() +{ + tb_conf=document.getElementById("tabla_conf"); + var ochecks=tb_conf.getElementsByTagName('INPUT') + var op=0 + for(var i=0;iregisterFunction("ListarParticionesXip"); +?> \ No newline at end of file diff --git a/admin/WebConsole/asistentes/xajax.server.php b/admin/WebConsole/asistentes/xajax.server.php new file mode 100644 index 00000000..5d378a7b --- /dev/null +++ b/admin/WebConsole/asistentes/xajax.server.php @@ -0,0 +1,91 @@ +alert("Este equipo tiene ".$cantRegistros." particiones clonables."); + //ISO-8859-1 significa que los caracteres latinos como la ñ y los acentos seran tomados en cuenta + //$sql=sprintf('select xxxxxx where id=%d',$ip); + //$sql='SELECT ordenadores_particiones.numpar,nombresos.nombreso FROM ordenadores_particiones INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar INNER JOIN nombresos ON ordenadores_particiones.idnombreso=nombresos.idnombreso WHERE ordenadores_particiones.idordenador=' .$ip . ' AND tipospar.clonable>0 AND ordenadores_particiones.idnombreso>0 ORDER BY ordenadores_particiones.numpar'; + + $sql='SELECT ordenadores_particiones.numpar,nombresos.nombreso + FROM ordenadores_particiones INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar + INNER JOIN nombresos ON ordenadores_particiones.idnombreso=nombresos.idnombreso + INNER JOIN ordenadores ON ordenadores_particiones.idordenador=ordenadores.idordenador + WHERE ordenadores.ip="' .$ip . '" + AND tipospar.clonable>0 + AND ordenadores_particiones.idnombreso>0 + ORDER BY ordenadores_particiones.numpar'; + //$objResponse->alert("Consulta ".$sql." ."); + + + $element=" "; + //$rs=new Recordset; + //$rs->Comando=&$cmd; + + + + + + //$element=''; + //} + + + $rsParticiones=mysql_query($sql); +$cantRegistros=mysql_num_rows($rsParticiones); + + $element=''; //variable donde guardaremos el elemento del formulario que luego se mostrara mediante AJAX + // + if($cantRegistros>0){ // Si existen registros entonces armamos la cabecera de los elementos del formulario + $element=''; + } + //asignando el contenido de la varabiale $element al div que esta en la paquina inicial + //innerHTML reemplaza el contenido HTML por otro + $objResponse->assign("divListado","innerHTML",$element); + //mostramos un alert +//$objResponse->alert("Este equipo tiene ".$cantRegistros." particiones clonables."); + return $objResponse; //retornamos la respuesta AJAX +} + +$xajax->processRequest(); //procesando cualquier petición AJAX +?> \ No newline at end of file -- cgit v1.2.3-18-g5258 From b9a65005df5128bf19378000b9103a9cc0d7a746 Mon Sep 17 00:00:00 2001 From: adv Date: Sun, 27 Feb 2011 18:19:19 +0000 Subject: branch version 1.0 modulos asistentes git-svn-id: https://opengnsys.es/svn/branches/version1.0@1509 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Database/alterbd.sql | 18 ++---------------- admin/Database/ogAdmBD.sql | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/admin/Database/alterbd.sql b/admin/Database/alterbd.sql index 52d3b45d..7bfeacd2 100644 --- a/admin/Database/alterbd.sql +++ b/admin/Database/alterbd.sql @@ -81,7 +81,7 @@ INSERT INTO `menuboot_itemboot` (`labelmenu`, `labelitem`, `default`) VALUES -- --- Estructura de tabla para la tabla `comandos` +-- Estructura de tabla para la tabla `asistentes` -- CREATE TABLE IF NOT EXISTS `asistentes` ( @@ -100,21 +100,7 @@ CREATE TABLE IF NOT EXISTS `asistentes` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ; - -INSERT INTO `ogAdmBD`.`asistentes` ( -`idcomando` , -`descripcion` , -`pagina` , -`gestor` , -`funcion` , -`urlimg` , -`aplicambito` , -`visuparametros` , -`parametros` , -`comentarios` , -`activo` -) -VALUES +INSERT INTO `asistentes` (`idcomando`, `descripcion`, `pagina`, `gestor`, `funcion`, `urlimg`, `aplicambito`, `visuparametros`, `parametros`, `comentarios`, `activo`) VALUES ('1', 'Asistente Clonacion Particiones Remotas', '../asistentes/AsistenteCloneRemotePartition.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), ('2', 'Asistente "Deploy" de Imagenes', '../asistentes/AsistenteDeployImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), ('3', 'Asistente "UpdateCache" con Imagenes', '../asistentes/AsistenteUpdateCache.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql index 315fe0ea..3c2840f0 100644 --- a/admin/Database/ogAdmBD.sql +++ b/admin/Database/ogAdmBD.sql @@ -110,6 +110,35 @@ CREATE TABLE IF NOT EXISTS `aulas` ( +-- +-- Estructura de tabla para la tabla `asistentes` +-- + +CREATE TABLE IF NOT EXISTS `asistentes` ( + `idcomando` int(11) NOT NULL AUTO_INCREMENT, + `descripcion` varchar(250) NOT NULL DEFAULT '', + `pagina` varchar(256) NOT NULL, + `gestor` varchar(256) NOT NULL, + `funcion` varchar(64) NOT NULL, + `urlimg` varchar(250) DEFAULT NULL, + `aplicambito` tinyint(4) DEFAULT NULL, + `visuparametros` varchar(250) DEFAULT NULL, + `parametros` varchar(250) DEFAULT NULL, + `comentarios` text, + `activo` tinyint(1) NOT NULL, + PRIMARY KEY (`idcomando`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ; + + +INSERT INTO `asistentes` (`idcomando`, `descripcion`, `pagina`, `gestor`, `funcion`, `urlimg`, `aplicambito`, `visuparametros`, `parametros`, `comentarios`, `activo`) VALUES +('1', 'Asistente Clonacion Particiones Remotas', '../asistentes/AsistenteCloneRemotePartition.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), +('2', 'Asistente "Deploy" de Imagenes', '../asistentes/AsistenteDeployImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), +('3', 'Asistente "UpdateCache" con Imagenes', '../asistentes/AsistenteUpdateCache.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), +('4', 'Asistente Restauracion de Imagenes', '../asistentes/AsistenteRestoreImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), +('5', 'Asistente Particionado', '../asistentes/AsistenteParticionado.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'); + + + -- -------------------------------------------------------- -- @@ -188,12 +217,7 @@ INSERT INTO `comandos` (`idcomando`, `descripcion`, `pagina`, `gestor`, `funcion (7, 'Inventario Software', '../comandos/InventarioSoftware.php', '../comandos/gestores/gestor_Comandos.php', 'InventarioSoftware', '', 16, 'par', 'nfn;iph;mac;par', '', 1), (8, 'Ejecutar Script', '../comandos/EjecutarScripts.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1), (9, 'Iniciar Sesion', '../comandos/IniciarSesion.php', '../comandos/gestores/gestor_Comandos.php', 'IniciarSesion', '', 31, 'par', 'nfn;iph;par', '', 1), -(10, 'Particionar y Formatear', '../comandos/Configurar.php', '../comandos/gestores/gestor_Comandos.php', 'Configurar', '', 28, 'dsk;cfg;', 'nfn;iph;mac;dsk;cfg;par;cpt;sfi;tam;ope', '', 1), -(11, 'Asistente Clonacion Particiones Remotas', '../comandos/AsistenteCloneRemotePartition.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), -(12, 'Asistente "Deploy" de Imagenes', '../comandos/AsistenteDeployImage.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), -(13, 'Asistente "UpdateCache" con Imagenes', '../comandos/AsistenteUpdateCache.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), -(14, 'Asistente Restauracion de Imagenes', '../comandos/AsistenteRestoreImage.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), -(15, 'Asistente Particionado', '../comandos/AsistenteParticionado.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'); +(10, 'Particionar y Formatear', '../comandos/Configurar.php', '../comandos/gestores/gestor_Comandos.php', 'Configurar', '', 28, 'dsk;cfg;', 'nfn;iph;mac;dsk;cfg;par;cpt;sfi;tam;ope', '', 1); -- cgit v1.2.3-18-g5258 From 8b2dce819c76c8c72c77b1c964e386f914fd6290 Mon Sep 17 00:00:00 2001 From: adv Date: Mon, 28 Feb 2011 17:44:08 +0000 Subject: branch version 1.0: independizar el tiempo de inicio de los clientes OG, del número de clientes simultaneos. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1510 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/gestores/gestor_pxe_grub4dos.php | 184 ++++++++++++++++++++++ client/nfsexport/scripts/ogUpdateBootCache.sh | 7 + 2 files changed, 191 insertions(+) create mode 100755 admin/WebConsole/gestores/gestor_pxe_grub4dos.php create mode 100755 client/nfsexport/scripts/ogUpdateBootCache.sh diff --git a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php new file mode 100755 index 00000000..cf062095 --- /dev/null +++ b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php @@ -0,0 +1,184 @@ +"; +echo ""; +echo ""; +echo " gestion de equipos "; +echo ""; +echo ""; +echo ""; + + + +#echo('litambito con valor: '. $_GET['litambito']); +#echo ('idambito con valor: ' . $_GET['idaula']); +#echo ('nombreambito con valor: ' . $_GET['nombreambito']); + +$lista = explode(";",$_POST['listOfItems']); +foreach ($lista as $sublista) { + $elementos = explode("|",$sublista); + $hostname=$elementos[1]; + $optboot=$elementos[0]; + ogBootServer($cmd,$optboot,$hostname); +} +echo " "; +echo " "; + +function ogBootServer($cmd,$optboot,$hostname) +{ +global $cmd; +global $hostname; +global $optboot; +$cmd->CreaParametro("@optboot",$optboot,0); +$cmd->CreaParametro("@hostname",$hostname,0); +$cmd->texto="update ordenadores set arranque=@optboot where nombreordenador=@hostname"; +$cmd->Ejecutar(); + +$cmd->texto="SELECT ordenadores.ip AS ip, ordenadores.mac AS mac, + ordenadores.netiface AS netiface, aulas.netmask AS netmask, aulas.router AS router, + repositorios.ip AS iprepo FROM ordenadores + join aulas on ordenadores.idaula=aulas.idaula + join repositorios on ordenadores.idrepositorio=repositorios.idrepositorio + where ordenadores.nombreordenador='". $hostname ."'"; +$rs=new Recordset; +$rs->Comando=&$cmd; +if (!$rs->Abrir()) echo "error"; +$rs->Primero(); + $mac=$rs->campos["mac"]; + $netiface=$rs->campos["netiface"]; + $ip=$rs->campos["ip"]; + $router=$rs->campos["router"]; + $netmask=$rs->campos["netmask"]; + $repo=$rs->campos["iprepo"]; + $infohost=" IP=" + . $ip . ":" + . $repo .":" + . $router . ":" + . $netmask .":" + . $hostname .":" + . $netiface . ":none repo=" + . $repo; +$rs->Cerrar(); + +###################obtenemos las variables de red del aula. + + #02.1 obtenemos nombre fichero mac + $mac= substr($mac,0,2) . ":" . substr($mac,2,2) . ":" . substr($mac,4,2) . ":" . substr($mac,6,2) . ":" . substr($mac,8,2) . ":" . substr($mac,10,2); + $macfile="01-" . str_replace(":","-",strtolower($mac)); + $nombre_archivo="/var/lib/tftpboot/pxelinux.cfg/" . $macfile; + + +########## Escribimos el fichero mac +if (!$gestion=fopen($nombre_archivo, 'w+')) +{ + echo "No se puede abrir el archivo ($nombre_archivo)"; + return; +} +# cuales son los parametros del menu +fwrite($gestion, "DEFAULT syslinux/vesamenu.c32 \n"); +fwrite($gestion, "MENU TITLE Aplicacion OpenGnsys \n"); + +$cmd->texto="SELECT itemboot.label, itemboot.kernel, + itemboot.append, menuboot.timeout, menuboot.prompt, + menuboot.description, menuboot_itemboot.default + From itemboot,menuboot_itemboot,menuboot + WHERE menuboot_itemboot.labelmenu=menuboot.label + AND menuboot_itemboot.labelitem=itemboot.label + AND menuboot.label='" . $optboot . "'"; + +$rs->Comando=&$cmd; +if (!$rs->Abrir()) echo "error"; +$rs->Primero(); +while (!$rs->EOF) +{ + fwrite($gestion, " \n"); + fwrite($gestion, "LABEL " . $rs->campos['label'] . " \n"); + fwrite($gestion, "MENU LABEL " . $rs->campos['label'] . " \n"); + if ( $rs->campos["default"] == true) + { + fwrite($gestion, "MENU DEFAULT \n"); + } + + + # set netmask cird para ogclient + $isnfsroot=substr_count($rs->campos["append"] , "boot=oginit"); + if ($isnfsroot > 0) + { + $netmask=$netmask; + } + else + { + $netmask=netmask2cidr($netmask); + } + + $iseac=substr_count($rs->campos["append"] , "boot=oginit"); + $isinitrd=substr_count($rs->campos["append"] , "initrd.gz"); + + if ($iseac > 0) + { + $kernel=$rs->campos["kernel"]; + $append=$rs->campos["append"]; + fwrite($gestion,"KERNEL grub.exe \n"); + fwrite($gestion,"APPEND keeppxe --config-file='pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /boot/ogvmlinuz; kernel /boot/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on " . $infohost . " ogprotocol=smb og2nd=sqfs ; initrd /boot/oginitrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz ro boot=oginit vga=788 irqpoll acpi=on " . $infohost . " ogprotocol=smb og2nd=sqfs; initrd (pd)/ogclient/oginitrd.img; boot' \n"); + } + + elseif ($isinitrd > 0) + { + fwrite($gestion, $rs->campos["kernel"] . " \n"); + $append=$rs->campos["append"]; + fwrite($gestion, $append . " repo=" . $repo . " \n"); + } + else + { + fwrite($gestion, $rs->campos["kernel"] . " \n"); + fwrite($gestion, $rs->campos["append"] . " \n"); + } + + $prompt=$rs->campos["prompt"]; + $timeout=$rs->campos["timeout"]; + + $rs->Siguiente(); +} +$rs->Cerrar(); + + + + fwrite($gestion, " \n"); + fwrite($gestion, "PROMPT " . $prompt ." \n"); + fwrite($gestion, "TIMEOUT " . $timeout . " \n"); + fwrite($gestion, " \n"); + fclose($gestion); + exec("chown www-data:www-data /var/lib/tftpboot/pxelinux.cfg/". $macfile); + exec("chmod 777 /var/lib/tftpboot/pxelinux.cfg/". $macfile); + + + + +} + +function netmask2cidr($netmask) { + $cidr = 0; + foreach (explode('.', $netmask) as $number) { + for (;$number> 0; $number = ($number <<1) % 256) { + $cidr++; + } + } + return $cidr; + } + +?> \ No newline at end of file diff --git a/client/nfsexport/scripts/ogUpdateBootCache.sh b/client/nfsexport/scripts/ogUpdateBootCache.sh new file mode 100755 index 00000000..af2267a2 --- /dev/null +++ b/client/nfsexport/scripts/ogUpdateBootCache.sh @@ -0,0 +1,7 @@ +#!/bin/bash +OGBTFTP="/opt/og2fs/tftpboot/ogclient/" +ogMountCache || exit 1 +echo $OGCAC +[ -d $OGCAC/boot ] || mkdir -p $OGCAC/boot +[ -f ${OGCAC}/boot/ogvmlinuz ] || cp ${OGBTFTP}ogvmlinuz ${OGCAC}/boot/ogvmlinuz +[ -f ${OGCAC}/boot/oginitrd.img ] || cp ${OGBTFTP}oginitrd.img ${OGCAC}/boot/oginitrd.img \ No newline at end of file -- cgit v1.2.3-18-g5258 From e69c224174af9c15143982917c9bd28b8fd327b1 Mon Sep 17 00:00:00 2001 From: adv Date: Mon, 28 Feb 2011 17:45:01 +0000 Subject: branch engine 1.0 aumentando el rendiento de creación de imagenes un 30% respecto a la version 0.9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1511 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/nfsexport/scripts/createImage | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/nfsexport/scripts/createImage b/client/nfsexport/scripts/createImage index 5d347527..0fea453a 100755 --- a/client/nfsexport/scripts/createImage +++ b/client/nfsexport/scripts/createImage @@ -47,8 +47,9 @@ echo "[25]: Calculando la reduccion del sistema de archivos DISK:$1 PARTITION:$2 ogReduceFs $1 $2 || exit 1 # Crear la imagen. -echo "[30] Crear imagen." -ogCreateImage $1 "$2" $3 $4 || exit $? +echo "[30] Crear imagen. partclone lzop 30% mas rapido que con gzip" +ogCreateImage $1 "$2" $3 $4 partclone lzop || exit $? +#ogCreateImage $1 "$2" $3 $4 || exit $? echo "[90] Extender sistema de archivos." ogExtendFs $1 $2 -- cgit v1.2.3-18-g5258 From f6ce34f644e6c9f239475a2fb065ef0cdb38cfe0 Mon Sep 17 00:00:00 2001 From: adv Date: Mon, 28 Feb 2011 17:46:30 +0000 Subject: branch engine 1.0: gestor de arranque remoto gestiona oginitrd.img y ogvmlinuz git-svn-id: https://opengnsys.es/svn/branches/version1.0@1512 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Database/alterbd.sql | 4 ++-- admin/Database/ogAdmBD.sql | 4 ++-- installer/opengnsys_installer.sh | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/admin/Database/alterbd.sql b/admin/Database/alterbd.sql index 7bfeacd2..2beb15bd 100644 --- a/admin/Database/alterbd.sql +++ b/admin/Database/alterbd.sql @@ -37,8 +37,8 @@ INSERT INTO `itemboot` (`label`, `kernel`, `append`) VALUES ('1_localboot', 'LOCALBOOT 0', ' '), ('11', 'KERNEL syslinux/chain.c32', 'APPEND hd0 1'), ('12', 'KERNEL syslinux/chain.c32', 'APPEND hd0 2'), -('ogClientUser', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false'), -('ogClientAdmin', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true'), +('ogClientUser', 'KERNEL ogclient/ogvmlinuz', 'APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false'), +('ogClientAdmin', 'KERNEL ogclient/ogvmlinuz', 'APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true'), ('ogInitrdUser', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=user '), ('ogInitrdAdmin', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin '); diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql index 3c2840f0..460e6d66 100644 --- a/admin/Database/ogAdmBD.sql +++ b/admin/Database/ogAdmBD.sql @@ -975,8 +975,8 @@ INSERT INTO `itemboot` (`label`, `kernel`, `append`) VALUES ('1_localboot', 'LOCALBOOT 0', ' '), ('11', 'KERNEL syslinux/chain.c32', 'APPEND hd0 1'), ('12', 'KERNEL syslinux/chain.c32', 'APPEND hd0 2'), -('ogClientUser', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false'), -('ogClientAdmin', 'KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae', 'APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true'), +('ogClientUser', 'KERNEL ogclient/ogvmlinuz', 'APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false'), +('ogClientAdmin', 'KERNEL ogclient/ogvmlinuz', 'APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true'), ('ogInitrdUser', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=user '), ('ogInitrdAdmin', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin '); diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index b4244243..2b160f4a 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -1310,6 +1310,8 @@ wget http://www.opengnsys.es/downloads/21 -O /tmp/ogpart2.tgz wget http://www.opengnsys.es/downloads/22 -O /tmp/ogpart3.tgz cat /tmp/ogpart1.tgz /tmp/ogpart2.tgz /tmp/ogpart3.tgz > /tmp/ogclient.tgz tar xzvf /tmp/ogclient.tgz -C /opt/opengnsys/tftpboot/ +cp -v /var/lib/tftpboot/ogclient/vmlinuz-2.6.32-21-generic-pae /var/lib/tftpboot/ogclient/ogvmlinuz +cp -v /var/lib/tftpboot/ogclient/initrd.img-2.6.32-21-generic-pae /var/lib/tftpboot/ogclient/oginitrd.img -- cgit v1.2.3-18-g5258 From 813f617ae2c1fad83befb13bccf8a05213a81ee6 Mon Sep 17 00:00:00 2001 From: ramon Date: Wed, 2 Mar 2011 11:42:59 +0000 Subject: Instalador versión 1.0: * Adaptar estructura de directorios del servidor. * Adaptar funciones del instalador. * Reducir el espacio necesario para descarga de ficheros. * Algunas correcciones generales. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1523 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/xajax_0.5_standard.zip | Bin 241376 -> 0 bytes admin/xajax_0.5_standard.zip | Bin 0 -> 241376 bytes installer/opengnsys_installer.sh | 167 ++++++++++++++------------------ server/DHCP/dhcpd.conf | 22 ----- server/NFS/exports | 3 - server/PXE/pxelinux.0 | Bin 14776 -> 0 bytes server/PXE/pxelinux.cfg/adminmode | 5 - server/PXE/pxelinux.cfg/default | 11 --- server/etc/dhcpd.conf.tmpl | 22 +++++ server/etc/exports.tmpl | 3 + server/etc/smb-og.conf.tmpl | 29 ++++++ server/tftpboot/pxelinux.0 | Bin 0 -> 14776 bytes server/tftpboot/pxelinux.cfg/adminmode | 5 + server/tftpboot/pxelinux.cfg/default | 11 +++ 14 files changed, 142 insertions(+), 136 deletions(-) delete mode 100644 admin/WebConsole/xajax_0.5_standard.zip create mode 100644 admin/xajax_0.5_standard.zip delete mode 100644 server/DHCP/dhcpd.conf delete mode 100644 server/NFS/exports delete mode 100644 server/PXE/pxelinux.0 delete mode 100644 server/PXE/pxelinux.cfg/adminmode delete mode 100644 server/PXE/pxelinux.cfg/default create mode 100644 server/etc/dhcpd.conf.tmpl create mode 100644 server/etc/exports.tmpl create mode 100644 server/etc/smb-og.conf.tmpl create mode 100644 server/tftpboot/pxelinux.0 create mode 100644 server/tftpboot/pxelinux.cfg/adminmode create mode 100644 server/tftpboot/pxelinux.cfg/default diff --git a/admin/WebConsole/xajax_0.5_standard.zip b/admin/WebConsole/xajax_0.5_standard.zip deleted file mode 100644 index d247c280..00000000 Binary files a/admin/WebConsole/xajax_0.5_standard.zip and /dev/null differ diff --git a/admin/xajax_0.5_standard.zip b/admin/xajax_0.5_standard.zip new file mode 100644 index 00000000..d247c280 Binary files /dev/null and b/admin/xajax_0.5_standard.zip differ diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 2b160f4a..6ab371d0 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -168,10 +168,10 @@ function checkDependencies() function installDependencies() { if [ $# -ne 1 ]; then - errorAndLog "installDependencies(): invalid number of parameters" + errorAndLog "${FUNCNAME}(): invalid number of parameters" exit 1 fi - echoAndLog "installDependencies(): installing uncompleted dependencies" + echoAndLog "${FUNCNAME}(): installing uncompleted dependencies" # copia local del array del parametro 1 local deps @@ -184,22 +184,22 @@ function installDependencies() done if [ -z "${string_deps}" ]; then - errorAndLog "installDependencies(): array of dependeces is empty" + errorAndLog "${FUNCNAME}(): array of dependeces is empty" exit 1 fi OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND export DEBIAN_FRONTEND=noninteractive - echoAndLog "installDependencies(): now ${string_deps} will be installed" + echoAndLog "${FUNCNAME}(): now ${string_deps} will be installed" apt-get -y install --force-yes ${string_deps} if [ $? -ne 0 ]; then - errorAndLog "installDependencies(): error installing dependencies" + errorAndLog "${FUNCNAME}(): error installing dependencies" return 1 fi DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND - echoAndLog "installDependencies(): dependencies installed" + echoAndLog "${FUNCNAME}(): dependencies installed" } # Hace un backup del fichero pasado por parámetro @@ -240,18 +240,18 @@ function backupFile() function mysqlSetRootPassword() { if [ $# -ne 1 ]; then - errorAndLog "mysqlSetRootPassword(): invalid number of parameters" + errorAndLog "${FUNCNAME}(): invalid number of parameters" exit 1 fi local root_mysql=$1 - echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server" + echoAndLog "${FUNCNAME}(): setting root password in MySQL server" /usr/bin/mysqladmin -u root password ${root_mysql} if [ $? -ne 0 ]; then - errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server" + errorAndLog "${FUNCNAME}(): error while setting root password in MySQL server" return 1 fi - echoAndLog "mysqlSetRootPassword(): root password saved!" + echoAndLog "${FUNCNAME}(): root password saved!" return 0 } @@ -675,54 +675,31 @@ function nfsAddExport() ######################################################################## -## Configuracion servicio SMB +## Configuracion servicio Samba ######################################################################## function smbConfigure() { - echoAndLog "${FUNCNAME}(): Config smb server." + echoAndLog "${FUNCNAME}(): Configure Samba server." backupFile /etc/samba/smb.conf -cat >> /etc/samba/smb.conf < /etc/smb/smb-og.conf + # Configurar y recargar Samba" + perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/; s/^\; *include \=.*$/ include \= \/etc\/smb\/smb-og.conf/" /etc/samba/smb.conf + /etc/init.d/smbd restart if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while configure smb" + errorAndLog "${FUNCNAME}(): error while configure Samba" return 1 fi + # Crear usuario de acceso a los recursos y establecer permisos. + useradd $OPENGNSYS_CLIENT_USER 2>/dev/null + echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | smbpasswd -a -s $OPENGNSYS_CLIENT_USER + chmod -R 775 $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg} + chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg} - echoAndLog "${FUNCNAME}(): Added SAMBA configuration to file \"/etc/samba/smb.conf\"." + echoAndLog "${FUNCNAME}(): Added Samba configuration." return 0 } @@ -743,7 +720,7 @@ function dhcpConfigure() -e "s/NETBROAD/$NETBROAD/g" \ -e "s/ROUTERIP/$ROUTERIP/g" \ -e "s/DNSIP/$DNSIP/g" \ - $WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf + $WORKDIR/opengnsys/server/etc/dhcpd.conf.tmpl > /etc/dhcp3/dhcpd.conf if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while configuring dhcp server" return 1 @@ -769,6 +746,8 @@ function installWebFiles() exit 1 fi find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null + # Descomprimir XAJAX. + unzip $WORKDIR/opengnsys/admin/WebConsole/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax # Cambiar permisos para ficheros especiales. chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/iconos echoAndLog "${FUNCNAME}(): Web files installed successfully." @@ -887,7 +866,7 @@ function openGnsysCopyServerFiles () { client/boot/udeblist-karmic.conf \ client/boot/udeblist-lucid.conf \ client/boot/udeblist-maverick.conf \ - server/PXE/pxelinux.cfg \ + server/tftpboot/pxelinux.cfg \ server/bin \ repoman/bin \ doc ) @@ -999,7 +978,8 @@ function InterfaceAdm () ### Funciones instalacion cliente opengnsys #################################################################### -function openGnsysClientCreate() +# Crear antiguo cliente initrd para OpenGnSys 0.10 +function openGnsysOldClientCreate() { local OSDISTRIB OSCODENAME @@ -1048,15 +1028,43 @@ function openGnsysClientCreate() fi if [ $hayErrores -eq 0 ]; then - echoAndLog "${FUNCNAME}(): Client generation success." + echoAndLog "${FUNCNAME}(): Old client generation success." else - errorAndLog "${FUNCNAME}(): Client generation with errors" + errorAndLog "${FUNCNAME}(): Old client generation with errors" fi return $hayErrores } +# Crear nuevo cliente OpenGnSys 1.0 +function openGnsysClientCreate() +{ + local DOWNLOADURL=http://www.opengnsys.es/downloads + local tmpfile=/tmp/ogclient.tgz + + echoAndLog "${FUNCNAME}(): Loading Client" + # Descargar y descomprimir cliente ogclient + wget $DOWNLOADURL/20 -O $tmpfile + wget $DOWNLOADURL/21 -O - >> $tmpfile + wget $DOWNLOADURL/22 -O - >> $tmpfile + if [ ! -s $tmpfile ]; then + errorAndLog "${FUNCNAME}(): Error loading client files" + return 1 + fi + echoAndLog "${FUNCNAME}(): Extranting Client files" + tar xzvf $tmpfile -C $INSTALL_TARGET/tftpboot + rm -f $tmpfile + # Usar la versión más reciente del Kernel y del Initrd para el cliente. + ln $(ls $INSTALL_TARGET/tftpboot/ogclient/vmlinuz-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz + ln $(ls $INSTALL_TARGET/tftpboot/ogclient/initrd.img-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img + # Establecer los permisos. + chmod -R 755 $INSTALL_TARGET/tftpboot/ogclient + chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/tftpboot/ogclient + echoAndLog "${FUNCNAME}(): Client generation success" +} + + # Configuración básica de servicios de OpenGnSys function openGnsysConfigure() { @@ -1089,16 +1097,17 @@ function openGnsysConfigure() ####### Función de resumen informativo de la instalación ##################################################################### -function installationSummary(){ +function installationSummary() +{ echo echoAndLog "OpenGnSys Installation Summary" echo "==============================" echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)" echoAndLog "Installation directory: $INSTALL_TARGET" echoAndLog "Repository directory: $INSTALL_TARGET/images" - echoAndLog "TFTP configuracion directory: /var/lib/tftpboot" echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf" - echoAndLog "NFS configuracion file: /etc/exports" + echoAndLog "TFTP configuracion directory: /var/lib/tftpboot" + echoAndLog "Samba configuracion directory: /etc/samba" echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER" echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD" @@ -1196,8 +1205,6 @@ if [ $? -ne 0 ]; then exit 1 fi - - # Configuración ejemplo DHCP dhcpConfigure if [ $? -ne 0 ]; then @@ -1284,51 +1291,21 @@ fi popd -# Creando la estructura del cliente +# Crear la estructura del antiguo cliente initrd de OpenGnSys 0.10 +openGnsysOldClientCreate +if [ $? -ne 0 ]; then + errorAndLog "Warning: cannot create old initrd client" +fi +# Crear la estructura del cliente de OpenGnSys 1.0 openGnsysClientCreate if [ $? -ne 0 ]; then - errorAndLog "Error creating clients" + errorAndLog "Error creating client" exit 1 fi # Configuración de servicios de OpenGnSys openGnsysConfigure - -# integrando xajax a la consola web -unzip /opt/opengnsys/www/xajax_0.5_standard.zip -d /opt/opengnsys/www/xajax - -#anadiendo usuario opengnsys al sistema sin login -useradd opengnsys - -#anadiendo usuario opengnsys a samba" -echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | smbpasswd -a -s $OPENGNSYS_CLIENT_USER - -#descargando cliente ogclient -wget http://www.opengnsys.es/downloads/20 -O /tmp/ogpart1.tgz -wget http://www.opengnsys.es/downloads/21 -O /tmp/ogpart2.tgz -wget http://www.opengnsys.es/downloads/22 -O /tmp/ogpart3.tgz -cat /tmp/ogpart1.tgz /tmp/ogpart2.tgz /tmp/ogpart3.tgz > /tmp/ogclient.tgz -tar xzvf /tmp/ogclient.tgz -C /opt/opengnsys/tftpboot/ -cp -v /var/lib/tftpboot/ogclient/vmlinuz-2.6.32-21-generic-pae /var/lib/tftpboot/ogclient/ogvmlinuz -cp -v /var/lib/tftpboot/ogclient/initrd.img-2.6.32-21-generic-pae /var/lib/tftpboot/ogclient/oginitrd.img - - - -#definiendo permisos -chown -R :$OPENGNSYS_CLIENT_USER /opt/opengnsys/log/clients -chown -R :$OPENGNSYS_CLIENT_USER /opt/opengnsys/images -chmod -R 775 /opt/opengnsys/log/clients -chmod -R 775 /opt/opengnsys/images -chown -R :$OPENGNSYS_CLIENT_USER /var/lib/tftpboot/ogclient -chmod -R 755 /var/lib/tftpboot/ogclient -chown -R :$APACHE_RUN_GROUP /var/lib/tftpboot/pxelinux.cfg -chmod -R 775 /var/lib/tftpboot/pxelinux.cfg - - - - - # Mostrar sumario de la instalación e instrucciones de post-instalación. installationSummary diff --git a/server/DHCP/dhcpd.conf b/server/DHCP/dhcpd.conf deleted file mode 100644 index 687bbf0f..00000000 --- a/server/DHCP/dhcpd.conf +++ /dev/null @@ -1,22 +0,0 @@ -ddns-update-style none; -option domain-name "example.org"; -log-facility local7; -not-authoritative; - -subnet NETIP netmask NETMASK { - option domain-name-servers DNSIP; - option routers ROUTERIP; - option broadcast-address NETBROAD; - default-lease-time 600; - max-lease-time 7200; - next-server SERVERIP; - filename "pxelinux.0"; - use-host-decl-names on; - -# host HOSTNAME1 { -# hardware ethernet HOSTMAC1; -# fixed-address HOSTIP1; -# } - -} - diff --git a/server/NFS/exports b/server/NFS/exports deleted file mode 100644 index 5b30216b..00000000 --- a/server/NFS/exports +++ /dev/null @@ -1,3 +0,0 @@ -/opt/opengnsys/client NETIP/NETMASK(ro,no_subtree_check,no_root_squash,sync) -/opt/opengnsys/images NETIP/NETMASK(rw,no_subtree_check,no_root_squash,sync,crossmnt) -/opt/opengnsys/log/clients NETIP/NETMASK(rw,no_subtree_check,no_root_squash,sync) \ No newline at end of file diff --git a/server/PXE/pxelinux.0 b/server/PXE/pxelinux.0 deleted file mode 100644 index 08270f1a..00000000 Binary files a/server/PXE/pxelinux.0 and /dev/null differ diff --git a/server/PXE/pxelinux.cfg/adminmode b/server/PXE/pxelinux.cfg/adminmode deleted file mode 100644 index 2ade1682..00000000 --- a/server/PXE/pxelinux.cfg/adminmode +++ /dev/null @@ -1,5 +0,0 @@ -DEFAULT pxe - -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin diff --git a/server/PXE/pxelinux.cfg/default b/server/PXE/pxelinux.cfg/default deleted file mode 100644 index 80457f07..00000000 --- a/server/PXE/pxelinux.cfg/default +++ /dev/null @@ -1,11 +0,0 @@ -DEFAULT syslinux/vesamenu.c32 -MENU TITLE Aplicacion OpenGnsys - -LABEL 1 -MENU LABEL 1 -KERNEL syslinux/chain.c32 -APPEND hd0 - -PROMPT 0 -TIMEOUT 10 - diff --git a/server/etc/dhcpd.conf.tmpl b/server/etc/dhcpd.conf.tmpl new file mode 100644 index 00000000..687bbf0f --- /dev/null +++ b/server/etc/dhcpd.conf.tmpl @@ -0,0 +1,22 @@ +ddns-update-style none; +option domain-name "example.org"; +log-facility local7; +not-authoritative; + +subnet NETIP netmask NETMASK { + option domain-name-servers DNSIP; + option routers ROUTERIP; + option broadcast-address NETBROAD; + default-lease-time 600; + max-lease-time 7200; + next-server SERVERIP; + filename "pxelinux.0"; + use-host-decl-names on; + +# host HOSTNAME1 { +# hardware ethernet HOSTMAC1; +# fixed-address HOSTIP1; +# } + +} + diff --git a/server/etc/exports.tmpl b/server/etc/exports.tmpl new file mode 100644 index 00000000..5b30216b --- /dev/null +++ b/server/etc/exports.tmpl @@ -0,0 +1,3 @@ +/opt/opengnsys/client NETIP/NETMASK(ro,no_subtree_check,no_root_squash,sync) +/opt/opengnsys/images NETIP/NETMASK(rw,no_subtree_check,no_root_squash,sync,crossmnt) +/opt/opengnsys/log/clients NETIP/NETMASK(rw,no_subtree_check,no_root_squash,sync) \ No newline at end of file diff --git a/server/etc/smb-og.conf.tmpl b/server/etc/smb-og.conf.tmpl new file mode 100644 index 00000000..6256af7e --- /dev/null +++ b/server/etc/smb-og.conf.tmpl @@ -0,0 +1,29 @@ +[ogboot] + comment = OpenGnSys Boot + writeable = no + read only = yes + #locking = no + path = /var/lib/tftpboot + guest ok = no + +[ogclient] + comment = OpenGnSys Client + read only = yes + locking = no + path = OPENGNSYSDIR/client + guest ok = no + +[oglog] + comment = OpenGnSys Log + read only = no + writeable = yes + path = OPENGNSYSDIR/log/clients + guest ok = no + +[ogimages] + comment = OpenGnSys Repository + read only = no + writeable = yes + locking = no + path = OPENGNSYSDIR/images + guest ok = no diff --git a/server/tftpboot/pxelinux.0 b/server/tftpboot/pxelinux.0 new file mode 100644 index 00000000..08270f1a Binary files /dev/null and b/server/tftpboot/pxelinux.0 differ diff --git a/server/tftpboot/pxelinux.cfg/adminmode b/server/tftpboot/pxelinux.cfg/adminmode new file mode 100644 index 00000000..2ade1682 --- /dev/null +++ b/server/tftpboot/pxelinux.cfg/adminmode @@ -0,0 +1,5 @@ +DEFAULT pxe + +LABEL pxe +KERNEL linux +APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin diff --git a/server/tftpboot/pxelinux.cfg/default b/server/tftpboot/pxelinux.cfg/default new file mode 100644 index 00000000..80457f07 --- /dev/null +++ b/server/tftpboot/pxelinux.cfg/default @@ -0,0 +1,11 @@ +DEFAULT syslinux/vesamenu.c32 +MENU TITLE Aplicacion OpenGnsys + +LABEL 1 +MENU LABEL 1 +KERNEL syslinux/chain.c32 +APPEND hd0 + +PROMPT 0 +TIMEOUT 10 + -- cgit v1.2.3-18-g5258 From edac2474ac980dfa8ed66845cd2719eb89c857b9 Mon Sep 17 00:00:00 2001 From: ramon Date: Wed, 2 Mar 2011 12:52:17 +0000 Subject: Rama version1.0: corregir erratas de caminos en el instalador y adaptar script {{{torrent-creator}}} de la rama Testing. git-svn-id: https://opengnsys.es/svn/branches/version1.0@1524 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_installer.sh | 6 +++--- repoman/bin/torrent-creator | 21 +++++++++++---------- repoman/bin/torrent-tracker | 0 3 files changed, 14 insertions(+), 13 deletions(-) mode change 100644 => 100755 repoman/bin/torrent-tracker diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 6ab371d0..94ded64d 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -685,9 +685,9 @@ function smbConfigure() # Copiar plantailla de recursos para OpenGnSys sed -e "s/OPENGNSYSDIR/$INSTALL_TARGET/g" \ - $WORKDIR/opengnsys/server/etc/smb-og.conf.tmpl > /etc/smb/smb-og.conf + $WORKDIR/opengnsys/server/etc/smb-og.conf.tmpl > /etc/samba/smb-og.conf # Configurar y recargar Samba" - perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/; s/^\; *include \=.*$/ include \= \/etc\/smb\/smb-og.conf/" /etc/samba/smb.conf + perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/; s/^\; *include \=.*$/ include \= \/etc\/samba\/smb-og.conf/" /etc/samba/smb.conf /etc/init.d/smbd restart if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while configure Samba" @@ -747,7 +747,7 @@ function installWebFiles() fi find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null # Descomprimir XAJAX. - unzip $WORKDIR/opengnsys/admin/WebConsole/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax + unzip $WORKDIR/opengnsys/admin/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax # Cambiar permisos para ficheros especiales. chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/iconos echoAndLog "${FUNCNAME}(): Web files installed successfully." diff --git a/repoman/bin/torrent-creator b/repoman/bin/torrent-creator index 5d43c753..21d58581 100755 --- a/repoman/bin/torrent-creator +++ b/repoman/bin/torrent-creator @@ -3,6 +3,7 @@ #Version 0.3 Ejecución desde cron cada minuto, ## echo "* * * * * root /opt/opengnsys/bin/torrent-creator" > /etc/cron.d/torrentcreator +## ver moficifcacione en linea 41 - 46 # Comprobar si el proceso ya está en ejecución. PROG=$(basename $0) @@ -26,27 +27,27 @@ pushd $OGIMG >/dev/null trap 'echo "`date` : Proceso interrumpido" >> $LOGFILE; exit ' 1 2 3 6 9 15 for IMG in *.{img,pgz}; do # Saltar al siguiente si la imagen está bloqueada o si no existe el fichero. - if [ -f "$IMG.lock" -o ! -f "$IMG" ]; then + LOCKFILE="$IMG.lock" + if [ -f "$LOCKFILE" -o ! -f "$IMG" ]; then continue fi # Comprobar si ya existe el fichero Torrent para esa imagen. TORRENT="$IMG.torrent" - if [ -f "$TORRENT" ]; then + SUMFILE="$IMG.sum" + if [ -f "$TORRENT" ]; then FILESIZE="$(ls -l $IMG | awk '{print $5}')" read -e TORRFILE TORRSIZE <<<"$(ctorrent -x $TORRENT | awk '$1~/<1>/ {print $2,$3}')" [ "$(basename $IMG)" = "$TORRFILE" -a "[$FILESIZE]" = "$TORRSIZE" ] && continue fi - # Crear fichero Torrent. + # Bloquear imagen, crear ficheros Torrent y Checksum y desbloquear imagen. echo "`date` : Inicio creación de fichero $TORRENT" >> $LOGFILE - rm -f "$TORRENT" - ##### ADV v. 1.0 23/02/2011 - rm -f $IMG.sum + touch "$LOCKFILE" + trap "rm -f $LOCKFILE" 1 2 3 6 9 + rm -f "$TORRENT" "$SUMFILE" DATASUM=`md5sum "$IMG" | cut -f1 -d" "` - echo $DATASUM > $IMG.sum + echo $DATASUM > "$SUMFILE" nice -8 ctorrent -t "$IMG" -u $TRACKERURL -s "$TORRENT" -c $DATASUM - #### ADV v. 1.0 23/02/2011 - - nice -8 ctorrent -t "$IMG" -u $TRACKERURL -s "$TORRENT" + rm -f "$LOCKFILE" if [ -f "$TORRENT" ]; then echo "`date` : Fin creación de fichero $TORRENT" >> $LOGFILE else diff --git a/repoman/bin/torrent-tracker b/repoman/bin/torrent-tracker old mode 100644 new mode 100755 -- cgit v1.2.3-18-g5258 From 803bc36238663cda57898d83bc90b7a3d232b60f Mon Sep 17 00:00:00 2001 From: ramon Date: Wed, 2 Mar 2011 15:58:00 +0000 Subject: Rama version1.0: establecer versión; eliminar ficheros antiguos. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1525 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/nfsexport/scripts/admBootOs | 3 - client/nfsexport/scripts/admCreateImage | 3 - .../nfsexport/scripts/admCreateLogicalPartitions | 3 - .../nfsexport/scripts/admCreatePrimaryPartitions | 5 - client/nfsexport/scripts/admFormatFs | 4 - client/nfsexport/scripts/admGetFsType | 6 -- client/nfsexport/scripts/admGetIpAddress | 6 -- client/nfsexport/scripts/admGetOsVersion | 6 -- client/nfsexport/scripts/admListHardwareInfo | 6 -- client/nfsexport/scripts/admListPrimaryPartitions | 7 -- client/nfsexport/scripts/admListSoftwareInfo | 6 -- client/nfsexport/scripts/admMenuBrowser | 3 - client/nfsexport/scripts/admRestoreImage | 4 - doc/VERSION.txt | 2 +- doc/udeb.list | 120 --------------------- 15 files changed, 1 insertion(+), 183 deletions(-) delete mode 100755 client/nfsexport/scripts/admBootOs delete mode 100755 client/nfsexport/scripts/admCreateImage delete mode 100755 client/nfsexport/scripts/admCreateLogicalPartitions delete mode 100755 client/nfsexport/scripts/admCreatePrimaryPartitions delete mode 100755 client/nfsexport/scripts/admFormatFs delete mode 100755 client/nfsexport/scripts/admGetFsType delete mode 100755 client/nfsexport/scripts/admGetIpAddress delete mode 100755 client/nfsexport/scripts/admGetOsVersion delete mode 100755 client/nfsexport/scripts/admListHardwareInfo delete mode 100755 client/nfsexport/scripts/admListPrimaryPartitions delete mode 100755 client/nfsexport/scripts/admListSoftwareInfo delete mode 100755 client/nfsexport/scripts/admMenuBrowser delete mode 100755 client/nfsexport/scripts/admRestoreImage delete mode 100644 doc/udeb.list diff --git a/client/nfsexport/scripts/admBootOs b/client/nfsexport/scripts/admBootOs deleted file mode 100755 index c94ffae1..00000000 --- a/client/nfsexport/scripts/admBootOs +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -RETORNO=$(bootOs $* 2>/dev/null) || exit $? -exit 0 diff --git a/client/nfsexport/scripts/admCreateImage b/client/nfsexport/scripts/admCreateImage deleted file mode 100755 index 338d46bd..00000000 --- a/client/nfsexport/scripts/admCreateImage +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -RETORNO=$(createImage $* 2>/dev/null) || exit $? -exit 0 diff --git a/client/nfsexport/scripts/admCreateLogicalPartitions b/client/nfsexport/scripts/admCreateLogicalPartitions deleted file mode 100755 index 7a693aac..00000000 --- a/client/nfsexport/scripts/admCreateLogicalPartitions +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - - diff --git a/client/nfsexport/scripts/admCreatePrimaryPartitions b/client/nfsexport/scripts/admCreatePrimaryPartitions deleted file mode 100755 index 2296d7f7..00000000 --- a/client/nfsexport/scripts/admCreatePrimaryPartitions +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -RETORNO=$(createPrimaryPartitions $* 2>/dev/null) || exit $? -exit 0 - - diff --git a/client/nfsexport/scripts/admFormatFs b/client/nfsexport/scripts/admFormatFs deleted file mode 100755 index 96c9b1c6..00000000 --- a/client/nfsexport/scripts/admFormatFs +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -RETORNO=$(formatFs $* 2>/dev/null) || exit $? -exit 0 - diff --git a/client/nfsexport/scripts/admGetFsType b/client/nfsexport/scripts/admGetFsType deleted file mode 100755 index 29e9ce1d..00000000 --- a/client/nfsexport/scripts/admGetFsType +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -RETORNO=$(getFsType $* 2>/dev/null) || exit $? -# Fichero tempotal de salida para intercambio de datos con el servicio -OTPUTFILE="/tmp/retorno" -echo $RETORNO>$OTPUTFILE || exit $? -exit 0 diff --git a/client/nfsexport/scripts/admGetIpAddress b/client/nfsexport/scripts/admGetIpAddress deleted file mode 100755 index 36fc834a..00000000 --- a/client/nfsexport/scripts/admGetIpAddress +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -RETORNO=$(getIpAddress $* 2>/dev/null) || exit $? -# Fichero tempotal de salida para intercambio de datos con el servicio -OTPUTFILE="/tmp/retorno" -echo $RETORNO>$OTPUTFILE || exit $? -exit 0 diff --git a/client/nfsexport/scripts/admGetOsVersion b/client/nfsexport/scripts/admGetOsVersion deleted file mode 100755 index 47a3991a..00000000 --- a/client/nfsexport/scripts/admGetOsVersion +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -RETORNO=$(getOsVersion $* 2>/dev/null) || exit $? -# Fichero tempotal de salida para intercambio de datos con el servicio -OTPUTFILE="/tmp/retorno" -echo $RETORNO>$OTPUTFILE || exit $? -exit 0 diff --git a/client/nfsexport/scripts/admListHardwareInfo b/client/nfsexport/scripts/admListHardwareInfo deleted file mode 100755 index 429f1d07..00000000 --- a/client/nfsexport/scripts/admListHardwareInfo +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -RETORNO=$(listHardwareInfo $* 2>/dev/null) || exit $? -# Fichero tempotal de salida para intercambio de datos con el servicio -OTPUTFILE="/tmp/retorno" -echo $RETORNO>$OTPUTFILE || exit $? -exit 0 diff --git a/client/nfsexport/scripts/admListPrimaryPartitions b/client/nfsexport/scripts/admListPrimaryPartitions deleted file mode 100755 index 1d8ce077..00000000 --- a/client/nfsexport/scripts/admListPrimaryPartitions +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -RETORNO=$(listPrimaryPartitions $* 2>/dev/null) || exit $? -# Fichero tempotal de salida para intercambio de datos con el servicio -OTPUTFILE="/tmp/retorno" -echo $RETORNO>$OTPUTFILE || exit $? -exit 0 - diff --git a/client/nfsexport/scripts/admListSoftwareInfo b/client/nfsexport/scripts/admListSoftwareInfo deleted file mode 100755 index e41bbb93..00000000 --- a/client/nfsexport/scripts/admListSoftwareInfo +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -RETORNO=$(listSoftwareInfo $* 2>/dev/null) || exit $? -# Fichero tempotal de salida para intercambio de datos con el servicio -OTPUTFILE="/tmp/retorno" -echo $RETORNO>$OTPUTFILE || exit $? -exit 0 diff --git a/client/nfsexport/scripts/admMenuBrowser b/client/nfsexport/scripts/admMenuBrowser deleted file mode 100755 index 2214920f..00000000 --- a/client/nfsexport/scripts/admMenuBrowser +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -RETORNO=$(menuBrowser $* 2>/dev/null) || exit $? -exit 0 diff --git a/client/nfsexport/scripts/admRestoreImage b/client/nfsexport/scripts/admRestoreImage deleted file mode 100755 index 642cd298..00000000 --- a/client/nfsexport/scripts/admRestoreImage +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -RETORNO=$(restoreImage $* 2>/dev/null) || exit $? -exit 0 - diff --git a/doc/VERSION.txt b/doc/VERSION.txt index cec11621..20234723 100644 --- a/doc/VERSION.txt +++ b/doc/VERSION.txt @@ -1 +1 @@ -OpenGnSys 0.10 +OpenGnSys 1.0pre diff --git a/doc/udeb.list b/doc/udeb.list deleted file mode 100644 index 606881a5..00000000 --- a/doc/udeb.list +++ /dev/null @@ -1,120 +0,0 @@ -apt-setup-udeb - Configure apt -beep-udeb - advanced pc-speaker beeper - minimal package -binutils-static-udeb - statically linked binutils tools for for the Debian installer -bogl-bterm-udeb - Ben's Own Graphics Library - graphical terminal -brltty-udeb - Access software for a blind person using a braille display -busybox-udeb - Tiny utilities for the debian-installer -cdebconf-gtk-udeb - Gtk+ frontend for Debian Configuration Management System -cdebconf-newt-udeb - Newt frontend for Debian Configuration Management System -cdebconf-priority - Change debconf priority -cdebconf-text-udeb - Plain text frontend for Debian Configuration Management System -cdebconf-udeb - Debian Configuration Management System (C-implementation) -console-setup-fonts-udeb - console fonts for Debian Installer -console-setup-udeb - Configure the keyboard -cryptsetup-udeb - configures encrypted block devices -debootstrap-udeb - Bootstrap the Debian system -devio-udeb - correctly read (or write) a region of a block device -dhcp3-client-udeb - DHCP Client for debian-installer -dmraid-udeb - Device-Mapper Software RAID support tool (udeb) -dmsetup-udeb - The Linux Kernel Device Mapper userspace library -e2fsprogs-udeb - stripped-down versions of e2fsprogs, for debian-installer -eject-udeb - ejects CDs from d-i menu -eucalyptus-udeb - Elastic Utility Computing Architecture - installer integration -fbset-udeb - framebuffer device maintenance program -fdisk-udeb - Manually partition a hard drive (fdisk) -fontconfig-udeb - generic font configuration library - minimal runtime -fuse-utils-udeb - Filesystem in USErspace (utilities) -gpgv-udeb - minimal signature verification tool -gptsync-udeb - GPT and MBR partition tables synchronisation tool -gtk2-engines-udeb - theme engines for GTK+ 2.x in the Debian installer -hdparm-udeb - tune hard disk parameters for high performance -iso-scan - Scan hard drives for an installer ISO image -jfsutils-udeb - A stripped-down version of jfsutils, for debian-installer -kbd-udeb - Linux console keyboard setup utilities -klibc-utils-floppy-udeb - small utilities built with klibc for the boot floppy -libatk1.0-udeb - The ATK accessibility toolkit -libavahi-common3-udeb - Avahi common library (debian-installer) -libavahi-core6-udeb - Avahi's embeddable mDNS/DNS-SD library (debian-installer) -libblkid1-udeb - block device id library -libc6-udeb - GNU C Library: Shared libraries - udeb -libcairo-directfb2-udeb - The Cairo 2D vector graphics library DirectFB build -libcrypto0.9.8-udeb - crypto shared library - udeb -libdebconfclient0-udeb - Debian Configuration Management System (C-implementation) -libdebian-installer4-udeb - Library of common debian-installer functions -libdevmapper1.02.1-udeb - The Linux Kernel Device Mapper userspace library -libdirectfb-1.2-0-udeb - direct frame buffer graphics - shared libraries -libdmraid1.0.0.rc15-udeb - Device-Mapper Software RAID support tool - shared library (udeb) -libexpat1-udeb - XML parsing C library - runtime library -libfreetype6-udeb - FreeType 2 font engine for the debian-installer -libfribidi0-udeb - Free Implementation of the Unicode BiDi algorithm -libfuse2-udeb - Filesystem in USErspace library -libgcrypt11-udeb - LGPL Crypto library - runtime library -libglib2.0-udeb - The GLib library of C routines - minimal runtime -libgpg-error0-udeb - library for common error values and messages in GnuPG components -libgtk-directfb-2.0-0-udeb - The GTK+ graphical user interface library - minimal runtime -libiw29-udeb - Tools for manipulating Linux Wireless Extensions -libklibc-udeb - minimal libc subset for use with initramfs -libnss-dns-udeb - GNU C Library: NSS helper for DNS - udeb -libnss-files-udeb - GNU C Library: NSS helper for files - udeb -libntfs-3g54-udeb - ntfs-3g filesystem in userspace (FUSE) library -libpango1.0-udeb - Layout and rendering of internationalized text - minimal runtime -libparted1.8-udeb - The GNU Parted disk partitioning shared library -libpcre3-udeb - Perl 5 Compatible Regular Expression Library - runtime files (udeb) -libpixman-1-0-udeb - pixel-manipulation library for X and cairo -libpng12-0-udeb - PNG library - minimal runtime library -libpopt0-udeb - lib for parsing cmdline parameters -libslang2-udeb - S-Lang library for Debian Installer -libsysfs2-udeb - interface library to sysfs -libtextwrap1-udeb - text-wrapping library with i18n - runtime udeb -libusb-0.1-udeb - userspace USB programming library -libuuid1-udeb - stripped down universally unique id library, for debian-installer -libvte9-udeb - Terminal emulator widget for GTK+ 2.0 - minimal runtime -libxml2-udeb - GNOME XML library -lsb-release-udeb - LSB release information -ltsp-client-builder - Build an LTSP environment in the installer target -lvm2-udeb - The Linux Logical Volume Manager -mdadm-udeb - tool to administer Linux MD arrays (software RAID) -mii-diag-udeb - A little tool to manipulate network cards -mkreiserfs-udeb - User-level tools for ReiserFS filesystems -module-init-tools-udeb - tools for managing Linux kernel modules -nano-udeb - free curses-based text editor, inspired by Pico - udeb -ntfs-3g-udeb - read-write NTFS driver for FUSE -ntfsprogs-udeb - Tools for doing neat things in NTFS partitions from Linux - udeb -oem-config-udeb - Prepare for OEM configuration -oldsys-preseed - Preseed debian-installer from an existing device -open-iscsi-udeb - Configure iSCSI -openssh-client-udeb - secure shell client for the Debian installer -openssh-server-udeb - secure shell server for the Debian installer -os-prober-udeb - utility to detect other OSes on a set of drives -parted-udeb - Manually partition a hard drive (parted) -partman-partitioning - Partitioning operations for partman -partman-target - Provides partman with ability to prepare /target -pciutils-udeb - Linux PCI Utilities (udeb) -pcmciautils-udeb - PCMCIA utilities for Linux 2.6 -ppp-udeb - Point-to-Point Protocol (PPP) - package for Debian Installer -rdate-udeb - sets the system's date from a remote host -redboot-tools-udeb - Collection of utilities to manipulate RedBoot data (udeb) -reiserfsprogs-udeb - User-level tools for ReiserFS filesystems -strace-udeb - A system call tracer -ttf-cjk-compact-udeb - Shrinked CJK TrueType fonts for GUI d-i. -ttf-dejavu-mono-udeb - Monospace Vera font family derivate with additional characters -ttf-dejavu-udeb - Vera font family derivate with additional characters -ttf-farsiweb-udeb - Farsiweb TrueType fonts for the graphical installer -ttf-freefont-udeb - Freefont Sans fonts for the graphical installer -ttf-khmeros-udeb - Debian-Installer font for the Khmer language of Cambodia -ttf-malayalam-fonts-udeb - Free TrueType fonts for the Malayalam language -ttf-sil-abyssinica-udeb - Debian-Installer font for the Ethiopic script (Amharic) -ttf-tamil-fonts-udeb - Free TrueType fonts for the Tamil language -ttf-thai-tlwg-udeb - Thai fonts in TrueType format for D-I use -ttf-tmuni-udeb - font for Tibetan, Dzongkha and Ladakhi (OpenType Unicode) -tzsetup-udeb - choose time zone -ubuntu-keyring-udeb - GnuPG keys of the Ubuntu archive -udev-udeb - rule-based device node and kernel event manager -usbutils-udeb - Linux USB utilities -user-setup-udeb - Set up users and passwords -util-linux-udeb - Miscellaneous system utilities -wireless-tools-udeb - Tools for manipulating Linux Wireless Extensions -xfsprogs-udeb - A stripped-down version of xfsprogs, for debian-installer -zlib1g-udeb - compression library - runtime for Debian installer -kernel-wedge - constructor del paquete udeb para el instalador de Debian -reprepro - Debian package repository producer -- cgit v1.2.3-18-g5258 From 2338c95f5ab7569bbce01178ea1426555271e5a4 Mon Sep 17 00:00:00 2001 From: ramon Date: Wed, 2 Mar 2011 17:39:59 +0000 Subject: Rama version1.0: * Redistribución de directorios para el cliente. * Modificación del instalador para adaptarse a la nueva estructura de directorios. * Desinstalador quita los recursos de OpenGnSys en Samba. * Documentación actualizada para la nueva versión. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1526 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/README.es.txt | 14 +- client/boot/README.es.txt | 22 - client/boot/initrd-generator | 314 - client/boot/ogClientNfs-generator.lib | 139 - client/boot/udeblist-jaunty.conf | 22 - client/boot/udeblist-karmic.conf | 22 - client/boot/udeblist-lucid.conf | 31 - client/boot/udeblist-maverick.conf | 28 - client/boot/udeblist.conf | 1 - client/boot/upgrade-clients-udeb.sh | 50 - client/initrd-tools/README.es.txt | 22 + client/initrd-tools/initrd-generator | 314 + client/initrd-tools/ogClientNfs-generator.lib | 139 + client/initrd-tools/udeblist-jaunty.conf | 22 + client/initrd-tools/udeblist-karmic.conf | 22 + client/initrd-tools/udeblist-lucid.conf | 31 + client/initrd-tools/udeblist-maverick.conf | 28 + client/initrd-tools/udeblist.conf | 1 + client/initrd-tools/upgrade-clients-udeb.sh | 50 + client/nfsexport/README.es.txt | 25 - client/nfsexport/bin/EACInterfaces | Bin 9682 -> 0 bytes client/nfsexport/bin/browser | Bin 25407040 -> 0 bytes client/nfsexport/bin/ogAdmClient | Bin 646145 -> 0 bytes client/nfsexport/etc/init/default.sh | 35 - client/nfsexport/etc/init/defaultTESTING.sh | 49 - client/nfsexport/etc/lang.es_ES.UTF-8.conf | 1 - client/nfsexport/etc/lang.es_ES.conf | 127 - client/nfsexport/etc/preinit/default.sh | 26 - client/nfsexport/etc/preinit/defaultTESTING.sh | 26 - client/nfsexport/etc/preinit/fileslinks.sh.NoUsed | 38 - client/nfsexport/etc/preinit/loadenviron.sh | 83 - client/nfsexport/etc/preinit/loadenvironTESTING.sh | 95 - client/nfsexport/etc/preinit/loadmodules.sh | 21 - client/nfsexport/etc/preinit/loadmodulesTESTING.sh | 28 - client/nfsexport/etc/preinit/loadudeb.sh.NoUsed | 27 - client/nfsexport/etc/preinit/metadevs.sh.NoUsed | 28 - client/nfsexport/lib/fonts/DejaVuSans-Bold.ttf | Bin 466696 -> 0 bytes .../nfsexport/lib/fonts/DejaVuSans-BoldOblique.ttf | Bin 441736 -> 0 bytes client/nfsexport/lib/fonts/DejaVuSans-Oblique.ttf | Bin 434576 -> 0 bytes client/nfsexport/lib/fonts/DejaVuSans.ttf | Bin 493564 -> 0 bytes client/nfsexport/lib/fonts/DejaVuSansMono-Bold.ttf | Bin 229460 -> 0 bytes .../lib/fonts/DejaVuSansMono-BoldOblique.ttf | Bin 177780 -> 0 bytes .../nfsexport/lib/fonts/DejaVuSansMono-Oblique.ttf | Bin 184896 -> 0 bytes client/nfsexport/lib/fonts/DejaVuSansMono.ttf | Bin 237788 -> 0 bytes client/nfsexport/lib/fonts/DejaVuSerif-Bold.ttf | Bin 201516 -> 0 bytes .../lib/fonts/DejaVuSerif-BoldOblique.ttf | Bin 180948 -> 0 bytes client/nfsexport/lib/fonts/DejaVuSerif-Oblique.ttf | Bin 179872 -> 0 bytes client/nfsexport/lib/fonts/DejaVuSerif.ttf | Bin 210416 -> 0 bytes client/nfsexport/lib/fonts/README | 21 - client/nfsexport/lib/fonts/UTBI____.pfa | 1172 -- client/nfsexport/lib/fonts/UTB_____.pfa | 1134 -- client/nfsexport/lib/fonts/UTI_____.pfa | 1165 -- client/nfsexport/lib/fonts/UTRG____.pfa | 1126 -- client/nfsexport/lib/fonts/Vera.ttf | Bin 65932 -> 0 bytes client/nfsexport/lib/fonts/VeraBI.ttf | Bin 63208 -> 0 bytes client/nfsexport/lib/fonts/VeraBd.ttf | Bin 58716 -> 0 bytes client/nfsexport/lib/fonts/VeraIt.ttf | Bin 63684 -> 0 bytes client/nfsexport/lib/fonts/VeraMoBI.ttf | Bin 55032 -> 0 bytes client/nfsexport/lib/fonts/VeraMoBd.ttf | Bin 49052 -> 0 bytes client/nfsexport/lib/fonts/VeraMoIt.ttf | Bin 54508 -> 0 bytes client/nfsexport/lib/fonts/VeraMono.ttf | Bin 49224 -> 0 bytes client/nfsexport/lib/fonts/VeraSe.ttf | Bin 60280 -> 0 bytes client/nfsexport/lib/fonts/VeraSeBd.ttf | Bin 58736 -> 0 bytes client/nfsexport/lib/fonts/c0419bt_.pfb | Bin 40766 -> 0 bytes client/nfsexport/lib/fonts/c0582bt_.pfb | Bin 39511 -> 0 bytes client/nfsexport/lib/fonts/c0583bt_.pfb | Bin 40008 -> 0 bytes client/nfsexport/lib/fonts/c0611bt_.pfb | Bin 39871 -> 0 bytes client/nfsexport/lib/fonts/c0632bt_.pfb | Bin 33799 -> 0 bytes client/nfsexport/lib/fonts/c0633bt_.pfb | Bin 35229 -> 0 bytes client/nfsexport/lib/fonts/c0648bt_.pfb | Bin 34869 -> 0 bytes client/nfsexport/lib/fonts/c0649bt_.pfb | Bin 35118 -> 0 bytes client/nfsexport/lib/fonts/cour.pfa | 1954 -- client/nfsexport/lib/fonts/courb.pfa | 1966 -- client/nfsexport/lib/fonts/courbi.pfa | 1940 -- client/nfsexport/lib/fonts/couri.pfa | 1893 -- client/nfsexport/lib/fonts/cursor.pfa | 954 - client/nfsexport/lib/fonts/fixed_120_50.qpf | Bin 3109 -> 0 bytes client/nfsexport/lib/fonts/fixed_70_50.qpf | Bin 2567 -> 0 bytes client/nfsexport/lib/fonts/helvetica_100_50.qpf | Bin 3046 -> 0 bytes client/nfsexport/lib/fonts/helvetica_100_50i.qpf | Bin 3052 -> 0 bytes client/nfsexport/lib/fonts/helvetica_100_75.qpf | Bin 3040 -> 0 bytes client/nfsexport/lib/fonts/helvetica_100_75i.qpf | Bin 3081 -> 0 bytes client/nfsexport/lib/fonts/helvetica_120_50.qpf | Bin 3301 -> 0 bytes client/nfsexport/lib/fonts/helvetica_120_50i.qpf | Bin 3560 -> 0 bytes client/nfsexport/lib/fonts/helvetica_120_75.qpf | Bin 3326 -> 0 bytes client/nfsexport/lib/fonts/helvetica_120_75i.qpf | Bin 3759 -> 0 bytes client/nfsexport/lib/fonts/helvetica_140_50.qpf | Bin 3860 -> 0 bytes client/nfsexport/lib/fonts/helvetica_140_50i.qpf | Bin 4208 -> 0 bytes client/nfsexport/lib/fonts/helvetica_140_75.qpf | Bin 4035 -> 0 bytes client/nfsexport/lib/fonts/helvetica_140_75i.qpf | Bin 4498 -> 0 bytes client/nfsexport/lib/fonts/helvetica_180_50.qpf | Bin 5179 -> 0 bytes client/nfsexport/lib/fonts/helvetica_180_50i.qpf | Bin 5778 -> 0 bytes client/nfsexport/lib/fonts/helvetica_180_75.qpf | Bin 5712 -> 0 bytes client/nfsexport/lib/fonts/helvetica_180_75i.qpf | Bin 5977 -> 0 bytes client/nfsexport/lib/fonts/helvetica_240_50.qpf | Bin 7691 -> 0 bytes client/nfsexport/lib/fonts/helvetica_240_50i.qpf | Bin 8333 -> 0 bytes client/nfsexport/lib/fonts/helvetica_240_75.qpf | Bin 7912 -> 0 bytes client/nfsexport/lib/fonts/helvetica_240_75i.qpf | Bin 8588 -> 0 bytes client/nfsexport/lib/fonts/helvetica_80_50.qpf | Bin 2735 -> 0 bytes client/nfsexport/lib/fonts/helvetica_80_50i.qpf | Bin 2742 -> 0 bytes client/nfsexport/lib/fonts/helvetica_80_75.qpf | Bin 2745 -> 0 bytes client/nfsexport/lib/fonts/helvetica_80_75i.qpf | Bin 2750 -> 0 bytes client/nfsexport/lib/fonts/japanese_230_50.qpf | Bin 263331 -> 0 bytes client/nfsexport/lib/fonts/l047013t.pfa | 1346 -- client/nfsexport/lib/fonts/l047016t.pfa | 1356 -- client/nfsexport/lib/fonts/l047033t.pfa | 1353 -- client/nfsexport/lib/fonts/l047036t.pfa | 1361 -- client/nfsexport/lib/fonts/l048013t.pfa | 1233 -- client/nfsexport/lib/fonts/l048016t.pfa | 1269 -- client/nfsexport/lib/fonts/l048033t.pfa | 1267 -- client/nfsexport/lib/fonts/l048036t.pfa | 1260 -- client/nfsexport/lib/fonts/l049013t.pfa | 1598 -- client/nfsexport/lib/fonts/l049016t.pfa | 1582 -- client/nfsexport/lib/fonts/l049033t.pfa | 1735 -- client/nfsexport/lib/fonts/l049036t.pfa | 1613 -- client/nfsexport/lib/fonts/micro_40_50.qpf | Bin 1602 -> 0 bytes client/nfsexport/lib/fonts/unifont_160_50.qpf | Bin 1215089 -> 0 bytes client/nfsexport/lib/grub4dos/badgrub.exe | Bin 210827 -> 0 bytes client/nfsexport/lib/grub4dos/bootlace.com | Bin 37092 -> 0 bytes client/nfsexport/lib/grub4dos/config.sys | 6 - client/nfsexport/lib/grub4dos/default | 46 - client/nfsexport/lib/grub4dos/grldr | Bin 195435 -> 0 bytes client/nfsexport/lib/grub4dos/grldr.mbr | Bin 9216 -> 0 bytes client/nfsexport/lib/grub4dos/grub.exe | Bin 212363 -> 0 bytes client/nfsexport/lib/grub4dos/grub.pif | Bin 967 -> 0 bytes client/nfsexport/lib/grub4dos/hmload.com | Bin 1856 -> 0 bytes client/nfsexport/lib/grub4dos/menu.lst | 83 - client/nfsexport/lib/modules/psmouse.ko | Bin 78700 -> 0 bytes client/nfsexport/lib/pci.ids | 17910 ------------------- client/nfsexport/scripts/README.es.txt | 38 - client/nfsexport/scripts/bootLinux | 35 - client/nfsexport/scripts/bootOs | 45 - client/nfsexport/scripts/bootWindows | 30 - client/nfsexport/scripts/cloneRemoteFromMaster | 215 - client/nfsexport/scripts/createImage | 59 - client/nfsexport/scripts/createLogicalPartitions | 3 - client/nfsexport/scripts/createPrimaryPartitions | 3 - client/nfsexport/scripts/deployImage | 20 - client/nfsexport/scripts/formatFs | 19 - client/nfsexport/scripts/getFsType | 3 - client/nfsexport/scripts/getIpAddress | 3 - client/nfsexport/scripts/getOsVersion | 3 - client/nfsexport/scripts/initCache | 60 - client/nfsexport/scripts/listHardwareInfo | 24 - client/nfsexport/scripts/listPrimaryPartitions | 3 - client/nfsexport/scripts/listSoftwareInfo | 30 - client/nfsexport/scripts/menuBrowser | 12 - client/nfsexport/scripts/ogUpdateBootCache.sh | 7 - client/nfsexport/scripts/poweroff | 18 - client/nfsexport/scripts/reboot | 17 - client/nfsexport/scripts/remoteConsole | 22 - client/nfsexport/scripts/restoreImage | 89 - client/nfsexport/scripts/sendFileMcast | 56 - client/nfsexport/scripts/updateCache | 96 - client/shared/README.es.txt | 25 + client/shared/bin/EACInterfaces | Bin 0 -> 9682 bytes client/shared/bin/browser | Bin 0 -> 25407040 bytes client/shared/bin/ogAdmClient | Bin 0 -> 646145 bytes client/shared/etc/init/default.sh | 35 + client/shared/etc/init/defaultTESTING.sh | 49 + client/shared/etc/lang.es_ES.UTF-8.conf | 1 + client/shared/etc/lang.es_ES.conf | 127 + client/shared/etc/preinit/default.sh | 26 + client/shared/etc/preinit/defaultTESTING.sh | 26 + client/shared/etc/preinit/fileslinks.sh.NoUsed | 38 + client/shared/etc/preinit/loadenviron.sh | 83 + client/shared/etc/preinit/loadenvironTESTING.sh | 95 + client/shared/etc/preinit/loadmodules.sh | 21 + client/shared/etc/preinit/loadmodulesTESTING.sh | 28 + client/shared/etc/preinit/loadudeb.sh.NoUsed | 27 + client/shared/etc/preinit/metadevs.sh.NoUsed | 28 + client/shared/lib/fonts/DejaVuSans-Bold.ttf | Bin 0 -> 466696 bytes client/shared/lib/fonts/DejaVuSans-BoldOblique.ttf | Bin 0 -> 441736 bytes client/shared/lib/fonts/DejaVuSans-Oblique.ttf | Bin 0 -> 434576 bytes client/shared/lib/fonts/DejaVuSans.ttf | Bin 0 -> 493564 bytes client/shared/lib/fonts/DejaVuSansMono-Bold.ttf | Bin 0 -> 229460 bytes .../lib/fonts/DejaVuSansMono-BoldOblique.ttf | Bin 0 -> 177780 bytes client/shared/lib/fonts/DejaVuSansMono-Oblique.ttf | Bin 0 -> 184896 bytes client/shared/lib/fonts/DejaVuSansMono.ttf | Bin 0 -> 237788 bytes client/shared/lib/fonts/DejaVuSerif-Bold.ttf | Bin 0 -> 201516 bytes .../shared/lib/fonts/DejaVuSerif-BoldOblique.ttf | Bin 0 -> 180948 bytes client/shared/lib/fonts/DejaVuSerif-Oblique.ttf | Bin 0 -> 179872 bytes client/shared/lib/fonts/DejaVuSerif.ttf | Bin 0 -> 210416 bytes client/shared/lib/fonts/README | 21 + client/shared/lib/fonts/UTBI____.pfa | 1172 ++ client/shared/lib/fonts/UTB_____.pfa | 1134 ++ client/shared/lib/fonts/UTI_____.pfa | 1165 ++ client/shared/lib/fonts/UTRG____.pfa | 1126 ++ client/shared/lib/fonts/Vera.ttf | Bin 0 -> 65932 bytes client/shared/lib/fonts/VeraBI.ttf | Bin 0 -> 63208 bytes client/shared/lib/fonts/VeraBd.ttf | Bin 0 -> 58716 bytes client/shared/lib/fonts/VeraIt.ttf | Bin 0 -> 63684 bytes client/shared/lib/fonts/VeraMoBI.ttf | Bin 0 -> 55032 bytes client/shared/lib/fonts/VeraMoBd.ttf | Bin 0 -> 49052 bytes client/shared/lib/fonts/VeraMoIt.ttf | Bin 0 -> 54508 bytes client/shared/lib/fonts/VeraMono.ttf | Bin 0 -> 49224 bytes client/shared/lib/fonts/VeraSe.ttf | Bin 0 -> 60280 bytes client/shared/lib/fonts/VeraSeBd.ttf | Bin 0 -> 58736 bytes client/shared/lib/fonts/c0419bt_.pfb | Bin 0 -> 40766 bytes client/shared/lib/fonts/c0582bt_.pfb | Bin 0 -> 39511 bytes client/shared/lib/fonts/c0583bt_.pfb | Bin 0 -> 40008 bytes client/shared/lib/fonts/c0611bt_.pfb | Bin 0 -> 39871 bytes client/shared/lib/fonts/c0632bt_.pfb | Bin 0 -> 33799 bytes client/shared/lib/fonts/c0633bt_.pfb | Bin 0 -> 35229 bytes client/shared/lib/fonts/c0648bt_.pfb | Bin 0 -> 34869 bytes client/shared/lib/fonts/c0649bt_.pfb | Bin 0 -> 35118 bytes client/shared/lib/fonts/cour.pfa | 1954 ++ client/shared/lib/fonts/courb.pfa | 1966 ++ client/shared/lib/fonts/courbi.pfa | 1940 ++ client/shared/lib/fonts/couri.pfa | 1893 ++ client/shared/lib/fonts/cursor.pfa | 954 + client/shared/lib/fonts/fixed_120_50.qpf | Bin 0 -> 3109 bytes client/shared/lib/fonts/fixed_70_50.qpf | Bin 0 -> 2567 bytes client/shared/lib/fonts/helvetica_100_50.qpf | Bin 0 -> 3046 bytes client/shared/lib/fonts/helvetica_100_50i.qpf | Bin 0 -> 3052 bytes client/shared/lib/fonts/helvetica_100_75.qpf | Bin 0 -> 3040 bytes client/shared/lib/fonts/helvetica_100_75i.qpf | Bin 0 -> 3081 bytes client/shared/lib/fonts/helvetica_120_50.qpf | Bin 0 -> 3301 bytes client/shared/lib/fonts/helvetica_120_50i.qpf | Bin 0 -> 3560 bytes client/shared/lib/fonts/helvetica_120_75.qpf | Bin 0 -> 3326 bytes client/shared/lib/fonts/helvetica_120_75i.qpf | Bin 0 -> 3759 bytes client/shared/lib/fonts/helvetica_140_50.qpf | Bin 0 -> 3860 bytes client/shared/lib/fonts/helvetica_140_50i.qpf | Bin 0 -> 4208 bytes client/shared/lib/fonts/helvetica_140_75.qpf | Bin 0 -> 4035 bytes client/shared/lib/fonts/helvetica_140_75i.qpf | Bin 0 -> 4498 bytes client/shared/lib/fonts/helvetica_180_50.qpf | Bin 0 -> 5179 bytes client/shared/lib/fonts/helvetica_180_50i.qpf | Bin 0 -> 5778 bytes client/shared/lib/fonts/helvetica_180_75.qpf | Bin 0 -> 5712 bytes client/shared/lib/fonts/helvetica_180_75i.qpf | Bin 0 -> 5977 bytes client/shared/lib/fonts/helvetica_240_50.qpf | Bin 0 -> 7691 bytes client/shared/lib/fonts/helvetica_240_50i.qpf | Bin 0 -> 8333 bytes client/shared/lib/fonts/helvetica_240_75.qpf | Bin 0 -> 7912 bytes client/shared/lib/fonts/helvetica_240_75i.qpf | Bin 0 -> 8588 bytes client/shared/lib/fonts/helvetica_80_50.qpf | Bin 0 -> 2735 bytes client/shared/lib/fonts/helvetica_80_50i.qpf | Bin 0 -> 2742 bytes client/shared/lib/fonts/helvetica_80_75.qpf | Bin 0 -> 2745 bytes client/shared/lib/fonts/helvetica_80_75i.qpf | Bin 0 -> 2750 bytes client/shared/lib/fonts/japanese_230_50.qpf | Bin 0 -> 263331 bytes client/shared/lib/fonts/l047013t.pfa | 1346 ++ client/shared/lib/fonts/l047016t.pfa | 1356 ++ client/shared/lib/fonts/l047033t.pfa | 1353 ++ client/shared/lib/fonts/l047036t.pfa | 1361 ++ client/shared/lib/fonts/l048013t.pfa | 1233 ++ client/shared/lib/fonts/l048016t.pfa | 1269 ++ client/shared/lib/fonts/l048033t.pfa | 1267 ++ client/shared/lib/fonts/l048036t.pfa | 1260 ++ client/shared/lib/fonts/l049013t.pfa | 1598 ++ client/shared/lib/fonts/l049016t.pfa | 1582 ++ client/shared/lib/fonts/l049033t.pfa | 1735 ++ client/shared/lib/fonts/l049036t.pfa | 1613 ++ client/shared/lib/fonts/micro_40_50.qpf | Bin 0 -> 1602 bytes client/shared/lib/fonts/unifont_160_50.qpf | Bin 0 -> 1215089 bytes client/shared/lib/grub4dos/badgrub.exe | Bin 0 -> 210827 bytes client/shared/lib/grub4dos/bootlace.com | Bin 0 -> 37092 bytes client/shared/lib/grub4dos/config.sys | 6 + client/shared/lib/grub4dos/default | 46 + client/shared/lib/grub4dos/grldr | Bin 0 -> 195435 bytes client/shared/lib/grub4dos/grldr.mbr | Bin 0 -> 9216 bytes client/shared/lib/grub4dos/grub.exe | Bin 0 -> 212363 bytes client/shared/lib/grub4dos/grub.pif | Bin 0 -> 967 bytes client/shared/lib/grub4dos/hmload.com | Bin 0 -> 1856 bytes client/shared/lib/grub4dos/menu.lst | 83 + client/shared/lib/modules/psmouse.ko | Bin 0 -> 78700 bytes client/shared/lib/pci.ids | 17910 +++++++++++++++++++ client/shared/scripts/README.es.txt | 38 + client/shared/scripts/bootLinux | 35 + client/shared/scripts/bootOs | 45 + client/shared/scripts/bootWindows | 30 + client/shared/scripts/cloneRemoteFromMaster | 215 + client/shared/scripts/createImage | 59 + client/shared/scripts/createLogicalPartitions | 3 + client/shared/scripts/createPrimaryPartitions | 3 + client/shared/scripts/deployImage | 20 + client/shared/scripts/formatFs | 19 + client/shared/scripts/getFsType | 3 + client/shared/scripts/getIpAddress | 3 + client/shared/scripts/getOsVersion | 3 + client/shared/scripts/initCache | 60 + client/shared/scripts/listHardwareInfo | 24 + client/shared/scripts/listPrimaryPartitions | 3 + client/shared/scripts/listSoftwareInfo | 30 + client/shared/scripts/menuBrowser | 12 + client/shared/scripts/ogUpdateBootCache.sh | 7 + client/shared/scripts/poweroff | 18 + client/shared/scripts/reboot | 17 + client/shared/scripts/remoteConsole | 22 + client/shared/scripts/restoreImage | 89 + client/shared/scripts/sendFileMcast | 56 + client/shared/scripts/updateCache | 96 + doc/INSTALL.es.txt | 7 +- installer/INSTALL.es.txt | 4 +- installer/opengnsys_installer.sh | 38 +- installer/opengnsys_uninstall.sh | 5 +- 293 files changed, 50523 insertions(+), 50527 deletions(-) delete mode 100644 client/boot/README.es.txt delete mode 100755 client/boot/initrd-generator delete mode 100755 client/boot/ogClientNfs-generator.lib delete mode 100644 client/boot/udeblist-jaunty.conf delete mode 100644 client/boot/udeblist-karmic.conf delete mode 100644 client/boot/udeblist-lucid.conf delete mode 100644 client/boot/udeblist-maverick.conf delete mode 120000 client/boot/udeblist.conf delete mode 100755 client/boot/upgrade-clients-udeb.sh create mode 100644 client/initrd-tools/README.es.txt create mode 100755 client/initrd-tools/initrd-generator create mode 100755 client/initrd-tools/ogClientNfs-generator.lib create mode 100644 client/initrd-tools/udeblist-jaunty.conf create mode 100644 client/initrd-tools/udeblist-karmic.conf create mode 100644 client/initrd-tools/udeblist-lucid.conf create mode 100644 client/initrd-tools/udeblist-maverick.conf create mode 120000 client/initrd-tools/udeblist.conf create mode 100755 client/initrd-tools/upgrade-clients-udeb.sh delete mode 100644 client/nfsexport/README.es.txt delete mode 100755 client/nfsexport/bin/EACInterfaces delete mode 100755 client/nfsexport/bin/browser delete mode 100755 client/nfsexport/bin/ogAdmClient delete mode 100755 client/nfsexport/etc/init/default.sh delete mode 100755 client/nfsexport/etc/init/defaultTESTING.sh delete mode 120000 client/nfsexport/etc/lang.es_ES.UTF-8.conf delete mode 100644 client/nfsexport/etc/lang.es_ES.conf delete mode 100755 client/nfsexport/etc/preinit/default.sh delete mode 100755 client/nfsexport/etc/preinit/defaultTESTING.sh delete mode 100755 client/nfsexport/etc/preinit/fileslinks.sh.NoUsed delete mode 100755 client/nfsexport/etc/preinit/loadenviron.sh delete mode 100755 client/nfsexport/etc/preinit/loadenvironTESTING.sh delete mode 100755 client/nfsexport/etc/preinit/loadmodules.sh delete mode 100755 client/nfsexport/etc/preinit/loadmodulesTESTING.sh delete mode 100755 client/nfsexport/etc/preinit/loadudeb.sh.NoUsed delete mode 100755 client/nfsexport/etc/preinit/metadevs.sh.NoUsed delete mode 100755 client/nfsexport/lib/fonts/DejaVuSans-Bold.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSans-BoldOblique.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSans-Oblique.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSans.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSansMono-Bold.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSansMono-BoldOblique.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSansMono-Oblique.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSansMono.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSerif-Bold.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSerif-BoldOblique.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSerif-Oblique.ttf delete mode 100755 client/nfsexport/lib/fonts/DejaVuSerif.ttf delete mode 100755 client/nfsexport/lib/fonts/README delete mode 100755 client/nfsexport/lib/fonts/UTBI____.pfa delete mode 100755 client/nfsexport/lib/fonts/UTB_____.pfa delete mode 100755 client/nfsexport/lib/fonts/UTI_____.pfa delete mode 100755 client/nfsexport/lib/fonts/UTRG____.pfa delete mode 100755 client/nfsexport/lib/fonts/Vera.ttf delete mode 100755 client/nfsexport/lib/fonts/VeraBI.ttf delete mode 100755 client/nfsexport/lib/fonts/VeraBd.ttf delete mode 100755 client/nfsexport/lib/fonts/VeraIt.ttf delete mode 100755 client/nfsexport/lib/fonts/VeraMoBI.ttf delete mode 100755 client/nfsexport/lib/fonts/VeraMoBd.ttf delete mode 100755 client/nfsexport/lib/fonts/VeraMoIt.ttf delete mode 100755 client/nfsexport/lib/fonts/VeraMono.ttf delete mode 100755 client/nfsexport/lib/fonts/VeraSe.ttf delete mode 100755 client/nfsexport/lib/fonts/VeraSeBd.ttf delete mode 100755 client/nfsexport/lib/fonts/c0419bt_.pfb delete mode 100755 client/nfsexport/lib/fonts/c0582bt_.pfb delete mode 100755 client/nfsexport/lib/fonts/c0583bt_.pfb delete mode 100755 client/nfsexport/lib/fonts/c0611bt_.pfb delete mode 100755 client/nfsexport/lib/fonts/c0632bt_.pfb delete mode 100755 client/nfsexport/lib/fonts/c0633bt_.pfb delete mode 100755 client/nfsexport/lib/fonts/c0648bt_.pfb delete mode 100755 client/nfsexport/lib/fonts/c0649bt_.pfb delete mode 100755 client/nfsexport/lib/fonts/cour.pfa delete mode 100755 client/nfsexport/lib/fonts/courb.pfa delete mode 100755 client/nfsexport/lib/fonts/courbi.pfa delete mode 100755 client/nfsexport/lib/fonts/couri.pfa delete mode 100755 client/nfsexport/lib/fonts/cursor.pfa delete mode 100755 client/nfsexport/lib/fonts/fixed_120_50.qpf delete mode 100755 client/nfsexport/lib/fonts/fixed_70_50.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_100_50.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_100_50i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_100_75.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_100_75i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_120_50.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_120_50i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_120_75.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_120_75i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_140_50.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_140_50i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_140_75.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_140_75i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_180_50.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_180_50i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_180_75.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_180_75i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_240_50.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_240_50i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_240_75.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_240_75i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_80_50.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_80_50i.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_80_75.qpf delete mode 100755 client/nfsexport/lib/fonts/helvetica_80_75i.qpf delete mode 100755 client/nfsexport/lib/fonts/japanese_230_50.qpf delete mode 100755 client/nfsexport/lib/fonts/l047013t.pfa delete mode 100755 client/nfsexport/lib/fonts/l047016t.pfa delete mode 100755 client/nfsexport/lib/fonts/l047033t.pfa delete mode 100755 client/nfsexport/lib/fonts/l047036t.pfa delete mode 100755 client/nfsexport/lib/fonts/l048013t.pfa delete mode 100755 client/nfsexport/lib/fonts/l048016t.pfa delete mode 100755 client/nfsexport/lib/fonts/l048033t.pfa delete mode 100755 client/nfsexport/lib/fonts/l048036t.pfa delete mode 100755 client/nfsexport/lib/fonts/l049013t.pfa delete mode 100755 client/nfsexport/lib/fonts/l049016t.pfa delete mode 100755 client/nfsexport/lib/fonts/l049033t.pfa delete mode 100755 client/nfsexport/lib/fonts/l049036t.pfa delete mode 100755 client/nfsexport/lib/fonts/micro_40_50.qpf delete mode 100755 client/nfsexport/lib/fonts/unifont_160_50.qpf delete mode 100644 client/nfsexport/lib/grub4dos/badgrub.exe delete mode 100755 client/nfsexport/lib/grub4dos/bootlace.com delete mode 100644 client/nfsexport/lib/grub4dos/config.sys delete mode 100644 client/nfsexport/lib/grub4dos/default delete mode 100644 client/nfsexport/lib/grub4dos/grldr delete mode 100644 client/nfsexport/lib/grub4dos/grldr.mbr delete mode 100644 client/nfsexport/lib/grub4dos/grub.exe delete mode 100644 client/nfsexport/lib/grub4dos/grub.pif delete mode 100644 client/nfsexport/lib/grub4dos/hmload.com delete mode 100644 client/nfsexport/lib/grub4dos/menu.lst delete mode 100644 client/nfsexport/lib/modules/psmouse.ko delete mode 100644 client/nfsexport/lib/pci.ids delete mode 100644 client/nfsexport/scripts/README.es.txt delete mode 100755 client/nfsexport/scripts/bootLinux delete mode 100755 client/nfsexport/scripts/bootOs delete mode 100755 client/nfsexport/scripts/bootWindows delete mode 100755 client/nfsexport/scripts/cloneRemoteFromMaster delete mode 100755 client/nfsexport/scripts/createImage delete mode 100755 client/nfsexport/scripts/createLogicalPartitions delete mode 100755 client/nfsexport/scripts/createPrimaryPartitions delete mode 100755 client/nfsexport/scripts/deployImage delete mode 100755 client/nfsexport/scripts/formatFs delete mode 100755 client/nfsexport/scripts/getFsType delete mode 100755 client/nfsexport/scripts/getIpAddress delete mode 100755 client/nfsexport/scripts/getOsVersion delete mode 100755 client/nfsexport/scripts/initCache delete mode 100755 client/nfsexport/scripts/listHardwareInfo delete mode 100755 client/nfsexport/scripts/listPrimaryPartitions delete mode 100755 client/nfsexport/scripts/listSoftwareInfo delete mode 100755 client/nfsexport/scripts/menuBrowser delete mode 100755 client/nfsexport/scripts/ogUpdateBootCache.sh delete mode 100755 client/nfsexport/scripts/poweroff delete mode 100755 client/nfsexport/scripts/reboot delete mode 100755 client/nfsexport/scripts/remoteConsole delete mode 100755 client/nfsexport/scripts/restoreImage delete mode 100755 client/nfsexport/scripts/sendFileMcast delete mode 100755 client/nfsexport/scripts/updateCache create mode 100644 client/shared/README.es.txt create mode 100755 client/shared/bin/EACInterfaces create mode 100755 client/shared/bin/browser create mode 100755 client/shared/bin/ogAdmClient create mode 100755 client/shared/etc/init/default.sh create mode 100755 client/shared/etc/init/defaultTESTING.sh create mode 120000 client/shared/etc/lang.es_ES.UTF-8.conf create mode 100644 client/shared/etc/lang.es_ES.conf create mode 100755 client/shared/etc/preinit/default.sh create mode 100755 client/shared/etc/preinit/defaultTESTING.sh create mode 100755 client/shared/etc/preinit/fileslinks.sh.NoUsed create mode 100755 client/shared/etc/preinit/loadenviron.sh create mode 100755 client/shared/etc/preinit/loadenvironTESTING.sh create mode 100755 client/shared/etc/preinit/loadmodules.sh create mode 100755 client/shared/etc/preinit/loadmodulesTESTING.sh create mode 100755 client/shared/etc/preinit/loadudeb.sh.NoUsed create mode 100755 client/shared/etc/preinit/metadevs.sh.NoUsed create mode 100755 client/shared/lib/fonts/DejaVuSans-Bold.ttf create mode 100755 client/shared/lib/fonts/DejaVuSans-BoldOblique.ttf create mode 100755 client/shared/lib/fonts/DejaVuSans-Oblique.ttf create mode 100755 client/shared/lib/fonts/DejaVuSans.ttf create mode 100755 client/shared/lib/fonts/DejaVuSansMono-Bold.ttf create mode 100755 client/shared/lib/fonts/DejaVuSansMono-BoldOblique.ttf create mode 100755 client/shared/lib/fonts/DejaVuSansMono-Oblique.ttf create mode 100755 client/shared/lib/fonts/DejaVuSansMono.ttf create mode 100755 client/shared/lib/fonts/DejaVuSerif-Bold.ttf create mode 100755 client/shared/lib/fonts/DejaVuSerif-BoldOblique.ttf create mode 100755 client/shared/lib/fonts/DejaVuSerif-Oblique.ttf create mode 100755 client/shared/lib/fonts/DejaVuSerif.ttf create mode 100755 client/shared/lib/fonts/README create mode 100755 client/shared/lib/fonts/UTBI____.pfa create mode 100755 client/shared/lib/fonts/UTB_____.pfa create mode 100755 client/shared/lib/fonts/UTI_____.pfa create mode 100755 client/shared/lib/fonts/UTRG____.pfa create mode 100755 client/shared/lib/fonts/Vera.ttf create mode 100755 client/shared/lib/fonts/VeraBI.ttf create mode 100755 client/shared/lib/fonts/VeraBd.ttf create mode 100755 client/shared/lib/fonts/VeraIt.ttf create mode 100755 client/shared/lib/fonts/VeraMoBI.ttf create mode 100755 client/shared/lib/fonts/VeraMoBd.ttf create mode 100755 client/shared/lib/fonts/VeraMoIt.ttf create mode 100755 client/shared/lib/fonts/VeraMono.ttf create mode 100755 client/shared/lib/fonts/VeraSe.ttf create mode 100755 client/shared/lib/fonts/VeraSeBd.ttf create mode 100755 client/shared/lib/fonts/c0419bt_.pfb create mode 100755 client/shared/lib/fonts/c0582bt_.pfb create mode 100755 client/shared/lib/fonts/c0583bt_.pfb create mode 100755 client/shared/lib/fonts/c0611bt_.pfb create mode 100755 client/shared/lib/fonts/c0632bt_.pfb create mode 100755 client/shared/lib/fonts/c0633bt_.pfb create mode 100755 client/shared/lib/fonts/c0648bt_.pfb create mode 100755 client/shared/lib/fonts/c0649bt_.pfb create mode 100755 client/shared/lib/fonts/cour.pfa create mode 100755 client/shared/lib/fonts/courb.pfa create mode 100755 client/shared/lib/fonts/courbi.pfa create mode 100755 client/shared/lib/fonts/couri.pfa create mode 100755 client/shared/lib/fonts/cursor.pfa create mode 100755 client/shared/lib/fonts/fixed_120_50.qpf create mode 100755 client/shared/lib/fonts/fixed_70_50.qpf create mode 100755 client/shared/lib/fonts/helvetica_100_50.qpf create mode 100755 client/shared/lib/fonts/helvetica_100_50i.qpf create mode 100755 client/shared/lib/fonts/helvetica_100_75.qpf create mode 100755 client/shared/lib/fonts/helvetica_100_75i.qpf create mode 100755 client/shared/lib/fonts/helvetica_120_50.qpf create mode 100755 client/shared/lib/fonts/helvetica_120_50i.qpf create mode 100755 client/shared/lib/fonts/helvetica_120_75.qpf create mode 100755 client/shared/lib/fonts/helvetica_120_75i.qpf create mode 100755 client/shared/lib/fonts/helvetica_140_50.qpf create mode 100755 client/shared/lib/fonts/helvetica_140_50i.qpf create mode 100755 client/shared/lib/fonts/helvetica_140_75.qpf create mode 100755 client/shared/lib/fonts/helvetica_140_75i.qpf create mode 100755 client/shared/lib/fonts/helvetica_180_50.qpf create mode 100755 client/shared/lib/fonts/helvetica_180_50i.qpf create mode 100755 client/shared/lib/fonts/helvetica_180_75.qpf create mode 100755 client/shared/lib/fonts/helvetica_180_75i.qpf create mode 100755 client/shared/lib/fonts/helvetica_240_50.qpf create mode 100755 client/shared/lib/fonts/helvetica_240_50i.qpf create mode 100755 client/shared/lib/fonts/helvetica_240_75.qpf create mode 100755 client/shared/lib/fonts/helvetica_240_75i.qpf create mode 100755 client/shared/lib/fonts/helvetica_80_50.qpf create mode 100755 client/shared/lib/fonts/helvetica_80_50i.qpf create mode 100755 client/shared/lib/fonts/helvetica_80_75.qpf create mode 100755 client/shared/lib/fonts/helvetica_80_75i.qpf create mode 100755 client/shared/lib/fonts/japanese_230_50.qpf create mode 100755 client/shared/lib/fonts/l047013t.pfa create mode 100755 client/shared/lib/fonts/l047016t.pfa create mode 100755 client/shared/lib/fonts/l047033t.pfa create mode 100755 client/shared/lib/fonts/l047036t.pfa create mode 100755 client/shared/lib/fonts/l048013t.pfa create mode 100755 client/shared/lib/fonts/l048016t.pfa create mode 100755 client/shared/lib/fonts/l048033t.pfa create mode 100755 client/shared/lib/fonts/l048036t.pfa create mode 100755 client/shared/lib/fonts/l049013t.pfa create mode 100755 client/shared/lib/fonts/l049016t.pfa create mode 100755 client/shared/lib/fonts/l049033t.pfa create mode 100755 client/shared/lib/fonts/l049036t.pfa create mode 100755 client/shared/lib/fonts/micro_40_50.qpf create mode 100755 client/shared/lib/fonts/unifont_160_50.qpf create mode 100644 client/shared/lib/grub4dos/badgrub.exe create mode 100755 client/shared/lib/grub4dos/bootlace.com create mode 100644 client/shared/lib/grub4dos/config.sys create mode 100644 client/shared/lib/grub4dos/default create mode 100644 client/shared/lib/grub4dos/grldr create mode 100644 client/shared/lib/grub4dos/grldr.mbr create mode 100644 client/shared/lib/grub4dos/grub.exe create mode 100644 client/shared/lib/grub4dos/grub.pif create mode 100644 client/shared/lib/grub4dos/hmload.com create mode 100644 client/shared/lib/grub4dos/menu.lst create mode 100644 client/shared/lib/modules/psmouse.ko create mode 100644 client/shared/lib/pci.ids create mode 100644 client/shared/scripts/README.es.txt create mode 100755 client/shared/scripts/bootLinux create mode 100755 client/shared/scripts/bootOs create mode 100755 client/shared/scripts/bootWindows create mode 100755 client/shared/scripts/cloneRemoteFromMaster create mode 100755 client/shared/scripts/createImage create mode 100755 client/shared/scripts/createLogicalPartitions create mode 100755 client/shared/scripts/createPrimaryPartitions create mode 100755 client/shared/scripts/deployImage create mode 100755 client/shared/scripts/formatFs create mode 100755 client/shared/scripts/getFsType create mode 100755 client/shared/scripts/getIpAddress create mode 100755 client/shared/scripts/getOsVersion create mode 100755 client/shared/scripts/initCache create mode 100755 client/shared/scripts/listHardwareInfo create mode 100755 client/shared/scripts/listPrimaryPartitions create mode 100755 client/shared/scripts/listSoftwareInfo create mode 100755 client/shared/scripts/menuBrowser create mode 100755 client/shared/scripts/ogUpdateBootCache.sh create mode 100755 client/shared/scripts/poweroff create mode 100755 client/shared/scripts/reboot create mode 100755 client/shared/scripts/remoteConsole create mode 100755 client/shared/scripts/restoreImage create mode 100755 client/shared/scripts/sendFileMcast create mode 100755 client/shared/scripts/updateCache diff --git a/client/README.es.txt b/client/README.es.txt index 83ee38ce..2fbe423e 100644 --- a/client/README.es.txt +++ b/client/README.es.txt @@ -1,12 +1,12 @@ -OpenGNSys Client README +OpenGnSys Client README ========================= Este directorio contiene la estructura de datos del cliente OpenGNSys. -- boot gestión del proceso de arranque de los clientes. -- browser código fuente del cliente gráfico OpenGNSys Browser. -- engine funciones del motor (se instalará en el servidor en - /opt/opengneys/client/lib/engine). -- nfsroot estructura principal del cliente exportado por NFS - (se instalará en el servidor en /opt/opengneys/client). +- initrd-tools herramientas de eneración del cliente Initrd antiguo +- browser código fuente del cliente gráfico OpenGNSys Browser. +- engine funciones del motor (se instalará en el servidor en + /opt/opengneys/client/lib/engine). +- shared estructura principal del cliente exportado por NFS o Samba + (se instalará en el servidor en /opt/opengneys/client). diff --git a/client/boot/README.es.txt b/client/boot/README.es.txt deleted file mode 100644 index ea332621..00000000 --- a/client/boot/README.es.txt +++ /dev/null @@ -1,22 +0,0 @@ -OpenGNSys Client Boot README -============================== - -En este directorio se incluyen los scripts y ficheros, ejecutables -directamente desde el servidor de OpenGNSys, y que son necesarios -para configurar los procesos de arranque de los clientes. - - -initrd-generator (copiar en /opt/opengnsys/bin) - Script de generación de los básicos de arranque del cliente - (initrd y kernel). - -upgrade-clients-udeb.sh (copiar en /opt/opengnsys/bin) - Script de descarga de paquetes udeb, que serán incluidos en - el directorio de librerías importadas por los clientes. - -udeblist.conf (copiar en /opt/opengnsys/etc) - Fichero de configuración que incluye la lista de paquetes - udeb que deben ser descargados o eliminados. - El formato de las líneas del fichero es: - install:paquete - remove:paquete diff --git a/client/boot/initrd-generator b/client/boot/initrd-generator deleted file mode 100755 index 7ec1be9d..00000000 --- a/client/boot/initrd-generator +++ /dev/null @@ -1,314 +0,0 @@ -#!/bin/bash -# Generador de ficheros "kernel" e "initrd.gz" para arranque de cliente OpenGnSys - -test "$(lsb_release -is 2>/dev/null)" == "Ubuntu" && DIST="$(lsb_release -cs)" -DIST=${DIST:-"lucid"} # Si no se detecta, distribución Ubuntu por defecto. -ARCH=$(arch) # Arquitectura del sistema: i386 (32 bits), amd64 (64 bits). -ARCH=${ARCH:-"$(uname -m)"} # Corrección para Ubuntu Jaunty. -ARCH=${ARCH/i[4-6]86/i386} -ARCH=${ARCH/x86_64/amd64} -URL=http://archive.ubuntu.com/ubuntu/dists/$DIST-updates/main/installer-$ARCH/current/images/netboot/ubuntu-installer/$ARCH -if [ "$TMP" = "" ] ; then TMP=/tmp ; fi -TMPINITRD=$TMP/initrd -NEWROOT=$TMPINITRD/newroot -ANTERIORPWD=$PWD -DEST=$PWD -LINUX=1 -CHROOTINITSCRIPT=/oginit -INITSCRIPT=$NEWROOT$CHROOTINITSCRIPT - -# Comprueba los argumentos pasados para modificar los valores por defecto -function parsearParametros -{ - while [ $# -ne 0 ];do - case $1 in - ("-d") - shift - #URL=http://people.debian.org/~joeyh/d-i/images/daily/netboot/debian-installer/i386/ - URL=http://ftp.nl.debian.org/debian/dists/testing/main/installer-$ARCH/current/images/netboot/debian-installer/$ARCH/ - ;; - ("-v") - shift - if [ $# -eq 0 ];then - echo "Error en los argumentos" - return -1 - else - DIST=$1 - URL=http://archive.ubuntu.com/ubuntu/dists/$DIST-updates/main/installer-$ARCH/current/images/netboot/ubuntu-installer/$ARCH - shift - fi - ;; - ("-l") - shift - ;; - ("-t") - shift - if [ $# -eq 0 ];then - echo "Error en los argumentos" - return -1 - else - DEST=$1 - shift - fi - ;; - esac - done -} - -function descargar -{ - # Borramos si existe el directorio temporal - if [ -d $TMPINITRD ]; then - rm -r $TMPINITRD - fi - # Creamos directorio temporal y nos vamos alli - mkdir -p $TMPINITRD - cd $TMPINITRD - - # Ficheros a descargar: Initrd y Kernel (si está habilitado). - FILES="initrd.gz" - [ $LINUX ] && FILES="$FILES linux" - - for f in $FILES; do - # Borrar fichero anterior - [ -f "$f" ] && rm -f $f - # Descargar fichero (intentar primero actualizaciones). - wget $URL/$f || wget ${URL/-updates/}/$f - if [ $? != 0 ]; then - echo "Error no se ha podido descargar el fichero $f" - exit 1 - fi - done -} - -# Descomprimimos el initrd -function descomprimir -{ - if [ ! -f $TMPINITRD/initrd.gz ]; then - echo No se encuentra el initrd.gz - exit -1 - fi - - if [ -f $NEWROOT ];then - rm -rf $NEWROOT - fi - - mkdir -p $NEWROOT - cd $NEWROOT - - gzip -dc $TMPINITRD/initrd.gz | cpio -id -} - -# Borrar todos los scripts del directorio actual -function borrarScripts -{ - # Primero los hacemos con los enlaces para que no se produzcan errores si borramos a lo que apunta primero - for i in `ls -F -1 | grep @ | awk -F @ '{print $1}'`; do - if [ $(file $i -L | grep "shell script" | wc -l) -gt 0 ]; then - rm $i - fi - done - - # Ahora lo hacemos con todos los ejecutables - for i in `ls`; do - if [ $(file $i | grep "shell script" | wc -l) -gt 0 ]; then - rm $i - fi - done -} - -# Borra todos los ejecutables que enlacen con la libreria debian-installer -function borrarEjecutablesDebinstall -{ - # Primero lo hacemos con los enlaces para que no se produzcan errores si borramos a lo que apunta primero - for i in `ls -F -1 | grep @ | awk -F @ '{print $1}'`; do - if [ $(ldd $i | grep -e libdebian-installer -e libdebconf | wc -l) -gt 0 ]; then - rm $i - fi - done - - # Ahora lo hacemos con todos los ejecutables - for i in `ls`; do - if [ $(ldd $i | grep -e libdebian-installer -e libdebconf | wc -l) -gt 0 ]; then - rm $i - fi - done -} - -# Elimina todos los fichero innecesarios del initrd -function purgarFicherosDebian -{ - mkdir -p $NEWROOT - cd $NEWROOT - - rm init - - # Pasamos por todos los directorios y vamos borrando lo innecesario - cd bin/ - borrarScripts - borrarEjecutablesDebinstall - - cd ../etc/ - rm -rf cdebconf.conf default-release lsb-release preseed_aliases udebs-source - - cd ../lib/ - rm -rf chroot-setup.sh debian-installer* kickseed main-menu.d preseed libdebian-installer* - - cd ../sbin/ - borrarScripts - borrarEjecutablesDebinstall - - cd ../usr/bin/ - borrarScripts - borrarEjecutablesDebinstall - - cd ../lib/ - rm -rf base-installer.d debian-installer finish-install.d libdebconfclient* cdebconf fetch-url net-retriever post-base-installer.d - - # Solo queda un enlace simbolico que ya no apunta a nada - cd ../sbin/ - rm -rf * - - cd ../share/ - rm -rf debconf keyrings save-logs - - cd ../../var/ - rm -rf cache/anna/ spool/kickseed/ - - cd lib/ - rm -rf apt-install cdebconf dpkg - - cd ../.. -} - -# Le agrega los archivos necesarios para que arranque de otra manera -function agregarNuevoArranque -{ - cd $NEWROOT - - cd etc/ - # Script de arranque de OpenGnSys Client. - perl -i -p -e "s/\/sbin\/debian-installer\$/${CHROOTINITSCRIPT//\//\/}/" inittab - # Impedir usar shell en terminales 2 y 3 - # (NOTA: comentar la siguiente línea para sistemas en pruebas). - #perl -n -i -e "print unless /^tty[23]/" inittab - - # Script inicial que ejecuta el resto de scripts de /etc/rcS.d/ - #echo "#! /bin/sh" >> rc - #echo "for script in /etc/rcS.d/S[0-9][0-9]*; do if [ -x $script ]; then $script fi done" >> rc - #chmod +x rc - - # Agregamos para que ejecute el script anterior lo primero - #echo "::sysinit:/etc/init.d/rc" > inittab - # Que ejecute el fichero /init cuando se reinicio el proceso init - #echo "::restart:/sbin/init" >> inittab - # Que funciona el control alt supr - #echo "::ctrlaltdel:/sbin/reboot" >> inittab - - # Cosas que hacer si se apaga - #echo "::shutdown:/bin/umount -a -r" >> inittab - #echo "::shutdown:/sbin/swapoff -a" >> inittab - - # Primero ejecutamos el dhcp - VERSION=$(cat /opt/opengnsys/doc/VERSION.txt 2>/dev/null) - VERSION=${VERSION:-"OpenGnSys"} - cat << FIN > $INITSCRIPT -#! /bin/sh -echo -echo "Arranque cliente $VERSION" -echo -set -e -# Exportando variables -for i in \$(cat /proc/cmdline); -do - echo \$i | grep -q "=" && export \$i -done -# Configurar la red -if [ "\$ip" == "dhcp" ]; then - echo "Configurando red por DHCP" - mkdir -p /var/state/dhcp - /sbin/dhclient 2>/dev/null -fi -# Modo de trabajo del cliente: on-line/off-line -status="\${status:-online}" -echo "Comprobando modo de trabajo \$status" -case "\$status" in - online) - if [ -z "\$repo" ] - then - SERVERIP=\$(grep -h dhcp-server-identifier /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1) - else - SERVERIP="\$repo" - fi - echo "Preparando conexión con el Repositorio \$SERVERIP" - # determinar el paramtro de boot para los permisos de los montajes de imagenes. - BOOTMODE=\${boot:-"user"} - case "\$BOOTMODE" in - admin) MOUNTOPTS="rw" ;; - user) MOUNTOPTS="ro" ;; - *) echo "Aviso: Modo de arranque desconocido." - BOOTMODE="user" - MOUNTOPTS="ro" ;; - esac - # Montamos el resto de cosas necesarias - echo "Montar repo en modo \$BOOTMODE" - mkdir -p /opt/opengnsys - DEFAULTOPTS="nolock,proto=tcp" - if \$(mount | grep -q " /opt/opengnsys "); then - DEFAULTOPTS="remount,\$DEFAULTOPTS" - fi - mount -t nfs -o "\$DEFAULTOPTS,ro" \$SERVERIP:/opt/opengnsys/client /opt/opengnsys - mount -t nfs -o "\$DEFAULTOPTS,rw" \$SERVERIP:/opt/opengnsys/log/clients /opt/opengnsys/log - mount -t nfs -o "\$DEFAULTOPTS,\$MOUNTOPTS" \$SERVERIP:/opt/opengnsys/images /opt/opengnsys/images - ;; - offline) - echo "Off-line mode." - ;; -esac -/opt/opengnsys/etc/preinit/default.sh -FIN - chmod +x $INITSCRIPT -} - -# Función para corregir problemas detectados con módulos del kernel. -function configurarModulos -{ - cd $NEWROOT/lib/modules/* - - case "$DIST" in - lucid) # Corregir problema de frame-buffer en Lucid. - perl -p -i -e 's/vga16fb/vesafb/g' modules.alias ;; - *) ;; - esac -} - -function comprimir -{ - cd $NEWROOT - - if [ $? = 1 ] ; then - exit -1 - fi - - find ./ | cpio -H newc -o > $TMPINITRD/new-initrd - cd $TMPINITRD - gzip -9 new-initrd -} - -function finalizar -{ - cd $ANTERIORPWD - mv $TMPINITRD/new-initrd.gz $DEST/initrd.gz - if [ $LINUX ] ; then - mv $TMPINITRD/linux $DEST/linux - fi -} - -parsearParametros $@ -descargar -descomprimir -#purgarFicherosDebian -agregarNuevoArranque -configurarModulos -comprimir -finalizar diff --git a/client/boot/ogClientNfs-generator.lib b/client/boot/ogClientNfs-generator.lib deleted file mode 100755 index a077f4cb..00000000 --- a/client/boot/ogClientNfs-generator.lib +++ /dev/null @@ -1,139 +0,0 @@ - -function BuildOSBase() { -#/** @function BuildOSBase: @brief instala los componentes base de los opengnsys OS y muestra aquellos que hay que compilar. -#@param $1 str_versionLinux -#@param ejemplo BuildEACOSBase ubuntu904 -#@return -#@warning Salidas de errores no determinada -#@attention -#@version 0.1 Date: 02/05/2009 Author Antonio J. Doblas Viso. Universidad de Malaga -#@note version importada desde EAC para su adaptación a opengnsys. No testeada -#*/ -# -if [ $# = 0 ] -then - echo"InstallEACOSBase instala los componentes base de los EAC OS." - echo "sintaxis: InstallEACOSBASE strVersionLinux --- Ejemplo: InstallEACOSBase ubuntu0904 " - return -fi -if [ $# = 1 ] -then - case $1 in - "ubuntu0904") - cp -ra /etc/udev/rules.d /etc/udev/rules.d-old - rm /etc/udev/rules.d/70-persistent-net.rules - echo "###########START Especificos EAC############ " >> /etc/apt/sources.list - echo "deb http://free.nchc.org.tw/ubuntu jaunty-security main restricted universe multiverse" >> /etc/apt/sources.list - echo "deb http://free.nchc.org.tw/drbl-core drbl stable" >> /etc/apt/sources.list - echo "deb http://www.geekconnection.org/remastersys/repository ubuntu/" >> /etc/apt/sources.list - echo "###########END Especificos EAC############ " >> /etc/apt/sources.list - apt-get update - #apt-get install xorg-dev xorg lxde qingy roxterm - #apt-get install firefox links midbrowser scite - #apt-get install build-essential cmake m4 autoconf gettext libbz2-dev - apt-get install nfs-common nfs-kernel-server openssh-server sshfs - apt-get install reiser4progs hfsplus curl - apt-get install fusesmb smbnetfs smbfs subversion - apt-get install gkrellm saidar htop iptraf vnstat ethstatus darkstat ncdu xdiskusage iotop lshw lshw-gtk conky - apt-get install dcfldd ddrescue di disktype dmraid hdparm sdparm hexedit lftp lsscsi lshw mc myrescue testdisk hwinfo - apt-get install partimage ntfsprogs partclone mysql-client php5 php5-cli php5-cgi php5-mysql registry-tools sysv-rc-conf kexec-tools gparted parted parted-doc gnu-fdisk fatresize gparted - apt-get install lzop ethtool etherwake remastersys bfr fbgrab fbset ksh registry-tools netpipes - apt-get install drbl-partimage drbl-chntpw drbl-ntfsprogs drbl-lzop - # desactivamos por si acaso alguno servicios, que en la distribucion base no son necesarios - #/etc/init.d/apache2 stop && update-rc.d -f apache2 remove - #update-rc.d -f gdm remove - #apt-get install lighttpd - #/etc/init.d/lighttpd stop && update-rc.d -f lighttpd remove - ;; - esac -fi - -if [ $# = 1 ] -then - - echo "creando la estrucutra de datos" - mkdir -p /opt/opengnsys/{bin,etc,log,lib/{engine/bin,modules},images,init} - cd /root/ && svn co svn://www.informatica.us.es:3690/eac-hidra -fi - - -if [ $# = 1 ] -then - read -p "pausa para configurar el framebuffer: abre una nueva consola y segue estas intrucciones, luego pulsa enter" - echo "Activar el framebuffer: abre una consola y realiza estas operaciones" - echo "/etc/modprobe.d/blacklist-framebuffer => le comentamos las lineas de vesafb, vga16fb y radeonfb" - echo "/etc/initramfs-tools/modules => agregamos en una linea cada una de estas fbcon vesafb vga16b" - echo "actualizamos con # update-initramfs -u" - echo "acivadmos el framebuffer en /boot/grub/menu.lst y en el kernel que deseemos a�adimos vga=791" -fi - -if [ $# = 1 ] -then - read -p "pausa para configurar el framebuffer: abre una nueva consola y segue estas intrucciones, luego pulsa enter" - echo "configurar el lighttd" - read -p "press enter" -fi - -if [ $# = 1 ] -then - importclient=/opt/opengnsys - echo "configurar el /etc/bash.bashrc" - echo "####### EAC ##########" >> /etc/bash.bashrc - echo "importclient=/opt/opengnsys" >> /etc/bash.bashrc - echo "export PATH=$PATH:/sbin/:/bin/:/opt/:/usr/local/sbin/:/usr/local/bin/:/usr/bin/:/usr/sbin/:/opt/opengnsys/" >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/Settings.lib >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/ATA.lib >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/Boot.lib >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/Deploy.lib >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/FileSystem.lib >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/PostConf.lib >> /etc/bash.bashrc -fi - -if [ $# = 1 ] -then - read -p "pausa para compilar los programas necesarios: abre una nueva consola y segue estas intrucciones, luego pulsa enter" - echo "estos hay que compilarlos estan dentro de source" - echo "partition saving http://partition-saving.com" - echo "mbuffer (http://www.maier-komor.de/mbuffer.html) requiere ksh" - echo "udp-cast 2008-09-14 http://udpcast.linux.lu/" - echo "ctorrent 3.3.2 http://www.rahul.net/dholmes/ctorrent/" - echo "wmi-client: https://launchpad.net/ubuntu/jaunty/+source/wmi/1:0.1.12-1" - echo "ms-sys http://ms-sys.sourceforge.net/" - echo "EACInterfaces copiar el binario a /usr/sbin" - echo NameCompany copiar a /usr/sbin" - echo NameNtpServer a /usr/sbin" -fi -} - - -function BuildOgClientNfs () { -#/** @function BuildOgClientNfs: @brief Genera una copia del sistema actual para convertirlo posteriormente en arranque pxe EAC. -#@param $1 str_DirectorioDestino -#@param $2 str_metodo (debootstrap o myfilsystem) -#@param ejemplo: BuildOgClientNfs /opt/opengnsys/tftpboot/ogClinent/ogClientNfs debootstrap -#@return: no definida -#@warning No controla que el el directorio destino debe estar montado en una particion distinta al sistema raiz. -#@attention -#@version 0.1 Date: 03/06/2009 Author Antonio J. Doblas Viso. Universidad de Malaga -#@note falta la creacion del kernel y el initrd -#*/ -if [ $# = 0 ] -then - echo"BuildOgClientNfs" - echo "sintaxis: BuildOfClientNfs str_path_contenedor str_metodo" - return -fi -if [ $# = 2 ] -then - if [ $2 = "myfilesystem" ] - then - cd / - cp -rav /. $1/. - cp -rav -/dev/. $1/dev/. - fi - if [ $2 = "debootstrap" ] - then - echo "debo" - fi -fi -} \ No newline at end of file diff --git a/client/boot/udeblist-jaunty.conf b/client/boot/udeblist-jaunty.conf deleted file mode 100644 index d5858518..00000000 --- a/client/boot/udeblist-jaunty.conf +++ /dev/null @@ -1,22 +0,0 @@ -install:cryptsetup-udeb -install:dmraid-udeb -install:dmsetup-udeb -install:e2fsprogs-udeb -install:fbset-udeb -install:fdisk-udeb -install:fuse-utils-udeb -install:jfsutils-udeb -install:kbd-udeb -install:lvm2-udeb -install:mdadm-udeb -install:mkreiserfs-udeb -install:ntfs-3g-udeb -install:ntfsprogs-udeb -install:openssh-client-udeb -install:openssh-server-udeb -install:parted-udeb -install:reiserfsprogs-udeb -install:xfsprogs-udeb -install:fs-core-modules-2.6.28-11-generic-di -install:mouse-modules-2.6.28-11-generic-di -remove:kernel-image-2.6.28-11-generic-di diff --git a/client/boot/udeblist-karmic.conf b/client/boot/udeblist-karmic.conf deleted file mode 100644 index 9ca151df..00000000 --- a/client/boot/udeblist-karmic.conf +++ /dev/null @@ -1,22 +0,0 @@ -install:cryptsetup-udeb -install:dmraid-udeb -install:dmsetup-udeb -install:e2fsprogs-udeb -install:fbset-udeb -install:fdisk-udeb -install:fuse-utils-udeb -install:jfsutils-udeb -install:kbd-udeb -install:lvm2-udeb -install:mdadm-udeb -install:mkreiserfs-udeb -install:ntfs-3g-udeb -install:ntfsprogs-udeb -install:openssh-client-udeb -install:openssh-server-udeb -install:parted-udeb -install:reiserfsprogs-udeb -install:xfsprogs-udeb -install:fs-core-modules-2.6.31-14-generic-di -install:mouse-modules-2.6.31-14-generic-di -remove:kernel-image-2.6.31-14-generic-di diff --git a/client/boot/udeblist-lucid.conf b/client/boot/udeblist-lucid.conf deleted file mode 100644 index dfb35622..00000000 --- a/client/boot/udeblist-lucid.conf +++ /dev/null @@ -1,31 +0,0 @@ -install:cryptsetup-udeb -install:dmidecode-udeb -install:dmraid-udeb -install:dmsetup-udeb -install:e2fsprogs-udeb -install:fbset-udeb -install:fdisk-udeb -install:fuse-utils-udeb -install:jfsutils-udeb -install:kbd-udeb -install:lvm2-udeb -install:lsb-release-udeb -install:mdadm-udeb -install:mkreiser4-udeb -install:mkreiserfs-udeb -install:ntfs-3g-udeb -install:ntfsprogs-udeb -install:openssh-client-udeb -install:openssh-server-udeb -install:parted-udeb -install:reiser4progs-udeb -install:reiserfsprogs-udeb -install:util-linux-udeb -install:xfsprogs-udeb -install:fs-core-modules-KERNELVERS-di -install:fs-secondary-modules-KERNELVERS-di -install:mouse-modules-KERNELVERS-di -install:pata-modules-KERNELVERS-di -install:sata-modules-KERNELVERS-di -install:scsi-modules-KERNELVERS-di -remove:kernel-image-KERNELVERS-di diff --git a/client/boot/udeblist-maverick.conf b/client/boot/udeblist-maverick.conf deleted file mode 100644 index d340ec65..00000000 --- a/client/boot/udeblist-maverick.conf +++ /dev/null @@ -1,28 +0,0 @@ -install:cryptsetup-udeb -install:dmraid-udeb -install:dmsetup-udeb -install:e2fsprogs-udeb -install:fbset-udeb -install:fdisk-udeb -install:fuse-utils-udeb -install:jfsutils-udeb -install:kbd-udeb -install:lvm2-udeb -install:lsb-release-udeb -install:mdadm-udeb -install:mkreiserfs-udeb -install:ntfs-3g-udeb -install:ntfsprogs-udeb -install:openssh-client-udeb -install:openssh-server-udeb -install:parted-udeb -install:reiserfsprogs-udeb -install:util-linux-udeb -install:xfsprogs-udeb -install:fs-core-modules-2.6.35-22-generic-di -install:fs-secondary-modules-2.6.35-22-generic-di -install:mouse-modules-2.6.35-22-generic-di -install:pata-modules-2.6.35-22-generic-di -install:sata-modules-2.6.35-22-generic-di -install:scsi-modules-2.6.35-22-generic-di -remove:kernel-image-2.6.35-22-generic-di diff --git a/client/boot/udeblist.conf b/client/boot/udeblist.conf deleted file mode 120000 index 4ab23c79..00000000 --- a/client/boot/udeblist.conf +++ /dev/null @@ -1 +0,0 @@ -udeblist-jaunty.conf \ No newline at end of file diff --git a/client/boot/upgrade-clients-udeb.sh b/client/boot/upgrade-clients-udeb.sh deleted file mode 100755 index afc5229e..00000000 --- a/client/boot/upgrade-clients-udeb.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -#@file upgrade-clients-udeb.sh -#@brief Actualiza los paquetes udeb que deben ser exportados a los clientes. -#@arg \c distrib - nombre de la distribución de Ubuntu (karmic, jaunty, ...). -#@note El script debe ser copiado a \c opengnsys/bin y el fichero de configuración a \c opengnsys/etc -#@note Formato del fichero \c udeb.list : {install|remove}:paquete - - -# Variables -PROG="$(basename $0)" -OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} -test "$(lsb_release -is 2>/dev/null)" == "Ubuntu" && DEFDISTRIB="$(lsb_release -cs)" -DEFDISTRIB=${DEFDISTRIB:-"lucid"} -DISTRIB=${1:-"$DEFDISTRIB"} # Si no se indica, usar distribución por defecto. -CFGFILE="$OPENGNSYS/etc/udeblist-$DISTRIB.conf" -OGUDEB="$OPENGNSYS/client/lib/udeb" -TMPUDEB="/tmp/udeb" -UDEBLIST="/etc/apt/sources.list.d/udeb.list" -KERNELVERS=$(strings $OPENGNSYS/tftpboot/linux | awk '/2.6.*generic/ {print $1}') - -# Comprobar fichero de configuración. -if [ ! -f "$CFGFILE" ]; then - echo "$PROG: No existe el fichero de configuración \"$CFGFILE\"" >&2 - exit 1 -fi -PACKAGES_INSTALL=$(awk -F: '$1~/install/ {print $2}' $CFGFILE) -PACKAGES_INSTALL=${PACKAGES_INSTALL//KERNELVERS/$KERNELVERS} -PACKAGES_REMOVE=$(awk -F: '$1~/remove/ {print $2}' $CFGFILE) -PACKAGES_REMOVE=${PACKAGES_REMOVE//KERNELVERS/$KERNELVERS} -if [ -z "$PACKAGES_INSTALL" ]; then - echo "$PROG: No hay paquetes para descargar." >&2 - exit 2 -fi - -# Crear configuración para apt-get -echo "deb http://archive.ubuntu.com/ubuntu/ $DISTRIB main/debian-installer universe/debian-installer" >$UDEBLIST -echo "deb http://archive.ubuntu.com/ubuntu/ $DISTRIB-updates main/debian-installer universe/debian-installer" >>$UDEBLIST -mkdir -p $TMPUDEB/partial -rm -f $TMPUDEB/*.udeb - -# Descargar paquetes udeb, borrar los descartables y moverlos al NFS. -apt-get update -apt-get install -y -o dir::cache::archives=$TMPUDEB -d $PACKAGES_INSTALL -for i in $PACKAGES_REMOVE; do - rm -f $TMPUDEB/${i}_*.udeb -done -rm -f $OGUDEB/*.udeb -mv $TMPUDEB/*.udeb $OGUDEB -rm -f $UDEBLIST - diff --git a/client/initrd-tools/README.es.txt b/client/initrd-tools/README.es.txt new file mode 100644 index 00000000..ea332621 --- /dev/null +++ b/client/initrd-tools/README.es.txt @@ -0,0 +1,22 @@ +OpenGNSys Client Boot README +============================== + +En este directorio se incluyen los scripts y ficheros, ejecutables +directamente desde el servidor de OpenGNSys, y que son necesarios +para configurar los procesos de arranque de los clientes. + + +initrd-generator (copiar en /opt/opengnsys/bin) + Script de generación de los básicos de arranque del cliente + (initrd y kernel). + +upgrade-clients-udeb.sh (copiar en /opt/opengnsys/bin) + Script de descarga de paquetes udeb, que serán incluidos en + el directorio de librerías importadas por los clientes. + +udeblist.conf (copiar en /opt/opengnsys/etc) + Fichero de configuración que incluye la lista de paquetes + udeb que deben ser descargados o eliminados. + El formato de las líneas del fichero es: + install:paquete + remove:paquete diff --git a/client/initrd-tools/initrd-generator b/client/initrd-tools/initrd-generator new file mode 100755 index 00000000..7ec1be9d --- /dev/null +++ b/client/initrd-tools/initrd-generator @@ -0,0 +1,314 @@ +#!/bin/bash +# Generador de ficheros "kernel" e "initrd.gz" para arranque de cliente OpenGnSys + +test "$(lsb_release -is 2>/dev/null)" == "Ubuntu" && DIST="$(lsb_release -cs)" +DIST=${DIST:-"lucid"} # Si no se detecta, distribución Ubuntu por defecto. +ARCH=$(arch) # Arquitectura del sistema: i386 (32 bits), amd64 (64 bits). +ARCH=${ARCH:-"$(uname -m)"} # Corrección para Ubuntu Jaunty. +ARCH=${ARCH/i[4-6]86/i386} +ARCH=${ARCH/x86_64/amd64} +URL=http://archive.ubuntu.com/ubuntu/dists/$DIST-updates/main/installer-$ARCH/current/images/netboot/ubuntu-installer/$ARCH +if [ "$TMP" = "" ] ; then TMP=/tmp ; fi +TMPINITRD=$TMP/initrd +NEWROOT=$TMPINITRD/newroot +ANTERIORPWD=$PWD +DEST=$PWD +LINUX=1 +CHROOTINITSCRIPT=/oginit +INITSCRIPT=$NEWROOT$CHROOTINITSCRIPT + +# Comprueba los argumentos pasados para modificar los valores por defecto +function parsearParametros +{ + while [ $# -ne 0 ];do + case $1 in + ("-d") + shift + #URL=http://people.debian.org/~joeyh/d-i/images/daily/netboot/debian-installer/i386/ + URL=http://ftp.nl.debian.org/debian/dists/testing/main/installer-$ARCH/current/images/netboot/debian-installer/$ARCH/ + ;; + ("-v") + shift + if [ $# -eq 0 ];then + echo "Error en los argumentos" + return -1 + else + DIST=$1 + URL=http://archive.ubuntu.com/ubuntu/dists/$DIST-updates/main/installer-$ARCH/current/images/netboot/ubuntu-installer/$ARCH + shift + fi + ;; + ("-l") + shift + ;; + ("-t") + shift + if [ $# -eq 0 ];then + echo "Error en los argumentos" + return -1 + else + DEST=$1 + shift + fi + ;; + esac + done +} + +function descargar +{ + # Borramos si existe el directorio temporal + if [ -d $TMPINITRD ]; then + rm -r $TMPINITRD + fi + # Creamos directorio temporal y nos vamos alli + mkdir -p $TMPINITRD + cd $TMPINITRD + + # Ficheros a descargar: Initrd y Kernel (si está habilitado). + FILES="initrd.gz" + [ $LINUX ] && FILES="$FILES linux" + + for f in $FILES; do + # Borrar fichero anterior + [ -f "$f" ] && rm -f $f + # Descargar fichero (intentar primero actualizaciones). + wget $URL/$f || wget ${URL/-updates/}/$f + if [ $? != 0 ]; then + echo "Error no se ha podido descargar el fichero $f" + exit 1 + fi + done +} + +# Descomprimimos el initrd +function descomprimir +{ + if [ ! -f $TMPINITRD/initrd.gz ]; then + echo No se encuentra el initrd.gz + exit -1 + fi + + if [ -f $NEWROOT ];then + rm -rf $NEWROOT + fi + + mkdir -p $NEWROOT + cd $NEWROOT + + gzip -dc $TMPINITRD/initrd.gz | cpio -id +} + +# Borrar todos los scripts del directorio actual +function borrarScripts +{ + # Primero los hacemos con los enlaces para que no se produzcan errores si borramos a lo que apunta primero + for i in `ls -F -1 | grep @ | awk -F @ '{print $1}'`; do + if [ $(file $i -L | grep "shell script" | wc -l) -gt 0 ]; then + rm $i + fi + done + + # Ahora lo hacemos con todos los ejecutables + for i in `ls`; do + if [ $(file $i | grep "shell script" | wc -l) -gt 0 ]; then + rm $i + fi + done +} + +# Borra todos los ejecutables que enlacen con la libreria debian-installer +function borrarEjecutablesDebinstall +{ + # Primero lo hacemos con los enlaces para que no se produzcan errores si borramos a lo que apunta primero + for i in `ls -F -1 | grep @ | awk -F @ '{print $1}'`; do + if [ $(ldd $i | grep -e libdebian-installer -e libdebconf | wc -l) -gt 0 ]; then + rm $i + fi + done + + # Ahora lo hacemos con todos los ejecutables + for i in `ls`; do + if [ $(ldd $i | grep -e libdebian-installer -e libdebconf | wc -l) -gt 0 ]; then + rm $i + fi + done +} + +# Elimina todos los fichero innecesarios del initrd +function purgarFicherosDebian +{ + mkdir -p $NEWROOT + cd $NEWROOT + + rm init + + # Pasamos por todos los directorios y vamos borrando lo innecesario + cd bin/ + borrarScripts + borrarEjecutablesDebinstall + + cd ../etc/ + rm -rf cdebconf.conf default-release lsb-release preseed_aliases udebs-source + + cd ../lib/ + rm -rf chroot-setup.sh debian-installer* kickseed main-menu.d preseed libdebian-installer* + + cd ../sbin/ + borrarScripts + borrarEjecutablesDebinstall + + cd ../usr/bin/ + borrarScripts + borrarEjecutablesDebinstall + + cd ../lib/ + rm -rf base-installer.d debian-installer finish-install.d libdebconfclient* cdebconf fetch-url net-retriever post-base-installer.d + + # Solo queda un enlace simbolico que ya no apunta a nada + cd ../sbin/ + rm -rf * + + cd ../share/ + rm -rf debconf keyrings save-logs + + cd ../../var/ + rm -rf cache/anna/ spool/kickseed/ + + cd lib/ + rm -rf apt-install cdebconf dpkg + + cd ../.. +} + +# Le agrega los archivos necesarios para que arranque de otra manera +function agregarNuevoArranque +{ + cd $NEWROOT + + cd etc/ + # Script de arranque de OpenGnSys Client. + perl -i -p -e "s/\/sbin\/debian-installer\$/${CHROOTINITSCRIPT//\//\/}/" inittab + # Impedir usar shell en terminales 2 y 3 + # (NOTA: comentar la siguiente línea para sistemas en pruebas). + #perl -n -i -e "print unless /^tty[23]/" inittab + + # Script inicial que ejecuta el resto de scripts de /etc/rcS.d/ + #echo "#! /bin/sh" >> rc + #echo "for script in /etc/rcS.d/S[0-9][0-9]*; do if [ -x $script ]; then $script fi done" >> rc + #chmod +x rc + + # Agregamos para que ejecute el script anterior lo primero + #echo "::sysinit:/etc/init.d/rc" > inittab + # Que ejecute el fichero /init cuando se reinicio el proceso init + #echo "::restart:/sbin/init" >> inittab + # Que funciona el control alt supr + #echo "::ctrlaltdel:/sbin/reboot" >> inittab + + # Cosas que hacer si se apaga + #echo "::shutdown:/bin/umount -a -r" >> inittab + #echo "::shutdown:/sbin/swapoff -a" >> inittab + + # Primero ejecutamos el dhcp + VERSION=$(cat /opt/opengnsys/doc/VERSION.txt 2>/dev/null) + VERSION=${VERSION:-"OpenGnSys"} + cat << FIN > $INITSCRIPT +#! /bin/sh +echo +echo "Arranque cliente $VERSION" +echo +set -e +# Exportando variables +for i in \$(cat /proc/cmdline); +do + echo \$i | grep -q "=" && export \$i +done +# Configurar la red +if [ "\$ip" == "dhcp" ]; then + echo "Configurando red por DHCP" + mkdir -p /var/state/dhcp + /sbin/dhclient 2>/dev/null +fi +# Modo de trabajo del cliente: on-line/off-line +status="\${status:-online}" +echo "Comprobando modo de trabajo \$status" +case "\$status" in + online) + if [ -z "\$repo" ] + then + SERVERIP=\$(grep -h dhcp-server-identifier /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1) + else + SERVERIP="\$repo" + fi + echo "Preparando conexión con el Repositorio \$SERVERIP" + # determinar el paramtro de boot para los permisos de los montajes de imagenes. + BOOTMODE=\${boot:-"user"} + case "\$BOOTMODE" in + admin) MOUNTOPTS="rw" ;; + user) MOUNTOPTS="ro" ;; + *) echo "Aviso: Modo de arranque desconocido." + BOOTMODE="user" + MOUNTOPTS="ro" ;; + esac + # Montamos el resto de cosas necesarias + echo "Montar repo en modo \$BOOTMODE" + mkdir -p /opt/opengnsys + DEFAULTOPTS="nolock,proto=tcp" + if \$(mount | grep -q " /opt/opengnsys "); then + DEFAULTOPTS="remount,\$DEFAULTOPTS" + fi + mount -t nfs -o "\$DEFAULTOPTS,ro" \$SERVERIP:/opt/opengnsys/client /opt/opengnsys + mount -t nfs -o "\$DEFAULTOPTS,rw" \$SERVERIP:/opt/opengnsys/log/clients /opt/opengnsys/log + mount -t nfs -o "\$DEFAULTOPTS,\$MOUNTOPTS" \$SERVERIP:/opt/opengnsys/images /opt/opengnsys/images + ;; + offline) + echo "Off-line mode." + ;; +esac +/opt/opengnsys/etc/preinit/default.sh +FIN + chmod +x $INITSCRIPT +} + +# Función para corregir problemas detectados con módulos del kernel. +function configurarModulos +{ + cd $NEWROOT/lib/modules/* + + case "$DIST" in + lucid) # Corregir problema de frame-buffer en Lucid. + perl -p -i -e 's/vga16fb/vesafb/g' modules.alias ;; + *) ;; + esac +} + +function comprimir +{ + cd $NEWROOT + + if [ $? = 1 ] ; then + exit -1 + fi + + find ./ | cpio -H newc -o > $TMPINITRD/new-initrd + cd $TMPINITRD + gzip -9 new-initrd +} + +function finalizar +{ + cd $ANTERIORPWD + mv $TMPINITRD/new-initrd.gz $DEST/initrd.gz + if [ $LINUX ] ; then + mv $TMPINITRD/linux $DEST/linux + fi +} + +parsearParametros $@ +descargar +descomprimir +#purgarFicherosDebian +agregarNuevoArranque +configurarModulos +comprimir +finalizar diff --git a/client/initrd-tools/ogClientNfs-generator.lib b/client/initrd-tools/ogClientNfs-generator.lib new file mode 100755 index 00000000..a077f4cb --- /dev/null +++ b/client/initrd-tools/ogClientNfs-generator.lib @@ -0,0 +1,139 @@ + +function BuildOSBase() { +#/** @function BuildOSBase: @brief instala los componentes base de los opengnsys OS y muestra aquellos que hay que compilar. +#@param $1 str_versionLinux +#@param ejemplo BuildEACOSBase ubuntu904 +#@return +#@warning Salidas de errores no determinada +#@attention +#@version 0.1 Date: 02/05/2009 Author Antonio J. Doblas Viso. Universidad de Malaga +#@note version importada desde EAC para su adaptación a opengnsys. No testeada +#*/ +# +if [ $# = 0 ] +then + echo"InstallEACOSBase instala los componentes base de los EAC OS." + echo "sintaxis: InstallEACOSBASE strVersionLinux --- Ejemplo: InstallEACOSBase ubuntu0904 " + return +fi +if [ $# = 1 ] +then + case $1 in + "ubuntu0904") + cp -ra /etc/udev/rules.d /etc/udev/rules.d-old + rm /etc/udev/rules.d/70-persistent-net.rules + echo "###########START Especificos EAC############ " >> /etc/apt/sources.list + echo "deb http://free.nchc.org.tw/ubuntu jaunty-security main restricted universe multiverse" >> /etc/apt/sources.list + echo "deb http://free.nchc.org.tw/drbl-core drbl stable" >> /etc/apt/sources.list + echo "deb http://www.geekconnection.org/remastersys/repository ubuntu/" >> /etc/apt/sources.list + echo "###########END Especificos EAC############ " >> /etc/apt/sources.list + apt-get update + #apt-get install xorg-dev xorg lxde qingy roxterm + #apt-get install firefox links midbrowser scite + #apt-get install build-essential cmake m4 autoconf gettext libbz2-dev + apt-get install nfs-common nfs-kernel-server openssh-server sshfs + apt-get install reiser4progs hfsplus curl + apt-get install fusesmb smbnetfs smbfs subversion + apt-get install gkrellm saidar htop iptraf vnstat ethstatus darkstat ncdu xdiskusage iotop lshw lshw-gtk conky + apt-get install dcfldd ddrescue di disktype dmraid hdparm sdparm hexedit lftp lsscsi lshw mc myrescue testdisk hwinfo + apt-get install partimage ntfsprogs partclone mysql-client php5 php5-cli php5-cgi php5-mysql registry-tools sysv-rc-conf kexec-tools gparted parted parted-doc gnu-fdisk fatresize gparted + apt-get install lzop ethtool etherwake remastersys bfr fbgrab fbset ksh registry-tools netpipes + apt-get install drbl-partimage drbl-chntpw drbl-ntfsprogs drbl-lzop + # desactivamos por si acaso alguno servicios, que en la distribucion base no son necesarios + #/etc/init.d/apache2 stop && update-rc.d -f apache2 remove + #update-rc.d -f gdm remove + #apt-get install lighttpd + #/etc/init.d/lighttpd stop && update-rc.d -f lighttpd remove + ;; + esac +fi + +if [ $# = 1 ] +then + + echo "creando la estrucutra de datos" + mkdir -p /opt/opengnsys/{bin,etc,log,lib/{engine/bin,modules},images,init} + cd /root/ && svn co svn://www.informatica.us.es:3690/eac-hidra +fi + + +if [ $# = 1 ] +then + read -p "pausa para configurar el framebuffer: abre una nueva consola y segue estas intrucciones, luego pulsa enter" + echo "Activar el framebuffer: abre una consola y realiza estas operaciones" + echo "/etc/modprobe.d/blacklist-framebuffer => le comentamos las lineas de vesafb, vga16fb y radeonfb" + echo "/etc/initramfs-tools/modules => agregamos en una linea cada una de estas fbcon vesafb vga16b" + echo "actualizamos con # update-initramfs -u" + echo "acivadmos el framebuffer en /boot/grub/menu.lst y en el kernel que deseemos a�adimos vga=791" +fi + +if [ $# = 1 ] +then + read -p "pausa para configurar el framebuffer: abre una nueva consola y segue estas intrucciones, luego pulsa enter" + echo "configurar el lighttd" + read -p "press enter" +fi + +if [ $# = 1 ] +then + importclient=/opt/opengnsys + echo "configurar el /etc/bash.bashrc" + echo "####### EAC ##########" >> /etc/bash.bashrc + echo "importclient=/opt/opengnsys" >> /etc/bash.bashrc + echo "export PATH=$PATH:/sbin/:/bin/:/opt/:/usr/local/sbin/:/usr/local/bin/:/usr/bin/:/usr/sbin/:/opt/opengnsys/" >> /etc/bash.bashrc + echo source ${importclient}/lib/engine/Settings.lib >> /etc/bash.bashrc + echo source ${importclient}/lib/engine/ATA.lib >> /etc/bash.bashrc + echo source ${importclient}/lib/engine/Boot.lib >> /etc/bash.bashrc + echo source ${importclient}/lib/engine/Deploy.lib >> /etc/bash.bashrc + echo source ${importclient}/lib/engine/FileSystem.lib >> /etc/bash.bashrc + echo source ${importclient}/lib/engine/PostConf.lib >> /etc/bash.bashrc +fi + +if [ $# = 1 ] +then + read -p "pausa para compilar los programas necesarios: abre una nueva consola y segue estas intrucciones, luego pulsa enter" + echo "estos hay que compilarlos estan dentro de source" + echo "partition saving http://partition-saving.com" + echo "mbuffer (http://www.maier-komor.de/mbuffer.html) requiere ksh" + echo "udp-cast 2008-09-14 http://udpcast.linux.lu/" + echo "ctorrent 3.3.2 http://www.rahul.net/dholmes/ctorrent/" + echo "wmi-client: https://launchpad.net/ubuntu/jaunty/+source/wmi/1:0.1.12-1" + echo "ms-sys http://ms-sys.sourceforge.net/" + echo "EACInterfaces copiar el binario a /usr/sbin" + echo NameCompany copiar a /usr/sbin" + echo NameNtpServer a /usr/sbin" +fi +} + + +function BuildOgClientNfs () { +#/** @function BuildOgClientNfs: @brief Genera una copia del sistema actual para convertirlo posteriormente en arranque pxe EAC. +#@param $1 str_DirectorioDestino +#@param $2 str_metodo (debootstrap o myfilsystem) +#@param ejemplo: BuildOgClientNfs /opt/opengnsys/tftpboot/ogClinent/ogClientNfs debootstrap +#@return: no definida +#@warning No controla que el el directorio destino debe estar montado en una particion distinta al sistema raiz. +#@attention +#@version 0.1 Date: 03/06/2009 Author Antonio J. Doblas Viso. Universidad de Malaga +#@note falta la creacion del kernel y el initrd +#*/ +if [ $# = 0 ] +then + echo"BuildOgClientNfs" + echo "sintaxis: BuildOfClientNfs str_path_contenedor str_metodo" + return +fi +if [ $# = 2 ] +then + if [ $2 = "myfilesystem" ] + then + cd / + cp -rav /. $1/. + cp -rav -/dev/. $1/dev/. + fi + if [ $2 = "debootstrap" ] + then + echo "debo" + fi +fi +} \ No newline at end of file diff --git a/client/initrd-tools/udeblist-jaunty.conf b/client/initrd-tools/udeblist-jaunty.conf new file mode 100644 index 00000000..d5858518 --- /dev/null +++ b/client/initrd-tools/udeblist-jaunty.conf @@ -0,0 +1,22 @@ +install:cryptsetup-udeb +install:dmraid-udeb +install:dmsetup-udeb +install:e2fsprogs-udeb +install:fbset-udeb +install:fdisk-udeb +install:fuse-utils-udeb +install:jfsutils-udeb +install:kbd-udeb +install:lvm2-udeb +install:mdadm-udeb +install:mkreiserfs-udeb +install:ntfs-3g-udeb +install:ntfsprogs-udeb +install:openssh-client-udeb +install:openssh-server-udeb +install:parted-udeb +install:reiserfsprogs-udeb +install:xfsprogs-udeb +install:fs-core-modules-2.6.28-11-generic-di +install:mouse-modules-2.6.28-11-generic-di +remove:kernel-image-2.6.28-11-generic-di diff --git a/client/initrd-tools/udeblist-karmic.conf b/client/initrd-tools/udeblist-karmic.conf new file mode 100644 index 00000000..9ca151df --- /dev/null +++ b/client/initrd-tools/udeblist-karmic.conf @@ -0,0 +1,22 @@ +install:cryptsetup-udeb +install:dmraid-udeb +install:dmsetup-udeb +install:e2fsprogs-udeb +install:fbset-udeb +install:fdisk-udeb +install:fuse-utils-udeb +install:jfsutils-udeb +install:kbd-udeb +install:lvm2-udeb +install:mdadm-udeb +install:mkreiserfs-udeb +install:ntfs-3g-udeb +install:ntfsprogs-udeb +install:openssh-client-udeb +install:openssh-server-udeb +install:parted-udeb +install:reiserfsprogs-udeb +install:xfsprogs-udeb +install:fs-core-modules-2.6.31-14-generic-di +install:mouse-modules-2.6.31-14-generic-di +remove:kernel-image-2.6.31-14-generic-di diff --git a/client/initrd-tools/udeblist-lucid.conf b/client/initrd-tools/udeblist-lucid.conf new file mode 100644 index 00000000..dfb35622 --- /dev/null +++ b/client/initrd-tools/udeblist-lucid.conf @@ -0,0 +1,31 @@ +install:cryptsetup-udeb +install:dmidecode-udeb +install:dmraid-udeb +install:dmsetup-udeb +install:e2fsprogs-udeb +install:fbset-udeb +install:fdisk-udeb +install:fuse-utils-udeb +install:jfsutils-udeb +install:kbd-udeb +install:lvm2-udeb +install:lsb-release-udeb +install:mdadm-udeb +install:mkreiser4-udeb +install:mkreiserfs-udeb +install:ntfs-3g-udeb +install:ntfsprogs-udeb +install:openssh-client-udeb +install:openssh-server-udeb +install:parted-udeb +install:reiser4progs-udeb +install:reiserfsprogs-udeb +install:util-linux-udeb +install:xfsprogs-udeb +install:fs-core-modules-KERNELVERS-di +install:fs-secondary-modules-KERNELVERS-di +install:mouse-modules-KERNELVERS-di +install:pata-modules-KERNELVERS-di +install:sata-modules-KERNELVERS-di +install:scsi-modules-KERNELVERS-di +remove:kernel-image-KERNELVERS-di diff --git a/client/initrd-tools/udeblist-maverick.conf b/client/initrd-tools/udeblist-maverick.conf new file mode 100644 index 00000000..d340ec65 --- /dev/null +++ b/client/initrd-tools/udeblist-maverick.conf @@ -0,0 +1,28 @@ +install:cryptsetup-udeb +install:dmraid-udeb +install:dmsetup-udeb +install:e2fsprogs-udeb +install:fbset-udeb +install:fdisk-udeb +install:fuse-utils-udeb +install:jfsutils-udeb +install:kbd-udeb +install:lvm2-udeb +install:lsb-release-udeb +install:mdadm-udeb +install:mkreiserfs-udeb +install:ntfs-3g-udeb +install:ntfsprogs-udeb +install:openssh-client-udeb +install:openssh-server-udeb +install:parted-udeb +install:reiserfsprogs-udeb +install:util-linux-udeb +install:xfsprogs-udeb +install:fs-core-modules-2.6.35-22-generic-di +install:fs-secondary-modules-2.6.35-22-generic-di +install:mouse-modules-2.6.35-22-generic-di +install:pata-modules-2.6.35-22-generic-di +install:sata-modules-2.6.35-22-generic-di +install:scsi-modules-2.6.35-22-generic-di +remove:kernel-image-2.6.35-22-generic-di diff --git a/client/initrd-tools/udeblist.conf b/client/initrd-tools/udeblist.conf new file mode 120000 index 00000000..4ab23c79 --- /dev/null +++ b/client/initrd-tools/udeblist.conf @@ -0,0 +1 @@ +udeblist-jaunty.conf \ No newline at end of file diff --git a/client/initrd-tools/upgrade-clients-udeb.sh b/client/initrd-tools/upgrade-clients-udeb.sh new file mode 100755 index 00000000..afc5229e --- /dev/null +++ b/client/initrd-tools/upgrade-clients-udeb.sh @@ -0,0 +1,50 @@ +#!/bin/bash +#@file upgrade-clients-udeb.sh +#@brief Actualiza los paquetes udeb que deben ser exportados a los clientes. +#@arg \c distrib - nombre de la distribución de Ubuntu (karmic, jaunty, ...). +#@note El script debe ser copiado a \c opengnsys/bin y el fichero de configuración a \c opengnsys/etc +#@note Formato del fichero \c udeb.list : {install|remove}:paquete + + +# Variables +PROG="$(basename $0)" +OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} +test "$(lsb_release -is 2>/dev/null)" == "Ubuntu" && DEFDISTRIB="$(lsb_release -cs)" +DEFDISTRIB=${DEFDISTRIB:-"lucid"} +DISTRIB=${1:-"$DEFDISTRIB"} # Si no se indica, usar distribución por defecto. +CFGFILE="$OPENGNSYS/etc/udeblist-$DISTRIB.conf" +OGUDEB="$OPENGNSYS/client/lib/udeb" +TMPUDEB="/tmp/udeb" +UDEBLIST="/etc/apt/sources.list.d/udeb.list" +KERNELVERS=$(strings $OPENGNSYS/tftpboot/linux | awk '/2.6.*generic/ {print $1}') + +# Comprobar fichero de configuración. +if [ ! -f "$CFGFILE" ]; then + echo "$PROG: No existe el fichero de configuración \"$CFGFILE\"" >&2 + exit 1 +fi +PACKAGES_INSTALL=$(awk -F: '$1~/install/ {print $2}' $CFGFILE) +PACKAGES_INSTALL=${PACKAGES_INSTALL//KERNELVERS/$KERNELVERS} +PACKAGES_REMOVE=$(awk -F: '$1~/remove/ {print $2}' $CFGFILE) +PACKAGES_REMOVE=${PACKAGES_REMOVE//KERNELVERS/$KERNELVERS} +if [ -z "$PACKAGES_INSTALL" ]; then + echo "$PROG: No hay paquetes para descargar." >&2 + exit 2 +fi + +# Crear configuración para apt-get +echo "deb http://archive.ubuntu.com/ubuntu/ $DISTRIB main/debian-installer universe/debian-installer" >$UDEBLIST +echo "deb http://archive.ubuntu.com/ubuntu/ $DISTRIB-updates main/debian-installer universe/debian-installer" >>$UDEBLIST +mkdir -p $TMPUDEB/partial +rm -f $TMPUDEB/*.udeb + +# Descargar paquetes udeb, borrar los descartables y moverlos al NFS. +apt-get update +apt-get install -y -o dir::cache::archives=$TMPUDEB -d $PACKAGES_INSTALL +for i in $PACKAGES_REMOVE; do + rm -f $TMPUDEB/${i}_*.udeb +done +rm -f $OGUDEB/*.udeb +mv $TMPUDEB/*.udeb $OGUDEB +rm -f $UDEBLIST + diff --git a/client/nfsexport/README.es.txt b/client/nfsexport/README.es.txt deleted file mode 100644 index 4ad361cb..00000000 --- a/client/nfsexport/README.es.txt +++ /dev/null @@ -1,25 +0,0 @@ -OpenGNSys Client (NFS root) README -==================================== - - -Este directorio contiene la estructura principal de datos que -será importada por los cleintes OpenGNSys mediante NFS. - -Los subdirectorios se copian íntegramente al servidor bajo -/opt/opengnsys/client, y serán importados por los clientes en -/opt/opengnsys. - -La estructura de datos es la siguiente: - -- bin binarios ejecutables por el cliente (compilados - estáticamente). -- cache directorio donde se montará la caché local del cliente. -- etc ficheros de configuración del cliente. -- lib librerías de funciones. -- lib/engine/bin directorio donde se copiarán las funciones del - motor de clonación. -- images repositorio de imágenes de sistemas operativos. -- log registro de incidencias de los clientes. -- scripts funciones de alto nivel ejecutables por OpenGNSys Browser - y OpenGNSys Admin. - diff --git a/client/nfsexport/bin/EACInterfaces b/client/nfsexport/bin/EACInterfaces deleted file mode 100755 index b63b1db1..00000000 Binary files a/client/nfsexport/bin/EACInterfaces and /dev/null differ diff --git a/client/nfsexport/bin/browser b/client/nfsexport/bin/browser deleted file mode 100755 index 08b77dbd..00000000 Binary files a/client/nfsexport/bin/browser and /dev/null differ diff --git a/client/nfsexport/bin/ogAdmClient b/client/nfsexport/bin/ogAdmClient deleted file mode 100755 index 27bdd1aa..00000000 Binary files a/client/nfsexport/bin/ogAdmClient and /dev/null differ diff --git a/client/nfsexport/etc/init/default.sh b/client/nfsexport/etc/init/default.sh deleted file mode 100755 index c8285c28..00000000 --- a/client/nfsexport/etc/init/default.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -echo -ne "og\nog\n" | passwd root - -/etc/init.d/ssh restart -#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 - -ethtool -s $DEVICE wol g - -# Fichero de registro de incidencias (en el servidor; si no, en local). -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} -if ! touch $OGLOGFILE 2>/dev/null; then - OGLOGFILE=/var/log/opengnsys.log -fi - - - - -if [ $ogactiveadmin == "true" ] -then - export boot=admin -fi - - -# Arranque de OpenGnSys Client. -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - echo "$MSG_LAUNCHCLIENT" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 -fi - -# Si fallo en cliente y modo "admin", cargar shell; si no, salir. -if [ "$boot" == "admin" ]; then - bash -fi diff --git a/client/nfsexport/etc/init/defaultTESTING.sh b/client/nfsexport/etc/init/defaultTESTING.sh deleted file mode 100755 index 7a258588..00000000 --- a/client/nfsexport/etc/init/defaultTESTING.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -/etc/init.d/ssh restart -#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 - -ethtool -s eth0 wol g - - -# Fichero de registro de incidencias (en el servidor; si no, en local). -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} -if ! touch $OGLOGFILE 2>/dev/null; then - OGLOGFILE=/var/log/opengnsys.log -fi - -echo -ne "og\nog\n" | passwd root - -#TODO => activacion de modo escritura en REPO - -if [ $ogactiveadmin == "true" ] -then - export boot=admin - umount /opt/opengnsys/images - - if [ "$ogprotocol" == "nfs" ] - then - mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock - fi - - if [ "$ogprotocol" == "smb" ] - then - echo "montando smb" - mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og - echo mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og - - fi -fi -# Arranque de OpenGnSys Client. -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - - - echo "$MSG_LAUNCHCLIENT modo cliente full" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 -fi - -# Si fallo en cliente y modo "admin", cargar shell; si no, salir. -#if [ "$boot" == "admin" ]; then - bash -#fi diff --git a/client/nfsexport/etc/lang.es_ES.UTF-8.conf b/client/nfsexport/etc/lang.es_ES.UTF-8.conf deleted file mode 120000 index 330cec2b..00000000 --- a/client/nfsexport/etc/lang.es_ES.UTF-8.conf +++ /dev/null @@ -1 +0,0 @@ -lang.es_ES.conf \ No newline at end of file diff --git a/client/nfsexport/etc/lang.es_ES.conf b/client/nfsexport/etc/lang.es_ES.conf deleted file mode 100644 index 929c1288..00000000 --- a/client/nfsexport/etc/lang.es_ES.conf +++ /dev/null @@ -1,127 +0,0 @@ -# Idioma español. - -# Mensajes de error. -MSG_ERR_GENERIC="Error imprevisto no definido" -MSG_ERR_FORMAT="Formato de ejecución incorrecto" -MSG_ERR_OUTOFLIMIT="Valor fuera de rango o no válido" -MSG_ERR_NOTFOUND="Fichero o dispositivo no encontrado" -MSG_ERR_PARTITION="Partición errónea o desconocida" -MSG_ERR_LOCKED="Recurso bloqueado por operación de uso exclusivo" -MSG_ERR_CACHE="Error en partición de caché local" -MSG_ERR_FILESYS="Sistema de archivos desconocido o no se puede montar" -MSG_ERR_NOTOS="Sistema operativo no instalado o no detectado" -MSG_ERR_IMAGE="No se puede crear o restaurar una image de sistema" -MSG_ERR_NOTEXEC="Programa o función no ejecutable" - -# Mensajes de avisos. -MSG_DONTMOUNT="Sistema de archivos no montado" -MSG_DONTUNMOUNT="El sistema de archivos no se puede desmontar o no está montado" - -# Mensajes complementarios para las ayudas. -MSG_ERROR="Error" -MSG_EXAMPLE="Ejemplo" -MSG_FORMAT="Formato" -MSG_FUNCTION="Función" -MSG_HARDWAREINVENTORY="Inventario de hardware de la máquina" -MSG_IMAGE="imagen" -MSG_INSTALLED="instalado" -MSG_NOCACHE="sin caché local" -MSG_NOEXTENDED="sin partición extendida" -MSG_NOFORMAT="sin formato" -MSG_PARTITION="partición" -MSG_PROTOCOL="protocolo" -MSG_RESERVEDVALUE="Valor reservado" -MSG_UNKNOWN="Desconocido" - -# Mensajes del proceso de arranque. -MSG_DETECTLVMRAID="Detectar metadispositivos LVM y RAID." -MSG_ERRBOOTMODE="$MSG_ERROR: Modo de arranque desconocido." -MSG_ERRLOADUDEB="$MSG_ERROR: No se puede cargar el paquete udeb %s." -MSG_LAUNCHCLIENT="Ejecutar cliente." -MSG_LOADAPI="Cargar funciones del motor de clonación." -MSG_LOADMODULES="Cargar módulos del kernel." -MSG_LOADUDEBS="Cargar paquetes udeb." -MSG_MAKELINKS="Crear enlaces simbólicos." -MSG_MOUNTREPO="Montar repositorio en modo %s." -MSG_OFFLINEMODE="Modo de arranque sin conexión." - -MSG_HELP_ogBoot="Arranca un sistema operativo instalado." -MSG_HELP_ogCalculateChecksum="Calcula la suma de comprobación (checksum) de un fichero." -MSG_HELP_ogCheckFs="Comprueba la consistencia de un sistema de archivos." -MSG_HELP_ogCompareChecksumFiles="Compara si coinciden las sumas de comprobación almacenadas de 2 ficheros." -MSG_HELP_ogCopyFile="Copia un fichero a otro almacenamiento." -MSG_HELP_ogCreateCache="Reserva espacio para la partición de caché al final del disco 1." -MSG_HELP_ogCreateImage="Genera una imagen exacta de un sistema operativo instalado localmente." -MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)." -MSG_HELP_ogCreatePartitions="Define la estructura de particiones de un disco." -MSG_HELP_ogDeleteFile="Borra un fichero de un espacio de almacenamiento." -MSG_HELP_ogDeleteTree="Borra un árbol de directorios de un espacio de almacenamiento." -MSG_HELP_ogDevToDisk="Devuelve el nº de orden de dicso o de partición correspondiente al camino del fichero de dispositivo." -MSG_HELP_ogDiskToDev="Devuelve el camino del fichero de dispositivo correspondiente al nº de orden de dicso o de partición." -MSG_HELP_ogEcho="" -MSG_HELP_ogExtendFs="Extiende el tamaño de un sistema de archivo al máximo de su partición." -MSG_HELP_ogFindCache="Indica la partición reservada para caché local." -MSG_HELP_ogFormat="Formatea o reformatea un sistema de archivos." -MSG_HELP_ogFormatCache="Formatea (inicia) el sistema de caché local." -MSG_HELP_ogFormatFs=$MSG_HELP_ogFormat -MSG_HELP_ogGetCacheSize="Devuelve el tamaño de la partición de caché local." -MSG_HELP_ogGetCacheSpace="Devuelve el espacio máximo disponible que puede ser reservado para la partición de caché local." -MSG_HELP_ogGetFsSize="Devuelve el tamaño de un sistema de archivos." -MSG_HELP_ogGetFsType="Devuelve el mnemónico de tipo de sistema de archivos." -MSG_HELP_ogGetHostname="Devuelve el nombre de la máquina local." -MSG_HELP_ogGetIpAddress="Devuelve la dirección IP del cliente." -MSG_HELP_ogGetImageSize="Devuelve el tamaño de una imagen de sistema." -MSG_HELP_ogGetMacAddress="Devuelve la dirección Ethernet del cliente." -MSG_HELP_ogGetMountPoint="Devuelve el directorio donde está montado un sistema de archivos local." -MSG_HELP_ogGetOsType="Devuelve el tipo de un sistema operativo instalado." -MSG_HELP_ogGetOsVersion="Devuelve el tipo y la versión de un sistema operativo instalado." -MSG_HELP_ogGetParentPath=$"Devuelve el camino completo del directorio padre de un fichero de sistema OpenGnSys." -MSG_HELP_ogGetPartitionActive="Indica cual es la partición marcada como activa en un disco." -MSG_HELP_ogGetPartitionId="Devuelve el identificador de tipo de una partición." -MSG_HELP_ogGetPartitionSize="Devuelve el tamaño de una partición." -MSG_HELP_ogGetPartitionType="Devuelve el mnemónico de tipo de una partición." -MSG_HELP_ogGetPath="Devuelve el camino completo de un fichero de sistema OpenGnSys." -MSG_HELP_ogGetRegistryValue="Devuelve el dato de un valor del registro de Windows." -MSG_HELP_ogGetWindowsName="Devuelve el nombre del cliente guardado en el registro de Windows." -MSG_HELP_ogHelp="Muestra mensajes de ayudas para las funciones." -MSG_HELP_ogHidePartition="Oculta una partición de Windows." -MSG_HELP_ogIdToType="Devuelve el mnemónico asociado al identificador de tipo de partición." -MSG_HELP_ogIsLocked="Comprueba si una partición está bloqueada por una operación de uso exclusivo." -MSG_HELP_ogIsImageLocked="Comprueba si una imagen está bloqueada por una operación de uso exclusivo." -MSG_HELP_ogIsPartitionLocked=$MSG_HELP_ogIsLocked -MSG_HELP_ogIsMounted="Comprueba si un sistema operativo está montado." -MSG_HELP_ogIsNewerFile="Comprueba si un fichero es más nuevo (se modificado después) que otro." -MSG_HELP_ogIsValidType="Comprueba si el tipo de sistema de archivos es válido para un identificador de partición." -MSG_HELP_ogLinuxBootParameters="Devuelve los parámetros de arranque de un sistema operativo Linux instalado." -MSG_HELP_ogListHardwareInfo="Lista el inventario de dispositivos del cliente." -MSG_HELP_ogListPartitions="Lista la estructura de particiones de un disco." -MSG_HELP_ogListRegistryKeys="Lista los nombres de las claves incluidas en una clave del registro de Windows." -MSG_HELP_ogLock="Bloquea una partición para operación de uso exclusivo." -MSG_HELP_ogLockImage="Bloquea una imagen para operación de uso exclusivo." -MSG_HELP_ogLockPartition=$MSG_HELP_ogLock -MSG_HELP_ogMakeChecksumFile="Almacena la suma de comprobación de un fichero." -MSG_HELP_ogMakeDir="Crea un directorio para OpenGnSys." -MSG_HELP_ogMount="Monta un sistema de archivos y devuelve el punto de montaje." -MSG_HELP_ogMountCache="Monta el sistema de archivos dedicado a caché local." -MSG_HELP_ogMountCdrom="" -MSG_HELP_ogMountFs=$MSG_HELP_ogMount -MSG_HELP_ogRaiseError="Muestra y registra mensajes de error y devuelve el código correspondiente." -MSG_HELP_ogReduceFs="Reduce el tamaño del sistema de archivos al mínimo ocupado por sus datos." -MSG_HELP_ogRestoreImage="Restaura una imagen de sistema operativo." -MSG_HELP_ogRestoreMbrImage="Restaura una imagen del sector de arranque (MBR)." -MSG_HELP_ogSetPartitionActive="Establece el número de partición activa de un disco." -MSG_HELP_ogSetPartitionId="Modifica el identificador de tipo de una partición física." -MSG_HELP_ogSetPartitionSize="Establece el tamaño de una partición." -MSG_HELP_ogSetRegistryValue="Asigna un dato a un valor del registro de Windows." -MSG_HELP_ogSetWindowsName="Asigna el nombre del cliente en el registro de Windows." -MSG_HELP_ogSetWinlogonUser="Asigna el nombre de usuario por defecto para el gestor de entrada de Windows." -MSG_HELP_ogTypeToId="Devuelve el identificador asociado al mnemónico de tipo de partición." -MSG_HELP_ogUnhidePartition="Hace visible una partición de Windows." -MSG_HELP_ogUnlock="Desbloquea una partición tras finalizar una operación de uso exclusivo." -MSG_HELP_ogUnlockImage="Desbloquea una imagen tras finalizar una operación de uso exclusivo." -MSG_HELP_ogUnlockPartition=$MSG_HELP_ogUnlock -MSG_HELP_ogUnmount="Desmonta un sistema de archivos." -MSG_HELP_ogUnmountCache="Desmonta el sistema de archivos de caché local." -MSG_HELP_ogUnmountFs=$MSG_HELP_ogUnmount -MSG_HELP_ogUnmountAll="Desmonta todos los sistemas de archivos." - diff --git a/client/nfsexport/etc/preinit/default.sh b/client/nfsexport/etc/preinit/default.sh deleted file mode 100755 index d16da52a..00000000 --- a/client/nfsexport/etc/preinit/default.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/opt/opengnsys/bin/bash - -# Para que no haya problemas con el interprete -ln -fs /opt/opengnsys/bin/bash /bin/bash - -set -a - -source /opt/opengnsys/etc/preinit/loadenviron.sh -for f in fileslinks.sh loadudeb.sh loadmodules.sh metadevs.sh; do - $OGETC/preinit/$f -done -unset f - -if [ -f $OGETC/init/$OG_IP.sh ]; then - $OGETC/init/$OG_IP.sh - -elif [ -f $OGETC/init/$OGGROUP.sh ]; then - $OGETC/init/$OGGROUP.sh - -elif [ -f $OGETC/init/default.sh ]; then - $OGETC/init/default.sh - -else - echo "No se ha encontrado script de inicio" - halt -fi diff --git a/client/nfsexport/etc/preinit/defaultTESTING.sh b/client/nfsexport/etc/preinit/defaultTESTING.sh deleted file mode 100755 index 73b75a0a..00000000 --- a/client/nfsexport/etc/preinit/defaultTESTING.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -# Para que no haya problemas con el interprete -#ln -fs /opt/opengnsys/bin/bash /bin/bash - -set -a - -source /opt/opengnsys/etc/preinit/loadenviron.sh - -for f in loadmodules.sh; do - $OGETC/preinit/$f -done - -if [ -f $OGETC/init/$OG_IP.sh ]; then - $OGETC/init/$OG_IP.sh - -elif [ -f $OGETC/init/$OGGROUP.sh ]; then - $OGETC/init/$OGGROUP.sh - -elif [ -f $OGETC/init/default.sh ]; then - $OGETC/init/default.sh - -else - echo "No se ha encontrado script de inicio" - halt -fi diff --git a/client/nfsexport/etc/preinit/fileslinks.sh.NoUsed b/client/nfsexport/etc/preinit/fileslinks.sh.NoUsed deleted file mode 100755 index 07b87399..00000000 --- a/client/nfsexport/etc/preinit/fileslinks.sh.NoUsed +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -#/** -#@file fileslinks.sh -#@brief Script de inicio para copiar ficheros y deinir enlaces simbólicos. -#@note Desglose del script "loadenviron.sh". -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - - -# Si está configurado OpenGNSys ... -if [ -n "$OPENGNSYS" ]; then - echo "$MSG_MAKELINKS" - # Para tener /bin/bash y no haya problemas - ln -fs $OGBIN/bash /bin/bash - - # Crear directorio de bloqueos - mkdir -p /var/lock - - # Directorio de tipos de letras para el browser. - #QTLIBS=$(grep qt_libspath $OGBIN/browser 2>/dev/null | cut -f2 -d=) - QTVERS="/usr/local/QtEmbedded-4.6.3" - QTDIR="${QTVERS%-*}" - mkdir -p $QTDIR - ln -fs $QTDIR $QTVERS - mkdir -p $QTDIR/lib - ln -fs $OGLIB/fonts $QTDIR/lib - - # Datos de dispositivos PCI en /etc - ln -fs $OGLIB/pci.ids /etc -else - # FIXME Error: entorno de OpenGNSys no configurado. - echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje. - exit 1 -fi - diff --git a/client/nfsexport/etc/preinit/loadenviron.sh b/client/nfsexport/etc/preinit/loadenviron.sh deleted file mode 100755 index 83b9b9a9..00000000 --- a/client/nfsexport/etc/preinit/loadenviron.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash -#/** -#@file loadenviron.sh -#@brief Script de carga de la API de funciones de OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - -# Idioma por defecto. -export LANG="${LANG:-es_ES}" - -# Directorios del projecto OpenGnSys. -export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" -if [ -d $OPENGNSYS ]; then - export OGBIN=$OPENGNSYS/bin - export OGETC=$OPENGNSYS/etc - export OGLIB=$OPENGNSYS/lib - export OGAPI=$OGLIB/engine/bin - export OGSCRIPTS=$OPENGNSYS/scripts - export OGIMG=$OPENGNSYS/images - export OGCAC=$OPENGNSYS/cache - export OGLOG=$OPENGNSYS/log - - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin - export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN - - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - - # Cargar fichero de idioma. - LANGFILE=$OGETC/lang.$LANG.conf - if [ -f $LANGFILE ]; then - source $LANGFILE - for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do - export $i - done - fi - echo "$MSG_LOADAPI" - - # Cargar mapa de teclado. - loadkeys ${LANG%_*} >/dev/null - - # Cargar API de funciones. - for i in $OGAPI/*.lib; do - source $i - done - - for i in $(typeset -F | cut -f3 -d" "); do - export -f $i - done - - # Carga de las API segun engine - if [ -n "$ogengine" ] - then - for i in $OGAPI/*.$ogengine; do - [ -f $i ] && source $i - done - fi - - # Fichero de registros. - export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" - - # FIXME Pruebas para grupos de ordenadores - #export OGGROUP=$(ogGetGroup) - export OGGROUP="$group" -fi - -# Declaración de códigos de error. -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. - - diff --git a/client/nfsexport/etc/preinit/loadenvironTESTING.sh b/client/nfsexport/etc/preinit/loadenvironTESTING.sh deleted file mode 100755 index 1273db7f..00000000 --- a/client/nfsexport/etc/preinit/loadenvironTESTING.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -#/** -#@file loadenviron.sh -#@brief Script de carga de la API de funciones de OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - -# Idioma por defecto. -export LANG="${LANG:-es_ES}" - -# Directorios del projecto OpenGnSys. -export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" -if [ -d $OPENGNSYS ]; then - export OGBIN=$OPENGNSYS/bin/testing - #export OGBIN=$OPENGNSYS/bin - export OGETC=$OPENGNSYS/etc - export OGLIB=$OPENGNSYS/lib - export OGAPI=$OGLIB/engine/bin - export OGSCRIPTS=$OPENGNSYS/scripts - export OGIMG=$OPENGNSYS/images - export OGCAC=$OPENGNSYS/cache - export OGLOG=$OPENGNSYS/log - - #export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH - #export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH - - # Cargar fichero de idioma. - LANGFILE=$OGETC/lang.$LANG.conf - if [ -f $LANGFILE ]; then - source $LANGFILE - for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do - export $i - done - fi - echo "$MSG_LOADAPI" - # Cargar mapa de teclado. - loadkeys ${LANG%_*} >/dev/null - # Cargar API de funciones. - for i in $OGAPI/*.lib; do - source $i - done - for i in $(typeset -F | cut -f3 -d" "); do - export -f $i - done - - # Añadir dependencia de arquitectura - ARCH=$(ogGetArch) -# if [ -n "$ARCH" ]; then - # export PATH=$OGBIN/$ARCH:$PATH - # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH - # fi - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin - export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - - # Carga de las API testing - if [ "$engine" = "testing" ] - then - for i in $OGAPI/*.testing; do - source $i - done - #export PATH=$PATH:$OGBIN/$ARCH-testing - fi - - # Fichero de registros. - export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" - # FIXME Pruebas para grupos de ordenadores - #export OGGROUP=$(ogGetGroup) - export OGGROUP="$group" -fi - -# Declaración de códigos de error. -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. - diff --git a/client/nfsexport/etc/preinit/loadmodules.sh b/client/nfsexport/etc/preinit/loadmodules.sh deleted file mode 100755 index d72cb6fb..00000000 --- a/client/nfsexport/etc/preinit/loadmodules.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -#/** -#@file loadmodules.sh -#@brief Script de inicio para cargar módulos complementarios del kernel. -#@version 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-01-26 -#*/ - - -MSG_LOADMODULES=${MSG_LOADMODULES:-"."} -echo "$MSG_LOADMODULES" - -# Directorio principal de módulos del kernel. -MODULESDIR=/lib/modules/$(uname -r)/kernel - -# Módulo del ratón. -insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null - - - diff --git a/client/nfsexport/etc/preinit/loadmodulesTESTING.sh b/client/nfsexport/etc/preinit/loadmodulesTESTING.sh deleted file mode 100755 index cea7d53a..00000000 --- a/client/nfsexport/etc/preinit/loadmodulesTESTING.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -#/** -#@file loadmodules.sh -#@brief Script de inicio para cargar módulos complementarios del kernel. -#@version 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-01-26 -#*/ - - -MSG_LOADMODULES=${MSG_LOADMODULES:-"."} -echo "$MSG_LOADMODULES para cliente full" - -# Directorio principal de módulos del kernel. -MODULESDIR=/lib/modules/$(uname -r)/kernel - -# Módulo del ratón. -insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null -# Módulos de discos. -#for m in $MODULESDIR/drivers/ata/*.ko; do - # insmod $m 2>/dev/null -#done -# Módulos de sistemas de archivos. -#for f in reiserfs jfs xfs hfs hfsplus; do -#for f in reiserfs xfs hfs hfsplus; do -# insmod $MODULESDIR/fs/$f/$f.ko 2>/dev/null -#done - diff --git a/client/nfsexport/etc/preinit/loadudeb.sh.NoUsed b/client/nfsexport/etc/preinit/loadudeb.sh.NoUsed deleted file mode 100755 index 662887c0..00000000 --- a/client/nfsexport/etc/preinit/loadudeb.sh.NoUsed +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -#/** -#@file loadudeb.sh -#@brief Script de inicio para cargar paquetes udeb en el cliente. -#@note Desglose del script "loadenviron.sh". -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - - -# Si está configurado OpenGNSys ... -if [ -n "$OPENGNSYS" ]; then - # Cargar paquetes udeb. - echo "$MSG_LOADUDEBS" - for i in $OGLIB/udeb/*.udeb; do - udpkg -i "$i" >/dev/null || printf "$MSG_ERRLOADUDEB\n" $(basename $i) - done - # TEMPORAL: corregir biblioteca dinámica para "partprobe". - ln -s $(find /lib -type f -name "libparted*.so.*") /lib/$(grep libparted $OGBIN/$(ogGetArch)/partprobe) 2>/dev/null -else - # FIXME Error: entorno de OpenGnSys no configurado. - echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje. - exit 1 -fi - diff --git a/client/nfsexport/etc/preinit/metadevs.sh.NoUsed b/client/nfsexport/etc/preinit/metadevs.sh.NoUsed deleted file mode 100755 index 0870e552..00000000 --- a/client/nfsexport/etc/preinit/metadevs.sh.NoUsed +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -#/** -#@file metadevs.sh -#@brief Script de inicio para detectar metadispositivos LVM y RAID. -#@note Desglose del script "loadenviron.sh". -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#@version 0.9.4 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-04-19 -#*/ - - -# Si está configurado OpenGNSys ... -if [ -n "$OPENGNSYS" ]; then - echo "$MSG_DETECTLVMRAID" - # Detectar metadispositivos LVM. - vgchange -ay >/dev/null 2>&1 - # Detectar metadispositivos RAID. - dmraid -ay >/dev/null 2>&1 -else - # FIXME Error: entorno de OpenGNSys no configurado. - echo "Error: OpenGNSys environment is not configured." # FIXME: definir mensaje. - exit 1 -fi - diff --git a/client/nfsexport/lib/fonts/DejaVuSans-Bold.ttf b/client/nfsexport/lib/fonts/DejaVuSans-Bold.ttf deleted file mode 100755 index 040bb9d3..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSans-Bold.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSans-BoldOblique.ttf b/client/nfsexport/lib/fonts/DejaVuSans-BoldOblique.ttf deleted file mode 100755 index d0fc12f0..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSans-BoldOblique.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSans-Oblique.ttf b/client/nfsexport/lib/fonts/DejaVuSans-Oblique.ttf deleted file mode 100755 index 19f9f749..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSans-Oblique.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSans.ttf b/client/nfsexport/lib/fonts/DejaVuSans.ttf deleted file mode 100755 index 7e411a71..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSans.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSansMono-Bold.ttf b/client/nfsexport/lib/fonts/DejaVuSansMono-Bold.ttf deleted file mode 100755 index 86f97226..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSansMono-Bold.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSansMono-BoldOblique.ttf b/client/nfsexport/lib/fonts/DejaVuSansMono-BoldOblique.ttf deleted file mode 100755 index b1439380..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSansMono-BoldOblique.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSansMono-Oblique.ttf b/client/nfsexport/lib/fonts/DejaVuSansMono-Oblique.ttf deleted file mode 100755 index 81208a6c..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSansMono-Oblique.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSansMono.ttf b/client/nfsexport/lib/fonts/DejaVuSansMono.ttf deleted file mode 100755 index 029fcac3..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSansMono.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSerif-Bold.ttf b/client/nfsexport/lib/fonts/DejaVuSerif-Bold.ttf deleted file mode 100755 index e7aeb9e8..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSerif-Bold.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSerif-BoldOblique.ttf b/client/nfsexport/lib/fonts/DejaVuSerif-BoldOblique.ttf deleted file mode 100755 index a457fd82..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSerif-BoldOblique.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSerif-Oblique.ttf b/client/nfsexport/lib/fonts/DejaVuSerif-Oblique.ttf deleted file mode 100755 index 887939c0..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSerif-Oblique.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/DejaVuSerif.ttf b/client/nfsexport/lib/fonts/DejaVuSerif.ttf deleted file mode 100755 index 5d096d14..00000000 Binary files a/client/nfsexport/lib/fonts/DejaVuSerif.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/README b/client/nfsexport/lib/fonts/README deleted file mode 100755 index 076fc9c2..00000000 --- a/client/nfsexport/lib/fonts/README +++ /dev/null @@ -1,21 +0,0 @@ -Copyright statements and the source of the qpf fonts are located in ../../src/3rdparty/fonts - -The fonts here are in various formats: - - *.ttf - TrueType fonts, requires QT_FEATURE_TRUETYPE - *.pfa - PostScript fonts, used as source material for some QPF fonts - *.qpf - Qt prerendered fonts (QPF format) rendered from above fonts. - -QPF is the portable, endian-independent format used by Qt/Embedded 2.x and 3.x. - -The prerendered fonts are generated from various sources: - - fixed* - Fixed font. - helvetica* - Helvetica BDF format font distributed with X11 - - Latin-1 characters (about 250 characters). - japanese* - Helvetica BDF format font distributed with X11 - - ISO 10646-1 encoding. - micro* - Micro font (see micro.bdf). - unifont* - Unifont (see unifont.bdf) - - full unicode range (about 50000 characters). - diff --git a/client/nfsexport/lib/fonts/UTBI____.pfa b/client/nfsexport/lib/fonts/UTBI____.pfa deleted file mode 100755 index a4fda2e9..00000000 --- a/client/nfsexport/lib/fonts/UTBI____.pfa +++ /dev/null @@ -1,1172 +0,0 @@ -%!PS-AdobeFont-1.0: Utopia-BoldItalic 001.001 -%%CreationDate: Wed Oct 2 18:45:57 1991 -%%VMusage: 34429 41321 -%% Utopia is a registered trademark of Adobe Systems Incorporated. -11 dict begin -/FontInfo 10 dict dup begin -/version (001.001) readonly def -/Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def -/FullName (Utopia Bold Italic) readonly def -/FamilyName (Utopia) readonly def -/Weight (Bold) readonly def -/ItalicAngle -13 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /Utopia-BoldItalic def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/UniqueID 36546 def -/FontBBox{-141 -250 1297 916}readonly def -currentdict end -currentfile eexec -f9d13ed4c538ee56ca0c8979e615439db5863a5292e578086555752cf04323b5 -761364ec433e576f108b1bff6c56d0f56331bc1243c31feb9985de983b0b3300 -e35eaa63cb5ef5a522d2e2731f37eef0cc62a540af58c4780559b4a0499bd168 -7642677ef167669aa264d68a8ef6da7425b771d48260108ab87a077560b2ebc7 -dafcace10cee472c35746fc11d5304e441fa0678decc0652588a56cef7c28ba5 -5cbd94a7acac9a06942a82d6abc1ed45ef21f4f3f5f61d0002340725ba15b9b3 -0b9992741770f020ec318f514874b6abdb27c3f0dee979cce17199b9f3ecb0f0 -709736e55bc48c55ebc8f7259d9e0ba13b46c2983c6e8265633d11358057019a -9bc40f9ef8830b5cf7022bc19c01160d17df4ab51d113cd49bde4d1e3b5f8ba2 -7d179464b8fa28e12092267d5c70cc341eb3ed0eec08b343175d5458311a7404 -a9463d728eda1642be73366ec57a705501aa054b60b04983e30b9987bdbd1c69 -95ef18d327beb2f2086a2245602495ccb7851bcc5eb302b980ada64a262c562f -6b2748b8f7dc4a0a06c69a7231fd40568bb236b33f33ac04f1d2f91573f60470 -599ca51abce802711c7fbd95247ec33fba3a393195a5cd54622434e668d1e63a -a39a51699962bfcc4774228ebdb0b01f29b430434d8023331bd1b6b2c76e43df -b3c68753c55075856e9ea0f5c7d60f510bc115bb70e0a8eb9998d3f32a0b72d3 -ab524841ef36b198e3ae58129ca64e005f776a0676dcef57e7961dd2b948c2da -f392cba950f1101a7bba99952251c82ab5d0eb5ecd8af07973eeafcb3e0b5f2a -3b6c8852ea072b9787fb945cb7cc7a2acebe92a5458e7dab5ea2551a61a55068 -d7023b6193c750e32502fe1e1d8e8d497453fff493caaed83c410eef050c30c6 -e38339831517101b07fc15d5f63470a9863bbfee0c0002695669900aa70a18f7 -a87f1b0b83494c39c3c90a8313060204d19553e2d66419e7b002b25108ba00ff -a7e60c68b73c53f306e112ecba3b64d35caf59f11a41ae76aa2fb4882ffffb96 -400c2b6b0051c90d7279ffd0df3a6ba63daf802888bb6b98db281b89734b6e2c -9ebd473352b36e11b5c3f3c7ecb22095b7aae220fbc89cf6036fa963530b8a01 -1cb06875ceaa143eacdbf1015631e8858bfe5917e01737ec6c840fa7097a42f1 -15884772664b9665e5575dc3003914643d34f329b9cd12b1012e93133a27d139 -ebcf7f9b68dc21575f3ef070ef94d4f3f9ea0d3ab4a75e6ec849a4630f4f13f5 -0883dd86a9903613ecf36ed6ab7294afdc167e0eda4b1944870a2f99ae8a22c8 -1b711d1eeefd489009b86f08078f4510c6846b17ae72c87dc51d0433ed9cb40f -197db7e3c2ef41f077481b3d194aa3284d5400681001e0531348b91cb957c396 -5611aab14b92dbb110db950073dcaf69d6454588bf63c477112c38ac578b0ddb -18fbf7f0d44138c4721743fc05cbef7cc3c684328df7c4bbc17afd9084bafec9 -99b4b8304cfd2d604e31d96c466466cebb6ef3a2236498e31b3c8dd8f15c1ec1 -c67d2b6472c3dce8f613c8a206e5dbca88b03ea931fdbb7e2d19625d4aa0d800 -b2eb953de5ae22b2478432710ad8efc57558171c332f6b27a2cac9145badf751 -9cf4987b853ed30d3a726039a83158c03a0f457dfc9a81e78d909f070e8d47e0 -252b72d03d049ed6349c752a01b92072a2c8f6c50ae85d6a5469eedab2e0a5f2 -6e502cf72a76706ecaaf7a590105feb6f0c1f52a820369fe3b903b08ec602ab6 -882e1ea21007443e2460e29de7fc07fa72bf89c145b04be55df48c0ae5ba1bcc -c84bbf0a2de650ded51dbb240dadc2faf3a2fd0fa8749f0b1e372c579f905148 -706e910cd5578d06c8018e3ff8b88af6002c549b87a9fe2b1f804e95921ef83a -2810e015e315d55496eec2bd16e0b71e4d7004dfbaab8a5d651c4446e343e382 -8204f6e7b4cababa6aed624942902c65899615d858ca24fe6c91a41d087fd647 -e50c52850049c81a5dd9447761b3a308df7403fa4f8669df366d3e114628858d -17ba68a92fed47c199d1f7d415c8315d30b394177b161fa487225c38e0b9d9c7 -ab236e90e926614f9fbdb3bc081e948319ec3871fd37193f0889ecf2c47841c0 -666b272328bbd281f719181b4e509c01ce80afe08f6244ecbfc136f8edaccf79 -36399e63e5982d27fbdaffab086e1e064c84cd97d4eef959aa3a452e065618f6 -b549e3fe7207bcdf85ec1917612c098236b9124d6f1c037bd0656777dfee995d -5d125d678fa7ac5c995515e952194f9620579316eb0f0ad55930ac82fa773159 -c1ac7f4b072f06baef03ee07c23fcb4ad8072503469a8e4eda4cf143c7a68d27 -bbf01668c0abf4950277c195fa1cba7297a2e863299e195c6684f2a076427e5a -a2f308fcfb1dc11d14bcc8a4a59611eb8bfcbfcd73e963d69c82fcd95e989ff5 -ed486f9809d3f9e1a0ddfb573b37d1d3d57e0fa4594f66ac56fe16168a472552 -eca179c7ad26be24e9afb1a759b73de53e9f7075b7ce0ab8bc8e30ec6d68aa42 -a84b36f2c4e4afa9e59c6dfa9af97a93b2cbd9ba786fff8d8b60305b608bfc36 -83c2c94dac72000fa51ff15739975e9ec0185f3b7cd805e67b5ff91fabfa648d -81e0beddecb47dbbad28a99acc3074f1c248b2231be3fb01b331e90a1bc723e2 -8a0b2e99f2defe00a0b33c13f0a6a37717089fb28b7c58daf478e877e4bcb73d -54b358c509a630d73938bca5126547c94f88c97cedd1c65a3d514b3ab86a489c -317554f67e1aecc75e3c71cd37f268999f17fb649cc52ce4ada26d2d4ff1c248 -e9e4f6f5ccb85aa64e90f371cb94da1ecf5b995ded0fa6771e3f874ef449186b -4b78c298d5c24e5127532b67c9479f70c3703ab7800ba8ecbca511703d6a1733 -7f2edbaa61171f00f01debc6eba2094465e248cc8262bd35cab622443a1be5c2 -8e6318e4f3b7131045b8f676e2086f0432f51983c74fea25cd5aad0797a4cb5c -6503695292d798c755170f0ae137674d25759bbd89cf4fe0917e32999b4a04a3 -655ea871b30e22b0ee39f29f7915fa3dbac0d01c55a454728869501335f97e3d -24b17ab7ea28784b6f8c9e0b72b38f64e0fdb578eecaa5590c20a1d17ebd4ec4 -1632b40553aa80fced6d88079eee8097a410a29b549a0bb3b6fec526caa745a7 -202eabbe2cf3f1262db3e6e309e0afc3d9c808fced17b05c320945fdf0a05459 -ea7ba64fc4112fa68eb4887bc845e63a598e2d31df0ab0d64155e631e3ab4621 -744da7c3da19a2e66ed2bf759505e0cfb47a76a81ed7242cc29c7383989afc30 -df86c4b38be0a5c8b360f586f463e53d6684584a3a5fc75495200fc707cd1981 -1a0fbcc0fa784b02140158ef0913170979c4fe96f3fdeb414cad01b38d2b5934 -0b21cf14a28c24a583472ae3cd667ab094e56744c6b35ab7870ee5b0aa22a70d -dc68afd34b44e45275ca8d12747dc6fef76b826f1dcd70a5a30537e096935f7d -ba37414aa1f0111cf7a1844c5e2b3f63764458ce9e113d06cc844bead4d22109 -069b5174e0ba5aabef78dea7e384369de2e4142bfe6521efadfe67aa41fd7bf5 -52ff016ad8d6314b4285e129ebbdbfd3c6e3383906248f0ce045ad370b0f90f2 -a832944cbd59bc7cf15a9c17ee0fa0bbe12f2304fd6a9f56cbd65e7cc91ed860 -7d09e58934079a74d02c1b25b958567133657dc028148e9f13a0ff6db812422b -6c7cfe064a171b4fc5e1764000d4a761d1c476aeb59a45f7b64ba1c8623b1423 -91d79d124b8506eaf94ef8fd28b5fa6ca6aa5677ffe979dd3d75f540d577ea8f -9cc95f5b41942294df812c4d4aa4ee701f654be2c00440ba575c5512bb5c196b -3ad24366514f2b4ea4ab0c35927517bfe166c261c0c7f9b73ab0c52ed0da3696 -628a1f230e48cdaf2ae53000dbb2ee3fe17b9785faf74baec7caadb23fe6e329 -b2b908bae996af74097cdb6e280b5d5c2783b33ba106d6f458179822af89ee24 -f99514605cb4e232b62d92014636841a991b3790ae7478d020d6513e70244034 -dec5f2106a1820acac4b7e091dce521896f25dcfaf58a521ecb5d26ae3b8bed6 -c61c3c25d09d159d5ef58e253dc0f9817fbb469e44eed683ffecb08689e66108 -ce6f93327a5ade948640d0e9347b113d846846fae982687d95b66d6a75ffe876 -a2c50ce60e3f7953d9dd5a9f5d65b1105a7849d734336804de32576e81abd201 -4aff1a36aae15c725df295daaf26238b21c6d288450aa4d94e26ce6a1de7f096 -5838c195a97ddeb019500e8fb95e8b48190b020cbf0582a99df66b7192b67448 -c1695882808efb39a3c54fa42c183f65492f9d0cccd832b5590a6c4cf18e8d2a -e9f50100f197818f192c39d4204b6dab711c2f8cb53e5ef002719755cfee11e4 -f1ca77783034901fa2da7f82254d1184f2f724e36be731fe923c99d444407539 -3000ceb19548d5c11d7aab1e13917ea4391ac626e02bd7a1960bcdf24e048f46 -76fc3cb4031811d94f83a0c23b309cc9a537b599c174dc862429bba8b94e7e56 -56682c13bc4deb402af2334993c66d6ef48cebcf6dcc924a2a1615ee92edb7bd -221fd3204d9dfc6b2abe84d5b47a9d03227a4c015204af7dc5f937adc8c60de9 -feb1c1c722a911b2a5f186478ad7540ff28f7cbc82d85e461c740e8aa51c16d8 -8f939075b78f8a097f647de080dadd87dd5a4107ae7cbc25a7964e5e8e0aff10 -1f17185e95a7c432c76f5fba2138ee76b7ec76c691df228099c0de7107aa0f5b -523209576c023ed23e9ea9047d1def8175e515bd1ee133167f0f92fc87732091 -4be8e6a04a796e5affd91f2e0bfb1b47d960228b970cae0824b32f602504cb12 -9f29f933e538a01fc231eedadd0bea5523ce4acd3ca5d512aeffd4bd91adc088 -47e520f07aa173dc6d1dcda5c7a20a1cbb399d7a11694bd2c959d2546d5cd1b9 -b7afba473e7c9f0492c2d4b4ed1204d6f633a431d83b813b5ec5ecbe41b6c8ac -003fbe65fee1581fb80c2f4c691f9e8a33630940b198deba7491d83421017409 -6dd46e914bf82841e2377e57cf81c0f03db26133519f638d0b6422585af7f7f2 -589aed2dfd15c02f83bb6fbac42b4fe85e14256c5b5f6e7a287953a4f96a0c6c -562b87ff8a8ddf922571aedf6898faf7f9327f92a6f736546c5699aefc4cd1ba -b403a43f8464b215993ef53d2d9186ab1218f7e1f2ccf589ee0a52096a153ac5 -e328654465f3f734fb590ed232399f9f6dcfdfe7f702b4ed829e444ad685b1e0 -d0764217ae144e4af82554faf6d013be83816ab94a6b175905916bea3c053fdf -8d033e48ce7e6a7338fdebdf9cd047624cfcf3be1aa133690eed083e28939707 -778274ae874e906f972080d9dd453ff5039cd351776a1ed52d3e4a8fbc749f9c -588478826593e0e8625b013ff1469bf76aef8ae06a63ebbda3176d517a7cc32d -ad93a096258b227102b2b748359ff2e70a438709eb5f1b60be92f7a6c8f92372 -c3b9a58ee0934083f2300c6423250c00ecc2cfc67a6be83450eeaeca993fd695 -939e47e7c7d28f9db30e2a82ad4895092a1a5a734f1727b4734a14743ee1c9dc -851c9463451042f28a519e8c532e16c6a7f65a11286b85d48ee3bd6f09caf327 -cd87df6f40cc9ed5784744408da6a2e65cdbc6838812b2da414fcf7a33ebe676 -d381f7cb0bc1d84273b03240fd3eacfab2693d04abe2a89f6d884fc1ba2c0c6b -183916096f98f062bbe990f87a9d74d275f18d5d97e9eff897b99fd5e5f2353e -16fe417e644364017a1f014cd0ea62ad0a684fcb1f7a4969bb2d0119d3021ea6 -91ad90564b7cd59c03662d4809943ac3c0316c45b3e6576a9cac3f549f04a9cf -b21aa641eeced2af9c0e9944bcd355444f1ef2dd626d94d65c1e00b208f06fd7 -526f73917bfebde0538984edc704fb56a92f429f2b3ccd2324926605ffb9e06c -e3f9435778a9972bc1d9511b1c9e013c9232cfa8fa03b8076de78144e24583da -ce13c107390a4b4a66fcf41d02c7ea3889fcf648bd9b202a77ee0debb98745c9 -b424aa89f8028129fea8293f44efdfea96ca75d1462715087baceb18506124ad -843bf5b5eb3044665921c1e711ae61d7ea772773f99f7aee6de71fcd8c5c2c9a -4e5d5a1f02ba9ad0e31ac0673594882b491d8dcc9b7c4d8bf806845cb7e7b054 -e073b9379f6f7b756786174fdf25b080adf0cb4645dd8fe1b4cb5377195bbbc8 -88e09bf98c82e523794bc350fa0fa12413dbffc006a66c47c402b78164fd9234 -b9fae67432f7a9423ee7569d3e6bb293cc0a095f3c5a0abb6a2c52a0c4dccddf -54dccede5914afbb9bce717409060d5772bf6c19ec65700c6395884b3da5bd6c -d81daba48977e3af9653875148fe7ddab905a0cf6c5352a468c36ad2bd09d897 -2d54f62bf9af9688c1454b67f24b5cbe39e9c069d6b5429ab9e8b2117c0b09eb -7f877d667af2af4c06339230c2e2d082f389d7006f8bacf00bcef8b652a8f1a7 -e210e7facbe69f8b0cebc21b6cb559ce9f6d8e1b0546870d773f6335426b6978 -60bfe9e2c6cfd1206ff1fa27cadbdd58c4c2368e95e17bda712c4feb1e89c63c -45c0cc72dac845d10847408dfc7dd390ea0c50fbf3012939372707be42c88a8b -025a77150be73e08e73fa1e15fb39d985d5e6666d2a4f77f947eb1b2228ef0e4 -bdb7f767621b7edf5b863d44c09a02b08a41a3feeb239ec9e022d0d8c2fbe939 -fc242a923b082a3035a23c0ae48dae76b4c2147a7f8126ab66dfbb8c892d858a -48f8b65eb85d3216b8c156ee4005045697a11f0f349d05620b1c0d41575c11bd -e8165d443d4e836d4b4b2fc028e3ee7eb995115de8bb5b58d7575a260c8ebb93 -cc5d43766f56ce454dff93669f41be40953c42ffcc98a89e9f6ab320f7688083 -32a48d4ff8eb88c84c7e0cbb9e031ac71c53873da074cd4112dc30b4f27c163c -0d6371b35d0571dbc1b80f5101c90d4745e978091c4c8b2bfe8aa23db4979a9f -143dba6c041772bfdda2077985fe5da829d9de5d8c5c9d02175f65e23495756e -2ba67a1f46d862bb76a4f330c66adc2df5303b34ca0e705f28a97e2782105359 -3ade715c3f7eea39e401af757229bd314b886dda55f418b3a67657d199cdc8b4 -d05a5b7aaf37b53e1c5707fe5454d512c954b6887731d2626499cccd6e80b1cf -9b3116814c0f7705d53b402fc4e9b6307b22941daa12d9c66849165e8de01e0b -20c33b1b503c6ac7995d4bda83da72dee3b177389d500061e16c6decd05bd391 -1e2d1727b5436aa550e1bd505e91ce0efcea62d9fcaebc098880180caa252f6a -667c75a3185f62caa0c28763104f57e93fba3a396d7015b3a55161401970668c -7e6ed168f6e0f1029216c27c33544cc77111b2ef2b1538f1e89397a2e78f0319 -28e948640198d7d2b5684f9566b5e70988c2516a81623a6fba82c1554f3a8a85 -98c1efd626eea0ea586cea3b1f6b62f97b1ea416332ae107f0f174ebde1f84b7 -4af56a9495913e0e84ed0d8702ebe1c699f8e8f056de6e7728023e6fe0dc68cc -aa76c3e2aac6eb5f5ee502c1098db8033c4432fd0c6f62aadb989954d81e4247 -6efe3ddfef52cb066d3da1811e1bf13a9da68d77b3d88ae4b5e0ec252a992b2b -dd6b487458694df4bb1f300f88f6891f2033dfd4ed6eb147315ea84efef20c16 -3b2acdbd1a6812ebfa51f69413d1750c60d374839d46400b9563daea410e4bb6 -4231cc49a6db6f9acad1bd930faa27bc25e636deef091d07ee8c405eacf00d37 -a67027a49443231fb38cf74b4afe723353838866c9d56c2218507344cfe23e85 -264ec426283982e0e299b8557f37010c921d4b1e92b1997498426d3690408685 -5e0ab86ffb4c74192269197dad437aafdfc98809cc865a72f397901a02e22f97 -f035deb4063864798cbbdca6adfdd2e1f644c299d5acaa8b0ebf0102cdc1e478 -77179fd1e5c69595485ce83dd18e3a154e8f6bf6aad3752f209ad3e561cb2400 -0959f964e853ec9cde9deea9278c5988db3f026a6120e0020438f44066d270f4 -af05c4d6568fa3b288c0443be3cc406b6ea555ba97b9fae56c2b7e75263397c4 -f247bee72066fc445c158297eab5151852dc2c32306794b7be0a5f23c22f76f8 -4c80909a303d6d29d808a606b8c0739e69d715778ae843c033bcc8065ce83795 -f3d5b1a403aecd1ce8db79b148946d9f96673b51840fe073065a7da8cf8a8e98 -0e70984d88ef691e21a7f3b52c2a455286d80e3831ef4b7119459970a77e2bfb -1b2e12a6e2cd4e02d80cdf90fc00a1fbcb42817660487d5fadefde0278d4fcad -98fe39b3827b681d4427fe992adae296946720129777c73d954e1f91dfe80130 -362fd97c8a7f693b73ebe45155434eb078fc66adde8f9217583680f5e0c9f80e -c413226de65a1e06fd6bb4a4870e8702d2d77eeafc0ea5634272f19f31a6ea21 -b51de45449e89807b18588c9a43524713c31f27be41941c32da7c5cb636c5e1d -0ef69e2ef2c18ab0746cb2d19980fbdcf9691c1d74606830522219310193b32e -f886e8f200135b55e178d832f0416de4b86e2fb4eb8731337efccf833c044446 -1ab477118d9b6d53ebf5c42e46ed8e5d0181eef7a15145d5a51d7a1b8f82189a -f6ccde81e2f1da5a0e419838b90adc945a7e74a2132aa57807fe6107caff8296 -aca45bdc7366cf3b738cf402674c2c2ef0954ccdf7c7df0377641e9ffa12a165 -725cc7bca1a0d38dbabd6982b2f1c432454919fb58876f7854ec713ebf05e0e7 -01d1135f89b31ffa94413f30f72527de872418559c07c8a87556fb558bbd7726 -aa9cfb99d41a7ddbc8d5e4f8aaf20619b2dfdc18ed319b958b5812867e5f4442 -fc670f55f78be8ec1c3ed00fa36cbd52c5c15d45a5c77746de5aaadbce70eb29 -05c3972ddd7e2c220ba4137a5a6aa178af65fd65f225393a08197057d5dd407e -9c238702425991496f7c7c91754399ff3be95c95704f26de0cf99aabc5786994 -9b727f5cd72f4428908b95f1b879c2366ebc061ad4ef68ccd4f957cc76594d88 -dbea7f48b814a94be79e2cebf4de7d2f6b2fa680baab5196b132c5970d035801 -e021704e10823478c68b4f791e63cf7d9725088a6fc2279e1d09a68b04f31901 -7bfdf33caf58ef856a1aaa0793d327c91a2224e7239c211f1210ab11cab44b93 -0ac2b75868db9a0faca784a130fdf9f47cc09d44f9bc9f697f698d2da440441c -1adf05c77b768535ec2dd30b9897c52b1e28d081f1dde26d5e8438c405277c2c -2291b1911cbd914a714159a957e0b436583b1d90cd36c7ba1b6e1041c8eb3996 -dd2715fc01e9a82bd1590cb4ad8fbbdac9410beda818b81260a3a8742c137f6d -175fa8bf26d648c991fe684e0e1469900ed0a53b7d44e35e63c7e1fd0b5aacbf -5e9b854f302f3ee9c7620f5c9e2a5446f7653446f0bdc192a34e23654830e5d1 -52bf36fc02c220ac72569f80795ee9271fa89b438a8fa4de0a3fef6de60310e0 -77bb99f86ae3e0824c593cb2d0387faf97b3612131a2b0edbbc79a4444acd77a -53ec23d447610ad92120f7702df3c0955e5870e1ede213b5edcfe5c0405538bd -6d1a06aa55a8afa73fb82a29c6eba9adb721473d0756c31e77a4012d10dab6e5 -80c90caae60c3ea5a846f74536079bd790979059936c7e879eb79905e3b67b3f -ace6bd0a20a8afbf1034dff455f130347f54b6f7862a772f0afd46f3601349e8 -9d1caf04d0598df4cdb164190614aaa872036855c02c3c92374a3baf5453baec -0c0d2d89d79fd0452babb562e925422d17e888a9350fa50d9b34bd119618a1a3 -50f9059f36ffc5adb1f29923af100fadb5d32aa948ae738d53ba04c44c3afb82 -e935f0ccf3a7903ee5f939f10d3668c672b75e90777354d1429453010e4f72ac -23bb5cd7ddb1712a6851c033bfc10470f8ae87308777dc1d69a1b95e0ab1a655 -e46f843d3c4bbf2714177d4c83747f918884d366dad7705e4668087eb0d13548 -2d3c35939ad5402b94d3fd7f2bdceb0ec55ec0fde7fe7a555ab921dac698917a -fc4bd079834d26e0b1d4020bb50588e961658935079e8b542f927ec7a7e0ccfc -d03a7bff24ddedd6d7df33c3507c449067e548b0db1a42baa9e3b1d0528298ce -981f8e35b10b00f69c92390e4aa06d2b3374e868b4ee0cf0ee5f59f1c734550f -640bd5eeeddf30a340558a831b9e39bff15b35649a22b23b8f39d0d473a07be8 -0c757d16f7738a0190178de0e5509ad9fe624499d7464c43833515c9a5841c1b -e704c88e2df4508101dbb7330ab3dd863f544294887e6ad56bdf15800ae7a0d8 -e523cc1bd1f9424576492b11b41ccbdf5daaf31e3278b3d1c9160c9310f604be -1e869ce18ea776bd3ad33ad41dbc5b3a0acce72033b37aaa5fd6854d0f2faf59 -d2e674cf97ed09c3ec2f7a02657bc036f78c29e25284c7caa6e480beec4772ff -09b02feed2cf374a02b43f653c1d095d21cccefd30d2049c50327fc38bf44e61 -1e5afc9d29d37fc5c22f62b927fd2c5720a8025194734d8d361bd63745781d3c -996f448dd51f345442f1738ef8915a69bced678b6dc75ce6d77c44464d4e3c23 -0f90600074b5d31a870ccb24ccca94e8597177d51f85f9079d3de3ea0978a8fe -f94346f14cc5dca7c6476dd60ee8a7f402e498d91f4c3b8071f5238bf16e8909 -0c0d2b246fd6ac9bdff3ec3633c6d90dc5ae76e353293823b20abdaae12a66f5 -19637c1e69ddfd24df8a76807c441732f3bc7d334bdf5cd5eca5b3ef88798b59 -6f0eee2d147dd35f57c4a776a9c89eb781acc56491e6adf40b94df9e8953df54 -ebff8faa7bc3128a375ee91a17ef4e6ac5fbd17f84db3bcb2ac0468efcf8575f -b51865ed827e1dae4a3b601239519fc552e9959875285d9f688b1f4da4a62ffb -b166645fcc7e587fa82d02f8ea43049f9c589a3b570c16aa3d37f34f999c4f13 -ef852c19789834269ecdc91433b6351f1936b24fda2c6614a467855679c50162 -fb62daa72b9b971511e81c8dc7305e90cfad4950bc2dcfee8f1ad6f30c2133cf -c117dacb41836efe6d5ddb09b6948475c21a7c7e0b843820564b7f4375b43c09 -a07632390ba4fb796e2ff6b45a0584f763873e6a36768ef958c306fdb23607ba -73cfc5d53a282585b9c7c97e8b59ceeb43360107efd16c2d54f825fc77e4eeed -50c040e210a2be8034648a0cd886e2720b8d939ef7c94df36bec7ceb983e7157 -5d8c7d688fdbea4c23b8bdca5e5719ad6bbd1384032235ab03d05af8e86b2e01 -2f6ba96703f6d2e4a014c3de80067fd3fd665ed1c64c3362f254e3c7fba06800 -389cbf12c7b229b66b2df82a823765b41235e31a1e348cf57da0e304fca82b44 -0b2af48040f04750d7df18ebf95da0101b418c3820e161be149a3459e1c39758 -e8063dd0fce331702e9f7be3d10da99033bf2c90a1a24ebc48cc276d78f61cc2 -a6721f3ec1d48d86b54f8eb88b9ef248ee50896901be472b8196f52289869d9a -a656932d4872bab54cfde6eb67537c70078bb808bdd52f4d4b99f4d3a3d7fa4a -ee72b2b5202983641496ab3cd44434d44062db39d6c3e8b60ac6f73ab9b101a3 -2d687ab24b84e27043126bf4eee162f2cbea040586f49fd91b5d4069704bb9d6 -9ea28a6c20643c3f92f648b38273abb8bd944e7edabfd4e3085056f4b29fbe1f -ff5ec131de60fa61812a8ab0d3673272309e36f6a1bd1552a3c41af2a2228f85 -f3809d222aec8eedcb4baf373f37d2a5de8ecc62ea37b335b81005f8e92f27fa -6b2397952bbbe44fe9a3213c33e368d9dc37465e84f538d969f97d55b31956ae -7d8522a5ee6d6fdcef2cb6ecb636de6ee1b2e7b44530166f7b2eb278a0892504 -30cd9e39ad1d38748ccef3f201330fc43f12f6581162775064b6275c6959ad21 -b5486b450d8581de96291f870ed3768da5833520cc36c14b31a90232d1d1cb03 -de7f8f0a506c979b765205d82b518a8ddf6e3e494b4217e47c5dd770c51e47f8 -106f23e7e9c0c4c9b2bdbba64bef04c5acbcf437db53d1c47fcde3bf88d58f23 -fa8a8c482b5d45c78985e7e850b676d773a4ad42bea32e3090403c01c1532a7f -ec6e008ca9911f15319bb2708a57499e19b3482537ac0bcfe8a2dd398b0ad1a3 -a4f9812a66e9b82b095da83a9925c4e9128ad159dfb674cef7090c06626853c9 -0f5d64f662ce69cb135a4ed6eab6f69df2f376f1e3ea47a1903d066441d157f8 -858848b89aa4634011799b26842adc6981686381638e9d7e2c6c8ca22e8cb9ba -d86986aa0300a224d2d0bc6fd227fd557de7da66c301e4cac1aae538c62697b0 -b2258394e0af0333ef56007b98b436dde0d40937923c9c72ad3e3fc7b39d1c70 -2851b4dde84e697f7983d5f71089c3f94abe8ea47392800d7300f4576e9498a4 -20b537ff69231fe3643209c59c485471b2cfa89aec05e50b2ab081eefc80e1f2 -b08f772631c8c649497745610363246af135e2c3231b64be0d5db3789aa6a000 -f27ede24cbc19346557465818d4bf4c4286e08840f030dddf30bb175e81482a6 -bdbdd5c83a361a28b8ea5654a9066b5c8cfc8f5d4380cae506d6a61cf0ad481e -832e08f17bd9bf87749ef53d858b2a9eeab8d7be7e259bf110c4e3313d6ea87c -1ae3664089e4af8160d334fb3c3005de0d5037211f888ac0d959dad0a586b61c -0dddb0be9c5110479f5b0674d00f0e54ca7f642b62b32593779591b4dc119a25 -1e8fb9c40b68ecc9e5a08e63bae86aa52235dea3902f3c355fc1ae6b8c79644c -01a54c68fcbcf46ebfdf0a54eedeafd5d1120bf228ef499913b4426ba7dba017 -75d6e240dcb7d41352b5cb624bafd11fa37fde8b4d4fed2c106a34d8325fc31a -b86701cc72fc1e8db68a1508337947352c46d46d4393384cfef2c9e9e9d6d877 -f13780441ed70e86aee02516ee87bf567857f6af21aeb625ac3e30fb1b873bb2 -862a5ba6c7a6f30dba14fea378a41d38116214c999ab4666e48ce091751ce700 -62bd9e47351e9458e355e08bdf9f38ce3f52993df8d6893bdfa29813fafcefd2 -217b481c1100b8db69b9f3a2169c2a66300af2099a9acecbc542f140ad5d3a64 -6a1d818b0cfad8cd8b4b8a3f8e8ffddc03ba62a624e72df170b65fafed325883 -feb1bd45e3865043bb008d3055c08a3e4c95734db50f983f3ce6b6fb9367104e -c44b96c80b2fff43285967667a3edfd341ce587b212e12b2fcf156f03b0848b9 -3545bf50fe4ba75c13529ee16857d317ae98a934a369b83db5f6039b72bc09be -6d14c88a6e2c77543796939789252b70f51fa37a69b08551be5416fe8c785110 -30264f52592909c8e7f81f54f1b37c2b488f088e85994336c7a075779b168464 -fb37e8f7085f8fbeee68fb68ca9fb2986a53878454d72a3ead0b5b2ed507528a -ff6aa53b238380d6f0e59e991f4092d68e2001c0e6d945b810141d3d1bbb7405 -46d378af9ba3fefd4d44f6caf78b74450a0e230431a5c46e79c222c3767c4132 -90cb9f75baea5d1bbd25a718e8cbbe551441b642f10173e90aaa9b2cd6301332 -0ced79e66e38e8dd290bf36fe33244548216916fad18f20da7b73e31838930c7 -f4a9c44b3207eeb6c103f633f3fc8b2b74fb04a072fbc156089ee3f7351ef196 -f365dd43088f4d4a280be7e81fe73293912000e3e5f493dc4bfc275b5b8a8796 -bdbd266090733ba17e45239f7c0dfb4153be451a8560de6551202f700efafa6d -2bdaac1ba9c8f6e084e4b273fb8c501f336b005cab01ffd38cb6d27941096f75 -db1721eeaec315842dc7938dfa1b9e530b285604ec2c6982389e6c22fbb126c1 -e6a21916e06ee778b51fd72db2dcc11d878f21276a00bae3cf3ad0999c64d007 -f909d0ee79251810c64c4d05a2a759ef0837cf5563a8765817003dac3aa1bd1e -7e3b868307e2d1ccc93b1a5a0a4cc32b4eb6961f71750644fde26dc7b01a66dc -667005b396bb597d1eaeaa55b46506d447449497d29872485b31207e460df2b8 -c5b181459bc68b686182f1b6e164a825199c3ee24c1bd6a1dca450ca1a3fde70 -2d2e89bf6d8b98e4c4f25284b667cec77677be9046ede444a1b93b3b03db6aea -f89aa0759cc8aa7f10a2c4b36f63487f59bfd6e3a2025f26c346847fc257741b -629a3f662e3bda8c3c010c5dc1838afd26f875a56fd6042aebe1dbf119cfd387 -477d713cdda669f61ec1070705382520548a94749711144d8311df5db319ec0a -033f2d5c4c639b5af42549b1bcfd95afa55994389ca8a66b64c28520f821c808 -4ae9dcc9d6020aa6b1f93de064318e5e464e8808bdf0ac519653752e612c9149 -6e3c8e61434d012a5e4537465cb678b6e9a9005f5039e415dd2872ff0985439d -12d524a4f34c520aeecdc4d96383e1edd0059943d59d47880f51729e54a68a98 -a03fd6ba4ecb567c47422e04966c4655f9bb6f74f2b82d4d3ded42a42e90157c -6639f18ecae1cdc636bd616b60218d1b6f8294ecd09a88fc5928c37c9304d7b9 -5bc609286a3524fcfb9e406f636bf1b40573225e658543c29be863964556b622 -da308dcbb6516c88155f6d9b8ae4fe34b17374d46dc560809fccb19e87f7fede -beaece1ec0f41102b99ba6c4de9dd105dc5d90b6d3b392040273e0703b204d26 -89d1a340d0d32d6e201b91244e07ebbaae8b4c877a213ceb2f1b1d3ca07880ec -3f4817c00d48a06102352ef4de3440699cfd69ffaddfd1b90edb42034e5b8e3b -c42fa37c38d563554f8d5b96956879b63866e552fb931c6462b934dd0454dd9f -965055bb3e969b0063dfd2bc299df5552d8edb68b6530673fc08f3a0bb96557f -13b068d62dd8b42060e67d2584b4e6fb97e9dc7439f5c1d23c6a324e72062395 -6305ab4be3a430141d8e615b9f59c3a3eb2b1267ede3987cefcc1419a9f6de7d -d73ff35749b44018da9e79aadebafd0495ee9e29ae4fc7e420d86572f735134a -f54e8f853b764c6e0319f720e8350110c1b300290c8bf8fa4cd3be47533482d1 -53553691ebcdfb46c6879347e3573c318195bc13ea1c732d8d0e7567eb655b22 -1960e8476188532af8af85f7ed7d399ce2ced204894be3a592ffbccbd831f027 -7ae604851702b50c4ef6482c78c77c7959869e83001f7f8f93bb3b8be70d587d -9e5cae3aeccfb455463adef4038ccb6eb8447a7e1992929f5ff7f8e6f37d4a11 -d5815c2ae35f90d3708f3e2a166953d9823846d87d2e7a7419abc47f4044c8bb -a9129cbda3c7fef7725b481fbfab1ec2b3700b3b3780ce5e711663557e873531 -72c3bf0ea8ba03a66c5033602f12cd8aeb3c5cd0e0abd65c936cd7d973e8d3d7 -c5d09bec259f41005187115317afe5f6ef895eac769459c0ad7ab039febed7c1 -dadaf14d015a7a3356982c242713e27eccc7c4d7237052b004e8e5f15008a826 -ed515dd699e6bf60e3a2aba08c07b8c8d9df393094069e781c7d75b090445c7b -1741949aeddd01691102b001781598b87f493ed956b500b2d813d50ba749ea1e -bdceede30f45e0fac0aae683ae087a635ca344411c26a2dcd04a084b5d1774fe -c1f77079af1f9d8c75f383b3755f3ea120e2bef4375dccdd221e1811b4b775a4 -f45b142ae17f1654a53a938eab4c2b2e71293cdc8e2d18ebb8b502af594de4f5 -00795c3712a58bb65b8287aadf183e508d907290cdb9ad20e578ee485ca6aedd -432f01a550980bf7ffdd0a61834748fa4ddd4d2f561b9aabab279e8c131f4d32 -68d89b5f8f542d881286b3c8913a0a71036058755e2f47994157f645ff086729 -67ae4c8461191607b1cd8c4c83298a4bcb397fa5eeef83c5955b301fa270c293 -88d0fa7d58b00f5f79cdb0326172364a0f4f91e189101a2bbbbd448b576c275e -ae6b320f61d6536649b0b0f9340d25ed5ef2746f385bec9526a2d989271e9a38 -302c84169518891d336882d85871ab751c147d1c8563e2d7bf5c3a660c0b0ae4 -9c0981e96dcd4ec45c166f7a34270018a852d5108219486b706f84ebbe9ede96 -6dabe61fcaa62658db716919af23f384948b4ed54ed369dd3e6e9a4f0422f35c -afac114819e7b1b9a09bfd1b985e18e6dde975e610f48d752eebea00ede16f3a -0b090103100000d0c213c4425a5b0ff3193941e27eeb978c7a42dc6927bf301d -1f0f366a5d0ed75b8a969ba68c8106466db17cdf5b516a0ab63f3772dc7ffcf0 -4ff5a952d0798b68273dcefc30c3324ab824690821875bb8580543ada7b15b50 -aa04cefb22aedd548ca17e0c334493245c2eb4fa7549fbf0833f142967753111 -96dfd986a2536834b4dbee2945c2ed76205a05b9fdef35c9b4e41a808220e6d6 -e0349659c3ac8c3f86462866807ee5179d6994dca75b8d162763e8af6107b272 -bb10c72d297aa93c0055125a426ca0ef9a2c79a4b73060ff6b45719c3dfe2924 -8ee4430acc1c9c28f8b93f554f668cf14f39a728d7b2cf00523248d5877c718d -28aa6d2b25e1b0ef7fbca7bd87a1bba4ea760b7db91c7d8f0811840654860fcb -ef679163d03dab048f05194924b68433b76330a6ac806034e954b80b5a7c8652 -719aa83b70fd434ede624963a0ffe25bb1f72b71f3351164d1124712d58a79f2 -5c60a3fdecccb25a5658ad50961a756880b81698c2f2915d13f02ec6cbd28edf -587457d825544af042a800e4387e004d0701b12b8281bdc76197de64309c5a33 -463bb7d317e7646ea2e7bdf7c0a38e82b0142d51a055bb90689f11bfb8cc5065 -b98cb98bcac7c740d9b1676a103af5a3501e6949ebd9705131b7f30f10323ac8 -0e69159b8da52acc1bbcccb8096d378536ecb498900fcf1d21a92dfcadcca90f -cceeb56d38916c2fb64a9c9df5ceada68553e18d5c5d184c8c23ec78dd5fbc1e -f685737e77767afdf33fc585e5d4e9fa1d85446b1b209ed0f18e529dc1487bef -57c45e10759705297476b4d9b323b45c9d7b364df726b9108f4efdf1c080c151 -5d379adb369724746185abfb9567978b090f9159317be68fefd735a62d686ff5 -0b08e19c87f668aebde88f66fbba5c614415c7ba4085b35b3b086662064ad401 -abe40b7c4d0541d69b745f7e4a9ff3657e74c797ee656e721088409226aeee8a -be944ef94ccc9d0d7f4f059eeba35ad008e961a252119950277e7f1028305b7c -a09a5f4c99a3620001d53d8df889589c9aca04f525a39a67fe2f776fc650b3f2 -ec5a895911171356df2bef1fb6302d4e9ec698af4e2c4320821f37533e1cae94 -a5e14eb18f98a127c498ea7e70b1c8599d4ca425272bca3aad3f499130c386a3 -ec3632c8ce2d714d309b52a90ae662ffd310e335a3690bdd831f52ac88279a31 -c3441d8e0c6a741f615c78ef08502af34d81cb1ebd03af02a3fcc76b6648efa4 -d8e550d995bbfa02d5a1d08d0625432267ed55aa34fecd3078c75e1d8e4185f0 -390abfacbf6dc83e8e6bd75094a54a28ac5c44ba886c3b586759e192beaa88ad -b1f1e7b59703ccc55d0c4383875f8d9fc1e24d7574828f8db01ed10919e3abdf -f062f0350da3414719c765b600a281ac245f4f7a33efdaf6ea3cefcf081158e3 -1451b8bef0e8ac74d0ecd0ea1958e171fe2a1f23b8557556927b4db67a09a077 -fca48bfd110420bd160c931c07799fddc47df1d5a7050bf1221bf3c5335f994e -c002a6621068cf4630fc508cfbb7a89ed86593370fe36d559e4fad3853aa596f -50a4d4fa7c28ddb348986fd5e41c12aa6612e1b8ae69723decfecf062e7108d9 -f0b6f92c3d9251d7d061911fa6d35ed466763f82f669b3ff5dc1cdc5ecd21b23 -6424453dc9fd542578983cecdccd279cd52a2461499ff3709ca9b52e7d8ca177 -b59ebb7aac2e5a65dad9f3d07694e4f161b6c78c37f85cb9d21f2a4908c523e6 -5faf1a391066e68344a9f15467991f809d421af2cbdb9692e4ad9e64d0175f59 -729db92384af1d1c9d058b4c5c9808404e72db14c434929a2ee56772a623811c -4bd21e254fc99e23ed1f8b2997ab725f809b5b4a6a9019d61e82b151a3a03c24 -4189ad819e0c0852ece01cdb4829fdb205a3f704480c57235cef0b9960134ab7 -4b3bdc8ed7376980e75d48829dfa6b1f6b3300e2ed170771b9c450ff104ea759 -666461d62a16674950d54d804ae25dbe2540896e7a9fe57006efa21a6efc9630 -4836db559319fe389cf960f041a4d9a0366121a1ead35032afd4b699db7e6252 -abc9a67d9bbd956f5e99de22a0ca48ae978d2c8e018bff87406a9f0c437eb552 -e19d2455b56d4ef37b47577d009d14b2ce56b87966b8d2de7a7c423f89a22ca2 -60c837d76b2ba0d5c4817e9f67ea9348d65975fa356851a9e56c19bce0ef8aaf -3905b73c16eae90cbcd8c1eb4c8e9d840cb7158f145120e3dd6398e3a2034fd9 -95f34006745ccac381cf8c36a13bad6cc4a5420ebe75ee9aa608437fa831d5d3 -3113083cad048dc0730667388bdbed24b33d2c39f67f501f948fd810b8111903 -63e2fe20f823845f9a876e679120f93ba686cf408bd7d69237538e3751c20e84 -4b48e15f86188b8b1002be79cbbc75f226bdf458193c024629aa680f650cc8c8 -71f4a6983ae5a1598821f3f4d8a53aeca3fb8b3bb4266c4aca496110962a8de4 -bf4d133bef58ce2dda36222249d0532cb935804e1ab3fa15066bd90ce643ef8f -4446bf23d64a9212f5386f4cec60ac632c0e9d7404eb70303f35c50b3ec8dd5a -99d309b6b7364cdf5fbc1ef653b661442b260764c902e8f4cf6f2ff2252472b7 -53fdea2300d5d6e1f77e46494d6dc0533a77fc007e723591769fea95906c9a0a -c65f04a8fab8fae134b1227406bb3e44fa20a8379c91318d21315f730b208763 -654d279af7d123b98f2ae67bd5b2f7920187ca936b45b7e3d1da116953f1416c -46a41d922df8d5941e1a860879c052020ee0ebb78eab5e0936b1c8d02eb4061c -11c2cd1098e566a180e63cbc8ccf70a0298f45adbfd0db942abb2470bc1b9c3c -98f61b3ca787d0f823c90231439ac4c5f8ffc7057469b2955b9bea13dcd9835d -8d020f593e21b87cc8becab62522a1b1dcde669760e830be5c3bb7b12decca2d -785e1eafc5d6bb3ddb447c2e69215f7647d4e725a2c647746b7bc7f5df9d3189 -d6239ee2a2bfded2745418befb8def463433405f4b4c278295c8c2ad9ee43917 -11353ecb9ae9685f17550f208bb3eb7179a1fa69882ee2691d280ead58e93f37 -70ca26ac429ee5b8e0dbbb7dc1876f11ebe6f1a0dc330cdbb24b9cd1439b3044 -8cb62e50b33ff18099602c620af45674a3ec0c93fde12ebde8b1543c1f9c5d0e -0a12916ed048ea3244f07060235145cd2a366581ea658b85272d59cd429fc509 -8f62c9937dfa11d29ef22c74e5115f6383d5aea6b2de0ca4c5366800a2bd802f -162c3e3774b12b016914e4c4e008d81b0278c336d764dad0cbbda4652abd4a8c -213c7da9c9fd6ff7270575c6c15bf622b6f6f4802ff6f7991d371a7f06755ff3 -cc7b344749f239036a68803d367d121a24241a559e8d64b6658a8363371cd9e9 -b79231afa2f6284a1ba5b99f18bded77db058469932ebe7d405cc7fad3224536 -fa5fa3f7c643637960e88b0e50014a391c65f22424f7edada3a7dd72a3bbe5cf -47a7dbc05a7955d77fd115db666f4858df46260425575b8ad8ad44912540ff7d -1cc336c3f9056df50f5a0a2c34f12830f81a332b982db204d218593b804661df -5adf14c6ff71504cf9a6faf948601e3e1319c806301ba2915fcb59208ca378e7 -afb5adee01e4167cac25e8a1da13034162c5b1d648bf608174a38205ef838067 -c4943118642ac1d5723eccb0d5e365226ff4c34ab97cec6c9ccb7b73c01ca8c5 -85ec906334753fe353bdee090a79bd56905deeb8e4314620e509a83867ea1c19 -a16599dcf0f2d2f3eae58d8bcd8da926a1af99b4057ce29d6ffdec24a7db1a14 -4ed9feaedaa325b6eb583ed87901c43f9f31bb97563afe8630df00acced9d95d -4b8c1d0f47e02a76730b960e95fb78a4a11284923e9c91a2a5804c14ffb3e352 -943cefbcb1dc6ac888c3a332528a89ffe36fd2824c48eaca69919838665a3367 -7d528ce020fbf68a32d10f0e0708e16611e734a0b20d18aa6dcbf8c450e2b5b5 -f09d32c94c115e9ea5e1a634a163cec01c3a2f3c7826ef7e9d5e8d19d4c4866c -84666db73ec62d9c5b2508b05145522c3da50a31871ef2b6ea0f48187c191e06 -e0d8160390c05376f0eb931bc07007fb313af86bc0934bcab824073d6b30aed6 -5bcb843f80cfd4c3ca11926c604512bb9c14ddc64bed2eeb5522a4ff3120fa47 -d454352891efe9fac5fa88660011a8c0ec0570e0430b19b698160d4ddebf7051 -079809d76d8aecd01ead398d4e2fb15423fb38a6dbec48fbad2098a9ed738f81 -f6330165622f646fdb5b148ae89168c3a1fbadedd5d316246ae37e45bc896d9b -aee9dff0f5de45b6121e9a092ac8b4c69eb61138505ec66b367f59b0c6f18fec -c0010864ccc7a0dfb650115242f1664ec78b1861b93a82a793ad55f1d27d646e -90cb1534ffc6b9f5e982db9070fc65c9559b67285696acb8c7d680e7f109890f -4df338c15cc2359fdc3d52bf64c5f1f04d2507e80b4f3c51e68c2fc099e56fcb -89d0d3bc15657fce79a2633352e4b6ef022f23f17c9b99006de8f42b6c09f5c2 -c82d88b0bf013d7500e10a838d34098b657ce411d22916acfa09121a3a84fce2 -a6ebf229b12763e2f5777c99234ec8a966a7858330ef3330a3e3d0fed0c8969c -1d5099164cc9f1dc0e398cd9d30bcaf6a4b02b148705de166306633ae538f9cc -e791641864e73441382828e68f406a673cae2853224428921ffec808630e495c -64ab4c0754cd85327bfd7fc9ef957642a6d30258b4b9d29bc059392b7e3fd339 -5a6e5a0eb060f9dbd09d110fadbd8a061b1ee8880c61e01fce52c661e1d1b5f7 -cc45b9efab2880a9bea2bd64e8ec183632b1a7a996baa7eff23b18ccaac6c88b -1835eb751974d2930c1f354f5173c9266918872eb7c70d90f64113f12b86e6f2 -eca0e29c4d4c20fa26df487b9be3323ef6de8dfad3f81c7a23a4930fd3a1c6ff -ae0a952f8e074f0f034d4dc16e0f3c11463a57ce0c14fba845733568ae0e8f46 -1a00d55508e00a80be53d818d38acc4f7212c628cb2047f18bcaef075e7fb3d9 -6d090ea9a95a21ca3e7f797aa2934653176bd7ae0e72c52dc19196142e571338 -572a939790b6fab6592f56f8a876c99bc0f9d04afb37da897e2dd8a3818f9134 -ff6dfc66c7142738167ac5688b4da11dbbf343aeab2fddc82631fc7f5e3e5bae -c857ff3757de3c01f097db34436e6d9ce0736734acc91c447277baf1df07c5ab -ae7bed411bb203043f0c16155e38f62da67dff78f94bff4e8ee86e0261628487 -0290e8b302f9941c60a04973aaebd7ff2c4fd0c5fad6e85625921e641b73bd91 -8ab85ecc505552442e1d1802460024a9d3f523fde2d1139733fe54e74dc1322c -0d67261490354ed262e2601098689d583f0feabd9b90fe030812442be5645817 -5fcb9cc603f45146004f4f06d3b6325adb329b6c0686403678ee2901165cd44a -f85d7977c6e3c84a0c5f5d7ac40be097e91259eb0928f84166b2bea549d82ffb -e2187555d160a406a8f273d18778b42f37ec7045734e579b9a7141f48559d8a1 -2a491e774eb885449bf57ed3737c42ebfeff262bff74eed2d0a2a8915006950d -24b1f2ed4bccaaa7a37f126759e52034dc7264eedad951a69dfaa509af59549a -f2de1eb4a74f18abd83d7e8bf00ebc4755ca342836ecfdd0c11221aa26c187ea -95700568592036fa3a03b7378633984b7340e8080f82355c2a572579c06d2c86 -b3602943102236aa99d971cd3fab42db95dcedf44d04c8f05a2a1381c6e9c58a -a526db2ab99b4033ba0d339ab2e1d93b57e691e66efbb79e627f2d0eba005080 -7ed4a60011be87ceae68fade61f969daec01accbaa640cca88a550c7de3b13c0 -ee86bcc1b3d11cb069bb2c205c205b35da97c554e0eac66dd8585bbfcb18c8a0 -cb3941d9eef3a493a2f7dc187a480d21a7b4e5285de82b81e04d6e239f7807a6 -6a334b6c7bf6fafe27c1a81c3957ac1590de2f5d74a0c9b8a990e2dfbde91298 -30c494a28e29557f3cb2ae8a6637fa3d83eb11331f8a3554a1419d8c5e84c1e3 -35f4325506a08bc8ae49a113a5c3a10f6d4b5446fca9a287d02d8db0bd53d706 -00137e83ed703f3e72e6f5f3f2fb14b6dc3e61c1bf7d910f03610666f5579a81 -644c5eca8ba56df6790561ecc91db4fbb7872fa49d2b7f10ba2aa28fb9ac85a3 -4d571ad54e98993f94b7c551e237b314536681cf8e42a26144ea39d9f9a9b295 -9aff80e5b965d2b3127d89e27ab1c8804c68ff4a1ab678ad2f1bfd5b2df38985 -bce719099c9c7a128e29ca4ba9187ef9462d4059034d7379a04aba778756f48a -2373c32c4b29b769c6e9fb458bacc4bf10bf25320d757b76bacf1745c0593e2c -fd20432e32bade5a213d53c77d56d34d67f436c1566395e6143c36c16796cb27 -bdbdad5cfe3dd3eae67b9474edd492c85879169324cd9fdef636d5b9c3abaf36 -edbb4ac14a98893e36dfbe7316c3b9dd3c072327b0bee8bf09fed0a0262f0e5c -08bb6dc0474ac2b428a4c1ee5b624bb1833be8b2f4b14c254d7129a2162308e6 -48035a579d1a7c236ec5bf6255630be94bf6129b96989b933f9ce2745f69140a -515da1fdf975588afbd4c39201ab3ae8b016635c2bbbe6aa27bdca6215617e2e -b9d4c0e1fdcffa313d847929c37ac7b07f96b0180fbbb67f46e9b6cfcae1a66d -4be0afa99fa7787e7f8be5a04e723d4f30abd5a25f080f51de36130b7862b025 -eb56872f2744686fe5959fd51b40e6d11876f61bd9e3eaecd57b40441b5bf86b -378c83c4deaddddb6ea17f6997549eccdcee9a7a48a24466d9c55ed17d7733fb -f323871fd7bcb8414609729c27575ba9fd429553e3d63ecdf78851b72dabe4eb -9ac67e961a4dc4cabf70946cfecc144a87dbd9c73259455199412faeeaa3644c -2022489a3136253e1497bb3458be497afd4c9049c4a615a102829c85e9a4576e -350e14d837372b4b1663d415cbae6a3a954880114b13a1c214b61ea6594127e5 -742b98849778893631b67469aef59b15919872a7cfd255910f17c53576f03571 -0819d59e2c1a46d0dea64fa7e03a63256a8e65047a1ffe4fe36497d2281b6aa8 -9ce1ec831cce61de63c1da6c8a5672c25e5a5a7bf20a7f933bfdc45cf7bbe921 -42d8625b3aac773bafdcc614425fadc62699de088714b72691a1447506e9a37a -093a960287e418f2e530c537c08a3e19ec7becfa4ca9320b05f27974d4c22ddf -61a0ccb6b866d8961f04f9f9b85809bc57d358cd918dfdc9603b32fcbea81d3b -e193034bc458941b7a413947a1594e46b4ac9bdfe9416c275807a4302694f7b9 -2a226b8c96361a389a9bf92a47b28e501a06d91d6cd54fd2d2707ce52af2c279 -24c6e95948a936b4e0cea35c6bc62edb1f545a28ab762ebc3c2ab4c4c3a670fd -14cd631fb5fbc26cb51ded32461d69a2b82c586c40cd1841fa3ba780dbad789a -cca61d286389dae51295141ed27217db047eea3247388390c153c22f949642b8 -5f87f9193421abdcb6d4d3882578f9e70b28ad6238d1fc25877f42e3899ed0eb -4cd9f13eb898e67a053d41ec485931655c9575370aa8f4ff30e8d3e7a26bf27e -f32f2ad0bd244272f84af019bcb2bc6332142b4d0bb50fcfe13b9c4e9883f0cd -c4773686b3ebc08b1dbd2ee12fc3f18a28be0610c4bea2df1543ae37dabd861e -2c1a65515d8bddd314f8949b5941aca77220073b541c9ee457e24c862781f8b7 -56fa69719cfcea364a0d983989ced39ba2c910fcc25a00601b0340d8d6083f54 -73d54c577012ff8895d006922198cbd4718e32d5fdfc56143818901a670d67e1 -0971b6754390848db25f059764a99801ecb89fd0f38d46c8da9e01011bcd32ef -c3c445769122d22409c8492bd716782f411aef4b4e0f1234a936e71b9e8a6237 -9b18088464e5e2934c748c64d69b3f2a92d81a1e0ff81a3150013c3764ca0194 -110f7691c3a2b8809900ab262825cef744812fd2f5566894ba1f8d2250d98b89 -a8683f736d4b5a59f51f2e332c8ed0751089e9c51b91b1c54d9b260e312959f0 -c692d4a760932264214ed92c3ded8f45ed1f40dbde9f20fa7a658b6a36e121dd -cd1bde6e0b8942715b5080fc04a7e6db224faedd8c5778219966177e476de4a5 -a22be484107a0c11d6eaded4ebb020651777add24537d83b6d61b407df0f60cd -34ee532a9343f5b4231937839a5b330df795293ffb2b27521d142065edeeefc4 -8fc9f90558cae326dc18fa6b759e4d0db1decbe33bf3c1fae3e3ab33c9392d62 -429506196d1050a0e2da447161f2e323103da806d05c40618288fbeff828d053 -d3c6e0b0718f5c9afd1581f0098eb9b97c35aad2cd590e97f4a139733cfcc7dc -acaa5814d3b63efee7c764c0d0a8ef392e3dc3f02c8e89f64fae8ee4ca05f115 -4314eb98e6a0e032886fdf29692dfed62802e84b48e4705cc0c158eaccf4d7db -dc47b91aa3c5a49ab600679c13a2177c145759d8bdd337e35c77717a15c55caa -45339aadbda46e71a8a018d7782b9299a2681c927888408328699da5b8cbc45a -b2705038b818fc0bdca4d52896057e105c8b859a52676735022208a76abe3f53 -3b012a22daadacfdf29aefd86f67ca840a1473dcd650f03c315f23bc6ed8285a -9d1796862a88051a4ec70fab8697b54c53260eb12edcb9e533eba6f9c1668f5c -9709dc308f35b927c974fb1d0c58757086770e1774485e757f1b777db15a6857 -1c084f48b3da6102cc7b38dc89f7a8e33411d7e35434750ebc98dab8439fce99 -37f7b35ebdef734e2b44faf3dc68fd5d36e8fa82face91146ca6bfe1b1710cfa -60a6178c88ef1137074956c67cf81e0052d7109debf10409d752e3f770933111 -a069a639005c0e043d42f622e96fab8a4a203857a788b32d3b2b5867c7fcc075 -9236e5dea77a574f4cf964d0cc2cc786c6f0068049f20015dda844a3f409b4dd -bc95f22266529f58e88eb9568ba44cc414535075b383937d1b33135f77c87a92 -9e77f95cdb0d71a1807f1193ef20ecc1c497df8e08732505288fd2ccc73b77dc -cd88fa4db43b9410af1524b03864642f44ded44466b5caf39429e2c18e634834 -11bda54bfb6787cdf3810a3f2e15141d7dbf09aec5b80675d65aec2c66e80177 -4bd3e428b6d111e50d6f2e6b5d4d9140689598d147473b57a71ab08080d37d2a -7f2b89ae2f5948eb11f3808542b8af7ca2173bd33eb513c67f28bbeb87627ad0 -09fff3b7ab0c2deb1668fb922649bec4bde78448bf7070e07b101055584d002e -93826a781916f1e2ac7d272f1a31611835737d54671d9fe6e5b9460b15e39fa9 -af198819f2073d6dae3b3763abc240732d719b0b1c8a37e5f9f76103e770c0fc -9343289d8cf3cb969bb4053cd377413a610084e68c255a6faed405bed1e4437f -f93b34eae37559b78cac42761c985e280b92c57c0641c244f3c480bf57fdbf6f -8749fa7a45d44a40f690d7cbf8b6d9d014a533b8fc62717eac7e069cbe6e3a2d -62e0472bdd23f0edf4202a643c8fe7dcf37f4401d94abf44c749ccd26c2d8fd7 -1ebf9ecfcf534280e759959c243f3592622d799747efa7d5b75964090e0a3dbe -dd08b6106631bdfcc890bd5eac60e6fe316e1780b0073eb4a25dd38ea62793c2 -e3e73f9c4ec3d85693dfe038e322c2c383193b789d13c4be802852b7c877cf29 -4b58bf6ab55f9d6669bae41771d926ca28aa6a58c2601f13fd1aa9b0d7b481f6 -2be12d72c3ee24851851bbaca53045b24823e02581988e4432a8ec843866efbe -5f4511418efec41146309c7a57d665d8ff4d97dd85578dece104a6589ab5de28 -c7d3e653f01ca8492ae98a2dc7381be07abdbb5ca3ef9241ad0e74561f9f5a15 -2ae8cd680fe804aeb1f73eba506da5aab780d3fb24f617957f7835c406c2f017 -1bcedf43715e7f01450f3bdd30c91d91c64e55ea52a8fe5423d54965aebf4574 -b1e9c8e46c78b76fb87df3491440a7bedc74af6a963a2d34486b81daabdf4ff0 -37529951e2bac3dc85ae2aa8a2a0543a0093d2ad7a872369458db38188a346bf -43d572f9e2bc2f780ec70a5b65d94aad411f888b5592894da1e4486a0d800895 -c08accb0c9b8e0f18c0ded81be332ce12989c95f451c661496fae73ed7f0eced -8a9a8754bf7778ff0b4cb4ba16c67c9a905e781ddbe16bfa57462ccb6044d891 -83d761ce58941024a403ab718764a1855d0673d39975a286ac8b32f043176f85 -f2efab1f0a0fa4e32ff159be4f53292d5e393262e9f6404b6ed6349ee4ebb62a -53dfe5dbd2f6b63960cb2bbbfa89d7c66a44b2cf5969ee98854cea3e04b27c19 -f4c79157311318bc975bdcac70548ace6dcce4d71e506e4fcf2eb115309a4444 -f76b6c271017a02953d0ea0a2448aa832e89ab0895bcccc314fb02968cf754ed -3307f1c59306eb773d7f63f7b853f0ae71093da716b6c0b8ab469c2371c26c85 -193ef171b6c1f48c559146d1989af1700d9d08e3d60ffdf548d5cf7a8712c75d -24ad4dc445f310b625c4a00e0879b95a2699189cbf88fa7d2c3fd191c963164b -d363998c215e8121fc3c44a6fd4e428b244a8f2c08b3b058220bd3a83ecc4b12 -24b192d8972430693d9692a045df6f8cc8e04829a1ad2a690cb876c8c72ef8b7 -d04a119430d9882aa7b4994581ea9d846970e80f29c4e4386e95cc74e60d1aa0 -e0eb8d5a9b018dcb3bdb9fca1605efebb39bab3abdeed7585fb989f8149db2b1 -22bff8090404c44bf2da1492a697454804b85f7f282f78ed0df62d59d911107d -524f6db56e00f897c58015f399bc82d4340a62025c7867c38f7063dc4012a795 -016ee4d90f14c9568d5e324e73f6b7c57ee5f5375907bc403584eb44a4e33c4a -88435a399d72307c46d232ae24b3ffd31514ad891b7af711263d5778f1412db7 -4b8302b179fa8810340f07fc9b0acc27c06c915f1b45dd1d4d238e00796d937b -4539a8386a42d6d73f66bea6d8719d057d54cfcaa282c4f06336c05285f53667 -8feeae08253eb094aa8290c40ad00bcb7e1ec20cc99a0ceb80f08f8f356657da -ba56829d869fde7c4645559f9349d3371efa44f58bc36aa493d9a0624b5ed4fa -935703ee695de66e687f27e1f88228261eb8c5a42a6c9b30eb45227874f42fa6 -aeb66ec01d1b140af535b1e28d625b1849d2914cba6545727125f739bcd1da1b -7d1fa4b2b0e6db67c549e0e2e52953cd3a240d3eacbf623043d28b119193923c -94a15f4773e0c3c974325f608d0ac0015cd450c02118fef94cd39341b8b1144d -9ed9f3764f3c7796bae60881f6d9d84e76fc18ed060cc82a1beba6123f05ea92 -9a3f3eb82e2ac1eb99e5c6ec65a9cf2a4e0b3c9d55816779edf45c429b49f553 -f0ef1f1c49966a822920230d1a4dd6c05e2c676780ad7a6cd325422d3fb97cfb -1594f9a31f0730c1c811cd0533671940b3dca7a70fe1c1a79cb4d22194a7eb83 -20323cea558fa1ab48573b4d56fadc9ffc911c8e94680985b0f527be4d218233 -890a06787f21b60b459b8a712eda9797f9dfefea8bdadd077e56ae6035fd5ce1 -a405b543538c790b0bac9c7586d9677feb4518aa590e4b4499902f8afba48386 -908d301b8ed6b87ee1f1ddfe80c37eb0affdc1406617d37613b9a3e82694f7b1 -60b2d43483a09811ea5f50cb559022034d9726c0f9f80b5efbbae8d1dff34e34 -ad6a03f4fe2396b50560fb8a9e9edb2c33f359728f2ff393da760f9a50a04320 -916a583228be053cf17a11246d97e2adf68891b73cf607a1c2705f9066408137 -39c09fe101bbf9d6f0be4fea0b469c47ce6bc2ab1df3c5123f3693ecd1e29ce4 -20f76b77f99d428254f8bc54f0cb95ec02872f83677bdb3aa42e6ac247df1a65 -9c53f63c779b4a2d8a720818033395d47798594ae67a5d84c4505697991830a1 -b244d86dbdcb1b57499332ce0c7c2b69275d043e5be094d835ed3058fef037d1 -2771c26dcbb2da45f3cbf68f219f102b5926200726ae55a214c5267b0ea374de -41c46376cfb6bc7c005fc5cc803822982133c604261f3a53c7f100fb43638195 -5f4d544d99e3296fec2d65b9f3c40636cbf6f6225e62498320a0148dea171546 -6ec4a4a6626c2d69ade49abc9856a5df5d5854aeec16070750dd7de29b8b6a30 -63aeb9bd772f232e80080f9eec514e8578ff7a51f2d7c083695c50c679130a83 -9708e9e7111c6d8abeb055502ab14e0e4310676140a79bc88a0cd652eaf497df -e92d43ac0bc724892d7b44926852030ba229527177d42f648f829a77942f1181 -2aa4688d4953c18b231b0e016441022450b6a4efa08a10b550734c2e7794bf06 -567fec60c62d0c159025dec3805ee2ff0e85280442f9cb14b5e6d2cbf2035153 -b49ba7836a372a2c4a4173e2b63fa839a368ac7896cfe0e3c8b131cc4385377c -b4ce47bb4fc50e84a24af35342cd3356b1299d421ef7d172679816d7bc8ec23e -e778c76e59cff801a01bacea63f46568ce5fdb81e5fd21f9f43661a9f8815df2 -58e2e9de4b22fb8b2588cdb3037b5725ebdd76a50ebf6afe36eaaa072aabbebd -0c6adb74468395b34b84567cfa423b19deb4bc67dcfc86345cda9a9f511ee834 -a17ea4349584ece87b4fb9ea12718c600a1122c1096326e06e193da1b32f9945 -3a40f5f8b37245c99e5225c6b75e1bf9af0fb5d0b522fad58eeb2d6dd9d63ec3 -d9dc272a5a80ee7626651f9181ce39fd8717c870dd9e84ce9e942e1713c11c6c -87acd1b3415c15ac0b34c24dcdfc59acdfa56d5980efbeba111a4e5693c341f8 -613d83b3a0828d48ea00487e55a27ee4be7b93c30bee530ebd2bd0c41e280f60 -eaf6ea444894e24af55e04c7892dc8860d19dbd60f157537e2808d2f561bf869 -143efcd8a7e3e52911c58f2148fc2485e3b37ddb23e933b074638c6459c09e2c -29244a49f8e7fc86546210e7bd68b966e67333b2b527ae20180f8af858a1e2d9 -8f21bda6e98e02f310ad7960411eb89bdd97e79751ce5cad665ecd7e7995cc6b -18969d13e902252b163eb346857d6b091c1f8e5f7ac76284be6eec4748e92c68 -4e31a333726ff7d5c1fe6d9867814781ccbdcbd1d270cc2bf014d8d1cce6a8dc -b184f18651a2cc94975385906e22128aadf419672cc862aafe5110fd9cb4a028 -4f7413e4e244638660a20968a81ad923eaf27bcbb2aae3106ebc5050a69a92d3 -483e3ce8e5ce69f06edfe2c6a1ead8522184f4beff28313a8109731fda4228ff -e3ca429f4cfd68035d2f73667bf0510135d968fff85cf8c516a09cf60bddecea -8f889b3e63bbb6ebd2ef7ccb0db00ef5a92794b162c82846f7fcf3e69bc6956c -5e63776482c6043bf73c986f1f18c6abe32c71f1a4a74f29e9fddada315f5ec7 -e4b38e1225ae92ba3dfd4746ce74c1004a7c2007bc3a95d0bca6eedaacc05078 -ec3a6e32fe37b6b3edc1ba46da5eb8bb981867b64404805dcc91b4b5e0b527b0 -be53e79596a7db573edd7f8f913082e0ba15e74d44ba59f89b0c9d46fb34c2f1 -25ce2d967c903debbdf67040af8bdae68ee0b1e0e89d79e9bec185394ce531ec -8ff639e1ad00caefc9fab3880fccf55dce1e3937860b25a47aab8fbe4376f854 -f0c983ae950bfa5b53ac225557d28dbef67a89ea7571ddc8a710756833bdb5c4 -30ce1ddcb86623a82cb4e1be4ffe6b777a0a8409813580b75a89f6a8c65e81c0 -168dc486916be4f40cafa4cc6b1e22d553963b2449e00796e459c57b94e34ed9 -5bd4f1eb9798dac04521d031bb8eef565c6b0740dbe50f0b23fb1d799fdc2f61 -3f46ccdd6ff1ae778909d8998598fb796e9921069e4766ed35a4422782f62338 -a03acbc0a8f42c0dbba5917d7fd0bd2481e1835c660ceb5f2334acd57d4427d1 -97a82e44b0b172ee769b69666776597e018d05db7161e3662e42e0a1d5906c96 -607ae2ed6447cf857ce0e58984d8c363a3a6516bf4713c3b23246232b5e512d3 -9d2c3e32c33408c03262cbf5c517772ace92982b59db582ff69a3ff6c0497405 -8dac147089c03c44bff3ac70e685939ed4c1097a0cb6bb9fb399c5c0950f6689 -5dd9f05c7d262061813eca80e87e2c15a266f5be420796d1493ff3547db70f66 -26543b1ae2d6fa431c5623191327118c5eb8b331ccaa0f198f062c51cfbb981a -dbc442937f63c8a0c179c2c42d572564bb872a2e6dde8e7d680372b157e840f6 -6fef984b009c671bbec94d3446e85579806b11586cdfefd7e2bffce117f15e11 -f9f47bcc9e390595b06f7207f6457cf1f775f781af79b5b825dbbc98e3858056 -aec61f1d9210769e2761f216f01038b24422e67b5c2386182a4e9382d1f345c2 -c6ee6299e4e3a784a4166183be9c2628afcc27c45ca0391975591961cdd718a4 -3c3d1b85b793b5f3a8b6d7590daa27eb6e73ed7726d9719b43aa13e05ea7ade5 -ccef5bf1333eb7880311869e055391412a9f09b676ec67c994783d0be74cca70 -76424bad7f2c80f031c2dcfefb6f2c8e352d2f41e010dff7d37dd6b03cfd207c -6308d43432d33a1ffc94b74248b5db43f044764a865cf2a6671bb1f99a7e0df9 -5ac614da6c4a8d2f8fafef2fb5358abeb8cf307e0a710a4d3670de75e0f19410 -3062037291a143c03375e6c1fcca2711de12aafacdd5c071adf22c86dc240ce2 -d5182701ade04a8a1c73144012e2b88d4d5621e76a26dd5418f171f8edcd1dee -3bbe3d6a357b75a217a40e79545113fa2ee15ac0ea2a94b8abdc82e7645596b0 -d8de0966693b23183fc34324b6b7c3d58dcd3b9a6fee2df7b599ec03fddc0aac -632305776c092c7d45c8e64d9f4c4d9342fa55f9777ebe941ac71abcbaa94a0f -91ecd9ba159dbaa6ab418c1bdc3580728705e782b6259478a036df71d56cd481 -1e5679ec3fe59432d6491749a9653ea2f22a16cb93a0762e7f2aae8fcfdfb43c -fee053fd488746b2af285ac480e7830a0707adc87161595a5cc5a81feeaae5e7 -64a73af7c1d7e8c1dcca93374c6dcd57d0d31c479b3e89ff4135e66352290dac -86d663c53d9b2f4479662c8a335b00ff194e0a29931552a641510bb9b08dc991 -78a63331f41b7a813ac7640ba77d7a82d9f9823f75c01175d49d2d357b2be420 -b8137c3821f260f3dac79818a7d0b4d86d257af7bec5fed35f157024f89795fb -6723d13bdc0f41a1d16cb2a232d457376acc0e332fbe5b36344fbdb22ca8d7e5 -660a86f3902f04ad8e1685998888baa9b4e0a2c064d2b63cbbde79914f3d8f52 -059ba32a5f541fed91ab69b69ad53d045755270345d3ce9916488f75bc83e7ce -041b96eded251aaf6abc9b68b16da135f86c74556394cf9042b54cb38784c548 -6491c83043598564ca6c64ac7e11fa09a3c3887fe20d9314c21ad36136e6bc05 -561c0c1e9be70079846939b84eafbb0030f4a9b0cb303cbcfcf16ddbf44cf977 -7f8cfd027bad28fb461b29ec10abf2655341f0dd3950a508026ad4031f3b139c -1e16220521c36ed2f7a0e11780dd8982747af44a62bf13bba9eec406077238b6 -a03acfc88709d33589cbf6341eb2d1f3b096e515efbca9b6c1328d97cd840dec -e341741bac9d0ac07f5608652af7caec833adff0e09eb728588a6da3e3fa8038 -b8c1f4105a5fd50dabc7609007ed1ae39a0b75f11772a452ca7d0bf856e0c9f4 -fa0e98d21df2f47924528b6edaf372b937d3fc9e418b6e5c18058f93d5bb0e28 -a2b59dfb5b5924cb20ba6aa4a5e5a1239e864c9de629aa43543ac2eacf89f6fc -cac316215a3295ff05f42bc41cd8504f33326a3f1596c63f15272c2484386544 -9ce9e479d5df3214c91b9ee0fa94da29036912a6b1f2b8e240a9123a6854d84a -08f647bad14829aeb65a3a6fc8b7cc53723b992db9a94d8057c33c369b401ad7 -1ddbf2078bd8ab303b399002600d5eea4dc469535562e1e6e50366728441fd2d -35cd771495ffa169ed4cdac01f988e7ce5c7d28f9dd0093bb95aa97ffb30bc6e -dbe2f71fd3e70aa1e2de7cdbe96181e92326d26a7558b1c1fd0edb58c63c51f8 -b1d741513d98e06d3769d64e1a11fae44088583ee7584e867b9492e66e9c7114 -3e165b672204d444aad59893d4212860f074d1c6079a261f6b3e7383c57ef17a -bb600552eb518698dff54a48ef83ac82ad43534c07dce6e9e32078b5d60240f8 -b10d07d496f7b7de76fda6a20db434f88428dda2c5320a38836ab84de94645f1 -c511080a50d8254c0cfb67bc3ac2101c401541a34959107898bfacc611bb2962 -f4b3d1ba8006c28103c2a55286bcdba75a3537f81e7cd0d02a9a3f574cb6389f -332983f4cce98c6d53089588532402a4b8a1d1427d550c7015e5ef584272160f -a044a92664299ddfc990ab0c885666c09b6f2d6240db9f7dd3f1a53a6e312a80 -963080a78e62169cfc1a1a7a329ea2998568d9be427b7c69a504e56a7920246b -1d12fc87e7f797798b01aa76fb34594749fca31041373c2a3e1bdf066c839925 -fd89b479bc991372dedcd1c4588f1edc25ba46b7f48c93d13ee470727c9f9f27 -dc942e55051d4f73af8ff183bcd232980fa907def8f9192c3397552070d0792a -0e13f3dce6f14c904992940dc66abcf4de5d31be037a8d913fbf6f0a71c8a9b3 -ae5962d0e70397aef6d42d2959bf2f4058f4aa2226afdaf9a24f326e37d3757c -56d590dfc41a5a2313ef3a460932e71c16229a152a36bfda828d9d68a411d64b -24e4854cf677d412d22db866c7f70ce1514684a9a09203572a0b5088ce3d2652 -b014a181389279bc373f982b2db5d6cd9e6f17af6dc1ffa3b05787c50ff2b9c5 -21509b9ff68384217c6c8027b93478e31083e71b91ac4e8de22352ac08aff22f -e7821600af0d1a269bc56a658bf7650187545a1ff2b85d73c969199277a76dbc -5f1246a6a7066720b62310321411be865fabd80cba515d52a7767fd70d3bd0c3 -7512150200b4d5e8d92548bd3f392c1f16a55ae1a110fa2bc6ebacc5276e6983 -7dedca629ff9d85218522e59566991ac22a584af50b6155873012e623e64c0dd -9b029546c73368bd1a91a1365a3082b715738d2d470b4c9cc0798a9d09756157 -74b8b5fe0fd88864260e3af1b2cb01f3cb6123834a468fcf1de1f1ecf945b6fb -6e2eac258b0e67cbae19250eb2ec927bacde291d4424d8a5537bafdc2bea300e -3fb2eb614a952717fa35749dc90a683359dc426d901b4f407710ca529f6d100a -143cc3264586dcf7aeb6ae1e0a38ce7efa0bcc2eaba937bc1d924c61fc4e1214 -f421cab4a51d223cb75fb13258fe0cf3001760df8081e5d8796e329b2219c773 -4ba75cd625e873f19d07dca484886174c089c1a50482edce0b33e297980eca19 -7e80f95612562f655958510bee41fc43eb6f3a6dcfac20af5492449994016664 -9f17f649844b0061a2c7bdfdc3d2d8bbc0decf248382e29b34ec934c3be95aa4 -4d7ad210d2f47c986bb74b162a8b646246e7399dbf42e744dda2aa4814f184be -9e5b40762dc25102e036833f22f02ac701bcd27adfd7233ecf8178c4406372a9 -44b2afe64739bec4f3fb782643245a7c76a541997da6ab9273d73b506775db1c -d1009aab2289e1bec86bbb3079e20b0814a0dc046c557d8d5d9a04fcd8deb4ac -76bc3daaeaa95012770da4d96120e153595c2cfde91499ec1d3371e4f662cd2b -4b3becdaf3d3cef3c93e786bead46fc8b7dcafddf067e43571cfac08e2c2a94b -33c824176159bd0612cbad0ab9c87e86ecc7e6fce0e09ac6b42aa81cf1d216ca -5fa78b5e5df6ea279a8466822c15e9c570c782dbedfd2a2b472dd555551d7e06 -6c582844169e4ff992f0632f3a5d84d0ad97e5e0c87471714f87fd02f7470af0 -f64820292af14a29e600293cd53e9a0d3c2e4a10386913a08d3aeb81830745be -be651d33c4dc3f9a362b295a9feeaed0a2691659f86846dbf96fa73d14c69fb6 -2934e3e881ed6ac09db98bc4d485ce9b190d1aab30e1bb2c6fac242505c68e89 -d796cafde8195ca0922fe315295e9644d4aed6b4f2a0219784b3933b7814ef25 -5e37a309edb100a6a9484778f195f1b89620e7a46a719953fbf11ea504575842 -9deed1c4d9d9eeffc4988e1db72107ae09873586256168e00f74efc803245f90 -7191058b70b823f06a5728d4bb2cc329b16b1622efe45898da9c3eeb82a0faaa -ceb67820fc60ed2f8673e089ede97024fd7e7a4c34fe53882f09aaa8fa14d5a8 -ae172b4a20774dba7e98bcd626b6f45ff15742fbb2586c581a44ec7197019e2a -2a53038e15af2acd5e33fea4f76617d0bdfa83fb7a8ce070abbf357a394c166b -7991ccfb463e4178d4d4e92629e993639b9f2e80d90d0e040e12c60b563426cf -0c5444224aee42c44f7dedc06aa93cee86fe7407f2f8cb11d1ecd71852eabc6c -bf25ce66d4776da60f4daeebfcafa240620e9b261b922ffb670d53007ad659ad -f25e33c2635201b15afa6ccd81b225d9d59ef78e6f809d03f39b6b968deaf8e3 -b52bcc1c9dc6ff4de50d039d98d0b36773cc230153fa438f8fb4de8fe1f0a3d9 -548ef3078abac9aa74bb499fb06fecc78db02bfe48dc441510a393f6805613f5 -a762368142cc9b1de1163bee652ff1427f0b81836d42bc0d50e70d29846115f7 -3299bec648eaa5afa960b13740716767c92e4217eeabf4f42f7773cf08eede70 -c092e17c4be3e18a0a18bed80c2538f53dbc7410e9cb346df72070dceea70d68 -fcf91f821da4fac781a50ace3f2fa9a4d1f843e07d24b906ac9eee025ba98f5c -29de05050c88a0c5e645bb6abb68ac9b6e1b376e32d0e6e312bf8115479bdc62 -c34a9d7dbd3b7232e96e326352c6957e316c4b68befaaec0d8c72835a4833ee4 -e745985eacb33c712ac6639f86959c11d6d22c562de124dc83613e86e9359c07 -a1517830eadd1286aa48f699258e9d85678cfeb425680f630c5090d9528ee401 -26b02bac723e01b5613ef12dc9dc22f5c3061f5c39a3948bbb46c20fe86f48c2 -408bfc9d8b8d6bbe00b14bb86070df73dd49d24db3e54a11c87aae6741ea6419 -bd9a370f71f23a42d2ab67d8a7b01967416dfec9220c40ec6203e0739034e29d -ea00e150ad58da630bb057036216c811a26fd1dc945babf9af676f1bc6f67a7a -f4ff3f67e34677c5c5012de714c8c0fb6ad2cebbccc73f82b0cc4b52eb992756 -51dbf27622056839bb491674f7632c55a7ef67b249e3d695a883d6fc0cdde6b3 -79cdecea565d186d798bbf65b2a420896dd075df38bd54236a93e968b5d9fd75 -cb178a7da86634231332d0382a0e58c800f453e1fc1a83e19d17115037466395 -71987f6a57092bb46e0ae10110f84d1d959c567b67b9603d22b4e5cacdc827e1 -85e5559fed3b702e3f79577c4b4b3ad26fc8e14a326a94e776f4ada16ad544e9 -0b3a19012f9d6e0d3583f2e814648e86c01561fed1bddcf9b3cde825d0a7eec9 -bc7aeb705c5d1476ecb00ae4b8b8a021bf03aed4e7c9c5c6753f04fd87bb1322 -350e6db3ed8da517dd938dec6befce20a854567d0fcf1a339149369235889a1d -70f31bad6c47c4e52f6b2e785a0eb141359d76a05a37bd1c566e36d262780140 -65a4fd366723c4841bec798e4ce07f542183a01ef9d7f8f1979539e84ec241d6 -6aa2339275f588352fbe3b05bbae7b7bef3485b05641ebb8c8e3a619c48f93a6 -dd301f0b108ae77b36302af00e580cae0174eb6d30813e9ffad6058e7e850338 -1e53adb9f1f03d8524c4aad05c98ab3862d6d7cbbdcd7d2d7bd921a4069392b0 -bc8a531ae000b67c7e8bebd6b94c2c79f5303c53b045a47be451a3f10afafc76 -a28360374d5fda8895b79d1f94555c30966e5ad8a5f58d54b2dc4c4c39e47b1e -b3b2a57c8f7aed2ae776fdf4f839cb77f1b2be2d23aa4cb8b8d205152fe3f9b0 -d9002b58fdda551caac65569880995267003437b20cd3a72c3ab3166e593f3e2 -c5399da8ee17843e224b01cbe2c1548d1054a8c21304085b93b95caed462679a -fa228b98a458e5f08435bcc981e58e4cdc310f57c85478e56b186a65cb8ed185 -4e8a1b30ac414152cabcf2773a2a6c296f89fda5f0cb3634288291022eb1e608 -d7d0a8a46f84aaf58929f8dd7097ca83443ce71f56455092d27b22816379eb04 -4930c56449c419e37978806f3b42e97e1279e9e897a3a709dacdd5d87d0d774b -e14672a4ef12ba4b49915c76d4d574d44f3e94a20d911db728d973356e91604b -45e6eb25bc0dd3d285311bd2b01a22559f1e14387c996d531898d5fafceba4ba -0c6b87aaf5f8e82afc71c04d634c782ae7288f397e50ca0cace18eaa1c17cea0 -cf388e326c7ea4ba925331fefbda0606aec1defbee547666002d478a69538c99 -28106f509a53bdc2167903c9e1d54c41b3696e25106a6062c10d945602e341c9 -b50f1df6630a886c8c6f27383f29817e1b2aa326cc85e43afb136fa58ec24dd7 -03c43b4694b403a1471053cff14fbf9b34567b4eaa0b96adea3a5d428bdf8b9f -c0159e4acb57deac8d87597b4ee450e93f682bca0712f2136f8216945ea482ec -8ca99a112e447aab44850a576b69a254a9cfaf86d7cd1c130dc6c1181515b79a -d703f0903faea4c8e76375951b03b924c1079df5ac55802b53cb34113ffdc513 -8201c1fb93767ede80e76cfbea2f07ac0f95f250697ff0267c206bb7048a862b -7715741877e4c27b7a88bae1414be335d97ddc235deb4b95a5c51089f50996d6 -a812c4e9cefbcbdfe18388e75df88d04df66eb53cf3e7eac5fea15ff041ac3c8 -834356278f31517ef1d30d53e0dbadab04bd70f2ac190c35e7273d45a0259363 -40dc1e0b0017a7ef36c4c8669f29f21591e43541f149c4a3b1412a5057c5348d -33b8aee4f452db49b54d4faac7ec9c4eff03bc3c783d901a896fb7533b51097b -81783a016b20dacb75f52bf78dde107172803db8d3a24300aaff61863ac87c27 -f62e44bafd260a687a8cb47daddc2bdb6570669fd3b63b9609c57caad4fc29b2 -01082b752a679423dde1a8c86836c44dba5d1e3ab96676707df07bb47f730363 -cf78ceff36ff2ca976c969cb74abb3f72f693396518e9f1ec0fab6b53fa334ec -741b043045e31ace728698c097d458dc733fa74a63d61f53fd4f45b9ac1880d0 -ade4bad2e774af7ee6549e2824168f0aadebcc069efea4a90d4f2d327a242042 -9557284971dc1f1ecef59b92550929dcc42a3168d7f5df5d18e53837ca6bd01e -003a02c3700842fac98946f6d516ef503be66d4897cf2f138286ee3aa79f771b -4af8541855c21d583f747c294bf1d1016d3e4313b5df8fd2c3172820bdf19792 -428072fae237ea94b4e28daf257d41cbcbbf9c56dc2d964ad26aab3df4f912db -71546ec1fb9dbaef67a4a8771f859e0e78a9f6972724df27f79ded61b92ff3df -4de0f497c50f569891279b968d0567d17c99cacf6c07da376b986299423adc90 -84d4f8e93dead2970857b2c562244f898a59995b5ba464087cb3e2318eff4975 -5079a9ec897cc4dd5bed02e820619bc1edcb56385e0fde4c2ba27fb51a3e80be -9a2116bf27a5a42e2a70487177d1ab878bfd89347513c54eb92abbc87d50ce70 -3e2d237187cc8abeda00f686bca95cfb404053b6261d4795e558f3886c523282 -06adbea3cb36212dd839d26755ac16632a723754890ac8d9a6599d6f2663f2c9 -b920d92da7c773aecbe0cc7b950e619ba5eb1abc667cd354d417995d6eee1b0e -e43f5bc9061b897e0779b023eaf9aed24ea5cec2082050c92e0f30e23ba713f6 -2fe14d9957dace391f05e8370b9551423dd76bb50dc218d7fddbbf235753e1fd -f35e73d4b81e2f8bce061451a2c53e95015a7be71df27847b628bf8d3b682b4f -0ea381f5635fdd2b8e49e534a9c4d50e2e3991a7d5d418c9922774246f8e9e62 -9096c4c4bbbdb0b7fa78877883fe2f47f4570b4188d540163bfbd5d10975a80e -c4a21c1ecd43e211ecfbcdc391869a27b06a47bc1540a708a4e58c2fce67bdde -94fbf0310a60fc2baab83cd16b1c0c3b05a6fe84367b3e46f93a409633ce202b -fef120b0c791a48d376e3707689a186c73135f034ec6bc28870ff0f9ca5c2dab -2412d8292fdca20113abfff496ca34eb7829f43d6e1b51eb79ec9d331d6aad28 -2046c1eac346953e6db62225770dda2d02150601fc66f53f94e9d58b4d3499ff -22494b4ce45de3739f3ed286e421febeaf9e125168babd9b705b51ea733e31f1 -ce295f4d144d86a26bc8aabcd042a4953ac9d61b90e2d4feabab18648ba16ea3 -ae99f53b971f48ce1985c0a02703f1c609b7cc77d551fca1a6dbae9ad7d2dc7b -a61a5e6f8b729bd7623d9c73d33fe9ae249a3b776634e10dd49222cbc4705af6 -4e262a75bf5e60b249acf6d40358f5ead7fc3096342ea25de703909be907e364 -0a1315a1589df358b7eadf394d4b355571809b1e860d96f4d1386b9d8276b85d -6ff051e2883e2fb05c809d189e66bce5465fbe830282a23f1bdf0fe3bbf77780 -8b2c93fe7b69d6156f6ec93cae83bbe9c54638bba8d6df08da9bafcb3d080d3c -775c0347a472a23da6a22ca855ace9385893fa7d851cace8768fda1b2716e6cb -fe875530ed94c49e8c67922ee003911c08f2165d97d8a18f62d040e64b35b544 -d740bd40d8715005dd5469d106a4bd8040fa53cef750287560433965c6656508 -9cdc19875262c227b8ca384cd97047d279224e13bc8cb280f18e163d1aceaadf -d4986a6db5a6bdad04d188a927b6b7a8c21bd67bdd4210eca16dfdef107c8228 -0d722d8a3bb5102c0dceba5e75a5d8834e8f253bc5b9938d5099873e1848b0d2 -76040a020d677b2b5b4f7e029df54650b0d1408bb81824f003232c5e8fa4cc52 -8da2f15b4cfa2fd8770e0ef75a7a82d92fe20af3d5132d00c136a8740d88b7bd -5004d69fc459d373672b2b72f3ca1fbe58a3c2dbe5708b57bb3c2489f28a9e3a -81d61c0a661b8b039b1b7677438906399a6b8fabedf9b25dc024a038574d7719 -cc4686a43725c624d07a0760aac63f477123f7f4af8caf41874046fb963eaf4d -eb027b0651dfe68f224a5631eec6342258f71bae4053cb491c6c37bd9c4c0915 -2a643ca05150b84e2342205415be8556ce7b2f22ebceea680873da60f1a1efe6 -97e3e9e43c1756a243d3a9757f1219ae739579d393d46d747bf36bbea11dc549 -df94f5b12386c770d6927ca29b80eb728d68b7c20438ba3932429e5e7cb190e0 -3213cfe74fe392ba93dedd3b1779fc44c85d9ad678d92bc25827807b607aacc2 -414b2d0d59147ab8e0be0d32f76b95b27fddb2ff275c870a5c441612faa47330 -5ff3ea6caa6cfd284c2349ac9e5d185beb1eedbbe07b8c2a3ad4766142c02434 -042568172b0d3781bfe703b149eaa84fd09e8d488b99aa38eb577f7b21c740e4 -6088dbc4e17d9333a3e387531f97b4ca1ea179952eb33878bcaa465333e1de7c -83616e413ee6e4c5bcc1fde1987a0cc78d279468b9b1511081f6e3bc802e8d6d -78b19dc59990579eddcfaad310e0f360632da25ed5f6f16d560ae7d0175e7b2b -01c3dbd8c98f55f494bfc52b49f3227ce12dc4f458de34b2ad36b3b00168ac80 -85e35caa9ffb7ff60098e5027e32be43790a0dbdeeb8223b692aedb3d6c6130b -b6089c764fa7897b9a36207c9fbf50ac0c481a37096a57da8beadd05bd16deeb -d93fd56fe54a6097c61c1d647f2f52553609c3f936831f4f981862526139cb29 -48a02146d1815d3d078bc3dbd7c32f2167a70edc28b30025ef761cd43bcecf7a -a8ea6619cecdeb83147467c3970c772db2989301cc8337350be1f55c8566d14d -8d963234133bc7ad37397be014950d325d2b67d70232a50fc6a4a064dab0a970 -e7d4e1949f7a0e50ea970934a621330fd477107843bcc7713dd08075127c19d1 -5497f2a13f917c3b7a8917a5e7be2009dba70ea513b405b8926631562a0a8ffb -4bee56250fd7c147f5b515a8f1032564b6baf2569e913e7660098d72eaf586a0 -078af231d4595d67cc0c73faaf4463fe6ca8f94a8aa8f9132106da58d45bbfb8 -3e574f76201cd5ef05d47daa02001a89452b5a8bcef2cdb714b0bf5c36c76557 -7e2eb7aa71d085de5a4f5fefd4b22e25854c21a8e9e8460a2686da7f4dd2926d -3533f3fd3ef0d7cf276fabccf0c1dd01eaf32d788aa6e01d810713bf2d236a83 -4c67f4c69fa9281451c98307d7e69afafe851f8502421c4276061bd6c3790029 -5f72f1ac5d78564cc221302cd97889400b3238c65a2cb820bf23006208c65d23 -9b428ba1a5f9696665bfdf9057d645615993d7f572c6646d710482b9ed62f0cd -4dd6515b31ddc3a154beac3d89c81c8628daf456ac62abbe9de7a5b6062cf650 -4060c23ae920cc4967798b6eefbc752e3baf2492d8327d295f710814eb11b167 -629c496c555117f76309ea311c03ed7fc7f248f7d1492587d0cd5c5ae5e037a9 -57e68d48f4b8128c31dd014ad5230ea69ce33ba6c0c4e6aa1e1a7b3eb2245445 -979a59d7796a059f54c3a1332e06906cd565d21c0acef799d9d8aadfa6f5aa2a -309b296c1bd84c1fe08bae310f5f22e60c9ec7096490bbee14ca80cafee768f5 -7ca0d7a51894b2d52ffe875b3762d20f0a1500adda6a401dfc1adace27677890 -ec2794c07529ee08ff575ebcce496c16e6b36f9a9beb924f95c4566ac092be59 -1694ca2a76062112ac62b1360cccda1c5020fcb4f400de7e87b26391d4177341 -c91c4633b878ff121715bdf6eaef905841cb096f66547d03aea8d8c66dc7b603 -9b354bf14f3bdb74184393f00dd5840e23b08653d045f18155098fcaefaaf8b6 -2c548f4a756994f8427598ac8f68d7304ee37107738c74c0b1c911396c7de26a -3f33dc50809c971c394d2846208999bdb9bbe252ce67cd7df343a4f0e108623a -837a18e3f19a9689b823ede76f782b46d3635d60e4fb66d7a672b973d3d14262 -dc6e05092fc79544b2d82b03a089e8314c4ad8a64498f1bc699f58983c1c5087 -98aa563860b833bcc7c490b0eb852d2ec7ee9d9a02c91ae1e94a4f5a94688492 -05bc1df3e49c6368463303c81ebd9ec0742a8374ddbc39da1ba8e51d1e074e05 -1b3311fab5daab09de62bc9580ba9dd337f8c72fe557ae91caf5bb3c1932b544 -04eb6a55d79892f70331e72acb7093b38e7327c336fb6b4a6e6cfaf17ea978f0 -04b58b0c8a04b0c8806741abd1684835fd5a1a7c0345d5a2387f22ddd0b93269 -8559f7a4b1170e98ca957fc9c903cffd18fe9b92b4b32c508e53efb68883e042 -7f8b646afc1d1c597942e79111d571be9cec5221383f5f6b03193e0c8eeedd50 -261b9f57e594b795c3c7f493296e9a8ba1f4506f868b8502649d7784503fd253 -c5e99f3041f2b4cd9db715728f1e692ae507e234e0e8a3a8f6c732413b90176d -48e910abc918ccfd30a33c872f9efe34a8944f692f5f770c027da9bad3f65866 -2abeeb55a57dc13c71bfb71cef2886453b43d9961172723556639642ae281980 -50fb7ee850651738a68be6420eefae78d1a20817ed96dff413656bb4a968a70c -b9fdd1e9bdb2c0e1dd5d32ea1b50cc487de1f55407eadbf2b3fb9c03b64c15c9 -5aeb67cbb5ecba0889ea4708141e82d2ace7a841896c77ab00dfdbccfafa1f64 -61abe7803872d15961c1c31a6b1ad50f120d555471579bf02399f815988958ff -97d0132e6429769ecfe39b270a07ffd1469246229cbc1450251e71b1beb00886 -35399527233576ead74ef01d7bd7bad02d951e93b2e71dd1a82c523abba753e0 -95af0c249ad1f5d59f5c95da00d4eafeede3a093e4cb6e108469c6cc80fdb8b4 -5116c29b0a9a02a48f6f77115649b583ba4474900f69e9472ff178e41a33842e -78b476a924c14814191a61620e398ee3b48ebaff1b3635edb48ad16d497b3362 -ca9fe38284e1261344b34dfa8d46e43324b3d3b21f31146ef95c2c7c08029e20 -776474fa622d5f145ee66aef74e4d42b40e981fd5ca36c6697c2655b2183c655 -9901a8f632beaee841515da5956eb82b341d4683c37050ce998df19480662d7e -2d09b430b0d79441295b2d599bcb59a3ccbbf3333745e509903400c74b30dfc7 -7da9616b21b268b07f65a4a32d878feca9852a78d43e341e893238a2b2c0cf1e -3dfd75592bb9f15c4e8653dd6e8aee0b772961a9e54696a266506ae7146947f0 -ea378bd1ed22b391795bbe5737994bf9756ca3019f42a032435f9429eedf2d41 -5ff27dfa5aac62a418667843ad3995684018c1b1de4ea68848e3762818e5b80e -0d5bbd9dd866753537ed7ba8ec145d49df30fc8d293d69e3083209754a4b425b -99e39da47bf27152049231f60dc3a849ad6a21b86771e945877cb2ecf7451261 -b5943f02252618cc734cd0ddcdb312ab729f35826c89fa9420fb1ad70647a74b -70474ddd8ae200fca9317e1c50f9cb68de8379399bfa7424e66311c9d7574746 -e19d44413a0c6149f28a340062946288f9f78b1c2b6f5233885e6a19cacb78f2 -31534202b24aa659211adc6420b95b17b20226e74e9ebe01948582b8ea2d3ab1 -78d5b4ed4c778041fc17d11157d5262c90571ff706099c5b06130412490833b9 -c5267a7163ff7e1d45c89050d6497d097826f5b26be150ddf1ee486d232e687e -453116f0b6b7c93064207213540cbbd88d549b74dbea59176bb6d7f7712dd598 -5256a9273aa32d1701a6b2faa0da6d21356be95968dfc03221b0ac65b2b22287 -90c3cb64ab2a65909824dbee9b5399b0c651bf5efd603621b94feae2fde41963 -c266e40755ca4266496ece2fe93c4397d907cf8d413a230701e7045cb9da1d17 -f1a00e00ea64b45dbca755a454a9fb232a8b4b80d6032650231b9fde78ad9664 -71232d9076520306940852e529fc46d83fee4d6fea15056cf42fafba1e8482db -6870f41187c0906484e8996738b52a946aa34dae017d19faa08c86845a85a543 -20dad4f4002f6625b84a1b4b80467d102c678823b676df24c9ca802d568ccccd -615858fe6517ae56d631eba96da6b71e0e0e7b71ad9a9483c61574e23c47bfc9 -a0394b4bd85fe41c3a8bb60ee8c6f788017ea90ede0a70cf82f14056b24a6c3f -58849d613f08ec3ee21d990dc4fe661dcf4b3afc8ed34ec2ddd279cfc2cee1b7 -f1929ecb72d10752ea012342923450110ec1868292babcf755d0b393768de27f -702fb68daf1154e8855a89bc32bc378580ad405a05cd12b35826a9d88a3cfb65 -987f364b89c30340a2b1e25ca29cec4988afd940c1321d12cbd50eb411a29a65 -657b2e7fe642bd8c90cce146b9d216b7f87aa135ffb9ccf0fc8da1146bb6f03c -1cea3f7d532fb572bae2db81b7f15c14de973f6bacaadde5cd0333e71a9a539a -8356038f876ece85f7e6b2d057ee8d48626483ba054f8a662991cd52fc317738 -2d029b04dc44da269de8be9b025f7929a34ccb6efeef271232894ba8c837698a -fe6cefeb4c1ca0180215c2adb029986953af902ba21c7531850ca7ef798ce22b -3496988dd07347e36f26cd55db9caaa73c5ac260256432c9e0f6e3bdcebd81a6 -59e822ba4188ef395f10c448c4c09270daa19a856c34f5cf0f91a74ea962b4a9 -5459408633966d6730b85c54e2de6ae317409287414079072d9422ff38db6c93 -d37994e7ef1a0e65c88019e729528b51ad23bffad9ec9954de8678f03a307c43 -0c498a7c16b3b348947e25a896bdab2168bf3119b296a327c2378904045e322b -9cb321d23d74f470fafc828404612288252f1701df6c743de571e2e876cc2672 -23f2aff00d26f1155d6d41a3b08322cf8eab002fe47f5265bfb67a405d4ed77e -89cbb4a61b54e796b8f3cdf388d5418b96615c1312ab7d4e7deb1aba8984e3a6 -76dccad1bb953569931f8c26f7af460c5689412648cdb7803f1c93dd452a8ec1 -6c8e3e6190d558919b855b7b5db34bc42b992ea155615cab202009a96fe13363 -4f649e77e4268cf651a74b8c8c645aae6dff800ad17b194c0b883867151c6230 -dddfaf596c2639a46e6746fc3ccd1593d432063ba27bf2476bb3ee610fd7d92c -c09b70c657a8255cbe2d8ac281892280d5f19fc27b5f0e912eed9c38007e748b -079ce05131c3956dd078c0846963268fb4dfb5eda5ee8894a89920088f721d1e -b725870aa43e92c565d10d5d796cc04a114b5c32e90c9c7f5a9b5d03d894f96b -9ef0b123b9f90d1692be30515757e54c2f9e073c16c04587363c1e9bd4f834df -4134a10fffc0b5960a83c4f75979a14bbbbd52d4d4b5eb75901fd20a36613826 -0d39c035f3144381fb6d4eaa99953736614d1a46fc05f800ee66ca63b1c6ef10 -673e4faec2288afbf5cae62b7f6ab8c80e96c8cbc7b666ebe78e68d184d85c4c -d8b92adb253aef17ada1dcb3eb1895047b93163050a6f3c1a69a7935a12244ba -cc164a780f44dba4c432f913f5b649529721b123f4d6816ac8f1029bba12f442 -935e1b03a434297d33e03357e0a4a56a10f0fc2c16dcd060cf858b58f3cdb5b3 -4f571ca4ef8a7a22bf7b54c35b38aeaa6548be8a70027994834ba2d55b4893a3 -c70d9d44cdf6cb9d1d6b92af027a0fa802f207d34c10f8c4aa3a2cb64f8817b5 -78408cd8f98466905ec58a8df6cf060d6ba17235dc6591e2ebf061f5a7f1bf9a -7690df303dffc583b98e8765977c887e776814899b45feb0f0cac642912d4b81 -e51c5ae48c0cdf9024cb96f421d1b7ae45b5ce9d41d9d35c2b00416c8b9c032f -b27680c1f8c1e55d9973a698180a786b92fe97c1b0a9017e37b51cab3f388b2f -42329ec38e452fceaef2152d36471573caa830a5c80eb0ea73c1c7161f7b21b4 -cb7d3e55f29e36dfaa09c8b3592fd8afbb64adde44d8665143ebf1f3afa1a5eb -a16860b8e8f52eda1a6793be62ee8a682a1dd30b6482a3188b5e6b8dcad4c688 -98e39892691434d85c42922a035c752827474e01cfa507d0c434f746993ed746 -3d32f530ea324bbe0ff4a38581296788fa2dde0db5dec9666d8af2deb947f200 -b617a83e84114e684442fe3360e0a66880f3a87f1030dead88eba805cdceb8fa -4b110dcd71f720d93de7c0e8122a09081b9cd1152dbba5f0411728ed87028a21 -9cc36c72bccd73e3cd517b9a7210cf1f3c719e7e23511b0f0c272de69951e0cc -c264387948b95b3fd7d7d849947117e1f14bec10d2d718374eb09734709ca60e -c7037c7c3c5d1b9797b9e4c539733fb69fe61cc569f76b269780fe9abd497f54 -4d728bea738a4ec3e17aae0ffc36c2bce74cd24bb8a2758b9c8554d92a64413b -ad5f35aafdb387b28f1ca329a32d8d99db75121207109e6fba304fc86e027bab -b631f93526be28022f06af5126cf0a69c7de8aec8043aff5a47f6397097b8dd8 -8538bb33987fbdd064558e7634612b8b2c22390f35b8096fb0674fd62084d7fd -15d98b22fab5dd19f9d222a2c4d2573badb76db8383c74b4996cb068ad4856b3 -a01a8f42bda0501aa7c317c275e050a133df090b6274f9beb1af87f8b48f7b03 -64bb4e937369972839448dc459dbb463e8df91e0fc7fb909f5a423ea9aeb2f23 -0d24b27dbe955c4b6c3a9d22603b42c6c5ebcfd67c74f915a47ed1b762e10738 -b7f181feb8e6a3b2b764336966c6acff5a2e2fe237a4dcd64b7dc7b7dd33669d -8dea06bc3c1ad351e2305335036b8f109fece9e30cde9ae2f472907780dc1667 -e34cc399da1ae24fb728529cf610c6592df901ec9a7a1d0c52ef3840a99861da -b28412b3751b07206391aa61c33ca87d4164876b92bd6d27de24d6abe4af0119 -aed63c73e43a696bebc21252a6c39d5ecdf45042d230a583e177b1e41167ff25 -1e633941dd1808f8a4436e663197fd2442e085c596d3fc12b654f94f05453599 -e7957e70a965c87132bdebab6eb857a450c23d36538da886be9785a15ed6a2d1 -64dcce81504e271f58101d36257f8cb1d146c5dca3d00963d245634ab074b95d -d490b8a999b83ad4e4fba3573858fda34ef4735ece350868c4ab772298e22b6e -d78e9faa6af70f400df8c6777d27a205fc1b40b26e9ebd72e37a18948d447dd6 -021aefcbc2ab7939928daa51eb03d66172d0d4df7e01b032de40c3ff156e46be -28fad368241ae811d6914a3cc4ecb640531adc026496999ffa429093a40615db -81b63de704aeb0ae6363559a0b70d55940bfa22415edb9239b27bc5ef0e4fdf6 -3a91764ca5dbc491df84e07875da4814bcae9b715d3e4dccc55cd83fcfd63696 -c30648600c986bdf4b1f00c1334b1403670a56d0cc8bae15187e1f4dc8082eb6 -7d85d9413fa5bd3215c6af814cdb8c1b7dc579c6f8f2bb11836a5760021c0fe5 -e715080339b24aa017ce4aae8bafa417f889c5d27a285004429383bf4cb8f65a -6bb72bcb975d903020bc27752c7e40a2d00ea67609a04b125da0ae443cba553e -d3d7bed8408f3cf9d22176f96382fe832a85fcdc995663c777ba80b9750000a7 -921d3fb174ffc454547a90a74289c2a5b49029b3e7798f5587e9c646ac23f2b9 -254b151cfbab3472eff67ded7ce08db90c0a9a858b3d58e7b185212a0c45c1d2 -ba5d5527e23860ff4a9c985f74efa6c70a749206addbd93278965d3b6ade68ca -8e2e9ad4974a836fb78836fb95e4fb7dd7d6c2b5423334aed2644b09259367ab -8a06c57a99803b547e3becb7ccdbba446a7061d624a8ed0ab1f86740351ffa61 -2f55ad009fe1486418119f3b9932014cc92ed1f13ec433c62c3a004f9fa207a8 -da0dc1d5adc59d2268866b143868feabd83a7a27aa68c1d2d31b5a3c5b2dc1b5 -6f65f46b5a3e33c9d2202d901c9eb2b100667903493999f0a23bff58c6dafedb -7f2914f65e1654579b4a7df69ee950a223b679161f4455cde3d275edb6e8977b -5067a80d040e349655f4a3a60adffa2a9e56a4c0a3b1d4475c29dbcb177b18bc -2c755214570988ebdcce1d8f54c59fca0b0e19116e6a2bf951ee7d00b3feca8c -bbfe7c9914ff0eca51ac6273ce6e8f5915eae72bb2e3b8c67635da114e783e91 -57f1ea86d828fc1aa506e0fd7843bb036aea75714c5638793076f0b87de3f6d8 -8527a8b3adfb5171c076ad8fc47b68f186af94a0de3b7badfa167cf09c7909dc -d9649484238f6be5c2cea6b58f37e55e6aa1e331d2bfd64e5103841ebd324f3a -f9b9d7ff7dd9934a1eca605ba4a38c926c654d0c9ed2ef59506fd93f25ee09f9 -ef6383481ff4f29d33098d0b1c3675a256d924c8a344590fde46880cf9c12128 -dbe09c32735b56de14dbab2957fae3ba143a07de4b48c25b399b0e77d537da00 -f0fe4d154f1e9a09b9c4bb74f62ae698fbfe43bd06f038089e8b1876eb07e249 -533f9aca9fe1eba0d89e0bc4a0f98488462a11f95f6d77ee6ff20508293d8e71 -cc81d9bc80450c2c6e6a0fd46b8a24aa263acd703217ff2e19e7c61d7d1200aa -b8c6234e397ae8f474f7afd9dabb65cb6de25212987a8530dd5ee78aeea4226b -56fbc58fc736c7fe3eaa7a842907cb4f4589814479ad2a09bd1e3bb0bf575d15 -f0aa886a56e30b5991f7064d4b298c4eeb2c6a33a7307014315e3dae2ff72581 -283e0a607a7d8c62766a23f42c8722590a784b34f5e97b9707bd45fbe3b08630 -1df111d0aba815c03369f7caf6aa950498bcd6bd02736bf70970525b70c023eb -11ef2901a01abc672153ddeb66264d59a7eca681c602e1b4a362bd4fe09ec788 -2e739d4c3aa9ac9446b2cb7da376c4617cdf9fe436aab026d2e23c755be7ba9c -fb61013c90dd986c2f90ab7444661c16ac4db3a8402b03450173aba644a61e98 -99d1cafa06a27e428ecd6307ae89b1747de0609ba95f4d882986a904f1c1f3bb -da550327d637a29fb1b4b23f5e08772889d27bf3cb461144d0f01db6699b2cc4 -8c2a7cb91090432d70fa673b7ade79f862e9b79a94f06405c44c2b0de8f233b4 -8080e440921cfabc9133916a0419613528f04b00275b140d691f4057c5420d49 -a1e53fde0e926a60613d1168d886ba0e2d5de629e212cb9b8b4e2253a7c7b531 -8287a0fa5438528bd414e679d20b92d0ae2ed58d2c6874354ece38b933a1da35 -508e5c4e63e62437a77a443a2a9ad7044d63f36c23b5f3a2ab443c717219e02f -dcb6a4286f765477eaae1a18bb63c3375fcd109a953a644e168f2ac0e1d85f91 -3d62b34dc51e3a134aa30bfccfd6178cbe7dfde088a435ecd7b310f5f10a5b8d -9387ad196d7e1b37047670c8ef0397cd1f380415de77419a20ea5349ce908027 -a8f8d1498f5bffa712690e4ccca077a452c902fc4a9b7c7882ad7b9db0d626c6 -7def29713c25d7ca466958350d56aeb8dcd0987ac05fce2205081d301cd3e601 -f386f99eef9857fabc6bf49a32ec3d4a921ed57063e5366cfe51adbcc48b3fc1 -ea1e40205c7fccec4fbe6dc0bcc7af55984f6e49a8a466e144b7e1bbf63506c5 -f60caa2320f9ec1732e9767ff4c9effc5b2f9ba6a9dad549dd30771c53f9a4dd -24adfd39cc5be74851d51b4fb038b22fb65eca6cecf6c7e902e9391c89b1587c -509bf28a987cb1c8ad74ebe7557792a9ddad7dbdb1a367c633a8eacb91e3131f -02000b5d06213700a011011cc1cfc3abe1bac54878cf32145d9b18eea7b59b9e -19f551170b92472f8922c0838f5d7ab5421d59a325c05372fe2c4c37184361a3 -71572d378c3d0de308e2c1cf3dd7f2c3dfe703de9df84e569dbe2e8cf00c54f5 -15db602bb2d44d1f99cf2aaaf78953b4e838fc1532e2ef4de4f0268b2e6e2c2b -cdd46138aac78f9f34d6911ae387008d594291c7a57d693386170e7e6d377cf8 -11966b59bfa3cf47fae49324348a91f80399e29991d659b32e0fb0af79763ad0 -93630b21d061cd935351fad564039a2fac55b025a04e9668771118e86f9216bc -55c4cc8ac588333bbc1b8fbf6b76a08bc14e1f83a683aefed0e20c7bacd2ee51 -96d723daf15279d8e2ebb993847b43d63e4960ad2f4150b07fd081517de48a9f -6f4ab09802181a2e4e44cb0204200fc112fd99ee2e09cbaa3c6d3cbf97f95bdc -a4f6d06ad415ebe00d6a78c3ac0ce6cd4dbc06d2829749b7e410e6fbd6f8390a -b958ce73414a8766576c3b642916778c22cfcaa498afd93aaa19cd506e231a81 -f9994006f5e948a2b20912d70132e6a0382666f35fcf21b6edd947d1e497f66e -da9cb07d716cabfdb6535e5ebffff6196b495327fa4e5c60778f76b40d46d4f2 -769ea09961f24b8110be2c59f426f16928866233066135ff9e1f15379ed5b11e -de442dae3895e438ac05889c683687242a4758f1a234ef144510bbcc89e20954 -93272fa2dd7373c6b7cf9170287f4dbe3022b20bfc08e27c3232514c813e93b1 -cb37193b2eb17a832c1833ece9666aa24c12424d6c157d4f279e1950d45b4940 -2c54e2bee3f3eb017af95881e32f009764f5e67b93eeb2172023b510a874a159 -4975ed54f35268d3df9c2cfb65c6316b8178d1945abae3c5566b9da3c8681b4d -acee486d5084d66e88620af120a44b5e35ab55591ea5283b4a69a31a9f5b212f -96456ccee559dd42c58b6da34dc181a0ec0a5be41a9b3e0958f399d083fba072 -686a38da9b05355fd47c3f59708c7b7d4c31de833a87a4d8da6abb4b9d2ef519 -7575de9dc5b012e2e3aa51c407afe407001a0714d7ef1184b33afe085754edeb -3ae4472f53011049af4ce4e0ef299720cf8c10911dc0bcb0f9f81a8caec00855 -91b750dcae4e3b0e0f507c25c1ca59cc38e366f27ea5f13427f2bf6809fcff29 -5d513e03c98272a0a822592dc9682a49d9324dc1c07f5b8b933ea9232ada0108 -27eba8837797d8782f46dadf53cb7404cb6612e71820478bf37f88615ada4989 -00f10078a2385cb83c8e41aa5464148bd90f7f2a18fd0b3f41a78b10471bc33e -0b2815ed757515a331a6dbf861844ffcbf6b37ef7f348d7d918fefa2248d82d5 -56580cbbc3ff9c079d04b9ab4fccf1682c0b66358cff6840a9808d91374319b3 -09fb2f795569eab9c00e850a50afeb42248a251473156bf4d220f220e8acd814 -2554128f83693005694e19707d0630ddf56bb55f47f21f87c37286015677685d -d6763e4a3e28de9d9f7292f659ac307ef3e83d84529389f7eb0639c02239861b -86df711f11038176d9a70b04aad94f14285bd7ba4b264696c383bdb6cde76ea2 -c3870ada2dbd7fa7c70e3fbf92ee9baebf07e97da553aec0c90ea3feb38ff428 -7625706fd41f54aa6d85124920c33c48228cdfb0e426eefbc3732e12813bd368 -01698802e58db4eed2aa7fda4c1e439ce2012457c55115d69eedb9f587e46b5d -35abf7e7372203b01ffecff24226de4e428217c5313a2e8bb58efd0f465cc612 -c143ccae5d8b6dfe04583b1168259f15c363bd4a7db272642b0816c7e0e5ba0c -b2bb4690aed8e0455b878e139c15ffa403828e30c079b3c3a26278050ba66ba6 -fce91bad29dc2d980c06678131d961e47363f11856b72f5ca039fc991ba248fc -f838d935789da19681db4d9119cf55bd29847d2536ef4f69327163c3e262cf63 -695d42a83ab0553b4c72c5eebb9e71c358c5fdbc209ada006f885f262e3d077f -b9966e8f53ce61e144d5a2d096a2ba15af75790609218bcbf7097a0342e1dacd -4eecf33fe3c4c7dff8b4c1f501007957f8aaba2e7176a707064c266cb723ba18 -6139e0bd697b37528fbd3a4bc8be5f7c6a50aa6fc65a0a52fd310140e750176c -698a919512867a1ae998b32043c0e11106f81154aad48fa3f6acc98bb2b38493 -863b2ab05aa77dc16e5b01b328d10dd7af79ec3a5fd38eb7712e9624cfa2a620 -74988bbd4014a7816a4826319490594c0abba1643e85e961870e7125de720ed9 -db31febdcb739b3f8f0a5a2803819f9f7f3fb3ac983e3b6743c7cb3feeebe578 -0b0456f15047a76ade4d764e56093b19ae91d52cd93ca61bab22095711e2dd56 -cdb2db4cb0a1120dba8939720c84f2faadbda3b0cab8ffd83bd77580e0dd59da -67cebf38ac126e54f6b70b55e7940c6b44d459757958c13f1c6f248eefb5af86 -48d752e91788945fda3da668a887f657de389b123260e3ef4f1b93393c1f484f -7268e84e78585c0a3695ce84bf217637f8326c98407c1060a00ef8950e498d0b -79ce31264ab755493d4ec00babe341e431d34c8b7228d0c5297bb776992586c5 -ae9ceaed8020f3ed8c0ff4bb963b9c488f8ca6c667c851861e8410973373fbf7 -56b0355b1a0dea5adf037ccf59bd1d4957c116187c99c558d5827d609dd27cd3 -b2fcede2d281ad3c33c5f9d55cce22bb1b8e9b14d9b6dc140620733a10389574 -eed9fa2caffd5591b8091c8533cc29d600b4a75b738f8dd2951983f06da5cb54 -26c1b1039bdb3550ec6cba9be971034a125f58e74152bf38e59b6365e7c6be2a -8d5decd0397e0edeb638238e8320f0425c5ba6f18ed9bb32693dfe1b079ffaa0 -3bef302dad880b1b4625865d2e8794793e1e63fdd5b0acc91d1f83d12238427b -47dc31e3b218ddef4813ba2e15d872b0e6b640905e261405d148de380b062b9b -a73f115b4f5ef94d4023bbad60fe61939b5c6cfcfacbd85110cc027a194d92b6 -f64b2b2bd0c5648e744da3048486e5d9b77b45f0360aed982351fadce42a42fe -f2151ec97e2e546940a7d9154cef3b2b8dc94aa1076369d9b1fc54e22d65b6c3 -bdbbc16f315b52e31933acb14929e23f0a1806d7bef12578a6 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark diff --git a/client/nfsexport/lib/fonts/UTB_____.pfa b/client/nfsexport/lib/fonts/UTB_____.pfa deleted file mode 100755 index 36ef3395..00000000 --- a/client/nfsexport/lib/fonts/UTB_____.pfa +++ /dev/null @@ -1,1134 +0,0 @@ -%!PS-AdobeFont-1.0: Utopia-Bold 001.001 -%%CreationDate: Wed Oct 2 18:24:56 1991 -%%VMusage: 33079 39971 -%% Utopia is a registered trademark of Adobe Systems Incorporated. -11 dict begin -/FontInfo 10 dict dup begin -/version (001.001) readonly def -/Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def -/FullName (Utopia Bold) readonly def -/FamilyName (Utopia) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /Utopia-Bold def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/UniqueID 36543 def -/FontBBox{-155 -250 1249 916}readonly def -currentdict end -currentfile eexec -f9cd86fd4821715265f16a614e3770ef80561e77ba6ecbb4ef4232445eef2839 -94e93e3c8c9b09c09d71542241821e07888ceb54e8cacc8a45802f50c0afeeca -5e3d9114c1860bcb2ba5fd2a879a0d79953e30c90d8347513f4ca5f05b2e231b -4973bd1e9db66a39d846a8b3d9e48da72e2de8743ba2e104893167c235719245 -87b43ed3b6552cd85e4bbdeb9f46bd813298d531c74be81995a52ceaad4112c7 -f65773b088bffbc9874f615371c5e7b50ae99d5b6acf9c80d87057bf3a424377 -f4284b7232096b6ea623dacd1c925ce09cfa6515f675aacf815c38e984b4ba40 -0d409bb62cd4ebac75201c8e782e68fd73e8622c46b696b1ba37ca9621400041 -d95b948a6bbc089fe6b230b39bd358228af9b3e68418166a9adc4e7665341088 -c47c074aa4b21b0949fef9929e1a32ffddd2d02145cdb256863cf6067d27ed9a -f0aba85b1e0cfcbab7e74880e9693b5626ad31e6b5c2d208087d86c116513212 -710c9d6ca50e1503f8d4c2863fa378f8184189af0cf109f4affe7cb74563d513 -2104fb9dc6f3f5992e075633a0baebda8ebe9a07c3ec4b25fef015d9915a26b1 -d401a6722015090672714181580350560caf79bccd6040c0c1651d917c73107c -2d46aad5d4a370b55e896ce1eed127b6f0aabaf7c4ca62e89003032abb2c95ba -58c4a0eb0bb1a59a439a6a0c2082e50725b9e8139324af06ff03b4269a697342 -8fab0c1fabd320f1452d9c435e48037eb8cf6df4233cd9c05691604146cc813f -7ea131f21e9863b7bd1b087a583af14675b9bd31fd364d5dbddbc9b533a6ac38 -c4bdeb28a1ae3d2b374da72405acf67b1b3a83d80726301b3677c067c748d857 -ae1da4f723d4365647de10f90e96dd7e9ab9ef5c7e6866a13b807fd3f78136d5 -72950a10bb0165e61f12c60a813c7e35eeb9a0500725dd912ca2deebb238538e -790af851b14643f40e5eea13660e57b5c407735079a292a7c162dd11d0a3d342 -67290f1c9261fa5de6b92ca1e7daeb7cb970c766b3e0396ec0ce55dffbef0bdc -b437fbb4d63634b9abcf5844e76f9313ab2182e1fb3c47a705a1d97b79e93dbc -5e48ac19b45f9be4b9225e5a7e1d3679dd21001eca3c08d6febd35fa5453290e -1269c1d195e45338c10aa60fb8ab9e5a5aaf08c82e737f082bb6216d7cc1d5d8 -8906c8b05c4432d04561377438447eb5fade652af84c1ced99551365cf9e6f99 -03d1593de0e450003fb0d5b5588330d6527fdd0c8193fc0cd2293012310a425e -0ea0f8b901b991648ebbc894cfb7d95da6d35fb7c947e887bd3b6599e673b921 -c96f2a033e30b341a14066076ff0abd5fe77f393b548a15ea2185f99a3545b01 -dada854fce1ddd3448a9aa42ba260a4f85a0d1bdcf08b3de2ff8b6411adff446 -4a2929193ade35f4e26006cfdc45929250bb76ef007043d739d798a4973f350f -52fa1690423381539e3a4cc458600fed91fa8e16b5ae0aca710dbf318d16e3d9 -16a082a093b59f35ff92a1b235d5621e87ab471310ca26a07a9ecdd3cbdc9bdc -7506ff13b886b26eda6d4ccc52a312593a0f2845a4a30aef829109e6b76bfcbd -2f2fe267d9376acc0686c9b1df3a25fc41d9e5390a90249cc26c502e4bcf582e -ca5054d96b6ebb2bec79ae23125b4c2a13a97570153b83dfcc4d9dec9717679a -ba8c37c02697d8f47269b9ddb983bd4dc029968d0d1729bcb9f94c899906af40 -0df490eaad13acd5a893663fc90a850533263cf6657632e8e4df31e6e6636521 -78dac783feb9616172d7651e3e4092b409383ccfcf8aa04b330119c334d6c8ab -bdf97d97fb475c25331044413a117dee0f15d6560cac5ca6c01c1c98b56d2971 -724c135de3c624fb7a1994a8267ead0628af72d5af1dc0ae3177c3b678dc15cf -9dcf100dd9de9bb71f568661293515002220681b0afd9775464be2f66df08c5c -7d3995a57ffd2af299564dd57614e3273d8555f705ce2a2cb095cd662acb8163 -dc5c587747e27fbfab667dd449228e7b2f40cea584c997d2b98e78a063edd327 -9e23947ba2577035ff349019293b13953ceea11b49b230e2a29d295b032ebbe1 -dacf823e3587184182d0b910794a1d784f0bdc21c74a65d12b5875cdf0c1cddd -5995a6e56c9a95dfff55167f82b3de41a2eb653b0d1eb61e9c48654424ce13ec -8671211b2b8a78839a4569b3cefae520e91c538f09d96f98ebbe905b01ddb080 -f7f6ff00d2f662e02bbe7dc3044b66723956559669000810f706f4ad544b9a29 -b384f554816696eb7b59540b407d438efb6c8bfdcf05324cdb65e9ffb8864a9a -05adaa3678a341983aac1f6bed28040df2f0e18d27300cab0930958704d900fc -5e194b149740b089814d1050e11a9d885bb1d835a7cc092ada9f08858e1ac5b1 -84b6fdfdea41d4b1241ae64fa3c47f125f48cc05c5dd8e2c896bb88b0a846379 -4477252f0d7abd31d4bd5703b9f280b09a59bfaec0663dcb2ccce2821e0e382f -837f4a4fdf0e57d531383155f4fd633bc4b7315e54425a0395bd91f050783685 -eb0b85e15e331166795acc5dcb2ea1239209f8296c2c4cd1eb15b37e3ddfd2ba -33a25c3761da66c0c08635101534607ca02990447c210689d31e49376d152161 -7696160aa2da75f993535e6cfbce229c657578620d7c8de8cf720f21ccc22ed1 -2be5c92bf7e26cb750f707fa7e2348a04a642ff319cda45fb9884caacb562df1 -365992416084a4d40da9831865b02246bda402f4354e8882e98215c37d3eb3c4 -d2f9ba2b93f190005da1bbb506a5d39e2a24be0ddc50e1bc5235d221a151698b -803f0f0414bc085a395fbada62a73a9a3d4c66415ff1704226f8437e9bc470cc -63011be0e1f3dbe6e6ad3ff35541961f6dfaae1425b2020349486880fe7fae78 -5a2db27a586f0daddab8ca62887db0a18462a9a3d821f31923c583bb731d7299 -f051b8db5f33fcf53c37c1e4ac7fa0275dd39ab9abc97cedd1c65a3d514d96df -8b7a49217fe1af15b5c738e927028d1ec523e8e8575f018e7bb3f7e9afc81ff9 -3de7a4969ba59f7093772e5696bc4f2d6616419b43ff26f2a9da0e183f7bd542 -b31f175724d2e8f18a61ccd010d8c18394f640f905b6832fcfe7d3e9c02e3e03 -911dff14d0a1c73129ba85e2179372aff3c028388f30621d1f8aac757660079c -63c22cfec96ad9ee4846c0854ec912abbf3f934e293e0f1211786455019a7f7f -38f9e877f4186a9440c75a4babf3a9fbad1c5fc484082e1be4084ca3018b676f -0e037cfaa4195a18948d8bb46a6d00b68213c09d5e69673ed4e00155fba9d840 -9e08ca2dffafc93110751b59ebc2b6ed4bf5f535ac9d73c9399d9081eb6b2ba0 -a13aabde56a7f9200749c9e866cac735bc6e2f7859cbda912f0c26e85d3f7b25 -3185ec64546cfeb89d3992b12815e70a548299615c6889379218c0e7dd1cffaa -ff4ccaf3c35c77b09513b5f9b0d501322a862af4f6df0af50b62e4e1c1b3067a -f5b24a44190c41e96b659f62921dd6075609f7d7db532298a425c675e4537952 -bf06fa9b1295e32068740c361048301f6ba6386602b8cb54bf8f38fd77669f5d -791a7b1854b7f3effa193e9e5a435694b1c8578ec78426134c9c56e6c9f08951 -2469a5137bb452be5ec3b3d27c3cbf6e6fee0d58d73dd3d277bb0c1540ad102c -50b746093832be65d05c102ddc982b08c7ec1fba629dbe27d4604c1476d91392 -801f91ff781aeabec88132162e021741f8f31f06db82b29d17fe66ee04e9c200 -5240d68ba82373c7a567ba33bad4aed1d6b5c570d03c5c394c09e5c5eb9e924d -9e1c2f161a9d52cbafdad75dd674327ec81ce286cf1abfb5ddd8606de9265784 -5c950413caeca8ef80303793826c3ac4b58d9fd4b02fab612fdbf71c2a1698f9 -048769235eb9dd35823536662ccccc128c74818c8ae48edbe9a4624ece9d1ff5 -39795c7b4808520a08d611af58eec60bfc8d272a944201096c45749bc97f32ce -a52618a1d6d53267ab4fde671ef1a47b03687a59e47a8e277c02a618af09b78c -f5be89f5da433ea9d31cb8319bbd220099a8d7d2f879abd99b4a96b06ae3f8ab -4cb89e72fea1355a010405cd72dedc7bd35b3ae32fac3d40642fe88e7a938579 -f4c10f751174cf042331e7274eeeaa28e5829f0e6e866783412a45e8ce8ce127 -5438c3fedf8cfbc9078e2b6dc439d9a513fb2a74a672b496e19af3c092342811 -983b1a3d6c60981db5aaf03b1fcd375f4ad64a10b57d378f52f29cb89dc77814 -1dd5106934bae98eee32b779eddc6cb5fd13d38ee5b39d4513338af4feafcece -dda1f3d9b6f0b5cae4e7efa14921578cf07ad6e1eb7e0a3bf7d52bb7e2fc9656 -32c5c642a6ab07c108d79699d56727db2da956cb576b97648ade80eab2ae12bb -2dedab0672ae666115758614c91108c9e4a4da0bd49f15379cf6716a303accbf -477ae6756d18a0f6e3801f72eaff179849888104e38e69fb722a385a630e06ad -e71c5553a14c5955f6189e08f8cce45ba8fbb5c5b6b0bac8ca48d11c0656f21a -9b9286c4f958db61b111ffd40b3c8d69720b6e2eeac5452ba0837fd6806464f1 -0cf5bd73423b9f065b6ff58954a9090a53e31a16fa9703700fba14f8b6666ee7 -4b6a7bec61fdce1fc10245e2e90e31463bb7d326857e389d87834ddffa9ca581 -5a5abc54a958bd3738753e38b255cb1012cadb7278f8e84d9c649a4a659a8385 -19e128ddbd0985505fc613d9c577fc10c429648ad18771b0da1087ef584c2628 -b91d33da27c403c0214e0b7f984a9bfe6c2c574883f446e4dc1a563c32898bff -ca2433f1161168565e063ecf045408d619f2a3215ee881cbd13a7751b14189bd -a0cfafee7ce4d9600fdf993ceddd965c4a608129c89b52b5b59419ed079a6f57 -9efc222187cf25f848d47bf3bdca06ec2573fa8fe20624cfeec3f9ead6ded709 -75cae667bf025ad867944faef14fa9d6617b74cee3804d5edb688d9ed4a0c2bf -1aede05eaca61e297f03026864c738014d8afd79294e062e04e5fce1a784d850 -b00e58fdf6fb5182d6ff08bcd05d2c7860dde223a37ce53131c09cba9c52e9e5 -76cf7e58bb99f045c8b23d67c43449c6c3f6acdb5b5f35be96d17fb0f8d42685 -cc79fbd421fdbed2fbfbdbac976736a6fb34c62eded4a12ad456d94aea2a2bf5 -f1fe4e1519361177998c8272866d26cc0e1af48fcc5a399edb8550046f3e8b31 -baf20c0ba1210fa2487cc2982e3d39e6a630d11813801bfdf4cc3695384410e6 -067d10d37aed54394448427032c9cce4d00f89418f10a45fda8aa392db636c06 -a26c0b39b25f128f7e5ad81a548f643eb1802117172d9be1fccaa3f1a73b7c1f -1cb21f7f8f71fd8d063ebf41cf2f3eba32392f0303affcb36e113a7e46e5406d -20e6c47a9be1e8f8085a8c49b04d219e13082d344c91dda69384c0b16d3fd7e5 -e46f213b789603c5d89257d6510ab618f24df56b1ded2029779af220b40eb86b -cb9ecc32f2b1b713132ba229c3bfa888b014e12ccc1cc902b28bd5a9d5263ac2 -a47b38f37f0c9b279418b1bb81b288d0312667dfeb0aff86b8072c2bbdc79835 -f6a04d34c0825caef54293348bd6c672ba2ace4d7d3fa604faacba1a42dfe02c -0150abaf33d0a6582071af6b15929a4857cd57048c9e32b04237ba047a2e2837 -a23da6917bf5912e2b1abaab68fa65891788a6c3b30ced2fb907e603a7654c27 -976d2fffbad1538395c05cf876bb3b64198e0a1b94f40d748c03373736018466 -6a9a9e53e0a159ac7a5890bcc18cab7172dedf4b8fdea3544184b0032edee0f4 -6429cd0451949277013d89dc6bbb23566cb158489d168a341271aa99618de261 -9580e6ebc094ebc5d7122fac0cc95021df41feffbf34ed59dee7556ecad36d75 -12b96ace5f81203e47d9e3b9698163a175767762fe2278648d0823b7a41e8730 -16fea5eaf17effef6b2c537b2727de3ab71987b49f9bed16fd8aaa06e5580643 -c2514bda11e7fb68f310bdded37ff6e6fd67b04c83fb8ef288da520954f0c2e4 -ee463de5ce7bcbdfa5403a4de7c64a7d9807dc7fc21678fcbee60d8b2bfa59bb -c8303d7f060c0a2182f6779a386fd82b9b44550a03d98cfc0095524a7308cf6a -e0c2c366b8bba56ccc354f3319a888e1483595b28f38868231631d25f50743f5 -07d08da61232da0353fe9fef9bee08c93e66b4cde93369efa538d03dcae19d88 -1fffcbd05c767b97fdf225685d18d7076b2b9b788404b79715b18655bf816f57 -2d96ea5f0d6ec848b399d0629c5775e5edde2a79a3dc6bb189506fcf65ff104b -389ccf9387a3d6d243e4c83a5d78e9ee659b8e47b54559c80e15e1d9b3fdf838 -565e0ec14404dbfb5da05ebd0c3cc925f2a0be3ba741b9dfdc0531c2d35985ff -89268541bbc6e4ecc13a50d937cead6b3a9863f85a8c1870838f4abd35494e28 -92248f65c7d3c452f6f743a345087661c3f5e8f09cc6854e7f2d6b5c9461c0f8 -3170337fb694d91478be1ccefe270f28e1c8ce48ffd25ed2dc83c070289405ce -533af0bd4aa922d8d3b9220edc5b2fe6fadeeb81dfd270ee469b434f44622223 -307e041823e65f762048d028c2b66c306422102c19e3eb113b6f613759b68d15 -9ed5665ab83a1fd1e8d45f0de9c187db9f0f7d145c3bc457b5ac065a0bf447d4 -2f92b61a915f4dc8c03757eaf6cc115c87cf2aba456e01834a0e283347d487b5 -0e9bf1ef39ff7ce6505d1be0e20f425943cbbb4c188a359348d67c0247da0c3e -3116f9a961e616894a704f192f550ed25503bf14c828ab8bf3211ce02689ba55 -49b2237fb5861f7fd2003d4c82a15ac10f5e1325928aeff9169fcf585334f62c -571057f3e5d5bf3ebbbac63110353fcb05a533af4199d0abf922653efecb2177 -5fe358df229a5daac3ebede23bb469173a33ada03cb2afbe309195dbcfe08cf5 -472f9979956828289448a9781ff3b8a4a3f375a57ccc6d1ed120ac150b1b4ad0 -5d76760c330d85616e88801050c93c9e44dde990a8d1867ecdcea7700b6ad389 -010a5f0b846c2fbc7e4c4b2daaf0fc6443004d6993fbf3990f78d69350bdec37 -66b9f8d3659fb44cc7917208072d1cdc3618044e0706804aadbfd6e6823e197e -e8dcbeac8f6ae996260f5d75279b3d1508ba47b61759dbc1dfe41cc229ff0f5a -a3ff10b0e1ab34e1b29fc95f245b69d61f8ccd5835937b8cf2afda032bd85635 -9448b70d736946734ecacdfc0652cd5fc7653b3fd367c4c5d9c7f7ae1be27671 -8bf62030e55fed95b073eb8b805088eda02d726e2f9416eb02ef7ed5ee19b57f -f196b0ce036cee614680585d911a289a4953b5288dbadd44e2e6c1e406836a6f -cab530c36ddfcef4a58922f96cdb00a41929cc98dc77c52dc6c7e9d83b188a88 -1c8a16de3557f9bd5b23e03d5c9cd00f921a1e7f7c520b6c55205ab0dfc8caa7 -6f6d7aa1e2c4819e4d19af8bd07aebb63e716d0a4fefbd0c9600e5c5a9857ff8 -a637e2da191cc7bb8b1a09f4f4d1ebad7549b7b2d41d74cc991cb0ef99fc1bd7 -b3575dc3003914643d277f88131facc8b58b3bdcc55dcbc372de6e3104a92609 -09d9fe9c16e18ddb44a481438ca22330c7d6b7a4eedda79f01bf19c266ec672f -99fd1f26d55faa7c485af35609a799918dce99225bc28a60256f5d393d488bc8 -660af7a2651391bfb765a8e7993a8701dec9254c983682fbcd136b4774ee2c41 -bb2e1c64a6371db80c433e8b0c14658ce0ae511bef8da3ab0d10d4aec7d9545b -90881504302bcb086528834bee3a0c744092067de2205a7d773a5b1882d6094b -9f32b36d94033259881aaf60c7ea2eb496ff2bf705aeb576a41170461fd95e2c -0c4a65ba15357e7ef123f8a749b89583e037e1e9e2ea2d8f435bce1627cbe529 -7183f4634de4d321d6b63d939abd38085a1d1ecd916fceb8dccac6798b358449 -ae06c3f7dc948b9f32346a3f492db2b894605f0d33bf2ad98445afcb05b6be5c -2f38338c78b40cc533b4d7dea2b9760f48a5822ce3776e87a8748f81c84ee7d3 -d43971f8d572904da8b6e1f2f20f95bb2c31a4febdf195973dbb2b8399883d9d -7edd05e710d4161fa96e30244dea9c2dae7ed30e36058bf077f060067c3c6331 -b26d7e358cf3efbd5dd8820d0f383071fd7c8f29886e7fa098a9521eeb557af5 -d275f95ccd75f593e97aa2a1d7463ed69ca8b87e3ca8359861cdf24ff3a01955 -befe00289476891a2db20b0c808ccd590598c4486d00a53ae66acea05e921f91 -b6b8410bb4708bf580998f9e08df92798f3da75b1ba7e380d4e3a5efac7424a1 -83bd2adcfd45d84a0495cb2cf6f647ed38042d03ebc57cc7fb01c9b6eb809815 -aaff355c0048fd1456bb3b666d69b61e62e5f8764d8fb8cbe568ffab07b2b20a -dd75e6e8afc57cdd6a368b35903177c16db14c14f861eb4318e158caa7615743 -c847e066be616524248056f1f1323cb75f976f3c45db703df818eb011499049a -3795c81add7bdb60c942fc7dc78cc0644a6cbffee86744af3127d021b0db7cad -29745fed8dcc7c814da5085ffb6537dc87b2b10c0d739ec72037060d77d03479 -80b7c1c66f33594dcb8fab64cb6a7595bf4321074e177b613d8ff0d6b3165734 -ef7ba807198398cbfa82b5c22268966bf1c6efcb763bda2771370fe353d5f74e -39b97d0007c8f07cd4ec408d5fd8e0b91898da51c5995f1bf401201f3d990741 -a413a1873c0630b02461dbe7eefc315718b935819245a3e4ed6f7245205b0260 -2ba4e3fbd10e9e9a6d795b7e5faeeb4bb327f8e2bf6288afa17b33febc30da26 -339646fde4bc2052156bb105b6495ebb1f109772fc0cf4e74d04fc343e59455d -f66e127b01af76306f1eefb66cdde33513c9cd8cfde5191a30a611fc740c7778 -a8ec6ed6ab7294afdc13c647b5beb50d055f1713d94f8f4c34198de9e7d69140 -4a6ac35aee04add4622ee052dc6e5ac069ca16f44699d6dd1135b167daef2640 -6354b17dd0065b0667167a32152e0a1bfabcc906d6a83f57322b6aaeb665739b -0a129704c95439feae80813d4e016707e58501284f589bcfefb24f2d4f4a64f6 -8f498156b4b33739c6d709353b297803d5e2be86d22a8537ecd6f22eae4a9a08 -8675186ed6b6f04bf4ebf656f62c93b707b488177b56c671218c0ecfc7c331e5 -ebf4d7d19e24e3874722d2ec41850586bed01c51501cdafb58f62da3bacf1e5f -fbe991ae47504f4cff536cd07c27ea98c7874d0332184e8e9ec489a8b88cf4da -3aab2cbf5fce08fce1aac46f7be72bfd13b2e68247c6dbc126e94b6c223b65b8 -e10e023b083a73ba7116097cc30b32619e0337e0234231d125c615edab87a076 -11dedf515e1015422838455580e1ee2332f79b66e0b187045fc80b02a42b5864 -ca8f5ec65bcd6740cac58c1bef50462dab2b0148c1f38ece89fbdc8fa08aa8c2 -6bb7f7c2760f88e4b56e3ead341f6696544fc6735122c136ebab68afa8dadb4f -54c6fc0166bf56990d9b28d0fa8d843f1c971029a46665c1e5b7bcd2b9d794cd -ef19e52d4a154e0d537d14c4bf0feb4ee4f289cae0c86cc82fbac3b43102c28c -b5f6a82948da4c51fcf85d95a91a5a60806815f04c7175f695e1af5270f961ca -bf7ca7376887489e598d4014b2bcfb9f4a745a14f577ccb2f402be279fda4d02 -3f464004998682716083496d4112ed9ec7351d81bd4729511a96f001d119e714 -7641307abad87eef8cb42bb7ddd62f61eee2a3944a834039a5456d3324c53c4e -7b44016242baa784eba34a2ca7556dedad425bdefc04f11aab77263b508ac9b4 -4f372af561266420f852b0f288c5a8d08cb682b47bcd0f8c738370c48ff9dc51 -17e8551a946b9b0d0b441e8353e15214cb669f5a696b50a23a4092b65d3fdec6 -f174fd8b2d51b22cefac51cd5fc7653b3fd367dbf0aad2f94172a50a1bc5c236 -103d08e2aca1b465cdbd6441a8b9f05b2e998d330ae453cb4d2ecebd069ea9ea -10a0652dc518141e6bf674282bd3ac1aaf7361513a945163bbfd249effeba765 -38c41e708a6e765fe6b7fde08d192ae7e1e4a12e61ced834f873f89bd13934db -828fe9925e412e687fd5b99ce4f0fadd5d20a2d5d2c083b98d7e85655df6dcb7 -f488d3bafc7e1cf88a8ddac3e33b3f38c1da0bca42f052f379bf663f7ddd047f -227dc4461713cf88d27780480ef4154c1cda2c40ef944a86aa053375d9504107 -4149481e9f6d061b6cf70d533ea7f4df16075c1cb2d84fe52ea967b85adee81d -976e3b5cc75fa41286cefd804fd3b471c74e973e3961346a3b6473390660492f -1e602e7f27c38f282c7d398013f133812a6e8d2d20c45f8c31c8dd26e53ac22c -5581ab149190010f6e3213f77da2662dbe1919d79a23aa976d23183074171102 -9dc5311c96a7dcd36bf4e60780ba68f44292b23c6301bfe39defe3f420306b6f -c94a224e43638aaa1d3ddcaf6d4976dc33831d413f691ad7867feebf53ff31e9 -05a6f084f525873c6e1a7eaf956f8c1f9728f88303c6cb14b6f79fd730febac7 -1552d5a8e5f4b8e0bcb10efbf8a49ca6f470ef4ba8fc2b5b05d0e2077ff12202 -bf480f21c47ef74592b6f8a25ed1bdec3a87a3afca117fd40ce5fd5700cc0b62 -5f29828d7dc95812d142e1967b748961b343cb96408146a6aee63d8cb82e0984 -1073d3085e5db40b230814bf4a2fe816891d33003db3cd0a585c1dd306042423 -a212af55353f1e915436137cb6ef0823dc1f14746d0de7425e036cfb6722a890 -3e5260dec6a7dafd44c995c215d6a917075a3c8220884be62c0660b833b658a8 -74f9af8d280d67bcaa96429d4882427c81b38570c66d0e309628d8d7cc28c442 -2511210838a12cde39af4eca0423e5b040c52124b5c549774e207401ffe8a771 -08192fcbbfb5a127c24241c8d3e0bd8a70456ae850725fc1dc1b2d5c2d1acb49 -71fcdcd33e027a562c0ab202e73bb3e701d4f675fc4e301a710bfcef00da6ff0 -926112665593322dfac72485b8eddfaf4cc449154c53c4403eed5332f38c7498 -9851e9e056c6b8cf9fb7079b48420f04cd54cc12d505f13f111df1a51672447a -71defa3128cbd7ccd50afa388170bc80162228c1ab8b8b98ab9bcfb0d49686f9 -2fef95de610905562e92665992fc6fc31c2a0e9ec7fc06bd22addc740e02bb02 -d08cff9cdd111cf41b91a7e4d8f38d88d8cbb7dcd4120fbb76f69a24a773f32e -a1f63f906a92a16861db77523c55cfbfee0e96b00e1f93dd20d154343ee774e0 -1fdb1be91c43a7d690a557dcd5f75fc2bb0e3e18286dd8e1e23412fd61fd79ad -602259e90d0e5a2894a29eda1c096289766160e356931015f1ccda0a56f3f2a9 -d9c2e495157514e1b03768d8190619e0bd113afcf91f67de3ec80a09281107b6 -b2af3e22a970ddc8a28c61140b102d990392c923a50e55971f6751287aef256e -f1c4540af2b1d7754b16fec88e3ecaedb6b713ba39fe835b27cd7fc8c132a740 -46702a4b9737dc04b12310ba7f30ad94de90c4cc2c0e174c5a119d14ba6488a6 -a1134a68ec0ea009c0caef6c0b1edbfcac670162a1b3235757ad4dc4b0ef153e -a4c396a809c8ad3945607752dc6ecd49348d9100c3029da91cdd15852d80cff2 -dddce3e7e2818294a4113ce0bb2e4d930b1069156c346c2eef80e8441084fa66 -7ed142e5f9414f02a362992ad52055fb82d627dd481405966836efb51f858f8b -6104fe5d335427b528c2a83512fc056de5f0590945e84d9da75012e2382cc99d -cd957c861f43582d982411c74d62c0ba1320d0e069cdf1ad193a4afdae8b0b3e -8bc1179ed8b02e0acf0591edd39971dc36698a884f750694b57bcd28ffa1848b -621f22b1a5c9b85498caa13e82aa9573695d3e1ddd2c408123494d46e671b50f -5314e92a073fc52522f6492de090208493f1581017e05d7f8bcda9cd8cb62cf8 -2cfa57390a3e27ea3a15014a00c9b6189bc82996f2823b1f7b6c932ae9d44cd2 -351af96c918294e743f054f1cd71f1287e7d0dd8908e573c3113734c091cd343 -95647aea885cd9df1211028b13f99591f653f69df2bc629297ec1c273ff6c446 -a7d6bc6579118915705baad148ce2d8d0f032ab0ce4608d3f2c19ec255df6b86 -c88700d11dfc2953b60391c5c4eafab97fb6fc87c467f25db92c05ac2aec8ab9 -f4f624b08f92522739d920f7e07eb4d32807990a1f03dd323c5b5d2b4b5af128 -c18cf5270e0cfbb3744fbe8041d7ffebbaea8bbc7b851f6e34e7abe48cfa8b72 -00ba0034a95bec468ca2f49f7f34fb3a441936128fe1d842380aee63867b2ec7 -38963bd51781d14bb5971e156e6fb64b2ac5fd5fb3c1c1569a6081ba0f98d8c7 -7736a52aa2313dece258c0b9e2cc3c8547fcdf0ecaf7c704cb646eb9b00b0d29 -4ff444b03c4d041667206d44adf45890b1672eed8cd460c32b8cb37e21be14c6 -0852be32de9002618df604770ffadf5cfc05857966bccb01edd59906bbf4faca -52a14c2e1f0857cf039a4a82474f03dafd54b8c163882ba77436820fec657082 -45bb02be9e7fcad3cc9ffbd119ab53982acb49e7c74fa8fcd92b2b0dee92eb87 -fc7f8bde3000b42656b338078c2ae8f58eb616fdf447c06ca70048b2f5ae25c5 -123655dd45b546277bd35b63a1308ca47cf4d8917c4bbde2b8a07855a0628c7e -eb5bef472819729b3878168096a81bf7dcdd59df236fabfcb0c95c86ad80800f -c2f69fc835544ea36403ff2cf0f3bc8127bc2eb5abacaee987b76e202c8de7d9 -954fdfb49cad1a5e9dd6e5b943d9b3477acb63cc884168cdda0961b483c20b73 -2f7012e980d1c6a353134e2ab65b8f93b6c6929ba78287c215daf08f480b786c -45b5ee6df0b2b030fa7a27e39268c1526759aa0e095606d2de48f0e7ead25596 -09eae59437b3621716a4892a241d8fa957bb65db783ce120cbd1e6bd83b8a26f -579f062654e17f8e35159212f7b1b7788934279c0315b9a603b3008cfb1393d0 -edd53889e22df7108a6cb6e2732f9edb9ea792e00469f192a288ca6fe995c7f9 -e3b321efa32329d3b1f0d467e49aa584000810c5b547149295a7676ff1e4cd89 -d8d6da7e117e8cfd0877e8d7ad0869b15e69da45fe038ba3d62ae756bec8802e -e27ead377a333d62377718b523658dce2f8669a67a70585fc50549b52ec5289d -22dd47a8892152cde34423e671a3820089f4f3b4007759dd686bbce52c7c9fde -61585a41e1e74d33d72e052708b3163d62ca2e89fd981b595b3840c94afc7b5a -3148be452208a894dab2becf9820d8e7769ec43d9635aa867edc4453e7d03b4d -f0e4b89b4b6a3297cfbcdb97b158e46503f38c9543c49d81a41665228c07c28c -33965bb4fbdf8fe213bba119605114bf07c4de83aca1eeaddea3345caec6ef41 -ea7bc93bab21a2948eb3808f467090058fd08f00510ff600658fa971d1f66e54 -7ad1965a174786e4d92e059fb6769e965b1147f4048648fe82ec51b13bc56c71 -229b19829abcc1ffa85a051c413245bacfe48d720fbf8d4496c05d7b5f45572e -6190fdc37301f6cbdc44031c1e97cf47f9c5b9ebec8f79c8bf8157c5fd861ca6 -4a5d258d12a8e48f7c9ed901fdc289b53641d5cd5e63310a8be495b1104a96ea -664da883db4d8b8dd8ab1dfcdc10d771d37562edaa793cc9019389d060709efd -18d78bcb6d3719a0ee0a5316f9f40fa503d9707a6d6abd1cced61dbfccb06be6 -714985a9ca63809cbba77857712c2381c569207cf9db2699dc0aa6b7f5565043 -816bdeb09e29be611cc336c31e84302245c9ed37231a7b92d711742c640d06ce -e484024b5335dbd0387548b2b71655e83cad37abc1496e1cf9d8fe792fde96a3 -bb684ca9fed1bd75d9bf50b06d58bc2929de047f96f003302fa2872ad8be3e0b -68873f143abdfa4a73702f481ec4e32018581f19ff862c93fdba310f5914a242 -30a24df9f56ee75d274c9d5cdeeecd61618c14a3c2d36ae5167b04312e7a7797 -0267e2df6837256f0cad7af1b5e29386fb384a8ec2a3a116e026bd2e48fdbc5a -90d503e2f3c5919c715724b234b71349ccc9dbee51808884d39a8b1ffa448488 -504b67e245eb403221348735723197708a564298581b5d75384b13ba92a7e25a -5c40792e86d3401f9fab4a41762d95982365f6408f9683877402ce4e98e4a00c -c3178e104c0857719ac4cfd53d07c219eb60e66d463708e3ed65cb4280285c2e -723673836995e18aef5a9a503d7e89aa2ce4e17c33a1214df21ef551d68c3066 -64583dfd9664e09acecee772d6a70a23f3840ecdf6a671dd7870e1fa9f261e79 -6048168a73a20c53a971656d47a0ecdf7e7c5cad76073335ccdc14477746c675 -e2628951ee83c402f7a0b581af8ee6a594923a375d18c98a2dd01d3d5eb8f71e -657bd49e5b0c4f4cc0a62ffbe13f10cbca8bc2b631d21b43827a5c3ee7548ed2 -baee96c94af70cadccd81dd3a48c7190b0630a0c7ce48249b91d92a1bfd06ba3 -123f97326e31c195fd1771fe71abf66fe3fcea8b285d6a1d4cb55b9de4699b0e -c55bf2f5d6c245f41cd933a4ce3eda258cb90e401c6075a02757e36717c8f547 -4b4e9f3a8c2d172b5d380dbb9e5cf8dbbd8b2d8cfd014a5011b9069cc00b7dba -21b4d17f44a55ef1e5c49ae01d91ab509c3313f2b0a8461194bb89fec131a396 -4e58fceb5677baa816bfb9e15a5121b3f0649562f920ddc302a949268741a677 -4e8c2fcd11288f6705250232d4de4caa56a8e8219dcb805ed08722a674d94491 -ee9f530d2eb8e07173f86912f0e585e0051cdb190e4d0040f9da037f29890068 -4e4d5577f67a9359e6f86b690ed5e6d3e772f7817edc2867dcd6d11dbd59b9ed -904a57f2c5dbaedc298dc4f2bffd42a93e77925e00b4d74460c68196f0326f39 -f1ba9059cdee88c8a5377b623fe791c7eaaaf6ee2454ec3f681bf42600a97acf -bba69df07157f26b64a642849a3da66f0e458fa885255699024771c0e448e620 -c3a2607b32cedb6e0b72a5a5dddb10981c3cefe08ed3921c4d0ff87c18cea04c -16bde8148e530979c140973c68ae56da99048448c6041f1e15d162163c46f7f0 -5f9bd3ec2c7b2012d6f3c29eb76abfb56641774cf6b6bf17ba63b7dc94efd7f0 -c5412d1448ae3a093cce169908469e6ce06971d89a547f25d5479fbce1b89278 -2440339e904500a9446ed22e000a9213858c097896a83f008b180d942e397804 -a669da5d731b2b29c3af90d009e4d5fc9885e9a446a8e4c7d1e4f2e64629d829 -444da50342173a10deee11630aa33d865c532f39cad6326674ec49a348a02da9 -966cf4f77692ec51253f5dbc8650e28992673c97a8bb57ae2b2a1331644d3de2 -0236f8cf1c3f071fa6bb2bbda641410c39585a57895988e5d653daa8558d797a -87d8ad98fdd07477a82c09076c6d5b8c2b6da0c3f4b916149bfae6ab3e47b977 -9c00f9e01cefe0e56a3dc2820a78bac7ce577e4e3e9b30724ca1ae980bf5320a -41f38e2fea835dd1b7f8f252ec7052793b34314e0faa27ab4edc58ce25feaef4 -011cda00461160b772ac3dbb072cb3bb02b27f33ac2b9873a8131954a4abcffe -1ff1b3acbb237877ef0faebe4ba87e886a217d62a86fff64119cb68a54ea16e4 -6042eb0ac3194be279f6662a3bc1f6d46aad795274df8c5810832a8a7b442a4b -acdef42384bd3c25765321fa46f000e330d01a4d63cd71f11bf2cccecbc0916d -3a78816f519b6ab5e58cae3543236eea83678c61c3bf8da0db91f4f9553565a1 -ef7cada3a2eaf42bdad0fb7702dbf84ccaee6e01b97b2acec60a47cf19f42871 -c4255eae175c0265ce822ba301bbf495104a995014cd9456e73d2ec34d417402 -38c08c6c296cca1ca3b6591e3bb34ed9aa0061b1309444c29f544bdc8b22083e -f8a1975c3b20d6d5ca9c351c26334eea4dd8b8a94f33e6195c1a80d6e37bd2e8 -4122ec755d4c52614af9dd42d9741e365b019654bfadfc69a90e2ef9b84957fc -6d546f6d8d8f75f7dcf53ac4f597cb302ff298fd67a72ec5fd2d2e480e239060 -d6c242f3101f449fb1c394a0e5aab4e2c045506d3839f811d173c0564fcd1657 -f668ba835451a95dee465ae2ea790afe0e9538a6da482e3c9dfd134366ebe8ef -d446d7daa9c05da01815985a2a5f2c3ec1f0a7a929717d234e3e2eb26a5552dc -3577e7aa7bb1ca1ca6c3b36503d08f079892a2e797a54def5681eee1f9a3577c -40e7ca2fc5dea406e54890bab23732e6384a647926d8e072de0bd636f1c75e51 -952c8aa250389079d6b04490e372b4218613ab658ac1c77ea9a1ab429277b778 -6ea8dde78ffb71bc0bc4dfd9ff7e1a6b2ef19a12276f3ce7d4a5b281401af046 -f8b6c6548bda69192ca355cf43bf1175b033f01e1bf61ef403053a79288671ba -85dfda331ad1fdcd203e875047c740c42bb12304c4a18a407bc99a2c13a87c60 -645b158b0513a90049845a03cf574e1496acd0f2fb0f914e011b103533e61aa0 -1ac25bcfadd456f33b64000440c1e935fc1681e9fb6685786b72c909055e4f40 -b70afc227ac5f2dc1e3e58363547223cd835d369351f36cf698120403c53e4e5 -a16b756600bf0a37d1965a2ea457df75e07f3021023072b12aa7f3d9e8dd010b -2dfa92b24d7375b7ba1290060b5b5c9f1537dd0969cf9a7701fda9f9a96359c6 -ccc15f736f5d2479824e8488f6aba11b3d25187a9337effa41ae611da4e35763 -f60ab26fc896697bddca64b70300f09a104d041ea41c4dff6f33861b8ce4f45d -98fe08b1626cd9e60a4453597e2fc3287d9790296da5087c25ae7b85be898583 -ba29d25a59c776bc93fef8f3059e77827449056c2e55a4772385354bfdd19284 -7a02b8d0d5ab6b34ad9968d68c1641a4ccb2c03e5253f1aac444c1afcca8c94b -934806c61442f810a7c53f06db5b23d0b017a72afb5be70287eedd1e0289ad87 -43965dae9770a18faa7944cad4c638eb8d918558aec3a0a695765172d5c834c2 -13e680fc79d9566fc3b47601c706c2609892dc9d1650465703ee6c2f7eeadf92 -809cd4831e47a0188c633102019b6425cb76403f967af48976a2737504060649 -954c118f616bae1de9cb94ed75f6a3dff1ce4954dd298ce8b5007d1e182a7e6c -e0c6873f582d21cbc2f0638d4a7b2679ae58bb54c7f8a1bc1c3e9eafbbe909c6 -40ac2bba74aeed432242720e473163091cf6fbfec4d44095434600789d7d795b -e5ae5500584e8e637daf9a7ac458532f3e44320be7ce7aa1f106b6420e67a96f -459c23b7b02404c1b7620742766142545551de23fa8ca655c1579fb2c0a10e93 -1c220e584e9fc86eca3aab882f3881c530ff92dae83340193d5aa93bc857671d -ca3fb1f03534ef6ab4cab64e29c02a5c37e19d1274618211f2e7493a4a7045b5 -3d39adcc8de68bc7f2265914218d2d69abd7c49bc9237535b4d364cd67bbbe35 -f13f71b88e83e3bd6f09caf327c629cbc2b8ee728daa1626795c2995c7919a2a -e966108bc76de252e4df625e95338332b6aba850f0fe97fdf247e85db1fa4a8f -3d307543c80426061ff86b4ef8d26997baaed5679cf430bc88ce20e31cf510e6 -987be01e58a170bfc8a6259f113cdd3541fac41467a862acb3de36fb60f72de3 -e0cb8a02e17ea8cd2eea27aba315fc34795ab06dcabf5ffd1b83e2308b2a21c7 -72cb356f98a7d2d0f0cfcf69d672aaf7fbe6198344aadd2ec28f593c7332b0f6 -1809ef49d7c19bcb6c065ec2d890d4c8a172e061f47ef2cc392e974d1874278e -250453cfbbe55c77a0715475a7cb383a287cb83f5a14fd027c332f79a09cfcfb -2c7546c8aa601d925ef6b72a2f1ac1df26505bcc8229a4aa0c7167b9d7c56508 -901efdc77754cdc396482d17a6e9fcd200a0cf35f67948d11beec6d38794a826 -7c48da337fd191705e26eed2981df5ac1e8f4bb23952b9eb6f92cef4139e1884 -bff9f37257cced07790b6ec333d66a6800d8c8befb1d6362786b3ed00ccd233d -80e8c4fbec37dc7dcde3e5ff2b8a81596dd10b714d9697419ecc542a661be66e -a5082e50ab273dbae50d60ba68273be1adc6f750ba2115af58ce22e8e10443e7 -2048d5b248294cf81e9e1995dffa731795817c556133b714d4970b379b310698 -d4f690f2d799153b8890e74dfb72a5a50c476be90cd65157b82fe6b42c5f1be4 -3d5cb0c00ccc62f270ba879311467dcfe9fb62aec22c5d4872f6b02b8a8442d9 -d309722c4d30047232cd0c97049695a2cd80478ef3845f6d1005f36730c41429 -0576753e869c83d458f0dc3f42f68264e020270889c63218df8e1a8ee73488f6 -49ff10926847ac73be9e89879157cf78af203a66ac491eb93ba365b8891dbb8a -bf8a4403b36e0334beea6749cc202ab18dcd07028f2f6b29b0eb5865a3748aaa -c60575212f532b4cd4c9dfdf00aedf6cfe6703ec89b63950a1011785f6dc9c78 -d09280ba67eb5a78f9bfb797add8d7b705ac5ac61a16fbdedfc1ae720f9a4ca3 -4cd9828c287b680c24f11bad00b644beb9f6196dbaec8ba231de2d065bd7f42c -d731e09725adc7213bb1f5e675bc11aadaa56da37f62ede33a390d43f42a795a -0a5df034adca9ecd0e3132453aba99fdf4ae8cc2a7600e4aa10db1db113674f5 -10b2427b1dcb424623a259cca49ed14c97f0613edeb93f459fe9b9cb75b4f308 -15f5c65f839208a6f25652c8f63196ebc83c081c4739a692bf14ee8ee54ec4ce -72a35bf84d5f4e6c0015a4443e7f799b7bc6828e30a97687a0e5b8b722fc69ab -5baa477d07bbe2ef09a4fb7f05db2e02923bc8582f27693a5ce2b473ca02a815 -9c0789ef683ad4c7d8708dd28c408a21e358fa2c30cc598bc36c5651917da2e0 -593e472b57d70c0d6854fa5422e8b3825a9e39b0a54b0634190c2aebff4913a9 -7534bc70e3e9b3458f272d24087e74a538764b43168e74108da00351ea558e3c -34bc8bdac1e1bc9061a688723bd54f0bd4ed7c165f32dec016b056b7cc566a4b -1c873e36ffdb7e29fb088782ce60524e2d75cacd23fc274e307dd1d2b07558a2 -7f64c4742eb3ba451c8ef3b6591d193d4a55a42fddc17f12ec3aaf51de8056d2 -80f09997bb31a07d6112a855dbf7062218dbe89a6844a006f23899f98624ff6c -6c364bf079c4b3c2f92cd79534f89925cfc55016218192a98cdf6cf4fe1b5fc6 -9540ea49643891db45a7a71cbb85f41035f507dbc6b161f7f1eada70e7905aea -0b1983f7909d5575e3e7e8095bf0f4978217b23f329f057f1152ffc14b9bad8e -cd6fff8598542a6adabc992ab3563f424d108d95abffe9977f09630ef4c6ba01 -90828d34098bb40bd230685153e7282671478138e578f608873d64b00eaf1339 -6dbfa02de3fa983735d90fe2d0cf7d28bd9f35a475a6f55017124a58988d00c8 -713745c7c999ea746bc969d31aa62eb0d722cab1e57cb0ee97cb969d1c3c1b41 -cced2d7ad87df16215f908e02a358b725eb5b234fd620f7f54d70f764eafe8a5 -de65e3e171c885eb012b3db1707c76724b62bb0c1a51be0b67179f96a46ea538 -17bd480e774c31fa131141e017ecd4c1864f62636127a4c7e9bdd05679462314 -042f0858441e3d261ded65833d91d80a6ce303de41060312e60527a3dd45404f -55c93a9535c3a393f1748609b002be9511d87af20c7bb2c4cfffe466df21b100 -e20172c8215855aec00e3680c7efc58128a95820085cbe598b9603c70638e128 -bf0c2ab7113eb95b62fd40fef845b1eb5414737cd94ac65970a4d6dc2726d2ed -2ba7567155154ad30301ee997a3bd52738dd17030860d3a479426c652cdc22b6 -2c70f185d812543f836c7d0253ebf8788cd6148ffc163699f72a85bd2600cd2a -72104cfae46c836939c5a8a6584a58022d0ffbbc1d1f035d959fe58013611cd5 -be08db068630e5a4c5fe915e20e5652bcdcc44f0ce93221ae09c55fd565c2523 -79189a85ccb93f2d6162402f2209df604f140799d7e0b34639149eb5e54c33c4 -05389d46c775ef19519f1ad4a6f63a62435c090d8e3bdcd6423f5b7dab32d263 -165c93dbfb1af542af08aa5ea25595b3d8ef053e19a16e5a1b13f437fcd2586e -4534aafbbfe1e76906e832c6d1d47a3c5c868e65afa7af2e21e54ce233170b0d -e44bf290c512ff3acc84f0e492c73a0d827d701bc9766abc4c08d12fee986020 -d06762d4a0163a976031bb13e7e86fdd3101b8d5155046ad9d82fc26496661d8 -8cc516350229461d6c11114c35a0d13a1c6ffcb96fdd56105d67bc5666512de9 -6aa15713998ad53064b7023f64dcbec8ecfee625ef76f5a024c92330585cd17f -1c3f82bbcb509d4d31b535cd5853d803ab7cf1862e8a87cc3d6557aeb7567ac7 -9ee04bfc8a445169afdd1b1375274fbb78ce431ffb9c6fd61a99a0bf1b41c19e -1ccd5dff38a45647d51fb014099c74ebb11c5a07050078507d45a1ff1fa2e178 -567f745448157bad850f1fdcf9a37afc8968120892ebc0f85f5dfce9116a7108 -b5cc34c5d85a91a65d18b9093fd27e9778ce26bd93644e4c20ffad131503b509 -850f4fb260edb6d8cd0bdcca4beb8a25ec1fa44eb5b31e9213d11d0a42d1aac0 -650e1ad3880d59d2256a2720081fa2a7482e3bf1e4f4afa59ec16b810c0c1cf3 -2cfc726205b285ad7cb21d7a59fbe526a844a5d75ab5d61a801701c2984b48f4 -ff020607f2ce9b468df2f74e04812262943d8932d2e3c0478afd42a8a04eb7eb -44f9dd70b1da28153f4f366df0fd25e89f942aef374fb9bd31d9575803c03e57 -50e5e75975f108b6c7bb770d824e5eb88d67dac4526d6e4df1c6fca0a5fce033 -84b06624e906912a26412b36cb177fa2dd18279591a0db289d18b1754461b97d -076631b5d598cb2741652bcbcb9804e1d01a8502b03739981b42e4754e21287f -ae2adecc9ab60a3ba753bf94d1b586c0f689309cddf12131eb442180c1c25b75 -05bae86b985d6975d1048d3da9ccac02bac3e6d8a2748082e252167809ec7b81 -7cd72fd364f27f9aa276cd5e70edf56cd5a0b9cd00b815411c766b67dfa424a5 -1d9a9c7e27cf57e513965379e180f1bb94b174bf827dcbdc89ffef77f5e2ffe3 -9f1dafdb747f003723dfdfc91af3c6c23619237e4f661de027809a510242ea85 -d9b93733b9276e37c01da481bf86fd040b2a21df21b3aebd8cb974925ac339cc -110b604531af29325b8d844305196e5e1366edbd5e6196ddfcfafb27e28b1adb -6c2a3fd16d904a1ffb4a998a4614cacc85157d8463f7cda5363f5f03b9141bbf -4788f8e92de9680f3fdea66415c9ce8295c8a1276fbb9b57e97f899caa8ccd60 -275e20ef7c0ea888cd60bae018ab8d59d4b9b0e9a19d71cdaa96392893a7284f -6d94291130edefb156dd9a7d172c89b881aa5dd8d1a4d9177640bcc8d308a801 -547a4fe7b75f04f99d529c854dc059641c7652132291dcd0deca5ae1044880d0 -4a82600f293dbce78d2dd503a4b20ea39f25633c216021b78cdeedf51fd73c9f -ff3b4e7b637e90de3838f8aa7e1703cbb6b5c74e1f0ef474c9ecfedd79d0b8a6 -1559407b87435fad2ca5ec36b170391fea7cde5824286f66bb0f2b14431d2481 -0fe6b2a6905c2ef0908bdd4b05a16c01c00b2eae7bf294251633e806ba08d21c -3e1823e8c0e9b6ff171c19f2d4b27f070389606d90ddbe0303133f565644c8ec -d9dac4daeeeb490b2dd2ffecc57d69daf3fd4ac8666adc318c245e14f5e67d44 -d8941a967696da623d22c077d7484bb1c9029bcf536aa060626df3d5593bd4b7 -af56296934d03d03c682426f00542ad5d3f9f8631e97eba46416979b6b2fd5f4 -4f19b0cc18d28d551fec3b3fc5440f3dd5a0d79fff8df917dd515f68eea2ed9b -73fe68e395c7fa2cfcbbffbb4a7cef13b875b96f5e805dd45a7c8d3e2eaae5a1 -34e00e26988281b159cd8f9d31a2f15246efd8d927e881a173487df644cc7656 -b847682c04542f35de33a7d638b5a2187a74f036ac693e4ad95142e8fd852899 -b8ffd2405f5d79af6fa919f2613c2f6f4fb729f5d6c3fc8ae921eb23a0827667 -11432b8e7ea4c6c823b57acb073fc00ae93223a0f893bb8e3ddcde28de69cec6 -5c0ab65d48799ab8d1c269ce7ce346d40256992947b609cf9d3da1d758ceb593 -1d6f05acddafc290e2b59a93bd94507be8a4d4d675dccca80891ee13846be24b -8cc4f7052c5de700c953319b29aa4b87ac3c85377ad31a14584ed6970928e850 -5819d527dfdb85e330a5cd47a60932ac93b359bc0921ca40703f8abea6ad6d63 -83f8d2660f8c8571c5a13d889437d12d6a41552d9c4afcdf2fbc2bde8055d681 -3b7be320d48247a34cbe1b84791d2c8e9c417777bab9869cafea2c522c59b12f -23cd59779cb58f047e0b81fe4d42d1f4433dae0ad691b9c26e8f82b5ab867ea6 -fcb2d7f2c0718610130ecb7ce93d1ec2eddd2cedf1458412dfed5f7f067c473e -aa0235862bac6f8c8408c0f61d978312fc1a671c292620bc863537d286a60a22 -03a2d5dbbb772b365b925b9a616ec398359425e3b935c7e833e572ca8ecddf98 -121a7bbbef3f8e262d4c08cab12d97f15776e7e202f493e2e12b87f2e421e5b7 -6e3db0ebae2f1e62239072e98391135f5ce4141cea6d7e7a19ec1236b81d1ea8 -0fde0b0f2fb4aad1fdde1a004ac235c896a8a5cb15a4806401727e7dbd148ec5 -8bbdadd754e31592c37a7207a82989e5405a7ac58067f07932acadb77de65c56 -92caff85e5c183181cfde88b045e596cfbca6b4e0d37e6b881bd3f081ccc4a04 -a6d576b41e277b1eccff69feeb5253bbd9a8e11b554e496a16f714ad3bd963f6 -b8425f07ca5de122de2717d09917f19ec3238fe557c44782caca0e4e52f38b5f -7c207b180b498a8fa04e66f6abee7d7e79fae9e54cf566803a885db7488506e3 -8727b5bd772198624051c64da3945da5e904788ec969dbb890f264e54e2c661a -9574347d34634550d5b1a1355f35140adbc07be4d5ca5c791cc8cc01c4b26875 -26d8937cfea55684de8165b792f7740044e50ba4c19677a30bd453419a7b8d46 -437f44d206dd8a871269c903d78bfaa35c4d1a054d0935afc44f048da40cdfdb -5c15cfe9c8f19cf87cb93a6594cd394c7f64fe21cb599985a69836ddbaf80410 -4848eb7252b523563b1c24e57d4966d1eb261e4c9c5ecdb8547e936506175440 -381020593bd8cbce659a7a345a4c05a9790df98ef2bddc9fe45f6968c49373d2 -d55cbdb4de22c4f7d53f8263843f8690baa842f6f1bc7cc1545f3e0a169633a4 -01e5656f08a48b17a69d7babea61d476ec62fe1395d1c01988926fb0e69326da -c69b5e5347167c0541f226d4d2d8ed2b4828ba74f3939a4b77dea31d881c7b70 -18e1c1b646c10a935807e6d3a9e6674aee575023f941a098d2df22af754b5296 -360777bd1a5b1a8fbb29ec9ad201dbe0170850ecde219ad290af01017f26b777 -56c14a5d3ebe7ab8560ddf0140924131cb0a693433437d4a17f33bb22e92503a -337de079b27ceea348d9218278870e1404f7733200e31de980e38ffc55268921 -200bb4a6bf116ffc94e5d68015c7b0957254589bbcfd6b0d7318e1983d18bb22 -982e598484b2c7c7ca5b08482cc0f23f74d1ca4baa5bc61d1fd9094b860edffc -44c5bba1d314b46d6c45a5a1ad97706893733a9eaab22bec79f4437a5917beed -f24271040da4386867c830621ffd6744ddfb078caf5cf59e7e7fa456eac5abba -dfea921d226d36cc6d03c73716badab60c4021630643824a81ae62a731d7d647 -69749ec4f34068330b11d2f9664f56ab8b8a91864a3a2d2680717a6f7ebf8785 -a18fababe5abf9b1e759573dad33c4a968505e887c7b0f9bdf65db75bc04c8e3 -f397740b94b07dd154a5523b19b87879f8f0466d8fc9f3acfee32fba47661417 -a6a97aa66eb83ab06a8347a76890bc83e6bbb6de46f007e7ddf4c316e904244c -214382939b4507a69a29fa3a60ad96e420d6873f0f28c8283fe85c59f9a5ec11 -0001740aad1de7f7bb72ab2b699492b5b6855c1bb78562caf497ef78ce8ac3fe -b5f05639785318ce1b7e9ece0f28d560dbda6d134ba8222d94fc98e1910eabb5 -b8ac30c4d0f2574f2e83f309293c3530ffa08d140c4b568e1868c7b5b3edc79d -716a5597bc45616e2f11b4caa3e248fb96d9e84afc205280fcd76842b913fdb0 -d22a1c741274af30fe94c29a2c690e4e32292220e58e31e815000aadd624fee2 -4d72625d57ebd75a24ead23e75889bf3fb35738516b3b77a6fddb6590ce59804 -6bc39e4e9ae32ecdccb0bf9490ce9c8cd23e997a63bbef088fdedfd9ea40f21c -4d89f264329c674689a8536d83e395b5c17e6714cb48fc72a4879e525a954048 -595ef80d4b03d92f12664b841e00220e3a2c7abd65457f95d1d6b53ac96e545c -25b8ac77d8549bf343fbd27700f1d5b344e965aed917c82211f723410c8260e5 -ec603111b03673922f118f1b41f1b436dc347909355467db3bf0dee4a7844c27 -5b15c9ffcdcf334ccde89fb61c58e42848582bd44e2833619b0ad907fdfaa8b6 -97a09f114e9e204db7e2319a41a5866eccc8665ef6d94a9abaf54a71760bcae3 -f253f7079fde5e138dfa210368707b963f0c4ad772d30e1b56b969d911192482 -e1c3484f52bcc8751b4c4a20430316d90adb8114ac02e8fa845dc66978cdf313 -4f1c58be8a9c2990a1dbf0c1151996d1eed8dbc6f35d4a0a5f44c22515575d32 -6772a70d00dd938360ef9940beec9ac9a9aa2143cc02c3c030fc6288ae783bf9 -e6c6a04cc0549e2e0108807b31acc0def31458a8b32096d5ec0ea1e9871db2b6 -35dba89e4b0cb6b965c48be61d891a0faeedc6ce4ff743bf826f524d4f313414 -9368b2da65c9c14546084d955e937ac3ebeb5823d90670e2480b29402d0db8c4 -31e12164912a5214b439d8546711a39648e652d68cddb4c4e28aec95cacdf5d5 -73a7141e0963422cd82cb1d4568ff99cd8cfc938614f13a5948add5d8914dc57 -ac6b916f4fc5fa6b0a42f35e7c2120b623c61a6b95e35ee2c6040654623d2e78 -f2009bc55a897e0373ec35427787370450bf03ee788482396b09dbe8e2ca8d19 -dbbd3d71115978044e3568b63fe15d56cc5b08767f5a72861b85262e8b194db3 -5e2bd58275c19de4a46f45b3ac0c297a9e1d8238cacdad6b8728fc1c3c7c980e -49e05424f7cb02991dafd70e277388591e3e34923415c383d62cb366dec6f2f5 -da863baefbece4000fc620227cd325071aef5e62dc3e4bfdbd4915c03e686d17 -371c75ae25ac8cbc6683a378f9f617d19725057d84531c89cb0bb686bf9e66e4 -844fc8d6ac46b4c309cc74a1a948bffdd1d5d663672ccd358c9ed2e21e72767c -16a968605b3c403d99b8bc2bd8d9fc41a1f30a692a1302943db69e5b9c69076c -51233bd6963cfa363b280b8499331c172abef2000c09ef43f04db75fd5502a77 -b0c1027c3fb29456f60b56d7e9983e8574b1e75032b8605a27a713be6e0106f5 -fc61ff596c600275a27a13140056fca17426d235e71cb6c4eaede2cac9529d0e -e0bbe303ef02bd6e4cf0446fc21d90079f91eab4484a9251bd956483113c5eab -36e7b8c94cd0dcd6c5c82a082d335665b37effc612bcb5793e7db4a831b51ba3 -2b44f1f9a10027a92cd92634c93167e88b0564498af080eb0e1f92bac9672986 -ceda766c4d674cf74a1124f9aba60cf8074b493bb28cc379485fc6d11f050dd0 -80a6fb444933008df47b50a0214bc210090f9a0cadff94f254e58af23ed76340 -34eba92a70693c7288a79477d7e9a6afbe342867ccbf6b44ee7c9adebde42793 -e4a59ef5953d031f33fe4f12652f26a74b958fe4ced8e6025289027340bb27aa -946ae6445d6c3f79147c67393cf739061c2417cf81c75f85be80c99c8f37331a -e6526df9d46a11c3c1fd15886f07ca08112fe60ee83cea46016d15f68e64bb48 -167cfce032d138f6c124ac0281f297439995583cb9825547be0017918dde64c0 -1d78776bee428f7534f80a3bac7005aaeb2ab9abc0b534be7563cb582d298390 -f47c2e5a6f0376e7312d6d0093bf017f64f6697b18b9ef831b2a29ac630f80dd -1d6cee9eba526f2eab63cd1a53d842f52e58df2815f07f166e7960a410726b4e -b4437978696e134d4cbc80a465744b872bbf340155d9789194a06e891d1a1f88 -7a74da8de0065d6bfe492d1326910624cc8f50405bd9510c27dab17e281b462f -7decb40932108ec5ad173e146a3258d88c43c9f30be963eefc7bfe130beaafd4 -98e339cafccb138f954576ad1a38c0f149aa852cb3f0354fde3c7949de59dcbd -a42a73f39348a8fa776c27b5e23dcb6d90adf52289f3c84d49c185fd5394f712 -0d2c35f112a99197484795467b3215ecc0d51a807fc77d76264c305cb61377b4 -97a0f1dbaf69c35529584a46de46f516fd4d1a8172360bb1e1d0d0c44e158511 -87b471d543e4884c6ae7cb6f5618cc584d1e978f744b3bee0269bbae4dd4718c -ba02513e332a6170d0ea4015dc74aec1ff63a35b13b2bb91233026504a8a328f -ac1e11c82fe34d6d24bd5753caf5f0d8b83c945add3e7b36cd0aed086bcd0e47 -3996dd6f821236d36324e3d387ca7bf1707e7de378286a5065e050dcbfad91d3 -5c82b436b4fdf3736b422c00c6728583539527b554ef64b1c2e6a9c1d17e35b1 -3c58226254ac2a47dd1223193b4e1649095013734c40aeaffbd7160679f8e801 -f18376260ee6e393deec9e0693b4e6b728e35de36b1f40a6683f7e34e6e086cc -9805432b4ccda429b0136dcb4115c56cb01fc85f333204e534fa17558f7fe48c -ad9a89128ca6c821b01864bbb67062d5286283ebc1c559e5668e11f469bc7e33 -ef69003732d1bd8f0b3f153bc22e8b99a3ca9669ebc50526461fe3baca5cfa6b -5f7962fbc8cf0372cc716062f29dc7728499c9861424ee92b094227303046fbf -54aa62766e8c9eec066901a8a54f395beadf01af8620298cff08f20a455416e2 -2247b637c6597a272f7b0a28d616a82e234e49b0ada3999073e77b58f11fd0aa -ef941d49f73e962e9ae57574d57fc46a6b3ba2547dfc9e9667c08ebc05c98fbf -02e2e43bffc8a244136206f481f0d584fba9db1ba41ef8a2e4c10227633aadb0 -846c79c5d7049648f50528b5ad34e449540418ae28b53c3e34ae0d8867ac3902 -9746aca8629d847851a6a13b21e2cd95acac4abca1ccbf5f955e6749656314d4 -5bfa890e77a9fcee0d7d67b9a34cb2a140954678555ee64f95aecb843d32b4a2 -281ea103839fd3860ac5de0de726d02341bbec556d8626fe39e3df189c3269a6 -b73d27881d4bc81c125a1cc26b0c6f28811d4f74bc8a757785053162f64ec819 -4b9bb8300b7184699ac7edaeb491f1f7bf236ce695a5ff56bf5c1f4390fb3c68 -68fbe2d542005635927e401e338b6bf6bfc12702ff8fc951a22fdab1d720faab -e66f16d85889d6a15586b2f53edbc5f907179169c2a8a22e747a12d1bba358e0 -b0fc014a1c42990e01d76268d311e05e4ce5948c42bfba4ce63f0b86e0cfde4b -4be316bb2cebd0e73e26f446ca8478bebc132a064ed117f1a02affff29dafafa -c4ecd8e8e32bf8128a62aae5e7f2d84e6b63435cf6d2bfdb918a5d28ef147547 -f9e569b09b50dbee423c1a7ee40355a1cbece709a13273cba0da2e3825c8a970 -8037c94de0e67d5ada84c0bfbf5b96c0741fa043868c402079df2ffe8b8eb03e -2492ea5a6338a5deb290315e26eaf43086655014ba9ffe48f4d19e172f9bedd1 -218e1164730a81bbc1391615488c5b66d2f4c66bf1bfb54e226df3893a4b5a48 -2f540f19560d9f7d3b32757582782aeaf607567e8f4f0a0a30f976dca0ba5206 -02488b0b7f41861a28247eaa84af240a91ee8a4292454f7c3c05ead6f814bcb7 -84b96a394e834cf5ef4dbef50ca3d287409b060f767758d95114a26b1613266b -6debb528e85d77deb7f3bcb8a572ea917bf39aca584c4f841ca622e6e06ff8f9 -e8970dd1c9510c1618d01e1af0baec26c3882b6eb80a7e8f945ad9abd60911e2 -6bcb6aaa5f0ce78068400f9eea67fcaccc763770ccdcf7477f32dcc49abb5566 -4e75f91acaea2a9141436861ecbc358628590b2adc5ac76f1971818a49383737 -9fd6fe8d74e76a367abb6f7b624568fc7a4e2132513fdb1e66e06b9f81067e91 -3d6d1e5d95e052d569e75164830c1cad1bc168213da1cd06de144f4c714b0e42 -34ad2f8037115ec2c1a8fa611ee4094accd1ac585bf7235b1f07b6e2b14111a7 -409fe76c1abfaca8a35436eec605e4b43760883b31c6ef176342f834647de59b -b54c16ffe522bb5d71f432a253b966587dbc5bdf85472472d9111b8a23c49285 -391771f0e037bcb24a5803b323a27f6f0aa96b46f1c23dd91cf899bb59b2beaf -6ba551cacfed10663e3e7c6e7dd856ee8a3aef30b0dbbc22aecf3b3a8ee10fe9 -873892898ceab62300309a4cbe779873fb3bc7784a159e02ecb484f2016af7c6 -bff8798c7f00bdf847a6fe0e317465343b4c1585d03f83f2aa56904148de6d90 -65999bb74ec61877d74bb895b7dbb977d88e55fde157d4e0176416b03044e895 -655fcd0d98ea455342ce0e27a1c71c9178fbecd2eb6c35666763a6558d297fa9 -9983a24384848911542f0fb3956c7c6761b7e2b8588354eeaac4aa145203dbc6 -2d3b319538af1da0602ec260085ce3256b9a0ce6be0208920dc49eb2954ad6cc -912846d093aa398ae77075faf578d0c86650318fd8bfb82341281507691449d2 -b498947c9ac0c46f7676e0ec94a1a7aeab00dafbe8b1a464bdc9b41137e0219e -9eeb5a8c72795c7bc34600c7325efac4f2cbf55aa9b4a996c42dbbfc0329a694 -7f9dd261330856fbc0819043b357343eaa1d3fcf362fbd0af9a99ad57c5cc4fd -a10dd10097941bec739ba978da465599d16b6be018bf7fa1ee3ffff04d35db7c -a7f6acf148a663f999280b36e51bd77763d6a6ef6ff28950a8d4b04590d8b51a -dcb555cc47d92b21ad032d31cd54ff911516f356127e38f2fa9108aff32d2e5b -1f1452901c38cccfc8f23122f4680bc316785e012f61d2ddb468cfa55ac91998 -93a8ee273eec61e760ac5097167994cb9f52e62182fa0845b2fa6779c914047b -41d1a35ff4c499474ac5c277aedc0ee957400fb6643a0437f7f6eace0f512ed9 -3a33686f28bbc8ec68aca9a2bdeb407e975a8524ec3c068bc0a63ac6779cd84e -1d46c983fac8c89073669d02af734fbfddec35e195c1444c4ca678835a54b0f3 -f8a0aba3f3b5db7cefb364f491cd80110b6333f061613b5bcb834a3ceb20d95e -8119457df0838105bc9998b41067b9ce9612825cdf10a56c7b3af464fc4bd133 -a9d9b14bbad06ac3598419ce3537fcb383ce9f650bcec756592bee0205e0ab71 -77b172fc8c15425359e43af5aa75959561e3b0e6ed08ded9da737f3181218d1a -1be1044211e9d9fc86f23f48ea8dabeae2de9ee4ebca14a734dfffe643c55875 -e934dc377f170ef8fd4e83b1ea53026cf1343dfff18fdf667bfdcf21f82a5a3d -d40d34e7c3090e76c1dfc01aa0194721d9a0a3783dda58edcdd65a497718a66f -658a3c0dc104bc44b36a4372794702baadb0f7cb1594598414d5eaf0369405e8 -9726efdc14ce04bfea94bb1935c4d07587400eaa1d565714a33891f3e64c1d25 -fa527eea2ef14dad353c11733d6b0189dbf7c910601528d5bae1f98c01c6a347 -47b9c484e09e03e10e13b5be1d22ab7b8906c5e41a0b2ebacbf640e187468ce8 -af86b096de62d206bbc54492431b8728c55249aa887c01a82219e62e17b62eac -82a7e09b484eca291295f575593607af6373ad85c692e7130a4b652ae5a706f1 -2457875d6098e477354eb52010424e6ecb1b69447261fd1b1f93e72de04e3f31 -7dd7313d7bcd5afcfff4e0f02f7e2dafe2f476810450fa2cf4daae1f85150f6b -df4e5e7ca6533523dbe78054c7bdf73b04c4b562fc75fd6f6e2f9285410fb08c -7bade37df9910ded1d21f0543b24ccf0c1c984a4d7811b8dab97ea56a14e9028 -999c9f71c8ee8fbcf78da616194678da5311ad63acafee762fc268fc2bf79881 -60f1a3a61ec3467956f15085c1808c8187ac5c5cc91b9165bbd978dd45d2c100 -de3fd8533581beb1864ad04e7dd74a016dd77520d2739a1d3e9524c8498bdf6a -d7e9e0571c5108c7c7870dd240ca2a53e30353d7bf39bf075d3839681c1f8eb4 -b289720980a1d3ee6c5bc7349bfc37345b1ad0d770bb12819d72834cbe2670a2 -7129cb9f51973694153d80309e5a4f6f3a0476025074c15b091989d0976b5e15 -858a83818105b144f5097087f3219bcb26b446b033510a955c891a501983b25a -d72cbfe682ad3b64c90853163504c4d2872a88ff8db26c3a62ac564d49eaae00 -c7f92cba1712464281b4100725792f62d16981ec1b1ca7a7c82ae9687c326ee6 -36ff55fd3211461deaaff7dff6bc94b248ea50f86a39d5edc51572afecb891d4 -c893dfd74fa47ebbacfb0d4490b5a8c012db8a6aa5f4531250869150c1c25fd9 -2769ee82670d8ea963329d3119005d280dfae888d29494533edb026fe0f11018 -3bf246ec4bd9f5c0de7dd158895ff40b7c2fe9f8cc537d23771cddd1bfdc171b -72d58e2fe9de17cee61af288318932a6137f976d3804e2fbfcfdbf66bc31f435 -ee1e0dacc8599ef22ec48010d4c79707118da59588bd89557142af786ca66ed0 -a5a2bd6424d137c2352a0fe3ffca8db62656d143093f205c18e8dc761448fec5 -510fd026493991ee9ce12f4b2cecdc157f3bb6bf46509abbdabeaf66703a6a2e -616d5d15f1145ef8654f810b2e30158cc883f04d31798672421afe80979630da -fa9c444aa6e4b242c28df13c80d8799b8916c9dad6eeeca41ca24cbe3741de73 -193674f95269bfb2f832513d434c34704365a3aa76d3f6fae51b8d75f4460df2 -95b64bf0668fe311f78177bb0f560dab089ab5a6fd11ee9bd6faac3e6c5ee08f -79c94b34fe82b1a2561000fde54d3b8fc1fbc7d82392690b2216982e8d9b09cd -1151a8aae36231d9606f2d737dbf282f4f685698e48698815664d0a4eac63dea -f0d58ea4edc1ef27ee2f4995e0231c246aaa5e212bad9a4f133f1752140cd8bd -7e203b235b3f54a74a8c2d8a4106ce38d558d3e9061c34cbbcb5d133820cd5ec -fc7ad5c83bb1b22781bf049a9381bd3743c6ff79bf98a25fbd361dfb8a7facc1 -708d075739668598c9d0b597a9417849de1e8169df8ba2f2dc6fd57d7d07ed4c -bf6f64734a56795c6480216208026a24e0272e871a44752e850892e9fe72b22c -15d83271bc1613cccdf6616838668fa293c564f8dbfabfea0305b7497286fde3 -411e00adaf00fe89f1625c57ac1121927000bf28cf712e55b2a717a4f5d2db33 -c2921df3f6449bfea10d566ffc096450e78807f7611e281693e30463d32b2135 -4d94b8a6d32f158f1053513eea31213d73dedbd3db635e0497bf3ff4876049d2 -922e0bf8a8da35e25d19b6b0ce73eb7da1402b73627e90ba89877bfc16f3166c -5a458aca38c58e7c652926c6547d018e109c4fc5c9961aefb4607e48b0c89cc5 -b373ad46dacdea10a1d503a7496ada54d41c342c36dfeee1dbbe8e7fc3664460 -6860622ae1c90d5045e3a6eba40df23d4eb867693a5c3d25ea2e1c31d8d9e630 -b22140e1078d577df6cc81b92bebafd700562ed45772247a7edd7fb4b99db8df -6aa8ab82b059d995474744b7a7bc637a449cd4175d19116cd1e122beda56868b -f904ab38fe601ee18ac0d56afaca712d10c09763cd21df0b222405160cba40f7 -a1828fae4db2edd32a8e2c5c173434348271dce53562d1c7f96264023f4e54da -63035f84596d3a2a028b4692ef98b3362258c59996c07b04e83b66d7e5ce103d -2352d8404e32c8408a5b05cf150f151484d3cd493f2429ca170b555d7d2be9da -96212b3b60936fa14a71b72359b03bc93d72f9018aab793ea640582b24109e63 -5bae72061eb66bdc9f28a9c6ba27caf470e05e41dee81b43ef660d5baea7463b -d36c47bf900b78f8053cdc842fa4c642c5e313fefa82c1aed58038df06201027 -79450a5b69923a4057d090544c8b343d45be71ecb3564b5ae59e18685679c804 -3ca2680a60ffb8dea818085870c75b54014fb031764e95b666d6ed70b3711b9a -012479e72d988d5cd8f8a95c3d923b9ea9717eb15c47885c7cc5ce411d4adbf0 -8cd49e76553efefb04888f85f17e6000c0d1c3a875b54ff0aa1a85bf1ca4dedf -d0adf53da875eefa66319d47b8b7af2e641dafe9466a8a1ee3f81458359780f8 -4037e4c647a86cc2630a6cb49675ffc1dc97667a589df4e77e3cc5c41215c16d -43691a68f62e779eb70af689ba7770ce5c2f6e060b35c7289e3fe5369ea79179 -8bc466d7c415a0c68fdccdf5af35776cfc5074a92a8f131b5c2423cdd13315ad -a0e4969330ca8b505c0d86efcd3cadb7f5c77c2666dd9e89b9b03023e1db13b6 -34d442bcf0e3df94c239e06e9519c70632788c64bc9f4c0d92be238be009cd8f -c8765e62d5702bd31435c9eaf5f2a04d3e2cff1406337338821096da07740689 -68e4918bd0e5e26d0404e4a8b0169ab68b2980d2eb8a5c1ce0a8c751f5db447a -b0cb1f731aa4c912ed0e07c3fee570ccc6653b649e6ce447bf2fa355ac39f692 -b54d744d5a6c1c03249e03b298301941d89bf065a2b30a0c3aa993ad18eed0b9 -cd70955aa7aff8003711178da2eadac58cefc9c1e0e4fe7ec10ced8be8e1b40e -56effc97fcd8c1e68230a111da8d36806ff8c9bac32c879fc461c4cce809c49a -5c489b352f86456032a19b6bed07c13089bf948d32831f2ed25c587a477f21b8 -ff3bc437460438312fad6141cac9311bf29dd9f221b7a0cf442b48ef64c810db -82a097530a129f2e087cc45cb96d8e7a9b3e761d3f3ff61f8f84ae47d6a2407c -c653914a9c1dd0139f299c84f5f964e6266edfeeacabc4f5fb89b9189b119ce5 -7c8ba8709b3f3b73e9e152de57d9be8c3a339ee8ca40c1bedff6008c158d777a -611b1f2a7e8ab0b52d211d7a8998f6cf2e59d5b6ed0f0ba65985353d2734f025 -11d235720b0860e35cb63b65657f2c002fa54d6ba8054cd94cb450559bf18ff8 -41f886d991d1298cec09ab4bff98440cbc4977521f74c2c1024eb76c6c827b20 -64af83474d982ef71b5b4d10ff5e99f69943d9ac4cad444fe5aef239e51d0bd9 -2bf89b9aa0462413961b459b1d7fe25672cfba44da5d787590db7cf6f41bf8ff -f568147f252935fe642f45be670a1f5ae82a53d6e850e6a0d7a37efe8b6c3384 -7df10e6dad855b05d8cc56db3d5b457cb44ba2061ed18bcd714b6ae4cfeab6c1 -f44a983d3b09fdbdbcf49ab4d4328aa83bf6d35136cbfbd7d9efb9387bb43859 -82761e4dd9a2e8af77f8f975b08f158dcec98b861a7da0da7b72c54fc7f32ded -961d8a402150fa9936415195a5d45da466d90bcf96269b77a549c615291b4aa1 -9387d40c6fc1befd017e98de8f8353e8eedd53e13f858f5b428d8d481d43b23a -34cc07b024e84e56ba46df541baf7ae5444de3aa77a387d27d5149ba0d83a910 -44f1f3692324fb3a7cc2adb22d5063e5bda1979b7cf64e264da24a21c636699f -57b75385698366c7a44d025c4d96735ea99cc446bb20371b234bbe531aa36e4e -2d2aadb8e6282fbee95b8b4b71f90f2d7d6d38c9030428b0ff301c8e6620375c -13828b08801a6099924f114fd3fb26afdba9100caa7796f312e5b98b9057a932 -e5789fd8f710032d29b526c9df47af7023d4acaf512e4b7f4f2d13827e235821 -3c4a8e0224939013a38fc7d73fd599b1a7f2fc9e314118864621981243462328 -61e1c62f8ce1d4ce8473d8dff76600b670e7649fbf8422d09dd79b80526a6284 -e74b3d04f1ffcb2a31bca539a25b64754f893b9ad03d965b5fdab567cd967320 -8a1511b9442f896f0d5d5094649b6296279549ad3699f348796aed2316194404 -e0ddb0d0f89682de1648f4675c2d8db63b68cc653d390fe2333ea0829eedd9c1 -b6f6a945aeb5ae4d7973756eb8297231c9ce5213446345bc133ce5b1470c6b79 -063c8877442e16dbda8de7c5365a9c8a91a8c9c99767d15acbcc2b82e54c8784 -7c93f7a51f91c2dbaf550130ad4dad6896d9c1d905aa7746d7af81b7f22e4e9b -18db615cf7e7bc813159f5b125fea93787fa42db2b4602432c487bfb49f29d3a -71ce1ffd9c30206b294f8281f58fbd27218317587316c308ff6f719cc347dca6 -49536a86205c1273edfda12610b212f375b91a841657a3e9b9a359d398edaa43 -f21041a76f2b2249e0f07925a996b24d56bf902cd2e6a2ea2b21c1840c0c1a2f -85c98789b1438292bc27dca7dfe417258144d267c15b53532e49023d620b4471 -da5f47f99ba092cda984a7b9bd308b65fb0dda4c92cb84fca3e5086df0100ff0 -7a031a99e1b432fdecbdb2136e29faac53425c65cadb7ec198da5cb63f6e652e -c84866add1b4f754c639ed962928edbfeef1325fb2bd80f8624ebc1465fcd609 -0931ffbedbef0aab40593c54a51d44ad7491e07d443ee0ca86167233de12657a -34a84d7a96e9b73698356f5b7010eedfd0190287810dfe3bf4b75dd58e98ce98 -d10b180f754b686e8ab4c621e4684b34680d062bb6e93c5676f9637d72520771 -82e1f2d39e889b03785b28928291fb0997a2a859c7e732b27cd15ad1b70fd13f -9200246496651f4d5580c0372a946a6a272c7eae3b071afca478e5f23e95f950 -f58ac0bdf7dc5e4ef0616bfd8e2b51fd5d2ff5ac5a816c4f79efa4a4435ff54a -bc65250ec3ba0671ec26fd1179edcbf4198b5dc25434170efae9f03b5e6da69c -f9d7c08f7aecfb5da7e493708e51339a7ede11d3de96e97300f97b550f84fc78 -175fa0d6ec79c2b29cabba67356f91f43bbc1bb659dac336d54a39eacb36038e -29f8c412a4b8ba0272c2e0bda184577d41e3e257194925643c04ced8484e7f3a -899b12a5d50b058f62578cffb5fdd06eaeb05def00d246c2a7233629efe00e24 -1d5a9e8bdb053c506cf1ed8d8305d4ad7bc7575d84fa8cd1c135a6e69ac8da9d -09b0115a6110c6df36f7bd530e6f01beb2730acffa423c64537f419bfc76e56d -099a956ee260ec7848be76d4ee19d16eed24b8f0a3d8ce3df142125dd863d00d -8ec3a0b843378fb2c3ea865cae64914acc78f8951503547690233b4541f3f07f -a38bfb69c3747cec408346d846d9a94b5e259b51833e258f78b8d56562190a80 -1e649a8ba76fcb180b6c93925e26d258c7c407262739e0252e1c41f4404d4e85 -458d6c0c821b6b5f099628edd92ed5e49ec2e72c3429ab2f3e5745d42d2e2d5a -8f110fad66cdc39fa4a5cbf520130e2bdc9cae5b182e4d06d4e14caa48f035ea -f9661ce17cc29d4c91c57d757ee5586400ee768b901c4fa51ce00bcfcfcfc5ce -1b2c8a7dc2eaa4e4acce7692f00ee06e6f9ecc8be980cbedeeefa1de4571dbf0 -2ce7bd33eda192d31d31befeb2af77c43795fcc79b8d8f6cb0c693d3aa6cf49e -0f3925aaa9f1173ef04f03d98e712334039fdbdc37308ffce34b411448bdca7d -cbc32d6da5087c881d55e98f66f4679955b7a93c02f6b2960052319bb62c4063 -865b82366471478fd4f07b44d6443e308f8b2296068e4a32301cffa189a2a287 -74ee405234755f042addeee91b058edc49d37f438bb8693b5c8ec0dc84719b27 -c578b0586ee86290d38c1122da90e89102be47e53ac93f3be3fa55132dda885f -4bccd87bdc334c32bdeb08933d4a5e6d85fd678f3858cf91f2338207c490c475 -7ce9d56960d5043b8c6b373bee6c0e173e6b3af58578fe6b36679793f07aaf5b -388c7727d8e04a6f0076eaf9095a3ac2ca87eed2bd7a5c35fb9ef360158b0f64 -48ff114f281f2e8844d0ac1eaf0d3436c5310e6ae25b11e3740cd03ec49fdaab -a40732a5bbc101b84d70449cb1c8880b0723e07bb2ef63bcc66b95aaaa03ad7e -c163bb5e98ba3452d5373fc320fb774b13861b72624b46f92178c2d6212fb3e9 -abb7827037747261fbc93521cf1ba38a47a44efdbd6223a0f3f929309cd4e160 -83588b4ac6a9b874aea87a69a8081c5b6fc2f2f70a6b5a086493b644e5ab1d01 -31041fbd60c970f675b13a311e48b86425a83f68087dfe05a6aa22d6238e3e76 -d31d029915bd11d27dfaab5a3ae95e04ca156d2a600166616ebed20132690873 -8fd58eb219a91830624f6c1556436d82ceba3293b1c742f29fc5896fce7d9e54 -e1fa81bbe5b0ab391b73172c7ce9b1bee7b0784cf4495bc6fcb755092a5f2327 -c164e6d783be38ce46375f27afff4ed0878f8eb46634b8f0d84df58a54226d5e -e4d25edb042bf51bde2ab6c83852c628bc95fb10ffb4cba46678b30f7b108ff9 -3adffe98f6adc255bf4b0d323dbf68fd559caaa55166dfc4f1987508ec46d6c6 -f1db251152af4b9366b559382a3741e8fb0383eea8deeb6b4ee9ac5c9cdad65f -5996ed7dcc672c41852e9891d25ff257dd49989ed6eda6b3e5f762c930fe6d39 -75b412254c0279ddcd9fc664b9cfebbf06c884986340fdc76c8e4eb560300943 -3d2d96a10f09e80ae7b2eb1f74d82bcc9e16fd11617663768f5f51dc464355ce -f33d0c912abc567c2d327b0bf95aac49f503927236814663541abb7c689365ce -75587190537231e16c0d049332d3ce07562cea63b3dc191d68e86824b43887da -4dbeec79ea7b0089f9bf2e61248ad3d27bb881b704b827e303c21cab98d23447 -dc20818fe8a249bdc03d772aa548f6c75925c74287ca9100e91ac1693d029f7d -73027e8ae734e354f2828f18a8e87b13d803fa68e6d7c4a79333b21d177c61cc -6097ca7ccbf700a75ca3b340472daacac6e39be45dd201f4517b22fc0acfd06e -8920c858542ded1c95590a1b5814103c700c13ac904e7ca36aaea572110080e4 -0057ad118b690e48cb8545bd2eb99b06003c1387354fe3947eb5fbe0244e9350 -e7fa6e8da13b62b862b22fe5a28fb5f933d0d97d0e54d2ea8811762ad02488f6 -163c146a53f8ee78478ffab1b9e123872ee7f50e7f8b124765f3bad9c43b588e -27c75b8e7ac979e20edfdd2cf68b506baade781facd7c00fe6c967d84c2a8758 -3a44c786038aaac152a10f82d5fcad2fb609f62c24fad60bbe5e8e0d3c3396f6 -3b00be25467570f5595f6dc9e53bd5a437fb7388acef7cfcbc22689149c386e0 -97f429be6c7ba8d70d8548e796192921b764deed94f5d4de9365d3535901aa91 -6081b7b548c3b7555f8936e343eeb062a2596b3065ed42f1489fe03ed0441236 -eda3796353e768a256f7eb8f6f9c05d9f8449bbe0a1d7e99519b7e119ca452ef -46600b666c010d1f9a2eb21a66cff233852e8fcd21cd475423d32a5ed8f1df40 -e18b1290ffce0fb278066132598133f094b52988a9e3ceff74297f4bd6f8b8dd -cc069cc7ef14ba3033ac19413afb7676de9a07a2ba70df9c96bd135564e7ffdd -6ef470d939c5164eebd1d3824401c6e75b1b5695fbff0ecf5056142cc8afe527 -e260e93ce22b5e0098fb54ca8cb1ccb24ba0c4c8ed9ebc172dbb1b5755d34b29 -d175b739f71d3befbd43edd58f0b3b560466348628aeb205a6db30a05da09ed0 -a2a99eb5126257cd30c90758af231106871da538b340e7d6ce24fb0c43397f2c -9dbc10f18c1839cc15c0e331deec3fceb468a9c6f60c233df45b0c53840dc659 -6a776c43976449b2cbe76e0939f060263cd00b837d21c32e1dd78d1b974fce3b -e8df3ade9b4be5ee8c02bf10fc08f0148177e4b50bf6f1c98589092d8d9c52f8 -2ed71c6009abfefb3a2976e40e700a02b2d5ea69f59dc6598d46ff6b7e3050b2 -983a3e12acc618b4a2d369151b49cb89ca2bd0b150d6faa0ac681c932a7fef1b -e77349f948e67596893acf953df11844fa2b074fcc8ef0b37e5d43a9282f3f82 -92436c0508cadf1b59b4e03f778dec524fd6465467ebe7b064ab2ec7f1e24a7d -20ae5843b6919e1f4bd0215d91ab1ef346fd97fc9e4871ba30f83b06cdfd5180 -79d2926690101525f2361a54983ca427b4a7937b550aa9d3fa3409f6d4087cc3 -3507a7dcc6b5769a8023cc0b790e149494e0b4a62474fcf199f0522d0c0edfd2 -68a3b5b86d600177616323dec75753f4462239d88eb6c44827119de33665e57a -a7a1f133819dab77d51b264df8b9028651050598ee266a645cf34719989a059b -5493aa548ac308eb673f9c5edd38fac3997c4f7249f28883d763a6dbe8faaa9f -ba42981773763490fd6ea356aabc5178f8e97387390910b3310bf74d879a02df -15ce08929c489e7ab1b7fd5dba4b31f4d10a4d5d860b354549b948179339d08f -09459bf54e119824e5a856cd287ee1066a69f78e0846fef677dcbe223357861c -80e5b7f08bff3a08b1d3c18e0fbf66b43adbd1a91e0d609d92636ddc654afd83 -d490b7909b780c130d5ce89818169700a3ea8de81df1ace8a8443b4c365531e6 -ff35353f0923afa95c1c3fd19cdf0b9327ca8708ef9c891c5d5c96ea695d9047 -0ef9b222757d150824fe741bc0f9afa6ff11a882da853c1ef45a7f6936fbb2f6 -6efd8fcb33650ded480ee0d3857581fee0623dcd0207e6e708b19b0b93822994 -0151e373c3d60366d6a1b61f42ad9dafb751e557a7d4488ab09acda685610bdb -4122e2ae576196f50c38a26a757b2b6e6ebb332a62b98c801fb67bc10a97df07 -f5b6ee43ba7a1c4583439a69b90f160a46f3cd05ee9d58774ccb8f11f8a1bf9f -736579cf2d3b1ecde9546d86aac7e5a9602bc9cf2cb68dd3264a6b12f5d185bd -10d2cff08d2ee240c3b2d4ae0d5f93e2dac55b8d3adf1166473119c3ea90cc51 -bb7f28012b48a63ee7acab3e774f043a008666af6d0efe9460c40ad82ff85ab3 -cbc09e4cd5867a52e25b1a72e678ae7cc06f6d8f913ac783749f30dee5feb866 -5ee18012b1c596918a5869a2eca7539063f16bbc2631f4ea99f041fc64b0be69 -82d3761638d1dea2ef828388c0629e3d953ba41816bb171d65e4b99cdb003281 -cd6c9b350577d2a922144402e90d8b2ede231304f055f7db115536c6fccda5ca -a5f182bfbcb454c4d45dc9754d04a0e881fd03fed5383d8b30e8397fcef19169 -df94e71ba1689f4cf42e60fed255e8f49ab1c90a7148ac377807e088bf4a9110 -afb3a02181f44a7caa8fdc61d2fd78fc18883ef6bf006126737d5889dcba8e99 -7223053cf17a110798b1a1c5f319317ae63f9a6ad23eb6d47d61b34c596e37b9 -c1e107ba5eee08c98af96261458d758b9077c3874a4b7ad2cf2bf1d3a8f7abd2 -9533934e5f6adab0b87b68d953fb98e219f956ceb8f172f03286cb84384e9288 -6166b2b49da6e5696f042bb6006d942e34589984e970c2641b97fa88bc536d40 -5155f236de881c851a52ab869969a377433cafade08178b1d1133891e9df4b21 -f8348e0bba155ed17ed3c26fbbc282aa8c3f27192e1cba91e2c461dfb5a52977 -71874292019b743cbdbf11dd1a6bd6b7c1695f774a34f37748d49aa32b5ecf5a -8a1a30e329e2ea9eef8f90bfffa68641bd11d749f5ba343cfdb0181a92ac9702 -97725b3968c8cd20a0af360e9b740bcec8644e4e1bab4cd7a3dd1876f09b6af7 -a90fa670a465949784201096eea610fcf2d5c15f57d39642bf0d3b246da6fcf7 -d01da8ce59b4d349ee76e8ae72fe26a170b2b320eb5d0a7d816488e248cc016c -d9f4af759126fed20f54f6176b44203b3f1c248d9cc0e3c6ce05aeeb2d127183 -e1f89aad8ab25e5660ae88852b0465f2bf00f234aeff78a82abf21b3bd807172 -94760e71a0472d14f9d3445c24b38d72df442b8f78640c55412f21d6b42f7645 -277caed0dd19ffd5941e1a325aad194512d13e144259ae01fea735580c28c4c1 -48ce5ee289d8bc05bbe1323019076da77187d90a35fcc1d0b52e921ebef447c3 -fd0e445d5fc62c809df85bc141fe677098b65d78c29d9f279cab0e7b452d4490 -e93e6c3ce30c84ce73e2c419c91a304d0e265df004b549f73f69995347e3a654 -7e6a0ad2862de39e182bc4e880bf717643165a90b094ab19207369bd92fc3cab -e1b71c496698044f2f1d2d30248eb0de57281ada534155d6991921fc3442c8e9 -0c77c1b1811bb3ab2bf9045afa0ef9f74f8577e48580eb9840354602b222e9a6 -cc9dc2c70f7c7e7ff18687a420c3f2a46680007c14d75fb701e5b8981f4e4175 -fc81d4286920db1080ad6c8d066ed15881d710952e5bc28c444448aad1df885a -634ee6bc8ddb52470854ad55958e179f05e61f8151a6fc6311bba2419dd9a122 -93d6e5cf69411520f281b8ea2908ad8f4d774e777a633a8e9aafab363f426b65 -cd8889d109f0c0ef516da05063d1d3256250eed899d6ecbb587c7b2ea943127b -f76453e581002ac170d6764cf3ef98ca600f07c75e2d124e3faff95fb28e23b2 -3969ed2b48b2be9b9c388660cbef5dd96ca0249dd307bd2044a5acc598aa0bc5 -73a97be07ccf5b6bec78d99b0e97238e550e4c56da12ec2657b6dcc9d9687795 -8411cf3d159f8796f6e9b8ee98daef301c4cd44bdf9da4c6aa6e50ff517dbfc9 -7be31ee0955a1440fe1cf27b6a708022104a9131d6ad031f87143394c7d21655 -2a540ddd9eb2cc438c06c9e38caa404ae87726a1edd9aaefa7e6b269cc543224 -35319eb5556497653b293197f1a5fee96c0c8fd7cefab51a34022eb008dad5ef -e010fbea98e316dce7b94a9a766c121907be64f3759dee51413669aa882b454d -51fb13a4b428d61b3506c20d551a6e96c1b538d6f10098abdc6fb8dd739cfe69 -512dce4336bd31eb5a626457ff6c1495200056c716a10c4c8e6cbf24e5a89a91 -a78d31db4b1dd71d65bb978edae1b0821bd3ba879a646c4e41ace1fb44d08e61 -1a9d945397ac69d01e8eb8e75fd60ca662ae1649346031ac32c3cfb352d84419 -52190ff0f58283bbd1bf4cda15bbd219f22e738d2c0a114e3d50f66f9fa5214a -34dffca2cf6c88883b0e416196e49e45a513994ce8f1abe93591c2b6d67a151c -820f1c7f4ec6a0531d2d13056f35c2c625044abce5111e3f625c09fa566c52c3 -615e8f83b28506f21ec2a9f0d93fbcccd3a2362ca0612bb8ca2123300786581f -88f1632c5aa76dcaac69c8f0140b45bb46871caa9ff1c221dcebca18e506ea12 -c8ca217029dce549a4d34a58c3a5333e90286ce87919665657acec87d268c255 -36837e5b6cb6d46367faa2951dfdab709b2d2932f44561f73545c82e85599f5a -8cd72bad593341e0de99b41b34f3e5f8c1ae749cc7e551f465da293ba7af4973 -35bf4d08a68e7abb0bff04ce36b4571b4212e6b98539da495ed516f0438baf8a -ce13dcb57eeb473bec625cb3c5bc70ae22067e6f9a8b0f4b4fd231110aaf84c4 -a48559e8303e7016c0d02125d73c690abb75c178855eb2cfe2ededb11e76b06e -6942a101a031fc5b110576389fbade6619ab0e05e20b8d750af2241619ff8224 -fd1396f44683f3735c0b83f93da04d435aabba9073a7985040bbc0ce5094ab39 -7579d5bf618b518ca8b1c4f9a8856c711aec8ca0609d7d338fc6edeb27fbb400 -db045314795a74317812652d0c1ffb1fcf453d5d769df6b38831c3914aa0d5b9 -ad41e0b7b9da3074043926028a84d1b09f52b619703814911710cd915e3ba310 -d17cd6d1e5bd4b7a9e7e3fa2f9d0dd50f88b50c895f3c7cea1077242cae145b6 -b6311f96996d437e369ee8e46d6680affb65c151541ce5e2eab2c851b693cf8f -2b304d62d428fee0c99841d4518fe2f67ffd0a26934bc70b2d970e0dcc13892f -d3b725ef5a946c273da4714ad1b2f4f54f1c257511770cb2bd0c010c3c8b03f6 -3190f52f50bb4db5aa56eacbc174e40452fec845b974920633f2185bb09beb6f -f7f1be65ec2fef9d10313e6830db245c9c976784acd842f22c9a12d51fa47759 -d9c0db2858e0ac424e923a48e89eb55b4d8ec738caf394d3b4761a1370fa496b -6d318f951299eccfd3de0b94ac27a952911e165ef590fd2729cc2cd86e0362ff -f5b51dac1c08519ea8fd5cabcc45d1672f3f04d1e463acf0bf4125434e72cc76 -e900f78a48609069187cc80acb13d0f177b56280d468737cdfc77501bd9b4036 -fb146ec5319f7a3d828d5523ea007c9cd545ca043bc48f174f72bdbbc984b40f -f6d51401d414fea2bb1ed31761cd919dd49199c0e0d0f1ed1f00e8c3b59659ed -55a1bcbc97ad9195e1104af67d4ca355c0c37ee8fb6ed7be5f5ff6a68cc2ddec -49cbbb71871262c4a1a7cfaa39aa6c86002050d91f7cc507715fd6b2d3777d2a -3b9074928121dca38c6934019d4fb8401c4c2484dd0c0145950067025edaac4c -67a0d18a77005bf9c9f953e9e55344f449278cd75a65a3b79071f4c3f0431c82 -f9fc739fc4f3e54611bfb7fca635a02492dadaccd7c85d8a4465aeb5285620be -fc6180d39c44795748f3fa23b9de86a548feb40bd8658b4adaf79ba705edbe4d -1e5c36ec57d22a9c8d64bbc765b504658c167ca8829e60526239ca6af7624781 -2c3d3b0d06f4a51cc6d8c8edb841bc0a5ed2f1ac4b9fe64e09fa32417817304e -bc2ab036447956eaf189ec62f0e415f7020da9264ce26c5dbadb6dab9166fdcf -56e1e323947513da6e14e111996db6f92e93c429cc62d4744f9ea96cc7c55cc8 -f1859730327991842fcc7c2f2fc74895ec3974ae60a1b3345edd7929761b6338 -5450c2927d83993844e156ecf5266e8bc5613bae81fda0a628954e111db74915 -285e808bb8a4660c098b60f251ce38512910d17628131476de7f1ac985ae1fbc -a382688cad091dde470d6407a0967cdcd26328fa9a28952ba14fc49af8a908ef -82cd09ef940c6f66076bf67250e40b19a1e9e4f164246f6d1324c702a59c143f -53a829d967d83e905f49fa3a64a2b72689d35213f3ac78f80ae21fa415f2440c -4bcaceb6ba89836679103b22bc93a425606d83c43fef202e4d6f20530da1ce81 -2963064da571136d79edefe79ee876a4e01fd64a5466315ecb61832fddcff2c0 -73e6aaed9940bd8d28eb78f75a04dca7235f8794074ccb5b2b8e5099124b91c2 -047aeeb70e8fc5dc8bec6e18376fb7d5546edc7bf20671931dac014c6fdcdb35 -43d15211873ee65f793aeb3291f3e88a603367f5beaa7ee59e862f54add1a819 -1c4b38065adcf525170842879e91529f35bc5f7f78e58f17f870dde83938c149 -b9d15b3e8996fbc2429993e05683a4c7e64f7bbd5a7efc2c9ddee24ba3f329cb -0a7b32180e73cc1eb891104bc8b0a294816011bee7039c6fcec289e625c725c1 -546ac9b505162aa68156bfbf40720498408809e5312b4fcb1505e42effe3d3a5 -04d792517c2b85388280567a1554181855fa60e250dd91af20b44bc17931fc52 -a88f9a9eb5b8c1823ae73f4a7bffcdbef86288b38efb87dcd76ba02bacbc8349 -3613b0938cd5e98c4f3966339748854ee61bc5592ec209de1759a50663bb3360 -831bbcbe02f72cd061ad784137e2480fe026a9c1130a5a557062d72808530bd4 -0b470f97a025ec3b2789b6274ef44b92f5d7a7f138683cc6dfe03e0cd78f9df6 -5fc8eb68eec6f8528ae8a469cf0521062ab95a4c7997f38969541cdfecc7f89e -3263cd46c25cf6b7cc64fd20e741017b89d0298e2c55e9b582e6afcdfa1edc1d -fc65f458a91007254db8a33c38db16db0fb35352d54d9c88d602caca571af64c -b0ce3b21689d64fa4561dd65be69b6e8fb81d3b2e32f7aba81353cb0f583f90e -57df42cfe601d5c05df071b49d4bc7a45df5ca2eb8a1b547d8767a1c0263b93b -e41caa3561b425093e8c8a44034d9553d96fd11e72be93b81b975533b30530f6 -fb7c44a81fc33028d1474d6d04ea1e8863403a4f27da27dbdb37f2af7eaba079 -ac68f395e8237597cd822fed413d10e4bc700e8e3409729b51ec700b17732149 -742fc60c9f5b26b11aaf47d3e80d4c671e5bc0511f8bd6e7dbd28790e622a32d -15e9cfb4739f4c6d67c8dbee302232a3fc9cda721102dcdda24447202601daf9 -f6c374b9b5d687d06c0755df942e51d5522b896292211705cae907523b9e872a -04f49baf43d89c3a4a37cddba1d3f20301666f7bc970b72f5cba25029bcbda99 -9afcb5df7a9fca9e11239902bb4b2e4609fc6fed679f9324c16216e4fdce2f3a -50057b1e73344eb5a8b739788b30d3c4e3ed6336c95c84a2237525c33e59dcd8 -4a08ca60d031829e9bdf9a3ab6dfc6f8bec79e40cac1e69ff6d5d2ccc9c65a38 -bddcc8526320d847d7c6543f29f6f50959efaff66812939136bb69233f36d376 -c01c368e7fc20fe2afd1192229305000ab8c2068d8d2158878144b545c2ae572 -20700483bce6259efaf2cef4706059847bd721da53a0f842011e6ccf8c2c3ff8 -97a477bf6dc659a256cc73f4f3b02f541bffd23439b12520e45e1f731e06af12 -0c93c3b21993d1cfee5ca71eb495e705a830eaab201d4ed332d65661cd38e493 -039f250a3ddaf8c3a88231fb9a92c72e02d50159faeb9aea556c89017a8703f4 -f2bfc73d0a40182597a260cfb29c7cc946780548fa1fbf28d35a93a2393a0793 -1c789d864ef906249c1d36ee78a62512e29a9a3f970f7a1be3e7e566206d07b5 -15135f143706e0b713591524dd318f1b10210cda652d5a6cd43e4e4a1bb0e855 -26157e515df835a962e7fbebc7f51a74d5224d20b5e0472ffb65913d8da5900b -31d90ca409446da57450fafdda1b5975d898b4ad2cd43b9d0660aa81417d2847 -d4d0cf0c9d73ec645e61f16b80e1506a2d2ab8f87a1ae7617d7fe8e5caba611e -ba028b2036b33721f78dd420557254b02c071c99fe068be1430a1fc3a29ac15e -37097bfd6ba1d7f095e98874ba909a6a58a419f82545c65aa70f5f2418fea14b -1dc7efcb3144c4cf060e6bcf0bb68c3830e09d069e83f830e6e4cabda75e9cb8 -cdbe388b0a7c23f7e62a4990c705ef96fa6d95ecfd38b2575b0be70d0872509d -d66bf4e2951121cae49c0b21a13685782a2a83a1ec70bc987bb9a0fa8f41b273 -e071a94a9fa55c8cfce83d1c7d9b0549c6227b8f8c0ed03760f5ca091c29a663 -749627d4038021a7c90bedadb4fa40b8548126986369e04f62c1b9c31624ff89 -debef79c9ca9b8ee82c6db65d8a67fd9c6fb4463e956a1d7120a5bf735902327 -6cd611fae157909073a41db7f5586666efea0c0ee7216a8a5699102ecc251f18 -f26c6630cf5273bfc9c1a27e6abc5156231d8879c0d1d767f6c86e7bb09829fb -6b1434eef852c1c72751010e25f689adadc0e0ec47fb9e4515ee95bb75a77271 -0b13290ca72e10d1ee9ee35e9aecc6f32c83f2b2eb30aaf52d6948bbadef1b58 -7092fede63953a88925df565bbe37456e085bc3c22c2b340d07106ad7b699614 -f7e74dcf82bbba467ee87152378a4ffb6192fedbb103b9abe1d6af8e0b84143f -f2da81b8bd16f4b9c110602129530d051a23df6d993e5f0251429a9dd8bac65e -e13e0ad97335e389f3bfff17b562ed1526ed4ba8f1e52450de53dd275acfd050 -dfb13f167c1f18ca022c2b6a74cf496999b02ffc072a6aa998e386cb1418dbbd -c30ab9ee4cd0ee2f0b4eb816f7cfff1916d0cc8cf278cc8a1ff0501f48a46b6e -8dea7d7242efa272bc744d96dd89c2814c27417ab2d6ed7b765c02d8b9a1403e -3ec34f94e6c198994da83a17ebfaff5e310140b44f9496caffedb1640d85d8b5 -d3e2b2b5ce786f6d910da398db88738498eda315c4c84acd1e3534f6612b1c41 -a27fef1368c001a24ec8b5ee18a9e0d84c6d79671cc362b0c89217158b930cbc -c852b3ba003143a4a945aafa7d9c060c911722bf05018898840e8f72f459ed72 -13d17972624f593de7d4574a1a9c7e2590cf1d17c5e284021472e4c16fe656ff -e0cca210ea8ef7a64190c489ecc098c09ce5d0fc6700ab2b4ff0d6dab59f37aa -8962226106bcb7a416c48170e107f5bea3fc9fe680ad4a7858be6f1184bf8521 -4eb16a7549cabdd7fc6dc23c62f3164728dfbadeb65487fd0b979d3ddadfae17 -06cc49f9e781de915ff8d88ae280986549fd6e8e228940aff26e1263879af4d7 -228c6b84de15ce2b2a5ea3d3771bf8e95c04afa2e922582f3b7b4aae3bf322ff -30a6464cf8c3dbb95a21a4f724c4e59d581a01bd6be1ec8948f82365125cc16f -3caaecb92d36829d781ecb3b6cc69c70b28912a75010ef84402c6245a9013d0f -7f24bce18f8d73b5c2ac9e9d91337bdde61801fde21bc848876817d2cdbd500b -f745bdff95fe3e4e3751b157a590e88ca7cc089ef91d55757792019742bb9cf9 -000b47a1f0d14a1fbb71b8875f7069f246ce622727e771363475a132909f2723 -9d4782bf2bcb24db445a975d7b84c0c0668b0dd8dd990583788bfb5f6a4c853c -32bfe6ca6718801b712e3eadccbb086a9245fe255413893f64a6a4083586f476 -c66112c90d7f9572e2ad81853e8157af2bdeb4d0945c02c046a1f0309ca2c93c -fae5dde45a34e2d6e27f28af0a606c854eea86bc0ffdf96c77df1b89b39dcb75 -a49c09b7047689abe355ea5c2db4f5ec9c67451a4a3b7b92ba4a202b96b1f314 -ba8935ee7497f1d4375fe761841bbed442591f8154a5e9a62cc7091d594688f8 -70f11412ae503e594e26b3a55d6ec4f24b4c3697343f22ef816bd8fe8d13acc2 -c7544368358b2dc55ec9312ec58c536793ad6488e7a410427ea80bee493881e5 -273efb06078b999d66884513052db33f5304aa8a5e35f2881c3d7a3400fb6302 -9997a24ae45d0a092bc78d0d005da85969615da06213333c212cc42f4ac43902 -750caf338f4cb0c590c4d5fbc21d676c5b5c39e1cf9139ac9b66272abf97f0c5 -863f4a4be9c213b2b1bd67aa45b917d919ff99748ac72fa997a52d5b5958b38c -40b3b89322dacb31b2ff49b98c2c6a5bcc5d2e26ecd69659bdb88ffa1e226a74 -d4810d6f0a7602d79992067908c058016b9d0d71c6dbf7bd1d13a2cf2280b7d1 -c5e53ae86e6480fe7fb57efc26de2df4cfb7afbf0a0f6fa6060f0b2a3d1c64c3 -cb9367e1f54d49cb808c1adcfbef9b278095cbbd2d3720f5ded47187106ae1bf -becc86c6676c98a95eda58cad196e2da2bfbb8f11681ba95207df27dda96d8d4 -9943d4554ab623396c271b4a087a3693cae43f944a00bedc65e2c724cc3eef22 -0289695379b2bbfc594837e20963dfd0cf5dca06d8b2452be1fb37fdec2229bc -e6928948e26596437978defafaf1020386c1523f047ac699802cd674359b35fe -9bb4dcd3e2b60b54c70a28a5bb780baeb2a12c5e333fa7315b38eda4d03af438 -ed35fecb6f50f5cdd3b9fc770fb3bd6e3564b49737dfb730fce448a1ab008366 -2ed9113051be9589966ec890c750df83b89f07e95a8d34b9970503336941c35a -fe2f09432285cedc586d70ce35ef5b6b678c2f20b5011e92d285421272c052e5 -4bac78ffdbfa89d1407572c8595e274244973fc29f3c1e3a85fb63ac3ee099c1 -5cae84c945970fbe4f8513055d5803139b8207687d2aaf9eae9f87f459422bce -6fa9ac1b6b7cf09b8529b93b31abdd91a44278ee39faf29974f34ee4d787ecd0 -e689b5076c9113e4242c5e62c01a847825e402376465ba14d12477a241779bbe -659eea57ef267d35ca3c88d34326028bd24747ac2cb6fd04e556a99f0bc44d8c -35137b165465764bc92c9ccb13f77462fdae83fb68a2b36d70719346f56e79ce -5271fb10bddd68982938c5a4be1601b16b32af11586fac8299a76d37ed286643 -18c06a87721cbfa8c5507b6b40458afd111e0945077f145cbbd2137ceeeac951 -5295ee98c1747f3209f8ce643017911a30a0d184889104fbfb01f9f1062af6e4 -b05b489302bfb2c8ce55839f7d6186b081e9ace3799cb323894e9d9bb59aaa91 -a7d78afca8aa91952fa5cdd1c76f602c95c31d5f83470c62e4fd90fc59f72b92 -2fb22b1f4414753875674e00ec274551d88a5a15341a2f98ab8bd6555edac3fe -c5415609051a1c0174e69929fb164223b6cc9171758da0a676a5a95986229dd7 -bbc4f2e3685bad35de0cfe6e42dbc304bd763d8f1fb6557de226e00ce34b6f26 -2f7e621342a34409b3390c4b81c50d1de3ca485e1c56a61d6d13127be952cbb4 -617a079b3137af9e35bf8a65634b212199e232775d98f937d6a8bdf4c8aa233d -5e598dacab2e87363acf2748ca7670fedb4c7f5ce9dd007a0b786e4619a82cfd -350ba74410e49e93a15f1046b34c2014022ea2a44c31ca910e7105138c60a289 -a1327aef09a7e4dcd4b63ac29038cf2c57c5440a355446fbae9c90686493f055 -81a1fe20b5a1d9c657ed6c3a0ce0d363c86c5d9bf5a608e148d2e512b9234aad -295ee956dff7ba58bbb2e2b62bf4d86099c6daceed8859c8f666f758e5533dc9 -63a98e679be18626d5cd0e04f2d92922fd0b1657c57bdd39e85adf80019953f7 -bb5f5c4b7d7b3df072a764e6f1e41ad3ad10d23386ab594cfd17d330c9341e39 -e67ff6cfecd3d7e2d4ba48ffac38572b61bef1f6ee7d631967a357b6299159b9 -a20dfdd3aa5b2b7edb1e686fc8081106912a5524b234b740a627741751ccc556 -ddd0424f5491a7a9101cbb197b99e3e9833790f8a7e65b4086e3f6014f0aa6d1 -424e405a5f75a55bc7d55374fcb4c1f50153f6c3bbae87b0f3af8261bc42f7e2 -48ae94a660db17d3db51527264501e8a5ffd8ce7582c71a0c220573a86181d12 -7346b4c7218a87f9578fba642b365d57cda7aa59a770f402f0c8ee2334360193 -1d519df5ac2e9cba36be0cad1a3817ece63b75eec256d0678799ad0a56f3b56c -db021b6e8431f840e1a2aa9c898c5ee73cec569a8110878612c459e0356d51e5 -8d132726b2c4ca26209156b91950bd344628d7e6aeb7628ae4154ec8cd1cd6e8 -f77d9ae90930427d682fdf44239c52f43d93a5649ab1a94c8691622057946600 -23767f3b2ac73390eda83db23e6d1f0a3b58f09f7d82221d6ef5835a15644a5f -6359a98de0acf1b8c06ec0de6d3c91804bb86280e11a982f4f238651e1d42335 -eac6301249802389fd8b45c30056fc29add3c4ec7cb007097799549267a45495 -9b83099d6409ef78d725cff9e13a0d5b13b59cf4f6d6a3b2402a1f80c1e35c19 -c448bc004cdc88cb76867b97b0156b0988a152eecf47b30d473f731df755c8cd -8693cc86e9f0a1a0dd9dcfbbbc724f521dc300ac50bcd78e181113dcfeb74710 -a70d6e6c9920256d613c6b28b46ab08f82b5af67a4f216ccb31d3cda24d91782 -0e7f45b0a135c50e03fc75e622819aa54c02339474366c07129a5c42f4d8f2a0 -e23a38c34d47cddb09a417f2fb90923cbc508655de01235df27c7eb511aa56c2 -4fcd572512586843ac6a80816816e6dc852a36223bef2299c6a478155776e16b -90031f71d6b7ae2b7227c5d8bbe57d1af693ccdb8ff883730cade61fde996bc0 -6566259af76a91b9b123665686d660ad9de6b292c5bc47eea9d2ea19a2adb49a -7a1cb138d99e4473cf1a2c52579ddd41c04d302a9214c5ad7ac412be4794fef4 -15a5e11eeb5a84ec3a2e68811820e084a0256dd625e6f6a61241f8904bfefae0 -899891ffcc05cb11519da935e3b9e692ff22927da8c03efccd2aa9311e014ca7 -548db11e8e8c8c6aa5aa6507c70ffaf846a571e76fe421661dbd503141431262 -fd436c79108d8c7ca8c5eec44fd9eebf54181beed85aeff4e1b6ef6a9769e2f4 -ae97060298f4c7fede54865740cda6cbaf52ceb0c963e935fc894318b997add1 -977b0229fd0eb7d13ddabe457b7aa8a2d05b2b99421e01b4d775cdbcc820b1a8 -3ff39d8a7c4d6e4d96125ae2ad688f997e5f221b6ecc4134ce16f9613881f4d9 -049e171462845117cff0bb70669a62570e7361c5efb8aa5b6b858d8aed27c149 -70155e3406acdc035b1b9d1e49664a75c8d52b2e8777fe77aaa8ced567bbc904 -a44305a7b550 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark diff --git a/client/nfsexport/lib/fonts/UTI_____.pfa b/client/nfsexport/lib/fonts/UTI_____.pfa deleted file mode 100755 index de07ce5d..00000000 --- a/client/nfsexport/lib/fonts/UTI_____.pfa +++ /dev/null @@ -1,1165 +0,0 @@ -%!PS-AdobeFont-1.0: Utopia-Italic 001.001 -%%CreationDate: Wed Oct 2 18:58:18 1991 -%%VMusage: 34122 41014 -%% Utopia is a registered trademark of Adobe Systems Incorporated. -11 dict begin -/FontInfo 10 dict dup begin -/version (001.001) readonly def -/Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def -/FullName (Utopia Italic) readonly def -/FamilyName (Utopia) readonly def -/Weight (Regular) readonly def -/ItalicAngle -13 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /Utopia-Italic def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/UniqueID 36549 def -/FontBBox{-166 -250 1205 890}readonly def -currentdict end -currentfile eexec -a9994c496574b9cb23f8cbcd64a4a16861c70f0f2da82f0c7b06ceacd6521bb0 -cc26f1cf47836cbab75757d7a81793f43e56cc8f22f926da04d715ab6ff2e257 -5a135dabbaaa58f31f548cbe8a76c69e2402589b9e5e46e757f06bf2eddbbe6e -e48a624cbe1c4840a338e90f7efbe9f2194aee1c869bc4cd76e2f1937d78e207 -d8149c05b50ef0bb361f5905977c40be7d4dad07b54e087896acda5aa70ab803 -9dfc55a73134c7f1c9be9028d3ec6ccb0fbb8fda52bba4d7551a8124e68481d0 -775ed7f8ec68d8073bfdd3b67f72ec68634ffc57727e16b9aba841546ae54d99 -b60e227682315510edda09bd6ead4d1652f449d737592c44bb178689a3840169 -53d899636686efc6f838b19f966be5f833f5e7d41af38a899df96fdce1ebc116 -9b0ec87c930d9fdcbab7e74880e9693a24de9c67dbb0dd75b3dbd113b079c490 -60018433ccc06ac1df33fc090c4642fd5225fa0a188c131974ca8820319704dd -14b1719b958779d1475d92e712322eb2e6a79d652c4e3f5833aca3091675fef3 -fde103446e565428267b009d87bb7d6bc40f46b498b19bf1223aba33079e41ba -a9561254a9df97a48d71015b6a24cf952539f664f172d565f39a55e063154d80 -a960cd56c34011fe26e8849c6677427b2c7e728cd16272363d76661b3ab8bb2c -85c20b747519a4431421d4c83783feb896c45688ff7f824381cff5654a1bfc68 -6f4894e1d265455fc00064d08c37dc3a47b59a5b2d14dd893a2b871492b07c4a -591695c8df012ef46a750d6cb7fd86696e7ead280648bd737e9ea490140f3b1b -1dffab2ff8e085a8b1c78e4b9ae9cee277a29233cec5ab2588d1cdaf4bbb6512 -e1b1476c68fd3db18ecc2536968ebebf4333c2c3709ca354f21fffc38c3858c0 -561378a701158ed0201a3b236ca9cb7f7528d1e5e07a9bfab04f8d0fa3d12405 -5ba2fa9dff76f41b980bfb36e8db1300f7172c902dcb9f5f0bba3cb9c212bf31 -76cb802ddebe556f4610021fa3700d476a2be2a66ae6c658fd0a95bc1b9629ad -03fe4e775ffdfa9f87a274fd904c0db5beae258f9af213f257db2be0265b964a -681fc4d2855f5356fc87576d847db274fed9ca5bb4961ffcf53f28b673f50e31 -c3c634604e70fd0895af711c9fa302572eede069f65502f68884a90d9f1ed7f1 -cdd95fc73ca6ae925cce4e01e49934539739f082f0ff1398deafda84c3d9b1e0 -cafdefe5bf321670bfa286078bc066bb1895b1a3f0253abc079b753c8f020fae -ceb70acca52c4fd011825ba3ab32ce9c7ec263b4828d979b57588c48de210085 -e56eeb002dcecc967c95f219728511ccc6c51817125e1afdd3e4a9b35c8e5551 -06a026900808425393fa10ea4b6f4513f0af047d326d80462d36c2c7d033125c -ab05bd0d3058b69f11a1d16f23345b3c97e444ffcfb4b3496743d9f6abca53e1 -b702a359cedda4d78e1a771989290f86ceee70502c574d6582a64045acbc33ed -436871e9beaaefb12174806003037e8616b5f12ff470cc6e08b0af6789b9614e -6ce98441b72e79b0c613e4a01835cb4d61c9cdecde9a66184af5876f0c6bea8d -8280472a4c6a2f38fa95b7c475ce75f8acd6850e8e82dcbbbb96e7b389612cfb -082c280fc4babf5da29e26f1f163d5ce353c9eb61122a10634ca3224261089f5 -e999b1d591d92216afe16a409f7735043885cd0218b4bb7289fb4547fdca93a1 -30280807d3c5fe5abf6d6ce88af04beb42ee031be89efad865f05daadc0ec4f7 -871c1a8d78e51a453a8c4b0ea780268639009c2ed6741fef8c598248ea9a2c5d -f3ab0401a05b0fc35f66bcd6c812087ac03be6cee22ff97df7152681279de3bc -be0a5c3574240a561f667c87a9fd065b788c9bf4e38dce8abc94f29acfef1933 -6568527336b48570be215a8ed6c54642ff28aa5edebe0228873c55a65430ff76 -8502e836e97ae8f2f6ac4dc5eee76beba71cb16389399a34535296a0175974a8 -c44918f7c668fcb07a72c0771fa8c49ab7d238611d8c2eb17a2a6f7bdce45b45 -2616dd51ec465225f83e886237b273488f4ec220d1837272df8a504273fdd95d -ad88d197a3a6e92519eef80d7c18b31df15b9530d96f9982c1f7f870a95272c1 -325b394ec41c9e7fd2f13ce4adda1cc0cca0ad9b068e4d1c92e17d1ebbd4e365 -f7f4a9c547a81470f3ea6386dae456937b302a2e6f9c4553a39ea280895ad232 -57b00bf0b1c9c38746dd5438067ea5ba365b1a4509a29bf938f3c028cd2d0dbe -441c1e881135b7abd353f1b14f225001812697df59ae92b11a92eb68b41a6e62 -637f097d4b079e266a81e6bc30a69d5741ebc518a6bab96ee0f79b9cdebb1d35 -04f88ac6a46db5e7be43a3c290399f00e2f78da44d348c66d7d12ce239b30dc0 -8f916c875e3e54cef7f5f1b966f606d8fa3e072d4a417b3cbd43bd3b644b2928 -626f29f4d369502b63ff43c7be25193bf11216db04ddc2f39faf825a559576be -427bdb147daa9d9dc8a9839daba32fbfbc8d9fe41bae9d7b15d8106ae01e2cf0 -d59c6f8c2cf498fe7518fa7b84f38c6f4be7cfcfd0e75908650f52a107ab7d7d -2bbb6361d5378232b80edb45dfc91750eadad74c9b42a19339d0227d83caaba1 -72a43d3e5c64129284a50ecbc669f29a4d4caf634369d069118fd7a3fe12bfdf -e202f3376727ae5f1a9340d824dd8b76a517da44eacd882063c8243e121769d2 -809ff04b1e23d34d9ce5f496c7f1926cf1b0930466df9076dcd5b82c97fe1b45 -d1579437aa0820561298a96e22c94befa09929f74c067706594eb37375c136e1 -a9491f80c7a0a0fd447f078898778428309ad92d89cae7f48727d8912deba5f0 -d7b49674111a6033b67c19bb92129b7127d4ce80bce642b1880628df772a87ee -5b48f395b55aee658c50ab2c81ab7de66eaa52382fadcc60957581a4e09ee989 -331ca245586217a7e6b0f746455c59552906d8a525f5ba5a07cc1df0c45b6ed0 -95230142ee05ec75e12531f65374f78173615c913532a330659b9beaa653eaed -c0895b65d1a44304e09765cc9e070f61820249b6236194d952103f17799b68e0 -8b447986aea15ecfb780f7717986537516a6ae928648b16a51895f33adc17310 -f0813e7c715368bce559bab6c2292b42198f7f28a2ef66661f70aaad4e5ff132 -07de7de9f1691d5d1235d1e77a71403c2ce61c8f8960c262ea5fdf4e93fe87e3 -b4d7a400080f90a71a8805257c24318563575bedff7ecf2ee53a6ca8a24f8ac6 -e26c70b028f87a1806e63784542067b3d9deb6c96122c644e4052624a9f5e2fd -c04d4c1d02d39b438097040027c0b7131dd5febaa0f09b767cce35c4e4447387 -567dc3887cbe792114a9a0bbcd01c3aeeb167b5ea4e08f2e04eeb67783669fc5 -16e91b1fd880efd3b1e9c1553a2900b5f1ef5f7b6ac7d3574456eb2fb6494511 -cdf324639998efce019716334e92407673b4ce1d19dd9ff89d301a7954e95b4b -11e33d64682ee3a8e215ecbb482532e9f0dfa9859b014711a1789d97b8aa0809 -a1338f2de4e58a9c3d727b6efb754806c2cb3698d01ffda6ff4baf277aa570d6 -524ddf0898a02c508bc6684ae45ced430993828c8193cdf0091b2dfd7d811424 -364490b8e607aa52cf695a4179703ca2ea9d0b595770729228f912fd9228360b -359e298a8845c00bb1fb2aca1abdfc1c570b044bcded5e35986c484f0c84cf37 -6fcccd6374804a3d380b48a6b50506b0f52c51dfa6d49c83c9a2a8bc366137cf -3840355310b16356606f84b5da7783d2f6d6f46284f63f1ca4bd7672e114eb49 -9a2d80bf132de70d992d326f70a272c64f6264b68aa7722e7a0e400eee21e634 -8fc2524eed6e4df4ae7da2667dca0cc4d79eb78dc7db496a7f54564931434aba -a06e085a1d1ecd916fca69e8cfbda338b6f873c90f3440ff8c442646dbf337dc -9631f88f60d4efe91d35df767fa8a0e3c1db3d0053cb419e78453c595d6cb05f -a4205d1b3334183c34b5bc80a898ed9ab1cc015c65189fd0efebe5aea9c71196 -ae040a0598a301c4aeeef4864e4789b1124dfe3f8e1aaf66a3a510705f6a21a0 -cf0de7e2f9a2b89179cdd4b009b33935b87765f3bab41ab667e39b74c3774edb -443c772d06d80f7248bb6366d64b1a408044b55f61f641793436d23b35fd55db -3a8f7d0e99953a6e74338c1d20083b579e534e887994c2080731ef4f9c6cba7d -5ed6975b583022715232c005033ffb24995ccdffcb1f8655de53044fc3a46950 -694b82f991cdacaef5879fbbbc1ba7de04cab076fdc76b7e75aeb177c61143f2 -4ea610269642f4b1c765063418ebdb6e0fd220f6005ce8223f956d6755b7d145 -e734a947ffebea2904bad11b0fe43beb9baaa38108e475ff79e8ac33bc9d7138 -3feb6e6e7083fed7a31f178ba5b930f47f4c197fe5217f9ae5b64c3ee13ce1ea -5db10538f5e54aff7b81aaeee741713bd60bffc2c8d3f7361ceacfdcca39882c -6b0e2217bfe1990908c1c79c59939a2344174f73d069d0bf1279aa30f722691d -faedace1bdbe056026c8c7970def57b68fb8fc30e7a86d461a2210998c103c6b -835238192c02ceb0144f2e035fc89f160fb9f14f3a6772b5dcf908244629ef82 -30fd14e830fec7280100b5eda94d83208463e7358028f83fe2605e7dedb85355 -50384276f3b72f5895a6bd4170abd2bf25d6a6d8c165b2ac5620a3417927744c -2a9798576343f472e6edd840b3082a22cc0efef8f53787167273e0cf926ebee7 -868803e55a266e761dc6ab8f7722efc301fa93ee781e081f4f58e6b6ebad140f -ab33411eca49b23928a425e4348cf705a1e0f4fdd320025f3c315cf0da1170fe -1a13ae53d45b712a3370f2e68051c1381311cd34da1096e7cc8d2c8e018bff87 -45621d8452fd40edaadb9e5d4f89d92b51f8ed170dbea911ecd14ac32be75dce -dac5e26c212d389c94cd67126b98cdfab76600fdd7f36fb51813987daa38bab0 -974d2ff8e114b529a87d187e5d6e782e8f4f5e01342a5d8c95131a799149e496 -9549a3cd70a85c5e69894ea8b544c3df17e4f25d704b96e1ab28aa76babe5b74 -e39b799c88ba47826dd52f55d7840a32481524a5067c247389bd392e80318ae6 -cca790fbfd0d7c6ed9ed7523b80390e2a67d5e11d03cede53ca91580a4f90e83 -17fe325ce9f63b99ba9874c84cf44fd1b87d593bea28b5b674a643753758f9fd -27aa8213e088f885272f0cdb0792cf315ba0b03ede938756d26a025ce9f682fe -2c6cfd369314eecb40063f24f365edbeee61d41370bbec9b08665e43857ec274 -6516dc151c4fb114da529efafe44ba73a2675d1d19b1dd9e696c380379df7682 -42de54a93033c757441b7fdfa404678109b0034c4b4777ff05f4badda38c5b88 -d6c1ce1d281521ed0077f1bafd0426e63b522c3ef1eeeec9df67f3bae4bc48e5 -15ba02efc3be471c0ddb42372553ebcb4863d6625245dbb6c0eebb15efdf7e37 -27335a4e3ad99e4f70e57e218e749f30bf9c9a20f172c40f0532dd17d93eaff0 -911ffbee62309b59cc549faf8048f56afbd6936cf686514b16bca3113d17671e -15731aa12b2ea9c46f887180c3885878a4b59f965f15e1af4cfa20f1d9fd84bf -7d21d8488356d638867f2ce794c2d1b836bd471bd561daf63e1b427ea3e3c371 -1acd9f55e8fd1d53c279f5c93a2da8a8aa80857f1312d2e9e418ae4440a7c4ad -6216861f66844f4ff36f5ccf37e96f76706f8dcf7d2a8b6e76a8bdd30d66abe8 -6846fa3b8d5e8c9b516457aec4036b402bffd6913d24cce8714449de2ba50848 -6d3f3fcfc5f81e9f85c99e20cd7551f1f0b63a04b5d8d9734fbbcaf55b44897d -621b90bb0f3039ef877c04ea5d7c747cdbc9c25b98df15c1ae3946453ba2b8ea -733dddb19f5a1f3ddcbd8d0c6bfa2e4b914249156d26e0e0bf16a088a9eaa107 -60fcbf45dd8e9d8bd7a837c3e4f840e1d747ec1bd31a82172152819011c53c1c -7f2ddeecfa67ae102bcd5b12532bf43d6e1b515b27918c89c32d4df49c3afb6e -3b719f37cf1cc9bd04c45129bde8b221f88e10cef81a75e890543f0a65afb387 -7df9dffbbc8a0bf424628a26a48448e17f180c4dca4c25daab5f4b5fecba8ec6 -24d80359767b2bb4dcc58163295031ff07ffe7b73bd22928f63c62c2e556c419 -c3aa968ba13b7bb559197339835490f2c15d7617578787ceb25e01cf3c7e031b -607a2397a682db4b4ae408247d00136abd2e631c85653f45c833948b48aac4b9 -ce421dfc528d49cfe98ad6f5bf332ea672288b85520b13efdd67bd326a10e118 -6b9e7026afe8f70aa21888e25b6e28ceea8dbca35e168f23aeb233a18d291a34 -05cf105b4bb6966acf3a2ea3395cf406dc6271a358c3cf51ee3f63949e738c69 -3a2622ee7dd92ed867a3c279aa260499e75ce46503f33c62a85404c6715ee35b -861357f1e5ad91e1779f474165b3c61b3f5cadb6e38af59fec5eb9fb81773bf9 -83e923c4a9d7aac4c64a4490d575030e5d1d2c788de808e626968374fddb4977 -954430d7513b84f74d7c16755027fe46e5b9ec95cc3913dcc28f8963e90cb00e -ed7d1af4c8c05c52f4f799aa42dff81ce677d750aeed905ddce7ed886f1e7ca7 -ad587245d7c74f4b9272860b36a76701b184705e7e0225ab64ccdf3aa20f102c -82ba6d86254808c33fd7205f340622360844e19a937645702c923faa2dbd1218 -ee5a8eafe6e66913d3a895ba65dd825c7dc1b579b0b8f6d4bd47de45e5f922a8 -25b20041f7b8a1a55281f0fc44b149f0e346e0f3e1e8fdf5634eed22537df9eb -40d8c8bd63d844ba24798ca2060786679aaaf1753f2350f12c3a984628362db7 -f4df3e4ff03f14be6ca123bf8d4bf43817df72c92dcbd6234c0fee3b8bae81b8 -5d7495a6acdff5033bbc102016c267ba56013a739c9ac62dfe9fdafe427d22a7 -1fa02c29744c713dce48b9e52be12797084cc12dc805dda41fd60578a10a9f2f -0a51b5efa3feb126888d0430649e858dcb9c59a17872602334edce0a92336f99 -250406dedea2e1b1d3f8031b2eca7ae2e96973b852c90b59878faf06286e8dba -f7b1ff75a5454235035d1d68158585cb5f08aa68b4c5971ff0499f0a3f491d41 -8e2ed07b0cdfba8001740ae437674704ab6378f650d84b6b562bf346d5b3a338 -e21fbe69d330a12d69703a6625fc77e4eeed50c3eed7db53553e1183258cb374 -25c209961144262d9145735df60c1e3cee6c21ea9667d328aa6424dc1d0d4c31 -bdfb91c001b3b9c30e6343bc3e6af5148ef219e48e9c49e2d9f8818b86e13ec1 -ef1ba0e04c9a93b509972038925babe2964cc034d5947c9f8232fa9a40999fbc -b26adb0ad1a69e25c896c97307ff214ff08b76427f982d0eb9eedd8cf2126219 -9758b2b07735c086e9a6dd43b4094d320379b3ef0c20bb9fcb691a6fb40b9c25 -9612905890f8fbbe837b1edac168764ae7721a97d9e0ef67424d2fd6166951f8 -00097747f5db43cd16c8f0a5e2041366bbfec05cf950876f7e4462c4231f83f4 -3f14e61553b99ebfa7ad033f51ecf10ad964d71c18b90e360e208ee79f86b722 -d6f062498e4294ec0991b318d18270374de5212418f54a5a1700a19b23a31dc7 -b1c4bf77bb4c4fb26d219d87c7c0ac10a88f65bf5cbb122cc250035499ebd3be -7b839f311cb67349e68cacdefcaf9970b1e22a120ba90bdec02374a7fb96b232 -08619b8a9cb59e86fffb65f1f0cb64579de0cc5b4a1d428c0c4f4b46ce3ea0c0 -3a4c815b2d210e3ee18f1c5cef74ec07c3415f2dee72c7511cb479e78d3a0d96 -aa7f15360ae7455210f4528a18d74863516b1c688ce1e539306e260fcc203e9b -5af0c06c3c04fade53ed1009672d75ddbf3358396868c2225e9460590590a37a -d9b361c5872562a91042a635d8531a62088d1341f9519903f98e339a196c4e2c -8e6ed843cd24fdbeb101f09bc4516a7cfc4554320a9318f10448fb9d10c45939 -050a55114e979f4cd9473af6254311e3f50d619d9f304df427ad53ffddfad0c2 -f849b4ea37eaf66005afa5269d435d1b3362553043e98eb631d8b4e820e9571f -88ac251d767e3e92666f3c0aad0f5a5901dd5f0a72a44ca5f957b40bc29541ef -5c28f10e36b8102e5038c96ca8a7cac9698d6f8fcbb82bc413d364e3bedde064 -a77e2347719c840ee53489d836646e8fd4ac6019d00a045157bf223f32f0e68d -379965445dc50bb7b2c223f2aa12fffb8858197093319a10d3203038f4e16c04 -c62294d51a206da6ce0ba74e5b204656bc172c22cc2404f882e91ad157bf4dcb -dd619aeb837e0bf53c4328e57e5be92943a9dc6f2c5664255d7872c976386c42 -5235e3ee2671789c3c32b7d5e7fee0262a43cde4d3bb98d2aab133429ae002f3 -b71c2b3688d9297cef802a2330b12b1e03989fc8b9d1dbc91a7bdaba94703525 -4efd991952a2be03e1147e9b5ca770638a5778a7a141a705ae4ce474000033f9 -e1ba21d948c4b016162cfff6bca97a7f8f81cc2c22f8011b0cb74e4c7c92ac80 -c7c53ee9c0520d2c7a5dc97a78fe15cee47994362c65210336de52f9841b8d09 -4be1aaa04e39d7f66d0c4d01eaf270e26eb38e09c8b303816c34ffb8cfda9f41 -c03d95d95688a154c087930ede2dfa63ed8f228e3917dcc8722d1f8636305073 -31d43ea9b53230b0d0797013e7604b528215f1a128cdbb26b0cc3fa43e3fe25c -b57c9bf8f8e290586e27924cd20025c54d6d8792b4fa52450684c8d0e131aa49 -2ab0a4fec2d0f91f4b81d74153b5e2e9bcca216c1b49bcff347c57a727202068 -0e040eb5d5e2479209d7e085760a7604544f0e1b541bbc73431ebd722806cc24 -505dbef65e4ca3457d0587c4d4fccaf7f14c31b5cf62ae5f0c08661c9f5cb386 -ec057c82dedeedd54c8f380320831f2d6d9094a5d0075a0c5c203be292231353 -3aab44061f0c75483c8c90ddfe2de61eebaa5c23f3c1e14bead51e741963e5c9 -393e8c906adce443244f5fd6ad7ab164ee9a217e609fcf90e5b8157d27623d62 -a803207d9839752a19da399e82082ded26d15088bc3623923fe5d5bcdc2bec1c -639e190dcf9181e90ddd7a07c773e6a0511f1e268acf8d1a0d985abab4c95363 -c88093bb9f111cd66e7b7d8cd8eca3407fdd45d01d566944abbfb99bbcd5602b -dc8e250247dd7a37f4389e94c1342b5e6ccd99ac4d62595b91b15462dbad20b6 -5bf5fd83a8d8864cc9e75f018caba8d7feb8dbe58766dc0a06405ba89e39a6dc -a302161f88b641a7427aa926d438cff5b5e463309a6cd2abfea827a512d03128 -ec1f323c8a92929a4a6f63c798fe0b73fe59ebcbb1e4614c2d3ea0ce81cf5cc8 -8a6d82334df23cc978d9a97930cee6f567067f7c3877cd46b672d116805b1543 -4a019e47fea549f9942732bd1537c24fdc2f1b0780f7c9b3ef7e846906abd277 -82e21a4a8456cd0a880174efbec65e6eb267a94a9e0bb6bdb6c1c4998d7523ff -eca5ed22cd608abad4f8570d80ff8cb65bca81b09536ae22a0925ec620cfb875 -70ac3a8e19abf258af93113ffc08aa07f0ef6d751440d874b3631f8a4bbd7721 -9a796911b9dbc0b2e1fc5768d40cb8dbcd38ee9f970c35bbef52deec4582d18e -17a184203a891ef39fc8d56c29ed3b9010bf9092c8afc63f072c6ae93eeb9342 -6647475cb38c7a634dae53b14995468e4e39464ad9829b48c97e78c580ac32ae -b2f5631d37bda7f69936d4cfe342279eddc7ce5262969c87e74ec6c4728c82bb -eff94703031bb14d7743d97690d7a2ff863904ebcd94d1a2fd7270343f38355b -ad318250da6b388c644a9f62bf59482d7a7161f5d3b65ad5b41005bcced2c16b -c60f81fb3b013544a32c81c2f455f34cdc12e195fb29631b613d0db8fe3b4957 -a49b3e0382b3ca954a0c135e19cb83b7e29c7904b5852641bb08cee1bdba5a09 -f1f03521a866d99a6b5e670351b73cfb453263adf92a8677de8067ff52ee5a63 -e9ba822e8a11dcbbfa745caf433ef673fbd0e6c7d28f9d3260e2b2d75b888181 -3662efea0548a4f4c2ea1031376182e12b36987f2afbdf205af3229b7e87b20b -6b334fe8615d13b3c640d25b5c822a2270111d964e4cff01f36d2df200f41872 -29389c1482c576422c158fbf2405e3dc0d87d76237f6666e6e89c46b83289a9a -718686fe767577688e8524474e522ba5fe3f6222ae659a12855b295d408b7da0 -042c02087ffab03b422ba9b4bac8c39d08605624026e355fe62328d4df8c5d9a -63e3118bdd69a142412d43f20d23d990ccb50ef669a76a9fc3924a64fbd9bb39 -fda7015bd5b56d3402151be6c4240dd647138bce226f7ebb9b723b3b3e6b3b27 -4da0d1245dfe453bd9ea5fcd36eed1c09e800b20eb206e3f1782d70c67a82d88 -10451c2cdf052ef603a41d50b90dfa15a5e967c6ae7b505b1136fabc9898c004 -5c1043754b8bd712703233855db0895697dbfcec02ef25092d073f37f8f86fd5 -e647c80b0af65453bdd645f92209412ffdf14cb48b7daa02781bc981d89e075b -39c7e8251d2d384835691f495b3d5a43557f1dff58b935246c2c0b715b40d4b7 -ed7386bcdf5be2beecdbb223dbf57c9a06864f399d4748c11b89760579f1e420 -a4e8c67241a8348ef3bd04634b9e69d5dc5015f89b10f7580a008e5dd424ffed -60f14a39a759a0c05e4bc3b1e344feaf613be4e1007f5535a7850832760b84d7 -3391a60001d472449b3e4920f46186d0fb8c8a1b96165e2f463e39e289274985 -e4062504ce4ce8b24764d050c371e6545c3aaad645242e39876fa2d8c8fa931f -73d56e5206d47649cbeae14ef3187d43f6a3bf48bad527f6c01c8b1287edefa1 -1016690d1f50d310d463f9636d6f8514a60337fce30e6d72ddd2f381bf2bbecd -d416f7ad7338fd928296aeb8c58c33e08737974840b690f1e8d6c46928fddf4d -65c07eb4cde5f6b5dedab807a67ee995fdef7e7fcb285ea981e0877da1b8bc42 -fc201fe269c44a48be11a5ee8a365b50760c477e51005db9fde781c080f8ab14 -44181e4a0bc80741530370fc987e7eed25cd1b2de3bd5c53e0cffd67f24f9e2a -82fc866abac0d9e690a0075cb623a625ec6154da7bc0c36431f20fe0a8df2fe0 -50cdb6c3d767b5f640833e7ff56016665ab4d42f28853f5bc2726de5a7372ed4 -8666c51df290f796fb129d441bff05f661a123dad14e5b8bd3839f0de22e44ad -77cc296603290f731b23a695b45f5b930a8d6d3c6783466226fa0a20ff0ac7c9 -f63eea109a17da0ddf5e1356e23c37528776ebda66b0a5ab37b7aaac291eae01 -aadf7c555a4fb77722c0a527b5a711188e28944494ac58f58c6dab6df90971f9 -9ed636c4eba0dbcad659aafc776c3efff28a7d28da972a8bc5d8eeef3b7bdcbb -8de66ae1d2fa6ec3eb33c37e632118bbc8dda3bfa80da3b7a2770908fc4575ff -de9b1db2fa31637a13f8b97e73a55f7a975fc836eead6dad2453aa31d00447d5 -6350145197d430f8e6af1246a7d605e7df7a5ff4fb58e8241469481bf48b8436 -31acf36fd14a7de24d3a90d681246d5bd65d31dcb7795f2c9f6dd3f04ad330ab -37636fb9da5f27693b7613cb6268d36cbe13f628cbbd5257f2644b9be91b69f7 -2403f914beb707992fcc653b96fe7b23eacc1f46c325bf02427894a28ea28e74 -482a2585f57f4cca2a49fc473b73b2cc47ebe014e78f9dd868dd4c63923f660a -0d465c1053e7a6dd9138ddead25cdfe5f3a211d6f06e2c19453b405173a814a7 -5017f34fb8504208864db35ea2406c19d989e65e5417105ddd09fe62ddce224a -daffb81a19999b0459da464d3d10492b62c12d085f4381fb91b597f218b7fc1e -c0418a9292c6d2fb2cca2786b1b9a5cbd5edef092b5a3afa05d09e6e59a70f02 -1346ef208122d8c8f6bd2da33609aee5917f0c92fbc0941dff2cb3df9feef235 -4efa7155231d3403ce8211ca2786915280811d9dc9275456e491331899265c69 -8b3698810effb9e6e6fc2f5b1daa88e0740f8195cc8de64711be512f43128d28 -58f130156cc2bf774075a2b0bd3a0fec0729494003d58fdde93a2fddb529803c -76834d20a2f0654a56d1cb58ec344aeac5bb976c694fbb328a3cf9c355a5ccfa -3de62645b792d17c86e64a14465c5d29686a03037abb8eddebf2c55c94e4d984 -713982f983d942b390674695a46485ee6eac26cf864348762b018ce478fcf5e1 -c434b8a26187f6707c6963a933c1e7e5addb9dca4d5e9f5ea43a40c43d068b87 -f3d8bd0324f2d10f52d92da826ad20917b039076bafd236881654a5abbae112c -7fcb2bd027c96d69fa1224a8108d1b7caa4d4b03f813d461157a7b5956be1296 -d929e3e3e5249cded2fe79950e619b47b99cfcf0ce26e6c5135ef0d5a05662d9 -24d57e0be99056aea4094b3894b644585ecc7a6f016df96ce3fc1ae75635ec2a -2761bf9402fa697a76e326afb8d7ae5f7d375d260ce60143a38913a4e085381f -ae19ced0d207c80cfd0da23b999fa947408f31c00ed5046f48187ffa4a9dc8ee -1e410719a9e1fa29f15ab776e8013158bef0615e6960273646af89da0fa935c1 -8a7a1b67df2b0fd72b42cf02c5e916b0761e89550303ff45560bcb350b7e9ac8 -0422c68d1e34211212999f5a99800c7b103afdd7c8c5e32ce86d906031418297 -415ecd921c44e3d65759bfbecdc688167896374b5cd91a64cf08e3c224b9f22b -06d26bd1bb52679fb75e2489027a7cf868ce7fec588def5493f6570d2340a2d7 -61a6272402e9d29d02546929d02ec741a4f54c94a25ac1dc87b8f2087e4d9275 -32d6afc9597fa33166e593112001404b15e1691f002afaa8a4fe0fd803adaab4 -ba64ffbefea2acdb3059dd040b2305997fe7a6fd78db6e47e385af2cfa834af9 -3cff1bd3773d6b6d2f303ef4950825d6c3768532ba44a111af37f8b632cca18e -7325171953b66ec7ad79eff3b69219cb31201f5bdd8da70a8bac1df11ca37519 -5658f07151fdecba4c1e14c375de60affcee4998a0a377587f54271bedd8b226 -ab3c9b3638b4e1f4b633120aef8e4a2989e2925cc84c7281674e7089b71bcd8f -da8d1a26cc2181ba716d80be532578d6798584c364f9220f1725670c78007454 -0ece6487869cecd8e66f8adfefcf23cfc5fb8f1ce23a5e1e7159493a78742f05 -660bb55526f65f17eb255e84cf0a5c0b6b98f1d54d7fd00c1f8236c60c596f6c -28c7adc584b38671839b5847e37a7017f4f7857e31c3108cac29640fe9cc2ddc -9165273404769a556bd04c3bf5f9d76627603543947cf885de71f44c65760076 -a889b5b2d3511219936476ffd38e2d5e86fdeafaa17dd36436ea3dd6914e812f -b1d5d0333a7ebbcf6e908d334ec8dd335357546e241e6f3064251323b2fd746e -54d67d5e2d5b425cbdf89105b0c19ab4cea931a557f2d7d488009fa8685a1c78 -57f58bf6f62a8c71eae1b8944d78df9897dde68b628df2706d7aadbeb2d4a4b7 -561810d4f7e1988262f7460684575b38f13c4680c3dc254c7ad5bf5bf200950d -857556ee412c33b42820f740ad368a8392ad0605f16692e2c06b78ed542729e6 -d399a052823686f83e8c3f0e0befd2e7405c52e1d083c13e9283b50b4a834249 -6214238f65e52491566c183d5ff36711e6a99eb49f5518efdae0743467dcc32e -4d4c92ff8de5f8c649152d48106228117f5c160fc8bd2c69b1dd365337722742 -2c59cd0589bf70287b487799df5e698698f4ff13bf4618c63c2b0e000e57aad3 -dae45bdae9bbb459fd55584839dd185f48a75687a8192f3a63d2280648e9322b -02b9625144e67c6080f0eebb7c741968736caaafc151c4a9a1c1395f31b61ca9 -004eb39a789a9ffc247a249991106df6e1c52e40e4533f0fb6087a59080bf55b -f197ae35804870900129d9a941004273ca0065c42ecec8cb517609d01405ef3d -b500f09d410e230f680e12e5cd607cc0d1edc63e1845fd1bf3d9ba07e1b7a5c2 -eb0accd178e1c0178ef55eceba43a30599a0477fa4f8ca397b69ae64f6b6310d -9fdb875a00545daa9f0dfc0ff9fa355a9ad4b08d08ca7bece29a5d3a325c1463 -8f38dfe12ccd5c942a5aca6414a7b04c698c9adae4d8d43732e41dc0f04da349 -8bdf6b9f3a58296957d88f217d5c46f45c7c3a433ff9c355a5ccfa3de6553bae -ddc411e40b9f5e95cd6e9f62dae79353c5e1b874f6677bc593d2a2a07b1c3b20 -9596abb07ee8f71212674a53b3a604f5af5449dbcef830433acdcf845e44d879 -fc619fe992d5f6ea9b0cddfc24fe223e7a357cb0d5771cbd12bf50851f400b49 -9e55a3efcdae3b6d6cfb72ca9e96f9355234ea284bf70abc81d29bfc928dac80 -5eaca5ca15e3b8303bd3710a1eba32e3c13ef7641c7637afb5cef5dc59902e6b -aff4c7ce9fae89977d96691d306dfb9a54bd8b9cb8484ae4b50f7e2ae5ade3a2 -9076c21e036a78c3d78918c529b3eafbcffa7c842dc917f162fe68179bb45b4a -75ccb684f7c4b5a6d5db3cc876537e4b643e447dc64bb76d9e74a3d378517880 -9896262b00893cd7474bb605994df0ee028f4a703b4ac00ec95dc3ccb3342835 -418a5a158b4e6072a657a7e3d2728c0f64242be6fbcdf27d5093139fd7bc95d9 -89320f2ac958c06cec8fdcf56596bbb45b18abf2c6b5b891236063441ba7331d -613c0f1de49f50a839bceeee1f2ea065fa879f50918c6a3280bd7bbf1e366e27 -4d5e9e0a6bda5a8768f72b811252f40704a1190b5887bc5c586b1704ff1f7d4b -a8ea68ab335a506771a681f80dde3b8aa04ee1bd6cf881217b829942d0282c3b -e262314736557d8a43e8686f3280d4c9aeb9fd78262834ea5569a233d459abf4 -5e50d17d666d3e9caefe4f8d74710aaf2497a405d73fca9e107a922d0a9eea59 -6de7f71ef541a0a5b141f786dfdd1861f81651f540f82505b3fe83aa32067db1 -13812fa761a7f3b28342bf1ef531746b033232fbd06a12a0b80a9e23571fc1d2 -184a850fcceb331ff7076d3a03e8ed50991837925efc91e1ca33491b36cb1aff -2c1c58338fccc4a9f0e298e781afb718990cb9eb141c6ebbebc79e437b52a17b -0b4a8cfd0da2f9401ce9370a1ef04986793a67fea0fc96d8eb325cf73ae51c14 -c5030d9a8340b8b33986ccc325f93903c0928af3fb3766c8428fa690cda94c97 -939fd8df41abc0652e0ca8e82e048b133aba600278e3a227c4eaf8b557856ff9 -e6d2fb6671ba75b779e90f2bee7e349ec394ac76e16c73509b5e99d44fa10636 -ac63f8d546d5eba3c6bca7b738d4338134d2b79dd8436932d6ee22e2183a5c07 -a72f4742edfc2ed11145fcf8a9bb54313894709b28d214fffcc4b917e0c389b2 -590ef307e3ebbf0e42570de893328dcfe81e7edebf72b88ff1a557e2f038ef1f -8c25c68dd7c037226f7dbab36cf73ee00b92ba6efdbf9a9e0f4a7a91853394b2 -a02077209350a2b61d4771f338e739c5382c07e18386e398b2946ade4c3f0a44 -ff6f333d550ea7db004654aad32542571febf3c31271cc5d167976c6407c7570 -115bfb3f838701b58b320496c39c59553b33fdd7fcf135bf4d849b130fa58739 -6a983a93344bfd37afdb01b18232af9f65d5e3f5131bdc40063d7916a2b67ade -09e2fed7968e96c6ffdb6b41b0a7bb6b8e93c2ac4f1b466f16e219321c9ad83a -8027101b3d007ed0e43594efafac9dc0e4764477f6328ef0936444bbb4fd20e4 -2ae35cc3090ea9ea8ffc5a85236a4597f661568964f6a839650470f79eac69ab -e1794cc369c4183f66715746b9abff4c151ab6f06be72ae63f41f5f806b3fa05 -eee4f22990464b7e4950f5654b36b7e3158a7b4ecd4fc7d5600c831ea7521df8 -e61c5f5a3942eeb82e06477461ddbbbc9551ed095d78309f0dc9465f88e70fdd -7cf599e493318efbb07aef45a81f2d36111838a736b422891c562c933005dc2f -99a44557c978e4d9da41d3e2c3820e4a40fe28a8c268cb593960058f0fec18bd -c23102a74807835b1244daf8bb9a7553961977ea5a7d0e8a59f58b868c9daf82 -5c4cca4d84f4f37484b6bf8c1da54c5e089d3cb47377a99eba19e3e81a13d2f0 -59c22952aad0fa4f3a4d82478a06a1913b8f2dd141e776fdd43d76fc9d28fb93 -d198f84310f271baaae7e44752a4f8fd1ab089d3555f9d7083999bdedafca730 -50598a2b85541f071716d335c793b55b007392a1f757469aae1436de65d00f07 -66e196c47010731b77aa457876cb8994b97e20991af4e7b47bdf752f59c7e6c1 -27f3043e2b06dead3d6fd024aeb2413d1dc2ac897aec8c2a97c848d09b102982 -06f2dc08f0f0ea755c68a0aa8062521d34f16beaf87d359db9cc79faabc3d256 -3cae31022f3d4ae7dbda58194866a7a29dd34f17a4d9b7f7987e01a6db74bf0c -5e0c53bd07af310a2756f22c1cb9bf2a0e1a57aba6753d037887c4b65a661f70 -b2d10fad50c5ffd365d3778295d880f498ff4950257e5ce855161796989611b3 -e793c99f4e12e947b51643fa80b129c6664b283c100b5694d2d8bf60a3213157 -a17b72080842b4ee055d0860a801d930d63e5354f599854b5a142f11f6b78717 -8897d66f3f6a3ff20029ed1870d538076c1d4fa4ece214b0075ada5cbd5f4087 -8975b21a79d8a67be6d73f8777ba26c18ae3b8613387b25f43beda7a2c9f6692 -667015b80847d0759ccf2ef45aeb00a02d63f630dc6823d5f61e91b410fcbba3 -677470b440063d43bf734b16ab45a42b698037ca3cc5b460b563467d9b6f9453 -d31b47822f6fc7fa1604e77d00ab1f172bf8f4cd9bde3635703a4166293494b4 -37f032570a165604cf5b8b153da54077095196e55252dfccd90a8ebc09bb7f45 -ada3560fd014a844b2d9bae654a533733ca8ae359bd7537c60b52997e10ef2e6 -f9a2210dc484431af83a956af66f06646d918d2832ecd425ff9cd8e9268557c9 -efc84868728aff4d8174e6f85135c11a6968b13f7d8346334dba97a1a3f0990c -d1d2bac3aa8a5c294e4d0d67e893a609189383a24cd3bf86c22720d320d59a6b -5e543b799bb5d45fa9826b832a809026d104293f363200780278d973c9c63492 -8576754d19d28c0e4058684cd1a71a919e5814346bd40fc15eeca1591e0a709f -f083b86841f04cdf8aadaedd95f26fb807bd09886a011443d410466fc6bbc56f -95468646ababaf39887f25e485776892c89a6cb7bf5d20b6c4e8a0bd65c5de90 -7a988a3e2e39aa721dd03ca69608d59cc1e8a1d2ea706b0426622e4dc6c94013 -3f979e5d141f06fd2051a54d84fdd4c7170a44f81ac786d258f98893bb4559c6 -ac59332f599dbf644367e28fcf01da3e8f33b14f8f83052d9c0af2061465b059 -5a923f4567274cefb60341ba793ec77e5d8c7f96bb88b63591d8cbeda48642dd -c631a115cba7694f64506c787271a8c9cee064d9af1ab39cd121f7a1ff1c812c -903aed1a0d13791c051ae21ba92b5db47e72e7d6001fb31535a385202edd815a -40bcb9937ef719f7cd20e30fda23fd356476d22ed6c206f15cb2a78fdb45389b -6cfa3cc388cddb82886b8eedbd9447a48844921a51d4cb19921c3d42e58c0173 -5189ba388aa32ac9b75b5ab43e428b20957bf253a117efbdc6d9dc0931099af7 -eb10790dbb14844be86d80c5e1ae17d0fa0f73703f180effa98dc52c5a8a9740 -869fa97d0bce9fb59b36a960315cc1d7264f5fe730a397c6ee121021a3c82cf4 -bcd40e844b78f99ac28c27d9c4f4c90cfe0062736be1bd39d45592020daf0b9d -91efd616232a6aed299c9a01388e0460b46ec288d4e1cc5b08769ac88002094c -9b680abb4d3e0823b0832d0d60d08dd7e1a27531803b26f74966f6f4fa2f4117 -2048782c3e3ea7744dc52e7113d3e290d309881514fb40773b1ec9bd7932f7b7 -42c3a3dd44ad5207b89125d7a11aed1a249863a6e537c887b00161ffae6817d6 -269d93d4752375c48ad0a598d2486f1a173bc55562bc889eee0afac3a4b12fd5 -cc2a57080eb6e3880e1e2930fbbf7e6629c428a1025966b47ddba3d48874e8b4 -ac01d33158f31760d82a88ee60be24a62fb5ad9f24254e2198d968255d79e4df -206d37d52891300c669855a59e666dbb4676c4ec6fa988d6378ce4d00892c711 -3fec62c89dac139cc2b77a954f6fe953064c52a9345df309d8baabbeb1cb7910 -5aecc2f99b451c1b028a81d62927e2c932805d38cc8ab7aff70fc84f944d3fe5 -12694fe2dc46e548177bb78e4a51ad574c30f29145be59a24faadf91d34e9750 -1b1bba9cd1563e7e339e9d8795a3cf887053f1ee7062fe98bbc2257e8a6a964c -d8542df1129217515f38beee762ca45f9ac85c4497afc6b7200c540287d85c40 -7dd6cac0ae86a4d324d1b3fd2f249d3613772ab3362840a78ee8633b3f89b46e -b6749c008a46eca09c3ac738011772215d2e61e59e2b35b0d9bd012378c2e8f9 -7a58b7febc683901bf086f32282a9e539f2816acd16d5b5a0d7c26372e1b7ecd -d64464cbc518da0ab436329afd5f6e12d0ada7cb9bd84cd2b6eeadc4b966e2d1 -33dbfa0ebef84b45019f47c668325dd037f85dbca5fbcc54ef9aa710d998f3cc -df1e64c0809bcf0386de718201cb3c474fb5ce9cb8054ad3394bb6626f7eef64 -f60626142f6939666fcefbc920932d389770acb70180dae25a1e06fd6be4f45a -07e382d0c055447a99dd7e0952f24e89401a1c15a277d02dfb6d31f41ebcb754 -2f4f608640ef289ce4147dc1cab77ce02b1823a87bd46f0c00cefe0191d68573 -6af019569e89ab388d3d770af3f61546fe350adac3337713bbc091318cf92de1 -7b61ccda6e28c314cd2d6a27e758e48dd6038fb55c6841dcede725a1a30d5fda -87a37ce7461be94135e94dc72c976fc326a32194046979c351a53fb544d1ea5c -dc87382f3e020e019e03ab3ae26eaa4e64256cd32aa1eac38539d04ae425e1cd -e4548d0c352b680b4922b6b407856f1ebf6f3ea6ae68eb941d914d50642dbf74 -fa2a8df6b682e0d53f3b21ffa7225b105e359f49488183dc94cdaf1d7aa849d8 -88849fbd3bf680dd02198a557e768668eb2fbbfa23cf3af7bcd76940e1329b04 -bea1e1da8d71850e11eed811616410e2f7db0557aad2d531e1d3af851329a38e -96b192d5ab246fb72788f99e07d22f9bf6c35bd15036db0fe66364654ca2c34d -4aa14542eab8d979311725ae045f9af9790b26f13d0e447b3f58a8b817eaf26e -f9ac8938054c130583237c616a5f3be196c9252a0621cd35183ffa748b0c4e23 -869a58dc345282066b213b441823389934fea2e40aba453edbb936ef4695b6ca -5734f49bf4c21f0c66287df7cd723cd1d0e6d1ef02514a89a0360d6630f41781 -e06d5d12f793d64c257de894f58a074c06e4e18a5991b46af372e7c1065a9132 -f88a83fdb08a4a54b50d4218785e15b6a86d90b7ed621302558b510c0c205100 -44c2ff47efed6ff373b46f1b1188f96da0b38b0a9430e571d4dad21eae98dcd2 -8d36affac5ee640128374d182d451b3aed3f2e2080a1531a2723ef40b496ae2d -f0ba56582870fe7ddd397548d59042d981da2c5b15c2d3cf8ac934d91679067f -e601409c220b8a6647414d0b73afe5e96fd5106f9e5c9883132953083730f75e -2947bb0a0ad58d73cf0b0ff80481d2a152262e1b024df4ee74d22e9933f1f222 -f389b8367ec1d5200c70f7f48079fc559a6610e483fd55df95a8621c4e42774a -0e978ad53ca8466cdfc66e1eae6ea5df41dce8369b40c6aebe585f4e9b3b23eb -19139f371c9565ee85a2d8eec6e0c48ac857ee2660ce13eb5cb81616649953e5 -53e23fc2fcfbf98a83cf202cf6ec7f3816e9d70a4f86391e51327e047315f653 -906b49384b9c069fbdb27c84521aaaee74e53055897cdbd167a7b5d33b8feb24 -aff3e22b5d9da4966788ced11943e209ddd32f3085aa28f2b631e56693a390a1 -74b5cc902bd67a2c3959dcd84a08f8ff2dcfbfff5f75e2ef01c9fb619117fd97 -f8682a84f0e718362659df2d082fa8d9428010a76268380f525c4a3292cdaa9c -475554ed161cd2c43355af9350c3fbc654993a3f8901391308af9bbb1fce0813 -7592a1a4b271cd98d094d77ba038314ea68a4e64d68b0165bb593b873b24fe3b -8a59f22ea3714023825140e0658fb050e8c4e32d85e92cc0d2eeeeaff00c353c -c00483ad71627438a50b4dade6b0aa1caac73ce846581b858910486820ad2190 -33a9a108a502fa6ea60b8c85d1ec5c816a325dc802f213ba6bfcbfc65306d07c -3202f0d42fdbb7b62fc6eeace31837cc024965695c529e274ea638ea2a24847a -db9eabb31283bb13944309c17e3615256c7b95d8f99f86feddc2c7a566e4dc87 -bb060d88c661f589080fae039f4fa4b5b611caa6c65455dcd4bff9ff89b63f60 -5dbbdb21c07404e02688b7f92a8373ee1a6a891bf6c315b793a9fe81079c1ef2 -804238c72039924ea63039020363282f24f969f6a1aa10ef2d9e7cbcaf53c9cc -1f0925637190af45c7aa731e7dac0f091dd22e5ddab9a8dea87a0269d5343ef9 -f8297d133a037679c6834beb8741396754f2dc5a89a1621c13722289eded1880 -c9859ce2a9739d003bb874f747abe3ab28d79930680ca53ceba6db84aa3eb869 -0830eff19972d32f37eb6eab0723478f881127a84536374025a782a7cb24f90e -892bf7b8b9a44a237779c4cdbe5325d3e67cd11ff1a58b9d69ce962a659486ba -6649708daa2f7a0cb144f6b11161501464b7c7b20659f6e5ab21231aceb813fb -b30f9d6c6afd24d638ece5dac5259af8eeaa46abfc1d6f29383188b4ef4d8e08 -fc13a8cb07f61f55727619cde4f86944b879e23dda590ecc57f312c9d6d6fbc6 -8c875291b617f8040f4494323cb93e84f2100092b5a0527dbf02fe55175a1b8f -7b8b130de1ee8d39589b7489f2d087e6f865cb536b595c552534475f1bae5981 -807cfd89532d91a6316154dedc1b8fb3f8fa0270651107c5ab24ad8310303d98 -39b801b2f0158aca98833b79846369993bb4a3a715afb6eba5a2237652b17d60 -2dbc21281bbecab7df65812e9ba59b78f6e3f6248d5cbebfedde90149d823635 -0ad0a8cda735b701534eb682dd2261883e19355d6e31d980265351f1895cd212 -a8a006a6953dff2ff7ba40d5263b6547b6cd5a5317bd77c08364987424033bf5 -bd9dd20c0ba69bb3d25df2ef5fc06092981c2f57ac3d38b93976eced658544a7 -942cb27ef9cc649835863b2e14a4390fc3e5bc2c0be8fe2a67f1ecb3d4734636 -6b29b60d7261a743583915fba3c8f832c4c41bc1dff13178f2d61832fdd13853 -db2135b4d92b1628b80f3baca26481a48a9e0d0847e4c53427e5066816b474f1 -052fdbf71f550738c13f1c3ab27d1fa12a11194c145d90f61e4ef2a1fae0d25e -6974f191d3e1106c406ce4fba266c952faa505954f6ddf00068422eb0cd4baa5 -34b06c1805468d7fc0b88a491b48a393c55726d4941ea7d869b239a69565a892 -82e020721bc7ed828c88681584e0c49452fa8f2bb88914491074cf0ffcb5fdb3 -628b292a0f2fbb488e96767aeeb4b5b738ddd65d50e143aeb6e37fd6110e0dda -5e2120fbd267c00b1b90626ede7eb1fd37636e7f3b01ffc6f7216b396bc1a5a6 -04db15b065c9a030d08127a538f69779a5bd73a6d6f55d2da851afb9da60bbba -d782ffc339762792fbf66b2d139b11e76a28e8b483aa5d858ad779e905456574 -8c2f59a94010ed153e90a961b45a225cd9a131315d2691f6fcce8b321078deea -6582997e824705703029a8aecbfce61d427d476b559145f5ee40364c49ae13ee -bd940e7104a70a5501f5c0a632ca1902b75598d3ae606319d0ff4f0bdae32c70 -b1e4d5065157499c15fae5349fd68e77acedeb296cda2c912562546b9d1a966b -e7959a20045af835d9e7348b5b33614005f05fa26f45c3de3397e5ef9cf02036 -37b89a5085099eedcc025785eb5fc2130988a19570a1661772be2497d4c8ebdb -fde6619b3af0fb42f4d4c3516db21d44941a62f62f087ae3731735beab50f7c5 -27856884c3c4c01b83a40af32613638be95390c4c66f71672651df6bb4c4a0bc -a9533884c477f6ae268cf7c21fb12678c54e4b3fd8ef032d3e3c2d3651bd905c -562e643f42d81fbbdf819a28c81c9874100a65e70466226d90662ade31127e95 -c7f5052cf24df0a04d14d1d8a5d5d9b89d212272860db459e07731b3a6537c6a -83c352d2d1f09389fd4da36da0cc25a57f402976cf3a473ff27b6554faf254c2 -ec8e52fe59d346baf8b1fa0afb13289b6ab06c8d25afaf4f218ba88565cd3acd -f1fbe77f5209e6d5dc361c18d9152ea6a5267116769c987b89dece4fabec70de -3adbac8e5e7cffa82f4b7e2ac41696dfe89443c64d8fc50c5699117d094ce852 -c2d7dc91ca9f1e764bd117ea7cdcf98ecb87648e82c64d93f58daee619f531c3 -615ce9df8abd7a63b2957eaa3cdb10e48c379a96334f8510a1f04a7c433f3756 -81c565d30f7c7d9e05f4d6f249d203b286c45eaf851190ac74822c5a6caf4f04 -94520c329c09cc8e0f5ac803219b76c8be672d5eeb878eee0c1116ca9942b133 -0734efd931c8e5d54bf9f22d194475e14eb923a453c9b7f4ebba83c80b4d36e0 -617ba6de745ac02953a63a9d73bc2e07c52a6fb3182e001c021916ca4993647f -8be57505636b75e2013b781c2ee65591694009f1aecc0195349d48d780db2da2 -dc8c60410235e5c3c7b4542873c609f921a62953760759d81b718500fa45b09c -504f9cff973ce3e32a35b426c6f3fb2cbc366d980e133fee86f961dff6a21602 -d8e14529e91e10105afe9f88c9f65052db9b32cc2d88c7bbd1248d4448706d3a -defe4dd13ed573d1e8d31bfaa9fdec9fb1dd2ecba1ec8cffb0601523d86b8187 -e1a1526c20166314bb65cfc266d01bbd562c79f00c390ff40c42e424976ba541 -ee3860910e852c72b4c8de0cbc50679ea9434f4f21940480f148365bcb9f8889 -9c6e39c309a84f63a0b01896d4165395618198fc9ce773a874074a2667120e7f -3bd73ba915a657c161c04ed2ad2a25d81c286f5ef0e0fdf91f6c0a1da5da4d13 -56a4df2f14c4cc408165ad0fe1c60373909ce04828b2c333569b78f35c6594cf -11becc7df1fe0d9980cbfc9b083e6ff52fdc26cd74e64b22196586f4b21768d5 -2fa9107d541384b53737b872b0d7b0f931eb1525e118a45764bb1945fa8b91cd -944fbf3b63be737baad604e8e93d08521e00f8cc93052e4692f1de842505c39f -054d49d7bc49a836c724d887c0905d218fec71b710fb0a5fd2dd736354c6b43a -4bf4cca989e6deb360b45e8a353b712c2745da57934d5629923523686d471c60 -6e09b539c13f1c803dd11cdc41a41e8427a513e4808dd4f787114870b3bf8ece -f68fcdc6820e82b4d537534cb2a7c81f4e6878bd0cf435cf5845fb8402aeb47a -8be7f8658575e7fbcce387587b6563eac02d806aae5a83c185627d9e8857edea -2fa37ab90a1aa2cacdacdcca8a23a2be13b1016b2716ff29c2a660d49d4d2400 -dbd73edf65aa2981dd46641d15f2b5bfd40768309c570d5b5bad657915ae022f -7fd0805df33437b8ed5d961a0c65b33a6ac36a9ddbfe78169d4a6d2cfaa5672d -9354964e4c756a20b65f1550064e435dc5b0b8a53732a97ae91c337bbfba8e1e -87d2ce72b4577c8474a0ef36cd33a3dde20e650eba05a242065b8d1fe3c702df -ce2f7ed86080bf5e0efd27e162ebc4471770197c13ab838945cc2df10daee14d -901fe063ba909462ade61c130d7911c73be3d448f36455ed30c21bbc2527d0f2 -5bacfb066c0c45300752906845190fb3e76db5fa537fde62a1e7dea1af35898c -3edf2d9e6bc359439e38d363fbc37f89001e3dec0a7b6a4a7b112cd687e7c5e8 -4b0fa42d52b534b2d16ee3ac26b4dc3fec6272d1867a390ff9fe074d449b6cfc -93129a45a6624d91800c7e638c32c057c99673e7b57c5fa81e60e1b7a0604424 -458e1bdf2f7f77d1fd1275512e3f6d5411cfc20cb8571ef52c16adc6073a9542 -da94754c931e74704ac639fb69b227ec66d4446231bb566792321da24cc3510d -89b59bff3d647ef55be28555e93318d9eb888e32abfb2b0276ad9483ae8bd4b6 -5f2a3876c094f8e22056b9a26dbda1b09b0ce8cdfa085c8803151de9187d5c63 -406d87c00f3ce085b9bec794b99b2365504e7274aff81c5032db910e31c8f2f7 -c647a598171a4e8b19d05b5a77f1073ca0d5f58ebef2be11c6f390af9c835f90 -9b726589c9e75687dd9ba33beb8a42b5bb63076a5cd2cbfbbd43498934b67f6d -35556aaf2341c4d3121ace6338238cf67a76ad99ce7be30040484133b44d08f6 -e0d6acf93cbb3d7b3b860e620efafbb0c644fbf90228a339e9a5e99632238e99 -b1644b65c08859787d58988cb9b6b792aa43981c2eba7136fe17c9fa4a671864 -d39bc4ce208357e4e178a4c0ece034f01955199d38dad2b9e9f3c47ce7c652a1 -29476742bb9219514553a1bf9aba5af84a3530746f5d24795f7d79a1927f1266 -4e9e31e2d86be65a64463db3077fbb4d8ba24f577ad99d58220c09d15d7478ae -7360e3f048ce8bc4e7c171f86d2055c61cb4e32c8e28e52d3e8a87109f5b9c43 -b3948f9e62356c4f55797f5c349ee40bdd6e6d98406e361af69bca61870057a6 -63c08cd95a45c1d49e5ded4ca719b675f8fecbbf6cae5bf666352afee85c48da -e728a4672cfd6a669015d51c96e74ef3d42233fa3e5271134aac9354d289e7e6 -4d5d7be4433a62bbe54900fea32c6bb7863dde80c914a4d50e11db676af24cbc -6161712ed2e4ae8f0d7407c83889a3e52486a3d7b1e4ff2676a80039d4217eae -febc054ff700f06cbc565353cb08267b50276528e5da421aca6d458c8d381645 -3d524f1b7d143791c3939bb177dedd8000a364a4fcf6d27912cd57f8b1aae2e1 -2f012bd0049675d4b47fab974f28d57b151bb0cf1290aff5fa25e4219aa3e1d0 -e6007552aa41b3446b5624135d748405749cc1db00a6575685b8f78856607a3d -db56c0232cec6d31608342c785fcf455898832088ae4e608d6fb63c57ef4b2c1 -055ba60b0945c580292adeb56bded15de6311695fc74c35f311ebf99702b54d8 -77a677ac6df01ce3fdc54c527c543d3bfd19265fc579c4fb688ba9f1b7233e29 -ae0355e5a94f2a25fffb4a8fbd74f6798c863a2f318b4ce0c826f738614f5726 -2a2dccf3d5b00fc8140b153f360dfcadc36873b124a035781afb7ed41fd3d546 -79598d5030a8661603465eb2ac7a615c3537ff96556dde086f16040935e04a1d -32fca9256ce570eaa1ba42b53032bea880447949fe73fe1633a552346c930fea -020e94d8f22f115b195d0d8ebab7a07cda81497b824bd9961b660836709e0c9a -a7e61662b0684e925e4dd74fc97b675b79674aa3f6d16e96a1c86fdd2c6cc712 -1b00906b4d70c2b27390ad840962c2aea555822be94c6a46dd5a09d0ef16d346 -32e6e2d9563d10762b2606ed532d652b7949ab11efe383cd0afd2a92804998e0 -7559a8140c01ae4b4fb4eae2c147464cc71403bbfb42cf1bfb2e009327d29ed8 -65feaf33fe93c081568949c382806f465e178142d956b250a827bfa2c39f462f -5fa069853ba2e2d18ef99bb53878c78ae61d3ca268e5123ce3706d0aa11c336e -f5d8cc7036c9ff0e73c16bf7fba5d692847cf0016535be27b2119efef09c8890 -ea845adc88dae8bc41a11a861d31e86ffc64ea135aa53c1823a4e1d4aa8ba507 -9e5df4efce318b6d3f486b385377ebe65bc916f13609cea424f9c42e8921f757 -50a6c10c6c13ac5f8a5b629fdb16ce10200ea8f825280a115dd641cdf1763f47 -acad9790c90657ef835ee1d02f3d2e241b7d6749c9e4371216931887778de4b4 -60d0ce386aa03cad70c7e8a133ac4ed3ccf31d91dd0986caa5962c6312679d01 -359dff0b5a357fee803d61922367be5e97abb50f4048aaf6c76b6c65410a57eb -77bbdaaa596833dabaedf537786063320d766fc6e6826be6fed511babaaee583 -7b0643306d7cdd12f02e183d46350bb7c25b94b7d4166666c556d2f3adaed6af -fb36837cd861192b7a36e91b295cd832a67094197972348f44d0ce3870a0891e -0ec2fdd4413f67060f412a3cd31a509028d6361353a5e50058fe4ea46a6732c9 -98900dec7fd4b20e6d6fec5a30fe1f4d743d0deca667b5fe871a7c68143acc21 -ed2512990fd94b7ae6fe738dd326258f6cd6060f243df995a3af97687a78eed4 -271f3dc4f79ed18dea9a84694cb969ef7221be2485c8ce9101e9b1dc59af6222 -02a8ff7225ea661d01d5370b535c33ea4202b6f1a3ec6525a56e1ea71611491f -47bd21ca86ce6d8c924f28c8d5e5f66b9222827382dad72df22ea440726154c4 -19aa0517d06423294bcbc7c6f64940c999d9fe1c6f514c73cdf05acc4105bd2a -764b69f7d17204e9291a1d13be111261c53b5aa1fc255a44acfbd6a3e27d20ba -0c2d9fc7cb0fd2bf3a9cbfbb53eb0b03c6ab2cd636bac90076e486ce9ee10b8f -e69b03cf6aff7b5a3fec75294bdf32f198d65680f6779a9c6ef6b8edd936ce66 -e9cca6bbdcf4cd0808f33175d40c3f2ab76a02d0051ab512e32adbc595014767 -1ff6c57a77b8303e50e7bf024c8af22a2c7d5adcb9ba42ee6565ffff73212f22 -5f69eec749413749bd663976da9e39c7f2120fc475427a64d578e332cc5d2ec2 -84307c30b92e8ec05500c8635a069294902bf4f2969dad5068bac49cac00a307 -0e5203b294f7a42c2db51b4bf3e80bbecb780b0adac425db4e167f893ef4d257 -8aca20afe2773ef6fdc6e07c20ed0b0b4620ff0d5dc28edb59f39ed3e976c510 -e339c4a0fc9f56524df0aaebc9d985fb6781da97e651df018635096cac944d58 -ab8634a3b02cf1376b1c5fad86ab57c5ce85435ace10216a9eb3bd3deb8ee5b9 -acd93838e9c5b26f6f02f5541ecf8e94ff33839b93e16b740beba88c19410250 -301614938b4a69ba7b9cd47d79d9f58649225ec073b8c86503ef606afcbcc79c -287c9315cad03844d0a465ace3e83ed75182fa6de0166ed492659d8e872e5f32 -c3043b055e44b91ee3bee18777b28169dadc7375fd25ea67288c8a7919fb6b90 -e5a805a38a40f1ebd4bebbf6e26b5d5ef18e381970be0753c35de24b6253f9d2 -4a77ed4532f5eb2f464e946babea6cfb2450543655fdd5ba1d46894538dcaf49 -d824b3dcf5484ca5098cdcd138997398a60b711568f26ad6eb964de44038fc32 -07c85ae853ccf6406906bd00b9af16f3eb2246d3ae95f6944ff39b64453b5a99 -5592ab75507ebdd4a7f5ed567eef5aa2697e973e95b512549da9190dafa3f3bd -abb118f5a81cda2103aac289be4ad5dcfa566bc51d8ba2d5b19b7bb31a484cd1 -8a84c5dce3c7e50429d637c22b29d8f750b60e65e2fe3a7316d458557c1e87c9 -c6f8105537aa3b5bc789cd7c370b741477d21af453ea2781d5ce29d20f2176c9 -9418ea8db195cdc57bc982e91ef665411741fda4f9fbfe4bb3966ac00b76e517 -c7c0988339bb8848e616a134f95078a0a5c1a295bee68499d1428ada2d995633 -39d92748fe4016a88f9d534b35c766c9f970903c0b466bf4867cf914c570ee9d -f4ebc45e058759a851b8aa472d14c305f6410fc4d05acc1b11b431fa438490e1 -816475c1a6316c7635226b49399563b3dda5efa5b38d1a32efde767ba4a0fb3f -3d93da113a8e3e32a33b5fabf64917251122ec6dc8165f26af07005b2da6aacb -b7c8e299cd7cac6e3251bb812a600ffb1a028d36ce351b3216a7d23a195a9afe -e3461a40159201f1a89b8ad3da7fccf08906310fd84eab1ae0a76589d69e13be -ee3ba496b5c3f34757363c4f5623f975ec58c115901ddd9cf4b8e135f1d996e9 -1a438123b50d453656a44088b62fa37f575da53a2a42bc659540bc759ca7f24b -d7290430dbd53edd3c602f2decc5d5c2e305e8c9ce56626fe5591ae3f6fc9b50 -62fb69b77e75d7e0808f984b7a062383d2514b0d682ee525b39fbad9b84663fc -3b74f5ff1adee4775b8060b227c1df3c3b2fba8bd36cb216a5717ae6d6629a06 -c099300377b741877ef1db03047a531dffbf8dc6aca4ce0097b9e623717eef1f -b40465ba5b56d6d618aa3e837cb2791736223243621b3c0f36e8cf3c5fa3b815 -36815d1a277411b9026a9eb2b1d1591aacbfc92b49babeb49269eecdc24efcbc -7b0871150cb009a229b3d1665d05a796f84dea63d9c2e23af3a999f11f53aede -953dedb336ff92e7839bc7023f8f4b868b5171e03857ac0ad870c8dc42c6ebdb -cc7d51d1484f93106fbc79a677e97db44190ca4478f1c6e3ed2dd57eb8098798 -f3f163280a6ed0a87e57581fd663917674328cd2d1c6f720ba8c01f8ab79d4fa -7c08f1417a9a9eedfdbc6d7c84bb796f3be629e476565a34885dfb7c4164e821 -529be9d79022b6e1268cf6517a0fc2864e4b718f4018744984a2376a822dff4c -0344668df1caf06b38c229dabc5a8f51ba120b53ff9291b99340e46786c809f1 -912c2d910700252081efab3d5e1d96d8933b6709ec5198b27fe6c511209d84e3 -cb1aeaf13f364a8dc62bc37803dd71c663f7cceaee35e5b39f87bc7affc1dc97 -16f93f931ccb3164490787b1432be66246f8e8d2d01232ad3ecb7962b9ff256b -886ca9f86af2956dd082491d015635e02d867a199c481d51f8751c6c9a3efc2c -7de4970992cb00d45e1d71522ae651b177c2a5afa2ea22a1c083eec3fa104296 -b5b9b74464f293e394fe8ec2d4bb82b7a27b7b4878eb9ca6d8fda476b76c872f -5f030a803c7b1f1c0483a96c6fbd43a97302e17b5e0e28eacca87be1015d91f7 -0ebb16c26c51a8d7efcf50cdaa4d7c3449b1134c30d181932ccd93ec16b44993 -329b44a6c3638b23521eefdd79e7200228425465b0c3df07868818cdf53d9945 -a740ccd2413b8d53b52f3f6b435f960173b0b4cff2e52cea7bf54e5002d254ed -c7ed8f69fbe4fa8de61973454ca0a0c9ab2c2a9882f346d5ae456b074f367547 -54e4995e568d48065f9421f039c6b36d2b4baee80bec636374611123995da79d -54a8e318f034d9245cc5f2fcb4096743366a1b6ea840461f45a74129ef2be0d1 -ab028681ab144f68f02aa84cd5bf824f06d7ebe88d55ce185e9defa29b55592f -3896f917281ff282a252bc9e725ffafe2db8374c7c34820944991671ebc16393 -cdf712bb663640cfe1e700bed129c5b3b37cdc5b725396e471534e75acc23657 -12cb452bb410347fa3de8f13d2ae52de9e4a0291cff3f45bd1387e0b0717b0ab -c7998d15558b3c80adc7f8d1dc3d3565a506050f3bb187f49ee8019da0b49917 -124e925bc05e633da732acaf407477b47dd9329dcaae0c3af728c577b5402521 -887d20bfefa2028e1ee7ebe6f5092cbf0493e4256dfb59d62b9f26ebbf5e3b96 -5be553da8a9e3ffa7ce4de7e428d8e02795ff5d7fe6dc2ccfde9c708233201cc -b433e0fabcbc498b649af575066ec7a198ebd6d6bde12a1a5fba108bb34d316c -03ff8b0368fef25689c95d3f1a1dbfdc891cedd92dbe22a037a2f3054897eeb4 -ddf01d1bda48d1eba76f5441354c342963da0b9b3f86b0738a8c58f4e798fdcd -04882c1a3f18075e31b33c78529f4ee2fa66f09ff4c3975df960c6ba32ae0532 -3719cbbb5702844f3a84478c7e234341a02d44cc60e4390f335629b692832ffc -ea98f9ccfcad11ea232a22998660ffd04320d94dc276af68dda0050406307287 -5e1af46fcc2859f6e91190b15e68e7aa56cf02593dc4e76631c3dcb7fc9ddd64 -6c7ab907941ec4348ff95fe5dba5d6233696b3ed777eaab40c4eaea7766f4856 -3679565c66ca57b9bf714be5504191337b4c9ac40f87b0255e22d24e4adce456 -3502c29ac30988ded18faafc96bd0ff8a268b0bf5830a6ff11cddda5929659fc -ed4cee41b07eee3229d1241f8b0a3b9b1757e1a6cd2b53b29d245c0409321e53 -7f2c66df8356115857782d74dccbd69190852001b7bd6612511ca1c458c0459b -1b1afc2dea548cd9984cb34af196b08d5147ab49aba60c0014077442e5b39170 -2c6c265b25a215fc6bb84931dc00156975908b76cf1fb54996cd798ea06d1840 -937c7e1caf0f5c595bc038d3689e7d4af6c15a3943bd3d5fa645bdc0fe0c7fa4 -a100b71d2b60cfe9ffc65d2503372bd5d7713cbbb0dd9481c19e5b24f987ab34 -861beac180f61c7e8ee68846db98c9c88aad992d8875d7b44b5de8e8c780722f -4849ebaf90244b14d141264fceb58ea3ecffd9ca893f44a1d5104c6c9c4e63b1 -ced9e015b9f415690d526fff0be7ed7a93535c5f823ac753dc074d9cacd4a3fd -c03879f8216a892924cc696b1d256f0d7f8f24850db602ddb9591126aa067343 -d61163475489a8ce2a4643c5e3db6a9608c1c506cfa2439991d807b8a3d89a5e -711969217daca3bbee9289e474a0de12e6ccff0984f10aa965e6a38725f99f0d -881053165dfe7f8a1bab8b24b9bfb7a382298cb7e9b625b78e53b731de5e5938 -24f1d53d970622a380d913c0db2b4f156033aa2c3a4423c5ba3be0261808c000 -a42bda95a6768ada32b929234e4c3a9d0c212f0b197615695f84c9a12cf77a02 -d446971dc5ffd7cbe68775d948fd9c9aca5d93438b7b2f77e83cca3d3c3cf885 -badbc9166d3eeff0473edbef598a9ddc5e5d50637fe9cec73e695d38e413fae5 -7f11aa2c1453c9c56d3a92fc33ad60e0f79e3da79b49c8cc77c40e4c82f2e9e9 -3f7eed0a0b488dcec44f8846f8a58a970dd88c12114ea58e1cdd105c656c4c34 -3d01f7bb5a35e18d730c3967c5b0e711009f14574d947ef626b4ed333baa9537 -ad0ad7d4bb5daed5af9903990bef203a529e310e5fee72aa629cfbaede5bde1b -7a53c7cbf91a177fd3a40fff8a1eb215aa5ac9ecba228b853d55d54e5205d0d3 -2d68813164ff61cb3ed67387de44ee9d93ab2a082b50aa39050f11cb7c894914 -3850b334dc7db907ad6b5e7f3f89bacad3771604f0f1eb2843a1a5df85dc6d23 -bdfbaf5665edf79e652006a822f6b9dc0692af54a51860be74678b1c57f16240 -8c18a8efb515987fc1ef7522224dcd42450dd4a195c43117885d66850aa1f701 -54af834ee208ff22b3d49667cd64b18aab0c528ddb3363c1fc375f1f6c133f1a -5e5ca1e83aa6cde513b11d0d80ce36bf7562a35643266996e4502fdc85ba05d3 -c1a7e39f62276ff85deaa199c3e357757f547d77467886ef66af72968e363221 -25b228b05df472afdf38d64dd4b846df73cbbf2ce1030d8ae964b330e8d7a3ce -52eb0aa4f164d44d8683a6270e952f984dfc78a720775be462cbd41bc8d56ccb -383daf0007b58e6fde73ad44e701c23750fb4a2afc174905b2554d8d95aff499 -713856cbb4cbd369455ba97b123ecde74a928afc03e2e11235b0c7373293bcbe -6193a86693f5db6c6aa905dd539c19a5e953222e1c68007068f5d6b7e232fec9 -4ba203a44ec7318ef6a0db9d255585b7589f0d3e08e420f8ef7b612637a8ef0a -2692f52d9b094d32e8c197d8c3aa8c671529a4012453bf23e7ae1def8600f056 -e715dbebf72bb7eeaee282c926f4ae871c495282c6dc98f191d03380337c8881 -07e6113ff0fbf360a225f354f0ed4ddf9c97d30fe5d4dd03dd929ee799714ce7 -6182e399f53969cf4c8cc2df7332a9de56dbd19a8704661d842997f06f3589ba -f63999f94b4c00cf23d1b540818fe68ffe739b1773d8ac1746e51d8606e06400 -4eaed25d729b5168e8f4bef2c59eb953fcb9956d3f3e733591a3978700510553 -8f9c1721aa7cf7552188c2ee521116b1cdf4852ef70b0d2066a2b2e5dc194fe4 -c14503d57f7d7802014079f915f3af34d0fa4b3fd4a0be01952933c8e939eb95 -dba63306dfa0f2ecefa6f8a868e9b513f5ae04d8fa9715e04daef3225ff5dc69 -b6e455f4c8e8670f7b4c27f62f0c9c3083945d538b46edd1c20cca764e370178 -fd0e0753664691abf1be81c197fc26aef772e4cd6e3b3c08b092e84b80946788 -1a00df4bc03890f5464d453a683d59eef81734570e635e4c2ddfa34b41a6736c -b740641e676556182d98b7e50c56f8bd57020f515d73867fe1a24e098a656833 -38039c76da859391f701e404a0218adb77abb649687e685821f0f32691a82b07 -15ab96d0bdb3baab325089911ea11f6112b69c1e877cd8f2b8dcfe55108f0fd2 -12efbd4f7954149e64e1aa1bd0d0b709f13d032d1ffd5c68bd4fb14fbd7721d7 -a9f9355767875dd2dbf55d85ff6f0378d60e81b3e37ff6bcb6031668ffaa0ecc -cf414fe67e9261eb0f791a092f7c97dc98f9fdfd212a363bf7473fc107ee5fac -0790704f6fb87246143e0a53472593157180617772180173d0b0ea6949dcc49a -3f8ffc3f033bd306ef4b6a9001d34d05e7a8a200016afaaf6a69b5a10e6fc316 -5d9341b62bbc709ab8424b84d25965834f27750afae63468b791cba8dfcc32b4 -158cec29e8112e70bd237c1a180d078070c6feaabb7d35f5167447e54ce4c6f6 -0f55d9f97ce8f1a157af6b49567a16bbe23233e68bfadba699b69b22d70b94b3 -bb551113de57d25e2cc22a3096eae40bea7e353034231ec33554fba3920e3f80 -3611e4dc2d2bb7580869d0bf7cd3a0b24ba6a2cee9210164bf0e14e76642cea9 -bed0b279b01007826296ff79b3fdc11c24beac7857667139a80f0243b16b153d -a927925575ae6315fba5e54d5f9958004e31a4acdb315b78d08188accf9a0099 -e8e706553f926d14afbd8c39cd805eff90b3993c96405990aa9d189fd66acbd3 -123e94f66d3d1a5f4061b0ae1a032ed9eb5010307a368c1c6104767bab95bc46 -86ddea0248d2eb0a886115e22304e81deafce6e1dfca09a8a8c93e7a44b6baee -d222d3cdcc5a8b1661b9a874c1bd871a4cce7f9666d0ae94735fa3535a44920d -6740d5e6dd0372733bebbc603d89cac8450df40be169d9bb90e3480f3659f28f -5b2de56f7c596b3d3c2b80dd82c1f01196c301855d6217b99bfffa93b9d40e43 -1a22f7a9ab31462d3f14b5dfb0795ca0675cceddb8e7eb010b1521406689b491 -9d264bc1f084564e6a564a76437c6bd4317fcfedb47653f191d6c6b649270aaf -d083771031afca63850e7a552dc8cde90b1c6556d49c09bcd3284956ff555e57 -77365a2ab6d7e265a1a4f29de8203a2a15756ae595a48e11b958c6ebc478ecec -29e0ba3a7cdba448c7abc3bb6e21d21bedc9e49e730a5872082e9b2ce588956d -b35eacbc2f3f41485b0b0403029b7a5405ed1a40d6d0a7a802c0bc4a0b1fa6c3 -32450dc5b1cc97378a2edba812918155e84e78267ec5e73f2c0bbdc96604294b -3f840dd3d7159999fe24b2c6f297adff2074ae10a9087e2222af7bfa938a2058 -4dce0e6185a493b9c177b8238af099bd737ee30fc40381833e6a08176f3cb0a0 -504270ae6e7701a47a721d70ca5099a2c55e9558320285e4584e64d639560d37 -50993e0757a1419eeeee61f8186f8493034da3997e6000354bf0e07d948afd88 -ed9fb679b76b39b0b4b444bca762ffe47103bf812b63a2b7c26e56ae4b8c73c5 -58d0f7d6971cde60c257de6688d38bcda59d35ccda430df05fb25f2a3c75d377 -d88b1f22eb46731b7b36f8d9ecfdacd3f11f9fbbc1b4587141c4b3b9b0d0a9d9 -bac41cf6c67a995491d52d695aa14aedbbe48d49126e55b2ae43d0545d031e05 -1d52602401c68d41fd21e4faef1cc86a15dcd17c1975b2d841556017a8f39f26 -b6c0c9cf80e7b5d9488f9d4b08564c8ff25c52c16c3d11ee55e18dd3462f9436 -ce1e4bb7eb090929b4816aea6150fea2659389445800576aac75dd801524bc6b -3f8852f9a999c05c7b29820afd544071e9432ef5cdea3610acb574cca130ddff -aca7b6ac5a6d86758edcc686be2a61b6f5f2a3405faf7a9b06edc40df07b74b7 -409e2a172430b1d504b041a5c7b0a4107bf60581e1fd5e43a5732ad62a2301d0 -07c3a3489e8ed7c963cb5ea2bb5f4befeddce251c8fa914c424764311d16c7d4 -1e855f4b2fc2d4237ab0457b3a1752971bccd0e321dea65684d0e44a73023a19 -4a9823950a620ea838eb5d98f9959992f48d5ad23be313438385a6ffb29362ea -a69f16b642066ffabd919bbccf49db54550299476a7143d3d89a6c1a18e94db0 -656a51dc9d77dbb58568b3365ccdd85d0e98097342559bace953b33cde10d826 -8a3839a28d7c218bb4b0a31d105c5d5464c2fa0ae31f69994057717892369191 -3b67d16584ae555dfe1aa32d4b40d144cdb9584cc5777d1e30429f09e0fc25ad -c87af39d21328dca6c31be361d2382b2c20435e255c6f3014f052e8f4d305a06 -7b3866bfed5eb9b9434909f117bb602c1b743496c9ea13dfe4558b443c347a96 -6665d7e5c06125a8aa4e906f7cc0bc04118a26e9129fc23a63fb0eaa010deb73 -76fcce5d4a3d4ae626517d2d77550c50f7a45b4ade74018b746f5aed001cef52 -fec5e73534a2de1256ada58aa26e5bc0d9d848c8d0a7f42dbd7ecab47d6be1df -71b7632ba5fdfc28fad09fab97fcdf3ba729973d39a5cffdcec0d1173be7e7d0 -85a59a4504617981421dc9600b2b65fc122d34ee2fab5640893e34ed50f53037 -102330d718f7c2bb7b9f50d18643e04af5c860215f7211271fb2075e0152d85e -c440a933a87d20a0677ea2717baec45e8578a077805615c7d492db713259949f -0392cd91480059059dff830b24e2e6e5c715efb4aced3dc637f88cf3ce57ca45 -2e96edc986edce66a831ee92e6e284c72b1307ce4ac479e57014d5114a9054f9 -cf9fba1ae66b0f83e173f31378fa74e8b087490bca05f77da7842d7167d8964d -c59089eb222f1a33963622a9a17c3542d9940baf4d1b8d68cd4d51f16acf31f2 -91570def9261b67da9222acbeba21a6f3fa905e081be29befe3152b326902afb -bc6a57c110bdfda8a5c4ce8e272eabdca671be16f4eb7953d1df46e250acc0b0 -674deed452de3b04f258e081110c5ba20a934fa9180abc09806e257abb22041b -836ab3b73f5ea8dd1dd8cd56216d1bfee9a8ba78d83e2cf0935586c0cd7340cc -5980e5ca4989174cd46fdadb86398bbcca75c9580310422f692812bbd8a91602 -4f28a49d35ca1c80d5c6c7b879f14d037ce98c0be18eefbca8acccec2fb01923 -69154709b772b7a13d2a9737652a1bea28da5be3815867a952fbdbdb8c45c347 -afb7d7de74620d97b52a6bb27d2b25fc3d0515129eb92be62f7efcadaeba61ef -88d82df3daf2d1b0a117493075b501ad84ff1650bd7196a1e481c393de324dcc -c50ed36647ad32f2c8c1820aee9190126c1e622d1f686c71855f8a50062abab5 -54fbc041de1cb0f6163df274e0b148cc24ff66aa16590447b5018474e5bc20eb -77a870366b3ba577a6f484ef97c606cf71f15470905be27bac6fa4375629f80c -b8aef8957b856abe4f885c47acd94a7a32b2d81cb5ccea65a52328820404f5bb -512ae315f257f6196effbbb484ae7c877ca278a1f086e771092915d375667811 -f874c618cc6a117310287382fecd5fad1bf3656f9d41c6b798cc1f6e6f7f789c -8eab2b1634cc255f999a72ea0e3e201a4335558e1dfc26a8b02a8a1fa55cfbca -d1bc49f81b8f7837a29d7af533d9fdca050cbc2809ad4cb54699131364977a03 -775148adc0957ecf2d7317ee6b582592baea2f25d926a1738df65b37a519ab95 -a99bab4dc07e56df6e4ebfa0a8e4d8f90693f8de9d1cba77b3f11dbf7b1eb907 -a381fa256e2e943d68e773459c7ae4e7ff969b43d5693b5b612fbbcccc4c5411 -49a3dd6f01ba7bb3d11a331cfe3734ba2b9e1f8a353be0f7a6a0567e1f0acccc -0e5f27eb18fd60d809ddea01e8d6d1e8c5f59b9554910206ec9c56e7c483478a -1e4a4cbe7bfc97c7c96f119726e45d23b337e547667281022269e8b66dbf241b -d74d3cb856da025944794c90cd5196bc8f3a57869c9f9647a0faf133263e96d1 -78ee01be0f6b67db214b2e9c3f10aefa22e7e0dc1ff6d463a2cf77d66218fc1d -9a0f754c3681591d66f8c455a85e3e7d396fa1cecc04b218a892da24ea8dedf6 -2084965bb34be5e897a6a6c7818f0cc42be52edd5cd7c45cbcfaf89c94569343 -de0c4bfff1f6120684fed8652a071b6587f37aa970b5be3e8574918b97cba372 -81ec8e16a93fd111d796dc5833b76f3f3254a1c126fe28e103ce61a0eb89ef8c -9202f06e04949602431a5cf57a940c059876b3724e461b7cba19a398427e0d07 -8a88c2eb0f9d12b608d777cc1558522e5f0e96362ee59cf1ee03b1ba9b864bc1 -d186152f24e7e28b92e3a799b23c2416afc0820ecb57a0fc36f44b73aaf6ea3e -3b952de790af21f21a273a5c0f86ea671ed2ab467469a0ebba738b6257ad34ff -499b8e21a77a5685dc1de5f21f8ae20d85c6c921f1ca434b67e876e9d3bc0136 -dce9e8d97c769e07e7535ede8bcc169bd38b5f3881f94fc7526ffa91b7870255 -f62e423e2ea2946faa96353152b56ae03010a42f15cea95dd27c89a4614605d3 -636f44785350a920f63f0cbc5566aa9fdfdaf29c109dc83169b3a64ffb0a7c58 -084a88d385ade5c3273c02f809e3dac76dbad71e76462d909348c609dc0bc7f5 -0cbe05994df34bd38feb8b5876cf5a50989a44792c36f0a989084acd73cb700b -64103a290df126dadf1449a45c713a71353969d41bdda892871644f895fef631 -15b63299dc61de72c7201d8392dd3f10b819b792ef91f1bcddf9f04bf3b94c25 -ce81c6edced5ac26c9cc0e304683656c9ef456b1b666bedb3fac1c597bff1d9e -932d05de433889db501bfa1abf7158b428b24a0d49b467b3a38f916601c9d36e -22374c7c96dbb04a5de8ee1013ec7d8515a9eba05c41def2b8af7bae6691abad -51b58b489b3b20f3276878bd520e6e70a9005ee6cd9651199e71269a9dc9e1b4 -cd24d01d37448b25ea34d6e0ec921c4c1904b7c4deb93a5c6a0c736a501ce7b3 -5e386a065c1f5df136c8bb89103febc7b9b3de8f74e0504fbd7ff702c5c7250b -881e83499ecb6d80b3f9d9d17aed8414a6e723603c8762a3409f6766be726bc2 -79f70435a56a0e096209231f5b0c134bdb7aa6cb3db9895720cd02b9dc0476ca -90c7a9ed37ff0b380348f66d85037e9abc95499cf6a3006a40c3874fbbc4efbc -93b261cde619c9f86a4203dcb642e59c59709dfcad0d15235264fc7923227094 -ca105019b1bd20e4bfe5f3ea8edbc33a7bcb6ebc523533228ff682e8a1150aca -fbee38b10517877329be50b45bd87df864b02c6c8cb5125b01e79c64048ddd3b -7bc817f3998adc78819febb2d81c7cbfd179908cd36b7e5169218b449cfd1a1d -d0979eee4aa2c2f664b9532775113f6d528c0e7c1ddf7f92738b1ec1c903710f -9543712c0133b208a9bbafaca0a5ec4a087a1e5de118fda50b4b79a658e73a04 -ea556ee2b9891278e414984da3dc6d739ce951cf058e2bd79d671877c4d5680c -2a757744cfe0cf31bf587043af1acf031fe82e85f1199c1e606232edd4501949 -dc70516a3c30b356f35c2b4e14fdc62abc3cef6b7703937a1c5561694b2e2022 -457603ec1210cfe44401a8ef8e43ab2c2244428c4f8138828f2a7646a8482b49 -00a7fca8dbfc30cf7dacbcb003d06c36644d61e901114cc5348ebf805af2f70f -84398891f59cc49846e23463d89ba78dcadb3efe0f1f00f4b45c40bc0d2f3cd7 -63c231487557e68ebbb01cc9f96f246e9c2634cecff4a381dd27814e07cf1eef -75a68378e92e56ff486dafb1bba124ccb1f2e9dfdf43c5fabc0336d8f237f9c8 -c0a656c7691c674c0031ec4531b6e7adffa69d634c9af413fe014cb6464b4ba8 -649cf7bf0b6ef90126d312c361fbf4618957798879d967496ae34ecdd53985be -1bcea07ff99f19a7bf3dad5bc31e1941161e60b98a7f78316b95db862315bd25 -c46474a7e5cbe24c54f54fa23b299901cc2488480d258db25713dc97ab0e4b5a -d66bc1131efb7296f2edbf6d27734cd45603cf5c1e0915dee25996df850dfa31 -13e23c722aef49ad2be71db794c86926c13ad66f17d8b8de2a4b66d9191afc44 -2b4e95d2cd04cf23374f172a183ba3d6adf8b2f919f14b4ab794f53531aa0da7 -fa0d5ea6f4c30e24db53640d51248cf1001e7330286c1668a7250d3a0d34f84a -7acecf297caec2198b56eb1b9263ba531658d06a3d9902c3c96034cf79f4038a -2859c9e47088ed6025d59a69abe6c86ffb467b4d8b44028fcd099729e37bf8f9 -5584763055731e7d7ac8b76765955c5c73c00bdbd426950f69ac97f55f9f9f2f -bc217e166c442e627ee893965fbc7200396403b1f52693f6079886eac12d3553 -a02944981ead829e3bef62ce5d9274e039e305c48b23c604a86e6d816b649faa -ecdff4777472f32094796aae48960b0f3d74e40fd1e4e72bb37e54322c126341 -039c3b3fc15a137fbee162877a2b1a27dbc2cb91b9b8cecad345cb00d519c051 -f46df1f96224e95646e02d4af7739638c5a261e36e46be731e3425d8f62d25ce -5a7f1e72abf75237bc7109d0f6503b684c728a888ce8a67d622a298fc09d08a0 -39b7508db67d1fad998be17d49438696e9c402bf6ca7e5ad7ca7a1450e04d17c -2b0fa2feb0b9d5af5dfa5367faab7b3e2f104dffb5da896d00b890764b83543f -70d04bf1fb56fdf0a5873edc4124e42b1546dcd43f4896a2b313617c5675e84c -1fb558d1b944084e431c29a8b1b1ea67f22bca2ea0e503c422f13d3d18c16dc2 -2f8215c71346762875d4864e20c107f50d9b42963aa2185db553e60af6c6a6a9 -886ed38b48052b0cce1e5b3f2f5d96975849eef01399553443d2722f1fbe8266 -aab7b8c1d69ee6926c1f916c62dce7a293589e10141173e30b5790f18763f1d8 -e1168cac05882de798bf361b1ec201c9f5fc970e5bba72515ecf3ddfcb14a6d6 -2f38cec6004fca8ec75d0b2ae1fc8bc94d4bac124c97b770759987d4322ae181 -55c7a1d7c0d3005385eeae58b8a07c556dd439b676b496682931327031d68f43 -daa631dff340b8531a8f1cddc1f7061dafd88109b78958d52acbf458dd3ee2a1 -fce78a3e5a8ad9a5314464a53699701ce17dfba2e176e9ac0f34e1692224926b -61782f6ffad4c6278a32b1bdb73cf6b8b2f5646dbea6de31b2078cad5a87dcd9 -04ea4e60601f7547c1544b863ba383ee95ceb4a42ce89e815740e0abf8d3087c -637a29e0645de6f2edd027cdd56e8b558dbd26e9582186bd5b4792500926f8b2 -5d0dd38c7af1ce0e2d99942b0099757140f9dfbd514c38e3d15e502dbbc34c0f -61e3262e48f80bc3b6f93ac5aaab909cac3b776094c2a101b0ef5c891e28ce69 -9ecbbb70fa9a71bab19a9a4ae49f9316b7dbdfd63b43db9aa064df4092cee544 -7507275807a430358ff0df98f2fbaf716785742ba18888994a8e2b54aa0f6fdc -07feee88c4c98951495943bd42b395b92b545cce05be3db4a0ffc43ca064ac4a -9baad9d402c97fb79b8f70184e011f78d8e96538f4ef66d45950a80d186f3b96 -56ce530f019a1269ecd2249f6514a6b77e486198ed8e4c28760a6482b1d3bd8e -8104a8c964154d8d23fb33f0028960d92c5bd3dfa6bb390f6dc708a9f4fec7a3 -7327a97723acf7b62070cd7dffb6aaa77505a05fb292c54baaf428f9b81e5ded -8c92353e46081e4fc0edf39c53ad0e64a29e34aed73d18e25d0fb73134ca03fb -382c1f2d703e241986e9bcb36f4a9a45bf183e5898364d95369febc1c8867d7a -77b76f92c3668ace60e180b685698d403b86e27cb9725405955fecf496aaf327 -e4f5e75ff5123402b23b0e8c5f7cf7ccf1364fbc8d9bcb94f0f3f018a2902f61 -ce2e4992a5dd21e2432a6f412e77b13cc968355f9298c0fda7bef338086560a6 -7c774e05aa3e6d1f0a3b61bc1ea89cbe39423ab0c3bccf10e091a76563ff8b09 -c509f9f69409b7bbe8ccfb574ea7a80cb1ff7502388b4969f91f319e0c609bb5 -c3ab477330dc67d7d900f2cae9890caf14312ba25c8722f73ab0d9b0c884aafb -b548a565b92af0ff6940d36d40442671cd9513f93d19107cca2462d5432696d0 -97f56f580721b0cc583aee69922f3d0209989ed6e6bf55e70e293c0c3e89f0a7 -caa0d50b519ffe06b5e86068deb84ae448d5041d20e03955b5bbf0d78ae45bbe -2e548c64687229f1033fe264d1eddd5437e2519aaf8d1f7f2b8acff36cd650a6 -3cac39cb7c215c7b34e29b58fbf5d8493cc1bbc9e4dc92d8df9cbc28cb3884a9 -b5031e13c12ea77e63e74504fb6609b446ea85900cd8351853e71bbaad97ef8c -14c8691ea4a1b39c94b7ffd97605796e7125ea5a6ef7cb631ed1d7805155f6dc -d64e6773ab236b4c9eeabdae300229d4710af35c88f3a61fb3934dfcf4756533 -bf1a27c68f82bba998f2abd86aab3b741fa09837a3f32cfb5f0a35732c7df553 -1277c984e1c32777107cfbe7962971b6bc352ef17179d94a3accaa0730f3d360 -ccc9e41a9d019759443990c8ad253b2726872bb53a3e6217b3ecc57242068b70 -1116465f90b58a16e703ad75c3da86b2ca6f6e2f88ce00a60175843321e6e6d1 -8e1fb76455d729634c196a8048ba1d7e399b7e5529e312610cd6e38e11de0500 -47bf6d8e7fc899e90a40f639ab3ed83e4f8614245ae7929da6a8872a15b3b6d8 -c0769d8468fa9911fda9fe875c7f4532d2cd641d8024b1b43de1d9fc0cf0dd55 -0337769be1a0da6afa42b12c8b3d21ea450df447196ed23071ecc65385cf7111 -d025b3d4d396fc2ff5f814fc7b249b88c012765d66402a3cf926e3769522c650 -62336560b22fd0865350c75541ddece29da646b137d467aea2b14e0c8a9d004d -c914e1e36247f010d5acdfc06a5a86477392e6b5df8bfa0201bd160c16edd42a -1611d8569db8d294d64cd76f9132970e961a57cbc9478fa37507f44197d73490 -3a6aa1706d0e0b4115e3c6bddbd4cf4be087fe8cdde3a8d764b299fcaefbf13a -2f480e9385aa9db1d4358cecb9958ef760f6dd14459f2a93bd2d49e354b7a672 -8e6bd45f17e2c6d86512f24234f1e8df4e5ebfab6c094504041adaaea0139028 -5b4223e9cefe6e67c7a055c9b56402202fc3964989ae3d435ab73b071c022aa4 -6c2226809e1c38f8436f42d3ac3a262c94cd71383b50dca30ca2d275ec463405 -e7de48bbfcf53a152083382b8426ce804c958b9aae95a13f2575658991c91988 -e3af9fc6d24986700798775ed0edfe717510f248d3fd68a5e229c9862f7e5850 -1527886041988bcb5fb8e76b80a5292e982f25d51a97a594c4bc30a0cf3739e5 -6381ee320c7a2908da6732b29184ba5312b24e0935fdea476a5aeaa75df407fa -4ebf181d5a15a5ad7d0561ebf0a4e55c220a9beccae6fd830c0fda764583cc5f -f59dd84c9c2486afd7039eb22a657ebcb48c5ca9053f9c6671cc6cb448897f01 -a33036fc2438c9afec583261506e1ce938894644af8d14b5af8b020f0061502c -685d2919d5babfcbb1658002a2b5b6f5fe8636f4addbf97dc7c28eb93dde4f93 -831cb9aec8d2d3f6173f16d4c31ae3871e4bfad4b652c0f5e11af2270c983cf7 -47e3d8ef4619c2d76db67ffac11988cf3e7f6a2976305532a2a2174656a926fc -1e9dbc981c19937c1fbfd11871ab3b96599182227ba0f840f29bf8533d33e4c0 -052e60cc0a266a97857f7c6bdb412ea779b4094a5ca237960957dd0fa2a37c66 -97db26e03b892bbf9ea9b6e39d131f8ceeaced68e12b7f2ce9ac64dfc61009a6 -a4959924651f7158dc9c25f3e603629c979aac5c308fb57a460f4229ec663d88 -51e6947cc40678dfc56e8472f021d3264c06a3b76cf1f77f4b4d0b1886039d3f -e166d739bafe7cbfd72331c343fdd7395cb8cda3a85c735bb35a286090b6055b -62808bd999289763d9e433d22573fa3f069f40aa45df44cd9e17e843e9841828 -d18b10f2325aafb6c872e26486f9c059476a50a4a3654ea8ae9e7f6fb7496a4a -887054819293cfe78eb82ce32bdaf4c291faee9b01a04ca557cb09e614d0568b -4fd1eb0cadaa3014aeb0325eb68606f07885a5234e54e76ef6d9769b80e640c1 -8b21a8f0d80f7029228c704ac5d747edc455493f33e844a3b450f36141417a52 -0677fad5d7812b65640113f8daf1c45aac012f587719d26e84e8f98cdbc9e3cd -a9e148ec08d03ebbc9e875b21ae8a3456a032d39fb1e726effa0b5039871cd72 -6faf210bc4927de53fffa0d987c2232bf27dcecda650bb7d7ebadaa7036079c8 -0f067aa09ade73b0f22f92ca57ab4a1873ed901c7eb934fef1524824604092ff -6f255608a2ad18636b7f69d842764c672d3392b35b7e12ddc355aaec9023f8c2 -730ddc4e7b49e754e7550c70a21b5bdd7acd0bde562b34faa2ecbbded4956cc6 -45747aaf479ddf5269180428781e96f3589ab47bf5d772b0a6a01eda4dbf27f1 -49cc8d9fc57e95245f9da122f1e3b6a31ca21d7bce9e846b3484bc32310902ff -acbc3b5e1191ce9a65878695678a3ea186d03fa6cd13b1743f327ab65a848d30 -1dd0abd9aac5b38e9f727365120dd5024f3da20c5cd4f6105490e3e45df85ac1 -300a041e5a5ea1d8d882bbb1afd4cd7156f19a48f43ac58cbab60674b4daaf45 -7528e5c201d32ca7e06ff8719b79b94d6c571a99221e5ef00c8bcd7d82ce818a -e2c4f8b426438788ba84c02e7c9395b00f9780b7770facde25094236e106c405 -14913fcd39c2d2b0d084931cb5b4ebdda3d91d8a25ecdef23154779b30a277c9 -509902c229d32557328bfb32b20561dc38e88fa16a9ebcd74377ee96dae69167 -87481289a5d322e9c34dce09c833d7e479200afdd9998669b16a30264e72ca70 -f34e79f2c544ab96c323dadda4c9900737121d68aef6978feac182fe1214b1e5 -e2f3321680eb5f0e6fa1f2bee600b07db3d9546954fb6137443956de879d58ad -cb7d8a870f12a58c5475ab59790565de421f59b39e643ab54f38a94336cc0f6e -c5c54c6fe6f61d6c6121aad3b9b1d66350061d1679e795c252dc429647c83d29 -c684a07d0b41c72a62be91564cccf41edc5b079b2f06e6a9236addad84d0fc4a -b5d3403b42c9dbe80d119de3855e1b17498a9c2e827f4a8b85736371e39bc01f -7d7d14421219d136d182783f5d6f8aadad83109f5bbe65ce504735367ca9b26c -40e10288fbdea5d46532331eeaabcdd5ea937f1537796f43c7a3ff713ea2c86a -2f325acf06ef921222eaaa928a4dbc95a9a720bdcab273737e7753294e42a8ab -3a27daddd130ef705f2702702f39c84de8e5de998f507bc54a69de88621f1968 -bc135bd14c3ce226befa65d8e117c7dad682ce6dd839c443e5368b1dfcbb8cb1 -7357d126b021a47bc4b3eb4967183f4a5ad66bb4ced909993a13f365604432ab -42bbda92d93d132d4194a64717c65d6bdfad697e3e2c1b2962382d43cfdb20c5 -ed6a61484b3322140ae300953acaff45077505701f7c161f108b902734803f93 -b6e89a2cb7640388248e2c263135f0dcf9d6945f8b648c89ffa5d39911bf196d -24dd049e561cf823988605fb0b3b2b960be8448dafe7cb335dfd8870f2fed3a5 -ad8784ec4c5835f2aaac6a5f7fdf8f15e1bb5f28296f6af7f8fece5ba290030b -885e30d245ed99db82c0d669ac135390af59032d6b44b34cf43df8b7e3434bec -eb8794acf138dbe43d028c6bfb9b27f2690324f201352eaa4f3ae5601cfd4802 -81180cb05c6bb3a90948f261ae1e31edd7b34dd8f1dd2451eff15bc7b881e47e -98183454b03554d5aaf541f087bf56ad3087681521bf3c7b84c8047d3c23b02f -b80a55f6a26ea426feb545f7075a84d903e1ee6386e8bf13deef625de5ebef1e -5d693c8fde15c264113394b035931bfd00308cb7fe9b84d4b18df639a65f454a -9136598ad3f5fe4a71e2d7ee28ac54ab4735957cd1aeaf5b91247426a706415b -1f974db500682c188fecb8ec291a81647d09c3326e05a671e6f406140d94a86c -edccd20538009a2867c3fd9d8b8a703de2f9e2dda4a495f6c8adf2d8da8e06ef -9f21cc11807dfa35a9732f9fe8bdb8f2406552ab3d67621d23bf5f425b4dbdca -79a2796dd74cab6305c5a8459e54f5cd6d8ed1768676386d19e483f257b9fcee -1c8d9a0ad09997343314ad22fd713a49b8a7da1e2302ab57360ac15abf917f4a -930dece02b588a0564271e207746e4e7c330889a3f272e85120c7d1348379a95 -80f40a595b1a0f939aa46b7eb17d07981136851acc677e78e8715639357668fe -fb162d0bf9e7b58eb0a0a8e3040de3cc5d6ba9236cfe5a921dc2342167ec9d9b -1a6ed1b7da0da8474ffed17740221cfeb7de9aad199e58bbddce88ba826a14aa -9b11abcc6f897453ddca5565a096a79125a192cfebe71ed37b5810f13fa07e1b -286bca46d8f8c1e76c7ea100c2dcc5501653c7cf156582152bb6aa34ae041580 -6292f09c7c3ccf7581a1d1828a99866f5148de42ab060932d1366c2bd8104053 -f5d3744c9d825171812dbce8ef600b937ec0430f4a6129d69fefbefbd94aeaa5 -12673d7ab07f05528c529d4552ed20f00e8bfe54721cd959ccbca7f5c1850168 -5d5ab669a3aabbf6d431a429696274df399f3cf3760a4ac9453d407b211b2bd1 -b8416c1c23b3e68343ec28cc5e520fc2dacff7d41274aeb8f77beb6174560e35 -fcbf7fc20042393bf52b5278402ac5cd9f2e1ecd5a9dba963b9acf08d78cc5ec -33bf5c620b6f5520cb781a48f247158899cb347b977cd62c54cad66c7e6cfade -433e5be9ff8af602bdccec15daaa4316c8289921d19f809c20e68fca2b71db82 -df2bf6f0ab9d90b9830d399d838547fecad841b07fc429abdf02d544b41d5e31 -7655829d65c3c4eceb08dedbc1b2db023ad5e524ac9cfba00bbfc2bb2df14d60 -954d55560fa6e2ff31786acf9277e5e2018ea2f839873e3a4cff611d83a1cf8b -7ea655c6bd34c7904818fd857cfcf4a9b39e5fd5cc551655dd75602a432a077e -653d3096ebdfe93e0c7c7fdb0e52ac0145a5857d5bc46daccc9d9bc048cd6e56 -1ac2f5cac16d537abcf20dfe3c6aba54f400573da27a781dcbcee2bae55db664 -18f8f003aba535662a2c891070ae99839b4e0fcdf5ff9b7201ff83bbc9a5d39e -bb61de440b63d08fe86bbb51e251a65501f8ace59ec1907c1268c639012974f0 -d8c09babdaad610d2c065174687fa1d783dad6567f1bc9056b4e7f90796ae034 -529735bb2c26f89166b67385c0b3ea8befaf0d3c5d2021c5e95f332659f57c20 -7b74c058fe712f9f6f7bba2afa24d922819590e2fdaa7b44e2b7a401fad4d28f -05ab33026864f395ec60b658d42784533883b1cf6d5c32baf24262d835be78f1 -eb7b30ab043abc420085fc13622e1eea3438d9736c4ea328912fe1f587d4252d -bac29ae8f47e156b7183c1b79034bbda31e08619fc106ff4ab743bf8b9d8bfcf -a8ab6b810c1e1f862201010a3e3da3ebb9457071f5bfc811869fdfa0ea873a0f -fc47d86b663bb3309bce467a81d6f757f62a195f7c6962a729794666635c8703 -db1e2d71ae67d5dcbae3cbf5b948eaae1e7e7ee478a0e4584ed70a019449b463 -9f812dea0ca7e191c9698c48defd784c76b4692337749365039b13055ad9114b -1a456477c879893ec3bdd4d34184ae5f3e7bbd8b8ac1abeb315540673a792b21 -6473e225bf2b925d77276d0741cc50fb9ffdd34459642d337c044cb4d58c123d -652dffe4dc9fb7df87bef364cd7d62d8fe7046cdcf4b387798754c409fea2867 -c3c3e9603e79d53c02465ed8b57b752f76477dbbd1c8945522901478aacf4871 -c3dc4aa90b10c08351d608a02d168a5978fba8eebb48ec93653a8e178d44daba -e42ec334aea08544a01dd57943e050e87fdf8200d2cc475c02dff5ab8f90e58b -d3efce06d49ea472df3f149b629059dd9e839536fe014503ebd1e6acc1c35637 -bee2f01138614af7521c7a9b0ad46187f168e387a095d795c067660f71b43521 -7132c561f442b12f84e183d1f5dc887b3e38f904dfa73777e7bd7d3ab6e91fe8 -fed58db8f42e4b65856d633c75e5c9f27fa20a7c352f30d2ceda868f61fc0548 -f2ef8ebcaa18fcbb4439ad597a2f2d89ecba33181e770d5e8b89d95ac0c9b137 -a8cabedafbb3a2071a0484c54dc24ba3b00314555dd3268690308c839cb0f0e0 -410116d5bdea76dc4e37d89e5262df1a2d5214bdc3287a67e7657cf5b5f66892 -0e5b549eb0929093bc809afe32a60894d7d5dbcc546b0664cdea07442c75ad9d -8bcd96bc17af39925125ccad1a305829e9054454ae7db205fdb3c459836ae540 -ce773785b55b103bbb400a6472c14b125d85426138c06d67c5944cd0cb27b224 -e1dba5ac9631e37b2a3ef25adfb0271f729f6c4b9402771e0dac6068e12a0df7 -7dfe8ff7eabc22211bdc35062527e1ef26da58a905331a5062c66abafb46feb5 -05aa06ae1a4d7e88143666dc8a7add3f049fdede30f7785f968dbb0ea2de8bf0 -a08da2f0c9473885963b710f96fed7751c4ce01b4f954e486325488951d4bf83 -01662f9bb15f48623f8b61c7bf7dd47fc35e73669f03286ac8b1d714dfb24415 -7083b0340c5535e329f6a114070d01df96675ca34d6a0280ae26e81a64ce055a -8261cf5db776cfae5cf1fdc3f8bee14efdd08b832ac93ed7094b7e57a02b86c1 -574ed345d13e9f9ee91bc99fff620fba401de9c6265a1ab696a581e15a3e5d56 -dc74fc5c276b7d1136c94e1816aa95c0f3207ee25769b17948d9a4aa60f7968b -e033c5e124780bc4f532ec96f64e542a0851a75664b073dd16034e76adc06931 -5f5f2492fb97859d59cf2f6fa3a6053caf4013c4f47469b9bb1636e7017a0c3f -5d90c8d94894613b51895a11f37e9f31fd98a37bbf4cc1e01e5420556160dcc1 -25bd769c66ebe645bfdd4eaa9c53d414ab9757c860861eac507a612a9309e5fe -e75c85868fc360a41846a8fc79b60a175606bce995b584b5d645f9223b7b3a3c -e4e249600921f783ec8f13abf5aaa3b5008389c46da5721dc304f56d7ed99f40 -264d7c378d96a6d1a960cc2e412a85fc3a2c47c6f70edf2cedede7cf39d8512b -9679bb345fbc28716239bd95246b59d21a9d8378897e9c7607af76ce59e66ca9 -d07928d73ca7744dc5cddfbdac11468497cfc89dfa1a24b120753229598af48d -0d2e6332a73189656cd1f584496e6f3b1552b04cdd6e51a8388dcaee3dcf8c88 -072651ee9cd44e3cf938172570ebb994bb821bc04e1a7723e16ea720bd8cceb8 -af7ddbb6ac14a58e144ebc37819ce9f2e78c0b8e5f68ed48a5529e47b2d9a7d5 -b381bbbf863a318d719ac4e678cc1092f721b5ca28430dd1b597004390ca2a34 -a54e73d1d8a556c14c4f04eddb0adfa43ce6ec57c8fd98ef7abc2cefbe991786 -a58ff65ee2bcc0ac940a0f07e367c032f0a306375948b54546c7379053ce25a5 -707d9c54aaeabe39fadadd74e1710f617d751f7751d396c5d054d28f93314ea1 -0e6803b627f3e1a1b2a2c4f14a8e9f9da3a032f7bfd872f86470b2f50e7247f8 -97ac03b1a4fc9ae5fe6dd088171746706b39432cacff853edf1b2fe87208a44b -c1304b88b88f70b2c7596cf5ea33d9d11317da7dd2b8497aac6100ca08551dd2 -a57ce4efd1522a62f292caf6e273878073c82f48a6c9f10c42be92c439cf49aa -8d4302a85a9f6f313ffeeef59e54aac64b7dbaa8265613f46e62d9a93b3e5740 -9eed68eea907fc84a6ad170b8e1ca16b62e46b1067f28eb6b35756c71443e0e7 -f0ea70df14dba384368a68baef33b7b2105085d179980d6622db47c1dd4f027c -0fb25e8b1ed04be113f6961107c235eec39afa4db672fccd5c11737b22ca2a50 -af750d838462311c1111d31211fc41b76a96197ed5f62505bd627efc44c98cbb -12d82f9969735d8f4f36e097ef1cc66629b901cd7d530d74521decc86ccc0707 -07e8a5208fd26e0fca9dc03e4b5b5bb6ee8d899d439457f139f7d2eaa4dc6676 -a411a40412cf8808cd1e9ece8df377dd30af8dcb28e8635c0596c9f68728a877 -671ff5872c81635145e98e055dbf7eff602a4cd98986e49a26c3754b8a264b99 -b53dde3ac4448ba76a550df75661094484ae263c8bc0613152890d17b1a09774 -a16fec15c779257a9038a6b81ce29162050e1fcdfb9aa0c88dad199a74470938 -21b4585d40e628823c42a45bad0c67427ae3dea6367b69d76820550cf3b9820b -043f6c646cf42d20f1241d0ce8196b2c652e9e10278545cd289bcf37c813fe83 -1a437c6e4991750aa4c7970e200b86ec8e26657deaf058e633011946e8569c27 -fa7da592b78df95c94607eb1779393c5c2b4de50c425384431505a93cef43c13 -e042c12a57eeaa2c48d002369aceedda1b7866c865c8f043bc4e50d824d2e312 -04bd8c1a4d01a688bb2133a4ef37b858fe1de27fdf8e5382e4a3f323e016e151 -8b1da5df2706b1d76b72db59fd5753e23b41306070650d6990cc2e7ba3014d2f -fde0d8e36ddc3de6917bf3ef03c84f8eafdbfa7dce1c3007bb57c3860f65e991 -13cbca57852b97ed21a7a55ea9f0803d13accab45fac1e4009be81d3da217dae -45b421d6a76150d7997de83c0aec3d7c09d5e0cacc5678f2834e21c22aeb8ab7 -aa20ed2112bf7d3583cb287740f2e6f828f9d07385eafed61527d19055cdb129 -e1e5f1326edb56d107250346184e4580fe83bf44e2343cac0f366e04dc9aba72 -0261224f33ea17f779ca8532400edad7ac6a5868a0251b030360b1ec93aad4dd -04caa52edd01246e2e275f007849b317394f9ef09064dfa18fd3c0b32ab4073c -855cd08ffd407d937292f54b0857c281b0d7dc4ded8070d8616e92faac8fdecc -710a60c61f88319733d888795c8b45ed895fd29863943b6632336aa49c2fe365 -752b6463cefbc1fcec8e8ace944ba4d35a4dbd87a519eb5ce02348e106c3eb9f -a57577ba58e7d357e55259f182f72c426eb9e12daa1cee7210f75cd7519fa1bf -80b5b2f3bb7eef8348e39c270336f4c96a4e458f71699be5eb94f26d0c7ae5a1 -b815789c4c038cdc8285c6394b442ae05dd2322f5aa943badddad4449606020b -f0f63647645d0c1cefe0a0e4964c2f2c9df5754c5d671182d8e15774752e06e4 -f9bc5cb91fc5d31fe4fe2f9bfcb53b920c22ce8d0c244851c9433f2d8f9d00be -47a03a8d4246ed7a9a9bf27235f7537d071a6208b6eaca1b2b6c7c43e4354a23 -b97ba4ecaa7d93fbb73a4bda88c406a9a1fbd9861252f03b2385c3517c321411 -2f968c018db6e3e3de8246c05da9f4dfa2b5d0f2cd2fc3ccc8005486b9c1d1be -e1e8c14ffa77b18c024a98dc5a38b6b0e057d80111e7d2296414e87276c13da0 -e550c489381ec3da91eb4dcca6affcec210ecee0c8911fd338b9dc590d17896c -9f96dd780503bb15e0638db81ce3f26b1857c3705fed78959c83ba079e49fd0e -08b3a60d8641ff061398f779498633441313aaad5d54e4b3fdef4e0ce6013b20 -f17c6b7b1bcf14289c52cd55b0c456a69960f32fc06077819f32bade75c69b23 -bc97b0dc78532580f9fcb1a7d13b2dca90785a7e958b579d397a5df187d4b0b5 -f76282b4b00e94c92cc3653a047ea5a003a72f2fa4053e3e9098f82944131394 -8c471657767911fafb254abb22cb50693c8c644096a922069e2e2498d230bd19 -4d2cfb8086eff1761fa2b13a0ea61d6ee0923c7c4d31897eebeb1d73982e21d9 -66f303ae3ec4dc108f8ff4da3bb381be3f4050d101d37042b11b314535a1c370 -1b3dd8305868241efaeb394ea2d3efbfbbf3cadaad79416bcd47f8c19cec479d -19bc73567bfe6d55713ad85a42337200752777a1af0bdfe46bd53534c4fee290 -c23aa58863bc3d0f1afc9622c886244c3da73f429f8a130510505b554f1688b7 -709b0282c94e36468a0af39d04fe42825369197784a82d13011cb3d193bc40d5 -5ca5393d2b32c57abbed3a0bdcf6f5dc0bf26c97aa46daa4269d6e2e104a78a5 -c96a39b4b121958a0e643244f646480b348563e417335e5703c368081c178054 -293bd69b1d6de52d140ac2dba03cf45c83dcadcddc046526b004373d8aa9d2fc -bd3b354ea1136b0161a7de8ba06051f3cc22b028a2f76b6780f74c5509c49268 -0ac5e71a1578e344dfa147d4136d57a579bbae76a482d742b44ca381a96ee349 -613690f1a6f8bb1e8af1df6b2555681485122512162894c2e85b2b9a3bf5628c -2a7d925e263edcf66eda45022c012d0ae52faced11324543ce842b5c6349a832 -d91999d162fdeea3451b87671f83bfe321726a6244d6f948088c0392d140d0d5 -5931ea72d9f6ef32bfbddc2fc6ed0c50decba208beefbe2da0f1b6d918f55ecd -be29f3017d358dcc4a3daad96fbd6edce1a0144dcd3bac07d163935f8580040b -426a9434da7a234354e273f62500f88237cba7771d4ca0f50a506f07b7eced7a -6704154a7eb342bf879fc79f7bc6c488a155fadb56df553ac0b5546cdf3a167c -528b6ea5f65f0e02c863a738ffba4c4a0fb67a788609bcea6e504547c6e66cd4 -45ac2c76dcde706679ef2d509f7f45624afc984e0a3f2bb2e1d1364b038d214c -11260ea09afb681a4fdea1df8aa130bfe08ecb071e7fdc72c90dc1b114d81935 -92e0b7a609fe06b2c805730195748a02b1879ee6e350c7837c109063628d1f76 -e39e0b4fd212b2da075c82e052a9f66be9446c306a956f412a39fa903e430eba -d831d86c7f66765f92137a8cf309cefde84580726dd922a4defc48604b992684 -a793c7a25a21438dc7eed60e0a0c82007888457ff63cbab3184d5009ebc30428 -b5c1359c3fd71ae27bccf2be4eeabd9ad709ac34bc6afeb60c3afecc39358bdc -5b56f65b2768111635621d7797882dd1db755d26bb2e0f03b1a8d80f902c3960 -396dfc9aeca6ff7d42e7f6b4f83d1f217a68f3affb54e7e9aa1d0524e1bab538 -3843852ddf61b2ad706af3d609a8d1f841f9e9d12b1b0f92f3b47b0dd0bc5f04 -866528c0f63db3feab76645cde31f0283fb8c711fc34504697fa0cfb8cd7b150 -172cfc93d64ab6a1da1bc96d501d49ac87cc6a04db1635c167a1fdb58eb9e3cb -94c90d2f9046890700513232d5bf1678651012e2f817114f46a1019e72220d7e -d216d12712bb8ae73140aeeb48a3339dc1d5a6efac1e8f50c92b58e32725424e -ba86033bb1bba686695cedd75be66d54275c8ddecbdcbbdda44f595e6b686af6 -f6117bcef51df5e3c98e90171952a23f445c2bca9b8626400905fdce9e0464b1 -c1d241ae619844513e9cc3a58a6f978089d209bd775438d7b87108a342c76b62 -8c3a6a28b9d0c42e696f3d5908cb2c70d8d3ead811ef4dd19023faf86ee053c3 -014ff20983774efe8e26646abda4954ead06c80c7670 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark diff --git a/client/nfsexport/lib/fonts/UTRG____.pfa b/client/nfsexport/lib/fonts/UTRG____.pfa deleted file mode 100755 index d9fa0e78..00000000 --- a/client/nfsexport/lib/fonts/UTRG____.pfa +++ /dev/null @@ -1,1126 +0,0 @@ -%!PS-AdobeFont-1.0: Utopia-Regular 001.001 -%%CreationDate: Wed Oct 2 19:10:38 1991 -%%VMusage: 32987 39879 -%% Utopia is a registered trademark of Adobe Systems Incorporated. -11 dict begin -/FontInfo 10 dict dup begin -/version (001.001) readonly def -/Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def -/FullName (Utopia Regular) readonly def -/FamilyName (Utopia) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /Utopia-Regular def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/UniqueID 36552 def -/FontBBox{-158 -250 1158 890}readonly def -currentdict end -currentfile eexec -fa444f2716d92b815f58ca9049c815358e22e32e73a3e6a653c538ee56873363 -67713b8cab082730570f5b5efcf34c2cdfb6f8dd2b7905a37c1924a2424c16e8 -711db76501f564506b0f45fef10d83c3e3c6df2dc0af7802e7f42c81b4243697 -ca09088b868d983e79e4b2c3e17321993cc8837921fd4ff7b92a1294c5ba33e6 -8fd40e63df624b51865721e034f71bf57bee0e0c2a9c169c7a626496540d45db -585d2bc93f83e6829eacb859a194d7a57904cfae75e6188c7121003ae40153f0 -0fe6fb52f339e72d4aef38469328465a3bf0ca1ef58dfb447612eef4ada248e3 -ca525b0884971b85099d73538152affcad51d03eb4060a5c580f453ee78e5c4b -991f77c6e9600c135395d56335a7c3a75c0341979d6b404ee496214a5d20ae06 -e17d80d37bd3540b8fe913bae1674afe37d0c41e3d9836a7b5147be32f9ba01a -df1a73b89d30bb595a4b279032e37c8230b6d4933065947c3e9150d2c7c4d439 -d60197eb69991ef059edf886ec0bdd28158a71a2df96dcb67fc0bf81c34cf27e -12d6ec950a75993af99fbb040af595134198151e7361672d8538cfadb4716785 -dbd48da442ccc911ae9157b14e433559dba1a1c5619e99b57274d6998eeca3a4 -7e804d8fe3a664f39f33237831385949a230a21e52a2dda733f2f89b02ef4ce2 -5d603c9bd2f8e4c0443070940f0380dd1ac60ff462a9a71965a79d787e0711df -0a69bd86a4846965ac6c77f2e1699c4620c1bd9f5b2263e13a2213631c55f7ab -cf60d2e63a7830d5011d9b9934bcee2103f4a5d56942ce0f590a15dab480e5e5 -723afc8e1d8d96f3e0d8629b88ee477ea6cb8121b0adddf20405f8a32756004a -8a59b2cf922a6dc0747bc15e99079aa12ac0d9fabf8b47c5a61ca5268e01317e -1f0a38c468ffea597a392ae3399daf7c03126987750258b5e077d703cdbe05b9 -a5fc4d80e8551c2c06a2c579272877fd462fac6569a7a9f964797df79628ba7f -f77447fc2aefb25089ce946e0aa5c5ff21370f0cf84d8e2affa8b30891081b16 -6fb86fdfe65e7e02ee551c6b3e2e324cf7e18664883dc538018ec8cadf7093f4 -a13708013d6ca2afdf644c0155342917c2725598fcafddaf8807200682fcf04a -4efd5919c21ed2ec2f7951c2db953ed292a54783f5c541bca68d305b05df5c5c -f17b9af31035dd8a77ed8b54d4de7d684f54c58a28f0dc55e7c692cfe444216b -18751c24ec1c8a00a5cbd458a0ad54e7c13f26b4c4257fd992fbd1338845fc69 -6b97a2ee6a4d4f03fd387e745eeb8e97eb67e40bacbdf1d6c08e9fa2e317d30a -c4234559096affd5b2e65602ad9c4868e24d7f1d35e8b6679e436a010be5ebd1 -52666a26ba7f7b68a693add1d21138ad64425e9202a043cec98ebc182c152b93 -9f88cb8c89069b72f3c264e2bea7cea9aedf1a8736beb55cc77b02e3989e7013 -b4fdec2767194fa85b1aba185aa01fc8902209068fadfd1d282a59f8b1d7e30e -3829383779fb9a28404759c595b986deb7c59d315023e542b461327e8645f440 -3d1b571403e30d988d5d17b09590d644cdaa885cf36881602f220a7891130e31 -2ed47ee703368c5beb240427e1b30446dae522143ffeac91f3bd6a3ea5c57a63 -f81919870daf71d9b522529438d5e51173973f612b3afa5e4c5c042c8a8a4ed8 -27d00b1f5a102ba8a11ee7d942e1954cf35b875abb184df026b1f600b27aca0e -4dfea33866de9d8b6b8829c128876a2b882b1aa1518285d87de3c39bd74863aa -229a0108f3070908664f4f77a62f0e67923d844c9ef91a6affb8a72606f5085d -88c35fb9e8eeeb663742369e6b0ab87c82e3eec3dec4adb2098cb25a35d543a9 -70025ebe038e7057a8d0e8f7b2eb86418dc39b494884bee8c92c87f1af4cfc44 -c14a177f200389c0a23c24ef1c59e9a143756c1ac0ae50a12a82228faecf86c3 -4f7ba61f010a0d285063676097c7c3fad3b19479c8c50d712b48ab99e4858096 -a1799936df4bfc4169e5544adddf343c7fcb63e83e2b2b6eb68c8a33edf201c6 -5d89e5b0c3d21d1aad02bb07fd463f763c09dcbbf7c216b1554a9402a8eeb5cc -9de4edf0753d8882ad183a9d14e2de51fd81daee2ddf53745a076dbbb790cdda -4b25bcea0f98d832886f26bc15fdae9ebfe42f0a95b7d02c0f65ebb1fa0d730d -a1f6d63c3da03f9ee0961f5e93cf943915e0dae3147e4c100fc97859f1db0e39 -a85a06f140305e9cad70247718385e9151a091aa9a09552c199e3ab164f28270 -fc60a08b30ce11e5d115577e54b57c73b2008fe0f9679cb7d60c3c80b8e63cc1 -046a093b0838c832125c9084c9d3691fdf6236f1e4b2cbbb4ce8d898d4c27a97 -5f4eb9ee7e3c2d1a694465a632356ac7c06abb42f89eb2791ecd146d29fae767 -2f132e065ae5f5432a5705414049f68b871b55c409ac3f02cddb56deb21c8d4b -202b93e8a5f22d09b287fde695e9beab9fb790fadf1250dedfc8188b0a3975be -db8973fd1ee42841b2bf6ae539bd46d0339dee6804a92a0c32ca204ec9897f76 -95d04cd16c3e09f37306109da8b55b5c69660682e8328724655f88a08f11f9b0 -6d3f1629240662f0a0ca024f16265503390d9adf8b521d971d419a4cbc15d322 -1eaa0b79e4a45d2f0bfc9bcbf135e44b937e4bed0a4ea896da90e40bd793ff7a -d0bf85fed6224690f801cd8c0100c4a79be124833774b86ead4d58bfd2598e52 -6bb5d08264df1c4ccd29a918bb27d7c75d0fea288e066a74236de1828a0c9fe9 -6b1de344a4f57ff0997707f9e83c25cc5639ffcf2cd01152d9f676a80c637a69 -5cba153263f8c1d93bfc03642796263c3b460b1fb22fd4f63e742064a337d1cb -c12ad7b5c36cfb0a62341c849e97ed8a6b5e3e93911dfbe3795f9debeb3cf7bd -6311ccabcd1d80c76d608e0366e23725b4c27210c788f25726bcb13149c781b1 -3e77341630a99a22cd95717254844bfd4221df25ab740978011a301861c4f0cd -cbf77e1b69b90ecd4aba88d2c0298bf525c4f6f0be9d34d74371517e485eda6b -d38374ebc2ec4abd9b7969b426b40c356982b735289f80583b377ebca2c14068 -77d7a6516135878a18deefa530a88685cf0bb9ba03c45d283510a68b17853cbf -c1c16428a598e078564a8d50bb1171771ff483ee395ed074d7f524eb8af23061 -5b30a01122d440365c7787ff477ce068ad1c8e4f9a409199138cf49a435326f3 -645d5e093179b96831b7dfc926ad11a2b9bf2ed3a5f4ad135278dceabe5f8aaf -298bcf406c9c11cfb55400fcae95910ea7c09e607a1c2447ee82ce7e3faedbdc -2b1827ec539eae6ae25927a35be1aa6b7951073746e5f684f758fcabea3cac25 -f608e033b3c92cb05b7c9738d3a6d2cd5e0c2d29b968ed7c7bb43d7fe734a959 -7636ca80ee97f6d88550c39d36db458997a98e8bef087c1000add77f8c6d24dd -2e0f6f4772ef61c5bd5148c3d67dbe77df27a300e5d8c9e4b325a6d8cbbe8675 -15ad15966b130bf4499ea1923bef7a9047eb1b0d35acbf0b8303fa08b26c706b -7368332adefb42b66dd9ccf61fdfba00b5aee231c2232e8d752703b0af6ae850 -ab8274563f8fead4bbe9fe860dfd95a6a7e0cfa3d8f6ebd0e066cdfd396d8c57 -f8f17bce0c5678649034a62418dd2463b8f963b43ca02d011a9a1ac4aef9c9fe -151ef8c726e376158dacf1131f0ee855156d95730d3626003e51983624b417ad -c258164ed5b2bd3d4e562f16da8a0b69871787cd9142d297ea3fadad3c2c6dfe -3491c8313c2608cfb1d6a6b21d9569049031b0cfc1d9e96a7186164e04d713a3 -2f1350ab08811688619335e7f331cbf390039502cfa7f68ebcbd75937862add8 -f0c7f498d6695e9d48c4d3e07753062a992675f1eea3cbae77c7bf35433bf424 -45aeaae7876749942982520abcbe95a7ceeaff412a02f6922a1e6c05e9a94d82 -11db8144984dcec1d1fd6418934a57338e070b19ce6d45c0f861e429b3828c9a -c98821dc4ec4d5b7f64cfef16380c478bc5a0ea0c4b82d94e3e01067b3027c73 -e93899ee5f37db55e0be88844dc7c5a538e43510a65716320dac3e01e164fe26 -3406de45c19c250cd2a9c3bb3bb7cd5fafe16d9eb7e00d012b65668104a68eff -bd0c11b55497378896ac50abb47a6daa32f7c21cd34b19f3f797d883fc8745c7 -db21a910abd7e9733239c6751f71b126bd8e26f7cb16bcbe5a066cda9fce63e0 -a9d40a9527bdca47211648ec231d0aad9f4659cad640181b76d6b02309365348 -4e7e328bb1f7280ed4f8fb571d05a7a55842ad1dd294cc46cda410160f2f7c09 -4a34dbb0aca809a6271c8fc97f4103bd83b701f2f474e0bd1e7f37fb7d898e16 -6612f9b03e25bffde2a8d6ae1dac8b7c28b67c371ceaf8020ffc9e1e35973dee -63cfb07a6e3eee03799b4841d195eba565c03e10998fb80fb279fa123c2e8dae -94644927b473c414c1fd0fa0b359a279310e23fe44104f0988de3345d9aab3e1 -e64dd94ec8a6c20556d785e7e4f4bec46c0de73185fdf9a84c6f46ffe7c52c1d -c7d62ad792987dccc225abddbb6fed504864476f1e8d0e2ae009de5f4c50bc6d -8d3902c6c169cc0c2008dafeade6308daa473bc4f8af398ad4a8300f6b989271 -dd59f6d52ee210bab4028b4160979401ed9f626526e43b2362ff92b208a29b04 -8110c2801db3a59f1cbb89139c80bf025d45d61b2bbb6fed4456089976a94d82 -a094aa8201027413899a402050ddc0421afe5d357a8d8e0ab398e01da601a0e5 -1c6bdb86ca2d064b2d8af3ab7a8d39a564d2c2cfbb74f62aebe4c9cdb668909f -2d83bf84894edf23a3db2d3b4ed77d091f21ff313c67a0abab68e57a541942f8 -58ebe5334687a8dfa0bc1eccfcb1b793d5aff3d7479a72ef70b3490f7ef3dbcc -1beef6d171dc7cf8acb25d04181009407b2d61dfb7de55cc433272a46e86a74f -a8a5bc69419e54c39220b7b3b716c5c4cac5313e4d8e1389a2217de9ebc0a4eb -f72dd28b7b2e7481457123167f2a138a2a9ab099706c81b83e3a02a9f9e2e321 -c9658c611fba436a649d72ab9be1707e3711d20e15d778bfeeba66b09286be38 -2f903ec637a8ea274ef8a8c488c5cfeaaf616fa0e090ca2c7a767048b6086dc0 -ea0e3bbc8ef9d01a74cb264b3ca824f0d6ad786127c61d0d8ad13c31e5a25555 -ef5e64e1d19d150d24d1459e8da3ad799fa554dc7877a417f51dd1a3a02e7341 -51b6cd7a2c6915127017f748942865f30fe048b7e749bcba0e015761c0a9e1cd -e1cbae4bb1807245d7547f062a05c1f13a753eb6fc3473caf620347338bae987 -1d2bf08764c309b32b0c915b4735481e25259f53c53c144b8ea3e8c2a4dc2725 -85e197f684936c0690e497653a46a7b86c7e57b8f4c890319279034cedc18bfc -ebe1828d23cae6d1fa854149d1cde376470869f9383e83ccab2af11c2d35eb8f -1bc9273cd399c7e8478ecf742c2db209479460e310f8013f1a64a385209d2e30 -000d71f5fcf62f251989a3d852b9c36e57273a60d565aa387236f61162e46821 -9f755ec5501247ae6bd14644106c04f36662afe7c3cf741664c6a4789f3f8ce5 -baf6e347f6564be8d6fd92ba9bf04ef31c9fd60a2650b1086f9a244a113d85e9 -405dcf23e29d7b46281baf01728b7355b8a1e50febf4443c2d1a2560cd47d652 -cfec6f5cbe060f8c1b20fd4720ed00186609c40771ec8db4e7e4434eff8aec89 -007816aa98863f8f8fd3ca454bc228bcf4d2522d948ab346b5137f1cb52b5a52 -3877acaca92215b9fba427112786c2fac9e5b57879d28249d2d71040aba21fc0 -f73498c856cbc6c5a5f25bbcf19ec97768b8ee9aad3436536a9ff8f22ff72206 -8555d0356ab16b1fce02b79220323bfee1ebbf156308bed2d91febd3f3a13927 -be4d619c75ed738dc1913971fab9a76bf697c6ce9db692d0495abb1034fe31c7 -23eea2feaee80aa07117c16008a7b5e00a13fe2dba4c4e3174762c28da98a191 -0d15eeef183cb994c829de35324614301a6e98311d9f5f282d28da1b485997ec -41eab629352822a5583d307d6d417b869f6dfeb158523a581557f6acf91c4f28 -ba0af9e428099b152946769932a190410319fa3cf1274c6745ab16df56afc3eb -4e67f521dd52f3e3b38e41d0055a8bb6f957817850d693f76c2237f78ef9e660 -9ba5ec79bb0cbb08f461991a7baf70e3f8c8d619c0ec7d3d7aeb964f2e8b7113 -8e9868c98d8fa3a5769147fb72bb82ae844c1331ab285dda9df924cf36f2200c -b0c4b28f19aca7c4591413c8e89ce410d469a7844af4ad00b6089d1efa64de2d -49069a4094f2af0552b68fbe03655686cd845e46a319cebb984fa717b7fc2565 -4cc9843d079512d8ad6d58d55332a962c7b20514d1b53818b47d028b59ec1176 -43d3571e690531d6980c0bbf2150f5afadf3198dfc48995afc745a8fd0b40b7b -d48c00010ebce60dcf13ad056bb53ad3e7a3d0984dc28b8b4aa109ed4d62bbf9 -9f7be92fccdaab5c52cda9fdc972e55a933b2c4c1d2c54ed5d88ec8132d0241a -91fda05af2a736547dbc1da85588b04ac56602cd9335d9a31bcbc50a5e13626f -f86b9cf6bf32d2a5b6c4a3754f9447e2eefdb2207e1c277794bfa5defc88cc63 -1ff2093a0100c2db33baeb231846754a10eafd8640674dc03d737446a345eda9 -fa03143bcd01de7aa1486de001ff31f1f7e67681017a32dc46f8a9aec6cc0573 -4a0253dab3476519de29344ad7b0eee93d0e4438bc852f4ff4d018a690781924 -1730a369bd2312732816efa8000f0b30e8d19b8551857eba645f76f38257d96e -4088b20e11f5485dafce80ab03820127a291acd4ddfadd039c03962078aee0fa -6429e748bd3ea0290ac67f1c14eb8f63cd5b7f4a3e61b91f3428a73509151784 -3ec501946e468e8b68374ff8b0560cdd38f2eeb263106ddedaf7d54ff1ed7c65 -c9910de2993171eb6f5d9a4f0fc3368d6f6b5e57e280fd9c5c1969cc814d46ae -81c2ab001f03e1aaff8017b6d7e84cdf0e3a747daa3d2e1d674cc49c8049e8f5 -8914f54313f1084396beb5defd89dfd0d73ff6ba76ece9939b988bc5353f221b -e4bb40b79c19612319d196938935747e96030a5df12caadc7afe24878a2d6e82 -5230548f931259546b44b4460eded3188fd76d06a2d0392e2371036401e9ba72 -a14e50d6aac474d148a40872f222d3d3ea322c37aed0d04cbe2551e513e40943 -04b30dfb33710c66f3df8e24296604bb84e3e498200d942bf52c452f79b855f7 -bfc47420a44f80ea16be3f8e0716695d20ba1d28739ae88c04ed2848b70d7369 -46734ecac041a14ce87397706f1ddc57144b7a61231a1d0e458d3d6d014ce66a -b6e37b46774a7a9c74d6a5b636303d3002151be679abfbb7399a0dcae5bcb5d8 -7c84bbc66fa03df92d4f5ae78e85313acd62522caf4fafd187c553302e692133 -f7971b24b92b9e0321f93e7b747bd6ae5f51cdbb247d36255740752549bcf8a0 -09e774a01bead6ad931c11453a179e0ae2d23c09acb7b2bdcb16fbecf07515da -0ac8a4b2728b3d5c8945aaf10fcf770008a0aafd33c402b7304f6b203d0d6a7a -be7a27608b10f9d67c39f5fa2c09ba5900f0a6e6c6bcea1a0ca14411ada0a36c -d19c25ddd2d29ab25d4cb7dc3afaa0f5aad7e22761863cfb427fc4fb8c991251 -31cd3376c227747a6d3afedd341a4e6474ba273e687640eec85bae3bc83d762c -3380159c2af1dc118fa1bd2382d339c5d213bcb89e89fc8241707e9bff40ec4f -85a889421643ce7a87953bab67fda678da5111da8a95f29290ef70d672f0ef5d -ce90ee85275392766ca752cb7a2bb9eb416ffce5166a955bcd54fa2082d942c2 -89a0fbac57b9cde759be0b98d0e6f5b51c7dbd6331730a15635edf1a3287c679 -61c0a248578b53559a3d040f8847813ad1d76480c43f4b674bc0659bebf9f1f7 -e8cd4acdc0e0fc27104601abbf25304f8d5aa221e02e73c37868baea6106e069 -88a7b580b091e6c4ef56e0b52bf9055039d2c3de83c3a6d4f8186646a6e1ec4b -5ee53764f122509d63e339c51b15fdfdade4cba2880c66bd607977684ad01aa6 -d405553066de3d2bde7eb27b332d5bd0371881eb0a9d2c2b7728f827444a13d5 -758591eacaee4121c2a00c05b58357d8053d2223490b5124fa646965a0ddfcde -0f99b41916f8f80d81970753daa6079aa0014e800c54052e01d0861a7d3add7c -2b542695ad2a3d6c56190a170d23bb34829b049e2c02c69e79d597fb5d2f9ce2 -713d681f072435c8e3740fb61127f5d3bf4cf1adae5e99e66a0c472076f476c6 -171660a613a35eae2d353cf78a06dbe7dc227dff30a501a547241c6cfe8123ae -053293e9ed0c1bca42ceddc775a9200420a37ef81552b721c077c005afcee2fd -fb2e9088451e0260fef0be7dcaf9d0e4eeb3557241bbe429583e4fb813fe1992 -1ffec808630e4b3e64cdf9d2e664802f3f0846f0216b8422245a0363a2a6ccc7 -3f7d8b39438246611428c6c32584976b10375003469fe0efd968e21319e382f7 -50c386b57d7b7e8e4b5dd8dbdb8d816ce712bb7ec4d3a2ccb6fc5784c066f79d -f9fab8f575b42bb18f22a7f2919364c61e81cd47d0b121bc0352247ad8d83ec9 -36891e106f85e8fe25efaf00582095dc7f16dc48b3cfbc34234aedfdd357643f -79cea8fb1fa81b91b49f8c063fecaf8b8bf0fddd8f2063eaf6464de3e963acb4 -33a3afa3944fdcdf61597fc7d6caa8e7538a784024ed4cfd497ac35c6796fb14 -65aefd0498b994fca5c74c003c6ea1d6c8f935df6ef5cebc5ae7024986be09a1 -3a368d9da9061aa8ed1015a60778e63640addc44dcf2e32bb1d017f10a319f44 -fc8aaad5cb149ebfafc0dfcd665b07f6387f4e3fa9273815a7c0e87390b89964 -18fe077d8330190a04f348648e1eb790cc3cdb5005afa7dbeda6e102d848e725 -ce4d4a9a9e7dc16a9035892a73bfbbe130b8d059e0282693ba7f062ee031cd38 -edbf41556bdc7c34c6f2547797f2b4b202fcea7d6c1f6d6a890dc850549e2d9f -d4fed66e6a66f93ac27cfbfe938832d17c171729fb0eedb5befd2d07fee6db06 -ee7d2e5302904d0ca4b21b40e3ed346e6976024f6ddf05ab1b7a339c42d2989b -8afb7447b2b772f3cae03abfd55b1d14f412109e7e99057c66ed1fc1c842e336 -8f8ad95e67626219b6d538fa55e6146f7c4d2819b6ab69628d3f918d5c21ba65 -6101700f2f9b5d5399a1209e0fe5cf62cd4dd8b065abbb2024b7766478b78d89 -3ea80e633d445a240e27c7671018dbb01e4b38beb85ff02de34a4c06a092467b -2409c7a6f7d94461d55073a87ced3a6048ee3b688042bcdaf6d4ddbde6edced1 -7c0b7a2317e60410453cba8646e00976bbf1542aa0614f93a6a323de99774176 -bb2babb068c8c29bd4e4cb7f8b3646ceaddcdb611215a5ee9e61bad78d8bd5ff -f66177e2069d7b4f87c6fb13a61f2772e8632f158b4f1cadb8e3daf55e5df78e -9d50a27bdece942f579490f570d3eb34cb69203627abe7bbb6c5b2323fd8fa7c -1a9271f36f727ae3bd9bf660514a052c86625b1245e190fc91df37b7e6960fb5 -1396405a4f2de27f7146ad45f9e5e14755985c189cda794fa21d336354bedd98 -14ccc92cdecbef77ee962b78d053752a22f5ef66879af4d77cc798b2d6579d54 -9077dafbf4dcbe07c70ff56070ffcd869bbf2d96271e461c5432aacb7935ac07 -fd239929e5d27e34c91a785fdcc479b84a99dd3db6711f1026a613d24a6f5de9 -00e4a410ea22a81b1106f6e11edcf83a3a9f3adba5b22b129e3d8f30807303ed -fe50943d68951bc743e7391d7aa1672fe0dda7fc8a6c2e87aec891a6d8ecc050 -03fbb9bc38114416c4e330c5b7b43ace475f0c8edc9abdf5fc137c9e07f1f8ea -bb13365b3f7e3dbce2afc9388e9279136ec6e0edb289beeaed74370bcb453884 -3ce1b3afed75a47bfb50b7bf4d267b014f2480cff2d9e21685a64b5a6fad8963 -1d5ccae56079f4871aa6b9b6a7ec8982f266b6eadc060087f2f7af187dadf05f -c31a47b30f2a250fb501f4faf7e18c3aebff55fa08c74ef27d96aae869a26b2c -45ba8c84b958db1a7679ad0e6bd09c498543e6d20691b072d84c6760c70e8e90 -ec179e6d00f684e6c2d070f894b98d495cf2d2978b96ea13cebf5c8b9ccfbf05 -72a00358a8faa812b00c06f2ad40237839f0e2ecff57d359a2c2055a1361768e -f816ffec8254c512e3d57ebb23da610fdfd5e1e16b97e1fe97e10a279a203e6b -b52f0be0ae9742d1a7faf2a0d5d6e1560d6a3e8e1596fc57a3288fac6a541646 -5ad8c50485e42cb5214d4dcbb82a16c2a15d406698ddefbb5fa3dab291c4020d -52b76c9f0c91b5516143d99d82611eeded385015cb53e07a30bab7f27f22ac73 -95210586bd245bc0d2366952c1d85ecea90e68e189fc313823433321d6ff1785 -0d8eb6f1e4f2f6153d84b4b0bf198ecca9c87a80dfc33977a9b06e994bd86800 -4ab2f317727243b9c9704fbd88a0e6fb5ab8c94f38c7e20daa078edaa9878c8f -3509b2c135e9801c79500327adc9537318d0f6b700fe99166d4e7c8f6a41bd45 -6bda6719e0ea158b8aa25e73731e02d215294d91f44985ba21d4045b1f8dcd99 -69a0b36e07b3c7534e9401960683ac1696459b2a45e0a4133d630e5bc81024f0 -b1ed05e19a6991bcab03482ad446a1d542249cc9e1f13e091508eeab9f744a67 -85e3d64fa0c7c79275292a4284f62754d46c0835e432c3a1776396feab389c20 -775f2f94aaec26813eaffc4d1e6b4df16f7b25ad9cd3e8645dff53a354718283 -e6da4a788dca6de2521295f51bd4b41d7b1f06c02f9cf60ad1136425c7996c55 -a00798c6f180ee8bdf52c71c01b48b3798eff89600b2281d68fb2e8567d61d22 -9b31ddd64b49fd662131d12bb500ba609e2f298c237b90c17c4a29e1c4e75ad5 -c1631c7058f7aa486b9c19c760b2bbae67167472490d537d14c9c70437d8a964 -fa40effa6af2862db37b5ba62da47685971093e11103228b85a6a0acc3168486 -cb4d94f0b1b01bb35ff617b5b36a120f82f783752079b66cfbfe2088290ba9c0 -cf8255443a6230274299b82c7e0078a9435c2a48ab298954043521391cdb627a -efc038208a97a62fefbc2284290e83c78fce56f1f6aa31428092800897d6adc8 -ba2c0bdb767e9b684dd51cb44dafbdd3f084b3ded0fa1af187bedd1e7271ba2d -9b040ce2d98fd7a56f82191756bb8f582cb83ff0188350d8d5451671a2bb3478 -97ee71a4621d366d810945c790ec3bf4126eee53265a2ddf2bfdb8cb8d78352d -8032e0b87fb87323d4defe5c5c974db8cf06203d0cfd1470aeb474dc0fa2d32d -e1ac57cf43f5dc2d2751c84e10a5055ce00c594a0dea8c1f65268de077f06ff5 -c8e083d70fac84a5605eb80c81bdeb92a65fcda58979a93566b29c935b3ad83c -a1303afe4eef046c2ed3646c0ced2e1066d4eb7f5db11f171b2440a0ca362253 -20098d9388aac930db7be1cffe5d6eb05dca2a6355df026393b99ef5e3cd70c7 -c82ee1fe5cd113766bf011bba63e78b2ddf4d86519aa68bd991d782713ccd2c1 -3f2eea70dc273576aafa2a0d2ed22e35f246e92d88c907425ad6843abbfd75e5 -78e1cbd1e59969cddfd6d26f89e617005718492b51442c55fe617da67d8ebe5f -bef9bf22357a125d611e04d9e5e28d5178c83e2c3b073c205d7e3a792d4d0232 -c70e596680b5947e6504a7aa48c67795a15160d49d40174fea72dcce9f97edc4 -75d030d02347961b7d725b78c7024f98aa0d4fe953807b39632f0d4531c6c1f3 -7062320fb655447c355e55dac7faed0643d33f14cced8ff7398ec85fd93bef6d -e6032c7689658a96cb9ddd856fb6c0a4be0fb15bb46c068673374bae1fa73bbc -20dcaa9398b526128991d68eadf0b90bdfcfd097b2f858363d819fc6ca7fbb47 -6aa237cf38daa9653b5877aa322e3039f86bf54ca078c55a35301fdcad322d14 -8e65067a0e48cd62cecb0d7f50faf272b51c6d0a22c402f0df1373ddef2d3c2f -25f3c636f9f5f8710bdb1f5998f2040b7bc4bf6dee428357a695e5f177feedc2 -be6ca3d7456f4fb7b97803df6de76aa4bd622cf080800628d35841a838371511 -04623706136658fa3cfacfc116a30542f8825d80532454675cd5c9ef6640dc79 -aeb9c37a0691d14bd260f58995b7ef2cbb236da7a93c042450d940df347494ca -6d5df95bd04d3077b47926e34610583984253fa1cbaf4b0d544e71d5f7405e49 -41445c23b0a1c3c6882254602d0ae6582f64dddd079f2d112b0dbd31ca685bf3 -dfea6d3f310bea2b2f4cf4154cd37fb19016f703a1f9a045c7e21cc994c0f23c -5e4a49d0ff47deee398d478302cd0c90380885ab4a59b6f3d50bfaf00d9e7f3f -0b97562161091b4eb201c7bcd4d1cd239b00df09d03836a63e8a9419cc9dae0b -493aca2a7fdafe0ff81b6a9896c7e57faf1355fce5f3d54afe62c018a5211fae -935f1f9795d1606cf77673b699829c9a136c6534438ff817759f8684d5345417 -70f6554539184ad886156fd610f331532d0ed22685d56ed02fa51e265ff34a1e -fc8cb40b749148ef80016f71cb0647e1232b7450237f686828c36dffba04aa6b -46a526e693da4fc9e2c84d7245b76ee7dbeb360b2f92b112de8e5feb3e433321 -eb67e59f3a41c7c91e5fc51e811b2ea7a70a9562bcd8fd854d761ef290ca50c8 -16f3c58d8e48d13edc3ba242c35ca241fa15e6243aab8f4b5441cc0cffc1c9e2 -7729da8ba3fe1837504d73bb13ba53ee7029aa5a1b137244be2d16ff3ae6cd71 -8151c53d223def6463c124acf3c37bd5a42e4ccfe3db5d3a22f249d0a5cf59ed -ab67a3a6cee4f7838314e9e167d3ac722539c6a60e5961cca947c8b9d818802e -54162eed974283ead7dd09fc33bcefe33a78ae540a98fc6710011f0cd96300bf -e5b9acc91af99c6b38d005481771655d1b89bf8fc5fa8d682ac36a54753a106d -6cee95baa71b131786a76f6ca7cd143270f679c91635822a4a2285d6aa44699f -38603c3af88b82d5658531bf36ff97bb959c44345f51ad2c990347d7f803c2d8 -3345ba5554ec0af247e7ff00f483ea94a3a6407a2d0ccc9fe5a530139336190a -166575049e84f3964141e64f9f9fbe2feff15930340b49adc782b7ec9c2c24c7 -816b7cf5e7aa3c194b3f50af218aa2b1a69e9772a74cc661a96100f9607fec9f -0e6a34b6d3b9b6df0d0cdef014c6e3ac43491883a33304b464c3219b883a1f2c -9a1f882449ce7c0814be53e0a26aedb003f25f8ed3f9506efadba4b8133db373 -d66c0fb02ea5d1db6484418398a374bc43f624dc1dbcb70f9b6b97691d297b4f -50b0b7aec4de5732ac5db32e488e8131d763ea2234a8b6ba67acc6ba688c3f09 -b1da0f7074b2ec71ef2778dc1dfdfa2b27d74756a43fdf2fb8be3fdc9189166f -5747a30bfdd73b8507e6d41bff9607a770cd6d30a8b476cb972c896b90f15057 -f3b5095adf44ef4347da078dce7b6a41f01c29abb94e2c70e3b3a24f4169f80a -7eff7a9b53909f97160964eedcc0862697c872a164be415d28661702c33f4edf -bc8c172fdcd3e70d3db0341ef1ff453232617b89935a9249bef30cfb7115addc -c06bac8b37d4363710731a69e3975c983b96bc5b8033cf0c17c4a6dee8e45f61 -53c1683d296a937f733c332fa08bc9f4c5455e308733567fb7b51300c3dd4665 -15a2d90c58d2155270e64f2a555f45084bc75cc2fcc2dd5ed0582943a7a5359a -4fab1a5310c083343ccab56c224f114e46c8e6f8233e9fb01a352048144592ee -fbffbe37b26c257f91220d792dd0f08da33f10baa54d92044f24646f9b998283 -1bb052d3873debe609ab925b8cab12a80067e52adaa1bc0f469b0406c975a17a -c99594a7a8c7ff29754319338e16508989ecf307e9ea3680ee18cee760a02b76 -90e09970a402bf91895df85dde19f9f125c75558ec5002cabc1d4ff0ca1dd979 -ac53b2d742f45d787eebe0c983e12740ac3b74eaeb8ddb0a058030e2b5aaabe7 -3acc75052330fdce054d0df654b4dc7cce4b07b9e48abaa918a2c45b0675a360 -8f9aa1f307b1d93c13075a57903935978e764ef45628f219ea21740a2c720dc1 -4037ee1edec2082462f882bba13fe63a335eb8c18d95c420da75b152b5791200 -2dea7d6f2eae40f84a622f33376da36234c4baec46bcddc2a7874ba2f1f57b19 -b47a7f3a4f834b5780eefc08516d223b42a4e201194f03cc94aad45cc49cb238 -2f6af71dfd8abee459fe9f9e19f1d52659d6dd9d378c4f06c39552012e17e541 -f40704a1190b5887bd0cb07fdf4a3a3adf04639c237242cba12758e371dfb2f5 -5871567815806e74fe8cafda5031354aeecf88feaa172bf8f4cd9bde36362120 -2938fff3f84180ab0d5e2ca492631ff71835add3434bc1aca1589cf50ba27fee -f0d86e6de410c00c5a40188a91c01d944d3b941ab249ce3de0dc988482ac835e -ba5e0a045a6dee34f7c92ea4a1dba8c403d614dfdf3bbecafc61ee5762ae4f3e -11511eaf682fbd245d75530476c2151c4ff6aa7959c5dd0c2f54c483ea556c95 -8774853ea5f841577eb57e89aeab3ed00e79902cf36fba0a18e460c849f4e5b3 -db02888493dc249f1c1f44bc7d7011ae65184280f5f4cb19793b3bb002a439a6 -5518fae1d5848e10ccc01e75a77fb1db966111754111044e6bd282ebf00b3731 -7227ee6f76a51e1921b2ba047a5f1f09f21f13e1cf44b3582af9c2d26df159b5 -04738c1d27acd2c898ef8148f9058dcdd4ce885927ef51c36b43fafdb08dc186 -180df681f94cb9b84c298bf7804280162f58f62fedfd7bc0e9b8214992f4063f -7685d655f248ba694252e5ca13623f12062c4872b5989e13d9c162773f976144 -cc8fcc96013595b498562ae4261e7a1efede4b79efbe7ed5e4398d1d9e66b253 -a0f99f969c15fbdac089a5ccabbbad21402852801736f0dcc64b0d4d7cfcad33 -ee75b328427178082a96435c3c9f40e9cad04d223ab295eda1ffb193abb5718b -f5efa9db4ae428bcfb422ef2ecb16225c67def9ef76ad21cf8626f46854ccedf -885709053e56e6e758824ee80b0c8e4d67cab4e5d6d9e92fdd9b99912c709ff4 -57d0ae3c258229551c93fbd68e47b00bd643872e5ae53f292866e566f2f9787c -1edd81b005745b10fafc9911644c5fee21e092fde448155c9f69ee2f55c023b1 -2eff9b86a86f8786b26069ff3f2a5f7112070db4f4bf93f40ce24d1a5c4bc5a2 -b577d39f069f506f197be8c590c73bb5f44ffd6994e2eb11786004c71d349521 -2efcba99561ba4cfd479ffe07ae4c45f5ec38c164db89b192d0dd7c07228bf2c -0ca8374f377c4b8ae58a265cee76e71e952accb01a9cf1676faa4f49dc456c9d -c020521a2e88d2e5c3904157d3e68158ca53371c73be43bfbe2cb78e3e1a9a15 -f29359be03fe111b87b252b060c453fe8bb0ce288a37907e7648352fbe66792e -e4060dca4506ad6a7a8806951df8d3d29d0347fc5f4f408472edf2c4abdb7418 -28dd1afa26e6e8f84e09308bb68de881a61d106757c09840e49993551dae5915 -a28a25ee7949c3a00b7f33d3b2ac252f1b8d0896d3116396e2a7fe57c028308d -d7864d81cabe4824bf15cb5778b941a6b5e9e46539a8206f8bdab18e92bc0aff -2f7640dcdbc2b04f7cf5781345ea8513d00c7a22dd5f1e43b60ba05acfe45572 -76ff2374e36f5132b884ed8dacaf72d5926bdaf62a16715486bfcbe4758ae053 -687031d0fdba9199fb4221ffc9b12844c4d2e94e393f6f4ff2d6842abea45372 -12128d3234738783ae23850090718bef9adb55d26bf606dc4736e8be6ab5c079 -d5a6dcf0a6f1b1df6f33ea9c1cb5e916aac2b80395522382a1801e15b44e97bf -c32017aa2eb223c188e63a7f5e093b7354bb25071eee2c3a545763dc93e44e35 -96b9dbd7c4b4818fe8237ee258a2032153fbae62f5dc4afc16bcad79d2550a1e -2221482e072b9ff488bee9730aec44740b55a35d9454a4afd2542ca9e992d781 -6fb6ab598ec696cd7d58db737ea1e72cc4e4ee39e1d50cf8af3d94636239bb87 -2d4532e783ea90cb1c8278a9541e90aa0b6cb5a6522617b406b495cd2f9af263 -6d9e9453174251786b4c449aa9ae25f9f48d6eb00234003a421570f08b3081cd -62e4de0418033395b45f559ade69a75075f363a13add803d20d13f54f0f6fa6e -4061f653d4021f3eab7808ef212a5565de8ff35e46e8bb02660326fe6bf92cda -02f4990e9c9653d2ec5687662b965468505f26d772499e649c3a0d69e118247a -72077084bbf6828daca78ac4524c599df56a05ffcf11d073465fff2c52b8200f -2ab7de3212d573455e4be882a31e3f3b92b79a9fd621c5dce0c70f09df800df4 -8a594435652f454905ac19fc7aa3d43a5a5f360778e85e0b6b82d126136f4858 -3796833f454bee0f16c40dd79fe440b263d9a354ce8e7dda6947ac89828f0a0b -4ea40d62a651421c15fbc2d271cc47116df9ffb388093efe6a3bd4a6d21150b4 -286cb50aee34371b13083fc5cb8ce57ade9ddef9bc4a77f5ba71e9c71d159199 -b29203c64c53041e38b413b901e90bbc9c67378734c049e497cc67bff03fcac3 -684c5f18857fb8a0d941660e9b04b55209241226cab4684ed71dc9a212d2a7d8 -75d0090ebc27e3ea81cfe4daa0c3277f91544d134cec4b5da927a8b9c0727ffa -9db44a2d6d9e34a8673903879b041462708af18ec1c658f83d4f65d3df623fc5 -db60e9ca57db545ba05c10a9a68e94f85b4c2a42a686de90a50f482cf150ca6b -f1758078bf655b04bb9cb71336c96ed9b1a217d9a0619a747cbf82c4421f5520 -3ccb5cac0067f83d17b6e57264856491bc1220aa9b628ce4252a9932aaf5fd6a -cba6cbc11a5cf2d34bd21c77f3963a49ca746d4f1661cbdf2803ecab28f50aae -66d2c2dfb81f0aea5fc3ff710a5e35edadc08792b69c4af174fed9cdfb2e0c43 -b5cc87adf3fc71121b1cdfed660ae99d8d036c4896362463da11a7d7ca08c7c3 -49ca8733021acad25f152e797a946d1b4010deb8c6dbb9432979556e0cb80a89 -493d58cc933e173cbd48118605bf7de3e8a909519b1f7d58c4b9811e7d3b50c7 -297270d1c1edbcbe0f4c3e93143ca44dc128eb5b17d1cdb1cd8b8233387b6270 -d2a8215407cc1df046713aed6d1495150bbea29bebfd0c08fc1124a4624b7cd1 -fec7f156f95321825fdee4c0ea668e2fe1b0d92d6aced305ff511f13ca92afd2 -e99535de55a09a3b3e0355645df6b4547a50c2c29a2536cba3909bca6b761b91 -caf5d4ab8e9eb5cadf71eee71f0433b9b9d9ce0394b5c87d38193498f3961673 -7a748fdea2248f936dadf0d8952c33a4ce3eda258cb902f87e4f623c77151eb9 -18e6e4fdc9537fbf03b743693187dae6c9a749b5c7c07c325b9b27b025c38b48 -c5ece2d82a1b982b9d058dc49b33aa425e7eb79827b5a62a4bd7c5bd4488099f -f7c8d9aa169ad961e17a946b4e65599e268a2a96d53a9c0147da713517f0bffd -cd992a1ab06f6057e17eede9c7f9077fa60bf4f11e885810564c0f40b29ffd2f -b6e9a8051c661dfa341ef0ca3c630e4df019eb057bce4c1407f9185a8ab4f882 -81d175eedd45086905342282d26ae4df524b713ef2088451f1073a59acc3a1f2 -4004418469561682e72d20f59cb9ad4ee5232aeefc996ccb77fb3beb9a635900 -06fe6d2bb606293d40410919e31db52063c87c17584854d108f711af8112eefb -890429a772e77bd03e50db3a2a1ef371268ea9cac1bf7bb15a7746790d67cc0d -a592fec74f0000f2d1073985fd1053537a455548d43a12bd556063a6fafb0127 -e8c1190f11b992a0fd26a3ca823cce5fcfd5742afcdc02a790a25fa57dc9359d -ff8fb3550da075e3eb3582ef454c92493e1578788f966db39d0038d2cd7811ff -da49bfeba9cfe0654b68fc512616439226b08264533f295ae94108168eaf284f -290d61a62e8c8247b66a64289303ac847dee0f651c1b4575115d79a9abb9e71f -8cf7dc4b3db7c835f2abb42c37456fe3202ed6ce061841723bb2cb759bfc78c9 -07c51737b52469f1f2dafa7ece85cc798050dc1bb63436c94ed1af3a0e6628f9 -dbb10bc24d2a6d94000b2d142f654a924911de0779ee7ca12d82e04bca01b3f0 -bf6d1679d8a4210bd58933be71e5bdd9e22ae192637c90e7b8905586d8312945 -4d68274af56c5d9636dd4976c0c8574e7804bd8fac44fef418eaa7f5a0410be5 -a4c592bf762ef8e66132f71378c37ce7c1fb485d5be0a27628125cd768ca1427 -790fb8c160a7f94b80188dbb55184ea6d657178f30c055596a370c9f40dd64c4 -f7246bba74679a347e03d7037a4994f348c8c4874df31358f02157132f98ddd2 -322231a9271018a49672897625fa0041550c99ca2cac35cee4281ed9db5cbb0a -229fecf98aa5facfb951a1b116ed5c58cf4015a9bf03a0b1505132a46ca6b3cc -02002c40f040e0b97303ed8c42d9f62a95610de3506c7a628546f9e4d6e9973f -2a77cff929c7a41603a99363dd7f87f3c076990546e7814ba3150d70ce635943 -88152a0bb6d23bb4b0ad0c7edda0e5fd83842a6c2db044330119c3557ece70ef -8297d1d86334958ed8037d6fb57ef20bcdfaefa66d2f02cf9a074dac8097469a -b35a644035a7a0f91a813aedb3d9ec6fe2ded7c9d5a414cf394dc646df0510ba -f27f501fb2627834376f9776d4f00869bc8b0189ce88008503bb16bbc588eaa1 -edbedee5e41b81774054df5b31c4323c4f2d2289f018a3d07dee4397b69470b8 -b1d64a694f1333130b5310763054870b88d2d017fbd62f3a2d042ddbc4cf68f8 -e1aa1f790bf2c7f598ddf275f11899e46d18d9ce4645671b14617cbee762a485 -95bf927abd6aa985c1bf117d82727432b8cc573197cd87a096daf130de5c101b -ded264c14969b04f8f55299ff35cb77b033a1752ff04c96a4dd43e9e66fba118 -9dad547bf90c89bdbd77200042172c6243d1c465751dc96f5101eee86c76e4d5 -435d1f1fa667e7b575760681d8ef3b97f01f58e2406d3aa084552ebcf985ebed -06baf00f2098f01976db0d4a36f39221b08c00b680ee425a9fa22b5baeb571d9 -31c9009a03a88501ca1cc8da7a3afaaceb87a92835161c3f4c84970ee219dab7 -ee9f5542d108b9326d5fc58cadc39d10527d481d303cc11cc424398756932aaa -b06d5600e4d24a0d7dc36da7e8b32871fe36e59e1049cb9ae8c361c3c3ebb365 -5ee4a2facda18377394b68f046655d679ff8122da647ca64df6a7b99a3bae5b9 -da56fbfdce787f9f8263eae5e16f348c22aecb06398d714a69dce1a932f2b50d -4964641ded3143548e33c879b8c03206f6feb025268f61f9cae4642e6009c804 -3adf0e4a1b5ce27a812559bbbecb7402ac2a580c6d8471dcdb02e6960fb51396 -4058ead51e6b121158c9e3d0dda75439e6eb47293c642c60a70bd9307ef337f5 -ef4601dc0eddaf6d675d17e37350ac6bf3cffb442a602054b52a5ec600f883d4 -cce1ff0d70304522df3d2cacb5bcb2cb37d453b76f7d4d915663e19c6e1335ef -6fad8e7b76fab514abe26d837565908135cf8518819916bc9f0db07fe3b6439d -c42de0dec1f5110b8fa5ef40289834953438a7bf83a6261dc80cfef8405eac76 -32815aef696c5b86d2cdec5d3588bb8fc5e9dc61d97d2a5869115c8260f31f06 -986110dfe2c477f80bbf6b3d9f59a6dd573eff782887c9b84bed766b63fdaf13 -dc4ac55b7a127be7c2555bfdfb63ddae8346cd6ccb6c77ac057bdb1c51372603 -8cbb594119970a50f42acae2b9d69784c5f621f53292fac082bf8a78c197af6a -8b56466e9b14f825e45a9d8f554db27cafcae033831219f6bfb6e3568c7532c0 -ddb22ed77cfd1f46bb98480d1cea4800e3d2b8f623051da01bde6c8bfd1aac33 -240f6f89d49c824e4b5d8bfed9b536fd1773a3ea254d2e56725861a1289de1f7 -8960dd096d6ba285716881f26795345504bf0685127d91c893b57122f858e1f1 -93ce8270796fb9b0fd7246445d484005689948c40376a8e612fb8827965ba50b -565748c8afb55247f32feb36a4245f136d6cabd1f491b753eca2104199bb3f1f -461d1be91c8ebbe6379b2ff0eef8a6fdb5fa98029d7cf458e17e15631c2b63d1 -72264f66e45a8c108460e3e353997d9ee098f83537a22b5cef20fde0ee260b85 -c98befd03e86abce66eb6551625f8dfe379a07f53c32888e9e4c04817d6d5abc -f02ca074a8d11754f4c6fafd3c0751886de2fac502bd1d3d9ec6b56b4d5d5c01 -90aef863969d280220e45f9bc52a18784cafa7e9bd0aba47832cd22e6c0cedb6 -28cf6a1eea4e519495c60be2f0657a43f311cf331e83e9e8109b6ca5235097e6 -d116373c76e9dce208bbd9573c7b815e33e3e39f8eda3d1d07be9ade9f74181d -c5b9214372c93275865d0d4f3902c5dafd4fb246808dc253d15626549fd97102 -1be3384bdbeb3e70f5b846a85088dc8c4a9a411ef04cb3ee0399e2f92e889ec2 -800faedbebe32208a0f81f4fb33b97bbc9daa92a3b3a53d1f7a1a957cfcda2ba -76ec22331c2ded3de9ccb0f51e7ca924ff8d4f0f541bba1a62da701fd2a05c02 -204ea9debffce3adeb99995087932d5963d2a6c39f715225d7662873624158b0 -a3fb470af5036028a3f04600f9e86ad203fe14dcb5360aa9cfe4e225b5abee97 -e21237ae6d76aecc97470950ee7a2d6b2c5d6ec7a88578ccd349aab544d151c9 -67d693f7de7005e4d92c5dc7b14b6979b1636092fd75b52ab6e83d7de079b2e3 -f5187467a0a6b3fb4e001ac42c3ca4ba743536d9e9a8f0a37b23a5509fd88ef8 -bbeda576aa8440eb7c76ed2c1b2309120478e5a35e071d75c16ef0086eb07ce0 -4e7242a68c801dc3c68663444db00efd46649bd00616b5a346955ba95b881e7d -82733c8f7b563ef8a124d7312fcd0ce0dd57a26e6e104a080ae51b9b80b48960 -f1ac9f15f7ad23fdae73b7e93edb14823fadf09afe275d1503a0bbbbd57efc66 -e7b4f6468369718601a36e3b163be29fbefda393416a86f976d631b80ec34755 -9a0b2e328ffdb6a1ed1ede49ea6749d7d55b04342e40804f030b04daca04b43f -f04d2e71c3686d9a3509086cc247524725cd7ac89fba7bd37212754fa0afa635 -317f846959f2a4ddd0dcfd1b1e5cb66bad528e47f850941d7ce69a967118f490 -95a8f8978254def9e7c5e91d736a70cc3ac70d1aad33d1195256020a9ccada88 -76c0ea39dabeebf3182b0fd89fe5be65661cdc62afd9a3ced45628adc41a1a3b -d681dbb4c941020ce8b8478cacb0e4fceb5b6c16ed9ba14f1c3704c89114c5b0 -80d1a7115d69e6f932096eb9059a6252cd63531e9a72a36bab438a17686c41b1 -5a7616d857eebeb60c66d3b2a991fc2eb3f0b93df445b370cbfbc1754051d1bb -b2997b93b66ecf29d6e7d3c552e0538fa41e0896d05c10684e280d683e48379e -164b356e916afb48f42fb90acb10223b54e74a2a821787322e628f6eb02be9d0 -55f46574342907e69038ed2258dd96cfe873c6fd5ecc7d460252762e7fc4af9a -608b65b1abd49db62324c1efb0742c2ac7453012840729e4798fb62bf15a2db5 -13fa7ddf79c204efe0d4b7cb7978aa3eb36a2c53c8d2c913ebf3debb9df9c52d -c5ec37eed5d8924adee4ab8313467f3f0afb3bf9b424749f73715cabd5b86ec8 -7264cdcbb8c111a4bab2fbc568b65a081a8e7e18fa0d04462720baac968cb6a9 -445cdf029ab4adb8786f35a8d2e02459401b5be2ba6522a7a90b46d8333c35ba -38437539b4b994e1c1ac8f6ec84a301b764b284ceff5ffa842f298d9c2f3c197 -54809e99550cec6ec73cc66b94d6e2980c54f17506e7c67902631704f51252cc -1596405bf72ec7243687fc7a0de9b8c2f4b311dc8ec7fee6bc31645e4322efb2 -a59483c1734df0ab32ee58b6a156ca6b9507797706894aa412b9903203fb506f -345be538c0e253dedcbef172cb9365f99e55b740b45a091848f8ce635f54f499 -43afe4697285361f718b6de2b79f98e0e3adae0509bf571370c425d1aa795cb4 -a1b10ced0d43b59bea690990313afe7ba7eba130f7e5639bf12c6b7dbbc1a17b -4e0fdd4b02e7fe481ea5ca3cf45337d47488bfc09a0312b0258596771ec1e26b -c7803227bd4a5bdfa0495c227a454a579dcab23fd4ae8034458fb61b7d89de7d -4524d7bbdfb4e00a6b4275691be8f77a490e768309d6174379f52ddce411b55d -80843074dc394e4e88b7311918985a58e5012c6eb8007f22903f3ee0cfa1aa61 -3128fd7b6dda6e93a6cafbc6a7f3f277868dc34939542072fa746c228745319e -c0aeb14792d9d266b2d58c804d7f4094d5cae77bfe150debdc47f2f23b0b37c3 -b19e19cf0ebaaf50d64df8f624048c3cae65e0c5770792d6a6cb97202174b003 -a4deb8a3758a83283dc162cc88526a3d037d8ab1f823eff5115da7d2373d1d11 -56b883d419931f7956024a22312130659a8d2a946dc9cb721599fe7d5d28dd66 -12977032a94bf26215af645d8659ce53528b367e30368fe0db4b194487a4890c -26230fd2bce623a12bc09b437df3a3faeee49571df114d6492b0c1e3ef4adb7f -8ec807c39c3ac56aa82b2a8e7b4bce3777ce3104d3a62e8bba72608649f12b04 -e5908b5f9d167d865c9cbdc94e3e8c99e06693fd43283c58cde48e5295b327dc -176b0ca861033c1f183a41a7002e9ebecced00584c5c1fccfeb630c20666d91f -0eda19c9a59ef508260f6bea436b351af6518cb4e009865fea06d4fd3b2ba970 -c3632c4556861e54a6441f7398d420a99624fe52cbfb68b8c1ce2a27038809c0 -424bcb7e54c5781be2be39e52bcc1df2b74ce7828056cf8e3f5a56df1e54e7db -d281570e270dc818aae4581789c7494baf7b1ac9cf3dcb9cbae77da67c39c6ba -db606df4098d341e81cd5a24d1abe2dea05ea064cda4017526b956cdb79540bf -7f1324f9e256d555ba4945767f2c72db5597abcabdc81e3015660232c67e0949 -0ba4b7a04074154e8083a8c883c8b884a1681cc2525f6cf45330d8818cf92906 -049da3a2455d2041a0cf9aeaa2ca7fd0f4e5d15580e5bae137d39baab9c400be -0ff27d17d87970db423398e931f58afbc415758b1b1a8312facde8c4451dc91a -09cdfa481770f0e445d35b98460b6a7b3e93f2b3d5f0b49b967a3819c13ff6b0 -4b3e665d95d8760fc380ba7f7d400154684e081ce7e2000c6e3a02322d3f3835 -4e49daf3c8bbb58422d64e73e0a491d3edfdb599614ef55b603b00d8e1aa200a -225f39bc76f58506ee900c2db1d8fd16872998017927c4a561b83b6167a34ca9 -4407b21a2607d96846a9bb7b543382980e39fc1a9dd9f47c562de35e18a341b0 -63878dc89f993080a1d995ef07991d52ea00c6372863b56b744344541feddbf2 -75b432e36368e85161e1ad0ceeb772939ace8a7db790c66d5b821a90d1cccf7d -ec5b2970a04efcc3060b0c163594d7b4f0215cc30b01e71b97f382e11f27b871 -922ce013ba8fc3bb678bd64630936f29f853e1379760bde9562f8708f8905a59 -6df302ff8f289896a7a38809246e2ece8e99e96b6b471916c883bb7c948e8fac -6588e2b30bfed55f074fdb0989b85fdfd023f15f1ff89c2f29f4f5381c5ef9ff -8e702aa40c1c6dc7aa48430c564ed5712ebb99af607df5860af30e1b4ec1a492 -6b9ddf2aac1352f4b15613cf6e86708c73bf73728f3bba7eb6b0d30c427454b3 -c8e882eeeaa998e9f02d10a787f6017a5c0a55027d2ea1da1485ab60a397f449 -4f2fab1106c23e3ed97dd268a6f5a9abb2f0cb470e1ee6411b27708b1f2cc7f6 -9efde016cf7c122903ac89dc47aa11d0c45414b8264bebce5850b39884195860 -39a7cb52c877e5ea6a0bbcbfbf3a104c0a66af928f6aaaf062b8da0fdb290f51 -9b26b6b2cf2fa49ff36e7435b86f720c06036f2a322c3fd0fb37ea7b850ea80c -6cd6b4224e8eddd5adcf97f69d9c80102ae4f6f6e5663d0e47ccf992e11233db -5f37e9efeb51f8cb754b919a80c0f0999311d1784221347d746be1590d077f8f -c8a98ec3ba007a04866bf3e1e24bbdbe7839bb7adedb55c3584ce2e2b85a631a -5bee6015589a877604e67121ede937afca89af6e186d10d3fa057c9703b17f26 -30025f6332087e97b1ce60c7e26e48d546ae484dbc604a1b33528b5dc41bc2b1 -1b9d717dcef2d469f7b5f0b3047876c578f3dcb15425678136229a7387966c00 -593c6e96e603f222d4bf10880978e1d0f2e246176e6daed0ecf75e30430ed2a1 -8907963577026bf6689b4a4c420c5a622602f2390ef9fbd5f6c716c8550acf50 -3180e80c95e8d4db4a8fa3eaccd85672b2fb2c0f7b0f8deb4955bd625f131904 -289166003bb3451c1d82b19c461b21f9523681468ea247f28d6e8eae788cf06f -3148ea2d53810077c14b98b5aa1bb2294b202885808854bc6107f4667ebaec53 -6dca8dac30a933b183f5465bdb24ac02a6fe61d7c440e068d5c1b2511599971d -09ca25be37e1baa6580850a7656ef4875ac5dca306ae04090496932140464a48 -2b60cf202b4e308a97d4f75123e655e4d210b6f2f285ff921a9906028e331aba -6542a742fd93bbb77167d04267e3b7fa862437c37c2a8cbb1e4085ce24887ad9 -b00155d04414e5e8d35903c4b2f842b43a333442d17a0545681a20188e6f58ea -bee8d954f42963533dead29cfeb41dc6cb8e70c122948be88afec65d315d3a1e -8440ec98d8191c891affca48a8fcb5feba24cdb0716466840bdcec527520aa6e -2fc538993766cd018effd726855a2759a0b90c12995b475d6e4703a8fb39a59f -1499ca0079d2a25ab06e0c8772889354840c25e10cc6706e9108b62ae8e545dd -1be37905f8adb05fa0265b736c55ffd4ccfd8b0e4ae6b558c1debdf02a836d0a -bee910df3e245d668cd878f528b6d9d16f4a0fa5540623182028ca199a0a8386 -ae47cda55b8c71081a78efdda2d709d973d69ef1b8f27db52ebb298bdf2fb718 -afff5377c78edbc3a58fa3d56a3b811bf5873a8f787897c62ce1a281141df5af -be323c10e74c8ce430dd192dccde81adc639fef9e5fbfecee5be9d0da1547211 -6d6961617b07b6d8a8e184969da1cecc18745012ced3834fa40dce5a0e93a673 -8f51f43afb5ad5ae0939f4d3cae2b1e386fbefd8c840e2685b156c4d2f2cb563 -511bfd502ea44f80eab5a58ea38a682e863e13b07a442864c1d8215db4e824c5 -bd5abb55ed959042b65bb7d1272c0e4d429024cb101d8d340e3c9b918661a55a -d29cbd42b25000959044f9d5f9256410d5dbdc9619a54229a1ca1a96f939cd04 -7fb87288db04a3a105e61b967467123d186ace108abef8ea741a4f3aa45738cd -37b9af8a997c9f6a4cf1b335e3248000dcad05d7565aa99dc144076bb70721b9 -eafa34f716ca82830e8981c4368559f859ebe5a89ef467193a08a3ce62822321 -4637619f8ec9595107d156be7153b6433bedf24d330968dd9153bb90a09f0a91 -43c851d4a5de88c60b0a5d8e3fd2ce90617d14c2ad91a3b9e54b5447bc0fc905 -d27e961b1888ae18d5455fd5878cd43849dcbc2b01a1cfd2543ef89aa4ac0a07 -e4b3bc437520361daada75f76668e37daf5c2f21133653ea1855851a3fac8a3c -a8bcfc449febdcb4566b0ade704fb68e8715eb37461750897b802d099af47ba5 -3efd1f74f9d13ee62aa163174cf38d8e75f793f763f9ab03fafd8d52bef23f5f -86f4da2b1cfbea8233805b9d9e47e7c4232631a56360dea075491e410ce10b33 -8e9bb61387fda4dee805d038c67ef2c9cf36ef4f2d7705ec90002afa3ee52059 -d4412a1ace2939ec8753653aab214344cc65b2c2e2a0fca95fe6144953c4b2f0 -8dd8b6d0bb097ee5d333e4f9c0c7a54687c3f2745a5ca79dc3238ab554ced0f6 -29707805440078bbbaedc13a2ebf81fe9d5686b9ea7aff8d6d98cefb0f453fbc -441e9d82023541d3dcdb8d255e16a7b48832bfbabf7802161c7b164bd7fa7035 -8cb6f75c1dd4838277a5baabb00276394b7d3af5dd1ec4db34c33e73c6be810e -d1e1c0f07b397c466ca035edadc839ccc6c3b7b07ec1f669ed0798d1296b191e -31551b05356c2fed9fe7680e0b5e1ebc1dd117730554c57fa82854729f3e4c6b -2428a8de3d3555ffe2220259ba377772616f367966c983a3ac18b04471506e6d -07fce9847e39bd3a845bb894f7b0e04daea1f10f8a23d030a0054659db2b8949 -a79ff3d3df5e76e7bc5a0163e1d108e30d47c01a0d17780736a36b664372f6fd -71f65fda05da8fa900c3f9e6f78c2e3a83e97cbf56aba6e4d6be0faa5ec5d7e0 -bb97e659c6c1a778354907ed74bd12d79d7a0b4fa78b2a157c3fafb6814b4759 -3db04c2a8b16f3635efb2d03525be6d6372560bc4c96e489e971559e49960bfa -a5be48071bc009df1482b6c9b452dd558cf537ed3263a10b278ec050492728d0 -4f335c50b2ff81c70a78f8d8d3f2e3f9efe9efcc2c5f4e52e00b97ead7d11295 -912b35bd0dab31c9c3e661db42eb98b86e090e55db806b16035848de4b60bc07 -f6b7d9ba8841a73471692dcaf020cda34343fb71a18910aa400927d4359c535d -773d3e4b7b95fc2b10292a38660f0aeee380148ab062142399c767c4add99367 -f28c35d5b8aea728aded4ae367b41d43b6adb2032410d70dd875828fdcc5c976 -e221f05c764c5042d2a7ab671a234a4baaef58054064a3265d6e5c92dc532663 -87c81c142f1b94ed0f5a16eb83fa9811c475aa0dc93f9ccf237970904d983cae -a7914a8e481400e58f431701bf0cb884c1e5c1f52d592ad3caa7d8a37d1c9568 -acc90fde3c96fca19bede3d8d92114d4702e1d38e9526fb918c2b8b8a80fe52e -5545fdc287108a435029613684952b6d9f5b14ecd5b02d607a311b90b84d68df -ef5dc37f2c55ac5aba975bbe16f1f18b2f17b4a9fb96754fa1228a848fbc6fb1 -c874307680c9c58f46e69bd27ca7e55e7cdd7cff4271341dcb34ee5b300e8dd4 -bdec4fee74bc74cdbbd0ecacfc1a4ac7f4714b4bc308ce6d88438920fca53ece -8367968559eaf9df11a0d3bb80e650e4d836ca854dc1556b5ef36b9e64bf60fe -650125a292b63ef6982b7fc80de9903cfc18ad9a1a14dc03d32e9ee15adcacc5 -a9b11139757d948bf23e547769f4d9e897ba15ef4a495735af47de7bdaa63765 -40d035a6ae198f03ef371a49fa624478fee97359bdbab730e4750a79e4ecaa3d -182c6bcf9af7f132392b5e0940c10d8cbb27a58f84001a951c356706ad2463b7 -24baaf3a13bb4aabd80f4c1d32d48a0a5a5be34b03fb140c638de3cfb14c4c1b -ca45d82c270692d193f0aa4286cfa414beaa7be6908e4d1208b5c2ed29407091 -c6fd5e78400d148a9ae24dc6589dca89ada0ddf0126203229b33de78f409c247 -90ec215d8889e450b6041406aeb5732dea90891059e6f03edba61e003ef6eac6 -925e213b1b4cb51fec8578d36527de080e9b6a2f2a8cc08dd888b705e580f4a0 -5dfac8b6c05b297368fe786caf8730fb703b28ff3fb63c5183f4f8f97719e4ee -d65d13043f1b28b01a2b555ce07acaaf98e47d034e6a3e271122935f6224a167 -5b4cd9fa85ee51deb3b132b36fccd473d1ec278c87a6e4c2976ea93c5348cd6b -9eb4dddf8f3c9fd6d5b7a746756762f641adc4e1bce84423d589cd4d66d521b4 -a99ea4c0766e9de460ba8f32d580383884a9c5e4907d7469752ee7d68d04372e -db9579b6b20fdc55c9bc29b227248252f595272fd12639d0f2179f27754adc25 -334f39f6205ba259f5544c39dada5d7ff050d80afeac0c552fd467b10023e530 -f791ad4b12d04665a9f9e04f7fa19f74c73890f6bffd42a7da2947ae70dd13d5 -8ab82e2c44a7bf38c6bce43d7026441418f12fa7a2a7cb81b7e4d4d0652d13b2 -2d6b130dbf0b6433db47ebd76cf0ee4f2aca9a4d8c9b3339c03087f871793105 -d25f5f4591a8c6af03c42ad8bc129437b5698a6c67fb36ef68ca0e9291a3eedd -1e5fbe6e97a8a56482c0c2f99919648a24e4067c6180a35f37e066af4134abd4 -e366adf29467371a14c80002b5afc5003db922fa92af13306de6ad27edc0ff47 -ad4da4af9771c76ef2c77b54fe2a67719478718989abf9beefbd962b449ad634 -9ae7fce4e6f425e752460dbad42163fe5e9f8eeb93375fb3f46990445ef2e59b -de0045c70a03300752482f1ddc1755806babc181224471af546b31584d50ab56 -9ff247586ef4e52363df927b8810a5975152d92915572e13c92a65e5444a8ca0 -46fcd260cc88761a3ec8834e169af050408655605c793f9298edb5f657fd9e0e -0142cbcc53e74a5b00c3d0c77222b4b5df610ece643275968122e36135d86ada -7fbea4d22e1b51017274365069d75851b50e8401c1c34a228c23c10cbe330dc6 -4ed9b9aca8f3069f636e286bba6cad0159321d5c27718f410b39f99f4724aaec -1afc7f6ff415a8fc73d5e26be4cd6e93b5464b764b7cac70827d48a3fa61c7a0 -f1943551599bb6216bb70b19a1a0b763e2f6b1c4babd95094bb87c222fdaf5cf -9eb0467a5c93a6c42f4ad9be37d0137a057aeee887f9ced56ee8ccd85bb8c5c7 -7de9bcbcb7200c063735150ae6f2fa20cf3cd920d5198483ecb81c0eda832843 -27e0c1828a244ff1106323d4ddef2c71430b4c4de536abbb28f87e5ff93c3a23 -7697a73cd0653bca405e167aa727b132e98092629971184405e342bd802d5b72 -f1a61d42152936472892786973ef23a6f4254b3c3a42531fe34af9569c466373 -8bb88d96f27a8478a732fe405840e685aa416052a8a86beb62fad458e6b90c17 -a45b1ded2eb9a31e2c2f7ae2832c34326dba870eb3fe7439fc69d6f26d5572c6 -ce9b77a07d977392f52594c4610d5c1974378d2626a79d7f084ece540d32ed18 -5ef252ad0b4be2fc499cc708cccb88a80ae59a31e3038fef230dd0c101781d95 -b754338c0286917d565feda78b54e9a46f929fe351c74b649d05e014f4b9f941 -14d84223a0f3b11f6985fac073e2e6a3124b664883a92a0efb9b1d017f823525 -fac9bc150808a58caad6b7c0f4892e0285d86e79d587686d0a52284572ccde01 -7a9eb12d4559e1793e09f92a84e99a0ca40e00024a9d80ecfafe6a4a0afd607b -ef3c195148ca0699a363057b98be0ff2981bb9413fae9891d8ce9fa723c278f8 -828be8479cc8f1a792d5cc074bb7ec4c3e65c1e2ef34c14241fd0b6c097ad945 -479e7a932aa4654f34705cabc11d8fae6f4aebed345c325f907bfb04b41b35f2 -4d261885880bfb5b1f98b138ef31e3a7b96e439232e4d0d9bb84139f41f48561 -d828648a60ed3ae4f092b86bcd6789015b085506fe1f266cc02ff5c5f3ad7280 -4456b4ef8ad3c1eb2f4fb956f726dcfe2d49a73d7e9f7abca13cde848550cde8 -7e083b85084000f39d390d707a017c63b44a9563547648c48f3d3e5c577a9e15 -a7e663c19b7d82aaa700229bb541d7dc95d83c3a953670c6aa4ba8a95e2119f8 -ed8b056d8dc936c4fea8e8b298819a56cf089c0be99820bf2eb51455e3482f57 -62acb88c1baa53ac2dbae3030043e8992ebe1a7863e47d9e106a60fbb83355f3 -b98fb2744652df95ce801cc169936cb12c211aff9d77ae43dc7fbef2112e2d44 -a3ecd9a8c2cd6fc94b4ecc6d1f5b2fdacdfd153e11d8c936d822306ce7cd6d7a -2172d8f72ecff7f8a4d1eab8247c1261f8df09ad23e5893f900e1e414d13c25a -1f235af5fff7743baac23af56c8d8baa12e095ace339a4541e87eed758ae490d -04da6c27bdfae6c59e263c3143caf2febad0f61a618a372052f3f550e80f6a25 -3109a9d2cd667ba408e019fb67f8360d5590850e1ac72160f57ff00cb8e766c1 -dfd23f82fb24b407dbe5cd232641880da9054ce3934475db0ecbfca3cf56eb3b -5d5f9d5b69a847eb7bae3f80f5d96e49cc11251cd4e3ec235b211a75551d3df6 -8c9bf13c5cb2191f42a92d9ef1419a0b31996a53a1b13235b6dedf6719ae00af -af731d1bdeb99eafdb8ac4007e4a689aaffe5afa456ef93cb02b4a6842d60ce1 -cd0b0d9ec8c90fc47779fc2494dbc683b6db5360887f367ad6f5cc2986d21cff -622f47f4dd116d5e0300b0d1d5ac15ff4162435c7a10ed614359d63d230132c7 -bab8dbc07d28aa915a91c5bee6f3073f6de313d561c0ef9c8746ce87cee5d42b -74a9bb276cb8797f1715136b8a181a7ce12c85f5b9e288ca852617add6b72ab6 -07eace83bf400342f5273f2670212358c22192bd0ad7a5905074e42081df0fe4 -de698f14471fb3162a847f5dfb83a84f93f8ee6b6519ea588e0d4baff3953bf8 -81b78049dcbd4b84ce45bdc45499e3a5776b8e4e9063137d4e2556aa2e62b2a9 -eb5ce11735ed65ed5cd49135bba4b6d5f184eed7933f698157525da9793c8b10 -41d1bdf92d244fe701d30ace06cc28dc4afbc99ac05f2b8ece0bd19771c7337d -d7470206c9e4f9ce5241ba4f038c02a8db27f75218875cf8334ed4bdb739a13c -9d1469d58033f821c98b3684b51731451d3b05dcb1a7a691d3f0e2fe44a82688 -cc91e3711114d2997e159c81408665b2050c89e10a045ebbec019bb9e7567d95 -9176ee0cd69104974a26c6c7da1f690b6503a75cfaeed44e9e37be1a9454b7bb -921f7922c213b175abd329b680f5def8130c911c25f4ba34fb2bf49c65ce74bb -223904c11d7860ee74ce7aa113fc40a64fa702db89517b0fd444d0166cff31f7 -da476a7415e5c308ed98b09cb41adad1807694c1a39a20d3ffe0f33211e36d54 -395061b0df33dda283e1d7f5a9399bc144ccb6863611e7aac1817fd2b95182dc -92755c6bac1b4074dcf43e556641616541284d5eb13fb49a4b375c31df13db9f -ed989c06f374582862caad3b745fec8145649dcc6b23adf6b4852b6021394dd6 -a19ce0cbfe5b041afdad277df48db2955de8cda9a54379ed246370442196dd80 -0875fb8a65e3300e3e4b97ee6cb4134aaa59ee3517e285982a4e65ce966836f3 -0465e0a7d4bd636870dab95869fbe7b7b9cf28db23839a964612322be21c4f0c -3cab665c4dd6f40150542c3ac64d147c09e5cc969642154a35edcae9c119bdac -2b82e582e2ff515e1c88f91f474e03381368417b4084f6788a8e19519c9f771d -92133700a7ffbf3e82ae50fb19f59a7a385d169d1393c150b88e5156c41e28fd -055eeeac7fee07c6a3be5a8587be73b77826274bd3d35574e2ad12bd1551be0d -d4ff959077cdff691b265cb353ade31f77ecf60057c0eba5c51a7bdd69739633 -b45c312f9b77b0d87ec77fdac0049645c979663dc0314c8f101681e0e47aeeff -fc8f7d39a57009ae49735d6c386262bd09cad0f52d862b60832ead3b3cbd3efc -bb992f901443f78f45f9112a8b79d83888b412803e5621e70dc7b2eb475a7a3e -0d07c36ab6dd2eb352738536c879ca83b31906ebc89c7304dd1cf95559cf7bae -eecc29a5d0f839b64c0a24b6b9135dd0fef4bbfa01b7d6a86d407abeda8775a2 -6e20bdc6d2189cd7055b39d30315b9ba68f717840c10f27b88e22075a7288c8c -3db83c27b55d6032a2b71f326469af86bc7342f43c4c95c8b13bf295ad130cb7 -421ce98e16cb34afd5342289819a8927447c0df7c98e9a965ee83269056a7c91 -961efa627927d007bf3836ff5eab5b6241ec8debc29dba3055d38101d1032307 -86644c8ae82f2c516028f780853be93fb7a220d71e60dafc26e582065444bda3 -5afe0470dfc2f2faa9d2af52eb11f048b16ebc88f23f33944085e1d9b1e85870 -18029b166b6a6eaf36f2507415fc1a58ad4b403c89994910896bd32acb360703 -17534352e8b001ea7a79e81c07e740c3dfae6f247579f957fac2c71cc792f7f0 -1c5d51b81f5029866f454fefc4c15fbc369d0b5f45633fe46a0fb141ad869770 -91af47762fb7c2291a413e51f9d697864c8a7018818a03203bda7d356382fe40 -b271118745973af3455e9021cffffc9c429273404e0813699841332ae86aa519 -608e948ba76806963b3656c44263a1c5df864e8634cecc6f8dc053ffedfcf030 -fb3c759daf5376152d39ad6e724f2a09a06e77bc1eb78fac830149954261f8cb -765d2aaef1847073e6a5ed1d965ee9d3ef47650fc131a229bd68a22aa3bab374 -b0ca5b3ae476fd880957cc7c08f8729185aed5de06dc4ac1727ca7942ca50e7d -8bd0c697d43c70cc1992205c9b914312b4a91344d47be4a9ba955da671977af9 -a92f0102e56705575bbb13106995f75de702f0eef35474ac55608c72bd513cb6 -e6ad69f1dd84869c03cf13d22550471c04cc72a5664d3154d56886fca7cd18fb -e7e172dd975923c6e6a34dd59653260a28d90bd16e5ef7ed6a76a55345b08015 -b5e1e209e9db3471b9d0008174922d1e120f00620519d526e85a80fbdd658357 -56428f1549147e1adcf069508723625f929ceacdcfbcb0eac8337b3de3276894 -1298a952cc3fb5f55589aca8bb44111dd1023305f8a1d2b70d1da6fd510efddf -a55a18dfb4cc9a1b4378f9dba73e29d16daed328d3b915821159b0bfb6872240 -acd1a3fbda983af9d64188be5412b15a03b52982bb60a7748f06897c63d97775 -3e60bda00e6cb10c4fd1c14a49a9ba5383f025393f79efffe774ad9cb66bdb11 -e3feae202ac9ab6dc25eb347b967b9a9af308368cd0702dbdd5f8ca2744eaad8 -0f0a9093c127b1b01bc718e7979c40d2c3c130dc3e9eaeed82e44f12872ff753 -ab30138a8b8ffa23123abf35e67a20a44fce65e6f7d20abaf919f8e1dae23d04 -5e3c5ff827a3ae677e0ec586f828a0f2a60e61eb82019ac0e1798af174de34f4 -d65c27344cd9f575de52695e1564d76b3bcd81d02fcb1ad4b12499fdd6ebfba7 -c1c55c98c7418936fcab4606dc7203dbca8471df5828ba2a8d6ca99d4aeaeb7c -bef1d59a6daa5d0e7ec0a82fd392790b8e17d25f51cdf802784931d9f10b824d -ab7026fe65d2832d166cfb9b108a75b02ac5b74c7726cb5f178784f68d478ca7 -e29097b39014e81f10828dd37e22889551489ba2f6a2f53c72e831c75d2c36fc -e19cbb452652673c10a79b0eb2cd2bc4360a464a8bed2e369cf49660c9ece723 -7d8cbec3c3d7fe2b223b469a0feaccea1451d1cb931ecc6c307132d89a281fa5 -85626cd2ab00279137c326061a1f3165b68d04ce49bf0d308a21168d54f4a3f0 -7d8b8984b41248a4b5ba90c1b88403e69c920179c41c83a5e2dca301dc67bc54 -7171f622980e28f452568ea30e9dfb145d06afff9e28f43b04535ac63250cd37 -22ffda3ddc5049cc71ff4592766a786190c7fe9c7e87331b3bf1c8c25e289e00 -e9aa9e8ac24a978998366cb808f1dd3bf204af1adf8b6c3fcc93482510c720af -03e18d7f6820935881c4732bc2bd68b1663260581ac200be9b0dacb1e6a910ee -d5186437c5bdb966b939edaacabc104c3db19553117de2371839e6034f0f9f9b -878626fb6de546c64224475d416418a1fffd40341edf45f4d91df8571000b6c4 -e7e890ee4ca95e65f18bd0ac230b98d2487a59af084feb16e4aa48cdcd150549 -f93a03156ff8b76913decf03fb5ca3213b14686b664daab69d9d6f056cc6d372 -31122a599b78080a0ef40e75b9d61b17612c0982690bab7a8dff6265189ea5cb -4d8607b8a3447e2de6463f97e35c40efd806d021d47f01568ad586ea33fcdd4b -37680417b08ed5fd7bb1cf72b3751fd861e0f5170d6cb02a803c908420482226 -e009240ba80b0275b1402f6536da71325bd6c88e2d0642d60f964ed85acfc28d -d0fbcc7ebc3d462cb97fc41b8c4bf8352a09d71ccf318db3f2ef5e16d6711c37 -93bd1ab7f7c73db89c93b7843c2c2f2deb720a2e840fda79d3220ac62c280628 -0062d213b27010e5332a1bfff9ae17063c4aac27a190a5559933cffe1fb01db3 -b048fbb50add93b115ff5370ca33678389a703bb381841ef19d8cd1b930c2c3e -0f1211744ea18b15e6b29d8fb3fee9f5416718e1da724b7b3a1e82a28ee059fe -463640a5fa80025208ecdd98c0bab3ba2cbbcd80b730686ca27b14240fb1e9a5 -c751f88f42687a2901c489c8e7e428616ae0553d503d093729b64edf3937434a -390e6c6e1094848d10511feedeaf239a1afeecb5981ff1f6d042914f02f17847 -4ceb12269438aa42a0f9bde00db8783c01383be5c3a45941f8afd0177055870f -484eca20fe4288a96ba1d7a341b3c48cd24ba4dcb14e703db1389a5659e86ee6 -e4884fa3363238f8532d950d5b1566dc7f68eb0a31a0aa314deefdec9a87a7a6 -e7fbdf52e14cf413fd6029a77aeb5f0806ba51f9e63063185c926ad04df113e9 -265be0f9fc4e71d2b18680bbd314dae429c9eb2d84789bb85064468c26c04215 -321132cd4eac9046092f1979e2833d2d5d1a724d10629a0d4e9c7e03a9d3b2b6 -3c07d9f4cfed06a476ccd1941a071679df08f38154c2936fa47177986edac8a7 -925814c83814c705994bb0c9546a1fbce22111adaad613960c0a95d98d9452b8 -7441c3666b539950a27ce6d892c2d65b412fc58547ab21a6d02f1209cd304235 -ec32f4349fda2d1a6d9299c9ad560781dcd011e1d2d7cf91ecb6f5193bf9a33e -9f73a66b5184f9266afc4183131e7854f949d4114c48cc079cb892e8cae078c9 -c88223e65723bbdd78e23843515712bff13f4544d43a144fd180639c00e0f6e3 -9f871f8c056d8e774fd3d05175e8b411038483f333e18f169048ff21000fe84b -2541309205f6635a05de58dd71efacb7182f3972ea4aa2c5a6483ac9e38ddb1d -008e5a2f4940fcf820987e2bb7b73fa38f8441806ac0de93736109af54048a1d -e95cab99b1f3c5e104af17c67f0e0a99a0dd9c7cac7d917a8a0032abae8c577b -f6a647f505fca2e854998057387da13f8189a3f9bde597d66a1d87388d840f09 -8a9e712c6e3485eb1b8005e3e3224d959b925a237e167e10965f6aed03941a4f -90354b6bc6dcab1a2079d0fec8afb174b57d339252bc36a554682cf59773fca0 -36230a8bfe5538f7770e126ebd9dd87d800663c14f5f8a4d4bb935fe7d05d2e2 -11b720bfb754d323a8a252919a048db606eac7c590ad68115d052a78d8f0f7b4 -89e048372b293ae6a44169ea795cf46d25637c7252bc7a0062896f546624e151 -891ca2e70dac19e06a3fd3c67de2ff19c3d3838413f82a38369c5f2166ccd869 -5d4dbd9856755ab9f7c94810488bbc713b1aba7f66c07155138ce859a79f023e -8954decac00adaa02e38cdfb927460cf42cd34caaaa62acb7ad369f917bdabef -9e2103e0117f6f99b1e9dd73edae4b8c353f6961c8f078327d7256b5ca6a5996 -bcaf0cf21718f574f6f2b501dc8a3b115d4af7af8062e17a9f43ef05c1103ed1 -b406b350ad72f31ed50de231536a0ca1db4373b3641b39471774426a87d5731b -7aebab1f6a9cc832f7a8e542abe1b8815d20addf94c143f4824ad09d702acca5 -f80bc581e0c848248613f5d86a006ed509a5a55591852200aa9a3534e90ae0fe -95098ccb45bc63a4d86e2e1883db0bd1e293360158a5403467b96c1b9e11f082 -ac3d3a5ca47a04b7605ba54c8f9b34abe2fbeade06c3f3d32d667b6a0074eeb8 -84a40571a4e5f2c31483accf78230043c5a17f8da13b1bc9fa92d1db17724bac -73e48427410b582352164389f95357f53902454e167ab86c5a5c404b648c4c37 -aaced6c49af4479405fb9d32f6cd78e2114b820cc03877c29cf4707642c942c7 -3874aa52f3f2955ca7832a12545f745cfb8768b1d24354f9bf721d55bd9d0722 -acd1fbbea4b1f26128902892bfafc8c9b1c5860f33321edc5afe7009f6ee10e8 -d5cd98fa521b3f45869b41f8ca4032e8f814ed3eb0dac7828893cc1ef2649390 -e70cef649f6c469c830a2820ac2b19bce71b76e2c7fb653093b9fcf65477ea03 -0e09e3de1306a2131a1792a616755b670e91a002166433e03a221310b633f96f -7c4671b45b9e5933f67019ce6992ce8575efb90d4691680a02a4acb8978ce207 -817505cd7f01e027a965f79e6d698d6de13f56ce427a7ff627ed78237f99a702 -efb328304bfb288641d8685cbf43e96e85e2d6aedfe97e8bec0bd5f9622b98aa -316450a090f406879c74985decdc96962a50b5de3a5848f92492037011d0f4e7 -dd0fdc25d578a0f86f80a8ae25b9975fbac71fbef5c04810ea0a19b89facc0cc -aa73cd34b809854296cbdf532f9593332114e100ee289cd181bd3b3aa05c4fe7 -b3f323638087a2b97157b23505f9a653cee29017a39666e3680df121aaf641e5 -f971007acf53e8065a0fe536bb72e2fddb8bc51701f5d069faabd6c101e786c8 -ef8d299eee8fc6f7f97c1d9c09bc82f8204c9231083394ce840312344d592d98 -f652724515c99539d2c463fabd42c8360e0f0f5aa9739e3d2e484d3d39f2ce73 -f522a79dbc46266aa36518f0278432bb380904ebb6f30ea6edc835e33b81be18 -21b6e0d803f31e8be97a261b3b1426281b00b8b6baa6ddb76ced67d802415006 -1dbb011d04048481d815ea0db0dbccb20044fec53da88ec8cadc39bd57a2dcd0 -fd36197e8075729a1bd4517751dbae89bd44e2ca7cbed060e3e6e6b124b88ae3 -02f90a2388bce72b3ce9ef9e1bc8392246271d4cd5fa6067ce5eb426b2692836 -6f00ffbd94493239104a7d71adb54f3f1d74447676511fdcb82674cc89ed6b67 -7e6a24a5dd5d29f76eff3bcfbed6b5e81ff42a04b42b9c30763e501b1bd830e4 -4c9890fbe3b039eed303f064e63b7bf7291c58f2b45aa511b6e6fd2b169d6ce5 -3c9d4331ba7029bb94b7b5265da7c0cbab1afeeb6368ad410552a8b23c4838f5 -eb07bdafc3d60458649ac2c8fc787bbafb1b17128e82359c89a20075bfdb63e6 -d9be78d619689ca0f8c2e9c38a5e8b5eb42b4d07a9a3542cf835a423cb65bedb -ba210e7b2073919ef7d76471d17b165d6aedef70651f46d22bb1b6d3a8b3898d -e9370aaa67830689c4773e20e0264978655ee01d30e42f8a6ea3ce955c657970 -23129accb969cf84005341b24f92e23b4b3962834ed91ed40c6866f6aae07219 -f49f0d260d329c287d4bf91c504dbb44d13da65a96b522673b7912dde6fe5e76 -2ee0d89ed7fd96886e761c4f262c88db3e212c603e8981298e4520428c058480 -2f5fe0fb223f697f946330d97f6275c100e5d15f36867a7e9de9338d654cf267 -5bb52e5ee6c925faa522780519c15b655ae54ff19203a3465582e7b40e904716 -45152728ad912b05d25eff9cdf03b762507d6980908e22ba5399b2fc2cdddb10 -47d8d3b6d502ae49527a62ca8968a2c8b6c814ee0cf1a7618a8ea8d7e7c5f61a -50515dba6ed6187394d8051121b685be8d029d97449c85c95b4d68da2a31278c -dc7f39c44039a3a363d243910bd26c882ba1ef5be080d0f8b8eef954d9b7c186 -ea5e664aa4141f9ffea443d59124e25899d0d18dced06702499ab54e72894285 -fa1ce9a831ab914be5711a225ced342a9de51a7178a4e5c4491a3aff1a606aea -4b91188a20a63747374aeb9014cb11cd6f52bbf906af5aa6b5ac2cfe27e75efb -c554648f01f12eccccd3d94ad3b3271ec690e9a874284fd22587a58a4d78680f -20bdaa27a59c0fe1eda28b86834234d291682efce38bcc93bf85ebb7b493066a -40ecb74eb37dd1d018d3af16977ca7b539e5d9e68312d255b930cf1a859625f9 -bf81aec791a6fa63f578a4ecf972e1f61ef9258eff34f91ad002ea7a5c3b29ee -2ab6d77ac6c14c71ad07895206b0a68ed4c21e197851ad6944d4f61f3d089c06 -d0589e1dc7494f3e4ebab1f56666b2290679a7656cf84ffa3f1a58c1fed9a62f -3c1b0de1496a711f5b8e074712c3b44f49bffe341ed6e5926368388d0ff7882f -ff24a63273155908d94e78ed8252603dd8eebe7d19e588b029e5136840a26664 -9918867370b5f8d3942127044ec81cc46d1e88fe88e47b8af625b6826f2c9ee3 -5f8a6afd319d66812d80a171a13316c2a4c73900686d4616126aa83d635c4f9d -27fae14feef992bddddc1bd7c890e67cc544c31ac9d05541d7af116724081cb3 -8517dca6cc490a02295fbeed7e147b1e45033c70afbfd711a2d41248cba6b56c -94e1b2c1a12409ca6e529f82e0f23bd91da21fbba01f22968a8cac2a231362e3 -61523dd5ebee42c524cfdf2eaf818650db8da4e382cc519214a7b4fb3f90e82b -315db75c77b7ca98f2f21258a68417326cdb55cf6c2b31f197872a8d9d65e17c -dd64e130ae2d6d2a16a717de89257bca08f5bca777b3021ce17d5b1a07aef098 -88fc1e420c9e08ae3ebd4ecd38d4417191658035a623a3dcc20257c0e1c4d1d7 -d7e0e54defa4d27fb4f815ddb2604103030e95f27871c7b0e9a4c4610948fa16 -012c4b30cc2e6c03a7ccad7f0643b9a1cc1eec9c7a2681ed802ddbe7d8eb18f0 -2770b022d4f2aba40045ffd23a888e04b800735f917f0abea17b934e4a7e4d06 -aaad3add44cca6826070ec12bc89e716dc416bcefe0725c086e7804ab8b7fd91 -6b1e1e3b289afbcb202d7074de5c61f2819f13735639aaeb50e7dc9aef89209a -eca7316bb46f7f03ee99f56817d385102faaee63ca8eda61bc7b905ee48a9625 -69dc8122ebd8bfabcb8de515b7dae09542db46e0e6036611762442e8d3943d90 -a89024e8cf46bab577380287f30284717c433f304119762b276fe84fb0d0f075 -3d6591879886da5fc0e179a7fef454699e159e8a2d35dd1f678c8a5825febc07 -6b2d56fc48370317c9fd3cc71a4cf3772bc6a9f202a736e863ddb4cebe059958 -1ee4c17ea43b964cbc2add4d2e2ac013b43d11d1c1471565b90d1bb0da9b914c -44810b030e137b37ef8942dbf6b041d9f7f90305afa411ad92527177f894c2ce -835b8942eed694b6e7503851d5dc49bd40e05056841fdd21d6c29012161cff37 -8e213657bb2db9f3655cc1d18b8c6a4d31b2d37036b1be5f51d1277cee26c758 -685b9b2bb9b9f9e88f9146ba4ab794f535358fb49fc0d40ffa41ad402644120d -0ea676f3d5588683683b79520de05a35c0f394f0f5ec6d13ac6b1df71e030dc6 -9d51c242324df025c96c5429f19c7190c77666731a46f8143c37252db87120e7 -8bf1c9f22b7a80dc4b999baa805d9f1eb5ac4e28a70d0fbd6c7dfdd7c1fbb560 -26073cc5cae5a1cdf5f8471585165ee0191d353ccdcd05f2117cdae9cce71d72 -9d0f61304f1d29eb2c5b6ec18290a9b27baceae80a405afb5664ba513ab26596 -bbaf87266ef51dbd35112eac5576b04b650031528738edfb937dec3f9b0caedf -2447aeeffec2129814289b09842d3dd90b86300f1a035849b87fc2dc2e4292eb -568ecf43a518512f9dd5287988e688c5f040a442150d447196bc5216df070c0a -551928a0629cf3c7e430baab504b2315156cc367f55f090dc1f6ad0214353780 -f1cc7f4a9b262debe551a5de29cf1cdf08117de2df62f164fa91d166eaa72758 -9b862a3dfdbff31b404c11e411f0c642ca06962c18304403db2eb93cfadd392a -c7a030971f2f897017317054572a4b5fe8fda9dfbad4c079b0c9c3e3336aae94 -b11baa3d0257a88a1919be409db0e1ea7f2f55fbafd3b4a8b5f55581aab8fb31 -a233d2081374327616cfc745b3c7039dd295a0b5068560fb68eb67c567c589f6 -08a45a312ca25accb1775badfd7b2eb0f4bc948b62362b3bcf40766b987622b7 -da7d9b68a7909104056fd5e0709a5928a0c314d407745c9b5f4c9a65483a7bd2 -3f550b7030671bba32d959442573fe4e6cbeb995b2fbc273b6894f70701fd2fc -3f6ed6fe95cd521e83862350df167894510c93b44032187f171773b42f483e61 -2048daacd1f4be69c9ef5e6c1f63c72b759651047cd9ce71199dcbab1c36c1e7 -da6dd872b1a4c03d7145e4dca72064e2ffca5e43fd66a7c532feda1000904032 -843fcb1e24d99146dd27fc507cfba1a63b0843af0ebc0a336aafee4eb27d8796 -c0c1298a23874928f35c7cdd27145835742eab898c2d04e7ebd5c0fabf4806c4 -d44ba374cb1ff5052be5066d3a52e1f2ba4841fe35ae6c097cdd1c8b04883764 -efb0f51f646cccd0321ecab07647066dcff2bae0916983248b080730e45b8aaa -df9fc1805e6c5fb1b536c598ad35c0f69f561dd949ed142ba7fde6778620e8d6 -ac443fdfdde254bf1475ef95bbd54d1ec0d9b531d1cf690cfea6ea9dd4d732e3 -e5bcdec23e92eeefd411298360effa920d3ceefe61858b9a356023766a181bf2 -aedd269b7d4c610fcc03cd8fda705186b3c842bc6d7299abf6f704b419bd2b2a -a3f75c8b0ebdeab45eff8f1b9bbb9b187b03a0735b28813860d2916f7279fc8b -e6df8e6f5155c3dba782aecff52b1be8710747c51e9a76d2574fcca699b9fdc5 -48043c2fb363a596f6b3b371657bdc2be900c9707a78fbfcbd1c0bf881468e2d -f7adefd8bf30dee1b2347aecde496c012f0cbfe3816068ff31f3b3adf56b612a -632703d469de017d29769ed5d55aa1f37651c11f0739ebb4c3af0a3c62c4523f -05081ee09ae3076d361ca40f8b13d4a631b9f24a5366f4e678481abe3993ce9b -ab8813c00b4b95be15086c69a55e65ae908fc071f0b3c59daa9719321edff148 -62fa6efdd42bd192d0138f6bbf5890f78a9c38d147ae00157f4307dc3095432f -5bbe889da9a5bee8669c6651e758ed5ad38856433fb9702d70c12aa29cea4424 -8e50e17ce514b8ef3131a972b8db0b0be78c93831806e98916572e7959b8317c -54149e5372718963eb74983316ba7a0418a921433d759e73cdacb1bb6ac69df6 -7961040ac80e5459f3120ca3c8eaea02497b64ef871030f1501ad79dc405019a -00e355ae3b7c48ed22873196a98637ba2b25bf8b946ce509da8bd25456373c29 -dbf08751baf2bbb23ed57b32d3abe306c29eba95e3a404c3a15b172a8313932a -c5ae1588a0227de80156713ea8239110c31e0452a2e2cf376cfcf90a41f68bdf -c08018786b166a5e9326b1beff6a4ed7fa44f523911d1819cb6aa1ea58fc52cb -51a74b886466964dba973726352554470d5c35353b60b68830bfcc8f14cbdf00 -f8974ab1914694025375901d71324ba933b2ba61204c4ba5f6429077f429f17e -8f1f95c2308b2900bca909945f96f33d73a7a2186e28d4132db91aa6d8751e47 -fc1665361bbeaebdcf6bae29423c6fadb892bab7cc872ee4cf3490d2956907ff -baeb199c2ccde45a2649aa2e4d8dc65142df9b332691d9b154dc072ea33d1710 -e64eea0969e54a54fcc812d6c8ce00c790d71ddd67c6b8d4ca7baa6575cfcee5 -8af7c205f455c24ede135b653875780f54c98e3159ed284139f4fb00f64ec8c1 -1191c0b484b9fd15fa6f0fb5b6999de6358741a0a48abeee116a44cbc015c0b4 -5584b76b7e73d6d3148bcd17cdfecbefd83aa402162367bc40e7835fb64a4b04 -dc4827158e4b8f193bc470c9bc0c46047b4cc4d797ea9ed7f35868331517fc43 -15b9a080d5171104dce9c6b8d9105b0031f4b1f9ce7d8e2b7d08c5d633290fa8 -8356b073770339203622f09407cd263412ecec6c7f58f8d8f5be935ccdebc64d -5f0a0287fdcabae9ffd00c24e7cfaeddf9fae5f60d4864e8268885f71a8a941e -facc6eca987d76f1ca3ff9795045b4b9057a7ecee50a04d09b859207ee869750 -282bc24be3dd0d84e33963c4c1a484de057541399cfe79a5bded1bb90833d8ef -4bb6f36b7b9f236ff00bcf441ea1e1ea04bec9f3402e7993be2d024a5d06c653 -6c2c090d51187ad3eafd64bb0389da839cde99222868ce4ad6e03d6fad5411b0 -9826c410db9179d22db159ff72b0c9246c690b527bbaae566d145284f3e7bf24 -20c2a7bc2ee6607ced1e89c558f3a4bf132f23ddf53b240284de7c4839ef3b53 -6532a60c9df1cbd3470d44c7c0d26136cf4955951fdc3f0b85ff4d4057f47a6b -8648c3640059f4543316ba9007c0e784f79c79156b04f60b030cb98b4fd47577 -dccc5c223e0f1211744ea18b7c0e676bfc5ca9592a7d9e7c13b93bbe2bc62251 -71d0a4c44950754ddc2ccd486d2b702f4188987595bf8988130b0c059b279418 -ee3d0e21a1a8e2b1852ba7e01e9cf19746131e126bf5eedb08e6c635d700b0b8 -caaf2de2c01f82ed911278abf80a8a47aebe6330e0d1bc308f00a9fb8944052b -4cf11ec1f73f3dbac7a9124c6fd2009944732d672c3d4cd2d387b4235fec275b -907d25342890dc44dd670020814e4155463f6bc4804f68efab0501388a3ef816 -e2ed8b83840782e22be4a0b562a6b0361b8129872c5ca1c0055940378bae85f8 -2a39e182e758f970c22aaead53ee5f934dfe39abfd55bdd3275b65b0b71eca9e -467dd786fba4f8c7084db6069703dd97b05f80013cd99dea6698ad3ab5f09f11 -5a00e47fbfcd13caaa7e82191d1881b3992b69c6cfa15307d6ae8370252145b0 -97709d56b69ecb253757ae7b1a11cd9a8c2210af5c91fe93bc2147681b19c75e -a360636446935d85470b0c28d927b07afcf63809a53c0a8baee76632982e9fa3 -1cd9b8f117a7b41689c83a23043550a3f165bfe81f0e0e224a6568e60e28c466 -28b633d66fc7370f65fd2ac5694e7c9a616bb88298cc7a7bdf9a39f1ffc1aefb -16de11a575a58fb8f65c47aaab60b465d3e8eef5240a9773874bb658d7356723 -f449270f0eaa74cda1a6d5f732bffebf4415e77d3a566d48e47d7629fa6b8a21 -6e8032e7ceedbd8ead4e922685d6be6448a14fc839ae4a74f6a5a59c01375a4f -d57555f569d036d0337351c7305c49217103adfe4b6ddc8376f134eeb11ca705 -92d1e2e80c423ae05a0822375e0d3f059cbe839b07a290a6b421c7d513f1961b -27c632269a8c35eed49010c561b580412b9363aa0e9c76e210b6a86a55016da9 -e04e8f7a5c525ad3ef4edd7550b6e2f6669508051973e36e435579c178d2d39f -3e27bde7de754bbc68da87698aada323575cca997a1cc75f706634834d1dac10 -7103b40c71a1e59358ede2d1ee87082235e808481f456968bd649a268e566680 -3a8471be291dea8358c52ad22508da5762fb1e1f6128b34e32bb68039237a400 -c1afe9e07c69d8b486281a9ec09067d09b0c8bc16c0960771066aca2f4c18907 -4e2ab98be4da38b2ef92f3a922a1fa3afa66ccb7dc5c59cd06f7b6dfe00eb86b -8abc28551decbfcab8ae483839cbedd2cfd6e7c8f6348444ee0e67e943e88444 -f9f871e9291a5eae7d63522caf0396c4cb477d2df5377c39c46b14125e100ad2 -4f15e1aa3dc33b356f6a6d9e1404efa7f05b6208948b01acbfb8a1079181872b -f06cdcd561a855b1884008e605d67e653ef3357b9c6d5af90228c6b4676644fc -cabbab905c7e9164a901ba7fd1c4742d454784887907b7e1a9b2d1c844ca2f03 -3991fd9fdd19fb4af35738bb380bb940b03e9fddaac1f64afc6e3c99ee1d7dc5 -5ce48afb651c9595e41c894a8d75af382c709720a2e94f03fa45ec2cfbf7d3e7 -6fc0dba65ae93bad352e1b14aa0f3c39cb8766c106a1fc656401e4ff5c4584ab -974e93b2bc7f16209d80bb566ed5b67acbc84635bfea38f1e87c39027a0d1ccb -1a93049e936116e1847fb3123585096edccbfd0aa63e623b8503a0d4760aae40 -0a88a7e87400875eac6f14fb7a7a8682560de6cbb43fcdf303758e182c4d12d3 -87ed4533d7c9f2b8e13489130d6ae5fe066f4ad856b167725e4ca2e7b842dd7f -599de83285aa617d5ead39c7ac6ab77e42f5e1153250803103f7769cf35430f4 -fc5b91642a1b798ef39d359f7196d3f7b0f864e016da2e43ea1a2b8e8334e8ba -c0af735eeec83a2e344ac6a62461cc1dbfacfafe1cc1db2ab1655ba0a7d64eb2 -4f165b64608fb31dddf15f708f052adcb6ce974d807e6ad8f7b94979ac09fd65 -163a3699cb80a8a32d49efcafad68856da3be30b616873ee511e361963983106 -f700c080555e719697b0de489286e397f5f81af94632216e357f1020dacd270e -c7d9bb4235aa738a8dca7f23680c377a643b0b59e6a7fb83507c8cfbd1df3758 -3a565760689d25526f064e961d0c3d2071054eed80850bb10ee9e73f27654d20 -32bc2a750714ece1a4ede7b7c4be79f4e0c3d7a6b433f44774d6cc6a93f6dd1a -29b855b805788ff4436794d2aa348da5ab69ce698e7d5b1956d1a7888607d7bb -a6b59226b144dc8589e4787c8ab0342c8a085e12fe9ddad5fe1c185099e207ac -f4308371fa4afbdf90eb5d08a0076d70615a4d17264baa2e712063032c188877 -fcec4971f2c7f4a9012fbf3fe15b76adf4f35e5c0f337862584b12d04bfbf85e -8b3e8eeb64bc0fea31faa7a697b34be4a8c3fcae69ebd8c25fba58f3d101c9cc -7d6cb4a6835a5262a28f9304dae690bfaf6eaeef09d44a0418b78e2a4d381047 -35a4523e8341a74509eef699744865f10168cbe739d4eed29e6542cb0dbad470 -d9dd0ddfb8164959ec59a632863920e18ab5c001845ece330868dff7b7ed51a8 -c50a11861df524d4dd80c7b370886921b9f6b28015a83412cdc4fab786791bd6 -37081dff54753214e35477c847ea13286c28fdefe690fef446f4cad67ac3ba20 -958743af664767e8d8ef8a389ec1c138128aaff1b7557b52eb59dee75db67cbb -60d9b08b3a443b10bc84417aac4aa89973c8d8932af5b91b82b7569cac09d69c -0cae12b7411269a1c550c94dce68d60ef418f21ab29ab552eca48a4ee94a4b27 -5d174ae06ce469bd5110d23678269b244cd596650ab74f024460c84b564cfc31 -f10b7d0a15166acbc8e9a70668aecd4fda96ec72af4d438f3e9c42e068bb2504 -66e725c097f17e533d6ddb0223a8c018e6445a468e5afed7d7d93ca5e8807f6b -cabc59e9d7eb20de335ee9328a6726bab86e2bbcb847e18e2be079bda3c1a380 -2d338cc33a35b0bb17b37188cbcd54c760cfb17d5da0c66197da9123942a8789 -6bf0e622dc9e93457e1b73b7f5b96c894eb76af290e1f9dc439e36e972b3f865 -187781130941b3596aa9dc699a6a586c1acfba7e1d7b340312856ba9caf63662 -02f6f303f92f15726dd083b1555263d2e3bd50baaf7c0bcca4ca774f5e35cd0c -85caca2366e06fb942b482bbfb1926fe47b1d95a83a5143ba801efbc7d62c003 -2f915672ee8ae1b235096c8f62635bc5c42a03d6be518e9c4a68ee0d8e48d1e2 -2de2828cfc76efb4a12ba5c3a3a08175545256dfdf53edf0c91bdff981f5b9b3 -fb8b9ffabb007646755e76a278cb1752b8081ebe91dc77177aeca8ca90ce2077 -f90d35e6f7aa90b1505e472ae5f09bb05f2a37b5e2cea2e1a3e5fe0e367a07c0 -f31f855d7f1c7b4272ea37398bec83f7b79fbf86129799e2ca9e07b2a01213aa -2d73499beb7ff978dafb22518227532efae2a60cae34347ad352a00c0adfea43 -e3f95208c6f5c21e1fb3c0b07a1d143d5a8b55cac717fda2b72ff0c3fdbabf56 -34cf4c2051dbc59ec4c00b6e1cfe454cdbd9fda033cda90a2b66fad3e8271e17 -fafa42139467358062f2a1c244c48d52a9fbf5c1f360bfa45d0b03ec7ec4805f -3e7f67e258936a690090abd309b2b93424efeb8d5d7deabee5eaf0db5d56c33b -3a728c08624ea5d0c85f77beac600c5fb8c184ac63b3fcc5344f22dd878abe96 -4320ad7ad8803c28b4753b071213851247f35a2f90a59072312059373cad6276 -2a17bb449602f8424ac583843810a1c6db922a87bbddf800bea24f6ebb071d2f -3a82053bc5ddf3eb11c3c32f551a81deb3000e57282552fc0b8ee17ad909bb2d -b851793f65123af449d07279de0999aa5208cc293593eb9ef607c7e20e873e64 -6097ff18507152a8d111e24e419c148a5a1fbd339428f184bb3c5ce3a36af6a6 -9b211cee9150c40506c1e990d19ba8b4f0b5c01e7c19a05904cb63d127118908 -5ab937a91b2dc3b59ac6bd1971c084e2c156c10661b2c7a3d170bde0fa3e682b -abbbf187ff39304d6e5ae80eabce1c54a0bfe09f22d97133e94afa9981e837cc -0a80b34b29899474b65ebc6df73e5abc2f2300226c4e96e7c32b3f80a26fadc1 -e503fed433b7cfaf681e6cb33057a915ec53112e76cd9602ff64a75543eeb82d -e6f45aecf9620a5a3bae1f4459b9ae6162e472e93eb2e0daceec8f0608721072 -e456972d5fa6bc4a45afe5a8a5694e538e659107ff4cd6a8ee3d38544e397ffc -26a98e8771a5e07c99402b1722b09cc959f9d25126a82c7820de21a9855eda2a -1b7e4d0145ec7017caa0349bd13177070509276241a0aa7dfae14f1e2d1805ee -58714e9f2a647fcede216c7b3297910df45f91d8e0c9ec279f16a744930f3b77 -0b80d299b44b478377ef237341ecc5d9a59b333cfbbc229be944d368559988c4 -940209b2a4fe6d55713acce94181339a1d70589e96a54a952163b072e116f5ae -4e672556501ac126d0dc91531894b69d5c8c6bc531db69a961cd517d4bc07375 -5683fa7cd9a77fc56c6ae62cdf6bb0857e8906f835035e78d3f7ad14375b6f21 -fd0436e6c914c3b8d6e543df1ee4b992c024e9d9fd316dfba3ba9809a089cc99 -8f34466ac94d689350a5075998d7240efcda132f3b8f2ccc0fc78f5d77a313e4 -09d5ae9f2839b9ba67cb79e1a0e7ff8f77e766aae4e1931a51890b3f0e3b39bd -5412ab04baeeae007ef88984afdd56b7f81f403fc6eae6993367ac9071b396b7 -f690f613193c638b9c6b10350d0170696db08055fc583cb04c3c66cb71d354a6 -6c02a9c33e312dd36d23c37836795088375e42241d176d2168dcea614a14850f -d283c962ddd274d58fcbba7668fc6987cb0d204cc4db70ad44c53ab5da5e15fb -55c5c53b85d0468b1798bffc105d55973d081db5cf801d98525597cfab8be326 -f6723c6c5060c6001ff9da8d01855933f68d88ea8c403e6dc8aa446e5eabd57a -4d8c080ab4c164e3a97c1c6e87b3e279b97e99127fbbf1126099928ea8c0af7f -3e592175164f46dd15ce60c6087d1893dd388b7a8eb65d0c38c56fa3fbbf88cf -314e3ca2b710ff61f610ba945f7405c373c2b4147713206be618b238ba3e367b -9d158dbbbe4dfc0aaede3f9457893910f3a83bf6baa3688fb1176c93132e24a9 -bdbecae4b53fd2cd971091dc99359d11af0aa3e94264538203459faf0cc36410 -def19e919a2714e2ce1895ceeb1f26ce613e5f1bee352ef3a63f94fc343fe7c3 -4f831ab892db8e438144821d5a701cb71d36526ac44a9354f3440f74e9e1fda7 -723f0120f75059513bd52cb2781a08b52142e53d0a4a23d7d003cae26b838552 -a1376832da4a1b8cc20cfa9f72fe3a9380a282bbb73a9ac07972677045589c0f -e08cd002c80e0064a732a3dbb6dc83393d470f826fecdba4f1d2e4be76a5a433 -9a5e25b1f2b734d4f1469b84d977e3ccbe5951c768c9274d0423fe5d740ac8a4 -e3affe4fa68dd8cab058ebb21962d72dcfeaaa47e541a2ff3e6ecdacf0484ec3 -7151b6b1fa6109a0113e3bef3145b53d05c62e0391e266393ba1a4b39a806a12 -f2fe6562dff2fc97eff531ded8dc6e0ed359b2bf16d00031e9e0753bb32c156e -ea81b7db813752506558d39f967450fa05390368950c456f106211dfc0621e52 -66c14e1ebc6a9f3de3165500218fd683fa0dd2b4fcb937f14f7d3fb85faf556e -3f53ad74a4bcd96872b46716e0bd737dbf5d3115ce382ffb8243c499503283c4 -274a0e51c9d41b302fd57c648a4e1769dcab4668ee624f3b9c84f296ba9ca925 -056358d1e7f5a56ce13333e53b5676d5e9ccfa4cf68f18f28aee890b1bfad737 -03b64dcd7c5f34387f4522f421045adb7cb8b552d5145b83e24667d4f80cf636 -45f80b863f0293b1d494ed65532c3963b69fe1a858850799155ed2450d836d30 -d28dbfc50c7a58fd713346961d7f0e5513394b29c06c52b786b48a2f13b95b9d -56d6aca8250f3b716f055275af003304d36713f14228b5ec40de7c3ba9ae32cd -eb91f8110bafcf7c92ea383bd9ca4d4fd0f6ccb0902b07841a4cbee2cbe21c4a -8124a11ef70c32d89e4b86d0e84294412f305ec186afd600ef7d72634e931f60 -a75a22b03abbb87b4a163044b96d43cb1a8eac9484df8955edd18bb298612f6d -a9ab0fe3153be8def9616e883e5ca081c79f607d7439ce5a28ceb6b17f51f0f0 -9affc2a8a766dcbc19e1dafdb34bab555934bc8b3bf2255e4aab837de34079d7 -3b310d8d82d2abe249a28e1fc6f65e529c301933849883e86fd7b7b44271da63 -15913982ad40ffb9c796f3b519f84d15ba2fb42fdd632e042b7d9f94b28f5b81 -5139956c9d4e3521d59777d3c34a07e4ab2d92ce1e64c02c612023bd84153d02 -ac1b86b34937b82522277d5c11a7a3daa95e63e4d122e626d9167a5a17b4d041 -8d5aaf88b8a59de837362e48c9fd7123c3c30d906cc081ff9a0a1ce3b168b9e1 -ce50fb45fcaa3061d7dd0fce1c7051ea3c032fa52fa63442629461bbf742df11 -e6a548e7f73cd0441032ffb059fb81b468380c5eafb679d5ae2f384fca2236da -5d5d878a6e29e282d045a419488daa5d3500bab9ddbb6123112949548b37cd85 -46e466baf1c18d05475029cf8b06206338df4d287541137ee8d509ae9e3716df -32627c0e28eb8edcc62bcc37536bf8a36b8a545d539f2754fc39eb8da84fef99 -02a3733603379181d07b780b1f0dab6b69ab3268adeba5cac438510e80b96eb0 -79ccdf7e76b2f88a37beb1b83e4b3529ab0b6b1a35d5b7add114578ce3783582 -fc23f6c5df43330e9397c71e984817b908dddb6a02e6da93c87f623b3dcacbb7 -5c7b032d24a5e516bfe910b1569ef48975b8b7448f2469a41b4ab69f419f9f39 -2d3ca7b9bc768151274aaf55b06c3e399cb19b6e0f15ec8868c6e668e524aed3 -ec176ffb6a8accdc068a22eff5d79498a00a99562e490c7cff7e59e7d3b3b1f5 -8e48e1ef5e08391391c7e9ccebcce6376480909156717c07de203306e8c7c7db -0b8737da43a6a8e9218133af777bcc505e5f5375a3fe8411cb5a317619e9d259 -07cbec0088f2610250754acf52e22dfd59a160aace94a7392f2f3a578980b1bd -6d1dedb930b6948583f7d978fbde76276822ffa4014cfae2ac22913621b0f778 -d50edfe8517092759af5bdd038316d1b08f2b31550d1fe1fab8b62e79419010d -6a59355a2e73cb08443700ceab7ee437401683f20cc5e9a21f056866f2b67dfb -4e1e8df8ddcf2c5823e7fef6f91ebd1fa571ce77ba080c0f604a263379ec4e2f -f5694975fa6adb5a646ad327db787c204f9b5ff9f9228a3337c111d32cbd6f8b -1da885425af61709e40d4352a1be6d8e2775372a3f7717e9aa9b951f79d2bfb8 -399d1f915e26836d454d286655657b72378551cf133bfcaaaa2a45e98f840bca -522311100c7c92f46661aa1a75fb44cb28a1a7f0cbeebc2008c5fe882108e2ee -1e0c683320c084d1e5ff7c0657de7942b0daad28494b24649b271d82c10b7373 -f02be60741104e31bc70a2fc2ceb7db132f272caaf093993de5cc3d139d559b8 -ddfd287fb1705ca461eb03a4e039428ad0ea3baf3b29f824fc8c8edfffed4803 -e5d0af7bef8aac625a184911bb28809661eb2631a078fb9a244f043adb379476 -d0dcdabb21be4f1cee1b21d775a53dc6a1bfc4a8 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark diff --git a/client/nfsexport/lib/fonts/Vera.ttf b/client/nfsexport/lib/fonts/Vera.ttf deleted file mode 100755 index 58cd6b5e..00000000 Binary files a/client/nfsexport/lib/fonts/Vera.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/VeraBI.ttf b/client/nfsexport/lib/fonts/VeraBI.ttf deleted file mode 100755 index b55eee39..00000000 Binary files a/client/nfsexport/lib/fonts/VeraBI.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/VeraBd.ttf b/client/nfsexport/lib/fonts/VeraBd.ttf deleted file mode 100755 index 51d6111d..00000000 Binary files a/client/nfsexport/lib/fonts/VeraBd.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/VeraIt.ttf b/client/nfsexport/lib/fonts/VeraIt.ttf deleted file mode 100755 index cc23c9ef..00000000 Binary files a/client/nfsexport/lib/fonts/VeraIt.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/VeraMoBI.ttf b/client/nfsexport/lib/fonts/VeraMoBI.ttf deleted file mode 100755 index 8624542e..00000000 Binary files a/client/nfsexport/lib/fonts/VeraMoBI.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/VeraMoBd.ttf b/client/nfsexport/lib/fonts/VeraMoBd.ttf deleted file mode 100755 index 9be6547e..00000000 Binary files a/client/nfsexport/lib/fonts/VeraMoBd.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/VeraMoIt.ttf b/client/nfsexport/lib/fonts/VeraMoIt.ttf deleted file mode 100755 index 24049248..00000000 Binary files a/client/nfsexport/lib/fonts/VeraMoIt.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/VeraMono.ttf b/client/nfsexport/lib/fonts/VeraMono.ttf deleted file mode 100755 index 139f0b43..00000000 Binary files a/client/nfsexport/lib/fonts/VeraMono.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/VeraSe.ttf b/client/nfsexport/lib/fonts/VeraSe.ttf deleted file mode 100755 index 4b4ecc66..00000000 Binary files a/client/nfsexport/lib/fonts/VeraSe.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/VeraSeBd.ttf b/client/nfsexport/lib/fonts/VeraSeBd.ttf deleted file mode 100755 index 672bf761..00000000 Binary files a/client/nfsexport/lib/fonts/VeraSeBd.ttf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/c0419bt_.pfb b/client/nfsexport/lib/fonts/c0419bt_.pfb deleted file mode 100755 index 4a49dd59..00000000 Binary files a/client/nfsexport/lib/fonts/c0419bt_.pfb and /dev/null differ diff --git a/client/nfsexport/lib/fonts/c0582bt_.pfb b/client/nfsexport/lib/fonts/c0582bt_.pfb deleted file mode 100755 index 9baa1da2..00000000 Binary files a/client/nfsexport/lib/fonts/c0582bt_.pfb and /dev/null differ diff --git a/client/nfsexport/lib/fonts/c0583bt_.pfb b/client/nfsexport/lib/fonts/c0583bt_.pfb deleted file mode 100755 index 08f6871c..00000000 Binary files a/client/nfsexport/lib/fonts/c0583bt_.pfb and /dev/null differ diff --git a/client/nfsexport/lib/fonts/c0611bt_.pfb b/client/nfsexport/lib/fonts/c0611bt_.pfb deleted file mode 100755 index ec6ed060..00000000 Binary files a/client/nfsexport/lib/fonts/c0611bt_.pfb and /dev/null differ diff --git a/client/nfsexport/lib/fonts/c0632bt_.pfb b/client/nfsexport/lib/fonts/c0632bt_.pfb deleted file mode 100755 index 07011728..00000000 Binary files a/client/nfsexport/lib/fonts/c0632bt_.pfb and /dev/null differ diff --git a/client/nfsexport/lib/fonts/c0633bt_.pfb b/client/nfsexport/lib/fonts/c0633bt_.pfb deleted file mode 100755 index d68f639b..00000000 Binary files a/client/nfsexport/lib/fonts/c0633bt_.pfb and /dev/null differ diff --git a/client/nfsexport/lib/fonts/c0648bt_.pfb b/client/nfsexport/lib/fonts/c0648bt_.pfb deleted file mode 100755 index 72a1606b..00000000 Binary files a/client/nfsexport/lib/fonts/c0648bt_.pfb and /dev/null differ diff --git a/client/nfsexport/lib/fonts/c0649bt_.pfb b/client/nfsexport/lib/fonts/c0649bt_.pfb deleted file mode 100755 index b5d4ded6..00000000 Binary files a/client/nfsexport/lib/fonts/c0649bt_.pfb and /dev/null differ diff --git a/client/nfsexport/lib/fonts/cour.pfa b/client/nfsexport/lib/fonts/cour.pfa deleted file mode 100755 index b8c097b0..00000000 --- a/client/nfsexport/lib/fonts/cour.pfa +++ /dev/null @@ -1,1954 +0,0 @@ -%!PS-AdobeFont-1.0: Courier 001.003 -%%CreationDate: Tue Sep 17 16:16:38 1991 -%%VMusage: 57844 76768 -%% Copyright International Business Machines,Corp. 1991 -%% IBM Courier is a Trademark of the IBM Corporation. -11 dict begin -/FontInfo 10 dict dup begin -/version (001.003) readonly def -/Notice (Copyright (c) IBM Corporation 1990,1991. IBM Courier is a Trademark of the IBM Corporation.) readonly def -/Copyright (Copyright (c) IBM Corporation 1990,1991.) readonly def -/FullName (Courier) readonly def -/FamilyName (Courier) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0 def -/isFixedPitch true def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /Courier def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/UniqueID 263786 def -/FontBBox{-48 -288 684 841}readonly def -currentdict end -currentfile eexec -b2de7b9b2a2783a9a81f7a04e7605e0bcc84ad7a981f9d6b201c5fc6acdad3ec -d09a8a1907296b7bf5510822bd65c174d41912f5e2bdc23ec621dd28cb4f8b62 -5882cca862ca3c8bbed56696f8e17809439151596792163977eddcdae7b5c346 -e93a0756e7da36a403e30b34b70eb809ec5a5e6dd43dfc5d482e2424a93fd4d2 -d0e648621eb8f9339f10ba2db9312ae5c071e20946278b5d54f7858a41f0a1b6 -b2cecd201fe0cc773a733fd892bc4352fd2c68554ad49658bfececa5de0a4178 -07560879485b17f950018e00fb441ca6e0face6fa6acc95daea5b530a954419f -a15ff97de6a7ab23540344e0193d5356ebdb99f60fce74a4c1828a36b3de4ec4 -92551fa4f0cc7ed791d897ed75bc5d034f85f7326b59e16a9e9d20d7c7072a4d -311fff4cd4635852ab3e098236a1eb05be8e5d3e4ced8ea930076fb27ae7b5f3 -a135b8e3cfa19b4144c0672503b51641ecdb779eaaaaec164216beb4de034575 -66b93918a02aea1730b7f138623f2df763d6ccadea312d4059487851ad39fa5d -6ae273d56563eb3788c4d9aefb2bd85feff2c8f6a0c383f653ddca8d4072a397 -26bc47616d936e336d1502b65cec60baa4f7c423c290d9a8e067b433ad52790a -b3de64436aeb25a5b8e18a91e616b9c310d8bda5546cb5f46e8d74adb8f970d4 -88a1602e8ed3390cbb9f1e4564f70b2141cb8262cf4dfefbbeff3d15f49afa29 -da9deb04f1e004399a20f57f770b838059aa75ffb5da99581f2fc90dd7b7f4bc -3d3d32a8b2df7a3b9ca0311f5a555e6f05babae4c577b02379370e5a364dcbb3 -1962317eded89394dd26e5e37e5f776a9ce97ffef9429f9e89773a6db3d642cf -319957b03a0434f4f81e782121d8fccd08de4e54e29b1a25b1436d859db45cd3 -c254fb02b22288d080139bf20c4fa130f98e83fde39963c3068c7aafa1c6afb8 -2ff6753842d6dab630e63fd8f7853e9358bc6c074f0acbfe9d56d3b93eb7eb9a -901ed2bbed92737fcae60b95e7186ca800ae2db1570ca4b0ed9ea9fed82ad73d -ed3977472c257b253773de2ca37eccce4faf68f1eb5cdc827dd5bc8e3c03bbfa -e9bd30bcb3cc1d35660637a882f0f4a037bd07fba1c6f5c0e8a88088ecf853dc -b2dc41ee4ed1f75640a93e9208fe5cdc7366cf3b738cf4177df4f922d8081006 -8f8f2b0143a44caed520141238781111a1331e7a6afaedb2019cf0eb438177ba -68fb0d443989e67d21f49cb8a52711507792c45bbf0c25f634cf7c1323d6146f -7c778eff204c71778e5e9723e662106caeccb514b9be0936aa409567ea40b9af -b5852cf3c9cce25acbfdee0097f828d90d21cfcfd46ea083ead540877e565883 -3234b8609a3f376ad94098ec1a1685323be81a64a6174851b6e8e80d3d8cd6f2 -41e2492bc07c052dfd66c7fa12ea0ca90a15f49194b0dbbd6f80aa49cc52e0ab -134571c2883f5adf6b57a036dcadd18f7e397b87fa80be532ac7aac3673796f6 -f20f5341984695dc99359d6e923a79441b64b85d405d53f89edf79d76278604a -4001ccbcf3e10ca83f71202d6f0a2f26db5114515f8eb58a2eedfc6c9f1f9a3f -c40205c32ca33771d7497307b4f67618bf46d3ecadd0d5b6f21d298784f9e22f -e8a97443e951a141e79a2cd6e500653fbb8e34613e57c270301dbad7b89d35b6 -b7f6cfc81e5e9f58508bfdd6c50c8b4d9114f9d9d0764232abf8c84b8c8d5284 -f78138778565991ffefaa9b63d205e74146229c2656d126e3664870c9800b9cf -ee76f078dbb1064aa5609c6c553b2c660a4054e46fffd645e8eb8864d1e15c33 -e20d690b90b6a5b9a7213bdde4856236d9f00d882d8d8cff4b27fbad85503029 -b9a4a75da575bcf29ae444f0714b5580aca0bad9460fbe2c847cd770825c8b0d -72fc684ae45ced430997d41467889fc1969702a44fb77e8de557851d4eb34433 -631c225a516281ac5e0ee6c0dafbc40855c315fd60559e53b5f33d9ef0fd1d04 -31be569d13f6dbd52bed9eff8e7eb514fb469daf3f9f31c7b8d31411692a72f8 -fc3907df11992b3aa76ca73c82710c4901b4eed793d4909a451f5f09f73db0e2 -0c32146422d4d5f83a4e2e92cbd9297944c8bb7205aa2adfc88dc6dcb4e82ff6 -07e4278885300463775ad999e2393ac0f67cd635d955f4ca5a9f57662c7e76a7 -26e7c4256827f0c03cec6855174fff2b78f1870ec2366a59a4e9983ce00941bf -17dc97b59104d05746ffcc1f7bbfd007fbb0eeb36d42f959c90382e49737352a -f582a0c76c1d86a1323af83fdfd653373a3c3b7460c839858f6fcc885f3d47d1 -902001ff877043ce9d13b1f8d1e819320f6374975e740aa77886063741e378c0 -ea28694a1bdcb89c1e2d5e8cb9fd5ab6d20be8cb0a2a74ee73d5f4c32b26c067 -0e7608a372b6e0cdc1819879ca3eb1870c22ee21b8d42780d9ca1489a4abaec2 -7dcc2fe096c55b528baf52e468bac2ee1db1c6e1609740828ad1f4faac82b9da -066b8472b15faaab3109dfbb85667a7def1794ff158cbd6fdaf9987567d8a6c6 -f86ce77b9aa3fed671f7c74a345812c978fead18ac776f7cc2957540a1720941 -5b9cc4bbd5d8aef5997110b41daf2c3d41adf834aa24862f052446ff8a1747f6 -5dadef8451aa72f9c367f21a98e1cb18b2010fc17637a673959e5790df9abb82 -9314ba4785b7bbb5e68cc6da2e021cc4345f4e6f5c6488d481947454148db9f7 -c289ce25764ab1d810268a6db157520ce871f1dff95396f03780bba8202d430b -f76046c04e1f0ef462afbf3650327876b5ce19d87ff9a6ec2e3c294976778c66 -9bf548ec241a295db3cf4139936b6127009f9807f48f09cd54e920474fc1ee65 -8dc69c4afb90f7a737df582b406c98801e77b02a02212a0d924ed58ead539b7d -18f4940a717b46ad908d521b7d07237aa25b4969239fc4968f5cd9827ab24272 -3d29ffec1926011161405f8a9a5c9e1bdc9a9152af563fbeb44d5e4ae05405bc -6a92b23e71cbb866366389fe0d91bcacd5b98a2ed4dcb9976ef9eb6c7cf06d9c -185ef69af37163d441b756f08060fa733b3ebff43160d0ccf5befefeeae06468 -0d18f7c38748d1cec437e170ef4bb6d85eead3105b2a354de80a6396c185caa9 -1d57966cc000bff2880e068d61f2ba670f7f9a2fad0ac5d1f205c1e1fa0a1d3c -110e184837018af730878a978ab3d08581e8b222307d00f86909c39c12d40bd6 -c7299dec0867f7417de60edd1897bd627767b29cea62593542c642f1089242d8 -53f2db5f45b7b21fa906851b2f28437933bd4229e32d093eda4d448641380da1 -9696d7a77fda761865d9a4a8ff48de5aa6550b2f80c7e7fef54f5dc709a9b2fc -120b03223ad9ae5d06298699ff21ea2f71bd34afb79799e67cd496a57e417f1d -87bcf2bb0c5f9fe9067af267e5740c26d6f3a256330d68f138c81883d7c07eb4 -cde5f6b5d82cbf5dd32e0c27c393cbb77cad6dbb058fb1c6653a5cd1a78f0577 -87c9dd5b1a5f83a13226571d38d367f2a4e369b4651a77789aa785f4a6561c92 -e0e82f217b2597d8a180ebe4547aa1500b0f814d309b5b1fe9dc53282c914407 -0fc79d82b5d5ae8bd272b022b35e66cd260c046d102eea1a1a4c0d376daa9b2f -e0dcb3a7254130d5787191998d88d4872834f331c75485d09799d467bfb62465 -5ea38fd84edff90fbcae880820fda0f2a3bd5cab972b4d22f1c649f970e05549 -f33e95a6d0af69653ae918872958bf100a04a7c61b8fe7433697a92b451ea444 -4670e38e33893e59ecb4a621ecd68e76308ec0eb2716fc7427ffd64fe309a635 -71c7b86839add49634114c0aeed57a2afb2a46afb303fed2ca4a7b3cce180595 -49bccef00e92339805dbe1b0c05ace5cd5a9c6d8931cdf62ce4f5406f8ceba6b -29b696b0e0ccbe8b9f9e1afdcec58064e3daa54676f493af1ebc8a2c26ccca62 -9418f0015d84e5931f620207d2c8b193113c8e6af5a0738f7085930e735227e3 -7bf703da80016e492cdffedd077be121b35093b031c35d369298f78134093147 -363062d031233a26726d549b16ccafe56eb0324ddeeb4ca8904da4fb9016fb5c -46b60e873074c2e0c78364bdbd05e0246fb44e77dffbed7fb94364a0ec0970d3 -29ac31712d356bdaaefa99865561391247a78c8ff19f6086b4d8cc464d0b3b41 -7fbe5f6b3e68de6ece2242224dba66940dd25a412c337e4c19c3305e4e1699e4 -53bfa096d66bae0ddf3a3f6d84cbc7478a00f2ff606f86913b768a18f5adafbc -8b18e653351cf8d251ecd0f0d3002862223e3488701c0a5647bfa63b55b5e162 -335533f701659833fed17ee4ef0281032344faf499ae8e33a25f97d5839fe077 -1ad9bfd9e2c1a863e0eb7ce72cc615f4ff19a8ebfe2f44aa6a636bf3197ec107 -37b3ab19482250c61d1a1bf7fc4f325056fc30554f92b88e6c8bc8ea8e5954dd -e367a169447091d9d01b79265cb1054ff7000df3b659208c6166cae1973f3559 -6f4f9645361ecdb125b87b6b9096b8c1894e5e1cbada10134d54ece4bc0a73d0 -7a93de3a3b943697cd3be33ddfa0696663524a7b6e246984620dd268ff65291d -e84855ec9192f88540c57826f6e6f25fbcb4c4e39f6b7fa2a3defd578c08c8ad -f66fe2cc07a3317b3697ac9e5ee19a9e225edd3d52323982d83d4cfa156eb858 -681dca6e77ad60dd946c8a1be74a8bb83fedf6dab14f5a2a5d1cb08ad95f2a93 -c16c39cf8672fc59bf40400920265c7e06ed02b2a788aa23425b45dba3b35a53 -098d3ca23c0bb5a9e16ffd99cb4846121c6f5656bcb8d34d29e3eb078bb39fce -be3b98fd375ba941c515c88cca36f7c55d325d3ff0932244f9c8359831981a10 -67c57e4b0ca5e2db14a9c2e24b10fddf7e037d4cddabae2e5b0443c3387eece2 -04af27ae3befdda5e88267ddcd3eebd90560de14c8f2817b6e6055e53e40b35b -93d64234e4e749cc875d9cfd48032e1059f2d2ea0e7861f3f525c81fe1863640 -c851079cd35118f98d53ecf08b86add9fa65016797fb13f20fa4f9fa0c5644e2 -86e4f6427a278a0715ad34c88b103c6fb8c09d6500886c93f399d56dc0444a53 -f64649f39e423e9b8c5bd7e8711a4455b9bc82282ac372524bcab6140921f9b7 -10f75c662901c3ae885424b03f12a4c9f589ac693c7df6e188913b64a7b1f70f -0c315dbef339b801d0f228c5d82d08c00a9c9b1d825559b47b00e98e58204a11 -257dfd1e7cfb5db205b0dc4c3211374459a58a3d23713068bff43c8b73fa51ce -bf259e69f45b37f30869f44bf3898ef27d9f3b4710b28579538ead0240f72be6 -15eeef499d8d2f0a7aa72a6fffc68a0947dafa98f52e94aa14da157cc2c71aed -17f3c2661ed84e058555d0354770c155c54a03186b815440cf8c7e37f9117e94 -67a5d50281ecea2188537254696c4b50c3aedbd3eba04b543dac970a7193bc79 -bc707725c13b8a747ad5df929cc8365da27c028745fcc82dde3b297258ee413c -d84d17166ae6dad65489dc8d98a4c760c08dd0de05754b408a39434b17773f32 -a3519b27d51781c807a352880f5d667dc8cbe54f2132200db7971b0be03eb42f -aea467cc7a1bdef783ce5d710772da9b71db45c7ba4f3c22ae9a9bdf1f26c29d -811037a170868a8f6644b0092e7cc538fd5c13568ca262ba0fe244f7307727d9 -318a281f38b607c172e64134edb76d6535abbeb9689840a297accf5c15150f2b -29e8cfee85d099297d0c6d50720d686cdd849751966c88e3aa8998c0c5c17665 -69029750afce844147abc710780af405d2a4163d272186ac4d486fc32c1770c8 -37a0656b6a0563e5b38a080f614ae9d49bafb92c96e2bfd140a88c4989952edf -2c835503abd01565e2cafa4373b790376483d4762a99adabdfa0d7a7eaf9da29 -530f626e330c8cc65113b1b7ddf5b01249b9651ce4c47111a5c6590755ff0744 -5ea2a3afa851de664cae6706bf0b640f80ec4a178e518bf6b41c793995934999 -0ccc3cb8f1864b6f20b1160c9ea3f1f8e658e88c81fcb7a28280fb37acfc06d4 -5d5c93509db13e88349ccb959dd1f23c6d5a574b9489fefbca90f8c24982bd5f -8fcc0ee7e13ec573153b51a760f47811a50c1b1e981ed0007e952d15de9fc00a -64966a945ab7cbe49e6bf90062cd8f6fd438428b14612085dd18ecd59924242e -e5c9038abee84cd94acba6c96e805305bacde3a0390a456e19dacc83f8767c5e -a9fef61dc22613e3048cac14ed6a75fa28c06d348e240019aa36faae66d21853 -b43a4c05372b0a958d3d26cd22186f95057ee646602ba13e1974758307085b23 -6ff8b0f2194a00258a76b18dfda0d5049bc9780289dd54194800554a086b80ea -65d97b1d6d03ef0ad22356fd31c90485c34a1cd00837c419c7295b712a9a9258 -b7f0452165473af73b7e21cef53ce54be278298053937f89d0d3bc15657fcc9f -3246261de1a1443c26cca0bf28d291f451d3ce279eec77ab32d5463f7f5ccc69 -5f6fc60739a5ff55dee8232b2b868fbf60a2137d8371422c1fd08fc21468bb4e -6addec19fb2def9aed1599fedacc1e5a38670011bd19ca8415af3d94010a50ac -69e8d2f36cbad97548090d37e081824c5bff928e0a767e0947c8c4f00388e4a9 -5e992a705ca0e7037000e4c191a898b40a74808db0c15c9669d2009ea5c7a391 -dec4f2f4685dfc63fd94703f948d758f11efdd2e0a634e2d4274da9bd84ccea5 -8fb6f41e617ba30fa2114deb639b7b579e2ba187bec24145664921599b6b0559 -d742b3ddaaa4f91ef05cd15db7cb7fa2400f66fd9db3d207cc5728d65b866295 -10b2b6a1cd2a33424a9006a26e8bfa8b3571a59e5cee066cc10bf301269621d7 -4f1c492a02220c551560eab04213b3e8be62fbe2d7af013072ef82f1dbba5b3c -be1974b35ad6e92e6d15c2609c17706422beb22f12d3c4c0a748426dbe65cea3 -a0ff0b208a66460ce8d359b09333e208ef39fc7fefa453cdcb028b195e70c577 -260962e2e8900a286e628bc5b0eac0328c2c6f64f0229ad0fc7872f48fed6d1b -bc490da985c19f622bc07b388a4e70e79bbe40e75d928670eecf2911075dcd05 -6f0010a492dba50abc966411d49f39515b27aa1e16e7b6104b16c6b52b428ab4 -9a6e98ecdb65aca5377819de9d99db481a2d0ccb90a1663cfa6eb6456d101609 -a1958aee3c8f2fa4396038dc4aec5dfd472273900e50bcf3cf5e5711055b90a9 -dd6845b57fcb0d9c6cae3ed0180c7a4c554a1b05298518f4d7de4107993f2715 -4b90a115a8d1a3f074a4f34b67ca5d733d59630a5b0ed10fd6459f4f9e3d17e5 -352ef13aed05ed7a17a44068884977c653628d8bb5d185f5783d041db9644d0d -69bff8433e2d00c9f6a8837a414270c66d0249e414ce0e56d5051ed7aff463c0 -5d6cd8ea3b09e1a3fa4c1a866ef3238fda1b43606f29cffafd8f91ae673bcc38 -804f91178c0d596e109b65d5a462a103a4a29d995567ec16f0263a03bac4132d -e2573eab9dc7349b6b1fdce50dc21125e38d17a3f6ef66b3212de5e0b74c3dd3 -7541e341be122bbedb6ebc2db96dd991f71011aa719c1784e24479deb65f5d05 -3bc429785d4aad99de7b5b5c03e5ce4443dbc7bf483ef1be808c8e508e6000f5 -1dd9d907b07db3d9f6566e5023a8ab0eed23857b30a6ffda86dd1aa3b98eb1b7 -bca8ce298ec3cbe5049272ea33fdca7a8a5e701e27e07cb3da0d395d258a1dbb -8714d83f3ccbbdaa9fe08900475ea6ec759f425bde968014214728d08ddd7358 -1408d3974773001d9bf782dc9cbb5209a5d3027aca7bc277b5dde20b991e8535 -1889d8d498d5e8ad712cd499727f61aa3953be4eb62133bcc578381ba3acddbd -bbd5de324e4195cdc594baa48782031b9df8aad86ebd62218b119123e213615c -cd6894853bfd77d26740d044f58e602733ee307442ab929222edb68527550414 -9ca05eced3d317f03715b8799ad1ef2ede2e3e0fb5aaa71931e70c33f7557128 -cdf1022264f9c9b5dd2d9b548a76ec92ecf9ec2029158b376c89a27c4f738009 -b555618b66865c2f98af0733208d65b1822c734d3a5a2a0d359a32dd566648db -eee996fc085b7025b47b0f8f4df03a5f9a3168b722351088a1eadecb90456a05 -ba74d908d4804034a3b9a915cff7a3b2d467f9a6adbf12c2995b75c03db7b23e -b224cdd2b64a0ea942ee4c07af8eea6587a8d3781ad7a6528d821bfd7028a2fc -5478b6460aa696ee868319dec5e1bcaea69f007b1dc80c47701adacf722b5458 -60158e090398d30a9f049adf3274a492fe891fb7b2bf76b78bad2fb05bf43bf6 -b14095b00eadf94491eb50d75fcdd95025dd329127e4746c2b433cd4793deffe -5015755a330b821f93f96ab10b508e71363ddb55cf4c6f9092201715cf26d859 -784c49b636c639caf84e044dbe3c14bf6d64e9c259af1f24ec73c9d30fc0fac3 -1f9eaf2ca8f49d0d5c18e6a12dc8acdb9f3d8ed49f607258c94967989cc31a21 -5020a9fc65815c230e8da7751552a895b0064c2a1cff3f18f9ceb908540a92a1 -06c7d46c596ecda2e25d331ab85f534313b214ed307dea03d4113ed6fa2ef1e1 -db3adb7861fa48ced61f10ab89faeb82caceda7fb1e9ca240e38611acb421be1 -119683647413c0c063c1468f1376a099f08351bffdfabdfce352ca87c125c021 -2301c6793146014d87d22727aa014d56c375945f7539863eff029d046197d65c -6a7474feaf44f7c07b0ba500752ba29f5f165d4abef0ec13c625ecf722fc9ee4 -6958a291ca5b1f385c6a5c6ed4fb0036cfa6fbfc46f1622a59f019983d1a2f2b -6662970ba2ffa63322b5bac4d58adac06e2ac789e0deda106a28a860e87ccf66 -39ed41fd29be8e218733d486633b763d0c226c18f264a632767957662400393f -4ccbfeec54acd358dbd43e71fd59096150e9db5a2aa6b01bdf8549dc0c9170a0 -05a2e18275d6d74b6815f0205a6990862a083edf44b4052f83ead884c2d891a0 -698a2cdda09d43d67fef477eb0181246a8ea49d8407ca5e24691dc83c45bafb4 -4e555c33e59bb6a17f2bc3501217502c545082e1de1e43a3fbea39ef67644fec -e36492edde144cd3aab6778cc0a4be0fb15bb46f95e86f7b4de290e66cc69f66 -5b20522987d2d0ed0ace9e250ec6c0c4793a2eab0f8f9a00d76d624cfed7399e -d1e766b6c2dac1c46c6a8c3f291ffc03eb71dc220eba0573225e74c9df93e3c3 -d31f4bf8b79a0eae363eebc0d4547d61d0d54c42dd66fabc8befeead4fdc6bb2 -0586a0a47f373849b0b6ddf42a21c6be6e1c9ddb2f78c71a334f855173f681d7 -253a9084447b363872c750476365ac690bb27460e4bbf22ecf0e4d2481bf3b0b -afa54d4295efa2d38cc6490324b12dc991060dede02e8e29156ffe3f9116067f -0478f9b5928e44075e847e0864e06191c88f6ef0408124499b970c5c5acc28f0 -6f15eb4fcda631fbbeb199ec847fed052710c5d3e1f1598f7a279110dfb67e87 -8a0caa27ab4efcc03a6953e28aa9d660999624cb29ab8904942b5df81d67a462 -615111d743ca174075f3cfa6d239741a4e6bddf182de776addf3810047c24c44 -e453a67241e96bb3ed0ca17cd928b8f67585a228176d85ef4b7fc0374123987d -2bc1a0fcb9c5a5be1749e684270f9b77c5cf4ae8d360c14ca596efe21302d343 -3f7881e8a25a88ca999a9f31a2467fb739511a42913b98d56671c74683f2b8de -6cb20b8b9fb3d1b51b9a9a43b8afcee655a3f7217f5a952093f7a7ad84593aab -fe0767f6879cc2ec7e9ab5b59bd82f48d06c9adc0fa218bcf9e1f63e9000eedf -ed014a091dc952e3e0f07eb8e7dd1dfe0cc0e6af9072a53fc95199f9233a66f2 -d04c65bad02d00c3c5ba1f5af4d33a94e8eb5ef8b21ed1637b1c3e3522cff141 -77cbf28628d468249a154e900a9deac70f0be7b7d7efe43b9243eeeea068b03d -0122feac859438fe96eba107d3ebaa99817816652b53944df5bde7b78eae04dc -d2a179fa5c3002457ccce48def5739cd02a8bebc5d65a626bb50e4857a592d46 -52d7696129b176e5ca95c9c3491858d341deb70a0e2d57b811eaef78e52ca362 -9e9dee7e39259100ea60488aabcc05ae2c6f751f41bcb2c690161e8813fb4e7f -d734f2c6fdb37ceee6f7bcbc29b2819e904e61f892fbaee59c4581e2f171f9f3 -60452fa11a872267d49f62df732dee74c8074370bb37d33d939e4a933758487b -280b1d83cb23df036ea8304a2531465a647f81e63dde4734c49a51ad26401384 -0793737f31f69413e5f5152e30309701ea8e96357cbc6bd39053135647519300 -70836262da78a79f8ef1d9a17458e02d8040629b6dc7a7dc114d05a4bb01f90e -01480ca86f291747c4c1b226b2ea6c15a38b6d7078f2f51b264eb125891db1bf -a669525940531976089a9a63fda1c89fbbcf9e5a8ef413f837bb541b1fd6f825 -b7db4d1c1f3fa3eef70eb4df0e962393060034581ae4609479013a72d16803fc -a455f9722c2bba278a1ba5bcf1b8d1a5139f5ae71ff532481524acef4fdee7ef -14d343a1f0e3fe847d9c9e5878bf1e5530820de3e6d438e1e66f20baec033b4f -92d055105ed98345bde4fbb5612dc76b7f51cb9d66150d153a10427c027ee838 -38faa910e77fcd45a41bdc6081b0826206b56c08232984a85a5251a8a8362cc0 -c4b4f4dce651519c55777e6ca349bc060f9523c421b264d1b30895da4abfc4ab -9ecc4fe0b4a1ca8310f453de21a1e73e8bb587ebefa3f4555b5a332499cb2f1f -49b7d122ed4f470711f436d05695fc1f275b93ceade6d04fb2108517d670949a -4bdba8b6cddb62b1c9cc92ed63a8890d1e287e0051e7c8bc47b4a7fec9c7c33b -f668abf07c2ce4e080c8c4e9503b61940db11c5f17c54d09b8b8c5ce3985b422 -1ed39a00c39e87166c7ba0ef441d352259022b609513a2b134e13f48065c7acb -4b101230ba98195e8b49d570347fb95443269e9fcf9fd03c7aba76e7a1b13e18 -7d344d41907fcbdf19f616daa51df3b1b1be673f95c4ef1a271a908548cffd0c -5f70521eec3119ca5588b4b7e04954df14b0589f1448eaa347734e92128f4d51 -28243b9e8d1d64fa12f0c89c604ef7ec03587ba0858739ff07b07dda99390b74 -a1ff879e4219a459c6ecca54896449c3bdf93582f0890bdd0bd6cf8d5168053b -9a33cb7746f62a84af705b6135ad2bf04803e34abb34185acfde007901cfaa43 -64c992303e28a71bdda153858d252d7fd2da0d8dc618fda68f3d26c03641019d -7dd2050beecbf38dd29039ef1923fdb29576b7e3f10671d1cfd93a2e5dbff204 -effcdf0035eea6912163e8a3d995ef07170e0d74f88762a3cdd080d6cb7cbb60 -3adf3cf1e8079a2642cf23f40277b1d0fa687adc1ce2e22ca28d2715d58cf727 -a9bc686734ec03602ac69fe7ee9c08a1a38ce9871e9038cc624c1e423f34539e -4c1dd622e6a2d30e06e2095e30b6c545dfba323e78413ac65afc1be958369d64 -f21405f98fe5b5e58e9ee85dac85dc318349e91e64c839e9c94ce019c32c6cb8 -5ed016f2e6069a4b374e37155400beb75dc3fbdfa829980698b9d725996db955 -e4702b4ab9c406991b30154e150ad128f2bcc1d6aac5383acd6a9ce148ef92c8 -70931f701e867f254c7c82aa34f8d55b28f546e9b7f80437e5a258f22d55ff60 -916a502103299649fa9b14e5dcb9d2beea401e2a3a12bec2315fd88f23fa8a9d -f60511057ad5ab55a602688c5d9b215355bd24cfa4dcbc9959d1facadd693a32 -0bd8737235896ff92faef4135e208e0b52fee9ff7f101a4957c241cb836ef31a -4368603d687ebc95ed844fce7c18983c888ef7309fa051593913ad1d767e142a -d6e6993375d0abce782bd9a6ce804fbf4634a65c063344c1d8469684c09a9d41 -d64736dd3c7dac43b546866d7182336b6a73a4335b8696a43116f9d4a83518ff -1ef7be60d5a243461737ccdf00093ebc76627a1e24d3ac2a60cc8eb39b7ddd3c -205d80bfdc89dc0571abc93def1998bf1c9c4128be86b52c362446f2ac2695d8 -8ad1626b27d6110b8d130fc7189266c5bb05f193e826a98e86374c57ee9af55a -2ebcccf8497a068d6f60769d2c6a22bfb9685fe12e239b4b7c70f13d3ceb0dd5 -9eb53809883cffd0d5ec27e0b66b7a41e642ec1d989ce0ced2f386ee381ea1ef -0c659556abc7dac2d458f816f04e0fcceec190d561c0683f4d579807554ef59d -71762374f6bde146e18ed9944e053f99688ec4d84cb8ed2cff8f7aa3a9b624bc -0bfcb231c35f93dff1382e9568db2499df08dd1f8f8b49ebadbbc2df3943d11f -3a18992b25c7562a7f1faf0e6e653a678942ef689200eaada357e28f2610f9d2 -0f5fa45e81142d264e1e1a54a327ad4ed915749e9f27dd8a36af0b61c4440c6d -9703e5d375f449d352148cfa26c266ef7afb0c3b598e6458d82780dc8d262fb4 -57a136e4107749b0efce94a6ac6c9d49d725d3ae79a217a38b238e4b766edaee -64d0d9dd1e571f16ba46307838319adf6a0d1e7495cc545b7f1ea4911c21c8fc -b88075446a45baa28a9ef33e0b3f3b8db25c57c3a85e34ab0c0fb1b18e7be01b -cc2629fdc69e64825a845fdd7bae1cca2666dcd8a7f846521f4eaa2ab5eb1b51 -af7002dccab0a9a7389c2d3129175d8ce87cc4d73c6d46fcbc10018ea1538fae -45d1b02efd79b908cea0b20d186dfbd0ab05ae06084c5b338d1f60111f5dcdc9 -e2818773fe82b7e0a621678987b93e37946bb24b181a4fb4cba56e3ef726c158 -b0e878ab6469ea8fc0de95a17742141c1ac2b765be853343cf3c935be5b14b37 -203788f32c418aa6206e80edc58a9af1b9547a5bbbce6cc95b56bca4994b32e7 -6bb19593d6da2bb4db58c0b0d1bd0f94149aad4b85a30131f56931a145a65f1c -ccab13dd4b4f3f233d6eab4daf44f42b89da53d2df61dd7e1fa0575f27504b1b -74f843847454fca0e5264fc642a28541d6f1d1caedf7db860ed45d9965121b53 -5611a3fdc881cd1366ebdfb490085ccf11f94905ede6442391bcd93b1d44bcd4 -a7b2f17c7b0ab3bf04d07787451e43b3f25d5e864fc6abbcee5297a293c02937 -b374d8578b71b911556f9c0e71dee07042bb46706f5523f72dda2156e364dce9 -644756987a5dac995c0c86c4df48c1cca629126a0b67b59d50c4e34635c04cdd -165d5607a353568ead3949838d4e5ca7a8e7a9f88540508a122ecd371a77cddb -588e6392fc187c1a210dc63e42491795c21f9f50421bcbb5f2b58fe1db5be2e9 -bb7938f70f3f12aabdb6cd26559d18fd1e7e6757c5470fc2dc7f8fcc6564fe95 -c2164fac044b3243c72f3fd8ca843f111df1a51672447e49070f6ee4c3adc8e2 -5754e8fac50535bd2b164987dc02452a9de63973203ede40ebdc6d0cee93160c -05aa3aca73dc14bb9b8b01b94e8dbace5e937e7f0f09834f266d71d71bc4e06e -885356033cee9a7f346c8609fabffebe003a54704a4035abd55b26fe6819805a -cd33b6425a3b61dd8f3db2b7b9551318d8048b24ffa4b40861614765716d5e67 -a9b1799a48b69864e90476f693cbd8ec106c20e94502ea2ee452c200dfbf45ad -273ced950370c316ecac58f3dd67b523261a30fbcef78d51d427d414619e812e -72afbdfe5946e0e5ff7029808e6fbeb849fbd716ca435bcecfaedfffb8a2c48d -3bf406a132e7a3fc2a9f52c28763e7575bbc2f22f4029bd90c19d9c816205b48 -2b03f88fa36332d72e5f0df82134760d26ffbc3c5867556120f26d10bf19a25f -b52baf6a8f98f0a6322b2735e9c7cf5e152d0b7b01d97c5ee45438a287ff2172 -b164791b1b60b29e88f3b4eb5fcaf195f5d53910c8f00517a82c650621a83ea9 -94cc63f4788c98d56676ae219fef3e446356fba4b49a24c3e0a8c7413c8ac1be -4d0a063d6dee027e9fc4ca54943cefbc760615b6ab16091114003b158b019e10 -5f8c488dba09b70db0ab77ea949f889c1498faf8883d63c36caaf1d3a198e2c7 -6a2c97a0a14e5c3dcfb7034ad7357b3be8cbf95d93131d778758c29887f5cf4b -493044e28e29903a3763fd76b3d69aeb4ae6f95b160fd9519af1a8c90aeb2977 -6f438f1313feab076ccd14323a237ba5bf76faeb29d0ecef23adb8cbefcd6df7 -6741644d51076cf66f92b52d852c8994b9c763dd08099897b11adcf00e9dfcfe -fb6c876b4f076f7923fc3975af92e9606475c78b98d53f60f656b5ff23fc4b60 -32de05f8077319f6b35e97c43dfa17b4de3cf2a3cc799f8bce3aa8c9d1b83a4a -bc42a89abd121d46c1a0235aa761af492e2e2136221ac34039136c291e877912 -d3946118d5afb7f44a7bc0abb2b066606c7d4cb5fc0c8133a84721d8cc7ecafb -fb6b15b6ad5adac50a7c3a3b8beaf70054601140cb8cc08b6372ff8fafb5bd0d -f04364633edc41fa1c4522402313b35550fd3515b9feb6a17c4a5b197e694a07 -477cbd4a46999edf0f0a500ee4c701f55f00d5751c65d08a621cb3f41c298c6e -4ddfe05703b6ec04c25de3e0e7ad4f11dc918e011c5fbb236e5bef784b2ffeb8 -d79be24f9c1c394d5bb839142c1193bb7f224acd259d1a90d2d237addfcec05e -fa0c387d984ce73e67169dc36eebcf137fc9829e4bbddbcbd5f61c2f3155b72e -8f427a15b099c2561ce8b9871feb7c1cfcc24a639e0f2d051ecfab89797d1b1c -0bbb7b374df1d3df75e16998dd4198358e2829f7bd40f50a449b968813949115 -db90a7c403a2832454be362c71875df7476c7651f3414c0d4f497ad1b67b2952 -d41641c740028167677c48374b3151a9021fd3b9c21ca8a8efbd86b11d998813 -f01c3fcc990c60fba08f67d3ab4a302b62ec0f04b9063e01a8c6178f3806935f -638c972686fef41baa1cf372b735fb19bc389af9d7ddbc7d31acb7e915d4b418 -d7a5ab181ce663314278cf8881ac4430ebd3ee131a7a2aade1de7731da96303d -ff212e8fa851cefeafa4969d11b0c4a74e23654821ba2458961cc2b1361bad81 -a8fcbb99475b003c29f738ef40e4f9b1d89cadcef391db7cd117be434d085636 -3af49df9d46a0cfbff5af6e5e4d192a4d13050f5ce3e30471e489d57330853d2 -728007ffe1b7ce41375dbc823b84812a6794b58e38de43b2e22d0d059db64238 -5d32f79fe0d2b8482f61a0e1c2155dd69d2dbd2636bc0f07efb9f6f13c4e61ad -16bc525b35930de9dd5ef4e5e91146acc78987a2e9578475522b3c87d2f5c5ec -ac8e55de0399eb852551148047019fa08fcae9bb7831454ee0d5c36e3744d7a3 -4eed0cb0cc8e82810a673c1098986b7d3ca984597f37f695df8aa168a70d0ae9 -6f526f09ec75fd2c0d2fa0055c519459adc3e7c61816d57ca3bd36f78a06dbe7 -dc22505a4ca8af1b284d887b12b7f161fe27b6f1ed063fb4f7a37b5af0d1231e -9ed802879896ecfad70260c1065ae88e593c75b6d0ce546440c482f5503467c8 -54758fdc1c95cdcb7d5663a0e1ac98d0a518894aa3c6f4e4adeaa8ac81d8952d -585c2b70d5ad861b13f6b48616332c765d1fdd8a97e8b15d38097afa88cd7bb6 -b7c82dc031da0e5e919b3a8cce89da12b8548a7c45fe1ac418eeb8b2318c9516 -59a30e56f4f166a6fcf2473c213449f46cfb906df3ff8ac703020e8cbc71bf21 -6518a3c76265e644f62be4b2c17ce1c8fee549fd14d1cb94b646ecb1d14cfdb5 -cc422d8dae5a86550d4862acca62644fece36492edde670bc9ce80b0ffdaeff6 -82bde3dbf0c403b882882af7572a42b4f49f6bdb5a8aef91159546d90238ec37 -0ba7e2b0cf8bc7505d8a2936e88836d097f48d57aff9b04d08e9fe8f3f35d046 -47d6ae41ab09af7bc1335369407a9558436be878be6e8b7f4cf88cf09a6792af -911ffc61653653d1c6c8da705377941c7d4c1a6cfa6f47c2984436ef697052f8 -8dc07c91414283515bec6bf581c046306800b755c301e5c5e2509c8717d7a450 -1666d78c7a63c74279dd218840526d5c64da4cd356d24ee7382a471e511aa7fb -94dcc208f1d79e5b878bb110d5df78d7a25facd252ba729213bc5b60093c115f -61d72b91eba38d54600893f12f41c59b26752d3efec1336d8a1bdc0e9a33b9c9 -cfb1946d4a60836b1dddddcab7c18a1db24bffe3df0aafce0c145f5c27b8bfef -908fbff18d2f398b914a5803d2337b95bc7d0520bcd60d3730189af04c8417d6 -e12c20626580881bcbf4c7f6a6a5f43e7792de58f7ada1d8784f6a7b4e6f96ce -73c7629a1b3f78b821629b8027e85eb5241d8723f1632145263b0457985be78a -4709401ecb03f96444d94f3369b30b41ae1a16a7671d2a6ab6ecbdad3753fcbb -0edb46887cca933f5909694344f7282cc7bfeff1c3e19e7668db02447082f8d1 -72111d8526c17a4458326bccf6aac24088a3f6dcdc42d5c5587e05ddc8ccfd07 -38e7f9185281192a15d248f7a7c7f013508024e4f2386df48f076b2674e5a720 -c8e5d5db8b7ea56c349a963ed8441501c23b7334c245069978b1d13aae19581a -c8d6bd5bfd27b3083652678c15ea96ac0a901508d2dd0d4d89a772c740ac408b -b9b61c28d5fd3f46463888a3ff49ee43721a0d03907f2d20f9c953c6c1db8bd4 -32afa377913b374443bd560f68d11611b017c876d7cd1a2bed5789a0e5bb2756 -60a68957b69249f0fa1822e3deb8c8c879287fb81344aa625a772093c6ba1517 -11232715b0d53725ab50343c5b1917e2d2575340d003db8adf03b3835475f098 -25e541e87a326369ac59d4b9a71b2d5485f01cfd40313d14492e828a47fef188 -57aad991e624ab1d3d8d696a55d34e3a3689dfb64c5c33fed34fb0c8293da01c -83c58943509507870979b2c51f74ef700bc52509da2802c0f0c1f4516807c3dc -fdcb32c4b5ed6a87231e58f5896c85687edc3e7872206b3c19be99a863a40ff1 -5776e396918ae1ddae9acd9a3c654133aa17294a9e57ba5287db3c71dc1c0d12 -d9d6a6b85f5d1cb487b51e8c1329204815962b6937a22375d5db47c4bde26ed9 -3ea18c82839f55a28f62a508958bc7fdffdfabad5757e5a4e891efdfe9421686 -7dfd4e36a3a394fc1451e38907b58d16fb110d8b18e99945c9d1a215f6c906dc -5c2a8b98ba49c225c437068ed7120c3e591f754bbeb880fa51868ebe4735b7d5 -7c1107652525b3b844183f4cf351ba35d655bd5e66527cdc311a4f0db5412956 -9dabd87a4e45081b4cf219a75432c6c628b596afd87b39b68f600611b3ab3d83 -61b8b056e3aa2b403f6550b72019be02a27b7cd023c45f72ebafca0315f4fea9 -d490254d0adfd8702b6ee29af2e47be8350196e470d622bfd3febf223d7358a6 -a00f042f7d168507d7e69adaca8cdd219cca5ac0a1d28ec684467d9a16152c9c -a31478464b5a35cbb18f064af9de5a5044ae920b9897d6eda7bdad45a2ce8196 -d918a6c98eafdb088df5e11e3eca1b860fee77e4a7a68e21edf484532e24246f -345bc0136909dcdeb2d637b215f1087a3b14a74ce614e00dd9b52795f32dc03d -f2b5fe1c2b19d76b3ec5bb517b0623faa536c0752c796b2179ca76a40c0171fa -99c78e06bf1151c9384a0ecf7e384bc11248d954b21c9de2bf6df4229df208fe -a16848c893f1f25b80020ea691d92d47d82504eebbab22c4fabb9aa29ebc2aab -197d861b9a7949fd86f201a90ee2a453bfa2f49be46e87935cf365b21f946b88 -a3e8647fb2330928c1e5fde0a807c23fcb55b4e2008d5e3add8df3a74e5239b7 -aaec108ea92033cc581aebcf23116ae19f25b8d31eba90ce20388fe73b79cc93 -3fdd183ae909e3122384f79d2fe53cc07cea9151bb3ec076de154e672b580ae3 -42763452c9fd521e7be2ebd9f2a410e989ff4c5beb38346e37d6bc91108939f4 -3edba27cc6d69a60eca3cb41ddec11536719e3cadbfbbbfc877d39021aaaf578 -7b986a01db572a62b492c38466110e1f484fabf38054d0fd6acecc367fcda35c -f928707a3e15a0cbd3f0a6d555e1625582dcf088b8fa6859b01357a3fa460e7e -5cc1a3330318b3fada86b2c55f904d77675ef57f137e8d3852e1cf505029dd33 -153640e04fec2575888cae0258b22f309c93e9042d567ba4a0ffc57cb9e9caa5 -14ecba866518648f968390586f1cb0ac986ddddcdaab912a09c397d12a9973dd -c5abc02b82c7b3c1caac0f1da96154677b7112bfdd1c349dfdb5c4bce5d7146c -8475e3cf71ab9034abacae8182826bcc8836a6c0cbef7b64b67f874a11535956 -2c9a996748958e7238777f23511b0f2c18848599beb4979e22b98eb5d579611c -86d917d84c50b23d55e5975a2cc934a1265c0731c9510c003930cd829e40a4b5 -7690c4b63595f1735d8c2ea162db038f58bf18f3155d0d6c5982d43e0bbcb187 -2eff929a6e4788611c2527175460fc9a8a8bc2b2b3acbeebd6c53779a1156257 -0f53eee2be859bdd702d4e983b2877f1f3ae6e4893cab50d607c42cc9dbd13fa -64f20956338528553e7f0fd6db1fe98257c7acece718e79e6c3ea3588fac6ef5 -a280f937f89e570796220fc2b939832fbb6f34a9cff554269121ef6aa6c3b331 -4f2e22f5e597a4ff253fca5f757fe152e4fb5e6019766336e6288c352042fc2b -e780c7e555f03b991bc44a7456762fd05c9c2e997c626379d447dc056d66332f -fc2a137fc9c2dfa584b127429914c40bc3a8a0ea5e7d6cd3a86844cb8f1ed4b7 -63af17e80a0b808dcc5c70b38c1378c9cbf77601879d0019a8b2ad2d458c17da -932639d69cef730623acd1243b062ccddb62116655812d396686ddc1c8938edb -bafbfe0ccd33221070a60888c8397ca3924e55c5820f4eb29ff35bc501347a74 -6e3704fd2051a50c4c4c1c09c74c9e6ceecad42d37ddbc410485f90a0fea0752 -1d6508208d4d86ae19e2446d21902441b44739849abcbb2adcfa2fb353e6838a -0444fc13839ca5edad7b5638d76537257187eb5dc89a1f412c35ee4d8bc661bc -e25d809bf5e3b082051090b20b6b83225581b547421138abe92a2c3c554651c2 -604f7e79b48a1fe0e630a4caf13fc15fca552dc094be6f359736a68fb4791db2 -9b16edb6e06d3ddfd451b111a06bce53b70b7ef5858905663629e780d0a79fb8 -6c239fd3da4d2fc79a2b7619a3612490f147a44fb5a9a5a8826c7e6f70d9ac90 -41e33c39108c8b963f692c8719187246e9d34f34d5d6053ef759da18ee8251b4 -df0bbca723f7ad791c3dfb0f1db37b01cddda2ce698b3bf679d2cc1ce8685ce0 -c872c2f89c6a6897f8c203ed61aad3f8cc5e0371710f5c4c86343ac388770c56 -f7d1c14b15ca0434218f86befc24136ec73cca2ab768faa087ef70b3d5fb7f20 -0a68082ff38e522eab0ac5c74309807eb4597d8ede958790885aa18c792e6953 -74dd77595a94f74fb896587c5caf286f43223bbfdda9e89be778dffabde05823 -909db8ed5b5310ade1e80da1ef16805f5f8aa900be2ae91c54aa61d40a0cbf91 -4dcec7a0dfb650d6323855a5eb0adf481a2189f7b2736106c56e30a50c27578b -b7b21db20bf5496e50df4e50c834624fc1275dc25375db000aed74ec1a1a6445 -4f041db66cba8a7c7455b4b55eef149414ee08bfad9bab1693f197efd3bd22fc -8368d39b706cc7982ce7179cb85b9eb073fade8bacbb9af70f7101eb114a773b -f5fb3b4231bb9f5e439bffc1464f50ee94b499b3d84d879fac0012433cd406bf -b7420354879ea2220ef28c07df24dcb079fd0dc2a63f9cc9c709dd122b658f95 -e5211c61795a791544e9c21ffdab0acf64bd60644146153f02822f1518d0f6c7 -e3ca9a4096ff4c424516835c7f6607dafe23c0b70c8f8990eff7b8ae724a07b7 -13297d9d7c83d87a6b19eb98c48c6e9422dada99113c8540f48c1ca03058f052 -712c1a46f17a23b45135c443c1128563fd6a66fe9e3c07ba27511b4cf0ff68d7 -792f6fb1589fd22a2cf5051ed798976fb83d3b23b6981f169b44a3e3cc47af92 -9ba4716c51ef979a3ff7e4266899a457a875c0bb296ebeb8384586aa380f9eef -9d52ef6c952e848923ab3f564e776dce58f21b6ded7960f326f4e925ab2cbdfa -863e9c79453e338d7d61b387c193a862fa9e6c456b7652a791a91b0bf01a799d -cbade03850b816ea002185f7740c8e5b7c32b003ff7a8c78911be015f2996455 -586fba449ae8f9b27940cc97d25d77d60b0aa847f586dc6672e0c0f6d2cb636b -51aa401ba97d84da2774cb84912e47c9dade61de470b61994b83b75207af9abe -5e10e5e8cfa8fdb8131bbc68a63886e7fdeed53ad867b6d3284f4e957322274a -3b7b1846d860c446b0c5bbcc3c6241a56d2de295173c3d64103955b1bb8716ff -c0dc492fd348cdd46707637eba91fa455d53b9f528d2245682997bb43cbcbc5e -8ea3e9e2a2bd19202f67d7c16a42c602efe8254c3b2fe935c1f5bdd67d21d270 -35814763f60ab26fc8966849352d3fbdb628486cf74c5224f5d8965c5932f80e -0d8be4b9716e5747ebd84bf452312042fe88d07e57a42a8049fff714e690ae0f -5f7d54fde33112198294c3c6f546b09c76ecb3c414a5ed2a2f93e94c895a6010 -e6bcd4e883d2c7d7e826c14c9ee12f474948664138963a96f83ba7906736e893 -118be766df46767c4464623be7c3697be8fbfd662ef959e03b688d73d2a2d1f7 -4e9982faf31d21830d338bd8bcd83ac92127f9d48bd2660432e97bb6887e869a -9e1871fa2c1eb361bf3916f571d9c7ff2b864658ac152431b931ec6c4f1d48f0 -665a90054febb824b428c2a997b404813e861723fb6c9e2c4bfcd04e8a4d2b26 -2cdce120e24912d32fc6cdd7d7235ac5f3d7840eaff18bd818b715afc03eba17 -7a8c3c3066e95c8840f291521c8429841e8b39d7dec80c3eb56b49a21a02ac90 -0e7a2b67e67732298f4e324825f7c823b7611fad2a8b7eb6bc44c3dc0705b4d2 -58fc26fab5d9c20a786188f593d010a843a9b6fd47f5a71cfd728c48279abd0e -0a26dedb870faa7e19fffb970bcbfc6a61a487a19c56bc4e8d2e3ef093df0b55 -5a928a3b8f8f26c3e8cd4e1fbdb913d3235dabe2fa3b66c832bc9533c12fe5a5 -d6a004efde58f949bfc8bd48c44f8dc5f55d94ce79aa7d71ad14a4f7517ad7c1 -f17cab05e7a745220c32913f3c8f06cf02bacf882d8c293c8290740eb05c22ff -c32c4cb2012c3d7dbd643ef84cd928ef8aaee42797d010e0fca4ed02a1edbe1e -1d7861eb0a741cf976ca07bc02c22930776cb0a36b46b1a4aca00fd2d77f685d -8ba3c1e24c522e43f198fed209ed810b0a7214faf8d583ea9146b26e9ebd52fe -30826222af5fe432bd82d840d0a22b8ba2a7635de4c7fea5aacd8f946df99c0f -cbb84e5194aeb9fbba94a33ccdb34b44a309954dfe2decc1c3f5056bda9456ec -5a6e0bd801218083ac309c737f10e9a42e69b5bf74d0278fba6a691b934d748c -ed7644dfd2f5c5ecac8e55df3b5a225e3d5ba7706fe4e50b7d9d53df98880cff -01aa1a5936513db38de449dd1b1bcb6cf199752df7e2161857fa86cab9d1b645 -95da5a17bc0f305f9023bd265e341558f73a22bd4a01fed1867179986ed99822 -f6eb5eae2fcb74be99f34604fb47cba6c3a0f0cd388ed13dd07337175ffc9fb3 -3befc49a742d6f667af2a4476d6e8e0bb61a002b29ba069a4a78ee1bbd00fda9 -ac18a33cde76217e48b0444e7c90788e60ff3c820ffceda02891d12333d6788c -8028507fa8b9c59d6d6d476c349c1e3646640fe504893b23587c0fef7c278fd7 -e1fc0c12de081c4bc55ee7bf65c9be4c6168abc5281429f3d39bd0bbf771d574 -8b321d993df752b5fecc462ff8306ff73ced8c946f61087ae9606699c2e85261 -c50715085f967542e98f92d89bd22d1b96c1bbf45e11958ce4f31ea3bc994ea8 -e9d0b7cf4ba9ef66b8b6005d6b2960e68dd0c0af4dd9957a253e2d4c47d46a09 -cec1580c02d05bd3720daf7e8fd3d2144b8e5b3414fe89b2b95f8cd153b326e4 -25b4733ddb2b4e1f02000dcc806252311c1e313a1ebbb4a9c445350609cb8bd7 -25e67f6fb760765b01ac474780faa7078d0d0a0973cf6a475087b720de8c5200 -e953eee885e5510b83a16014a6a255bd8273610fd698b773a0e2911690b1d5e0 -517fa1e2909905419d539b7d91f06fcfbe4c05041a06cb8a35bbb51b563e425d -0e65eb7b086acab5475bfe889397b2326cde5d4f7b30da851c55c630805a0548 -eacaec8b20bc10ba9925d13990ffcdb569782c39032bc5c6834eefc519747cef -23e1413ba5c6a03a399e7adc118dab0e5a1a8ddfeb5888a6855ad7ca9b8c5c96 -b33538ca373d4934a879387f55ce65390d313d93e4cc7ec7e0f67c483c3cba57 -f5625699cedee9da8622f0553d19231f626404329268f440398ac131190cb74e -4cecd5be8cdb1a01bc980b993cd8b3ea77eca9642da8e185a363e7df2441b2b8 -d991a14e5a5fea3014aa375197fdbc0b1472b321d5b0d8a543cd958ac036208d -6b33858d4f5a454fda0443a5976a1008da84749552fed657df42290ea9e0bf14 -49b2f609c3b69b8b2618a73e5839fa69cdac52a68932ffd4b9eac9a96aefd44f -d7475a9cdcaf91cbf86e81758426068aad6dccbe6e874248d86bf55aca000641 -4e21877854e95f7b76b3994424bd597f3fbfe58461dc5eb0c03df892baaf83b7 -e5b743b0fec309198e019cb64047d127e47ecda08a6398a46621ee521d05ce94 -be413888a3ffbf5039563b15d39659a57a9044e6caac763d25aefa6ae3315fe2 -a2ee1f6fa44554bddd7150b8d852515988753ea49ead18885ae5d2c876335be4 -c4e022ab6fd7ccf70ebd8afb12c741f8a6b559aca8b7c8c71f2c7c2b046f5922 -4d15b2a85fb38fb2c15623bd669b4da58c1862a69e3d01dd5098887472bddb34 -8f37053c8a9022d23cceb6106487e1d9b3128ac1dc75cff1cbbeb778ecded89d -47e4e96d97b8df40e2b1b21fc062a353ccda5e734d9ed9b1800a27f3f100764c -5f568fa7668cbd8c9cec6ad262c36cac701239b6f462ac4936ba7593ce53e49b -ff228411d4f133a019c029ccb7b973c8ed2239e18c207bfbf148019d088d2dee -c58a1c243f368d42a7123f976cdd4bb47a754e112a27939bbae57c1335f365f3 -20d1e89079e71d3b8f7c2a4a4cda6961489a6f884d75d7493296e2dda3ee5bda -4ec01a82354be5ca793904fa722bf37d85e7fec21b4e98c225fd66e819ff11df -368257087feb4355932627f3f6b9c288afd80ce4533967f42b89da53d2df67f5 -77a03ad16d54cafcbb249565325b7609e419bce2f136756adb46f2bb37010fa4 -211f58e74d0931c6ce66474089df52b9401ea0e26c19714dbfec4f138d6a0acc -f4cab67c1aac582a768819f6eb7f1591bb471640e8a262d8d6be3f935229a8fd -e0c762f89935c88b847d7e7e6b15b2956ac4bc9095edf740c615c9018579fb81 -064a1d68f6982c0cbb0a33cf9a8bfc6e094c3f87bde2ac70fe526cbc63672520 -e6b35070550449599914f3be35eaa1e326bb251d9c9ef42a9244ca8ee79fab1a -dae983f83af2a712f9bf9a2ef74b288a23ca7e958ce8c24ba0c4ad0683306da9 -51071e3ee96c25cd8123e87ecb93cf760360ca98727a7ca23f1273ef4a26eb14 -8e00c231bf56a66f74feafe07322ee921c5de6979821441201c46d7e6cfcbc31 -3edaabe7adaaef5f7f2d7d297de18b504ccb3c0b0d77f03bc9fe79394441267e -5418523ae7f91bfd7389d20f77115a4a9129c33531cfd99a2ca3f7d3f39635cd -0ec256f7bb65b980a9353e9692bc936d8ab18bea370933ff01e8eac03bc98f76 -87e754593e3e06bee184bec18b126f7bf3fd083f87cdfc2c1074ed007432a6d7 -97182114ab1c8e763f8f37c705584da16b4bee27a6b9b24746df9e9b71729bda -630abb697f3348adac537b97ae350f64c8c8b05c82a49f8bdf4a2843c33be4f1 -3a201c7ca5b41823923c9d510ad2741b171e8506b0b79d3f18c8c363f3f04384 -1940e1be692b06b13774d4405ac2ff62876fdbf10d1a87456293c7f4cbbf8a7d -8a0c5ad8da6698efd998f58929c2919d2f8b4c52a904b618a61d4a3936ceeecc -fd97cecd156c2a5979b7321cc4f1b8cb84b00bfd6eb32e12febc812f0115b57e -b60b4cb41d6c109d9d4c4684cc2e46f7a8012aeaa0d7effccf5057cd4efffb16 -79f3b1e8bcab177a67427e3643105ddd8a6d292681cc9114c008febdc659ee93 -70aa08e8bafd8607a45721df8f66d072ba67b863797c96053df935e1950a7ccb -e9f22ee34e2e3607f1cf4bba18eb34480ee49898f7dfe120a3523646c7693b6e -809eeb360ff12283e6c67f84517cc4794c580810df85b855e394d7f1a35c8905 -d61252c16ed95e1b8b64062d122ea621777678d13d7924cd71666c191599921d -f18bbf96addce54db9ee2dd1d4083eb31593b706542e8cfd5438668747dd9234 -afee940b0c9ea6cf1470a700aaff7c1ef56751ba9b10fc5772dfa61f471890c6 -911d9b68bca77b2fc6021d86d68b032f1ba6774830f123e21b4656380efe06e7 -0a6755d5b599dd09e4b1e45c1dd74f7523f447c5fb468a871db7fd074305fde5 -ec49a348a02da990b1fc5cb991a715fa79f49b4d32f601f102618731d98a10b3 -05625db0c0e0eeb02a4fb69a39e4b716993caf7222e329d83cb7e60ea78ced15 -844f3079f7821a44c27c237873b9729c0d690c31e52f3b93349522c6a1da789c -75cc0d1059a2d1339a463acb7da3399414b623751485e9ccb0523a5d0d42ddf2 -e89dfcae5e6a7b743f7e247d171deed57bd133eee43dcf5c95eeffe36b3440fa -2276ec0e4f99715067736ff688c881396724214099c6e2f821721ebdfc68f16f -936a7ca1cc3745ee9b127fca1d9a338cb602b03655e8de2111ea1371808381dd -3190a5ab16fa563e4a71d2499e095eec2749e67e532583d7bb28c595bc45c665 -f14d206480ac3d562c7db8f3314cf070eb696fc952dd964704f7705c58351736 -2364b2b1017c71623027fa35e90a24d7f5172b16fe9a88bf97e05576e582edb0 -8893b5e2465c61ca3157432a1ffee7512e94e63060b4a5c43d8205da43c6f75c -065dbdbfefcadf13177c2b77011e121c1f5d19b6bf1fa1de2a141c4b6210ec1f -05dc8f30bb9feb6d9c22d6aef88aef4ce2c3c9563f0b0eb391cfe00df55e2e68 -1ea1707b2f0371d7095f718ae3bca6c483598937251cc43209701e55a0fec0ca -2a84abe42e58b16b19a8cc1875463649b037bd08e0f3af1dd70348450784e46e -23aed8305e833a81740513e494ec2f1083038404b3a79b679e530d8e1cc833f8 -4fd29391aea36d2b37d2ffeea00e90d50d52fa2d9cbe5224bd19a4bfebfd6d36 -04c250544cc529026dd473b7e906cac0bfd8b106953e4801768dd2f21a12b674 -3dc8e9ea6e662ef88cf8bce0e34f7a88d2401a80ce26d44b0897339dac523c85 -3953cb6a3794963e5cdf296b979a20fb69a20884894c05e38da4d3097da18417 -8185f72ca9e34e0b842662d9f51c59c0d61579414e44f294be31831e7f806b48 -a9c60ccd6ee051d4d29e406c6092f867ea3563fdcdbde1925fecc354ce0ec01e -281d1b4360f3ebdbcdafd217081557869c8618ce923ded375425b9ce0a1f4a33 -eaee378ad6a1177df9432a2f140d5131bf576271a0db8d1e74ebdb78cde4c193 -a7f2fd5e1783013db6401acb51b108f4a71b16c9cf57ef903998163e5201a02a -137992528337a595d9c17828074609b7380f9ea731edb55d4f31c542b522b6c6 -ea2e25c8c562d392317318150d4869c0417be8f5ee48600dee3bad8076d86109 -8a2a3b62bd512b4bcd48916497dbb3c90935321ffc39b457220cc32348a2d2a8 -02547d1f4b4d4bafa402b8a7a7afafbfbd3207b046a576e3f039643b325d8474 -1d1d156f026f664f2cad54fc268f41fb9ded61b9ab9dcda646b42c9070f40635 -a46dfe209b72eadd40049867e8b15bb0a927b1c51c31ea74ca99c4b06322dbc7 -1da693dde3e686c7494d7b49701e8f2b8cd754c30476cf9bd5e0d5af5c6d99a4 -bd87f1b73c25858ede3d1d82710e3bce544fc397a91cda4604e5db7ad2d6460a -31bb35c9ba6df033a70ec0c6f601873d4c6a3d14ea9fc616786920f468c2cd0e -ec9d63e8d085d0be593d8344d989bcaecd6f770f7763e0f8f8938a1a26afda38 -a79a1a0780ca251ab2d9b11e33e394e4ab7bb1f459e9695ad88ad71331277094 -5d3d6bbf673d418761ac787ef5159f9fed9103b28f0d5d86c4aaf4ee462228aa -24bd59026dba7831062dfbc34276c5bde5eed1f7091a216d155ea9f4d9e1e4fc -850ef02f31cf85eb5c9eb8d4f5c55ff4147242cce03827a0c60abf2a727981b9 -9891e361364bbe822a4a5a88f52328ab182a459e5856ef9edf6c835111e2b91a -04d83ea913210e40015d3be601c0b43e2e677d5c9cda5a3d2c405b67095f3fdc -f973bdbb333d13693924369c36f5ae1117bc90d9624016b22a3d6f23a80577b7 -5562f3d48655db8a537bf3409b92d2bd3b02b1aea544636a6b2856d0a1a8debc -43bcf2023a54a3cd885fd9ee3fda7f3435a911c9103f101a39b5a3b5166eaa66 -6a348648ccdc9116fd0167dfa044e6f3f73539fa3444faea7a34b37e49c34ccb -3851f03148c78ce454712f42044b159167701fddd5b664196666bfcbcb7b0b26 -1fdd85134d0a46fe319cf381a545b577d523894b7492f632c944848ea6901adf -9deff2feacd94bc30f6db00a591cefe205390e32974b78f82a6ffa0c1e746ed0 -430f333fb242cc438e0e107faa0ca1a4073224fbdb3af21f6926b6c327f14bb3 -680282dd37e809b2180b112a1d686ed5beadcb5a230b890a30ba2832c1d08aa5 -9a6e9321c362edd0042c1483bdba5ff764a474e6254c16904f76642009c316a1 -41e3c824949a766c5e7067f9eb168a2f152bed22acc112bfdb3162a697698f8d -7eebdf52bcbb14ff206de000beb437783d141f93daf468b1a6a62ca6422e0d3f -c51fe03209132e719c3a7dc6a1aa36aade44c9f9b867afa34f3c26129cb619b5 -01ba4224c7ff90ef8b69650045c57d58d37ab9268abe8bb62459917aad27d939 -69e9c089cc4f417a679bdd99de84a400fcd4e388f4f156fefb6466039fbe72bb -3d05549bcb90a7ec0c2c3565801b3a7a437615337c8dca761d83a7644b04d4da -e67e00edbf2b3139c40dc3d470f8d476728119e9ab31d46b3ff3d6e34bbf6532 -62ecd23a9ecb93ac3d2498f63193ef72d192f98b05aa779b5015b6cad18fd29b -421a17e01cb394d588e37ab7f986e20e204a0f5fe06224f53accc121f112d58a -79f25c60a550a1b325bf33f568d69ca9a4cfb249096b8efe3b43cd703db80fa2 -0bfdfd3e01433f2f69913d13c1d14031545db4877ac7fe4f562322dbd2572cf9 -94b7eb300f26c3b53e75b02b5889cb0420f378a55c9a9b6bba64ce698ceef061 -349f8eee5b3a486870c6a11e9e3ff3fa00e3480610a449c9ea48bee511dda6cd -9ea3e4653dbefb8224bc55a02f77bf16e7b9879bd9ac48788e2fb2e237dba707 -fa90cdb918e02cb6c3e49925b60e2a05a71546d49d1bb161ea5ce6d303fc1876 -dc17e24f47344fdf6029f63d8fe1cc789a7753e492f5421c8b7ec7b777ec3497 -4575b63e74fc255ec95f3a1e93c4d752b42fbc1b1b7dc52b3bd4e33102046fc1 -e16b7ee6fd0411727965c75de86e547608807e51cdc1e51b76b8f9ae0484488a -7d21cf0f3b7ee73f691fa048309c990db12036ec5c299a4eae7411759dfc574a -c321c443af71421b7ec71550348ea60512975b17d6ad6a22463aabdd94befd38 -88ccf264e94a723bad53e4ee0a32245aea16837b570ba36eb70a0414695eed42 -e02948c308e22fcc6d2e1bf714ca662f615aa7cf0b71941fe08fd416db23e1a2 -307575f66fb214814bdf38383587cb14f5096241a544edd522f12bfb4864f0bd -989068be6e80b36c06d4a3609f45a3f249353225d7b0360c438ff0e862a2f29f -77842f954c289477f1654aa13250611733e6c7c531ac69fcedbf29c1e6de2d5c -edebb77f51a6ea25a3fea286986232a2410240b9b7f31ba31a59c40a5882f794 -832097dc9cb0e806db71677341efd5244c8c23a520c8267213204ff5f13e4bd9 -ce3e44c9387c17161ecc5d9c9f40b8dc4e6a16d93f833f07277e976ffb09be89 -d1fe74c1c6e1cf5e21724f8b83e70fd0d4ae72eb2bcd30eacb81710ac3a308f7 -e138c921577a06c8ec7293ac443fad6fd7a6a1873c09011b29e0469e411358e7 -f5d274a072ab9f84f3c5c74c7dd8121084019d89479d44bf25b47c248d4859e9 -c46d6f0acc65a9e1403ae66e84ef3141d688fcf71290cfc65eadab3f43474c2c -c8ae995be0f19d7c0f8a3e2d3e40e2ecdba5efdd8f07981db3fdc34b3d014039 -3d2cb0bfb72e821d01bb22f461cd8f0ca7254cb8937f9f228f1b356c0eb3f522 -8a9337aa9e0b24d3bcdf37b2e2255a8df12b1b343f8df33908e6bed58d5ff638 -584c0c4bfe04e43a4237cefa6cdfaee5507428543ff220a987e68c769d0440a9 -d4a33739e9072bcdd885c601dd30771d731a7c57713bd4b8ccc0c3c188edd8ac -1145ceaee80b1bd2ca85d582f05799bccd97b8547cccd71d10892b1409f2d672 -dabd6f0be7864de89fc66f758f120ca8a7983688e0b05283b5371ef01f2a68b2 -68d9fb855d7d7238b971371a8ab5f9d80e151c132a377d48704342146f9744ec -d7ab4453d258a8719b8455ebe73d35a9f70dab2fdd5d41d2fae8cf56146215ba -3fba4abf8f98765c6ed70b6ca8ab6e28c61611741eceb33e6c2958db40202f25 -8d78853a789ff3ec7afc19e5348d8422f6a28d65f2566d046d7b74973685473e -5cc0ebeba1c944630042e7296d81ac8caa96238bbc09f3067a7d3bbc45b27431 -1abb8e4c580de95be79dd7cda3903094a88fde6a8cfe77633e0481b2e67ca61e -2dcf7872318e63a4134c0f98a472813d4fcf98dffd30736ecbb4facb9c6fd915 -2461f90b736211e0ab68d5cb662be0b511a1e60132f7969dda9b229091286f87 -ec576661a94f818b99dd27ff65a4c2a3c500ff9cdb4b7df109db016ecb5a239a -4cbef1d443c48703f62905ea599b82f76be0fcb01263eef1ef411c72875dd0a7 -a5157265ca3cad3d27f9f9c20577a552e59910187a9d04f4002e07e92d8f5929 -fff98442ffd6d3f8eed65f2c2be666aa6220ec4e18ffe0d2f3daa680d4f27044 -0c3ec7971da783bf7928f77cd7dd11ab8528a390318fc0572f13a5a2b20e5ebb -1daa9df821c0cf3a34258dc56f872175f1d5d8bdf14478a19b53e278cb4fe83c -527bf56a42eacdf193c6ee25337cc2215016a7014f1532df6711d9b637a3d500 -3849a0881c778c74e8e5a47204bae5374afcd1bb8e901bf2a703c5cda6df6915 -c9a93eb94d553d50d3f178eab2f8d6338416539f225964b688bb649f4f148737 -410ff38f25e56ecf583f62f09985f94ec048b8b460de00e58f4f238570b689a7 -ab307b7113814d5f3ff6cf280262acdf7b46aafbc234ec32a931399bab9f2ab8 -b6c05b23fa2152c10888ea6d4e44b44e65721ca646ecae52a79a532565371f14 -1940d81923ad84adc5c6a9f2d1d1efce1e53b5907122edf3df1b69e2d9a87acb -303667cebf95dac21b053fbd39511df938b33032db098fa64fc7bc6407d11be9 -8402713b6bbd9027ba62baa364ea172aba41d3cdb8c6ffafc5468f51644b1576 -84bb51f49fb04a8a56a6cdff871b78b413d8b7bc595bc8e81e453c36087db7c0 -92ccee99d0d3f8ead6877edc5e28210a35dcf3cd49c594171e2531da1536f451 -0e0d51ef1760ec7b1fe195bcb5785c3f26d3c3cac4989c66f6f75a675ed97990 -5621f8b814be502c4c8a940bb6d825e27ca6633eecdc0f1bf725448950a37bef -6abbe0bcd5620ef0a66a736b7eddfaffdf62796577a1f482ec4bdab07024afe3 -18e92459fd61a4277b5e885c50a825e94ec3e8aaf4292ae4bc9499a00ff14c6d -4f742615f0f63a62f273218da051f35a1a429e1b79be5926c10c5a2ac38ea8a8 -6b055407faf2cd0fd6a6b16f847d9ec7e911e436d1d597e012cec5a08d98056d -63ff4d16365a9033251e8dba1ee34f7359fb1115ee681f78a0d9840fd88cde7e -e4791044bc3618b646af915e316d64bfbeac1f6c50cdbed248261813749e1c0c -f998383bc6454d6b384ad69f9a8833860df4d66f750fd45e36f9aa1da976e55b -0b06477f3bafe5feca828fde3a373dae7c2c029f2b2c4992d71ae4fc1804301b -35ca5e73dd0a354b53d1c74531a4c860ca8946c9c05c93483c0f315caa8d791a -afa03fcae03ee7f6378c9ae14cdaf68f002c3f306682777ffc83abccf992c787 -425f604253359ccc2d30361ced2137d2f825eab125a9f4411453292afa0a5228 -e5b6b4b6cdded786c3623f8d02bae3733a72bc1d1c5d8e6ad59a371a1769512e -c26ebbb115291652182bc46ab673d016ec0f25487607fc04adfc072cd084e66a -2d4ef87343c42a4d94cb9bef449af70bac826c0688e26fb2978bc71dcd25fae8 -c3e2d96e8812f882fbe9e0962e1bca90ce38a0da87c42579b1cc21c117ae7533 -1016b8827a466609f215fd6b6b4217beca5e741118e7f77600e1ec593fb3ce2f -cd61c7083a4c5c9b4dc9babc7e573710341d678c527068533bd6d38d9d9c17c6 -51ab8db46418ab6a794d330c7d0c2c5f4d8e6e198b47ad4410fe1e3dbf9ce038 -0d82be729e3cbe262d2bb7f05f269022fcf6c89b204288de95aeb246bdecb355 -341eb2e622215e967abe6b6814e4f76f6dbe972688d7c2ceedbe858b96742122 -8cf1718747cc0b5ace901b98f4a99d7fbc8e5c675d78f0e822fea12e8100b88d -5f8d86c5e048d4d33942bfe125d27f2a4cf26ade4b16d4986ce4e8464f7fd90a -20a162991146ec48522d334120d140e31bc5dbc0c038f3ecb63ff9a2ed0efc3d -a2d7c96b19d6ed49cc04a54f33d365737297ba328e3d646cd0390ec55747bba5 -248d44e594fa8389c72aa738a99dc4dde351d381d010a0f5fe48aade17f62958 -773d1d8500819db54d5f7a21a507f767f2ca63c5ac7c08fdf71e65aea255b971 -f5c2d65dd53d9f62d85be99c8ee05bd698cc7abb7e596ff0d11c51d0534dbb49 -2b219763fc99ba557da54c10bef24935e45364d8cb1ca2471bacacd1d67a77ac -ea885796af2cad89cc2075f3b8bed21f9b56d11d21561e5752289352227e944a -76f5fd44513b79a03f3639bbf8d2c7f4b8fef335a20482b0a3b401923458a4f9 -63f1e52f94ead00d13a5f0fbeaab7826cc8408635b28378899a05e4e390490f8 -d92a93eb8a105a4116a86611ac89f27d946e52ce39eaf255fce513d2b2042e66 -618cc2bc91e8c0128e8315624acb66f2d48cfe637bbf27cee5d0fbaa4b9f99a0 -ebb9f9d8093c08bd4e067abed9308ae286ecc5b0cedd695bb863da43eef448ad -6ab3c9278955e9c1be2a059ba2524352a720c49e5db9eb8d06a09af38b957f78 -c686bfef9f881d906e5caa32e496939359397693aed22c868b2a0872ffd968f9 -53b7c508ae04f706876bc1e165c26abf7ad0cdbb6a0176df1564d7f7cff2359b -cc151a058c48d429db6bd161b8410082d3ac53331c4b57a527d18847ef744ab8 -af983f3d22e35b8724dc460d0484f6e7470316dc9554906769faf9e1e070ea2c -816a9c681e3e00be2a1ab9cbddc6a43a96aca4f4e7359c1535e1e88e4f360569 -13d587efe19e00d48137804dcf153719e8b7b80ff47c0c007d80a1c6a1327d17 -bdf5d8c0c72626ac7e5f569e12ef87a2e142ee2261634e8210f72d92f64e34a2 -c15f7f588e78865b3d6a62b0c3f5a3be15c0754e400d62e7e2618ec5a93417b9 -1a079de49906243fde354491603335b4bf6daa0798b51ca307e41f41baf0bf79 -490f892cf47f2fc51560023dd15049526e134d67f48181f3751305c34ee200db -772cc0dd679264b45a99f5d30c7e893faeb3906d243a037e9baeea613596f222 -172033b01edd18c94df6641f049102ced150c535c70d1c4c66805c5626b52bf0 -9a97e5b539778a096b79166a592e0d5bb8950f7d28ff143f99495cc7c0778405 -fc7fdd349cf53686572f89219faddd5de8f3ddfd828f333edc15f3614f326975 -c9fe749a6a2730670919b4276eaf9b482ca96a0ca64af391696a78a377fd1010 -74a90f73d9895c89d4008683f0759813a61714269f67b10c082843a92fa97b55 -d2f9a40b8e4156f3aebc7fcba0773e00e781b80b07004e5b20f8c9fe14e7df67 -12a64ba22cb262799c84746e45f3f41c4776314c3f4a0b9d7eb83feffbeef166 -0d4590a43a9373c08942f46daaae287a420749f7046742e7b6e15ab3a04d2b97 -2ae73510f57de8d24e555c438d0953e1c41db9d6f6c12d2ae784af55f696efa0 -24b5aaf5b3e20cd6aeabb356f33b6b93ba8cdf2537f4570332c0dd0fce1cf8e2 -ff3cc038ff272b1df339cafe3659ac4541f2204e934a555ad9f1e9ba83148113 -8a8947bc49b9062e71c202631cd8c856e87cf08278f9fd047325dc4be74ede82 -42f483fed616aae2d6a5dad1e1e83f124dec374d57b81da43a0983daa34af7ec -ddec60dbed7ecac68409956a0eaecc110145ceb8d99bda1a766c2ade43326b29 -cd6bfa4416d9e0f2153f4f9a969b033087e152ad9bb85a40479fbac509196c99 -a4f0841449eca6dcac1b9f9d7b26fdd6f7fbcb3cdd32b75091c5f96b3bf114f9 -610343ed284f5658752aac710270945c0a41bc3ddf3bb0b21448311e9331cd27 -06364e3090a1265a17b1b424d03b1e950c824645e11ab766503b0ce70415d410 -afaa5b33eba7b498d80302fe982d9778e4845f3659254ea382964e395d4d0341 -a9feeda8f963739e10ccc58baef8dd49a1361a0cf95083559ba32a8e5426c981 -42ec2e925e4b382d5a531912627eb2a0d98a25fcd540cd5fc6df156d4a5eb1e4 -14dd84c16fb9c6945e7920179130036b5f05f6e283ed715306cea7ecea13e281 -fd69e9a93b2bdac310088ca3153323138d52bb2db9d272b6ff67eb59f3db66f0 -8d1f6ce77c4519977721aa8f532006be856b00b33369fba6b980c420e34ad5b7 -810122ec90aad038dacd3db88ce061e05d12ffe44066c1671738aa913836edc9 -3ab7e596024fb3498a29e5bb543a67ed3e14b9eb13dba247325e70cb0e1fdc5e -b3784da0415cff2b1a089779fab42debd53920ae48556e4f906f92abdcb35cf8 -d53e938b1ad434904aaaccc9463d608bd4dddcbb781f44b864e1703813fae91c -c0b148445b88e4749cb9f52e8a6b8f598d754be58c22aa33d00597d22502a71d -c207d7ebc4efab16f0a9c3bcf6f888698b443779236c33358ac4fc59c2f5ecab -3ed32277fd98ba68be767aacc6abaddc7755b15c62b458a66086dfb464f6c7cd -adad1017b7f4f14d98ef09f0c709ab6c529d19afbbac325ccd80d57ddc19ac69 -57f50212f6500e4adddb800bff909d6117961e6a1bd8580fae0e33103618d4d0 -ed7af5d04ebc3388821c121ba2067e10816fd1dc7a75dfc98106c6e9105f01b5 -99e845e0236258628b904df5441abd12772594645537c75b20460c48b5f21fd0 -2f73460068ec2574fe6829d86d6958a91a588ff609f3c9bcc2bfd3d2220e4550 -3d0e5a0fc0a837f73351be9752a659fee027ebcb926f5ede378f0bd10cc567da -8a829b235b48eb7735919563136fa1a79f99591d431c768b5867a8d2e69e05ad -4f5ff1e34e6971eb4413328c45f3267cfff49e498c870cdb50680ab42bcbc34f -c836c1efcc10e50a43b648c88a7cc7d703389dae2b835cbd5510e1b26d4d436e -5f5ff8f7527c1519bcdc7bd5fe20a390f484db9ed9b91ae7c4f03dfb68b1f204 -5118f5e814af4ae832444f60827aab48a9dd05ecd39dfc943775463889604a74 -58c324cd27782d8bf4b3017821759d70a344eb605bba453527aa7de48be86d71 -c3477d99f41360c647d103666648a5ca008af3e1d5cfa3b40ac10dd1e79b302b -eff96c18bf92a086103a9aaa81e55d1af9fc36931952a736bdf7dc57354afcd6 -a964933bdb66423ea58edbf68618cd5ae35ec562f343c5915df0551e54888e29 -5c86cf31506cd44e8b3224db4aa472bd23bf94e1384078713baf280093460a52 -fd49cec5c2c29d91bf98064e53137575260c5867e73dd117e814a1b2aff8c497 -406a5dc5ded79cbe50fd30846c34d7841a850bd3fe132bebd9852d9b2f1d7726 -559e1cdd292bdac58eed6ae15d3f17b4ad0cdde87b584b190675d27b5fe5d0d4 -71f3040390f6d65937c6d83dc34ada9dcb8b2b401cb1e5396505d0af8c33f113 -518912b0b959f3c2e8d208e1ff28951f403400ad78ac0e4e1456fe9af63303da -adb9fbc8e99ed0a02d960e54c39b3c27e58198d01e358b2336a4be0eb99ec566 -73d45d79e6706c7304c6982d64c00432335da50233fdd28d4dd03851cb8aee4f -523bc43b61f26affdac9bbd7305d389f508b35072c30be43147727dad9199881 -c7044b0abecc5c64d7d3f13aad67177d34237ab9f8cd77893758e13619efbb0b -67315237f63312eab8e1ee1e5a594ed963326bd2c6d54c50b8ee10538b4fec25 -16d138109d2d48849e015934d7e32a192ce4abe5156402c3ee8a3a5d502ce829 -d40b9c801b78c024fae15b5fb88c7ac33028235330da644482c0a22ad5444ed1 -0f69b227de49da59eac7aefcb4ee7dc0b5d1d1aeb6394ae1e0d9e130c1b1cafc -10787eb5aeebc4e7235e6f5b1a991ee9a4cf0c0439025eafb59959c32604a640 -e9007f46f9136026d058b594b796e6747ac3cb6b14eb61a1d03dcf87f05f4edf -e1c6c0dbf6c0618f2ba9d1a690cc811c28033815c699441ac4055e7cdd9d2b91 -b631f7c3ef32648d2ca927186872cf2fa646630d4eca09162ae9fbb00d1ce3c6 -585e4cdaa971d4b7d4ae0d5f8db5da74ad58fcc9e3378e7b2d4ca0036fb50611 -c98fcd020027cbe5faf311ac7a05af6039843af9fc3b830e0a2cea945eea5396 -a5dc74a465a0b6560b6663ac69e867925fb1a69cb553aef3dbc53d8a631e87b0 -0d48619e77de39aaed7dcb68a7a4108ce2225010964fc08660d54d73064d7cc9 -c7c6a2d12d7f5898280324a90128e4d0730ff35e7b93bbd350669297a6214df5 -6a775a5b7e73be6a972896e05d423f9e9798622b632d215812e911a93bdb0ad1 -3c5f628c4ac5704cddf78d3272fb1225bd4e12713557a403da937ea52d193726 -dc8178766f4e739d2e95f14939270b6507f35d83e1fad6c821ea1dcb5eb2a3cd -be3870ece243b7f406cd6b5cb1caddb1b98c32ecdaabe8672dabb042cdecc286 -9e895eb6fe13df2abd25e66acdf07d402998dc54815386a3956cf36458234147 -c90a39e7101e4bf2186153c63ce96f3f34499ae1e1c234a3357ca2ce163106d7 -94083eb36aaa93e85e1676cd94259e173fb6ac65d133b16bd1314b259315c462 -56f294e37c763c5f16af239738efcedc3a6bdf8dd79b34775709ba54296899fb -e9a316485274ed8363da0329ad0f41c62cdf48d7a25ed45ac95b5e6a4e1bbac5 -6da304edcf14c008e3f0d306c7f845b87ba80db258ba7881695209352f41d78d -316017371a32fcd84bf788b511afe571f71e217c0dce3e04ab749d4596d0d340 -87540d4730c013796215caa073a1b99733cb7121a44e22e4fc2b1c052798acae -0f086dba8eae791662949a26eb35613cba94ac58e47f4b7b953ef9913dd2c535 -37da9c1cce1474632288903c95bf7bab47f056b62d11401abc85b20b66d0ce72 -545566f9bf44f5cfa099b66ca02a728afb9877021ddf05c1245849dc6b6816ea -b3cce3e604f604cc7cad40b2c919df5c92b356e0b81f6738a8dd7469a1015a4d -6c5c6decb0c3eae39b7b3fcfd482d53ce5c171c73e23aa44ad41c062e8c7857d -e8b56561cdcad550c6453c755e3e081273763f4e68233213a4059f6363f55741 -973356725ead4dc6398d1d6409ca8d49cc901f6e9958974a7ee5c02f9c426f11 -f29b54c316daa3f1d66e0c9ef73624aa70d23c0f15448cd295589bc2915a6a6d -616d77134382687be88b7c1b9c63c0e695de5487a5a5162411b8218b1174f035 -216716b67f01661902287ae5b384b916d2c1682e2a0664600ce5e494f13ee820 -4b267bf8e863072bc11bb5e4506167ede7aba31f58e468d3f60cf5bd5a2a8721 -018ff213e5c84f672f6f2e651c4708a4f24c0302dcce4614233ac6f540ead177 -7a1155534ea0b6acf7dfebc0c6dc49fc9692951f587cb8c1cf3293328df7655a -d82a144d193cf8b9a274d27c22dde2358ddaf79400a7977a1917fa10f445eaa6 -260ea56720e322abeeb790731031a345c323b9e2e220e9e9fd0d121475c6a7f2 -464252ed44f00d02181f1a5814d682f28c692f969db1d834227cd4b539539ffa -46be32ad1ca3c9b4b337c64d3e61fa5a6d7dc29345a44d0470e564ad61cece8b -37595d7eb3c0933457be8f73758d8d6f38b3e843c8d049103f5193b0e855d5c2 -df1092085c80154c50fa825254dc1b8a895e0bf3f681c2575bbb2b49e64a3c3e -77794024051769ca5903cbb11fd3333656c4eb07d1d366d656467df392bdb9b9 -373e38deb2d83a9eddcb2699116e15b9d0da679aae82655eb917986e768788c6 -279d5559bb5b104b829164cce27896027913105aedc252cd0bc68032feb026c4 -1792df669bdb1d4bd94aea620cfef970e8756b258fa82a9eb86af25b6de4e5e4 -8b0bab5d552326d8c0e6c57783935d7f0cd66c078722682bde80af3645d4a9a7 -ef9aab474929c1749186c309347db0a5020865337542550397b2020dc666b333 -9ba495f358ab8d0adafcc5a3cf7014ac94b635e2ba1779bd0c44aac60cf3fa4f -ecafdc876bbb528cafaf4f577266ed00509dfdc52aef8ece25912c04b8283f6d -a8cbf712d5df4bed83702a76ab73d0adc789924a600c1b00761b986bd668b6db -3de4008316053ec633300ee2e3ef9d0ccd3e2e5ed6a829ca814c8d127dc6f618 -d6165639c5ceadc8ff161f081a019def0f888ec6ccf12b69502a4ac2e802546e -52600c91d51e70bd891c5ba957ed3951d84aa76f6d2a1a7198965409f1ee699c -08694d9852f4a97839956d8060dd6004b0df827d6daf19325ffacf8773f5a14d -b92eeb033282a681b443b54f242016dac22ca7388fb8d00dead2af7f39fd58b6 -f109bcbf96c58e46982148c86ca3bdbf8b61e8164b08f992744c67c636164fd6 -2d68c25016e9c672edbd444e058d3cd9154ae39993f1d5f319d58991f9bcb03b -34910a12bbb597c3f871244561495f5d94b92f3c6b5e1ea0254c7f989e033eb0 -de0beae9676efb0d75ca0ec0fd07757bae8caff29bf2e1c0098e6d0843a2bfa3 -1031b383ebf4d12c07f1e3caee0397f7528ce5eb04c595358875d2872f19cd45 -7b41ac5dafcaecf120b2b11c0f3e927366e7a73bb033845eddabc9c62e373117 -de6a7e7d6895b6e6972d6c36634d46d55e0070e82f96ec375ffebce8a4e09818 -11328206eb0f4b66e0a8087d0145c1d10c49710c3fce4a5239df90d0ac21a0b1 -04d2505f7b5243dc96d4912c9dee3be9dcbfd9f7c2a9c8886dee4c41c58e9ad4 -71836d2e48f5ea7b0fb04ff6d2ba7b8e78ae70c765b11939aab939ec9b9a025c -f27923c7bd0455bb858ac6f74baae573b066943598c3eeafc7f1bfa1b0e5fdad -cc763c0badde7dd314d186b413216fc35ace73311dcf84d0faec0dfb9483eec8 -895fb678dd36d56618c3b125f7ff3b20f7bb8dbd86f52ebb08bad2a73ed6c940 -44706ff7ff263b0dae915e78cb36345989ccf84063ce6047e93a2acbaa983182 -db3ba114d80fecaabd2816ebefcaf0dc6eb42fb47b3d2318fd557cf96eb5201b -b0b265bbb77da6922fbf9184afe896b88738ab3f9ec78e711e418275b101f8da -be795d094d3b2c5f1c5e01da37b4e5976cdfb56fb459c8611ab2cc9081863e48 -eb4515035709f715f99fd62abc2e495cc8d4f8a1becb35d2126ffb08594ff4af -bb82f793854d96a50ff37c24d198f533c348f657ec4726ffb648522893cc36df -d25665df44ff0d6465ab46691fd9445cd3290cf2455618cc3a52d8056f179be5 -649a1b17bf25108f9b5b5a3eeeb22d970d968e25e20c5d4e503ece7bebbbe696 -465191dac3046b7dcd8c3824836bc6ace208dd60982451731e82aa0e85b2c6b0 -af9b9b14848146b09c64abbd9625f7a3bd7b5ee015c8f5edb3755b6356c37301 -18bd9f49bf060984259ae5d7fc6f3ba6f3ca2223e0782444bcbf911885a0dc77 -65d705146b91ebbe0cab032ca8336ce9133136ebe740d0a126f12f43b76fbd35 -4c09f5a66e3bd1c295a6034187e0ba7f916670b840f146d4681d43e9ce18387d -70f44aee7ae7bfebcf588759213263a8a7c4c3fb7c31e890f285f502c5e88963 -964556caeac1f31b8975a9537e40c010380042359200b4a951a9effbaf6fcb28 -1fedcd940e10ceee8f3428f1e00eb8b1626ddc9c6554a8a7ef2e87319f3c532e -afba30b322cc358c2ede14a5aff1ff1f835963929a3f396361b714f352133a81 -406515004549a91a192127406bb9f7a61536f16b6e2b51dfddcf0f31ea338259 -a0ba5126d1459dab06c8ea7d88816b2a750b4e4c6c45109cc8f0944f4a42371f -383a585be96f72ad5884e8337582329971407ac1e6fa94d7faf980550004be9d -a86af226e74b6b87ce02bc9949e3edddcfe0eaaedf502e649122829a4b5a0a96 -baf1aeecb528b092ba289cbe641e2775bd74434cd3915082c4a36a898d2a0347 -6a639cb3665b8621c9ca4b633e7b5e7fb699c39d2fa9583aaa000b1b3520661f -398e43ff8ac75221bb92a5a19ba43def0c89b9ac73f936babf0c930cf3f22eae -373a4c86e6356973490e17ce7163ae33583588d7b7d7e9d3ce84d68ef9c0b524 -8f14be69001dbf85b887e902b37813eaed85fd1b8610e2e964455bd3525f1e99 -c8bec17ae486775dcc124b4a3f2acbf05d6a73146ff4bd922a07022d09cbde83 -5c4dc2588db5720f6d73829b6fe92e592679efd487ec842be2a87a503d88d397 -36bef70dab7684f29558b85bc5ec75db196967063d4ea3942d18b6bb4842202e -2ec18bff6a32a85a82f16342f1c8c2ad3e0cb12d4e61c7ac250f481725256c8c -c7b29e35caabe5a130fe0c917b568453805ce48c7822f8323b7b6bde5450065e -a4a1a6c2c11adc940d1dd15fbadab619b677fa1710eb86cf4d7d7b0c543bd182 -5cf7a30310c18c874c8040e10addd57de7c326253c2a9f550bce08565de02526 -e0f014a504529dec9086aa674b94c1e0786982849905fda956a2f85fe487163c -c68a363c2d44a3300c0364d66824f31dd0f11ef7fa7553cc42fd8961baeecaa0 -edbd70d3f34363147328b558f8247baad15c994d33fa696af72ac2a0c8347179 -b041645dc46262a64d3983c46a3b460295b6afd8bb2de931bdb27a2e94f23553 -f1f87c2d47b88755575e09f50499d1cd6387c16c11399a6b4bac761e80b97370 -0d4d8e3d599119446c9de410e33aa6d5925e8c4947533bb2709b9b1d4d0b96e7 -4012b9cb27a8e1391ef72870058850227748afbbc55a03a79390b98aafc2869b -fbc9ad0d171ab701befe311c559b3865fc0c1055b3e8e881a69fa630efc7a431 -75af2b55c9dee9bff2beae961861e45773e9e37735859983b9603008de8d569f -a9a19016c9d9f101f64c345a4ed17113dc187584c1ac1cb7577927847793c8f7 -0c544d329a753aaf47aaeb5e6550777080224c57fa44a44ce4b16f7ab6a3fe74 -368f6c2d0f8df4f3ce6b762e43645ab0996894b358861c4927c45fc1cfffb7a7 -52cf9ba3966f53f00a3b26a394bf92094d579552f79ef2531e375876e52a88dd -8222317318357ffe48d43a58229a93e7d6113dd47043efb48c85714ac19da484 -08000c866b7675813786229a16e5789f73c1c16b876a790913dd2cfcf92f9c5c -31a33eaad8f368d6531c06ce189e07e9f1cd61aaaa3f8291a61311481e5ebf9b -a45feebff7bd242fe2f018aafb62a4188435c46fe68a7ab09aa8c16b2fca9892 -0b9a2d7148603cb336fbd6b08eaaddb6eeeaf325d25c50f726379d9de1618c36 -d2a1034a29fa981b94220d711e6ba5dcb5ce7ea16d7ea03cbeefba5dc585e5f8 -bc032ff17febb2879e61c079f9b90d0a0b6eb537480000352a63ed828370467a -c526f861c5cfc6e53e9a83077509573239c1d5a349fd53638689132f831ba29d -9963a7497c2bbe933fb653110aabad3629e31a7cb3d6d3875b45b7bb8f62d740 -5a6ecde413d365ed05e7de1d2c95d46783a8be9d1b61f24191a1119078283800 -deb44a0cd447d47581972001497fd5d9972541b6ba2ca719a8177feef3a19097 -20f082c42a5de8a071e16e1bc181e34ad5018131127fbbcda2a9ce8b9f5eb83c -c59c96bf0562e6916be9d99779d8d5294a04aa19d8dc839caa42f48f770f60e9 -18c593242436bd1dceebcd354f77e462fc249037b0fff2ee093a799010800ea4 -8da10c23b02dc20f3c3682b32bce8d7073c13f20ac232a6a42a4a0b5e995b197 -1fdf05dbe37aacc0ef62364c466817274496cbc8686650d480054a10c8105ee4 -47e2347c5cca657dc944fecdec1616cfb16ba4442d08d7f6b8cc69b38fa05211 -3213e8ba2990bbe7e3836c167d2c8fb126fb7cfbbbb28d33058c595cc6a16d6f -e84babe05ccb4bce0b62193e337e8da5320f29f752f03a92cd843a99bc7a1e8e -b449b0c95dca19b9ed1861812c7ed1f2ac7294d227358a5da798d7dd314a601a -3bbed33797c6d571e9cef4a29fc421d2b7db70a7e92ebf91ee50f0ecf2ff63c7 -38a713d1b6d1c542d5c6d95fa4e9fd16f4d219ca943317baab091d2021ebff72 -0a5a81cdcbf5f3bfa3a633d16f4560cd3cf9bc1df7ea6504a3e3b9377e9869e3 -e149ab6fea0f80287c4fb26cc5ca6927f5219a8379c58450b7525bf017d72f4c -b5611169c7d001fb816109b334060b0f2913bdeaea69ff36286c8fee4bf2cc7c -83505fc4b7dcb29ac97b3682c48525e038e5d1274a069858e5505dc932c5634e -fd115e02d0343b75907fe80d7d8d421ce40ca292140e0c0f3d79161c618981cb -ccc0f9c4545942dfa182bdd45dbc71b8ea1d79f1ef51fa88d64247d4d2d3fb02 -f4d908ffd1a763d1383f7f54606269c4a0a6c8c82a01f8a40951dd141e4833d9 -7142aaa9b0a7e1c28dc578faaf9926cefdafaf084d50573395633ee6097b2c8a -e70a16f3191405adb7cda9ab344d0872482f6db9969cda14b7e70821b16b0393 -a0431332b925e11f44882286eead545c0854cd41be75391e2a537f12c1826bee -fb1e13a9e40995e2c20c3e330c993fc40df42e4c8d9f09dbe4f5f4476bc6addd -0377ff3cd6a5f1fd26b5c23744555720cd7902f34407fc6f57fb83cb095a8703 -c9d70c96c50fb522affda15ac3ed668a70be3e1038125f57edb83c4a8e520747 -370b6131f6446eed8f68177b4d3a06333544969d04bc2ef75b891b943a89e011 -e078d01940caa9e1d4010670dfb80b1847bcf9578a6b6bfad675b65b31f8b075 -08ae31e6d3a26680b9cf228bf61514496fc2c7a2cf0a635be96383466226faf7 -a8c3570b3c55a009aa091fa99f71f8a4e82833428ae5cf0c5a585da9dac86a3e -faf1c6c31fc7fbe4395a58b193311f67bbe598f88ad884a5381f82498aa3a2f9 -448f50a604d9db2c1f88b47aa783a82d6d0d45b2334b4ff48c8dc810751fe68d -b2f04324562caa35c19a80ff56911399f5abeb971b982745efbd7b10edce63b5 -e490925781673def91f3329107936028e85f1f633791181217e239a2d4dfca97 -171812d2614131d19115eaac6550184f973d439d723f2c6b80a5678efd9fe5fb -2526505ae8968700b352599b1bd964ef8391b3380e90e8febad06e4545c01017 -14bb2784abd7bd7ed8fff02a028767a781a57e1ff6543e996da730610fd00026 -3ea263f3c46d9844f4ea67c39701fc39e54b9f7316af609b22171c743e7e2fd2 -aac70ffaf84692b1d25735e95e45699a5e15a86a7ce7bfb7c51468c09d239a51 -45802559023de368135b52f4f299a4a3272c3969de888202bc1e99d1990d2aa3 -96a0e2230c6d2494e02ad04e8697e61e0b9420cc90bc0fb687aa27f85929fbcc -f6484d047c785284c777bc07f1c7f558fdc170fb0495d1fc65a50a33a06a061d -718391e14deb33fd37e7d27e47b8f3c9dde4bfe43866450e86105746d10cdfb1 -1e1714a0b78158517aad1eaa5847b37208dff3bf319d87184b82a18ed20d07b0 -ec25a1d278bc3840614953c1219add7c21998a6be45126eb61d87bfd5d1aef28 -7ff4b2724025db64ab552c28f0cddd89a04beb667988cfd5adc8f7b1ee091086 -c2b31a30a9bf56b671c81fe10db4214fe93f3d80bc6b0e90410e123b17fa0d41 -e5cbd5355c41bb9579e1ec93177d3f6ae798df9f70f9dcc6b541d5f4b3c6bd69 -83cc692c4448f91a730bae1f278d700c45a5ac32c6d5bda96aea73c95ba417a5 -5ad76fbb2c2a47c9896efd54cb4f178fda187dffaf47c89d5541c6ec74bb505c -38c34cfe95faafb26eb9d1bcfcda8fc0617da52939ed4dc5b7616691a7188585 -8de6b6cb6f6f742b4a61836d6ccf60775aa0c5ef3bbf7b007f4e2053b4cab7f2 -23c96418426367fc5a833fd2b1a388f3352c8b390ce596b9caa79b9d77ca2020 -41550303c76625b527b29f0446e1e18b93abd527d537d927b9eb1f403c306b9c -c3003ce36eca033b7655eac10b1c2ac5fe0774574d3bb4718039e498dfb06e92 -2e3ca571282388bade3e55cbd711c20a93fe24bfb1ebe38f0cf7e1627cf8fd3c -d0be08d8cb4ad52bdc53587bbdb53362d31e8b0cec96c7f0bada54a0bee96c1c -40b1d8506913e7edc80983683481e8a3e7b049fd9549f422945ccd41b63953c0 -6702215dd8a1e466ff3e2e9b97f7a96df89d3078d5ad49af9480fc84bafd02d0 -6b61dd88963e9ac75b42dc9b255a1c20594ce1265ad4df4c485b3f73cc59a4ca -767b5f026acb27a0c71bb2e92e1761744882dc892d4e53297921a27510f23873 -91bbc37710eb2589dd6ca1784043f4e5dc2f08a3e1b9dff5747f69b3a6bc2e14 -2257f3de54ef93c57001539dd6779fb97029e17b9ed9672ccdd7b0286a3339f4 -30b78bd1de5730f6c46faa5b7b4b6213c3bc8671839ba50da8ad0e47890ec3ba -78d1bc128cfdbfd11d59d3292b277e65ff1bfb343f84becf9130107326e4043e -514a01e05be59423c44cd4366268650173cf594316bd18f0081f10f72a665f6e -0020b773a90493b5ddaca8adbfb488d5854d1591170347cb16eb4a426dbb7cac -8576f074017d3d34d98c5d82e84d52071c910929e417412dc64d0f5ce06535fc -94c62b61337c5b27f4ca50b4f516775ed8ccada4c3203917af8014d0e01f9f5c -568fa7668c26ea9e085fbc736b2e7c607db5c0e983107283fcd701d025d4eb2e -1efef45b9d2cf08827d53568598104724fd6f025c50c97d182218e939b92fbc9 -42fe6460ab63ce07f43189dd38745a93a9179dba460173bb3715b145b74680a9 -aaf104ab04b6b8c8f5803bc03458fbc3ac036bf4f48894248048f6a81dbd403f -12c31ea4736d0dbca37d0f45a264af161accaa64e645d20fd10856b063f83b8d -079863f4984840b937efacb021d47bc94b1cfb9dc183247d25397ce41fb861e0 -0c95fc77407d98932d08c42f2393c8b37ef6357fefd4d196c4bd6fbc414e18c4 -aaaf1e54feb3d81f6d5644eb5759ef5440207410464efabf54645132e798dc10 -b068258a3be66fdebf1c1d428d3381aea736336fec6e86b56f5a6143f74e8bdb -62e0f9dc7b80323b3eabbec05d1bbd6676de2e2543cd37d6055e88074c4bebbe -53ce30241b46f82f635a1833f41888af3771414bb943353ff865da76e25be7ec -2bcea61a15f180552f98af07333fc03749598ae8f3d37916c33deb106a2c15f2 -1989350f1dc372c831fdd25d104e82f05b7a102256d9f8008e23942e3f9aabf8 -9d723bb624d0f60cf559cef6379e552911ba014f422801b50b15ab9fdf4b3311 -a2d79df0a820e262ee4140bef47ed964b1dc7fd55b81e00368fffbc63814e3c1 -46cf77833cce07d69c7f1dc7189171484ce5051817ae7bc7b980eae9a2b05022 -60b19176564e2d1ceb79cee1666ee85f29331554d11037c8a79a7d53948a300e -b7344a824338cfe73480989a0318ff63a0428c8134a2c754e1f5394ec300bc62 -989d2c9fd52e76124ebbaa3576a735ea45a87d8442782a617e765ec3d3b48076 -a97a3127effd10e46accd9947728a362fb83f8718b98331f9b84df8c270f7efd -f2758c8660c1c0f7c570d86fe15bdec1d91cf8c1a417c9386e09c548bb401ec4 -db99ef40ca62cfd7a0e09fe111c4c72674254b5ae6e778dea51ac7e298ed7072 -7d0b85c0fe154538a90c7ecb7e1bebcae32f2db9016a00a6e3bf5a103efdb3fe -8b0212049f9d79f95ed645ad3d53658f1e0ad84237d3fef48579cd86a76bae26 -eedc5dfdc3ed94c434903a6aa1706dc18b91e782b0f31dbd64358d6ae7edb7e8 -39dc973ca173c564c92ff13e56dc206415198dea13dcf9cb8a67af542efac923 -369061a76351da95da7e2e95fe0e245ad0671dbda13efca30a654c37320b4d2e -7cc9699c634d129622df340923b7eca09e7b5961bb33ecb62c85591365a70b93 -ceaed2c7cc0339799783c1047df648349d9c800bae1443589f423ea385798b3c -7bcc72cebcfd2bf1731a488365e50280ed9603b4c51931f91920df1a96bf62c4 -8282e4046baeced383604f06e310d9cea008ad5765d374f854fb5fc4ba116d73 -2439b37d8e391db3f4cfb4980fd6747d3e86aa425a5b4ede03674f404026a74b -61940470546d80f7aefa98482cac4d8880aaa329129aae1831c26f91989901f6 -72b414ea6dc7d8468d112521f57ca320dc8cd56c9023c496cfef9588778d66b3 -79c1ae217e9b4706be2c7bc85ce7e98c7c58189f994450ac8ed2d2b153aec4ec -ef5e8c68866d27e2e77b7760c8911753cbce4994eb7ce82e6b73e3e3567e2ca4 -4fe75a109a4276a6e7abb0dbd00b48318bbbdca6a7d7dea749995868aba5a1fe -50ba244cd047fab144d67378e0b21a5f39231e7cc4ab9cf010432ac20ee61599 -34fa8142a2166266d0d192a502790ae0af11ecf3c94c17ecd26182d6a2a45bf7 -85e3abc677487bc20d52eaa378ac3088706d9b19d7a52efb495e34e605c00597 -faa503dabff584127c2a479075f89497cd7a2d54d02329b81d01c900d18f80ba -46d4f7e8a464cbe141ad02a64951a2927c8fe8f155cd6fa4ff3a44412a59db72 -b74499d0b52486f55672f075ca1944073cff76df0ea2bf64f534bd3ea581e956 -e102bca1029ea246b1f08731ec931f1c0737cb931279bd51e31f83094d47ac55 -d969f50def8c9a2bdb3e340710c2c1337986beb1e032fb9bebf692a5a42dec22 -24befc772b8641e0de28e4fd6271decdb95156908b4a53e92f732888ccca9650 -a5496641ba0673f9a10c2e8c544e76d33e84d1d2cdcaa23fd55bcc7e2969ec01 -c009f0f7f834796bccd863b7f1528c13ff1c499e6dd8bb4ba671dec515fc9ec0 -81bdfd97a96311893af9e102a1ae63a96bc22a2e8a2acdcf082bcba6482285e0 -bb744c99a227a18179e661f63be26e242b3e0b0fd2ffa982a1c4e7f051a66204 -c13a59e66833ce590439c9f26356c74765bc0cf209c1d89e2893f017bae39ff7 -f01d79ed9a99a43a3f6259abc9822bb01ba93eaf77d03cbdc5075860ed4bcea4 -378285716de824c71cbf033015522ab3e741aec821747bd635bada9dc243e58c -f4d8010383774f9f3a8d75bd5b9b8adb3ba2ae89772743fbb4713c46c30168bd -aecbeff476e0c2e6ba174f9301df9b295bb213d3a733e4b5d82d24fe579dd73d -87d647aa7cc0bb6ad46e4ff01d1bd6b8a8eaa59855e73a6e6a0a9a800842f7fd -86748489e1b52a597f23220e6b1da30a92df4eeeed744f56b5ed811292d9c831 -1863ccccd7672ccf160851630b01f805c77893ddd70307d3cadf4e259d25dc37 -5c0f89cb28b082f9ed1b8d61e52f01b7f66e401d318db7a93943c78e47886af2 -56611c91c11e628f9aa71f7553370a97d2766baad7f9e74a1457fba25b6a2ed0 -750694da50f77e4b3dfbf38af5983499046732bce1cb3f435626de6a7b8e46b5 -04a80d1ef0ebd4ed0780b0ebfd8c792cea07d2f1b7e2a63a104088b87da1e620 -29c2741c5de63cfd9d12b4c5212ed7022b5eccb7df7faf85e1d5c4b82ec55795 -de8fa1e4654b594b83069e0692fc4954e6d0d3fe94cb574fac65ce4ed497386b -16304392ea2defd78c6a96bb53bbac50ef7ac097ac45a902b39cc3be09d98f61 -2897ad7d1325af2ae4cc80716ba062243ac48dd0d90d86de3c88b16b4281d009 -08be72525f69b7b286fe28253c4be746976cec1de175b3aae41f3e56af915a04 -7dd0cdc064623e453db8123d652ceee41b60ee7db30d96ed641ccbdd70570c54 -82a169f1b9eac1e410b693301c0dd765afce2af327825cac271aeb79a9ff4691 -830517e26d4682dc30b60ab2555b39471ccb6f38ae631e7e1ef89fcd1847a242 -06592ff50bfc47c434142997a4b682da77300bd19d65af7d2b83dbda5b95903f -220d1a2d90a19819607c481fecb5921de9099a60150a1ceb1a7723ce8b182897 -14c1c181343ec220b929336bb2f35056706dc481164f581bfb8b9492b4a93a76 -f4227de34613379b40d8682d58f56419b7b4fcebb75e58d4d17bc1bdcc114b9e -9aa0ce37136b2d92312a40643559a8c8a2de53af09cf1bf9f978aea6ca80547e -dc97a08a8677bdb27a599dc6027bcb2060274f5034af37c15d737307bed56099 -8df21be030b0e57c4d03e2cb2e3de42daa26ba760ea7279815e6175a6e98e496 -618cb4bcc6c071dc2cd94774b5dbc0f912a7aa808e8f4e92585d0a1bebf22596 -82257ec17a792283dfaafe2e93bd4bdd75c1bc2190454b2da333a335cdd0dcec -6561b83cf0ccc9ac09e3b0b1e2e108f14b500358f8fba4a4c3fc05deeffdd4f8 -bf2d0cadd592f37933aeefb253c717ede98b3c870464382f1d97043a039e6202 -4ceb9e25a50834e1134b4c553442b5d4e763b2f833d494ff6f4f5fedd022066a -c62c41d32bac09cc0faa9f00cea1ad21ffd7b62580d6e4973ef82a0a88a94ba3 -481cfc5541b1ac68e633e53823abe38df4bc11da9e41b6bfa4671082cd0fa20d -d5aea26151a947f7345c69bdad50c344ebd7d52c13f0abb42669724bd7dcace8 -01a3727f02b2a9c7452c890425f74ec7a473b2f6cddb89fc02063349096616f0 -975b3f1360ffa5162b577d556c21c1465b997795313db5ad01a059d074d5186e -5a039181aeb9281717d9fc71f2ae7c423303317f66d2c145a432d40ea79b0cb5 -eb426a4dbc2548439630bd49c09c3ac56aa8c857658bbe3c345cdbe60786dc1b -aaeea1e8134c053bff0239c3b22d9f9811f0f986d34b10ebad0603b099e61a27 -f5da9d88b88c435ed87c4906de206849f5b4427ee0439ce2c99b3e52eb634ab5 -287abb15154d08932c6c360d85030a92bf8dcecad523c123c7d992f742823af4 -95a83c4fb38407e87946bedfc719cc3998d3487589d773ac6da3078b06cd5ecf -77ffb84a96cd2cca241b84a0d35b0b340dff221b9190c1aa2d6ada767a0cfe14 -7e3428cad1c93da6f3a01f821c6a410cf69fd03a2e46f17a31df33af3fe25492 -c6ee8dfe79ffb29561f92f50c69b6fb2ee2841ff6e3723e18f86fa65ceb3bc0d -61e2f19e9962320aa05e82ba9ec7fa6dda9edb2eadee478c2da6951a226ebef7 -b2fdfdea854e541a449db75700f057179623c32027ca181b1c8dd6d83ebb8bda -521d637b32d7bb0900135f61d72bfc97aad5cd3a2aff218547cb96386023d3fb -9a0b86d9ab93acdae4f4eb855735357b77a24ec5ed31811feaaa2f93d6e4ce51 -2c9fe4830743bd3082f52ba17e2a4cceb5bfd2c31099d852bc1d1d1d4ce92c95 -b1868a8fd559e2950a55a8dd30adb1f0aa7b40c900642e56c958764b81334ad2 -5386c2b94732865805b994b5e9949b7b59fa4e9e27cde175106e944d0466fdb0 -85a73fc4d329efc235f368515bf6a5e9460c9e997ccde7bb4691aa903911e9a4 -14fc8fea294185f8d8d80a2a1359f9707121661201a72e571810f9cdcf792c05 -ab01ae9c0916be2070c264b0baf34f63d78df7cefd0abefca77639bf25c32fbc -143a000e2cb1fba326deca8b32671af989df004e1f355b4faf7323da6cdedd69 -1c73f44cd381644c8d6987161b3a5ed5a36cb698f94970a472a32da1ebc8074d -e29a2d9967f7f3e656db600eb06daa0778478ab53b653d19cbc096e39945331e -0d325d2667226e85f7d5e3442e70ab51c294b8eb95edb631cccf964fb8fdb8f2 -83d6dc2150b8c1c31f7a6b2990cff2dad2cce88d8982c4f01da6f41b271f4d43 -4ecea79d6a7c3408d986dad00d2173d387277e35095513a67dff237c7d92b745 -f0ecf708b72515cb9b695e73b321247a08834d084600b3eb7707b9f42cff1205 -814c1d788e3ba40d49b97f15df97173f17918d3e4da33485081791990389e2ee -7350ec14e7d2311d7eaa03718035babf963053ec12e427a0e503f8d0aaef29af -ab22a7ba4410cd40626c21d29eee1b4c5b632d68859d314670891f87f097e293 -80a0a248dd3c0d940f119bab3a42a4d5d62990a03d2dee622e14de8ed1939658 -4db30c49e896782cf4e451269bfcc00f5525b1ad733c068798f41579ca6a6ccd -3aebe7de7bbc0739b45cd693227933d8f36ffdebb558894780fdd8c2f58dec0a -d78ed417b05e089bf1c3c9fc389787a1f510b7c8f103b2ff8fcfa06aaa41cb22 -68939a1649976475b1b3c90d2a69d30ef7d1b800c8fe250fb605f04fba577776 -0cdff81066d7a7703574b0407eb78953dc8a21ea0864324e65c75060fc889f0a -a8d26a6342364972e530cb822ab91393e298075263a6f2f31c2cced33c217aa4 -1b15e0acab0f88706b40b1bc490d9304f588c2df3331b47af241d0136216a1fd -8869ee2ca67aa0b9f3e0920f815ed5f91bfb5b3701402ccdf990d0111254cd40 -00edc94f1960d511583f82f28f71c30eb44e1366f83f98b8ce38bc0a620b07b4 -9a0776d358f6e3d3ef6f145dff0158fd839583401753fff11cc7752ca1813ce2 -8d9266aa71bc27a6cdb2c3ea9bf486e4ce62a112c65f44649d7bd68d8b1d182b -1b7d25cbee30bb6c56bf8fe290fb44946c5c7c5561d6c24e97137e915449ca81 -ade634ff781cb95ac4c43ee88c6c8bb0a5fdff6d0bbbfcd5801885b1bb4f4276 -1b6f2c117bb90058466bebc36ba78a4d229352347715965ade47fdc175bdacf3 -1de2d37ea1106e0ef279da2d566e42f98fe6e5fde8e3a292da9b327541b7cfd5 -d60538874042da03b15ce640ee2d940ddfff12ef13580efd2efcac2e779b9eac -3964ba7e6ca66e05cf3673c49a18e35df6c69f9c4ce16ead461bc5b09e9fc35d -0d66dd4fb6d33066c8b15d6704a9890435742271ea33fb6ac8e5261c2d3db0d8 -84d4ed885d5d4635a4e4898be0eeffebfc0ba8a90bd92bee924078802ff82ff9 -afee85f3a4676be2300906b95000516056165942ccda64e891325dacd9b73750 -5039d2520897cc43d9d404c299a9ee3884704408417d64512d9a6a2afdabacf5 -6ba334c51a72fc247dc3a079e3133517055b607adc13703fee0dca0f3f8ddd59 -8656337980bf58f3ae667b81458d7d539bbea00ee1f0fbe756a22cf51817e7b0 -8a7e28d2acd83b912365aa69ec031c135a5160fcc55a5f9ef4d023c92c2f4598 -8899b1abbc1c8e957c2a416b1be6eb1bedc273b3cc91b1a220bc40b96463def9 -58bbe5b6e685b472e81a125263816fe2e4165960b7851ea8f65cf61aaaf130c1 -04ab6c86ef0493d806386e889630fbf6ad9614041d92d35b5f788b63ee458ee2 -c6e3c06c60cd1f884ad3b1455043757e32e0a35d910c2fa33ac3abefeab3616c -3023179fd264c8d3155dc6c73901a109abc353d664fc19a09ba716398118c94b -5cbdc6c23364cbfeec6410ad2712edaa9932769f4c369877a832359d078559d1 -be39204ad8b6324806ae945e18fe20f6a757a0470a2667bb7284a9fbf1b343e7 -26df689bf6d69574c6e63572e9532fb1e38bd046936d340c55eb8e14fe2e80b3 -a06d4b911c6b3e8333c36b676ae8986469295cde55929a1d1d767476cd47557e -d438bec525de2d4b3f55ae52a6ff18d00d5a1e1abca167a7d8b6dd2c6bf23fb4 -ca20701c9869cb5e930156da33d3b2fcb70404c0df725d664deb78814e175035 -02639a8935dfe80b8809086195a7cc4c354bfcddf7798edab74522bf447f2d47 -52532fe58da8b5aa1c4484b50ce37678f001a6aa77edbc7f0e2ab2b65e9a4635 -92dddbf932a5141e9ca9f108abd76de7c6f73269fd00eb8211f3ce32b92b788c -85933381308f912476ab352462ce1e1d98fb6eea4f690e0e036f3deca9cf1435 -1e24a41320b229df0600c764b7e09984e96501c18eeb9d8b9b6636bf3b6e7068 -581bcdd1def63429afb5aed8edd44646a6dfc56b4f82f49d5819cdef9a6f08c0 -6c559f07d3f09c2b5956acc01544800a24d0c22b00cbb1c06b119521b967cb62 -2981313c666afab4c96817c230807850620fe00bf98be25defb29670cbc61440 -90be418d8263c478d879bb5ef72eede7207cc7b2dea21957e9c476608abcbdee -d50e7d58160952ebd4e840d604d28d68292c556dd79340bae75c318a9f0b2f64 -f3616c680235bd7d4470b7e440bc8b37f351780aac3d311ba51d56cb5267fa2c -0c45354d73fd084635552bf78898e2be90f5d7daaf9353f58920a0fe0de56eed -fdea94349d207f4a5fff48c14c6bfe03eb9b051d28bc950574fde10e2e5e7cc7 -b4d9282e005a2174c09c62adda2e15f87360d8c02030de0b16af093feed4c409 -b908426705ddae110aa3ed8b1093702d8a50c08c2358b932e9b98b0b6e7cbd13 -7b6b2aa51ca68df71980ef797fd483f8dea3e44357451e2b834dd0df380ad9eb -e1a974f1dafde3620fffed6385b1132df572cb35c705614556bd07129c02909c -2bcc8c5aa450e94eef375efd8f77c0a8750c45f45379af43a12f288ede4a0935 -8c67eccb2733446f2a7cd0adbc989b21d5afb11fccb57bb350a39c13b3970e90 -17ec4f1e0c2ab7fe6310a4345d1934fca54b386305f015ec87cc15910c323450 -e1cb60b5a8e0dab68412dafc511811d7fb2ca08d9338a85bfc050e171dda308d -4e58c9695cc8cd6ae5b14e1e5c47fc30e2f38d11c6f4964fd16934a8ffea5726 -8e489a334d073fac76196db7b3c8c6d4eb1b21171ba9d711433dfeef3b7bc0a9 -a50751154d77ef7f6c6be0e35fd0d983a5c03bbb35b7afdf952a9a883500a80b -da5f65cd7aaa71e5abef7260a089bb730a5dbdde0a86c1e1a8acaf76f998eb17 -55a0edfe1207c5692c992741e653480788accb3d8fea8ffafb73650ac8a8c349 -664e92a2a8de84125c75d6155bb6165aee20a0a8ac09ede3a1fb800f6fdf0b4b -4214fa222a5cc6c41f7f7763891f5d578b6d989ee6fa56d8e0f77fb09acf241a -88f5a24d4c08f569c4a305162247216455c4bf6e529128081b10f5cb09f748b8 -e264ed4adc3a950c5ffac368799c4c031ca888d31ce9386986222dc3688f1c22 -82dd221f7463ec3cfdde846512774cc9ee1b1a6a2091355b09a33d4ca8538237 -8e5babc5eb20b1883bbb71a6987aa178aa4dc2378a344b5c6c3e214314c9ff3b -dad4563fbe133fd2faadc70b5e36ec6de0f2d757d49b51c623d42f148f31d730 -a0cf5953840e388b8c6f750e3dae0677a00f78cd81ec1a76dcf0833dab08f3f0 -17b60777617649f85149c20fd9b13dae3efe3e8f1c7b801c5ec0a4e2ece7cc00 -9453c80674657d535bf0dbd60e31a2e9361671ebbd8591034fc5d77951ca9abd -342d1b3ef381ccd243f083b3ca5cd79053a4b1efe8a668b73e9295cb78a9ca0b -6e90f22fdf826ed2561f5b4bd0e6d1acb2fccddbde5db08e82d9113eacb6260c -fbe7af67407eb89e4f29b5669f0172c6e4b1cfb81fd7d28ff5167111b16ee4a3 -49d5ab9408be98a51aa4d17412f0d23f7678238bee914506ae72b470fb581a89 -8969eb6bb0137f9b38873cb5ecb0501e49dd3704719743a5ba4ec9bf5c7d3973 -557888428d30d2fd228127ed32b484096edb0c8adfcf6ffe8cd030f3d5410e62 -2fe54d615272a7bf503ac89d0ef3ace83754978673f9db3e005807e470ea5b55 -3649f61148d42e9e6fd19e4145980c7ecff2bbd8ef84b435e6562a920e88698f -7d1105af11926cd6180d6179eeb68823d99392dc95a948e48f3533ff1c4b2026 -b5ea505db22a265d56441ab455024f4263c9ad36c3e25ce067a1937303f9f216 -186ac443d0909a4ae76915584bbef1f884c321fb823b724c58757e619ffaf201 -17e5d826afb62d2fb7a1e115429191c80aedecf84cc71ac9e7eceed3aaa33838 -861d5699440962f38db466528bcd883ad8385e5b8b9ae1fc891152ffede5c2b1 -39b1445e0da532a4c9d19662c7b9af3a158ed868f5b11d284d19c850ad79bfdc -fc4b44ba68537b205420140e803a16eb78111fdbf1d89cd1efd2663e3e306245 -84a5e70d413f73cc1f9392610d0c4a9a0a3e4e32906a058d8bba062c94fcf4e1 -e402024efb1b7ff8379500d16fdd85b556002de62f78c827de10fc2550bf000d -fe81b29747882b8cab4cd04acbd92f009ae3f79956996cdd6cf5006e200caf32 -e014fa4b4e67ec87f6b76741006fa43e17f11e0aba57592f481bfb8655bc3499 -2e8bc3d57ad02b4744e1cdbfa0a76c543bf214cb6c637eaf4a958b337665baf1 -b286b40fafd6d833d45b4feddf163bea2716d90ddb483f8978b5d92d8f78d13e -9c24b1044543b289efe180f0dc7fffb90cb99f928458d36dfcaa18145b130d7b -6b57be3f81244f6064b61f630af5e876c8847ac278dc25aa942b9b90b25916a2 -ce48a2f2546056f7d3c9e0f637b52eac424c3c7b838b279e9cd310a520be41ab -8c7bde64af685340f44d0d5e4bf793da6d7fa368e9ccec9c933251e56bbecd77 -b0a3a4566dc074e2bd55ec1adead11e4ec91937c8924b7fa593b24ef32db66fe -8b27d795c12db95404b2c66945a9c3124cacb24311fca2567b10ceec21e22667 -8925a85067442df6e02e21e10d6ac641da354c318ab4f244c1c2dee6af49732d -3f390fe6ba7c84e415b35e390ee2037026c01e2fa69d1348871b867a37ac2bcb -df84ebed1024ee8fed087491c8978051c47fc1ab12a4deacfa17797ded28d929 -e212172d3d8efc3b04f5d074ca57271e604ef5d0b9893a6dadf516fd75cb84f1 -237ec510567264b2f20ac77c21e0a623ca2e05f50bdc856d7352bb03dfde6a0d -b16e1afe6d3b6cee4e695d985b7fba36d64365c231ffcbb8be40948810e8147d -591bcf096bbf5d2b545c9945612f60869abcafb92fde6616b5f863e55568c7de -c6b413edc7473bb35c6907607ab5fbc91ad25f4c38707f57d22902f2519f9a76 -338a0c3630d101e49f14089aefb0e8d6c735493560900542402938b467e8437a -1089d9460027ca5851a788767167589784e55718d98528883657b4fa709f5451 -00d0cb2ea4213a44a337afd552b19c10e3f6dbd866444735570db480f037ef4d -18edcefd8f6b14cdba58e3fbf75b469364d0e69c92b8ba3895207d8217c72fb2 -6238e3c231451712babcf6e08c08c637d319867554b4426341e315217fb93c65 -bac24552f95e6890b9dbe1bf7530d720e48e1df460eed718b0fadd1960eec4f2 -f72742a1b8fa8846c10f1201b22c0d79b8c77350226476d4ced87e7b67649c9e -661066879ab9dea79eed6bb0fe1300a73fb3578c0628255273ae4cd379231e9c -aef0f8b72bf778bf14731c68ee50c2a2f31e848447190c3e42b5889f1623e196 -bffc1d8dd1323067e075fe70b4c762ce5fd8aff0e4013f47c2e2ddfd06ad78f1 -63da5f4065a272d91f296e2665b219d6e88c094523116ac9440ec2f9b25ade7c -5852659ddb699fd030656733c6d232a49e75d776a235c1a56ee2f8901707a40f -5b36ac3c98fe021bd1f28dfa10327cdefa5f06b471e8967eac5172dbeff6ef9e -bfe7d129e8f99830e4a12c100d6c5bef79114757ce26d8f0d67b95d9865c7a5d -c91c7d542a2a908b2227ef0b78c7a2bd562a8d73f9c20728917082a2c8dcb321 -de1c8f89588908cfe1a5833bf444f8944088e8742635774796d8d4a0040bcd9c -64ddab4db438402813b59edfa79dfe26afdc6a87093baeabae0c10305f70cea6 -5803702798df945f6f45ed221fc9c2537151d086e2df720b8c689c4df331edc3 -2abf9d322cad08e3c2c06921f3a2c9f7a13a4f51b184cb77a4e7aef35613740b -2bff9401d1488fc671828fef4ee8ac4fdd247d6b778e5df06179b5bbb462f2a2 -e2976cb8794041897a65bc5a9e1c561dcc34c98db07947a416c302b8f20a8614 -572639459e1ea1e510a8f8432b78bc5d1e294d8f57dfc956ef227584d236d0f0 -70a2aea00d94e48110decd629db3727e5015bb0c99a794106d1145fd9fa8f407 -bf279f7b1762421b1f3a1437018efc9704121176e2185065901df20159eece5b -808b749e7847b6ae9ea268f561b90f8f47abdb6528a21a714b749377a3350761 -08e9506decc618e42dfa4ee0abe77d1f771cdde50143913f0407023e19fa0cc7 -464e53218da799ffe7a232241f3debfc6f68bcdc45a73e264b675e3af587042e -1e35b346de4c76875c656aafe366c9097edd12df958335cedf7e25a72755a888 -78fb21bde7a863797c2f0adf73d3dcd928971e1543c594cb1a3a5c364840f0b5 -780b764655fcf831285671b076f7eee0f1c6245e47917124a832ac008ef60825 -0c5220af5e833b6aae1038e9f7dc3c793c7c1aceca66b3c6b0377a4acf9e5aa9 -8fd729ae8ee375e831f507cee9975b130402b78d84a9d685625ad309d078bc2b -645c48ec8503b02569bccf978689a6ad2e2e06c1978f10bdb20d2f828237df91 -cdce385991a328c94e0b556f4cb8987de3a2698c78eb2f2fef4e047292fe9832 -dfc6252ef732568e87aca6b40f113e45852b213bf6e3d1e822b61a34344b65b9 -c68246f682588eaa0dce7c1d1e6a3d3491c34f7df5b0a55da9a33f4d59b5ee49 -beae9267a4542c4bcf7d650e0b533db67074f7a889568dc8d55da631cfe65d1c -305c2c49574e2358bbab65e298b46eecac4caf9c79c918ae18626cb6ea3ea5ab -afd51c88faf8309e2cc5ea3bf72fa7931475882da87a9249cb713bd25ddd0f66 -c98e58dc0eece6bfc1d537f887887e3bf5f52aaa42254ceb85481732f4f22ad0 -c326321139e35d2066b859faf9179d497da1bccc88614d1482cbf349474dd848 -7cfa8ae04a47cc440f9c08b7916727fb9a48325d84de181acd84db1f8450c727 -92f4d2472826883094a0bd330e79d8e79aa7f0fb363d6f6432cf6b191877315f -13b0bd9c5e0dac052685f04b7314f1578e14042e777ef6c7e49b4b1c4510d8a1 -e97ca72c77a81b757ad555437123f371534851fb922fb8ae6eb861d4cd4f14a0 -7cd933d97c711e58704ed2cc1313f4a899b401d7354709fcb8c5204a5144e100 -fd49513bc03eb616b83fcb488905bcfc751efe672ce1911cd55c48dc34e5922c -1e300e2be75c97aafb6d2c7d8b2a27dfcbb59a512e6498af827fdcb3a7a3b572 -2ffd35467d2f4e23a1bc2af72efc4ed8d0e86e983e5e822f5d7479203e7032bd -1ae7a3a7930850325a42b803552a3b00753eb9031c57185c5ee5b8a2c448555a -91cb4522b8688d2a42c15eb2e1931fd963b2e10d09cbef03e4ebf90ff61976be -720e07614b853195dee2ededf3f30c750deaeeebdaf86cdc35cf6bc8f05d7e9f -35eef1e212b9c6ed696bb4673cd837a8fe736c883f042b0dd9f14beca6a1128b -204c2b57cd58e90f046d8ce6ea694e1b71ba8baf7cf6c3346cf0dd5642676b4f -f8b45cacdb4975d45edeade19a7d1970ad567e03cd0fa17222f638b873f60c0c -085b714c18c6ec4ac1213946824452fca1d2e85febb6c071bc80cd3728cbd8b3 -8a85376914273c134b8b8327fd591c5960a0ccf823512e936452df7302d19275 -fd19ee696eac93d10b3bcfec333e1fdb77439eee7f7ba673be0edfa26c52b258 -4f6a61bd87fc89f3cf7b662fa8760e30a800aa7d85e94e57749dc6ed26927ae5 -4e1f84ede593601063711a345afc9ad2daefb924ad66c9cf7ef4d7613cffb79d -e86fc6b5e378a0eea2c69df8bd80d3b34f5e126dafbc5030bf408fd0963e0949 -a537002f59dbc2180085f46bcf7fca9356dd630328b7eef27b7577ce3c168281 -3c4df17f86a68ca27e8309ecc6e6d580df9d6073704008714381148da19acb91 -ce6fd2afa781a092b881b1e75c4525e668ac8450949eb5b4e49ff38806574657 -d45062a294972c441f8c354413102002790c9d27fcccd3f98503d6cac0f9a41c -4966a3899636a40dc223f07568ec42822a05afd80e10795b86b05529faca9c05 -f956766457dfaf48992084889d76195cf5e72e3f689a85fadede52d52fde8385 -0ded200b05377ff550e9a26ee3e976d275c25b536bf429efbbe8084c8908ced2 -7091434606e6f8f76b7407bebadb2bfeb03bbac919875c308ea1c32bd56c30a1 -f61bbd705a87d63f4709d39100257c05a0fe66cdfdd0234cfcb67fd999f88f87 -c13dabfe1e7e91db67b83a4a7f5033bcca4d9e3ad4979b1091ba749e595729ae -ad79ccbe02adef217c049c29e05508a09cc4eefcc004610acd3f45849c631697 -68253242095addad40ec80726101b6d25a4e52e746a9f956906c32f2cb316777 -bfdf3a470df987b5228620332983f68625e7e32a9ca809f61e3c25983fe95987 -a2b032cba145d2a9a31236d26e4bd86d71ea16a0fd85b393f7e3e1ff5b6e418a -25b54766aee0d8272bb2d3c85401e788cb75bd8d676acb121198afc3179dbcdc -8281c914295fc4dee61d150bd8623011b495ab2350e0047dcbdf9a9db40a87c1 -fe9464ff6e95562572c61346b1a00f37c3f0333c81753cf4c5911e5e370c70ed -bbb4626b53f9716a3b83d201957059546ed22831f5ba5ddf5eda421b3167e5c5 -8e4a5ab8437540334a3b3285c1a94a5e2c87fce09d00ef5db6ee78400f1f9c4f -4cdaf7bb85e56677c02dd2b46281c64522aeb1bb1fc83907b4fedd6678ec11ee -46dacfa31b048910cc6c9463bbcebf80ae98304ff2ee9d5c05418c667ce54354 -d66d0c61ad5c8825941523ce6800c2fd3cc05a9bab764f79369599d055085e00 -8d36906da59a1fe6d137605dd7707ad144285bcf31a6047978146b61a4dfdd01 -ed38e1888896f8b02f0bd89a57402a92107e626383323a5fb2e943316575bbfe -b707007cecb0edf4afc52419fa8ac4f6076e1dea9cce97c3f1e60b2212c239de -b4e71711ce691ad89c42074ad4c9b9917b40119dac1f9fbd5cb3e241e5aaa2cb -ba248028a4ab8389fecf0ecbbbd9d0ab8450535f2f7c85c02db8c287f24ec8ee -f67baa4a0eb50a8bbbaf0841f4a24558044a0e41b7fb390b6512aef6d7795222 -5f7bc00e6a6b3e5314fac779a9eb11b38d36facb40ec14e0d875640c90d9e856 -a5a88a273886288f14d44d0d9a8d4144827d587ee2cefed089d6979793051660 -c322890d382117f38e35e643808fd66e48b521a6eacc926b748c7070b6f3cbad -f2a3dfe4e2706dbca9439ffaebf1522e180bc2876cf7f736698fa955fe1f036d -145e3216487fb904045d5533e1b2c3be21e1a64e96bb132581bf0180b8e370ff -a32192305d1075352f404f4e8e338ef2926e71118383a9b328f8e55a5a938c73 -7b7b771d6ef4f4d62d96d5bd1c64190fc6932ac6a91c92f267c502d3c1539b48 -c6e0c511e83b687c80a8d290702c26ed02a355ec420667a8f1ab2e201b814b51 -da7700c5fcbbf06c1de4b4feea2562d1cbaf47c4015b72aa22a9b6490e775d60 -f7b5fe4e7362c765a398b0c39b047cfc5ada1d8abd3efd2894221d1676f04e24 -fd10f66a7a185403caae0a233896a2ae721c0c74798ea526db2a13a419f60883 -d4524d068379bfa6effa715d8907e4729a99acf06d7e2348ec9277c295dcbf30 -879c2a7e7aed3bf984bd8a3b73cd518f8a4f612a179ad16b5c8e6fb0c8f21692 -c764a39fbe7421d2584c7542f9f3e2e76b1a8d81f57df2276e098df6f9a2bcaa -f783708d5d966883d2bafd88416177a159c304091202f2518f31e512e24f467c -67bc619bcfd5b889b0d83229b76ccc9db033745ca4aa2b7fa65e12421c95364b -bec1082d2828ac196ed6340d9c90bb5f102678640d3481397c077ea83cdc3ee0 -927dc768113d2f4deafc9a6a982e129c5000ee2f5051829969719fbe96bb73ea -c332ac4c81c52ba840c1be9cbe9c735639bd9cde6da5f0cc484b20ab18cd8235 -fd2d8eab0cd5a9fe4c276ad9af585aa519de92be8aaec2c7ba6185d7703c02c8 -2a829b02d2cfa16188f5e3ab80aaa4526dc74bf173abafd7104c6c8351f5f362 -84a3db9c28acd707fca8a97979607f4d6dae5b23e111639271f8ea152a6d56db -dd6a6c33c962020393e13a23101899e3d2d3b1be77f23dfe1bc8bb2c56fe0f8a -4ca063369a0efc593be649feeb516b5bfc6994ab38a75beab00afa4c406c2ef9 -a7f2533b5f766bf115a05ae0dd8bd4a0436cf2abb04354d54c82e3e706587cc9 -32f95a254041b036b14d249d49d7390593231facb2c2d80848e94b7700b06527 -4b833e2a22722ff90731aa0f47166fd4fd286d5315e01cbedef249c9b740278d -2a4e183d1148433cc20cd3479d7ee981b0bde4f7f46470d9ee2b6cedc48b0d15 -81849271ebb8536f55b6712a7bed80f2550298b1f81f3aa70d39261a187d7e6f -2097660de875cea28e5583f475fa4e26950853bf6fd5e9b9cee59c1371780054 -b2238f9e6c3c9f3b4a1411fbb89fa1fbcd3052d1893332063add912ca1489077 -9b988149bb9d4da1436a18891fc7f229c2f900fb6b272d55ba55e581f8d0630d -8bb6c022d366dbe8b4238058873514e0df31d73920a720f6dca145fbef4d15c9 -411f5e0322cc61990a48f98a63f23793318c22d178734fbeacc04988901481e1 -ff62d5a8c7aec831ab49c4b5721f68f693e442cbb62d13017ded5011eaa71f41 -7707b7915b92e280d0a7fa0063d90ced947c82ffb0a01b962d2b1aecdfb1839d -d0e8335124fe352593c9938b4f4ec21a4d04bba3a46826df0972c5d8401f6871 -5c7b4906a37608dbd3f630d8f3bb64247d8e198cdf8ab8f891e00aeddbd48263 -17227225811fe52a9de08976cefdb7d5e76db46941b9576e87dd6b400c64a256 -a134755011e3d4d27cb90eded548f91e1acd8ce08b7adc929c1a02b22d65f10b -bed695d8fb1337f715c792b04d103632223040eecf2703e597fdf30a8c42d448 -82e73b2a1c0a73919df7a5cddf25b32afb51f2d24dc4dac2a747cba641fc6fe7 -ec4ecfdfe98bca936ec2819ff6016a17bdfb1c91d893ff861a67fb1ba168c5ef -59f774d859741c6606d680b68b67563b965ef7cb98e162f307504fb77ba9b3c3 -4eba8e45e161f8977fcc6fc2f4c2a677d8caef269e49c9f2f9ff6a309b2c21e5 -c810df536db392cd1b7018dca670f0d484cb7b6ee50ea1bd158af5547dd96166 -da10d10acadeaa04eb9d144a0d13d7a8f80b3e505177b3cf9893396cab022350 -bc705ba65811a2c60fc9f0e6f044206dcf524323b5cbf547d13d54ee0e87f00a -d5a4f507757cef3b458e792cdfbcc25339d8bf388ca94bfc341d76ab42cad16c -3f37cb51c85fe91e387f8c1d84a03da897a699fb80b5de32c0573014ea558d71 -a0eb713c0499438120b4702176b39a69bbf930309a555173d8558e7df642a40d -d506f2498136a5cb19bbdec74d7b436af3ae2fef171244fef9711a9ae983e452 -20f3154be125816f948bb0d93b9853ae68c77ab71a8df0d5df10e4d6b7cdff22 -c3be071f0e5dc4b82293025a27c4ff3cb5209ced6295fa9303b624737e0f3e8c -b8ef7e39762c82c89627cf2e430aa0c339eee58b684ca7fa818dd90aeda2f85e -0844963d933da431ff54348d7d9bd3159549650fa956e1395abd116aeed54518 -649290b0b1f54950529f83b0d8d9620176d7a91b803edc637642c83a761cfc82 -1b21787f83920decfb906a5260def040e62e38135944df33f2c4ad7eab631f22 -6afcf035ff68b4b709311d9d713ac6cad9e7fceec73ae0abeb5fbeafce209148 -1a0e537bd666719b41028283cb1658f4aa7f4512fc61c7631fc4eda8d678e7fd -e9db0fe0f89cf941fe65c32fc88f490226acbcbc93e5ba23dfc83ac4a289870e -5ed31f2b5cf50a93525f381bd56d01bf11299258dc387694fc0cfd877eae3247 -8d6933340343ae8d2fd1740beb0eee04c44614f9c1d45beea74fd4c2d3f49d62 -4388241c96bb392add3896e74b93f670dd8a5c415631b2834b3b8135b49caaca -007feaeca5fb75d9c4423f2f04ef576eaa87b69ff1033a70409cd5ecc93155c2 -18d154bb152491f87a8a49a77c1b6b6bd09982a55c33601547db6c8344c0ba64 -007c9487105cfd10a7bc342309d1aeba097d21d9c1da6e1ad1b1f05b2364678c -e5e496c2e2056dcac7b5c90bc5dd0b0853e30d01800f91597206dc2a1bb5f0fa -d8735dae0e61eb82138284fc4174b009d8dcb57c96b2897dce69785a571549d6 -67f539640bb0092d7d130ce57428b10a985a48576d7f6ea6c4207a53bb62c485 -5275cc7334b6fcb89bb496f3889377c1b0b5719254c3b9b19d041fad4a399e67 -1ba4b04b4a62b1879dd7b04f3b93fe31a3c544eaf70855d695eb3112a05b0537 -4c2196780e52fb906deab5add98ad9a075a1dc44a5e6b5ba6ca0f8d2a634491d -eaca8a763311e9544556b65082f93074e5e4457956783c11dd6b1be5749fe952 -d2f642e8bf267e5426a0ec324af7d2e990254de48c505b1fb742652ac86f38bc -cc59509737401620910489d3a4aae6e84f7b7001bcd617b0f09b5002ad00122f -b1dc4c7db88585c31e637095d3d0dc7fac2337eb79f02fa62d13af0d4b76d43e -69179bca2b3685d635c6f2e1e26bf1a9a609853d1510fa03f78f0b7fb384586f -3e9c1ee38da709fd02ea0ff4d5ce512f8352aa15b232cb91411d1e95965f485d -7ab5421d700af653b90839773fab6d37538ae3d61d9cdef3bd4ff94ec113e9da -9a65f75abcdfac298717436af9c1a1667e7fe80339e1383bd3d45b94f76dd91e -f1ba70a8bc50b51d6b51766722802205c0fc5e8ea0514fdfa5d5b18482694e65 -6ff5d21dc785b278f11b386e5812d42f0b4505f896d7f22b4ba42f4cff11dbe5 -07a53031462b3e29263851e0c91ceaa0573b49a2a6cbcc3c3c1a9c59c556dc2b -12d1a9f6bcc751151ce62c3f30a0ef50eae7a56ab9eb35f93975fd3ad2e21459 -52d709f052197a64afbee9fa03ea2bb9201506c0b6441c9ef7250d73444e01d8 -7ee3dd07ca8cdd5549f62d1726c8d69833e0c9d2ff5af11b1fee0596853fb75b -1387bfe18c4c747f83619a6096371fc6f444877ffaaff4a8f412847409be666d -6f96f3a2a6bdfd20f0bd08afdd3506facd35e4b62c58b4a4645e732a9b1acd6a -cc71f018c9e0622a1705ca635f96c7315f9d876afb459641315bf4ca0c4f7930 -1c0e30a8eeb441218c91d12647d5bdfe2512f2321bc51968c257fd339a24b1b4 -203ba90691564a9c83aae4ff68664d03b1a95da707bfb90033444ecf3deb43e6 -412fdea0ae772206a398de11c52b652ac04499968e2cdd4345fee97a40b86567 -2ed4711234d27ccae5f151d1825af76e8624c0ebe4a5bec34b6998040c3b8292 -76200fc70a6bff7a15cebb81e8b52221a45196fda4087bb32d5a260d077677b6 -6e070d33ad1868a51f7201924825b04335bc192bfefb74e496dab3d54ac4553c -f959ec0dbfdee94289a4a2c166909c26c130ac3ad182057644c8c2dca84a3044 -4e86e891fe1b07729531642e7374c9a272cec66bc04a36db2d0b74a622028adc -d6702773d0c9b6750c28a08902fcdc9f8a290c80c0360ba8019799d33fa42361 -c66575ac108946c97f3aa027ff95d2a6753f9dcf5949df046cbaea6333f19716 -9c0593db17459534deda9863a74b496a837c1d667df9afdaf54320664d0319bb -3bd41ef9a54b4594e6be5dc416c275a73a26af17e493f77ca7ffbeb2f7abb317 -035c249b4b5a33757bf9601b4def56a6207ebfce6e073fc9427f95e4cc3799e5 -5eee6d0422a26449f713a74f0c114d3ea2e9b2e183dd857cf21bb3a53480b0a6 -9c7d8fde6da71863f2b21eb407345e4d72c5667137f83610cd2c391218478c14 -1f1f34be21dd6fdd444ab1c4b0a59439617cd0d04ed9fc568b0c70ab8222f17e -e10c0934f9b567dbb26ee612929ef36036727e4b787015c76e78bef4aee02049 -4896893ffa23af70b4c6363f7b20db155f496ed5a8609be1e5173ce968cdff5b -2fc5a3bc23894ec6f26b71a2ac555a5cac33aa9f71c184b8f9569d286978c586 -0c4d0be59e267ad86edac17b787cbb93dafab3ab4406d83af0fdc7a29b0a0b8b -478d2717fbbc87b305b3f3020c69c358232b5b052d4376db297eef247ed2dd25 -6437c1139017556f879427b786a15bda065a1c70c6dc959f8e0cf727bd50924a -b82a8c56c225fb35f49c6937495f2b6c7a80d6ecd28b0088b52558cb45b238a7 -dd65fc5f16ea69febdb60167d4de4785b1ed69c9f40495cf1aca058ae2795fee -4812b5ae9a88ec6f37f8fc2a964e0170025fc558a7d5e093a498b018390064da -45f6d3c9abcc3af22fb37946cc10ae42bd651e213d7e26570b1eed493c374260 -6e3861f1fa365824d012b5ba6b6bde3d198e0fe078c7c17b045109f6fa5700f4 -86e7fa8b9c1a5aa9a14955877f9c7ce8997cf709ce97211dae33e406979e83e6 -6ed2386c06b400c36404ac371ec3bf27dea61b15d3db5a2eaf68b5e5366112d6 -a18aeb880bf2df3f4c151cb23ed00afd1f41edb073022ea746336ccc2eeff94b -0c896643f9d44d67ca2600eaba8db2a75a18edfdbeef3e55aae36d93c115835a -a41cdcb41d00721efa83cf094a623c356cd01f9f3e61b52336e039f3ecccbcbb -c3db862117281a50bdecc0057520b748a4beabb24b8a5f2d915eae78b359c012 -43b351570dae60fe822219d20aa73d0d2eebfd64a13fb0f05512f1c25eb8cfdb -1f85aefe9cdbc6d213db2396580aee22e7f39ce8fcdd343c9a65f86263613ef5 -c8b1d3d2ce31961170db7f3a930aacc827643fddfebbf77d5a402be5d1000db4 -c80c05b38cb971bb260fb31f8a42750519ff7ca45076a75d3490b51cbcf8b47e -9c43f349db24dedd1c41e013de99f4a02d7afbe73517241dd78d1bb77fb815e0 -23ec47e41c4f1f8cc34b6fa12cfb9837e7428a0eaa9769e786818556955407ba -5079607225977b9d1329e9837fa6ade7df59a7a5c3c6a9de0791655b3a9c88a4 -b9d643f79acbc20eb60019d7afc63f30c5430f0dfdb0750a899347eb1d9cf604 -7bdb596275613295aea793d76f6c1c012385a29721cca1d4a49c666cd91e578b -4cb177c7f24bb53b2a096e7abfd475d8fdbd0bad06ac17be32807dbef46afef6 -743bfe9c65d9f41691f698027dade394fb03a862d3c8aadd957f2e3d22af692e -fa918ace6fce92a690b5481d88638747ebefaa504873781d51bbe392c8de01b5 -ae4efd418cddfb846ae695ca0c4f4bb18da6b54ac6deaf533c552d8dc157a233 -6382159f28a121c9f2f486f9ad00d487fdcee4459470a5f8e3d3ee056b7cf51c -860ee6e54886aeac337f26d1ffc297b6903ef5756f964318d3aeaf9bab264111 -ef2ad05e4666ca98a320e0c30bdecb5d0bb00447c26e72a74cb5067c4734854e -f85a9efea96a40705a62b9fe6ce93fdc47df59fde42c957fc276c86696a70d3f -3503a4ce8c480c2f8abb6b86d4c0b689db26d606dbbfb1ba22960631d355bd6d -f77ba316866036141960bea735580e6b306b30232485f662b05284775da99aac -580a53dc696dcc027a4b008c7f55c8224e7c59eb86227bd3ab0f45f4080f2728 -3721ce2c92b117ef4ec8540bf86ab9aac4d142c87c483764691656f7b95d4c49 -69eb8403eb6e52effc8ce15cb9826fa477dabe136c2915d5f9e03b80e83b7158 -013b8ef2817b1020dacd0b8f8c80e00450cdb8e1d794cbf23596d25116a6eb71 -6186870e761f3b024ef87136d248af0077422381ddc0d997c10677e5c51c87c5 -873b5354c2f429661b9adb4b9c7ca76ccc878daa248857ea3746db53b3a5cb7e -9b239744383e4652d32b75b75a4d678a4adbabe8e640f4e0a80fab602e09c81b -4c563db440fc714dcd23d3a7e4aafa655d569b7f6e4a3e02233027d740b6950f -349d0caf99ad47e7b40f3f9b88e1e6b32dce22027029ef7a470678ccb8651509 -bd9278055958c6c8802ace0c1655fe5e52a9840513b7925150d092a1f7ced5cc -9938244b0bd766dec4954ac6cdd1db1304ae781383d253f65bd24ed05875eb50 -ad99d1bce15be48a6a363ce8f7d1d89b37ca7bc55dd84fb7a925ddacb6134a13 -13ec21412cf11b1182c1e88be892863fb487c57918a111d4857d3a4740603097 -8456c2ad7efd34d949111de4a616362f218528474dacc220f86814f2543f5038 -5f80cb9d39fbc70ae1f66855dcc1ef7982b3488f719683aa5296e955d72a3ed5 -6259fc3f9bc41b0e42514740d750a7c2987ac132eef1f7546a7ee8b073dcb7cb -3077493e4cc2d0b8313968730bd2b0ab3d94258a840e25a52b96025704462c9f -93c3cd3c2f3c66fc7e954dbcd5ffcffa622c797544121f91db0cb7793112dc48 -6996c71221bd8318a1439007735826533bdcf1fac581e5b3b8dd3356e4a578c8 -7d73026ef076fcec3124917ccafe0bf56f934dd8b57e2dbda712020b1c4a7b79 -19d9d7bcb7d5f850104e668f597d1c6945aba72f2ac3fdd00fcfd4f3aa871eda -fa706e53c1fa0d376d1985655cf33ed3dc1791517e9414860e0ea2505d280db0 -864b7b02b80f72f10b5e92a7b79c71c656a14ce57f096ee937fbc8ccae999900 -bf31a9eecf2689584976cc5d9d20f84c3796a4c9c200775c03da8fd51644f372 -0ef4a6354fda3c562a001a95217b009a6b6f1adf1eda0ba99a5ae28faf22594f -d80d09ea4bc02bd5d63f4e0116ad29ceba0b961f2d0530ddaafe3d3b3df8ffab -804c7b7855117d0c0cd591b0828539c954e7b6c05bee6e8002f9453caec5cd25 -ab4397c807b2af43c2b2a883d87fddaf6051f8b2bd6d8c9beb43ea821e48de0d -83ce6e93ac6959d8c7e4088b12240ecfd6a02e0a8a452161f878f024dc8a0786 -35ec88e6a33dc633147b9a2a1ef575e86048b9471713e0c8cc202d56c7ba584b -9edcbfd980a069a994084180291a695144ca4e0ad3ca947180f6fbe8a709a3e5 -401e96b74f2009344d43723b1215d2a145d0e1e91985375efd8e340f01f825a5 -a0d457eb5c5b7da3551bd7edafedc14c3b6b9bfe7eabcb38bcec9f1f94439145 -a32ffc10032228b5d1154d2e22d2efed471a0651c3b9fb04c1910052d08649c6 -3d5b987ef316a90b2c1bdbcca3cbb12f1f426bdeedc8107c9f2538bb506c7524 -983e3147012dd9dbc0dafc96c65478bcf8eed378fee8a20dc9dcb0f229088a1a -67336bbbb67e68efa61fc6a5750c7b29b868eb5c050c493b97ad7dfaef8f75c2 -8a8092c5be3c1fe73d519c1625670c78c373765b2803b932dab26c54664699ae -d14e20aeed56b0a70516517a62473369e6541d759522598a0be737cfc0f4b74b -17d63a72fa6798b867a1cb133cbe5ea48401fd4646773d5c377628a2560dd870 -283ecba942f65f660a909811a5332596b84ac3e6b583a24c7c5ce30ed978ebd6 -e0ea5b8f534d586b97b3d8f3d9511cf39b0ac45a21cb831c81e8b78b7824b0d9 -211b916b64a0efd2fb710b6777a93874dd625311bbb74a04c734bc3c8298b660 -9cf371f8a04b6e13bb4c5cf308a042e4346959cc5e7209f5d7e2ac25911f4f2b -b14eb97582f80998b77714e872260ca785293e0f67aba0a232d677515c3e5611 -3bf6cc8c1b0d13219db4ec3d600392cfba7c3c7602d29ee0583baa53c1601433 -76d3f84601e562b73e389ec97a1863bd0063c5b2edbb5dbf35208a9a19291f25 -3913cc05c4ea5fe74c591893b53bd8bebbed59f13bbeada69cb75d3b8fa31afe -3172b85cc8863f52b594621f80eb005e0d038adb6802e1ad80492867eaf8ea04 -6b391ac713a3fc24c0e036066c8c1143491e8854a4e8d3a6eac1c063bf1cc60c -3333732f67b43bf55b43631eb2931a9519af5b44127b432871b99b3621236172 -d0ec4edcc0be44702893c0e749d7ffd81ae042be89442ed0d0f45fdfd2a34cff -d26e692dac3f81ccfb7a7676444b48a5ee7df7b37da76b1c7c50654cf9df7f47 -da61082b64748c038e8b6fb6dcc2d82446064d826fc2406c3398b5d24fc41ef1 -ea4b833f9c9818a78864daafff9bfeac577964ea167734f4a4e4fd85516a68dc -bc0a64b1d406651c9ec70e97bc15f4d0fc43e96bd31174dd4d0d228897a01bad -1530f486e86bde3b7fe8203fe79f3904cc70f3fe5b70a52cdc3ac40812974ee4 -3ee335e05a5aad251c22b83bb027f8fd6a695a85eed610205c395f7ebba3a6cf -27dec1048355636242f23e74b70640c1affa52309879376c911b07074bf35f5d -d74e2a963209ef85f1902784898da3d4f43af02744afe6679890b7ac96f3176f -e1cebe8d534617401e5342ecc07e115fa5cd1d77998d30c28da15b763f1e9412 -d314c535a574d0584a257487052c4f088066ed99e434bc8cc0f975436473f9c4 -17588ecc0c37bf0901211aeb658dd4d1b30a8155ec7ce8940f059935cf6ddb00 -e47d4da7428dce12920cdd864ed00fed8a18c39d32556a2a1befece0443beb0f -690fc9552f851aba3862083d820da90009c546c0f8d974644c3f2033a81bc38e -9432837e0469329715ad7c6d910a8506a4135fb4fd6951dedc46231de609f65d -c86d66af10eeff7a899f92ef897410d56ab4193039c558325c7240ffe9172847 -42076b218220db2011c9dc6938f41d08634c9e07a81e91753f595a2fbb72752e -0e2eb941101c30a26cb976cdd181a4d8fb0187092773e56b47acb7d6bc7c878a -00bf69eafe8c2fd1665c3fe1b6358e3b6fc761bb19d8fdb16b77272f28c0ddcf -db4c7afd48f12daf1ccee639e8cce5234f7e60905f7ef178b39cd17a5f5819af -bd6523b008e1e3fcb7ebf0a85e328b9845788b9743ba205ff3809cdff74c8f83 -ac937ab9b041f32e9ce0209b62d8021c5d05809fe51d277a31f531f8e62d2e0d -143125b599d06c714b6220981f5e8b20e64bfc4be032393b308cd99d1cda5433 -aee558820c95db7f5ed52e60baf77cd27a60db1d6ff7c907280b024e3c1d6726 -3f3eba29035bb5d70090c199ec5682ef5fd7ce0563c453eca594ab0349fa32a9 -707df207e19461c79c33b3e6ff2dc5700cba1b297d9d215dbc3647f7920b82b3 -1e7d22319352e83376b373197e03c4c42137754961ec274a241c492daafb078d -8f0b2c1127e57f13de96d2bc9be9b5120e063757fe6b05d4e5bd7566b22d79cb -78c01deeacd07d86e961d0cb9db376d61d1beada56b1a629a93f83405c7c10c1 -eca67a71aa87d7c0d28e295a01fddf038bad9b0de720718eae09d7edbf128a7d -da8d786ee0b16d4d21b3564133476ff42ae7d8a5347749ec2a2a4642e87e7b64 -e6166032aacb00247f1ed8f552c94f3506f9939418ea62ff14d3ff98158eee04 -24bd5e3fa77c2562cd5bc6c7f0ffa1838653713e87b1da2e1a4d202f04e60dd2 -66d6d48653caea42cfc43d05894d1173cee0ff773fcf9803c2e5c150385f0c8d -b67532b4012fd89c5558b045c3026017fa4cb17cece11712ab0d617631b1a509 -6677062be9a1289736fb1abfd9630274e40393cc9988d2589f22612bcba6b339 -c961e5a4e1fbf411a7e719959a322dbb622c8a9cf51d6f405ebebac19e6051ca -5b750d7506ec8a03cdcc8e62c6d7af9f6a32b0b585f66b26ca61e290e39e341f -0b2d3784d104f82872ba0e1ed967a064f708aacfe052002972006fe14cd4963e -1b34ef38b99be8a7a83ede48c85d5c71d69e0e4ae72d7b6b1a46bd26cc636dae -815786e9e0eee89493bfebb89037f3bac832781c8b1630e31542ef7cd6a483c9 -004ab161038ac6aeb38b48b8293ad11bf441db1fef2a168b77d69c4a79f921d7 -ab9f1cba257605d81928fc46c43a4f93d39b01b07ffd0006d38366393cc64b18 -d8b18fa2899b9178c40f008044fa0d1a41e879573171478c147cf71731075421 -650fbb856eca3b36a741e2077245845e074dbdd2fcfbbc4581a2766f1830fcf3 -3255695d54307eac8196cbb693d536795388233829cb670ea78b793c4c9aeb73 -f7e7de4860712a5fbc17ce5ad07ca98d70eb3c94a79383338199a56951a45a76 -6fee0d58788e22740f2568e515aa495edc80da6a84a2797c198cc1f3d6fbb2eb -893f79f9f54ac81b39b6dac070a763cc81959bab607569423d423fc8fe5f98e1 -4bcf769ea77c0d11e5dbe2fb539ce15e09b68349a925949afcbe381192be5146 -d28382fed48e03ee3221bec2aa8c7270f43c948320a3cd0b831e529aa585a7c8 -66f2edbc5b569d4d95e3ec52c8a7d35381cafac5c301508672352d9b0f582a73 -9564b6cca37b517019c7633561f33198dd54a886408080671e1e77c0d2e5023f -489305ca314ef082008d37da60896f6c4094451ccc52f7ac0d72286febd7c852 -5ed8f36974b846d64bdad643db37d8ea837387e100432131b11d5c42e5ec117a -d17b2bcceb463d68ae7aad5b877b076f34609146884f216716186f4cdf7134c0 -f72d36ef9696d2b53ec3a3149a5b17f45bad371cbd72f2699cd52636151546e3 -d22c085349f42ba0c21d90524a94b37168ff489efe6de3ce97679298b18eca37 -bee071ba1f93d7d2fb811987973864dfad11bb5c645ce0a435f1db7bf20671b3 -caaa89df0478215fb76ea26f00682f4656e63c358f3b0bc84c64c17c3471dee3 -c97400d051617c205d5815ba63ff38bf46f06a8fbac182a4ca27038b0c8ee103 -6a9a449cc5a9ac774dcb04bc9f48503a3f4a085114e2f190e57859724a8f1e36 -cf97cfcc15d196ef82aa6d2964dbd886c39c4e72e15d869df1dbce4169171f27 -68cac43be9c95e344bcf7f0af27b45d386ab6248608416be5f432d582338d3fa -c77b80e9874d5b65658698e21bd2d4ba153f97d21223e488d4c5c2c8a7520e95 -f6ff8b1a19d4cc920de4621166a4eaea5774219ab3efd4dc9202c5225d4e6505 -91c475337f68a2d870375bb8def9f4319aaec852b76049401c121568f16b9be4 -ed27ff64c810b325bca29b5642438e259135f361419e8b5b23f6aab03ac0b22a -348478b32e93fc448502b81b0626489f4a358702e7067b1bbde9448c4af59d24 -a72c83e0042ac510c6a91e5a9ae0a69d2be865505238e396006527756734e924 -4e883e05abfe0dc62f9bfd0e8025172704111627916379044c3cfe0bd1d7e2c1 -05adfc871ff2db60351210af676444b37ce21aa14f1879ae06efe7b4338eb55f -0aa768ac12df6bd8b87feac0f48fdd26f6d2de4ad88e898499608cb770f754d5 -3571822bdb5de28107b378f4b1bc67c0106a24e9d1785336bc80d1da9636a5f6 -d25dc355a88023f7189533e4a2416755821a03a069681f4b0554ab826d2819f2 -a4cc0726412e1d2a0001a3ca49709dc21e7032eccab2f58d80a8163cc8129684 -b4277d3ad896600f610b1883cc973f8a975e328cf4b069b44e4d5207ce889bcc -49684bb2f1eebd711c8adfd4607abced0fba91b6958bcd5874b01e8370c7264b -9cfe66d1298374288f3d3f399700fda41a7b193411d1873d321e846b089a2e51 -0426782a79990da94d6182c912fe9752a93d6de0d37eee602f0907b8cd2f46dc -ed1179536bf9a3b74c0fbfe8974173a2c630c7360bd90f9c697b1d5068478814 -7806f05c70da8a11ef065cea507de043415f855f595aebd10ad001a0b68cd5a2 -ea7858041a9f40f05485b0385bdf08007f4213ab76c70b463e7427b79f826ea7 -ebf94bc420f700a50a2bbf291c867d5b181b8738738bbb76d93503e7c603a7f8 -354772c516443fbd33382b7913840785e5ae794fe571eb3fc65070eac273f00f -d12bc28451ff8be0dde26dc63bedb66acc6570fb166a583d796fe9493793baf9 -6a13bce0e7952fee6c6700a9180f5ba2d0cfb2963e0cc8606d48b9be7bc99c9b -efb1a2dea357ba87d790c52f7a90a2db476bdfb93f48910ae8cb5e91d1d146fc -04736b13a017ee2216f286ed57965d2017adea323978d3fdaecf864b51fc9aff -cc24902e266b084d518f1f063a2d0bc625ad9b108e322019d1ffe9a26aea6423 -69edd0537d1097bbd66dad8d859e7f02bfb3a77762907f989cb8579a352a0719 -969abd926a2caaeb9db6852b1494277fcfef88795af85f0750856b9a764f94a6 -5a120b04e33aab0d36907b89bee7586021221b27ca23559ae68a208fca16703a -2fd2f1d8ceff5274e64c441befc0ef7901e5ec1be2faabb271b3801c485713bb -8846c95c6ac596046cb941fe5a5ef828ead0808f0dbe808e96b5c48253cdc9ec -a0f946a3877a9a0d61c0ad150f50b186f841125a311d606cde70d36f7c03ae8d -027f88c6b92fa0f2d2b69f15a1563d5c76a3db13f43eeff40c9da317e8e0c93f -ead28d0fefb5a253a9e998ae1cff676dfd88f6d005b148948b7407cb24285302 -35313ae2eb809b59813c15ddc621a69cb03e022a71dc1212627141a77c2441c4 -39202c7f4b0937828648544b05288337535cd3d4d2b80a0b3241169c8898e4a5 -db36b8230e8e56e3d0cdb214df9ab611003063037bace671454a70c801aba2af -35048afeb620dc4fea9975bba58857ce16d2439633989d9306914bb002b376cf -00be076bead119370763b131621c4daccf9ee58226a014d05c428c70e28bfc1c -e9fbe10d94828d9510c22a7155bd28d6abdfb16e486322236b678978bc49eb1e -8572abc47de533c8cb98d80b4a529b7d05fff2302fa2b099efbe64f56186f14d -56771ff9802f23c1302732931a28bbccf8016aa68241da46b03c352237bf0182 -90f3afae514d05552932233857697a0aa8fe291d8ccfb8d85c5790157afce28c -a0d50875e4107cdc0179afe2290120c6ef96ee34bebfccfdc2d47de8cc301c14 -959a4f14717e9bd54454f382394d0c9d653357c683d65857be45c662e8468bb4 -8f916c8baf08d028e339e64803d910196d19335a65f83230a9e6c2be9baeb01f -9776b81d665f0bddd9a1a0ca31a0fb126b1aed8ffcc297786bd29cca18794fb7 -04231664a4cbedb3b41ec2d9066e6ca9d1b694a8d7be8973e9ccb799f79ed2fb -e63e114daf8c937e361d4b7e0fc4caac2b87f0c9406820e9448ea9ff98d053ce -9d5a7db9118707bfdda8f701bf6bae1021ca34b924185aab0526b046ea4fa65c -d4412f43cfcda0628f0f5790976cd501621f5ba7937e6c04dd6700f9b35f3a52 -62640ee4be7db358b971c2aa5df1dd7d090195fb4fe96c8908d24529228e7f7f -bfbe6138f00143a76b3c09e29f8eda3d5c630aed311c3fc3c9c57b48bd070b18 -b44aa15009176d0ce7ec488c945c51b26950d522bf80226251fde456d1c8399d -7fb77759130de5e1620a47f6e8eabbc2ad48129f32e97974657c8aa6cb2e7ee0 -959ff4d70bb8b307d2b6fabbc887c04a6e95a986ce189927fc97d8ca7db8febe -e699d3d193545b1937082373e930af3db6ec7e4eb8c8e1d6e5615b93177b9a2b -ce0d7616642da91de69b7ddb922a4f47eda748a71eb4662d7476ac5b15184acc -7bd92e2542f853d72f1259020f66b782f83727224470405099fdd181dd4210f9 -6e8e28b257b8444fc35053a7da19361b01bbc3bfe0f8600e582620d1afbc3803 -56359cf6e9f1964635e0e734d7bb9a1e4c7d704426b8d2a0700411c226e13818 -f739cfc023921809d6b1c8639eae19f014a519d6b71133c3e12451d21aa36cae -16f002286b5aee0bc46d5dc92ae3779d957212fb276d86cd0c6cec26c2bc2dfd -cc2c9fac9ebd5b4c7324352806a0d9894a1e809d8c9c2b1a4b56780cdcb7a548 -fbc3faa955088fa50746598b134f64f4d88e8599cc48a5d5f86f05f898f5c270 -18d50d256d761964c12aaab06befc98a84307547b80839f8fb1b7e6553d7e522 -c641db4ebd8faba0f24af058c6de88f1ddf478641c513423513002bfcba37ff8 -2336a6ab4ce3d926ca060a4084f3beb0073bce8b91271a3b2614bc0aa19013ec -694afdeca7eead2a6527acd348d00458649ac2e475e8349d186ffaa64f2f058f -a8c94e7202a8141f64ca347dfc8a7ce7ce3c9402072e188c77290563b766223f -deebc865fd7ffd4507e74a972bdc5ba05f1595c4603627e07871268392522a65 -93d3035b5f05e8cac3d90e3b6a8c8563baa8f13d4d8a878445d230f71c257ca4 -90d72b7697719b66b62055fb8581037905a422baa45aaf39efd0c40fbcc7109f -dc2eb4bd0f4ac59bedd12f12deb947f2008088321be00902d555e22391a9921d -eda8691ddaecb8be07ce75f459c1a5e9ce7c57386e8629bcfbbccc796d3b0551 -e207f6e0fa063e926f6c663d576b8d6069c022a51f9f9c21147c7afbaae7f697 -762db69c73cfc80afa498024870e3b7af96203caddb5520bc20db4b7da0f3624 -4b20a8110e753d6129c9dbba86fb5581dd9be7a021fb027f5f0ddb40bb111af0 -a019900edecabaf3d5cdf84981fe2a659cf9f95a7f1d5146a566cff83ec3523e -919d4a6ae54ac444e1e7f0a56746850186d8461721656b54bb784960b5251702 -33d92e8c89680f0c71ecdcba4b15152f2c933908449052c4b4ce617fea02a74b -b715828d499d2208d85ef7e45c08858bb344144802c885d102364e217253a739 -2f6442170b29f8e70b4b24bfa97c434038364a0c52084c204a09ea5d48873d0c -dbdc712312c582f9a8cb516a5aad8e30b591566389be57d444ee22bf80a06f76 -8530bb9cff7cba7b8374f091fa17ff0c1755d6917b073a2e167a82e381793592 -cfebf89561f0fdb63044f7636424bd0e406d622f957c740e6f0d3884702badd1 -2cfbb07a20558193c10e5cf372010a7955adf5d7e16e66c732ba52e3983026f0 -002b39b62b628dbbd44d467904e8726e79d79987812f07ef14465cbedaa19476 -5692fa39d503daf1f3f0a3ae881cfbf7c6a0e4ec54d7d0572d810f8861dcac41 -e4efe176c5219721911c8ad2b3985328d49e4cc4380892a6f108c62d711a8d9a -c44c46936b90e4d1e6fc9cb7d01a6812d11a5bb0eabf497d0d3b1eb09c2cbe15 -823ed1791d2199481c08c1f284bf72d428650319b881fcf79934c5ee86885b40 -cc6240cb1f8d80b0c8f221d8ca58c228d6da93de005b11c15fecd9450293e3cd -5005cf191803a161dca15fc2d187f22ecee8335d58f21f69d15fbbe3c1aa3d59 -5a142f8c3dcb7fa934830423f072b0d7d5613c148a28806085bb7c18a8c53c6e -43821aa5cff8497822b48cb09ab2eca0fff054299726499124f7b25973cb9c80 -936aece707b66985d7bc56f2980444cf3b1ce6a462a5b78ec05a036ba12e479b -cfad5953786ced3f29d5f6e5b33ed9d46901de314e87b831c376a21ff4c8385d -175aa0568b1ebc5f890a213483cd218194e15bdc61d51feac0401432859b5dcd -253395df487a1ffaa708a64ce045ebf6c6dbb4c9acc91db63a3bc1680a697538 -f342ae8b6e022b1a4d77293f596365503d5aa34712345d613e92a3b214cccec2 -a40d0e3a80e85caea6fa0145a6489e65a252ce407fb0a3e1f6ce12d4ff4737ab -514065a7a791f8d33df8d52849ff5d97bfc8dba6568fb51667cd3f0179ec89c1 -0d656aa50b2ff5305168af18f77a28ac8573d8cbd277f8bc08482cc0f23bbfc3 -c62c400c5f064143fc73b04fe2ea7d48f823dd9631968048820d81e97f2d6046 -992d89770073b795682fe2fa6a9356ef89cddbd94e66c7a61bc6d3a3fc629643 -2d576a90d30cd1fbcf3d511e03374ca758a245fb43ef5dd1dba49072a627e35c -10f831569b3b1d57f8857aa5c7eb7c0a9767bdc44d734d3f0794716b23f64831 -0af49c83e5aeb12dedf627af214c7c48f325f1102545981025d38fa0bb579388 -cc5c94144f5643dcb8986714082941d358d35d2c8d8b3e5f731a9c7940e81a03 -e3407b740234a2e20f1a7ce7f32b57d5f25b1788bc242f732540f0344950a6bb -6bd5bfe7d1d62b1596c7ac5796ad727a47864aa730e4fe4b0b36154badca57a8 -3651d37f4344a6520c67b41b3ef31444399933ef13f053627d361d7b3e5bd1d4 -b94fee21034ca389bb4a6cd73c26021b23784bfa0bb621a17a13217d3cda2b68 -284f41b869b70ee24a3acf909a67686eb95805c8e7ef912d0dbd5c3eafd377f6 -7f94b76bd18f35684f9c4fefaef7829534900b301a0eb3557a73fac07a977f81 -b55ac50a1386c7d6a4019a8c3bec9bac1d1d54e68e53e15bc58348207fa58bd9 -89a20e2f3396354723aa3c823a957a133286080fbc124a11a42f416207ae673c -0773c54007f9420f92c6bce228f5c93248e4bf7bcb85bb79fc6694ed1bb7e43e -219b996905f6501948d0575358667e52445ee9665035904804d45cf926d91828 -8f1398b668941950ac0bb6fe53bcfc9fda2945245aedcbd07cf07f85a7981b4c -e9e84139a46ddac48b8421fe99aeb64ea97f954b758175433e584d60cffacafc -915b856e26dd41e000c1162f76d185f469d3271887505811e12e1558d1ecc456 -2de5bf7aa4c26cab047001afae3c5d3ec9cee9dd0b5edebeacc765924ba00624 -ec49223ca7be92cac4583509aff3016bcc446e14b5dd7d9a39007b5d222f70b0 -a977e0192e6080160412b520a8e72f7bc93737e344f1c99acb3630aeac72d60d -344d5ca010e962de47cda71d704587d266d0e584e17917cf528623677da03619 -813bcbd6d360d945068e74f8eedb6aebf69c6e2d2158b050dc402d55fddf451a -d0c1a407154b04a5904b6987662af27231cf49118603a4e5de4d0b5ab40c7ccc -71847ea1f330b2a54ce9cf1abdd13208a6494d36c3fad5cbedf46d423bb07e72 -8188f9bf937e0db8d8566efd8e056acdc3f5689c8e19a27be166a0edb07bba64 -3ea6b53c4632ae33e0616222a54391b8cca32d7889f95f0039152b8dcce8ffaf -c0ccd4310fc6dca19b0bb994ee62e8085f3989737619c8c516f7a6a25f9e9887 -fd60a30ccea017e50ebd5a2c32c553d0188cfa26796ab530acbb3eb090f88401 -12f6a52f0ca684d55ca2d414a36228d88a20b2eec02d182392f0924987cf72ac -92897708af33bdcdb18c7437d103fe4a96dceef7788284878b4876333de5af76 -4617fcdd491c5c8095d19cd920dd3ad8b5b71a375f49520bbb6355eac3a188d4 -fbdcd55619ec3b6305f50d818f6ee5b5ae92dfe5a7f4f209e9f3ccbedcdeb78a -e0d055c3729429e9ed3787b52545d480b5380e839374983b6224dfc56bc8bed1 -47c1a8e7dfcb285aa1db7716164cb63bdab011797c1a9bc76e73ab86958f325a -7b7e15e987e90622824f2a12a220893f47737fe5b5496696e7772e50a8cada3b -8c826724115a236c082389390fbd27b6c3bb10684cc720dcd875595b39a47196 -058b06758e80443175359c3402e4e84ab850e42415516a19f6d10ba52369884b -e3fa91eb9a38d3aa07b0aa9294b7301faca79b4a601e92428026c70a7c6300d3 -ec7256768b257ffebb593eb497cde45d9acb4b44cfdc6452ac1f9f612af2c5c0 -be0952971025e5919fe3836a145be9e264a8c7c36c658f2ccd1acc9bb96a87f3 -a84acaad0a05f932907451ef8d050bef2f693726396152031b1f796103ee26c7 -0551f75a9334d8fcad954997d05e932c9f1f3a96e74c44e04fd18714a03d486f -1cf8ba0688599fc8e6524e4d9beb6816a4e2030d8ea06a3fc50183abad196668 -f15bfa80281fdcca6436b04ca4312e7feee8ce08ccbf90b1638b9fb57db07975 -5115f9fbc599449bb101a7709fdfba691318060f52ba610b818a849d50d2b11f -bb0d8b5f859ec9ed3ece36411d3d58d58f14827b14cd5c2a0ec4dce72a73c452 -0e1dab33aa33ca4cd3dfdb103c5579bdf0506853a7d08821ce69d4614d1a7c67 -9e9e9294526b50cc284adf3eb0cac4f6df491756f1216105e5c25d898c70edac -dfe0ade3d98daa6c07f6b2f04d3cb19d108d63b432ba6db41e68121250e5ebea -3d85b413afc8d87b934d14a663a62b4b18841b78f5965eb483631b4232cdf87f -c3159b354b6f70c2b595f46f43fca2a19667b0f91f5ec7a31972b10462a6e83d -5affa53f7c8e4b30436f7da31b6c41b831b30f9d98034708f1c5c3e34c451bc3 -9aaff97ae2c477748c7f96afdca8655c9dbd84f30bc1b568c3f9b6f495f17e18 -8ce2286696cce2367abcdb42e4000dbae8bed2d6d187b7e9fd616a17df7bb16d -ddad03b29d51489c5092e032b6ec2f365774810771e2b03ce94f5b97cec5a896 -086909f0dd481c8028a720977fc8fbf5aa62f6cfd91a798210fdf28b3df8f4f3 -937e7306048dda7c69aa5f4912e7c6192e72b1e9700a3fe380b3c9b63fb3153d -48787b1da476fd22e986874e123e30e532167bb3f17323094fc84143ccb8d7c8 -b5ef54126bd9d5e3eac00459b3636803a6dd2b3673ee865b1fc2828ae38b74fd -8c0e3fdac44f7c5111d6ba2661dbc47a0d13e751b10de1e1346633efa2607a7a -d1db1a062202c4facd05e829e37661014675f2df3775d88fe44e7ddbb3aea3ec -27d7b4bf413d54ddbe1957cff63a267bcb8ef99c27280879f5aed3b55c288e31 -2d3bf0c631894b30e0c3c8179f277cc63a395d98b66f99a87351550545dfa98c -ae027ee68d26c098d586537a2b3f0ae3de112aad1ea133adb4bbf5fec1f1472a -b941aa2db1318cf1dabfa8ee0a184398f9dbb7e6d29229830fe091b487f04d8f -f7d1daee5253cb84fbe492a4d1e117bbd9107f9ec521d924f115441f3abe6644 -6a1d4ced84caffd29e221c1e42c7379ff700abe131de0f363226a90abfb0401e -970dd4a2727eadb374f5e933ee1a11e9e85a9740e0b9a850f3eda6e904770f69 -bc3edbd52ffacc16513d4eeaaa948e533a8d693d184660dd89ff3f945ccd2d5f -602cc243ab739b4d488e2577e58648d78716fad157fbb814e0c7991764a3e0bf -9d6da3925e634a1fb3d6de50b563d90dc8ae3be33c6369a1a96ba6fb8c16f2a0 -db154373adff4e920c0b32ec6aee55887d4670a2c2340a12556e5b9d688fc299 -283e19469a14a8068efa9b489522e2f44c293278d138c732129aa7d97a8ee41c -30d2f40e8a7e241ce4d1596e6a1cd065e90167a52aedd2635e7465144df866e9 -9dac70f78425c9e68340ea5d19ad3d0fa0f944d2ad489911eb5abebd7b48bb95 -6e8ac0948aa564552395de41aa2a72646fb369ae9d08958f759afc10185bab4b -34349c12294abc6802bb1ebe3357f3b0c0ca227067f3768e57dbca68c2d1955f -5d18a7be0b9805fc2bc4b3287ef1a9d16350e5997f642ed6a9bbf46a68aa0ba0 -80102f020e5a331fdf8217fc1bf0da21ea7f20e9be95c1b59fbb458e4a5cb47d -b38fb3a3c0ceac39788794e47ecdd42b81c5f8dc6b6e9af7349babc8fa79fc77 -df3b5b303aa5dd5a2949ceac2fd202423a918f8355253f20cd86d49d8ac956b0 -2993c270fe41c6c7c4fba75b10a777191f33618e4158dd046c5ba0b145a0b04e -18a5f4ca5a7662bf6b913975d6fa9b4d1e6b71f0eca1029ed9440c91edb1d246 -7657d9ecfd8981eacd537757a8baa5318631c688d1d865d9645b4e52ccb9db3d -6549a792a1f207df608b6278dec2956a2b00aa3783630f6c516d448daccf72c5 -3557436ae09b66e0ef1f1156945afa125eae9ced158b8301f19efb2daa86a71a -fce1b319f87f0955fb113973adeb7f175590020beaa16db43bb361fec1dcf3c4 -d21a58d9d01f40b86f5059c437ecf83367ea8acb91baf187e03fc51cbf4c07a6 -74c5f63e7c7f8400c171f93ac7d3de26d141938cfbd6163240565995f44a6254 -c840c1b4bd66f05c2c08b55747540d267deeb6673f1ed54ac99ba83d15d6354b -1df05680bb93b9237883261a3a475b138373c573efef4011f042102289a50dc3 -1eac543df910695b1971d03c256f258ca48878e6c1f3170017e3ee97b9b705ad -2241ac927a86b4a44f05f37d260f451c0fb10daed031d67872764fa273a95c18 -3e9be8497c3f68236f32027f8c01fd707d2cbdd339b07dfaef35f9efa1d43a24 -5aba59558c3c0b172e30c3a64ed18c9eb7141a00f8862583cc9ab16b9184e099 -10ff30eaf0638988cf54d6e40e2a0ff8e5832cef7dc239ee90fd1eb079d0345d -cdce0a6d9ec621dc6ea7aec3eee09eaa05cb6505865b90274fa890bb64d19d74 -a618a951e3b6e74ae3c65c84cb5d48ffe4ecb86c859cce068c1665c7aa9d982b -951b95e10c6ec1dff747ebb981b380056d9ec5125ce14266bf81036a581aa8f2 -3d76432c7e846bc7d737ef0f3b91262e7cbba277966545940c67cf4feb14682b -f557e45e6f44b120c90862f3f1da74e9b0b35571cca2c2860168821289d2f836 -897569d072774cecefb2ceb1f55460ea5aeb252a2a9f653c8b646dabb7d1dd53 -1e1da1c098cc5e5e41893944ebc6da81ce44d8096813f4323e97badbf6c2a118 -942e44874e63004f7b925d6f5b3a15a42c6808062eed0880a8893c816dedf674 -96f49c25ca5f2bb1f1f49b178490c1ec6aec6bb3590005f40f339c7efaac56a8 -8f132f9943edabb2fd1f3b8b1ca97c90d376f5f62c5ec6b3aa6c88ea7bb28eb8 -687e8d24498ce4c7cc7c2dc4c60beadab36d50f0705606c4777be8f391b78560 -56c87740ed507a3c4aec3c115f837de4a620b2b8a028e9ce52213f3e7c425e0c -a2756efdfd243e55e094020fc74b820530051c414a32129cea783402238efa46 -b98348ad5cbf27b1137ba5d7ac1ea2d6e8df85908325f75bfc130bbf0b1056f0 -f1815bda877bf922f7f71488cd63f22107ab224da5af9f0bd07526df7b78ea18 -223eea608cb614bd38228782a8f6dd42d559a894b814f08f9120ba314fc85d80 -0b6909c98735b0bea839012811ecda1b5ac66974262a232eb06daf952b70e07b -b417767fd420961262fc68c7f9c4084fc324d1b7c9550db0c3aa665cccdf684e -f077cf33dc707a148e325dd3fcefb13b3d531849202f83a7909406c1f2190623 -658c0f9e483b8ec4379f43360f31c1c259f4a8dd369405affa2fd4ff1fc6bf7c -57be200df6f16d82fe62f9daa00d10bfb79fe0351c7d5044bb6e6ef64914651e -c046e9a6e9544e7fb5a983007a59dc78efacd8bac06dc49148d0df947b24db81 -551c6e8d05a75dbad023f1c600f6455eb1783aee8e2841b63659c57bc309605f -e21524b5b59865ec7eaf6df1cac0032b10b9736da197620b86125db8a97f6d7e -8e305f92b4912641b692bfd1b98193967d2847edf3c7e1efcee96b1239cdd35f -f4c843564827f9f5adc858ba2b911637205a9fa8312675d021b259f56342e9b3 -95d3ebf837e945c7f08494fc2960b92f7f6bba9bc2f5455b5582fd670e6500dd -ce38653d5dec5497726c15f3ddf885302a430f9b7946bb9ab2d9efb3c3f81ad0 -2394aa54141e3849b5ed816a717044bab44eac003a8095bc03e6b6b11cdec77e -979fecf2e780afa121e03278fc99d25c0bd241c657558ad88128f0ba7fa7482e -e6f643bceee670e0bdd932290624086df2198ca3bcdbb976379edc7204607f8d -b0f6457b3bcac7eba6513e9b8dcf6a47c075e7418b0cade13c43180970d4ba6e -fcf574c4f9da83b289a7a6d2a495b6ff32316b905f878579ed5565f7509437fa -02a28c87083fda09105649beeee44fd1a80b0092f064f7600d3bea4c549e914a -d8d595d8a278aeb78b5751eb2feb3b8099ae0495eceedbd747361df15659a9c6 -4718304f7780a881472317605a38a9c3f7a39e03fb7169390a5282acdac387d8 -88fa9ac46d3885e65be61519c131016d65f85bd2d1d6b321ed9bdb5f7210c4f3 -62254ceb44ce75e79d8aebb96654a28e96be766c19439e26ffef7f185bf62856 -b0fde276533cc68618b17221426f86406a5b0c999f7468d764dd92a632bc5998 -ce34724e7ddebb53e9c125a2be5b2712d029afdba0ff9826583fd261c85a7951 -7e0c89058d87e2105ddd8ba7e277e9bcb1cea56d64f2ddb3a3e92751d718e18a -e8eb8d55d1a35edaff938c5f6d95ec089c727953c3ff6de24f7fcdb38cf73ab4 -1ebe06a67ad901ba536ee1d5b208b86e692498215075abc3af597dbf93aa87b5 -84876a167d593c5fc0c487235b6cd349d3edaab4265da66f7c4ee4967768fd89 -c7c28a64c97e20c3a34973b9142314a1511a6fc6deb13dd451ef69710513f18d -d1c960e712d73b1db1e8e534096c255c63987ab4d32e1a8bfe145777fd1ca548 -762f7b4f7447d03a61e770c12ace3860c6189b3d0e41f0551cf722cb3dc09073 -f0567d0be9f39e8bfb0f338d6efd8e1279cbd43f6c4a063819aca553c54aa234 -6eb9d433c5426bcb9b81ce88b557a2d59bc7863397a9994dd6bfd6c7c7faac38 -0b128642a86241bbf8a4ffe9887758f94a153d6b2c138442c5ae670fb50218d1 -fd57d841af8f328b33173e4b8ac9b6db3006741eb323a502045702eede107dfc -bd4081770e3d07dcf9cfccb7e56e3f0c7da3767ac373a12f3164f81b493f12d5 -49ac50605430dafcbd4a9f49edca82b594ff829ed3bae596a825a618d49a96a1 -6b61f8e8b0e5b3fa032561747b96fa1935d74d0130ae01accb3da668a887f6d0 -9741836de17dabb950d84738dc5ff722838b507dfa7f4a88de4d9aab12ff9a34 -1db27abb24fb8686161443341a975cc810ad1a7e352037dafc33682a5556e6fe -46bcd08277461c74caf2ec1ca2db253d82dc72ffcf5cd471900b7c0f2390aaa4 -eb6196020e305edce04643a2faaa4fa9df91d3e21121da099ce25975d4c950df -f59f5e4ca3f426af7b33b958ed1ff3e1d1970eea0b97da7212e8a42124372638 -cffdb6c5dac17629c3d04ff2344df5cb39f6f156b6b8a4bf38c77d421a26ed40 -eb2e4e1d274ce7b5934c69506c1705ad076c58ccc5e27c580ec2dd978dd1074d -286163d79baf91e3ff30a507cf1c1691f60e28c780b8f2b2cd7a66e18413094d -d4381a15cc3a2b8ca189320df07dd3a25580dcdf91a2b33b3d8fc89ce71cc087 -8c0d5d4fd12545bdc7fe4af1b9cba1652dc8c076df6dd029ad8b09d75631b4de -63b3ee38b3d133d0d3b7d6c991cbae09a8aca77ad4e0351ad54d2a4a1a2c84b6 -2a8dc9646ea4cfd1b66af0707eb5fcffa78223898c0f377ad55e5657661bc1de -e331cbd9fec4677181d3577978ec08dbda4c684cd0266ce6d1e487cfac64ef84 -62873d034ad7d22518a7e767ba80e8514317710a71a228f76a66ad59b345c4db -f03e056eb6c9b2c444f2199c8488c037c37934d449f0049e14c588523d9acc78 -50538da9ea98e537418f811afb492818c285bdb80a31987b41a1671a77ab530e -be57d8b71b6f9c95f7474faec60705c2132010887ad668b1d7d53e26b480590c -28367553ef4cd87ee973a99346fbd55a2ab67635dbf2df12d4ced638b733a921 -4da2b898cbd41632807b34fafda648b3c1f53d0e5c835b0cd3803ccb34a447b7 -6a5bca240cb0b1db849d40dce5fc8f2e3f711ff47e7b0e1a71cabbcb4c42e265 -1f482c194c301b4ffde9f787f9ac37c620ad634e7d1bee6bf1dc92acb38c1e6f -fc4f531f5e8959e55c5d6a97daf9b11841ee4b14c4ba58e7f0dc9aff440e2a5e -61b046b0d47d4ed606b4055077bfc0d7c033b3e4fb817a02be0891fa360b6205 -8cfabfa60198f426bb7ca31877e4273912547e1738446c2816ccc6b796898310 -ce86f1f01654cf02b7e6f647e9a884041655a76d9d646e2e0098b15123de9ece -8580c5e8b36946f2aecbd1922d21d15092617486d2a7da0419c430ff83a76428 -d183c15d0520b821c22e0aa806eaedd6df9392b6dd93db8f22072044883f7102 -dc2abf3ab094b1cff83bfafdbc0f115d1ca965885356039bd90c76a78bff2b7f -931ec1a762b750146183f4080b7161d9e313c90a3d0ba031dca89f5155ef2c77 -d1e9949d07a2a318ed5bb9f43ea2df854dd15c45c09595450b0cc355db139f6a -15792d516ffbf05d2ffde2ccb492bc5f8582c88695eb42ff075f1393d04e19e0 -5bbb51e286f578ee126792068106db3960ca7e7da8838c52381d1853e731f46a -fc759825cdfd1c50cca5e63e1a24a9d3eb21a032cd4333648ab4b6725ef7ee64 -4bc1c07206312e241ae8c4206f8d211752ac7cb76f2569e2213c113a3d4f2277 -2fb6c2df9461da1b36a0860cf2dd52ceba0cb8fa5134d94438458dc4ef566166 -0931f0a13a88452fabba8805471b38d776fcfc616c602f91ad0072b92a13da58 -08f716287712de4f6acc57630b3c4343c37c5156fb610f2455795cc9e6804de0 -c7b6b16da5b274460bdfaa1a5249a3219caa1dbda045ce35c3b34d628d0a6e04 -3935f09635d6063592dfee4e8713fb04a74e0bbf8bdd6efddd86d6eab693df65 -d7e71b96d3ab69d78763f6c06b6ee1fc2b8bfc274d33e58f7c13e46f884f64cd -2ff2091d63d8d0d2305704d42a18c353b55956f11057a920dc00a5c78ee5c61e -0ab73272866a3b5c6a46683cd4f761f267fc8e98a5ee0e55a9d8cba48cde5215 -c96d0fb18f757705697c13055d7f2af893a097b594fc5200a1fff0d231487f94 -c6217ad21609874754afb8de70a84f92eb3999ad348ee6baefb476097ff1cb8b -dafce224290bfaa04d3184d02ea2c8525232b1f62d8a3ebc5ed8d2aa1f7b009c -83d427e281551583ff6d1690692648d7e65e7c98b67c8d181ce0736f1518f150 -9c2b13ef0135118fadb78e58fb01f90fd846fd9e7fdea4a8cc481333305b1e95 -4d0037fdfb31d34bdaff1e1c0ad0f30683bfcb8510c30eca21008147a17589e7 -2a8b2971c2c6e8d45259be84e4884fa79791f7bc3abfd138b8b4556bb75e4f68 -bb934676f740e015396c5ddcd224834f53dcc17fb33bc79e15374249c1d06a1b -f20f3b29858ddb1cfd470449e098195aa1a64c187fbfe6488b89db49851bab87 -c77b617543570e105c27e7ac73583f02d0541afd6139ae5ebd8382464456731b -6779788412dfc026575e27a197c5295e3a261864c9aa91442ed12d3024db79cd -1025564f9cbf5686244000bf2caa92df14db97bd2a10535891ff3a84008209d9 -cad7566b8800ee7287ede867d79ecada749aa5e7ad22b01a9f211ab18e5f755e -6736bb2fdb47e4152aaf887aff350a7a74eb69430287afc58d46e2c171aba4cc -a01792b0dd4b0a67624d82b71b19c331e355a909eac5bb94802233e6e3310f97 -da3c5d40ea74ed3ce0d283233d1c5907fe29dad678a9c3309402167881d3daa7 -4e3fe4255ac1a73f15f90ddb601d827332115538f1bf93811a35b441e4442327 -d7fa2dd901f3d66b7e79e09f83f9bef5f5fe1c01fee76381ad3394861155cd08 -fdf2ec5778e4cba57acdefe6a35191c613cf12c946ad8b2b40b6026b5bd4b9cd -909d1779782f4af32d295b2e8f881a18d2cb0570104768449ee2e960f082921b -e9ad82731065b3c3ef18aba3f9beee050545d766b4bb012cb05e36c98916000b -22f7dd0d60090fd5812d9c7e0b7f109eeb4c225c9b6260f687a39429e4ee4dcb -2b1c5f8cfae108e005887b30a949df06bcfc34700b69a5103330e400e4666a1d -5c758b6d5c2ad8a733882ac3cf1e6a1395534c3a9300371d3992436227635313 -531d453ae6142bc47f086f805faae0543b21d52962343b25f64bd46ca8f63f25 -bec767324d38576447056a6f508efb68e491af661b46f7ba81da215fe797a16e -f03cfa53db0b51e39a7c71897ac5ba31d902964aaf3b148e7ada10fb7603d4c9 -b1585312db95625d45a286228dbe2217d6bba65c9a7dcbbdb7bacb5beefa3c8a -43f848f473d9bf37abe92a2ca91d26707ac230f577f7a1618a02d2dca08bb84b -3343f9175ebb3e89b36a46eb75b83b62df50b0108d6118f790dabbde765d53b2 -7cac6abe7b5440325adee21be51b9367eb9cdf8fed87a081679e7ae6aefbb6e6 -589cc42556fd865f312b54cff53284cdf8b442c4b3326eeb8d39abb1e0d2e95b -316e87b7615b0c37e908d4391f1ad9d2715e94bf8de57a1c624512c23fba4d51 -9150b26a4f13be2e9ced538d80ef807612d561dc8d3f5b602f4886b8c9f2466c -5c948ec6dae5b87d00c03caff6c7c241f4b965a6c6368a30013ee2ad5e1e5000 -94308aecc238f659e736965842b290ade6f05b5152a27fbde7a90fd97cd59509 -f5f05fab13461bd7374399bc6da554acd718e4f67d8696718facf56d5ac10468 -cac7833ba92c74bf186ec50fdbb043223974986e2012c1d18df40f5a9c52fd39 -97df5f9e5f3a827d50b6ebd6909e7a0de29fb97920a03e32422cd71d66bf5c52 -357a8d8eb241c6c8be42b67cfac2c3777a0fa43d2838db8250e2b5b8efd3c367 -80b19339332f67d477cd3600b04c05b87b7a41d0def6bf82fada771804a5a756 -bec34265b6fc9e11790f8d1306d36c0514f6bcc76e93b584bdf86384ac22a96e -31549eec68909fd34bfcc467cc742dfa628b15abb7aa6a181dc3ac0fd08a2097 -9480abc06fcfbd81e7d4ea358839db58c30c3a7eb5d698cca371f7630939149e -b897b24f6d957c084cf0e2932331fb5c0b501068b4551812a9b9abd4ec27df7c -e824d672ffe6e5971ecf816f447482130819902d26039390f84fb513d2d89662 -defd5725eb153a074c84dab1d4d666d6e1a4ae2b078ac16f80caa6314a1f63fb -6d7eb530ccd833ee1f4946790344ca86668cb3de69c3013c73c971d7bf583095 -539dbe02e8f18e2da3bf9fde9cc5a5e859f9e5bac8721e36a1d50192140ed21f -a6fcc212ed167a50e940b38a0ab78d3053507500d768d1ea9c7bcc7b3100a05d -1db9350ee33c7a492f4543b45e25740aa99a76a1dc7940b8b52883974b07a407 -df7560cdf1b103c75746fcfc418580816597424c0aa36e0dd38eaf524e593512 -174a0ebcac0488958b01c1199d786f93ccefc14d219b2dbabd5b50c57ac6c195 -fe51a6fac81db1fae5052f21b3af4ce8280bdeb5f27e15f069ece57b0b628858 -947ebcf41c69d0c023d67cd21b9e0db1366ba5abebfb9c98752a6c63cf1c8333 -d7185403199b82e9e5fa15d33e646e63459352f829fc039ef185e004cc63fe21 -bfbeee4c8102cef70f56aab4e35c4a7ad51c85d985f42d54e4cf5678ba7ef4bb -3c768056fd223fbd6ae0a390e0e7489f5582d4ad805a6ed2e5cc0502be6f58ce -b1e3de8cd4425a053f84ff85ca7a1b9c679b9b57457f91c441d9289469255452 -34c45d58ae796a7f21b960c8dd3195854ff59e6914dcca262af6e5db7f150976 -b91527a1f0f00caa0953e082f5dfea46c0029bed4eff22be6a32a9bb591334b1 -68da599128f4b31034e20c0efd5e532b9ded85e5633ae8631e83ec1d6069ff76 -aa302b99f88e0e4070e4b93e1cfe528123928ae67733bf6fe6068c22328f16ae -3fa5b130d9651b531ea4e197ae3d3c16948503f1842d967eb3c5504e13986933 -cc0a3228269139d68aaf3480875149e25acd6aa8e14f5c21fd12096e274a1cb1 -223159ae0b531804c1a8f8dbb9101d3d0e435292f0452990ac4a646058651025 -3ed58cc6fc71eea6ea99c6f96f029b65f1c24cf911a35076564cef64dbbf82f8 -7de0c4f2faf3e56a1659d2b56dda42a3f63e277645b9bcd5c92c05c8b05adf75 -35b3aa4c341358c7c7927b8e9937c087e5e142b14dbe5e5f709634ae97bc9f2a -a82a2f3c3dc16b1abbd1e3f33559f8670e1dc70a9e3b0b717ea458518357740b -75a9b2b9cb076e81bb95d786d4720dd59120200dfe860b6e40f2c723dadb84ba -e83a80a7c874b9d36a1843d3ab1dc330eb986d25d6e036940f89670cd41d7ff2 -0a9e19ee36a1c334c779093950bea2854369f4ef24dde7b17e4581c9c2f5e5d7 -49bfc7a6a9433ef9dc465362bb2b252d7505369b40ab4ed1280c690599765d3f -6c395d4f3955dc9e7adcacd0f85b34e33c1d5b0da79e54132e115002728fbcc9 -def9ad99c3c72ef5fb77d883f47e417bd26cc8a13824297bbe6102cf7f60013b -3410e61d06f4d9afe6d9eafc92b97459a0433a8928fd24240f6f3e388373efac -1bedcb5dad56b55d248dfa546329ce77f4f94c388362e836195638066d636a1e -9de34a86088831a498a52821e2843d704bc01d386e7f268855af107ab35982b5 -9a474a271c205b19ef717c66cdcfff8e53e207c2c1fbfb8129f045f0c150a053 -33787d5dd2d7322b3ec6f9193a891c3c1b414f27fea3635a1c1d88c21c18cdc9 -1805f3214e8536500b67ac22ee4fc1aaf6a12be4f8fe82e021a734937f0a05eb -3de81d728121fa862a4993320c1fafb719ef1851929ac2efbe7c1e8d2a3e35b2 -5dbe28dac5ddce834663b196e17be78fef40be1ff3885293dc9b6db2a7973408 -0730556c0b64d66176078983b062cb073d32000e12e8cce47ff23f877078b5a4 -2207a050c62e39733bcdf87f6b71e39758f531cf55a874fe76548ccf8ecd227d -9c0d76da8f0ea5b1971e71559203f2c731bf31f9563a58d6d110ea507bb7734d -3baa443805c67207f3337ffe88e0a052eab7b73296e7011fbebc3984abf53382 -1f38a1483b88eed29606b25619acf5e21e6764dfac4559e8ab2e8b987c05cb3f -23f7a9b18fc54c10e59b1dce3e3bee7299f9e98cb58df0fb48aa79c6b87476e4 -bcb73de1eb9603cef10b6ff191174e23741cfc9711ee68311a8e739dc52a1b69 -b6bd1afd81df4f6b1ae5df916faf6c6fa778f9330059fb88b5e97ba8b864e485 -b2747a1a7cf32e259ab7737530e55b2fe980ccc088c3f5e2815e960beaa9ecad -530436a2c0b86f3c3aef098a8dd927ad13f9ff34b87a1a9f07f455b913cf1147 -270acc6db471e53dc3715cff25ac42d6786c3e9d90ea77873b301cab084b1472 -71c0cdd6e088bf710114ac00e1d6d215e5445605034b771390d0ff76d2f7dc34 -1a065f905f258d223b -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark diff --git a/client/nfsexport/lib/fonts/courb.pfa b/client/nfsexport/lib/fonts/courb.pfa deleted file mode 100755 index 795ec5ce..00000000 --- a/client/nfsexport/lib/fonts/courb.pfa +++ /dev/null @@ -1,1966 +0,0 @@ -%!PS-AdobeFont-1.0: Courier-Bold 001.003 -%%CreationDate: Tue Sep 17 16:48:30 1991 -%%VMusage: 58156 77080 -%% Copyright International Business Machines,Corp. 1991 -%% IBM Courier is a Trademark of the IBM Corporation. -11 dict begin -/FontInfo 10 dict dup begin -/version (001.003) readonly def -/Notice (Copyright (c) IBM Corporation 1990,1991. IBM Courier is a Trademark of the IBM Corporation.) readonly def -/Copyright (Copyright (c) IBM Corporation 1990,1991.) readonly def -/FullName (Courier Bold) readonly def -/FamilyName (Courier) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0 def -/isFixedPitch true def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /Courier-Bold def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/UniqueID 263788 def -/FontBBox{-48 -288 746 847}readonly def -currentdict end -currentfile eexec -f0e992e2abe69f26883d6a2f691cc4ffeaadae4ed96950027b000a0e04f88bf3 -07a055997fc4400b46368da1c0f572a6e1e58371f4770d8e09ba6f39d5948f18 -de1038883553c352f8e6add2a9df060927fcda05454a5bce5badc6153a92a950 -b91e671de818c860c77eb6b93cabe55b175ae8265971df2c78d5dc3bb7a23a3b -5eb80699e4f540d2aa0774262097e2f171f03b3f8143143f7f192c7c3ea4b3b0 -d0bfe6893744a6ef8f3fe2071efdd77eb2ed6a1f8365d33ea9a2e3baccbf0886 -890dbe8fd6ec2d9db9b8a11d6f0c2a5ee4b84b2ed02498706a8c6fda02e1ac8a -e43fe22852111c257d9da8a8d69c9fa405341c435bb91cf627e7ced2e96614bc -ff826d0ceae4942a5c8ca794b11bd2bd48dea7cea631afa4f7c52cc775c70f17 -4c36dd977c5cf62ef80ae874fe87bf798674a7b32d84da7c9557f87c4c8b7b6a -a061b8d1f83190fb4df552d2742fd99986e3e33a9a4c578d90637f42d84cd9ff -0e866d419216ac5de7308e8b98bf17ff95383454d45ccf07e90cb1a0ce3b51a9 -dd88c2e2b3dd662cc745bb5b4ec33418a1e4cf6c9a528e6c283c34b24da3eb52 -4431c4da3cb34a43339c606956778e666815be262bd069b1b5103abcb91f1524 -5bf33428d6cc1d3e146f0c711336b471bbfaaddb4e1951c8325801c2898c6dbe -b5d96418513226315c9c8bcee2f3ebc1117d5e136d8119839aefb2c76d8c8a37 -cea1d23467717a8398f2437f1e61a2dde224f07e835e67950bab0542fa635ca9 -9c457e420ecfd17797a5ac7d63b003e4bf6851400b5a9431d9e4746525107c4e -4529224ad6f666c7b4e8419a3630ffddc5eabfc0e3f1c089004b79b6ffc45d19 -7087ce92f5691dcaae4223416a9bb4836b5e4d3963dba28445d81ffa93d59c14 -96a8bebb0dd93230a8fe36bd1a4e31d3be4818c99815e7ae26023e5c68fbd21b -334b178ad4989c333c37de8f821bfbbacabeaaf49a38e875a6fd13ea6fe45235 -c96be719db5725ec6e507e1a64daa56bafd017460730b9befe29bb27115968b7 -241f56bbe5e1c787f3ffb590da9c3965c184cc5f94aeff1ea7b0a013caab3bd1 -c4d41e2f61ab5e2eaf1e9c075ca3dc040f988ffcb815622c7e0c31ed670a9aff -3833cc7707c2887f0de43a590344a70e014cc67dee79bedee7ae796448e61c74 -02f2f7e72f5db644c2fbc093f5ff5d6a787194de10423849768a48d56103bddc -598699a43094dabd1934e8ddeb284b9651b9ed215c9e3b5a63ac766e29e7f0cd -2a4f010df4b1114115ce819af6706107be602a21d002e1c45cfcdb568a1c617a -68c25f2e3e0781192c7ed85f449b56caee4ba991e1376ab43c1c556708e65797 -ad13dadd61ebfcdc57dbb59771fb0c8f0b4b829b6b4a575f17da658fdc2a261b -87fa8d8f39540f3b9a0cf46b59341ad320f37d71a8a9811f5f24b307ca32ff6d -e80b35ac8262334afed2567d691d0ffd933b26b977ab624d2757ef20e9ecc3f6 -8b0bb17594fad3c27fadd8487b441fd520c8feae3b22646d71073bf43ce3597e -6063e073db9ab0ab98128b97a84482edff091bc809452f0b2a37b26e5f9963f7 -118dd4f78d097efb864a5495f0104674564227145d923fbf39d1e85c78c8f92a -e316bd6b70231733d39c10590c070d173c7a4d10e08e63303a77206dcf01746b -1f78cdc44e06a26191024686d64436e519ad103349fa496e4159b3a436bde5e4 -20bcfde3d3cf24f50a1a625ee6274576104a3ec62c0abfbb14bf6dd280559160 -887cda1b88edb9dc2496813cc21e7e26fd42fb6770df364096d34cb66ccf8a40 -af4530facc5dfc5a672f5c893ee33e85a88113f2f19d1a40dfdbd2c1f7e132ed -3a2607569db81e7558b536d131dbc71f55cfcecb31137b0d807cb90b2df7eea7 -6e7790d59d7ea4fddd66247058ace1d33f6d8cbdff99be2840fca3727307ef96 -3e19cf0f08e953c85c4141bfdd8b6f6d942389ca120969c69f35c10738f5bda9 -b872253532604e5058fecc5ac4b911b3602546ea3a3b5f84dde99316fff9c1d6 -08b59bad54015883cf8cfc01f9828b9ce335aa26dcb5c6f445770d0fde2df51b -83a128c79d7a1351e6da950c256bf97c69f73e7161692c192778d3d361149c40 -9c27e97562b7e2ca2f0a498818571fc7eb9552542bf56c93862aa9e06839d169 -ad983d0a370b0655d45260568ebd3cc272c344a3d0697e05e27641fffbcb13e1 -aabdd1cf7f24a5d550700c9129b392746103afb0ab72e0f0305ee21eec6d54ca -bb0e5d92b7493719bce7ec85b3f683ceccee4fcfffc7d127ee6e8f76e7ab578f -80933ae97405f4e25b793eeac86057448882c70e3497d430f8e6af1246a38a42 -0231a4f8bc095b87ebdbf6b6e5f0e9e824595835e06224fd549b55dab5d72511 -a8829822fbe050dc7b9d952a1a8274eeec665a7cd924718bdc21747e43ae8cd0 -acccb305a78f6c201916d5db4efd23a890826b74b9402f141de37d254d7656e1 -093cdce592272ab46e2c9dee9c100e7fd1f3a558ab7eae233b167b447bfb56d4 -becc14a403850a481eb75b554adddc89e1e2d0c1a5ecca30f7c2183cebae411a -28ddbe48777e38e16bb02e1f62d1f9a090427f47a5da5bf867c04ae679617439 -b4674e92d80f659734b10d62ac5fcf1d0aec16297c11ba085eeab1c4a7017cb3 -d9653f6e8f77056074e3933e65ffa2b08acfc8b90599ed85f5d91818b80bba55 -6c05cd944be5e6d76e00f6df048992c4b293b83fe275cf4231cf0648f26a0d28 -0593ccb41a92b97c24a39de7886ba7f53924743fb66baa4c01ee21a16c66561d -4fd8cfd7a7e7f4386cb6d818277efb779b2b219adbebdae898083d26d561e797 -14553ff7b1df6523f5c50c8d7d4bde22a4c220f77d9c3416709dd5c4c6a2baef -71c8a7f65eec53d15ce0112e745418467e49172fc5cb0d5df2c000b3da184ddc -9a3b24e4e4c919717c9e348a1a5665d06ee268303c11ddc16078fa8424796663 -eaa26915db69cc77126df2d80dde5beeb879b9c23ff1acea4dd0584f45ddb29f -bca6f48dcd420b2fa5e81dfb3be958c18bccfe7c6a61016614017745a0f10a03 -ad4f56e670ce0a98a227feb9fb28b1b952c4b86bafbd9210ab745828533741b8 -4efed05f94d0aab602b37d7e9ea944138c541463621ce3ddf0ff99ae36f8b9e0 -c14ee7820eee3a45b8d69e8f65fd2288e6f1b7eec5c2a45822ef46148db12390 -e87c7a2708cf346e04f0bf81cb5623a92d17405cd0430df9d3b7cab3eb6115b1 -d18a1e8f3b56f1b93322cb091f1ad75e1e12b36f052592e6a0def7f5dd9e18fd -2f52ec209488ca7a954a04eaf4c6c50d2175657755512d43734ffd5a545cfbc6 -f9b1e740cc0d3a171f46d0bfa29a55287aef25886ff435f9921b714c0553f566 -fb8dcf761180c167b014b57ae4428ba4ca642c0a88226aaa4dd86f822e93f19d -3ddfa9f26b2a1079d87cd7b3c571f989b92ea58fd6661200664b36fdfb4afa4b -5169c09ff2182a2c973b8fd3db31d1eb306957cfc99b6ffc9c060cc2c77308ba -7f09373339b2a28eca14f263f91be194705f9b23915e2f6d68ffebdeb9b2da73 -ce80d19411dca457ca50870929f48c8d72badaf27fd8d64cbe2c1ce900cdbc35 -cab95fef9628f6c87fdb6c45e61e3c6b5bc15fb2583dcbce919786278ce3b691 -c0934f10c953d259848784fb9f325ee140f1c421d6d8a63ca4096c9c1ea6a5f8 -0476a9c4505129fde53639673371e803e60e3d337de079b2377d0bc9677734b1 -1188a98bf1d009d0e82d8e3d8817d465d568011a7c59fd2ffaae8d93379d124e -91b182018b5e50b8b7cb0cf1f914edc6b44b38419caf14bff525a4a5790e85d0 -0b7741cab4dc8711985ae161a253f878e51a453a8c4b0a6c84f533affdd0aac4 -3e6744f1e43904c009f4bf3d8a677d66659108b526ecdc0ad8a51d16de6f8001 -4efb474aaefc49626bf733937c1d25f17f3d30abd35e074527e26056b3b4e0d1 -d1787939b0c8e14edcb4061ea004993463249de82d73912bc435c4d792fae794 -7b99b3e1ab7e5e1018fbbf1003b9fa965d43593fd0aa1b568b593d9dae2f6acc -4a8b8d6d8b6b5d5fd2aecc392c7cb83588d250050dbed3b32df79de71ec1984c -e841adc77597be223a79a37ec8f5ac91b45f40943932bf30b77a82a2c62d874a -da8b86f910f1269ad594d5ff033724d3101098630d3728baf72fc281d13cde34 -fbdb8087c23d86fd0cce3ac530c5ebc086062ec32adc8fc2e5ed66f38d3b5a07 -d1f41fe240b3065bbd5f848d6c97f8b2ae149d07502166425d9285f9b9929100 -cc3b8c824c5ae124157f21d63c17d75990740c8e083540c0fdf55ab6a6128123 -894e6846d8f7098bc76ca1f696ecb31cfe5496ce20ee4859dac102bee4e9285b -2ee0d97409fe5fd5f7dab76118d8394d3c4e91fbc3a0bbbbf314d91671ea9206 -598129e121977b36e97a9e7cc3949bd6aa7e92e58ffdbecc7bfa8712277d2b8f -8e0f6e402e5e05b70db4d4d18b82a92dab7e712749b5632e62aaf26988f4ec20 -9755e47826073aa09c410741a8cae9ac19f0695f61db9552db60bd1d8dac78a5 -4a649f77461f7546fd35e33ae5c918d65418aca54cffedab20a86545a7d7970e -1ab75c12d09714a37fd516613f1e9ad1887aa3566000bf8a7c9751ae22ec3be5 -5f7e8c58229da2944051ad23625ec7b1c26e65d30de52ab5fee7a5d3184cdf0d -4acb0dd78ad3f79e2d6eecf19d8d45a18848611913336d25267ead7b1fae93a0 -c123c0dbc44f0178a8a1c31b8ca54827b34925b7b1432a029380e9571442a77a -aed4dd342f6bd1f1b773a4f1ad1c0d4c955a1faa001e2ffdeeadc86282e09c8a -ac6b9d886ffc443ed05966952482a7ef206e891c90b9dff910884ffee5c78de4 -ca40f6ce31bf465859c27c7b942246c43ca286dffcbb08ce12842f32175bfcb9 -21d324e0746ede76064849874534bdee62e99b2812d07314e76ea833e491b01b -7dc009f842e10b4876bae3f132f8ae3ac04304dbfdcb2785557e7b48c45d940a -45db8cdb374097a8c745ec7951e6e12ff3c51f0e0c8e7a82d3f77e90baa09658 -311167e0a688701bd62c3a598772e12c107deab4fc6ae3ce2b81659593e63734 -2bce989299c0cf8b815ec475e6b281e5d93725ab50f2881cd14588ba1cf800c1 -4656537f35711c98bd0d0fffd6fb6a1dbb5b8e3f3047d0ec60b902a64589594c -904f9e4ba36837f774951fafd3b9c99b0a7e643350fa50fe0d69723493507b57 -6dfb9c9befd7dad68d2a094abb1a7c19d8b89d6b5290af2f774dec10699beb25 -9fa0bfa8d76cffe9ccdd9a56e20dbd043bebcd61b4f8d795d6f273705ef0f664 -02ca640413e2b97f721d16ffcf103a49ca746d4f166b3a241a9d35edeff5fbb0 -19af2ea1e4ac319ed01a39ebfb2623dc69470d2c7bc38e876daecda4888ae494 -28e94d9377c2634402dc988423358bc949db18d55388126c982b5965a9ad5648 -c12f46f6e5e6518e323d685011fbb99c0456c4566ba542929d767c7bd154454d -75ddfa96c0e5a79c6bad3d0020556bda8b74e6199f327b0e17e5c3706c2adf05 -2007f91040a0f256b4d9748754638ff019afc766b12d937551b1814f28de13b9 -78344ae18668bd5f2792f7f12617043e40603d7474677f0b05967cc58a0ce610 -4c7e806f0646e6a631595384aba225d071848b176eba2a4232a2af75faef21b8 -cde74831d96c4682bc4c285ec5d4e1433b2750de64a9f42d0ee379908bccf699 -6baff1d5e115eb31e88aa4f123f4a9ab2ec71f3458001e53549a5bd512f27d50 -2f75d33db2732674738e98fd5562107aa071edf740e6fe4c3581f7f1a6bdea71 -11878ee1514d2a764770bca4a1db912ff98d26b7540915b03811844bb606fe66 -3d5de9f1b8ac6a46cb328b66151d5a7aafc5dbbef4931a94409ca6fa9b26c970 -f275431fbb91a35622d948fd939e56efb989f007b0d68b012a045ff725cde14f -9acc5df8b491f21ea3fc8b2b435eaee1ad74572cf52f1e913d44f4aef6df048c -00375d6734d0e829c0fed80358866c1988e3c09c7ef36f5ecfc0ed411e0b746f -6b04d7cb5f7134921969a2751074a3e33e9a7e2e68f501e66b71d3f68f7d736f -7c4cf241a6494045d87f7011a4a67279ac40d5ebd644e9fc56a97d5cdb31dc2f -f047589909a0a4517d6057e668f3594fef45bcdf30c854eaba5c1baad26e647a -097b4a0ab8538459ac97d822dda5827d96f29387b40f4b673bf3dff58b6845cd -3fa300b8cf4acd3e6301f5a47f1370c8bfb8bc8b3a961204e2fd696fda87c16e -30ac81f9d77634c5e8b19eeeaf9ecf43637aca16051acc7b63cf5b4fc157554d -e510d2a8f1c65369ce48c3233c445a0e4a81df26d68a2dcbdeee609e81affc6d -632d584b2d1e5939fb0eb3c6a7880ca593e99bb4d530445bf552e9f7fb0bb25b -b13a151832acb776c7768ee9bfb2d320c90d746df806bd755cf8604b2b0b8786 -052c5e8d2cb2f96c7876dff63f5ed31634ced7a1098d754895ac6f7e8f5f6a01 -494770c3a22cda0fad4411cd76fbc92b0c76335a9bb5b3818259e62383f6a1e8 -df4b1ce43717a343df9f91a5d2df077af4fade7cb9af6608804c08808ee2ac9e -dc25407c6e3ca02462b5d16e705f90b8fc64b7d8679f7d0de875b72f7c9c6a3d -b45e96e0ee3ee6f8cbf4c85f09746745ecbcf39ac3b7d6e52f3c5e79af0962f9 -91935435880d10ff0f00dcd7cf994af8c776700df9a07b6161f44d9d803300c0 -8fc227bad040c6658beb8bc4a51bb0adf41beb908d39a7d60137a43de5f1d97e -fa530897e71be24647b015cd2c76c0b0d1bd0f941499fe00ea4e09dd82910861 -e671f2f0c56f5d4a7f6f19999b4ed50426ce7085ff5ec9716f7393d604fb7387 -fe09bb5346a8cf2d054a7fd817e075e61961cdfcc9ff71d4651822ddc1fd05d0 -7d8a9d8d76da5391bd75ac047af65a351681baa87c9a6de0f1027cdf5266e68f -48a290aa2197ba3c66c575082319700a8527fe308c78cbb4d1e3a2543f9796dc -7105763fe7e57106179e22bf52aa25d472d6bffb0b906d24e788685b93211546 -0b97acf5adade19cd7cb6d9a5e7fe5012a3fa15e6e1b85648da877c1e3eadc9b -630d2b92f60189c1fc93a8d49b13c1b97714052b1976599f98dd697b9dd91a0a -06510ff600658fa9979cd633296db2a67a5d2d9c42fc530689167b7dce26ced0 -4d8a509f04a9cf65eba06ceac4c5e3644ca3280038626245666a2e0c19532c8c -720afd6d43b436a7ba1181ea34b3ac852481809ecebb4ded573b688e896ba021 -8a08eedf873e331fb7d57c2fb132c53f1fe70356eb0e8bc41368f966b3cb9272 -fb1f8e44c76f0b12c3bc79d848fbf93e55cd36eed1c09e800b2b8f53ab92d8d5 -2c6ef3fcdb64195f74eb7b8e7f2052affc111c48818d1e69fbbf38aad47e59e5 -45dbecd57c7c9a42007888fddd7dc740742d3ce06aa6370d8427a3924731ceb0 -6330390afe0853ab4646e48ccb5d49286ded1b38188a881c8af0808db19d39a4 -b3525226b5cdf3aa901217bef8a5392651e4fb4e8c1ef6dcb8faa406d7ba1d77 -4d13f87ff0c0064ff0fe0e3dcca2e79c124ec86ec13762b49208fc35bc0ffb92 -9b8a38465533f260166c6f488eddfa0be4b6d15b8b1b59acb4e8827655eccb02 -559e8b90b384d0f0115f7f44c7a6247f246500aad2fe475a6aba511a10d70650 -7e8035d4f83e33adac6e14fe40ecec89b632c06996f1d68e7a1655d69ac4f6fc -227aa5966547791a16d4416d785836b5a3724146a34324ec12a09cfd7519c05f -d395699da7086d56e701539e0363d71fd9b279027252c8ccfa7a3d25a41a9644 -7d4d92b7fad210143afb526389342e18b790671676367c6cb41c3417d75522f7 -2187d83b605bb6db3a695d6cca090cd353e23d0512c06e8810f0fbda1b19ea83 -ebbc1ffc7f90fdfd8ef644874a7468f121564c9b259ebc94ad0b69c83cca6e20 -11f4a698aa690893a2116e502e847f9b9990b5a4d3f533bfe5ee1b5436b2f692 -f6b5f6b779b4e59697ccd5c04e8c0464009c48bd105482773f873902bed5ca6c -b13a0d90c4ddb6ccc416b349ce7e2c8f91dc5219011ea6df871029ff22c7d10a -fc890880b9f13669c7a6a60da0f66e5474cc30ff1e12ab765aaed416318a8405 -15ac5c30d883903bc5c04fd20ed977e22482591a46c63ff11ccf18756c080377 -b4f72c4fd3b127700dfe7353adb29431a50ba9d0ccf764a450a9a57668095392 -d9f924832309bf16b8d17c0fe2e147b9afd086c605ed6998f9873b9136575722 -ea03bfe76571ddfe0c86a1b5ee8b3c0712a81b397b5e0e6068810b0ee52bc0cf -1ff6df62eafaca67e1f553316a7bcfeae787ac7bea86056fad39696b222e887c -b1aee0acb9e4093068661a6564292808535ca4c7b9271165c73eb89757db9438 -47e609ef5766f00c21cc5696a5872cf39ae59e79ae9b0854dd3b6ea7763f59ab -b4443fd1998d1c784d815b4c067c844d942f935123a0ccb76532f18572405458 -6eb065f20ca9f301fb04a0f05bbfdb167ed497dd191a06fd43c060fee5be2ffb -b804236bfcb6c81abfb5ddd864a61dca262b97c5db8332d049287c39e0fc8532 -91bd8e2731532d461bd22f4fe65603efbbd39715f38fd06fce91a0014e80e7dd -f80fb0f27dc96c6df12881a7c4f1c47b2c7b2cb7224960c44dc616fd8322efdf -1905121f598b6e0aef30353763662ea6687ba0414cdb45384a729d1e903c51cc -da599e566012592aa78c55e45808cbd9952c8c3b2f21d098370af67c2270f32e -1dfbea8d7fc0b88a491b4a0101ce1d74a10e27c2eebe19f361b2fa384fe946b7 -c9720e9ed02b59cbe30062e902fbd01930e66400d69c274ca8ea0ff6f7580cb4 -54d3c3206477f7b0dc20cb80055d470383d137d226be0f9a15374e0a0112b04e -f25db5ca9ee78fdf7fa7a8b3867f599a61e010d6ed3ec8b13e1439d3a231a099 -2179d4deaa4eefdbe467dd077fa49fc330f9e06a6aee7d102a3b55890e0aaad7 -e2276183ac7cd1259350ac2277e89bf452858d9418ed01a22919c9012daddc3f -ce9bd052032c7fd79148000277ec903093c227e52f19b959a99c7edf0689f4a1 -9d004980edd98997da23cc1ed63c1cc0f1e46340d3cfac421df31a95f032f297 -0c397915c5dbb92a8596896d1d114a0964926be4dc940e857c5a53cf8fdec3da -e2958089db083fcfcd3eb090282a7c978f3f58e93544c9173382031797bc2a44 -b5aa61adec96086af8ba5fca90dffc8d0f4d5a8a22013b2ea06675eed2641fc6 -03400edba05abcbf6a8afbd3c6319f23bde069c6721e7679610367ce47d40ff6 -9c018e23a85e2971e7136280bf42064fc33502e6c7375e328c32f03f05e1e3a7 -d35816e5862966a1efeae1eeac4a4c1a24cd89467bea5e9670da181fe333f795 -b6176f94702a496f8c4da01916dd5859f41fdca457ca50870929f49341d06392 -715d71e508f55416a59ebe5ba3c093fdadba2ac413b6238314e8eed5c7b353b8 -b09492a35309b3da82a8af47a2378c2e4ae452b5ba4d706ac27ca5107f98d4e9 -64300bcab484fdc8c9c967aedd2f351b54ae0ba150334ef42fe7d57eafbf1074 -cdafea5358e2239cfbe0abf635778065e433b9f1c17357e67f692f5e98641723 -24aa6a462c0334f2ef7bb30fef10929224ae0578fc49d68f7f48c91655371e99 -751c18e5f4c375a734404e533dff279c9a2692956957b07d11a72ce6c7ca64dc -8c90eca4cd037dbad39a5e6393ed0ff2855711dc7bd1f33f122eaac8fb2cd4af -ab6a00132c1300f152554b81a5e33e864f7baf93c2ae5d9feb5e2bca4f4b48f8 -c813c42accb8a9b1eea5a14f5f9795257d70d0910cb738a9d8d47146cdb5c837 -a74c0402493a3b3a849306cd997659088c8efeb0050758e1c2d8742f34350304 -8f80ca8cc9a9aedf8008579dd936b29e3f8495b61f0e416f7111124e95e9b0b4 -9c69063f46a9ef1f2ae58c57392ef498b1e0b9980f274d5d4504b47f03261e57 -2ce746715dd521d6d2d9ba1b570ec8de309778955e06f065a3d82ca42d0b8ccd -5e635b1165478acb9ba24f02e429731c315ef0a2cdaf185a142654aa9dcb56c5 -c82e44a81a57ba271000597a99f7111e25f7a4247d40287bb78478b07f2c220b -a4c43a1f1a87cefdd179447e9ea9cfa41aff4ad8d03eccda89819f0039637e64 -2a8f3de1b7182f4237c27429114ce1dd195f546b57ac964d59cb821b2261552b -c8498cdc5a76879dc4de1dfaf3dc15505c0d3b4cda3ccfdc1049a9a5c48fbcd8 -8b74208e6c99826053abf4c2b0973277ddfe6505bb9f77e8a84957e144516600 -73a0e3fcad8c597bde3faa249d2511f545c051ce6461e3c01411ce7945ea829f -d7f4ffd30ccdf757e7039df7deee4ef47a38b6f6f9f7af190b038e464ad3863d -20c2a06954a7f29a61cb9b7daa437bf06f8b6a34426e85c94c93b037098b9aec -5ffa37fbc51d19ecca38b26adce6704cffe57973a0090951da23385cbfcfee4e -4c1f040273247c1f9ef76d20381ef92c9f7bfe723e90e176a34990c19df2ba53 -b2d0a21f64d48d0f2198444c945084f568a04155292361de380eb864f8e5e452 -b37db08686546417a3b87dfd34686c1dba5aeb055d5841c30b1c8c1a182eccdb -876ec9c6a49e02e7b249d3da4061fb63a0342729a26838be79d6939fd0460f37 -fbf36c6a6a76c6a99478551b095c34df7d754a414ed5f0dd28a99519226be1b0 -da01e883e0d5b34e0f2a1a0d23ecac458f135173b7ab3f3c1d9441f8dcfb2c8a -bffbe97cca66b4a1a3924333ab8c79151393a21fa0a215577b808f76b31f5065 -43af482160fa036f80f8ac65fe25d9cd2963ca14ab51718caf8ae7d636fb442e -2e414ac7193fd67e408e86a034036f4a7d1a61557c11ecb9466a403e5b744427 -cf75d3be6081ad827b6db779da50626390603ca0f3adc54afac1febbdb78d6db -776a4fc4bf7e1d0edc29b39fd107dc5974d03fb34a84403ce3b2f603fd30703f -4d0e6c4fe5607dc36c530c88f6424c5ad080ed6b949e968be2b3d3cd9e719e62 -cce1dd547d54e39521e1028ee429689ea3bbab05e117fecdcb93ad8dcd04eddf -f5de8dbecdfbbba43a6f66cdbf3c81f572bb1d4568311224685e691cf31d5961 -768dd919a400b000e74bbefddbc6c9b83ea18c82839f55a3bd3d8b6b900460cb -b62526b4980837609d173a5870465d334de87bd11eedbc2f400c687e2003d74e -605733410e790c0fb5a28c57325916a11f92ee2b9c4124001af738fcb6e6c588 -d75fd336e5b30da46d805767468fcec686284c953049f3d83dfc986fab43eb93 -bccb55c9c0304300f81602a9b9d8c2233baf519c7d72d11a55a2b7260f763437 -cdccdea198ca7cecfd9b5eb79da4772e711c74138a778d6a120fc530fa5ad085 -387a944223ad6cf9a621052e33fa3b64f60871dab95423565d806a64c00b6ed7 -375ef1aeaa10ba8f0843020e3fccdd5a830d79039544981d55b59fc6f2a799ee -124640d4195d9db251984dcd0a0343c52f78904b9c688d2dad4260e7d4967517 -194c29b9313ee2c54939c329da64d5920d26a0c9718de120e577d92af78b8a71 -32180c1acb34d07b0846a34fd494078c06f3911a0bb4348825c3b5a0ea559449 -7ca555e36caea15dd36f778d8bace7f154f8a73535a845a9b3c97ab136eb96fc -276bcb17ee7f191e8441dc025b272c59d4f454278a75f64925e441e40ff9435d -a012b8f2a7686f6128346a5dda941dc2c5b7e8792ea8379aa91c38babc76bab7 -397661c8bc3162de6290736ba23fce40cb1c3827d0c65b19a9a23ce1b5b9cdfa -60a7f0742a4ed69ee7e8d2dc8857cea1af870f7998e6fabedd3cf197130cad2e -7c6d6bd75c1d24aede7d6e0160c67e138770e8ad4ee8822a8782cdf9e5e45424 -7ba28985a01dce99818c05f187e431d62e107b61543a83ee1f040d6e46b36a5f -223a0a35418c9d328c5ce67bfdde69edc88c13995d52c93483abea8c80e083d5 -a384b35c8d2f87deef4048290b34bf3dec299d16f37e1baf0b620a72acaa04d5 -fe4731f88411c7bb53c4768f85ddfdfed7e7696ab17922606163852d79e8bcea -e6c9d902108c24b4d83b5f325eef14c818bab38587b75532b9d38edee82204e8 -20f956e4f87cc7d033d68cb0017a79638e2360c4ff07a81706109beca9258c7c -a60d52f07d102fdaf3cffb1ad14b999234d302fbbe7d3af784bd5fd9d1dacf05 -5b192654b7febf7f71d88277b3990af63a98520f27f65758bd9b2e5c1fb4f940 -b87ad3da4c96f4e1d38e5a7ace307c73e82d7b17c878fc55c33a3699fad5f841 -f9e9d17d92a4216543db45e9f92ac8f36cf01f220e295e1dae16cb50986ab0df -cf7c6785742bc5e04086de192efe19fbb871932c8d992b763b226bf4f054ea42 -8ed3f6a580bb12a1a93e367a505ebad742ed63d4a9ef7c4da3a8f6eb55eb8cbe -dd59afaad1e24a8b87c17f3a9c245dc4a30dfd8b0eb424d94266d61e2f47addc -0a52fa4db7bdb7431e5f80604e95e4091aacc7bcea215e75a7eea59642ac0495 -6c08128c27c59089db3fd75f1fc8043d9636f4c0e3a29e2aa5f726d37876e6e9 -de7e578926359f3cb67ebc2e678267799cfd41f29de2cacca067715e79415fb5 -a5c06eaec36e4cd8d5c818312ffac88ccccad7fe46dafc3270ffcdd78c52f205 -04368ac9f622c1cb7ba8fc968378cf54cb42ebc9330062a9e9dcc466b674a9f7 -c455f575c1840535782c9f4106a47d5695a13f6fce147dae42e1b05784d0b66a -a0c3a36afb3b58469be79bf5887c606490c7f9bc66aa9eb06aae67bc3f6b2c6e -b1abafb3e128ddbd0985505adf6fdb4f85c84c6a2177e9871488885682125b3f -d7ec6d50dc6886a867e87122502d7a5ec8101d81150b7a7c7836ebedde05b5e3 -a2b6afec021c3edbe2911bc8ec445638bae593b0443e3407e3218d59eb85a34a -aa02d5b860324f28b7e8461cbb576fa71515af67c0f061ea0426f9b055f87066 -cfc94c2594cc55caf2be5dde04c6f36cf3261a6f9ab826134c9c56e6c9f76a9a -c88734a060a0ea4463ac6ceb6a1c782dcc199be95860539cbb7b2ce5fc5503d7 -51f0a495337b94fc7118f7101b837651776ec0d40f1c61b57d7e7e16a0e410cf -da4b0dff5728fee5922640e5faeed1e0d6b1e8b87c87e72feb3bd2a7ab8beef2 -c6ede873609fac5274bc1620fef65c7a9b52f8ed233fcea62d37f606d79699d5 -81bd29d2401feb3a9c32a34f15d0ff1ab299abeb05fd27cd6d26d8dbfd91fe3d -dc8dfb290df7a58b72dacb7c24b4067dca4197f298c43ee8f9cea520c2055cd6 -0bcc95e3feabe7e6aa0abbd41dbf4a26c69bfd5c7926c5d4ce1e3c30b3165514 -5258db44055b68401326873a05ab30f645417706cc3fa6522098cf253a851e93 -92574758249035e3ec5e7b3a03f81532d871cbdf738e66261f51b094c5e3e8f9 -480f68e8f26f68348ab9afbd19a49653cce7ffffe8911ad8eb2761696a0c4eab -39e268e261003e4cd0cb15fb36375ff4b2c39bd45710ed4396c1d89563ef8b6a -4e86a73b8d36465b37cd5a50af5f8cf613e7c5fb9db895c6c9827a6e2b1e681f -461dd52b5719b4d048dc63e47fa3aca8c8441376318be1358250f676bb9c4f8a -982d971649a6e687c43b3861050bf5d846c24ce2fdda4917077b1cc4109bd764 -c650199f51dbd309877c268e750230d507e1140caeb2cdfbe1a03ee1d0f4906a -645c9a378691eadadf8b1f291e32448f930e74133183379208b442988ae5da75 -22cfd3cc728a5dfa50dc4a708f25cb851fc94f5d82ebb37b08ea28b43a882d85 -b4d454ed11ab74d0ed50536577807e736fc6cb07a890537ca45e15b3beaf1c98 -07941b3a172e85c4fd7dc90195200036d413cd408eaaa640659e9826d9ba553e -215ecaf8680b04cefe02fb8c0642c028f530815b2d2e4dfbc600852a7412b963 -bcfa31432a96e066ed29ff731b75dbbc801442f521ea3f4306cfe0333b4efb06 -840a81f213bc075b113050e6ecf2c18163f3329898e167e36729340f0cf89d20 -b34019ad3e8183ea5f666cb5387ec8ca8a6ad62b93f3554fd43b6b1a21dac8c1 -75299570f4aeb3c51b6bc7cc3cb80d0d2789e99625a37396aeef59bb3c661761 -47e02c3fb22c4199da98552807fc8ab9457ce81ff4ea010a36b0e319f1e98bbe -a63056668a65b1822cb57a82551b1ab33fce67bc20cbd56e559bce3c2bdbdde3 -ef5d1f232eca045018b639b7378fa773c7486db53e1947bbd02f827a7e19883c -078778e5bc7697a9e474804eb33c2af722dcaed37cd14e8ce92d093b83335eb1 -a25a6d99c7e286941d682ab64f098e93a252f959ba4e9c3ae26dfe3ff8a1a3e9 -b78e85efab7f67e5eb32d1f517d62d35563092598b0748b26c9567801223e93f -adad3cc790b8029939db16ced7889de68a1767f700be22433b7494a079d6c85d -b3816641d6ff42b5a99e575161254ce929120b78f489a76ca4f3b2f1ff4eae62 -16c08518955fe8e4e8efa4cf3dcbdbf512fc6be7329bc046d61acbc6b19540b2 -52ad79177053337ec4fc094c977cfc6eb036b5059e14b7f92782299a40c88209 -f7021f3d155b2fc306e7edcc98f9e93a6593caf8b4e5561af4088ac9c2ece955 -1b15f8b538d7f41731dc09acc707f08bd8a59d92d7d7eaf5764bdb7c5e85547a -32743157dfeeaf3f7df8192a0da2cef45e1ff911d66cbfe005170cfb933d8bb5 -85d93708c87e51efb522944e2df9fcfac13ec7079e1af32d03e233af8ea6604d -4d906af71dfd8abee459fdeef767a385b15d0e677b5034c1bc91f047b46f300b -db6092c34dbff505b0897ca086377772ecb27b9ac70019cac5333d10b67b5b71 -482f241a91fda05af2a4abdb351c42672b580a25f01b79b8fede4c01051eb115 -c64485e3ba4fd9478f9172d6cd73198c318c9db59f71ad709b9d567b4e31e2c2 -8d0b93a1d24c82b50f01a070a952a079e1e7f9c2eb4bac979388d99a25577f93 -57d9179078aa0d2f7a8a65d58b8741244e3684285dda86cf3808e68b48accaa9 -5b3a91fa39542cd3c80bc5fb5d636ca5ecf506fe1e4e645705bdb10f9fc67a56 -7597dc5c9a1adc7b47c404c06ef16daa37d8fe6c952e06d056dd15008ad2e796 -15858275270c5804432e91c7adb467102e1e7ed962f04f3f6d39c6fbfcd93f21 -d11016f5e65e9945c1442ac63b535196d65cd3990d94128f3701fc32d1079668 -12749bfd5c15d965c3174221882914a1fab5495b5fd0d7a7fe3b11935c3aa6fc -470ab52a32c9a9fd1ddbe800b60f3f24d9d9147fa86d0a0925d7140b5a04a493 -f3ad02d6c352a1f6ebf7ae326f6ee88d7701ee907c88728150e0a2c214b13f12 -e7d5d83efd62cfaabe68f02fc23332703c02daf224cab53c624dba61b5ebf164 -0205dec482b3a52443d207a11d4b4ecbef3dbcf17d48759e7e1d69108b4cd456 -d263d15d719f5230cdcabe96dc49df253b44aa047fcef75ddf931cbd6f3a2a52 -c23eeef852c1729e23e3bee93b0a5085913f64b7c3dc650432ef005301062a5c -90c400852a7412b963bcd035e6942cc8ebba9a1e3d3353b26769ada213428979 -78a9f549a86210d53598cc1da57b8a7490ed6b8368cfff93578f979d16c8819c -80dd050fc4aa8ccb4f7b2681245451d0d13403841da091442013a6c5609c7d68 -da409a41e4d90f36d0acd74368bdaa75e618883eac528cd6cafd20754cea601b -33b0a58b33669ef561745830793f5a06e72c0c8718d24de9f64af17c50beb1f8 -cde6ed0ddc136eac0fa98d9f0ab9bab94d18d86a7907c2bbc50d69d07e3fa905 -68145b3c0acf303db053c8a0cf1d7619a215f6753f804c6739ca8c1017f553f6 -48d857f926d74d15812215b7fd87333b8f00e65c81fdbc856f1323a342bd0507 -be91b5c365d7f895e9c374a9b8e0d1413220403e4b5bcbfe5a5977640249a233 -fea8f1d22ac9f6e506801c4a68e9f8108af7ec2aec0ebefda8d1ea7851c0b226 -b3b8a76d93736c746a351ac265d9de903de0028a2013af8aafeafbaa8c2d1d54 -523925d4d606b13bd04f0e41fbeffae0f00d89c83366a1ee1e5bc0c18ddd134a -ad7c32a0a25b921b33d91846fe945d785888091c558e3cbdeb761922386ca63a -3ad37a2fae3f575e40d1223b416c798bc3732c6dff964b29a02714911858f156 -9c87d427f5087455da19f24eb75712692f3693f1d2ea5b3f40e9f9eeb0f0f8a3 -d00a0959ca4e3bfe8c4804a429ddee8d842c8de8312610e2cca9cd33c51a5145 -e7f8c8b97df06a0a023a43db46268c5bb2247df3993dd4536837eabd9c0d381d -da84bc4ee58e730442cbd7966e070d8be71a0b24b871027bb3d586d8cc2d6fdc -917ffb3e85d5f32acebd3093e53c83bfe41242307d774cb3ebad79ceacefd887 -57a0ed1ec8adf7cf1952411601ed59f4c4be8ddec78dd26a10c083f6f04fd83c -705ed42a0891a5398169c528f7911cfc467cc6df8bd5c835494aa1a7c5bcb836 -40e6c78e60c19dfce997ed6e0dfc88fc01b0349e0455d4f22c06c16f7b9ed61d -9ab3d5a4f6e2fa2ef4628431cedf579db02dcc30a54d6c10392ee4480af0998a -b823cd0f9484c3579e90dc412967faecfa026bf654602f3bf6b7a6ec54350be1 -c836493fc0ded9384aa53b770cc0f008329765ab5bbb896c3bc12d21f37733e8 -7c7258778a68ae72133f40defc3a817a72c8cdfb2c2614bb84fdd568d51066b5 -5d9b4dfaeab9dc73b2d489cc1cd29461be050cc6e72b15bc7fdabae2b7792d34 -427ac97a386e31161bed431328c0ff34725192b95bf911814a98e09faa5620a4 -0af40530e9aa937d32facab765ab6efbded9066b7c6a031db5b0f34826719622 -ce9203e7396fea2e7d5cb567236ba11607ec8579e01d0741a5dafc86a49a3ff2 -c1898d961bedbabc3bfec4a4dc1ff565ab27805c0f27dbd4db1184ac8d13a66a -03f3477e9303aabbe2e8f009506fa8e03e14c9cddac07b991db50356f7fb7a09 -86fa0dba919eecb006dbf46b9770c52bf38c992c1cfdf487bee675464fb41020 -70cbcd98348f290bc9f8064271899314f5d53cef33351b85a9b2782d891f4fe4 -f0dae67dd58fd46c7d2e3451ef0e7ff93c38e92685ef30660a8140aed73a239f -1adb9547e33369457d849e1417363508961ff097241ceeb0bea7a1b8e350f680 -f5194175b51793efe0ae38a9b930473ec836c99e8c9fc220700f0f6577b77fc4 -5d69bcf32455d506629cf1b15af57f244eef2bb5b824957ced172fd621618fe4 -394a3b3f1a72836c4dceabae9190c3de48bcc34945bf21c468308590e4912896 -4f331cf48a1764a4f828cdb11fd36fbd2cf546afd8cb3ecedd7c0b9ea5bb0d82 -8bf269ecc868a9dbae49cd5173b30d568ded26e6c229b09868ccca377bb5878a -390e48cb3d4d596e167fb5af544d01a429280fbce6caeed0df852406611e3f67 -b1e07a92c58e9887f39aa3b65df90f27a2f9ad203ef4923009a69cca234dd41a -abaf30cca6b13d77e38626a228b59dee4c20279ddd3fb7e47f3630c69ce918eb -0af51da83358654b2b28c0bef8ddd7a22261f873010e35adb40f63bd5f6febd3 -50e44cea34928aab9cbae1e6ef35e713eef769ea2e06f1005235b567cff130d0 -8b6dc201eb476bad95426e3c9a7df4a803ae01b5ba4a764dac131bd273f17e48 -c1b0bb228d5c9ad4c39262c4ff6d98547fecafdae4ec0cfb0c04dfe7982490ee -82ebe0e712cac8b2ad4161c88602e87c68c7254fc019cbd98d1deeb991962910 -d44a6e8d11c2afdf94f140f4a94958b0189dec2fb7dfd7ce510210cd76a88254 -b832de6879983ebbdad0220c8c4d5f7c37a55a125ee681abae550575100e3cff -f5ffb4e64a8d0b2e7bcd2d6d016c598c6baed2951e4e5110be8b5f4c95ec5583 -44cdbfe4d78f21b0bbf5562a9325fc8c75dda43d30c33c3902821b9a6041483d -3f4346ab4b036e583674418db32c71d2a511103c105490b6fa774b61b7e03216 -a466960ac2db48d0826034e4eb74f2a95e735d9a2a048e4eb159e7d6702c28dd -3a1d5a390e4d69e0da121673719173ffb31fbca5b59b86f9d65edaacd36d5e30 -bf872cb7977a3894802498d20d656d9d9ba7c997450b2a3f0ea6017ffb5c2a9e -dd4a6a415c6c6bea9497313478da8630a9417a3a77ef6d1df9aa2ca014eaef96 -8ee377fc0b90c42a64486c4145044c72082e76fd9620d2335c27f87e169f7f9f -b4962e06d98165ab1017436ccc68830ef42c904ff8d738ee2793526d476dcf19 -b51db620fafb84cc7b2188a293f0f7669f48e1d6ae0d12997432f67580c4e36e -5ebd336638c50ec777965083dd485be6f550f9392441e53a78068e7057a8495f -25406380eec1548fdbcc215d2417ed3a1a2db029f9ced3c0497c042921c72b8c -566fb204a2f3adc54a88957260553c33301bdcec98b8797e1ed36d21a22686de -2bde225886c16ec5d132ac0e543093e66568332aef3bb15f85cd442a8245bab7 -681458364ebeac7758c2c4b1e0f6c9e10e5c1149cbe99651944c29f042483440 -af0f3c88e181722940dc1a8a772d99f2dc495c97367126b14053de51a03a7907 -a725b1dec299588f81bb1992ebd9db972aac396c47fd229fac4becd1707ddf8e -8733e447b03c1a671dc33557daef6c83be6fab0cccdc1eea095e9996131eae50 -cc9831922dec49ceac282b5e1c0542a01a71bfc28e91bbfbb3198d33901162d0 -4285a62e07f82b95d0e0db1cd8bd664f1a6603687705936a87269ed00616b505 -dfaa558c8be45f0425469904d42239b24d4ecba5efe9b29998a30ffa6722fa47 -5c5c63027d3349ff581f3cd71c9e948b419489485639c46ee6a62eecd082d89d -639ca2a26d58fb3789e2dc853c4b6adaee2a45eda123a1620204ea143d2926e7 -049dfe2de7e1b4d14dcd6ad90dcf1fe26413ecda2008dea0d7b7409b5aab672c -40c71aaf8536602406bbdf5ba17970341c90e60db0f8239f5190f0a46ba0993f -f0ba8eaf9c45f1ceda81d521fd353072b694334473fcf3982b147d22911a76a1 -162fee53f301906e20938bf6f38e0886b9d340fd23497c52edd2b9319e9b40ce -1e87a94353d01be656952db686e4fd9d22c0583d7c6569e46445c01d06ea3cc2 -6a564f0abaad453d006cf3e868e2bb4e23aa6a93542b0c4e06d839bccbb64470 -e689f85aae9034fe57c583a30090535a89c22fa8336ce9cae3855b6f3c80f1ca -67db3c3d9193747dd24fe745496c12d951180e7a24bec0cf5a5ffba06b925895 -e2463e2046eafa6986b7299507002ce55df328059434a08817f76e1c0c6fe864 -c5d39048e042b01e35a86b322ccb2656474f2a0afbc1aae14543e72548dc927b -d1fb32f689da15497868e14ab927ee6efbf2c1c16bfcf698b77b190b57ad5f48 -8734baad1e836f0348458139a4fffc8f9334552de099ee80c11e84697389c795 -93177a0e179949738c19d83b36986a769ce821736a3f2f69ec82b7e19c2f25db -aa99e888592bd478b2cda54403af0786702badd1cb8e7af2cf44d98d142fa824 -9364b1e82c0bdfe255739c7aa1486de001ff336bd84d58d845dc77e573092b54 -9b2eb4d4309d113be1cc36c3e3a1a8fe6ba813e147c0ff6be1358865383a3b4e -e242bdcdd2c4916d1eb595b6a6ffcc1532a60463f8e0670b96dedb7540a0233f -a05467deac20d5544fc026e83c80fcd3b4a227598a2b320418cb2b37f132f68c -048cc26f58904d1f6d0bcc4c668843a86e81fee25383a35514c6b18a0ecb0b81 -514d937fd90e3b70f3cb83a8d06a9bdeadad9763a34098a306a7d38da2e2a32f -fc202db1b3cecd7a99d4d778287d34a1e5ddd3f6aeca5ddd730facc26899f838 -06dec4d2a4db94abdbdf46b10b4f2d11b3c94a8686d210c350759d479d995a9d -33fd660b16c4ab555dbc247cb559d6072f44491b32423ae4eeb761e271f304b4 -dfcbaa03cbb1833c822085dc6d6aeeb436e24bc0639e5cd4de306a7301f3c077 -2dbd3289cc3fb7822f52b450641a345750ebbad08437bf23331bbd6ea4e210bf -b81fefd3d410330fa1d2ce93a534b3772f4bce4bf5335881371940a8bb302e89 -6d5043f5c69babca785c3984ce2ae8128d861ad78270ff78b7dd3678f4a9ddb4 -c6d4442d0780dabd78e652c2f30bb993f28c669fe05b9eae576c44d9a17ddec5 -6f49682da228f917c955fd75194d0361a30549f677c8d4df6c215281218227dd -b5893844ded6a908dfefa52d3c80a46f92701b8e41ccf0ce82195cb1584dfe0f -ae4f282c2f0702f93f9f73bad96b899ab06604d48fecb0f4c7436dabd184d62f -f3f35cea68bbaebaa8473f6278321982e1bccca10dc064c463e02a4529d9047d -da5b65ad3fc13009db932c0ccabf8318e4309516c19375ba41440c70028f1773 -f4aec7ccfa41b60db4a624a735d27977642fd8a9061195104d8ec81f0c2a5534 -45b3775e1fe556db12e0b2785f3e55ca8b8f8bf47bbfb555d0cc2c4d2ed879f5 -4f4efff486b3f21a12f89228b2254c937a7f6b4cf97452063194ff23485bd3f4 -c106a3bcba156b42e806e6238c39a0ae0d06557ef260df0dd1bd149caa76fc4f -b12b7f2188e627afe0890f16d8a5685d5feb9ae8f0031f165f63b5df63f65aeb -2ef56f80362ca765f6e24056b6f0f93491f6d8dd1d90d7d4237158ce11fa3102 -b40fe936dd641afc1d60891acc80967b02ed9d83a464be8e07b2f80d65e3926b -ed7a2075d5140f321b8dfebcc4d808d09f80311996e7822483ad59a870bf8f17 -9b376d66cb785fb5135dc1351432370fa4060345ad5b69c7ffda0f2497c8c12c -e10396ac141575a04a9a409d4903cf36cbf6602e09d0823f9498d19fea36330e -bfa209fb096c09b1e2fc8491c0124246be6e1d4ad452e43e91b30d938b6e7e49 -9439ae5c62f36ebae128821bb90753000bc9db92ea04ff6c7e34343348a57af7 -90fcdb72efb25a14a687df7dc3b76eef16f96c649611b79d640516a2f9e81874 -c539df496f9a9c14c1ee4012f41c37c3a3f2189d91ff8570899c8c2e07017bef -8d2ee37c6588f896914bcfb8d551bb15fda56c856e08b830956a01a444a8d2f6 -72b6f8ebee46542bf7a9f5a6c9c84418f840a01acc612c65231ae2f4794ff8d3 -c97c4cf224c3d0c26355a424cac0f2d17a056d203b523e03c60c4ef8a715a3f9 -5d879a4f344e371af8c675ccf394957fac75e2c039ce7708a6c7f5b46ce6e34f -4df11daafa6491a63a46b495805896acfe5034d037152c41d9997a02ba58010d -c338b23f185b3e4e3ba1fd1c8284f904a112475a08d3b23a92213e7ce51efec6 -297850850c99b5aa0bb31c15c7fdc4aaa7564c0dd664d334a17fad333927a616 -21bd7ba42819171e14abe2410455ae42b2a0fe9db7693ed36ebdb6305da51a5c -7cab74a7d6669bbb23da061c5d641997b3d0e55d06ac1a41d17ac326b874b450 -88881784220f0829ac2077e09bfe9579b078f08c250f94931824ad8157402a49 -45847593275ff352dbe59296c2b0fc96a2ed97dc6f79b23e3796dbb309145e1a -aadcbe232de323bc2a55b7af043c39dd4113d560558677e8a202229b3ced466d -e37abdb7473b21261cf96e2a2affbf7c6dbb3622de6661a90bad85825009ef2c -ca808bddceda30a3ca8aec87f960fa7c85f215b393e11e09b48db55f01cd0a9a -aa33a40ec2dcd70df052bba543d2c22c9e93b384bff9055b426b1cecd5f90ac9 -574dbef0f9f43d7005b2a9be95113db7b12520811d99df5e4e979a5adf762bfc -5d0d4c3c8150715b7f319d35875a7adeb182c37521ee80d994054e902cad0489 -9176a8953d4b6e28f541d608ce5e3bde32099520fe617e9bc9496df113a43d90 -7e1b212d24535290ef66c9833a23fa7a66e7fa11462bd210456b6edbc16ccfc1 -70c322b65330f4251d6bdeea11a8a0e58b2d438d7f844b2216aa53354464eeb0 -77a06fbfb0b72f8ee1f0bab6d0c6b27f94965bbd6260c70dff6c08d4edbbc4cd -5a8adc974b690fdb53b51ce295e6b2b40c784651c0e78ea6b33c567568d1ab87 -193d2feb76ec18f4f6394fa5508ec4d6f871101e26c122b7fe132cff7f115e1e -22b3eabff49bd9deec3fe09317e00639fcf82f835e6ce7ca9a65e294e869e700 -1c85a71e1b3cc1a4b9716a4a2dfab2986cac085e176dcb45091a01ce61dac2ca -b5306da956147fac8a3bc131f0d8f31953813f52748e70b4c8d94a82c17d83d1 -a8046f80956defe12693eda56512d6d29095bb1d42e36466f6fd2b7ba7c70bbf -123d753593f2b6373bd74d40e00d59b2be8ea60438e42818821515c417e69bbe -c457abc9204f0a8ddebb88c44be364b358e2dfd117072f125c71bee9801801e8 -ff5ba5b44b0115ffa676f3bb99aaec050641fd9f5b6bb095a682b52c64ce6a75 -bca3587e2ee13f2ee022fc905b3babe03f154684ff226990c2ca27ec57100cb7 -dfed37c5f5d52882eeaa64357be3c9ed5605380445bdf2bbe0dc4fd5af17a3ed -784a20539621e6e1b889e75aaedcec08db740396cb01aa753130f4b0118e50a9 -dc10da6a1059f331df49a25e98103e09473304e099d8578f2387098e380ae9fc -f91f9ea36c0d900aacf7fa9dc3ce29b984e1fab13532aa4cf1e19a37c6b4f78e -da75b81069ba80e1ed4ef2b9b5084e5e1dcb8f01e7da8ebf491ec5924a51294b -81019480bafb622cfe2e500739bf8f4754e7e3e85e04d4932a71cfddb8d3b6cd -0bc90bb7b839be6d8c052d1f0d93c833811b452403874b2a5ee226631207b6e6 -6492248559db1ce609e516e659d6107378a2e6d51021473fca2f1b87dab66d98 -39f607dc5eb0c03df892baaed0345514570988eb4895e7765c5bc42d1e76fee6 -b05bf0c77abaa0d7c5d6dbf2f7e039f04f9bf3b9a71ec0ed91e3a00f725bb1f0 -c74deed454f903d2c96cf70a92a048b05bbb624c091e3181c607ddc2477ea47f -e76824c0af0092a62aa367448a10fbb6355354c5ac0737c69a4d641fb3f2d80f -11f64eb4366df7060b4e849261faec37ff325e7f583ba04ad4fb37d6cdfa99b3 -0d73c662d1ebb1af64a2ed168dfaf80fdc284dde297efef48134cd6483dc1bc8 -e46b1c3c45fd5d4bcef85d9772000144ec49dedb9cf161792333104e50a27b2f -1add3398c121814015c92096fd6d3b1352cd41d2eda7f3729d45c1d288b0f560 -17059816840217f1ffeef482ae49ca6b376a5548b0edc9018cae5eb6b1c33c41 -03642f744cffbce7898e525b1e8ebdf8cdc7645516fdb1eba4cef73d18fbf4af -3517a140b206119a0d1dcac28577aa115ac29be7de2f9ed1f679034929c48870 -a6d50c8fa1779560b1f5b760450db3b8b350ca3b2890d04d3b33f19aecedf0d1 -ac01c613d992b423891f9ed878c8840937ede7d8a1d62fee5f92826620d801ec -3c3edfba8445cc52e5f83e01ad27abf5c205eb022ae6833c2aae6dd550da4a97 -f10a7e363afc6d53a274c0fe41b83c171785880b637434b2c8c4348615bc9259 -8d8508c412d17099971aab2bf372b96b0b14ad90670ad976714d000373380258 -4b6462644a34bfa6f5b746fc0db76690d52b2229f7c79172184fadf2b5a9983c -573dc0f5c11aa85ba845f6e4f5836e95636c8cadafa8671b2632c84e3d94ef2b -ac6565267518e2f747127c6f7b13b4aa888a5ee3869119ece0b2b447a5343edb -f0996b80d9437e62546b137e22735347a684af93cfe80ec102a50516092cbc03 -b0e52d5e10b06e447c118fe2bcafd3ba6babed083ab7d423e7bc5c862cc06dde -56801534f09260d1f246d070f094f57219407e92769952925bbd0cfa29a523b8 -fd3ab5b278b2a2f12c89e6ed1dc2bcc4ba69e6452869b246596f71a310af0867 -c9aafc6af2c88f1edea2ac2dea51e8fbd72eeb0893a18706e16ce17a8ac44545 -ac68951c0f284b0149b71d924330201362ebbf72dd8e5a8a986fbeed97e5ad11 -cc913858ede949d8f732f742b0d73ce9c8239c077ac9d24a80c03c0a7daae558 -f17d2310822d33918f75aa835b5b4f9fb61730fba8c55441218fec3c4d1f54ef -708a05f6fcd38a51d287cfbc58d92e5f3793da39c0f55eb9fc03b658567e7474 -557de727bde7afeacb94c90d0b38b5e9f9b19a14d7c73e066eb556eb6ce393d8 -fa956f4b75f6aa4701d03360f1f354e1bcee9b167cace1605718f337dccf8cb4 -57c3ac8e3b5b730c60aee2e685a80ff8ecffbc005dfc5f11c5e338fa20ca3a43 -9154621626157e9efbc0b390b143ae736dba62723c99f5efaaa02a090b8aba16 -1b712e55d50a2a6bfc06b5eb32ddee1ddea7bda2f176f0f1c533810137262a59 -f8b14ec3b0349ec36bd0b8bae99368d21c4dc0c902e92dd73231b03a91275edd -9250f14fff4457350c747938f2cd6170e6b8713f439ac4e116e70f00bdf5555a -99a7162b703b45e92f8e77b50e85373f073b6907f95839c6f6dd306aede407d8 -642113e1bf2be60a5ec8a64431cb46f882d2df7eaed39c326c26327513b3a647 -9ce800635106cd90cd7f0083d2de423a5b9e5d63c49643d3e220aefb899f491d -28a30c49abdd19ec4bf66677e8bde6e43e222a097398ed2a9e9933a1d5ca87e9 -cc6cffda1deb6d13806c2fc82c4b32dca80dda4e3945c6589e9110ac91681603 -c4bf11c9d5510fb8d4de96ce3177297b692464776d9c07a1116b6369204df7ec -4592550563d3212b50bafad065887b3c369a7810f98bd521be06a3b4b997a6d5 -e0c5ad7ad8aae5275f400d86a6f09f1bff38d9d7220fcf688212eeebb8712f1d -74ce4985615a59c89354c1fc0975caaff671151a561edcc2017b0de504974190 -49c53f1f17162afacce065f1300cc2571a0f9dba7d21d8488372d386c41a9fec -bd1c7def33329827cc99c7eeb7e5b91607849173f68ce09a2aff09c94145aaa2 -76cce38832aed1a437e8206426ca41f49c9e45b6f581faa8afc3b47869d5762b -793b8d5fb6f0ac9c391d49424528ea39f635185bb7192f87b72acad339471ebb -decd039457a71837c2f543652284f1f40f82c38740c2ee36b45d620f004246e6 -d73f8777ba26c7a7e3a2413fae9b7dd37553169c7209790f14cc03c08d0bfa05 -6e72e0184d32cf070f685ee4507b79b21b353c6f228aa087ff469b69b1171567 -88fc37c39977e09d1c46456f1568628844a542736eb0ddf3fe3d134b7e78e87d -b126702e8ec60839b53c363090f698c5c11643a1bb63ef2d2f159872efc68ae9 -a96666fc8ce25cc0e2b47fc82f5f25f7b6a732901cc6d4295bec66132cb3f175 -42cbb4d4ffed7156beef36446452cf2992e8d9ba3735269ed51ff32f8c915b8a -f0050d9a1136e352d4eca8ef9ea6c1978fe689c8c563b8faaa1128625d9e91fa -d173c8e2b7f94f520098dddf4483b12abad73e2303098ec46b603b08f34f2bc0 -8ad44e897c2ab11148728f4de8f0390ffd947bc424f0f0f1ba80a107ad2e00d0 -ff4e76ed5b305b72b72a07e43f98093e032088c52c07e3f77d4a2d417f141512 -43d996cb0867a056befb66f052e1b65b37d2eec54a802e570c8b32554b794392 -3280107fb91a91d5adb4adeaac86a422717603de317a563251073bc740f10928 -1df7669744f5fb89e3f460bf820cf006c75231e979fe162fee64786c144a19fa -7ceb1da2096076fa0dadc7bd1522014288aa2fc96baab5078db3de94807f3af7 -854cc320e9f70da4efa02d38fa65c15801475207a09d254a1bba489b78a8214d -cfd4da769a8ae060fb4eda4b51d780928bd6315bd293f6c6b0f3e4a593464f0c -55ce0c1120b2099da0250d04f792b2270db2d7c606bf80e7a56062181f7da864 -a42e97863ec70187b6620559b29207c549366172c55d7f665952c8057a4f2152 -a69f772b065d414e65f57719a99cdbb57872a86de9fcca4dc7aa32b666d474e3 -d20508d06f0cf028521ad7d46e9c25a40d1390ee271d2ba5ddbaf7bf64585c3b -a859a2f3ab88e58f72a1485a33c419187fde432b697809da526477341d7433ed -f38e1ff4fe51920404138ec6403df7562e4443ea091c620a13603ed0388b88e3 -671f7436193eaad4cf55ace6d04b79f0389ce28a1eb223b24a9f8c92b4f5ca3c -0bea3ec00a555756676d77de2a38e35375b82c5192001446c8517818f18be439 -6c900f7e1587969d9bf8a9fb5595bf055222951c2b0392fc387c258c8cef50be -7696d9360b0f2d4095e52388b395a10096769586c03fc96a69615b92b9e4d3bc -275229ea8df5c72ba0fcc67bf8c1b2708bbe298cf75d1a97d452d51743d457ad -7d25ea5484500f4b086bdd81351f71885845fdf5e9129e8b0833259146dcd34a -3547c21e093a4fae7469620a88a126e0d025d3e50103f66357e2e05985feeb5d -4a9adb2db82460076845e54c083a2874aa56c5b95253a1e8cf8f1e35448577fb -8147f62f33c968151352488feb6fa978676c9f274d6b11f7fb65fd39bcd7dcce -7846008370dbc907341269f7d1c355d087fb176fe06836511cd9b01addccf580 -f68010958b8196f50277dd16f3039a9aa70411fd94d1b145b3ae34d5304e6c4b -02fa4b80f3693cb6b16a70dfe06c132438e0e56c4fe504e1923196a58e04034d -6cb67335f4218b857cdcdc928f3cc436c63f10ae872b93788b9a84b546c3f504 -7bbb0d419d7882dd1f7bfa5fe8a1d1c671ff3f56b50160cf4c23e8bd55111d03 -eaa7ff86ce5762687b6136f5728db1b9a1b914c7e2fce70c2da513594a989437 -ca8eb6792445ff806e502d238984d278a81d89b22864ddb0da2e49658657cfdc -6214a570113a00e55812ccba870feb01f397f010a0377a34fbc8b052084e3d75 -5e0bdcffcb26045c428d8de34af04aa8b7a5031892935c16918f0ab2db811533 -545d35799195310e5b109688830bda180f096fc5dd2f2cd98801466cd44a2b50 -68e54fc80d1d80c9f875b7e75860cb406e83132f5cd0813757d75b5bca06c62a -fdb7f0d55e94cc9a223c0f9eaa30c0a5c13ea0fb857fa703f2844d829418ae2b -968dee2aa785c07ddf773e30bd42ee89df6618796171c58ef11f6570d21b89ad -55e4ba58fffd7f112dbde6afb5c5cbe7d73b69b5a25003394ab6e0d5302ba575 -51ec63112e038b79f6b9632012ab775ae978f4d94ffa70e5d095a8fa0fcaae76 -18fa4fa41df5e34e7483c278d4470abafca5c110f1cbdc1e9e10fe169342a2e3 -6ea635ecf0f5ba7ac1fe1d11f661e825191ada43218eee5f5aadc42436c98789 -e7692be875ce211a94409ca6fa9b2bc1d67ee0e375b83b62feb2671b75566620 -47c9ba88ebd7f795c9c02e63cbfef0515a62db218f4e5a0c81b00bfd6ef12e8b -7bbb8e9ab5a1be0c2773c7b5244d7a815d95644a188ce66280637dc8cbe5fb16 -f2ac4a45a8a8a3e13bce53c345f35b3ff85373a8733aa6777008ae9329c7e54b -9fb18b1e137e253c72128820e04c7bf47189c1d1836f6df447ff9efc0adf7b0f -09c1032853c67fe92d961a91e70add002c0b8f56a07c3423cefa2e5f65b028fa -ddf99e24090b56e5be0173e8778b5c45fed11fc0c0ae64a824bbf77f1150b9b6 -cb4f96ba0413fc37f7590955d075120862015df7171ea3b49fe6b0f261db75e8 -5bb33fe6043a19688ce286573be42c114a0495cb2cf6f642e83674b5ab17c7a6 -191c140c1ffcc54d70e2b4d1b82fd0aa1e61583564753cd6c5c0d6d7743cfca1 -f6fecc0f51f247b081cd7fcdd498da22d5a2c8dec0b7a9f92e252f63644c50d0 -874617703ecdebf7ba8933041793391f67ef138fe0e4efdbad4fa6d7b01c1f01 -b9eb2868632c20ec8f3e34055f6793054bbc31c111686ebade4b4d44a9b69021 -54cc2fba1fcebfc1943433fb56b10b60f5edb160df0e33e7e98ff752060140c7 -8511c870920c2369a0d6d4dfb687c30541e014bf4443f665a24a5f05d5a21acf -f99d9131495b773e42e3f1333866f45dc35ef9231a00129564d194006c447bb1 -5f341631210376632d90120ccfdaf8eb6df5e2cb1b9046cad64e34bf4e524c3a -f786121f9136672b6bdc99baa00d412db7d5155c94796da2f490cb441786569e -769561942b30cd8b72d01c11434b9a64a82f73be48821291df689324a361fb54 -c1760ba86b250c9a6a2c855eaf318703d4b6c23f67931b376f48dd3d87250ce5 -7614efcabb4a6b8fb9d332f121aa8e83edb6897987ee25bbf692d1c243e6b592 -1954fa91ab728b5844f0501a63abfb7f6c8a018e0f5cd409139ecda8b427754b -089e9f71a74c55b8a0c7d3dc7ffc478e693ca78280c9b33193e82383627bdf30 -771103c535dcc00c7d9ca352f135de010a9dc95780046bf75b36e0a284d8c2a7 -f3b6096d905dac2abb33764249b1bd61e3994e96d0f3c1e8cc9959a404dce763 -31b01ba083a82d6d0d9cf9b163bbe2e84e01a9eb07bfa80ac69babca7e725fda -43b67bedd3a23fa3926300349021c2337a5dbffa2021e05d26207958bef87ba7 -eba130cdbf56be5516c5ae4441390e999822089200aafecdccadd69169a27414 -1c0bf4ff1be4221b4e6465da6e5ed755568f79762a660653e10ae8d098471457 -9c6a90dde454ca311947f0d48749b14e04aa65a9d8c62097998b4d78e171f166 -40bfe92170c33de5ce03dee2bb50a656c2748ee8eaa15951da01771acb0a7c97 -25eb74788e6c283c6cde569ce52beaefcdb29f91dd345ec41b585f1e2dda5b29 -1e85d3a50e93ca8caa6fec04df003df18120152d0540efdc4020dd6475233f7a -1bb0cd65e6e389a3d714455aa5341872a48c01f9f3451f0a41051340a9276afa -50473824ebc231402f4ad6e35ee9d50cd89d2dde31cb5cb47c72cf47ad6e8538 -e1d41960475db823b56c20845107d5f2ebd3515ba63c00b73f9f069a7b2d8cd1 -862b61a9481a437aa4efa394315eff55fbd6ffcb26ed9010daf763a3806da8a7 -14a1e943547d733eaff9b1c8ff5d7ede9573851877756c99adac534773a87ba7 -e3e320ed16d4c383bb75fae51a0bdc694cf4b945a389878d38662a3d3b6287ed -d505ff4d7947250e56c501f630ba5066f343e550de87b42ad8eeba15ac21de34 -ca8b18eed081283179a71ddd916c4efaac62f0603685530d08d499918b726311 -ebb642eae0db7fc91554fe6e77580244e6f3dc871f6bde18a80d732fa6f2f04e -108029179f799d54c7eebbbcf6c013641657c98fc17d652a9b48d15204936752 -89f4312216dcd0605be6fac8c1994dfc7488f89fb2e777297b16c95c66e4b7c8 -5b30681029156954c59c7f4009e6e51e5a218de4722daac7b24176c9184f8da8 -150df8d26760dea0757344050a36ee320d1e71dafe9fef9bee08c93a2ec25d86 -310ccaa2c2b42c87298b238b449b8e9abbc89b9751cb1b2d86051baf9d84ed66 -e4123cc33e02b6c95f60d72dff4ec2e59c0e85370ee21c6ce7d2f2633c69f037 -00608a7d4c67e14d6eb9782762c193ce09d9700ed2207df978ac96d967f64d7c -d1890a7992c7b1f0a6240d53bdc279a1e9809963532108114482b30325585466 -050647c568823771ea8e227bcf931321bdc7699707ce84721f3a8d9247ab7428 -2eed6d1f734244c0006db24d909c39575f3c31d67c4b06100dd37c12637e23be -103d0fc36c3db59bdbe5c86474269c394b0d910ea9bfb4f321724e0b73ef96e7 -542bdd57d34c91b319d8ba7c692608a0c0db47d5c8164782c5f5d9a438c15afb -80c7545832948717eeb7f6b646c59cd2d44be1fb792e9edf4a938f887304314e -b064e64acee79563271364ccd68552bb354d1b868bb91aa38345a1f712bb191a -44267a300c19d3ecb9c756879351f430eabfc5b596f63a6860dfc94cc6ad909f -9815bf7d7d885b62d3aafd9624ed5eabe77acc50b5c8aeeadd4ad79e01f4fcf0 -c0bf6c0124da07e12348419aa115c90fad1d3a6b8d12a9d65cf3c7e8059eea56 -29a9a09e7d2df23e180c19734acc46356455886bd9e1981ad86ab2be96eeda66 -87654f6ea6e20c95aa61c9a50117db0a647ebc8c34c55f158ac2085ca23de1ca -02b4ded478ca08c4686527cff76d641e0097f3cda433911682b399604ef61c89 -901c7da40dfc094df7025b1a692c159ba0a743b1550f3c548b2c5f7b33016a29 -a370407acf516e13a466e03a8a71ae6ccfa498d6ee19f53e258c3644a6e86852 -7f76d2d673ac3b07e3e23554886243d94d7712d778839a0c754a8a1217162b8d -a3ec1006d9d36dee27d54e4c6e256f9a06db8a5a752a1f56766f0c6982df002e -4201c9988b769c64aad5446a8190a5b5b3c1f9bc8cb6ad24c9beaab17c17441c -4a9a8391950fcaba005782678466b3659c7eef7ade032612a9a2e238f59278da -1deaa6dbc1a007c6fdd494eaa997ee56bbed5f797df482213f03b75da3a05a0b -30b3d63c75b125b8ba5129e298c45d958a3c69067af3313cad7db36d928d8ec3 -dceec61f0f7ee22622434248cdd8696c5b54c8911b9d90714347f7f6b11c0bfd -908e7f9cd6f98b97a3b8fccef61e6234332a1094b3c968eea224574947de42d7 -f8d5de799f40caeba36b4fc4bf430bb380dd217366446482f94d207c58a25e76 -2cda6f2af982916b182b477772674283254ae75a8d8d4cf121a73b3a2592ba76 -1d6d914992090c438c4a68018d474b7147beb38ae35b8d8e9229490655900c3d -e615951797650c229683c3def25be277af6385b4f0ed240f86547a1a3742aaac -a0d28fd8de4fbdeaaffc37a669bf709f0dcc13fe003c96e44a9d33ad16217675 -04e1f237dec054223a0a35a4ada96b0a683ea1e016c6fdde948e0a7a20f8e8a4 -a6d3bb3c09636e0373dca7746eb163f43810e2eebe8a50adb76468b8a779c371 -6c61b780626c027be20eddcaf408dcfe07cb044aa03f7805290d252ed3f30016 -9ddaac33d863e1ebcde7b8f3e0be3f906c3375e4242f64c7ea6f0f662bd9b776 -6702737841953a725113b45ab4eb8548a1c1479695ff4ff9eb8d474ff66c869b -196aaff62849081a98ee963bd74da69ffa1dd8519b106ab22b4778cf97f1aec2 -d9b68354aab2fc0a8fd3516e2d2cf08c22ab093ba89434c57874f4f87831062f -213a7fd7a5572d8088eea1cbf77b21ab4de8f4c7a1fa8312484dbaab9ab2a923 -d87b1fe0ba3183ab27d00fc13c624efe6ee45e62d2d328aaf9f501e64765b946 -f21d5f77d5b5436a6ccaeea7002b0fb24bae81ac550a731505287f37dc04af2d -a4cfee3b3a1ab21781afb9222da39f72f2dcace99dab50d82bc73e73125279ff -431a5a2bef0b78abf0bfb1b3140698456beb47261801937d55e1dcbe40403dcf -2495b10dfa47211d9342f7676cbb498ecc5316b1dd64a74fa22cc977176d03c3 -f3b0760ec63393d846ea11b9c2aea75c5b7224dfa193a2534f0436cc90d9fe88 -1f56441906e4d5644fc33b472c28646ddbace7d8ee8fd8c78e5879e638b41b14 -eabb5715c81ab6cd2fb872370888be6f6aced19820394a42bb286adf8dc2a82b -18b166efcf0c5c7626aebdd3abd5fda35cfd70887f695fdf82337b821c510005 -90c6f06a4e88ed6d4d0e5f2c3ae5e4865d67e144bba6f6f3ddf309c049772e56 -0d865223cd88963c6fdb573d56b8fbf67255f94c1c4e264a8a13810162f1ad7e -b141f69b353c7a9737aa9d919d1bfdda75910dc5e841f4d52a5f58a3ebaf305a -9075edc50f9fe0cce188ff64e09cf1769949589b221b451c0e7f2b6176f6ca5d -680b1b4bfae4b7ae87c03049fcedfc09a33a680f96d96c1d09fb0921f3d4bbe1 -9655fd72398d8b66287357626d90d44b9f0e2973942dc06de660f7278cd0749d -27abe4645698676a1ec645169bbf1134a573ed63fbddcf8e690fd66f943eb675 -2552768f52cdd9b8c4938e1d583cd6576611b1495b4339c86021ce6661175e68 -873991ac3c93a55d9430d510bb2d6c91dde275732c87275d2dfa3a0124b3da1e -1fd7bed9edf509a3afe352813a8726522244d32c8bc31d01cba0e1248ae5c75d -d25bcc26826fc61c172b5ed70c869894bf1a37369bf1b98f353caae79bc05fb9 -8c9d59c91e67e9040642e7b4c54912f603bc8f8696ac9d667c557c0e0b90679d -9c809c82701fd2725752ffe02d243baa5d340a59d26935d520b3f0a7eed8fc8e -fc352542627f167062b1d2657f36e518ac54d03df9a51e857a3ad589f7986513 -914d6b735e08c0f0e9925a49e08921da73050d323ef835f24565fe5b34aa55ec -b8c41e873d766d66230b8156f06580034d61e5060f2b6c8b7bbacc2875c26c07 -ddadc43a8d13860888dd97accc083e597c99cd92180582ba9fbd03d6339efb43 -27af006d0784c3f661ba85086486f91df5dff5985c111dbd19c17b357bbee805 -6ee8afe1802988c49999f36a176aa339676f67b3a99638d6a9db1c8219636720 -a64fe07e8968c0e2d013aa3583095c15b4f6cd716dc4cf833d4595a5db580082 -66c95090df00addd1a266558da09328570fd3ebaed85e853b0c38fa90ce59417 -da533b879bba9813544f8768cd27b91275d44b3876c187c7b1866b943d01cf14 -3dc10332256dd9d603641390e9c4a5d69a2e3a5a64cf5f25f3c97fd69673cd04 -af830aac66c8c58c7d6ca5c9491776b6e0ff293a7340f55702448d1c13ced978 -a5925f0aa260461ee1c304caaf92b12f5e268ebfa0ded8cc0262bfaf51f5edca -c304414a151d57c00c8d81018ba41f72e9f6b0ede165a4902be08de6796520f4 -84e03e723fc8fbdd5c708283d410bff715bcbb78184c9825bb93b13ff067b8b3 -8f13ee2781128cbace25fd8dc9b6cdf0094639797eedaf5cb118a2de7d53d66b -aff54b243047c35c1fcd4adc5942757cc55792f3370059fffeb95ffa99f10e98 -adb201b57efc5ede4e03dafed763d81cd47b4c575435eb7bec1193ff84329a23 -8cf67d8414e8d1a57e41f3ed0ed3b46f1dd2edf8ef198cd857c05dbc65350dba -a939e74d0394effef3780ac622549b301ae4539534ce23da4757a7205ca6dee2 -fdfc6608444093c046976b919204c92d985f4ee2db74678725c56348c40cc447 -8770ad251b6442630dfe076de75dd57da6a453e8ba58d0016aae4dbe05591e80 -fa2c2df3aca1de4f21d86c560a9d25280fee16d5844a5308d7922d9bc40201c1 -c648e37d929853249e572f88b21ec024bd07a8cf3dc4fce45df469c94192563e -a695b6fed264c72b66256a3e9b0ebbba06d36a9dc18dadb4ac7bb9c33918a106 -ae23bdc5326af0b6ef663b6ed2894bdd80d334a084bd692ccc42fccc033ccb29 -5c7bd33199403d488c61a9e0c619a8e501a4f5c8034df1d2782d8286ef950513 -be7391b1543e36fc886672a4556c66c4a92c40ff9abde49024eba8e041236d3c -f68125512f1803b8cadbdaa0926906c6a33ed1a52c75e5589dda5537ed70572b -6f94756f25eb171372f4513377760fab4bda57d5badf1c2f81cc68f4189cf499 -bfc5002e5791bfd84a40a69983dac1b26cff33475913e7d410d65d228c695ed7 -6e896482179611844eb586a8023e6e03af4c787d991d361be5aec58fd67222bd -a3a63f3785abfff3e90eda8f151bce01026a425587da9d8001e532fefb75db48 -ef723bb5ff12398ad736c4f329fa941b1951e171732ce74b2f569570ef9c11fe -8e15a4746bd8c4dc3828e431329fe205584b946ac06beb7efdcc77d5bb6f299b -265a56ea29b78903c605c1ef909dd25abe6562103084f9eccc550698ee2ba7c1 -ce69e49a7a3dafb88a155d7b6922c9efb5e1f8364728cad0b8b4761a1370f06a -aad0d9467fe10f58cafeebeb187be257859be4d730f33c8d4dd5e1b0dffceca3 -b23434c2a25bb9cdd8c553ae92093b594ac139fe70fe9f4a607ed7d4f44fbfe7 -0abd31a1d27f550acbb627ed100b06b0a90af2c1aa9e334b54b23863693bcce4 -bc517db889fc3d8d179d670b1e282c6479d4f278a620bc61a5e3977458da98b6 -dc4ef9062ce128fc59a595f9741a7ab354a086bd1b0cfbc8830f19a0a5b7a278 -1ba1afac9e8f805f5563a954cbc48e85565b0acd3930dac4f1f4d0c0eb8b833e -4ef339d3f5ad304e59f0958aef225767f1f992dca2d9279ed920e6b1f1d6ca66 -3814264a4455e999bde37475f3bc5ecff3622581ea9145dab6acdf95c22fe293 -272d2875a939ec35af73933e9acb08e419dde1c8296e1a5ac1006dad3bd4ff51 -f278103d486128712f55c34f4e1da744350965f2692d8d6690b67445b8d0a2d2 -6b1a18c1cac898071b9371cf39ce17153fa963d83e646486d9449d434200b912 -5bef39637f3e298c5dd1f0e817f523d68a994b3b05c8d4dab4700632f39f6410 -3417a3c7562cd8c399ab5d9b9efe99688b832d5a2dbcacb4ad5d4024ddb302f3 -38a6eb2e23e47702660dfb5327bb33347c833ac8c9ac158d2e676589def43d5d -9bd741ff2d68859e6974891121a14afa2c9a0b591db56404b19f08adc039a6da -0f5477677ba691e27d680068f832603cfaa10b27315e4ca8d8fb63b6a3c755a0 -aed3f49af639ca8735928670f37018e48bf3d9ccd8203017f5c52d4dcaaaeaf6 -d91371e52550e6e0bc72995965cc5a9f987e2099bb915bfa28fc0f57cbd740b2 -6630b3c1fe2f7314f66c36f3014d8940a6b99e20c2bbf66147ca17cd9d52e2dd -3edb04670d745d9a2b33ab65cc16a68fcaf84e360ae1477d357afa62df1374f6 -1219e7ff000117ebe8dc15d58a4d2d44102d235d9788d897667cb686a61e9519 -8ffe8a7958659c0ee5e1289c8c1676ebbe71b61b20e4eb930d14927e2647ee60 -92b3a7fe0c8c02b760f75b85bbe0a429d98f021d0f4d9ae2219efd4dc06f3a44 -a1718101659bba461a904c2560f5d3e14a0b14992b489b2b524cace637aae881 -030ca980db54d8f1dd988ed0fe2da5f799c393d8d12582dd218710e0a171da2c -25f637290d2296bcd20c593c0f4c3b05635d04b4504725442a5c038d3c3d4ca1 -9e121199a4517edfd81f9e50b9cc6a88c8c49e048a7de4dde8c77c9eb4aa36e5 -5b26a061ed03eec44693b9f5a7ef0bb70a26a147bda86981e93ded72f12a918f -133e63ad8507daad920be5531d03b75b491f95b76e874180b434ac0795f961b0 -aed9e078966edf01ecd449afb7944080f6f09260e767f3a388c481df67d4d6a6 -3d5949ea21d07bafd52c2bb664295bacee81ad5a2b16e4e560be69e9f19fc9f0 -d5e0772784a6917d2bba7ccc8455f1572a716f1e032f5f244dd26e5e77bd6894 -829620277dee975d609c3a8d13c5dee7d05bc9842af7a84e9753420591d0f6e0 -e457111aad08fd5818b23baecaef43d6c42c423f37cde8ed09cadde44ee7e8b5 -c5699e82dd3b7d5f268907d978b58fa774dfaf90ebcc85ff390c78056806f6c8 -9ae7aae8295bfe14c499513fd2438fec5f13a9299500b0abbc17df9c39a44098 -1784299d7229e0f36748d957e5cfea65d8d2c940720ef6adafb4b40ea38bef22 -a997657aac9473469b33f7b35cf12f92a8906149fc17fd56febb5e8d728671e0 -0df089cb79e80e41de415f9e7d1b5b93a7355d9eb79bc74026afcfd0e82b53ed -20715a06fad8a586bd1961b0cdaf91af18045107311f73f8f9fa185271ca70a9 -6242825133c68e6e480a9d96ced60694cb24a3127357b9ddbaaacb314bc76870 -8cc7dff7c1d96ec22e39930613b154a2d52f6d0ea5eaadd5429c2738b27bea90 -d05e15b53c2481406e56bd2fbcfd9c73b9bbf9ff905fa83f6359ccd92f2f6494 -69927e744de743f579b7d3c0221c8f1e644a49d33e86208d9f3940e313abf42f -7820c38957f38908db156a4820cee64ffe0ed3637a26ae347df177abd9ea683e -91b15018fed6071ac92cf31ed64e5152636a01ad869b09afc76a753620901110 -f317eae8a99e5bc888bfad1e435302146323d0b752d0347c9b5c40fca5393ee5 -ad16201bc6aa52b4700d790af61387f16f0ab6977291dfb25ba200ba5248bd25 -4850cd1197e0a7b289439b0442fba60a1896d5d8eccdad1f16e5824e665a249a -2982bc9cbea19dc6a0429e192f005474e775d5dff231d5b3855a2da7040c1058 -5490126dc9c2e409bc8f4eab60b75db09b08c94c8a675efc22a0a8931c790cad -ff09b39407c33cee4253e5c5f9e806b5bc5fa785fbfc6db334a484e8e0f023c9 -9094b1cff83bfb775af6751a4d1010416b4886b3a40213297340212604d556a6 -2c56be99d04ee8c1c0772783df3bfd97a9600c3336302155a019579b1c753b81 -93b5712637288c4c657d66aa21aad4ad0660f160c5c61c2ad73a1e1ce7518c31 -2df63067457a38a37f27e3e4224ae637c2a977a5ccae87292abb73a29b019bab -91c4ad20b02dcb57774225183f9d386136ad0547e86b64cf5337d42efaca336c -7bbc10cf8163aa44fee56370a74d47b6620c9c70f822b69d292e3a2379fd776c -7540c44c8ba1f0f072336630d77e45a96b232897d32f726bc579fee33e2548f6 -3ea6c07e6b7c8a39d82905ec789c2ed837a380d354e93064a516605bcbe587e9 -99f69b562805b54604a6ed75d84f7cf08bf33bfde2cdef33efaa1a4e417d2640 -a05bb5f57cb7f96dec69cd6bd3cb909cfbd3088f60d4caea3373f31a684797cf -0b1cdeafb76cace154d45bf7775f6441acddaceb8332ebbbf148395e08073da3 -f54f6d1a525217d554f294d9665fd12766de19fc11e23a1483cb0abc75b21bba -9f7c2f5e21a0eb5b79585b9935b7d7f2254c4f7311d6367a6cf51fae5b228648 -8173d553701cccce508b5623bf23bb59a66356800f2513725046f115d10f3a68 -4d5aad7551797c563a6a5934cfac1c95216db928d08a8adcc4d12d855c142f41 -b663ab4755813cc4bc432147c5b9e4949d56a07c084be5bb14b74ff3a9ca0fa1 -708e861d3133c5caaa90213ac1042dca3febdc4431fe092c35cc2d60fe92eebd -c96157af469b6e3bd124a183947cf960aa29504dd4eb9fc9c10d1bc77363644b -6c452a8824b48ea64a3084f6219c65cdf36a1f8a4d7da515ead6f0e03d0bc2c1 -69ad00aaf8a2b1782c990f7ff40fb9bf2c00aee85eea074f4568760d8c78529f -835e6ace945521a39af3bfe33b73b62a9c755921b29c0167190c6fc2133645d7 -6cd319525acaa82fd7727b055e212c7db32b5efda34de81160378efae97fcb51 -8fc021af9ec77692c0bff6e8ac0de9f938ad65c48d56322c5719767da14789a6 -06dd5ae421aeda6de57c968c883ae17712aade14da281fd823c99561b2c7895c -c0ae4cd1a94e689bb579d3978ea9b2bd70bcd167f15508d1d820c8f54683cb3d -8b302e2af9fc2474245fa9c3fcd50f57699ddbfe78c83b417f2ab301cf335284 -c7cca7e8d5225e036591bebcabec13262d1a7782f1e53e2a1d75c152c0ea6d18 -04cd294417f9cd90912181518915e6d81def1ac5957a7d59b62c5766e8ef3554 -43938d39498456ba87c424013135609c6437aa6346e59b385992b196e5bd7f8a -0b44804854f29e194b6c2959ad55c5bc94cbc0f41f837d72c1e91e795e4d98af -976eb1b55e01ab71a0a786032fb6a62fc6201db7c67f2340a5c504b9a9a9abb7 -3df1694ef6c098769477cefdd3b4b77ab716d240ff9fc0a1ac737877658df26a -b6e7688c7382d170e1218cfc3be31a193f26e9a029c74da3ba2661014b58f58b -2cc7719be663206c3cb3f8993a3400c149326651751e8e9d7902346660c4f845 -c7b0bb144ffee8e1187efc1a5e9e44fb277876d17221287c87ee6351a5c887b2 -72e0c04d45d060190dbe5b1bd8afb1de6c6d984b65362bfb0f9a4aec15979b4e -e94307f351f30f02d8656f24a4885a5fe3bab465b7a0421f240edd8dbfd8f4a1 -fb2af2f4fdcd000d0aff4b5ad85b54b98a83c59654705ca2df9ef54b742bb3c0 -577f7f422cc7cc380e5dbdf0d4b1fcbcd418a219b88279fbbc8b5397744ff5df -1d795570adffdf79a38a6ce62456c2601b8f09bbf18287bbc7ffec9d1b164856 -77b6f176286998b7e76698945e70510ee09966817854263354a751cb09afe9a0 -76b86ed14a837dc7c4c15ffe7a448056908deb055a02558aacbb6465481b81d1 -f42fac1b857a516852b3e7db8425d23dd0e2e80c423abcb3a5b95f1d34f28e76 -74c3e3a77431cf1f75ffc9f61efd8c9a09fe9d74681e541e4435d8443fbdd7b5 -4975b26b3c69d2e2283b0ffd5e934a480c4ee656e068aed4fd180fe5f6ef4af5 -1fc86e6f9271d0b07bc9805cfb43f06add9ec5e410a7bffaa925d84a26965fb7 -6942fec6318bc03627e112f16fa00f56ef464096aa0fb4298a98b3010c404009 -d16c2c133878b6f2988107a01cce2c7a3db4cbbaa7adc2d45083903a357d4911 -3775dbcaef8f814be6d600cb277b9af93d8ab005fef834ad50d8ce9d1dc09f95 -5b7fb930cce65c43d9cceaaf4517b8f1ad764b1c256280f19cb69373805ac79e -a4cdefaaf9064efa1247ba74bacb09fd16122646d36980eee215f83dc9293193 -02789698f6fe0c5a0539fd7ff2b8a28746d92354bcff6d6c056171bda61e9ad1 -bad7f68caa7c81dd31d3effcd9074caa07943ccc3fa68438e9712002d7b7d5a5 -2ed1fb85a70e55a15ffd0fc5bbb64265a048ba668f0e8513f733ce257473c517 -0315715e26e0676819f8a16c22d8eb39d07846efeb177c488957a5237fd3d592 -3d10c2e5e1e6b50992649bc18fcc70c396312b350b9cad02e0af2146d9894f50 -20eb54df3eac30225deed70dfc42784e3da822f380f46b4b3036261b2e19e933 -675dc99e5bcb66381136877f0e9cb2ddf01522a66b33d559160d2f184a7ab052 -e5129afd8225900893ebd39e92830ed4da59e777ff5b0a298a2e3bcb2897a6ce -8bec15a6522071afa21cc13ef47179c8877e6b3722180f9ce4ea63302640798b -af1d2fc6e0132b3505d3b0e949d6fc4d9f744436c619fb0611b13a6b0a4e2372 -a21d4b034d9b4e0fcdf5f25c41e8ce94c8e417088db74d2d82a618c18111d385 -c4c66d1f37f6e64b8dfde45ad805c374cb8030fd3db32e8489ee7243c78ee4b4 -3f58f68c2f77d0917aa51ea69481d98cad76a2e6a2833f2b1cde6d15be2188e2 -40f304e95494f838630665b8c8330ea641683eb4aedef08ad22b5870e8508f4a -098fb39f4dc7ec87bc0eb35ae1e97c29026d6c800deba720641445df76d42a8e -6470dad8a60aebac364f773ab9e7f2a8b31af927190c4baf7f7b3d2da3becaec -06162e878fa179de59cf84e37f0e56764963eabaf87b1fbe061917749ea18ac2 -1794eedf33f62c32de4f3db287d51373384a2cfe30bb5daf59aedf26fb1fab59 -5e8897f2328f9233d396e692cca1ba9cc4e6246968ae05fee297a5cbe1dec18c -59d1618cce3b4bf40d4e07de3cff3b20f7bb88e7f1323f64bb8ea416700c3703 -52a06a717e69ceed80be16007079ee6d7ad3a87012eb2929312c2b68aa785214 -6a5760590785548490ee4b55bd78f179671e74268c670dc71971773683014080 -b742cdfa5f5c58173cac5dd60832c9b6ef16b85c4280472c96e264b54f158989 -386bb30d4336cc099887921049db56a41d2a6f57028a7cde2ea150e9bdc16d8e -e0f42177a9fb423f2245a34dc8808ecad15ed373a368dce05930e4ad627da6ec -30c03a2b9f4368ce8bea2a19405a5dfe6745c90ad99baec67cef778651e4ddcc -e469d3978733fab41a687f7edb977653d119a9c8d33f299836f12759bd4f5abf -ab5b1679c61b46854d8c9345a33d3338c813f5f8d0947abe01fb4846afee616b -84f713090a8b665320c9b3be3baa1c7d1923804bb5ac590dd2f7d1cca105e7ae -a1b880890497bdc0c965e6c355463f8a5c481fa144dedeba2b5d6e1c805096d9 -f343738b9bf2571b3675a19a2f919ad7da95cc16bfb4d7e83bbff08c5bfd5b51 -b3ac712724e9d031ec14e05979f79e2db6d1b85755c327ffe124bbfb62c93f0a -28e5a60ca370948a3a2fbe3224849120cd74ae75aad8e4d110ea8cd3f7983cae -e269bab03078c3ec14d9169b2ccd4c5a3173d63c7332b2ed58b622c8bdae6c31 -bbb347a18271f610c1192085b933051bf4dc83f627002b9654092bbb48a0c6d0 -e280db40562724e3284aa644e399062787a2b58e850adb5c1c3300c2731b53f0 -ea5e3d8c37ca795bfc171259877c8c3735a46beecb8e8cf9bf7a3ebf60d90a5a -b228dea11f5b847663d97e8d43416cdab60be9641282027a152f39e953cc263a -34e070785904b1cdc78998d53ea6a44b2edae5be3a22aef96970ced5b1a8fff7 -20e39b7214ade784dfb059d1b9ff5e8a0a1c910e0d6dd399055d7f91bd13d9ae -2b6a651d1ac110d1bf8e2e43f1b4d98b3bf62b7aff5e7744eaa994d96d6a05c3 -cc66b18ef140d07551f83bfc4fb770f8674a6f9e844879f3f8b7bc956cfce62b -c658bade1f84701103df87cf8ee9e5d33690839e8fb6e3fa7ede4fa9e093da77 -81d379d9b12bf2a56f968d0849311e81a72c96a421b6cbd58ebbe138ae58623f -2208930037c3cf001134035d7e47cdf849004522de61c27263c515655618d1f8 -69784ab3f742689ee655228e1672ac9ca1806b76232fc9eb85f69b110ad6caf4 -2a054adf4e2767a95f5534c5525a5a6ac6008a10a59cb28bb70e1a41fab590b7 -3fcf80f3a989e905d344ce643aff41a74275905e9235cd33818c5bcee1994c33 -77938f2c4fd08fd052f6f59a9460d7897c139729e768cfa384df59bec67dc82f -5cf8e2638bbd8dc769ce87857ff6e7c4580ed80e630815057a0e381a91321af2 -aaf3710f92d3bea496587cc1baf8e76a90d8406716ad85e8bb3067ee410e32cf -9dbf16a6ba4a6993a1454a393aa1c6a4f5b85bd71dea9d09e16a82a2e64b5c98 -8d2f05107b11cce59735219b104815e38219b1dcc2a8fac862cdaed85b4e7f3a -3f8de686cbe956d7b11ca62dd89c68754e56caa56ce6f523579e725213913d16 -987674baf3e75b9e1176845eb69121707b6d061fbf86a28ed7e3cde2c0ad5fff -3200813651016bd240ea190b9240e682df8104baaea088c868e83924bfab865a -99831038e67d113489df5abf11f7cf0c1ea9c24ff19a56faeeedb1b2e103e0ae -b28b73d58224f590be7c0a7548caba79e8a312f758e48c9eeef76a012383e31c -4f457d451bb1c3d9bbfa9dc84c016f6a34a40a5a7f61d5312abcf985a5b56bd1 -de2bfb6427053f4f73b04f545d2e7941d6aa8a465719bc818b14f388161419d6 -9a965691fb68b9a8a0d78f89ced539556ed137321ef6c35884e9485070d884da -b5875d08200a593ae7f9398f4684d19a3a0b621496f032fb8d17a5735dd5a288 -0058b60770ef1136d78fc9dec10e5d78a7dcb4e804d199b659030aab2eff0a07 -c64aeb7b5bb2181d8a80f3c9c5bc1eaacccdef478777567c2f03d9706b4dce68 -2ee5f872e112f7a952101d859246bddac59acf9339b546fe213cfb6230bf2862 -3f0a53b0439839fdac6950f1d1ec14121a8762c94a928473e76e767931fdad0e -c399a7b27203d2198ea577f2a518fa57c75188fbab9de2e7fae055afe6f3c7be -80ae91ee04de86ed38fbd90fe76160e9eb222cc28c11ba39c3ec6155233f4313 -5478ddc2fcf853822921c9a5dacc1bd8a11858ce9af112e05ea6923d4f3af379 -26359d6f9fcad59dd887a7c302e868cf806c3804a997810b16d66ec54bd8993e -ded40daf9c1326d48d649390652bc12f8df57db93013a53a340d060f8f0ea208 -51ba4eac5c3d3afce0dbdecf1b6284c3c16c5529bca906a4cbc295fbaa9b2588 -7d5c2c70f6d7e0e0b52c4c4f8fb406e03ab88787ed35f9c5d95f6abc995be12e -9e51fd4f7771512064a1b2ecd96e89151cd5e135ed5f5ba07a16bcd4e51a1622 -75d9009dfdc4ece7a5bd9561a46099f05a8dc8f350069aad74aed48f7ccb4b96 -4cd0366b94ee152fbd623983a5fc38b9a68cc3d08914d2822e78da693b850b07 -b85a17793750802f661978504694e3eb4b5b2fea34b48eca0a8c24ef81d29ba7 -f6622d6be3305d90cb2af2d67a665c9acb1159a5b34353b0bdb0626a71efd2f2 -56188f41f6c85800ffd51866fa082561b6f19153b8afe445f88b4b7f15f8eb6f -757743d88a687e44ede5135356e211c8b155f12ee7aab0f9abb94dbc3c4a5367 -737468e6a095481a76d16bbbf8ecf6ba56f710b1d18af7ffb4eeb8275e095d76 -743da78c7e97bb5531a71f00ae8e8f5dabe1bbfb651b076aa72fda2d8bd0a645 -b4862be4c0d789d645234b46286cfb807982101600186720180ccbf34d64b0d6 -232be45545cf2f4bf0d23dee4548208296064165c34a52e734155f56cde02134 -60c4aad2e5d9ed3b44a42dc897482d4a1f0780210decaa5fb38ee0cd00a8254d -239b98ee8d82091f45afd8b2c825af54d78e1dafa382275da5fc8d345f643df4 -e4822123f04d053b026bbb686066674630165f5f0ac094d184cef0152242fed2 -fa7b4bde415c3f9ed71d34f37f59a132f8255706a3a4777d7af1fbd4321c86d5 -bc0fc80f4ab662c0f1e59689b6ffc36d81e9349ed7b762e10d85d7294e7d394c -616f67dc9624951164f310307ef5c69db573794a6c0c67dfa180a6bf62df1194 -63029907d339f69af39663e8346d43ceb7433770a42c00c7ac49ae623f4773b4 -20205ef154d2bf9053a159c374021a8202b246e434164c4353e96c3055a70a08 -b890bb0bbdc381da324c1f443157880753f7dbe688640f35d012d011fdc3b84b -530ed296eed8c3ba88ac312a5e94d23c4a6bf5639fd103c14db6fd71b6751d57 -92069f67cc142c1533e54fcd76109046f1acb94d66d3ead2ad35fb9e3e8e349e -dea50fc8fc4506446a8ee556f8c6f3bda2bd502518bf237a7623bca8e81655a2 -22aaa7d829acdd789664f32ba972b6dda0b6d69340ac6a4840352ce04049b134 -e34187426220067f15168f593bad76800e3687a9ea99d5d79a544adf232bd90f -205865688bcc84739eeb804f99f354dc932bedda4a54b0ccea94d3f129bb5978 -60a8d881a7b017c3ffae7c8b5ee76d09c8ab8572c81b994d49c2efaa80a5f2af -299945e831d2335d669c596b4af8e9f5083f90d7846b9be991430e7d396efc33 -c232634fe93d5bde557879b106ac4c7a124d5cfa47250a666c2cc9ce0a158d37 -63dec10be1648ffe60b51e94e8317c71c0553ec74889f87b71c7920fd676e09f -5f21a1fb909ac44dba922b62597681f9e9323e3599473f39e52b1348bf585cf4 -2029944d229073babc0536e8f4d73c8cb49264e660f0df5f606af0543a1137cb -5c5d008b019d542bdfcdbb3761d8dc373a20b76ae2b4885189edfe5bfa1e0599 -8fc793a9804ec309b0024a04a3c24a1efa61b87d1bd95dfb688a6cba47fbfb94 -5ec8770e1ab19a879891ec6318981d6bb73234675a44966630f34efbea0fe1b5 -a585e5ffe8f6d58ffd7abb3a7a13b0d532fcd8cf878e57cc0dcb761f291c5536 -dd8222e8777f112bd7c5d9d16e7ea46b00bebba2fd8870fd94282339f7298c1a -cf2f3c0eb7c203181b55043be782b79c1e33a178c53a7d09dc2ebbc3b338e5c0 -2dd813e2a456d88f4b658bb35c6ccfb1d51f83073cc5643fc3f98a6b712dab8a -a41ee7183668913669d13c9b0cd981f1b6fae03f47961a49e349bbb0bd62f47d -5a0d4c35a9bd80945177b33bb07ec5c92d03364649fc8683d1fc202c5ef8ffc0 -d7cf9ccb7589ebcb56f2ecbfe6a46a028b65889014748d56968746e37e9b4310 -7eaf668a9a949c851870dd5564e29be355b75f93496d997929888f451f4ff7b8 -3ec717df9865ac5769e8078669da3063645a9ae0576b5576bcfa3c1cecd8e82b -6a6727448ab8e6d5f8a06b08c885f59fcb66e918521c32d006aac974c10323e7 -a1f97b9cf30c825c35483db7b5196744be5f286fb9814c7789ad4b1b397e00dd -366b5b80a7e5aa28cad3856fba593cfefcbfb19bc6227b79c252936fb8f2d49a -2315ac036c6e08766aa2b287b6e0a5d851cc66afddf1e577793209d2dc75f2b5 -d8050b0cc54efc673ee8e42a0d305812a5f89979478de4c24896489ee3df4328 -a585536232e065fde26e460fc9435bc02445058d56ba2bee0a7b54e359867ea0 -5955aabdfdac296c39ba589f11b3d2d9c5e3b7508fe43bf63fccddb5ba21bbee -4269b218d978b5818751b2ac06871753c511d36f82557f561eb95c3b70f712dd -fd84fb5230b503222cf3a17fe8fe2666d1485419f4ad7bcb32ff66396d929d3b -207df2d811ee6fb1b4392f8b1a993dff3c254ac865a5217a459b24158269a889 -2a868c6c4fa9811e356371695713123d01a261af4eea0a72061137a17a93fbb2 -151979e29a11ca6914e3c6ba7990bd0ce58cac96c2e84927d1de1754a9d56ddd -a0984576475946f63c2c454bace266de5a6f4487a03ebcd1fb0df6fb22af5434 -6938dc41bf1517b3fa99fdc97a8d09c320388fe718a843fc3d7ea5b5ecd27985 -74b38fd9f1d21f2d4a25d0688b7d311ac747b12066a7866204b91c648d51a9d1 -b67e7cdcbe4e4489948f9f70f6866be1a92b4f7931a12d134cc82fdc4782e8b0 -d42822d2fa5df15b349f8f8bb4f56125e5a578b7afa2f409565afb59cecb9952 -aa42a7bd56fc954052fd6706caa5fe3ecd54035f2dd9e10336543f4eb99e3177 -c0d3b65b64252b132e23df390875a3a612823d62959128b25e688fefd781df4c -11a205fb7337c83b3191d7e38bcce10ccfa3c411bf6384c456e7d78bded31f8b -eee65bf5dd748fbe4f70fea9a542f894616252d9d809deb49a9775542e613919 -fb07e86d16b3f51736e82d27dfbfed036782ee3739871239e34dd7fba8deccdc -78aba8245f945c5b2dc53e2cd2f1354a5495d4a002878dbc7ab9ff6384d9d9e9 -131b73814ea9e5fd0b57889496763d073fdc1c5433be30acc62f3fca83326384 -5bf724e35bd947a611a7bcae04648298dc434e415b8c1236aa8bcca1be497a05 -8a0bbf35d224c77ebd7ce63a69b21163534c00499f312de6cd1d63112fad9c4b -86d437a975b0854e35c68a0259e0f9aaff4ccaf3938a2e7711d6545d75f264d9 -a1a00d8407b8d2107183c2cade139485cc681b1127304fa3c40d377dcad69884 -86593525bab6ecb33e02c7203e75255b7e778583cad2c2bf8d5da414b37d87ce -2c230c28ba4761ffe92ce3219d5168e54fc89ae3f1ad70cbc9b956b09ba6e3ee -58e57de7b56d02a9cf7cb8da0d6ca2c3076cb9130165a2b65bdbcbd47c31ac3c -382e0227ea54e52070ac8f126867360726e1124415c83ff1e64eefcdcefc0ce9 -54ff72e9a015e02e4bb8b9ca0e04592c833cb2cffa03eb0447c1cde397b2ef92 -2c95430ed3e54046921ba40bccde14d4ce5a0fbfacf25b2c7d7024545c4b51b7 -d03f662a87740abfe9248449753a9007deebb387d7e7ab76631aa062f79a434b -35e38c577bac6a5efc56772255ac92326adf9023aebb17d8e073ed683a029ca7 -8da3d55197392554af500283b0e47611a3e2b68c852c349996113e47742ac3fa -20e61b641e29eaadb4c90076d2734ecb674e64d25e859f6a085bccdc22d35885 -ba0960eb7bf1072bbe291f9b1d1ecd7935cb7656ec6bc15d64975b1c506180eb -0dbb33dbb74551622ea37f0d813c71416051d0ca33dfbbd0d552863afb7061da -a359160a493ef304656fba57239ab154af8727eebdca342b288bc07ebed351bc -f276f5e6c1dc9cbdaa91451106df45822393a8eafaf03c3f024b20dc0bd5e4df -43f3c6687f2019d642fa79e8ff88a42506d1d7d6b9be7feeda8e21315efe471d -59bffa506786dbdbcace04a8fe8ae423a27b4b9c0c1b8dad3600f5bad7bf1780 -759d7cec3cba13cbf618a53df36c5c2702a38c3af55bff63829ad7f7ee534144 -13f4d5614c05b140de29a9db8135aa108757505841f855c24761c2ed71f89642 -041c855fe532013d0febf7a861bd8b019980fdebea9b245fc3059a8112559970 -a62fa095a55c638bd7a2f28fa2da186d62f130791e8c34e8d7dddd1e9cb6319b -cf6ec3e238f5c1312e92b5dee3dac520eecf315610fc65f458f9f48b0dbc9e93 -b1343008995ac25955fbb881b051114ea5ec4a45a729fcbccee8da29c4798237 -5db572fb7eccb0ba2b41371686c237234a8866be9f1017ff5d151b931248b9a9 -d279e6faad1cee0e2c94b424be49aed7288311ea1ae5f9612bccce83e65ee68d -00b3aa5358cd9fc62688a7694a0e4de3135cecd48721bbc4a686bde074832dce -0f0c31099b35cfdbae50071d2f4c26b55ae51b919c4c1100a02927ca59cef516 -ab603d631abb6ac0a5bc4788bf8e53f22f83dc621cb82372ed4329f60e180c17 -e27e822de8a5ea5d3fb9e0ea0b2b96f1fa398392ac2e001721ddd7423f19b967 -4053cc18287e2ba5a3e2d0a0e80d93ab99b0b3ecb3afe71f6a384f62b938c818 -17462294d1c9b17ab3988e7ae73f3efac6ae24b3ff82df6eaa285f3ffb3248d4 -fadaa73b7217b0c1faf8f4dde2c53fe9ece617950bca9b3d66f0251536963e58 -15c6dff60754eda6427e43b0285643c0a619b14acf45da5dccf94a2332f99752 -dab07d1417ee757010e091cce4143b2053fbb276f5e1675006f3198d865b483f -f4f9225dc95b47690742826aa2c0798e8adb97bcf983cacb4c3037d82a0afc4f -5596547ffee1dc83e7fb94d3d14aa19e70c4d9bbe9f0cd519cfa91ab345f0e6f -ef54525efc326d87993e8e51c9472be3b346b06d6a05b93b07e04c45779914c5 -66ae97cc9286e7218b9dcae206c48f73de2df368912f7a45602cc3071170b502 -93d8a6adc85da881ac3eca963b02849ae9889eacd3129678dba7d032d465fcf1 -bb50627f25cc2f290e35ae4897cbc9ee040e66db1cbd80025ca4188fc2d22d30 -38f7cc8e488b0a769599372fd924ae386c18bb6313b6dd7841302b8bf688ee31 -4477d11eb74b2402dd2a4dc51a6e795c141eb38a0920d6fb582abb07aba1efa7 -d28c7e6a7b0952e1ae2ed26de402f712c27a96c1c51abfb1f5d56c0b67e65cfb -08adbb2c7f725dfc14c054c84e875746a704ef41122f0e9d496dc36d38c80861 -17341595c9c1097bd547bb1f25a5a64627def63820479beb5780cce34dc7dccd -1d5bb7718177f49c6858c94178ab5dfe5a973f4fd9b621220c13f78aa5d2258d -25cd8deafad8fd1dbc6778ff902e36a3c190d60547fa62f0341250ccbefe8647 -5e4b22828804d03f17f54549a66514f6458694b884a8a733ae55975249810acc -354cc875ec55260386693c8ae60160d7af456e43e8b7a3cea517dc502a42803a -73da983f7a78d086652d3e0add8fbdc7c9c2cea754a8305b9b79e103e65b1832 -a6a024a5b8fa8c77edcddccb5beefa3c9d1d01c37a74a08953642083851fcbe9 -4d8bce1f34b7c71b68f3247eb463e7a2fed1bda308c877e91a86d6052ef9d55d -06d6b83b9af7600d61c36a6c460cb43af1cd5bf65113115de83bfc6081d1c0bd -d88f19949680caaa9f48a608fc67deb98ce9577f24f1c2184530f78f788e19a1 -5f17836d2522fc9859b80d7a3c032f533bba7210e9fc43740dabd27fca4c0a84 -fb0b1849a93c4a09c58c553d0e910df0b2c5ba53e8290a3fe05680cd7c611bac -2a82297a1d42e400df434b476be5a2f92aff2db009d26dc81043bbff997ba7be -eebe8ebd761d56ec4e45328dc273f86f13bfc0f5139d908145acf933632b4f78 -aaf3d1917ff63904f2ec971b5b2f4ee6251c0e6500fadc45fd9aaca127967082 -a61ca2891a40763f1fa17f5c6ad3cd1643be1c088eaf4d91e328ebd670768dec -dc895dfc6a554f7428b5423a86858aacadbc8819c0caf25ce204f98976c7f18b -071b79f03d9be136d36b51fbab43d7b7e4a6b3792e3a0c39794c46eb4f4e27f5 -e805923bd6c4c5ea9612fac86f7ffd3b8ad343d2492b8d9f052baf864747fcb1 -b6465f1b1b7e020684c863ea38668c55ce6958eb6bdf0509834ee6fe50864116 -e3160227aa042e26fbd6629cae19d0435b19dfbc92058f319de60913fa956fd3 -26e76b5635b9f4d6adeaa45f31a32c99be06343571e5176e8a89c544f6ea4572 -964f1787df93981b88f68b4999768d382128d5316e83e74643d70a2ae288291e -806d19b180582e19eebf8d295ed214d966b5282e93c32452d58805829d69add2 -4d9ea97d33da81df65a4fe30ebb6b5b8c9b5102ba616bc2da448eeb0f0a93762 -a40521b52f7387c535e17069ffbaf80f0dbf57b296043367237fa4229ffe30ca -938265084c735ceb1fcaee87ee82a2aadf9efbbb4cd80168a0f975b913a236f7 -22fc543668e57e0b0cd201b099834b660b49673d12ecba4f123be5545bdd0df8 -4f1f0e00c46c679b915684b51995d80629cd4485a67fc28a18416a3639b11e34 -b40f292a620fafff9e21b31c85779e885f07fd8a400f84235b585634d233834c -d20801ed4b4973f1e91379e451cd8d29cff2b9989ced4fc976536446fe2bbe7f -f446c5f791ee401cc5dc916d94a2631396634be1a2bbc944da4017ebc4e3965c -e780b758000c9928962f667300812363c761d33f868b1b8753adfc3e77666e04 -c1e468c04da304f2876d1afde4441719c3687c19e75dfaa44bfaa64bfae835cf -501d71ff247d1dd18953e980c8c3701e1215c588ab78b27c41c35c265063c5de -6fed78259cff1d0c848272b4991c414e94fb052043e0a7fd59df65fa27941e06 -9f1ffa2c5f0c32d0ce639ee9c4a5ffb288b749094c464c679ba3e39a11a19cad -1f5192376ecdc9a9afabba7f4b036edcc94e472ae1d1aa64197eff0c87dc4d97 -5fc283cf7dc4944ebc13bd1e937c97e59f053633c52afdfe1495953740578168 -5d137087920373603688a3dc4ad18137b7dc38d8f94bccd6419d9d356d7596f2 -e027ff487fe91e74139ed748df7de8c3db5fbbe0e724bded756113bab6047ab1 -574e67413fd8aa1aa851d1841d7188685f0413ce23140d869c822e22ea13aced -4ba4acbf0d9b65be4227d95e84944ff8de263775659eb52615d6ab62319d75bf -805a6abd316794954d029491f9fb47110ed48760f7b39a8ac5b24841536c2a02 -2555eb6dc69324f9d735e5f2421c2271e6b2619d2515e035203778cf0233bf7f -e98f23bd109cfc4ec0d01e3db3620b1b9846670bf1a8b2cbafdf7731f50601a0 -214619f59f389d6b1e0e0f5660292dbdc7f2a31a3370d54ad4b02d13f81a2f4d -18b6487425ac00228266f1027a26e4903147213a7a5c29ba1bc748da6385d919 -dce09b00fc655251eae84d6f56ffdcadc25d8c22d5171f8c00ba8b61f151b985 -6d55137cb7008061645e8e4f2315c1553381147cbf7901c4207acf851ee2d34f -ac0bbd28528525aa65c6321cbd68bc64694838fd81b20845de3088ec9e13a886 -801a40c656766860361e04ca6483aba7fb9ce30339df27fdfc44b34fc3db554b -4e4ef91c3b7ba7484cdc036fbae749376229a608d1e00913c03018e247cd6346 -9769dfdf3012c2f562905d9da397bd007b2c81c47b8dd3ae61362fc8661dc620 -bcf9ef2561e3c342ad2f3962ccffe8e98e6d62c65fd9ab872783dcfa035ef347 -a2d0d61bc2ab27e4f96f609b91ca099895354ea9aa11881944c99ae187fb591c -01cccfaae4247c6143689dc9da0224a43c2ce43b97d49c0caaa14b838bebc579 -37fe3a2aea774f1b1cb928d69b3cb31f937ce83097b12d6f76eba9be803c0a31 -b0bd8de2b22489e3da1b833bbf7524252d51ccf76088fc4125e1d0e6d6815468 -547b248d16317095d732d1e9276d063ab7665d2e684ba272af6351a737cb8751 -9c74e5c624c79a852a39bc22446a87c09bf4ca365b1d134c7d6ab23fb5069d83 -be00745f0672fee615dd8071b8ccb31a4866853d7805ba92c618d2b849ffc498 -6fdf4abc9711617d498fe7013936a85d12da318bd0b4d2a2dd715749747cad04 -ed570e583b2f33855af8a8d1437d389d6e9b3e47f9de9de4481c492a05ac49a3 -457307dde03b8a30ef2edebd60a5c556db43bff4854b255c716cce2eb9559a95 -5dfb185e18a341b0776d6c782c98675aff75d2fca752e915f58e5c9d0f192914 -88e46db6a51bae30403328930f5639ed29396895778431543578109c917e5730 -9c5cccdb2b6de16a8cbccd1bcc97556e666701659a43c5af8848fa4318cedb25 -67050ee249eb8a7fb5c210eef38be485c82d69ff77d68982222387a04b2d08e4 -48aa0d2dd0201a1d06b8bfc14169ba52d34bbe65a03715df03259656760f90d1 -043474c465b5c900b86461c5e33a5f93210871d0979fdb5b26ca1b2409c8b5a2 -9ac23b4a69053f7c63efd9c9d904472e1c387f97669a830f482bf3658403d095 -9795695185c1a677fd24f146a4c01821377e35373c2f29252f2d33bdb4c2e65b -54f6fb2a74f4f69c8099cae259e3dda70f680d76027e951c523b33adfbae41bc -33940df06666a88153f983ffcf016ad439a84cdbcb32117e5e597c541e7192b2 -11177afe54f0ccacd3b67c10d44ddad93e604585a513831c8ba986971b189295 -843caa12d4c3066951a9f5cb6fcaa07444e4be618b3d6de06fb7754823e62fc8 -a87aef5f867e80fd2bd0c699240cd59203136efc3a94eb3259f68a81e923a78c -8c30c38150bc808b7a0aec0e254e623474456084331837bc16ef060780df87f2 -f74fcf280ff478a04add5a41aac7dd136afb9a4721cb04f1a54e8ad7c886cef7 -33d14d742c292a307b8c50ed8c16756a336c45e6843342a15ab362170975b429 -3986013ca616f6728ec65e0b4ef1f4b648db8f12c74e38b2164ff0a056b53aba -a218e7ec36425b4e8dff37e420ca3e1ba16c5bf6adea301e6039b596f3ea7b29 -df568fe8c742d0bcafb24e7f561c73aeca87ae7cdf7ba2c4173a5fd76f941586 -48144781457282078513542a6ab75d2dc6976f185604e4ffc7480015d9feb000 -46bf9f6650d702058dda7e4f410de647e3ab2ac42561e4c73f96a22fea4a31d8 -f36da788f42ccd7ad66668fddac36c37b800b19bbb32721c40fdf1a523a06750 -86de6580a675fc5e254d782daf7c903bf2640aed85198ffd17f19d91ae85b526 -448d14aed5cc66dbef9b510c9edae9210dee8f44670b4ba2945dd98a92d49fdf -b884118efc1263ba6fd2712047df194e12e107b793287007b57145b54056cde2 -e8310ccb234ea73ed35cd7a060b6088fddea99c4d93827a0adbce5d927faf657 -d3a7f8a49626f9ed40e1e3aaae8650268c4aa85e8b51f63ebe592e773306deb7 -c78f80d5c96968264d0001bda325f560e664f9be197ebc3bbcffcd0ae6fba5d2 -fa83b6da0f8a6278c84530e657e59ecdd591660a6607eae2191a0fcee0e8b8f7 -de61cc07fa55dc1b9bbb98930f93b1d9419b84e6e7b8ef2595442dc264c65746 -1bc7a160af243059e0030a31740a012b783247420967746903bbf44ff2b33aae -487fce9e1b54b1e67fa272e64463a796201b20b6f123bdacc9f04ef881b16ff0 -b60c151419f090edc5d95ccae9773dd1909a37fee6bf39f2fa658c1da7a3ec5b -290f183b4ea95fc6edeabb46b5f518a63d7b8a1e2e0b8c1eb35c95963ab65e55 -9720282fa5e4989ad605ddf5543f50382f539642340c26e379b5325a1262fc57 -532fc4e6a315aff2d4159a0eac7fd498e09ba2e64dde029f33402a21f54efc92 -609fbb36907d798a34c86644264e0ca3da53639e262b49be5f3d212d36086fd1 -5b68624476c0ab1f715d35907fb19dc62625f59b5e9e63cf8fcf3c3c68a6e480 -2d927018240a8fe4230922bd0a431d67664753d51d4f5ee894b5ecf678f342b8 -05b201c2d4540e452a1be93da7c0137a3852709a8362355935494b1401ab73d6 -0c4fe07b2314e63db3005a40f4b36dabd0db3eff936b0a1cc643227ca4fb7e0f -a29ec03ab4610337bbcb63d72f42716fab0a3058dd961b2f291293beb9126000 -a8009a5ab98b0c7529c0e2c4ae27acb684bc3c07817a2d13c672dfc6cd448f2d -9c8cd5a1f597039ff2601d88f2b3dee5980956fada5599c5c968c5cd2db83a9a -e24e2a9eff9d3a0a488f3d7a68cd056a6f8502d6e5a61c305fb99416001a691e -fa95afc08246bf070268f62f8ee9e4ac8b2d812a728db372c62209fb6b5f6789 -7bb1443ad5241a004b3cee1b9e1671d5de56ad5491e42ea7325cd718578a44ff -fc73f544a6b0b1df27c39e213379a1017d60c11a5f8769022bc8fbec7405f4e2 -bef06c1962e4b4c45a1e080ae095ce911736f220831a2bc4c958a607b9c88a05 -96beb76fffcf4e469e2dcc09857bc9ea5687be77e1e392f416f681dbbd8da68b -f378547ecf9648c1b95005bcfa1872dd1e72c5510bec48b0e411ca163c8214dc -0efdfc1f08e925a5bfda8e6ad2f9ee106ab0a053fab30677c6ed7992899d3d1c -30f11e59bccb1e0b329dbe5415fad4b7e420cf9c2caa8f7a032d5e9f9558c2b6 -80f5e6af2158a8ef1fb1e36554ffcff934bda7039ad926ab6e12555d30f76f0b -e98e2e19f12d4f4e8e5ce72e4b2928c396b2e9debd44b9bf80e1df5acb4b9097 -f6fcb00e1ccedcc72e494e68d55151764795949847b513c4cf8694a759f1c5d3 -c6884ed10626bc8eef3097934426e7d45b919ec141b9ab389746b6c277469d33 -b82da2ef40123707646ca62adfeb5828706b571e160efc63d98e8e30af9a7c6a -4046777b2a7c17d08e0cd5e1b79c261b60cd86fee6668f6a3812c6d1bbe85d1b -53a79f0ff4e19c0bb6b2b07c3bc145727d25f9adf2f6ffa14e74e33f21827092 -1ff9d9227d08e044cc750d532bebf0962b6f65aa2d50fb238ad84646d16fa466 -3e592b1e3c21b07daa5e8978793436c50b30f31b17f3b8c3a8a9c98bebecd6b9 -2ad5f9a99cb4649d799dfcaf8860759ac26182ed3eb6a82a980232a426fb7934 -7869b8b24c966de308f669ee47f623b95abbd9f7d81e5d0e81714b6f328599f7 -5e7f9a85f92f76e3df446a7130fbd7652d17abdc021fcdc761f300cde20bb116 -e36484ea2f2ff9032bee64fffe992b4c437845edfa194bfa3388a22ce241fbd8 -fe8d0549d2bf43f0ddc6b0606e976dc36ec055c3722d7fe96a7339d15f93befc -74b063908a089d9684f93364476f9694a9a4a4e46100a6d5d2f3ad34702ec2cb -e64cf76d70e70fe725eb25780a3dcc619c3d3d1fab7d93ffdf695c9d2d86a007 -ac11eb3d551592ae551cda8f78ce2f4a06c798b6bce573d35f9c01a775fd3e6b -9d6f2eca089b11c38b812b9fc497c58d96797744d9a433f0f0f545bd7b4b6ca8 -ba8011c1ecbf6ef91b1ff7d016865871a12eb9ff3f55e4052c152de96bef6d1d -698b9918a8a68202378374097d8ee27f153aa3eff3c6d49b67d8e09cb51b9bb8 -d18eb43dfbd8647e4d2b3992810e46ac719cbff5a28be6532b39c2b462620109 -f42cf1cde4aed3b9f78ba888824dd0d32778be34ef4a7a84a785ad7920621a25 -74376e0faaa0fec39bdc769f5526fbb3f620b3926f6bc749df679115610bd29a -fbefa357d082db7719a75b6396a01b775bfde12394c4ec0a0f75ccd92de8803f -ec9f408861ab730860e0309b3f799eb7d99fae4989c83e46639d08a662e71ede -60aceb5280b19a7ded32438cc1ce140487e52db031e53ffdf299d552b7f9556d -438171ee4787bc6b445dd2bc23da420747f6e81046e715dd6f5cbd9a97f08deb -a742feadcf5d93c7c2557e69b45a505b91ac6799e37f40a2a70f3d0c0885f85e -cad7f5d5498c18d496f84010cc0da7fc91c4d1eca61ce021b3f204ccac60423c -269631a05d330c8b4574754aa6019885866e0245eb7efcbd747dda328525cf9a -3b13b29b8752df2c8c30c0bc3207b37948c30a2d037a29d1ce075b778db6ce18 -551facc66a4032c9479e5122ef759d8c58601a572b0a02d8c606e0f4df80f411 -ff5c60c06c5f263375fa7fb67b6f670a453bbda2f41e71c7da09770162f636b0 -108680424e1d6ed498acf2b997dfec6d8079b2d26103c67543fd0bfeabeb027f -dea56c640827bcf1d5c9e353e30b46ee9d3495c9af5a6cac79703aedfce3a0c1 -d4ce1b20275ed9de111473494bec7da5d579ac5260aebe9a0cfb7c6730bd51ef -c8b8343166a6ea72e0c25fc745b2c425d852b6cd9e8e2c0cfb16be2257bf6933 -86693e380a7eb1c9c24f193620d886921945e5043fd6b8798c1105ec40d4fb82 -56cc8ed9699a1f84d7438eb7447ff6112686403c97385442c3d34a9187eacd1d -dcb4b5fcf4a11e90baaa10fbd457053f5270e4cab233f41f56cea906103c5b3b -0e7e5f9b8abaf1d66572ff8b15e0979926dadd51de964dbbac8abc813c28ad71 -4b14bcc1690838b6a2a33a4045e7ae481d679178ff87b65d5e7bdab7bd59b536 -331c132115020fd681ae7705d805023ef790e163ec92f41035e28c6edebd276c -d4de63de8141cdb8d77b6a657713bd1c38f02ef1d97dc791883e15d96b7b701a -2f124ebb9aa3a2d90dc825470852ae8a959e10375ee5abfe70aa5a1cc6cb58cc -df3ccec83216907b8b80ff54f35d53a2d9c679e61c2cc9d8b3271c597d1cf153 -f5dda0a71eb2d2ed289a5b0d8eba301e7a4fe05e649d53cf3c6275c802b88fd6 -5508933966a5f261c898f755a60d7d3c95223e470b0af6ca4b2a57615c3e2465 -f535753c0c3d21f6cbefc29036d3e925a4b6216290abf8ddc86ec955157ae441 -6772fb59eb3b6280a78f9183bfdca096d5b46f938058c03b38adeb1b4f4fe848 -ff24ffbbab3077bf50b1fc474688bcb05d9e07294f3871bb2c0dbd266866cda9 -a22b2f3638e7b93d6eece65df65835d6c8396e5a109bb65d9f23619ba85ca9a4 -34564b9f706f2b0b7b68518f6e0962e101d6a2a83565cb1bc4342fcedb6e7394 -4d303d4ed4f792238531bd105fff9aa61c29bccd5d6c6ee399b48ebbb5bf3932 -63de8e873dd0775fda5861d1a9c547c01fc3cbdb7f9574f14bdb1e97280c024a -63a922657125be2d5f975e86c0e4b9b6174157126a9a06839530543f1fefb261 -143c666c42615933aace075512a988c9f2a46a449ec3b13fd118b4626e2a047e -fc90a20772c4ebe9b23eb733fd45dcd20289ab7d801aaaf5fce13807ebc84420 -fcf927bc88e48903f17bad04fdeccb76c7e2ab93e008321fd5a83a39b8325343 -59d4cba664629d807b624ec727850bcb92043788a855a28e86aeed0fddc4f6f1 -fd11b6f00224dc2d88248abb9245112914e92c933800336c75e10550610c7569 -e09c8a3389f88d25cb30f7be1a6accc5dd17b02f141f729f1b36d32fe93b4ce9 -75865054e448fcf1ca846bf004c1c67fb3c48a4ad2bd9f1d594e4646eac106b6 -7e747f2e64fddd88d076c03b8d7fae26b53dcb1027f92fe769a8385e7cbdfff2 -e569a107b76e592fa59f8d92e9f009ebbd872a09f3fd3d9746e8a8955634858b -4d4d967be07f8999d7fdc0ffed37e83f865469901ea075fc27e9a759a50dbf02 -a7a1d7031c78c9cd66e359459469e2896d6d4fff36b7b2b510d66761fe133053 -b2d64c8199558288054b842da2816588a898e05f2db1a5e11813ad89f1660910 -410c531faf42f728cc1b34188084de2578dd0f5458bab3c17da610b7d6afb635 -8ee66f8094436d0c4896550753f4a06cb566188ef59b536ba03ec04ee8650a3e -3f3a932b61c940bb0eeef0ef7c1301ba52e59a904542ca2a9bb82e1e03500a04 -f818f8f747d3c431686d543e47b14b37cd1e44f021a5da657aab08bd56cbdd7f -453c331b7041958d618d4b007f5798cb49260ab59801977df6eb49d3f1e609a9 -c862cb2a297a2acab8d2ff5263f40fffc73078e777863f7947b0419b6026b7a9 -f1c14bd344902c8837f5a5c6a7002984f40607f8dbf01e9caa04aacab39ee10c -0509c706a04db09e08ecff57cce67da05ac8dc14f700b2ff731d0799236646ba -68f305cf7f79020dee5c99511a37b63a693339706560635dcc6bc14d5d12ab98 -4ec26e657619d2c6d8f6490e55d3219ea28c69cc92c3f67bdc437a77fb9b320b -ac18393b3fb793c308e92a336b174f7355710966c2cd8f1f8ee6f081f0c3031c -58149c41849c763fc6395658dc43c86f5488404778235d7f066b3654b9e04d36 -786c1a766e2a2e10f870246bdc94e9241267d7b71c0f4acf0365d8f8dd3c1c1b -178734bf1ccb8d202929f2e956b4f27809fb2e2677162c978fc098584f510765 -415d6254734a525d73c92050c3a2dac12e1c037eb2c1f1ea479cdb9a2da0e899 -05b9eb18eda7a314654f7ecf608531be3cc30bb8abfa03102a670b87b61eaac4 -5af4d898243ac70207fd1d5803138a78744528a47e9e371817674f2ca6b97a59 -f19fe641e8e121340daf52a2ed995658806777619a6b6dee640a04b63ea9f446 -f4dbfb071cb6f6b4d82e85b4be34c39a4d2dd417aa93e07fe3b3ee3b53644510 -4ecfef4e1caf7b89c0ec5c3ae61ba1e958f114aace905f7cafe7a2fb2cd17e91 -20275a058ac69193c471ef47490d21770792563a63d87e23d8e1e6158fee9510 -eea1d2bbccd5f8e28d63c04bcdb78b3a49d640825559634dc9e5625db3b72011 -85de810c60eea94efd5e25a04de8cef3566c0f4b6a92ed6e58700b5598fcd65d -42c4ea8efeaed8168f36893aa2465f7f6d5d3087763b4f2a53b38ec3a61173e0 -48a4864ae6a6f6ecbfa1e92f15de678eea897b0776c7fd7ba192c7da0277699c -a1ba6c9516f89ad044c418c24f8af15fdd129f2db45cefe186a20c6abc895c94 -241a19145c7f8652439fc92f8ee142abd14bdb4f80bd43c3a3aae6cc8c77b759 -21b42047c0e374c123d3f631e25bbf1ab42115927ff52af0c3c8a31cca288d72 -126fa5bfc2d54aec8d05488348b72e80b08cdbf483d994cee779296b9357fd9b -addd288dc5a8ae95467e485a92409afbf3497aad25a097ef8165c40d802bf74e -79f08b2320aa4b110076d4ebe15d073d0ee1107ed6e9d58c05286c62f4136b40 -4a89129c66c1d1726c99b8cb4ba8bbcb6b3b4e73a11cbf11354284f23a76e0f8 -aee94bbf4d661739b81e3b47d5b4ace66f695001fa09a18a9960d741a8cdcd4c -4dc1c68c0fcc38416fa6f7877befef5aba8968621ff6653653b3c21c8bdd0c3f -07b8eede44036cf8a0aaba353e2eb14cdc1341687bbf0ed1d1f910c6ee563179 -95bd02430a3eda60eee5d36abea5ec10e2de1dbd9e3cf96c0366b602ff976873 -3a49d5019640163949e41eb4073fee6681d61698932a4d8c613b686bee37bad6 -ee7f19ad012634c3b6aea6a4d44d1bcc018f57a72cd1b078ed3fefea13f991ae -e6619bb1136bb64b271c96ac8b4290a34040c3d56638227676d75655abed1eb6 -d709082d70698cbd5940cde861d6dae8a7656d6772b89202d376076e6d530a2c -c1ffca88e2aefd6c4ba2f3dea6881d835bba8d433e18a067bdb7dde867edce0e -48d9854f21126726dfcf64cc97831883e35fc429be7c8ed512b3049b40af8114 -35477c782c676d374dd41673af8e4d3d929054f1cb3aae92a20469fcf2b0ebf3 -55e18aa050c89b1f35c8dd7ce1f26dd542d6c70af4501c7486a72cbaacf5624d -66dda7607fe961681476fd54154705c0b0a2fb1f8adb4d50dcef80ea10b341ff -d276e9e12bf4a41aaf9efff1b98a4223221a58eeb2c094972c4c61aa9d6b16f9 -a36fc6af6f121158c9e3d3fc47b8b716c785c0699703c91b80a0478a391ecd41 -ae7d56b313ecf34774933493d949346ed190a7a4ccb7e7fddc8da3c77324e9ae -70af63b469cc3e8838d61784dabede694c35cfa46f1396296424ce3ad1dc7d05 -e6e94624065717493ed3dcf92620e88472118ed0981ffbaabef21fa5c708e3c0 -349c89b88fc10cba39a1807c8c74aa70829126ce906a351203e1542d43a45779 -59e9e65bfb567e9bb7929077a0a1dd08b089ab35fcccc96d3a6d5ebbe4860fd4 -3c936648b92b2d455f979d985bb1af8dca29859224b2f1e411c2cf9489d41dfb -75dbc22658a45c16da828652dece832db5dd454783bac82eb4a33a4d3b82f62e -a36ef09beb6683689077c8fd089efb46549515ffc875cc48aaf4152fc484782a -4bfb4b2f38ed7ab8600d0066e27b03b7c4c21643f3e977d1a9a830e714d54b05 -04e2b7f883e9ff51f49621e53edac289052e44dc1099aba1717391973f827b08 -8b2c076e40abbc61fb9ed2582ef2484e7e07a7341defd54da7e21f16c071fa3a -51aae26760029cb64ee948c4a54725890907e94804fd221be309b33ec2901dcb -95be395576cee7f702a03901044054423e3aa0c508cba6f545d1faa5eeced999 -f0f9d4bfc5495c8fa65a1f18aa190bc11ea45ab16140f8ec88d309648c64eaa6 -57210b86df19d8d9ae5b98a2b74ea37b88cea4e11c44f879cab4e7510ce79079 -bf63192ad4904b92b6f622e535b538f246d802e089ef1c8b78666ac83d20f864 -681183aeeb6b4043afef1ad4cb4d5ed2d0bf8fcc4f1ee159c1291050da9a52ea -fdbeef2e5d5b2579967b4f33aa310f8c726aab7b9a0a07523a3c17174ed67a37 -bea1fa202f75ef9dfd3c597f3d983bfb53ec3d5c0170cf5405ad3be2634315b7 -f823b857f8854bd67da9ff0a01e9950bb0699bc2a4c0fc0387f336ba33d7ed71 -84d531f2b0bf886b562c2ed2dd6fae78762d409ce0cddc96a7161b5b597fc154 -1a1abeb0954146fcd3e44c93295c709e30cfd0b7ed5eac7cc4eeb0e99dc8fb07 -9649645b8c590850ad20bc44eb2c4025a0a568ddeb503ac1c21da965ecf9fc0c -5631cc74b3b0ef2b9826e2b4103ba3e0011ebfc2f0430afeff63ada1a3bb5568 -55bccd1ebab67ea9a04bc971ec6a055563a71e362ad3cb79d4c1ee5337ce5f87 -098a0ddada02c19cacb1002146bb3631beb166500d1fc9ae7b88949e36183f9d -86a17a36b0acf3421162cf120180d3a436ee5f6bc937ae7cf18ffeb652c48633 -20ec0d42bf09c22daeafcc2bd681f19bae1f8ef7e15f5e09c4beb446d7578b0f -49f2042482b785e8543acf5159a40e847b078629e632c5620b86e0e539b6b4cc -f78da4d96f465ffe472fac5ebf8ea6e68b2310a558b9ce3ae2d16f0bd1a1caec -e3e7ff8ef1ae81ec8fe81c6c5bb7315165e89d753987eed98ae9f2d89e3336a3 -0fc24c0f8c3f2ea135f6c306816470fdce5d48a229783f3d1f332b6f4ac565a4 -0b1ed85630e64a1ff78ca6b92d47d317064c88124331b78cd6caa7c93f5272a5 -123db565c6b798967e149307118178b1d4a0417c95b2df7d2867e15e7d5574a1 -4f2146a5377247336c09f3e4e5b45db385d7cc90a17543b86d7c1f77bf1c5182 -ef3d26e6e95b7365d12d5845301ee48f90391a8075a80306348637b56f25fb0b -5ca4f6b8c2041a5697a182773b30208c5afcf5c9acb8902dfeadff795d998cf9 -b3a8abb77f90c91542ba110ef727c7d9a13696d858bcd567ef5d64ac43d26c20 -a9aa27606e9f5770c3cad5f8a9a527de7403ea118c8e43ea064e6a1da9af3382 -38591437dda2a87e80a9028459eb1ec3411b3f24f27630eb7e356ae3548570a5 -8bb9463d1abf3b3608ceb02aacc7c9c06ce283355e5073b2b445bd815d27708b -4020e90cdef6bf39de645736d0730278dcb3fafd44ce088ab70287d9c767d49c -8ad8117251fb55718cce2cbaa17d8494369b3ab37ccc50484fe7bf2d305210d7 -e011d36728405d1ef1a73f9e53e33ddc8fd38569ab2bf28cc07d0799772ab6c9 -6b8e28f396e0938dc86b896bd668768493ac290cca566e84a0aa432832df3b10 -8525cb08ca50ea7d71eb8d64e5ceff15da8a9c89849e85269cfce2e09fbcc42c -28a3d675d9f75d7d63778deb63893b1e7676ab4408719ed6e3410b4e2b783013 -de27eaa26e7318c372ec61282404e7cb9f7b79d2a65f8077f0a7a1733538fa78 -66b32437cb5fc67eae875dd77374d3f2c3c082f2eccbb5d7887e49ae1adc0d84 -0f5171d843ea609516da88bbd906a8dbfa77cf4e68e76aeaf960cef82d8e8f9f -7d03eea0c16aabe9501fb6c1993fe240b8b4804d92bbab0bfd58b8497e45d410 -033735eabeb4c92d17af8b9c5dd7bbf93ca4ef8010407d69c35a2b5897ca56ec -920980a1c8f159520e6dc28f3a62d6e7d995df93447fc8e9c19215cef25dcd62 -c9a19e12862f8e3bf347561addfa34c9e85598b68490553cadff9ebebe1ebf9d -954bb6d27608acf46322ef67b6537ee8ebf6c16b97b694641e9f2858fb9dcac6 -311e198ed43c34aa0a023c1008449186f2659beb9bf7085cf7a7ff5dd048c910 -66e704075bc9d5da90c2d26b14d7ef8e3d54fc72703186a8453b83a7bb4fb5ba -d3f796de88910b843c9be15ef354d26bd39e1d1503385a169f3f92b16f3f20f3 -1ea9cf4642d5977fd23aa0e13ca82377ec95fa4b908eb0524e2c573e42ecf2bc -90c51054a9a2e0cc8e93924a3f71edf177cbc656ae838f0542833b6deff1f990 -7d34eecb257585fea135ec1081a97818479c80215e8d5c4fc9ee6e9f68781682 -85e8873da0a1d6e44b3187df9a0e9cf69372d9fabbb11c9cb68b4bfeda609682 -dac5b5e18f004096c42ed39016ccbf4008fbbbb32ffbd970888247bd7d57b1d7 -11d4b5d76fd339fb769254a0833157eacf95703abbaa0936bb10a59e9149f070 -f82daa134f97f0e48f8cf9d508523e98d1e331e159a0c422866620aa859a30c3 -ea9ba48d4553ba65dd3f316bf64c103ca11839f2ace974e4e26221ad9f6741a4 -5004d4e3cd24bb296f1c58061f245792a5999a8053b246568c8c0dce7a030d95 -77824a46638ab0e07dd74ba20e76e28ddbfcfc27240998d418e9ec12cafb7dc1 -7e5916bdc46a59f31b3dca99263bc1c785aad33ac1aa0c57dbfe09d7757867a5 -67b47395f5d148c9ffdf1bb401e216c79f5ea233cd2a5a82c94e24f778c25353 -145ea4fc505c32c168cec430b3fae9e69a921daf0d5b2afbed1575fa115aaf2a -61f1be743ecd301e63db4996958698cd1f27aaf66adfc853cbba31e0f98d8e15 -d2d643c8a3cae4d421a52adc0cd80d2ec4ec9e9de7bdb1315b52ec72d437746c -5c91204e96e3bc839aab8833a766a7b05a223436e3a3cfb5c689425360fb7fd6 -508f6993fd4fa79dc4612ff9faaac79eddf47e0da29d6426508ec4271f1b87ac -446f79d28e672c5c04c6b46e0d1b102cff6b9700ba8fb08b3139d9ff06fdbaf6 -a55128ea0ce3adb73fa00fbfe0450156e9183f6b91889d8e4ad6415f8438952b -de7ebb125e4ff9c2e357a32d3707cad278b9aacc542aa83898e6a26e7f8719d2 -6088f6be110f7000a3a4b48ab264f84d1d7778629c41e0a2fc2d34e22382e1ef -e688ca04d31119c4c120da10b9dba2708bf54e3ac3eb183d7f3b5cb8087249d5 -d4fcdfa9c4b71b036f46f720ebc0563f45199eea4cca13a5b95963a677a5b6f3 -3be08c9275fa8e66823fc04c151ae6793919c89185f65140d8d1f6772927b88c -42c0d16d08d563f5b93e05689e7bb8ea958f90d4e5eff9bfdc7a5acbc29a4672 -f532776c79f34339983ccbaecd33a9daf6fc1672229c0022fbb13ae37f6fc27f -1107593d8d88aa67c1a76495f5f2e08fe8d1013bad99b694c1762ee5e1bc100e -9bb119a159392c286fc689dfc0693fb911d42d47a0e3ac59b516115b12884ce6 -6473c70272420338d03d2ccbe9f96e4fd12416939e92e52e3eddfbad15206bc7 -9fd633cff17ef63826879fd701f275b5fa06c48f462f4f5f9ff98046827c37fd -91e254f95a14b354a0b5759d90a75eed92f126191d6437a81d538c7b55986e2e -18523bf547845d77a3ded6c69ec5bf558094ddc40a6505c938ef395d008ef1de -1296388919a9ce63ff38f476d01bc30445338735c7fda0359d03d58f748f4a28 -ccac2ba01879bc05a44fc21835e4aab1204b1c6b05ecf32c8247a63fb685a523 -35505e2be2b0000c7fdcb1604a6d480a1a5827919bbeb66faae78ed7d27fa8a6 -436af96fbefec3ee6e8f80cdc4ba28a65138b6b18671839bd96138795bf389bf -2298b851db853c7906178a994223f533cf3b00680dde84aba13ef69f8191b7ca -02f5de337081df829efd5f3f6a435d6d805272afd5b2af3eff829b14cdaacb31 -c179bbf59a3b10454d0b81e0382fdee3cd5c941a2c6e6b446cc7b08358ef4409 -c2a4e6ca109c9b3dfedae8728f60b560ed3ea8252d150e11db2b7fe19c8d5233 -1e8385afa0f792ead4c2ed5d3b0044dae4e732801724de12d360f0f47bf6d7fa -aeddd62fc5b21f4dbea6ef739d1a005b141d4ba3ad34b9c34257ba5eed4b2e85 -4f5d8d07e0ebb4bc6b70d5a5260c7c0b4cc7bc1044c77e8703d0d59c9408f103 -6737c15b3ad668dc22066a6198967fd8653ba004737f5394445da06fb344a4b7 -43a1debd846c52687e9eefe5e06ddbe8c8126a87971a80d67f4600f442220b6f -4c41f388645a6fc978c6dea9b31e09732f050e19ffa4b112771741c025d610b0 -6e1f8543890cd4cd2125d9238d008091ffc2e78ed57b9a6ec5113cc8044c9372 -f305f5ec1a992907464e22188c13ea10b1ac76196336222c0e052ef963a1c6ae -df38e2fc92abc00d5a8b6d8cc608d670636a15cd41da8161e03d8361c09fe713 -dd60041cfe0c82f9df04625f3a8c01f1ff3f9f2d571e406a5775626e3dbb7d8c -1e4aaf46df0b42e8b8f9c2abcdc7ccd0b6b6eda2fcc1602f0b777a8e494a892f -d3cb1521199cadb66fcf60e6d9163a2ab0c2cfdb20e897a1f16555d97c2c91eb -946d05f5905982ba85b77ff081d1c69f73d9014423795c4001af6f9bd2e484d6 -91fdc2a911be3c9185b28f89fae11ed94de19cab9b52e0f52493707e73de0e31 -f9d558e75bea05a5b02f5918e7139ab065affe31956ad54865d0097c9582514d -99ad462d1a4de2ab2bac081e92ccead8c03318b8ea7f6d6077a779f74173794a -59982dfb57998a0e64cb6413d774120fa51c165210b3c63678b0204d326db945 -678869868bf4abbc060d9961c03586e3603d01bcb12ecbeee7ef95e89429a2e9 -980c4c2d6165cb22670efdeeab861b9bbea1b10ab948c9e99eaaa7f0c6603c29 -c67bf2d42ea6e029bbe2ee4f48634d7c60cfac1cdab4daec98705fc8397fc656 -af7cfa465ed1f7ea9c0d1c5a86c5a33601d75c0293f9ec0b448fec40e348bfee -4aa7a6d1293650c7773562b31cb8181535b3e5462b6b9acf3f74fbe01944512c -feba186065cf34877600426abccae5ce76bff790dc03bf0758b64e5c95010a10 -ac1197e84514cd9df7ca150d0585a09bdbd3dfa86b6c8d328f4dc8ceae0122ea -d7833cc21d6628c16003f7fa5e28b392d80a246483856c63dd35233cc7308ace -0bea9a4f2c4e06e544bb2d5e412bfac62ec648f9fbbc488d65ccdb2fb7a6a3f5 -c682b805a16c6be9d03f4551387d3b19ec6f2ad0d2969041b18c0ed96ba90d74 -cf0c9e4c0812f2d98e761afc63a71e58e0eb5f4097bd7e72e7d650dc3a2b012c -9329124c1ba2f4816275aab0d145103887770bfc9e488ab635245a5c8ac03cb7 -90aeb5eafc4e99e70e37190bb5012a6987ecc403b2b54b0a3a0bb30587e99fe7 -dd6beb3a3c8df7a50b4d5c350d7182e4497354eb5538061458af62d5a111ce95 -08a94bae4a4b9abb53f2d4395bd6fa4c1da13e97e4db15c598468d238b81a78b -2a24530b43d81dba1f265581be36f4a19b5c51d7aeb0b4e017608656c6ce7cb4 -adcb33a8ff7cc76f7ce54354aa76fafd4958b9e1ec9936e587ecd4fa75e3dc0c -d25ea85d744d52c8a6228bc4c9718ec43d056412b513e141a139f5c118a44060 -9827bc275c901b5ae9b6179a04513b6c4d039edf8cdb3f2c95b43316ada44146 -f9e7fa093fb2acf38891492cf93e407ca813da0ba34a3da595c346d3354c1f81 -2972d78b5fb3d09e413adcceea264a12da69451a786db4c4ee8f7ee2ebdf0854 -70f04388848dc5c782f7a91e070e1b79776b9254e27f0a0b3110c431f8fb3848 -294e724802de1e27ff3cadb8fcbeb920e7967be152c10e299eb30d632f54fe57 -823245fd26dfca5036c4cbebe443e8a4a21d1e6ef3f1dc6860613d908187ba56 -dd64f85dad9db1504e7f858cb388bdbe829e067c8dec2125c764b79607cc822c -fabb2b2cc93b4d5dca0568057febf7cd86c72762955f2c9d7e1d734da77b0862 -60915afd088ac2b113aaf06be481ca2174fb224746e26b93175da43dbb72f4d9 -68a85dbfaa81b6802c130ae529ffdaf3dbafb39b4c55317825b3c687738f4370 -621a2e720ca0d5710f3a1d963c424a73eb88af68c3dc7ec0996a11babf14c823 -a3d52369c42e84301b47c9ebf16e33cf02d1cb1c872b0ac7ae59361d330f5fc6 -31f104cf221a3c6d23b9314dbf3190edf21331787a0ca1d55507eb76fcfcb8d6 -da4e2ba9d793d158998c06733cb34dc891a8e296a48bd0c0c4dcdf4fa27dcbc9 -0d7d1ead5f56a22336bdf4818f4f8ee4df9b82223389507725837abbb193854f -fb0ae2c55d8259aebbabd35a4dbd3433430618462e9f23f91885d0f3ac99bcd4 -9d1424f9aeaa09887c06c6f62e07339b3e4424fc920b11bd0dd53b200c896ae0 -ede4931f85766645f04c94877b0364e6e7e2a0ace71347b8ab0323fdecf82003 -ad75a9390ae1d10ab82363ba83bbedfaf24225141a6033bca3f59d065926de8c -efcb260f5e394ffab5e182473154b81ea98e5cbec099eff84d53b9348f4b081b -9f120e5275d4e9490044fbc2a9d275b84a9a40b8451522e79c2fd383d5866c96 -84db0c0552cbb14e67ff321ca84793e8ab95cac35e71ae4e20958a5b274be4a3 -641cf01e9b50487a9263f4e60a7ecf6a80d4e2269303bcf8589bbc7d9306411d -1f95e0b59d232b303dc030863cd6a5f25c769dbd49e150f56c4b0efee4c096e2 -130321e1dceac61b3f45a808fed8ea47e0354eae9578991d88c58526ba635f93 -591b3f8debb90e2c5a73050766868ab418e6bc1246f9a200c9010de827147f47 -4a9a35b39947767a2cf12774083708e7e7d1f25f75f1c27806a7e40c5f4f8456 -8bd43aefc069d7d862b78bdc488717928c0a283cbd5e57ca76efbadac172a6e6 -28009c10d8047648c549de7f26070eadecffad1e954185ccf9acf02ea2ba7bb6 -0730a1a46969fe637617e9283cf68ba3400fbc0bd9e24dd4ae4f33241451c4e4 -0f8b996eb76d3b47f0dd0ad64ac75b6e12c516f843578290079aefa03c6ab66b -8063bfac6b2b07d8a94f636626b7803ff277e963222d738a6c4cca04592c9687 -8a9c74a4c528baafa16a2d87e6182b7a6836e901b558d4b9ac7c4258c2ef1dd4 -e70dc0e985661cae6535af3fa04de9be151d75502a65b9ce9ca88351728cddfe -25bcd365d219ef27b7986cbef39cb7450ae28826530e0413108d08ce5c624dae -b1906f7fcf4d83c91dc89a1165a1ea5470ea14a91634540d7e37379d358ffdb9 -38d3c40cb195be0259757ad84e0bff7271d666c62bc9d07dbdc2f463f0cdba3f -fd33bc0b7b566934159b77ce59a431e837c913cb8a3159b4b665e0f0cf237dcd -69c056d03b39db46d40ad75d31a1f27e28af37c0a3d95a6bb89844cdc60939a8 -a2827f7e9d64fad39befbea536b519ee61d1db59cccd0c1c62975c34fbdc4fdf -a2c85d3122b83d27a81ee97c81d8c1e280d67fda2c89bb8ad5f9e34c4408278a -20ce29f25391b4aebaca2bfa94855b58e53180cacd548d084cccdfe203399397 -3b34eb9758acf3335999069b05ca7784fbb467619bd48008c129ce80598cf595 -2d2263a36ba5a5b61d4ce7faf05e651d26d9a96ddf4d6e164a76caaffc7b7439 -37c2c332e496cbbe3a15e3f07c8211c9cb6f745c0b95a5bf36c55b37056f5159 -56a87691c070a5bc22adcb697165b17de566c6ae87473faa4329f9d34b84a448 -a93b1ae3c3b05dbafc8f0a9b246ab12fb5c5f21544d790a03b0772c6c07fe41e -561c04d25290ad18bd24674c5d557dd73a1c022c4a0c3345c4e97ab872cfcd23 -93926ce1f80402e6f1e32a069e26388f85f58a6c2f8d37185f51325fbbcce7c0 -0ea9ce821951358816a3c35d9a3ae47c15a429feeb24ee9c6e91e7e4f4e4bd5e -8e9020451b587aff54a9733beb5ddc14d478ec52011d172e308149f6f68ef4a3 -af9f56f2734989eaebb7b1bb96153429d9bcbf3ee0a6c2acca62f586b506368e -21494002e1c972624da592c5e0e9a316482ef500dcdbded7f4d7331f7bfbcb0e -1ecfe5e9991d59301b062abf6cd8e3543c24e948bfc730d8344e0a323efc5e4d -b1c037b366de5ee1eaa0a0e74f39c7b1af40de37b4327e620df1bf7eed4dd9aa -fd15a96128d8f37f1ae60b6aaffd96e806e2c0b29dd43c7c3ccd00d936f76924 -54e3234ec6529a77332b11a25c2242c53aee5e5d128f5805fa007d972eea2d9e -fa55bb624acd378707405ab37a49e129d003fc9d561ba621eb71f2d1f0342f68 -fa3fc028a7f3ece1d94acf6c4e91eab1656cdedb6ecf4925207b9e547cab62e4 -af9cc1bb900b02d55a89ef5bfce1a8f121d0c80276d61e41bfca88674c65b4ad -2d66dadb8223e8386d40b775d1195b6bc6207b439b2c5615bac548dcc041b7f2 -2f84d9c3d57bd7d58d95c455d74cdba0dafdf5333988d94aea34d01d93a6fa1a -a034f7cdc3a486f0eb051a55a39379b78ea908a450c286b6f7902c1542b7054a -be2449ecf445f56a5a4c2ef2f0994fb3b3adaa35987cbbc0c64ebccd1aa110fe -379f36b8e590195f4409426ddc515ac37be56a6314537d839e77dca4190dcadb -e423cc230dc717b9e7ca35647c3113fa2e27270079736680b0abd1905125275d -18a3ca6ec043b23ba6d9f90b88a6cf51bf8aefe90c25b5c211940058962ec96a -c03c144f18a1e1b13d5c871c8c5c7ad18b0c3045c7db5e77d6f5ed211bea4b00 -0b8bffd69c668c98bb08f4207a80247a80483fc8fe2484483177d6547bf66595 -4d7afc64a6bdefa6d8c12d8ca7a3acf95d56e6f6098345d3772369955e3ce2f0 -affea8a2475757361e2001976de029bf745d701cf0433997ca78c8cc1d6d130c -692474ea0a9114359f645f722da96dedfb0bf6d94529326493b6b18d6abc70d0 -c7ab6f8b68a9ce6538a1d9ff6e41a151f37e96f6735d0fb76cee4d502d13e4bf -4db0ad2c84d44596a66ab1fde477bf14cc7e673d598cffa89e8e8fcb1575890b -4969a53570793d3cbbcb693b09bce2ea64c33f446f3f6b71a976ec1f960060d5 -b80631526110b7aa266b23eb27b1e565b8f0d9b44f4a90c57cfda6fc917f6efb -f05630b00eda90f568c583cbe506b9b91314e31b1738cfafce12f8a17a7bb096 -631effaed2543a732fcb2e5d81689982399e1048ff6199ee677e859f36cb6070 -10ea3ab6faeb30973dfbd8b405134c96a6d40d5e278d76916ef4b66d3bfdb15b -f0dc3f8cc169ca142ae73e778ac690e1038e8b5898f6101ce4d57faac936de06 -890b32c3768394e0d94829f51ff9bd315fc44e33a58394bd5a996ab52b1dad68 -d010935f5a0e7f118aaf9fb42dbac4e642d5b7ef61e43ec2a5b68a3584965c23 -f842dc4cab186b39650edc77dbf52068153c875bd28e4bc30f554b88436b40f3 -1500199d497958c28391846a00f83287fb4e14e508f8954b6ac61c572e634f09 -fde116d3cfb40b73573a969774883c5501d738fc67e3f31cece099996950efc8 -e431c63ff4eed98ab8caa0ed1996ac8530f315b2b62b882a6dae49e46c834b09 -c3c0d35f27be4aaf09e0abd445844c40754ad0c29dc4fc8a3569b182003b24b9 -cd79db88db16272238f9ae5f0a5f0823bd0b174bc25448d9ab253654781a2e4a -51a23e73e22d714e45ae27dd5e8cfdd9dfbe032530765c0751ea3395fb0c1380 -414ef2cce4944f56a2a14a564e41d9409e1929956625b87a17f64ab0131e55b9 -cc1822d73b578854e8c26ae0d560d405dc8a72ff40b240ce00d52c3d8e74e30b -57dd3f7686f6ce18805b2b7757853e49f956abce93dce1d2700915c5b2250ab3 -7ee35b1606aad163d121c4eafc2ff9d7648494db513af8aad8a3fd1ad32291eb -901f9afbe0494a64a99230731841c455d82db72b9e577e17676f53d5f1f3a98d -ef88460a898d5b5184e9e1f65ad43c108f679945bd7d6c777e131fb79d99c74b -e3cafba83814d984752e99e7f86d1dce93d00615d064427f28148b37a2c49668 -974f6a2f5de659b42d04e73d0e5137204b5e68288029327ba9ad8d9124ed4560 -1344da203d7cc8a26af36454a392193657cde0fcac0ba0fd379b74481fc56c39 -63abbe29416be7ced922f0ff6ee6c2bcb032d83bc4fc0002578dc1943549ef81 -4b26f5938980e2b607ab290de624b06c31ca4eaef275212faeda9bd87aaa1b27 -3e8fc6882f298c8e503f59279f66b7b6ea576458b979ae92f3b6172a8f6b9f31 -a7fcb1a241891f044e20a29cd948ca8be18059e01381f445b75316f8fbc77b07 -cd8558b13dedf690eac3715afe7b45421f857d7df4df4229e9a5d5f81ee905e9 -6c63a6b1ea510d0a5fc7223ca5e14bc2475952beec5de9542c692f720e33b41f -d7d1a649d788964430b605a6092fd5653edd47967fd72f8251bd9ba5b5347d25 -3f4b2329fabd0082b71b517d69afa5ae4c6a02983d07b905d4bccb1c0a249fdf -8c6a8b12a7728270b4e90c05c1f6ff3a962ee8f67fde611fc39d95a2ca550290 -8157f91dd7a967b7b7068d1570885f763ff2ab8d57221e4780c5e8e981ea1d8d -b703653412e13b2e99b9c6fa232077894aae6afe819068a141b876b20534d7f8 -d7e2b169dd5720f0170d3b801741797b7c775838b4b36842de3e3fe231ff2a5a -57421433ed3bef75a860343dd31092f0bdebe47cd6a9881a63b55e675db769fe -182a8967fc6829a1fe49d1b25bab86c04befca59b7fb9458863d779ad8df7b42 -835ac1c5a6d16c4479ca09eadc16742be17c1e59ef1ca1fb725db9e871b64db7 -8ef30f0e954be11aff43b674a527f5de267f2b52fee2e51a6681d5ad10e1d822 -c15ab0ca73f25e228f390c450621340f99c4870829a7e223b5bea167c7f6b968 -e2f7f7d3a5c3cb9bcbc45795e98aa6013bf142e2410107a410c3072b96d24e15 -4270a10457d03e9ee7425a416958e991806b139f36d2bc9971efd6bf29e06e92 -713344c9b1a6bd6ba6bd28b6404a4c4649589cc6bc917ba6af0ac4e3ee359cd4 -48a9f74b9601dabec713b8e795e942f0fb90f15f27a8491689c14a5e71e56e14 -022233bd3591a1c7aa417b22f0fa2a7b02e30fdfd56011c508513c8b4385f210 -9b0f01a69b45ad5c701436fdd05d780672ef30122e6b33aea4164664667cf0c7 -3d3bea1a4778b3d35db869c12cba4fb99c066159bb50518bfa211096ec448228 -039f96dadc9b9600ec5e60b70c475bfb024f6d7687c156aeadde8e48b0625c3c -0aeca4fe017d4a18cfd1bbdc370ef6b1c7fe7c6463a961dd06b4329210eec8f6 -a172284470b0d933a2bf0fe7e54ae607f5fd17bf7e62be47db76210295e70f48 -3ee8d4c7f4350cac22004b68af0a1b0105efd86c72c1e6615c3d36e182cffe87 -6d4b4b2fc066d8b6de0283e1b64964cb0cf06a2bf9115d4a0451557602e9ed87 -fde4351940b3dca78d5d66db800efa7b9f0d6f4862323e541cbe078d9404696c -42c62de5fd2fde68deaaab671313f371c2aff793fe6caf4d3529450a9310d4b2 -df00029c115ff3ac4969f454c8dd4cde13ac7f8da419fc22e985063ff6429211 -9a751f54f6402b43d01fcfb86d7ce8c18a69993d40313b419e75a419f88ab41a -40a0052509401fb48777817a764192e55e2df39ea866b150339681a2c894106d -daca983773e1a280a661663f5d192674d0288a303da868f93aee92743504f6e0 -271430d963093ff7172d748b14c917a99896e0b71866050aa97e8d969d111de9 -02874fa90cdee0dee39bb6fc0cce58558bbbab4a4d024157546a57eba7c1315c -9a1c051c287b6e43b0b4195c1cfb7845df3ddac7005e22a861e82b1bdd1dcfe3 -ac9519c77e2a88b302beca597ca0cd3bcad5afd4080d38fa1155080570dab5f9 -f7f8ce9eebe14ab702d19ef0137c615f72b1b3509d3108bf7d6d0f5c7fa5a301 -42a45c30ebfd452e67b294d8ff9388aaaf3ec0572c26034b60ae088ff19e72c3 -ba186180d6f93c64202bc9591b441e303d5550c251d75ab94305979c9942b82e -3bc053641641077a0d203d5d6036f1c918173309f04d27845249d2b92911affa -84dcbec3baf6c61623f8a73002f9afd287dc162762a91f6698aac67bfcae3404 -db70f32c9d81e76f4145d8aae76c8a2b42557e79a3c658cb5ca8eb844cb780bb -dec028775a380862b6d5ee1d5195dc507ce3ced0aeb8938660b4c727d40c6e89 -e60ab163b14cc1f713999906fa5fc58b8b1d10044c17c4e32fca78d99d33cd3b -af638d37c1f396b898bd47776cebbd71fae4162012767362f833dd3f620cf5e2 -49d584ebe4eb183a253d5d4a85a65acc7ee764589234fa74a25849584bc6f9e7 -6da6323675bb14334c7d23db9f8da42d689c14691875712ac8f4263662ba9953 -76a972fa405c90a574ff35afb29038c4048085d6a61ebde090381207ee9dbb1c -f2dccf97635796111a8886662d39d7e3b2b79c9ce048f6d769f36fc80348eed3 -f4d5999faed84c8f4e37271b29d0adeb25c980a8c388afd6fc015b7c5d182f57 -78e9317db58e2efe61a6c3a63a2a0ef9a3c6152b2dfcb81e3c0d00c6520d1a14 -2dd8d314384fa63fb33c47b3bb3e2624fb1ffeb31f673df5105e024ac697fa70 -051aacb07e671787f6f76741c69ea9204ee1216f75491e1e1011512656f48b40 -2272666adcb4fe07be5b79e39ba3aa85774dd992589aacfa7b080fc4b94d855e -e9fa0afc3273d1ae161563c33740c5e2519ef806b6f3a4c7d832c46fa8f86f35 -8aa32b9b0c6e464e41797312d93fd25264b85fb996cce679586077df7e5fceea -9852d4012959de6a9002b4e67317b4f87e2229c9bf89096c32b8ddb3c14855ad -f5fffddbb24a63da28ad2b6028184a4c083f090976bda8fb60bc51d4c590dc97 -b80cce59290aff40472ee22afce117737dd804fbd43de024399081076cb701df -bae537473ab542a08b6a5964ad5a5026f68dded04855c34144cedcf8380d4a89 -a744823b4ecec5f225d26f128912c3f3822e51b37b7e5b6b29e9f1f43fa7ce48 -9ccb6b309bbb9f879527660a6fbef9d7f11fa0104f6d27e32292ff2247668b1b -352a4c244b53141263bf6f6842ae64f198266388aff922adf272ca3b360d8f89 -27f2aa449a42ad993382efa008c700fc74bc6c61a5348c052f247df465f63060 -49531b80c92753ae16a817af2e28182ed43f8a050ff90fd45cdd314b568b61ac -45f575948f2da79a035ada12e83c50c24f09cfb5ce9bcc15bd9c34479ed4ea59 -21960243fa433442b345cf568d78e314b2054e2c146c7c9a8e938b9ce3c7ab4a -2a2aba81a72caed7874134d4126ee3a3096282aa87b29949fbfdcc173e1df4d6 -a5957cec97a798e61ff9ed2d620f4e229041ddb5e9c0a787916374bdeb03d0ad -1dbe01778b2b86c36818e89839e761b0098a7d8db58ccb0e4d67ceb9cbc04e6d -c232c9fab1b2a63a24886b060a78e221fc964eba7f190f5c8d02e0e4711c4a46 -f6611940a8782fd1606a5975dc787fac23f15ca5bc3529af7695abd9b259484e -90512c6667d85d78862e548984e8443511abe283b7714abf122110eb21747422 -c4fde0949df2811451d4bdafce1846156ea531a15a7f8f54b7a117f28885ef86 -5209ac012c0ec7641444fc4032e48c16d2dfbfa3bc12961d5d1ecf95cef74456 -df2efb574e4c42c80a65bb008defdea2e732b101ad7bbb9646874d2e799130b7 -208e1e174cb552d9fca89794f010525898a096c97f0cd41eb911c313efbaf01f -8bf26d7d2820ae5937abc3994e0129d15838bb65a43203901fb3f2375231d818 -08c5ca211909db4cbeaccc21107181a5a3fd93ad6398734f86eab4bbbb5e929e -b4062eee1cd6e18ef5a94b088cf6740b60b08ac496c6781e35d4be3c9c6c6150 -e25ffc859a51489798fa3037d7e2cd96399f663a9c3537649a88297effda3e77 -d98941953f41ee2973e7d80be32ee2d48d5c7d183f4608067c4a72f5067160ae -aecc4b68596b7f80222771698584b1e34ca77c54a0426fa5d3e009350f0e71f1 -bcc6eccaf7001e7fa8b23c321b0335c87397d1a375d467f1783d9488dec2f269 -89590d3a23b21539cfe64752e51ad95c351033a1fa807fffeec3589efc1e8b76 -f81de863071160931055a01d94dc2b8fad30d5bccb926a1d4a9ff858d98d9178 -8c60932d50307b5993fbdd530a5e25fe381959b01e5ce66f8ba694c95b4d578f -3c56d5cd9be8553cefe694b396407f46531c333f1dee44e8d1679133ae7163b9 -c9dcdb20ae4d2c87c7f37087e78570ff608effd4202caf7c2c64887e47617892 -de8f0b4006972fc32628aa340c05e7aba10d892a1d2523fd216534a0dfdd11d9 -db9157bf1febc5877179bd4d8c272a598b016468bb31908e1fdea32906963927 -18a303429a7e1b4240c382f2a02bc8ac9d28bd2181b576c09097c1a76866b5bc -2af2ba8a15427f9827036d5d85d76e0a9fcffbc331d769378b610264c5a4d953 -7b44cff644c1dc209da02b6134622f26014e847e3efc68c1403447e7b3f59271 -2dfd293e0d4b86007a8d9071958d979bd36a47c9e709a0252d61a1e7ecb119f5 -5302f9ce3accafe7dfd8bb2e1708c775143f373ca805a442bef5523e82ffa034 -9f2530b9aed89a8e5c81e013a7edcab6a906173cb0cd48434ad711e89d970762 -3afe152cb282db3fe2e105575ab5b75c00c3b1ecded579cfa23e97c964bb3e9d -48ec0ef42e4761f01ec5c12cd1411c9eba7ed00e85fd770a82266c71c841392e -8c8f2724203b9a44f09005b3173d95a5de83f54bddf23fec70058564161da59d -02121c675380fb0f0f7e0bdce96f656e46f15e2382f316c039826f091cc03e6b -ac9969207117681e0f472ca8b5885355020e1848d66fd99b378542c811f63f5a -bc79477067649055735f2d5a46a35c4133ca4191e6a75f798d6ddd8f72cdbd4e -75de4762d2bae425796b19a65647a3971abbfb29132f35e9accae847962c218b -4973888e3ac04631a358b57d1347e2a74544a70e219b2e6c4c0e4b9f3af2b872 -22f27ab269f3248935cc65135699eed4c1b85769da13cd156108a7d1cd894b46 -fa7e2884d180bf6962240b20812a6b89a49ea08ec6b5a5e8766adceb78cca7b5 -8b89a9c7299801939004db901e195ad16199998c821bdbfb7dabcf1a80081de4 -aa30d5653740803ec63c0f377eff0377d44e8aac6aa289b144acdd5207996dce -96359a17dd3f6ca398b91e86af024f0533ac70b186a940f96d7464fffe38e22d -f8e83d34c8011351ce7dac20a9e35c2460701eb62ed3c815d43dbef99828c025 -21dd0f3680e4505a5a166696d16187d6e85363023823e70f41e4fa7b796e8608 -493a3b3a53d575880f09fa117117d6c946fd8782637bf122d9a8421807105b35 -792dbe884b02a344bd235328c139bc91aa524a107197539fdb2abdc99a7113f6 -176ea649a61e4968187bc7a97475b063d4a52d085ecd3191137c4ea1579691b3 -8fe05a2d3d223c7e5a23526699054f254236b96bb3f799ae176fa86859acc325 -44e0adf45ade76a9d635ed8739c55defd14aa6b3aa86f3504e71176ca2fb51e4 -08f7a7b97ddbd73cd848390757f830abbd1e5437ccbdfe9117d73875c7241f52 -c4d8854a3ae81ac2646700268c5fbbcd03a9e6772dcb7d5b7f2e925a944f89c9 -0e7ad30925a1737a44bf80a83b5a68733ca7f30bc6f47150d337d13f8a9a33d4 -b94fe1cfd05cf1714d6e0496e21b4e6aa498cf59f4dfcb30625cba83a53f524e -e90455af7c17310107b2abb1a287fd1c8489a6ba6195a0f4a18378392e860976 -cef9a48f00b7fbb6c04afbe796a3af0b3a7ff9ad53c448011709d4239ac523d4 -7286b3440f7f9abdf19e4062c415b5cf1e5b1c2ec79eff451643517a7cee43c5 -56f2d68440f64a2eb7f5861dd3de1175ea67b022a137bbe8d3ea80775898100b -f29cb8e25c2f816bac1cef6d3ce5c15cbc3f449f6b5db7c901a4e0953b38f1ed -ceedab0acb10df42e2cd6b4d231ccd752b69fe0627098a3f1bc3b547488bb1fc -03e0e97103cec3d60635a27b41826283796db8bc2d72e0b3b8ec3285f3ef5a75 -5f69a2be9f0e0733bc32ca037df0af3c5f29af5772cf1bce273cb1dbc2143d0e -0a0598cff5d570ed5f1821811e6c7aa8d9ca18593d178d55e45ebc2cb32a2adb -c29f52bf976c98491a5d0a6300922a3031095820cab7baf7344541e08740df1c -a6e661ff99a9011e6fecf6ffcdd8235824ed8f86e02be31440d93f7b65ced2d6 -d2381e370df510ed09b424193dd4202b8277c586e7398ce8e43dd2016f7e550e -644dea807151d35e8d3b3fb66949c92191a86bb236aacb255ff8fd410ec4d884 -e41d54d1eeb2e724ce43d96aa249aee87a9c2637c8fa4b8c4f9e28c23c4af501 -f93d7120ed9b1167983c3c87c44823697113d6614ed80eeced54e2d0f3fb44f3 -4974e6135949b26f352acd7cfb4ec79e30dff73b8d75a6ee74a55e427980f946 -87aebd0edfef0769e12d199b2dbef64565a30a698c30ab05ffd06d68310e55ea -93ccac06a08a530a7440d36f2a736af590a682a13b5a73689b8d8c00c5fb635a -71bea3db8b8a1e5006f1f72e38ecc48e40f73c39d473b92048419be4e5825bfc -2eb3a3130d47e541b5c714d5971497cd23d8a5abb6a93e2da1087bd4b2b0d841 -fdfdf7c17b92e47c9093ebafbaf1b9429958f74e79deef860b65c287370b4502 -26d5fdabc24c04b34f07a048db884927ed1dfbd19f5b45276b2f56ad0a5a51bd -9578d53562766255256c985891b2fb3d1150fe772faa9537315b199788b4a596 -39572838b9deead32f579f9ec94da84971c35149fcd7780a34497879a5422546 -74172a429a6b85da115f966c34de2c00cb11a1fffa16d8cc84b86b9ea31d9af7 -9cc851fd0bb6e2397db8ef7d0f1e98edc5f302f0c9a5b33950990d4019293801 -1e06cfad4653e1a4f5ee4be3a959cffc2231be88055c6d724b9d83f5f8f5ed01 -f4863e329d3c757cac3ed3d9aa3bcfc812407c8b10a78f629d8f660b42423754 -ed23a022797e478f8b25f6a3346374b8e285986aa1e19a19c3af7a81f14e6b0e -a595ec48a0c6a6e016c629c3f1a91043c0eab6ce5401267d5091dcc0c8e14b4a -7062627a065c66fe9fe068267b8c434410774a97d28b76024e171deb2306eb01 -84854194c373ef3659b489e337134e5763d16d00d6a4e66afe3dbd30e0b808c2 -cf044b277485fb807d66b6d0033d0157c5aa1dca6ee774406a7d4acdbb06104d -e582402782f0d19920b7c4c66a65a10703f07d30e5663b37688a090e7db49783 -b5b31e9478e1491c5b40325d6eaa41e35bafd45bc85c8f1be10463cd5534f110 -8369f8ea5a4895428c1dca59bde35cfead2dabb44bcabe96b27156abe4dd9a18 -cbb4dc7b5908715faf5db93a206a4f40a19060ad1c33474226482e8fa3cadd37 -197f9f8bbcf204e76e6e411e56c7b33664ffa0125cb0e8f7ff3a55647a841a28 -9589124c91519db94723a77ae008a7657949e8bf80388b5cc51585fad67bf242 -f5a081ff56ca0870dc9799fd03b5291474c63b83b771b8bee604a11a70e21d55 -3709247b92f5d26049cb3d2963ec785b68455bb485f30af7426cfd02faf10934 -d32c8d7b0909f993724bb7da23b7bc690754384fbdd366b14417e6bb59c8362b -11b7aa76af2a21b0dba56d8c04f14cc768220acb8dc4d7c60646c85cf11eac9b -710e60d1e02c4b9a078ee52c154abc7bbb5ed801087eaa68298014023f93af89 -bb257e37bb4ee55bdcc563b5f28959187135aeb95ee333196f6c0ad8e2fa493b -c819e39856397cd076f6ec77c2de08517b15cd6404306bc45963aaaa8adcd1ad -0c78bc5a53c2370870ccb3d5b781b811ddeed772b2b21d6cc2b8aefa894a8350 -48dba6afdef72f44d779dd9dc6ca91da09a9a825a12322a2bebc69cab203954d -1fa1cd86adbc7810620475e8dd1ce2210cbc056d586e4d203ede41398ef9f106 -b58e657f3ea69f719e7ae006cc1347a31b573857446cb3fdf83afd5991993c94 -95e8fd62929149e5d83b852423a0a92d3799484464bfaddda2e3182c087cd330 -e7c077f7b37b1938e3ab954edb0b98b8f25ab428b313047b6e66e6f6ec940d2a -8f9989ef2553993877bac51edf043efd752a82ea0a21a80f514b1ec69265d777 -e0e6f7b71bc23f53681ef43809a277799c930a1189ae11a7d30fe14c5df3dc8f -86cf3e329c494ed6cf0f08b5ac828d16f522985effbbba364440e78c27535b77 -517b9bcf39f6a038593c6b5fa7a7df8144df223272188c8e5b672f55d3f862c5 -6747225c9f48b995c9f416d519ce7e302c22a8c568e53fca67692d0485d9c34b -936b69c65919e2a1ebac36520c3dacd0fd0a837a8ab82964cca79590fa568eec -936b0df2123977d9b0f4604ac160ece39eb624d285e930cd59b30e26dab47ddc -bf1e601b39d3081be32eb3cf521ba730fbb52298732f17752d36758c331ddac9 -66478be91854a54e9b101a52f94b13f94a80e3dd73a077684192f88927224bfd -35339070cbbcfe6e51bc583b1d6d1179edc0409c56190e3f08a67e4c59fddf24 -9f0a430f6a2093bb7a9e32eaff050ea21201febcad5514f5ea4e1c790437a3ff -1722fbc4a51f4fd4e48653e6764bdb83195233206c6db692056e93eaad28fa16 -332517c4e2259bb6cf36fc5d9c923ccc69047f10e8bfe2f088b3e95077f4a312 -508ab431048bc2344a31a4583718c0b9e0ad8ab0ca97dd51debe6c3dde8a51ab -01b9ed04a58e7a2e73f34f7e2e8e9ddd7b99949b5f0eda2cb61ddab64fd0dd5a -344a20f03b6f9b3fed433329b8372eef9612608380f4916acc5292b7f5fda274 -e1b296f142ac27ac06a3bc96d5f4cd9d317a5318e69dbfba646074f2304849ea -3c813981fc03fea55a109aa1e174556401bf37aa870778a73eca9d2c60eec4cd -b88662527f7dde83a248475b5476dd935833d6ea8ce5cc912ca5897168bfed0b -177d4fe4c328f55625f35d11f85ae70e360c68b5601dd64681d557ce51e724ed -6e5cb05523f3860698b38910ef6348c9abeb14c645b34d08e42d84928a36e91e -999d15841c9ace2276b65dd78ee6e4253c27376ff691a11e640fea8573509b70 -9b0fcf1fd6c4acbada4957ddc2e9b4bd7444cf0a658f56878da729cd2e6c340a -3a3bf51132ceacf89a3bfbda4be6a18b0c5be6021076fbf6d2c5ffd4d35b8855 -d69f62c22621414d6dba9140f9fc62919d1f0c4b2d725cbb895bf04b874b8e42 -2619d4653d065b77f02148cf29931f52f94f0f21320e541cfa9b03612d76eaad -48d1c2ed840c390363994f75fcbfeddb48dea5af3d5e869206f42cd37428844b -e69d57813618c3cc6e4dfc270bad5a74023f38a379d101adc41f62173a19156c -580d2c9870014a090bbdca4ea89aa7c0406e8f73bbfb90808956903b4908fd9f -e439a4a7dfa4bf0cc31d89bd88c5470940a1a4dbd871b9c23518e5694950eb07 -79afe884b71caccb2f350154fd6b1f90482e2d9268fe383666365fc41c5b0c04 -6fcdaa0cc65e320103ef976f4aca093a5b41d47bb55bf58fab366d3c9088297d -49c88fdf7eff4920faeae791887cde9a1c9b2f2fbc2e23f7bb5438f9a5c91790 -5d9666ed9a3a780a02dce5386f1af23bbed00c476cafc4734015e367cf600916 -4654d10bfc6d06af5316c45c8cc0a5f92cb4016a2b351d6484705e9f1f9056ee -c530943ca1c9fc321a838fb02857f0709aac2009eb3cc38f81145d6ce6d44524 -da3e21e5701f972cb836afe077e6376875a953ba427b2b2483330dcfba0783df -c371f9cc79cbde94fc5e6f968b14c56f0f7690965058f6ac266a8baf2f545336 -1b99a92db5f63cb16cf850f13e0c18a779679b03ab74f886b2357c612c0e2f38 -2c72cf7e4b979f888d772eeb5d5dd2b1d837f03f7f9ebd613663fcb8b2f7fdf8 -c761a958b41cffc4b2e2a48fb62ce80b10261b96a23b00f6084819d088cfb019 -84fbae235b2cf56b391a1973bb09fdaf180f6ba062bac913bfe0762f196d1680 -f7de26c276ecc19f6f8c84c580b8a007319ee045a04aa6e492b347004a26dd27 -fcb2590c4ac89041c481f8cce7043c2e84033e9ca3810a63e5b272e1b716993c -48da6bd8aab1c70e28f2da5636a7757448608a7d36be50ac184c3e4a58d108aa -e1aabad61f8773a698546f22f22df892a2ed287cdadf8858c86eece0bb566af9 -a0e48c19ae49dd2389fd38f2937ad3e02c8a8b281088affa0e1c7f7829d1b191 -9c5ef6f3ced2dd0c51f6e18de1602df35f588503b25039b79c371d4ef75e6ce6 -7514d977dec3af3de9f7dc7ab9064cb21d8b35b4a7efe21b6f4681c090c55aea -1fd129f665053887abb1b5fcb09296c6226ceb394dee57664ca483e9d7496dbf -10a480d97ff4af0ce136c51d90c3d8c3734536e69d0bb4c066d1bb05184fd7a2 -374328b352f4cbc93c613309d0f83387e565c8114e38677ec5972a64f701a1ae -8ea54f1293f413123df659adc7d8e9eb0aad32ace9f2ab0f69a989b3bc58d13e -8dae3890c928697a353da54311cf1e98719a82ff91754ca207409b6c10428228 -f78907e8e9e21f1cce47eedf402444344751d49afbfcb460b6d233ac8bc7a569 -32a3362bb06a575f686c1b68716ff9c8c93020fb6e5ac189834021d09d12d136 -529c6b5e28390a877a3daf3392e50dc60c4653f33abf9cd550371d6af3bc340c -b5c34ef3d2ed6bda5e8e2b4e97a865525d21d43ccb1412f545e3f1a84168afb3 -378248f719bf8dee72e408caf3eee889129d389cbbd62fa285ec9eefefcdfe44 -5fc87a84d103b3fc8c349f162ed5d830b5e7ab99cb2f82cfc2a83ed146999a56 -11873298b1c8e983c539ab6acffb13be2dcde7816a7015c72ff2097de9334e76 -4fe9359d3b3f1b5dd5ae02ccb7b1175e5e5b2a5d4414af3376fb605d805446e7 -e131cfee56d1c41dfe690113b891a4950d57975b1d608a19cbd10d4d53ebd4db -c6d78c9cf7c06be5fd47433aa18250fb896f3db663deff28f1976e93e7a36b4f -50830f7b0b5b47e2c0ca4a08482290aaa77582887fbbd330ad0c0c412ecd3fc6 -534baf96f8739a4df7860f73b8abf2e97d3567c09c616b432235e0ea8505cefc -26c4d7dc44f7789c338c8561a9742cf177620bdf68209254c1b6c83f26ff44e2 -74d98f45a913751919506bc3720cac860c01ced3f825d357afb098a5ae5db776 -63911f63a83b586e839d08a94715de06dc3765bcc949539394d75b0c6930eae1 -9c8772443ef8f8f1403c2a803100acd0305359b7544681097dadf07259fd7c09 -e80b28c4e0e75ed038feae6e0b3ba5d311d21f716d90fbd1aef28a60f84f8e87 -0a4d395cdc956ad485934ca58f11cf9ed829c4ecdd984dec9525a736cabd684d -db24ab8b679218c355faa975d48e837066f017fe39cd135199616461b9c7c77a -f3a986c56243594ab113115385bd8de3e560eaa3e468ee419f9b97d3b20dcbe8 -1a64942075d88d48a2b28c39328ad74e2b02b011331f655066b7790d1e2e68d0 -ed7298fc1040fdd407acb03e6dbf680651a9068082db7d43d1c85b56bbdf299c -5a9b88b8608d2a21d7a9267d952d71b786f7cdcd4f63c13fce13c6dfd88f20cc -874e1a42fe2430c0c0da698b021a7e82eb668371d7a8559ae906d7d6a0a60502 -c146f7e838822f22e4d0e1404cc853aa913087dc959b2fe1fea7131a4435938b -2ceec71b3101fca9c4db903372b2cb6a6a0e88748dd8479cf0625a7d5159913e -69ea97f5153b3fa681e940b0c59c1c4193fc979049b88cb38ea53e64ce6da9e9 -d77abf19140f3abd0c1b89f3690b59603abc202d4e0437431c8da5b6a2b1231f -89723b569fcceef6a78c38843df658eef93f6414ab589c77ff88c25a1829cae3 -ea663f93db354455d10f4d40a4c075650a4e84a2468fe985ffec14548e2896e3 -b1dd0616c0a6b17681e24fabd35501bb0e446244dd55cc6a632dc018688d2b05 -18e7c16ad731096807c8c7984d9a90df59d2ca0649e1f7111f105fa3808df731 -10de360b039985e643fabe223c2836e1a992a5eb2ccd396ba1fc1be39c148e3b -2f1414d762e9c95f1ab131aaa17d5632f6b3c3e566a1f1bc9be2ec3a89b595bf -bf99ac8fd3963d7ab464059c643bc6de1e806d5361b55731281d2556878d1087 -10f4f9f79598e4f37a2bf74aa4a94e563cd226e50d1244f38978bc3994b1b082 -586e5fe3723cb33dfa0c48ca249ffc20283e7e3a84cdb0d8df92e540ed428fd2 -0943e502f763f7fc0c879d6a18ac22c7b9fb410761ffb5e60e2698828666450e -aaa8e0c8d5541036badb9c7c92885462a9e7421c8923f82d978074d51483e594 -b0d24b3ab7306234079f4f52186a341a8cf7eec6485a491f558c50f86aef7c10 -6fdadeee7dbc16438b213746425c80bf19ee1ef22ab8952a6a91cf1629d027c1 -b4ec94221468a107eeae9b727e1463c690c41053c6ed0d27adec33586212cf52 -c4aa47cefa30fc2f22d1b36cd731f8818ecec6d3bcec641fcdfeb74f37f561b4 -f716913c74df2893324861227e362084ea3efa36414906bbe0ab92b8dc7360f8 -ab2dcdfca4bbc7f23ae6a6ec7eab609a6d04fc0eb78d95d63a7be15db384a098 -477c2d5b367996fe969f6b26be3d09a2ab3c3deda2f2ec4c9bb2f0646bf6124b -23c91547ba42f72c6d4ff83478769924a09ea982092deaed2445530f7e62a64a -6c6944f5c8a8272c7611fc494fd7c2a9f371bdd05607ba865fbf5cf8627922ed -46d67ad28c4e8a01700634db291a8c900c37d8f7cda706184bde8dfbfda3cc1e -e6071783a69c4fce21a094fdc2d7542d005b33850772f73a0e7ae2c6e4624ff8 -d77fb1e978e9b013c2c2810394675b76c7ec45e39f8f3dbbee1a92e43422ac76 -d9dc26e9b4163fd449f1d2442f9a17ac6034ef3cd200d50875b89843ea4ac7ad -10c8a2cc4df2c690e68c6f1070abd2bf25d6a62dac0da009d9b949cc257b4941 -8ec05287561ab344e71aca7cb870e71fef718dd65a69c99cd4173cbfcfc8155f -f8e67003b086437f488af5497fc9416b15fa81d22709730f32ccb984ff67e291 -355503d6d6253fcb17f072f324b3259bcb47f2ce27ef9708fe4b09449e99d575 -030ea81d86622fbaa1bd1e347105a283f2b394e5a541aeac32151b376464ed0c -96a2282ae7812383e1434e766f240e1379dd7440b4901a124607c4463b6328f8 -25fd34dff1bc61dfc6c3fb2ffcafe3b67068711e1635becebf8c890c62f342de -baabd191fd7f17369f6456cd3f69921466bedc81966b1055c49fb4d139f234c2 -8cd8eb0d15ceb048def05831b3e940627b2f98ed44a0cb193284c616cb77390f -01cf62e583c01909a36b83e9dc1097f7d946b30edb637f431ae85871f33f24b0 -0f3d42e09bb3cf5b9fbeec56c2762d4c7e2571c3300058af94ed8a09ccae9e60 -420e3b78dbe9b76d2e661eeb84162d2514564d3bd76e59ec2385ea5ca8e77480 -cbac4e07de6aadf16a183fc172d5c5bf7f979a77660706f2df8fc7c49cc77f09 -e3232aea4172e2a10cea4a9753724ab2b5a31e40febcaeb284436daa7328bc3d -48b2f8ba50495e566df032f44d23a1ea6d86557d48a71c7456c415562464c4ae -0ea04fdc6b07680daa44a90f34b59dd67802ad85ab62ddf3790b8f8a8b8660ef -815cfd50cb8607affc2e4fa152157101c957a422f4368aa35f9faa8b6735c27e -7c6ad626bea86f8b66398dcf40080a2ff60fdf8431d0285ab80668d39590351c -588cdbcb8245e5b9d5259ceb2e95f6238f0dc40b5406a15ea059751ca482b345 -10d6f256ba50792b8adbb790bcb9b52cb37cde2ba2029afa435bb4fc541735e4 -f76aaa503353a8370ef5a83bba65cae93b3bb20d727b24ac58635746de379ba9 -04bd03403cd2dd8cdbbb96282ff967bb11c89392c5510c1889dee5d2126d1e22 -c2815a7c54b10aaa07d797e0337c992bcfd5e023a0dd2603913df6fd060e40de -ea1905d3c9da64ffebdc539bbb00792a098e0aba893cee2b2222f62f7bc33b9c -0fe107b99feb52d76b600648b32dfad7f7edb025b143b445c2182c8278da240f -8909e3de7456428deac22c0fc88c3ed99ef0444e762edac64c4a4afa0b97a609 -58c607172daf23b09bbebbf040b5dd5b55cba5f2bb1e765e359d1a80c6df7f76 -c703baa94076ab528d326cfd0a31156698b9c9c3ffe0f13b7711ee58276b8422 -80fa784133d0e5f5b07dee16f7fa0dbb95f7e1f5c8ba8b45ff72d64586fa334e -0db8c968d3628ca508f945dd9189d1f7d3462897c141d080dbe946a66de8b2fc -2f2c89df29e8ee18681c8f01a43213159b9cb09c121eb73a080047b9706d4b25 -de8b147972ae87932835a6f4f12389542de405192f0023ef363327dc02af7ab5 -f3eda2970f67ed2e5435c50c522dd8dafbe0dafcfcc58daf945657045b3bb9eb -a9b9f8894400f2c1030c752e4ea6bb093fd5a09fb95bfd484cb326afa941e2d9 -6936453764c5828552529668257f87fee07977cc6d217b5b923808f93000a451 -d7c26a81dc47a1e7fffbae8016303157ceb3f64af87f5a2fd8c8dddd04b8ed7a -809140824d1349bf77e19ae91f8e42d7550f4163570d87c349ed3dbf427625c4 -f18245abc4ead1ec09110a30f4fedaeee971a2fd5c4bedd0bd1c80576da035a3 -a2527d163b2198e6c483ed7b14e9882f0a4ebcc2b55b204fde963da8e5358371 -dbe833aa2c41f60e98abeaa394bcf0212743fc5a3efaebb77d3206362db106a4 -2c57562c547826a558bd82bd5dbf7d853edf511135538d554c25e94c40b3f73b -5c79f9cfd585cc5cd1f0aecd196c019adf970563fe58627bcdeb9e2e03471e05 -d90d43ee6a20a468ab4ae304d8ac4049cbbbceb0cdce45d38975bd8f1ce5d1cb -b20fb81cd0507a3699c888bd8127aadeafb330151049b09b3932bf301489cbf2 -b09f7c42502e6ea82041403ede92b34f1bfef5fb5f5d920d5533eb4d65445c06 -7899f0e07e081795c9ee931a34ee6a9c65e63744db3f97815ad946f41dff97cf -7099378fbc99ce8e7f0c7f4f4e7ffb5089e970085b74988304ac99c229df5291 -9be0d25d890b071bea811aaa588d28f78e6331385c5e12d03682567e5abcd599 -1b51b54a680759f13683eeea378081c76234cdf5e3d3e5faa8363c2e74a7adc3 -92e744d370d8d466a7e1461907ebfa43f44376a7323847ac162c24ebe8ffcd9a -3ef3f05e197604898f9dd3c737c7da17c8242b8f7a261774d48b822831ce02c4 -f9249b22cd805ac81a0b9fd24ca446594cc50137223b67b97507d18409586cdc -aab9f58cadeb6e5a1f9a843b7cdb58adc014d4f2f7bee89cc3d207a82e6b9e7e -65485bca7253c6668629c44632120edb18b3e4bd170b5f431c35b2b945f55f1f -e0181e92aa60f35ee61bda2a2f25dd60afcab8962077b38db99c12efaa3e62f8 -024bf9e864953cabc76f42827360f39ca838b7b603b83f2c8acb52b4bbccb905 -953612745b0a8ee64753f5db78bf77762bbd7e48b370ae59f59a3609737ba1bd -d08e30fff8ec11a92050a7733539758889fbb3ec25d7c287e74697f80a485653 -1453d337173bc751eb122095af020c6acd57451e9d492d87130f898073705b05 -d044c77d42bd91116dce3774460fdfdfb7942c45f3053f13e71cdc7e5ff368b6 -02adffaf5eb51099c87806cd481d923548e4a1b153f3518445c2734a5b852ef0 -7028968378a565dd0245685ed23165d93450a2fceca590410aef8ffec0747afe -a184ac2c6ffd4252421a3fa67165c48e1c0bba8b039bf3c5f42bc031d8bde0bd -075a3594ec943f67ea4dbe5d5ec1bedeb833af6bb8c6ae6a3974ba1241113597 -4eb0a6e3107654d209fc0f43416c71645605a70ca1f9537eb49e2b901ec67028 -63c6a6b6a142dcb22182e2cb05a6572ede50e2391943b3a589f496af92bc2053 -3f68d7ecb40d1cdacf114090014dad9b9c00f34c47263d626016bf57ee1735b8 -5944bee9cee9d46a7a78bdffce9015ba5120b062076ab7968384404bfc7912ce -0025ae48ff3d663aa3b312ee77b669ec2b4052794e90e85a7769b500c709833c -607a352a4e69b4fa6cf41908453d07394740bbe9cf4501c5a64c0603c6f24812 -85cc4f4d1b22fa1281084b24f73b3436d0db59f2da5a100cc70f57c033c04dea -cc78a56999fffdc14c143e965bae844d87c7f7cd59aa05d352434cd3a70feb77 -3e878d1bb0bb9681622449483923de84737149dfc0566962808602790de465dc -86051f569beae85236ecb0b6a8de7d2e5c62cde8c13830ba5d3a5943affce66b -29f771f8edc3bae0df9629dcc9761b2caa07d29b92aa72564e700ec9bda0340e -71281448fc01a5eb62516d5d921d22e69b54bd74e30f85fc52647ca24fa8d273 -4ace1a25faa68a654bb60827585a9b5dc901dccebf5bb02437b6456cdb93ee83 -3e226b7822f375d60a1b75cdcea40dc0acd32f9aaa39808d24043098d76e7367 -26e24d0602eabbc35d28509c64a4d66df7c008d32e5964de8aa2c50134a00177 -81d085806a2b2783911c89f6876c1a4964aff3e59644e05aa6fba05e970ee558 -614ced908bb4838b5fb24c1a3458ca50a1d7e51af615549d340cc334b96aeb9a -4aa99e74f3939a4b640c653b03181a4c54d45604da621d4fae1aa04d4237b7cf -9674a72b50e6f26c07aa85343b43e1cc4436e0b326b890440dbc6ff36202f144 -e118eee07c880f3d5121834366d6b174b9d67886b62ed002e78e592a42668cc6 -31e500ee27ab1beb2c87a7fd3b1f2274efcabc70dc189b942e55d6f3779d6bec -67701f5aa3efea75615cae8bc8ae937cd29b9a6811f9ee11585e39b69b09176e -e5b0e4a8cf0c6fc393fea31f0164ba03ccc6af688df68f4228868cd63a84c480 -1ae93da9c45f79f384fe3a54fe463d4c7853031870c9e14687dd9dd76b9db209 -9c21790b1523d2ff913552ffe62b3b371fdfb87919a2d961847bfcb4131a901e -9a8cf933b2e2693a688e435ec50b1c0800ff31c63d1f5c7101fceabc9211860c -d043f5a575ea71977c7a5065d927a4de2c7752c02a857b884910df8511eca9f3 -b81d36526a9083de5c32603649e944961781c3966fc6c8b9a7c1aefa7e08e5da -782a9d694b8ca6d5c3887617e2bd3b5ddcfa2f965b78ed018a217ab5c4a4e538 -85ffb9485db87327232541ca112dec18d9f6d4e66256c929d8c38eb634cffe5b -b4b3aecdd3ce66b85d9df1f87b3cabc609ca8d1c5bff49215f8c324bfc42dead -64c43bcea81619ee6948ca0dcaa9c7e2a19f8b9e830b9febe1a59ed5cb8d650d -51ec17b2844c9d67184557654add27c135aec9c6a6bb2068cbc4edfeb82133ef -a5f46f0dbcb5996702b4b1b67b3cff6992ef64fcbacb316e901765a87d76b0d8 -17d389d165efd517aa40f6c75a91cf060968467c82b1294f2abbf54a35227b61 -3b3bb9d32eb143393796fca19b4812402f221c7859ab4cee3777a52f847ad8a1 -3c637ff08c83a58e5389960e44cbea061bf444fcb64e613f8f47bfb1990c5d6c -5da42c20b4199b633f3675d91f301fd3fddb875093d565e01f45e3c22250358d -1a7af5ce476b44245788eca65c4db73bde810290d8a63e59f30b3c83d16c5c62 -de36b6dbab5d10659924f32a5b876c1583cd8bf728afa797b33a6c3c0d85b40c -536b2c7d1ec7ef7ee7a9df19bdb5fac451001bd1e8964a320209372646202954 -0eed46fb166faf15f8b10b8515724b409c7461a738248f60429976bf7ace5a7b -bac4452ac45b5cd4caeaa310f154d78f101667fd22b0e69bde93ee67c68913a0 -67231e0b73377f31d3bbcb61d8819e32f0aa013fdc543ad95ea5f48cf95deb9a -70c31b233f591549701daebb81dce7c3f6241d0a4c562bd9e267f55f017a20ca -d232044a680e59425b8c072682dbe71e21c7ea603056d9ddc41f16f26ee5e74a -523462e49d58fca01dc10d1ad6b6629cfdd36c556f8fb347af37886140a145fe -4fe9e34d22e5d7804db730cc076ce074762f3849c62ac49a2d66c707455106f1 -ab854054aa54222ef6d5e628c8065228723805076993d356f0349243d9e43abb -968eb1c9998ec26447bce6aadcd84f0b6993d4ffa5f536fec6e12943747aac99 -c253f9b24caa7db44311cba889b53ddc5664475c22526fc9e1e700b3d38b3568 -85ea0e60d4146811e80386c11b2ae0e2eb94afe92dbe3b5a82fc3b7ea5b39847 -475b707b4058e717d5ec2d599db0f27c04a3de4f85bab108f6d1463183291cc4 -75edb7b62e0c1d6e6f0c5f03e5b9862c6e5b1fdf755610ba188ca32f5994ba24 -8c6a0f6e1a6cbb2378b3f29c4543511dbff9345a6992fb19d67500372997478c -5618920ea5a62eac4aa661291c8a3e46a26260c8658178e17605b413bb89cc6b -fe10c7572049fd36357290dbbb19a670e1244281b4b2a3ba60e1b322182183f3 -96d486b97fa3d435987879c3ed1a4c4a5e1794f7594f05ba6a1d75138dbc76bc -5994ccd69499f4fc7c01f0b0b04a7e2b8c2c3eb6cc39a6e61d8610d0db8bbf88 -074959d4efb3f4e638208c7935e08d34379884930d8e99c3465ea4d4213a8f41 -67e091345d5ead21e5d9cb489f2666c02a25c938cf7686a943d645feeeea7028 -7e1885a3a2b2cb9d3b3e75896058ea924009f40c8bc017c82495de1f8ff0c62d -3245610b0e5d54908eb3d96091cb87df26ad8133c46040e168f82547a32346b5 -0175b7c37b6bde3f345b4322f9a57c25363d32d1988941be4a84403c0e4d3440 -c840be8d4697fcb6678cc2db85fc9d6ba2f59814f257f18bf17e57b436581d95 -d391e318081d75a1a9d8c1fac834819a82100b47b78424c28871ded159b5e5ba -49a2ba27f1a0fe358661ef98a937baf3722a1b471f269e3f8cfed8f4b44ec694 -b38f4106570c9ba31a30d56a594fe4bd91178389667c3d15b54cf7590c46b9b9 -a1ce513f45ae78bdbfc81a820b2ea832f390ab3d389511add1f30d1d07f97e7d -fef1e1f796826561873c6321e0915eceb5d141d5e8d9e664802f39be458850f1 -69990f176dc24f0b3148cada39a20c3afcbd82ce6fbbe0cec2f3cd6dfe390b96 -f9c450e3fb31fa357930ca4a2911b3441e4813db96daa79cbb6b6da2ee464055 -374194ff4d779d0ed6baf67e7c06d711fe1b5e868c1a4e6c7f3ed529fd3d3492 -ad079fdb6faa5dc0924400149ce79a9ab729283669917b2b538f05bab7596b8b -bc9c86cb74481d0181c8fc2b0c333619b96c63b6fcd352f0564862205f685eed -ff81f069dcb2bd3d0ea80b86952f7efd67ea8b60f3e90ca23cd176c76d73cb1d -7c7de170a4196875e99ba42f5e53a5c3a7740bee37d08900d68e1a5836ad4c45 -2f325a1fd0d49f74e9437f2d28062ef5d2934d063f0521ef792638fbc96af2a8 -8bf23e8a33c7079d2abe21a018521acc0e14c5508e629fd83773c9f59cd37fa6 -4a121bdb1db13d1c598589b00da37e78bd59d0e9f3e6d3c99054626e9e0cfef3 -35d2dd25c138f96a3f7f62e2ff2ff12010049edb86f3645f0272f36eeae0a60e -532cebda1c0c0f39c454e251aa6ee1ff82536c1fc1c9b7c9679fb2deae693a02 -9eb57eba3882901d2dd7d0c24d5f0ef6b799080e98ef048eeb4429ce058e05d7 -6a296e34c80467c71fee0d41a366ca38b6fa3c5eb7abcf854fa7adc4d6ec565d -7d8c39d192fb3b06bb93518623a1b1c56cfe095354ef43fe73c1de5541a7af68 -c51ba01019d7685596d730bee70268 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark diff --git a/client/nfsexport/lib/fonts/courbi.pfa b/client/nfsexport/lib/fonts/courbi.pfa deleted file mode 100755 index 5162aa6d..00000000 --- a/client/nfsexport/lib/fonts/courbi.pfa +++ /dev/null @@ -1,1940 +0,0 @@ -%!PS-AdobeFont-1.0: Courier-BoldItalic 001.003 -%%CreationDate: Tue Sep 17 17:04:09 1991 -%%VMusage: 57715 76639 -%% Copyright International Business Machines,Corp. 1991 -%% IBM Courier is a Trademark of the IBM Corporation. -11 dict begin -/FontInfo 10 dict dup begin -/version (001.003) readonly def -/Notice (Copyright (c) IBM Corporation 1990,1991. IBM Courier is a Trademark of the IBM Corporation.) readonly def -/Copyright (Copyright (c) IBM Corporation 1990,1991.) readonly def -/FullName (Courier Bold Italic) readonly def -/FamilyName (Courier) readonly def -/Weight (Bold) readonly def -/ItalicAngle -16 def -/isFixedPitch true def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /Courier-BoldItalic def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/UniqueID 263789 def -/FontBBox{-48 -288 860 839}readonly def -currentdict end -currentfile eexec -5c03f98a9ef1056084234938772b65b659a297a60831474f7f06192b155c7867 -6e337a4b7c45b34a88552e942ea1b7667df4b71b67df89e141537fb4b1d26675 -7b98b6502e4b2246f50fcdf717d3a5cbf57a5bf92df803946d950138fb0acd1a -c81f3f66f82ef04256e333e070972e17b42d661f50b27463cec7ab9995060f63 -ad76b5de2ee0546d9a2e43488699c40c150f6d60a9fc1dd3b5367a87d081de8b -a232ff2c4e9e7ab38f13f20d747cec9f5cb36fb8ad1b9228a42216d93925b91e -3643f1c2f86f0ed4286847196391768d58895b7dcd757d9f656af1125a11f291 -42e28ccf91a17be1a89d3214be746c4fb82da439d6ab53f4bb12358b2f8c6b17 -32fe22465ba0dfc22a955139b55389d1904f3f742faee44c1af9c3c9f588ac13 -3635df24815df9c92f7ee93e79555f834f18f20eabf3b2b7a815770715bd2e16 -4b1fcb206e2fa3aacaddc54d5d61dce9a8795d8f346bc180a550aeec53154733 -bba47e38c6be925bb166c8b776c4350935f15e3c6123f8a91c65506f2ff63ac5 -d79c7a7519f9d09301a6de5052913938ed21c0194306c8ae995bb8f5ab991343 -5def56faa796248a10f995ff7d6ae352111eed560620bb6ac41103ab077d7cc2 -d97a20aa0a9dfabf6063f3a600f2c12fe79d30f9967788f90f5285da7c197d4e -58a9ed99659dc24269914e0c0582e37840b0f6ef456b0f6b445b18e6b5073f41 -8ae4fc99f4998da4fd8820393e41aa4f953ceba2edcd901d5b7ef2fd026fc8a5 -26610bde74dc20173add2c71dd98cd1b6445ea20f88684638f269801cfea8dab -e4cae300090a10211e08e37e65b79433989f2a3d888982631301a76e4c68a604 -b9ffbd0b7bf26b12cec3ef5c6af999e72243e396f5eaf36d7a02fd686268bd85 -d66d617e51c2c7a5033d160b8ebe9b7d3c0595cd0ec31cf4b88cacb3e74e2870 -ed7e20f88905075cb6821889e85fca3fcd5a397d44e9150750b16260177280fc -92a20e8b891abff9492a07144e9ba614d069d8afe28441d03d34eece34f89640 -1ae1c190991de2ccd321ac65b9b575661dbb7dd5336f1af355062446fe088c45 -05d9eb7fd3f0740528564f945ce3e13e5697b23e1acdafb8322f77b455e983ab -dadbc73bb4c8b593eb357226060c4f723311d7c48435ed02bece6c61523c3c75 -5be81484919dde97279579df674527ae2844220a490187e9350e34ddcac7c82e -e1fe5cd11259688a987d6127565904904dc3d4ab7c41035c5258a9841dd2120e -de49dc1ae7f4c308e169098267db701bb94b4862ec87e13c4176a3b362f7ac17 -39b75de7bd9fa615fed494334254229a30da7357f1015f7d2983fecfd2cd2444 -6e697b50f2b8e409e73e46194c89844ee5e5ae5a4d646587ed37a0255b86fd7f -9c287a61cdbebb354185d2724464a70461a29dfd3c3a98291654bd13a64598f5 -4e23fac9ad312e05d6c689e529ce5ce92e97ddc924bb5c7ca024bfaff8e2021a -dcb6f07bc45ae0f8c80b693fbab5c1c66d5655e7de5151f48fb0d5972e2f523f -790c7c46663b5032f62a9a510d75f7809f3c7774d2f7378a8de57a912058247e -30e29f65e7ab0a93ca198e6dcb287d7e44f01755f849cb46ee4e8a5668f5fe25 -a4a579201bb36e45d4208fc0309d5b763cf6f5903f4c59b3527e11a1d594f9fd -d3f6e55a9ef313faf9ee6d0f05c3948fb186cc981ae63de15e4aee46d7e3b623 -736066975cb20d00149fa393a35d8aa21637c73c396aa1706d4486bc38ccc199 -573e5c564947739431f445a8620383c17350a9f818acaa67ef7aa609afc1cdb9 -44a8a2c76f2e298b1de868a5c379f8f7fd05af8e66b55858d579e09c84100b7d -9aed565c5b3491b2fec23390ff21231bc4d231a75576cb7382619f0480126a31 -ea8bc6b2b1535c7bf260351756ee37f53ebe18c7115a594001dc5b6d3415b88d -8a2bd9167a5ad2949af32718aa189645a94fa2f5ee1c07b8c2a6733fcd44b21e -8adf515da9d623d02a7a0f4d34d7969454c68fae43681a970841a4fea9da5a94 -445d4fbcf36ca7f185e8f7d085fd869203a8f3f9bb87d31c46f459c1c3ab4854 -2def58e42fbdbf28cd14d3a1bd1f7d8f4bd136ca919263dbb3c52ca2db0fca55 -110940cddc11095c5562e4338cc7b74b0ff0c6370c1cb155154f0360220c82a9 -9fdb9eae6e988e28d7fb0d44869ca4c92667ae358dc1db7601ab42668ec40f50 -14fa64b966506873d63ba425d899ce827cb7532eaa44cb8ca1e5763399387a8e -6dafa8b3b5852f23301c441366956805ab69dfc15cb156ac11ef709c651ff3b2 -064a491521cb0ba8abb66b99119d220a197516a7ed8d4d5d223bd6c2afabbc9a -be1daf6a4b9d6064bef32971984fa314e9f3a8eddde83b39075b3b6f9f9f0b52 -793655e96efc0cf833fafc4460565056522b189870ab1493638d6cdca563e6b1 -793516c25d149caeafa2bde531b397c4beb75b09ac16430b4219ddce0c4c6400 -1a32fdd1385372158ee82b837becd6af14ebd1cf92ba934154232cf3f5b4200c -41e65762b0dc5120e7034e1fd4774a0da978e6395e855c8cb369e677adc49ef9 -f4dce344953fe9da428bd35a79b6d6155263c0fb306f4195a5a181c38ba432a8 -1f7039f3221d3700d584e4018469dfe590a22c3bfcbeb02c56fe0f0f5b93e6c4 -0cd8225b071022e08372ef5c5de6de6d24e22640002597d92051197a2b88a27e -071cb9c6580212f6dddcb80185ca39a774a905b447b5b836d72ed90faee84a51 -d9f5fe37de26e4a3e5209cbcf989644acad73eedd16f028a304e0eeff26655ca -890a74c6ce61b49b81a191e158b6f3161d6ac5def3f084d1c0e48022f111bdf6 -091916d4adb5284d062c8d71d487dfed925c4f26fb6796d36eeb818b9ef5c503 -3d4fb3bc7b4aab1f562b563bfab9a79ebf49777f6b8c0dd77af6e4dcacf81688 -caf05981536b4e91ce965abe966acde3d304d9d0f3b6433078a8ebcb02ffdc7e -c210a35c7dab3ebf015fa81b6dba86e683fcf8962117f44d68f562b4f7c68c0b -5df0193ae2283f35c421c6da43dba3419c63438ae46eb65fec9d8902ac784015 -398706463e99a1cf1554ecc16494477fdf68d40ca992dbb01816d410662b743d -f0255e6c891b1482ee1353a5cc268a264e300b94d15aab2fb2f80bc1f0b714cd -7e1546bb733ee3db28611f58fe80bc6b4bf8b637b00fee2997cbd2d2f8808944 -f428727190675e1dbe9e4ea29869af8729248ba59abc84861be3814e003ac8e7 -f8f7d7ad667df77d6b9619d5776bd048c7399f01b3688730fc94af5fea41e905 -43faeb064b8a7e8c9ed0f04631f4223730e2bd7357d6c4c114419a2d4aead49c -d2ed2b619a15204c8fbecaa51802f3fcd8f201ca100c36281294f2cf2981d59c -ad0d9e2ed7ebf964dfb3a5f2b1bee1b3f361806b0a5f7a74b32791644d5184e0 -2515f2122ca3e24295e4aaa1165bfcba0ebe9718243db1f4587f24cf6a52f92b -c2229b9fdae40d1c97b6bc6eea4e16231fbd92592ef326227fad7ca81701af4f -f47a2be563bff9d42ac841df2914b89f372283b77d62faeb611eeb870cf9b052 -dccae0c500d9ba5c86f984fca0fbd37e813fce5339e177da499e68b74965fe03 -6a4e030386eb28c668c18b04bde229c53c86941d682ab64f0ef33c47cda25acf -91ea2c53beb3a7552d69b092a76ff6c496d84608ead8080518943a6fc57fcbcc -15da6f2c62a6326ce45f19b403c65ccc613991bb5e493d1cdd913269816341dd -c484abade62ee0eb0f2aadc0fb4ca2b04cebfb9989611ef65b6697fc6f0fbaac -6745ed1a21dea33907385730bdb0cdc2fc37376ab389267ee40056eee0e6467d -8181a77d6478b78d4c140ba7427eca7357e0f7d5f72324aa1d5e6bda674c5743 -4fceef4a522731a5092cde4ed87211ddfc4267b93655789469d47cbe3d1cfd35 -2a98cc4896b7920887378174447ae1c501c55aec394822cd4beec7ee8b9b042e -d6255479d8e1aa7a5efe0f486417e5a5e6f6ebd019aedb0992e033a8436f4da1 -44db254c8990b3d25a7786c1250d71fbfbf6f0e45faa7661399f12089822697e -62e4081d586ea80ae533b192cac92f9f59ad445f7ddd088b66b307041b737ab8 -cfea19ed2a9d2d35bcbe1cc4fe4487f09288e7e85b98ddcac4b097038b8a7905 -c0293c2d66739bd457cbdd9892044dff52106839c707b2e02fc433bd1d1197bd -3cdbe6b1e55298253b09f7ce80b94cf7715f2947cfab6dfb389e045294424fdb -6f90ec45fbcdea39cb05c6d0a4614c33769d135ed0d6a6a5a4cb25ae1d1dd408 -51aadb3b4eec2651c290a62d95a9ecf17430db06a42593ce2d06d3590e76b929 -39a2f87c2614d353d109717fcd46a7f9b6795cc840ba6b4ec37502d3271d5ff8 -09c61aee0b67bc4b8629d9ea756fdb3724b1f67ddd7b0f47b3c47c4c067885eb -d3cfd3b7fd4f949bf87994709f5f278a699b3addcdde90196b5fce894a44f3af -82034d0b4ad4ac692f54b6bc07b849bcef0b651d2a1b1f69460bcb62985cc661 -4da60cb063586207661c758ec6bfec68b1f03a32e9b41e8742fe7ee126411cdd -f327812a36818f8a88f4945202863de81671c01c608f2387d1de2d7e686b5f20 -b7dae705d654112576d937efb9cb33ee65b5435ec9ea9eba518b3f9f1d30b9ba -7f7162e86ea5082e983295e074a854f1be92f637be4e7d99a75b582ca29f968d -3585e2f6481ef968c08ce36976ee7dc1c1577fcf9cb546130352f80e880ff81e -3458808bad09930300f85833c920c47d61f6be8ca5a5655eb4290fea4d4847c4 -bfe69e08c0a5cb8f58455f27d360da7950118eb86df84f490efcc4969827a14d -884551b1185831850fe284b53b661098d1b145b3f2a16ea5c7ae601756da6aca -c141e3ce0b4079accf03fd2376db53832bf0d41b49da9063e79d63bdfd37bf7c -94906c6cd82ee31e2184bc695f2746a01cff0373b369bff632f3753058cba0cc -2e7339a4c85170dbd24fbf89d917aa24de7583dbb8feda459081af95940e35dc -58c7d363511b82b95d983b6679f11bea2675775a1390bd8b1f66afbbc1295bf1 -05bf399faf1665bf04d975b31d031c6c74e3ea1489c57e4826263fe56de76639 -2698ded8780494b338640fc42a58c354a49ed70301b128f18e1c33c45ceb89eb -39ee8c97e200dc39325571494b49851ce1b8d1d0bcf79a3120411a8b168a7758 -15c0eb119ca69ba8fb227ce5747785e4a096f4b35eb15abf3a8f45bfb50246ed -2a3b2be2d639fc263765a00fa0047972552466f8dd6d596bb6812fe530d78ad9 -5a6c1f0c70f003d4f5d6d255e747c99c7bad63f97b51de299f7788ee41f08ebe -f60f52904502200fc62d912560792ef032433366860a3154a16bde3204401e00 -3bd3663669d15a79596abf25c6770bcf93012334db1f1383d80e18f783b5088c -8e03e5537396852caff77cf3a15899d21f6cfd57ca4e73aa5a6db1d7f3e7dba7 -6a31baa5d770072c9a29c06010bffb0a0e1141c7d9ccf6193cdbe7da527f4cf3 -e63298fe54b6e82d64bebb75fdba752968910cf13b2320eef043de5a140ec54c -01942dfbc94375e12a9612cb20d117f9d3e0878ea790088bfdd237ebb2caeef1 -6e13217f0f83f508777f9df0e37843fc9216a06eb096f7d6276df5ae8cd9db39 -25a9bd2966b7c3b58214efcd2f9af2636d9e9f73b09b4da344a81f7a47dceab2 -b23238f002540d017bf200bdc87bba433c7d7ec3b55da5af20c37cbff34701c4 -35f091ab701cc51c9f0191d5028668bd6a871e4d08ba19170f8c1430f1b542b1 -7bb65c5a95924a1093c04c9af060e456ae7695ff5f6bceb846976bbe437a780a -e7cf5650496c859eb598942e3700e7d1825e0af3bbe764369a7ee75f14dcacb5 -24be8cca7f80985d42570543532aa5302964f5d50fcbfd1e094833464c361d94 -de5ae694e605271102112615143f68365c9a626218b923b2a2ca76c4e8707810 -f1cc16d0da031df23e71591b1cba436bbd25829c3d0f0eb60e8b85d2f47e30bc -b0abb659bca53b96cc968db4d82f0adeb1467b54315451bc89e953e1e2f47141 -174fe9a4850b451ad468afb338539e2faa9320edff3118c60a5c4a7e32a072fb -59bce786196cf4fecadfe62c4f3a000a230169397f73388f06d9c6ab33fefeb5 -b0c93ec5c4fd02ebd912fe85eca4668d8723d9a755ec2501ae74abac9ff03238 -d8f82e1b48071f527443f2a94a1f90b6f2260ccbf51b9bc2de684a2a8563beba -3b05379fae11d6ec2214953decdeeb994dfa50847ab7357b121abea5672498b6 -9a52b029e8c77151bff878f7f30fd0f9a40b8e1579a8b672b7c755b68e28376e -4b5becc11fce9480bcd2c10099447b4e6b3bbcd3b7e84ed51c633290ec084571 -ba4665bc26ef665621495045e18e2be0ee391f764d94f7e631d02c3c9191637f -e49b03f893589e3ad60281ecea2160e8171783693e04355722ba6f7c8da1db86 -b1ea3004f486f94e9ccf37749e8a0e927d15e84523402684c1fc4c514e7baf20 -d77d00506cef1e9b81fb8244f0d6095ea861c446948fdbd822d10df5d6a82c3b -0af0caed6d1fe7521c6515665be4a5e10c8703c8e4d7db3a735119fda2bfd79f -8f3dd3accd038fe9158e33cac57890e6fb22b41f82fa854e1b6a75cea187d2b6 -18d4bf9117bea6261aaa838ead2e50c115c997dfc996c8d00b587791c5285df6 -b5cd27b12e338a650f53a0ec9cad5bcb0f2053dc77aa57a766e2f8e290586e27 -924cd5a5c1cf0c08c48d0e7f9990e84644e9a6f5c9b49be9e3d7322b9b66de57 -2e5b0ab001a2c9e2d9782796a4a7475ae1bf45d9389a99371ea684ae896f3985 -8d17a6c734ec6fd734a64c6747a207ee39f1c9f896b6f6ccead910d8bdb9b642 -b141d1a57dc06f9f303947c61fe1d97699fc3ce4c66bf9953b6ec5ef743717cd -831c22f49a68446b3b8a966b8659fda893a67fda0cb566c0eaf31bf88f7b480e -1f05a59cdbc561b6c7d532252aa464fda44727d80b6581c7f8fd89caedfc3b57 -802e694b74dc15b889c838571cb6ce197439ed966d5624ba7567e60e4dc52c48 -c74e5f2c2e0282e54cb82a5214b3a97fa82e779957265a4acf064bec17700158 -8036c7b52c4c2233cb0e8b5b244de31afa11afecdf26a916cf1ac85847a51eac -6cb46b3b35d7fff18d2041a63d853535fd09213116b0b62a115623b471aa4849 -6d4112ed9ec7351894cb36e9f9a0bc1c015cb3110201390643b2925dea3a3dc0 -7fc8d62b62ebcdc38c2d3316b8ec0055c34acdbde86473e4dfb1d5e33266943e -9f777ceb99c757b6c6fb5c69cdebf31336d418f0698622f2a0e46bbd0094cadd -deedd149e7ebb57664649e550a850dc994df665b57d81b571e4bc6c0d25a470f -bb9d78ac9d2fa47c41675a11f3e5b88b567813256f4a544fcb21238a91e2e30e -c3fe52ff997ea81e1b0d9ba23e0815ea78f46003a8463158f6077024b33de798 -ed9c1b02aa6428d1dab23df5c5b055537b44c47b4cdea9c7783ae5d534e65b2b -4dcbc46156e6353307e0e510e4d63c2b438737671c024f29b80513335be3b4d9 -8dd586131c242b34686881b7d38deee1ea765c86e7cedee45e8f184987ef2e19 -15e668f56d7864d1a8ffee2446c74c34163d2f3b7a9c130ffe08ed50f82ef23e -de6b14e54da94c19bf1e845d52cfe4bb5799572993d3115c4e8026d233eeea4a -2e9aded6f4f13059a77a291a68899f823c1dc8cb477b8a63e613dc9aba760219 -e59dd6207ca3a22da2934773001d735472c921f2c2edb778c8cf892295482ba7 -6253c77b38ceab6254eda38eda2ade861ecaee566ffb7228dbbaf41cac2cecce -53631734fc3240ac314f0c027bbfcb5706cefe4f1f975a8e2ee0956b23fee700 -92ef2de443b84ce88d513ba4def345f5804f6b88752921e636e9f3805ad16575 -88415aa0e0de5696f58ee1f5bef9053265fbd2fb59b1ae56b57976169aca1856 -e577d8ac3f8682ac5ae380031077961b4f5109f32cf14844d5bf33c230bdfa36 -7849549ec66ace781a6872b0997b3ae724ecdbcdfe1e3bea3985c4c49a301c61 -d420275f26fcd495a44e006fb0dc4466adcadc04ed4e7d5327430b63da5fcbc6 -15df77ee82f16d884b82ae2ca29fa3ed9bef89c39636c60d9b3fa3b0979daa47 -247a16e7c85d3a2eff262f02693468edcbab854de2450ad5b57549cd210aa038 -66b7ce681a264c8fe84d1e9db444dc9384613dcdc5eba9b416e45957d6781b68 -2b91c3f421c8ab3cc4c34770d92c17154e67c70dcf432c75b9eb5ba31fc1db9a -deac4609c8cabcddebf16af760647e84cea4ca275a0172367ad1267fc4b53a93 -bda2df9bcf433ae4a97e97d2216fc97fc6471b30d717c89c070f8907a7606c63 -2d584eb26c0def8166b20e33e5801f41937240794c42b9a89cbba3d69edd7983 -702788b068646d730615f77cab05aff0d0d3d6aa954aad02b927fd16ad2e0fc6 -e867725194465abc056a13368c8ddad965d1fc158d8b2860ecf62f91254f5d22 -642493aabeddcd7936ee057c74b65c3209f97d139b4ee97d071ca97ded70b3dc -135b4f6bb4b614b9b873d8861803e52b5c1c244041ac55002271c638d59fe5e9 -81869703cd7a6c4bf77ee3c1e874d01e42e5971584c4fe6793c9bac4ce1e4241 -22267304ee3494db762355ad4ff4f4adab137c86b075c9b8f9d550f7c064c50a -f47e512f1249167dc28d02f21f46de36139b14c872cf9bc0c42cb876b9381cc7 -c193a46d0e7e4445af03a2b80f21c03c1bdb4c8e73a45786b4e3bbb461765baa -57b956e0cd966d1e6df77d4a4fb5ac914cdd7c6619ba317f7c33c453ebf567e4 -e4ec75816c790bd658350a0fae0eb699c708559b4b5df253895491ae9c77da38 -8ddd56129988ff4d6fdbe7c01d890ee2689f235590f0b80de4a591e33e8196c2 -0105969df7fe558f8e2f97372ffe67adda409f12c17c979739510da4b5314ca8 -e4e64281658b232b0e3edfade545fd3c7e7fbee52adff818010270b0855df99a -acff5c77eb34159fbbe8c6d355da82eee52b7e153c354cf3f18baf88d4cffdb3 -00c8b1cc7f30219b26efc8abc8edd998eef793c7f4cbbf8a7d8f702271740335 -ba6e596c0876e5b3437218693508f5b59a5e24e754adb4fc549faac222b31402 -a8b754b37c2cc69a69abf86cc89123c9cf654d2d37a08251bc1f119ba6b72ad1 -55d2d0155edd88f76eb739280b74e364505548ecd95887229aab96271e461c54 -32aacb7fcccfd3616ceafbc4932eedcc145aa25e9ca13fa8d9ccbc9147418793 -b86718c5fcf833e4ee24fb58fddf71a53fc5203e1fd3f8132425d9a9bf216a79 -e769958a89ff7104dee938179b316361207cbb3aedb8422ddd16a10cab1edb0d -0077f1d83716f824236037c83a759f323cd24d057a3057e5b5cb8364528b3676 -c9bdd5eb9c47412c1a65d04a72f4fb24aeff98ac6383398760f2d593f1462aed -705e4ff227ac6805f91d12486a7658a9015ca7fe8badd6f449a97e4a4d3912a7 -3942c9ad0eeb2d732fb5243700cf95e18712cdefa2406b5c230a495e57b46274 -e064104b8b1ade3f2e62762a9528b850e4ef45440713626eb81df73b470c2f7e -e1df0501871f216a39cf671ecd4a289dba51123997309113785b7b73a5bfac2b -26532b86124942c3018c02f3d904c17596d451486f488593aaf66b73490eeaeb -f28eb3eac5f2a7659015f205fadb5c833f10375b029c1e3046a957036bf27c18 -1ac81761cd177fedf126833b3dcf3e5caf296b7b910caf9f6ea742b6a8b7503b -3772ab82feeadcbe041fc4b959586e06aa7185ced2095c33fe11564e857bc596 -2cee40d18e59317f21efe1f27a10b32ce40d3b4a60692d5346cdef10fc6ccebd -2a7ce79bbce9c4ff44b2f06b9a28ee1328e043cc12b42ab03317cf9bae3e84d7 -bd52b0761c1c0fb049e7aabe8b2a6bae03b2a8ee4a6543cd1f2c89d4b906997d -5530f949c403ebc40342e9d8816a39061aab7ff76c0080185afa3153500dfc70 -587481dc9db515fbd77c0b08d86f944f71745a0a29517136c9b679a5b0bedca7 -f623fba6b954f39e14e1fa04f01b6e377ebbe90e24d069908456762c42b35010 -677308247b6343061bc0d785d78a786b1a04bec9f9dabeb86e30e64fb4ada8f1 -b9fd75c9b0d64676c4c78d635b3386e362ec7cb06bf2c85b8a22292a58f7c038 -827a1a964af9b7b9f3fbcf8472d120c5d9c0bdbbe9c13ef14d2bab51a183e3ce -487c2c463b5b74f4b770ef9e0c60ed08a7eb54bffc1c0ab00c51163af9a1d428 -c30a5f2abb783c39e1891b93b27ba533aea8aa8b3bde4d9bdbebd0cb63554705 -5e2dbc482dfd2f70e88f9d7785b37492e6068532149a9e8fd5607911993e9dee -e1dfff50620ab8d327e51ecbc1d9f57045cad11228d13f073b197ed7bcf23bba -338890c5e4c89a831d3d6ec6f4938658b12656546498a6c7ea94f50c04bfee0e -96b00e1f90bbeef51162d5122d00a62d6fa8bcc6ba2609af9ef96f2af7341ef1 -ff453232622e760c66c04a5ad7005288a1963291a82ad061105283d9c1b6054c -5ac6087102fa0840a71d8ca55225f5ee5d9d8c5f4233f6e27992351df89150e2 -0e4c5b3707c15bcbfc0a2eef1babd8bdc8ce88410b5d21b2ad07f6a6a752346a -9392ac16bd36af87384b3959c8ad6092acfe0bcb4b1ecd45227fb53969512f34 -a99c43d16849f0282592f199a87cdcaa47af35b93c37b341d4f9df8aa99de0d3 -9dc3ee52a87141cb9dc54ee197d01063340f0d8c34abdfdc6132bc39e0d10e4b -094ef37bc33398c0c2eca7b7fd26205816798ccdacde7f235a70433df45909da -178e6ba670d4ee36c0894e42fba7c6e563dc44b64c253780c586a355963c153a -d25126232fb9a930e7e46f68289d1d1ff10cf89c2b81a82872b725d74a0067cb -76f0c8d490a3347c1e8c514dd118ffd233fcf22eebf361b73cf6d3a2fb137276 -4adf6e62d8787f9988416118607c6128f7210327017bcd6db915b88c7233b2d6 -25840ca2473d6a9b86442963466334f743263c0d9df232d42b7b35df16d80cbd -a08e17732d864bbc1e3f244c54f22f8fc198355440f8790aa50af33aa967eddf -d61cd3272c0e9bc63598c50c3af58a18c649ee88c38e4404af24867e43a0fabf -8a709eb5ba11696a044c4d287dca9328d768fc04a14c382d55dd54500cd5e601 -bf64480cc4f247a4b0c2bcea1a0c648e7e8e661f69dc09e789e12581d99464b8 -549ad6a29c2874744c42b434eaea2d2943fca61c27bdeed1a52be6e6808383e6 -a7c204ab964e78295355e2c53f021a809475ac21375c55e0e7491f4b1289b3f7 -5a2e607195f602687628ae541fa96ff05d01dfcd6c04a2ac5b6236a7b9324fff -00b71e095442bf04ad5b8e428b18dea2e6dbbd77a9c096cf4fd591f6a563bc3b -734b45ef6bfa0e83ccb996b9f8981e55627f790eb93947b2f01c46b7b4ccd788 -d870da4d3242541fce9968ddd6e438be5d36359d09ffdfaf2bf1ee47d9633132 -f41001b946b4879400ccae1c8a934a808fd1fa6db83cbe3d8dcf2af0d577fe8d -f6fe30b1e0ff0a68c7c8fcf950bd9aa17c8d8a19296670eea02cd17bece759ab -abb6a93ed4a6af531b7f8ba2e9ddc5c438eee125506816025795683f27d4df22 -d811c2646ce8830860a5d8992ea6a8c0ae01280b8fc4f27b1b31d32f826caaa9 -635a1ef2cfef6ba6c9ca9c0fe970d6e601a88ce06719578c27f33ff9f6f2d672 -dabd6f0be0235e3ed61c90bb0f304188784a018ff90156d8d04c7071f0de22f7 -d2cf7ed96707a83461ec99fa40f6d894286308858bf6f616f6c1105e7e84060d -1e20502bbb968b61eee38f151fef5af57e92f1d0196b8eaac2bcd8ce523529d3 -e8771aad8265b7e5e9846f28c2a83512fc056de6a20f8c4b0711231304b5050f -9510c17801de0c8e2dc22934ebd24a6167ff15e9a06c023d025f05d1f960312a -bbfbc9eae21c4da1a6cb51ced11db6669da3e2d8530fb9c9287a4dbeca43c0ca -936364d960f7611ab03fb143557d9545ab4fa4d407f125b8ec4e5c366c4d2a7a -0bb9a135eb9fee265dbb5955ace3bf374a0d321c82e99329166806ec8d198adc -af85bf2ef282c3ad477224d4a028584b6a2b5e4677690874194bc2ca665ff590 -da247aee67eec7772dca11a4897b12cd08532dadd9a217055b4840f26a8e2103 -e1563952d46a596e511ef81d1fb0d502fba1c6f5c0ea17c3e75e2b69e54eec6e -0bbb9278f565823dd1ba4e5e850cd6f5aae2672bae4a07bf015ff08a013bebf5 -810fa3969991aaf53ce458d35a44afbb39d4c3bd166ab4cdd2389f3cb67ebc2e -6782677b79fa51bb557c49687bf1b11f2082665b151e757e94259ad6659502f9 -0dea0e4588b706f5b9dd7e75bbd371539949a4f203b1402e5b35c06a7061f048 -8ce78957c95f4d0db1897d624e8f6f60e4f604973a89445221191f8c06f5519a -ec6be0a1c2be7cc6e5ba73c619f2badbaef9e54fa9ff4189246fb333f4dc1f9d -deb1120971d08567d890c29571327fed1651b073a357d71cb48a852afcfd9a32 -3e1b540aafab71f6a61e05addb80a225b4b88c4c0f484197951e3972df4b9560 -33d831653a2ff15e7083adbea09b33a35575678e145030c94b0c6e0927c9d4f9 -866b72e6b2c203508848ee893c13ab752bce6fd4f9fc6ffd91d28d14db80db61 -733849442b4979ec6dc0d37c1467a2d5381c8d33663995ce613728d6ae739370 -2f9d266a3e09aee52ae15fec98a8abb59ac09dfd740c0eef4e11b78cad38208e -5f60d396e41cc30828df87b3e50bdab69b39af0fec8c02c324d086eb42e097ae -4ce80ad0d2dafdc139e67391347e116bf1520ec8772b4b74e9272b4bd1d4cf18 -e808908988ab4bb2cec3db5565393461ca5af862e6a0f2183fff5d81d6508247 -05d5036599fcca825a74d487a8db33e6bee831d324f78af5910919d966ea57fb -830f6b782d3dbb8d5f7bad8aff2ffa541b16e78e2d23180b4c21aec877254afb -34076c578e4c40058375ac7e7cbbb7793488d7544bde5a6d29cffae9eaf0bd69 -b717eb353a7151bb06bd5ef2a38259798a5a6c9a684b377c0d72c932d52db0d2 -c9e86fd712ab9efd0eede6c36f24f2209605c401a3ca9bd28ff0959ffa480ff4 -a0eba22ff723e4fb4699beb0eb10c3f8e52022bb2ba2541941582667a784f397 -3cff0191832b3eb363c6977661032b8728ac754db575f3504749f70c8b021518 -90c8010c0da0503726f4aff60c240e8fd733fe37c74ce40a236e8c088c083dec -dd187a2c95515e54ea4ded8226dd9e8b217e936d4b41c767eed5d20da9615b32 -2193abab5fdf0a2c3ac1b35743e5dc9df9048557982b1d87296c2f82dccaa4c2 -3293ebfff03fb7f8f252ec7052793b3e01fb17cb526814d7b73ec1abf03d9769 -a18e3fd9d4ac55bfb534481780790b76fd92d947f3adabdc10d7ca73e59406ad -65481ce38557f64c5a23d1841b896923011af9d7c3b999772085d8da26122059 -ccd4972c484f9fb3e6319414b393d39b813ca2b603fa2f18926178f1fd33d22a -bcb5d561159b0bf186e52cadd6114791a9cb211c285118cf6550ba24a931dcf0 -d5c7bf30dc413918ab2f6404e51d612b50094de3dd281db363d254e17fb7b889 -cb5b906db3b604789ab7c7cd9922e879b1d7a5292990a7667fc1332d71e01be8 -95be5d17f05d662243c7e3088fab828dff19c60b61f1b413e38891b5c0125648 -59db561729c92db0aaca99d8309b18f0789a09429059c57f4aaf4d39c60e4866 -a01944c0adee288eedc7a3a3abdca9275720d1b3da4233c91a4ff6f1ad4b8eb4 -ef4954da9bc9e0c48f049baa0fb35815c66d644d3bb340872928802611b73c24 -397f3fe32125811c8891a8a4c454aa2ef649d12d9c285310e0177e0400d6cead -27bb940f9ec37b7717c3668683ea1de7e6fa950a5df69c6acc537864062cb948 -435d769f1673dfefffa71d9fc33c063c12f77ffe7a9ae14198a6623488ef0721 -93b48be6c45bfe6a1eb11d5cdf6ca9dd4bf4a2f0585365c690e57f83f7c0a80f -2e24520d10819e81809116c0948278b9a9de9bcf87b2cd06723c0d95480e5747 -f437531f4bd6fb9ed73f5072812f66dba6fbe10eed9b19ca8d16fc023ba44cfa -d17841f9bfd586f914e0d2b3336b4cdfe63c602fc06ff2d8dee6705955bb5b40 -7ae736aea9e77d00f679ed23049980872f1ca425b6ba0f35703f5d3d28cd7bfd -8ed8818703308374a6a0bf0411b8de186a8b9ae2c67a37e4d2a4048dab5228dc -53dd2bb2b269b1d220975d7ae8db6f17eefcba79d8b8d21100e528110bc6c3dc -147e8e2ae9a38c54dd105ba79b57816991c435f412e6deafa71724f00a1d0b68 -faf771589d6de7b07f48e0cfc509726d1015233a6d79ff1d290d40d3f1ad1dd9 -19a8b41646c625c840ccd98fa5856ebb7a36f778d9b920d7ad0357c13fb3235f -52e7e9eb1316c4fd0d692c6ef630edb722568d9eafc20ee3103ec21ec8ecc46c -c6cae184b121be328883aa1c0ef56ebe2eb0e4b7cf40cff3d0fd5cd2ca339dff -5560ce823f29fb7e3cd0cb47b16ed8bd72a2126f3276cf178bb0f1a2017dc12c -8a64aac7c26bc7f940e29410d516f4543a21b07f28625bbcbde727901f157a8f -7ee6d875847151cc685c1474012f5c92f25e8117c16b816bf3d99f3fbf844e71 -51e2f5d2b487a03399b3e263ffc722f6d4652ff11eb158327a2c94ebe007f9bd -fa6365221e676c846423d48cf1c945612bdddbafa91e7f76cb71174a48bcbcd7 -3330040298c4b93ad3dc7f7ab689d3c68daae2693482c746f3d16ab5fb291fcd -16c7dfc8b36b5105c35d65e23b7ae1f46fe78204f0e48dca991d94bd4cd0ff6f -b587386211746e1814daf38866e9293a890b47cbe47d6d0241d1a05db32f3947 -dcd22aae8d26a2c92aad8041372f86ad9a518b2b40d8f9a35e5afe82770ab8b7 -b1b2a2e2e456a7895fe9b3144ecc6f3dcb4804d21a6cf11e5f48c8f7d6e69e23 -cfed3dcbc7cade5410701d7dbb19297616419fee5ed72f6c4c302d4b6928e551 -7a810b9c7cbb33096cc68d509201879f24646bb6027b541be7013fae97ec91a2 -1161e2c49a2ab5f6ecc731da083842edab4d7a029cbace3af24dab6ef566228e -892062ec9ac9420ad0cf098f89bcd0e46f385fa52943c352c62341d5a1054e5c -5c8976d6085a43da60468e301e19f2c10dd0084143e377fb8f53b3a4ceeb0c83 -6f88ff44e180d46bb136fe75b2b2ebccc364260bd72ce07e935d65d2beea401e -2a3a12b6b1a9399b76b66fb16f57431e0a84813db0672d84c405bff5c06dfb1a -7cda4ab6974e13d88c631208a06ed15794469491547056e7929d543d05ef7f14 -a51f64728e444b0c6fcc06ff89a8289620160d82e36a477342b70ca1254e4792 -b3b0b5fd349c38dfaa19a3c306124d50079295bb7224ec8b8568c9a60f8063fb -4d49cb80175ed24bff8260e3361ac5227cf87a0d9d49f56366756991112e567e -a80ae3e6451f90184ec37082aed7eb7ffabaf3ea4cc8e9262a4c893da2e6531a -4fd9e46d3c448031f043b0fcb636084bd0284a20c57333c11a150ab595049323 -d0b9c535bc57dfbc7f32247a374412328f5119098c9e2a5182a47e8ea456a42a -bd3e53b3166a525cf6722aa07efff48901d63d851666ab149439f0a53fb5a45b -f816564244c03ff44292183533ba2251bc0b2b1048a02b270dc0d20fc731104e -176cdbd1dc8be38245cdc422ac0f96d8cf78f43343a3be655aa8b1fecbfc67e7 -aba66493f877b7437c84aadce69d46ad9d61a9b2cc484e0f0dc9376a857a8709 -39b695d5afcdb77049cde5a4ec726022d0f92d309cdbc7f6ac5e6b5630169dab -c70fe75da2048a6c5c6b75fa2017e8892c8cd4aa408452e0054c2a9e73d43e91 -67104adaff3f149a43da3deb46045f507b08768dad3587cb00a1ce8c185f874b -d66f45316bf9ba7cb47ee1a1a055a91c03c3d94128a82b5a7bad7e304f7baac6 -5d3ecca28b6624e745d728af83006891bfd39cc56e28af59ae3317501b450592 -bc6bdb032e8d5f319552bf281412e033b73644912eb30cec6010c152f36462f2 -5bca347b9ff899a593a7e9b96d6ad4b3ccb20e6a972a192428d4c5bdf79cc717 -97cc5d48a22981afa791078445b7873ba9f36a47d4e9124fb063506536bcf433 -d4f898d334548332e655f1430c5fd56161e78a98f8584de372f5036b7e02d712 -c0422bd413b89b831f41ef23d94dcec5db71061cffceb7c3f920a1a63d28cddc -fa742f11028226b3c6c9987ecbeb75e343c61837bed4597f4b2e8e130537bd60 -7eb0016b5c48efd3282e758fce1868ff5b302074cbd62af9856de3fb54996a3a -ecd8f0c6f0b20ac3b511321dce8f97d5e67643a9a63f7af293c863bfa4ec2c0f -a2c76aaffa828aa6643eee7f6408b6ea09e91037f30cf2c391f4c9d9cb5fc01a -5a012008b64c7e19ab795e24ec662cd3a931a98bfbb545be4489d7d5fe732cfd -c903cbcf2f600bcfaf858b0123a31c12f2abb98c17833876b152ee9efe354873 -b9c144acfdefcb99273276050fe43a140247a35b0994927aa2a1d7463ed69e08 -8881a303b6131e3183893e3d001f241809a990efd1c1ad7c3b419cc1644bcdb9 -a47e3a8d8fcf1f52865c4efee0079b840b82a95223193515b85b9102c7e3f0e8 -65f44580845f0fb5fbc16e339b66aa51779eb714a056e56afaf0ff6be5bce7e4 -754a553912486a7658a9015e1cd381969ffb9c6bc4aaf54ebb6b0051fc7eb362 -39941c8e0fbd44bb2fdba5dc229e9d659db1b44bf2688cc7b29eb0bc96f03f79 -fa0b953aa215ece923ef8a4030ce185073c30ed1dc8f6d6c005eace2a3642060 -b95a54b0a0b1980b1f4608b63f245b8ed7e640a9c3bffa3fc42449d9d5cad579 -e86a050e5c9aa8696c5e7c4521daf837f3213249848ad7f26da04aed56f8c543 -61b910f4e1c0e56e336894db76da6031e445f889c946e4c79c79b21c5c64cf8b -c88d06cce7614817e26c5d522a2c3d26048b964f93008d482af4f25638e190f5 -0d2775dbb1c4a4c077e3721df3e49bed7f8f642a6016963b6f58b8efd5ca7ff1 -1367b20a7019cd66c43738f84203abdc5b12ac2c0e9c8fdd15d1eefa86b464ea -d60127e71e62feb7394d5b99d465cca9022a4942f9e8f6bee849d655f6e52dbf -26188ced3107e70480cdc5e7eb3766fd734dc86f86f823c3e5c0bc0afc0707a1 -33663995ce61372981903adb5cef4df34a3b891cfb8c30ec92c4627b30078643 -14b9ef98e4acfbb87a6912b3559d58dfe7288402bfe33064f126a2da07b981ee -0dfe84cf8b2c72a67ec9c94039cba069c3ef2a24847a72d01a86145d0a97be64 -700effa830feccf46541278fdd3d35d082ce150c39d946362f3e5d23096d97a4 -76367bcccdb04e7ef9c608416adbae868f8800e645a80793bc0ce0e648a398b9 -268f697af3372197c8b33bd2760b0e75f7f38a6d94c4a52ce711c3ea21292bf3 -d48ccf0088c5781979bac62f072e2702529e43ff4bd63d94048a825882d6311d -dcdb6f2de1c3de60cab153c6f48f5b993ddae60211b154a5ef0fc2a0c3d18c90 -eca4e35b8796fe6d99734fff908735ee111af75af45b6665b82189dd3c835ffe -b13290cc59b25161908d29f385b517e85401222a94e1e5f139c5c00b72d5d4a0 -f4b1fc8dd6af78b00442b19ff2b9e8d87b0c33565ee49eda9a5e3d26b7c7c82a -ed94f162930ef2bd23fe4628085a3e7c41153fdd1a335b994b9bb10f6cfe6ef4 -2cb7dc8f3ce9d8458f560fdd41c6c189acc63a0c38e38cca94560924b4de1e59 -873896edc1b8d0170c7da1af5908497d4a48158498d8c23e49bc813eea34a1e7 -3aa06342b6f1c7914d73c1618d856a995cb51c407b2f6ab72f76ee037547279e -336fc3d223ede5cefd69b5c15d3972b2f06ffcba1dfb9a0c9f23c47f369de28b -662cdf284d112ce70934d22e2e00b5448905591d813e0ecba462d5edcebfac9d -415539241ac5e4f2ba785515a78b7b009b4cd20cccdfe4f5d8390f9765749f5f -d6e529814fb9d54e906bc323b160a29c65c60bdb47083a378727009feee85acd -ae66a691a76f7d58d031692215c3a82bfdb44cf3c52697006e8a5899a78aebea -ddd3b4c4c8139a0fe0ed2aafd845adaff7b26ef4c318a568dfd89b5060b20c4b -3c000b7cf8562fe82185dcbb58298decd616f6d9a0e879f1887c1605bc921f72 -d6b7eab7a44a883ba9f1687432c498eba28a7e650eb7b1d97ecc72c9fec17047 -7c62e050da13dcf5f62f26e62f4025ffeec90ea5ec51a2326f5c08bd1f7ebf97 -483279163ac37bf0795ae19865fbc560658c512240d5771ae5b8da18ebd3ef91 -e83fdf9d32e40ec1e633733ecff3ba66190f94f2b5338fb7d0be162ae41dcd46 -388bac55ae53b56e308c714a91ff676ae87f1e6a478075e259e9148d1b60774a -a1bee100372a7e29379ab244c8c4ba555f5d77c3d98f22e80f8a255a36f1faf0 -b2fa0ae59c61d33cd9e70d0259da5d93f19bfaf6b19df1dc35fc783b3939dc8e -d93572299348201b4549a05f316cad76edfa35467c4328df10e362b91aaa50a2 -ea7b859a5b11a9c5e9dd49a2968913619b57b8a2d6319ea4f102d8a9813d6c8c -3dc6de3091f3a4034078f15dbee8514a59e6eefbd5559192d86c7b55761afd5a -6e97279028aecc6d391feae0deac7cfe033e9e64339b0e581f5284bc81cf79b3 -eaf122baeee10655aca357383fd83d481291f37c90b8737d16d3416af742ba1e -db69f6a73f16aa2f7c122a2ba21c499818774d11141e740d8848ac15d0acd7d3 -f0acebb718fef48afec1dad102e364a5f4624ba04bc3d87fad0798bd45a99923 -abed715884d93590752b7f86a3c77b14543590eacf229f8f223b8e9a22eddc3f -a2907482fb537652ac3f6df21fa57cf44ed6b8ab79495771acbf4e99c1451507 -e949dba77ffca3820c50570d56e1d49fc4e9d89aac4824c370ce8833441f8b02 -d19753daa907205d4a7fdaa0fa130c296cb7b345916ffe0cdd15d92b7521e46c -93d5b6ad6c39e66d5d6a254bde88dfde11fc1e0a15ab05899434396d95dbd7aa -fbb7e1335de4a13915d33bac3f4da705d9ae891eda4d9ac185a9fe58c1ef7ebf -bd73a418c1e43ebb42938182c0d905e79506f642ec70961d096d6fb73be25805 -4064c56284f06ceca2a7afdbecb611a0f67e2e3ea52c186384f7713691c8174f -0bf24103dbab5900253a5f424e485c7c27723fb555d0e2c8af7660a5b914e044 -51d41fa45b17eae3f7815926098fb5346d527a7d7db1cbdba966bea36e6b963c -2cd8a9f509319cc9ba41eb6ac29832c8be17776779f8c2d6cedeac81005b91ba -fc8e4cba19744a4433c91319ecf73ac1a013554ca0ddb4eee09ea087fc9b2596 -5a9cade9dc4c9888ad0c9cb468b33bb95231646f016fe42b2b2749f77f6cfbb2 -d4b131c98712e2df5d1b024f9f22944fdaca133567d66fe5a87e734b958bd292 -4d97cfd2c3a13dbcac7a09abf9b153549d9b9c078813f407b9a9d8afe99711db -00edcbfbcfbb273d767e4c4334d9a91ae12522eaa15f54f84e2f9468b8e74bf5 -e74a1fbcba022550c63a64d85c5eb33d02ca6c0fd1f5a9aa46348a953aeb3396 -86a46ce0a13686927c03fdcb24ab3d98f1a4dbd8e6b991bcac96bde4603a9f1f -7859375319a6a850dd327d7d745fcfdbe437255a3566e9edd14af6c2e3444b1d -d9dbbcf70cbd7fc5b947266938c04c9f63938e88ca30e4d636aa9cfb2daa861c -3874cf2fdbc490e32bd6598ec696cd7d58da40bfcb6199d24f07b283b4a9a9cb -9b5426be43b4d0d67dfd8d88152fa14b531d522a9fac6cc79d2617993d95dca7 -d89b8d7efddf4c29e58cb0feb70ba74400b8be82c0499833253934c7edfe9e7a -90a004c4ee1c7e3dc31c24ad166cb1320da8e3bdd05afcda1492bc34bca43b5d -32d540f77fcf45d879a5646d4a4604397e37fcc732001d0af721d7aaf69952dd -ed912594fa9428a20fe0ae76e8401a9535f38e448f69d48bbd770f23ec075d69 -10bfd3604a1dc79f2a5159e8fb26b4a3eba3b50cc46e84e4ad657fdb0d254f0f -64e37824ed4c1efea12231df670dbc1847880cb64f7f3c382b88e183de261485 -f7e917e67ea381a568ce37212f8849df5cdd75575ebbcd7522e1dc3400a1d8e3 -8e09555799cbd6d3f488633a9e3bd4a2f6f180e1d27e0aa3949590cee53cfcb3 -3a14fe287e8021ab0777baa8859de5c21ed2fd8c3b818968bc26f5f9fd712eb9 -424c83d0ad28b76d1f5ba1678ca31925d49e2786356867ecca08a150a4591523 -964ce4589563210507493b74148ad80cb3c171e22f38e73a0aa59f13c839882a -536c00ba899d409a98480a1c7f82a44c36698d8ba5d0fb8d50771c0e91cea55b -836a946ae06e2f0c2275db32833265402264e2f6a1c8b896d5ebfc7c1872f2c0 -b4fcaa97210160403ae0ff1380d7e68251ef7c25e0a66a312fbad992aa1311b3 -61cc5afdc82f982d7343b8b7909c6c7171f568eeac8bbf8b43dde0d928e81c86 -ba3bf4549e255adf55d6e5909a01ce0b270f53169f9807cb9c7c70f3d3a569ba -8675d0f345f8e3a00a1c6ec27d5f83d275358830afdfd12cf23a0500e2512fb2 -faa9d333566da5a65dfae8ee515ae450ec5aaef7374ae1d598d5cbf677b85dc2 -e0394ae746b8c9554581c737d79b31048f4471d72972fd34bc2662a83bebbb32 -7d3e2c2bd7c65e68672dbd3ddc32bcc31b27812a1841c3edcecb723bbae371c6 -70f5dec75dbc9dc90e557280a836ce401105aafb64deb25e6ef6396da68183aa -a39e207a4ed29a41d9be11cfd888c1e7c1c5f869ec0272c7be8c85703721101b -0d41921b6ce168b781b1c745dedc1b8fb3f8fa027b0c2f63aaef59bb3c485c1b -c773e6c0672bd48bcec83042cad9b3058b14f14051906960602293261be27514 -bbfc3b41fcfaccf05d7eaed0f50b3f9d85d8bc79288b474094ae92dbec3b7870 -d16c92d667fb2074d176928ec7bcf3939f665b774762ea69b989ee8c8334f20e -3451189600c26df2e3a2453057dcf2562cd28a8d04b101ef004990d09afbf7bb -f0bc3b20218d3270e0a3e3446ed7ddfbac2c37c5bf8eddc74c008b170d912bf6 -b1da8b9377005a6b6fcfbff04d0250a74b93a1437ca0a7cf497637106c239017 -160bc50eeefc55e12d6c3d65261c238e00b0bdd7a7c0cab8d1e3902ac8d22a11 -a7ed80dc0dd04ac63ccb08399b92abe56b4cb2b29b2bf5bcc4e7ed008bb99881 -c74036842e45e41debec5cd4c652d37ddfea9049fa439747e6b700f7baba635a -ed47282e91ce7eb743571d533b7eb9d09f0c70081dfe408e503f14a0e117196e -c1e7960f5bd60a1f5f076e31c6ca28c9ce51061d4bdcf5e35beb3622e3424529 -ddead48eebdafef6d30c02dbdd5f1b5c00bb52266a8ac0819fd60371053ba1bb -80a8954a4eb7464618ff70369083068f1b60f059ba217291b6585d12f9046aa5 -e66dd926f9d802e694ce1dcd909ecfc14b5f3f44c4f73a0efd3e1422a747a308 -06ead9d72deb9fcc1a33617fd94ce9cf6e31b027b86937d0dc58b350a3230d24 -2596131192677c84137f034d015613e65e04fce2fad699826a666ec8e1f758c0 -f6fea6d199c6b3fdb6b81ebf80fba48ee1192e0731eb1b6f439f654fe7f419f7 -618e1e00dbcc0dfbbd1897678a9e4a6078273233229035c98b0e1fb4f4ba5102 -91d44e807c37ba07dbfac535c9714fde3de3114776dc82e28f7906c342ed5688 -44c2f06a45de22c2704f3b8c6293626fb9a018026a9bf7f688dd2c25a6f35845 -fc3bf34ada6e71c93249a8575cb6753fa9d7d8a2b10f4b0979aa234326185387 -63a8a532543e427ac650c67aec94fd5f67a697d93baeb2c8d1fcd83f04de01be -37e4b8d966f5d91818b80bba52c34e80897521bbf46172c89247c257c77be91a -39c8e4b4eeb5d54215def158219b0111b7f9a6c3c5b32945a5da895ce74fecd1 -c89c2a3933fdc1183edfc2042594fb11d3f2ffdae852be0443f5c37765b3aa75 -2e94fb1a0ae436a38a5178023601e903851f015d1a74d1d132366af6ab2e78ff -5493e19ad35553ca6fe7dc51b6f5dd62f22058c35f2b0ec5755aea9722491f8e -6a7f5d3e855f56533fb9e5775fce5aeb0ed6af76c3e7b24eabc352548bfa2550 -c66dc44b2795ac40d1223b416c798cf1c3aa90a8b404bc4926b3bbdfc2c8a995 -823857a98bc528813437a0b892530fdcd05f1fd496340f528b8bd245a7cbb8e4 -a77482da0f6c2a00e492d878a13efdc2f280015a6864657ae3226ca00477cb3d -c5ba741aa7e4bd3a876c6d7100564be6f6a2de0613ead5f9926c2e4cf5acf5d6 -5035e2a79e286ad6fb4289ec577bec28f51a8bff37423f9f0751a79b91bee5ef -1e18ece169ed2723c9d2103b675e335641cfe424360ce2503ef49dd8d158b8fa -7c3d6bb8d1d0bdc607a08630a67be00625786626f6ffe698c3dd414215b56ef6 -756720a12c1c32fc363db28ae0e206181ea32fe554972e6bae5fa7bf89ea3c5f -85f8b274b9fde63c7251e43102fcf4aa7180ec3829c55040bbe511c619de5ca6 -95765172d5c832691f6c432be0397bc401e2e54ea1b847bd63c85c5c9f62cc5b -e1ddb4ed907938472ce6a6a3cab60495ad8d5967150732915fbb5ba40a8130f0 -5df637309f37d4249298cd57619452601dcbdb1ac7f022f6a024d7ef53c0eab2 -b00ec3212764ae73ab88d18806c1252d0ab508951bdfa2afb67b9d5a1460c11f -c24eb5ffe80440260d212923432ad3f3f9b67b58462a66e7313e5c886a046e34 -80a23e08048ff3c918f26194066e29c36841b547aa3e374c1bdea8c9802509e0 -e787ef0aa8a9955e1824d0ff95e294dddcb644a292e91e8f00109994cdf9681d -c84725604b266b8ad4b196791f2752662189ec0e9fd076ecd5233b3a436f39a0 -388be1ffb33d075e55a4683b9cbe917b06c1d18de8f08bc06df4a8946869355b -dff8bc9a240ed22bde34f932d90ad2994c7b001b55957b9dc7a7931d1a87e215 -367e5b424cb74545623d8aa9539b66803581c1746e463079f3b52fdad364eb68 -58d70b9835b140cd6db9ec95e50a64e4b88e88d2a79fc3cf7ffd469801bfac17 -1373ebfb52e32486416c387c27f0a455ae5023cf1259e691cf5b5b339a2ceba0 -9a2c556ad65734baef23d18acb009564a661f59e1e93fc163dbd1c0f2fe231a5 -8aa558be68f033d219b0736b42a0611fb15916f3058b3acb9f9fd35d81d6e1ac -665a358233c0aa23367ec3adbc777539cbd7bee88e68849bc91037670e8d9df2 -5402768f04b5fcf34fa8f2153c37ba7ef356b669b5cf4615b745d8b9968b6009 -bfa5ada490637faaa554106d24d4e755e4f9f3a9f52a1b15a61c35b8ecb983b8 -083af04f9fd3511fd8d36f2d822dbdf884c61627d81020a0acc19f5e36099daa -53b0d6d98d0394569fcc93833b89f87e115f5cc26317196ed78210afa8a5f0b4 -9abdf7ffd38a892bffcbf30064176ff3c7fb3030da4afeb5af90610abc321319 -020412a91fb03811741e1b0ba8a8c93e59161eb5b41f82bf41a5c21694c8373f -58e3d1dfba33a6c5665d8b73ed95c9566d67df8456b2f61c559b2e8d60c6e2d2 -f1c85d4eb1ee33dc4718a4f37e6a5b965ad32f8d16cad21d98ad189721a79aa5 -454249076a91c684fdda1a1eeff70dd07274b8c402b6a37012b89c0c6870537d -056fcea0c6fd79efd834fb29f8ca28c25c57de5123c540750972b2bb08311835 -c11e6a5bfa0c31b18ca3f44899a8e160d97715676ae211ae8ca83cecbc6bd654 -e1422aee98c12ed1fbfc834edb3229c7a693ae4e6c759bbf3cb496672469d856 -cf7da97eab3042ebc9bd3b645c1d314d3e7b38087a2b0e7f5aad5e880a4adb50 -e2819b638eb42a2cc2c3b84a27eee2959e51811af80b3abb38900e48a8bda718 -078a5402c724cb4080bad3657b1bab969e2f0a2a088fec1ad16c2f7100370b95 -62753c659fe32401787f51e1649274294d3886e7fdeed53adfc66efa195a546b -05bf288823b178a968a20f8af64667d75e3e8b1c492b571aef01e55623e33e9a -f88bef36a34d620fcc742244482747708491a1c56611abd75cd8964155f602bc -60b24f38121bf53748455bd660f17ad52eef19ef0d16eadaba48d5b4e0cb0422 -7229961f8c1d14cf17a7e88abcaefc3eb54fb656c105b2babbd90dd6ff7d44bf -9d29c6ccb09b5c8ef13515e6184d15939fc90aeb78b4e064e21e2d376dae6dd7 -3f4fb1442ba15e9161c62cc93acafcd55aa333ca496803927d4e40371cd7b5ea -665113de3b56993e991c966b7777e80c8e0b82dac778254d6d9b3b4c661db3d9 -f2cf96fbdc16a936912a0781cd61af375f314fd8933642fa12b970a75cb813b2 -7a2e900a742de7d1d762f780fa3d29637c1b7dbd66b7d4f7aea7a3f51a6510bd -8dcf5c4dc4b5ef5139a7f3f0f654588a4848e9d642676ea145d5df301ee491bd -4784e01170c4a5a4a0787f83db24931b5d9b761b1ef47302944b8e689d56316f -80cdfe37424c484c83c02ae707803169d1547cbebac170ef5779911878988333 -1577c0f514131c9f94914d942d0b4cc6d72a9d06c250e0454810862a0973ba63 -8ab9d4b424ed51d5abe3e39f0befae042437bf1acdd364d20d76e3737956a0c7 -e666ba52a889a52385496273bdce52e307440c4db4a70e7a6da7c655469d060d -4353f090bd41f70dbe4b30f33c00d8964f64029c41ccae18243551afdee211b8 -9744d966c63913a6714ee2b4d1b82fd0aa1e6d2b296da04b3377f9b621f2fa39 -0b23bfa275b1342f62e6dfc4e3ba85dac525ace7cc2c170157b32dd13ef9ab65 -63c62e6c44c45affa457d12f0a8fc23e1e0cabb5927e7584fc714d310d3a5c30 -71d204f98979405a0edb83f468d58f0cd82ce3d84857f928124b5d4d592c2dc9 -196a7b32a7b8ca9f3877a9d6463f1a4eebd736d02e543d2ca7675702e06a5c54 -08f5fa709feda49a9b7e202610ac9dda957eb65d5615d91c2fd66c35b88ebd5b -ed398fade31d7ab65cff138e211f9014ac86a994e58d20183908ffdb55f64da0 -39d1a1f86f28d18f9ecbdbe7f6abebb2ac41ac88e385c64eda6fb9f73c47c6fd -b29f0b4dd0595e5c7f76da3ec7b81da2a516031bb54ac9678eaf2c16999e5181 -1af80b3abb07354a786e339e812ab142a59004733178d3922de9a23ade1bb2d9 -23234fd2a2836d3c99f582778cb069c46ee8c14999748c93f7b5d0b607abd3ba -cc79739ba4bc945b8cc535ec56511c8b184569c7428ec82f5ee9766acd217037 -2b72cf351729da098cb6323a724db4561045f239731661d2ec26fd014f57bd27 -07948c03ede03875bff01c4972530cbb129359826e1081c9f2fccc0d9e6098c4 -4dd980b1988c77bb4e04962c501fd7f8c5d8cbf00e97b2020d75d1d73e4d19a4 -929f282565a130474ca0777cacbcf429f995873f54031469e3095e39976a6877 -92e3db78cde4e930213f64d8ada47874900a2fb611e18c45dbb8e219d44620e3 -151fd42a61da68301334c7c8883c800e7a851ef4072aae38076c4f11418443af -7e22c10fb99f32b8ef835156173e00f37a1457bec7c74fdf0af7f75fb1cd15ab -a72c0eea8ff66233b2bccb79ca66860a3154a16bd31283d0ebdac5fd5f54df28 -190388468f1a102a99b733781b7674dbcd9faa280416923e7331b6f407d8ae09 -5a380d8ca81de6dc066ebbbd1341553fdebfae0e60aaa229d6a80a419991e8ac -7585cd947f6e026f6d1abdc3ebf4280d3292948b1ad434f26b98a05fd19646d6 -88894412749bfd5c15d963696fb5b8490eb5d0eb4a72d15be972d115db0be268 -724bbc432e470a467971c3f18feddca78ec38e60c79fe265959e82fd986918c7 -ef5b7a72361ab3249272ffb6e55b5608dd6c0a4fb1b72b50430f230b2383d8ff -bef2b686cec585676616033e1a0c66287d6803376e5d8e689980c3a5bd5a7bc1 -ce993e47ffdeea6f94d8c562d4804034a3b9a910c4d567ba82af21e4fd778bde -ca490b1c5e4982fdebbe4ca4592da9e70d5fa99fc17ee11963b866f7f62efebf -e30cd690813542f4fd8a14b43ca849c323c8d67569d279406b31bc066e8a99b6 -284586fd6e7f5368bfca05466560952fabe47658cf67b93207b004a9e7995a8e -49c81472e2bbf23fdc86466a6151e797bf086f32282a9e55749f94f8977fac75 -e2aa9e4af7784c533f50c8f1eabb82f5c325f8b89604d635c05878ffd17e45c6 -5f71425cbd6df1354f76a48ccd20d009e6d7a866bfb654fa0b1f4c1003f96419 -b49b5fd675698911d745106d7bc1d14db6d182fc82602ce2ed91deed5a07e683 -36c1768e8e0a87e1e112fa37aca99b4d37768120930c71cbacf45b58f70f767b -3db154fd31061251ab484ce619129b2d5c13a76bd15cc92d68aff8773c65e212 -399c6d54cc6a5fc0b48ebb33b23b916421dfdf26d4e8afb814619dbb9dc67a07 -951192e58ffdbecc7bf82bfa10d37cff66f5b211da9b7424fdf504139e6e733a -b1179cb9b56cf570f63aba413cb12872ae76eeed4ae160f83c977282f7c9a692 -cafaa72a6d89a9adfbc498625cdcd53fe9fe591ee00a625b157321839eb85784 -775665453d8187cfe0aea8a671194ae185ca9db23537356c9061d934de5249f0 -2ac01055fb32f110ffba4560ba8bc94cbf657ba57ac8f524a2d01a8323326777 -b6ff3413220187834e45da6076051cd695b1d51ede7348cdf8e51b675ca293df -dd1101fc53db5d7f8de55ece38a55e5528cfb4e8266df99d41ae7db821903111 -bedd329b1237bf7468ffcb8f8ced0d4416b36f7b2bc0231aaa331bf2474f11f1 -3657a008f9279855854ebe123ef3918acf58530ff76553394ef3e72741e9fef6 -ef6aad2e58d4ec10614f041698e78bbef2456260e6842dab488d96d609f4c77a -02e18dd13549d77925abe02fa098e923baaa3c0565028522fd8e7c0cd85e15ab -18f37d4ef871b91a11b2b5de8f5faa21bd9d1d312d923964c2f608708aeb6301 -e31d028eeb41c46369ea39e99d0ace2a3739e5f8db16e86615c56eec5ca95f6f -4195b39efe02a7ea9a6e7941baf8332f224bb9ab9ecb4b0dcbfba8e084ec7279 -24a004938789150a479da66cac3b054d108019b4745b3ad8b87aba19b39d00a6 -104e04eee9b26af64e338bf34d109b12b79fe268ea224a827311479b3a3b527e -40e7e864ae56cec78bc5a487590e0178a8b6fc25654c60404661e09c1f82003e -eaff3a58c0c3730cb34415c85a5a1f18d71b96cbcefe4685609aad50c106edf0 -9cc002ebd9fedff5e401affb0047bad90130e144fbe267234390b70f21d8dd18 -c43340c360bbbac5e15a745ec971d3fc7a07d78d9414e37ab6a1f547d7630c8b -a657883d45e788c499157b37410934f73002f10e6183b696b1034248e449ba93 -9178ce2ae5249d4a4db91adf295fbf3bd72d201e90750a60d9224da50e2644dd -6904b958fee6400b27cef19671c51bdea071c494acfcd1cf8d85bafbe9b2c3a3 -f39d120303ecd5636e6ea61ebc8af0037be2789d8d885953687df1c7207589fc -62441bcb3e7b5fb34092d8f062aaaec579a29d0ee2eec0530eacab19356a0587 -d143aa46fd5f7748859fb088646edc3778ac9f8cde1da8684d62feede0ed12ba -3e4efd2f1f3702edbba6f881e40b91ffe0a10ffe7f52f14bf975509bb43b2516 -e05ec913fbd145e7a6efe70d770fcc43700e9585432f78e3cf0c98a8c68d738a -dec7a4b809014ed76cfb8fd1b12eb02ee8617f94d0f3a3bd273f0675c2371410 -42201b05d1d131af293d460105f728afba25e65d4f8aa3d1959fb4e6166b6ad8 -fc2d6d41f5b1d11143a7fead000e9f46c3a6c2610f013f39205e4dfaacbe7bc9 -dc534ca456f44f95ec4e573ddc053cc124499e20ef2ea5c4989a9fc053b48a87 -aa4618e403cebc2c398af7ecd2d4aadf65363842e27bc5d20f24ea8ed8bfb829 -506d5a1d0739cc7e5716d0581618a1125b87da79e086d52d030603da88493d4c -14d99bfe5a30e955c233d3aa98f4b447aab941f069dff47374825d012b053733 -922c16fcda14aba584899d2766f4b0dfb3b2bc505149aebbe63a9ff68df22cab -1beb9476ec1b69d1f036f3abf79799e6fab6a7fb7fe7f61878642b5a8fcd62d9 -1218e6e52585dfc3321798d4d27b147be6dcffc1bab7c372570c5608e0236f26 -2d9e81d2c11c06e453f40f8453e3a4df34fc0dc124108a9cf176d41f7e2675aa -030d9c9a0c3eee010e2e6b53416b07a07addc43e22aac8a78c89f687fcf10924 -2b8e323b666063e23de1fb405d213567807edc2edf7955f4ce43938afd21eba7 -0239d81517b14c34a320e62ce46f48b10e3b8f0d443cda27717a5a416dcf968e -93ccea00568c42b31dcc857ed537d1c32d4583ccacc21efbc9efd7cfcd22a88d -4594dc9c9cce5c6dbb68a6b6a86568712a79321a3ef48335fdfc2a3937447b89 -d43a2fb9e0ec41085c249c571af59b4822519aa496da159326458b5168d9312c -13ff0b9879a8c96dea99cdd10966071b12f2a3f75ae6b150bbd0e032f7a2393c -6afbc4ffc9acc38afe90606c4f9afb95b5c2aa160539126dbdb2ae9d61e5c4e0 -ce260ba60a5c289eca44c0898637888e1bbaff38a4ce83a342fb92c64ce086a8 -5e6b0048c4282631bf1d6a42dbebc647f77e63429b18cdc8e89b2d0ba8040ba2 -7fc47879bc4eec51e5ea8f4b5628929a0859483cfb2089660cc15ec5d9dc577d -6d69a076ed24e02e80b83f1444a1aaade36129cdd98f91697f0b28d53a56418e -ca65cd49ca8c49863a8f066ddc4ad208dedaf2e54da80f294cb0211a90340771 -aedef1185653f5a2f7925894404a9c12a50b6e8615c2e5f48de9f9270d79c70f -61599223c0a8e822d8c60c56fa46100f85e5ab43fd7dc58b8330563495317ef5 -8219cecbea2f11d8f24ce226b52fe0ac472069eba02e29655c20c272eadcc1c8 -18ca5a0e46eae3a5fe1f050fecaa2485899f8a53f4234baec7c38343552c1577 -10c72838c76b82bc6a323f1d8dc68ac54f8d468da99c828ded907e6f7c1e38cc -bfe55c46ed3c2676335891a0e3f0f3e660435607a996030008f28fdc34ec67da -c93e7062c6b46c6149ebdab9d8378aa7443fad6fa5fa52d76834aa04de524148 -e5db4023e4de3ca44d245b94d6d96b503c14abb03d7c2207f28439cb338120a4 -da8d30c55cc8976c25dc4affa410e8aa3749a6a08b7d37da55d8fe73f95d0b0d -3c6b302a09738b28b703c31c3912646b2b64bb6124ed529748dcd032b4832174 -38c51c3dd591f4651a22f9fb00c91124c84d8717c4313437c014da2e72b62f56 -22ead7a96d0daefe66dddf7cd9d4f77eb17845958bd97249a5896cfdd57c4d8f -24e3ce5dda5629409f881ab5e8498bbd473e61dd7160a5eb6e6b5f47c2e3de09 -3bc622e2d1aa235d4eb341ad4277c1d6261c77bdd27d14e8d0f5a226957906b5 -f6e86f1a72fef7d88a90bd711cec812ef92f08cef71eed903d8924f5493aabdd -94cce69e2d4b04f111c63557f460cff4702b46f2e49195eb4f749dd4fc67070c -e2770be237fc41a300600e8e4363dd2d57da17ebf287fff4b3247673b662c7e1 -eb74033ddbaef52f8a00c406e7b01875a54e2e41b9149cdcf919356aacb0d2b5 -88cbf5fd0088a65b789e51d2a0ac37f1c833d62f022eb47d0580e04932cf332b -b7c6220ef8791981944439bbdd9934007dd5fdac813cefffd522164d16727705 -7078e41788ae6450dde5753f39edc4bc21861024aef6145aafc70d0d3c7c509d -5662ea004699eba1876f6fcfaf1757ee7f580ad9c071ccd3d02bd445a8d2155e -8a1bf1b8663af3102b1fe47a14bf454b789ac0c5dfa3afd8a47c55a7f1590c2c -2f520cc3046555f35bf8a847041d54ef6babd4c91fc786336ead55c3e83bd9b2 -fb4b4a0e84184f0bd7130800760ea587157e08d5a2390f84359dae2b7ff1561d -94d8dbcb34c98db6b45d0a593e2b0cd398e1a96dfa93a7ae8e7774ad57cf2ca8 -1028349f8a5feb9652f811221368bdb34eaae8d5e2e7e16cdb6f64ce04c37ba2 -4589e43481d723051f163789334a5bc087f2796b96d58cef21d82d0372a919b7 -93d782bee7cd8e91e26166f2041e371464ed4cb6a73e08048ff3a596f4689f6a -7b09546d8984ff5931a5ad2c772eb59ba1386af0281de907561423ebbf7fae48 -225a4261359bb445959a50a34d4f6550a582d152a83066f90cd6d99029513b9b -ef7f182b22afc41fdc2824bbee4fe2c53afa59ed68c9c2873aceb7e4354dc0a4 -75c03dc0bfa5697b7327661cd4f1e61471c439365707afa1b73377bca188774d -a8135ce7279ee809f94a5de196b97dd70e89a152c11c57b88ef540ea1c083bfb -3c99faa22248c786e216dbfe8fc6d60b3f7a5e291ff0870c61485a051264e213 -58fc910521db6766bc77721fa8ee503e40efc848be05822ec37f4aef6486cebd -e693d839b7bb902efa75ada15cff2040d1ef45feb81f6f69010ecdcac215f5e5 -f11186cf3dbf369c11275a1874d4d8cda1e17565bf6b7a4f22e5f7452071b3d4 -14a1f17bb32ad088a7751101606c6881e9d2c1d72d88e05410df086d62936262 -5bdb1fc4d48bae24abe9a8c49238a194b009bd7049914897ef28879f14366e1a -9ddf1f3bf2d55eaee7676cdd6fb111eeed0b67dec4ab583f53030cdfaa800a71 -cdcfc5fd361dbca0ae02c754ce8de1a2dd4d19d8d91f338b4f4dade9a5f10f6e -6a0201c2a7a11ffa5bf843881b5fed41f778111cfbaf373806c1fe279a686b32 -a8ea253b2dd83d6af13c5111e1bf990300fb337672df16d47f9b988471775229 -337151a88011d68faa093c4439185ac1d4ab96c945a363cc9b599f1ea0b9a4c6 -6a53a7e5c49cd875f0565a693a5b99b4d70046545549e32e32173d1a33660de7 -a9104dc3cbaac08b6cd22095e7492aeb5ac369cdf9a5fca87d343af87d625d46 -b465d0fde1a5e425f6e6509808a775bf65510d64ba9f1fd4cf83dc244f637c05 -e108512d9ddc088f6fd41a4f4185e664cd906fb33fa0ccc4c3c0ce1d546fde4c -c06919304f2fdb24500aa01a61ba0c365f6ca1b57bec0795850c6bbd3eb63218 -9fd7c118689b7a17793ed9d2165a51d563a96bdd2ac062d0c25e055e13965af5 -c140014d039ee059075a208035a5e9acdaeabc61b08ea51802be6cb592cf1e8b -c276d2ce5f4ac5d914e8f8dbae3799372d0bb33ed94f8077bae807ef69a07758 -d442ffe74d01f6f960b8938140e83f1adffdf4f0f0393e73ed41bb2bf11bab8c -aeabd4f54fca2aa26bd5bc52dd3e4d5c598e3af226deb96c3efc96c479e0db19 -6bf1debfcc4bd8bf05cb0e3dc04be5b445881266b74eac4595198addeb53dc46 -16781a275a481f4768f607346db394fd23eefc63e946a4357e8da64ff14813af -0a06b51e6f9180a48cfe90f3c9b9eaf82823213d605e56359ccd898414fb088f -6a7c483928d5ecb72fd544a8cb46e832b97653efa1629c4890b90e02b9e54ab1 -ae990473adc54d7b687a9c559734574248005dc2f125d7ebe7040eb23f4927b4 -d376768793b666f7acf187b985fa099b8890cb17e211b67ebd09742f06b224ed -96a0c969d8bddf909afb02bb05cc66ac0a5bbc9b80cf09fd19611da7af1ca69b -87179d1def40bbce64ae68a52e41978fff34f91a2b4369f0edfcbb7749b042b0 -d9ac767cd80d57438fe5108b4536b72e6e5e504a6e5b4cf70ffadb19d502bcdb -e7e3e566d1269d0a9631776c4f5c52ec3c98d63f41fa32ef489b5b697e2e4998 -3da756a7791a3a036c258f59bb22ac004c821ade383830f0277cf580fb1e8972 -7c75a27af24910a338df6a4fb373c6622fbf818cd71a5e891d19aa95a0255968 -619f356d84f6b430bfda80012396a2ab3bf91ace171a6b3f6295fcb701f3573c -684f445ee96b38ca3b53db61954b4de9250c487181f548bf9b2a20d62bf61c23 -02769834fc84af37612595d6e57be1c80c38e5b757b99c3c073a490356ce8099 -ed09b5fdb9c9e1d9f9219033d200c9e5b31846f4c14ccaa679b3d7fe2fa688b3 -7229c69c984c5982933f0ef41765b1c1656e4fc98a2086ff68b910391aae365c -1d88447411145f885044a11f3e11110296d9a81793ad31310c1041fc79c337f0 -9d2f073d28ce537934b841c41bf677b24ba9826b6db142f36886f45162ec3679 -fd46d7a7c219182cc2e2760d8d2de2c975ba4d29ef94b65ecdb2bf1a75a8459d -5facd5dae80fef1ffa72b0824165f25e7a47b100e1aaa34192d3f017fe5f11a0 -a9bedea570c9ccf6f8d18f5ab47ec271e5dfe1d4280d24f76b471e2d1dda8313 -4e0d760ff6f5673ae87466ec2e66e7ee5aed7bbdc5ebe9c723ef0e0bb20159c0 -d41ab0a2f609a0066f627fdb132fabdc28d067a4fa8f313421d5096071b17e33 -3311d9e905a42d49d9c6c2e3a09e7afe91fecf4e1ad5e6acc6ad0c91a79d3046 -c9ce741f9b2796f2d021f8494804eccd7e256fab1a8623a014060f0b19b7154d -2aa1e772c9ca5c68b6247987d190cb0043a9d2ca7572bcb43a69503570b2a374 -3930210d268fa1b528ba3a2260e6363df7012857c411dd5e6dadf4286ce805a3 -f03295e3c3db0f81c6e4db5faaac574ee227f7b3c98f4b738c45c9bb39eaa1bd -17812d2cb45fcc54ac785af72420ba310e3267d97bef54c29315eff146b2867c -d300d8f6c0b943e2f206a3d14c9d8a9ab4358cfbcc9cdcfdbb9b2bde4aa8155b -69c929f12179006235dd1af1a906d9769978fd90e21b9e3d2369f21f4b9e78ec -41a67909a2de30cb2bd2c10d2b9a6020acad882d6ff778c4a6223899f1832b52 -a23ed654236c8e09543e2c6afbf03f4c1a150c0ec1563db17931b1304a8248f7 -76fa88792ec90a34d39f885c95af9ea39ee8e93f84a9e66785431a7a99a52bef -d1cfe2b871cbd391e6b3cee6461e42d6837aa46d632dc3c302f07bbf934244f9 -77ce851023a129fed5b480b3bf8321488939288de6d054a55ed01a97a9f6364f -7fec9ef87b9b49b1edbc3fc5e192c6d9aad582d2fb1ef161bc2ca9c421ad5bbe -33bd0828d5228cc9b4caa49632781511789186c3212437e72e4914d5fb17698c -74978dcb5f89b066b8804efad90b3bb8b7246d4943c71d54122c2a36d9f71f87 -c3c898cf272e017ee9e2cfa8a0c224da23a460a96133b13f7821119627b325b9 -bd2fa8f30977d85c690723bcfce51694bfe89439f2c39222bca6dd0c9215cd1d -6b9bdf9f912c470d204d2b7b5717e018e03417181fb10685d9eebe592ce5dd6b -626094a06dec5a89b7795d789519ae31f43763828d6075eb023983ff6fce4e21 -25d516de3b380f04c1f498b846d945a32664b61bab4c28e68ba4037a8e462be6 -8e5622372c5f8d56c2b6c0cac890918ba6995e1b03a4340c9ced6ebc875be611 -1f445f705f78cb117f3396f707d2736be5d32c58d98ba4d4f72a2bf05bd45271 -5f1da83969880e4b580539a3c06d4415e89ab8f17729bec04b961929834c9c2f -05967038a7100bb5812f618a084a8d137d8fba8c414a5a0fca217e8f4fc0e3f7 -0da232421dbe0a2fb47a0d078ee4b3b484356ad7889a942fe6b29b4dda5734c9 -70f668a614cba321a71810550a84678e71f43f845cc47b0f4b82418fdbe34234 -0a28f53cae7f2ac0bffc4a9b4a4448cbc7403594b9c1570d475837bcd6277aa7 -8983daeb3f31442d4a0cec8a41b362402b7ec3afe2cc8c4372db07cab32b44a6 -3a00389f097006b1b1f7187b745a628f60f64124e845e16a8114b1d6402d3898 -158ed0573ca935bfd23bad60da9c6fbc0b10117dd56304cb58f81de3fa0feace -1957bacedced8e8f626752cd755f067bcabfd234d4f551c684524a711a691fa5 -3be61de5319436e86688ef0f0b23fb1a8ade3a78a1348acdb47ca5c327305555 -156c24acc760602f133116649bcc5a413bf919a083c2dba88306dafa66f73382 -50ab5e70ffd8e298883c620d3a37a1dd532c193f7976051e8e2da980d5603ef4 -8bc2518775ff39b5390cb7994be69973e3fceea2a99046cca5d72a5a2e9fce56 -d1f5f31f9d05f4e95de8349a6645e936ce02825f55785d110c3843399c726129 -d7ef56bc39b65f4fe6bdadab905206bd305f034e6e64489b7d97da2d9831c988 -8a94cfa8ad0c0130154033bf82287160ad0340938a78cfa27aa291bf4c0a4b09 -1db4f3322e3f76e556fb16afafb55d9f90c0749636e71511102d3d2cc091e8a9 -bb0ab55707cd2fedca6151d279ca75d90940b3f8ccbff65982143af38d17090f -02f8d5b6b25e1c49ba918cb6f3f2b9befeb404f150e593162ab14e277ee0ccc8 -3fde67c7778195b795519556db688e4f76a9045e029886f60db89fecca97fc9c -23fa3c0ca5fefb0de6a923c715e90b8360b85a51dde11776fbc01323b578ef6d -86b76123e3c41a2e9e8470034c64783072e549ce2949d5c2bf6b0d42836a60ab -2b51621b608b2e22c16e6fd23a3288c8f721430b22043cf3b48a1c8a74e84aa3 -7a06514ad9f9a697328571e506d49ed1a7e1cdad6e1e9f3f41a99f84ed060d85 -41f56e88cbca3267e0d496857c103fca42fa3d4118396d494c82250c0273e939 -94a09f812dafa45efaaaa6194a234ee39eee66882798bfc41d24cc303f58a445 -5733943c10c0c10f6776b663d0f59286e2a127a906e8d7b2d55654b15bf58016 -0af11f67c20968d2b13139456385cf84430a425dfc6a48066a59f6a91ef3cf15 -b3c8e068b91892ac2218add4ddd8d201579d6ccf3664294bee67d3bbd0b2804c -5165e37d567a70de26860b8c13e90d280b0a79776ee6fe064343b1350094cf41 -a5dd65ae40fa25a4a579bd9fb74f47114cce0c04e6c7f6b044fba8509f456b57 -81142522088226d82a95cc38a8823092bd3d113a61f6439fd78f70d781b0193c -773a4c5810cd352d2febf25ec138f5af2e5ac51b4adb09fdbe4ea683922032ce -1b202d30876a59a3c0009139b87b6cf0c37ca07e0d585435986fe85a9bdf2743 -da27b85d5d1a37de840d7fc2e5d92609d65bab8192f88b758a6c631df196980c -2fdd706a2d8c28011699e7498aa1c14e47a7a2cbd54312a6c5943ac0a9a3f163 -47eb0d6a10f5ad603c080d9faf3571cd2335fe4d1c92c7315adc25f639a4f0ea -609e73035bc24bb5d44371f19a7fe7c497be059904606007ad153b59c64bcdba -e3a613c2787010cdc081df84ad9a44495d78f6440c9a7bc7395d04d776169c7f -1ef0b7621e2b440a8c533ee3660d35acc3b482d20b3515457173bbe7faa9751d -f1ab67fe48753834da25917b746ee6d2e30ec6062221241283d8c34787455db4 -541a04752313bf45c844a9ad0a29ae66356f4bef8fdec5741c19c0d2d7bdc699 -ccda2af082f28202f443a789e9b40bd6491e777a49a4be285d5f985583c502b1 -b2d9568e493bcc1498a90589e5981323234426e5769180d74a5bbe4358492875 -337845eea1381ac1be58745711667874a65ef86e367bf298a27b60319179294b -d2138bab5125b6171150ea426a6158164fd3390cb51f1fbdc930a2c1ff6dc802 -cfbfe3c6b6e34f8138a0880a098992b2824ffeb149d5b136543b326d30520063 -42f2a60e79e576769de0e65da6f65c88ce9fe8d7869b1687d0912c518d1da5e0 -5d4aae80fe32d8f25aeaaf53865e022590056983221fb8966bcf4ecabcc6df19 -8f03ef373007e80e224e1a45e03b957d39fdcbdefe916b32f9afc8a48c91b647 -6ef437aa7768588068977c97892eb1d4b5d1c9c9d49b6ed7e0573345ef971304 -119f725e0f88fc8794b0c9cc35c925e4db50726d82d4788bbf8bca83ec533f2e -7c19d7b153bf2d4cef8d5c7f46ed2f1b1a6ebc7f547a7ca5289a1fb0c7ea14a7 -34dfffd1543702cbb4b2b67e8cca16e54f971d115aae21019cae5e9b24defff9 -a7d4b50a44aa37015d68f3064f9c3185ec444cfa3af32aaaac7f4e6b2f71f7df -02ba34a4d51e2886a2517ce0b21ee84b1f877852b3d5932840c14d523576777a -114d80f83c8b730eb41447bf168c3a2d259851f545fdc15c5812c58c79c8cdd3 -f8e9eca6e2a41b53557beda8f889df48884d521add83e65e7ce4025c5187419f -cce51c7ee43dd66baf2409b4bcae3a94ad2d99227be325ab135c9b38a8a0bca6 -3bbd58e7f7b0d438e8b01e441786d8a5faa23f6b957dee7c01e2172b09c7fcdb -cebeb62ede3a36b13a3932a81f512c6ca6f69413a83ee30efb5513d2b5a6d15a -ed4eb95338d01879109e113515553402c994f32ec590e11f4c0845a6729bbb71 -de7d4893839da80f1d1200a2ea5ded805b3f8b8e4209fc74a16733993e910e8c -08c3aafa543c04d9ca3947cdba12a285466ae3cfeadb0cef83286da68a806e56 -62ec73ce7913223adf0c88deabfc3c5852ebec0b67c72a00650314724cf38bf1 -eb463820e829bce660104921f069bfadfe4e3454e9d6342abd2b8c5bef56f385 -f63c2e0d095687f04a2bde230fbc1beb95a19bc3ccb0e454967260b13313ac23 -048e48979aa0e379903fc3307a97aaa6933519318a68dde5bec8370956b11b07 -46a09198235e6a5d3a21ff337be92d5f291606cd3505ff41dfecef31c4d5804d -3f361277028148653bfe090a8a9322d797c2f7c094b7e302a7cb7d0a6aef8533 -4db7dc06c846cef50a24d5a463f461c23b24b171f964f4733c1c249401e791f5 -088b0eae5cf16bfb79d5dac5532a7814aea77e35c072e6b69e50fb18445a6130 -2b19b60969afdec3edbb0b66b914c3973d1836faf2ea01c65d75401a57bef394 -8de682b7edd50be4b7a946ade2f5221d6cfc4b00e94ac2b390067f2dc92161c1 -d73f7e580de3063d112fa8f27cd5d6d37ade4149ec5f8b8c3c9d88d13c235a7e -bd04cf1a2fafe65da20b949322b50dc78a485119775de3e5ee70ef714d598c27 -0b82d4e73697111d0fecc9552d8f5caa3439b7a52f5f445b27bba45c3606ac01 -0666c4bc2a39af44107750ac6bf3a8005dfa3248413d98b000bf5e55c3188ade -5287349a01041067cce0f841d6c2f828248fb96e6ffd770789c72369cf05a9dc -831e7b1b2c01bad69d465e83af7b3c291cc74fc5ca2e69c2060eac386abac347 -5d56028547656815f50f46a251020ff63ca64dc1fbeda490493a55b285d1407f -3cd803fb15906baf8bff8aef2eec3a738fa9c011ceb51805ec77ca1a4e8434f0 -9fb36b45e8d95afa830e6ce6ab350a4ca06c463444d4184b681df11e04e733d2 -9dffa1a3a68c502a29e05be5206c5d31c3f260f56b5f88901fb0aa8d7dfaa992 -4045686222cece6a868b664a533571b19fc3e1e69397f3d9d0a8bfa4b3df5a6d -40a52946b8bed057167e3c3ad3ee2305d7af4a16696b00bf5463e8fb76892a34 -8618ec3d153b3878c8bd72c21ab2c90ec88993b855e19bb7ca23e454415e9977 -3def574125029a9cf24540c6f61ae73ca96739ba838f1938627499014708f2e4 -1a00d397e7c67c74436dfbab39869975b9ad748b90abdbaaef6744b796696c19 -5b8b2d0651b163bca5a1a5b6188a29024ca97449dfc87a99ffa00f05c68c3906 -b2588be6003f1f35d16d2e4f52185b87a0195f64cce629f9ae188c4f21936b48 -01a34c69b570b67b4ab176b30f23e28f40b25da9d5f8b30d147c19dfdb1c5f3d -a8ab8fdd2c22d629fbea477afdb3c230f8488b6d24791f76a53ff2c21daf7ea9 -08ff9fccf55f0712fe16bf836032f104eb2c454cb4e2a3bc93493f40f9dc0c02 -c121cc50ec16ae11128b8f43202622a4eba117753eb656fec0e702fd1f680ce9 -1865b792896d48aef87f5bdfe71429e5963c74a77b24a036cade70ed655b4271 -2b5ba33ef9166444840df7a1e3b0f6c5675994239840ffa04dd8f4cc8b47d694 -e6d6d601d775c19bf504ee8ebacbee258841aee1dbdadb64cce7c026897a3ffd -e77b3e0043af31eb442ef7ed53dfcc969b726eff1f8a43c13c13131c6532ae0d -9e8703618ed8af07ca8468aefd047658ed08d6f647fa2809cbfd58519adfd791 -3f970d65a3f97f63152d9dbe9af502a2b6f012d2a81e32f8d8cffbd56e63a9b9 -e49a301b2c3699706088f94e7a3f11c7fbd215cfa8fcf44892fbe4f50062bf95 -38fbcacca34099f0370de74576d768f1f199c1457bda68473729f390543aeead -c9be3985cb5cb4e01febbfba7021d69b9d038a326a76fbd1aa2becd26f7979e5 -bfac785b8dbcd84cdc90993b553b694449c98ae3aaa0d1fc59953dd57598fc9e -2062cfe07d482e20f23e1b6b8f397b797656f38116853178b7b1fd8a78fb7071 -c433fbbd9ebe90897f52651aefeda189f61069f96d195ecc93692c417c9778f4 -0b23525ce5a0f6d29bdadd0abd029089b9c255201d7d829d12e138538dad4108 -1826ce5a43d78ec57f641000d191c9631106268f64ac7f4946fb8ca5599aa3a5 -017d03a837ed1c765bdfa4780f3375d95041526cb137250a0af36b9f9d055fb1 -98fa33d374baf553aa3bdccb1f4eff10f972228355144c7709a6cb45052ce6e2 -bc667623b47c220498a25caceb28dcabaee4ccfced7aa6c14b586a2e1c60a9d5 -4f4313885970d4f824c9807375d8a1b70c7b5fbc36eae7affc902c89e394a2c8 -39dc7e4d0c7faad918c768214e16a3e3b38e3a3bb382bce607968c8c970a7bd5 -91c6d5bf50341ea777a3d64538875fd65a714c881e73818c61a567d1ff2e4d78 -0b2851ec0a9abe877f26dc9b7269cea5585ee3997eb314a370724caca582830c -f1e1cb6e517528360930a1b81735adcf20d43511249f520bbacc0d94f7449d60 -b62c90d220e1b2f9afc749b9178829b5140c5471074b074b42ec5c28e600e8c3 -b596461665b2fa699f33ab8eefbb7932d383814a402748183cc59289b27f19bc -ac8b64cedee4bb5bdca401e1714cdfcc9c0329d35939a76229b77f629fea9551 -ce87384ab083011c4bfc8d5e3a1367b48ae5a964785b34827aa72c7b6bb4e8b0 -3c6990b6fa4060dd7bd1eca5e2b6efe3c8d9915940525d6d70ff2b2c8fe45128 -22d4cbd4490ea070ba7b8688aca9ad168394170b7169979d7c223fd1c67c02b8 -df0aca0cc03331885c384c8a573770e5ac87b01bbbb8ced847f7a4d68e5e655f -ea4920b32bdb79d3d7099d942f07c18b7829b1ec7d68d187c550081a4831ea95 -c3333e213aea8f45dc8aa8a5b7d925e05979cd2b0da0560be2367b9d1fc368e1 -837cfd77bece8538b26b9306e054fd86cddb668e58e487a772f89138c00cf8a8 -62b913e9ef8be9fb90cec90bd6a74c4e96f55b3a73be8f223eec41958313dd0c -b0094305eb85730ba87f6827d6a5238727030123fdf6566581105d0645454553 -0cdcb5069c9f1ced3cebb1f5944e44979f17bca52400c98932e6391d5cdfccfc -da6df93f86b6da1832f83683fbd0ff6b47ad7f2734fa4243520ed9da9521e922 -9fd4d1961d36f1fe1f0fff958d4a12caadb6de73b54ffc64d72c089090af3fd6 -24a712e60c9d7c95c030827d1da39227d5e6537f01e149f084451c7b1799dfdd -ec0fb4d8b3655240ee03ae14b08c1947da7a66465d5accc205e0d4c3a25ae300 -2a1f991a5efb7f592260e6576a26d168c568deb32919a5f47325044e7ea0959c -bc65907b731957685aae01d3fef2d9f87b3ab44cbdf72f161ce92240734b3018 -ca6c963aa5b29402b5f12d539672c4ea7bc1c66ab6104625d97f41e65abbedc7 -5d3df3802f9c2101b4cd6fc7e559873b88e8dd54309c8f53dd2d6cedf292b366 -2fffd38681bdc5936dfec644cf6b7a7e415bfd7fb9de469266927e5b82ef3e7f -011aa4d70ca53c6e71e460a7be3fa42d9307ffa701ebe91baa7875816e1901a8 -15e3ba35c3b4cb00a6c87b98eed8d8095740ec71d3c00f8b578daa88b3f33dcf -5bb6635f1b2ea62eb9abe181dff47374824dfefcafeab400020191e74671a097 -91a6757c880d4dd5a7e3da51241876415d9f70c689c804b6e9ab5b2b87f332b7 -c0e2c3bf5b2246ef438ed81ff8f7808859632ee8fa4458eae295eeeb9cfc7b03 -0c0b906d4805f9d33a39a3dea89ff2eb56db4c254579c92ee37286385a5c67e2 -0a1399a73ad6921b46082428bd84de18cf92fc9f8058b7bb3c193a4a50b34403 -358600d3d3251a543a6bd9ad3c5db4138dc043876387bc1f55d919fb8c35cc11 -cd707aa89a7618ff67f427c74998a6e75a84f261a2030710ce94325020dd8814 -91384f4c83ea17fbb58f73630613552a6e9a905a98206c8adc56b67419f996d4 -1da159cf2d8695507ee04fb958ef554e30d482cd8f214478062d4fa026f86b13 -3dbeb81c957e43ae99142d2b9eee13712878f5ade9912228bea38b1d42a835f6 -45f056ab9b40681d736ba72a9b4b5ce2743e92931676d8556000d32d259e163f -ac90b30944a2cf1c52a236b4d71a1b2c0c8d45fcbfe447c732b9efa9d3e103c0 -381211c00da6df127d5f57aae449b9699466cb369b996898306722d85f8c24de -e5ec2018a7a4042b07178fd55632305cd5bcc0467dfbcd5ecdbfc9e494dd5a65 -8327ef45f0ee3d232622646f56d7764398dd5d01e92f5aa4fbb11d95cfa277d8 -1c0d5a15007cde0aebd5436103be6833beac9fca1eba100724eff0924dbf1569 -97f7c080f05ba7eb68e201f6bbea8541a94973855b800cdb7ef6079de238b758 -e465e27c2efa56dc98ed8e4c2861e2ec8df3f2e919678ba369890d15b8002fc3 -546a3ff1def38e2694941a702ae77e16fa2e55442de9248110a8739e58cf4b76 -664897bbbe30c2b6d172b2604da84c60746a7339c7971a83d516ea4302785c02 -e508a35efeec0b61a42caba94b28bec74f53e66a9a54bbef4ea1171472e34bd1 -dd2072f460b24283c8217d6bdf8ab34210c08cba89a7d761df442ca147effc4b -4c041cac1774eca35d106b2026d71615b4279207039ecc03b0404dcaaa7d61e9 -d18ef74eb9bdc614225238ec4ba8ae417be9a6386ad0327dcefeb5a25412bf36 -e6ece299be240192d182508a51c1c1ec7ff65096f0f6219f25b8d07d67aaa3ef -d4bb00475135483905e87aadb826a889cfe5fd3af57466b0cbcb91c397cfb9ac -f17bf93c4bd1547c6b196cee7741726321a55aadd02e6677872f6685af9d0030 -f1c331a926b9c42ea8b6832bca8ac9c607a73b527da6c9a2fbd289d781dfb35d -7c5a053f8f91248f1c3ffd96a1a5813ceade13599db1b3ce32f5bc57f0335693 -c8d4c405b6f9a956e704e6e99163ef2f0b6787f0bff18623dbc1158e34006608 -70434bcc19164b41d499feb2b26fbbbe4020728e4882a6a123a8d78bd1f298d0 -5249ad33d6111b4a9c6f3ed2fc7b5a552b79af79a0ff935775823729936d3083 -b7b93a0b15ddcd84581e28b75451682eb6bf9d3c8ace9b275a510cd6561058a8 -8406173d4128c3cc60170d911246294f6c6f8e71a8de8c587e84d44b78e8ee6d -b68a4e4dcb14d73b6d3b35f2d8c3aaddcd0967e570516ed9387382f78e741c05 -1093aa322dd6b0a42cdaa10e510ae3905d0542513d348ed98c4c9e01e0505f52 -2ee0b4658e51a433252f9d10cc18232783d58f88997634ecbf89a2124a89754a -56a4b88de81815b3a17fa42e5b229f80aae7b8559459a773d408141928619cf0 -f56cee08f05f8748a201573013e41c6f6bfbfd740759e512a1e48cc4da24da1f -aa24672d4164234b31c631da10260e2e9e788bc2289501b083e926d63152b46e -6821383d6065e28d61d7a6b57b7d9859289dd3a2327d3251ff65c72ba121d0bc -81b726e38ec1a2e9f2abd4827a6ff5d19f3b58ab955a609a97f221fbf793aead -e245e3164f2824210a5b97912b0a71694c3cafbf60e0af983b31ae30b4b9a41a -aae396d6433db119aaa6a174e02941a4209e3a7ec58581701021c3af19b12925 -4e16cfcbc2977089ec85258501494eeee8e21a4729fdab90efb334fd2ae0300f -ee893650e27238444c5a8c0511712d6c00afaa55b83a258a691177384a7f2d7e -17da838132d47c18a528098888bb160762d1d93660de8de402282c4df7492ce8 -920d1ac9e9886e4d9a1302739890fe2c95eb37f9dfe73ac4fc51c4b0dcb1ef45 -d1dba50df66f32c1b2e03e2bbdf0b151424eb2a5479dc085a84ff7940ecd5651 -7480a4e7653edccf6a147d8af6da9977aa7871708f6dbc0125ed0e4eb6a2aba3 -656018e05f90831ec7d00a9fded05da231c00b95779b0cb9780d9fe96b1dbbd2 -291d7eed562204c11393602fd2d90ddc31d438b420720b5e19a7a760773107b7 -8e2c1aa72e2e1fc16ea9474e7167ae6be661e6d0f37f3beab24d3f9ccace3dad -be68fe29e086a62b2882eed800451f432db02614da4d1b7440d2c8aead012aac -e32f90080f444b368755d49dc24b05e0c48ef3fdf57fd112166685773c138ee2 -36cee78ae6d93130e97e8e633688ceada23fe3aef575af02d5bd3c2c5bdbfae0 -7c83cb2710fab57f4fbbf57a8be81415c1abe8b6318db53dcb71e8850511af89 -4d43b842cae1e9b4f3db6304d45d99fdb452ebf0ca76c1d7592f1c9eac61f785 -c775c0cd72c883b0088cc2cea72367337a0af42b233da8324b02b660cebe5970 -ca1858217a3d140556d5894be895249f04a2fe9a03cd39eea05ddcfa0c757fe5 -0122410c80274e6fabeeec6c0f8181718ee6e673229a0a0ac2cb4414da14c4d8 -757e44d32207fa9f01cb6a4f04a6a67c38b219d1425dede228ba157b4d1ef96b -e16bdb889e8c9527a0fc4cdb2fd6aca296d7c06daf3f259f0ad74fd806c047ff -0250339e1c1d650d8867ef37c6c42cf7f930fa6027445692ed00f0be90a79ada -9de99a986f81117165404bc82cd33a64c1778eefaa123c3581454a8334ec0529 -4cee91dc0226be0dd6e8a229199a069ed36d5b76ec66fcf363d749ce886fcfad -d6cb008f76f0298be337c8eef13a24ef7c3d774010e2e4a7acc429d8c0da7a32 -f8bb44aa9389d4f594be75a2f764f9cdab9011a3c65a3555a9509f81c27dd091 -221ea30ec6ed8449368a5d4ffd302fe809f3ce67f4738e96ad29d93e265921ce -45622608522273b64bc36454a7a2d3ebd334aa8acf9e4d4ffa863ec25819e7ab -2ed613933fc57a4afbd0811d4829d2bd9802885735ccfb251ef38766b436deb5 -359278fc0067aa17cb27310c52cb5ac59802aab49029ecda9dd1e02696d4fd20 -75becc63dca6908d1ff00efce86d5ee281baa70f62e3738ae4f054bc027829f0 -5a57e15b9326df9fc56ff8c040daa752a0399db4d265f221103192fca2b3c88b -a6d90659c0d85556e58c473dcf3a1f851b4a1c96cbb48971e1cbcadbde7b6799 -ed6b2d77eac67a7776eb7c571f6dc43ce0697f4392e75978b289965920cf17a0 -d78aeec7c733c885ee89ab9061094d0d01022bef4839951faf991876c26e5e42 -9eb7e5a57de0da10b61ce825a06d33df1989ef3a93b83130219f933ce36e4b0d -1f626265306898140b6d6f4e4a253cc3c6e27304b975767a38127a0b8d906f60 -53d097e7a588648e71fff1fd9415ac7d7141abfb33086171868fde663f6a0aec -ac7c8f8e8cadf5827ce72fd49d319ca5985cbd50341c30967084b5428cb488c4 -859b000c3f0cd1019267d9ac317e02cfd4f7d4480309e7f6850bce35c850155e -7cb5f93160d33fafb4383ad3924d0d665647865b5b9835519ce1ae14cd4d26a9 -c46f889407d0d984d2a3e63cf6aca920262df305ed31d3d1a965c20422fa870c -d860c3ec7d3b5966678c238c0e4f69daaca76fc006201072facd2873aa30db95 -626cf97cd33eb47950b2b831040be0691f451765f57824ff493c3d06133744c2 -9fbea2172f3097881cf406da9cccef1b6be9ada1909886ad58edb99228972dd4 -240898cd356432c333673b8902ae243686912f45ee6bde468bd3e8b09448ec5f -00d7a9213628fd6743f0cb028707ffe5e5b8a8a24e83c3750d68c0e465b820b6 -30d209d39da1f548eb22aa88609136aabfd98026bdc4582bcbe7cbc50deabf90 -49d4737e44f1f899062386edfecd5dded3a743db71a61ebd8a81ffda6470612f -7cdf827924bb4e7e75e6c91dde90e698b319d6fe6fd982955eb99424e0f26aa9 -3acf642ee1c9ffcebbdcb6102f9ba206238cfc64d68036129817a65a175327fc -f34c379fa002c5a2b9112d5b9064ecd77912987e28883259a6ec9f2c2741a84a -03830b31693492ea5286ee18a52af05b41a6c379b6c850b5cb4d31f60a6e519e -981c22680db193fb72d365f0260abf3389832ab1d78759c1482eb1ffae6d8c4f -20676bac1407720c6d3cb33d0b19106c6f3059afa85f3c782918708dbf809228 -81552754d6fa2c7ab482e703d664aa495805292274adcd64e7696a5d096ee928 -9e350c8294d7a1645354674e66213f18553a72fbeb7fca3647ebb5828f5a452e -03941d4cb822ef0839254516c2e6fa668006bee04122ab89d1e958b57b98f0e8 -ef8839dda01dd884e0bca9cecd0a9d6a037f5731c7048b488f8e972884904692 -c0a558358d736a25b7eeaf608f9c85ce45bfb13fdb0011164c50f82513f8fa5f -0a53330cfa24ca4c59c50813974c2307480a47c25044b2bd1360df7c82f2f482 -9fdcd0581ae31fdae1e36d59ed2a6b8cdc97f005d32333e27d1dd49444176a4c -71887d2757d1034f27dc74793ddcdb0d97806e9e16328509c760801174dced00 -316084e04d488626ca71a824c2e1f36c7b325a3f1446b21d465b8870f7a6b05c -ec4c2a996db293a754d49a6ec448b31cbcafe353209ead320bc8d963432888ef -1ccfc29e46c0c7c8e2849ffb6bb680f5016670b639bb411a399c63371fd36c6b -079077160bd539d0f253eb437d3c3f8bd522a05632db51872cc2b74cf505da34 -eda8b3039e636f2b8e9dd82951380a5e5e8bc776e996e50938b8f9c5a470f366 -e26e719646a3cf2e362a95f8ff6776cf5edbda555846f284c75874399d211240 -33cc43062237e479d024a7c34c6310b81f3a299a148c0510b78ef9d01a2c0db6 -151c80d7978a93409e2c7e01417bd898fc2d091a4f258e777f5c18dfc432cff3 -7a13005c10deba3b25411d93b6426cf9c1e25d3eaed39f8f7d1c17f8ff23bc9f -47dd0674ce0ffd60e12c1d406587cf6ecc678220fcba0ed870e0be75768362c1 -2b8158c19cc70560a058e53b83b19560ecf18d0acb4316b7061a9d9dac63fa9d -ee3a0da5f7cbc2addf7ae5310aa833ea1f45b97e7698558f73f952baf03ec25c -ae370256a1f81578d360814dcf29b12764f88ceb7ec3358e923f781bfa4f632f -de9414f7b98ea0b063536770f3fb4ecec21a68caed7fc7c85b9abf613b94ea8b -94f49a2c22e23233d65d4d16e4e6cf2c317da20e8f2307d4b4c654ca9d215479 -9cb625b53cb49947961f81ed2ca5fdb4d64f97edec759265788cfc48333de518 -fa274828bdc27394e4a0888925d2d9270716c89f82c2bc569be497f7ce930924 -b4f16ceca99254efc0965a3eabd78da5a16cd9f8d581cb7106ec2e9058b2c9b6 -7550555c837e57fcb453174208c072f26c717b88ef55bc13bc3188e8f768aa6d -11026d3b69f0628cdca2c2155df354f24d2af4c9941b0172acd73cf9c7f973a5 -394aebd41728178dbcd55e73a998df39cfb66a287c0288e8e0e0816ce5ec98a6 -804b2d1ce83f2e31a17d32d47033ed9549b0b0119df7e2736bc89a21ff725695 -018ff19d096d87e8b310b9c0884d4f8fedfb889538c9911d4e3fd53aa570492c -98a5f5a822886c60b8b2a72e775d33d0509a4b63e016cff3b2c767a6d39143ba -995cdd4aa4a8c4de041c27343cd57715fbb6d48a46238c18d79ecbb2548c0374 -b9af808dcdbab805c520b63b30aa66a4cdae35e4b71b45c3a2db55c34c2aa879 -29218f60b74af83e44b1ab43906a3a54a34d85891573c594d3ae52fcb548d177 -296b52fe2253195f97c568894e8678583165010db416012acfe3083431175563 -6d1dc919105faa02f9ca5878a719aa7f0719a4ea81ce7bbc5c2af1ce73a5b403 -c12ddffcb317a401a4e12e3a3168a04ed036f04b973093605d8d4a9be6bd4cf8 -6a8b57b37633a1fe2791b281f40c018bb53ca08a467735377ddecdcedb939d8a -38f757b77970cbf6f174b6a6c60da653e3e3366ad55890e78f61d293c4f96e4f -f03dd48b2b23f06b3dcedce3c624eae1497e5d65eaf1723447d2f0ece09c8f60 -df0976b17c95dd43edb503237218d7a36346d08b285ed0f288fffe09ddb03cb8 -d2d76449dd1d40db1d11992055f5494f9b8137e4c918a33446a616f12f5e0683 -a4979daa9b97d3acb1fdac75242e1c3f2bad66e3dc8a9203333e48376a6ee721 -a86b34087389370ce971a7057d608e93eb4d7989f487c874418fe9a58bedad1b -622192bd5f8e012b1d1942a6d65bff9cf5af14cd6e4cced7379a77cad8221dd4 -06adf2beaf7b32155da0b6b22a92adaa95d206ecf5a7704c4760d14d70b7c268 -4812a0ea07f20c02a797cecd44bc22e147df1c10d51c221e0c2161633616da82 -53ab9a727305515f5e287f7ec56f540f1e7e7d9142811123b84df2cfe7124789 -447d50bfafffde6ee2d7f206996b2fc896978a06628c983f5e33335b20a20fe1 -a71f01634e917ebd7996da19287755e9f9eaa0efdd7a12934da4849121e0f52b -da07c25468a7cc24e792f5d8b37443a72e2e50c655bd80a7badd47e4fffabc67 -7d7c4190824f88b63c0606e93ec889184c70e88f92dc556e7e71239bbd733af3 -0d781cd85b03ff796bfcc24e7ace070db05149982338665b57ada0e7c2b80d27 -a64bbf46940f28865292f05f249a1b0d3891efcd184f32f85bd96a2623c5329c -c59686103b6593dcf33a6b77e263167dca4a067874724d57efe3786f97349854 -809d3c8ddfd04d3942877f5def5aa3fb5d8be234abe999704cc133dcb3fdaf1e -889f6d43cd4fc7fb570460f7ae4c3b2de650b6d9e8caf3c6a338394a68bae1b8 -ab46be4452b9709240803db075bcaf0a5c36008ca4d8080cbae6adf1de652b8a -72d6f9b1bd1628eddab2c1b1f28bb144f9cf7fa7f86613b5b0e13d3f870954d7 -6e358c7841733c90d28f8ca3b045bb494392d36a1b2c9da9fa354c0909fabe20 -b9335158f0258d231301e9ae5a2217e566b520bc87583a5d67d5b1b9b0a999d3 -dbb824d88fc6510e065329ebdeeb33e7e7ee38ab4c9afcf46b089f6489287a22 -59a1137f6f31978958e1c425c2b8aa54e8808d12fda962c912c44092646d2fc3 -cee8190baaa232d539f9b453aa07d1e0527e6493d97b970017bec1413409110d -3709d1a7faa79f1f07757be5d05718b09cf1fd0fab0a442ca9d14483d95767d8 -d8538f13c198e4072c332b3e0002a3a77c014a1682a5b113eeb65155e5a0b464 -1fb6d589313a2e56709e1be53e8acff66fb138e8f18bcc6b684457c16aca8a02 -d063a19b8b2849205dc873ff1febbccd7778f5948e8f974d85f74ee9845716b7 -d431708eb918eff9ab80be8ccae06fa58caa0c57f6c3b0c4f24fb07aaf81da87 -e12ddb61435e564ecb3b74759374e8e08d98c011bfccfc824f1a7d9df9d83fb2 -cb3a4136415297410035b6c824bcfd9b01f7d6f19f065bfba1eee8d560045dd2 -c552badbfd6b03ba6293d12b01985eb156c61033bbfd2553c4f96a77559061c5 -8e9e0d7737316fc1a1b4fadfc662ef1caf4aec6c2231d50cd7583f94af423b18 -ab4b9dbff979c200181921d84a63e4e722bcba97e42f78170f9441d0001dc280 -451cdc1104dcbb65df237553e3baeee3c69153ced25001e6fb970e6072ac27c0 -fb99138c0c63a107c9ee8e9fe1de42e534180dd9ab1a5c2d4f4a5cfd47711c73 -f55ca3cbd2e074c1ba4700ba73d237113e9f1908836c5a334c157b903113a9d3 -5ddb5608d0efcd863b973fc55017d106e68bc4fba6eb3129259854d59da2b47f -e82b837e5c9b44ef7f279c0f6c0ffaceb7f48a72245216e5ce316a09983455a5 -089114d310a111a4b11da77a68c5e965265504cffefded03b1dcde16d3c3f940 -ebee6cea1616cf132b0658baf0bae5d3cd6043a8bb2f071df65f1e5f16eb0e7f -84411556a2a7e5fcdf6b692c3dbb9d9fb6c063a2ff8eadde118501b4edb0e647 -324860b5a4402ebee015b663eb8ea6fcc0ea91b97eea89545ae93c5e3cd5548f -c83f754e3ce0ca0703c2a0f35e0343d137a499aba617f83d46c7b7c0597fa84e -1e544dd77afd9cc36558449edd033fd4e7dbeb57071cf624c109ed1ebaad04c3 -15eef5bb0b004895834dbf6b867198688c9b4117909aef484930e8a31602452f -c799fbebacbe7b75d1ac37f6afc8c32313db3c8e4d64ee504632c76654e984a3 -882762b78b8791e6e46e974ddbf7ab4d048076aded03b6071f373aab006e89d3 -87dc28db2580559d957e2a1626b1b936a869da79be30d451f42e583f0d9feb53 -14a59195da976d1b6f42472a9cd34834e3cc6656cfed7a4f56a00f721967c384 -d664d6a48781058652094ebd87350c6a3a4692526053edc59963e0c5623d1df4 -0a0579224fccfc98730df4e1e0ba9b258bbbbe9d2b4c1db9c33e2a4311080da6 -bab0e4044ace3f56fb92c99e3cd0229c4cd9c1cc03c1f1ee32e772ba7cddeb6f -4057a68a458414611bc2eb218d824189818cb4a95cde2fb9a6700d412b3503f9 -8ddba098f014da81df3344748d1229fbf801c1e2316d95ed9559ea16c898ce9f -64f4e41fc35748e1efc299c26dc3b42c26123c330b9c8cb7e001da5de642e6fa -c44c19f97b20e47ecaa5263bee98690f122326556c5cb69e9a21286c3e462332 -e10721f7747d3425cc204d4b4f514501e14840aae43fb523b89e8b2abebea979 -c6762a89e4546531afff98c36cd30a38d13fc19116873917684fd3043c3446f3 -7c6c5a36ed36eb3900bcda089778c671d6711ccb2f7a7373aa6f519b27e7ac73 -581ea404ef17adf8c92a1f8e9edeb0201b3a48866584806e667d7eabc955e19c -2abfd1bff1f71289b2d8f694937e965bcfd6de56844f0e5fc980efc777f50f18 -9cf4b2d7c0fed84513f215845aff1bf3e4250aec7d7c19158978110a81d73f44 -92da75ed640441da004cce30d28826514e409baf6d41f7661c4668016d9fa019 -380a21444e969a6aeb6ad3cb2341d0287e2782a409675295227fa2ade601e1ee -33dadbbaed9ea5f0715a88f5390868706ae6b5ec4473c15e65ff58e9c8117106 -c83ca1b91001e741eca076cf0cda6d9e44de4f8dc762175f422e12382dec63df -164388ffb614abd40924ff4f6ed0e57cb451b320136c34ad9e3462ad884e4472 -7fe5f7d5c6e55997355cfcdf375f3ceb4913f23d7873731d77435e78deb10d07 -d0afc29c261ab66f2b5d1ebebf36e96b536218e85de4211b5be3bfbbf0c359ff -3207f6d35ee4738be6233e4fab21002039fe208f10fdde73d0ed01e117a69c8e -056a048757242b698bc4567f0684c8437d5d391fe2d95ca241f09d573654fe1c -cf138ac60ffbdbeb15f975f8b1fa3dff83f552e27844ae3f44c4a874feb1ba98 -5237293ef7cd143d83dd6ba9cd08cd0dfd63d3cf8b5536dc9d65ea582b2b5a1e -852778730e3a0ef6853d3126dd7ab94bc3cb8c41f60c82aac4d82223296fecfa -e01714eee59cc4f75ca5bc0eb875f8a4c9a6d499c9a7e1cc470987404dc820bb -c610db9470c0153995c2ac7cfdd334174b91923efcf4de1f3543d1e9971dac29 -a6a67169daf36b910780d691201638783401bd49010122d7456c7d8c1d301fc3 -243103d48e9fda5982b07f7300315a1abd3c84d7aa3088f00214f8c2b4ade1dc -d82061a23adb2d2112efdfc648dfb995ea7da854793df6cd6b3d6ed7a1120832 -220c9e43f05ba4af43913c5bf74c1d3340d4e11ab7d68f6e4b9f785034b64321 -1a1ff2fa676fd0cc367605ee99f1c7f4e618bdb26746cd879a8670c3506707b2 -b774104efb3596ce07ee5966c7a7bd06563f7856742b284bfbda52a2664e264a -5f781c5fd79ba767a19936fb3a0ef2072c998e1b916a2f2f663b4343afb8f168 -f2f00d3f5e1f583d20ba03f6f41a980d777c7c5fa5300d457830c48faf007548 -b642a7da2ce598799b042d03f4a1979cd0130662cd81511a5ac2866097352329 -a93cf79be94055616a889151b66b0054053822de0248141d4d3c0471f3ec95da -cc00eafbcf9010ff26f90c186fed7adcf4383297311c3dc317c5bde2da60ced0 -e6dfcce2f0b25d00b1f16f5884981a210483a1a4d7dbabe00baa1e2ddf541a8c -cddc9e051a54be5f4c2d0ffec3b83e931fb42456d49b12f4488627d3d3214c4f -876ac4ca7e3a4e09a13d09c0741c7511361ee2726a8973650c7af8175fb81882 -245d94df87618d1c17632cba8bf34c37f91681670dc816afef4ed278f63a9140 -9cdcda8ca64904523eda55908972827693cf36089dc580743a9eff42e3f793f3 -100bce00a6bfb089e595c736eac8444815aafae9654d9da0accfaddddf283629 -be4a00a9f6b464bd3b84bfe069761777f71c6fd398cef5b915b7729dc2ec8cae -b4ef063d47ec4ad9a0d8d8316a0deb5fe7982824c9f20ba43f907b56b124a2f1 -b3fe3d644e9a6f1c1979130b56a08e9a91d71de0458777c461a93fa416246373 -81d8a7b70639422ecc3841958dda5cc2ff32fb018f7127b24fc1f8b2a97f4eb8 -a5ace935d51e1f55c5ac8f2f3627efd76f052bb517560359f6e139080b19f328 -46f0bf11f1a5485f055151b5a802d3c9b042ce62e367446f59519a37dabeaf46 -9c7951ae6216be980b97c3106e1bc77516555ce6a82a25a2c348eb0078cf5a49 -ae48b25df34867cbe4318b2180a68f0d283ead9448f3a93cf5006c9fb4105c38 -e3ee2a6a0c2c68516379781abcf30bcdd3e29353c08cbfc7c71cc33080a37fdb -5eb3054341ff059d1b0adfd213644085ec8f1ec8e0ed033db2e69e5c0c479925 -1e7996a730640b1e16ac49341478ff1b73bfeab8dfcff54c4f10dd7f10d00db0 -16d2e673fe75ca7cdf656de1aece63bc018ce97c53335c140cf8b98927b869ca -cb5b1f6667d9df1d62544dcfcf12a15432e31efda2d8f4d96b73f6128e73d9dc -932d2babfc3220aa8c6319c9fb435470625f259104bac932b7cf05c222dee3d1 -70ac1627567417f41f4db1c7fc7b892d18b2c53f12995344466d44be856cd953 -49f4b959b4749d390f66bdc6ba0983b377af879fabbd02f1311b6d87b3a45075 -516e347a9bf9c30f0c22573d03294fe0bf1d86490dd5e0f1800e97aa4cd34328 -325d62c753ae10fbd5098d1659687f930da4f195b9e4b8616bec2fbd0b6c941b -09b03eaf23bba7544838473f2b5aede4a712d754a117591bf98f2a534057d7ea -4a99ce86c87ec2b12619223c8046f9e9947fc8ec69018cbe93dec5ea5ded8ec8 -56b1d03f7b57b6ca0d8894e7a26c721956a66df5d582c397beb57c6c120ea224 -a7d5acfbc6acd556f5a08d60e5c1a725fcf062c8755df1d6f22381564656446b -19bf6518fff2bb1e04aca06aa90cad4333f10b16f9585e5d19ee150da3931c8d -a05618f6e4e188b44059ac3758c930c3ae763267ceb422e1b4595802b374ecf3 -2576af6afccf151af304747e2405f609f04509f38f17dfadc6383ac24d18f5ae -f8eb5125446d4d9b0c67001c84edb4032df4bf86e8eef2c113617f3771c333fa -c9b4e8d10be191b4f0b62a21c839a52f75ab070ad8d7b6fa6fe538be4844841a -d1da0cf4948c018259ff3065dee62ea4a2a586fb09550b1e32ee006768065f6c -a62e69542a84ac74349e4682988f106f944da6132c49facfe3a71e78f15fc928 -ba3a391a2599b16fbd0624504f340a0854332c12215bc1a8638275f6bf3fc328 -8c9cbe92a0196afe73ce3ffe76b146842cffb10446e80edbc2675458f3143366 -803d716bc0254178f6a3412f9978dce95ef93dbbdce9dbb2e8495780a784dcae -7e01eb627febe7ba97e715d3439d55e3d86ed0764b2ebb4e09a1a44a4f187fb4 -dcf7edb3bdd615cf4d8a2ec78483f2c5f1480cb520f50c370ea1adaac5d105e3 -1299ddf4c84b810164d9bd90500b956ca1e9cc387ec7b697a220d124696fe475 -b963bed158dd5e6a466e0674ab8fe21413d2bfa7b890a2f75447bd75e18f582c -7b94f812009f9e8c842e68e3f4d8545ddcbd12b522adf6bef2db3d9c9e417d19 -ead754d89c81cc8355f3e74d9e83df3a5502027be852275d5a292e84fe0f3330 -f0430353f25f954b08c7798719e59d889814d0f3da68006c3866e1ce7d4e4c6d -1637a36b81c57f076c2a534139a3fbd06e814308f41d534a0b8efa70dd0a3334 -28b39be5842b7ba882ebcb7cf6e4e39a8ef9049304661a35067d684d4338def5 -0651c76971c635cc67118e8fc3e14b1f4593e855bdf58cab00bd96c4b9fa3fae -06e5f2f0453b9785067720fad4fa2bce85e75f4c7627ba4c9ff60264b7e3203c -b7ffebc5a030ddb3e9f73e43476cb14db814f6582ae10880bc2e05d2b45d6703 -fe5ff8fac1811faced4a873bce848c67f21dec481e5bfa16273b317ad724471d -d6c000d0567054afcaa249b29fe4868d3de14f3aec71a9a516534d7bcd5f520f -4b692be725813ad0686818ecff6583db9caca9217d917ef8e95b4f0f65b359a7 -bfad81b047489b5a27f25e9d0083f3857155bafde723af49d89d12d0ace5fc57 -55ecf06556351af4cbbfb31ced64e43741e00effd88c100126f6a9ea7059a29e -e676d797f763662be90baf5888d003a90e1b3d2972ce2d2692905474fc3ca302 -45dab5e679b2649139d087da1c52b573f720136584590951849ff1acf3fc3a8f -3598951f265080079accc4792c81607e426c7c94c49235defbf99c2ce7cd6f83 -f6500ba6df15e5db02a83f6fc92a707f46763f7cc3e061ed52833ea1d5e2c3a5 -e792d30003fc4442c2b2da5a7b6265ff74c554b66cd79bb3f8fe8f925be0b8b7 -5539a85ec4d8fdec57744f34ff9046971df2cb948efe784244567ba3ca7585c2 -d30e9227fc65efda488c6258472b8078e4d53cfbc75a54b2ae83ca83d25eae24 -62925ec4c6a8a71f1659c30a40c27a8002d5af1f808e305584a987659eaf20c9 -bb9149bc90071f272e1668f28d01cf753dee6184f401dedd303e41270d956b3e -e8b162458a0b5b36f1b44730faadb167a76a906e4d515640db77355c10ce489b -f531944e2af613ddf4e8bf63744073505c11b7a2391f3bbea1eca42415e72784 -67ac2104f88c79ef1adcdd9708241b6c666a0d9376fb23ba488b16ba96a4ac15 -828e8d286635b79c99bf768f8fce273e569f2f1c6c34be942b833a1fe05de68d -ef04afae2e78ad7d500d16d417b517459820a3056be375cdc94d51b97bbc360e -918e36d526c1bff1242103d6aee802457fe39deed5f80f274a4a76930ed84c41 -08eb6d4ebadad5d97f9e5226af8bffc0366b13cd443863ed1f3ac1a43656997a -1562b520c57ba0ce60b0470c6200fbb418b567b575b76cca63a371e05b44bacb -8fd22384616378260738256cb80100fff9d04375e79f8740923c4f87d02eb586 -40b9af5147a7f15a8278252473c6a757900ecffb061aae3ef8437bed0f443f99 -7e1d41fbd1ae69e08a4b72f3d82c0c9aa74558f2000cd23feab368fb9fe8adff -b1edec68788c845dca9093d157db4aff2385d94b615d680dd2463cae985d94c0 -bb1e898d1ba8a26e8fd4dd75fa1ff158032b42ece876dc01ef0af5e59889c9d3 -3867a41fbfbbacb9f2b182a9e88fb57f4abf2b4af4b76b262f8b04e60f41e64b -9b54b05972a8c8377db85c8c057c7770ef3859ba3e6d4317246b4d82efec05b1 -b06749c85bc5a915b8da1d3ebdcf13ce8f09427bd6687eacc75ea0a196d22616 -6dc5dd288539be39b3fc157e957c1ae0c61f682ffdfbecb384796e603b33e5bc -43a3ee16f854455cc1825a2fd49931dfbc0b76acd783b8d6cf57ffd909e44e0f -65f51296a1be58b28ab759390ffefd476cdd169ede92dfd5362137f2412f76e9 -ab8d3d7c0829a910aa7866ef6d7712fbda2223ee1c672aa42584d3e5dceb6ccb -e16755b381dd61e83c43ef2636c33c5e1a453bdb8f30f51074ffa5ff9b427639 -4bc83edb449f5dad51984e25e77062f4ef7981b0cbcb6b8f97e938aa6e8ebb92 -2d7f2c599d714d3732caaabe65994e20e56795579f7feaf5ccb5b1448b7cf3e4 -c59366d5e5af71390116e2d7c545523fd2ffecdb8e2a59766cd2a8720b3bb898 -063b54de265f82d6cc34e88bfd5707b1ad047686dbe9d434414b73ee4cb2bf32 -8882565e93a6434d7d5e40faefffd695ce65bcf0014232760e63389558ac39fc -23a295ed68fa43957428c359b5256c6b7cdf7f4bf4de03d6e24dab79d709a27a -0ca54d84fd365f67d85a0c641073971e12260b03c0d9f88bc45cdffa45bcf544 -77e564efee2b7d8b8fa4af0745b8f4eefb970e6072ac27c0fbcfff9444ea7126 -c7befb2dd02476f58123cbc23da0ab4c91c8839af709a516df1db6acbfa7874f -50f41b707e2edc5cc705a64f3d9b1cf30231d422b97acf6a37b9c5d6c0f6ba6b -0768ae1b907aa7e986fc583178c251b36bd3bb424c13bcb9cde19644bb8b40c7 -63d2c192798218322f63e82bd1176158ed074b7293e4178e9953766f19aa08b6 -1765dda1ec557de4d4841f98e10f53985d111edbf0e132dcfe12d8118ce78632 -b67ea99982fd3cf289ec0cc186ee5993acfa41113eb12f9457c01cf3a13714f0 -f3523eaf4229da65ef3bac70e6518dc954570033bec5bb9c49f2bdd52db14a0b -9b1dca8b489d0e9992d9c44720f9e9039b920a69b36e31a27f33f105bc700e1a -dbf42412f827b364c91bd06a57e22097806f615ff8cf20ddfab163f32351b638 -c39bd7b05d0fb10df6ae8bbbef8a47870af4198ffa6f35859a308513bb3cd6e2 -32e50206aaae2f5e14d5bc6b8ff3f64a9497ebf7566ef04ff1394d1997ccf7b8 -31629e685294fc9cb7468a919ccecd64048c60a44e217e775fec9d31711d2ed4 -839a68a91e099d16e24b813817aac1c10e6aef41b6c616dafc4f6965eb4641ea -db27f46ac00e4aca80488665771724dac1fe2206506f09ec75885d5fa3129bbe -4e15f47090e9310c0d47835c5e697a634bea062a60c4dfc2d4e67bb8591149ee -30ee8c5d284d332f4d7058b1e21826ec6df07a1b12ced9b109af752cb4aca0d3 -b2f64eed115d963fc4356953a62dca58d03c6a1574eb46c2a902ef65c2d41e15 -677eedf8e0f92d99fe465d596ce0154785f623a6f21d0b293e211402870271b0 -a7669015f8fa46740fc7f171f42b1450e001190e0dec67a83f96e24ebd79d9cd -f8767571b35a891f9a7da04ecb6d0b0ef28bf4be1e1e6ecb634a3bcf8d48f797 -89fef27a51d3da06742a93f5367ba9dd87932d6f41fdcdebc7313673a427f172 -b142a59879ec5a115ba6e50da31c0c65cc88b2c012f14e7acdcd39aa96f58b3d -8feef0df2d568a41874b0ba77aa07ceb12fb6113698279479d15b5798d065431 -22d252e11d1a8ad35a267b8f9699f36c87e5f9e84f931f1fea9d9226de70a6e7 -e8503681d81dfc236d06bb2599f896cfb97ed5d287f452c7bfdc04b6c25bcd40 -5624a580f4e3ceab7d7e13768cb014bf82e1988b458a1d98f1e28ca698e5e108 -7be4a8f26c3a25035c6ca7c176215877b2ba1e812d79a37eb3914f2eb5ea4414 -7c3f38cac536f3a8d5f7f9a17e6008373c54669e00c937771e8d6ba2bd833648 -8f5b9b61fca0099ab4d8acc4b5df4a5dc685fdbc90a6cbe881cd4fb561e8ec6a -c76c3a42146a5dc2ce7f6dc221d0717138f03e7c5a93ed07cf7620975f4fc4dc -5ae665540f85b795e42b15df5b82644f6e817c831087e2f7b1a49eedec62a9ab -6b6fef18ff94e1e1f9f60c445ae93afbcbccf496255b1b64433e445b8eee247a -18d7e43f90e084b0728f70744f87313ff6fb2c7ac61f207abe55d9bf4f0551fb -12ab7d62e77d0eccee2ffae62392d6cd7f1b70d29046933384cea2e2c1428d33 -4a33ddac649ec5d4b7a65bcb483096a6ac1dd6408f48102e378cf71dd4c872cb -772c1eb0ca9c8535a757478b30fae38098b92d38a2972e3f765b8b302b74ead0 -b41dfd21601497bd746ebf9392bc35c358ff0debb36b6800d254a10214e0196b -eb8150a66c59e0926813c5189a777e924cb6ba0ff1c593c6405d5709e70af9aa -e553034680e3af6afca2327983165790a6be4850b378556b29f213a78ef91560 -82201faaf9cd64884a12b176e5941f4783bdd9c4ac23cd7b33aadc49d2f2ac11 -ed6b4196e3a1546f2723fa0cf4e74d51227237e5be8dbe5b61e2860100c8a212 -ae75d5fa0f3cf636ce9db565ae8503d426f7eabe413920d7a98c3fa47414ba75 -af6580df563f70c08422873e6ce8e1282a6058f87dcd2defb30e25bb3bea88ca -c4365dff510d9ea8e3c85967d70d39c035f3083c3624d7617bc5dac707f5b993 -78ccd3e91f5a94a67413515a21233f1b09a18acee0602287bd3a1031e169098c -6dda3771867c4b6035ee839a1547ac0532ddca75a8b778ae07ec9c917cfab4b0 -ff9298e54fff5c54b4ddf6e5c3c44c1cdf1acd48f7b70bf36fe1a8c675f957d8 -005836caf879933b4290dc7cae52900dd58897aee9f8d6d91270aacc08065815 -3753a34da04548780f70ba1ce29c1019f16d1193d94366b0dd071c323b4b65e8 -e0f8580ab8b9c1818fdf7b2a92a5dd7d4cdd005d5b902135f0410fee82cfe1d2 -44bcd29e599d6d5f95643bc960779083159e00905cd2fb3ac66d4bc2565c4aff -6b0ad51d1a051bf9212363f5508a98035af3c89748249af4b08253891fa1c26c -e2e47cc4c3585450162b3e94eae6efbf5314d1567e240179d642c50096fff099 -bfea2ed1d2a1aad5164ee7554deef672219fefc240f979ab9e97e746b65927d6 -ab034d96066e955a3c53b8e3f2f2271e977e6ab006293b2b3c1fd7f615eb76ee -faa64f082f68bbd8bd690d154cf62d48a7aac61f37d325295724dc0aad8edf92 -d24eac64a11d372d132434dbd70f34a67ecb0fb97dbdebae6d738446949de8a5 -de1f039f4b49c7d637acfeb002b56b1b97dc504ba5f00f18881454aae16f0793 -baf18badd0dfb6b218aacd7d1d878cd9c637729924184c546de16aa550e81741 -3218f217fd6fb7ea6145dc73ee00b0c0bc6a93123706333ff6bd82cc38aa848e -b014ed145236d5b8ef7905f9be3a98fafb89e811574779f482bb9b0cd4c8fbb3 -0f12457defd87f6576c0c37f542d5ed7dc35f09b1f382718c535893fb1c2c5d1 -989a1245e44738cf6a9c49d80158796a90e98b706b03ae10da2d58a3cb79890c -0d45d554667aaf0b110deab7535656ee3995dc28b34af6796c52dd0fd682b048 -7dc06a27282d141cc02bb880a0a87756faf56972e53257af8ae9c362121b0d93 -0b8321683cf50c57a463600936c43bfb65396235837910fcc1a0bcb79c57f721 -c3cfbfc40643583d680b3162e12794979c6c593f9c9525060cbc2b77505977c2 -a88b40bd2e25d8aba89801a09ba7aa50c401647e65c89ac200f072231039f7d1 -962b7fd0104e04636114cb84e7317310b590245703e54b37781e473265d5db82 -a19fc83b9725f1aee25ef915815b3d3399de9ece699d2c54c2a39fe2408e3f2b -84010a6ce7dc04d192ac308a3209dc0ddaee51a502f198b2f74913c2fb6cfdf1 -b39c7051b7a2b2c374cd33463d784da35f96e0298cfd1950c4f2fd7a64050e10 -98c07c3f8d4f6631b7aa1a0456825db870ccd2b8187a48dc6aca0cc86d5c1cd9 -1c062ae412283578268bb9241946644186bb61a71cb80fec8ecdbc2c1254d4f7 -cc02660552a8c46871b574714d9bfe53e7ad6315bf022fc769eee9988e7b8a06 -64d6c44e3642b9d06632ee37449b26d733f6201d862d7a4137142d7fafe95f3c -1f63107ef0d183f69922c2927c9b244ef4efb28c9b1648423d03039806ce157e -ae5bd445ca51f3eecb05f104ec9eefd3bf76a37bd23494768306f143f1170177 -2ecb2abbc0ff27ee68face57b720c0724e1afb2ad4405d35ce79fa406102cb93 -d110fe7c707781904e41a48fc4ecd9819cd5cbee4e606a88932172cbc37e1d66 -2f0f2ca2379f5c5a7f554c59ab6c151209972825a4b5fd4a20c77696427ea5ec -1d30765e4ba579742ee3c719a9d93c77908ad70394669d66321f1200679efce9 -7257b2f7c5b2a68c7d097c8fb900b415b490f386d9f6c439b3067893eaccb2a3 -c376da7e13b14bf196bc9940d0aec3d560c63b8497381bb16625ef73b1f4e71f -30fce3196c7643c0eb9683c4f311cb41f6825d736911b294117ecd759386db0b -97def1aa3a7e433b89a8d8c7d1ee8b89e6e6c8082d80e71bacab06ab48b188d8 -f27811d13c04c03967bee4322dde4b2eb76e58249a74397fcb632a3c69ca5021 -10aea31c1f57cc1c9ab15cc2c8e66ab3b9c59e23b06e08782c9217cf8f2c6459 -3b0cc08e7f6c75ee74701a47c9504d6bbf5d2b5468f7270783139ebc2c14de22 -661522d175e3a847aa72db59a991f005bc86622168bf57a3d28c2ae1cbc06ac1 -319c4b8195bb715501fbd26cae0827ff92058d7a228eec31fa0c6eb70554a256 -1fd9b21773a3f765255b6eb4d4379ab3f599c11479f5085cefd19bddbce533bb -9465f89e493a7ea66cdb039c2e85a0fd0aff5d7dd8f4fa0f618e248c837567a0 -9b72aadb2bf3ff6b9d4307e88c206ba9b75e0ac844848b5fd2a08d5f7c1848b6 -6e49bf533c94346902eae08ac41aba2836bec511d8bcac30986a18a8405c72cd -0f189c2ccbfce5dbbd09070f0f916ef76683855fed5982bf9b1760420eb45765 -994e8da3f7033a5963c244439a7ac157219fe0a7ccee82804f641591e6b66fe0 -2b0d55bf5f704a04dabc1d5bf63739e6cdff39415a5fc216a55479fa8e7e2647 -643e302eb4205dfed647b3b8b47ef2616df65784347d5677b52e9abc82c18666 -0b786335ac635e573aeffcf8224205d947b0ea67b353640237a63bd73510f828 -3816c87d8f12be5f998b727ae398e1fb4e46e7cabe627d8f6ed455edaff7d8e1 -05dc0203e7c407dc05aaf9b9df596313630f683d408400c6b41ea1b7e05c8471 -a22d583135a9df1ae41b0a2ccb4a739c2844730893585ea7586c580a0f66eb87 -7066491a6835c2b3141fc1dc23e1bb1d5427860a996ebf4efd3c092edc54710a -ec4da96ba61f0eaf6f0d5d9680bdeba2b6c5fe6d71c3ca7a425622135634cc68 -7aab3e9ca2bbe997e074d251c1e8daa885aad2c9322e6cc85031f9e205baf648 -d257f38b320a958e202ccad9dddeda59a8c0e4939aee0ee7fe1daa0acbeed8ee -111214437e6695f25b52f1386ed2b5904b2cfa095a8ee8f0ac2707239091fdf5 -ddada518e04bb44580ee924a8c38d681aa160378fc3c76290b21a9cc03f1850a -6a277de7ff51614e67043cbeebfbc2a473993b91bc7b31150ac22fecdc99dccf -eba2d8ecdf38f46dead509b780ebe45bd0879b68d9052fcd50e431f299412272 -79afa25fde7a63961c924ff02b0990b938e96683f82537c0073e42e58a49690f -369813992dc8049111536a76e1d1db712fbe9a9d353793e4b1e31b4e6c836a96 -e542d207c6987dea794d9fb2c23ce8d1cd9d1dc6b13222963320c0f3c5053323 -37744b297e3c1eadcee45dd8a0b62bafb7f6bf33c628e20f40c4aad75f19cc91 -c5832cc45aa9978c087ee415be15681e3abba579d8bf1f33c1208068a8150bd0 -deb3ce69a7cf00852a436a71f9c5065a3b262238910bb60fe4d08a6c74873628 -697c148fe67f1a59cc1e4f9d18d862fdd6bbffe395d9ac79686ecaf001cd9068 -2f6a838feed75ebcf706f01577fee2a437cf11cb392881cd9108223d71a95edf -ae83dea1f6bd87dd0240edeae67c7ee6ca99b569d15deb7cb52a2c768882fcd9 -846359dc48a34f9c93cf5058d60342b01feac20aaa60ec0973dc5e3af0198a84 -052c2beb9c53e6ac865ba4567e42dbdc69e888f6c1ab4eb7b547a41141578c9e -75647ad89fdc7c31b34a9ca6aeb332b3e6942b3c41775307a59a86275289dc84 -9430fc23784b0cac2a581e4389b16d17d83d685822d09e47113c3c03c45b90a8 -5de29e346636f864801b043d1a1bedbcc0c610144a6900d28ddeafd5533b5ffa -79058fa4ff48ce1c7c7ff32024f4e7aad75032ebf0b125466356f95158194a5f -5750c3022797f5d91e6ba6648c62b7e754fbd6a74b82f9671234020b78689f47 -638850f2e1a57bd3441c51716b6cea8d53a422ad81d7f35014709d2c960a6697 -0d7d8c00b63d97bf188004d78ba34a6f60309bea91c077335e09f72bfb662340 -156cee8710af1551e940719cf9f22d9a0ff51a0981301c4f1435450a0c9c16e0 -de8d669b759bf6796e6653a07b305df4c93e62dfb869c5c4439c79e1011f3676 -c8b71f6c0900ec9f5acaa83b12163a912b0448ac5adb76e29dee0ba832938f52 -895f878fce7bf9d3bdb7b16e41504dc90df6abbc31f2b9f50cf7edb363998de7 -3d77e142281b2d02067bef95da5e7429d4d16f41cfd94f76b139baa0b96576dc -08e6e8d6bef850f2c530003efa2a12fc493f1432ca635512bee93893be90dce9 -6c65ba7c3472585bf1d37e6c3eba0b9bc34a438fad5ea0799c1bdc674951fcbf -b5635d169110a70d9034cd19be6d7ee95a06e542968c21cd5427c8ace58f52cd -8769ad774a2e46c8e0d8ea342fc39c683072bb821fda38c1e3fe34bbb209eb21 -e4d9f44ff3b252dc0df3361cfd671749023b1504e167a3e72c2f38bf20ff58ee -ecc0bf2ffce73d51cc8ee71a43afaa6b5b91c8b27218f3287595ef75eb8c184d -5386918ac83903ff8eac18e55ef730abf6262f36b7e3a58a25ba0219cff270cf -eba11d973e4ac3b3f76a1cb0f6a3cbb03a8c17c92b89087347ec273db0035838 -7398603c291847da22ea02cd85cc438a9bf69cad8e6e1d44898d927d9e10eec4 -209c642383c700e644c9240259ca6ef8eef9c9a33337ca0f866850851e3e62be -aea1357ced843cca5d5494d30917b78454c78387b15185748a852a91f6f9a981 -c7de39732653ae16f28b7cc2d8feac6da414de43621608e2fd7b2855de0975ed -3e7ac410e6eedf48165310e4fb817a02800b9ce0be655e035174abfc073064af -0b999221ab0e169b1afca5642e139f482771e4fd1fca9c2c197c0262094e6a71 -a37ac0c0970d89e7220a1ef66bef84c959f444a0a7bd666935970748c0bd4670 -604614d617e8c54edcd7c0ed73912cc074629d0fdbef9fb6529b82385adc3cde -b0107b8b2ce9ac4c8b482ad14853f78be96e7b99c8c70ad7a0ebe802bdeeff5d -b2ed7e836651db037f2c345f63285157ddf3238fa19130790e7a603afdc693e6 -ef58cb564a063050abf1d44ab800d754d354256802068f0062ee06952e95904c -f3e456831a6c58214f9f48c507777e847a5408e7f1a4eb890dc97503718267b1 -45125ba0e28636d20caf4baaecc17c5545f1b11c73dcf7d1627b3abf6933ca21 -8db138a9dbd295818cce7b4931751c8eacffdf7110d9a37241b12b8906b6bd69 -6a8841a83b3ee2b85752e4cf927751c6cfdf7a7138a4aa5811a1c858e4b555c4 -05833d5ec60d25920de78fb347af37b50f1c3b2f7e087d059406f81ebce8746b -8ac13758aaac6ec1cedbac0477927a5bce0564c1517f6a20f140a868f1624e2b -20332bbb61fa5dca68c18a20bf9d1397cc0e991747ebecf1f6305c33aed5055b -bd1bfcf15007ecb49b61334d1e2d38e5ef24339fe6d66948846a55a88296d2cb -12f47df17c72af4370565e1f73a449a9b0d26c39eea04125fb9192141265a122 -449ff568a1f3654585dce47622ca0bac147715cb7a1275d02c1d083aad411878 -be64dc4da6ef276ea20697436faa00de144b11d2145a0a0280041e0618ceac52 -5039839261ee468bd1ab9a22a098f195d3853155740005473b0ed526751ad4d0 -d671313593340b36dac33b54bf78cc87256c6930a765f2fd927a3582343bc8f5 -8ec18900b67abd359ce7ef7eca1f1f9411943e057872f3386357300957e9e75a -314835045839468e1e5d41b890f7f83255c3584ecd26e2971367aeaa1d3cd22f -22121826d56aff35e356dab010747c2f46d46629a951159b6b69117fd548614f -ec9e7d0a917402628829460cdb6bc8ce3f93f96837c594eb29c63500866d9ddb -fe78d09876d3d2f8327c3318f96a1327691195afe12065448493411832ca1a1f -3b0d4a9593625d8da1b359398827da68a7824255446e6342364db03dff29c917 -e44486cef063382245d06d9fd5a36a5ef79a08f36a66409a2f63e9235a12fe2c -bc9bca58381b4d9cc7a6d79caad7d1b00cc6520836cf3794901295935bec1975 -8f473e0147da152eb2127f1d9da2500fc70be6811dad855d3a00ec44496a4338 -f89664ef47b5ae81fd8ac944448d1908345f3f0b448a028cae01e0e6c7c12e18 -30299a40196e5de461d5184efe63a568faffcf7c4272a37b8af0fd106dc94e7a -9a55c62a4ef9b8d29b5d85fd0e596bbb228fc20a84641700ab85b33fd420163a -deacc45055ffae165c50473f13119d6ce2d5ee143c52ce41260a22059b106529 -b87a8cc28917a38d5aa18029a96b3e095ef78730f4332c4f59eb02e686be85e0 -ddb57200449614b8209fdadf7ca82f4e8051a7baa6501270a3d1f00d99d552b6 -316010b7a51c23709b23849156adedc38379fe4be0ee796986674e2a73e34c7b -195eb533fd924a2cdf6e73c1a02de2b3e0ce5ff89ab08383fe39d880d4dee544 -3dbddad4fd25d3881d8d5fb4422635e72a9c237249ccca7f926e728de0d293f8 -f5fff6b9f13ff9343df8a1bc3663d7786cb6d520b2a81874a17ea112e5b8dc0a -b3b81ad49837767e7879ee03a82e7822c57e265be60d0f6b2789a3059b673da7 -5da7157f777cfdcd9f5c004ada55d8852952d8364c696e762dd8f449783f9290 -6b8f1c9817f5b3564c1fbd5f2ce6bdba25bad8a38b29dcc26938a7285577c391 -7b972d3fa1738737089433fedc6b6c11f2d9eac832727abff83342cd4f99e14d -25e7463585c1be15989a0a0bb377ac009fd8ca8a5172903fa64566b06e2003da -dafdd852a6937f9522a23711964b30d4fdbcff209d824491c0d0d46e22bde4b9 -4e33758ba1c3df8429ff69142e39d447d54caedd9e65ccd5a92015e979871f0b -9d88029dfb4c74f286d7711a1dfb1c40fc3b697f3fc8feb4ca281b0027d8988e -841a4a6ae8660c7c54d335322587693ba4fca91e55df91006a7626cfe30d331e -5b518d2110e317d71461d12d8a908028c0030dea4fe6ab488f213fbcb97dc979 -4a844abe241435ca55616ae41715df1eb11558fdf3a39e7b854ca99d1535bc87 -98ffe95ff41816bf1d903fd839badcc7ef963f825c7c18079fb521c2c0f2405d -397972e2038be57a51af173480e23b8b0959573029c386fbef6c0bf83a8ecf1c -f3d6e1f174fecc45ca6caab7c90211013b552c6f7aaf3e837a02a2c2be6b4cae -fd267fdc0c24da26d5ce30388a69280465886121614b029130325aefb656f38f -5b56a08c2c379a8dbaccfebdd2d3e5217f75db4d7b0cfb8952aa192248e4bad2 -545fd3cec2c0cabb48f25817a4dbb1b9a0733f0a220ce533665abddd39a39eee -9f4784cb26411c7862c644191fe63fa81dd9c69fb2c2f32d519ff145e5ff4ab6 -88a996b4e43c5289274aa0ce8b67bb95b9bd6ca6ba4e86505dea9dfa153e58fb -ce3acb84b1d5b156ffc84eb9ed8d86f5dd8db7ea1a44a70feff4d03541199760 -0246a0071be64ead64a82f6f370a4f9d39555622e8bc09f4360aac8442c64959 -544189deeea7d78b62953fc6c1813c23f77c72761e56ee70ecc3f07bf4b5ee44 -ed0a6a7dcd4dcebca9925d39d190cf815b0585c1dda5897842e7dbd44b9a93ca -9afb0344416c7e12f6a69bb9ec3a0a5ccd176839b24cf375c7b5aa63fb020ef3 -86d1a5467f5be498dd3dfc7041627ffc4b9ec0ae397c001a3f7703ca4ec8d27e -ea5c798083c4756cd0d4dbfae4eb389026f97ba04094c0ed317efca15ada576e -5315be4d6b84e91b8fc41b4ca765c508db57265a76dfed2ba23f2005ee3e1666 -f0f0ac085e4151f698661c4a69bea8061ea0d86db942164e18f51802ba4a4cc6 -2646865602d3d5bfab3dfd4a13d9127075dada545d9254dd39cad08661ee1891 -40da958aa1d7f9ffbc5d2bc6f8c13a54a4137bee3472955875df9643c71aaf89 -cc4d0b34313ad78fb100347e9a6ba236bffda2c9120f728f7f9dc24475885a7c -6d647b40e380ff8772532f649a0a8af8d5d577a75548cc53bd93b2d94975bd82 -6058f644a247ddb8af1bf9169b39afa10d810842992d9503e869439b08958f75 -f255cf86e4943cca9ff8190955c4bbe52a22db1d33b38a8ceb231f25fe67d7d7 -1451d378083f32232c5f1f46a654d87705fe42be37f24130ddffc294ffa72d63 -3bf863e3668310562dcf82853af99ab19d16e015a5c52f718dbf998e20316811 -988fbd4e96bb4532e180f9f76e7089f7d15ad1530ab7e3b6a833c4ff4ac9a86d -41c91a98c6f20c27d816b5cd07924e3dc3528f7cb3922500189f429ca8568af1 -fe89130ebd9c11860be49ad45643ec0d18993fdc9b0e50a166ff04b409a9bc3d -99215881c09d26949749cf7ca37b0b89457d3b392cb44aab689fd25ba7b5bad7 -06257de81cb1c50d2b283726b050d1ae03fa491189c8b9fc1b22b373dd70e86b -1d40de563ed4a3a80579255ef9dcddd6853c8a757957ce2907a0cec4e94fc5a5 -9641afbd3cde23d6a31dc99bf9180c35393e8e6fa092f5e0a5e215c618a6eb9d -421d9eb8087fc539daf2b707856d59c049b650c264105d2eaf3c5c383b8c9665 -7a53e3aca0f93395f70a078369facc3cfcc8b17367e6d88887b4297644309b12 -8f4116185b756509d9df731553beb42e51e78953a7d9fb81f5dc3a149de0adde -c7f7f517410f474c218cda7880bb53eb0b27d0e3903e1d50d641aaf4c510e03a -4a0862d2205572130f86502a4fac7ba66e5ded860eb07cfc0d90e908eb7c74b1 -334d1783a3111f249055e620b622a4600224a38ef5ce99fa6689aa9fdd5fa97a -f90e3c3d0b44a0090b840404686ad0825117bf9fa688c989597039238cb3bbec -a709d680b9277d87eeffffbc5c21e8b667f1c3830c6feec3046e70b3f46431e8 -0fd084aa78463ecb7e4dcc7b73c046236372f8701397244950dfded1274ef63a -74b45676af1f34b40a82def94255003583bb3845e92f656d0c553155016ad73c -21c9b41d25876b01e1592384222e6c8af08f3bce00c1785aaeaff39fac59771f -858c044ba0a298866bcd42fa82d6e2b1d947d922597892eb38dc8bf3cea0b556 -80d643f58644c80d55b64ed144a03f6a9b2b5471c685c8656f3c19756adbe22b -be33a8f9b37e9b3bcb84c13171abc2acfd73fe7f20a8f6ece9ad9de3c8a08e75 -670425356ddca1f26aa9afc9f31de830373c71213d2b84c29fe667ab899df5fb -9f0b5102556158112a095ba239a299b20056c981c17f2c06614a1a0862f084bb -f420bd958d1d458169124d68c5299d9b35464588e192386347aece5e2a48ba84 -43213219c87812647a9410d34cca55a0a62bbab770ca79b6959dead30f6b5451 -8a20a077406e39d2d126b7e13375104a1ed7239b95a9443b95dc24079d0f149b -08123838d5c21cb3e8d9fe656c5736306bdd4bb5c88393610947253ad725952e -7d9b776ebcb6617e74de8e9c62dae3e081078a04c492c4a35f303e0f600d7d34 -eb629dee4f5531f86916dfbbdd1fb9f6b1e385afd3dae0cb6c15f45ee49911ef -2a8e2ddc4c5e1570f512303d94907fd941bd7f7a053a42f990e7f25fb6f8d1ed -e7d401ea0e4d3405ef89d47416aa7d24dee907fcdd88cb2ab09ef07261f45f78 -733903e89215d7acd1df74ba26056f5c7d3d0ac61d2718d984c022179c98c658 -4405af27a3c9863f1c8278dbde150addbdd057d5e11587ca2ba42c1e6b422932 -6bd7314e190103af64a33794b3ed12d8023483e8d17ee4f8c0bbef5c9b78e2e4 -f350c487df51e966f985b5ee5da43991da55362f6326324c77ae53d320326ff6 -202a089c8d8aa68c588ad9c82768c1f889615ec5b6ac79f75d95641a500a499f -1b57a6758c9da836b7124af1d37ee04cf01478edecc008521831381f6225f593 -f371fd87ec832bc3bd853d579a20244c3030b0eb0db3191d900b654f1067b0e2 -d2a07232d032b264aeab347be9abd0d2a07b6caf85ecd57ec87ee34ea40733e0 -94dc88246eb7fe89c751326de8c008fd1b55e2cb07f3b6a08f7a0041540c7d68 -fbc4ece7a2d0184629adc0cfa77ac198901aa5a1479f1dc97a0b3ab87458e1fa -4704290fc5a744412454a2d3677d9d7565a97eee239a5c5f7eb94793899cfcd7 -2566835d9998e772fb3afd9673b3c74f4bbd339095f2f71c93458484bafe9741 -a1a65b3e15ca5045fbdfabec1723ebbd4e7ab85cdac37df2141af2095e0e16ec -bad6fe620d2e1b874c4e3bdc34f656e9604c6e33cfab4438324b8958c8a7528a -4404b2b8aec31bb0420887f4a6f3c3866e370b1466526937851f6851865b23f0 -0245a38682f68990351c12f34e63aa96d729828bab71327b29eb1a96f30c36f7 -65d4cfbe0769864f4a46f037d2798279f914b8b2ae86acf94385c79db5095b86 -d684a976dc1e662c6e02ce94e69fd20a9960c304626aba2a113766c5923dd7fd -fccbb999567520ff855248bf8377f01ef9dbd6ed1511581b3468d11e73ec622f -6dfc289cc17026fb10143d870b68e32e6f84d19567e177fd4a48a6f003591c1a -83fcd03148ba9f32e6ea26fb33e2b7626620acdca5b302caf98dc6cbe8f93d09 -a877d7cca4d52d75f4f39ce9a17aba04fea7707c097f5a8c50657ade42c5adc0 -76d6ecd980b068651e8d4c630827e0226343c57b39d782faa3f9004585cba68c -ece0430f332e4501d2ca668145020181263aec4a988db312995df391c9638619 -6ee6d1810a9731cdba8632772f844feb41e34e7d046c13f3346b1b4af62f6f8e -da0026e5b306830c0aaea5f3b91eadc7ff9108008fc1081e0371b08fea45ad38 -ea17df8a9d1b7194f1ae2819a2c1fc1b46fd054f5b98b84e4b221a7c50ccf1ba -c995d85664cf8646e2e5880d847f532736d4de8c9fdc2f91be71d89b062d2246 -ceeab03bfa0f8e5e3ca581e958a8ccea868216178925614309f2ccb1616c44b1 -bf772125753fae57762c8a617e6da4d716aa20a762316bd91bdd080a30cd8751 -7462a59f7a90200980e620811ae9cdb8903887effe20061f3558ab479f365a06 -2a8cb74720631f690dea945f6149a4e010e73ec5937c180fd71e68fdd9f4b101 -0ef804407a9b2a375a5d742ca4126b102496c02a6f0630a4ee91089a2beef12b -97f7a7ccf7c2c751aee789ea80cb91291eb2dfc2855fd792bc858a9a0df22e09 -19f5158f584771d9446bfd864fba50582ed52644eb80cbc73b37fe9f8e4f8ca8 -de234351e56df85ea853fc6bd27f5b4f0c1d45cab7dc0aaba49585f3d2e1086c -1f002a8a6585816270be2953a6e6bbe0accd129e201423582909b00d7bb2c73f -c2296a4769da723f979915a82363a457b814d97a2315dc448d3017681175b6d9 -2184936f9784d753644575d5ce4f499047871e30c84263722460ade708d0c2ba -e7998af8194e6d041ceccf6c7ed6d937322b860081a165bf69be1b47490453ff -0e2aa9f0c08c1856c53015152850b8cba83cb82ac6d21730ac9e00919e78f994 -0a14c2be0065b65351a4d130612afe42c09567c277dafd4e74bfef17c252ba7a -e0e8480f0e184c93e34552d4fffa5e427fde368d6b1583581858081613e9074b -a2d0ebc6965254a4d5dce59ca92a857873bda1575899839af87f456faba850e9 -16d06d3df6931f04330fb719a8cc91ecd28821bed1e993863cf9ea95d9e03c7c -b67490ae6a05e0ca47da8d6d7777ff553477a949fb16864ed0ced4613dcd5e73 -5517d0eeb3b86b5892efd3f91b7a1d9eb11ab7bb7feb32f54a1e63788f3a4854 -a4e16f8e81459838f341e5d288d25ec470c18c29f8e5d449bdd29e40244332a0 -4ad3233d92beb334520f1285aa1b11d8f844d33ffb74edeb98de1923c0ac07f1 -92b887d19a423ffdb409def765678047b774d040f771a6b7b675814b63011cf5 -0584368a865b6cfcb4b124d79d7283df63d601795bf5ef80b747d3dc23276610 -46cc26d90ecb0f3261d1750958bf19925e4962cd95d10824a47cf1406e8881ed -1bc5dee966ebb033a5af7a74d7183117b380fb848d4d5890faf6691e9bc3d0b8 -ee3edef892a29942544e1cc7bc2017ce7642c6eef265c916a011c4dc8fe47b45 -3e338d4655572c220bb50a1a05df970834ac6d0b91a86cc416eec40de3cf50c7 -0caa0b554698fae5fc76e5073a9ef47b6d739a8ee52758b82811811e32aff60d -d474cfeb8ddaf5cd242c7a8e7747602aaad0de7f1124194eb3e30c060d3476fb -43d520389df0b15c44007dc97245ca41f3e5b8fe0b283a1e238b57774472b73a -da0ad5b739c912e42864f1ca568e7f8b3c7525ab752db196b35937a509e24596 -73ebd59d66a82daefc60b87f8e21a2bc4e85a5bb2f858a5cba43eb83f54bbcf8 -d85731024babb818063e68ebb3a7e0978b45fd02b7f3734777683cda727312ac -b54f2606bebfe66499dbd8738fcad5b26e749a8806b7116ba138442bb85f55fd -49049434878537165f2c573241b1c1a56a0f961cfb5a269556f3eabcb41b09bf -0966d4cb4a0f3682c212e251310347a2b6bbb258f346d71dc4de399a4bc5529a -dabbe008d511ede8a302a407c7a4095739c505f1fa1f7a51de21b542f23d5287 -2e8ed319d7e867282a407ab35b5ebbc72d96a4cc6d6cf8322d92a82c5ce488e6 -f7a90ca6f5f9b9972e29526031f9d5ff881bf951e0aa40c6b05d8651385c7eea -48ca375b3f06732322f3259a5f92206755336a2579040d6768c85c4ca0afc4e1 -d28eab5d5f1ddb7d5d4f1a3b3b2b01cae132f4c0731e44f103abd7cdcd0d61d0 -8fccabb2471b66249c4ffc31711013cda5de95918cc50daec85398288439c7e1 -9a2196bc68ad745adc5fd398c3189c574380df2c2e4486a40817c23a81f3f316 -26825bef951991a1208cdb551d300ed38886ae677713f4b9d4092c9e9c76e5ea -22f1ec6be10e62200f4f9f591fa0255f249739dc710de9addaa9d34ee904641c -9bcbe6e79a6e4484fc6d0086ec2afa5b8b1926df580af637e73bf126680f9e49 -6e5bb8c21d6a428e77521156f78430ed51dc2e33284f88d78ce909fb940ceaae -0a07dda0d9739b8a3d2a304c2d9f8cb443d4d4d6fc3047842cda21c0b0073e0b -b52f5e1b7ddc2048fa9f67486e2496e0fd2d09ce80730d5f7d0f7e0ed91b6bf1 -87683b6f62f263c10b36b01ffe6fb601327450cd5a4cd8ef322277f942bb2567 -0b358456c29fe2f529d334d5db6245c1e8336b29af092689764cb1a19276d9e3 -2b4b77f0a1c3313421c89801f2c2ef5f75169fc2b3a98b69519c9a7c46b40148 -d474e7a98f7fa7cdb85c471fb1171da6de14027baf64315142b75f677ce7a413 -6466f817519848f9b9aad66b34e3be10e7fafc53571da25ea3b449d7929ec079 -bb4c3f6d513b9174a49bf5500a5272fba2d95362a562339eef996944951e61b7 -38beece89882bbc5580b7622f84adcd3b460828aada98e5cf6789dae52a41ecd -7ab5fcd2dfe6aa11cfe66d6366672c46ef3140f2e0657da447a4dc2f855895ac -b5a79d11a9e45aa7a457c11b4df4ad291f25a925e4a01dc7a64f848c64f2a739 -bffb51c2531e6717dea38da478ce0c932a3f9f856cbd2aaa1e148a0692a92642 -9d77254e7adf8aecd46a8626b7a31442e2046b9532817d285469f59d971bd398 -b6971a38e6d44f31cc46e3f48f10722641905d7ce093f5ae90fc6a56e53ac90f -7f1cdf1ddcac29bc60d3202de837fc9d659e30cfd707ceb5453028d1199a8a6d -87af5bab407c0a78c571e01020560bf1c77936521405c28cf79514579b017733 -70470f68de4e7667237065ece8e2e9bfe2b5d3df69a0bfd8b17ffb8254aac5f1 -d7a8c51d3f93947f7779f368c71c343159eac60c5a671f81cbf2ba05626f91d2 -aa7887e41804f5961b341a5d06b849cb52676311c81739a96d5da0d480cab2a8 -ecdfe115dab597f553767e59cf392a536dcc9d52ce25c424a9b840fbe6413361 -ef591c196e6fd7954ddfa457e7cbb9d5fc00c45d1ea21184f29291c54c353ffe -59d19239224f9de9f6595d5fb5279fd19278e93b366cefa22b41750cbf2e03bd -7b8bec58170e6d3c276f8dd4ccc99885a5582ba4ed5253a17910580a7195d775 -6e10c5608e2499df08572d1fcc0ea139beb4f0bffa5e18f7c1c17ecd20a9e400 -95e2d469da5d9403dbf146aab0a04ced94b508bed89375c6253424f6fcb2afc2 -a8019b6fc866646c1b54c32858992abf31da24399f89ead105a4056526d52965 -289830fb4bac1b0cb6a629104dfccae1a688563a271da0927cf2a644274d2a3f -f90e5c1845205ff935fce3a7633cb8f14e01167b6a0368d2a2e8f072c1bbc6a7 -d6f441ab6d23cb3111d8ca1634cd58dfb4d704c5aac7dc2df32ef43c0fc490bf -86592326f415cb9c543563e6c2204aa0e58eb42163bd9d7209899abe51946f7e -7505e6491711e10d5d125fad62e34fd2e08a0ed0028fb0234768f7948ba2626e -d037619703b922ef43225732aa509b580e92bf5adb3979bd8489d5a50a132b7a -685b271c2facb092739061b8ff4f49b2253db3e10839827fc99498d5a44a5806 -8d9962908f92343b87f44a8bb92fe1830c362d29f990e861461210113ff1ab0a -55436ddc38db4bf16131d9d96784f3165fcd0058401dbec514749dad00b6af4f -73afb28ba5b5ff1a023cb318fce617f5f55eeb0bab7c5bf819edf6a7f81d38a5 -d75355916dcce33cf2b8e771f9730b385c646555b1137e9416c70d5f860a6138 -7d131a9d8acdbe4663772c07722c4e4bc85451fefd08dfccaba1c8f3c251cd09 -3fa5a333877d32ff4d2ce359e6aa47dac276bce065cbb7b50c0e3add00f41c6d -be9778dc241411d1f9e934be7934c6506686ce7c8d619490f2a3f065ca6f213d -9b173efd5541375438e9c6e58d664e8a61aa1f646be623688b1934fbad34b627 -2e1e5614345e8e42ef1456785fd526f21078798a49b61c106e23678f1f593c0e -1ee8c5561147fa5bf38847b982228952ca06cf4549e210ddb6e37cc2921f98dc -162b175bcddbd5b8ad6c58d59ec66c5e118d919ea48e81cde2c17149ab133d78 -e1f45f4c5d931f09526310f2bd8f0233fed3a6a64be805d626115b35b0b5b39e -9cda7b197fec956504ccd72b71a29e9526a544957068c9b7ed6fe04255444d01 -2ecb4f59707fb4cc4a1636c37f9b94d0eec7fc12b70a3e88c7325c5524a5fdae -bc4307a8ee518fb10801bb3ba4e17a2931b5596155171765fcca938fffb35693 -82e0b69a88235c65631e4072e3fff4b3f00a06624db945db691e97986357a509 -5410d64bac2774999f960f332c9050bee455f229061ed099eae00dfc3fb9724d -ac85ac49b79a19410649f06099df677b8d0b39c4c7dc52e0aeb1d35baab7319c -f16795131e2a6d83b4f30fa42d7057ff9030c348327c91f1a780209ae58ebbe4 -188d8ef5e354491d38bfaa4626736cce69132d6b1e71f0962644dc09ad793dbb -368a8e4cffc7a8cb1697ea1b85f5eb9a831458c968ed6b860c344b928d182afb -677a88a431acf29e76053bd900e3fcafe19cf96146b492cb0b046fc4388c326e -1f5ba7f4f9b738c11af96f86cab033b8212716766c1d64675a52c304be62b163 -fa483e426fa8a8066bf82180f77909029eb1063b861ff73dffe14fbf7a25cd7d -73a33d520f6349b76459f83ba004fb60e3dc4e50b4306fdb870f29cd7044d6cb -20d345621ec5ea26ae9ea8e66dd198087e51e8ee972f6435b82f635c83fb4d95 -585e1f88829beeca19a6ea42157c10f703ae52b0c0df309a4634314327ee3ece -2ce41c7dd423345ee25bb7f64f5b300002e11463baf80547ecadebca51b18156 -09c7e479883cd404756e73cc8411dff1dad55e88757314f155bf1eedfa94d1c8 -7806e41cbc3d89eec743c50aee90d6b69bea9de11684c85ea5d0a64cff534085 -f180ce75bd623afe1e08ff4fc4902d88f769e1b3221831f7559867e35137fba3 -773f7bf4977cc27997b9da44e1799353cdd563c88d067b13279752179752ad5a -68f300640de27cf42c42c5e235f5d7d8b345ccd63bee391206499bee8304ea0a -591ff1b118171c51ba62ececf66006f78d1c56415178b9c144ac2e83457126c0 -cc7266234abbc4c1ff4ee17fc352e9bc830aba16351a937cf1304173f0aa12a9 -f79575ba5e45e6c14b93d7a34001b29df1ceb73cae7fca7f34078f99a72357a5 -c7b040f377b8dbe90bdcced28f5363526bf14f0ecf89c919d53f4c3653528b79 -8dfc4b4244f2d9747e09ce16fba69911dad746356ab3f2db59e871b21b10939e -ec4fe4d11b49055c5cdf81f37a0484978dd312eccd5e95d5ef7ba378196396b6 -cc3b51de1e27035f62fab5d507b5a95493e2ae54a6b600d1727db436933ec9f1 -1f01d50b0c645e8dfa94f43b15c47b2348c3c387010989bc4d0f7401a024d351 -0914708a6015b66af6f255efc2b86a535806de1fa9520889f566d000bd185ee0 -9dc171fe42079ac3c342ba13607bced1ecb521827c465f83ffd8d45d50a69a34 -8b1f0d3a524776641483ece863bc262f470c3e603b380c92dc8e5e4319428fa0 -a5a8cad19c001868977d6c36c49eec7a4e3068507b075b8071ac787db8a6d3a4 -3b290f01b24b0fce5c77ada9b89704a5fd3de6f5e8eabbc2c51daf3727b9474b -8e2f4aecd0433e0ffd20671d68f64254db38847ecaa7b118bdf0ba25de5c45c5 -1815d08c82c6ba3dee113d34a1fde725ba8aa8fc05c607487b703c1ef2ab05e5 -575602cc6558f7620e43450f7f508e029693498e2728e4b62571e36e02360964 -62a9579264eb4baf12402284f0bf498d116da62e81d6d3b11c5fd8b0231d3c5d -009a3b0a5506f2c5ff195923a8dbf04768655e63b48d22ebeb97f8e416925e76 -3bda061a1593c0233ac9c058b5ff5b6f483cbbaa4bac15d89f3093909a4d50e8 -a1f61bb76007205d4abd546628cb3d17202cad80f851ee95567cb313e3155258 -23459f6c8b3f02f7e1cdd1499eb58c0128b83c9086eef4e1479a915e75e06905 -f08ba8678f8ba2dda7a15a5461568c2a44e100e078fb41b49bf2e34a35774c59 -cbc642f03830c29c73c8c8334f7f0b8ae263235dd2acf4325973ae353194c10b -a4d017e0d61602715e8a7a3fc90adb659da741a39b2dedb707d5446cf0a12997 -f5df3044fffb50bc9b40c0f551ca4f7b012bfb033e6324dd071372e93cef41b3 -8e29dc94fb145e8c080ca7e606dbca4b292ae98bdee61041e733140c638de3d5 -2e49482c182b75d5d1ea2a27cd8c40926b7aec98d97d80547fe840d1ce753797 -e8f903f0c59f5390823e6a15941a55af60a6b0f82423ca76acb3b0e27bf4998c -2d35e08c4bd4534f0b43facc2b994775ab7c84903605358015445ab8649c8213 -8b1ef913b3c9a3d46d4d9c863c07ea43ef77f04fa4c91f238a5ddbed49629e62 -a4c84190f9ff58575dcf46392c0db97a225d99dc1e7ace1376ac9f20ceae14c1 -8372673772db403747b6067992238fcd257cdc9961f30cea0bc096c77936bc96 -51e8529f52175ddbfce202f38ef4bad1e437fa76c8801b7569c347cc9497bdfb -d693d6f46e66aeeeee2f2b0d4d1784234064ff0f63a730d0c0c80669ec5b7ad2 -3e68a361a69b4de9663426606cecfd2b13171f3e1f8d278240803a0f9aa067e7 -24170d8ad2f4850e1cbf01f0460561a2d06b32c891f15727fb139ed20fe35875 -b04b174e9292b2be4f30f2fb783c2e35f6a47e5626ec3539c0ca7c78a8c65fad -8255c95360855297e5baa060b4d0821ba56c95db62f42d5aafe040ab927d6e6b -a50de0a1fe6c404bc445cd13d1ef1f6f9ac1591d174687f4d5e4b80f8c57f1ee -e2ca56e6b71ee222fc3b75d9c8275b5ae804c530bcbaf814543b53b3cc333184 -f259717a387c6517e31cdff3742506dd3fdfac9e86a00d15ab09c2f381029609 -d34f14fd5a799f1460472115d8452882d250b72325f273261ee8cbd06dccd1e9 -88aa035ba584ef6062046704f0ce3b19eebb71ec933a174be1087f7e763e13c4 -fcd95a51745025643ba2ec4ebf6e7d08cc2661b38bdd189b68d4f5057cc1afec -bd5920178b7ec3bf3073716bbefbc0fb0fff6dd56b32995245eaab7d686d61ce -cf8d35d7ced60e1d8583a27803cc31eac0dba9dd35ac730304c057bc81ecd5b9 -9a7eba791852d17300c6253de776cc756614eea68c940d787656887930b9c38b -74ebcd963254a3a116f15fd5e0568deb54dd076760fefc82e43ab8caf157f2a1 -0934ab492ba04b727b4a12380d8620ecb36b234ec23ea06e1c01b0ba6172c505 -b5fdfc5e1808c9050c8a9835859d97e4c626d48a3a26e077b86970a4a4f1f924 -2e056404c1c3c750c7e6de295c6b9eee36f1ebf4b7813d335144884068f1d8e8 -adb020e3f5971f627fe12b6c4d39e56be8cfc9855ac76493ed4994e9be17c9cc -3464585754dddb9e577dcda000fee128090977165fb6bec6e90827bf7902a887 -ae02126496ffb08eb85095cdb4e5cf63afde1a5a5948793b163feffd60cfb9f8 -428ecf3bb84679c18356122b74ae5efd381d63e496750bbd3f294c55c4306df8 -4c4c5bc4d7e7aadd52704b1cc066bdff579ad4aa3dda718db17819884ff48c16 -18a6fc03cf9954436d24005f7d0975d8aa864660aa30d3bb3ca001ace7b6a0b8 -f115b6fe459915616304ec5fbdfccb656da02cae21b5802a9dcf20ae0e06c5cd -fe92aa4bf2be74a17f7f8f2b338d3a53600248bd394982f97239089f5b7c6c8e -de8339b8d17adf2ce3cbefccd4e6a6daf5d4881131330c1eb4c0ade5276dd50f -2b0b4fc97ff5b6c887fe7bf378f58e5dce3d85b98a4a9fa335438158ee3cf58a -f17b2a4553afa66043e146652c23a69e6f6f747ea368637d4e1003b4251a43ff -71c4b12f7e2dd6848cb84316b9ccdb4fb282615f89384717a5016a0660adfca4 -7e9545b2182f553d14660f38ea41d327250ee94d9d1a23d0b395303295a6de00 -312ff97e49ccdde1359cf3d098e7ec51df6e7487b4f9b94a69330ec7885a90a7 -b294a8e5ef7e99aaca70ef8531bb8951fa70d28f8e94216ae8c54d03d5fb5766 -b08a89c1786affcc5b771581ba4ca4040bdcb201262985482c346fb3a00b5a38 -332ba95e627431fbcd2811018044d8fd34192c775a0025868c41c34619cdc4c3 -e07c62ff21e9b53ad927b473643185eff0e0af5dbba7a79cf8b2cce506c0f18e -a3f8e23a4eff5c581bcbc6dddf0442780c00346859988f464557207c2f3d79ae -830f86148daa52cad0fd0e768fdfddb665f046960da31f389460790c645fc65f -ae80feb3ac5e96c07267175b41d80b79f8bf05eb5905aa917dd65a95b3b90b62 -5e692400b6bcba9c60df3de780ea6c3d39c3702a4d0fc899e26d5466c3ce7924 -60529634d54e61a992d907923ea6a831f94b1be0a311abc904dab3e0d71e9d9e -4d87d50e6d99e03b54501fc78c3f57de92f6c336cbdee2f4c03728cdedaae12b -1e28a0160cc0bbe6b332e5e0442763dda2701556c351c4f81ef3059b06804a1a -da267bd5e1e0846e23f8472740f0260c9d5c82daacdc931190e7f10011a6f718 -80218742749e3493db5f64b500e53dbb333a87926b413444c0db7b39cfeb12a2 -8d4a45e223e651ea6e6c65f5b1c89d4debbc133c226c27f7d8638a4af9803b72 -e29c308e2c4bffd6285910b9968dd1eaaedaa84f335173fdfb51593384a9d128 -3e2e49c3d722e825f67c77b9bbf2ca5e19e64bd7dc212b7f512ac8835fabe249 -89a19f724e474456b6aaf6b0cfb951d3a522510b5556fe6ac1d993f1ad0ab9ef -1d29ab40b6bbf4b8c1eb90db2220f3944f6a70f7dab210e0d2bdda392b85522c -079843ab8d38903c54f2354520cea0a4c1f4d60d2b6d6bf97b9b657982d5d3c8 -4a60ac668bc365240bbe4b5c17ce2c64a1f2afdb01997851f7c405139b3e4c55 -eb2d2a9aee9d4ca05b3d11066167f4bbb75ad5bf8f35813c1692fc2338f70a78 -efd212989488b031ff8239c56ab9c65f96940e45422ec9f721cee7bb73be2a08 -5921862a0a039d658534931865e17607e35372e501562f074a8d7c2366faf616 -0e47317e3667b2abbec7be0a3dc640b0bbc7336db58de5ba26f1f1e910adb1e8 -5172e182308e9fac6a50cbee3e5e22c21026bc31a8ea05577a5aaae1ca049f43 -a9f930ff5994abde44ed4c5cdc4139d1687f30f2b414e106dda8c246a54497c5 -1e9aaaa4d3e2c35a13a3350514544c4096e4ef17510d59eec945a7825f560b98 -c96f5a51e05bcb8878a6187b607f135c69f1dcd1fdf7a88c60da3116c5e46ded -2238210eee6bf3872c8b95e0e70ba4d7194d4aa51b356e060e2ec150cc9a666f -4942009188b80f3ed33481d8b754a3e7f69b1913ad6c7a1807bf05c5c7f06f84 -5ea967d0cfdb1ccd8cf14a02183f1e8ee7c20aec2ad2d4882028df0e165fdfa9 -c06159026bcde2f858d7358819795d5460a464cfd3fe23bda12f4096b62d2039 -4be06a2b4b08f94aed653608dd59684cc9d5585a9ed606e2aa9cfa7191badfa1 -fe20e83d01f42f06e8431ed876381326e2a31c230aa834169a18e92a9ef20b98 -0c96bf695b7771aae13d335733c96dd8541b5a6e3c7777093955f598246d135e -ee64474ada3f017cfed068c9f3115921276f1a95a1a2162f2eefffbcef0c3aa8 -e36f8c45889f3757b51af242c64fbc3d2c04574822487e014daa342ffbb8e1c5 -f0b7c0ad1eaea5bb5dd6b9b36f661e029001b40845d011dce1a9188718384933 -c0d3ec74eb27768cb5dc08f86b7914e2fb3f2b717a1f330c29d91e89888d83d2 -2f1d6d4531109a10f3b869377422cac3d2f89c0390b940321a8d0dc7f343b56f -a417206882526ea43ffd467c2aa969cd80a09a9eafa0a103c8f8206178749c1f -549a3393c1deda03623924281f806d8ed881ab7135903e993baad767de650fb5 -17615ef40209ce1ac15201fe094b32dc870208c0dd032ab639d4ce4b8b1e2a76 -ff3eb9f0472ad1bac009e3e9ccad32eeadc5047c8c80aeda16a946b558a4fc83 -6f8b9a897b415920a946bf2c81e2d9421ee21cefcbcc7f9ca6a8242d47d495c2 -158531ce2831f5da195954f10fa375d24d7e4e6a92af21972e02696780333cc1 -ae4b6c6bd8f43fbf196b2f7bf2f2f277e628e959dd51bbfec1d654fe7220f252 -cee9a500071f202a8567b6137551de985d5b0beb267d044c091a2e5066a0039b -bfb96bb94cbf04dd2fbf7700f42b68c9be0eeac34915c212d5cc6c781c89af77 -9e5acd11d425c13239fa07f0e28f2447d63109d16f909515389fdeb76c930791 -9c4d10959b0b63b39f49af938f109e45e62d2e46abb44a873f291eb4d078dcbd -c852cbb032ab7533ac8d651cba2f1429532122ff08967da9fbab8eb8e927d718 -136da194ce2a6433d6b92b441a4a9d06577c7c8cb4cd740f5cd83ebe74fde770 -229f7f090351a048893d43330247ac80afc9b28f7729287d54ed1fec1731a198 -a0642b50adcbfc5f9fc5dc00ceac0b4ef68f16cf5c5cdfc5c047ac5cdc26c357 -d8d9a6340846bbb4dc81966b4e54a550ed425b260da1b45a4905e6cd1014f197 -495ccb262aeb75b56377dac775b5ecfdc123eaebb617c48224c1e3276e453867 -65102b0313aa262d358566c9d518ba3c67692881747954e9e87e7900629fb73f -56537924923a4aec74cffaa5f32b4fb2fc0eb5c599d80991c02f1369721cef28 -dbb86f5c67f9ee5bd42ce86dca1872a382038926277a1b7d690ad7ff52945536 -32db74e9a632a5554221871082e4c33d36f5b0d225f0f75286d8b117e7d2d3b5 -7c334aaefca81df6d585b767004b6bc0fcdfd7296e8225b3af501a5e6ca4b3cc -3363da4c203513fc473bcf178c48a71e9fb1feb2d86d815d0c684daa1b2cef8b -7a17ac40531b319250803d658ee867e7beb632307701626d55460946c478ec2d -55e7f3f71c059816372a7ac7110bb97f6e86a782ea114b0adae033b89455d3e8 -19fe495b155971f926b139f8d003b9fc9c1e612d61508ec2fd4832740b47c14f -b1f194c3e440e9fa435494135b6af2d9aa706b7516ff853dc3f13c57862d7406 -63efe646cf15a3a54823e9302d870204e8694857f5ab8b8152f6c5332997975d -2bbc57e321c4f328ba2158850cd40a6227a64195817575c017f5fa090ae0556b -a7665849a46ff51b36263392d22734551a6c2a4faf5159ab2ad481825fb666d5 -653006265ee72e32c8230e733788428c7a8bbf821a8c8ec41b2b7ab77142b626 -1951cb548c93955bd2b0bbac1b460b1f490a2b6711471bc33e10d412ef004577 -49760ee95cd989440f59f188458fbadc10780dcd6b76633f3f60689ccff06f4a -ac24d19a052d25bb5247624e1251329b9f6e9200785faf56efc7955ba7dadfc3 -4bccb712a5ec29503cc890f16f14be12c9a98d27c4ad4ae7fe0feb05aba081ba -004391f5cd198e418654fd240d523ef4df055eec36029723b311bf07c3388116 -bf4da3aa56d5b9e3330aab618736d2a5029387a472b437947e2b9029e05b0218 -912afd8d21d5aaabb3135ab311778262455f2a559e166f48506dab27e0ca87a5 -315d30aff6499bdee67e4137347133a9edbee671d6dfa01ab4959858b2c1fac4 -5aca951a3a87f45fb859d7c7921deaf989a56f12c09a899d5e2c20746d44c380 -a88c5b06697083996c3d7690fe1c268e772a68651fc36936a36ea4ce8dc9057c -05f0a51898a7bb4b5045e2a58cea600491f21a09161ba7866e8d7f2d59d502b8 -ee2bb74404d02a92962d3c04a05659daba8ed04d8d92f2951863d67ba045f217 -bbb3f09bdcd2676bc970c34337695d053c6bbcbed78315ae82270b4aabf8f3f5 -8826a965b7ee29e3e6c13bb4213b28b0877a91145153f09ef866dfa1831481cd -87df5322e6464ddf257908a35d2b49a3f41a5767f14f5ca17c0be3ff13a8bedf -d59283abf933f33d7b0db0bc4d95c903fb422fd3b82c6ae88591d6fb3eddb7ab -3966850a8bed62c957170fb89607fe22aaefddb22414ff7a55ab50d5f151d86e -600889da55834432fe74afccc7be5f16a6c63262d5a788b3fdcd7ae98fe4f3e0 -a3ec297ffbb9d0875ffaa52ceb8894ddfa269df08d786a0e29102bf5a8d58d90 -293ea4e6f9d50bf4e7f19c10d805dd5de75770129639be680e06f25be7d07b40 -4001eb64a6b74e701782b42eb03c689d9b9327fd7fcbd0925f95630d3336cb5b -789388b17aee7e3616e43f935f30608c02acdfba2487664865f998c5fbbe6a2d -ed471586c5e68d4beeb65597c9ce368b494983548ec6fa4b15c556415bc15b27 -8186864315427c9aef3c102193c013b424e6ed789dbb0d21d75ce2afd3d9d8f6 -52f158edffb99e4e38b6df1ce9421e7eb130dfd305b5f9d88a94fd645a7a5669 -a5a2f447f3f1ed95ba822bbe972e4ab9b75e03094c3f23163385fc551050b982 -9b059a5a530f4ccd5eb0d4ba98f003f95c8f90210012830b76c89792d1898b9a -76c0308878786c3fd23199701f383b986c8f5cdd99fc86223b3d4cfb39587800 -35d33a7e56428ba3cae9283aab4d5280d952d5d028299d958dac4a23fce6ffb7 -7cca4d88a720d5d47fb2cdcd69a1829235fffc728d6a4b98dd2aae73bc163263 -ec6356d0d9a909a512735263a1ab810296026a7b0141ca44afde4632c5e31f87 -116869aeef9626d5786ed2d25ab3a1cb3adad4beb38bb5e3197f18b678e3f5b3 -8923c5405121f0433167b3f8651877974ccc784d92d9bfdef8205f6cabb2da97 -5e2871b2a0acd7c5d4998f942af4d67d84233aa6ea1d54c8570c3eedb76b0907 -e50d67404fee83fd79623f0599eccfde0fb9c7e8dbd87baecf9cf68aa07992e0 -8ca55e5acb1948f6478102ede178577b1ecf8eb4851742c25a20c39a12774513 -dac23ac5b53be148a4bb4c80d55b273b58a7279220c377b25920c4d89a6544f5 -f73204ab88bf1ed0f9fb756d28696ba1b3ca2ddb292115cefbeb71feb75b1427 -12c238c978bebbb9584c63fc9afde0b2ce3a6ec8e8818b040588187e3f03f1f7 -d01da8632a8b74347ac40b419da45c6cbb9d76c66a97caa79e44dd5803d898f4 -a3f22409aa49c0a837b47004ca324a59ab3ca4d4b8c23f8cbf99fd72ddc1ec46 -205826b8ae3313675fb819e3d62a7a356e68f5b65dca8fc54e98982d9528a279 -7fce2ccf3eed85944bf571173c63b0911f1a34a2badcd67fb385468cc9d243ee -f66aac6e15ed9add917ec73497ab853675c7721a1a767bc75ddd2a959e95b06c -81d92ef8773b221334525fa10ce0829551bc0713d1cf062908c439448b56cb3b -526742103abaa9e254d573728e902bd053a9c3cf044a99e509cb73b8d14a8dba -05492c2dd922b7f30c120fc1159e6f442cab60ae23895d0318254e5b07381e5b -1a2eac1bd664a9cb018a0c68b407dd84b17c21457e0c2501662f434ee592c6de -8bbe5fb8aa2b88f398b2ab790bf10431abe91de30452704ebfb4450b90a99664 -1924960ae32615374b33dfb3669569b69cc60cef0178c38151c17887e3b7708c -e0a473b3edc9aca81506cc0962786ecfb6333d51cf3c3d01a4f4ea20cfab0b75 -408887aa9cfc740ca661a7edd6af8e0b17ab5713165286d2ce1882ba9302e5e5 -9f02527ded5011eabd72ce5ff1f12350d4e5130a990857e9676ac998dfbc4351 -800e309e314cf6dcf3750f3bb5467fb72de0b3afab584e4915ba93233c5e513f -d2f63bee7721881aa14a331c979028d7c20889115d626772b465ea0d9fc0c775 -b5edbc3f3e27edd6b46ab8c3a76b0245e14b755a308ef25a8dad6d9cdd64b890 -e169114fb7e06afe3b91ed8071c91235b25d4969ec9f03c1452d22b1ff2137ef -bd3d7b465154a1966f9b203e94c3f136a92faec041f74af4470cb54208ea6ab6 -c92560f542b85dd9f9b31e8ee2b5ccbe4ce674dd9be8492a161d646b77cbeb49 -aa5244cc402524caabf499c8f2192cc1a9fd5517105999a0338a3648ca03f9b1 -1b486352b68ab7a4816929d4d2706b5561e3e7c91eb5b116fd10f9ec9ea529a2 -e1ed87699193a44c174900fbf685f5cfa2639ded75b2e40fe9b0fced8da05161 -51fc5db43926292602db810b3a412c6f1ead6428aa7f45b4599e611289b31648 -8e9304e1da4d49d67d6217564a1bf74c887a2b595ed2f7a43426e1a7f1851c5e -97f591fc95625614cd115c03d8a3e2497b99c6b48510cb1e7f556e2d56babb27 -0ce9af4d3c3a37801e1fc28cf9457368737bd90d2bdffc8aa9e03ecc0f8c4eb4 -666936e527dc0efedc81a8acbb0f925de56566dbe14d187a862b43f7c56a438a -97331856ba272c57653a90a4276186d9f16350ea0f59def08ad5cd2d67316254 -efd0b990048bf4b88af600ec5faf2aa5369ac7c81c6caa59f8dd5c7dd29f0a03 -369037756c72ed98032589a86d9f31267c4932fd5ea2929992035781ef53788e -f64ba08a3573ce1f4eedf19744737486475480b4afe3cbf2ed608fa651d77047 -e6b016185db1503cdd5f17c8b515f40120f4a676ce153f8bcede25e0e998f7b4 -c9091b98d0364f599a783fb5ee99c24ccddc7bf77eef513b06753e26e2ba763c -fc67abc3f845719cad166be74e582eb74884345ccf6c265f4ff6623671358624 -5ea33fb16a4a4c4443c3d3c217b167e97c9c0eab334cf6f4f02a61a4d9c6f41b -5695fbff38e8d4d91733ceee4b1d93b642f974b510b1407d7992f02666d26ec7 -aba5eb40cc4cd100cd964df5dab0a31d07b36fa48efa64cf8c591c04381b3a92 -31c8f11150b820871fa64be805d62634c38a7ddd0855c315e32621fb962f7baa -44c9f56de9b712119335863b8e08652c9ec3cbf07279950b11b2eaa12ff17909 -40abccfd12674887866c008f06976d3d3aa9bfb4bf064e50bdcf3823b7ce5d6a -66732655620ea67c93ce77cfe64cd3e121c5ce207b6cb583fb317c1704034dfa -8d7d5ce9bc776e2e3f7cd965d3e5bcc453842f07fc539dceaddb5d2625078735 -ac550c310d989a98b4eb17ddcbab25e709cfb854880a51109be883d0703b8f33 -c64a47fbcfb7c1a336831f666b18a7ea57ab7b090e54eff27ef90c1795920917 -18ce8255e72339bc4accf7c4a0a832b3ad6d326218954b6ef1eb2b1c6e283fdd -1a84af455f2b88feb1e445278219265e36560e12262640f0b8c39d5823ec44f8 -f7fb0b0b1396706533621e3d3f1504f526224b9234c3cdcd1623c2025675be08 -89796843913c5bf74ad911974728626e2ea150b990e11027fa99ef57c7599702 -c0c8a8f3bd0a4453abcf0ee43b9d2f8bc691c5bf000c8d39a57e3a6061c7da19 -0332b98c25b3a5eb14181baf64d1ba6e846e962a5a3ea875ede2412419533f00 -0927ae15814e4fe907e6c002aefe845e32ce23a785965f87a4433e3d9cb40146 -fcfcf5dbd1cdf4cc5b00fcdec032af3383ee52d1bb019178b5d64ffc4735f4c6 -2350cea2f0c6c844fa492a097dd45af2692aded617e8a061d2734e40dd12cfac -51565a595b10c4c6eab692c7d1898bc887f0664ca953a4220d49585b6910d048 -bbdfcf28540d9a418881877dbba6cb7214e3adab8da4c2fbe47e395900428f6d -4b4b2f318199e3b60476b81d65ba33486d6581a95532ef5a8c4a6182756d1a5f -19a35a156896d16eb1cbdc3c71c34cbdb15b27fa08744257f7ab4df53312cc59 -5899050b9a1a484c6e7d7d2b8156c1adc9e65fd3a0afffbf77880e596dd4fe88 -70160f117e7f994f1d44d82b290b3412c05094227d953cd8d936253e70bcc45b -e679f3c37cd829e2210262691d4b4fd2715d235ed932fa7a4f3d6a51cd2c1c2d -98bfdcab79d94ae5a0c763b5ecf82beaa0346c55591333a2fe74ddde412b5113 -4ecf85c4f33f16870585929ff3a43ca183880c3b342de71d0b50e0caec8ac96f -84d6c65126ec6e15b475536b0cc310ac9f4b2e878f82c989f85aefb499cf31e7 -617300e920b4fc4c08a75760000fd68dcf357301c58a7d85d259456c19822a33 -33df916e8dab10ed7533e4a5cac1b999c30fa597da3fb3634b8c2d3f911ffa10 -c77152e36ddc54eb66be93aec9d38b41040fbcad8582789037c2752b45b95d89 -748fef565f2a0db42b2a5811388302fd3f66854ee861d3941f833051563adbc2 -ca1447923350863fbcd08df7b2014a1fc656bcc14549abff4345a697e7971457 -2fe7f47f74f6fb110ec6c19a820b9b8b250629ba3e1c5875e05b4f3337fb4964 -a4a4ccb5e2b3022070fbc8d443415baef77dc51cd2fc0e563a60ff115872eda2 -386b73b755eb353d84589804462783d6f2e47c88ac22149f64e5cbf873c41174 -7da691f652905e230e04457643f56a0693083c3ab6cd488d25b2ae3d4d093744 -4e7434e673578a3bf51005f94abbf2e2cec0c49bb157d6230c1166f890e7d888 -af0eefbdeb7a8c8e2c329736fb1abfd1c28a236f48bf45ad3f9800208e2c8941 -d7c2646791a2c6a9f77ff6b14d7a4cb1561ef7d5a1a4cddfa41490ef06be0dfa -4dddb8323a2ea2db2acf4abf56bf4f0cc6f667d1ffe303fbea1022063007e244 -03bb1e90bb071aad2256fa48458390f293b11cd33588cc1360df26cf9d91d9c1 -f5b300a063059ee65641c58fe08b5ed6fccb1f67e54cfe0076b02ca362a45f97 -245ed407e9f1931206addd15ef3784dad8d867746dbbe36bb2ce156744a87b3b -a15af3e3cb363c364563a81cdfcde7cf4161ac8896427d02328b951359a912d8 -1875b42c28813384ec0c949a6bc976f6742593e3c9a99448636568639dac3c53 -9a21cdc09cd7bfbc86cb8eda122ab9d6eda9fc0e4eb323431d002c6a8cb29983 -be023d9d52f147d73773c1f1380900e0072662ddde03b7c9d2e4db6368372608 -e0496a71c64ef37b03aaa37b039bb034e6a62ab9847c99bf3f9099a6ac828649 -32a248d723f9382cc93c76dcb0ec3db065bd6ffde538058914c02439a92aec80 -a66aed7b67ba8d5b75eb76e277c198f1f1c2f71565bc0c23d25d6437a7c69017 -c72c73f0fba4bfa80a5a046dfd0ca7a783d708a338ae2eae71790312ecf250ce -a7fb1b69c6c52f955bf1b7333972d48f6f479e96f8fcbf0ab105b92ea72d0613 -7505068b025f00b576831cd180cdfc27494245d75802ed8220d1dab513e5927b -083eaaae23ecc085b27d6ef444ec9fd98782e35f45b0347b55499af1e7a55526 -9ecd6b6b0b0aa2b711e5d3032ace6fee06d5542c686215133cb7f158c65184be -e20041a7d55c838e396b3e50030d4ac5c5831dd6cf3be395aff8d416a1cf29c5 -88149b83c31cb8bc45a3f900ba4daef0564564dc006c44009a8c5967f87ee50e -3fb7b500da32f03ab2abc380fddde8c875c19701d1b9ed54777f2a33030f1aa8 -def1ca0b3720e9859c189fa70462a3eb074bc25c2b97c2be9813f9dd887cf118 -6126db00de2b454417852b5ae707422cd60b337c63ba1acbdd549c79f0e16fbb -ac549022ccbb79a62e2fff0bcf1d99a016304e8349fe6c7782f868c7ecc3c27b -b81fa8c522d9cd26268c3606d529d8cbf039020630e084b6385ffe35d911bf6b -138a9afa6174affd18a6204e0b67c8ca76c229c30a13ee2de45e35631fc03f4f -9b1645ada82e4aaa2504df003f8c6f7ea621a0d2bb693feac0e68544e07acd39 -ad72aa50b3b9518e87763a52f92f7d2bfb84ebc5c6c7fd83ebf6ab660b5d39ef -3b8ad3d47743809397e04c52fb109ff9a99a3dc2f462db485b70068b80546b58 -a77bd668c96f83fecd4947ea612638502aa06285885913c3d0a55ed59fcb5717 -4d6cc24d070d554074890f9a30bc5f749220def451ed203fa509e245d0022dec -80185e5130ba4c2d55f2ea3b518cb97cbdb99c94b7c71de53416cf63db5662c9 -314bfe5972e405f56d9c64fed47f2403d9a369d9762d045c51a81f49f2dcf7f2 -9b4b2c95386371755169be5ac5c77bcd5781b0024707f89703390a57417224c2 -f3c071030c29c5362d86fe7b0d6fbdd4ae0d5f9d88b0b6b3f3ee624a06d12a3f -cce2f10522acd3b1627264a10d27bf4e4228daab35976226415e2b5580801957 -580b9b57d264ae556bb8c19aa894a68cc203a4f1c61b8f736c0056a6396816e4 -b325c498cb8ff2163bef8775f0374edee0975c0e12664f28c91122b2ec426e3c -bc4040b96af0a0e1f1f08181a125ff32f1deb1541e765d3f6c395d4dd72cf70a -0c8786e78251339ca115ee3f5ad2f2833b3299b88dd51dd6e106312b6d2863a5 -d5be8dcdfd3aa0c23442f5d9f2c52e26b7bcd93f651531083cbdcc8a1983cd9f -7dc0de8fe4a2e226196bb179f8b06c12041c55b3e8e8919980bc4dc1b7c40ff8 -37370003395291883fe84981a3890f0c7dbe8e528cb2a81ebc8af0faf17a9069 -a7a7c9ed225f696a36115daa94dfd10dd270ae15fe601a9987bab5c9f66b69fe -893345a4f78534651e6a1c3c3569ddb6f9a055e1bfc7dd93b698d98797ec1328 -a49c6af1fd7955f566b8ec99300711cea2d99dc4bb2c6aaeba79af44bbc2debd -d43bd144d1d53b6232dec21840790213b586fc630685c69e438ef6d245019c93 -9b506df33da438b20df1aea4a4e5c246a8e6e5d3bd22fcfee85566287ec4f7e8 -8e33762e9475279fba8c2a21b334d6f21f189dacad1f5df0e6de190418609ef5 -9dae7a86830607c5eff55bfa5dee90f611d04f634b19b68f3ad16320ab5df8c4 -ebe6a153b8aa346060bff0f079c765f5b007d5a480acd201cf21205f3999697d -23868cbea55866d79f3f44bda0140212f0790f51dd9c8d6c1b6eaff7443241d7 -7ae286049962a7a2df2f86d77817eae276876498128bbf9d0bd0d8afd6b7df05 -640a58631d71a56095d048d54e43b95e2f63a09e36286bf5fc9caccc3b353eaf -3215a65f0bd46782fa6eff4efbb0a35edfdf715e7a0cdfba50c6ecb72808f1cf -e2fe93a936c821c4fef275c04c4ce10e503216d92f41dde7132b70e78ee27753 -5eb60b276faa9b10b2c485b6522741889e4d80ab8adcd269e598ac4fb359a4a1 -ca313b71d5c448d32f7828b9c0854adb69d25caf61a7fc418e524167ba324abf -78995886c0a6edfde425d5e2171de85b609152f30305138418f76f9c3d15753b -0b2716cf8f9c412e553a0b7dd4a3b1aad4c6d5ea4f18f55ea03b91305e2d23b4 -96b5746b9060aec17db39fdef6466e99c99dbaaf458d19a5290969bbd1241fee -6f8d49448d81521655b7e24f5c4d4f60f8d136d4c62af41ec98611a04a0323fe -51671e40ce6a0ebc879ca0823b42ef74758648a09bb7b6491ab3c87860dbfa5e -1c55f515d43d55074764dc43d7fa8c9f -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark diff --git a/client/nfsexport/lib/fonts/couri.pfa b/client/nfsexport/lib/fonts/couri.pfa deleted file mode 100755 index 2822ec2a..00000000 --- a/client/nfsexport/lib/fonts/couri.pfa +++ /dev/null @@ -1,1893 +0,0 @@ -%!PS-AdobeFont-1.0: Courier-Italic 001.003 -%%CreationDate: Tue Sep 17 16:31:02 1991 -%%VMusage: 56675 75599 -%% Copyright International Business Machines,Corp. 1991 -%% IBM Courier is a Trademark of the IBM Corporation. -11 dict begin -/FontInfo 10 dict dup begin -/version (001.003) readonly def -/Notice (Copyright (c) IBM Corporation 1990,1991. IBM Courier is a Trademark of the IBM Corporation.) readonly def -/Copyright (Copyright (c) IBM Corporation 1990,1991.) readonly def -/FullName (Courier Italic) readonly def -/FamilyName (Courier) readonly def -/Weight (Regular) readonly def -/ItalicAngle -16 def -/isFixedPitch true def -/UnderlinePosition -100 def -/UnderlineThickness 50 def -end readonly def -/FontName /Courier-Italic def -/Encoding StandardEncoding def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/UniqueID 263787 def -/FontBBox{-48 -288 800 841}readonly def -currentdict end -currentfile eexec -9451d7e7a4929782edaf756a2645851dbcddfea354f61d8628b8cff733b549d1 -03a6c4f5bff18e7f42cc7ab902ffc194c26f5e122df5e4153316cf8bdd34f70f -7f4ac63c058fb15bed425f41d00b0fc3ce2bc7aaf11938e1e62955f527022fa9 -101fa95110e14387d94d5f312dbfea32c17f8467e82d9c3c014699e7ceefd421 -346e8b03a0eeff980f4119e6862a5e4c2acf990756a4c25f41289ed051a09703 -966cddf3bb9f59d54985d5473684443849535c5c052a1a9fd7bd55f5f76f6e3f -f7eaf762c3144175458d38e0c1cfad096c5f759c52459a0bceee202940109f4b -7e589678aeaedb32e62789199f908ae2c370138de2b7d42d9fd5f24a1a39526a -16f99ff43def7d9cc15cab7bd4984a978c5004eec4dec999af4f79cfd01ef149 -746140fcbe1dd3efd7bea7c6ad6b84229d3836f4d7f5714424c21a13a941181d -cef9ea1d136feb92b96b3e3126d9529878cd620a1fa3e4cde95853533f067ac3 -39f288527ebc6ba9eac0e767731a02705d581144986ea6ac8eb055b550ca00ac -d031813c1ae301f907efde4be3eecfcb4a5928013475debe556f045ee0df78cb -cc080be9c5628a6254b28b146328f10163a09a83267de2cad5115f778a369cbc -84fad9d59d6eee9785bb43e2c96d13476cdcecb6560ebfffa7de0cf4662b3490 -36859bde1974b21efb897c498691cfa294b724a58138e92e4a32b138302362d6 -784aee399bddfe6a40ac7a1e473d9eb34e949ea7fc42e7276591218e4237b50f -b02bf78be202b0972447920155dbcb8fde70e74df1167fc2ce02a96fac4fba92 -4aecf5f4f94ced70e010eff9147c40fa6ee88c7e5b06e5f761f2c222d414cff8 -12999db0535504f922a533c7538d77239c45f04c9c31a48bded20106cf6d885f -1f428e2144d399a8e589c3790d572985a9b26876960e31eef7b8ef5430d391da -9618103b8d95452d9ad4fb2df2fe324500e205f5830649bb6688ce7b599dc96c -884d0564a73d7a3bb2e2aa12102079ea29ed01340ea9c2e6cbdab1b2ab6301c1 -815b16b46aa4cd714d2454c81a5c65fe62bc038c62f3db91431361a832fa801b -001999d79ed82fc813e004b875f8f0b69764d55966952482a015cf67587f3624 -f0e94e983980c9ada89df75eea4b6f3c0fec7288b07a51bcaf9b50b7316c4c22 -65da826d30372d94e3e01067b305907a6784fbd29b427dd950a27a4569c9a93e -b94d553d5698f8f312e015cfbb4e411a521ce2f0216f900eff711d60a21e0487 -1191cd8a870bde5c7d90ef2c52ab892db301513264ae73b2213c6eadb474d7b6 -03e6fba747bd5532515b9385eb4da75f6acdeb8d5225f01745158ee38c574b4b -842962be90df91632ab92fe2af21f8699e670bb3ace0f4b1e5f252f8a9e836e8 -baffed5e34f70561ffc24a440bb45129d3197476d9446d4d15929d957664c3cf -a3f238ba39dd636376e86414e7b1efcb42a6079e1570d987916d1c0e3abe739d -bd70ee831509b8bd6276adadee7fde2a39b015884f5a8dde60fb6422a00dddf2 -84839f70f58cd9674d2a5b3e6608dd892a76425f4a719d999846d53ee1a2ba19 -fd0a7144af29d774ed2d707e6f5c409dd262ef6a1a76ebb0f326165e41578203 -492fd1817cbfe7c20e4e71ad1e708f72aec944f42e097cd71e75e530b853eefe -3930ee67d4765fa79b2922884a4f54f5ead4f149b3d7397affd32da788d33c0c -34c7b6b747685680cf8de88352869e58aa05405f2100033aef8e07e465421ce6 -1906499e3a9219bf545a2fc6dab9363c51d28778cedfc72a14124bc174868a5a -6b077a5bc3fab24ddcdb66ce8f1228f2e8795ca00d158dd85b6ce80bfa2c5b33 -54582dee7138beb45b0b795205263cb3922fdfdff57a077395eff212f13dbea7 -595159bf5fa6ef014b84484bd27d8cc405dca16b6aa3ed6ea9b0b69ff2b160ae -c0af127322c7f3bed8b8089f9bed60aac6877faf30db93b59e3f99f751c03174 -37135c58c3c43e95681e4254ed00531a086de8fa24f68483db6a97fdfd3dac5a -6e0296b4f2207e2c301e3e424e49c7c5e98f48bc1a545b3a1b7e4bd5b6829f20 -0e5663995deb31543a56990850f6614abb032a91994f9bf380a8d0a22f6e19d7 -006edb7e5dfcad6e01b9e3d791fc9326862e72aa717fa3b68c537202cd6ae9c5 -d81773186a4c30c5a95d86e6614e30eb630690c78a40eb87c08e6f679ff4f862 -25dce99ad158f978b63c037b51dc5267c11d2d46d5823f429ece0d1b1e5225ab -092cadb0c5ac32d54404b1dc2b6b340e7b2d0b478ab13a3e53d1f365a50c515e -8d4bec663f52a818faddde2cb9f05aef238b5cd55a29382faafa3089d6f69379 -ef72942826fc4742e7beb16a452d0319b6b3a3e08bafc4f69bcbe9dbb938e768 -b392c9755bc00415744c0f850c855a1ba009b1e2b3a8c48ae92e4b4d95bdfa30 -aa0b6e310854ce3137885f88f687ba590220d27378d0ea52145b84429071ca41 -fbc3d285a49c55f32cd0d31676e36a2bd406f33a0ad837af2cf35602f9c6921c -9167ef568466c90308107b918419e3245dbfba44178559abc36fc6c1818aed6d -91c79d4fda4b4b2a47c068a11bbb899ae064327238fe5b4816dd820fc81a8871 -40025ede257cb64429dd34f9a1632c60eb44f3b24799a8d271b5059b45092b23 -a4ada866e017c76c8f7f701a37169fe6404a9c2f3987f81b9d13fcbadcd2505d -2793770da0f40850a837fa1ca9b6aff2004b92c5ee6fab82895f7b7b584d704c -94345ffb2f055d296f79fd2adcb5b1c1604290913b8df0f49df05e637266c882 -c0aab6855aca04b6bcc488a4b4cfdd8314b932f50e5d2c72fe4551390098da93 -060d3b350082b6950e7c9ace10f3063f9c24956cc7312ee1453defd2618392ac -b8c970cac9a2caa289639c4a3540fde6851e0801f5fe97b278e42280dce79568 -a4d459defe3682ee830c395e0949f8b0e90b43c5c1081b02d28ada072e63a5ed -6bd693ab68093e99730bad8499a55fb9b50c8a1b7ff3e01735077552b1f14466 -d86462a79e3b965a9183c0539d827686ac0c0c828448bbc999cee7545e6ff564 -24d47780bc2ccb4031214818681f6c1aadf6fc05ef40feccae7a672c83487458 -694df4bb1aca47b5d7922e55fe29c7df4e80d6e4bd4b79402e299e98a89d22e5 -d39073fcd45c50d08224481a9da4ec0648f002e0e9ae733d56823c9504a467c6 -325b8c959e79a08504417dc181116ef4c082394ac90814e97cd63c2b591eb78b -f78c30368cfd3ade41f83b89dd6ebc2db9bdc9e62c40db51eeeaae3c0e36ea1d -153f80beba54c411b75852627f45de38e320e3fa7870134e7cd41e355fc90aba -3adc77b781ef03e67e49a0a94c8fb24f7b01c6eb37fb38cd409d000438b39296 -dbe1edf020ee046411bd70a3100aa113c4be50f47371119570c7b5a74fa60b62 -ae02a8488a26ba8b057ebd29c3dd1d813f29c85049c86d339f32f0ed83b41f7e -92da22abf963abf1afa56f424c127a23e39a5a2213388827660e1c6a1b016b9f -834e6eb705a69f7ed8cc981c651014fb12c6de4894bf36a317db98b870d07409 -43144994a4be0cdc78c8b14acb0583b9c6ae0286cfc355c2652e3ce38e4b57d5 -da616ade47fb63fc9ca2d00e118de2f9a43a18d5065c91ee3b57cd05d5ab7dc2 -3cf8c1de80d30a857edf235da528370b006209854fb381fd693bbc060936639f -3a90ffbfa38d497c5e04bc92ac2282064ded4f8b48a1f0684650e8ec7aa8729e -cbd4f167f3d6fe90a095ba8f75f03a60cdd5bc4d83afe96faf8e8199c4211e57 -4f7f843cd927b2581aa05b07ebd916989d980e3dabd8140e200de167e0c81f93 -bfa47a97844c1a663bbf1975483989d9357229ab5c774d4222acf58c8da0e891 -a6068bebebc3baf1ccd312a45ac40706486735db1fb8eb68f75de2ba3b640fce -39934712779c7a27ab2ad4c3467b0d00f48bd23c32b3a2c3fa9b60a26047d7e1 -052d1d8c316caf1be1bac044be3564604892b7d33202142e1ce3d5952fcf0fd2 -faea492b74cdc5112ab8af4dc17997831d98b641d39592a9e84b1d7981c413c7 -63c3ae7b07ee80199900c204b54ce8e28ea28a7efbf7f7a13cb9122ad020115c -ad375a74983094c289061e23d54b8ca38e8a1567a4a44ba1c1f3489647faff31 -45ba870af754402bc3ef934ecbee92735e8d88f0ed1097247e40257c1fe188b7 -b100222b745d457d8ed2aab04206dd62391fa2dc7b3d728e10405c9b5cd93bc6 -afe10b476451d3edb361a090a6c32b8180bc02494e01ee684313c171b4cd96f6 -4dfa467b45577b795deeccc0701c29fb665e8a20d04683592f7b3ec507cc8d74 -4072115649b573b99cee72393f788ccfc8b6739ccafd4ece7f0fae20ded802cc -ce4442beaec97cf0b5489707eb9779e9f72b5f55b314e26422a8019c44fed234 -a21f96b1b69f99e0a265c6435bc18edcf6cff798bdb0b9bca878776b925423d6 -0c9941fbfe4e374a51b4f4ab6bdfe767d3aca462d727a364ee60360248c54769 -7b3cdf8913a78f4ee0ac72369545b36a8a74ee785c1013f04ba3a482815af951 -703f3f3359ae963f49d1df66cdc5d47010cd3765e29b73702f9e0b687207b8ea -28ddb6a47c9aac53b65fb50d86cf716c68572a6e9223ffa141a05856de949f61 -12bfc258cb674114f7a5afed4ac2d75e5ee8e5475ed070342c724be8a8e14474 -b044416541284b470ca3360ad99898dae8194581749b1d7626eb0ced901beb7e -33b3672d74ca975b910e81f14569c725b9fd9bccea96bc61dfc6c3fb2f490e64 -97c6a20d8ad2e065a697ac178f99b174d65c8d082d9a9fc937bb669c9a93daf7 -c32d165b09e1b9a0824a3072990cf9ad7103ebcc6cb30c552ff984600560d2a6 -ab1270bed37af4b8b7863ed2d10fcf15a88fcac28c61f1e9f97dce05200a9a0f -291b4d0420a6512e6614c28457bab7007fee6591241943deacbaa5be0edd15f2 -6bdb59adeaccf91b843bad3ad2066865c7736cc8b4eae5a1ebd3009802955717 -0dfe24c72ae5da4261ea8f9070ef1da48ed288e22ddb060220f6822595ff0208 -448c931d2c6ad2e132fefb7528de2b6afd1c6453d798ddafb3eeaf906f972080 -d9dd4539de39dbc3654ace2fbc914ffea6bdb35aedaed3f5e0717c0fbf60f167 -5c9755485c254b6106faa14c995b6043d073a009572dd50f5054879b2c75cf3d -08048ff3f1957355bafa70ebdb1aed4a7c0ba38648d193b18cb83f90b2610cf2 -df3f4c96a25dc64a341e253cf2d09dbfafd95f562826cea8a85c38d76d0add80 -cabd96927cbee4a1c16d89aadebbff0a7e2632e25e1b5d82132527e4f47106f1 -0416aaf3766916ce6d4ed930fb45cbb2ff6d606323ea3557fc29e0403ae664b4 -434cf42973abbb2db64dabaaecbbebf16547396e751138a24ad9d5c3475304b7 -99e85b57b37ca1060378c8211a99078f8b8e8e43e3d191ef85f4b7a7e7f11898 -b3eeca83053cbb2e5cc421429361867d6631d5eb3c2dfd890f74b504cfdd2042 -6ff193765ccf5ae1c820bdcad46bd1097386d02a59360da1e30b0167e01557fe -4360050e15ef77f236c833bb7589b6e335d3c7aba5f90baa924d725a7335712b -4549bbbd20c12398b8c8e8f7abe3104c068ba6db673b81d9532ba41b8be616f0 -3350f14644713b17482bed129bd1c5c2c4c5c3924e90918ce9e7262701e314f3 -cc8956a36219aa6b3c6782b7fe6c91af6b272f9936ba0c819ec1b0fa0a8616d7 -2d4a63f758128e2c348c083050f06a0b6feeb189ef7a000f4ec552377671b0b0 -393c66047a5756d7e9ac38c955d3ce583f94e50b41a0a153961ee049cab60d85 -97cccbe0686d23140adc2fadbecaf085d96d31a8358912989dea8787c292cae1 -7d4df00e359d791cbc932a31626662e0552f79b396a22adaaff556326d508275 -a2bd744f4583dbd8c91c8e89bb70104d88e2faa619020412a91fb03d1b511c78 -ac048f87ae0ce52eee8161a84bd9994d8c4de132a71d06278e80d3fb341ce4b8 -49a4856f5d0bd770baad7bb1338449aba330590a9784447b363872c1a2c7a390 -101e4ac42b1331daacd27aaf670b13b29da7601e05bd49cd62787644ef6f6ce4 -c1e67e3fd2a3923281faff11ad358e756d285642be31a8b36fa372b6b826ab34 -af6a9dcbd37aad998a881b8910552cfd53a03b2ccf128fd5634b30279b854a7e -c3d87c27da01113b2e134fbf0283f00e6bee34291027ebaaa310a6728b98a2f2 -40fd33a44caf62306a706b5ead4f7e16ade438be5d36359d0aad5da320d98657 -9fe6af830b8bf4bb32ccc46d56f48e769b49cb6ce9606bb0f32309333e87ac82 -91f85441a72bd6f6adc4922908aa822dfc4ec0e95123e35b40f72be615eeef40 -58ac7c03070bf65c5fcbf8b7751a4955985fc42ad26c6b87433bc98f03ce0f8f -51c1e63c253d32f7383d02c5b8d7c57aaaeea850f13881972fb594fd74b57d63 -de373261225149e899d60daf10c7707a6572e5b61d0cebf985b1fafae29db8d4 -e2e0969bc8351d482d270d93c6741eacc85b53b3fcdf04a931776933e36f8009 -0d15d03f4c51f27e41e1b09a233e78b95d50bb59f80f025e497494a35168628c -b69da174cd860bf66879831bba9cb20df1fe8a005929b8657ac38e5518b94ca8 -ddfa11cee6f424446593c9ab1061bc6d7d285b4d2ba61dc734f23c68165796eb -48bb353d874ee8b354ea4ba245f249cededb1a45eff353d3b24e6ae36b4bf29b -f2f0d4958e8652c90c8607ee99d364525ff45ed28b2cdb035f4a921ff09f7fa5 -a0fe308f9322bee5db6e8fa9c1b928c093c9e3cc21d7f914209ae12fa687fcf9 -b143b60d1b6eddbabe07324398a4dd3b96b38637b979ffdc844712bf1457e73a -aa66b914a46707ea94d87bdbf964c736a72d1f173b5ca8eeff1aaec036756e86 -2ae63b2a05ce9bfe44dc59c91046127522b37dc99e1a0a40f9189f2041e6d3af -64adf60b14ccab5b3e0f19075f44f0b24bfe305db1a8cc97fc268136462fe36b -c18c54f419fab7c9e6cc41ec5fb01970cc761cc5439d32f2d05d7753934bbf7f -9ae1abc694d25e864601aeea52cf0393a8d99c1e278915970019298f21fb1eeb -253ad932b9ca86ece282690e7cd815ef823dfe706e31499b3200983d7b2e1e03 -ee85904457f4b67ecfc10b2911be7935059375b5e1f4a59aae648dfdadd37d9f -92aa32dfd4ad6aa52709ba37237b9ec1c15f089d80306f4a2f86ee4e53d43177 -72139d975aca988ce9fb925d4e8869d9bc3807114c8cff3b89aabaaae6c004f0 -b47d29a951688e253d4b9edeec90537929563e134863a5bc5b14b10c7003b172 -af367f7109a0026ccd1b21b70d768bab9ca649052944b5713df04fa2c491ced6 -42abb041b7dc3afa5fa54a1bd682f2f4fc11028e2742e4620bb7f7d2b6b3cb04 -2cca29b6e140da488a6c015a5405f6a9e87597934bd2eb54ff7cb60b457e3125 -75d1c1fb0e2b263cfc8a36be85418bc089c7ff09808906fcf9b2fa33c37926b4 -2ab5548fa99a68ac72ebed94f9e196ab78661d1603829f1077ed9667f1153b5f -30527f64b47ead21c8971e649c6f08930b334c052ef16bd8e08ed918b551ff1d -5b06e6a02c22c325a36a628ffcb7cda2e204a09e6c029dc837a1220e728f3a26 -370f833b16d3a24510de53f83f6295853ecc202053748399b8ababc574b17fe7 -d543ca4269466ac9b2f96a5322b1b2bda825c483f632dca511240c9ed233b5f1 -ecd258867fa35d43126995a505ccd4bee92964493d633dedac48bb516eea368b -6dd30c92ca794affcf72cf93efe15a5d5bb730dc2ff190b35e7805a6a448d8cb -91095447ce11dff34debfbd18e88940a93d2b35ff12108b89733a4fef8a8aa09 -4a569660e66793ac5fafc00dd26b07bd1e8a5db3de4599153864cc9c9b5b978c -939272c070947643f999070239fc0489e4248aa1ace1111fa45a02ace8924393 -d8781113740c2666a2a9338023a4f0c0ffa4c304bd96f04a93edb7b6f04526cd -6dd6125edfff5a3e252aa049a974e00f62c449c68a6f636fc56abcc3ea957011 -d2ed2932c11f93a299f9c8f76a99c166a8f0b3ab07723601a5360fed33dd9af1 -f9de7d2e5c62cde83a485f7b701a1de173c6480bc2354328736d3012ff4026be -5f4405e71a1f3c6589bbf93ec9b44e9172c872a23190da0eb8783d864a55b073 -c606eccf6e032aa395a025593c00c1ede21490d590f75e07a0ace72030a03103 -aa6452a75de120ee0e87dbc5100924a354d9bd59b45eae1ac3522f1560db9d4b -cea57007a8e2efd9eeb415fba88c17b6a262608e03661f78d84d10d2e3ffa3b1 -a6e22f64c77c96606897483c283a61b6eac19867f8ea6d30e7ab1c8426bc521a -9c6d95285ef146c3f26306048c0faab3ce8903141ac00d34188adbb2943bea3c -24ada2b77c2fb234ba81b18319141d0f66ed8f030b9488b42a8b77a9ea818568 -33e52373e4af68063a20983f7ef9650b36d756a9914e19459ca5f73de2aaf099 -6b7a4feff0cb044b5efdbe79c0f92be56c034f0837407936c61cbfc5c246aebd -bbd6d10151ff96e6c9a70c83c252caad6ccb7dce8f8daf0fd9369fb7ca917318 -305553c4065a128d48e72c15e73d342b60fa5cd5cddb4ccd312909f3aa74c6e8 -93e4d03dd5f14ffe7620fa57fcf052edf14b24946c3298ad90495d4ffb1a3efa -fa2a7fe539da1eb9a1caae17db4d791f82a6f7549f1bc9c8511c67fa7f9a0c4d -0e1f6b499c20ca4bddb2d01331235306174ddaa89fbba3940fe3f0d90ea99ca1 -7b6068cc3a067fadc54ca07971fc760dff6c379e0da34213efb3e31b8bce103c -b213d370e9d56a7d45d717ec95c147a5587d8fdc2dc5a473c55682d8e6ddf0ff -99b84ff7708d0861ba2e173cc1bc5bea35c9167f434af0892b36df9185858494 -9a8c30aa60f56427bc62605639c1fbbbe8b3abe849cf9811dd91e51c7cbaf230 -2de453d71129891f573111286f2e1e3409d655a5aab5b711c827727a1c2b3a12 -3c6e267745c9151e4f68fdc8408cbd61e2415af33491dbcb6213f7f863a885d0 -a0e22a64c414738fdde20b991e8535188c7fdfa2c4c2f7464996d39ee7a6e2a4 -edeb319993ca59cfab71ea429df70d7c13003a14195491f38bfe9ca0e847d5ac -5b4cead59f46f9a96e9d2da356764c8f9ba7f28ddc44da1e71aa78a1f37f4d65 -67d089bfbfc5905d0d9f8bf91d59fb36368ebe6dc98d2dc30bd4dcfd95f8a7d4 -5e5fcb994cdf902dd0d1e1c6811da7035265c2500fc841b593581a685348cef3 -e7194022c27ce9b6e6b145c00673ec1b5e3b44c591b624be9b98af5a2047f91c -ecde59fe67573c7ed7059abfaee47366095ec644982546b7ade8fab0405df825 -77a1e716f6c5ac53f6399471af444ab647d20d73b56bd4f691a1af23668676c8 -7fbdd5f36ccd0b511a3ddca6749aade0226839bf535c49aa48c8f77b93a92502 -ba49d66c339eb423849595aab668a0fddf1f05ceab7aeb0b07df1f074f5379a0 -716aef2d1ce011c7f446af69375061b61ee2a5d53070c700cd61d65a19699654 -5749531ead8bab91300d32155699a97ebac94fbb074c047f0891dabbf4efb01d -183cecd9cd90e4276a8b706f851a9545e24b979db7a160171a647ce1dec9cbe1 -48c67575c9225276534d4954f5bb7980f8ff64d841441c358c2fa6745dd63377 -fba23fddfedd38a275d953dbae7f499e16fd528bd167e35895d92ac4a43f1390 -d18c8df01a18da71936f4f21274a19fc16ac14676e9204874dbd4c5375d1761c -26a48edba84acea46018cc75c5d394f5a512ee51296607e8dd91cfb635cd52b8 -f789fa9efafb8ae5bb03f7dbd997a9c935a55cefd104f0f9668ea3682beac7ff -68fbd047a47b2f31e775bb7c014aadf38448734b5077843ca1b0c170f212110e -0cddfd06af06c11ddd5d77f705354f6bb10c132cc3009c229360799254319322 -09b3f4cd6527dd7843483bb59cfccde571e7f0c3eb1097227206846f4ad2e0ef -20ccfa79a259dce46351f57e6e593ebad5bab102f379b3d092b4562a3ef7410d -c31c4e65b0bc5db4a9e62744f222f389b8367ec3b98445d18ded8ff88473ddb0 -bad0e15f159e29f4498a68f566e7f9cb93b8d49f4b896323a364bad3260fd5b2 -18de9ef59b9d86cb2cc3d909ce04da0711a6e609ef5766f00c21c1b0866df62c -1ab78933e58c6579b1db3f75f59063ac680a2c71eebf9eed664d261926a448f0 -597eb74549a6fdd03986f8c131436cb4d1c0c1c2700a8be389ce3b1599710199 -5f24a9b2a41c0a3d2cd603b0295d93b8353bd96266da252e13917a0559b1b17a -14f7d6bc5337a70f25f14a530d10a10eb00f9e3cabd9957394fac9e6d7af4f42 -c87de4804b581186ca91a8be760d4b95e605168f28009c8ac52e043cee9076ac -fe0454370fd4ed08294327d321f6f9269c31702c9e22ad65b7f1d1e5d88ed353 -a5c22be5a8bcc628d35532eb0be85229e66efbe32940d6a0deef0af4a712f9bf -bc42144f489e4f55d128f3c190c0580cb73e1f8126bd9af51007d29c5ba37bf4 -193e55c40fec90ead412ed8e67ae1706487b8b99a0053287a67f9394924fba0e -66befd41f5984d869e86ecaa2abe3bdcc88f0a293d4f8d6fededada3c95c63ca -f315bc533cf7684d70a535397e0a365e51b0ddcdc44695d64fca2f88dc830caa -520385dd0189477673c12dff1a8a933fcdd35ff44b378054a388659bc7d34b18 -747e91e762106878133ca087ba8745055fa56b7d55be79e87d1b5393a1e354b9 -37ca1ccfed929827205fd7f4c488c9771c4ffebd7ad282e35781db53a4980232 -36afa1c8285393b8babefdb39279cd7e81f552b60789d4b3e75db380e5f5e146 -bf710018254463c6fd3afe5d36e031d8aef7466003a59e02b9a33d47a984e10f -1467571b66c861dad8df92ca1fa8258b2e050905f754428289f2fa21903569dd -4f41d32008714e3274eb89df20e990e1f5f8e374d9a02c1d6bc259292c589a84 -b1627573ba844ce758650e4b06609876a3358b42dbab955c6be52033a353992e -e992e1508ad495437176290ed1cfeafc4f810d1127ca707e632aa22a2adc7ce3 -fd75385bc5b0b0599d9177f2a73228dd510bb6136d02bd456f8a4a7fdd7b61b6 -5beeb68fa6d07ebb2f326a9604a45dd1281f2fda33a2e392f61c0b2d358539db -8abded8ac63f5bee429ecfbb646482bf5233c568d9808d2d6d1223262d97cb67 -cad55177ffe979dd3d75f23885195d30e1052932f9b0f0b69f56d20a6afa3e7b -716383a3af055c83d81350c49f3cba01202ae59fc4917435fe2d60141c4c9b4a -10a737b86504c8218ce86564063ddba7e1f79d348247fc9a0e66ae45977943b4 -33314c4d62945b734ee2cff74e2251e57bafe2d7df36aacc16c4e7e8317a99f0 -cdb643fd9bb8baae7554a3ce36f46203bf90ad04d4308182fbe1443e5d9b06d6 -0f690e546f14a3b59e88c73f8cee9e14e933870e726e57b24ab26a42d208eba7 -6bb854b2616ea206249684c7deca7a2039cd56a8b61516f4b804a8e7cef8f7d4 -64d43dd5addb534af596e512989402c18e23ce24d71084f38ab320c95cb9e812 -d1b1e0a5985229ebee8c939a4e520e7a6a9509328969fcfa8068ff6d7d0b2554 -2a1692872457f852a723db78280fa52f7169b8a781429bb077359249e35a456d -70e023cdcba49da955831be885c3cf2cc5f70645c66d22ba02896edf191f6b39 -6a475fa8ce12caedb99f36fa1a152bcf0ef1ed857bda26d8fd95a8f47cec70e2 -7bc1c1e6b526ab9f65b0dfef215e559f8e83b2fab3bcd7a84805bf30d6302b12 -3f04d1df11fa76fb79a173c3698b9c77a7696c96965cc63647dd5517ebc07c65 -2bd13ef9ab6b4c85f1138add1aca375e3d59bf5f706951a378801bc3aca40f34 -b3803a4ff311d461c636c05572e86af42078ba9e791887eba8e2a5794a39e119 -1eabbc368e55362f6d07a4785469815210cb386fe46f837187c2934158c4ab17 -977a1a7c901ae294523c2876955387f47a44eb4eb669e05fd34a07eea12fd6c1 -18e86e83837a76ff03f38f3ac579489f2ff340b0c3ec3bb0f2e57c226dcac005 -fefc63ec5047983995465ff27efc036e879267677a8ec92b6ab89c5cf347d25e -68ae8eea58c00884e4061b05b22e8cf4eaa7754046cde1ff34ba093712179848 -04b598e20ece471f32f99b8dd2cded970c6aaf98250cd2a93ef2b539fa7ab354 -27c69e31bfcd9e7a5003735d4a477051fc41261e2fd14cacaaed091a2928cd90 -3808bf6f43f1c9c68bd3722eae14fb308786562abef6bb2cdf044cd8b0b26518 -45a0292d3f11cd9deea8197b2d5a33cc78d2c9e14a3289c98eefa1b1ea91eb94 -fe8b9e0c132a0a3cbdb70c9ded02a644b31cd766bcdb7508ea1f1ffb8a9f9a04 -f72a3dceb6b16673d20a6b7acd566a955247ba287cc74e6007362553bdb98102 -bd5a1a1f8df9e1c1adb8f290f659357b592e8a325ad1f9cf74136b576ff926f1 -f37c044961104de93de26a01a2d98b8aead9e113c47e9179e7ec06aa5148d1bd -d00f415d4aa5a94293f8b0266587f463ef0db2d7f10749d072faa586b674abb6 -56849caefe4f8d74710aa97549103a526b89bc9d286f0f0b400cddf827afc178 -3ce120cbd1e6bd83bdaae22dbfe752158801c42460b64518f8c7a374cb23617a -3ec662a90c324985c4693b6e80b88aa2e96f7d35323c0999f56f1f8db37f9448 -d6214fd1099b4a73065987a236a4353cb11051c1ef75950c2c03647abaa98615 -55907189bf0147ff0c5a2e1db0627cb316fd2e6dea8f8c9b34fd5a58ee6a4aa1 -7191e2b5a08818b72919af8173fce5863cbeed9b500c924a55e58252e710c648 -d41fe4c020c0fd607b08a4969f3fc7bfeda3e20897669f2ef32511e08e9207b7 -305e9723c52a16224e8d0f1bb7cf6f7b687aa5bfa61582d1d07e980f91fae736 -8b5ccd687da89c884c5d199518d0fc9b0e424e740aa04cdb52510b668c09a3b7 -ea5a527074cace5b2c4aee3c846c383a1c9acdec4a0bcba9e0b3d05aa81b573b -14794a9961ba4d80b4f308cc38f89005120bc284c67e670e35238a3a72498be5 -b84a88daef4ab123258918a4bd292bcfca94049ed9b7310834a0c6d1d1b4258f -e410beac79f5d5e2bcbec6206421358fd7ee8d5090539dd3565ac9cafc9c2768 -9d84a692b06601008390986d834cc44e0bac0c773b099501c02800247a1c81cb -85f8502e773fb41256c84725fefc59c6f39b3696ab0bf812c3ad445193b9dd02 -1efc04c8a1e13b0c6161134fd0679c029780537d6e9dfc33f8b30b2549e8ee6d -360d5bfcfcfad3083805e8ee6a54c4802c8e6629feb6a291ec26c9c393fa6049 -aedc546db31ab6377913737976822d44ed7d41325146f691604bffe6da0ca977 -821d9f2dc65e7099ad3a07b3cb2943b9d8e5380d8287a787de997ce19d37ca09 -2594b973b56e58b0d14977b4180f9753c6ba97e5de6f268bd0d9c6a81009d3c8 -1a0bcfb206e17104f491ab5a736429afa5954c1a65bb7df664b7922c4bd041aa -4a2a0bedb4fecc36c0589e22d20f961c43e19aaa3f372bf4536644c19e0b4922 -baf7b50b04b6f7e0a6702cb7972b82fdc443ffbd22144dd9a5747801c587ca08 -815578b8cb6580c773d297f4fd1c087564a90bdefa63ed2eea4d44a728c84d89 -102537f5fac46638aecdc4e07ee9bfe2981f5add3d96f49976bad8fedec4bd19 -b352cc3f804a5109f058aaf9bd6fe1808166155c89c73cda60287c9f00e234db -b787860ba0e02ed0ef5cd7eacbffcae54064cbf5f0ac568800689bf02341cfbe -aa1902087ced298dd82db84866ed704b83fdb7e28b43154084ccb8beb437703d -b3a3215417039df5532da395a2d5ba64f2c19354b5541390d58c9ad230675e8f -0ae43962fc1a40aee6906e05a517c949eb03ac9763a33c232b3fc0b728111698 -685cbc993a0868b467bf7df14645d70739bad8dd0e3b10317ea9df08ca9208d9 -b7491ab3732fc730bbb33f062662db76df5622999109e566e7470d2d3cfeaac3 -f7de6b3d715ee3055126843b4a3d0d2f7f4e671da66a2bf4eba18fb4ce3abd5f -2fec20771e3647980766da5a9e5618a36e0c1c1b37f0e2732c7e0db107cdd357 -005a12ee4449f8b57573ff8b1dca68ee16875845ac77e89b8d3ff57d046acc8d -6e8930a8484ad26389fb6dbf0df6ae8b1ed9e689b6dbf205e3cb24f89f54f6c1 -240c693a1289a36bd5d286aeb94452c7d1238db5e904470bcf411db0db9b1a9e -97684013ad8e8377147869490ff59cd008c5a5104d08ba192f96cf9752e3754f -3e7850bcea027eea59aef4b18023f4b364423087b56b4c22e3942d6aa6a16300 -08703e93bf8a55509284cd1776b0c8c40777096ce1dc9aa6b5fa28e8a0030d39 -a9b64b72bee43f829b544172668b358b3cf3432f6d838ceb488f144e4b500ff1 -45a0edae69c61b7e457809392cde962540f36077803aec3e5e637b9ec513b623 -830204a7f532d6ea27ee2c4a2969eddc749c0dfb0d8e059a9e18347e094076a1 -15bc162c4979ad89aaf5ef22a715eeef6aa356e39f53e122259f21ddfd91fac3 -b8b6df3c3e91644b30102a9e656e6542926c13cc8401418f1c6b84953e527c3f -dbe3e76e2edf034b63f68c1905409b5f03a2d5b1bdeb97dcb8987c06f877603d -0c8bc8621836c082310de2fac8584fe5e453c3cdd1963093585942eedbb099c1 -1b659943eeec493efcfc13a1628b63e101a0a40ffac0dc492f03062dc18c3665 -d0b7b37cb756fe6102bd8590705b9de712f169514b8b6aa528e42e36012e0e57 -1de7c4cbd8a2097f0b3e4d6b240983657044e7184144db4d790d552e9d7198fe -b3131ab841d51d2bae989ccd6525c6f8f52f536e9a8388a760402af7572a42b4 -f49f652dad74c2e3296aaf7b6005b5e3a8d95507c145744f071c6f9e71c43cb5 -7760b0413ef195db30aa604b362de810c56d438311cbd193e540c68dd86b296d -2b75aa450134ce06d0084c2b52e7afe6e061935084759ed8b7bca87e58985741 -53255144a2c75fe57209787204a562a2d5a8ab5e14816075be42e56a062a695d -13553f37570985410f780f849926da1470240ee9246d36cdc06082425e381abf -7707eca0ea73e1ebb268494b190b020cbfc46d54e14bd0ef6595d49ad50fb1c4 -13b1bdc640a3a249102f3057855bbef5f17f1ecee2323fcfc5f85ef23a75e114 -8ff0538bf1cee2bdd9535aba93abd484d837a88c36f6270241205a1e1b0f50f9 -acf34b5175d5c41d93d406a606ba5a9fa4ad177d73b2d8e830fec7280100b0ee -65329c638ca69430f227ffdab6d8535ea52cfc4b31d6edd1c888049499cafa73 -51d205e533ee0a11e531aa5b7cc7daef28341e15b6c868535afa65529ec1fb00 -ba680a5f9aa6f90db191db3c0a19bf54291beda8f02f73e692075e1fbd287bb7 -1ee34421d52715b3a1bef464d0af2d367dd6be9ea9dbd2926688c09ca1a0e1b4 -3261a0008201f1663d471a3d758b28f1c5a8be1e904502e34eda86d92b8d420c -09febfe3f294e01915a8feb99feceec3c3a910c53b475eb5330b2541b41c701a -d17c810a269767abd65426b3e95b33ef098ca20606c000a8e906332e25e6471e -0e7d662bdadadd4ec64b301b415b8b7adbed32fef6b484809c8e8bbb98d058d1 -e68fae1442178c9a357ef1239b8ee076c7a04381f92aad974589dc543a4513b1 -ff178b50671ba14780cd777efd5bf09ccd81c2ed6e3bc723596ecba121403fa7 -e832bc13e5a549c311001a113e6c35786a65e654f83527e319233ed4130d20d8 -c2bfd29ee477e639eb1493d09078266056bfe3cbdf1e3181c607ddc24140ccee -fa9c2774246f2c93e7e18822f967b2d67035476dff57f0d9fabad245c3f7e287 -351affa20a22dcac4e8709ecca97ce660172a5a896ec58bea7f2d45ced2b4885 -d27b124367b65de5397e773c2829755972821c8fc029d91ed777532a6404266d -c3e40c32358049c6fbcb6b6e0827514d8064d0787bc4e232465908ed25db2cae -e66d3160836f0ce4a9fe4c06895772f31fb6a0a7db32f965845a6b12d3c018b7 -321e63aed1d54fc0429ad1a022c44f7ba340a3d584cd587cddcff7fb299513b9 -3d4dce430e28af6a12515359866ccd441c912c8f4f1bccbc00a651688a909516 -567a8b6264da305812330d6a3482b2869d3e108ce3d7884d5a53d20a84f08fcc -359dbf9869295eb94e154dd58c6097a8feca591e0039cdee5415c768facc86ff -1784aa20e914f1bdb3938a137d09359d65d5351d5aa30c46d57444254fa97fc5 -2aaa91b4c5a350b5546a1c645d28d60c9e2e1c172810c3f522a6a982c442d262 -0215def70617b5facd0ff4813365e817c207163d58af491169d5170871c4e353 -2cf911c2393cd627c73d591b500206f420e7ed5128539ff74faa798ae990df72 -d72b7c724070b67e0c032b086b11760f7abc6ca32788fc0f382282fbbb30c453 -9a8f3c793cab5762afc63b996421411e25bcb2466f1a2eb451f20d49e204a006 -51bb615f14c511c57108d08139afe3b1caf4d5e26af909ccef2c4da1df7cbac6 -445c366d5ae5c8c3085411ab5c27a9a105501581c57a26270f809b6d6396bf89 -025115d2e8731d378815abbbb637d13ddb8e871374a58fef87c6586a47dd99b5 -bd8c4749ba5f1f340a8d3d4f237c9c5a57dde560443e1ac655667ad624fc9462 -c18a75317bd8b0e953dfa96871d6a00004fe1823264e04966227cd079564bc50 -13ba790cb1856b33e3b857a5e9fabf0dea0cfb18fe337d6a0566a72484631396 -e5b5ad7cbc0dea22cd13a8a4f077ba1872b602160a9adcaa68aafc759a78363d -35aac022ef55bf2c760fff76c16678bb74f3a9206a85a4adbf6b0e3bb4d3e4ee -b3558f6bee823a48f62071eda0c220023cdb400a28251a2677daf9ab2831bccb -32143cb4cb8ec6a7c437cace06240b09f6a8fdc7786f02af0ad7c27747495c09 -45d09871028c14ad33d661bfd0ef987570b10838af72315ab79c7e4186ceab72 -322b65635b9c2e839a610505a43b82f6e84a43b2b501e5f9727baaac91224f2b -b268351a72fd17d87e951d1014ca44199f828df4efb0beda1906f858374239ae -1f8b1f957b8ae1244119f72f035bb6d65385ca0ba155bfa9c97d176aa1f66b3a -ff9190159758d211c45ed2f1d6aa919409e7c89ab1eb46285fa3f062b4069319 -515e88cb84306a498a4f7251619a7b8c6a8ef6430a65da49563d82e908785b70 -bdc12a18d08f7edfe7dd8dfda3c2a13596e15af4570bcec1eeb14d29d5ff662a -2958be2cd3333c3aea2f91b20972246d9a61a7732b238ff9e233cf311c49bea9 -a83d354966d8e964b0518f0f5f16cc003b589a9da8627101e51cd2ff759157a4 -8a9d9de94c6d47f1579d021482b8eff62393b1285ea5e521ba09751b9b722d77 -1690529076e745164716242b6dd41ef4fc5e95f15924b43f75a8c689f143ae87 -f5e7887a9873697a8c4131352911a8e50004468c72482b7a38149e7abf8534b7 -2388ed5b8cf474b3a3b78ac89e840697205b569eba2e85e2f6416d41149aae6a -9434f7e8e95e2eda2c8eb78925345e59728da3310e9d5da06b3b88569cb7677f -f348e8ed02296d1c2d4523a0843936592058e916dfc0524a8f240dc760867dc3 -0eb44ceda8f3d98733378ad7b24795574cba77f641a4498102296c985f9e8098 -719c0992a5b77292db052593bd5b8020c8fe583a46e804c00c715f1004e627e8 -bc976f9208c6b3c19cecf6158f27a80cae345ee464b2eb14ef033be31ca9b0b1 -a1dd40d025d2fc0ec2e40900a596bfd205803b1f4341933e0a998100e343fa04 -9de20c2534a06deb43f8f3d0a2a65dc9dcfcdc052282ae177f478048b0c1916e -e599a29d36fa69075254e29ca1d158d8c7dcd2f7aa643a3a391380dbb5258d6e -75ac53529abbc2bd29c803285d2a6be5089fb84704291d4a6219c040efb8f439 -07261d057541ccecc7846a3b8710c47f35a490a5078a6b4271e429e77782f315 -90dec87f91023bb8c9d9626b8dec28f4f15a88ad2378abb01c8ed262075f6f96 -6684c0b0c987daf6f52751c00c45c390e3929e7364b1959d5860f693b2e2385d -5dbaf080163e6922b88824f632ca07585d8607d9e5af14980558e6fde1008972 -fb77980aea10e2fd441a0186461a802572a6fc72e64925d7acf6f60f3e5b2a93 -fa3c76bf1963936286f496bedc875a1c6b51b4edaef334193de9f0a4cb00e0aa -19de0a3ee0b1658deb23de3912ce82982f7666df1167794e707a5dce52c620a0 -7a8d93ec150f53f2ec22528ea4514f5e8b47159cb7eaeaf5ba779fa274e34245 -1f0969e3315af81bd0fe268ceccd1f20d7ea709a3af61ec7726863ff1e5c2b44 -5d6c1da0ae53a2e62dee5f7f1a518eaddd3a9905f4cdbb74f62a16ad2e9a3ca2 -16a2eeb7da59521b43d9b358fe7fe5b252850a292a0112d22be0377b6be31696 -e342592437c19cf0e5fbce729c395fe046bf9412a3fb11e6182f53ad1124e129 -244b19c5dde1adba250bf9a82daea88ca70fef20f81bcc21bb7547c65c89ccc4 -8a62a161a541a984e6284cbf2e1158f053561ba3c6da02cf176afb494d1e020c -dee46d50a8dc700e6b71742dd929207846dd02ad2e5eb5d0db70d6267305fe4f -d99c1f9f8c260cc8e521d2ab0aaf5baee24e2b7a168aeb971aaaf2bf207593bd -466fa0a2dc24f2951557d02af2de5a05ab226b2fdf7d95259814db46e9e3f069 -12ae5b7b5c93a3b024922803ef16112acb0a383af5142ac274010d4ffa4ee7a4 -b5460fc628b6e8ed5f449a4e879c8af7550e7ece8c63fc00b1f31a7905251a6d -477e0b9dd1b42eba39041a54db3ec7349280eb9471f09b507e2c878a5e9aa8d1 -3f6a0d3e127ada508e3685a272ca56afba11347addf873b229fac5b047e2c950 -258f7d280a9cb608639702ae9e78ab11dec0bd348a7b9b43a53e30afe18ba463 -36cd658c82171f41750ea125f7bdcde7837c36b8309f8c7ef757a08dd3eeaf4b -4c28d8308556afaadcfca572e9cba9ea6bf5ac682eb798bcd62f5e4d97a8c6b8 -71d0de906248b1b103f461aae6eb1ee2ee0283cbcbd662c94468128d61eef30e -838075f383b3b4606c160bb9e702c2839224342685ba8673d284f80858530460 -5b82b2d44ac5ab01b426bf49a38647870889fd8c62fc5c34d3565aa0ce8d74ef -1fb14c1cd8d6f4f1306166698b0fc3c0446cfa14c6bb2d9f6ed7d7361f8fd573 -d4e032772529fe2248699a10b305132e0b0e03f8c709ae75034468f3252be6de -c005ddd79a854116edcfd4e17a04e5f737df69e0a6347930dd7dd8cf460563b0 -e85af9fff730731f3778faf6a95d696075fa932491fee95b206b652de5e35a82 -0217f13e9b0cd0f7156859f1484f3ccefbfeefa8ac8f006299f7ee663a1da3a5 -142999b6b0520696a17faf2eb7134e8e2b37664686a6bedf2cdc70fc66f7e970 -a0476a91340719ac17958179770cc2c0e38a6eb46922af669a531aa0e927fcec -309a7b121fcfa2cef327c4e71ce6a7fdaa611a0db34ddf0ab5250b8dc6770384 -c49ae556dc1a613e98f20a3792699275ed4d187c87d412a15908b6832d95ab4c -865b2af89c0e471c46fbc6d0686b36af4b12c3684a7f45d7c2d9d9817361df14 -7c5e95c3a813daa7048c0028afd43bdafcba03c5c74309501d0494ec31671d29 -b30cb884d9748f0e2b7a8d4e3ec11bccf9a491905628d2c4b6b40f8bb5d0b9c0 -b0acddfc846d84487e9c2e7f0d82b991ab2ff2140770f2492e3908b6df2d86eb -b23af04389a27cb3ad0dce5528059a519a6092a18f3a2b035cefd46d885d4654 -24029359070136db35c346acb8b288d36dc85aa13231fce659d4391a8f5935cc -c8e47200f97c15b8ebb5b8abc023d027bb5e8211d0595548e0c95ea47bebf498 -76ef585ad3b76331c75fc41bdd44d82671ac32fd665bfdecffd4b8fc61255e34 -58476113b59bec5aa15b03d623912276f1ac560c0cf18bd9043aca2c28e805d9 -d03de88dbcf10aa9d7d0b1cedeb5270871f632f7b703fc8eb5020e76a638bc75 -40cadbab7cfedceda58d0254ee7e8e48920b21a7cd38cc350cc6b67bacf468a8 -a246fabc596a2675c1fdba8cce35c28655d0e82755fda8a8b5bbbdee98c30d91 -c81f08cd0f809e1d55a046158365e04f224656a6c46a43a3f79fa2d55cc6e420 -fba22da808c4afbb03f6f7b0d33be67f9883b30a1c1fff85f78badad279de4c9 -77f1d9f16a5b9b7dc8abfc85488f117a5cb317fd5c84fc1e59ccf695892e6ef9 -26dd71c9a6c342a877406f0258adf45810746c1454627eee0b7ccf94ceba76c6 -7f1ce137f97ee6025a23ad42a4cfc2ded9bfe7e206f31a63e65bbc3e304ba088 -4f0e0738675e2a4535283045a69ff637ad95c9e0b86d834726e2ad29ab3a03fe -71ec91f8c8564ccd0069b552ea28867440145f767db71486d2e38e5a0a3c6099 -b6d3b57ab4513a0c25897b46410c783297a9b280f138bf91bb17f4f5d5bad5e3 -f858fa265cb1c1b0d0d9b84426f0ee6e4f5ff5deb2e50ba82d3405de51fd265d -3fa7396ab39ddeebf8bd2b61af0090e349863e88c9a5a280c4693b6e80b88aa2 -e9609721b4747b18008df3517ed1331f1dbfa46b00155288b7783862ea9e6498 -52ca1ddcab6c190aec0e25927e8526cdf32030cca61f071325cda7e0dafacf8b -c3cadc3ddee55640a7c627beb2ac0cb38e3bfa38f9c3a49cd7a400be740d5f67 -e59582031ac46c467fb35622ccc7b627718f858abe34a43e5734a74681ef229f -757dcbdb302475577d18d5cea044dcf3a8026ffdbde20a2585fc84bf53d6504b -ad3dd458ea271e5bfb498f9289849349a0c8935843db2382069eef873895c978 -341bf3c1c9535d13ae4ef05f135588edd96bec9066045199a8e76582dd9c957c -2fdd24cb36b53692448ee0db7b1689118fa13ad5f73107bf0a59fdb32a958438 -6d9ee99dbe469d3831f43773dacf2a228276d076b9144d6b70b315658dde76d5 -8b949e998c0f4e0c2f5e2e888bd316001cf0c981e9c89f69ab39c6892f658eaf -5c754c0fcaea82eeb8a443cce68fe5cbc857d99df78215f00b222f799130b7e1 -8d985455482cdbf5b9f8eb096fb0966aecb5bd5394f4224d85fecf80632fd858 -ea3aa8bcb7834df7746ac013d8b980eedc405df342604a8f87d92ae38e5f758d -4ace6d05c933347a85e08e6b796e6bb59ed8c7fb72d1ac04dbf57acab8875e08 -a5c4d4092166ea473dfa9c3da7e61c53b2249515365cc89ff4e5b6f4ab5d2514 -9b2f24ede7e8adceafbd8ef9d01a89500bc0ed3ba5d691dcd4719f70527ccf01 -ad15912e288dc397de28a0ca73837d54ab4f67e36dfcde2d75bba41fb152b312 -0eadd98894d332b20ad05436a75d0874a18fecaff6077db4ced96a6e91c2e4f4 -65cdc8e73b23299317a7ff4b4304c34ba43afd9768200e141a7309eb837223cb -be451fc43db69dd2cd3b1cb6b5e879ddeb6990f19027ca2d15a90d11d999e519 -d7ae9f87b009ffd95c5d3b5f8d0ac22629797ce6374451ce62d659ed1da0a826 -26ad8021bfb2db4f00f81b8e524b217e3347c2f93d9140e817c7b49ee457b9f8 -1f5b49c665ab2468ae83b087f3b6454913f8498db5d8f2ce02af56f307042c8a -290bdbf72c24ad3678e0c527129817dfa5240c03ed78153e0cfe712f301372c8 -bf4b82df2ceaddf1b819b828af9bd9e595009c1d96700a14a2ba9117a04dd425 -bfa4672d7f1d70df323fe6efbccd582ab3154358212cb5e4d1938b097185f53b -8da80ba35ef2bc26b88b8b0df9eecbfaeb6fe80893eb48da291b5b6674c009d4 -b9a473c4e191b673d693f865946ea5c448109eed42b054cbb3a8b9bfc1b30b3b -d021e90f56634c81ebfdfe6d00c97824729979b3e58481a0f6186093e4c74807 -04ad223b1a696fb51777c5695bc106ce57811c8ee455006f60bab6b6c43f1fc8 -c524674a638ed65aa0597ac1ed7052ab3f3caac9e62d806ea31ebdb359b005f6 -75c57cc36147841fcfac56baac914cd697fa2052eab5bf27d035f65cd0fea717 -ab06306d5901ee083f929cf13afb5a54d000f61524707cdc090cba1c46868502 -9b2469b0a29ce0178d61b66ce2f6b56d8a3d725687ee03611ea42f31f29c281e -8c4dc1a783171441278cbe383473f7f6eb4ded8513c5e14edb793bf0c98fdaf1 -1e939330122543d2725d3e700e0dd8205e8c1d16bea0314f5a1e993e0bd1892d -cd04efc67b855d03208086dee33d0297a853a1b913e71c7dc495984f7da86818 -7db70ab6e86c974a4983ae863927b0456534abdcf265133c00c42115455dc665 -6c1c683a43b373a1602efa87f4b3a1be04da20f7f51dbad3af313a5658093b25 -5156bf9693ab3ba5ab071cc5415e1eaa29160f8090968fd9dc458cc8830b500d -14682c560683dd5c3e2745bd9935886053181ab7d323e4b993587605ada1d9f0 -42473496e8e09f9af27f287c29fd4607a7e246fa3e77666ef78c0a0ce9c3c10c -5e75ef7385aa2078d8c98453449869d40d39a720e345779b5e20a3565eb47f78 -48bca3ca0e04daecc57db1a18ca96ec60b6ef42deea17246509dd81542f667fc -6d3b808075d84cbd3ae5821ea71310369f5b31c13eb0d122400dcc9cc52ba85d -6a7d2290af5e21268eb0e837e4830bdfe930ea91d4dff36ea26b2c4547437336 -4f5d8fbbb4ced10bfb1f3afa9e804c31c08057140e178d37408ee6f10b1f2054 -07839a09bee7931628b0720cc62160b3f541b2658cef64da994bf8adddd663e9 -668bf56e93e92edac17b9468bb02b1d90bc4dca43a508cb33e6d1f0ba5ef0f3e -cf43109894b73cfa7484484cf3f18451db8c0993b339362183d42edbe0c1bc76 -9adaa253eaecb81286a4c9ee0a89ebf9b85c5ea0198dffa514a192fb872d15cc -f70f773dc58a8f1f05d710f1de541327eb795bd5b3e5bd01dbdebbb33696242a -dc92a04dca1323151227dba59dfb17835f5da70889940e3fb886ee4453bddc3f -f02944799dfeba4b46272ae29aa6748e5408b90935a481be47303e5227f2e230 -5082fbff2bf084a05546d32b918ff8ef71ec86132f28a52777189ba8d05b1d00 -b08f9a78e37bea0b42ea7f48f53be4d72cef03c72ec948a4c23b16e7d3b54ca2 -6cc77493f5f2a767c0f348a0c85c85c544b0c24709e52272ec14fe72c719ea24 -61a1a842c599d4e6b8f175eea17429415bbc70b71433047e73c2ba5c4998cfff -30172a45e39f7fe86ad780ec28b9cabf4429b55ae8aeb38d6027922e985e725e -0a4aee85139bc1d3532e00b80b389e9d4c8197d0083323a495aa6ff75b613bea -94ba02977f79fa5752418ba6b1f4def3e66440985c525a581e6b75bf81997f9e -7d49bb437b500aaefc8423c1ea3aab735f87f7a17958a20e2de998148f6d777c -54ab5a128ea1c37e65d14f360c671745a2911313d174f12214818ca417e38670 -699371a1f7ddfc5c1634bfd34ba99cfcdb86daeb368e5c46d79b974b609448d0 -90b832c1f958142754571fc98c9cd0270fabfb5e8466ccd7f34e56c52d086161 -d6def2b38cb28a5126a8c0f233cbb7e5b4bff2e0eb4c8474d7e0515b14fb7702 -5fb5c21ccf4827952e2e20757ca37afcba30f4dc2b7e9a66aa9ff34a1ba94156 -da92b255835e8c8dcf8c054393537ed4b9fe616b1fcac41724a19abb7a1541b5 -d3e5208363e42adbacffd409b8ed46e410bfbde876c1b77fdff235bcfdcff0df -65998b975a24e2614a2a8ba89c2ab9f41469b409ec9e0a5c4234de73c630f870 -36060c9f9f3111586739972b638da804ea935ef2e74adcce254c9efe1bc00667 -9ac610b00a9c00a1e3ff36f5e982504f2fadd1d6c3d458819bb0359daf480777 -4d7e2cbe16f16afa47155c1cde36125d5e89432a508832c13fb8c7fd5ebc6440 -49814c8fa01838117f6d298baed8cc1158ff99d0a3a6c8e5231fb6aa4db98baa -216a556c04bf0e6f39c8c30f39ad1ec64f4a0db2827652e8d354a821cffd4dca -d23876224ed57795ea129d045e387a45bb88372e47757a16115b9ac149ccbe30 -982ad2a9207b175d2fbb72752e8d3dafbf4ba5c02c2dd6a15fc0490dd0f6324a -ecc2523ed53e2d5fde36b3acdb5609d70809347bea983fc6db80888420d82722 -7d1d237567be0c9c24a585c52fe3cbec727823fe2ec67152944ee35a65e7a005 -37e096939e42099a3cf73e4633cdc85aa3b4a2511e27223e0053fdb65eb85df3 -54009e474bda07b6a07da75957e621bcbe7a1e9d1caef92565c5a6c73664abf5 -fde175a64314f6b166351af7acb166b6a0bf596288a5ab613b80db91ff50f7ca -17e99d41d493031d1a5b5038303f091153cd08300ac6c3cc15860e33fbb3394d -e4b383b97b77d8ff0c2707fca55a838e0a2b5089fff480af5a50e6f07b29945f -789aa9333211be2ea8e425e00255f5a3725cfece8d262202a73db785b39e3188 -55abbba63de9c53c24bf11125f6f0d3b412f777795ab86c0cf9d9d43a2076fe8 -828085480e7adbc77fb137f8bd8cc8d26ee6435e7e3b2511e7a7d7a19d330d17 -e7d797061428bab2e7c290fedd6c0de9bdc2c5b6b2496b8356593c570bf8eca9 -c5aabe89434de698fa17ff0c08ec3cc13b60b4c3d3712df8ee02ab92a71cadac -3f4cc5e69aaad92774edfafd88d95ff90c9781d9f771c143b9918f554e3b3497 -4f822ccc3e473d345c7c598271e59456d2b1f75560fa36b02d75d040c23fc511 -506955ca16901774f7b4b9d2ff9f4e0afd79fd66175c0dc634e932566d067fda -e40a710edc1c893e919da8baeedb4ae0f4ecf0ede9f08e43dbeac3e62c97fceb -c434c60ba5c80d15f79823e25563e2d746baa0ef31ff6826c120ccd9c2323844 -9a48a624790b757f9f8c03e1c447c16de51104688d79c87461f610af5daed900 -748acd52bb3eb9d975d128adbbe794421c434cf21d0b07c33427b81a6d8a4c97 -49e24142d669e8eecef30f35a96390b81ecaedf8bf65edaf9fa12adbb895d631 -986008fc95aeb2df5dd57a4e09582d9ebe82c685c856769186f36433400f1be0 -1daf022f7c217099e520d05ade233feaaac372f2e7f2067119925b801698ca24 -12976934dcd628be992734365ac6b522b098c7f3d788eb86f045c6c9fa7ee89d -2d84a923ec1a6de6dda87bd949867b2a6d6f910ec58519088ed577531c624d32 -bc7c62116630a4ed7af8927fb6c4f4e65f000c69910841fb600e1de1c6a23f5a -a2a5d199d79005294c66dc160c38a880a11ec92942c01ff8ad5e5693f132b238 -12c90045fa8d0b60c6b868f0c7d2a27815e196438c884d2d82222125d2219356 -555f8a67d48a13b3662e988d03a2dd3b648162884b715c89d7021be05917ea43 -d1be90113ed3b3af434ceec723ac4cd314527f560bcd83e7cb3a764fdd8f09dc -f1f1f45fa4a47afa6401420b1a2a6cc0f28cdeaa0c83c6cb35fec7ff2e432270 -78d283f79547d6689b5450d02fd13ba6096e37b08ca096d942cb94ed324cb63a -55c9f171cc29eda44d10545dfd8bcdc4afcb26191f92d0c61fea1b106769e9d5 -234112650aa8346eff624a259f3f6833997038e24fe4b74c459b14841e2189e6 -2842ea4cd2693bd162a9e90ad5ad3ff82bc6ed2e7978093b9bf4caa1012e6843 -5c34f01c470eb39483e22a1e67faf26fa74ab7434a682072ade050e72cc73123 -1505db7a7b2512ee6f8cedbe6caa06b939a440c9e5f0d5497611c291fadb0948 -1b19186861938233bc62228b15171612f026b677601715bb4c5b1f2ba72db37f -d15c629cab69bcd96ad1a6ed6533b09cd3f6049e6d214caee58d4ed72e9f502f -9a9f5682398dfaaae732b6306076deb3921685b419f41593a46e3cf4f7de9352 -950d1f0a6843175138e8589d22efa6c4996098ec3946aa1fcb1245625d7c4e1e -d18abc806cd490f103da453ccbd52db6c97ebc5df69a3f94229994bbcab8805c -975b57fcb6ab0221a1c1c553cb64ab882cd3ece7da6b13b0505950c5d58ace09 -fa7a0e4ad20be0733d9d540918922c588bec42902f9f8278dc0d6729a31c01fe -7f90292b8c5c006035ff40f28498f88ce4d9981abb7c9c80b915f8c12062fc89 -2d49b55e06e3d1220d1d29c7844e96c259bd806ba601a6e6a1d9f34f15f8e10e -945679f99ba204fd1b7cf84adacd615e858dff1365aa779b241c58ca6d07ded8 -81dc8c5cefc435b9ebd7139879674385c860251ad25d08745165e0aac6b46c61 -49fc0da7baac61ba658ee976689ae42c13d2b36f2fd0b526585b6098a6df1f11 -a3943366fab8eb81c4fc2f1e510b4452d23c41e47849b1f15f992e9428e8926b -8a28f15206802507f5dce36de4cf257e56dfb6edea19c9078658c32212005db8 -5eb640885757fa5fa468f7267fd0d89dc2814828c5b1113b7b276093854b5fc6 -88a01863a861c535e227e98949aa3db4062f52a88a0dc7ec40d7c8a92e972982 -a0f7f6b0eff29154b5d0297ed270948f05fdefdae6126ee87a8baa0469512ab9 -c2ea9ac48d5a01d9160a3e38eaef6550cb05dfeaa33ade4de76f4ca4649c69df -2ea79a0f787768b7300bae785977076d4777bd0c76e7bc23f90fceb533dba7d0 -b9ce8ee3de306315527bc84ae9a14dbae631881f485b88412a5d56f4e69438af -33ef583f8e6516b1bb7414318cf785444cfe87ccf1a31af08f89c574b8394a0c -7d260ef39f50feb4df3121ccae4ee370cb6a769b40292d559de8cf00700cde64 -439eb7ab50b0547252b14ea1c88fe9c6f3b5ef5ecf8ccc010d488fc3c91c5159 -e0baa7afdf4af77778331e7ece03d8aeb6de3bcb9ef6370b9fb01855bc68ac19 -476a442d3c5aa77f9280e04ef51960b53492665b3a6d0e5d95bf545ba3b1d2f0 -b80cea9b814ca19fa6399e2e93280ca1f93a9ff39cf7ac04badc4adbe383fc59 -e81c19fa691c829cc5fc63fc56341b724209becea74960adac6e033e07838b65 -20ef9a40db38442544133888acefa9a6fe282e745af83c5e9d9acbfd2c73df57 -7245f691e3012c8ab3d9aae16adf1791f2de33765d2697a3c9cc01955d138831 -87b46d44db880c7bbfb5f9839b4800c592ba0e96484350221080f457c2ff80c5 -4794387ebd07cdbe2dbb0099c078d7ce26c89cf4d47f52b5796a6a861c2c3bbb -c28fc7321993e18295721898a059af827be695a1466572488fff3b00aeb24306 -743bef6b9616e0e69c6c123a86049d2038c9d58b13d43da51f4a31b2ebd6f84c -c72ff201ddba0047d6bba501edc889ba84bdbe82845df10f6af17e8d32cf3c39 -a8e9cdb6fee684b9053ac5bf867867745c661b4244a6e9d416b96c9e7acf7c7e -bf3e65a396917f5f3362091e221f30194efe419b15b01c2c172dda86af46b1b2 -fc5632820d48e1292694a3869d0550c7256eea172fd2c2c51b52b6a9204bb040 -6aff5c3ade4d44e7ea6b259aee7a2a196f96d8df445f6ba0439787a2f9d56dd0 -b7e1a48bb48c564f83397e299bb6e4de0a3ba3ae171095e1f29b30dadf456031 -237754be8fc42ecd1a5c2c47ba0a4dd454f9ad43b772a43f10b93b9f21456aa1 -0a6fdcb3dd43c9e9fe0029a3d78ebd534f1f1373caae0e69cb63551c80bcecd6 -ddd726fe1b8a10d46e0daf9b028f13cf4f2e248915eacdeebd403397077143d7 -982fa3be9b3690f299de482d9d9d30d1a3c73fc0f77a5642ea70a5a738c4a203 -a0ee361178d65dd9697f0ebbe7c03945e9797c2b4fde79d251088b54dc011dac -2461d15a29f76fdc80e3ed21625a1ce5ee5848b32fae9fe6db0ae668d5fab8d4 -65dcfd42cfbebfaf42b5a2a604c429c29031dc86fd90161e9d25f7426e485171 -d6db1381147bf66d92fa199377109b05723c5b2dabd5dbc157b89b7965b07dfc -bc1271ce306d95d2c75988978114e451e07dc5ea5a0a7ee2c4b5b560d8e63661 -52b8175c258dbfcbe57fc8f1369238118ec7c1ea2c8183a6bddae0def782d71a -9f0e4cffdea4ad89fbbb351c139133936b7d8331f17a14faea91b0fdc69f7b28 -c63c13383f1bd915c08a74801a12342b690288c0be035bd5001de092b0b0e04b -60d56735d50b99f9810588aa4231fc6c7ceeeeda1f5e420c6e8d01a0db4b1b09 -51057283a92739d75e494c69ee7fdcea905eba07480addd991fd2b7f066f84a7 -bd6c7a24a3f7632c0fa1965b0491dfc426e9efa2dd53c6cfe9c00bc1ade9b3f1 -54943704d3ef3d40cd97ff5c28cc2ac0709d9e765a06ebc729f16b442bb7eaf9 -6b8382db843cb5ac8c3e404b765ec45dd2b4ed24ba321d019592a37b2ac208cd -450dc7107b57a74e9b7381dab65d48548c665f7c9aad56dbf5d8bc64074b186f -abfd2d574801fa6ead0e1d00908456f361f17ba2c74c99ef7e26b7e8032b65f8 -ef19777bb992383f1f10d363fe7bb8ab7ce8dc304aacd1b6ef1b6b65d2d41d83 -0910a514c3059bef3f677b92fd2601917842f9836eadf6cd62a1100855bab14d -225c974eb123849a23514d1f50c622b258e59cc367d6cfcaddf27630eaabffdb -5394b86e724d634868ccc7e7991bb2997631f8fb35ef850076128d65ead586a9 -95cbeacb7e6de8edc0b369742cefcaa38775275a17a6c83d0a81e323fdb8bed7 -05f6261f7976f6f505f6c97c12f80eec0cd381a048ee9c7a8a05595af297dde8 -79803975697c31da784c5ca16c668d3b7503b3aae5494a4d631929870f9e603a -38e311ec4480e366c79d4d03c533277c4aa585f99a32475fc691c2241b00ccbb -c55c1e9b14851f815b162cd057f1bf85984a3393aee38c0b9ed3e9722495bfb0 -b13eac7d28d2aadaee2b280e48e5179743528efd7042ab6b7ed6dc2f4efbbce6 -ad43c35a3a0372814b1d64a342ca614d5e601827c1c18f8a347de9573b1f55f2 -2a3a3d709e17f7727477a45a4fce29efae3e16b80b6df52a4abb265577fc4178 -0ea7a98238174222eec322104e04dac53af8867b5bc0334b02f634602191d4b4 -960b4f482c46862a86e02f4c0b496d1a8108cac762022ce6644b4e6092353146 -c9c42942a74869c9351b3101bf15421a95a7ca34158a56e7de3a7d45d4fd2bdd -f1f5b4e5b3bc9f7320eac4f94655e8a42c7799314376d6fbfa29fa8f836a83c4 -c1fc3dec65d28c408d8f4460b12d6c63a323c0533110c6b6809d1867110f166a -3b41da821e59fb8c8b75068dcc4c8f8db77fef2e5d5cc965cf091b9f47369fa6 -1c1f5f5d501b11ccb9f43c3235f94cd287b944ff7203034f0985bb163054afec -484e0e6046aeeb50ee74ac84186027cac9891b1871980bb94de61a47c7379204 -cd8662b17cf066567c9bba779f76edeb13d2ee996655def66a0cf0cc59659cfa -e416a40ce4b7ef774185e79c76545ece7c498db03fa717a591f9aab08c167ec5 -f2b4d9bc25478aa6697d0edde31041f185c965b263acfb2399c5695e42901822 -543f8830ea58e49ec7189ea0b6bdbce349ec55346fc238a7a6c4cd6652c6c30a -b5c8bcfd382e6a1fcb1344323db38fb9829e4ef506b21fa5b6d58a92657c05b2 -09adc73d93897867cd867c915cb7ccac7f1170f9a6c555ccd4a097574501b6b2 -565a57e5c1df5adf39c5740ae63016da9a566d7a830ca624b5b4c75685c95000 -5de2d662500107686eb62b3a8f7f9f72bd6071c85518741da3b455249d84152d -a165aca84daebf9395d469146bd4e35452d00f742905c9a47ae2040e136e8e62 -38dd0e9c0901ba3a9c3216226c44b1f80e41c212daaadbdddadeae082b016305 -54798bd555a251d380ef952d085457041fc51dffb6eacd582ce2e7cd1df623cf -9237da7c39b2167c7463bb427a7199588a6cab503aed16238c68c250ad9f1293 -b4904d843ee27e2c1010ec9f4d1190a11d986e8ab56ebc5615134d52764a3ebc -a9aaa1b7d5bdd1ca23bcd8fef9048c4ec2fc1b60853930fe82c133bdf9021102 -15ec5dca1d137a14e519bbc2e35f93508753fbead6543c66d40b28d828be75cf -2f2d3e116b42ea71772e07fe42f298945232934fb85f9b046e8fc56d843f0d5b -ce1594c5bccf37117111cb497c1532afb3ab347e3f555ba63bd47525407004bd -8ac2f37f632f253ed4bed95afebe62f2316c225f32f1ed41fba0f84d49cb80b3 -cb5503ff106053ea70540e3732b4474e5b6e1d53aba1b8ba36b1116d2516d883 -aa55e8401226b175450b8b4f1ef18d55e377f7b40f305a6df691d316a0ef17f3 -8cb4506398258e75cf230bb26523d391fbdfc331a74c64fd06b14441fe966641 -4469ab2f3ee113716cdf0415fa646bee2afe4dd3449dd1a38f4135ee5c4c83a2 -4faf571b0385d2a2a0b61fe9bd5a047999028fef216f2ba0dbd678572790f66c -c575cc82c4825aff3b542499519f82f4d1833c2899b5a46e7a64793c291c7238 -da8d2c0c7ec69978d3848957062ca371c8808f6d3244844d54a49ae57e92adcc -a97bc421d8cf01e3e2fef019fc2d9c3ff6edffa264e55a24fd1b7c32f4a86285 -3f9353aaa19e6918a3fe84c798e019eda844a5168397bc875368dfaf42514a20 -f8123edc760c20356bf81d8230ceb04730d5d7ab947ed143b6c3c772350eafdd -9636db454174c0de1a047f0e30370cdd4cab9a1f9d8d7f99abd8494ee82836cf -c73cf595a2a72807f133a8704172c069cc63cd317dc20d28e45d6690c25949d6 -6bd3293aa87b0a93d5675c42636a8837b71fae1945023db866ea01a774b5c2f4 -6ec4b86a3055327f28b179a6a93087b15e7c6169b7053d76026207c41dabd8fb -bb17dd3d49e63686638b4611b43896d1c7697e352c976c26fc58b4e1e08df30f -bd25f93e05f58892bc7f07c4f739d16de447d8eb84537e847926e39461dc385e -f79c2ba9327ca12e7033e6df84d8f044b57881e71f32d52afb2b0e61975e730d -a21fc31cce5aad86c09c82b7d0b4557fb79feb7e1ce6d98d26a49e8160159023 -4c5da702c3feef7041b5dc43ecbc8b2d66b7c33e5008a4d171ef828bd96da0e7 -4d8389f04fb4eeaf1f38865a912142c0eb9934dda5c4576fe18251eafd7608d3 -f35319aa2335e2df4a0aba8a246aa93324dfc19ea353fe27c47628f377259a19 -f9f89c599d11fc306e7181d35792401f9304662f56a2f3e44a1281ba24f4efdb -35876d8bc31f5e19dbc58ee35b98282167d21a1069dc64ae87240384309c42ed -ef9dbbd68dbfffd34c57a001aea0c91c36c2c8f422cb09f9456379f450edb717 -e7ab9b36b451c27f5bf10f018e25c57b1cdf4d2124f284b3f0c396ab3c806506 -ac6cab227e74d19a593671ade70455869614b5296d8768eb4d390a2e644b4ee0 -46a8d64d40633575087b3bafeea233f8e7f22ce22d2c190a0c4301647ce67668 -dbaab051719d516cd4e6e7f8c2b9557e8167c78ca6ca1cec05b79ab1ef61975d -c2511aaaf3f20e393099ccd20ab4b022d2b206d9cbae6dbdaf96296df88f0092 -aa318348201f37a5738f17b440b35e47d17f0acb0d0d255d2871dd5dc43081dd -4b0f9390af189582d2d9b39fba9644537ec6e1725de83991f190b5fdfef310b5 -e8483a7a91720758e329efc146c95771b2439bf2607a3f10ee247fcb1b7d5578 -a05775df4bc4ce1b59084f5e625e26e11243185d730fb8931455c3342fdaa91f -7093b21bb911fdb04469469404dd387ab3a61fa4a1347be3c5d69324ff67c6c4 -b6de7d8ad88b287265a9609a6266b0d9146c3a3dbb0a3c9dcdc0d6f04d48a247 -df9ea9ac5daebacb06628fd7c9feaca1d71c058fec7eea5ba7b14bba8c5ceafa -3b81037a197dd21919d6028849539f2be815d65057d23018049f2201c33608f0 -54f358433c3df8bd7c72f81d775f2a86ed7edb494db813e6dbaf76e405f64a4f -cb3240348612e2940b7531ef8a93a5978faf36e37cbc1a02f2b5e3337fa2fa22 -91a9d6e9f9969604869b954ced43fb53ea1badcd0435817d1fda2e66552dfcff -8acb5b5a5c819906a8fb02cc97f613f8400a9ab950e12d71f076807caaff259a -e63f0de2c096a63eb4451e64a4f904162252f398496c8670b92923b8f7bc4f40 -a53e324f50a66920b4f9f9239dc0a3da083791fb4e524d2c599229aefd8f64d8 -34ed26ac3f7af54ffee427e4d9ec3f8d7d91d4978d974be305028d3a32954d4d -79f64fd4b9bb74596c6f6d17043e104c664f42c70a3f526069cc369abb2608ae -ec16a11b0a8ca8095e30cccd7df1c4543f9e53c3ef8ee191b3213c4e641e0772 -d85601019f3c9b6f94692e729b87c5de209a92dfd47a478e7580399d635ac5ed -0bab11cd5b969e9af5bf1fa7d0865a518f177c77a8631784028fec51ee1ac336 -fd2d1d9c8c2fb4341187042ef872aa168b87054fd265885f2bc0a1332b3e406f -259103dcb242f40a07a5de136a06b03d3ee31d6a5f385ff1dcf76d1a996cdeff -76ad2f1dabe5e2d2ceb334ed78a9aae6c6ee8f17483a8e7c61f7ca4ba03794b7 -3582a8334cd5545eee22aea82e0b31b0981161abf1611c2e350f4dfbb77807f3 -3d3536c51f2a2b83e3a0f9b7ed72de16fc6503e9d8967d83a557d662062036a2 -7778fe6c9f521b3163a2692d16c4eff90d5fc06c69e98a4d2466a77d28c80c96 -5287008eb275a93713a78e8d542d4917abea24d60a0c90d1921a5880aa521fdd -65a16bae6b72b82f2b2eb2e46ead1ba9b9710b4847a0ed217bf98dafd5759478 -cd3e8ad681703c00eb13feb3e5ff2761455a70e0bd9181ea6ee4850b281aba92 -0d8192418492352b2c7ca6a168915de1951f774de37d63ebb033d774606c5d4d -b6bc72a68859237c5aa77421305ac6fcfb6e555ed3f52c41fa177ba49aa31bfa -fbd4cb3f5df1d87df5f7dd810d8bb6ece0a8db60385f6aad7d9248ae8eb799c0 -9e4bd4d2e06ae9adcbe4f5d4b5c8232aee85ce60357a75886f3ed6f6e0082879 -c36c45d57707f76f8bcd1f472271a56095d05f4ced5ddb6a72bf6b410c7cf0e5 -c6cd21d8deca9f8ab7dc08efc69e5ed7925a0e531eff73aa537704db9779e83e -097b9974b9d697521ea6b0f3a76820494608dd21ddf0aa164bd9830db40efc9e -2c07c02b4c7236688d8fc135757aafa153e75b8bc3636485112b5bb57f01648e -1e69d5e9e6ae84c2a58cce8011e71a7ccea36b8efac02f75cd506b402365b467 -ec1f9e60eb81169f8d7b676ed8fc4d5704b8d06eab192939cb570e0e0c2bebde -3671b64dbfbcc5376e1464964d6e05eee27abdd36e52824d80c74cd20795f3e3 -647f70416d394c89bdb150ba20bec76b2be5f157d1a9dafed474c521a214769b -4dcba56bac771999b3d3e172be1133d91755234a8d277b1d63942f0cc3933acd -641e40287e5340f8efaf9d06715eb2abfa57a7ec2791b3fe2bfbd3f939cfff50 -ee4062c9fccef2f3296143190ab4f34cbf11ab5fff417a6ccf01f7a1d7b47b8a -4ba4dd923b0621b26944b513e530352c92e0f783be39286ab144ee76c1e57088 -fe62f9c417eae4770fb7e27959fb74e3b6b3efcc36f96a5342d6ee780db6397b -cb0478b4f1f8245bd8465850e3a83816697eb16163b7d78d9e0eafb40372b999 -e173293dfa6efc2516703d13836e11f407113c49676b16f43b4165731a4c0f21 -01aa6f3a89d7f5fb743c1ceb44f97857555774a63b59f96bcf03c87b5057032e -4c8d1d6b768b7b0db5e444116be731e287ac0a13bb25e8143f15c493c417f20e -be5217df4041413f59e33f6dc1737f9006bc221c6458b1a5c6d42da46e84e3fe -4db8b35dfcf7c0933d4c1c977c5edc7d89185fde71534e2addbf635b819bd48a -595b29cdf59e590f2eec097e3241d78fb27edb9f2274fcaa3246d0ca18e4cd05 -81e45dbd0783362463adb5177ed036e6f17f1edfabeceaa16d20a176968039cc -89fd7902947fd931a080e2105f50ae2c865c1fb3629f22fdfc4f5c0f21dbf758 -56cb817833d0f510da858fd4bb64e91b30705114a2add3f3e8541a89825c9d3a -0bada8a21626aa329875c9f90dc92e4af23a7d83ddcf140888e3098196ddfe30 -8014fed9451558c2f74b1f13aae39a1a0a50db19609b237bc96fe275806f2e13 -6c8049f38fef87d5d0dbcd10f232476ca4153bf2bb3cede4102dc388cb05caef -723b21b6f6f2d6731f4c72cfed94f77bd76efdd37bca46c9f7dae18c05617a3c -1941d5bf77a25169e19f0fb50c5335539680ddd39e018600021856ab815e8bc9 -cbe764e4e06c8f7b20f4f84d404423e6ab37271d564c8f3eb1b1ebec03de7c3e -3a68be5edf58414076716cc454bb971c4d7e09af1c897ab8a5091024ababcfb2 -43b89e13ba6d3af800736f9ab077641c8be2849125ff20f3d760cd52d5bb6518 -afa9eb41b98094cc129c790094c6ac076e758ed6d1dae764ae66a7fba70d2671 -92afd13be3200f95432af7618203c6a28df7453198b8e426b82514648f8fd0e8 -79424287eafa66e276341064bc42dd35f670a2dd82d2c41021531532e4333463 -c95b0aad5247ad3b6f1582f2016e94bf1f9dfdee6a28d74e05dfaa5f41d1bac2 -fe4f355ad90c24361ca11c24d9a92203be1fced536bb855777a0065964cfc86c -d3a27f3ad545fff70ce4921e4479b61281f728d334093f90ff6f33b0135d91bc -684be649b6db580b1d34f38a491ffed9285ae4ab412b2e1623c8b6679422cdb1 -2263bba72cf82416e151f47fe4bde170ccbb8523459d36ef415903fbf38c4834 -86ec72ba6c9a02b4827433d39c27d3c7741d8a9dffed007cac8157d6e3145788 -45b0a5dc6a5c627d2a1e24b351d93e2dde958d206e434379cc20e4f7eab470d4 -e1159aa0e714d3d4191cd08dd45457319e2c41198923c8cc360532ae4f640b60 -7244c08e546c85f9d077e2a249ff2ea24a989abb69e861f8e71bf788fb81946e -bef9d0b05804417e75589e89d2b8186dfcc79b2511c810a4581334d6d215effd -0e8ebe5425d92eb19022582ad7dac770c36c3d6f86cc2ee279cf432196ea8eac -d3514db0d7f6c59e1a68401358a2d5aa8b80259afd002e6975d86a1b8b2bafc4 -5cc0983e4deda769c0fce889e049c00673ec87ae17f1930af5a5e2423709c2da -49f44db4dfec3e00507d4779d904384b801a43a15770a40f10752d29e14c253c -f4e2a01f25b70386667e7e5b2877425502df89a4c25b9412b8a1abc432256a98 -1e50c2e2c7527b6219d0413dd104b80e9d045a4f6e8507f0bfb37339f864988c -b1f62e3f68697b2cfbcf63178ef0d7cd564577d7a4d0517eaf8baeb8b81b5c42 -8273229f9013e77df1bedc6f04f380e3e90f5edd9c81c416fc78a02edac32ccf -a01c5d8b6664fa08dca3d10b9fcc59fcdba45cd41c44a2e0f606dc1c7f2e618f -ee8f9bcb4685f26fa93d73be1d97bb431fe198b04884eb2d75f604f7326e3064 -aabfc389b7230d325f32beebb2d0c339ca51feef98de442792c0b5b7bb4d9234 -b7f82ccd14bdd609816215a9921d67c4b891aebdade0677297e2b9fee67c60c1 -6bca445b3fa9924c81f46a0c88b0bf880477bba09b471da11dcb8e7c42714011 -70c4216ab739cc7e998aa1e54240f9913e0162333a49306ad5973c8f650200d0 -2123a5726c9e939db85cb8978184338adc1eaee4c892eec474731e567ed56618 -32bc375af73840f81530d8a2679d25b532495263eeec8a438b7a9569b01309c7 -e263f451e593689f209806808edef5a896c1632dfd9a823c9ec5d266702db77f -b145dbf4d34a371344437074c6d9954253da577be60e4c2f3e303e382890e688 -112c07d9e4b2b6e5e710e51e1de8399eb0e01c618cbf2d0c02a71f3986575ce3 -f2afda7f40e9da546ffd5f61fa12ba786a27498ba5a60e568e09a7c0f0b1341c -7bbc5552d10a3c23de3a76ede29825d50ae9c509bda892e6b3bbebff58dec41c -c126f433c9f7a8f417585e026468565f5b2f823388e8d5a36807cd6b53294c6c -bebce4329ae476c02d3e3e64dbc40b05c9d1eacc9321179491a4c760c0c14ea2 -a0b6fe66832957f908eaa6f18310690938a38a606f73132b44fab38884d169f9 -5826312ab82666de60297f057e98e26f0914a32f7b4ccd1c9640294909b17e5c -1b6d206c57221a5a17e9eddc8e51cc9ba343eed45493fdb9aa37e477da35a4fc -fbefb497d3eb070784ef08239303afc0f15b4a9d6d1e7ffe49783c3c4bdbb5f4 -7012884e1cef1996d2de2362492d8065009c863d0bcf4867463fd5befe4af3a3 -9730e869b632375b1696dd1b2479d21d98554ac1853fca848241b911b96988df -db0713c481cff11118f5f0e99479a79b5e59eb0031f083721a37de51758fda74 -5332f9ab1215884c1476aee17267c91d5b354314804d1f56678a168ec756b61c -d57d4a4476b7f3d280557586b0c0f88be44350338c1b43eae03d0f8f21232123 -6732997b3dc602628f23619a081af22185e1f0671d807f682885d9d7832ac477 -667dd8d99cdb3683cbb4758ec38c2982d4710ee31ef2b9427b9f0278b5a36b12 -8c1511fcfd79cd8bdd95f845e164202caa314bfe1dbfede5ef71016e61d47c89 -b880f63dc0a79122118304ccec4e3f5a7e9dd6a8d988664fe2165910a65b14b8 -27e34155b2857ed8af38eb81670657cef86b8151b5068ea992902fb55bd4468e -617216c9e4f11a193c5e8d5444700caceb3bb49365e2dc4771a58cedda7d6640 -fa370a4aa115a45d78e61e1bef9b1f47eba3ad1d690aeb1cc1fbd14c003ddf04 -fa374f156be114144cd4a124063aea75f383bc81759535bac7accdf27adf05ed -bc184fd63f064e97dc2b650f04ea22fba2c9765c9a90f00cd987a0bd5bf12f70 -54a870dd7e615b3ab5dc0f16879c7020ec4a60b7eb94dd23bae021d06454f6d3 -985e49bec7c5e01c8be251b4368d1f77b28f8c8aecf5a41b959bf43bab9f0ee3 -5a057d2671d5a408f48ec62be987e8df582f40931d1f3ffae7e9515df5452f73 -0aad038f607c30140ef336261a310fea7e13c18d44de07968367188b77930bbe -d3be4cb2bf84392256b8a180397af2ff0ad22c0107c333b0c690ec01aedb574c -9ecb935dab18a853b5de2fd79d63eb688bbfb55f8982a9f6d19cabc1d2f27999 -8185e5ff169c01ee9d41723c8762087b4e7fb05b7544972350438825df0343d8 -29005417158a5cb24e6df53d767c0d82f3d72c53bc5cc7de22d0c346efc28af8 -ceb4ee03194d7b9ccb465c0e6f9d015e1e2daea4a43d9b04d7473e1aad92e478 -d8f083b1b4cfae16b3aee3cddff25d6bac9e05289952044599c25143b6d58059 -9ffb92a171b10fac1c3f22cd64b9601894165b76f9da6021c90e1713ec69ec06 -5b3d3048ef04fc0f4da8fad276fef2a36f79488a5a00e61b3ccfe7b237dbaac0 -5e0a90e10eacbaf9bc7f47fcd09befc4e6f502bfcbf988327ff5ff8e4b85cd63 -f6f253e601c5b267488aaa1a0bc8b590e647455ebfced9a84e4126b0c67c5974 -8d85e0ad234d93ad38bf9d320b7349d5fd1b9ecddc1cec055903c9aa96584a4d -03330eb0e95fe7ae0ab895828a9512989cdedfd1e66403bf4122e293582baa57 -60b961afcfd1e529240b44f5943fe38629fecee1446d6a20863b603634dc0605 -3985d82a111445f7006ff79a4bde99b758c18d3cef4c6c281269ddc43f6b3758 -0c58462b47b12d4f79f1c8745d9a197851e00329bcffaa2e312f45b9a909a7e3 -353fc343413647fdaddde0836faea6a7a0740623bf43fcc3beed6a99b9803a06 -a02ce672574d41898e330f18f3fdb0c3493e377dfb002728be112e6625023724 -a89da99cd67caf7c1f3b395677169559b06d748a331e2818f27f50efcf76d881 -c09c7c237e3c00304b0d6f59dd7a12caff0b1af769255bedb43de8d4a0fe7803 -62d04729ecde386d5e85e3476dafafbd4f41f24d9941f441cbc92b73a3c9817f -ab397183e9a64ec258fd965707337408c4601049bd8c38d8b6f769ab08008f5a -badf01bc94d801e9561a9ff414d7d2b9401ecbace8a8b80ba5abeb5d701d02bb -6ddea8841621c977ef5d680b1d22b4ec83c1a749455c1aa9c5087035b832ad5a -c364bd1f18bb7b20f6c735ae149fead92d2c3a5403c46e0d55d1ad0fa0d4f1d7 -f9d670e5f0426e865c8733825102b6b92dde23679b74cbb5ca4eee791b93ce27 -e8abb062e3eb82f38018dfb9f144cc640543fe7d8ed16493848b5f1f31fa86e6 -caff6c5fbd54555940d3f1bd376f454caf69f002b91c2fd77848c3353a3cf208 -414155a9fabf34047f1d6ac10e3967f434218357ac6c5159698f21e53075122c -fa05ed1392431c4d2638965864baf262fb8d7fae487c4f755a782855aa157de0 -15dcba11a1c649cf5c926ffec3dc264386491f298d52071ea5b9bb50d82e1701 -fb5463461de9e98e029cc3b7d4621b16f29c598c10750f61ad95c1f096c3a3fd -d4a327adda358bbbbb0dcfd9ad6331e6a28bee5c58506eeba7db703a9524bff6 -2abbce7362e3f0dd61052504cef97f1725a5beb35edb5e08de8cdb3b72c2aabe -ba2c9f6340f95487edeed33d8fb9006b2b105a71dde5f440a0543af51b9d13a6 -70f0438884b84220229e992f3c18d0193267b133f8234cd5be9625c712913e2b -14697b6042de352f6f1afacfc6a225a4faba63826675f83290965a536ea3f31b -88ff1ca2774aab2d636ab6de2f1f87fb54a5380d3a8b5f9a303649a4f7c0de26 -626b97599b0a935da6a62d4dcf88b7f603bac672f6575bbcff1784271bf18bac -4e33df2ae95221bc09d7a58b670df76bd96d1303f66ebf40c3712eaa384252bc -b63d409a8f280ddea937f73388ab0acbe7f37145bed320d3efcbd94bfb6e6c29 -9ddd6925174f858497804ab4688db812cca27262e7b5713979f5d5fe167294c3 -5f10878e60950d1b9d1bd4f7f10c0c0e1fbbc095c4fc1856f4c04d85649b8011 -5fb0dfdf37f9604f4a9aa6061b5029ef157b757cf3064a9aac5aac24648a9c15 -f0a2a74dfb655e65341c03139de98db3dfc2dcbb39bffafdff9e67d734516e0a -eb7c111c39b6ee987f99a7064f98c4f974a24466f60dcdd9f8e526033bfc238b -35a5d78df28a114456211b5d26a164ac45bfe67bfa3b39c4622d67fb8a305d03 -e5b8548d0c01150d18ab5de5aba0aebc35b456c42933ce0370f8e8413b13bc6f -db80d558ae7b5a32077897e3ef1eb98b93db5c00f34f33133d08a6a8e7665e3f -eed2e1bb318afb48b73ed72bf9b6234c40f028e76a5a0f902f8702ea234a92b7 -b8dd516336336c31f9baf355450fbe924c44560f32510e183a976a1f98e0ee77 -e99e26faa72e5e7bb50248c336e6481c1e7b00596b1f511db2dbef7a288edf8e -5653620ab52f7e3d10921ae2e194c6a842ff1829ccb8aaa542a53c04f8c23cd4 -08b414afdacc34931bbb91187dfd8c1f3bef02652e042adeac4b9bb5ff5ef7de -60926e02d49e3d55cc1ecdd555c1f4c1a1083dd19c6d58972d86558198314511 -4cdcee4aadf3799bf6d81ec7d4347225eee6e67126fd91937c7711072047ed3c -4bcaad89c800e05a3304b95dadaf9c7333f0bc8aa1d711122176f3db92d0a4b3 -30939d1b554d47893be691dfe0e5c47d32928fd984daf6c03f32c1b99efda210 -faae4a783ef7d6eed603d5db1828c274061c1fdf78c40ce76a7949af802bce9d -d84a726212e23d97b0ec1e975245826f3c49c995c08940c680c39a598553dfef -1b3c7232f0b698fdce76a0dbc3a2fdf0a53c6a0a48233a322d1701bf43c82bca -12ca3393662fc5c4d38a693c30b9d3c987e872b91a0bed138bc6a671573d4840 -46c9adf2cb62df79585011d6d61e2159ba67b4e7cb35caa2de2ec53452dd6d82 -f488fed31ebb907cee7f61773290dd0e0cf4969f2f123670d59d24f909b8156b -9af55056199c5a1a4d4d3f72eafcae937765a6e041f626fa9ef67ad918d9e10f -328b3ee0aac1fe1d3a0231ee926659f238c60c772fdb1d13ca48217e43a54b03 -56cf7084cd9bcc3e0e482c18a1d5e01cfc1ccf0cf196af73f676b915e5efb9ef -5427d032e8d4f9cfa5fed93f85707a1cc136b7bd35b52a7a4cadcbe3f3a6911c -dc5b7fe0607861e73d5c36bda58e125d20c30ebe336dfcbc4232524a179d763f -6e23915fa34eca1e4050027a2b8b7f54ebf0b95a68960c676a0927242a436cbe -64f7fcbecf8dc5c850858725a1e3b701915f9be0a41214e42fe2b850dc7de4e5 -edff5f9c6eb1be2faf002a6c3347f5895a6b39f8a4ca5aa65261b03d7a17b58c -b04fcff305a35b1afce3bc9465770b512604209efa3052c2a455ffa83b870d21 -15bccef823883d2a92d725123912a9e89b4abc02185621a728a447a5957d78ea -36a3e8640e9169a850b4a2cab7ecf9ac05f2e0b30c6f626a1f59316e29081c07 -5b22a491b8cc89d149eaf7216cd9d55de0214ca1e70a5cedeb9824894dcccbd8 -dad1e22d7954a8434773ddfcc0474ff722a521462bc78d20369fb9383a6530cf -e8ed7e26bf47e61f7d16c44631edc1bd494c461aedd67ab56aee434c442927e8 -1acdb71ad196938935646560a0cb98677a64431ff44f2e50552fb2706f206a1b -39b95c94b82c148e1a3618b666c555a258908f96bffdf1e6c34f65919440e8a6 -4c10982dcb24cb5ae5ee34981c9c340065bb0a6d68b1735ca808bf5593d86440 -6bc88f81d3c9f0575216f2f2e5d7e12df7459bcfd90d217f4eda8a8d6855e960 -e7427f6f3630ccca0d72994f168eb9e0b7d401e797a1b3b250cb11d3873fa3a0 -4521d64a5c71b3bb2ed62c762184a15fcfd4290761f54e5c2dbac8a9e196bdfc -0fb03afdfe8c441933c35296063e4a15699c82b83142ca7ba239b6c65e3fc1c4 -e287be933346e534d611c38b85b298c51dacd20fa15f91a7c84dce62e3f9ca70 -000b6d0e62ef647b47f8550ab0b3e0e0575509f08d73b522653610f2cdaa60aa -a62677a35d57d06e9f15d99c7fdfa77fda7625fb3f418bcf4cbe480d748b99a1 -2e332920f119423c75e8d3b18de4284155230945da1e26b73cf56aadd9e20fc7 -b94a75b55e3e5ae6b51a831d087e6e5b1606757ebeed58b5895d47546620313d -80c230bc01b17f0e11b70e1a9b17bd878e2d5ab31e3436c92e5366c5b92f2392 -08e2c6994fb869586c4095ab7c559bf8c70ba0ad8cc13ece387c57a6f79dc107 -ce6f7821f77c6e8e493f756453512038b01f872e90dc1d9cd0b82026446a9dde -fcceb653599aa3b063fcec2f7e9c80665b65ea21e69b82ee4a99ea51d9441ffc -0f2f7dbe9d4dd204cd4066874b85ba361fd0aff5bc11b8852625701c7f174302 -e60cc1e257e6511bb7c819a8838501b1432710df25b653e1e3804e4749cb9abe -f08ee2a0b28ffd07b9742fbe2d67d568618a593945959a706fb055abef058a45 -c07d62ad9f63c2349ab441e2d72b8be49d1af258e365bbfea63da2449a87aded -b306753dd10c806c0c9361cc27ca6f837723cb538ced898caffa815e12bf5e9c -819b16a449f8e9bc06a8f8ad631ee0e8e23b42dc7eabf8dccb0f9dd14f129d23 -49dd04e23f1e033c95d11fac2e2809416055546a93c9d1bf3c95fe8cb4cd8cfc -f0f7b21632bec14a136a9b694e40e36049c6f233e01df150a946bb28fb0f000a -4d99dd94b292f45acd9bf8cb8269061bbecc062b64b38c526cc7a55e2aba039f -c3bf691978904c0152d90c85f5c33779af5101a6ab0eac7577624649c9ea8604 -b942b0b966c3c6e670601cf3ade97a20fb5a7a79e5c3c0d5a7569d615120e89b -1c33397696744512a60789193d699802ee1f37ab3a13f8c007da56db937f80d0 -b9a23b066971241f34004597effea6d0625fcd9f18258aa378c8fc4a41b7d1d3 -931d1a7d17edb0d36568955e81787f4f2ff2858855f60b3061a85e6cdebc42e3 -44559734780c07989a41642720daf7cb97bf3be7acbc590d57f1791238ac096c -b373165488fec94045578f0a69fa4ed0366b94f000045ecf486b0bd54d89bbd2 -33d1d814886fff091d6bf567417120895056372ce8d490c02ee8c0b40634becb -3f13ca1305f352e96df55e9467e16ff92d2a2be8b1d65eac380e41db62be9d4b -341f4bd6aa69349791c98fa61490bfe18286bdcd936b27b18b6675733d447eb3 -79d07b8cdd7bcb3f1297d4c142798d6871bbac3752de9b23ff6853d5438dbda7 -6b33d3fe159a064ad2d2901d5b31ed8a3987ade8fe06cbbe7d69716b4a35c489 -841220a5365f0a000206619b081bf55dbf6abe9adbb9aead2dd25b66896f81f0 -9c1c9cc4332972ce1ff07930421dcf83428e6fb32fb86c6089495bf91273d7df -681070765ffc1eb22f5a31a00d424f99e11bef8067980e3d9f0e66ca266bfca1 -61413cfe419bf03ebffe788882aa52b4ac2b1928800008394e18fc88a55f1db3 -788c6882da7e4a1eaf14fb1dbe6ebdefa5cef0d686245c1dc794298511d38006 -2fae24096f728f0aa080ecc9d85e5bb0d989c5ea82fcaef430cfeb7aa9f6369c -74cead4731d892a49458cf89dbba50d7f6ec38140852169dc4ab886d92a91a61 -40fa81b25b8c93393837d64b8c390389205b36d444731b3ec745a944b6cd2d4c -b75a668f49b01b6689ee9d3bf88be3ee24d39b00e20b4764513e0b2813c5d4ab -2d067d468ee2a805e3ab73c05ae11e55b1205af42fb851bc69c54e8f3f1083e4 -4b4f781cfa7f44ef6b1ddf3163567d125e052870995761b2a9c5753e867339fb -781f0f80452d6350d4cc6dea0c7c6dc7ebc3f1d99653ab1374b26091e7247364 -b9ef32721378fa994ee464b5d653438bb181e2d5af0d52f6f25955fe91825f2f -504ed079a87da169ef93971413c2f31fe10ac677b7d533207be18b95360d9aaa -ba427161e12af468b4d05e929406396ab010aa775b3746098a044328ff0e98a7 -e53240a0a3a87e955b3e7c5dbacd9a0cfd7575ad4cd9cc22652c7cbb43a29764 -01ae4868bd7f4530775f0a6bb230567ee11d542cb993b2aba34f0bc38a36204b -85ba53df1d746b211b1bd22ba85d6a7dcf9c039527b26d950afdf4892d186b65 -c7ce1c2de59c03a520af9d013878e989d6d5762824733cba8a37b01fd7e3c169 -90bb8b8b469767dc749663904285bd4fb4de7d363efa8fe2e058c641744f7678 -99f9b384fafaed93e9dea5615f13957c8080388b70c478eeeeaeff2f0d3d123a -04ba45066d402c6d1afcb4920bd0a07a386bc5876c73cc5e89cf3f2fda80a47a -63c7d8a2403c2c767625f25f2407931ca9f11d3f3f1236a77c38aa35811dce4a -ce4f9fc2ec53e0d87262fac254827144e92eca37c09e73445060ff736a334f2c -c1d6789ddc6f426024e6765fd9815f3f2636fef179784f7b47ea92a3f6b66382 -5fe65c4e219a2c43af91e40ac28c2b7a02e7afc1751b2b24eb838ca55bd7f66a -9500ff4ad31cb1a627839334ffee506f87b0c44b50c4214318aa8c41551a606f -e3addcc30fe261c4859fe204feb3471d9d5356c6508e2c37616d529aecafef05 -25b67c8f7cd1c26cac2d990ea57f3f48b221d288a034768646ed29db82f0b471 -fbfe3a70debbaf9736df89e7b054bfb1bb6c6ccb6a1a71f9e11937f156a75291 -5b717c9a40c8902740e1e5eb8eebe94183d9ec18ec857bda2635e0eeb26d7ff6 -3edd21c1cb4be925f049878ef687007a67636effe6deceecc73e8871441c842a -117b9dd817ed80d0920ce1743ed6b8d9cb15c93725a4140995411d75a0f1bd2a -a10bb96893a7d439d3110bba9ee156d8b18627c7c2b8217969e3f6328b53b4ac -62dcfcfd498581b59b6d018733a3a5ed55eb759b83fa3b1c0793a247bbc6362b -2a8837413d0edad8ae649f3e06214a316fd23c5d0306f0ed9f8f5b896026da63 -d2a18c58352a04c540a3f90de5d56a4843e3d1fb90f5e712da7897680a7a1d25 -4d32308f7e1b8de9e8cf4535d9c525325a1ad6f543eb0b1fb5552dfe957e59d1 -e66da60051d6687fbd7231324380c9eb9fc8b6cf4510b043fa48019fef1c094b -84b7f5e3816df7c138f2e6ab1303b368687d1e3c7dbce4754337a3de11f57252 -4d2a143826e406e082c3d7a69ba88e2871a1cae22d6a7bf1ad1de45fcaaab235 -038cbbb623719dc5533d36af35f712e9f8ac826ffb49b4fedcc96c4f30913c69 -ad0533b02a4684bfddb065c32b54652402869d8d6141f90608201397f3f0bea7 -f41670b138c6339230df305a07d31b5aad40ec48277df06092358bcdb3961bea -d551c94cd039fb97f46115d234965aed70aced9be3305de77c7f1a33f3292bfc -f965c53292a7f31a8926e038147a827589579842df86b16e840b836c23fe23cd -059ab92be7d7037843661fe65ef0dd48d31b07782b542f0b0852071baf3b2809 -8b95618ede124c9545b31323d1e454ada5a03e1a33ee34f6e1901d54fb90ab12 -ac146fa7bf5aaf50f0de423e8e47d45cc01867674ffd404060eedb137115f352 -c07f7251835a8ae2bdfb70d022c2700b79fcb83c3c312e7dec4001ac20919443 -acc723f7269d60f3d626dde9d961805ae77acec4d40419a51baaccda682de591 -9df8ac6875b9fdf1f1281988bd94cf1f5f06ccba48cdb6039787d63295fff9b8 -c2b84b30383dadf7ed216b830a38caef32a3279e86ff7e92865bb6b421166e93 -923b68a473de95dd52c986a5a4f73473560ca69e8ce5f7005e9aed1f2ebf81ac -397c9d6efd6067cd741739f7ba770b7724336429685d486ced5a122aa4d78647 -81fb6611c6fbfa68e7aceb2a757992b249cfbeba51bed32b7cba777fa78f6db3 -95641dcefd1a61263e2ecfa95938e2c3380a8617d4a775dacdd824cd2c2cfc67 -8a5727ada2b1da97f157e543f252f8d3d2bfba555cbfe089e8bf708ab253a4c6 -3f6ad9bf11b96988aec8a66984ea4952ffa81aeee213ab59184f8be355db5010 -17bf130f7d492b9bcc4b67f2cdee249f9b00bb405e3c580bc56dd1639ff81771 -8d57d1ca96b5e8df212bc86b709355d1551b4167b4e35b14a32a708d7df1847d -f80904addbffa67dc2098848c24b6154410df3c6ca0559a1855803ff6426aa69 -ccc262dc8a2636c17ab65c23004d5a33c7b6c801596f0089a033afd69006ad4a -f21c0cb08238c0051345e0f1b780e914b80b1d74eb45facb77b1c043a55616c2 -8ba8ad3983fdcfa07a3ed19ba69b97c234f89a296f581e4a380fc58056e72096 -7781f036f7c3691ca713ca9d886ed1b4a742295c29c1ef093f93d6fd507af0fc -80c5a01ca38c17b8ecf33b38fe224c67cb551e43db191968311c38779aab6c4d -0efcc2a0781f4e0758a99b13b520b75808cc555736424a4333029c5b95edf387 -7e6d17b114cb2821286dc34dfffc1e89eec9519c44bb5c928fa4ec44bf5b75d9 -e13aab1a73abeca008d75e73d72839653af898db554ce339a867d7cde546c249 -d0ac179997861a121cf2e1a1001154ddd1f337ade69263c021bc78724884f470 -4cc8b2ee48a1e91eae27a905d0e73a98b00c4353c4da0aa4abb75794b5617080 -a4a610ee9270af4393efae916b8c4f5af945d453e9ad0159deffdc96e5c6fcfb -95d9546275d8d7e4608cf4add77202df1894ba8bd0394d7ab8a066bdca5c649c -a78544a7b54b7c6745321da400d74a0c67b7c1f412901aa0c8c73d075918b4c5 -a5462d30577d848479987a4a6110b1748884576a374b488ed5d06e017880cd29 -70eddedbc04a39bf3cd2eb3f0a48dcb3b7679bdf0686e77c63b2fd085eeedc2e -bf04a42bfaae73afe9012890b088f75244b6efbdc2f37774da13dd60c89eb077 -3018a2d9707daaf64a1efe40cfe46a5ca252def56e9ea2abbea02e4c86eceaa3 -85b194025491448e9317efd74f3e323683c036805c158e6c420c54a9717b4c7e -7343b48e2e9cb16d98efb347dd42f9f2ebeca64bfca0d15c5f8209d35c0e6328 -f19be8be0c967c2f577d7ff09a9d1b4c6dee3d744d6912977e597be47e4023dc -3979dd6280d66382782466112ae09f2c8048c93df7c38176560a87e679a681df -708ee6ee2e3270bf6c8b07c15a0839b0b4c4a9beb898d523216f2a9384fd767d -07256afd80a51a2782907e34d1694b1aabffc98f5dec33af246e5fc759c452c6 -6b34ec94bc9d66fb80898322701ba188fe5ab3dda0cac7230f6deb980006b0c0 -786f1586d58bf75fba6f52697c8cbde27b8525a27c0b8bcbbc43faf42b419156 -eaaf3475a96cbf399605bbed9fe577155c920eb4a4851669ffb1083ef45ee35a -83eeb96f3d0586402baaeeb1b71c448639a1ee577c42a327cc78484f4dd38fb4 -44162bd3b5e6eee672e6100a818657759b899030a0b1105be1e629a391aa397b -888f0175e74c210ee7d5a8a817d4725785d2cd565059c8f08a6ad227a2645918 -5de5cb6bbf78143177a4aad766d2fa844dc7399ab1f800b5671777d074b8398f -dfac8803cf6cb19ebdc486db2f55b8d0249382dfea1732ff0ee0d8fb4638c316 -458c6263e9aa416105806a4eff7ad6abd753009c243c3b1fe505e6200a7fbfb2 -0e5595292589d13e73286122f291dcd71b708414936143008bf4e42da33043c4 -c4fb7fc1cd40fc685c923439419a441200d118c497892ca1c492c52dc1408771 -c428cbfda340bee7f84d0c2ca16c4e35a0962da289e76a728683bc6baf252f8d -a0bb4e3514f5127c513ed939ad1a585d7d3303e13af4f5c35db672658269feda -b0d139750a4b4a26253f6402460117d541e55c7b899f544078e7a435d78d474d -71f7bd24e01a395265cc80e525eb2185f137b26dfaec31f616e7deb0f6018edb -a959bcf2d04999d1bb21e39e43739c995101557de20e32e0b25674d17c12ce93 -f0dbddaac156767ed03f2e081c63ef94828ab30d4a11ab5091e632b6efc0d740 -30004eccfdb55c3a50ff091afca5acf052cdbacc49f4a20edde87dc6dc2e9d61 -7d0a40cfadde02ac8e7ea1f375267c7322dcc2d3e9633895d1f897969c3091cc -7a0a7a7c84a4bd15ef83a16690d9dc380f07189403ef0d9113c7ef0da0f1a66b -61d7f9593f82f849743647d8c2ac15b7e0c87b9f7ec8d7adf890c754cc29c38c -02982e19d542ce713462c3f5e22feb2cdd4cdb6627d419c5b499c9442c58e4f7 -f0c0ba8ced3cd519473145238abd923930d31f369d3e067b6dabd69c740586b7 -93acd9e69ae61baf1a063f062f22025bc3fa2e0ddfd7d75454dc1b8ad9629167 -656edfee69a41240a08f6fd792e5cf510a3254970429cc76f8c2f95a86d75d2d -c98d8c7bb4418561d37f478ee00e9ec8f52f8c745fa570d42eebff048d60a6d3 -e16d9a9bfd1722aeffaaff77ec82cf4fa593353a1bc6d96790dfc9c6484d22be -72ef63932b363c6b3057969624cc63d177f5b103b77b8a560bb0595da7416e29 -a8e43480858201306e31a72b3a7e01b367a8917c19293e57e4535d734fff4e17 -f50fc475ad13a5203501cf2c29a3d135860788507413ae93be0598f21a51f317 -e9da8415f5e00a4dcf49f640ca26c8623ba9c5e80e8fba310c8f06570a629a50 -758318dc48c876b126850118b8134ac65333f17d67ffb7f3c7bce5c07655665c -4a09e6fed0bcec0364386fba63f4cd34431d2e5fc44e3821abe5033d77c1a901 -183a127f32b003add501dc875c453762446a87bcaa50bac3b75a453caeaaaa30 -12261d6c08c95eff1df3ece254e9f41d7ae85efe476e244fc9d9e0853017eba8 -7ff6241cb9d11b7213d2ce679cb1c071daa5317c7e3624df30854049ac46a995 -97422a2dbe9814d92e829744db3d600fb8509f9537a101862f9dc84d17f84b82 -b819ce71e40c2e397259459f55ab6af355a6c4f359ebb831fecbec1dcc4ee2c2 -503dbe52d26b3a72833d36a67a73c9de2705769d8ea05c92bfabf4d3ddced23e -a37214587f6b58df7de6318187d2272ef039a8955de18eb7069d08fcd6f9bea5 -87a2a6d3db572662f278146b51f771189e46a044ef16b7def53b9746d888f2d7 -ff871658dcd3487ab266197e7e34c177f877b07ec4dfffe71a0120fea56282de -97de3d547ea5b97b5f2fe7f14f7adc84f461e5fcf9aa866bfbc84c9797c68749 -03b1a017186b2a386dfa8246c584461bc07194eeffb18f8127cf521e7756b715 -7f6f7c7358d2e5d9255feeb70eb771514d052035d27a86378a22d82378d99911 -f8e667e1d2df9611eb6c369826eba29ed9dde39dbaea38c9fbf05ceb5910d484 -453c9c282e5d418163b4adbdd92c091758e1432e8e75e151872e1dbdd5e813d1 -1a86cd3a230bdbeefd67c02448594bb5e8ea2fb6d07b098131a73a28f9cd9063 -59e8cd66c000894ed7ab70240e06602d7c4e5c2847095c961f88f2b02f2ff063 -ccb5f34f7e0696af4e43023cb3b0474af145dfa09dcf90835b766358e2ede785 -c63e9bdbbc208fed261c5bdf4d10a769112b62b086bbbcc8d25486310f6a919a -35383ca27e13724504c63667f79103fda47692d2713923a5b982a2633b3f86a3 -46b4d7159a68ccfcadcde10084b91150fd86e1e185753a663fa82eaa428541e1 -40edd7a75007ba37fcd7bab998a401a37348f58bc42d809ac2d0d38c7f49c350 -2bc84208804d6550bb732dddc1f760684f0f2bd1d8fcc61b29b5fc6b357f3832 -54a0f238a00f9dbc38f063827fcf36ab943c9f61ce4add29be32889b32dd1584 -c54d3900de0b0acfc1345b1bec5ad097f75adf92655a12542af7b8c618f07bc5 -cd4d69b206bce599e1e6a8485849a7f2dca770618e877b44150cd34101e4a8ea -e8d3bbfde9dc4a862af61f8fb4db683a81e614545d38927875cf8c027c3e28cc -152d7299854b95eb16df2443c7ec9fd40ec579b52f9ea5a6ec56e3b662171b3a -bf35565869988ab1684d47b801ae6eb23a6bf085c41e3c3f2b040aec9bc6cd82 -58ed64d6ecd8332f966da918d44af30897e54085050a0cac70f459a72f5af683 -3264a26d0cb7fef77574f10d4fa8ecfea0aa397d5bdf3a62d8897723de545ae3 -bbf38ef76b76e3e72d1c3a35b29966acb40e13928de55cdc20e691daf5dede05 -b71e8713e67ffed407f926be5b69aafab337d2f04992abffd60364a8549835e9 -299df33af8212c75c0819000536b89127613c763df066d184f718e1f10fb8e08 -f5fe7b8abe9f72743d0db04afd1d528780a097598a67a9da8172247c6d638318 -9885e4fc9231537ad9bea8c3028c7cf26c3ec6b7adb82b1481ca1b149a9d2316 -2ef5477fe27363a3b2ce1dbed38128d16b869eb8f21807f6d5430aec30cec535 -d0f4458efb8c19834474719b6791b30edb637f54639396a7dd581a4ab5e97fba -284e1b756f2e2e3b54d6e136b237bbd042c69b21244248674dbb4973ec7ecdd3 -9f1ef47545ff01b39b09d06aea5b412e81fa46ab0d048b6803a5992de0fe2f63 -6d6d29b316a9bd4608131cc7b4c0dd1db4a249647ef8dbc5a2f9b9524284df3f -1e70a74c8aedcfde0f6c556713ca8b13cfd5094cfe64f1f482c29e72adc2024f -a2846a10ff5344cfcf8113d0d1da07927c53b9aa76094106061eeff3c7e5bf25 -d875ac8c07c4ef7a0bd5d4af2644e6ff82c8aa6e4506975ac9625fcdd47fc085 -4ff26d3dc3f8843c1d97948374170812c223ca163451e0fe4ad73ac7089e4fc6 -c24836cb8413a3185224724c5b302fa8d9ede4bf88a0109d98be35ad56b45045 -3422785c4f579a9307a860be505f5d880fa5ae66c82b293205e738e910ebefaa -af82bd9d493ee18eeb12e40a69b9ad40d5aa6839d58a7894b5cee115a2c42465 -860139d35c0f2640041679283c476a3fcee985a53ea863414b206dfaf72c7d10 -851ab12466eaf532d90be235d9beeef7e389e88a9319c536954f081f511dc717 -16f16c21eef839669bfd0d8b505498b0bcc83eb41889e6380d8104fb732e982c -ddfe4d508c45e8741e21d6e5934e678f38dbf17c98196dfeee7f9e205a52ebb1 -b9e2fe333d6b1c1b1b3386e079fb941c7ce482f2ed5c9426a224309edae06e3e -9e8f5819ba4248d82c7e9cf44f7d1eb97b2110f9ce9acc313579840154427df7 -b2e57e2c50c38b25f593092f20350e27f67a1000f86fe87e2acc031235de5aee -f246f75d4f4bf7d8852267941cc50de864e0ea34e02efbbfa72587ce257ef2de -b249377e0df834e89060680b54c38d036895e4e2f8d55b9e4a5fec6da7b99966 -9b4ad9b695d6cffc349bcd34ed2abab20e289417eab1916574e583258817a100 -5173bdb345810dbbe2c600c25fbcc73727698446a2c4d1f71732208a70cf557a -30e67fea48eb40f288ce4f576366b0079195507f25bc9852f6fab94827a79d9d -16fad40c0fb0733ca838a148f1c2050590eda6cdd3a87283911efd861c7183bf -10462d87eb0c7131c18346611088c5a8deb6e200ae86977736f2d15d818a444f -5c435bbb043c7bca3d5f65152508a0234c6043d7e67da24f0b4d8b3e7367afe6 -c50870216ce2e4048589188cf361412cd5cf8baa691fb7dc66677822263ef3e2 -338a4064fbacdd0f7460139c508bb21b65f3f433c90fdabd0170268b7ca7003f -d72ab116cc3207ea8aefe60b715e426cadd96d4dde5cd91068214c92a1307237 -951e92f30e07878b695bb519d60512ec7124d4df28fd5ace12a9cbc8c4ff6c16 -f697ade3613e22880897bdb1a3aa680ccea6085e234ae3d62d270afe5d4254bd -6c4d0fe6b7c281919e6d422431e1be80d47a51628e3edffbb685a7aacaa27dce -73938aded090460b036236e6cbaeefdd26c1e5caf99efc45cda9b3fde97bd072 -9efcaa80ef173375e99894d12c609bbb57fbf0bdec7b2150970889d08f992382 -23cdeb12483e3fb57705d03eb900f648618cf5822b57480e2fb420a5022b4e22 -138ec9b68d4088a833d50b2da7a26b4cb07ce56aaee2a1fbe00dace02a1de81d -143f3b20f87b6a394ebd896b3a6e8ff548ccd70bfe95eeecf9bf9367d543f75f -575333b7426d644dd94d675e17dd5694b3a1535aeae056900a9bf30d6a7e39f9 -62dff42d57b9c7d469446bea7dc3248e2093d47c3afc995e7be86438cecd902e -13b1686c5ac4a58ee9a272f0ad18599b8495306d146ac0f6b958b86b72e66121 -3279ed284087ccbd1e8c865df2fc26702cf399b46afb744a3e99af6079fdd596 -5d1b59ef92713a40d56917270a40fc029583989c94caac0ea6aedb0310ceeac0 -96c62a045f3e6b5de1963ced45c566d7b10ce5ac76a81ff38737104595667628 -b51a1ba8172022d9c06f5ed6ee8e429be415fea9c8f648a27f8529090c6bce5b -69abe90177b1274d5bcc64d29db949132223c7eb9473d5af376a81d94826f141 -9bddd79521481b06adc451ef5ce33ecc43a69be43916509779b4c8a5dcb4a2cb -c12bb54f3956a97eff63d26de59faee85d6d3ed74e2f897fe852de6831deab85 -10e2790367840dae069eec64a77abff4e09225cbfe9f4fbc99a1cff38e2fe632 -792db6c32e444e85b2e09dff8f66dd638c2b0b5ce375980a894bdd6a1635c793 -33da9068aa329714e0ab8066ccb7eb15d1ff96414de80b5b791b34a62b25a249 -21cfe87d128a4cb6b93d0e51ececc9deb841e3a3d63e78c053f1c580bfae7d6d -7482bc54705022d1f48bbd33d9a2ac7e0f6ad5efcb172aa4e49f356b993bdd6b -8667e358e612b24ea9994a30f80a4db180c801b740a3234c0c95a8ad6d823791 -0ffd5806fbb8e86165fe6f343c72e655b57b2102f41a42d0220ab13a53feb105 -4836b876148c29b5d2532869882f7b54c92bdb7794c13c737d8a44bff734def1 -69786d9dc57dc55d385209061f38a411b5d49c66f191af793ed37432d2001a7c -0fa0f23b32e80ef519fba48264eaa841427b4fb6311995d63ad919ad034f2313 -d6f504d4eb0369678afb331cfe7f4ea1b69175d72ec4df93d4fcc4d91b880009 -6c371d04c12f033541b6e1e7a010689a1614c157d5191c69edc290a907349459 -b6ae2a0eca1e8e871cba19bafa4b861a29172153afe7b9b7764a6c3ff87677d8 -8f8db936d12c33ae05e93ec31944ab240099e39ea3e9de81217996c91a4b5685 -e5d9f7be2727d5f3fa41079bd37760568f2f4b4ca19226949b0723985e98e7c0 -9c1be3b1d19514e8236f8da7655c016cc7a79e7d19c0415c74ba1dc510536799 -5c08f9e243b1d3065b601af52a1fc72a24cc36b3a283adc49dec4d33fbdfaa37 -055f9ec1846911e326cecdcdfd4ab522d2b2871c03219bb991567cceeae2959c -96f068e117770adff52a3be04d935141c20a9d1c56252003f8bd51aa1d22ccea -15fb359f308ff2d6979ba1d0da54d9927f723b505b86de8325bf3978230924b7 -97234835b6b946c5239c196be506bccc1e9a4f2c339bbbf7b4291f1e830352b0 -2ba637fba6dccb5930638db302bb61621a534c7993a0096265271ec3ed86fa81 -b6c7888114a33b3346a27931ea6b0b2eff65f94ea692addafde2579482a28609 -bb20c6f343c8fa777cfa9bd9436cb47cd0dadf4d16754e7da03aafab0edfe819 -3d5afd59b5b96b329bb4955a9af589c6881d81ace8c97dd92be95623d94b7825 -4cec015c59bf4ce98de9081328e7cf5d085803212054da028016350005aea631 -bfcc435114a426c5d4367c86311e6437e0a59137e29db512efcf312e1fa13624 -ee6f728904e0ea5def5e842f8f07f2627d077320e90927a81fc6162586f9ba73 -d061839ee5dfb7c4c66a530d1a0647a87ac4ffe48c956fb619c01feb95baf99b -56b0799c8bff1d670ba5530cf7cceb6b4aa1de7119958d3ecaedd5dcf835e7ea -f16dfc6c671e6b861297e675ba9bde08d0654c4d9add46a288b15268df4a6572 -62f9b12765b59b338c718651ba92329c9510655da59347336f8be78b9508b267 -3e366a409db85adf04edf07d75111d2fe6fd24a29e5072a876ccfc4290b0f868 -fb9fcff47575a376c594196d8463f4b2defa8434bd1e769553eea3e817fce981 -dec52191e10a7c9e2a7328df0d568c9149bcd8476913e4cd385176184e029343 -3ad94901ce4b5c2cbb88c785553db92464284fbb1cc3c456d8211848dce535ba -697134df3371ed34bd6b0fe30ad22356c0dba8ccb32055f01c0fd9a931191bfb -a1af29f383a66ae3a810de7da2b79241e0bb376e4405bc7980cc17ab240b9820 -202c4cc9ffba362c8a547a7c9f3fbd37b55062a294870721db5f063e05b48d9b -567728f7b844f85701174fc98aef1e583a022b7207a834dfbd9705a16ceb4dc8 -c5dc9305ac98f5f41be6d317e20cf2d7166934586bc63a4cad29b1715bbc8d0c -0fa882e364ecd976e7406899f12bbcd6145dcb5f314195cd4ab865ae475a0c20 -644747ed8f79ab9f4fb736fd7f7361d4885bb41cbbfd59b0b7620cb17659be6f -986fccd526e9756bdf412c6000dbb9ae766101ec23f8036d1afafd45f106ab14 -a3ef3553cdc80411e766399bcef62e77e67ad7568812d3b150c29a961dbd4e47 -ccf7ea533d1bc8c16ed25bf5a330731ccd02139b72f63234d49d5c33a995abac -40cd06c867a08cb3c19b7a0f9df091d51a1d387773ae8dce4147533e41f929ca -cbe198e61b81380306dc2c99e99abdd0b6f2f84056ea25d549bd1f88be1dbf4a -6fc994783d4475d4018f48ed18f1bb851a221da3d9624e3a7faaacbc5e9b8424 -797e5646d08404f2feb868d59714e4ff77d6aa968749e1507dbd7b3ff19218bb -fab82906e56136cdb9e3ff1db470a20298b16f08f48a6937761a593e5d98243a -c842bd5c3acfd41791ab02f991374cc14e1cd0de834d5a13343d70d739c746ea -626310b0f7678b8e7b767265f343ec770cb789e8dded6c56889ccb0528ecd747 -0668da632b3f399ef2e28e3d8731708d630be0df2a1becd0e95d031aeddd74cf -6a2e2bfcc5024033e2828bd043dc7271d1863937c71650e5510418e9b9c35b7c -8bf9037305bf2c78a63460dbf914e867c16ff5dfcf05c44912c4083cfcf6e498 -e7af6072d7052e882b188c696fe69d1cefc7baa001f095ed80299c9290c31dc8 -3042ef7d9d3be6ea2f97f667a77918eb207e459958b60feaa7ae8d0fa14f00b3 -37a1b40055b720048a3b67c2250f3d94b10133c1e473e5f9bca3b4f72da29c5f -d4c09b6520ec5c54792dc37f10d75c0d4302844f7d193cba7ca088838ce44a82 -f1d3161489ad1b9a2cd319840c0f347131f94296f856d935661f691d737a7e94 -51872d4c49e71e9fab6ca34a96f682da48c50ea79dd68e199a2a1d49f81a132b -9a990f99ddacd43888069c37571834ae8dc60a69851f7a80d65f5e1a688930da -8784aee9a5d6ebe96e62e4cdc8b34740acd63f50e208b43a38c6bd0808d356ab -5ea11fccd7ab3bcd6aae709995b45e03bddfe1052a1c8417f1d8a794a66a0e72 -9db494db21a36118bf7c031c1e0a47c35682e1f0a183e1289a438c799273543d -99a3840d7549891458f6a3ba49b9f556920193dd86ef7d457293c17ce9cc76b0 -6eca47da729b0c9d0c3181b59f993e773f0279ac90a5ab526aacd6d8293e67ed -ca0eacdbf1b9aba40e5979a2f20810e6590decebb53bb32414b81aecfe304407 -c42af75e03a6c1016c381a378afb7b943392c081af0680726c0ce4c984856999 -2b7995735bfd871bcb6228d87d3634b3ae50d766a3237361a9478adf6a32b12a -b435014eebcc53c44c63c7ae474b4f6b0e4fa1b40731d0a3aa530f9a1626e700 -12b5a51fc6473e3bba2e0eb274b747273ca382902511948174fa78de5c7ab5d8 -7ba99000052d5c0a4c3ede1da7927b214b893d61fb11ebd6dd1af012ad26c065 -fa64581182cc1ca3b86150e63e5e3b892c49fe4f6ae6c34ca1900d5fdbf72c87 -6728d86b87fd0db490dbaf34c1c10b4d123ccbddc9887b3818f4335baa4991cf -812bbefdf1f3a3c4ac56fb633d75d04c17b5256a8216537c928f9d48b0fee946 -fa5d23ce42a4bcef5075e9b4b144ebcaf4887180c733e8e3ecc1ffda9459588e -a4c2f6af2ef3a06a8edb613ac2d5dae127e50077c4377ece47b7239b15b2d27b -d08df1870d8f78fc6e82a08441ff64b83ebf556db056fa7847f572fb4c2b2a71 -e5ce66c223e92040e104257c916587c439e8ef8cf32e65b737395999c7a435a0 -2abacb6129f95513d1d89d7cc1a0c8aeae5b5aac1d78dc42a37c435c641972cc -b3c92858756559f411b808ba10a55ee5296fcea9f4574550ef07156b66807b45 -2735cbbd8fe3c607b2e683ccc8f7932e4d5ed4d87c672fe56fbe8fb644f40ac6 -9b88d91bbc73fe3b94420e4aa3e493800934a40e519e492806fc34d134989a5d -1c002d51790b15793c3dca232a38c0ed32ced20ea5bcc8da027a7144434be835 -9689e94ac5e8b38da131015f4d34dd8ccded41cb86fa14946ca03f3ca776821f -83f875a2660a64c4a3788038d7ca62d041e24ae86c327af49cea43f81f9494db -935a8b065639c789911a46b3737d9e5db2bd918982f172a76cec867a086cbdee -a030c8ec695dec82fe0a6ae7dc013df64abbde862456b4d525517185015efb3c -f997ca8904e985f2fa2ba8f72acf1b6704ae358e7d7c2868010831ece2c87739 -17c92b6b425ed85f3f21a7bc4daa9620eb6a224cfd08fbeccd11652427fc904f -f589c45547a3a33146b80dc930fc515655593d24d259d925e4fb46996bb35db7 -fea309a4e4162646a85d3776bb44f20621d4193b38a28d1472535ec01d1b442b -b681c799ced74655fa5b5652a8bb99012035a5f66b2729cbf45a998130d619af -77301e13e23fde352a367343b8ed274a70ea92670eedf6f61a34b18db9cadfe8 -f45bf4933b81c8d98a370e5d9afef4a7bce1681627e3cdb633708efa623a3751 -7cefcc75635dd85ad3ea10ecb575789247b9d0257c40f97209447341deb604d8 -6abfb08a5120fb0fe71ec2e337928a4e4f6ee3113064e488270af5425c9ae51b -17e9dd6892f9ea2f98480ca299275c88bccbe584a4a192c966b9dad344753efe -efdb52013c642581e44d1b1c866439648fe1389963039b0a9352b68d7f3dc41f -fd3cf32c49c062d964fd6cba0fd1100beaeebe0fdf55112132d5e51fcb0c079e -f644dfa99d580e0cab548258aa864149d4a4c0e618566fe4ca9ebcb9324bc63c -5ac232512d086830d18d0f6657e9694bb9b3c4f4915a511a45b3c56460dfd523 -30da25d236b0356aed6ea76117885adcf2bd57222199bb5fb586e97d1c89ab8d -08ffff75137d2c0446a81c32bb336562088bea8702fea749c21147defdd87024 -d159b2bf1692244ade86b3a9f63beefd1b030a29b6ccb2904cee95b737180520 -59f4426d40c7ca7920d06fe5cdecd29e70983f787607055b277030105fa2d9d5 -adb7029c7a3a799494c6faa9ecc9bdcf91ec35cf0defc2b95d6bd447904851a0 -ab0e39fbecb080046246ff21e2328ce12bf355ed414334be01ec175299c7b82f -3e85ff80347a20c6d46a596b85e842c185b8e7a9bb8a54fa272edd1d46d7466d -d668d145ac815c5b051536a2a393724dbf52a3412409f40b92f857337f1e0adb -23d2f0cd6fc33564a3c1e9010f6e0350c966a7a003cae4da4767ab839f032bed -9ed1e90d128cd8b1396cef03c25bdc76ab04e6bef073bca02d83684e11731c47 -6937e5b7c02b5214ede19fb749eb7b33a4212701ec325a343a7694dfd6be76a1 -98890826f825f18ad39ebad76e2d9cdd294a79398d431215dd95bf1a663ba9e9 -b130f8e80d2260cddb9344b644ce84974ec8787ab84ab4b9517e44fb09d77a36 -102df99690bdafe89b4edda58c693b7f8619039a3ab676f10d37d0be02b29bd7 -da19c67fa4d07c1d562a65247932762895fa5e9002c45e59350ffb811cc5181f -e8eb49a988ba3342d129e03e86ab9b16d5a92b4e872e973be41da232878cd14d -f9d2db75d4d5285232ce5e4480fbd0c035dcc427e35a9773edc39d4b17f1eb09 -e842a7348246f1d69e3a15f40443471fac10aa392adb71e66b61308508ba380d -64374b66e8d234fc62e392347dfdbd4301cef800aa88f29414f8d5d625ed4971 -f49a4473ec350715c296c71cc7947091b49b62feba902f3d68a29e67522b0db1 -3524416b434fed422da4563d3349d19d187f7f8fce150d746b4a038224e123f4 -8e27c8b26a83d039225b551c489d1309dcdf05eeabc4c1594a0ec8596c2c8a05 -081c9df97b8675259256b8531fbf5b684e7ac076425ec9e4082530763c9142c9 -808c3da66c0cba1f5f704a4d4d25183d243c01d33feef4119606356be453474c -bec5283151aac2b18f231c6542ecd340f07cd7728db3b345aeb977f14962d72b -e54f4db3e5596d6da03985689d8e6929a2aa8cacbe9e14b539cef80b2edda603 -34b90ee98455008b4768dca85003895ee04613075287741fd8ca8d579dadfa69 -2a5ccb49a6c5257296f9fb71028a6cbd52f4daaa7f089b8a65f1baed85c35313 -29afc857a7b9bc8ce5905ff58730033c8d49a45f9f098c39a08c2d537ed00b01 -a6605633e2eae0971506f3df8248ec06a343a4aa93dcc57bcb9afa200efbdb0e -543f964e8b9b524f460ac8a72cacdf807b7dd6efb9f768aefb928876e40820a8 -31686dcc538e5cfd348ac3b6547add583322b3dd982e34ba161ebb0a9737af1d -580bb24095d2629a6db07413050f653e8700156bf5bc85ba077c244a55316841 -aaa3c6bac859ccb7cb9a79a7c9a3704431c2caccfc35cca5f3851a560f5720d3 -34497b4a425b539cb74d462463a8ac183c924a8e53726325cedc4913b1ffd640 -466ac24da3595c7f67993f9b6c22ed186412831a0724a352c9670f6b5df44513 -2f271fb623984cc1f8d268565f5def71ae23e6b5ee14e33c7b3a247763ca2a4f -9ca8f339add4056629787ec74e0bf54b8102e4b22c577f9bf3b151dc8aeda087 -bf05c29721f2e7bcd3433ceff31fb65cd6fd530ee077f4f0939ba37cb38411fa -fd11e1dc3e910c2a7ca28eba1cc381e3e43c3a78cc1087a25631238c894dd752 -46cba9a8df26d9d44a830a3501fd65a324d63a969665477cbc0306aca018eead -533c7685ecd289573423ea384eb629db976f9230d6a1fa6cff299aa98de3ea79 -f29b4c274eebc64bf619fbf552d6ae9c60e7c9de74036e434a4a6dd6e671fa41 -b8cc4c56b811f6ad0cc459fcfcc2bb3654928fa015fe4c6b1177d7c39c747fbf -5aaf612f30b889ba576d87dd4208a9e99becc44753aed1480bd1187ec5172632 -25d00b69d034e040971aad2beb20710f726a696ac48efb960d05a0f6f6f47962 -2c5a5690275e47c173ea000d392e8c20789cdaaae0637e01b321cab63858b0fd -901209b323dbe6c61c10d9bc8ee9acbd2a3cfc357f33ba4d5003a337df07d9cb -32b7b7360148291c45a4d34d4d850ceec2ff978a5f0c90a0420b2bbdb4b6c778 -fe9b5a41833940a0ef9fc0015e0d3e6c80a9bba970c57e1218e10c0c8b8c8808 -2f444af6ceb012b2d9ce6a96eaad590070424ef286225d972be1fb2ec18e713e -59497bb9917a173fd07507a422e35431fcf4fbc6ca86086f289c9680be087a55 -873c75e7998ddcde7b71c54b3ed2f6b3571f0fb3d4c103cbd1ba2eb006596829 -cdca02d166fea0f63fa0c044ddf4e3d941413b900f8550740e6115a86818dfac -9dc935f8842e0b011d2746e198ae3a4fedebd8245b8285b7dbec0ad0a6d1e277 -23ce1da5867caef28cd21cf6378e43858e596f5ac514cbec60d57a6c4c6a2820 -b541f4d6fd50a03eeaddba07e236417341ce99fe674079a48725c6fee9b3293e -7e2b593a573681155c344b0626ccc477840e49e6d7b76738dde7b340341f4edb -30155156049a4600f1d8c17c3dc2496776425fd23287127d5a2f0d9fb785db1d -9be6f1b410830df7f19f4c432c7c7766253c67eac8ea7ed19bb0df2ceb178adb -5437c8d85b7b27fbd2c23d2148305ad2d44ec69fc26880705d4efc5daa7a1a6b -3c5790e1d691a9975ca37d585c845cf15fc3c7b152e29137ca4168d42f8a7d98 -876564c9ad163eca51a2cc404ddafdf61f9139021d7dd275da494fa167267841 -b7903394140a7544ce4cf8b582bc8b0de916890a560ff490db22dd7b27b34ef8 -b8ac86149645f63306cd298b803ce40abda69ce13dacabeb0fd3c44248b49232 -2daa161603ddabb2498b9ccc84fec903b6b5cfff8e9ff5dfde25a69457d5a206 -c0eef48227281bb1866f2d3f13d96c4f26c6f6c2c8aca1359674430747c5fede -93ecc169a5855f12b362da58fa513ecbf15dc22e9ee46665507151590ab60444 -89ee1f1986af4e82c8502880381b246a905c5358e8d23e62c210c455b579ffa3 -d8b3e4d993e6c446f3fa77b1cf68c1ebeb463e9e78bd53b68f918e05091b6b9d -453ec9511b8bc1fea1025875fc38ccb3d8d4deaacb959b1d08a226b4c830b733 -6bfb8ad627152314212da50aaf2c2b5185e2429d46ad31cc6f9db819934e1af7 -b1f7e75aad6653b03c2b6415c11ff5c6918ee1c03e4cfd08de00c2240194df84 -328d780e49d3d616432272c26711cc0e05d88068bd009e5085d172c31c97a64e -f8070719ad1dd72d66ab78e8201cf1f67b84456e3766544471fd7aa45e706cb1 -37a9c256a0d9b2607d15392f7060a47409e4d6a5cfc310045ee7ada6d0105fea -fafed036a5cb444478ae11d920d9541877f8c1c3740afb763c4ccaf77f6d1dbd -40e40ddc6a430e8e99962ad32820055ee55cedc516b17831062d308916502d40 -255f786238453677e19b51c44d8f0be9ef19cd747d5836b65af6dd5c41ea6901 -b6fc9c5c7dbd04d3fb9f7f08a2beeb9d0c13aeb2bc1d5419ffbe2349dccf91c5 -3cb956df77eb73ab811ca30633e6d61d5534551d45ae24fe967cd29f8e19c8b0 -305283df0fb776e5d84c3edd20bc2c4df715285926e95f2f4c3b963726d2a7d9 -4fdc743bb2b82bf4855cc0ab701876827457aecd2a69bf58ffb363b7fdaa2ca2 -8b7b7824ffb535b9a74b00e90ad3f23cb7daae9aaeaedf7d2b97807fa3329cc7 -63689a645f515c11d4e50dcde110015d5599859ca67f59da7f93ab98b75edcbb -f382f878b9b045b9a114b2b4bb6404c0391c8ddda8d9d635a9e3c74d7ebc604a -d07f0d4025e39a369cdbc672ebfee5a287e07d94f161e11d0e18bf764af79a08 -f15543796e4daa5c3497c4a3986084e7a9ba0789a2ed2e1432623b03c210ab9c -e59dfc017ffc59039df164157fe74dbfb00087d3f4026f4d625c41250fd4c09b -b71495a7e2889044e87bda9d1c514734c3d14f4123af5dfb6d618765845f9730 -c66751d613770679c554cd03d99f4653db05440e2bd1202006a05e044e501381 -5f51c02148a91edc8af6143aecbad2804038d2381f7436db6d46b0e9364a893f -5531e49e42a740a40a87614d10f9e22d336711ff79a6b7b9f8248456691f864b -4ee2261a13ea203f282e36d6001cba9fa218c220e447313420be2a66e76c4c38 -2d0cc85cccb5d4640fb8f923e1c55c9dd5cb80918976b5e898f03263177b0832 -2b1917869cbbcfc7789f3d799cb53183bf85b89d9850c1a0c60fd6a0047b5f97 -592f3dd46718e25395b6f13c20d121bb1b8c4778980d05499ca442b3d4363491 -19a968f8a0ebedff2b95cac72a617172cbcef5c6e706b9bb1d9de6431beffbf3 -715116cd1d9207402ed3453f6d343b92cfa09c4c23f8835919e183d14526322c -1722e4eb7e8172b1c8c86eaf3a2187bf9674f482e1623163d2178351ac35028a -89aa2668c0e10315ad5b5f65081e768bf4b02fe2cfa1e636266c4f632d1c57d4 -bbb4470f51d06eb3b26a5e02aed0d6f00d27fc4118b8a0b8b9ccae2c307fa7c1 -83b45122390c52d5de9bba735546c29d40027ca6c00ef6a5bdb99e7d9dcd721e -cf6f3760d25ebd62174aa9c563a31da6a1225e3b4ed652db5b8fcf013954c077 -ed730241f4c26e0d2cbd1c246c855e8aeed5c8059e70d5bb8a1b7ff37e2d9ffe -681f6fef2788e4a603be2b272a41946f63da44978d2b03033e5b44d098998d03 -05fcd73ebd820e5f93a9e9f79573a60b805ed0375c32cc65a1ef4569a893baf5 -45befee450304d67cb3460a10d620e929f44e352157e6d12d353fb3a5bff0a90 -4bab7dfbb4fa6c398877c79fdea6bea230d2b6df6b46cae2dcafecd544b56936 -40a00323ed5c9e30cbd14b40f93f37fc56011bf329ab6fb5d96ec229edd0c541 -ed4f661fb4167ef9c705b1d293dd432bf89b33e97a0dfc1ef10fe8d4c863da2e -b16a3fb06680812c50cd83ae377c94fe26deae946687df5601e56a46496e2e09 -bb38c3414580cc1c327853235c483cf4600d1de1dc59223b4bb641cd4f256092 -9e0f3df061b19e8515fc9163d4f16fb3ee44a7a8cb1df1dda0ab32adb9252005 -34b21ae2d23b5d39399a7dee2866d2962445501d298390bc870d2d9ddb3586aa -1ea3ea0fd2ad4458cc3b80c65364b893640c1c450505346a4f22d17bd44e7ba0 -09368203f133338077bb806db218d3aa4c187fbf7c440d48cd18ec75fb218210 -ce3081e0a56a7b44536910cfe0340c3f48033c9eca88560d8207c31474b42446 -6be9d5caf07a46a7892c24ca1792b5b3efc4dcdad2fef5da25e1b0cf22f2ece4 -0dd8715df95a808a223e3715a4a534bd276b6fb114f8493f72521f15e2f7c194 -77e0072d1c8f2f5a6038f3a91d5970656d7f3f740eecec42daa6615ebc893a6f -cd030de96086b39cee1ef7e9207f1bf228c1fba43c53ea2b34732cf63bea3ff7 -60d3abcd75551d0b8e8d5cb80646ede7706674a63358bcce4059341471a7df8d -f0bf5fb04baf4d41719f505923085f9c48388ce354b4bcdcf4fcdf7846a565cc -38385d0892a856ddbf7f712c156cc114a67cadab7d472be7890b298ce436206a -a31e770c38ec997a397f5af152af3df7e350bea9054df0fc53cec2f4a0ced3f1 -5c59a8436e4f14ff49b66bc6f9e1f1d97d4a0bdaef25cbaef33a0f7e951410f4 -ed5aa38b2da8ee932ba0a414ccf256c5d68271c75d51fb4fa4a7b66d8b4307fa -82d5eb2e0b4681edfef789033b08b70c2e35b66c5f5b868a9825247719d2e14e -7c1be51b5cb7b69fcf20f8435207e803bae6bd01fa949bd59d6e20c3ccf180e7 -e383fc79038a439dd256a4782906723448bedc672c980196562830632f809645 -872deaf72534ad4d42848ce497ff12d28ef0fbc728a7f60d60810db5884d77e3 -bd259d298dfe0e4de7695fe2ab4a43ce1100a5f766fca8ac44a9c470369a151a -728d06bda6ac3a64905a9e7cbe1462bfaaa9a4d57a317682a221554fee457aaa -485729cad67fbb139d4d7d4645457cc28575160493cf84ed6b4cf733052bbc95 -1b80a186e49dea1eb7f4e7aa45fa5c3666ae749676bca70674be4bfe6e196bcc -9a294d3af5424dc1e994e0f0e8a89fe667ab89bcd11353b441e0b24993b0c1d9 -cd7558d2c89419aa18c2e85ca74c013e53b8d5f0ae4c53f29f7ae09e51c2d057 -95423b75ef20a44ab100c45755764a8d0eec7d8f013f30264a648a75bd5b88d4 -1c92ef78305f6403da9a971625be0b9503ba6a28e440af5dbe1954d785a93f9a -7dd2904214940630ab80f88382486c437754bb541c946dfbbdcc28ea0bed96ee -517b2f4de993cced9a5b503a8ef1561b74aed495fd64a44fd89a0adf96442db1 -cd2eb39bc85a1ed8bbcc60063998d49f02d3dc2edbfebdc022b8ce3ead29196b -9c07622728bb9ce2bd992876c2e783b1dca5f33e8ff322f63209d94eba4ac6bf -108ee86f250a9a5a6ae5b06ebdd0fd2751199d99513609864b434dafeddd7d47 -713b3da2b4b12ec7b779003e7df7d4f2bc33c9cc41ef41f0d9529dd0d3678957 -4d66283f10091c41bd2387cc771c4499001ef2c86d0eccdaa904e44c3fb818d6 -703fc8e425088b3753472b6c94a946ddb7ae390b2a2a86e67302cfbc5a3ab520 -728bc8c399655998fa6c4eaa3385df60d379173deadcb5e7543f8c6a8ada3c16 -744ce62c12e0f312ecbe114fce1473bf1a9affb8df1a118878066047c1a1ec5f -ff9b8455ac309d720607eef62d2c0146fb73c256e90a722c5fe42aa19dba818b -17fa00fb024793c03613650640ad749c039550e418b563f2c522eb7a40543dce -7cda1b1322834ab1bd1ce555a5c284c9a92f666910af211aa6b258eb2bf7a28c -ba47b4f8cfefe17985470306a85bda0aee57de81220a5f3c265096ac21da57c6 -60bffea3d98f2358dba450b29e832b09e764b4e41f9952e2935e09e76941a850 -d25fa4f4f916552b7ee31144c78776337c67795e135e26cb5e4e80484fcef1d0 -fb6c8a86911f7358d5077f41b31ebf9886430964bd316f75710d83c7dd696fca -7b6490801cee0387b0fd42342322121f43163f512ffde8f284ff3aa1f211319f -5556d08adc1880b1cdd4acf7592d4ea358d2f34e69a73ea9891498cd3d59a74c -7a7c48629be752b60e795a12c1fb5f6d29ea48b1d32253e7cda453357d769774 -af1728837104aba991ab43309b2f298290dbdb32066b59b360fdd2f0e32b77d1 -797406014fbbe7c9fed681f4efa445ef694b26716a9d7b5ffb1375628d61d800 -70262b3011625594c8eb5dfd7147cd224d15aeeb9d443c88359236da5514d32c -2308414414c22f47b85d88cb6954eb5a7bf4283754b6129ff9ba6fcd78e558e3 -281d4201679a411ad5613e38f5542549325d6fa0c15225eb1c13917b8d33fdc8 -30b2eec374994f6b6a19701f9b3a7ddcc8b2478a8601750da43565c7acb34114 -cd24f87d601f995fe17f94a33ca9005c53a5b760e6bdd4256f716c8d59d81128 -1e72c01629c2242295791e664f490d2808fa695986534146942c7cada8efcce2 -bc3ededf886ef8f4d0ebe0839c90496481b324dd7de90e2713c985d0dc196f79 -059f964352a2c72d2df0b13a4eeca5282091beab8bce8f1d305464a8cc69515f -99c720e6e2221be1047c938a112f3e31930ad86bef1b90fa747238bbcdfe5a52 -92fb9cb8b9a4165c7b0156b550b536a7680f217f0e7130785644e1421a57c9b3 -e94d27d62d2835530785126d553640f88f4e5d05dc288743817504d48fedda6c -637c53296d2703c986abadfb74f6f830a57c0c4915ea7758f2dc0881ce5a1426 -3f298c8ddf55dbab0a8f22e8fea76f63a565059c72e693d7e29a104f7f550d0c -3d871d6c7e3c2dded288500f8925fcd72cc838545f2c7c05086cb8c19a3c88bc -dc738a47505ed1e76616fdeb9421861d5f88b0904deb9ec637c997495ba85d93 -7a491a2b125e3a7a97046bb2cfc7187071067e6382a8da1ae760f513803404dc -47a7f93b8f3a0b2ed5f033d65db9a5d5fd11db4f10152b19f4f5b2f48b8a95b5 -50145156dbd721997233961621f5a64f1e6513472e083c2a5357b08537c53b9f -07b90663adf19c5028d53d26c4dc1c540c86e8f744c8e1d02dc76f137bfa6a06 -1792d82752b522e8911953e0f58906d47bf089ebc14dd0d9948bfd6ef2e0c892 -c8ceb39d382ebb830b9e6ae7cb522d189b34827f45c962b0da89ce3ff3e9f6b3 -967f59a7076733d65ccd8526a3b3db8ff45ed6c16392152b5593c94a1842741c -2bb710e4b331fbd7bfffbfd77f81ef4d9c83b10eb58a2f51c4655f6bf062783d -18c3c06ea4e922e60cef329de28fd55232aa8dd4224937a79723519b3b60504e -5994fa207bf4e2908fa81ac69a2841d21cadabbb92498416a04630520b391c68 -30687dde665acc525e86fb783a3870ff43e0f0b55e50798dcb788ae93666564f -ba7a6fc3742c86ef7e500d2ad2b77ee29348145b0738579189cc36d8fe15c5df -dc4b66450947f168347afd5238e153b9f2b1d7f64373c0a90da71eeb18f72b9c -f3e48ffff7c202ff5a7c2cd53a1c967f7d71e7cbb4e4159e5cb5f475ba0fef4c -0713a2923adc04968030dff07fe9489eaafb0095e542aa9497544d47dee12c4f -160ab99511673a43cc89c8629bba5f3863636b9ef246078815b283d9b7e91399 -e74cee17e147ed7caca02f203ebc977618ab18590e217ebd57e41ca020290d84 -f02a4fdb4f2b97df16b6cf7e3519eb810b654d0c50c4df1e68cd54bf05e52e94 -7fb47f105e02d1a4b7b78c0ec9f3bfd54b5cafd746322614ea56afa4d613d5ee -6baa19c573bfd4640f9428f23988fd9f0ff4a49457e7bf1f25392d0d68eb89ac -68f43c2c2e02bc83bb45d9f541bb2a6ad28b8c70516ca2476a52edb1ad4b467d -63b970e2e40af4c59d46070352162eed10bf2662217b32ddcaa42b5c9ca7c486 -f3810c51a5c9f25af078ba635ed08620bb7b91818797cfbf47e7d9e22ddc1d47 -de4a7765c4566b479a1c66ae9362bd4bb7dc3db16daa5d27e79918bcc11e995e -3055d826b489f527c5061f4d46606c7a4375ba317b35e43ddcc5811448489273 -c8e114b48d9e4e32fef51ae8e4440ba35f4c7ed307fc81cedaab0264ad7187f5 -0bdda954f5eff597f65759e538916efe1ceccdcf33c363a5879e78f1f47dd1d8 -2fa4a4cd61fa4d32de859714ccee93b1b64a3c7d9d6bec30aea2b10c896bb60e -c8336dbcb047e66998ddb368e1f83b94bf3df73639560f568a5aafdc810cfa37 -f2c53a0f3a5d54fa0cc59a769f862b22d654472d9846099f5b5841d5f30982c6 -ac2feefef527613aaa3005607cd82cd56073dbf37d446f53c9509d9540d4b10f -ba4198cee56d6c2448112ce7431a382fea84c92577de8ec194e3227b378ecf02 -a8443b9f395ba5bf18899d37b2cdca0df725fc0d3f2d2d010ef35d1d11009c9e -23e611de999294c5b3854ac2cd44c6a3b5d93a2e3c0979f2aad87ad368478739 -94f0d9d78334a8cb0a9ae03cea4a9a211fabdb4cc1c50b325754e9c615facb09 -6e5bb94dc9b4ea3fa0470831cd8eb273753710a9d0e1122e0390c763c07b7296 -9b1ee534c46a82e62dd6d85eb1242f577a444cecd5caace05ead443675715ae4 -b2e89c8a3f861aaedfb882b2217c8a59f074ff7666d9dc0e77760e8ac0131580 -b4674ee1483cf7952d5f2614af279fe375d9e80947af930dbce773f89e2d1942 -55cffa5a25fec611208a5347d8da41d06b265537590ed2a18dd61244561f6a28 -6aa7b7d003fbfc182bf399ca86fe4f3b0f9916b4be9494dff4dde43d543b4475 -2dd8d8921b631588a792ea159aadc9a05b07bcb5ccbd39776eb733a2340300ca -d08bec731a9d17bdfa35ba445f38db9efaa3f8bbb550cea8b742c00ed6237599 -9b9292275df9aae57f782a7ab34a92782a0b1be183913061201faa4340b54d8a -0ae2acfb004ea2366aef056ce8a0a0e17cde94723223eec759e7abf285a133d3 -ce981716d305690e627509df3701119306b8e8adbc9cb7891bb5faf9a6b81e6f -8b25275bee86edb442518ff110aadf7cb120bcfbd380af3c91e62f1cd51333b5 -6b25de8112c6d47e77bdd08e3bdf3bca8f20e6b96b687450b23fee7ded8099af -31a25c939402b197b2356cf9d4d882a02b01a82bc7091775941e0c883f9ac2a1 -30ccf1d51440f8aaa64a2d0eae3c5ee5378b3ec57a27a6be73e3aa6676cdf3aa -c6ad5603f20a30f032386d1293ffd63b98e751c6d937509bb27a0dbdd677ed62 -dd628e490b5a3852d2841774d6a3c16912b76314cbfd630bb48b958824aca788 -36dabb0ecdab2a2da7722c9e3b7f511a56a2498b329f11eb454b34b185704e3d -8c244f54c36945370aad2050fe034726f739edea05b164662094962904f8474d -263b43008f4ef5de0cc69c9dc7faa91c6beeb28d2bb977fdf96bdf27c4a49fa6 -bc7b802373517aa1e4d43342d90acb99f8db854b41bb95fc333e3fe0ccbef3d3 -de3abb46991ea91baa44fc52b96d5c5d683675fc6498d85daecc9f467dc76b4a -f039a69902c5c677e998367aac1d3a765f52d55cc48ecefb30d709056d22c8cb -b21a422419e6b9b9b50b3b5ea417e6b079d6fce2447322a960b74c33e4f7420f -0ebefc2f36471c6f9997afdad5632ed7c0913a76b7314948696846b793aac81a -491c8640a04a0867eb16d497ce0f26bbde677f840b87dc743122a144ba858a80 -1ce58bf6b3e5fc0fadec743ecbfb6f8fc19f778a3062cb14cf9556289e7484e8 -73e950c71c46b940d60a6a718fa72927e770e7a917987ac5f0afbf0c5b3c5ef0 -591455ae1aee69f4768d690148d8e2c831febd5b60203914c960015edd0a8e0d -e3a47cb4e0093193dbd2b925bc3921f88b58d856b384b1f0158e44bee3e17306 -6c86c5a9673521f0c6dffd8413201a17e59a8235ec8bd63e60176ee65fd81832 -7782aed7eb7442d55164a7b35bbbb6413a36de24dc127cde8eeb9bcb1cdaee56 -7463bcccf86e738d7b5436d1079fc6aef850369c04139e93933ce920465fb403 -a1354553eaf1f8171fe79e61fe157bb8c9cdc80467859599354b73d983190ce1 -60171ad887b1d46bf64dcfe3c092a49e3b9447e1d2cecbc440a03a9ecea40105 -a7bd0e0a4dbbd18030887df3dc8271fad0a92b57da8202e425cb672cac0c36a8 -095330aba0cbf4635969d6f35d2626fe382ca7890b5743df92963de76e7eb4bd -bb8a9a950ca59a553aaa6a94ee66b9bb154b86dae32ea20ce79de441228c47a4 -aa40949db9fe13d761781807d8e7adf991a26081427cf719ae656d40f3358000 -37330a4464860a41a0653fe5fd69adb6a733f84c2617420527ed720b944f022d -890b2cdc2d7dcd26419127ad47a747c9d3e0f973ed50e9a83329294a7ef63b38 -bc297930be33e68046c466b7f44c3d374138e8ccfaa477db9ab5d83a77df8f31 -d330555acc08f04cc5e2126d4a163313183e0aaaa8645e545aa59c37efaa3663 -3c92a17a53afb715a6c8500dc1e2c7d454611ff5d7a60aa8859b8c3fec060f02 -c9576bda4ab3b101424b99e07096bb5cb7625bec43ffe2180635994158aa8b03 -2c82a993c6c7233d971d6c8306a2cfd45c787cbb5a1dd9fc01c9803689b4b281 -c82a7469992dbd60e611e37f0ed8133feb5ccfa57d9f091758622772fbc94e6c -54e3b3d94983d914b3fdee77954be3252497392db6b3bd290c85e0a295f98c44 -5f87998274dbd62d5c724c3cfdc2385c6b54c8f073f9104086d618ff37bb4e1d -5d571a0d41df55629c5c226317b77ec2c2441b5af0166517aacca31193143e96 -51ea351b6b17eb764be26591cf205855ff03022af47782095a3d03c805dccc44 -20fcc40f5a3aa7639853ccde5badc2a85248161a9266a60f17869ee89191524c -f286cb9cef6a48d9fe8256fdc6f53d608f99b8cfbc5190402cbfaa58e16a0e87 -9f4cac054676b5f591f831c07a32533665bfc07dec0c8439bb4b51d54e35dadf -5d81dcafc0bed1a21f0ef2fd67547f6f74815d8951b7cea076f26f5d19468e78 -4433f450bcd1f3b29bcdc72ec68385d908e773b6f9b1c137ca2b69b115d3bbc3 -05ce0e8217a1f42305c77b2bf244d298b53937579f5d54c94ee6f8607eee44ac -06a657673402aa59402107aba64d49f1cf28aa48ef73d5d0ea01218c7b06100a -9501fc2c15e5b67ad8f65eed9e42cf8a53cab1545dbf8c82803ec71a1bcda4a6 -0fa271fb315cbed111384051ddd396b8902ec7976fb48e216e3505a16a30e96a -8d2da699b6160c8b3b5af59a00e705479d78dda5e08870cbd81da9868000bff2 -5a3311cdd21326a47a665c81bc450ebb14884ca84b2a7a1996a558330a7f17e0 -99eb457dcccd90a9d303afa279b45af41693612953c0f086d9ad81804d09759f -c91df65a83c83edd31e652ae98f3759ccb963f40e83f532a98528911bde3d7cf -041c6f8da633368d1bb63494e8ceeade4b2a50e6f3f4203d2ab275b751cdec18 -2509d76661094660cf22e58264dbea4738f5b2f05a4b6fe97509626f79561386 -3e78b156fbcd6ba9df4a2edb9d56251593feba7c510bce2768252c66ee7a096a -0f350a5ae6fbb6c59f5369b3a94c7b4026f7f0670d7d7c01c9f4b58209a16b0c -210167490ae40b4eda10dfcbb455c1068bb91d28634da73dc05830a33e0f2542 -848afe96acc2bcd8a138eae0baa5d1b31436751c649998f3aea75e95f5248abd -d62f6425fd91506fd25f925097d6d67c6ca523f72e6a5b70164e0bc5c5781f5c -04bedd5a784b3ebaa00c5ec187b9f30b36a0e3f6e4b249fc4fd085d7fdd36446 -70c740d4dde28e44a1210323dc4b1d6319328970acd5102cf9a049bff4e99cfd -28ec810b2575aac8efdd65e7a9e6d929734ee4927efb0e25f843f9d4649d847e -5917b6e18e440f23166d04e721696f18bbdfab79cf291684b3f0e8847007df8d -114f4b3e7b7933859b0e27d019c0841f7ad680e54b25e7b52f8e729f9a62fd6f -68757a9a650f6fc3cfb39f7ae9f03566b7d5fc87d765bd97e08e87e021a0369a -34306fee74a2fdfb11f3b5f75499159e5c97a4f1558e78cae37ce871af94c108 -6b1cef84418ae4408897f5920443585f5029c8d70ed575c19eb1714e2aa53748 -f03c05bb82a355df1e181c1f3aec05cd63370e10136a3d912da64a717f66d511 -ff5edc9e42e15070b54455b95a52ceadfd2fcab3b3c338e6edd087123d2ed361 -ddcf924f61fcae961c6b8cda5089b4492f47db89088d80a994ed9551b977fe94 -8f2d92dc83f93067b38c91e873babd2ec1c32864f521770b3709c4ba93eacfd3 -74143d8159260afb59f774f70fc8a892f765e474b5e870d7a210ce552d1aa077 -10cb44f43b9c3e1bb6b0767f3de1d18a485316e80cff3a163b8e44970bfccb2b -ea9f75157b99184cd1313d47dbbb21fca18ad708dc914eda5ad4122f7476fb73 -2c3a405c091a211756647e53a010822ebb8cfd4d331a97a1484d239986732179 -4ddaf15ec99812ed7f55cee6f8f015ef62ddc931378470c5c1ab335f5958439e -f3f21f81e2993afb8f512783959134886b73df730f351e2135be658b38e005d9 -2be5950daae49a5db747e46f8376c1aa09c178b2d4d08674daacf05880852147 -6aec9a46230df3f4bdcd14081f0fd21801f7d26a0b0c5090a3e144f5f486d5c2 -85170c17145fa317903e7ad4a97315a8c4d0a9f845cb2d5fa818894f8647e94b -feac033768c71dbcfc7e4b2ee4afe82fa0f63a2e88d191e579df6be30dabfb4c -39116e045c791739845b789d2e5a4f4e138394c57ea1bdf03277fe1df2372e57 -824b4cac8751bf0d96c27c691b71ee19eaef51842d9a621a180af064aa774e59 -6d17c8f39b5095b8412fa0996136b523aa7e2d34a15ef1aa3860d1bc693fb986 -df92179b5c2c283ec1739a31c39df37e02570b2068fed8a7865d530b6b83e6d8 -c90755bebf25f806731eb5afe12c69b7b200595c5b9488511ce0b6d3e50eb78b -b87384aff6319f53fe82a57e39a9758b4c2baa7dd9d237fcff940c7dd4e2dae9 -fd6f9814b52ae3952ae507d890e8ef4e46f47644d15663e50bef06e4c6e8f4c3 -c9bcdf6ce9c12e59442aab2209222e8e9c38e8d836e47401d8912b5944783d04 -2185e0b5d202456311fc41e3c9aba816d79444213f17d96b673bc819a5afde1b -9fd118916aa3f976b67d40444085ce1295b2cf635a58d881b58e9d6da3cd47fd -c385915a260cf460cd51d103aba3b9b7b718a6cfdf6e31ff90aa8abd8149720e -7dec2fdc1f9ba1970dc589375737d50861ae4ea98b54f134d7870b435943e4fb -50896149e3f419de19027f01feaaaccf1578410450cfb575957959a3e7f2b3a5 -295a1e03e47d2cc044af13c7f8d2e28f7bc6d498aca27d9503e19c7993795444 -50a6820f38c24b1415aa1322f2d3dc5d7e7802067fb426beb22fd9da5d3d7f77 -f7df61f59f5228d99e930652925a12436362de55a25f190fa33c3300997dc628 -ac5524bf2954d119407635b2f866e52bd1a44d764df26b66590696abcac99637 -6dc90dce6b68da6d630587aa9cd14fd4d9c2f27d8355179cd1bef7eb8f7b3ccb -adaf1a938478ac5f858e712f0e908b394702a6e1129d6262b299a00e8767827f -dd0f7d3bfb425b667717be47f8792fc7f852e2f3119a179c7d156e5e020926f0 -1a92a05ef6346a64fbc0a1b09ccd2a7e09d6e848570aceff71cd34ed28ac95c4 -03a468a2439ee50928e555086a6d40caab8d40dd847cd13e67f5acc91a12ef37 -85967f08fee498e5d9b562fa2cd3473995a0f76b860fd08393d4e59c38c86634 -f9d044b6d6184ff952b377691f3970e155f07412a640d49b696e3ea58cf60630 -ed965503ce7a6c0c145b6431fe0a5dc244173a089a49e0907fd2f8fa080f38ac -ff70eee1ce6089611df1f488858c74b81518bd028d55b437878dd4d14e8d5362 -10fddd8c4cc9a8ee14e961481d0c0b00606084ca496a88edb25d984c34f6c1d5 -a85683fc244cce71b54eda970b9111a6ed2ab33c63fda50b49d343ad5eb6562c -01748041fa0f964183d14239a0292d06ac831129fe7d7d34d0c82f1eb011f207 -c63fa085625feb4b87349abc9a065027ec25db3534c91ec2843c2ec4ff4d1b27 -1b1488dc1907ceca2d4eacf2d0c4d4c7ce6c42ac81ec78e853baf03d3941ccfb -03a5dfdf040fbe9e61613d9147ce6f9c10e4f96797d15362467058bbe68804d7 -eb7113b166df726b040f2cf4aba8bbd3ed943c0715e09bd676cfd457a3c1113f -eec29889c0e8286c314b74e4b39e2497c3c5dfda95278958c0995faa6dd4d9b6 -8dc6c934b1463734ad0c71e641298ae0aca519168bc667ecc7239cbefe78f34e -465b10de38f54923be640a55ffb991a0164a6f8ccc09c5b041809e6ace280343 -0f447b22a97a8a7a340078fe1b765bb6f55d340f757ef8162162883ed66c029c -f7ad3264829ac8c8c26f9d76d121167a912e1bc1e2869308499a1f8dc9eea626 -fa3f9d1ca80b45c3ade3621a3d4ba9ad3482a0e13bc7382af7157633adc45822 -d9a5c8a481775c8a69765c8956968affba3c77c115532c7680859c41500c13f6 -6f5b445374a79bc199d11930b2fa1cc1f8c76848b7a34c65f24a86acee4f02be -4eda4c7da149723748b748c0adb67c01eda2a9c0db4e527f289281a70c32d574 -5486d18a49144a2d6f2d4488f61f0803805105b307e0ab0f4d795a0139acf396 -9c3cd6092cf0fe955653943dc38f9220981efe8d162caadd1f3587a5f434dd9d -0a5efddb38477d669b1f2ddb90781c790ccf341d0a348112b559746dbcafc4d2 -e9c81839e66de708f12e907552c99140c428b13920f459a455832917abc1dc21 -aed809121dd4a9df4133b84378e413e62a0fbda75ff4e86fb8fd405dd3f252c7 -bed26aa06b485eb423c2aa83e0a478235240b19ef7f7ff1875c21831c7d50eaf -ab4e0fcb929725dc92823eaf498c806a1b0102be38e754e3dc87754d1f480c64 -30d95da626a1c08434ad5edfd4e6be96a5c593b96f062d7c60e56a4a07152c23 -7fe4e29b99a23cb4a93ddec151cdc68fdb8428791987935574e53b8ff6c2a4e6 -4c6b85c47607618740797ff21b34f6a4a534523c649fb18798b55ed04d9080b3 -67bac8232a2be46e4d973f3cb860f1058ff46f7af441049855085e9ab8de8e1d -cf035c13d86c62a1e7e39bf4cda92898a21e9d1a878f8cfc0c485d40c35d2443 -87a3a20eaa6cdb4920f6779fe9fc3832a61ceefda3d6b45b5b8c27845c2e9e2f -c572e80423fe40d6d695d11853d03ead0e46974105333111101dd791c7b03f6e -11a7f39a2d2232c9452df2e7831261a365e3e79599b69fa0b787844d05c538ef -3274761f16f644fc94a7fb6ca0919fe5ee78539b59fd0232fd6bdf8e9e4b1c11 -485de6c6c1dc27f59fbdcad2790d1f9b9dfb1f88ff3330ca215e36636dcef81d -167456983820580af7ba55c1f1c6b217f8a11e487fee442235768eb7b95fdf29 -d44ab8c385236c3947925137e26fd1278d4d3fe710527d9b017692b357aef874 -ffa8c09d59b78f3175f8fff85cb4d3e07c21dfe08db6c2036e98dccb11461fa9 -ef986be98232c893e25d76cca348df852963d1fadbc217658e33c49bacaf43d7 -1ba692b8e65feec21749e489c90ea26fae3540cb3a2af56b391569fbe2e6e1f0 -4e5a83c374455e1fcb6dd1adc2ed96007258416817bc4d1585625bba98ca3ed7 -f49f6439bfb0fe67ee1752ce1a678cdef7d9b02422858cc2fda1b58d0a62f598 -4f78daddc56c29c9c5d8d1fa7567cd69f58b3f6407f925fcadf6a1111978e51b -1730a24ad9f5bd83e7a367c8e258c2d45f2dd5f7c3034690e968ec4eb4746a74 -d7d3316a6dac948d3db0b8d069bd2e833120668dd794d89f99166b04fed9cf0d -b224d6985605512acb08fa6e27a8772e5e968fb66495cc618aa42862174f174b -b400f59621a17bbb22087385ba839562281503632921c176c9e6c27bc2aaabec -ef388fe9cb262e9305e78ec22a52f0bc54e0c4f167930de0558d3a3f228ac651 -932828895747c28573d3fb5e12bd7dac2ea2e00606f1e34ec36443822cfc8258 -fdb3b8f3a8d80fe17c6ffd932d63da28b50183071b30b198b078430f8c25109f -710ccb6687fd2c3bcee778a5c80efb9edaf2609d275741575601b52f9b7fd6fd -f99c10d28f4576c29530ba7d40ae384be27d88770b0ec8d870dd3e4a20a64476 -a30282b0e816c58080b09eb651c046ee91f52ac08f6c264a36099659d1e50e75 -ea75dd82238a36e7ca1c40cfd44ffc12051b06f24c2c4a4bf4bcd4aac42814cb -ff434dc7c0a4356f4f9395913fa1df17e1ef2caf2f4afdc87189276b09988c55 -6b6bf8f4698d33e6acfc89e1bc25f0614cfcd94e575f0b881c1a8ea294996482 -ec2b1b0a6e4645d68aae01131692336fb74bacc9d91194054c76b21c2b01a8e1 -973e402e8915cab5c0b11da03ae8dc4bd570cf65746f0636a30c8cfb92752bde -277aff02df8402201779f4b675c09817faac3b384f6b334524b08ae52b7995fa -4e3c0a61f58fda7416db15558e1a6772a2349d2e1b1c669e4ba39a01b7b18c98 -aac82b5cddfde1daf47aad0dcb6ae96593904555ed04ec06a4595238a3508d4b -4374bd37d3e8380f49c01f39c0071655e8b0808e9be5dcb715faa15c7875871b -b9c75c2e0fccac1c5a597ed1d84a7f570b9fc582c6e54455551fbdeaa8796f01 -5800bd5e2530399b6be18f4e406e42ea671406ea691c732ab92182cfd599bba2 -5abbc1f25965c5696dcf2f2e9c64e138dc10bff55caa9a58a8c34519f8f50d52 -894e1d616938225abc73a28cb2f9216e8b7f1928a82194463a6092356aad8fc8 -35af7da897e58ceb6897ff6930e2712ba97e6c53c470d177c91300dbd04566be -233833750c2e79b320c33fb7413c856a37eecf0b89c9079cc7d70f8c62e16437 -3b8f43e28aeb470b8865aa04be19307d3ed6ce12940a24d8d43ebc16ecaa905f -2d7183d425035db5d77b518c34b2f002f199d27788664aa94551a7a5fd574368 -6d7a10851ab124640d58e0f67f0ad64bbe8c7a2654a29391485e571d5542f87d -4d1b016cfd97584f18f57f6bf9e2fc514cdedbcf3ebb1518e9b53e8b64752eff -909c7cd0a34a2cd3a945ab3c7049e255ebe0e40a84e2dd81d67e543ecc5a6443 -34450a5cccd34edd52dfc43fc420ef298103431ed1e49e8c2b4df26fd0727bff -7f3ba05b16232f4c795f93a5912f6002c43aa243cf3dc7e4fa5c8d9e40e96985 -da2e3ead98770fb7c07cf8e71ecff35d2c255d6a3ab730ae6c2ceb3510752f0e -2d8aeafad5a4ecb4c4d81dab5336d764e8b7df68b5088d6dffb9aea0db0f7384 -7593dce3f68c793ec780cce00e92e28a342d05f2d0b0d48fc23336c7e0dcd610 -a37eee3cd6863fd4b74eee6afd6f2235f92a1d32d32fefdfba511c8837d6eade -7a27e375ff1235557486ef07d80a2cbcb0645ce7d1d2fd06247e2b52d47a25e9 -cad734659b9bead551871b85a2aad1340a9649467a791d89c9e40c6ccbed4f1d -317b63eb10fc5b913c72e9457f0ba3aef5c50bc83248782c220ba4e1540f7192 -002c183e861eb1dc7f4f74a44088fee28b03979eb8e94e9392dbc24aee6ce563 -f4953106b2d7f71e2d38639965fa09d69d7c5569b416068612b32fe5faf650ab -8ff820bb496ed9a4b025874f7477feb37157df5a35dda9a19a7bc3fd604e4050 -5a5c5ec5e9799cbaf4a8d525d2db9084f07395d03ed7a95e2adb4865cb36f3ee -7a8cbfd35faaf669c4fde98ba282e5d2fdf8ca495ca7f1a054149d15a6138f69 -9a320b1a30f1faba3ab29ce4c5e4490aab404893afa88a1b7ae6731251e15db9 -b00e5f82f5f1e03145ae703849120f65fa475e1810a0bc636cf540ad441631a4 -52ab9767b4bc16efbfdb5c197501b0a8344fe008afae144c126eae037fdf9364 -f743c060bc4d17116e3a59ed0dc0e3218949c3d9259a6a4e0be391e8c8455600 -7871c3e0db8e7939346fe37f14d7a980cbd945bd85a78f84eb1809826c6d15d2 -628f170976117ed59290231459cdd6dc863cdad13504bf2da4c38ae32259ffdd -f9325ce161a472c192dff26a10bbb74f2209dcea75a92fddaa50bfbfd12f6683 -3054ac58aa385b4e00bda8c962261fa4edafa0e85ef7fe908662b9f1c26cc471 -f28853b5c50652538f1b984db2197805deaadc12fb9cadbb68399bec0f707bac -dd165f865a0e9a455e0a8e317b3b4c75182a5f4001c5c4dd68bdaab9896090e4 -f7e92f51bc147280b33249fc8785acbf402441e769f70b4d61991c51f6ae12c7 -6a26eee6986509400ffdf62268092c7e1ff78ae963673b60d874d2a57c2a1822 -d24822a1d8fefb88ce18b20d446f560f86e9238ef3e78d54ac04697c4ffcbc40 -09b9c1c2acbba6e17ee5fd9da57fa7e0b6aa720103862c9e5ff1567506b5e09c -47fdef0cf04e4c10374eaaa0c47957ffb4fec3a9ff0cb465a10a5b6a09fdd474 -204ae694ed6e2b31cbe9333a6be0dcd9cc1a17672fc2be032386351c4ffa4684 -42810dd1c372e10a5343b97d6f623968691417bd32fbda32b1db60deaefa4df0 -c804d1c1926f6abd1e8d8fd4087a28ad05cd7b13080490b1bd03121270adada5 -e94a72be1e1c7c975d95690d4c2147026e373d2f464dfee782b5d074cf3ba1ea -f669ccdd1ff040728bb9bbd3f27c2c63f0d381042a5e3d5ed43c397513a5aaf7 -62b4e17f1687eb9bcee0430b766ea8e1ecd137035a7c90b29e0e26b76ad542f7 -26fc0017903351fa32c9e9242aa77ced9f71623ca744ada6bf0ad855875ae6cb -90d72dcff52084c7969ea06a49db1c0a2f11a82b5f524d1efbc7a48640944d28 -2c92da4d78aa8d13dc57a2aeb3f39e788e3563b5e6a36d78ac1df07dfc527938 -a12a129064b6e581d90308e2982fbc3d5eb92d7ab8b2e34cd0b2b9d7979def02 -e9a9559cfb15221889619ce00ba62c09dd6fb51e6acee8bada9573614a0ad0f4 -411d35ddb1c1d801a8970071bc5b7b5d1c41e14e96ee54208f17ba69ce95977e -de58beab72e4c6bf484a8325a96153ed4672010717157034e02e78ab861f118c -5ed3409b1db8f05f6ebe0ad2ced8008a73b3cd355da36c721aa40bd1df3f5af3 -41389a9b965dc43002ca70a828a849e41425c85cd827fe6e5416d5bf18347726 -241d22d665332ea27392009e81b3a24442fcc1b62832e7b81b02480dc6df345a -ebd859cbe6a4d439b8400f4813cb9001f4c2fc67d86350d2004f7075a8264ec1 -e29eb0b255c6bb530206e96f39611d5446ec2c468acd603423137643e26fa702 -942d436bba71856e248c89000a6021e8bd2106861ed20c5b02ca4da733102b97 -7ac7e43e8099febda83003b6a4610a9fd0dc723d506dde420cb36e188c56bde1 -0a433a8a85589d9ca5fad1533da73075afbedbeb5358edd0e57492414a09dfc9 -418b0910b3e32efe87c0fa8702480aef1b281a5acf6d577e49f801626b9d5532 -d85ce8bab30b27c9053f740d9b1ab84812071dc7294fe5a79dccfb8ea3d33e6d -514e303c806cc8d27852acb180e2cfe39c72181ff35c8799371fb5c0c0c002a8 -b1b63207ea72646785a35c4b1d6b7db906f1a1a814c102587a4640eb8db15ad0 -4d99460c843109555b33859b1aacb2e527d5aa120dedd7e7ff078de5782ff5b3 -3aa960e29b51b867c111a439bbae20cdb9cf3312288ad9eb549a989d863225bd -a7991839644cee9cb7b2544b41e4777dd3f0dccf0337977e32c6e9791781b091 -2e568744cbb4a2c3b431f62385def0ac69ee221d4e339b407fc5641b1d67026e -76e7c4425c5c6b8f56a1640c0b78c3c514138300fa971c220fee8ea1924802c2 -f58176075ad39d4c3f336a758956c1502539a23d67ca167eb119af5a95cbe134 -5989a25786ecb9b34abd0b5814468cc339bf0df3f63fd5032f0708bf0cfe1876 -91430a5ea81e649ff57f6a2a89e97532d7b58ab4d9be95e234885b39a73a7fa3 -d0ad9eba42dd20ebe1c4805641341b7a06ba786fa8c95d055de5b1b35ad51ac7 -d3a98d7e9ead882c5a0911fa45692e6dbe34f7fd318c17ed7094b38bf7113f02 -053f3b8a8c74eff956bb5c15f6cbf212059a2edb25528f60f67d6204b08ed8de -b3f591ab5fe471ea4f602ffd6903afd034eea6b4fc7ed858c20d1e4a1c343ea7 -bf6283d3f3d8764f3b89282188941876679b48448645aabe8a04b8ec12e8d76c -75a5500659e3cc3109962fe5c945979c8f56a997fd806f3838337de82cefb25d -986a4e39416a170cd2c2bc223838d24b15330cb2352ba753bfc0d084886e7221 -2d275a4cc0faec6af2cb8591db187da7503e479c83d2cd78745c939088650573 -e9e60b3aa954044b347a63eef25daecc3aeff608cee0c3c3a7864081f7b237e5 -6806e57f68012877e0d4210e85d8c0f917c3172ca19c6fb9198ac8456dd9607c -aeeca44bb0984130da6830522697fb5d8408430217ff9496275f0ccc323a9bb0 -52ffc86a010d14478ac6ed38eb6d4f5095bfb738ef0d88efbb5d26558f3691f4 -59f62b6f3d8f3c2bf2a87634d6b65b5c7c0dd9fea60fa51822b8e185999b4c60 -73730e89c0b8e48bce1abc500c1929571afce0ad11147bb0fb682c976e67947e -6e02b7cd6aa88a3d578bbe3ea88a458629dc8799d34df525fb56b5618fb025eb -c50f0659d9e9922f0dfe78d0d9c8ade1beae1cad423b5d63d43b0e50b8a9707c -6322600d467750cfd7a4603bbdbe9e7c01899a3447ee96c66a464859cb0a886c -baa46fce0373d84f6ff705e177497315d48a1b569ccfb7ff6802c2ffda806e11 -8cc119e9401e0ac7745971d33f21622cd806ef4d761d23388d632470f4c04ff6 -ae7a008f343d80bf70a7d02a9aec04ec3953501594ab91fdad11d6119e6e5ff7 -5055af6868e9ee262c36763b29813f6a6660b18635ca76c9ca7da158f9cbc823 -c234598ef5e858eb25cb422a0a30a7bbddae046b63b2e18832d73b7d2c2c8562 -31f88e8d3ec0f6a3a319b06cd5ca75a8b78b060de77d6108f14182836f2ba937 -914b433c8718dc06dbf52c11f6db1026d2e03418bbfbd297158e18583101bbfa -7d932e2ed1a3d4bcb4671e9c35ad24732a296640cfe62adf680f66175fa8bfb1 -078b4f8a36b6a04c0534fd0037e9be040eab494fe8181ca7e99911f339d49a24 -8f084ff5bcfa9073e541c2b6cd2ea98e9818ab8594a1952a9a4a46ff5ad29692 -5a2043cb4ee3d9ffcf04ab6847b73b870350c32648193193b2de0a087262d213 -b270353988ee6dad64e54fa69ce113ba122c659ddab50525a5c5fff3855dd0f4 -5f8d1e6f4c8790ab73c2637a89af0adc86521390ca628b87a0b28b73d527dc77 -366d2bd2bbd51d881a0cf439aa85e19315923793aba81cb43ab8af1081a43f03 -8a8b6c6cf72b5f5d5761c279d23bab4cfe0db2c08b557201c583f401ffd20e7e -a459c408130a1cf7edd311410d6fc05c7cddc6b57cd75ad08fb7bce952e0e378 -f6265ce9669177c624184dfd2a8bb7318acb4709e52224e44322a68e23728410 -e7ee378db5286996320a84ee9b00bb98cc9e6a1939ecbc6983827be07a8d2f4a -7f16bfb7cca00c158e584965d7899a0a627163298030b8ffbefe9678289f4bea -f835f749d878ad6cf3791e86f18021c795038f7dd00f180b9990006b9c8cfdd3 -630a37c8ea6ca98e5fad3d4a7cc68ed9aaf043b6a2e2974e1e0b77aa9e6edc4f -491a7186ac562875a59abcdcf5b92abb49bb976a0dcdaf652ad02d70a93dddf5 -d2b2dae72861afc83bcaba60e08f5e149e5ad3e133b2edba17c77ec4bbdabaed -57b9993fe76f41b0b5677892ac3520a04cd900070e589cdcabd105294c201186 -81f1d8b6d424c8f3d4a3311d1ba1fdbde82b1181fe27559e989364d34ce45f59 -54b49210cc735bde2d530d84de0825bdbbd3a43ad45e0b2c2369d7201797a873 -d13a15e97dc4011328682a38ba18dfb2720e1ab6060d666166ac3fff441df908 -0ebb1e3a8b039e80fc5c19638501988467a55a5a72aaf62e6f79ccce8a3095c3 -37a8454de4d221a3eb4c27c77bfdc4c1eb13c82987963ca769bace0f1306f3de -5feb716b12542517ac79f5b21008654a9db7f46e2ae284c466f0474c92e4b13c -286801a27516f2e33593188700950da279f55166c260b647033d6788518fb8ab -8365fac94ecf28bae7951c0646c841c7374288cda7130b22189a0a9f54620c12 -3611842e62e411419974775609633d7b77bc5be483e13d4b34851f67f3395580 -b47781aad518df810601e7d7d297abfc761a2b86624db2efe2f11402a203ae52 -d8626d2d9830ca9e19cc6991cc818461a5a4b8bbc478de1699ebdf8a29f57436 -8503b18b699c98f0002f04018ed1f9f0b3ac9ce0f87e212b23774f8ace72cc63 -1e99c6ff814ab41433ea2ece6021ca93e5fa451e3772ad243090e0937b7484a0 -5dc02321d6c055a60436ebd4d778754f3e7e4605f4250e22b9cd1a12ccd814f1 -eddeb081c03244951cd43ef802e3aa5d1176417eef2d1c33643787f5528a61df -90aabc2fc28a06d051cb52080a55783a91d9daf657518e5cbe6a7f6b91a82f86 -0dcacc75436c1e97e2273391802ac27b13af9bf2ef23277f2d45005ffceb0318 -45baa5a0f219ef6bb7ab7e4b393eb7ab602a802cc711acd271cfb6e886b582a5 -645924862d791d9305f4c3e72969bec72708b08ddd1e784bfd93e75b2eb90754 -0787c096a117759fb3375751750589bafb889d7c3e0d72fe8177d7c29f16b0ce -96d65201519884c6a6255b50aadbfade3dece3fd1d37610bee5a31a614d65bd6 -980b7b2b12ebf02feb7482ce7fdeefc401fde075957b527bb07de743d7f8fc11 -4ad7e0d01bfeef9d19d4fb1d36151bc866b85489af274d4d58996b33d107e9ed -b62b0517d4b1bdeab330f0281ee051ac74811995d148e0b0059986ecb5d17c28 -5fbc4d7ced7bbefe9f877fc303a0b0da0988e564a28e06a09127c34477cd37e7 -3b6a367e155fb2883cfd9f05f2df64d9feb9b379dccad9d1f3a123c3fd1d4ca5 -f8993ee3f62b19015fd51860bb3294625a6f936135d0b4c76acdb41b543d3de7 -c501192ae23f20f5f03cb3a2d463e3392ad6c5ffd4d33ed382bc3068be221667 -4f2f73a3e82c12b65e6a6339dadf3494a32e7f438629b7619a807d78ca6e802f -52b450a4a60ab82ffb8345a3a83b1061320f9d4a67467f4bc46e9e86b88103e7 -f1c218b0881f7525eef46cd61719c018874681e6564294d37874fba063ffdabc -24d57e553799da32f7fd498fbf053e626834e07390aecf277af8ded94146cc0d -a01dc0e8ee4a1558a38571ae3a23ae16f6ba5069bef357692dcc6090bd2a5a03 -72acac2f7fdf52898bd539cde242d5ce0985339060e30a7b8ab2816eae920141 -47e70223801fcb31d23aaa237f9a46c386f2000681f17c9c2dbdc41e60e66b99 -ef318f557f62f9f375ffdfb97a439dea9143f0849b579fa4949be1066e28463f -f2eed4f309c8aadc0ddf04be3f08edb096bfd656d8f567b48f157b0e24084899 -03b64fcec581ddb9d5548fd0f52331cc9746a7dc0a506bb37772f1c1c98d9ee4 -1dec9b9e3bf96fc73d40f5b4220ac1f3d2db769eb6267d985d3ba2fcd451a87f -74321e8b1967d344f666a64fc939514b985ab808512861527253e0203387183d -26e3f001bffc2fc25670a0edccb7e0bb1ae77acb8099be4e65d3df6f490ec116 -fa8b1ce80884b53b22547111d314680c72ea849d66430ca595053997e9669894 -12bf8a94d3efb24cdcc547f4993ca291653f31b16d64a0b15561bae47489681e -e56df9f2ea964d6bc27ec9c33fed273e2c91ddafc0e994c61621adbfcef7e6bc -29da8d114c35c48d87633072fff31627a095119ecf2014443b9b3d180a3c1848 -1fd0a079f11c60c046487904c73e20cb0c8558e63f1a1f03810430df48044b46 -2d7dc135e3dc7df8f8f86dab887e9f3e59e07348311276bc4451745bb0038f6a -a03101638329ea3719c573a74f638540e0c6a9e26b638fc9e21aec2bbc9c12ef -dca71884caae97a648e19c2d0d1d89364c47e7f8cdb68db910bf75cf31989929 -9f73d0416b472698c88b49ea6501ef95d72fd70702709f19e01457a70f9e9590 -e546dfea29d2ae0f97ff65c6b7fae6874e230465e5dfc37e929199cff89611af -ddf0ccace45de017828aa0f60c12b4816634820fb31278ab8afcc4d231a8652b -ed7ca3f05794958caf5ce60afa102a17df3ff4022531009c4fffb57a87b8a64d -afb003137508e574a1674bb6a0a6e56c65916eaf7a280235673d4afcba05ec33 -b4924aa9a54d9dd4773a51b5f00e60baf0c950982db184ad0c96ac402a12259f -22d1337b3c5321b7c8692943fc5655e0746a3ddce98ff33b9d13f884e9029347 -2aabe2275bced7ce59373a650d11cafd1a2f74394567c6491b2c0c1546f3f284 -6e783fcd8757d2b8570f8616d60e97b3830606d04f130ec22bb950efcef6652a -01f8e358c822d788557c41d1066695db66f60440aeb80351610f7efdc2aea014 -4a682d7dd13851f6d187e9d30c44f3377c9cf7356361cc64e4ee2adff163121a -9ac78e13aa4fb1112b31153c19b0d28f007848c1bed88a10ade265a8b606b9a3 -662683a775f94bae38e065681f7e00b0afa9364e56cae809771e53b826deef22 -4f6cd881c6b7ca7dcbc33806606c987f0071925edde39d68392a137aa17561d0 -8f14c811e8b51bdfe34c0aabb9f31013879b3f8a348e5e03f7c661822834e6c9 -2f6f64c36177c579706ae06e73c3756efd98b26a9cea78362bca4cd8437dfd98 -ded00bf0129da7508680158a213888fc8165aeeddc216f77f05e635d4a6c8515 -3f953a8039f9cd162e2778f30644ef6c13889080cd8a05b6fede9770834edc5e -04fdf83bdb9422d18ed88b6f614569d63864c399942b1c9aef68272309e6bc7e -52ebb157dec5104c1f9e0c1e3d9886403ca2a2515e0bdcf60e66edba0f340d56 -c1ad2b8d5518cc178bc4a8135121c45b8afb23de5d84f4a123172f9a71f721c6 -e4847c2f5c6d30cc2a966cd5526b6f98d85d3a8255c6a9776335bf2fa1e9d5df -a154702bf15025b8cecf5bf1c66f0abc9ba99e54da9390dd5c04bb984e1c406e -1e1c964e99a2f164ce3a6aced4af3ae77954e900d5508cb7ec7b83e5ea9ca73e -e832ba8544107820e053627f8624e89e14301e18d80706ceabf0d1860d8a088e -89e491b38c6428555684e9572c82f292d59bc8d23ec39cae1ca2e152805df3a1 -9b4d96ae8debbd4faba3dc79960ebf56fb18caff0c0111543d66f3d530c502dc -cba972803afa6ea4f8149ba1708ff8748b115c523367244e9e2e9fa31c830d09 -f422f8cc49e5300de95eb6d6c07e7c7a29eb14c0ac30c5eef24219586b3ae56d -3160839a2252f464860c32b3e74b23bd6d2deb50e23f547c6d8d60415f123f24 -e3bb62ce14d851c7d103e667373d6cd61c66513c79b0ebc72adfd40b7acb6c1a -7086061551d74085fa458d212c8873e49658fae2c8c6c28d89a7f7c9deb4e1cd -270082ce880954b8aa36eef316f8409e4835d4677ea5e35e1c093fe1d544388a -e0b559b1245fbeba4eec94cf4a14be7c83bc8806151a071070cde9f13a8b8c36 -3d02b83d6f0c24c5e85a36b0fc2f907200d4e45fc4f5de13855ec20f5f9d65b9 -11b1d6f9544da2d5a5e2cd173db447995b351a722ba9122f4ba214465328eb59 -998296c9bf8d3ce6a95c458b9e0acc925cf33c35d99df1677240962cfa6e14e8 -2a0b7442b75223821213383e3785a3e3998e96d6305c61beff921606cf1cde1b -d45be689ef1edcb04cbe2c7c317ea93fbce61db1e76f8ba6e5dd3fb265f52762 -59142336e4d375337a5545f944f6f8c8e50b4f524c3421b0316a401358a2d5aa -8be973fe695518d61393ed4c7903a816535b7cc28ee379782dceb1ec955c2184 -8b9fb4aaeb7e19447f47f46ace999c7fc458129f215e4533a45e49bec7c5eb7b -9474691c5dbfde3f56a63930188596e8264c3f5157fc896d1afc5f3a2e190f92 -33e8ccad3e8aa7f94b1068370f19075fb16efe9ce48ad789e905d0218bdcb325 -c7632a6d5220ff2b05d5401b06b5b9f3e2c2fe09af3f18e8a17eb6d0c51959db -cbc76651bf2953b9590b7ec08b952ecbb1f8f8c86d08d217f04520cffef1318c -56ed7eb2abbd6040a04032f62f59603bbbfcb48b578cc8a8c332e2d8e2322415 -a443a92afb8bb38026160f679bebe4638a81b259488f73b4301e36f052ea618c -52dc0216c924e2b418fe3805eff335e6f2dc4517cd2ecf8fce49baa53c44b80c -4809bbdced1f8cc72e35f362d567b5bec58f6e9bb8bb9e134fef4a8850a11c6d -743ea1d516aa3f00f559e7432e3521c094f9312ea7613ee8a6b900fffa99b26e -896fce4ef775717c982a136978884f8aef17d96b253e80064577dbecd1747c93 -75c16902367a19d0b5a8c6f14ef55214aeab3e4983d5d00b4114a07f74ae3250 -58c54d6903f26e3283eab708d672725549105992fd14eabe5ffa167f850de4be -e473c356eb540e8bff1acba6ccae793f162ba95e8589505138460fecf8bb9c47 -0ef6f107ffff8f8a3c6e5f856c8be2f2c57c5487c9829f72a74b897258eca965 -58dc303c1c0a28503e9863564a07ea6ff620eda460a224dd5af73c806e72fa2f -ab3f702a99e763b4ec585da2783d049a58b4aeaad5f4c799e3d2d3b1bf9f101e -5b041db82f366084f692e914adbdd1240ed5d2afa22e7fc432f1bc194bbe2150 -b4521875c441a20b3d71ae58a63decd8cf47672fa04ae0e816902926c6481641 -2f139c8b605c1d065591bbda536ff18f93449ab8106994581811da593661da49 -6f964eee801f05bdcb631ed1d79e373ca07722e424a20e3dc2be63e6a0dfb028 -4234312463799b57c90aa43cb725ff51509ebd9852a37f9d643a81b0a4c9e304 -203512e475f467171805484bd5f6e38016aad5090e5d1e5f6cd4dbe6907c532b -c5ad198ddd056dff2f7f32b75dbbbabb1dc24e971cc6768e388a612408a8577d -dd6b5b8a03bd7cd432e59d34aabba7bee276bbba245000d5cd9be7f5d6a332cb -6d73fa04674da67b8582b036d93ba3014eb336ca4c03119169ca8aa5c5ccdd6e -297d651a6cbc07b8b8fffc95f56eda32bc6e748f33d07feba741a9255a8813e5 -6a788869ffeb0accb15e982debb0e81cda9733ccc8f79a48063d216691b72111 -1a871ff5754e21a7788e -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark diff --git a/client/nfsexport/lib/fonts/cursor.pfa b/client/nfsexport/lib/fonts/cursor.pfa deleted file mode 100755 index ef1724ca..00000000 --- a/client/nfsexport/lib/fonts/cursor.pfa +++ /dev/null @@ -1,954 +0,0 @@ -%!PS-AdobeFont-1.0: Cursor 001.001 -% $XFree86: xc/fonts/scaled/Type1/cursor.pfa,v 1.1 2000/02/08 17:18:22 dawes Exp $ -11 dict begin -/FontInfo 10 dict dup begin -/version (001.001) readonly def -/Notice (Copyright (c) 2000 XFree86, Inc.) readonly def -/FullName (Cursor) readonly def -/FamilyName (Cursor) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /Cursor def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 0 /X_cursor put -dup 1 /X_cursor_mask put -dup 2 /arrow put -dup 3 /arrow_mask put -dup 4 /based_arrow_down put -dup 5 /based_arrow_down_mask put -dup 6 /based_arrow_up put -dup 7 /based_arrow_up_mask put -dup 8 /boat put -dup 9 /boat_mask put -dup 10 /bogosity put -dup 11 /bogosity_mask put -dup 12 /bottom_left_corner put -dup 13 /bottom_left_corner_mask put -dup 14 /bottom_right_corner put -dup 15 /bottom_right_corner_mask put -dup 16 /bottom_side put -dup 17 /bottom_side_mask put -dup 18 /bottom_tee put -dup 19 /bottom_tee_mask put -dup 20 /box_spiral put -dup 21 /box_spiral_mask put -dup 22 /center_ptr put -dup 23 /center_ptr_mask put -dup 24 /circle put -dup 25 /circle_mask put -dup 26 /clock put -dup 27 /clock_mask put -dup 28 /coffee_mug put -dup 29 /coffee_mug_mask put -dup 30 /cross put -dup 31 /cross_mask put -dup 32 /cross_reverse put -dup 33 /cross_reverse_mask put -dup 34 /crosshair put -dup 35 /crosshair_mask put -dup 36 /diamond_cross put -dup 37 /diamond_cross_mask put -dup 38 /dot put -dup 39 /dot_mask put -dup 40 /dotbox put -dup 41 /dotbox_mask put -dup 42 /double_arrow put -dup 43 /double_arrow_mask put -dup 44 /draft_large put -dup 45 /draft_large_mask put -dup 46 /draft_small put -dup 47 /draft_small_mask put -dup 48 /draped_box put -dup 49 /draped_box_mask put -dup 50 /exchange put -dup 51 /exchange_mask put -dup 52 /fleur put -dup 53 /fleur_mask put -dup 54 /gobbler put -dup 55 /gobbler_mask put -dup 56 /gumby put -dup 57 /gumby_mask put -dup 58 /hand1 put -dup 59 /hand1_mask put -dup 60 /hand2 put -dup 61 /hand2_mask put -dup 62 /heart put -dup 63 /heart_mask put -dup 64 /icon put -dup 65 /icon_mask put -dup 66 /iron_cross put -dup 67 /iron_cross_mask put -dup 68 /left_ptr put -dup 69 /left_ptr_mask put -dup 70 /left_side put -dup 71 /left_side_mask put -dup 72 /left_tee put -dup 73 /left_tee_mask put -dup 74 /leftbutton put -dup 75 /leftbutton_mask put -dup 76 /ll_angle put -dup 77 /ll_angle_mask put -dup 78 /lr_angle put -dup 79 /lr_angle_mask put -dup 80 /man put -dup 81 /man_mask put -dup 82 /middlebutton put -dup 83 /middlebutton_mask put -dup 84 /mouse put -dup 85 /mouse_mask put -dup 86 /pencil put -dup 87 /pencil_mask put -dup 88 /pirate put -dup 89 /pirate_mask put -dup 90 /plus put -dup 91 /plus_mask put -dup 92 /question_arrow put -dup 93 /question_arrow_mask put -dup 94 /right_ptr put -dup 95 /right_ptr_mask put -dup 96 /right_side put -dup 97 /right_side_mask put -dup 98 /right_tee put -dup 99 /right_tee_mask put -dup 100 /rightbutton put -dup 101 /rightbutton_mask put -dup 102 /rtl_logo put -dup 103 /rtl_logo_mask put -dup 104 /sailboat put -dup 105 /sailboat_mask put -dup 106 /sb_down_arrow put -dup 107 /sb_down_arrow_mask put -dup 108 /sb_h_double_arrow put -dup 109 /sb_h_double_arrow_mask put -dup 110 /sb_left_arrow put -dup 111 /sb_left_arrow_mask put -dup 112 /sb_right_arrow put -dup 113 /sb_right_arrow_mask put -dup 114 /sb_up_arrow put -dup 115 /sb_up_arrow_mask put -dup 116 /sb_v_double_arrow put -dup 117 /sb_v_double_arrow_mask put -dup 118 /shuttle put -dup 119 /shuttle_mask put -dup 120 /sizing put -dup 121 /sizing_mask put -dup 122 /spider put -dup 123 /spider_mask put -dup 124 /spraycan put -dup 125 /spraycan_mask put -dup 126 /star put -dup 127 /star_mask put -dup 128 /target put -dup 129 /target_mask put -dup 130 /tcross put -dup 131 /tcross_mask put -dup 132 /top_left_arrow put -dup 133 /top_left_arrow_mask put -dup 134 /top_left_corner put -dup 135 /top_left_corner_mask put -dup 136 /top_right_corner put -dup 137 /top_right_corner_mask put -dup 138 /top_side put -dup 139 /top_side_mask put -dup 140 /top_tee put -dup 141 /top_tee_mask put -dup 142 /trek put -dup 143 /trek_mask put -dup 144 /ul_angle put -dup 145 /ul_angle_mask put -dup 146 /umbrella put -dup 147 /umbrella_mask put -dup 148 /ur_angle put -dup 149 /ur_angle_mask put -dup 150 /watch put -dup 151 /watch_mask put -dup 152 /xterm put -dup 153 /xterm_mask put -readonly def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/FontBBox {-484 -517 517 484} readonly def -currentdict end -currentfile eexec -d9d66f633b846a989b9974b0179fc6cc445bc7c8a959a39a32e9dce7faef17ee -3bec9f509ea0bb8adf2cfac3626f0443046fbcbb211c518d48ebccdd3cf3d833 -4877f4ef1dab34759b6d38f757cf015a5ccf12d00a3239084905ecae5ec9d399 -ff3b917ce3cd4e85a1c49a750549d42f00f90f5110c822aa441ea813981685af -17a0e41240e5c924b9c12d51f92ed0f3ef4fbc72c8b3eaef402c3befd6a52631 -47ff2e91ace4fcc6f381161f004dcd1db73271726d2ad25185a9b1ad0097955e -b319d5f6d40a9f7163a0e106a361ebf256f5d931e06b8d9fe4e84e785bd29b7d -fb70d68d41d66196ab5099bc38e613d11db08b2e9194806b651615dbdad9c797 -4bf4ad35bd0ce5d087baaee81b670d70d72475c0236751e9f2ba029abcb75682 -ffd70e77bbc2fa605cd824d77659de79f11275b5d6185386f0f39988ae683aff -876ab78964fff6118dcb35b502ed5c7a38c6e7f898a352c307c6ddd0558702cb -f9c763be246b45355d103ca1bf99d92e0f7743000d0019d4e66bac2292422b81 -7dd20274357d55680301b21eeded828c8836a5c47b12daaf00bdecf88289692a -da641e1893c2eb202c614afd6b70524c9e2d6385de26e6f48a5959f587f80a69 -5401aeaae3c78d5928dc524e12cf874a89961e67d9d71db9aafbbfd960e6c395 -1f0ba3a4af64ec2379e956b2715829f009faa9fedfc79e06559cff13a4c8b860 -4a07ec9c6565dd8530acee97e2d2f0b92eab28e5299648f00bfedf9c87bd0223 -02495fde3f194d735815acc2e09bf4abc693de6e975f0c2b6b0051c90d727988 -c6a90a3dd10bc83e264984752520880d26f1138dddd805001ec71b935a8461cc -0d6aa7cb0cb6c7c7cbbc99af3a513ac06848f7e6a222363f8696cf4ba2409054 -9b616ffe2d893a8f5066e6e7cdb21656530c2a720578af66d456de1723b3dc3d -1406bbf7dfeda3aa3f649077ea7ec19f8bb18b28b876ce1f8e61dfc50d7b4db3 -968efa987e8479766356441906d6298fb426a428a1109ee9058d4a71235ff03e -205a60f64b77d3e0920790200fe13d6676c77f78e4ced35f23912234da3b568d -e729baa323bb7ebb41d72994261eac9f2c02709de342ae5c070d9e7b394a3ca1 -aad2e95d98c05cd4696759cdf12d16c3e000f3b2a7b5ea03d3fbb204c6d59b48 -e4dd5094a54aacd3f8f62d63b93e3524bdfa95fcbf75fd8be02544bbe661c485 -9f4a12191be62ca8b60cfcfba14097f4f7daaea4af8675fdec8f6ac22dd822e6 -bd4cbb2380c0ce2f6e7e4db197ba213942cefeca436f33249a881c60c77e58e0 -93100c28caaa5f861d8557cd2779911d42563f5fb8f7c890c8e24bebf300c3f7 -15d0854bb460462de7364c007c0be17a57c23959bda2282f9fa8bfc1571d7e2e -5cd033129735be336dfe0efe4bbe19669e7c1a3f3d21e11c8ca081ec442fcaf9 -e4d5a1eac515db6b686f9da7757475c7b47cd2dafc56aa63208f5e0bdc127a3c -51b9bd6796842d3089641604bf32ecd04874ecbcaa8c4be805cbb6bbd3988040 -8505740a2023924894097f466e1736c0bd795cddb95d80937d662592c70763b8 -97a8dad80e3467ee8192d4d8667cae0ec40a5bc9192d59eece9a405dd140f988 -ecb324c75704e502d088b5184cac0ee0857289ec1bfe9a2bee359911b9bb30ea -8daade18b1ad9ea1c28b2d9aacd6e93833d9d8acb46349225b4d6b0e32cd7848 -fe8ec185522eee670d0cbeaaeaab94fe7904232249027292be36d2aa06ce4b53 -adb71f29d4746fe19cec148ada960820ec7eca5ebce18f19de5a7974b0d15b14 -2c0f1d0af773b4bc5ab79c7f16747b468ff0a9ce39970cf439720bab853ae9da -c6cd1e282d0860f012ca867969474e3d396370a876dd9f603a6b64afcccecab7 -dc0186a089a815288a68564f62db84d3a295f31efe6c1b40d1602e40c8fc8ab7 -713c11ec7f175b31389f70bd3255ba32c10b2db0215aa5fddb1c02f74bf8c33b -d4059f1f3640a4dbcbe0fd59bbc830881326e28b7c8d5b9704f95827e5e21d8a -f720e3ce0c1bd124963ea970e1c4eaa6d340eae793aff5f8257f471937147c59 -fdddaeed8b547b3b98adf6b5bc81a86dbf9436d010d14b3b5ecc4ed9aecf3ffa -9a4ae3b08b9cfd79370f4c6ade8406e7808ab8fe30694ae7bd9008c3507786da -543465aa40f8ddcbcd1d561a5871be7f39c95ecb0e3fd7754469b1103c71d18d -446ab34f5ea212f0b5c4d3fa8c50658466d770adc17f53706ff5449729b9c23d -72cb4ec02402c38924dccbc49c976312dfc8f086050dd5a38132eb139b43422c -756a95879b56babe8f77771f221f4f1f25d1a308064ec10eecfbb306eb55ee78 -2692db518eb3d477c4b52a182fe897e45c0c3d302aaa0fdc69ab3c26e55728e5 -5e12e7a51d28af01f104e5dbc61bd210daaa526c4dd9a93abf8867178cfb178a -70dabac26de06f5abb43392964a7acb193fbf31070de491ab477a4c5492f4fc6 -4c3bc40d760d41ab31d8a3ec657814086a133801701ba8fc4dc5ba92b03b463a -0f8bbd73b9bfcd6eba567e0c84b5ad5b32dce09e5edf39bd276d75c3cec89124 -a4a8bdf208fdc212469bc9ac96ab17e9df27ddd8b085dce1ba68ab50ea445bcd -0f002681a8dd517660794d96bba265fbfeef267d26fa2a1bda94235f763209c1 -1f817081f930f20d2d0cefb9261e22eea39cd0a390626fe71d312fc0fcf11db4 -6b0b70010dfadb9c7725f419c1c89f34fcbcf3b268c7a4f838d94cefd82685ec -b619d3f6df7571031a82e2d2a8bb98b8471d8c9febeb853ce0d38d7747c0bd63 -fe04e36dd00d2ef30b0c842d2a59457b3b41e2b8cda904a5d281290219814b59 -c4a75469375e9e0b3a358434a910bf1774657bbdc64cd408c680e2a09ca26507 -06f95e8c16735cdcca195f20c9a03a2a0ed60184c03f4e3478859c6639ca8ac7 -241b33432661741333406add1d9439690f07564d09f4b67152f32943cf93e247 -3f2a17a476bfd897ff69d4fefed1f4a994fdf535e3e45b1a3d46d560d5ac55dc -2e4c20408c8ceb82d7bc21016bfcdddb8d5daa9e902c327261549ba62090dc4b -27ad160070880cbdff5d022dc9c7d6f3f51a49af6dfb713308dc590c7dae5236 -74d7946c1db33177e4caa604ecf655b792be55e14272e0daa0cceb2afad8f3b1 -6558426e102f72ee42a5d9dff66d65d672451316fe551fc2923e4b24d9788091 -66457f55f9c83350a62bc5bf590f7135929b365c0dd003a95e98760472ce988e -0e5affd7c654bb99eb4255bcf030fa008bde51daa55ed736086953c599bdc3be -16efb2368acc883bd670d753fc7bbc65ec5bd797d0cecc14ac15f6423f0f22d1 -6b630dfe8736c2db51b45774f99280ea1274ae1c207ef3574e55478f68bac3b4 -8e24180f8891a2f3e8c0c9f74c22744830f1617b99a78feba5fbd752134775f2 -5ab542c17ce32465058ffb9e3dea8030dfe1ec82a1818c9bd1e3db30e25d8128 -9ecfaffe85bdcad5126fd461b6d5137d2b15cee2d97486f3266e4c49964d46b0 -db16d96593bbf257efaf0dc10f18e2f4f14a347cdcc220e8ba87eb215a66030f -8f30d405308dc15ee9f7d7c92c607140a6bd1cd8c8274a507c5f12293327b9a9 -e5c3a13eec859919a805f12aad2f1c665d054a17fd4dbff471890585a35f4e0b -5e64c4df9b687526be10da6eca391eb351ae661e16b930ad77ad33ad2a2777a4 -ef8881b5be91a83cbffd8b95a8f7c91fd86c71061e7717e4cb2f44f4ba2cf5ba -a64c4f7290690036427ec227446192efc7c14479525994dd0e86e7bca081a9bb -00d55ec51e1bdbb504c4d43463902c05ff0c1d67f3125b8ec48f5d1d394c7f13 -54e70eee5ec074d6a7e0dd6f3d2f006fe8a527b56a560685cfdbdbc9f5c905bb -1dd508ec7829a13a2d49cad2db823dfae5b85f3d7c04c0d8ba1fe9878964534d -c23e890fe460c0b25700c5f6432f420f3698c6a655296104eef778a5b125c74d -79ca60a8f987e278421b0d4a311bc4ccd59fc3f85972091516c8a4662275060c -8851c2532e2a1f72dca5c350a03fe829db297d0accf6458b10836d22cc461b68 -452cd2f3764a3abbf2314105e414fefa39686715463afcb6fb6782eddd94781b -5130a77d16bbf0689bf64fcb46c14682df23e70f7a571aaef0aecfda9c889562 -080d3bf39422821ae0093fcab7bc29f9c4281eac9ca14454adf3ec397855c008 -fe7a9d64ad134fe9122f7650e37c17bce7bfca7661a0a11b45b42bdffff2decc -47df5d33671daa487d7bd6a5aadb32e7257dc8d0feb9b7f0a4a7825fdb8a5cba -a31a988477486d0f09858c772b8c468b794ab2db0defa88c3b4927b615bb34a5 -8ac9d9af50a150e991e6f4330786f8a4f98654558a4fec8144eb2e46a6190b4b -5043ae396e7fca1eaea3e9a96c0b200826cc065f49c47c2797ddfeecc6e9b95a -f2deca74b594224dbf75041f00fb37f3aa70b0b0eceb4343a9331e3047e86548 -c3a7b1a42e7af0792e02a5bbd2ab548f7cb8cd112babb89213f66913dc109d8f -c1fd5307e7c20d7340372935cc459a795ebc9c4ada9136b71fdb3f68aac98729 -16052f949b6657114a04472fe931a761c4fc5f9b8ed340c16035889172f7669c -c6dfcd50bdf910c615e5f3c64101e2e6546f252cc4e0ecec03c5e19249b37269 -a0bd2e68296f9627e4ff72e37bf3c2be74e3b34d259aaecab472a595af08b2fe -db51394d6b59c390046ad76dcb8285a32c247c7cd181d2e386c6d5abdcbb3789 -3e8d9859a02c13a72743047d8880606488a521185ca446499f7adfc9a25c8ba5 -1b1c84ba24c0612ea3d957e76bc398457821e25844bbd906defed4d3ae434c39 -9e52e60fedecc1acf4ddecfe92452e9841eca92acf99c4ca9c2cb32afab1dc46 -d0ad255a851a78cbebac54fd314846c35d35cb7ea10596734ab79be35e11dbb4 -9d30fc29b140d5823f429eb8eb3d1fabd90b9c1509faf33f609b3ae40a48f873 -763b3a5d5c9236aa0a2be1661be917921b58ba7fba139796d4c125127885779b -6c71427cdc5812dbb6725153a83809446d26f9bc64bfc2a2a4bdca0c57a20918 -4415951c5d56cff5a3824ba8f8c0652e91a5d9c04d1ed0d928b33801b98d36bb -04af8348436aef4abd549a063eaed12f7a4655f5183515b067eccf550f7bf906 -abf1dc63139fdb1e8a1d2472133fe920777df1acb2d12f5b655e568bd42e381d -861daebf84ed9c6db8d307de2bed017dece82881ed7677b5f26dfa34ac25e19d -5837f76dcaf237de6391c1d6679dc1a981737ea3e07e729060a0472090d5c76a -dca9262a3823f24b1ecb646aaedd7de4a319f091a948935480d53376703049bc -a45851f924ead472f1b100ee7b4b388c6d37e6e9cb850ce7da81896c1ab68677 -c3298a9e5aa71ae6379990327ec585aa1e291354e44ad972d3193424a9805226 -f43b07992c5f1c5e01cb5d049ce2922dd2921ddb5c4dbce968dc7a340ba0449d -11ed4160c846a508b5227bb5ae574c8c7dc5d43a0db7a0bebcc638814f8933b9 -03404c4e720929833b4a5d5b3e54b806adb35724c2ceb47d77d39e43465e7a12 -51da0d53106f41313f92fbf9cd992bcfa4d13054bb7154965dcf530b2e0cd18c -92690f54a6c6d7bb38ff4c59d8e35359eb3ee07061356ec6506b2081878986de -80a2ba253a34519189e706fee9906a723bba749cef1c15abe3653eb31c59e486 -a6191335292bdbba1c442b229b56e7180be446a319e811327ed75f939936cb0f -56e123a274c843f27b94b35babf938717b4d02c2a673df0a88d35c35833c4d84 -1bc1d5cfb8a00a181cc1bb68f9dba8fb10ce8ff9a520d938ed21fefb140b5634 -8f2c237d2d1701e50d3132ff93ba3c0543694c83dd500000b829b705e3268ec6 -f94887386593f0e629f6e74d3cd192a48c20d0b1a00ec7b18aef659a62777caa -3692512ea0efe4b8a4f2a138631b10b59f0df0fe27be23f2d3e1b195c2375be9 -6e307b3b8404d2cc6f798fc995c1547354c24e04cbe50d273b50967dfce4ec7c -ba9bd4cdefee3ff4310358014dc02ef0be941c4a8273cce80ca9b8f75eef61be -854b698a2ca1100f40987aa622fe8fd1932984e77e8c9781c691734caf0c4e86 -566def79a60cd4d3a3cd79f59332ac99315844424a627e2d6d38b5d6e81838fa -357f0d137804d5a29abdd374afb2e3c4f5901cbaa94b8d15a5a8988a62fb92a2 -e06cf8788f37a1aee7adc0e67626d0de2881d822f940dd658b5f310a1c4f1bff -cb7fc9fdb347ad0372127ab143e4d80657e5f0c364f4721d5d68ff624705da2c -27090a53f2d481492c3b15bd70fc050f909edbc2bbfcea26ae850abf2c2bbcbf -fc4ab4d34d006a1a41469e2c8a8f5b4ca5f9820d105ca12f1d1240dd32d955ce -ef9de1e096ba539a3fb11415bdc0851356a40e0571a1033aaa55cc3f618f372d -8c71ec445768cfc42b2c10c04e45e98a649e770a324defb330b84952d46e5287 -65c417a6a82deec37727a517c12bb296eeb5e6c285dfd16a479369bb85289a0b -e24254e6ab5de4e3a0343e7f901c6e39d79902e7bf437087fc894556dca62fc7 -114b344d4052b3d7f84b07ef17199a938f69b2586ce6a9bb840c7dc1336e185f -6264b644cb411a2eecdc43e1dd26ec51a837401cf78dfad608a3b9038f9a3a40 -9fc464ff2214599f8ed573112ac944b593ae83348f92c54ae5d6db5956de20d7 -4d48f8f6c685a70265766a97367ec2d7c6e1ac00c30fd3b0fa4d2891d013d840 -693f61956cd4dd4ad134886868a55d9244f58c27f101b321ddb99b4e2eb23137 -a2e596ee6d131304df4265d6e72f9425127729028cf2c3375a4bba7ca9363e30 -9278afe6c282536537034c787be5e9ef1a0053c64b461ff496050cfc8da1182b -c1abe0eb88089e2d4a994108b1d24a2205f33f3293954b8e8102be94aee1e8f8 -d725d52e87e57a2de1f79c68ca6b5b36d05ac31c2d2f73cf5b955b602a1f2eb1 -6091edaca5e90cf43a1fc23a19e2fa06eeba82b15704ccb5b1b93587b2762517 -abd0e6375409f518e74d727b145daac480a52602ef35aa037647d7c0d403408c -095daa192800fcbb56e5af904fb72d069f6a15d4f95897f530bff36828630bc6 -e4f83f82a6f0814a943a49fe2288eda1452db8c48cad67b1b6398e481ca1835d -b0f9f9257fd3c6aa11a7242786b47fe196cb4860964cba7d224acc20d22fffad -c9e11d0c6a4487b53654719506c04b2e1ec53b3ca316d5232b821e5256fcbc7e -7ee284e54eca74acb23fc3efeee59e1dabdd4e9c46c7a4234f7e3e5784b3e65d -32ebba3709c63dc9ebc2dd6891e39c87bf846c3fe524e434d98e2ad199230432 -c84c95422e8950c4323caff03a9de5daa32a5ad3d07b5ee831bd589c0e331888 -33ac8dd264a563457fe1213d23d0d14536ab8c1e75e5af941e2068d1ba9a74d3 -ada91585fde5c2797229599749c420c694108595966b815c96adf3328894e76a -a0cd504efacc06434c27cbcf96009947a0f80315879d2108bd1611d6f4a5455b -178b5a85b5ea739546dcf226c6889dc02dc08b5dbad34b702fb77b82069777fc -3892034144ce7995712e3295cb7e31095f430622eec4117d98fcfd6075a4f0f3 -01794fb45f3a05e725588fccca124eeaebce479b9a835bac7b113dddab302dee -6c50e47c8e87718b3867c99025be81d05a905b2a9335068b59de14733d656b89 -97d21bb34893b9548830c45071921d0f13add9d9b75a6f38ebffe39f1d2cc4a2 -2482a80bf04e13b0e3614d1326e97e86b3dd77757764a9cbf6a0eaa530450928 -0c5926cf98b98bda505da3a35684fd0fe656e71aa67ae6e7693d3ae11425e6c3 -7fe01890b287f354f747e4de8d5bd48451ce4f28ed4bbaca7fac03eae6525174 -6e75b117e4c7fddb6979ed288f81053783f49f4ecf3af9cda24a7dd6647368ac -4f2b8108451496612276dd42d7281d6365810a5ef3cdb304fa2630432c5fed60 -ace8924e807b54a77d63185e7c7ec65c887ff17a3633322c0d4c8367affe2ab1 -0845fa3f85262ed12a0ca9c74cf1c0f87ff1233868b83238831f911e41845abd -73a346e7ac01c2b07dac7153de91318619f576a5ff1c0f9ba90315c5e89b8f37 -cb2d8d413daf121e0c1b3aa7bf1a62a2ce28e39d7c43da5275e8f0972aa73986 -98dac6dca24adbaecc997ad0488bd9cd356dc86c15756ecb6fe2fac61d4553b3 -0b996e98157e29e174bab3af12176094b414bdd13f4145144f087c349b8a7042 -b1e5b9e705c93ade44defd86ffe43bb513b3254e8310ec64409e79743c2f897e -40270fd5154140e0e65566556892c49762a351845f767621f5f5e5cbe0b67109 -84e30ad39832cc5f8857c23aa7b19981ffdec5e4497cb52da24fd1ebb53855f7 -8f87823ff65f6650f362d6741f496c21f8db8a609af33f6e60f858e7bd5ab91d -9ac64226eae4994670acf610130e10e7e3a6b1e6f3a07b87d4e6b712d243a493 -d5280549b827378ace2f866acaf117f9094c2b15c2430624d2f1c9a8ed3c92aa -7c3ceee15ef6eba0e90686949aee9f375acb97a49bc96942d20abeae79fd8e04 -fdabe92b3c8b493f3d7efb13ca6bb9b8d98c41fc4c4f8e171dfb2ac038aba4e6 -60724b873c96a9e7b7b4edb24f09e22c937c8068589afba95bfab3c0618aec42 -fc7b68f1fcecea13a54f421c23e2df1b04785dd471f82587616fbd140758e21d -17a1ff6dc30b301925fb1d2956cfe57f8b1baa1ccf4d171fe03c9336bdd0678f -4640dffdc2ea1834e5eebfe68d4c26c9d009cc04d0cb8ee8f4f0bc477df068c9 -95eb41e087a9a4c390ac5ecc87667aa713ada2cc1991262a20fcda33625eb9c9 -1f419c6723f2875f40de2258fbaeb821e2a398dc0ec62119c4efc1e7da92fbb6 -c0175c56d32e975115a12697fead8852b8fb75b23cef1bc53b8deaf493c7cf1e -9e9a9ce177bd9a78ec55f3dbfd247f9367974984f31ba071365fd79bfaacb882 -fab5934f730081165771963587130b5a1826b618ee51001ea81ee3372507ed03 -545d33d977d4bbdd73e0d1f235e7a2e020a28759dc53d383a980958ea0e49865 -b3658294acf2a04e0d93bc0806150eb192c8fd02c5dda1fb457bbaf0f71fd063 -29b87327fb05fe02ff88f7850d17b65ef608e7857d2876fb37fb0665e634cb39 -2ef9a4e3751103c087fa26998f68fe730c0ae114e34a3d412e715c7a12df3b56 -862f24f1fa06f6cc83769ba4d310467b07a91ef2dd6bb873deee11f1f326c40d -89aeeb8f7ab1ba650444b2d3f077dfcf18803f38942f3d30f22d93cbad14fe1c -1d968b62b018525144a5d2ed4bc636a0c9064940ef84d9ed682004774d8b09da -998824b6cd1e7efb724fe553a8566b51bf2c6ec6f949501ce0bbc54a9309eaa4 -378e143ce3e035d57beb62873b294d07b920fece0f58d5ad1c5c4c67d3180a3b -33eae3ce510ab906c841ecd9366ff615f07a905df9810a163ddf8d681920bd96 -d7b2212c74a05cea57e1e474be64eea47b8433755d72e5c1f79b8fccbcf7106c -b70022721bd1bc779bc3f59301fb393d4429bc19084e228034291413f21fbd79 -83661ca0f6d331c1657fa69e2117464b8fe708520655c58b3f346f9213630fe0 -a31a55ecfc61f5466ccda3138f52cbbd575a56d4abe425266cce9e490d03bdb1 -0f9f959cbd9e34505dc46b9a439167931828d18f8e2b8a0b5d33b4bfb64df5dd -b3825d34568453b740127811f4ef2995d0e7a09f29d432e0e0097343d5726719 -b04a72b4a5e0aa2804d6f7e155e1f89a168dfac8d593a8af33c075e213c0ab66 -366fe474ddb9ca17e6e7bce12b473ede15fc938239f21583bac0d6951648cc94 -cedaef748a18fd237b8b50f36fa97dad4b0a2b9e4bca1eb243a60b0eea59df8b -74c76ea6067e77c0fa5b0aa43330690462851f923f6503ca2076f6b3d10483d5 -a1e8871c08434f6f2707f7cdf3a68d7dbeb4f2c7332d01435e37787877a7a29e -a59c1493f2a959981026d58da06923d04c47502c7b5bb7f151ad5f0ebaf72c93 -db1db631865b261af7835ab3b596e4efa81cbaa8e6ec72f784e0b268f71d268d -517cfd39804d0759486f8968ec149b1952be695da8553900c7e7c6878b63c664 -078dde438b8c75888e32c0d3285f6bed05132ff8e81e393b8be800662356b8d7 -b0fbff19c35c9ba9326b36586a179ae3e8869af85ca655406e1bd5a36c94ada6 -f280d1352577263444122341f71b118c95ed413a1237a72a78b59d12eda3da5a -3d9fa119572142e43ae69551a024fbce71d153a1a1c211288f878bdb3f8a9502 -4a6420b3ff69f0ffa246d5ae44370a24576118dcd8c5f28f6988fd922ffa8cc3 -af68ab7dc10d2c3bd5900b05060b984a063bfe7b03932a1a4427de62b8e4bc21 -4ef0c83fe86919a766478406f57d148ddc4ae0500e6e15246e31dcf0a7149ff9 -1800ade772d44268a63d11ee0f3f8ad11b01cb96d04a52d57d827fd931e7aa12 -f31373e2de4027c293a1329311510a63a268af6d73bb839ce767b3bbd4da9680 -4e36dad7495374b17f506f899ff61fe23f71310b8ee2f530bdb6d8c951fdb34e -8fcfe71b12a555f174cd72428acc96eefa57652a2f5dc1a446d9f363c7994c53 -0159b89ec2694fc59cc9e083f506698db58d841d03f3961897168b96a3965a92 -500e29b74743e35681fcf93debff5785569e3b0e42b2b586dacacb72ceb0dfa9 -6c2aa8902fb26f1c3293177dcc7f70b54d85cf1ea4ca1a980e0e053bedde3eca -0aca76c214fbed2982cd51892bdc35baa7e3ddd34da26a5b9302ded1de8099ee -0e87410403d8f782f46987be974b25ad7766608525de89cd18bb00f831c8b3f0 -54db8cb4ab0ee2a9b1e63c8840ece040c3d7d763c7f65bf4ffcb33e7ba98679e -2f2f77ea277314b42e94e936751b1c649afe60fbc8cbba2655c4bba13e622e92 -4f72a5612bd507388c7cfc8077209c68c4252a81f8efbe8b8f9799a947594894 -8a1d1087bd458d2436f837ddce87ebea385e3c44f433f2b775f6257b1f80dd96 -2bbb0fdcc8c78d32dc1e09521bcd9810fe25117326f2ba159a60c26d5aebae75 -8d8a422e14feebf2cc3d30e6c70e320d3448eb3edc08ab72e44824e5175790fb -4a6401326b5ffe81fac99839bdc39a9af68eea930ffcb80223bf21e301c531a6 -2a523ac9985cbac3bd9e426dd9cf6ef112817313ec460f8b90a4a2349f819d74 -3444ed4872acee556af837375eff1b44dcc310f4ef67758731f7be7c1cfec351 -ada83a533c06701f63d2d8b7b2084afc5e7949ff250340351eb4b2886d16ebc9 -7cca76190f3a4a58995fb281a0dae019ed92b64190656f7bc5bda4b2532c52c0 -aa2d5ec6168e24b120ad5ccfc0bd31d631345c2e2cf3c7fe1ef9ca9cd4322b9b -9d587204a24e18ae280b2ece030626bbed9f66f2979131ba38043a92d19429b8 -53e3475c7b933e054616aafdf0d3fb6345ef888e3fcda12985c2b2afeb2e59ad -ed76cd456c6ac11d453deceb45655fe71a3ad5f5f770a7124a2976639a0a5847 -b79379244738b5a7b176207080dcbbda96f43a68370b434b348ab5631dbb1d04 -1f1082c04c564b44191a51afdfb3950c2b65f9c4ed4afb5f4bde68fb7a09d710 -4bbaeaab1612c1a0b1060fafeb385da056099a2765d69388d9a276601bc13a54 -fd114f2ce447e68ef452a6703d6fad6acc3bb591c3da0581c45de6f2edd02422 -aaed358aa940272865f7f93acc28460c8f0f5222454c05fdd3eb100219113eef -5b0c02314cd29c2ff20f4e86b7866ddc9b8eca4c7256e9434091319ed99f9446 -f606dd0fe2e5b86e3237b2af55df6bf9624b286a1a9970759fe83b3bde380b8b -df7132016d4be25517449ad88c5e6da4e292da5632eb662a898bf2c76714b963 -ebf7e7cfd268198ba84cbbfecb7c3fd01612f7c6a9f118aef4cd59307cdde680 -25d9f98dcc9542ecfe6a8bd8b2d09caf77f29e4644bb7b6ae295277eb8f5b733 -617f4ed5a2111a5d9eff858db8ebec3e59e8fe318c2e7a474f07c9f4234c9add -fabaf11cac0a958be217bdce993dc99865333aff57576ea0e43fc70016c23077 -8ba456546e8ffba24581ab50e72fc463e2f524a07cc6bc11a347584d4c9f40aa -8fe8a6873b680b5e7871b47e1103a77f0fdf2110b9801e8f24ca8218e4a9724d -021144c9449ded25b0532a33d410bfef2382e1ef629e04ba1b5fc09d86b85481 -bd8b1f1d719cb01352c49e1cc54c34d115a6c1d0f07a83afa2acea650ce304bd -919eda435e6f5a044ce65aeba0884f5099d860fbbc90dabbf0ae5cb1dd59555d -2ada2f748f3a74010519af69b8ffcbdde7e88de7ed1b0f53c255cbfb8e41fcb4 -8c80603c8be3f3965b3af9f94b027dac3754764f75509ca2f554ac1de60bea69 -a53d7a9c4973b51a41aa7c0386117b6353555b31670c803db4e475c330be39da -4d10f247ecf2992f3e3b35cc56bc19ec40a3914da09c914005419448a633518e -3d4a0ff8c39f6ea57917fc87f890ef834dd2c6531b3fab0eba79e0f580c19291 -9974c58cc1320d8e66765886ac966a55e594abf6fa69fd1ef3ad7dbe2d964495 -08dac3b161a45e836755af3ce6b0c3e3247fa56d71723e41838bed42de4404b3 -967c900ae419a7006f0832bc24559a56f417921ff6c83120e70fb9bacc6ed431 -8563d3a82877b5c1422cf56cda1305e7154ad1f63873237de5ac6f382217c4c1 -17559be71ea1491edfc3afeb9809fe0b4e9b6e830a48af9798e70c9411acd054 -9d835fb1466aacfb17b7a863c7a1cdc81811c220007ca99454e8c423ac95b8bf -13ea2b29bd1af8ba4e56662df2eca3ac252b683df1e9ef0cd47326252131649f -e64086725efa8a6886b8c6dbf56490143d5d91ccd1c1f3db4c78ec614c3f6ee0 -3a5cb384ad5b7f3c7e1fa13ac9cdbed4eec6c5012de7f3f48b41531a79708f53 -d5f16ac0b89c06267e11a5fb32aae3ab16a1782489945c14492824724206dddf -98cbf03cd9d969a543ea1d516df6664b4a839281b179d1096a434bdf08b3b6a8 -b0231c8857f9d4b4436f9c02211b6af4bd22d073d008bb8789545b7f93635082 -641c6e475c12ce89c0a4361e91dadca8ec20583003b1c9306122accc59fd089d -28757e3e3324c4bde7ec7a161b49bc994084a42880693ffb8676366879ed7554 -43661ba1326baaf4dc099884f753648a05a37c71be30b4a3425d768b049a00e3 -2a3f3c3b12ca5c99bbf419fd25714cbd00a850c7d84a0b4c3e5346cdb1964a0e -9cd1ac316f017f6dff9679091a6e93a70fb6d26072a2dd886baf9b4bde98cfc8 -372927bc92f28bb3eaf14252c7661be1c656129af8b3e468456ce20f872bf151 -22ea95d1c79560268976be3ee9bacb2a468e1e84c8c387ac41d3531742ff094b -c3e14b27444d2d0dd8f4dc738e0af4133cfdf7b0808498646e6d28b738e80117 -870bb74f8d4947a15100bd891188a1609560000bb7bfdcc210508903dbdff736 -07dcc542b58699beef7545cf0456b8ecda464126c86ae3db47c7ef6a6477808e -a8c1dc20768895055bacbe2562921d078fe91794be3ef5ac268f410e4ea47f0b -68bbe84e54fe139dc9f18808574ae9316e15d0f3db78ccb4c0a8ac63ede19a31 -09749a0829ae1302fc18d38d27e43cc24dd43b091a58ec394f998c5fd4145781 -d6ef576e99c850fd41d46450fbe5d5cd4063d0a24c8bad4a45753335937176df -36d2d60a677fbcf63d8342232b3d9c0fe3062ce4f1ba853b40bed54da124d913 -4ccd113e18fe2d0c4bd55b58fd5c5fe6321996316eebcdaead6751004dc26676 -1f47c198fd7c0b686705a63a8d2d7e79fe826edbba1d166822aa804858c48f3f -2a126fb0e7b2d0b4f2f082b78b98c2702f5ff3e4307e1b55fd99ddd861bbaadc -90075adb2581c3d4e5ecbfa5bf8fc2a4cf6df7bdc0e3382bf12e612cdf016479 -3e237ab37bb1049ba63bbbc0da17d1ba3f98d88ba38f98d7133f53c2b9e87889 -5304664b4d5b6a43fb2577c5ae332fef6d7b7982e0ffb57b265d0f51cb569936 -8fac060e6ac472317597615711d6c13058b2f192982a9e858c093f854a60ae49 -8687141101d45bcb53dc69d432e0632265d8704cfb3766836caa3b09b2a44a1e -bee69f88f9b8e62d36dc16fad6fbbad7f15c91f1d2431ec61b659e9072fa34d6 -8306c715e2d111f834f7d9fc93a902976ae995bada6bdcfe09d5d3a67b247c74 -1e45d070c6e02c7a9e4aa540a8fe3a41df7fb4b60dc943bea339219bae869762 -223c7492de1434dd6a75c0366624f936179c494f7166085416d126a6bedd962e -1321f9a2e1b359ba90023ac18942f3d19f8dc7ea36468d055d68c9e758c0bd3c -7bd2b10e7567282b6fe689a2c713c3272a664df39acf1eff9e3a64a353195290 -4e100ec249c9de6196020e30791284f028f8d98e4447330cafe620642db22f16 -e4dc191d9c2d4ac9b54c1de35a59b2d3138fd686741e836d55d4b12ecdf1cc85 -5bcce70a55d9dccbd33005e654150899527801be8ca74b238a7be4fa846ed624 -9e4d5a6a0fa190963db0d0b8c5f982aa477bd202ce0fa2fd54c3cd4d788d3eb0 -1317a307682c2a2813b48ffd7603a4b40d79209d49eb456064e66cdf7551161e -9204ccd7d84c0deb458cad1a4556a1cc1e7df0c815da189fd9499e58c9d22610 -f387782f059929860518d3ad42cb245278dd67b01c9e3ad391e0a57b19fee753 -824cb856bd538a05898ded31e347c26ad123ff3669ac5b39e137d655b1c05899 -a9f73546d556290347af154004be5e9ade507c27292e9c60d8a2bdef92d57a90 -89ddeba1dfb5bd781c8ee4d036bb8b67ede9cdd533269c40a7f862a4ded71e16 -cd04e4f144cd4e2070379f4aee9c47781a15b46878ca5d640e0f434010cc15fd -220aec4821174563c17e19cd934cef3290b3462ef9cb001b84991f29e8de05ff -686787bd434149a2dadd81e4bc4079c31b7f19ba28eb7240a06b9cd5b5e11490 -66573636e87e5c0a10d0ba380117618f8bcdf3152826b110a7218c329e49fedd -c3d494bda6c0fed8ff7da20da6a9e0b54ec79af50c7fd1577bc4c5fe1bcf35d6 -891091bdbc81d468935fdc75756067516080fa9f6cdffc557537b959d150d86d -9e0e1794de22b011073e79eec4ea6f14d6ffe0a75677d20fc0dd0391603569bc -8e7ffee11b6b4f75f081fe4e7a9eb847a49d11d8531bdad6a73f1b9146625294 -85db9550e9ce21213904a4f9997a83c1bb9d53f5c2099ba94f56bb7985fb1cfd -be30d619af77363e943b7e94b12f88fe3f3a1900d722107350b0376291296f94 -8515d1b41e6bbb5addaf252985596f30df0aaa37b0e16936dd786cdc624c68d3 -2d796eb0faa89df09f0b41980b8b86009b682dca85eea7c16638d99ea711c631 -35a79c1d426ca9e8782007c61e424c8ede1d72dbf919267d25c73727882557eb -f78da42d7e816cc83d80b95f3bb86356314e65083022a08f82148044d071cdaf -db03c7e44017af773f0e7d03c2124e3bb8ef458736c1051f70fa18536395e521 -cbbe933c514747710cb9edfc30f774f75bba103b091e24e4811b4a8b9ea2b492 -de7c5ce1ed103b70c913261fd04caf13727c6df5d246a419c52f175e580b9f73 -fa96742e4f119405174784450411374263d2fa6d277cc0a9dd60c97e9bd91498 -a7942547c6888fb80f8f9a4a3640aff4c00b2181e9a89f367a680cd1932b7ccf -6e1604774602cf412130503d43f8bc54bee8514a24da005c733295f022f6755b -e5387da8e24854cdb5a73c39b1c34c4d1884a4d234adfa8d104c004efacdd2eb -43f20ee50840d297bff0095bd290ed796f726b506e316224907130eac9d99a69 -3a62927d3ef4bafe96258b2b391b373b255a84d6e9d03797f0b1db056052a5d7 -4d4754284dac23a05ad8f2a0c823a8a9add8669678c9acc3d1d086ef67e116aa -2542986d3a021f8bfcc00f66e812c83e1235990d4adeb39dec07e62c10089c93 -f1801ab8f6210bd328aaf6d44e0a4df0d5b2ee8ad1c8f2a21f43e4f9b897ada3 -88653a83ff3cceabaee4fe26de33ad5fb3337e48e35d14423718642c4071a56d -f39725f27ad0f2a71b67a14708e70007bac926be651398bb19746f14d1271873 -b7d77ac822aed13b6689b311ca57b895287e16acaf3a03cb9424dc840ba5fd17 -543bf2b93b4a11cc9cb7f9cdf118feaab5d22244096b4ace849d8e51c9b86d4e -4c14d5874bb374b75e8e468a10db921c066c5c095c5886f4f21b4cf32801a1ce -ba7968215ea52e217b2f892722f3749460b65838227b45b4c697c2f7d9ddc59e -e76a83887354180d4eb39a789f0c4ce770f54802b55c238b5189e8809bc29775 -e02104bddfab6edfb13614960b68a49f8e903e6c53d38faeb9472c8bafed7516 -0fad6c4b186735d5de8f6a655ca46f880fac0981383b4720fbb3cb90c757de45 -8f0036a7281b877143b5ae8d0bcfcfbf15f7fe641e216d09aa391ade483d0b4a -f304f07036ba5b7f32d9f2d0c8969c4f392fa855dbb57940e80e56b3209853cc -f140c62c9af0a44b180280b95c9af522e77b0f32de23eb5f7625251bfda99170 -e9dcab1f6ddfc1fc7d9ce75c8b9d9350a73823790b789a41b33bdd12e5f527c3 -6785611b74f8232deae963e873156e473f2282f7598d6b05275e8c5ebeac183d -5239da1e92b56d987cd9e8d817b2be1730651955754e028b4041189921f28683 -8f80a3097ce2e58784a85a18477617d1565160895c588601d71584c097711d07 -fceb3809a57de8185ef6f4492f0ed8691693cb3c83a889f4116684657f1aca5c -d954d0c87ab67b71e6f13358a83c1a651805a7d3571c0c9791cb761014129388 -de2dea7ba4d0e10c3e3055155fe5f713e51e35d927ad9bbb85b033b9c6d94737 -22cda751a32c178a3e9a526ec9f50d3ea4dc1c4e979597a1f85e3d4342e25e4d -2bc78e24765ab3cfabd4db25c870488c2d5962756d737bb1c27ec5ea049e6ae1 -91ea186f69bfa8c8969c6c0453a47b73d9f6550131e73f00140249cd8dfe74c6 -c585467610842babae638f2c67ddddde42cf80d561cb19fa06a3b9ef7dbeec22 -e0083cd8916482c5badbcbf03e88f28aa322480baed5cf147f7077da4368da03 -9ba3ed7a96798b9bf4af20946fca2d5cce88915df1e03bccc0a8e8c8c65bd6dd -6b2195c57bb04dd20928222a230f22f564f51b3e9fe79564525eaef5d017872f -3020c9326b49682962c78064c067c2b46fa3b94567647e04e9e059287bf2895d -9d9d169816cd864157c41b432c86626680157cd9e3bf1554965ccf68d033123c -3667deb2680ca27d3241d6ad950b50ad22aa3166f566c91128cf9448777a33e5 -15a5bf3acd90e0148c7798a5a3875c7aeef66ac2d30c16e9ce00c71c82484f9d -39ad43a5a30dc01aa0e0bf5e18d0f91f0fdfcf8c30fb6bbea79a848af26d02c8 -431733f1f7e82fa4b37afae125d374fc172d1c9197ead90f986afc0da1243ff9 -97d02fc4b4b5c340a748429841b3a8b56cf3f72aedd6a4d90575fe7c781667ec -155153ca416dc9eaf8df3830eb21e077653f595ddad569d8bef8802ba2d2e2b2 -7123b7f55745380a83080ea954ba9f2c9039867777b33d1d3dd812d4f8166baf -9e1124da1b7abdd6c69596cdeefb999777943235314d3098beb54f8f9ed68ec6 -b6acb5aa9d3347b138636a0718f19a06285f194e7a7a81fc94e4d54110561e5f -61b8fee49f71566c8109162f879f16b80e3ef0342c1000e0cb32bb3b81dff1a4 -dbff77e91e6a561630848aebd0d1c40c5f3129e409da578238889870a7bce285 -b744707adac54c8091b1b1f50390f2886144294e036008c3e4f20267974310da -229b68182c2bb1af96139268da254217c47e5e2bc279200d858ff72a885fb791 -43ae0be2efd2ba6233620c039a1d47d8b111cd330609cb1d810279a7882aab28 -0a20204aa812c580712c7179488815e2366103d96cb0d564afb0f5a020493076 -46cdb743dd9df4f304a60871e597bda480624939ff921d7d36957afc64d5a507 -a48f8a087585bd0548b1f2c5a4c72533cef1db0694faae62c035bab307b765ca -422f221a5536c51eb201ff03b81834aa581f36c62916dfb1dac0a680f1f4ad6b -2353c8603e960f4a70b2aecf44c0d134374c35c88a77e0a62b542efe834e48cd -4de9d5a989923c8a6da285b3f6ba2e8ba4df07e63a16fe98bdd392df72759073 -f7af0cc58e8f279a232763a8a9d18dcb205350cefa25012c0183713203ec50d0 -f2d6bf83edbe9a6d933ccda8b1745b183adf413617af83605120075f49db2a24 -df5dab6f8085d71c4eec8944dde3ec0c1e51b4800a90116b25204a3e51def988 -eaa3ddb44d44a052477e2ecdde55d0282a5a9c5f4fe31f1d0bc7f40d1f76866f -c31db401b2865de254b1699ef0660727bc944470949955feb0a8077be04a333d -72de1f17e061040ebb66504544fcca2ae6b1b58dec1478967b7b17659a4e8c9c -fb5cce0a95f52d3b5b9fae59451608518b907aef2e1e94144b72fc846b1990a4 -69674c263d050b38ee61ca447b0b25043c980d68fadf6114bfe9319f27ece2cb -2437c5e78984c9599761d264bf15379d554540b13a2adebe9d5dde18b5663650 -025f9db1e17d5ebdd776125112f32c157d87978c564afc1ab4bb9d734689edf2 -e165cd4ed1eb93b699350d5253f3f869953eeabb6add680ba6a2d840bb7d90b4 -c4e478460059c38a99be0b7c07173b2fac2c68e242e9d3a2eae427c6fb733698 -e429a14c8b04fa08bf6b9980895b4706da12e7f8cf42fe3eb14aaadc87638a45 -704b14972f1df00b8e7a9354c15462ae600a6a8c4b95f33acd11a7da207e49a1 -192cf225d16b58ded179c8ae20fa7d6ef7fd384e7941a588fb7f8c5c29d98172 -4a848cd2a7109333f2a5963f2f42c6835170a57f92c54f03fb2bd434364d6a55 -d5adc8f90b553cf66848ead1de1197b267061f83442021bcd668fa332f3f2034 -143168d02812313f6abea888a321affb1a540a20df468fa35562ea4e45640c54 -e03f932f5581de862bf2bd2c05d2c995bf6ee2039a22ca68c9a71990cb499081 -60b1ee8c5dc10c9174e88f2aa5791908fdc7f7d37e7bada45f04043ee35d1dc9 -ec3704d315bb4e372ea62da6580a5cb5192ec21865ed4ded15de27bbb1672531 -bc5b4c3b2ac266dea3812192324b38c50e264f2bfd995e3a33119e6b47f23fd5 -51271d0a7603da01412889b76031948f722f9fdc54012b4ff53cc77e9a787946 -b79a81d8a32577317f3c7f715f8d3f0daf03877d06d4161503cc441c723166f7 -40e4727f23a4c75bec756e4c40b0cde10315afed35bf03d523d6ae00bad2dbd0 -358e691bf92867237ab36951657aa0c4d79726dc75d8c1c272da1b3d0b47f95d -2436d59ca941577a232e540928bbf58673d51715188aecfbee7aaa56fa672850 -b047bb56b9c8ef5104b10f8117402b229e483c863d4831b9a1efaf164e99cb35 -39c0299e73158510e5e1f861a6715b979a9982dfd800b0e38a394f169f0f3d9b -f4f931de232db24c616bf79f59719e6bad4e451df62e9769ef3b2e74033bb0d1 -437baee3efb900853193f6ce69c7d28a871449e9f84909a96e594db7fd08efc1 -217482e67b2e02065e60f4dd931136556c80f39641860d84b7354e86feef096f -06e84d35dc3645f05626b80e24f01df1031a4e1ee3df4fbf139d27f95926ad14 -fec86931515bb225c1334c86a2a59dbbfb13d6558d389a7202e0fedce9df3d06 -3c4559b11255d23e5a45709756d857060f186c9dd2cdea53f0c3031a4f0392d1 -4beeea8c705f18ae48fd22c8412b71aa4c62231bb9f34d2220e361cbe109818d -1b6b0be26b2ff128546d68029dc837e42204d73a35ca2a18e13c46d488fbf3bf -7f6a6f623085e42743ad29b3b9c042efbd195dadc87928ca26487e711463969f -e972c925d517c754fbf308c3a4ec5c604359a4c8fa57e8db4ab77341dc6364cc -c6d0640113d541476389195295d68984a2f25b33441d7d7bdf581229503759d5 -e955ff29ec234f2a7ddef7fa898dc3ef0e82da664087a42b6dc28d665622cd30 -92868e09703aee3764518038ca3969947a1b4e63cea5d6a7ec7aad6e7577b88d -2c9fbe177a04401747ef15b436b75d660c7cbbeb77bb44e430e9835ab409c2a9 -108f94117951832a5a0af0a5acd4e8233fe636a348f252d22fbfea95a5eae39d -d145abddd1467561b7fb12660b7cbfd5cf9cd84ee2988ddb6d56429e4b87fc44 -6cf4b70f45e8fc082d7020bd6e8ee33c6b94fefc99336031d219145fd293f4ac -bce0f52f8ea974d74f2b858a3daddfbfcfd50c3a778ddadd1d1090abf318fb58 -2129ab1f2acd880911be86a256af0d0f74657d53a339a4f527e0e9809e47914f -d7719db5db1ab21f486d85dc8852e9e2cdce6d35f5ae66b361980bc0516d1d12 -51f9444d3830473e30c9060a76edc532e8d74c4fd22b5bec03021bdb293a3a60 -9d8fc3aa0ff599c7a4593e555e1b82f0186671be699c73a26a281aed93af14d8 -5f9961d44c7f4954d3c878f8bfa0c5632b31d9a0c978442e917fc9ee88666818 -9e13fb731cdecca15c658320272ac9e968ae89bcb8fae5765998c8b4d98aa59a -26e36ec1543032f391f712dafaeaff23be8821b3a23ca765270cb0bfc601f57d -da601e2e28bac03b7b171101ac26c195863ec701a6ad7b9db8177aad94be5ede -eee3b11860892cec50ec4059b6adb16c63482233de6c780a26109f8639a029f4 -5c2d3e6a2d95ba25de8097aba992609cdd0a76683f8fc50acca1533e04f0eec3 -96859b3a92dfdc7d8d34f2add87cd55ff8cbdfc446e7154adea4dda504f6a835 -8e2b3433070f23fb153bf3838e13a23672dc8a1f88ad096693212d994c523955 -75b925b8ee182522d63a882f6d6a3ba45fe37eb499f44ec274666b1256595d2e -537684f807838d60f07ab06603e23f360d6ab50c94cc48d3ac9b31926cb8342e -b5a881221c1e34888336699c7cee8199dcf5318cdb661f9188be6dab543d2bd6 -9016f5094d7b04677de039ec3fc22732fa1ace506320899074a31d1e9e580063 -39613072d3eae526b88b5933a0c5c1a438558372ae20cb80e0d4682571f75a1b -47d69c6868ee47dec033c4ac744d0f958e2915b2c5115a73b5268aa94ede8f3d -182e89777695d9bc36217ecc7ac1bd1e460a6503d1f1a33919e1bf91349ad296 -45cfef1aa1dffa8a68d4cce0d3f6f5dfad069c8363c68924647562f23fb98a00 -62212b4b82a5ca2d9c98353b7863909d6c1de93a2bea9327757528701415eb45 -43472b40f1a044cd32ba7ca9737ebc5e98d7a0bb808b66d616526ec48e60f788 -d5051dfb52801b9d3ba318da1354dfcc13edb89536e9eb6216bf35a77a1f4b7e -5eca0840226eac5a9ca586ad811aad53a1938860af4fbf5fdf1af521c07ba519 -e2c2fa0dd7dbfc1153a5a77bda9d78b0ec5f28e832943ec8268a9fe453bbb53c -6a45a9e2f679126e323cf885ba754bcef56ff40bd992f0372bd85c303930be6f -14087eb0f5b26e5900f236d2a8895aa299e3b769767af33f88da11e5374eb32c -6f5cbc9cdd8b067abc22e26504fa960e4464803f95af1ad57b249f0826e3b092 -4a5508b46c8ac2eb5d113da479890a7be56a7a5a4896fb097e2374f2ac7d2e05 -ef4d4a31d8e9fae9a0df448f198cfb26ee8462dc01c448af7389076577d4814b -65fa2e4cd81d22d81db6ac028c2c0419cf6c6b0c8678e1c8bbeab1b89637fb5d -f04d600e7ea27f4768bb2200fea08e1872d2643cf36b7dc9a1d45425c2c330d2 -44dd92eb0631c87d8e6a275ce000dc7891a91f71a326d191c50c6426c7a5f677 -17a628260eabd753444083e6ff60c1a4257d97c6026a15efb19af06c73de3845 -878b618e10ecf189126b9c1f440b5114bf0d736226f86753da676fa34ea9958b -863e2f5e085ffcce7ba461ed3191701eafcace0c98abdd6ec4e5e37cdd1375a0 -cde67542bede694bea4bd5a92bcb296e6ff79e40f730490fb4ffa1c0b88e5d7d -cf6819b545612c1978c34ddd242ce9f05bd2de8c6bff8e79fb747035c89f0c1c -8bd4f55f14b6c510060105605dac0e571cfc02a8a580390292473b7b1705175d -33efe45867e7fbc9029106d0e66341ed9fa6ecdd6c8b4c50ce213a022a4d16f6 -adc0ef53f46870add3d7d1038523d8fff0b2443a58f087f910fe374b3181c982 -732b86c0e23bc8f9b657d5c49f4925868ece6e5257b6aa08f08b2df97380cc7f -d9c8e09d7b6886fe8adb6184751bb1a776b0f0b365dbca4d2e470a9f33c0e424 -318ce60407abf86c71cf2373e4226cc556491a91f4234f75d8a974a5b4c9748b -25e143d76d91150a4796b1f668e9d709b8d92c47173ca4323a5b1594c97409c1 -82a52797bf1f74a8cdebbe221e9d1868cfa963b57a28f27ced76ec79dad9eafa -c9dbc14b8a0542e93eb35bee947ea0c0fc373170406275d6f94483b5adbc3c48 -1d877a83805751d169c08a772f3dbab227d3ff467c9804ca7ccbf700a75ca77b -14f32e0fd063e6462ef94bec9bdb4e8a392db2d4e392a270e982b05cfd2dbe37 -02eaa1954bb92e0c74873c3e7b780e7ac3341635c5a48ab40a855052f1f769b5 -48b78ce8549bdc2d972b41b2ff8d4c188a6c6a3009b3cfbf20c9320c78b823cd -dd1b836a827ab16d2479c289f766029f35fe1fa278ee20c0c8bc21b02837a586 -2112128d04df3d2677260b123ff58fb1b7e6075f1aa0f6c7d56b9cb593ca07f1 -7e5ee7ca93720a395140b558549933bda0106ed4fb29284ea2b76eeddf0e1ca6 -89aa2a31f3a655c6886efc94ab37c6f2bd2cd81e351554ac3f569683ff1876da -ca0e0f2183c0613ff4266f9c4399f11dc9db5257a48f44ae2994dbce930db588 -46ba3d42b1e318a207645ee9b90ab34aa0ef3e113744471e5b827a90fb5f7717 -27f72758ca2e49aa0fbb427df80dbc2dca243e2d6c332d205fd8e8ccf4efb9dc -be143004845e09908024e4e59e8828f3108da8b9a590decc82e5f821cf3154c5 -319038719c08714b54082e645fe0baa6667f6ef885a19de9033e25f6f2274f77 -8e8fe9b9bf35e5b8186e9cc7ab124d0e49a8df2343922ce64f0f65a00a5ffd47 -9dcf079a301f59192a3b9f6115845ed1909643e3171ab6f105cedf73ef9652ac -c7f9c68b0b0fd090ea8bd3d3838af25fa3cefa1580faf0c50bffe0e964a12859 -e27e017bd84f8d89dd445f0afbf8da3a73904ca77d2b1ebfed76c96ec2f8a1ca -d38cd76b2343f3b3ffae2ce64de4a0e3dbd9f0e265807f731f6f01e1d61bedfc -f214ee2ab782eb6d3cf4746fbc372acea6153853b94f37f3f8771c5c01d46e1e -1d307cd73f2963313f46b0ece915298005a2e37a20e8b0da1eba7f0c06a7e2c8 -5bb8385b2034401837bf414b33e4cfe4c40f46efaeb4eb66d8c73c82798b4dd8 -ad3e231d2fd7ab77e3bbab8f4e7b15bb6c93f92139beae8b92fe3903aa35db17 -35cc096486740c95add2ee1c3acab366b335d361f39b441d0e22794696cb2a89 -279f434cf1ca1cc2263218f4084261de8635c0f87e38240a07f5a0b8706201d5 -e84cde169961dfa50d0aeb38a6606b76289c8234a918a37c766877fd4b254b55 -44b31946a76521b83b6175e892670905956aebb55876d19cbb009346b8f6f10f -a6a7a4c86da23716364edff21cfe7427d6bceae58e5fffe9e3ae92f3f88d9ef0 -786ec2ce0f1440cf0ab52ee2249d0eb924f20687e6716af698f8ab76f919d5c7 -4b4a860d28647c916c23421c50754d52749551e7349f72a5afdde899ae41a0a7 -074f2099a53d4403e3bebc0270bab5d191672b4fd9b24a3a32bd62c863ab113d -0c98bd274aeb746e8c592c72010af8b3806c86d1434113fd3a915e11bdfd4e3e -b975ee34dce95ef509c14f5cbc0ad0dc6b2eaccbfcea974baf685a369aaf802c -0df511bd0d2250813063525c128eef1a2ce9e0015937a9ab1d590a71587a9a7c -b75c6a13ab9072c934953e93ee05c36b99d54a765cb1b1062e5a312de7a5cb2c -092a5b06a9ac8914f57212df83432441a1eead79584163d3aaf35be581bacb6d -b70a2e42bc886f8bd7224c1e98dbd4fded0f293650901d03b9015b6a6f761978 -770bcb647758f87eac41a98633abeb13226e46171db24a7f0cb2f94e43cb7775 -e389dc2cc772f99b17f04dc1baecab2cbb77fd8810e1d818be0a22fc3e313d2d -462d439e45ba764422692d68b01e7e18fac49e91501607974c9c1cc61f2c9a67 -1cabd1ea8ce615786bfee65314b414fc14528e59befb56f4863056b4fc18bc21 -d61bb8c0984bc7c16b491267a7f80255249179c6f3378c9485514ac7c2c84f61 -00e5d81d362e49f278fafc1b6bf0aa9d76c98476a3e3635165d53a904dd6b699 -d6ca2e9cbcd609d11cc9373f4c1179891d2c370681c8010ec75ccf893b040b7a -a413663f8e262d4c054bca74f0c5fe40e24d57ef4994db6543bbd561f2b33504 -0356430cd25451126ec91f82bfc73ba6d843c07f304472aeecb7cdd660a34a2e -05c1e3c06be790aedb514288ec1e029bdcbcfc13689377be037674051972e96c -df6753b2e31da945b56c0a7316ed42adaf78a531d7412b3a26e33c3fb926446a -4a8abcd35799ef47481ac60948245280236668ae7df01f3cba2384dc88945c36 -7c9d70039f6adecabc5be2bfeaa8dfc69bc1d40b593140c974587905557c4a68 -71ff97652466fd44e8f18d31e9855bcb25640f15a398c257292c61ca77b752bd -aee91ff16e070da93ba5a9cb1d2e137fac8d78499b015ec2c3f8e38422c058b6 -8ced660fe0af345c9d4513983a7662a0c679236b9deca23879c983788e49b143 -67ce3f436353b3a86148ec21402c05a5e815ae1e375de539628557a8caa5af62 -7bc56019eb0c11f753193b3475c6512f1af8cd4032b4e13ceae3fa51c167a692 -01d054707f40b3cf7d7fbd23a6cd3b680d5c20e0181208d4b102e0f96841b6e7 -ec818a881bca226699ccf9587bac922a6b51b545d8222e9fec0fc90bb7b88496 -01a7c60dc2adcbcd798c8d3b67a6c4b6978388d83ee7f052e58d117c15067d4c -7e0c8bcc3064287cf2cf511ab902872592280b67295c0cfc7b1e51b3f8b71fda -b9e285f6f0de7030ce9b57e50df59fb2ad6ed36d423f7f2e148246e66d343396 -82ea928d4a3153a382a9638e9bac663b48e2d1f565ecf22d2a2eed624f3eb980 -444697474a2b983697ea5614c7a867d48363a1ddadf4efaedbdcf6306543d62a -4e2c4b153ea731c1e44b1f362870621b3f7b992c85fce0d4889b78b25d1a1a1e -c017613de16f6da6ccea3e6c0958d27aad413ef02097a1e379a965ccc3a75b04 -73dd0b82caf8ec8788d4bdd46665810855f8bac3daffb60ad8707c728fae783b -e9c8a8d34d949caa5122f37fea44063211379c4b88c5fdc06f451d1c06b1fb81 -3a25044a5f8d348b4eaabdbe4f9c1ca8943d2af204c41dddc2c1a2bbf979128b -665b9f84cdd35c82fe3fc9f7457513bf4a908c3bc2a0d917d8af2417ad776767 -9b8c7be588b373753077761f99fe50c8df8a8f85eff5e4fd53d36644b49e7cae -3f65634f6feb5838017ed45a4ca1dba9adc2d4c525d1f952090d31a49b8e2aee -6b45e0423385f52628d8e43e0cfe89d07640971455c629da5d938f551f8e60fd -03eb7fc642bcded570f8f592eab13c71ea7c9e833ca2d2d08c453f84b13fbdaf -7cdcd6383ff2c103fced1d16cc4d8a21d57a9e65d89f913f1a028250cc3226b7 -0fd0d223f4d715e233caa1aee5e9fe4ffaaea243b0e13c198bb8dc8af12fee06 -09be128117b9c7bc338f21434dbc92bba4f7034b062a3232f73132558ede0fb4 -5ef02c7bb6c146e4290f0d897ca4d72eb8d5312a9a5fbd0b1fb878aa3ac69c5c -3330a735239e9181ae7f29267cfb5249fbe39470d119ca8dc6e0ddc18d5c277d -b2f4a12cc489660685fd824e4db3a9053cd6fca133c94c75f8ac1485ca36045f -8ff8c6640b95d2eb5a7b0d4c5931ea75418c151157bd25f93e05cba374c43c38 -f04e4e89cd5cda0b60e1e5d4713396e2b553727a20bb76a33273bfa660ecfcee -2d3df3bce3c339a423fa84d97a637e3a3d99aa19ed8d6e5a68246ddb6d3d609d -7515cb0f19df665d9f5cefbdbb745a89d3d69887e5a0bb1b4e59f4c5bc0c1a03 -67568e924f8c50654474b48003c443652a2e7a32d5c1775e9b930cb0c99f1a3f -e6ed3e505ef02e231e9ba5a08c77571fb397b28df3f6334a59d62e87b9b73bb4 -8b3f911be84cbf41565870434642285ab575d94cf326ac39d601db42c83371ff -55b1f9d5471f81754a3ec6233b47f444e28c0f537d91d8d13f57be0b8cce06ad -f946dfcd3b272ddc13c3360225b79919f97bd2218313b06a80e4d76d899e17e8 -90a00622db00345e86a42f406a6f4185fda063e80b2f8b98b80bac88b400eb82 -12676ec8390a716d56e244320febf16f4ecb70e06caba17d7459801da82232ef -71c80a924edaacb29af50d26be34bde0c1554671f4b0153a40a8693790d3ad6a -5422eb65661cdca9379e47e813ddf9e1240cb259990bd8b92d96ae9576df599c -743168ff8f0c64c37e870e3ef25146a9231c46578ef77cc3464adf25ce35131d -640e067c5843d0d628a36b9f5fba003cf19d15ec0d693a8862685d46a30a18eb -7d66a20b365b258edc2e9d9a6b414ed0f1ac1894ecdd4bc2d707d88833a1e34e -a72389fc95d26ec2c10e8474bb00dc4200aae15adce11e1d8c4014d7e13c5c0b -6caef835ae542019f4ea14c7283fff973eaa8a310f40de4de0ff56807bd4c46d -c45523fc703fd8c6d08b32ee6e31943dcb52a47b30dad4d3d2a5cb4d647febff -ca269375f1cd0455dc0a81e1886a1dd4b78a9d30138e03517011550a22997fbc -4c6a833d32631d4a6cb9bfce3d8a98fc0393aca086a6bedc8ff833bb9c455e2d -1cfd953d3f4e60f06e8226c561ec5dc4994ed8745d934e231d95765a0809b952 -48e85d325ebf37d8084619d4de9cc4aec1204c9122b918279b1ab7e63d9eb477 -74654bfa2cc04b8ca5984e2ed6cf7358df124b5bd67b523c4785046780708e2d -982f3a7f3e6e266a5b3b72c1d9d13cd7d055a957d96015b11ac1e05dcd9fd6db -aa69fec04dfd90eda81bf71aa205d1587eb8d1ce5b97cf43f32bb9bb2a41ba55 -2fe72fbcf8573a998a4be2e870380d4f6cb4d086ce926c86db0e248b4e594d4a -e233bc13dbc6a55c5e7fc9c9ec994876cdc9795e0d3d0535f702f13c8cf64659 -b0248033530ea3b00295bc96240e3a41fd97a7e175b544242eaf7146a6d413fe -fd9d4c4bc1362f20a1678b8d6ab03d7a72d9cf8d79a9fedcf826274efea6ae0b -837eed3e717c09f713dd29b6ed9f5a6bd7ed0676b6dfea8c9c02a32fe56d704e -bf1271604acfc1ea301d86e270427c417baa917c5d6e8e24af0b352d4f6b419e -b63ac268e581a5aa86c7eeef14a718e33f4dfe5bf05a94675368e780b8f81ef5 -ade6d7647f4282ec319bf5991a09714594dd1854ba9c20d6b00ffab76e54f388 -a60780ec12af64779f2adc061dd71135447bca3daafcccfa6183fcc78522b533 -1f39f30e8750c0a3337a44766cc3f7f210c1a8e10f4ed1cc54d0729b26f1fefa -7367aee66b33e8dd0e78cbec4bee5a70ca809ac39f84b72f1d119e4353c2e4d6 -20c7f6383ab7129b62270e6f7e75a1648d1da0536e79d60787aa3149b96a284f -2ed1e0d2c9c4de7be5db53b35d360c1c6210362d4a35f91c6633daba2c2272ce -d87c53f85ca1b55002d4e8680cbef6bf500632752827c0a5f19a062bbad900c1 -11442036e66d360743faeb0636e1f31b554b6567e4540d07abd6e1ce39313277 -5029e890b63ab4708ad351725bccd79d75e49cdb612da57efe3b44a2e7870e67 -a5d9686eef4b57c2a17f2d83cecdeb54914610e5a3401a97050fa517f1662297 -e06d29442d0fd89ba10f21584e71eb8bd5b03fbd56f5a538f72c9cc8ba5da11d -9e4a7f8d9dc2fe56f2976d3e6bfc901de356a3d0690a0aa715ec6d339d72061a -530bfb5323a8d038b8ad3adae140668e505bd100bdb20b98371228b841d0873e -832309912ac7e9d4c7ee9ce81285c7f8e9afa8e2077e635bb36167c9e9c6153b -c73fe799800c39fe343d70e38f30a721cf2796839096add3c82b675f0b659f6c -99441f9352a332065c9df5b419a020d9b2fff06efd3295250d5335f7a256ef97 -992005ea2fd03f408a7a923ad8afbc8224daa112e8e4faf2ca974af2cafa92d3 -d5e9fc80b0bb00d933f50ab9010d671751b3a12196919e073678c2b047435a8b -b826809e33bea0f12379ab1a0392d37f27766ccf15b3648e574e7dd1aff8295d -df3db858bc078153072770fbe45196c3107a12df7f48d7bb6e4b99cd3553e01d -59bc130f7877b18b65b15ea50db1146c8ffb2da5180b603d920c099d15aa9533 -b594791c144a3822f337abcba4d33d36299bbcd94190f85e0c28f4fd51f9cbb8 -9d301eb3f41179389b4e3323bc407c1ab223ba1608a5f8cea8d08a13dc4fc307 -2f93d59a3c8b32cf0721dd80c369e4f590d6fca9930d4ff110611d755b5fafd9 -9645e29003540c72f70f1ba5b1a884d1938f77ad689e6e70afa7216f31988919 -86df34a1089f9a009926b8983b05663bebbc603d90ed348ec33afc5a549af5db -86b90fd34f534b24234f229409f960e2e921575cf45520f2d651c62bce7ab637 -6c2fcc99345aa8880a8cb7a67c54ca398cd61ad14162c9561ed8e4e9737aa9e6 -b513003edb220ac92894ab112e100509608504afe0fcf85b7bef8000adb3afa0 -3f85f52b856c23a68f58bc28a601e5430ae318ffafc24975eec7836b147a5a50 -d0369b90f111aeac20b4db1abe66c32bf4231006d79ef4c303e7aefeca4cd5b3 -00b6900a26b2b9d98da2809a9135dc6e16644dc932f106b016fa02730f1d6dc2 -b1c9e10b610f2bd769fc071e06ee636ef566bfc05899c740bf3ba380cd7164da -7fa355324aab667f33fe518cdb19060cf3fae8a0363e4460a6c2c9b70bf39054 -b2d3eb81093b0610cb03e2e7180523561cb05761b5ca8cbaaf5a35f7179b1d4c -18d0b7eedde1634f120fc0f6134e55a6de259aee6d440444e0ef0fb7db8a9c63 -95f3200e5d40b854ea844860529d1b694585b8826d988f432be1f620629691ae -f282e79b2874754f96c4a4a1155c2ea07450c2a256b9d8e33eee33c232c99860 -1e34dbb63812ca08aff99255ae6def9dc3ee2789e9bc1d956de9fb255bd51d5b -09da88ffc9d8744f61e002da68f41aab3afd0314ef876318c8785f87b04dfbcc -bcf681dc8a0d615e24ce8f6322705a59a0824b5d1f0d35c7b04062d13f5cce04 -7885cf30dada61ba4cda74df52c4d4afa32206ca799ff9e9ba2bf939deaad2fb -5b14cff0283dcb41869cfbab91eed9065d69a6ddc91cb241634df75a81fcb4f1 -490bf1195ff98db50e9fc3c82f10d91968259bb1b07645881c274d7751e5c2d9 -40e9e8a23de33344c3e15b8c0a3801cf73eb1dc8e9df066e7ec61667ed349f0f -45ba6b0832143d4e6e7901d4ab7b461ea6489f419b59ef6fa892663b01a222e2 -7bc2f4cbc81b1982f595dd2cc94d6388312cbb61ff2bfecd27b1220dec43e9ac -143a83b5a63c057e2ae6393054710b5d616316ed94db2e6698c4c1ddeab6d9ee -2444408d659c7b68d4cf5c294dfd4299507c41190068c3905bce2425f652c49b -de244eb94d28d3d5297e9a11adaa7c9a9138f00659f2f4a42fa34db8b8e29246 -15ebbafefcdc538911625e0e0e9ac8eca76662bf295c8fc2f871fd9aab87ef3a -3a7b293875328e89d018f40c760006fba666b8c1aec0c64231793e22825df5da -923979c72db39f5541e7f489fb5d9510674e8be697a1aa7a0249dac954fbad79 -06d11031ce4605ea491e9920524f4a60ae55c85371fcc9f046c1b83bf3e5812e -2a2f06cd724c777d2238fc465bb016e8a78ce7c86808698a852d474b63c811f5 -43591f5d8391fe4a4d2dc3abc5005757a17922b6eb0be4b9c238fd162f9224e7 -475456f639c59a26c8c6107ec20330c8724d6f6842edf3875cd0f87dc434ee65 -421155bbf5226c31de48374d426bf3f3d07b9bd718ec54f8eb9a6f88a9de594f -ec2c9d4b2b32827fedec8078a6851bbd269993b246b0c902242f0c7ea422d799 -65338a2ed8a27e49a0be708911bff10f485b753574d8ac8313caeab496e0ccd9 -5b67f10cc0c074ca7613d05a67bd45df6b72f6e30eaba836812c91a2a0a4bd42 -2141d7443ab359be588901f46a22d52fcddf6bc04e1fb006a32d37dda270565a -575354b40af0869c9b1f8a85696326f546e9a25417b38b9b5d972bd0d933226b -f8b34f70b324255750f5a64c85318907900c3320f070b1f789620e4f5db6f37d -461f4a2f15e884b948327d53420dadcc4b073b37ee4fe935c8f520d9828ee209 -976fd2c26c71e3bad6583784ffd61a2f419981d51592a6f8f47b4718b6736a2a -1ed7f729a521155a39394d038c34d8a76e9c6f91ca369da29fed83edfc05a219 -853e5ebaf1f3d5c6ec932e69b7a0dc19d248f81cf541348c85853acbb8334b12 -26ce33140f3965db1a6f79ae0abb24b93b6916496b1698057d4c2d4a6a72305c -11b731a8a07ff1eecb84fb6e3f3c3706b09a0cef4b1c2012bb9278b76f5189a9 -38d5b9fdd4cb9028f43d16dd39fbbd10a684582951236a05e0692bd1c139742d -7e75a21cf14fe99d51dcf0a0b71b267a0ad42b8c1d7f46ba46972c8ba7bdf849 -15fa6c5a922dc93fbaa9fc50c7696494e6c372f3467695da5a6d7eb87c0437da -d7b68ee36874203d741e373e931425d4ce521b2728633a25dbb435f963399f37 -8d0adde8345439cc5295ba3d255a72039ddb1592dce1ea47a92d7b641182d0c6 -85d0616a85361c3b78bede0190834c1de0d4d132f459d8f29586dc73f974dcd0 -5def570984a9c2bc5a720999111c7de6a28dc0c6e9c51f82d8c55a26ff5ed760 -4337606960f847382671bb144d5ae5032c74e0581b19b21eea8ce4529eb792c1 -044418fb0e3da356a5b33cd97a0dce15ee9279b076405e23683f68c63b6b09fe -c3ce3e1b30a4cb3a1e72455a372b6eccc7e4c97336df45d0bdf94aea01a108fa -f28d98d7bacd750c7c25874e0fe3fe20d8e1d51043eca67c546278dc13716d9e -f81a8fe2945a6a49c82b653804d54f626238396d8e4a9bdec4946c365d1164e2 -fed12929b769cb13712ad61c764d31798a87a3e12e1502cab14ca07efb524ca3 -dc31cf17f73feace77494de837790d812dabd36cf4c78123cf76b504886d0cae -13fc6757bb6878f792a86d52d0e90913d089d7c81faefc56dfdbc3acc2195981 -0728dffd98a2254e39eebfb51742657ac9088cf8adc21208f3a333a1f45beafd -69ae647754161c6bf0a76800edcfb6a2339f03e4b5ba4308b924ca56344770ea -1c7322f692c297794b03f3c2a180b645ebf850afb290465ba050ebb9c8298f2e -50b75571a15a599650a7fb1fde8263e49a68773b5184c30da3fe59a7c75943ae -c5d26594361b53c26162410d3a1bced7c1cd0053390c1e2f8848e6aeaf75319b -7ac5654a16cb93832bf981b9d54aebb8daecf97894b560ea75f51bb39a2bdc9f -f59d01321b51b23a10827e1845e2db316d86d7dce368313f99ce7cab2a8e7c50 -8f91f0faf03626ff87247ba86dc7f3d837020e6aa83921385df0f401e4084237 -95251c27e8944749aa33b0b697456453ad8a5be8324fd22b192adcb22e03c74e -6a3c9e6f7e452ca491db52e6b18016592cb09955f05365ec73300dc3e179c32a -d08a443de2753d56f0c968db00d9cd58f1af7e3811202398bd58a337e7ddfd84 -1c8c8efd21aac90582130416d261f3a1b9f36ca431c8d4efceb9eee03d680165 -70ac1f37a1698c0b4da94cfd4c57ff54edc1b25fb713177fbf209928a1272cbc -25655632d43e6d14c052763452d51cfaa32c8df47c57112ed37ed239f8c00268 -c78d7f3a0a965fd9e3f3c1aef2dcdf74f663a72b15fa09d7309f2d15b232efcd -baed8a66f17b0dd190081a95a5619684a184603491a32114a5ef2c5076caddef -0b4eb2197fd59ecacc6416398da20414cdb6a9a3e9ead646c34ae4ace4cd57e4 -430cf5bf55ae076419c0b79095d903753ad7f46dcc1b93f782127d33a309f245 -33484156f9ffcbf9e841d0c71ab0b12594cb2c327112508593573cbd95d75739 -f4ed866beaa48bcfe3599f62b0a848d6f63fbf79937966f3a0ee4c6163ed16f0 -4b8bd51ba483da59fd1d719499ea3aa49fe4917e10e2da13301b0a8b50f3841b -6e80904dec24e5428b97ec17e66889170d12a27c028cfac9adb2eef49815f433 -b6089c9d6ef39f058f0cc655b27f4241ac74993af39e1fc17d5f9e27c569ade9 -ffdf46027fdd633bec61d8c5fe318810180f4437f356001633e14e098c992da7 -52f392cdb417d2bd30698612dd7b2ac00d0e5b4b3d7a20b99d0858d5e744d4af -bc9acac37005c3841103a6ffdf3192ff85ed425dd221e4bd71ca3db6a739c7fb -9602c130a1cbfb5b9bb9342099c2f60497642ed1029e5f9308a5097d6f33c815 -0f9a31a988ab5c162e5aa56357c8186ec5914533aede037fa99820ec322c8fcf -1ae1a6aa6e048c99d2af1b96ee8b313ca0453923f5fa095aff28e7cf79c4be83 -70058ec3619ae4eb31fae28947355290e967453cf351ecd976ad1c5da7573f0a -ddadb5b6661c47a0dc3dd22d7c175f9391bb9e359bfec4eb2b687a5a6f2fc8e2 -3ab232c34a95f54cf924fdf8011148145466799cd44a8440a0ac99b7f119e470 -a7fdcf6ff7a57a588f407de565b6a45e7fd5a1925efa770209110c54af8815ea -ac1af9a0b5a790f6df301f7f9a105e776ba30e2b56d1dc2c0811990c8d2a0d59 -d733ee5bb53fe30323632057131ba4ad1d49cadad65d386ccd7a2c70bccc068e -e881a538aa3471ea3b66ae24127dcaadbcb01a9abc8df00353c568aab8a971f8 -fe42a15ae22fcba141317584119f38d44e479a0d230273fb235a7895972f3f12 -c9964d1fff7ae88b9d39bd0c948a5ecbb2d858a26c01d57f3ae91ecca2475bad -2d9c5d8053119644ee9ac5c3448c412b9fa18b8c5cd666b58714124c3c1f7d24 -62b31fe9605544652c1b62a4c16c03876977228b7808919fd49da8c14e12971f -bf157f70c41e54927f569a8ded69e9ac4af29fc679a278a7c6b0b1a605bc8f3d -d28c0da975292d88fb0b27a12c56ebb71bd93802ed8634e6615f92622e598726 -f1964331f9f3353638adfc0b3ae281842a8ab707b753f94cdc80a4133dc2fa76 -0e723c34a5962c79901e1c3be3644d926abf5a71cd581c2753042a0264fc5a5e -f6196bbfbfc152730227798be62643e38c512d889e61b5123e58c173ae6cb8ea -1f3c5358d9ee649afaa3c0fa0efc9d018be248b664f9b16ff484989e0ed8a199 -85abe77acc50b0da312164a738dd0b0f8156eb2b18b9c18ad7c08ad8b61de543 -84d1f5ea363354272e3d937a2f770a74d30910f195d337780b3b65791a0546ab -18a8ad95353637c276b4fba66000886be4c478fdf68bdeab674527bbb86d75f5 -f05702581626ac0e693f73f08005b929bc154a5cb26f1c1447a34cf441aec12c -e061d5c75dabf9b6055131b7e27edfa1197492525b8ecb98a74753f10324b4be -61c87eed22b31f59c4fc0a434df9d34e3ef204268df01fe50866c937fdd83de8 -be67591219361b44441676d4e24fbffdf0fe6ffc1246c94de5de84d0e2ce54f6 -4001a4d5056dddaf20dab145f59405e14629138ce2aef7f7df4c3ac3c34c8270 -0195c65a7e6770d2e8211b5d6ee9ee826c316acd3063c634114d96b68f9e7be6 -d6f09e1004eb05a1b8d5b8602e7dcc4e9942a1a07cbce0515a5f651df70bd369 -31149d9d07e155b69fb7aa2ee350c52fec11cd82b0bd41dbe5af51b22a0d1aa2 -42bb655f8bc0cf68708f4891d0152ea90a8ace90fabedb75807baefc45b6fdbc -ce98089dbe4004fb84cf3ca808b355a401bfb7cb0bdf3d34c56920ea7c9fd810 -1022917883c46cea4f9c53a1b735206870f51b55f688da9c8569dea21b033a7d -26739a6dc374059371d7f0e4f1369f24abac48e2bd6c37033106921804790ef9 -8cd1e8b8e954dda81ce530dfd6b96e68e9e65f68893704d4e1d462e7fcb38be8 -9687baab78161f5e6957db5340f62b08b6a15b34574f8e66a0e3ef88db94a571 -2d01ac0f7b3971c994b8c4867c26294e63e18b06748cdf7067f521acdd28f928 -efd5ba043ff030c24f8dd60f472c254442493e4d5ba92cf85023881b5a222ec6 -5a37ebd19b3cf67310f5fb521ac4f8434ee8e998339f7fed4cb830c5f84198e9 -c5ca9e7347186fd6dc622118c624b6c5ec9554641de66beff929d05364b9ff44 -dd342e36818f8af5a81208e7d92eb91647f1b68e4bfbe708c0ea70e90a1bc7fb -7fe7d3d81f207dcf44c20fe86ea34cebd111b7c5cf7e0c4ace99eef31ebf1160 -ac50564b361d8d039b8f622e3c4d6e85474d232bceeab726bf66b307ce147c32 -b1351681a3b6be40d13fd8da37cb71bd787b78a922f3e9f70969a716a76c2c1e -fb6c315bb455ecc8d2475b1e61aea14f788f235f8b5a7cf987b78910b2da28d5 -288a7fdc879b66f78d5aaaed5293a17a1d96d0715e2d0006feb9a9d7e4837fb3 -91f3ff93e02ccee1ddb2b47716abca344666c1573ee338bcf35d7956b9cc82ce -5083ef6d3155e28f8755aa7f8dc6dde81dce8c37736e78b97c4459be3b471336 -5b93671811cc5a397a4a943b1a82f712a7526d9010fd07514856505621d5d667 -68820a69f5ea83b0d810ab8ed4e5c9acdd54d4c19f958add35d3d21f7089ddae -f69e4fddb831a94cc51f7be19410c5c6f3b0ae57026c4a2ff33bc8f91afa9844 -abf3f6ce -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark diff --git a/client/nfsexport/lib/fonts/fixed_120_50.qpf b/client/nfsexport/lib/fonts/fixed_120_50.qpf deleted file mode 100755 index 95b60804..00000000 Binary files a/client/nfsexport/lib/fonts/fixed_120_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/fixed_70_50.qpf b/client/nfsexport/lib/fonts/fixed_70_50.qpf deleted file mode 100755 index 76e5919d..00000000 Binary files a/client/nfsexport/lib/fonts/fixed_70_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_100_50.qpf b/client/nfsexport/lib/fonts/helvetica_100_50.qpf deleted file mode 100755 index 5b407e6a..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_100_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_100_50i.qpf b/client/nfsexport/lib/fonts/helvetica_100_50i.qpf deleted file mode 100755 index ac7c6963..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_100_50i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_100_75.qpf b/client/nfsexport/lib/fonts/helvetica_100_75.qpf deleted file mode 100755 index a1ddae00..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_100_75.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_100_75i.qpf b/client/nfsexport/lib/fonts/helvetica_100_75i.qpf deleted file mode 100755 index 8bd9d1a3..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_100_75i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_120_50.qpf b/client/nfsexport/lib/fonts/helvetica_120_50.qpf deleted file mode 100755 index f7b8484a..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_120_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_120_50i.qpf b/client/nfsexport/lib/fonts/helvetica_120_50i.qpf deleted file mode 100755 index c7968286..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_120_50i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_120_75.qpf b/client/nfsexport/lib/fonts/helvetica_120_75.qpf deleted file mode 100755 index 14c1904c..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_120_75.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_120_75i.qpf b/client/nfsexport/lib/fonts/helvetica_120_75i.qpf deleted file mode 100755 index 2078f49c..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_120_75i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_140_50.qpf b/client/nfsexport/lib/fonts/helvetica_140_50.qpf deleted file mode 100755 index daf1e0f9..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_140_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_140_50i.qpf b/client/nfsexport/lib/fonts/helvetica_140_50i.qpf deleted file mode 100755 index 002ac3ff..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_140_50i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_140_75.qpf b/client/nfsexport/lib/fonts/helvetica_140_75.qpf deleted file mode 100755 index c75d848b..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_140_75.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_140_75i.qpf b/client/nfsexport/lib/fonts/helvetica_140_75i.qpf deleted file mode 100755 index 81ef8ec9..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_140_75i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_180_50.qpf b/client/nfsexport/lib/fonts/helvetica_180_50.qpf deleted file mode 100755 index 23900221..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_180_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_180_50i.qpf b/client/nfsexport/lib/fonts/helvetica_180_50i.qpf deleted file mode 100755 index b2d32da5..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_180_50i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_180_75.qpf b/client/nfsexport/lib/fonts/helvetica_180_75.qpf deleted file mode 100755 index b3a5f204..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_180_75.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_180_75i.qpf b/client/nfsexport/lib/fonts/helvetica_180_75i.qpf deleted file mode 100755 index 4beaf00d..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_180_75i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_240_50.qpf b/client/nfsexport/lib/fonts/helvetica_240_50.qpf deleted file mode 100755 index a703e96f..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_240_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_240_50i.qpf b/client/nfsexport/lib/fonts/helvetica_240_50i.qpf deleted file mode 100755 index 75ec4eca..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_240_50i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_240_75.qpf b/client/nfsexport/lib/fonts/helvetica_240_75.qpf deleted file mode 100755 index ca900141..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_240_75.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_240_75i.qpf b/client/nfsexport/lib/fonts/helvetica_240_75i.qpf deleted file mode 100755 index 9584de84..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_240_75i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_80_50.qpf b/client/nfsexport/lib/fonts/helvetica_80_50.qpf deleted file mode 100755 index 149db404..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_80_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_80_50i.qpf b/client/nfsexport/lib/fonts/helvetica_80_50i.qpf deleted file mode 100755 index 007d1d83..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_80_50i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_80_75.qpf b/client/nfsexport/lib/fonts/helvetica_80_75.qpf deleted file mode 100755 index 42930660..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_80_75.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/helvetica_80_75i.qpf b/client/nfsexport/lib/fonts/helvetica_80_75i.qpf deleted file mode 100755 index e1929258..00000000 Binary files a/client/nfsexport/lib/fonts/helvetica_80_75i.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/japanese_230_50.qpf b/client/nfsexport/lib/fonts/japanese_230_50.qpf deleted file mode 100755 index 5bf076f7..00000000 Binary files a/client/nfsexport/lib/fonts/japanese_230_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/l047013t.pfa b/client/nfsexport/lib/fonts/l047013t.pfa deleted file mode 100755 index 475bdeb0..00000000 --- a/client/nfsexport/lib/fonts/l047013t.pfa +++ /dev/null @@ -1,1346 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiMono 1.2 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.2) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Mono Regular) readonly def -/FamilyName (Luxi Mono) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch true def -/UnderlinePosition -88 def -/UnderlineThickness 83 def -end readonly def -/FontName /LuxiMono def -/PaintType 0 def -/WMode 0 def -/FontBBox {0 -211 600 993} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078983 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83BF47CFE01E54AE843C1 -FF919109F85F08DC15086C2613CD4932FFC3BBCF951312D7AC8EB70626A8256D -9CB48AE151BA7EBA556B7FC8966221E8114D04E16C2D41159D816F0736665744 -C5AA840A8C9E4A697E288564BABF9F22155139A91877825F56BC44047FC0057C -78C5CD71D7859D99CAD461A73C7871F7161E71EF00E7DF6D787AD0209C092AC4 -FEB4AE0EDF2141C62D4C5120EC43941E32433D8D3EDB02539B98433D8D9CA45F -6AA67D383551729AEF5E277B8CFC1BF612583912EFA2A3EB1C1490696E3B5B64 -987F7129C7F195446A898B0405208E0943FEBF10E74DC40EA182198E60E9BE5A -785D6DF540CF0AE65F2EF925FD27DE63269160F358AFA6CEC1C121F1EE2BE18C -DC1237C59283BE1B774EFB9863BEDEAD8229E459BC6E2DAE03EAA3083214E847 -AA01F76B67C91AC84CF459139DC819E0575C04BEEF896208B91E6A6CE8AE784C -E77246F7BC68A2A4B4F642AC3AB4748E352DE8555F5907B36C1668ACA42182D0 -E9FC1C228F7BB63F6B041C2DD08180D1AED8C25B136D007C6DB9E11C2367F0B9 -CAC27A34AE8EB2981315AA94AE8377875C50BD43DDB93A2DF261456B4B945340 -C81C790B5EDE5C3828C55E244DA6257D05D0D2C3274A35FCF96C19BF666B8C45 -1982729FD8C9E61FD1F81A4A346902E511732F09CFEDB4D88AA555E15C05F19E -2CA7BB2294D9079A9182D8970ED7153C9D262F6203290D693744F86EE55CF4BA -2F11579C681D25B9FA91255884C9A5050A15728E11348EE5EB4F370749C3D27A -D6A686868DCF0E327FBFFB45EFA735CE9AE0367E6A239B85FD751BE92E2C7D8A -618A08110FDFB48272337AEBA86F992A033663B0DEF168DA75BADB4071110941 -7320C0990BCA84EF516AD34E5AE14FADF3E3E44EAD46613423069D24BFE0E28D -DB6D32D0001738AE534BC2BE240BB5BFAD1489CC2B2F6621449936C68786A51C -02E8C179B643E401D01BE6849BFC89E896B1C3356DD9E8FCB69691AAF6BEBA04 -24D62B9F266D560B4089E20A9F35AD4A7F65A7183761ABBEE0F7EF26ED3565A2 -5516A3A5A57143979A1EEED8CD52A69E4E1AE4795F3EE0CA21B9F4D166783A9A -F54B08B6C56703932A310197E328C6E6A6BADAA11D66A952964F31FD690082FA -02D1E2A4512A9F274233B203FB770A3A1C7490ED630D0FAEB3066429D00302A9 -5B07D8F628F1EF4E3F45B5AFC9638A46BF1286E21A7463ADF8D870CF36728FC8 -3FED84B967CE31C5F19D9E36E707907AB3946AA1DDE97A87CF71BFAF25A904BF -9D15DA7739FAB55835A8B8AED166F2445E020BABCBC2A84B0A20C8CD2778BC3E -074CF498E454F752CE7412BAC70A04CCB4C093854AC72F28F0ED22066816568D -2B61F311C2EE3444CCE402A461CA0118CB6328C7A8FB765C4A008B5DA5AB9916 -AF83CC04157B769C659A794A7C3EF8149211C0EC2E81A2FDACC6E6C2C0271987 -E8C47DDCD84E8AA3BB0889764042EFC8249E0FD10586BBA5E3C7D5394C3C2FF1 -D482A67514026A4D65B094DB94C4A8872BE1FF437E983F6F2E8B336EEA6FCEC7 -5ED6683A41C9CE6E70671A63F4BDBE846CE41857FDACE3327FF35AAADE4C338D -528224A55C4504C2CE5A774EE32DE11CA3FBFAD628A915FE452B0B40F774AD1F -099860E44D875F4DA0C71B9E586A7D4B8AAA9B7D8225CBADC7C069C46B465BB0 -3F558588B9A6F0330D353A8025B39BFE5ECD63F6A6DAD23A1034B09F44BE2CFB -F7D974BFFABD8E22DB54CFC0CF46203ED59D7E257E07531D818752BE3E059D0C -453666701360B64A0E687F8B6B06234CEC96F09671999B301174E74945BE4726 -3CF6B35E73461E18DB1598541CD4903EE143F0FF8411858E57956DB86364104D -369FA26A999BE77F55F821932BE8C1F6995ECE359BEC8CA7232E70C3E17F0DAF -4983A7A210F2585266B9AF3C044D70B536630411908DE81B688DFCAF9322E09F -F0977B628FA31D986C1A66D0F4A6E8A2D7376C6C60099E31F0AEA56CC42E30FD -DF24FEA95C859905D140824AEB9FFE0A7791C50B22E8E158989FAE39A43D14E1 -BD1617E8F13FDE3BDD86015BEC64003E1D634F3DB00520FF465705B55C18F64A -695739ADE2508BB69D539CAB9101F955D15BA475043848600BBCB00FE0A2A53C -C5B5C98B2B0996D3DCAE394BDB1284A6B716D23AD0714E05AD6F4C749DFE7351 -A9DA7F1EE6A630FEAA7ED2BADBD4779E7715B866EF5CD6D17A79674F3F185A19 -EC9BC0480AE6FBD2DD06F3DB4D234F938A4FB5F61FCD5E23B151E89B610556CD -C649D036DA38897E2603E9E2A5E16116D8484A0D810FABD973AB649646769A11 -534B6C8AD5CA5BC5A38D4236DE32F33F47132143AF460828E7AA912911E899A0 -1F3C85D501D3C8136AF692B3832412113F57F5B498D06E8BC475D6FFD7DBD416 -5033544CC77111B564F7B21465B2BC0429162BA4FD49C7A7A7A36F646BCDECB5 -01E63158A6DB744B925977154927F97628D61221A64F6DF5FD63771F4A76A4ED -D0CBF03C2AEBE2B364298D7D8A4089EAAA7DF9CD4D0632E38525D0E59F037188 -BA436DEBB3D050B7D214B21AD842DE28E6D46D273F6413FB2B9A508639FC3EAE -21B2F659568474C617900CEFBB5243D7496F73E0EE7F4A3A0343746E7B189A7A -B1B3974DEE82543797BBB3D093DABCEF39C27CE8AB728CC971CEEFB76A24EDCA -564A31C80052563EA4E9F5308F070FC807CA062E26F2D72AF06069F50B1EF911 -97C8873EBACD1D974C8BD85D586DDE8E621F41648BB24DFC3BACD74FAB79EE9E -1DBE30BA8C1671125E5940927893B2790F7760631A34DBE6CD348E5605B5CEB9 -ACF9EF7A627CBA5DB5E899BD414506329E46F0B9848F730E36553F2A35AE992D -42D7AE4DA66E75CDD23CAD56D4C51176924D5BE94C2A974BB46E1058454FDF5C -7EBDA1632EDD353FFFF7525193286A9AF6145E102979CFEE99D9FB3CB1FC2EB2 -570476B11EA9A19A434801D58F4318D8414439922D89E568D6E83A57FD76802D -C0D30431821B145BBFD0126F2AB0161F103DC8F2A874238870740AD3B8954262 -55475C3BC6B1EC0E77BA8B1CBB176A8959AAF99A2969C4E0A3214D0627D7CE92 -A0D7EFE8E39CD42CC31263968ABDD978F3108C8D2F70B6E386198088209826E9 -6C31F1325BBFF8FD0E4A59327049FDA978C9CDE7D79E565E1BBEC909F8EBB12C -6BF8505890855BBBFCEE7265519875954B9F44FB1A024C28A734BA1A03AF3A3A -64CD95D8884B321A43F1041E38FCE81A6B2563C2CBADB04F4036B0208B863FA6 -9E88D301B364AF0F99CA28E1D023539158B7CCC48D092CBE1167817B113436B0 -7AC9BD5B0382F02EB8C8BF99E2F463994CC60A09BEA9A64E8D2CBD966140F4AB -F361D62845F72FAB9A107059C96E70DC1E2469EEDA1FAE3982A64BC300C9E81E -A98B34D8DAEF36B9E1F55E3F5697EF6F029E650D480D210014C8F18647EC2356 -8EDE0B22E54524F04BE37DF85FA61E3377A08E57E03B14554FDB1B40F07F2E86 -259E818A7732150B01A71181EA18AF4032E1BEE9A4532B26B9C8C063396DB817 -1A1E25A731C10F8B31A84393E9ECB4F279C884C29A5E596E08D144D081C4B7D8 -CF46E43E35EF09F56892E322D345FB7BCBDC665FFC924AD4EC638AF0959D931D -33A54E0062C68EC1852047D73E8715D5A6E11F62837DFCE1617608CDE2C753BC -B1CE0C4C1B151CF1FF1A4830F7484B8B1134617F6B1B60CD54B3623E518CBCF2 -95C49DD546E783F884D38B86022865E8B57139637516EFAB9DC8043A4A8EE1BE -623EDD5DAF585F5F3A9EB96E6A51C18E0B3793AA94B6301C3473C58B11B9322E -F90BFE890466EB6EC6A1138CD2AE2398EB1AB8749FADD587C711E18AB171A149 -D262A8EA2A462C4B0AD1A00C53F7C3D3D1C9CE8FBB95A7653113D387ED03573C -6AE045A7190E794571972FD93DBB5BB1475EB2F946795C131C1572F187F1E6DD -438DC64EC74AFB6B730830D835642F1456E76C3327850B745C38ABADF4E742EC -17B3293D8C64E041EDC5750FF5552C333DF29FF5AAEF6214463FCC682254BAAE -84C0C71D4ECBF232AC4A4DC563C819BF966C37993F2754077385DDEFCE85C532 -95B2F6FAC17A557DA24669B61997BE8D589CF50BA27FEDD9E76A19A96D1D48EE -4A4D2905E97F89E6C08F25172E511F66E04233648C85F00F219DB234C3FF33C1 -3A75ACEDA696AD9D778666C706246428F6B0BB75F812A4C16A689C9733B0D105 -71F948225DE8A512B7B94298D38555F9486E4496389426C896BDA10B71A25D12 -E984AF2EC3F78613269F85BBC185013872B1572A799506137E9A6A271683B7C5 -4590BC0FAC02DE3E0C9AED49C5CA0E26507DF36C2574C1FF73BFCEBCD4597632 -810D07BA9A666A07A099C06E0639283F42E7EFB3FF8DC79F7B2962967107F5CE -41CF3EAA45B092F2BC433BADAF57E390D5995B69F1E7806BCE13834433C891F3 -80694297260788AA2EBC3A0910CAD32B7E0B3E5101B5164BA8B0259B7DADFE9F -84A7C5DC8DB864471CB666F4148991C3530535DD7C086CCC09A768B22937D0DD -E18B1EE12E1DE6AE83F6FB9E1FB217B1D9BC2B4F8A01907A80DBB16A496B2B7B -3A00BF5CBD2BABFE145E5E49AF9C3398605DF0589EC2438A167DD38B46D52340 -2EF47C0644CE0258457F0D24FA19676191AE2540D4C98C6764B00D6917F62C01 -276D9E04BDC21E83A59CBFC7C6C252233BFD5C0C96A004B217B1E78436EB81F4 -FC2F82B70B19EAC733BB0E5B3352E4293717DFE2DE360EF780567D255AAFACC8 -432774772791DDC2BA4C250CF314D53DB0D8DB88F2B624AF4337C19F36D5557E -8CDE1B8703A5F1103BEF1E83A8327F7DEF9431953A9C814D067EA660252BD0C3 -BD0423DA5EDA7EE5AAEACD32ADB758D3697110DC41B6F67CC19F7435BB9EDE00 -51B5D7D941F01872ED0EDBD0E012DB3715BA84F06AD9A7CB13221290ECC5D98C -167209DB56A38C8961533D3CE2897063DC915F84BDA4095703477FEAF6720F09 -A70F352C574CBB342C3E69EE05242DBFF4BC8B673216206B6BFBC5FDC3F79216 -F44F8E2AADC0172794192CB17A696979CD4F7264268D1CABF9F8464AE0DF3FE9 -A8729F8B6AA0B493CE015BF1BD950E9D89FD9473215AD7513157CB46BD410FB4 -E130B2CAC097335F9C546FC6F678A0C8351A9424E981F316D7452846DDA58384 -5ED585947C87D1E1271E7ADB72085C960D9BBD3BDE3321BEE52132A62A57466A -F6BF8B639C9E5B3E57461ED4671283236D09F7C26F35EFB6D363417E24684C83 -C758B9AC5FBF012EEA6E69F5CAB55BFDA10B062E6D439FFCA550E7BAA1019636 -C5113FE61ABFF64F29118024063A4359D114E21D80190E293B80AB32BDBA340B -065DACA9553BC4C0F1FEB1F16E073937B11413C5599C058579543DD1A350F69C -0C66EF2D800F790222CFA1AC0745652238BC471FD4DED46ADA6226BD83089FE1 -91C7909A2FE12F5F4FB0D41341FF86465D4539A227E782E1FFB9652E853F65D3 -04D9203D4C9A93ACF81DD54FE0A4ADF2E839C997FC49927B92A99616BD77CEF9 -C77266204AF4219EA4D4EF5D974D4993EBD3FFDFF0B5D7AB0CF13279577C58DE -726476A0C291CB406A8D5DB1A631D404FA202AFD525B54041EE4FCF4DD94B326 -40511F36C2958FDB83DFBC22D6CFECF5415FEAC44C6529AAFE85212E9F030844 -DE707696B057D6AC50EF053F5BD88DDDB9552CD9F42AE29CFEA52065F06AE1BC -3F1D7B12B2346AB2EBB9024294ECD82B148D17D1CACED60D2BD5EC91447CFA12 -9479FBFB279ABDBF2FAA8760A54708E65EE4B3CBE671447A8DDFE9C51881A47A -83D5DF96FEE8EABCE230209E6A5208D1FB109D1B49BD2E9278C6603FA82DC102 -CAA038525870995634541931A77177BBF80BCFE9C12EC321FBCEFB916653F349 -244B6DA93CE590D48C6DC0D673299A47621E8397E0BCB164ED6D4CD605570CD0 -AF46D0FDD920181A58A1F2236D7AE126F07723445AA36179531633F8647F88D6 -3494299041A1B7818A7B62B8B8783B97E7C8F5FA7E65987EEE8C87DF23C0B09D -8E84BEA5B8613F0C144EE32E58C837B0A2037F51B467083EC9FDA57FD8FE5E72 -89455DD56A17275637E21AF50EBE5EB9D573F2D834B0BFC0CFD414D569D4AFC3 -C71219F52DA9A1A73CDAADA94EEABD9B14D42421A562065DF9EFF2784F1F40D2 -AF44CC68901213F1E6FD68CAE79898785FA3FC317F5D402A6697F6E52FEF977D -1C962966D0E44C714B15BC9B613A680B054D6B64B974AD0CD6C4BA7D255E49FD -D881755B15859CBF57EAE82406FFE8453AEC2F07C9D17A8C4D3A52B6D4259CEC -604DBE8177A6C3A96BE29FB309773A1B1472529C21FAAFB3AF407978B250353D -490CC9BA66416E522E200F5BAF87A3AEA2A556021354D7B74A9AB3CC0955A5AE -2B462ABC670F327CCB53C939E0586DA606EB7C2DF1C9692FA4CAC3078A250F10 -1A73EAC268EF45F1C3369758E1448600234477C85FB11770D17C36A66CCC5413 -544AADFE34E62102F2528407ABCF5775AC6308C7E3395F9F31976A7C0CA9A95E -30A5CBB8DE888F8C81B8F9B1A2BCC36A89E0E75B2F0B19EB4145C9CF0917518C -0EEC1D6B3CCF7DB0EC6354B75B9C54951796C825D9D8110F17BAEE6F4713ED36 -07BFEF64033F1B1E684C6F7D41AC91E8404D46577FF16E2851D3436770FDCB17 -B53D05F1F49C5B6DE9CCAA2B11F5470537C5C80353C62346058110C084C804DF -7A0B9134752E93B76F54A7A573FA95D6175319FF47496E608241D2E33E51030E -B79B9E4838DDB48A81DC4DE9492662F91C5308925214E2C226B28D8264F96E16 -4A49B248594E8053F86234651DE05A0188E26BC3D2CB7116DADBBC4DF98312B6 -8950C20F99AA330B1F011370CB0E50111CA1CE3773ECE6446742DF74432A38B4 -800DB338C4ED84E75506CB8E601B345BF60BA8B49710AC9765B33470A85FBD2D -BB0D2000FF9C0EB524F44AB6A0ACE74EDA1D46317CB2BD488B621FC237CBDB03 -B23A450B64BAB89B60FE976160E5BB90642C647A0FD609B2A6DE281A9978ABEE -0CD7D99F087274C3AC641CBACBB0E128CC29E141F022E4A404BB25F7FD57B58D -582D176EAADDAE7E3385A93375C8B37D11924AAF00565EF7E53C117F10EEA3A8 -24D6DAEF6766D9BD9429C84448D9F1890BEC8FE63513E5690426F85655741096 -D2DF9DEE68530E79B08CFF9C53B280581C6FE3C5C5C8D54C54705F12B1CC6C14 -7606153AD79BB94473AEE5056ED3974B71FF5D3AFD68AB651A94ADA4F84C58DC -42F3E29D3B7423C72DDE240542F038B338D888910E27B4F55F40F11B654B4BE8 -A196AC89067CD52DEBC77E0C4CB4B387D4D7DA79FDEC55AD017E62AECF4A69AE -F04A2CD3F7F897A50FB1ED048B117A1BED63E07A0B9645EF7CD6B91FECEB75B2 -3E4C48C9F82300F8C100972F29F0C132F3F802128B3C28DB8C0C557E0C18B0F8 -F6F3085E1300FA06B9C360681B8B5083079B79BBFD9E8E82D160E8208A3940A5 -553ECD27B328EA8425A53EC26CA31D86D486D9EC8BDDDCCBA4421B050CBFF54A -7CA93679FDD917E46A288060E42FDB60BCB784FF90045821410FDD246DE7F240 -8E4E5F9EE7A97945D959936D692C5345AAABEE0E739C8BEBA85316649DB457C4 -308CFA1AA2D107AFF0EDB39DB5208C4F6FDF48B053A1D7F89C473A158A031213 -80B96B47905A4FF806CCA81002C3976A4ED1849382ACA1BC62940D2F2B5423D8 -FC67B48D387B440A04C2051BB75B24B4C15F6B0665988427F23A3CBD576436CA -4656A035E9CE18B233FFC11FFC35A88367DC48D61512CD052824B2272A92304B -5D04D414022E16FE3A86B047194B7A0A29DA9E2111A575ED97405E78DE606058 -24E00909DA25E9F50E335128969455E6D3610F129C46501917A352E5F34C5C30 -8B5E67B07E4E6886E909FE8DBDFB2DDC0D3DB1F4978326A50ADE74998840F3B1 -5E82C51F00454B57DE06854A58A38D34B5B7197F46CB9AFAF975198C7821029E -4CE991BFBCA3115EB5131414640292341979F90CE55FE7D737BAADBBEFE37D14 -F17C8D795A06F04883E3207A1E72AD520B22DCD826B676463DF341E365C3E95F -58CC0C17FF5E13DA0CAE7601D5C09D0F5E5A06BB0452D26D3399AA084D88D2C2 -AC9DB9261BDAA3699EC899459996E26EF30C36B636B18E5532DEFE9EE1157949 -D719550715D577C1C541EADAB9564D2A5A8EB242014C65764002DE9D1368A3A6 -F7C2B52411EC39477E94FBD8E022F9B3392097953BE4F90F6098CF819CF2272E -5D4A4C202550F1DB1D98A097FB8C1B1636C2E90C8E903CBC9461066D6D4F9694 -C8D0452C4AF2EE38513434633ADB80E1CEE43F90DB31DD3402A9A8F79F9E4C6D -4CD4F5F4B8256B973923766DDDB1241E963F456273A768608B41B160472512FC -5F708B6862C97AC5722799EE650D6B94A9CC66483FD6BBF17282C1EF506A3034 -7751B8CBE2494884659CB9B9E71126D50F2F771358C7ED0038C67721E4DE280A -91174C08D3D1CD9CB02D52EF619EA3BCA6304A8C64D277BB7679A0E13E12BC26 -5E251DA7E103F7E82436FA55F5CEAA984B0920B415D919AE9698458E336FB257 -2E4A4341A2B26C69FBCBEEC84E608777CFEC5C099C912B638037C7F47828F5E1 -D47957FBBFE87A5A7B5454435510D5A79B769EEF11199C6A81E64D7C84AF6E42 -80C3185BDB0353584EDBB0B8691505CA9B69321DB43B9DF3F19E0A509EDB55BC -0D1BC93EEDA436AC29C087835CB7DA098813889261C2591DE2C20672A9260E6C -F7AD215E722505889A98A0FA33D9C3939B5FABEB8598F413A47632A029D99E6D -1E40079A737A6EEE0D5DCE9776746448B4DDBC1DB82075FF8370512BC31F992D -0C1865E1EB7B4A3234EBFA45B5DFD2803770063E06F54D07DCC059022A2F5793 -2A87A7E516B7B69099328F1274B491261FA9118F4305814AEC9154C48C2E6E63 -96C5E315056B50F5FAEF68B76EAF217AF680340A8FC7F91B83D79103E1B168C7 -6D90577D2E151338A287A5D8F6D45D21EB07D98D1445157EF9A970858E80ADA6 -30F63B956FD01971FA9FE829E99D8F460616C4462215CA40B7BDDAAA74EF9CD2 -20E86A2234C836201A7A53E511DB8C7DC430CBE22BD1F93E9010C27957A20FC4 -714981CFE0EB619D9A84E1B8A1985D5B638FC686FC8738CF790D91D97741A74A -FB39448D99ECB58E7A7A5C061DEB0EA250BD616FB538CE3F332E455860536EA9 -7F59962BEC3D23EC294302604305C544616D3245EF904D6A62517BF85BA33090 -E68D5AD9D974C7A97CC63470138DAD63DA0FFCF87FF4476EAF26DD7C1D89B330 -9D11B5E451B73F5F6D254939EECBBBC90596EF0EBAC7D2F6A423F44026DEC23F -70356D47F2911351B9FFA5D17B8A5D3100BD020FF83FEBF040FDB8E179C74105 -376613C15F5BDA64F18E162CF868DA0862F89883CC6822B266C1EDC84A2A5A76 -EDE519E849C2794B5975E968CE9001D823F33FD56E14E857D1DD6C5490EB678D -80B66AC404AF5C25C00DE8FD8B811F68019A325BD008FF2758CDD0CCBC65979E -2B8F2CEDA715EEC6EF000AB97CF24F5021F0529C8E52DA2B05278E9391D0E164 -DAC055D267FD3403237FF9BE4D30660E192DC8AA46EDEC4230AACA029C99651F -DA02296C4A7F48D3FA14A66A46D3B2C4EFC585B4638DCA012505A09F6DA59875 -3C418609DCCF6EF10336093B10BAAFEC6447D8820F7F1D2BF8A1692D3876C8CD -2152617F95BE5E507C9FD85B65CCC9716157E15E9A9A163C95A615981F67FB83 -B9A30F47E660766CDAB3D2FB5D4B32CC38B1EB62F4B0E3977EA0CEEC21391C6B -602EDD051F432F219FC7EA421597F67D09B713DB13061DAB18219213F340E5A3 -CFDDA5A71F5FC87E6AE0DF373C0F4B38CCC8A69844740E63E17E526B32718E4B -E1678F5B1EB02F35ACD314962D7D0111369142F1F318CC5CB72D21A1749F3C80 -744A126E6FC8875FF8AAC49573E9D28CBF5EEE5EF984507F01F5B56C6B2B9012 -F5C2D8C85BD09F8548D24095B691888C39ECDF6C1961DFFD56FB055ED7C620CE -3E680603440A9368C457C95E340130B86737C1BAB1DFB2DCBD14A87FD61359AD -F633434879EFD38A7DFDC11F935AA0271875377A39346F4809792D75D3D1A036 -DBE9C6E0F4BA355EC58E46A7C85241D72D3CA87B2E5BDEAB24BE6E087CBDA69C -F5507560D13D13510640742CB19FDB451C2A313D3FBC571CA74E48D20FF8C998 -C30E56C2142EEF490F5F88F694708AE7251AB61FC5A55FB1BF6D975F750124AC -21CECC1B8A9175BB8FF8EFC8DA34C873E5C3ADCFB3AFA3EDEB4A4BAD75CF63D8 -4FF86FEFCDB51FF7B8887E5C2E4DE36201AADAB8BA2671F2F7154A157D1C9700 -7528B1B9509C36428E277BF37A097A281F2D9ABE1AF16328505A265A4F2B8F9A -E0D8F6F391785358835D5D382FBB2BCF5839D78EBD49A104ACCA215C17877E59 -B438ADC652A2130F5E79D4441BFBC63CA8AE9D6730FCAEF12C92FCF1061D0E24 -83FC035789A10DA0FA865CDDCDDFF7749D0723115D869E6DF100057E2EFEC85E -1BE6C671205128371FA4D39465FE54343BC195498F3EEDBCE65B913E9A45F96B -5591241EA325970EB5F2CC9791B632F057482F8E1309D3A20A52C2398BC96673 -8D6F30BB78E4F55FF4339CDCAFA8C47A4DBE00CC0A3548B1CACE66925427B900 -1E6ADAAB861EE413B225C26DDC765B1EC7DDD718CA0AA0E7E0B92A4F11435E7A -BF6F106538B016EC5C713774BC3D71663029E0AD2D02674AAA26A91A6D048D2C -8380645767CBFA882FFB0F62B5452AB47953C35DA3CD6F178B5006DE79D5CFDB -7CB628E29C3BA71674D35F346488892F0C1FD53B47B8613BCD6FD8EA73BACBFA -15C85653D4DAC9924A324423C92638D93E2C9DB9289271F7DEFFC67C5CF3DBD4 -DB5997D9356A4086B5D2041EA33C78EB7A4B8271840614E5D9021448C93CCA50 -85EFFCECB75F30B1466869558851A9190EF43F6C25EA419F02D0B4A571C62454 -2B5AF2D07841904716A18AED7F49DC7649704FB5D3154D1BEFE2E47073D9D2CF -40D1D6EA1D0806ABEEE7803DEDBB65F30E69E0EA7838BAD0E878A86359529A8D -716C6123D5BE99ED71A47CF92D27EF42F8BE0828261054C62565CF6DE988943D -0E653E4A4E2EB84AC004FFCFDA56E5444E36B1BDF8021DAD38D68975F68B96C6 -AC7DF86DFA8B06E85669487FF3066DF334BC3F7C7A0A7B728653D333C901367C -9434E3517D782B7DCC366E5D1217790F14C87839E0F820A7073E8E7ED430B6D6 -50FF6E60F50E6B4931ADF0B9C796D47CB44C9B8497D7AEFE83DF411DEDEE59F3 -3D9D24C893DC7C9727691818D856A9974422AF79A32AEEE7F84EDE5FDB53F405 -0C4CF8D19DE038DCBAA6B67621BE99979BC8D08801682CE7A6BAF9AA0920641E -19F99686191AAD34B84C6497D7035DBD189A5D868721EB92EC73D62DFB0E272D -6C9F5048E0AD5AA1E8DEE499ABA2F8D891E5EB8BA3BFFA54DABF3B16E439FC34 -2AF610DA9801FD977A102A136DCD03342ECC66E68B983E344ECABDF95387D7A2 -C0F749E5C9F5D71AB50B9AE441D7053332CDAFEC4E57FC1AFC794EB367307AB5 -750CB771BA33C8591D4CE3D0E8C4C841E3FCA230602B4609F13433CDD4D0815F -7059BE698C1F4DE0D0297AB43C3C0B6417CD6DA5629BB857F4475DC30267D831 -01417146B0C1C7DCF877E445FA50C2CC5A433EAA684798E2EDD76EF9BCCC978B -1A6473F2306C17A6B92A53835E2F6C64AC1D129644EA310A920E420266CE2648 -E3DC281BD364B5C3EA9933EC57E55FC1AC534FB4932C1764D84458F8B14A9D18 -3E99ED71B7D67CC839E9FB4747D7E15EFF60EE9026598D7FFD39CDFC634F6543 -4D538D4A33A5C563FAE46EDC8A7D4F7B62BF7538694CF5BD427E01E60CCE30B0 -50F2890260F7B8B82EE310C5E20E1D02310B36B76864983A187BC6FDDE8B1617 -F64C971F69761AF5C6CC550DBF3C80E69BE8B2AC311B727AD651665EE53F9350 -D472E4CFA202E95CD72AEBFED28F411F9B7DC4C2F7F9FD501B214E9950EC3F7C -684BC28D0A8272A769209EFD48ECF6A633511388F5738FF97B84B7230C78E9C1 -C76804160BF038CFAC465E3F5ACA33E2CE853F0191415EA84072F9E44AB09715 -950013A33EF8E0EC7A9A7B7C10BE0DFC17082ECDD1C3D6E108F098623008F3D1 -6E926ECFFD1A0743FD695D52008925B0B031C14AB64FF996FF6128DC781FDBD6 -ED3C9B0E80E49B36B3C4812E9EE63A70C689172C65687BB83BA8E7916772A06A -D972087B74718FECD5E32CC04FA76B57915DC0827C9D387344E72CB20E373325 -66037392EF2D1E9B7AB58609145AF02EF435A2EAE82C06F29B8E736F081D4FF1 -992BB239C627BD9CEAD20D82B9675B70AB6603E4F932B3AC9281DF73F2F40F52 -C2FC6951D6EAFEDF7F02BB70E1B5684665DC0AA3627AF05FAF58031D6643D0CE -A54F11E2D07CDFC9DEF212ECB685522C9D6F6D6290D59677AA606313D0F44812 -7A4A7E1E2C992286184CE893B4A89FC32BAB2320BC3961EE4B49E9351C2B28E7 -0B28A837FFCF09E2F6054902C0BBACE191453FF48D6D0B0190BC3BDBE365846E -D2A8039ACB5D9673C50C0AA82BC0FDC339FAF8CB61DD5E0BF5F18B9F979E3442 -4CB364E6D9AE720DAEFFE1A862C0A68EDABB17C4E43278B4A4C98C08D975F62C -31836B3EF8912D40F1D211ECD3FF967EB36F332E3D8D7F7C98D7B4A57B373418 -C5732B949E391CC6B7C456E72E6ADEC949E603814467DA7D2AEBFA32EEB1A039 -ED79359CBB060DFC9782B28B7481B356CE2B39605EC6658971360EED1C72A524 -A95FCF684A44781D103CCA8B11D4390524D1201B68527E60EE2CEBBB3CD45E74 -9468E5A73EFF365C05EF520230A52BA4FD53405D08752D01613029D77EF2A7A2 -05F79644E955660CCAA3F2CA5E58ED822F24E73970C92562F3AE99FBFB7270AD -D588318B44A214CC4DA5CA6CFAAA3F70FCBBA7F0B40767495A2F19599F8C4DA5 -A055EE9BD280F09E693A3B196A37628AC7115190CBFA9CE5FE51B5BCCCF86DD7 -3B2BCD92FE8F51246D0CB193661F197F9D731A3B719D87853D1BD267A16C391A -9D4F1E8C16818DCE0D24F7213E3A140C07F66E465BD7C1DDF762F48633464D42 -7B8529FE6968B378DD6140FD636185E1C58C4AD8FC5FDA1F5D1ECD76E81B2515 -F29BD82DE369208FC9EA8ECA3704CAE5944CBC74FE076852658F237F3AF02D43 -9E11DC17C900E66910009893C751E74E3BA60B95605DA55CB9ED4EE060A34859 -7D0DBB5021C15E596361346E07833987845FD9AAB8FE403C9455C21B4947B978 -00840CD11857A4979208E2DFF63E5EC4D9435E297CB1EFB5E022EB30FD1C9508 -C26D1135B157259FC7E6B53094F4EB7E50BD21979F428CA996B438D88E02BAFC -D1C2DD524879A76FB96C515F18DD3BD49A9BCB9B6D5BED899757BE7E748D842A -61B916DF86CC3CA1431A9D3B6F048BBF4F348A70E03EECCE83961F7675CD8821 -9241C0DA67E5BEC09EBC3A4A16DBF7F42FF35D7BD3EC21B52FAA4D1F6A446721 -6F9D2C770CFD004E830CF11BEAA35FECEBE878B85A3A0D13C5EF7FA6999DE090 -3CA1A7C149AA66CEE6AB31E3F376AA4D3CBAC14BC612D5DEC98121D32BBCA0B0 -97BD77384E215A3011EFCDA2E24B2866C0CBE8A3FA646CC1D40F519D62A7B6A1 -10A442599852F9352221219EEC7873DE48F0105F95AA4BBECEAAFF33F94BAEA4 -B90C5A44943E4B9502598D260476DA762FD3F69CF92CB3FFEEBDCC3A333CFD31 -F5893F591CDF7A14412C7B6B24FC6451BDAFA0B88AFE3BC385D30C9459BACD7A -4A50AEED28243A668562956006624E4F557E942212DCB86B114C5F88A1064CAA -FCF7FDBFBF62609E114E9E1AD40AB62F6D638D866F278860E3F89A4987CDB130 -2704A70DB8C42D1CD9BD22A1494B52ED3B71761E459C30492601ED712A9A1751 -CE57443CCCD28E6116BCBCD227C50437AC7812E7AA9166AE6C0078B7695B4853 -4880007783A978B75D2DA6CC7FD83B1E7B07D55078CFFA0312FBA9062B6DEE2F -B1093B47682FB325F3EDCFC428D3D56DE67101CEAF945ABB8BEC9A9B223C092B -A322E0F0319495EF5A6B8F5538CF76C538D5D57E8D05945412B55720ABAB2CD0 -14FAF4DEF7793100A21715F4AFD7B9A2EF18A633F5767DE967E03954A7052057 -E0928F7A8115C2971DE3B14FD72DD75665525EC2DBFEDBB3153B7CD0B7BE1E5E -A74148D557436C3F3780C8DAE74A715A41FCF50B069E45D3451BEDDE480F3689 -0E48EE9A64D35252B51672021805C0D7D76772470D28616B7E760DBD09C52A82 -D83AA682F189222CA3A01889E016BA4854B1ACF2121ACE59DAECEA323F9CCC34 -5644FCA6B0537595851B12A3C1E159D5CC40E9B632A941EE0AFA50CFF3E26575 -A3B799D850DE384D1BCF84AD581E30B0EFAC66EB8F4FE9DCACA0403F2F42BABB -C6E30BD7ED53FCDD893606CA9F41EBD95509EA1448F8BF76BA545B3AADBA02F8 -9591452EB3310AC78FD5F86BFF400475F9680452976D717374C62B2AEF3B6115 -53885C26E4E2B35C58847F36B825CEB631C11109E5E9EBC52918DE2A9DA5F3F4 -D2350E2A69897FF8E4D148B2F554F22B95EED13BB4CFF88DAF7CB8EFC08C4D0B -1A4DE99652B29BDA1AD6C58FE3626A1D31D0FB3234695835C33EDFA37584CA48 -5813347EFC28237649F5A29775D2681CF949130F93BDCD16B759B44EC210F457 -E09F25FB0368E4D98209EAC333EE2159612984F18B8F06DC1F7E89F2239CD7B4 -43FAC95CB2EC0881218DD3AB689168AB4EE907E09490DF361A1BC1C978C7C79D -6FED7176C2B72C3F7D64B01E635C404C6CEEA25FBAE5B5669B5D089B562B1408 -D5FFAFE3C1C653A55D6F1F6EB4EBA1A56F8E255C15B41C6992E070B1DBE872E8 -202F7163E36C72AC78DD56CE8239BF3198293006BBAA89707D90E4C729D774EE -165DB7FF5988125094175A7196939017EFE1A2DF1ED89EEC5309790AA50ED3AA -1B310BD333BF2970CFA038C3DB87BE39CB6BDA17706D5508C26C9F8B4FFECDD4 -43E098165E0D0635FA8A54C2776C655113E27FE1641E1738B13873BCDAB2D922 -85698D571A6EB65A8F33B3AE27DD12C05F08B57E307A7B55561805C0EC855E44 -99B73DD02A6F95156A9AE5C64B677DE5339D97F19F4BD75D4A1251DF34EA169F -5E5EF8C7B7D1043BF75E80212D05B3C3A9161F68FCA385C1D8553E299F9E2DC4 -EC56F08ABA3B8F692A477595AFC231A319410B97C5A34ACA08133BB3B5E7D449 -63DBCE7A0404711C7CDB14BEBF3405F1AADBD8FE13D8423D5521E11766EDA4FB -8D751F78D4E012237C0F90B6F8FA1E42EA550FE5BD856DB4CE9F84908DD27B0D -452373A9CC8CC6267A6C8B8D5B253A7F930DE0A861540CD3D6C5B68B817DCDC0 -11074810779B2E243C444DD60FA0E165B662FFB16418DFC1E476BD40549C09DD -EFAA9752533B315BBC5072A3671C294126A8D4DE746CB0C61499577D3AA047F1 -28ABACCF06BC80D32B76D83C4E4EA743D61BB4D8F6309C5BB8320CAE0D0E84F0 -F5E407311074CA8260A32D676B3015DFFD9442D9F3F5E55C06982B3E359D2608 -8F918A354373C5F8209CD51BB8AEC4786D2591108D6EA01C0CD335FF3D007184 -F056535B30DA59FD9916531C9AE0EE69F9851784E3D79DDF5502D878FC92B08D -D94F0538670EE8273F0AFCC92CA9B34BC71F06080DFD08DD0BEA5FBB4918DA94 -1AF17468F57970A007EDC44E7D095C66E6325A9C55BDCB1E4F0D003BE568DFCB -D49D0C91EE3DC0514CBA3707408B35428689AFFFE60EC051CDCD04F8DDE96BF3 -37DB8DA3AF0587D4E1F7AB4DB221EFA93094BF7C8BA71C66D41A850C873EFC6E -2B0FFDCE7524BBFE592D7C5FC27856125209A19CABD8390E436188984B982E84 -EB38C95514C5DD830ED54908C08B5076E174DB8B3A739780B96C085245AB077E -83734DBAD19AB141ADB004B4B2A83A579B60EF3DB586F18DE7636692956290F7 -2DF3027C7E083EE457D4AE6CC35E11C90405304D9B74E0455E0DC2ED84D3223A -476C7442336595FDE7F1D9CBD3B108EFA3F5BAA7C3B03FA2AD9D0BC7AA2C0160 -4DD87E2DB156E11F0410C59556A50A989ED90F37A167349B9971DCEE6F840117 -7A985EA44452A62A69F2406F0E0D781B7D52575171190D42F2156C67BF68F828 -1947A1E79ABE287D6A19C2A2003891AE956BBF4F18012385B249354093DC1692 -8D7B068CF6B371CDCDC742A20AAA4CA6DC052CDD2A1A3292352AF976270951AA -7BDA8D6A408A761E73271A77E4A6C299161FF3E2292F77E8D319F5A39041741C -FAE69BD1855A2DBA7CF238F0E0F3E1AC707A420D40ACF1AF5D79D268A01106D2 -27AEB0E25D265EF85B6C4715F8B2169B191FA5666C369C3DE090D352DF99FCB2 -A359992F5379F796992C77C4648B74D2BCFB70D2CB88644E6773B17385767C53 -63A897E259DD25D1DEC1B917270E9C2B90432343A02F62A3E864019EA3E48350 -482ADE56458C646DC3213CED67C35798718467536C417EE7ECDE3D968E5E6E80 -00BC3317067F615FDD4224B8A4A6F2D063799818681FBEDCEE6BF532FFC9A4C6 -22E99C5A3B6B3B8B0906E19934E7B4768E4229C9993DF93D279CC08E624D76E4 -97F5C8A68B9B0A3E20DB1F97AD62A9EFD0D94C86D5F5A50804D93680F7875E8D -CCC5D9720BDB031E76C4DE35D408282506715C928C4C7DFC1CE7B569830E8158 -C64FA2D3791CA5C5EF2FEC2D0E7CAD0F72C15FBFE175C3BF768A011AFC3FAE97 -77F15B35F618B040B5DC4A6D952C947C93BFA3A49CD7660548F0CB67E1B7EBFD -B02F89B429212C589DCC26E8D0A862F978743FE67E6E3CD80E9EE36023A90F9C -6EF66BDF100B09613E6903BD7BB4893757F772842C8E71E01529740A453A5FF3 -EEA0FC407143610F244547C5EC06F18182014EBC167667B1C3469C5E36674DBB -CD9822914244A3FEE18C6B145EE60C806DDAE13A827B1BFF9DA3C5D7219689C8 -4F425601F01CB9E15D67395A0D571B3B189818822E6CD0537C661DFAA8852E56 -1DC02616F2CF080976E48997C2115D1BDF863473D7B76953CA6B52F23F7464BE -50CE2C9875882D265A9DD514E41F3CF44009F5B71E1F52D09261D95C025F1D51 -924891EBC45A09E1360D062CBD2E65DBBDC8BC92A7C3BF8FE1CC570AB7CC1691 -129650C975F1EF024D54FC934371E605C47E06803D85915B582E86A3940618F0 -6FFFF72D7369C2CBE7A2A5A1E2DF9373BD3C2D76AB12EDD4F11291781DAE2F6C -E0601144B6E3AF22F5723403303887F1A4EB9EC17A3A0AD2D020EF2FCEEFFA9D -EDE73E93B6714CB34307B11763A1B833E0783F918F72C508C529D76CBC4F0AD3 -EB9D86EB288648F2857D546E8FF022B5B0B039E490BE97025DACEC16D8EFC44D -3D2D45FF8395F75EBA7BA973ADB7EC73C539160DBEA3E380F875ABDA51710054 -EA6D478B39E06839C5A163BAAECD19EE086474D9EB302B818061E1E4E6FD1D12 -FF82DB6077D6D6C99309A225074E6E8E92256042E3E88FCD9409FA1E19E90047 -9697E4AE194F086908F91B8D34A649C060027CDDE154E9DEDC39D9F6AA90C217 -2DED68743609DE718C75FFDC92FCA076BE4D0865A249BC72000F94E4F1D03FF2 -7F13CB176E0DBEA521BFB4A536E8FE36639ED3EB0CEAD041DE6455138576BE7E -41AB953FC3720AC4F3512BE290A5E2D5C63132E1B0D56ADD8728CD616117EE12 -066D4E68B82BFFAF18B9DD91CB69558534CC419E600EE3E670250D0E19F2FA17 -A381077973542A10F6182FC3D0D250C24A2BC5C2E3AEDB7ED3FA858D558EE47D -FF81A4768A9A233AB11C844035ED5718497E3395F0238686BE00D975CF7ABE92 -E0C58038AA7B09DF68EF4C559ED91AF5A6E607781C7D540BA0C77D4691A475B7 -B39363B6D7CB872032C4C8E382127B0756E0B91BC6F87FBB050C630453C08493 -AC24F4BC8379CA871515C8F503BB0ED5CF55A6C7BFBC7A09E4208776603447BC -068A016CB63AF338355B44545B4D9FF234403E858D2CC43584DB031F8EE38B3C -2732293233312769A0A984ACD721FFFA24A03AA9A00CD1620FD332EA6421C40E -F4E917FCB00638E8B8FCA62228DE95CC02CDCAF8B2A43BA5950881BD7136286F -BDCE88C3BC964E268D8BC6EBA1D367EE179CFB277778F20CC21DF0DA363F73FC -A0CABEE965599A00FB9DD52C9E5EC85F598CEBFBC43C6B1A85CD6A382829FDBC -D65E57C80AF9BB8D33177C856F488A91F6C97D89105702D9E36D3CEE11657DE5 -848D08C6F777ED161CF596C2C21DF22D5CAA13E9FC2B0DA8847C63B78E9D8239 -B48EEA44A4C1D17EEF695C8ABDF5F688B0C71537BF80146CA2DBC3030CA9D942 -1BBA232834D3220B5DE5452109AE248D0F5C87F26813BFAC6A953C49C456A74F -D0840CB8E08AED6E07BFDB69AE6A4E9F8CDF872DC0D05D3CBB3EEABADD5428F3 -2A6E7C217E8BA597B225A08BAAED70C35EC9FFA8941D719B6E228C3E1BC94879 -FEFA33CA8B6941981A8E1DAF8CA642C7A6932686EB7E77BB54F4477290DE593F -2AF063542CF48F8C0D92548903DF4144CEDAC9B9A4E83824839188D0755AE284 -07DC1C008BD7102572EACA79DF2F069BD6C53818C64D855F2B8B3658BA55E78F -391BCD00E3E517B5FA7E738B10F304E917522BF4AF52AB6C799E1839C8CF45DA -28A598DE94B0F4101C5DC4FDFA8D22B53A0A9D557B8B84F8ED6B0ADAC375B837 -346130A77F0B97CC46ED60A454CA958EE065584A0E3BAFF867CB29889F60BA44 -AB61DEA85910F12CD0F297EFDEB244ACC85537514159BF2277996C674D9B22A8 -94D2A552AF8556F487B6357F59B3EFF328F675CEA434F5780C1C59E540942274 -D6852E2461EC38DF58D6173EFB3A520EA6E08A6904895097746177A1F2676225 -A229432E5A44B77909A74D1300BFBFF446AA4394524F93F4621A10AD5DC44722 -0A0F1B79AA194C275EDAC3E6016E7FD5CCE9A47A493CC0DC6922B639EBC98EDD -C906452E37193235127A6FF5F873691F98D714AF9E834004268D85CEE5D87D4B -C9CA8345487900A16AD97243BFB135AFE42A138C2FC26E7F7C2F3655797608F6 -A722BD7A87880E7F7B18E61BB5C780A62E81578C2E6EAE90468CC53C16D34888 -A41F542ABCFF5946A475CE31D631010238C03288ED5EFE6AD0A08F5698A55CE8 -6202516ABBA71A3837168DC0F3605D7B5FBB88FEEF8F62CF8014F0759912E0E2 -883134B6D916A436864BE76727743F4AF4630ADE41507AEBFCDC4BDF1B09866B -AD6C12C854E15194E756B96D2C9F986154E767F4DD73ABD97D31C0C5619B5CAC -6B8F9F709BEA5A9FE2A94B70C0B6E0DBF63F849BB253EB68F06E43513EDD6F6C -F80E10D98D348DF6F6FCDE5F0C20030A05AF703A5F4EF72F09313E7EB7450AA2 -BCC6386463FD43B51DCBBD2F585DE6AE64C8C0A58A06C26377E917EFD2477F9B -0C084ED099199C387A3176A2DCC142C8103B74275F997C4E38BEA75F25CF3594 -079939BFD5DB439C24F25E5D900353EFC3A71F9E826D8019148495B692137587 -354E52E822609639ADDA15D9C466FDD5E41A6A3BCFCE8DEBA38F3605B4E262DD -3D905D67B680F04E08208A21B7FD8ABF2D41D46BEA9F5697E32EC9701DC0F395 -B41101EC847CC82259A5F603ED6D8B311CC68D48BCCF3F88D19C2414CE01FFD4 -DAE254116363C032E274B538712310F46C2CB3E54F85D14D8FEB6751068A5785 -788CE873183B60997E0D5A0E54848383B56020F7105B5FFE278B66D7A4D075B5 -B7F02D7BA1EBDAA9EA32EA5953591DAA2A39FC9A72C364D0FC44D199BC1D035D -F5131AA54AE791A2223AA3FAF28FC36ED32F102935B728BFAAD51EDF8A379C22 -193172FD86F26ED77EED31405D2C5A964F20FE631123DD3EA41CA5EE1A6A0113 -5B6BA096FBBEB694E813C3B99672EC808A0909A9AE96A68C0B960BCDE731A49F -DF5F8AEF17D96B253E80064577DBEF7CCC237877477FD25650E26939CAFF93ED -A7354A9FB698D629CF1CEEADD41EB09048CBA593A6D2698EED63F5281ED9CEAC -4F6D8447BDAB9573AF6A69326F82A1D28C1D71B5FBC6BD0160D5D058B3368F16 -DBE9BF339018ABFE4B1462FC12B5AF34D94C47F8FD72320A2CFBB2B5C6D871D6 -630887B9022B75D603DE136AB08A3DFE989519EB471C308BF4CDCE9895092439 -190441AEE9B95D976F4017EDC3E2FAF831767543507A36A011000F889C75695B -73B38DD95EDDCFE98862142096DBD55100715BE46366D0B4C07B41BB86D33CD6 -6D069C60B2479D512CA1BDAE44760D26D1E1AFDCAA882EF6DBCCDF5C8C9C0351 -55C58985B1E558EF7BE135405B3C6F436C4B601976951BC2FC021C95530D4962 -4B1AACB5CECC35355CD348565F2FFD9726CFB074F1AC582B433D330560B72DB7 -7E1DA2E2F92E695978074DE5ACBDE9B3BA497249A6E31629FF041E8F9D1AB785 -9954E01AF3E318B983E57668D6F9A2C71CE7744BEC3FA216ECE3740D70445691 -FB86F4181B0F8DD0250A0A5FF42E07018D0F42D2C052751D942AB2ABD417A219 -15B3F393CF8567EEA0991F9C749AB79DC9CDB9972EE564AC97281018BF54C116 -F5678650A7C0408E4CABDF28B7BB84383B4DA3F3B32B54F1B01972EBBF2C540F -AB2C85B4E34106D01593D680CEE680B83E335DFC30951100DB3B2F1DDB92169F -86D88093DEF5FEF12BEDB7334DE681043A76E887121AF90AB152F6B473222355 -C088DBAC06100F32F9601C5D76C7E2EFD238C3B1F06E91471E2E31685E7296B2 -DBD18DC081E23C608BFA875F632C9C2943C10EC6BAFE59F116B1FE4474FE9B34 -F1F831767543507A36A0110017E3AF059AE3AB77A75F4AC116131CF4CDD06D1D -57A80FB17CF0608A0D00E77F7769C2278833EC936584C62BC403E92716EEAAA2 -E4264AAF7C0340E1C3BDF93090E2E9DC77541690BA2CDF850F9E1A967B3B867D -1961709D9D3D5E3D0D9013BAC0D2A581E09E7F2F4ABF073BDFDB2BD0FE1C8162 -B1A98B5AF8382481B511AE0143F87BF420EA3E4B82D4672D449371F4E1AB6165 -36583BC5A90CCE79572D8E6A3C6CA0FD46FA494765FF4351F6A773D4EEFD42B4 -A2A1A24DE128D63457808B5CAF5DF465C1E966923DCDD7E3099A8D43C3676BF1 -9E3D6B1E7D996664E063E0D51EE85CD6AA56240BBA9DCB5485888E3F7436E467 -8CA74F68060D052110401E694AF6E016184348EF4C6FFEFAA073498205527B2F -51EB6276E8B1A483ED40E46D10D775E5E9FC3A58DF4E4BF7E7692E61BE18F517 -BDD664E28E4EC5C6F53AFAFD18CB2FB7F9F4B2A47CF529F9536637875AA9FFAF -544A50B142F015EA16B9A1055B5A15F184E4F6BEEDC245455943A3DF312D7F24 -9EDE312CEC2160BC7A169D3E9E6917FE7E795BB1D3D2733F0E77B5D265BB1DE9 -4641C27B08879B89E76E0AA7DB55C373637EA09C358324C9A0522F6E26B263D7 -2022A0E788DEA549DE6A1C991A3BD85C4EA3E71C2B461BE7A9121FC09139992A -B474CF3732B8EDA9C38F903167E4DD3B35BF99893747ED95A0494141D3234970 -B9D8DAA1109F6DB5122A23C155A988FBC188C5A0E7540392C039A6E7C8553473 -7889355073080E32DD4E529DC97F6E7040C5DC37214DB4BDEE26CBF1E2E2E7F6 -A06B7D9E86C7561842B61A3E5C4B94DCCE011BCF92092A00D42B1A3B3F799F58 -11A4C8115DB64711BBA4AD932297F91739565F38A7FE08025B5CA3C479E39588 -5657AD3849A134F035FD142A263A1A68902ACFBADBC4CF3E64A10064C5EF7B5F -A8C5B11EC9199E75B83A1BF891B2DB8B180F75E942471E7090E9E78A97507941 -9798D4CA52DEB18C09E4C4B24D4FB511681732E021342BF769437EB266EABAC3 -9332C3008375CD804DBE03AB0C9B5A29475E6D8C79E61ED661819BE50AB9F1AC -81DD036968F39844EC50555A5DE8345382150B2693B607A67E0AEAF3DDD09858 -7AC8D0A3FAAF552F1B224F0BC57B967E9988845C61AA68AF74A3DD5BA00AD7EA -7BB4D503982779D7397B566EEDDA93D4E3FE0558EB8351B7F15B4BFA39351FBA -0EA54BB0FFD1D31E22E8C00BB3E642A64628C51A5CD3A4B9AA240B1E3EC4F597 -9A1090ECCA2120EBAB4132F0D81B60A1CEBDEEF87161DE49A707240A70F667CA -5E78346070629D8C4480F9FA4B5026FCB7C48A149AAF3C909A298FB39CD6778C -E1B0B400B1E2EE7576DD50E082E84BEA93FE08F884171F5A3B402C29D373CF5E -339D8988EB92A5345CD6E10B6B61FCBF51E881A1B64C40BEFAD5C72C5DA4D219 -C4F3D0B68FAD2EF1626D1659DDE8EE66FC9D7E65F8DBDA58151412B6D9524777 -F9F1657AE4CAF358AEABDF7267A724AD62B4D006C463B44221BEDA0C08CA934C -5DFB1C77B4A6A1F8A56D91B1D9192722B265E883AC45C1CEC5E176F331183B63 -F3E7D61929861372E46631FF63916BAD3D10C1111E5253878F9820DB501B0FA3 -1FD1A89C3DAD269A818B175E6E2EC61B7F7A562C0D58205A9D4471B083F9DBD2 -33D7DBDC0CDB8C464F5A1A798401A3EB50004CF735F8E8C16E6F83CE65B720BF -B15410AB8AD4A9407BBB3E7A68EAC77AEE9698E5E50DDEE6EEA0A984480417F4 -9097AE400B8999F08A7572C37F89207CD83C1BB1FADBD562096362A13E173B2F -D82D67804247D0910BF81334F2F843EBBCC0458DBE9F21D458D7F7900235F6A5 -C0B81D6E3B9C9FA25F53C714CE8BD134928E88EEA0CA70F49B8942CD33FB9BD5 -55F6F9F9B40879FF7BF41BEC25C6E676244AE10DD13676A09FAECC3FC2B62BCB -89AB7305887932C37827F4044C555E89FFDD6DFDDFE507DE5785C16EDBB13D2A -C76A294796ED347F6A6B3FD434FDE1329B37A4EEFAB85A489FB253AB54F627D4 -51401BC7B78F2FB41F43C47B33F33980C43939686392D3B1BA80063E35F07A55 -38C66B7B2CF11058CAB2EDAA16250D57C889EBB4147E963085ECDADD5CBF741C -FA9D1CA3D307758530ABBB5C2A50BDCA276808972135BE28DDF01016E7EECAA3 -E90E76DDA13906E7ABF92301C72CDB2334AEC951934AF92A594F9FEBEBAA74D5 -25DDA66DB5045BC505FD43450B489B480C9868B17D0305373271039F50D0A381 -FAF7E94DFBFCB40E3DA958514066303BBA8D0B585721C861149EDD288428DC05 -CC5252DF29CA07BDA189B9AA0E56463FBEB46F098E5F1FFEECCC14C8AB0731AE -B7AC09C515B3167691D90457F87A16D1AD02E53E3CE8CE7A199DD93C809825BC -F1D8C736EBABFD526601EF314527A827D08C987749EFDFB8D57F95D0B0A4D32B -7BBE1828EB2DF4C64C4DF2C6703BD8346F14C59A9AEB7615B3C6BB81ED09F494 -0B02C88D60F7C344CA0DD720220820CC857208B0704530AAEF522B46945461DA -1FC1A105B514ED4A35594D391DAC2A7A7DDBA6C62802EF75E7A4E21454896F5A -F42FAF1909A5EC61831E6288215D8C8BDD866C18FAE3668D39BA217567BED9F4 -5415FF5916B851FE3ADCEF9B9E2A113019436B3184884E6466FBC3F24C5ABB32 -621C0C4C793AA0BB51C4A68429A611563162457DFA45F651699F2F21994680D2 -E18AABA6115B1183D6A4F6CADE349423A4D3D83423EB59023E66023872E80D96 -D3E2658E3062E5EF5B9A90A3C4BD07442F57BFB0F4868EC9D373B5B8C72F8A4E -290A12D1B2EA158FA7EC4818E27BCB2C0DF316A9F5A9606899D73DC39E3295BC -3B342D20375451E653AC76A096F731878C0B250C5E3D1045A01ECE86C5643193 -0E309F64893EC5E5818676980BCFFB3372ADCD656B42ADA232BD1EAB9481CB85 -B738B31F0504C78A89298EB16DC08E3422516E51B871241C3D348A09576AF5A9 -A7AECB8C4D04B679187879EEE76FC1FE0810FBE6FCF7E9A51E25D02F4E30672B -9D1DE282DD2D29265F2B8339533EFD9575E2FF57B1122DB4B16D35A54F3C4908 -6CAFC314068E5C37A89E2E6BCAF8D9B1BCCA87C14F41BEDB9214B3230274F922 -3E269AE3396283032830E8870DBFAB3B01EFF41A49D360218850CBCF2772F780 -0E30166FD6992C18FF429CDDA136BD81F7CEA7AEDEE140EF20D9F6E827FDF918 -0C1FE773A147A4AD0C2C0D8E789F4387DD69CF4DDB7A5084A37C3CF6BAEDBDC3 -7DC82ABFBE44E6D45960858C46A5B061A7FF169E95C4CDC59574B36F7B410B43 -C8643EA56010192D8CAC939D95009F3DB69E782C71A0DA0F78DC73FA5F3D6BB0 -D0E05C11D401DFAC1F127860814DC9A14780577C5ED809412BFF82CA82C47E49 -0DE1E08AAACA436EB618C2094F3519DB1685D572B046A4FEA93D19EDE10CF0FE -DF2BF0C402D7BC3A9B9582EC955CC57A9377D0F7562F7991F7FEB542806DFAB9 -05F9304B0546C9D04C343418AE1204B6AC2BF6EF3DCAB00B2EFD50884B8BE2DC -7CF985258C5489A37BDD9AB727E4430A2361D6CF0CB45C80A60DF0EFC677F1BE -66CB904C11D868F88BF36D9AED9D4217A42F0D138B6943E8B42FECAD07B248CB -89B415A0D36289E1F566A4CD2DEE7C8EB9F62E8A2EB3F6016780C60C460750B7 -D599D04F3868956371D587E68063D86A673CBC9E1FD630A85F27883E2CDEE493 -D0ABFD045055F162A009CB3B29D3219CB8AA3F6E0441E189C29E0E7033240F93 -907A7FE8AA4E9CCC93B0E6E6E8EA3DAF7212659378E95DC6AFE72DE348BB9892 -DB4CE11916BF8B4ED640A9CF0E9ED09E4A133AD659AF36196A8E2BB82785C51A -A4931E36CFEBA394BDA9306F93BE42E9775B72743413D41A5656C6716013D30E -21845140AD93C540B7EB94493BC25C27BEC5F3BA459F9B57EBB9379AB42AF326 -F3004C8EB6E90661E23231B96E054D7D903E77E3C01B8BE2A05DD624B84D7876 -E09A58E75E3A14D40BE9710C87B87839DA33A74E38C40171098286EFED3A931C -A2F3921A688BB57252DE0FF714E4E6C57F50476BA3FEB5ED6EE6434F1CB9EF2D -6CC52EC6A483956E812A30C4B565A02D85EE90C1899F5CDD9210926BC142F7B1 -A19C4487B4417F94AF9783815EC2825EC7B16FC827A75C293800C70C525C1C6E -DD8A31FB7149ACE92F580CBEAADE4D8025BA127B528C88B6D511FB38AD626732 -ABCCE4176971678EA3492A168B16055065351D18576312B863B1FA566D380FB7 -A2DBF1AD881751DDBC8328B9B2E3B00EAA12136B14BAD25D2173ECCFAD1C0CCB -3954B60B4A0A93F027050A2323C8A24175BFEB0DC33F9475401A84625F30CA4A -2990ECAA3127A97CF50F995C001D5F190AAF7E1AAD3FD511E5DB04BDF3A21D97 -6763083BF896FEC43A4407571857790AFF5AFF1262814B9741F3A72C872FF129 -6953B892CE7159640FEBEBFBF790BB4017B4BDE4BE66F255D4115FB0261BD500 -90BBC4117BE9CC9FEB9F58C02F5ECFD16C402A55E16F31AF0028CB62A8825419 -8F04B7B83C6BDBD31FFFE546617B785D1CB84918226C8D15E29CB8E20EE2F706 -58E899DF355A4CDF41C7C3DCD52356B97ED4D9632A11C1F10C728D8CAFCB6A9B -F9780D00B6B3088C8542AFA3BD27BFE59FE97B1A959295AD9F3998637EC138F1 -686C00676484DD3CF97AC801F31A764C799F2F207398267508558163DB6F9401 -041BD8E9D12A194E2B9816EA4585414005264F0F475E10A452799732C04A629C -B2A6B696CB661584A092BCE0622AAEB5C8DE8753925752E8D7EC353E7D819192 -37A48D0ACC93BF59192BD92239E17A144C8FE2FDAC9F45A0FF0A784C0F33C0A1 -DFF65E2F1BBD6FCD94C4C41D49D82097191871674F926937EB84351E66D618E7 -DD0AF1E5D1F4BF5F5FB6E071F16389EABCD20AF855322775F6EF175DA0CB3525 -A0355FB8A75B2DDC429D6A3D3D14DF49E594F6132F40EE84607B21DEF33CB651 -986876CFFF7B9BFBE0A48A13A616583D41167A1AE4985DA3E295769E6833C073 -421B7A1BB12A1FB7F68E2B689C62CAC27E49ABC85400AFB47B65C347165E8287 -E051C825736965833C97C548A4DA4A5CDB970A26E5594D058A664ABD5E5FFDD8 -D4B2E46CB14A1146BD4318DCA6B934C0C0CB359A2F864314C060298DC7DB3C2E -EE7A53DEEDE3488283848C612E01A3541C006D51EAFBCDEAED5C8BF5A53F8765 -8882C233355671ACA971546F073AF5D523D6CB158BD2E52ECDE1C86A320C1D56 -5C7CA1E2C7DA1518A64D7A9946BC3CCBD4DC99ED4C06C49FCF7ACCEB3825C20B -A7FB66E20CDC7CD5B6DF85A6F9651B5A0A6AF8A7007D247E588CE3D10A659DB2 -2409C592617E844B788F8F31439A864A83F150B9180ECCCC77FCE80FD76762F9 -FE36D8622E27287C1BE29C6ACC87BAC41E303229045ADAB41339583A7E2E182A -25AEB962E2DEF3938BA4A36C1FC61694231232E0556C48E4CA6F2D8B778AA221 -C7C2C602E5BDEFA829B8042FF26F6DE8AB24C3D6AC15F08F18AC87FD5DBD10F5 -6FDA435B1844B5B5C001F812465593DE42ACCAA50107438F94B9540883D5006A -989426C0AC036D9F32221DF58D516CD07E8A62217595902DDB61C0122DA5CC53 -033484B751B448E828B3F2F5B780384E879A4AC2A0B0463CFACB6E71E64910D1 -C29D15AC53900540AF00AC76ABB9F58BCDEC17A66943978DB0FFBF26E7182F9C -51237DDF5171BC1272D2A92795FA94FBCFC990A30BB4089729DD36B34EA74298 -4CEE7B47FE85AE188CB7F01E9D976191C6A179C793CB5854ACE7105651EFFEF2 -EF8A2692CCA84735965666AAB61B7E66FAF98B03C2C91AD6BB2CAC04A25697DC -378F43BB2026ED0CBF3A95E8D43F3DEE43E2121623BD3F211D15AD7542666E4C -D1139BED9A63B41A12CCDE934DEAF7417779748B6507ACD789049D0A9A13F020 -52616D42561F9D099CA6C9C2FE5F75841BAA73F9B66B499547924103D120A9A8 -D487525A93B270DDD29CB89F48CA3794FEA61AF992B6D063EE294EA6506EAC90 -50E497D4029A2EC47970F69C3CD93871128B24DB7B64F9E1DB03D6C26848C888 -DB489E5494A272A2671FDEAAEB5467D9BE36DCAC57C1EA64B5981105D6C0CDE7 -16047600B109EC9FB61CBDED2B3A9C048F5DBCC6894A4C2788B66265AE2919D5 -FECA073894E52BD30069C895471E01C2FB1AEBA27E651ADBEE11798B8641AA4C -6ABD9FDA2FF963A342E695155472AFF17729FB6CCC8392DBDFD0704DA078F819 -39A12840DB11394E8C52B7D525F1CF6A9EC558175489B490C6CB529CC6C9AD9E -858F6C6574E5765EF040A0BC741339CC899363C897FB17552B54170C094AC439 -C633D71A0A6B07FA0E5F052CEC01B7D39972ECCF810DD236071E6F33886F1967 -5BEC9E659784790AD81F18478217BC614A09B450F9F367CA8C1319EC321304C0 -F167005B9442397C767749A0E80172A3E798778842E72C9995090ED9EE7E77A8 -B4E0B5182CBD20305D29FA42232D25CE8CF595AFDE8AD238796CAABA7A05732E -DEDC3D9611E73FB21BF48A838AE013D1DB05ABD0A8E104C793ED29C821B74B60 -7BBF7AF551643427F79E4A5D5430AD237629DC722B95DF7997D56C0AA35261F9 -059895E4915405E39187287F253D0BFC35C9221BC7BC7D1D6347AD79EB57D16F -7CD8A0F05688C5BC3DCE2833435A9617B0724C9D0AEC113719FF60498D379DF1 -EDDEDA305BB21A276068B03655C718ABCC9463672BEF5351A07A70CA909BCE6B -EC8D4FA901DACBE229ADDD6196678AB4931A4453D433BE83FF4B10781976554A -E32181301F75F423949AC99BCCAA0D5E45E2C6443EEC033DBCCA5EBC98FCC960 -4D0FE0B2AD4D63F8243ADF0C07C669433639C898B6032BEF98D61A1C712624B9 -D703992E39D06ED9903819E6E06DD069AB2E49B39C7556A9A74FB9CD4005BD93 -9571973AF75229D7427643828DA54783719E0BB7093AAF9CB43E93C70C17CE00 -4F2F2518524992ADF04A85077EA168970C035F7BAE96F1982136D215BD19ED26 -B13FE585D88B9CFD80BE1CC3C475BA976D327E06A2C9453439C498A77074A537 -9CB48921B22AF51CE96FAA8194FC00E1A3BC5EE90758A28089DE5B78A9DA79F7 -9A292B613509BE684CEBB5029E7D06B115C6357A5FF14977EEEF7C54EA07F6FD -B144024D10CD770D563B3BEADE262952B6D59260D9F9C5E4D0C0A01D3FAC32E2 -667FB0297A92CC731A30F2B6380E4BD1B5296001C5AE4AF98196CDC282F8EA91 -D79C2F7A25E3D28549EF0AAFCF9F9D25AB744EE76B62FCCCF9A2DC9EC00F4411 -AD6B2A3F7DB78DE22ADD31DA29ED3EB6105C86554605FBE0A9ADF6AF06360856 -8FEB129D9EED78D6CBCFBC65EC32D619405C62C5BB36FA30FA0AC7E38AA3A920 -A681E6368244CE4E3A850D08D5D779DB84AB1E2D2CC9AE7EB7179D01E910803E -8D156650E3A0E2BC7DD6A123E640E6C7C950F5B11DEFC114FFD19B69E0028D81 -5D71285E888DC780692E120C9FF86951A13403321B6B32189608287EBE42C9D4 -5D87D9930A80732DE39715374715AA9B5D9CF24E753110E6480C0895F87A6055 -F9BF8CDC63AA7A304F91B9919E658E3E3506CFADCDACF85AA32C2FA99BA6A40E -DAC21971342C2969C79DA65A09543D982FB7AB63EE9E016BC89C3782AF98FAE4 -F3DB22427AA0C4081BE2A3FBBE6E6B8873BC448E79C38E4ECE119CBAF49303BE -83CEBFD5ECDD39B618D87AF87D2B23D0A39E529E6FA487799979C9CA7A8E057D -00270FD2B06F5EFA066E071C7B6A2A9BAF7FF07383B73E115E6FB2BF4961B35C -C1A4CC19E872465C98C0E7EF7566232A6E519E5DAD75EDBD011EBEC366C78FD7 -C38473EA43EED26FD251482E3BE6985FF6012BC6C29DAECFEA389E34B13AF04E -EF40BE464C56A9BE7BF590DC2400B357FBE1010F848C62C3BF13A095D5CC597C -49FE5119698063A4126D2B1EB8CFCF9A60521EEE14D203C4538EC94AAA4C42F3 -CFE1266BDFAB7807874978F69764670312AB322D502BA3C577E532D388864321 -F47D4750A55010B09B39F55F76BDC353860BBEAD1DBB0DA88986D8FC0B7E6B56 -4AE8ACC638BBF965BE16F967CC3647B7BE00D06C28EB360FF58801B5C4AE5DCD -79A68AE48A36385CD539B0682551D1D7C9B35DA190991341443F3846F6A4E957 -9CB8B3CB47A432906010CA28F18DBA32A8C6425DAB7723843421C0524AA1542D -7B23D36CC397AEF3C65D5A18B423B42E834ACA21BA92B5CC7E3B64BDB23C87F7 -2FD8B0D0BBB84A14DAE53C0582C35863FF8F372FE09DD1C1433F20DC53B0C42F -15015FBAADBECBD8BB5AB0CD91B740CEBE9D7BE2B4AECB9E5D572C52BD3C8DA2 -1C52B42DC5B1861540EB21EDCA20DCA5901578FB63A768B5B25BE7E79E6A34DA -C77D7BB4C18B90968FD2AEE3FA992359E5DBAE6CCD81CF3EE72A80C2D834BAA0 -B3E1676DABDE1FC4BA707DA236C3131DC4E91EF9716ABB2C71A57A076C7B366E -1015F0E3D69A002190FD689C11E3D137D5130EB46E27AADE6203B1726B852FDA -9A9BD004FBBA6F449309C517575DA18E7A9255152F8AE78B3B9C970C163DE775 -B9F4EBF840DDA1F70B2E20E5946A84C3997436A0F52D5EB8C923E9723EF105EC -93BC86F27DC41BD26CC28912126EC88B376AC07409FFAE4CDB01A72E5B781BBA -4316A3FA4F46A88B9B264F8DCBB9A8A043FFFBA529A134F62A05319825C7949A -A07CFF3C255C68BDB81DD007AC7D759CE74DB20EDAAE9153A9EF4E48929CDCA6 -8F85965CF5F8DE1C8E7526FB5F8C79351BD2027287C8A587461FDD4F4801E953 -8910F3D1B2B3487FA56B2A5A19E16C0DF0555B4003B3B377A3E2F877872944EA -FC334A14C024C1BEA0C8E8E18DA5B3E3CCEED380D50B278FAE9675BAE1A6A7F2 -8FEEA5B7220C84496216141E83ED512F281EB0CC8A34F29A04E02D29D4A2385C -98E61C5D507DCBDBFCDD6DA3CCDE8BFCBE2BB31875C62F5A3ADA36A5BE0B2F1E -372A88C8432526C8FDBFC2A8CD635F9D3055FB335AA1318425D44C7C290926DB -52258A4467AE67FA2A373C6ED1FE3FD47FEAAA70439A06A3BC4F764754F48B89 -A47594FD6C71901DD76C969477F61D4D0760F0D961AF9A24620C3BED85DAC965 -0D2EB1883381DAA2E88792693D52516CA19AEC59085AF2DB01903E2310812CA7 -F43D7BD3B08B3B930EAAF44539AAEECC6F35507CDDB5E92D928DB87A72CC9CA2 -C6C454D3E8B1ACCCCA5FB80D518748898D771D7B6428DD6CCA288DB550D7488B -296EED5C50F2FD74255C7B2A1177DB4D86F540764E9C51EE17F8FC39653B2AE0 -5171EE26A21F8242502DA857EBD9718319168669D9ECF8B072CB8DD0A5BE623C -C26B4862EB22EB5911AEF655ED4F52BD5441B04F917EC023851BD94BF70E84F6 -84DD916927014771943A72E8BA16E44F782B7AB40839E20847A2765FF9EE44AF -66834EE6E122B159FA7247AF41E616E5F6427F1D29480CF9D6B8BE66F42D5122 -34D7275F749AC63A93AD14E5E9C5C3A32CB1EBA1AA184EA8400FF39E0CFBDFD8 -C46078110DFCAD0CFC32606FFA7BF2183FDB0F9BF8FC68D5FE2C6B267562B777 -F3E11B16A37876A39F1824586548F5FAEAAFA57420D0CC28A57AEC1839C07AF7 -80C9D53D08C9030271E4B79739F2FB995A9E5EEF6957BA37DA2A5AE3B49D66ED -A57B58063CF1A9F7A19EC131178E8F7CB63BCC3AB7B0AB7B2B705E1885766A14 -615520B8B4752ADFADDB24092EFDD737761709D8C2B64C68DD84C8A6ADB68FA7 -2DBAAACE58047C6E051EBB8646342AEAC94BCFC9D4111977763847DABB4A4061 -292B80A451D5B0ED2908242C842B907206BD8A9292F88F37106900F8B6826488 -81DBB4C9005F5618C7E807C45B04B914B5B96BD39C432BD8B29D3EF605898309 -C7C30A2B24A64706862075A7CE7A6C58331B1E6A22868D9032C34BE24C468B20 -CDBEAF15A1027E4768EC6D30A39F68868911CEF80C074328B8210FCC725F835D -32B560BC1BD4BAE1BFCFC9CC645F24CD71CDB55D8F1FEB1CC3B579C2A6B2A50B -0C79A09838569602937841E0D6CCBED038A7635CCFE7DA841CDDA91C0C14BF3A -30F979E31B5060A102C24AB5CB6656DBEA74C04ECA37B8C9404426C60E0CF670 -B14150C7F519967FFF101AAE9B1912D0965119A31A57DDC772759F107B915F74 -956D7C9B33DFC59221EC7CA179952D0F05D0A21BFEA10AD65DFE985951304701 -1B0DA869C6444DC6746EBED908FE37E046A9C3A05263F0ADB027A201E3FDFCE0 -002339107609E666B29BAD895D1EC51C8CEAAF77C9B7900D4E48A8E0FDD7EFA6 -85890A414BF53D0811BD4424F73EFC028E1E24F827EE690A2C455BA56826BDD1 -76AE96CECB5CE924AAA05223080EA723FA1AFACAF18C879B1675E1334D14DFE0 -BB8F4390F3736EA40A1385E830E015E09034E3EC1EDDEB2ABB6B6923540555F7 -50D0AE29B82828DB755C16D3E28B9B4C003476EF672D9FEDB65C59FAD148693B -2F9A6AE55865581D54A0EADF9DEF317DB623AA0178C423C72A5FA7CF6583B565 -D68F4AECD003B6777AFB5E54B7724838FA27BBCAECC7FEFA482CE122D67C1F5A -7A89524A95B431C56180E67A728EB87E3831EE81AB8ADC8D5CD1BA34CCD3F7C6 -B57130F173E1E74167505C95E062AF8D17DA1AE20F5487D37ECB72D48EA157BE -8853F32050DAE379469C56F529867CB1DB8102485946F4642D12EA28AFB23338 -309516C967102F60499CCFA5BA738861ADF3881E4C77381AE42DA48CDB8B93D6 -8C944D9C00CD08FAF9F3EA6EAFC4BB81A046D60B9615E9E32CC1DAD8BE65CCA2 -4D9E275EBA74300318C0808FEB2F97EB11179CEDA173FD5DCD01C7A9B55F01A0 -72CFD68091BF0936F2CB6B4762B4129DB790A130341B1281239317BC4413C5E3 -33BDC68F9FC125793F1E71E49A160E70A0CFB2935384036D489ACB19385070F6 -77F1FCD18ADE1BA6128B6472D9BBC41916B50D349294BD9A8E55C53C32146906 -C33F4E0DB30DC2B1DCD95C14FF736DEC32100887BC3AD61F47D518B984DBF15F -9DCFD8D52DFE416E9330E8A7CB387993E92C40CF345CE5B4AA6237E5C165E444 -87B999C9C9BADE827E99338A935960B43E5D489216AC3A1B12553983E7387DA6 -0B30128CDB47234410C2CD262F4F513406129DDD4A5683D9A90213B15D82CC9A -CB95BF820B80792BE989F8CAA2C6A2BD03A17BD5BDD2CE037430D3C9D50B04D2 -57C04A27111800E45EB0A23BC142F8E94FC5EA851476BE4B6F28040CBE35CB92 -D58E7F283EA78F7803C9B531A641F969CBC91F76F9971D839486841F7C73CFC7 -12014116686BFC632620EA3758BE9A1BADF107C3CF1D56BFBDF38A243BDF7348 -1EAB5035A7D20A19A9244D922A16A66B9A015AE480DFF90EC74E1ACD6579A7DA -C0B60F1ABEEE7340156B4DE7DF797A6EC6931AF2FABCC7CBE12408C17EC209E3 -FA0AF21963EDE23E789F16FE7D5E504A082E0B1ABD3F32802541CA86D3DCFFAB -FB6BCD78D318EE56D9BA4D9C79727ED3CEFD9C95FB08BD05CD91E460F249B955 -AC1EE6D90C09D2C58621940E58E8BC2C7CCCBF44D8677D17D00AD53978C46064 -7F3A231901E4C0520D07A04D308BACB848FEA20D5D3AE8D2BBD6AA1637E0510B -42CFB4D7DC696414DFDB26622E3F9A763EB25B77136BB41ABAD6201D4A26597A -D5A21CB25E54EE60B6FD238905A26192BE539C1C06301AC836402BA71952528D -29E35B987EC4107D74F018410E5224C666847C416735AA1894A23651DEA153FA -9AFB47EBB67B66181EDD00FC8D0ADFB9405159BA37AEBD20AC6DE2361C787BC8 -60E969638371CB4003657300F22EB205695F5780A9EF6946C41ABBB314860407 -5E8FA325CF7A73966ACC1A9FD07183067705EF961E44784033A2B5E439679D03 -649D027F64149B1C223846C72D485BCEC6C627A24E5606919500289EDD483582 -86B9F89FFBFA9949AD5119486222D9B90A836E9F3A30DF87C8B6605FDA841D75 -3CADEDA0CD4F5E462A769D807CD93E817597583C273469E451DC0A0EEE2D44DC -390C8569903E0E1A8F3E4BADDF2810625A94C64B478F3B23329DA39C7D667A86 -A8C7980840A5BCCB26E9E00A03AF919AE303DB02E9CD24843A5C31D5C581F344 -CC05E9B78C99DF60271303F5636583D4AA19261A27324AC35FC60609C95D8A89 -1E1BD2D5D3BF85E9995ED8F5016E3ACD768C628F6EA4D629C225DB7665CA678B -CEE9262A08F77313EC07D428CCC490FC953ACBEA8B82662843EF29194BECA18A -9B9F7DA6EE5E69E1F6063891B6640E66A45DBC1BEE2ACE06966231460AFACBF6 -5F8CC0E6DC0E990ADFFD6958E9CDC3E2406ABF261D1E566D66C53FEBE676A6E6 -7CC2B0490A452F36FDDBDF720A73B499B2A24559447E6B64D3D1B9DD757EB587 -DCA3B09BBDD6270F3341F3C050D58A19DFE8DE6C967DD21191AF8D007546CB2A -29B6A9286C4E247DC8499D53F166F96E7B48F6CA9A1615156BF26569F38162C8 -379229886C9A14B7CC27079581E9E1AD044B911A204B5B5099A0A6CD4B93B5D4 -9E19292024C8B177377C650F14D7156E7F80CB1543B7D1AEC4BC22FD0CACDE1B -873D788E7679BA8CD24809A0E54734FB1DB1CAB70F0E305DA6FCE5158478FE21 -33D27702357D89436ECC6261F07609B047450F38F1FB447F44AC661B88D599C1 -46625D0796CB6907DE4EF2E96FE6619DDDE75FA874FB4C1885F533C7C3441FAB -FEEF1179C13A7C15C3742B832629F1C934D9870FCC0FC49877DEE9E31BDAE0A2 -B7D7A893BEFB1D1E8D661AA06A615166EE1A809739526EAF5748B402787680F5 -15B0E2C09D10BB1CDBC540B321DB8EF320F8762787A3550C6F0EE4A1F4C448B8 -989C8ED0646C084F39F72A0DA2F033A27A309F002779633D69E4900E716DEEE9 -4957732BA6B0DB00F3AB9EC6838E8D95C2CCB4F3C2DE12683AD34FF8D98CE70D -C2CD04BC2308FFE468EBF3E28C0451D2126E12FF74807E4EA74B6D318D358392 -50A057D3518C663E5C22D431097FFA3CE2D3BE94315C3C263E3192E2A0AE7468 -E8734C3907565B917A802637B8E17C0C3099E09CE5FE1F4C49E8F986EDC3F62B -925AF8AAE0DEE73B4554E19407D4A8AE540954CADC8E8E04C0DB4F4CBDD597DE -A042F8C1FD867A5981117894CB11DCAC13CB5B1609277AB8F52D5F14B0EF5CBA -6FFEB15BB5EE985C5BB5B6FAD69DB3DA85EA0F607ED70A07F4186A976157CFD5 -1FD77590B37B053366B2D59076E7C4BB5B17E37C0905B5A4178801DA04393335 -C2F5EC5170D36510D8EC5A3F74241D943D32D5936312F4E1929201CCD8AFF4A4 -8ACA3EEAEA2F80811E1AB97C722F5683CBD3BDDAABE2BFD365ADD468CCF773F3 -0D4CD51FBF78276CCB2261335439820D3335E049625BD62D64C10FA5482CA484 -91353DFF4D23AD3A1BB45F544DEDD955B76BE2179A3C115BA21486FEF6B9FE06 -C09DD1FE4CAFCA1638BC6C9C063D6CEB9ECF127EA34B258D56D9F466F3DE8E98 -44588EE4E2BE29AB2BA7CDBD0833E48070E2CA66569D1A31D74B3BB93C88B192 -9F41690EE73BADAAC366A5583EDC00C3A09A3B36206485D0EB6F952BC475A992 -7A08E52A909D47F93064AEF90826DF8DBEB1B8295843C34526CF1A753D2969F9 -41D4BBFEAD6445152C7566597E27074A6D65751802C955762833EFCBB59CC9AD -143BE9E315FF6962B510AD73E357C23B1E95E95D0E66F1870342066E083EC5EC -106599332D0B1C04080710368D15505BD555E08552C6BCBE59F8E7F52099DD8E -1262CD45DF1424FD99F35CEB8888EE76950AB97C325D1FC8FDA6B59C1DA5E642 -BECDF0BBC1D8FDAB995F0B42AC4B210841683DCBE8B0E57D9836EA9C5076D4E1 -FB7D278C068BBECD60136C1FEC4694E4C7258C4B907CD50D03481AB429B0DFA8 -5CEE01A1A789EAE744D80392D32F2D0D4D985DD521EE87FBEF8880B755BD8C88 -125FD6AB5BDE712D6EBE6C87E3CF95763C7F97C390E28B46DCE4BCD942C38A0F -B259F6EF84B53657102B0F531757AE6F3D5ABC4AF25682F4AA841599623AB99F -13613C3A8AD151528B371AC9AB71D884EF7605F242B0733BD8D053338AFEECDB -C04F5CE3F9B87882C241BD22612D8BC8CADD3A0C5DE9F951B4A9BD4C31C96EEC -7CD77871CB7FA20002606DAEB05C950B80428F48527800E26E462003975BE918 -6686583FA859951BD6B66661A0285D78F322604D2CF6CF12A3F92FE9B9121F05 -FA07B5FE84861D713956C1A4DF6A7899918FA425B97261BE40FAE4AF0F524D0B -1D3C7708CAC08B05D68296333F7CECEAD9DE485E3F290E8C8011B7A0AF2ABAD4 -C8C91729CF4CD7176F99ADEDE5B888EF92FE06D05E597738BDBD4579103CF437 -75A0F31B10B54642583CCA5C7C2030E21068A52CC5419406BCE7334F4861970B -1974F921D71FB38A0DDD0276EC5C2EA35C500C0806D9E06316B43F1B00B954BD -ED1DEB6F6840D36EF1E6F0DA25C565D06862BED9473D6F1F41F7B8B5B91E7398 -EECC397C96AD82ECC8411C61E0AC028E557B5AC3155EA12547C4E7BF9583F0C4 -AAD5FDA2DF0A8590B0A142287F7CD739734FA5CC5C9F4F3BE2007B055BDFED37 -D5A1414599E5BD8308B7C0CC59F59A2E5296EC476E578983C818F1307BE7EF50 -5BF52A9F05BEAED92F19301C5D754B4DC22607DF4F17C843EB25A57963128882 -1636862F5791840C87DB94004094D7472E1742AC5A8223803BD20BC0FF3B4803 -C64DFEE01FD9603B9ACAC6BCA107E276D5AA4F120C007B0720493A37EFBE8110 -0873203D4CC3F03BB8986608787346ABAFA70C97ED093AD9F8DE3898454D286B -FC6BDFBDDF3A907B1B9756431A73857B9C4605735776E00B63168AA6A7DB76F3 -3F57D42D4A742641C43C16DC4E9F9361100855DC833F154EABD36432338160B6 -7DCF1DF9CC167BE044C95A0C78ED4122DE12E8651941A9A00E9C110C7C8DF6C4 -3FEC21390330A78136783A85A410289C94B6EC85B28DD48F2D7299F10380CA40 -0689234695AF310ABCA57D37421A09245CCF60213C250BDD57D3FFC4B9DADA63 -4AE1788F0C90490780650C1BBA52139B4DD961A3650F6144C89E82012484AF76 -49C3371F84EFA5EFDAC65F27E899655F78E40DFD797CFBDF2888C10F720B55E0 -36B8670C5D0F2F1F7309F109583C440338082265523750F1872CB7C97E93E319 -D9D2CD62FD24A67DBBA77B305EE62FCFC13A60831F86F066AE738EDE223AD809 -74A5E78B2973B979B27652B12B2F65A8BE423E5F09E511623472496F1F886A93 -593CD8037AEA269C1D652B8261BE9F2C7DF6E2D923F7BAEB1089BCDA3F9F6C21 -EB0A8DD0F0CF8F28F5B2498018D995B14AA7DCC6A8C5F620F387009B7F4C9533 -C42D6C3EB234EA2AC527C551D098B55FE095645BD6EA74873635FECE40689D95 -B644F180B4515FBDAAAFFC469EDEB3D2257D3DF9F0CD87341F7D9894B709AB5D -2D2FDA926F4E66019A5B2C66A22CF7875DE999248E1C5FF77207B1F4989A1155 -BC301C4B0C7DACBD9B1A233295DBD7ED1E750366EAD9C138FCA8F38B12E067B0 -24FA74A712404A8EEC4B37BF2CA76783D8B7D4D1EE29CD494FCA463F2D95CEC4 -C602D52B102556E20DE647CB9EDB1A4C0D0D61CD40FF4EFF35C7F7D7E39D7A65 -B932358B6A749D90089F0BD9B0754C0034E1D599A0F627B6B1BAABA838567120 -D4EC81A2C61A44CAEE0721DC58FB6CB4A294B2C27FB1848499073A4282F8914D -29B158333483A2C30F1EB0CC5C35C9B44FE629F6A5A4B4227010E3065A39431E -4387E8FA2BB656DD3CAFCE39CD2EC1B8C694FF8A9D0A83412B59E064CE126325 -7D47C1E6D0A14C2E00FF23CC3B46491290CEB5CB0D77C076B682822AEEF33AC3 -72E5C3C7F130D4ECA6573DCFAE80E2AFBFCD8F75B97767336622B7186D1E4D2D -DBA4D4E7848A2528CA0B2932CCFF7C44CC84391A790844B68B7B6AC4E5247E11 -12E8B511AA79B10523C08F87C4FFD13DF16A32C14C14DDC3DFD5C7707AF0ADFD -206C5F08B6FDFBE6A25BDAEFDAC6C62D46FAD67CEBB962253F422E03E350FB2E -5D85310C754A56CCC4D415FA3EE330F65778D9FF6EDF4561971AB36976A7AA13 -65873392DB9FEA65D6CBD192D77CB3D712BA57CFEDE28FDE700E023D722C2107 -FAD33C3EC6DB0A1B8ACD2F5BDEC6664AE084E37C08DB2A394D6A03A4B5AAB584 -C56986A6A70CED92535BB8CDEB6E061803769D9AF11CC4F4B6681F7C309ABE6C -A45067EF13BD9BB6128B82B884A82A93805C7F9979E5EC4259829EB3A609578C -8B746C21E78AFFC105BCEFA657BA7E6A5232F6442C8F797CC460EBE086E4B5BE -CD71C218A4B381E95FA0193E29D9925E4892369B4F872D4D05041E04A94884AC -DDEF4B84BBF7CAB2E86CD9794931FF10CDFD59E4532F064BA6A043B7C878A1A9 -5E549CEFE02905047F5FCD191CB9421DE1DD7BC56EBD37D25CAD0B443663813C -AACA226CC461223ED82E6BC4ED9C9E463508CFAAD72D7B294F6A1C3F2DC462DB -D1D7A36FDD4F7F33C5CE8C9401117E58C88A1504E23A59E8B9028E6A17BE97B3 -A24057954B34E02B2013BCAA8E53A2A3BD80AF59375E58574796C76EB4F80A75 -65D18766C38957BAE977FCAB12B0905A798BDC7DF764A74A832F01A7EA583D2C -80F177A56353EB1436DE7BAB8FB36A72D0C99DE947F801522895B37169329106 -9231484FBF6DE63F4B2E97EDE44B80308CB50770D49F00E61E0B7544CF8B1069 -7014F9E674B59D24685755BF266F6F9A77ED1035A8101CB2B78BEB3008E75CA5 -5FD5304ECF13459607A337F5784ED89063F6844277DDA39787738D355C680929 -DDFC4CC7BF266D18523F2A710260820E8EE84E3B4EC13886E43A399B06B5A6FB -1CBE44275EC77FAD42B0D5F7F44FB119F848EFF4F93B7B4381EB3A6C70213BE8 -E90B52EE30700BD51306F314589A1154878DDC33967229B0A367AE70418739D2 -56B24EBBC2D687681684FD867163128BE945622F74AE2F6C57A63484CB126820 -17F30AD1C5329523D679696C4A7B8CEF97FDC8BA5C0C31B7F19EC8C39A61E5D0 -60A11A4CB9D899B363AD88F9297900E6BF51B5315CB42DDD6CEC555AC54E0320 -B97E989638A37897AA76614326D90977B6D5EF13DD830F004093E5A685C8CB50 -D976EF544D8C0471D3E037E19E42CA87028BC27D1477406ADBC4CE196A1EEE89 -BE9A06ACD6C17922A61705CA894C0D7F1783EAAB8031CB1C18DC3CB81186A1F9 -867B07FC73AEF3526C0ABC2F77FB35A52F82168B7A5C0455DEEA2522A5B74487 -82FDB49035062FA89995B9123F6EC3F84592158DC2D4B6D3E61EA90BE082E44D -275A6C4512FD61A3012861111496E6DBCB2CDE57F5963AF6FB129A3DDFBDA2ED -0EF9B3208FDFA7EC3B1F02381002D82BA5229E9F8D23D7802E8FE955E0DFBF6E -624C20E9707AD4C924E080F65243C1B0D53492B1D4E874BCF92862F85A47A010 -C32FC9FF385860AE6C95481FD8B83B37A86435AEFC6230706452993982ADEF24 -8236F5D4105A4F5C20C8796778B8C3ACD4D0691B984459608915C7587D382C20 -69A1DA37B0E75C90DC7060A5971B9551A593932FC8A137CA32952BD67B6EF041 -53E8AB1D2DF33C50D1F8B46D057333F58009BA460057573463E0895AFAA843FD -99F54D106E0BD9C7A87F8930DA17C78FA0A7057314E1E450CEBA5E65CF2596D4 -13684ECCB6BB7BA6C778127C4D69CA2E5F39FFD757BBDABDE26CD4059A85BED7 -C0FBB4C9428796356EA5F3094E76472A79E9E395F5CAB8B49F991F4D20CFE349 -D07B6412320C52F18EB4E87659D7E48AFF69D7A415F38BCD5BE489256C1144BD -281F85F7A037E4E7C8D141FE449D16F8D36D9039B298BB1F61BFCCF6737178B9 -ADF9A3A184489C6D5EA2B6C81CCBC3D89072F5093025BA69B6A29F2976898824 -406D932F7F3A6EAC0A65A7F016FFB80D0738FBC2D503E2531433E4F074D29DF8 -507C48857E39E25A1EEB835D5300ECFECDFF08215141C7B6100DFA0BB932334A -A4250162E36AC575FAECB1174F20F11EC6FAFA4CD886C023BB60DFA8595BDDFE -BCE6792B85B17D046054A266412F96583F76A66DD1D25599F31FBF598E8E9641 -7415366257EDACEC2D4672F9165BBE172F11BA76E5783CAB60F86655F87BFFEB -08E31DF6CC6863D05AD0ACCE9AD421437D17090354412872287B6D9575F45562 -C35597EA596E716B67971F5667713D8F2A971285C4D1B67EA77811AE7799CB13 -E357B1A03D5B71F3A7B836F74E65DC19DC8822277DE8B0073EEC17ABBA940B34 -F664745A79EF90AD4FB007C3F7558B84C98EAD1C20064082A2714539CC7F0155 -87508D192DB05FCECA78630C4133CD827932A84D21CC953B999C8C851A224B83 -F3EC014FA0D80C0BED17A359872160683A658B65309BB92A871B736E1B5E77A5 -8C43A658A9373F92459653C47707297BF2B08A8087B0D0E9BDAD307F118782D7 -D7003D9A160051C772E5291F33508921E1E16E48C03FDAB0F1C33BD9401CDF51 -9C7771022D3B69FE47296770914BE6ABCD4595116E2CDDA1139E6C0236C217A8 -DDAC4962DE70098E71FE6811A2E5441A54C5C91C2673482AFDDA9F1D25D39BA4 -667AC88E269E0A5973EAD0F112FB692A8DE56CD0840F2D3ADA9E35C8DC532669 -AC8EFC8A473C52E68A47C2EB6D1D60FBD80039C1722CD8D33121C295EC3B0949 -9DC8E10A76323B17EF0989B8C811A46099B179716BE70163106B15C58FEE49A6 -2BC6787698965C531312264F7AC5013A7F48C25D3B484D88213E093F81666D22 -D11A0FB4FAAF8D579125D58063D11ADE621799BB9CDF9394828BBA7C73BCF863 -B8B83B42C94AF06F076B73212756A3B6FACFF9F4AEEF704A5E8F6E66204C3EAE -3042E58635DB16E2B20D6FBFFF4FE81D34DD3E3CA24D9870E81519AE8701328F -B7AE637F2E009C8CAFC9C8CC9FD212A8D04236540FFFCE06A53F5E0DAD66692D -CF04864C36BB8B932D869AB4675FB0576610A39E426E16FDF718940E11FBA5CB -5D80356B2E191F3A6EC7062A60A91ABA2BF455C38A88681213E358016AECDF6B -F29412284CDD0EECC405ADD56FDD02D4C98324D60EA23BC8FC61849D2C8CDB45 -EE7996210A041FE7DD55EC3CB98A89BABBCB11EF1DFB332DD2A053E2F4DBDB18 -D147A80A364AA417B4EDEE6F799D012BB094FDCD5E2FDFB3CAC7D592C7B04C92 -29B6C5E2DE5B1C88FADFFC69B356394978FA36BB8DD4B8AFCD61EEC7818029E2 -86B5135FDAD4C4024472565F1154BC76FE9450FE41BBD47CBDE835D888AF9CA8 -2AEAF152D0EC8F366DBE7283298711F4E19A262AA773A4B5E2F83E514AFAC904 -ED893CE36C8CF3A4032D79B3DD677E49E40A40ED8B818D1C49A49E9135FD3A95 -CB47CA7EDEA07E1A5583B92D7DCBBA85AA62C70C7C79706F69C374EC8C9C8DF6 -85FFAC786ABEAB4C650755BF6B5D8B0D7C73E8FE45DBAA508665EDAF8FC4C49C -3A053156D255A9857272D167DE1999D51869F4329F336546D8CAA564C40E11F0 -9BFB24D7A92E602B520D2FAF80AE1F2306A6E4FF24EBEB2BE5F43AE99546F739 -2C1EB46C7E678416F973FD64C8F9A8FBAC24DDAC97FC3BAE905285ADA80EE265 -EDF710944473FFE82E0326579BAAE82A11EC1796F66BFBFD9D42B1F1844F146F -468436F1E3B101350A15961BE3ED3B060EA6EEA54B4640F9135DA9678B776415 -0EE9B4E2023FD929505AC4ABC41870A287913B41A29D4482439081B22E4C9EF0 -606DB52CB4E42B258E26E398918AFF672DDB8137A3D9E56AAAAFF283CD204F60 -1A7020497BF3AAAFD5D19BC5027129759552BCEB666025A958E3C89D87F2628B -B1CA120F99A5011E364F45524A30398A89324531FF1974064D8E442FB7F217BF -0DB02F38BDE00115A217DE0B6450DD5B06C1B4335B55DA1B1738927CD6C0FF64 -82CA6B57AC50923C38343853D1FB4F04B8A5A08ADE3960339D85271E59CD2AFB -2EB22CF048AAD9F50E5D79C8F640FCA9357AC2201E2F111B19E9E6D97837356B -4BD21586B4FE993EAE89C196D08C445A0936D9AA5ABE103030F5054173E33ADD -A3EBFA2DADC766577FC0EE7AAE0BE5FCCE4E28732905A49107201BF8DF75C2C4 -8EC78180A36420836D6909671E85B0FAAF3771EC118B6420116DC43983CF83C0 -98513F8F231E9C94DDA2BE07461E9738659913D3C7157269FD28A8B32CF11E0E -9548AA110FCC71B3F98284962854310454D28D8E38B37AE93433824FF61AA808 -5628F23DE58D64EC1A52AF495DB65FE16087D1F3FA0A36319B517B51679755EC -9E19706ABE12B8E0641336FB8F05FCE1E6672820E3E9C5EC624186805E4399C1 -F55F16230018FEFF64C51D5B89E6AD23D260551504393A9DE155AD8B545B4D09 -EA2EA8275E104F7BCFFBDFA9F8D4526F1DB9ED1687D1B74370F747B0B0E4B720 -CACD3A22A78819EC6CBA08AD1E7A729E5E42ED9B8D5166ADA2A94EEDE2627751 -336CF3F9033FF20CD52BE3F56EEC67E5B732998F4B1F136736987F4A2605A64B -1E95A07F5CB058FDFBAC5758E9F0252A31F72ECC06DF1053E090762D17AE84F0 -0424DD6FED7193F99520FAE01556CA67914867016AA86C1C72F87F5D843DDE28 -FDC16CDDD89050A337E455DCBFAF605FBDA91BBE7E3BF1E88005CE32291C52C7 -DC2B3640454D0C36C05648DBEDB2EEBB00F585D371E7B2A9F3B1B153E5635002 -25F859F46BA3CDEFE809C80B1DBC37438479DED51ED2647F405CFBAC7A429360 -4AD394586ABB312F3751FB1328B15C7B15FFD6B7E92B3C8D61C99C8054A33C94 -F6A9412EDFD6894C45AC431D1B29E2AE959D6B610A91725265C4EA7A865A64BC -CC1BD93DF0828E529C0CD5744644F08FC05B88A5D0AF329972E3B2CC2768CA75 -05DCFB2F758327BD961D7DB6C8401F3337D0A72CA5CDC00CAFF86A5A40BBDC38 -904BBF359700AE4DAFD9AF7B8731095AFF6F0572E857E9E8AC1C2DD5D74F5FF2 -DF3C0B3EABAE300C043FBD2E64AF0CF21ECB09A78FB62778C86E8E5A356B6007 -12ED08D19AFE705CE8E73A58136657E7357E074BC661681B4CF919B0B01B7D87 -9FEB2F4955DC17B86633EE72F9BC1277EF7D688E7FF5DA5B8E5646FB7A5B0457 -F37037F76100FAF3DBF4504F203F569550161D1B578E0E03EA93857ACF26C58A -B75CAF8E1BF6BE7DE26C974E540FA8049EBA2D17B4C7506EFD6E99B776A78613 -3A953BCA37768BB990D56A650C70D0805D21856301BA9ED1CE9CA46DFDA188C4 -F5C73416AD75903FBCD6D9661C4599BC07E28C6664C72606BECB75783FEDCE87 -29EE7DDA74C74E62BD1F1699531892540E34B795189BF088923E21E65976588B -A3E06B30DC4C62A4E10064F6D638CCEC9189A7BB33E8B599CC2AB618476D45AB -55CA9D497C2642B6F3326FC846AD02EB109AF7D9866B5988ADABEE994672085B -52C906A7F28343FE913EA90B9ADCA82FF8EE7A1B2F3E43687F4B420B5D551846 -3CDC11E099D8B0ECCB24B40C74DD93C5E40E9F3BB4814840A14A291191E95446 -2CF04B18F0E7DBA93BF4AD458F584FB02AFEF085AFC248263B12D76133776A77 -1343CD1E0BE802CF9D9A6FCD7F70277B10FF89AD4A78405C4D3C7C6767ED85F1 -20859187EDC5F026CFE93BF7DF4DC0B32D1F4660B5995A2A79A8FEFF93389CCB -93D00A3CEECD3B631015A56D9E6C5E30D36DD98E6CD2A3F6148940AA180D7E02 -4442FCA1EC0950FC292E35D3A1CB8AB4AA1EF85B6197BA950AF5D1CB94712C7A -57500E5E8B1B0A05D865672B098BEE02BE07A01B0A9CA67BF7766EE0EA5941D6 -823ABCC777162C9E35C8451EDA76E0F06E758EDCD0B65BA8AAB143C339D9E843 -24E12148C2CD94E6025FAB0093011ADBF3199D7EF02FD52A7DFDC782E9BB9DDD -D76955BF841D7A75D806533DEDAC7A906D6CCDF5990FA64F38CC5C22A5270396 -0A8C7963FF5830231D6BC7D0A18A9939B159B50E026AD34D7A8BECB7EDDBC6EB -00546AE102AA3D88CB76D9B816E069F1821BB2804654802E8EDD9A9ED2458D99 -C5C2D04D87174093282AC0879457510CC1A8EC14B3CE72B4207D7D35F0F74B8B -0F121DE6EE1A189BF7E076302AFA5C0A09BB8095D32F469E08575E6AAC4AB9A6 -BF82FFA86CC60A3A34D1EA753DDE232119D9A4891B77B9527FE9D9DAE34D6944 -CB9EAE528886AE53C91EA315E708213196A01CDD9A181EDBA37AE4C63A23FC75 -77C3AAB05987D3BC0A654BD9CFD5E6F48D8F4AEDC967A8C51DEE87DE9629BDDD -680515991E6D71FD417CB784E3EDE648DF8912EF71BF93E20FAE714E422792D7 -2B5F02A314191CB65DDB648898594B44A33F1252676DFDE978BD0188390120D0 -C0E5550B77CD3A08CABCF2FF5B62C59B2B6F95B8A2D8F3DE2BEF93E9CBC20CBE -64C51CE0E03300459F11451F42C33DCC1D361206A1FBFC4FE27A48F667892C7C -0817245326322B600B6C323587E7A07A6132BEF029835FE7CE5DDD5DA26FC5C6 -786FED8425EA1D113230D161A78BE519538614F61ED1E92DBA5A0D8B5B5BBC4A -D875B43B1986449AB67508BDB269D2549D2F794881556DD132E18B657D33C2B9 -83DF615A05ACFB843453E291CAAD9E2CCFC7490F9F6E57C934C5A92037E866E8 -3B2785EE6F10F6D4DFBC8BE8DC383ED4750E67ABA0A74669E2C53FEF09B69CD0 -9D14DCD5A8050AE52F0BEA66BF37B315DC6461CD782957A3A14088A7E4016815 -AC603ABBBB4E179862A20129AE3E4BA0ED6CE562F7BE1C8498A17CBD58E954F3 -AE82734476C567DA005C28510423C7914655D53B0CB094586A0509C190F64770 -C55D2EB3329FFB1D67E35D50533629DBD88986444EA470207BC789EEC011E302 -4B5CD55C640C3D1174E1EEC5F5A1E68FE677BE2D0D8694394C0563734E6F08F4 -FC35024975ABFC560C487AF7AC9961D912E620305A58907A0F7A9CEDCFC7453A -290C28E1AF0441419571546FCB5442A20674459E9E4E56D02D6D636DEB263A85 -38C63FF6F4F07EBAE0E3E204E94C4A56AA818FDFB54BBA54DA4C25A55C2025C6 -CB6483BC3B55AF578CB4BDC8DB58FF5463D1FCCC63400481A4C3CF4AF3D2C61C -A7ED38B6333A755EA1190CF54F7881D3F9AFF6408FE2DB0FB36321DD833CA4C6 -25816321DD6E830343CC5325331E765DEA567A8A1ECB8A7E54AE74C7DA049606 -EA4BE6A9E13BB0084093BA80DC98BD5E214F34ADC9452D4A9512E550FD4E97D2 -A64FFFC366896E8325A6A816D04BCD8BBA114F6469D3BEA397E35C7F91AC75B2 -2DDC5B9BD0BFD8C259E0467F5E874BFC42EC6ED7FDF043469FB69C9BEA747915 -778A99648F8F00738962958D1D87424F2667E3788E945895CFCA9EDBE7274A4A -BC44F16EE2A78599CD73B41E189025BA088573273DAA7D6A2AA19474AA29C1C6 -BD656548816750A76FCCD5634B7599362FDC9B4A252BD5667C4260F1116FA856 -AA4F363FC6032974DD19B5989D7D27BD59B8A0ED42FD9D1DD2858125583F28FE -A266081D50EEEADF0DD5096885D7DC706DEA8460D04D3900E9E081F92A6A1F95 -3EED1486DFEB20B3DBDFF252D0B2DC7EBBBD755FA3929015205986AAD7404ED9 -67AF080AC63ADE35132A4AD0E9C63C600326048179B6AFD1907C0912113199B8 -427C6196084922B5A0F5E1FA25052DFA4902BB43D349527468A9A8F3732DDB4A -AD1E9E3028B8ED4623D8D1320CF8A1E0B29C16DAB4A559EFEAB0D234A1A7D8BC -71B25D5CDE127BCAB2AE7E71A328F2CE9D3EC9D23E370A5E95848A00F2D1AD8E -ADCFEE7E929F666EF63CC9C90CA02C2ADDD3216C3BA79F469738D1B2B6349F72 -CEF3CAC9F4B4596771D6EC39E61B9817439F0380A57A97AA04091D75B7DA14AB -0B864A58E00B4B28F054910709B93B37AFE76A7EA777BBEBD9A45889FB52C6FC -FF985679C9607AE167EAD42791BD42DBCEB89D356416A38007220CEBF4A3203C -70DE5BF488A91278272E337A47CF8A5F12F95641AEACA5AB485FC5A316BFBDD9 -3052340DD5739FF1C1F850DDEEED70968EDB150D50D7A1F1C894FCB95F9B4CE1 -79721CB1DDC387073BAB999EF40FAEAF721B6BFE427276E3AB02143D3CA60AC5 -055757203EA5071D7730811D723237ED10B83B457BE6CB673B5BA4BC097C6293 -EBE8393443B750766B87534949057B7FC8265048A748D61C4B80F9109CC7E1EC -36217DCA2709BFDC1682F85E75E0FCF3235ECF266A78E859AC400D5D02ED385E -7E30492DF22D7D5B3035D2162DFF1795E7E9096BF30957B3F75481F31FA87916 -D25DFE1711390CEE845A3B7842787985B516D60A7F3636AE0D036A911771BA34 -866336E447DD88B6892A00BA6C017156F7D4F4E613BF163EA2F325998F046CB7 -5EFD1077B1EF7D9A40705FE2AB8C9D3200EB1E5903C5BE740B88B3A46C6154E3 -F702924AEFE30BA19D64C20876D8CF14877BE2F1FBA6D2A52D35C395BA35016E -8A9ABD8720C1A79360150242FB188AEEA1D02D7BD70D15CD0A4261B185ECC8F6 -DA0D3C23250D6B4C188D10D99F5B0B8EE0809BB20D0189D2E8B6FA6E0EF6E415 -890DC4E9F8252F6EE25830D5BF07365B58E0D682B4FB236DFBE36F32CC574B75 -9C997F3E74832510AC57C496D8F131F610A607246C31F548C859DC34CAEB66F8 -AD4A6355C7D04AE6876746489A94C750471DD1A33FDFDAB58BE702D1EA89471B -1E73286289ADAD1935BEB2F17B2EE77AFD9FB1E278C99F85C6EFC112C997DFA5 -66FC3238FF89BB840CB6B9610C983C24424EA95A2229CCD0D0B62DEA1CE377EA -B18709581246A060B6181D0A99144212DD9D4430E8B213FD5F37CF5EC4E11DB1 -E3E48223B990724D7C8561A9FA5CDEBBD4BD866647653F4DE6D794FDC4005D88 -C2773247A5D6397CE425E51B96C741FA01EFAB5DA86E5435365671E2BD29A628 -BAA80C56AF17B725BA84E5ACC005C658105162FFE81B5CACAEAE8F3A22209735 -E470CC97B04B0CA0A969E41E94EBADFE40684E0D018007D1267C2E27F4176BAA -B484A032B0CFD0B3977322AA298EB5A11ADCB2F154294FDCBE9117DD3FA00587 -83430596B2D432A471615ECA7789A6B01BB496309C8424C818357844F34ACEA3 -1B71F88E89AAAE14BB7EF728D75425CEECB1408334D2836A9F62D1B34A1BC9FC -25A43F2C69F01F3217BE0487563E11A9DEBF88C7655947F0BD725280348F9AF2 -864C611638D3B78B26785DCD3E05C47D297A4C6BAC0840C5E3C646521C7DE8AF -CE9CC7AF715F62AA0537E7965EF4158276AA8C7A1EB9D7D61C423F39CBD918FE -EDFE99AD29C73D106F7F1C3DCD4BDBD56F6E608846E32CF26DE47B08C53D3521 -9F8841AF5554757D0CCB44FA7ECD5BDD0C20263D097D9975E1C41DCEF4D8C9B1 -97EC5977EA0EFD9E405B429D451140105161EEA54D4632D6EC6220E28C7153C0 -307E1A3953DE1CEAE5D51CA6C58A15B69BC2528B1500BB281C7E90F40453A685 -A329867D17142A7D2FE906E15FFAEFE641EA5109E92FEE41FF134E8BFD57875D -D4F8270C12808FCDCEA5812812501F64EC79342DC192B20FB93A1A6E0475DB34 -B7A662C95EBEDAF862726ACF65393A719980839A9C05C705F251E6B46E276CB0 -127CBB7EA4C251B0672C01FD185C7FD287791019D8FBCCB391E9B9F818BD32FC -E61D57334FCB2266384D8FDDB094DB86E87EC7789A3287C1194827A38926AE50 -F6DAF70C2D3EB91238D87148642EB0693F7583F0D8D8E2B6FAB7DC139B06CB0D -AEA8C08415C14B835BB928FB81B7DE129A08502D89207B8673BEDCF22024BD99 -5777574A3495BB18121903550084E8FDDE6F940511F23FB95104E76E3846515C -F954431752CA60C08E345CE8E6199F1041855242A7315FF1ADECA2A23B7218BA -F7D895AAA7D5C49AD7EF03CF8A2EFFCC1DADFBC101895D17B0C3E102C7DA16CE -7BC977E49BC120C4673E14F55D00FB30DDFCBF592AFA42A887322F25C15A100F -82F5D3336804E68FBD0A470FD66D0566F0FEADAE76BE6A436D715BE62A653700 -BE088E4E594D99611E0ABE626A9AFCE2E7066B65295DC87B6A508FA3EA6C0C43 -2580AD8D9266FD81E825C4B0F908DE635B650613435DC700B7920A3B08BCD409 -69D7E559B5AF1E98D02169D4F2BC0CC08CF94FDC62D1877C823D886569EB5DA5 -B93EC5F0283B8ADC719A4831C107394919DF585AB3BABDCD98A63B153DF2BC7F -55EDD18E2195CCAC549C9B4CF3B91156ABBFB56970EB689EAB871D6FB5919B3F -21418C07BBEC9FFB2E1C7268290776B993363429B20A5D4C7C66D1B3DE0256FF -A3A1157C96BC1CEF6F6CD55207FE4DE2CB26E799C768E1DF47654968F6A708A9 -7F42E3A32DAB67EF6D16146793C36FE6876F1CAC18B409D5A5A6408F13CFB9A7 -141D3D25FC0027F6B7FF6D186587BB146DE91530B32B0F1677C48C28D54F3967 -C0E9C3619F09878D2C2A6112DF8FCA1133BFEA4AA87D358A35591BA6F402E7C7 -404A078F95D33AB26E0595B5BFC85D6D8BFDDE1297DCAADF67E1A30DE26D504A -7FBBAD316A050CB9FC56A10F0A6721E61E87A462711604C33044D6197C0A52D7 -236C147B09DA467579C62A09BBB25DFD9DA11773EBB8032D1946A35928ACA3E4 -CC94CC723D4FC49976F39EE66225584DC3537EA4138AF062951CFCD0BB9D5D41 -F119E670ED47DCC59E67DF658942835353783F571801BF33922D8EB886AF461A -EF66824F731E5E9A50B153195536AE96FF7F34F21598C83712DAA54B780FB815 -36880FBFD56675EFF13E12A8EDA31C76F6367B818089DCB9C25464C47EC3968B -AA0939DFCCFDAA0D60672A349E2E4768B386160EB8B41FC8F959D45FA8831BBD -4EA49CB9F152FC8D730216129FDA998DB38810CF886864927AE9F047855AE4CD -DD6BC5C4733B48C6614E9E9F7EBE404BA26E352CBFE1A533E9E74C78EE17A9FB -148B178F503B2154264C21A39B323D8B4FF8129A8E101949DE2C081E28D05DFD -CA2E08F44BE9B5663F331D34D47C8876AD9540ED7DAFCFF0216D6A50F7D9C00F -1591AD6FB27CEDEE703D6C3D9D024675A117EBDDC79DF5D4DFC7F201DADCA2A1 -72EB9A21EB33F5C8325CF8D8230DA66B6C7BC504386ADAC40C00E20BDE3B5F2F -111AF81049379BBC4712A78B6B0A33BF40512A1C42E3095323D07B0B85927AC8 -29EEF89786724EC48D30B8F2F26831BC7238AE0786936CE46FE7B2426A09D370 -460B950E850FA2D6710C50E78497C27E5FE43B7A830E67C5F28219D8B0BC1158 -0A2B02EB3E7A96CC1B6FC8B3DA8708070CE1C26AF0B7D80D83021FC27F0322F5 -2C3B92C29F738CBEACB1065948289EB43E334B5BF6FD7CCE82FE9DED9E3551D8 -1C4F66C9F9C1A3BAC534D79CDED98FB5A28F5E7A4650B4F3DC52058B619FB0CA -3DC70998B508CAC359C469E488B925685590AE5084C4EF8572EA48DFAACE35AE -B9CEFC91F38A26A2105DF9C3B859674F6B20F9B3A9B7E2DD2FEB80A899FD2731 -54AA5EC8D6107A55C59A9C20F2990B9DB221908F629E0E45E371FAA3ADE91879 -84479D6F3E3F8F2E972606BCD37276E9425B893233852201D8ED2D753B33450B -1CDD8AD735BEE3AC8C4E4DA651748B2333B972B6A9DC1A133E3D695D6C975067 -228ED6A4728729D0AB55040AE154F668A2DE8CE6CD5BFBB28A9DE3F90E358BF6 -1BE66D7BD0409D59A6E3430C2C32DAF12D55A8356E25B9B805A69B828B399F96 -824B96589D5CED4A9FAD83D70D12E2CF7C9B9CF34E3F55423F478A2B8FE24C6C -FCFD80E8898C26FE65DF206C2BE1C6439BAFBF809046472A059F53CBA38090D8 -E03AE270F456B2F63987F18AED9823DBDD39F8A175770C6164D839BDCD7AA732 -E63379F4A5C45E217A5F37AF8DE3F5F463BB67F57192F71AFAB06CD96B2ADCC4 -D9FFAAA11B176A5CCCCD8FEE8453579EE23F97143E6B176418184C0F3C004908 -38D73E689018BC811251901EC141705FC39D61A3FEAD3D869A1CBFA833AE9FB5 -659AF715D30854D9312919DEDD227A4ADFDBBC76851DBD3427A28B9C957396BF -6E530F570893A2056E53515D0B5A9FB44E16F26039161683C3F4D34A87E1A631 -7C262B4A9D1175C07239B87FF6756B5AEB02E315659D938B7E55CF59C35DC48E -006F444D7D17178FB459506521227674339CC9D1CC80C3BC472B026DF0A45F61 -A8940F2D6E9379B95F28AC3BA13987E685E4C30BB8F6BA6562EFC9D1BFF66E1E -AD72AFE048DA95093D064B0E692CADC6DA786221CD5655FF768B51FECA289395 -7062E952A0347FAAFD0C28F1ADBC0BB121F0AD038DA635D0AFFD2F1D65A769DB -2F69BA310ABAF715AAF91EC3C5DCFADA1235716A9F53A510EA3A3A21D1034163 -48A7963C8B12C1DA71A02EB87C2863176EFCEAAEBB5289568D37689921FCE677 -7D874CCFF1A72391F25CD922DA5A7B35A0E40CE40AF2521B567596DF422DE776 -A9DDF64744F8164F24985B081F0E73F43E43217BF0DEF9CE522CE604AB739192 -BDB8FAD799C43F17AA436B7CC97268A73D583BC579B95E56B2FAEE303A565CAF -5BE8FD7F04C03417A3121966B549FB7E7BE070C0B05A6961733D4F189B78FD41 -412EC99F5B7E841DBC5A7503E5FDFC10E85E2DCF4D4BFE9CE967C09139082FA6 -F40337731B9B6ABC831DEE16BB3DF818EC2B701210BFFC32CFA306AF069522E1 -C05F3A0A0F93E7251FD4D57FEF2211F79422C5172AECB8B51D1FB521924E43FF -54BA9A4FE04BCECDACDF64D00D736272937F9257492E90A83E064051ABAE4FB1 -8FDB08EC54106FB4B3289FB095E83299B57CB6276B78F465800651B8F7C8479B -1C97E0E31CA741CE73234440C0C62FC373006DA598E550AC386DC6E0932F46A3 -8A0588C3AD1B862FC14D9A8910574C17984B1127B6985C969729898A9197529C -2897CF8A077FF821BCF055C2EFC1948AF0569AAB1ACD59F15D648671E726F3F4 -2312EBC0E6BCA0F7B977B04020976AE645A5738401DF2D81720C4BC90D1132FD -7334F2C852838583465DB27C834F3F10B1237A7DAC5E0136BFC785759F29F5B7 -CB0DA5C01C2AFD7460F14E03A73C818B313824B23B1B5B7443E3581E3BC11200 -D55AE9E7900AC167A7D2F20935FD72F33B695F25B6F08DF95677 -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l047016t.pfa b/client/nfsexport/lib/fonts/l047016t.pfa deleted file mode 100755 index 48094088..00000000 --- a/client/nfsexport/lib/fonts/l047016t.pfa +++ /dev/null @@ -1,1356 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiMono-Bold 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Mono Bold) readonly def -/FamilyName (Luxi Mono) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0.0 def -/isFixedPitch true def -/UnderlinePosition -88 def -/UnderlineThickness 83 def -end readonly def -/FontName /LuxiMono-Bold def -/PaintType 0 def -/WMode 0 def -/FontBBox {0 -211 714 1012} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078984 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83C82A2DC38F66F08FF34 -E7B34FBD496A97F0AE69763627499CD43525BDD2FA2EA9DDE51C821C26AC69EA -AF027BC54141332FA165BFDE024DBE6CD20A8E4EF56F52F260AEC28695FE9141 -7E7F100CCF64993650A81C0856688B1D101418D3B0926F70BBDCCAF43FF4B16A -B8328A5C459C7D6DD6FEEA1AD5049C4EF32D91C30962146E922D498E4D38D172 -CCFFA8F084C6BD440ED2C77C1B574CF8CE25AC39D2B18C91E596994081B36688 -EF1C949FBA04376ECBE32C3E29ACF83A8C36569C315CACB3DAAFC2FC8FF68839 -D9BF2A301E3E8F5B27EB82D8DF5D70444998F05B99D26AD632FC21A81D887E9C -80BDDB95A1C0FB1F43386515E0F2903E3623B19F363F35885143893761E54BD7 -C9EDB5940386C62FA7A8919B57E4A4F0D9F3B4A4EA82C071BAB90B57C7A0F553 -BEC3A57EEB877476FACBBB61DB74A76D95DCE4D5C46F9686AA5176D6B65F0FFA -37E1850A881EF057A62E3092D923107C691D32F3D619B05DB75B337EB54D5505 -2B7669A69A162DE45E9F900FB8BCC2BFB7AC5CCC64DF94DA97386D4E4AECAA28 -A9CFF3C9CE3031CC890E563F7A110D4690CDC5BBD49F7ED21C6E635952FE3ACB -02373DD80C2C653E01525504AC37C849D6C5F25DF0C5C762C45A83233517EF9B -D7F67A77881F6B46BE10E458FBDD73D225A6047095AB3B7AFE9FE2113751B732 -950B7865DE7DE98DDEC75D3D0311E902C2D7FD4A7F08F481ACB695078B930EC3 -6F3669F4E50345CE0A4CF1C739BD8A92BA29CF5FF0C3A85B687C0BC0BBBDB8D5 -DB96AF1962948038D1EC4ADD39D3DF966ABB57CA3017A28EB9B2148D1AB72F08 -899F5686A2013D69F6D3F5ACFB0503DCDF2D93CC7722D3F7D7486466F32741C0 -17F3D8F2D64063A9CBEBB462D4CF8569EFE4DEBE6DF3CD2F3C2AC955D8A20B1E -A0199D05C93CE0F92ED01330A7C9E65E7ACE079CBF7616F24ED2AF540FA4A1FD -5CCC7A1057ECFB91B02A84499F9209CE5989021F4D27B2B20D4793F6C81591CF -ECBCC22005F89BCD1A089C36E659BF3BB92558ACE98DBDF10F0F6C7514356F54 -5A8BD7EA0E326494BDE14D91C6C74224FCBB42FC22FF8F819AC8CEFF7F28A56E -A86FA3DADB388D04A015B0E703553CA2C2E5B688DD49DA92FD89107B744BDE7F -85986FC9C688B97C67C0C4C555EC943D5C6CBB8BDA89ECEBA41037A92BDC075C -3C2CC573B084B19EC7FF10FBE814B0226E216452BAF96DC3503218F49ED279D3 -CDC0369901B7764918E8071258114002152AD47B0ACA19066B5DDFC7AC37A6D9 -E49FC3A5C16F51A5B86663E15139A063C5D408C562951934700371469A49A940 -FA7074CAB31DF454BD990124F5E70B4B6D62DAFF949FD73DC758598B34376867 -3F7BCCB83086D6AED4460D71BFB2395A94A27CF34DACF70BEB4906BC6DC19203 -5512F6948158915E228603A5D4B906997D51EEA9BAD01BE45C36BC39D9C70778 -D6F8619B3814F7A3E9E0524C8DD61EC63E8B4E15C42FBBBDF8257442E5D2CEC0 -890F6B2476340387E8A4E21A09805F82A17392D2AB3CF3429DB5FFEFB093165C -63525A9BE659AA22C7FA5DCB894DCA8D1560668636FAF723B4F618936EE634D5 -EF823BEEC25B274EB5E8912BF186A537D3EDDE38F09801E74D5885919850F48E -A7A8AABBF6625CF2B0A9843E5D9A499C1047C490EDF9774F02A5CFE926BDBAE4 -18843FD4575E8634B27E536FAE9E09084D3F73FB29B9E4AC002E709986A90995 -B4EE10012F74A0BCFF2A6C0A69D945C19DF4F7070D60E3EF03508AF8793BD70D -5D4BFC8BF5A29B4339C799EA8AA64ACA925A37EEE489C7FC8A31F5131F386A23 -C63F7D3C6BB60E204B169AA01EA12B590B9F0FAAD50D030381CD0C6177D28538 -377F92029F2A448F7586C7B14BA5BA08543D8216E6875AD18E974B39A53B5D3F -157CACE3442B1948D2C44DCD88D1604D3AAF4487B4919349B7F0E01302261204 -50380294937386246EC4444C08955919A30118566A9B9D409F58255604A90782 -0583591C68296746D4DA1BFD0184029B73EC4C955C7F0BDCA08D8B85FBFA4CBA -336BA29DF59226DB39C3B02AC5A906857EFB7A227A09FFE63BA35DE73434BDAB -C11BE30C59E650592C518C0F533FA0CABAF3E2CAD23E69776879CC7A9225A086 -281FDF2C1F72FCA1723A5C2492BA061FB6D73F6240AE5708521AAB52F736863B -B05E53ECB5C64A26B277F106FF2E0C9699719335BD32842806F0F866CE4818FA -F61D141532738ADC2C8BCC1145BACFDF3BE1CFD92914C3945126847769D6DD0D -6F44FC9D966F224AA72C22D0EF953B2A43C93E581DD907B611F3005D62C25162 -FD2149DEF7894A112449FF5F43D8F30CD7DA81D408E85F89DA78C4998BB8A24A -38B9F346E5FBC6D09EDF332B8B7F8EAC363D0D01708C24655412AEB148E28D99 -D9F41076F0E7BBF10AB96BBD72FD05BA982F673D3D79270107C040707C6316E6 -11E4FB04A320621B6C3E10575FF97A28B60B30B840A877A5BEB0EFCCE0EF03BC -F247ADE0F509EAFD6CD7F70B523E6E145EEF8AC9C17614BE65934DDC17545C4B -50770418C185606C0A01B2622CADD9CBBB97E14A92D5230FB7ABE7D0D8CE9047 -F64225C6D488695FB9801EF4C76E20340721F7734AC114B3E6041D4C76C11F19 -3326FB3DE6CBF4B4C1F18B3388D6DDC000F04E195827F68CDCA2E0C411788B05 -4AAD40E3E09EDECA7817AE2B29316063C8579A90CF67D93AC158E940B14FCDBA -3B82EBE2D4BBC8A8B22AB531DDDCEF6E4104314DDC2DF028E2F09436CFCFD32D -0238D1C9C0404FD97DC627773CD8022632E4914D40283AAA5FFDF86914140D42 -0C4350BA37D3CD49E1D79081462E3701DC0A9E9AC67D712BF7CEC27C1200138C -9729AAADB724BB9FFD5B831ABABEE5BE8C270A1ADF85A246ABB9612F181730A2 -30B9886D897C2EAD9AF7E6A47DA049373049E5E4C29F5B7DCF2258A1AF341CB8 -C5F464EA85663A9B8132775E4B8620420750161C419F88594908C64A2BE265B9 -84A950C8B63C065B1FD4F78121F582EC875F396E0EC8F6851AB87C36C56EBE7E -036ABC0D89D9FE8E626646AC65DC5445EF3FB60CC5C50A5118F9F248FA15B3B8 -C8A88E168BCC5488D10CED157A8EEF8EEEADDA64372B76B944685B686DE8AFC0 -F4A376200790E0D0DB2172C80E6BF90052DE847633912F72840A5C745DA4E774 -014841DBB53EDB729DA7AAC1D3FA428DBFF252F91BDCFE3AC31C2CAEEAE29045 -DE7F0795D6D924180292E18B3955FA93DCC555683FCB5FDECA34EF0D0885ABA3 -C7BF9CC897C6E5737AF9448C952269D18AAA18FD1D3C2F5DB49D652F43E6CB21 -D22F7ACA596DE470A1264FA065C0B2CE3C58DDD168BD28D6A2FE2A41045F3219 -AE87AF49E363AEA5164C7107CDFEB8BACAF39C795D98F9855E35BEA4482F78B3 -8A62DEA5A26336671AE7D96AD413A2A5E98111D319AFF427420906C75D4E16E7 -AB85A37972380840CE59C78273A510C819EF376534266081CDCF3313C83D7089 -71BF31000698E853973A6D275A8F215677CE9EEC26B5FC21E481AB9C189C37FA -2F7E2A63B4286E1AAB933C0CCE1AEA78E1F7B9F7A16DDCFCF350514F1E671D3F -DDBB3CB3324AA85E9373060D2FEC1F218A06E4A1E6F5DA7E3B72511C5F0F348D -A221902C405AD22CF96C4A14F09BE984C710AE0472E90ED804C33BC2797D5F30 -F31B250C791B0CDCFBA202DBEDEF03C144D31D7431B7667F88C1AFD9E218A08C -46811F871812FA17AB468062FB0E478B8AB84B9C06208C8ACAC16E34B42E8B9F -747F8BBDAAE6736A5A4BC9C494EE15356CF6F02FCD2F52D4A3F9CD5B472AA89D -BF371F08DDF4FAD324B46BEA792CFD4E148E33CD0CD5C74A76CD5CB4EC885420 -AB9DF5D757C33BE1CE9AD32E6B0179C4C511CC984A5365E50E12CEBB8CC71CAB -572054A7DAEB7EFF1025B60BBF1ACA5C3A701396DA00C6F77E7B86F1BD246393 -1030F1B6A8D13F6A0D3FC3825DDBD7CE36CE55612D3516EC214AADC5ADAC59AC -054743534AC8068A67C09695C7D04341D22F5AAAC4086CF370583B93F417579D -7392D7B57928230688C7C5B1931E26E843B8FC5D2D5D09A3005C1803BEACFD54 -F5A8BF2A6CF7852616F93E05913D188AC4E2F9AC3F2C1C455B0F0D1E32D9752E -331E7ED9F777FDEEE5ECA4FA4A27354C1D5E7E388008D7C45456CB361F3E4D0C -AB08D54AEC00286398730911A5F145D7DDA76D696F1DC17C0965A4B0899E8B4A -7AD364ADCA31D1A0714ACCEBD2BB7FD77A4025EB94D4436925DC5E460EEB013B -359983AEF8637A929A04D9D5A963AE764FF82C42C62FB220530FE59018A89D0F -CC8C3E2E4B918FB14279F5D0ABEE4756C3E79C1CA70359FDA92487D42B7A2943 -3ADF2FDED43EEEF0108E7EC8778E14C4C0BD06B6687C08C1AEC415477176C892 -496E84FD5E9A7E4DB11287A9605F5F0CE1B71D3C198900C67B9B333D10F5F331 -CFC638F80E03CD59C5DC5862BF8A18B6ABA8435936A3E2406AE848EA94716472 -A726D75C94BBA07926745B20EFAC14EAC276B477B94FACFD9D664365B1CAAC7A -DB2BA6B75F4F83339CD645428F0A5F498677108DC473CA984370A7D6A9E295AD -AA68CE2D5B435915EB0F6B72A9F4D49E356050223F524A270A9DEDD0B8B66822 -C8E94A311C4A055EA18BF0292CD25EAE689C8F932226643B5085E72F5FE0A232 -6064C6850F189B2C46F9EB94966600A8B7205C654F33737ECAF9B4F3FB3CA0FA -44A85FE7A9AAB211C6B4062052C4C01685F58F0D2786585CE0FFDD1B348F2FDC -A19E31CEC44C59BFA74997E570EE0FD56629135F3BD7CB2B6466E2F031DA6E8F -11813E7118A232D38AA3EDC86ACA1328FB9F870174F4D1BF511531FFF0E23278 -9D29E817441F255261318894BB2CEDD0E6F8B3339D888A2C401D7009E7879D5A -7C6DF9C8D97C5221DC65181A96992EDF4C983DA8C0669F3D0BAA4DCA2FB17848 -F34F69182E6A129A983A1FC394EBFC31551185A750114B383E01E61CED8637FC -B4765F1791D121B8B1D08035B6D8ECB2856FDB43B25101444D160E02588E80A6 -10D55BA3B76B5B9C6B97B4C07A0AEB124459603BFCF1C50DD19776543EE9891D -9FAA53093A933077B5D3C0280679818348E77835C679C603F46714478BAFD156 -803B736D4CCB3F1C1FC2192B2EC1CF78C36FED5E0496B5A8F0CB1B72407BE183 -0BAB9171EF79069EC940B9B13F69F952EE781A811EA4A0A7FC8A5E5BE4FC60DF -45874393CD027EB52EA2DC1EC163152F3B74B7E7D62E042093CF3119F4F50179 -302EEBB352C362A6C2DAE8A251156664B492FB60A1DBB7801DB26476BCE9E78C -444040DBB110FDA2783A62FBAD6A95AB513B292920960E7F630CF7F5C2A5785D -5BE65897155D32CC657E231FFEE30CCEBFC00C375E105A5B613FD2C27A6FF7D3 -92C00B7E0BDCC70A6E80F5BA164F116A2732526B669E50F5F6BA575E37FDC9C3 -38A49BA0522EA697F517D74D533BA28F928565985AF5E32B84BAF188F2B9B952 -0C291440B04DBA34354177783CDD82AFB65DE0E179E638FE1BD2EB3EB20D5344 -C4B6E5D639DFAA78A77433D36FED5462B6B090E3434034B8BF00BF7EF35407EA -9F122694EBC6B6B4214EB779C94E6BBB04998AA57249B8D84353E0BDC605CA98 -492862A8239E8875A9BB5ADFEB966F0D7FCC355E3F0428E227D8B41945257F63 -9F6A6A69B7A902DDBE08D9FEC8233E11BCF15C1458C19F9E487314C26517D162 -9AFD021C75353FE5A161EF3EC7E06B616AF1447602483A3486788298AF766714 -939A160EAABF06B61D86CB02F6A958690D38C86BE7998B444B7A2B74C6BF72E1 -B9A59AB78D20C121D1AACD208531FBB2BE37BE529FBCE24D229CC242A1FA721E -AC762979A4B92565B6BC94EFFA2CD84985F8FFCFA1BB44503BF1265D52370C53 -4B445AEC55B12E40F05DF383B356CED44B5345007B9F3454950F12C8E87E41FB -72715838A27013F689D6B55925C49D92E0E14CBE59D9585BACC8CE5D62F86F27 -B51E89884EF529F27CF4C61A28BAAE981524CE3714368D664AC4773FF8B71728 -88C3E8878032EE246359A97DA80F1DED34DF09EE5F249B364BBA41BF81D16AAA -9ACFE092E3E491ABE1C40A53B1A50B88788AE14870079175C14AEAF7EE777437 -8F4A7A03178AAC032EB320DBD8E0C19C0071B262C76913B787E1B3FBEF926A49 -CF96ADF8E3BBCC3F679294B5DBB5005DA2294848229A557865E0116AADB4E6AE -94AAC10394B4FA2872BBEBDDC869163E50CE3BB2925B554235B6BDE9A29CEDB3 -07DFCC3D8AD0CFEBA9C7AE10314771DA1E6C3B927FB950ADE62D1FB8AE7A3CC9 -C9E0F4484D61A6C9F353B9AA91A186DB859385059544FC85C15E1A3357BEC89D -92AF74938D1B56B7120B934297A71F1D92E93658C69E7FD4B338F59FA6F6C337 -427532AB1A4EADAA5FF1A8C7A84F444F81D60557808ECF3DB67C052EAF4A9FF1 -0538A114857BBE83BE784E9865B00EE8B407AD9E2B65E402EE6CF733C9B31603 -25F2C97BE78D94A51CA51F28ED9E840F13057B1F21C30F77ED6FF458C8EE4DFC -493B64190AA9C8B22C5977FE16F31C3ACD5CEE976839E2456916EC66FCB30B44 -8FEF1B63D552E1B0F049C48445DE8C80F8563E9870134038DA5546C7E7E3A1BA -1879235D0F328957290810F18037833D7A83558C94EE9856D3D82A3AD00659C9 -3E9587751B5BF2535FA1D1A508FBF86DBF7FC7009E1A542150F8F0EA356689A9 -DAA05EACE716C3496D4D23F326D4634B24A419F483154FFA9B81DFBFCEB31624 -1C87449BC00AADF4DA13A25955485D0C7C5CB9AAF29E1940B0DDA19594A8F7F0 -033C60CA8C9057879F10A6116BE5991F332AC272834D99344B0E476F9B2034BD -EEBEAD5D1437C0B9E10DD38A002BCB01218A40844A91FAF28940BA11A40F2BAC -EAFD82E977AA41B4971C69E82232A5018A31F71C1E60F2635D59DC40B233FE47 -C29D0A2A906955CC69BCB72BCA6D80E9B84F06F618BA1C7EFE99A75FE35AE359 -730863494339E0F2239191B6E7C5E8FED2F43EF6B5789872128DC528CCC2D023 -AE7A0BC6F9C194E642F09B78D898D63EE3EAFA611DC428C24CF363F78A174C45 -8C3C91CA391D7F1AE652C2D81DBB7F1A5AAB745AB08EB93BB316CCFD7D353023 -4B7CF322F928CDD5A413D60669D062E5C59A0F2C1D6BAD36CA9C5F5D50BF48A8 -AB77EBE65D054FECE72D08CE3A0C1916AAB4202D5BF4F07998534C1CFC49350C -095D98A12E1E1E6A5BB2D3F3B6E6DFFD926A647DA7DA8EE687AF44DDC9FE4A00 -18D679F66287FA26D6AE4075E430BE22684B42EF75CD59AD72C2E97383D5AD52 -1867C37AF8855A4A5428D125DD22AE0B2757781A80EE7D425B7271AD95B96B81 -2092E92DA4D04D9E711AF88292C56E35E7FD15C0D12BFB7F244BF4CE5B589CAF -89807DEA042EB5CD7615FA6551DEC1CAB933A6218E08C02443AB912C915A5E95 -DE3E2B66C64846F9FF403DA1642BFE9F5FDF0DA4BEB832D07FE6552394558903 -82ECF4DFB28B7E5FED973A99C0AE3CC792EBD9E7F53C84783AECAC10F9AC8661 -F023093A9F37141E27811C6B33FF8614AFA7DFFEC2E01F0B3D60442F6C62ACF4 -7274D7F52AA594A3A096EAEAA2C161FCB10E0AF00ECBF9D7EA6A4533B7F8EC31 -FABA55E1AACA89E5D02114E7FFEBA84528FEFE356A48090A59AC39F358FD8800 -0AB1486BBE16BED95607ED284CE271D6D9239F3F23FD403304C19E3132E2F3F2 -B7E1323468C66444B2E296E42365A9276FCB51DE065D6196CD4ED0E45A096DA3 -C45D8DC05C009C1C335ADE0D874F714C8EC74121B386483D2E67B8E7466A8ECB -DFE911178ACC242FCF9DB814498ED313CC6199DE67133ED4EE9253C6EFE87DFE -CC9E4C6F2950F1F9A93834BC359215BB37EFFDE944344F922B2AFD7723A45F44 -DEFA4E344C6E8772EB6F9D89E850E853E8119860A6871668C8A062869E15EE11 -64EDC397E138D823F520B8475FB6703098E3F779FD6446B2E2B27289B5D569E2 -C2B5FD00FC05A609572F57D14801C5EC159423E4B0AE61ECDA938424F47E99AE -BEC534EAEF22396119C3E79AAB1194F71044A8973FF94FEDC317CACE3FC26E25 -8514B5C039CAD5B2E83C049D31C135EA4BC2167C44EA92AF8F45BB777BC56EAF -BE7CB54F02AF2263EC1AF29C7E8D548ECF88BC262AA04D6F7DF26E5EC5E2919C -52B5A8CE42AA960EC9CDFB35F2DC8FA31E0DD5FE5BC18A7A5FBAB0A509CB7451 -DD4230D95D6ABB2B914A93F42D0B17AC931E4814AA939F90E389EA9DF311F834 -8A0A1A86602B07EB1CAECA4178A885C11CAA3710B6DF83DA05AC6169364E6EF2 -BB75559A056929BFDCAD8C30CE83AFB66266D24D308A8A510FF245BE51B49A0C -C608B08EFB13973C7BE9CBBC46838DE5BEBA093863CC9B896C1761E6DABC0CC8 -889BA134FFDA108C9B101AEB88E18B52FB151DD631ACB1CACC164306CF909452 -C967430620DE41E0BA22C811F5D6D728781DAA43B2279C9E301096D58DBED1B3 -EBE39E8444AE50AF6AD2929AC1C2FBA27497A0AED80A72D515403B46DDBEC309 -7A8F8A7E1D840E4D7F7FF390A0176E85D09A5AECE75D167594FA3F7C670068FC -31B055894450460F91CF36780916C17E8644C05EFE80D525B2CCFA1FD1B5FBA9 -2CA3A87AEF0867E8F135086BF78C43BED284339040754E8091EE2FB26E58DCFC -9025C55C286E99D5CD2B1C0767F1FE0D89BE87146C8D9C21118267CA2D9E15E5 -4DF80A9E709C6E4D284AC29AB032FCE2AC173A4381E47FC8876716DB39C63380 -E0D5417D1D1ECA49D5414E93DA59754653498A27B796C04CA3B3DA37D326EB09 -5646C20F0CF2D34D45758CF49BD7CFF0D71294BEF0584E87D06D4C069A7D9256 -B5AC4005F524A46A97574FC42EF2F0FD8382C26A385A3437FF85525F80711A14 -B928853A5DB29B64475D06B1CF33ED36396BC1FDA09B35E0857B2424584D5E9F -A1CD56B852D910C67EC88AB907BDD4F94A6CDC9FCD1CA1ADF7D2D3D3F4C8EB88 -EDDB632D8430B157546038CC69FEDD9FBD7E58BEA5507520C9D55910A656511F -273BBBD804DB9AC2CAF9D0D02F6F9420C7E3974B2A7C57D74B562155FE7D1679 -904503BF008E32DE50A007251D27461F62277E50DE498C0432B48F3F8AE9B589 -919EE62872BFF2DE14850773B86331895AB20BD96412A52E9B87D06DFAD62EC4 -ED02516D2FD8866B41140D53B4AB65DFABD08B96E7FF634DFAFFF3403BB6ADAE -947387754DE0337BEBB7CBCC8CD4D0BE5A2FECC73DBEB5A3684979939F352E06 -CB07BBDE49096A91872C1B77BFEA8B6686354E53009577C2AB75BA32D9E6A6D9 -1D2324B105428EE06BB04B862127F0DE5A849AF6647AD7722B86E1E42C58A940 -F3A7CE22C828D84B84D80BB7A3AD87E1A16C2BEDC68E9E3ECA734840614E1480 -F70C26D8D185830FE5C1B2E6FD3AA633E5F856A4496574405310C3FD709BF92F -23353CE76FF2C5D22B5345C3AB129F107D478063807E9EC522EB4905F59F72C9 -31012EE90C7A4412D01832AAB0F8B0A84C532ABA1F6EA8EB84C91F16C5EFC2D1 -3A9C2F5DAEFCB1B00936DEA1988049FB1655BD5C1912399621DD755D506845FE -A59C625AB92649383BDDF1CD48B33CBD8E207CC63D7B4EB314354F5609A68713 -5EE512AAFE98A7329AB516F89FBA8BFC6AF3AAF189CDB905ED3F63F479CDAA3B -27A384522D571226623E887756EAF7539BD2FEA33ED6A30656A3EFE0264C2E0C -44E065EFD20E0961F86B2067FC7B60A3201F789E8712D79528CC5449D8A4BDFF -A16F13C8E077A259CC71DEA56691BE117BBF356B78074CED1F54C9E16DD2CE48 -501444BA0AF54B1C84F5415CE7863DBBE37CA30688D5B6542E9E743F8EFA5A46 -4F46FFD30F801D02ED63B52C6C0AA0750FD82ED149C8D35DB524C424B2DE7D17 -A886FCAD0D9A0EDF04EA5C4072ABB8D07A6589E9AEC0C9E1933B94DDF9350751 -A6954226F040D8D13F7F34ABEA21CCA64D59076F61885116C307A95E74F52324 -8B1E8A05358FADE97BE4703CE7AA80047BD200F59F4CAB6EADB05A892469C4BB -3816C606D39BF8B7CD0B69A5CBCBAF35E7C9670FBD4CF8A5E11ED3794308568B -174D42AA69F3FFE58333619BF448FB0951D9E627DE153FEA9A4F2312EC701C2A -9915D9434205857AE251095E8E856D01C4F1CAEEAEF2A7F2B974F1C27EAD3976 -7479273E36A7AFF9D4EA352ECF7642CD0CC31982D945EC00720286E2ABE0F9E1 -199033AAA3F9F0142F285B88B091E01249472F339FD8A9BE3ABB16DA3DF606E4 -2467780732D6CD6C20101FDE86391D4CF8BDCBDC0A112E9339FC5E928792B62E -4FBE7770C4EC526C4F5CEAFD25B3E4D1A0B4F06B516971A099299D8005C9231E -D06688D4AAA4550604F7D1C9294B74B159B6B0B15CA2A5395EF6EE355E59BB68 -DD8B01A0CC19ABEFD5337B00E8079FBD5E5CB3188C414E015DB57FAAF330FD45 -E62887ED507092202F32CC49757032D13444DF1F619FB561379FAF4931BFDF62 -3FABFE5B949829267190F61A4318678A07403A5FD9FC8C2F10EBD819D6EE9C73 -EE3D852B1DB42EDA74C3C63EE61762EE0C8D5582332AFAAD3A3BA0B5FDB17836 -9BF11422BCD69EBF2F11C67780BF0533353DD045AA551757111F11F4FBC067C7 -84486CB7A486B602F9D7C56EF84A804AA08A740E3BD2D647D1DCE018B4D225BD -DC9607D21377E450CBF76AECAEFE4C4FEF2F72A4A44E90B28D2F46FC8E549C1F -312CBB690F9D96FBBBD77827158FB5C2DE80DE51D17BB86A4E634EB917ADAF1B -00038B6028D3FCFE6805A72DD10B17C7A434C68744F19A260BFCE7C040D1930E -B4B35E0A3A8330A6E197F359CCAF0EF03502846C784ACB3068280CB7D3095977 -9BB914063E289DB7BDD5F8D50B9D8B64A6259AA947FA3AAAF20FBEB3B020B169 -8A2A68D6C899F8CE32BCA97D75E9921883663DDE2735439F8BB5B62BF61463AE -947A0E4862D480D9197054727BA1C1D3E34A0310DC8D30F24AF051A384D5CFDF -4DEA1DC83277553715A026F0B676FA651D6036886319455F265C4AD78FE72B41 -9C8A0B613A4FAED194DFE836C15F10E4EBDF0D2779B0337D54628F4CE0EB0AB9 -2D67DF7D287D233815462CBA378BB4D05AEA230DD884BBFEA756954EB0A6F304 -5169129B2D3A55D3ADAE8017B3D9CFC5687F2CE00BE59D084AB6ADDC8D8DF76D -B9449917623FFB4F924EE1BD40A536E1380F22BD07260D3BE827E62220E0FCAE -E21094047696EC4378722E62F696C4FFA6CC92D1D5F719E472CFF99995CE95BC -7D3BD9A6172195243343868EC7FC4C51DDF43BE6649F096C4DDDBF6498BF6208 -A7FD124B9D7CE06E89C45EE3162C8505255DA806684280C4A7487692862096C9 -ECCA26F72DA251733B700261FCEEEB7DDE3542FA852B39707044F5E34AA80AEA -C4F54814C72C5480AC15478E28D7898557F7FAC89720BE0C02B726F674ACD9FD -635A87EEB2BE08765AEADD636E261625FA9E93E77D954E5DBA6A2A75D431879E -5936B3E396B3E681F393669F20884B1D75CFA3714D967A7C6DA12D31E26FC12C -96CAADA06D701DC45E00C1903A8D9BCE04B19DF613B54AF7B6DE33678078C03D -F1B0C31A9B87FA42FB434F105633C646E2A45617D8352BA18F5F9EFA6DFE5A0A -2FBF4F79A0CC5ED15F8B9EFE6BFBD2F7F7ACC99A7162F1D0491ED4208F2A7E23 -1165C3D65FAE7B3513818BC46A9A2277100867AAE0DE763FB6C7319C933F92D1 -4A8F8B5B5460200FA193805D3972F18B4B3DE7398F8C0A4462EB53C54A4CA42F -93E671584DFAF63AB8B91FE0EB29A8E525C1F137E7673F632B0E1E3864E1AA54 -D22252FC1EEFA76092E85680AB35DF214E761395744BC84E03D6F2E50D15D1FD -6B0C0914E661159BA887B856C49C04993C4F3FF4530F45CE0323752EA175F97A -F4C5CF8E8F103FBB38295D016E639C931E1421762C075133DA533E5F5ADB6CF6 -AB5BB6C69A761BB71398C0E1C15E112489367193FF3464271F439E4ACA94F47B -8855971F042AD99F97B049F6D57FDDDF401551B4793C4217851444D674E2E61D -98D1D55CE1B7B00A82E16C25766195167C01E3BA58CAE1A5675B4E9DE80EDCD0 -96DB71DC7C2E8B147A22E683B900DD3EBE402F2DBAA6DDB847E5AE7D0D95D4A3 -0E5EE6E1514391A69ABCA5078C96E0895047D2242316792BC99D59EE40293A25 -AEE147A96C9B8CE778C4ED454D1E1BBB351966B1684FEFD4A8E707FDD5EC675D -96181FD81641BB578C486A0529FA2EEF184B0402BB93BC400B1A29DF5ABBBB03 -774499655178A19FF518E5241C86719B1AD5C04A0775C0620F23BF19A1DF3864 -9219F74D06410CC1C85DE0E172DA953238F83BB44ED46C37FA1841D2282D16F2 -5C3C9D3A3897F880D49BB65E9A12432F517175C2F3F12C5F44DBFF1094EA2CF9 -0AF10CFEC825F1DDBE0331DC70EB7AB9736DFBE1D6C3448B5245AD469DB40B64 -D1B89F7E083156D3B44E7C27ACBC411413D69D515FE03C7EBAED6DBC7CB3FB7D -DDE6239F8A21E6329C07E0C601D4B114BC3964D921D3C15BACAB7AF7EE202B20 -3FEAAC53D13F088A932409337991D5CE4D4D55FDE4D515EAFFB5E47ACA6207B2 -F059EE7A93965F859AAD0EEF2A6FDBB45408834E885747349244741526882DBA -7AA940C038AF5D0909C1B6F163CCC5A9601E6F7BC13AD1DE6A699100F9E2BC5F -EDDCD46C3147E747C6D6006C05988AA402A7C123F015A271C9199E3338B7FD85 -B73B31611FC6ECC10F203C91605279EB6894304A0FF6B67A7CE10BD48E44C0BF -04395105279961D56E6D3CBB3F5ABEE1F069FF512D70BD9C81BEEB62710FA967 -2AC750075845E2EC4B7826F170023D7BEC4719EA2028AAA3EE91D3E212DBE02D -53CDA397F61A4CFA58543FF5A5AE88D410EABEF0AA0CA8170AD71922181CD387 -96ECBC28C88C3199618DDBDADAB8FD6B87621B731D91FD6DCA973F2CB347C2AC -110544A352FBC02B408AF4475AC4A5792455416A6E9184C861B4EB02F6D565DC -EBA2A752C0C9EEF51CC5C0EB286ECEBC7FE5303AA411F14DF5B569A271BE0650 -BA2061861610C64BA81442A8C98B5334CC41603B00FC7D49CBAA7E6257EA6F13 -72A7FB4FEE1F7EE3B6226D7564B105D7902B3DF2BB43286B6C71A5F70A67E926 -706F301CA4CDF22411A6C91BA7EF405FA5EECA8865E2A12290BC2485714D891E -CB9EA86E36EF1C7CC6BE96AFBEF493420FAB5195DBE4DC80BC075C17A1DC6565 -AE1949B72A9E26D9E832C08CDCFB37B73BB0C80C452EAD2145E1C217A53C1E43 -6D7EB4F6D035DD6A6852F33E561043F8C9ABF09AC746E936B522522D1B5A4A70 -7A0566D6F3BF82A29918D3C01EB69EF77776236EB876853CD9C599D81E0ADBE1 -F909101A47927116919FD881015CC23E7280DF2AACB0D0D442B337952A691393 -7A7D996477A04A0A7893B22E6DF75C912518C0E80CC57D2F3011F7CA639FCD2B -5B69DAADF0882629EB56CA6823680B247C5131EA52B097977AE71829EB7D60E0 -9190E3B34BA4022932F24166659795E75AE0E286268D84F7D57F1ECA608EB49D -04B7BD31A76337C487DD156A131BCD19154ACBB7C36FD5E11FD3DD7D57684E4A -45861AEEB590967ED45ACC06D360188912A89BF7F01CF4430DC196B32F29414C -8BD6A961882B3999A3EC9CED31B063AEA557667AF65595B67ECBA01F488FD07F -4684052C4BAA9D038B4CC8FE1C1381083CB1A2F7DF95A213C46A272C45F7AE94 -47A605265A776BB5B81CA6A87875B3BF33A2E055F54E73FBB3FBC63CA47C64C8 -21D776FB9AD5FBAF9482E4A24A556B1C1F92B3984105C1C466B340DCEAAB9A41 -7869FA344F7AC673AF6D49752B7391260762B8525F43221A86D87FC74EC3F92E -BF23C1F2B04CC63F9751471E3B399B683318762DA5742988FD122D1263064645 -079F1DC46F7F66039AE0B9D42CC2B387C7C47758426CC1E35A249DB3875A8466 -198155C887D5502FAF403650E6E336CD5366FDA28662B818BF5C5E2BF484E207 -498C3CF05C037BCDC3B68D0FC718D9EDBEE4B27CABFBA52DA116A60EB766AEAF -3D16F3DBCFA065720704DB80A7045FBBCB219A4F679179B5B7E5851A4CBAF2E5 -20B4FA5B5382EED902E6CCA8EC283E2B39726C5B79AA72B45CFDF9E30EC4D5CE -7FFF76A90F2A3EBE77E017CF6418C4CA1E6DA141D974360FA597273013ABDDBC -A340524C822A2DBFC5E9551D79745595105EE1FF49A6A1E33516390A2C59FB71 -E394B13481C5179DFBC6A7E698C0364D93A8830F2BDC3C7B4B603D64BB53BC7C -67270C93AC504557DFA97050029D6D7B85EDD9719CFF04581004BC908B358FDB -6DFBEE6183A0F7AFB84040299B04C560ADA8AED59E43C2036F6DA09F3044A781 -DA12A23145719FA0B2C6AB6E10CFE84D8466BBD176EB17B5FEB793A917B3B604 -271F299780A5F33E212CE334756D9768339FE866DA429858CC7A6551B192C80C -659A3627BB903D74E8ABC3910A662793BF0BA13CCBB5361ED6D1B4AB6AD299D9 -DB7CD8E592D2D3D9615AEE2BAA6E67A46327E29298B0E91DB801832D66788D18 -47CFC4A5C9B8CD41AEA2366E8D7D19E605D0474D6A2D9C1AB44CF5CEDFF9A678 -9B74A83724CB185EAE4A58BDD2ADB9941B41640EEBA42C3E105393639D84152F -8E26E93EF7D35E028244785683C8A4D59566AB8D2FF2906C0BF7C4856AA9C3B9 -E000677FDEBAABE33B23F13077EA25E1699519624C03916E3CC0136CF3A3A468 -F328D43F7BD1C6DF305206F302936B12F3529421A81D0D5026FEA5B811029790 -42ACE0E4AA1D401D15B283E2959F3E130ADBC3262F73DD1CBC94EF659860A2DC -1D9ADB113C701867A4E62886C63FC43BEC3461205A37F1307061C62EBE4509A0 -24A95211B890842C00ADACE0B75EEAD4031AEE5EC113B7303AE4C42D0A263021 -8882592E518CB3274E367B937274A5F7FCC9F6E9D36B83784C4E17888FCDA3B1 -CC0F9E41246CB830D282370137AC001D9E4ED0351BBB39DDD7F19A78FEC3CBE3 -B875543006CEA3BF1724314ECC6AF4932DD9B5CD64A91D5A72CC2487A2F4298A -34A1DF796D1E32DE2A7F12685B33992F92886647B4CACD145FDC35C5C8317DEE -C9F58DC50E135F65B1A0A1862EAE22F1056EF92A2ABACDAF4A701543F274700F -4FD59D4033BAC20817F1C97B41466ABDAB3AF22DC3F60A5A5C1096A2ED73E84D -F5ED5392ACB5FE5027D0C3B1D47249D809D5D7C7FFCB0AD72C6E54438CEB4AFF -E7F1C42D158C78144B7073B8A1AA4AF5707CAD9E9EE68C45C32B1F2B2C876624 -163DB24823427080D1F81F52BAA3C0BDBA113AA6F24AC2F01E7E70D6F7754BC4 -BD2DE4C46D398DA4C94DA7F8A38AA2EE20A9D124291FB3649DEBB4A5476FC536 -56E85EBACF09E3B129BD41748FD8972F124DBB5821EA6BD7F26EE1DCF086D847 -82D0C7D60583B1424EC98A3B436A9939ACD437CB3B0F5DF18B4BAC9FB1F4AF87 -0854FE355E5C8790F5A5BDD2DDC835BF8FAACC22FBAA6589E843E04C2E8FE52E -AD35EA2608BBE0D77184EB4B4D211FF2CC58D37E3D7638A57551D4961F9E2264 -A7DDC677F263450D357D482B61D91D2B1EC15F6DE08864A5693707AD46266ED3 -46C1E5C8D14962B82FB881FCDD2C2C20A1AAE200E39FE74E8CAF7E396F1FCBC0 -5A0CA7EC0D2FED67B17DDE349A72923D2692B565D5B752336F4F49370878AD9C -772386F42C7E2FD66F4B8C9558F9E2C078B7D140A5E6B0D8C48E5F0196CC5D66 -553EE79C3596349568293464FC361AF011F8148B47BEB397A4F8A0552E416F02 -03FD3967E0AD6A928DC1DA73488D2A093E7D587A404F909D24A57CE63F2EE6EE -C945CFB2297EA4E331F41A6B8F67843B61C9226FC429EA62FDA4F91C98C4D7EA -D2EC09399998F08AC9C2A3602018CD28B3411218D90A7BD6A310427EE54B19D0 -2FF1A39B7363D31D6BCEE6394174BCF0CAA755B2EFEC05B962B7E28A73BE0BED -9D33189E82D125D4EB6E5CB370705430B78324A079769FBF7B4DABCF305924AD -1A8559ECEEAC4D0967AC739420C712B213B9A84C5D930A7265728931CB35C4DB -1889EE886BBA68383E8926821C7EBD13CA2AAF9BE7C5090F9D301AAFB1001C75 -C52BFFE1B81E7F415C38F560E902653714B853FEB28125DAA168ABF2EE66B6B7 -E4C0AA21E4B936F9F757188899EB4BB6AB3D708429954F706B12D928E264AD64 -1C4AB1A5C4D209D757DA7857B383FE9AC3319A9380603348A700BBEE4849D9A4 -2D7C6D49145FDAA73074B8F568BCE751C0A9023124C71F8ED7D8CEC4FB01E841 -EDEE9C56BAC00DD17E83CDF905D1B8667BF13C3B8DF717D23C6676840A152215 -ED17A14B0DB3602DF9170F979D8098412345BA610888F3FE450387CC46D47FCE -2241F9180024331FF12D713DFCE680F167E8AEAE710C765FE0F791C065DCE040 -676C53C797AE7F26C52CBACB82AA12DA9A14846EAA73A6F0F98A628CAAE12718 -A9C30F2B1D13A4FF3BAB73CE32593FD459A9ACC4FE7EAC78E893C9A37BCC8363 -D8DAA0049F383F1848F037F0250F5D9A07E0D6271F771AEFEA2FDD6E298DA77D -41CAC0CBF6871D2D8891B297AF8927D33D6E7A16974B97B7BEE5FE92ACFB9442 -3DBFC1A323C2DECA0AABE3C44C4E5FC67E31AFA32A2E384F9A158C5F5A7DC04C -C6342B7D88308F4BD0C813A8A8FF6D44E8B6FF5073F11EE1FA41FBBF07CE8E72 -CAAE5FD345A00CD4E0DF5B80A44DA6A11B271CBE994935937BC477AE4862E0E4 -0F55BD2214CA9F7186885EC69811F821109428BB851C01D1FB2F38341408D262 -F5DDC76451A7C107A725B609DC363270EAE8E75CF6BC1877F2B2BA1455EDE408 -159506B7727F9ED61D807CB758C0BC165EBA7C734EE4BA55AC6F42B6BB930FFE -DD0AA0A34F994AB151BA1815BEDB828AA1BF85DCFF99404FE4898548F2FD6DCA -E1A338E6446093AEA135A75832AB0D268A3B56C8C20F29341CE6A48D5F5CA445 -91CEBBC1E344CED028FB823437CBADEEDA3B322077A05573D60D7BD016240153 -6C28F065CB849F8CECD24377C69B42B00D01D388363B99330AF05226758AAA2C -B34BACF2F63EF54FB718B001C5AC90C9BD85DE8CC38398621AAACDA2FCFE3784 -B3257A9DCB63773B8B99076F2D969C0D7AA09478DCA4A6B3F7D8D95CEC5208CE -ECAD3A540AC0C067733557B5134B7DE5C75D2B5673CC9E3F08DE0B9AE76C829E -97E3BCE64918E5F1687046D0318EAC32659629DCB7CCA135A2A7B450E14A9A1F -D89F5C9793A4FE2AD7719037418ACDB24643ECD71D70FEC1D529A87B89847945 -F4BB9E9919386DA70484036A926DC3DE7FED1612C4B89B701EF4409979CA914E -5FB3ACD50E15AC6B4B22BE79954F45DB6BEC4CF3670414540C7F394BE2CE8F34 -1E8D02282357B6BB6DCC14B6E1CDFCE52FE38BF7FD091F44E3309D88C2CC2014 -3AAFFF868E201F1729C0303F62F5E21EF7581674C46DB63F615A57C4310B5F07 -A591A293340497C59D73365152F4F1ADD62DF144C0B2F4BBA9C04819D74CF5D6 -E5DED166D9065438C89ACFB14744EEFF77FF21A5DC2E60F8FAD10DF69556219D -3D5039A505D5DA8A35EE75094EA3930417E7F92BBB14C0948D347FAB53BD7077 -3FC6CC7EF5541D2082507130932FA415218BDD959004B5D1D9C6AC7A6D62AFCD -CEEC5F43688EF251A1D7FD4A9DA3018ED9A63520C0A0E4910C2D5B2F9FF03712 -EF45FC4AC93DDEBE9E1F434EC1D86938253F736F7991FA0E20500961EA080DCD -D2A9164A8CF2FB7546EBB59DACE8B6BA5F9438A8FE29223341EB1B1592607BE7 -E6E7FB761FB4B198F8D346ADE3B6C7F31192541D688518969AAF7C2A1EB51563 -0A233BFB89F1C2F8736E89A46DF07D64E68CD0F58CE1D698675E4A3F504F5D63 -E58854608EE83814127A760695FF30281D2C4648D5808C8C8548854474CF2F0B -94E15450CDE2CA5D5CA333BA71163E202F54DB4E6B3AFF1948FF2A5758A9BDB6 -9F004B02C13211A86F6B382A809BB726A22AE41C4E6210B61FDE76D99A5E6890 -BB1C522D0DCEB8916506622083567680F405E687C7FEE05577A8E7C02B30161B -A775FE0DB6168AD93C19B83AF6E95761BF57EF046642FD3C47CA1EDDFB426533 -5022A78E85A91D86F3B78E463B01CC30807204AEBC0E622B383DD5E2A093188B -62CBFB1CDC759D4FD7A66CDE922671D6F6F2122F39DB3C4CF73F3E16C1003688 -21838863DFFFB77EED7093A1B22CAFF89443AAA734B788F7F64BEB8B7C6E9579 -0389ACE038CF73D46AE11F9D653820FB3EEA99144CFDD4C6A28B3A86621F664F -9441664E4B2EAAA897F0FC577344FBEF2AE0AE4DB43C0CF12CE089AA00D6925D -BC8537F52868FC9EA59DF56FBD7AFD6A4DB12BD17E4B47556DA97DC1931AC87A -38A1EAD3D3AD8B462C1A76F830D7EB0621CC8B4FE740AC409EACC48BB7324B92 -1F5B2093F0F6575E4A903E2EE134E77874F70DA87C073FEE5191C118EF6E75CE -42E143037A40F8D5B5C92C55B497C134B61BFCE61D8E7AA93E66F74F0BC2F725 -A8BFD5795BC47B0B46F526E772917BE1FD164181B5731E27CB13D8DFAD0E8D9E -BE4436C6921E7AC96953F20CCEA3C2E6450E51FB088E16DA8DF471ED8AE84F48 -71433349B7EB58332DE9CB7126906B6FCC08CF2047D39986D4DE9BC1B2F2FDBE -163C73C9DF62D1335EFC64F38D42E2E4EE9A422718174189082A4E83B5C5D04D -E34ED308A2D7F8907571A40A0BF77B4990D7C1BF1CC0474C0A41876F2CA0633B -42D5A037E87BB056483D0E88298260265AB723B24DDF8E4220C8E7F3E681B883 -E94EEC6B2E77BF249CA69E12AEE9E03569D6E99D63FEAD2ADA9135B62793AFD2 -B7CCB2CF2D1144BA7FB613F00C6DB9736720CE1BBBC49AF359FD56F9E98253FC -57E2CD93BBDAFDA1FFBF9A33E427B37B333BC48844B9F7A757398D146133B416 -58DA341B54FF74D097DFB950D0C850E11D85522BF8D10BBA53A99117CC4A4B72 -A1636FEBD444F0D61397039ABDB39CC4D969910F46AD2EFB671C05C66B0C6FE5 -5FE8FACDACF7AD619A44B49800B287170D086BCAD5597BF592521B51603CF4BA -A286F141942C67471B47D67FCC581CE2F96D3C8152D4A86F9BA90EE6D5F06730 -CBCAFFB91FD653675DF525C3948EEA1F09CB6CD084D7D34F00826975368373A0 -A05CBF4F7425C9F57F0EB5F1BBEBFEC259BCA347D47BC00F90EC77A06C0787F5 -6FE2264D2E37615E28C74B5B1B96B950243C32CCFCA6925F42E921819C57D387 -819BEAF8250E117B9475D4A8FAC24ACC0EC44CD4C9597F0F852781C9C1817C14 -F38F8280AC2415268B3BFFABE7AF59B50DC33F7ADB38308F67F50EA4A74B81D2 -5FC9C14894963F82D10525E0926DFCBFBE775B85DAB7A4BF4D13E422643109AA -A93E559CBAD1DCFB01C24037672B2AA2E06433528915C03F222C8523E06A7BB5 -90049A82D9E930E77DD4BCA67A765B24E7274C45331E07D9AB8544C7112327F1 -538C7E19BB37C05C42A2AF30EE19D10E4137B75594EE6D6CDB9431B3AAA6950B -99CE785EDE29C89F94F3C0A395DC4CE31D058732DE45B6FC3D15E12E474AAF6D -D43D56FD939A8719B432D4ABC752E1201A8C1A66866465AD9DFD2D9B3AA029F7 -9B95EF7B4459F360F4F515D11149942717CE8137F0DCB4ED01F74E474FB91718 -4AFE6342F4D4597ACBADCB5E40EA16B86D4DADFDB970149C0177A943038CAA99 -D07C82504696F1A87046160F9C0AC7DC0F3C8496CD63B31E56F51BEF07C6E7E4 -C73FD39EE686C0B833315629060DFA6DEA06DC6BE6958C3F9BD1F007F64525BF -7F1F1B1D17C682BCAF0B581F0B986BD12A8C843DA6CFB65E901BA8BCBFA7CE64 -9F1E86EC50417744825150D56F2FF41E8B34D07B7EA3B19CDF906BF67DFAF212 -73EAAAE9015C8DFFC0C6EB7934DF360ADAB6BF70FF5B18F2A571B9E42A113F11 -38EA6A07CE358D0B2F4EC4FA45D3C441CF21D465CE936FAA1033E7AA407DBBDC -4A44306ACB55017E136D70DA322A115FAAE9FF0A07A3D588E48B1A571D2585BC -C7AA26DF65D9416A3C5DE75324CBFE52A76F3B74507DE787C9E9DF41FEA9A02D -7DD35547E56BD3FF30B12668BD2804F93CA6199B4AFBEC7EA51EFC9EE14AFDE1 -91C69B76727373D40C5D66129896314959DC47D672ED6B3F977E671E020BF01F -1A838631CA10118F13F91CF616BA7EBAE0C06EA8AEE25C73D4CCB7203FCFB0C8 -6884A1E23FE5ADFBFB0FFF19C532C2571062CBA81D3570761E3E00BE5556CA1B -25F2292F689E5B950288B794BAE1E15FB3284AA76731772CCD6C6085C394C5B0 -3ACF82A852A32989A638054C2E75B0E6893A880241498D3627B55F3E58761B83 -34208FA0A34738A75A67E5DEAA16597E0264A75BF6E05CE3C3B8B1B5A9BAC508 -B282B2B77CA0F5EDC38EF2D3DA6DF7646AF3C9ACB62DD0F59F50D0EDC193D847 -F8A5D40956C169468F5FC14E3D527AB047E8E5A223A8BA05270700AE1A07C3A4 -ACA5ABA29958F3CB2D1CAA9B5A0643012681D0A32048458BFBF2E3BE88C326FE -5F6AD9C996F3C82F186B5D77B4E31498CAC8EA4F6B3AA6BF524B38FBC53A2B04 -3F27EEB7854861B3EFD8C5DF19D2DE5D9C44540AD64AC3EFE729F4BE0CD144A2 -8A1DA61C8CC27BB6B861DDBB25782E44A33EC1D507D7127B51B17C7BB260937B -C4267B4CCEDF56B1FF949DAE7C5E5C3F061B6CE47BC4BEDAD0A78A952A33F339 -ED8654918143FE913EA90B9ADCB9B5C9C140DDE7E2E692B19A49AC15E7ABE60D -29453E54AEA9381B981EFD66CD957936D6C7F54CBD6306B82D13B8A716DABB77 -465EC55DFBF33839D5F37B47B634CA94489BF050000ACDEE4019C668C6EDE0EB -42985CA668123F764789075C18934790B1D1D9191E72D748F2E30E0AAAE07451 -E4D294C0106CFFBED91600DA5FFFFA3F6DA6F7C5CF3502FBB2DC37ABF30F04FD -6283BEC78FC7865D1B428F0698672E431D2A20E9FE24B1833C0EB0E82A34A1D9 -23C4791E6F8C17911A579DE17A289D904ED8AA16C8A365481D8235613B9C71A4 -26679333F179886DF86BEA8F3FB599294CA1A9859BA59E42B061255C93ECD97C -AC0E4A89EEB16A25A5FF625713F8A5792A2E6A0F537D3436F603D7F464B61470 -DA712B94735254FC69C4F4E0A66A36170EB151353CBCC3E55D392D78DFA3FFCA -EFF08200F1B222D9D9C4BF8329DEBB42D651E826BEB449BF8DEDEF0F9CDA4105 -8406F1E26BB06F60B7B00E92CAD3BF4EF06B9553688B099106932B18F7239DAA -27B747808CF11D151C28C9DA11678CC1E140DA40049190B194851F753CB82993 -349CE659FA85B8AB585EB7FF322499C5940C026FE8DEA5EBC9DE866B03C98F79 -D36AF4901182DA9E9995FE8400AF094906D52D3CFE28088B14675F2A6F846CE6 -5D5869A70EBA2AAD1D0C538E0EF7779C801F866EB96C7B5E19C67354BD364263 -B67D82983106C682E0D9A3BB0D5E60EDD6452393FF2724739D426295CD40AEED -882153073D356E2AB1F543E20F2AC2BEDDBACA73BDB5E8610E58BE6D704E5274 -D5C252A0669C56261555D0642C0937EE08329B8BBA2F807284B8777E1C2D73F2 -31E897BAD03DF7587757BE939038E75B25137471552DE0B7B3842760F441FCAB -0557EE93F87FC7079457AC62402B55E51ECE8D50F94566B1671675F0215C37DD -31FFFAE9B27B48798FFBF14D18A2C6F1306522CD8E8C0D8CFC228B3F1C17A827 -1E5273E3B5B20C2792275DDD7C17053AE8DB61B679ED2780740E947D5DC47B27 -D35F9B5DE0166539FAE75DA2179F3F9EEB39ED0452E49A35A1E1083683BFAFFD -9A066C4CEA4DE699EDF570C9208892E0ABA87784EFB455238BE1A6A376F64252 -82EA5B523A8B2E7812E3253C2B6E1CC4681656561179A4C95B48E97CA5F9A39C -D255209D9F7D80DF55AA3FB99908B46B101D509F3BD513568A4949920DBDCC6C -70ECD3BA39C44423D02B4E5B13E9F434545979F7ECABE6A6FBD131E169C914A4 -8063C6C9748D32E71D0A25FB40C764ED26450EF49735E12DE893F302FA491B29 -D5154B441D5C61AA4AED88F06C63D52409DE17D7D97C572F7579296D297B9942 -880FFF44810390ACD46FD1E090A6412F7BF21DA7CD3B166A845890CD887F607A -1F04BCC7F4BC3107BCAECD61825A959B61E62795CF4E458EC63F1F2235C64D60 -C62FE46E4A913685CEB2DD7B25494832542059ED9DD0849029BC1272582D630E -4310F978FE6569A4B9B97A7BB4BD602D5D32E79727ACF46429CFF0F7BB8EB39C -DE55DB6246DD9DAB7863DBA6DD21EF340E19727D5AFE9026C284326BA0D4D9CA -E015056824B392BE8B930D04BA60B58CF4A683FA14850B6B24787958D1A7A42C -7C33C1362DF20AF31CB88F0F11BEA022C609D9575F71EE270440480E0AEF6207 -733236DBE9454F088CD4A01F63B6B2C6270DD08A13108ADA783F2E7067B7DE4C -C34AE192B05F68B0022F5F30583D9D68754782186E5B8FF76ABC451DC9EEA08C -52C12642165408AEB813C00DDF6C27F4053435F2CCD8CAEE50704DBA37A4AE42 -9B7960169B0C865E92D270A714449FDF13D8835FC1D4C03D7FB376ABF7201BE8 -A593576476D8AB905076237BCE2630179D158F04568CE4C85734FD0A1C8E3D90 -272F3A65B556C7C803FAE8A0C82756B99C35C06673210766A8042682C873F811 -CCDBC015005336EC438C3476B4AE13715DDF6F7034D032D29F2383E005F6FB4E -19AFD4A02BB7A79917D54519D37BE66ABBC156464898583522A4D63FA6DEF194 -BD4B90C83470330F8B5233C24E80CB64C13C0CFFEE81E3087A4BEB84FC8B152F -44A9FE7D4393C652799B12A2C0FC0842861B1F1B656E802CF0C40DBE95350BA6 -32341D0503CC7CC3348953723981ACFAD95E18348CBAE09B630DE4247F3F7A7D -E4A0095D461854E4CB12840D355912AAC33A5A04C833E20005C2A71509AF51EF -697773C2D5C8F958893B26BC64215E4EBB7350166482F29539AF54D860C68F3D -1C60ADEA814E869E974E1B78114B091134589C089A2CBF12ECF1E31C4122155E -A90587849A11C46DAB620284D66BBEE187B61413740176EA8F914D6923AA0A0D -3C3383D95EC1FE1587DDFEF289B4BBA9EE208408BACBF5FA0A53BFFD88BC0529 -10631201650A258809DCBD5D136E038110AE4B818783716501CC5DDCF42ADC23 -86382A06F7FD13F6E99935F9CFA67D49BD51A2D28E1C605DEDBEFD24BA337407 -00029CDD5E8808F6EC2FE5BAF3BD3995414E9D390092ABDC355B9CD4E80A8DE0 -F104658871D0CC6A7F06CD149A0FB36F4C1F484D5A43AB44394934F65C216EB6 -C33002BF7D0283E798813065C84BB8EBF6E19A0855F0E146A7ED9B4B11C9B89E -48465EBDA7CAB38EA818991CA0B07182AEA5438ACC95823656CE47CF932851EA -3B0A9A2DBCD3FBD926D904749F62E27C4725410E297D9CB2CE16ED4B32AA41B6 -888B1480C538548FB6EA68D3E8221626AE219EE5E998B310D8820AC61CB9D9AE -D5C1AEC7C3CDC305A5E88E028AD21C6DEAF272ACB93916AFB42081E9C46F0C2D -98081D7D0CCFDF2A3062F218582CF432DD75BE9622B1DADB99B5801F709E2267 -BD5E0E1511912DA7D888FDC49C2137F65D5C1A0AE5E10961CC392307890FFA8C -3CC9CE5B898812BB6F0AA59557E352735A2B11D6CA98017C7C118D1D460585E9 -C6A2C132A522F0632B5B66CCDD2572EE7378ABD5EEC211CF82EF19D151D290E5 -0A0B3328C699746960A0A7BBF540E6F6CD9544581D879186CA576E3CC0164930 -264C26785042123F5784D2CAE377233A1387A3B4F8D868B40171EAFE7BEA628E -7ACC740937076C878F76BB8EDF36ABE98111D319AFF427713EF3CB8F16464228 -C083113FCEACDFAB97AA3E193E8FA750FA5024B674F63CFC58073BA959137339 -4B6958AD894CD17C4DAB82CCCCF154343270CEE203E13322D3808321FC02051F -90CB293FC80FE9BCB853738AAD70563E124CB39F9935AF590ACF3F5FA8560169 -2572D275F36192A5ECE86B988D6133B0A1745D6D386937989850DAE1E62D09CE -7D24EE2066814DB161F6103247EC2E8E065940F82E1E984942184E68E556A120 -23F52C75017514BD176AD60F29DB768E9F1B3DBD72C89E895432C39D2EDEB089 -3692507DCD57FCEAB7031D391E5CEC454D5266D140D7EE0CD151F9CB042E044F -FC95CA7AC869B4B04DCE1AE9D5202C36E343B1A2AD786F5B7D0F1AD1E42C4C1B -6E6BDBF86F022D90840FAFD81604C02689B3550AC41AE36435B29CB823D255E2 -EE9BC538502D18ECA40E1F340D0E9BF70C58E9C775D86DBB6BAE3D3EA1BCF920 -6ACACBD4D2E960723EA3376AB2B077010C1E685F759A56E9B0A84BBDBBD9A0D0 -FB4B0806861C272DE667F219D8645EE294FC321D8E373021BA63C1003CE2D689 -D5855861A575696ED7FD601D114E602735DEF72049400119E933DE8A1198DD94 -8457A24FBD19FF5D21D169FD99B6F6F6A2824F8D1653A13D5BBCB9B11E36B8F4 -2F9DAB2CAA39AA9453279F8D222EC4AC8114CAF0F7F58736D457BC01DD915ACF -7D9B4AD3D90F93256C4C9E41CC15A43B71E26A8DAB324639FCCD3E082B580CC7 -B7F2A695D029161D2F3A2A8963EC8BDC0E6D256BA06F08B6D48682CC9ED169B3 -58B063D8D7265C15B59C3DC91EB307F33FFF73C3101AF250F3CCA40A161FB3A9 -B698F261E9F7299F2418D1DCAA1400F7BD3C74AB55316F22593595649F3E9C26 -6F903C6C0B74D96CB7F92CD33D610F0AFDE14516105B49F1A43BFA558BBEF71C -2FE095E954125172B6CFE4C6390F701738232605A38671424723A68F13F2B94E -2FF970C51633660D9F5B00FE64046C85722B40515F34E44F32D18ADA4C85315C -2461D81D8F34BA7B13227E865B7C24236A16D9C6E1F428998C22A43D3D0332BC -55AF05204EA352710B199C0F1F710C96C72370CA7203A2882310A629995B5D78 -D57D695B654A718C5268E9751C7F848CBCF87776ED10DEEEAA32F50769CF5BF6 -58455F8CB9C793290D7F8A38320743F0E87CF2BAE8A07BC2DADAA9F61ED6EF01 -6E24883E78AFD03E23D3A9E77C62147447BB772B4C80C1022727A9C863CB8A7D -5C54C057BE3E148FDF79659CAA77229C438A163D366F5CA9F857ADF98F9377DB -8CA7CE8F361E5A553B4541763D9A6102467A059DFE0004C350EBA6C8FAAD15A9 -3C68C30AD52BC1496C4C214B5ED4E537C3B25DF46166E1B22B0185FBA3F9507E -7ED64C77517B077164E6661D73E441ABBE1BA0F68D8B53BC8337879EB8C08F47 -A579D32D0EDCCD91CF143F05CDE56B87E1F2868D001648513BE0FF3700732AB6 -CEC0CA78BE25810FE125B5542E407A984E758EBF4A3FCECEA2434815F64425D8 -C8D0862CD06D88B613434DA7CADDD3D6D4F1739E744B4DBB99C08CAD6112F0E5 -4FDFAC2B8D0D75A7A7AA5CFBE2C3966284E9D33CA71043357CB951808B3453B3 -B140807FBABE8F6B89A99B329D84E21F14F5D0022C0AD05D24B00CC2DD560C03 -AFC9AE7BF337FCEA66C41BC6A6D3768172C30F45DE176C1B4EA57828702857ED -DDC1953FD25CC900941214ACC73A8878EFE63AE700ABEB0AAF8113675B12D8EF -E370EBC067F82917498DD9A5C6B080AC066FB0B209C52448CD68713AB98D78A4 -7ED37127959969CE4C18D686B8FC5312BCC6B5F4B375DE186E927F42AEB377F4 -E96381BF6906E4A24328DA33A3C33F00C7034C53B10CEC70058D312D3EBDF1B7 -C81E0972E77259376669C71141162CDE55F5EF7E4A8A95A16AEBF41D00740055 -FA8CADB6CCAF1BF0850C4A11F905AD3287BB90D66E2878C58F00A71DFE1334B3 -3FEF4A33513070FB9AF215BD26E039563DF3BFD597B8723545C52570E863DA43 -8303766D7B0CC6EC75676C77516470F9D83908C0F91AB5DDF2041BCC68B1D3F1 -652153EE95DB246F151F63D85410B6B5FA265937B373A085AE2C42542287C17E -7FEEC7246F98BF641ABA0006F8658956222A9E5CF6605A3A93E5C0C97F43E679 -321F598CB94963C49AE48BA497D99B304D53F40D605D17DC12D966837825B070 -6AF66368D569B2BA9FD4066A155970E0A9BFD8F9E4645A41EE98391C5A2819A4 -CA09ACF8A056B5F65A4EC08DB490EC4BCCABF6D5ED8DDADD250A704D8D0B70F5 -D54C83A4E971792EB7A807172475F195836A9184EAB13020A8924232C95C8C54 -5852CACDC34481E182F98C3A3102EB6979B8D81A2FDA248D74E76B3C8900D6EE -9EB9AB23DCE457ABB1829C514F5AFBB43435FB2B4E83E6FB0CF79F24E93591FF -59AFC759E491A9B569A1B1EE3D61CA858357BE7215484F4504C6098EB705BA7B -A38C7B683FBF36EBD39987C5447C4F5074893D934C59A056D72AE4F0A363BA09 -EAC3C4AB6EECF15BAD98A0201CDB4F836206F64FE1B84E590D6D4119D2F7B548 -36A2B3EDED5A8BBCD95509EAD11F6F43FEC653F131CB4AD546A6B7096353B016 -FAE4C3C0C8AFE9E541291104425A1DBBF7091AACF5F539F29CF261F27DB2F2E9 -96B170EBD139D7D9BD009D6DC3EED26EFD5F0FD4F46F590B3D218F0F54F324A5 -C4FA31B4DA7340302287C8A3F2417F02C6324F2EF4A7BA2612F343EF11A4B4D8 -C3D6CF3DBCD272010AC01B525420CADFFBF2341F22B018515D954AA24E026A00 -AB3B5045E73440ACD6A2957BC5835009A310C7C85DA385C498D5D847469563D4 -146E97EC0FE9F8B5244B6F9C83B6E1DAFD109EB7FB1AA5AAA3A3ABCBF4B4FD5C -07B5524EA0501EAEC5D280688D6FBF1441317C2EB2DF818120427B4FB62A6AB2 -68FB208350BE986F805CC893E6C3F0B2936152B1E7E19001913C0A9F821C345D -6873A92FDF009CF16B72FAB99632B783DD3EE5317C30D3363C10569FED1519C6 -78F6A2343B3152C4303321F6E2158C040C7877C7514F30A15F052D3C0EB1794D -17A5BA81039F0B0F3CB0093CF6FA0D7389DB279018806C1957154952901F41D5 -C9786A7C0EE76E57189A58925CC11B9F79C17687198674B2CDBD77AF4E0C528F -21E588FBDAE805AB5ADE20E37242C55D6ECB9574C82A6044BBF8C649A39C5512 -D500006733919C4FDDCB5BF3F586E6C0DADDE28524039187CD1551FC7E193DD8 -B912AC9D6DAE8B1FC859C46D871FC08408E2ADAEF7A361A47DA2DC64DAE45B96 -AB720474BFE8ECB8A524FCEBA21ED5A28A01F90F6D28A7D40A4F1A9C2A7A9820 -12FE8B0E532D637F1FD9E939F124A8322AB92792AC25B2C6D5964F54FBC0E882 -9B4BBDEBB7895CCC4DE40159121E2BBEECBEFC1E83E2C386654997A9E9947B7D -38EE4C03C5145167E554DA0A7EB0FC8F4B80D822C321D7574D05A1289494271A -501FDE3325B7C87E1D24C34E08B799A073AC8361C9D49A02B564126065A7D550 -07E36365337A08E65AC7130BA92D6C9B97B12300F2C8886F55EE9C434F7768BE -5B9BD13D87F2063E39747F10C2CDF8A60B9196FCAAE79FEFCA552919AE988A2B -B16705FD84EFB22DC538ADECFCCBBE8E1F58BED0588678CE1A0005FB3F5BCB82 -E5519E9D23ED670D2D6BDE06E36D0EEEE7D78F99BFE25E1A89145B138612C8A4 -90D0B41453AFA81C62DDF3B21CAFE3C9807275BA3C5A25E74FFBD61A092958FB -CB84C171EBA5F91D31123B578780AED7E074BCAE8DEB9C10900F2261F198ACAD -72621D416CA2768A0851FC0F5483895FC84FD629F1C32212528C966DA662FE7B -8DE8D4B261723F8853A5BAF63276EA472698079F7C8E09908C614A0B8BC680F5 -9EBD5DEB3866EE4DE76926BC31DCD160224A056BB6EB98843D2AA129A3B35999 -3A31A60727B74218771BC7594DD1494E8B385F037F1CEEF0E1F413507E89F426 -A88D4D599B8B7D40E7C90A2CE00EC61E35AE94FD68E165AA4B30F3163DA0B493 -18FCC396151A860D96AF51C1BCEBBCD15C711BFB5A33692D7FB570F044386748 -6BF849598D52C58F4E963263CE9A9F64E8EFABAD9FE77B69C1F62A418E7DC918 -87470BE747148D5D3B5C718F9F49E2F398E7A2CDC59216AAB2F16FDFBA741F9A -9E0FDD43CF376DDEDC8FE833FE4CB1D5E27B7CF160F2F22A05A117F348B632CE -B9C299669607C6A08C86187B78A6AC4A70C5D6A204153B346D2AF6E4DF9175F2 -31607B29E99B5641BF3A818AE6173008066844469A0837A35C227DA9863D9ADE -DD2314224B8C3296B93D698D0B5F980EF4E1B62C30EC9760CBDBFC0277A242B7 -CE7989E0BA910E13734EDA04992F06A0A77E8B20C87EF6AC80A2AB7C7FEA5768 -46D2BAD6C8CF1D70B9CAD91EE7FB2F88562D6280C12A1B4D32FDA0A422E248CF -220ADA5A2AB5597B312386A58F8A21C3ADCE6D5FEE3F9D2A4363835B07527BE5 -BABF7FD63B05217FFC7ADCF2EC311F6B91AB091C6C963255B4B8453897C5D8E4 -B67CEA88C09C23A3FEFCA3AECE9B7ECF02DF65A99750A337D1FC2F13D198247A -D892F0D9A6A06265820AEFABB3F0729AC4AF8062B916DD3ADB87121EB799965E -A07438A72CED4E5320E6706DC2CE33BA6085DF0F9C788A176571DA3501A15929 -C2214FFA20A0470B9CE8952CA671C1B717A57B48CC839F5DB4A6D66248D182FE -C6D0C89A8CBE513E0AA41595376F70DC4EEA7ECA38B8E44EF6BAD64F6C15103F -A7692126DF2BB08AA38C4B90DD6C39B0B462A4B37729CC59B85105D5C6309749 -F1C93F8B2EF214F2CBB58922F050A80C2EF0F7A0D332B5F5D0209D7EB3779828 -F94760FC65E0F1547CCEC5159B7F751637F8A73FFF9860547CDC94040F432FF3 -0BA714B6665EE9F20A8A56C3D3E6225C3CF95D24079E41797913B7BC1869D27E -32212E244C9E9184CF56CD15A8F1EA694C92FC45997426F19201EE37CBC2B24A -A8015D92E29308FFDF9901CFD5061DE67D85AB5E9E5752356F4C98AB864AF589 -389E6B85C439670B28609810859B5EADD6173159903FC65125EE9F444ADD967A -CCB73B5C4E153C81110C5578C552D914E05DD3A18395087CB147B1985AABB2A5 -A2D97BD3D050EC2729E4B2E05F5204C06E266F552ECBC4472B0710D7A431C3E1 -0B7F89FBB561D42487527024D0F9AAAB4CC4233DA4900FABA883A595CD445101 -45B5F4088B21B546BCD6C0D6B757BD8114A7AFBDDEDCF923016671015D3DE3D3 -3759EE001C9828684374E20D6EECA756DE290F6A020E09D8C411353231FBD7AC -E02EC25A5B7AB5C681FB95A03D79AA01CD91B0F58CD3E3C723BD40ABD4B9459C -4AADA21BC33C4F5161874616818BE67923E3FD3D65BD18D4F90691F491B4EF3C -34DBBD11D03D396A086FE67F18928C5409FC0298D21AAB0779CFA7440FD3A083 -7C3414740EF7654EEAEF51253FEAEBCD7C0D5958E1EE340A298902E4B23E5BA0 -AB47D6B8A41DCE006A4E3671840A4C077E9E948AC9C1FF7AE26D09575727C2FC -8A2EC23A7736665DC4AE2BB65B475640BE71AC6D66BA0971128E7840654E715B -EA8C8277C1BC221590A283EE764584DA9AEF65CBB1E52CC41736378F1E294C44 -0701F1977AD8F5F8F2D060DEB4FA32D9D9FC53408522F74640D3444BABB39209 -68C1873D6E0C0E3E10483D67CF70570F55FF4A111F0F4EB54557AAA79115E31D -8D682671241914FC07D431201AD76319A849D53640C5E517AF616A157A056CF0 -ECBBA141AED25FF648829604626D52BE98AA9B29EF2E2382ADCF9704D0B2216E -D7408C359B159E84389B5454AD8E10E4C62C592E052590DFEBE546B02E2C100B -599FFA2942872097FB093540BF7786E7D45A8B5EEAD6D1C1118FEED2635012CA -178A40DF6F626F6596CC773954472F5D4CBC310CCC041E384304ABD270BA8ECB -D04051004C71FEB557C434CF3773FA9750F5C2757B7F1CD17DEE48B1437B59BC -30E690522C3045943D45EA6E51A4EBF8FCC557261689C562BF8705780986D2FA -C866A3FC22F941DAD2820912C97510B1CBB1BA36839EEF82DCF7368E382A4EFA -0ADD7FE767994941E9A5D7CC44570DAE3CE7A785D65AE2784B079BAA5DF1D7ED -C870EB560B792467C72C874601061E0FB3BF003101EAF8BCF7BF01F6DC3A71BE -32D391649160BE738A739FC07BE94A0241BB41CBE04A5F794C37E2F5C258CA81 -9126D73B4471411D4251283EC936EBE3F8C28EC36BA0E38FD4136F779635E95D -8D5E5C4E14C680D855DDBB8C1F90FF30BDC971919C7E6A93074A36D88561114E -6C999B1CBED051B7675B6264E27EC4A015CDE54B0A986250A21271BFF242B675 -9AD36175B01E120D43F8A60FEB9DAED5A70BB4FA975450097B966F1C95F2BA44 -3071E1057B6996F53199879DF834EC867B161334FD281CCF75CA1480F04DDC4F -511E6EA992114990629034D590C97A6409B520A5E78BF118E11B2BB74F1374FD -F3415AF23290A4FC3DF6683F1D5663B17260850FB1E307D670CD527E53BB2CB4 -40A4452BEE0F4BE7C62B0A7074A5303B534F3BBAEF96C818A3BCCC30B082B502 -55B5A82FC5E0C6EE660EF38167D9AFD853D48500839B16E1FEE13BB232D55040 -0805F63323C6D228E192B6DDBFC0A54C19C3059E16EA511F33278AE666C403B3 -BBEC3B9F435A9752984B43DC4DC6C5AED25A3D2E73B10B01BA097BCFD167D4EC -937DEAF6D992D924FC03B53A70EDE75494FC0EC27A34EF8B637357BFE6081EC4 -9731750F93B4AC3D1B3B6FAE7AE7D71DE3F2C0CF4D734CD43DA41A24DA7E7C46 -A1E76C9C1005C0313797A2C620DB3EA13E924BC71B2916C308533834030CEBE2 -E2CAF5AFBC7FC6D6F0D12FFB290A461F7D262A1F620AAFF509F05705D48FCC67 -B143ECD4F2B0D61AA00A69B700209F2DE4988323112836FC1A75409516F86D16 -3D36C7B1E7C4995E19F0370586B4C6242C64E9604D541B1DBC252F782D4F5BEE -A81FBFF9D7A49307E2265AAC20501FDE30BA6E9C949D5095DAF00ADAF7BD67A3 -77BEE10C62F19F9CC3B0763A9B1A62EBF43FAB15425E7D7AD7E29D9B40FCA346 -096549B43EF7BAAD35FA663928050E3E82551D502403105F7881257039A8D67F -1B5934CB7FF76D879DC26D6D9F8DB1412E04A18CCC4E30600EEEF35557E73FF0 -B9583317CE899891CC608D3E5332E0CF05C754FDB2256BC946EE256607A1550C -75907D32C995B1B54A243617AE98E2BA9C042B7ACFB4919970505E7482653F4F -F780ACE9308C9BEA60C891C5FF175E108C45301C588D4636C09AF8D6AF016450 -F66E262673314125FD1459282BA9A0EC01A7305A8ACFB6FCC254BE58DF6CD19B -98483D77048A3DE933F94DB60CB3D89A7404939FCCF918464032EC47402AB1C0 -DB66E1F48AADE6A3DA6D77D6124D75B84C5CF556AAAB07FCC2DB87262E5454C6 -4814F1933591DD4C29841719D334BB11281B94E5D44D234212C3A7A42C2FF04A -9766AD45A1B0498D0DE841D0DCD7C02428806F6F158B7C69B92743892FC693AE -4A147EE4E79D6F47017DB95262BBC9787D330D3A4A8A85EAFB909E197177EC4E -F2DF74F543EB7D97B5EB6534D7BF16D16560908D8408777D96D88741604B2697 -67E91C3041645C0843815BB87E0C6CF3BE2F8244A24017E6C2114EF0F51BFA97 -15353712C0F388552A853B285DFDE41F352F5ACF474B8D86491C2F2977FDDB43 -1F00F9C05C87ACF8D9F9B56C3617FEA2E7D8D9195C2C553A6863C734145D156E -FCC1D17572AAAEB4B0BE5CE51D10BD4273020DFF43E0F1FD270BFEEC8B2BDC3A -F16B43FBDFADB690685A6891B497412EDC358CED9589836AB173BD20E984CCF3 -59759CBCAE3825BE4A428BEF168DD88717837503804BDECF675BDB8174DA3EAF -EF5ABC8BAE00FDCA6F1AFEA1C03C14902D0FD9BD67EEB2F344A374688117858C -DFD1AB9A50E7F4BE806C5C5BAE3F07B8A7F3D4F54A29187BC6C38520895A823C -4B5B184FBA09CAA547CD661F6B4BF98E68A630D403D214374C554737AD7D5994 -81149DB2480176D618EF15E0517D56BA02FC995E85F2DBBCBD046F723D52903F -14B617472E7305E9F6C223D78A2F477C9D065181AA86FE051F70F7B52A3D82F7 -ECF18D48DA8C17870E8B7E543470AC7BE549759A1B27F31AB30C68ACE22BC9AC -E147F8C182255E7262EAC0D1DD1B8FA888D0D5CE9E2780C0280C519AD761AEB9 -C5C3FE40DBC65147F680F9D2F6B9AF3BFB5D075E91CF3A092249EA71774FBDFA -FC479A7148B477BE528C3667F0C3CD9C1CB9ADDF4F4AC8F93E1FDAAF3FE1793A -24F95BD0EFFDCD59298BA7BD8DD48A718C660E195C765E450380F771183B302F -F5F27514863F9FC48CBC94306556B6DAF16D54F9CEA9C45A8D28AC6CE2CF954B -771BD117CB67E8F93D933BD0693AC61D82BA1381D51AC427425F8791B779AEC6 -20AA9905734C7688F1B1EAB3F1F713B14883C48EBA0E91A64C7EDC850C1A6D7D -186F405C48125A77377DE45AE05B6BB2FC42849EACF6F6F9C003EA93D00B89DA -79E540A2B9BD52113D41618D7483068F923B847718FD6C516000B5B51769787C -8DF0B33977F61AB477861AB8D493ACCFF30D4F39511B0D9BFDE188FBDAE805AB -5ADE2C628E6E047CCE9EC352CB63964DC90905AF18DC3C7874C337AD2184267B -DF974A6237B97451A0C77410EFBB3A8A3D55643CA08A8EA2E0AC5F0A9375C461 -E4B343F80CEC40568C521447BDCE1A2E5D45408B47E5058D328C8BC323DAAE9B -274E797685343E37583F2F631BB07A8B954A5124FB9B90EAA7E22DEE4EA616F0 -C65C57864A3AE70F4E7C09328B845F53AAB943138E005B560EAA306EF67AACDB -122F74773D084FC0FE926AD1FC0C3EBC9BA82904EC2D6596EA65F4B3E4B5BEEF -74C3CE3CD45EAC63D7202E2FB9EE03AE4DF5B30E0C78AA18F38EAC73045DF537 -03D558AFD6CF63271F3AE844614482BAC4A34CECBB873F13888C35B29652E763 -30087613B8C3CF47008FF0C2B4DCE7B4FB86D0B968AC4E98882EAB48F41F7197 -9AD42A9C46648EE7F0F270C203E125C92CD0FAF9ADCFA05AEB08A69DCCB712CE -75D6B6BE60839492D18BA28DA2251A5E5D3D9504100501B32AB001F5D4AA2991 -ED06C8F063F93B888D504C5596CD273307730460EB46BC5FAC040123AE2837CF -59E9BA4C2B1E83412CE3F9CB5E2FC7DB0D15607276D93B3738C549619B17C0D8 -357FD5094A703B74DB8D61525C3FC1DCCAD810F5E5278897DEFAD47FE30350D0 -C9D3D830D5447A8E52AD2DAEFFD2279EE01FC95F4C38EF18A6EE079727FF62F8 -7F4D2BE5B80CB0B14DF3281A312EEEF077584D7FD2F0C06B6047934D745F3396 -AA7ED80DD3B1E3D1FA27D68C68F1317D30FB14C6D9D5F31EEC05578C08949A0A -866D434E4C62087DC082C036BEC3F9DAD2A26BF89687D537B58A9001CF3324A7 -75022AD2F66C9F4200A5EDE0314190F6638E8F7703B25C0912681695CEF8AE5C -E0A8D860526C6AAD0B0C3CA9CEABA721C69D93D5240F186B849BF50843DC098D -9F57A70E3B2F0961B304D771FFBDBE2B5B737FFCE21DB8EAC51594138F63A104 -9994DB21D186FC4C317A14FE9FE9FDA16B9B9B2F94E1E8A9DB232DF8B23C3704 -53164F61CCC22789D30C7145B6FAEC3D0501AF29B4FFE749A091BA859EE5CAE9 -9A404B19E949311CE275101FC885408CDC12C46AD88F530DEB6FC3DBC7929613 -C5FDB899B93807527A6CD8842B09E701E3C2BDCB75945C4B2E473BC4DE2C9B07 -5DBF4243D35E70B03A26DCD0EF55282E7993032441E8B6EBC5EA8923931B48AF -3A9618E3E6759C2CF32332BE904D74B41A46B53EC579A8CD490E2D94BBE4131A -89BDA47D0809830EAAA4C6BD50D146AC79909979E5716F768D1D95919C6AC4C1 -A63AF5CFE0C31F4E8CA5BE704EB74876DD3E8BCA2CC14DFF2C6D3F15A5A66564 -2416789B275E6FDC2E93EBAB3FE9448FB38AF02F3D37D1C9105B03A49DB0A86D -275CD3CFF32C1250335100991700B0973F3D5E54C39D07D260C2FF3E054D2D5A -728CA8DF72801940AF4F129FB2E5C4F32DAB16258C3DDF41B41334304C99D25C -D164D565E687B6FBAA406E001BD778939720B725B29B0444EBB2E22AF08A50FF -0C00EA68F9D4EC2C0DAE1D0CEDDB9C7417A413F5173326DC5CB8275021CE6F04 -5A9B58A4D50832A861CDF9C9D31525D35A943AAF66A34877DF57FB6B156AAB19 -3EF93C8C4B8394FC0A51732AF46FEC3497D2D84B19F64AFC3BC52B054231D5B9 -A34D45FDBC25501D52C6ECC63492962B685FEE3BBB6C2DD70A84D704CA35D745 -467E73C8E5B6A2DD66C370D412525628174D5E10201C84C9C4DC77D0FC4EFF73 -293ECBD31C01A74379DD9C4F90EAAE5FF84ACE13643356755405F66C7361A2AD -8600BE9E98A52536FFA517A2D4AF896663E6B930A66E2DFFF2C57D4D7A5C9F69 -F3154F6F8375E9803060CE0D4C45AF6475E53920957BF365961DDC2DF476F74B -5149BD0687AFE0786B18D2BACC769E28A6E2E8BB1E3F284992AD1F1DC058AF02 -CC94EE0845124DAE980E6D9ECEAAEE1849027B0684DF492F168C5DE0DEADF4D8 -9800BAEAEAC9168846D852C49387968E86D65ECE24D6AA3B60A64CF86484DE06 -F540D5FBFA86BF810EF5DA04473E8E25345AC9A12424150EB621CEED8B1EB090 -C76FA51610E7CBE23C6CDF040AD880B73F3331F85824319DDE430C00AD7F809D -D408879B1FFFFDA10384BCC19C8F3499B63C19DCAF99A5D0C2A948A7CB69E094 -5D3A79A06DCD7FE2122D3B3E646ED2032B8F82DBAD82A8563C5667A5F015D31F -8FA8AF22D4728672AEED085F88DD7DE8BD13B0E7D0306969AF29AD850E149889 -2B4F81D1592CC36DA27A29097B8F720F477E6F9E26DE7C265A54BE07E036B7F4 -ED5E303876C82496C2C5396679DF6A91802452F079AA8E653D13438B214AB47A -282D714843AFF0B74BF1F72C4F7EE4A012EAEE04A82AD8B2EFAAA33A87977644 -AC4F6E5CD474A6C8B08EADCC1665E3FFD09C78FF30CB4929CA140E04795686BB -C985F7CEB0363FA650137E7DA8226A45810CA44175E66ADA50A0743211D3FC9B -11B4EF4B5DED09A3CA69E48E0ADCFA5EAF749DF18AEDE11F9046A8629880C9D6 -38BA9498CC17F4DECF25ABC9AD80335ACCFDC534C82A9A479EC9074A1D9A01DD -96D464E1D630688755587DCCB5E8C1AD4032B4EFF0E645E2E2329D08128E3D11 -C8D22F4CD4E4783DAC3D6BE9AAEBC2F4AF3DDB05020796C972677AB90AD7E8EB -9FE96669A4615BFE4BB77CC787C941B7A0FD430AD5B9D7B63A26E954A28F60CB -E380AD0BB4724D99F3F46E73160555A2BDD7FF5BE83A2312F7B04055EBE5B2A0 -08FD96C4C90DD9A06DB0B3D5F570E8CF4E9FD7FAEF7B5042A5513C1988E63ABF -B3C8E1D8704041E279CBBF208AC23385E97A6EAC8BC634E3F9BEDCB3EAC4C57A -EDA544E06719AF5BEF69257CCA51FA7840BE8E21F66707EF31300DDC70717F44 -EB2DF6070007E7B93D1357ECF8ABF097B757524E92D31524638E69E63B2DB200 -4BA1E338B284936557D6DF04AB23741BCA5CE6B34099FCBA07CAA9595DAF1E8D -F10FCA58FEBBE12F8E2FE6A0680EA5E6CE0CDBF9A1C872621CA4C10AC91E3F55 -14C3918E1D32A2078CCF4D109ACB79C3FC55E3D222B9BC8E1D0CCBA5DFF91B1D -76367940D4CB4CDEC260F3152E03A86FEF74DA6A1DB82522B496C177A77EE9C8 -652B0B6DF023E60401AD8614ED9D77224D822F4B961EEAB6D9911922311131B4 -49167FEAD3E3EC5E251618F7D1986069847C7F1E7503E04B48DFE249135CA5D2 -8903F8C25A141CBD2E7117332EE320DE0DBF03946FBA0DA27F8DF4AF8771699F -696C489E8AA7EEE92B7824B5A03D8B297F9C606E64BC376B10C5C606106CA8C8 -B764BFAB04512AA9510A361CE189858A9A565276CF007EC6BC1C7ADCD6C4CCE5 -CDF512143002C6C2376D3CB2624095DB10CE42032BAFBFF7FFB6BC8AC5EBE973 -02520AE31D24A36AF5C897965EE3922C280FB056A36B802E1FD49A7C590F9A3A -2D699F0DA5D50F8EF5C01779953A5BB88EEAFD3DB8C428C6514146B1B55348E1 -E2CE1D3D4A13A84A240C40084EA97B971EFA414370BFBFAB6F6342425A324388 -7DB7E4A7BF1FB654BC7DCB56C7E1FAB0848828B86F5CC8B069055B76986391C9 -76CCF12F945173646F85C1676235855107EBAD75BDA3CB3E655BC81AFDF3F629 -F79687F72BDA04FBF6ADD00F9A1F21C0007599A177F46140D6004D06F6CDA03F -F087938716D4D6B2806985ADCC344B17B976547AE0F745FBF4B8663EE4F39196 -4B21F9AA8442DF78B1BEF23166510DBCE4405A20DAF5AEB09C4ADBE05169A52D -839BA7B8CC777A0E4F685686F344716E2AC2940282FBC795966BEB564B018DD8 -FC56F588AD42CC2630ACDB1957CD2F3A461AAC09E95A549144809DD7533812A5 -7A8BF8BE337EB618E11D24B0B2C34CB39BA93DBF0A588DF611669ED72B92144F -FAC3BE40B7B1E56B38068008B17DAC0C6648E5868A965166A798B9C918B5FC67 -E60AF10D6191FCB156411ADCCC75010D56E7A87C95F7C1CB33EAAC7231BAA719 -B927473D40BB980F3E9D304567305A653290423E74BE544D39BFE92E0CE23BE9 -0ECCBDD14E74EDC3C19B121128E807299C64E68391F13A96CB1A418A450AA9C0 -982B3B3CAC83E11C8A6CABC01F5F358F2BB79578D8298FDB47151007756597FF -0574F3357B719AC0E368A14CC91F6E65108FE1AF6797DA6AE4CA52E1B15890B0 -888D8082B70CA6B7BC5FB7AD9262CEA6FD18611AA1D7378735E923A6A45D1869 -81801E21906A4D73AF8D397B6DFA28F52355FBF16BCBACA72DAF170FE4CED247 -F8A80C1CB66BD33BBE1AD30182305ADB2A88BD5F9B435B472AD6564845EA9CD8 -84738801D498CF826C540664BC8E87B868C982E49D77916CB87E10AC669FBD19 -2CAEFD9113127041479C98CF1B2987A45A22ED99B048EB76AB183714E069D51E -6DA757A9A4E17E07AB37FFEA7618ED5E583F4910C7EC87042E8180DDBA7CF58A -B8417BBCCF198AFB196124807215030A9204771B3CAFA90876A5193F954D73ED -F0BAB43D936D0617D804B6B2CACCE9FACD2035141808E583A6E4AD03FC1719B8 -7BC89A97156B32033B9A3538E348C8D7A59183132E9BADA34F1E77B2FC8CF783 -3ECF3E24FEAC7C7BE1E236A94C9C44CEC78DA17D4D33BEEAE1A76CB5D4F0DD8D -93E332D493C6D6ECE0FC03CBBD275441D61AF9A42443355A369A0C495CDB74E5 -AE071679D9DFA6715543D3FC1B6E4F66E5557428C616047C498DA9F50EFA1683 -AADCF6B403F0EF9A78F1F8F1ACC478D0B5B66FD60322C5AFC4C79557998FC714 -41AAF6009A53424935C0EEEAED8CB4513D8CF9AD3B52CF941989591FAF2696CC -40F1887F8EA77AEEDF67CD3BAB4BF1DB2E57087D50A1F5944942CA5CB7085240 -1929A28CF489F26F59B850FC78A647287740EF2755A91C7196E4A53063C42BC3 -575061B2CC994D41EFA131FCB266A9AD1E18DBD854F2B99846EC903AFBBEAA98 -B32671B08856D84FBB7BCF5B82D245F7DD6459CB437B4183ACA555B4B274A63E -158F68D8873925660D260B4C7884014E735B72EF322D646C4CF5EA4917CAAA18 -3FF6ABC26D16ED118DC4F1B85B3405A6EBD15C1A186D7C7A9A8D22F6F03B5DED -F11167C738C758092C6BEE44D03532AD27708884E6F3EBD040A906D59E81FDEB -BF0C0AD4030D661DDC3048CF4883A59C362229EAB078978F7E62B9AFD9E329B4 -822CCFC1DCBC7D0714E5EF2B7BAA7126894612E5D1F4CE7421DB0580E8C3CCCA -BEC8DFD6392E9575607C895CD9FA1D78E92B634D62F3FB5DA75BA65958F720A8 -C0006A580F39D8B63D7351BE480B24B3E10318BE8780D486D3AE2E510217A5A0 -3936E396AD22D01D611DDE5F0F5140BB003D24599E9238397939ABC3833B8B79 -5C2B8CF9DEA9F3DB71377EA34DFF4A7062E91BA9E090A815AAB4EE3CE94A4619 -488EB722ACB22B32C391633A9B6BFFE656C75BC7A9DEF0E02CDC56DAEA9597E9 -360562717D81560E24972ED5E8C9CDF7F54B30792829A9136D2CC9B1348504C7 -A2F500383EC033F4756FE20A8EC0B1B0643F8644C1D871AFE21412EF88BB7497 -C79E3905528B6B2F744B9C9F10988BE7D061F5A5F56C72EBFB94A5FFE994A2C5 -D0BBD6F79F2BBFC9B811D6B4AAF40FE1D3FA6DE3EC49E0F24EA9490D6E3F81E0 -B56FC8B4D6EA1A0E899A9C1ADE24693A6D7E4C214D0847E8C0D5B31FB133F4B0 -F77BC331474486F8E4A69E970054D0802BFBEFA856550D95FC2CA900F5D6D3D1 -38A892C66D541937D24D9FAF5F54F169E5E78BF181F2C2E2B2E2B5D6E0F21727 -1E420D2E69203BD76417DE9A70685382A0F3329FC26C671537CB07764D1165A7 -6E4403882716938A18DEDF1292F688F657E27FA8E5D86821978DB65B0166FC49 -E7CD5C8D1C6AE1B78EF02E8A81B51B20EF5BFA1EC1F2B80017292FBB6168CC82 -871CA253ACEF6AC823372F41CC766617377ADB19FD677C46D7CCABF870DC5DC5 -0366E0A5750ED38A2A86811F9852E9878A95D3BA0F6CE7FA2670480B6523BAA2 -ABAD6A9C2D43E2BD21F2EE7222D21DBC394EF4CA9FE693A5A77CEC2EA60645ED -BA3BF1ACC360B253C970F7BB86281CA813563CDEE08817DBBA24059FF290B550 -4F803469E990F5ABC2F66726E7D04E00D8E634CEC60EFF5FB69ECCAC20C2986D -65F5ECD610BAF2EA2AB937056DC724FEAE337F5777258FB5462F3C94AA7E94D0 -FCA0B0684F884D7EC6ED8BFD0AB95BD5830CB4ACBFE139AB0A0C1C288A318B59 -A9A3E79A5D1D8A13ED7F632C7E52216E16A331101EF404489B2B095C0F787063 -9370950775CA15495982D882396417FAC4FF86355E203F53B33F35D4A5175EAC -A78FC91C980A6AA5BD49D87043C4686B224D0535C816ADD1D48BB45EE7529E64 -0EDB35B4A27C167DFE994EDFB41D9D166802E37318CB6D4CDDBC73F7CB30816D -E9C645E32C1B7513199F8D099CF39BB8DD762B6A947AC26242B3D51B11971F72 -DA4F942EB19C883CC0749E1596CB89A1E6EACCB35594FD8E272F1DB7529B059F -FB204FC404789EE182D117AB303A886EAACAC08999B19367801BA5622F5443E5 -1EB2903D603F215C9355DEEE42A5DD29C5CBAF1BA1FD52B9F8E1FC5DED7DE91F -34A4461661549339B595FEF063BA44CC0DE7428E131CA38106279246F5B9FFAF -B127B9B46B1F5E050133071924005746AD3D6AA91E4A0E75E5056AC983A6141D -D3DE44D5B37461A76EF6A8906210456F13FCD15203A80AC071FE10B2F064145D -0C7FCF12AC9EDAD42EDF4E327FA57D6BA92607F41B7E34A7DD27945B4AB2F0EA -532AA886EC057F98964EC0CC1E4BE095ADCF030B1952293B7B6465919A833D52 -F24EF2D9BEE963F7A33320CE29D54471526D4592CB09B0DED834AEDCAE0B629C -5BE4E13337BA87E9D64D744CA5CE709E528F7BBB7C35A3444D643B1ACDED2F6C -F4CE7ABD757F477BB4F64459886814743C8872DD2312EB952D5DAD81B0A6E52E -AF1915A81D5DE395BE25B24412ACFA3C65B7E447BC4B801B5531218BCA18B0B8 -D72809B5B3DC921B2BB0B76B91618064F45F614C3B3E0506CB24DF52FF8F2555 -6B231AD0088DBDDE51908430A8102E0246EE56870D08C960E00B9D49CFD7D751 -697625B30027C82D4B3AD0AD5CB90CEE2A2FF301608967581CC45FE77D67EFFB -2508905DFB42A0C335D1FFF2FDA1DEBE81C39628F53601D9ABAA6211D044F930 -70378306273D11DA99BE820BFF208CE0A7A81447056FA422428A6A21389CCFDC -5FC34E06B4EA5D9C5DA9AA401F1733E2CF6669B438134AF47130FB9838208A83 -668067B89C9025CC059E73C6B4C332E1D70BA59A83EB7E4407D000167DFDEC42 -8B86B4B1D5772DBC673CE5F8128858E46EAD3A675BB5BACF61E0D1114D5AC0A7 -D4BA9FD5C37FE37D6823A517F39B1FB14B01E38597E51BC93CB836825ED1A3B5 -B841CAF361302234A2C3560FDC71BCF6D8832A1D74AE60806863BC1F3271640D -73A10720CD078DAF15652B50716C0BE61EBDBA0AAA8A6DAFAAA327C69C29321B -251BF50D418596E84DC3BE92542887BC0785F6128085F019C1FE9EF33E02A968 -DB0504FAF26E033A05C4C37E5946EC500C5941F83318E765DCBCD06D4A09B208 -56F226B0C8A9C55B6EB087C936F7237FB2A3D2A262E9C6F95D454AB92801BF57 -B5788CD2C0FBAAF274BF5A8BA908CA18EC8FB5C52368DDBEC42F9C3E6FA16AD9 -6D4CB47C2359309BA3B458BD05FD4FB40EDF6B495DCE6A091E780B328BFA995F -869B5ED92BF513511C6DD88690114C5F3626CC6824ADD9E2BBF528158995DB9C -08888D928E420016C254485603C49FEA0D26E34850843A066F5628509183FB4F -78C3E0FFDF61E91C984D23DBC5677442559540A798E820E3F1BCC192456E9B53 -72F2EE0EFE321115375F0E43AB35256C770F5DC063DC7DD4CC59CECE9E7F3BAE -BD474CC7AA33FAEB2920A44D78A51D3B75964A4310F30CC0E33018D3E365F947 -A69434C67400EA09F40706320D603F292862AC24A488AAFAB0392C470C84C912 -11BD82A3A5A3B70D3DE85F3095A6AB122A930F8014AF527B71B424D29E91123B -0934BAA13F0765A883CED744E967B810EF265AAB4F7097A817E94C580068AF35 -C141EEBC26D24754BEC2FF730ADA142BEAD3DE4292E93A359E701D90EC594E6C -D1FC795EE82FEC8FEAB7D21C656D079645F36FC9FC9D7C8B35B0BF424FFCD466 -65CAD025F6C31398018304AF29117430B8745D8372FAE966404129C8BDD5F31B -BD827695C491C7E6D7B15867AB4C5DF488CB9628C6C8C114293337043B1616D5 -6F6B6C5F75238B27ABBB0773565A686BFAD3593BF53BA7C8272E1C597DBA0D6F -D16517424581069689EEBF47641F9A0E3E7367423FDD88FDFCE78426A0D3F0D9 -942F66169B84E5418C80585989E407B5415EEDD8961BABB8AE61BDD51AE60BCF -033F5360E7294430CDEB05DFB40C382D28C9834782B68F73FE9C129B7AAEDC38 -E3B6DD8DC041408FA064E0AC4EE68A7C07D96A51A1B7C65CA28951E38B58B774 -0312CE987BBEC2B3C6F20556F7E8066353CC46D8AF15DA8D7CEC2DBA8A3038B0 -BC09C733C76D095F8BBA0EF44D6C1E397B19A866364DF8EAD8E2E0E7531C7525 -8A6451008591A02C59FC1DAA7C83A3689A79037EB90522FEE181763D496A716E -C01C78642DFFE2589D3980574220F09B144072E6135DEF2919CC852056C82B8B -7F8EAC363D0D89CBDFA1B40505F3D356EE16E5170FBEA46B426E3D88FEBD8E23 -59C2FEDC109DC7A300FAC3EBA750BF6071DAF7327884D3C7467A15189AF18DAE -17F6605DDE4E2B2F3AFC641503E4DFE27F462705B356F7C17E1AA0E3D26C56EB -DADA9BF8B1E7149459B958001093DE38391374A78BEF8951DB54A69964525693 -63C5017ADE86C0E2CA89BB581FF57D0370F8AED9C95E326F88533E690B1C591F -ED30E893431F6F615ABB187130634BDAF94568E2E17613658D02B29A25F35F06 -7FFA714B60A56D2E9D586D4A4DBCFF440A2B47B179CD456EF099A34A56AF169E -5CFBC9C59516407286B2E11184F91EF25925C9274A6EBCA6BF38EEEA96E27616 -5AF1E9F5E84D9888F8EE35119C43CD7F02DA23C130A2D1A753A2D1E25E0F7478 -1ED3F6BFE62714F53DB12D15138189D0DA31E79F18CDE3FC84CD6D6B5EAF9E23 -F90A1703C6C9B435623FD375F926C8D013620432174B8C765299F6F08897EF92 -F129CDBDC3006D3755D3EB5D2953E182015BED56819D5A7A1773CE22214CC7D6 -0ACECC81DB66E1C6AE9AB70B77F6DABCC09111F559DF0911A87726B44AB063FC -1CD60C964334A97E2A6604CDA700C112450389FADEC5DCFC12980381CF6BD92D -772BC45964247E3E39D087B52FB67077AA8197EDDA4F613DD43D1A3EB7D6F686 -8528F7024C7A22B61A33E43502CD37E91605E0EF16D28A9A2806518B839433F8 -1802738E0B1BF0C7E95C4C1500887FB099834FE6DF4CD9A9D7547341A6D8CF21 -F49B9F8E7A9D602644B31396A7270C989F1A5BA9E3E225BE1F592D02D8AECA8D -79C304CB010A2645158654387C77AB0083D08A3C0A41B29453908AC57C181431 -101C6EF00A8A55B6CB8513DC8ADC5E2D6FDF41990E6B3DADBB607CF37411345E -42D0DC8AE568B2DAC69CF347B18C175C0E91CD34ECBBBF3DB1B5E6CBC17AC9F2 -8F77337D91885D14FDA32EE7A7367A3A382E8A894A9AD550DE350398FFF2BEFB -C05BB7A915B8DC4AA5AAFECCBF716F518CC608E1E76588CC77359CA228596279 -F95055FB260502B1377E1AD575D3C1FA65DC158057E071A56D2BA3BD77998B43 -938DC18257C526FF2F9625CCD7DF0AA3D50730B35720E75777DEA2175017A503 -A49509775646DC8D8926A75D64548B9E9C01AC33502A7BE04BA31441D5F39CCA -F889AA4D6B0CBDB9023F05B39DD7CCCA53608173E9DC5D45E772A3F7B4F7C4E8 -C3F7E7DE51770B2C887F14C473EB4F1A2FA420F64F4DBA1A6B651625F2AEAEA7 -8A030BC2B65BC4237AEE381DCD24B6E9940F39EF1D4BF81DA1A25140BBA7E1ED -FA371277B13A016B264B14833BCBD14E6B3F71FA822CD0E1B174B569ABDB6C6D -CAFF1A208C8E409623A051033AC99A06FE1FDA685CAEFEAB404804A701A702DE -79EFA5F9DBE3587A2B8434BAFF152B9F18C574FDA77AB286FBE21AE741813B4A -CEA10B071946CD4EC410BEDE7C68CD0B5142C2A99C836861A5B6A07FFE60E7E4 -1201B9966CABE2B10E71888FB8FC43FDCCB882DC2792994AE178B6129F23FC45 -32BFF56904E68A53B85FB8DC55D917C7DDA412625BB28CCD6A74273F5204CC07 -962DF7D462C57DF81738A8AE709F63BAE35532607CDDBA7CAC46F6789CE52010 -D84412E3CA30A0B8DDDE45A1E9956B4A7A8199D3177B5CF715A120FBA413CFDD -ECB451EDF3DE65A8FC8069D4D1F65890EA6D6969D8663C5909ABAC85D4941312 -CCDE68C63BAE2DC990B6D119FB0A8ECBD5A11C503A668FD66168BD051E55CCF8 -D0022F58FCD3B6020A70838B97BA5A54436F41D26F4FB60EFA36F9E632BA44A8 -A21F57BD665EEAF35BA65A4F2090F3D831E14B9164183C0565DE2352C00C1649 -0796E84BDB6B679DA065AAFFFBFA67CA8AE9D024A3700959262EB552C67FC216 -E61CEE4ADF9BADF3A38B4A618BFEF4CE0F96C5C382641C99B706A9BE793B24F8 -78CD09F4CCF19795F93B8B35AF5598470124204927C7EE6D3A87E05F40626F07 -B9521BFD489B136B01F406BCAC98D60130A298C5C455B0B2CF05465D268C55AE -26CAB1A2D4D740EF3D90914D334910DB05B5BB62B6863A4CFAE3834014D94C38 -F8E20C677C6A8B6BFA4B1EAC29EC87CE9E3E08C458219FB6B719089AB6982F75 -ACF33109F84FC1C7F0F542FB61F78587B7010265B411CCF63F00EE397C6C9D39 -2E33E50B1182385C79773956ACCB5970A8758638FE8069401540EA209B2D5AFB -3B20D9B33A51EECF3D65F0DA2C2063BA2A2AE9164761FFB5D1D36F2E21F29F31 -D2852443F8C6316545C9D413F64466CD7CB3D0DC23B5C282FF5E2F91B63B7486 -83800E8CF3D07434DF16557AD530DDFEACF3CEDE34C7C4ABA3278E815297C7E1 -DBCBA8FA4291D43F1D1AF0E35B0E09A2AC97F10A93AB9F2510BB690E3C635D2C -986179ACA326D19BB958BC60382A9E8C765A978A148CF02403C2C9866D78F05C -3DCD029540EDDFE623C9F016734B8BC19BDFB039BFF4FFF409DFF33F62508298 -B152FE332127EEF6B236AD5C1EF9B145849788311477ACC365D9E5848626DB26 -773F93F0C44AEA8B014A5A7125D09E28761A8720DA53966B251BE1C1534599F9 -B246763A28D4F9E3C52C33670EE390FCCD476419FA1C4429B31C055EB8072D74 -0C1FF3311293F931EA7F73A35E870F6D81D0FEA3CC445C841BED7089A64EA42D -947359421B7EBDB671E2E30306912EB99A754AE5BEC90783DBB14BB0FB3FBF95 -25BF143F7C9D9D6DE690C88CFF219075D9F9698D23A5C428F7418DE625217393 -0B79113E1D56E74ECE402015E0AA9FC320E447AE0345FF429359C48D617CC9B4 -6FBF2F72C9DBC94794BD9584E23F757C49425E7665A1A97CCB278AF1016E4969 -C813A40590E738E70C5B732537F477E9B80B3860B6FFD35A631DA0B6BC84E4A3 -8C1576C9EE90FE2E5FFF30F1ADB9581C6296D442FE1D3B3526780C5F70F73E07 -0233A3C769F74334BA6560ED81163307DC4AE74060B736C49BD83A837CCD7EF7 -44EC891EA5828026982D9E56834A3663150A462939E6557A5AA30C47C4EAB037 -589BC1710A9F042AC39006A5170B0DB0A952257D231498633D99B3D405C2A4CA -D064E43E50ADABA18A80301460C2F17965C5EA3DA09A7C96274AA1915FA9E98F -059358763626AC7EDFAE84B026CC16BF40296FA76396148C57F5C0E219B759A9 -33A46A922233E0AD0FC248DFEAD35B8B6EA330B97BFB4A6AA6DC27DF5082AFC1 -C17A6DED72F61D0C7F4DE52A3AB13734E55A875946F6D36703BDF1B917A758B1 -C1B4D00A52E890C43A7B8C0BF725F82FD416DC8EF9BB6E0487D7682F79DAAC6A -C9595E33481A87C6CFED013243C5BF92AAF6D700006F608E30CF70FE9E9E0835 -255F9ADC616A0218C7D4892B9188C61C801889291E17344448ED2D8C56095302 -E71CBCA27D70DC38B8BDEBCD7109D47FC1B6E6399F07AC085BE592FF9B5E4960 -02FDEF5F965785540CF412743E0C71126A68272CB23128133090E757249854BB -3F271F2DD8D7FA66985F9C380C104FC3A1A69A0CC03E2AE81E1EB3C7A2C3C297 -BF91DD1A6E2B0D3798C3535717F8046E92EACDBBA1ABA7D68D08AD31AE673BD7 -D10BCAF3324CC5A668199904ED903BC88746F2995ED2F5B1B49C73C34607C632 -37FA574A1F09D9C42789077425B8153E8F7F36589B1EB8917C87FC29A5E97E14 -3FAB4DA5EC20C38DE0CD0863683B58DA5C412A72C1BB8280A9236A1600BAC9E4 -BB930318B55E3006E5371157B1E2567C9AC8FD1FE196AB8AA86EC2A27B5207F9 -81AF2F85115BBF22287BD8A041DCEB89B3F5DAE811F1740D010C345F53FCC8C7 -BA7C7D685ADB01AFDB0D30CE7CB0E3BA122B9C8FA4F2CF4C5BB5793439E57137 -9D2E63B6132100B459F31D822AA742DBA61B8CDACE93DA530A66C034125344F2 -DCAE69E08FE774A5E09B29466898ED616EAE3458478888DEAEE12B6C1E2B1228 -A8A7C9AD6658D0BDA20DDFB0B4D831AC61CD216A60DE294C7408F7E34487487B -B462888649DA65F548C6EDE671FF2967FE50331006EB5E3636EA8998384CFFFE -0CE6AE5DF4E49ACC5574C73223CA5904DABBF73437D55E2353AF9F7B17E33771 -775F67FF5C53C5D45C40E60252F70ACBDDC054CB3867AF0BA7B01EFACB67933A -404D56C53520278826DC106956E120A34A7E2B9AFF2B46C2AB3E64FB38776E2C -456B5901398E5BEFC7CEFC35AA61E497CCEADE62360A0EE94D0273636A6CA4F8 -F144CBA6697FE4707361E09ABBA371A5FB8D8FDD319ABEAB87A5C3AF9889AA70 -B53E3C5A9565AC1A2F275EA303D579A0221004365CE864634BBBDBF5036CBE63 -3B5358E8DDDF56C65BB54A9FDBA710A10F9E6C505A2D8D11A6A17551616EEAD5 -679126F3C7D52B17EDF2AFE286454580A34F1BD963699F1AB742DF7CD9EE4D34 -17DD8BA2497BEE1933B02EBED1161165924F04915D1A9D227B719AD876995D88 -7C67DF53C14C7FABDC5B4D773CCF361BC58413765E7DD21A439E86B74795203E -24ED7491AE6C9FD9CF3310D3FD1E91FD3F714013722CA2B13DA3EAFC49A2506B -58B3B2984A1933CADDFDD10C628BEA54C798AA4E0A84FB4639494814FA18D79C -147BE5E688F182B901F9730DA6C8CF362F915F69CC74ED4B436E5DE3924D7DB1 -6B4728BC39E8F9E0841865BFB0AEDCD7404D48ADE9EAE74F6C1E9FADE513539D -9056DF8B2F6168A86405EA4635C19E128DB67D6F7323BC14A983FF1CE808B4C1 -F9226F3C6521310DED43A16EA768C8395E6584E90C5F24857BD989C1C6C2C248 -06D4BCD3C2E271C7AF22210EC2A3EB1A73509082819760E2AE9950D761828F9C -0D1DE7B23A9DE64AC61F48D45956B5894815F0DE950FF02FD0A4E0355900C665 -D1FE0B411D4E34B093E17AA8087B606AFE7B2E909AED96B799922953C8416148 -7C3CF96E27365C3A4CCCD78849CD9D9D498D7747EB8AE8137B16178BB67B7B36 -E41780DE90DC23072DB8916BC8C778B79215212719A88744DFF9AF40980996AF -379552BC08C8FFDF6605FEBF9B3CFB6D3D27D07C49554DE4844981DBF08A43A5 -DDBC572CAAF60EF7F8C4137C38B057E1AD5D953FA64E6844EF770A9B19B7E643 -F376273E028EDAA0729CD722C57F05023957F93B281F91510ACBD72F476572F8 -B66681AFF60DE653F4C8BFFB5A9076447AA5676C08828D7C6AB803AE9063423E -3FC8F0E7DF5F8238EE36A7B8DBFBB88DFDD587D5C9133B69C6E4B86D4FE42886 -F0BAA809350CC835274614E4DCFAB77A8AA83916E5B65351273A69E6F9B5DB39 -205E3A62C2C4F483B3D8BB2C4C7C72E2ECB6E024A275DBD82F5A1A9ACEDEFF4B -9C5175BDE3DC023253026E5E321A0F5867654B8F11076CBD6D49F2A7A1F45420 -9CDD551806DF00372B4D0426EF46BEA85816AB39246F38427431D513FEF9E143 -64F3A06ED9F59F1F0C250C9C6D45FD2B6C69375E9E0B89A4478A5EC458E132FC -433E8A93D3497DAE9E1AA0AA7CA895B8AF67913CF0D13310DB883D388AE9A35F -F5780A0AB6D55CD9B976014689C185E9455AB5B9697DBA8B9132C517133CEA4F -CE40FC2BD4D9DE31A6A5F60E00C781F6763DC03DE8D159CA70048B8CF6D1EBB2 -2BA6966CF523579CF5FE324AC1C7C12A50A8EE71A55B3A6078AC0EE02E877A02 -18F886CAF9FB51F29D01E3F4AB961E5515454D05490F4C57AFFC4E63C0D1FFE6 -C4BCEF8F67066A4284ADB88E569F0E7D36269A6A0DA678CAA5C1B1A4BDD3800D -FA3E3624A3698300BE00884235A996F611644E19AF114AF29E045FF2E4BE248B -7BE9FB19B64B2DED77D5CFF8D85A332A33EF073BC94E30BD78AACE2B40C9E04E -1E88D9EF0F0116E27E9432D461B64FD5F4055EB420963FDA20CB8D746B6AFD30 -4C70C4DD1AE440D04C6DE4F876BA09591D1A7F7F5755DB5DBDF1AF0FBB9744A7 -051885F2F13400F77297D66BED2FB53CCE01B56A7B0F7A74DF38BBAC0BB556BC -9EF9F4FE429DFA89650BF6453FD1B6F472427FF2F91DFC218BA4690C55CD23FA -C7E2B86EEEA984E0DF8ABE65813C6E9068B878F22467E7D981601238F82A43AE -4F61CD56ED2C3828D7DD53AF88655ED8E00FB33795EB13F5A166626D35A94AFA -3EA4331C79B44C8AD4E85E8A58248B83FF91BFB89C64CAE2AA2EEB95677B075E -3772681DF3F512E315C7266B9B6DD3C38619E8F0813451BF48660E137FC76714 -F799E17380CDE5813B4B6217B0D0A7763A754065E2CE172EE6DA76FF5038C614 -0050F3BC4DD98CFD8C0BF526ACA742F4B79B53708DD52EBE58B00CBAB52BE921 -C131A671AD85BBCDE61B97CB147D9786EB2C01DB4425E827C3297F9886BA6354 -C526D89B6B4629CF7DBC38AEF5D3EB58E92A7BBC14F796778BB3ACFC654E3CD6 -9B0C5EB8B24C3279D46CCC0A3EEBAC870EFECBAB222233E62E76022E9C80C109 -70517E245561033028135DE10E1BD8FA0BB9E5FC89AA5197CEE50A98EB778B63 -BF0E7A97BF243FC8D6952C78192F19753BE77B576486D491344D4DC5172F9655 -EC6D86C591840E8B90AB507C63A7942A88C5301C8E7C9AA2EB41BFDEBBF19DB8 -A905B90FEBB86086E2E01600FB897AA3EB954761045B00DF247C796EBD4E8E18 -41894D9F62E4C8551944FEF97BED212B29FF795A02979ABF453C0E83C00AA39B -E95AFEFCEE23B58571795F0358912C7396AD8E05373E5DAC0F76AF1B7A5406CD -2D82ED5E0F014AD1512DC75D71DCD22443E7A071E27A52329A04A18E12E4191C -57DED26A8573ED0BBCF6417D993269E56241E45E05A61CE72C63252D908DBBB7 -ADCABD21921CD36B6C2B1C4A5D8E6ED8F29B8F6AC9B8097F477AD77CE01C51BA -00BE8E44D5B3D3389E4ED09A7327763E7F50426CECA5424D243AA8BC7E7B5529 -9D14434148B294C2441DD0A926B678211EFC6A48EFE84130BD4D15BBD2CF1388 -B5EF11940CEF3CDD4AEE073AC131947B960D716973E63BB928977EEAD41B80E9 -BF08B06F0F107B4DE2828FECF7370578FC116F03ED602FFCE688FA6D25E274D5 -519B1EF07165FDB10CB32D3748C33CFB601C98D17F274887B554A596FA9B3C3E -63A7C426779220BF013EFA2B30448FD9B20790F87A069E0704A1EB4188A4298D -6A7ECAABF7F0454E3E7EB98650C2BB14D2B08F2265B439FB20C74BD93007DA70 -EC6C445351BD0607997666DA0A56A186859237F9BCCE4F4E594BC8A81E6E22EE -5A58C7B349DDCF0F753B3DEF9484B841DD1428881B625A4E28CE54CF896711C9 -4D380F508081C26CC9090E09C9C6BA12FAECD7074E2549779CB6FB88EB1368A6 -F709F6A2CECFFC5CCF48CA2985BFB1CE3E0FA2CF5C3B0F612869171F3649ABE0 -20837D908FF436B01AB54EE132A8F0D0ABB4C1015FE6ED45575B1573AA3F9D64 -66B521470DCD5C73ADBDA46E86D6EC5667D2AEEB5F7938F42018E1541822E475 -B11180512375AE63EC7BB000883043513928140A23CBB26658A6B0521F8B8DBE -2007353A924E762BD8DD3AD901D81DBADAA3DF3C2ED5AA2163167AEBD049390A -F4459FAD558F3FBB3B805EB1EF332FB14F0C677FF9CFF7831F203383DE4CE7BB -8CBA629180AFF36228D3997BFC97E051F2390791B6F5AC0B5AF929107EF3CEF3 -00894DE1693653C33B012583EC5FAED006BF9410510A709594D34E558DF5290C -4A36633EA935D67A351630E6F75FCCFEC361A8298DD7C9DA2326C8EF247481EF -20B8C91013AD02613FB321DC00C7B9EF87ED8AF212D769C0EC1D8F116950A60F -3FB2273E4EB993A8CFD3787C86AAF54CE86DD44A9A652307B7EF8BDFF73942DF -F52AE037D5D9FAD5E2D673F4346921B642EADD945164F8B8116C24D7A5EF8845 -0D1199AA2D6C6346075E1FEA51B351F6688DB0F9D3DA6489C34C9E1493038281 -D5929568721CF3A309C21FACDB7B4AC9BE329935446212E060629507D78CE8C4 -C5BA819D284C6AEEFD81CFF819A14C445BA6DFC9549CAAD4CF56FFB4FFD46716 -C60DA7F437EC08CEA0FD4711D745892ECC7AC2FD5422CB464D42977F991BC3DF -52E26CCF63B0A0D73AF537712F551DF4C8A9EB5837C6CD11119603EE13228E6E -3326A8A9484B9FBEF42D121304FD19581085459FE250BB3CFF7B689EE65EFAF9 -9CB50E6DF0DE0F2785EDA4C7B9E7AA036CAD799C8451C72C8387EE5BB933851F -ABE54FD373AAA654DF7B5646427BB0165303DA86B8A778F4FAB052928B6ED9F6 -083D9DFFC0FBADB4BA284BF9E3D0F45337EE4E52138044E8D2D9B09D1B3BF028 -C9EAFE1E2D352CF101B1CB1546A455C3264E951519FEE78C35BACB2A4103D5F4 -78A555C6E7B706E40B55115364E3690C7A7632B74CAC15C54D97662DAB2E7549 -777A7D0F70F1D20C5DB19E77FF69AEEE8DDCC120783D327817D3BA0E2BB98D02 -123CFF3299A4475153DD03AC6ECCD53B7395EF1BBD235E4E635BD925B46E5E9E -DD4E3818F1092525B84F504450523420B40140F7AB6FBC8441779B724B371939 -CBBC534E8AD2EAD3561DFAE319F1455D8F4D6F9A20A73A79FCAA449F067A1AAC -90D25E25BE199A9AB789D2B130605CB19CD2F3D97130B38B6B493DF57325B885 -467EAF56A17FB05542CD9567B0E04E291EE8E9E19ED3EAEC6FB270FA3F477B65 -4B60FD0A5A0ECE6D822290233D2FD6D0ED1BBBD82E5F0222A18417773597F999 -D3619B41BDEDC612072E87FBEF1ACECF313C297F4D6B27837C60FD840353C902 -31CE101BFB0B80450E991D466C0D33093450F373EF24A82EDCED7B9D0BD658FB -8C7422C078FFE08CACA51E7C14795759B2F8A100D042FA3BDA944E6412659973 -4037B9A540A20DABC38FB0F6A346E50E04D530115AC770669BF34FD88238EF5F -A80C403CDA940AE1CA5213E8A06E387EEF3C7D4941D634C3B3BBEB133BABEFD4 -28D3FDB15075E1A6626F90303D4E3DD558B910308D9CF699AD02DB06629C894E -B09D7EDDB076FBC42ECBC07B8C248F653BA031FBAE56D61762B48ECC3DE15CF8 -7FD07380AA03FA30DB29CED313D5EC2F8C21F74A337E76C097AF48463869D0A7 -20F46A5FE98359236E7DEBF231916B70AFC44E201F13215D4C0A017EA43ACA63 -F86A6458D0AA360E451DC4E3F864F33ACC0D5187DA632DCBEACF296C6C85A42B -A31E58EFD9F8B19893B59525B1DAEC780A71CA6FD27CA22C23733382E6D46689 -9AB673C87D7C6302C34FABC19B4BD25CAF910BA2A2957DC98917CA2BFB27636C -80F2A056CFDC2CB868CDA68F342AAC19538BA177B228B3736D6050298F868F8A -E9F0 -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l047033t.pfa b/client/nfsexport/lib/fonts/l047033t.pfa deleted file mode 100755 index 11e8dcd3..00000000 --- a/client/nfsexport/lib/fonts/l047033t.pfa +++ /dev/null @@ -1,1353 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiMono-Oblique 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Mono Oblique) readonly def -/FamilyName (Luxi Mono) readonly def -/Weight (Regular) readonly def -/ItalicAngle -11.3 def -/isFixedPitch true def -/UnderlinePosition -36 def -/UnderlineThickness 72 def -end readonly def -/FontName /LuxiMono-Oblique def -/PaintType 0 def -/WMode 0 def -/FontBBox {-15 -211 758 993} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078985 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83D51B996CA62E18F5E16 -E975A60A300FD933D7A757982DDDB53E6F052956F0A57B2EEAD78CF7E7056859 -D267B6E270C1FF751B2B0803C0B282576AA3575CC0743877BC5F871D3E0260CA -F07EA74B7C3BD6E1C9B3441A87CBE0C24C39D5CED05780E7A051605C83647B3B -4E86D8C9CDCBC1029AA84E30E1903B322805D506160BED37770D3317D2FE2469 -3B12CC7ACC1E3BF68E1F4F3AA7AACEAAB78CC0288FC854175DEF8280BA4981A7 -E88AEA83A0960C26504940E1104086BA90E50BD53FF14FD9EB047A0FBE45457B -B4327143B7AA30A23A05D29D397FE113A6AEF33F0AED8CAE911EA27A56560D87 -1317E25F10F1FE017D115ABB4800E8CE8926A3146BAEB4E48DDFC4834F93F488 -42CF2A19F662EA9A223B7F12DE1F71E9197DB954D2E57806F6CC5741E5AD0EEF -0A47F7D6CBF12D269A2ACCFE3976CA6829DC8BCE2165E18952C86A417777B867 -93F78E7A83BCB3FFE7891DAC14FD7FF0D327E664BF01093046303A3D43CF4E2D -1D22D2CC2900FA2D274C9A5E857C780DFBB1E935E529EA1903FB85C982282A15 -A36BA8725067022561F47DFDAE8B913B525718B98BEC9AA28A50EB40A96D1A92 -EC82A03A1D24CBCF043F743547B8DF642E7B872793C2D61ABAD6B655233F09E0 -509B371B60CA55FCACF6FDAC2D1FF5710D1E9613F5837963BEA103D99E02F9D7 -B75C9D78DF42286BDF35A50997D6BBCBF08309D0247C1E9410FD6F1A5BCFE056 -02A6C4C5C6E54F32B1AA03A7B377D0F8C5378DE4A6BD519FD954BE94EECC40B1 -1B2B14FAEE89675C2D6DD97623A9EBAC87A08DBF8A71417904116B989D30D794 -A9ACFF1EB9FD4EB6627F541FC552E3602EAAC4798761225FA682C5646A21FCDC -FE9934A59F90722F6A4D1A4BA63C4D44412F38CF175A8FEFDF9130DA4FA2F614 -E6842BF6F2D1DB5D8CEA85ACDA992C3ED51F60422EE7BD353AC911432419B925 -629BA2CF0CE7D2B93AE1783756F78FC322FB4BD50986AA0AB7B789DAAEE7416B -8023B87A09EFF918BDC4147B761217310B1467D92B15E49C3E15AF62D47AACD4 -AD77F5AE7EEFF90937C6FB7A0C27AB7EBDF1D97E1512925D772B114BB44747C2 -9170057AE71C3A36D11E1B8AD9C1CCB207915DC181A0FC47E0F66B1018EB091B -54602D0D0F74463EEE996ADAD5F99148CCFB27D402A59BC27D610BC0177BC0E8 -CB287101F44CC082E657BDAD45DE4C4E231522E56FE328FCE34D38B020D3E34A -99A9CC2BFE1DEF5E1129CA82364C6D62A346F94599B9ADCB5459507A92F19D72 -9D461A4DEB9AB96E86C21085F9587191E01BF047B383C1DA20F1F56866D370D8 -F3DCCA23F36C776866BCEC11F8451FD632233B2973A1A4A64B94558A92A287F5 -074A8C0148F2AE882FA202212C575F5B32C44C767CE47A8101B25530F8BE1C8F -B45642B3C7C2EF7FEBA3A38EE6BA20636A525A7A4305D8CA22BDFE84D0F95F11 -AE5AEEE2D2F22391F7CB647E1131C0853DDDE1C65EF3C618B286794875DD6690 -7ADFA1F1812F1F078C851C24E2B2C31D593589E9F27228CA21AF66F4E649B6D2 -3F67B91206DBE74E704276634E6032C91B71CEFADC7BFE832A8955F139F56981 -3422C47B3E8809B23C259975D466440820DD4E9E5F20A24787504667FAD72202 -83FE9B391A7CF5F297CDEE3DA8E9B9620F1DB2D387351409D38A9C120367E388 -4D9724EE90C5BA737B847A5E330A23ED12DB609837BA866780582E486C89CDEA -39D101941B7608A5633B6EF6FA9848C2F8FD8DC9AD48201C98A7E72C38861822 -8DE5C6800E152D2CD869137DCDE16DCACE6019FFD26751A5689967512AC8BE34 -882245228E4774EDFF6C8E4A805F854AC5CE495EB91F84876A1FBCCB65F5E896 -BF07B3AE7B4B6F388D6EE0072BD9DBCA176D225D0F45E55F492457FFD2CB27C6 -DDBA44578E2AB640190F11C953C3C80CFF99D2FB39BDEF423AA9AA4DB4D4010F -BAC17523B4B386B4E81B98F0AAA487A38641A966C829607521C7CCDFD1ACC6E4 -088F0295842C8F86DB2D05311EF38924840BC8FA3E02D9B554475C09786CC4E9 -F4B942030E1765F1CCCA561FDCECD1579DFE1F6B4A30D35576599941A2CAD8A7 -783135720E6AC6454BD4F1A7C1A1CCC9AB629445A4423AFA2B99296B2A478735 -62DEEDBD02BE125A4F7FAAA55410683B4950F60131BC8969A7E52BB8E11F986B -5193BF75D36BACD8D2B732FFB29A5A7E76E6BD785EB1F605D035B653276EE252 -344EE302BFD7DCEF9C1DFA24532D6E0AF7F221ACBFF7EF479F8031B8C836ABAC -FE89FEBF57CCF8089F9387AF1E919B815FDB85C69DACC562FCCF6BF843E088DD -E64FAD2F51D22189D6D2402FB12C9CF390791BF3F628C04978EF15CC9C2EA909 -B55DB3141788765F610587CF76FD63C73FA8FFE8F7697529D85F42E9FC0DABE9 -4DEFBDE3BC659FB168A8C4BF06A57A8661EC248E1579101F4B7CF022E7186675 -EBF6E5F8C3DA362612D97EE664BD10A0A81DFCA85F2C3250BA95B0903B45FC2E -34AA1C9900C092C3C1EE4A514EFDDE0F7BBB3FAE4A7019B547126FD62FE6ADB2 -17B9F504BED3487D1CA9DC6B5DD9DE01C2CCAEC45A0E115C251B0E9275FD216A -9A7445B40BEEA1E99997E81D10C6331797DD98C94288A64DD4DEAFB68E64806D -4B758A177694A38BB736D5C799F8B64FAEE01E8DBCA99597F0DC4DADCFACCDA1 -FC3010B68BA528E49BFC3A72AEC35B084DA9BEEF372C53AFF900824CE31269AF -9FE252457BF229DA29CAAFC67A6B91E2B59922379302D243B2BAA44A6D24DE8E -9D7470F7987C54DC3407221E1E90FA763B03536C9FE5DF99064B716412EBB665 -762686EB4249D83C7D80B27817DDBB152DB064796102467E4A604EF3328EABB5 -3366D50B9E2330CCFF98A8B98DD6E2C39AD991C8921DAFC4CDFF75DDE5E2F2E2 -DC1D8091B7E4B03A9772298DE764FE81410506B7FD8102EC4186D6AF7219DBBD -E11BC975E26F8057F5EFFC1FBA8E80C4653E80F24347D8D5697505B9D3FBF980 -847430935126B257A8E0B1326AE1C06A5EFC97F01C45471C7A528C550D2FBA8D -9CF4235FBFD4340B9CFFFF0802EF934183F93E0CC81CB125ACD01FD01B669595 -00A7B8675E1E61515594C1612ABC6C08B93732760B843FC93880E9A1700FB89B -5DDD227A3BB43D2C30A953182EC1717EEB6AB016EFF3FF18108BAAFC62AFE6C4 -819B12052B09742A16F9C86FE887BCE63B23A422FCB2531235CE49CD4E7D3B85 -EF05671D86BBD1494CFA9F2E8A9AE5C0BF831B6E537EC57F69626AC89B685D39 -AB226C5339D90F0CD595169E3D3F70DE1B05CCD3A7B54AADB9C0D0BBF1E35D47 -F55ACA00064767FA1A02318CC3F90635CEE5944C984148BF437352CBC2122F42 -26675385DD0131BC7F41CF4BB9D914D29972DCF531A1074055477B3AC44FF0F1 -D895759AF4B365FE9112BC4958191171EBF1EEEC3DFFBCF23DF9679CA9350A6D -66E54A3EACEF4390B7CD1A9C88C53490119121DA5DB6E77D9E065E9EC2B0DD1D -2A276275A9CCF63D4462A2DAC9B3F62F20BF5C8B3FFAEFBA2971A0DA0F78DC73 -FA301543A932076CC943C65D5147E2A018209F0D2C18926355994F3F17AC6310 -909B998AFA45EB9B9E5225630821DD05D6035F9677F839A7970499234D93C0F5 -5167BD2FCD1A8D3FC1850E21978C3E09188688E383677E091DCE521F65A8ED62 -1020255B64B2889C787963D0466EC3BBB6BD2A02907B6D8355A3149EB88E5EFB -D95B59470D51616B93B5DC90C84564AF3126689E63DC98D432B6FAE3CAF328CF -04373D09BFA77F54368D24D546C7B7FCCC1F66B7949AE19136EBA43BB5B0FE54 -E0E7EC4DE599DEDF4B2A437985235F08142555F62282CE0D0187987F7663812F -DF9458012EC5EE9624024DD39C3C6F3862E12ACD7D7D993F7A36A0E08E777C04 -DC55DBB78C02639ADB7D7156624E00CCDE7B3637C8DCFA60BD96E03786E27237 -180F51C3613F2C1B5C38F173A5E6CFE20F074C3BCE04556B6A6F2677C83DB5D1 -0F3DA48AA22E8B10D61132A58534C477D8A6146F60F1201801046500D37541B8 -F0576F790E918F92ED070B31DE94AD7F46EAF05F3677BB5041F1899BE14950F9 -7CBCA06BF444839A18126D23D57D567E65F9D4394F4846D88F6D3EA9D76BF4CE -9D168701DEC9254F2F0676F27917D25EBF495AD97144886A468F8CFE1475C3BB -DA73DF9EE532AC7EE2D706824B81467A9A2EE84C5D6205C4E1916C8250C778E9 -830718DDB534E6BA14F4A1D723CAF5A43F7668D6235580CEF1D296A9828F7397 -1D97D57748460EBA113342449E28B8EF96B9D0B8AD79CFF9FCCB979C86F14149 -4970698ED1FB72870122807321E0E2C3B1FD9B6B88FC3144A594646335BEB914 -B8882474AF2A0315BB55C1924EA4BD6E305B7B92E2BA498F5EDF6E0C13AA9A10 -218899781EA3EB98E9C9C52361BB9338766F055198970A06812DAB8EFE4893B9 -AFFEB1D540EB70D18CF3C8D2CACAB15A0D158E21958F020427F936E15F969467 -D2D998C50541009AAB95BB2844A0F1FE9E3394BB64A6B1E5AB8F98E9311A0CA4 -38CE611ED06E80C9DFA8B380A89AF7D18D1692DA62D816FA3E20DD647958F52B -9C7219C4AE3A6CB987E1C0442D1F92BE6121DFD75A4E7F68A4D3E6F2BFBF000F -509F8CFFFCABED431E5CF48B6BEAD630ED02D893D8F3A16E97E91C802B23153D -A2E93A3A9BD228AA835C9394085111344805E53B23459251A1FF26802D7A736C -9ED13E9B53D9BEC50A3D35624431F2E27E05FF01E56BC64801D06434C7179E81 -9390FDD19E322010950F09F9A36878E41D9D3C2E4FE37C2AFDFAE9519FE4939D -DAAD914E331196BC856E68BDDCCAEAD7551B0C9808E10A92D02275AF1A5590B0 -CB71F116BFC878EEB358E741F35F8C69BC659B844E2946E1FF649001A6A2B1F9 -F973DE46F57A27A567EECCE8A1EEE48760C663F9D9E5665F2038767CACCA4A9C -C9D0C11D846A5C649B52FEC6B42EA6717434807A999FB70784E620E9E4F05638 -7CCA3D6BD952B69AB9845FCF2E197455DB59A118B8C43C26E5693170463E1DAE -A8CAF498A7036EFC436AACDF9221A35AC4175917FAB053818A318F7CE4C218DF -EBE15A7E773CD4E988643B09D6F5482B9929D12A1C3A8B6611F14FD47C21BFAE -674C10B6B5FA34108CE615812F9D0E95E34F84BF024D6EC5AAABF6011684A03D -E83B69273A74D75073A380781D38C7D2A317086D80BB9BC3F99EDCBF8C3E4077 -39FCB1D7F88391FD4445DD94E2F193839B3A5C2CE65329FBAF0CE58CC24D01D3 -539D2C0F94F65DA1E5BBBBA772997227B2A702EFF5EFEC87195F6905E9A9ADBC -B8FF45681D61D02D28B119241FF8C8B377195451FD30AE615EC2913FD53B8DF8 -5E2E4A63663FD231758FCB97DFC18F1B522A9C1AD976C4FDF257E1D529E1D325 -34E6C1A6D8339B6A61577A17947148481A62C5E41238FA86968A3ED0DED467B3 -4AB877EFC912839525FF9A52C0E86FC7A9D7499FC0A75C604299099106256F5E -EC8168FB9343C144A726004BE642D55027DF9B18B80F9EC609A91C8E8E1E4AED -FBBED28CE193CD71F0F24CB64F08F936B7B0932CB6466E1BA4D8EA73E66A146F -12CB155775FDBAE83E6AFDC46E9A0680387B6663919884E88BD13FC117963368 -0C637980CCE4B7F393A7A7D4BAFFBAF563CE3358CB959BADF631B42E21E164AF -81AC41C462EB987D4A90EEEFEC128D1545C27A8A34FD0781F85C1FB588B2B12B -3DD933BD3C85BC4DB4D6EF64D7A1E71A68E56894E93775823EF35513DA281866 -9AECEE4647B99680344398D121C290923103E463B7CBF17514F32D1201FA86C6 -75C00997EDC3C17DF62E0A4EDC539167A79AB515B0712CD5702B3C8ED1662A5D -AA8994BFBB26CE64A54A1AF3B2373E8215CE0F64A6BA038654E1A098DE4E67EC -EF8244DCAF470EB351B684722E9FF7EFA6FCD589A1DF28B713A585F013DCD268 -4808FA1693FED0A859BEDEFF143673340F75A50F4904E3FA2351D874ED7DD95F -149C82171CF7992CE2C64C64CDF1E9E0C9CCEF0DBFA5CEB4B20B4466E1079B0E -8BE6CABDB2C771776DB783EC1E4AA66FBD34EA8CD04D253B005D206916B19EAB -2F89BDEA64268DBA665FAA0D68D2371EE1327D0C0CF18FEF2CA99B93A322FDDE -68D8F289A92C39C2B6B722DC1DF742BA4B1BE35259F0CC9DF36FFDD4E037B512 -364BF1D2D450843A1E9651A7431424BF1425AA1C2CC5C8E0DDBC959966BC3099 -D792ABB111B5AF5D48027A853AA22167A6704708AE7AC5E94B0F233512A7140E -125D86625BB6DDD4B919AA9F322F34A570B772307596216631906BB5B8D856F1 -665D2168ED20C9C7B5D9B4B49584B4687ADD1D4F888229E6A2DA6D7CECC34442 -3D48FF83F6AA41BBEC5A5627FC8A3F6D9A4AB9130C6FD0DDA44B48434200E0A4 -B939668D041BDBB88B5EDF1916598B4E6A28B893C4C1817C14D1E2335533F236 -B7B62C425C7155B85EDE07CFAC64B907C115859965A617D383440944DB680D80 -B959CD223F917446FF9354D6C833AF334E8E1C8EAABDEE4FBC864B5D4AF6D0D0 -3B26D04BF93BF3DED0DC029E69DA8D7D0404DFF15E050B233180930BD8B87813 -1661177C7E5B5348BF0EC3B12682EB539168A4304F754F244C8F2FC92D24AF2A -27B4CC7B9FC94447E28DE63B3FE9754FE4C6BB25B2F5DC5869A1A2D088406CFF -893AF7968C6D4DCE14E9133AAC1F03664E1E65A15C440BE2E9D7F48FD6F63A1E -9C06C311A7990D17134F424C41FBA0351FE639313CAA5D5E13FBD636E512A543 -1AA47D50876064744E03B82CFFBA550FE76D4A3DF6481F178F27D5B2557C0690 -D702153C470986414604018F15C89DB61F10BB7CC0ADBEC3F7CB3359F9F85473 -94377EC80668B4947F508CAFD4E7566F388801E5CFF6DD19EAD712D1E2EB9AE2 -F15A76E0F5844A7D7609D654B6E32991568CDB99ABC3078D960C0D1125A75A1B -90B73079E29654C0DBA19565303A9106602DAEBD547C31F82C29DB4A98F6142F -B67DB4D934D42853462A2EAF9CB05D6E0901E8774491BD44219EEB9CF4FE4AF2 -493FA01140E2ED9FCB1372E6484D2ABE6B1EB5A63E272F44F7DB36080342F7BC -A63321982294C76A9E63823C63722EACCA6C6A90010D3343A89E49FA2103ABFC -C60D3DFBBEC711F50B739031C43D984D8D59A2A4BA4937B5A08E55E6319B49C5 -D36B1A39170EEBB4D892228788F90DCD25878A31660AFE06CDBA1E656C60BF5D -0A07A2104EA457D1B3C6E54D068C7094AB8D0B9FBEA7E66C72547B7F63B8093D -1B29DF5F16D4BE002A4C5093AD3567AB0E085C87DD97FA849C1811CA8014B54A -C1B1518E962E8C96D1295955C53DBA39ED5821FB1900F24DFBB7C8F1942298AD -E97C85BE7A0D46873EDDD6D5EE79531DB92F3A8DD319D89E5D59BC4761562709 -EFA2526749A5FA9632CCC71BDF953A4F0A26C5B4F383A7CB429322736F449F43 -570942D8393FA50AF619BBF760016BB43DD12DCF93A150D7CF1B41EBB4AE221E -3C2F91C3D9DA821D2297B0C13A4555E289BE8B900A7B7FCFE2A1AB4405ED44BD -76F459235B3A5CFACA4323E85FAC84BFCE532BA323A92554D9799B20298FB086 -EC7A1CEB5D36BF34E7D6BE96D8FB7CABB562A59ECBBDE044E0CCDC42B77766D0 -54F2B99E0A7454C4FD03E30CCCF3887CA6C048C12F9D1D8E6155D490E78833C7 -EE6085889F8C8DA07E233FDD3BE1164C715B07A160EEE303CAF453079DED6F94 -91311B6CC2C79343448E6C94DE4CB1159E00CCAC3DAB69443B4A52270FAF2DF9 -285B6FF81E7F2413E7A79BEF760C253E9AD40B28D86F4924CC02274A6E37102C -0716859EFA924E50581B092D2EEBD55409A211010729337DD11B376D70B2E816 -39E3F67B0CA5051F2FE1D6D732878A8665B255A5C490F6376021D7C3E614BCF3 -CC3EF1045CDAF7A6DB17E3C496FF792605D5388C93E2316264D9CBBD3FB64258 -F462A7F4EC677BADA2948E272D2EA4F7D45344CFE0764886CFA3FFC4A2177574 -168F3236BA418838B7C0F68B9AF7FE806F1057E97575A79D4815C707C5EEEF46 -3A37A0E5B3DF712246A50C8A1D08940CC73A75FB7E80F73FC044D56001AE3474 -BD7AB6A05DD79585B4084489C2FB228A7BC1E39DF7C01F9FB6A8E8F9D6675C28 -351C433CBBDAB5B7F9EDF1F299B9F3831D60F6F7FC0839F3E33239F1F75E02BE -2F0D9F0842A3DF1586DB930CEECFCACD4CD74AB61EB66B20C3240507EDC9B178 -B0DA13F58AF8CF48526D84D39D7E0EC4E8D2E83CF8510E052D2687C6FD00AA79 -FC426348F421771E9F728AE1DA40FC3A6400E2F00164C7640EE12F8B9D6D485E -C0AB79540F30441E97941E5D9920DA22439730C84E1404E2E3142966D2FAE1C2 -937BD857F6A44B76776FDB46E849DA71032EFE2A5B50349990B90EC233E75ADF -E940E4EFC436D15DAD29C10BA71FF988ABB796B659FC250BA6BD83561D00DD2B -EE1B4187754F0DD7FC325EF420CF64149EB7C010F4A0230F5C00E8EF0287A430 -FD501437E36B3CA17C50A47800E8ECCCAC731F5217DC39CAC15EC1326FE67412 -4C8B6C795C60587B4A9200328FD08CC435723ABD617A9C1EB6D6137F845F1EF8 -12B2E76659E88A00B35C3D7DAF9126E35794B2BFA733206435AAD584A464DA46 -11C6F47250EF166301246CA57B7A4A360A43A577560FA90310B9A41DE8A7A569 -11DB0902F1F8F4580D2C9990E19E6DE153D42AE72F9CD6654A09EC69086100BB -7C7F940DD92A8404A09B6CBA2577AFF4FBD1731392B404F2C73477C5643AFD49 -CDFF85D630DE9014437AFD41DDB2A235B606AD3D19A3F32DDA92502C833B27B9 -FE7EA1B93C4EF69D6C25FEF0919D5270F1FA526EDE7CACFAD9282558BE6669C1 -AD9987C7261825EC00DD51D806B2ACC0F1325743093B6B1BE15CB05582D942EE -7F32F08C3FF5D4BE9BDA66523F19C565035E56A2BC2610CBBD446735F81BB02C -4A1D232F34BD287241B57B5DBCCA8529FCDA70CAB0464A91CD99A0B68A5BA7DD -1643513B5EC3F79264DAB7936CD59A7953F563E5E34EF016CCF46F1C1CCFAFD5 -118CFF688015AA2B3B3F287295665D51C4DCD6E96D18BA3C5E25AE7886DA085A -C1A0FB9471BE802C6D69B23BB1E9AD88FE3258FDE833182295330067910857B0 -A3A72BE8834CB2A1DEDC38CDAE04D2B0CC5492D490173A4757421323238C8438 -A660C7AFFA3C261E5EE4CD655B19B6FDE54760C2FB0955941097301142206565 -D048CFE4A7148DFDFB2012490C551A9309FCFC651892242EA852DA00FD19829D -1838904AE7061E21A7F1566E70469F52BC8B9E02EFF3D944B162D3C563D91E8B -28382FDCEE78EB8A527C9B6FFECB466AD43E0C0DA5C16831467F53EDB0CB8626 -BA92737DA27C98AB10C97A8A76353D3F975EC666FA00DB003015608CA6BAEEED -AB8BAC7D02A6607CED006DC1B4AF02110EBCCB50854DE1633C8085ECF57271E2 -49B479B3BA13B3D491313B266C9085ADDB3EF486237AF30306704B36D99B99D9 -B4DDDA188FD08BFBA1D7691651338BD1F9E3D2325CCB349327D09AD5A9F82548 -0CB6FC48BB965A24E3D2438BC00A80BDBF322E5B81DD7D51599A8EED5E1C0CBD -3D353DF1BFBC3050243CA4CDF48EDB660DAD7CD4326E7D8ECFEDDC3B79A28A58 -89FE0A38791F9778B809664E1DF7B0DD829288C3C7F00CAC6182629E86B1931D -D5145A5DA2FC1EBCF001ABA058AA48027688AE1725719BE01163C03F26FB3C6A -DE78AC5156763D1955A713CA60E9B98A0C8A84D66628217093FEE40C45E1B873 -BE5E5629F437E9C821EF110B3F89692B89F15F7FBF46FA1B31B66F0BB6956A0A -B1233B3D0475B839B2F3A57C1EA98842DB201E2F78D654837C11035F52C165A4 -91206BBDFB2098B435A0BC91622094B9F460956D1152AAEBE80BF2AD888DC412 -F8741BD4B4F5E4577F5F1931C1D9D6D8F16D63376507465B216E42586E28903A -8FC9A8799742081204B5BAE38A59047E0668598102BF487733BE3F830A1F524E -55CA5F45EFF823069DF8D162A2B4BE2542D6AAE3D7506710E46E50F80E4E95B6 -A5CFCD4063974BE71542FE87820C530BDF026DF178AF3F99BAE56F50DEB17645 -ED9FCB0F52A576EAAEDD00E5110E7406C3757DC5120D4E8263ED0F04FC7AEF04 -BF4ED0D0FD4EC2CF08044677B8CD49517FC934AC97789EBA59A68CF5593D45C5 -7257A4408935543255CB46F8BFDF523E1695065265FBF1948B95DEC97C7419E3 -D15BD2640E3965DD0FF38015994858FC8FD1EE7CCD08CA522F88584177240D93 -5E51036BD64402950E6E655BCF7AF79D94D5881A04E439DB1CA3D1CAB39CCA82 -19D1CBE17DBC2DB0AD5596B0BDEE6561229BA42A69763722DE13CF80BFC544D0 -49E9EDA64605BE71FD6BF076573B8F7ECFBCFF911AF62B6C45056C3D62779A55 -5AB3824802C2B317B985A9FFB380EEAE5E816EDE9A381334A323E1A3EA9892FF -6B480084B6FC82E42413CC9DA035A5B587DE706804232F4C269FF4E13D8A03AC -480124BF0C5C5536F9B491A40F9E5B74C154E6A7A05D91E0A01D1B07BD9CA08A -DEB2B51FD97C30D828A530BF26D35EAF941340FE61AF9D30D96E7293676D55B2 -0F20991553AC5910B75E6C8F5728F5060B3B35A223DB1A69C4D2E752335B2C9A -4D380197F9413221E12876EBD61467024A304EDF24E6FFB17622DAACB5AD710A -439CD1626F3A6836EB48315B2011491FF4F2FD7D9046315C8998FE7C758D3568 -D6BA5C6E158ED2FCDAA81B56B603DBBD917D82C124A61F629F9F69F834D08B59 -B53F10029802F0426C83E923D658D7F8D04D96AF9912389EB467F7271278601B -DCF84562F771B4BAE0A5A367015F91512A72171E37CAEA1B9930C0EE51275FE5 -0F49B05CAC5E9EFCDCD57CAA3EB5D101CEED7545F2BA17BC45648D22119B23B1 -0F9B7DC950350929A310C3853C4333C230A78479127953E85A56C335B264FCC2 -FCB6737637F864A503BD2E4FE44F14AFD8E8B51EBCA87910F6AC4671F9A9591D -972D0AB26E2AF36519CAA939C07D6D75F56BB331E7F37B6173383EA3B967981C -903177D5E441B6069D6310476781779F68B4A60EDB732DF6A9BF1606B5BA8616 -AD10D97F711902CFE0B79A228F3CE5D31D7E35FDE180E3A52609BF2A3E3E6DBA -E83650227EED7657D43594200EE4B71BE9A70ACF49A79173A985E1FCDFCFB705 -EF6D655E220FFA05B96AD4A5EA28FE833272A2034E0DE412818E89160B1AB71D -CC2293238DA9EEC3A0E6BFDAD89BE4742A4F893CFDC4847E769A8AE4E3607D2C -8FCAB808540C553DFF751FFB4996580010C53EDFF3354EECD54DD2AFE4BBAA66 -3587D0488A2E96BD38B16D5265FE05D92608F41CF56FEF44E977CD965DD29390 -7393AA40AABEB5006D6F0CC0740DB96B2685737C89E445DC07718B5986D13284 -0589CE723475C6E750F398CF7B138D4017120F774054EFB7CFF3182167A24035 -0A31A73C79CC763DDBC12C371D8A77F7B9802F9200EF1715F163EAAD1BD26139 -289405D97CAA32BF9D5C2979382B78635E39E4B4DDC0AE2A0B2B411C08A8D0D9 -ECF61C48C33693F24EF1B49293B2F637732C932C35998E9F7C2CC23B5031CAD9 -B2A816310F484FA71FAEA04B09237762C23BA7D864095B3234E32814AAB28142 -F65EEEED4BED3A1B7AE05BE68D6FDD81AD73CA46CC51FE29CBB6AD9A7FB0C521 -6B776EA1A7418CF0D4168AC00CF74DC39BF649B27F32F9791D51DC32FEF7E1B2 -F79502F3AF78BA3D549E5FB21AE5D265326D93CB4D32F6DFEF33029432A74D1E -B23363450A94833F158F86B7885E877AF5F413BF0EB3DB99B508CE4CAE50BAF5 -C522A038210828B44EE62FF7D64E0E33D959D6F45FDED3FDD6FA828A5858AF82 -4A63D360801D8DDC9ED0E131E3339E86C0A6E1C20F7B7F85BEEAA6067F18D9F8 -E5971282585D3930011661A5F4333868CEF20CF01770BA2C60DEFF2B368AD21D -D4167DD179EECBE8EC29225FBF1FCCC1D1D5A311703D80C942388BCE852CAD69 -E6034691247123B45A5613C7A307A3118DF37F009001A8A87D093BD0F48B1E93 -57A0360E523CAD04BF1BE259C75F52043A7BA57EE718852D350F7ACCA3664722 -20026A57015ED6C0208F36AB7247D91F81868424C5871A376924FCAE64382287 -D232C928831EB8C80D0A107DBB9CB53568E51B85912733B9559B6DC8287EE61D -BDB6159977F76D58C6D925CDEC01F728D7D6BDD27A8E61473EDAA7BD7D80D20F -B47E20C691794186AAA4F6AB76FCA59058E190DDFA2179EA4A3297BCBFD6F546 -EC6A1F7B013264BD04DE97E325A7F440ABA206CE1F0AD45AD09932F33DA483FD -A8C54582ECDB96F9E612C8F2A7DA397E1CDFC11D8C1168F18B5DE813CF7EA37E -1C7B2DF3B38AA6B3D96C6DE5637FBA31152034EDBC6511A965C78CB526DF27E7 -967AB9939D93DB8379DD1AE267FB7FC543256686B68434D3C5A4F5D823B50F69 -0F1D4DF1F4C575B9DE19C46363CFFD6CED771E0A74EFCBAA609A564631C59C0E -0AEF13343DF77FFD4E0EA2AE1C1405D5A9C010FA32317445B8B172E6382D6F19 -A128393ED2C4ACDB9391D3E96BF3289BC12D1B8C0D6E3AC30074E55F641FCA5B -B237CC2084537A34284BC94F3239C4E56A23722E89B8D604813CB8F776D17842 -AD927359B8147FC6E05503A0D0209FA52653481E38E7530D39E42DD57EDB19C1 -C4D8ED8222495543FBA560AA5774BED94A5A24D933F633BEC4DCEB70166176A3 -49643A62599243EA05741910083A0652E39DA7A759A554F48A4D550A933E4ECE -D6D12C6D6BBEC0A3408A9BE220B328060015B3E3B663DF829D93B9A982F4BB23 -F5C8F24DC9CB77C7DD80809D353E336659C5E7C2528D95E521208ECE1AAF8DA1 -D84A8A68E2289650D800AD369399594309A144AF3CCB62BE30669C1FE773F072 -D9BCA31AF45DEE792D623ED6E99DDE9545638A721111DAE7E74B3A5B07881662 -628D47F08A3749F6AEBD13FA11312CCCD8E06297A5A698C59E139D52EE5793EA -A03B23583052F10AE38CB951E533623133568377A7F2FAAB301C16F957A12E82 -7D2A9451DD123A725EFA3C3D93838581CFD60E69C772647D384BEE1A312F879F -940EE9E91E6F7883B91DB9D4F1C5D1A941DA8F320EDC0FF8E577DB3850F2B5BD -3535917873627308450D8CE2BAA054BCDCFF9CA964FBFC8161787697FC10195C -6C32FB43D6891AA1538B728C34ADFC9DA526E87145693815F6C17CD9C361BF37 -E788FBECC2905D57DE7C2AD8D03AE51C33210490395C00ADFC0CC1FB5F5CB3F5 -994FBBD3DDE7DF9A1ECBC87480EA78770C35E7DF78AF2240F7E1412F8ACEB501 -FEB03A131CCB795EA51A6FF5B188B5927481C63B82EDD1542512F069800249F5 -A8F963EF9383342C0BB584BBE323069CE631D985DB8C4F2109A8E1804AAF0603 -BE3A5C8863A4B815D5200B65AE7DF41D79BACC2510E700F390B2EA3F4BE01D89 -BA75972F5354406DB6157645B80A9B43B8E0346A7E20D090B0A37C533A7946C6 -EE2953D8B2B216AA2237E9407DC6F90008C2C0E449112DC5C3C2C8019CC9135E -C136FD411E23F26398F422EDF01AF433D66F60E5B961B6963F5D14CF48F77A50 -8F6C584459FE6887764353E2BE8DAB3C4CCF79A1CC5E1B28C427F520E9139230 -83E2B8C409F6C1A8E954F81F8F8C1091C4960C5132B7B5AD865AE564AF68CEE8 -7924B401ED8FC90F9A222C6861BDBCCBF54D06D1F2B27EA2176E4BD643295A4E -49CBB9CA351F339DF41D3A0ACC6A4C7A33196FA53E49E409413E8D6D69F21B09 -3D7CBF3A96347F3DDDA92C435E1BA4980457D3D9957B800B144F590C136547A7 -660F182BF7162F5292A4AAD4A1E841867EA48FD686C90D563BE6E2879BF05614 -EBC88A6DB350DBF2996AF28B2EBE9415AABA07FF509B9DC0F5F066F6AF30BFE9 -D9800B5708503CD57BC055F5434655E68E322D699EA77974F1A0B4BF47AE76AA -29F0BF7A35312686997FACFE24E9F8C23FF882E36D99CD4426742B6120B67E92 -BB855092A15A7BC5E9A6AABAC61CC20EFF52246334525628BF6F4D7DF5542399 -91D6E985BD244B8A4FEF73A2366783307FDD8960D81648472C9FE19445AD3AC0 -7B0C8C2DF9CDA23301BBAC2D7D32574DBEE3A176FE9C27B78903D1F3B1E6B7AC -AA2768578872F3FC652388DCE24FB5F4D83426756915476C62A386B95FCC7133 -D21B17F9548DBB193D8C57A42E6B76306487EB53A5AA8765BBF8B64188A44E79 -2087928358CD1F1CB7286D6C7BCCEF10AD5BE805817BB9BFEDFF5EDAE0F691F2 -742DF076DBC7FD8C5D3F6B2ACC84BE4E16B1D68C3008055340B1952919387BD9 -D3C45456CB361F3E4D00CEC4F4D289074AE591074BE3C7AF4DB010B6C1A577FC -DB61CC1DAE946C39B1573AE788B86FF95457513681CECC79B5CB533AEEBC98DE -D04DE9C0CD9FEB79ED7143BF3B1DD911BD1999A2F223D4C41F51F9AFD17C9E84 -AAE9B30BD00F460A88C74A27268559754A4E416485F0F9E71C2CDF13F62F10F7 -25808965E37EC3FECD537D32CF915B6F47D6AAC1E7FDC9A90A49DF2C1CAF5721 -66501C306734B40278AD1129CF85E474264E65525F14DBD3BE2C358364F5A624 -21EBF782925A9A271CB4ABA439475B6D52A65EA1D8A71DEFDC476F73099D7EF4 -C5E68D5D0174860D55486F443E0E9C81A86594D28B2BEFEAB7AB9B14D1EBD02D -0CC44A01437CADF55E4FDF86B2CC1762175F11725F292819C97168262C3A2D51 -3E3A45B29C5EEB0E57CDB122C8A5C077D99AA50415E39C44C206E980F06F0ACC -7128ADA7761D7520AECDA4660F2E3382A733C31B5A5BC5DDD782C92E9D1C64CC -F0CDCEBB4699C08FAF77712EC8D58FFB78253B978CC7219D7D79515F8E54A060 -180FEF767C9D8798CAFDF295303E7F0A6623A8C12B14C1836F11F8EF13E426D0 -6713C847925CAB6A2BDDD84344A9F3FC9ED2DBEBED62986E39B762DB093A70B4 -8330414B6CC6210606074CF505197209BD0154CCA72DE4B58CDCA2164BBF3AE3 -3CB35DAEAEF2247EFE9858FB09FD7386EFBC3726E0D8D0C105CB6F39715A9AA5 -75E088AEB767E520F30FDB5B1CF1301EB4CAD57E870C91C11F2839956FC3B033 -ECC34C4794ABC5062BDFD9EE75BF35C7838DE696D2E89CDF370F6942C224090F -6866206B027A9385C29E50DEBC25EC087EA404BC87D9B06D6C9A6DD16FFDD199 -53E5B20FF70287A5407C80F4C29BF1E997B9206333CCE010E05B6C8C2ECB7E35 -486F96890C7A4F8E97FD7B42EEA6FB4FB3083BA5B01BADA2164C3E71D2438FE8 -4B4D38EDF4F1B9BF8334A34F42C6D093A56763498F359AA5AF15D5FD17868C80 -854BD80EB0F1ABEE40195B49FF7E9E04FD5DEA0FB07B12E0FDAB3EABA242D3D9 -11CF1F8A0BEFE0F6C4CEBC2DE687F7088E3556B95C0EE7D0BEC654F642212093 -E4ACA7C9F8049BE764BDE283D512BFEB784CE3E83BE5AD94CBE97A3C71DA85E6 -5ED201F11B6BFB09139D8FBE9516F1CDEBA26868D60A5244700875C72BC399FA -F5D8B663B4BE7484E46F65EAD424D7EE440E1DB7394CF6BCDAF07DB43C86D0EA -E08F34C56EACCE341389ED82C4485E53C3273F3F7FE285530D13A9A7D7F0A298 -458A3735A2B84D8C2AAAB2DBEFC847AB55CA7B74D9364AF272C76A1E9FE5D64C -9F61FB670F5521FE8386A332BE4D5083A16C705E61FB58D7D88ED2B540949451 -46A2514F38AF7357F6CECE334C83E274A194A376BB5F053914C7DF83E411BBDD -271C782539EE5CE86E3DA2682C634912BD8637BE31FED7085282BC8FFFA4A0D0 -2F9F7B62714D3F5B0F594983C9250081011114C0BF6BFE683261BB901A140656 -7FB4D34B2D59D4B2A37952B2150F7F0BFDCE25FD104A664867D9B5F9134787F1 -BD1AE54E3E1F8657DD5094CBE001A79FFF7A6A29C25B50376929504155707993 -5788678C618380A2D114F65D064435D44F56D8C2E969D054F3A5CC369D6772BB -94805947ACDB934C10CB78FDC3FE572D844AFE0E8CCC0B25C67EB4BE8FA68447 -22DE142AF0D17C8DC4581F65836CC100525220925067A5DB6831DCEFDA4C3409 -58D49AF007E13958E64DFF010B99A9B2C250EE05106D80C7958AF90A2CAB61D3 -6EC40568FC2DE10756E7DF2C9838EC534834CA2E6342768B33CE370AFC934FE6 -57DB8DB7E490EB547D817E717959EF4C3124C9B6DFC6F313430426A7CE5011A2 -B8643B26857188E1923BC0C0D722DB3495C07B393D5CA15E71B1163114B4368B -1041D31ACB26D732FD54BD27F7E0DBF1FEC7D4CB80130F3F750E0B9574B850DB -675B928FF95029DC848E8975132E46A07F4E4FB760DFE3E599C8A84ACCBDC7B7 -50E2E7B44B12315486B5E36C10031E4FF14E1B8C2C101B9616B6D3F1F6DA316F -458D0F76E00AB6239173B13DDFEF9E5B0F0E687957932E351D6DA95504B359B5 -F7E5863B601EBBDE3A8F858F8D226B02DC011914865E009C6F55AA1CC4FBED04 -0C13AB5C954B2FE695699010F5F228428DD79C3D3920F2B75631467487FA8486 -AFCAD8174F32B55897DF2610EB5173CED6E53534406D78000826DDFA40459E0D -FD81766CD79277D950B1615599634258ABD320D8F1E60750FC5D839BF5AF451D -DCD394129C099484D808AF2C833BFA65B56B8108ABB795EC97AAA0DFA912F306 -4594C7CB096546AC99646BD06A66B00AAF37163831DF857D9BEC11D0AF565073 -3EFFD23961848DCEDD747B329B1C0470B7C2C88C044DD6153592E6CBA21A015D -4623C290DE06B357E931155942D894942DE13D7E1FE94D4FB03A90C684FFA97B -D7257106C3C71B8BBB70D322CCDDE39DDF104CFFFC3C6A4ED68FEA52823AEDD2 -3DBE10A46C930B7874050B7D4A310C14451C9955E7D02EA21B09EA974567A655 -DAB255D067B913C8C8BEEF0F747F9900806D7618867341C49F395D78909B00B6 -CFAFCF12CFB569C7DD3357858905A89C09DF87609A0153471300D032B2CACBA6 -85EE4EDDFCBA9B9393611CB6398160A6178618F53DC8D9A26BD12FC5BE10D99F -16B3D8A44009CE664056FE03DCB5938255C6450A6EA03F60DC577A1DB34A8358 -C48095F42E3F59308B51C402724DFB4654944445C655F68357E6303A1F480E26 -337818AB5B12CAD66E41DF871C71486ABF5217658A34630968B3ACBB5ED31971 -F6853BB51725FEDADB0107090C1FFEADCB70367D01655BB43FED064F3C59BBF1 -CA9059AACECDDA6A93107A72BFC8C43546219FF4BAD0E2BA19FE9FC6F42772BC -4EAF6FC8FE96218DE04D77E00F666550F7937F610B037D62FE873001382384D5 -371C5B73D690A5EBE7355AADD29205F7381D3D758D655DD72197445FD743A1F5 -57D7807A98D1E8FE400C6E741AC6537CA76BEF0A74C24BCBD284726DDA89E7CE -4431F4AA32844896766FFB8569B70D3AAE67462AB13C25520560B97F1670489C -C703998A80E8010D509A48CBCC48EC52D619F7542E1427470500624F1F50C589 -6F03FBF17BDA013A752F4CE279E87112216AD59910E1B9D0957B6A2A3D839CE6 -81E311273D4C2B9A33CD0C760282F37EBA8CF6356C3D31465AC73DD9ECA31EC4 -5AFB71B52BFCFDD2F8A4410400A2FF3547B80B65C397D4AF6B314BAE4B5FC408 -D697AF9AA4FDA94B6BC540410D270A5317D9AC13F075DC8E3D5A2424ED57EB81 -C9CBC37DB4C6F453BFB5E52A1C30EC66129269B583B04A0A6FE60CC5694A8056 -14F8A81D7171653B491E30B236D39CCC40885C7B8B57DD43DAC6C32C95481871 -3B112939856B2C6A16E27264F4F65F22465B0015782E1553643171C469A08D35 -3F351E5EFAAA5A3440FCD03EFAA716CDD06454DF556F027903045D850AF30425 -231E67D59DCA6095F1A8005A50D8B0F85B6EB4844737C66A590BFAC2CF9AD141 -658B674A174C6FBA8E57BF6B34FCFBEF31CCD3658BFFADF331351B1818494C12 -53FFD05FE9677DCA63E4AD2C5EC1983E045DC861AFD71A696FC606B7C0AE609F -36C0A90EB386994A007ED9D2349EFD645265013E717BD94A66D6308D1DF01BB5 -F87CE336C3EAC77EDECEB76F173DB9E1BEF481B7B02CFA679ED2DD5EA04EA512 -5D3F45A05E681B9A226B0701941CEFFF253DF8FA7FCA4C793985E6993ECDD9D3 -F3D0B2F267188C93C9824B92E8AAE50BB63E4F0932C92592097425F9533C747E -9F9338839396E6F5C6AB0834600AC2478FC80D4756428C5E8C953DA74BBA67E3 -CA1E597134FAF54121D96D3EC56B04E942C0CA51B9579669E5B0BA3CD3163505 -F5A18DAF3E10EB1A9CB666B811154FCBA7DC868C9A115812329ABCADAF9C17A6 -467A90E949026BB37B2647A7D051DBDAA490723C43F705D7A53FABF2B91E9417 -39D2070ADA25A7AEC2F5E7612F07CB51A7E8729B059C0FFD0E11D77A1EEF82C2 -84319DE43E3854368DC488DD65D2EC3B8AE92611C1B74CCFE301B9130B31C8BF -8146355A86673AD5DC32D0D00C7FC33FB2F1FA263797411130E686373AE3838F -A42AA4F7BBEFF22F7CC829A95B9018C232D880E6441FD6A2E68B0640E0C74709 -C4E1976A6499A9D07D862881D0D063D2CC215D4825573ADB72DE36F8FD7E7C07 -807E88153F4E1261BBED152592FB9E306E43FB4338C7FC7E584B148192B03003 -CC5DC0E2926C59FED544A5D9A8FBFEFFF43967568B595597130BE1D3806FC034 -9E769165B83A05436E610A3E2ACE24F3E6F6FC40F1B9C7DC049404F1282D8A29 -ED19A320E30C2E66D2B133C585AADBD736A4950D77B6278946459ECC98AE9A53 -9BF64A9BF5CF9B24F12BFB5ACF91AA0F13AD869D7F61CEADC50BDB3EB949B706 -99C99B4674DAFFC8D31B96A1222834D8F7A81389A583F8FE7C9BB16023E8798D -C5C8B3BD2270C8D9F35EF54A8EA8038A50018F2B8CA0CF190BB85C7D135E436C -3ABBC9C76086B6A9425F84FB3E6EC62AE49CD54A4B673DFB819F37847B0D3E2B -9FC5DA3C384DF99112160808FD3E15FDF82213859EF0E653897B64415A2BEE47 -7B7BDC1882292CA07F3948B7C26A0D3B2A57AB664F5A0C399E5697A2FB09D1DD -B2FD96F7691AC2060173B7457287C7B27B9DCF58E609623631CC0984DD4919DC -24B66FD64ACFE2D15BA049737DD142A254B6F2F4222034E26EA6C9F6832B958A -CB479806632C44A5FC3BEFFEBAD867D1DBA5C0EA9AC82CBF56D89B4557C7192C -293A693759CE35359055A2A549040FC43F58E48495CFD33D7CC7DB25480FA8D7 -DF149E8E3ECEF8328991923C4B3FD0A4D0B1C7D5E1EB033C56A5546A711DE5E7 -A2F168EA594A7EE68BF805D039CA96CA9C033E11A20F8A6A3E1E7400E86B3F89 -DB506BB4936A300008CA2E3F5D28C71E2FFB2B5BBAD18B950C90974EBF01A56C -5AB94077D6071CAC8E45B0EB9DF22A3D896D2A45DD6474CE6504CA41D3562F89 -A034D7A2841D810D8B9E962625D7B9AE806009D39C6568F3B86F87B86F3AED6C -6A42F9FF86F3CD8F78659FBED4012AD3C903E140981577E9E9AF572E9709DED7 -2633035EA96932A6A9759E5A39A8B59CACDA37DA21F64EF56E6683C166D5751F -132B5A99E5624B81A364861495CD9208A811C47A594534317D8172D71DEBC579 -B7F602E3656C138331A03C1D66E02A19D68B80B6CEF1A30C36FFB21A8FA8DF16 -5190F44EC79B651CD09A96A9572E27EE3DF890D9FE1666710134288E97C14357 -6DD606516778FE550B81817D4D29EF9C1048AB62C5161347B1239B5F456A917E -EC333564922DBDFDAC3537BE348EEB932D2700855C1B38E6632AB42688EC96E5 -E70B6E21597DD9AEC0C66CD5BE04886842418E5D7026CCF8F3CDA2560CB15D72 -64FF100148BE72752ADC59C8F19B039954A66B5D17B03ECE70228085BE334806 -FB49BB79CE8082CE9CBFADC30179B303D64C34BBCD9BBD50D0773B7EE72E9246 -5B01B90848A5ADCC95227310A886872DC56466A02A3A9A5F720B7FE4EA511BB3 -518DA5D1EB43E13429BCB41242E8D2908CBA3FD3A2881C911BF95BBB667E8B7D -612A9035BA2602D6BB6E44C66138FC57776827BB7D6E19056EEF9D1D01CE27A9 -02C6517FFE875770123508F5C5FEC021C2BE78AA71F9D9952EC91820874B0A93 -AD291A3032F4198BB8BFE80EC6EEF6DF748E37316383EC01CEA99A64CAC75EC6 -1BC2997B1F2856FF05FB6772F6BF07764CD4751CA4FE1657A1ECAF6D8C5AE8F0 -8C9247C4F2BABC32CCD25E991A387DB42B2DEDA9FC2ABC3137D87C9D54778164 -7EA9972546C794D69C636D58859035BF8CA3DD17231F354445FA10DEFCDBDD9C -495A261258876CA0380917962C18EFFCBF89DC4194FE9A1CF72DF12AA04A6084 -E631F9D152775E93A4005A19C1FD6A4EC47EA032C6BE37A2B78785370405E27E -6CD97AA308A962761D4B7FCA5F042615169A97F738D2E3DB6C4152C6FDC5D5E5 -5161772E44B4D900B9EC705103368DA03F5E062C2936E0A98D310608BB170E0A -721766F9D9A6764720624C1A735DA3FC426FA08BA9FE9F9375A3CD338F0E8E9E -AC95AD060D67186CCA0576C1BCD646981D38BA1D3D33819F9548E468D9A8460B -ABABBDC0A2D50B5C4224C722A681A9BD8D7F5DA2D4A343D1BC9029F1B9BD4B7E -FA4817CA039BEE3856BE4B367F942B1A9FDCD1B804D69A132A476F5DBD8D7253 -E11FAF4B04BEDB7CD483BA74CE27B2C4557DED04E0A472F4B745DA0CFB86A9F1 -8AD4206B208661CDCA7F7C7ABADDECD59EB566F647A9138A8C5376D034878D66 -B4F4B241411B9489A2D9BBAA5D69A6F075B790E42FC929F4703CB5993D7F2A5A -233C307CDD20F07756AC73E62E3FA4B599A19B7114033A6CC6810F1166A06F2A -B13A9F2183C9B05F13D80BFBE21F47BF5948766D82AA817B5DCEA8C3332A308F -72AE7EA0CDA16227B77AA521C155CEC0AD88CFF8F8EAC7C6CF91457F050007C6 -FACD0E8DE03F5A484920787625CDDD132C551ABBDDEBB1F7614D5B84937A03FD -51DC15EE0737A98368B12D24F6CC11F6C6DE487B0FB803A2322EC745443F93B1 -C31C452CB55AB657011080D77DE585799101C012ACCFB55B0E0DD7788B6D0BA3 -8C73441FFECBA1924D322BAE3B180D6825A4C3D4E0E72C2446FA448AA84A0FAA -428D6784FE0DC862229A2A4432B21F3A4A9C6CE0611606F97603609792DE3B44 -FB1F8E62327ED68CB6F372522C05A857E059337AB8963C9B74458AFE461803ED -0E49E0F9B522BBB7AB20BF8C80937F41971A3FCF31D06F62571373E097558027 -0692E476E281AC8009A400AC26FAC8D7E8FF65A454ACBDD1462A89E8B2E7C7B5 -394DE68607953A7E3555C7471750033EEC5120731EC09FA95C9790777712BAE1 -36730C0EA143778E476557720F32848A0DD352F1A909AAD94A17EFE08EDB3D34 -E2CD67848B90525F263F480C47BF4ECFBB1B74BF2A905127BFF26B3E844A96BD -470BC54684FE137B21821358D191B3A511B8ED334E1FAA089A43897C1DBEEF45 -D9FC57743DC68822F51FB589DE48E0A2FACDDB47405E56ECB39CDE9E501FF1AC -0EE82A440A3F32DBE2396C3F78FD4C591836913F2E60805CA398377919C31E47 -030E4561CD6C7FC45F0ACE67D79473624794C8696A79CEB837700F3EDFD7A8B3 -D1942FE8090CA16D616272E8A3ACAA54356EB2052767480F078B395BFD7B0CEE -182D6D01FEA66C5A6941F74D1BC8DEF650740B2A2E9848262290D704AFAB96E6 -5BA9515184B323E2425356D38E85D137F79C13495330F034FF7BA30B02C5AA36 -8E0EA4A6A10A56E4CBAFB2A0043486426CD20A168118D5427FEA1264777F8543 -4A415049AF307F6E4C982FBB3718E255F947C1F2BBDE78BF7C08FDE37C4CB6FE -BF88A3AFC4AB9B077516D7898EC3C87A4FB2C2CA4E89F6FCEF185990509F91F2 -1C85F09084E3490DCA8F96FDD0CF777FD4FF021814DBB471891F8DBD584C475C -912EF1F70CC389A390D36F290A544F1D3303A5C2728DEA320843076351921FE9 -323462B251FE732D2EC98BF1E4ED4C3F96FE04CCAC497AC8330C4D3D8D3AED08 -3B7BA8E51544DEF22CBB7FD126F7E01D6E3E6DF0D2F38E0B059637D90E2E9DA8 -5A1A404BBECEBE1A0D5308D992AF73560603476754C6BF79126C436F8081AA12 -BCE6E8FEF3DD192ED812E7BDB1AAD1F8D14C169889B6C1E155007DFD98140F6F -37AFB159DC12A9E05A272C8C7655229980B5CDAD4047D89FCCB41E66DED71F63 -F07673212DE5D6FE3262696586A92EF04561C101405E21B341424B361928FA74 -D1F0F4B36B01FA6A07A7E45443AF1CD8ADC0AFED6FA8D8AF2C8CD5272A53C28C -AE944B9045DE6305CABA0B57CBFCF07145C297A4BFA8B4EA532BF6E6A0D7A452 -1F2CA064ACA886650D27E3F605A27B8FB827BC68BE30EF1707E819BE9F90FB5C -D305CCA3C1C6DCC1F1A1640D04A037977721F14F49F449D00CE1AAF040CC2FC4 -7614798B64A4BBD1776F9A1F958C0364C5D87555CEDEA1D979AE13F028C1A79F -5232C1706CD1957E6B772C89DC78F9E1F2D4B4CF9C3081973726FDC294698D7C -5B133F141499C32F8A466D72047ECE96EB36F6CA3AEFC2DE54D25DED3A3E5A80 -D02DFCB3A5E366C0581AFC853566B5A8FE47871B3E283257FA60C5AF514EE72F -97E44BF870ECCB515A94ACB1BCB22D37D563286B2F5E484555C5E94E56005A86 -A6B2AFCF2166929C97434E72C35DC831162CC6F484F36A130B8FE1BACE568210 -90ADA920D96AF14E812CED41CE8DA5C50E9E7B9194BFC59E3697790DE569A6CB -DF2CEF5A4E802CF13C18826C26373F508B6972B82BF855F6908687246CB307E7 -38E9B07F8048063A9BF4B98B8C064D1F156887727D430BCC27D5A0C406DE1AD5 -140F883DC4948F45C5FEA6518EE06CAA2173A4DCE956FC96F1B1A4FDE58FE917 -F92BA13F1A97BE8F67D7F4E31FD190E48BFCE942219AB34B2471E3A1DAEF0391 -EBFD2D7E6B21A8A7E14768A51A5FDA4BD00BC6655F16C8186DB3AFA1BF4B117E -EF707AFB48006BEA3A03CDEA5ECE604C5EBADCCE8DA638FB8C7BA7C62C458703 -31799FD9C1D86BA345FD20D20819400EA4C5852EBDB2BC24D93349E4A0F83B13 -F00FEB05C4B9EBF60944CF77E73B7B02A4FD77C55E8ED9CF5F90B74AD0F7B31F -45008D57A1CABC54D17689256648BA772B5C5C4187AA81C5BA8836C4FA9ABA57 -7BEF8291D50AACDBDA73923814A2B3E7B42ABD14F3A14A60F4AF671FC8DE5ECA -A91A3889B81A2396142D56AFFB120C5879E5A831241C321EF41D4F07F9D042D9 -7B70EC2AD9B5AD42ECE4467605FB8B7A51E9EF319684FDEDD446C5058B5A7C5E -0CBA92B61A69E6E3C86F927AE51CA81DAB7192F880BCB408DF63BF96E7F0CF96 -EFD11A84EDF771B51B13C68E77F555AF327FC45AD346491162CC3FE0AC38869E -A4AB1727C8B50EA6025FC0799CE6CC08DBEEC0F159D48C56DCFF08D9DAE3012A -F9AF6C7ABEEC3DAF9A802F246923709BE64048C9E9F409485A1E176E62DA2859 -315677A95BFE35E67AD99F718D44ABD943E5B92AA0F2C59780C718EF1B26A631 -233F61E53C8A197A0AC2AFC9775EABED3FBB7130081B3D0C9CF4BBB1D9A1B67F -AC2F993BAD45B51CD67920E4F9637B69F849E89844991ACAA1E8790D19B5DC31 -DFA36E3F855DC73143AEDB781072153CA543A2DA531EF0DC4810FF92D9B94FF4 -DAAC1B0DC33836A54820C7C7F5642F0D20CE07AAAC77AC4FA51AB8B736586F65 -56A828EA7DB2E6AF374D40D11C30BB974D7ACC1C2B27F947178F7AD8B35BF2D8 -EFFD2E20B8C5BFE5D8EEE155017AF9EB37DE7F5544097DD2470F66AB07CA6382 -226C92B9537D287A0A1E57AF6C1A0A18DC3764D19D0A7AA3467FD97AF670A0EC -BCF0D4D42F1A493467C4535E82A258F95769C7BA6531EABAD7798E22B6A0AA63 -4AF47B8197CFFE4DA3FEC29CA25CF395D601F06B39C89D7A3C2FB110CF59402E -D3C89808BA8D3F0302F82C7E66E1DB53D7B02FC5DDE9A050C2CB71003807A9E4 -9B73F7B945929F9B1D8C4976CFDEF099B1A8EEF3389797C90CA68DBBC3816567 -24D0C57D55758F460957705F1620DE8306256180F1DD9E98163D499F6BAD893C -73A29F57A88C79B55D644C37882C7B82D16CB15473BFF847C60373880EFEFCBF -15271BB52855B75762CDD566E6673DF95BB784B578353C1BC5B56AACE1CB6944 -6C79D6DA087565A0714E5EEE2D0EF9D6E3FF7EA0331DDD7AEC7DCB441C81FC5C -12A3DBE217C4C6CF893B0D3DA4B73DC2F2BF130E7813E659A7CF758E73180635 -D5C9EB39D6802EBDDCE71040B65B96EFBA434E55F0D62274D2AA44A21AF5B0B2 -839A93A97BD9A732334EF951518FC8A0B10C916994BA16DA6D4CCB190DB6D252 -7A837AB66DE254292258131256E8924AC7A0F1D1AE25DBEE15545D26B0D675B3 -73CACE88AFEE6A1102501F8BAC82A5C49429B802E81BA07D03321DAC1541EC5C -FDE0C08B796895F2E1B2C82C158FE38F1DB46C6B525C693253045F9A41C99162 -5C59DD1A955D89A9A803AB1B386E563E97CDC59A89F7ECB733951C53B405D0B9 -FFF55AE6A92FC524BF3627690BDD7CF51C91702ADACBF25FCA4472BC9EC24109 -3A7E7F146F626FD04B1B1310489FEE98F62094536EBF413D7A14F4630CF0049F -3B06B0C0A9CDD4145844ED7B2A359DD3F3E76469A1E1F88D5BA08D98BB152BCB -E82452EE2678CCAF2DF565205F1EA4B7152DE9267890184D2643C0EAFDE6A10C -6D4A118B470525AB8333793D68CC118FB4C2594C9634E174E40A287BED466AE3 -EC659A1C817622EE74FDFDEBD0C315026E23F246872822EE91CA5F54DB10D82F -34CFDFFA8EF5E7DF28599C76C3A5A8A8012845667C3AFC8778CB308A7529DCFF -946D662F2985478560495F401FCDFE110B652F02486A31205CB3409BC2445E4E -4EE5DA2608260D1F0FB9F19479CCB6E3FFDFD9C0AD22D05C71F85253A8A09AAD -5CE32BB44B26A5E0CC4DE00BE9D053F69949A82EC43216A10D33D971CD003E3E -05E46A797D07FFE2BE809534DE891063D91EF2AEB2CCFF995574A4A661AEADDB -2901F6390E93E1D40E98C7269B5D0376B1D556138B84C668A3F01FFF41563CA8 -22496A230B1744C5E9BAE0716FD4B20FE26F31F982E8E15F366CE98AA78711C7 -E04BC14426245E073CFF01B310EC370CD7A1D12442A302DF741536CB81CA5AAF -7E1AEDAFA92693552810E5E9A30070825694B374AE6A71C2BC836CA76CCCAD00 -ABCDF96D1A3743C526FDE299FE0D34D2A02D61C4609A4308E19B7BCFFC4F7468 -141592B2837E7508FEE49BD3CA0E7F00EA0339442D5FCD0D613BA8935D73B22E -1D04364D7CF5B2884B657BC4654DACBAE1A96F281123179892C21127466243D7 -1EA15DDB2B6EC1BD2FBA790EE2F3A78CFFEC079558DE093D4D5D673E0376BE27 -D97737149CCB05FC15A018303C8197C6E9341850886B9BF902B1009372565BA2 -156D4594856A834EE39E1F4F4E97AD97CE3142E0315D0DA4FFDB85EB20C1849C -A202430CF6AAFEF97F628D7A605E4E321B6F7338E5AA37FE94344F98CC48F5D1 -480C452EB80C17591C6DE1D3BD4128F0A87EDB0B4E6BB00C0DB0DA7552C98FEA -1ADB74A24041B574EBBD78AB937751A3C5E67F47E90FBFA0D88CA6CC7A8F06CE -9FE37899631D1C4175EAEF9B0D206F218D72495F0BEEEDED6B736898DC7F5BE8 -886C6F1F971BE694023581596CD92FB856770236CE273D67E589DE38FF09AC56 -54FF28A6229C014184100E63A58313053CA2AA7178AD9E83799216DA2A533532 -71491192A6BAA0AB61045CE0BBF1DC3F97EBD47939442D56D60BE3C8769542FD -82BDD0C82C59E12EBD65FAFFFF9FDD1DAB4C2DCA793073DA6003D43AB34D49DE -6BE4984F46469246C696D0DAC8CE1540946D3E1E3DCC62DE19C0831A2459B282 -0B3856AC04F1C8FDCFFF85FEAC4F39EB3978DC78A39A491F5345E76737F6D744 -949BD6C007C1355644E5CE8F5525830A9F6A41D5C4CE124BFA22D934D6CA17E7 -A605411CAF6FBB973412C0D77FCE528C4D8964C7FE38AA2E5DC90266B29B43D3 -5C5A25157C68155609D313E7F15B055FC0D94F2C5EDCB633623168D4A430FCFE -AFA26C0FCB586A81567FD0F442B373F2C2244648E0560E0A8E2B250F6549BA36 -57E2B248920DA2995F735FE19502BE2E8E917EEB78DCBC7DA169D8A9CDE8B839 -8E49BE238E46CEEE2FFDCD4022924196A92BA33BBD2631A7299FB77168898816 -12189825E564FFFAC9BA9294B7355FEBCE3A2656F803951F3DE3703987BA1C65 -B70755A7A84702C1650E6BFDAF02630057C81DE4739FE219742C9B7B38799431 -77010C455E31DB824AC206466FEB06DA7EFC0FFCA5388F5542F93C56F9311088 -EFC400535CA13B64406CFED124CE07658514B0CD9997EE7BA1ECBF9F208A5842 -48A6559A124253BF0B7FAE1A572FF4ABACD0EEAA5CDF41731983F2AF1C3480C3 -6A702AAA1ECA89433F5C432AE2BCB78B762077F5885154A59B1BD750D08F8FAD -1B239532A4963508222BE34ADF98816F358DCFD5F81ADD3C017A808F9E8CEA8F -FB112E2956EEB689E0F7BB4BE12317FA352C08E74EA43CD49C200BD19DB6EEEE -36DE5CE0E2C648212F1991F8CE69D093A792C8C16A31E40C436744E47B12D24F -69F1EF34986004A83720144B5DD8C92695818BA4D9F95CBD1607BF768FF81F9A -457B40E7C7C8218FEB865A23C41BB84557B5975F386D48F20BEB92E9B164988C -426BA43F1F30EAAC3AE65765155B94555E2A5171DA4BB3E243DD6D50DF5E365A -A54C5C47F62E3472D363189FB9BF00C15850225A95B2A5F85AC26758CDF14058 -7BA3F07245800F0E1A195477BA46830353A6707A63EBB486F1A2E628764849ED -6A082DE08DA495EB5A1CF5565A0DCA7826EE7B800D4000619E90211C19E705E3 -D667188571622A904C468B19E515697B7D9DC650C1FE08D18E0452BC32175CF3 -D0AC419627C323C02CD6E23BA6C0B2E95EFAD56AE1C8E750CF210BE153986563 -5D15CA3700598BFFF0CE909C921ABAB1001F846D82C5BA038D314181B534D17E -36EB7B608D2AD01818D2151408FB57D70EF005857BA884F800AE2103A18A1BD8 -F507E08944D6E0FA6CDE0CD3CF6D07898B8887B2A21776A198FEE71B7A0FA1FA -5B6624E72FE4A672EC528F7160F23F837DFF75F7DC11A78B505A31E90499E92F -A29D9E9D5E385BEBED4E543D0B0D92C271B9D517C82ED234AEA1DBEE24DE3A17 -C341549EC96164986809E4648092F6ABABB5EA4F9031F89D706F3445E2E52250 -4BDB1C62D2FD8A71BFE834C787C603609B62915F436D56A385237B84C024C2BA -450E64CFE43893B573415FFBF0C18D97908CC3DB39DBFE5322DA82D4AF6DE21B -CAF619898FFCAE76174518C33E6EDAB7A2EFFAD5EAF8FA4F7A3D021C55A4C002 -DDD96D014338A5FB2C214B43B4C6B733BEB957BDBDDDA16B762C82C4DB7CAC2C -5C66C8C248C6B48A5AF78D7B718C988182F6C56635B24FEE045E6B5428A21833 -611058A27DFBD824ABDE08615491A1439AECD10ADFF051658375263C4C2DAE8E -5FD3309FD5565082C64060ACF770FC723BD76995154D35D182DDED00B80AB6C6 -379C42D40BEA5A574E489B263FF2A27E12DAF300D2E08F439728CA0C1370E6F5 -C32E0A1D5B7C8C199C53AF6BF8905FEDCC883E3BBA883FCCCA6366384DD69818 -D9C4C2FE0D13A8F82431C2A4964D949850B936C89DC34853D7070AE0824199B2 -EA0787F3ACA846E37E9DC39DC89E106204F6234480E07E2DC94319BE1C488F67 -9E984848253BD7DB8332AC0425376B6B3F07019B87120B0F25807D6770754143 -5054374D89E7D617213FC9F782D34730F58E916F2DDBD5319F0A9BBFE78E253F -BA463950D5737B84CC250DDA5CA4A9AE3EC7034C78AE09F6A05BA63E8FFC3175 -821DCD0275020A68EC05DBCFEB123D114D3967C7D68D5A71BE5090C72472EBC5 -472FA95F07C1B85B91B03BBB90B5BA9263138807B5139CF5C35481666A7ED675 -986A6305DBFB1E8681D61D17B903F247CCD7E94569F598958685F487F413BC05 -90B76EB550A20CFA7576E3F9901C1ECDB60142F578FD684382B0BDE1C8B8C40E -70E200C825E4C853D1DE36CAD6DBFECEDFEF4FF8D9610535722E7E92FB46AF92 -30C9CF8547B36B788F6B464D0403FF830E75FE5C488671F49EFB070860EEB9EF -59A0663919E552FFCB7DC70A9B37039FEA11F955E0047D4C51223B29AA0AC2EA -49E41094B59A554D3F6B89B01ADA663A7239254BE38061D0FC1896AFE32DD6CC -9B7F45FE6CBBB251604917CCDE3217439C4043638B9914151283B1DC4FCEE80D -2851B13BC5FFB868FF564683292BF51F2FDA82587BA89618CF171347CAA34671 -020A84C1235E7CD9232CA37438638C26AF281B1437D126B5848EA474E61B2DFA -887AC50CC739C34F9759ABD50D4814D9DDCC3023A307ABDC42DA6A5B11D13E8F -7DB330FF224E96FB36C6FD432CE957A0552893EF638DF8FF77225DDE7F2FBB6B -961280AE30FF7A6A2DBC7A06CA57F0F53FCAD4B5716839AD1B1C959535AE4888 -125A1995517B77A52783D0155B2779DD346E873DE3C6D648D1A7C9754C29C343 -D9F8C81EBBE8F59906E1A610AAE958373D315BA032EA026F22A846D421D29B5F -49BC07D6C056B61B34293BD9FAD4F26F5F4F75C1AA67B8EF5B316ABF8277F39D -C3E23830EAC84627EE1F023A670D25128907885ADF64828B9066A56AEF4D1EAD -98A2ADFA5EBDF80B3569D93B60032B619F7A79A19406C04CE33112628AB098B2 -609CBF3D2E63F64AEB9A68526B4C9696D602A0DD4747AA230DEBFDE27B1514B3 -66BE6C0B6F33BA3A990F14D0148B7AF706B95F4677A8F0E84164F5AA9888FA91 -BBB46D23B89C6D9B3276AE7AF2DAEBB0658232ADF4BAB4C4D75BAFF7BE9EB97C -486F625F571F41D950E521C162E4FD8CE1643E13156A74D63BE736BAC443CB59 -069BC06608C6D958A0CB4AD2F5CDBFAE0922ADA57600D753A9E48E82AE08B34C -F5582BF8B654370663ABFCC008BC20A004F5DF0FF001B225AE06F0805733CC40 -DADCFB49CC90404F387E9D126330BC4221E4BA6A0E8A8C496115DDCC95D5388E -E10C2FA48BCC7AE21CFE7CFF979F91EDD80B80C18D877BD93D0AF3E02F79DF4F -981FDE508492B20F7F37E9D35B69DEB6D1F8AF3F05ED411D61FA89F8913A690A -A3CDD0D72D529483734B05872038744F17760690EB6E6B8167CF2581B13521AC -0BAD559B9C1024083AC6AAA885DFDE9AD7DFEC0B0139754215569281843A5073 -CA3AFEC3E265C457B628968C44A6AE9A53FA423251A03AA270F51F13BA5F9FFA -80DA548D56DC6D0417F3DA517058DC9ED756FB2E8867B74FDF70817C15879C27 -0D8456CD4B4E39B41B635A8E10DA744889CDDEF45B406BC6D9831F0DD0AD77CF -13914D7FE112EFEECEE1F881F9C375A9BCBBC00F0F3D0D5F9DC58CB26B2C63A2 -20DD5A5A1DCB3F49F29073957251FE88D9DE640BCA0978DB287357AD5BA5069F -B7ABC4F5B10C9FC272A56490B24E0FD2F5BC3FF60CBDA5EAD0AA4CBA59E6F951 -F5FCA03546F7D242A0BD67804B580345DCC9C68445C213ECC69E1E730BF6EF06 -05AC8128F5A4D3140A8844846D174A77F0D4ED59F170238F0876EB4D3444A080 -44262048710F00D7E218346004BAC79802CE708BDA11BA209FC9002AE1B694FD -3F616199C5AA6590761585C12B49F795C9A8D00808697A437F00921C66CE6D86 -C68FEE49A62BC6787680A27A0DB318F4CFE0891AF2EB26365BE68F2438E0EDC5 -75DEEA0C73886A0471F6053776C786453B1C092A553B7953AC92B2B10EB1F8E8 -EA68D048E35E3EA92BD0BD47632FD6E13BB4DA00F55F9199675B8636AB23D634 -06EA2A5C58737A8E30EA12F22EFB2B0AAF180C3130122D385583FF417202CA9D -588754F5501E5368BD33D79BE01D9A2495E7F409C9DF4288FD55B9076478B41B -B4085CA5B8D8B6701D50788124E5656B3E9D7500654730006F3A39B4C76ADC94 -9FE02603844AFBD18144BDAC7DD09D154D6A047A230D44CE62F1317B2A3B783F -C13722F7AEEAB2F9150A95FC8FBDBB6CB0415D5409A57795F5083F72D1FD79CC -FC1FF965FDC61297B4F76D059C493656CA6F0965F54229BF23A13F794B0F5BBC -D4C4D0351A346DA55D4221010DC9A458902F20ACD56F01F409518C4EBE896B5A -05CA57DFA78DCC9DB61D0C477D131CCF4DF3C2DDED4E7573E6AD6D5A54536E5A -007FB21C25639DB2AC2C5B618325EFCA183E89A7FA85A0C1D6812F0CE129C5A1 -F3DD02C6181728CCF87D6F8CD5606D113EC79899621ECFCB29F8B4C4F08E89D3 -E7988071DFB3232C7C21D04C5A2F5AEAC737A1392DC2F60D88BEE9ED6E882CE1 -C7B42E43709F34F68CBA4F352B387DE2DC06E471F98B310D0BD3E994FA0FCFCE -B4D97C49E494F814FB09835AF83EA1E18642F4A4C32D04BFAABEA46BCBFEA0CB -F8230E404ACE57162F9F96CE7ECC10F782140E11F23F4C2BFA61AB6E1ACC9496 -012837CA40EDBA0C62E1230A30D5C8D2C6F478813CC3D0E8BC6ADBA1E5238837 -DD5C6E4F1675C92E41CAF10749907EE81DACDFD8A65A9FDC4ACE2AB457925E68 -8DF970BB7927FFF2E957E53B966C2A5D8EB11D43A8F10DC21E3F8D2490997229 -3AFA58573E7297834E153A23A61E1380BC0C8B157E3D52B9FE1587282DBE52B4 -7D021A4F83CBE165E8F7E25F91C78F8177DD0C5FFD35B497E519444446F0E24E -FE29CEB06666E1F5760C2D2B5C8153659DB7AA36F284FEE3951772FAA4E9BD41 -D9CF7968CA215273E88FD37F1A64B7B4AFA2E239BA6F9C463A8C5D0CDA152D44 -E61D6524E88D940FDA1B4306B1388863F80ACF9FCEA03C88ADADB7C4FDE56D14 -2192097015E0C4F622C4118EAA3823248E6B9CD5C9DF3517F731E17C1DEE88E9 -8C10DD9482135FE1581B9F9D274AD2A4F4C4AB82687C897373786FF3A19B5DB1 -28D5A3B59455D17D2442BF44AE3D3E37E5635B3981346782D169E3860E6E33DB -C5777DE21CB2446D3D53E25C1C3E4A5319068D3A4EFD2D1616859959B5573B97 -446B9CFEFBF8DA22FCFBDAF672748900A1986D6FF0C7DDBB737AD8CCADB39D93 -B8C0B42AA5811564134EEE9E1745DDB5D87D6336E21EB806BFBA21F296F3620C -77C57F9F2F1535C1847D7DFE870D292F1889B17F2A1DD8122D646D4B5ED89A89 -A27B55E5E3DB0A21BAE974EDD145ACA2D3DBFCC41E1442E4C71572F6332A2BBE -1F26951DD76F7E9F1D21AFDF2B2F176D5FA873A0E87927C98432469A5719E87E -61F0AD048A2C6CEB22E0A274A2E24739CDAEF7E741785098969714FF22FD766A -AA91BAA4F2E148AA2A4849E44018CA3A56CB24F661BED204A3228BCB34A71328 -DEA7E832753F683136EF071596E0E1553FA9B7C0FEF063099155D11E2B4CF246 -01F0BCCCC30D72FF73C88DC2AFC3E2BFFEE8455BBCEB9E130D528E13BCFD9FD2 -A0862E4516CCD3407C7C7EFECA329194A48BE68A099F9CC80CF4724252DF4D2E -BEC248133C357C7601B3B7D76D040A3EA0F3727C4479F1F781F9EC9EE799A795 -EBEBFCD07D218B1C37351AEEC49D2FC2133127ACA717FB1E3DF5C553D7B867F2 -984659D466BD116A607E68A3D7776B10E62DEEE8AC4E3D019C65567E66CE17C0 -5D77CA70FF0BC2B669673169C842F724BFC7DBFA4E056DF12AA73D85669610F2 -98F468FA0BA593C51040940E87E2E7D3DC8C2E843DA2756D6D139F410F146B05 -D18180CC1FC0ABF1EF9EE86901E87582641E7F09BFCEB2CD5089A3D6B510C792 -C60E635E453519CDC183DE287C8B2340D731E4A792CED7174B9AF9037DF5B279 -8375003A95965124AF855AF2CF04812782E1CE0B1B9BF7C188A53C4B86321301 -F023734419DD8F8236B11F4C7015080B3990EE63A22D721EAAFE702856A5ACBC -ED1FB74F68245C1DBF46C33B755777B983DDE8D41590E7248AE8DB259CA35197 -FE3ED93CB51EDCF280E094B2CFC61F53FB5A52CE74702030A3C90CE2AB3B7FA6 -59B305765206591B0143B4DA04D625B22C7264C261917A02A2750BA492C0F0F8 -114DF714AA6B003B9540001644DEF7462C01F7B90E2FDC0981E79E9763A10251 -FE38FCC2FD0AE00EA22722F96BBC059C371CE5936C634F2D07BEA7D46CD3CBEC -0C7862B368988A95BBF0CF65967E54EAA99F39A23FAA08FB2858D70CF94E865E -F7D4A937C06917E8D9163A2CB42CFB57478EDF9E6CAF70DB5477AB1550E97F12 -E55CE92A01EA26E55A8BC51A38EF2079B0D7BF46376B8FF0AF901B8227C936EE -19B7AEABF17F242544350A1D0C28CD2E526A44E60A708221302E3B16544E9E84 -23CB9A8057A7068320F1D53DA24B308389962B9AA889DEA3A71C10E4DB41B967 -2C2B9121844BA1C256EDDF8EB34ABC0B1961FB40B44656693EF0C864971A3627 -C9C8D89E73445E684A49BFA4D3670AF017A9B5425085FF8CA94484C8D06F0C5E -46302D06D1EB646019513472C9FA7C2296085E208C6891EF2A7E3DA75E2A5140 -F5BEA92C2A5AA6F44E6B2C1FA1FFE434E58BF6CEBE3F90E0D299ED043EA27EC6 -3CDED517A698152C766B56AE25BCB8FD12C27F0AA3F50FFAED672BDE0E14F674 -5EC2F24FC0C84D684DAC7F10B2CC4808C0A9F91818DD2F05E364D0D8658449BD -BF598370B5FC48ECD85DD9166869DEFC21707C30F7B7CF99A34ACF26C62872FC -A15EDE09F554E21317DFCFE0D45CF7E38A72DD2E8F6AB44541D85E0F95617224 -CAC6E099E08CDD956DBDC49F1AB81DE6C6DD6C48241C0985FD00952B453DE19B -2EBB3424E658507F403FD0BD1C0C5E09F15CEE4A24DB327DDA8D88D18A41DBE9 -26761688A6666DC33A6B0CF337FAE51CF9337627941B818FA53001F639D488DC -C10873E21F3BD0DEBA50BBFCDBB76CE071151AD2C3B54E7DD18865BE6233F95B -69DDE72B7679DCDCD24DD7DB3732A1E8B4C8024AA5251A4FBAB4FDCE468774B3 -8904877FFCC902C3DF9404F3A1C7A1D0F49A3E65C7133B4C1049A6845A57638B -A9B10CE7475AAFDCC84276DFD61369A1640C76C2372EE95A0EC399DCFDA9133C -C593E499E24B5B2D03A6AB3E43B4B73E233F7F41FC38A0FE60575245327A47A5 -41E2EBB51562EDA317BCB5E207ABDC58B74F28B904DD69D58D534662E95CDA5B -DEA467DA01B240A3A71B2624B49B71DB8A81A3BAF67E15F4F2B57ACD1F1900A5 -252B680D17F0887F613BA5B9081CCABC851CCB4C37A8E147D3466526B407A4E6 -19EA389E1D5ACB3B494BC5BB2104807977E5D773354C9AAEDC1B84A92CBB706C -C4247888B0E2EA8CF8AB5F7B89834C08AD34CC099A59CC51264D833332D19422 -36AD35E35F1518AFC233A4FC35CF30F94A8518E299B6233AFC100FA3B3657225 -88A43DCCF90B6CA4DFF9685DAAB56CC40B6150C27CD76F4AF209B2385D41BA2D -02B552C436304431B4B42C4C94EB36BAAF23740E36F555989CA4BA8B4C17400E -044C7B7482F0683EDE11DBBFC36642676F02FE0BFB74FA890DB2125B1EC34561 -77E3D7CBC9BDBE1A50662C9118B78EBD96BED8BC7F2661AC6E39696CEA072E9E -485DD6FE282F02DFC87F3588DE87F1E5B4ED84E5D98883DE09CD37B421ECF443 -F3FF7E57D32D528E5AAF87436CFCA1A0D915E1FFB734D14F81F4629400931E49 -E5908D1D3BB86B3E02D69BEFB614E5F058F715935AAA8A9B03FE6BF82ADAB9C8 -4C382F364D128BE5558747DFA3342979954B0C484B698B663508923650ECD360 -E75A9FEF372951FFFEDE0561CEA80EE29F015EAED4708616478E4405D09ED7C2 -6221BFB22BA42401FEA2966161A65C08275E9EBC7966E560E69AC39CAE196BCA -DADE8D7FD55E69EBC1F74E8E0CD632687DEF2E32D02CECE979BAC2694410623C -E89C01C905EE4BE92DB386768475C054AD40FAF3B044ECFEE1167C08592B4F6A -038B20DDD4F8C70654A00C0D28107E45BF775B1219DA6B884F7728E0FB23DEDE -A79D8B6F80E1FDF72EB717620544E58D042BFFB2A89F01B7E2573F6B5DA82DC3 -5F9ED7B644452FFACCE761382BE894061AAF0ADC92B218D3F30AC8B7C2B4474D -740A9661FA4F44EE53F2BEB101E16102AF3AED740A0486BE28543BC49DA90282 -88E9977720ACC7720217108EFBDE37D013FF19B60744D735AFBA27C49281CFE0 -84E22E30D2B418CAE223455679F7AD9A8BE049562B8F8069B2DEC65E6C07752F -3AB1D19C6EB11903187DE9A2B5ABE817EF14C5F3CAB32B382A4A1AE10E9FAC76 -57275CB4A19D5E4AA90485C91DE7D83846A309F908C26E3C98110BA217ED7A54 -F0FA10F8CC083189C8ECFD6D24ACBB7D14BFDF7E8EA573F01938E750BFCE841A -0877F25A4EC9AF0D17DD358329C5779E3C4DC2097CCF7B2F23A3670B3B67AD31 -5428E0A587AC2806A9634B15CD1AB20A0245B4066311CF8271F005F66A22B102 -04DF7C6E1BA88413155201BB2CEC6FED892C8F812CA35EA384FCEC3DD8D5BCBF -C1E676896DFC2D34507BF1E934552DB0C1BF2DE3881D42BEE94FD8B1835463A5 -51868CFFB3BEC123D3AACBA8589DFA7845CB99C5881FB07E97834E805686EF4C -50B71DD309E704EC56C5B4C431CBC6A9C9F7454ECB5AC64113EE5D90DF8C1ECA -86386B38D6A985E03B45448F55D39E07FD4696FC4A2DBB2B911583DFBD10264B -9EF54217156384F8C0D5C99D0B6EB62B88991C5158542D202DC1B1365456BE94 -7233B0B31D541D15143EB4D48AFA929E22ED2E3AACF090B9E50E320256D95223 -2E4B473AD58805DC0020DA6FE8CEDEFF339569BEE59BBAB8A9C789A4D1B1AD24 -07C995B974AC8C26728E25C49CCF2F54341BE82892B3D3C1243075E500679F93 -7F120BDA233CE416FCDA2267AF799EA4345FC4B932CBFA61B588BD7152996EA7 -D441EB0172E418E22A0120D148A4C1F73D95595670BA3F983C7D36EBF68B0916 -407D8083877311B5F8C9A72023827ACDD925B9FA7FF7C1F629FAF23BB224EB30 -1322809CAF5DC40F883929D1039829938E19FDE2559D2CBD001A8AFDC7E2B716 -8118701CDFECA74D2F7A82149B3EC4101C77A0DFEF11F3692FF2B3DFFFBC164E -BD71DA2C7005F942C76C3454A7904EB717C16848A7EE8B67A7575F5CF156438F -0D54C88F91412C0A6D87AB253B6065B997B84AF1FD24B03CFDEABB2EAE85118A -E0A35424667E71F732924097AF22C28DA648A2E8A5BB764E5DF9072E6C503A9D -C05CE851FD964ABF5A2573851F7216E613F4535FEC10068E88C26E799EAABE88 -1BB6E4BA270C2744508F8B68EF9F551E7BD3247969CD3D53569723EA41B32538 -56AE9E4EF636C1299256E1D1E4ED108C14A69082900F5585906AF8A899A22450 -0DDF61DAA3B3F626DF290EA31B1F37F6007F207A78C798F40853C40F62DE362A -08C0B06386E1A12270C528135D3C2602B14801C37323B53887FE309227353E7C -A02D6EFD99748B9CB2493612A80A936249BB17F4540F93A750C56918D65FB485 -693F169B514B077E49CE664C619653FB7BFEBE77A63D1B2FF857326654F7A32A -87970F775C3C57AAAE98365D69D3CD9AAD6CF26ECE04A9DE4E3DAC9C9ADAE5D8 -0C7C60C62F69414150C31AB9E0567F53C3A8F575DD994CE0F520262497BF8DE8 -4D52C3D9DD349A062154CEFB784AD62F625163CEF7F01690C711D4BC6FC53DB3 -A84187FAFEAF5D93D0F06A25B4EC48341EE39A8D1F8F7387E5A1DADC00F2D83C -4E094BF1FEB09A0A7E6F0BE30284F743040264442F3188C84D388FC01332DF39 -2FA2AA98FB6A75E926749781717D2AD92ED2E14EC42866EB5046F7C8CF86D298 -0BF6C520EDACF09EBAAA43A477EF416E8F1088D31554E1CFA4552E1914B908F5 -92513A2C5416B76FD56C12535E2656344D0877105F841A259EF69927AEE6B1D7 -BED8DD0F6CA7F6D5CDB621E4FB44899CDEE60B8E99F3BC198912E3687636221C -4CC00D2A8A80F196237A54BCDB1C1ECDE659D183A900F544205AEDF192CD8AD9 -0FE31CE9513D298B7DF9E2ECEE56C10DD81E4175DC2966504DA5B1EAB0D88400 -3A43F4330C53D2A7506E240934CFCF65ABE9C39DF8F79442D3B8872519D89ECB -766F57344FC42D5611B0B86EE4CCF4BE6A550A7E32FA83A8DEDD10279A1A5CE0 -63F3DFDBF95D2A60323399469F72C76FB26B92D95F1ECA6F6D4CC8ADD207D69C -FD0BB3E2B00F3944C4606941E723D904E5D7F55D72921DDB383430CD0C4EC291 -B6BA49B1B2FE99FF849FA2B5A8A898C8179D0C2E796DE8E3C4A0F998CF4B5433 -8099424A7C76C3A498AA6109E46EC9E6AAFF45E10B364FA41B7577457D6CB5A3 -FAAA3EED89269FC270B1014A22C4D2788FB425396B97FA3FB7A959823D5FCDFA -2911B02A6A856224F202B50020F85FF91C1397366AA94734EEFCFF1D66AECD97 -B4A443F37733498F4B8175703FEC53547BA08CB2FC84DA76076B1D49905A36EC -E8AB606AE53986B8C0F26CB2FF58A58538511FCDADBC5F51ABD0901ECFE06707 -B41CA6329128DF5CDD6F3526D41174DFADC2577E4AEE525D5B01B0E1E3327A95 -B0E4050946D347C0EAA483C2B8F9DA33EB687347B6A0CF28BFFB11BA7246DFD2 -84E721312CF19CD124AF18F3F8C7DAE99BA5AED0D951A84F4955A218215DC5E8 -EA5B2CE36C5E06196966B65F4D3AC37F54FF8B2E5568C234970369E5732F324D -6EFA761A777DED5C806D6EC15F45ED14D58FDBD331C9F4597199205FD2AF2A30 -2C41EB17F71AC38A085AB87F6BBB37BBB8A40EED15BB05FC48A99859BFBAFCB7 -2F84944CE2FFE95B4CEB21DD43BB323362BE4C8F2D6E016F3D69FDAB2BF5DFCD -287DF42B7672E4FA8AF34BD9E257A34E388C7B47B819AB081EDBDB20DFE86F72 -90EB77835924F2FEB9D7F1516DAC09467D720506C419E94E44B79225C6FD001D -461B64AB5AE56440D7E84D5C551010865BE4CABCB6EA62DA4503C7A73C22E05C -31EB5B7D480EA9F8BA4877D7BF8618D88C7B56E208215B9B50EDC8D378C2D835 -DB7F3AD35489F6F3D6A03C9F0490956ACE2D3878BC31CE5445A7C63B13086C28 -9C9AB643D12CA41C54A6A98FF8C550B00D8035FF7E485CE380084C80282609ED -18BA58CF164A21C80A65B235A5C10730BD6AACF33BE7BFCE7371F647D5D73708 -2791C584D5D19BD75D9A9882B70B8AB253495CCCCAEAA74455C61DC23E257279 -EBF501B3BA3A249C6F0215C1810D02B021E90ED3946D96066880E8E594B0B125 -28B7F3FE3832E3BA37DA65ED789F3EBAA00FB6F43382BF83CEBB70F056D06896 -DDD48B5278A27EAD5547BA2F583CD0961A5A040692FA8158B0C83275529AA118 -1DE0670915C269650CF843CEFDE6F896E0E897E12899E591F6EE44AE743E3A04 -AA7F2B41CA6472AD33C6114561B3A15EC8FDD3595786C52F5889D3BF0B20AFCB -803E6D199DAF887509A9A7D663840B15FD7DC05EFFB27B3A30DEB80D7BFC1406 -481BCE51C2D6033758F2649EC81044097F039C448B8B91FBA5AED1F15CF17347 -96C3F938EF0B212A707F4BA27D6DDB9016B07CE699C2AB314DAC8A99A004F43C -92C0EABE8A0E13848850ED528D5269C353243B20EB4C1DA88AB6301137032E54 -0BBCAAB039E216DC09694D2406D82C1803D26BDE251899012A7EE6298D2C2F52 -E5D87FB42ECBA66A40437B754C0E57120FDAE35481382DDC2A498DEDAEA9915D -4B85EB7A313C73E804D425B79A2EE9FBDE556F745F5DE31947B1331D7D965179 -3F6F66D3F4700807BEA5232CE668137CBF2FD67BA025D7CF37ACB925C5651337 -2EAC6D5513DB99F6BFA61B717B33796D46B47B68B3E5B937C170E37F4EDB7B66 -E3A8417123B7824569AD515E47CD823FA8F0A2944DECA5A257BA2A71CDE90A26 -985A9D46F4B4EFE36BD46C8CD48FBEA4B3B98FD33A050A16FDE2518E09B7FDCA -346F6F01C7B441563D64341D29CAD327F62AFFC3A59675EAE1ECD2D0670AE179 -D98511AA514EF8111BD2812041D875BB9A198133D3FA17319BCF8F9BD838DBE4 -D0BD072D92DA296A9333250EA05A9796BC1347BAD789B803B317914EEF08AA47 -A05EA5C5C5B903B7F33CA520502CF3E8E5923C6AF86488CE2F05A1A503117762 -F49765A64E4CF9343E937CDF79097A9E8ABFD5CA9D31C8979B8F72D80259C4A3 -F599F0E251D2820A48B01ED48AB4BA7E474CAACCA2F9773285A049B66A0E75FB -77F1FFEF68D6FC457C6C0AD6630266FF749C58A021FC1382BEB1F400FF4BBC2B -EED145F907CCAF9C8532EE3F447C64D28334ACC54B9D4F487A1BA4CB26C0274E -73245199C085FF391245126B990D8CE428C59F872F86EBEBC88D0242486BB201 -0076F1C5ED159CE403D08BD278DD21C917808E20CE8B23730A38E172F537383B -410795C3915BDB06D922C3604E68656995A3452CAF4BEEAA176B487A39E24149 -05D0E6E6FA2EFFE71D96617E5CF773E55165EDBB37C63E700F1593221F866189 -CA8DC2EF18FD9DD83D312B1B3B159656679DAA25BFE2B54ECBF532ADDF3F7C4E -BA23628D7FBF19E6D4271F16A91F751357AA46776D1F874FF4497EF50F6465F2 -48F547A8D00FD9022814F58A69A8643AEA9886EFEA87E5AEEDD35652FF584AAC -31901B459D2BD707FD79F629C68F94B471FD95E4A4BA996AFCAEE15557C1B167 -4649CF28A5C8BF857C3A63754E8CBA570E4235F179CA3691E948ACB1FE92ED28 -F82D2D96E3CEBE59FC117570F19F364BD092070E06C69A40B6F53F5912841BE9 -AA6238E14A774BDD8E13060B20BC8498014F3A5511AED7544BA9CA3BAFC4529D -27F430F14C6016B7A5487FE6BA6EE10545A0342C8DAF5EF6D6FFD4D55F74F406 -49C557FA75E61BBBFECCF67C0A512C23559CD71CC67A5788ED0282B2F0B8D6F0 -3FA276675CA5F2411929D6ED8E1F3C3B6E3011B46CFA2CE18AB291C7B3A7208C -DF161C0B2C23A0000819848C490EDAC1C320B5A7E60DDBBD93003387298D04F3 -1EBCFCA1B17E3C136A9D60080DE114697682E4AEA88E2C61698E2EE9E38A491A -5E10BA3E6AC61203642C2EBA3BDD759E15F36C75B4FC4D58F33BD9F4E1E2CC64 -E1E88E22F80F0F160F4BA00ECF5866717EB3899617C21D1ED5F98BF2AE74DE49 -F3BF8CBD0F8C68759C3D4CF56EE723B12ADC58ACE93CA4274A89C216AAB3419F -78B60B263A44B1EB69C07BCB1F77E2CE24EDFFA75A88D5738C75424150EFB5B8 -9D128D3C20E4A1517E4C085C67F1EB943603F4DBD591A617EC740373B5AE2DDB -FBBC875171152C79AD3BD887291433489521D7F6B4D762FBA6067EB6AB5996C8 -32B1D3179BB3CBDDA8A23B7238791E2DF97C654B8A8EA305EF4951283689898C -0FB114A5EF5F29F9045C7817EA7D8E578DD48D8806DE88B68DDCB879A0AAF44F -415B911131E45C4CD5664A1F35179A3355B4430520D5C5D08F7B63ECF99BD920 -7EBAD74476FA147B94447E84AC4FD7CB8F850CB19F41D18210DB569D5687FC95 -0CB2E776FCC5BE3AB89C611F488FC07C2F8A77DE6C008208DE782D24395BC158 -5EB7FF2D4AF74BB0F10D8EF2F1ABD2435CF699EFFC1E7CD37B4382BDAFD2A83A -23419D5A7DE1F19EB03D7FEDB30D322BCFEF3234580A91DA108FA4EC4F2091BA -D169DECE3AEDE61C07E2092A80F6A8D5A8E4F8C24106E0D76B71E9B63F9FD9F5 -3F7A735CD61228364E76D65077B2EFA802E15578F4785708DE8A509CA8A329A6 -9194B07F1FDF2FF3EBA62BD318F0ABB3ABCD32B4F77870D8C4F964AE4FB32723 -3BB395D30BCCA1A06966788E2F8FF5166985D83D0BBF0C0DE778E246B3B724F0 -2EE098B24EF06F6600BD6EC4F109FD2CD765F85E04D9C95DDFC7B9EA8D14A892 -AEC2C060A7356B297A3864FDB434EC80D577FA82EE91C8C43A1D5C6DB5120316 -048075EBF3A7D88AAF3CF572A1061617A075B0861474D4ABA6749D14C0272156 -4B8709C55F7FA89E47C8348E8181BCB4683A8F3AD1D9EBAA9EA7CAADA9D8E939 -0422BDD77C9C023E7E1DB7AE1F94FA53E8C9F98C6CF9A9F11D99F35F2310389D -B468F37C3F0C856B9CA592915F91BD94DA48DD620E1B07DFFE09E0EE181EBE44 -75228558C1309B0ACF02BB225C7640F1453E89F9EF8A81752F66538498B835F4 -06DFA17EB45FA5BECF212C55F27E038FD55C6BAC12CF6589A150AF8E61F1932B -AE29234E26183D4C05ACB111BB0CB06397264606C3B9043979785D77B17B181E -B6749BD23196CB92A90CD96418B7DCB67C6E361726573735EF5406CE233A3E7D -045BC9FFF1796FB53AEFCA6A13E8E00EC0583E5CF1546572770BBAC0F8E15F29 -DCFDD2EF48CEEDBA6E8DDF847396BD03631A20CFFA2D980AB6A8449F07A5CF5B -8B21931B2019B4E8EA928C26940EA741038A1B7522B62A06B78FEBD9C88CEB72 -17FED8435A7EFA0ED35B36742CE23C508B0940A362C7AAB5C3A0CFF8129D7085 -12AAD5A82E3759AB1A700007A16A911E25B895175D3286FDC3E60B038D6D1E65 -4E0AE7CA2A93B482ADF9BFA97B46B314607D2D4227391DA382D4C2E0A853D2CB -A9DE0559A60ED27AAFA24AC31726E19A213654E8DE43098F329C107E71698815 -86B7C2DF663DFD34504AA2F5AA848D3FBA32A8C21D3726A14626F8E253F4503C -2AE03FDC57D866882DA26B319C3DB35DB4797D4FE14C8EDBB9E26B130B9D25F6 -42B006483B8541F195EFD48890729843BD683E76C3318701C0423997AA40E8FD -214D5C28D6C37FAB59AFD4E9B17C142302800B02651FFA7E10B9EB88C993F559 -BDCA7958B2629DCB21C5AC2F139B5341D0795B594C2CAF50CA3112E030FC9E60 -EFDBE4D5CA899E0ADA27410CF1220E3C100148124120E104FBA6494CC9D8BF39 -6485AB8A75E588FDA7BD2E8F0ED89E87796F52AF8800C9BA3246C0CF0AAD955C -15B545540748C11F32B970D7CF9C16F4BDB2908485E27807EAA51A3CF11BCC86 -DDBEF33E2B13994C109C7607C4635CAD863FC7D1E49051EB501E47D8AF8A96A8 -8DFC6A2A908FE78A7846016C2071F930FD2A3E5050E19FE26CA09246A350839C -C7A06F69EE29B4826409249B8687744B1C28B1E4EFC4423EE93403C4C1DD054C -28C48DCE81C21EAB792BB74E7C173EB784771199CB163783D232A735F74D8430 -5E488CCF55B1550C2E63447F0622B407D3B680EFB8EFD504E88F1F7BE09A97E0 -217565473AF1E7EF0594256AF56A4ED17781F897AF7251ED8B1680043AA64B60 -1D7A2BD9DC3F4A9D07B0BB2B3DACBB2A9AA3F3DE8D747016983BAA7C21BADD68 -583BC8A37D27DCD643CAA653C50AE9D4B40719CABECEAEC5AEF9419A8A370DB3 -3172E5DF5EC198F7E96F26C4EC7107432C2D8C7D280039031096196E57A0C3D7 -4B91EA0194685B4D933FB898F90BC9B31552486F1918653B50B28FF81369AD88 -39F875864F938051CBB1D872B193338E68135091DCEA243655FB323278B92E09 -D87D8CD4FCA034AD7A218B864A54FB13F39491938E0094E46CE16990BB47DF69 -D236799B02699BE88B54FB17C80092DFD628860824F789000BE4F2C3BB2ABCC2 -4447F49BD36B1BEEDED6FA3B5CDD935126835080FD2AC78D04A4DE3A153F5C9E -23D4598C9CC923FD9AF0B6E47D50403A6566E68ED8655AECBBB4D4D0C0D70287 -D02AFC5FF37C660EC894A4ABB0614FC165C256AB968DEAD57414F06746D41E0D -36AA18F73629BEE12532B32F93E5EFA54000F251BE4ACD610F5168D32E0ACF1A -98CF89170C4D2D9E4F057E38E7E5DFD61774709A823581B0723063F88E217723 -54627C11E53B904958CBAAABE93292A55067B04FCAED977C016EEACAFAE4B8CD -09F39F4854CCA7E6E7E7C1B9702060C781ED45C8354D3AB3923BD200BB2ECAAA -5D767EF34D525398BA831973D9BB67903D9580FFFEE1AB2358EEC23EF38C426D -C433391AB6229752CFE6EF4595299E02383FAB46AF8B3E3015B6CA441839DE46 -4841FA63E8A7CAAFD0DB875B0750AC00A4C4615EF8784E0B70AE0C00BA83532B -98351D012A8994CCA18D3AA36C2E7AF12A051A8E166B2C57EA8A23AD2D66881A -EDA79F565573C76F1249AA10C1DE4B60B51220D6B946498D9800B8B59BE65271 -A8EEDDB2DDDD19B273C48FA601CCDD84C5495F77FDFE22F609D4C8FE2DFC7BD0 -F108AA16AB5B34224C579A7E1BC8AEA267C44100BDBED6897528A799C2E9478C -DA8F6ED505AE1410F0E4071CF80FF8D3CB5C1CE1B44AA7B2F38990E65D9814DE -D5F2CAF8DF24154B0E54B58AAA2473F4A27F712A0C6690391138EA6A07CE358D -213C6D1B0CB9DE945762F18BEC50C5E11DC0A0DCF0DC8A02CC2BFEE7C4DB0BBD -9FFFF7F3C79F3A991ACE3BCC36785FCD072FD159E2CE9AD429A27CEA146BF182 -10EF72E4B329EAAC8B70ED717F0C8B4B2AD31A0FB0434652C01D42FE29A2E0FA -3B529643E6FA98A66189E00CEED4A4A0D9A583FD9D83E8485C7569875F9BBD5C -270B0859EF041BF4006DB8E2D32FE80C1C54C49B1906E58576EAFCE3DDA41AE7 -EA6660CA549BE72E06666D69F82B26222BFF5DB21C15B8CCA4D8193500FB0520 -F7FD4AE3196853618190C578F485DAD0D52D7EE45E47890327EE8A2387E26413 -3209DF5C93760B565625378FC1DAD322EB0373525447170919D40D12394CB0B3 -72859C51197352AD62F3417D147D88DC59C5CDF32543AAEFFCE63542C6E69B96 -1BAFB6AE012EB227A066AF9799C58A02FAC1227327FB5C0A4C3A83D105275287 -8CAA7E21AF180FA6181643E10B72E0139BA78A03A4FA97D3B64D079A3BA8564E -14400D92A3794251E68CF55FA7530B64BBA2CC4AF800769D6F1CD59FE767D129 -D84B4CC327B4E27566B60B8505119C2A5967342B055274C793A624EDD6156478 -0859496478997011C584BD20CC9B6E950A129799A71BB917EF6399D60B62E6F2 -1BC2C88A955A6054DC6CC0CFA8EA2384CB34D381670B034ACC7B74954C6D3871 -60534C777E1E2193CAA62F14937CC9CB4ECE9B5F23346EC280F06B7A8FC53D6F -EC0A91A2B5458D46763D6207BB6D7FBD8CEBAA2D028CB9C256EA1A9A04AC75F2 -0DA3B4021CB3F872AAF7828BB33DD137058B6CA96E9A371662CEBDB0CF2228D8 -BD567C88D9B813BF74D5B014E34344BDFC46FFDB501770BFFC22E3411EA26866 -8D21DF54406DB95377DB2DD3045653B25823DB046672CE0095BEC20B8F0A6136 -374EB7584F372B665C07441903E19E61F84A1103069F7DA211DE645F48A3F550 -1C42CC2330F1BFD8913A9EFD1155F2C87DC62608D532F4F5933A226322B91B5E -CAF2A1061908FA76A09DC057B582119E526B5205CB52E77881A9FC75059719D1 -A0FEC51FAE6971FA9F981E7CE7A2050F426A8C1D9EC418825EE8EFA9D54A6C5F -628205A912ECAD23572E3610DDA047EEF4457EC7F68CA82D2E0299D92ECDD09A -BE7C3E9E81A9A72572E3AECF8AAFC39DD7FBB3DD56A1C8997207BA956809913D -881A0B818F235611FB3CD8C3735AEAF53C5B6959A9CD7608FE2BA5C2A1027762 -83EF74740E37ABE827E61519FB78994F28C59F5BFD328171B825A4BF80C91E9E -10ED9D71094DCE44B556B331B4DF9CCBFC21DE15440F2814F58A69A8643AD72B -DD53A2CFA63CF29CA3DCA60EE2C558F3F4D0D7F6D1AF921D581FE434244AB4FD -01C32682508A964114388582C645F32458FEF0673FCEF009CBC27FFFF120C57C -0C5A9294023870A510CC6B5FB5C54F98FCD27CE5575ABCB1CC6F3930E3CC9895 -BFC7FF80C86E2608C3FEBC861C71F34C1F392B7BD86146590CEFF7CE332D8797 -BAE8FAE23DE40905CAAAB4FFD115849754D2B5B3A3B9B726BD45E0935E22ABB6 -CA298C9D8C313D83AFDAD44792AA29B814D2FDE9D8209FF3FA4DD21AF52990CB -E0AE5B9B7024D8D8E147589B496771EDDCB46A8034B6B2E7D304B5299D44616D -114328D7327730EA360AB2213EBA21A32930F323992973EAAC24BBF4097EE98D -2C4BC8E7278923E8B726FC916C64E6E746F1E2DCE24EE57FEC432436DC2E0028 -375006996DFA4CBB077034D588E27C2DF082E4A4115A849E8B77FB3CE4B9241F -E747E4A719CBF2DC16DFF86BD74F536478261827A4C9CFC96806731396036CAB -DC301B8979F7D1B467323E0FA501905F0DD3075D6F2F859A905350285F8BEBD3 -C86186D8B644D7C07274A7AF96761464201EAA4E0694ED8C091326F7D2D0F464 -9CFAB448A108F376CB6BC533A3CEED71E6E995E33F8197F23ED966AB0595EC82 -4BB3BCA4DB7BB42E6593EB0933CBC7E404AD72061CAADAE15A94602A7554E6B0 -294F6DC2D5FB7929426DFB4B4DC90FCA08331AEA9D226D8EB21CB8CB2A4012D2 -027EAEDCCD4F4C17CF03484A94B824388EFF176962C3426A09979F84608628A8 -B8504D72E5040573BA7AECC13EEEC54051A31807E77FC5F480C8F30373B67E7C -F9A45DAA5B97030E16604EA3A24337537D60638577913280A130C6D25C8FEF7F -439EE76E361B3E3A46EEE9F6C61254918C666EE7A94969063E7C8E5023D8F354 -0CB1179A4BF4C009C67B8B10464C38B2B631DDF0801177681B7E7CFB941FC926 -D4362E86944ABF77E2C805815CD93DDFF46D574947A100854AF5BE55F0AE51CE -AE58EFEE5D00DAD282DBB600935FD6D3676D4B35872E7DBF2E5D164495CD93A9 -E3EDC2A8D06F9CD7E6BB76D655CB563F2B709B1FFA45E486C1E2A46A5C2EB5F4 -3DAD30D0A21F3FA4170382DA80D2729EEAED59FA99800458B6E8C2BE642F01E5 -7181BE0C35DA1B3D85E49E78C65E7ACA7CBD3EDBB07C59D6AA49F89BA36F9C10 -E141D9B7EED632E1FB544716309F24651BE47D4BF099441B763567EB6156FCF7 -E90554411216854A74824113F4C7FB626A91F32CB824F6BFE607455317DEE718 -A0C49504B2817459B0BF87319085BFF82F8C2D4E1C7DFB0EF4A9B8D53C78FD0F -5646B00130AB9F22300B69F3FA222971386CE71B4EE23006914F73B6AEA13422 -39126FE987F592176DCF482BA5B61AF13809512957A15EE3A1298A8BB5A11AB6 -314434BF61067ADEA42FAD97CC02F0A89A62D96E9E6C7B06088C3E02044E78BD -F479A423A44754865C36F54E154D663CAD44F635AB03D62447E25F5FAB14CD4B -86DCAB14B68003A6715FC145A62A8CD1FE60230802E56A5D906465E17E8E1384 -EF93A2248C92AA69B30EF1958459F2B4E073EEEB207CAA1C2C81ED7EC203D328 -080A7E22E41386A49F7C50C7C3484E118CFD08F4085553D08F95E9641F2F016E -CC589906448A0710F3D46F2FBDF6E11014B71D5B000FC8563300F3DB14F20C88 -1777732B61850770B1292132357DAB822EA0E82CF09069DA6067E8810DCBA80B -E038AEDC46DCDE18811BAF4CC2BDC823FA0E525E4920AC49A13FE1F0BCE09595 -6B0A80B68659521ACA8DFE71EE72EAB21DA362841DAD6F1F50D20DE4D53AE3D0 -3F5C96727CCEB1272DECDA82BA27E018170F55EA2D94660037E05207633556DC -4C8F0108367FAE02F1409DAECD5D0CA9BA47558B8FD450EF3C332E655D3222B5 -AD96C39A5F74DAC7DE60E5352113B3A778D97A49569411FF7B8502E1B27BA4B8 -741DF55BF75E51AB977C3F0DC4ABF7A654AB21C603A7CB63CAFCC87B5E60052E -E091065CD32CD1E15237FBBE40B5E8D4C6C34AB13D1EF5C1CAE1093824FBD5FB -562B809BE191A1C4E6CBB8D8C619536385C76FE5313F186AEF625C4D7E159151 -77F732524F5300DCBA3FB5EC9091CCC533F9D8D617D02E93A80DD924A9F8FC00 -08F1B1D0A1F78B36785C529C35301BED56EEC11F4940F12EEBDEE487C8AD94B0 -6E14FCBC1BA8AC32960AD9FC1CEDB320D53204AF69A56E4EF6B28EEF0C703DB8 -0604DDC0DFD2296BF919658C28D9027434980456A57577ABA0024E3CECEBCCEE -BAFE230A285771F1E6D56DA431AC0E06253F141CD97988D7002598D4B14849E7 -EA30A6ED6681C43E5169F2CD31BEDEB51F29542D470C3D90E87A7DB4F11A9D07 -B740EE90E4A39F4CF3586C2C723C3139F33186EAE49A3FD6F11A79626E422CDD -7D7825DB95BAB0C42AF78CB0E03FCE914A5489E6AB2143AB4D2B516AFEB3D4AB -92D533AE294568FC498E5AFCE3C131A7762C43C94BE1940FBDBDC0A44087FAC1 -5F7EC321EC0E7DDB3925C94BFD150FDB1D3556FA8456FCE3FC3B12263DF3EDC9 -C184528E75355BFE6D88935A666F53A53C1606A019E5C6E328F787078B15AE32 -9F49454CD025F0D601098FD599642340A59A5D2E9226E4E468E77B240030479C -14BA84F04B0A4063CE396D89EF3091467D212C5FAE02730A17879A1520D3BF00 -BD5E80610A75E4C3581C53674B4D18E3433B24841C20B7CD7A63C99511366927 -0A117CCC8CCB519DBA75940D75897C664627C88B98B4EF7A34CE5A9FB212777A -FC65DA6A4E1BB920494407828F19501A649850F6996171528F5A9E0740DC5D50 -DD72C991663F1605D53F7D64EB94AC101380718313DB47D43F2F465616F7949B -E46CA304A89594023EBC34B252867541C336D2B534DAD7AF58653956985F0AD2 -D24E9C4B75755A5CADAB35E11047510AB4517AB2AE659E42B7C4E27262376BC0 -43B6FC44E67B3A85A9442EBAB410EC5A4079D690C3DC2284A080A520327DD98D -8B9327C6F3B24B0B445D09030E07297E568DFFA76EE5B8349161CE403AECED8E -1B539A2B8414C0C45C5D99AEBC72E97308F6BA250DBBE6D924591A4CDC18D6AD -E9988BF0EE0FDD981A674D98BB066BDA43F2E38CCA7BC274F8B3DFC9F2AC5235 -01FEB0CB145AAFF3EFF9DD7884A228F417C8B1F62152915FF43D09E3BD3FF648 -30B06B57033983D6976E635939D746F194F3BAA218B2A37C6E27FCDC8BF8A0AE -5B077E8F11A5A9C23C24E4E0F28902FFCC81DC60B243E20C6789BFA50A86C25B -EA4B440A7FCDCD171331DDCD591C83A512B2B962B1FEFEB9D334987893211AF2 -C2A6F2F6BF83CFCA266AAB342A7604EF55D4A94A0B9BA8247A328697E3D633EB -4DB8EF437A559CE366B7F84E3707C6957C09759CBD4C3432EDB02835B16E6F76 -5DD95A0DD812B06613EA5B80EB037010E9E4BC4A73D79B6EFF0F40E84BBE57D5 -0399F85547D3BBD324B30C931C8D48A3575124BAA6AFF4C0A857E99F0892EDD3 -563B4B441817EF65B4430591DCF7778EDCC73080CF9BEA32ADD6325D5DFF6292 -DA21601B493AC7A1619406B9A62F7D1A31AEF62B95B3ECED8E12AE21F66CF90A -4C82CE92C5EDF3A29006D9960B110F2F732A0407D2291F4F4DAAB8E8F2C7FFD0 -EF48EE5901316D4A1556E16700248C0CCC984B728FC9A89858C4830B5CEAE115 -9631A1023078363A0A217FC53BB20791AED526194E1F286666325CAADF009D9A -D7DC8E3CD65D635134B149F806BF27B10E642868B5E26E1A8A59F6B0369B8114 -E1BDD480038007155224BC3B593E60F4BE8E59363974CFBADC8A322F13DC7FAD -F5A63B0699F8FF5181F2CAA5B20CF8545E63E7C034337C748B3BF5B61EB34EF8 -2CB3639EA164F6F8A981138701EDB82ADB3172C77F3D01BAC1B1F6740BCE0FC9 -2B09BFD6BEDFA3CE8EBA804BBEE1258CFABDF48C296CD1B57D4A938E2EE41B35 -CDC177E6EA0BFB5BD493637C4174476CDDEBE2C1B6F4F90FB9680907158FA53B -EBB6B96EE573081C420A0C1FA35F7E2A5EC39E7A915E466FB7F4A750148E3CED -EB6375853DE4180252E790FE09D57373DC8CA5BFE68DF4D9FACE3A95C2FF8BE2 -E342BCF84C98F2E07C6449732D7885050D9326172596CAF8D6C1D5FBB1A35DD6 -927367908C3DF2155AD9B651E02E56341EBE697F5856CC2811E58DA6BBFF14E4 -46094DA3EA6ADDAEBC29C3FC83A549D883622B1E02CF5C0C780BAA5B3C84D895 -39204F12F590C1F84947657EE2AD21473F766CEC0802E662797DC0322D13FE9F -309982171134E7102DB9FA3245F906CDF1C2FFF5208852C7C4E9F7BC95803D15 -F7C2717D78D75843C3D5D4AEA4507956954DAFA23DB15D43B26121D03FE5417F -2609A9DF71782DC41990592A6E81D9390838F1F753D9A3C003B0F2516E8D0689 -7BD5269E48D8BCDB266041F51E8BD54AB37120725945F25769DF62B8F3C24000 -C38ED31E14974A6F4FB99C87B2DB02A4563742A0FFA768213E834E4029208966 -BB4E4AC13F8591A02C59FC1DAAF725341EA72CF61C8F1EB6343FE99A924581B2 -CA0F034285758D49CE07427C96528834AC2C99F8BB4A9223AE4D8D2B113E769A -5DCB1ABCF2695477B7BB30755346E970FA500A6575189E453C66DFC966F4C088 -B9DAC012965BB890CCC132F4E6160CC2B113F5C908C621AFA34F1D95F3DB2332 -AEC26440CFFC0564B57B4E40B484D93CEFED8768DABF83A3788F5B68239C40D9 -0AF793F5FEFCCDA7383120660A4451A9ACC99D10B232D25075EAA46D39A3D8F8 -80FC17734B9363D3FA70E30F3CBE102BAAFEAF854C1BB4944CDFA73A74BAD32D -5D0760A5971B86735B2F349970B0311D9B36A74412F5F7235A497AC3EA69FDCF -9F8AFA9812353B45ADD205B5F31B2B9BFA46D08FBBBD4CEAAA527B45679B55EF -87DF44F0539987ABF6CE2E7088DF7AA13A515ACCD17BFEC5626F01D97EA9CBF3 -3DE7E57ECC531119B97695463806D889853FC8AB6EA6BAA44BFFF796C29DB97A -FD6675ED1859C61CCCA85D672104B9F20384D2973797BD8E77FA198BE97E7B88 -D7EC196CC296EBFA08A048C60005DBB696033E87F4FA8D50423E5C58CAF32EA9 -F0669FCA67692291D86BEFF717D6C5A1E0AD6A75C0F7E3EFD2F7A5F5AD7D92B5 -9BB4BD9E7B6E7E337ADC6ABECC3C1B41073FA3A25A2FC1640DE3AFD97BE7BA03 -95DB5026086C842BCEC3A6A1C3DAB1D50DB50261A8B19A7CDD7B7891475E53DE -754050D783D64029006A5BD200B6C64D18EE7576C68E30E1D6F762E9A90C9566 -D90FE497B27A9B52223A5DEA20D7A67FBFCA5907BB0496E10D87FEE2FF90C895 -CD69414B219900CCF5D5E73461D0948FD57B8681E8E598A25FADF80BC88667F9 -C871B4F87AF7DB9797A98B40BC29CA48F614F754442AC9F5D71D55D14B93BA67 -180B01E51B781345F1AEC0E68CBEE1270ECA7B3593BF4E3E4046CDD4FD9703F0 -59822E8D30209D01BB0E404EE693ED74480B179F8431E0BF3FFF6F404AB6803E -782F592E87FCF7B811683DEC0F6DDEA4D5BCCF19F1842D5E08C16E4D61952D46 -2620AFCD1DCBB1D3D2E38539537B40E291FCC6D69667C47DC77742A8C01149C4 -DD0C08470FCF10C1D5C02985AD632A55C8C86BC7604D8438DF27DDDE6F773051 -38E268C9D7E72C12EF3C02287D229AB27C864DC7A90F6208DFA2B2EA0027420B -13637FE2AAB2CD0E90C1BB3D58C1A1E92112353C994E4A3B1FD71781CDDC7237 -A97299CBC0E704ED11FEBA7B3ECA2A1CBE15F38BCD5999525D24200B0B742553 -3FB0065C5DD170C57EC79E9E04D46BAFD0FC8C9FAC2BDF17B5B756F9B0BFC0B7 -B505E533CBBB6762A076FD1D6140C3BBCAD87AF61D1FC65613C84FC7DB3E2260 -45C8A31C5F4E98DAFA54C7730454F66C867143D2A81D841400ADE0DA5BD9F992 -58C51B112AF3674B454C138B3B087FFCD596D5F8C23A5371D955CDD247F87229 -515388BC8CA93925412DBF27DC507D29436A64E236465C3BE9C5EDAE31EC5CB7 -FE4A32CB0DD86F5F5FCDB616F45FDA945A26565818F62FB21B7DE86F61160A6E -BF7A74682E9EAC5BC99BA5709D96E52733F71385693E6B75BFC0BFE73B8F7F56 -690CD5BAE46F2E7655DC840ED4B1A8E1BEB7F956F586580CB3C73F144872D838 -72B7A58281EDB4576C06815F79EEF626A1269FA5A899B6C2B67CAAE87E737DE3 -A60AD91CDECE2F5FFBDE4D84179AA3A5A84CF55132C7160744A0BC0B30A59B8F -31BB9CA6D079CB016EA257EF19FE7787EB73158D1589DD2CFD1E6F5CB343A57A -616111909DCC5EDEE2194B0648D58FEB782562D469BFB04A55B027A567E6931A -4ADF8ED23D57A6C2F7CFC24186BAB1D1637520B2ABCF18D78F69F5BDBF4D1859 -27340FCDD8E09A247752C05ED51A08B063FB3A21150ECB022AE818E49AC126FB -B0BE9023C87E2F15A49B751D03EB78B55FA135A735926F6C08627D980DDEA027 -17ECD8798B9259D1073AEA2364F08F75DF3F3039C2A5268210941212638A9198 -2B9E83C5325C1A87EBCC577FE081557F252EDB8DCCADE7D92B6F90607D635CBF -B1CE7AA040121AC48BDD09EB9A78AD2C004C2852CC208844EDC6C63C0ACEAA1B -02006551B614463B87156ADE0E336773C7B364175ECB202EE9823D2C11DB4311 -A872159D70B91783BA0D47375222A677166DE6B2D727E8FD119769BDA354947D -B4AA82966AFFD527D160DEB0E5589C3FAE2EC11A09A41F9B04A947453CE96A48 -203827A9CFF9B84AE9B0DA3F -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l047036t.pfa b/client/nfsexport/lib/fonts/l047036t.pfa deleted file mode 100755 index fb500c6e..00000000 --- a/client/nfsexport/lib/fonts/l047036t.pfa +++ /dev/null @@ -1,1361 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiMono-BoldOblique 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Mono Bold Oblique) readonly def -/FamilyName (Luxi Mono) readonly def -/Weight (Bold) readonly def -/ItalicAngle -11.3 def -/isFixedPitch true def -/UnderlinePosition -48 def -/UnderlineThickness 96 def -end readonly def -/FontName /LuxiMono-BoldOblique def -/PaintType 0 def -/WMode 0 def -/FontBBox {-29 -211 755 1012} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078986 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83E1F4276DACACA37DF93 -6E81F12A36C75497181154EAB28226DE282D3F090A9E260BE05FB75D62F0E576 -938A5E3E63A16FD101E72F7A3306261230B60339CA66A60A810D6560F2BD77A7 -B4702D2F9D75A595C875E823EBD7C94797B3BC36F98FA25220790470D2A38DB9 -0E90AB4F3609A1A013CF93D016E544F4E385663414AB2B2927BC000A9B3E0544 -00B18DE5B168D06372C55EB16D6D952F716752775B0B8BC63CD5A2DF27C0E0C8 -578EB365ADA6493181D9AB5D7B8AE30E2B499F952D65877C8E38EDD7DB29F957 -9D09EAE5B1EFB3F29CB94FC40874DD2248AEAEDC411B39AF2D35822F0F742AD4 -DAD1049609EA9CD325557E8E160E64239BC87CA11A7E215BD050A87E55EEF494 -6198CD3AC7FFEBC6D44FE051179BB739FC89B74B5183CE255C10320DD7407CDA -65E13878AB431E7B99F49D2E6E1B39D152BAB31A5BFD73BF6D298C2E71EA710D -E094C139EC016D48233AC2C25E8E60F168DFF50892EE10F66894C471861B784A -BE82A8A08C9BC8FAD0FA2E2D84406C5522CF6B9E46ECA79BFF1678DE26FA6E29 -2C3E13C38726369542682E88F4F3C0596C877E0040063BB3962ADFA6CF3FE9AC -B15B289FEDDDAD64E40AC82B3D26B1593C4C8A90B99493E33C453933B127095E -835FF7B340EE9EF89A0C792D4D0DB38784BAD3F484CD951F98B89F93824B729F -8C93C7B931D025983DB5BB21D2560E444528DF8EE5A07CFC5B5B82275CD64CF9 -926EFA32B59335B1B6E709A62D8C17D278781FC619AF66FED15922229ED441D4 -008B81578C0F30866E20841D389875795F9FA5D573A911A573281A1051293A6A -5C21938DB0F7E4508CED69E67D1F4C2BA55448BAA255E0A28DFA983C55260E54 -2E01F5372F15F74B785BFFC7502DCD104D2270B0B738BED86DB0F1F680F67408 -A9A806F586C0995A7586822B656B620E9B392D3BAE3AA5EBCBC86358CEBA1256 -EBEB0D9B5DAB1CF8F45D1FF5229ECEA379729F326E85A8CC963AF8EBFC9D84A0 -F5D7D4B3DD19142D521D2D7F96372E53EB54527D6E2EDCE42912D0B382FBD266 -4BB5E5E8FEAA8D4EA4B63A6497C0B276424F50A5E23BB17ADC8592E0A88247EB -420D12CDF7417972702B41738B7E6819476362466410CB3BF8452135B16E6F76 -5DD95AA1C99CFB3F988F1C895AA4C434076FBC66297C8BEEB146CADC7BFE4038 -CC6860C0ADAE8C851BDFF35EB980B8B4CE3BC9C2F2994C4B76C25A3811336B48 -7BEACBB256D0C91BDF5B94EE65A4032D238B59DC55D442C02553C48B1D4B8ACA -2FD1418A19576FF0CB0A58B41BE33D1810D691836F064809AED5E819D30AE1E9 -0CDF269DCD6CD605AD27E3262D25A2245933A08689A8FA2C7910938615C19CCE -8529DAB09A8CCB71847F5A79F8546B054E6E2568A39A316267E1B0C145DDFD6E -199C481BA1233D069EA926B81F1AD863C9784E281515F7CECC2B4845634D77B3 -70AC75FC74269301F562AA2B647AFF0572FAC99DE472A9B8154812ED7D0880C2 -E5A57DA12F51B724056475519E205047F52655AEB77EE422FA3E10AFF782CB25 -E02AC8572678232A611777FC31914196BF83CC82D2102A5BDFD5317063918EFE -10B43E3BB2368B7868C178B1F940512B463F0D41B85D6275EAA75856AE4A5CE2 -5E3B7079EA624D03443222496D6E5F28752F3955638A06CA42AE43EFDE812EB3 -51B65581525C8EFDD17B0514F3096D12ECF2FB417DC4F3FD866D7F3A15B7E98B -078A37367794D00DA2C72512A788A68AC0324935A25642C30320885272CDFBC6 -89F87070581BB8E902B500B878936A270441FDF0731517F86C512E02699911CF -2DAED27087013873CE750708EFB2DE9DDA19AB4387E4A5E09DF05F620C7E4519 -43A4E391BA3069202557823519C6D07B4AB3D19CD9D081CF8AB9C8E3B2AACA28 -A6A1977A7C8609019A0A716631E692AECC540BCAFDE9073E2AA7C6BC1F9AF124 -CBCBED06053F8B176F6EE71C6D804F5CE9187A2CDCE9A5B5CA28A07C8C94E328 -6D29D9051524A60EFFD07CEFFC39592E14D6F1460EF90059129AF3D989144A5E -0DAEEDF5EA6D1E7F7212291541F0E1A1DDE0CFBBAD2DFCD5B367227EF9F13F57 -0EDCC40844358B9C95764FE0981D99A793DD6260BFCF25A3F660DEB9EC5397E5 -D33D526857E454BF2694C50E7558A060C292050D534F7212AEBCDBBB622ABDEF -F31E6B6BC528B7AB99169BD1DC4070D883BBCFB69EA73E05AFD18DF56F31B251 -A1E8C9748915856FE50D441C0F968B7240688CA6CD661EC9964D030BDB6BEF8D -3FB25596A888D7530E767B60FC3C85932525DED921A63D7CB8D84169522B336D -368901BE9754CC72DFCA2A1FD4F21C2BCB512D6B97D07F9902EEB1338680121C -B2A6DD32F54632E44943081F80998C0674D640CC003BEB0307B51593BFA99CC5 -380390D36BF36A83618064BF63EDB81D5347C596D9E43291AE0D6083E6E10ED4 -7C78856F1F36C5B5C9A7570A654A86002EFD2D757CE3D59E04E2FDC681C3D297 -C8B8EB8FD5821FE4AA3C35B2B4EB97B45CB0AB7F8AFF57C861DDA0F78FC053CA -B0F01FCDA6EDFC00174F62B4ECE8914AB495804E9793DA4587B0A295A8626A69 -64A1B3C9B2D828B60BC6D18F19B604AB72D007FF0B571BB42FD6BF692C887C66 -D21540E2790ED44D117E1C942FA69694067FBF198FD8DCB22FFB10D47F75F445 -59FE728C24B0968BB9EBFC74C1BA3D42858DF3EBBFF8C27E4ED19C4F2ECDC009 -EDF6F19E1EBB4A653C5E0FC6F01B30E89BB1D5D4D232034E8D1059334DB204CF -6C75B87ECA4995A322BDE7A2B9B3F355A191E86A3B23AF11B52ED596A91B46B3 -8C03B34F328992BE927DDC4B153B615F2C55224167A957E4CC442C041BE4B961 -9EA06EF6F76F093FA3E672EF104FABE172545E51C4666C0BA73A6F08948D05E4 -E54C4496EDCEC0B33DA14FFA172A3E2116F1E10A04BEA1269E38F396C857DC74 -3DF40255BCA91906CD2710ED5806C6C6A4688BA557B78F5F81FC9764E06D391F -EAE0DF580AB7F045DC04A3BB886BB27AF53DDEE38D38AAF35CA96CD3F5C869BA -2DA4D9927809677025B7007278E0916FD8B5FB793BA74DD627CF29E7A3621EE2 -0951BE2D39031BCFA002E6FEF53EC0283247145B2947BBE8BBD3E7D5C49D9A1E -E8B6C05774B1A339A469C677BFF0B30CCF7325F9077349C96608B60F44C18101 -25E03F6EB91B25562A4F3738977FB3A463C0B8DB6B771B3145D44CA360E54E7C -697750053AA18EF9E9A3689B6248F124A75C6DBFBAF5181D8AF35A6152641092 -320A21B984DF101293A365918C113542819414E0462B6697C0993D8462A7F853 -D22DEE0AF329705BC81F362C13CD8FFD411D53BC4FDD03A3F5B95AD75FB29B08 -D5DE5830C69B2DC4E6B8423118B1069A1275CB6414D09FC27CA353B8B239AB41 -FB8E8E68E175B3793818C22C394932CDCE1E17FDA48E8AA619583D5E27A8D06C -9176AEED7FCDE33883A4509A5C8D7F81BA4F517888265E57D756314626BF3674 -F0F327380828E9D129D8BC8B352658BEFAE98218BEDE1C0E9E2FD95D595506B0 -70169BC18FDFB2EB5B4F216D07D878FC92B08DD94F5D1E06C3B20A15B5772A29 -79B770D5C82EB260F821CC53E97B5FFB84FC936D1452A11912C9D865B1C4966A -C9192A0E1CBC421619AFC16EAD4C75ABFFD0F801447D9E197A3D8049B859855B -E61345674D6D4BD99C94B049CDB1253D45C14DFEE7B17B8F7A8DCC9B26296657 -E7F033CF55ABC7A703BC755504EFECE597F0436B98491E0A8B6B128C8A4E9B22 -924D33B6BE65CD0470871835C856E25B491A527B1FFBDB8263A64E7DA5914C24 -1C4B7798424AD3AB0E7D97C0EB3FA94215F98A2172FB9AEA3AE44B04F4F14505 -C229FA8974641636010907CA68786D1C84BA5510A26EBF0D9C23E7A0EF4C4E7E -837392A223C16C7092BB2677A0E6C3BDD718F8C16DFC2232440EDD967B305F1C -85346F4F5C109A902DFF10E990732992CE920D95F999C97948BD254AE64AFC2F -771306DFB8454F8BA062AF715F50C0CC1C0B40C039D8A36CE350CA5C858607F4 -0E86B74DA44262C3F0D2F8E19D6E3D93683D204F9D506481C3022A281D465DA0 -2C33F3CAC0C9E357A1B96C24EEA1E4D6B3CE3B61E84ED48342BA80DCB95515A1 -964537E23E8368316790E6F5810FB266DAD3DD8F72FC219C7E7162596B4441A4 -1ADF396127473EB8FE164B52C251F3C997B726FE3F437564A1E5F455B595D20C -F38A1BDE3D7A61691DA09F7D8698950883B397A9AC908D69CCF461892FD9AD5D -F17B55B60B5378F9846B7570803990AF00BE3D92E40A62C9EAC215ED8ED4F12E -10BAAF1BF1313B88FBC92C37292E2C431D9C5E7D7A6E8B1E300E0B8C7E6B0137 -3DF9B8CA1CBA01F68FF29F608572859251008B3CA544521593A19BB470E35DA1 -9749CF4B5BE790810DD78DC9C28C310F15AEA54D23D58B2449E93C5044D70229 -5EA791A06AC3DD5F512401400561419EEAE9D72900EE6336B6A8DE9EB91846FE -14BDBB2A318E8FD269AE8862FD5121E402D85CFD707F844F02818F003B4A7C71 -8C03A18E097FC460ED1651C34B2C83A08DB246AB16389CD1B73654F222A16A96 -132EE0772CEFC1001FDAE643F0077E393AC5E328654F06FBB16490AB1C4B1016 -5DE8437C5E1C2FEAC4DA3E73F84266CC47928502B1FB5DE4A160A9CDA7E876F5 -FB512D043832F0B3C3AAE969C5DDE3515C19725D7573E0890C2A0D64676DCA80 -1EC2E72C1D93A08755E8E6AE34788A7EE87B0198FD576B798841A289C3E4B18B -89438BA3EE74BB0ED495FF8F2DBBFBAF532A14B0D75B90D6533DC439F65980BB -F081B537F94B4C48FABE0873D12EAFAE4CBF3779D34306071814D2DBEB3CC5FF -0623456154368D68D16E478358590539195654C70C9C8C814F0AD6BDA45AA546 -3F309D22787B7DAA56F60D65B953A257254FA3054727A57EBD5055FC96BE3C9B -9D5B11BD8A5D980BF5C1E1611D0EF6EB000D594491579ECC8F45962ED6228A9C -AB2311B7E09D3F846ED366963BD57A5F41F54130103A97401FDBBACB880A8E96 -70F230922715A6CA9D88B33CF4C9CBA196C3BFF1521925AC49E514689B094159 -FF60C59D3D6963F72690DFCCD6740A1C0D274CD047A83F7630BBEC073AAF67DE -E484787A78C170FB8D900ED4C8351FC64C75BC7F09089EC8D56C11C575E22087 -98B3FD21D1FE47D7899B908DBBB80C0CCB0304D491798F5090173264AF3F5622 -E97C4BAC6E22D336732CAD404D51CDF3B2C1F1F098244A8FB998E77BF689062F -8EBD6631461CE66217694515BB0BE2F5A97ADDE9295001E5BBDFCF1CA8DF1312 -2D9D444EC1438AFB1E1A146D14A8D4D1FB554D8A8B7DDED6D01B3D3FD2D408B5 -6CE034520871339B6070567003255A7C685CF7579C5A9612D5707DE094D3DEB9 -1253809352F9170EB020BC26CF69A274B31F99AB44386C01A02D0F3E4EE49BEF -7D85C07C685AEC301E0323C9554AAE970C5874927909BF8A2F48B553DEA37057 -D39ED353AC8F7EC2279FDCD395AA162354F237BCB993AB3311433B6373B555F1 -BEC82D844D2D51CD938EAB2CCE3603A46DA3C9868C3CD586559C403F21925AAA -51C60451296C01AEC7604C7CED9363536F2CDAE99A774E2ED95A60787872E132 -311E1E8412AF134BDC094597C80BE0535D81ADD7464D4DDE57DD2BB020D0B57B -C5527E84D4A7FEF6CBA439FEB165E0629D08E7BD41C138CB1232A2B992540D3E -9626A62FAA6F64961B56E454CE4C918B57560C08868F0F262E79F43D7EADADDC -6B42DD8DA70AF5AEC0966C0000A93949CD8B402017EE23B806ADED418B470DA4 -B7732B8CEA6A2464B35D3850F7B57596E5F6AB71CA9DAEE51B21C8D093D159A2 -10F4752F4410489CC6734735A4CCA0CB0E6124F38C5B879715509A99A5FB7F8C -3353A4DD03B43F41117B9673E1B8470579AF8706965AB50CF5F402848A603E9F -60FE3B123838A090E1CC6938DA3DB19908BEC6D92BB5A0E2774206CDD7EC2969 -186EBF848BE9EDE2A30DAFE89349062A111B53346E44CCBDFDEA993DF7E4D06D -0C395C514E3C9BCEB7F2C3B7BB6BCA214F7DDCC1A0BE92BBFB04601563686CC8 -13901FB618CC2EB8B07E7568451B63F8D294881CF4E03C492871DD81C435D92E -8247C5D3D3501CAE89D690ECBA5B0FCE995DA9A1A56B4A0EE568281C44589A46 -0C927D6FA7873DFB85137FC1A712C97771495C98F86B46968C3E9C62AB80A93B -C5DCACF6ECAC4E0827809FC0A0C6B588170BACB25B3CB1E99A38CE73DBB6D0A2 -43E5A0626FA8019557FFF1B27B4EC673A3775641C4AAB7F84454191383E77E96 -3D309D17B3E74998CA515D9B80C329EA920A7BA8E0097AE066B5A2F83D7A9456 -78738E0CEA73B15A4DA0259507501DF35F8AED1E9CB8DAACD2AE0118428B06E6 -4CF0F812B618E7070F36C4A9832FC7348F2055BF55E5E25853F669BF1415B67C -FA30F3C3BB89A96985E6B82461AA8016A93B8DD61F2AC7E607A86D84291BE847 -11A0AF6F40AA08BCC6464468CFA7C9B0AB741C3CC01C14BB26F6F7CCD561DC7A -BC38619F3D445BD4BA31607DB4AEF620CCFF5DA527261E7C7DDFD6E22E7B1AE1 -AED11E8DC5132A1C58B15B82E65DEE25FDB5E4F53403C99E2F67FC074412DEED -E83E53B23C4A571828C79AC3FF17D5701354A14B83969FDF984BB065FC0A6627 -1772E33637A3D303B652305DF8DB459E43637411B04312DD2F7BFD268B209A10 -2B2B3482C84E4A1F27430B729CF6C3A25116CB81155832670CD8EDC17C9FD068 -C07475A76F7F37D84C905CE96B5ACFBCA703A19E35DD2EA7060A8A6C6BED4209 -5620764469BE1ACAC422E039D35057F5FB68E446BA6134FA05EAF51D70809586 -44B539790748F9B7C0FF2698FBBEEF37D318DCA12FEC1B32F88BEE11A91E9054 -BEAABD1723857DCF87B13D57AEF68E6CF2CC31AD340270607EB6709E113392B8 -0459C10C6D06A3BB7C7F6252621C5BA73BBD8ACBDFE20D7146B0C1CB96E393B1 -25002DB37DCCF2633EDCAEB9A86F618AD4B3A985A83CEBF0D62B31D0D09082D1 -6CC0E355D4557C8391A5F2716F8BBF01F009235DC8070600F473ECA33DA726D8 -EF411D558D5A8B80CABDE111AFF83C0F9C058AC2B9D053CCCD1DA44C97AF4C7F -702B162E4CB347CAEEA9E650C076DF694ACB8F2E4364C675263D3A677A754B96 -20B67808EA3D015355F0888C406D1B0DF6448F2E08D9A164F955940D517A38DF -F9677BE00C66FF5BC8D722BD91D66D22AC2AE70BC551406C69F9CF4B2FE69870 -634CA58D8FA15DE46ADA6403D52037684CEA2F5BF8E589B23B402C596BA54825 -9A6B0365E1958886E26E5AB8BAF31DF7FC9BC809E8D776A42E7E8DE876BD72D4 -C226133F690A08F11E249AC083F3A984B1D3C27AE4486A4620E14D9D6A361F3F -38CEC60A5178D8F91893B91AA2D5D8FCD1326079F29E439C5D2C7ED3F5F10B4C -A29C4E97C111E18476731E0013A0ECCE409EA27077F35E7F0505B9D49F2F36B6 -4DBCBBDCC801645163D605A517866E71288130609254E5D4BC3743D7A81729AD -501A63E0C74EED7E1AB6D1328C67236F9780E50146A5DBA0BD8A402FEFD5A6B0 -956C11C68D14796CABBA701AA133C3432ED4679526DCBB089DF0F4C6780D16F0 -E90029530125B39047E4DD8CE1EFC7ADD58BA85DD905807468446504DFCDC65F -4BC08B27AA069C5383128B36FFAF4A06EA758C511F6048D9E5389A2F6066D7DD -D1FB36F91CF9D555934DD2342322B725EED853A189C698331D26AF00B9D600A4 -EACA6CCB05E063BB7B9DE8AB01CA4C071F31279524C18B52A9F92B7F2BE7A2FE -FA88112F9D534284418689A7E5A8DC2F7E03B43544BCFEB4B98CDD23C4D7A48E -457FF99CF93866B0BE306783205E3C525D1BC42370ED0C0643C57CCE4ED2930E -6BDA7B6539D9A4BFEAC4FE186CBFE3C728D1DAB5D59D8E542CFA2154FD2AD3A7 -64DC84114D21E4549D8F6E4E2BA469C4D86987BA339C9906EA3408481198E71E -7FDD1C135105790A81918A00920B17A56B11A78605571933BF450B408ACC11E1 -6D18B2D95188A2E878BEA4BC99CE430F3336D11B4EE22B72D7AC4A095E34DBD0 -14B96FD5A7CE5851AEECA990F98FE61214104B1CED07FF1648BBDD5C9E9F9BA0 -EFDD2F3F5A9CDEF9D514AC81EF0194BB22796AA1A86A04F77EAC27414E94D4F5 -FDB66069026628694DB03635737D4F51ED68BCECD50AAF6A24DB6E8B02D83A6E -6C06A2126773A1898855138F8B98E5368486FEEBE7548A968DB773D3E2B31056 -F217B22DE4E359BD03B38653F959790F3CDAB6CD89DB03B025438070C1C4C3DD -33F82E6793C7B922548AC44BE5683E28948218D1DE771768B4E01079113772AD -6A9C99F07AB2A10656CF381D58214C821846C049DB3C4D8327C1C6ECED879CB8 -54286708A843CF50D9BC0F665CA7FC81774C8E4FF3DD40DF528EBB1EA735B3FA -FAE0AE213414C3D527012BEE1302C7301A8E20CE45CE52430CEF71DDBEEA9CDB -83F0CB20D791183B6BA77076BF912A48F200EF883CB1A28944F6AD9E19B139A0 -39477AF27ECEE71A9CAB3A8CE15F721E65AEE8D97D281BC2D1E8700679C46D37 -FA193E8C3B307E013AA5473E32E1307F296AE7A69B467B502752133624A5D608 -011F4AE60E1BF61463E862D182A6C782C4B0FB86D6028578F317E5AB05D2DE98 -ECBFD98975BAF5C7A30679179E047A1E382B8515EC3F41793BC3A9F8C86B2B86 -84AE948763AABEF2AFC145EB1E978EF2152F8927334486F9A9C9082BB4348795 -478E42B197ACF9AD0D51A26F0692E9C9F7C802ED28E9700C3F5AF42AB9AE5983 -CA8A47B5E286F8E47B05F344DA33CB13C65AE17884A929F5681CDC218C128AB3 -601EA443AD09E8907EEF59F83D52223EA7812EECD8E5A49A8DE58AB7300838EB -2BFC53A28EAF747D4D375EDC1B904C705F4A100476F6E06855452E1E7A89430B -643B6ED36DCA4E4EF4C9B637F7865303A5B32701CEFB270B2301D97A4DA4DCBB -6695E94D42952F1D135403DF65D025E6D86299C4E56BACD22BF8D8418436F380 -C34C7C40E583B8FE3D4176B905828D6FCE052D0363F2C525542E5F0A0B25ECE6 -DB7C70809D53562B48A65AE5D98E299881F30FF096E53E8876B2C18C88706363 -B7EC370D953C44BF78A10C9B76904191465F72B1839940FC5568EA58D62CF1FF -A986F9B187FD03F8AE785B16AB08A5E4C37022B79E96250B31D55BBFDA0D8B20 -067CD1E1C8608EC14B2A1B46B3B7F6A1A694FB5001091D797321EBFBF1708097 -D4AE6AB1C315FE5BAFDC7BF2FBDF894973BBF91EBB14B0B850551CB23A4BCC39 -0F5F6CB3FE36DD2FF66DBAF8DEC16F99910B7D856D0ECFE608E3D8A5B018FDC8 -BF9B929F25DEB245704A546A9A1AEA30062141DA6CE80BAC951C432726C5C91E -A5A23F31596799F6E675A932A0338F0CAC2F52331442FFCA5B1570A498ECA353 -C18AB67E8164B828A21E9E4FEABE3B94882B2E819543F4E723C59C964A267DBC -A2E8EA1D48018A4D4DE7608A7CBFF01C29C4AFE44B2662C0180F0C686BE89B81 -30A280D61C321C67B2A6ABF1209D03F16C05539AFD90DEA6ACE3AC539214BB0D -10E39EC438C3C952399C07A96521C42FBD1EFF57971D7B06902D9BB9C9E32629 -FE2439769D67DE7103138B5C161E8D58C6B01884C93C2D4FC8DCF87DF00128DC -74F6A34F7CF4719524FC8D28502115EBB86938CDAFF00C61D70EE4E1CB98D1AF -436197CE8670D99F6CD73828CB3860D34C9B8B49089129C71DC3B4BCA918CD9C -C8B978011AE713105AD89529EBBCBABFD85D629F058BBE9C14169B7430C835F3 -6365DB92E8514721DDA91B2EA0BDF9C9297BE12E2897F59F5C6886BF8EF6CD90 -62F5364E2D4363A7A20CCF26B24016C260F4660DD823E7995F575ABC3048E8CD -EB0E3D0EDC1CEA4F86EDB1EB6F46EF5CE226AEDCDE6D7A9BD142F87053581082 -168FB0FA1632F6304772F83781D5B797631E3D8305323C28F8096AE577001EF7 -CF4B69C7A31DC24D9A22EC0B9352A35DA0284E78D342059B2B87E186BCC06D0A -C2B459EE7B3506C9E79C72E4B3FCA87AAE77183C14FA5BDE7BE126AF47E16A69 -2C1F50361E8ED35D6C77B0BDAA18C12F219741838E78E2E721275100BBE764AA -9CFD95728F9CD3BB344B40ED7F23B0E89A8AEF47ABF898ED6BA710623652EEF3 -9E9FD89221B624C7B4277A4AA45FFF8147AF3F68D5A7AB0C8C06F122DF0F9733 -38B1A96D51633848FFAD7DC260BD09936BD1FC0ED1BBBF67ECF2D2CBFFA77D88 -82E4DA43E68A11690B477A7D3B2B2E404790C1EF1A58E898318A360B72BB87FC -F5ACF9CB294A091162A5F0F9A391C8EE2BEE9A15C36AA99CAF216C1506B1171D -E20E627B22FF9C685ED7D9CD8924258C4CD490F72AD5A488402919E2C6ED3864 -2B9C54EFF3C03DECB50DC1D48E1479AD4C6B5471103E1903365BCC84DA4D04B3 -80AD01F15F2BCDB2E341064184474466245E44DA617B24AE17C49D57F2CE26D3 -2F7175D78255F7195EE48400BFFD86B99F7AE62D0CB70E72026AFC38F1D2FB8D -CE7DF49602D24BC8199199EF5D9706FC24E0A57F7270B70CC5976B9A6EFE8F00 -B0CD1CD7131651D0230C17C02A844CD9F4BC13FDA70F5CAD18CFDB6C62FBCF34 -E56579BB8D47053A5C3836C87A047C99D36EB2B66F89D8887F3CEF292EC6ADA7 -3299ED6C5F12ACD7D952E6E7824293CB993E8A68EA874501D84BA68A264C82CC -C9A99FFCCCAE6702C9D37B9C9BD9DBC1471215DAFFF6FF1D0890733E3838AAB1 -31D94D1719B35DF54F41F3C1DCC65C138714C350825746ECF14A4C5C80144E7A -4A91C57217C2BD91D6869B38E6FE2D2078EDE5266A3CBBDC8CC625FD5F1575EC -FE57CB298FB7490111DC9D89F6450D8DFE17B478B0BB2C49EC8DA7B66B2CD6D9 -6BA9365A3CD1E90D2DC12FEEB38500CF56543D1AD5B9E8E1CC0C9A2E12CC988F -47B5A75A6FF8C047C678A2AA4E8947F1C96F9C0BB8C2B9589404594731C5B18B -EC8E87925BAEE0D39BBE9D1435305488DAE9BFB681558654044C27573311E2D9 -B0F5E4F16BAE74ACF4C5F76C53E2212EF9F24B36BE2EB027015860DBCA06F0A7 -569F7C5AEB098039038B90D2D5BBDB69BC563ADBEBBB65F09EA75E093D92FD85 -B94E5E495C985B406F7D41AC91E8404D5CCEC7F0A907C2600F5EFB567C7F2BF7 -95A755C8C121A23F7C91A211D454C004CEF93AEDFC906E155AB5E547F0C48010 -B410F1221EEBF25F4088F72163296E956AA9E7CC5E691D4B1C40A62F21DE31E7 -E3D78D51EA7704D0A2820FDE922964D51ADEA8D0B1D855F8B6C35848938E5E19 -AEDA302E955B25BD58B2582EA770090567EBC1607049EFB639A4CBD3212CB220 -C0E2E11B5694599C82A40C1EA9FD1C5BF91C782A9912715B2FB534013822E28D -04F7C089CA656D77960368217E0B9D485AC80226495D72F4E29706E714227C4D -38203D69653566A26033946E71AC51BD78A513FFC383FC3128296FF68026B46F -6406FB931C699C0EE832519471EAFA2DDBFFE30EC2A34F0B7D0C2D87B34A6ACF -57716BF296006D7ED48935215E98AF8B79568027DCD643E0E67E504AC34F5F0C -93795382DFB9E1FD1B1BF12FB5342166D48188B84E30E3BDF3BBA314DA4A62BF -1E8971BAF7DCD7A1B515B265FC0105E2E647175CDFC932F83DDE00AF9BA09C01 -FB1AFF7CE0CD22A5F5FD4DE0CCD0449735C1E2D4292D4F9B781E94C611126CF4 -772743225EC58DA1100917D45C41819D718CA930786377B236BC0B1EA6020EE8 -ACB3D3BBDF25BD5013A7A61AC75BF1668FD77FBA4F03F62119CF0737ED0B0419 -76308D50194F06B47999F6C354D08B0627D7319885FBFC69328416368815F09D -DB26EEF2563129A4C8AFDF106AEA2FCC0E6754CE0F71F7DB6F559A70C683A5B0 -03FFD10A4284C9738039ADFB937A91D0C1DE16684B6D1EAE980EAAC05D93D5D9 -B262567864671E796743B9D06C00803B6390D48644914BBCA63F28C4562FF8B6 -20B8B5F28AD2F1D3E28AC217ED0A37FB310892BCBFEA9BD5B78DC8E507E14233 -B4B08935B47E39D976A0DFF3C78F35055797F80D7518184642446941857CA803 -86FFD7E3379ECBFC607EC5B03CC2EB13CCC4A1C2AC7FF94032D005662B432151 -27D3CF031A878AB01EBF4B1F99D8C9D682857399A88481B7B4ACE2F168FA9525 -F3CE2C2C1293386921DCAD7A0888D8E9934D4451BDA74F91774D2FC1699B6AC4 -22BB0E85C1503FF692B48E43F445959F599862D5445EC97F6B9543BB8DF87A5E -D0F0BEAC996E1355CC2C2812D617842B1C13440B9710EB705419B7E9C7364219 -BC005310FCCBA5C410639DFFF7676D44166848ABEE84C5A14614650BBEEF7996 -91BA6AB25B3D3FC0BD80FF9FFB8CCD4D27160C14F4808AF0BCC62B288CBA9B0B -91F266295E5148DC34C3D89961C76DB1BE8213BFC9C2259CE3E10C52DEF4331B -4847AAC71094B1883BF342ACC37463B7E16E4769F3591B426F2B4E3DCDE31B08 -BA838A9DD1C9968204C777034A745374C96B13C5774D7F46C7DFDEA2D8EDD79A -E678BEE2CC407FECEB38CF5A76F9EB8D67155E5212F77FE0FD17AFD4D7ED1D2D -CA92E8538FD5152608268CB0A5A6F068F7C0D589F6CEE36634C81F69712726A7 -3393557C824783D5915BA5952131BAF40B28D78A7260A24E399BE1467125B7EB -3C9E7988E993DCB90B1173D94007A31A87F35AABD3D6986B230EDADD193503DB -0843329EDFE2AD82DF632E3CA916ECC6AF1E9517087660173939D20AFB2FC8F5 -30E028382687AB6CA543EE1BB120B29A9148ECC9EB08E580ABEC61BBF833876F -965B1FB64C7A11616D8D7CB6A0A83F08ECDE0499120853371F936F49B4C03C29 -C0CFE89B22DF2705ED6518A0076C045DF47D08C708D13559F50620B00743115E -301528F33A7865A028D6356DE6B73147FC05DD30EB35521DA418A1DF70E06326 -FA40451E91D8737117D9CE45F039635061F2F33253F865D60E7EFF52C1C6D2B2 -CD3646A717134228CD910A22C256710C8E61F8D0676AA54A94269CB103F83854 -FB64074E1A5D4335EB72B37BB1CACD438EBFBA04D9171CBFDE77AD0C9E12E4C9 -FFA191FAA899BB448B1321D2D8D99D54DD126C4EBD5E70BC9FEAAE644E79DB91 -167A89F2C736DE4E4A760B84109F746F56CD32CBF8846692DC46590479B4102B -FB1F8A64B613277CADFC500BBAB0EE49BB24B134A5B4919163D15DEBB8E914FF -A446A5F9E10538DF344392B75CDD5FC72C2CDF999A285C11C431B4F71612779A -ED983EEE2C397420FD7F92199B2086A5DE50C6152F4EEA3E27C1B8CF908F2F3D -11C654DFDF2636CACDD571BB10C94F2434D39D6D9AA97B12F8A1C2F5295C4112 -3145DA333E3A5E21253920B698A87521E4DC22E8353FDC4DCEB771D22781C30E -9508B8D30431483F12637B271AB8BF27FF28658F62CC017071B58634F19B6FF1 -26703703E29FAB5F64B5AC46539BE8F3B8E11385543B3A5E997B6DB4EEF4BC3F -08251E1FAA50528EE2F35A22D36444CA11CD8F0D4AD0BA9158D300E89E6C56C7 -2E84628C68CC84AA6607D9852351B43CFD29C6DCBD7E7A98CD838A80349031E9 -C8C30D7178E9DA6FA7709901D17AB300C946327F2A59F038FCBAEB5FE6477115 -411AED37A43BA69A99663FD1D6A1BC52F1A5FA757B9DC89AA452493786809D25 -9CCC6A177DFB1FE396A9EC6F1513303D16D806ECCB12AB4D160B857AFF1F36E7 -E2C72C5A4B29B5CF1FBB55B7FCC0ADD70438ECB5CE4961091D096AAD12166590 -A8090AC848F0442E952509F2059ACA93E6C93A62646B06A9CA2F27295DD72025 -61C8190EA2D782A12D98AD1F59A7087AF2F7E6AD183A2A8B131174BA12DE822C -7ACCD50426A96AF76BADDF9C7E958625324FFA804319305B7C5E5B745AE14215 -517B1B1FB791E9E18E5D9DAC6DECC6397237DD6920D00B308E205493964BB46B -09A2B35579AFF38D6394BAE736686D89495888079326F42CD18454AF18000942 -AABCA5694EA2B965206CF24A0971C254CA889E5A50CAAB373809D9AEDD7E2F49 -7ECCFFB3E20258D83B93082316E149A9BC3F1952A541F644A91D830410474264 -CB8219D66A87111B48DA301286472E62F68D9ED53A80461ED91A90CA5B74D7E8 -C715F2CAC2B8779E478DFE036BD8228DB056DFCB5E59D0DF7218034573352C36 -C2100F4D8754C41CB15AD0FFC7C5CE5D091C41B7D4E9FF4DAB4908EB2D5E289C -FE228B98B3C647B12889739F99E9EAAE81C406C71D9BCCBE030FC5630134FE73 -6F462E6725FC49A9461015367EDBA48FED070CBA581C0E75D20ADDF2EEB46A79 -ECF3B1BD89786130D6CEB0514F294FAF1E253A5F6C359068E8A233E0069C371D -EFA85D0C87012D04CB4A53BFEA47A148CA2B4530A5C40D37BCC73C6FA2BB7C9A -AA3B6C5DB69F2BD36B1BDE5B739C3645C60ED7D37825F691D3BD58B8ED63A257 -4EB7BA091C66BD98DC9772179B0AD2FA4EEB2EA8D61C332D88B7E60D4D2A7C22 -80ABEBB582F7E1813E1448000CDEECCB85D9E135D7AA2E28D867F2A87F902F28 -36155B7D0DA50E56464765D7CAE2232CEC8BB7278F69F8631B33A40B2EC09384 -4DBA8F6999DDB77F55AF8E1C7F7646C66ECB86D4DD869491B457E9CB35CED2D7 -F4173E894210E65EA08AFD1EB2810EA4972658C21CEC80330D7DB5F2A07CFF6F -343C3AB0930F392612FCFFF26CED13A711E63C591E0A592B00E2453F982219CA -5C5ADF76C4F697E9A73C992D1EF01162D36DAD14DD0F6D8741C2E08FDD51A915 -B964D967EA8752012546F5D2056761F7B694C3DF915432944491EDE756D01997 -FE85794680849A613C1CE80F8BB514864A0340CA0AFC2BC750CF8DC0954B6DBD -A97B1EE3D8C2A7DD7285F2CE0F995F96BCBA3365F2247AF9F6B924D80192A70F -7EB242BE6441482A83D441856B528AB7606DB5E14C5790140BE1918EA5FFB306 -10E08F80C9E9524F73FAF68D5BE79419343B3DE032706EA272603056DF6A821D -C78B5F703CB38652482F5D7DAD5D5EA7AD1F832596423EEE9CFF1DDD2998511A -C43F3A71CBA3A5C14B3B2297A77DFDB49B940BCB3F33A9C4B99F26CFEAF818E1 -5D37C5D029C9DB979D89DFAF55D253E0E6629D9E2E4C5764DE4BEA3CFA6AB185 -F62E1BCDBB2CEF688433229D07BC458C4DCDFC3CDB17C8E288E7586BD7A4DE29 -E8A092A0DB26FE23060477AAF5359A558B9E79BB6436F2B181E8B53C4174AC79 -5796F204189DDB3C0156E5675151D09BB73DF17134F7575269B3C22BBDC58104 -12ACA2F40BB9918FFC1D77160991242FCC4AB7044F7C01282F166B3E9B6C6B50 -B805C828695555413CDE6DDA31E83000B76C5FDB3D30085E6F02A8F2CD1A8213 -2ED5E5188C18852BFB629CA6237F7B6C634931D90F5C183FB880D96B8B975DEF -A29D427ED88A34F09267525169EE575AE043FD180E1A793372A551E0F4DB7EE1 -4B18B770EC4EB043067D12C17D147207190D0C6BF8723DF89AC1668B1953608A -F1C5EF65B80A76E34DF9A77BEB0C70699B75F519C80468313CC2FCA9E3CF42BA -1302BA6B3970C3A72655648C240CCE5D75EF67F49A2EDDF8624A2B7521B888B7 -AC27EF9CDAE54040E6E7E797E18A3FD149F680E6BC5192E0F067CF1DF6969D02 -CFBE9CDC500ED58B2A140BCA75AB5822B2F1F34D8AC3B3ACF2132A0944D5D912 -33923BD27BC6CD13DC87361F5D03186727F4FCBB03E24BC1872CFAA635014882 -0F3A790BCCD88F22F49F4EAF8C56955D3073132CA2F1FF89F12FF67A2AB9A80F -02C257BAC189E1907300DED6A5D946A217AB4372DC64CF596DEACA9A85833E9B -1827EA876EFB89C94BF9FBF31563169C31F5420F6D10D89DD88CC87BA46FCC87 -761E9A50E32FAC58648CA233FEA7EA1C3EE485214E0AB723CB192F3C46004010 -3F9CD7382CC394CB4A85034B2D0D7C0CE9DABC0C73FE7BBB8BE5C4EA27C2BAE0 -977C4C730F2A37981137D23657218BC8BCDEF4B2806AE29B135525C17FD4E8B2 -D5673C58F6DEF3D1F11A7E8416268A3133882BCE91A97C3F4F07B8560C918677 -C9ACCE4AD07653638F9F03BEDACA787535C2DFCAB3DC3A4303F7553989AF6FCB -8D4A958EB5A3A6FA666E7A1A7AA41427AF986DB990336247DDE616914C4F41CF -5549DCAD6C3F8A80A01108069974FAABCD6A372E7A4DB8A62CD1E052218308D1 -3335F3337E097B266D683A5305D0343F6813B0D1F26B118ABBA30983DDBED252 -36479186AE5CC91E4FC060EFB1FE70F9E8F1B450893D30B36E6C5CED71B45DF4 -E586FAFA0D9AF57647728ECC16025916769E84F870FB9CAB10ED3AB674F765AA -E720DD18D2FEE1DCA40BCAF1D3F8D0D54B20B12E1DF52D625277B49355FEA41A -8366EB9C6336F2030F0D9E7E467BDD8FA7A1D4BE6025E33DE99825D9CB401164 -C2EDDEBCCBAF38E74B4E41985087BAB13883F205EECCFD674203504292518548 -401E83A377D3E7E419C2D4F86456C059A1CE971B02FFA0952F361FB758F413B4 -5D9E783B6B9D5CFB6878EAC6A75CBF4ABD3BECD01F162ADFA2987DCD1CA12F0A -10B7B4E153743E3B92D13E6378F770CE2937CB185BDB4B53963D54E1421DF5BB -AD6AEF0F6702EE22FB980F24B15CD5F961D74D20D66340D37F6A8EEF4F1F19FB -2529AFD84E67BBB1BFF305820F567697F675F0E002F4972A48B8A52AF5A98B5E -71811A929035A76A036627A64F5BDF97178B83B1B9156C7E52D278DEBA318038 -8E59DDAFD2FDAF44F80FC1CE7E65F328EAE820974C7FE1BC0AA8DC328FE1C692 -5884ED1E5C19B119DB94952EC58139BD111086D0C134A9B6C0E1A291D5B091E5 -59D406F60AC58B82B6D0A523E7E94C53F6813F79B0FF1267B751FCCF9122ABAC -72AA9F993FA42971B30382637C2A8EA8BD1567BE6F24C87350F581A0F0E3854B -2893C37A5B7195AC467155C57F7A0C94F87102F98EB370D6C16D4CCAFEC2B258 -62A53DABF7A892D8ED0ECC1BCA5D78933BB69B9355DE8D7A3E297FA4AD7F1CFA -C6A0C8E3819BA20EAF56487DF5A9FF545B958F3C9F8B1DE57C570D64D97C6396 -AE325AC12A5102A49D683B78A1FF49D16AE237886440B31B80A5BB3A15ABE827 -6524120CC5E432226F2B74BD6B24B2D285D95A840CE3BBEEF7FED24C2FD07D57 -6BB486645F60BC180DBE5EABDEF926E923F405270CFD781C2205D7B68E5A7BF3 -AA20A4961C3178420CE6F76ED017C5B23CEF6C66125F5642EA872103911A2951 -01DADEF025A53FA3C798183ACFC3CD6C115EB9717D36D1F293248B94A5A1B1F1 -DA51EDA82C30FAD863E0AF8DAF85AF76B7C49BC10ED28BF794D8122A54A5BAA2 -D9AB4615290010FE370158A640137212E93BE4FCAF685FA6C257E350E3CD021E -F8E51CC1D4E89A72E63E6B798ED0A4C88F07B994EF8EC79FD3559DB99DC9E501 -235474E224DF5E3EF7B72C7EB5FF2533DF5265E2047323F9E073C4C098F55CC4 -F291C9B403FA7C04B0ED802F2868ED917EF69F45E4D95600BF425B8A62968D03 -32F5E19219432CC55891F4FA758943F337B8685DF269425F97ADC08EE9A35C45 -788BA07F0914FF05591B82EAE3DCF106975565EA089D1A7BACED9FF13E29DC06 -4F3CE6A1E3CAE3258426214A3D98F7FD59B78BC228B5D26EE0DF1848C2C135B8 -365736967E5F2DD98C468B5ACD2E1C5C51A961C98F7B043C47B0586D54EF8582 -7420BB57D4C6C7C670D16492A757D7B49ED54A3D1A95EF635F35E99F21C250CF -DFE05FBD85576E9D7CF3942B870610526C130FB83736C0766A3F75D7EF20AD46 -DE70D0BB071A6156C4A4CD1EF853A7DBE6F0EF405D97515816F305001A0B9067 -D9A4025585E6CD0CE6D215C3CC7C10B0FCDA876810A20C87534FE9818037F824 -8D3F10FBAED0D281F6B455FC91B7253EA61758E318E724ED441468A793DE0020 -478004FAE5A78FF9B6F35AA3EAC21527A7C1E754DF332CE26EF004111CA4D791 -0787B7C7539A2AE35E48D7D6C28702B09187557EF3097E06B53AEF62048023A5 -19DE2FD4FECCCE4B945F7A90E38DE5C7C0E1A98F8294271A0234D735EEC3BCA7 -9544B1A2F7C0A934B04D6F2E1F19CDDC2B060F309CD5CD3A6EF9874A45DBD0E2 -51E52E2E2BA358F7D7D7D1415FBC788F230C17BC8E233396F121BDBEC3D2DF25 -FB9BA0FF917AC8E885481BB8F92A964FD89FA52CCB97BF4090896E1B3681065B -FFD9B517D06A0B9FFF6C4E16984AA1631C4521488EB01F645B3BD1ECA92952D7 -229117E36331EE347A81A93A61628656D50A2C6C149DCE418D4B8F5FD8E68042 -B3A25C5B2A310F793D479E39F31BB5AB901B7513BA3C61F891DC1CBC2613C777 -E47A60B1EBB29D3D1C695950C365E0C3F13994ACA6F79C812D3DF88576EBB0EA -C49A0C4C94A4B28CC6445A4E2ED8D7880D1FD473E2A62AF441633CD7B880DDB8 -22A0F54F963F56A38CC334337ADB163F5810DB8B478D432B99864DBFFFCD9CF8 -4764661D1EC2090EAE1A05590C2C48C7851829738234FB4C8E36415369E85719 -EEE6347675672DE97992B294BF1E501046FC1BF0EF48B746EA2BD8C277C21773 -406D0821424F52F967755A2CD99883EDD26F4A2F83138CDE1A9DFC3D85580E60 -350CDB143E479976D252AF123C9D03A7B3068641C950B90AFB26A9625F1909F2 -700C5113CB19AD7556BD54EB9BE6DFBBF4F4926C193802B6F61847271661D56F -A4DD2537BFB0E5274CF71C0B159BC2A624BA9EF265FB55BC2806B5A91DD33F1C -A6D98BB3B5390051B750383B707B2AA6D6DF26FBC1959A3438E3687E75E29376 -31FA652F12748C3B49B43C1FEBBD00687ADDBEBECDCEBC0DC1A940ABB1FB3F32 -2D46DB5455F3204FD1AE17273DDB24E6DB85417184C9935937332BDB8F115E08 -E8F54891CD1D64C94951541C296AC30DF00CAB27FFBB3CCE8402DF81F9CEA1FD -6E04991D688114D018023694668911E06B29E020FEA094577DAC47F10ADCE816 -899B93115B1AE91BF47129A7AA5CB9C11654386EF9819B666CFDA0773A19BD32 -E2EA8E225747899DDBF6A10411AE29447CE9426971CCE0A5BFF7B0F3B1885B41 -4887CD11240ABF1F9F390AE922C049040C5C7CAFEB76BB0C1833C68D5AA59193 -D484643C90248AF23C0CC645045BD0CFE07A8FCF4F6CF643E5EAF566AFA702C3 -8FD22DE496E04AB1C4234AE5B7B7088B92D2AD2AACBB8D1F21D896AC099E3A80 -CFD75DE424F8AADF45D1FD52D240384A469209A5AFBD4EB47F6F391C5DBFB7E9 -36D6C9B923B43458474D510E4FC8F206353ED27101F9C5AD395FC7184782E80C -0EF532C0AFC326D49A5A363E4A271AD388529B1B3A0DA25E27E116F282D87ABF -320BC51CBEABF7B580F41EBE8F35B6C6D04D0A8ED6384B8217175DEDA617FF41 -E7EFC2C4DD7EE978E45495656C39614F9C129A75B0A8DC6A801BCFE9AF5809D7 -607DFB1563B49A2EC7FBAE0CADDEBD561E1E6C5143A22DF0DE9DAB834B095D70 -532852C47336F8DB56747ADE28315C5877E7B25CE4B3F9EB3B6659EEB0875A8A -D78C8240BAEABE84B14ECB5C927B3EED837A9A6C105EA0C3ADF011474DB3ACB9 -2C5106FCC4CECD37AE11669188B553B8D19BF69896DE8F8974A73798B900C2F9 -BB6A1529ADBAD84A77EC86D7E1EE235586F54B6B6E12DA0432E4E6B15F9EAA58 -54ACEA0F332CB4BB133218B9A1EA0982FB1E8C2060EBAD881D8E0E89CDD8F1EF -9A2B346D99DDA2347402F60638211263BE2EC6EBBFF8286E9DE03C7044CA2664 -C843692695475D60D325C46D8E6263125B70572D5B6CE75A6D55E7F02E746581 -5210E04537B45EC6B3D356AE83E64DA24942633EC35EEFB29AD01520956A34A8 -5F188CC020C5B5D8809403F3AC9AC67D1FA1919843CFD83A8990E89E45A07658 -F06D8B34392C44DDA5109A0BDFF6038A421223B0DE8604A188B40CC0236FF76F -213BC77372514FA46B833231057BBFE73A2C60DF37E592FB8387B62150E089FB -83BE288AECD13F6B9E4AFAB9860BCFC54F567DB1A3A992296FA72F9F7CF1236E -CD4A8350FA3718C056786536C9585F8EDF06BC8B228C684452513CBF13FA5AB0 -6555D628BC5DC83C5EFB9D4E3843618EC8A1C2C80EDED76CF2162779BCD9E9B6 -AAF63DB3797294EAC1D1CFA70034CF6504EE792D4AEB0D268B31A09B12D39BBD -B0411CEFC45CEFEE106C10865CB7AE7B1786F39C0BB93AF3FDA169E556CE3010 -E46EB2F6EA196A0C91EEE784D372D9EEFAA4A4E29ED940E97D1FD4796315FE4E -5DBA57EC20895C32F37DA3327128C242FD357F68AE8C17C599BEAC615EC07268 -78D4E2179600E0672EE605787520E8B370567658078A379CF6437A7D2D6684B7 -9B9B155D30897740E4696E90C5C4734115153849F10D21B5D031CA61F1BA5B30 -C22DFC777CC5D5056B5FDDCCEB66EF1D37916398FB231079281D8BC778640A0D -417BF9DD81E8D1DD6FFBD06AC6F7196D12F71D3E34BB9251EF2A4AFE4FA321D6 -F6227A4EB3660AA19D3F96DCFF1C0FEA659FB7DE881C15F7C65B76CAB9194B56 -BD1AA0A2AEABE2B5CCF260D74926831663A9165F95C178DE64153FE87C323C44 -692970FC8EB7ADB1FF6D3D4932C7D17D000B42BB579D1EB057C63894567C9896 -38A37897AA765949AED2BAD425F4F68C51E3E1AF0CB1CB0CC3F0CBDD72EDE2ED -E50226E68EC8FB46BBC06BFF263813FA7B6E564DDE31DC482031B19180ED957C -B68B6CD679326C478D5D9A9DB92B19CB2C662679D6B692643D81760589B7C211 -A71F69228B4A6EF80AA4D3C816525E1B589A15F825653201A8230C66DE7EF8A2 -33B3DEA5465FACEF0757469521C59FA932955A321AFB159DC42DF603BB449F19 -BE418B859D45F9FEC1B218465D6850E8F95F1DCE44708225CE2893DABA8F651B -FAED8FCB4142D9BABF7FB71CA8B8C42B51F8BC79F5DF0BD56868C44624A6243C -532EC4412C580ADE86D74377466C7CA13E6EF1BE45805791DC8C25D7B6FC32B9 -2021C842497995F60B67309CC132DE74EC422D7CBA71A1D0DFDC772353F08E73 -D333B1148D2ABEB2881D8FBE18A49476566F61593DE423E11AF90909B949D3B1 -0DFA96D77CBC1CC3330920AAC7CE2DA6456DFD8D0510981AA923C399FC3DEC55 -2CCC5CB34C81D21B8C6E78E529B6979AD17547B164C1D1D756DE7C9170A44396 -B5183E2F47B265EC4F5CBDC9C3EA2D68198772053DE5FD985B4B9912399F6A81 -C4C37724FA73FFAEDBAE3F31BCD6269FCB4E3CBEE214E9D46BF1ED0FD38BB385 -72225D7CA6476A2EA62B9E5780FC5AC3DF591F56261EFEBF59B567D0A9C81B76 -D88869088CA4C1AAD0DE77ECD53461B5B370F93558290AE7FD5563D16402ACFB -A635A73EC6AFECB0F10F0F67AF7039B3F8E2DC7A03B7F3C50FF6C3CA4DDA95BC -7416FFCC10A615B1FD4252DB7DA19833DAB0C79F4992DB442F2A1E20A16B412A -211CE3661D04FA5E6C9BAE3437B7E0DA579B176E1CD6B5888BB4ED30B66C651A -91EC753E6E672847FDB5F3273E55371B247F38C3F863B8391C7E6731C25A10BA -E939C248D83D5466BBB7B868EC3B49DFE4904A796D26C0D0EDBF49BF0627BE51 -DCAB5D752D318EA1484DED9C7E50FE4C5F89F3A39DED4C781A17501FB5159314 -D26E72AC51F03DCE4A1534233A0FBE2F18E9E812D57323A7D463BC4394A721EB -F4A7AFBF4127A3EDCB31BCCABF8B6E38553116FC15FDF323A7899AFCC3C61A31 -38E292BCFCA7833723239CDED4C31F8AD1E91B1A46D51D7480834CB6BA824EAF -F468B832C6F59254C144FE56978D68A00C4D9D4FB1BE356543EDB9F71EFF7297 -D689EDC87A558463A913D176881552360C5322BB70698F8825D40790811DFC07 -CBC54AECCE432A0F97A63E71414964B10F330AAF531DA36B0E70364066EDC970 -A52637EBD8FCA59AFF1744F5B46AE79FCC86E31BA883012AF7033ECB43C8CF2F -474887951DE88E3288936F9CB63ECCD381F906644CD4036D3EE056A6E26D52BE -C23C2102AFFB461943D393967EAF80E1422E51478448C211A0D62AA97A686DE9 -6B21CC05DA1CE1392FC7C22FFC4CAB08C60CAD17F8DAF5B360F2CBC2F1611A62 -E704671388B7B5B8DC1405B3239085C2DA2944401276904B000D46A5808087FE -3B7EB5AB33B934AC0E871117F8F9AD77F9D4C3C9ADC104BF7E6B53EFC37BCAD5 -7B73A3BC2102FFA686E1EB8C784654EB18C7AA971E30CFD598B54BF11E1574A4 -5A6E3C7EDC4B000EB802A90F9F2B8A9E3CB1476382542E8BE4745EEDED3CC1F9 -2E757983F8837517D46350DB7B463E0AF5EC62D99F161E2E6E2D5D31C9A67474 -0C33287741672DA6D25E4D12569BB09A57D05D77C4507A36BA534833046D5A58 -88DE60F1E3B475BF6645565FEA080C918E67AFBAF673B83A89C866954B2709C0 -98D93B44FF3379952A5C3E4F063D3E2EA07F67B2B5BF9F7202F4AB2DA5543DEF -0429F61E4939CB9C41B86099F8EF62F5E80FE38139E9A75F9EF4B946F775CBAA -D31654675CD0EA94A63803B27B72911E164560D5939111A1D1B579F80509F8F3 -A3A591E530F12741FA5C4673BF894005FB893C2D725CCDA3EC41429383A4D6E3 -0E69E7DD7EE8481E237F5C3B3C2EBB29165A7B672C8D9740E07F10FD04479236 -E6E61691A73374537DFC2DE078BA3F4692D06FB08EF2493633510914649EEF10 -B6DF07297D1C28BABFFBDAC287F83D9CDD071831E1688FE2A62D654463C3BF1C -574EBCB7CDBAAFBFF43932F944D130FFFD11C37488E452D616E745D1F4AFC58C -5417AF552DBAC64147F87AA28A04F8C1A3762DE1E9ABE6CA61AD64547C637D68 -0A954DA58CD646586933FD73C59B124CE7DC09A32289E13ECDF617084B05BBCF -8ABCA791092C9D2AAA654B40C9F3D3101A47B7EA53FD3D3ABA444ACDAD67F9D7 -2F6CEFF3F06C5436E0D541A145DCD80E0DB56D966C563A2CAC59D7B64AD40E0E -8BDB2952F66A77C6C2B2F59F59E5546B67F9753EB7ECF59099412A91A5E02DE7 -B42D80C851690AAEAF4ADA1785BCDC63DF7A857C1DF503315BCB9A48FBED6624 -C04373553329C2E2D7EDA7FDD877EEC15EB9CB4C32BFB2AAB37187E6F7D91554 -2BB4036E3510176A4CFEC4A6ED7AC037618D0B02F7E4E61862A5D8C89CF7B69B -3CAC808DB6F582887113DE7E70B0A833831A6250348F19493BA4619D4E9AD23B -356FA36E0576441BBA4ECE8E15F5C4AFCA524FF9F884CA6F22D0E8457EC0D7B2 -89B16700323B125633B5E78762293B5FBF0A3783069568099377CE17A2671292 -FE5C91CCAC9308C94266820944001038809ED5CA1B80C1C5E5FC35014F7CE5B3 -94E5C4C513DB75BCC1D616A3C952DE3370FEC7EA89AF705A1E035370E3695233 -F2AC4D0117290BCC7C63D930187290BF470C9D33C980F62A79862F5B722A8DD8 -5744A2271E7D2D5547E0685E046AE1B99FBFD83FAC7EEBB576FEA7A823FD665E -FC5FE7C997AD1C6149B8494C9F508A1F29E64E8C636A0B570650425D4CC6F803 -5E8060B89ED4171442ABB578BC9F7DB9F768F110BF55B63AE8B1561650B6F11F -974D2E2E2CA973C2599835523278ACE31B11CB208AB1BBFC342C653266768B1F -F11C9D18A3125F364237560ECAF6918C66AAB987B0028C4AE5FE72225755269D -A2A5C843B134E7602AAC47A5BC6881C111F4895CB6314F12AE0051B426FE1F4B -2F6916CC6645CE8E4A636BCDED8F542679842582DAA3C10E7FE83018C84BF6CE -7728F9FF32D39397C4B73BBD6EE5D9D13BAD2BE727A5FB89654767010A8E6380 -959601231774B9371798797E1AE5AEEB8EABC2BC9033BFA440A6895E090321BB -2B02349DE3178B6A6EF649644C6DD4B5942881F6A35FA2D71081028F1D504AAB -123ADBA4F0A59E8CAE2565A62E21C13464FCBB0DE37957F3EC66332DFB2BF4BF -943BD3280E406863C8BE266023959B99C969C2C2423C9F7D814B82D56635761D -3E026A163E3BB32C0A97505B9A87CDF5D08EE112C00BE377E170618E59897378 -A2026BC33EEEAF1F902194F17837E6D14273C1B23A97D080C26419F5E68F8378 -BA223CC1B29A0E488F21C47462EE2ECCEDDC58D4D6229CBFD7999F8552B21B07 -26592F5D4BCE67F427F54DF72C87DADEB1EAD4684319EA39BDECB65EFD9C67C5 -EFFC1C9171B05354BC769B4E0609E10884735700D01D3421295D75D4DE190D83 -90BC3F9EE03E97BF8FD273B50D3185BEF5B0EB32506F51335D8D555872182830 -1213403560F935CBF17B30B53A5B3F422F770CF3E0AA964B900635519F486A2D -41EC65C342EC235F9DAAB07AB10D7B0A15A231538FD107651A4964B913E77C8D -BF49CFDCF4CAAE0B2E3EE0EB06792C600811EE8890DFD01598B272FC8E6686C4 -FC425EE1519C372D02B0BBD58647D5E39E243AAF08D90F8092A424E2167F7BDD -45A95EA8E04E1B966429027E6467416C98C89F16F23EE1CD6D5DD6856927E845 -20FEA2128528DBF01966CC8DB433C9FE3E0E9EB13F23896F84E369A9AF0E80FE -D193C40C072D71D85045E7FEF3913094D71B84C8304154199B7FC2C7F278CCAD -899A3107F56687C26A9F60557ECB4791CA4CE7CB6D7F6422AA1EA6C67C2D57AD -2F09B3BEF09D36187650743D8A6A0FF16E88CE09728EC77EA0507EC8817AF105 -6399158B4C7AB6DDF3505A20880483579CCC027218CAC36E5AB7C4EF83743A03 -EC38E97E4C4FDF1B35D8548274DF1713E509BAD45BE78A49DC41D9341AE68D3F -D9C5720ADB1D7077223F85E73B7EA8A18EE0A44856906C89842A0E734EE7D3F7 -5C7E6FF3524DAD3EAB6060F37CA8DFDDAA9D7B248F3ED84D4AC20D3D7D23496C -61C7A315752E2906B0CFFD0E70D1328DFFC890CB6D77A9D8EF8C205E3E52613F -08845C54EB98AE98FA5B7099211542FA54CC5D6F75FE3DED541B7565C656126A -68CAD216C1A3FA9E8F72DEE7FA7C5AD5136044BB161023C701B55F483BC8155E -7DAD9D13C9ECB613CB6D2EE48C0FDAB9FD2610B7B32D13B27E023A5975C776DC -265DD695BED2DB7F63390B6E17810C6C84CC11748E49ECE00AB18896726E9C1C -2BE9ADFD635FFED6FD9E3A319DD43560DA9614F896D762062C1E29A8408B1642 -C5FF316F6F919335C06369D9C4A83EA7AF7C30BBF5126760647DD964516E1BA8 -E24EF01EB04F20764837F7F5A7FCCED77389848E276F71F05DF88C655AF17437 -774B95174BD8D8B77064B87B9FAAFC461331EF0558F3B48E2004C5541ADA5A99 -A8C27FD3A67B18E8EA02CB2C28ED4CA3ACE3F456B509590BFE9F74F73C5CF180 -4323C1255EC01A6D90C5F25804E066B4497843CE0954133D363BC2B224549568 -1660734AAF2F36F4310DF330BDFBBC7D8A49773481CB4C9E220D86F33A07253A -114D59D15851E63826920182939AC067D72A3AC13A279460F7C45AC519C8D413 -C8FEEF16ED896E8DAFC0AAFA8531324315A736793F0C6BEE37E9F856EA90375B -00BEEFD6FD020C5C867950B8EE72FB0313B52D405817C4DABA49C44687FE6C7F -8CB2D791B8268E8E6E84F7444A2D5611D96FE06C8D26A200EA644D7112BAAB4B -2113F0B88EAC26D30E928CE19F1C0540F0A0D1B86B610A34494231FF64939F1D -774BB1331A19BD8362EFDA7871B334F20E3421D7A36B38DE952F20E98D74028D -5D076873146910CE272F9C22072AC3FDD68B4FADD7EF802375FFD8493AA5C52B -54BD781D1B8252655F51942526D1415340CD45F9BF03ECB5F04B645879D617CA -62E9B669DF2B2D6601AEA8F4207C0A5C0037EE3803F809BB12AD45D4889CA54A -D60C06FA1577B206CADE0FF82A43D64F4640A98153E8518EDF8835116D21A87C -F2406FD91D70F27315FF9479BC139C41ECB02408417E82A50A7A369D739EE1E7 -92524E23CA98C9706FC6007C2602B526AD5D4999C58A45BFEBA601FDE6746BA9 -BD6911DFCDACA9CB5A7E98EC1CC3B5BEEA50D99C33A514BA7AE8760AC054EE49 -5AF381DF0DDE1407A875F507E0A251BBB4929F987DE13245A0694FE20A77FC44 -18854A70B761B234ED078EF1E01C4AF65B426D4B8B5D0B677BD02C178FD0D9D7 -3D637D18ED510C81DF887CFE1B5179168ADF2A9FC4BC2CA5704543DED74765DF -6980462F7ED8A555C59242F229689CE69CF6C02BEC7CAFD901DE76BAD3567349 -A91478177B804F1D1269E60D86154B7FDF152EF501961ABFF65752E91292B0D2 -1C16AD00A93162653338A34A851F64A843E265EBE373858298931361B79B6DA2 -DBD8BC513A6B2BB1EB207261B54047F34412C059DE05C6A2EA8971424BB0AA06 -84AD5E495A41CF9F11A844D22A805385B27FCD507DB9B5B9834EC15C047F462B -63B44D99D7CF3A744E6528D738A3D42AE696191B6B6EEC3389748058ABB8A3B0 -B161E749539CA01169A39B16101EE2EBAD18F62D7D936D2979BF49B92ED08268 -A774B4121EA592263B367F3FCB7B89B35F72DFC85F85193B8EF32EB07DF86FD3 -6E3E8DF750C199322010950F09F9A3626121DF00EEEFE761C19E05416AB28916 -49570B7B77705906630E72BD5C12C99B68C09C00C43837F4CFA8715EDB4128C5 -7267F3FF652C858E3D2A8349B332E3BC2BC3B2F82D4B05EC0E5520B2D7235105 -51EFA9BC01C096A492130ECBCF21389E5BF1D2DD2F51245E47CE04E684A0ECB5 -3C517EF74789773889DCF605DC459E9DB154C3E171E2CB28B171C8A251595F8C -89EDDE44A82C9F6349D51418DA47347DE4C2D8D58FE770574B409A4389293E60 -6E5AD82E2AF14DFF39A7332F5089FB957CAAAB4EE0DEC0C49E1F60CBAC617445 -F22E290834D513B248653D348E0F735BA046895452B2E091259E615C45FB18BE -B00B5B8DE4AA1AF2025EF1FFB46AF12DA219772D7FA2D2D9DA29860B5C0B5C0B -F87D104C167DCE484E1834CCAB2068722B51AA1C287DA9BB041C3FB12329422F -B3B4D3413946FC5686F9A3C028F23305DAAE24901649B535D3A1D24A140CC6F1 -A098963ECC6D302BA9501B4D9CD0AC35D30B33051B190691253C7C82C43ACDD1 -9CC5A439590BBB934FB917A135EAD27EE431A2CCD999062AA58D70289E60C04C -99083B7F7CEE37370AE49C85342882348661B1344790E6B15A26DE133342AE03 -140C5A9D17C96AFEA55747425D19AF523A42AF250FA448CD3E1ABC318A95269F -07F72C14C466E0D2A1EA73262FCDDC95BF64E1904CB1DBCF751C748AE8BF7332 -F99ED128E60D4562A163FEA253F955CF0E61020B03AABCADF923972C8696B9E5 -5965A516773909AE218CE76507E734E5DCCD2CDE4478D956319FD66AEC8C15BC -E421B166D663A1D143DCC8FAFD843D60DFF89D32D9D4AB29061C3E8E7E1FD89E -065EC49781D209B5619ECC2C0A9B0F155E56DB3DBA50B847B0CA06587B4AEA20 -DF3F6E220EA5843DFC65600398989EAD4F6632B923C583D0FD4D57E9723D42D6 -420D9189DF6064E2F7CD8FF0AA59375DC4E1395787AF03FCFFD59FDFCEF452FF -43E28A9490EF824BF80D471F2C5093885AA41DC863EF777730D074559739BB43 -EB84C8CED352384410B018842B453599909EE6CEAE259C96685BB1E5C08B7968 -82A00BCB0C6BFD57170F1DA7EF8FD41097C8BFE09AC3EEF9FBDD8DCC52E71157 -7B3996B93612F4B65FE0B7CEDB5F9EE91E77D7AAA3A3C8E6DFE4AEE3BAD2BA65 -A3786CF3EC4A3DBEA0BFDE3ABA62DE428E032B3B7471BD6CADFA8189FC2D52F9 -21628DE7E96AD5AB9F57ACC77F9B73A9F762E8D1E492BF92D42CFD210F7B3F04 -691F02C13AEDF69B0DDBDC417B3A12B292A8B41CB22D53AC02189DCD5D7142DE -CB7568FD3584F6E1F134FE9251056E4B8FFCF06856B9E30DA50EAE765348F39E -4F6EE206B73B4F399244AD997F7AE0867C78126F070E000859364B690E72D492 -CE00035F9F8341C61F220F27A29F73776F542C939445405CC670AD753248343E -12AE1A2016E87A8861F05B7ED2FF65AB2E823C8D8FCBB3B65E0E24864D97B79F -A94B489CB32EA91176D5C3D170F7DEAC36317AF5800B5BB0DE38D38FBDD75D71 -B2C45D2AEF29EE2F1F55E2C7BCBBEF114F801A4A8F340E3159EF67CF966520C2 -6FCDD2316112BA45E96544A86D3BA064E674ECF9FC71CEBEC0678A85B1229CEA -6A174D115B6E834F74DC0E21BB0FE151482CED2A5E037ACD1262AA3979FA4604 -CF5C2E68C657967B3CDCA1AD9F7AF8E839639320D24FE4C8FF25F4F8CD459967 -E154862952058FE33E16357E2C204297AC81488E33B76DF2D4F93B1FB8CAB223 -B998577B7FC6C8B4AD8B5321AECCA360E98D2E163C3E4DBB01B7F8E02B413A50 -2EC8D14480849B85FC391009C961E2CBB0820A2DDEE153A29B727A4547EF7A4D -40310A9CF65D49D68860D5161A5F4F32A746F8A4FAC234EC6C515608012D6AD8 -812279D4364864582CB04D0DB04D7B80F2B43ED41B46DDAD763AFCAD08B10DA7 -4A1BB1280D22A2E538FC8C764AF934494FE22AEBE6845D20A626BC4F9B0F93A1 -BF02AAC68090AEF9462D1E1517B0898B7607FA866104A60B652A7A2CFB9D4626 -1108C550D6BDA61800E63BA5EC8E7035F1D1CD66402686B231AA87C0B54399F4 -A67BE1C656004E34D74031C046CB57B35F3C32AAC4CB9F7757CB35C6C7204960 -975430B63BA2DD5B951EFED5A1DD645BA4BDBA778FD5231807A42E505D73277A -7C0877821D82F14E064A16474B1D21914EFCF4CBB9A1F4B34E58E98334A0B732 -430CEAA87636705F6CB0AC748AC6EF54CB42C31BC2E9D8458D467E13A6BE6F6B -F37777185D70689D4AA63590FE4CDD91031F647CED0B09FAA741FD90D7C82A8D -5CC25897C73BFFA5D1BF67D768563A3627389FE841D286681FD2B507AF80B948 -1FA3F25EFF61C42E1E59FDA3C6A0F5BAD5C23F2470695660BF2D218F3EAB741A -C0E0326D88691A2BE6715A739DAA2F410F51C9FFF10FA140F18DF3BBEEBAF0DB -0BDFF699A8FB134DCD17E9E9B60AB3A7B58FD570957DEFD4854C2463A823B795 -2BEBDD075982332BE20C7755907C977C9B5C1E50D824748643748BB8B03EE518 -1DE1AF9DD73D9D40B855C8FF3501092E810A47FC25110B1B8B2DA25D6CDF034D -1EF0628227C433E48BD5FC7066D091238228AA83342B306C3691BFD16F2A89AD -9195347B3E5F51F07665D634933A348656C5C563E7843EA3EB7B6897A722BFD1 -14EA5CCFF297471F14486BEB20C5B086FBBC3839EA6929F640A249CB4A1AB38C -45E76617102B4AC6C0A60701EA17B23C5452C03BC49B03592D9C389B41489B10 -A0956B893D7402EEC055A93CD60B0A91B369022281D996ABB7F9530F520A8439 -C76F2A1BE71639DEC7545C8E37C75D43B35E7BA53D52736A5D5B6231D795D8B0 -66A9A7E2F296CDE2E11A95C7BCA510FE3F3DA0B8F4F312C5D50549DCA50CDD19 -B6ED0F3D9B9266706A430EE505535217D0F4C19736A235BD242B044706B17831 -A4E8A51490796F045104BAFAC97ED33961535B48FE7642FC3A05DBD1196112B5 -00EBA4C56C3E0311E4104E50BDFAF7C98B8FE0BB6EBFAB065CBDF71CB3507ED7 -44AB743713804C00A5CD6B1DF6F3AC3E971937087C9E1B82EFDFCB905ED833E2 -A2ECC8E08775EB081C5D16C3B5CC5B25312AA0680FDB74F95B5B98A56D34DCF2 -7B04A3DACB5DAA21E17F8C13F2B358901AB91C13EA4EFC19EE44A06C38AE7091 -7C1EDB90B538E092A4B41F1308E6DE5769FCE25E6B9FFCE0426119D868C3B814 -3484F31941231BD94FEF454F62A56D08F5D319303B2A612AD68032FE7596CFB6 -916B5BCA3EEF33966B845F3F2D5F0BF6832DB5073FE3808BA5F1D9812091E226 -FC2F3F7F56DBD04BA14D06B1E3C77B7A1F9D9B3E81FE843AA08C650A5A7EA77C -D9DDFFDFD4D0992A32915E8F162D52127248889882AAB06495D56780BA3CB143 -0A7D0D416A8B8B408E9C93EBEB2AD23FA486CAA8AF348755111532CBBA15DB40 -02E102A3D1E979190F4506447BB063CCD7862C3E842E42C3FAC628A8D283B193 -DCF1B4B5E5F9A8FE229970123CD899ECE471C1AE20CAE796D638F38180493347 -C06E62879492306E400F6643D5E4C05846342436B01287D915CFEC221881B6AB -135B07C2066C33BB01AA8F6FA3E08747D5705F44C1367BA01BF0882B4128F5D5 -B3D3DEB47BB78E6FA654E56E66BB882EA194DC224F5F156A9AF7B30EA87FB116 -D6806A6A302012E9927D05D4F72E49DF7FCD76D26565DE03B0A2353467BD1E11 -0749F05760AF2FFBC3471E37DC0777E349A5D843B6B2979DC8F9C069A48D7506 -16502F58D9152C391ACBADF638ADB08809F71C647A6C3A2C8326E014215F0288 -D98C51D5875E0EC2C7784FC48B3D5BB5FEAFBF4D6099B903C034300AE4D78E64 -A2ED79053D3E95F08F5FB761C494ECD5E2EC943D8F38086F2D16DD9736D3DB93 -E4EF811A1506AE38F13A9BF5FCEE9F240C9FB139638305C0CDA53F3C42D98A89 -A0EC3B17FDA0FCD8AA28E1555736755EC5B9667E69B1F493CB5130C82B70E70E -DE8B948F17B04E6B860D2C2744B29F6053F0E938E23CD2CB3049CE97430D6F77 -2C918E7CC58237CDC43B5B4BB714CCEA475DF58E87520EF3072AC90FC2A4E310 -C7D5F6AA831D3804E44237E08C318286A4947E603765E7D1E32F584F943BE06E -64726A02131E416B04F0D33E0825F0FBC6D7B1A5BD6D2916D098A0F977D29ECD -B2A6296FA4C182C24FA4356488E81E4144A5A1D40ED97BDE6235BAB6F3CC1318 -36B9B94DFD0C47C3341CD622F4F4DBF5EE98EB43BF107D59C005745FBAC7CF34 -8442F5A76B632CBBBC1CBCEF59B5B99C0F3981378DEC3289211094A4F4D3FA0D -EEE94BDD5707EF4A94776766C76C85E9D984422D4282002D9CCC760339219864 -BCC23DD9E624B3360CA714A9B7270AC4A6F7CDA7BAC441C684D29D29DCB8A761 -634AC269C6809F99B73534AD2BA27210107E49F65DBBCF22E31F828FB0194BCD -5D4FECE626925475B43DE7B346AF10893DCDCD9C13DC9111506FB5E8B41A69EE -3BE7815105A6FEB8DA8C6D7BE2ECD49B7F315C66D212C4400AD81426EEE1C5F0 -193CE191E871D4F9F578518E372033B8121869EE7F874F3513BF81D28B7D660B -B1C59B638E677ACB4CAF561EEE077ADB0CF64E8CEA0930FB294E031C0BA973C6 -903DDF3F33D4E18D0C55CD89FC109E72AE5CBC86C37EF512966DAD266676F8F2 -6198752E232C6F3241BAC082DA14A68FC89CCA1C3C0422D19BD2054D3B91E60F -51AB90BF2317562A4ABCE1C96165F1DDAAFE73BDFF939C327550BBBB5B0FF5A7 -3EED7D777E48E7D337FEC7836A7757343A3C3781E99179C654345940CD55BCC3 -681906BD573C7A47ABC7E334899CFA8090CFF0104B88F74107027CD6412C6183 -2AF6851F048280DDF8BE1A2DA8DBC1F7634ED64C3EF0F1A94E27BB3A3E137BC6 -F4211E62F774070DDD96156815653BDE961D5303A16F67AC4AA7E66477973A84 -C6AED52AB10A57E95DAD8F212E5E25BBF0B45CF4721450894F67A01FBCB498FF -BA5AD16FB1521E3FFEB53E8FE8B2174C76B780DF8D0B1B8B9B3EC6FA9B6AABA4 -8530493A92A904030845A5158D6B3A8247773BF93CE1D59D793575EB912FF49C -13E0FB588DD61D093D3E50EE934563FF44E26728406864C4C955E58756D217A4 -B9506576819E76B74493C7D5EF4448673504D81E0CB23F039BA9F048073C5FA0 -3A47C5B314F1AECE21F8EB9D77BD9DBE49A2B505DDA54C1B787FCC1B302DC9AD -3DC9A2822107BB6023F259B3D44F1269EA5A57C457DBAB824EA2F93B046B797E -4C82F7EBBF47A4E69072D735955576F17F7D3B5AEC2A420C347CED162D7C734F -3B0FA59774B5266387C5CECC7B5D856059C195869ED7C0CCB66DD20E8F70E875 -BF607899DFE6E1A2858380317E49BFCC0F331A75B12D646CFEDAA09CC28EA30E -1BB70F720539A60C9348366D9EA597EC52DC4169A8505565FFFAD2D372FA6F3D -CCFFB10831010C190EF3248898750D45BEFB7B444727F6B45B61F1D10BCCF6AE -6190105A1B427D3754DD9A4B42BA65F82A85D0A0739693F52B01B7D1FDDF38CC -5FD09CC00C42529D96579810BF9E5B6ADBB96B8C907E29D662530E2D67BA8924 -C68204FEAF80B1252084E657C7E7C836C65CDDB909B91B9E52E33FD14670C6C2 -B6316D2BF298DA1BF4E6BA9BC2D50ECBAEC0B15FEA65ADA070DA8FCFF3F7C329 -8CBC3B100307FBCE9EBD2105B663A86AC14CA64DD7DF46240F597C693E0E79AD -C2C6B46AB8966B0500F46167C881A88B9F8943CED18762CE708D053EFF9A1837 -8A542C548ECA7FD8266AF696DBE4823DE65A7381EDB5CEB5338027881A29A340 -2C655936D1FACFBDE4792101E1A2F758CC2DA582DB3E8520AB299EAB77CC0E5B -5A3F84F0FFFBE93A35D8D903C14D0CDFD9D592AD188FCA5ED5CC7C9F5A94929B -50CA7CA7EA2B3ADE408FD05AEB7BF322A694DA53831DDAF8299196822D2FC0A6 -91B95D4A3D9C46C36DF6E80B80D6C2982B73DA7D790477083E312EAD31D59AB7 -D172BD52AC99925EE781493D6DF86F174BB6BCB1A79559AB6BBF6B6ED1A3A85D -53BFCB6E7BC7BCE12042DF6071575DFB96CA21FE03C3A9C7BF9B6D48FFBF59BB -83286F95D40151BAB0A20EDFE224BE0915ECBC400A0F11E9B7C1BC22C71EAAAE -962B4E1BB8AF0E7365683A89BFE403880621422684A8A5CC63F6243DC4A1BE18 -E59F1184C6B8BC943282FC3EB1B099A47B3A8F5862F1B159DDFA05A046DD4311 -276D76A13E9E308C28C19A9BF5D6F4DF18DA369A8E9B18A32CF3838B641D8A73 -2421B397BBBF80BF80A197353D0CDFDF324FC2E34143D2C1D5EB6F91DE906A26 -0D11990A96F29B7F3C7735D5F8B9433AF21E8D84C5D7593FDDCABFC6D024640E -8CC8A1B3F9B05E68797064D6F9D163246E6BA5A5198170406640001BE0C441F6 -656F6A2FC0EBF17E7324FE428EA430B6885A8F100D6C1EA6EA3BBC865DC7DAA4 -FD9FB6B6EFBDC86FCDA11FA62C2E76826BBF896846B90F99F58B3AF125F9DC42 -A7036347DECF0693A058EF45535278B7FB440A07E32DA0C52A0C8F2E8EDDDB88 -E6E97458F2FAC03A7D01873E37B3DE6E6A1125AC5BEF387EC2E9BE91246C530D -E52F13CBF94C67FCFE5DE8E0CDF959ED6CF65F327C08A915572FCBB9AB6A732B -289E2CC770A642021106AE8103B28A45FA062E84F1395D51EEFED2D0C2143DC9 -939EB6D57233AA4AE24B347373FF4C285749DC66FC225FBDB3AAF247AD1AED2A -02CCA1391191DA629B0CCAC3EE434B12ED69DCB05A96ABF32A44BE6C9CEA1FBA -CEF2FBCD765BAD4C53929015D381B8562E91AAB72EEEBC4E741353964D003DAC -FDA6F739D211209B40776889B8F208336F24FC402F27A8AAD6C45A5182B1FECC -EE2BADFDF613DB925307006771088CCEBAF0805924FB298BFA9A5AF06D28D347 -8181EF23DE09F8D8E1C8023988F957A740E5A7586C7DF06995D9820F82A8B44A -B8D484561A558B896AF8B5D8C3FADE04B2D6D8D11467CCD869B9C6E8EEF793C2 -0529818E6742AD8B226374B4FE146219BEFD5A13E0C7F1A461A8123CFFE79166 -2EE95CBD7F0B29918DAE04E030A1BFFE6BAC8F5F0C3B9407C4B611CDEFFC9E01 -3BF0B6F50922900C431A0AFB51B32F6A2B814E03A17EDE45B3E33A0E1C2FAD2E -68AE579E8F303E755C62DDC7E417094DA352935AEADD188273BD46E6A9A94CBD -9C522A4197A0B9C40C79CA656396231D9C609C864A21B1697CE532436B6BCA1A -B9370F172FAD0E997286D2806B3521E09E19D9F76311D65FEF941B0DCA969D26 -FF2F6F4E83D52D765D218DEF920D27BB21E270E2E7F31EC1849F641AF0B9FB60 -EBD6794F1023A7676A53E67295D46A75DDF7C240AA05730B045E1587CFBEB501 -BB9C9BBCB8C94A1061013CBAD5ED3F02D180C7886D926181B2E1DC9F3C8E8B6E -FE48EF896AFBEE109300C692D2F94C8A140DB6378D6F294025AACC2E95E9907F -F0AB63D937C1DD9EF1B4CA496E3FE4F329F246A93628923F122C2C7AD0DF86B8 -53653F52D36AA1F67091296FA55B978990565F63B92E7BF7B4B3D043D7F79789 -71CA93A7146A4C5CA9653C92B172FC275F332B07260A573F843B0BB83CC5E5CE -EBA290AE6C7B43F3E5CB10BD84D558D2A5B6ACF1A0974EF20FCC824F5B92746B -D2A517006E707EB44899D4407FDB912BE5F4AF3C4796438331EEA2B09ADDCC96 -F798BCB7749E54F578CF703EB0AD086A6A98E4EDE1118EC76338E3B76A28306E -B1C400DB863A2282988DAD49F337A5BFAE7BBF6E06553DB67F34B3BC115C63BD -5ADE29D5E6770BF0A1CDCDD0637B9F877BD2BB6363062B2D6A01BAED65D5859E -16CE1A4EB86B9998D5D28213EC0E5CB2A297F24250433D61937B607C289DC54D -E9F7FF54BA94E40865A70273C4915BC17D6D934D275BEBDA3BE285E12CEB17B0 -75F6C87759B2E2E47DB0F4A5BA9CDC8673EABBDEFDD2EB781D9121276371656F -795F9BE5528E2F56D7BED80C679F996957AD3606C0B1E1050FF62F6CC35BAFEE -3CDE09668AB4C5F58DD7B68352CACCA2D7CBC3DBBA2B1EC9ABD1AD16A21AD93E -50DA4ABBA9EB945A93CF1C5BAB83C1BC0A1FD2084A42D892B2FD7A9D390CB09E -96610AFC7181DB4D25EDC34FAE3B0A8B54D32AFDCCEA649800DCD263730C2C7B -79EB5117277BA48A4A00806D704C58BE4679C71ED74DD4896A95248B99AC3192 -D01920DA9D284B03D8535DEC11F1A7EEBAB5A209458F0752746E1E80F1096EA9 -B72054460C14CD2DF069CFA77E7A70A366BD3A72CD81F4FC844A386631F2A661 -6C72BD35E2F5568453C1D67287EB4D1F088CE9167B2A9698507CFB51319EB6C5 -2D597A548460FBF527F53D1E43BE94B343F5EE15365D7435EFFBD0FF54D5E9DD -04915AAB6426DE0C749A0221FB8E8BD679B93519B817938F6C92392F89446228 -57F2C33C867E0AD824B78A81EDF0FBA93F89DFF8A8A832603E6CCC5570EF6150 -B4AC37603D0126D485BEF2C6AB59CED890BDE0B6FEEE1E3DF069B7E62139AD5E -85AF3BAE0A35F6F428E02FB819EAB7E07DCEEF52A2DC7AFF5BE9C5440EF61C49 -DCE3422CEFCF26721D73F0BB1D07C4F8D74494B399769273C8F3F8E8CFB811BF -5C52C3B3006963ACF2CF0A240F93D54A62DCC8BBCCB2D9FCD29A2CC515A5C668 -9CC2BF03AE1BDCED18E564CE28BC424D8905F2A495BC2264B19B36CFB9606837 -D5648832EB6D7A3806FEFEBCB37232619AA722D47DD4C182E3496F5FDA769E77 -21F50C61BB6D7EA38412C02767010CB9DDC6DF5403EC5883C345BF6B0E49505D -C74B68373429C894CC8051B9041EA12026C99F162CB5E817DE3DBF79FAA17FE7 -60E803A56FB1B25E425D589F421857C40AC0DB303AF7EA5948986EA9886DDF3A -2EF39DE46E24A789CDAE1292D8DCB35FF1457AF0F8EDD204EE66681FD2E0C120 -566AB747A050363BD7F16A94438FA75B4EEC2B4B7BB6E5F37339398F57767DAB -E217F5FB234595BA5858295B3C17B29EC35C5A9B944C9BBBFD3A1754C95166EE -1CE61F4125D776618CF5F28929D708A1193944992FE9BD0084CB83D7CEC379F2 -35774CFBA88FA0460668292E55B932B806127E9953A21234F3DC2ED273715546 -478B16A332DBA4E9FD4F995BACFE211FFB648572B4628E6683BB1FCA63227184 -6C1E7B0EEC7DBC12D2EC7D3FDE590A0B1925C581AC460F873C2A698E4F95DAE5 -D52A2872D795687D3588DBA4CFB7D9CFF2CDAC190BB7B14C25A05852B03700CC -03BBD5D3EB8108760D942FCF0816C642D0C11471864228D073DC6499E9B6EB9D -8BED6D54FA3EEE8F83D47440F6004A62491027338203F8B8FDE5250BAECF0F88 -CBD9903DD0FCAE0C2FA3848E1FE0BED94BBC52D740C530570142D6849BC55957 -DDFEA6A33695FC5EE51D31582F8D65FB1A5006F87E3C92850815411F9A5BF768 -E78B7CDC680787CA9A418C56B5B51442F3084C1EEFB6F4C1F9584C9ED5FAD5C7 -8C7748480224A4B2F2EAD2D64F6AC26EFACAF1C50D2A052328A56DF2D3522960 -4EDF824D7F9E86318959459EE2501B4D395198562E5C9D53C6FA0F8FE9FF0363 -82197B9B30D56A80A999AA522C1502D2FE6D5DF512704B7FDCB041FEF68C8D9C -B9CEB47B15F8D7B74CF7D2CF328B4F02AFEF1A2EF6BC1A3FCF1677944562C497 -46A10E744D45E0DA7A434CE2611EEC8056D331BA0C1E76ABDFBA1AF15CEE01EC -5D43BE452C090D8BCE86A02B03C9D28F7053523608FB56C7F3C865843B0F301B -2962F17E44EA805DD18DFF5D7B323E733D2F0D47476E0C701CC6CEB3D68E6D73 -4FED816BD6BC3CDFABAD659F39098034A97388B778FD29ECEBAE6E46F944DD3F -F4A5EE2737FF5EF2FC6BFC7AC13FCA18F0534A61F2BCB07FE1F3FF2C0A708F1D -5B478E0BD6E28B98EE9AED665B84AEA01E611D2A9C5CF678130C24E86A8ED000 -BD2B002F06420429DCFB092921512AF879FA9D9EEDC6FB1E83464A48D894AF35 -69968A886433EB620A3B2FE1A2EB577B19384D8503DE590B9389F70A0DDDCCC1 -8AB02CA3B5D0822BB6410F69A35C9159CA848B0F2AC5A3F34531E69AC0CB2EC8 -ABC182E05BBF7E1E3EF0AD8C91BA89FD8D8033071B7FEEB1EE932466A7A03547 -31D03B38DABCFD83F4E6FB7C7698FB11892E86B14542F8CFCBDBBE8231BD83A8 -5D9148E6B2C41D20CBF50ECE4290F33CD551E92A28F7BBC7E2D1B4EB303A4AEA -41D682037B8A1EE6A8146C81FDC857AC9993DAB7E438328EA8CC01B6818CFA4B -24AB35E0A6C4BB1A4AB166064B195F7F92A8461F982F6EC9595B7A1E36E72465 -04D6DA6A97A9168EF5A252A1C1E5CD9E9810299A105F59789304AADE75A4115C -EB2201197CD87FC59E5A601C9B66B816FCDC2B23A062A8EA5693289B5256E9B4 -CDC042F366E3DE8511176D560764E0F92BC5E9A1BA1151A64649FBE4C3CCE03C -0A427E27ABA7AAAC6EE305FB1C1DD6983F026C64CDEE06F57A000682F880283B -AC0F18194953E96429BF6A59999DA5DF128503AAD963F49F61BD14CC82266A77 -A20B25BE10094D9D91B3E149B523B1A503BAB5B4AE619552895B8C632411F496 -865455FA98AD63A7F5CE08D08C212CAC5185AAEAB87823282A500A1B0530D618 -BEE058F8D4ED61BAB4CF56CBE19E66CC0D2F0C5E96DF2B23E1E750F050162EDD -5FF3EA8B4A853C5E74BFC67C3B37E44E5CA5188745E5D18D23245450EED4DE2E -2166A9C74A595E6C7AFED61479929F9860597BC486BAD3557C8A59AD38B1FC17 -59A70D61226D0E83F416F982CA5F8E7AC98D35D4401DD35A288095C220AA2EED -4662643FAA021E474FC11C0A9601C8CB1B597AB9BDBFBDA9AD2FAD662A8CE14A -89481D11C0814475C6972EBD78031F2BBB3A96A3C8436FC7E11A3C35654A914D -E7C83F8B0521B3BFC4A98C87640FC8050A95CC740E01D8769541956D2C91FB4E -3E4F5A45F76183A847F202D7B63478358CBAF452CF47F0CC26F82893300D0F87 -A8C0FF3E1505943ABE4C725516F1E52B47EA3232D3EFD5EC0D5FD06DBCEA8585 -5179CE8810B64978B9353C1AC8739B86CAC020DB9326BF917E63E1B4C9BB41C1 -5C165DBF5BB76E2F2E192874159CC287678C20B8BFAFEB61F621CB8185DEA0DD -C45593CD896AB1E3BBE85A0D0957DF2E49E5BB066C6358FE7DD15D861E031777 -D5AB5336D9026AC2C8C3D041B6025E93E60921508C435699ED0AA29C5443FCB3 -63431F6A0341F4157B1DB8A2199C692E6ED6D3964F552BFAF7A4AF424F1A0F11 -5280159EAD178138A1076F51F7EC5C35E318F9B5789EC2EDB7C788D0A6DC9D2F -4AD61CBC193222A76928509CB73986E377123B4ECC99CA12B6B627F3BBA93276 -C553B701C5F879E4B38568A77012B44AD4514EC0D7603E742C842D329B629B79 -BF38C72A3F14BD08CADFC25D7908E0B1D83715A44AD81368629E51CC75586357 -9B702B7761839FE17D47C63ACC701B266AC345F1AC15F3C30F0F5322E9310054 -EEE5C861E0071CF161E47CE6155A1BDB6D938996F3EB83BA923950FC90FBA41C -9248A881226BA32174F85B488F3E710BB7D2376E371D23BE051EB54E15E22796 -675FF7A2BD540B119C78790E0B8C61FFE7E74E2B18FA0D5A7BAA2BBBE9B969F5 -C0D465E11D8F6CFCD8A4ECD536A7F477C86CE7D6561F3C17C4F70D1F7FF4A66C -E315BB44D8832F9AA0B35974C9B0B741E96B8404DD9C835A476239135463C9D6 -09ACADC65D032E88A9C0FBA78C6FE4F625DF242383FF689322796F9003B66D13 -B9545377F48AC0EEBB187564E66F2A56C04F8B3093B5DED8AD536499A921A231 -765CB71B84DE828F905EB87E3A2B86DA1508A18788825CA0FFC5E1473015686E -A24B2CE92F10A199A71FBFD56110E7FE7B4AC102AE7A03E65E8CDA68489ECD60 -E8251072A2B61EF9523BDA385E64EF7DC05DD37730B7BD4685755C58391EBB3C -91D2E04C0840C80FB77B71B8E28F43BE6C7F54CD3A87EE5F07820F927EAA1BC8 -0BC5C897B56B83906F35857C0528044D4CDFE72EF613BD27EC286CA90883F5EA -B50FEBCC77961B3B7B2A3C95127A697A1BBDE0AD2E485967DA824E46E982E143 -A514888D5FB0DDD91E7D216F6B3D8A92ECBA09B2F1493F520D32B16561603F59 -2A3D4F272BD7E802A871A190944C9329D2FA05F16C278D071B00CB25F3F5005F -053683F8213CAC1AFA299BEE16F2BEA5F9EB512D60295D216F39AC080B2523B5 -2CABB71A1384F1A5915C255464AA7CFD008CDC47DC9A6DA83B65B6A5D121763D -61EDEB73F5D1C7556C66D26DF92F853A665AAC14D074EE1F889A0C21348151E9 -231CC55FAAC46E267C623FB80A647FB7C8EA853B1380C623FCCE40225793D949 -49C0434E4604E86F46686EB9B95C5AB739547AB0238B4AE798AADF5D07B37126 -5858C1EAF561017BD4ADFDCF3BB5ED00381BF1638ED5241D6CCC706667E6A00B -B656856EAF809EFFD856BD53A3FC2710DFB05A0E174AE941A8D60AE698C7DE72 -DC63147A6E9968E8F58357C12FDFE37E3294D210019B402A4C37F21CFEB68ABC -E68D16E0E69BBB3BD3385969AEB2E4E16651659D31BB700A4D19CCB5CFE85E84 -64422D11C64113BD309CF149252FD5C0128AD0E70102B3CEAF21792699B4CEFD -14B8219983F1E03F2139256FE52D837E8CA3A010B683D72D041D8055BCEB3942 -8E26C359BAE9B98B98CE6661F9F03EAC9930F8F26CBD4D35DBF12A828EECD77F -66A2AF677147351D8EE322C049040C5C7CAFCC4374FBE8A8DF601C79830FE6CE -2BCE4A1988C1DC1C063CA77CBCF6DEB93F01516AADB40629040B2BB9762239C9 -BDC49BB22D7DF3E3764CFB26F6AB4E32F60367C229B6ED37B3B69D7DC77CB752 -58B17DACA68EFBF15219F8644A06E87806CA9F98C44707F6CB21E91E1342E3BD -7B2659D95B6273AC59078BE16CBE957D9D6B9C24CA9FE2C3BCFEB0A27034624C -02BA674381EA0C652B6128DCCADCE4EB7069C9E67E96EA3A803F2D0392FD6914 -EA87C90AB51314E25C0CA722D9EEB6063AF0484DD6789D8A6FB1FB6021FFE6D1 -A4F5E64D3D944B44CDEE76F449E3A19ED9DD908F4FF6C1FDEE709526E492876E -68ED03B7D07186AD57D5A39F79D56443236DCA1204B7FCB3C57D0D20070F359C -F4CE4EC541CDBC9C3B3467CE5412371FEF041C5E2F3B0B5C2D020815ABFC26A0 -C2E9389C2B8B44D4C628E69C07712659B261BBE1CC681884F88ADFB3D44AD4B5 -F4CF7CEB5584EE640ABCFC226BAC4DBB478927FA2AC5C2968E4838C380D8B7FD -054DF20862804848359518F189C62752C284867B8CF9A04E332FE1E3FC91864C -76CA71B1FDC80B13654C7D19B68AC039590937B75EDD0863B62D7D8D123277CD -4C97B1366422359DAD7155A816F0E9001DF0D1970A345E4AFAF3DEF28F81C7CE -868ABB2CE5B2C145266A71E05DFC1FF79005D9116AFCF4F4C0ADCBE7B9600E2C -295EAE977AF481DD81D185FE4A9533DEAFB4A95A91F32A00DDD4807D31B834FD -B1CFE04F46368E939AC6F1CEF3472F2207135CC700F053F52407BA73E7987406 -E615265C624084368AC04A3666B290599F630C25FEAACFB0F42585F644631448 -79A839A9E8FDAAADD135345A7A69EBF2BBE571DCBF16D6E47BCF65059F71742C -75D10900D875F2EFD9CB7A1905B63FA05DA0A0413009976A176B83B4A62D2E21 -0D86ADD86C4E2EC9ACCEAF1C5A0A19A1330CAAF6C223359A96DECB2F7CE50870 -647BACD3241D90E8850AB5E8EEB3DF8F9AA8DDD65CE046B7E8B29C3931350463 -A715A39482E550A7FC99F4F24560FA1B99B62FE4DB22DA4D3AC30955E2CC042A -8F6E3447357622CAC0C961FC4C5EE16CB6BA958EDF66974AA94FE167DE4AEF55 -A59BC805AF7C6F00B8E6A81CC4820762C25577BEDBC24BFC65317D3F95871963 -B1AF96D90E6731FECEAC86368488B4F08FC7A9B4C23D2D9E96FE4DF19825DEA3 -6D9FA6F70A097E55AAC73D3778671B1442F9F81BD8DF5B80344D2F92CEA557D8 -28C5BCEFE5857B9B3A73351B4CA89C172C881B9BA568E9EF1E008A407D9960BC -8056D9BD08BB53DAF2A577EA903F7E07B8E66FA81D37BA9D9967D43D7D411072 -462370676C259CD1C6C99D42170157A5D739CA097F1BAB77D25B11F63BB897C9 -EDD1A897380917EB694B9A9EDDC1BF72DEAD17BBC01475D090685BBE646F5F9F -048EF97BE579CBDDED5ED2343563B24D73998833113FB4BF2780E6219B029041 -B7E508AACF2CF9F3B2D1C85290E5344B5C086678E5C8D33C99D2E13B40EAB5C6 -83C8213FF27BE85494CE767BADDD084CBD56E8CFE8EDC9DD3E22A625B14B1CFE -0F23E0A45165D0B1ECCDB980281D0C39759E46892734067CF3C136CB2985E870 -D3E696D2F3432C4AEDCF7F2C724CB25913949CC417135CE988774B7B21661B02 -BFB37039C04F20403C057EAC33C7AEDA89F66ED53ECEEDCAE68554BE213F01B2 -0FC9D1AC95EA7720921B514EF49F58BC4C8833E7B862DEF57C1F2C7B10FF89AD -4A78404133D02EC9B4C5D772149B516557A94C342BA907C3AE257B98A44A05EB -48496A46C8E86874E1A4B84EB034F4E23403D733E5481F0F235508CD13BF99D8 -BF26939A4CA00F13449A143109A2C0A24EC521CC6C8C79BEEE2D566B487B78D7 -F8B30CAC371067C70D71A0A93AFD0D6EE568C98AB4559E3976271E492C15C678 -F9AD0109EAF8778855213DFBBE42CA18A25AB94E1F4FB86AFECD6F1DBFC023E6 -F525D79A8CAE50A6507512690D2DADCDA47E5317899284C2D0B2E6FF8A211CA4 -7AB9CDE6DBE438C0F0C076CF9FAA7D28B2D46B24358762E9F6B850D6FE2B3878 -FB03C70BB29D852EFC0F928582A49094AE48CA7D0FA0B1D20DA43A9EAEBB4F9B -5043AD9355589F26202AC6C31EACF8C8C8F22F1C73B94C8F5DB698E081FD3BBB -717DA3E5B0CCA33FF975725075C1682F7A6822A9C68241AE8CC93E97C3170476 -B17BCDA45C98B306FEAB6BB8E97833E70C0B5B314518A0433DB6CDDEFFABB2B9 -A221CEE0AD8E101B9FC42700EE65922C82D1831E1747234EFAB63982D92235F6 -0C4DBA8901A60E1BE04516F3A682438E051743524DBFF410B6B784F740B8E0B3 -9CA6C7029DBAA0E681572624406F2331C30251990B7BFE9ADA2061E4BAD72678 -637F632290DC1D987F2D6301399BBF70ADD40456D212A0BCBEBF947FD0D26107 -01D1037BB5AF3A3119D6967592023D483D463EC7E4474E1925905C17E7F7CE62 -7693A52CC38DD1FCCE98B63554379C03E033768C861C4705416C5E583CF3554B -6BA4A6006C37BAA69FAE8E6858DB6E361DE2DAFADFF82EB8FF4C476C316B3500 -1E0BB925D21C33985F00223797F1B109253E41BBC99D9DE28B98301A77F2FED6 -1C09AB94F1A922492271878EE90437FBFD202AB6C3C8B6E66A80B862DDF9D1DF -CBF60DAA668F88A1A624B91FAA8BD574961A4EB0BEDD209376C4174C55681BE7 -D71C0AD813B995508530F30839DCCC26001243A76F96AEAB5E1B45A182D7D3FF -00124EA41F312422029232F71275F1D60FCFB1B6D26A5E09CE796D72791F3E71 -1B075D016C6A2C119FFBA95BE034EEF1EA78B5F520BCF583B284421CC65992B6 -F319DD039753EF833F450332B056A04A8B3356560C55438755D2842A27281C42 -EDED9E7F7FE3373F71E69DEAECC43A5F585D30F4C7DAF77FFFDDB558D6DA9233 -F8A7504E4B80DF76850BBC3B0174D1F45C3F70869957F82B0DC22D42426EDD7B -9943ED5A17BBFD3EAA7AC9349E6FF6DE3B7E88CE522A399556B1DDC660E89BB0 -07458D0D55A51EA83D00ECBEBF007D509D0F9DA7328821D981F854D9733BBFC7 -79DABAEB9B3CC3AC69AB9D187DBCD03AE29F2C43FA4A0C5A4924C6C0A8A1E7A2 -25682D001C1A3BDDDC1FC4385B9F217EBAFBA7746AF6CD52A5DD24980B8591E1 -827F57943538CF2ED56FD9D52C5766B5A3C25B36DE530F532A795A8E464FD9FD -BDB86793EB23221790692E8F6E4C4D5F88FA8C96C9AB9FCE3BAD899CAAFC0D2D -7305885730B68040CABC1DCC1528C2DDDB37B9C9681B7E021E3190F0AF480ED7 -84E624376C43AD688D8E0FE302A310D1CA0CA912941A52336F85F7429FFE4560 -E082A1A12B75FCE9F1AF0B4642F96BCE0E61EA6798E7F8D0F0F4D7CA90F757CC -3009A5D0897B22FCF894E3B0F1163BD490E8AFBD523F10696534A77BF17FB139 -909C1C7A69A48BCA3E8F2274F2C3063F1FDF0905BE8C162C7D790293DF5DBC9F -9CCF48F98817AA69E9E9BDE280283A137162ABC9B27B0163E67EF310B51B51AA -DF31943B3557785D5FFEAB1B34FC368409334D7DFA24CF85833783C7BA801BC8 -A95DFA28402DFADD12EB9D4B1F6C3041DA1C87563585D1BAD8AB65F0FCD4015E -D21569A0AB4FFDF3265E1BF3F7F1A43FB96CBF13B905CD46C3571EEB02A3190A -613B6FA912368F0099F30E8E64FE899411E4C072CB63E2C662AFB6A0EDC2F082 -1009F5681A23D7460BDA4ED4F9389A2FD7EF64DC2FA9B2807F2B307D44062371 -3AD4C8D327120BB9061BEC9A5834899896A9638D2F846ACA0462C9C8279E0AEC -9FF78C7D6BACBC7D6A15A0F3E48A7E1B43265201F1484ED27410A484B38D6465 -9B2A29BA97294CB5DDF0099DA4727B8527F454F37004BF9C4901A378E1A623D5 -33D9B460D8E182691B4D8334E836942B0D34AF6C992540B4E092E6A883337DEE -A359B9492BE06E8306ABCAB5686C26AA3C1FAD4B5A1313CD3C1B4D0EA2CE897A -E1DEF890B729BDA6DB9EB328D1E52B4F999A0FC3ADFB787EC38BF65A3FF04FF4 -5521A909DC11E204408FAB630386252D62CD3F09ACF2FDF1B29B40695F1836F4 -2ACCE65A6266A52353665E65CA65A9585701D3389D23299D61A687A6016C6DA4 -B7E24F5E9F570B480814923A33193261B00BE584F9A35B92BC799B0FA940F4D1 -5A61BAE6E7F6ECFFCEA868A6FCB4B40C0D7F0D43A42DB66A287D2BA92A6C9ABF -891528E30DEE34C8880AEAF2EAB4826A28E9F7097CC376579CDB7000111D2E9B -66AC6207D5DDD92096455E86DE62ECD4C6219401865F11B8A8EF73000B5D3B61 -0F89405A82ACD6A8D675C44920E281514D16C177882518FC4532B2AAD2865270 -B26D955148B48478631B7493D5D68B590DB12BC72EDCC64BA4FD2186787BC161 -CE587F9F3E96607541C180114B16D058ACC89B425DC8C20165B881368F0E5292 -F6DB2F8350080072E258EA2C5E85D6419A72BA782DC01791A4959F08B2D40057 -10711744CF043A4D5E3ED3FDFDB4A5ABE1D842097380AB8693DB90A0BE28DDDA -9C24F9446632F1CDAB75FC2A6234B15FC294D41ADD6C6E95B13FEDFD3BCEBD3E -7BDFBCAE303B6A8BA181EE4B4CFC4C20432C75CE5323525C671AD4042519537C -C934C699D9E00D605AA1F8A3635116C02BA07760B62DFD50D059CA88C69569E7 -194FC05579C53E8D8D9D3E9C0D43364C99401CA56A0E6DB8BE22D595E2D2D4E8 -6A251F9E9812DF3F355DBBFCA7519C53DD3C4B7501E11455E87D9BD6BD9B91A7 -50AB44142B0D01E7AE2548D0F544976E0172A97114927B0C4FBE9043575A730A -3F3FB0A81906945BBC36CFD6573044326EC43B5D42922956EFE60888332A3513 -0B690D4E024A9A12175E39D5E5955790B9E5AEF3451FD1992079290DE16E36E5 -E6C6347F3716CDBBE22D39605A27024E5D441C9EFD849B02A4E43E4DE5425CA9 -6B6BA2C8EF676016432D4AC709BB0452F072D6039F7E33C33B3E8E1ECE0FCEEE -2F6D083786DBF65E62D3A4D31C937351523E4851DAE2B60C7DC91194DDFBC13B -353710E9A471F2830667C837FF0C8119C143144FF8B392C2BEAD2EC5F7AF5EBD -DBEB4C36781BA28CA854128182F8D21760044B97439FFEF7C16A06778455687C -9DB73A44DEB241F1FD9A5F57CA2D810B0DC8D3E0B87C242B916F68DF74B6A46E -BA6622BDE90B6660AB6AEAFAD5D1EF04BE006193194A295B0CBE5C45750C5711 -A338631906FAF7A915B1FDB38BBDD3B4797B96EB4C816B7F13CB803E2B1DC5BC -ED66B603C68CC23E3125FFF102CA544EF9ACB8289C19DF24A9589147392767CE -F2D9B47CBEC2765B6D2E9C40B67534C01B94E07A6991813BA31018E86803440A -C9DB6FC5AC8B0A4C6DF96C7906DC4D3F51F99AB314959EB94E82A1A5B84DFEE4 -D10E438ACFDDAC92486835C46E120824D0B8ABB3224B94091845A22D15600F0E -5AB1B4C440529CF7957FD36BB2C7362251FE12FE59EE41F2FFA52236BB97DF53 -C29F81F4805992518E02D747E802D38B8E689BB503DE7928634D64352ABB3C68 -A073988A52DC63E1D606C18D68A95BB4F3D1D26799EA02101782CE1154478B36 -F4C0F4C72C032526C0F28B0D49ECA060A031D84EA9F5C58E38DD0E5C36F11BEC -C5D9DC341C9161F092C1602E2BA67C1BC76938569701CEB25780E1D346582C2E -716674ADD519D650E158B257D8212B9734BC1777032AA477429750BCA4776719 -82C313594CCA6F1EE1424082A43699F59ABED9D6416920DA4B69DB319E7CB0FE -73E46699B31917C1453FC158262344098378AC2534954D78EF9B6B73B659E07D -94B187D72A93EEADFEBDF1C7236BB2DD4CD70D79A97A92E0327177FE0A36AC5F -5F396F771608D2BB8D90A349833FF2DD24CC8A46E8EB6F36B31D3E51A060FFB8 -FF66AEA579648800CD0C8A9615C8E2D0550523343657D6D509BF7094065EB390 -5643EA96270B1EC6D338602D8C8C72FD323E97319E7E4CE802CCF245DF7B11D6 -917D32B6B7735C3EB089A1071FE012C72D4336EB2B68E2BA85677F919401E5CE -442F3CE48909B6AA122D9E16236284A571A5A3FA0923FAB58EC8DD172B2B29AF -5A5251BCD86FEB0EF87F77281F686C1A14C734F4E49C278CA38ED3A5C0342CAA -19CF6315677DCFF0FC76759A2E08DA2DCE2783D4B1B9284DB4F399A78715243A -2610A4B1D34E3A6D5B0C42D96F19C4392A63186D941FBEFE74A2F20FA4B5D998 -5ADC9CECB760FDF57BE53F057F726F164C9072BF499BDDA065979014B83E7A2D -DB24B70426BD9CA52768218CC89B3CBF387D550669FAE2FBEC1BA690D2D1D104 -F4363412050787C325B900B54483B7EE0B951626422963A54006802FFEC1649D -476A8C4521CA07C68EA0D74150B1840DE5B9A801E7DF3A8EBB194B11A72E8409 -2772084D0C37AA9A158AB21B49EDC3EF581CCE7AD4880F17897CD61511AFDBCC -8ECAE00DE43CF21A4C69194BBACFAD417C93A71A350CF087B77A96BD7EB9A198 -6B01A0929D968BFEA348475803690EC74ED1CA9032F4E201081FD85BBC6789FC -4466A642A99E8F2EF742E5DB88CB2C8E6B1F15A29A2D25FC3B579F6DF6713BD2 -B25CAB08F81350C31E7E0FCD7DB5B9CBF9EE07778AE32322F684834F2F223D56 -62491EC149964AD940491C1FB4A5BDE45B8A81FE990EC816F9C3BB17F1D5EEF1 -FBD54785D787F6544A2429D7468878F210495BEB13F3429B8603CB03D1AC41CC -82A29B3A3E23ACAFE098BE5E60CBAF6651CC765DB907A81A0C9AE730EE3C1170 -3C1CD8B5E4BE68B705502D97329D231AE9C629A3349F3E88270692E476E281AC -92C364493BFA024B5BBF34C6EFA6995735AE972CB8652AE61331704DCB10C42E -3B944C013734CCE07A91A4016AC624B5EDDC2B49E633F6C7F11A8F3503277ED2 -AFF98C4A3868C67A4960C760456420F4EA8C28606690178CF6335FCC01251EA2 -93A337B0CB1A51A1234DA080DC0209519A1D92CCC2100BEF87597BDAD3EA2B74 -27FD9E35ED1CA16FEFC86C087251BE83D80234B6EECC77D19FEC8944D5C344F4 -CD89FF27CE457C066F5104C627D4830CD57DFA3D4B416444F4129DCC2EB064BD -D94E6888F7664817C3332FF17759435AD4E95C1710D0D72D6A7D7CB179D3EE53 -5E86BD4993A87996B4E793AEE530D6382AA59AE08898DCFAB4151CCD6F99AC59 -DBCA039FD79C24234CB479CF85BB7F99B9FD82E8BDF9776F7FD5D5C03EFC90C4 -4E3A016C7E653A1870DEEC325B2A08B0E636F4DB6949DE052FA593F7125B0D4E -177162EB4E6AC264034C82E33A04F9850D6E1DD28E26476D46CDBA5D46F4320B -01D2EC7EF1E108C82D64169243BFA6AA10A6CE9CC9225FFE15F71E1059D7033E -C49B110FDEA14578DC663480A9B753495FDCE6881940D94C0891A907E0E02F48 -F8B2F61DF35D27493CDA6563FCFF9FAD1A2E41CB27E7A1B541C16E5489525A67 -50314E35DA4C6F2F82EE6C482B72537647F88A7A658DA89FB03373735EB1A943 -58765BD68F9C6644A01FE7DC70CFF3D2FDF5C3A009D37EA018D70BC3BFA1433D -064E82206EABCCE150D784C9DB26FB54D3FDE40B8D7002ED0006FBB3A8D6AC76 -90B4362A900AA027782E6E31F0C53CF90516BBF375EFE5D0A40E27DF4A1441BC -878DB3D53886E0746DFCD8B5111FE0AC0C96BCBA37077381E72194163E92C7B9 -7AB1731086258DB9A87F54CD7E58F1156020C7F72BA15A68F0EAADDD80B75523 -5367EE05111189354281E390B4E86198269B954FCD9EF07F9D957AB2EE67FE9B -8C6DB530207753D889DF381D2E4AF823716BF9781DAC4C7548C385A62CAA026C -CA5FCFFEA7FBF09A5A90AD09DE2E96D03C0D17ACB5940F94450B6C6663EDEF8E -1613B93AB0D980F5AD0EBF2158D816E5AEA6262C4CB6EA4A01D1D81713B879A8 -BEEAD737A0A8684C927CAB5AB269EBD1A65109A4DC373149482B82ECCCFA24AA -54D04084C229C625FBC19BAD1CA67EB23A0F9F9F16EF1566F5A29F8BC28366F0 -3C0164C58BDFA577C564BB2AA923DC5EEBC1A48F8C67B6EB6A5787003C691C42 -FA13C71EA7F6ACEAA29E1A6F0E7233FF9DE42D5E79433B5823AF41A99C4FE074 -E669EBACB04C9E7992A3739EBA956EB6F385D20958FFC2FBCA7E91C36DFCFE15 -5B78030D92EB4822E16EA2D5CFAF548F6DF59BD118987A35D67D67429FDCDC16 -A22EF6745D7033896A09F3DFDB36CD5DB2172FE15D4651EF4E871A9960CAECB3 -70E3FC83CBB5E1B22C52A46F1AE96EA361812384C61EF14EB326026ED0B94CA5 -A94C62E9B9817FA83DA4DCB60CE5746EC37F2C235B6F411BEDA030861D10977A -A36E36720694009ED6BE27364F02A28BC7BEA691A5F7FC5F0610665B8B98F183 -1FC074B69C33CA23457F5925174A23B267EB85E9A9DF7FA7C1D3C3C9BAE34053 -455486562EF6CD906707A4D771E19DABB1B057F04D758112B2ADAFA1EDF3C3D9 -2CD2D77D61557E1BCAC2D756DB060E9D2834B41E6DDB87ED4827324D63988C24 -9440A816C9CC7B59EEB52F89863B27068111CFEA00EA162C2C44494E93E2051B -ECB2577F6C3D9F2084C41E12070A8FEA78FE7CFC3B2AE181E1BB177E2F33F061 -9CBB7F4FEF066E63FC6038E43CAE90A4EA7E6122395BA10C730064E67C6CB284 -65567991D64C5BD47025CBA6EA0E5CAA111DD891C383CBD8E688E767CA0EE879 -9D60F259E539595348EFC1BE7D46FC67226F1230B6E16F59A3913ED0634FC1EA -98962C1641177C618E38FB038CE792B06DBCEF5771D19DB5CD047EE9670F4508 -5E8CE0D6D3986F606A77C7BED728D7F8638087E3D5D7F76E1833F241EE14F6A6 -EC3D76588ABDA5CA79668DDE40F014CF285B5888CAD8489873789493DD3D27D0 -0A9299E68D61EEB26EA367F1927A0F8E49977CA12E4C7F04BB77FE3069130B1C -4566B996311AC6FEE5F66561F5D2CFAF31A8ED3AF8897BD1929EBA5D09D03735 -E3A0157E61A48A05B5A4F1CE6916AE4C51F8E81EA6117D663E34E5A7222748E3 -8E46D64D8D458AF7610A00861A66D1D1BD47F9A37CBCC7A0DE20F66B818D0FBA -2C34E6A560216CD2384B5C58D4C2755C8FA2FDB66D0AE9F5AF647B5E0C30430D -9903489714236607C979F2E12994DA64794D4B4F541B1DBC252F782D007638E6 -14DCA8B2738BA9243D707395DACD052340EE41E0D481282AB40C0D42D0185E7F -AF03C64FAACB36CEB3BB8053D3A8AA6C1D5626D27E93CB0CF2EED4A9FBA8B910 -0A315118E3BB6B7EA84A817A728E065624ED0AB9867019A358FF6E55FC6872A7 -33E8611EC84ADA92E51C50427AD3C22684A54526B48B2C58CF7570BDAAA73476 -CC26A3D36302F349F37DC5AD02A967626B10CF4AE6DB99C18C6F71C44446BF4C -A682CBE7658AE83374D43E5CAD63806BEC29DB228AA1FBA0943C135837A515AF -8B55D087F7A6760120FDF314BBF9F52FBBC9D9F013AE5A85212A5EC501096868 -8DFE1958EB6A783BD5E0935B9A1C42EBFBDC86B7915600303514554DC0B5A4AA -6494EB18C2786DC7F6AEE22D1892336DDB607E9EEB8C71CFD02D3194AD1A73AA -C1ABC69F794E128E5FF380BC01F4798FC6992CDFF4F0EA037282DECF99F45C03 -FC8B2B6B55747198A0176E54E532FC832602DC5027B4CD4BC5C5D8ABE25FB019 -789AF90B8A4BD8182F8BEFE13D6F1D5B13B818DC8C2483955914509C54E1743E -A413E005F5F6856D0C1995AF86829BEDC2CDB3A4BBE45910665D9B520A879AB4 -598781138D35584199E7E7F682A847F6CAC2B3F2E05260BC302602A21CCBFE3D -FEBD33B49C3C3B4218BC76FAD312D105EB6E1BC15E3BA0FCE6B6A95E6127B734 -B994C4EE09AC2DA6C958058B564A958EA0BFC04CC552CA28E75FC4D098E6C6D6 -943222CCC51155F2E3BBDB9901D52B4803BA384FFDE04FD20F5DBB5E9A3D40E8 -DCF6D76DACD641A96BAE0E281B88A9EA80D27D441B7AE1D7BE2ADAAC238D5B51 -43DA970337CCDA3E978F99B37CD2F1B6FFAF3BEAA267BDE8DD5E98D1A2A869D3 -01BE851623656E091696920D5BB24F9EC248A8CA28017E58DD9C48E53A9EA7FE -8C70D4CE0A878D3DA52F3C575576C4F0BCC2CB2D35609ED39326320F58DD8E2C -30BDE298B619B1745D518F2B8716880C813B6B1212D3B6BBA5152F9B792B1011 -84725D9C3F784CCE5932042EF5FDB73ADF28F1AD3912D35FC4B67E23BA84C35A -4F1E524A95D7FC381F56163C02736A35DC7277AC5081D74B32CB2D6A34E7D866 -B92405C3C2D4A897120CD143B7874E3CC1B6803328A3D52EED3E92DBF27450F5 -F34ACD9DBF87DAD9F130DB9D487A67EA1D9A222539A412984207F4AB62A5592C -358CC8F8A786E5461354ABFA8B2E746CBA08E266E1E06DF2F4955C1EF281DE39 -6B32FD4A1398E2C59E295A4CEF7A0DD49E135DB7FEB7F7C663970EBE419642F9 -E1FD36D1E5C197E7788235C81C36E6B4C104BFEEDA4F0C1CF0B5CDC6C09CE358 -218A907AA7E47CD1ADC594B4FE2F7FFAA606E0DCFA43CFD3538423E145C6B2DD -38D3FBA074E97F1FCDF24285BD4291DAE16339AD0934A04ACBBA910DECF83895 -AAAA4EB2924C69396409DC474587C310E3CDBCB8CBFC417DE903CEA643F80F04 -9ED88E90E45562291A684D5344DFF82172B1B6AEEFB26A0964D35E33C0C3FCE2 -D979DD4A1C21FD478E3431BD4D440AF24893979008E0AF174C9AC54E6C7031BE -E37A79D234544D94392796A8939B685D931559EFE19465564C18CD2972FBD929 -1829A64F790E76F4215E45AE0F8B0C6CF74E9BD1E15F5D76EA2E13D6346239BA -FC95D4C89459A86BA6226EA3FAE0B1493FF2B1ADEE14926AD908EE0251E0E0CC -F8D88C3AEDFC24DA6713815385F68E05C60444256819CF07964420F1389319AA -44624B53B9CB0C6844A3C2C47635665E45A9DEF0F78EC59CEDC12D9E23F7692B -5F2A04E3E3B0E2295F593BBBA3B811BC4E33878035A0109F9095399854384E27 -448FC4523808CBE1B095B0D21AD1DEB529D7CEAF5B22311B6B1F53B540031889 -3903DF99EFF332330A1E116729E6BB5EB05AD82E6D047C6F53CC7B8C272E1961 -C613DC557A656D87162316A0BEFE30741A69F1DEF72EEE442D6D5141B856C2DF -5B4AB35B6197545473625FF3CCA81C2DB8A4EA622A5AE80C40E7F2379F35C87D -5F0F264DB53AD10DD5209C3741CB50B2C51C50B2CDA647A279E591C6249622F0 -29C4EBF1FE98FFE5C1E5737DEDB9A348A6C66DC34DCAFDD983421E44E63D2804 -3B4286005EDF109F2A306CE74488F13653DBBFF9F10F36205801E217C08BC803 -AF2CF71D4C447A5CE08C1F7C77D61A1D43E6BEF030E69C72BE027512C9309B11 -902793FBE1CB3E990E94898A8D9E896718B029692678C29F326D4053C7EAA2F9 -EEC0DCEB5AE860D49C49E1F2B974E9F268935A428A3E66C9B5E66DC10518B2AF -6B19F339114259019D6B2907559DBE1A8DAD8F6172CAA69C9730 -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l048013t.pfa b/client/nfsexport/lib/fonts/l048013t.pfa deleted file mode 100755 index 4c9d0c16..00000000 --- a/client/nfsexport/lib/fonts/l048013t.pfa +++ /dev/null @@ -1,1233 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiSans 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Sans Regular) readonly def -/FamilyName (Luxi Sans) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -36 def -/UnderlineThickness 72 def -end readonly def -/FontName /LuxiSans def -/PaintType 0 def -/WMode 0 def -/FontBBox {-215 -211 988 993} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078987 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83F2EBDEFED79F2D9B89C -8EC53816C50F0AE382BCE732EEE6D88D5DBD81066D279225908FE82D1016823B -76A6ECC3AE378CFA8D4858C797172833DBAD7A6E3394F8E694E1492FE4B67412 -7AD6A6ECC7A6ADC95E7AB30E84E5C6EAF70F5ADD2C2325538478BA68B505A016 -4E1EEE2C4BC00D82994B690B0A7F593DECA6BAC94DF9958F8C9D4A1B5E8CB301 -F978E31D098ADAEF1A8B0C49BE16CF963236BC1C98BFABE641EB28E425926D7D -121C3B5ED3F3B331A592397A0118B79F023A1F3427922D646B40F1535AC406FF -9A6639600E9DE05CB8CB72DC1C2315FF3C04432895774FAF2E5BC8C409478E7C -5E14212F16CCB01F40C090BB951FBF5866A7C22C10FC75DB5EF8F207AE4FD07B -10C82861AF1C7831ACC5759E0B603A9D8292CC48BD8720C06CDFAC12C303437D -D3B5D1F4AF514EB57314E27DBDF3FF7C4F1B5DD60244CC8C383F433AC4D74E8A -E0C76F22042BCAF8E576FD489CFE0ABC503C5BCB003992FE159A65392A4AC64F -4E555112A88333D6CF854A48727EF93AA0BB589426AACDC7C06FA3D61049F58C -74416E873A6B6A2198A493F73834D5C19BE517A92C5ACF16093E2F797548DD37 -FF9841B166114296FA9D03CAA6877981EC35D279B3795106CA671228224D0B4F -D4AF3640A59F9E44C59541F7F06DB11535289BE84587C698463286E342038704 -8D9B9A670A0D11A2B5C6C2E2A1E8F4AFDE915A03AE45CE5947909B1FC9A03413 -75AA4857E725120F78BF6CE2ECB35F685371843C3D95512572A7A0E3BD246ADE -AEAE95E62E9775AC24597907A8B56AEB88F46BD4B39018AB8432D9737C5CBE73 -77A82B56AF95293C7D0D847C7A508470CD6762AC896FE223E17730F05C9D3747 -E340F37E7BAF694BDAC9ABDB97BC12ED7B01173D3C713E0A8E68E10DE647BB03 -E4E67DE1972165C1796F5EBACF057A5AD7FEA38443D91ADBE54028CBA31F75EA -0DA41FD14F15496382A0D8C9C27BCE1FDD6A5164F70BFA2C5B334A2D2DEF9AEC -F1C39CC0484EE7F97A39D31A46CE50FC7D2CC52420898E2052896488606A5328 -FB195A9561E9D5A41A4C8117C86EDE60F80B6C70796B90EA9D3BD5BEB05E6656 -A8BD35A2A884BF8677D05A1F8489FAEFED5C645AD23A141ABF3E78C69EBBF48D -14884B29D1A4D7F03A66EEA0D0EAF7476E80EE45A894E706B5D681AEE8B31E58 -935CBE30E790B7A3995331BA9B0FA2F03F9A4D326F249BCAAC590345596F8369 -028CCB95F0D1CE8A44391C0E9526214EE28927FC98B3BF6676B1EF48DCE63F3F -48695A3AC668FAD1ED3B50A1FCD29ECE9E01F8BC3012053AF96B0C7D276749B4 -8CF046E7406621979A92FBEB7B5DD5CBB154ED51C4A9A1C13F6223BB54F6F3BA -326F6EAE74DBD8B370A25A7A1DC320E9A17CA230A868B752FA7FB1065F435BE8 -A3EA5775CCDC33A360DDC25B2891F7D2AC399BCF6F789109CCB37DDD02BF9EB7 -EAED7A9CE82793DF6FA7F68F9D45530A14EC91D71A19A9251BD810FBC9934F19 -FE4FE1BED828FF3BFA6E91244AFBD8B430B53106AD18F41DF767E2DA16F57083 -B8F66A0356F80C30B956C43416BA6E5CB805AC10ABBD18B31F8BEF14757877DF -152D286CB6B478EFD4C88A3DC1745A32A56D845A7E61034C7907A7EE957A4C7D -A6525821611CBEF18947E727A49E0F765D648CFF974273D18A03080EEBB6211C -E96439F86431EFD0BCC4CA2D2D8A4FEFC65C768D28FCE6BBFAB055E0DF961A52 -81ACE5A300787BF4A458016DB1CDB671B4867E5F5103551007BA0F53117D733A -0D3E8802208CE1C54965A28912A03CA12D9C34D7DE9599E6DAB5124713CD716D -916701BE3D6318B19A9E2827E94D4FC3F4D7D5794228DC958B3FB82617CF21EF -D4A5129EF9051745A52DD66EC77E50F35A8793858819131F36413715416D372D -DBEE44AA952C566114C8E3A21EC8BB0669805F48BCB27C92E609905D39C7FB82 -A62A627280ACF84937B0F10E132EF579B69992A1942133DA541F50CD3A51FF2F -C56C10C6ABDA32C83F1DBB4127843928A4F6E714E815E387588478BF941F1F74 -E8632BD28851474673265AF4A18905C07A4EE77865CA41D23069615FD2176AB5 -2595D1E86B86DA9D0C416B67497B6B9FCB3E3F709C3A4E552E9EE130BAFF3810 -C30F41795F68105BB700DE11773B6435AFD59D7815C17D2D0C33C824550CEFC3 -1285EE76EB1E72D6D3BFAF60973919F8FBB4E2904079F53927F7F1FEA66FE0AC -5496A13D446B0FBADA61467346AAB2E5A9F61619E09C929FDE2BB660FF152DAD -AD834A43A906585B1B48E90D2AB718011880AD2A3431E5C9B2AAD5B9E401973B -AA944A69F49810FC10FF7B7FFF0BC5A2FE856D757DA569F34FD03953534315FC -BED3841FCAF428FBF5210F66C961BF468F25A82E0D6868D3E4B93F95F9B04BFB -D9B99488FC520678A862EC1AB774A0CE59CEB043230B6DFDB2309D0FECEFD69D -8D49085ACB83B16034AE0835FE67AD57F38D369F4D9604CE276CBCBADA2F8C0F -3230E3525204E3868B0AA1E8B387DD2567E000CCAB04929BB4F9F5DAA93914E2 -A4C4F6C5E91C51725CC94DB972FD7B8B46C868D6D2FA9B63C84904E9C3EC77ED -FF4ED0FB21A310ABE4C54FC6D6D18CE039B4407F06B95CE7C262F789258D0585 -BEB98AD999A28751FAAC37BF6ABE82331A9428F873E91254E820DA499C11F4FE -85F0CC83DB4763D6B4C6B832D3AE8CFF77C0C883A0B41A21DE36A1D32DC13EF7 -D35F3E86C7EF1D8461B171813160E56FDB2A0232D1BAFAE968A4FB67BEEEF61F -7273B238C3E2371A05B71B15D8E0B460156A5FE5DA20D662247CC36385544C4B -A52BF88B7C20C78AA08BB0FA4835FAB7642F195D29A5EDAEEFD711169ACAEE55 -1350C30E459A4EF0D5E7F7C068D1EA4882230D157A51D639750E2550F96D752F -97B0AC14EA6524AD772E10B6E420584990F0D622598832F519FF9CB6F6A20E79 -6E75AF675E3886621421E2B0DE3AB619E6D0C65AC4B7366BDBA74C76C5F6DDA8 -9E8D11F672D02ACF26766D7CB6185BEF931A4ED03E3745DE92BA86660BAC7865 -61F4A64F959A7B4D825E15FD9567A957B9C672ADADB83070795EE44D7022745A -9E8B7D0C03ADE959A33ADAFD9FC69A0EEE08FEBF24674B0B6F16B31BF3BF0278 -68B511314B4C73FE31D640D6726EA6051A079A7F503C6C886C9DFFB6D03D2E6B -AAC0BAB66F9C06FC11A4D7C165CF97CCF9737899D41F602E326BF02394F6E438 -A579EBA81C049CA9B773C10BC5BE33353775FFE01E3529DB4FDC9467564372CE -1D2976040390CD1F1C0DD3DAC8936854A0E9B5074730AF4736C0E4F040759B69 -5AD6A1C46714E61914180D1F80ECBC33689CDFBE788204DEB11FA4E35DD610C2 -B82E28A25991DC4E55331DB54345E3D11EC304B7B25CFB5F1762444C55AD642B -8095CF31A30BD6C429497BC0904B1F06EE90FD9926125E77FD430AE3852CA235 -92428660C10A19470784FE02E536926779B248650A6315FB8B784DBA9D226B06 -09C6900E5797693983CDDCF08754C3159545042ED401B364A45A9FD7BE0AC6DA -ACD9120E8114EDF40F21D968935F1BF9DE05228EC140AFB1889AF353996B79C2 -E6795E23B5D0CED1E0FB1E6A572C6746958619FAF88C368EBBD742570DB4CB4E -DED4D19E89AFDBF6092D5A0A48372685DD9639A32E4F91ACD9CA3A9E34D64E11 -9AF8E6BDF8674D52F1242D8FE11E19820F26BF1F533C34EA6471A4C96D4D5207 -A9AE99536705F6934CB16165657EE6F6E7CAA7720D4AAFDC6C075346672B3E16 -001BC35A331F03524D28301FE77D9C8B5FAB0BB872D568D5B95B2DEA4322ED4D -0DC15BA4F0C1D1AF924873193FB809B689646A4CF1D97A1660F953C82211E4D2 -A58E370AF2693919EFBD3C1E18BEC7A472B20DECEBC0CF1861AFE3978C993CE2 -3D7E93946083689CD61E6C180B3EFA962E2BFC1D073F7FCFE39EC0F963C51C77 -B2A77F81D20BCAF1F0B5DC1AABD9869D4497CFD90953EEE70993ADE80AB6CE15 -864AC0BA7FA4B666C54EDCA0A0F9F67CFBC21A3BFC4E2303F5849C130B9B7E46 -0A8F60048C57FF89DED4A6D5976635ED1AFB0331370E53EBEF3835107D02FEA6 -5E28A746BA8E0A4AD649E0CC03B6AB56398D922B96133DF7024BF83A46A0EA6B -E4B05CC77A461AA0FDCC59E90FBC96D16DA364C2DC55E618090800BB3E8A2D90 -CD72A4C067A1C107EC6B0A648FDFF3D05C508C4DA9826E7082CE58C2B027C014 -6C001421F42F21B18221E7AAAA092EC197AF592EA3D432175856F58FE7EAFD05 -B81FEDFADCCF38AE807B2DCD8E4260E348E3B561E72112DCD7BB0032120966E5 -5F131F2399D9C89AE65CB33A354903D37A9A5E480EBAAEAA485305462228C88A -16F99457F7FCB1538C2BD86DCAF01F6D6404F02FD91C82562EAB72EE21268867 -CE2C0F3A083719E62205D0090F64F694CEE7F0F38D57D01F3732839933DC0F8E -DF5F9CBB1FED7FB149AEF7A53C644E17A672DF4F8BD4A0ACDBCB32859117ED77 -82ED68468C311C51C8851ADBB6A9212DBBC84EC1B88A4AA31CC6D1F764AD69F5 -CEBBE3F7983C3442FD91D7EBAFA16CA047165BD327BFFDC247F822314F346D2D -D3E28BB4C05C485438E70E62DF3E165DF4AB31B0CF7FE84F420304D3FB7D11D7 -DA73EDB8834AC45479C13BFC5B845AF24C2F1A4711AE4BACE4D60276491D1BCA -E3A3667563FEF12FBE7667F1EA621D0C241E49D68B09BD92D5163246425565BC -FAD5051C5CEDAD508F387E192AD94FFC7184F8BD2530FC7DD585501E34AF3846 -BB1295CF417B218758F11D342792D81C8CEC903D970E51BD263AB1BFD6E9B2C2 -76E1B061522A88930712D2C169877295EE5340A4D1C3F69B9874E5CE3E3C82C3 -E7CC446BB33407B2F2B13722054B9E4286C06EB291D0410964FBF53E079D70C8 -1AEBE7D82ED6C7F95A0F83AE408196F9FA71BCA747448B3D94BDE6B25D9B1B17 -4C55496B3D0480CAF91E053B3FCD02C6140317DD0457EB98BC899CAFA6D274C5 -06FD587285251051CD5DEABD6E5B22A3F42189ED36F3A5DF75F8A1BAA892D296 -13A466A0FD134597DBCB91BBC63400CFFE7B77A8D09367F2252C22EE637A686F -C076ABFC10D88395D376ACE6CC23DB7F05CD6C457ACC83FEB49C6B50BDFA075C -ACF9D01E6DFA07227E28C3F651EB02303A658355BA5176FBAF95414C6A704FB3 -C8025111091F5482A01628F05547A9ACB731A291F1CE05EA8D6574272DC2FC4D -48006EE157BCD0AB293CABF3B6201A4D90350EEE2948A444F59C774847A5F3CE -76E328F3A1AFCB732F339DED374E8FE3BF9B964C9A26B3E1C3524EB27FDA0B4B -EC483B16DB62FAAAB326B862529E0B284283AD28E80F362343BCC66DF8EA0E20 -38AFC2F98F623770538A38698293FDEF0B75E3C5D851094CE5928150C7296240 -1FB139409667CDEE7605B4F16339E2C4A9B94E316D7A6B271182A19CE5DDBE61 -458DA5B24620348E77D1EA20B096050013A299D52E51C07EB68C151F6EC394D0 -26D6AEEA446783C64E15E7C7602522500E789A4D38EDC317AB7CF6765DFC3190 -FF1B84DB7A4A0194A4400DF94AEE615411313DDEBD12786D1720430E0DE1278C -9AB02BF0705A2E75738D65B832DCE7751EFFEFC699B97CF4151AACA2D94623C4 -73748CC15AB6D1A07F5D13178979CE175326C5110B335E47A53F45818FC9E4EB -5F7CB8332E12CB441FCEEACD64AC84BFEF1E858C5CDF1F0E895CF1AC75BF2105 -D2B6B86C14E9145BE2F22792CF68CCFBD007C728E816783AFCA822730EF16766 -2626857E1E7C525793A38955C4F40CFB8E42F86AA9A0CBF0296F9C54626FF1BA -E25D62B530221D6421EDF9E5D7BE7A1311BA3AD0F48771252F4FBE4E55605F4A -0A520DBE08CC94B181952D89633840FBD1F79BFFC71090E918076A9053947120 -70635D5EFCDE3A566101104D54B346DBECEE79FA87EBF54104904756ECF68B32 -2F6F26103CEE3B06A882DFFBB0B08BF9BDAE2C8D9AEF88837235BBC2CCF19C9B -E262B6F8748CD3B0224E2237CE0413A4AB2724B6BB3C3391CFD6E8C45AC32ACA -7249A955656967035944D14823D7EBA0D4FD6F3747ED319A6B133AB8762AF94A -B43B1D03FCD9F63766753EC12609B8CDA51E65875B04A0DEE40F768D91715D29 -A06076D2712CD5BB154CB9E3E77F322008C505F46FAFB3ADAA066285A50F77C5 -8A9695E324B6A24B1D96F4D4197EA627089D71EA7371D0D0348B8893E5261EB3 -F41BCD40EE77A02264BAE486CB345CDEE0C00A98ED7F96A3AC6CE8C534F5CEAB -889F7E3563092DFA96C44A28279AE30DCE4031150E2A4F03AAEA5E2D854D8AE1 -0E2DE62B83B05DD9C7F0BD5ED122FDFB6D4E5DDE5BA1C27E8961CF61119B482C -69055C36E2C3A1DF9165FCD5F24CBB5D6143C9E43A0F93EB260CD66CD4BF54AB -7AD064FD0D7B72E71F51464E7CF407BA9D90368ED4E9A5D11E63EC7F7E2563B6 -1678DB1300C88F3EB77DA3AC104B644C799344A7B93B7925991A065087ABCD6B -4C72F2C60B3AB3E9B1B008DFC201E2F48E47C38ABE247B622A75ADAF193E5E9B -301E0F19B8066429FC8F64E1E5D7822CEBBDF08B83A5E732FB45B211090F0A90 -EFDF2FFC7BB6A847EA398CAE9BD0562F73DBBAEEBF83595E5774C5290373F3B1 -161905296921A55C4C8E9C925AA543338254E7D9855E01803A2EA96B4AD8ACF3 -E4682030B7BA428C6C505C9F6A97567E568029A0FDA0652947ADFCB7FB74BFB6 -F72CAB5267EE86F34D878C62DC81BBF22FFE13CB066760353039995E461AB2D2 -040ED87EA2CFC54F2D5BE13CC99FEBA37333228C7302A34A4F508EE6595797F3 -7BD211BF901C4055641869FEA3546B89D36949EE0FA2CE8DCE71842A52F05DAD -F63829F2B3184CF814FAA64C73B65E4ECE9B0517204981AF9957F1B6FB29BEF6 -8D47E887F8EC987889705FE17BDA506B1C9E521BCA46A10BD728BF9E21551C6F -E233316FB7F5CF3CA15F1DD7B827126C89D4EE7A4AA82FE71026107963523F09 -096FBD47DFD66CA1A69A4D7C076D9A2ABD9D5A87B70DF1016E29C3698AFDF479 -451C57823F7B5250315EC85A8E7B1367C2E9F064E2B716340EECF712EEA14886 -22F560B22B39BC1CF25CE9966AAF766BC606CA93C04ABBB3DCCC7E0BB8F4CF22 -2D37CAF0BCE43B93B2EE318BD72BA502D596EF36562A056E1413DE0700C776A2 -0B4791C90FC8ACA2EDA723CBED95908811C2ACFDB5258CA181AF38EA66E305A8 -046EC71857E31894C750CF59C4FFD7DDF405378FFA7C854A0E0E3C7BCA0AD237 -2023844F8E8D69C15608CBE17D84FE9C0C9404913D68B98A6BC8FB01479E0B60 -E2E624A5B4E64213B4BF4734BD3C8B30B0E691B190B30CF2B49978BEA937BFD3 -A18AB4FE7D77EB75837ECA25ADE86438AB48F6E2A6C7DF2CBA1A3006F4A89AC8 -E9596510EC3FB24B33E24F8819A9129429376CDF5E84D61F79084346EFD83BE4 -55348D8E9BCDA1ED8096A3215600A1EAC278B99AC3FE8AC3BA9AD3B861A492CF -B38BEF7502F608907CD5418B768C795E3A31E7B6971E482FDF8265032FB63F2C -4B9385860945B83E244B19B7769160D3E90CA5E81E39001085FB8AB7D7A855B2 -7F58B5AF4D7A04C214015A5112FF363981AF0C9F3A6E98C391630F839C8529D8 -79B2AD12D38181E9A57642AF6915E8EC894A2592A606753C7C6E67538B22B1A8 -18D836B53E4E775A9D745F4F0C2BDC493A1122F1DCEEC4F7E18445546FBB332F -45A62F4A7D2BDA18491577A7EF07D19F1F48420944A2A8DF92D953AB628D2095 -F02358B542AD8CFDA1E2C739EF10ABDAE3C7C17AFB2F0884175BD4BF29164836 -49A5AE6C7D7438D477D15F74939183B61119367149B32B38C4277EB60EEF82E6 -AF4E94FF0D5DCFD77052C2FADBD0554964066239180611E193CAFED231F7CE82 -381A14BB9D908D842151883AEFA0C5C155184D2A6E82FB943792DF1D1B9ACE7D -3695B87CDA9E22839448241DFE11886518AFA164707842599A964E65A2EABB2B -1118F729EAADCFF6CB3DA1BD784DBC6BC6D41E895EFE4BD8355B65AAE7FCF6FA -0B2E115F67B7F29210611955759DC3C52E6C67FF1AF9B69D0DC3B53867FE8DB5 -E3E9F35BF158340E2E888D3A9DF0160F8150EBCB76D053689128B4DCE663EE5A -DC8526F46AF7DC1629A28BD8200EC03F6A11D2573C68580CC18B0DF7E138A6E2 -9C9022DD9093D3198ED133895B6EB49A5475EB0BB06016E646F3244D76218EB8 -F26F00F8F507ABFD902788EDD8755DDAF9973C40D1B7CFF83E696C2B60AE9E33 -DB98E520A33242F3B367287A519255AE92F2512E3BAA70DFA3D4FAA48B6E16D7 -167CECC79D41D27F714EB1029BF021EFCA5D4D9203062585F1C2EBCE61BDBCB8 -A834CE84A1716F3A4FF8C8F596E5B4C607DF81D25995A76734AEC487BBB1D440 -F1F11D2FC345317BC2928AB4F59091B4B3EED478E821E6A84ECE01C760698BF9 -19163E32D29ABF92C5E2805434C317C05F7B1BE3B47E26AF33FB53A720820B30 -771A2DCE04C0E9914B6E7A2902C4C4A91BC788FCC588C96AC517A2FFAB00889A -AA125ADDC939A6FAE98D809F8DB1DB49B6D1297EAACD08E94EADF3AFF59F8E0D -1EF968E765BCA6FCC3D52B7DF57ACBF89E45D13F001325B796E11A5BD51AAA3C -036C0AFB391EFD7984D3BC6EC248122CE2721DF837E44F58F9CCD0C06C045D2C -5098854D31234CA2AE9C41B901CEE60220E0DEC181BD39A3EC3E3F355CADAEE7 -2BD3A09FFDA632139242B16207428E0578080CA7CD604A186154665B31877131 -4916A2C04C66E01C1B71821C44E5161DF2646899F1923FF90BC203D592B9C371 -58C88945B5D0EBABFE0924D01CF22B547CE7DFD556CB285F0BE5D9CC7AF56DDE -5F61D0C66895199CDB61A39C944664CB438422E7FDFD2F3FC632058E5C8EC998 -673E8BA91DE92E64AC3FF9CDAA34DF107836B121B5259807ADE4324D0CE7B7CD -F2D94F1A5A0D2ADF7A6AFF0DDA5E98F72FC29A34B01ADD8682B57CF97610EA47 -5DAACF94FDB9E61CC14CD2B2CC361C9704EAC1F54E3EFBF743A551FAD5B52174 -486A5448637530218091DE0B4513443C8342CD18B669BFBF241C249BBC8080AB -012361313B220C3943D4F82EB3A66173635047730A44797CD20753F196A19919 -D1F75BB016E796214058908ED982F3C0D9A524C789D7F634759FDEA8C035E715 -190133B34E87347FC6E8C8671F50616030E5B199758E370F4E2BD838BDA6979C -3815FF7625F1BD41B9C4B6BF0C7DE3DE69F1C6C1D3F4D387B9317C530A49A3ED -37989944243F8DF2D60241CC6E4E5285289A7EA597D1DF92640A83360738B5A7 -26EB20D1E52850C829DB87E28B4717B8F2CC3C8942F38694A5DC5A5321DB5725 -89F49CA6D1A2AC555878CD43A023114FDE61FE8B8A08A840ECC2FBBF1041BC54 -FF4681D0B755262384A664C98ED1D1A1A2AF0F1AE96971EE2E4A1EF9E7C0B2D4 -A60B7A6108947C8BCCCEC3946984332F8AFE04AC9345FB60FEC9FD3534DF4E98 -585F371ACA9E10941CB122BB65D9AE82D16F0DDF13ED41D3A14448A83F120F7B -AEE9C6729E8D82DE68CA746554169CE6214842C399AF76CC78415B52508CD330 -0A776680685FEC3BA39A5C4AADFDE2EE53CF53C5569C54A59CB346033EA7FEA2 -3A5BCAF2442B4E18C9609220A1A334E71D0C4F7748F8068C3E42F3BA0D906155 -3EA8CBD989C0C7BEBA367E63C8484A2DF3E8EB27E50E60D09B1D71B8521336E2 -04EE168BD3077E6444266E1506F7D8F1A73254E5422A0FA4E5728712C3217829 -071803C4E65A4FDF9DDA27A2C4220EAA6F7520292FC1374DB4252886600780AB -BB1EB3C5F479E96AA17644BE204357F8073127B57B5058CE06C53475CF82B946 -E7632666847BE56D1E37EF9B4CE247B80E2287B80E7C3DB45C4F90D49E0AD5C0 -BF2B51C79F1D929FC84EC2B8EF66EA213E862A2F06759059D72931822D35695C -82A834F08B21DB8F40C9BDE784C97BA483E15DEAC3552146AD67AE417836A024 -2F388EBB7E877AEB04C226031941BC5E00B62DF4C833303E8D09360345DD3DF2 -7C05793D4B8954D01DDC88C7852B722546691B0DE58D03671CA23B1F8015FE7B -9E50DAD5AA41382C4E9CCB98FCEEF7785BF174171C4D386777DE16A4329C831D -FC04CD5AE48E6F13DEB41337FC48AD7C7B208CEC6587585768C24852122B70F5 -DD3A54A92F38A4201C6D75C8DEB955471638A9EF4B81BC38DF39C4E4E6CEB929 -0B06974A9D40CD5622FF02A7D3CA2F25249A40E4F0B684E8FEE2A839FB365DE4 -50FB988F97B992C9E8AC58B74F840221865C6E48B044E0A1A4201490F74D82D7 -5383AB46CE69ACAD4B4B09F5FCF3C66A637DC529695C9442F19A15C927569161 -6BFEFC8CD1B7A7F3F9C67A445F8B6DCD2EE53FA25F68817012105E420A61D35D -3741FBE996F921C24A4EA47CC5D2099A314183F55F4B098F3CC567E9DA4EB74F -9865A8019106AFFE5C8BD34EC67228540A4F49747678FA79DAF3ECF142A4F3EE -07E5B66F004EAF6FA3CBDE4782480D9541CA6E4BFDB69DAB7C72C607F56630ED -2F3B78B7FCAE17BF13D3FDA9A092B0DCA9D75AD9D6EBB9DD649C3B032AF5A1E0 -E18B31810E6CF3D26702B480D1D2F16D8A6BE47354FE17AA318AC16390AB1C4B -10165DE80EA293822BB63DB8B72D78E94FADA203B0CE078A929C5B9BC681D560 -B20A2DD69CFAC03D8F2EB16FAA431AB0E7EDC77DFC40AE2C8ECFC0CFD4A9E236 -15BF356CB6EAA90F6630801CCC05B577EC4A33463182DB9F40AD504669655370 -11CF974D7536EA8D8BDD56C268F2362E544CBC1D31E25F9E5D6F490D33026575 -E45B367739D77DFB4D079BE7C379235C8095D6D4F52C8FF0FD4C6DFF2D6C7C0B -13DBBAB39AF732C38348A4B170978410668CC1A2189A058A3EDAC1B08C09CD6B -ED16950A2DF3893B96CB35F551D7A8103380F1264FEEDE157C641B4783C6581C -790DD7349D6703D0B61AC8196A0B787A9A1F0BD9C906CB00439FAA0A9C9CF7A2 -0F26A9CA013B8A737C921722C76B167269A8443FB1C894F35F7BD37EE31DA899 -75B4EDE61F409D8539472CE9805623105FD5E67E6FAC734A6E83151BBF93BD01 -EE89EB5D4021777C423461554F2C2406D35FA6F94824EB29F88E20BFD6383C6B -2499DF337517DFE6F01B0CF4E35C4E05EADCF5684E34B7A646F3FCCBF3811790 -EE1B34FCA03BD9E6F65916C15C68D8E7B7D2306FBC705B90341415DB1262D49F -A6BB3BFCDA817AD7668A2528A76CA62AA8CDC02C9671D254B8427AA2F0CC354C -C9F2B673814A0637DEC6A052F3F279C23391148B4C9E761C5B811F89E737969C -79E7666282A91CF9D865F25A1EA923C85660404A914C90C9CA6ED4EA1E552BF2 -F03A64AD507EF630E917ACDAAF2CF94A6DFE99BAFB2309BF05F9B6CC991664E0 -C477E1BE53A422CA0C85ED03933D3B210D6716E50022E0BC0DB4E5D5030A9FDC -4DAE2DF78BF602F524F138F682A21CE9E1B929CAFF0F1006F289A94F5F0C9A68 -A2DBED5009FB809985FB0E9DE0A0CD342366A329B0FB96601624415392B0CA13 -F62538B0B96F27B6E24E8DF136800885C9A3CDD5615B8FA19529073873BC725D -DFB03865A17573CCDEE9572D13FD100ACA9EF2AAA0FDE0A60A3A219778146581 -92B520565791410F4E515A7B088C43D514B8B16BAE2A658E0AEC9E9A6E7849B4 -4051FFBD37916E095F56B93D56DF69B39B3AA423CF3021862F9BF963405DC9BF -2A13467ED56E1EB1A8A874BA6FEB5E9B72ABF43BD10C709CC687482CF96806CF -8BEFA8F7E7AD89186534A4795FA08224116ABF435509E9A6773F88589EF40C87 -7EDE77FE457008692EC223B98E0EF858DB4C8DFB275F6E631FBE611CF31D319E -C3E946180CD64A4D519BF3F311892C1A5462838271D03D5CE7C4960D675EC73B -18D41303945FBA3504E55798D86E174BA38DD8B7B1D4F23109857567256AD067 -AE8BBE62696CE29C95D4326E1BF4A5DCF73BC0C79E972518C558654D7CD8BDDF -67A3E799A95B05426A1072ECAA116CA332E1D611CBA90BBF9D15DA7739FAB50F -E31BB619F7513BC6BC72617923EE35A2999EF78AB74EF7B3DCF32A6286EB096A -920DA01F6DCF0693585165EA80543E74646D2DA147F9615D4914EB9690ABDE16 -92FD179A66FE9A0290AEF99733F5995943C88EAF7FB5F8B7E5CFAC2FA77EF9CC -4F678820742A36D2D0AE01F11652063457DBF0A4C535708D4AF777D37E5A33C1 -C3FBEE96010EB3112FADDE319A17ACC1AB36157CC1A5BA41B291CAFE448380FF -B11C7CE02791D702D70819E83C2ACD8939372B7DDD08E98D0F17940D94F825EF -F759BBF2BD70387DC2467AB0B21A536F5F50F2EE5368542AA42BF43008D17D4C -E9543A490AEA3FCB360B09198D649966BA730A06F8A2441F5408D5A7095B1A0B -545FF0CFC72E831EAE74B4E3656F413CCB92A778D154F74E05BC0C1623EC926A -E86BBDFEBFACAA94B9A6127CB16336EE4A412B32FAF19B7C79942A8A399D9C15 -A621EDED310FC33108673F0D6290FC882CE490FBF3FC65B26BF47A9FD3AF6BBD -13539E842F08928531CDCF19DBE2CEF56C1FE7F6F617099F18CED9AD3B3B7C0B -89DDD37A3CC1AEEB69C54C162ECCB17D73FA18405BD7F58B0E78021BEA22CB81 -1357F69CCACA5E090E658D1B6A826E621482991101CE50C62B343132BCA7E586 -ED3DB34DFD1562D7AC57A088375B145F7ECD54BEFEED6791C53B4C0F475C0B69 -F14A2196A701674C8845397E4BE0F13C66A2E28A98DC42EB96569E06F3D923C2 -18ABED5B8FF7B43DC738B9E2258D1C0F5A242350AFEAC5E95BD80C16F094246F -182C53E12CE7B880D1A252999C8EBC6014AEEF1EC179C1F5175A7AD8163ED9A4 -07BE5B2D3EEDEB61826EFE3D65A9441701A76BFB637E5D5053988903DEF41C28 -EAE257229172CE100FE8D5591BCF99F000C5459559B517D3818A9D65A94922E2 -CD5517C8A5927378B580C048FF5D5E60317B469F4EE7889E4461050F2AA1B20D -D8A2F241D25635F195218A37F29112C2DEAAC7D8A3B1ECD4A68FCE0C24CEC87D -CDE22DBE1A0A73614C3DB14066448681DFAEF8D35598C6AAA8F70AF07A7DF0B6 -100113490C2131D5613ADC8ABC12FAA531B3EF0A45D19C72D77ED225F361BC0F -86B70C9B531F4900C6CBB9500E532C5C50BCD2A1295434F1E763AC95E68D7C75 -2444EDA3C23FB50D2867CDA09A758D32E4E30B01EDBD02F917FED439D2F097FE -0BD6B387FF89CA48E624295F91D96D6370FD42AA6A0BE14666D791E088BECB57 -2A391A8E87F2C6E50D188475B74CFC4F5BD1ED8D1EC22791BD31AAB92EAD4DDD -C7E610667BB1ABF783137436279D93A71E565923296866F9704D97AEF3876367 -5A063F8CD68C9223B621797F7070D5BF6F743EF717E754F94D6EBD201AB0164D -C240049723150C45374BBA15E0BD104091781F7CB67852002D31644B12E590DB -82846375410D004AA8129575F45562C33862250858C46F72044D58FFED513301 -F7881208CAB4E4C4459CE16CFDFC75F768CA513523C6C2AAAAE41C0A219B06C6 -7B4AA98F92C074356298A588B571A0A03B566128C0F62ADC9663E0EA2BB9F686 -609BDF8D6EB178B00E121632620CB7331995A63551F8373A22801915C7BFAAAE -652D11CE7CAD9C7AB1CB646C605C6C4F2E42BCC872D94160024D4C0B2DBECB02 -25650FF58D1ACAE991CBB26FFB229D8355814F5CA8620C9E637F4A77AE88553E -E159519E232749E5D037EB2BD3DE28EFC4615515DE0F44BAABE6916F0FA7D61E -2C56F5B0DD6B387A7C160EE009302BD3D1925D6372BBC8D72344100641B9A87A -647386FC7F4A4F16CDCA462B9215D94E8C9068B760AC18660FA125B352FBF456 -C145C0DDFF3E4F6D2C84937AC82BB53D0DF720BB8E0EF59CA0F1DF1AD8A139C0 -92DAD7B59892303822ABFD24EA1A922B09F5B4344290B3647CAF6E7622583798 -3DAA4155916D90B1142F2745304C46BA7E3F98F1319A3F6500C402133D8CEA89 -A10360935E26ECDE1578D362C34DB7037FE312A5EEDC4054DB2CC52A88D2820D -C2ABA013AFD88CE47E09BAE8B40F7CA321DD86BAE6C82B919884C8B855D7F5E6 -72B791936EE754670A53E92AD0C74843D15445AF39B6C7C2B065ED1B3A29B81F -DFCA2F5D4191212ACB7FD331692C0ECEC8DC4F442A753F60024969BDA7E5A010 -3DB640453B353FCF772678C52781FD6DB32BAB10D6BC7DA3233D0DEF0EFB8B5D -7009EB3F58D77C0B02B2341FB3D485EC340E80C842B6E1EC4DF85052FB2AF512 -A48412CDA18DBBBDB5726EC1DC3D5838FABE8ACC5C3D19414DFCEAC70B857638 -5924531C3803BA645F902CA88F74367B09C70A1E8504F8A850100A5EB21ADE63 -3FB038C571150C9EBD3A75A2F670122E92855F6354919189E36374E91C59886B -22899897F868B8720508F9BD5A161797F61EE40942EFB26C155359D4A6B2314F -CCE8C7059E214534FCC40EC602DDD283B2A931B5CA1E873773637BC9863CF916 -1B7B36B008EC1BB562C4FD883A631598831B1559C5D77136AD03E94DCD9C495F -315470097E005FD022E53DCB7581DAB60FC791B4ED9C636E2DE5F5B22482374F -088736F9E02EDAE88C55C5CEAF21EFD64EE282AB84452A1319AA8DA3695B7806 -0ABECD77CDC40FBF7D9FD09E1ACEF73DE682447FA18F45C93C03E7D8A70135EF -2B18D6F397DD2885206DF5A8C52C89BD54B11B4F61376CA6D6342F44A57FBDFF -171548EB957EB47C62C9B78FD5916FFC8B2D9F9D4B744E3D7B784BE985DC57A6 -92352900DF235A531109372BBD46A8B862298EB6967829DC163E55CE85F0D8B4 -D952851ACA00BDCC981DAF1B15E5D53D29F55FFB46E81327ACC6C147B5627FCE -9989428A788A98DC4DBC9DF0904DBFF8DB4C6F0BA3CDE8FE3248F29EF8003878 -132430F063596E34424CECC9C9FF6985D4DB0786EA1CF7D0DB7099A3C4D5E26A -307080C45892678EA66C0A539C32E688222CA098EA3472814A995A5701E5307E -DAEB7C853A4B7B46F9910158BFC4B206F7E7CD0D9B5A1820773CBC23E6E43CD0 -6A4E88EF6F45285E85651FA56DA663DB16D356FEE528772A506397D9D86B3D18 -645D3FBC57199F8FE75913911FD64E03E24C6D0279718F7BBB0C8C502BBBA59F -9B2CC3C21FACD744CED42569A8841D3867CBEBF2ED3486F5C187583E0E6B5D5E -9441B9F0F659E5BE48A17B05F9D3D96F28D95D757BEF3CB83CDAE0E667F3F8B2 -42F4E6D5AA1511D320A2E1B96C3C7CC96A8737A70B974760159CE08941C3E06C -EF4B1F07AB12EAD4BA26C5C3627A231EDAB2197F8B0EB12584C9817D5BB6B39A -B415D59E2112DFC61B10A06EF9ED5252F9C0FF98FA4A2B49193F09F796BFC431 -38B88C7EC80A1E192DF7B6A0E5BA7EEFED908BB108AC20B5816DC41D57DEB1C3 -37E3BFD817772D44F7C1FC4F82F41685FE711220C8175D68F4C73727A6982190 -2894CBDA32FF2B70656B269657AEE710E75D8BB54659D46025405583BD30A344 -EB026D2DED75300342807E34D661FECA07A39F567E0AC9053B3DE8330E6FA84C -10A47732062EAD6DCFE4982DA630008C33823AAB374797946A17678938259C44 -EE9BD6B2DBB700BD2CE90B2407DD6F7B48A62D3A9DAB971477E50CFD4F4BC72F -5405120220EBCDFBF0034338D21BE2FEC949C90466E14DFDE981A70F2F6F26C6 -5F0A35C1ACDF277E7034066DE11C25984CB5511FBA51CA0EF84C1143F8CCB991 -116A2F8BDB68B1EC45CA2D0B3247F93B2905C146FB10A63104AD5F9C4B82C7A9 -5373F8783913A2F925B09245825E167EB08308B1691DF759C1E90FB2611AD646 -0F73248F56E90C86F99093486FD1B5736D4E0A6F880670C37F1AFBBF142C7865 -C846921E34887D57187F0828675AE07826351005BC73158A2BBA59F5E9614BB5 -B9E72334E760BEBF7E49E74F68525F9A017A34A18A1EF40ADC811DCA5D5835F1 -26132E606874DDC48E181F79D791DAF9B2668DDC6A833969FB573201E745DA5C -8176B641258ADC5990C82F9A9C8E6EDDD446843278A83BFD4300F749EA148A28 -1CEB260198F38A5090427A0052FC91364EE8A2DE0317ECC66F676E2F9CAAF3D3 -BC6E4FDDC0F31F9259EDA5AC75B969257E635391539330BF9AE0AF73738452D2 -6388C2975CD9727BF11E0C4E887511B0975F6813E77A08DD27826D609F0A2F12 -3FD49AAE57298D7D814409C4EF9C66F81A02BDF349FA0F4F8D46683A56165B06 -CACC0EA3D648B47D501AD15F83EA655D5261DBD832A6C7131A73F3A25BFF3193 -B9B37D19D2334F29808FE28BDF612DC38172E9F35CB9616CF9F2248B7159465F -FB90BB57BA61B00B4FC957644729F270FF485252643F9F16244BCF1178C7CA2B -CA532F178D44B8A7A47550BF1D1BD89C0A15AF41BA0735C486F61D5CDC421DAD -17ECEEE048CB89F0CC319D0C3809893E441F85E2635CA10A869BFEE0B753FD0B -C9849370A0CF1631DE406FAA5C4A9C97EA07608ED72BBE10D82C17CEB10BC478 -1EA17F6336A773CCF515287E9646695A6A27E84A3ABE2EDCFC49656008B951E7 -B3C0453409A7003D5E33F3CE248C108AA0553D8EA29F52ED17443716EC967F48 -D3C2E15470F048D317210A67916ABE50E11F6199D769EB5C78E447D9164BFCB9 -FA6565C7B3AEFA07018695F7D3D40868AFE8EE320D6BC24D55F972CA66BA98E5 -1E2149F7D205FBFF2E1C5EB06CB71F2F10A61DB1571726D0FC78F584294508A5 -844449982ABF95005A4DDFBE364DB40D81E573C937402ABC251B64F130BFFD0B -5EEC2B739A109B89895F8EF47F6F180A4423ADCA8738735D1287AE5EE35B0CAD -09086479AC06B5D0861D8EAFF2CB0EA7EFBFF7CA03CF6460DF5DC7FCD5795497 -57CC8EFEAF7AC8CF44670B8519825FA30825057A23DF1469CA1C14E4737FE199 -38064FF83880E04C863D4B16292084505129670B11BC5796C4F551770C2807BC -D5054771387B8FA34AB300BCA9447B952BCEEC98C72B7BA65504BF02BDAFE588 -0DCC68FB6AFAADECA915F572740233D78E6D3E652D6F8817B771B1E1B32BD1A3 -6DC2B632C92E6A2BAFD2ECC15F7316FEAB6229434E0FD979685202408F71CB8B -1201512A065271EAC2BBF1B479798CF2E3A05F05F21E123C5644F701E3113EAE -27B93EEA49A478484B91A844F9325CF0742AC676D55C9187EDEB708B4C8D1B1B -37EF1B96CD3B554458B840A8C384B89A91D53E0C8EB72483BBB08CBD9FDA0BA1 -4E124713C547E137E60B37E88AD35B0FB9DCF2A29B8E191A2D8CA785576AF525 -938D5D856049CAFD10E949CAD5F42A390045D90F2CC97C981D1FC272435374DC -3ED1E0E42C04E0984CA1E12960C2EC6BF263F4D74389F1761A6E87857967A6EA -16BB17A46D36F1AD4D8BCCDB8988795D00C76677DAFC702EE863AE02392A840C -03215E0CC08DC8385354022E7DD2923F419501297A3AB017FDA031D6616CEA5E -888ACFBD83145CB8205DB631E632822AEEA28585015695A4B206D98EBD27BAB2 -DADBEB6FC00C72CCA83AC401B367414306D36291AD777747A3C29E52992A8F25 -D3DE12A79EDBF370AD7E9C4612C665C72E57B612FCC81CA23661FDEB7159CD5C -1F159EB60B49085424F078081DC690399A5123240B698B7625AF0D34BFE324B6 -A24B1D95C4BE19428DCE545E7626705A7CAED84460B44256125B829098D97FF8 -FC319CD72C806D7BD7343ACAFD866D00AD8F5EA111E9089EF7902A56B7FFBE67 -F9BBE8853D1734D146AEC85E28D0903A94163C1BA0F0E5220558F85966B0B787 -3EBE0329D0E243970B7FA61DF295E8493C92B30B2F5019D4E4F2C0C775C25AFF -4F502727BAC48067217E5587EA0C6A24918AB20D6A7C7938380D1A342B76E99E -0F12B4C6F5BB424E447A26CDBE25766DB8A1E7E374BAFB4EA2DD58ECBF0942FB -6A54885EDA3D8CA43D8EB86A1DDC6572F468AFA03E20F0E882958AB7EA7E3ACC -8DE675B4C35F6F9052E7850E7205849E8505FBDB8168C26FD29AB6E849CF6001 -DD4FEA81FC83718F4C2F2BFA6E4C0C4FE66768B54A913D4A29499AE406B343BB -450B3D7029E6C578F523974353DE37D522E8FB091EF6106819675179FD6BDBDA -B6A42B339DCC43717C6C12C56EB5C80EE2A7AA2FFC8097EC905DF5EF9656877C -4CEA6360082D500D23BBB0AF4B4EFDF15A33360DEA36DD2591FB9DB7A1501A18 -6A31927BF5BFBA8FFFA22F9EBE0384939063BB305E307DDC3E595E525780CCC2 -D4CFFFD19EA9BA61E2BD6CBABD1CE52C9B93DBED0F486833E7A252D818EA8040 -94213BFF2DB659ADD126AD0455EE85936D6C02E67A07B163DDC10C11B5A42327 -50348D881F4005572D61CC0DC9510C958A153D6434363A52DB4CB9B9E56FA46A -0ABC1939A1FBD632E18C3D250798B27418403610477C6736004B1FBF6BE7561C -950861BB6013CBAEF7ACC21C7096DCB7B99E8F4E17815C5D40BCF2218248AE02 -086353CD1E8B0856AB31A3C2474326F14D0CA9F6A0C52236D9FB89EC842DC8D4 -4857B0DB7F37131137AB222A517CB80C671CFF8A9A5889C8BB2ADDFCBDCADC06 -CC2BC3540F12169D3C46E579E6185B218228603A4B3FA8AD8E840C3761C61217 -8861458EC8BF163C492B748FFD349E00996B78705D9DD932D6CCB6FE7D7B25C5 -A92DEC2C6B950FECB4ADF57C5A95BF7ED12E431787DD29C6D4414FCF3C4E360A -31E19B37E2722A94BCE47087C5E1845929FEB43E73D3EDA981A0FF9C0F757042 -48F6912DD892E2CF8880A9D1B19FF0A197921A2DC12881E913A4C7858A3B3B96 -E9A4DA7FF3598E74D74B04B5F2545DB3B1D84E86E26AA8396D696E667C2970A0 -DD9978187C583D415AE00359BBDDD7109C15547B9A56F978475531BE02542924 -65D23928DEAC21CC7D0C1E1B1BFF850ACF80E629EA46D71FCA2809061C61F65A -B881D56F270E8C776983E3CE0271E3F502818DB1E3EAF30D0C98BEA340673FBB -23CD34CA17648735CD2A532A8B3A530C3E523CD013151B75FF664463DCB0B388 -BF60CD928E28139A13575635F349BF70C798D0EFD52011E75A7B3A2841FC3D72 -65EF0CBC6286367F1F4B3A7EF9F1F4808954E6D973ADF0CB1893D49B47DBB0BA -AD66EA4E84BBC2F1604FDFC7C9FA0E131718053BA1BF946A6859DE3E452E05A0 -0E179B5F1D03659522BF22518338B6C98397F040F0E93F8E6A463D7D504D3690 -142E26C28172E8DB43E5DC2D45655F7D05D999F32B6BC9A9D0C89041C2031C32 -C54C4ECD75FF3A95B871DA7155A73C3B2FFEDB148FD851AD87437BED46C10E99 -0BAED69E6900AA9F66D77F30873A508C6369C4F898788F8204FB5B5EEEC4068B -2C58510223C6B23B668204B2423FE7146B7C5314969349CF72F100FEE07D4B8E -9AF97E9B7B6EC0894C6E81DE8EFBBDD37641EDDE1D241E4C4440CC91F8E3E3BD -E70703769D9AF7227E7A16BE76336B46DB6573D0A195837471D18666342990BA -4465913A45DCAB6420462C5FFB8BF1E546D0C5B009ED19C8B11F5E5D7A41A3DD -4AA97192A047F29E8C8A195634E4778EA5F16472542D9A0B24C8741F547784B0 -3CB68F42169804AD537C0884BEFC4B5C0953A11F050117C86BAD3F5E151FA668 -D83B462FC0BD10664F0962D62E31E163FBD8FEDFA0C300994421E54A9BDD620C -42ADE78FED182C26595F8CD93190C4CAC7F46D7432B635725038A4FF6DCE92C3 -9385912E24C214AE42D5C72EC74EFE2017D4428F4961D416454F41738A6C3D2B -4B59F8F915D7A5E03B6A6A9B982CD07BEEAE7760872646776324BA25AEDC88A0 -38A730B1FA17BE4BBAC909375FAFF664BC811439F269CE71B92CE5D30FA255EF -5F5CD5ED0393DDFBBCA2C4008A6D58A1E470EED8CA803E56CFFFCD581793CE83 -1D49557CB4F47FAE9CEEDCFDE140E70F70D8AAB8B4A851D01F219538D8185042 -46E442E90954118BC348EB5896BB31B185D659503B9214885CC2600719EF8F58 -F006E2EC11EF22C286B7F058E8F4535D7EF5F3B674FF0F5B476E8D75001ED67F -48029504CD633DDEA56FC7750A9F9D707C9D3416430C210089F60B231526F4F5 -3962D40FD4C549EB4E494EC03DB95DEB23A6CBF25DF58F1327470CE13B9001FD -04467E3C1FA4082DECD79B4CFF71E9284168794F2151C1BAFA164AD43CED97BC -A410DC015AD503B270D81AEBA9A963CDA9031FDAE6B51F0C1F3606A00215719D -477402DA2B221AA885F6351EE8C4B17876409ACB320444E69B0DBDE6C90E4D10 -2F72593F2C36ECEEE2F293DDEEA74CE325E806D825F94B4280E94B8F5803A7A2 -3A47DECA7E1175BF08421112A67C59C1187570DA6B60528565F0AE1F9810AE20 -E9A0990380605E0C186092B7F65E9C0F1602609DD44A8BC80376EFA0D406DE98 -DA5E4D2BC78E67543927C6DB57C5C480CAA6D5D81041432F3EF05420341F369E -499C5245507A621789317DC4C294265DB72AF96C7FE3825DBA6AB5C96773F1EB -203AA5092F63C0DC5C8D47C28F86C5E41B280C77A8501F529B1AFAA5B1C64031 -DE2E70D75D8A471E16EB1660D64F8F1000173206D82C807A7BCBE7C318934315 -EED4B9B8403A58E18C1D4D7250FBD8DC638A3D13D1ACA9CB71D805D4809BDED7 -8F8732ED4C08DA5D6F705DC510892EBC39EB623095D6D7CDAE7FD01A9E4F3A63 -64BC83D0DA24AA2333F473ED023CF9189EAD1BFFF702E0B8E5BC6F6484B6C77F -E79842C4F56244E6A5816F0C76A4210F2B9A81E367A7B02CB683C6A19DF10F98 -DEB661CF23424272183272EDFAF0871EC214A6261A93A7C8F9CD1C08CBACD9A8 -048961430AAEBB34A5EF5C0E321CD6C2B0AF1E3D81A8153CCE16C87CC7A24585 -62BBDB75E14CCC4EC692749432A52FF9827F1CA8ED6F47059CEEBBB945B701F8 -7ADE1DAA3C6FB9F3E95954CBDF0883BEC86A6F63C4A794634F503750B169A642 -3D73762550A657BF8A5B6388E41E7C8136062EE343EAF09C07FDB04A9972A91B -6E9B192EF143F9E8D111CACA0540CFB62346A23938314B9EAADB27D5879E9376 -DF4465948BBD6B1E845C90518802D5389900E1B98B68DF86066A90C7EFBAB98B -58335EB75CF3E0572DE2BBA77E7F6AF3E199842DBBB7060ECAD3045E834E1BD8 -64BDED3FBF9306C2912811E237FF9D6CEEE5278F6613E371AAEC15620C4A2A15 -22150F8B1B0C81F9A18D49B2684640E7ED5CFBC31357A236FB1942982EE96B6C -E3C54F03A25C06968A53CB9D7FC3AE8C5B917BF33C2D4181280A0242E823E2FD -DDE615424F9A3FDCCBAF420542AC90A4D9856BD2C6371F75767A6BEA4F861909 -1444B6A5BB066C63E46B32B55F2D26B97D074661CC54BA96497B226A353CE86B -62D435CC24BAC65985A947BC16218E15579F16FC8DB371582A15D3E510558BC7 -EE6169F2D9D239F40C010AD8EC8EA128CE416E21637174D34F651E4DE30A024E -0FBE8B5FEFB5C89772D5230B3AA652D6778299B048C4CB5D68455E18B66DF0AF -851DF300836E15EAE115DBD03DE42716281E531D5B6994DEBB0897B97D21ADE1 -49F76FB3DF0FD481B322E2F3CBDE64B16BB7FFF8DAE55923757F1A65FCF48F36 -E51BE3D300E0D251BBD18AC914B242D71E491F9CB99AE0909D326AE17D9D94F6 -6F8CBEC8421AE9941069126986D9C26DAAA474928B2BB477D14D7CC7A4B3301C -A9B795626F9FD0BFBDC870275229C5E67451D37BF4BF92090A5571158169BB81 -D3F45B9C6D65E3DB921ACBFF42885AEF73285D3BDB6FB4B9B8C8864BE52156B5 -B2F20F8627BBDC08D8AD002440E47A2C96D79240147936CEA7CFD7B09027FAE2 -60AB5109DBF7059DFF4FA0D8B8EB06DCC73A1D1405FC19CE7D23C18CF6B353F4 -FBAF8AEC7E36B738F6B1CCD05A0B9C9A4C13D060273DCF6D39DF922B3797DCAC -876E0635F4D60C3D5A5DB9715D09CA2C6D0D16B62B747BB8BFA0580D0BFC0469 -3D78A9331EE1C9E7D5FEB03C241B47C60E70AF08FCC5A37CD973B4C6DC83C6B7 -0D4BBA368135DB44092579F9FC257EFBC1CF7D915FFACB222D06C52E4E927178 -80EEA6947B47345342D24FC41FC24A90178BD358759247F8102EACAFB14F4BEB -256AC2EA0E6D3446B1F1DB46922790290C38F16317FEB372898EA0854C333A01 -6A43B3DEE51F5A114B90B421C4CF9F874C8AE2CEA867C7C7A95DB46C30C1AA49 -6FA9F53DA9825F54B6653E509A079F2FF1C3615F0F34D04EC75EB02BF0ABF364 -12FB55935F20A858F30F7C86974A3485927694695DD500607183FCB73F1C3428 -C9C24FDDFB844232A43D2C596605C70C9F0F14DE98F222CD610262EF9CB6AD1A -41FE3C37051B2E591A879AA425118BFDC89B41D42E97EF93FD6E50A82B7F82B3 -267FD63506A2208D35FA855BED185FF6ABD8C5B5BC833D5CACF9C71AA6AB3DB4 -992C5BE71BB6DC0596ABBAA03F89A4FB0D77FEB283CE666DABC4AC06741D8B76 -05E80D80C8D95A5E340B8A23733960DC9283ADCBA0C75B0E78773B198C5A37E1 -27B7470CB6E15CE19E890BA07CA1A419F1F5FCC5C1CB6AFD5B530BA03585568E -11063A0050CA5E8F3DCC804E440845869689478CE1D7388C4EBEF6FDFD245810 -AB2C5860CD320AAB722534AEEB9E3483329BC97B693DCF7D3AF4D29E08E83F0F -A487B723EA2ACBA403B03F3D17F8380B2CCD6C269B6D201E465973BD821ED5AB -BC7AAEB05418DEA87619D40F4B1CD70E951CF7AD151A9B8B1A127871BFEB6997 -8A90798D6D075F8C74E1D3375A932A3B57136131826C83F2B4B4159456BF5DE6 -ADBB4EE690FFD3F2D760310841CB6C21509871DF6CC08409617AB94A32FCC617 -632E3E8C98B5A2B3E7B4169E53C3FE3966CDDB526EA5A18DC4894660EC1C4FBA -25BDA925174892535C368720C92C0EDEB4A245065266674C033D90D52009F5DC -742F7289F36CE321838680EB9F8E667234E802E6EBF61B60E526E154F2BF3A43 -4925FD043EB471476117D86127AF7894C44DA04EDF2BACA67120DA53B1A116B2 -B9BA47A8193D791E951735E33498D8C705E67E2986520D880110D35C0566FD8C -EF860427BF833331A7DF3F7EABEE61E25B667BB6A4584AECF704B45F24587AEB -B6DB1D7B6972FB4B4328B2160A91199CEA30020FD62EF0337A4D4F10AF923EC2 -247660A5AEC4D22E976972C71EBE9FD9CC9988D2E272D8FC20E15C68E9CF2621 -4778CD8C3CD42235F7FB33D3DA71F5D2C5CFA17421AB95587919AC1BA75C85E5 -E459C9AA3DA52A0A8714594BE4F2AC32599DD6C3FA3340DBCCD87B8E7D567595 -14E3D254F660EF2C5EAB9373F33395BD7327777E3DCD4A11B7BFE54CE272439E -E2BCC6F8EF22672F81F20318CA95FBD8ADF3E18ED04A4E73C9B32EA493317B99 -E7680A397A72692D0AB3877CEEB916F8D7D7E7B40D97E449F76BF4B1FDDD08E5 -DE37609896DEBDE25CEE302A509968144061ECBB277142D3512485D11003E3DA -D57C8992A310C2968CDBCB65F3D975EC5E3685F0FB2D24B8E03774CAFA785BCA -F6AB8F5B958FB630B7DB2EFE66EC1C446E5EBF86C0F02EB9A96E582471E48BB8 -68AAB996C02DB531A45FD3AF2696E0A459629041E80D4B25CC6C9F60B5218C9D -2BD697F050E194E664AC1F229082656351C8CBB04F8DE1584411800C19261918 -FE7BA5FB2E4C02AB650D73B4A62E41C15D4A92EE8221C51A7C6998CE99BC505C -DA3F3F384215CE8EBD281393E8EFDB9EF91F03EC00DFFA1B2229D70143981563 -4B52A88FC1378607096431F6B8E1DF869CE2FBF2548B6C1A9D5A4E40821E3FAC -9B15907958C13AB21017A3432D57A0190FCBD86287B5E2AF6DAE27E5F34D9EA3 -1B8DC48F1574D9484951F76BF3411788428D05874F0AF0048192CC05CA43EF70 -E0E1358BF692F8B420358C131E06E33394317AD867CD47F5B91A075F5B72C49B -DF756D282F3702CE9F03BF86CFE4F51FA00D186145C002F25D4F897ECE7986A0 -5308DBB80B40B71FF4B776BB4B3F82782A76EEEBBBFC3278DA716868DCBC097C -D3D3A37B935809D7FEC58B537799E1527E7F0094B11490F9999D23D73C129A0A -7048D4CBF9226064A31B3ADA9C19254A20DD1BFACABAF15B3DDB06C4D7E65591 -3624A68A5559C9BA94E47BC2C08AB8C6FA3E0A2494EC8B40F90E0CBF14E5076A -CB91AABADA49BBA79CE47E70955200256475BE67352A65C75292AA82FC3998D9 -DB4D7E5366138B7C516819F0EDDF92351FE34CF73011FD339B0F8380B52D7C9F -B7EEFBEC433B3CC2EAF0BA105559172088AC7BEBED21F2243E7FA81C59554911 -08E9304C1C252908CA315F95A1A896C0C1F782724D3716D3236DDCB129AC356E -06E4043FC93CA6BE977339C6527B4EA54EB74E89CC4E8D42F3AA2F7AA5BD9D3F -B7FEBDC1F174F5F594BC6AF14C89ACF1760ED6F173759AFA80476759CA2E7E80 -6BD05284C63764047A0AB8A545C67868236411D96751FDFFDD4990324951E071 -7A8E17659FCAAE93DBB7E387569959C4A4AE5F069207A13E1D1C7F40802A2D0B -8B3DA376E109A1AA9A428F23B0F9B99650FDEF28AA801C1F9B7291D47880444E -7EE09C0920ECD434CFF5B851A343BB70E2CFF06854E78A1F92CE831BCD253713 -4A92308D405B22D204FB7139CDBD1B14946F2CCAB6242DE87C5C7565EB1C9D99 -85CCA6865CFCD57DAA7291591A202492CD863A98E17F9AC2CD9867EB827E70D6 -B8B81A6996ACE08112BF38BB07BB78C6C879FCF709F8D94729D06D3BAD9CBCEC -E85E1A08576B1B4192FF26B6F923D08EAAA58EB670D84361F9688229A9F103CB -1D43978B1B067FC31CA0AEA33B5B244D7069C29B6BEF12907A78ED5128D678E1 -67C39DEE6E9BC38E134FC55DD7692F5219ED04924CE8163CC566BF6D6B331456 -4047FA2F3B2C10D95F1BA5E7E527C539144B135D3DA214B88DDD2B024E6F8F7C -D943E64B6097E559B860E235E2CD13395DD7177D7F93070B8C8EBADCB127162C -CFEC2895632A15CF1E55A525D342F96B023648E8C5479C6AA0A9BF9729DF2E70 -DC54A2A26B1DFE7BC7669FE938FFEB7582386FDB2104E6A19042FE6DDA8F9850 -D5AAD74050D5318F0F8D4D750A4492B50C2AA395795CD635C8A914B707B14E35 -844DDE1DF2912ED6B078D2685AFFB987D8C4D86A9DCEADDEAE4DA772B947299F -E5A438058A936C0AF23106FAA82C9D8BB8D414EC5371A2AE978F99513B7DD837 -A6BDFF5551C9467EA26AA91C3900055EE65185DACE0D675A8BD6C9D4BE4B006A -FE0F89713E038B7372A86D4A40532D6AD87D2FE7B62B3D2EC605DD00377A55C4 -E8392D8D3ACCC84664AC3E30C18D8C486E8C502196F4A36226C1538C4AFE302B -846F2A87AF880514CE1CEFC5973FEB9E9A48C4E356EC79D3AC1B714E23B7562F -AE7199C0FA5345D37ECB4F371BA123B67CA068CF67BBDA93268F4E08A5427FD9 -0ECF6B33837F8A4F42B37530FA5AFFF10D8D558C9B55A930CAE49172A6D36079 -3F952690DC1D987F2D63015B3DD6E2642B97D7175E345E299FE57C3AF1E83E02 -B34BD8A4244D95F7CB1AE5D501F358051477C15E534FCFE4C637E316E5701EDA -1009743C789B2FD633798171F4E88DBDC447ABFC9C32701527F34BEE07FFDC36 -003856BFA9325A4F7D1611CC5B36A4D7604484471B74EA3D8D5A28E9DE243332 -D3C6146772D773971E5BB3CA34D8EBD37C8F435B0BB57AC9352DFB3D09BC2C92 -E9081DBA9D8BCBEBE3C2C42066DA13188A5DA5939BFA435FE5D2CD8466EB0EAC -4F735302C75CBF6ECC96969E3AB91593FA24BA117BD0BED4E3F9A51384A5FBB0 -BDCC7A14B31D8833C1B796B8667FAE8348A7589218988BD4C2094B1456099BCE -0E925A5673C13BEF4F1D91A72B00B75524E9F2B6EEE39EDCD8436A239FD6194E -02AF04CE213AF8A4DE0BEBE6103A1CA891C90F1F79E34E8D7217B59F1F8A146D -94017DD36B2610883692D55453BD9300545764CA404E3699548992C65226F772 -19066C8DC53B6CD2E378C0773B10F16FDEE74FFD370EEC6963762A9EE64FCAD0 -D793878A07386CDDC0B00A6E3500D50536E7CEF106105AEB4F7FD391C7825C96 -3D1492F6B4431AA74736462D14F63CBCDA4CA2808E3C55BDFBE668F6B1AE5F01 -4A4B8A8EA303C345CA242F0D9CC02F1BEDE134C6B4FFC0231CB3F16D0F5ED86B -56A2D04CF64925215CC4DF3B51F59F69E99DA91BCE06D02872A60E8756EC89EC -15FDA8D54067FEAC2E07483F66B00E8FBD5BAD31BB3DA45A549B205B2525BB6C -74B4762CC4AD3BAF05C4A1A23B50BB22EB8D88603B7CA3052F83FBFF2D7E49D0 -438F3810F8076865973D1A4D2B06F3FC38498935E6CF0DF4DEEF6335403E4748 -611D63BFA4273A823E027AE5868907BA7124FBDF11C4E30446DBC2346B4595BF -2CE8784006D1AD74432F5A3A1E5A7E6E69498995114830D4C7C9057B0AA4476C -A9F5F44B45861ED13CF485B3CAE0E0DA24D805B5FD78D96064EEECAD82FD881D -6046574FB32545B5B9D65C46C7605925054241013115C1B0D112DABDF00B45EB -11CB82077372FED9B125B9091129BEB6F8F71F093CDCC5F3ECE4A9D33B55803B -33758CB9F82DF01DE13A7E8C800BEDEC6840E37AF32B40A412F6DFE46E9B0469 -F96589AD547D14F75F9B694071F1F6F7A459EB8DB009B26B9DC8744E250A99BA -EA1421504C17BC772862BCE3F07EE747D57487DC8A611FEB526095B872A10902 -6839B37E552D2C798F761EC0F1698AE49FD98B8CCE873259B911D61724EA6C5F -5AFB0E44655BF454D1D35936638684A5FA041CC0E1884E362ACBB04BBE704282 -86E87C674245143F5E35B598F431EA3DCCA443318EFB85242AEFABD64B8F1A21 -CA7B1E372748A25ECCA6DED3A7E81737AEC77561723ED57A7006F96D17B8385D -91BBEA3A651B5644FEF22A577543169056230A6FD1651EFC5140F2FDFDD1B417 -4B458D312D9B58176403D160628EAA9E99CB5CB7658DBB9A2217CFF17A3F5761 -39C720A5924739EABEB75FA12277C5389166FE5891B484C4F3317B2513FF0EEB -18DE6D8CCF1306FD85C5C19D47C1C36BE1BC73957F8291A641E39877F3ECA3F8 -25A539CD09D32741C725A7F7520B288670AE6DB55BD2879005599744CB54B1BF -8759C7EFFDAF992F557C13CC77A95FB0778628713ACA9A1A4F0F9B5304A2E828 -43F6DE633DC423B4AE3AFACE6D08A2CB7BA7CF2A0AE3D52100A3090637B446B5 -3D69CD48477185434B35884FF9A965BC434A6AED30C26537E14D7F5E27438F5C -CE5A8F4B01B0375092137154A9937719C3D6874C9D1136DC203C1F5811BE4C8C -9E10437D27586D4FD8B4A8146B0C96A4F13FF403188A9EFA26D0974C731CBD7C -143B1AF2EDBD2A87304C5FA205D285D324BD21C1B8CACB4F5AABDCF81186B08C -19A8FCE8F94CED88BFEACF2A6E237BACEDECE38B60D581CCB5B5B5D86DB88486 -0123DB51D12D11E49379765CC5994D16666C886D18A8D44DD3EF0235E14156EB -EB767237EC9A93606E034375048396DAACA3D20F55666D0C1357222572E72404 -163C6F5F398A73ED1395AADF530282D61879A6DEA51473A286EA7F6243CADAE4 -BA9342FBF4A5248C1915590189A4616A3C774304B6E88FDF20930552BCC493F5 -0FA5DF80C3C72608D532F4F5933A225DE0F261A1D33D866417E49DD3C5CAA669 -853AFB20D792FC6BA87A46049621030AC1B7176156B1D2F49A8DB24861C14445 -4E528E2653D4E4F41681655CAF55E57A8C1D27B60ACE5AFCFC0EC8839CD99387 -880E8CBAFA86B397E8E4B6B286A8BB53EB55CDEB3F8A238B15A3C1E5BD457450 -E3DA8794F224C8EEE4A09CA8567A4E71FEADD076E0CE221A4834B817A5F5517B -5FAEFA742EB1CA422822BB178B19225EC5B90387929145F7690A2ABF9043E595 -E67E23C9482385C17038DC83B9AD1EA4B0D5E0E0A9BAF8355EA256808B55366E -FA65F8089A406983191238BDCA8F61C732D99E204CEFCB3F344BF39E240B8457 -5A6204C0257753542985E7AABE35B01B991AE9B4B10E87B3FC44BC3A14479902 -CFA8572E0D255269B7ED30FCFA1023B8A614586C5A2722EBAEB9DB53E87BC93B -BDC9CABB3EA3BD4938893D2C8F2A198042744213F419C5571540E96741435FBF -6AA57E260D84DCBE3A214954028AC1ED4DB2C6DE2DBF14A749647E1641A7863D -B91A9801261731B65BDA550A199941158AD9827527B9D37464B8614438AF6008 -2B285CD83AF213BC6AE6198208BE43540B76165A5D5617C01CA772BBC98F9C30 -52E67F6E25F7192D36A130AC18B71E38D20A724E28C109FEBA4A3F1D677C8B67 -42F22120C99FA00FC0122F18ABCC0D24CC32B09CA42D428508AC63E421F9C0C0 -87D277AD58DADEFDC187ABC7D79F8504DC1113D70D7CEA1B4783AFDA128EA7CD -C7860C3ABEA3BB53D7AD6EA3C116756E282C509058D599FC34B98F7022CEE941 -7108B44C0A6AFD98A6E79109F8685FDA6C2AFAE11BE2478FCD4E14BE04A19DE4 -822906ED944EDB5B532DBEA395A09C7156E45505D43215863F63B635C5A30F6F -C7E316DA9650D9B5EB90F6A45E36F2D2B2CC89E18A246FA7D391A7728D51B18A -D4C92D0E97BC88A78D5F3F5107938BAEAFADBE744EA9B9921177C86435A6475D -5CB3F71FFAE0132E0F288BD509993DBF5C35A5C3B87EAEE7D3ED71B73091562E -45B022CC7FF481142E18A8D98EFE703B4AC8904D275B08E51FA0DBA6C6FF4E11 -0D0334639A04311F6AC5ED7E2FD7E81D573B14DC0A7F5A6720D2F2F235554B8E -7697BA92F17ACDD426E107A266D8DE4F774EE90C8FFE38193882015FB1FB1F77 -DF9779C16BEBDCC6696915D5E977BB40BE17CEFDBF4BB2340B35610F2BD333A7 -E0BBB08338C5BF12BB103756EA1BC94566FBC0F1549DE72DB4404D703DE8D566 -693DC9A8BD6D0679D54FE8FB5AC0934D2336600A1B528E0BED9F18B93F6CD0A1 -9363ED941A02704BE7C8EDB90C7CEEAF5FE0DE83DE1AD9398E42411BDBA8C9FF -266FE82D375FF6B6B6B42E3C72F9D310A3CE90D112F7F0BABAA8FCD3DCBA9870 -91AA07E001EDB3C1B8452EAC75169E0A23C108FF9020C4CA9CF2A0E2A20E53E8 -42146154259263EE4BE01DFD078472363B0481B730FFF03E6B2322009818DF2F -5B7BC17D57A70A9D02A1ECFB9CFAC92B4C43DA454E97EE9AB42FB800F397C403 -785B59D0961536165B7D5CE598913155A75310B331E633AF46A818FA0431F7B5 -E408BBAB437A7B9B47BBC875F8B7B14B7B46A421CAA505B3C6FCE2D6B98FEEFA -BFC8DB0B5182FFE040461498573AFE9ACC85EC4AEDA3FA37086CFD35155115E4 -0F5EC7170E19913DC7EE88132663A1B1C04521A0216C73BBE09605D3D76CDEA0 -53C53126DF96298813CBF9FC2074167A41E9FAF05868D80CB78C1C114473667F -52E8DA719E7427A6F688C5736E59FACD7B86856AF7AEAD82AEB9A3F3B76220E0 -1DB2ED0049230607E78DCA5CE38DA174A9CE4FEFA0EC187DE2020D472889E553 -C988AC4A918C3CEF06EF3BB4EF02C2725D1A9EBA406967F8A4969694E929C1F8 -7D85E82A434C5C5E1C5D9F03AAB7FDD6DA21D3E95B0F6709BA6CCA5F37D6A7EC -58CE5BD8C82FC1A5A1F0B90A6E49F14B04D8BDF6243CEE499B4303B9FC35E853 -1FA4804F9514F966FC5263567396E28A9F605235C797ABAEADA1C71646A2FF24 -2753C6D3A5348441F196294860D44C47DAF1E50B004CF0677CEDBB7FB842B7A4 -90E4E31E85314E9031A665CC3EC0B3F0368567E154A4A6CC206CD8AE3CD45061 -AD67FA9594C4B3FD7BB01C6409D9C5E232323C60566E0C254DFEF45282E75676 -5BA6FBFAE1FEB9477BA7931C2C47F3EC2FA506E7DF6E1D4D7C60530F33F4FEF8 -DBDB65507F002E7DA817695508896578D84E2124748EFACDD527F4190E7C8931 -D7D30D8A7FAB5FFB4F55B8DEDFE2CB84230DDE12C54106FA697E84B320E0D508 -ABD664C7FE500549229636138BF213EB55CB325210895024F8F748E9B8A85AD2 -D5B1E888A503C4BCB2C5BEAFD980C202A0C580848AD9B7088A53AAF4AFE7EA35 -D1F3E05C7D1348ED6EDEF9D477987420E79590D1EB76F33043A6D18644FD3F7E -E65597D5C699447573F37B082DF8D4527780A5B77A7A1C337759614B6B926183 -83B7585A16886CEB3A8EE1622BEAFF917B2397FD7FA803AFAF8F0DC99A0E202D -795B4FE27345F3D275D29AE0A13C258C2EBEE48E5332C0064B1E08F82E2D7094 -705BE9F0BA6CE2ED4E7C34FD707F4DC9B586718D2FFA05108ED8F7623B9A11FA -01D3A755250131A5BC85DE837F8F6E4C56721747A00830395E2274B7116C3845 -EEA1DDF51FF498DF2F143DDDF413870FF42CC4F667802695233C8BCBFFB5BB9F -C416A5AD416CA61832DB67A517345F041A85AD1455D7B8580A04CED89CBC40B9 -6BFD0598668F99616579A960061DDBC5E4EE436730C932D645839848A1A0F5B0 -B8DB725B2D83F436E23B81B04B3154F98DC99032AB08C897DA86C933ED50BCE1 -4A728A52FE09F910F7E47BC3F2DAF8C22DC78DF9EC66C2664782FA94B3B9B56E -49481B999BC60526881A7AEE7DA30EAD63A32F65D3FEED5D8D6CF94BCB618A83 -82EBD5CB11DD9DF1527112E4AB18BA84D3006F0A0E2C2696C6730BE9C8056FA5 -22D5215932558B28D2CA5CCF2EF5075E928DB301202FFAFB2578BB25DFA6B1C3 -20077C418C1840245F73F8E9EA4C473E182A46A33C3CAFDBC0BDB2B67442BD6C -77F2EDE389AA66AEA8E1047FD90830FFC5A53C05A9A5F02361953A9A6365F866 -68D2AFB36867724E5F1E4E15DB55CB82332AD2B50D1F4FF598743A5BD27770D2 -E80178E01635596CC17D1625C55E7BE5C9B23FD330B1CD1AFC3B250A359F47F7 -25E6A837C96953EEDC5A4F3249F50435432A4268710DD9375AF252C2B1A90E67 -92545928DDD1FBC28971A075EF7F17AB44C51D4F5628AFC8F53B1EA0E92BB299 -E50CC983132C0AB98BE00FD6E9E432876859B25B9835185DDF9F88BD9D1045B3 -3498F720E9A146FEE51225A5C72758350B48938E63D92D16EA5E700C48EA5C75 -B493C810D5490EA12FEBB381ABBB5AFC1DBBBE50AEDCF797DDA608D4A4412F20 -4C697DECFA4990F5AF13CB7223442714F907D5C3E41A01CAD4744B346327D7CB -2BC0B1CEBD3E711B8E63A7A28A21905488B6AE388BDEDBA2C4D81DB3E8AB4BEC -105FB9C0A25BC6FF47973AAC6AA236B16D6EFE49EF27BFABBB061535970534E0 -04C6851F5129A7453CB74A1E4285B560ADA3D87305E0EA0BC89F0A6EEB2AC5F9 -14520E6F791AB083DE23866A4A84342D751D8494873F1064DD3CE7B7FEAABCAA -EA808E944DC0311ACFB1DF0DE76EA38DE7E33AC71EB7CC7135D94FCE33FCCCEF -AB068A62E2B9D20DFD65B57E7F436DBACB5E308A8E4502C37BA0E4DF7AB021B5 -33C6C93C8AB613AF3D96D7719E56809453BD1E0900E4AA9F01CABB634D972346 -081AF11A1E665F59E4BD86491205F43A6B21EFF8056478293CE34AE045DD7A57 -6C5C33AC194764C0DF930EDBCB162E093452D15A72934141F683498684C951D0 -733DB2FAAA862A3D7A4CB337366F8793A9B865D70EC280CD084E71484805D5C9 -7823ABCAF00585281C5F0934329F3265E38045E64752B28CFBB668C8077C39E7 -53704F2EBF5A95A8F6879E2135374CCF7A50EBB6DE63372975EC7A83770BDB60 -EE4F9DA3CA3DF1E31E5B489AA62E29B92E90C3D95E2C5D9F285CF3800265D8B6 -ED1822CD6F328059DF29C154ADEE3FB10D56D8600055A823E10D9EBFA3778A5C -BBCA59FE3F40EA37F67515E5F947025F64785F172213045E882BDD672F434B3B -2B4BB66EBF9E85934F3F3794B9B320D1ED0AB3C3B68477A595DAC9536B2E4C47 -E6B7057A96359B57E02F7282F35E9BB1A8F7DB62C9809BB21898B6402903487C -2029C7300384B376346424D99E2CBA82126666335FA8DD0B5225823A733457EC -DBEBC89FA3FD249BCCF746F8434B8E60EDE335D0F515A063260D6C6F0B6F5691 -96CF588D856421AD4561C864E0ACF9FCCD4CFDB4EBC60656D66DA3C1DA212A55 -6B4617DEDA813739C6D3D07669EC10F669711A17B460C00AD47359276CB293D4 -79B41F1CA8CD1129A6313A2253A29DA8C2CF46997F71AF365954F5F612141198 -8DB049ED9F3263D3AACA68FACCED6F24BE3E5A9E602F775A79EF90AD4FB00789 -D60896451A39A34648C7CFF8AF04BA351EFD772CD253BD902AE55EADB42E536A -C1E711854932A03A36D7C3863CAEC28E4FDC836265504FF8406675A625644168 -3FC2038FD2F050F8C23233E0481832BEA328A7FC5C45446EA919DA3ED28F8CD2 -D8D93AF013B006C46E1508AAF9D159C348E04AA3E78119E361A34D67958DD040 -DE1781D010C6F15D890C0EA00496E8ACA9E3440860FFF5AC4FD0507983749142 -F92E2DC5B8082A5DFBC0CE442946ACD947E8127AAB82E5A60176735ABADE226E -8A11D6D40F267030B3415603F18A59BF6F546F5C72DCB84B9810DBA500ACB230 -2105356AF679B3AF478E0B0FCF991FE2F2D046280CEB35647F7C63A7D6ADD948 -D22E8714B263952E07716678B4A94B5A5764C69A6F268CD58285A82AA61BDD7F -3CCD2DF266C35605FF93A95A46C44E93514094592EF43425FE5E1F49206F0551 -DD35636F54BCE90746586FFEF34774E43D2DB09BD6A06733DB1D8648487BCCD3 -F1DF35D24638B081A4F04A41DB88609F63CC2B720F96171360D74DE840EACFDD -36E8D3172BDFD986A3F7EE97DF58B1BE6867C306C5DFBC9F625FF2F9F743A884 -16889BC87FC49247FFA31F3234815B6BBC0599A9463E3AEA983346F55DDF8F8C -A19517241D59B502D099BA9A1A254620F087DD37A20AE13AD23123873798DF22 -F94E28ECD0B0BAA8DFD8896ADED992182F78D35FBB5CA8F95A69984FDB9480E1 -3D524CEA820DADCAF0184A565A18AD4B756A287880ED3125581E4F094C6D4AE5 -3B7C7820C12458DA98A99A97DD7F9587E9352F8AF642133C2F9E2A646B97920D -C9033A1E95F5F8A1EDADC9B6E7ABFD29F9CB8DB9365FC60B50BD8C0506A62EBC -EB8A8050C1ED1A9E0A7F975DEB2BB91EE0340BDF44538E03C102627691BEF28C -4243BB73111382D1F4F2C9D328EDF7674C7CA2BFF1570E52C3034B13E805E75A -DC945433E1222B4A711B6508C26A4C3D0EAE6B81A664CC9024907319AA5E3423 -F9BC4A45A2E2A1330D2D6E6D087ABB22BD7F1006C1E8763BE1338E1C993432E1 -654098913C062B102A53F26F4A730E0756BB4A47FE961EED2A60C6638C1EE93F -75FB104D556413B2314375DB036F4225CF86CDCA28662730E5022B980EBCD6E4 -ED29E615CDE69EE00F5DF937096A53CC303CD9A283950CBCE8BA1DC7592035AD -FB215A6E4D2D343FADBA32EF8B9CF34402B89CDC729DC57F526FE3CD4AD46D1F -295BE9B0D53FF0CB06EFF1919E9BA9019446CB33ABE3DF3ACB7EE9F5E02F9795 -BEF2E808CCC7FF21C9EA41C93E9672C035E37B75AEDEFC6384ADFA52A0762E41 -4557321D665719B7F4E43513C997DD56D526C10641CA654C19C2D35AC8CFC0FD -6946C733A51BE65AE583F186BFAA4C8C112F94A24D33B435C8820F99E1D10F4F -BFDB89537ED95354FA009A4ED9F4E3CFBC93D8FCB674F0E1C2C4716A203389E5 -A38E42C10A4C41EF6E63BC0B7D584A97FA508D4677F037CB1005C90816B90E96 -3B8AD64FC8D63E9DB21B4A8DA53C75F4BAC0137BFE9FD710D1B8E5EE3EF21E46 -4C6AF9F5E4676810CC19F9470FEAAB3D30F409AF9BE1BA0D03229F6F5BE5226B -9471585C007D680F356F1F564D723049644039D1D3CB6124ACBE7C6BEFC36597 -6181E15716F691FCE490CB0F05F4E550AD35CC4D345B2BF4E85982D523BD919C -73A974B806A1C8F78507798B5296D48F8A4B5BBB4D7B736C6ADBFD00D2590D3D -924406CD1BB3C89636C55B1C90B69F51861A654D6683A0966FC413C1CED7CAAD -243262B42908A3A16031EABCBCE4FFD02DFEBA01A0831BD1C8171D93635A1F4A -BAB522D93E4E00BB91F7C18B38EE47C5739C6D215E330BA68DDF5A16BB025E6D -EA4094D60332A289053C0380D456924C548588B9A6F0330D351B95E511E00C1E -8D82BA7509A653A4EAFB2002048632D63B9883AF38567E3AC185A82B7DAF3237 -42DA7EE5A95115E5CE652D507D66073850363DF068282134BBB3928551DB1A18 -8FE10A825C388A73C1F3DB270504626154C4D6A61A750578A107F0BA4780246C -6BE6C4B69611B7F01EDB605B19ECBB7A229300893504F5C32E0A3BD998194390 -5FA3CB3FFAEBAAA2175B85DB4B8EB762BDA274FB322FB39CCC73689232CC0A83 -8E1EFA281735FA00FAA4E955348A595240821D120D0C9ACB6CA8CD9ECA4980C5 -4B547873A58BC840A28592C3E66000CB4D7A28CAB1978083EE2847F2B681EEB5 -2D2D892D32904294C8E139B0FA4581782A244742226CA8911F83C1D7C98A2A92 -6025CBF85E82824CECDD6A9E18445BB815FE21E80DB10E2120D14DE94B453274 -E5F65F6BBDB3146690B0B7FE4BDC1C4CC55754304AB6B61420164A88A76E8541 -4722CFFE8AA2664311FB7565B3F4FD6493CA2A30DDEDF03F5749515DF9214E7E -0B219296F094F92637A427C30F9FB712C3E8F11533CF5C1F077E808AF37E3E39 -94D4B0417212312BEBF1F4F03F95A1799E3AA24352B93B2BA891DD6183DD124B -B9833C82F4BA2B41403233DA8ECCD88842625A8DBF00B5E3E83989273A3F7F01 -DC31FADA68CD56C8B95479B21EBC2A295D76B68437B80DFCE037B3BF87CD2170 -8BAFC158730D3B2F695DD6C701C65011720B3376581D6BC79166EAECFEA6F9E0 -40E62651FC8C72F47B47CB2E36A4E7667B95E82C88E20921A52C76EBBCE06CFB -29AB75D051007EF5BA5EAA35FACBF549A85B3B6F37E3D206F7C8D39C2085E3FA -74D3211EF5E61592ADDA9092C0483B9ADEAD2C64B6778AAA14FB6CC8A4FC6EE1 -82999FE543B0F2DEDD7E442E0BCAD4212F38852D6F2183EF8C3DAC77666AF856 -C410454D9F1CDD07DBBEB1547E6718FB9B79D00A9E3F744071CC75C3F48F8BBC -3F09406F816A86BA4CB0D169E473AA3A62D68785283B8C5862E631A9BA78200E -8718AF68C6215B68675C94B43EA901592FB2B8BBD53BFD835356FF45A200AD55 -3075927ECD06924B6DC3F7FD0C4FA9AE61AE9B1C332E2B996612E8D9F49257B7 -10D8C404213210CC338206109F6A0B5C7A1B9AD18E0979A790498C5BB0BBFE1A -3F3249489FAC00A369470B697344E989099D9377DAF483C93EB7E7420DA436BD -0ABA11777ADBB2716927806D95526AA226E1293E84EF76807953C52B515DB505 -7942B890DFB216807468A84788EC815677FBD55C02CACCDB2654585E42DA9A47 -16C0D5DC9D321C43C5E17EAD6E80DC8F3D11D50976FB342E1D16D2BF5C8CD121 -1DFC079858141F3631526ACF733A23E71C187A6E7933715841AADC7CAF7060A9 -CBAC2B04E33B047684487D4BA94B16A4431374A8867504A4EA338E192532476C -D8EAD70E0CC6BD674A8AC75DC18C4E4C2E785FA52F89EFA5F0EFC6F624F30595 -1436CAF9F1682D2FCECD7AD11429EED4F64D82B51F8E8451802D4885418FC253 -41EC5ED0821E7BCAA89BD70A62D281E90938332744896875AA79038971E778D1 -2E350AD149AF542C44DC36C236272FB12BB8690F689C74736C6888E2884BC0C0 -4E105537BCF3C8F0CE8292BC5C044E2C99665F3247AC9330A516A76420D070D9 -0082116A6A43051DA9AC00B71879F1C9C1D43EE163635E87852088A6D3B77A4B -574265A679334DE35F02698EC7884C8140207187933A36E2C577753E168F61C4 -21E2A3AB436CCA9C0BD7E996BACCB156867A89ED2B8F8DCB6DB9CE8FB870DE91 -4D1CDFA268E5BC6A4AFD1B0890998345F2754045257BF43591473F351B62AA97 -D7307BB7AD7C8DB43A73D5EECC987F34CAB192480F570574227E2224A5CD0A07 -3E2BD0287A3C313EDF5781A4D9E1BF2B2B8DF35CAD3DB80E0C5B3972260BF124 -BD3FC3EA966B57D552DE87822AFC04A46291CA66623FE48F0FADB5DD7CB571F6 -F39F0CDD7F541C9503AF6008B389F3B1FA3743AB1774F0C9FD4EF228D1C0F9DE -E10F5839D69560391FC0AA8EFF9D4B83A970FE1351CF6478E4D91ADA69E3240A -B1B09C1F24ABE2B23CF8D74DE43E3301E60F21A12FFF51D03AC00C2B44F552F4 -0503BD7F3EDAE51A89BDE38ED6A4B16481E457517A7E363CCD3FACB112996A75 -771474432AB0F08DB7F5EA12C3036697CE979D321B7AE1E4A0C1323E05C0C4A0 -13C8F18B2F59A4D396182763B94A855CD4CE21E4923B6B9AB3F7A9127F5F5BCD -3C4550F697B4BE1ED870525BC0EA67F994558375C9E6D28D618E9CD9675CBFE0 -BF24A75A1B90B73079E2C7222B866C89D4D0BD9A041EF0FD603AAA9551A64C2F -EB53C41DF2CAC894B78F8C84510C79F11CDF8518D585A2A5018A55CB8EF9E30F -77DE2200F679F9C3642ED792137130083C0F516C98B6EF34758207B799FADD76 -E0939B3C1AB3AA12543AACC2B9BD2642B0FBF48E0427B64ACA02F1BFDC501413 -83E32E59F705BE89284AD702CB6F9BBB88F223ABE70B4256B8511EEE6E21E048 -148E8B4A7945A5A67D9819B632D86D6FA1CA5E0D040994D8165A5DC175245D68 -42FF80A82575AAB2B91C0472F97FDC8B537201F2E551D18CA39669DFCF0A1586 -370AA32695557CDE598771E158B023404861CC76464E098DC4EE83D9EE9B5250 -FAE90B4E0B2D46BC459D99B706E8740DD701F4C5F5D1DFCF365B261405541665 -B1E532AA3F9F03ECFF018E9FC36BFBBE50589308137B120975F70A3965582260 -1D975C394A11304AB7EB5A1448FC02CA062D2DF50D3611C2C00179501089BAF3 -E57DB91CBD6812C695B0CFD658D3AA7C2C32713B18D420AF945D00850EA7A0BE -B98096A00D9AD0ACD656D4319377700D0BCB6FAE93A54BF27B3976B8353A6261 -E25402861065694F507D81D099BC6E4EA8D851277A8273E6318739D74BBD7344 -5EEECC73CFAA72DC0B7EC2A8794A5DB64BA9D4668E3E9F330DFD7F27CB83ED92 -C0A8480A15DCC3A16B7EABC23C594309845A4595164711333B2FBB9F877D8A9B -426130F95F3D645A3336EF17DA63109B5BCCCD0EA1FD390E6F0DA649F81AFD8A -1973EB6C74F7663D0BAEBBDD9B0738DBFAA9B7657E7B291E803D14F1EF7EB1C6 -B9306C771E3A5AA3AADFE2060D2323A9758412BB6E44B95F82DCAFADDFFD1A6A -7F194B3E4F67279EA49410DDCC1F7DED6C0B34515D5E203BCE36F8755EB1C2B4 -8184AE1B1B570817B73D46D498358C4ABBC349C283DAC96B3FB23D2981E47337 -DCAA2F7C1010AF1C4FE80B7C22C534BE4FDCBBFB4731BF99A369E1E3D6231132 -F5AE9D2A1D701CA8B9F7AD88A5E17BB90C305D6604986C41058C6CDB78CDD043 -CBF6FE9D482363293156C6069C0ADBCDCF3710FC904361FA0CCAA012D3879556 -066E179E09FF5B001B52E838735AAAAFA899E71F2928562DA997133756576127 -CD0FEAB3447B5EA57BE6C32701D248813EA8B93E869F2137F65D5C1A0AE5D5E4 -21393E16DA6FA116864D07D17B1C8F08560DA2532990E2FED66D0E0FFEFAEE49 -55418C41DF71AAE21318D1CFFF5B38C90F7763B278DC825CD31CE53CCE9CC805 -C5A11B3CCE9EFCB43928C1E8482302CD6B66A2CF7CBEA7E98294F7F25C490478 -3080E7121F2ECAEC5F3563BA632F2E2019398B584284DF9EB96666FDF10AB2CD -2D348D416D29200EA47B9F3CB5DA356DB357E0682943F0E5FA543987EEA76020 -F633FC4553F3D4E2FA6B8666374200BA14F12E9384A8099712A2E17916C61934 -317D443E56D8C3B5B11B5ACF389C6DF35125D399D19EDAAA53049E119EB110D4 -201901CF7D967B9BFDE6A5ADACE2222CCD624B6889D3574CE6E94F956198ED5A -0245956F031084B7539141D01C5B66F6DEBC3C4F2E90E7756FCA65708F755E61 -71533842008AF59B1A9AA5372FDDB7D0CA18BE1EC8E399B4787CDFAA931DCBBC -2AE9687D973DA7EB4F2F764B8EC359017E1877F4EF5B81A4A7684F87C4F91BA4 -54644E4C2D45F320A4A58592AFEA5731D47A118C814136EA91A00BADC6946669 -5EC507D7854C1C3AFAD477A1D844A520159FCBA8AD708B522B2FF6FBF55D8A0F -6FD97F7BB4C4F61DEA1237DA3B8E42409936DEDD8EACF155766889931C4A1740 -4C3C646904268114676AF5B0E5E614930B0836BCD5292128779645E2D8743D5B -75D8442A911425C3932B61F14C97EAE0D895B97C957B9C0489D47254A4ED52DA -99F6C27F314E03812E6B45B690890743EDA6CB6410952E4AACF4EDB38CC22C89 -2E569D597B91ED013F696F06BBA6E6549C4B74B0D6DA6C7251E744CAF092EA4B -D3ED88A4E5F8873528792A2549133E25C27A77F074142E38D2CAEFA2D83E7409 -83488D979E5EDBA0AF0EC16BD4D5E27E624765A93DCAFC7911604CD2530F754B -C64F3F70591B8E91B2C28DFB8A4DC3534C6C74206D562DE3567DD3C2AF1DC5CA -52C91FDCC57B08E23D47A3F9E55E1CCE984991AA4701210857FD85A8C2171FAE -6B08136B3A5A1D1B738D0627F2FBF722F64ACD86A083CEF02179FECC90E2E6F5 -3567678D46B877850E30000E2061F68102B8B8E92AF0B9183F250AAE6C1B7992 -6AB521E20196EE31A08892167103257B1A9671CA14DE2079CF8770EDB83BAF9F -53DA650828761D27C50DE9FAD629BCAD28805CE37222CEAB505D9508558FB660 -04D5550F42CA25880E37B395583EB95891942B443DF0B3B8187D5715EA366766 -E59E29DD4BB93A7D0876E35CC891EAA996CEE283EDAB491FCE06AE7B04D5A0DF -31CEDEAC4FA7E7FA52A9DA00067A7D3BE15C0AD2166D5588B879E6019504F633 -95E783463A8C8418659F3ACA7DA1EC997D7A04D09F8D83784702EA9ECB3AE69D -C56A063B59A8FCA9762D3DA187DBDF3DF719778F9D2578163CA01DD9B5B78DA0 -B5D9CF241A4B8ECFA244EE22D3B59BF9ABCE7320DEFADA12D442EAC7AECA3B40 -8EE795F3909C603B80DA8F2C1DD9441F84F9A41273ACF33D03F111FD78259500 -9BBBA8C3F021C09AD376B170C1C5FDCE2F8882593219D3955D73C0F9827A0A00 -262B4D50A92969469C1A3399F8580B67BA618D99947CC2D6001749FF6E90B2CC -07617E54B52DC6C952B5CBB975CEFEA8E4FAEA7BC4B019BCEEF05729FA72E585 -001AF774F0F62C33C0D9C085AB8952CD7C05F0C4B63DC1C1C2EB91DCEB7A503F -F0627C145467F95C8E9DD49FF2E8513A3691B4EA94A96F90774B839E6A7150E6 -842331ED976434BDFFA7526B4D3B4204BFC3C550B68F8EC23C735D3C23F97796 -4F07C86CD3E76AB44A4883B21A75A70E7C10404E6EF46719B9D00772E515BB65 -7B28F43986A8BA067C6686E4BD54EFF94038750976D74D74833CF394D6ACCB7B -40173D0B70757EBEF5FB4D30C487AD7839EEF48E78C4550FAE0F1DE33D6A472D -CD3031B2A3DFB0D743BA0FF56F6BE3E0EFF3A7471A74A1F55F4F4C1998BAC995 -3B5B456934344CE6D634E1F2D7D12523D1EA8720A55D5034D99543A80AFFB0C5 -D352E32A35DDD0320956D21442B3A6E82E83D81CAA47043944FD10CE1B505B97 -D6466083F1F5C6DC2B2929783F12658766898848C1442487D0091BF263CCD603 -52F2B00878D567075D442BD8731ABCF5D2C83F36A0F9A1E6513774501213BDB3 -CD17CAA600F19DF66E0CE30233080DC6DC9D554D95FDD1AA2BD681D1C992AC48 -329206615E6CE9EB6DE557FAD1B93BCE7E629962E42E542996231E4F5DBB96F3 -C98983D0F5AA6A21279618F524DB66C8863937BF8ACF9EE54C403A7E4F939388 -76F64E7201FE28C37D3745B817F282D9F85FC68693EC7532EC329DB55D4E69DE -30F7515684E7F0D0EC089DE4784617BAFA338B369BE06ADD099DD7EAA13AE100 -6A36A3E098E41ED121FE71C1958477B1B592B32F9A772BB15A8CBE00C2CEF494 -4984A9C5C590BC158EE52960D641FBE2FC2F8D5D47E753F67C9581811A51E4F9 -9A4EA2F413DF149256CCC0F0F3A31207E8E3129A0E3B26A0775DF6FBD0DEE987 -3D30C1F5186B4E26F574B0CFEB2DCBF60DF97E82AFF543A366F9DD6696851741 -AD6AB8351D633BE824CBEBBA9C5A98AE6F1E23B9587F171AAFB43611DC5BDF76 -2BD293B37EF19137CE825A6B8F6413A22ED5E46BB4C922AD40E2650A6B4D2277 -47281F7265F3ADB31C432B7A6B88489D10331A923B403310BC0BA06B85F48785 -72D3259E3737071BE8A118D9549F3479A928FEC0116DA2B41D12BC958D0918D4 -4A8C9CF30FEA2149B200FDFD03B4D0CB0F148E89C344B90C59936A4E7E290654 -81B2444128E79E3D5C8B8A4A4BEB8921C504050F4177959B25F33FD25744080B -4F05595644171EA0FCBBE047F31BE2976FFC586B38B9982CBF76E2A67C8C50CD -3C594701C91398605EF946D3FBD80B96ECB679CF5894525BFDB39690431FE060 -60689DF26CA49C37041EA77CA90E89EF6E78C4BAD0F4ABF33626ACD029FE4809 -C409AE68C321A594E19A081D4835A538B63FE0B7AF8EE3B68F34E2F7976D4EAB -B865510896B0133C287A3B8FAB4FE04E9A9BAC9865A705EBEAE689D0736D39BC -5181AF6B84701CDCB7176BB0F9107FF547299AA8B8C8E8058D6B7805F084CA22 -CE4FB9F8A520835695A71D733CD28991F6158DCD0C43A09314BF520BC86BBF2D -179F0AAD7E934A586F31A196F2A0718B30983D13F8DEF42C59B7F2FB0F8EB3A1 -F8B519E9B9CD59E18B3D5240F9EFC306BBEC014FC566445BD8B76E5AF0252FEA -372DDD3DAB04E6D574FB30653EF31F7D2CF6B6F3DFE397D84DFAB299B7983BCB -8210FD423D64A0BDB250DADE971A61D08B78EDC48C167C579B8926C60081EA8D -9BE64490D5A6CE67CDABBF06041AB535A21380D43ADACD1B5C62664BA44FAF70 -1CD47EAD956DECAC0115273386EA8F78B268DA881EC845EEE5F3FA5B39B0A258 -E475B58AA506B250DBAA66059F7F420E3686FFD482CC9AEA884CB9DB881B4210 -A41BA3023BE3F62F42744379A82B140130FD6037773E62E4ED9AA6DB831B23D6 -672115DF51AD99C61696594E9750E3F9D73B215345A1EC45FE47F8984C4ED919 -B09A00582B00E72E38D602F5285C7F266D95AD1FC045E63BF653C8E781AE40BE -84271632E81777B0FFE8AC6C53CEA0C785E4440D84216D2EE98D8A589278E06D -FC7B5AD41D3DAD85FB465F63D773899CE58DB1991E71F15FEDE9183743F20933 -3CFC0EAF71B9711022D5AF0030016F28D7D5651975C5ED9EFCC7CEF436464F29 -39332330A92D8F8225475BA5CB2A6FBABBA28930BF747396C2F2DC0542BCBC3B -98ACAE77991DCA7C81A3EE50E03555E9578D516C511FCF7682C5203CA9E83F83 -ABB3D68231F4F3445F8AAA41642C47E1400C48322E4276400D9CAE1A62213F4D -55B854C7C255D24FFE8B20F3C67E796C7E8146330E43167FBC56434E40167A5F -9B8A9273FF702A4F2A48B85874D309DB3B4824692E756981D7E53AFF26A1558F -5D7BE49021311B18D34636D3C2572F3B0859014DEE1519D5FC47642A08FD5B7A -CCB41475ACFA477D496C491739D4F32B6239E220A742EF9479A6C09FDABD580E -E172FE89856018DA055DBE38097073833FDC90D9416B81B3B397C38ECB092D1F -98831F1463319D89E2F978CD9F7554E6074FE7B1712560C5BEF1C7E1EA5816D0 -B10C7309A4D7C13F2F5D88A0786D283975F98A4CB847B51EAA2E65A2E822AE1D -1FF5C49B42711E1BF49ED933E1485717EDB08612C7B86B05DEF387C2B2951610 -626DB79C36F8CB5181768B4C297A5FE8D73EB470594CEE2D0B12659D9249D1C3 -70E9B0E02C5B74D16021F039173A98507B189ECF34E4C17F982738B9B48CF9D2 -2CA18E2405D929A1F0E75094956689D7B9407CE9A8B392E1E4212FDA5810FB81 -E66BD56AC62D271947D981A459D0DA12E0FC520A54C7369AFFC40F698BBAC99D -2128405FAC517E8E273869809965D208642C73531F4C670BCDF69847ADC008FF -087487565C3353749DF7368566850EBB3E06B9C79D27E7792E48ABA5DAD5967C -D3F5FD33DE4A39DBCFB1AFB37DFEC440165A03CD0F9A0B0D72ED78A56A6A6C78 -CF1E06EF1F4416F01576045A26722A346795FD4D4D76AB3A19660018B26C86B0 -F45D403864D6EDBE6231764590EFA528FB31BA9ACE331D3EEBE9871F209336A3 -935E8842954CADAF5386325C4BF2A87969FAB335E9FF3704929E0D0D5BBA1D59 -795A5328AA2CC4FB411C0B5898C092B1911334948BA2109432AA5045264EA67F -5126164BC3FD96EDC09A44809091872EFF39CA0EA66EAAAC6314C61B505141FE -A631F8B5862B04B1A4DE1DCF607286B2A3987922E0CFAC1D88FEEA2D2C027C7A -121F76F9433E5314BC554360874933FD7AED268986B789FFBD6D6535772134A4 -52B2930E0207B273C98BF26A0F6515A4B42F39A4935E10F1BFED78D292DAB6B5 -105A43E5AB00181A6E3F035B28C5C3BAC2B6E9E6B495C08910101E47AF030DE4 -70208324CCE7E0421173166BB245B544B9BD102374B67D02E99FBA474E9C96FA -963CF1B714340AA83F9AD5AF75B468A6DAD13E1F7420ACB51B0096EAB900C4B5 -2AC1D2866B273BF011E2C7C07F6FCBF0AC334A8A389D0F351D3C74D403EF66D9 -39DCB12D7DACA0F5EDC39F2FD220CEEFFF2E1B9617F305CDE3E740C066A0166D -EA8B7E08FD185D048CBAEC8EF574F59FB4F80DC8382AB91F56388F586D7C4B4C -3823847086B9EC3CD99DB118DC89066090B20756EF990678BAEF4498694C0884 -FB309CF7A22CFB79BBE1D4064021A647A957B773052A0CD872AFABF04478516C -97F76772B6F511FC2EB58980103DA0FEB32E61D0C83FED84B967CE31C5F19D85 -A566ED750CEB9C8BC798CDD9F0138BD650943137394BCCFCD97EF2DFC435B337 -4F45AF417F9388037B4C5FB681F5E11F3BAD9450632E1C2DCFB263EA3ECAE66F -AB78AEA057C18ACFC12098E0DD71D16EE1794904252BC427298F69D9FEA435A2 -F00A5BD09DF5C57254EA62FB77B0248873AB68DB7A60413A96F53850EC693B1F -C5D2BBDFB6B197500C2CC5F35597D452A501E812C102F8C235542FB2E78278D0 -E1C1D0C96CAF2628B54C98E3F32DB8D62CBA3441A63945A250EC21C4BB97CBA5 -4A80F71E30CBD8D974EB3FDD3ED45EB008ED54D76BD01766FCAA8F6753402C07 -EF04B9B2308F66D56CEB917E0848C72ED4B1E290BF4A6FE7728CF68A23F6EA17 -3FF37E5F9574645DBED15C540C0DBA3C61E9C02697329BA57C29F3D28B5D76E9 -9EBA8F527DFEC6C96CF090804EFFB25E1458FC5897CB9E269BF2FF6880222F28 -1988909D794620E260521B65CBC1C495DB903F916F50D15F36034506E0838CF1 -D741CA25C5C2B68679A056F03F65C842BD628A2AE8D73203876665372DE0B048 -C2FFC030F600E500B5699A7CF7E9DEA818A5653700143FBEB970F2D51DF32730 -FAA372EFAEA1A4E15E6C2096AAAA5AE7DA3D9C05FB11F83E853763DE89AB47FB -89411C369F036A03D881664AF026D76B52742B74F6DA12469E8D560D3C2E2BDA -3357A562201416BAD3F046BBBF27A5ED52C606C96CF2FBE7236F0D76E10097E3 -03ED4F6A70BACB2E52F00C260C61B66040946AC7A5B4866C61501A883897512E -FAFAA687ED471B7CCFF704B4674CBC082B07179B30F0A78459B6D23A16C49C07 -BEDA6A23F17F25F1166EDEE0B17F43AF8D897DDBD715B9D9FB540949EB3FB4B9 -8B749FB156374E73FD7EBD72EC9C4FBE54E24F17AAEF29B1E846A42C84D3A1CF -27E2E59BE76B3A8828A1EE70887CEA3DF74A7C7DE9A239CCC9E9770740E16E87 -84EDFDEA5B34168384C0F429178B7AACAE1D37A731AE1629F8971811F032A2F7 -A88C26E73311F6BCEC83FFC99B01DE9BC5FF9F34999DBB568199CF8EF8836704 -192CD77B452622002C3DDF0D5BB06FE822B0583E00A425D85A4B29633B1DF56D -9F5F7CCC9AF8C4333AAB65841CC7A4FEFBD07ABF367D0E691E22384362F43AC1 -4EF4FE416F8FB32F29EDB2A20BAC9D285D78F8DC79F7677DCD002E4A30C98DEE -4AD9EA0B00AD161BDA8B6C19922E9840B3C2E96CAC90369FF71A3E5311A4334B -10F53F90109B6C218EE7B8D23A95A766DE4D4541ADFCB4A488D8F913F9D07D35 -2B303F2518E0BE70549BA0F0D8D33EBA0CF23C610FAFE29C1302D7FD008972B0 -D8E9DFD0DA84C8CEAB1B160056C2B69F7EDDDB93B069C8E4378C7777696A7ADE -9DFD45125F9609D8403F72905B73B813F320B6AF2C9D62532328C65FA25FA75B -9B57A65347488BCB948FCE4E3843E9A195F5D6CC1FC91CC9D474AFA91BDB9F0D -457D08F869F21A78800D1744957848AB12982157748ACDB74814C05F40C5C630 -171553B9A547AB9650509B4C8A02740182C0E902120721DDEC1EAB1AF4F9EB81 -2EB8B93EBF9875D368D11696BC7AC7631C0C357E4E90F121B58009626C101972 -BC86C45D2444AECDF6C734A9D14CBF243777B970247A6587AA078EB820DD9131 -2D729B6B7BC569A444460BA522284509F8F5A70BF465F20EA91733A07648AC0E -D7630DB0AF9FCF9FEBD09D8847C8CC6CF63424A784937F00594D311AEC11B55E -8AC43A2FDC85DB70DE025FFE25F1D314CF06847BF2DF90EC2F78116EC8583A3E -52D8B8F0C8EEB01DE18B3F288710FB14DD0E10A8A4E7704662CEB3CE6E856FE8 -21AA289801B84CEDC7FCBF815D2852247C8D06922F8FA940B93421F256CE37F0 -441F8095E1A3481AD60771C65113C61D844E489725EA5B34501709463897CB5F -B01CAAA3BE5109B4A49E -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l048016t.pfa b/client/nfsexport/lib/fonts/l048016t.pfa deleted file mode 100755 index a14e7249..00000000 --- a/client/nfsexport/lib/fonts/l048016t.pfa +++ /dev/null @@ -1,1269 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiSans-Bold 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Sans Bold) readonly def -/FamilyName (Luxi Sans) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -39 def -/UnderlineThickness 78 def -end readonly def -/FontName /LuxiSans-Bold def -/PaintType 0 def -/WMode 0 def -/FontBBox {-224 -211 989 1012} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078988 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D830D512B6FF3BE2CC450E -1D74C05D938346D8713E75C290B6906D919052118C8C44FE8218A20F8704A3AA -2AFD1790F3C31C39A443F7CB470E4FF7E05E8069552396C1CFACCDDC1C77FED8 -D4E7A947701898A3E50351EFEB35877FA44F29F04D5E5DCD51D55B1166E650E9 -6DD6DDEB0B5A4C018BCCE2D2FB26C42058026C5EDBB9FB634954094EB160B402 -CEF86BE7ABA16B63A88F1FA3A87A267C8AFD876E1910185D01FF64026182F83B -5D30CB5CEE202C27B727DF2E31EEB447AEB941B2FCAA382353FEDF664D72D31C -0C3D1FFEFEC97E0F0DE0352DE4DCD8F4878D9F677F89747B330FC1582796AE19 -B79B28EA2B74ACA2C127E3B4A3ED23A57F4A48260D2A401F4668E48BADD96502 -E7F1239E705F21FBC7C4FEEFA3F9F938850077D029227236D0D4F3E1FA17958F -36E21AF35E8C937E6D0F988233C8438BAB6019020698D80B9C37EF035238364C -E57BC9ADFA77D4084795CFA6A236CF1E0DB7095F4361AC525DAD39DBBD9D3D32 -08AF35AA38CEC79C2BCEC3B3AD52C93D4F14D25535A391290532BCBA80A9EF67 -0387B566C065825FA04BF4998AEA0942AB50727D74038FB6B602BF5B78C4CAF3 -75F946BBBAE55C32E858AAAB72F9BA53CE6725835E5654791953D26F7DC5EFB5 -5064F3DA56BE3C0A7E6BDB57D59843B0AEC11922A53B1243479DB95B43422F05 -95A1515EF0165589E6D74398C0D2C9BEB6E516304A4AFC8F76161A074969107C -48FBDF8EF6BF7EACB8CCBC18D39ADC605A56A048CBAA3828854D358D473A66AA -DAEBB2FA045514C5AA1B99A174B2E8148ACFAA807038B0A8751EC028E89CEC7F -6D30099DDBB811888C900488E09DCA1D60BB398DAC1BB2A39FAD166B6444C182 -8E8993777B38A3EF591FFDAB9BDD2966BAE15327808E560AFEB82941B65E7B3C -49B3C59330E2BA07204301F845E32EB608E12204EB511C09D06AFCC2BACD0654 -8B70A1A15916CD5CF40B633F3626B85366E1DD3545D14D71B21184CED78AAD6D -A7B16AE3BD38FADDDABB38EA2BDA49EDC3926B1526C57D9631A664E872610478 -84D1DD1A3E6CA785B5630C31ED8EF22BBFA07286E8E446F1DBC37FF4A4925A99 -DDAABEB0BAAA3DF5E60C3ABDE27C49F5483FF1C9C3358D3F1A37C2DA1A4A53A9 -F4DE466B3375BCBCAB491663DC09CF549A191B4E53B533D4DCC3D65F0AEC3E95 -15CE5CFED746E12CCA4663FF4B93B36914A7688F13BED3A7A4B62F272199B8D1 -01CC86E75715BEE99940BD3B54DD82F8F3C3BD993723E0F032A89A46E40D4187 -EDCC579654DB07E4ACEAB6C1031B35466250647F37A36B1FD73CDBCD9ED005AE -855D6AC8C5560B7F498FA3DA42D510AB98D922C364410F36D3AC8F27F0CB185D -004AD2B98D3AC972C91E47BBE1C2766F2A3480176645B2F405589F151719DFD3 -7E40DF255EB133FE40C48966D61B175C9C1C422D654DF914AA78E6139E2EB05B -D3F4DB9CCE46D7FB174B210C45D7E60B2DB14145DCAF2B5013C53BC002762DD6 -DC0791C4FB9031CFD24C2236AA61AAAD8AD8BCD9045EADAC9CB6E6DBA94BF817 -C78C0C686A7EBBF7B37BCBD484393F5D53EFC93485C0FBF6331F3A5D0A0AEEBA -23BFE63E49B48245557B7C88B478FCCC333CC083D9D5F0CC2335D5D908413AA4 -8F690E81E40BBB674F7E2E37F37DCF5EF9DC6D7CEA3F7CBA27FE86AB62F65F36 -B2F0996F7F1A33BA903243ECFDCAC2756E95C19E4718AE188CC7384BACBB2200 -ACA8A513F352B241EDB68CCD6A74273F5204CC22D722A00F9930E874515872FF -2244342917B787EAB3341439041E3C83667441D2CC74FB58195E474A55442280 -75BA96B201E789EF394C54AA51D2E55EE43257442880FCE2676A7EF904B01921 -74C50502863BD66DAAE2381309F33A3DC0F055EDCF96B2B6C9ECE80F151708AA -750A0F2BCEBB3ED6E586340D9DB7E78BFA775366070A9E7EDA869815A4AC7B17 -3F139533B2F721832B5E846AEADC4E952C709B3F6DC3185A913D0820EE1933BB -0B4AE2A6AEFD68C99B7AAF6B11D8F012EB816781A8A0A99C2EC174B0B6869F2E -3D373E1CBB2EB3FFCA74B5A3B1667ED301AD1380A02DE73F258D2B99B81D7AD6 -00AA0E604200A17BE9AB1403086BB55B80E6B693B64C48A7AE2217ACB82FBE70 -3EC1F87AC9FB2B637D7D943EF4C4F6A49AF445A76A1BDF21F67493075AB227B1 -F36A743201A64A3797EA6539AA99A864A57DF2B651C3A77915A6BAB4B17E191B -576C80E4023A77559305C25CC0D75E6BDF287298EA30D2E916F97ABF092CCEE4 -FDAAED0926B95AC5090C01ECE24D507ECAAE990D7808F294BDC0DAF5E74341B8 -3B9406A60C3CD4054DE11CBA95BC1C4F57531636628524311AF3018649CEA3D2 -1174EA1EF50985964346A8AAFBB7A38EBC9F01192D741665FB01CAD36BC34457 -B0E2AE912666E96B6E4F61160966AA3E2B051CD61584D9DA998FF702FE01410A -62DAAB390155A045DF241FC47FE824E49A5E96D3BB3D354DEFF8F21498FC4F8B -8906C6A7E3CC692EA39013DEBE53EA53780AB6FF1CEEF8A2D2C2930DDCD31398 -6CE78CBC84EDFF1B9C0C1B6DD756AA5B53B83BBB765E88A8A0ACA6938021139F -881FC91A4FF6F1AE7B2BC81AD0068835D69B465196625EC7F1A5D19141240C95 -F95245DACCB2E0D527B37B8477CA62E9933CDA5FD82BF6BFBFCDEE5D82F07797 -3F2ED2D86C8950A8D4F2769579F25961EB3499A002E40B3385C9628BA50C7556 -693AE13A9FE9921E3C712BAAF060CCB0AA4CE5F70A9C473CA0A5F53CA25E6761 -D269D13235377380380290BF10467C2A726C096D4FC98BF402E498D91F4C2ADA -A0DC3B235BB50BFB85FFD5252A9727C174AC924DD4B086AD6BA76B37FE0C9C0B -C44CF99D67C9DA1F97158C69D689BD6B0D313ABB5F8BC62AED5787B33749C569 -A0FF5A740C6B51371CAE44B9F9A516C06341FD0A530ECCA6BA769D016E3E51BA -016AB1C7E5B4A4C0AECBD0B743C97025C20D021A92E079B6F051138E5945EC72 -AB5CC8435892A5DCD78EBBDE078033E866859BF0F2368FDDBBAB67AF17B943AF -A1D72B7E72AF6D5AF10ABA4350B627464441DDE21D458E1789635D18E3A51A9F -6A97B5F73F7FAB11B0684C33FBE0227A67720F748C99C9FBF849508C9670CD04 -61BEF83CB62342C4215BA40968213B2BC35E4775218EF4843C39EDD64D2DD648 -462A625DEE03561D0688198DFCB24300DAA7348E9A2A3B7C3FF2119F3801BC1C -450B23D9DE355A31FE26641EAC1C24DC1D452FD17A0DF9DE3016EED76ECDA07A -96BBE3DFDB475675473851E0B6FC5784C065C1A49C88B9EABED14DE2329C139D -8E62A5B152AFDD0E5925969881DBD1E11AA9AAA8FFB179789B6086B89FE4BB84 -736F63C2D2544A636A804D2FD6773B6B760E1493D342E1CB9693AEDE902D3ACF -9765253D70A82D40BF2A300C7FC3C90C5A164F5BE083FB587B9910DDB220EE92 -D962E3B41F1D1D4517CDE42A1B31E1EC802220E487556F5DAFB74F7435C6798F -D300019AA3460321482DD5FE5A0E513AB83021809BE7D502FC1CF70A03315BB7 -DFC2D92D57D026180E03E2F93223A2572FACCAC6E115E84341D155B11B15CC8C -91A58C0F13FBB809BCF649BFA631D8F39C3E4930315D11E95241EB5C6D7179F0 -89254794EEC311CE2003EAE64E7AF47565AD3670753FDBA67806B8AEB8342092 -6C4455FE7FCB11CC99DE5747F1AB6C5E53B805BE44AD49B58B71FCE5E406FFA5 -CBDD6049906397B512151A5ADCBF89DCCEECD0BCF2E42EAF31D07147F459F299 -DF8CAE98460EBEBB371D8C04A7EE3D30EB34E73EAD6CEC8E569C344A4DCBADD2 -9BF49F036E25A722A0D94DA58DA12813A4900BC32E5BF7847FBBCFBB7C78E034 -6D5B6D4C951A74639BF257B122C698114A842431D3B7630C585BF5B4B943A83C -09101C02EF689C8D2CD6DFBF459F0DA464320B7D2993EA5F9CDDA1915966D490 -1871C1537EBB120D16F8BEF6ABA64C72FB1DACC1299174432D59368220EB2EC5 -79B2F9F355F77959D5919815A90AA9C4A0BC87D40A06D860BA9B4BCD89708A65 -EFA0063378FC3EFBFD13003BD1E656A697F3C05FC6CE231015DFDAF48378546F -CB5442A206740766A972CA9B08151D29C70702EFDE0EB1187C1B15AAF948E994 -006F532E9227C04AD44EE22FCA8450D745DB2DD5CCA57AADFBDF081D21EEAE5F -6FA39642F58E8E669262630123488394D37C47FB8110D90521CB3F100873E7F3 -BF89A26B6A51122215E1647ED6BC3604A5B8FE349CBCED5D0C98E7E50DD9975D -8214D3D164A3079DC1E702E8B88704ECBB8E015293E7D5AD7EE5F30BE8C79FE8 -C1E98BAC278DC577CDD159DF88DF799B7B5A48FA9672AEBCA7B54935B204873B -3AE4272A4F4A578C85F3B62B45D19F2475D76A7581FCDF7C6046442ADC2E2602 -B456F96C1526CF436E2470D0D8C83FAC1DAED4536304C5975AD70861C56DFFB4 -39D09D5302B0AC6F33FFAB5F43D465A85D4403EF8FDE2ABB552472FC810D8660 -4C88A1A7C7EF6CF3E6B2D843F72873D43716FC3C52CEB6718F0E714B66B83DDB -B8824156A1EB779ABEB6DE745D2AE5615F565F5A1155EA0A8D2FEE3D9D0EF1A1 -07D5FE36091FFBC8B5CC09733D25C1E872925EACB084C30ED44470FA44C3B89C -7255A46BA16DA37F4E1362A200BE49BA9386B8DBB0C54F3DC801351C083C986A -B15AF96A717DFAE03A391DFDD7F812BB6566B6F3A4F663581B76C138E9372D34 -B3A1925EC8B59A3563124CA92456B79DC0B52613EEEDF3A719B8FBD44D873F9A -9A4053F77E37143B2E5822C7971C9D6CE4129C64504D5D857F907ECFE27729FC -3D3D7CCCE919E50E11BB62E3596A247F5377C8BD41BEF51197374ECCAFD3182C -D07F7A931D0D0B17C956D8BAFF218BFEC60997D00207642C52461F48E9B66B41 -2DEDC7D90051CE288CAC0A8382CB3FDCD11C1EC3B74515A7E6CB157F7B2E2CEC -E5A664011AD2D240BACA4496ADBB2351673E0DC78B3F9618AB412D04AA75CC24 -462D5A925799EB85598559B6E4194273BFB2F461FA5FE3165B5D49620E4AE070 -7F45CC85AF3BBC554E9281C99A601789010A990962BD8727D38164A16794E19B -C62AAFB909CBAA7CA55A17080ADA886EDF6E38D09AA4E6418E8111B33CFA14BD -0D71127D8F95D03FF4C8E247FB19BC9D0F33E50B7C1C8F0CAC0AF3A8A62E9521 -E2292ECA00E69D6C6F94FF7564C62382B1A8497560131D9C8377024A8D629BCF -B04005423D59F2494362AC97BE736AFF562A591454207B1AD52B060987E5018D -7A2A17F790C0854F19BA9FB95F04FAA769B954FDB5A1A5783456B42845357E11 -81DE026B170DD8EAB0B9A782A6FF7926DC23910800D83B169D498A8F3F2B9BB6 -5C30054793B82EEE43F9055CB214C8377E94A020B9098842B94BCADC8C921055 -B1B60536E6BD12554FC5A56B1AE7F96F7547837F6F46AD232D7E0BE2A62EBA1A -87C74C44047149CB00ABDEC136FE5CC1A90DE011C80C87C9AA7431C656EAF1C2 -A9CA320D197746BBFE55603A34CD3AD42776139CD1E155EBF3B3BB64AC91EC73 -FC0E23A13DB317753789E3BF98561A21676DD91B6BF3715E88D9ED98A8E5EA32 -E54A7D84390087ADAEEC3BE995D19B43C9635EB8BD6D13A46019762699E5648D -DCD8331CDDA187AE4D917308B7DFD30E6162CF927F3C2AE9666C8DCD8FAFC272 -ED1E75FB3EEF0527935B9C1DFB055F057C998E560B6598F1972A8829E57AE99C -9D3389EDF9A7A8A3A43EE4713357396C62A27401EBBF540AB2A29D50C1DFC3E4 -4012F882A6089D57D97BC2C5DE19A81B1DB98EC4E8D58C547A5D131B84341CD8 -9CEBAEDF1165E8FAF604F0290892B813242B6584BFCCD68BF3F01995BD89BAAB -7C7B8AC166F5F78AA84659A45D1EF4FF658136CAB8627405EB36907CCE200B0E -3A36E0593B40FC3CCE029881B0329ABB1A948F5191750478F46A03C3CACC480F -070ACAE4B6C06A911E88D649D297907DD631916E60603CA49F35A2B3C8D478C6 -9F1C187C315A859AC464ED353F09C964BC171580257A31EFFF445950E2EB6106 -7EC224409386B3CC2BA0819B6CF9C895586B23E740C7EF1A1814A26117C868C9 -FE8A5FE3A8DB9F53165E0C62CCEF9F3735EC18C31E0C7C743B0DBEE893DB723F -D1514A59713B273D4C9395235A126BB9155B14C9F47E20B8FA8880C717D756CF -CEB12CC6C82FA5D3F4CC91A39BA398B920B5CBBA3B55E02359FCD284DCC3DBB1 -63DA4BA07C38E3E9E64BF24E74B62A6DE5F1521D4A1DC6657EA507E56207726E -08C5AF790CC07D908750D852A0916861B8E67D78CF8ADDF16CF9BC6322274AD3 -8101E46FA56CFFC505B3D6C20920F13D8B40CDE364D8FA91E7357E5FB218A3CE -40F84B5E537D90290154C68256015C5B8BBDDB702DCAC1FFB105AE9CCE0A65FB -EF43BE91E7737533349E0F6D227B30E52D41D2E73EA55F52D1A065B1669F97C2 -0B4B1C2184C4161820220A52E85D3A0EDCCB2A5BFA3B406A2F675D0E272E41C4 -E6293BE2CF58E8536B0AD6087E5A89DEDC6C93F981B61AD9E91ABD1E4B2DD4F7 -5F909701A0EBEC140EB7840D69F2428045CD604A590F47821CA8D51DE41E07E6 -C69D97C54D21A64CCF2E914D4AD2C444C129D767B285EDFD21F8A1256CD18D3C -3E5DCD834B3EB61B39FAD0579921459A1D6D52632A7CE0DE74D2FEC0A91E7FB2 -AB4C61CD334B66B27263BF8FA80456825DEC46D7144CE5888A73F545905F5B51 -0AB1C1D8FC967B23741C9139C2497899A500A0F568BB22272D360267AE36BFDC -37022427D27F6A5AB5CA408E2E925339DCF18DD3663A2C088943A59B703F6BCD -B4DFF736DB3EE64B31F93BF8E8E04C51231E453A4264DD5CB3EDE03EFDE84C6E -EA04803556B2323197F4F0EFF3B4CADB6F645DBD3A80E094DF41DA69E7DE2230 -FA155A5731DFB74212F26391BCEF10568C12F3B63ED608555E29356A31DA7E03 -6630A630BA93CA08FA4B2CD93425B6B1B166E64759051117A5CA57375A175B58 -88CAFFF8058A6620717E3FE9B0B3199E201B99E29F709C9A1BF56E775F295EDD -FC347391E56FAF1A620F41FA2954AE8516A8E7FDA373B6B3318FCA7B050474FF -5043E3C1F6C2ED6B6393CCDD3EA31307CE63487EC58B0EBEE57B7FE38A797E32 -FC1D5CEEA4194031848930C172D98526455C6F7C97350B893EF62AA17684E675 -48FE4AF909D9D42CC82B801B19777D99ADD0CD6CF454A42AC60B6D973441E4B2 -EACBFFFA2980779B87FB9DD3FDE5DF16BE1B67AA40A382EE0A5EFB6BEEC313C7 -313CFE4522CA12401C2236D6BEE454693A7AE8275633D580CB578E4EC4B5909F -E549B79860EB0381B8B2C60A8B729F231FF0BE0595747A6934D70274FFD50E31 -ED10F8B9B998956B9B7145313D667336D28C65DE14B92B5DEEB935200390211B -A871FD3910636BFF0F9F3D932C77C412343DBB318F1C1863A71B0321D8C3BAF9 -8C8A851E1B210C3AAB8E4E92A7CB4743FDEBED828B8B40C18588BFA45C4972D7 -E25707F2C8F0F295D08E9D56C6C565467C088FDBEEB4185AC9503A87A3D0203E -6913E3196A1061E4D788BB04A481D513ACBA92D5C024B51F5C974B14198E9C95 -564CB28A446A2D5E9EB79BD08DFF005D23E80C68B59D97B4B8B9D407885FF333 -B19B30DF7582E296838D7D68823896EE44C2E82D136840E72FC34CE6F718A07E -E880A2957A3B516FA90BEEC49AB0BF5626609752BADBBF836E38E066339A2D0E -8392B31B7A0F2B8256311727BDEC7102D7227584CD8F96FB0F218E7AC4B3B407 -61F6D338D99C1F315D53FA5176BE6563437533439020C2D967F0BFA4013DB08D -678445D75A980B2456241EA5E20151D12B5E9E573FFEA0432EE3C55AD16E8C2B -251F17F3AA1916A5F4FB99ECF340AC0770A763927BA3D5A03D777C84596FC8F4 -FEB2C582705B8A4A50E6348522DD166437DDB2BA6B029637DC0A189208FC51DD -1CFFD1409F17A5B6978D776439D702691A79412B6114A9EAD17B2776A791AA89 -9CB426B20F18F45093EE66A86CFE232A2A9B979074D2D77FA0EAD9BE8A7C731A -E38675C5E1D1FBF36AD4440D616817BD48C294E387F171FAE366474924E09855 -9839690F0D2BC32A0FEFF7E0A5D77C22BD692C9EA0557ADA09044AE6069475B8 -9D58EB7041A9C9A4CE8482ADCB3CCE1CDDCF21D842C619813D830ECF67B0CA67 -80E5B5CEAA3219E7D3055663F34D9BC549FBB66B199F36D4C033B74EC374CDBE -6EDB97CF2ECC5FACF8A68D9A8514D49014716D5920A30E85908E232A8D8ADC5E -4306F54550CD95ACD81AD9A997F0D518A14FCAD5997C892B54354CCB94BD7256 -7AA5FCC78175EEA5E30FC5AFB22CC1EDC499303058D767BF038273E6E3FBE028 -D514C87AA9A57EB739DF5C60D943FD5F13BFB6EC3179ACD638F3968CC3DA84B6 -E4F72FCE3DDB95ECB75C272BD790F670B9DE0D38F506CB2554FC55290CD34DC3 -EB2FAAB05A3429EE46DF199219A975BF5A55B7E802445AA7F3722104E7608F84 -D66A70ACACA0B4AE6CF96B4565577031EA3884766458C090D5E088B00D391D1C -DD5F456F17E32A00F259AEA00A6419BC21DF016E538C74CFA23B1739B485A150 -C57FB3C7C4DFF0C2BBC03CB1FCB80AA0A8ECBC1F76A371259ED8AE2B92BECFF4 -573CC1B5B502ED6CDE7A17E20E8CB77C49F47DB74A64F66B43F8DBC1D4E75089 -440C1FFC5CF38A3F498CA3A1D226287CD54C1F5CEA7FBA8DF6D1448D322774EC -3C0218D5DF970A012E1F5D5499F2B9D7C427741B518A7E40C05DE156DDDDE625 -1A0DDBC011601E7ADB83A38B9B988FD3DEB78B0E9189A6CB35DB3E12169BF0D0 -04AD6AA70E2E26DEBFECB88A224DA21AAE268BE352F7B591274F7B85695F5FF4 -5DBFACCE337F2220DA9246138706A0401C7709580F0DB5642F24FA4EEA4982EF -4F221DD7686A0902E70E64DE739819B4A34C34A8F5C68A591B2F169D3F9E57E4 -409EE3FE9A19EE8CC17D6B23F836DFD6D053E43178F72C8CCAC64E90D59C6E7B -F8F2C0F92CCA49109409E471F7D59743BA1F9756C105E2B3A88431E74525029A -5D791598E6757242D6A2BEDCB07568DD3EE55AF3C2FE01BF49BBA42F2D669637 -8FA4AD2CBFC8335BFA14C486A3A80F5682F51719C8C5050E78AE3632B88113AD -AA13AD85403489DDF471079F73F641A4DBDB5F829B69F9591C13E947C8649F20 -F4035BFB5B872781E8DBD33112FE780667F03EF8BCC1130691EC49A4F952BA27 -01CCEAC81C98E1E782F3005DCD160C5F10390470158B11CECE9DA5A140E33000 -801CCE2D780F5624CF5367ECD0F037F7DD4E65C282110204A16E258129615E41 -A8EF65A70DDF685028858C523806517B94B7936B87A6A63E5302981E322C3940 -CC320304D5C861FE2A10675005C9B824F2B23C1F792D79F6C21A79E0AE6EC01B -13196E92DE931E84C4B731427523572F1FEC80B1213F8DD279FA35E6553472C0 -E5DD18DD2179BD5C5C386F8F10180AF0037E0C5DFFC6C542F3F54A1C8012AEE7 -3C5B07953BE7867171FF6CC743D5E470C8D1CEDB8B417EFD8388C510D7036255 -2BCAB7A81F4BCE4457FEBE1B643D11FFF23F57832BAB05A6B5595D1BF1AF736A -7E0BCB97E4CC17771AC4C287F7D9931F87389E6D54864BF991187B4450B8B1D2 -72F78B4BEABCD93F81E5FDDE93594E34A26DD7FBEE4D8EADF932EC3B46684AAB -D88CBEDF312A4079B5FB0D28629C0709C9838D31942BFE7CA23C619038946E3B -59BF1DAD24910B65BA4B93A66BA05C795756D8C6B899381B352A1515F06EEAA0 -668103569EFC81EAF2770EF1F0C275E176683A19BAED35F8C4EB4FC415CEEEEC -EABB976733FB60D260292631B8317D90AD16F149181CFA0F39381233F331F9B5 -5544F44E3B2F2C544EE067A7259C19F49ACDD963E79046E45337C98035097F18 -5E7ED0E33FEF28163473E8F682A2DF99FC6B44E307ABB5C459A0FD18040CFBD1 -8BA0F6583A609C5CAED532EB0CDD21714971E0EAD8248237755CE81C919824CA -D88FB1D0F29A00ECBC76CF62C63857BCBBAB9FB36EDA51C5C69F3B766A8BF388 -8FDFC8BC575DB2FEAF388B75CE1FCD42E192965A2E21326B537DE3EA765022F5 -7CFA5CCB84859396439EC1D6DDDD38AC4E9F06F138663B9D1A4909293CBE7861 -93228D6A7527BEB9D7A06B90A109BECC91EAA1BB23069024AC95C58FD2F0D92F -0C9A23F9F98A8D26B7A1E70E081D564AE0A7A80BB84535D7583983161F4C3801 -DED0939FFFA6B101A9EE4004A6800354267881F0DE62EA5C32B4A107609A863E -E16299310CCFFD62A7EC33A75F7E366B9CCB16A9905C5B965E66AB0A82161CAF -BF3DAEA49CB8689752BB02B67C12095F38A837A702B1A7008B808241CB3E8952 -77367FCC9D8D8020A70FB767B1EA866C8F0A6F1C5CE1BF0BD0369F0BD94883C3 -69243523E0EF6B8BB94FD81FB9FBCDB3F536F6EBDCD64BE81E24BF77A90AB41E -1E682D022993F534F5F084E5AEE10D831D1561C3F05024CC81FA5807ED64420D -479D0B05266B6E93CFB2B2298073C5DDE4DBB1A084D47516D8A59C7D8A3B6FDD -4CC0BB36179162C61AE84F3DED09B5880954A324C3E8FAE9A1A33D38109D8D6B -F9A471E8F90FCD48604E265BC789574CFE5CEC36994951F97CE0BC88CE51FD5D -B44907874A1B286BA978537156E589EF0A1D087F435EC06F1691E51D05B51926 -E78A55C1E9A4039185DF20C68E2E4701C4F7C5E18F045BEE53B3991A3710BF3C -9280A1A369CE41FAEBF3664B056FA83F8DFE4C4000F7136073C49CBE894C1B55 -4BE63B386FA539476FCFAB0E10BE9F82575D59ACAB276C35F800FA1B33646310 -F635AE6153D935E901E0EADBDA92DDAFC6B1471053D6A3ADE4E74045AD693A7A -F3609376CDF493EEB0B2A69449CE541BE697FBAD39D86B27A785BEC81CAEC54F -6BDB34984E435C3DB92D10DB49DC6C135D9D65AA195B9078D6E8944F2031D521 -7264C22CABD2634EB5683DA871696E91670265BEAF792CF81E80383A82459741 -29B9F13C24ECE80432CB09DCCF5C28DC545ED5E356A5416CF586B97ECA91BB27 -B07DE92C1178A0AAA216D4AC235B19AB5A62BFFFD114C4F49F7279C94DA0E6A0 -6C71BABB00469C502207B97A7CF0CB79D68C2F5ECFCBC94EF07D0C37F222FB9F -FCA9B78A445E28D686F36A6A517B88FEDEC5F00D7E83C8571AC06FD325808921 -CC7CBD648E7CE9C1A4ACAB26DF540BCED76950EE004B457F4BDEDA23CA8B7C1E -B4F47CCC42AA81045ECEA93F8170706A15EA93F5FA78B1A47722681A6073AC3C -A2459CAB0D5DC8AD079ADE47271875F6F3FA540CE8F0A5097F12782589577F54 -58EFBA5D8590CAD95A6FC2BC78227994B43DDC151F5D2B7B9AA85CBFB11BF6F6 -A9FF8784909B880F6B06806CC8F830F92E551F363882847E215E147CC4B38EA2 -B29D70A9D6A9558226DC92E57F0B0E78C95CA0A2BEDACA4CD0EE68F753912E6D -D252610CC37FE89078ACBBC215BADCF61A29263E81C2F429E8948B926A877C5E -17E51B64E0D3B325C1E4F29B92B8770C90D1D6A2C809081C612065A3285DD573 -C33DDE2196577F6D463E8D19ECD438F12C339BD3CE6482B33CE6CEDFF0109521 -12D3D79FECC373EDCF9E3E82EB3FCC26178202F42AEEB61DDCAF57CC4F995B32 -56E41B2FC6D6C675FA363D1CA2C2601F311C568C224352EA2B89881C8671CA9B -BC0C5C7548A74D372B009F5997ED4BC5C0A2137DE941588A6AB1000EE9745108 -A64F2F780043F4CE9656E3FC2E8777CA1E3F88A99DA1A69A0E79A40EA2C6FC6E -E0C95F573BAE78791B02449F75E9607887C0EC9B3654233707C6954E07D9F742 -F637D965954D2CE0CE474B3ACD1226E4E9CEEF1B8F73F7CFAF10D83FE9C4723A -37BCE2F2C78054F4EC5DD881815EA4B884C7A88AF6B0A78B100FF7ED33D8842D -6728D98CA0A0E3D211A0638BD2EBC392DAA12E01F76B4B5123A337B5B3885FFB -14DA87DE71AD3A7CFC662C020CA6803F5F1DE8D70283B61CB8A049254EB8627C -C2BFDB41658742FE18D0DE9772B9D592CAFBB761A5A9768B4B02DC6627432260 -5DEC39919A487C019BD77225970F1386B156F85AF55B7B23AEA03957B898B1BA -16515BEA6294D26F5A4722685E7FE08298EC331ECDD7DC824CA60F19B7F03D1E -683899368E18FA8499A2336FA880F6B7983F368886C6DD31F7535691974E47A8 -299D8F4BF4223DEEF07150CF2453C714A0CB5FE7ABD5AF5FE47FCA3792A13977 -C531F2A8F81672564A75DD3BD50622F94DFE38EC8E8540CAEC171D690AB803B3 -01C80A9F4371C59CC0E0011743DD480995D5160986DAC3DF605FD473CE527CDA -CF9C10E819F769132FB73C17399C6AF0692EC445CF768BAB03DC70C1DDD793D2 -CBD3FCAA117F019EDC56D479EC56914CDF19FAB530D0E2118B20E735E4D3898A -A95329E98BDCE9DD94573B27564F8A1B7D075AA0AA6AA6008438A63BBDD174B1 -34BDD06FC334D97670568AEA4E7F762723064BD4B56CF0718C55DC8F435946F8 -9951D65A1333CF4C8DC70792546C46E3AD6353A2CD596FF2173B1CD5EA8903E9 -D1593C8B5DC53A42F76A233237C4E34DD339F1D789E5E8C56E3C8C37F5990732 -47799BBCB3E2C0A246EB34192F226668BBFA48CBA95CCAA6A9BA5C543A10532E -A6CBDBDEE5E662BC1F8DA0D66AAF39CDF436966FA58CB3207070631E8ED917E0 -26489A16182B29AA0313E0ECF6479DB4675FB0576610A3A9D5617DC8807B61DF -5610D4ABA159BC25C3C3F678D52DAEEED03C31F5DBC876952F459609915BB5AF -1C35AF1C7CFD30D8F39E3F0B9072042CA8A2FC564EE23D45181544ECE19C2056 -E6DCED4653F6B1E02B203942CCDB6175463DACF0A1D56568A248F39C3B6BA054 -476489539269FF2E88D0A463FB60D52E0A29086D2F86C650842674E0D4DE274D -941076913905096454C72DFDEEA33F2C7F142364018154475587DF2B766AF169 -D424EFB12A1E04CA32B1ED4F9A844F95EE708F7961D01080E2EF3C2125406FB9 -5F000937A6E5504917A4C2EEB0EDF0EE2C19CE2142E875AD64CFA4219072042F -BFDDA76F6A8933616E2D9C14622C17940B2DFC4CB124E33D1C7FBA5D4DF91230 -95F75B3B2944BD45292226DEA4128D14B094477B804163830CE7A310A7433382 -53D9F5E37DBB6D1EFF6D699585993424ADE9BE7709FF882F7F66CAAB3DCD9D2B -0A1BA066F3A43BAD8D0CF5D608F855E14B252FDBED8C6B944ABB3EA837B2CDF6 -DCF730C7CE1C2A0A63C652DB8D822E74767B95F5D7F20DFF654644F93ADF8FE0 -8B4C393F9815D4980DBA50AF43FB5198246C91D9D1558E1951B790443F4DA185 -B9D71EE244833194B6E9C12238A613015B33668D7300F4EABA5D7749D485B9B1 -1E2D27B5CF779EF39EFB94851A0A7FAB1BB928D05C4E38123934CCA47B88C007 -BA2437937EE3D46D8B469082905C43849D54E873FECE86A7068C32F4698A1EB9 -3097D47D8A14BD46DF02FB5A8D811A3ADC43FB362381634A4A95CEAB4F43A0C1 -DBFA3EE3721629FEBC8565BC17C850FFE3F757D0CBD3FBAC0F4F48AFE89E1941 -60F5B4CB76B8BECA2A734DE84DBDA0F33BCAE440CC5E7124076363E37FA7486B -B3A90F827052429DBE0BF5B94997FDCB3B8E896C0B8786DAC25D2368FDDB7E8D -311D6E2F50DD30639113DA11A915B3E36F450AE6738FE3E93C5726AE8C9CC8E1 -7AE55F17082C00ED68C7A189783E5D955077A2CE3C2854834AF677EAF4749882 -C90B37F66C7578C534C773D7AE8A1F27864541006B747D3B7580E3D808FAC8D7 -47F29252F83B4C4D2855ED5E9C129FB90FD85AB248BDAA33BBF956274EEB9AFB -46A0E155FA1C006A66D408F32BDDDD511EB4F5E9F92231D7F3DB5AAAE0287A16 -688A9BB19C728267E13FCF20C9E635F1721B555C2E08A340503A75D6EFFDC772 -269BBCDC68CFD48AC1772CB37F9AA24DF90494F782DD63EB3EBDA77EAEB2183A -2F2E9C4750CDE2E047A842288A7F430C77C010C0B7E3CC1E02CF51DABBDC9C6B -DDA38147668F56416D782075F98A337F4314518A23F01C37E47244408BAEA44D -BC156F429A9DE240414B25081B956638D2E0AF490E92CF18E44E666D650641A9 -A1E5746E8155519298DEE328297AD4EEC55FCDA7ECAB8C6241F8DD5B0959F9BF -4E1F5B4E7E0CDBA1204D78ED01B95AA34AB90C8B3553693F7B18413E51843D46 -ECE2BFAB532BAF3EE2DD93B2620F96F907EF51215C17297F5A77E058AAE1A5B2 -A564C5C11ACB92D4C58D29EB2543F454700EBF7F350647406B306C2B9CC29B76 -AC75AE82065FEBB75CDF9D216F376215633A4A062191891371C8C165D47371FC -148CCD1BCA39461E5E915C7C5B13F04D5BA7CB3B6BEC4489E527188B13E2C06A -E393DFA9B1BC17A141CBFD2138C7CED07D86C0EBE50A8A6E48A0FFD11F791B3C -E3455ADC6DC8A02EB3CBAC56D879820AFB2557E361A0A208213C0C2461E6CCF3 -576AEA9A46514266E2850B2AAA75A10FE3CE609A591C2DBA9545098FA577D89E -35F48FD4CD0EDB72B9A7FB7873D01D683DB3DD2DB9342C23C8CA0BB681619B52 -0A9C6B27C726D11B382146FA8D54D556FA6EBB117BCE2E4D53089C9292C769A4 -37C573E7C7A00DD95FB351F20BD800A3CA17169BFE80AB0E6E2FF27A78BFC3C6 -9E416A86BD22470F4293C77B0017118639866BBE9D08A44A23C7508271FFBD1A -AB76E5E655BF66E87DC916E0AE1447DD01B8D11F82362BA55B50A4FE5FD7D534 -318EA499A1A4924170C3FD81EF41BBC66090F7F393AC0CFC4ABCBBC4255BCA1F -FFC45010EEEBE12B78C513C1883950E8D3E5429CC5BDBF05B96D1B6C53C7793C -D79A82CA916C9EB160DEFCFE32691B44AAE98BBB3C3E35D3C871BC80C7A4677F -76DD0CB632534F18BBD47F961EB620BB805BA2E5AE46B196E3B907C42F157B68 -6A3FD76F75AB344F438CA0661FA6243064303A7DF12EEE75669151F9E297E812 -78CFFA5ED9DEAECCB330015782093908846B044BD8C7740AF44A0DCC1F9C8197 -B15A30DFE0826454E68C9D80C50F2B1D98848A143134B3D19749F7E1BD5A125F -990811AE2923F0BF502285C55B49BFCA0DC5E1CD13CF5A42E09C764E3CE54AA7 -12957D7B267213BBED74B278B21EE4B16D0C58152EF52C293CE44D5F4332877A -AC8032AA8CAED48B5A2B2CBA52AE827F9260383D84A5C5A565BE1D1C7634FBDC -5F083180351593A272342F08EB1BA76A321BF45DC01F0DC73F81E27B6E4FFAFE -696B3D57CC50D1C05AE1FE053B0A513985B5A0113F1CC0922E3407376E339204 -27F8E293D1E7A4371E60CA2BF0E61ED2B81B12DABF5371D03C19257614E99858 -5B93773F057BE3212BCB115345D43339CE2CCA48ACB413B206BEAEAD638CEAE6 -5ABDFCA4D1E5907C1CC8BDC7ACE59C1A3E27DE3B006EE0DE0E76E72909F3595A -4202696072875B42D51FA59473C75AF17BA7EEF32BD822A5AF4556CA5D88BC53 -2782DC0AEAF8F66B1024D73E07E0A26B90FBB0D583BAD7326C80BDC77E5330C5 -5C854E5A81BC3BC45BF9DF2677B9C89100251AC18CDE331FA79A1536E1019D49 -FACCAB95EEB940BFF44E4ABD1C0BA262C750E8193A38B8774CBB92B873035460 -D75CB085C3FDCCDDA3D04C963690D2F5EAFB3270946F69A65346A6A9EDF973FD -CCAEACDFEAADFE6B2A99D14AF7A210DD834494A4C4D22102042A6213E556CCB7 -F645930874E32F95010393ED42DBF286CE565D56D5C80C96D5C88547C09070E5 -F17A395A3E030362B943B61DDADD60F7D5C4192777D6714F141BFF9F035B205A -DEA3AB2A307B1F9D16E62969C1FEEAE6C5283DF2DC414E904217945AE629C91A -0FCDC9BE4459F5F0448E6B2B8A907E6A000B860BDBB3BFD0F8567D6777415601 -267D05C6C0BCB3FC969A22D34EBD2B3C90EF8FB95E7684004F8805A80EED2F88 -CA8C552887A6972BCEDC0ED9DE66E7A2C8CB7E8A884D1693CBB83B5275429BCD -5D3D846AE8233D5F492D02CB5D63118E647C17F89B3187459A0E4E64738632BD -35C37B9CCD46499B7163FB436BE8D42CAA9CC1F21D12D7F62EDE4A0D88A4E09E -F0CB44634407025ADD949A68633115C3C5569DEE891367A6624833ABFA6961AE -6B34E438E76FB2ED7B65DC1A8515D9C7104587897815128A3A6210E08B55B083 -3EA57ED782299D70FBD8D12534E74F1B7658D61B999E0C6B67FA4DADD78B2769 -430C12161171250BECE14E7CCE85ADB0070ABC240A237AD1C2C3D7E75C23015C -E145454CBE80DADD25B3FAB08B2A2FE0A3A728FA57261FEF8073952090A5892F -B9A64E855D36F775154FFA79FE7ABB4A89D7D581F5762ADE506C2D0270E7D64D -3E8E6F0BB595956B468833842214B25BFFBA2BC8818FADD58EF206D88E32379E -2C8FA4A3A25D51EE8D8ABCB9C3772CF32DFB6E85789F5DFFEBC252CE9CB768A6 -28E09AA133598A0A664A401DB0D19674EA7423E1BCA26BE4BBAF9DDA21454FCB -4C2B509EFE29AFE2A9B01CDFC872A32D175EC93C5EE5BE3469184DA910D449BF -1038F75546A1E37F93169DABD6CB7EAFF6D30DD12975FBC71D755F29DC3C7795 -D150C63563DA4A6282BA626DCFE3D360EE153CC0F7928AA60405AB247E9FD612 -C77688F9B4D84115E797E5924E6B40F23825164AB8B23A0B179CFF6D5A02C500 -8C8AEAE9C9724A17A97B164D0B3CA0899FAD42CCB7FD52ABC3BAF5E91F64ABE5 -70B05D60756664262B7BF4C8AF85F17B4C8F13BBD6420CACA0A324690A307E8F -DF1586DBB5BB4DFC46FB18C9C4DEFCBB8937EE5BED3DFC1C1243A4E6D743B26F -CA9ED9F7402BFBE17B7CC477D4E79883162B4ECB3598FA99C53536EDED81F607 -B677815418063F64CDC05309EC4F50C3B49ECC75D47DD5159D24178277543814 -1E9AB69F495A3D0E03C028E81E74722766E868A74675747BE974D9465D48DDF0 -3F1AF3FAB683559DAB50A977CF47F7C4C1BF43F446ECA5374E2B8E77C23A3F57 -33858E972578A0FCB261E1C889BB8C972AD5081FE67D82BD8B929409DF9ABFFB -BE835C6DE98E32112BBE1883EA92C023A73EBE61FAAB85FDE475DA8531D17184 -82C7914966D4331774027BB2AA9022A0843321C85146A087E617B126A6A17FAC -75174D5854B40C08EBBF562A4C7B04A63C55A2CE2FF89E8E1D715B49A52C0EF5 -88C0ED63610A7268FB0C9F9DF4527E6CDE90D8AD645C54E26B7E7225CBFAD29F -80059EB920AE850C60D68D5C8012B1ED8E7AE12482DAA3B5F674D4E569824126 -ED93DEF05AE9031440E88062F475598B4AFD463C144385359AE4B680B2828CAC -014692B1C29BE6D84F5434A3BE10A6774D1493B466F7623C9371420936B397EA -CCA8221353E6B079468F08130FF0D3619C4CAD9B8F2821986F91511EFECC3B95 -15EFC8A7E9EBC936D3860809CB265367DCE2850A34D673727FFD65D31E2EA8A9 -45E747716B12EB8E7B7859AAACD23E04E9AD85AD1E5E9A8C2EE7D535150A6AB2 -48ECFD5AAF2C9DB97A5E104BCA486DFD432AB386B4B31622161BE0F92983BC15 -50E454658FC2A987E2812B8CA402A618227ADF685169C12A4F0BC371485C6D82 -AFF5509CBA35D2316C6DD808E70FDE08712A1DD141399F925E8447F3EF8FE3DB -11F0333E5CA2FB92CB762E46A1C27CD7EA355F8F17798AFB0BBDB5417E6D3FC0 -4BA77E9914A8D37EC26D6009FBBE4B080CD7D0B4F35DB32D4B7AD26C0C79B130 -D82A5481D024538265AE6F9F6066C3E4D4A4C45BF168F8D8CAC1C703150524EA -62CF558AA34B80090CD22FCFCCA620F671F98E61909014DAAB8C93D36463B6A9 -C07B33058454664347DA527C7756EF50FD865F3D64C8AA8BEEF1354099FDCFAF -3408FE61855CB91FF1C9DC778ED2784B3423B9779308EB908ECEC25D190D5233 -F88C60DA18AFF88C880777D581F369A750C6782001767220A84B0FB874E4FE35 -90063FE863173018BDC7B0E97A1715D74477DF5EE7490202370A838A5F15581E -C98893DE26F75A2832A97920333F97214284F3291D83D41F2BDA3A74EB4724B7 -E5AE936863AE5758D5B6D4E0CCC9703D045931FED54F2D98B039099510BAB2E8 -804FD603E664663862E0AC4E957C7E65CE9A63E72F635570A068C7B696D800B5 -C245BD650BF0627C063678A88085F961B770E8C201418DCFE03ECB74776406D5 -557C37493855E1774F4C87B9C9ECD38BE306FB64016D1A54A848783821512718 -CA1A0BFD0188997081649F6D21A00F341BB0A843B0B598EEC9B18C7002F76150 -7272B91A10148713B64985FF6A00C75C22C708F2265EB223C200190DAC8457BA -89C4FB61D095F6C2FAFD3F13780F75822F0E26080BD7CD13B31B8C82A4A007AE -29D450326D79CC899BF3BA9399AF4012AEB18EFEFCB829B40EB8F2FC97225212 -A7C49B4D9C5E362D2E64A011E9891BB02075321E1315C1FE219E49C2F4D2C8EC -587BBF73C35D13E91F4BDD3C17AA023E0B862BEE477BBE257910369DAA330AE3 -64B05486B6A13D5C3927EC6A591BA7DBF5CD81840841B453AE1832D0ACB35935 -9DDB4E8E88D45175D4D9A88D0F77065B98FE59244DA1B24A0D2F04FB3D11FE59 -C69BD19C9535A0507DA6FD68BBFD9023144D99A71EDB1D00105CB59BAA1EC8E6 -8E3F4D99723D87831482DBB370FF8E4099D6EF49A562C5151B948E529FA84147 -5B80BBE6F9C4F877BEC307667C6868B0384B98763A849B47C889A62E69E833B6 -04A60319B227A40368B11D3B0E92FFCD15009B654B096D4E09AA0896B70F1677 -EE32339A931B387D6476843D91DA00229282D60F04932A644B22795C7E86AE6D -EA7DD4AF07E3D8AB4D585C51E8CCAD2DC043AAD95517E97BD18D688A1DB92A8F -B70CAD704FE4D1CDA3310BC7F3C8245E18094E65C82C9A7277BE922334E410FA -93D5D6087892FE352F03D536AC06EB9C9637859093538BF0BA676208CADBEACE -AF9EFD10C49850701AA500F1600C42D1E635479BBDA49C2812357728BB540683 -90DDD54F4193883F2F8DC8849E90F329A9234F79A731263BEDBFB01F996024DD -A95D5FBDF7A6B4ACA2BC93E3EF299B6010E203B59D24EA8E05DE48906B3E91FD -7629A1045E32639610ED53D78236842B3B44DDD2F36AC347F0238E27182486AF -A6618501CE34112F848598A2D28CE97A18407F9C82F2FE39EC4DA96801E1A23C -F3BFBC09EC9C81086E2A48F388EF5692E9E5D6B5B7440A60D4FAC21316BFB71E -01DE8CA6AA0496097FEC7809922553E6C7DC24136301CF15AE3A07CEB934CEF3 -61ED9A944BCEEA2205773CA1B5134CAB75E5DFAE05B79DF8DE0A30012B50046E -ABFD0F4458746F14AF71EF79283E570B4FACD9A6FF5A309CF795520A812233F3 -3F97621D1603BB7878354C04AE66319A6F00F4ACF41FB459E90ECBDBF375DBBE -B205EC6A89494E4390560C121040E8F4DBF68240E1C77B673269CBF10DBA8E16 -88F18C662CEA332147C7E17F88B126F209D2FC0262D7F1B9C8E42A6D56FBE9F3 -9AC64901CD5DCBC9E120C7FE424C5865768C9CB901EFE55B0EF8C363F0516A05 -EDC6F3195BFAE2338DC6BBFD8AB31FF7D2B63A7EDF197ED12D51B0342AC43791 -AE851C12B9FFCED87A9A0A66490A126293CEBDBB12DF32BB27DE30FD02A961BB -9DA36A32B0E9E51DCA92EA7C9E09C48707728774542CB0B1DD72601E30DD5A6D -22F1081F30A8F5F6ADCBAB5071834CAA362B0A586F93A1E2C08B4961094A6060 -0E767F90D241CAA689FCB364048D09C6E61277E23AE3D3907B5DD935DF1CF941 -ADDAE2D173EABC5C1DD7E13DFE00C4DF73E2CE2EF0E1ED9254513D20C87420AA -690769FCF932DC6075577708714C19769E39B8171A7A771A5619F5CF9CDC8388 -082E54DEA0658E8218B2CEE1F8E39FDBCB057E7A728204F5DFFFA9E7EB0D6F46 -3A6328C32F4DF1BC54BCA3800F83AA77D23F9EA4DC3D78F052EF49C11DC8C3EB -530C3AC4F2AD8C861C09FA96BF6313C7195F634917D2F4DE84F7193A837F9936 -25DED0C42D12DCFD281AC0DD5879CBCD46D17EB87693B269D8ADBD935F66AF0E -8C2FC7412D541218A57F6D9D9763B51315EFD5B1BDAB6685D8F3759A98AC801C -21B89D3575593A0865A4CBB176C9592EFC8FF47BD2DBF34B160EC8FF8842CE94 -F44F9A5DC66152B2980DADFBADFFC915A95F98F9406311732E077E8C0BEEB6DB -6709009FCF541F514CCA4D0427D633DA65800559760771873DEE72E395128FB2 -53C856D3C48F8D8960F3E6281B2B4172734FECC78F09EC23F34CB920EE884D28 -41963A47BF3544912E0AA19A48799D894CDBEA789C44BC355763C5758F0AD638 -38C6D5492238EA2FBDCB43B1214B4E740296E3AF9789773A918A26E09A6167FF -8CA0150EDC52D4BF795C8F294A0E2061C6372716FA0311F8A3017570BE24DE6B -3F59AA1C888C121C4E2DFC2E504B014DCE8D922C7CD1C4DD31A53421883A63C2 -859D73F217F3C2B0EB6881A2B0BA479C5F826BCA1F6FBCFB672FF7CE4557E2E1 -BE07CB81D0D4F772A635905156711F3836A3C5919A833E59502FE32A06650B34 -44042BF4151827589B6093DCFBDBC97626490687FAFC9EE3411B49AE64F650DB -4E9ABB16A6E3A029BA745BBD0E305EE5F3C7F9D83AAB3EB3F549EC62730EA472 -F7C0CFC92C72FCAA1319C6F43B3E523AA831E4419DA26019B5CDE3D14C264BB3 -55DA4D1C9CB74B073EB2C80843D55378C1AC7ADB2BA6B75F4FA7891B605EEF03 -A3D9DEEBA8F029CFBD4343E57D2FB2EFCFD5B8499275B74E39122F00A0283138 -758A19661381D508C36B49D7E1976BAD40690EE2AD29F49C499B66FED017AC75 -9EF5E0DF28EFC831E454F8D0EE9810EB0991A7083A878EEA81B494437D1680F6 -3344196F46A958340C9771BBFD7E9DBFD8DB8B19E15294311BB67CA78ACB89BE -112053F96F97685DB0D0DE8D3772D2699CE60E5CEAC18083300AADF886126D0A -9DD38E90B5A99F2A24EBF47FE8BCEB5E258A4105E7123C4174AABA79C0304B94 -506F89D3C11CE7EA02A7C3D2B32EFC7FC7AD1590B544D8F1F846ED5BC371515D -82E17D0E200D026E05653C983BAA7C4B2E4D0850E3BC5F5BB62BD07D55510C62 -2CA31539137DFEA988AA24AA2B203F0D2256A8DAB677BC1AE4BBD0432491CF43 -346668E6A6D8258747B27898897B3B1D404B2F2473951AFE38A563754ECF4F27 -D9CDB65D357C5678952420C9EDE68EDDACFD9136E06F3CC2505B3E192F20CFB5 -C6AE456E1E8FA86B9E85A21FDA36B349BB98503DCFAC96873471B2AFC43F4574 -02BDDAEBF5ED48B959860BA93570D6389382A085A2924AFACC2D582A5C1C23F4 -4174EB5265F09C78CEE6858ECD88F35687046A178565A249F85F2F12EDE73467 -38CC89DC5A980864C877B4988C862CF44722E5B9C79C79B2D71548D28D50215C -4AC9E316968EB5238484DAF7E28B79F72816DE3233BA1F2F01702AD28564EBDB -FD974DE6E4D29B25E5D6C285257386905BAE46872615256546399CF06B80D0A2 -282D9E10F14F01D977FCE93214725242BD69CB5A7275785410885710D956F242 -A71389EC59A8FA694CC681EDDD984123C10EC191AFBAFD911524352B1E012DEB -EE56767497213386FE17C0F5CADFCAF35AC917F5423C092EA86214C01CF52DB3 -70DD3EA2ABCA0D2C5160BFD7AD66A24B9725BB07F08DF833B26912731540F34F -E7B772A43541E28959397CB23136A205FB14B5D98CDC692A17914E322114098D -B91397B4CB2713BC28A75B846E1CA0FE21F3E936298F63D057BF943E5F6666EC -B62A6E76C2478C480392BD50CD0CFC312250D8DB942A16DF1AAF6360FFF78687 -3B412DE5CAF16348601775E2A6EABED350E16D810C11C56D1365DA81125AA1E3 -6F0F53162D9D1453F2A9D3869FE5CF687E11B14E7B043F8477DE75406360D233 -A105B72CD6B28B49D84E62F148D59B935D4F80F93006D1D43CA1887146266DD1 -CF8CCAAA1460F59D854762BA4DCD2C72EA3B883355010834C167789742D0C886 -0E40FC7E18490AE6501D75479690D7A67ECC65D749B69021F8E6D86E98D0032C -FCA0341852E051A31B948411F8E27AB7E23E0D9F6B376273A97554248424C0BC -4CCEA57AEBB28E61F46FFC12365281A763229B00D86034999AD5ED76E9B7B5F9 -D8EDC6BC419A43C86C2013985EC8CEF1B6F251F6EE1F37E6752B326D01A2F486 -55F4469A4C81594D1133BCE884B1438128BA4592AEC98981ED6DB57046D20AAC -D9F9FB14FF8E3549FE9A43F3F9B0C5ECDF97626EEE5B7A5053BB1E55E7665B40 -85C2AB287067E09BF68B2A97310D6F018D5EAE8FF29514194380729719001045 -BDC12CF32D5B575F04540A4C428D2567CD66F7DA4FE41993EBF6FB032AFEDFF3 -0CADBC79AC90241C71DBACCC99742BB516849F1C8B3A6C60EDB04D290F4C9F47 -4E3C8B45B18BBA98FCE737D05079940E7681C587175E13D94B676C0F29434DF7 -53D0D9757ED0DA610E69AA32B5977ABEE045EF8ECC9D5F9EE464683ADF39F314 -7837ABD6353BE90831A843AAC6D08DBCBCBFE5615F88774F47632799FCEBE8EE -91D0CFA0783234042F66CE7A198017A867BBD6EF6B3077106B98A1CDCAAAAF91 -B5431654A8196FE452818DC97E9B64A48A20968E12A8CA92E434EA61838AAA3C -F0501F1AF7DB5DFBD6A0CF7E1BADA364DFAB8B59E076A66AD0CDB95C13ACE06A -D7CA855048E2BBAA48228BBB6C437CEB366EA93676F8790FBB883BECB832DFB8 -618120164630AE23C2515B6201CC0A637AB5397D3FD8F575230559F633654BF7 -31E0774D2CDE9457262341BDF81E24F69A72351992807EFD05F5331F648571BE -824520CE7537ACA3E919694EE5FD274207130E28D716B144060FCADF613B8379 -693F7BCE8433B319406BAA89D577841E55F73F8DDCD9762875C18C2509D826DB -4ABEB7AECEBA26BF2D06884BDBCD98DCBCCD11047BE8F33A766C5B5C465CA713 -BDC2FEA07B34070354687C2F5F0DA72C50904F37FA17496BA812ED7C556709BA -FAEE9127BAC4E7425EA5584D317F6D4D6287CBE769C21099D2E3075171158BAA -348477A37E790BBFCF9D214CB2EAB7167B7B9672D84C984FAE71FB830B914825 -7E789F50FAF9CB889C12B2D7237B8FA90123695F0111C4965802A7FD73809EE0 -E48BD07721C48D81FFA6FC5FD14994772D3A39E6F91EB962B0BB15471395461A -577684BD8DEC293465B85682221EEEA16A02EB1AC65D43BEA067591E90D49660 -1704167CDB94B046ED3FA8225C15595EE9E3EE4ADF486DA47F269E9415B92403 -49E9CD8929544444B5AFAD300B274FAE8F3F722722BB5EF87E2166F084D0D18F -E29E46A3635D2A9778382490F636E236D70F32841D846518AC83775AFF5913A5 -164E41DDD413728A2A7F67131167822E255A5BA9905B41D33718D506D4ACD872 -9C96A9EA31D639CA5B627839105D27A3FA0487B0453765C5475F2069CB73998F -CE3B287C77637CBBBE181F003418488179A198D7DD76FDA0803CB5189ECC87C1 -373266E75972089432DE229A9837C0DB0C4F4A1C0FC242551112811A94227644 -EC271AC874D9AEF2F0A19C3E52507B601BB51CC4B063D7DB56272D4E064FF026 -77DF024B3EC16BCB3C2C573DC4B55D152A0847080520EC9794590776F8D1159F -CA7D525704CE0773003528B2DA05CE92C37814295742DE3C5B85E72D398FC549 -8C627D97F4B77B17D0A0FA2AEE9B35B4BE1303515C2737EA58EFE3E8C02D9A5E -B4BE134695380B10F9D29995FE9BA0F1B8D725FF40FB65A1B5E4497F6F7EF1F7 -C215E98F2B230FF2C1E77DEB317F405D76399A87858A4431FED2A7E40B444870 -000A2019680A7B179FC7E336ACB8B8050ADFD9256E501D716A64D40D045AD891 -B9BB7A293C0010A3FA8172743F2D84FD3A7BB02EE6BA019FE522761F5D48B06B -82AB108F46B361E1215F4146B9499BA9B67F4CB7BE248C0F452366401C4B1EF7 -6A1FCA84C3806D14E98CFBB5B19A9E9C130D20CBAD9EA9D55A8BAD6BD22DC210 -CE6EE0C806A3707CDE7AFB920F87636526309CCD2F7C71E9F41691618503DDAD -A1AE1FF5800EC16ED9BE08D0CD304939975E8FCD8EB99F8F408C2F9CC6AA0F68 -AECF45C5AF7D99B18BA291EDF4B99E01A7F3FC3271B8B14A6550AA3893C3BD99 -9CB74268CA2076FB23A1C93FF528D2A3E28FBF2B9696622858BB4D6621AD5C74 -83E08BE6C12D20D08105553DC668F32AB7699783EE9C5482F1EAB146CBBF5A4C -7D5DCB7523479EB24CF2FED6A503570C210FE2BBA4370ED880810D952F4D603C -7AF879D265332AED31F96792AE469D8B42B83931DBF557150CE66853B6B999A1 -11CD84C513E2A4F94F67FA8F95DFE5746C704E80920BA0521A48DBFDAA615D27 -8DC65DEABF16F1681C2DFEF912222B76D449F9EFE165428267881523733F8DA5 -C34922EAB8ADBB0ABBDAAC668FCCE4157FC5A41E6897EE4D7C8AB47B0D1F8947 -604FF9BB1034E652A091830B21E3955B49F43EB6BCBC35EDF5CD081CC4786F1B -4FC68F3F95D209CB2B74944CD9FA3F78583063DAEC648AD231BCA52699AB888E -2EC4B31D79F9016BFADDC53CBDD785E931FECFA07CAE66786F15E95A5E68E0DA -CB1F7D2B788C9276446AF1353574A1C31BD1B009A9A4FFBCAAC540D5A728D555 -C19D50D543709AE3063F122F39AA2C1217975E12C08DBD572D242B6668089F50 -9303ACD75A32FB183BABEA1B4982B65C3F7AA3880FE5BD719295393EE246209C -0929F1DC19844EF3556DF49CD11848BE88D84811C6686F56856DB0CCE63FD473 -BB08A721AC03A2275057214675BEDD7DCC0FB1BA4A02E5BCE939392C350DABB4 -4D81DE6629C7713119648A025183CFE5E8BC3FDD518ECE2A3F2BE0314FF8D073 -FED63CB458626ECA9525B2BC255AAB91B9569FCEFADAE921575CF439D4829611 -7E3B020B9223A6C4A622176F1E7C906390D4B436ACCE1B2E8D9C03E31EA0CDF2 -49D6F2B1296716CCECE5CFFEE825B1DBCE083EC16384935A7C1E654B6ED2BC5D -A8A077DC850551C90C75A044BF66713F21EF2E6B963BDA8581797A833B1EEAC7 -BE663EEBBF0AA5779A508DC2CA40830ED8ABF4A05536B56CFE94FC10B3C0056F -607C2F3625130E87C03E7201F293E62C69B5FA6E8AD2E870D20DD70CB689DA1F -A955797C9F6EB85CC96505F409556992CA2A19E9F3835C0C3A77C134C6B716D5 -952AC896207CE3723AF534897740E4696E90C58025E8629895A4ADC0DB1AD6E7 -6A89AF91C2A6E39134434F80D4B50D0FB4BBAF31BCE787D3F42CD0B3C328B6CF -3EB7D5DE10CE8CAC478E3340C549A20843857B65649F842B0402CB0CF0426600 -6C0C7C280B7B23461F4E555A40FBB0750E077EF744EA3A8814EC08C9FFFC4FD1 -2A840A1C6988BF0652F623732EBAA16537D2D88077B5BA6591844B42374A7506 -73B04434912167E8B2FA443BDD2919521E7CBB51EF56851735AE880DFE196687 -BA36E944F2A33C00168D15D83C51C4E500A1938A427CC97B35BC08A0AFFC0252 -A66E0F11C26F03ED84ACA2AD9EB4F4913D7BF8A548B8D395DBC847CFC3ACF59C -A856D945FEFFC9E89BA7C441C85B718B58BB70886BD6AB9430D3DB53C985C8D2 -A59CAA7EC7B63976D36DD9719B373AE58F09030DF86791E4B8FCC2807D30307F -6C83981D93095832EF7B6D7AB9717CD19C1F3929C31356B6CBD7B147464ECBA8 -ECA45DA761FCD20F61E49E496AE4CA1BDB5AC7A5591D0FA9439F19B136D6F9F6 -DA7FA38A69AD6251E5722C47DD6856BF23749DC3F0C339E854B4F84C4301417E -5D7D4A42BBCA6DB6820B70F0432823B5E3A95AA69365DD34330BA317B27B4E9D -9303691BDCA22CC1BA832224188F575678D5E7F95B3A090BA8CF1F57DF504C3F -AE0C8961BF0FAC6CD00E2566DB1D502C8E953FF06049D00AD5C22F695DCEA09E -37EE1B6F55BC691789350E0EC61F699A6E411AE0096B71AEA9A51137C0B1A0F6 -39D8C4B3C85C034057D56D235D68130FC3AE064B6F54723582F06EF00D110B03 -077E6FA25BB5525D5220DE4F8978D3C5BA050BE03B4A715910352EA58E625E4C -E435204F0671AA1F2B58A5CE2BF58EEC8CF7297E8288823C64E9918185B87283 -93F8E3DADD1EA48FB267094948CA0448854729152FE6F9B81F9C734960BC02E3 -F4CD9659A1D7F9F4F2BA9CD7809E1233DB4368752122D756C3DA26E391DC4BFE -4F83FCC871AF08E7CD5ADA72021562B233BF268F6D4B745371D8424019B72A90 -C124F65C29B2C15EE8C0EBA2E70A3DDCD6D9DBE25B3E3B80D3E9FB1D19A182B4 -902AFB63B7D989756462AC1BA9BC6371B5C6E1481E57F797693D19DF869414A9 -D314B0D0842EC99E5D156EFCFD20D07C11B7B5996A4DB5EC85E5830B3655F84A -FD7DF060593758A6E7FCBBE97AA3AC1BA6C358F26F018E292E50E1DBE44FA436 -617AC91F2341E1E4B92F9F8AA179E6791BEC0C5782E283C73C4E9EFEEE734F24 -0BBB7B5CF26F8C6A61D4CA18F8FE8C39D33527879FE08C5BBE9D87C3A3E84FA4 -F61B6EE1CE3AA0B364656AB14533E527A55D89EA59BABEFE2114204CCDA3D247 -A11562DFDEF7E36B939A9341121F4CB1C61D2586AB147C17DCECF23FA58962E1 -11EFED42C6C90A0FC71F87939659CB868BC64C513BBF688C4802DA63D3AF113E -6551D91D8A91461888073F8D4213CCAAC483B43B3AD158C537657F1D4D22E9DA -804369D6308B4AECFC5262B047280C9B40BA4B53FEE769DE9140C5F262521744 -54DEA4B4F639CC891A1576364BE160434B02049C90225454CDFE46FC89CD6F84 -3F7B1E81D38743F469768FD6F17B3BB79764E72BB2BCBD8D9BD966E7ABF7D5A1 -B5816A8DF156E4E9EF48B33C87C03A0F00EE23DEE5D76707C6F123775265ABD3 -D93A901B7407524CC2A850771F4B609B835A62374DDAB77C8EF7B9BEB6867029 -537B4B34FD2354655BF0B16F473130084959670A0311CE512A487EB399253FF9 -03E9024BFDE1099B16943C88627DDC20C7CAD23F5BCB669FD448DC6DB3A6C4EF -D2AD525FC42261D6B25C5DF42FAC5A9A7C034CA3B44F7A67E3AD200F9A8A4154 -A0D85D385D8F07763AB004C0C71E5394B0B509AA237175F5036C1AE4BDCF35D9 -56F7F958D0A600B28B7DBCF127E09FA3A4278AAF163FD9C8E576ACC5E3282A3F -2F9167C68744E6D9ED2E5E76A8EDE76E6324A03DDF92E3E329CFC4E2B3C13D56 -77352C9CD47FC2FA1829C03A97ADB39F86ADC3FA6F8F4D171CD2E69D016ADC20 -7F088462E2A724E833B215EC6DCCA694DB9490F00449A11B83BA6DDBF64F6B9E -4BB753980470E28ECC677DED274DCC0DE847ABED5968EE7E855976820BB417C0 -1072D132D7FB33592CED1661A8D1A476FC179C1636915BE6FCBFAB688EB06742 -424BAE841C7F675E524F376E16FF60489DB9EF1C7D95C50C4BAA18408BE32CB1 -80E85C1BB0F7CCBA1AF6D62EE471EC44EC434C85BCCE76F90C2A9264F9B03983 -CE2BC42A2A22D543398021E7905CE5EFA5E0429B19273C134E0E6629A8616DCE -24C857E518F95FB64383F4D1339EE65AEF89F9798BE6B5807404B44AF398EAC7 -523815316CCEC391026B9759EF0B1696934C55DBE1992D458927AB4119C939D2 -2C186AD0B2B90951D14EB9333224FF343B0F8DC170562B3EF981442CFB4C71B6 -3041B81491BAA4D0C4BE442586D6BE61C78F64AF199737EE5AEA8CBC6F36919B -9103A2FA390B8D1955EB6FAC1B7D4FF549AE12562EF99DFE37AC5021250FBD02 -6F2572F2B26D2F29C2660C5F311BA809E8B3094E8EB21476A72BA4FC2A02765C -98EE0A8AAB56D511B5501F53BAE9EA91EBCE96390CF8C8EE43ACC8704B05540E -DA577F37810B240AF659A9DCEFDDDA2AED43E7F7059F2767CC9F095DF20E9288 -1BB6488991DB85793C046F4BEAB2AAA7DBA69526E83A1628E09760CFC9068321 -087129C318D6B5A7A10A6D5B465FDF366D8E9C7E418DFF90534393FE1D48ECD3 -8460C02B9A7C98B52B2E9010B06DD9C73ABFB7EB8E74EBA05DF5B4CBF72232A0 -5C8349817CDE593F1856A84B2B7692CE5E831D890C325F96234218B9150C3638 -B5342980C1928BB5635C949B9902475E6CE9C7320EDD66442CEEAFE824146C44 -40F95771F064230C2567C747BAFD5934D9871CCAE206C13F8A5722FF06CF0591 -DA9576A35763476C59F4CFA638A5DBBC21B4C01190A58718FCCA959A501A6C83 -3FECDAA23E59D234C372D07DD420DEF9A0B23B4D0D908B907970D32763864973 -1EBD9CC5A7C53C2098D9A380F1CD63E9AAE74948B209B91F77D1C19DDD26CF4C -EC61267D2126AEF60A9496E3AA26A1F2A383F2C854D709A60454B193B3149072 -67938C33E570D5149158FFD40D8D0592C934FF2AC5B6E0FD93BCA7BF26DA95E7 -5A381E94CF9C880D4EC4C8915C60B4430469EA3D6706D2D410C10D9E29A3CC0C -1622FEB7C9F59E949CF40ED21B322985BF448C24D54A7B48A5E10C8CA48F6B18 -A1AD2F09F6788F95D29816A251C19A18953A4EE9ABD49DC93425D90DD80869F6 -858286097FA0CD44AB0B5BDF2A371B02BC8FA4B0A4AC48F111DCE4A32A856EF4 -D10F1B777AE2B9ECF77AA66E3EEB5DC82BA69AB0DB3E536B08E6DD8D32302171 -4F30B69609C9FB9B0F25D26E4E9A8F94785D5D816634697C604E1BAF6C4C67DF -FF0D2C9847A27440D92328561541169C3AD45ED863C8A094ED14D1BCD713790A -5E48CB225DC501AD7AFF378CF8E94B3F5A61F52487B5FF4510C1E7525031D39F -63D9A9F8C81F1A4ECFDB4E3F1942DEBBC6DB124E2B695F6390A2FACEEAEC809B -80D04EC03B4D3110E93F2A2CE88BE76298F3B2E6CA79FA4240154A41EAF28211 -B79DF626D8A4C541199BB9AC1039802917451967BC159176BB6F1E17A02B9E1E -9D8D7AF8310F2F7ECBC22DE47F1B9BEEBE383C8B9730CD61D2392496B7239B6E -3CCE01BAEA37663DDD4EFE1A6FC6D2F053F74FC1FC28D3E8DF2C3929F64DD2F0 -6570C474B0B4BD74CF4AF6B72E5D5B7A079E6B592BEDB76BD3C0584C2ABC4E2B -0ACEFE33940EF69AA41C721F401460581EC1E4A61F665786B6674D2F0044BDD1 -2E2B115EC28A997E0B4DA476C09617B1CEE6A2283FB5064248D096EA5B0FBACA -FB41C2781E2CADA452F82097ED5D12AE2A9DD94CC49E90B12731085364EB162A -E404983B1028EE4FDC7EFEE7A430C715192E6A9FCD67BA58D77B3EC7179418E2 -9F44BD60D81ECD7805566919AC8A1F7EBE5CB882771808F32EDDED24DDF21A93 -EA0A872F229895B9912E65FCCCB6137BCE3E0980FA96AAE4F8040A233C5CF826 -97ED79A163839CE10B23AF1C6C48C37A7BD711DBF61F6CC713E37757D3B63955 -515B692289C3D22EB2D5048BAFF9E63865CC3C4EA26F356A448E4A6D93F153B4 -40DE89E06B98191899E1F9BDC0FFE92AC098637AA564E954937CA4758E3D13E7 -A790C92FC5064818CF1B96F9C6680708E10853F50E012F75A2136874340164F2 -800A9A0F7F7377FCA81760F626DB49D6A9285747A9867F423BF079DCCD22B46B -D730DAE458E3DAEBED7A85EE3899B9D55965464F45FC4D2D99F766C95B9F6980 -307CF7E29C6465DBC4E2ED023334831BBAA961E4493D917DDEB50D0B69B1A615 -AC19FE6143F7294CBCD9B2280B3DD739D9EC30822183F644FB1F53CAFDF3BDC3 -56135C7C5A5365B3B767E6F77FE7BB353BB137B41B3F3258CF9869FBB302377A -B2890B01E41C9197EFCE051C394F2206238886D69714E96FF6308772F7668176 -33A22E84871EF6B37F45ACDB7B19201C2BF5E3C83F74A58D319A9EB523F86F89 -C4ABF2C955D99B3C2F14A84E1A9D170FDC1F324C8B2F3DDB868D47612FE0CF75 -0279425A46062CFE4AA23FAE2A4EAA427191F42176DE3FA5A60A1C3E50723519 -FEAC2098A2955F13DC65B855B65D0879258D9BE45661FC2D1388D6670D5BAD5D -48B8BBE379B90FB24A664A29C66A20BB26C4FA710956765D637B7CAB2F57D4C8 -D1CCBB2C48AC19E1C36E8B5DF12F94766805D0D8886515DA29354B5F4394384D -6D59948D2B028619D130AB81BB38EC2FC7713D4D4F6B29C4B138467F8ED7DE28 -DF41B3746C00266C4DE9AAC4E71CDF8272152DF2310F80BC959107CF21814A73 -6EBB99F07B92CFD4E167F53562B04065401155ADC4BE985FB3F2595E835260CA -797059CBAE17FC381AB62786EA902B5D0AAD92602AF851635A6C61B1D9EA8140 -A93E8BF8E24A688A23B4C1EADFF3CE00109D86DFA84005DB0B4E6B9EC75DFC89 -10E92A9AAFEF65F2ADFE1F47E8AF72E97CDB1AE17C4EBF861A7706A3754A6303 -308192CD292B1B1BCD12D1F69CD6F609480CAEF16A569CC2354D7B725C81F7AC -427AAF42F2CCD1DC6031C0699C60AA4B0CFF2E6257E0FD316A90B9C034B9969E -D1D25EB23C33FC9A083A84E3AF380B6EFA30D5B825A6FE68556F6C517BF5706E -4E3B070D5D8F5DC452608180B6A3A7AD6A009CFC3AA5F2A6DC9BD12785B655F1 -DD5D1D6A3F0544D6EC661B9C1BF7B2D2585C0E74BABAE07E453796044F1B2768 -B08111D0FB75F0CF90C8E3B52665D07D79F99EF0435F805A95EE4ED0D9E88DCC -8D256D7A67A96EF18CB707AB91902DAD348CD514772E0A649B66287D1BF8DDD7 -E1CC998D0B26311CF5F23BE0DE0A7CA089E0259EB4399FFDC4379157BDFD7655 -FC5C2FF95DC94F2FF04C1E465BCBBFB8E3BFE024862D85124974BC6FA083C3FA -6DF2F92D3978A998904B0A16EE9FDF840195F817D6D40A630463D73F544CA551 -15F8784F4E52B0CC03528CA24467E1C3D6E1CA868AD2EC482C85CA111F814D75 -FC2E92124E29406E92DE5205CF02BE28F64902BDBB7AC3D3763FE78159B4F143 -7AEE808329D91B034CD438823E7736AF4135C5B6A38769FD9DA821E328018655 -DF6412118D8832ABBCBA583A55A66C758A908C2F195092D87B6887E9A5E036C9 -CB4BAEB7EBC74466E5410DD289DFF8DDD5C4ED6D478FC4715E8823264E9F861D -9A9C9B99514565CA025360188AEAFD7A42FD1F319C46502AB8D81DEA78A95D05 -457E477EAA201F67BC40979F9B86E086C7807DFBFA7E4A2CC0F90D87B2A3EC2B -753BF0346EF5C28AD1F96E4F5125BE9512886E70A232B8AB45B7D2B8FA190D72 -86A5A4ED1E542D23344CDEE87EB7FDE9B3957929AE3B4ED9E7A407530ED99A1C -F948E2689B7FF456E82D8CBEEA5FA4D4EDF577D37188FE7B22523F5E7DE71480 -46506645ECF7C46862F4ADDAC3D3F0D8B6D6C962236F83DE4F930FB8B23A0B02 -978C3B9DF395C0DDAAC6417E96A3488833CB7E6FF68F0B67C1702EA81BC3D6AC -E883CA0953D4FF48CFC6966AEFD6821E5FC91874CC51BD4B98233BD2164AC5E7 -802DCFC0CCA34E4511C4E68D89E711C0CCAF195E9A0E93217C5AAB30BAA40543 -BAE734612E4B74CD1D6D6DC9C794604C3CC678E04F8252678E18E61B292C3C7D -D02AE8A6E2F0C7939FDBE188151F8F41E58435168E28CB4A3F33CB49F294244B -69C4B5347D7443959F7267F45894165E735D00CDDB1C34980A9922E097795AC3 -1A3F5E45C609F32308310931BA9C18ACD083F8A63723F7E54D018DFB08BAF692 -4F258DFD971BACE3A13A863A9C951826499A814D984AA870A8FC75162E4C860F -7B4E459069DB0E5F331EEF074B3481FC2EEBAB1103B075CAD3200E94D080F3CA -66C9703764BBD33D05558BA4693AD855F67451118798CF236BA060F7539F4FFC -F3B1E8396EC34AE1D06D51FB678E2FFE110223FF341DA23CE45E58097E4E7F6A -99616B1A3AB563B342C5FD9DD9B1DB3B9544D0ABD8771AE0A858B8F827B5E27F -3ADC25B822A6190EDD69346EC9D6460C0BA25D52B906F6E37CF8AE26958653D9 -96E6F4918FEB6DAFC3940E40F692836B8C46169D978D3B6361F720AA33723C22 -B7A4C1BCE4292F85BD581F443813DF12A02C5B460522DB1E7D2D61C79A4064DA -10BF9B9DF9B347381DA932CBD3B152FEC7F3A0F7AB80593232F091CEE23A98B3 -7AE07929FB8D6015A6CD4B61EC26384966FFCD23034CD6820D426ACE6BDC79AC -9C17E5E482D61D203126D5E628027130684D2F26C4986904482D6C1589E1C704 -E42947DA81A5B507C31ABAE6AAB31F5AF65E736BF281EAC3D9E6194342B0AFA6 -186D427BEA12D9AAE1FF0D34D52353030C5E670115A719FE28F830562887FD41 -0A5A3336A51F0D752382B07125BBAB85CF54822B0BE9D926A0DA846DD11CA7D7 -94589C19A6B07D977FCCC211BD35DFC09A4BDF028143FD057C3DCD6F6BC34B28 -99A1B03C506CBDDB4D8345B3FA949B8566F9DAA7F958A7B05744C2D8EB7E980B -6A6A7E92C536995B673E2385F654CDD0A80F1317573730364ABC9463B77E3224 -68E4AAA461806CCE47861E9232A95B6A326B32C429D817AD5A3FDC7B2F5D472C -E8DE7DD2DDE194FBE7859302BC76030576919474A610E545B2E89BFC30416298 -014EBE7808197B3021E6C000A12647EA7E90A7D835C1D1F815E175B944302A3E -014B001CB71EAFD0363E6142082DC0A00B0DC19E740F33EA62BE1F8450AE3C9C -1B184D3C3CE5839A0AF3229D81DADB6D93AC7E7BA27CC3B768A430185172BB97 -EDC7C3EB4B7611858F7658F604C6E411CF05662702124E6DC1A333771B319FAC -9553FCAEED75C50A05E7BAD92538EBFE401FAC35F5CF8982CDED508DAB81CBB5 -2558C3BF59FCAF06D266BCE6B647BAAD2B0A2A2266FB6A97782BD461EAD173CF -884F1370C9AE823C85F5C392EE21A7217E603FF66A87BE77004C67E600AF8BFD -E68BA369C571B42C86C51D15350B9B6ABA774E10FAC7DB98893B62DBD832063C -93CAD111B5177CE7520F95179DB50F512AAB94E321684F9EA35DCE472E607451 -A8DA404B573B4C11CE658C9E7D1A3AC07F0BF8087A36859762904A1803277B45 -20840FB55C7F523246599E4930DECDDDF53961999A25D2A78F3C26E328A8F446 -C415A92A14A46397CC5E1099EBBDE57A5556887137305EE31399E8E928C7FF3F -D24B02233C82EA0F0B52F1B1EA91543BD00C69498E2288CB6CD5E8F4ECC2E314 -D463C085482F6C8F8E601A06F069FBE4FE891E29B73A333A4E48F0A384A59C2D -A01D470DE89DDE5620D6D20F94437CF558D96123D8D451F609CB7023C246A63A -145C16F1812AB2F82F7395A8F966CF3706B9ABF9D5FF13897930E4D7D697CBC5 -77D3D89709B89D5D83814E26619972C241A654B145A9B63E20A7D7394EEDC424 -3A0625F0515C60D54CE2A5B4D0506B130218A9C83C1824576C537A64A9922DF7 -934A40DB1783C98D9FD20E673CAFF7B532647689F1F2A5AA1C28E2005C1B9A82 -1B4A56D2F77C8B71D9945FF9898B85A0AD49C8079EC601FAB664DAACDD78E63B -BAA581FCC59C0B23D601216EE8AA69B63738FB5D3A461DBBD635FB18A4CF5167 -45F612C2498B80CE2F8E3BE11BB0F57CB712C4C0570B54FDCAC81640E6ADA1F7 -0835A1B7E8EB31E9DE3C11E0B1AE5CBDEA7645E764A767421B6682839BA8484D -5130B2F6EE7B997926B1B2600781EE5FEC641DE4F3FD213843FDF14A781D3643 -A267B7ABB5527AC813C367D58DA95380FC828D517AC437603F87EBFA64EA5E08 -3DDCC06BED850CC08EB8C61363F03414F9A23E99BC005124B5C348F422A67BCB -DC6A5D865B2225D085B249B7A483153FAB21F5043FE55024BB5027BADFD52A69 -46BA5647A04940348317990FDC91DB0C1E493E83972F1CD01150E8A2705604C3 -B85B501748327D9FD8D8EB4A878FFD72A0E8ACD033E03C1DFB35B8B1098BD2A6 -E297AA8E65E765A9D92F7F0E46E567B2F0179EEDA2F674EEF2ED7EEDFFD9B922 -29F72D9DA808D81C312E823E83D506F50650F7BA2F94B94C40D58A00BC11FD44 -880CF8918F7C4C3D6949A7CFC770ED162941980EFB918215F6CC80A7941FC467 -FA3D65538B1DF061BB3B5238126E01F319D3937A3241F02D0985326FD56D783B -24123E58FFFF3CDCC50E096A71A944C9E471BAC8F2DE41F430B319DD1F7F3ACA -400DC2C0CF75CD1258E3EB945E42D9870E774D65DC1CB182E9B7D0FAAEAF8668 -84C1077A71E5C95228915EE533BA686504329DE2480D36A0B13501944F900D98 -230D0D0EB3591C23204D9C108C56EE2920D21F4871E5A8824615E3001300C447 -44AF734326CB7C742222FD862729938451DB670697B79CD8AF1B00D9ED7D0002 -3877A35CF39C89B4EDB3BD0BE7D12C0759E8D6A35A241473CA9C9D9F74EDE95C -8D633B7DB65772E00D194276307C10ABF809750D2A8DD375675645E17A36AD91 -1F85F811EF4D5970C2A11397434642D495F67ACDB0B6CCEFDC74ACDD0A59AFDA -9BF9194542EA54C24C9F622525E6D2B8EEBCB8F946EC7906E6163517B957F4E0 -C0C50C8E2989764DF98287DDDF2F211F546387494A2A44C68505D7CEC67E5390 -CCE4D3D6CF672FFA80B2DF81766D1F94747824D7AABAB17667485D17F7EC5A61 -77F04289FDE1CFD903083F5CBBF0869F6E5414C4E20D63B967165C9D7248BC27 -82084BA13896A667728B5C71FCAEA6416951EC753717891D9F90674733A05D50 -D5CEFFAE43BB11B72B8F16C855BA5F0D26BBCFCB694C667E507FF94133927748 -5681BB4DACD9BA08AE6630E7A742D3AF1D1DB04A6C13DEA51063F3437A6E36C6 -00D592F06EFCC6C485758AB22A957C6C2EF0BE8FB16621F54EF9BE7150D45397 -9ACEE4DFDA63D14B71B1ACD42D67B9D862F4464F204A25F337736547C0F3E697 -EEA0459991E492FC28B75B25CD8F0A188BDFDA900480BDFE67F172F61A015292 -405A576326E63C87BD7140E76601956826516AE66730E6D57F5FD43C964055B8 -6BB09EB0DFC93F5B78A15BE0B7C4533518847AFFF483F428F7675E7234A0F66E -D9DC5426BD143982599EC2EC9AD374822E428078E8580837BCED097844C979C5 -9F07E4D5F902944EE1F0A8D339EE814745B4A520794D7F4DD9311AD372559AF2 -D1196F10BF336731499FD3DBA03EF6E49AA0AFE6C99F5DC9C99C8E85B1A972B6 -390176C6B6EDA3DCF0A3334B1971214483D1082789BACA1892A3BD971AC9ADD6 -8817F031AC322E16029C689971D06FF45284C0A6900FF5769B5991F290B2D32D -1C7156FC9401A11290EF37C41B82B902221724AE447DFBB10F85EBDEE66110BD -CEA3DF2351DCA1E65C972C81F2B89D6CAD1FB987C29F02970E41F6F2F317DF6E -CAFD9E7F02D48B5AF58307320C0F95B28A8295C2BC29B689EEFDA81F1FBD52EE -38057FDEF58BE337072D0462A4AE03F0780EC62F6D8AB4A242EC1534FD9C51CD -70C3F94B538B4D9AEF1BD8F7427E647B2B8C5E19ECA1D565761531B52935B095 -A31B00B40D07D4E6963399EB3291F47F63C45C5E5E29518D9759E31FCD861518 -DF0A34C519A18B9475309AE617C8A456A4D6CF01D8D4E6482FF509A5CDDE8BF4 -C2FDC963AFF50E8F81E1F644D11F53051AD7303D15E633A5180114F5704539CF -B8B50E017763CE474CDC35834E5AAD07A931A099948A6C848030ACE5837926D9 -7FD9FAFB25A099832D91047E0BC5C37BDEAE93BA64ABEFC831CB67AD8EC8A1C2 -DCFF7E1C18FC9A6EDF35F7B9642223D82A657245D3204DC8733176E4CD8B28EA -BADB93906825BEF461B8A29EE8F32CB65D18CBAF517BF1E766BAE940F81197D2 -95A97CDEF6439C18716A8DF5DB91EACE95F2CEC2800D9EE93AAA4F12C642D0F5 -78618A3EAABD4A9DBF0295F5F61D1E0A5DC4FCB513BE81DBE23B733994AE4358 -91668A7683C8AA5E74253CB614CB72A002551865155C3B22CC20BBC234977D3B -2264187531CB2AB2AE77044D7669139CC1F1E0258A355F8D7E45DB084F43E5BC -BE11D376F1B040A9F2140904D15AEEA4C65E463AC396DC2F8CF642803FD2CA08 -6106863AD763A5762B413C6098EE985699526C2F10B73D5CF5A5C8FCFB00A75D -8EE04EAAE2B1A1376AC4659C75DB630BC9D8A89EAC3A41DC65486EE0CBEBA09E -E5127EBA7F22FB56E11DE85EA3FCC5EF86C61D035D55F8A211294B66ABDA4735 -370C8909D3AD3FB83EEDA6DDAC31C7211F55DDECCE2A76D518EA3EF7C18F1D74 -E551CC3B9718C023C4399B694CE556071D4EEB4332499744308695D7FCF4007C -6C001EAD49D7726AE17109A8016038E923132F80C75F2B3C850658C69309E653 -F5E803F0F524AF61E8F70E875E79F32A22EF77670993C12431FF2740DA947B41 -6AE7C9D90C7712BE19666080CF3DEC4079B0C05435B1871ECF35ACFE8007113A -BF7C8518CE4A114BC62126EA623E5138FDE2B573B58F30757BCF3B010BAF8A67 -4DACBD96367DEEDFC21731BBE6A28E4EEA2A625AA682979B88D37528DD8D6E64 -56A2530BBA7700DEB84AB34C29A8402F9FB72E4A2F0AF1FDBDAD266E799455D2 -B5D4D3AA9B95BF26D6B2393B876ECEC41011C4636D4F1FD195E95764D627690B -A5236BA4154CADD7F34393FC514B1D46CC5EC334E0CCD0CE153F370CCAD25DC9 -F432BBB12D3101EF5B8131F8BBDEF9306FB49444CE206C0D487576DAA936A65A -4AC472BFD5AE7D4F0DB1DC8BC7AEA924A8ECA1361C26DED2339B427FC6C52A7E -6FB778423F3494CB50E41BF7DB32C1A0DE1621C04A609CE77F62FFB50180E3E6 -ECD85E92CB4D1CE6F5ED9AA0D0A0C3585968559547606EF6966CCBF98E3AF59E -FC505D0FCBA8A575AB0BEBDCDB3053FDBDD987DEB7F5D6D3AF920FC6B27CE0EC -3EFBEF16A5D809F604767C0C07D17F14636ABE98EA17DAE9C9835B780C78583B -FAC4E38B6BB37E203EB776BBADCB416A56D7762B88F78D5DC9BD94044234C492 -10534455972606A286EF42BBD52005BAB1F5985E653A4C1EA3A22E72CD2B2B39 -D42689D41F5F56304423C3E346D82F39EB4AF398A003FFC0EE4CE90D801C5CF2 -85D7F4A894B2D42A2DEABE0A19749EBFDB6D2548AFB150735F33FF200335B427 -ECDAE0800F8549EBD4B6ADA45A4969A58617617F595E10FFEB0FBEF422767A93 -E95CC12E99261389A80BC08965F9315B286EAEC4E543DB7143353332A8124B11 -B0E1A81939228883986EB56A641FCEED024A10C67BB874A379D3AA3988F8926B -A351FFCD2E957A06E74C79E17378CE552CD09483FC8945BBB64D67F8CF39E986 -2D1A5B12F15CA11F9DA9DCEB4966C178AB5B1943E9161DD105E62D41D14F1AEA -EB4999D98815FD9D21013B2689919AD238A66B0B12B4C6F5BB424E44A771484D -E67B57326A207217D6D141E267607D4C66604192A2B0ED182413F04C37F380DD -7550442AE3E0F86563AC34FC580CBAF52D4DE3530FE96B2E2869A2784526CBA2 -279C138C1EC9F3016955D5E0FC2DA6ED47D61F837FC2F50A9EE782541C836539 -1DB89268F6A80455724585AFF4C8617B20EBF9B9664712F5F7235A497AC3AB3C -6917218B2D18E57472F48CCB599C3B4F2892B8157FD93A4B9BD5A719888ABEA4 -914DF3E56D33582504876DB0062FAB1CCA694B9D64A49AFE1EA99A149B6E6932 -5AC364E9095FAE0244E648FAA9A9E1CAA5E94B085671A1C012E267B490B5D2B7 -52379A959E35337FA0C20F589C89C859D37F5502BFA3AE84BB9D81C56E8B6F0E -76908CD8958E3A1CBBA061DD0CCC833BE7C851A09B341ABE106C619714EF14B6 -DEA21DA0F2822D37E783A765F5BDBFCE8FB5BC8F75C56E3FC04AE8FE03F600CE -10DA2C120C1AA9C79DC8D987A87D1B1F7124AD44A44EDB67E785DC2A4FD7B5AB -E6BE85122340D062568D207A8729DA26B92DC7029117D29FF071D8F689F65D62 -7469AD8DD1F5E3CF1EFD2E0157EBA8F41ADC76644E48AC74E202D10DFCA98479 -49BBF66CB748C56FE70202C02B5ECBB1080D6834B8CFC8A8488BE8A502F0C0A3 -DC346A1EC38B172277B244DF4EEC610E50E1FD9C6A45F5099BE894D060160A5E -7481F3AF11BE4A71C49C4E089A12FBBEE7297360CAE36E35E6CDF16D9CAF3A24 -E680AC8CE756D3C945BBDB2139063062C9C4215EFCF77F2E7B2565F0A0ADEDD1 -F8FD0C4D7A4C64704B568B3BB66721D105D3D8A8D814CFFB5844DF2B3DEFEB44 -D3CDDAE7642EE75B59D780D7490EDA093D13833FF102AF7A186EF8F2A8770FD5 -69F98F812B29024DD4BB8F5FD49E0927E8202BACD9F773A1D4EC9E4A2085624D -A7566081270F322B2642CC758E2B5CAF0432E78E331FA5BF0E025B953CC08833 -7E80E535DC3EA12F6D8B0E73E354E3B358633139D5BC3B37102271A2AEF65D8C -DD0100DE27C285D228A4391EBE70428C4974E3BF16237C503BF9F17CAE80B5DE -66630F26D6082728D84EB505452ACE002D3D96A3CE36F0B7DB93B6AE1CDF773F -8EF4EAAAD384E7D28A0C499CC38903F7EE1889AEDFDDB6FF180C2776BA7DBC33 -975B0BEDEE2B02A6E34EF65AF208212A1BC47794823FBCEAB57E1DE0D5B4D132 -D31404C7E4E7B7E8AE1B8A90B078C6565143EDF7C86EA974EB2D84154C293EB1 -7338C5BD8F021D40D29F646CF31DD9AA14BD090680AAC8AE481099F316EC4749 -BCF5BC65E7F9A4F856CAF3E5D3CD9B06CB7B64DFB5C439CD92E4E1D63D829701 -2CED8107B4FB6A80E8DEBED078B3540BB5E055250FA529530B0B035D749AAB59 -B2205E1E405363DA6C0B16BE5D41F5FE3B16289D983B44BC6D3F589C4477F592 -3CD817EBCEAEBBFE6CC9CF1C0C94CA39E7EE2029007893C40CBF694AA88BDCBF -A0499F2A22760B4FF01EA292F9F2BF0060FB72421B5C4F92D132BF2FEFCD5323 -435ADF9299EB3606BBC7F1DCA88068E9A8296C020278C65CCDB5FB0D41433326 -D85B0590D0B4594B3B6897F8F51E56F8882FB8F37DF7BCBD41509233297A11CE -368FD4911BE32552CC2FECC9A98AFAB72B9CF21062B5B56F37E35457E6E27EE6 -9EA25C8B8933E38293FE178BD91D18DE69966E068DFB263CC22392F61D765538 -DA54523707A62EF8DBC323983FE398F8DAF8FD95F26F4032AB1A6E3EC76AFB2E -1279A60B8AEFEF52DFDC605DA9CE091F24491B7BE41177E2872A851B4DD614D9 -5EFD53076DFC5756509CACA9E69EB0380634E586E9F06B786609B625022AB77D -97922B1F2DAB9DD033BE2E11443F24F0FB85EE66A1985DCFF9D8AA93A11D0AF3 -9BF24E33FBCAF72BC85E6B3355F130672F0630B8A1D258718EFE45A51A522F66 -DF6D779B654150041D8F557A9565C39FAF1EB01153A8ABC4D05524A4FD160551 -2E09A4B4E1B446F5C944FFD0B770F7DC166C85886D301AC3483BC21496B09642 -A11915728923B01957241F7FBAB8238E79BA49B49AE2154F71165EC8EEB62298 -578BCD5050EB474A56839BE37A67174549EBC4DA422B4360D50797BEDB115C85 -3C3526FD46B7D1105428B68AC52680A53320AF24AA12D793D1F14E2560635501 -85248DB2F251DD3423D6C6722A1F354FFFDEB5006B599D47C7CFA26CF96FB4B6 -8057F2B1FB82E5119BFEF70384997A19DC261F62CEA0364D93BEF6DBDF85C5C7 -8C515EB0850D909744DE8720060FAFEC8F4035C3CF065BEE291599C5B82410C4 -ECDCA99D957871B1485E028BD5D837EDAE9EE2615F29047407DEAE94C05B3B4B -37EB9B774415CF8E6D759908FC40CED03761329355416C055C21A529F0E89700 -ED9136B16D9971CF1A0299D3703BDE044A8FAB6FA4CA7D6B26F379211AD70C47 -A8280E919091DDE0F9F2C9D4303CCAA9DEC9E6A41799951C6AF62F0DAC1123CA -2E3FD3046438002673938F576A96B2BED3E5B2FD39A969B638C1FC2BED379380 -6B86F68A2B2405A010F02B796F60D10AA97A835C6733C6E969CACDE2194680B8 -D76B78275EA088E01E67DFF1BD081E5F9E7C3DE17AAE4CDFB4E4FF98A22299B8 -BC3DA60C4C02DDE93EE6821A8DB3DD1B17022589A333B7323509CC2AF888BF6D -EF902CCE0D33FEE46BD8A476D27C3DEA65F6FC9799B40391544B8A42AD5591F1 -3E8D87E933AFDFBCC0DB880385A86AFA73365F6DCA9A1A8836579FCAFA0ED18B -7F2A42FFEDFD233767B7247455E6D0CFFE193B5B6FD6EE0273A32DA45DAE7189 -96A2FBBF5049380345BE379B84997C0C7B72E34791FD65E38A44CE1CCFC98ED6 -D1DF926C4455FE7FCB544D687B70CF416A547D94A84C9DF64A61034E43106093 -23A4FB1754E274581CB7D01871A8E00AF352FAA6C1B24FD27343157B5B2709EC -625D8F85192393C682B739EBF65FA47BC8FA5DAB1828F4B0F7699C1EAEC74E55 -2645C3E7FF03710D24901FFAAD7BB14A12003ED61FBE2EF0EABDE9B02FB9FE16 -E0638DF3ED8DB8A0DF8EE978368913D3011BBFCB8DF718FBB78BE8C0443EE4D9 -774F5269CFEF93D57667F09BC73FC37DAB996CAB3CEB19BE1966BF7735F5D8AB -6404B66C3760BB3AD191DCB23AC2ABD884D833DAAC88DAE232218AEB006B40F9 -9C0BE61B420B0EF3111AD76CD972EF61CA05F32C450D30AF955EDC63A3D70EBC -D76C66F83B7E61A149FAC77884C78494D576043E0C44D5161E29D8F482484494 -395202D50B9776B54A9944F80AAAA81E6E3FC8D6FF478923E4975C8B591C9A0E -094F422FF675A1C04E736A827A6B42C8C91AE861B46F490A77118ACD7496C339 -1A2E16CA94E34E2C61245E5D54DDB5A8AFA3B0A0C04F462057BD72FBF9CC85BF -98808D73A036C2EA1DC6DFB3C98239921F322C3C3BB4B05952D9F055466EC977 -648752A0E9F8C126BDCFE2DDCE5A85A5B57685F3F534A6460F8273F385BA690B -FB3EC6F19B4DAE1DDF8E3CED5788350CBBD3832EE84588184C88426D82687614 -42B99AC324BB7D51D716B0771281A3D209AAE3AEB76DCE73093375D4E9740244 -87C7117DF8EA6CC7B99898363B1B407C0B5CC18C597832F1557E154C7D4931BA -79BBBAA593F473218AB0D1798964605C02A2A60682289BA88115781A36E05AFB -213DBA60AD771F9D9C332EE58CE4104B4E3213D6C5571D09F4EBA3D85926989D -A8E96D143CA0364C780556E59E39914E4AFC988A7BC7B1EB352D02F753829F5A -C6EFF13BAAA37AB5A8B62510D0DD373F5C0DA7DCCFEEE724F0D7862BB73092D4 -55C7E0FA43FBA607E4EDE16CE1F875571DB09956D6FD53FDD0AE47A91BDDDF60 -4CA2129A9EA729D41264A039D4B841E207BA5A2E8B81F5E866F7944E2E432C93 -BEF83BEA1276266B1D37C2345FA232203536A880BBDAF573B7CE9855AB7A2574 -0D58567235EDC86C82D073B8AB94BDDF7B8FFA4821791D5E68CC0AF581773F02 -4D27367C2F3CE426E28C2FE6C238BEF5F4277111F624F1FB2C0332D464293AF5 -81765D8A0DC5B50915DB1155A0453F1FEC0D432FC5868F5851B888E4F1B7FB08 -9D12B61C3EB0C8FD63D92725F2D16604E12E3ABBCEEADEEAFE7368EC205B4861 -3896CB2A9CC7CD3F8D345BBE5A0B2A96ADC7D66A8A241A652A247F555BAB37C9 -98CC5C16F7E6C59373C15C4197A03A43609D1DC9E210629140F440FBC85C4E6D -F120EB3E2397A760A08C8825E53A5D5031C3E200CDDE60A29992A76E3D70115B -809445837F16E1F30BBEF48DDAB6900107E371318BC7A96AF47621872ADFE5B6 -01D78A37DD12EEA29FCFD3E9E1DDF86379280062D1D3A542A3210A79618702D0 -5D8A2707395A5D78C698C7FAFB0D1345D977278210E75FA8A9D611242A07CE8C -7F68E96AF1EB5A0A9EA7A73E044638639BD0B1E0F4F2FB669DBF6F0CE59747F4 -CF7DB5F4BF5423900AC729782077F36373EA1815BFAC07B281B4D4460F583887 -5FC0F99FE28826783D5A1080F5C8269A54A9C15D787ADDD9BFA8CA0EE94E292F -4F4DC1320F29C6EE65A2D222C56F468D80F96153D2B57D83FDFA444D34076F2D -6EE3FC065A7428452AF36B19A56DE3ADC2936E1B6F6DAEE66D6B577F1A4B32F7 -4BBA61620953F8457F7AF03011B76AE28940FF69B61DD4BEEA2A98999D335595 -193A8189E521588AD09C7866E86B52AAA822F1C58CCD30A67F2CBECEA8126582 -066967E4DEFED674CF19BCB9C1D72DE685D8618368A1BCB59FF49721A55275F9 -F1F8A6D5C58C232708E56C8040AAD633347378E7F60E30AEEB95D9925EF69524 -AC0348583C29402388491A01138274792A1C728F6ED2ED23491180AD718A2B43 -7F7691C09E7008ED1E8A49229F41AA10719339CA4EFA44FA24C6D1393ECF41EA -7A1CB96A8F4EF84305C9999BDFE0684EEBBB3B3A4A9498D89F3CD588D31FC00C -6AEFB7EB9650C2BE752B819D2B68CE36D79F538FF203748B6C491C51610F04F7 -43BDD86DB26A2B905FB8E0601EEA9F7CA1E2B26B005AA8FF0D451D4F45C3E6C8 -22B79AA3FDE7E7D95B91834C3D01E94356BAA6164229AE7A3F82455D457F2EB1 -DBA0D7FB8F79EC435B59F25EF6F9337C635655EA13A8A04F5073C3B6353A0004 -D9D85D824BE17A94612A3559685A42224CA59A9F55058BBEFDBBDA5CA519451E -DA0077345ADA9205320586AD3B5568DAB951D8C2F998B0BD8C1C01D3270AD982 -2D391EA3C8618293FBC09582F21658C8EE2FDCB9EC7FF8504ABB9D5803483DA8 -A31D985490FC989E75288C5E8EB1A3CFEE35777B2C64918AD3EE6D2FE5F13B50 -9FACA93C0645CD9BE90BD7E48CFE25AD2C6DA42234D7D2E9DA83A0A0271D2110 -00B0A9E149392AE7072ED5D31B088F7C1E4447D3E5423C29B5546A26B0D4C1BA -7B8CBB26BEEB492F6EDA6B03429598B28FCF3F27AFCE1DAF8E7CBAA229CD836B -DF8BB45825DA2858BF9DBC9BCB30CF660C7FD418EB3D7ACA2BF3A38D304A38F2 -127937A9296041925BD54796FB2BB1B01F0E3C7C4E7304C87C0CBAAE4CB713D3 -69A10398CDF5C40E43B301BE17F0094EFF2BB3527F44C1F0ADE74549FE2B290B -E84B679A4B2D5FA09ADBA16C14EAFAFFECDBBF13E9C395AD367EAC66697AA240 -DBCA20F6F84CECFE2742FA6BA9E9597B65ADBE892B4747F4C0C59890DE22391D -469AB1F8DB6B962DCB4F3AE6A8F7BE07DC903D0D6C1C00B1A06B51B12A418720 -8B03C294EB1336319BD0960040AC293459EB6EE4562BA6ADEFE9838BA89305A0 -20E11073F479853A856B3F994F717457416EADE555F569D7F9024CA0D2486BFD -BAF47F3F006B149DFB328E836C3AB71210E42A1269A7588CA3BA2FC80FA64B42 -91B01A1D58CFB9A2125B161988E7DAA519907C73843EC08FFC502022034ED1D1 -3A27F57F94FC6E57F7B24348D66D198C48114E4E936EE6D2456C5D61FD509182 -A18BADCF9F6014823E6915885273D91C173CB58C1962F640668A86EE2454E318 -F5CCA728BA2035EA749CC674E832B90EE789BC9BD0D93959B901C006D4A57642 -36ED92B5AE29D8BF29BC8ED3011D4E2E1A180CDAACD9679D95F3685CC3FB907E -53B1FB857EAEAEAE33E5B87F1B53D7432258055FE02EF80351F8651E169DD121 -14654E913B701564C9DFF335B44EF9E7C34C891E8D5B4DC8AF49F1E8AEF69C2D -181972F3558AC3A9EF3649C5A8F62DDAFF9E15B8540AEB5D665FE8C58A7819D2 -E945305CF8414E4C82475C6C7EC10365322E0D1251AB032D2B53986AFD68F5B0 -C2E9BB2BFEB6A1E1BDFA8DBC4183DD875B6E09D9D7653C97569AF9160FFD0177 -3D23E21C59B0330B6034F8BDB5854B6CC73463DB04BE06AEFC170A9A0E356537 -99877948CA4CF92F1B24267A1BAE1B5EBCC70D92CF76D63CEBB004B77151AE63 -BF957222499C82FB04A976118FED7C15810F7CAA98C17E06CA6712F318405E8F -E40CAF5568AFB6464B10B409178F6C2FC5F2E1659D5370004D8319B76AD4E24A -EFEDA214690C5CD3E0281612E90822632770CBCA36CD5581410F0BA737CE5581 -AE466B3A4DC73EB951818BAEF2718749B834A3A4C7A7EC08C123069FBDA203DB -DFA7B49135B6C7872B51E25F4210F282BC6D6F429C14B26BAB2090EABCEBE2C3 -C2F58AC82C68C557C63CB2B4EE2167F7B52B444F917DD54AC87D21730761ED32 -561165CB25CDFBD83C1A718BAE119AA7331E7C99534DC68AB0996A39AFA5237D -FC1007CFBD84917E667F53A49B1BA38998F29056A0E8972D5E6CF04456F63732 -6B0656B515C865A55E7508BBABD5F5AD3F3FAAE9C2081E2D32E5DDB16C3B4ED9 -AB0F7B3A0929E7775B0FDFE576E15043A3A9D61434FF0A5379C2266BC4A898A2 -A77B5C032629C85724CC1B91608539A0DC2CCF7DFC55021C75350C0EDDC79D50 -0A577F2F2960175A90515EF6F58771CBD2D7DDE0C78AC263AA2FC00F57EF85C1 -50ED7C5513B0E7960D2AF0B83BAE0D9B696DE437ABDE36D128B618B872AF1F6F -959D1871BEC575BBCBE847622031307858B24B041DC8D4221F1C6DAAFF7AFE5E -C7064515A0FC41A267943125A71F300BEA8175B85668632CE8D65D99C75C3C6A -3CE8CF0165461DAE6E57B5C92A2EF499B3B657B887D05F8E8B56759E23F6807B -8B3143BB22299DA9DC600CF907D983E4EFCE3DCB42275C706E1A7A2D47B5A9B0 -F3DC3D3B279ED66EB955E2ED9E64F660050A9C1629646252924412F639616A27 -1A6C4FFF63BE6B0B616751A5A80154B18BF152F53D153FB21A6C269298D54774 -38331BE0DEB93A3D42831ADA931C653006BFAB39162AE1D97574CC0ED7BF5C44 -610F6C618178CD9BDE88E101BAB5F278828B3622EC01DF8D4717BA72F5DDB4A3 -BA3EBB687C866EA3405D8C11BEACC5DCE3076FC8508996D51DD1B2AE89D37B12 -83E11FC3E41AFB8B497F676C5E1D161BAFBF18900D50C03CB6CFEFCFFEB649E4 -198F1453DE0BBD03ABBDCB5A075CF618978072C47C3B4A24043B687BAC3AD657 -3657A9A9B3813C2456D2DBA2D910D7DFC0B55EE4EAAEAEF8BB07204F0F537CED -B8F67C2738B5456BD9F0F22C6E54EAC7CB905375C915D0D662060360ECB10C10 -F30039B9A5606F671E0EE132C5788655E4671F2E79D3AF39118AFB95EE5FC061 -BDB869E0CFE549BD106EEAE8EBB6A6DF727FDCE35F0375E95B27DE211FE1ADC3 -90BB092E442046A7E5DC902CCC3553CBA4912D989ED8261539DE69A871F82C99 -06282FB2E8105107F9B443245FA74FDCD2A47673DE6E2F631D3918374AB6236E -792D5DAE1C76F3FE6A7C73346D1E8CB2944E382E7C31F99F6BD5029DED9C3E54 -984492F4B99F10FE5739F6D5F6F05426991B8495BA4B8B21002CACFA1FF45A51 -6B76D1469AE3874D97517A32B9BD998D2E4590862803544E33330BB869C5E3B3 -60BB9FE9B9756D3FB048C5A01A25B39B8729506D0F392350136C3DF46C9BAC76 -CE450B346A274AE22058339C6DE92E6CDFD584F421756E17ABD5F5DE2BAE2D7F -547DD3CACC6AA10AAA3BEAA1BE9651527E3B7CC5F11737FFFCBC52771819DBFB -4E6D3E71EE6C4A0B24AAE5988F828CB5392821FF2195D3452DBE0408D0B87669 -C6A630B6C1E00D0F1CE10F1000310B9E177F6253BE09247DE827B97FE02F2413 -AC5E94569BAF3635B4C5936BF1434FD7D5971F6286BBBF3102B3CFD68AD25993 -B69BFA3C89F4F4C777BBF3190D1295957F9ABC24BC147E8C95202A6CCE6BCB05 -91B821B1A27A398AEFA3A22ABFBA4227C5D0E0E138FEF04391E39C66870A77DD -5D2CAEBFBAB1C5511BD62849EE9963D536461C0693074DA942864438278C2778 -2A49489EAD7B43340ABCF99A71B9836A696995C6A459740D58DABB5AFCE96C08 -B03B0D403121744ACC6F475E194E79A30AC2B165BF302CEF914D34777FF1CA88 -46EF2376889244CE73C9123542D3759DF83B3AB2F8E5D4865FC242058AC4C337 -96E923EFC4FA1F23800DA6B51D6187EF9F1764D15FC343C5989760998C65C642 -C4201ED35171BADFECDF52AC6CDC58A0CA988E44FEE389A599BC59395969C211 -DDF7969C5922950B0CA4B0D9C960AB1E16A60BDC44B9F90D309EF1BFDEE1949B -87B66449FF949F1B935DCB7B492D4E1E805167B9B5FF1454AC7D5409E2C8BDB6 -13B3DC21A3A3A834A64BB9C9FF803E2754EEDCCC140AB0D8A38A4B04F78B83EA -7BDE25812DBBF98994D414F49D560B38FAA060E1B8B5BF985C04D425CE9914B9 -6EFB14ED4DD7C5F5CCDCA97EC2AA2CD6994A140004D12F7EBE5DCE90183592A2 -7F431A2AB72AF8E4F462C020B3166583C05F3A1363CBBE68DBD024ABB7F99523 -E89696A976C173D373E4EB4B20671F010F1F7A186BFFAE0152A8A38F0E41BAD0 -8543042253DB5F848324A27D0E681FA810AFE80151BB2A7A97594377ADA7CA6F -58EA91BBFDE300C547F762D6D0696A4C1A145191F410B6B784F740B8E0B3B855 -56613610441A509EAE3F7585272FAAA54329831524A5079F6D78093B3EA3FBA3 -12B7691ACDAAC0611499FC658DFB64A1A7B0D048C82050D8912491FA1F5AEE1F -E02E423A89119C25AA0F89EE27882697E60DCC0156A721528E4D449AA5B9AC21 -9F1D343CA479DA22D4DD4DB7EBDD46D7985428D4E799D9240AD52ABF2AA64773 -D4319BAA29ABEC21172CAA7C0761F78756D3C72A0C921EB3AD83A850FBE9A583 -EA1F219428A23FA044BBBC6755F512F7A8996DD7C793CF8BF7FB2277DB8E28DC -BA3CAA878C7BB8D04343B7B9E4079EDD1ABD862B8D65FE1E305BE631D3D03700 -EA13375B58FE76453947CCE3A01890CFD4F91F5ABC705BBB15 -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l048033t.pfa b/client/nfsexport/lib/fonts/l048033t.pfa deleted file mode 100755 index a56b5894..00000000 --- a/client/nfsexport/lib/fonts/l048033t.pfa +++ /dev/null @@ -1,1267 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiSans-Oblique 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Sans Oblique) readonly def -/FamilyName (Luxi Sans) readonly def -/Weight (Regular) readonly def -/ItalicAngle -11.3 def -/isFixedPitch false def -/UnderlinePosition -36 def -/UnderlineThickness 72 def -end readonly def -/FontName /LuxiSans-Oblique def -/PaintType 0 def -/WMode 0 def -/FontBBox {-219 -211 1101 993} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078989 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D831E44DCA3B6490FF0789 -636294029DFFA55E327982DD4A2A67A6FFF480E29F5A881EF13E768B43D431AC -37F159650C27EC72157C59E1AA122FF145C863CC787E9A7DC23FA008BE85711A -EFF0F8EAC9648157D8211D40578588623322CC38EA02A3880326DF2645BD3F64 -08412786DCE5E604A2A62FBB694CCA1E173447AABFDD315C766BA891E3D75393 -437A58C7BE654E8B56EB2FCFF72BEEB66DA88A528F948A1278CD8C27422AEC7B -96BE8694A1B33CA185601D99A08AC4905EBBBA42E7751122791E5150EBEC7423 -ECD39B2D6D6A8D2A7B920E68E80ED6BEE52083684530B8484E6475D0646EF488 -BB1BAF858685DDA12D8D63B4D35DB9F9E5C0459001B27DC28E98E154771B08BE -055DE6C18C9DBBF7892717EFE2F18DAE3B714528DF55A9BB6DCE3604435E4E82 -3567F359CACC0DFB39D23489E75D582DE8FCFDFEB6DAE957065CFBC65CD52E90 -ACA6024498AD723DDA921826B6303C7AF6121273B3C87372CFA8D6D7A2F23D4A -3B217CE35D2546E0B4F34A2B53F780AFF950AF527184D475FFA61133B9E1F3B2 -8612DBFEB7D7ADE93A68187E35865E23165C9BA77C899A309DC736CE27DEA6D4 -897D93B9E5FAB92EB8DAFEEA2E1C8A0D4EA9820860F103331EEC52FD564F17B3 -A6998015B9ECBFDCD47C10FE6B1D915FEC61720051C587E36D4D4C4BD30DB959 -8F0D1F67850B7342E41125F0175B287DC0984BBA8870B2EBD237852E12869412 -D864BF76ABAC386ABCF0D8CA91CA842D6D4F8450DEE0D405DD7B5965F69B0B96 -309E02CE3CABFD2038926DB8DFF48618F83DADFE43C6759F21487EE741AE2E56 -ACE575512F6AB199BC9C0098A082D4D4E21BE5F66A54DDEBB6CE8C00DAA5D92D -51C6C0CD9D52E07A2476A92BFAA6DDAB6581E5C5F83BA2385B852FE2367420BE -66C7455A817DA5D1484BD3EE124847B89F1451912F4A759D0AA87D1EB408C340 -D047831847B5DB5C943BD2D5EBBA1D959BF559D2BDFDBB69BA0DAB927E1D428A -C401BF5F2DEBFA016CF35B31F5BD00883043513928144C4A98A745D08D81478B -A5733CF67EC9FCE378C4940303BBBA71CE104B525874E93DDAD5ED06EC4F5E8A -917C2E46A4DABA795E3F72FBBDD96C88817A501BD3E639B0FA4581782A249F1A -C62D58ED43C26BAE32FD2E592631D9336CB4D957105DBFCE2D22586255E4D643 -A0C3BFD1EDDB43B97E8615FCCE2ABFF8EAA14702DD7E5D2795AC181014138B5E -314121F572A72E0EFDE33814F6219DEB0B31AF67F655FA5B1C28DBD78E322B96 -A1DFDD81E3F75EA43A7C1BC923344774F9A06E8323CD1C5A3764C98A95F78290 -C66703AEEA967DD717B6C11E2BFC4CC966D38D7CC05BB9FE5B98A59D0321BA6B -908524F664695D6C4AC6D36DC0650E792993B3C8BF3A5F9BDCF1DEE23469CF3C -9D174083F0666A94DCE183EEF39AED664EA96F369CA87C365BEFB386FA3D1C57 -855BBEF5FB778FA0D16EDF3BB714C5A0085FF924036170096886992647B0506C -19AD3E8183E108F85F22474EEF2FF1C792F900A7DED01E37DD0A0E5659BF98CD -FA278D5DBF3C8BEFC72FA3BC09B646D5C229439C3E3E835CF60BE09EB8DABBC0 -76DDBB693716754E3869C0FFBB425A3B33CC88681849B22F31CD98FC1B7EBE30 -76657F699667B51B1EF8E3B550CABBCA69BBD090C92898AD9834772DF8465C42 -4856D3AAC91A29A3B67206EA3F99A19DDC78433464D8A6315679916C4CC1F66E -F6B43EF15FA032F4BC45336D4119131936FAEF8A440BFDADF0B6F076DF1ABCDD -C3579F02E2C40EB55CF31782D8BB8B070C3BD4F48D0BBFCF331703851266D535 -61FD82D986F1D33C5CF6A9EACAB25D736AF2A1BEEE35A765BED58A75849F0068 -5210A5E110BEF1741A96C2FFC63C3F9D8FB305820203C1B406F3DDB54D869961 -E034946FBFC4D184CB3481693C579145761951F7EFADE27ABB4A0003847AD885 -FE585EA13987B334332EFD1A958CBBE3CB21A4F1C61AA81465BD4F524CD99E79 -35297F71EB9CA7C9701760857CE95295B397976516378EC7A570126DAF1CA3A1 -5095186DEF18373FD55DA596EE7688D86A367E02FCC0A36D564BF7DB6B263546 -79F4E1276EA549927A38DC8383E8FBA16BBB17CFC6B2833C90959FDC6B3F7266 -32F177624A9E26835C7C0E2FBEB1656E246C8BF4EB7803FE4AB0F9DDB77221DB -E4F134C8304EB13D8AD0FB57C4766133AF879DBB7FB52F25A555FA74F145DD3F -65990835245E26480C90E25CE74A249D9B8388A27A4BD2F63D72E383BCFF0E08 -B9EF146B512522DC267836520267ECFD46C68115FEF3ECC655A1FE092B9DBCC5 -412220BD4EF12017FAB9C51F198725E8F225DBBED24F56239C558D545D353632 -415F5688D0A85519E8AC25F27E20A4F7B903F62D9D2EAEEF33ECA60EAC68E55E -2A50DABEBCF97404687089D2B569EF016DE39DD953D7C458F77FCEED17ADD98C -C6AAA67F4F09E24BF7C24968B44D1B489726DC2E2BB3C481C676B3BBF0E623C6 -E649C80370023502121070725DF295DAA8565F5771AD8E8E2C82F96700D896C0 -CEF869F7EEBA4D2DAB7C4E455C10EB229AD97B669781182BDA58DF962823F597 -BC8CD6BDEA739C255CDA232E4B2256815DE91D09CFAC6FDBD8657BD9DCF730C9 -86315332754F25B6B3A913D786A2AED4EF78083F82FA1EA8EA16C0A6CCC6533A -0135BAC54D05B4553EFD04D1B5BEC10B60E1A621050CED2CAF978B057225CF30 -2322C543CE420CCBB0A24988653589B431FB84646945114A37A6780BF1DE812D -31E82FA08B4C0716E17F6831F4DBCF7EEB127855B88494315A98C578B5C5C03E -151EE2E561D90DD354E6697425A49E5B5ED079FA28FB845E4ACF4D447FD0A560 -5BB8D71BCDD40F657184F0005B40C2A51F9C0B3782B8B984D0F5552537C37BC3 -5864EF3457143C4F36B42E59B27AFDB623EE36C82EA73A1DC27B52E544702659 -AA4073FF40AC396F1B2D19E30A4A69A1723A5C2492BA056DC1B7D04BD4331E99 -B921369A7E502808FFF67C468440ABBD4E9379C0FF2893D2B9E96F32F9E2A304 -BBA87F43DB45BFA9B221EEBA8F65E0D97385485A49FE8C259000C6E2D66120E7 -492347BFA4021115140252CDB140EC68E2E404C35FD2BADB2A27D36BA2E11F15 -D300A92DB828646F12CC677EEBC545630FA2A8046E6AB14CAC5A6ED967644D32 -D0D915351D39913CC43E4C2E379C59762DE62C190657A6AB262F4D2CD54EEAAE -6305BDCD3D240FD8CC45CEE4291D905C01C05975FF24F77EF6DC03471E9BB834 -AE38A38225342FBAD3F20E3AEE82799CF60EF345BD46DBB56BA7217C1C887F89 -581B6A9BF199E4EF6B9DB643C2D0089E0AC0DD291D4C2A0752B7944EAE45E0C0 -A3CDCD4D5266C7C8FDA7D5D1F84E6C93348CA767108DC279D961CAEF68F8A496 -492D446DC08D83A60796EC823C1BD78872704B08D9FA16094D274398B4B3CEE5 -15504209BE801FC20D7CA94EF3571938E17168A44B36FB9674ABD86A83306CAE -D9EAB6D8325852DC6B10D798B95E56EB8FA973A2BBA555000D71F7D997142E36 -A93CBC654CF5966B93D599405BB73E5473EEF6B961452F14E0865F44FFBF0797 -C5693895A9E33620B85DFA530C480ECEC3D773DE6AD42EAAAE6ED9DDC951533B -635E40FC95A015974764B7626C71A9FAE2D672B158BB1557EB24EF575ECF5FD5 -3BDAA7AC6D8A5FBC83AA00F45F1007D1BC258AF9A672D9E103A74087C041F4CB -911F8DA6BE3CEBA90F205384E9C509E13D7B2B47286F459789FD24A838DE07FD -ADACC111B894CE32BBDB391242AB4FED699F01D3CD324F1627B6C6734795D322 -D9CF128F25DFD154B79304FCF80893C922859143320D0D9EFA15F2E03465E5C3 -070D93B1B8A13271D90437185C6772A7B3B87B196AA179FA45E7C0806AC25D21 -E5A085A0510B197C7A5207F5D56ABD5601CEB6D079BC26849DB73EBD4E3C802D -8BEAFEAD9DE346E7AB231F70318B1F0238C766D61943F81F94EE771042743947 -77E4A94D282D61965A8C2ED87E8439C080B889BF255B92FF7B61975A1AF63EA7 -DEAA26B4F0E843E7F4A3EA99AB6FCC3D9EAF6160E3BD2F4354605EB04DBE558A -A52FB6D8DCA009DCB6C601B876B742AFC3A23E15974F95967200EACF37191675 -2612AED74EEFF9AED8C10CDAE9EAC4838360EF1CA65674752F40B025A003AEB5 -A5919B705EC58109C2CAAB41D8776E02892099B9092A6D457ADBFDA01E85A140 -703575A7733CB865589CE31B02D11A0C00A947CC9D9AEA8BCB465AED57BC4ADF -061E66BC22D032CFE50538610836FC4AA481441FCC43007AC96BEF93EE9A3A34 -4EF8100E7DEF7C6A000FCDF5AE879D1A8DD4DA585C9A71303E43D48B16FB83F2 -FA5C94590FBC5EAACE4B55291AB239B5DFFD8ED7C872A8A35B0C82EFC57F42E2 -93E4A0A517FB12D9317B6CC10A2627CFCC61D350D5D0DA9E5359D97B7EA1321F -F63B3991C42F2CF06910322C780E5F47AB64AB236225724FE7552B9D20B80758 -0380188728CC0D3CDDDB0EB24112C19122DDB20F74117A55EBF797C1FB3BDF24 -F2008D619DB7C4625A4B057AB3BBFAD0DB7CA7BD269E30E23AF79F55128EB072 -F1230F61B2F2335E4552933EAA4E2FDBA83B68C4B728BE38FF1DE4D3BF0E9E60 -B3B1B5DBB32C20988804C2F8AEC791170AFC72CB1314B80CE56F3F73A4E660CF -A37AC1164AACC6E4FB408F222758ACA11306768B9563D26ABCE6712B5A8D9C52 -DD6B23BC73ABC37DD6FE71959ECC1068CEC2F7932C3097B97660938717DA89FB -7D5D36DBFE675083324354982253BD5397F872299E6E1CE7324A65ED0E36D9D2 -F4D8782C0F73F85442E0363D3E3059AC33E8BC80164D5DA72D5C5A45A02552B2 -EAD050CAE6B0568943DE1A68599EB004B2915CAF6A1CF0C847178CDAA1A1082D -A67CFAC77E43F21E5DE0B4E0C67F59113E98AA0908F7D84B4AB5E52BCBF44D2E -7742591D365B208AE0ACCA84DFF546069D8D3A8A7007B09AEAE51C00248BEDFA -48A4D06B188A51E9FB585694A79377E1F03F685C1E901D1DAB35E37A3E4BC240 -CC1203D603EBE53891ED663DEECA562214DDE8A6FD4145CD70D5C11FFFA2C160 -3E855E6F51F5702C127348920EF8128B32C7F355C491392075143FE94B8B9B9F -9D692E4937B217E4023F20CD7E215EC36AD550FE802D12014374F2B71C66491F -B36A3A167BD8DD66B5AB2209A161E45B377CFB13842198736A301B6032E48B45 -89C83613A7D8EBA90E721C747C3FF4DAE1B0FBDC1832FA1ABA7AB8ACA5AA0AD5 -3EE07D977E8423EF0EE73FD074BBF9BB333107C8CB8EE34C6453A92E8F00D97C -AA32BF9D5C29794B97F94B299F2B256225F83749D1804BE657C1AAF393A517B5 -A299757B0DC2927975118FCA733BA8D1AC62ADF30D850F2F0D15FD7CC86DFC9D -FE51B94E5404FEBA90C39EF938AED93E3D871780657B4B3B2089CA226A6C5BFE -D558B6DFD466A8AB3FB9B1EBF7DE20A58D73F7169F9C3D74162097245072EA76 -57C1E0CD95A52F20A9696CFB3A0C9B5E291AE98EAE099046459FC79DFC035FFA -2226C3484390AD5453CA6AF02EE6EF557D7091197D9D6B4A350268EB383A0E21 -432C9947F0406246D8F092D7B4E66C4F26022F23764C5FD368199A55043ED876 -DB5153DE7AB4517BBAFE8C7E2E5F9A8009953CC190CE2FE17D8A4A9F935B53FD -B0A7E99E95890FED19FD4DBF3037CD343F0DD60D976DC45FFD226BAAA771F8A8 -825BE0896EA5FB4F1630E3E094F4CE48BBB77DF3B3E02A4C87DD3DBCCEFEFDFA -49366A42922C9D6BA8B158D5CA984E39747767D90406F265EB3969458A0EF64D -3068C11E9AD68E9A7CC8D16B9A7D039C771FDFA7A53B57DADDC28A192E855F08 -53C1181C71FB478D99689750BA59720B93D59A6A59BC01E31043E0746B31F184 -4484ED2190B3164E5DC9611F4866ADFD85A70590F1E10D3342210182D774DE19 -69E8B4CF605F9DF4C801305406F5D6FCBB9980D63521C12AF90CDCD2C0A728D1 -FCB6FF4E863DA97B067C95A66DB6CD3793B140F62DD957769B62E5CABCA270F6 -0398DEBF12A0920735A29CA5CCC9E713A772E5F49715EB6940E4A9F06CE317BF -7591CE708F06D58EDC3780472793D31B359ABD417FC8FAA880B39E7957B90312 -0964AA59434BE4D1A758B0AF818B2FDECE8A66A7E8D5330576145B60FB56297B -70365939DA78E35B2B557012568991AFC0C30042E0EF061ECEC5718B473C9D00 -47C519445B354A2A80A161A49E893D787BCD72AF0717C2F77F8AD5883433EE6F -EF9792F7DCE4CDAB9C63E13CF9B5BB241C5EEEA9DE55737F194C2F614E80D0B8 -B52B1972D6FA1B08B00DE7D85FCA62277DA0BEDBBA20788C1C6F30A81392BB8A -1AF5EBBFBE30161C99A168DFAFC67F3A32DC0E31E5E08B89B0E377BD4FE7016D -8F65AA31FEA39019E03A5532DFBE38754B6170E0A1104AF8A31B47254FA38987 -90E53D9688161537F1C6CFBF189C792B2B3E7817CDB7072E1391457DAF548270 -2F91AE044394B948B167AFA7DFE2EE15CEDB3409095D19844E623CFAF4907DDE -965ADA237507174C60EE9869D7E5E8ADDCF44279B0CEB596DABFBE6D2ACE78E2 -46211F05BD34346E31D885FCF6BE36A2A643205944FF48190F448087D93CB30C -3E7FCE736771910C808CF27BC1E5C0960987EE453BF73AABBFA80108154E66F3 -159104B535BE89859557D664DCBDBE24E6A9B9AAE1EC3FE611BECFD8A0BAC2C0 -861A22799746A3F8C75DDCAB438BFC31431CC7113AB6360D19A91A275CD45503 -795765EE75349C2BB62ED8F062810D3795D653D4C3E4FC7AEE0D09A156F4D683 -BC9DAC716398B877BC4F4FE997255B26BD15132E963BFF80D6F74B102160B97C -27EF76D963C6F54668D47D8D28CD4CD8BF8A15E34776D3342BBD5B6331DCF1CF -8C960C7EF6DA0F04E136CE2DE3B338ED4E45C625BC8EE55E30FACE1700323489 -C7DFEBA8382EF6CB5E6A61833D9E92E68C8C3EA2DDAD87A3F2CE295D4A629F88 -70010FAAD335D042BC9D465C0CF51CE964853A3CB5CF28A1959E3C865A074CB0 -37508C4581F632DC9DA0241D0558EA26CA4F1FC705E5D041843E1066695BB5B5 -8255BAA392B820EFA34754C408516E11AAB38CFC02FAE7FD63DD7074A6E184E2 -CC740327F503868E5E520FCD90B8A35C82AA7CC73CB7131DB9884A3A5807A640 -AA44A3DBCEEF922811D110103202903499614AEEE640F3FC59E388063977C9AA -A9F8EFD1011B373B255A97FD7B78ACD5DA909CC4C93A1CB43FE7AC05602460CC -D1C216CB1CAF35CC28EFA959702BD3428F7D632425234F0F576620EE6B1AEF82 -20BE109D25F84EEB9B63E0B73D821DD4E61E6818399CEC44CB0EF3FE1344994D -B1DBC9DB8295A167EF8E5BDC1EDA72F083892ED899985AB0A3E18498A45E2B59 -08866DF7F498C3B2F7E23DF363253F9E98305DEB607409E5D0AEDC7871C40D58 -F23B5BA04228862950727602BD83F688C922D3A68DEB7D232FE494DC1FED59B0 -0D466C25DCCDBE438E03D313E569FBE1B6876622BA9EECC2FD175489A79BD995 -351E2C9CD01347462221D7515DBA4AD2C9C20C266973409876EEB6CF6D6EC08E -2E7A63E48B4A67E5855FECEA3C54F06F726DC0F2ACA724B448F9C4E2BA7C6938 -B6B3C6059DC998EBBFC735C9663F1A247697647E5D26FC8389E4F6FB5F69A18E -38EF7FB2B36238EDA100BB2B2C455247CC08127C60B9A28D024C4DB20C80EE0C -CEB3C166B6008D6A907F24AE05B63C9B85B430E35CE927A6D13715B65F5C67AB -E2CCDE71EEF21AC3FB69357D5916DDAB420EBFE320A253887CE8299F546BDA97 -17F45CFE9FB9B44D66993F40044DA0580276D975D803A05A027FE197C3E69D59 -B0C603D5BE4BE783BF55EB89256353DA6F7DCFAD6C82EB09720475388F813717 -7E2483F98490A0BB7646648F9412A4C4FBC5DE09314824BF6A43D101BCFD9C49 -365EE33D1B763EE47AEDDCACF09E3E6D9641FDC4F9E284FBFF5F294B5D0D7982 -A9E545973B54B2D8C9D6BDE55FD08AB8E694981977C77FCDE79028F32C83957F -26BD8CE3831EFC042B0451DC555F7E9EE0F2D40D2CED487607F48893E8696F8F -82CB5367D9FC51A77ECF7E5DE6B8BB8C626EA7FC74B0244A0BD2EC1FAD94A851 -2539C6AADEF9353DDCF498D9733631464FBFA298E9D23BBD041773D482749836 -38408C5D99794F76C6446C22FAC277F8DDA658D73EFDC46B2554CA6086FE7EBC -34509F5B1207C16727B2BA222684395FA168CB5AFC620533B2F96B75C1775BD0 -441201D19F2A70D8ED17863A5475DF5D6A5AB72770F1A3DD16B39E8144782FF5 -90E791130097DA74E731272EEC9BC60BA75957A5CEEBE835A0D77A4780346A93 -CC984FE0C9C46C069BB51434FF0A79DBCBDD5499F48CBD944693E0B9D18A143E -5441A3A57F34B00B5B8AF59D97B19425795D85109708F66F3A37E88E291BA6AC -5C37B29DACCF16C44FA4D77AA0DD573AB26DCF46D8DD8C33C881776A4FD6B343 -4719258FD5B4718BA8DBC94882C530D8F47B26EAD4E54B19848AF2D897AA7B47 -CFA178A45E213BD3CADA498F7BB93E3C74A3598C62C28C5ACAF0EC172F883BC0 -79376D48F6E7BAF85A6823D839AE7AE15458BB33C33E6FFF63B3BE3D76E02B32 -2A207D6F113E85E66112E81177C3E72A5B7F902B6D1B8B7542D7985D69DDB0E5 -97F03187C939369D10A417C300DA1FD0833F338232A00C85085354794AE9A087 -B8459A999A576151D01F30F45CE06180A55C236C5C3588AFC541DF83F444CDEA -779B7C825B740D7B21897818A5BB90E728A5F1E915D789FD3E8CF619283C1599 -ADB01CFDD7B20F4B9FDE8CA2413C6F1325D5E39A641E638A5F212F32651FC540 -CEF349609A36CD64B144BB229B28B167355EE604084E480453478F271D93EE51 -41D289565FDD80C24047C5DA6F6E63CAEEEB361039CF136F6BB6771CB997F039 -D8011DC0882CB6E07E419E90AD2E1BC3ED4EC481A2437C1E960B86E413C54264 -4B0D655C8BB8C1EF0B2A584AFEFEC63AB229B037AF7FEC78D0C0762B250909F8 -84A3937FE5ED394B22B1A4F7172070CE1BA5EBE02E93389A6451711D2A33172D -8FE716E279CBD94F81AEDBCBE43829536DCB6D816B5348FFAA49A335FFC47016 -40D65A9C2CF70ED6F14D294D7F00F94DD5E918704CE7BCA42214E9607686FF1A -61397C31A3E9D28589472CBED26C2B8E3AB2CC5DDFFC5936D1CF3DA9649A489D -32B719EE6DA53A1FC5A2BCE8CE665D5AE01EE561782FE7B3200A132493AB290E -E77BE8561EEC178552D26E0BAD490BAE7B2B2D1CC2AE29BCC85C3034F43B3BBA -513BC8375DF221D42B25F5558D19E12D70402A1BDA81C56BBFEE60F99D9F152C -6437B8D268FCD49673024BCFD4755E1A0A3436D12D2F6E71CA0BF0C3CCD00D38 -34EC290C7CFFAF3485C8FE848A543DAC0172E025CEBCE2287E958BC91207DDDB -3734DBCF73E7EB9E6ADBDFC35FE75F759EAD1D341C576F047106AA89CE30039B -A9C4155E3EB571E700F8C0F04E24D4841EEB8D99A1BA05E3291925820C28DDCE -34CCCF4CFC655D49295F159733DE276D962A8C5CB859886FB0CF642903F78E07 -FB0995EA336A63EC9CDB5D2EEF6B32C81B13D1848849F07B653887067115F113 -57855931115AE76D7147110B2F3C2ED20D7466B19CF8DED751C15F12C730CC54 -C86124A03673725D1331E75DD9E4A84858EBF5F2DF6AD2B0FD5842DC6372F5DE -F334D21F312501E790CBCFBA0EC9823BDB1BBB32BE5CEF2AC5906A368D6C39E9 -D913191C0DE05C20C24B10048368362E7702CF6E993E6904A85693B520CCE666 -7F7DDF2FDC2195CAC5CA89D230EF1C383403DF6E22B64EDAAF6A1ADE3086DC01 -1849B6865F7ABA165F2895DC703FC7536F3CB306CA6C3375F36CB5C7BAB8C78E -DE37462B465EFAE538C52267E0FD152467BA4EF681512BE295D3FB2D5ED98B37 -9544A30798D1571B8E794A4D3B6D0D0F2F630E2948B45B187EAC18272506E2B0 -8029D9ED7C5C82CFB5713B0FD929DB6B718B8C3A1211C9A9D587DBD58E54E0B0 -E05B89A429FBDD4BF4CF309E9C189A21BD42065D007DEFFF38387A02B90EEEED -CC4C5CF3B8788549D626CC25AA246CC022C8C1CA9703EF945139B8E10936251C -80C21FE36821D75D0BAA1443C3E119BC08FD153CCC20A52074C095D2680AB050 -D203DC0CDE27771081ED74A2C5E0718B93364680F6512BBA43F1357A70839CE9 -C7D010B2B90DA733C74E634BD0FA1D281D40779E4FC55139CD11170ED58E71E4 -A4616EBF68B805122D4AC069B9C30F7F9B8A204D740C17DE428781CABDABAEBB -02F0B018E812F00EB92D5D80D91A5E9755176BFD7625B80223C2E69EA237D8C4 -08E1A8B51CD142F48A760EA85D01BDB66284D61120A61EA87086227DD004CDAE -FEAFD1206700187B602FBB2E3CED6F333E6DB5425EC0E604A7478C017CF376B7 -D7B7548FC9AD882014F7598408E31000BD53B0A7D17A8ED5EB220D9D7C9B0022 -24DB358061C415A4A3DA467579F663357CB97509ACB840EF5C7609B7B8A5E1A1 -14E23BB75597312A45241847AAB21DEB166BB0452821C26063A14EF05B628230 -D63292B46CB3F53B7FEF2070D4C4D613479CCF39888224995D02369F5E3F1DB7 -27390BF482072E7DE300F0425DD301869878946C67DE03E713B69DDC2BED58EB -1E8FA154A787BBD1FA64D76CD35FC1502CF01CD9476B5C1B7A623F221317965C -AD3838AB18F185A9B20DB62391599043F31D1B0AA90C38C23174C7B018EB576C -B1C7D583F723420FEF9AC11898802AA768B4AB70748AFBFACDED99C1789700BC -A662B71CAA1855B83A55CFD1174DCF8DB001BADA69E45340FFDF0202D311006D -996FA17BF67209A51CF06B84BEFC6BEB2C60B8669704BC51BA6AFD0130F37076 -6787C7E5119A7F1B4D1CCAB950A4621C794A128D3971759E71922D9FB2112998 -4C50EEE88291107A0C519F68E411E47AE4EDBC9A269DB4830FA3B2914B53AE1F -A58B33B223C20BB614BF2E63405764A993CC250A728E4D420BB85F5829A862C9 -DD58D417A74FE8A828F62DA4D1D31955E57520CE2F7DB2E4F06B6179E55EBF7A -289335B17E77CAAAC62C6A8FF7CA4CAAC6BFA1326B5FA32FEFB991B0DD0B38D7 -71EE06380478EC47549B91881C3D6E1B0C66258423B3C69C0FAC17A802832D06 -0B9AB3088DEC73B497204E5CC44E434647E320C5D83F8EA2A7E25B5868957E9B -0E5347626A484C986FA5105920F079A5F520F5DE92AE530DA801E329C8592FE5 -5210709E8CF735F74F9CFFD32746E3BFD54A40E4C08AA4EADAA303C66E4417F0 -8D5B75ACEA41CB1A41A6788BB557420A9609400F6062AF8C3BCE7F603B73BACA -35BBB418E0802B22725723E12B92A231E0C35B37A05CA9380CBE911C8895F380 -780EA4E04A8714D90EA911376541A2CAE1A013362634AA04504D98DBCEEEBD8C -6DF498805612B3931FF721E63C8EAC4C74C0AC8128468348A2DB56702FFCFB23 -A6F78B6F7DD08E48D44E4DA7880836CB949BA8E915393E6B62F58F9D34568A49 -2FDF255FB29FFD0DA9878C19F2961BCBBA487A9A578C36476E6A49CB72BF980D -D64D3EFD82077CC0663290BE95C13BAA1C5C07F50B74FD00A1B50788BE98EEC7 -F0CECD0D9612B59E385BC644B0728EB209FB5A0BF334A8F1772A88AA0E4138A2 -518FBCFBA956ACC6F566FA6BCC66AA2CF374F0D457DC7D7A715CF066B08FF1BB -561BC5F6CC3C48E857595F9986829E38C6FC8AA8573EFE7FD6A95CBCDD859778 -AC517A3CAC168CBD3B9BBCE9D00111B3241418BE0B2E690CF4A737C816441862 -E25529374DE12E7361ED23E542BCFEE4D30EB8B746C2D133DFA2A68A8D2FBCC4 -6934E2ADAE482AE22DFD714F77E228F95E934E4C286E428AF5766B5AA22189CF -DFECD70F4D98ECBDA9FE483FC30EB5FC4800D0A5205F23F863C21CE0E4BF6C84 -1EF9E77C68C99AFD3EFB879EB1EBEA8ED7E8C4C7CF7DEC6C2182901EF483B76B -F83AFA9C1827AF5C3F6A29C36723E3A657C0E5DB55C198934FF5A59119DB5536 -F69CDB34DADFB6F596ABD7C5885103CC95068D113C3C17E9CA8C34C0B74E7463 -1D5C83DDB5B45D8EA510C279FAF577840958A13CF2B13741D74BEE4941A1C207 -BDC5EBFADB4CC01FA3F12D22E431BA17527C4BFC940A6A08BDE150C6E47D752A -5FD943C4B7CAE482FFB7AA27371A6C45E2CE4C31EBDC8337A1B853A74B2A17D6 -BC607BA9D38B71D86F586A33D440B616443F58A103521AE1D6A1755E74BE6BA3 -05E45006058BA47601191958463583E8D2F0985D6356D9868E84C538654AE972 -D59C6F48D9D3B929BA4704DE684A35438FDA0CF60B3D2E1610642D87F690A3E0 -7CCE4A5AF8180114A8EE9D360C8F0C6A033F2331C546D34FD1B1E95B9E7C914E -0074C40A105428550886A264C74306F7CC221D78352DD53E39BA99C1AC851E9D -14A3B0B9CCE04806615D7D90F377FA3BA50182DAB42EC6E32475AD56B8B1CBD1 -D265458CEFA79C68853CB11DCE026C339CD3ADBB44259AC7318B39EDDE33FE33 -E542E4BC5C64B36B159D68F59A9B2BC55C0343EDA853A4D9E6E3E53176F46EA7 -3EC1D108D76588C7A80BDB8DE432DE32CA3AC3C74ADFEC515372B0594EF82832 -CD7075AF87CCDFAD82D2A570ACF179B6B6A318AC8EAEEB99B34DCB1A14A52ED2 -E35A0EA8C1A5449D63695FA7E52847B7446C4489751099B0D2103FA57ABBBC30 -A77E6C9682D560D4BD9AF78B0798FD89623126945A09BCDBD5789F6551B679F1 -52EEF0A6603ACEA8F7B9E5B58C25D760BC078943C5502E3230A31539DCA5A7B3 -14562F1283E8FF98361D23CAA48BC78267F46B0255C526AA8E5800D0B570D3FF -C6C79CC39C2CCF320006298AE4085BB7E3C57ED37DB620A2D8B34F1E970E7020 -4C5D676BDF124E2524EB93948ECEB3B53BB3DDDE062293EF03670EAD36FCD0B9 -001D87FC35F0EB90B6CE065AD2040770E4CBB96F020F665E563DF248C12C95FF -C07EB290B8ED0AA843FCD2D04BAFAA0863143FAAEB275FA8321DF73D589DE07C -797027BFA79A5B29C03B560F41C999739CD272B01FAE34C0735820A9A78D75A8 -F89FF3D929D1CBD7B76707BB236ABFAB615FD25F4033EF8A2A9382C58A8C3617 -78CDF0F6B662C3785833F58F71115ABF92195968F87D49762536661699EA32F4 -E8B82036F147A0C8726FA2181EA36EE6D627F2422115A66EFA13A5AEB1DC6743 -0961EBBFE03965204975852DD634AC09B0C3C167F53C34EF7ADA1D0C1A09FE1B -EA96BBE639FDFFE69A5DFB097BE71FBFE695DECA330DC168AA85065345124FEF -E37DE2DB9E927F58DA629D912B31688B51B4BA61D9B8AAD2C552CCFB36274DC6 -9E6CBD67698CD4D16E75D1119A90A32373982E631E5B8DA9D648A5CFE65CA188 -F27778BFF26E6A55DF01A286E8F6376AB5A472FB3B2E779E79D55A41AEE83A00 -5D00E9CAD77F5E6018FB4C59A2F114A65FCC20EAF2C8E026BB97D1B94F9E7686 -B42A7D9A1A1DBD41DB89C4DC7FEBA4BA24613D0FC3931A05E39C4C6BF4D8E92A -11FD40EE366783E9BB2EE55F57B5E2C4B9C62D3217C83E28DA32D9C122149036 -CBA8F707B7D3333517F283612691DB9A335A035A77B5C4EB4B4FD5511346341E -99C55CEAE7FFEA94BB8F326BE2DE4C8D280FDD633CCB813B56F4E85FFFADC926 -EBE5C08265413E93C86D6F3CE187B09B0747EFAA8E25A153167A140E2D49614E -AF270C8B6FCC854DBF52B62DC238E83659B138CFAC77F86DF19FB7D5C3FD4DED -C688799A95A559368A4CECB79B7CC1FF10CCFE9111A74487CBC153A2248A9E66 -C6EE896EC885B43B73C18215CDD7CD8355BF63F81E4C8796502D4CEA494AD600 -49C684E376F5844FB4D02707A1F96A5E942EFBEE3359C77ED930EE904361B0CD -01C86D8DC2C913E7644821E9A30714D18BC6357A5FE23CD8C9866C8E8F5729BA -A16537D2D88077C7143116322F0ABC5C980DAF9FA8F13BCCA75B02E5CACFC475 -801A43107FE42A0CC87AE1A78B0F839197C02F2680F9094779C3A197574B5C76 -8D48F3BD89EAA1A1D98D6B63BCC31CEC0996BAA5F7E0057C2447E72CA708F14B -C458F47D91F356E24D91049EDE3BBDB7D1BBE32C4ED5AC7771CD321C3296D92F -68B6CA333B0060E2A6F5FA71D4A0CFF0453A788C1BA661DAEB4CF87557BBFADC -7BA7D7D2939FD8D63F29D5FACE40BDF71AD0353293E80988D111FEBF46719056 -954162563E759F0314EE7A0BD5367CA6D2DB23B8E33EF0A094B77C89E1DCB645 -8E1B168561D7925778E38208CD5970A2E43CE2A5EBF52E87273D21E7D35A3869 -CE1F1A0E07AFAF4C2CC21B80A443BD9851D8D527C1343E975EEC4512950413B8 -EA9F99D32A13F42A432EE52489EB370AA99FEDD2330B75C47DC86A9106D67FE7 -80192E2109FEC77E00F60F1127501F4BFFFF05167EF94EA7B9CD14049AB7AE80 -2AF55490FD8DA3C80DBF9ED6FEBD0FC03CC5D82194F950F902966279C4E84D83 -A7CF067E1D1F07EA1A31C93B8FEF995E65BD7DC1B3B81181F8B5954C7BC4B62E -19DC9B35C23652C15ADF50C84B968A12CF882D426486C46D3FFD964F5D6CADD5 -BF4500AB9B4CEC2A1AAED512CCB64071CF9FCE7E5357915497ECC259DA2949CD -9CBE29B3F9ADE03E939B636146E8A4E8AA19DCC0F8C7A0DC9BA422BBE4988A37 -6513EB6774F0043EECA9F241E6A827095FE05AA6BAB09E66D08AADD69EA5BB8B -F813CB9DB27C48F68508550BD494EC3F16589333B7E4A1803A5BE00C40F1BBF3 -835682C6242C479843DE30D6EB9088A48F115BBA988EAD5DFA2FBC018400D176 -840CFE498BFE4F06367B74B339B2317362897D6B4134DE01BBF9E9D9F980911C -441EA5D6F6548F4E87835A7B566C8471A03C53136CC7D6A58E77A702EECF4327 -89D008FF5E51A274BDB5A00D3048039287C11B51E458A4DB2A9481679A2C7FD9 -A30D9E8FFA4A7220F36A187D02BC85D76EDB1FF407F33E5E1832AFF2ADB9EC73 -32281F6DDC48EEBA894FCD14741BFB4CE477EA93640F8F7C7E8BD21E257477CA -F7688681DF0D3954A6C6794AD9AED1DA0C570E04CDFC4D3933D7DF89AB3CCDBE -E268AABAE4FE28CC63B84894DEBF941D3F886B0464C111B698856873F05910CA -A413A719611582A91DE699BC47E9C13B7A0F0B3E6FB816D5A03AEEB88A82ABE0 -106DD301196A40FB17E79BA85A6D5D4867E7D057B246BB24DB079BF42D1663F1 -B20A7E4017EA26B390DC39A57CF356C81851FA5775DB347A0DF1F174202CEA7C -E13CA1F2713381D9D9FB3A64AACD69C0B48C18EAFD68C6B6B3C088189E805ADC -D1F58F03E0B1BCFF4229CDE123B1EA5E026AF1B958B9C08ABE3B5D3E2F821ECC -3B92CF0F3AE909D1EE1E5158D1D70E0891D888E385FCDD4AF71CA1EEA06C7BFA -71D584E9A0000D508DBF6C18D30303666B2DFF6EBE81B9EA48D8D794763471FE -5FF36DB90E8C6D2FF2B7897FF64070F8D1982DF106E402426AD09A64B7AC5BCA -1C6DCDE633BC4DE9E8AEABC46E7559E349A0E905322F4B7E395EADFA8F8D959D -F0E28E01DBA51F7BD55163D95412B7E499C9B480B6638F1CFA2278CFB3B99555 -0CFC8821F3E79EE3362947A6406B58C5077A75E2ADC6B61DBDBE9AF3205257DF -8A7D6069D7B2C9721E50488BC754E94D1D8A4FD3747239724BB3C8F5CA2F88D4 -F69CA5F395B8A36141E40954392B5D2E3F3E49936F48E8B51CD931E53AADD3CA -32B241648A3CEAA5E2D53B8B0A8DEE138E3F4BF88D1BAD2988AE342E825889B0 -38B5F9606A6DC3BD767EBDF6DA984E28F9A203F015DC1B17E26CC038DBA71CC4 -6A3D5ECF75802A02182AA4DC7FD34438E59960BA78B9E11755B4314886681B17 -AE05C263496170AB1B642C34226043809F8F8CB80D30A3C3C97F07E9EF849CF5 -FCF99D9797AE8DFE2644F1D597A37BF88FD02891506EB46E3DCF1C4DC905B39A -568ED960C0CCEE30C5A075244E2DDFA8B568133780DCB656A537936924B7BE2D -30D00FCB4A82F0C6CA1E7391B4ECEAC37EF8A32DD4FF229E31D8982D1B876C47 -924D26DED97B91661E126FDB72057412C5DA49D95A2FA3676CAD58E01ED9DE79 -162BB27E9F2005680D82967F953A96A11501ED68DC6157894C3461E1AEBC38C4 -DDF4962D9E09C66323FB6323DC88AC476ED6FD17025A5FEAB7B6C6A1BD4EB30F -97C6527D6D836BA80E4F2A1C046368AE6BFBE132742EE6538DC48C918A1EA445 -A5651759AC5E5ECA97F21EE2DD6EE9B77B406DBAF1EA9BAA64AA075C57DF68B4 -119C681608ABD57E5A6E99251B000CD846F2C72519170A7750E01C1BF79C84E8 -0C24B2F74C73E3939BD161C67D2DDFB5451488B8EF6EB0EBB8C8012D237C9ADE -B04820C893FA30A071C8431E028D33D656ACC12A83675C598C4E5F1F4162F113 -75D9D193D32EB3B3266DCA5B2FC27AE87403191FC06DE4BE6B40950D60CC2483 -E9EDCE3525E6AF91CEDA7A7BFED86C6D2F5ADB3DD0CE502EE2440D6529604ED9 -0CAAF7A0B94495B5E3472B9B4E4E72EAB9C899661AA695F0E1DD191597C35CEC -11286CFD8CCCEDE2D696E60DFEE518FE2332532354EC36D4027B9E54B5C1AC41 -5D9087477E50D0074E93CFC74A8B2B4040C46D926982699A02547C6E5A95515E -C906EADFE24EDC658549171DE19D95CFAC7A3E49590A741E0A872F96766F7171 -619DE1436EFB3E29091DF36087E573ED4C72A81B41ADC7FB681D08CA20ABC35A -51BE69C85474E53D53F684AB7FBA6870930D72B2AC917858348C081334478640 -BFD6781387E5F9884F5B9A2F3F1377AF5FA2CA52EA68406AFAB6C91A888F47A1 -E002AA927D2CC11E2DDBA648960495CF1DBC184F6B4D5A44F1CBD67D8EB6FAC9 -76E386AC7DDC99C1D872500FB355A3A0AC805C1E00947F8B82B918A84B1AD2E0 -3E881C0E82BB047E0275CDB9E09E1580DB2EBF20FECDD095910DF6EE017D79CE -6E4590FE4F14BFE554C625122FCDF115A6C8D9F6FE0E9AE6A29BA1F7B2311716 -E37CCFCD0E972F8CF909939007CD86D2AA045ED816AC1F330DC706C3ADD1D239 -D3FAC4AB5CD5344994EA1978131472A279EB0A8F9B9380333CA610DB402B679A -0773807938FF12E8244ED2F0D75D6C5BF2C9AADEAD23F8D5BE373662C8485AF0 -66A33CF74C47C41995581B77AC05E0165E15173A956E59C6DF4873092C27986D -ECA1916C2E34439E1952CA26E948E90840495B9698C2FD3A729B83DC30A0EBD2 -DF4270B5209BF65B841617AD963AAF85FA87CBED7158A4268F2F9C8A15E9F4F0 -C665FD784CDFD2FB1DC812AAFC7239315E7165A6B09E85D55C23E7A0482A6EE6 -E3F7EF9C479F66538A7F8FC39336E6CB09A3198E701F8D9C1CD3FDA395962097 -DC645A28F27CACABC767CA49D2DC82D41FE90279348184E415ECE21B1A3756B9 -F7E10BE0C2002D2DD040983D479C5E1F8A95DD7EF37E795B7C0DBACEFA209C14 -A295E95EADEE1CDC8A35E72C77ABA8DC344D00E2186091CD6420651F6D67900E -67C6D42D0AECF3906191DE5996D7A9E7B78FBC03D5D7E9974DF81F1B203B6D1B -BA18F089F2A40B72E69C7317D753DE2495E9EEC907D099F22EBB8AEEA6D65B3A -D7EC581B0A8004F4BCA4067A66578D68CB9C0408C0010DCBD5A40D51494A19D1 -E586028EE13A0AE09BF2B52E4CDB383BACCB87914AE039A38A24282DBFAA40AD -76D344F1F86950333AC92AAC28EB2B07DD65C15877AC6268091863E89DCCBF46 -F7796E2668AE126B9A74244BCD97445947031D6AB1C300F271EEFBFCBAD1BF92 -779DAA45BAC4E773C9222E73F14F1EC37AD10E663F836BC3E9C6DD70330233AB -D8771658AAC8C8805D661334ED1DDF293DAF461212E88D95E53D5C23F3086DB6 -BC1BF93B1F0A90C0AD5C3321225F173D0E407D006BE11A963DA4FD5A1F189E1D -04E40C2BF9162ADF3F8B672CE9991EB8C422B504F03C1B253290A000AB95DEFA -6EF50D0F27CCDC324A7D8BAFEB8C5491377809252CFE69536FA3641090BAB758 -8DDF49F33CD14A87245F29349A09DFF54B8F9A743A5C20DA6A8178CB4FCB06CC -EFCBF812158F6169015C38D0003E9D06223D3BC56E4585CD6A74273F5204CC13 -14CA969003A6D705CC923E268760A0A97E36A2A21EBCCA8ADB66C3798C08DC92 -7797F5CD56CB80CC88D00E789A677106F9D612725E5E982DD14E5EE696DC8C11 -12FD5AC302CBD81E03089865560659CFD4B4B770BD3CAD2D8B7A8861E7A625A0 -078977713FF4E8502B21B15AD68CAD7284AE50D0FB611980B82F99CD8882AD82 -6736661B89294B0DB38F4C65603F9EC45A0897400657BB67CDA50A67C94EE235 -33AF76525858D303CDA26C14E355132C92E132EB84B0D6297FA50620E36895DC -B02B2C8562486AAF6D073E80CA875068774037CA16C01C332E799AF99DEB62F1 -2606727A6E4AE8715B98841FA84228DFFA642AE1789F45C86C8245807835C584 -BFE5F7EA749402E94A40AC9C72FFD3AF52510728ED95030C85816A117A6E4A7F -B223430CC9A9AA7CE31278DD472D71E47A2D0265EB47773D14961888020A0259 -64E9E24B35AC6F44EA51D1F55CF7C7F3D7E4BD97877EF6562B49A842F6ED087F -1B51BA1F1EBDF4C6443F4E778ADB0E990E5658A97FC203C6D210C16294C74B54 -104C616A58D1B0551CF94C6A9A0D2AED37A417E7C105D4EB2F45B4F547B814C7 -730342AC615286E4ACEADA9948C237F2F3F268D5DB47AC4663D485C60586245F -E25C0424C4E6F56FF33EFFC35BA38B0EF5A4B2131CA9B516F6586D63D73A13FB -867FF248CF66FBB2074098C05B3B1CBB401496A0D6B0F2487D1FEC7799AF3402 -00402CC895168C4194DCA7DDD0AA150CD2743DDBAA19A0EE9CBBFE6D6FB15C9C -C6EC08DB9DEC8B5D3F1883CE2143843EBFAAD522447809E38C1FFC492B8A7400 -6C8DE288479664226DBBACFA3D29E6A63221BCC6939604DA895617A7FC99E15D -72F4FEBB96EFD77D31B13D7B0494AEB0D286058FBBF013DC8399056C7F222332 -CC93202FF57BA3E51E10A873F20FCC95A776CC7EEFFB46A920E00A5B34FF82D6 -2D85C3A882E187199812BD1AF4C08FA09622A66C1BFF2AC1B7A8E36CC2C0C720 -4BF8DC761F23D8630C51AD13E55035A7AFC0BA10D87123FEE5E51EBABDD9CFEF -4ECFB3530DFF83347533286C93C4C728054785E7A60516EF699351CA4392626F -4697A64B3CE9995C57FE35878AD42BAFF0A4E511E18C94F740689D0C37850727 -4C48333BE8C6DF3E45204A752D791DBB8C972DC6F2293C46F8D4B06DC7B6116F -3AD7A9F944B99A92A603C57BDDA29E77F9419E4E9885280AC3270352A38A84BC -B10821D43020B2FFCA14452F8DB602EEC9201BCA8E538469605F5CEA321C8D43 -59660CC2623E613071B31A51FB9A48DF6238BD2A0625D74F3ADB1B67D51754AC -E5DCAD203DE36E54F93728D88DD3A9684078D04CF9417A79894597921E636C32 -4B18C4C3A15712B9E765D8E53612FD66CC91C6B6EA4D2B93214F57C7BE19428D -CE545E76188AF078C1CEF02D078645039382229BAE21580C5A309B61E2A7CAFE -8A9A5E378FFEC21F36D2DC50674A7DF0F542C1D81198EA7861DB611F93E50E41 -B1844C0E761CDCC7D9A3AA3F11DD2B6524CDEEC67936C578A47918AC9A12221F -6941DCB91587A1BA4D407E4CC7DBF883A4225EC0407B03303841994D254F04BA -A725F0D9061B52D72669FA70D694E843A80BE0D8543DA6DE39C3EEC5FBB145A7 -8A41EE0C62F2F67999F4BFD255D279501AD97B94037E9FABD4997DC02C2ADACF -82BD90C64883F4BEA139B8DA0931CA0C618454A19B639747CFF20B6741FAA7AD -619B8DA6EE7569E6FBD4BC8C48E5E604A1F06C84C492150EB01BACA796F111B1 -4A10F4B95B2148AA66104BF95D064960984BC2A1FA25C6BF7A8B6C9A5A062122 -B0D1D705F4BED1AB70D5609CF5930D48E0292C1F8E07C50411F8B2980E36BC43 -10AC3CE58127BDAA32B0F771119C98F8FEE653B93BA2080CDD5CC2F5A2D96316 -2E40D79486B2C9DC53A6A92F523263C0D789EAF5A2EDBA95F5BCBE2AC4E53B97 -9870800E256D67DF46524B6D09714C3802318C52B7C24C2A37832E2238487362 -BA7DE4301CF1459801F03C5D4D3E83D502BBC21A4B0BE461FF5DD5E3570C8DB6 -6373ECF760002A8D36EA3AFA7B513AA886F44070E6BEA83A65F1103BB33505C4 -A17B2EC8639359548F49F5005107BD2CE0A5FFCEC5C2ED08C9905C5D31C36247 -961A0A1638F3E8553D5BD8CB1E8273A552B2BFA3E0B20024D0D3E2C710BAE20F -58E952611A8937E30E1A3E57DE281897A638B4620E485A3D792D650F07806B12 -EB8803D2C0AC01B3DD975B461BDE462A5063BA108DE6DAE031439764C95C9A28 -84BBDD4AD3A67671883623EC2580ACAA99051C344D3CD418C583044813554C5E -0B27B7F42EECD3D54BB7B57A788CE239F0B076029EAEC2257A5C8EF9B1506B71 -289FEA35762F47EC6D30254499D4C2AE0BC6723E560B0F6C8C137719F68DF348 -73DE963A4F912227AF342F82ED46FA1FE7EDA82B59CEF25EDAF5764C66A899E7 -08B0715CB21C10B318EF66E5454FF1A7B324EF19E226EB1587F8AC0326F55D03 -9290EC6B01A9EE33A1ECE1C3E2FCF4E3B7563D3A77FB4D40BBB8FFED1C858042 -8D4A83EE2DEA47CA2E9A9A59570B0C8448AE0F8C05A4C205BB4C20E37ABB860C -82DE3869F24BB6882E08F045DB9147D6E83D82D0EE5EE7596FC89B23553039F4 -449C6E2629BE1E78BE116A98E435CEE7CEB3D70D98AB93F766468E307E11FD41 -C26FB0E90F6D00455E229C987A128FB36D50BEE7953192FF409E5D72980BD49D -32AB7A064CCA9431BB605E68F5EB862218762F7C3094CCD0206C0383108222AB -EA8129A384294BB9179F412E182ECE777D34269CBF7607555AABAF56159B724B -67EBF49667E47B7988E5C81422540766D26462046894A61EB9F764746062F06A -34C3EE2767798433263E6D3653FCD6E4C43E6A5F0BC762E77D4174F95E7173CE -A03CFF3A204C72773A7F6C301AD3C418A93042A5C479200D13EFC4229BD31602 -9D4ED8CCE127A1A900B5CC3F9B292301DA6CD4AD0D5E1465BCD50C11FF9F4727 -E4BC06013CA5F0FB6B4E26C5636217774935F63584F69D7797E6A871FB51B3A4 -7E3108E160D01C4DA87DF33FF40B452E8A23144649A72A04366B1B3B026C749B -A897D52C40808BA52ED82FAD0A6DAEBF41F24D5B9C705C7F3AFBF38C923DD3CD -1DA764DB623D1E0AFFBAB095E9C6FD5788E91CF697FBF57B1525A0164E536F82 -20F532DDE94CC1C2DEA0AC7A41D75C50E875D605DFAE0FFB07009EB4B627662F -C1A17A5F8AE3DBC794023639D4E4328C55067A8AC921EF54D272E6F6C60EDB41 -AE35943D366D41F12C2BADD1A2BF17429EB871204A309DD6A3375992111D9AC7 -902E0E7A62B85A1BC6FD35E11CC132F37EFA0B96A733FF668EBB8778FBC2B799 -33AEC8E08E1576545B5BF0E1BA5D5766F22E29E51D404C25F3E54B77D6882DA4 -B491536CEF9DFDFE15362DE2FE5221D30D2D6F15158E57CE561C88F277FC975B -616887F1ACBCA8789AE0B854DFD86FB544192E0382BA380B79076A825EEC0315 -35C892FC89E778A71EAD7B9E578F849E10047154FDA362DC45E5FD1865ED2D5B -F701D7AC0A35626A34BE036EC912E4C4C2AF61B55E75B1AE8D8FD27767696AE3 -AFB440007C6F73DAA0AA62C89081D7EF6B02751CDEAB00488A591E8F2E79EF94 -53BD8FEE595A98A986BBD053A3CB86DB5B039B0F732438643EAA64E5DAF3B6F1 -9E6B4EB430B9E7D648E729EE569871AD7DCEEDEE1851238DE9E23BD10E75B7D1 -B7E02CE3F22D27D7E262BA786D74EC0123DD208030553C0C5E1D538604F7F438 -858D3234D566EE22C36C2D09009322AD41D99A5D0F4404A8939E217CA32C5092 -0E72E2FF0991FF7B882C70F56C7B40003C599A8AE5D95B74F523248B1E8A0566 -872871D3003EA4885DA511FF01181DEE541F6795BB2D1F9EF7C3DC229F153A9A -86BAF08D4BEBCC0D2B32833DDB4639226DAE13E120A99C5795083E80643C153B -12744DB8D138E17B3540E971192EEFF244BDD5E799862023C858B885467E9E0C -8D2405D1DCB579AC44CCDEC5AE5254A017C6ABC65E4B072DE80E9683A9A9815A -23A0B829E805F069A98FAD27F3383F45A111AE854D512777FEA721804B019A6E -E16F12CFDF017093A2CF52A4A92683E3B225EB0C99EE5AE97BDFDCCB18C5A674 -F48DB9AB89038911E912DC1190AE495C6BEC4907D0EBCFC1CA4E153480285B87 -E5C03D8742A43382AD893B58CF1CEAB04AE2424164AEA7B3479205A0B2778AF1 -44663E61F1E8B22F2670D11ECB8C8A901557F382A909B274B20725B1562CAB3B -C57C8F857E9B99E033A41979E4EF543FBE70074F85072866D837954AEA7D9317 -3744DA0394C9412457E1C2188728371638DA19CFFA2A642CB0D2DB3A0D56F1DB -CEE646B9407645BAC2A3CC8F14581E7175B1EC76B0BC82EBB69F9A325A6FD630 -BF9FA4967F7A42322E2A568B9B6D9878FD68F2254908EDC36060F474346BF78F -7AF59EDEAF883489CBCEB0671CE77FA180FF7998FDCA6C4635785D8505A45824 -7EEE6F60384BA5AC06D4A19C0B127E15454A1ECC70245CCB99E271E83E42EDA7 -CAB83D34ADE335F91DABF3F0CE8A5DC8D4C0EF7F250391E51CBFD1C52B92C43F -CCA1A3B71AB20E995E5304A031060FB78B663E939470E0F0A9602A56E0352280 -AFE8F87758508DE73CBEE78EC452185854B11B280AA5EF1D2D3BA7553CF54FC8 -1B73EAD7E3FA7FCA7E8558FF72DDF68B6F7E50CBDB1B51D3D50866F1AE4AF193 -BCB3D30C14172FB5F9E8A572F83311F1C8DA3C8FC589D01F32B7F96A794812B3 -E581012FC496FCA018C5E9C35C0C2CB6CC2E03F7BCF993B8B58AE58F3EFF9F18 -C49B86B75F8B33144A1D4DB7CD1C5F7B1A2C362D1C7E2686ED7DEBE396116230 -FEA4B66E13A90CE9C61656BEB535691E3F3536EEF300AF2B7431770DBA738220 -CEA26E86305F960C867A56F6C071F41CD6F5A0B768FEF7B5B29E75FCA8F336F5 -FF0135B4A715CE926A7B78D6441053AA2515C96551A08CB94B77920C8DAB9C72 -08C6A760677CFAF137665CCD19366603811CB5CD52D512FBD763BD62931BD5F7 -DB0BE87955C0AF863D4A7B7150F33222E24FAD730E0D29FF7A88F5BBE2272A3B -69BA5BEB0AD926E9FEE21E8BE08DB110657546284DC9E724BD0C79EC3361C07F -7EE42824DC1CB72ABF5FB3E3DE9CD4EBC1482DC3FB57D84EAFEB307378EF4B16 -7EB0832E5AD1D1AE04CD5590CD3E0042F528EC79E292A67E38EE3EBDA2335B1A -1FE95723571C040F7AF835DC7493AA5B49904EF6F1947D26FEE59628A5331DBB -4EC4A21D07231E85941A435A74F7DF7DE42035FC3146FD7921D02F20767A9797 -881B24164556762476E17D0EF873F17CC4BDE322E3A5241FFECE04EE7170E0B1 -835607C7716AA603FCAD9EA5FD2AB1F718733B58F31233E37A3C22DF2C3F52D3 -4947E041AC29A07EBA98F0261E5C9B5E280B7038568E470DB4D6DDE3ADA5B12A -69F715BD02F4898F9222A0DD58647A31EB890F2592A4AD7DBBFB7485BDE7066C -1EBC43C9873052644138AE98A18D4902960F2B709D194003346B0B6F810A8AD4 -21D63E3142B7589916B3B4B56C62C1C0FCE1713379EFB8E760EE7295AFE5E4AC -2C38425CD1E4056715ED2F9B4E31E0F05AD10E6A52F4CBE25F37377A4E9E08E1 -16131D26CF7432D5F289930BAAED1E3A444E011653ECA7B9076094B5B72571A2 -D29E7BE5B062B0A69F7AF0D20CDB6F156B63DA9CA564F483395A88206EFD6569 -48C59535FB7AA8942518F0E85A8BF56E0E8E30A35F47C948DF5AC6EDF01AF41F -A14D10ABD45895C907DE950927DBE09F79D53EFFC6F5681D715649BC42E8BDB9 -86894BE664314DEDC69FEDF7EDF2347DFCB070CF591CC8F8F14C04D7E665C0D0 -A413590A72D242D6B619A83DBC75754DA87F980106A17B06F299898BBE8C51DF -70A6DBED6264DED8D4977BA25AB7DBA3BCE39AF7ADF8744170E7D4AED20EB63A -EE248A5D3009C47700D73056995596A2DE0C316785F2CD4C12B442A6DECDE45B -9C0F023599FE9F3FC5658CB23EABE96D597812EEAFFE50F9C82CAD33625AE0D5 -FC43ED0B732954F0058942C1BA515120E7D77A61028770A3CA029DB5FA12B06B -DBD4ED00AB9D53A705215898CFB295D53B38E5AAE8589BC0CB1A942D86DE0FB3 -DFA195D7075BC0F01B4EE3A069B115D237DF36E372B650903CBB4EBAD1D6379B -0429886D3ED160743BC13EB1C5F3AEAB78D1C01A27FDEA6F1D977B5F53117326 -2DA2DB70686F72280200176D138796F7730C9B883D56B8CA95A59AF0D7E943E0 -230D25BA4B738DD45E7923E09DA7D53B9E20CECB40247922492A5875D4EE9F33 -01251DC67C2D69895271F9747D0DBAD71C6E1BB31E734AE795042A285AF9574D -63913566B3EB07994867850236FAF20FA42EAB0535D5FA5EC4CF80BB2B13932E -7AB189A5B680852DE51A2417A70AC10DA02549E09CC96FDFBC49E39D1874A93C -2A28AD92F036B9CB36B5563EE2992268B1B02D11E4E51D8F3D6128DE0133BC48 -909E0C6156E527C9D87EF5C577B5E6789D4307F2BDA049B17A489A32DB9BF19A -A181375F10E7AEB96561662DA0F6748D37B99D116357AF029C6A25D761953BC8 -A91C2E06A070AD94688BF7954EB3D084EB4E3EB03E1DBB91AC3F3A14C8718981 -0EBCAD4DB31BFE5ED25382BAED473B29F07E225AC3B45AE131478E544BABF7AB -C5C59D01188347A370F0D0E937D8F4562F2450B77D871C775116DC8B041C0AF8 -FC8C9B67C4474A8723ABA7D4CB318D941BA18DC07373EB74822D41D1C859DAC5 -F14A7B1956C000E545D6F617AAD2BB0D545ED9FF3851C123A32AA012EBEED2CA -D81FF7FFD29174655C42DD6545611BD3B00F47CA4EA2D9D0CE4A01523CDF352D -6A8A2F201EDCE2E6CC5D6DFA6DCDC12775D5261EB120056D88E080E5F5CC03F9 -F17427E7F8A02FE5C8F3B125EB22DDC9E79640EEFC4B643C915734D7684B873D -51940066B31876F5A58A3B7224BC067C7476B81210CBE89E0714449CC7ADC971 -42EA708B18C60A9895B6CF391C57E815D05D8FD40A12B6564C812B371CCE1B9E -B7876C9274B6716C8632F07302483B124CDEFB9E388AED5E330E8DD89BA229DE -33331F6345FA3505FED271BC6DCD0087CDF347DBFFA4F35666BFA5C1FA6DE923 -97A056410CE3055CA869D9C583D801930E1BBA5BF6E6F2863F59ED54DB785010 -9F2AE393AB3C939BF8AAEF7AAFA0BE486855B4CA5E3430F242636DCA37FD0F38 -0315BD038B071C53193CC56934A5D428BFF9AD882BB5C3C639A3FD9693721E3A -7E29412AC40F83C609ECCD2C6B52D93C8F5FDA19E1BBFC88CE8D0867D3A611B5 -A4C86E617E6ECB65C4AC34F7C40444E5891308703A88379BD35EBE3FA6A65EC2 -2A20EF94D793591F1F6EBD5B5AB92BEA002E9FC9C665AA1DC0AA52F4E5FE4E84 -F425217C32B82D8EE65A9D74B74EC359A9F117FF6E8D4E0635512FE4F387C6C7 -9B001E708417A717CD007D758CE443C0992A12FD65D06AFFE668E7A8CC2FEECC -7C06025509E5C8E89D1D889480EEF3ED695FF92E7907860065C632DA306F6F29 -C434C5B6CA2A230F5FA0E33AF207EA5224B8603A554D5B57F1D353AC785FD431 -71A1473AA77E5EDD11FBCA16BAFB0057B12A30E3272164369F36542D813C360E -9E1A3E8523A1723F786F34AA8ED9C5E0E79BC8489E65CC14D444D43EF65E52B3 -9937BB572F745603D59070B19A99B575DB41E09603F7A1F97BD603656E7B8F93 -B5168E3329AF11BFF6DC7163E2FD545BD213668D9BD3503D61961CB6F0CD1280 -CD3C349AEF61C49DE74EAA38502A51A4D5D0397C0F04979399A24C1332BF9236 -DA1A31D9481C13B1263F48A8D06351E2E860E7E7115B1F4FA8AE0E970EFE5CD4 -96DD7332EF2371FA5A2CEBED96A0BC563018CC42F51CE45E06CE5BA442FD31FE -9BBF37A952BD37B78F06858BAD0B5B6625D943690E22A1C3F9DCDFFDD1630992 -A684A77DAFA50EA4D581074765779C4B2A41E3694FB0CD14030B885324120837 -1601DE07811737E429CFC59B8F4B859B2630FBBC2F46A2693DA6D1AC17034F2D -68966A6798BF0B806F6A9A7FE369B501DE71DC9378E2005B5300E7E03693ADE1 -ACFF88AF74F27AB46304727A54EDAFC01D1E80A7E27598DE8D634D80508AD1CB -0A06BBAB366C11D4FE2A15015FE4E85358EFFB71C9ADF211914A23083F71838A -85FB2421C14D308CCD77A13E767AE60383F6967C877B299EE7A8C7413ED80D64 -530FC64CE65979D77348049D3A6F38ADB64E811976069F4CA20C8E39210921A5 -703B878F6C147316E8DD47066AF2D551161196B0C9FAE339104EE8E972932592 -CB04F23576AE3A61727E4E516FF3044724346D639EBA08111F1D18A47EC2B48C -8E71F694412F029C85E990F099CD44D3BA1C5D3F2D8CDE64A3753BDE633EC0DA -8D84255DBB77A07CBD3DD87A3993A5C3FA8C646F36FA02FF808329922028FE03 -1CA83777099D4FE72DDB0A14509865CBB53B44191937440509F542F3EE5DFB1C -C124A4D58C22D8C9CAEE5214E05AFC330B1BD639651644F3C5E45B2BCCDC9AB1 -EAA1F69A5DFFAA62BD117724B278907AE755E2F9D30E4FCA48219D7840B2E799 -7EBBFE7CD2D02132EC89DE5340858DE4A670E931969B808E5FC8E1108EB3EF2E -01C8E758532E78E6AB5E5B1F4C59F974AF1F0AB5F2FE1BE61E70F71920960B09 -1B5668527F343DB865947B284456BBF00A696353047B812834C59A166DBB8BE8 -92CE57146E59E8DD2E1CF1E356614AD29BF34D6474CEECEE1F90D3E776B0DF8F -CEEC8D6F49714CFB6AE2CD7F77168E8977CDA9191C25CFE7A726CF78BC41A535 -09E66A3A97139535AB94B385E5B614EC835DAD2756F4585FF40483C65086AAAF -DBC5F9A5AA28174CF307A4223D27E10720EADA0B5620C3C85D211D00017BC843 -B3F5A207A41199DD72831ECE3CE0F674F5F942AFF93D541651CD027D82E16179 -8ED292C0E2E5D4489471F860C0300E428217BA5121CC668486B35EEC259EBB28 -B0CF1AA02B7ACAF293D22B618C537A873247E4911B2ABA5B784728B4167EB1FD -066712437790A213DA5A370F1896735DF6FEEEE02E2FB0C7D907434932DF650E -65566124FA36D25812192E6B2349FCAB5AB2F78B5DF4CA8706230B78D6E70F9A -3CA5D6CAA0CD72D2269D74A4473D239AE7E68E1DAE8217F890A4889396F86299 -1E1A3AB1C1298DF1C22A1BE1E665C6D4079B94EF89E816F4FC07843FCE5199A7 -20CE6B6D064051B9A98304E3C97EEF2F900C010E06EDD686CAD64F853A1E22CC -CD9E47056A63A4E6CDE247A8903A2309B61EFF86E302858F1D236C5403F6DCA5 -9ACE76A2F51337BAD4A4221FD721387526DE8FE12FA25DC7802A111D96E6D974 -48944AA7A92186241F681392B54CFD91466EC39ADE17F24470C44DEEFAB641EF -C9F4D45E9DD2911E9E50C150186F4D3395C2684C6045DB59FE947DC169D2149C -A591690091C7ADDBC50DCB395A16334F68E73F3E222661838B1F74C4FC2DDC25 -7F06CF877B94E1D859FDC8CA40229A43D03EF76649A6AC920F73D8B3928F161E -168520554BCBBF957883B7112B6DF94E62408E24C89FBEC3ED02561EB664DC8C -3A72E91B03479C2D3CA8311B7F42F13F6E95D772ADCEA91A6A2C710E2CB3E833 -E94D5E817E2A8E440CC6A3D75C78487391F1FD8B85FE14C22C619C1AB4792BA7 -0B96FA5555FA29A0A847202FE1B32287D172430112C0787034AC9733A09391D6 -B5AD1A920951804361C8E8A4E4364C3E7FA0D108D4BEAA2E5370826A919D6C9E -AD7A77D61C8ACB19DD62AE544CE5871FEC9E99A90E7DE5463FB6CE253AE40C78 -3523A3CB5EBB7EA51219537716643CB1B24B73EA26F34A49B52DC14F8441E496 -430DDD5EA1A7762AAF938C3DFFEA1934A6D486F9A9057B0B087FC35B7D97DAC1 -E846E39856B07D81DFF0374175FD94ADFFA6907BAD05820C519120FB80D7F5A8 -C08673F2D168394FDE83063EF080B9D1C52E9CE5DB537ACFC3009B39005F3988 -ED1CB1DC24F9278D1FF0F91D2FD9BBB5C746019B00C77C9C90EB833D42610736 -07AA36C7737ACB0DEB210D9C6DC10CE47005E9519C69D6264CA1160818CF0FE6 -63E9CB5FBC59542DDFA431D192C2C6ABF694013024190FC8422235CE88C200DD -18020DBC11C9E41B12A45D23EB8B56FA7A4BC772B14257D8CFF8806DB05D3F7A -AD6C71709841942300BB018CE63B35400F979AE4F37A787C10B8BF36A41B8FC2 -1E2940FAA7EFE3BA8BF96F5B9650795132B00D9C8DBB52BF0D182A853350467E -EB02FC268F4DFD4FCDAA1BB02C9722E88AAEA3536C837E34B53BE9C2837BF188 -CA19639F2974A3AE40A8421DD5BA1DD903DF9B63E716FAD3E9E03DC6234C3988 -5AC8782612EB6F008DC80D0C758AA75D4A3909765831B2068A170AED234BBBCE -DAA91AA0ECA9AD4C14330A168762D119A3C2AB0D552EBA73196333042B2A2F95 -0DC37909D3E3C38FE9E2BDB8B2CB77A6DEE2D146D777628B35894A538D561983 -55E8F2E37E00E1A182090595C7514EEB78E9D8AD37859077F102AC1496BFA3EA -E1790FEC4B708738C8AD9C3542482D75E5960B92444D69AC6EC2CCCA945D23C5 -25CDFC2DDC08D599746B686A1485F474D151C326CF5C0C62FFFA4ABBF5353E09 -FAC520B165577FCF2AE0B7E623ECD3B44A0E7DBA7B0BA5B4172C502727283D3E -0F4B4EAC070DA76E72B911AE6567411B7D59EF3622B213FD28AFE3645B061065 -ED44E30EC1D81A1BD801EFAB50C2AB27443AE9D256D4CDDC907E852BD0B5C8CF -DF95B90D45EA2262EBD8BC29FAD72D6B1DB7669B2F33A6368FA260A407686AEE -5C622E7BD7E620BD735A5AD6CDFC71EC5CEF80324CF59D53B945F9CE2EA42806 -E4EAEF0D882FF37FAD4D28E4A68D221A735061A5A25AAD9B73B4EAC3455983B5 -B717059B778E47E00698EFCDEEEDA99C754F6C61D56E617DD78352FC39F927F0 -0BAE0683DFFCF55AEA0E7CBEDF278706D147B6BB099950E1D6410A1F70CD056A -C79CF45A2F03B522D95CD9056E31A51B4C71A10591BC5AB0CE178C529CD741BC -0F4C7854BDF9E1930D2D597B444CAF59838AC30533FFC1D39B74D99E82E2DA11 -BF169929A097A4883B7CAB01C37D073E230301F4D58396D428F541354FE82CE0 -B360D5DDD4EAE075395DE968192606584ACB94493670C5DDA0DB8D8500A27786 -FDD7D908CAF14F86971771C604EDEB9337DA9A7C08135CC60D7D5CBA7DC822D8 -81011117F3B156360691A4353C84AEDE652572DEE12790CBD357FDCCB36DBD5E -0052471DA8B89500EE6BD0BB9994FCF9F949E8FC9B92660B8FB66FA182447EB7 -7728AE2A9BF139C9AE75C9327257026A9CBF8AF1F80D0D6E4BE273148B2111DB -5E76643CCE284E79FBE70347AD0D5D8F81E6944BD01AA02C3ABF66C27BD39E78 -5B8A035A17D7A8DCD0D241FB65DDA12357357DC0320C0A1ADBA0E17112A87682 -24A37F48F45D0870441DEF18F885FB7DE5726D545D91ED71DC5744D9B81B4EB5 -6CA17C065FFA80815D513A50C5E6762641EB969C1EFEBFF6F022D95F35AC3A5B -9DE915A45BE37832AF5BCB8FE8ECED6566802185492E24C348D88D7B2AE14D33 -BF71D8E692B0857D1E744E75ED367B1E792F258F7D29F69A2277EF81CEF1C8D3 -D84C989219743476CBD75F8654CB76B137B8249B3A86513AB2374FD12027520E -EF2707F9DB82CC78E312E4C5E1B52D50E6B21C37F796B40E9CF27E98080D3FD0 -F73FCB06B74A82D5C4CCFD484E8BAD2AFBE25A5B8F1CBF25412B160AFFD6E425 -86339EED833E1485508E6ECB2471393636E58ACCF1DA80B0950A3AC134B324CF -F7D80AEF4ADBAB4E02DFFFF5D4EA2F87F667142A6FB5EA8414ECA68B302DF431 -AAB49CA5D8120C95F6C4E82BBB70DAEDC7DE821AD4B5DF4796E23316E5D20606 -DC9567DBE6F5A06182C3B9848DFF54E02EE26B6385A6F7CB9C5EE0DD0CCDE6FC -E6F98D726F64F190DE1C523B1D4472378FFFC6F7281495DE8C36300F2B696308 -B6A69407FF6247830D3E1A6AFEA8C8DFFD63A737CFDE9B9E1780B93EC4244420 -9DE722676A7F64EED5F13BBFB0980BECEF18E55D12A34B13A4FAF0A10F74B88C -59A45F668BA03B900D9F2D1D8220E647132604DBE8B06E0EAD7670A7D7485DF6 -30E8C003AAFCCF7DA4C3672EB8B76E56A9F7F0F5EB631008234A046205C7AE83 -36BEC5CE37BB25861DDBBC4539C38E2D99E6B17A0497C919D5F3309C30E43281 -C714450D9F883CACF058F8DA7B93192F76FEB29EF1BF10E262EEDBC797D85936 -96CD3B3922F727DA98F359DCC2347FA95A7905B5DEF2F0B3ADC90301405974D9 -792BAEBA9EA0070FBA6C842D40497DF039F975F6D85D705D3F8DE8386C8DF996 -39EDA645F3D1F7DA2B87EAB5450F40BDE12B26D8D4A3433668E430988C1F7D34 -0748FB4D4F886762140314F3F2D1D16CC6439A033F8068F048179605C5FE9023 -9BCC22B5D7B4E8E9A1F66A5A9D3A888257394C353C835BADDD00B2BCD94D46B8 -DC3619E4CDD01FE753166022055ACD7ABBA49BE217260A47843D3E7666A90ADB -E3ACA94CF7AB1D73D6230446F4848E5111E03A5C7DCB1CEE340ED84F40660D75 -6FE5D691F5327A3314DE7622BCF2DBB738ED7C7B3BAB9A975CB2E739161DF51A -51B1902F65E6E68D77F2ED65FA45B7338AACBC2D6536BCC67B965C8A2F32B576 -EA583CEBAB347A5BD4CCE61EE80200D886FBE41913390091C747D12372DF4A03 -A2B68A79007FB7A8A87CA0E7247F0B36717C95944C34932B0B5E758ACFCAA071 -4DE4E88E5B97EE25E3503045B366EDB477D362C34978CC1C66D4720DDBED2983 -A2F6B75572F935D08E16FCFCE23A32B9C4E8BD895759B96F64D4B1509E0F50B7 -1F2190A352478EE247BB65E5DC605436F58E7369C2A5ECA8744FA45B251FADED -388F1974505305A520E2B39B9B390DF9170097D17F36BC0A52C59D25BB5D0AD8 -52A9430750B489AD524F7D3AD811617E37F3628FC6BF331B6A8A3C1A874094ED -5C5085554A5B16D60679E9825FE8BD11C4E5552D5AC595745396E0AB8FF21EF9 -6BDF132EFF5804B02FBF46225B2DC521FAB66293B1BCBFEAEC26DE6BC7BB58F8 -746A67BEB786E5BE2642B24D93A46C31EFA288D7D0F3D54FE578F0339123323C -75F1EFFB112F0A4D711CA88946E0CC691EDFC3BEC310AF1354817736D6F2D5AE -D361466EBD8F52F0D4935608FB2F520A49F771A3A19BBE9AADADC4ABB9006844 -7503D94FCEC7DCBA66D258A76E8BADD54DED70AC66F0EBC6F052937A94C13A35 -734578911A9B39487E51B0F5BA48DC09591FD5A1D45ACC368D91C3CD3B4A9BDC -98FF62111F1EA93313568A1162523379CF2BA6A240AC489B3A8963E42D08A8FE -EC22C16D4CACA1B43606A76A9BD512A9DB20A40C3CBC9C35C2784E4BD072C04A -74B267B18ECCA5F59DF84B74A361F5406C582BF99B99F69AC1A4F57839E37DE3 -B8AD9D537AE12C66BBFEEF8E7580273201FD665EDC1B594055B8D312C303AACB -E07365CC0C78B98A9A62032438D806340D1BCF852924854C4E50CE53BCF8562E -F632AC26B18AEF9346E29B019A19A2ABFACDD303AB7630CD91CF68E229F5EC79 -508ECCE0E44B8282523ADA80350D28B3646B62005184736B434FF29472B67D27 -27BF7DF359BF0B7A8CE5BD7B6F49126E8C5B429E57910ABD55CAD54BE35A0F15 -6E50601498CB9F0AF7C88BDF21E6D600638ECDF5F17AA25E25F4ABF98D91E1F2 -2AE15BFC7D8A57924F019506D82083D87A24291B1DD99CCA652ADBA3F08F69C7 -5DE09432CDC283A3F139FD16B3CA7B15106795D5309D918C2D3302548CECD9D1 -2CA6690DB242949D647D835D86C94709BE43333D81F800527DF0EE89CF11EA53 -C5FB7B0E2A5C97477DE8AD164228AD96A646FD9BAA1D497EF07760BCB2CC2C23 -2502F8BE7F8AB201AA730FDF14038E60F137A5BEB60D9A43EF3DE2D9417A4DFD -136EC1709DB3871BA2287FAF13674BCACF09CBD5CC9050A06989740A1F9E76DD -12D8CE4739CA3E15C41EA616D69B1FE079B4A26C45279A105FB53E75E0C49D8F -B84EF948AFA24A920699BB185FBAA8A85282F97710E82AE77AC3F32174B754AE -306DEC0094D9E4A48C9F91C2D6662E68B29C56C9367E7980B1359D3DF33A2D1C -DFE766DB2FF85CDE7E591B991D135BDCFD8CB5EADB07E3519C921C6614D5DFCB -1990A6943CBDD41ACBBD5BBC0B897DB3E0A89DBF059FCD9AA77B2E418A118721 -AADE7767FED3BE2929C192165DEAE40640040910AD1E205A86CA27D586C4A9E5 -001E56960B9D4905F60E8A7298D615FE09DE4218CB463A89908B6DDFB6BE54D3 -745F090F39333A06017CA640FF1CA7F09B563EA8FF89627E679294CD5C727D25 -86A4AB9AB2ABC2F6AE5D0C65EF16CB93C42866DBF5CA86332526483E49651277 -11A5D0F1E6A64BC17A6E76C8767A125FDE537D12FF13B8D274E35A3CBC2A89E3 -9E8C55C2AD70B607A624B0A67E0BB449C56559D23BEFF4C2BD99F67FEF973C1F -90F938CD1981C7DF56AFAB82C7CEA98AC7216E2B4F80A26D68C491116A6BEEE4 -ECC054F7DA563F07C4A18EFCBD45A5FBD566EF722F5E71D5C95E0FA2A33ABDA0 -07EA5CCD03D569DD830BFBEB88C7D5DFB6B301555B2A14F15E565CCB4F12B60D -E6860C297F90F9B8A0D39942888CA8A3B8200D5368DEE25B0C0432377598866A -88201A65C0716A3DA92B2C3D05F20A0143C841E54279AC22DEAA33A6C75ACFBC -E0C803F82F6E79D871FEF0F56D7B018172FD281CAF06D1FA247201FB1CE5081D -3CCAC6629676C1FF1B0E64912311CF8196860048DF27FA097CEFA4C257C426CE -9C61967EA4AD40E78793F4992E30D865257AFBE6E3411547CE3117868C7A0D96 -887582614E2D8A2543F9408B69BFFA44494A9D469722486FA1A8E84881443843 -4CE118ABB689CFFDB6233835669C2640A60C376866A9CC1A4846817CB26A2862 -CA8F4F5DC66174C7C62F853F8704BAF1B8BA8934451B73C9D23F7857F53A845C -E937BFC1DC27451FFFE0C75008FCB9A372D1E4EBD771878BCD05D9B3C598854E -33D19ADB2A50CFE4D82723DD4F94BC6880EE00BA9541069BD5E6A658F0BAB38D -769C47CDD3FD7D664A35F9C0758DC060415B5514A31C6BC5E0038E2B4D5B6B9B -C246FD9A961E7AEB4DE3C4DF0CC1F3D4CB0852EE3AE72CAF18AF005AD96224B6 -7D9462A0C747679B00D81AC906B64C5B8D3A500A8A1577553E25E1A7D91AEEF9 -FF84203A025933E56A0ECE5735436323D6FDED9B4FA26274D650AC3DBE4B0AF0 -4ED960E495203FD67C300619125257836C9DB76F650AE523401EED4E5824898F -A1B77C521C1A070A5D20BB324C90207B01A0B86A6F42DA7ABB1B2BB2F8F99782 -4331894668170332E3894E80A5C43DE08AB3AC4074B1DCAA5B43BB354C54B749 -82D17D9B53CC5B4018CE4467D250B4F98036B0CABC0B149FC7B2172D60FA5188 -512E7801FF83AFD47B0E87ECBB64281E3ECA9728A30A3B98681FFDFC8FB161B7 -D57F511AC4BF30C2D548B9D38371EF4E3845C5726C8A33B20F2013833BB68268 -A326BD1C199E3FE776EAABE066CCB4C80BED3B558BEF58B6EDE92A692A8F90A8 -45D322A2CDE3EA8DAFB316B510CB1835AF292C30F58861B61CC3816DD5953673 -2AC0CEA62E52CAF6F60FEF21B726A41CB42CB7202E3C605DD481BB7072079903 -8F5A0DCF8142A83B2D746ED1E11521356E57C07402843B6F34D5EB212143B5EE -7D49A9CD2ADAEBF0F3203AED4FFC99B05A05D74F8BC7E9A7E0F3CC73CA87CB1D -F734DD7E6DE90680D3DC54739DA1783ECF3DED371BCDE79B86BE61FD0C25C656 -89BC9B059AF6359719A55F1E095558673B2B6BACA8087C729F7CCFB5570631BD -B87A8BCD4B6E1BBE918A44CE8FA4694670DBD43D2D87A8F04722310F2893256F -6C9F2BC39723FC1504FE00753D76554776E370385DD79F72322A8FA32F1052FC -A6D8AC2807EB52000FA90FE1275C8876ACFB3EE0D81589920F00E00588EDAA3D -A6F2C43E8400C13690D6120286A3689F217C6312F8ABCECA44B8E11DF75AD509 -0420FB5AF0E18F7BFC7A69C20C9E3FEFA7D951AD9724F425F38502EC29D32E28 -9407B9E3601773287512DF1D279F0B18B856367996317FE0BF47A30DC0AA3A72 -F1596681512189F0D954A454A16C89F0F109CD95E845CD1C06BB122E8D58D71A -EF61CF589BEDAD6ACF19B30ED3431E93F73C9391D3A31CF94DEB212B4ACF956F -B2A859BC2F96A5B52C6F5DDB104FFD2EE135484C53E4CBF8F4C9208B53E64C88 -68CBD15D46897DF78E2A0915CB550EA70103C6738124A0639FE3498C95A8A1C1 -3BA81BA5D5DDE68DAC731A5F84044D94B22462F47DFD7BB38B6AAF0DBA52DAAC -086434027B5058AF07D1307D6350524029E226525E8FED9835D9D60F301F1D61 -8E458D0E2C7F243508B6ADA892224766897B70B55EB9E6AD6BB39B1B639E6B8B -66B73B761C81CAFEA2EA01E1C3C64BAC284DF366B24415DCA1498377599D9248 -A5335694C94E134BBA10FA0B4B53D2ED32664C8951308966F5BEB37E110E2D99 -EB8752F75839EF2B602BCCBBC7BA8460332BE43327EC7DCC8F0F57CDFE262AFA -EBB720D79DFD9319BB889BB0DE1E2E0D064641764390258215CDF0606855934B -7C8C0BC1AF945AE45B40B970FF4713086769EB30BF30F272585F6EFE48525474 -0C236B1F4710977AFEC9346C8A920D4A8832015D401CC2A44584643DEC473950 -811A3B476B3D42EF845657E45D390B873D3ED65C8D9C3F6B0C189BCEB6B46A11 -E103B9B0A0DF61A899BA5CB68CEFA1297F156CD242BE975326849D2C21DE504E -D4FD3CFFF53A29F671A5B3ECECCD598010C52CCD451620AB99A917C3DA3EE592 -98D726DC6BF96E9D73EEB778961242DFF2442D8791E09E80853A7F16FCD9FDF7 -DDC4186E54C200403DA07294767C219D161ED55B8752793C8FE1810496C3B855 -CD797C653DAB010CA1909584D6F42460ABEB8E04B8A472D177995DED8ECBD456 -99C7A2D42C6A64F8CC8B14FA0B06C98E1573AE19A086556CA062268AD02A3C2B -BFFF7947BF44979A39149E124C564CBF1E782E55B219D13E87B790D90F0AA463 -E2107C5A76CCEEF736A73ECD38C30BCF527AA53CE75B6B9DFD35288143610D4C -4954585EC5AA5F9DA22A5A9F0AF66BB8296283053685AF292FB8C891F0386ABD -2DE33BB1F86D984DE21DB7129D28B06DD6752877F78F04423447A8D65255FAEA -8A6AADA92D06BA150D7F4031639F3DFE149916186BC2FB0B6B616AAFEB7455F8 -78BD9E857EBC914457F1C2927BFED78CBB77401B776C698AE100116920383BBB -598E41582E679E99DEF5E5E50EC75F20089C70209AE12D9A7A1F01DD7B815CEA -11766F2B5B82D13AD78BE0CBD7AC82DAB46575CD90CE59B2FF705F328AAD4BFB -B60839735DA8648F312AAE70AFC24CA58339630E430E417D4469C39328FCA6A1 -9BB91791521E7D43ECC2FD92399E250443C9C0D14AB1DBCE22076F81C286D61B -136A956E57AA9BD12B548474134736DC80138C678A437BDF746F9140D39203B0 -C79F51F3E31F679CD80B1D98159874260DE5A298FF11B5ACC461A567E1F7EC81 -F4232A80CCBBA20F071F0BBD6749CBE8DB8724D14D4DA2DF0676E182B0C165D5 -397252C6DF93F7C2C52FBC3DCC24910929A0272672F1A94C03172994E4FAFB47 -76FDDF661F13DBC3E0D3882B5D576BE48F2C16F5CC10EBEA40CF90BDF4DF4997 -E79D92C92B4D570AA930F0C841144E440AF24893979008E0A8D2DB3FD81AAB59 -426A49E8FD770654C520289B2D48C14B35A069445324E37F66AE20BB0EB1C27D -4C23AA633834A3193129BD9C9FFD8F8C152D9819F852A0522DAAA38BCF1687DB -E22E3EF59EB2D3831261A88106E41C86490C32785858538FB9FFDBCBBE186DFF -3964C03DF7FEB945B1049EEDC856C5F4D51A8C57ABE0F980FFA7E9BDAD21E476 -67976A0DC9AB4D84EDA8E9926FFBB302CAF28CC3FE6C58680C26ADDC361FA10E -42FE75145AB186214E03558CFF881EFF28DFE535D612243C8ECD8C3C2DE54C1D -14DBE7DF5200AB36C47064E7BFB0C554A5F6A03B6406C13FE6D724AABC071504 -F0C55CDC2F963DAAA255BA3F91208DCD272D395273D98D7A0083301D0186A37A -F2D0385CC5B0698C21A197E57145B1D32AA873D851664DBB3B672A84A1EDF6CA -C3EF5EB58023FE876BD25AB9B8AB1D4DC1966CFED8EB3CDE280D81FFF60836F8 -68D3D51813E9BDEB6F54FD448F6C6123615E12514DFD986532530DD65E84986A -5BC1C1E3B0E760D88730E708270924E98890115E3927EFF1D8DC891314EA205C -DB1F328C8000CF7BF21AE594840F6CD56B6CE4DDE05D2FEA79A1C037BE44BA87 -D9B4EEAC6D044464A719D6674B0249E512F4C3BA6E6CD5AA138BC1C1B0C2614E -5CA4E7CE5773FDEF44A0248A47031B2F8D06EAB92BCB2157D4D15C93139A800E -6BC273669BCAA825AC886E8F0B308F3E5E7B6F528D99A1B6858BAE807B162ADC -C02397B3E017260C723ABB24582A414CB1793BB5F4ADD3762366F880936D2906 -5D8D0A3C2EC31C3B23FD7C5A92246E0FB2DB50236084CE103F56B00511CFF8C6 -5C695FB66A1003DEDC5BC43ED31DEF5D2320DF77D2B712C5DC53F32978E14177 -0E95FFD8FD13E8BBBBF030CDA5E4F05BCC50F4A7AFBF5510398A373FC34032F8 -5CD80440C7138DCB9A85A656F0474D070AF48198CE2382E92C855ACC69EABAD5 -CAF94D8A4D76EFB4E49953B8EEFADB557237F495B0DFA5C3F7BADA594348A88B -973E5CFCA5783B20CD3DD05310B24F9539E4C30689F636DDE164861E8702FE25 -2DBED89160E815A617A4E7B1928FD84851B40EC28C8DCF9BD9D95C5DAA4DE46C -EB78E0902B36B389DCD3DDB8C8410D684D003A989A15906A38F2E11F4CF42324 -DF9A1341ED9970A25C4ACBD73F8E68AEC9266C539A920EDD17245EDA202F68DD -42CD0F2E1CF99E2537E4432546DB208EFC3CE2805BD937220A62E692D0B8293F -7831E4E5C580504840B4B5C01B2E73C6BECBA5BF37CC2657A2CBD51A828A1D82 -12E7CEE63847B2A80DDDEB8376EE7E364FE47FE1B6DBF0C2B052D7978FD529D5 -FC880C219D892B1ECC5617D30051860C482B2D6EA24DD5B8959372DFA8D2AEB5 -C06860466A2D22891EC71BB7640449CBA679E67E6C71F44A68AE7739744AA4F6 -D4FB1F74C20B301CC545737F131E0DA3183F976ABF85B68BC4AA63FDC006DD65 -44A1C122539EE0A1C07F29EADB687C7AEBCC92FE2E245C330C10A9B2FBA8C9C1 -0DABBEBEDAC3B91FD3F6D51D653189152897963E8FF5EDBAA5D92381EAC86ED1 -C896B4379433DF5212C843754A3AD3F217863353C76153D102359D803776096F -BA9D4D6DAF5E3F2CD47762468AABE5AAE4387C54C2C142E5A63ECB22AF0914CC -32FAD5435E23F7395871AD8CD2C02873E7EC7900CFCD021446487A9E6820BD63 -EE0EA22F8C82A90D59246E110F696F2FD6314F65E209028CE4B211B7B58A22C7 -C6B82C5D0E0325A92123947FD8305924E2BBFA530C6E2C335268D2442D3EE9A0 -5453B3D87E5BA383071CFC4CFA7131D24004ADBEAA6A80040EE12619B7010973 -627EAA9C69322997E06B8F3E10105B9FB004089344F9604D50E9CB75FF6C1B9E -208347262D01ACFE1A26E6B6A1724FC811A0B602F9C5221BD2359AC1A27D641D -B1824E3EF3C6ED001DEC8328AD41FDF8F8643D5AF1EBA51CDABADC151A16839A -9852BB2A8FEFB5FD0F236A17293DF1391530A9BFDAC288B4BBABA3E8DEBF68EB -61B820678A2C5A844B41DDFC96773AB21207C7403182BDE878BFBDB02AF22416 -7FAD6A039256F0321CC568049E80522250E3BFE9D841E18796C108EFC61049E9 -91890A11488944BC18D63D911B205B8DE16D062052A7C97108CDF5BBA0BDE087 -E0B31781C257679FC8A18C945761528FBC7D8E61ECB9417D0AC43857C0B3055D -F1C3DEFEAB3D9ED3B357926BFCAFD7796994E28799E0CAAC3464A6F8A2203D9D -F006C837C8929EBB2483D13AAA62008D790B81D0CC90CA55DCF1DF78E855849D -170D5F0E11B5ADBD7682CE233E26F95CCCE957E16C55EC3397DEF52AD7301BF7 -B8E6117415E7EBA61B9D64ADB3091AFAD3F969E8D28630538AAB1240EFB4EB66 -84766B4DF14C48DF117072E62AABA7FDD41169E098249DA39E884724F89C427D -F60D85125F31DADA544BE2426690690B8EC4E3F97DA0F2EDC2E1E76F6D28BF17 -A3E1DF62C0AB685A0F22143A5F1BBC26EAC1426CFD4D9DF7F0FFE872E0C9A06A -2816EF89B5D6CFD470F7D6E0897A27CF607EB99099F8883D9E63D7354E8987A1 -B1F995D0C38EB5CD06D62B26E1B4C14C59DB4C3BB22A796C161CCBEEC0BC74B3 -01F218784FAC50F1D8D735F623D8E568F17362F26AC3511DA3177D5E5C18713B -FF1170C0FE3E1D71BF5CB13E09582A51112F5E73C30BFD6D7D40CA7973C4E98E -3B503F6B9B74F48AFD91BE0018F855B449F93BD9D28CF4640191D4F8A2150345 -77C29EB8D6660DED45A25FD769AC5DCEAF43A62DE7FC6144F1AF107997F2BEE9 -0ECFD51B4EA120BD74D0514CF9F704FF7699574144B06A3C9F2485472A79DF7F -9FA68A82D377F7870F2ECE5E0DFD5D0A182F8C5D9BB8280AF6DD3A66DF28988F -C4E7BE36C95DBA103ECE133E869954D87FB2D955B3BCAB1F3D25DF55B1DE1D32 -145D39D8F1AC1B5EFC1F77E4779699E8C8B93A78B78BBB181A279631E163FF0B -EFF6F7B04D4CF8873708AFAB622B2B3613DB434698DA87B8132E1F3E46ACA7E0 -B4C03EC12A51D0E8EDB1FB1F3633042E15E61ED677D4B46C287CFDBB572C8FB0 -64974618F5AB0945CFFFBE67C5EDE351258C528C9633F2C9743C3386ADD552C3 -DEAB08DB72C254EDAEA678C405DA089849720B68AD9FEF4DDB7AED3D21CEAC9D -73553FE788D35A46F322838050C9846F4145C4A2B89072C4B00514779BEB8FAD -CFBBBBC2448F0E9EC25FA43AD956274CB6CCD5A4FF228A61478DD68F50BEC3C1 -B580F32BFA52159F33B554510F29386289EBD7CCB63169C859CEA82A88A3472A -C87FC773C20AA63DCC7C64BD6048A1343439A9B230C05ED126866A54C84FECE3 -87332796F8DA7A91ABDCE5F9FDED03B1E8DC5C61BC139F33D430F0990EC5D092 -B49D10AFE3F993569784F2EEDDAD5FA6E10762D901FBFDCB1997C40EAA885CB0 -52F4CD610296E8C297CE215C7CF23B873E67F6A12B495C415CFC27A0013ACC3C -FCB54D840677F056886F7A0AA5DCAA07DCDCDE4252B9977D3CB3DAB09FEEFF5D -B03FBCA4DD809B161685384599625301CC35166785BA66B1A18A4A9564139D16 -D33BC7C0731F6E0DAA9BE2EE103BB8C39E958C3F89E26C2644128BFE9A3CDD18 -1115429D6317BF9A35E980044E9A2D59DCC544D0B25E4FCA28046B71593423B3 -F9E27BF3239404626C495EDAD4053EDD0A601BA04837549232AF2C54B02D3C95 -2CF348F4FE12AAEE0DC4D545C935C8E0A8294B4CE56E026C5CF2B36EA1F2F904 -AD8D130D6105BEA237207209A1795F3D3A03FF1B16A7C3163B99F40F079D3970 -86E64A758BB2A068FBA3915E75FAD7D7455EE272C6D48DC07138172457213537 -3BCC124302C549A43F501A5E4230F8B0AA54E7FC3A644FCB42E12DA142862EF5 -1315E92F31A29E92B3FC3ED944EDE66685B1782238104FE41A7A039D9793B810 -639256B4E1229C87094C0CA19A16A5C5B6C648E57A4CADB955E162B82889DC72 -FB8B11A00C6885B23C0ADBE5C8FCE24DEF5AD7814BE49D547EC42E312D795D0A -49C06F90CE9F29AFAA258E9BBA47FC2317F45CB73F246A277C0F6F85CD926CEA -8B119C613F7427969A4D7241AA375205EFA30482C5ADF407AD692D5993200D6A -A8A7DABF6F9AC7482F70557CDC7E09C3CAC4EB3FEE98605212D9474193CC151F -43F630ABC8335B4C91E8E64283EDE6A46F92D66F1F25312B41B1254EB6A44BCA -5EA1F881A8CE2756358AC4084C6311A41827D70F224272C5F0B78C8172E05E1B -128DE2205D27D2EDA3CC930783879123520ED5F52D3174477B64ADF595C398EC -6EE39AF98E5EC04CAB0BCC122E5DAB540EB9EA7387F6B3BB208A3281E657A2C0 -F4A215B2B1F5C5F08048A0A357F0B3F4ADE8D0DC91915B78BD6B1666A05C4985 -B3D45367A6B7BCC24D0093AF53D9FE8C91D7CC542C7AAA883A26757FF373EF88 -A79174BFF975687F693BD51DBA40E73FCEB8A18FEBD10E8200A29F475ED47F44 -ABC9F2A6F66D768508FD3FE078AB46ABD69B79A6ADC471AB866D326C4A20D9BE -8A15DE54C80945554AED93AA561465178B6F38D94769D5447D1C267519059101 -F9501BD996B8DDEE625A74673D13A647148A9F11CE99E7C6BDE7D1D507017648 -8173E81909387A04A133CE42C4643F9E5D69BE24E48116B3590E6ADFCF02A21B -88ADFB0F070F666E38F260F7A0F9A99D22433F8F0B436BC169868685E7A144F8 -DD4C3FC1D1A554BE8356A18ADD5626450A29E80101A8164D0A5A106B7313FBB5 -BAAFCE2240A66E18BF06EFC32A055120F7DB77B269C285C27384EB0187A135E5 -8F7E926D9C48A9DD8C2747A5B367CFA686FC1294C0DF48037492C1AC42241469 -CDC137863CFDF8CAF8B9C8FB9A25F4CA4D517AE0707F94E8184386E0138C9098 -CEB7FB05EBA48A2F10D38F62B950EE4DBB2973D23D8F2C36FD315ABA5DDFD03F -BE64C12D18F9EFE17A0FC0CC57599826D09A45D3F5839CEE0FC0BF726CDD0195 -924583C8C4E5BC06FBE89DB34EC1E2A21D09A8D40EE8FD72F352161A25F7DDBC -F4055FBE67201414BC725815A68740C1D73CAF7EDE42D5863AF0EC9F2F29A2D8 -26822706CA8119EC6D0D9468BB812F48F61E0B528F48730F65D755A78330BFCA -B38406E441453361EA517BBF57051C499BFE502049F5B869CBD63A45B26DED44 -F4148C9F523681B5316B33F261D9F854D58F301B04F46631629903B5C6CA7C1F -32165F3BF96494B89614E773E21FF582D2AC54DCC559604378E9C6E87655B3A1 -66D2DF34D531F89942BE2002903071947F9600DDB63772D73C3625C969E86859 -3BB872F0FF0F3102A043302117900DC43A5B295EBFF6E0F098694CEEAAEA8F0E -336A33F31E7FC4836DFF317A8E5C5185B931B49F55288790B903C5F709AAD9EE -7CA77BA4B905F1094126C8C2DB2BEF9D47D9764BA02291B61D6F1111571C48A1 -18D7A3F4C4AD999643E77DCF067D59442553B1933FA1C7ED31486BBA13E38BB1 -A5DB843011ADE62477C8D700039407E4BA7140FA57F0CBF1F592B0FE9B77EF26 -1993A02BC2A06C9E19BD0AB9BC6785DF07AA10C9D23F1F39CAACBAE7A06A9D2A -CDAB181BD867EE80FAF7DF151B46469D39E3B146C90D0EA389635FAB3CEB30C0 -40CB74D4C6F4BA399FB084D3648AF356B956F9CAB3C3F122530AE112CC872B7A -7010A34B1A2ECCF920144672F8315633CC6B50B3D3288A922C8E8C1482FC969E -59060D86217EB3919DD8BDB95241A7B089DC1456965AA6807141F2448C50F8C4 -88BD54017534F9236C4EC812E2F48F13943C8B81273285BCE02FF68033B70CA7 -0F38511329DB041A8D38CB609B93A39CF98470975E9AC50C5910A936722EA880 -E840E82DBFC809DD5EDE3D9D896FF879AA47E89403E5E9078BA9FE3B3A2FC4E2 -C2FE85313B5D53A05DBAE54CFB25BDCE29B4F5D6168549750C2457EEB109CFAA -A14D71A996B2CC1414A8F89DE240EFB5C3B13F216396ED83F09388DEDFBF2CBE -604C08D8ADEC0E3116E33443CF68AFFA4513B1EB0A19D7EBE845D1A0516A9EA9 -03B7CC5D17CBF0E1965CF2A879146049318579081323FA8A13755D51C939FE1E -7774653F6610F5A542E30966220E69A4650B00BC6BBF8A09C13EA3CAFEFCE3D4 -B2C4E1CBBADEAA6DE7BDCEE8795FD31E1297113230F8670CB316B5F39F067043 -E261567E08179748C47D32869A686B20F4BC5B78FDC9BA35D1D4F35987F357D6 -3BD1325EB529B80F88EDD4E0EAAA54F11ADD2CA20640A77D96F627179B39EBA2 -8C3A895D4806568A36CE0B589B2C29A962A8F6B6AAE4FAC50E424B2EEF4E7B47 -ECE15B865381E87FFBF29AD1D3BAB2F6EED94B874ED3A975A0A5FB54E2729CBC -FC079469C3BB4AB361A7257653289BB9E353BFEFF7F8982162CB641F1571D0C8 -9530B1D6252C5FB1DDD8C29EF848D105126703AF7CE5DF4B87488F382426F583 -34021005B87B8938DA00725BB75F548F15E382CA1A57F8A27A81B5A97EE26244 -E739D10A43BB170D5C64BEA9580C3017CA5F53E8C30F129E0A63A5E9C391AF5D -A1C4B5EA0EB4722F6C9D187CCD4BC71A063D85305B14CDDE969D9835906B0486 -5D47D6857E82A3FDF068B81C0A747AA0F3D5C4BC089373FB9E9C54802AA63B82 -DD8C82CF7B941BF0714E80EF038C1B25E0E5D47AB1BF04755F4C29B712D8B668 -0554E90DFDF8D489833CE9317C0EA6F23ED270C8128FC8C95CB187B283A730E6 -32D0A11357ED48C36D5B681777CCA3D56A827C5AD83F35469869A4F774B9F2FA -4C437C95DF2DC13C8F3B69DB53F4DC0A1980762A9B736C4F1E435D92B92E7840 -B382109C02A5DF71DE910533E4925CA4FAC2B146E67817CEE6618F2C3BC9B828 -74DAAE72B6BAA987EC03CE66EDF04462B72104FC3941351EDA8C1D7E5273C8FC -C3E4F2EEB29C2C8FFFE88579C1EC41543A55C6E9D5128FAF3414195A8C7A9352 -0667E7ABA457A75D720A090069B396D062200E5A2311535AA241CD8647D0242A -0EA4B1F527C48F40D79FFCEA636D77DD07ABA26FD3F878DE004B03A2F95FF25A -1BCDC1D87FA05B201A4874325D3FAA4DC787D8C595E3E8D11FDF381B92FF830C -0AA70E4E4F65C7587BC5D6ED535A8E130B46D339CDDA5458BCBEA5D2243E4C18 -0DB006C0DEE0468A24D1DAC167A4D8174C296BCFB00439400D0939C7EFAC5BC5 -F62346A2DAE415684F1FABADCEB476B46D821F5E4A28A1F6F51B67320374379C -5B73458575162583150D0B8BF816CB57E08682A3219B0446AA940D0CF43CC1E3 -7566EFC3BEF49273128E9238B31A9244C2001E38308ADEA60BD86A89E1E3C0ED -D4EEEA31131AFE60827FBCFC1BAA348FD183A5CEEBFB472CEA0800FF18CC2616 -F43B04620E74D3AD95EA13E15B13BE3345409D3321397C77D2E612FF5011B90C -3A51DD8C7CD3A3A46EC0CBC605D1484A9C36FBE3A18AC54DEAA2282F7C037856 -B6511E5C990E421C34FF668EBB8778FBC2FAC1DB3F88282478A52C9ACE31128B -2491C873A3B765A204907B5EC4FC6A94AB9461AC8619AFE24C2F0A4BDEEB9D8F -D8405A05F9EB13EEBD79B32763DF402E0FDDCFFAC142DB65DEA80B5EC6400B9A -00A78E80FD3B9F909E953814958F2A1AAFE51FA01EE54970FBA5E41384903E04 -1440C92E2EFAB3E685D730455846D97C2DC7D25586052401264A31F98382BEFC -CF9049E23208EBD952DF7D4A5F0AD7CB2688D77C2F3496AE263430000D226918 -E3CDC6C5EB23B8611A14747122DCB9E016898F69D4314787EED886123293FA5F -01C3FDE4F205CAC20FD19471E9C8FA721A3AFDE78156DA287E8FF14DBF80315A -B56E9E875CAF0DCD3A622134291B4C42E7921F6AD0FD4940066229B892E57554 -4CACC05DDE1F374CFFD453817EFA9DD7A6ED9079B32EFB148C235EF50F26E479 -6371A267FB33DB00F0766B00F0D43992386062F80B62291F623BD1245357B2AA -FB3B27E7BA6CACF749C32AFCAD322510C8A13449277BDBF7C221D63B96D99311 -93F461C677AB372FE263C5C19D87DF70134CC0AB6B1FBAE2BEF9F847E30932EC -89D7521A16AE1351999AD4D4735149AA2892CEA8519F619DC0653D01992AE7F8 -D0C5635C4BCD35708D454C174CB9863B83FE504314A9FFAE0D7535946F0C146B -9D507E1BFDB6095A5AC18DC2635E1DCBEC393DE1D8D3CCFF7B0258CDD6C00469 -D3B94BB1E9E4397ED49FAE2C83103484C1C24151046952E3B9816101FAEADDF8 -8DD6296AE76BEC4B00B89D319115F5F95C568DC54FDE1E0A07AD3D3620B86C6B -96166C4B9AEC2DA6D2B2D2EDAD08D4F58D193278A99FE28ECC676EDD4FE3A624 -3FE82562852B0EAD2A6FF707789799A1546326EEEA08A5AF24FC99F1A6B15E91 -CB13F53C90FB93669B1D7CD4882F55258CACB374088B0B01886155E2AFB7F3FE -F4DC284C5F2D0C56135ED79D8348CE3C1F8BDD50627589E806E6402A32E69D1C -D7EED5F9DDEB91496AB5DBF0D3698FB728A782073D64B0C4E28967DAB8087ED8 -491C3778FC5916953C235A59BC191B8445B118AFB64C3E7840B3756E02ACBA77 -D1269ECCAD63C3FA7C162F3AE317372686B1FEEAC57C8CC0637236CA01DA6B0B -83C40F977F766962E15349F020BC048136E35C678123B4BDFF5B154E234CD0A1 -70AC976211A99B8CB8E131D85532AD7A72072F577B51010F21C6334006371A3D -AAFBD45E1E76550DCC6060678F94E0C7D54D88D066BAB5BD21C254D9628F9502 -5043E9205ED0FC7025C033558FBB3784D2CED521EC7C9F7D6BB8D62899D0E52A -A0E385ED658B1DC84DB76635FDCF0CECA2BE5919D0E63BA75850596A3CB916D9 -55F856AD3075D5C57686E65AA912F0A6E9E4A778522A630D9D9AD3732629ED47 -BE694C35221FDAC7E8CF5C381CEE23E29AA749B52E68D1CC2554EBF31BDB5CE1 -FBE58C5935D06F09B46B96B94CEBC92981474F77036F0EC33C2149E6D945F147 -44CE2B86399056014CED967E976EE7DCDB4AFA12F1EE4D486549C14FE1052324 -ED70C3A6955BF8CDCDC7EB01499126F0C303E64B4370E83D5687E957DBD1B374 -7600EE0E0DE2C57B37CAE46734FEEC0A2F3863CDEEC17265F1EE104BB143442F -35329A81ABA8D5F1B7F8CAC158E4DBEFAE91C2BFD05389F048B3BCCF5B0F66D2 -4A40EAAA1E7D913DEC4A44A9A382F53EB1EE3966EA18BEB5EBD24C203B95476A -0E0C8568E08C357FF880600C27BCDA5623C8034CA1EA2AE24701DC7F1ADD2302 -100F16EFA05F39A2DB15D091F103259FC3C4CCAE4A858B7F72309ABE6CA45067 -EF46BB3C4738E048C884293EA5882A2E6E3B3B3C100B5FA02EC334DE2B68F4DC -2CD866AB8F83BB0DCAE954BCFF8EE7C3D1CF90CC51B295D02F1130F09B62CD05 -AB930D97F9875B9E65106C4A8719DA2C75A332C038E46F7E82BE4F69DAA8715A -1046DCBAD2DB3086A1CE04C8904988F7A2C9891B3C2BAC759B20CFD5BC8FCDD1 -03FBD0AEA3CF53E7B1896BF003AAD60870BC9AD50F6D257AEE013DC166B0B448 -D56900DA44885BE5FB7F3273C15DFEEDA5D6E895773F4435C3F2A684987FF31C -4DD09CB3B2CB9369704CE85FA266676C25FC30B98D74451CFA0A3C0E99ED6CA9 -D31D34A3566A5BA3EFCA62168217429089E61A231506779BC845BBBF085085D8 -BEBAC6370E595188B74C1CC2D9D15CCFF9220BFA63A2D002E7D7F2F711837671 -64E44FFC9B07E092C2C3BA99354F163FB87655EC865C3B2DF852031A3930A148 -9A1D29BF24604E2E635C9ADB770A13288A488F4FB237FB1CAB2524F7D33DE2C3 -F2C5BCF05F7C438B28296F842E86F8BB4881A3B4F89B4352AD50133E79A70154 -7DE8C607A98C696EE1D254EF8E5BE67ECBB7C1220C5FE367EE2DE9D8AC7B01ED -47AEE18CAD10A639B038972587B10BEF449E7DB2C97F4D97FF55099893616BEF -4DD08E57DD9262ADA201C5034CC56D9D34B34E2E1B6DCB02F3971302060EEF2A -D942D62C270090BE5E74572C751A0A6FA081A6DA4430A4A069499A2ECD39FEF0 -AE78E58ED3A64527A70D5F8801EEC47BAE1ACF720369443A0B3D7AB4543C6830 -098F2E44D895F737B26D090F9706D9ECE37CE444F652A5CA5522B0F836201376 -89A28AB47A1291A96EA418DED49A829E62ECE80A311BDF5D1DCF070D38D9C9C6 -AF40F5D93824E089A7B95E4E4DAA830860F2F9A1E3BBA08E539CA4B54EF6E2D3 -DF247E11690FB99A7784D7105F0B4EE1509D657497BD054FCD0EBF0A9D3B5C39 -6E087FC344F636C26158F742D14A363E2130C0EA0DF4E0DB891ED797B63A42D9 -1FBAEF469B0C79081D2C0031E09A3776F862AB8BCBE8E80FC837AF15661324A2 -7C4CDEAC92310EF54B9A24E44B04B5D265808B3B5639018397EBE66F21829F06 -7D0E6BE0DE08E5961848E93669D607F60C25725B7EE8FA83011A5543EA5CE260 -A4 -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l048036t.pfa b/client/nfsexport/lib/fonts/l048036t.pfa deleted file mode 100755 index 4ec846a8..00000000 --- a/client/nfsexport/lib/fonts/l048036t.pfa +++ /dev/null @@ -1,1260 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiSans-BoldOblique 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Sans Bold Oblique) readonly def -/FamilyName (Luxi Sans) readonly def -/Weight (Bold) readonly def -/ItalicAngle -11.3 def -/isFixedPitch false def -/UnderlinePosition -39 def -/UnderlineThickness 78 def -end readonly def -/FontName /LuxiSans-BoldOblique def -/PaintType 0 def -/WMode 0 def -/FontBBox {-228 -211 1098 1012} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078990 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D9E671B3988AF5066E3F90 -863D5BB633FB30AE28A6ECF53B5A2F518BA91BAF2EE70FE3F56243BB3F4C04A2 -FC016CC374C654204EC90A7BF559178EE8015AF532372CE4B4B82E2469BD5401 -63B4CC74D7623862E31F62F9CAD70643A7C39877265EAC7B5D71744C4F83BC05 -E893365C941FD0FE135013335FA2213B42226D6B522A41C5A6C11780D38E624A -F8BB54EE866274FBE41FF83840EFDAEB7227809D506507E8322CC5B16FCD97E9 -C441FCD253585347C705C556A3897EE543648265232A49B9D545B6F618870554 -03227116B9F656C288F9C0E3CADE4544BD1E749D80072FC0D0163DB84A4245D0 -41460C3566BDE66E29E0AB39F280C2F229583228198C7BDFD5C07F110E0D5CC1 -BAC768138F8DC9F0974EC7C2BB9F5DC97B5950A1A4E33F2B20061B22196C7FE8 -C82856D93A079270700B11CB7A6396A4E3FE6FC04D6AD49FF13D1A2E1FF8B07D -FC49258896C83AAECC29610440D2BA2C0D19A4E8AE287DC0B8DA956F2B4F5607 -A04F0E366F0A57561CE1E06CF7F3A70E300CBB077F9C918B099FD178493939CA -0D25A808F335DBF82A11AF2D6B2EC8E4456B60DA9F5B713568A34E66F4640C81 -69F5023C211D301FE810A6B6AEC197CEE2B0FFB4CE02B119CAFC5449D8F12416 -989A5A22633105A9750581969100BB65CFB052B5A3FA20A0B4F61A4B497487D5 -BE89F7D45E1A93BB28C6778B39FF708CD041FFFB50B640C93DBF1EFB2FBEF63E -9292124E702138A914432C50435D796B22106A34C1BC3EE1EDF873F60367C580 -7A5D98032EEDED53BAEFEB69414B714E9EFEFF2B1FBA659081577F87DB8BF212 -4C0E77A8605C1C1FE19483320AE88A041EC9B95D10E89CE673E4BDA638184422 -742F4CEF3086B62F5873A1A3F8263EFBA4CEFFDA958521274263467B9C485EE5 -7D8AA17A8C364F517203A2D9A66CB18201897A6223F5EE5F7ACFC3009B39005F -61095364ECA6DDE4113D8C39DA710A4716E179812E79E9B01C3D7B00ED2DC574 -63AE485A2AEA55611672E1AC489C6D09EA559B9E8DAE17DCDA80FD287DB8D742 -D4DCFA54ED2EF42A988D72A491A4FCB9BCD2AD4F225E23932C2779C3B008AFC3 -4D2B158EB9697B6598672BD99C91405B5CF668F3A4F21347549C1150B0FD3EE9 -6EBFFA6F54F44DDD229818D109E7FFFA337D80C83852B12597686E29A0B855D7 -D548EEB2FD8AC5585F458D60F8A18F33CF5CDB9B45FB4A8F61732FC5A2EE6F4C -25C2B903EAFB4A0056764C4FAE4278535DEBF80DB8A9B5C8C471A62755CEB38A -A05D0FC10C4136AAB774FEE2C6CD57CFFB88D9266696C390919F94BE439677E2 -E8AEED7B8B4BC2E422F6C9CD1711B496E57D31637BC0CD4D6001D0E38F54402D -1D6B7ECAF0F454219AD6CBFB857D7165D1217B7F5315DE5EF333AADAC59C0CD8 -290FE129D720FE11B2A16ADF49FD140902FB8D8D33FAD0EF0A79AB30319A9048 -F7C2A38D5E9333A5F0F20D12A73EBAABDCE13D9B38CFBBE20408959E1F506784 -761CB0A7C72A220EEEA74FEDF0158F7F36EFBF9DC5D83AB22C8756F42627A51A -03C6590FEC9DB77B790A5672158CB32C9ED1980C4CB369839DE47BD57CB4183C -EF55A34C70996A7E00740D236550AAC8CC6471BD00D8E3F5BE3727A9029F60AC -8B0C06076ECA4D854E4A1372610EF8FA0FF97D3E637CC8580098961C24735991 -349C2958B4E7C4F67625859390B9567ADCBFB334DC7FF5AB1C0462DBE72CA093 -0D7F43CC5230E57824ABF7857EB2F856841013C9E06D0DF4BC9171A75AFDA802 -4491D89CD7D2D65515CABC474AA8B9BB1177A502E4B94302E1E40D6C8FA974DF -C6496A7C1DC202A79E79FF0D9983E48F8F66415610F0174C5C555DAD5EEEB9E3 -FB5EAE5F9B5307ED89700DB98C7031DAC8F371CEF716BBAB2DE3DA113E69EB18 -EAC7A1756A0340248142E95538BFC1AE4814585AE16E397C3D34736738CA5A26 -6E761DC0F59CC2C3DDC7AE6E801DED28695E7DE6FE9CD1E29FE636391ED78E0F -C450839D27A01CAAF1A56073473A4347098007601698AA2872EBA4F2F32CE6E6 -3A9EACBDC28AF4E8DCBFD8A0ED978058FC9E7FC2A676500E19337917EB0FB8FC -3C37E3903185C96C4225436A42C5495DDD49A9D072D1FFBCB9C2CF51739AA6EE -CC537EC85C9F316B9721F9806F214EA9D10C35645C0A05CC242E668C9B60C2AB -DBF148A8A1E8BB212A272FDD180480BED9988C9AA3C99342EEB70D7EF76C5282 -3D10C8C811418DDF1516660CBEF817DCE1BA41EA0AC8356B1573B9F0272472DB -2112A2D6AD1371128E62FD35068068713F82E2FDDB721C253A378E284175FE68 -8F77FD876230F131878D76D91B43001821A4DAEC5A6C30742864B2F0A1E6B434 -80FB5A969A3C3D6471529E0E1972EBF27FAFA811808D374C5157D8A90F04A4EF -34DF27414E217FF7DEAC000537131429842625464D0FF55BBE51B7048B964D57 -DA20A4F579C86D81B3186CF6C503037C83CDF97349E575F24BDAF5C2B16290D5 -805E88F22B22C59249E9F8CCA25DDC665C2BD937CC6C957442626EF81BFD7640 -78990E9071638880C0AECFEFE1DBC5D86EEBE3E8C181C3DAB690EFECD7C291B3 -882F31F29C281C21DC1C5EBF2975364992B3996E5393CB54C4E4A07EBC183617 -DE1739F62531F36C19404E395389B85C893F5F8BF72AA7CEB5BFF1603C144D69 -25D14B3D1C4565E72E0E64282C5398BB07F45EE86FD19A2C20792F06CB6106A6 -C4EBE8289ACA36D30B57F62A11F90CA64F25A15ED9A187D255E532490F74A885 -9DC77B2D12EF1CB9D5CA120B45A7C05A7945F83F764F5620CB01BFB6C1B68AA3 -FF860DB0A9A811A6D2D6862355A95DC11CA108037E03BFCD8D527A3985546876 -F38487881D7575298C274CFDACF1D190103A9906B08D6415E14857594CC90BDE -9643A556543EABD0412C8BF1974F4A19BC80F638158D5CAB73657BD7395840EA -458E7345E25BF1EEEEBD4CE7687934B5BA62D34E5102E033A9EFE75CCE2EC089 -E62093489C4D0F18F6ED577700D5D2C9A74561848322BDB46828E39618A39D32 -F13F6CB6E9E5CF8F004D6D37C02FCCFE227D75ECD3E4BB1C50440858A3CDA4D3 -66BADC120B31CA9CA8A42FA9853309A1AB649E61F45351E2946D9808BDC97875 -6F08E8C2931B4740800142CD15A25DFFDE8B2EDDB21FEA1F251ED643F08D744F -F7DC5E26064B6A16FB4F5872BE9544E8CEAD0DEF9C52B1E16C7FCFA64CAD2B9E -5AFCE93DD0F8B460BEEAEF3BDCF5660D99A6C9DF1138BC0DF400084540991574 -6F59E90316FF7A74B5979828FB02465D96354BA5757347FA0F92D41C5659196A -FF6E24F615039D949E6FD374243708910E145CE8E2A2461F5A30A5BAE30D5445 -7C10BAC56E08289FB57C1D4C9C7A87CA8D24FE421D4189540B6CE0190281BA4C -9F3CCC4C095B86F076BDF504F24E9B422DB680624D2E452734D17F0416586D80 -B3BAA3C782475811191B857C19D1C4C5192B33997E1368786F9A8D3A3500F7AD -988FAC17371E2A74B1FEC5CC55F9E64649D01230A83D28FE63D1175297818C48 -29697A12F925F189D1A162AD1A71FA29D1706F047540BB4730AFABCB6D3BCED3 -4EC3B8C028AF3E09A9D30AE9BC82D8031D8E00FBC591B1101253809C7A733B37 -4C39CD97E0EB92C5DE19499051EF9FEEDEEA7621C0CE69DE520587D990024BBE -87D6E8E5D59E66502FB01BB368CD92FEF24A618C1A987A898AA3D23CC543D7AF -49C8D30AAE8B9434E491D98E8D4D68DC8D6B741FF66B9AE193AA685864D542BF -3BD2C156D7050190A4D4535D5B840587EAA6AA058317CCB77D0471D83D1D2724 -3FC905BD7F771D0F6D8C3A1D8CDBBA2461A709C004F2953668FC3D0F4B13FE33 -A9AEEC634A3F9A0850D03BA733F6DB834DCE4228883308EC70CD5EE550E51EAC -3D35A3AAF9340E2624683083F75EE493318188E58286F1A4B879C92569DC7960 -538921AD7C6B3C89F4D6C28F650C7C86688FAFA81FF4635EA3EDD855C3CF4DE1 -FE6C8D145BF56105E416F5F9064C4129A0277251A46A054E38E6ECEB327ED45E -1BD5D272182A1CD8A8D0EF92EB46C55AC149D29A4B7000A7ABCEC1EDADFBE735 -213E93C0C251917221DD8926F3BFC5CC9493941B41787936FA077F706E8C48C7 -2430D26CECF90F6086361E3B09D2131963EC4A29FEBEDCDDFE69D56AD538D258 -C3CA85AB0E7CF62E5147038FBED9F0F834940D5DBA99D2E2DC2158BC1898BB3C -57912686C5BC36A015228460F7F1A0BC47BAEBE092D69CA9848E389398997613 -5B5F1F5492A02E35585864CE24860C1647113B53203BE4702C4B09EA377C64C0 -2645A1C416E4551FC9FFD6BAF2427DA4D4853E4B2F9B59E4163FA3D5CF4B1831 -6C51A54BF8040D96BF17EF31A6C832D55AA3E61DCAE57F91DB30BC95A30F8251 -4919068E31C8A678D8FA6423911FF90F48F3225EB2E7CB6A58DDB1DD58AD1272 -6C69DDB5F50DE8718E58126289F883494343DBD4A215FDE54548464E8A6051F5 -6C3DA917300AE09ABA0EF4A4F079A63E1F15030EA41B1EE8EFE18D98D4A88912 -7A790989F9B20E68A81A49CAAC1CD91CFB9401F60C9DFF87F2ED944006432CBC -2CFC078CB5809573CF15721E20D85EA27541FAA4949BC8FA6708810DC205FA64 -28B84176BA868FE351B87361F8832D742A5FC3BE6B0557AA3EA5788239D1FDDB -0EFC4CEBD4D736054C77CAFD5B1453B65FEEDF7FD01311C2C582B6B97EA70687 -8E287CC3A451A190DAE2CDE4708400A48D6F7BE00704CB3F9AE8BD7B4B04A2CE -3C3B8E6D34E3C3C9263122E10F32656166B2BBCB1EDAECD6500C4CA655ED6B8F -037DFD3485443D4B789F3B591B350B9F411FCA0617CA75EA728D0BA4313FBCC6 -B845ECC9E23E497F1F955A15795F01E4A6BB8AE113B2F64DCBD2C7A0F87EFFC8 -994F130004DCC8F2503B56BD9A773C920D3D5A5CD0FAC00763E4E17683455C90 -FA36D8B76DF144C8BA7D2EBBA2E4D5751E7B4E2C675E37714A3ADBB0F17CBEBF -518E3B60DFEFF14230B2FC48080803B9D05B13023B2BEF22311E91C8181355B8 -CA3C3680786B74FD8CE374CFA68A19E7AF2CB998E329A7219859AD23390668A7 -3C833BFA931829782F61C50E2F91A0B9D8EFBD8A6B2C024D5E8E10A4485F922F -06CAF23E970215328465A347A9E283511B92A442D9CBC7B221990D4F679B04AF -112B05FCC1C323CC94A73BB4267655DC61D2E57A0A013DF17D61D3E565AC7732 -23BC046BF8B812CF67AF115A80C8BEEB632B9E87BA2BB8FEE8251B9A4B4971AD -B4982DA27005E24C78E5470F5664BC1F2F48E7D46F660E543BC2C985D2F2B5D1 -8D9C43B976478634A91027F47A5E6F5F89AECBB1C455225528E6A76D4E5E0333 -56C7DBE3A520C8194C27AA32C34AB0AC3F5326EFDC65CAB8F7A63100D0AB11E5 -F3ECFEEC5D9E39760F0B5B3F227B5675F6B782DC03AECDC1C94C16B4CDC1A1A8 -F4341DBC38524D47306D254B37B7CC7CF4E8A2006B7CF3E97B38012CBD63706D -2BA7F279218EF039D9F2F1B1E1A59FEA6DB6EC02DF73061D2CB3C179B3BBFD4E -2CC03CC26F4A4136EEE04F991CEB916FF87E1636740D020721257121F938E0CA -33C265E3C1250D7E62ABF64DE8B4E38D871CB891AB19013334E5D91A744C9EAF -AF9510DFBCC3D2FFE910C4717549E818056DF04A965140B505BDC08AF8A15F4A -4DF3EFF98A4F1FA538B1F121166A5C250029861ACB23F8C619481982F6A6A5B3 -F789B519D504B8D94965217BFFD62719F7E8B8A8A51C6637DE5CBE7A2FF5554B -3D08019194EA5C2BC5CEBDC53ADDEEDA4CE45BFFB9F16A92EFD9C8B224549AF0 -E77131EEAF05BC082EAED8CB6D9DA2A3746510F00F396E66A90C7DD34770F4A3 -A570BB3805F4CECE06731A46151DDD1971731049F57ABF174C5766CFABB72356 -50F03E186424F00A0DD7158429158487223DEB5BFEE53B4990E9DB0E26BEB6E7 -EEEC6CA0A6EE8A8AB949768B21410467A8ADC90E30DA2D8D0E8834B30CD25CD5 -210825E6AFFF42827C99A7E89FD9ED7D11F1795392BBD337320E4075855C5B37 -BEA02800C4F9D24B95E43CDFA3B4B25EF8BF41850C0A0FA8967F94F75627B6EB -FE9751B0A9F14A4454104ACE3ECBC77F62397C7DD731C0D0D754F5D8975A2FAC -2CC33806A516E9FD1DAE386456AD8C5D6D84FAFB2DC08710E285D8BC25FD0BC0 -CE84C436045C9DD14C34768D04D17D62A1CD97BA0DE0622AA0F01979B2FB83D5 -0814DA03FC088A4849EF6F85452629634B0BE5B306BA56DA0D95E8C120DAF5F9 -C880729E8971E16729996CEFC60E980B4BC0F734C1DB840ADE2C735E97CAD49E -CCD3FB38A9764688A52FA164C08C0B9B614771B51AA4E6C95622562ECA3FDCD1 -1C1EC3B74515E9B5303433551B82CD1DAE2FD07DFCB96884BA912A1CA6253747 -28E81A26E46B3169B461943AE9273307E1234636DECE2E32F18CDDB4579C90F3 -48E64E999FC86B7361B8DBC95EB4D1B4B127EB81AEF5B86361FA83085F8F2618 -6AEDEB2345E69557E992535F7B26842B02FEFBC4994E6BE410137AD8CCFCC8AD -76599D96338CC250F9AAE458B6A274EABCBA497DF7ABA3FD0C21DCF14EDC1613 -A0471FA5A3436E83323CD33074ED47C21EFA96B2035DED6D0D012B6306E4DE0B -3CDA126ADCF1F6BA4C2B814A658668B44BFE5C0CA3355D738459FB7ABFDBB0F8 -786B00E61CF93ACF31B60707D674A1A0285AED6E4D640FF94A0B0B02AAF27F13 -5CFB88D3C5E5499A13AA520F4A7889331CA9B35A5D2958683E872AF2E51C1BE1 -7A7DE58700B791FB8FFA6E0F249681FBD10BB62BBF56B6A8B788171F0C72BDD8 -E55CADFA6E7C913BF5644CC759B59609756DBE4BADE6115B6E42A4E15A5D764C -AF80ECFC52EB05FA03D4A87B9E6961F54491FBC6E4573C7A4B960BA6DB2EEDC5 -22742279DBE770E15ED5703D20EEC6E56A61C05D508A64C2DEA63289A8DB4225 -05E16B7D9B915FA7D94CB28426EF0EA683C543D173B22CA22E174A4B3EB88C1F -AE3E3056F4A3173AED92601CE514C957C7E5277070A72169E9A58911678F9EC1 -3F39BB3E1EAD8390126F8587CDB7F8A2FE06B06732EB9FDF9625ADAACEA23A04 -36DC51D828A5FCB1F910DBFC74E1D2B56FD88EDD58B9F2EB0504A2F800FF3CB7 -502C05AEF78B333E4EC076541335C1E3EC95AC70943127B5632954FE3E0F9694 -9147B51E0D75976878FCC4AEEC2661CA4B19BE4F93B07BB7CF0E835FF18FF48F -137AB9AF59CFE1C925CB0D548CEB2FEE5F5B7F25C730E9FF2D757391D1310E4F -EBF025DEFF64DD04D9A06D4B5B84F915CA4810499D3B8F2E3065E5079126C181 -BAAA287430C555E330B53D21FC9C08C1D1822522076A247EC3C322D163FF492C -39D0BBA3DD100EE943FB6E94E4C9686DD0025A04535538D816ED742D70BECF10 -0D6105BEA237207209BD25F7DE0A713B770CD0DCC988952F847BD8816E91CA83 -0BCBA7A48E9925ACC4AD0B1D1C03247DC912BE14909BC7961267BF4DA4DAF6D8 -01A1AAC313F6977BCF8232199DDF4243829130679FEF1431BD6C7BFCF2BCBAA6 -08F6F0D9A4AD5D04C9109CB5AE6013648394C6EB83ECE2E39D46759AFF128924 -004DA587F7A3D6C7EF7A7BDCDD0E1777A0265B1B4954A1F691BC61E2C008CE39 -F4AC7EF840CBE9FFF366A71A1940BC4D7A9AF68000485C49DB2DB1FC400FA036 -71C490F52C175C1315297D147784383759FC1A0029200E7C6BE31462D6D6BBC8 -3F5F67ABF810D460D157E94DB0C1D7965DA58683759800211657E3ED552C586D -4405243E51052A55135B4DE1F10248ED310193E316E18713372DB893ED164232 -85193FF7C88FC96E091B565BEC36CD6A757B6FBA76B54AE14C2EF6B65ECD8420 -3D5BEFDBE6A4F71E52506FC18BA2C02F8AF58DDB285F1677DED6F10A93836A2D -0BD821A5AB069A85D4338FC007AEC8B21FA8CE6792BCB01727990280A57183F3 -6E74CA7520341E95BA611F600D5056CFBBA755B302DA747B08208D21DAF7B7B3 -F2BDC1FA0EB5A05A917FD9E0834F0DA72A9D3AA2AB0A074752737C7A5A6A5312 -CB40DA86B9BC2258EA09B5F6DCF4CB791963D4570D4E89F4CDF0BCE26ECC79A9 -444447D97B32C2C06F48A963135AC0EB1B1D0888BBD1625C11CD4A9F40C1D27C -E6993E6992E1B21CD0FEFC40BFC47AF469563AC79BD433E6FC0419E3564CD4C2 -E3715ED41E6166696E4CC4FF0C89F60E88691AEF06E800DA26151216C0FDDEF9 -F04F5919E3FCD1972F6383A60AE0A56ACDFA018988E01AF9D8AE9A8EE4B401C0 -1867B3CBA3D9E7EA775BBAEFB8FCC0C22F904421B20B640D165747E180C15437 -92F54D2EE73C22A689BD11E70B5A964C1C7DE8BD98C063C9D1348871F5801694 -06844033834CB512388D1CF765AC08824629B541F84E20AD3C5161A3C232CFD6 -07AAA25A6B71B17D0209EBAE3662041FEA4F315A8F8294A4036FE161CED4707B -32D2B2BA3848FB1BD93C6C420F53DD1BA44DF7BEC87659CEF2FEC38BEBBFAE92 -392D2B0671FA00AAA30F06602415C8D67E5252E04E91DF5F62B615E71A46A514 -FD2C5B43DE43DF612C36248B8D27E2D7D390FEA0C56A396F591307CC5BF972D5 -E9D7AA5D65332F178F311A8E08E4911813E3D201B3FF4132C83EF21B5EE08864 -3711EEB51C401B8AF91220AC05FD576D8A1EE80C3891A8AA792699FF784C0953 -94C4E33B8D02D81E2F5E85AA049A89141CCE1140A9CFA4C78153531B1C004549 -8D9DFFD86A271DAF08B85F942D93037BF741258CA94DF4296AED020B131AD485 -DEF39C8DF7451F81ABD667E103E9FAE7F4AAC9D567192AAE7E8EBAE2E46087F0 -A83E7F096FD436AC87978A596AFE55CC09A0C329FAB21A53492A1C23B6ADBED1 -D369010199BFFB00FC6554DF5568F04460311FFDC67DCAECE1E8CA5710B0E8BA -315DFB8C6276B8FB9CB9C14D42A2CF94CD54909E8873FE58D18C274EFFC29D09 -F744357EEE5E12C5A32AD69098A1BE95C6C3713C62A7F86C1874CD274589AC11 -40545D2DA1BF3450680DB402512098A4FD147D47D11D3E9157570586733D24F6 -CDCB0762FB61B16EE2C85564DA2B9A089CE4F12DBCABCF8DF177AF3B1A6F1EED -D9DF8509AA1DE596EAC9AAA062AF4E52BF05E243C9536086565B71E3D9E78CC6 -430105D74B754836513CC837E26AF3423701EA7D6E816FC7E796B56522622D68 -D750972A781FC96854CB962B069377D094C861736699ECD6ACC998C1572775B6 -00E3EF63719E34D4950D1D674548248B7693866A4738F837EE8EBA89B085AD8A -78E2F223F7872AAAB987008CEEFE8A8DC2A6F6C379569696D4B2FE9B174F3BF0 -27D331E30B15762F52F343F1CF85B237838A5AF84AF9BDB7611EE38675D76AB4 -AAE4FA7FBD5CE49A47F5F52F42702905B1B5E3C754EC74DF3F7757E7DBC56742 -318745C387EEF697D14E8013C25763DA1A160A63482F8462F806614957E0A5BB -B32FCCDB28FF2C7C93EECEF415CBEB80B1C0A8DCFF21F6702ACA217E81294879 -AC7E90D9460A39F58D255AEFBC5EC674277B7971B7D272C1F8C1C10AD7B27F55 -90EEDD1F14087D002719742D7CA335853E8641B8AE1FAC60415B83E3160E3A68 -C5B2F117B4503AFEC26D8BCC0EE50750781175FD616AD7A4DDBFE60666F8FDC4 -44BD2FC4C5EC34D1259B578EC11EF75944D0E1A531BFEAF7898965F28306C015 -6D572FD61B31F35904CC6FCD85A598DE1BD812DBCE737DC93FD91079341FF963 -4432EBE341D447F08FBCAFB5C7389833FBA0F47E716E6790DFA1F486CCEABC78 -FAF007EB9686B0C16990AD09DC205662F51BE300E51273C543FB072EF77357F4 -F5AECD3FDB8ED5F316099B380B0335CADD78193F60C7FE5CA9C6695D887E4E89 -123426A47988C2B5F3460CB005C9E139C59E2D377F6F1760911A8FC2E1325B63 -C023F62AE8D2D3AC3474CD637403D341C50A3E380EDFA78FA0C0679DD04F69F1 -3D5F0C33F19D1E670D377652EF5D35F1568D2F3769214B3053005ADAB1C73FFD -EE789CD271A8D8BB800DC4A2460F4F681F3F1735F456D8B9C4B62780D2A9F372 -665352E8D7EC353E7D81A6E29ECAC96F50700D8F1E618918ADEB06337154845C -C1B7EAF769D54A3858D8E4F81C7B201F4E8BB74751B8EE4304BEBD849511368A -D405ED3942A7CAC3E61B49EC8D32E9364BFC20A8072564D427E3892165F7B0C5 -9785EDAC494D590658F226E84B638154DA935AD664B9DDAE7C8344A157C36A57 -5752AD98198DFD97D942C38CC5716A1864270085533519FDE9C7088C7FF9E0B4 -E1511BB6291BA896F40E69E2AB7EEB740778442D57E4DF5D17E7C0F6BEB99666 -4695C52D1A884284177EA3EA6AE6F061542B21C2D3C87714EF5FCD5402E22220 -709E610804FDDFC7C9231D7E85F70CB274F42A6B0D2038613D7649C74BFCB997 -10D96D7E1C26F7E0D58CA6B79C7F709E8893FDF9765F4C53B8A13F28EEC8929C -55164D25AE26C7B978103A593E17E49557CA642F72F529A5504C6381060C3EE2 -181E1ABEBB12B5148649F461C7643E1243A44C8D02711888A8726AC744140B59 -7CE5BE248EA280D802F0F6B7955CB1D4D0FB36CF8960BF0A718B91FD2D357DDB -484739DD257C26E01C539C5BACBD92A8D6C97B56EA6DF85B1E4E384295BC5A82 -4178CC59DCE00C6C75139FF17EF33E4654F806D81698E2C35870EDC52AC05827 -7476C4ECE666C134CF2231EB498555248B1DAB1C4654E4EE3B5455D2C472B36C -958BE6B0D1CC3C87EF568D4D2060C0FBC17DB3B8495660A47423ABA7179EB6C8 -7C746071C267A20E51E231A127874CA2517826A6A980CB51068BC30B7B3937BB -61940B7F361C06644C1B2472EE1C836F9F9B8A4E33ED8CE8ECEE0F5E09AE4CDA -088A34153CC840BC895D6D947A57B76A9A6C8F81339CC12682D4CDD18989F936 -3D00BB0BE992C50DBF82BCF62926ECC17FC680808C5E802258FB9EEDAF8287B8 -6788B4D3C3CA5F3CA6ED288A30902F3304A28F40B92A5A6F987BF98F777FEF94 -CC8AD2F86D76A7475348AD3D07CA6CE80FDB458DD8235B852B90950DE333A444 -0B00C47921B1E201D7033832ABE2ACA0495D0FFD3B22488552F43C8A423428A4 -021471B6109144E03B6FF5148B699DE67FDDE6FA25225C6806650754F82BD446 -40CC9FD2D90E8812A6E08CC935126C8612C71F4CAE97ADC75FD58115E212CD59 -6614F53AAA30D9C8A7DE2A6EA32395EDD26713BF8B6086225970D8B4EEAF71B1 -D3B6150B945878F806BFAC36C33B2344C5233F7C35B8D1264EA12DC081914E60 -78CD9F6AB21585D3297452BA7EA1CA2BCF3F39AB49ECCF8BBAA1A22883C161E2 -699D3A46B51E75E3D80A22ADCF6984B6B67BD11FF7E05C46E0516B434792FBDC -A88DE35EE688D35ABEC1B8945A9A3806C1C214D80D0B60DC31496898B73E46B4 -8EEB7B9D2C3A8829E041663AA48E7378DB18079F4D76863FB08405EE7B8F3D9C -328314A3DDB55BA7C28D4ECC2A4E23A701B88A80D82AA2BD4824FD90F47AA702 -014753CB1E8B020F9A3CFE47F6BFF747D257F48F3507494ADED3BF179FAC674E -2A372DEC39D0DD73AE3F932BC5513947A51671365CB6032F86BF3D3D0F1E8CBC -145782A2D8B27FFE77AC5E07493BF2C423A56A37FEAD71559A149637F8054AB1 -5F76AB661DD116FC5C55ACEC633447343E30C555E0042739B9629D712CBC22ED -1B725451BC0217964F3482250C473C77286326EFF965406FBFDA478FF4E3F4E7 -A53CBEE24C1BB2AB8A79D88BD7BA1A7B86C3650D2D5C7F23119719586BC11C6A -04C0B90489CC46FFBB2C6F6E8993DBBAFF62F63F79EA27C6D2B1FA55AFEAEEC9 -705C0A22B7E0E94CF9306452A854EEB6FB0032E442B5B3A16364BB3ECAE00E77 -2B845CAAB5966A5E78BE8C5440063CA3BC84A4B0A07BE880012DDA7FACE5482C -0DE438ED79516FF924EB0713A68124524D74730A6318E359B27CFAD218DDD03E -5EC4EE23FB7F94D4C88367F6299372BE29B5A4059D1F00C0C2433F79DE287A3E -60A5F5B1C812F1E12809A07F9623ACC0C0DEE78F0981FF701AB187FAC2004BFB -73B0926EC097237B301C311B478FFA455B8B1C1129FD2E4A62D43D2F79BB693F -1E88E5DBD5705480519B874F502197C2CC30D8E716A5DAB4EC24298E7DEBEA5F -095EB5BB78B4D7847B9C25F2D462C86A5033B7EAA136BE3B3993F479B76393FF -757CDC548E9093D916A40045AAB54413B0563FD905451E2D0BD7815FD377E00C -7DBDBCC6476AA2C82C52DFD027134D8154734342BEFE176CE8AC20CB16C173BE -776D5089A4C080D07196A06AE34496F04C5B3945BA8403B2B408EE150BC0269F -CE8A1C1CBDCD996D75705F6CFE6D487025D924208E6304791CBEAA62DF66C80A -9557DF93ADABE4ACDDA1C18DAC4476491A84F8C8D8932E6C02FC22B7ABDC397E -AC155EBDC6F8DBFC3A2064E99252D3122685753C3BB839EC743D7CDF9428CE6D -0DC0CB52F218CF1D9C8412DA2CCF13677FB55F9963BA89A47357DA9957306F70 -59685DAE5D0A70D180949B206D8502489F82D89AD159B969ABFCD08A746B8ACA -538FE5E148F151034B6A69F604AB09431787DD29C6D4414FCF3C4D04090F17C5 -0BB65452A3EBC75DE088201997025F808360A7DCE5C74F04617E9BFE06072F7C -D3EAA6FAF4F5CABF9D87B851CA785CE5A675AE5DAE55C996D5CEB5F760051237 -F47CEDF612D326DF900C771FEF1AB9CF00C5B29558FE329E88C62FDAA94EA598 -FDFB4A27216007C73B14FB5FCD9AF42F39C0879080463A9EFD11614105469C73 -F38A92C4AB2290459238BD513895FD11B0234A17B303A1F55617EADCB41B7501 -0FABA82CE8A8C5E98308B5B655DBD6A63CDB44B3034A2E20BD44947FA1F52217 -01B16A2E6CFD35527363C5981CDECB886331092AE9DBB2403126BA0EA79C7356 -7AD019A16D9957B2617B5F4F9B7F82E75A718BFAE6EA4BE7D8561361DB470A9F -82E7828B10C718536D6DA7155FCC1FDCCC2692BF147027F9DB207E981EBE36C5 -EDFC37B83290541EAF2514891728F4D3D17730396614874BEEA92FC26D1DD076 -0142E42962897F27700D4F34A946571D2AA7F5E9BBED708A9E1D0BB2F9FE0823 -A6D026E3C9D4D92320570B87D428F98BD20A395BD06B600B34E274A9FB42B0BA -4430B56E5DED6D014DD78EE54522C25429E5F6FBEABD61CDADC297ED24758E2D -85021DD2E900864CCA07616BEE37C74B379C279F554C4A20C195176787EAAE66 -1466F8126083FBAACF3E774843202587C09AAA172DFB89E26761A7398E9A9997 -256301DDB5ACF882349D99539BA40C38CD3E69464B76B5839EDA48508A3D7246 -FFA59703562647B680288D2944AA440599D0B9BCBF2E1261F3AD23100219B1CF -3A1FBB617606892DFA5DE1D7C221C4A6C8608566B92C67C3044CCE7FFCBAE2F4 -100445E92F506306C2553EF320325562284B579353168624EDE9FB921A759BFF -29F65445AEA413844E4C9E7448E47E7AC8E934D993EF1DCBD153537282E28104 -DFE7BF8601A2F1544FA971B9FDA521F228BFC95495CF5BB48E4DB9828F64769D -1C7AA777D2F1B79E054C1E6A03D3D27CDAE3594D6F37F8F03572778058A6FE9C -E8E9AE758B7D204A02B5CD228029C1909656F1A784A3120555C2705370C80B6D -6F0F9A0DA15870FC79D8C451FFC98D8BCA3AD6865ECD906B2D8B9AA6F62FD013 -9B7D59E9F9C84976AF2F142B953A76748C078A1B32566CB71C808B4EF5B0360B -60000145951DBA021F16E090FCC1137C613A5C488646FE8DB564D5686D49E0EA -152390D5AED15FA44C71C4A829E250CC5B3E2B708EAFECA4B324FAD72A5FA2D7 -CB9BCF155F04EB6EFEF4CD2E38A6D435E09178D26B9879DE75B7E366DC829DC1 -A7E25E4DBDCC29DF8AB10C7FC617481FFCEF59B60ECD35DBCA03CAE19A9804F1 -758EA342DA058363A1AB7210A73045411EB5EA0C97C64C7D89162861C549778A -F748232138F5BE892143DB15AFECBCC6E16646DDB26C7122D7FDC60D530EEFBF -32F9050BEAE6A683CC7702866FE1E6D543FA8866CBC92D25772C79E823F6BE83 -F1F4F52F8C851F7F92C1E81A3FFAD932BB8A35C263B535B3615DBE8ED8770B4D -84915C479D24345EBEE99B722DC5C169D04A908BCC3D0585BCB6C96DB29A469F -32689E30797076DC2B096E1C92C8012E3134BFB2CDC67E6C389B93018B42D727 -88FAB5CD6F4A4262F4F45D72346645B64A393EB960F6BF1A26CA2FEC965DD763 -1276D5168664E29A51BD7B8A10CB6F8EAADF55C9727DB220749073D3E1FA31EF -9F468511A80615D35F26A05FF01C183480D2AE7E729B9B04A39789730E5529D1 -180942E68402D7407419F2622574E55777A4DAEDB7CC9F6CB605AA428F28CA6F -C859BB79A649578095243268D594212EE8A80BBE4DB720EF6B3695F8A16516D5 -6B6DB2F9D93EB1598E06879AB08ADCAF0DD75C0BD31C9B8F44041415E6EE47BE -4421A95E6B80589BD4CBA6066C1092D76F97EBFB971E38B986762255DAFBF5DC -7F3A28A028DBAF10AE5D8210285FCAF35E22E68A42B3DD8281D41A657DA2DC3A -7107994D7E9FF61934E1F63186B9E28962AF5D783458A85A84A5EA3676AFD039 -F899DFF2319013F517A0D3F36EEE1C42DFA5B1C3B8E41A5BEFDEE21136F64A74 -0B2F3D8F2E64E4F106DB68C3FD4ABE346FD45B90DEC25D1B705EB119B08409FF -3769266F3A94B030B57BE670BE932ABD17800AD8115BC513329CF65557EB4E66 -788C2481A74AAE555DF0B8C1746FCE0349BCCFC76120274B4414F3E860295696 -7A94B5BBCA7F31D3DD01A59E2E2E188A323F1FA8E1B9EC45589B444FC7438731 -F4FDE301422B653FEE01C38E0B68DD30B1B7E2079EAA2332BEEC840AA36BC3E0 -8DF770114A53A01DA1F4F2BC6EECC92160E3EAEB18041E2FE43891778A89A23E -2FFE2A64DE61CC651CF2B1C44EE9677DEB492438756A31C9A3E89678959EAFE1 -B93A0A25B64712253BBE7259844D4988A574FB1219C96915A7BFAF654DAD6BE6 -B1A88AD6CF09027359A681FA82AE364D430AB261668897C5414511B9B31DC31F -FFBF69F5C1EDBC0187EC0C658770EA19697D92D1A35E1A98BF60F6CCFC3BCD51 -EE602EC8A919306705D61579F04CCCF587C6A5ED9B056FFA9FA84FF41AB30EA5 -28D5498ED5207B7244EE46C84FB5BABD2AA6B136559500CB5BA0FD4BAFE45AFE -9E0AD540712C7759078A5C257C1B542BE3DB37BF0CEFD0F18C336D5B4C5BA34C -9E09B8DA0E388BABD69F7D1573A86E1C52AC315719A5179E7D986430BD34CFC3 -6110822B15779B121E917FAAB2510F9F280AE0D24F25D7D6CE64DBE1241C3CC5 -D9E14F5A5B8E3B16957E642784246850E3644C6ECB7954B469C1CD954D0557A6 -6F04BCFBA452A34A6733543D8321405EA12C1658EFE72CD0D2BDB735053D38CB -C72446A5C57FBBA56345C1B00B4E0DC9BF4BD5403B1E1BD0A890A95316BBF90A -C683E7C352E2D61B24E84C477AE559D5BB86BAA35F235AD4F32D7A9C9FADD578 -E3FCCF6BED0F7DF1E412B8A923F7197DB936E27230DF61C370318052ACFF31AF -4709AA521D561A6F1B4C8C425F6638A138EEA6A8CC069559AA3E35C7448A1ADF -7445039449B49621781D2D5E969BBC78A0CE5FDC02A7E0A76828FAD14330416F -B79CD927968771EDC913E875C5D11C2F29CD9DE992F652DEE96685DBA857D0B6 -0A2F410B2B46D779B25BA538E0B0145ECA0B14BAD0927FC63ADBCF8EC10506F8 -282DB2D07172C19617F95235C7AF6E1253C8405F53839B54C55DFF7C46A16202 -BE0F0587471E8D83E8E91A3C9F3BBB82BFDA98811803945EC85607FFE3E94E6F -7E26CEE7A306E4C4409DCDD8DCEA89DD1F08EEA1F0EADDAC133DCB1931255F63 -5A22E592DBB0C8949ABAC62402CE17DC7A18AAF815C6C86BB341E7444F878817 -1590AC436E3CEAB3FB79BCDF5A12F2413A82579DE9E5E36E92B47E465CB3CED4 -554D1E308769F56B2C55CD8029696786C0652D7F042DD0DB7F24AED531753E9D -82F63CC50A1240F87EA74381D61D912C8711F6F6E9C0CD3A302D0F3687EBF024 -C97CC23D4E08514D6BE8394632BBA157A6606DBFFE884CB958E2F876525ABFC0 -F0370C5C9FAE209F10F91614475E9EE4972E95D8880F5714F0D414272F3AEEDB -EA181B2BB43631C15A68C0CAA12A8B9202722EAE1D0897657A1A8C57CCD0DD9B -F97C68EEAE1E098DB56203C994904A400D4750C150ACE554E7B45D4D22563D0D -8879046FD0D8DC9EA5893D5A58C85E81C6B2E13A89C55ED399EC11B5C1F80EA4 -53EC27FAE17E582B3EECF86CF73119A8972F00D946ED58931A10586B6B51D39F -72D17CC529105D5F8D74534C2CCFAE412A516CFD4CE923EE8072950A606224EB -229147A8FECFD224E4158BEA0DACDF53654232A1B946711DC8D20146B4CB7D23 -CE3F199B1E2698D626A28CBB039B073DFB33F29DD00B58875C28C700A985B0C2 -92656881336BF5DFBEBF01FDBBAF1D86EFD6F6ABED59FFF6F6790E94ECC70B88 -B0CFD30EB7D4677AD2E280A65CD9D95A35F7EB0263EF3231AF61A1E81F2D46E3 -D84C94044861630FD92006B7C0AE4667F0D23FAEE1285CC1B9D6541349015E38 -8D57858099E69487015AAA314120CF1D2C23BA28CFB15F11C12ED21EC42D3E73 -80AF786BF3958C30AFC42553C77EDEDF143B6F05BFADB6089FB93B9BAD0EBB87 -8ABEA058ED232D3F24C48359BEB73EFEAFC4DC43C6A1C4ABD12FFEEF73CF2649 -84E08AA367F464A5E009D2BAC23CA90A1B3F8B463B7EB947A25C9294E188BCE5 -512207D22E67150459C694156A6AB56EFC0637C661E3ECCB5D5331BBC268284A -8695461785F63473F18C9BE89D9447CE7EC2CB9AA325BB56A5C7FA6D03D9CBD7 -6520F3D07108DF20136AAE5C1D3B0BE03715C7660F767846D85548C3F6B5FB61 -19E0E43AA7FF6CC70789D3B646F0DE24AD23FF3ED668C6E7E25FF7130859A5F2 -3392D7F16549D755038CABCC821BEFA442C8079A33FBF042FCAE80AF0FBF8C96 -6E759BAF5913D55AFC923B065A752A6E47CDBC6DF8C5E3685D289220CF593255 -E509311E5D26BF43CC8B7BB2A519C274423089C5FAB6033E17625C953E9BE3B7 -FBFD85C879B64DAD56EFB9F0134E5714E8411249B0DED90B9AFAD6E40ACC3C32 -2FD398BD0AF07732302617909BA907AB22062EF8C849CED6C30A392BECF6383D -E6A3FE99D6E928CDC000C08511327BA7A0AC713A78A3D515E07396AAB5147135 -86695C077F211101014466A2E7BD0151B3E752DE0D255EBE1D2D56C5D11F778D -5FB60C8FD628814DA7F9A3B7F95CC77CDAD55477364A8306D2B28CD374926E57 -04887E6BBAAB59107A7B89C36BDB46E5704EA401C4DA6394D3AFC428F45465E8 -9D01140F4D783E3739AED22E0D871D5A4017D9684D2E55A47EE953FE22B75522 -6817F37D12A1EC0976441C94FF787EDFAB1E409FF9AD3201D73D24BE56C7CAE0 -43A73CCED4313542F4C1112C35141808CADC4DE6EC7E832A4AB4A580C4F26B90 -5B37051CD708D6B2D770364C04B7546244474FB9574E5ECE5427FBB29603F543 -3D41C97C021348F027DE6EB0A658750AAFA60737495FA80D6E1F61F1737FBD7B -0007EE164DE9F5877DF68DD8CB10A8F06CDEC0EB86280B3EC29F9DBEB1B91357 -0A51B254E35A72593862247E85053B922581A1840399BB254403D721AF75E774 -70BA7AB160BD5C9CC6EC08DB9DEC937712328EE8811FC9C917B293575A6439C4 -8147D7586ADD5DC23C61D1511DE64AD1F5A93A4BE587A99DB617CC4472B1F984 -24D991FAEB3F6CC28A21ECE4DF9175CC0CF56EBE2D262D431D3E8E7A1D220FA7 -CB18F1493A97CE32DCE1D95149C5FF848ACD3B3B32C433064AC995006AA2B775 -5C4BCE15748227CB3673B7A09B5DCD00631F91CB0A157FF1710A9D56505CF964 -DC1901FBC364BB98385F009C20BB41F96CDCA2021E36C3EE59863D5298497915 -3BA4DA380C705B1D81E07187A3D4B4191E5F22116FCDD21A3EA286C53961ECE6 -BD7D029AC344E7A5A03823B6A13A763C946C41229697DB8EF67007A934F27F7E -07BB63C5C5FD24CD241EE957F854450097D5E6E291812CFB9EAEE923711BB88E -B74E472FB4112EDE27A893B34725C9DA28F91F4A91EBB54168E327C1F9AB7A80 -96FCDCD85BDAB9ED36DF209620395F539FC7184D88BA680389BA9CA51B9A5397 -BD0120BF40DE8B99D6205FECE2E509EDB0C39BD75F29D6D97E514C2E3683CFB8 -FCA479BD47C8E02DCA2AE350529A568F66A7733528CA14CFAF4E792F10A11C3E -CEAA08A97CBD6D43CBB43CBFDC7FAF22E87EE9E008301D60083FB7002697B3BD -EF38EB52049C00F157558B3A8BBE5361C82F049D4566A1466869FF2584F6DA99 -23AB74F19AFDC1B6CE4C4AF0299F6AB4E57AFD2EBE1AF260EAD4B46A79ECF3B1 -BEBA4B9154DC2390AE0061E48D002EEFBF44ED6BD59317E017C6E42B2D8283BD -58B8DB392C511C12C72518A2B1C4D185E1D0E5068ED5F4C73E771A75F0BBEA45 -428E0D31C9083ACD4842EA136FB12094F786DE99956EC2EDE1BC9D3352E68CE3 -4CB3994988DD766F6DE69C5FA907DE7B338F22FB9377E20B7978E2B0BF39561A -F526141AF262AB9C6853BC1A947D79F8A6930232F955C6C88484791460E7AF48 -B235E17AD4507948DCE6A29CEA6778893BA825CD9DB22F9BC36822EF4E98EFA0 -628F8190C1B4985DD9A11F2879AE248E2D4115CB01446379D9FA1820B39A4B39 -9B1FB8E33D9C22EED5CF125B37DF0B7A471A58E7CF6E516DBD5F54C609517F00 -D40B22BA5BD7D3EAD411D4373FE4BA22A93E2DCE3F7666B178BB881AB2138076 -87DC7077CB5EB50F0CCEDB1786E5AE3753C4023E9C6526A57EF2C833CFC36CF1 -C818DA36058631F2E7D76A8573ED0BBCF641034A35E3B7728BBDB3B8CC9B81BA -71CA28E2FABB0714271E3CE86F5762B3975834692C390A3DDD31C7A609F3B850 -FC284EE819E6E6A4A8085A92155D502F95B9A5C7E5D02059D9D0B7D06F9D5ADF -85091858CFE4C7131562507C64F8AC607AC9936C79C87DFDB9E6A4E2284A5BB7 -4F7BAB56A319EC9D70D184F789C5BBFCCF7B7C2B91C2581E8A5CA55C8EAC26F7 -CCB524EABCCDED72C187EBB1F6943A992E63C0D46206251BDC363362A7A37081 -9D58205CB308A33E290AED466DDF02B1FE375669B08B19376CE9DD152E0064DA -EF925DA958D560D86FE710D798941601D996C655C553DF0AE6C0F3A18E54817F -7B30DE1D156861C9529A281DFC897A4B4746FA7AB6A95461BCEE458DB6D05332 -677619D0BD96AAAFAB4EE63912B703029AB349AEB275AD79512DAA4D7212C101 -AE39F00CA8DE02F438686211D567EECE1E42FE13386314A94281F014440D59F2 -6E258D72363746144577C85BE389F65676AE3C3D19CD2CB8BCAA75969712B8F4 -7629698C52DC6001E32736214349690EF8E57A8BF50C9F56A4A0493FD66A919E -9875835511AC63AEBEA6BD1753044BFFC98432A7EEC9E3AC68880974382B1EDA -7E01A7FC78EBA3A38EE6BA20636CEAA56E3FE22FD60542433EE5CD688FF4018D -307D893C2021D03C7F59C9F1387960FB843E1AFBE04A2F6F406C31CD5DB4B24C -20739D6D74C7BC11B20382DDE8EBC1098E0B5521CBC13D346DED4E5C41701B96 -A8F8A382207C21582BEF7D04129B3AFBB97455EC964455C85B3C177C41675699 -77FA7D7C2E62EAD5C151965CF3B4184C3BFDAC859E1F096CB050BEEC459D7317 -A088DDD378A476D46F26C048BC4377CC1BC095F688B7B7CBD3971AC1F050714A -35C81786288D82C54D86F5B00ACB50B0450A2EBB9DF94F0A7AB1B0DE394BDB53 -5C7BF36E6CFD410056591B94C351C1544BCCC77C06EF80A9D02026BE1D6B7889 -212859D0998B0B3E5DB66E75656D69D30104DC613DF83C7CB2C8F9D64646A7DE -372AC87CE3394DDF99D86BD15EAF56B06593F04E47862141D81D66D83AA8806B -47D3B43FBB79E806F9DF2288D9E6A2CDEA497B854C743DD4373017884177AEF0 -B44D4661C0989492EB7F9A5894AB8DDC93D21DA24338E7E12EF3314DF207911D -B84D6CE001EDE032D12416286899FEA12724AB45497E4A0CB868E15FBC144CB5 -ACE3ABC1B5CB2BC13A220F93D9990DD9B4CA9726CA00DEAFBEFC2BA9EEC3D94D -595582174CC45D726E8B961860CAB4C611DE70769926372F11492FE2D4693C05 -9AFECAD80BCCA589D7964DAB00C5E123933F6BF2331091E81E67F0DC0ECF1707 -0BB1C5E2DE5B1C88FADFAE9A6594B5EE9E9706466F750195D2D1539F7C80594B -531DFD2DFC0BA2482D86F2C8C3EE068C3B8596742ED27AB960DDE361827398F1 -CECEE6F2C74F944383CF07C88BC80448AFB946C782FB232CC3FC17A93E7EF7BD -3CE53C6EC2D3D25CF63A3CD27140B8D17CB74BDAA4BF2E76CB2AED491E9E1F70 -800B380CEE1A505E612E1BB47B07CA030F9E22C8E5B559AA42CBBA8C36E4A7B0 -6F1879675332B6EBAEE398CC34ED9E02770A3CE0560818B77EFC03B0DCD583FA -CFA3251AA96C0193B195DE6B37E89F2279603E17036B3152A111C54D0BB8EA57 -32CC5E5EA68254075A7133AF0EEAA153ABDE61032E6B4DF6C057DBFCD5981449 -68F39B3B1FA9EADBD8CED34E625A23BE959347D92158FB083FD351BC4AB0961A -2FDB383CC4AF0F4D841BE9EE98C60AFEDE729630E558D54477D47B41A63ADE7F -BDEDED305CE9A874EB2CAA040DECA194FABDE66EB73F69DDC4B4542F035D26A5 -26ED690F92548CE93CBF174EF853217C93E25A68B7C6E47FDDE19627AEA88A5B -5075A2EB5EBC4F291D8D47BF8B699B4B3617731ECD998002F003AC8F48B22EE6 -2326AB694E4D985154F4AB6F53E2023DF6A2705CB3C6E2122422A866AC481A30 -9B9DDCA04F7F5D3328AD58454FBFC63790F87C1947A987F740B02B8D19C62A7E -AEA6F7F7C7D0B1EF9A4A04094891F1613D3485DF031D4016E52729F0AA3BCFF4 -A5AA7C714B957C6F20EA9DA162785C4F25C37C0EC00CECA092B74C9BB69B3CF4 -272D015F54E607FD3BEBEFF03973BC28EE73685E037CFAB19FB5000E16E05B41 -23DCE6A1B6C3C6426F675912DB1886B8FD8EF3FC186A4E8581267B5289BE404F -1757296E1E0D67DCD01A0BA71E46824F962A5220BFEC6FADC5F3911B1F13829E -41C92272767398BB235DBCC3C192136AFAF90729EE25933F761582FEECD8A2CE -4EEEDD25A50F91DA79309E039FF2D1D8268ECEBAE56DC01E66CFA97039B96FCB -7BC9B91B6349BC9866EAEBD1C3982F5AEA86D38C3690FEDC113DD71B5BAAC063 -72C28280BD462003F9B8BCF16B3221550552720741E85066694CA465044FA504 -2BF11776595CC01926639215CD1258F59C16514BAC7A0E0DFA9BC3E6465F7495 -882A0C8B8E37DF36F890A2C4760D38490C031B61231C3E2D8FF421C3E70F7F95 -82383BA66DA2890FB3B6001C69713E84587537C409674570DC75F041B3232416 -B0C3483A2A724ABDC5AFEC995C1F32722FB685388A162BEABD1EB092D1105EA8 -D7C03E271937FB18A65E259DCE716A5C0878A01ED4A275FEE7DBF6634F3F3BC1 -1364443A9AF6697EE9DEDFA9DD67FC0AC679498D8DB38816D3D51EFB75E9ADFF -6715121DCF5B071661A9BE993CD9BB6E5549E528701702F13B5540AC1A01396D -84BDACC73DA1B07CCA3D213AB57C4D8F1DA01AAAE6C92BF2A197CA39C992F855 -F2938A0C8B6B112FCA85829FC4EA35943B6CE0FDFB766308ECE21566A2E59A23 -449FB9BAD4CF2B6460FAF544FFD5A0304763B6D61D91CBC7BFB91D6FD3559F6B -89C91F3AF46F9B14203D2813472065DE22D07D828FA2677C876652AC40AAF58E -C1838D8A74D192964BC8127255EB00951148CD288E84F960867BC49FA2702E2F -7C8023C3E86F10C63ABFEA6A328F1B9FE422488834E4295AF83BA1604D132A05 -6A68331BE2809C17345746B9341C97B014614B266090D5FC73CF8D2DC45E0F19 -EF046962391AD19DC55334C72E3C131B502A63A8025443F5DF795D0F2E99D749 -DB028C621902C64E72635E9A4CA28C86D59006A24A65A6BBDE8C54B8C433DF38 -9C93E3A0A3F21C223D300167C199FE2293BD5ABDD9F0B4CC092A6151BB6AD061 -D79F12F437EE38F6214A9C009BE720377AF0021AAF5783EA1511004B1238ECCE -C75F2CF0032133C84981A7FE1241C65DB91D449618EDA8FFED39D3066B6BD0FB -7DE0542C491202D694922F4FA4C4BF2AF72E4F74564F2AC3F54A9F72BF693675 -400F251F863683A1ACFD71981FADEEF3650B387ACA8846D7C57A84B5BF5AB913 -38A4BB4FBE788E9A856E366895E36329189BD5802F95DFE821C79B3B8841FBE1 -29DFEB3A465E36E1CED694425C1D700239DAA5723C916FAA77E91E781696C8C3 -E5A4571CEF70DBEC17C494ED46BC095486079ED8443BF0894B26C39D492C4802 -6CE5E89BA641066EE9993E5919207B12BECE4773591EF3B48EE224CF18843DCF -3F346BBDF9DA3B8A85A86C0B8F498AC5D92146BF9C187AAF18E6CFF2420A1816 -57EE974186F63E5A161375A822C588E417746972BB1A31B0FD68B95EB128B7FB -0CC33F2778C6236FF6B588B1A9D24BFE552BF848BFDC9C275F4E6FB1AF090EEF -9483A7AF6A6D7D8C285F535669786F02F0AD230DD9594A351D72950E7633A28B -ACF784F1E2CBD036EFDDC24E9DADD0C67F33D8F5C87E97404F718437D3F768D5 -DD9B9E81D81C0EA3445BACE76BF67DE5801FD0AF3AB7B0C40CA1412631DF8DB9 -34C640F23C28B0F44DBB92FD79C254F768ADFB59567D4341B339F9C9DE47D299 -3444A3E8A1392122F8FCF9B78FF2C2918A3FCD1D4D642BF89D2B12995735096D -A4B65388D6D8E9500674ED399DB7A0E35F7A80DDE50841FFFC19BD7434320230 -4E3EB457EB7724138BD8A53FD10F5DA01176551136B004F4CB535BECC7C79B52 -1DFB022DC76DD3FC3DD114A6A42C89543196FB5B85B6F8B9C9D9EB55752F69CE -2EA3C2230A67A15AE41C93D6904580A26CECAE69E12E7744CA7C1EB558A7F4AC -4243014B5694363770DADDE68740C483F4740C97C861293B2C06D7577E63F5EA -1B3373EA993C1C9BB452988A474D56D40D4B1181DCF2802B4822CF34B0FCB29D -56255A7DF6BD8BA1477F786502F55A31467EA9011A71216B93BCA4032CBCF8D6 -73BFD93A21D8102E4CD8FE5B9039D7AEB01708BC4976A5CCE0C757138E433568 -1DF2E3A2CD93DC5D4A83C60011E7807F206E0C13AABCC4A2351BFCAF4AE66971 -75FAAC7162E84CC0515A448997A20878CD4092777668D3806FA0D28488478110 -CD37E011C61FA9F98F495DDBC5C43B6CCB794771A954FC694EE1CCDB92560F29 -C4EB9F2CB61543667B95173E1A36D50F448187D52AD351FE8635A95AD9461966 -AB6D6FAB28DAB949B79724912E910DD9B78703590C55144DA82BEB8775855C0F -3C8985283167B473B3B2D495BB913B12EDFFA92889E5109C50244F3005DDBF89 -2583BE928EDE0102B0F7A40E4B0EBAC9DC01DE981BFAF286E04ABE3DAFC812F2 -D066DEEBCA2CEC8913338335D6297114655C844254175128C13B0831693ED51D -C834E442ACBA7ED6A2B3887A19C58B113A7BBEC794A909A1B9053BDBCEFA2098 -218CFAD30A617246BDDE096F066A00BF81F8FA0551AF34D98F50A16FFB09533A -E35D98AA6BBA9F845494FF985D83EA8B7888D9B058BA84F801BC9F78800F2CE0 -8FAE86FFC77A085603AE7002E4F6BE5D66DAFDCE2B355086B0FEF5A7E2A87316 -DA9D535BFD88B835C7CBC60220B6C546AF6F8DF890C9A582E47EA590307BB5E7 -A37299C66DA33CCFDCCE4E289E19A4DCD0ECE5CB3445EA37FE23053433FD502D -6CB673425C5D9DB2B0AC5C56D6420AA9E7598381A4BC05733F6479F24A9DF669 -FA4C9CF602ADC5C4BEE77BB61D8A3260ED88823D20A9D779BE6DF977441BBA4E -CE8E15F5AFA9ED9AD93737EB6BABB8B32379AD3BC714A6D1152AF18B4684ED18 -E46BFF0725B90A4886CF93FBD29246F9A79D7B41432F598B54602304E77DF101 -C414CADAD6D520FC84406FF20622E60B45B7BB3E353BDB5D4AA824CE42128847 -C11BB4DCE8A8A0EF76035908D50386546E45A1548124FC24607C397EF14C6ABF -9994ADBE0C74129E63E76BC5BAA44BB4F42B875AE8D756BB8FE5153ADE5244FC -784CB936E7C2FA1FD6E6300E423A4238DB8D658E8F1B17C39F5A1A33C7F44330 -7FFEAC4C1F9B8CED5308BC43E4C128FD8457B89BDC493B9C68DAF7E76B3DB809 -F6D3152B676DC1A1E103C465F33F087BCCB64583733E3773F7D6D4C994BFDB59 -0F7BC03897EB3CCF914C1FA400CA14CD5294B779B7BAED650CB2C8D486718876 -07B60CC3D111FB8E5DA6DADB3951595CF9EFE458EE412082A35EB390C9AEE0E5 -237811A13BCC85F07A245EA22650BDC4A9E8DA0575AB3269A4E40034013BD348 -44424AC74B1F6628A16533D8DB6D14DFF72E1845416611D45CE2BCCE3F34B1FF -86BC076132556E6C65F2248E073825D2B2D0E3DB91EEEF5D33B12B0ADAA304A6 -6291DC109F87E7A92335767B3C711F92F105B0B6AD525A6F8F72FE2644F1E180 -4578CC1C66D4720DDBED3CF91F1A46A96F5619A6D762E012053D14A26A88D6AE -87E37882423056FFB32531C99F2CA89175FBD95EC4A9E678B440D82DD77F9C5D -4B6D97D1BF7B2E24038BF1BF4B8327091EE59491D91DA01D8756B6F83C28F203 -572983E6CDC9C1D5C865B753D9B8820A39858C389CBFA4DAB82E2D35B6C5B332 -66A239F5BA78A4EED07507D2FC075C65DDC391B1A93A051F559C832CF36324B8 -B7909C130D20CBAD9EA9FD1ACD079D7B95401F72A950D81760DBF8895876FBF8 -018587D37FA6ACEF2593364C21F8BDC34A27392145EB2F63ABA3771402316E6A -2A30C48B7EA2096BF6E53DAD2C47CBBBA646816DD1E6EAF631F42B108BB2FC5D -BB808F1BC7A8D3501B2464F8BA83303AF8C43028368E6C814541E17717B397F8 -72034E115CE0AC6EB5983237CE8F604A9549373BDD938187A39F6418A8461705 -A6ED43F775595C7A756D9BC1501A440E6E4ED43B01DE23A206A654E2FEB4A2A6 -4A2DEA86708FA9CF218CF933DBD13044E82A7CE60182F6BA33519BFFF275C2F1 -6B6692E841CE26752200DF632FEA9C93BFE0267D4D5A99566C1AA78DFE8FC63B -2917E6DB430CEC52D19DF490FA7015D9796282C3FC78F9CB2F2D1CA2A1302CA0 -C6A066ABEA6C871D69B5E5EDC514260193C6C29C8D308AC4A6D38C962FB7FC67 -EA268A9395414F7E8DCEEF611D1AD784E9D56A4F71E13FC7B697408C1924AB70 -A62BBC66F38ECEFD60BDDDDF85F849BA956C3F3BAE422F9DA0946100221556D8 -404BA4327E9ADF31B4AA708541C46717385C3F57C3D7220C59AB272AA94C4F1B -62136AFF190C4AE70F287D2336991886EB3F14D2F2CF9451CB55C162F494A261 -1A88690D9308B80A3BFC92EB48FACC0C7975FA1F262D81359C88BFA3B5F91461 -EDF3E9A7764304AD3EA1B51DF695C915530389C7DB27FDF73D37CFA666E6CA37 -389BB54CEEA60324D68423B33B2A03BC00E7C890FE1A276A3741C4E133802C69 -8BC3692FDD7B0F837AA060A0C08F8A77976E0C5695D16CBB07AA95E8E4355831 -5B43B8C5F9D351826A537FBE9B5F89DF32DE754A3763A75CF5DDFC60258C044E -B4AFDA88104390CC2894EEF40DBD766A481C5428592FE68A6530F1E063F013C4 -950A3A30D2F352B6E547EFD81AF86ED43E0BDEB8A0B5B7F61DABC796A21F3990 -94EC45D1E229776B9357F339F6148EDC74A2DB064745749A936E1028C8BED9E5 -5EEC197EC2F23457A690F377A544648A9F151917046F34B672C00C2CA89CB8E3 -26AE54ABE1ABE6C6C697E08B90DDC90F54E32C0982299BAE9A7753C07755A6FC -CD5F7FAF5BBFB9B93032E1C176E568CBF93303F38BE9D78846AA1384A047E530 -E7497DAA12D294DCCB1747411A94EED2F231C5ECB8E8A43851F4840066C25E51 -EAD18EA9A3199BE80429EF8298BF6D473F1407777D857075A3CD41AC7E62060C -54F97F65A8EF5CE6FEBCAAA7223E2FA0C6A2C86AE5D82B0C80A20F16BB8768DD -E778337122FB7DF527B0E9AA47BD792C2484784C8731895528A30F7D1B7429E7 -3AD1E59232438BEBA5D065C8C4FF2E6B0A84233EC5BCB2E2FBD7031F1B74AFE9 -E4301B662DE9B6E27F62BDEEEC1A7C73ED4CC8E4191A473728CC5A0A35D2F3C1 -0F743792A11663F871FDA8582F7EE0B7C4C2CEA0AE1AC74A73314469903488BB -DCF92439A3AEFCF1621488D7BD8BB25318D7196D459EA3ABA44546B649BA0CC1 -9E29B9586D948282EB1D8DB89E4CFD6DFC16A005922A7BFE071819D8CBE15F41 -06217264D10450784FED734EC809C68AC760007A333E4132DA48201C02590D40 -BFC91E614F145502C9B27DD7950C46E6B25D4470CE79CB2DA192336726253512 -CAE6D87ADB60EF451A507CFEA57914F241A8C81DFC8AF788963F2E2EC722F81F -B2E1D28C07CA64D5E9EBE8722707CD91021DD64EF2700953D590A62AD8AFCC85 -30420DEBCD42A684B5C527BC149DDC14C4FFE9B350DB04B850245A1650E749B1 -B0C094644AD43AD83087930CCA240ADDC2975E05397807DBAB4AF30E6CB15F7D -014771BEADB55CA911E29A38D7D2DB1614DCC0FF899BBE9FAAD2513C27BB74BC -A225AEFD85DEF96AFA64F89405572FC5C3A40BB24160D7F274ADC4DBB260EB87 -BCE6390588627BAD6B640100D58212467736FCA465A4EF71821C6D765F3FFE41 -A030BAED3FD7DE667BA4479D5316588484F6317B88B6E91018F3202E8625B837 -49A64AAA69B7B00FE37413D1E632B6404167A439F9F2140975891FECDAE0652A -1FD5FFF18973750883207300E4CFAB59DD7C7394F173D0DF78DA3516B44B4D03 -C6761A6CC49608F0CBDFBD46FBE6FC6E7BC9558F281A8FE32C5AF888F3241AA4 -BDA43506A22A091D67934D138642141EA39CF627A6A2A5520634A9DD05F09165 -C03C0A3CBEE624E4F59BBD2201BD2CE1981F46C53B6F2D91AD7839579FE7E7B9 -A29DF2BD08EB5A218066E77877915B6E1AE372100DA1BB9B8D0B229DE48ECC9A -5404AC224521D9F648DA7E1C1102CD514F4A4F8F8AF5E90BF78A9E2D90C93248 -D39A5560AA0BA4035EC7B45EF7015A9A97E6A0104194E6748C11C5DEE3FA7431 -267CB641D551529E89571B9D701D1FEAA4F1ED1BF17FB532EE6B6EEAEFBB6764 -4CC55E7C8CCC63C7E4B93C9D0BADDE09B1EC8F31477D636F4C2CCA1A817ED12D -7E2A904EA8888C20333019E235870FFC51A17504DC9AF8ED6B6A462B7D3AA186 -CE76A233003D7A5AE162B64BF90AD0B784E1581E5AC17CF6EA2746B4240D05B6 -FC2D4E068ED743E4CFF9ABFCF73D66F2671978C6E8B440B08F0C18514039EFEA -02A14A8839A203C3A921015B5DA8EB9688632EF87CF933F558E466FCA150DB2A -494F6697334380AEAADE71CF8C532CBCBF70172341A0AF65CAA5D39907AB6DB6 -061948AC7487B667FD546F155E09D50252E2B24C7EBE334527851C8D5164D66A -56C0502EFA0884BDE703668BB25449D1AC862C15D434087CC14AB94788C34ED0 -2390D067D9D13D4D6E7B551B1B3D494C77F4B9576213835A221ED022FA6E3D0A -F44A85CBFD09D8E6D68B43BAE4CC2325DD56CB01A93B84FA68336ED8B2CE9473 -4EA7715DF92EA71C434759638A29738C84C814E13D858D0E23645C8FEB660603 -93EB19647F84B481CC71018766552BA16BDA1A94943EA464E99A0230B67E92B9 -4BB6DA4AF80D8C812DFA55CBFF4AE00E2EC16BA3114FE8D39EF537B4A982D893 -7B25BF1366C271B509E1C16E9632A9A64A2BBE64474D9500E94C21D2C0CF9258 -FAE9F7BA3259EB2E279995C2C7802CCB2C3E946B011043A4D7D2067EE56B77B4 -213289CF677C8F7572C95F2A03A6B7EBC64D99BFCC0615963F33B07FDBA894EC -D1F17EDF503D5BF1E5646E2C7995FB3F15168A518AAA7FD3FD05B21EA5292E95 -BF48F0BF9F41820FEDF9F5DF7BA4C396E4C71DAAD3F209CE8EBBCF5F053504ED -407FAD8BE9CD2EC265524575069CD2820E516D133AFA55CF42B3332BF53DC45A -ECBFC8F42F9A34E5663A6694E48B4EE0C5FCECAA33E19A125FA8831BAB9952F3 -51020BF0C27F175DE97ACC64C74929701567E6CD99A0A9F4EEC88509E2B2E93E -16BE159A8AFA0121AFAD45675FDDE7F795CC8EF9D41202CD38B148090FFB520E -530C701D3CC82A19E587BBB5CCA1EEAE2687486E1AF28A20E1C4C959F14868F0 -B411134AD1EBBD9CCAE1B708772CEF727D92FD864712B96F6B295849968F484B -3DB20337EB5386325B127115487425A5D474766075BA04259A6CC75B34D43529 -F41E37D69BCB9A80F8F9B8C4EB2E65CBDF1EFB70844639F347DC5BE018657FBC -F34908D7D2A25766F1EB5209DF5CB00709321B02E05C48E0363F0E778E0864EE -E65A17394FD73435E9F4523FB580DE5333B4EC4E5CB09F53504CEC5289B18B94 -76B8166EB1AA30A0512A56B675C4E9EAEE695D82B2D770DF175CAE19AB19E0E6 -E195CBDAC59C6559CA9C3620632C0CE3A380B6545D58486080AA54FBC5C4A8FF -AE0D6BE9F96C8E489C0E06224FF96E35F16B94EEAD8368D470E5100A0A731B69 -DBD7735712DD3D882420941F5EBEEBFABC28C3086CB238DCB99C0DA005FA85BF -4E5BD9578C0CF27395D29A94FD27584FD96F0ED37169D85D8B85F5BCB5ED8E9F -329D4D1A337BF1EE62628A3D3B81C759AFF5F6DDA0D8742044AA18B93E32665D -80E3DE0D2332FFC076A76F5535592D2ED1AFD60805D10798E03E8E65C17DB19C -425904FF83587A0200B406D3BD3965844289270ABE86A5D7A9BAAD43CB1AA363 -ED87682CBF19B2ABCF8E4C9AA701017F06A4346DCF7A000E40A00BA37AE5601C -AFE7D8E529259D1F57D7B00FCF5F246C902E920AED62751D94FA41FB9EFD25DB -A86F9B85B634562E96B8EF8CA5F5B77FC1CD168EACE9B19CE7D56CD99CE70197 -D80A2508F3F31A5BA5A8AA8F7B833C2481BB9A6CD8826475814F0B74740CD443 -83C3F266BAE4BA683636FA0BFFC57D71F8D13F91F33D368810BFFF77D9710902 -BFD32D9DD2E94C1C06026B3BFBA5F8A71518CFA31220FD245868729B88390774 -EE063923474CE8D18C2D34AA77F9EA37A92F7530DA0F67A05B2C11C3D9942AF4 -386DE7FA1BC11F0028D5EFE8A3474A5ACA8C1744BBD24EEBAC3BF7EFC12DABD1 -C4DB771E7617D4F5C4B759E84F40426E8AEE3BE6E334A378A3C56319FE296114 -047945896F2B8F8F925F86CD4755CAEDB75017A9729187C1941AC6A9725DD547 -197F636F0025E63FDC74ADCFAF0ABCD64DA1F7512442EA2D2E88726BFBBCA2FC -AEF3D4B56DB882F20ADE74063FD0AEEBF62AFA179E5AFCAA443663B3E8594DA5 -F4C4454B08C461F85142AEAE2BD3FF04F9A89C9E2C9519A856C2C32558EE6A1E -63D565CB3746C9FB6C9BF7494099ED1BABAFAA9069BEE833D13F3ADA35B1605D -2368303ABA5179DE23EDD6E2610BA46BE4B3CFBED8D80A0B8FCB27F93287D3A2 -33B9C13577AAB8B77BE80C0466255A693FEA8F2D0FC2DC6951F6431DE0F8FEB6 -659C8E985D3E02378DAFC9DAFDEEF0012FCB5ECAF17AAB951E0C6D213724B6C4 -E5AC05B554F814499271F37A4A0924D4AFC9960045C7E4D7546FA355016D5C2A -74B78E6F4B92BD1A45D430EEF88DC034CB01905E0C26460D401F44772C260759 -8A716908FEBDF9EC4DDA187960DFD111B73587D5B8E84014560A14FE1B46C152 -DBB6B7EE966712F3E8F27DAA9C758355ABBE19F067F140B522DF95ECB66264CE -B2F6B7A1DC8B3CE934F8E8B005DAB5D9CE71ACBEBE51FAE0E689429B3C0048B4 -9DCD4C933F249085B0EC1281A3754456CF4224329151DD2CD391D35ACECCF6EE -B03741D088A36B09AC5100A068F58D71E71050DB62D8029AAE834DBEDDC3C012 -C70D090A3A4F1A77797E73B93779928B824A882974004C16981AEF1FCF6DC7AD -34E68B09E69063B253447D6F461D0FD38C91EDDB5496040787C62161643B0B8A -B40873BD924BD5C3EFDE93964392B2503F5229F91C5B6BEBF6B977FD1DCB5EFC -EE8AF1CAAFA81EA2DC1B77D565C69001DD20295D5C4576F6EF44CBFB13601118 -F55B5763EDDF93C0994720CC32BD01AB5D50CEEC5C3E762F8E60311D2487D143 -940802637DAAE0CC3B892E566BAD6DEAE8A9006D71233C4A1C9E96ACD5EB7056 -DBE34D18C2EEEDFD73C771301B9C2EBF0DDCF269E05464790E36A6C124634374 -CE6B8F5D046497C80FB2F4390AEC41026B593693A6FF9E7196192FAACB98CA5F -BF6F7A10F8C78C07030D3BCBF0DB0CAC4981CF3550077183EA1F6C6C093F3A3D -49215A00FD60254AAE82C26AC7E2B74405CEC4EFC19E5C84595E88817AFD9E5A -B3D21F906F757F037252337BB6552DE24B4ED3665E588CC9C3E916CA1E2DD333 -85DBF273ADB790E1087E8D4994CC038D4F5C203539D1F5B72FD4B2396E175102 -82E544BE1AAF2045777071CB4D0CB8B7999FC2DABC172CB5200D01EE76D90C85 -F5BD6801F07E825D94FE5689C2CBB18727B84C0793F168D0EF39EFA0CE317D63 -AAD99D61D9A953A60FCD905AAC01232ACAC04D0F164E59FB59445F4E9C9206C4 -22BCA0F75FB6EEBB3AC6DD055D4751D6F93424E030CEF9ABC9E9C4792AF2A3DA -1F1D98FE0971C2B6B828004A58FBB2B4808C8BE492F636B13660839C5B6F9B94 -6457A0DB83D0FC4F05A993F6F70FC1ED418F6279DD339790006EC4CA34B34011 -8F4F922033AD1A70D2A3CDE0BDD6A0C0F48ED3BB61727EA6FE093E393C8E1A7E -D4B58BAEDB50B5395BA7D95D8921A98FE44F6D2DA73259560D815C82E435325B -D633FB6161FC6F82B0EBDFEF76337EF416952A7AB4FA74090DB78F02DAE15CBF -A40AF9D8BC81C164C581302E70040581314E8FAD7E0EFCAD384D8A7D21A18C6B -ACEB44932A14F6E5D05CEEF88068FBB44D81F2149ED7C294C583B3A32AB289B1 -C660E734972BB390708A87829D527A1C9608A16F6FEC6BDE309CD440A0197C79 -7682FDDECAD867C49BA02A0CA7652FED17F411F5DBCC61A910C094DD249FBB90 -8D477DC7F10C7D03157D0C2822CD3F3F7353A7FF200F0C20C04A395D66111E6E -A6EF63B509624BBE57A17B0AF22E67F33E32FDC20D24906A5D1A698A675041ED -76EA377C33CE7530C501F1161DE10A006ABADD053F635408C51E91E089A83242 -B55AE77E0C10F6F11B53AFA57A14B7F23BE611EAF1C8C3981AD7261A7AE81F0E -D62976181C4512FDD4A397E375D37E2A127AA5B2856C82AB99D770623F36EF3E -DFA5B73D2F8C134DDA82FAD11F791B3CE3455AF3E4CADA2977F240740D1CEE12 -5E60A4A290A8185645D0F49D05E5A59909EEF7C87D87209468CA51C352845C08 -77B816FEA743C2BF5296DECEDB5569EB87CBBED1E2BDB382C35ED191D451CAAC -7F93A34A219E6752E5ECD3F2CE819CE9D46E5509AE8B5F18D85CE2AB87273C7E -E067165BF75291EF6E744D6F5C7D199AC1758F2FBE9556CF9ED6245A2A9EE591 -E78257E36BDFF553B6E7CE515732C152A436EE59E219FFFD4D0CF148A5919AA8 -9986C04CCBC5D91B180529575BCADB7E34F94E2E1528C7A6B602D4418FDF1265 -9CABAF85FDC831CFCBD1449C8CD48E98DEFAF3BF8DDEBA899CEAC532E30F6D36 -B891F0AC6D74393034D49BA5F96EDB94ED8E1F10EDF985EF757BDEB967959038 -C18C05EBD2F27D6E47F4FB9602679AFA54E5F2810D69DAACF96DB0F277B8CAD9 -6C0E19D9396F94B1025C4DBF871C99D579C9DDD4DEEBC28A01661013CAF907A3 -4FBD2F019EA42FC201957DE80C7240B799FE4B199ADDD3C8078BF40E5F052CEC -01B7D3993E2E61B89DA8E539A09508576574CE014B530D13EF43FC8FFF1EDF3D -BDD344511B2486FA2D4DBEA3D6E57796A6788F396939748A957E51F01BCBCFD2 -DF91CA7FE81A054BB15C1D3E3A1062ACEC7EA6E4089913BEE42E1491DDAB0BEB -1E77A608F72A5D43C10F6B022695448C76BDCA33076A02E5AD60C7C247D2C3DE -85C878805D882F452B782B3D21BFBE54CE2961759F8D71C17F0C952F8D38AD4E -6B6AD1F498A64FA52524E62F37ABAD12E6D5F7649DD796E031BBD951973DA19D -C6DF66F38F0B06783B4DC6DBC15CC689D80C3822D5C3DAE96FABF9C0DAC880A3 -6F38992EF13D0C3AC162C9AB38EF2B8A4F176D8AD645E982CACEEFD28947BC07 -BB233FD9ABC9F4AF612F691F4A52BA5BD67659B8DF5D68894CD3DAE4C724B238 -8314DE16D901F3B63D8D11FC1BED822294527CEC6F31DCA780031F485A906311 -9D81A365928EA38CAEBE7C450BBA19FDD76AE8CD81A1CC6E38312957776A2ED8 -CF258CCAFE221200A03F07627ACF8B979F361C0A160E1E5635D0E30BE18EAC55 -DEE7A21FD8F9B6A53333C8F94DC6C1A1F4DF0518116402255CD84CC302991A20 -789689C51E8FFF3D868C73E1FB042C30C1EF54FDA77E03F04B12781C572DC4C7 -8D60E506C6FFB6422AC0DA6CFB438D0B5687A1FB63C9A96267630CADA9338EAF -B0F4433F014A7D37840496D8F9AA0188F558D87CDCAEF0A7F89F7400AB143F3A -7268A871FBD6010CBCADB1ADEE40104D9BB6DABACC4A7F45F155A352F10C8057 -B025F9435A77DD3BCC4C131B3DFAB32706A46A9ABFAC3E5C30CAD28F3F9D1ADE -4060EBC1F26BB60CFFCB06AB4F752EBE4D00898E99ABC6A77BD31E0C74E34F2D -268555785724E80B9CCC165673D2F4306045720CA41C606E9C33611C8DC681DD -0E8AF0E4BF73D39374BD5D36E1E2A95929647FC82583BD962DD149258510DC76 -6F03DBCC2E142EC8344964C303AC4EDCF7C1821623A24A1DC88AC09B60E1970A -312EEA27B9850401C1FDFCAF3A9BABE622C52268ED778475173E1BA15CC5FD07 -C1CFE4084A5C1374FBB7ADED6B89AC09E9FD125FE728CBBE52BEA25B2B0E0E76 -A4BFC50EE334241924F6A9750731736139FCCC3BBFD99875E2091AA8F9F33109 -7640F7A0CDB5B1783FA24E5C5434D732318A5114BF0080649C1B5CB4A06122E8 -F592101C09864AC1FA6F9DC9DE816B1D6D7785A6422AD5A5CF997E2A5B683CF2 -BFD6B12AECCA317236D4DE5B8E11AB4E0C0A40ED4D7F2F29D9D5D6F97C79A6C4 -3B626C4B917E2E2144D7A9F043B8180E45B433838BF44F86ABF22E29E50C1551 -36D56E3D89ACEC791CB407A7959F66A0272FEF1FF4ED642EBD735CD954FE2C01 -F0DBA979E80EED581BB0E1E643FDB205C86E89C19A149F4F978460C716F38749 -0027EBC1437B8B37FD4F9D7BE0720437E61747D2F16742076773041403D85212 -294402ACDCD82923E24860E0F807FB0D32298F5FE9076E6F07BA9BB380F53F3B -39288A33519FEFCD75F540B597324FA43FE1A8DEE64A756587419F319B8C6F1B -A2F29F17750953CC9DB864DE2CF3B5164C093769F6FDCABAE1F6D9616D8EDA82 -DE6BA7F8D24B227FC4AC0169F80D0B2B1B7BCEE7ECCEE7475E7201164C8B45F5 -31FBD954BB31D060E6E32BDDD035DBDDB5ED89FA955911D8B747AEAEA01327AE -3C2D04BE4DE78B313C4414BDE5F06FC0AE5ECA638911F691A1FC86FD8BAC3956 -C1553875B45A80098F377AB2DDC3549514ED658A557BDB939AB6FB2479F98BF1 -8157AF4D86883A19E9512F87AEE0411C1B08BAF29549F663AD5476C50C96FB5A -356C85B2C52995EBAEAAB8096D21EB470713A567B58D680A37E4DDC3C1A52BED -E01ED7897410EF6334A75217FCA97ED5E299C5FCCAB0F92584FA37A1EF03C7B3 -A2E5A3A278F3ECD40695E55F6072058BE81ADA6E096276E250AC662BCD562763 -863C4E7A7B357FF231E5467E76394FC47B591BBAF322FF9A94B2C3F2975C08C4 -881CDC4D7035E2385615B35556035791A00758F33582153874B3E6B05BAB6D2D -659351CAB34569B8025C7C51F915E30AF7EF8D48F3D42411AC8261AC04216FE6 -B543790196A571B4D28EF60339BB05BDF3208B8F9D1BE9E50F9EBAD04DFCE8C3 -8A39ACD81C40EB4059A9FAAE9B422536D090A4E2F757D3BBD8AD6536F000AADA -EBDC6AF9115E067ABB4269791C40A0C8EA696E851867186DEECDE350E0121003 -60563C43AFAC8315BC7D87DC949D09CC36FB081715E959FC914E931D80D846EC -44C3178C212B132BA2E64043963AD0C20D56175D57D4FD4BCCD30D7944E613A7 -BB863764A6AF5EBCE17C1179D60EB17B9C4E61ED6DE2C7CCCDB6C4493C8CF326 -A53E07C83A01726A19EEFF88D46EAE48FD5FEA1024D229BBE7B48332DA245FCE -F2C1CF78F1D92218BC6967ED2DF365E6F47FBB2BC8E9AA0014155348BDF54A91 -471FD23B5F75C270BD3F654F3815C43C4860AB4B8984829B238C614D7CD7EB6E -6ABAEB392C23196AA2ACEC2331FCF813AC4D6B5A076E6D6F5C98454C78135384 -2DE08F8E66A983B76B526C42C243CF15852CBAB77BB11A7EB644590254C939F5 -CD4FA3151B7E12483C75DCEE22A88D9A1F1E0F53E2579116D3FD82F6A55BFB92 -17E173A2D9A3FA4CD85ECBF1C088D45473630EDDFC84E94C36041E06D68D0184 -DCC03474698ED646CF7C636B2181CF5BD89C8E939AFD0B11A233A1CF2A7320F0 -D8937D68D03579E5C8CACDE90D37123944D7247E4C4440E4D29A1872928D87D7 -6A10AE04ED4053FD0A11DD5F588C4147E3809D071305A3CA695E181948CDA1F5 -A30F95AAD47D95138683452EA8A9867EA220E9597CA78B2F8CA09ECB43E9AF65 -2590E87F1A24AC721A9CA3AA88F0FE23A2263E279DAD980D7E752BFBDD172BBD -162741DF269EBBCABBF7575BB7C9E7B42777DF8F464D85245A5EAFE6E3D10C27 -0FF95542793833E95C8089F4025A8BA1E5E884541F0B33065F93BF1D30FEF287 -D7C73908A027CE521B7D6ED4DC2E77619854E10451D4ECADE3BC7AECB72AE698 -4E4CA0ACEA0836F87CA309901C67ABBC6115110F2B8C7433C4A248052317B283 -DDC1238D40E3D00E4D236112319F872BA3288AAC2BFE2B4C723C0C3239B7F95E -626EDBD4EC068FFDABC261E02A8A0D216D5686B005E243C95360865605316BCC -1A2EE56693C7B54DF2E68E6288C0DEE652E76F3D16791EFE6B7FCD744384311D -31527E20E4E736996C67331CF78A08ECAB6B5A720FA6B8C8FD80314C4793502C -9EDA72FFE0F66F303E84495B00DFD9F8F1748311571A52A1D965EED5B0DD1CB6 -003B902E1FACD61472980C40DAAD23C7D35D0CB00BB80025467A421E36E3FB35 -DA936476C87ED2BDA7F9681BF7050BD883DE8D9798D3F680CF983941FDFA3129 -18D0054964095C068B7A2E520ABC3B88F079A90AEFF5441256CC06D169A6AD8D -84D8D55E99DF4D756771B9EED972ED8A5B858B429216ECF433D4C9901B0AA14B -A55DDF1592764567D919988F21BCAC5F6E2823C374BD6150410F5AE77C3CED4D -5AE61BF4BABC795EAA2816FF42966CB2FFB2BD2CEEC59930FBEC3731C5BDA5AD -32B4A19586248AD9D3422D987321135DD57FB8939EE3D3AA7309FAA01F2474B3 -52722950F1216BE421C280C1CE4F5B6F2931E0D723E8908FE53A955EF5D6A6E9 -4188AE3DB1FC8E98E1946B882F27A4D6D46442DF31221659824FD9A68340452E -2AE390724AF5B78868FD734D7812FAE570EC1254C509153DA4A58AF3B6918F0D -CD439CE41A00234EBDC94B9438C2D541657DC3F840F485B2687BBECAF841C0B6 -C8418D6B0A342FF41CE90BAD8F8BADA85BB5EA094DFCA987AE5269C651A1C4FB -853F5514439C159CF16CAA9FE135AD70E5CB37D76EAFFA880E8B0B860DCF2DC5 -AE4A04FF5C9F3A4188E992DD1C25BC8ED3011D4E2E1A185147DD98127B37330E -DD0091373135082BE8B0AEF51C75BFEF9261D6FEF8B61179CE5DC17D12F1D202 -437E5B60EE9B2189464BA21E4A1F44D82A97242B74B6BDDC0144B44736C20B14 -238F49E81C75FF6585ED339D47FA62D94B6AD30E803BA4BEE3E75B255B2C0FCA -CB72A26D596C70A43C5DC401761FA38BAF249F2B9862A26045C122E4D27C08B9 -1E476E46428080D75CDA97A6FD21CC573F9B20FCDF26D6EF973000928FB4EF6A -2899B87F867C5E588BEEE781E24B670351192E4C479A66DAD5176AA8287CD1B2 -C5E81EF0C515AFCCDDB657FE0B2132C0910954045BA122A58025E616C1B90BEE -3C46C5D48DDD251B4E545271E4BC8133BAE3F601038D5C794EF7710CF561B19F -64426B0789FE6F8A3ACDACF5628E10A1114B447C03E201958404F76ED151258A -1A2FF8B5702C702C01F89DC17F7BF02BBBA8F78DFF03078C892285CA880A0EC4 -D27AA9331C674E04D085508D69B448D1B54298133A680CD67BCB80C334BDDB56 -1904CD441027BEF374ADA8D824F54473B7A090BA6318728E077A84989A4A4C91 -E8E648B51A68A39E16E4A2C5FA61AFD63556158F9DE92107B5ED054E240048A9 -FED04273519548C6773755222059259601C960A8D06AD11AE943D678BBE344B4 -C05CE0EACF18130D7470BEC987BEEF661DB3B5360B822D898EF70E5320E2D8FC -7D1E8B8C4496F2166F30D5D8C607F52FD5F12349593788B09CD9A0F3ECD80683 -956EB208E3B8E1FF7530EF6FFC96701E7FEA61D8765C7D3F1212416166DDBEDD -78DA095B29636A9AE2F854BDEBACBEC7AE41CBDFA15DB3704C46122EDA7F4170 -C26A5F3F26ED74E21A50679B40CC077E2EFBC78F3ECE60727283EEAE9F0C7396 -F318863C392AAAB0A24473B0801AC7ED69DDE14DB1462E4F988CD6143E9BA70F -C2BA50189A83AB577373E2DED9DFAAEBB2494C738B006C40FD81209C09C5D25F -65B94F71E4B12630C2651431F32C7B3D9681FE19089221A15ABD6701A2B9D345 -11915E70E6C18E0AA0C1587F4DFCB904A75CA357C34155CA5C712CF5BAEFC795 -0F95D60D91714ACF79756DF293D5E0557BD076DB63954B714D498E8244195173 -0F59833143EC98BAA06579E7E3015EEC4E40BD440211563971328DDCDC3537A2 -EF85F45EBC83E00B7EAA3272C16341E58E82BB3560E9318B512A5CE362FA098E -30FE2696E03B63B47B9D06A1FE63E336DC7B7FBA04422CE1EE9BCE3EF55FBB09 -4476FAF98151B50828F2E894D83F0A28EB417622AD150C5800671E32326CFBF9 -C7718D18D9E787C0670CFA112671D93A6B1F7BC1DF303A6E40C0A2F409917E91 -4212953AA6E5C67F3C4EB25E1B71A096414CE4C3455EE9A596A52473964E02FF -280A5037244294582F7700C06C5CB5E36CB4C4197DCAE062ABF1FB454E9FB4B7 -8205B1E7EAA27F177FBA6D621B8B75DC81594DA014B3864F4B1DC3E1C3FC1FF7 -F1528F63975D949E5A64479F408B24DD7A46DE3946A51EDFC4AAB046CD2E17C2 -130502B2636A631844D6E659BDF0CF6B180035F01F710F91F1573FEEBF8BB630 -506EFCA96CC5DD19AAE89054E3F29F964E7C6CC48CA3D98590C3C637B4F98FEE -BD75D9141D40DBDDFE318BD5D6BF6EC9A95305A959C34ADF2D9DDAC6FC6A515E -0B23416C1A7FEBFF8BADA0F36FB7E61342A8658E15CC052A94494F60844BB93E -6173C2CD93CEAAD8CAA61F53E70554AAA173868FBDBB7EF226F862C9EC437A48 -853C4F4D9C95F1A5FC1F6B25CED0DC33F616A04AE68BB9C0E869DE7B5A70F781 -E2991EFCE385076FF7ED839E55958D9A687E50ED4D4868B3BF5D92BE8F225F8B -E0DB1AAA3ACB072A1040A66BC457187648E7B668577DAFF15B3C2A71A5FC8786 -5DD8F0B26C0B51B3861B394E31C831107E9DAF2A5B4E54DE859E9D75FCAA59BC -F9DE63491362749EE6048766F2D4E1CA725A1194DD4E53BD0D42E0358930C81A -AD02BCDFACB892D098A345D9FFA8EF971AF3FB0F41FDFA41D9BD847A6303E83B -14B340D14E711CDAE7D42FC7A66A7FFB6DCE8554F607429010E81AFB8A970F34 -D5E1BB28DF0D6B23EDA7370BDE6A30B91E9F87E47663F89D83DB820895552B4F -2B9552C8069D460ABC93DFC88A6BA2495308089BD374207A3DC3A620099FFF24 -9B6A819B6C9063C17C4B37E875A144415E8457E422D1DEDEC11527132A8039BE -C5331ED90CB75732186BC48E8A393DC0AB95A14E84909B8FFF82AC15026D9AE1 -F4D644425E1A4919996E28567CC083AB66E7A1BD2775601C475D4791082AF0D6 -BFF7C28332439B20C50D9227459FFFF3F8A4739175E0D069B6EDB24E45A86D16 -13FBA0DA2C89AB468C17D2AFCE9BB04C4784C1BF76E61F7E934DA7CF4AF3BA24 -8E5CA0D0E393A59AA84FFD072123220D0523D68B3D177AA7B9055B9D08F2DE06 -5B466DA58A134276FD0EADDEBD6D594D62DF588EA65A2330413F7B143C3488E3 -73FF170DFDFB4878E0E8AB55CDEFD1A70873C56B28742A10FB55EB6ADED70A30 -12396A6BB42062A4713E72C4742B2A879A9ED91BEDBFE68DC1A934B2A1DEDC15 -1175DE769C11DE05E6E97F7678988274CE2AE0C2793393D6ECB1E6D64B72EAC4 -F8B487A1CEA2C817BE6E7E5F6979B5CCC836BC0A9D74D67C5E18F35CA43F1903 -F0A5B7C1C9F2FE48269FB582B57DD89768AB8C7B55E96CAC3CC3D090607152DD -89AF7A767AD4CD3266BA6FC0037A5CF9B08DD8747FE3D33F8D99C89123BFFC63 -A514AF6B08F6192F3EC45F62C2FA5D4F3B80E99EABA309BD21DDFB3C46ED8874 -F227278F654ABF4F935473898A36F306DFEFE8876AA51FAA93D43267FFFC9499 -1E1C9385FED5901799078E2FB3563655FABE1933F1BB5B4A876BE25A924777DC -D1D9C96C8D4C7CF260F5375AAB5262DC78E6DDD6CEF9337A3E7985C0C1875C6F -C06F4BE4E96C8ED6D805D235A1177778FFC894400464219584CFFAE7AEA5A184 -BA6ACBCF04C43320D2C7176D3666E28FEDADC2E73B9782597E947127DFFA9ABF -F8C8A42CC74290E30897D999818BEE47E68A4F672A4AA1225879138375EA0804 -C02DF75B8CAAF2971FE31F69155E56746074519505DB3879BCC50F9216CED99C -9430B4983C1039466E8D5A721BEDAF43368611F3E90C3BDB8B954A3F5A825EAF -D393D5E3DFDD0CB757B014B3FA1EA45892775DD3CA8D176697FD9478CD55A436 -8E62A63F84DD5A26271B502E96A74BB52468FF918A5F54249FA552DF3BC1172A -EAF29CAF5FA5E58CE9242BC04A70CB0527F554BB8F3E9D8A189E6D8BFDAF0383 -20B7390C5263D6AC6781A500A9D97DC8BDA3E156F63D3DD8D1344C121EE6FB16 -FB54B5CA0B7F74B32A32D55415AB5FEFC2E43FB4EE8B3D019C3FE29CE0BB3294 -96C9B4AEB0F8B1478AB7C9E4D784C25187A958A6EC1EE1359C3F7D3CE4577904 -CE2B8B18448ED83EABEA54CC0B5B092F234BA2A2908A15BA4A60851C5B1A336D -7387499E62F1AAB27AA9B071B849F35B99E26547B07A943D5F0020D37AF09624 -9552A0BAA86C49FE065A5E7056E100E84555604C9796002BEA168CD516C0A8FA -46A7329C7ABF1BE99191ABA619329AABECD308088D74C8C47F2E0772C1DFA1B2 -391B53A260A1E28BA2BBAE063BB88B2E7F90E6BC03482B23F3DBFE9D1B3A0097 -7CE9FFBFE770740A19A732CE7BF3314A8745D71E9F46002E1D38947D4BDC3A55 -A59D0149B0EF50411166E00111AA63F4A595F24B52DE94BC85F0535192095A0A -A244B0A292D30EBCE2629765155713E19521FC7FC3E10090BFD1385AFE183BC2 -E635EBABEB69C737C1562670D9F815F28B5FF2ADCA13BBCE2E8B719EB85D52A4 -FE27A62B7D8032BCB6E0C43E184C8B864793C272EEC5752A2533404AE5B4A2F3 -A4178CE4C2404C71BADB724657A956B6AA8C7DDCC3411BE0E49362570A2D39E8 -53AB4CEB466C10CAF6C38B3F3C4084F4C9F9197A8625751037EA5C2920B002CD -413F5F9CDA6FE303AFF476E88A14B90538CE1BCAC35BDCC953EADA6C5C36825B -853797CA70C519BF8A3D1A538FE6E16CC84D2AD7B1F6E5E725EB772326C04E48 -5E687A44390A99A50EBFD4A3D81B7442AB1C8D5B311B051C3B973AA2F2A7A28D -8BB32E72117770CA92293C9551E7A210655243F3813206C84C8569EDD9002047 -84AF2A18917F46115EC82BB96FC868A3E7058D7EB655FFFD15899C00346B970B -0BE63FFDA54A50A5A6B0054F2B9D1C9FB94C6878B04DB10A7478E56816725F76 -CB08B9DE852E377DDF83EB4F822026060D5C517F0E62A6EEB9CF13EC90002B9F -C2212C697D91FA63D619E863981E9F27BF5C092004D54E367A8BD3BF15DB2DC5 -927DB805F25E05C0394B7A6A1F6DA3EF3A480A6BFB6CC63A856776C630746D08 -2BA98EDF1C1FD7F7FD05E38D23BBD6F4493AB0C6D69749737620F4EBB458C2B6 -D8DD2E634532AC2F7BA37CB284767DAFF3330B7E69971AC6A3C77D5C515CBF0B -A228FAF9AA6A095011124379C61FAC642AB282E4F190C9E08F0ADB8DEBD3EB71 -3B12241BB3D2684F59DF02CA0F711B83A888080849ACDEF5682EBFBC62A4501A -EB2A59D9EE46F33362C13C15811B46AF95E460E93B3F50BBA029E233BF1809D8 -B845BBFC6AEA5AE7C83755281FD47F0C3B152FD8AE4B27DF7372860C9A09BF4E -6925ED9D6B1AC0533DD715B68C1B27D8B4DDCE201C111E681859B1BDE65CE007 -B3734F7B14FE748B840F53453252149F463F12DA0C87FD03E900DCB2567B453B -BEC6A42CD0C3BE0AC8999DC889576351750B944B49515AD9B3394EAC6B066996 -1FECA134E160D99B36D3ED88FEFA777ED7D0BA66259CC99C60495B6B8A5F19C2 -C957848A8E2C05698748E50A77B32C223C96C7A28AFC92EBEABEAB453AFFAC63 -DDEB754ABFA689697597A4C4FB90286A715CB31C2E59E37E23FB873E2488F413 -38EB42D55521239BCBEB233068CF020DAF179896E55B5609473211E7E9DE50E1 -65F684134614C82F5F7C163D43460A3B19A88FC1A14282E9DD649573B02EDE52 -23B3073A3FFCDE1395C8302146FE37C3B9971C428ED2B48AF8E120D1CBF06F6A -F4143BD5F8E0CFDB333050E13BB931C9F579FB333B177473717627FAAA0D5892 -CA4A59F46CBD2CEFD5A0C7A823139D3C60A2687B1E0EFF201F6114C047D23F17 -DDF63EC251069EB083C9417F07D0C344DDDC8DF928DEB6DEC372102FEC938184 -DAA203C172BC62111AD329BB1BB1A0F44CDDEE22B1A998939333B1A841AB4608 -51DE28FB8FEA0015CC89BD43F3E37C2CB48F1C0BBF3C5B638E6EB2162A10D6CA -1DDA501B6DA15A33D2D141A32F08D43AE66E23AA41BCE9111707B72E3D39DC83 -6BA1B18178F3942E269C12214DD8557EA6499DE01F74BDAEF75E658FA7D38A0D -168DBCBFCBE04FECCDE6147DCF5D8A577B7AC4E812260B86EF88F13C1B2F9D38 -331667BC7598F4B138CA6F295F565302BF393D67220B57881015F28169E12BD2 -43B4752ED6904574F6C80E5E1679748C4697358904D960DBEE2BFA35CBCD8594 -34346B184F1030D6500C5FD4773525A91D4AC22783B61434D417C9F57B848CEF -E90B0B243AC9B9FB37245F4178E6E305FE7A45859DA1EB02C024BA4784F39E08 -C4FE1473828248409CBDF74E42AC80B446B5455E74B75F5FEAFA8055A3F1E01D -FB21C1D9E8BD1BA09C3519AD87B54F27BD9DCDD18E9F7B2BE7B1F7DA396117B2 -821383AD37D76ACC89AB90D24B43AF386308508F14E36702D86A07AB2F0B7E63 -AA0C1A7FCEAF0199FC99CA393FD44CA8AAF7B9A1E820720EC4658EC8C6D68C5F -101FD9B8C0A45AE5C2B4B8682DAAEBEB686674F828AED86A8580E9D4982105A2 -3E91D62A2E9FAFFA2B3AFBCDEC4DEC3491526066E2A75745775567CB84F83127 -76E426BDD8C1EF9B64CB5F3EB256007935A75E63D5A90F5946D9266E07CB4354 -F6D2A89E2D1C332F3B1D9DE24195547DA0A5A674A50D9ECB92BE482630D37061 -A094DF9C31054884D4F2F89651FB8E1BCE6125AD240C7AA38DAAB1EA0C57A681 -E1352460873893488DA2FAF208E4D511FB2E2E44C8E9D7713A805F9AEDD79074 -632756250E9BB42FDF32C989F81373B75758C5A00167C49B5D881ED5B2DAA746 -EAA8DBEBB0AA0883DC30D79D0B99ACA9C47CD0CFC039EAA053EF194F5699397C -0F69920D974EAED369D532F3BF706D35FA463FCCB5C59BD3867A70CB295ECD3A -DED42339E6918F0226FEF5810EE2CE5FE9994CE4957FA626F5A10732AAB59651 -3776FEBE368E3F24BC27DFC528098ECA5DFD3367CECC60F5DBC2993B1740FB4D -A0E7FA89553161167B1617F698DB3DBB6672EF5FB052332FAD4FA5822C96D0EC -03111DFF00E76129690FC5A7C6A5DBF6E1BEA4371BADE2304923EA3C6113DE18 -7353D433DA5A81959828550A30D5894AB3FD05811D2BD0345DDA38DEF30DEE17 -F63DADEEE286E488472BE0E167DB4475E3C3C248E425D6E32B18397247530C48 -FA60846D3E477C0433ADAD9AA0B0A9AB1C258537415E05CF354C6217993F5AF0 -F89996ABE0EE4D948A42EC554FCE412EDCA1C88C4A171AB881DB725483A62B2D -D042621DC2948648D07D8C9AA493CDF26257E0E38CD820417E61F0C955E648E4 -7B884CB722E677D5DD4100EA6F948A10346B904510ABBB6EC7C5D3E194308A2D -E44821460563B65270700BA3ACB5D712CFC2DA9FE3094487502518C1634ACFD4 -700DC4BFCA3155484BA579C2D2F20C147B60F4C7F55C80A8378A241E83D67E2A -037C59D5E7EECC35BE2BAC0121C44B40AF04881A35F6AB7AB17259B027C56182 -61927A1C8F6CDBF4075F725286C4F1BC8401CF8596511352F310A14C790915DC -E503D88685CF1BB91AC27245F9E5D91EC23A8729BA05ABE5D9EE7AC81BD289FE -72A6BF35B6C2AC895F17EBD812D550227C06991271CFC565E149E6487D1499BB -6F4C93FD408FC31C2065CA1D85A2EEC8858B4ABE7836BF784C0040C1BF3E8175 -75FD8812D699F9BA551C6FAE3226DFB5B2F372312F0081B9531DF453A54E3ACD -2FB15B2CF43F2D83E004B2BA9229FD048B63C6A4311E3DF32CF57572DA953BBF -A38593F4B293A0C315888DCBE6F93DAD0980BF5B0F2CE3878A65AF744AEBE350 -22FBED4A11039F57CB7A927382A9C6F625B5C4B96C17D9741A76B422DF68FDFA -13C670B6A53BBAC82EC45BF1157DF3DAF8B766DB30528877BB8DC77D82E16C16 -3DE6523F9E660D2C5A8A9D5ACFB135968C729B68BF04879820B8D69308458421 -6199052857E16C51E8C1FE965C93CCB85A876F1CED2B4D6428EB830E3E63BAE4 -ABF42C9D77855A0A9ACD246033302AB74CB82359BE91FC947F69CC8738209580 -ADE0948982C8D30AEE3034546E087EE180D56AF4FAEF124D5934FF3F2BA88B40 -AF3819D1D9D2EAE8574049BE8F8776A3F7AF6BCD4F999506B072589062154CD6 -AA7CB677A73F201668C5B355BA59499A0F93BB904231FF29486E60473E87E00B -094B51A4790694507237253F121BE0897A1EDB09E37F08C399597A47FD47C0ED -7A4235821F72F021BAF9EDDEF1E15D285802AB6EBF721DDF8E6A85264A5CCF87 -1B5DE9EB24AA3B0A50E0FE2B195CEC0D9F2B9D12D9B68B5E4E5A8732E74D30B7 -3FC9FB783569829545B6984F5B06DC5E2CDB95F409C328A608276D79B7BE5735 -AD90FF4325DE84DE077D4BD77AFF7345B8FC52A8E1BFCE9CB5DB7186717333FC -6BE58A7CE61E4D13266320102AA06589BF00D01E884D9FF87CABDF4E12F62127 -DAA725186B7796A1AE7CB37BB6B164932404F3017E132202B42599798C1FFF82 -236711D98287A426C44F9DBDA9FCCC662690649A6F4D6DD932AAB5759EF6E481 -FF6F40A980DAADC5850E948B8EC0A60101CCC339F93EB829704A843C79686F6F -F23AFC0D04AB902B602B7E1C4A927D6C752B2BAFBEB8D80273CA0395EB9D4312 -A052AFDB82613CB29D8B9A5DCF2BEBE5606F6E32A577DAD1FB9A9903B92C0B84 -13C05ACFE23AEC511CE6FAAC235CCB47B598C11183AD8713091D65D3F9FE4918 -CB4CC13F25A2A6991C9D930DEC24730637487EDBE1634DAF1DF9B9024F38DF1B -2B44FEFBCB4A64756FEF1E2791BAEAC248DB8946DB44A5674171789701FC2393 -E4C2192981845C5E95834E60EB49BA90C3869A8497E99B3E676075C4EDBBA164 -DC9E9B3414443FADEB59F32E39C46439766E1E3ECFC5C197E031E645CCA4F970 -38266A4F21B6B98A581B838DF1077D8C3858FBDEB2A3A16D8F5847BFEAC138DD -D73ECA92B7F1F5A0177A4C2E899ADB7F2218979D6BA217D8E117DFB2BC7E7658 -A81BDBB92AE722C326065EDDB99E2378FE2EB426CE3402F254BAF1C3115E4ED3 -18A05A9F129B61818A54D0EB53536359FEDEA8D409F36E08CFD272EE7E376F13 -16AEBF9AF354D20FCABE9819643878797FDC9B784FE700F35C60BC70CE72F3B7 -D3E1ADCD69123BEA6C6E17174847F62A5867CD674F60D8EBAA41A019429DF304 -57BA5BF34142F11E328DCD3BCE5253074988DB4AA42FEF1C3B5430E44F08E0A0 -DBBBDF4776E2CF9DD65A42188ED02C62520B62A22D0DF2B6C0D819D5ABFD72B5 -C716BA390B682875CF80AD1CDECDE4E9E57204445D71D55EE6DA675FF56B06D5 -8650EAC74044170B3C822D049E295138E0F327C93A829E70BF3F0B5325D8B65D -12B3108C53E594D93339C1CCD5028EAE72C2B755CF3F069BEE7E9A803AA5940A -5D277F7AEEF43E1A175AFE4D95F5DD641724B3BBA43C131145E3AB2A8E324E0B -39CCCF9E30929F711436A1B315BA636F38FFE73D25848A97099450F1DAB3CA99 -783B23590EDEC75A7BFDFA4C1D70D6C48C57BBD08D6E174270C09933473A4682 -8A4F59B3F501D92C730B7C883826F8E24E201475C4F17566E8CF364219BECE93 -268E339B4408ECBC5B415703FF37EB4896007FB7C21F79DDA664E32A0204AADD -DD50769D15DCF9D35A749C7D8672B8B06E2C699D6A378F43675E92E13EE42F5B -AE783261BDB17CE63BB928977EEAD46770570DE46B302487322B089D5AC4FE65 -E826CF4ACB665CF3847596ABC4D1F36958C0C00FB3D4C6B0F130760238DD2649 -0C5A735B0B4DF8E609698700A080A9330CC8BCED0AF170D4E791C64EA44DE301 -9ED5D59F24CA9987034EBFD3FC3F829232D690DEB685BD5C91B4C6A3D1C5DE80 -DB6CD484B4114EDBCCD69CFD20461F6C12CF347E45D9579C9AE4375C1F00877E -D3A2F2B6051D09AB480156C6A9E86A559469AB63C218F51BA72397E7C8BF37AC -A413B505A11123BA8107A2B40E883572A5A41F2FD07D7E8A17656677A6FAEFE2 -A790C3D413670B569716A1248BB0C507C853225308B6AD39DC014EB034CCC13B -315D7544F5B8FEEF1DC4028E89AEBF12137F9FA617BDAA2298D326A4673C4132 -719F7FFA1C065D5EED1AF32FE1399E48E370038504DCE43CD8F45977032322DA -5B7297726BD995D24BDC2E3B0848E688C157877AE0EA411B0EE5284AC6D223ED -82E6AF4E94FF0D5D41BADE24E636384C8F8261B8E9917154067200EAAA09C6E8 -CD4D9103FD27BD24794A012A15B9C5F0EBCC16ABB05E2EF63DC3A126EBEE67B0 -460F384EE0E07514DD75A6B7B17DC6DDA8A2BE32A9D4864EEFE67EF383EB5FCC -8D756A08DA6601C4C4F6D85252A199B29D61690CE7EE89BCD84ADC9B4F067361 -1B837DB712E904CA57A1A3C9A0F18FC457769137434CFA34F64A976D49FB46C2 -A533EF92E525D2C880B17A935D4C34EE30F41D3D78D1BF013421462B2CC74DDA -F16A48920E6D22A59A6B71E65A8E86999635E9C24145EE1C4BCC54B5D0B529CB -084E14058F56337822EC46C77D4A7875E60E1862598C8EA5068206134E978A84 -7891E62D0545B381CF984A445426D0CF7953C32F36C32BEAAC1D9DA343D5716E -308270DBC4F48DA9E32727482434F81452291D8353F974F5F370A5672B2CAEF7 -DAAEE9BC8ACF114D13A44877B44F87D9107FDBAE64AE9241353203C72E41A472 -53347A67B4D7D4D65B384058792AF2C2ABC08B856628F8E732D208E548C4C4BA -2074697982852DEADF2EDB80DA4A396BFE1F1CE044CBF92ED2482799AF9D81B4 -9050957E97437DB07ADDE068E6815DE3684D6BDCEBDB112B450BD160A63A2B8C -4843D232468361F9B15C829B0628E3DB765FFC1EF181991A7A96E0432E09CC96 -6CFC5CA74BC71089 -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l049013t.pfa b/client/nfsexport/lib/fonts/l049013t.pfa deleted file mode 100755 index 947a31c5..00000000 --- a/client/nfsexport/lib/fonts/l049013t.pfa +++ /dev/null @@ -1,1598 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiSerif 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Serif Regular) readonly def -/FamilyName (Luxi Serif) readonly def -/Weight (Regular) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -30 def -/UnderlineThickness 60 def -end readonly def -/FontName /LuxiSerif def -/PaintType 0 def -/WMode 0 def -/FontBBox {-203 -211 984 993} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078991 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D9E73F44EADD0D9361D465 -3748937F491E18670189FD0D6858CBDFA6C4D794959EF9FD6996B4BFE7447FA1 -0B99FBD717D8407349457E126F430570E461A06CD1D4022BFD31D3140B4F9D44 -873A31C28EA941EC9D76CEDC1A71BF7589E11A6026F35F47E4216D7168D7E0FF -7C75BD48730F67FC517E7539B16B14D61185D9EF8D13F9398E4F3881BDECB05B -CB62672DC2C80ED0A24278927395F6C5D99D9FB3F3A1DAA087C609DDA0583474 -E0C5C9EBB773EA16786FD1FF2BE887147ECAA6B69B261A6A61E8E0DB8AFE70D2 -4069C33DA1AD0763306A2860A870AACF636654291C3BC44893FD9358616A1D47 -B3C79598FD22290D57AF04F3C192DC67611A2C2EEF144F80E0BA04888A5BAE0A -AFF6C484103BE288EF75F74A81B453A4D3B3BA25B37C547091D840C1356E48F1 -80E2FCC0C091515CFFFC446F99945BA70A6F868F4EB9F4ACE8AB07B64CF9B7E1 -4A8D5C16097D4ABD16D3573FDA57A646D3DB6414E5F3EABFFE30F22996D0E4BA -07685D5EFC2E97D9BA4DF8A1262EC2AB3C74A57AFE467C7E8130036360EF8D62 -4A2B6D8C290AA2365EA095EEA4EAA7042F747358A9F6151AA6F82F17F9A48ABE -646A9A3F1DF12E7729658ADF3111E52D08E50998672E884C2AE82B893364675B -9D3CF06B6DADFB13C53452730FD0A61A05A44B1FF1C3B0CA05756677C3D262EC -6A9344B80929A6D456F8708C03D4E0B4AA29320F7E3E9FE420397D103641CACA -87E1F114F525B6AE34F61327595648DF8FFB4FB09DC41C0641CB8EB349595ACE -3A65D4E04735BA31E1D613CDD02337D460780E22CF8B8D7BF1BFA8896C343E85 -5791AF4BB99293E9B4E239A2A1C680099BDDEDC3D68BF9F2986D3E0E51834478 -D808353967F7D861A900DF206C52BE7267F70928102B914F39E001632154BDE8 -6626FA0F69D81F13BA8F561680D2C0645BD17BF5828EB43B6C1C443E8E3CF346 -50C103FA53A029A665987560D17F6959D9FDD46005A1EC53E443D89C7DD4A618 -3A114F733C87251276B35BB3A03FE864E0FFC9AB3C8A1686FC5605F5EF9DDB2E -B9F6D75B1E1BA5710BAF346CA720318F32CFCD405C006E4DDB6FFDC97067C0CA -394C5EEEEF2D27AB9810AD25A421FA7A4095D692F802C83CA5F8B2D6AB83AB6B -45469FB7C8613F9E7DD094F9360435D624C67E7306D19FF80424B75968A3D68E -39215E86F1ED20ACC5FBA87E107785B48411A9F5A8250D0E561FCB1DA12B590B -9F0FAAD50D548FD78020FC3C5EC3B7ECD9CA58E88C81FCB7B2A3C3D114E7F327 -220D436632DA6EFDF722D4C99AB2880E3CA577DAD1FB9A9903C5FCEE69C65D36 -DD56EEF77CEABC3BF495DF819FA518194C03BD88E1DAC75E51F23765797A999F -4405E08AC251FBC7F8C462EDA4768D668C93BCA47E035EF0BD905766ADB2EF24 -EA82B9C97A41552F70B0A1EA5172028A917EABC78B1E8293BCCCC03EA281DA0F -9346FD6688D58DE2B14AEF2954A70B3755CA545F4E0C460AA89E4A9C3D3475E3 -26F5133DC36517157853FA680642587B62E71EBB8422B6C9E1335ADB17040561 -50D94FA4FBDDB86C9FD3812B90EC8A44596F9C683A5119DBC735777DD9D33AA6 -2A33CF98754D16B34D439FD8995E625C8250129701501346727F51096C407615 -F7B96061C2E733045C1C3A427F9B1AD26ECDA119C7B38E682C5BFA7B871AC397 -BC063B129FE54E9CF58C6F329390F8F14172ED0EC22A11B49787751A5E47340C -37814F52C05DED2F8F17A4F53250634B4B54D675F2776A867C1AD96BEDA842C9 -B8077DB381AE4AC283554FEE875B64A37FC3005810B42BD9C1C1422B7B104DE7 -D912C5BF74B5D0B4671983F41ADCFB287E40AF8BF69686E407E2E97D4CC14B6B -172972FA86ED76F43ABD480EDCD3437005670A2E785942CCD45023D1B3B70E9E -C8AD2ECA580EEE06993FC79C3B44CA5841ADBC4378DD68B5A21E570C88EF4016 -CD5A7463F1829F1F761D719F770AED1CA8EAA1FA7D166C86EC3C858D8E76606A -EA4AA03F3D3EA07CFF90CBFAA0E60B26FF57AA395AB4225CC19217920E0CE8E4 -119FDE73501174065D1C0DEF1AE3D6A9F0C9E2558030E8199E99662E767D37B3 -3761220EFC66C81205F64B6ED8EB09865046A89FDAA0275D248179208557E218 -40EF4FFD2B18CD1B46E7DF16B675C3C3093141BCF45BA70F31EDB235DE3DCB24 -2C93BD4C3B6414DC7C57383F35D1033E400DD0FBF57ED73514E1E186F08F8E7B -6F836CC6702047AAE17175CAEB08E20D06ABB02FF72BB9839F34F27CEE5BA199 -D9DA8AD3C6262E0B467F9A85E1D84AFC792C55E00156DF5A50460D259353F33D -505FE3ED16817DB13AE355DE90589F85AB977D09547996E06A8F123F655D4BA5 -E188E9E86CC31AE6B817DE4D90D7055BE09601F7CF4306BA04295148D4D42EB2 -E03F73C682CEEDA8C2862FB309BE14C96C256084D6DA1A0254EF1769877EC2E7 -90D0E6A37EBE7680FC0C6325F6772D2516FBD2F71EA193B0D96BD9303B746FFC -0D9456B7B66E849477F4ABB1565BF0F95D6941C6B8500F9AFB561F08F71CA6EA -0FAF63400979CF3F29EDEDA7041C380A0D3A086CDE2A1212FD6017E8E5A280D5 -73BF391BFCAE1F0CD3E895ABB45C025940C489F30D38B43E5506D57043EB6C90 -9798823F6AD59BF33E75467BDD309210803F24EB57E2BA92BB25200527C66A7A -1D20D092637AEA5FE90C8BAA0A75172470D5C872206450164E702861D50FF618 -748CE14BACFCE06A869720517549082B5FF664D27CCCD7920A5A70724C847F33 -E893F9316FF2CE0C07E55FE095061940D12AA04853F444A664E383DE510AC21F -2EA065FA840618B89166BC69C6BA042714A6DA420C38002841A2BD31C35DCD5D -95D01CF0F4233065B48CA98A9F078EFF2148CC0B6B4601912B93F26F1B2BB509 -A89B6AE424FC9FBC1506D8DF65D85490124FA0B2C19D4AD0FB0BCEFCA1818474 -806028D9362C308A707C001AC9AA9E3D604CF91242901AF68176C70122646FE0 -3489B2D0AB026B5F14FD4E8B6DD4983435F8C1EA647C6EC3A30209332F5D9E81 -6F5F1D827D05995B996C589C6365E5D2EB4922807C996EE7D653AB8E6FDFBF2E -450740A9EAC9D97EC4B05955B35992B8FF98065B126220D2FA9FD5361F00E7D4 -FCCAC7D0131097F55420F2E723779B33AFFD9A439B80D2B5A70CF35D9BD62E5F -EA17E2B6911BC219A7D1D62BCAAACE9FE03A28780D32964E25E5ADDB423B67AF -A377AB0E9E401DDD8CB82BCAC58B26DBCC1174FEA59A311B133F897ABE574040 -4CEDF6110B709AE16E63BAC2ADB18B30918A83160B2D3BB8EA25930548C69864 -DA2A4C23339B35188599EB5668AD8F1D5E43D49471ECED568D45BD02A38006E7 -ED0CFBFF4C9E8A9CD0ED5086E663D880FB388D04E665F154E5E3AA7E658376B2 -C37E52A54EA086300039929FAE313573DE586DC6864B07914088A75241A9B955 -B60FDEF10E7C4CA62F04A0DEE650DFEC8CB0C31832D6ECD00EB8FDD4752F4376 -965F0C7318C152697C688EC0A9DF0709F4D98FE9E8ACED5B47FE2E640C9043BA -535550F55C945805685313E95F02D503DA1F68322938A76262287266376C9430 -34A8A7E9A1E090FC84F0942465BB09AB0E885772BD34D23C38655530F3266C6D -A8B703AA8584D766F3140B468CE856EB0D46A9B7660E9D41FD90DADD603D43BF -3E573959254916573DCEB05BA14B58785817B26AA1FFD03527F11068079EBDFA -2C97B82A7C711113561EEE00C10424F43D5E3A7E6A71BEF9B8173A6C4E26B827 -664ABB5F5882369863CC11AD9F67CB687F1A5D9D554962839BF4DF589A5B0627 -72E49732552AA9886455050A00EFD580BD616A0164000E54A898BC9FB14A296C -17ED96A27D3416956AE0A7B8EB477143FDE8D33BA0C2BE89249DBF625CBE983F -AA6763CD284D0B59099390BFD0193881995A522B5B3E689CD7EAE3E718DA40D1 -C1B6B67463B2B885DE1E9D0ABE0ACCEFBA3D29F7F482D393F988A831FF3A9688 -085108CD2BD75DB01CE94BB7B4CE3674937895D6AF2F6659C4A612EB65F8E81E -B9693701AAB54789B2BC251103528FC0A7E7700CF70B81230B65C0261A8584FC -F19B82615DE07D894AC4CE2CBBEDA4E79CA2438B119A8F0F596D0C605B3BE598 -AA3B1B1F58B6184F0904A73640E466164CFD0D0C1948BA56753520F144F1AE1A -015F1402E25F26B0B462F6C4FF977C7561217862A5E91E1BE2BA5E5B5E045B07 -163CD0DB3279C6D182DDDB43C1E15C6A96F0BDCF32C4FC497837321A05ECDC03 -30943D2E7A81A319C58BD5C78EBF72ABB8931921DF1474A67CA2E635FDD45C19 -1B525141980842058B8F07DDBA38D0FF3F17D95F833AFAC787AF090ECB75DCE6 -155969189C4A05055899D6AB35C9B8F1EA2548B596E799876C8A1A1CF5A2A26D -50AC0F7F93A4816A983F82675AD33D409776ED878420262521C373CA48D01CB5 -BAAD873A8006CD8E74A9CEC86FBE4964497D72D92A2837AE2DD223AB101F8C37 -8E2565A1B6FE12208A05B60BB09082028FC3E1924DFF5A60525064A7B004B75C -40FE50FCBF3CAF6B4E2F487C4778C5E6B105DF2962391EC856785F6ABFB35896 -8C5C7B4D3AF8AFE4E6114D241B943E0ED2129D6BFCFE863AFA58F207A654F9F8 -689E53F795F5A199E91F8F76D4C2495BD307CE3B7669EEA5C46E3BB4CA096420 -D4EDBF4044F0E2C79FF6DB09592C8D29587B536B189DF331336C72EEE5C96FD5 -55E4039799465EF1678063F2AE4CA788C89CBD6EEC9DB3B22BC19680CD130FCF -963F30007CDF0BFB436F34B87D59A807189B1FD4015844DE56B7B5398794412B -1B406C318D5AFA5EA90ED303E3FB726A7F83634341123E5CA48FF30AC16D2B1C -6378EBA79DF54B6989FAAC13F076D88C92B1E485060D5B5703D3FE55255ACF02 -6A94FB7EF322798E945E24BBCBA0052FB611E9451F86BBD9E1BD6A143A98CC89 -A9C82B0993432956E2AD3A243CF7E81E23B770F5B576593EE0089845046259EA -797B171AFFBA8B4A2712175CA836D750B25289872538ACF8C3A51E62F18C5E91 -B6CD6249CA9448C071CF2B9114696EB0A0DFF0019DAEA8399D679D8484823000 -DEFF6B14034B064969CC05E0B5E34FE6F414F876E2809AE3B09F03492B5193B6 -0D358C68DD6A3C48FE6318CBA17BB3FA9265235AE417DCEBB0380C30D04D6E93 -B414575828679719D85B9B4E5B56248E52B4C7841AFE7B7C9D6E844480C7AB80 -5C9412645FBD123919936859F61D815D105249DF52687F31B2701321F8DE91F7 -A88A4E8D5C3926CD47F8CDBF8DED8C5F24C5FACB2138736EF67C5742B33A12D1 -2721A47ADAC6AFE384C2066AFFAD2F79C9FE60FC11A7B71C972B897B12588196 -93C06D7A79AC25F2D9D2BEE654AD27D454D4F28E533A6CAE0C9863692E406A53 -C76344151CA587709CE1BBC845340FCC7B3CBED5C421944652E12506193A5212 -A3E384D7A63F0FC0927B2EF40AB4BA66909D323E6079D9DD5A9F09FD1078E804 -4D6633D71CBBFC5CB1E9B3BD13F9600B1157E28DD3226CDDD358B0878503D954 -0B43CBAC43A14D5034F44722B05D12F6EC8ACC66972E3B9D5DB270988E8D8E88 -4A2F92750ED6979ED5EFFBCE0731FC34213ED99F37BC31D0BFD0DA1D55120C58 -1167AE0D33E8F190A163EC437B1E67DBC254331CA1C77EB1AD6B98CDBE95CDC3 -1C7D04211BF48C8F86E34AF2CBFE411A12BDF382AFBD63ABC1A42BEF2825D07D -1343175C428704AEC8C925ED517CE7CAC954BC556690E61278079241FCF33CA5 -AA04CC20D34B12BF04BE34848FEA0015CCA8192D7B6E166025DE3F12B4FD08A8 -5833375528FEB9A4CC7739AC1C6988B21F3CBAED01DC535A0999B5200FBCD961 -890288CFBF06B0E8B55CFC0D28A3D660B9A79A4A65C2E0F23B54355E41E5133E -42990B4B1F4925AD1DC6176919F37122D5B783BB1A18E8699F8E3F48EA0B9415 -DE9376500F1C31AA51B98E9D5012476EA6F89D93EEAB943DEA72DC6B2734CAB1 -12FF2C8391949455BC5749722D280CF49B8FA5F6FBA1D55B332E0BC935E9B33F -F47FD34619FB0E217E0B5D1026D29A3C8C33CAAC9AA86015B009B153B86215A9 -BD54F753B708FEE773C9A040F23D99C941707CD0200BEA970319E669907017B9 -973BC93F89E7229F4185F95A70537935ACEAD61E7D458C33307560B6D0DA4089 -B40AF5C8E3F428116D5D616E4B0DD6CC7FE203885B32931005D517CD021B75DC -A4EC6FB5F0F8E8C43067DC7CC99B4055E45F38F8D411CCC80514814CBCC8747E -DFE0FDF457428445D64F5E1D0811BCD103E6EB290E363BF1A2964C5FBD63A405 -D0394E066E54774E7B05CF3E250FE7E5E2782B06BECE8D97C5CFA0BEFCBCED02 -08879C6B8F93460D1ADBEDB3CF5EF9469933832A83088D6563EF6982E5F1E704 -B0387D5E746D708B7787B7D7F91BB5D99BB4BB2C6646D5AAF8B1D70E0EBD2054 -492EDE6D5B226E2EEB6B868DFE0DFDAF858D7239520824943413105CEA5AE042 -D9F12A6EC811415A257FF2AFA0FC15F64D7C7F21762238B86EDB5AE4E4CB4FEE -9501350A8EB10809B265D5B52F1C10A89B5F5564C8C077C4109DEBDE36F5456B -F6B4F3889DA1AA3855374A39B9AAEB76E26FEF4683821185A8157B392921ADC3 -5782BF866461D525CFEABD17ED262785013A628A017E50EB70444CB1A9E8DB22 -775040FDC83D38CB5C91064997A88C4DCAAF340D66608C4A28A473EEC0A08785 -C765166D9B6C234AA35ACB7A3E676E756C13A67D80C148A2BAF56432F0AC012E -612851ED8B16B2C0673B11BF65904F7B9718E12179D36023CE784FEC7B79D0AE -8EC3F1244A5D293CD4E67C7B58076A6DC8E4168398D4E3653AA7C0B44649F372 -58A5B2AFCD59AC43796B6971C27EEAD8A4E645B78559FFB90A0D2C4367F25F7D -84EF76B89D09855FA0CAB5BC5088C220E2979FF17AE67491C77E229B4668001F -DEFA0E5B581E24AA93CFD0A21E453FAEFFD82A27D236FD5913132FF54C925EB9 -F59D48E16FC904AA8C498AEE94635D187C7FF354F48771A3B730A994E4085077 -53EB73692AE569A52EC4F1FDE59E793357647277C96A080FBCC9B95044FA71A9 -359225214796A4C58C90C47682EF714B21F8C289E3870EA06BB9DA82227F7ABF -DED110C7307B86772F538A937885873BD0D427966DF81A871F1D5F5A2105F25B -C2BA884C9C3D8342064B7C6979EB116A6077BCAAC52EF21BAABC0AC1BFE8DFE7 -3BF35A96077B78E47551BD07A89A2353366F0E3560D495BC906B40102AC68381 -642ADDE76FAA8AB2466D26B4A322288ABFF4AEA43A5DA09F32F3B6ADF22B0409 -3F16A8CFC70421613B04078A94148E47DD1608F1E262884D8C47D856C1DE30BC -C60933D7BF141A433AB68B81BA42326E2935E37217932DFFB28C9D8580886C3B -DA86AA0795BB69DC249050FB9434C900DD3E97D8C7556834DD3F66EF47347B13 -77E60D03674E47CCA9F3D19B2AFF6660420940EB68A843E93BA89131606835E0 -4EC6CFDD92827C56A07DCB9B7C6FF016D3500D1C6F62ADF954551C2C072B0F7C -86CC8295CC7BBB42CDB70DA78807C2C0CBB3C5369AB2BEA7DF33281A1770A562 -A19C5FB30E616743248AE7D93F8ECDC1B081F96F2F52ACF195A86DAAC8E53D80 -CB8883F37D3BB12CC0908422CE4392CA1014A45C7EB35899A8B7694C2EAFC62E -F69D5179D4B6E893C2CFD762CC388C6356D941E89F1B0A8249E8A701678A86A3 -AFDD4B74C16633087CC14AB94788C32FD74B1F01FBF8C7726DBEE0013E576CE8 -F2D2B7E3CC723BCDE5ADE760D387EAAB664A6F4043A0AB6260755868BE302157 -551883035BC8D73366FE63F7BBCEEDF072224B01DEF7651E0CD9EB85BC58C7BC -01DC0E874147E9A1F9A9116BB60A1FBB7FECE53F802BF95E3A52C4202C89C99E -BCCBC7DDEA17AD7672CF9AEF169B20FB20D7F76B2EFF1696674623E01642598E -A86C5365E4BA709777AAFD328E40D3935660CD986FA959451A5D1AD43161CB67 -5A75934F7EC456F55822EEFE030DB1AB048A2E69AC59A50370763A5AA4E11C4A -DCF9B23C9DD7290E73E1B72B179138E514E99167EF94FBF4A97866EEA33828A4 -275804BD9DA8101E6F7C78541D05C2B9513C7B03A4AEB0F5D5646626E8C81486 -610F1EDD9748BC95F93E9D0C859F270AFB655E2154494FDD83AFAA383389BEAF -70A4458D0D7CCADB3E4310B29A262C084F4D3CE3B0BB63A271B90AFC60EF2EB9 -EE6D7F7AB4ADD46F243D94F83154333ACA2358E4F6D53E633C37993587320978 -F407155D27463A47282D27D50C22B7F38BF34974D60A361BC6F26565D5CE5DD1 -A48B580F5A1379231A8B6E90D0F0F770EED72C9D9D4B397455C59A0687CBDE0D -AF1CD3AE0B83ED3DF977C0DDE3E7537C8D03AFA3114D7AAC6AC5870D0F4F03E0 -06579E9A7308BDEF66E5DD3FADC07D612E6859AA57D08E6A4D118BA7DDD45DCA -2E003472B89169CBFDDF8516C43851451DC5B37C32A111D9D7AD1323C708EEE8 -C500D1E8F5D94BE9E6F3FEA2BD8C5A3EFBE1EF84F5C95BD6CED21C8E2218E513 -46BB8456BFBBB143CC7F0D11F74D53BC996C5D5A0A157B2355768DD153DB21D6 -C2382318562DD4D1745DC04A3941FE0176189D8B041FDB0525A24BF5922A5E78 -420ABD3B2AA5E5410025C9F65FB43D0A68262981DD8952002F7B12FAA9D62011 -3AB3A84C5F720AC7D53671F33477E750EF4F700B2DC3AB8B44587E9BBFA1D67D -276FFE23F32EE806D3DE9C138035E0B4893329A3CFAEE28E6992A3834B016328 -D3B1785119741A71FBD79193EA6EB20EE914A644ED41BB29017A20E534256894 -4D9A5DB399CA943AE5351D842154542016528ABDFF55068BFEC1F2B4A6689CD1 -1E416FE8D5B150FC6A8E68EFA4478BF8931F01E405BE2531B64B4863AD649294 -C0391ACAD1BBCC2627F52FA1E07D77F0A35ADAD416E837963A0E88F67C827C15 -EF55E915BAF4E5F3E4C0CAC6E16654331B3ED0991A7D01C93C60F6961A73E72C -A77434491DD87F8EE1401583D48FC38F63C1E2A35492F93B871ADED0348EF0A8 -437B033AAF2C3C6234A1A451C143CF926992ECDA1F1F3FAEF13C6B1040A202B4 -27C545405D90F77C939C3199FA47F647B482B7DEA16DFB1B36DF0F70446B8CF6 -02B33A96F2E81416ACE4D1B53B6EC5D96C1D9D43E501B989580DB90E83A39CBB -E699A7D49F993EC3ABD780632810CB3CEF816CB7501F38D73106C838BB1C8208 -84382C1DB306315AC4662285984F9D431DCD1F2C854C4AA95CE08C33A99B8B7E -6AA0562D554DA18FEF39DEE068E60469FD2DB23428ED0EFF075A9DF7EF3F92F6 -C73E9CF760FF0523522747F7FA0B9C21B9E4826A900B5D943BDBE82330DFB8C9 -C1F7CAFE80F7F1157EFCD3E6398F77CEE305E39C876D42BAE82F5078E894B112 -3292590F08D820E61B6F0454B47A23C78A5B8F3F34D7DA46735BD26A19EE0327 -E9D27D29AED59C044068387BC305A558A13403C9F713F6C5C2D9C6765F8B824D -5C3DC4222ED8079BF0610C8CCDDD041FCD67684E66682F8434A319E48BBF7F01 -F8BB5FA9FC41902E7285DAD8DDE62B484FA5DB359668E6AE0805B48D864B7C82 -DBC81F4CEBAC5A5108391DA129E11C12138D94EC1A407371F70C6B84023DF9C8 -EA177A087632E3EB4ACBB13815B604140285AD93D1E72D17AA685EAA7886B5B2 -E6C3BF45F83594C841954B58FA051B7A9A94881598929A8C8310671932CEDA2F -6DB1F7F015F8503EF84B19E059E8124E4843D09890DE094EA6EDF792630EB0BA -1486947D0A0B484F4E223DCD215EE78D24C090A3C76C550B065225B957C47C01 -9C7AAF1498157177EF2A68BFBAF50A3D221B4320D71EA261C59A5600B55037A1 -8BF30F7479E036D463341CCCA9E987C3B87CCC44E383BB5FF98BDB2730C840AD -C388CA6480B85A9AB7D42A63F9F4B049B45AF49637E9464A2C9B709A7DE3FE85 -10A6842FBC7B4C56D14F998D6D382D31892F7C066C77A6114185E4A573F9C378 -489CC8551D1102C2052555F93CA134FED3383AA3F28A0E11F5D471819582BA7D -852CCB06FCC3CFF6F99338AA046BE9F96186F288D3951F75449C1DBF650965B3 -3D1030CCDC4817BEBD6216943F2DF5EE8B9FEFE6CE4D38DC52F3CB8A7D29722C -990AFC8CCAA016181A26C3EE67AC35FD6119E23D689EE78E05E2FB7EC3864120 -860E8BD2EA388508327C46EC8F895E24998AD2EC0D8CDE2A333719DC03F57C3A -229EC6CBEE7FD13F538570C2DC2F1031801BE075A473A2A2A7C1E01F74B8500F -DACC782033DEB55C23B08368EA6C6AD8E47AEA7119D76D4B9F80252D66F70D2E -6A498A684FD131AE7B22322009A4870CA2C684C5FA7027E1D98750B6BE292FF3 -0EBAF205FF0EBEF7E1C322DC79971EDA361E0597BDC717668F6B1E66EB93EF2D -62CCCA7BD345104EFDC72D1FCEF328857B84439A811819558DA11DF635606EDE -FA44B2AEA013F1FFA384905F5E32057EEED1FDDC33E3672F42425E8520999004 -51EF287E37D33E8F2A6D33EF933A9A1B1B6472889499D5F24BBD442EC57A6218 -2DE6452AFC09388CE79C10C09562307B117171AADBC4583AC258F3525534C141 -6A85CB591C56BB9310BDBEBBAAFA8270A5A179A368EE401D36A07075F21DEA6D -B1A64E018F87AE259E98401E87FE8A808848DEECCE5B9BC45F44A621301E0D38 -AF6B9042CCD89445F09FC971F94007E7CC558F81080A51B3163B7E6629AC2162 -A410F477E9709541D6B4EEFCEA8D2208427D82F6D46A6DF1E180F621C5B44EBF -D262084531D95974D7BB0F098F279BB04725C16955BCD5CB341F14903C5EA661 -7752778CB6A73908D89835CE1D302733EE233EE7099357A243E77833FE9E9178 -5A025A89882C9677467821A7414D970B9F7C0BEE6E0D3F5EBFA3438640E6630F -916E9523D92112C2FFDAD975FC3D3DB51273AE8A250288AC30F0C63DF9C98DC0 -87EF8A135936A2F060405A4B8E2B597137E9C0B115B91F67A7015CB6D895E688 -45D23AFEFB6434789178094B15F666DB49AB7DC74454933692B36DD82019CBD1 -4EB94D1C042285E9D76F95B80FA4901D85BD16056ECDC82F068E794CB4410D65 -4CAE5E1B495D1D14647B4F3CA8EE5ECE7081693A7AA06646594744FC1AE4723B -49EC675530C977FF95B41B1AF51A84E777F1124602DF8F5684F3225AED18B990 -EF1150946A5D0888BCD0C79975A631B147C627514406FCC022DC0875CCF8B036 -653B15187BA94DD8C5B6127AB5069CFB9892C6CB64848D4637C523AC2A5D4B5B -611CEFBD818A1E06BFBBFDC00EF8B2602BEC466D996811B2B424406A29718C8C -F57418415DD2422065C2CFFD83949467243264B16DA0C1508E597EBC4B18EBE4 -4A4354E8837173AE628FD5DDB5610D35F96CD42386C234A9EB05C71322847C46 -ED113F60A988110CCA6DAAEBDA7155A28BC035B803B81F0FB6A05DB7EDC4A880 -80DED199A41F62EF60D904F55160EBB83F40D7125B66750C881F809F30E5F72B -26748422CA9BD09A8FF4D86F1561C3B8AF623DCE26C85BF643700759324A372A -B2510533A3B8D885472BA12963E9C400B81898E6E116F4977CA724E782834A56 -D45F67C46CE5F9C0C267D39ABCCCCD1BBB002B4F7F2890B868ED1071BF8A5B0B -825DB9EFAE17C7BD9B887D75EFABD94EE0B52FC811A8EF3C94EE93838F4FC793 -D38929D6E0AF3F6D624F4BA160BE513F683E7751FAF422AEEF111463F6B889BA -B264156139AAFF7A1B64790F78A9168AC655FD94FB82FAA0828F1B284CC2D027 -CCA9153FD60BF80891AD0B45F0A356A3F7B90B0D190F1CE69398C1F2C5B8E99C -10A2C2E97C530A8614E9203F424A431220A4F5333DD281FC1CAE2F2C0E6EF57E -CB9074A7C7C0B355A1A567CC2D6CFDFEC64401510F29EDFB0DBDFF88D4FAF643 -8E721BAFBEFB4E1E5B2AAF576027CBB3A2BCB8B26E252CCEDFDAF8740104724D -020CE168B39A12E0AB7F4E3BCD05C30C5419A9DAD1C3510CAC11EE4BA2B74818 -88A1320E5FA1D6BCD4B58877927878D9D3A65C38CF9314FEA0E37EDA580CF121 -FCA5FAD167856A8588BAC41CF25B3F9C0C158A253D40B53AEA357806A3D0D706 -BE64FD7072267DE22936D8CD0E33DEAD240C795750299728D41532FD445692A9 -08D8EF48054B22F12407C5846ED8F14F24CA348FF9760008D2F85FFFC514789B -63E5569E73BF23A6413C4C077A7471E7275107F2C7BABF43696B746ACB2F4D17 -A4194B4660E7C797D3DD3785B92EEC1C7C9702F5ECA5BECC027FAD6731B49E0F -08F0486C25CCE8907B68C18DDAE8B42655B46B19B652670790CE1C9F3C8ECD3B -C88890676121A2C89D464D9F27B3CCCB5C5C014D198B5AF358699B998BB61488 -59DF9D0D706B84D457DE5430E8B5B6BFB5124B16C626E9B3774AEB27B3461E73 -0BD7F788F60264CBE30D39CFAC48FFD28ED12D55C7D0F2CAC21AF25FD25359AB -817F0320B766B414547B565B52DF5702B5957A0FB9D7058DD7F803715D122859 -87517638A22E700783EF621F407FF829E19C6B379AA448407D79FD4F76BEE1DA -71F6295803F0E7F2EEDF22038E3EBD6D56A1F0B72D203AD1A89AA7344ECDC16B -83AECBCF61F07C75B07DC7D0D5824281C08F0372762047B3E745C58CFFDB701D -2D35513F4EE938EA93D7A1FF911C07EBD7AAF2151869CA572A225D305E4D2883 -FD885BDEB7876A89AE4858FD2354FD4E347680E3DE3CBC048751600EE94C8DC4 -A64C4ECC6BCBB494A8B5DA6556724CB090FC00BE670E7D023F843CF23D363BF9 -36960292D6FBA48B69330631A12A871E56D9BC8772897F6492EDD55AD6DA5117 -3937DDF370CC6B366555DA1A22700A876F6E535E07F76C28B864064D5474A8D4 -CB2455AAEE25F2CBD6CD19E9B91D1380B73E79C7F852596B97B3D1CF32064594 -42B96C2FFFB054647CE2318D4EBC68EAD9DFA5029ED858DCAA0D5A972B0F8DA2 -2E080D507304905ACF3943644BE25757DADD2589D77553BFDAE17CD50D3431D5 -1CFAB002AA9A493F305BCA941D8CC78B61AAED56E4771FCA6D29CB0B9DB7F542 -AA16E37E647A3D71D0DEB3F18D9E19DEB7DD26DA826068554445E54144B6FDEA -949D5D03EA3238916260DE4AC2152200977C51E5693616977C581508ABEFA156 -B0767661AED9D47675F71455CD143EA30464077398E8835FE9057C6FCFFD6576 -8EE913496CB05D8E3AAA6478685A5E03093A7F62BA5FCED32040D00680141C48 -01DB98BEC6F83FD2B395A97C0EC0617223F19486003374A38147AD0AD996F6D4 -9E6B70187368A368C84FF0C5C2E143CEFF967C279265FBB2F1C5B94DFCE706CD -702C0792DEB7FF682848529C6B7A40BCEE5F7F2A868452665E00B8140C1369A8 -133B5114A62C9983FC3A13537C4D614DD9E513FC9ECCC001BA6A3287D82E9E17 -FF5D88A373023E0A34CFDE64113A6BE7C365D68A64D44F74205BFC5914D669E9 -06D94DC90890DFA84A169AC8D206ADEFD4A281C59B49F12DCFF9D9A2A4B42049 -1509C1F929D2820803279DE83D0A2B20887FD3026604DB42716F32378F996CC0 -792CE403EB698C865C21D26600E8706BFDFF5267F7D9DE38449AA71FA2C3EF9F -5CC34499FE2CC522142C8C1D55D7E6DF5188F9263F37F51AD78E9279A823433F -5755D9F95094B7FCE2F2224236585967CF767461380E28A674E831DC73F979F8 -935D6816947EF70D41D5F64DB5BCA12C184BFE59EE26334C7C9EFA0DD1C6CE22 -D8315677AA321A9B470F63ECE4DDE11AA3604E8B0E9DCDEF721138EDAF421D7A -09D9D6A74ABD55112FEF6593C062EEC5AF3EEAFC4B9C831C7E8D56B332E9844A -FB85AA1EB94C1708592E5E7F3266A037CA3AF551F3679A0B67029B61E9D20190 -2209D680032D5DB92CCA9BDA51820F2185C5678E879176F4DD7A9D64328F1305 -FADCC214B9BB8D9AD595EFFC79D6CD443C2F0B7DA981FBF696A43D4B74EAC3B7 -0441144EEAC59F52FC83D7CE750E0F9FDAED943D9B67BE023367F920DF5A220D -C18432A6AF622F53D0B240D762AC25137DEEEC12AF276246943C4C804254BB04 -9C2510885398BAC62E2F67961B2D24F00C86053BB14200DBE1AF4B9DE0BE615E -127F1FDAAD1AD4E939C1D3DC71FFAD3B9264AE547CB5F11B4E3D93038A95B4C5 -5B0D4F249B20FF04922A1158DA5A7C9B99971AE16FE252C76C21475165CA356F -1F9612552BBEFD2A020635B7E0159E37847CBF22B9EFE07FF1CB9E9129D1AD19 -E979E52F78207EE4DD64287C0A929FB5BA5AD68D395B61CD12C545C6E88DBDA2 -2224BB1751E82014F2995936B6144509AABB965D9947B5B5D1346C1FD14DEB6D -36A559DBE82A31F2DB8830E260C9069613B8DCDEF6E6A88C7B0421A4B99D4EDE -F22CAEA7D7B519A2D12CED44B4F4DD63E3011779EA4B44DCC803E062DBFB6BA5 -098CA9E78832C1E6C6B7C0AD47350BE81377EF66A93134CDE2CBDF0EA9DCC5ED -E38F663F72B1810DA8C23F287ABE369C496902E3D18B718B650324FF7D7434C8 -6B8FB37E30DC7C5B59DB7B8C982194F148B26914447FA86CD95E9781B3918DF6 -5FF76FEB4C8F0084BABF786C5771ECC6F9033C1528C4F0C5008F19D8608557B3 -9B32BC80BB28CD3C9636A8CBFDC7C3ADEED9BFBA9A59904091E31E7AEAFBCCE5 -2DF80869EFEEC3E3B3A5C20B49720BFE300F8D0C807FE3DC3615DA21501AD3B2 -9F602644E6CFF34AE0E34C8DB132643D7EBB7E485F9EE658D6E5F2474A0929BD -768056CF7A4CF2D42B3ABF73B5F9CDF68BCA4753CE33DCD014F646F02229F9D5 -A207A0CDFC782280B8FA180A8B0D26BA629672E6DA6AC08F523C030747C7DCD1 -2721543837EFD203912078F1C21B4C12E1D3D99CC3D41A1EB4BC7A9C7FF233DC -56251E5951A62BBA5164C4455FB7C420B1544FFEEDBCE126AC7BD5259C877732 -5F434F717210DDD55C655AD55C94A81238FCB7B105DD2B13BD30CDF70CF5190A -6B2C723EDBE8E171EE85CE4BA5010E254C217D8A110710DDA85C1C16858D84AA -6CCE64E98F873104628594126EF0B15489D651D8E9FF1EDE0F7147C3E1EE5852 -629A2851B69CBE14F784805C22AE7C9B2CDC7EBA0661DCF803DDF353E2A1F5F6 -8AA7CAE75B44C6187180B7FF519208887DA1C895BC7B8B1783E7EB487D02D234 -4EF2E529CC10CD2538BE4879ACDB5259E694675BA50DB78A91347A4C0E58573A -055A91E73E3A6AF81E890DACDB9589EB34E061E8936D1DF638B35F22FB3EC97E -DC0FD73913009B9895E4C95CF9D7719D9D63C25678C45372667AB85BFCE4C77B -A37FF8E0E6215A718E1A4CE6DD6756BC93A8C1722288FFB56A4082C530D8F47B -26EABA70B663BB51AE64FC03543E7C3F285A38FA416B20F4A73F1442648EEEC2 -3611E13EE34250A248798A2F0B9D6E3658EB1B97389A66C96C96DF1E41A392DD -F667EC2A88C557F4DA7F708A33692B98A8A75212231B395D6785CDA4297737E5 -13C16F5FC9CCB761CC3618C75B259F46C45926F3BD3E4994E6DBB890997E3FF5 -D0C9185B9D91A54E6B0BAD88018DB6466492608DE79791EC93516E67C7C52977 -F9E27B153910EF29F9F24B0C9DEBA4C3AF8C59098BCA325824016E26EAC228A8 -1126E6D8821B379F140D2ACFA1DEB12D434BD0383E5BD448FF624D8A9FCE8CF7 -D843B625CE6ADF6F89794CE54C5B6049BB95EBFA62A296515688317FD1E7AED9 -97A2E7FAA32A4849114921C752AEC2C52B98C69C57818EE73CBF916A235F34C3 -3E05CDED2956DB5B0CB7D51AE40E56085E5EAFB0BF29DF9B04BD66B030BBFA1E -CE3C041E8A175033AA4B4C592575F28775102F8A45E15E3E2D550ADC06CE6514 -B652105633B5E7876059C81527B9512C40DD586CA25AAD144BEF5E587C97E6A4 -45B9772B8D54C2B75D4A716B83617CE59A1E52889613FBBDF5680E676F430ABA -8D80ED90B8410AD5BEDD7599306A8EBDF90107594F191F927C6D44BC816652BF -95C03DC365DE827A1AE756FE769550AFBC535CD3F92FBA42098B2613302020D2 -15F884D51ACD348FF9A0441F3E4BFC2C02EA7CFFE8B388BC0640ACB468F3AF2A -CC50955F7CE335B7E7C8E16F03A9DF18A31B257B6106C3578A343F16ED459E76 -43FCB7DE1E9F7EB80E5D21B7D4BAD5D628F55E1DE0ED07EA926E73FAA6FD190F -796E75D43954E67F8ABD25A6414F08AEE76CE48B180CB1D3458F563A3EDB63F6 -C9C3D9078D20914B83E7A9DBED2A2CE6F0775D3EE4405148F15A5AB53A4B0626 -E24322A78F87041E956C655601CAFAFDC6F3C75B919B4E5A584E9570B6F06302 -99CFD1B95C575E45AC1EE59C798E726F129643964A47283088298D9ED6788B30 -D48341D03C2C1BEB4F31BD92ED5494A6B4039A88DC8C726E053006F9798E9C5F -BB96B002056FD39A7EF2195335D04E67EEF12E0A16E0FE37FDEB37B925144A7D -DE388DB0B4782BA6D48A2084C5A821427F97D22C1938BADC908C772F1A578179 -4FCDC28D435B6BB443C31C4C9BF6CAED51370E133F64A53D0B56334FF57AC964 -B6CBF0D85791D12C68A7A8BAF82CDA61335057A1B8FF0746F94C93D360F4B0B1 -8FDACF3610C902BD03E23FE6FEA2E5935067D10AE5E83ED6214B0BB2D4A4BB49 -F05E89CF47483357C676989DE740832C4E004FF1F2F3BCA3E34DF760ABCD85C6 -95D97A55885031DE77C16B89F18648AB25F9774E495D4751ABAABE7A25CED555 -60CE44A39581BDA539D4733919B9948E2257DDBC67C14E6CA051AB6A2494A818 -93C567A1DC8030900555C28AE6D1A0CC6513C7B31A3F4EA137EF925CDFF3F5E5 -CC9C88776B12851525A920456464431B9385B6D1508FA472B3DB12979DA517B4 -1568600717B7515DBF20E33240405655B3039B7B8C37BC146967C42C4548CCC2 -50EE136F210442A8754946C8DF57016D0109AC569AE4675E111A7D14CA742BEA -47F0629A7EA56D657BDC06D84E4B248A2628123D100F5ED185DBE2BC67BA6F1E -CB72947E8C47E53D91F3A28C0125374D2D78FF3EC984B3EB47A5B1B0421F2EE5 -4827EA2D74EFEF8427FF88BDF27344A82B622327EA307D805E93ABC2DCE0D457 -46C2463F1F5FAFC898D6C7F64561E385646C8C71CD624F6486D9EBAECF04A0A5 -ABEE1E6495CC0B1554C0702ACDA0CCBB7275703F51EB6F10D955DE95727B279E -9F61F19D9D54A638E0BDD27FD15B7DE67A06C31BECB0C800DBB1AFB099CCC2FB -0BDA829E02EA8EA8CB86E97F9D074A99CA8F0E464762BD1B0F41B444BD6BB73B -916DC811EDAD9F9775890D9FEB5337AA6EAD524C1E293A78ACB15BADA0BB59FF -714C43A89459636515E61E73C2F4C648D2916424B688896567E6B53799A79697 -E9DACC8C43A3DDD425AFA8B542ED9614B482F73DCCFC20C4485A67545E241B9C -CAF58CF1811D639E6C79D013C9CA124565D5D9FDFB2044198A41CBD6ADABE1BC -F1B43683A55E7D67E1E00CC18986F446B1AC2FCC22B2A2F0EB7B78E567C3987F -6619BB27788517FDF9B5603BD8BAAA894CBF354FB6F066144931F91D1D8EFF57 -F75B1ED60F4204CF0EDCEBD9252EA04F29712B3907A7AA75964C8ACF7D216759 -931C517183D319B5218AFEFE28F64471C79447A8C96A02D2974A67778DFD3409 -BC4415F8D17B12773192F7485B93E6CF9C99C281514C1E1BDF3628A5F093520A -9CADA2D9BBAB43139F4D067BA7B1D799BD3ADD62EAD68A70C6CD5249CAD7BD87 -C72EF01DE59557A3C3479E36CC872062034B67BB60D8EE0B703443CE7B982E4C -A6714F3333D6780AA342A9FD1D290225A79536F222F2393C5FD6EDBC1325C4BF -61D3D3E5B0C7FD0643DDAC4181FC223C1CDF89A44E542F2AC67FC46D06881683 -4E611D1993F6353E65086553C9D8C415FC809A289795DC5CBD74FC1199E0EC66 -C984180B57F710E59FC74EBE76A8C2CA96AF6A7774DB9879F9A73958A8DAC26F -BD6C2CBA67E3AE7AAC3AE51CEFD4CAB980AC13FC24683151C15E83B23565214D -39600CA55C611ACB9941F78B5349B51B1C489119A4381912AF6D74508A1194F7 -D825C41B88F8BBA571414C69A085CF400D4F7B88D16DA3D7BF554FB6A96BF754 -238680BFE0D23146EEFA3CAF7ACF4475DC40A446758F5FF8FDC0BCEFFE4C5D23 -6DCFCFB0663B70BE4BA681C5689952A7A26223CFEF28D76DF18E6170399EC32C -14B40821724CDB09EFCEDCCC932EE90CA228D888B76A18AE6D94FD69B7BEF356 -13EB8599508321F0DE786EC7A5CB4D6A218E8A62AC044EED391C8F6D4F657C8F -D9E5E8ED382685556E5FC2A8214F93D1AEE16A49CB6A4FFF2EE61741EB41D56D -282C083DBB24FA25D4C765E336899B10EC68C62358CAF2CE6B21A74F9E554C82 -221E8A0414E5397DBF86F54FB355640CB742DC10CF865E0C2E16EECF709B2A0B -908BABBEE0175F8CAA010031CB98818494E670DAC8DA0ACD46959E51669420D4 -128E38F2251F7E9F20F107A450E23A658F3B6058F63D699B4C5135E348CFACFC -58BA180FB43251958D72F2446C6DB69A17BB2416B5B0975C5F01D4B1C29455BE -538BA23611CD5FF3F06278641AF5458FFBC44181D9DC7D4D6188D8A506D61035 -338C78D5B248F2812B3493F890F397C1EEB051D1AB29050F1E1020DF89E192D0 -930A1EB5E35E0844ED2B7B39C5982CA708A33E5164CF14B10EB890EFD606D80C -D08206B43A60C21ADAFC0A57A392B40CCFC7FE02AFB2111F3A20B18AF2F8D64D -C511FD613492F116AD08D2F6E8193F9685568B83A08395331CF44DA500C405A1 -58D1E63E6F36CF298C02D2271A27C9A454329882EDB15736CFFE070FAC32ADD0 -9CA8FEC258CAB9B80C0E4688322B87D4AE222B574C5C599DBBD24505FC00876F -7ABCD94C089010E6DBFCD033DA2476EC01E7D0EEF82D6C761126C42531CB6880 -7D7D887817FE9B688447A04B38709197A87F4C0DE7D26877E08E53F68354C2C2 -492B3F3C82DE586A5BE477D2EDD5A8FFD23B55D05BBAE7F6D6ED28BAB27092EB -C859930DE9BBB54EB2DB5452302F46AEFEAD89721FADA13D5340C7F8CBE0270C -A8861D53170E8050F5C60D72D85E2767D42E7A9407D6864A2118CC70A16C80AD -18A214550E33B636BDFA811DD05C871E9BD39F80682BE56F0E9D0132D5B92958 -E4DC5F4A27BBE2D2508B6B66322C4D2248F09B1112E63032DE8D750092197808 -262715C12ECAC600AB628B03732E6214AB1E2CC952B4BCAFF89D31D186079AAC -8D18BE05414AC7D3433B95FBAEC5186269E8C4F5D01536331A78A3D405DD8311 -8D46FCF30F6A339CA1E0C12BB42BF4C46612F3BEBA9D5822E3978C7E7F24B019 -3F883DE1D353C6BD609698251802B3BB06AE88AE85CF069C70AE3029A66DC96A -2620389074E61FC3FF708B5B9AEEDF245BAD27A66025636ED25A38A1BBF095FD -74D0A25EDD692B863A29E3F224AFCD67CF5FB9EE9E45C06702CDF81EDD74E000 -653C3CA9A8674A8895FCF6922C77EC3B63115CBDD52E8859A7A2F736C9CAFB22 -5A62C420FF7E6410386290B35DE4384DB00AE1077CD28CB6A27392F0353260B2 -8964096063D8E225240E0B357FFA444FD04EFB5B9555A7AB653C9F81D879E718 -E408609E458BAA7F912B8E8587A14B27D38792CF0B66EA0BF6FF28AB27D2F132 -0C4EA7DD61F4619A5131828FF73B622C8136E2DD8516194FA86B91A1FC11DD19 -315B3BEEF7BE8856F36C5A41ED2B8FAA5A35C46332174ADF029456721D204003 -17CC6CF3DE50601F8DA6A943A1A5FB4EF6263738B2801F5816E171020163C3A7 -4A1EFB474171B8B54A62E29A84B8025C0A486BB5871AD62159C8C2C2739BCB3F -1C22F406E26F311AF6D6E5DCF9394BD6E0F2271E9347150B6DDC8E6EBE12BF4B -4FA1C6D03A1ADFE14053F1DFD4086EA3FF849AA0CBACC03AFB2567F9A4A5E3E2 -4CC1DD4DFA6281350643C771672B4E8141593AB7CC1D684307274E42547239BC -1A66D2F9B88FF19774F77A29DDF1441094DD13FE8B60BE3D172E2F03F5642995 -D3B4EA77D4B8C2A5B95E17FA3F4FF3BDAF29D8FA2A1B269839A961E6D5F05079 -7914FFA78F79641CEFA7C1E7029B45CD3DE6289FEF5AF3294DD287F8243F4816 -6963C42441B459C2E47C48D465B3F73117A58E45F4849F7B84A3F7AABBB67BBE -C04E794FA35C3DCB2EF8689864AB5EF05CAD5839A181E6E558355A212B7858A4 -B91DE81B88ABBA4DD07243F9B7E7616F28A294A7A6BB6A91467ECC40DEC2DD68 -C46482EF44B79EC6726318CDE1748366ED8A46995C1CAC6AC2D95DF400C565D7 -8995FD0D12B5059FA90DC42F97176A89A6B77C06E89DE6AB4647D89733F5CB76 -8CD689C40B2BDB5400914EF8F081423A9865060FAF419E3CA66BA378985F9DD4 -FE2A90B6B7C189BF2B9530D43BD54AE78A4E6F6CF1436B5B09165E501F5D03DC -4921066327922289B1642CC41DCF873219055271129C7A1B573AAE9EA60E0072 -DBB3FF4A4F088408012F3F6AA8C85FD786C1561431014FCFDC04D9EC154B14A5 -3FBD7C31E281C866EC9336B78531071144CDB99FE5D9411EB5A49DD0DE0270A4 -03394B3129890428232C45D40685C9741CB09EE1F1382216B1DCD028FC1E0F5E -AE9E6A1339E911DDAF47D74ED9E46908672F505D44D5B96674EF2943F17710AD -C05FEB120520F8E5AD6293FAF919A49051D2B7B0B87C9926512401D2B45B1F7B -818BDCB0F26A70F48DC1B0DACD6A2E5CD23483F545BC78941F5FE1008B487193 -B59180C93EBA03BC0DE031C43C172F4B2FCD30B2845ADE4C96C662157B1001F2 -69CFC12DE72A3901E825E11F5F7B1B1DC9F8A783B840CA9BD21D082F6A9CD8C5 -3CD6EA5E2E4ABBC4AC276CBD9AA1E73FD66FEB9262B35C637F8392A92B598861 -FDCAEABF130A5C21E646B711566EDB6803F1012CE88E0771F7001B683094629D -04FF9CC28D2268C22F8EE75AAED16D4A2F95851E46B9809CC519DB0E39618DCE -C22BDDD8BC151BF4BCB0F7CA35786F6B68F68E8AEE4032B1BD963A83CB00A249 -1878844DB4DB27B7FA585622248E4FCE609E4521602CC6AAB4713FFC6A39A396 -7C2A1A82EF4D6E814B6914F24C5A5AE2952875EBD6CE5B7429582CAD0D07DEA1 -72E65642AACC1DB37E1C51B920BED00C4C6D597B5920A5861DBBAE3B43BC09A4 -4BA3B4C52B3930423C6D2D39C5249F6C2C0EE21B27534EDEEDCFF791A302E5D6 -2D18005FF18C046714B9938AC93B5B8099CB7DD3C142F3BDAD20CF23D7CEC7AB -C64D591809E95EA1788036BAB68B8E4CDB12A0CEF717BEF6340C9CA1092BF8FC -C30EDBE372B3D640700717F98E9912B814D1668A1169259B529F3E12DF309B92 -E0BBC7B6A9C2D4903BD44C4B0969E9E5DDF3B8CA44B8BD065C77CD2ECD3A946C -AEDA6FF655D5F8C94509F27934B9207534C98CB3361D8767D22360F5C4419E52 -6A3A861A6C56AED8F6871DC5671011DF104E31B3D5DE68F2DE00F49673BDA295 -F03EE38F4F2BF2CBE7274A6A6694DB0AC0A90FEA1714F798096B0B47453B9F9A -6E7A4652CEFDF5755A0C9F17C5574FC5E5623874D5360ADCCACE26CA2393188F -A81CAB8D3F35A3FC81D43D450A073474A391A31D7FC994416AD2DAB64AA6D4D5 -9AD3DE4132A10074BD4A27ECAD779F66C3711BBDD7AC92203583AAF0E70483D6 -FE5C76A25FD50101D6DD76C9898E8A996F6DC34F1F22085EA743F966D1FC36C3 -08A4CD8D337DCC8E1DB190750FBCFF37726FD48D1E3D036F1556B755B3C11974 -9F81BB7C7B6430235FED173EDFD5FE81A1815F1A424E372485321BFD6D92ABE1 -C647E7A18A0CDDF2CBDFBD5BC0A1A57855D4AE646D27063179B2FD6E2A01367D -95D63DEB069446A7AD2346ECD9290472E4D057BB82F5B2F86C8C81FA765FFAF5 -937C8EE96E839472E591378995354261EA890AA0CBA33CE29A7CA6BF1DE2E312 -AEF2DF4F66B742C91BCFF17635416598A0CDA87D2B94E0AF915BE7EADAFCB9B4 -5BA814C81CE08C377E448EDBB082987970203A20B2BFE8B58EC3E6AEBC7F0CE9 -DC5733F5A05CBC25152EDEAB6507B8BAB2736593383FC9FC744EDA54C67726B8 -199A3D9CE9DEA371CF1B47FFB18951D8F350DE7FC5D45BDCBFFF8005B92DC257 -DC098528B4AC8BE791F5FC75068506C2ED97CC77204E2F37248A2BCEC9ED4FED -510A7B9603779B68C57D57A94DB76839004E736177752A2A63BCE0900E00B493 -519AC8820D96F9304034D948C8309E4D199A5BF01052C9F807D27FC0C1C20C55 -1AFDC48CE6A0529E32AD7C316A4D313FA9E28D5D68E4692C48A9A030BB275DFA -004B19FD59F6ABBF58F5D2DF093F0ADE1EE44FABEDA97C775643F4616A0F5262 -076FC11E2C4607EC5AA475B89BBA1117182A9CA235FD5BB9FE9B15798658B285 -6C35315A41D5DD6BB6021219DDF2A30C7A695330AACB6D180F53A2C5AD703A8B -41256DBA79173524A8020675CAB62E557CAE00B396084BA76A734E1E01D46BFC -25AABBA5FB4D48A1654E1BCB76BB5E792B2E73F6E7006B6BBB435979C8218585 -C41DEB66A2B9152FEC7CD454B4EDA06A73F35AEAEE33016A2142CF0623E93969 -F86E81D72CBDB19B4BBAFD70DBF0F8EB16443A9987769C532B2A5053A7B55910 -50E459A1098F5467E8175AFEED1354F1C50326CDE9E761427F585DEC3C9A4D36 -A76A9CF4C0EA0B8712E890F81AA6C2A9A81C8D9B061931F75A257B93723BB6C6 -19CACD8CF81536DF0D2A466463EF195AF59B5207CB52D0902AEEDB39D79EB566 -F647A9138A81F7B3300E8D1CA514B6C481904879AF3C99EDD1D94CAF56C61166 -CF8D8663E452270BEC6324A17F6893F1447BB9A3F086E54FC1C2AA2D7F58F66F -7EDE9BE293ECD25F74AA7B10E3DE10513B13333A4224EDE43414EE9F86978C1F -0ED1C404CD511F243A1632663BA338317DC7B684A84C1D4E022D567821331064 -D16F76253F14F91DF2A50E2DDBCB6750D6A75DCD3356AEF7CB5A9B699DCDC80F -0F530B66BBF4A60F102C402DB836D29BA43941AF05680AD51D4F3EC668E6AFFC -CF0D36B5CDD912A6CAF2082B702EF90E16906596E4BC20CC979080CB78FFF0F5 -C928F5EFA8914DF3E56D33582504840071B2FC38CE433A6DEB63E6CF6E808E87 -9866B05DF8116F0972DD25F2FE5232522057A095E311C247336F669BF10020F9 -45B9B454DAE2423E0E9B432B1A2E3470EBA9CE177EF28091EF444045CAD0EAEA -23A3B620D0903FE4185340014920AACE478E93919FF0C722B77A448424D0DEEB -819B8B686125A6D8CC719711E108C6A3F9EC056C4400CE3B5D209696A45F5CBD -913F3A9AB9A6BFEDACD7C207DC01DE4554EA63400489918123741D1AA8843EAE -14BDDCE827785FC2324CE7689B0B7C2075A87520B253AC1C61AE34F5AE34866F -9B68061D1C1D4E4C5763DD68801ABEAD6967F056B8D934CF84081A6A82DC2B91 -2A0F350A5FEED1C1116E3E94A18427CB4A4D1A6935532FC4CECF43E10497C190 -AD3AC6C300A57715E3FB715AFFACC30D4D4EA325AA52DD9BC29FFFCC3646A7E3 -F97A12FFF8E0E355DCD3CC5E68CBC9FBD67DEF5B5157161BBFF5B61C401AB639 -DCACBA6C3F09E9683F872288ABFA4176CB69B8D5E61AAF135B7019CC8F6AE07F -573B897F7AFC0A5FDE3A922DFA3529B65E62372F2CD8F57B6ACA0FC382C148FF -A6CB30FE9E9891275705FFC71211EBB0E7307B00E629E2CD9F4BE16C072F3247 -51ED89B8B087D69DAE1D6EBC237AB8D3483A8F9D48C2F6B465430E12756CCEBC -1C5E3566359B47A0AC0B5D4A5A1B1712457FA33FA5BADF1E302CDFDF655D5ED0 -FA9C6666022302D1DA091F8A19CEF58923AF8996B4A5AEE228D166812A6BC684 -9C89B9E6F07B71454B91F5EAC87333AA9B29B1E83A3FADFCCE5AA5044FAD8167 -F6511E27E444AF65D09B8A7A0312BF78EB35CC34545F9BB06C88A074EBD5BE87 -763B3EB1EC2A4CADBB704F7A2DDA34B013390F0B63B0A618C6CBC2A7156608CC -332AF4C93466EF7D18E85DE5C5B3D2AE50A44DAD39738274E4B1E8D350FA4ABB -0189273E99A3D9659AFB5C29C68FF969D3681D28B9322EB08214CFF9289B52F0 -74E74ED0F1DDCF8011A5D3BC4AAF6D8EAA4643C347B912544026D328BA2BFB5C -ABF3D683F2A0AA01EAE0DC9760DAC0EDDB432415B1221D35391FC5BC5A30AF20 -79469870D85F59B9BA86B928A0BCE261D4A2296BA7AFFBBE7F1AEAE1108CBE81 -C2E5C9D7F0B64E634268C2510EA92E10C1CF3AA7FD146106513F7C1F63823DB7 -F7CECB5A80ECEDCB41D3E91CB4F3FA9C8FBF3F62A0C488933D55DD2DEDAF0947 -0D067211819598DB2CFCA285E3A8F74E7887265847DFE8353C428B253EFCE70A -766A823759D68B665CFF11BF62071F2F8879D076429DCE282C36ABF335E2DE77 -BB53D459A024B61A5CCE35ED62239410C0E6D2194CE14EC54DEDE8F86BA83FC5 -3EFF391C331C78C5C9C754F81D1FE358D76E84F470BF6DDF6EDD643E62680098 -03840FDDAE498DA27306296B282E76A03EF8D593EF0764AEFD4167C98059FCFF -CBB638E477D6FE42537F6F7BE5957B0EDC591363D434D1C60F46ED853E8E343B -68CC70D92BD90958345DE0CF9F345AB7641CBBDF225AED9BF559F6D2CCEB3D7E -91A0211CB5628CDAD748F37A8E49369425CEAB98C9C4F4F0554F263371D2C9A4 -16466A96356A3EEB31C362478D5D6B849E02F6F1F7095F9A7CDDEBEB00524F2A -3191A5B347CD1C75511FB605579D6D718723D3C1E26862F78B5803AD3E6958FE -6777D6E374B40F799F13514A7DAC43DCC6B68B7A5A0F25A57F540FD87AFFBEFF -3BF2D62098BC62B9F111E663E753347E7B40B2430E89C4056C71FB142DA00204 -6D59F1053CD6A1A030B6EA70302114E4480993E3447C926E208226375ED723D5 -B18698957750DB23498A960066FE6FFDF50B97B7C46960DEA0170CC19568A0E0 -371359569055135B47AC83242238F42B29A460798E246A70185B30A026762C21 -B0F1F1EE8F3F309AE8CD042DADE3E36151B3B7929BA6A14D90D924CBA141D1B9 -8DDE94E46286CB6BC7604D84389890C0AA8B97D329CCA87E5889F695920588B4 -582B88B39CE78B8C35836AE8BC5C66A86DA1267E46BE9F20186DC3BF636FCC29 -141302F57026469542DEC1E8EF2B54814EE534C87A1B4699D58D1CD95EC4B957 -802383A21B8CFBF29FBF643E452898553CD5FF01F7D73E461CBB43186A96C66B -BE5910A0F78C730FB54611E4EAA909096A77574AF9F481E0CB8D15AC003F336F -F8FC934023F37DAB1F5E0FD58575440E3FABEC39851905D14FBE4745D11246AC -2EC21E7E547F4E0620EC4900C327E20248F7F6D60BFD8564FBBEC1D36AA9C27A -5796EC4DAB33961A2493EEC2035BA4C49FE459BE440562DC1AEAAA6330732146 -CD7E01AD940744DBD87AFEB4671A0A0ED5CF115E3F4AC466A741F086DB742965 -3204FEE04DE803F0A0F53D1EFC1A916EE0EACE7476E1C173EBBE0B560E95242C -5CD33B424B8BA6C9A26CAD4B4A3B37C6FCF2EECAD1E8227203686172B25B376B -8B03F6B7C6D6184CFEF80170C1E8B97B77B3E7DAE20A8DD97B04FA0D2B955F92 -8994806F6B43944B520F4DDB8B0B6DEF2A4AA7E427F6524B915FE5145C055915 -D2753FCCBDA11C598DE694011B929475D5A1855934B03118D52ED86419047DAE -CAB3FC969D072D0036319B517B51679755B7E5647543BE8C60387800139D5F8F -1002D480015EA8251624DC1442E7FC84B46356200BACD8C99F1A581DD42F5798 -5B5FBF460CF1F10E3125211B0128586D65B73107E32FDDC354541917310B1467 -D92B15C317576BDADFAA7334C14E32C2D811B22E6ECA84BE80532D5FE222576E -94D6950015F2EACCA793406DC18C427864AB6F4E97EAB9BC634DD0B3179B9EFE -2C496C1AA898C2E821E23B5B16E7C3081360CCA50D42A459FB603475EFCBE5C8 -8610E9D856933CE6328DD3EED0C2EB4497C9D7622259AB0CCC303901051C4136 -4A235BF3CE520FC4A6D4E99937DCDCFB359D15FB1830A434CC01FB8A840D893F -79F38DA3641419DCB90165FAF459070A2C4205E1772ADE564DB3E5AE47045EC8 -83FBCC23CC6D41C71E83A01339C2BB9A4E8FFDF67D3DD149C13B8615EEBE0963 -21F59731B52B83DE23808F86523F88464599EFA1E726D3C080D13752E18AE05B -60CA2052E559B00E9F055C692F1EE98A0C0B734035A21D59FDBAED45C5541A8B -839F9757C6D3041144879185F75952B2E1A19B01CA1665B50B7FFC911C4D9D1D -05B0107D9FE3961A5B4A447C1CB3E8E88836D9096B656FA15CB9EE3D19A5833F -A5899996A26BC047D0F69BB9D243328FDA3E9D9975DA456946070A48E641D10E -676B14F21A2610055B5D7711620A201B465EDC837E661D4633AF96F60CF1808B -D32318CA59537415287AA572AA8CE82E522ACA934B9AB564E1648E3378648C26 -01C8EEFE576BA9A308E2C0EAE7A100F57C0DEB11623C6FBD57AE045048D4D1EE -81622AE08EC95179E21AE1C6D5BC9A0463BADC098E282B18255A0414270E41EC -B98ABF908114CA425B3E4609F5601151B3AC79055A14E1A2CD87ADE46CDC2047 -C4AB59252E633EBAE216F9EAFFA55811772ED0B7A75CF4AFE8A7E59EDD252CC9 -43FC4E60B3E47606760D06E3C22C599856D0C5FDFF00627484E77DA4D6F51460 -5412849807945C28B25A0B684E33D02EC26401708C1DCA683C85FAAF9F3D74BF -66C485F3D5F73B785F0A2CE231538BCC1E9DFB145152768C84E32F33CD0BA1BC -36D0B9383AB4333598627553202A39EF3E696C8BC58B0446D514822245D888CC -F013C52BEB7067214029B943D7E93FD42BDD589FE1FC0AF049E20F60A8B03B41 -5E7D4CE78FC1229D48F7D751407CB8ED28258B6ACE47F74E0EC4BAFBB4D3327A -6EE3977D9643A67CCCED9D34A563CCFE8BE6C57CFA39B90E5BF8AF85BFC30B7D -D6E697AE61FA9633EC1C7806636A916B30073E4C215280F73B6BC10DEDB15202 -827659B00933C6486E67F96D81FB80CABCDB9F159937989AB3E55878D53394C0 -C7D5E16C8EB90551B1F0DA4F06B911CE34423CC2328EE5E43292D03C9A41D13E -871EF89008148EAC9C5CAF24729019609D114CA82FBAB5EA34311D5710EBD6C0 -37F9D4A31AE64CA73B1499B39512ED67B605EBFBA6682D0DD96E23063CE3830E -AAA4CE2F1C6BA52DC2523DF4B3EF1F97298F2523123FEDB43F295D84E9F5AA3D -E6F1D4F813CB884E940A216A0C6658D1E69D28F2CFA4DEDE60059F4E919D2246 -9984DAF8A569DB04FD56E11116BA2296BF63ECD1B65B3391E6D8B8A8A8B95318 -8F9C9B88B7171D73E0921E5C9959186A20D01982D38CFCC5A4F91D31E0FA8503 -E05950007B611CD36D3D714BFD49F6DBF09255535579D0E0E01B540E51FA68EE -EA6362213A0B8572AB83BC8E533B63C6FDC4FF52507C34739F64C528A815B8BB -628BCBFFB3CA3C2F501182B46DD1A72580E91BF85FEF40029BA737438729C51A -BF25EBE3882B8351D0F356A6648ED0F11174EA948F3F140FD7DE1821BED2FDDF -8FBA1DFF2786C0015EC2A8437DF5F02AF89CA383E622570EFCF2895E3CDF60DD -A64B152E2F5B1DA795F50C59D80FD35AA7A2CA4B55C3A1E046C3C84882EB8D86 -AAC4750A3A786948FEC26CCF63395208DB2DC2DDB6310B59817ABDE61C856183 -500C350E58D4847F1FE95FE6068508A834B4882D863691F3DE33A9953000D8E9 -A8AC105E3486CC974E06351B1365D157A6948D49C904B075C195277F943C80F3 -786F1CB9D118766439621C23095FA5749C945E94648E70940DEA20F7BC66AF49 -0D6BC622CE00143F979085824A2A1E850D68204BF44161EACE7F8AB0E8097B9D -C4ACFC76E36776BDBFA4F03424C4E286A6B925B98EDE522B21641C95C0D2910C -6425C3465AED57BC4ADF0633D0AB3716F5C0EA050C493D84AA1E0903A20F0E3E -04F2BE6265DA7D2E5D308337E1B50D361D0BAFB054FF5292C58E12ED0A095870 -D39C50CAC7B0B010DB79001816F7C5EE04AA562E11F87CC6006B9396DBBCD9DE -4D25B032C5419D85D28306FB3543971B4384AAD68824D78C4E30C945B610E315 -013151687496006EB9D8E867B82AD13770535C982DF8F84EECA2E8382D1971FE -8C4D0F28D8CD60B2EBD10550F51B3DA50C7CDAC3553F8530D596558B238FC24E -26EFA58FC455D2308625E4ACB5A954732750A03D25A88207AF626534D73D7086 -F21936FEFC92FB0E1942DF5E43A52DBF41595BEE66DF4C66A769D9C3B316E332 -F1B94E86370C14DCB944486E47A0EC71D4169ECCC072BEEFAF645A4CF3B8AC01 -1543972D34F94639C7CE00CB64F522BE3053BBB55E8E7470680BF1F01BDFDFEC -06C3B76ECF3D8BDF4A150ABA5455ACA30AFB5F63998B277BE7EDF9268C07A751 -9DCC7CAF54B1F615F1D03CF3E58A447C377929CFCE75A6681A7BAE4FCE70281B -7E4B69B0288633D39EDF2F69BA310ABAF715E9B1533EF655986811EBF695DFAE -902D7C4F1FCE16EADC43529513B9DADE8F0F4DA4053549A930D311977C6AAE0B -D5A74E1F269D484A3A209B8F87C9D5A1E4EC5FCB83A2292DA43389FCC2756007 -EE9FC95E4072CCD35BA378DB6CB79CF7B27F017F1C78CDA81D887EAD7A9F3BE6 -53A80FE9B5F6B159E32BB7C927B069B0C94524F061C8D05810481A44A6F12846 -31FDEE232C38AFAAA1C81BC3D6DE2A4563A2656B0978DF8D53936C728C3F78B2 -671E7F22CDB339E25111E66AF44DF414EE12268DBF4409B84130157D861727CC -259A9E95B9BEA0D98F6620001C3912E22C2267D7EDB65E2C20680728C4043D5C -0DD01B294BAB0A5AB7936FEA9879682F48B1C39CD600BB8CFEA75F04D937E654 -80225375EF6F2EF5B77857FD79D050A2B20BDDCD94A9B455A09BBC746CF8D5B7 -93D5CEDE3997B1CC75634E2DA7B19788083B68F6B8ADBE69276F0E1BDD33408F -27497492E0624F96998FCC221F8587D30D45E56E5531A730CB08345B9E792AF6 -4AE3EDD27A5C6D8E0F523AE7C97E8481C775922B48E3C91F09DF62E1D41F26AA -F5C72265B567BE0B283D6981EF0AD941619574C4584CF84D9693E0CECE14F76A -594D849968EEE1F0984C7B2A37544FB2EA102B1ECBC8E48113579EAFB12226A6 -CBF0C0152DADAD834A437A3A59D6672E74DEE4806A820477FD177A8967023B27 -1291B58E507B0F68FBBAF99A963E9F90F4A846F627FAB4A2E11507689C4B5EA2 -D0A79B352E8722EBC3A662C84F6A163B64E3CF96C59AB5FE04201C0DBE426AD8 -9C7775FD046E1F2F4FFD1CF5820338C5353506C34D99D474054EF9BC265A260A -630CDCB706D2BB45C343E8918FCC8F65FFDB3655F565554D1D451B416EA838D6 -59A66763C9515B66E20932B41650E01A27E3A250CDD40ABDE0B7DBF60FD08700 -6885C8A7DE9F14F7E8DD6CD85E4370C2E3BC26AD2AA416A36877507DDDBA6832 -58E0A4BEEE2495BE6DDF7C71066FFEDAB5FAD4ED9B4D6D97B70468AC407A9FAC -EA45B5F501611EBAE7CE46F9FDEF54AF912E238315325F664BD295E53A05F73C -5318EAE8D4A34E472776F142C57F34087277308336A511A3A65B4C4CD419C288 -F6E5206D62CF4364C478E9F4C6B64E51D2457CA950B9125D22ADDA4AE08AC275 -8C2399EBECB69E7A5D0E31726E520DC5CF7492C59076B3AA425383A04C653C50 -34E222AE91DCE83E758C1C6DC3005CA2757CA73102F584CD2E799DA49C77FF12 -4911D74BEE8DB74B1F0298CA0A9EA5BA2459056D6D6CAB0A90A68986D492F5B6 -DB37630B7058B6161926BAA0D62C8511000BB7D2FCB92C5922F0519A1C1B3977 -81329801A5702540D4F84385876DA07CBF5D648BEC2030473C5FFDCC29ECEDAE -C3901C5FA181AC12187415086F68D913CE9993D40411810C505DAA8613C80EC0 -91336623D5686BE49074CF8A39E1EB7BEB212F635ED15C0CD1653E692623437F -91314D34CA09C3F66C6C1F11BBDF5F720CA4787F2441B7B9AA47C7FF9EB113F5 -E4E57EA7040314E093B6729CD3ED11D18FEA94D60E1D976C786EB52475293FD3 -C0DFB12695BED5E1562D3EDF6C9A54120CC23CD025D0D3DC32A37C5BD00D6263 -5D2808D9B2E2666CF4CF92002B9F1BD2D3E12DFDB18D40DD52CB427662ACA883 -1190B5A2F9860B20D521E55129E7333DAFAC54ED4783F40A8A7A69F04D7C286C -A52B8F3F608BCED599DBE28AA6F69A0EA54CED3B0A21D199363622352E8898CC -9B5B0355CBB533E6B179220872212360EB718BA0D9EF404E4FA7439891D2370F -BAF1CAAA2802FBA445687E743200FA6B9E85266EFA88D05E3B2720979A43E724 -64F79B714FBCF388EF35E9CDBA1B8DFCEAB836395907A0EBF22D285883B1B3D1 -772E00B255032ABDA52DFCC0BA366CFBCD081156072DCFC3CCB903C305FEB7A6 -D16B59AADA73E1A06073D20392DD17D1FF43C4E01FA6D5801BF3C61887658A72 -32E319AF638CA3D03BE51F832F9BB24920B4E47D0E3C96FB079D771CA5C310F2 -B8B4183CB714383A50E3948F6977B16F4A368C086B2A0AA57C66B30A895B159D -CB63B0FD7990279EAC00F0146D58282A8EA7367BA2885660ECFF69C64F4EEAA2 -F357FBF8A514D1002CEFD82AF39D461E2BE59543321C7A991B9576778C5A7EE6 -34703E9842983E2580DF60DF6EBC642EDEA4A1F1CC34E754327A02DF2E9415DA -08CE3AA32E1A615A484E69E6BBE4A64C2784E27626E017DC0DE42DD71EAF55C3 -E3D15BF87E9727FFEF3A66512C9458E557517BCCA1A2E92191259D1EF91D6E12 -6454380986B17C55A4E631C6DD20E5F87208D2045BACFB6AAF14129108A5B35F -41B29AA518D795C955EB247BAD1D1F03FEC701BA6CF3261EA985A932834834D7 -DC8C65409644E7315D66109D8F92DF5F42070B97A2DE3B69EA97CFFC71511DC4 -24A903C704479F445BE051E96AEE9E220EDFD0934CE793AC43843D88EA12757D -52C10F73BD34C812C1B306CAE0F18D7D1B095B9F5EE76256605E312AAF795609 -94D3FA76A6984C63809F0EB8741AB3AFF516C3D6F8FCD8B1A43F5912A2D98019 -EEC4DD105E77EE0EFF0D69A6A55370771E21851B58AD57332DE44B5B2B2AC29E -B58FA30709128A9862C3579CFD08D85E8188D26EDBA5901D510B258531395FA1 -7CD5E059CAD028AF5AF313AAC4B8BF60966CA2B53DB31F0659898D105FCF4FD5 -DD2B78C838EFC626CB81B32359CB11C5A3E9F8ADB8B1201240E34009BBD2E23F -C624C1AC532746372CD00EC50C92B576AB3D5F086B64119510DB8294D48DDCE4 -49FFFC05594275C796DCBA291312159CA9EE7BDCF3613EB3D962B6967BFE2BB2 -5A9A441DB81FC861B10F910BCF5E80B77F506EC8A64E6ED10839333BFD7E25B0 -CF6FA7AAEC17251811C44031C7871669C3343CCB0D0921BA8A9546E2C052CAD4 -BF765EA279DC4446F1D31ABCB9E6358A11DC2C1AB1CC71C244E57B4852A9CC36 -8309D3B5C0FD91CC6086DF741237ED81F847897FE5CB939AF97C1B9022CCA3CB -227B7C49BDB2FF6AE381E282B42D22BE5C6326A8602BF364BF81FB7367BCC437 -DC971EDB49E8C1AABB29DB90839A1A70CD20DC53DB0CA61133BA0571D00FB797 -13629C59658360CC0472882E8E6F085057ACA3FADEE34BE0832241EF68242F90 -AB650BD7FA6E8EF0DB539346515580E57D3B08BF7F9846911C6779A481D1B348 -D1D0A1265498F0ABCD04D50581ECCDB89117E4889C4BA30DE7155F6177E3F40E -1E9DE1367427C3A1F17C27AADEA655D59CA7B6C2FF4B833442BE50A87B2D4D1D -DB57A8B5C3201433E00728A9D9511A46C3442C3E29F6D9554402A516796E60D6 -23E6D61F0ACE1B60D45CABED468523416532810C10DF9E7C711F5356970D5FEA -FE5D366722FA3F10E097FD16DAA5B68614E7D29636019C4ADC916AA6F45E592B -C429AB5A668E1795DA4F755D74126B6E230587AA57E3F9630715DD6F224CC236 -A5F67B3668261FB2D2550F16A9700B1D997D2801EBBD0F113C47B8A13960775C -6FB40EDF6D6276916BE3198448E020A46BF782B4F02F3B1C85FCBFB2B2F09578 -F90BE57A53B596E9499F9B3E23DE0BB1E159BCD9828A47B3B1256D305D879517 -E172C1E3725C4771B3C03C9AF0B62EA0C5AF7C0D692F94FD1E554E3E52A0E7F6 -835B95866B7F72514098BA1CCE2C3613FCA568C3594534167648E2AE52BE3F9F -E8207FFDABC084BC74DE49FA0E8C61739C28C78CC994AB707C2C04860F0C3F03 -5929D056CC4CB6FB4BC1DE83D2FDF9B2128667B6A2FCD13626D3889D83683715 -131AADCE22BDFCEC3C9B03E50200BCB5321B42D108DEB519A5C9992B2D3A87AB -4725F5DBD2094F8D9ED8835777C2793FAE8FE40F3EC0DBF4F1362A148F890CA6 -FDE1970FF1CDAB096D9355B755AA0D93E6E11E9D3B1F5EAF537E48C401A75C85 -58AB20685E5C29DAAA6A9F90B066E991968475ADEC1F946C522449C0CA2A38D6 -A8789A6871F96165AA3EFB39089D22EE69BD05B4E0853D3C33CC84FA7ADDD576 -639456DDAB65EA50A3C711F78E8CACD7E112035D5D1633819EC419BF5AF0CE9D -40EB6603A55A7A2BDE2D6E9FE476B1ABBEA673B397F2510066D0D5AA650E3D1D -BCC93BF8585AA04228DEC13A6082A5DB015A70FCD1D3EF72A1CDC6D8A9705E02 -662BF3F0F8B318108CA4C9621C01D02EECE3817F9EEE14D30C34EC262CB9197A -377828142C04BA679630C281AE4A02E65604DC7FF73859163F0F0640316D079B -D42F807A41D0D128E010C3961B8A742908ED989BAA0CE2BC9E9C26DD73DCE3E4 -7E31D958F4DE4E3A1B161B2C5DDDE9D1C693745D146C83F807E5BA7E00057959 -F00E3FB89781B4F084F5B24A42113E4B74933CC32A11877B4499A19272B60985 -9C936AED3AF65C3156C8A705AB51749F99263FB2D2DC4F21F8AAC6C9168F8D28 -414A602824BA3EBC3FBCA1A8D29825680FAAAACB6D9B357B437774E6C6A1BE61 -7D146A9BB073E1903B9BE2CC9CB5DF888C51B73C8C5674B172E4BD5286F80E8C -9718FFF592B56E1BCAF33BAA26F5FD402710D27A0CCB1BCEA92D9BCA09983B1F -56701305AD3830A74CFF0091BEEA6C706C3433977E6F3BEE52E77BD7B09C1D68 -37C3A5ECCF06F8CE25F105CF88FF3239DB905472E10CFBFC4A0FBC8F587B1017 -26A6080B364D6C3D7D8988AB1B4CABF6EA6C5531F8A82F99E5B111C81F9C9412 -0C54828BBC82865316FF0D9E8920BF00E1BAA976FEF21D0A10E8FD9837799623 -E4CD5E216ADBD1D76518815FB49EE4AE73AEF9447255A99CCE4EC068959C8D9F -6FE965ABFC53DD09C063BFC80BC1E6463DAFBFD673262840CD9BB67AB5CBFF2A -383079643499FD42FDE13BE2FFE2615152FD8457A547FCBE2C1CE0691023CE42 -3409A9B2B8FA9C4280856899D1590B36596B93282128E6AA6552B8BA7072E603 -FE13711746B110FCDE142E497CB2B623682A60F888B1514F7CCBBD86150B9DAF -24C9B763172C14BB79AC1F8AE60F9847D9223DB0ED5F3B74362F4AAE3D466311 -79D35B1C81A2C48205028BFDE7BADFE708F104A2C41CD32BF8348E206E251EBE -FA68EEC9738CF3D3462CBE7DBE7F725054F08D6B9F1235C525F8E84287381A20 -10D4AC542CB292EF20A215A3BAD7CB43686DD5675663BF23D89E860D392B6FB4 -6D9021EFA0FAB6E04999DBC8CD3E84D1C751B8D24B4DE92C8A80E23488882F09 -D62FD350C636F73DFF5894861281974195F6BCE45EF55DEFFB318001CA8EF32F -864DD1459613772E6B23AB6B68769846BEABADF07BCF11D78E26CD09E76AA9AA -F5F88F95AD6EA652C8E08D1A7BDB31E60B90F31308E223B6B8262A39DE23BA43 -EDCEC76D6C8D82622F980DF095EAFCC83B79C206A314D4D83624B2617BAACB58 -304274ACC6BDF5D2F0529FCB76E9B5BC43EEDFEB149D61CE36DD4672F80A8659 -331AC6DDC433FAFD85BD5A0E404B878B2A34BDF8EDCC7E9E9147219C37C4CF50 -1D48B7F84E95074412BCBE0C060BB8FF5AFA81D3D8F0509EB8D1B2950F5CEADE -51BF7B714B9784C9A6A91AC635C09CAC5BA326D1F5C52A636F2C6B61BF079DE1 -47815674304950E4D724D68B4CAD2B8E641DF1C7B6F7587D258EFE9CA777E2C5 -CF2DE3D47D6EC50B3094CB30EDDD1B31A58E8915A4D92E89D0550D1630E7D47A -5930E1A7F582DB33E1EAF7B15E665BB214F62D336F4D90C6B8F467460BFD411C -0296ECF5019A05553316BA7286B4B9B4D892AF6906FCE7241AA12A18C50B6168 -F299DB45B7DFD3AE5DE34753A0E497B0D94B0178E66D38B494F850BD820D668E -9F3ABC7142C364D5E26345C6BF93B08B0CE0AAF87838DB65834DC4117B3CBD59 -5D315844A0CC89757EEC0204E2CE0F2A2248B860FF1DB439294E9E107E2560A0 -B804AC0CD639E314BDFC7A689BFD77A81075EB673A7C818FD97009D0BFD4B121 -46FC748FADD2A1CADA10A04566049FB6E00FB8B5C928989FFF0AC4A102D00693 -0FBC36B9EC7098BFCBE62E49F317267F5C8FB541B73DFC277DF4E8A049D09835 -ED628F1736AC2E6F4BFE40AB17554271671A348C4CFE13F58D0A5B2A7C3D83C9 -EF2ADDD7A6B674AC1B96BA31A10BE2276F45BF27344636A19E09D78E56798DE6 -774D7FE7BDD3C18770CA1DEDC5C035E4623BF5317F724BD8EC0324BC1881C437 -4EA69508C35BFD66D768A0AD744D8978DFB3DD210D5629A19D6A70DC8504C49F -CDD35E164B973CFCF36DB986C6C618AAE4C58D32E21188F8C5760DDBFF24C3B4 -F0814E471A0B76950A8BFBE86DBEADD5A2662B56A078DE456FCF8FCD25164140 -694844E5ABF924CE7CEDDBCF7F4492AFBDE34610AA5B54E6E5A44AF50F0E5464 -877D6855416CB8980E1B114B6F6597347C432F2D29E4714A6BD4F3FAE8FEBAB5 -551802BF47867563FEA5290BCE8022DF9D293FA792238B7F00F84E0F99163B06 -744A2EE93224CE855C72E1FDD0E52767A30CF3F0D451081EA69D0A80893FA79A -1D25E6F56DFED691E90393FEB1A97061FC3F2BCD4BEEF1C6F56A0514EDE39BA6 -BA4583B7FCEA404149425F6969123B3119AE25DDFCCA3F2F672B98BFC0C56907 -DA2923A73A30B8FA2377F36620CA0392651CEF036AE31F1E5FA9B2DC87F2E8F3 -B1964898A76BB97DCC8C63101EEED39ADFFAB3BE571AE0210309DCD4E4346868 -DBC33FEE28431EE6FD3D64D570E04C269F6D905DD391D40FF03CBEF98214DBD2 -2BB4638F41793E842B07A9CADCBAC476A6FB9EB23795150785AE1032FB16ECE7 -3DFE9AC0AC961CAF16B492C79B669A9F0FBC7F365BFA02C3981A324E047DF5E1 -41D2E85D6F472A6BA1D1CFC896E3DAD437689296B2DF397E40A6102493D09D29 -06E359254F761F3E1E3E66938270BD46C6DD1EDBDC60CBB35C47D6760B17B782 -76F6F472D584A07146C19846AF187267E7E1635FD04F311B7E70C7A33018C6A1 -943388278E04542E454FF117491AE7B56F3FD5B01A31A89F85ED680173087E8F -CE5365E1CE48CD62DB5AA71F4C2369A09BE3B0C134E550E72AA7C299FD3B26D3 -8D3D744758A87ED77EC946914B8EC92136FE4884E30B545A2CDB474FAD36B557 -509C986F87D992FA39BA7E8D85D5EF322ED08B1EA8D90B9E391D47D3FB2A3B9B -CAF230B61E0F987282BAF6B10CD07A23E3468BBF814EA995AD6224FD4C919D96 -A228947D0F2BCBF4B189F1BB9D2E1D1EF59F20CD6A045251905C39431C548318 -9023A4297D0D21E380F93C9FFADDCE951D0ECC25D8A4967447438DA572CEA724 -6B7743FB7D68783CEF142E50212C166D2983DB08B1EDCC59E426B4D73716B920 -A14805FF0FB04DB3F7AB70A1068CFD39DFE12443ED4E8BB832DF520B0A750139 -57D9A8F4CC6AB8935A3C01858A8ECBD75F740652DFDD752F4FFCCD4278ADBF75 -C27537AE1D759AD75B7BAEB3401925949E4EFEB1C20D441996D671C51D327FD7 -FE05253BAB53DA22FD071BDDF4DC3A9D7BEAABF49958249B5AF68B88D96FC333 -FE7D8781FE9EE147E162B0F0B487272D44522D8FA39842C472F9D527149CACE8 -AB0AB0E6E2D88C03E62AD7F6BAEB6E67C8EBBC94F330EC8DF632A5AD89FA1E9B -D953CE17AC117024A9E4671E5FC05FA194D38BCA2737E73D079881BBA8BB78D6 -0F72C39FF3F87C4161458CD8F6E07FF06312B5FF9F157014B545F6F1F58488F0 -E64494C390A6CEAAA53576A32D53CB5B51563344002931AB82AEDD0BDAA963AD -902B6AF937798843B5DF895CD487402ACD82BCC95D10FFF93F71FC4C93B737B5 -FBDD6DA8BA8AC357620F0395252BF8D626AE942B759F18D26C4667C67BC43ACA -FB4240AD7DCAB1A702E3AD59138A1B958D23DEEDC8F24D46CC0FC6B58037F447 -45A537C7B8CFA4D8494E737358151FF023B729C6BD069F980F33D5DAC4E278F0 -FFD91D253C9AB617CB9546F992615C1647123D25E8DC34B257FAC60B9B04B7AD -AE705AB62C31BB5A17E8CDB319B7A6601E8D3A5D144479AD66ACDF016B351226 -80ED7942FB3E3CE3EA9C19ECD870DB4B1E616B0B8C5DF42551FAF463FEF88527 -0367D3C5C0B8D9CC318324D3722F36E62EA52C1C7340A4756C8F79CF1EAE7A54 -66FB610907CCFA40C9DF6C64D2AF33427AC1E44A843D417C2CE47E768132454C -42BE3CCB830D5BA1D535E0E0A58D1AE992C552D3C0C1A468C79438247FE04119 -7D8217AA8E7BD66DB305893269F99E48A3248DD33444CD317B6B13BC7329F9D8 -50AFC5BBCD7F7E8A625C70ADFF0FCCC913945B53DF83468D72931877B664595D -1189CF5E16CC19A1C4B0C8A1B9861593F722E654DA0D166DC93C7DDFC391F223 -A9AF93757B01526FC9737C7DFE7258614F23E9C3FB8DAFBD8BDAEBB411E6B106 -280A4CFD7371C884D1CE8710704751B639ED78043DFD06B0CE0EE061E7CEAFDC -C442688CA7341531833129B28B6A3F012A60EB39FF5CAEF433C13C60A6F1DE5C -C2E8384E7708B86EAB25E29B10E46350E3A0A01F09F3A1B09E79627A2B66F6C2 -7E5F1C526FCF92AEF1399BC65C6D6C9E53EE1676A7BC66F41F6C97A8507615FF -4DCF870DE5CF27265693C26AEDE7684882F920B5A37C98F5B3963013AC586135 -B5A5FC99B222CF400D777EAED21F3B0B5EB3EA34FA5333EB5478D17AC7AEEFDA -368AB0CADBDA738B602D1186D3CAC6D79ADA72D2E1F2EC7107D607B663A9EABB -ECD6DB66E5EF29F60C54928B28A0BE531AEC484EB6B43237652F9756C8C14B64 -FC229E9CF2CE82018A7F05694FE9234D5886366E342384ADEDB53AFE5CE37222 -F00C4B60A4837F6D2B04798360D2E84ED5EA7A8EAD38DDC0C1A30595FEA4F2A8 -E1EAA5B4AD4C4931B17A971F32A07B9D48DB35C083345DE2F74DC9ACFA988B3B -C909264AD0E95EF95E475AAF7D3681B4298F24854CF9E93915530BBBFBBF715A -0D6E9C83FD5E0189D714E5BC01BEA29FBACF253A0A2C07D5774AA8ED1E837452 -1DCEFCCB4D39FF3B748F1EA2A3A02E3E9562814340CB4D01643745A795FF68B8 -7A49AEAB3F795D2887E1339AB5E58E97CBA70D62BC844EBAE6CB0D9ACCC55D0F -22CAF8510023FC9ED3307A31747B1616A87026AF5E8B7A3882041AA8F98C7FA7 -BD28891EFAB5748F93C9983ECB6EE46C525699FAEEFB24BE1226BE84BFF7C967 -0C2826527B4152ACFBC75CA8AA608C83E650D1915292D51555311AC9AE837E36 -1731A90FC77FDF52CBC5E3941188080B792B57F98317B1FF61E92E6B023F531D -7BE4F036DC3DF11711ED1FD118CEDACA9A550CB846E10C93BA7037676CAA105B -33F600DE469E5CD1768470D8A136B0FF623931A8E0861D3A35EE733B529FBFDD -924A21B496489112F6D210E0E4C98EF989FB07DB5B5FBC228A164358B3F2411E -3C2F24585AF5EFDA32325B466010F0273C2FD0907F87B16BE8039196B28751EB -F6DD29A4F455CA05496521A74E3138987C1C2615E049E3E5AB14B54D6E2359EF -DDC13608EC4B7F0713796C312C08775747D2275EB26FABFA3371F05DD11BFD74 -3512C5FB8E8000D09E05F6871B0860FA88E24A7C5CB61CEA9E3A112C53D117CD -6B89CFE96BD9EF0A6B9A24261A8BED518CAF65F0797D6CA6018BD6D5598ED7E2 -148431FA40639E8725FEB6E10B48DD8B035D57CC0E554877363DA6205FCCFB5C -718323B7CA09015029F7C3253FEE03D11022673319FE9FBF54A2F5261C4DC16D -9ABE661AD52A63710EF6C546A3EE8E0493B7B5808169F2D86CCDD826CD7769C2 -65C9253EBDA76C1DC6A431750B69BD3626CEAD87323BDB20189D09E1740A63D6 -C9F027088E51A5EAA2DFD8733AF1870214AF25EAC63C9F90A55E379BEFC17EEE -61F31ABF17512798EBC9B4F1C96A58B15238D3B5BE2BA97B48D27160110C60DA -40FE2FFD4DDFDD4161A89158BEF42CF9E726D5797C91F9FC76CC90D24AF59CBE -60A97A6494F32B95ACAB0D59F24703A2D1350530678B40D66238B4BC48110DD3 -A880FD437C78AAA94997ED8A49083B9CD843937F4FCA9739F940778EED9413A5 -80BE8A47258282C2337E630F6473CF9022011F683B87A8EA0B02A343AF7C896F -F4B8CDDCD917248E37C0764BB1E1DD0FD406A0D80D9960C6C32A81E209E6478C -ACADC1404FB84BADA418A5F950EFF6FB47B6FE500752E1E5923598A97B96E48E -9417BCBEE2F698FDDB9F5CA45568234525CADE3F3EBCA7D1D36DADCE085F2E12 -B6C6B26E3D70892486676191C73A7035A6E4F8124548332A0354457E2B931A67 -7E15A1DB1C802DF3D27208B0B1C8553ECFCD9B0CE1C2F950E26708CC128CC965 -4420238882E48BE71CC52707EDC8DBFAE2563E66503E74F3B71C0BAF3872592C -AC12D490F998E2198C8859342B3E769281EDA05289F8A3A4C4399E6F427ECD18 -A8C6281497751515282506477A9E0553B6ED1AA8C89F2EC6D244267BD358C8A7 -27725E0D288A0344D21ADBA5E498898A284B3A5F2494E4AD056DBE7461FAC6EE -0332E721A7F7E2058C864E02EA3DB74E476A1094F00BD5CE8D85E0B11E150C9F -95D584C11CF6B285E4EF068C533FD49017A51291CE497F6E336577EEA1C39E67 -A19C2AE6E8EAE3A8658E8174D98289DB1AC6DBA0EF27F2598F35E47D6B94C8DB -059AA1D803A9EF242F88A7993872A141F97D76B3572CBB811F34E066412C948E -7B7B22AF31C9030E333A104DCD5F29E649901D9168E330C8BD4DF7E50141408D -267AE9599099CEBBEB392A28F74CB75802B4AC5DC979A0FCA75EC11F25DAB3FC -67DF1AF2291A93D469B3278A2DA9397B018024125A974FD7D79D149475726085 -02F30E996960097F6CB908C90E5EF127E5D2543871139A7CB94CBB2A5FCDAC6D -755A60F53344570C9846812E6766F1E2C952AFBD260D252129CB7C19821AD057 -2DC1737D49FB047C564C4809EE21B6899F02916D50CF72DC0174BB5A75A3DDA5 -74F578245AE90CEB882AB4EEBD1A4533D922197C400A2F651C1A6C5F4FFC17AC -7AD689F45B1722BECE5F648584C778C96FB1C606DE7E7C6799964BACDFF5B239 -A7D25397BDBCA2DC06B27246728A6A6DF1F5EF6D8677E6DC2459472211A35500 -C8315B238FA5796C2DD19716204C9D6FDC7AF0419A8C3A927250192E85FE3D95 -924C818C60F4234946EB58C7CABDCC0ACF82601468F963C968209AAD57296D8E -92797D765E68C6B64DB292C1AC7A779FE7B671D505343A2D32D0898A1D90E000 -EFAAAAC89A3BBC3A92B7224E831F2132824875BDB04C318B018B49009FB4D0F8 -A41C484ADE005751538675AF75314008C6F45FBB3B6B73E80D223935B9D7107B -3D2B8F2D967D7DFCD9F2F9EC3338844F5D1F36E2507B2AF6F33A495CD6701B1B -76630A10878911FBDA1E8590BB83D5A59A5017A0566974818686187205D6C1E9 -4B8BC41BD5CAAD046F99F989F3FFC38FB507ABE17C03B466E423BE3D38B5B659 -4115B2527B2D3FBDCA1A2944F5C107DFAFA5B3FB0BC6536806F5D9BE46166CF0 -F84D3EA7F0E5A904295F84E63A3A08BC02B75C33507C5F09412242B348EBEDC4 -7DC51DB5D49526AE4344C51EB3CA8CDE0F11F9059E85CA54122ECB587BDC5A3B -7EB1B5E4886F976037B0D1131D9CCFE5656DD9F88D7E5B099D4862F78B30A7C2 -02B3ACA955C31742B0C732D84629D705F3C40ED57FA05C368EF688D075E57718 -6DEE8CFA86CDA31277ACDCC66A23D0656B20BE6445021E16DC406BB68D548F3E -1D2CCDC247B2A9171FA02878C108EC0FA6AAC271A82B8444E714360681676A9E -2E30C41E9A40FFC67C7C9C7FBD10AFA5DA7C228A1697A090F6781F2E75C528DC -56BE079C98DBA4D248DDF9AA7B6C52BABC2B66218AC0DE509F08A4FCA26C646C -9972C2CEF664ECFD1D924B5D5D7566A6B859499F6758CE7B762CF986C0736D80 -0B4A4298E5EE920AC718C5B64D5433FF3F9F631E8715ED604D708556781B1539 -882DD8627E2FDEC4B216C62D4CABBB2F115CAC56A5D93EF98E30D058EE634DD9 -95D5D1AB4C42680B3635639EDF9A52E29B37FD0BB0478E6ACCB4C7DBB5F9C428 -755744092BD250A8DDE731265A110615C300DED7F143D52417377E90B91FF8A5 -BAF6324B3EFE85B2AE0423DE309A36A64E4369353E6C2603E802ED31B56E318A -8F6D19FFCAF6627099C0E3C190CCEC20C4A7DD4B47816D529138E2694EDF54F1 -867F0143A444024E0528325ECC148D779F4C98C06FE9E752C366416044EE3FAC -72D8AD35D89400B4F00286191C16E16979D5EDCBF4FF9EC868D6E3BA7D98A83A -0710CD1AAD878778C0A4F0C9829723572B4DF407490D64B5C49FBC047DB49F33 -E824A4343825D756D894B41EB70093103C35FBC09FF55931B81340666A0B50A2 -7633105B04DFB6386ED196F7D540ECAA058C0B44E89141B68CC41FC21BB2C4B4 -4B13E070FF953B88A70B3880561FDBBF309C68F5C159D90CAB88B04CFEA0F33D -A48D289473545DB928964A1FF97B90FB16C449A27E333B56A1E49386AC738A91 -105C3F6DF518A43C97FDC345F5553842D8BB735C33271A8FC7E3BCB3C662A375 -53B8450229EDEC6156E41584971A159960569DE8AA7A959D328CC8C8ECBC0B11 -DA239FB55CBE641B71150154F8A9A8A128F8B58409791B88AC57AECDCCEC9893 -7B3363B091289345EF59DD66D83982931E090B8F2A8CFE8F46F3978A67E28047 -48A7C711553E9846164FFBBCBCF505F953132F546583ADBB7F0A9EF02A6C3163 -0057C83CE31709A61F2B9B09CDFE58F02211CA00C0672CE30572CA53BF75538A -57C1DFC3E44012F882BD50D4A3ADFF64D8E09ACDC5FB80CABCC56102C59C5B3A -8E7D70F350CEBD556CF6055160C1DBCA6411579F959C873E4149A3FDE8836252 -FEEE3A2F3E8BAABDE53FBD71B074FF5F26AEF5A6663E2117BE561B21DDB5BEF3 -73C1365F9CD57FD44C29C00395B7CB0F5A4BD22AFD390421EB238707C3D18BA6 -C7A1B0B95ED985D208850AD1BB88103E7A7837F707F0B824BD1BA350896BC3A9 -88CE5607050B136104344B3C9E999D4299546B7A107E5254AEA34E3DB09AA599 -CBD028178511FF44D04C530ED6AD10EC5C41178CFDC71DFD30B1F856DC2A4FB0 -CABC0906E7682033B43765B5F59F7604BBB01A7D660C3E5BFA8651CFF42936B6 -22059C2BD479060AB78AE53CA8B618F1DD65DB73F507951738DDB94B1B2898B5 -9724D93F9872A79725B86FD72BD7CC1D53061F8B55D3ED5701D99CB24F3F7469 -5D456C51BE9D32D8F101E50CE4BEBF5A8E97EA0580046639EBAB22BA25A69EF5 -D80A9854ADF2C2F754C35F380F72528D1142EE6CE628942F3F98C26EBF5A75BE -C8F6DDCE438A2BCB35A51DECB444570E36FB2C4AE1AF422C91AC39A18DB9AFAF -BA33B7C945743E2EECDBB82C10510C7D8EE5CBB80AB3036F259FF0053E1CD954 -650C4359157167A10C67372C068DB33982CB1101757966FCEC872B24CCD65E0B -E1CA44F1CDB5B42616DEA1E07FE6038A0FBF4B1C314FCCCF8E2C8B96389BB33F -978440D27041708AFD22E3E2E3D944D152F9A5F2E50A08BBEBADC84A7E0039BB -4651884B79D1AE90EF67AAC2A94BC1EBBF38F7E4B3FFC5A421EE7EEAD34CF658 -C89D114027B859850874A5FA5620D70BE94D480EF1D2069F64C9E70C669496F5 -918606F17D2B02178746BBD22FB088A7354A811836B7AC7CF69964B01F7B6C38 -D97DDCFF7F2A5BAA1D509D5EFDFB82E5EEC29F2F12879510790882D7A6554A0D -35394CD4CAB3E352139B4DCB9EB2AD2CD31E9717FE5EC1A5D0CCD89D2A6D9A55 -B0DE096EAD34A9170CDD32D058DB6DA9DDC7A20FEAC9A351B2144C9CE7CCA732 -7F13742A7F0D9A1736A857D465EF44F316F8B165E30106CC22C5255EFAF1C02E -0AE0B448B88CD712E94BE503D0424B6D2E42CE266D35B246D9C92DB1032E372C -FEF9CEE8853617CCE04505671F6A2F421B8D86C775BA10ED922C06950EC3F162 -888C5E240F3A4E2B8A1F5584EB8A5C86EB099396D209DDDDF6239D612330484A -7D1578FD98F395EF6FACD488B64C4BC127C129260C4577A5FEFE60FC476AD32A -FD26A711ADE1F32F869172C4B770C0CC0456730C5090A39B81CDDF7F43189A41 -A830E3D0875FD39EDE7BE3A37C5DE8BD0D53B2AEC076E977835BCD177D55B487 -ED28D26B3CEB6D86BE909C92C4EE1D7BC27BB10439A27F35C405B76B79C0CF98 -21A58E3E4015E50CE027AB45E1B1892AD44477D37E09AA6CC12065749339D505 -D96A72AFBA6A6E1390A6F01849D607E6DF07B928A490A424017C9E7199573F6A -8CD3D62355CF57FE164D79903F81679B4998AC7A65DBED69184906D6A6AD7618 -A93DC4288D72AD42116CF3A527E6F6958AE02E2AB2820C4C8235DA5F8C161D62 -7796C9FF711917AC9023CFD7BC831AA847281DA84FC40DFB8532AA9A6E24118A -F6F0E95313894F71754ACF52FF8AB3C9E48C811D5D19A0B686B8E1DDB9E3DE55 -7669F0BC5BD721081891536D9FB45D5FC6058F768007EF51315A619EB93AF0D7 -74DA6F7C1F0C419A0B623A2DF8AC5F81AA66CB8EE50B69CF20B7CE88282AC1B9 -6A758573DA78757BE583FC05245BC6457EA6D1073FBD3F3F506139D493E56B05 -EE5897161C99CAB23AF97135F18C72D6B0F9802A339E3576271AFC00F077075A -3724F96F7D1904838BD92DD6787D86763B553822D81E63ACB53EFAD31981B71B -BECEDF7DE2AA12ADBE30A544CFF6883A0869631F70F36D931E1077F8788627D8 -AD4868D51502C35C0C3697C811AF509C526689FB4F8139772964F414C0F5B120 -37C04E77902A09414406E447EF46510D80B5BDD17B712A5137869B813F673C63 -988A772C0B49D04118B5D5E5F8D07FEC3E8000FA1FCF06AAB49BB73791E019AC -148BAC5E4269A39347ED188848E503E0C04E548D4C5E0D1FD132A3EB91A9C92B -9218A29580F6A99352F46C747C29F87EEFFC7912B6A60426BEFEAE7EAED1AF22 -C757AE1D228A336D999E620934AE9D1C124E4190BFD280B24A40E8519854D386 -8A6140A79F2C1621D94FA49B4B869DE236E51FCCBA2600BC7BA951EC067E6759 -C4C616BA9F1AA22C72DB3759A24F77B63DAFF16785F0AD51B92DE05BA3634D4B -941AD4E19379CD165BC655EB7519B58608935196F2DA9F17CC2BC1238781D29B -EAF0FFF3CF529CF48890C17CB1D97CE95AA2BF2827B43B39C8C61FD91E7BFCC3 -85A92AC0528C12123EDBD7E9B1FE798EE0CC8967CE01D19276E8BE4014A06868 -6CE0F5FCDE2256B8D2FD077945BFB2BC23342E4EC323FA864567F8867AAB0196 -3946CFA77BD98C46666D80D4C67808DBD53B407E80CEF7DE3E9120E2AF3B27CC -4F3201027C39A296C1406FB76BCF9E46537DF1D3409812DDA774C146E135BCBD -62E1EBEF09C3472DC0DBB9CE13B31D15516B50280B3C09E9F6EDE5B05B8D0B4E -C7AB274068D129951FFE53FA5F0E85B5F1DC12382F11B5225FEB793A1EEEA45C -458B1EE64C7E2A787674140AAED80C0521469C3469EEC92430A9E3ADBA3A094B -73A71FEF38E2098E4B882D171524BE3B4BAE4A568846BA996347E728580F6AC6 -EB4CB545123E55D0EE933CF9CB63EB60EDBFBD3E972B544477AB4D68826331F0 -4F8AEFC29ABA9E1D6EFE807CE2D7E8BF254F153B3C9BCB6507E89B97158EAD5F -4224068DA7A1686B8DFBAEE60EB405CE71F71B4872D396FCDF472EA4CF3E6E61 -7F35278F1E7B3ABB2714E1723F5472821674C130E7301D598A6D1CB33FD3A94D -35F73E34AE11BFD6070CDA2EA1C994C0AE4304785A70A38622C09D47EA08238F -7E497A635032592C8E28814D114AC8D1B9FA512FE66C692F75E42B67E51E18FB -3F642D14C8DC0DF74FD81A594376BB9B7DBA9B4930AE048E4344476943D31F24 -35FE5CEF1A0BFD45EA5C43BD6700A38796626A1EBB23A3BA4B7C64E1B145FF89 -E1E3CD5F27844E66E9868F13526D31B87FC9DF2676E7ABBF3176CB2CC698BBC6 -23D39533FAEF149531AFB05826F48BD2CF8CEFF48FDA67C72EE1F32E41745A79 -C96B8264CE368E6FD3DAD0CBB224F8A9525C6FD720DEE0FD278EF36886ED076F -EB24D1D8B69C456A9543F4543160B6BC57D0F396BCB5F416EAD863C35BB5DA81 -B218D99B5CE34FA719E6C67CEA1B25DDCE2B019208C1DA5D9C105F47A382797C -A73AAA78B4F33F509E60BA34B4D5D55756639BDF4761C9F221B09866291760F0 -4ED5CC9406061F7FAFB0B6F93796F64BDC05277FDD466DB850B5ADF5C6E293E3 -A6AF3C0CE77608F2027BDEAE4076B776AFD67A7BB7123A1F2F1F95609779BFE2 -9C1E085B68A4C444EAD8ED8E3E7F08CD5F90D12C96005EB144157FD1A85F7176 -3090740FDF72AE20B73733DB0A0A9ABAD612F6133F77DB8FC48DA198D73C1CD8 -797C02A00B9A6343D43D1C0B392047C71EC1D62B5308B76936F64EAEC52FB0AB -A53516E6BF2189E657E6DEDF0C680A81282F877B0DB2EE045919FAD21BD4153F -1E3B07E23F7C13B55B47B85E99E93C6C64D7132245FD325E9FD9C6760C01C8DD -61930D6F4BD6C59F880CF11C3F1588E72E98F80140F43DE93ECA43931919237A -2450397829719ED4E34241D30FB4F5C8A85B1A85FAE2305C47550BBB555EE76B -DCEBA951B61B0D3A7240B105695337170A9A56468EFEAF599FEA0CCF01A2DB84 -25319E635B3EEEB2B1A6ECFE58E2E387FA5996D311B87ADD09AD373BE347B291 -140162A7BAA5CD747ECD0DD86807449609C1B86BC5CE2A087AFBA83091CE4B0C -49E6C7AE1306511A1BD1D4FFE475FD7501461D782745128DEE7C1BE525A3B04E -5208CFC6600196DE9ED2E7A7E20E20E29CAF5019130609E1D3AFF1DB46E12579 -1BCCDCDA2A43E93CF68534225DD7CBEF77AE71AA22565258FA39AB4D9448D462 -326182601922932B23CE0E2567E30BD47772A11D59E2CB15B0BD340C0657B465 -733E5D4BE23D731F0AF280EB827526F9050776DD06C6CFC96318E91F821952E5 -0CE9F613F0C595C55F7351D7D4114D9611AEAE733A45A7F6645166307E210930 -0F1E4F7A64B77EA34F19A5F52445EEC38EE28EA988EF3478F03929AEB7ACFA8B -12AF9CD3778F13FD2ED625B825053F2E8532562AD65B4BF0C2631586E30FC27D -D2B5830E9EB43090370C658E1FC9606BEF5FD9CACF8FF8C051EF770B95C419EB -1E21C8D10456ADA6BDAE7069829B6760DAAB8F4772B7FBCF8A96F691BFE6802E -F9EA5F469758411B191623A09A49B22E042310EB212894282C023852E11D1001 -225FBF626AE3FEB4F127D055FAA2F1D6533FE15F30ACDB50FDFEE0BAFB1D4CD3 -FFC9A8CDDBB834E06F0A2009E96E82EAB4364D42897631C46797394A1745A3A4 -45B2551DC83AEFFAEE4B19C824C88804C8789EDC04A72079561B851853585AE0 -E4DC3FE1515E0751FFCCB8747E05B3BF7DEF41CA3B9D17D8A3452D965E7F1F0D -1770F771EF9B8CEFC746F42EF799828CDF99643D61F02064D472E5CBD1F01AE3 -027615C852F4F2455711D642C5AAFDBDEBB87BF4389897DD96F463964E84BA09 -75778F0201C395B006083E068C1CE5EA1725AF409C9A0C9AB1DE481F85511594 -79A3610A5D62625D9177B7DA0E2345FB16178DB9AA58588732C48BE70A5DA581 -EF630C04C61499312B2C456A5AD7D3EF4B6BA25A17E8990B9351A5232F783D89 -CBACBF1100EB449EA090943C73CBFB94AAC0D8C675D84284B83B4871F7F1F37C -549C0F4194C12B2FC3E52D8F89FF2A8D18EBE7F270B786500B3238D7D8100CC2 -613EA077722458508F6DCFE09A5479D450B795A1100FE3ACD3BE0EF191BC1625 -729369ECF1EE49693310F8A241EA75CAF7E4B2FE14A91E9F0C13955496FB03ED -E8FAC0DDC571FCB38B006A186E9642B6EAB0A7CE39B67112D9F83651A6E9DF2B -9F6B6046744A77788DD927DE5C22FCC918C93C7B42C834391F8D9AC89A2D20A2 -1D979C7D6238D4D8E28946FE336A43402F67BE9FEE64B7AA3F4624358C09EFA6 -99FD5B78AC68D5E3F1854767BBD97701ECFE92107F6E51F00D0245484732150C -C33E963DB666494C895F05BECA73B88B7043828D0637B3986372F28F1DB8D68C -0CB56793D0FB42444AF9F77A634923A09102AA77F2A5A36330E8B946806E57FD -47BC5B0CD1605E564AC173D7F3E1E19870DB668D87CC1A2BAF539925C1BEDC28 -ED5870BF8BB79B0D31DED055AAD85A6D8EB98D1DBE04F10FCD01932867FE787F -1CF53587378BCEBB146135335100E2251577F42387DF4517DECE711E8A65454D -FAF19EFC6EA9CF50A4FE3DA6E4902F895702F860AF0A82D47FC7E7C4F3FDE9B5 -091A7AFE227BA45E85679CD34B38B14BB824C7B499590C9DF82C7C11B36354EA -F2A862100807308908B088EC066B2B20410914056F121CCFF70EAAF9F8C37D31 -9C09832C462EB0315DB838D2E2816528FB8391213B9CB687ACE34E6055512C6A -543284441527EA2AB308D7FBB8BF137D201042117527E548909E3951A68925A8 -1F741254040BC520FE89B7F675EAFBCC1C2EBCC6F55BAA59D211572056ADFDEB -3CEB28BA5B9987C4E5CF15A23D558815AEBA5D4EFF8B04D2B9A07F9EC3195A8C -BC8E5E8422BB1150444C5683471207E26BA7B42F43583DCDB2868337362887F2 -8947C359480DAD443D473C61C4AF2E6BE2F7BAD06C79C102586C325EE523F000 -334B1AD5F85E52486C07D5F2B88CB36D7C5E61B421A67F76F1705CE79FBCF403 -FD73DD06D579EE0891AFA8CCA2002D031A2791B5747BE3FA9B7053DA6CB943A8 -8FB3D8DF855C16A641AF1B9E0FDABD84A5074B583202A8C120405C781F2A591F -F44D17300936BF3C77591752E3F3FDC5C448910A7DD21F2C84F1D44BAD9C7EA0 -2C29193B42734103C2EE5A6A0A6B3F9A668D0E58B7450450290C4DF4AF6BA8A4 -EBCFCBC4363ED8209DE73972FF2DE7872AD38ECF92393023354BF50C918F84FC -8EFAC13B94DF583EB1F6E02ED73D73560DCCA4E2F1CE8A7EFE29988616867139 -FD6636485328F32F2A9C2D1A26306936ABA671225CE1685FC633E98F198AC865 -C0ECDAE559DC639FA8D0D9BD2191C97317C07DDF2BEB1B8E6B0A2F4DB30B11CC -FC7CF4D9EB529CEF39C017E332079C03FDCF16EF57F51CED595ABA70EA35E643 -88C4313F914D6888DBE345B1E5B97DAA93CCA097E330D3CEE75B91B36DB308BC -EB676516AC72507CEE7469A7DCAD6E98000B1E3C77D8A4A4A1AA3C31AA384F2D -2BD50F44E9CBB4B5FFD65C4E7931BA8930920680537920623C80A06AA95EA0A2 -DFC56A91E877CDC9E57A201BB933B4B15710CB4C1BCBB88AD119C273D9238020 -24DA817F6E77BF55F12E9F61A1E0D2A9DBC432E0827AD7F023F1DC6C82984F68 -F6F778AB1DA064EEE453A2C148AC1FEFE43E20392D59BB8898459A11D71F9713 -610A22F0DD1797E87854B0922FF58FADA2AB26FE02E9D6838D4470B8E16DC017 -874787097C64EC851AC4BA343EA6D9D1E0442F0A8AA1D6AC71C79443563B1BAE -B4B159333392763A0D17962080B8243A4A6F11FEA2C8D5F4BBD4482638854019 -DC1BC660974B96EFF9C01DD2797B1E1C8E0CA2905F783B042959701A74AA8023 -CF44AD6A3C0B7414D41BF9E330C0EA9230853322C41F8A40E782AD8F4587E647 -EC3943D77A2ADE03D8FD096408B4085690CCDA8AC71C6C11AF690D8C32036AFA -4ECAB5C1F31B05FDF26CADEE15383EA1BBA59FFFE6819D3155FFF76BDBFDEC24 -5BE59C61F3F0D704DD0862546F77DCDBCBC313B354481A9D529C4228E0E43EBD -1BD15B94876AE370FF835434A588E4E8757025F2B1F82CEBF20AF28ADB8ED79D -2412535DECFFE25B2109229C9BD3AC9A06BD241F9284EE8FC77096DE5EE21BB7 -7A7162D9AB3D2CF6C100D66BB240E43992444151A9ACC99D10B232B4E400DCAC -BD38E0FABA6F475E6FAE28448FF34EC8C1656A1CBD27CD6561F9BFE0FABB1444 -2C25908CB3D14B664B3E9BDA6F0EDC8D933FFFEC2CF1A4074FE4CD3C8E72EFCA -925FB57C53202E5F89D8CF63DCB5EEDC1AA68D11F263359B84A3D7F9AEEBE5F1 -4FF089AC97F1222221437833F33C06166B8CA011A5D2F9DABEF2750CFC00DE12 -9D26BF74021ACAE3AF901CAFEF6BBFBFDF7A496A73BC1F495D0F8AA6979EB23A -0E4936B95B1636788C8937078CEF6AD30F0794115E019D187C11D6DCAA187303 -706FD91D652D41AFB4E012DFC5A0F78F435FCBE98D433CE9C7DC248106C5C763 -AAAC5FD1DF5367B41E004489C01C5FD3AD98B8EA7FCC66E1B552A4B6FF2AB13F -93AFDA81E74C7304650C1CC7E0162AEA22A754E413C55D571349758D8AF0D508 -9324F516E8D4FE7CE7D0C2A574E959AD1DD3CD001E95B429E4FD1A6CB65A6133 -EC9893F1A7F476481D209843208146D10F9A4F0AACF2A6DCD4462CB4FC9D926D -D5AC6B561BC9B0CEBC0CA2707AA010C66299C1DB237B020DED71DD7D80C47732 -9FF3A32D0EF7042C4021585BBC826038D69CB48982BD348946F44D80C39C26F7 -C15EEABA258F8095767AA5447F6A9CE1D43D6BB3A6B205B8B9E8CA81089CF71F -5EDE578C4C244D0E35599CD00FAE11024952E3ADEC2ABDEC90D2FC76F9ECD6AA -A6B40D16DF171738262230DDA062E9154DAB0A506DC761E79DB40C7F389C6E8D -71B5BFBF82B224C4113A8E4580355E0B80D408B1D34F55E3586E9E680C689413 -5D584DBAD8258397EB0EC2EDA157621F90CF742E8F98974C36E2B1DA6DB71C53 -02A1E09A7E162F6E9B23F0CC5CF025CC9D13F55F787B2B565746C2AF129F0F4D -3E304C56F314EE80A250BCBA45112194B4A3D8EDE0985F9067493F095520ED4B -7F1CC08F330EE6F17DB5EE43DDC75AF55B1EDD1B41833FCCE5E842516E49BE84 -611BB71A150B44FF998B5866DA29D7DDE99D9D63F862EEB7C935216E5E60B772 -43800ED5868AFFC2CAE01F16B50902B292C2BEAD2EC5F7AF059BB8EB0CB73C0E -EA8F144F716F3565B3CE4B9597B7C0257BDED508A600D3F1968CDE4E3F773F72 -C1AF5E675E3AFEE289515A32C4A4038E0B01410B58AD63AB537FC501F3470514 -A0AE66FC127777C616379F2DA2307DDEB634C5968C1EF03BF7981D9D90C14E37 -AAA1A0C76CB40A95B77D6ADCD43281E3F680AC687F859ECF4AEB35639E1B04F5 -3C88A52BC559DDF82BDDF076E58368AE6C8072EEBE110683B069FDE3BB0F5E38 -A3EB4E820CC8B98E2716D27925F5351C3B3ADF3D60398813106BFB474617EB33 -12C56B1BB2D743E2950677BB680C01DF42517D0E7C7F035D968938CFABD07E38 -A86BF53ADB0CC8715B052FCF6ABB0ACF56456F4F88C8D0E17220D88C82DC5087 -CD762D2538E309B6BF33C1F9B449BC0EFA035DDB9D4ACDF95B12FCA8BC429A78 -FB6CF03BEA0D047832E23A3A3215225CF76F2C213C92D706AA96182368F64173 -AA1D106CD441938A5BF7218EF0E1B73F2AD3AFF7C87C580B7643BF5994FABEC3 -CB362FBEFE73BD731ECE265093411559A49A5CAA01C4B55BF0E4CD7EAED28FDA -8C264B62682DD64D12C7D9BB5119269DB43239AF2C80AE362D7716B5E49197A7 -F25B759B90DE0A436703CBCE72C472C53D842364D3BF567DD3F7615B29F2D02F -C4A8E4603F76DA39138CF8596733947EA65F1B8A55DC91FCD08425B2DCECD526 -5DEB615E7DEF0155ADA336A523D0974D4D441FA925CD876CBE1A85D644831ACF -705ED79DFEE14D519EC7930E4243D38E86CF01F355E675E9BD24529575FD4A6E -2187DB6C8AAD53613FA7FCCCC6146E9F99DCE7B10815B49659D24880A949E036 -C849783186B13EA91A595FDD1FEB4DBBBE58C512F89537B27A2BDC4B568D1E38 -02916E8B4AF4A537C19453F94710478DCB89743D7EE30E15C165C0CE881CA43A -E18E3E98BCF0423223E37C9407A872A996901E03392F8CE81A928727FBC9BF85 -6DC374D2AA3B2D2A82CA328E4F1A261B3EBEB470E5001274F564115691D01E8C -A7480387E7EC74C5CEE5BDEBC0250108FF13D87C71EFB1BCC9C5B8028D70A79D -0D2161380357E0E96D15597F673722E535F7C459F2650AA6403778C64F74F10B -049AAAC72E6A409ABDAFE7C2778154D6E920D5E2AD710CB4F7CF7B52682EFB68 -FBD7DE55B4B5048A5738A329842AF53128E3A9E89ECEDA65B2B1A634EECEB846 -6D7C0E11933A5278BC377C5A1F50BAD2DF04CA0AEC47908DC12CBBFC367448EB -7FE9D1ED7F2E13E35CA8E6FFC9734CFDD15E5322ED7D476A537FC691DF5B1CB7 -9C8396431356B92F4DFE47212F403D0A60253C0F0E7BD7768B157FA239753729 -CF0C82DC68EF1B83B56573BCD38C5D97A3D3889C650AC889046FABAC4B55856A -858896E794BA81BF7D3917884F4989C120FABD9D82698DBF7ACA6FA03B7DE0B8 -DE93ADC29B8FA9DFC15D5B6578AD6CD89DFA21B2E0AF7F0FFE862D1839882472 -809FC43C5255790B323AB759EAFE0928391A8E87F2C6E50D7A7B87E6464EA553 -A1AD7FD38833956A136AAB9BF20ED42A2972FB4BE9186D48C3759D0FA38DAFB5 -7C4446C3E4D0743817A361984EB4CE36EA8837008484F27750EA45BB0481B07B -CBFCAF075117CEC9C612DCF1F281C265177362A12F586DB66B890BFE45F0A5BF -D0F433D8C3AF860D3423F6D7515192AD9FF0B5DCE2F50074BC2FFF95AB9ED49E -73EF0AE628B503E7EA97A3B3FBAD0FAC2857BB8219ECBB90CCCC74B111A74F84 -2960056DBCB65504628C56B8E5F887912C80D8CFAA2226E23588AA243C14AD88 -BB92D576D161A3C23D065EA003369BB7E2DC0423609C2591D4AF74C86D998620 -B7F6BC6162BB2D98CA81222349BAC8C5E6A3F3170713B188FF08B8C40FFE0B2B -DF51D256BB2A08D1FD0890BF51EE599578E189A99787022E19B8F44E8F0CAF54 -BE711062BBD9A270D1FF131D69F1ECDEFB84CEB2CB1AA8A6B474683911C895B9 -8CB36086B59B54B4CAF966749A2D395FBE6F4DF81F71E37E6A0C5AB70C65DFED -CA21D87FE11CB967AC0E11B70CDD98CE389DAE41F21C429D57482B736EF9CC09 -16AB1D0E877AA92557D24375804161A6C1AB7C8912512BA2E0D0B1288A6C6784 -9EE2F3573B32873DDB0AF81C83B9097C0E4E5A62B6E324A02E19393A2A344DD9 -C6FF7B8D8405A6985F1C82FEB248BAA43FA630661F9708A1EB25A9C8EB93555C -5878D5CBA73FCAE33DCBFB998B289E2204D62B8463AEEEA2DBDB450D6DB0AAA3 -A4EB5562F40D56A252C5D76E71CAC523C34F2A3CF56745A909C79A1A202D64B9 -EF5F98AE02CBC7B9B4D6CA1192930C93E9516C7B8491A38254EE14AFAE4C5E3E -CD9560356BF0E1BC7CA29753C978394A4B06BC0807323267A97E6AEF0EF163B4 -2C92A7610BFD6257188892B55B5BFBC1802B0C648C1968AEC2BE35CE5788F7FC -9FA1A42826378BA3F5142F8C9DD8FE321DB0553838FCC28B2191A5A26154CE54 -AF61C72B0867FBDF822FCCCE8E08E9BD728A7D063E3E9AF29BAAC110B817B34C -A5D9B8A61CBBB74DF4FC0A490BAD78938C4694B26F84DA7A8A241FE91471D2F2 -0F1228907E852BC113205EC367D43A6BC47DC77742A8C0117704A0BFE29C1EB1 -8E35DE45C4FB9B4E48AB4E9EC0FA0F0A33C7197C19B41D2526E74040E6E7E797 -E18A45E86F480DFA98164CE339EAD8533F95274C13F26F1433D7FCAC9E28CA00 -5CDE03DCC7AEECF7FBF442840845EE1E17B58D71E9D58456CEDEE36A57C37EF1 -7159E3841F282ABC7E1C66594051DD8C7A9E7BE73C987E1640F345DF66E42360 -65E4D30006179A3355B7F0C54CED3F577A82D30E99617E52C0CE533016DD5B10 -211A47C3FDA4F9F7B54E61BCD46F7812A26D127EB37C047B67D547E644CDCCC9 -97CB89F6FCD4B80C83F15D5D280999772613A4F08F3620894C7C594C115A5FC4 -A0699C5A13F5D846F2220FBF86F2AB4C209F8703659389AF32991377A3E7A38F -5EF88E603CB754D88E536CA1D071BCB9E9ACE9D737B8430ED73A1642DD094D87 -CB2E636ED90ABB1FA9612DD39C767B3C0169FBA67B3946E1E852E33588B8AFE5 -D593AC0BA2A92D76758BC611F252B7B0C00E0274BE5FBD392EFA86EE49473788 -BB5C80A82FFAF17372F480A08459D6E042361ED54CECF42C88523EEBFCA805E1 -E59A1743234BB6775AFD46BF07C533588E38634FAD480E63002927F24680B547 -6C63D3A937F4830D31E7689E6D422662651CFFCE6EA129C04F632D88FE43EC27 -CBB4BF4D4232D3DDD19599026EBCBBF47DA6C805E38AA6C11F1E1857A5E8F1BD -4CD21F360419A0F3E555DE7EF68DE7E081573FE845402365C846F1F6B58477D3 -1259A60869E4B93EDB66C10D6B0E46D55D0842CC47DA05D21C8FEC6CB299409D -7A1BB8B99EEDEB3C4F10A2699458F19C320F3FAE9CC6350CA383DDE889047279 -0FA91175252A42834BF9BF5D19AB0032B8383AB056BBDA41480F476835457F53 -D1083B641023078AFE58B2CA0FAE3832ABF70567D5E5A0EFC39C3FFEC8A3B2CB -3624002DA2706BE3AD3DB339BD43BDDD9BF9D336F25E572289F105F319A4FEF4 -60E799202F759DA96C6489A228EEB3E975BA1EDFE6BB1A13612BE4A5B690C615 -97445B00FCC75097620CA90F06CA1C58AE637D12186D892295FD5FA126CE1D76 -011AAC13442F1DAE04AEC3E7A5AA6DD27F26ABC69EDCF606C10D34B0F32CB8AE -2B0D21CD02DD3456FA3BD023E4E92233AD9F24146B7EB0C2A68C49FF71A01FC2 -2CEA9C5FA57F09147C6DCD8D3A4A33C1A70000B334527716C12052092B10E905 -9F22B1E3048E68EF2525762163421C33A1CE61D0923C75E738EA9A37DD3271C9 -AF4D55786F5BEAD707EC8AA26DD53D88476BECA54403293E8CDB02A083294545 -D4BD7DCBC7A73C480D4F3A903AC85AE133384CCCFDB357FE6B6B341FE71E4A75 -D283D1511423A2596D7543A293B4A6C26FE21040F0A3E8BBFEACD0152EC3F190 -ECD74D3CEFFE9C3E86402D8B5923CA46C8046AA3C6DA39983B645808F97F4332 -D66EC475C8B93982A7EDA2BDD0792B332A9EF932DCC11191E399900EBC05C3E3 -8AEB4B4CB9539D6D209EC0BD5C49AD675409BFF8EB2DAA5E425D4E65E06A2458 -F0C4149361EBBD54708F4B4EFCEA571DF325AF6835652E7C493DCCD8C8C2F01D -382B800240082986A52D925D6F804BE8F048CBAB7C60DD389F7F3501121E1752 -AC0606E26537356594F6DB786ACC6152D194496812C20C5310970505EB0C3EE9 -73C5AB36FEA992F2ADF54BE9CF51B77D4B1E3E63B9A40E2D701F904C5E0259A3 -14C12EDB20B2F5D534ACC7C3AAB655F58C73659C9A177FBBC40963B6ACCEC0C0 -8BEE4D7EB45D68FD74C3E8AEB3D432CCBED396C3EA5F7EF4E40A8BE9353256A5 -25F88514221445F3373BA7FA3B3D360E533A17FA74D1F63EB847F313EF4FF04E -62E3057E60FDC0DCE1E8DDAB7B45678F68D90680E750DAAA3BB7DB64E938D89C -6246C43EEF4F68B65B0A8704B41882495F83742E12B2EE017B1A74DC8E1F4761 -576DD2027EC0F9C65F94E887C1E82D403879FB4DA7CE46B6B64B03541DDF3788 -6B417F4557B029C1A5CA503ED1379FA986DD2ADFE5D1CEB12F1B9FA0B4404132 -FDCBEDBA2693C41F999E5FED058098745312F520189CFCD89AA7EE42F2BD782A -FB595F059CED0AB8D0BB55F65EBF29D89E023070E8A35964F7D8A8D5511941EC -65C5BB39B27168C392FA68D211056BA38830B5289B399927BF79BE6733395940 -DA32538EC63BC1435F6500BBFE3641B96B52D46D4051E393D302672AA30AD51B -E3E6E133CE80E6E9A7D979C63F324C99B5A6FA7B8555F35891AD9F60942D4085 -68A4D12E945BAE908F2C71993851A616D4E69E27F30441466DA68E16C74BE058 -C8920C64CE03667344F9DD28EDB24C5062BA27BC75B924029E5D86636A0E347E -1B41D41B6556EE350C0BC921F11232DA04D5387176DC11C4CC64E408C164F8D2 -2EA268E517813474172B3787747D4C12DB61804D93F3ECB81A52329B87294C9C -DF2AF75BC8AB538565E066992E8F6C2BA4B89D5DDE0CBBC202396D31227C777D -60D7D5905ACF8E02AA26DA2E49BAF4464701D01081E206291FFAAA45C5087028 -AF59353DA8569D6000ABC1B744CCC4C0A8A391FE1FFC415EB4901F950D0B4E7A -89C6F634E5410DED1B428A87EC74BDE51BB5EB54AEF68C385BDD5ABB283D390C -02BE931669CB603C063191745F913756B28E81DF6B3760804300B01C4AE126BE -C558B85BE08C2787A930A944E9A6F7DFC85E7C243E4BE99B57E2B120190708A7 -60138412969D73387995B15583B8C2B3BF6E14DBE22599859EF551E741B04DFE -36E53F1D04E091C840C1A9D43835A12F4244D4D694D46B6D3376E824FD3C50F0 -D889F2D544096385C982B5004268D199D46E56051B2C46BBE23F0D1A3DDDEA28 -1E1B0A24C80A82C2FAA2732A5B9CE81B6D22EB77ED0EE9E3E1F89E2C07167A86 -839255DEF07653976250EE4839BF800EF371ADB3B19F92C34193399E6C2B005F -5CACCAC594DE4B92EFE30C6E891C622BE799804F691EB54BD12E95F8CB57C618 -8FDEA75A9FB8B65F3AEE065B9B4C545AE70F9A1925A0D7BA9187E559E85C317B -F1FB71EAC15E75E1E93AE8D29A56F4DB65684D6CD4AE9BAA74E1C57914BAE369 -17C403097FC47954DEB81B049B99B80B9B2CB80B709FBAC869077B9E5279888D -987639D5CBC79C8102FB496E5387450808238930AEDC3F2A13558E56C9587723 -4F9FD604CFB9831A34A560E2F24187FD519A3F2DFA87541E4DBF75642A4044BD -B62A47799D79B6A6341B2741018FE8640CB8129AB492355B0CFA3B4C7D0B8794 -E0BC808057F439C71057A5E15C1008793A9733A0007D7C95C408443F851CB1AF -B2D2DE86AE8BDD6234002311C81AA07E10B58AB87784DC665E498DBD1F19C7F1 -7B3278AB45C358DD71821ED3428296EB77771E230F82933E71A99662199DFA5B -2A7988C4060180B916EE8EA9F4896C0975AB0B33928BABAC1D7B08C4C80984F1 -3E1EF19F0B8B61ED8AE5B5325EDB72234C4966B0953C463CA79935C22EE21855 -62C316E3C26BD4CB68482CBFEB2BB05C353F1671EEDE4D30162472879F82BC96 -F9C32CAF2AB2ADE3E14D704A1871E193BFE97F3CF8BF9C5E1806446FA2207B68 -A1ED6B9EC3C914689F2AEF2436792D25A7829C2E7D53ED15ACECAF1E79B589F5 -90D80E0A25DB1F40F6C1302B33DFB91A933B888EBA3F58D267884F0A4A0C675E -5CB0FCE0AD0F58B692344E2A3A20D657035046173A346C1ECA438BF92F75A047 -89AAAFD72B7FCA447146245D10B1508DBAC840FA1D52DC174DF2E64D6792E4B5 -874DD42DA10CF5C2F83EDD54DF2045F1E40F50F529CB7F9375BA7F5A57D0A5FD -D958183A252FD7AB88F9E2C099F587E716C6ADAC29A90619CFEC1E9E6E63046B -F688F7DD7843A1216917A0146C248FC12126E8DD38E27D05E8014C7D5614C661 -F102BB47A24CC223EB05E7F5A7F33C554EE4B5E6D16087884FA939D3E56A0B7D -1E3C9E7F6C3CE95369FA6796F24B5A11CF30FC93160366F5C2EF4FE1D6D1EE9C -E21AF6B09F1FE1D076353801D4799A38DEA9D323E8091F591884D471336F0BAA -8B353ECD3B7E2FC36F5F4C49B6ECA8C08078F857F919BBC14A2B51B239807698 -37764DC6C7BFE510F180C63CD0E1A9B001DE2C50CD99D934B71D9CD633F40341 -4C0E56063100447522DC53346428F562E9F6A2B4CE6644EFF13BC5A1B0C1E75E -659F64B4C5D31E51AA2DEA57882BA22D149145FD316F928DB46E680A269CABDD -196FB35A49DDE6F4CEB9D61654CADB3B9314EC1C0DCF0DF00DCA92A944BB40AC -31F94EA1FEC6993DC4E8203E6C850980DAC682B04D2161AE3F9E22F34A874A5C -3E24B6B0C44CEDC23380752B6EF7601670B58C4C9B25728709C322DD98DFA48B -C965B6A283D7ADABEE1789A8BD54E14E6B2D6FBDBA6E19A7DAF45646E036FAC6 -B761AC1BF621780B92CD97E068E50308D5BD6CA17F8BA70AE30B9C5F07C2E8CD -9D4DCEB6844CE6F2241B1D19BD6A1FC5F28848DB10FEFA1F55BED0283AD14588 -7051A33C3854718059920BA88259032FBF481F0F0A2D1749A867BAE63B0F6E92 -8A4CE00F73742D6D07DC31932D8526B78A806B1F242153AB3F358ED69BCB9A9B -EC008CB67844D943E1BD3512F47A81959D74397B05AA8F412A5DAE4F657B4738 -A8B77333A3FB07ED1BF72DC0BA5CA9BFA3E74AEE58754BBDB7D8A898C9B111E5 -194BCEA1DB2035C3B1F6E012D22785F9BA38FF027B3B622FC8F0F256787FF91D -FC4C9F64020219428302102566BB6A8D572450A2647521DBC714D7C886125239 -1001F1C8D9E928873665E89A043BFC9F4DBC8DEBC04E849B1D52B3A9A108FE6D -09DBF96DEB165F0521B90C4DCB60A8187288C400B85E6013ACA8227AE83A8DFD -351D6C8F863197A4D44798FA3A292FC2B21750B077E9B9670D25E023B2A6C14C -A6DECB08D3C3C61FCECEF890F02B6442D0D7C0D419DA2889E7FDC3AD977C5643 -3E61C6793A2729CD435B3D4CF67A92DDC450CA6F4328F028A962D0783EE0DAB2 -4E9D496FA28ACFB0693355360E997D3177640A354CD8DCB8263F18D621218201 -D1E7F6C31E8F08ABFDA261B7A3512C784931514773B16F92D04FC11B637B8BA9 -BAA804CF55C126CD35839A50A81B00ED35C3D32AA64BE73E2D4587025FF23A5D -ECD93B1298492A4FF326E74042EB1DC3E98B4F041F17F341F4277AE117D6E4AA -BD76023649042985D18C3C28C0FD330D6F0A74778787221B325C4D810D6D87FD -8EC7254D1AF3AF46C2BADE5D292225744945CE0248AD303DF4906E0402159D5D -BFC58DB629CDE8E81B6EA2E0D5B50E1C455E7AF6B3368627BB3FA73C2A72AB31 -627AD18658C8BFABF0D7B2E40A9E1490D03296AB1792E160FCCAF4FEF84B71DF -E284C03E87F17D3A440990652A9503B2C45D48D9C8DADD9776238E22BEA1C4A3 -AB05918672D6EC5426E06F688C42F4755635CB0F5C41694DD9B07C5945F6F7C1 -EBA7277B32C92E6754970F6821B217944E09E89A81F325D78AC5AB6E1F9A1FA3 -358FB78159C333EEF87541D46247902155B6DF41F1241C58197825D3E2F8C1E3 -9029904D5203F7120AACB8C012DEE6460257727E259831BF7CD658197343C8CC -9832FA2C62D730D0867DA1A688C38436D26837794BBF6AD78E3A8820867CF045 -C9182C904A87B9F542F4CD87E315C0ED1DC3A545D043C2F337312B0C70144BC1 -29581023FB0C7E114BF72C0D010B3CADFC79E87F303F0AC7FA0CAEAF0A927D5C -A9672235B9E3F4DD72112C1273C8AADEC3A8ACEEEE81927E3F314DAD0FA7F412 -D32ACF1287D1A500730D8BF20E290B2DBA7DA8A778BB9F206BD31E2989DDE5B5 -D5CD2DB85EF2834448364B7EA6DAF3BA0088D9D9260B6A44B0E4C2D3411E3F64 -A748ABC0A8E9BAAEF164732816DE572EA825D945F4E894D7D2E3CB36961EF8C2 -853D2905F11FA8AF17763C31B7216A8E6EEE28F8F3E8A7E9345D27B52EB6AFC9 -33462FD5A6DC850EED8C4F403626B1381AB6AF3D6E8BA6BC7682095B180043A5 -6DFC2F7D7304C905771279E71D05ED597285452E06928E3183F91589774DFFA0 -7344946AB4081EADDB102E205A17F49FEBC1702E33942F5260D87DDF65473622 -8218C9F68106399E2AF3EBCD07B6B58284CC3F4661CE7FBB21073D7A313CDCAF -A15A05658CB96154F2232CD57F183153BCF0DF1E96F1323D1C45F23D68536C23 -D2B141AF03A36182DCB872B6BE7EBD4423A5C048FEC8A6C6E92434A9E1B79921 -333A249BEC6ECA29FA4FCD627DAE3BA8F6E123D95297A9E2D1FCC426BF7E50CE -4842D85C3E8ABA8CA9241DF6AC71240BF1B73F0DCB13E1E9D2D1F9AA6A081476 -6CCAEB851EF19ADBE584A7A50109007AE42D3C3E29971D04A0F5FF1890ABD460 -C0F9C909685D097583ED09EFC536285F752B16A55E31E6B34402B6160DD97563 -1AD5F56A8F1F76A3EEE62A6108C2FA0CFDC25591D00F8896A8DCEED9864EEF32 -23FA25110F6E78C8F18A55A3EFCCE0922A3C733FB9D4C8E0F5952904DD5410B4 -5857953647FF97355F9CDB187FDEB54E8A6E4EC0ACF4F3C13251BA034F5DBD7D -C0F04E856E49FBE5BE24D220048B7D9AEA6689484EBB50AF1F7A1AC4AB251404 -8F62BD7993ED8AA929A029FA4A33CAB57BD9A54749A796DA9A9370E1355463D5 -4E158E05FB99E2094C3B273787D851D433AEE9AEF73FCA873329ABE21E5CC531 -81E7E9B76F347F43D36E16C10C709FF9E16695EAADE5566476B70906B2F93838 -CFEA62C80D0A5FBA21711D45DFFE3AE3F2CAE050648FB91C87EA39757D7D6885 -B7018BFC81564DE44580290F53FB601701342AA22C825C566961EEB9F886D550 -00079A5FDBEEC5B00293B784C5651C747D93149B22DB752958992E64AE87C919 -D97B0DD0851E105E8D4C9FD1792B94E7EE1566A482A55BEEE5F4782065667E99 -FC0B355020548E10A5D7786D6FE53589D9B711D0DBFDE94205667092766B8351 -0CDB4B715EB701B1BE4862B18FC4A26D3A8A680EEF001C0EF439972FAB7F79D7 -18AC641B6D1DD5A613868D67121C0B67012EB27B920AAB6FEC1B5D067B7DE813 -FF1F3CAD1C279036E0F2B02C91A32339E1AA011CBADBBEC510AC628D85273FC4 -956EFE7F85BFD2BC6D57E9673AA1402B0E145A2ADBF33C3567BC47B9BCE16A5F -A049899A532B554245FB468A6024E7F1D6BFFD3F0C63AACBF8AE866C0504DC23 -266A566F4EA034458C160DCA0D860995C246DCE9B8BC76B742AFC3A23E15853B -242CA55B38B3F1AC192CDA70C873363D4F6912A4B6A9D691A53BD33F9AEDB1A3 -0825DF6D9C57254666105DB69A8CD29522FA2F4016533BAE1B75031836AFD5FC -5ABA92E8588B152AAA2252EB8BCB5F5C5936E6072167405112A10DE09EE454BC -48DAF59774DFB93094631DB0F2C97480EEF0006C18766AE1EB1A16DC6C0B52D9 -9ECCF897B2DB4D0F690749F8068F82ED159207E06CAAC19EAF2FE95CD333DD6A -1DFD3F3C2EDF3C0734B14814BDAE8331BD430C963492FF6E7B0BB14D56613FD2 -C27A6FF7D390C13286DE72F5241AE846120CE1DDCC827D00678A3CF0E49CB7A8 -6B09DB2A8072898C89815C8B01240F8E7AE7E20589959FEEC6470089F8415C7D -1BE0D344166835AF7717016826D627AE4204D914A318AE84C6439E4A9E8F12C1 -9D98A1D5E85D00C536811CDCD56640D44C7EFA03E6FEAB29636210534E406252 -A99D75C077CF99D8AAD43644EA16DCC28C6F885A041E0B43981F09959A603ECB -19F9ADD4D4997A07B6317C731DD429A6F0D1D99CDCBC475FAA8BC888EC263433 -0BEE727E2E0B6FF98F982C1B128D097314AC7C696F84F19DAB10DB5160A59B26 -CA44DDCC9284B843425A302C5B21A829BD261FA33A44F339D51B2F95C949D37B -D75FAD32FFF3E76FFB7713FAA9F15FED09094E476382531DC9639FECFFB3940B -E7DAC4BCFA633EAD07643CB27D9CDE05AF6ED670D74760CECBF7160F46742AA8 -FF962C22E1EB0E492C75929625F6839E6190E81E477914979837A9F165B13B28 -C09125D9659BB596B0E8B165DB17965AEE56EEB46022390513F395C2987742F7 -F141E45BE948632B3272BFF43934C84950649B0AF418E42DBF71B4098FA8079A -5F26F81922D97866F8183783DE8289703D0886A704CA6C2FC9DEF3DD9B116F18 -23A11A448F7D8180E1BFB2369B2DA3E6A09AC65A3B7AE63EBF4E388855F85A7A -23E90FFC6965D9643E9FF8DEF8DF0DFD552126E19B92394D93A492B27E4D49E4 -36CCA1D51783E6A2A2ABC9657D5B8841A2F99E6E89F29C2B1ADD7C4D4340C3F8 -AC3877D3D11C28D6E1252E690B3F94704C9FD6B64BF03A46E1F399830162F5C6 -CA081A12E1592D9AAA6103A2C10BB2CA96A7BB2A141385C5D550EAC392EFF1C7 -FB1708AF908BBA2F807284B87764DB4BED8B26394BC24F07D731790A1775C909 -68B17ADB0F4A37B58F55E514E85BE8FFDE0D1FCB02EB75990A9BF953A88FD966 -801A2428593E86E240CFFD0F5A9481BF3E64AB2B3CF8D8A7C6DA10E5D4F96A05 -7E207E4C6F0CE1FE061BD6235AB57F568A664604D913F35AB9B9F693A4B93EB8 -19A583E1057E77BBB0FE596DA83AD659FCDF9F793417643DF22C12CF0152A76D -E8A1B9C890235D22B81AC5255BC024FF69A8CBD1565CF30778A80B56D31CB253 -0C3A1AFA5B912ABBE79D1E84B68407359F72486A6EB1D5095F8323609F0BFFED -303E9A448C3385521D9C6743DE00ED69C1FA67DDE59FAB55738EA5E48FE3165A -6A64B88D8B1F6E033C6209D2BD3FB040C0523A6D0C266758DB2B43B556A6E3D6 -2384F9ECC1BBF49F0A922FAB1E1934B279C7E8754E1C0ECCC831B3A7BDA34090 -31B9B02B8D514E21AF2EF6A66B248EF1F50CA646FA603F9591D4951C22472018 -B5D4C5822247FC61E4201B55CE9B76C0A79FA05A15B85736B7CB5C8421147314 -499706F303606B3A0F75012CEC4A1AB0F30802CF0B5769172FCCD3E057798E91 -CAB106C3B1A022E93DBB6721A3B1386C8878EB7C342D8ACD5C86A30DECEC22C5 -55C18C1DDFFB5B15D1A81CC9A9C67649B555D5BF07FD1BB5DCC7ACCBCB7E8066 -5635FF4F1DDF308FB2A2FDDACA60FD88387821B10753D7DF0AE56BAC14FAB05C -0A38D450C22F13F00EF31F73701F38BF229EDAFDE8C3F6D41DBD51616114FB8E -631C8D64DB1F5C0C359C1C46AD245ACF45734ED7D22A397333262D7268453D68 -B8AD396C05800C05819BC0794148DD20E6D8727CAA6F167F5888249C44BFD95D -A85B651D7C2732BD1FF349E7DFF7778E28C88516C04AB1C67CCD5CF9144961F5 -93A342144450258D359232F11FB19A4AF79A0C046E845B01FB7B5B5D62622D67 -DE1D52D712E1D1B4ADB8D5DD51309F2DABA84D38C1ADB4B31EFE80FB690605C2 -B63BDF89D1FDBECB2AE4FDFE47EE5C122744875C107954341113B31BA1AC4D07 -2166F69F1386BC784D82F69AD51AAB6C22FC8641F1AB8989307F7643782B3FB6 -FC72CE90B42A92156044413464F8634A5B4FBC48C347E8D2CD8A1A407C44ED27 -677CAB77EC2ECF29BD752544A69F46 -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l049016t.pfa b/client/nfsexport/lib/fonts/l049016t.pfa deleted file mode 100755 index e47d5bb9..00000000 --- a/client/nfsexport/lib/fonts/l049016t.pfa +++ /dev/null @@ -1,1582 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiSerif-Bold 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Serif Bold) readonly def -/FamilyName (Luxi Serif) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0.0 def -/isFixedPitch false def -/UnderlinePosition -36 def -/UnderlineThickness 72 def -end readonly def -/FontName /LuxiSerif-Bold def -/PaintType 0 def -/WMode 0 def -/FontBBox {-217 -211 994 1012} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078992 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D9E494BF284EBDC8877C4E -5D28D2A79EA7D5EC25EB01F73826320B565BFED33D55B5D2B4128ACF57097B2E -BA8BD7BC7EDE9E6C636AE6FF86DFEB5E9BCD723BED1C30F8B20C4086BCF5FC74 -44FD8939C7580185BA7BF311E1E56D7C53EE70ED83BC1615501895EED5042083 -A5A0D8CC28978C5DAF869CEC1F15FBEF2A58A11A3417D1527AB511AA9B6746E5 -5798FDBD24006F12521FEFF4284ACEDA2A6FE84D9DD417103B4B1FE7FC2BC351 -2564D903599E253F6F4BD11D7B3BFCD01EA9DA51FAADA5F18B9F5E5DF25FA0D2 -A1BD84D42BAD716CA9303DFECA5DF05B26EC60612FBE0E931112268B223FFC37 -FA3ABE4C7E429354DD82D7F24B6A342F53EACEF4188937778E2F037B002B29F4 -9A4BAA19E878E7B0A6F326E3DC7949DA57D84E1098506B0B4C1BBB57196B597E -310BF7408315F69854ACD0F8E8640A70F20D4EF409AC0F891554643BD8040BAA -6C11008AEE7BE22282A1328C271E30817386EACF45542EF2DC63856FDD867C3A -4408FFC606DD5937B74882832FE9D3C806AB1C6594AD2F95B763919345E37202 -5C3474453ED74E5344ABA7A92101A287E932E8900F7CAD3083D38FE1EF3ED4A7 -E6C2A0A8A19A2DCAA58F823D354994C9BAFF5FAF8BCE6A50B275F8958E9254DB -32D7BFB3A1F3739B650B9704B7AE03378D90E8432A1BEF6EF20F8F49EFD919A6 -C9C90F60822299B0B50C0EAE5243AB66D9573E257E99ED424D4F7B284B779EBA -1B47D49FFB539EF6D3CAA911911E7CDD9E7CCE13F60F2C698A7E4AA8AB3A2B2C -6F3C86B9EC9EB8A8B8687FCB279B9B2B4B5F838FE25EDE772B77407CAE3C5840 -1EC417A4D627AF14F5E8D5D45EBBF564279361B871A0A142962BDB83EB1673F3 -CF7A34044DAA42321ACB120827402D43CB17607D9C8CB2BC726B8D06AEF513E2 -72CAE380EC17A1A2B0F235FC70D479A606B3360E291426B0C651CED104A39B26 -C4B14949E12B160B048969242BDCB760C123FC89DC73D8A628448CF678C9F679 -99EFF5E798EE5E46F41D1B84A38631876EC8CEDCEDEDC21038F7707A1F4CD355 -81003CF5E163C1DF8E76B1C4BADFC4C887A084E94CA74AA5314BDB69CB0C5F79 -B80DBCF17D95CE7B1B0E3C68652158131D8B776C368203356AEBE5DA210EC561 -8B56C1D5BA9001CCFF14D7AF2CE1175AE66FEC8CFA4F1F2D2C2FCD5C00FC62C9 -98F5FF6209542EEB45BA0DD8ED9CD08DBD58FF8A70C7F1578AB22E25136E31E6 -DFC05DC28A66C6C852092E56590199B2394D5B99D466EDE33EEA357806A3D0D7 -06B658A6528AACEC3682044D37A42E960E1B92E7E064AB891AA0006AFDE4D8B4 -0E61B0480EE2879F3C8455785EEFE3E8C02D9A5EB4EAC0AE01C79C44F84195CC -4724AB8ACC2E93B1551E750DB22D707F1BF8FE2E9A751E542F347A7E54C91D69 -25E99CD65F7A348E6234D1933177E5EAD802D3907161E7A19A3AF41378FDC8CF -464A5A87EE4D83218A9CAD27B1F349E55379DA9640739A502427F52C6A16CA7C -FB8E3F19E256918FEB39D16B6C4734B058373BA35A222B58A6421F7FAE124E40 -B11A646757F60DB2ACBB0E8EAC910698C137FE9149DAA39EEB195ED3823F0308 -A8BA9E889E618458ADC62C8F372B4BE51B66FF0E9F9837494E1E04077959E166 -C3654872114BD6A703746FB31E330BE538EC7C440F0473D5983C86714E002205 -7469E7C388E390068A302F16F7CAAAACE00BCBEA71E1C58E3B59C411965F07FF -04C2FDAE9FE2D314E85C035F58440DC004366307A9173BA9342B0CDF58AD1980 -5C38795CD0967F83E13EBBABC37CDD0155A49FCCEB5233B0031BAEB6EDACA49F -E842B25DD5E791DE4908C94E372B2075F9615CEF9275316080AB9F5E678AE30E -CCCA7B2C9E71571B42A5315849B08DADAD9ED58120D77BC16019006704D436C2 -B36A8B3860A5B63B5864383034B6FF0252E29B409D01BFF9752D9A845493EF2D -2F1DA1B6DA9933D24729E8002E4507A15D90E0CBC40FB562E4C0CD70A95B5D7C -E70186CD14657AE2D308DB650768E9B135E24A82212A99EA217EDB93D1EC03CA -2FE7B4ADE5FE28A21225F39722E0C2144536DA5083965642FFF7438AABD30710 -94D3F4B1118179748A71133050E51C94D9928885FADDA8383EF01BA234BDDAB3 -273FAC0D86260001AD472BFD440009C19EBA1C212C581888FCCE590516767F4F -A17C7F5BE71A2262A34673DE3CA11EBFFC1A971EBE827C4A232E4C6CBF65DA34 -A1D231C875BDCD842BF21E1C00E28AD90C73571F040BF095E28B4F4AA5E3833D -D050545E8B5A04A2F67B7C0EE5B49ED30B189F0130D544912E0CBD25D09EAC0C -334B30759FF0ECD7FC05D11830F0ADDFC9F84028706324B903AA963FA4FEB4E5 -12756E76F8A55E130A14866983058A7FA9BF206924C0C7281E7EFDB384F9F1EA -EC120F349CED13B2F2FBDB930D1A66B1AD1C10B9E66E7AE2830B9BB5A51D0DD8 -0A5A0A0729571B9DB76123040AAC7E791137695FDAB0639FD2F994107145E1BD -A539BA84A3DCAFFCED2FA9A1642FD8123D65E24FEA77CBD299D22AB1DED3AB40 -F0DC657EAEC450B1170CECD360093EC0CC14E2F50E141B8F52A3F5B9D7CFCA92 -30D819A34BC303DB080E7919E573B46489BF79691880EEDD6B992CD63374DAD9 -2DDE4B0DA61C03CB953ACAEC3176B7C474A1A5A351B259098FB2425D2522018D -98C0CAF94E047EE130438CC2AEA2AC11AF18F652C53157DFD31F44261103DE0C -4D582D29B23BCC137849306504F3CFE49EAB54D05FC62754A3166AF5CA301F89 -A1016CD076761A415C900AA958F922C6881BE652F32ECD8DCA3059CC335D3D95 -AE5C4F0DD70CE9DE75407AEE7801B9839A56C3E372F126A22A779D949E4111A1 -7F2E1B2D884ECAC744D2E78C1D16A8D3D67A6E818BC347F6E6DFE71ED0A7F45D -F37653BEF6DFC90D98629BD09DDC53EE1E2227CD0553375AAB4A3F10ABFC38D9 -A55A4D376D18148CE67C7D0062AC884CBC6500E646C84DEAB420FBF64E4B4360 -B2F5EB123D42F0BACF232E9F3392FC1704EA390941491BD97D191F198976EA7A -8FE3D14141E1BDBA8010266CF791D0E700C1F1C1FE69709712EBFB2136026E84 -A246F78B6B713D7DDF9E01745AE071B8CB052B54D5545AB56091E3134306A532 -8729EC3FD25AC305D3D39571C2AA50D4FFAEDECF998BA46AE033AC1D5DC3967B -C846E475352E0468C0826A8E040332D9AF6975859E069F70F624E8A646A65DC6 -1852339A3857C96593FDF7F4787E5A7D691C89396F4B5D4DF91A092863709AA8 -F7D8BC7C7739EB060C3BEECA0631CF9F47BE4854248EF5E88B79FCCAD7C19BB0 -1B745E6DCA8034363F4C5CC4B305FF2EE1B2B9A234F394EBE15B82B5F317EA7C -39183B8D590DA62B3277FF00283C5F5DBFE10F29AE99581F6A9227009300BE2C -2B0E509BD87D96AE7C5B198C8FB02DF8E1E5A648EEA044A5AAE0293BBE43D2E9 -33D55B70F8BB33CACEB5DB36CB9A731B3804D859E020E2FF49BF121A7950B984 -7B0913BC2139A8F70FF6DD3C6DC638477E4092F1179D540CD31C349CFB0AE55A -B0E772894CF02BE0637692FD6574D4EB2A76E93070556665128B99C20296C550 -8BF29B1EFECAFF31925ECBFD147490E3898A98D374904CB7BE2E7C752734A359 -FA107535533B4A97691A242FBB82D66C006A19374AE8698647CE8FE951EE2B84 -0E5836F8A3CCFB6F95FC009F8B5D200C0ECFB0BD6692A8644BA7DA5CC2E80DA1 -10ADA3FF7F79A40AEFCA4B98CDC4EA9C29BC1E901CCE1FB466DF65233B889C24 -DFA2E161FB6366CFF3AECE89C404283546D7814B254798EE928D74FB9B72B709 -E965F4369ADAFE799B4510CFDEFC772ED5516D9EDD5F1AF0410F5D82CA9DF5F9 -5134D9B9BA4984B5A8A3D8320AFC0DCD6305CDF582B08E28C28F0D137F73EAE0 -800469768BA91CA121A42D04A606D1722104CAED2731D73C3304F7C4371A1319 -F9ADFA53A1F7A7F8EE4D7B74E3473EE3C11AB66BB43756CE0D57AB36B5278E43 -B860B5A9C51AF0BE85CFEA6C3D114AC0AD68919A9027DA7C80D5C3456FEF5824 -1447D68ACC05CF272C0D0E62548DC9544908B9F50F5804B83C229F5E9B65C3C3 -CBE220648DC64EFC53C40473A421301F19E768D3BAFEA7FEE49FD3B4EC279861 -D9D751F4D49A64C463EF174D0F7672042E22BD2F55AAF7F531809A541D5146CB -FA4D776AD1AB10289B6EE3E01C19B8A8F7A282AD668D5F8B76C45A68D51BF56C -56DDA612D9E4FDA940D2C4B75593834F882AD142E6E39FFC70744CD9F3B7B19A -1FE25627DCC832F20296F2B4608AAC873F5F7D859D5BCC5C0B83DC569264102E -50BE5724F8F64CB35C8FACB12F460A311D57F4E52B7A08A5930BD56951C0C88D -6FFF6A6A18553FA7A2731F001C28093813676C4ECF8FCCAD89D94EFE35996AB1 -776298BF7E1EC9AB0FC95D6475A635B89F7E0EF16EBC188B1FBE3D105942CB47 -0A4BFB9FA132E1AC19D544423081ABFA1AAAFD91165B378D3CDD2734430EAA36 -B070A780F90863631E2C7CA2079B1EEE7666B975FB9BC62C37DB28EBBFF3FC57 -5356BBAC08A908976DDFCFC1664927E69DD7713A47B1A4150EA0762E9D30455B -F840841688DCD60847AECA495F411656D669AD3168F261BF9C31821EE3E8685F -761276952DCA7E4F21C16D9EF197AE2FCE0D1E85263C738E1CD88D4147ECB87F -7C232716CF20C51575BBB0C771FFFCE3C08CE867F426FC4D1DFEFBFA1618ACB8 -ED40168DCA837A254EDA92887905BAC603606E427256D2922D6FD43AC3A18781 -63EAF11A9102411AA6CEB7119688C106E71364A973EB54F1869B419AA6770383 -9D2F9E5C0DFCD9334CAC426FBA2AFD070A0374D65FF2C203516D9E052462993E -DD2C77E9F84B8299B2399045A09E37744EDD3F3DC1599A2B8901C84DD5640936 -8938E43B662ACBEF2279B10F44600CA2C61647B67C8909097119232BB82262D8 -8C55D939A457E84CC03F2DD9215C78CA82EF556DEFE179DDC0D248A933E9F906 -70850D991D72913C554BA1E71E71CB773020D452247B7B482370C8B190A105F2 -6074F9E154E9BB43CDCFF610B2634061614BE281B1809E7FE0B60D308507465E -13F424FA991810117D147A9D68D76170C75502E60E95D19B30081969BDE3747A -1CD185820B4080697411DE70ABBA838BC6AFF19E11AE35B5284B2AC7A96CEE55 -1D9415C7FB88CDDA4958F9C9892C1119B69B5E2B47B2896F31DE83F6476510AA -CCB73E9E3ED534D7269C8FF23B4AD964AC6A920C20F0CA0C469EA85F6D675436 -CF22A3B92B7A4BF502AD1A94D0A575A82E90ED3CDE6E422B73B6B76C23B1CAD7 -7E246CD8C3FD6A40CFE5E955613118FC584DF75CC434F8DFD05181056CCF0CFD -53BDD45E4F8A9424C3092C42FFF19D59AE1C003D3FD837882D6B0B2A00489F23 -518B48040D40CBF9CE77733823CA610735CEE4FA8C907575F0F0CFCBBA4D2E50 -04ADA5DEFC707A82324D7F288302C99D2ED5009D20FB875AA0F861479497643A -0E041E76CB10B898E1EC007BF8F70444474A75D3C005ECB947B8F8DE8356771B -EF4052F1D5CB3B19853804BCA33E0EB27B418E75AC398E79B1A621F85E4F5C26 -1603C789437477357A69A585BDEF24F8F0C9246FBB04F40AB6498FF72BABC3F9 -2C5D9476A87DB82859C374969A1016D0068FEC4AD30EAF10E871DAB9564EB600 -8EA14C41EBA75DC1D4B4EE36AD57CBCEA9E862542627551B530AD763BE607808 -5441ACFAA3AEA5C6DE659B15F522C10F7719A4F868473883B8D1BC1E40F7E525 -3C1196E9850B6D58F7673D6403BEB6FEEDE3105BC4F7CECB15A3BAC37E77D83A -D802F77B9A4B4014C1FEFAB1DED101A0FE0ABD220965367F99DD6E4C34C6F47F -040B8A1924E7889DC4A131408D8BD1AC15B3DD07315C4A30BD30BCB9C03D6C90 -ED4295840906E3AD448FF83F74257F0549BAA5F0D96FEBF943F07941121908E5 -AD6A27A33BC555B602F72F067273270498410D2089C3D1EE95D2C423223CA83D -EDDB1552B6E121D9FD1D0F5BBC1E9E8269C0CD6515B1428D61704FE230AB513C -AFC088CF436E7121630478E115DE2F5157D244B6E081FD74E5539385F6FD056C -5824847358D38BEF8896B93424F40ED6F485CDA0D9AFD896F921750E331ED55C -B58A93CBF1F74F1B11DFE0E35EAA56580E949130C6D670271921C65BF946FA75 -1B9472F92BDFDA5D71DDC5C3D03260B67E2D94773961664EB4FD4D23D49D368D -F2D8ADB7F2D6D41A019E20654EF4B78D35F26A159E48093EDDA1FDABAC484D23 -88EFF39E0A4C2A64953D53B6039BBA748751F4B6C077C9B66AEE9127E646723D -26F7E288365818F30A38071AA011E67F0E9AB64F4A943BEFF67BBDEAB4915B31 -FB6326BA1EC27EC9F525CD183D97015750C17D2944F793407DB6ABBB72AC2F85 -98C449326CEC03227FC767470A3F102A12C2A8122396D00025D84A3778A50869 -FBA49AB1AA1506839DDD675A8AE2DE1E44E83D300CCC1561210A23D1A97CD590 -FC257FB5367BEF1BD15AB855D07CE21771EC8B815094721A1CF7306AFB4EA421 -DED331B92C7481C683785A92B9E213B04A2E07F420ED9B9C025DC23D4FA9DBF0 -B11D6948AC62ED02298B8F1C6B519364B6140AB89B4B53CF1D05FB954FE7C185 -4C63616799FCF3492ECFE06D0D1E00712756862C3F0C1BF21FF08564BE0A3AAF -9364F4E7DAE16D828E7E5A2780BF6A9EF1CFCF680B4A96CBC4EC5DFE7E64E140 -31968BC00CCE67789EF5BB4B1E7A57D5FB53819CCDEBF38A555EC145FE2F607D -C199E3E514EE3012CDEFEE1FD70176F39B5071EFB08DBF3FDC2DB6E89E2CB41E -5F6B9528C7EDCBC41B3C4860CA7EB9C469BE1D5D1A9E590F6E721A956CC53870 -9EDE2D930ED28AFF92DC834913C4284847CA619D27B68CCDDA91E7BEB15F44E6 -DF8B38AFA1C63C6F484F0001247F6C60043DA83C802E0116A1EFF49EB943EAFA -01412A0D518E2E860F61B649D2AC312AC6D84BD5D7DE93A13DAF1C4336105813 -869D47538CD56009E8BCE20243001E87020BB2DA91D83EBC9E9C98171F1BC02D -56CF45AC7DD7358ACBF26590A7894CA6F99AD01351A384540B9615C233ACB22E -519CDEAF5A0A975B8B6E7C711DD98603F684259B9210E8642D955A4F4D977291 -4C9CA4F59C76E598F7E48DCB42A331BDC8D4427A13468B735FF5D2F58296FF65 -180B22485EF5DB6838A5C049B1371571D7257701929CECD5E1A315AEF62E2E98 -2AAA70C380E40C3CDDCA85A71558E3AD0AA1064F840FF75334059B84A026AAC9 -DEDB589213D45C520F8BF067BFF0170BE3120A8F6E3BC29E4D1114DEBCC4626A -96926AA20AC4396734C91808EC5DC632CFD69ED1D517D9ABC261E00815E1F3CF -A4ECC31B5B0348F96BD4AF2EAAA634EC24FD310F86E5C760A122ED44D2962EDF -06104A5DF36138284743DDDABC2EE689499333EB31347F488311A93DF9AC358A -BA157B8898903AFD6CE2FBCC2A558360D174E2A68015A676EF8A3F0A26021B55 -AA27B65B2755F48A46920C0BAFAAE72E051085538F6C60D0A77295754C755BCE -D30F94627DF2AD3311767D183A22D64480ED1E06BE21162BE345CED43DA52047 -3975C8647A025E2411F15A78368A2689E100D692F23E0FC660D321D55ED4AF88 -01532431864B03835099474C36F1C39C71173A04965719A7ED95995AD5AB40F6 -E8A33CC915D25C2E9EAB91107E89DF746FBC96DFD6FB7A9F020B0E3AC7C81150 -C21D9E5D9EFEEAB4BDBEBBDD705BFC0F3F52A77044831A6A0397DDBE135208BF -1E86FE2830A8311768634E62B589921D1B5B1347ADB167FF9B410FE902ABE465 -2E0C320C3B5F7CDE7859749978D7C2C80E5FE38901EB75FC166287F5BBFA6848 -C839C5FF11FB245ACC7B6C8A74720BAA44625D84C721AFFFA310E52EFA782EC6 -96014134479A15A5C6DC7D11D8256DEA0CC645D9F0B0524D7885A8A59A2638AE -9DB5273E3F3302D1C94C96CFC9CA768F3A1F8E41543A272FBB3D40D65D82EDD2 -EA11E127CF93E345E87E41401E2699FF0BE4E92814DD959EBF4FB412D768361A -7CA5399AA68C6153C77FC080273FF4A987EB649C9F5C4FC18BF106E13BEBAE7B -8DD477865BA85C53A797BEF5F177C053ADAA1EA2804CF04692817BDD0DAC9936 -C63088AA328EFB1B4CAC4079C2EFA244605E362EF8058FBBCE41C2774AF399F6 -E9949214D2EF9B899B5CC5F628BAD3FF2054AFDBCEF21A29783732F56C52D19B -12C2301D5C525099662DA96E0E07CECDA9A2137655A3BE6F6F828C85408913DD -8F31D8521A84FF78CF44DE8619B8E922CC7313090F45860C5847A50792518480 -6CD5C1B6471F14D10372AD4C7CE4FF0E6A9B4D2F627A74B52660794691F1789C -BAFA5D38F92E492EDD7A0DB2D7E860250C0812522FC5B912CF0A39620FCFD304 -D67F4F79FBD079FC05E403651A30489B717FD71C42DD2CFE0B970460F7D12C2A -04492DF55C523C5E9C62318FDD451FA5CD0B7325172B5A07287DC2653BC5EE83 -0B78FF312012FB0AE605575EDB52F2A1F16509C12EFBCFBC070A4F9A90E58F27 -30D5CEBDD6DA1D2D740E0EAB4AB226F245C743D2808C3D843722050ABB626744 -652B3D3CCCCB276343C1BAD5C4D307753FE781FA7F47B3D9FAD9088586FECEFC -E0977B68BBEF19034F53FB1BB7868EFCE3F3FBF89A26FBCB3F8FBF55C12017A6 -4743BD2279542A3B824ED697B866609546A4C27D97DB532BDE215CF8AC0C5E97 -059A761A197606B6285D936096EBD2AD7DE53C8CE2B0D0B4F7E50D5E11FCDD0A -2BF4736B7B9848FD1D4ABBD8A6F3903F1EFE48F0034F9C888923EC768D4DC7B5 -EBE32CE269396D9C198BAEC1076F842C503E546705FD1678E7C6B8C3F5F431BA -1C63CC1198893BA77CC79E5829E39B541962F6B110E9CF545B064E46F3539A1A -CD080E98DE474EBAD440ECA7E820C145955BA0B6CC80E7C4109185A3877DAB6D -4886FBA0D66D6C3F619ED6A81B346F5A196D1CCB4D796E02C35E5301E9C34A58 -3BAA4CC1BFCD6B0906FF15F200FA5859E6CA7F2A21872A51B7E75FFBD92C3048 -9297C015A3BEFFC5B5D13A988AAC23AAA4F0DD4F86FB5E6FC8279C43A10D5C2F -624E8CDD2C03794CE1B2246F7BED4DD4564395FEA490A41E5345C6F86D847D0A -7AD58C606ADBD3BAE5E649998FAE5D0257FE2878CADFC7581C22B31CF420A0BA -A3A76624A582909E209E53B462BCA38014162605977B87FDB8ED67757CC363F1 -A50E5DC6A8441B9406D874A756D91B978415651D91E8BAFF5879235B830E8702 -700D5A797B9E1ED4E04123513DD23604951C26C892004DF6B8DCE876430ED7E0 -56BF36ADA204464C0789A18B2C8F9B212BBD5E8C9E2925D40AFA394F8677336A -C406534E239292FED55B20E5A8F986EA761D33B46BEA1A37DB3E76FEC6A5EB04 -BD38F5B8DEDB095993F81BF12936932E610D72CDA00A2D3CC2522793B7887B23 -0FAA526C9D42B6C087A936EB98B776EBC2BE5E2A3301AE9A91044DD21403B2F2 -976BE40E7374CB47148F8CAF85C16D7DE4CF8FFF13470B2E6925099C3C97219F -5F967068A9E82488FD591A964FC3169C38AFD8AA352CFCF35D3E0D6045484475 -4EF4EEE6AA387768FE9767CCD9F81818BBC7046AE0C2B7B42BEA5FF70C65CD66 -2ABB14F1E1FDE651C260129E2235FF02A7F27F1C948CC500657A536FACA3BA8D -8C3FB591601310A2315920555BE054BCBF4668DD8032C562EE12D2C7ACB9C50A -11CC8E3B3EDCCA00A5067ED11C24E5F0037FB82955F242BDBE1524583D2B676E -12BBD3C0FBE80DB47A23D4EECDD1F6545860A415AC6BD2E852A39DDB12EFC723 -D0EA87E1A454B661249959DF54DA9DA50970BFBE0113821F1CE71670827B443E -6544081B2BE1260270A23E9417E4B0155A1302BD9845A5D62FE9EDF7D1172353 -85BDC4F2DB55CF4FCCA18ADE873B53FA4FE0B58EFC867599891A165631064771 -5CA76573ED070A85B135EFC0B619213E0518F0D4A95490C32535F66695C84124 -A1413AD30D918BE68A3335E65C2BEBEBE4E29DA17A0FED672F3B714F809C157F -006AA925F96003CBE7DB7C7FD7BDC5A890B9EFE60E9915EE7AC3B3FB9EDB2CEB -581E71527907A1E43FA1A06A12CABE01979FF0E28EFC4965BD7ED592142D9F82 -47BB2417B528590A116C791E19A006F274035B74C8401A35952844F22DAC9D07 -EB2F28E3C9BC5B8E1373F1538F67686055D1273C565F536E9F35225A67D53E86 -510F371B7E6BEB04027216BC50AC67B2C0E9F528CD55613195C351098FF6F9A8 -D713269EE95CDA3CFC786F8F28DC3BFA23C6E3253E4E5CFDACF097B862636CD3 -B7C78FF990ED9B7BC27AA51DDCCF408F0EBECC40E555250C8077DDA1646D8BA5 -00697705ADBC54DB525A131A1AE59FE8E7C3FA81A913FA5C6BEAF2FC393412D2 -685F1AFB5C1B6208AB5E4900E29036832E8942550F206D721A759E994814974A -11EA5E5A027C3870A06622FED8632C3D125ABE15C71146A7FA4179DCEA8BA117 -E6CE9AB0DA1373933319CD27BDD4C69CE672491B1F15BC249B7126F141FD1AA5 -30121588773D42E0070723427DF6AFE7FAE3DC6B940EE28A8195489F1DEC2811 -A4773B6594A8BBE4F439EF76D5D4025BA7FE822A72C5D7DAEF0F1C88342EB016 -26203272584C62E26D16F6E1A5B37A65C51553F93ED4EB12E95D6F39DA5204EE -62B52BBCE5F29A47D942F247A10446672FF26C6F710244A237C89A7BF6D86F7E -1889103269B8932632BC0F0F89FE477C24133D8F06C1C74325FFBFE82B59923B -06045FFF59B25B50897E71B8D94395A939C9319190F0D891C24BA6186900F8C7 -9824B378C8570583C5303AFECF6D32A4AA96700D915D0DA70DFF8765D44740B8 -518FE4A6A8049E3CAC9589A3C0752F4E0DA6AAB319E1C21D0A760867602A9CF4 -CB372F3F4B7B28712FDEDABA55A6B24B533FB96701728762B2F7FE2DD070CC3E -7FAA0F6214500B495F5D986D13C012310BE12BF864B7928BE4FDD9DB68EE7C9E -21D645094A676809C455F8AEB85E5B5B33F9AA13ECF24E5258D49D2B233E22C6 -F9926353011DA6B75D17AEB6BA6EC8E4A405181F04A656E0CAA13BD463BDA234 -5F4692AE9FFE0C4240B7F260AD199668D27C07ED34E69BA9C3E09AF0F18E5731 -71C576C4431B9DB7E83D645E7FD6D3DDB5AAEE00A9A3C806FBFFE1D8ED8D8A47 -4F69A5BD9747B6BFA7EA057DF540203AA6030B5932896D1E586A8AE9730B32A2 -8F6B27400E4F0773262505F37CAD309D48B02FDBBDE883E0DA5CEE4AC6B28AE1 -7C7663C7B4AF5EACD32EFC8A8910A3BD514B8E19820CB2741BED0C03DF65DDF7 -ADA651E232059D9AD05257A8B271BA34007E8E2D6BE190CCA9992011EC455E7F -1443C4DC5BDF1098C399877B64E02DF566B5CAF6B8BE73CEC6A2651305E32C91 -2670B1D570CB8F2CAC29D30588D7C6D3D810F660F7BF30C18609D72D60FF745D -D879957E4542F5877A05D0A281BE84656D3D9879FFCE5F667854CF00DC01B8B2 -38D2473544E81D8ADFE49FFC6DBA711AF38BE51897A42FAD78DAC2D1D08A3780 -50C9B002A9EA58E0DF5F4FCE96F3405C9BA1F32C91405CD058E9EB51C43457B5 -62755B6FA91CD94C22297FEB48DC03CB78C0EFA09C74D2E7A8FB253ED4F6769A -E54731333C9EDF078829A58AEB8C1D28D1D7C852EC574B0E2ADB99F2A0CDE7B8 -4FCFEC125944835A8E3F1FB0C15FB669E670D2D8DBE24886AED75A9190BC52DB -BBEDC221D68B88FF825E69DD69E61FC2E37459DEBABF7BCEBC179D4082DB17F6 -12408DA590D1F768F630951D7C72A74E5172F71C97624F2F4DFB37E4913BC382 -990F61400A362D5AC3A29D64F1F1BB24E572832C8A1A8983903D086ED747442B -EC2DF2DDE41AD05045AC4BFA77F83342BC1CE856BA2359A66612962A5A2E0635 -806D70FF2F6FA279F639E5C38B0360C33A170362F5EA48E096CFD7BCBC43B49B -CD4801CCD9E9C421F24B6CB3F793D4ECDF9B1713E7C141934D53EB8FF655273D -810ABB04AEAB956AC369DCC11C17D10F08BA7F1BC47A45B3889068A169A22761 -52149F3BBBE409F8C28FB89460B55FCC0A357A14FBC50A396512CA588A4B2324 -E557EC51138CEA0ECC37980259DCD9E01FAC43FB9D7AD36B1D17656A932FE69B -3D224B98F0E562368682150C9D9D4BA2907E4439BDB7A6B8F0D18F8CA351B446 -96CBAE1B9EC0C1BADD2EE20443E01570A39BE38FFF7A2329CEEE5EDF6B2DAA05 -C51F9F75B21E7ADAF05591569AE0DC92F469675588F12A28E84D178699FB76AC -D75E66C0F26F4CFEC9BD0597DF10342033D0A2CDE6DD2576A651DD1855DC61DE -FDD8BF33FE487AB7CB0FBBD811F413BBE9E23F2C832A654B37BA922AB7F6DD9F -689AEFB8B49DE285E7CCA8EA94A0C45B5431732E81F5DD0FE804CCA7C82D5234 -672B3670A16EB11024C31FF89A5B4C03B28B2B582315307C8CE8686557A644F2 -65C8C2A9CF1C9A2862BAFAEE0E94AABD856A183394331992EC764A3B82EE4306 -2B40848D8D95D0CF561911797C9A2C6D9E334D3F6E595D59F54017218A8E6376 -39235EC929904AFA8EA42EFE54D294768DE0B68B4C1907F61662FA6710682673 -AC64FE11B84BFB0BAC6D1F5F90FC91AA5954BE48868AEEC05E19117B682186D9 -A0CFE621311708B56EC668EB0BCCD9E9837CD7E957D72AF5B562E51378E8A9A9 -34947A8BED94C55FC7A429E28DFF9BEDFB3F28E5D1A2536B84DBD1677320B132 -27F8A8DCBD4AA2B971F2F02817DD7753431BBB210216F822CBAED265C55B79BA -D7D5FE873E093D62250A27022D63D7C0823E9FC09209550DD4BA413E50FE2DAA -8D60AD9AB7E6FCE79E1B6CD6FA41F5C723DBBEE00FFDC8F614DE64DF40B45BF2 -84D3B6F96A1375CFE96E446E6757F31F8FD2E34DD88106015037F4F5B5D381C5 -AFA0D5724AFC260CE676DE70C666B34520FE2E2515D2C5194049F89EFB0D1A4D -10D40A12986228BF3CADEE7E8C9564F9F2D61E094C44310FD5295C5AED950A23 -491431F3EE071FC38FA803DFC580A7F0FCCFF19F3D8CBE0D503057E95A2A7D00 -A490CDD1BDE01EC8370310A869793E4DB867496094D4B54B3B9AC440F304906F -AFF32EB87AAE8075149299798E681B83D47935D93FD3A26302E5EAB671BC2C7C -7E87A4C1789A772A9643C5737084462AF596F23DF9F36A8C00488FB78C6ECB64 -60A22C5D2DEBFA17E2A78968EFD029A29CC04B6E231B58ECE47CC6C93074F701 -65B19F77969B4DE3A7272E769CA00D5C481F5791E559F61A68CA64D4FF88D513 -642E82C48019C5BDDCBA0246448BCB765626462BA0CF6DE0E55F5C4090DAE3C5 -15076B25A8673D89A4DB9B5EC5B133EEE44BDB76AAED2A91FA68632997927EF4 -EB93C9581DA7663A24CCB982D1BCE9315F8F719E20C9E388907555FD27ADD8CA -81B8A4C5F4F7614F15F5A6D3A542E3F22215F0DACD6D78E22209AAC0036AF039 -12045C916E9858E2C07B20B13B4715DBD513DB1003D256811D019BF84EA41069 -53731364B773A23EC103ED81FEADFF565BADC9B698819BE95D6386980B13D678 -A33460A92BDCC24FB6EC68FB73A8ABB4D240DA5146F04B1529EA28B8C47B661D -3A27F5E03DFB5C7BEB8B1E6AC63E1CF7236198487663AC00BEB5F59EEFC366AA -C9FBE97F8EF03A80F37DB7F1D98D5994203FC3DAD6EDA29CE5079E09D504E360 -902FAD0E67257EADD77A989756B3F1B866BE530583CA81610AF81D516A78E37B -4AD1D27A2ECBF67AFFA6914F06CA73AFEC79921474F3BFA2D2C169A7666BD668 -821FEE767FB326ECA936FFF52FC87963027983B23751956C9780F1791595C91F -3A5B497D8107667B12CB2D31A64F16F51485CE00F376DC07CEFD4DCFB7A91C27 -CD8F3584B14CEEAEFB824C59FB4852C2F285159BD37CF3E3880F47658D3799CA -E8DCCD4C79144D1503EB5492670440976954FCF0487F54EB23A1CE0A139AE7E6 -3F34594B7F85379745113C0EE8D05E10A6E740A76CF900F5EF056DF772B07258 -A3206320647253786225D4CC14548B1750CD034CBE4FFFDE56CD84B07896D08E -2EBBB9006DEEFE45EAE3688F06806CABACCB255915C695608A6C99DB3AF5A6E2 -DEF0B77D903B0BDBA16C66541905C737FA79CFEC143CC89C4CA56857096E7A07 -B8A0E2E16C778C5C929066AA567449553D2824B68EFBF7D7184E56470080D7C7 -C847A46A9C6556560B86FC1F82B7231742325E718990E81FF7323084267F46E8 -9F4B6BDFBF811CA84296216FEBE788EF20101B48EED478454F1B238C03A1E0F3 -DA386922D1A038EFD0555799B29712FFA294AFF0312793F2349B1DD00E16240A -6AFBDAD7B8AFFD1AC1AC380F35CB7DBE92D517408EE81517C04D9A82E1A6DB84 -EE4A6EB49650B0F94A64500A771CC0788F0CF8EAC76EA80437DA23D05651F9B2 -65C5112FAF87B2AAF4A8E07DB8762229DD3C2D74C364ED6F41E853DB2B6DE3F3 -9AEF626535EF31913165796AFC6989371B04BAE091F9980448315E43B29AD252 -5676CF2B2DEFBB0702007DCF4F8E2BA032714676CA56CC18BB378D138075DE54 -316D7F4D9C73B08A83FBE43DB11606B0520EB9C929BC4BA925680FF37726F65C -2DE1D25B9500C2C2DA7592A5212290DEE61552175001675E3258903873E9F3F3 -C2D5F7F57B1ED253596425E95743F67145FE18B80AD5194096E10EAF1329BAFF -C5666BBEFE818C9F88ED0A728F5A791C297C97B4B398621E921419358666B69A -63D129C875A930087A889420CA64CCBF0152CFF788360BF88A42464C40D03B1A -1A342A89C26CCEB7014C0A5A1669331D918604AA43AC4A0FBEE0A39DB47028C5 -44074EF228719E1C3CB91FE9F053148F3FF3BAD16CB57DDE5E3E863D40632D10 -68E72FA28B258913E38816D9E0A25616A8DADECAF0DD52625FC5BABDA943017A -3B36959C495A114346E805A9793D2F30C5F7AEC8CD082DBE1386640593ED1E97 -63A98310C1EA703BE2AAB203095ECABD48D761E92D614233788E4FF98C154A95 -15B460EF33121AC9EF0BBAC00683346CB2586ED0D18A62CB0D6DCDA7B0500843 -B07D9C149678BE81FEF9AF9BB18D18B5CDD59188DA9FD6A79822A69CBB9F0A9F -731FA4955946D4363710FE1AF278EBC8792158D431B74327017814D69E5ACDE0 -2877824093AD46C7FE256D4615B6A2EC4997310AABAE4F3CBAB629F1522D5B2E -5B43E931917589434F5731D5418AE96EBB0C07573EB153A6E5442202BEDB507B -4D09872458F184159873E21F91F999DAEBD2E29BE8E82C6B796345B715693703 -CD412195D1F170A2B2C9045A4D3451752FC1945F82E92B07F37828F44EF2EA61 -77F614FABF81162CC1ECB0676E8C121CEE5B20F325993CBD2AEC8B7BB1D8B1FF -85D6D33B75BEF89146FFB0BD73DF334DD1A9396861EC67E447477A00A4276652 -F67B8FBB2AFCAFAB9C3A14B0F7BD3F0C54CBD763EBDEC129DCD7A7DD2D6760B0 -460EB2E5EB3414C87365BBD0500C5FD4773525A9455BE7954C616C3BC0D892A9 -AEBA406B14B5D5340785E7EE4C2DFEEED396DB448F20E58725E213DDD11DA1F7 -000EDE41596161C72151B05D902FE2E3203C3C6458F3B462E07FB0C40FB83FF8 -375942B9C7440A0EFCCA65322797DD2401EDB69D308DFC579403609DF855E29C -3E35687C40EEEF2D02A2239181836DD51D99A366D88C31AE289787211A3D5FB3 -0BF10D01299C451C4DD869B8BF132018BCC45077647F72889EF81A5BB63669E1 -66F5EE6FA504C44096F7AEE1031A39EB8CF7902D881F6AEB66CAECA514618719 -2F4F459BF2E7E6E2462318279F15B1B20005AD6137F3A4F2A810A7F08D3E0BCC -4710DB79054C4FBEBE5AE07CB156BECB6316065D24C92272E276EDAD21FDDD29 -E1F4500E0358D8933DEA0609C49DC211A7A592EF2CA1AC5108898F9532311CCA -37C83333689A12AD0B185747D23E12EB86B0753311DEB69F6F471E0F0C99AB14 -CD4FA8E882FD8D6A17FCE3B2301D85F0FC49ADA6A508FB36ABDDD7A8835CE644 -264A62708CE1742A26ABD8CC7DCD1FA60C856B96F84EDE061B534431E012AB5D -93FAC0808CA1629D45817ECEF15B78EE77BA22CFDF620AC795E4FD1965976657 -DC97A3C35B513C8A31723C902D38F27714D3CFE6AC6F107CBD8B2E99FE08AD85 -811F052B6424524B1C049EDD48BA6F8D98B7C71302ADF601C3E5BA4BEDA0C7C8 -C1BF6E4B8079B303D30D0434B7F2E47FDBB7C46906AF947E7B5DE1E6ECE052C2 -9935D2985B98DF860982B3D044D325306A769065576686DA5F2E552C6150F5C9 -25D0AE2009A796D322521BA3329467B6DA1F629CF9AD82F9F9BBB30AFC68CC30 -97440AE12F41C7E4192D740ACEFACDBEEE4EBDC3045AF2E1E188FD6E1DE499C1 -E1B3EE148659DBD3B4EA6215791813BFC674D4CC8C066771F82DFAF4C5328AF0 -6292773E07A15B213126F96A3634CE70FBFA7DF4067D540E0C951F919DE5E0BF -DC2E1B37EDD3B45AC9F009412A6A237E7695AEF028A8D9EF4905EE593FAB2BAD -EAFDC2DC8455D087E72E9AB830108A138EC1D55D38A040C1A81A1E1E8B95F381 -9B44E42D55EE9057010BD0F7E32AA87D636CB9130F4793DB86131B9B2E9068FE -E8CD989A94FC0FCC144CC99B52AFD4976D651C0F855068753303593FEAD53AA1 -2CAD243638618F68068005C923E681D214597570B8C418C5F1B606D33C0D0C54 -3FDA50E8CD52D8ACDBA45C88FA875BAB5E4690F866E154C525BF02DD103A7567 -70A307E5AB1EDB318E5E32B6B40A6995666657136B18F9D45E0BBACAEC4332B8 -606F8473AA0971E2B4654209B2353A94C5E698519567EA54377A533DBE6B0ED8 -FF2D5BC21D0EBD7E1FFA597B59826271C18D582692614A48A433A3ECFDE25400 -C4243D260370C6D23EA8EAEC41B3561AA399C67F1E558A192B13F258945C318C -8B5ACAFF5793CE0FDCF1AF2A05152489398AC405F24C24C4B377F5D44EA10C71 -2D9BFECBC713A9E8CC834E52A5A9D58E9964EDF7BC4F1C0040DECA723C0F5C4F -1287CDBA5314110299A1CCDFC00E55759606AF2C52B2C47BFD3FF62D892723B4 -110D26139780B49E35D77D3C5FCDC51A3B3E2C64AC161ADD295004B271A75823 -D79AAC2D931232623409DBC3224E61CB529DEDCFCD86EA583C4097FCA9DBF18E -19700118D65A186F94C261762E54AC0A6FC47F4877236EBF23B0E497F6138D75 -0E20474E2D11E68F7CCDEFD46C5D62E81E559496AA830960F6DD379BA16BA099 -D13AA5FF5DA079A7ECA28B701CB49297C5F2E75A1F851008A0CB290DD0EF6E27 -5A8E785398374156FCAD3D45E704C6DB247CD56BCF919E836DE2E52C9FC0A8CF -052BAE14101DAE8C43EB766806E26BD91F48FA455C9269721BE8492FC68D8AB3 -01D638D04856E5D203D28CCD8B702B90F32870D104787F8EB6D61648417840B0 -924C38AFC4B7CAED1F08E34E1A3D46A545E86A4A4542ABD6606672C07684CE1E -D5F2CC4049DAFA3304817E05C5945F70A251873D93DB4D5912CC4A3BA082A05E -1BEEE45050212C93EE272E8C33AAC196B201E6345FCEDBF5143940B5D9263C31 -B8DB7ACB464E0C3989A8AB68EB7DFF28AD666AD3BD003C2978DCBF5602107943 -E5060D5CE3E42F27B65F058839099C2CF9B7F045D1927C7168202D39C6DF70D5 -00CBC98EDFF8837D6CED471DFE0E7F84AD5BEEBB25F619D672D9EB812C3B0FAA -9547AD117E6E27D7979151B2512884799AE8B4503308345680D61CE8FA394EE3 -4679989798DEC5B494EAD4C0ABFA713281DA98522810589A2CE473C8C3E448E2 -57BD26EC6DE17D8A9E1847795597413B1D80675B79D0AF56E8D4031300081FDF -1406B9A2952EFC0F2D086443FAA4D96EE5AF3AA562F67F9AF495B0F9FB438043 -4F955599A04824F8BE5CBC825EABF544158D99FEDC664150D66CE9C85C08B720 -7B33BEFAC455833F57C43CF481DCEF552AD267BB90D0EB2662BF6CF1945822A4 -4EB709E8DE26B4858A75CEF9689EDF05F91BC2BFDF73CEE6B9090A001D97ECBC -7CE94ECD059F992B608A19FEFADCE3B5270A8641DE821FDD3EC1FC766F0975BB -8DC349EB7D3179749B16832C7615DD310F815B71717495308C3902CA46C044AE -78FDE58FADFB233DE8DD6CC412CA9091C02B44FAB96133F0F617584DC2D5C51D -CFE828040673A5114DDE42228F73B42E1E7C9296C51BB657773D8F15B0797AFE -E846B26599E20C73E1C9620FBF224446A7FF87ECFE64DDB0D45875B5CDEF1C8D -36D20EA6F90E09F2A3EB423611423370EED5DA83D5E845051C65755A24F7E11C -DEC48C78F1FBAB97F6306FF2982E3B61C3AF46F2CA65BC15EF35803370FB787A -0831506C9FCAEC8299005C68DD453D2107EACFDBFAD9F861BC46FBB3802901BE -1C6D99EE609C7D9712D9756749D7E8E1FAB8231A9897CB4D7C95A19B734D1631 -71532C43E1E247CDBD404F33B080A3202E23B6F7549C7E8A8F0B050E3DB2A89E -1E30428EB2D2476F5F275DDA324CBA55D3772B0C460D711FED6D6ADC43CE821F -683181028981AE66EC16BE2D7FCC2BA13BFF93F3F1BB1BA32DBCCBEDCD9F793C -30C078A839C27CDA29CB694C74A70C86008F4F2B2B8BACA49ACBBAD11B0DF198 -184A6F107BD42D6F129A7DDFF949288AA27C916694D62C9AEFA24BF172F43B68 -930F7E369000656155A593BD360E0DDF160C273A4B3F538955B11F25846146E9 -4CE0A3DB78E8BE770A7B83E0043B3BBBD60C0333AC55BFB8E1503D03A37803BD -841A19848AC9AAAF32AC249E880BBC04CD4396DA8F4CFEB6BE6E9D261A3FE54E -C3BC8A01257D032E916CB34C9BC20263DF0828B5F94FB9006B09A00AF195AD03 -8665CC1E7A772D9968D35B5721163394D221147232ED6682CF081607D82E933C -DEDABB994359350A95AFF6153F29CD96E4C3FA1FF186BAC26D6B41E275D2AACC -68FBD05ADA7BB1C68EF37508607C9A81151D88FB40E78890E76795009CD1410E -FAB3DEDE1A0F2E63B8835743AB5582F45EA40C86469A140B33BF721B936FD1C8 -56D1D571B04E8CF1D856DED27BF608FD3286E827984FABB52D7579BECD5CEC42 -A0880A44C230C6AA718EA897ACFD482E0B79C46E54F6338EA5C58BCA595D735B -4C1D3C851A2CF846E86D685E6667B8A975F38DC802269CF7B1B0626E5E435448 -406913DE4D10772741BD203252280BB13624C2C56E861FDD9F1E2F9522FFFE42 -AC2E18083D916B54CBA60179AE3ED01FF1792A17DEEF47731BDDAD86ACE50673 -1D8330252BB4D8D4CA0D617B0064FC1F13317F799C1A9F368A3E0AEA888E2BFF -07C78C6048718CA2D0D5D1A20686A7C44EE73F6D749A9F0A6B978A4A522D3E18 -C4BCD89CBB1151324182605BFDC24C6C450E79EB69E79A420B2E271CC1F903D2 -8C1BD054304250E41624F1FCFE70F0509EB8C6D0530E1D6BF45604FCA1FB7D44 -FCB548EE92CC85AE335A8DFB27647879D0BA25409E4066B4F708D3B0C1FEF15A -80892005B4CDF4DCCB2B62AFDB72B1E1B1A172C313D7CBF31BC56C897E8D266C -AC8D30CD36BDBC6FDB790FF6FE1658FBD3244B447404E98BE65368F48B349003 -3E50B4F6F048042CDA62AAE7C6722BF80D56F1EDB47B87028D85081289617129 -15B21BB051833AEAA4BD415D04208A562D73F149543DECCC768AB03B0EEB3CC9 -59C09134821939FD322DA9A66B4EBFF6C0D10C0A973DEEF572AD5C92A12AB745 -84B1624E7200D285783930F51ECBF19AD8E48E709893EE0F1AB7CDA6CC7C1864 -F16EC1D3FFB6B4FE4DB7C9FB1620C3C0861F900FDE317599B4F050D465A662F2 -DA6E93495CFF5DD8EDA52514F3F8E6AE745AB86CD729721E7A3CCF64B0F6360B -A4F8158F4B952FA4CD3DAC4F5F81C4C93710BA738F96DD57595D424F45CED71F -6F35820FDCD31533FBCDFB56F354935CA0899CD8581ED5EEE2F85C135F50B43F -3725DC1EDE43BDC851AEA1AAE8520CF9DD760A42C5D0B3754C7B5C44CDC502E4 -E74830EC45840E287ED7DA2E98260742740D9B904E975F3F8E80D7AB57085C76 -5EB2AC9DEAF38B2E1BB7D50CA137D582B954FDC797845B3CF623E1F243E9B65C -87077E67C43FB6258770D604E0DF9FD9710B6FD6AD8985A07820C47F85DEA767 -F55210F70BD45DE7E0F3D335BC978E738F274593DFE14D6489366974AE4B9286 -EEB9A4C1A712D6C2DFEFDFF7921BC6E31631390B8132B6E62D6EBABD4FE38AFD -DE7E0A7B6F783786976EA8402DED90B067E1D85CDBF13C991B4CA2A626A3C8EC -21B13B0902AD8389C71F14B810E40394EA7D41CCFD4D13FFAD46BF4EFCE250CF -B6CD0B203E3CB540390BA8DEEB217755C284C824DC9626F917D119934061656E -6836B119CC894064B51B9FF73B07C559C366CC952531FE858C3B77706BE21A40 -BF0AF668CC376F042E965BD12B020A06D44815327D9F24C8BFE5D4949EA85FFC -21FDA7C58126B3F5CFDAE27A926E2E45DE062650B615568736B10F7CD8EC20E5 -19773FD4B559D45A18B152315D45FBFB4B57A969F81F42FCCDC15AC1C6890F75 -A87877B75A14D38E37CEED9B5AC39D4CB8E0A5ED6BB09A94E32BD33AE9B894B2 -9757CB08A99818058EEE75EC2DBDDA97A2425754D9D31AB87A1D64700D28DE3E -3748BFC11DC5D134090B50864981DD72F2999191AA0111F9A23E62B37C67FB9F -704C3BA150E4227774487A3397141BFDF8F6DDB22AFF40F61E05BBEA998A2A7A -553071533382226D9ACD4748325C9A90663913F9BD84C40C83798985BFF131E7 -8B3F8DD7214DABC6F29D83E336C337F936CC5092B8064031C5C67AF2563C19A1 -99E220085C7675F59AB67800B82C287908180C25229B856AC5B8A63BD0F0342E -E72FEA35B9EE85DF933DD7FF42E7FEA8580ECFF435B8AE058DBDA697D1FDAB45 -50F396FAA4AD315A892691D39ECCE620EFBDAC6FDC6FD387F3F20038680DF50D -9C1B28E5CCAE7CA4F11797B03A39192197F1F89E080270EA3FA549ACC696102E -3D1B1E762A061D6C772E72EF6BF67293A80A290575990CD2A04A2277E23A29B6 -B0936111C343C67998A3D25E726444CC87E187C602074699801FC24ECBDBFD1B -E9DD025C51EB2B93387A27659569A2E0C4DA2A7C3BB16EF63FCE6BC8DE27D058 -A323AC3A394005F31D8900CDECE02D3DADB7C5514A6AB69AA7041D75927C0FA5 -A9D40AF9433D103DE31E080F65D1D3D2AAA482EE9432F3CA84903CC621E1DD58 -72CEC6ECF9C4C4B3F854777B65215D7909A15260D3A39CAE9DCFF36B6B341FE7 -1E4A75C5F8702378CD5926103A2192FED1F469C2794C0B6C0918F2A85F512C69 -4B2388B7F553BBC5606C4CD3A23C34F60C4BA40904CEA9D7A82DED088E2127B7 -5151C37145DFBE0FBAF3EDE7828EB3553DCC7CAC41B4B4FB522E3EF6153B9275 -F71917D930792C63680E93C025775367346E04C4B34FF74022A327AF9349B223 -DEBD0AA515BC86E247AA4D797EC20564D1CF0FFA853C60B0AFF544BBF6E82EF1 -6AEF5CE96D05F66D650B4722569C2E05DD039F91CAAE1473E811005434D8D95D -C6A2071D47EB515DDCC5D9AC58F36ACCF2BAE3D0907CA43FA58DB14AF6D5BA40 -020E8CFF4AF7C80851FC81EF583ABD9B9ECB4D7E8981EB6D4FF6272C7AF2940D -53C6B3FCF4953344C70616BBBE917A295B491CBCBA2CC73992BBB1C037ED48D6 -CF3B80F5E08EC3447D297A8214872A48FE10A4FAB74EC700B71F2F6EFED27FBE -243544882B39F3808092361C9F7050943AA4F6D569B67E3436C004987FEF870D -1CDD98CB5F2ABF72B6E78719A6A6D95E6C918D5BECAA0C23FC99B526C7C8D0C5 -B9E17494C0995785EFAF555907AF23ECB761F47AE1B27ED80E988640D8854294 -5296708C4E9D46B90231DDBA9A15D5F8F2CD7D0E1DAEBB91CD3A6AB60D16024E -A61A84032B1259BB68A3E8CDB78B5C67ABA884FC908F0E0D0B46F297402737F4 -B8B40A13C9E2B987BFA3C1AFDEE7B962BBF7118E8063F83CFD19107A5B28E0E5 -FB38E0E26BE4E46A68BF0CB2515435A3C9D3A9FD61ED73B3CCD70BDEA56768FC -7E90410470B0087F9B123D986006E729CDC571DB1EA3D713AB3CAC52C42472F8 -A7325408C9416DA581B49C709E1E35C3980E9F9D86E292D29C24C169A4035836 -749A9D5475AAB3DEE92D6A0666D176D9D0C2D28183459001348453241F632A9F -E4F5886355B548B13CA7E9766263E70514F495EFAC23DB6F5970325D079F63F9 -852EFB7B135172F5943B51294BC44CF215D7DE2BDAA35FA62F2358A8307D9C1C -7ECEFC0B93842A762AD1F8E6488140331A7DCF8F85A1364390E213FCDECDF652 -803860AF5FF323B7D0314EC85BA7CA22D6E83AFF66C961C21793601F3D030BB8 -16EB9A3E7C97041C6BF0D15CEBFDEE1C2B48AFB25F7F588681F9B3EE2D5C010A -52020C0899CC36A1C032840171BB439D30A9D6B0F739910D8A90E43EA370CC16 -AA8814F65A26CF0F7492D076115E91DAF6A118133AC18779FF3595A42A12BD3E -B61611A23E8631E780B420EA0944BFE9E4E97F5649BD953E8E2981F3D043889D -F06A4C62B5B90F544BD3E98BA2639AE0AA2190693F4247A91FF8B227FE3FA527 -F11EAC34057C446210043E19E2BFA0C695F33B2F6BBF4CDBC07917E433B4F5F9 -CE078FF709CB1A57851D117954315C893AB0A2FBAFE2290E8AA09ECE87887717 -549876185C50621598452F23CF40207BF4B4171B13E7413379748716BC624AFA -BC6C195173052D303AF74F95499180AD2D76360521F090C99C675AD863E46B4E -E7F7E6F0B09B4DDD286C3F9A742C8B909A8545957D3EC324D04E66AF9F8281E7 -6FDE2A7A9E1710B452FF4537C19778A9BB296F4AB176C617A6F1B1F9076E5648 -9AA802B68AF5A81208EC0F7B829039C5C6773EC3B80479FC482F9050079173FD -9AC1F6A89862DD56EDA4A054E7146975EF106222B6267415CDA5EA2E8DCBD1E0 -ABE3A94DA67BB6F11C66FC5AA8EB61E55792C18CCC945D16BE530ABFCB14DE75 -8DE8D5154E6AF9763FCC5ADFFA0D25DBA667BB614A05E3BBF945B294D64D1266 -9579A4BFADAD351F343B529943CE554FD40D52A44A7180CF894B0781E63B8E44 -62117D0F6EE4D4700D903A72676F0E876939DD77B217279327D372BD4E69B367 -68E654E9F1A2D11EEE90AA49B462D517F76AF2660BF7282F4C78E1536AC5C130 -0C7A4C6E0D698D372574EAEAD8F979312D648177DD0C724CA7400B8729B0003B -CA47E02E1CE0B32F3A80AC9399517175C47F26E5FBF6AC5E73D178E7DF67EE79 -5EA60CE56EDBB227694AC21A0E8771B516768CBE2836A00A14D608D9D32A27EE -E2ACC8CBB9D5DE7BE40B680A7FC804F7B9A39AF6E829D112BBF57DCA2D408240 -9D2B89107BDEBE8F4EC1EE8CC6B1F89E78677B8FF2FD7384EBDE659875462F99 -2D4E62D18C0A8ABD3B87D806FC514B0E5700E83D16CAD6EFD00C79D624FE841C -7F98DB4ACC86ACE1776DF5439E425CBC1C85D489E4D542F504D384B09209BFE4 -D3A008E069B0FA3A71CF68D097FDE55712C7E6A5BEF6CE8BE02A4E92EF5231E7 -0D8905EF4FE0D5198E32511F945E1172182CF690D7A769F8C4F76754E5654BD2 -A9F9F23B6C230B10E3AF6CDC745538D174A75B97A3CD3697814180BB1373B296 -203E523EE5B64F1EFA979AEB8ADB60CAC313F117EF8CC53FCACB4883E26B0927 -7897790E4AABF9667F9A91AD32AB1C5CD27C26C5BBA5DB8AAA7E7514A239227C -D798DD6AF110481A99753FB9B3D570366DE14F6C0AB4C31FE068B1876934398C -EC2298CA0A9EA5BA245907DA786D901579C497C3739BCB6A4DCB2E34E21A53F7 -6F673C1131F114C05FD1D3B37BB435B726AC2389DF866200A75A151725788CF5 -69C1BE79FD6FC36625BF73CE46A4FE5F12E5692B47F7C26376DFDEAF5EA847F9 -367997E05255C7EC67832533922B997028AB8018F404ADDBDA81BB0698AD69A2 -B4C217C392BB250B58BC4FB901F2912EE8EB6703DB24AD7C2CBFAC12F8D081D0 -A700C39130316DCECC18E64F3994E2C6F5E0E1ECF2EA4B18FCB424D9B8DDE8E7 -ACE87FA17D11158E96FD6EAD04B12B8917F420BB29F4471326F54C896BF1A475 -3EAD86C7968818F95E632A852601C07CE9AA698FBA3043D86168FA27FF43DECC -C71581DE33FAEF3CEACC93F5D626FE05894F8FC2B8719A92261A215929127FBA -BD9157BCD9D4C5D62D08E7E690F1DEBBED0A839475B1427A7C91E7F42C3CF6E7 -80E8B55B90566E21214A4AB708383F0A3E0406058E26A1C34786B860EC597A56 -2E33F58DE6C6850B71E88A2BAAAA6CCE519055463B468E49B2FB70CD32D84B8A -8EA3077E49E848149B2A46AFF247D80A42CEB44278A9341B4ADA55162F67933A -3BE72A237DEE6B9CB4826D4584623FC93882C543D173B22CA22E6D8D5CCB02D1 -25EDCD56559CDCB126185BF4128C71F228D7CDD7C617EFF12DF100F64925BADF -39E7DD693362ABDD7E17C3B21A74B31D05C9F4F067BCC1D0AECC6C5DF33D4C77 -04DF0394656DF7F564BD7849A6EC8A2A0007E6D32FDA98F7903CD8DB16D85DBA -47416DCB4806AF61E901490C8DF6A42D050C5C07502E7AEC9C15DB70BC015E02 -9696950D94CD0A7E8D46557DF9226B1369975F6276182B92056065B2548F9717 -05D488542B6ED9CBE2898A37C41F3093C8441502585D607CF07E8D1473C48D29 -68D4217BF4B16F8BB279A9E7F4F4CA461A9E9FA912C1BA9355A4261438E9CDD9 -20B0F7E2C324A89BBF23E8973783C2367AB9C59693E1C90D3466130C0154AF7C -008E052A63DD8EE001FDEC48EFEAF1AA7A7FAE4B10D79C74E0586CB3E9809DA8 -E1946A3E2EBF15DCBC950914B860ABE6DCD273FF45D57246F81DEE176B7DDC9D -C5359E1291B5671AE9FCDB06DDC08FF46607E784084547AA7848AC30A32B08B1 -3FBFCF2829821733FB2CDC11AFEA7DFD97B8D278DA3A8258C69532DD625F204C -81ED8DED59753060C83C4FD0B9B4D09E1C6483637F7C8EED13DC01C2F477DE4F -5AB6D45C17BA5B2C6E8219B46960E39695077D2770AE34FC50510067B89736E9 -D172161F0F1E2A7FA79A400F54AE4F20E673A3D91D892C7F88BE4237F1A3CD55 -BE5D1F91FFBA4A88397329E4B62F9170AA553B0E7BF2ADA42C4AAA6920F8AC9B -0EF3425BA25C2EAB8DE2940857712C68A12B5D56B9EBCFB4F19F63075CFA8E03 -4255EC777F9FE32E47905F950BA371B539D7F9F55C21A04F1AC6D9280E8C5780 -014794256AD7B05A69B84AE84337B5C678E43BEE8445C0F79E621DB4AEBA9188 -2410D0E6720380755B4AC748301CEE5A235FD0C1E2D675C147F3C62037708EC8 -0DDB1C349FC6ED24879F0202ACD4C881DFF4BA4116060E65F17F07BCF2CEE0DB -9E8FB76D0F8BBDBEA799071F08AA753BB3129FDDE4D12B32F5D566D8C9D6A35B -4A69C077A6BD909F1BAAC2A2C62A6AC64E722D1985CE4E8771F53170A20D8543 -29D11CB175BBD9B632C89E4A12663C0941091A1532DBD59A65CF6D44AA4B08E9 -7B5BD346182AD70A34A2527E352FAB0C109AD72EF443A5AC713C005564373733 -DAE20E3198295D8DC532ECB3F98551F84AB2BAB805F2EC2669B01F1F5F9538CF -F6D20E05081178581990783705E24E9C25E2E82D45541E5C16A30A72E2E2A168 -129A688F199DBB9575345ABDA993DBCE8CF4DF1128B0E74B6C01666CFF1A17E3 -DFF06C8D3FB42097BEFB1B33A25F4BCC9024C29B4650B43D1CC0B79665D05D1C -751F94FA99175C257EA991E6B704B75714FC7FC9D5A34A1A3019AC5D9EA8AD7F -6A75CE3ED13ACE632532BCC589F8E94B8E08805C56E3D91A6C7CFA23CDDC4767 -BD735DC2A7FEE4AF8FB251174C1015127CB8F7C8BBA872BE416FEA0D359CBE84 -D915D1E8396E1267018CFFE5447CDDEF6726F47E499613589B40A72EEAAE768C -9FBA53FE832BE227F605E4D9E67FDE078120869E5F71E3F05A31CD37A8E48458 -6BF4BF69736DE755C90D6B88D5FEE096ACF50F5FE5523138DBBC095DB9ADF46D -BE0384A02C4ACE11DDFC5FEECD1E0C4F2554BD6F1F235C8F980D87059DEFB98E -411320060518A16DF3DA0DD8313C305E5355FA2131E16FF6A19EBE17619F5773 -8C626D6BD2B7A95CF9FC6996DC514FF0915A585AD3C6746B694CDD7CFAEAD58B -2F842D764F3D0B6AA582D3CB96632C6A1AB14BF49BB4F3CF59612FC40CF63A5E -E1CC3E2FDB2122FB8822F3A85A4AC58683CDDEB72C34E6E346DDC00FBEB75FA1 -3E88EC10B348E8D8DF2053EF2921E8BE24A1CC861268AC66CC4647FED7EF6ADC -287821A9B3AD7191E9733FD34629DE60C47417167ADB5C3B2ED7BAFD2278E698 -6240EE28358460975D3FCEED4C2065CD0FF3AAD547E1C63D37EF2A94BABF9B0C -9525F03D5385CABC6AB58077F2AF1F9FBB419BE35A8980178C27E4A19F30AF35 -A48B18A129B900CE280C100EE5A40C4E6E393542472014F905C266CBFC75ABC4 -FDAC0228A9E73BF3B268D9736A3F8560E78B48A0D7DD43050A0D7757A4BC7C92 -6C066B399F71CFA5BF090EA459CDBBB674E03757179C43CC5B0FDC950D6C801A -F3D07AD30F08A6D299D1E784152103B54ED264156A97D64AE4FBDAF8D5EE20DE -1B80A4E6AFB427A0C18DA8A43ADBDE1BCE9DD46A75C1A1D15995370F792BF843 -02D4672D4493773F5907A814ACB139498953B52390D84EB4474934713976B9F3 -BF26CF310A682FCB955682E4699ED265B520D5D7800F9311C6AAAFCCE8E92435 -E7681D56C537A1C1BBB1C2CFB94AC92D816983C97614E26B062646E2C8808D07 -5E18B87ECCE3A0213EDC73919F7C9D80536F98DE0B9995D8EA4A2633D2E05417 -AF3DB26F9268647AA646C4AD12C3146745A411ADB2502D1ED58E46B7FEEC303D -87065F9B881907F127E02DCD321CCC580C89FA6B3095F607090B2786E5848D7D -273B36207D75A008365C5F1DC4F748E78A6F791ED81631D7EE1E6D79049B8F2F -B7F38FA45B8809B4BC05CE91FA3C2F6F6AC323B3D304E8EFEC54E20045B6AC57 -D08055CB193CAAA5C53454E279BE8F7F38F949EEBF62795AE7B5DD0FCAD1C3D6 -4AE4FBC6186C750F3F2DEA0BF8B65491EACE7DE5635470EF6F42C3395D7BA0F4 -A0DA6BB1A99FEDBD90A551FB217644CEF9973BB90A7FFF3318499582A93468F2 -9E766C2906BC6C4BD7E300E48C997C474C03E2A34D9B969ADA9AEF04843367D9 -AC4A08FD88BB672F2DFAA2CD0B871DF62A43A61AEF77AD88ACFD112850940CB1 -D74CD733FC4DEA77C454A52ABF2BDFEB9EBE3FEEED53CE6D4B1968F0B2BE90C1 -12F96E7AE2CF62F7C2601B589A92D8B024E00D4E8B1F636884803554E9B82005 -8329EDA334D1DF5EC7384418609A8D89909245737689B1D108186F4C53237559 -EF42502050EFD6E7F822F835517FF93411F08B5FDF163CA1A19945FE51C31F9C -9B1EF8AC79EB037F1E704243CA1F33FA130F8DCC3F56219CF6987AD73627FFF6 -1CBE6C8911831A43827D5505C1289A62C7AF94DC668300057993FCC20F752A75 -5E79244AAC3D790CCBA8222CAB05A953BC9BDDCCC59E1AB9F2CFD3480B836B79 -5C74D384C53723CEDC5E42212CE487EEE190F6B067C322610A6C17E0D84A7DD4 -C3171856FFA19470F84E207DC9BEC7B44C3EF2BB5B043929A5E900750D117A20 -EC2297E4E6AECA011F3D08B06593518515B495DF8D64D3312AFB918985A3C4AF -173ABE8C26318ADDCE1C262B03000CAC5B5B4505B26B26A028496703493D3AC7 -E24AEB4F741A6E4A68EEFA0D156E58CEF880E0C41CF6291D0AD20D299026B9B9 -D09BC425FD7D7EE59595CE14CDBB36CB4763AD7AA8841DF5C17FF3A4099BEE95 -CDF6DCB8F9ED7E118BE4F2D2F5B4D67A2781F1E2C1DE8CA03022C964B1337830 -1E20572FEA296D9FBA4FA416056378BAA8A86C165A39EB148B255DE0E7EB6351 -EB53F4AEDD8D411703A3F01159BD148796A1FF52666D962126FA863C9811B3B5 -ED20ADAF32EA3BB018EDE34276FF46A7153235B2E9D778402952F2C73CDB0290 -3C24E2BD7C74A77BC339F7B421983E6146F64718605DAAEA2914F3C4AFF5E078 -63B7DE54810BEE9F140B9F4B0B84521AF90C462914CECAFC07EC0617A189158F -B4EFE2DD47221780D87302E00B139F47239EB174102E7304F6B83B71DB890422 -CFFB05C39ECC0EA883849178EC773C3F0C6413FDFD1E1DEACCAA89FD71FDDA42 -B206A827F434160AF34813CB02BFB13B08ADFD7A0522ECAE1C57F0B35292DD55 -213A2E2D4E7BA5971F46C438332D85976B7D2F15425CF626FADD7F0193C88B8E -365C3724440FE3A2A3C8CCE159F7508D23AEFC92EE92B0F824BD9A5C44FC96D0 -8126FA6E5F23A6207D079E24E4426D0BE4798B9DA83763734EC13292B5FD113D -D5F83379F86FEB25C1ACB394747D34F0913B7BD34FCFF65AEA28FD21BEDAE94F -CA631856987B7413A7F7C5CF8DBE3C900B7ED998A3141702EC5B86BC12FBB132 -24608C6FCCC626F19871A87B5AB45283BBCA5FF6F1A19277D7DEB93EC5EC9977 -4F23995267034A21F92766D7CD17F573E1017AAA96A61DD36C211DD20AF3D34A -340900F1188A9547FB19761E2AD2E0FD506F17F389CF9EE7D8BFC1106195199F -59FE361A39CCB0EE0D9E3C5782AAB7B6E5473B50E81EAC6A46047F110B155079 -9EF8C17A6BC2575A28D2447E3F08742F4BA6205B5C198BD5B9FF54FA07000468 -19A6A54448108F6F80CE1A07F2A6890AAFAD3CC15E8505EA2E2B3A3B35663B5B -FB6F6FB1492DB5DFD395F8703159A8D5EC1E73F859722755453931FFE63B8D1C -7377F5B64B3BA3B854C245569A731BB6C13A7AC4C6A2EF2374CFFAA99CDD3984 -7BC0A101F49D0837B84BBCC374B5FEADBC644FD8A5E66450AC95E28BC68EBBCF -0E594CCB0BE38C6B50D4958B0333E568BEE976DB2E19A8E62EDFB683B7331EED -3D67E0C0015948B07F6529D2620FA14FAA23A898A32360B5BA9E21BC24DF15E8 -669014A32F848EC36E63348B0FCE5C5035DB8C2234E3164DEA3243633046903F -94EB81AABBAE58A1D2A6EBFCD301BD54F49A47670CEA8E13013DCD9026201231 -CE0687971DEBA09310443ADBDA9E637C2FEA83D73048BFADA322E72F3C577C16 -0C751FBB90641C66042E4487DE1954A2448ABBEB51D1C11B312A3D5A7E1C3D71 -521CA8F0996C2143A0685CFE49C8BCDDC0E5403823122076A1A9EE3CFFDFCA31 -BF6A4BC12E03022A8D423A71FE46E17FC03B333A7F09E879F533D9BF149D1CD8 -B7A8265D47F2D63F6C961C003250AE33321BDF8488CBA52E2AE5924CB1A96482 -C5BADBD45C8E2F6794E265FDC9E5D4BECA1748BBAB6A6E1D37A5902238B5676E -32409C3053B8C8F6E6FE3C4CB1F3DBFE8A920AB0D4D5903D877ACCD0B367E912 -C9C00CBA8EF9A3D9F7E042CFC3ADDDF9508895A9B4C61D6BF0B76507013EE065 -82241B0AA5B0EF9E30A2120E154FD9E844FA1ABCFA468D7B3D58A4C97E433B3E -81CBB8C498B11D75A2E818EBC52EFAF545654E2B60207B986EA905F4E16C148B -CBED6CAE4C7DAF3EA41B1FCD32BEE448325DC5DFED2585676CEE3B057004EE9A -1028F7D0488443BFF30384C88FF25886DDC80A155DBFE1DD0A9161F5E9AD8DDB -9C81A53981E6338E822372062488ADE96CF40007E4AFC7F6602BDEFF3B5DB602 -50D1418A90EF6AC7A630EFF91835EF925CAF67C2DA09A1929301938C5DDA0EB5 -4DF4FA31BDB196091A0B171113FB3E293255F76A78195643CF930776D2CFD22A -8E991888FC446ADBD613AC37999EB3E14B860BD70CF6B77538A8512F1EA8876C -F68BA5C67BDE3249C2C46B91D1C86E153D774B9BDE31FE310F24C69857D7ECFF -AAB9BC4A73FD94851CE77417ED982BE376A21AEF2C167D5858534EDA58F06509 -1C21F5D13F23C76B599873E237A9D0F13F4E93342F601331C93FD12EBB6A3A96 -2B6EC380695D00C55DA40F6952F557450E914519BF6441279EF39D7EDBA95112 -F28213BA6CA883E68B59C546484F76BE53CB0B6732DD19DE6065CABC0F9F9627 -75DD538AFDEBCD2363D39D89D0A3778F7FA728CF375CE8029EDFD0A068FB5CFC -A13E5F2732700EC4060B28B7D7C1252A7B9C421AA6CFD0970C4C29596EEAFE13 -E8A8DCB6749EC08D9B25CA464B7A7F94E518B269AF5E5E532A215DA9640B6E04 -0DD104E93D58236D0A2C481EC119FF16FA1E0F8F3349EB6B0D347AB5A8723D45 -348F41971756CCD0BF3FE5F03EEBBF78B974D1D6CA364C5CE160C8FE154B3176 -3ADA41D6A7D2D1F0003489A7DC354ED43CEE9F121BFF9A85F65225CA38C7DE79 -EB9DBFE2471AFF0F8407E5B8C64565BC219C22AB0F1480908E1B5550EC510FFB -62433B1B36B30861E183E5C2EA573B54F35F2512CBBA49B7BE5BA2A7F290ACCE -FC7DF2AA1E5882A8831F9F105776E9DB60DC0DEBBD1D1E8403704E246EAD6286 -454822A957EAECBF31AC200EBAC45E0D340FD8587DB953D3F9086F082487D2DE -771D52AE8CA7416FEC9E91AA0DA73F969498A9A1610DF691AD908917EA3BDAF3 -78D5A705B156A95002AF6FA3BF3360B5DFC67F1BEB4EFE9933562BD01DE2529B -E044F351F50D51EA139828EDDAB0CF0194BB070ED70B68008258150F5CCB185D -92DA71065C20C2807B3CE00CC0FB725440B7BF52D0F9F6FD58AB3B0FD89CEDF0 -1414D83D25F9D2C91A5FB0EAB5DCF3C51902588EACB5ABF77736EF39DBFE403C -D0B13CFDC488D079A86079978DACD3E4E5CF112623DF2AB161E9A8387A523081 -51A836C2240D7FF33E113BB6F72843B7EDADBEB595D3C0EF5C55C5246139EB79 -28E4FEB7C216B4AC7C8189CFAEFCFA919284893684890F17910242704CABB4CC -D805F4C67DED52E59830BD569B19890B527BD916847C951BEE9652E602AB3DC2 -69B1E2972ED868219023805692F80D83DCD99B5B454FF9C52C46AED905140F10 -AB71305333855E1E8DED599F4824BCD118E789BEE6C260C99CEF1EB36A10B13D -7AEF20B6FC8EE0436D3C4344AE5DDC7018237B440867AC459C5A31F9171337AC -5E8807FD64462C64C63A434B82D3C0BD1EBEA855399DC50E7CCFD487097A1561 -62F5F651E527FB70C0E47FE6680E52015FE2399E25F00FD38AEA37B13EB42435 -C4A6084C618A12651AB94A09793B7B5633C350CA69EA9B1CBEB45FD240FA6D24 -58A6AAB28D6F6C97AB6854A0B04230DEB18303C2D77B3B7492D28E632AB60EA4 -DAE6441B7DD6804C47314951870CC30E662E9FD669CF37E4554474A6CC593801 -E8085F0AF185FE7D8CAB69969DA62A37171FB6EA39487D2BD5F689E6C67D1EC9 -4532C8DDACF164CFC7AF6850F19E199FC0EA6AF11078F873719A5A10DF16CD1B -F6968D78666E0A12B0E8AEEBFC7E523C37595A47279F1AACD6D7C832DF6CE944 -2896FF8F09714D92031E48652BED4AAFA55A84F5F06CF37095B37C6EE05CCCA2 -08F3D27C885B89F62B68768BE01AEC18326634C4EAA7BBABC3C9C4DB5CAC46D8 -85A79A180EAC7B74B3DE2F1FAC1C8BCE424886FB22F1F45DABAF374C7EFB8573 -A9E9BBC6F6ED8A720E174CB8FDC75B81663F4B85E472568E5D5B19FC25976FEA -8A26B417EA52D4A79169FD8B9E0DF0AC600642FB694621007248589923F2DCA2 -2265ECF240D063D6A682B7400AEC39B965CF6522EC807897097DEA226DCA64D7 -36C85D0DDB18E290CCE3F7E1301D04E91DD624D2F864CDDCC77CB34ECCF4AB87 -D641AB6901FCA513685515B023100D735733CDB77046B69C08AC0A0F65B65634 -437E9689D09878191F6BD79C0487EA25CB34724EF394FB1053BA4E6201162CF0 -AEAD889FC81C60601F9B53F161DB6C9A8BA9ACAA7BC29E489122667C9A239466 -59CF8981E1CC278C158D7AC2B25B4CAB265EC46477E7E3E69A98B3EAF47E48A8 -DD27803797671AC9F0290BC23AC56649B34EE46C97533DE11E459115149757F7 -C8050300EEB391D6367C048B5B48078265B5F70C57A9B8EDA8D242FD220EB33D -73FCBEB3E29E36C37D59A536945B1F47FF6B9EFA81F230A29403A2932E1D3CBE -DF6EDDCCB02F4C5243B3C43A079F32329BF852C894F7FC9B4786A16CA9583D4D -5ACC28C6441029FEA945FCC358999F6D7CA5418356A4129B98AF5B2066D141F8 -07F7036B51FF49CBF6878E89DF3B9F226A9C019DECE2FC8B7CD2F7491077AA59 -8A30A25BA74134B01F43F282B121498438AFD69D7618C77F6CED9F0A3CE2ED9A -64FAB7C69498548C51B96FD7F3DF274E399577491300D4AF7956C851A8E058A1 -F49AC57A5869A46BD5B51523361AD82CD3252323899058CCA42EC1DEDEDCB53E -24E289D0095E37B4067FD051414E4B06215350F9FEAE5FCE1479E77BFA287857 -9A9AF5F7BD93FC5A96908208949EAD6482366F796A88E9AC15B6F24558C58F14 -565C9CA8EC72373BBF2C54C97C8FFF8442ABC8E25DDB4FFB20EB229A4031C14F -FE32FF67BE4A28EE0BC60A6118EC3A8D0AFAF472323B0065C670CE41FBE92F54 -CFECE8751123AD3D51198E5EF050D8C751345E5AA0E578F4703340A3EC431557 -51FE351A355FAA778F3EAF00223A0BB03A7DAC11F58EC64F89B2A1C249A9F720 -7C373942CE60666CB9A988E8971E31CC706A9516694F1F968FD0D902BD69B6FD -5E04755A10C8DC057E60C71DCF9D6666FFBA80ECA59CE185AE97F8CD64CC7949 -76FF8D9C9A0FD74835A67F2A34A1229A7D9FB0B9252089BE32C320D28F22C93A -358073FF58864EB4E9BA5C83BDB879C67DC64F591F1480445AF304F6CF657265 -06E758177CE96259B3B2AC1429D549E249A8FC90444E6CE1E96D7D57A5272278 -076C2055BD26144686880FE76D0161DA226BE79D781DE33EFF4F9955C928BD6C -55F16E14A5A2B8306164D863C2537CFC05A7F1B9E9221321924D33E29C95321E -D5603A85A3F3F890204BF7745202DD217CEE21BF45514B8BD3D5018DB01FAB56 -E5B85AA57D26C115F349D826D21785FB2B14B16C3A1C3D764300C6AEBCBE66DE -4D8AAC6484D20857694BD65065BF4BFFFE35D86D6C4AE1A29E927861D180A339 -7476FB6DF1817BC6A077CA5BFB568F6CB759FAD1DDD86F07CF9F6D6B8B320E01 -D9DBD04D0315ADA0A2F8010DA572EE6AB906E55CE716AF7969A3F64097210C94 -7623AD3E0748DC9614F27C4E5F614F13770A7C5B49464AB0E6527CC6FBCE4794 -BA32DC1099FB73AFF3EF8DDC33132DAAA7546BC6359DE8A49254AE44963830EF -7A69566BCA08FD8DD4C0982A38625EE58E39BA2762CCF85A27B037D34BE5689B -880D9446476613BD98CD3DE649117FEABF6156BDBD39AD05F360488C3A80BA3F -C764F11DA922383787A8E93F945C8E9D1FD4CA16AD0958B21EB36B84B524A9BD -C8434B908D4CFAB46411E997E75D9F48E140C50ED2B56723BC43069B42554850 -2A73B211D61800ED608891BFF059E8C49C52BA719CBEA6681A9BF720E86FAE4E -04D5BA274046D9B103FF247068EF9B3F51C22F518AC1BE20B9A00CD21F341BC6 -FC8C1FB5072C69466CFD1F1085A92E517883C037F3A73658CA74686F07BF742B -98C121BF9888160E0DFEC324C208409D876B887E4447CFC4416C9A4358D7B1CB -769BE77537BC8E2771F2EA19EE1440468925D41C01ADBF2484D8B5321EE18DD2 -A0B1F570E0BD0F8B0931E1C6DA0E71F1E995487544B22AE91B8C2B9AF65224C4 -BD3E3BB227FA37121E31077601FC205EF5E5B69458333784B42D07CD58AA73DE -8FDCF30351D58B586C9A6116F0CED2298B7E6E088247EBADF24DD85DC2680BAD -D217DAB604987181047F426ED848CDF475A9D19D0F00AB7DCE4E3C73C8B666C5 -37C09106A440E2421E94D699BA881B53D98395F47808FAB1D594561D46E82175 -0FAFBAB8F8197119F14D789B7E798DE37D62D2043EFB8DB3F819B62238D62E8E -ECFCAA92C967CB2FB089A8AAE36AA54C43C8F9AA5A7E8D88B178BB878F4A7073 -1D6BF3309D05856F4AC65191EADBCDB22982431C86745C3E01B0F563B2405AEE -1E56370F1835559BA096C154626D36C090D3F32EC2EEC0B35FF492A08E61DB6E -C234642691A4B214E27FED0D420254C5502AB9797B273B8C6DC49DD29CF1C65C -CA61944460CC2ED03655E713B63DF538209FA69DAE84B4A3BD89F7834BE5AC7B -F3C6CD20E8762AC2E365548F396D32FDF7349DBCE34D93E68C626EEA8DEA1EA9 -A369A6435B000C4568BEE6FB00BFB2553D7AA6923E3A28B131A135920A43F5E3 -D692FE12C30A2FABFD2047DEBDB4D9037D87B7FCAF0DE6EA92596235FF5B16F5 -80D4B99B2F98B51A350D8609C9A65D0E6BB6CAA01AD47912D72A869122A20E76 -8FFC5353BFB61600DB1851169A8B0CA7461240A1EC10351AE38DD223262F5F1D -C00DED1F9AD9F805F8C13E34E878E64D2951DC05C2F95AFD57F8C1F0316FDF5F -61809B7AAAF7CECADFAF70C607B77005EEB7073BA88B7D6FB714C10C313EE3BF -82D1BD536D7271F012ADE21C41D2D4BD9301305BF3FC46323C0F9F58C3229897 -F691DD00E9C538DEB7532019339406CEB61DCA9509DA08B4E5ECB4966369BA10 -739E73F3A6C527D685900E6A592D25D01EE3803EF8A741232C8B48C2798474FF -03CB68F61FE1065A45C00E86E339580EEF6A90545B04EFAC45E57F0B5E9BABCB -E053AA4FA0C593C1704C58858CE462891FDCEA47411714BD9F42CC66714A1947 -5637755E85F7CEB3F85720CDCFC6594FAACE2E49864514B00860123130D91672 -549C4B4A46F3488F41822C30C927430207BCD5BDEDD48366A1336196EE37CB90 -EE3193289796DC165A51E6C01FA7F87E6028A8CA46E90A47154BD95412C803A6 -97F35D80F6FF9FF64053FC3F67E182A3AE7E72F12FE7D85778051CC8BC847FCA -CE8477994CB78628DE7F366A6337AC42372E54F5809693F631910800B854C832 -090D71B89E09D49256B84F5B0A2BC26AEE76CDFCD9D58F4D739B73530AC7FACD -B66DDD8F3E601336999AE1D93AB261E1A101DBE76C7C9C988D4FF999BB480853 -9D366BC1F0CDBAB25214BC5D38D3383C85345662A65E98851321D776D34BB6C0 -F7E3367D7329714A5B8524213DB65B36229AA4794ED1B8B9B735B59CFD4136FA -ED923B234EFC0F1B10E99B4778F1616764E3FF5EA5ED64D7488DBCDBD8D0327D -79E703E5FBB73192658B48A6E3A50D43ED6F9CB14A0E1767C1624258378BAF01 -B4374C36BCCB1EAFBA373538844F5D1F36E25046722DFEA0398FCBB80B1509AD -F76C2C452C2A3668231F46B8A953C722FFA795A9B25F34FA0484CB72DF2A9E3E -AEF724E2A120B9C9D3BDB7BA2F1688C85BC8B4F3AF3137C3B5AD07BDE5E6DBEE -AB93BA821562CEC2F498A406932E1571A1AC323C894256D19B1256FA855DB4E3 -E2B7B1F286B3A376ACB8EE51BC3036838D9C5C6D275E92D92FB3A04EE15DCEA7 -83E772D8F2EABFE039652049758504CF3BB46846C071E1C834578ADF50ED6BEA -4BE184F0DC7D792825F61FB26B06E8133A0FE6A5A50D804FE19E3C58CF1FEF52 -3A44C7DDAC8C9FDE076125A5E69C61D7ECE569901764FB72C9FFAA7AC49358ED -B49A2F27361196F608636480F5F59E7C501D77BBFF424DC90FFB76A98B10676D -5569395477FACA2071053F0C8E233F6D63B5690F30ABEABCFAA4BB42701332CE -B2E3AA23501DD5164738E9C7649E1B3FEC004775BA90902219C5418411CF3E6A -964C79F23EFF5867E97CD07ECE28E017105A493D1DE4A4352FC0E82966F1323A -06719F6C7982E802385193DC4644C80E0F849A9A9435236C9FD97E7E444A8B86 -531F89DAE02563F58C45B8360F38101B5F27536C91D04277C39CCEE90E7D3889 -80AD6E6377672F8C3D9157BC6883CB6CA46F48E2A2C9332647B8C6BAAA0C64B7 -89D2BD9E096B0AADAE3067BD9789A7340C46B398F4CA1944AF01A383875F6365 -63D143B3944E283A23D54AB91459EF2334FADC4D4B967A8B415841DBA74E7437 -0A7E38218C574189FF14954F1CD8B2CB642F017AE7F226A9B5D6B1887864BE11 -B36AA442F8493AB43CCF30CCF818C93FFB2148EC95F4E53FD2B203C9DE6C1335 -08D0CA053B70CD72CDEAA8C808B71B14BEE9B0646CE22C37B1866715238B2E77 -0ADC53682451FDF6D89ECF1C0626E41AAC7E279AE8335140BDA6FB0F617A8E33 -9D480F774DFB91528FAC553BB0948B94DCDC3EC4082EF3549E669A7A49C83FED -98C6C7DD43634C8321CA5A3BAD048442CC9FAF839D7647B744E11FC9DC7ED2B7 -1E2BB9E82308703FF7C7C8C123D8CDA3631FEA47EEA9045D6DE5BDFE87E92B58 -E5404906E06B417F088F9F9F5BBC78FF369CA8D78F3AF16C21C8FC2F38E559F9 -11FA7F88FCA559E319D63A6EF43CAB1C7E2C50736627674ED172BDC507D7770E -706DA40D79895E339D3DE90C2B95AD62E9882D9C306D58F80666A419EDB2A0D6 -0841DC59C6D652343F31BD5FC75CCA2E69C9B8495C9518AB83E95ABCCF6C5475 -94CC30358A8533ABF1D9A550076A6652C0ED47B6B77FCE29B8CBF2A7A9329089 -9F310FFF1F64AD75CD3ECDFE4507AC92C3448EABBF9ED97FE3D9E10B1EF3A0A7 -D692D0698047F685E6401FD72330B7B5736D285A923360C4B6B271B74544F855 -158BC5FA3F971DA2492E6A75F7A2F0C3871FBE4D4B4B326131FA1FFD6360F34B -9853376D4E9AE399DECDDC2BD6D790B59A0090BB748EE0EC0D459F203604741A -3FF6D964B3BF1B72881924F6FCA5C778CE8CC8513B99DBCEA1A8BA6E46DAD45E -9A6EB90AA1B02FE6D857CC50699424F559E976FCC174BD5459884F8A723FBFA9 -9C7DBCE6D0D6E426742F6AFDD4BC603254FC4A4A53E54352A79E74EB198DA28E -72ACAC529BA702956D1ECC0DDA91F64C822F3B1D564BD0EE11D26642E12DDD66 -9B2FE63051C59415F42D597690C369CB8CB64A8E3EB300C5DAF80E6F9DECBD78 -07AAEA84633498558B623AF42FAEACCD8D4FB005180CC5F55CC4DAC3955E222E -AA4CD5BAA529080F195AF80FDFFA970CB01B9AA321274A8DA701C9A381B0F21A -977E59520496E965447F88873026BBDAC1BE01EB7060674A656918AE89D6875A -83A4A71A8E583F09CB7C7146AC9B1CB5866DDFBA9F6E428A2D315F73F9C4049C -32B630F243AA9F62FAF057BA3D8C042E93414867D6DD3DFBBE9FCC4AFF865449 -B3A7AE8B3665B519CDB7E2372BA6DBC0EA2DE31B04C2A16353A29A760D409CC9 -F5DD03E2C11D29E0D545053A6AB7EB57D556E25401306FAF915968EDDB542D62 -E2F2D772CB09B4723DC936C0E08189539972622D8A2007A3DE1972083A902D7F -E50C882272691FA11D0013D6CF4DD34C6D2062C2F7E62FE3467E665D77A40757 -B16C6136E7240CF39704F49E8DDED8A5D60011C24177467763373E93730D04E2 -235768F2FAA0615532EAE537755434F130B1F83CAD5FDF4092FD20A324B3FB30 -80C9F16C617E2F13F315ABC8B2094F8C768277D629E10A6D0A9ECCFA0821ADB3 -D76C8206BD399FB5AC93AF557E2E982777B6C1FB0C4D74993E6084C1D4F50F1D -F0F50BF8B5658FFD4AE0C6C1275C06100D2DEC016F809CD8D9FD3FE7A7EF988F -8F0427880335F024598EFB33405D55C44DCB1DD147C398D0335E22AF9A195D53 -4AF6189CAA57CBDC5F08272D7CF1B5BF92BF3AF8036EF848E437B50688F49D49 -46F11D87415FD9ECDE418F452EE6FE7A3DEED95A0996BA0862DE216DA08858B7 -524A78820B2A5BAB4ADBC1BE71D69B02B149DB5CCE6C859A38A810C901CB845A -F9873F64E986CBFE0B2D2146DAF2366757C8FA62F7DF8959CCFC78EB605EB6CE -4E5B4BCA9C64258570EA229276FB5D417CF1B1B315148693C5EB6996CFD1508E -67DC8BE993EF72542255F7E323CC182EC88B844AADBADD4888A8C6DFC1C39843 -0C19767F9883749D6EC9D065C88DBAC9D87AE9BDE61B8950A51FEE9E531CA3EE -CB14C95B7301CC5A7A1B22FAA9E1E956EFFC9BDC1DA96A8910E733E10CF2EB61 -B7E324653C797D1DA73C2C081D70A14310D0588AA6915B0F05FA2CDEA0FAAC6A -FDDE41FBB23B5CA3D0CBA1CCA54C6C685F12C1DB1B4E8943AD873691186C7A13 -C29C42C86F1E46E1307CE630DBE4332188CAEBFBD604252EEC001BD89FD79563 -D79B17FC27A5506496576A62D3EC8DA2EF2BC0CDCAEF707B3A18978DC99BA0CB -3D6E611BC0E27CF54D8478853EAA6F80B3A698D179E8660CFBBA117EC0694457 -44D6DECED3C1DC219D63D1EAA09BF546A16E28EC76B7EEC8B01C4EA1DD332503 -8FB779A7243A90B4A98201B51D27E02083FA278BEDB9FBFAFFF82C4772F2BD17 -53AC2A75D9101249F2B0C52F0C565E6D084C1C6C50C084EFEEB5E3AABD25FCC1 -339773BEBCD4671779FEC8A1DDEAA73D2FFA456076F4D3EDCF0267A48E72D2FC -F658FEA7563E4B10908358E5FAE253C5A1A1F19631F1821C3C80BD048CE166EE -F77ACBBBE8F2DD4FB7AB2692E8C25BF18EECD4F0FECF677860CE50B10F3E67C0 -39F23CD146E0ACB5B6D2866594E6AD5A482D864B1A94E0CE45D4322AF6F3EDD4 -015504E7AEE530A5283FD5A934524AAC4AE9A2FA647CB578FA7E85016F97C906 -77436277D984277A329961807060D928D2065449D14FB75B6EE088C7496A0718 -0796B05E1C228EE7E1C7C50106CD49AAB88FF7C5B94658E3D2D8713C061B5105 -44DA4C04D051ADB47161510B9BCB4D18542A0EC5EB66611BC9DB1B4EA90995DE -19F86A76565445D112DB35479C7E70EFF4C6BB3E45307CE48BE52A9BFB818387 -9A0D04EFBDBF9EE973CB2808D9E75694E9C77BCB72EE07943096FEC011FE7435 -BA43B5AFD8D0811342DF88D3C50B9D001CAA23DB7F88894D58AB56B74E9D6E45 -9220790C088D3C2FB8304C4032FDD3129C0B52283AC284F36DE8F89E9E4505E8 -0AF4B25B6342B8DDCA18497D1C741BDD00ABCA6161682D75CB20B3D4C6CA560F -BFB97A5268A8912F873AACB40C9D7E6131BD2C2FB99DDC95A104AA4DD69E531E -1F7BEE6A10F0887F6DF15EE64F3B65061146BCF0F46B5EB53A294960E291A552 -0400BEDF61D30D4E937691414B8C14DADF3D4DEF27EC9CDE862922A8F80A0DD8 -2C4CCFDCFCD568EB78EC96FB946CD704BC73C9C07A239DFD8824F52E22C1184A -CD4BBDDB3E2301C142A6C21483E57A9BE8D060D01F5EA23C22178F3EFEACB76B -45C46C034A27953B14D9A2F624C47668B8700B5363F5C86944A8DEC84D382D56 -0C6ABBB75031683E20755612736DF206D313301FC39FAAEAF05D483C1E93E6EE -E1DAB686D64D959EAA5DB319812177546027092595A5002B151F433289AE5B87 -43767F545F3FDC397C02DEDF76AE6462D4A2AB55867241C8A7EC2293B61AE39B -92B8A82B3AFD65A6AF2B4C7928B4022B9B944151FF0936AACF2269FBCDDB31DF -29358B779C7FE59CE4FA452F0987A6026E0710C4DE0DCE081FA2602D01EDE3F1 -6C29CCD38E9D8207504BDA0CFC49517FB02E78BE3C70E4763B58C1CDD2DF9F2F -BACD21EFA95A59D67ED2DF67366B64369B696D1FB2717089B7E7073A6C778127 -2A2C3250B8FC0B5D8575997D6B8AFAA761E8CDBC9473B29C10BCF3E16CD9B555 -18124E11ABFAF29196579325B3F6C1DFC9AFB4B1CF54A40605D7B1A39A337C6F -4B3E724C02BF2C1DE1B5B327AA0F65B9581533015A7834293AE558277F7E78BB -0EB225997B0CF2AC95698AF7CB0F2AE6E297A7176EE56DE77CE18E6DCC988011 -C51C80DCA3A6D6613D517DCDFBDAC2936139030AE78D70A579048E27CC418600 -99CF1DB94EDC280EA97768ED37D5ADDF09F26FA9CD7C71FF71EEF05BB8F7AD59 -EA1600BB67F8D32408617FE38D3F03D23E3A9FC3921EC9C880F0A08E051A337B -72ED695E9B00DC820E7EF062596B651EFCE085DB5023D14713710BC6E2E98C7F -3F674351BC3200F448459590558A0F7D1FC99B33E69F920FEAD378ADC6F2FEEC -542C45A265AA21A7C5408102E0618B0653CF275D78D13DA3866048521F937A45 -8AF2EBEE59DE62B5AA226BFDEDB8C7FA92DA2A277141C1DE3301618DB5DF7EB6 -AC5BD2226122C26E0AF1A02C253D60052BC8768DE3DAF4BF58FDF5E707347558 -9431C7998D3FC3E63482BF8F31AC6E0630B4127E8161FCAA5AFBEA9649390F18 -4C8E16117FB1AD2F5A125A9C24BBC404A2491B8C44062FCF8A6609338052D3FB -840A905FD9E94E54E6D1EAE195C3C635596D9D284CF7776B2BBD7D786A9E77C7 -F868643441E41CBB50E2294A007668954A0B33F47D470D72654FA58D4622B8DD -90C3CDE66C691A4584FF2D93A6360B274E0E3739A12773F497A6FD980DEBDB57 -1B88A8792964708072AC880AB3331E8625C6010FBF9EA04F3572C737AA1E47A0 -8C5A40B1A3CDFDDF7314D1F06978B3FCCF751E0DFB25F830FD684539AEB02DE0 -856D6FBBC4372D76D109B1A52C8AAABBE455CC37982BD728EA964AC19D6D6C87 -6875A653799A383ADE551C3C55C08840D1C4479F1B97CCD8E07201B4E66726AB -B5FC0504C4253CA50C538EE93D952D148C6D7A1F99EFFCE9C9E066BC77F2C85B -5BA9474A49850FDBAC35F97EF5783D647E2F6B238F7D77B8F494D6D04687B8DA -9179A7AF10A1BFBC50141AFD6FAD87BB58FD1510FB6167E2955AC7336F2038B9 -7AA2683A32BE3DB233F3DBA776AF699305686785053DC25682B734C93F2725AE -5C82CD88B68A7C788D774581085BE2E4B467DD5C5C7FA83D3B159CEC68FF0F91 -5ADD33BA8CCDF3D93E96B0F9CFC1F7A2F98585AEF0DD14481CFD1DB73963BBFF -83BA8D9490FA120F6E4E141EEB1D14F29DB08AE5FB636AA1BC7F46EEEA33E8AF -334F22650CFC2F3CF73BFDB769BD34C3A80694278440C8C7B6DE03C101701365 -06ABF17546953891D8EA0F75E8756DDC267027145042C2817910064AD0D2868B -622937ACFE34406BCA089A50BD5D40CAD02F22BBD892189D94D41FFF3AA8F3A7 -DDE098C2A5C23ED877B7D8016709D6D578CAFA069A3A50AA3FC11AAACA58940D -D88505D217BD6F562C8E435F4247AE9AE65BEA57AFB21F13E546040A1A51BE21 -1D2706F228150F97BDAD799A4823C7FCCD8DFFF66DE7AD2AA661B6C1BDE91D8A -2625DDA0C9C2DEB214C9C41DCE148A5A805ECE8229A9F33AE5BA7A99DB32F225 -24E4C3D639EFB9EEAEEFC61E8B36C2092F3BA757882F94FF7DEB36127E272527 -AE79F0F55F9323C046708C4428389058F9C67CBABAA779F84A3EB8540179513C -75BF10AAE036CEFAB476729A8C5BD83B4C212656163F91FBE16384611069E2B1 -AA843715DFB594523904C3135690350EE485893F3A51CF2A72366EB840EF3CD0 -918D839BB55635BF7EF6E9D3CCD2158918CAB7C9FF74AB701C17E07F2F04A19A -F6BC970D90380809A987150EC0C8AE2FA190759B3D669DE4894CF4EF7F32E3A9 -50BDA5A1B083A21A9B0E1BA8A536302EE71A14E8778CF1ECFE0ACB592563EF92 -D2E727BEC93B5198FFE8C0AB9FA44AA3842B6E070CB4BE0F327196A6CF1F2D47 -A7CBAFD8FFACDECAA76F87C26E561DA20B49D2FDB81C42BC36D52A95BFE3F2C8 -4E4644D6560E0B5815DC0751A92610BEB4512A4614D0406AC8B5E5FE05610143 -DE3A38D11BF9A3E8B0E5A76FA18E99B559DB6C216938AE9DB50591E78FF9FB13 -67E89709CA7AAA17D20D820CD1BBD18B904436581FEEB2D9E5C2BC992AEFBBFC -7129948DB03119F6DAD5339CB950EC410B1064F2E8D471972D60514B9037DF21 -6F42C03932DA11BCF6B8896755D2115220E265469B3601EC1079843E0D27C207 -0D0624E118EB64924154EF01FA65BD93331754D469E61BB34DA3401A8AEA17FE -92165E1BCFCD153617DF82582CF27B8E64BBF919E183BD0CB78753813A01CD5E -D3ED931E4670B05C39B66CB35DD93E934B1239899566EAF7D7524E8105DC2BAB -6C43CB4BD23DF98F3CA2E88F0E40A3BB65C1D0A7CE7735F95AE5A86495C3EB27 -8AC9F070FED1E50936B0CE6E9D3DD56FF394F45646F02AD19885072FF5DF07E2 -2E7B8709D23473FE3E62E0150DB7233D69E31E4AC822FC58DB253EE9737B9237 -3000784F4883FD2BC7C7646F48BE10DCED395D7BB6DB8B1AE3ADCBE3FCC23EB0 -E7BC01AE7960B6B18B65A2820E788A4B47177012F5AFA3E5FBB8F593EAD2229B -0CB1474FCC2039FE2DFA57D3DE16C6612658F7B7C27B5F3AD36739DE073DFF2D -17A9351BF25DD24B4434C5D1B6277EB9BBAD895DCC727756DD588B65875304ED -983C5F664FB658E0DF6D79DB3AC1806EF4D5F73FAF9651E738564CDCDA5BEF19 -53AF4498634A841D370BA07863C8B579466D5A329C8160B8695BEF1DF28527A9 -6DF41EA5016705F903D0A0D2268A27965CC888A8BAAABB5D4FE7EC8CC7816732 -2AAB7557AA7AF336BFB6B298299BB7B5CC89797B7A71F4D61F0609822CED2EC4 -85EB4E6FBA0199D538054B212F095A49B77F664E749D0AA899A877151669E89C -EBEAB8A71BBFE65242FD53244194B5763260B87B0857072B0155000E5EBA5DB1 -68C21BED2AA9B60506E6873997A34909F6C8D5F9AC3B241A1496A2CC9B6FBB2A -1D4084500426B3931F25B42B1422DB5444C4CCE842B6FCB545CD0357DFA6B867 -1CF9C7FDEFD67867D748267BFF9AEFAE4BBFEAF3E0F253570F84D5214B24C335 -947CB1E1C56F58B74F48103F1F690C543791BD85B5DF6344EB45EAAD771A4EB3 -1F0C7765F6BCCBF583371F56120579729F58322314C5C5746C2944099D7D38C8 -A03C7D64532B0FE23060EA277C1D71321D257FE0E07592FCC8B23334A92C4646 -E5900FC9EFDFDA95B9E183C582457B032F0878503E61CF24899569B85B194466 -412E10123D6725395A7BA8EA5CC88C8CF69F5386C0E615B7A33ADDE091348CB0 -966F9EC34A7ED43CAB8E50E6C454A36B96DEBBA1F7AF42A21572BDA70407A985 -6A1F582EA78A05DCB2E80D58B526E6473E3688143E8BCEF811D1D02F7565C564 -E8CF7801E98451A7FC541542F9490B5A3AFCAFE0C0C3989B7899045CDF262D24 -7579ACB8348FD249234092028397C92B3CB69AA206A94D70C2B78ED45534A65C -07C396847EF4A6D9FE1590515C29B2A8FAD4E831BD2E4AE07F1E315CF8DCE669 -DE3FCAAA0DB0A2A518753D04F8DDB7129027BB94A0A1EA990F64FFA543F90FFB -63944FDF5F6E29E821EA00A71912C9B1AA9426939A2FD08CCDDC1DE545B5B695 -09DA575BE8A9BA6D51584309687FCDE29128D7BC355CD03A09D1091C156392EC -85393381BA2C006949DD93CC39B7A58BF101E0117E88B3CB4D954B79A86C632F -38F5475C8559229155CD210AADB479F7FA83797FE211E342DBB6CF3060986C92 -9F946E65ADC67950903B99EEDE3E2EFACFF68C4BD90907ACA26C96E4E5A28101 -3517DA551C963D6DBA3B2A0B4432A6D364CB2BB2FD1B3DDFC1F514D4E7771D1B -C4B406372269021E87B66B81D4AFCEA1316B755D65F7DEA5AE2FD2264CAF1B28 -1DD4764FFA33B22D2CCBB7208D7EEFAF36B86C0225535264733E237E055B58C8 -6FE717E4A6613D049D39E64A7F517C14CFDE8CACD53D96908B9DDE9DD88E5BBD -FEA1DD01A0CB0E8C417EF1473183F39EA6FA2B47BB27D37381433050DF7C5F0F -3FF6F2DE3C7BF989F617AB16AFEA89058C5E325FADF9B37E0F8565B433E82EB4 -F949AAFA60BD424FF49115CA76543F9757741A3C10440B4E5F0CD73AAE7F22A1 -13C4DCA7D6A55FDB020D14BAE8DB2600AE6CE26144CA0F83C82DF67C4E89914F -4C4A89DEA5326DACE14766616AFF2E89FD7B25148819141D464E47D178514814 -E14C9A8A796739DC99C1220CA086326231E9136F61962303686CF360E9E5D058 -915AC25E7B8F56CD1C6092252091E4E25406C5F4B60C4AD01482F41B8DD29C91 -015E19D94A0B39836722CC3F19CB46D73930D06BE314583F6DDEA56A2B6A8B5D -1C59BBBF8EF768F9B49B1BBB38B4F828BE4A73EB9315636DDE3AC610D7E0B65E -32A8EEA63B1C734CFD0B52D09B418F6B33F03EE08A886FB6E52405C0403177AB -A63EB20DA2865AA6441957F98CD7D64857ED614D59436450F33DD43EC7AFF4A2 -D3549DD174338FBCB4BE975E8CE41B34BE93C770940575AA1288F87FA400C650 -A4DDD573BF1F45EB97781044691B78BD64C3305FBCA02D9931EE3B8B7667777C -1C0EFDA7E4E247DBD6C5D92737170BB9A86D862C0534A8436B1295861A7A2BD0 -CEE445EBC7F8251E4DEDD7173A82A39B8C3055FBB90FC42B550CB5CACC2D2972 -886E7AD2AE11626F4389AA07995055AED5AAD317FEBD47B498EB52AE15DB8440 -EAB1D16A826CA1ED54F20A990EB564FE9FBB2784EC4920FA479244CD24C7A635 -574DF33C73FCB1D2B6DF0CE6D214B464761B8B9B2EC88387F6E99A64A0B52271 -2E57D454E5B233F41FCE51D65BDC26C6BC18CE1B901048833533CC08AD60FA32 -FF65C5E06A710C206B78D6B9EBA4A81031BBAA88BD3EBCF1E795170EDD69C61E -26AA502B47B8BCB9D9CE8A95D81BE25116B0B84A92BED585B4248CEC62676FB1 -2C6CEE3B2BCB5F7D6EA35A5E5725958DC772DB3E108F3AFA1CDD4586014A1296 -F92D49A8F9E0D19C80824733CDCADD36E8D6BF728A7EB38EC991B3E4F70BEF0B -5F76DEFB25670F3E9F8833C015B2C68AB4C6D5B490C2A295F038E2A8706D243A -1D4B2228CD1A2545EEDE67A85FEA536C9C32747B45CD81D01767FFE9A8F70958 -409C07CFCFA3D102707D1D6AA5EF7A8B25DDB8A7E416610F2D558BD3C9F1D3FC -A3CCAB935FD1F57D42E2D32610A3069A15A31CB0F5357C00419F152AE3EB3CFC -4B3FEA9ACB01F180495297B4A8A60A4D2EFFD3473C1C3AFA2221C67D90DC0DB9 -43EFDC47484D08335438CCE06EE75C7571007AD9E39E31BA5E2CE8DE96405063 -13BF3FEBB2AA0C997F303E056ABAE3F3C14DE8F472D60B6BF7B37A3488717BCB -C6A20858B52045A7CBF4564806C1D71E6422839222C63598B7EE67A4359869FD -C56BCA71E147E87F9F9D241F06EFD688A268CF0189BB9054231AF7764317C10C -B625E4633DCBFA5114EDD89E44AFC560CF0DD1F8ECB356174BFDE7322A3C257F -F6B9089DB9726AA7313D145A249AFE7EA43C3F1CEB9113C568D2162A515BC112 -7AD80BE6EB2ACD39260B65094039B95E1819FACB18A92E98F84E741409AAE641 -AF35BD026EF7140A7563505567E974A43554883949123C29AD3FDF20602B35AD -3100F85FE00E091803D9D14037635C964A1A92390886B6CB72A915CAEAF847B9 -1ED0F1499BBF1BB8A906538E7F709F962DF50143B649BFB2C5A3719F95362BD4 -A892BD6984CBD362BB1261C5F0C1262B57C441B9349AAEA2995C87FFA20CA0F8 -E7C98D842026CFF8DB2258D7DA536B3609028340A0AB13D4371BBBEABDA877B6 -1551058522BAF2F47F34509275D422FBD83F51BEDF0D94EF10E95FD1A8B488A0 -0A81C7998BD9AF86C1A8E2175ED1AB40C96243687BBCDB793A08A5336F911834 -247462D693993386ECB467479997E7995AA90AC96AA68B78F21AC59BA618D886 -ABC7F0EE019F4146755A55BC38BF5461B1422E62E320937D056A62D7AF6D3F0D -B2A2D09BAD44F46E97316A685CA21CC455AA8A061B88E3E64C64DDF93950E236 -B49749CEE474F8C38CA8468E6167C94B3678AA2E5262B69D4C04E5F36CBEC4A5 -029807DF9AB3E4A1B5360406EC39D519504E165D129B978225D2DD7BC4ED5982 -D67B4F1C134DF53B19CA76B00EC04967E7D057B246BB248F4ADCF9D4648E98F4 -4AA48C9112808A0F21F816E481543E5873AE2331E1B5256D027C48602EF09590 -18602EC3843E98554D304B92E5F1A531E61EF00E5809784C16D44E6783230C58 -4487C0B9DAFBEE1362F65E4555987D8810B49CAB8D53DE39DD0D49FC5C3BCE39 -6D4A8461C9F0B0B9B320365C7425D8503690204D0898EC34BFE37FBB5B6C86C7 -60AD9436D9331FE53A444F78DBCE00AF3CE5C80EDCE9A65CA837F948EF672280 -94FFFD6B176B98D66DE818E27E80327866936389AC4845FF059F996B83FBD151 -BADAF79C95CDC5375FFF1211A6C1C490344AD56BF6D9665B2388FD4BABF6EC3F -3F1459DC589A99A7615D64D34FFF122770812E0E1C5FBAAE90B72F8845A996F3 -3E3276D41462DCF43C02D046EB6AF4A9101EF81D357FB21FC15D075F7BD67DE1 -26DF7DE2E6E21D578051967794B28592F27271AD34C9B81034D62FFC442DEF67 -77D174EC4335CA3552D85B0AF9D4A4011808FF1EB140D12491217C9C6D991395 -6581C91545A69417114B70FC4E021FABF564AB6D1DC37E456AFED772A1441E66 -63AB194A8D94A8FAD64CDA23AC28ABD8630D3B19CA93AE46B6D7F229E36254BB -822529D754ECDB3989F803451F30793F0A8C4CD03F8A82185F484CE910334DDF -F3376FC4AB870851E6B7C1C10337DF7865CBBF77B28A1189494313CD8D112C6E -ADA1ECFDA1441E2F107DDE6BDFE74C50B89D6238492005C7B6AB5B77563F3209 -B6D5978E09ADCE0DACE3990764127584879AC061ED974925252983280A596AC8 -A0E581D4FF1446D3E25DEB2602680C4382605AA1CEF04A5231220F54449620D6 -E6705DB2D554A34B4A51B0243DBF506577753611F28C968AE743A7204ADE14B3 -6028881DC1AC19923B6ADE9DC01706ED6E635AD5049DFE52103F4411829E5F25 -B8DBE813719DC80195FE3707181931D1DA3D58F101E34205A9871C9DCE6D486C -FD8A3764D1BDAA95C2788192C956F3514D28F001DEBF20A7802AFC168C1D3F83 -B5CB66DA709C80CB62E5BDD5094AFBC09AC43A6993CB587D79C1CD2ACA5D3904 -683F7AAEE380181F625CBAC1000028727EDD6D1C96A180539B4DB46A11D55FD1 -9BD5A991EEEB3125C8B022A4CBD34D6AEC5F4582731651D4A1C593EE4DC547C1 -9FCA888C406D3C6FEA0C398D91C8D6B56AB56737158C47A90D5B8311178D3170 -4C00D98282FB34C636633DED7A3D8566D647F2B3EE3C095CB0239B48C4A1C1F3 -BBE15C21A63A9E779738FFF6AE49081703B5716939C90AB9EB4E1696444CD60A -4EFB17AD7FCB2610A9E3F903CCF938CEBBAD41DC25590B35F50A2CBEBA8FBEFC -109DA0559B474A79A5DB4209D63D727EDCA5EA257143F90212E7D57BC1CF6EF1 -D1A1954A4F919209447477DA90F87FC1DFB199C117A434BCEC1BA10653A2C9B5 -9599AC25838540B3BBBEDFB597206DBC2A894D077F095C073733C805E045AAAD -9442ACC465300DB1BF50C14F31F80769EEEB8EF1AC8FA42E123B7F98BE4D721F -21AD4A9DAD63D515AF0EE749497EC58E45683BBBA63D7D06B717D9AD0A593B45 -6948F70A99A42B8A6F2B5CC578389A7D971B21C48571BCFFB16061A43215491A -66BE45983EBE2E37BCDC7DCCC507470FB01711105EBF9578664D855434DBE98E -0BAD017F64684E21FC3209CA6A02EA74E6FD7B3710CC09AC0C213E3226C0ADA2 -8EC7F6A960D7D75235A3B6CE240AD4101855F00748363F98A6DEC3D785F99377 -827EC9B43B5B7FDADDDED1C469812A5291F00705AC26BE98C5E9EF813C6E1438 -FEECAAD277718900E4F5A4B8CDE0BFBA1E0AF5E324CA9B4D9C06A2900B7E3029 -9A19D23E58BDEE72438CD10AACF155FFD0BA3A91E18B9FB23585B76A6D4D9873 -3CA358901612B5D7670B1B2B8911BE871853588247A647FB91C3E86A6F642EC4 -528A7A3C63D6C9C59B46A22340A887E9EA8754F3771797BED0A2D2ABC7E87886 -FD5D1850FC4C525A5CB4354C5F600F3DA2015A35A77841A8009796C88197D9C6 -7F4BC939FE15D1F91DD6A62720E90B7153C4D77A13061F9F6D732E05CAEE7E7E -2EAC05082F0756507E7B6CEF9B559A5CC7EF7AD02C54E5DE6418EBED07FEADDE -F28A240D66F004ADBF2B4C9E158F0FCD9950683ED6210ACFA65F2071E6B72AF8 -92E19D97ABACC701B24E7CDC9D4D8C0D17EB4C64A9DF75B765B1058B485A48B5 -3A92C9B0A1D13800EF704824E61C8D13E64ECEFC2321CC2343A9B59E6C8A0244 -E3C1AB84080AE28A51C7034F3EBF2BF8267E293F61AA10128510CD26C0E54C1E -6C2C7BC8FF2F52AB1A603BE177A6EE39A5D5F77E9CB3F37B46DF0A134F0D47C8 -0B67F71B5AD0B206D3E78AC8146BA70ABC216F4F5CFAF55FE1803E4947297D7A -8949E54FDB2A7246349952A2B585AF440FB9BA30C4A85083E5EA80E134A611E9 -E0275460E58C4680CDACD85D38938AD52D1CCD190D2D87241C91C75802ACE899 -2844DF49F6C532D4BE4C5CA2386BFC77A5C3D49A2D691EFD56C5EB2AA830CB8C -03AF9B30D698BD58C43B20BAC134A895FDC42A0FE5C8CDD1110166A36CDA9874 -4FFA0D573A1414F05CA1EB5551FC456486A72A1B7853496B6F162E6A881368C1 -7C968BDA6B9DAE96801E87FB9D987057E4837E7450ED0C41E1AF1A14109C8F9B -F20152D9E0924BD9723F73E23EE66FB01E2013CC83A25AAF37FF923C089E0F46 -EBAD3B42FE036F94EE078C9CD251A150E28578B2DF64720E7BA84F643CF8E500 -2AEF59F860E7EAD664E614E489E9E1DFD76CCE33702F25F5E6D7BD2734B0EF97 -4B13A1B666CDEEC6B1058D8951D00FFDD44D910D5308135B088E5E2B0B44F684 -82AFB0E87F64251CB664A130D6685DA57DFBAD8EE271002476AA8E0895E283ED -970B130C0ACF264D8314E920BF308A44797572AF9B150352EB261DC86A8BEE7C -92E4C5BE76E66476FBD2BB1B6079D4291F03932E92CE53DC37EC79D946DF12EC -19D5E914C67F883C42BC5FC28FF200DE5A10A3B7308983880A5E5E37C457D515 -58921D0ABB91307DEBFC1C157D834C5F8FDD85589F17E28F99CC42E8AB3A7D2F -0965E88C78AFAD9DBC56B76E85B707321D760580252D175DE28F46E2130EED6F -3101D569B0C2745813D1D8F3C6A30AB77610CD50F5C8574DB097FFBEB2EC53D2 -D4887560B23710BC4BE049749C98CE066079D31AC800091119DE5C45673497AC -1E7BB1DF4867C5098454A98863F196A20C74B8CD778F24AE06E92C08BE0A6A58 -EB7CD34A06CBFE6268A01E8360725534A8DF5F3F1074FC4BAA6BFF579DFD1E5A -3C914F718EF07F4A1EDEF0E9B4B0188CDB3BC478C9202632212542C5CA144F71 -E76BC68F3C110742B61D20307AD2A4A0527A3FD8FCD7819B207B9037FCF53E3F -C81BC00D428CD5A5EEC788BA2C974B550533A30A646FCFAAAAEAAA443B09510E -A9D5FBF1E5DCF14BB0A116C91B4E760DCAD201020F63718AC3A8BE519232CF57 -1D2A077A95A5568D12FE61C78D6C1198D523AB1D604D92D0530434E4A5059F6D -DEBB5AB57D473DBBFB3B1D08E4C1795658DE4D6106A746ABC371D90A6D31B36C -6F950EB16996CA13104C356A77B7652471C811893A359E824BEBF8869EA13989 -3133DBEA5CD1A7447093A4B6500EBD5F434B7736D3BC909E6B51489A79F2D8B4 -6F8863EA0560F02557175460037899DFAF5A93871468F56D341680C0B8D2BD21 -709F35B66B57DE6B1446910F4EF5DDA5DDA3A4EF486354F087449F231326E4CE -6E1019BA41FEB775ACFAB6CFB841FD1EBC0BFAA6BAAC3B72605CD8ED100643D6 -6FBAE3DA56F5B6CE1F66A572B71958FCCFA3D1A312FD8199CF30BF0383EB0802 -2824A093336EED72111148C8F94113DA68C6A267153171B00335B0D7927715D0 -7F372D2F946AB65E1B19CA318F04686891B6E09F0536CF77C24A8C8EF7A5FC05 -61127667715E4CD2A547CD92BBCC219C40F4E6537036BB416783D54CB182380E -87F7E8D7DBD023ABF937085F12C81D92D65F97F70C017FD25E7A218D484D6A1C -B490BE23B603F763C260BF5EE4F9D11879421C14801948F4EB0B613219FFB121 -A477496AA5F5C70025E15B198A54C38E32A3E65B5678944138F4D0FF07970A81 -B23DE2CF7B248E8960EA358A3ECD637F779EC73B614B5AAB0B72ED62B1FD5B7E -45B9C587F327D28B042B31045D641D5B258702019FE50AC6A08A8FA828829CAE -573F6084ADCD362C55D539C5ED40AB1468D037F6756E7C004514A07C4A4205F0 -62324119A96F357702B338446F1E338AFFF143B8CCA5ADBF7BE0A2A66C40FEDA -15DA022E7575D9073E10B9F7A5B1A494FDE2826071EC40BA22AF17275874BE93 -7EEA3FEC5253C04B6060189C710FC7C5E2829F53B1746590B30BEB6C8C81CF15 -688A72C2A05B4D68FFA010A74E23B5B0B28C622B1C8D266100ABD3364AE21CCE -1B3701120B83EAE149792C87D4A074C7F8B4EC81156FB9ED3D0246E2A8A8D418 -24308FFFADDD9D20DA7CCDF56093644F425D8399E8A3A06B571D7C80753F840E -BCEA835E4094AFC6DFDE191E9045A115936F50B97DD73580D3B6FE91E48AF6AD -0F1B8708CFCFC76712BE2079AA6140C830523CE0E58148B36AA7827882AB0ADF -F5734E2AD66088AFFA6ED6A8582BDA670D979F8C23042E07502EB4A8506307E7 -B62510C729590B73804DBD2129D7EB17E2164FED0389E458BA053F5B24983019 -20D09AE5948A159990D9B47FBA323F2DFB7B782FC963AFB083EEF4C01F614ABB -5F588236986323FAF367303458401379CD8AC7F7CAF65816FA4B45F98A875F10 -86581706C369911B1AAFC70B1B1E7D30F71C55C030E5FFF4FA5FFCE97E16A269 -7982CF88E407BCFE450DFB0D0D8270C2B5C91B4523899C637CC86D1542F2DC37 -342D6366195297B4A529F853B5F910902BC907BAE83CD5522F5A0F2E4666EB9A -40083B1AB66C9BFB1DCAB26AF910B174AF933326AB131BC080BAE7B4FA30AB1F -422B0C17648AB95E8188B76977DCB7B2D041847C82347BF6D2F729C9174F1230 -E8612F98D9EE77EF7898A449A7DF889D137D1691AA315E9F6F08046BBBB5937C -529EE7FD23AEFB04603287FC991638FFF960D07BB5FB14F5B56ECD782EF84741 -7AED87F9E4D76F6CC4D01FD39D8AD05757C9B5B1C1775410F9A7BBE4D9438994 -BE02A1C81CE0BCAB1B080ADEA7DEC8EB2A9F5F1F2FCE0EDF006A54A6C1FC70A4 -51D3B2EF67FB6AFC68171CA31AFDB5B30C6D86E4B584B885EBE66344D499185C -7265595A54E3AC090BE89424FC6ED53FA7C30A417AE374E46476169C0EF5A04C -4D87EEADB08CEB3CF5C26B376461F8891BA72FB028B2088B81BA74CE27B2C455 -7DEC6A56DEF3406DD71AD214B9529BC80CD0AA95DEC7A074B785DC2192713A0D -85D6A3017133F5820912523878E2CE0614513137B1D6A0E1CA1B31870AE10F48 -3DFA4E6FBE782AE1E7557D157F4AB92226C4DA3F70AD4EF49D3A19FAF0169B7B -9464EAFFB3270787A6F02E86F8E3B56D00863A00C6C68C2AB375F08DC006FC97 -F060316F3385C66A7389B31DB5D3B7A5C5B73FD1C344ED9F40BEDFD82BAFD0F8 -87F6155F34FDD9BB4E928E5264B8AEF216C7D00EDEEA633E543954BE63A7A3D8 -34468AEF3C79DB66776E4C75A9C61C482B695F6384A7F8E8AC68913BCCA20221 -2A013A388798FD878DB9AB8802504236DC8147443D150D3C85F16E443B860C8C -1D9260BA341471BD866790B288D08A643C3A915AF31CB885B10EED89BE07731D -7936A1FF37B92CE6C953A9A6D2070CB9D1F8B4409E25F0D1289F445F2032D470 -A4DF4FDECA4AFE4656AB302CCE0DE4D9B9D665F56DF443DAC8E5A6F011C77811 -8D6075D72FFB6AD2E63FEFE1B8DF761DA09EF42D73EE725003628833E010CA9F -76D69C341933ABA225A1D448D1B02A24C8EF54917559900C31CF4CF96AA1976C -B75D49A191D647CB4062CD5D6591CF232B1FC7A1792787E97BE5F9F8BA3D4586 -5BB1D8ADFDEBA915CFE0D4585B4C7296B0E0B307DD245F8BC357D3700E187D75 -17C6440BCF624C8751D160BF9D351F49E1283AC4280DB84C36E593AEE0AEC473 -0DAA130274B8771D318283ED32165F26C31CA4602BD138DFA717957AB25423D8 -9D454DE676CC9A16C264CEF9B4038834762014B65AFA9841234FF8D6FB6CA9F2 -F719812D43D78077C82FE60B75CBA75B7C7E664BD116A68C1B92DDDD5ADF497C -0E7DB07E3FBF45298FE4B9C994E55803FB965BFAD4C2BD156D34D79B41A950FB -7DE8B2DEEA4440C93E94C9D3369C7DB4F297555AD10B1A8B003DCCCB94AA5232 -CFD2BBB5C223D8CA488EA15317D8284F97AC5E46144400797544EB86C2F7FB1F -B806596973F2C8FFFD6C26E14C13DCBE138C48DE544CBCDBD16ADCF2E28D5319 -0DC91310740BCC46E657C806A1E3DED637C488384E05615E78C96FD0DDE0F5F0 -170A04AD520E0B9BEC13A133DD976794FD9A63FB22F495BBA2DCC7BD11FC8D65 -8A1D80B2CF25666D444FD09DD1650B542D894DB7547A03BB60A9F1C673073A0D -789A66A3B41678579F42B2421878DDE27D4873D4FEC825685E90BBC6E9631A4B -A5F6149B7C16962139338DF54857B590E9A39926B11D0DCEA8388E7336AF455C -F5C39AB40504792DA3193B21BC793A63870CB7F6BAB8D0D51FF8125FD2BC72DE -A210AAD804AFB1D41B2E8ECF2936E74C53532775F21EDA729AA902B3C8B2ACDE -0578353AF3E9177C7906041C9360740841E64440F5815BD40FB1C41DFDF515CD -D47837C9654689CD118714FD6D8E4CF21A02B01AC9AEBDC75341741DC5ED3C73 -1DD0EAFF35BABBCE1CF9C207C1DC79F47EFDF0EC07D6E85D7ACE2FA8F5AAE916 -C80B1010086AC1E91B957A6A61D91113C98F95BCFCECB3255DC548A03C37612D -F9F47139A49B7236758A419D57E42694B0BDFDBB42EAF30E7F49421FB9563F72 -7036DB2C85AC91A83C37CD2EDE94B3EA82C45BFDC7E1696C76D15EF10141BBEB -363C098591B35024AC9D304B348D028F573ADB949327370A0F6EE2B8C9EA50A9 -9BDD725A81BB626CC124E522E9D164E10671A93BC36DFBE6025C34783106052F -142845026D6B18BEF2011E0BD47D03417EBD88F1D31FD36C61781735B5A1EAA5 -8C8E13BB206A6DE4584EDC53D0CEF8B91B59698106B9535D62BD88D80ECC85B6 -1F1CAC049843A88150359315F12D9940FC65DB61D8DBF588C707749E8823A53D -E19F6C060759BEE9A19A7536599754FB587751047B3723001349EE3A23851B68 -C8F5933E766D5CEFC618C0E551069A00BBEF52DFC94A3E5F0E5391FCB97A21AD -CF73E4EDDCF179730BFD8429DA97711A2A0B3853946026E6E8FD8F61C735946A -25E44B958697B722B52F4DD3BCA1358E2AC87A81840F05D76AD90DFF2756E7B8 -79DD5D43F0CBB873F11A9B753EA79F44F62BCBDEE84CFE171AFAE64C236CFA05 -521638B4F8CB880491BBC67B7C84268106D74DEB6A1BD035D9E4359C9417C14B -6EEE4AEBF574172122ECA13C800E178B7045C2D0B1BC92C07A5351C15C50BBDB -E7703FE1BE7E668BC059F62533786F36820D2EC57668C53B7DABFFF06BFCF199 -268B68430F3FF275EC74EF46F991B3EBF9FEF1B86659F81809DAD9F0C00718E3 -7DF1DA8521316FB2333305D58BF90854C5A9AAADF7BBACAF0CDB9B687CBCDDAF -30ED6E7778E4922B9766C461CF3D336B629980C3BD2CBCD246C0B21D0AFEAB5C -B44885D1F82796B6B064715FA3FC41BE38D338ABD15B7C627FC2D067F96151FC -8AF9EE0CFC15F16F4C8B6427926F17E612C2225274248B7B0809E1B08380FA9B -DCADCD2D1B26D1BF6FEDCB13C54489ED3558ABBC9ADC7A6610C411AAAFA94367 -7452F9260211EF5CF2DDCADB27DC0BA52C4EE8E6F5D98CD6B495755A4B52FB65 -67366EB69F16A3530371944BBFA0C82AB9459D718D08F50C60DDDF5DCFA64B1D -71DCCD8AA01FFB9387DD26DEFD30D97D5F9EE03F5DA165DBDB0D2052054DFD60 -DB8AD8A389940BA24F7F44C0307A9A446E3D53FB99A6E51A18B4700DF8F79D96 -1F3996630D3161EE5D119B6C0EBB57A1ED333DC8F18E35E5A715AC887257D37E -EC3BF6DFE165B62401C3BCF3752386166372061F6CDF94689070432C283C2277 -A5652AAFDC83461E0B5960997AB5B7E8F6CEB6BA0E2D9AAD4506ABE0E7CB5379 -77CBB9113727093B1160DA55CB2E6F2727414E53D8F7F66F45F1B7191AE7113F -FA7E11A2D144F27D3681258866A2B8F9C0BC12782CCC83AD847D5976FA7D4468 -78E55ED04B32B63B2324BEE7251FBC9C93223EFADB8946A267486F9863CAE636 -C602E5485628158238D5F6ED59D996E41A563B5641CBA250BAFADF44B4959C03 -838775AFB5CA6755A3C7DC78F1CB1154E63BA7370C4E0279CCED6D2E34695243 -6460A4F88C11842FF7B4BBD73711F2FD06888A02C0C5759C581DE1716C80DD56 -5C2B0223A20C56196D67F7A6D7B5F711743AA31B3D8B1CAFC649E1A3E227E32F -8A7716BB8E919A4F14F2630FBB1662767A1348055E48050DA6547F2B45FCC664 -8771E58CBD281DD1070E045FA81DE783F831C50ADDC4FE239FE4FCB231BE3F4E -2B6B75C719C88E69F8B3B38D25EA42F2B6A71B03FFB204076DEE53EB22812C36 -62A077A6097FF9687732C4B69F686406283AB883A2FDF4C5FE70A5472359E372 -DF28BB7DB8DA88E2399EB61FFEB037E484264561BB7A905DFDD110C5B110FE4A -2FD2FF3A1E3E1FF6CDA888F2B27522FC367999D7DAD58A29DF8EB796F15487B5 -11FBF4A8F7F6C9905C1F4E5E18C9729EF6C6028D5AE027CA67C1DCAA4CCDBE44 -A7D74CA0F6ABEE0BAA08C4A5A3C35FB3CE59EAD3480307132D25522518FC2331 -A46F67B236C4F51C9852562BBABE2705AB619C4D4F52675459F184FDD59AFE95 -30B97EEE211D690643BE8126130F3FF6EAD41FD9B760139FAD1BFB429C8BCD66 -0D504B64A7C502E476FD6237A1BD7CBC187AC7A30CB39614573B795F1EC2AB5B -47953B145DA8FB5990A80B515B4F9BFD32349F8F882E9BFEC8A321E3830A6379 -7595631C3E2E9B6711374532A8708CB0B554648DE5128FDB4D85445661AC950B -ACE8D7EC9CC3D5C756EF7890041957B2F625075DCD762A04442C0C5EB983B820 -22E64D66C3974D031D6789096E7A7A0D2D2A43FD1ADD8BDC80F9D1B381D67E3B -28B421336DD8812030E13FE79CEA71A9195BBC10EA5BCF2A446099ADF23C4310 -A7C0E296A311ABABE65AB2AF49BCAEABFA09CFDFC6C7B001B9CCAF252D6F76D8 -08DE4E08DD78DEA1FC92A5039BED5FEC5C276A1130EA569341765CC3EA94A4B0 -442244D7DFAA37B2DAEB640A4F014015CF54EA13CFD931517E3CBE786A6C4559 -182EA384C2113DE85A3EBF2B9B4E8356AEFB12FC9CDC11615CBAC7258A3D21C9 -F26CC170C3A3E774273032848D24267D0E7699445061B05BD5BBA4EBE4FC22F1 -9F0279CF940C39ABB756CEE674528B1E78D514C6D319F88B02152A425D4D2062 -7E798DDEA2149EB6D4F35D435C3777F9C6257D2A82930F540B119C7C3D0807AB -E383C37AA4E09F708DF1FDFE2CC8A3BCCE624A0E0DFE6F7A8D76CE50CDEBBB1C -6B61F75DBD9E52B8209495D00B7C01568F13AF0B5D812DEF37FF9896F83D7643 -A6A84920820A22BDCDBD9D5CB31A57C2BB67222ED05E71F061D79BF09A2651D8 -FA6ABE2FBB465F4310F1BF1BC5856984F5857398B636D1144F75202A4F9C4022 -0DFE3F18FD6043C381EA81B70DAFE2B776E88FAC1D482775AA6B452B81F5B396 -21A97D7214B5C1A766B62988330ED4CDFCDCAD8CC165CAD046278163046BF696 -BE49C3AFD83A0D6850CBC9FF1751D90433C03F373B89C31A0137EC9428A9C744 -72CE4653AB8B1CD3EC345C90879BCBB7C89B25AFE08A9FD880B78C9F6FD42186 -6103F6FCCC9E0FEFF506D56B5A98AC79F69DD7D60BDE46D29956E47396C7A15A -76887359539D654B899B6C0FC8ED736C5DE7199AC10FDD15B4FECE94E4CFB473 -0422A29427D252C11ADD2778C3777254F58EC33BB24C82F559287F92083CF708 -38A9CCED1E5EAACADA0B4CF23D83F1B257DFBA2F83883496BC1D8766A4FEFD11 -A320AD84F04C029DA40E51DB8E0F82EE343EF7383B29786B90680FA8A108A94F -E1CA201327F0E17C392C706CFB7515873582A090F93C9BA2BE6774B810FECD10 -01CDBFABEA808363A1374672AEDECAE03C783F7E2C85299E40F4B76AB7BF41CD -B01EC583140F30817B5C9B4D22EA6D4233E7EA1AD32629BBC513F79E85A0EBB2 -1AC59E7BAF8EC2FCA88318C1DD72B1E1D899354DBD8AF5C39EF980CAB38141EC -56C01860B90DCED2175947096C6D5AD7B56F4A5D0CF8569CCC1E0EAA454D696F -1652453ADDD38ADC336F2BA06523BF8DE4BC77969135CFC485313118989B90BF -B00E6A34AB57C871767EB52A9B970CD5D70D26164B6617F4D19C5C3DF977989C -687CA9F67509CB0E261E9A8D18FD6F0D7C061212B8BD3CD876CFEFC50BC6569D -5ED1FB4C56B4E0D3B2CC1117A90DB01802D36929E28F84C19ED6C83E65A0782B -F5EB4A9F9AB020A1FAA6B7BA6CBBE0C071BB1FB61B2F9113042C5A8E2E131FA2 -5677554EC8EA45604BF7464C5137EE17634E8434020D90CB88B94A76A100077A -21E031DFF68439EAB3381D1436E31452CD4D2E69914FD2E82E6D9AF2FBEF031B -53AF448C21559598865550488FF2EE2F88E3027F6D1840D52497EBF96AFA6691 -64F0671E2E29C6EFB745ACDBE97709FD452FA6B2BA43E1B21320862B5019F8A9 -52B68BDCD53B35BDA09F1FC4C480CFA3B92719E360BF124D9A9E728BB8D4AD56 -3D1CBF8EA793F509CF59585D2443DD46F15B8C86BA6438272ACA57274895771D -637365F5FB3361631F68CDE33A8E8B5E7FF3CAFAD3344FE57FB79115E2E67678 -B1ABFF4CCFB3540B6F7AD4189088EE0471DE1207E97945B4B74350A71852C0C8 -2EE1BA9E58C467B3234985794B04C91F6A857D5DE23F7B71CAFC182C7153EF1F -E353F897E22851A621E1D60FB5BA7FB0FCFFD4032F714F30B69609C9FB9B1032 -CE7F88EA8C488D55F9ABD713B603273830D45026A5A4D6E8E235E6772B43DC75 -59BA22ADC7382A89D5EC83D516B6B067DC0321FE435AD294787DC7A736CAE106 -FE2DB1162B182B1C9AEBA01BDF7A13934F796F7D5962D53C90084E5C5B0F54B1 -C50BEC8A2B11841E08B0B3E4F57ED0227298F2FC5F7553B0F3D522A1FD5DB5AD -261D7E37FA8AF178BB9F57531D728D266335807E68D6D7BA036804F0CF9D6EF7 -E024A3E3E2CA30911E6F37352A381EBDE15276CC52A168FE21AC6F8078CD9E80 -0E4212AC2AB968B339C7C55BD52AB03A3D0A65A10652149B4B56687105F6B51B -886A944C181310A86C7B824508A4614DA7EED2E942AFCA91C8685D9EFE369883 -021C308CE882836A5CD0A87C8F255ACC770B815F79EEF626A12618EA3AB0BF52 -AA35B2EF24789BDE3C8EF3E282882F3B7256CC2366A131AA8578FD14B369E5AF -B6C94E61BCB7FEEE9AFB30FCFCC9BF85B0444056614F18F99E4D456E50B977BE -E3D9996B9E817010678D3B6F733C4B3C48DB1E6475FA6E0E5C8D6A37517A1F56 -93819C842B090BE09DE6BC7E5D8BD3351DAB8469A27D9F5DFC4227EB534E8750 -695FBBFE39024507D5B7CFF063435E3EBEA0702CFEB563B3130AC0810A3BA1AB -4597EC9A2487D8EF0FC7827474ED4ACCDE5F680CFD17651A21E3EDC15E9FB31A -F9DC51FEB169A884F15732C1BF3948E8B96CC55563AADA8B3606B17218D86349 -470CC300E618135C404A8EEB551A10571A922B920945CCCF0F315D1A75F8C4EE -1A0641A8915BFBCA53162BB40F6AD8E8FFE411E2FBE104EE488385551FB16217 -D7784722697D0891B966CB4019037D0F96A1F57EC50C4B27437BB8763A79A7B8 -F1F01F5F4BCC48F7F642C6EF1CA4AFF92EB674CF99222EA58FE888B737ABF9F9 -2D87CDB282F6A5E8C02DCA4D76A2913CE31272387E21EBDEF0D9E2F24C79A7E3 -EED0A7FBA3A8BBD9B525ADE096B4903D120144B333F0D702E0B166D433E30EE3 -D3B0659FB70A2538DF137545C312665AC28FC49DCE75DF71FA1FCA37C6D0E879 -264C6B9D2B218859507A648A9FE83A8785079FD581CCE122B918DCC74A3A33DD -24589EE13017DC330385064B09E2C9B6E4A0E9D76A2ED29B68A547ED185D23E6 -730A46A85F80674E1F804216C1EFB747B7E9B8703CEB50C0206E0145969EF2CA -22F2604DC3FA86B795FDBEC57D4772AE030923BBDFCEFAC1A516E5CB058DB83A -BF6919BEBBB9B309E5E6263D6837FF36FAADD560BD7F2429CB4A5726923A683C -DECA1F3583E08C77AA81FB8D8623187596489A8894E0A7D562911DD7AB819260 -CDE2C4EA96901F92B2BE7ED14947B9D2A949C547B8A5CF52D9D15C930DDB4E3C -5E3B274198C2C80DD92CF75C28C74CEC39EE946A6047F6C056AB6E029A6E9654 -4A3E162AA204BCAD3B221288ED33DE3DA6095E85675A8105F5CC88CCEF4C85D8 -45F829A7EAF58B6B5D3DFA9FD708B82101C19895ADCD390B6C3723E8B3C42196 -F4AA43A125A1FCAFF10621AD0056B096C21C53D5C9B29D359A568F66C1F65A42 -7B76218410C0D4D47F64B3F625519D5443CAF0ACBCF6E45B59E9D7C4C6DF3545 -6D01216FFC11EACCA0FB29DC997CBA1E6B4408AB95CC3340C7BCAB683B7E62A8 -80D5FEC00070DB68043F8B95CFE064F09E62A2BC0C99138A5069E27C70F7FEF0 -DF3B98DE67070E05C0E3680DC1BFA10025DAF449B5E2FEE824B277DEB9489E63 -C27D82358933C1B103EB95AC38EA9F52F3D437C59DB47AA465DAC7EC07F731E0 -7F72C3868CD58DB46FB7839DE77F8B00B5ED53322DD03CFB2303C2CC1B26C78B -B6F7624596B92939E8D6717F6C75139FCE87D549D311B8EE9A63EEB766D68A26 -689DD5EDBF8A9B8695EA4226437620AF7ABC90A5E19A1BCF9CE1B38F99CC6626 -651ED6388A1CAACD4CF505131B97B27F32F68E2F83882108598140218BE26381 -8C32D7FD29852913C5BFE5C65C0EAD586D801B0E5BBC6310FC50A92E18151EEC -FDDC28F39FD1A323A3B5EB5DC12D263DD1D7D8B9A69B5CC156B041CA460D4055 -6B2F44057BECED5CF64C9DD3E5AF2B13053841C9FF55E28E21EE767EED5E16E9 -A033C6442737BD02C0BFC4E2137951ECD3C21F6CFFE5394D37DB260D5EA02F0F -FE200F25E652110134711CB66547C6E3DEA4684233B3369CB975761CB81F91BF -F6F1E4808276641AEF2F9D0577E8A6D4DE2AA8BD547A0EEF761E2C62DE6EE39D -76CB24479232B1DCD7219BA499225B533791BF358610ED296656A3F95A44D564 -DAE42762CA32419A67501BCAAEB2360BE431E835A00CB7BF1B6E58CE1F6FE01D -191A9117CFDD9AC1ABA5B616FA4CFF94EEBE9F84BC4338F66F86FC04EFC73548 -1F6D884F7A8837011A13127F58AB3F47F7C301F872550F558B462205726683AA -B9AC359D635C6B7733DDB204D23AF4279CE7F5DC8BBB352B4B2F50E9721DC89C -EE6CE994935C74AB296589C3C47F624972B7D92E0D1FFB7F5A30FD52E1B15126 -86D1595E064FACF2BCD55A5391F9AB38C3913B008491D7003782F95668735AB7 -56EFA837275E42856380E3F5B9F29C1F3C2EA94440A8C5399771065EB26DD940 -12C34F5DFE5AA595249CD08EC2B9C2E387DAECDF0E7878B9888D7630DCED1C9F -D341C61C57B47C12CC7DFBC5AD8F2FE583A2378B0E111CFAB1891794FE65E2E2 -3CD1F5DC0A2D57F2B6E4F88B9298234756748DEB13AC2163147EDBFB9D44C614 -9606533420CC766AE517630E0B7BCF01F2B5A092CE86F3B0E69614C2E3867B9A -99E05A128EF55B171C869616A1B4AA03D7EC61BF69D36ECE84BE11D888FEE73E -C91C03CE9A752EE81E21E73E849931FE57D0AC6180D9884E5BBA81EA20B9C879 -31AC7E8B3B26A27D510E69512B9CCCAB31F41ABFA92CBC9972AA3B8612CD5440 -AD0C1FDAB86391E2358F209D7D6EB419D18BBF8EBBF13C7838B40625FB5461B6 -4AC315A975E6687D68504B1CEB3C507CD015A25689614B379F7EECCCB5EA7978 -DA58CE5562A85E0E5FF07FDA3E08088A8A0C8285E8B30A95FE7ED9C5C80B23C0 -F696683A43ADA8F6D1AE93AD9E95E05AA639EA487E19D2BC1377F611FCF62647 -E21F511B70CB659A0B120F64F98CB091B751A55376A60E34041011E5DE6C8ECE -D124DCB9FA45029064DE7CA36F8CCE8FB149A220A29083CE2F7F56A665940958 -1B1384039664D4B1E3EC177CFC6DB6A98E162D89FEA3CE1C35803C4CB7593756 -CCAFFC04F2F41743D684EEFD4DB4B9B2E9C8DA8BD3EE4539405F2B1B2BC5AEEC -F6B303C32892CDAD9E9F7B2B00175F9B45133D3317D87922D268C3CED1CD1C51 -FF4604002D6AEBC8E4784BD4E87979C9C5964962D6AF054DBE2B00FD08419C16 -9F3D7B2C70723BC7B0B5273AAFE83C2D0B1B96D7F0617FEACC78A584DFA8D253 -D71029C6884E70033922D3E2B2DD27231A0B9A9FC83A0D75349FDE08D60B9F6B -76F0BE5614C22C5A3810DD19A8AF131DF61C98D739220243D6136A56B6ED09E1 -49C0CD780134E118D88C5AE22CD15128E00E5E47C27CFCD1E8201AE916F4881D -EA3D220AC1798A571B4BE179A5BBB474508A1BF6C7415C6465602FF73FA78214 -D20E6F79BDB768C2F0AADB39088359DE6A5412885C21837E7B97A20BFCA2364A -1FFCBBFD3FF10936C80448A2E8343247E552A5F082A5B2E44F72DCB3D0074D48 -BAE6C21FF654953B9E0A33AB9B33259044BDE76643833BE8588F50130087356B -19EACBA029A1ACD80CD0DAB61094A8BDCE989D7B6BE57A58698079245DB6857C -ABFFDE2F20116A134E2BFBFCD1A4790FA4B723142BB0745C755CFA493C33EF54 -60EACDC2AA25704B648E7A4D03127D49C68F79A3A6E74294CD7BF78C4003209C -CED18AA524478D46D6286061E69975212175230477A59A6342A684A5955EA108 -98C38DB86533C293B419E2D7E5C4E15DC47BA14478ADF01D466DB7CF41E34196 -4A64 -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l049033t.pfa b/client/nfsexport/lib/fonts/l049033t.pfa deleted file mode 100755 index 1c7e2051..00000000 --- a/client/nfsexport/lib/fonts/l049033t.pfa +++ /dev/null @@ -1,1735 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiSerif-Oblique 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Serif Oblique) readonly def -/FamilyName (Luxi Serif) readonly def -/Weight (Regular) readonly def -/ItalicAngle -11.3 def -/isFixedPitch false def -/UnderlinePosition -30 def -/UnderlineThickness 60 def -end readonly def -/FontName /LuxiSerif-Oblique def -/PaintType 0 def -/WMode 0 def -/FontBBox {-207 -211 1088 993} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078993 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D9E5A3EA27312D552EF3BA -D64EAC97A2E691AD6D6E5E444CB2AB74100E0BBCD168621F404A2C17DAE2055C -D93986BA853006BC4334F74072DB02FF011FB0F56FA0837770F4DCE07D798EDE -1F4B52091BA76C81A45FBE15DB5A0D68D7A79A8DEA9E4CDC55A047442208C135 -341BDA8FC13603A79D99D9727F1E4DE02E48C52B5CE6F5562616B4BC9B244567 -46D53ED8EFAFD8C44F4FA1999EFB90044F1C32BC1F17875428F1B9282238D5E5 -F13485FC0BB836C0B07591955B070B64DE596BDBA674A31380AAD2387FDA4077 -F0C99DB67BC7E0D2F4A214F0297085D898A0B1B8F87EA37A22039BAA041A168F -9A09FBDEF76C808DAB506A14BE209ECEDD52561A881096E9005665CD1F34B5A8 -CAA535FC82F7C2643B07D7A4DDA492AF2B82FF073FC79FCE68FE8BCA2C899AE9 -FD64352D010C7CEC4853C29EE8E9E1CFA01A58A75D91F09D51BE3D56BA37E8EB -161BB620977C99673D3CD1D0B268F9CE2D8E5B0F95A8091634DE5B63E112F25A -2D794D375AD81A716DFDDAAC5B40E5E127191A098317223EEE90186101A453B8 -4D60C9C1E5FEA43CBCCFA33DBD3AF962D9E9B6963667C49BD729B73F333BE4BB -5009B89754383FAFEFBD007839B81AFCAE0661A3237B01B83ED6DF684272E95B -A01B989947AFEFDD0DCD5E6A67D331EC60BE9B77C6C0586B6C57113D304AF5A5 -07C5766D0B19C4061E59A3EF4041F8E9CA4EFFDE2F48653B5EDBA25DC74FBAC4 -D6736D66890497C37B4DFB51CB2D7B6CDCD1D691548209BF599E149BCA092B1D -2E8D1203CB0851C714FCD6777BCEBB26318D5C5E2E439C5CB17A93EDC9E48E10 -92166DCA43650ACBA389D3A55D38ED21951504CBD551FC7EAF5D3A8BFD48FFAF -DB31CA6E7D0E1DDBA18569A6900A20A11A9B4B8B3383900B369A4A1C9859F828 -DC8BBC1BB653F92C1C78D24EB7D3CB97D6F1D5B63E099E68D065A9ABB7228B1D -B6D17A5C3FC4255972A26B54AF5E9973BAC93A9F5E84220CA34E3C531D23DB43 -50001FC2BF3F62049435BBF3AC2FF0EA43B63EEC52D3AE060018CB3331882A9F -6B05A69332C5DA24457DF7F2AFBA0FC7E512A28BF6C638FACBFFD54B90CF0768 -E5F2180D31C651B7F58EB26B484955D1156CD7F37BF812224950615DA203E923 -E07250619C784672066E8B36423A83E2BD4970F894AF6F52B2F0A6AA1A85137E -056051067F2979EDA3EABF13255A3CE018FB7EDC0D3C7458FA67E63AB44F0E7A -770E2D2A8309285D6B04701A53F44503AE64B9D572560E12B102ABFD762F3988 -AC2B39737A18F9A52A0BD10BE37CF64F5198600DB70B31F6A9DA9FD6B2AE82F0 -C745B5AFD6C2F650D5273516C4130052964AF5349D562BE851E4B604F60789A9 -C673EB95E8873A695BD37549F0C6F1CD390F5DBCD938320A0CBBC22A3CDE08A4 -F8D15B484B34DF6971A54B8F7FB1CF485EE80B16412EEAA55632C6148404D293 -2B574F96BC9405DA846B02C1EF69797A0ACC13E42BAA953827E28F17D57CE611 -683565E3627DC24E3B67D80E2C740E5941431F816F60249DBDE5755BC004157F -7ADBBA7F7ACF01B405A87382189BF6540E6B53E52F772A05B23462D1E6B11F1D -8462B8474CE66638DFA39DDC6BB35E06463312D4858418A49C71EDD693348F23 -E3B6C4BAAE2D228D1B45290A316721673C256B03378E998594847503606EE7C1 -5276590ABC466729F36F907A0B37B5F1BC381A115A65DC2B2C5B8439F85901B1 -BBD6EF263820E813F9E4BD65E9A29FFDD9178D22EA74552E22DE6362E465D698 -3795D8FD2487B2A624D5C535063F1B2BB3DEE07E7BA4A5936BB0DFA4377BA2F1 -FE555D347799403EFE551EFF30BE7468A471E902433EFBF02E4784B583B1C255 -BA90095E37CAEA6CBD0BAD59E3B9A14120190846B8AC02B9A6442B78E68BBC0B -94F8E33387523D672BD366106A4BB62B1CF022364D011CF340BF08021FC70AE1 -D2B4714002FAD60CB843898B731FD401D41C25AC996A864B4848C0DAFFFC7383 -95EA07BCC6A7BD093D1ADB6E3D220AFF5669883F5C01B2820C82E07411488E7F -66CB3CC2F58D0F867D9370FC82B6D231B37E5E6FF413669ADADF2264586D9E25 -AF180F49B79416618FECFA641018806471B0145DA023FFB1FC61A51D03B86C5E -4EBEB9F7F5D5182C3075474B9CCE399CA11C9FA17EE469FE0481C253253FC03F -A4562033ADBC19505B863A444C23F07B048A3DD044E8CD9F0BD77C9459D61FA8 -1AFD906843077AC6F878B099F776C0A4BB5460B3D1F81DC3871F3BD4C8379B08 -8309F47A42D923C153F7581EEC85AB756075CB465CC8F8301AC6D00764992DE9 -E0BF8A4D9C6B4B0EA012216797543DED1CC8AD8D89B277E586B1763F9004583D -CF1EE2BBA82FF768EFD891834C0CED284F56580A4BBE440839A53F8636B1C99D -89D65CEA7FCFFB44F9CAC913A52C81728800031F240A502B588F487AAE219D97 -CED1BCD34096FA682B335FF362F87FA6D8A307CB9D796F1700CDFA3D21C5BB66 -FA221D737EAAD02208240E4B882CE67D19AE089380B0FEDAC4F97E7ED7629A20 -C7F8688BE4D5C0AF3326A66C1403E968E8963F4DDE599143D8C57CCF85B7887E -980D75A2DD2B7AA28202635645D768C7121AC6D6FA7A6DDB06BE3AB1624D36C6 -C0F31E3B9BFED8691709D747DC2550915DE2A2486B7E74DD1665F350D2FFAA8E -81E8671F67776964ED20C46E2FCD2CF7B3E0B559FD8C9A24C39611E930D0EB7F -B28FAA043903F3E4A0E3C1856CF7EDFDA670FA030C2A78A99F4FC80207E17A20 -63C316F77D88676C3FB96B680B1A27180087FAA1FB5CBED05EC3BA0CC5566CBF -496545871367621CC713131BD73F6C37064EF652DB3CF175AE9636ADFFF84259 -25A185AD1F4582845C8D4B095B4F7628F1D44C79FDD16E20638698C2D3AE2797 -04723053FD9ED7D54F2A64C09CA1FC60D3410E42196E42BB914E4C4A04C39599 -51BB33559A9EDDE6FD37E9876659831E92E1FC5FB389E5C89A0D59F792AC9D51 -2A27FD50F713B97D32D83A216241DA10B43928565CFA592C54A4288118B6989C -8BC97A4A1E3C8EF78B1E17C18B4D36F48067C9746CE3109914324B9FFAB62B27 -603ECA751FE7AABFC5E38DE09BDE9E575EA00E8726C3918DB505D2264A510EFD -117D3F834DCD09796193CC5D6911FC7BA69DBC8350468534353B20E8EBC077F0 -9CA9090C11E7FB960DF3596125E52411C38A7E5C36F88313F84FEA1916C5FCC9 -BD772A1B9DDD67BD21B117F9F2F00FB7B1EBA1B5DF9CD89CD46E0BFA65199E62 -FB5C7F1557C60A36D87898E8C2BCDEEF99040B45585C0ACAD8E573901AAD634D -D2F69B4CB22412EDA3C74D5D6098E8BAA1D25A1B78D07FB93A58F84EAB79ADDE -E84D39DAA5C0E94FE8951AD145AF05E9A2A4432B7BB6E853FE441EAD4DECD57D -D8E96957622DBF00DF38825C428ADEE495F1CCB5B25F08CCA276DCB042A63CC8 -D610CF464BB435CF4716ABB81A7166EA48CD9855BAD9046C898390441B7435D2 -FFC98669E81324854E750F49F64FD19D69A10A92328F2A4B11DBC02EB1F7CC46 -54FD66F66A32B02C57488F8BB468D73DAB1B3982DF8405BA4F1CEA9C76D10F54 -F5481A0C3DECCF250DF79F6B614B3E7CDC0571E95FC4478A20CDB3E4D4B83ECD -3C747CE9D175AF8F8E0E435A7D5C498BBD387D9041DBBA0EB62A5035838D7E45 -4B0717C5CC75BEF851558280983D72DEE80A0EC3F685A2467C6D22F4E33C4D6A -494589594DB320011E40993D0942E3D26B507E61BFA17A3FE55157225468E2BC -6C63EF000588FF08D4E0F8D244152FC03B35FA6C5F6BAEC28D34F3FDFDBDFB8F -90DAE0DFD3D284A3E859AA4F79091E373D27C04A82819A2E91AF7736AA070F56 -2429F1077B9F32E7F1700AF99146863A82481D0E78729E9EAEA3C2FFDED364BA -D88A837491D5A6428294F60C608A3483A2BFA25FE5E0FEA30E984C46E25D98B0 -28B708C01494CF33D00C0174E18E52F9B2EA7F921827505A980BCCDD191E1B8C -D6BEDFA50F653B88CB0144871B2AE58835B15F7CE53F731CCBDD056672574ED0 -7BEF33FAC905EBCD9D47B82F749B30D14CED4D0907DCF3DFCF0185BA1CBE722C -49D7186BF7981DFCE6B2679E177569941FCD563FC3B9B75610847279C1A01341 -AD3C35B4752799789DFC7D2A1F5F0DFAF89C498DE1A771DFCBE9816971C5313B -5AA89B10C8C4094049570C394A837B031BE0A8AED0A74123CCBBCE2DE1671841 -397237C7827A5BC42574E2AD0605F84B77261DD7DEF10EDE93BA9D61FF8174BD -3BA0A966728BBBAA807DABFC3108209752FCEAD24BEBC8B22603C9E7B158E86E -8873BB01E6D25A09F5FDFBB6EDD3FAF6C672461644BF76ADFDE82DE718BF11F9 -A75433926E4B37556EF4BE8110D82A385C324DAEC3F37D89434C5EC8CA3286F3 -A0819C04DA7E4E48CEFBA97BCFB6005D3B3DF4A8880D3349FB15EB7A614FCAB6 -806ED53B9BA76C02E89D161E8A880ACE8E4201029C62DF57099634EEFE3FC7C5 -A755374ACCBCA10435F24D5F649EC05D4CBF39150A893984A177ECB0D3956D88 -798954C873DFCE8F57D13D6652CC928E9F80B4B6D47C5CF9B17BF89456C7B91F -4717C990911E19C595B52D19C4E5DD70AB3183C4165A4217ABCE21EBF6115E53 -8A1774E1A998893F0668FDF637A05178F5F1CC675CFE42E67D56C3365A762FE6 -DB7B670A60C81104B9237F5BE835B38184D56DEFCA72130240A2C543035B4418 -384ECD8189CD5B7966663EC5B42A83406D06210A37C65D02F7C6CDC3C499C574 -4A4E719EB0F14EAF5786A385D9BA4A04D3B7EDCF1BB35D3243264DE8AEA06AA7 -28DEBC7B95023FE76C18E9CE32FBF3AB800F3F8C9FB5211BDCF93469DF59BDD0 -662345D4D57D9A56BAB5A145DCBCE29521E30DE7C6637A812E64253584D66BD3 -83BBDB9B8A1AC464FB53009D543B74F07B234B4E1D523DAB41EEFCD319465AE1 -BEFF3DC939164B65A06C6F60AFC0126E093166A842B40F8C39693AEAE9BCDAC9 -758B1163F4AEB042E8AE1385672B62B161D83CEDD0889080CE8F76900B82F82D -B84192D470A0C3C80C5E15C1E3ED8FD582825FC18A055C40FAE681E1EC4B16B6 -53A1723815E7D7E8C65553F97D7577859E4E63FD7EA4508825B75FD8FF0F49D8 -03047786DD59110FB7F422C6C625992E86C719F6932ADBA81CBE1C43C63DD43C -50D79466C8AA5166B8C664D8F6E90F1A807E8EF26A1B69DC6314B72F20A390A2 -98599D640CC42ECD583F6405828CA8408EAEBE5997D15BA79060AD9C8E5FFF57 -8B64D12E6AD37373570EDCD19FFD63951EA8BA780A2D01F1B9670BB636088C3C -4B1A8706556D8EB05F15B34A549905C330004A66083B88D6D6D3B538B93F7090 -4719658F96F98FA64F2D8773ED8BA488CDA55ED6D75AD2B8E9AF47AC86FC2FB8 -29CF1A792379143993D9E20240DCA56D3E7EFEA9466B0138175CDF149DBB6872 -565A8D48C7233A6AE4780373014CC5CD045CA08EB63631A50B8C05AA893A6128 -FAAFFAE38FC5C81D9320B116864DAEA14ECBF347953510B494993E459483D0E7 -7699A329D0EF527230463543C583EDD4D5C05CE0E81D1A51723300EA987314B2 -3352F4D19439CB60D500EBDDE5B3A293D4771A4AA137E76DF5688C50A65258EC -DD90D1060DB86A881F858ED21DE81E407FE74E9904E98BF659282B89D9ED0240 -535995B68AEA47B05601AC9BEF4735CF94BD905324CE61374AA17FC0AB3CE14D -23D28C1DDB70E9EB283ECBF96BC601C7B16810C46D996DEE582A41C995208793 -F88378EA764446F9AF8939AF830CC14D62345B40264362CAC8DA7D59953FC1EA -6DDCF2142D534C0D3C3EA587503BDF46F76C459772A60C5CC4716235B0EE1576 -690C4F6E9D1C6825253BDB9CE0C710D1F0BAD5193878AF0D3EE7D51D54C7E0FA -AFC54104158E7D0B6B9F7F83E7371AF8D278D861B91974135818DB29D89F1501 -A00CE9CCCA2662A93B447E9A5EBA74A719C811598CB09AA94CEE7D9EE8880967 -443D806099915D25D63021B4E57F359AC43911D42E07F6E8E3CBEC19B6C0496A -24C383E14E8CC8B664EDA0248B047951DFAF98D8D8F2FB531FC408FC123606ED -86788DBD7D42DA61B976B263685297224FEE5BBD981C5A45194046016A8B26E6 -F54EE7FD496AC4DEFA514BDA54EABDF41F1619C4E533363C5CF5914B25890331 -9A7F821F784004AEE9D10D4B47F75D0531F80AE71097B4DDE3B8BBD360EE2727 -3892959E0C7480895DDFE0A8999E18302F60979F5B2FC794F5AAEE205BE8FDB8 -84684F7B35DD6F88CF8C5AD2B982E6EFACCBBB7A4700A67CE00998252AD0B287 -E20D5AFA935A49B1ED106E71FA16355F1A54D64E0F8D2545D98FD99690C40B96 -1A9162AD79EBB7B613A015EF486FC56F2EEA41FA772EDA87137606EEBDB64E04 -E24856C6E819063B2CE246F7223C6330A36D624A597707D2385F43CC17D529AE -4997634BA6BC9090AB520E2C45EB729612B12F9D3FD91DC4C9EE74CFC552E56C -4D672D1306407D690974E5B3DE86C7EFE946DC7ACA248718FE3B2F699E01CEF2 -B70DCFB81F24AA2A2C220E14006B8D6E09C5101F6724E9D75BA1F465E211B1D5 -177E9F83AAC3F0DF18EB7454E61F76CB700DD59D8ABB42B1AEE8FD5565F85D70 -240B724E6D3C5935D8F42638DC82D9773CA3B78954ED6533F1D0BBAF1BCACBF8 -E0CDF3032CE880780EE8F56AC2182A46A319798C9C60D398BE16E654490428B5 -A480805FD3E59D75A2E154C1016D210D4DD3E11639E9F2AE510694FE5F7D9733 -F594EBB8A17B5A2A2471C571D481E8C04D072511753927376F97F1E3009D3B31 -ABCD1C6DE64D19D471E39E7FABFD7978ECFA08E611A9932EAB8AFC7A4A1AB516 -6315B8363C62D112A9FCE8489156E6164BE073C1FA98E9D55E975B86ACD9CC87 -03542B3B79EACDDC0F525ADF9922868CF31F3D83D1E392ADF522E46D9E71EDF5 -25C3FF53ACCB292A8604CC32E8B3051AC8BBACD05948612D337DED7C027E4EB8 -F5ED77D4966D1A6B32722613F9BE146E5D7A61ACEEC0B8472E95B4E8266DB146 -8B1991DFEC19482C9E1D4058016E0EE9B2545B07CB4810F564B10D0EA86BD066 -41F027E003DEC79F80D11E9452035B4093FDB920B535C18EF20305534855287F -DCECDAD9A1CBCD79CCADBAB8F3B55B0E59001E587A81B5D02EE45FC1672C411E -FBEB21598F9FFCD05C55AAAA281AACA5193DA116B1F46ACB96F728D40476BD89 -542BD47C984849AB998D6DA2AF989EC1BB9A26F4361C610919969F7DA2771B7B -055F44BF8DED74CDD91CA5609918ED52354ABEFF2DA73C1DE643FA90FE4FF2B3 -830743AB648D2A108FF8CBBEEC1DCB62A71490A6D574AB2C36792CC00CE631D1 -984014A7B9508C3FC71CEEDD417F6E31F5BBC6F1FC0AE55155F9D56A1AA196C3 -A696F91CDEA58317BE9E8B37F112E6076C765B1C25F0CC6F671428C91A57C63A -1A69F5931B1875664D489A65698A2BCD637965FA5001F2AAE617BD5AE2DF9B9D -0E230D097AEBEA7551245B5F6B4D98EBB1DD23C6ACBE887FAB49E9F271051F15 -E6EE147FA3B91FCBB5F0D571D69E1C942BAD057F13E4D44B4C3BCDA1A34B4A1B -FC1B3938C1A20FF5F3C2F479FA651F015C4BB08BC019A692462F15CF9DA72D1B -04DB4C99E145218840246E4337700D009123F528AB89469B888C9DFA38E032B2 -7E2256BFB68648EB06197B1DA3F73AE3DBF313A8C661499CC0693C8D3557F0EE -B9479448E1A85B014F1D178C6BE2B625EE25EB51CDC71B9510793AA5D823CF6D -7328E54584076DF26B858C9836077C4A2381F4A6EE19F4E801772C0DBA42508A -3D92EA34CD0921CDD2C56A1D9ACEC3CEB200626FE3CAF033E24800DBD51E6C82 -FA0F7E37F3DA97A83227358C5B20549859645E819C193B303A957229F66896EB -225922A128B1333C3AC8C616D348C1FE225DE03782E6E5719F13DB747D0846E9 -C3C66728C9099069DEF69A4F254188C46177757DEACB597E8CEDE41658FA405D -921E8F71F91F455C0A11B8B517BEE363690C14FBB31232239F5A095CBFC7941A -95815705868B3BE129F81BEE586F90983A28C04543E049BE4A6CB0EDC3EF4929 -D2499DD08DF2A3BCC55CAF2AEB42695A8016A4A1A52D4688AE0C4867363AFA12 -3EED7AF3200320C1EA166FBE2A42BE3157AB633610FAF827666C239F5E6310EF -BBC01419156AB3022DC29B5C64E8F676150AB1A5CB91AE6E9453A60A5A24607D -AC7F2B5790429364E4E6BC6F3731610769EA645101C3329C77CC30D7E7742FA9 -6E47A1F4A95E5B9A9DF448B03C764390C74B6CE38FD8A43E0FD49B19E5508491 -4A47FDA43F186BDECD6D9FD0F1D592FE384F09D4415EA6FB9AAD57F11465E56B -CC7CF0F78A498F3B63985EE28F4E18557DB38101282E3FF5827569B33DE8510D -9ACB69C2D3F13D791A4E095B77A92081D8943E3027F6A8AE7DF75A8946CBCC5D -D397485BF27B974A5708AB8C06AF9B9C695725B49D670891EB0C87A4B650F117 -381EDC200C8172A35F37542F207FEFE29ED8337427230C2B16536FAC2C89B550 -6F714AC7D8870775AB79A072355DE4A5B4D1B4520FF18D626A8BD3F6BEA2A17A -8EA40E7A82494F7C063830B6B81779212BE325569F482C0239E11CAD51B49207 -012F36787400AEED36BC61A6DA3B497E86D4BE1E849E577C89A72EF77A6E252E -153E83DBBBE61BD4AE74D470F8A729E385628C9B60D12A999C345C19348A0F95 -6EE4379A54C267466537316ED4BC409483351B747C91241C1CF777B72491D418 -8BD37616222529F07681FE0F43B3ADA4847A612C7C56B5B32D8011D13A9DC226 -116C53C017F2E54C5D2EAB0047BC9B01A9A414D2EF9F51D9E9861615CFD729B4 -FCADE9B5C9EEC3D84C9F97B2528CDE18C4B461FD56A5327771C977B13E967091 -B8B375C0E7A63D93681104AA2D00161D1A9FC91457DEAB8114A9EA93EF9AC7CD -B292CA7EB423DF2EA9183A267953D4B431A5C532B26B12A4D2D681804DB2A908 -4E15E30372E42740E3E04E044BB9E97252B95A7BEE944E3840A4E9A327ECD640 -38194D75C20F80497DB572929D7B1DE23C5150A242A5D042988C83F39BB55958 -E3BFAEC4582969F5690715B30A44B6CFBF33DF363400A52191EB2BBCC599F2B2 -F4FABAE2BADBA0731D59F1B2E43C97769BFD3B9CD210018080BB38A06DE7A42B -D717CFA65D48118E5FFB29C2DC85E1D3068261EA15CD6F851C4DE7FBE2D6B4C7 -A6EB8752F6B4BF9C5DFB7C3282D56FD0E1036F3D74C2A96B4D308D91C1D83F93 -E59BB92411EE3CFA1169E5C92A94A32CBAEC1B570CC34F14B1810C1144283402 -F6021537D75F7B98DA7459921CAF5DE5323C1C1400C79B1E9BAFE971F7F21268 -4AC50D4D0DEF6E15F2DCB9541C04FE993AF7982AE5F9C4C6CBCA302B76EA1A6F -DFC4D325A8CBF550FFA5D9298B4DC9D016A66FC44D3ACD5F26C980F61AC2A49E -B738EFA01CFA1ACC7F251E87195F70385CC3B19D3D7701CDF9E4CD52FAB6AC67 -C86FEAA4A793FBA499A7601F95F9F934495FE5AF5EC8CCB8F1C061E9733EC0C4 -845364B1F0A232EAF557C293EE11704617B82DB310FB50B152A711EDAA13182F -6AB5B07064C07CCEBCB7ED57669150C74A2E72E95CB979EB18E439D8C2C55C23 -3A66A30F43B2C40B939592405EACE804CF149A667DD795016439668BF538913D -A46FE03F8A45B348EFB1F5A454BD392390225351099E12068DBD8EFC37365FB2 -899734B4D85E0AD8D98F18EDB76389713CE43C0DD27D4E0AD99BD3CED8359325 -CDFFB957B75D05325AF1FE0532260F41AD9C37E5533019AD8ED57A1D7214A0B7 -FE158F9A5DB18CBDB2CEF1829C6DC6CDE3A14D2E7BE72648EE28C088EE03CD66 -EEE9C566F8380473199F069C73C621C8A8FA0A3E606730A2A6E3B0C72C09B0AF -46803CA2D1134E117D38C827AB65BE4F5F8B1E43F1294E07C38924243796B797 -4F27F3124FFEB4609518D629C0FCCDF235363A523C0F6AC3D37BCEB1DCD10231 -6ED57B4137242BBAD3F625CB0D79AF1A46DFD85232CC90F5EAB36E950CC5D7FC -345A443B7F1CCF0028A6759F37F7356EBEC1B1271FA22BB0A72DE74EED1F8E5C -C9A20D9D2115C7FEA8EC01F15FA28A2F4537A3C21EF9A168017327BC03FB37EE -FA1E0ED6BD673F79CC1DC21B88C26550A14AEEEBDDB1E61CCC504157E461E29C -7BDB3D919A2986B5EC8EB2D732B0B4BFF561DAA1E9618CD256E219C4DE36B69F -4B6DFCF81B78F00D14145F21FFE675850CDDB32D499BDFBC1EC0D35787225CD3 -DEDD89FDAEE89501C4E5850F06BD948E95FAA06BFD2556BDB16259D19086598D -DA982F4D7593DC56130F818CB25DD92F2388520E730C8B3ACA4E03A3CF8CF205 -FFCF113E4278F0B5869E37AF3460C9BD1DE520D277AE1A09F85E276D6F16D7DE -C04E12DA6EB6FEE8F9285E888ECA6B408A8EE929ED51F5A7CAF5FF5F87579604 -889BFC328A4E43D308DF7B6F89C059DBDD4458D521A4FFD66E8339D883E1B7D5 -951E32532F60D1B75845DAE58332BDDE7A72A8FAD548E31202130EE23E730ABE -C9007226F3C24AD929158D6A266A045C715B293A3D7E8447CBE6062BFEBD7956 -9088865031AD88B5329D104969A1FAD918F828208B743B650ABA1F345D9D6227 -5E4AF25448CCBB425DAE77E2CB9B73C73E0247C3DBE67F7BC3401433DBE53E08 -561295690C9F93A07D10093DC2AE953174ACA5358B40F3BA9DCF0710C49976A3 -C482B698FA107B25B246789B91473B63B4C9396997BBE4C8A5821E9F6C48598F -41FBEBA01C031E5B3107A5D20839907D62D51F721ABD116A40692084A06818D6 -19470FE3BF24062BA7E62A27841DDC319496790E027DBCD4EB1B87810F936D5A -D33212E5CD654BDF7E245D04A555640DBD89A6A998A6A2377CA8AC615734035E -44ACD5BCBDAF14DD345D8D6B8A34AE91A6AFA2A7FE4B09761A732DB70692691C -774659E2768D84943091417976A6ABE11095605C8269813BB4811F0F47A8F669 -34E3168FA6A02E4DA5335ECFFC0077F7D3D4573BFDE1D22E5FC066AB27579763 -422F27362794478CA59D87E9B4049F7CCBF47854774BE273A6B6F0638F897E92 -741F3144F7BDAC4010929BD605D3C52234F5EAA239A68FA7C52CE2B184538C06 -E0A90BE79DD5FDAD372D95213E30F9C2A999E21F598BDEAF6315F5C3BCDD6044 -92733C0B012F610C25E146CB6F17AA6CBDCA88116E7B551B3B882179441E0568 -852F3E714BAFDE7ABDB93BBA3F1C04E4FFE87D786B38CDE07FC9797AE301F3BC -70013745A652EA5A8DB0265E846BE240D4A456E3B1953553D1D36781FBF11C50 -90C2236FC2CAECBC91C0FC04FC9F3B86BA31684BE56309027044EDAC9997EC57 -247D28A677AEE4B0844EEC683A2227969EF18F52D1E9C926569AFB482CC0C475 -E0217037378CFF3B701A798074AE248751A7DDA18EC1138BEB5E57FFED63B920 -D9BE59FE503DD1EE2909A7FDE826B40A419CB0089C91D6A134EAC709CAC514CD -DA21620C37994A81709C97314C1A09BA6AF7206122BC143310CF7D9CDE96AFFD -ABF6B7400862212ED910F90C9E9B90BA2F7AE0364472576AE09C193D7F327016 -D9C68AF2F55C13FE4AB71C2B4C7D9A9A58AA097B69447DFCD98219A2998BDA74 -00807ADFFF265B30D1A9A2D967856C911A15D89A147016F70099D7AA84E661A3 -64EE3A3E379ACF29DDE519099453FF94441B19405D7C873F6DDCAB0EA55E8271 -ABF2B29FE36B9D3B2461D01DEDDEA93EE39BA85B6424D70A72AA4B05B19B6D42 -D46298C7D23E94A88FACA6D476DC37E379F537B80454A61678262B39B84E0530 -F21082CD5EA2D11623EBB27340297A0311BC422690758E11E6A2D14668C3FED6 -FF932118DCFBB0E4E8B723A2EB58367A96B16B9E3E466F9ABBD458C866CEB4EB -D326D8BBAC28163105F537220F240FFCDB3CC8D35F60AEF379B3679ACF3F86A3 -C0E32746EA9F67C084B2A80866DC1564CD4118E13D0E3842B623191E849EBD64 -8E89ED9377F700D60B0FB5A4248156A1D5E8400C21A2EF623730FE9530382652 -705E3C9228D9963BE6AA380A98574C52EB657B6F2E142AF3F0250FE04EA1E913 -BF95A78EC7A6A68FFFE15FE8128F3EAEFD692A17CA5F779C705FD1896B1C9BE2 -09E8D23F3BE13C3761DCAC7D89679EB558BFE8BF9A03B30D8790B7247E0C094A -A0E14581C633C41987F33D225F9ABE5E1547310A2F2C755CF580485D7328E451 -95D7C240A674262ADFE530034D164B066204358E87699216995BEDF3C437A77A -6D9DEAA3B088DBE3C510FAF44F92D11A9795B81682F992318675B181532BAD48 -7C30BFF33FFC7B0D756EB2FF171DD0FB853178FDB08A48418A8494C4538D8300 -50A48E926152E47B225932AA491D20754B115C867C40930F85ECF5D82F43FD4A -E1FB09A16485AA8DE8481E2344C8BD2EC4C3EE82BDBD4EF12B793B74454BEB72 -10DE166D7941C0AE41D9822B8B1A5BFF31A411A95321D4B3F81922E711C2C594 -7C8D17D535A289F32F573F5435EF81F7A6E15D2A27E6020CA9602DCE96520A5E -91043C649E41950750AC2B991524FE956D3A5AD964D1313C2EA55D4B5355F7D0 -49C8838BBF2C970A150F272805E66AAE44582A5840D7F0E206D82A411E7BFDCD -8C52A9BE758D312192DDC8FF3C4B3900879307282815E4BF9511AA1810509CF7 -14AA4025436A8E20702E2BBE02E0060C875D1B25FA984A3165B00F5CB82962C6 -6D2C2B594AC551828A416536FB02BCD49090FA6C7AB58AD771D02F6895374768 -4FCFE729D2827DF513E1C60E4716CC859E4D87B049ECC8986B68E7E5C0FD1C04 -AF1DA089D0FB03897D48E7D4F2277B8AEAD3A24147D0936C54D487B434C48B19 -E38A0109C9CB131359FB2FE6DBEBDF180CA8C12C2ABCCB46931C662DB2D3DB5C -0CCBDB6F00EC033C9F923DBBAAAC0BBBF4A35ABA8F2D4AE7F868213721F10D51 -42BABD11720505345566C5E2594867DE91E81DE20709BAC6888CF96B4728E2DA -9CB5032F3FA434B95F6E55F484E1570565C0424087D1FE65A7BA94459FDECB20 -02A522FE8ED23D6EBB943F185E966F7F027C183AB1127A0A7EE43A9EFB4A127B -43FCE7527CA6D3C753626DD9D35137B7BEFB4D0C7A0428D6E12512E63BA0B82A -D8E22C7D40477131568FD5B9E01F4C23022190578DF4B596FCAE21A6CAC7D573 -BAF887E02FD103350C0C6483732E94B507718B8A9A378DF180A41EC67BDA506E -4D8FB98046D97A626284261FF30F456D211D5C384A16887706B8C659B2281B9E -AD07F74DC327C12AD6B828AB0CB757A83BD9D135BD0799B5F8969F5E00DBADE8 -5A8D191228CB014330CF17720C5C2B8564BF78F396B9F518F96A92CE80D9D64A -4DE45FA6DB005EC8CAFC6C997E9F3B1688BAE40F0FA54A7F5E9B7AB6664F2E94 -1A653398F4B3E45854D3EF1789E8F769BA3816D5EF896A997FB64E0A8D06365A -ADF839A43899B0FD2411D851E273B4B0BFB5A1174AD6D0CEB05915F1A8229547 -F9220EF578AA6A561D949B48D1B6185F2058F800BBD758317E4D555869BDE73A -A5B130A31718C787A4302B76297F94C503A442412CD263F5510A39E6F9494664 -724329E58CF259950CD1579297B9956BB9435B6D44801C058E28DA4911C19CB5 -368397D382C4C6BED80E1AC6CB7716E9C83CBACB87173CAF0A7B56A657BBCEE2 -8D252EFC0FF59ADAFC582146D2074BC71A3BC55D2B6694842C0AC9DE6FC0BA58 -C67AA00F8BE31EF69343479C04F1E4718A99EDEF7C54EA07F6FDB1673B515CB7 -90BD510B6915016564A3C69C7DD10D2896C21E1893C441243AC3D3223F878DB3 -D98A58573D71008F7B5A574AE8AFF1D9BE4BDFA755459A0AFA87EB60BA40E9E3 -86ACE3DC9C8C83CB780B705390EF58C22AD86E3AF8AE9EC7B098E3A4CB7A20C2 -364844C91C9B092F3C80E5F0C0875C87CAB85005893837D2A84288F50F595A2A -C6F7524DA556249A48B1D6E407AAECEC725E46A22EB1B0CB8A03D1C853396D14 -8135A883BF18DF240F8B19CB176B064E685B60B93B16C74B6E988AA18E610FC0 -150AE778A8AC1043B75F43D477BD8B5EFF5BEBE679AE42571C7A8974CF07F55D -1FDBE94C2B83D8D50C6B1FB66178051BF1C42EB489C0EBC39DE09549DADFC50C -8140F04C4D065549800E1DCCFE65BF708B09D177C19D3AB5AEC42DD4CB645A7E -C52A360D67920A2F379DF0796DB1D31B2BB681E759279CB093F545262152EF1A -EBC19FAB38F4649CE126E4051AC6258C6C301A2285DEE5605FA2B337356E0B36 -2D927CB3361B895447EE897BADC86B875E28679DAA7A23C71590BA5F59BE94B1 -18670F3934CD9A3402A4C8A154EF6A8C9A0238F2F2BA7C4CC5C8CBB774923CC1 -2F12543FECCB1635680275A48309AA322D43CDA5109EE8E6E7E8472EF199785D -9E84A5D50E433A860494349B55CF38808CB51851F21281959CE4A43781AE9250 -54011F5849FD5B45940616AC942483A87C1165D191B856C9D8479501E9A59E8C -13B9FBF1083FA716AB4D7FC885186C551085354D17684BB7B0F0E9EB9C4A1205 -3383639CED121ED2BDB7A52356806A46954A06C00894DC228F22E704FA3E30B9 -204B85BADD5411B313F7FD01E02FC927682DF3E8EB3BD0EAF002448154C8DAA9 -8B2691D0AF9A6E6DB9DFEF0FAA136AE9A99EEF6F3A9B55EF49C85A083EC02514 -05C8B5D5FE8A273C8FD656ED257F11D49504F91CBA6933DA45AE47F7AA3013CD -23825CD92D445B052A383CCE81EFC50927C94D9C1C29D6EF54E5BE20D876A751 -32339988D4D440EB7561E5B90F4EA7586010566272E81FA73289981CB2166E79 -4FB33F7CA98FD016ED602C78529173B3B976F11A9CA86437F942ED0AA26B5EDD -D089AFCA5E3285B85D390031D1A942BE38B826BA08E36E6A275C87DC5477FC15 -1ACCA330651DD43750D3B0332C55197D91345D491DF96764DE969F55E6612354 -A540402879BE16BB2A08E45EA16DDF58645B86F3884E5A2669DA970E01156162 -D74A3AC0104DCF86C11C4F19236C586FE659844F0200868570BB4BCE1B529C2C -A216F27DD9EC638F671B049CBA7F96D0DC3402478CC833E3CE19D4B42C1FF119 -39268958A932BCAF36DC99B83061149B18C800E4196291DAA2E5D6983353EC41 -966F9303327A7DDA28D041555320E4B3B5DEBAD49CBC043DF4D92C2E5F82F3E8 -5C79AAA7C3B9CAFD96A39F58914D24E1B815EA03B238FF763763DBE885E8AD8A -C58A31E220ED192C61D9E1F3C5C13730744A2343B9BE703EDAEB42C9A53B0CA9 -BE6910779D1F94BB4789D3611A1D51F555448B8661249459CA515AFD0640D3CE -A564907F819B3752DFDD134FC5978398AF0C57B969D5B24A92CF99F2A0DFC447 -751F988B3AC1E5E55382673EDEB9CBCDB9825E7998F332A04EEA0BD207143EFD -BA2A4EDAFB487EACF8B4753A7343915C0EED8E9831BDD37BE699F32F0D09206B -FF1CE2BFEC49DEBD085733DAEB2720E03CC19A8B995FD2FFAE293C720A59DE13 -D7181515582AF67F9B51A1F8531A5B0A63BBCE4BB6146DAA1CD4281CD4166F38 -012F72EBD053D5DB3D2AF3D84EF7B38EC4E6845395395DC12F97526437F7B839 -F6633DC3CBAEC03D5391314E6C2B94B8392B1848527544E28F808A50CFE94745 -B6C2E7BEB710279420E2284F37657B59248DDE57C149E34BD2B9BF6F41207188 -22D28A609D2EFEC2F04B22DA370761E1C8FB04A7A132A157F25593FBF6A62F88 -4697C4E6C2E70B57443D08F5FAD9DB2AB398D2C47B039573C85546FCDBCBB5FB -453B9CC6D93DDA6D58B495099B5D204AC291074CDF0319957383AD958390FD8E -BF768029B92022E9E7CD009620AB491330B8270FB8B94202C94E41397357167F -5BD8BBEA013F3278EA0A1EA4A6CB25527C92F5BF9A2F67A38FF2488B09C89B8E -A5BBAF61E672FECFF5511AA05A3AE001463483D86B60C7E61939FDF6306093C5 -E621F084D993ED0D4ADD7F58F9D0FD05932E2E4DF4C2CEB1B0401F6254DD0899 -B87E41C1CAA87981E7E2E94BEF85F5FF3C260710408B536EDAF78189E816F2FF -2ABA6F132830117F95DFE7C0CFD740E20826E875DAE1F6E7AE8333B1C20ADF8B -B882B45CCEC42A6EA5F2A50F100987D50A1F8E5FA9C00AE132D77740F48B6D3B -E6E12B534A97663A3695491CF4E42E66DA66FB2EC1531AB292E3D8238BDEEBE9 -DBBBABA1498310DCE5B1B7B99464C463637218A766F1B731CCDB17AB17F4FBEF -47E7FF5962EAAF1320C667A645E25FBFEE4D882DDF31C9785628D32988F00F4D -87FF88DBCD2370661F85A16B82125D753CD02688FFF8FCC59D318EDEB5E56010 -16BFB2A8E8A151898F548C6C69BD17857F6427DB8102711103BDB2BD1C0A8F63 -31A1167EFF41E0E5B814AEBD022E941109E8BE0987FD33EDBBDDD203A18A3FAB -2A720481F15233739E1E882A191ACA4B051BF6549A0FE597041B33DFA55BC396 -A3D200D46DEB2071C756FC050132CF58BC768224387C4B53F646EF9972266FDC -210F24A85881F5EFCA127055FB69324B377802CC1CEF29C1A5D1C894337D0ADF -7B5EAB50B40D91D3B0A2C3698D1603FE27CAB713502ECC3BE3A543802BB18627 -1F3148A1F9F31C8905205B6348E39498BE0E24B558ED3D061CC47D7544FB10CA -EE4B5F5FC8161C9A341AC7CDC83F9D506AD6704554A31D20C26DBA17B6F011DD -71232C8BB6C1EC2993160ED28B5C15A330FC1EB37FDB83C2B7FF9857138A1F75 -3D91CEB5BFC8CE44159EC17B0462D274D75C4EA3C7A519067B8B817A9C6E63C0 -33989FAB825455369FA87EB7BBC8E80A9387E0772B22B2AE50A2EBCBD0E087A8 -18026C8BE1110F88E341751A56DE4D00B3EFC3207488097453DA8FCFA4A551E5 -5CC41FF1571C73BC0FD6ABC360E406713DA218331CA552B23B33F5C689DD2356 -17D4A4AB5E0983DBA0287557E477CBEA196CC9D04D7F101AF7D15EB52A3B8F9B -0BAB6EAFE12C85DC36A106DBA34997E9C669DBA7F2FADBE2DA80725736E5D681 -9E03E69A866ECDFB07FF17E0BA3F9270C633C1E8FA8C259DAA9407A9C8EA2208 -E0B22230BF8A84CA23386B55C5DD8E5DF685541A0BF372FB76C9F65835B339A3 -74E10EFDDF2E84872899B3C2ED02BBBD466EF25660E416575F8D01B6A191AFFA -51897804456707B70534647A4C09D849309102336B5D6F66CC544B2A37E1D8A2 -01F71DEDB222D2A42D74C99B14C8E834F831BC6BDD4348A514D35B666CA56ED2 -D93BABAEF353159474732E67F45199411CF000C7D4B1AB7BB569DC5F3F9EB893 -13FF595AD8F1A41B50CDDA27778C68BEFDE28CC79AB8B94377919B318E32F7B4 -7B3850320E1509452AA99F6F65E1C5C79CF67B4753528D07DD8BCAABC5BCCDA4 -76759D0343C3D4566270EC7F2665BB459A9FBB81A85F7343A5E14C7B7D262072 -FC37886F1CCC8F17DC5122F4978DB35E157310E6C355414DF6CC4532BEA621F2 -14426EEF4D7BCA2BD46419AF7E01B659F04F3C663FD10B4F09EF9F9ADB946319 -EF6C61A97667B2898256575DC116363B892DC5509652A1166C3D235A0CFF2135 -60675E209ACC3E057A38BD343EA5C01DAA61AFA53584C3E76C24212FD2DB65E9 -B2D99F97874228101DD2F38D85AB8E394B0C93076AE8310A6370BD12074EED63 -39C6160DFB49AE01E384825CABE01674B9AD61FB7EE61BBEF839C40E0B9E1081 -5F50BF8BDB6244230F2C06C421847031E5378874BC3CEED207DF0DA572FB92A9 -24C312CC4FEBE8AC67117837A6689B9A4C1CF677EE4B74BC60C12C3796FC5D3B -259907D399538B1E207BA2170472980AD2713092513D67D8A475410884883A96 -176D772793DD06855DEDADE128239C387D36CD8DB2E1D3174102BFD70BF8B2E1 -7F68744226293C8CD39C99D939EB6A4E635C19929FBA4D49B3F576B53FCF7257 -EADBA531A9316496118352BFEEAB3862370148E1A20E07D93C7958EA113DC037 -5A99A7C8658CE77F01C1B769618205E86D966F5D0F3A276732CBA6800576B5C5 -F31E739B709D75526F32B6E796E7F659AB80AB86A3986742441EB99B8EA3614D -880F9F37671E5BC3F8CE19B38EA6EE0693CECA57A6D7158EDCEBBECC70E1E429 -C1CBCD515EDC5AD996E877CA88B290E342D82F56ACAD5465790A46DDB20C5D81 -9C70A24BFEAA39A9155532380036451E1CB48ED7B7DBCCB686BF9A32041072F3 -3879D310C2E50A6646271800B2422E0C29974D6A02337B2BE484CA0D266F8F0D -5B5E13C2595509B03FC95C8E37A20BC8FCF0A4B6CB6AD6C1F9FAFA02BA37B969 -2E0E8036EAE531074039D62ADDCB67F7A28B1815C04EB22F8234EAE30E773A54 -5F04842B429034472097D2852282BD77A39101904B505825616B09A9F5BC1377 -678FCBBF4689E4A980A46C83AB17E2AE5C222BE8A967D448AA9492C106D259F4 -17B5AC04797F36B2BBFF569CB8F0E48CE727F7741A1B57A71655E77736CE6D26 -4A6B86E078016BAE886E069F6FD040315C89C3A441EE0A92EBFDB02D81AD44DF -F4F29AEFE0390448CE106B5A23143E9C34DC75C157C759CBCCF87E47CFEC0C03 -3148060FCDFFCD94B034DCB302FE796F06649C209DE276FC313D6A10189862B7 -D1C21075D80C30BA1F21AF907F0A9F38BD87F485F9DF469C8C9A9ADBB85F3679 -9839E5403BD31457AB9DB726DAC9CFF72EE7C3DFB0DA829DD28F50701FFD3B3D -7203F36E2E5142A210B695BFAEE814274CBA880DDEFDEE86FC499D203FD205E5 -6A11E5571369718AD1E56508C161A48A059098E7FF3D2BD0898A17F591635391 -B81544B0FF21B57B5D6507F57EFEB2DEC894970513304FADF02D78747E900164 -56C90030E3E8F2D728128C19410E0D2CC1A34257F371A856D0B5DED3C887DCB9 -76C65ACCEC3089352636F977026767AF681F829435E68124FDC3F4F22C1A18EE -9501478B1627E6E8C9E0F0737107EF242AC54676AB4F632DFB1FD1DE937EC35C -64A0E35DB72A5B524449F65AE9054EEB9315971A43A48A12B82B81258D355979 -F50E3F34B4BF541FB2FE7B31190705BF86D1B7DDE8B8CF9433A6474A0B82CA9F -03ECA76DDE98DCC703EC6ECAA8589374B9B58C648D0B644D652EE872CFA2B9F4 -767DBC4D8DDD8E69172D8FC9E12D4A30380EFDBAF3C0210B881F1069D17456F0 -B6F4A005A1E9F8B5C673A91F52FE95FB8BE9DCCF76465BDC26BC7C29FD2D13D9 -EE86AC85C3F1526FD495A120FBD5AAC5238AB1AD736206128ED0D1755A5F7098 -8B91636223E9666726FB36AAA4B02C3FC1E37CDA969175596B571B7D792EE705 -F72DBC6BB24E6D5E592AAF9B9D6CCC2469C389D25549A1E9FFC3B549C12BB96B -66299ECA3C0E9E2AE6DDD699E07A59593F8DD214897C22214C7300A517F7CD1E -D2144B07851F5E38E70886C9F06AD8CE90C35BBD91334EDE8A627735A4E8AFB4 -843D624A11113B8EBA95B1C55452D5A1D1E37532DFE8004F021A919AC07C5906 -090BB1AE3AD8B590686265C5E73FA528D9DCD44CABC78A392967031A08E12F7D -5E70778013B30559D74E4C6BA2B551500CF1071B722234DE8B4F6EBABA2988E9 -B67E527FFA26B606977B273B6555CD0B9DDDB4913B1D233933B1ACBD74EB59AB -BAD67D6047E712C4C144EC5EDC74F53D94A790806FACBAA02E7E2F3CFA6CDA93 -F337ADE914C9DC9937CE95F823931CCA1DFD7B2BB3B4E057EDEC6373F8B6E3A2 -2F547929D2083E6795A032AC0E892EA1E4DE0F5A97785B067CBF04C86BFB4B1A -911BD9E498A3C3E11BCF09EA0CB1AEB8B966C7504AC1FA2765D172E0A026F215 -4BB374CF5AF876BB152546EA55BAD5E3ED4504AB544200A703EAC71DCEA9F09F -B64AD56380576FE8F72C4147AF39BC522C9B13E8DBC11EEE1B216FA638604D49 -5A5417B6B9BB23A006983E01BF51884024AB44C8A0426FE01A1428E70478DD8F -EEA0EF6474E3F999F3F0BDA5B3C2368A618238706D1B4732E6E24368AEA068E9 -1345142CBD56044541347286877D92CDB2E42426F59D405791E7A17019260769 -0A0BF66417658C49261985D15092EA239DCDBFAB358B37FA22D6C91E34EFAFEF -824D6FECF0BDAA2C2FFB1ED169266318AFCA0509EDDC9F9F41C5ECB18A2C2BFC -824F82D4FECA753CD4A07A11BBF92A19525031F8A01AE2D2DA04611C4DB764B9 -39DF94E9FD03F0074840DD609F1058BC2FD065828FB587D38C8447EFF2FD999A -341E1F3201504B3123E7B19DA117BE5648B03E7964F6652148EBBCBDB3B5F167 -0187A61C00EDBA395538CD1C92D2C0AA9AD68A2BC0881E8F2A025E763B0C0EE2 -3E3E8A9E02DB95BCF2326CF8C9AEB14BDE8288D8992EF921A947970657F605C9 -E0B90DB7C5D16EC535F5830FAE43BE9488203705041635645A2A958A04FBE6AA -47CA6AE7952B5C944734178C9B86015C9D440C6D1A2D45834CDAAC19120EA2C9 -13C2790137B35075012779BE0249EEE679FFB95FBD04030845803CB299080F51 -BFA09748A6708C48964052C7D8502433AB1777EC4328140F7784DE3614C5024B -5351C63AE6DC3C064E126335F968067DE981706B3E907EFA1A73537F0B268E33 -521AF616B2B6EDCFA9B0FAB31B7AE7DC3A870D1968D0D4D1466AA7C923A923C4 -F86B6F4692B6B637322297221C69EEA47E9D7B46E726EE2FB8BD9866153BB505 -C1ADFB6545B6EC4E3ECE12EAD2B0CF05A0EC1CA8188991E90E3BD7151C234F11 -0EE146C0B9383B1FEA8C66D140EF9B4CECDD3B92C3E2633A0F6218D42A60CBB1 -01375E99A55510B06E4C307A91986A70AC40F11BAADABFEFF1E2D11AC9F791C4 -4AAB4546C037AC8200216F73E2626060D3817596C588D86D2E1105C0CF2845FD -8F1E084E431E651B5C90DC97FA78DF49F90AE9F923D889047FC7EFD70399FB5A -3FC6A2F5AC4C6BA217CAC25F0E01C65ED9A88A58429E396C9C0AF8D001EB1E1F -5E7E1CF6C5DCE293F84E96C6D004CB0D19827D5AEADBEB37E818B664381EE6D5 -270A60FFFD4857A695C480F6F2EA24E37A69B4A47B9D62A9E2831999C590E50D -7716AB8BA00DA97889DADDFE6D8AA93668C03CACFB051C8BB9226713D1E9BC75 -86CE9BB8059900D038CD0B31BD8230DEBF34FE8B6C9DEFC531B21D90FE4B6DCA -257C9410BA9CB32711BD79A11EC587921FE57B095DFD07F051F2892A1B6AA72C -34596217E819502427387BAA7E7C324C8C36E0E1EA3F3A3D16BD71486206FD5F -E881F999449812050164148E0776E1E84A1901C49BB4AB89845DC1082EB048C4 -1E8300F8474A3F5BF28C96AADA6A3AE3EDFBCFF9FF44254B41C9AAB0AF34E0B9 -6551C23F6371C135A2F6EC9239D949BFB5C27F3A46C5BF6E214CD9A24FCCE358 -E3DF152004AE936538E4E54B88F1A8D02646DF74CD50E205C68B3587CE090EEA -CB287AE009B551DF09FB77FCFB36973A68383E92575BF05387DEBA273ABD7579 -C772FA8F32B221EFA1A246EEFAE8B9354FE5C5B0583D37FB53B839BE68E80D91 -DA146A6DC4C8BB34D140EBDC678AC25B79B6BBFD37C9D73E57DB38ABF84C9A1B -BFD558468EBC5B96912E91FA3F4205F5ABFD7246D749900436B7C4D9D4C6F78B -7695E53781E9D7976937D21DA26F4A4C4EE02565AD55CC77798F86DC49D6136F -88182A88FD5CF4FC3D0B4ABD7C268C1B90BB850DC034C5B32B3605A07E9371A2 -B750C4F8B3B862221BB0F4AF1DB6AE3E77652F33FE9D95439F536B4EA4D4D226 -2A8E09AE1C980DB20855283DCA5410A62514842388A4127E93D304C350EBB09A -DC693B1D90AE851957DA25E06C795CE6C3090F5AA6AF587CB39405FA90316AAC -F980CE1041C8DCB55786D2A47C499B5CE0947546A588BBCF1149206967B15CDC -355EF3E9B9BF4ABE679EEE80187FBC57B317C194C9DF20BF344859567B8AA537 -B92E5196AD7B7F2C427EABED44C59FCAAEEAE18C3B518A39A1CAD14FEBDC311C -02EF80CCBBB3B023B5708920C91B2A835775D0E7AB0A0DF2E249F2AC0D2435EE -3BAA4A853E37F80C7EFFA56C6DA23BA618C5B259618460923EA12527D779BC05 -D3C20C410AD476F416D04489A2F4C82A4E583B3C5980A33BE766BC84CEEBC1E3 -FF77CBED10B8534A7540522E1D1D92A973700053D51DA6F89B10EB0EFADC289D -EC8B53E81B095B5599E77EB443CBAD4074FDCF7085D7645980894419447EF8E1 -945A692E3721B90B580518ABE6BEACE7BE71B920A6FB704E25321624A8D1A37C -9B01D6BFF2689A65B237ABAB3114112B7BEA16B66AFBC9E9D89F36CD4E638F18 -8926101C2B86A60EE12F6F432AAD3F5CCF22981DA0072DBDB1AB687F6E7ABED9 -84308AAA4662C8B9BC4A630E5FA5389EE050A9E4DF53B35D86C50150FAA3C0BA -465E05FD1CA77AA3E78B19A5DDD60E4CE308C0DD115CA303D7D105D33F9F252B -1D6C5764BDED6609EEF2400557658BD92C650DF037B7733FF5F5639E1B2973E3 -F673AA2E0319B4F0399D9784A25C08EED747CE2FC5AC3A8DCE5397BB03943E50 -866C1BB1FB0AFB847EE73DC3CC6B93BC7342DAC3D88727CFC0284A8FC2AD8B99 -DC7D6397043E8C5340B31E0568861EFADFC08212AF630E015E24C21AAF77F259 -089CF6C8D1E2D0136BA22707D9959981981CDEDEAC3375C1C9CFF0BF91785B8D -44EBCF873DDE5F6A4C590156BDC278B6910087262BC808A4409323E465FC7BE7 -847A33796D20B116B205C2B2888E02957520B5034EA2C4644F2E99CAB4330924 -71D1A7A65290E8D13D37C7A778116F16FD8A2B93F78601EE0E28CEE0B83FAFAD -B52146A221B9F011D167AE9644BE125FFF4F8A2228E21CF447DE42FEC6810352 -6C7DFF028D84DE6BB86C1B62A062A969B5BB1333D3E3BD95DE87E756D7098390 -2AE560996D9557A0C1D19F901A324656E3AFBFA1AB348FC923264E744954CF08 -B799CE46F1487B3188306BAAFB8D16B07B8B4AC37E11A6A5ACA1D5C7CB5FC3C6 -212AA74DF2EFD557BB3664366AF289F88FDBBADA3A6CD43756AB8DF2E30E7704 -DE96DCE521E0F9F23F2C5C299DC1345DBF1E9EB0A50231B02C53230131B67649 -B8422865DC9CE8CD2345FACFD59F8A0A13B4B4752DDA9258232C3BB537F44FFB -A39DE8755B381C88D94A07B561879B3AC97FD8AB89953516769C44CCB5EA2CC3 -68156538A8F8D46EE1DF6E42B31D283868E5716AE0A9DBC518A2D19826032C05 -34A8563294BF6B4A5657CA7440BFCEA23BA55F4DCE15A036B0B30A4CC283CEF9 -056E9F7DDFCFF1BFF0CEE33DDD1BE8640443D2E9A9193A55D17766E6803E6C00 -57646B20920BDA09F080FD41D11B73CA536CE6835BCEE1D7ADE4DD4FCC849CEB -3A4F4C808B2A1EDA914D469BA709AE3663CE715776A3C6893023FD59120FECAC -2BB5E1A0278B4804B8A5A08ADE396027120D4855DF5408B7CFF13FC94981D448 -4EA46332569AA8A6121DFA55FB6310E86C95AE03AF0656317CEE6D8ABE6DED51 -140070B89F8FDA351D7520AEF9331649BC4FD2B96433951290573014594AFF53 -E1D59C2257C38DB5F89C2D84D47F9463F6B79D4FB06F4D994D475EAC02B40590 -A2A6EEE9CE8FF2A05ACC51694AA14E9DE73E688099E5E4297322399284EB456A -0CC3EB28F470193CA13DCB82B8A72BF0DA06843DC95C17AB25512CF75E410B53 -01D4470B5910503400E1FB0088068CC4A753DFD5F725B0883E667185DC04DFA0 -22721F7C43F301155719E4AC651C0E9DC3106AB600C9F34408E6286E265B837F -E977906953BA864E3CEB19BE1E7472CD6C0FEBC2F552A1EC207C1DA42B88E271 -3C76D77C01705EF06D90918E9F02A8619AA10100D32636F4DB188EFE516A3CED -5BA74EC79C63824BC1BC0A8E7914AFD6BD14DE2F5A6FB7F3D0AB1B991D568760 -B056BD18C1967E6042D161C8F4A9E536B8EC49F1AA354437662332203A574906 -2698C5954EA3842D8CA8EA5018C64B49C0CEE3CE8157D1A54037831431073FBB -23BDB5A15B6936D772C5B9E21963BD6FE868BF7174DA2E24FAD983B3C106864D -E7E6540574F1FD6CD5C8442635637676D99986DC0A810709C3D3BF40458DDBFA -456DB2EB44FA75C83AA70566C9F4A95DC1DFD8F820F1161ADBE4FE65CE040E65 -864D5D56F4D93D796493042A5EBDA7BCD6283DAC18DA5A87342C165D69118843 -0E8470A2D7137E4899DF3DAFA8A27D2273BB401A7A5C24A6243D1CE9930B0D3B -4119F0588F822318FA154E5C882B677D8DA3359E0EF21BDAAC9262504C6D4714 -5426139CA31164F05FEDFE85368A8E087D65343C75EC07CEC25DE4F0F95A127C -29C930F7ADFE463D8B64DE535E77F36C4A84DC6C0B158C3B0E1CFA30BAF3D834 -525DD3D8F39D755B95FC306923A9771CC3161B72888FCAE7F62137B030F6DECD -1AE4FDF62A5C586204352359C639C9DF7D1A57482707EB0FDC5C687878329AD9 -1EDBB83D3E373D5812AC6B98DEB87EA382F10CE7E282360236EB97A006967B1F -1BA105A48DD051FEA8E9E9DFC221549E71216EF16A28469BB9A296E6061277E0 -DDA7500023F51C416ADC9AFDC0A45A94D568556E9E25AE3383BB89F311F316F3 -EF7272EF3BE368B0ABF145AE097FFA7BCBCCA46CCF460916FD0F7B4840D36CAB -B47BF1CC0D4E406ECA0C3E349C4D7443855BC48D56F5C7B53F69AC2602F02AA3 -A430E9215121108C6287012D3079969000DE04D0085B7BDC7B3EE1F16D659195 -7E695E20D5AC8F2D32CDD9D88E21B23B5E2E0A776E35F8EB759DD20B01D3DDDE -77B7273192442C270ECE3422DEA9E52EE99542D636AFB83AA225B35DDB5E6384 -8DC6B5FBF7EE518377B4B2A8E01468E568B20DC79F2AE5A178E37FE67719CBF2 -C0C1F12B06F646E97998A5D6A36447BE87C94533E04071DC4C818A46C98482D5 -5F557B92F3B5A592B675F0395CDC05349F49E0B2878A0AD4F2C1473AD30DF752 -1ACA29B9520EC066319191D8B14DAE7685B5DB3C85C10685EA0C5158E049EBDA -B204C1F73E78699268C9C336B8C0D54AB4B6D20E34F5F3CD6AEBB3CCA179689F -8DFC5B4973346B98689E6AB25D251EB83CA6DD6DBF8EEA0AE66D7957B15CC773 -4F9C26A5BD0BCF65D7303AD381963B584E7CDDC6DA9B572BE655B7601BF1482D -CAC527069E33038F77639810D403BAE1ACD1F9CEA544F8CE81F5D78582A24F54 -B1AF188BBE247053D3F09EAB56A65214432AD104E1E588A49DA1D26E5A31E7EF -68625B55F1B366292993E186142FF99862DE9AE40032AB70A053B003D3C19953 -0BEF3A5F6C16F8FDEEF0F2303F004EFE8E3DD7148D0B9D2C393D4226CD841E69 -4E131E7DCB3FE6D2979ED1DAB5BD7A91F97AC79FC4FB82C125B69AA9BABCA9BF -A04AAF364A4AD81E33626B682BEE85A84D882B9C0713FF7CFDACC4BFFB6B3BB0 -E9FC25F52747B88D33935FBAE5712461093EE2BD224FD7A85BC9704F960EF2A1 -60BAE279B5EA1076BEAC60905D07B921A8F001B9D287603B04EB7B02DBFC1E7D -132FA456CD85FE50509DB3549013A8F88949FDA83275150A58C9A6E480D5A8C0 -DC7C88445966C9DE70CE6A910628883102C1A56B386039EEF0549B7A78120649 -5421D166460E4B21BE9415E0AE0BD368BD0B9A90DF4EB85845F26F7A32E2C37F -570F67173339084B317A22FC9157DE2B384AD6363AE9420166D72E7313B10885 -75BA9EB86C588374434557D10D456E6FCE7F024721C4C2F8E4EF9CAAC22F06E5 -013AA1026802276A8F4E1724740943AECD35F6DE0B9B229541A3B56B08F30998 -D4C5AABC03B40DC85B1F5BA7C6F699B3E4891FF8FFF91B77EFE1241A21EDEB42 -408D18E39A3C39604BFD2C5124A79AE7546B176F22BFEC91542D2F83AD5981CB -B02B8C521B5E93236CF74B33F1262E1A504AD22EC8F0D2942121AA8C627DE60F -B8E290A73C446BA83A97BE7ECCAC79CC97F574DE7D15C7424F6D873B367F3C59 -754854D2F0B183A13F28C3EBEC1EF32EFF18930BC635783D011A26D4B3F1764B -05C97B9B681EEAC6B8F3922C700279E12E630497431706790100EA191C81B146 -0B412CFBADE7A563CF37E48DB5C7758CEDEEB96E25B9C7B28E8507361ECB3D08 -FB007AC448D980295DB91A8817557E4CB0E6B614C079FB93062C95470D0A32F6 -D281F0F9C45F0FDAC9539B375C2B9C9B0B5BF6CCB2D9AB8E80E4549C0F8E5A68 -2A0A246C81C9F147F9F21D98F75EDC6A3A293DBA61A8255B3E42999E281FA099 -12062B882543AA988E743EFE5311A7AEB8C51F5E3A13C935B4FD1A371F8FAED1 -7794722BFC34883350A3FB39BEE9C5FA8C6A59D8652BA6C34DD958A9352E7170 -711CDD510350D910B2BE3A9771C191818C3E81582A8F6DE8A01ED72462EBB883 -718E75731C2CEC9BAC03AF799A664D62DE91ABCBC8BDF2B39177D18B5DC26825 -F73562547130271B8C1AACCE769778738EE03B74276984BF67298021478D71E4 -590B9AA09E0C6D2B59468022F86CE4C6ADA15C3543F48F380FB260676B6E8488 -97E9884A3F3682D3E7086E8CD1484DF32C5D3DFCF0FF06B245F44A03BEDB568D -86893E393FCDB7DF54D0DC1F5E628DC9B6FDAC156FF3A8C7097D1F49666E4400 -FF3EF4CDB5BBDE55A39F0A67854518CABE1B1EBDAFAE5FC34D1D45FAEA59D992 -716B91F73AE51DFDB14E1032F68CF751AF805A41C99AB161EF7DB88DA4B01611 -4779DD94D5BE1D8F9554D21649F5E18A5664A5F4638F939FFDEC9D65BEEB097F -F31C13D001DDD0F94C33D2C7BAFF8681874CEF7C44D75A691F15E3D90EE7BF19 -3C9F447B2CE43B95C05D54B0755B676228F094045C56DFD70F70F0B1A04C1807 -3784289A1FDDE55B751AC021A410FB735AF90D1793F98D7EAE87D3330C63A85E -5DCBB8E087B11BE030023BB83AD994D6C54FDF104508235070E96271E643CA72 -25002205BDF49DE412FC2DCECF3D1364090484DDA5290CADE2BE843CE0C726FE -C54419F2DD1307E2742B115F4FA7FD8EA222CCB89B6808763D60EAADF8529B15 -C89061F75917B22B603EDB02AC709D6E705D2F3D84C31B09D08A4C188E1C8A92 -1062A38AC7F4CC83F55B974F1F394362B8D3E8777BE3D244C53856BF373727AC -618C224C5B7CF8D94C9674EAA106C3F30817AEBF0386D3F07D6A9296417867A5 -5B9B9CFEC845A461357685A95AD0630B2C0DC9EE8963128132B4874C861DBA02 -1E1D7BE9259713E343989E16859F5E4275DD3BFAE96F382B8F31247EEF86212F -0D577D0221B9B8965D0C2FC396FF5F38FF95B56D071E432931CD324FB790FBFC -C6CE521D85FF14E8815E9D4425909D6C312C7A2FE077E4B1FD5F8ADEFF72173E -9AEBA065002EEC149758F3016625256F37AD2055AAE3FDCEA074A8DD0311328F -5CBF4CA5D62CBF21C9A5883685B8F7265F10AF6F5D464CFD13C9B40A620FF21B -DA5F4801C8D5357C49D5B401F51DE0923D0D96ED6DBC57C6E77569FB69FA198A -2029DF8A5F3CFABCCE3A5FF87E5A4877D0F8887EF0F4F0FEB51091894A946A18 -84EFAC78A32C7EE6082A51BB01AEAF4FC9066367AE9B5A5B74EB4A4231F1FEAC -B7B76BEF33551AB4893958462B0CACEBBD48CEA3174BDB86322383CE32D8EF35 -BA9E1B7F4994220250359EE3C5AE78C1492833F71701D0C6B0B4B46B8641373F -5193B8FCCDE73F2F56333AD23422273ECB807AC49D9A79DBB88FA987F34B278D -39AE097E8D664414FEF8C2B0EA3F7BD43D38E964AD7709BE0923BA5DE504D56E -7F8256969F12A9149F1C9D7DB5FF20425C47D68C15F0F1F492F0FDB01C1EC138 -4F3DF82B0C1BC7A8FF3CEE5AEE3992586A2B53B425118546D9314170B3877D74 -BCDEB2790C9EB08C21FE6A3FB8D567F39429F2DD066754C18E026539EA88A94D -D643E27E8F8E071AB6EC8A30951504B93FC59CF0E801D3F920509AC2E6823635 -9ECB917546C50906C3A2F61D6BEB4E887C6C9272FAD0AED7ABDF73EE841FBE28 -FB5DE55F4ED965252883CC567C96DE4EDB781EC82E4AF9E04ACCC2160598C2BF -60140942123DAC1D457F947CAE5E0654D38117D261F4EC69ABA52543D215C011 -F72B148E55104DD3A872B9C01B47B02398C0848FB0FF5D4C9F557D51449CD16C -9D7AB623BC300CF38DEE6CDF4596F5B288C577814C19403220C343B11AC0770A -920B257185D738BB7CE4B535EA0EA8F9446D8D7A35F10ED1D98F1DB7771268F4 -4ABBC51CBB2CE7F48FEED3446467A9A04A826AB7688F8525671BB3A5DFED3954 -3BEA36C1301291EC0784D413A324237445E85FABE6565A058A89E19C25CC8359 -3623738C4292091CE48959C0ABC289CD0CA5316AF2756B31B5218091D094331D -CC294D876D57E3D5B36D96C0F444D9270B297149FC8C607DD5AACB8CFEB91704 -3930AE21ABF7C4E3C524BF33F4F4CE4EE4BC1566342BCB5B7C937902D6C4CAF7 -62539819195853646B73E749B06C59109B4EB288FDACC61CC962CD5AAFC24B15 -FEA2E8286298F767ADC5D1CE787B26E7C25B20765DD831363F228099E4125168 -7C3E64BCAB5A40D1D17150A8BC43E66D4D03712C370DA6128784F1E15BB3816C -F38C845066DAA046C038D54A3FCDF3939D0A39123854C93F1E635E0EF053B84B -012B3F64398194A21A5AA2A15CA473EF99F8C67DEBE79C747E5CDEEDB6AF41B9 -511ACAF55ABA8FD1495345148A34869A0F52D647C861D22E0F03EC217227E270 -8FBDA95B4F70519FFE4371F2187A70E9323E5671299F358C02D7CAC76B0C253D -269A43C27FC6F4132E8E8F2C0FCC103143E21A4EE3E5D3E6062FA1E0054E4E49 -3CAC42D8A9B3AF467F9AEB84E0C12AC9E0F529AC18C6EE1D02A29A0D86800884 -AEE0DAAC7890621BB42E531BC53BE80439093EE80A72CEBE746C4D0BEA66A685 -E56FD9378BB056BE0DD465A145A8148C3F5E54E5B9F11F4F9202EA28EF9396C8 -2958636AF404023AD5A9D4A19163A285CBA7D0FCFEE888268D4BF46C9DA49AE6 -DEEBFB4B4B2072CA7B0B8E62A85CE2ECF876610A161B76D43D67A73C67C70124 -6BCE8FFF02272DB067916FF0A5F157BD73BAEC3456CEA84AE21A4936B4983780 -4D7116570CFA46045B4E98E65931DCACE943C83B7BD30A60575C9D34F480A179 -CDAD619F8B084FDE54EBE09D95C0433109202CC0E32BB8AD1EC3CED55DF0E3D3 -4DB701AAFD59F6D4BC29F3A533E34E45E0613A6619BCC9300223380440FBB8B3 -3BD3FFD5C7F76407076E4A791528AFA58926DC581F5C3CB53ADA019813B1FF1C -01C14DF03B1F77458F1D33A59889DFEE4E1C99BA0CF4B04F7B11BA530B154E64 -F5E4C2BF964C12A5ADF102B4EA55D46AECC430C1162DACA9985BDD7910F446C2 -C41DBAC7C809E2058C2CEADEF4CC7BAD936B660A6E6AB17B5F52F2346171B63A -5D642852B7046CBCF7B2E9B8CCCDCBDAEAB267A48E3C8218CFC5129BA1404253 -1B01C19EDAE3092F99BF5864427CAEC6A3F7C00AFC4328D3732EC4CD4A051F2A -FC6E419DAC820B082C7CEDA6F19AB2CE97BDBC45708798DD2E38BC27D4CE044B -85323D6BD9141DE647AD8EFA76D21B899F28896E73AC9C2616F46DDA50B17387 -F5CC63F90FABD2716E5548BDC01BC6D798F7311169AC071B2326D156A66BC649 -7976BA04BF4743442CB5898BA927BDA218070A5D03E543EEFE4C93D1C9503655 -10591B89D07DE1A0A3B57F1651701C5479ECA1D8C9B7FDB02CD351AB975094F5 -D4544D0712690DEB7DDA59998E13B656B38F57816E8E4EF2CEE0D3506A1D8D3C -28AB4918BBC3079DC7436C20600EC9ECFE4A7424BB3299ED0E9E39B977023DFB -4E1FA6007CA8C1D86D7181E078DB2516CE3F18011E15E436940291808FF64806 -8AAEEA70E5FC56A02F87E38C7CF06FE80DF9930F63E633B67EF6093296CEAD28 -0B150EF111A6D20104AF1746CA1CD02BF2DE14546CECB44BF33E239FB7185A9C -738414D921AAF0CAD72B2425B19A0BE3063FAE017C404DB6CD8A2335B62CA1D8 -9A742A632035DB0132EB2463C9CFD4F806FFA93EC90AFFC4F6AD2852F52F0F6F -1FAE527B45679B55EF87934A396B331352920491B04F9FC364C0182E4C693885 -DD52CB9E6F7BBBF49066852F9850B1E071372B6B77D4912B8D0299C314E34638 -C079305798A0F654EE711F28A4917BE210CBD0614329FBA0B638E6CFDD0E10E8 -64EEE1C52F077F43ED14AE2E87FE3163C3DC62BBAFD7DCABABD75F0229858FE6 -29F198374EE6E28A4C729688D7D345D95DF513F85319F7ECC40F6477E8B73EC3 -5437C673F57AADBCC35B08A271288E1DA43287140AD1AFDBBD0F7C5A0A761178 -271F0E587F04C5A2F9D026E0B92F942FE7BB27A9605B6924545EE82090FEE9B7 -DBF60FD0870068A2082B5B22BEC698460E3D452A5F92F0CD727F75317A528635 -F883F3EA161BAD1CC81820A36978666899D28126C1BBCB4C08121E248CD1D0D5 -DDD043B58012277B03F1706E8313BBB4142A10F8F775871B340C83378431849B -E4E8F4A18BD703409EE58DD8618F94D70A57D1D13188A16BE8A5F6383C1EBED1 -6CCDF1B01EC33E4C57ECAAD2E292120F2CB157A3C6BF62EB41B9A8299728BE8A -E03A17183E7C2B3BAF9864C762A60C414F693450F952B48AD049527468A9A8F3 -731DB86A622A3C2E5BF3468B8A3115BBA8170FDA23A6A0F1C38DC1FE1004F7E8 -443EC7E4474E19259072E47AF8771288D76EDF91F8697595B8A8C08AA5C4BA35 -2E581250F1A3610EC9D5991EAFF6938C0EC16ECC43E4CFDBA8BA42A7BAC738A1 -B29563E2D7283D106F4AB176C617A6F1B1F9076E564F67819159F7D3AA4123D3 -B8A7E922AB52D0C63819D6A95ED6A3A63E82A6947098FEB9A2F1221F962DF9DB -5DE56A57214E4B84FA855475BAF474EC9A53501BD5542CECCFE81A4136A78ED7 -12B834881BFAFAE2A890E598EE2E11D1CBD44B6B66DD384DB7F21F30842673F4 -50619BA185CA3925AE1D922430FA6B3EFA985E50A3371A6B8C2D7B907C63FB81 -6FE0CA8233E4620050EA197E05A42930856FE8FC0257C1FF4B6706E4F9BC770B -987BFF7CEA0EADAEA356B750134819B4BD68FA0C36A65681686E5437E8F09282 -E89F8990B705E5A0C215CCED16CA5E663C46D5164AB439F73EE640D6DA70C155 -3F69C1BE1FFA5B6FD443F9336DE031A4C9607C706B7571FFFEEC8D8FCE91FD5A -C999821E81425432805A253C573F614895CE3570A39753B36A357F21759F1498 -A1236B1D1790B12D471D917699C19A963B866FFFFA37EFD74E0B811AB6832346 -ADCF181D963C812F18E141681EBD36482E7D29853D91683B9ACCC3B8055EFC55 -E4DB09030C38C5520E4562932C9E9AC675CEAAF41D8868F7A4E1D38193669EC8 -62E2B2AA3E597455D3FB186205210BCCD1E9B3A3564AF82997E238669AD833A0 -D53B951CB550EC7FF5FDE4A5E7C7499A889EDD8C453D99349FC4F65130849E4E -7D76D3C9A153B8522FCBF0E8C80F6C9BEB419E501A891D9E03A807E5D8C9EC9D -AAAD2A86F0D360DEA694784376800E32EF4DB045B32B78988CF798EA7CBD3351 -CB60C6C775B0E7B4D8C1CBDABF6841618296A94876573E9693A39DF47564C29D -27C0CCEAC55E0339F134B45B1403D2DD491C81BD3F1127164D6DC4DA058EB7C2 -50F8C910A005CFC6990D6C2911656677D26E557AEB420B8FD91DF224F01458C1 -0E8CD85189635A3E237F605F5C8A751AFB0E8FF920B1094166C152C9AD7F4D5E -D3074664ADDC3E807FDDDAC2393FCF48CC76AD84ABFEF4DA6465008499EF0F52 -37B408058365334FFDC0AB15C8988D58E62E7CF50A199481832968BE04CE1301 -75BD2CF84588645A9123982C8E20189D264E1FEBEB22605B20082B37502C7F2A -BFC371277B10FF89AD4A78405E76D1220E38F9F2FA8CBD9115C11B30BB9CA9C7 -4A996AFD108D2A3B860AA8C3E9FF6676597AD9B1F6F9AD92CDAEABBC510E7995 -6BC046674A9EEF946A294F4A1D4F0BF8CF73ECE930DEA3DF887EEEC94B5526B7 -12CF09476D5EE9D7E9F570D29D6D4CE9507F26E7EE794EB9AFEFE7E89EE1E32F -C48959A2FCCD7AC5C5C15C81198235E3C0A216CEEF1E6EC1267B74DC19498B25 -12C869A068D9E94598923D7E63E336BFF1C40025548AC0EA3DD2BCCE0B483631 -6ED3545427FF3E9E9460789BE0D6A9E39ED20F8BEC133EF4E5F4F577FE93FE35 -0BDEF6C35B34D3A3FD2815798BC64B9508A8B86DA0F0424352E872B943B6A8B7 -C0631B9083F57EE7D0D2BA76FD3AF87CD0C0F106180EB8E1C50840EBD968ABD1 -4728D49F9A4531B890E97F8BCA0589248B8E7F60F7B2CC612EF540244E0DBBEA -828F57E5E5BBFFE0E2AA7E46FA16A45484BA795D4862AADB29874C4EA6CA5EF6 -A61306112EB3023047F31E1C16DED2D5600A1A30F7370BC707672CA411F3347D -734D41CC60AB436577659B9C256C56019FBE476CBA18DEFE9DBED04334E9A6CF -AFE56EEC626AD03ED98E488E02ADB02BB677163255DF5D029636C4D077583725 -B60C7DC3F886913B8BC6738C662BE0A74AE9F94286114AEC6A82E824C468570E -C3D2514801ABA14EF94B9470FC684774543F95701FF7C6EEC3233DA5DEBBF56D -9349174E5D0BF48986D549FBD758B3D123E8D694FDFB95BD9B94417BD070CB8F -71992B2BE2AE0C9A36822E4E8D85DD3B337B0A9E13DE07679346C55145F38012 -AB566C38CAD0C63D0491EFAA2CE1CD8FD4938331CAD9C7E87149B8E90E6EC1F3 -55D5DBAF807BF2482A99B02BDC8BF10EFE5309D54FA108D379393BFF8AE59C70 -0409DB0D558A48892A20FC6418F2F9F56CA50878146F222A656B0E9B1C346577 -5E2B5F79094386CF535C145B5459158D74845BECB76E02D53EF9FEE8B23BD8BA -59969C7FAF44CB5E5D217DA9E19634DF2E2A653A50F7D4C564AA875454612BD8 -B01356EF6F620D202612E424A1B0FE9B0B740C344E96F6F9EC0199BF3B3FB4F3 -9330124AA725E21021B82B845B25707A56D25FBCC138EBF0FE757DD1DCA7D3F2 -5285256F32C2BF27FD47D283E44D8BFE63CE9E9E9DE2288E9A1BBFFFCE006201 -187335A534958F32C1999C8D75FFDDA244B5A530390897449A4AC5DC6D64F5F4 -9D32AB0A9376F819356705A799EE20D2196993BAB8A58AAEBD0CFB2D9477B162 -0BE6BC4A665B5AE6E1765CF427F0CEE173BD948D2BCEC5E63BA15DD808AC37E8 -27AFE857EE793FC34C1989560E809FD94A462B0E4A5EB5C655BF6D45BB65EA04 -67ABF18D255B6407510F1D65DE2F93F2349B218DAFABD923C937F1BC70B9DF64 -FDA4CED24854859D721D78E8A21BD565F05E8179E3BEAC804931EE7499BE55D6 -0EEE411DFB1705C1D0D7AA13FDD13235C649506E111045CABC12BD36A7409923 -CB2A2CE48FF0DB470A746348F2F8B5AD886298062D76ABC0365195E6926D123B -414699E9BA9783B6792C284146448D785FC8ABAEF70C59740ABDF18DB7B08203 -8C9684A23C234ED1C7C6315B7F9F517A2241534B1DDFC8B7EBAC878C3FE542A7 -013DA7DE6E70927D5B47F53F90BC5A580E3AC286D1062FD4653F070A070FD397 -7F88828313821C2B1FC062E544E42F0585115A6B19F32C2EADE89E31D279E54F -8544054CA49F7368C94A1939266C344B012EC9800955A89E832F9E59E50DAE60 -AC0364A43C400B8F62815FF6CA864E59327B89A8BFB5435B0F0F5BE4F9F544AE -332C19DC75CC3461F388472A5764ED36FE91F8710FAB141022883091894D45ED -294BEBB897D36694334F3E968FFC4EA6B073493C32827351FC6F323D0FF9380D -804B12F01BE6B926690A68F1F9ED129C390BC240DA061C341F0D09D9210409C4 -3C5E9696A5BDDFD5393AC9D7AB9F82E919F808317679DB70D674F46877F83C95 -52DC2EADDDA7DF9AD79B9BCB28C2BE897C9E9378657B39046A929D23E7ED0AE3 -7925F1B184573115299AE2E11D43FDA75E4A1DFE14F80F05EC57303DA964AA35 -9462759CA36DDFF3B43F3CEDDE73BCE859484AF34F6B1EF90FCBF49D34722571 -A2CC337ADD4F4EDBA0C20B673D68A3150E378BA0DFA81F6ECB97CD9BFBCC13BA -F89762B850DD34A51092D9E4D39D6EAF8E5B401F34F07D2CFEAB932A066F220E -869F2D19EE55663BBA117EE3E13463FFCAB2EE730F840DDDC82C5AC69C64B203 -675F11DBC40186A2E5CD1B346DA37E8D3B3C518D9480201A9C598DEBE0035A14 -355C3D66F06C4A7ED75A72DEC787ABD39FB77D3CC27FA505F8A4865117FEFEB9 -98D774B3268803E7D586FB8F5276B405680841C7EDBD1AB4D055FBA696139B75 -D1839E542902660144559D613D162E217283E112CD4B11C13A3AD04C161B154E -AD5E2EA101FC279B83B8F313F18FEE59B20876FB99AA1587AD45CF9E294CC653 -C0128353B6644F5D01339143F692EE2DA2C640EE0423E0E0C524407387262CA5 -728D9BF533A5DA8B4B24579476FE77B263A611DCCC6C893CDB7FA087820DE632 -A7E72EE945AE53FFB7FABF66C8D7A9E4FE5FC76FAA7B8474C6DFA527032EBD00 -11742B09CF9364FA679CFC5B7751BBEEE7CE5983C32AB245884170697841CA95 -9B781839232EFFC2C7CE51FAE5C3117B6C5A6EBFEB8CD5C17AE1F50F322325ED -2C42751E03BF9C602FFE7651F8EAC796F22AEB025024EA9D3C6839C5D78446E9 -8286E802ED412857CA42FB01A78B15B908F7CE8BE1C419254998C35C790368BD -8B8CC75818C190AA8B52B75F2532630CE54DF5D40C04EA7C764BA3F54657FC55 -390A118C2B74B34CDA77D2B4808F068FF11A3C3DCEBE799FA2CA3D9B7AA54E48 -2306EDDD3809DEE1CB37EBAC8AD6419A27738071492B3E89E32052CD2A3516A1 -E742FAD7E97F019C0A3E6066F6E065ED5152C0C078D314C3BE3F8DE49AEE7D71 -3A53A6D2F528499F10B2D0FEF019FD05C4F57F07C1241AE208DCCA9B74604871 -4C6C13C4CAB543F890259BE362AACDE5B69BDF373E7CFC60FB3DEBD243F2626C -793933011C0125630471B7AAF3839AED975EA581558B53BB330021054A7784EF -0EB98D56C807A4327FDB846E51725AF217563D6BFE0726A3FFDFA377A3635891 -F3A8FB69F1522676D6E01984ABB5C655964B00A05A499EAFED034513085755C3 -F54402B658E24D4A57913C4C4D1CA2335FE0A4F658BA773962F393FF5FEF8BF6 -8D6166014FBEDE0287BFCDD725639BFEDAECD06E57488F5BF30BCC2B3AE9E878 -F2AD3575FD043C6397A82F27D6E5A98B9BBAF8C78279D1A78809FBE9D56FE7D8 -306090DC00DA55AB9624FC4E4A279849AB4D5B7E7E125ED292B125C34FCE6C5B -66ADC813BEBDDC1E91CBA09751DD13ED696B5629234AAA990C467DE668CF1D29 -556A24B3D5EAD78CC38A3282E46C884C802C0C0B010840CA8D454034D3E479FA -F9B9394A89924F66E106AEBE1156337BA80303F111AACD622F9B0C79E463F1B6 -E7ADFCE41A9E7C962A96016418824569861A8B2A426AA86A3BA4AEB5CA11916D -2F6AE0C03BFB90E5B6081BCB7348C8B74A20EF87D04A91B5EAED48B7917240F4 -EF91A3A1F77DBDB81D8D95080E4EC1DC67AE3788ADA00E8CF885A13DA34F525F -9552BFA79FC0967C2AB66E42F9245CB380EB196C927E3279DE96FB8606FA9F13 -1DAC5442B25B461C586203D9ABE024569996131F178B1302624A4E78EF2F82BE -E9A0B83549FE5275E85C176B7D3F44AA19A0025032BBAE7B2BD928270028C866 -3358A8B2058383FF2FF7A41B4D90F4425F40557BBC907D8C8F835412EF0DC6BC -CE6FE967D55770C0EAC8EB190D7B8D355EAD9408050795BAEB5149114CF377E2 -9A6E11C422F51705EB921F95B548C79775525D0C4D6CB5F9101B99F4C712ED50 -ECB12BC53FE3C703B505A12C8824804ECC3F66F8BCFE740E36CACC94C7E76B50 -A8C037E81731F40AA1DEFAFE6673BAD83EED23B4D1829A6343C1FA7118CA9C31 -C08EECF55F2E5682A445561D7EF396239C25C013AB9B0E3CAC0CCA451846E611 -8D17C7ECFFAF85013BA136C056381F4CBFF31FA4A30A19FFA8BC4F29A8C4FEDB -670E4B65C5FC2AFD7B12DB24B6B26E9A2328AE47204D35E8D981B2D90C47F768 -53AF1FE5A271FB05C3258A280676594255E53410299DF24F4574BF72FFDE081B -A1D2DDB7E42C91C7CF3E7AF0A28630BA772057A39265A74CF07790257403623B -755C99198D679FFC403886A1216EF0DB21BC39BA11BA1910C4599641007227FB -07B7BED0F7B334C4409CA8E46414996E89C99A848AAAF1BD80510470BCB2E5F1 -8D2A32099AEB23EACCDB07ED46641500E3577C561F5834F90C353B03A1556DC1 -355AADAF4F16C5BABC1126699459018ABDEE8117A30F1FF0327DDE29E8F679E3 -F44188845CC71A694285A0061030DE452D5EB85B0286D1CB19077EA18FEAA2E2 -493910C0194C37E859CAC47FFCA73FEF03C42FAD09EEEC4E57647B8A1725406E -1686835E81E7F2D621D6B2FF972904B7BC529DB1912C6B788869E3C3578A0B6B -7A15160577F1545F50294D006AE862A89CEB65DB36E68013A3B71D99CD45EF05 -942296CCC7338ADFBE0C14E6E800DAE58873FEB18428B59298C6B6331AD79F1D -6E4B8F925E5497E4760EBC2AA946DEF442FE076F75D96497FEC6E539D7EC13E6 -368AFCCCDC03A73C1AD82B3BF06D294EEC6908FD9C1E2F8935ABE200B3D4EB33 -A76EF754D2359192B75970B235FC6F59CF2E1B99F35FDEC3309C0978F597EED4 -75655F2533DDF000A53E02630DB8CCF0CA83D305F1CA78428B09E181CFAB40DB -AB63E6796CBCDD7CDBCDFF14A6934BC5C02073F0A317DC0A6FB9C607B9B49FE9 -E102DCD3AEFB7ED4805E028AAB641D0E0EC6AE09D7FFF3A4F594098D03139D61 -AC6DBCCED93EA94E3142299CE717CA0D77597801CF5D01ADF5304D52750C4EE8 -66804AFE77229D54649931E1765BB9AAD54DE84E5E8A49A1CCC80E94D009EC63 -F5CB056A88A3E2D0E0C78CF31754EFA654746F33236478BF53B8A56FE0B51A19 -9D1E51E21B92C158069A59F8AE0F11ABAAF2AC3394DE03389F538958CD709639 -26086A53C600E8D4B2A1E9F65A9982D3FD0AEDEA1272126EB2FF08E06C5A14B8 -263561B5192332798EE1FAC70F4FA20E9257A186277D80E2325A8CC9C650F374 -9EE7200AA82D05D7CA5D4C6D7ED6D38462AF2EA35C1F6679B1767EBBA6F62769 -383C4C5D7A3C0924BF850BD0EC1FA16606A973BD45A0F2AF86018A4B57AB4334 -82FFCF17BFD39CA87D25E36D028E7E35B6FC3DD850184BED63C2E3843A6FB26C -65EC1A1F562591747AC1656BE602CAAF7D24E678A5834D33B4F25EE8EA40D88A -C87860F8F6CF38B3AC16E525C7CB7B19183FA62C6941CC8FC771A5C87BD45F2A -BEC03A4FC754608A6CB3AD74F88327B260914E0B325C246057B013E0E8018FD9 -55FC00A741CFFF655AF36098211D7756F1BA8776EB391E73B8AE402814F8824F -571C0255B878A0CEA097CC8732FBDF57F56A3C36A4C792D16875E88A03207B22 -49F60658A2519300C1887A8C3A64BA08603860DF48302E54261ADD2F23FDFFDC -DC8D44DD1D24B7D0C693263AC1CB7793192C5BB7619C3FA526E3D44832676038 -B2AA7E7F80B1F190E83534DDABC07D4A8C312C25080FEE4AA75F17616616E53D -500D0A9EE43DA70ACCB163A463BCF0255826DEF676C383C5137DA065FC1FDBE5 -AAEC7415E6C5309AD238C4B77A809BA02385B03378AD562D1C3227CD0D376CA1 -57818FA2A81DFA677865A17880B66BE988043AFC0B431B238508266BC074B742 -5C2118FEBC282096246631E897ADB907DFECD2C7569293A5EF0DEDA5B8B287E5 -53017E1CB1FF124EB57676EE5CE07467B8CCED2B63B70E303EE474596F3D8450 -C39893423406A654217C1439A7C4000946378A3504AD3F2C820DC818B48CB651 -6921E0A29A0BA2C332690BA7626451E234E4DDBD744DD801E335D9DB4EED3F87 -7C4347F874D7F15882960CEAC7039E1064E7C9A264A1C6D966260754736FFC04 -B3462E87FCB084E2FD1F53FED1E493C298926B26855280C154A17164C32F6079 -046A2CAC71FFF007E7B84DBD42DA2F4E15209CF8194383B5F0B47F47A6E95EDA -A161F214BB90B548F2C1458F1034AE071633A9105C09DD9EA1DB23CC13611B3C -D3B67EF45E4057C865C0A271F974D9615F0AEDE45A4AF7B1623F725A7A60EBF5 -82D0B59987C89D848F6195788ECDA22F9E39400615C8D287E75300A295431ADB -83D0F4ED026C188E6B57C9A90E5655DA0F56A65385A46DE73E7E1F7482BFDD88 -4F4570C318026366791AAED812B4BE31F3D130C46E45A699C843E09C24945C8F -806F3DBF476D3DC8D7261570C54EB79905AC4F4524C9B3100BC5470160BB0587 -BB04E4C7090B090B769E654DE50D771EE270825F28CA00D86B6814DE04D02304 -9742A33ACAD2D718843F882D06755E0FC71B5B92A1AAE92E1167F867E895BCCF -A5BA73AA8CFB9BE0BD2E4A16523198B21B664B1D41E4BC0E18BD709923EEAC97 -501C90138C493F8E1E229481B00A2A1E4940A8002A2401DBDA64C86B61C760EF -DEA4C7A8EF665E03D0FB63939DB9B6D8FC78B20D882FBEC7A9EEFA6A91E0322E -387252FF8770C9A2F5E2A3818EF6CCCCDCC5F5F21B855F489898A13080983705 -977416594B8B0428FEF03A554CF07FB3B59E5F3E027AD38799533C5960C826E9 -95C6F25B15B802D96D975D8621AD10E0DE65C3B8F09CCFD12CEC98F71EAD2E69 -2AB13A9F2183C9B035704EDCC8930860B48DBB68B8E3111E26A8FF216E80D082 -F6CF064967B1233D711C076D2F3680D9586A87694ED8FCD0BEE0A8C338A11728 -D658C224D94045D9528BD888275E17B50F9A72005130EE5149B8FE243B2F428E -81F8F5602D3E3EB89395E590A1253A9C28D4140DB9769A5F986325A29BCFBACC -9ADFBAC34FFA3DDB5859B9DE3311790882EE64EDD02B79E15406D945E6B454CC -9E658F0ACFF0D13B58C75E395E0BEBFF5317C0610DDF07D18900919DF6F7AF17 -7FBC6BDD3488C1E140DA40049190E4F718AAEB9B1990F1F8FEB61FF5EDDF3055 -4A747292CBDE3C33372450568D371D342F8371E7F9DA016B5039810D053F7871 -A211EAC5AE13E808F44711906806FF0284FA51F97934B41B4E320DB211E33E32 -64321927CBB5E97A82274EBDA4D88FB255791A70A0A2E651F141D3CD1DAE553C -94AEC8B6B2F4E337A7074B7E40BAFD0EB0202C9F77EAA4183208D539A15B94E8 -127C767800748416332A9FDFE6DEC86EE0273FEC43152C064B7C6C24A0389ACE -95DC88E06E1ED02B277A4CB3500B6822E969E36F0F0709ECB4A53949965FE907 -6B9E95142869B12750FE639B9B5AEC8C28F70722049617EF0BAA248D559AD505 -29C89B1B14E68E3E47427A636090A417A74B2FD20C209ECCC88C1F93E75568BF -D1D32921C4BF2B1B999C86E331DDF26BE549161C272235EF9A62E2F04BDEE6DA -123C84DAA783A4A9A179C344DE77CEBDE3291006D04DAFBAACE06FC66FED9259 -AC036F7554276923F8CA84952B8524F73786497344A8210D72777A3F0F402461 -DAA6FF1C3918B8690C409A718C3DDC9326D14D27FA35C25CC13FE4955AE7F19E -FA40A395917DC43A1BA33B7A21DB8971D5258BB07B14E587C3B8C0BF6D186719 -BA375629266754D560240F4C642A20DD6540283828B260F7BB04057D9773887F -30E3D0DC8F26CAE5BC74CF2599C55C7D53A866C9E56450A0C9E8F295C3956F04 -62944690147B5098D87C3315972ED1972EB3681E2141CA1AE9D54F1E37EC8EAF -3B7B27D54223C95CBCF3F200694343771860B4C59B2F74BD3EF3C20A3361824B -C178234D9B87F2831726735E054C48B57705C254DE978FD66B8FED99C179E3A6 -CFD55E11231275614024B0CA241EA4618430F62E93D5702AC09472BF682EB92B -F83B7B99EBD3736CD543F7C02E7F42AC083B75F5C28B4D0AF596BDC1BC90D7D2 -58DF44752BD362E7896C8A9C0320F226DFE7400946754A5F518596BF0CB2A307 -00C276C5A4A7DEDAC773F40FED1463FD62CC21CFF7CB7A850DDA434473866023 -0146E94958A21EF632671B71FE474F1915DBEBA6F6521A2A18382144E3B4CD87 -AC655DACF75CCC795C24241C851A05FB942FD8FD05E434EDDA3EF804B1363BE9 -504F346D6E23AF4193A93930B1E605FE73A96BF9C6778BDD25980D671C75FEA4 -700186F9F1F54814C73B69D66FB36B4DDCE39F3E5908B9E73E385EB116C21BCB -2322A225EC338C82C422ADEA0F8605A8F382D115B1243B0A2CA19EFB2ADE474B -6641F564C6003FE42639E7D862F8F3B691F566D454BB781B45EFC163969493D8 -857468480DA8967235BB2DF1E4B1070DFE9FEEF51F3BFD6B6909E0B19DB09F09 -921E9ADF59D3C3ED0B3383A3CF17A4633738A781B55E43C650A79CA2B2297867 -EC4A4C7012615840E816AFE169DE32DCD6C91159E97C0CD550DEFE597596CCC1 -9DC7CA2907DF60E74B7076ECD61345A90993D198B4442B42103C6A0F7BFF05A7 -D927C4452D15A983CFC306A3FB4D19A5A54D581409183CF749F58F64749AA350 -20BD27B2A702F72A98D584DF32984302EB1804B4EB5CD2BAFBB482E3DF8129E4 -8F4F44C221A1F2C862CAB51EA2DABF24AF42D64DB8829E30076385677719564E -B5658DB1086E0052BC1FC562F7F9894B46734DA15B142E7165F3519B36D4FBE9 -4220A60BE1E30FBFFB67FD2DE4286276CC9A341E21558A3BD8B729B667784C8D -97981ED0612FE2DB733F7E46CBADDCC6A3BA7AA53C6CB34B021FC4545C1EB139 -58EDBD8D2E98A9CBFA4B72F52F1C1B72AF8A99BF78CB6E2F19F5458CD4A538DF -17C18A80F62BBCDCD5B789A7DF3544F9C6DA2C22C580C41EEF179A9E9514BBE7 -4F15B7687C5ACEEBCF6D2229238EAAE66AC13027D20DEE7FB7652731200B1E21 -B2D72B3053C47132594A48501C9BFC7DB924B4810299B3581C1DAFF03B0658D5 -BDBC8E7F6C15B26FC872BBE0595D1A0E764C632B766C33D33F5A423AE987ACF7 -974B18F39F85F7A063D99B451B7DDA3C24B0FE4E7FE6FCED2A231B27EC109962 -EB7439AB63D48FD4813CCAE4D3F53B0C3471ACB52A5DB323FF4E1EE8373FABF2 -6D844FC2DD98598B9647BB4DBE12454CE24FE162C3B4583D593E67EEE093EFA3 -B8EA96E3D20B182F8C836B676B1CF4CDA0B5C283E2E2A7992453B9C09684C5D0 -9FF000F41DE580FD799E7663F918E7BCE5CEC8CE05473B660B343C5564BCB7E5 -9F4DA3B7991EC910F0DDE4002D54D459AB33770ECB111C25B0D327194D3DA61C -2CA2BDCC78DDA1F3A51F3D7EFF922D3C9A7D5E88D3F718D4224A0A34A4B91A12 -EC7AFA2472E8977F1C299380AF7D02E2423D880CAE31A610E0158C318DFF3802 -9BAEA372D8168F5D631B7CCA290C93314D3B96CA1EAAEB29D308499CB4AFDCDC -49429DA85225B0429998746B2B2D4A4D45BAA8575416631386AA7B620FB272F4 -69ACE1610BB6F651B154ADEF7F8EA3C51BC62A081F547181A3A18703D01E020A -5DC4C1C934D2AC4A0B67F545B521D9B40F3255E5E9DE9322FA51652337A405E4 -5F0CF9FFD3FDD10AE339AA2D91BB9D3637E72738620E8CB14CD87363AA04D4FB -79B0127EC187E8767D3C06404CCDABF583404809EEBE86DD8365E5A61BFEB1AE -492423B4E5F9CA962357444AFB75AC7AD2F387107AD76171F194606042072B9F -18B341BA7D01A6EDB28297DACDEA900F301D95D33A89248EF42C3264F8A1B47A -5CFA54118803E5B57CE7C0068C6732B60A741E20C981BD7C4BB1717F5774AC58 -92CB5C82DE1D1DF4A9E4B945D7ECF90E9086BBC455244C51E7F6A9AB801CDD0E -7E5BC63515FEAFA4238F4765AC04F3E09F1279FF3943D77A06C0EA2E52EE75FA -834963A8FD2929735CBA89073CF651DFAF18FA8D91BC1022FF345C3E6705899D -13A63FFE22DBF6AF2150887E12D9C7C55FE026F763D3D15D6F5DDE550E21ACD7 -91E9F7937D3F2FFC2438EAD533076BC5003E4CF3CC4A98777B0615A2D20CB825 -93C60EB16B5BBB653C91B8DA49BA774C81C3AE8F12D5E84D49C431055B9442FC -27BAF5F30D341BB3329CFBCCB09CF1A2FBAE92525E9D3CF5E099C0A72E1629F8 -D08CDF8A6B50CBD76FF67250631D13EBE30787D2B912AAC23C6973439C1980A4 -676D23FC0E90644BD0FB6176322D94EC8B2C32DD0A12065019F0E8926A14B7AE -C9D8905D9B79EF23446388D9005CBF63EE7A197BC4C5FD2E3470DA7D46DC2977 -B4C6FE57865E1C0448F393E0AE7D44FE616F129D7A0EB9ED1B78773EE54032ED -1DD3672B6923D188014A61F67ECE29D913F6CE37D014AD2FB1CF07CB8AB70530 -FC5D413407B6E01A3DDE44613B8A7AF8FBA104D0E03DDEE4684F73E97118F4CC -F74A503462C96F866366C2950BE3F19CE061EC7834C0E732FBE592DB5AC2E088 -683CEBB978E109F198E2D39FD2E690C390DF290F7709DEB6EE64F8B88D3993DF -03452F2C314C04807A63AB766F940667FA3B6BBF887EECB96B3E29424B3DA03E -80E7045A2578BD70F50E0F20BB6C3341560A2C9D5241936269C36A9C1D71500B -9C048AB6B9A5E0B50E4D3E0F63B4369B7A0AF6E1DF6C8CF5CA4111DBFFC325C9 -41F28237A7F731F99D5CC15F3AA14E5B4B4E6F7C617AF408275091BE72E98AF6 -456F9A83F05B21CA0429EAA3BA48CC5CD29A087D96B1279B9EF5551794BA809D -6927420E8DBC16CAB46450F1C0D5C8C8B3041C22390F9F6390067EACFC174AF3 -C9782CBEE35675872C4C68D3FBF78C8ADFC284E82C52C64477D228181C8697C9 -5E98D430816AB96DB01299654FB097DC281F0A60D9F03F84C973A6AB85EA5889 -AF3E8C64327D25D06B766F88973D5C75449D258D8F7A8F1976867644EC49D2B2 -AD765695B57D3EF8B8ACF005EC4A6083E30406C4887134314AF75BC66239B2C6 -44D663071AA7858CEA822B1F1DF09F4099D3B0F7A40809E08C0417BC05AC45BA -30776357774331D19C0937E7DA9B93E490CD9E58D68B227579A840563DD0B5FC -A6FF6D2B9DDE5A86AFB467395A2DE7F0F17494907B5658E29B518078C19D6E49 -E9FA0BDBCD3CE2579F20608BB5E9F6FBD30BA9A9A7BBEB411F348F69680DE209 -2D450CAD4AA515EF0744A9AF866BF129E92C57D523DC7FDECB9495F3CB72DA82 -5C3C50BBFA161BF93955972BDE0B44AD8483B519388A72717F6CF2D96F806F5A -204141542454453EA24A95A4B7BB7EC8530CFA497732F57CBC4F6A778EC05F81 -4D479F48F6CEE8E893DDF75B3C6429D1F593659E55267744E046627EF474337A -996F2FD56F2109879BD8A98B4C7EAE060F1770DABFA0973030CCCF297AA2B3A7 -5AE3C82E164304E43212390C4BBDE2606B124AEF5BF5DC9405F39F76C7448574 -589A6074EBC89C5FDE3542D723ADE4ACAF83C617D73BDC4CF4670E414A0F7C17 -7C0EDE2CCB0D5A10F0EED3CDF41CB790BB8EA61CF1AD9FF3EB39CEFA61CB13DB -378DD50F477C9A5FF24448A750699CC73739254AAE0E26886195B1CD7501DE9D -B60CAD2D5539BEABA6FA7BDFEB572CA0FB6A8FE46C6C219834BC23B3E4DE6BD0 -522028E9B7EBC83FF1E17E28A3C9C1BE0227536B3E917E6C2523121B7A6D32E6 -A007CCAFEEBE1633D1B8ED9C0F2C9D6E23141E75707FBA37897E4C0CAD0E1BEA -603DBCDD7747690BEFF6314A18186703C62FE2903C7D782C677AAFA105ADD4CE -C91EB6BCF2D327A3A6406C626A07A18473043F3E1B8038F873048F25B228187D -7226BBA7763E9DC0B43895C088EDA7A6A1E367D905E477F41ED43EF267B86CDA -481C8FBB1BAC6E6E0AA4FD2E979BEB703BC7366ABEDC18F71942D87928155C75 -1C8B4EC74C2CD9ECB7B19D9864271F8A4AA5F57D5B684471F273095A07892C91 -C946F615723E17E8025FBBFBAF16687DF65BDE23B92BA8FEDC894427C91AC4E2 -A3605B5D49E1C13AE8CC26902E92378104577A188B45EBF878875FF1B574F34B -9C2BA7781078F7A9CA7228E781D70A9FEFBAE5AE8319AACDA99A2E368706A2F8 -D068FBEF3A103ED7D71223DDA428F36A07DE9A9B6C26F3728296CFC3272A8E1E -7B372F5D9CA4FB010ADB189075DDEFB7488F481E6BF8490DA0C23DA26E2F582B -1E0433F5F019AEB91C663C7B4BA4FBDCD53CE9FEB02D5261CD78A1C17C30FE54 -EA8455AAC1204908C191698FF7E1CD58B6C766A6DD9E68AFCB0D2EEE7FA1338D -E0D8072E2838DC80FF6A028581CAB8E03A59B1BC7280EF55B97DD4365A28905A -5D0D198E6930333FA1013A152F5DBCD8A36DA7B52CC1BF296D768CDC7079588F -407DB466E7B70BFFBF82FC6751B65347A9523823E992354233DB98E838EC8933 -45C0C3181EA91C8CEFF04937B63D0DFE2B46A421820BA8CA5F5499D481868E51 -CDC4596D648F23F5AD603154996304A2C27EA1CA6E415C2F15BDFC6B01D2FDAB -638DAE9355FDF19780A42ED36A33E9D6A216D455253BC4EA831C1419F5DF7159 -9772F00CF17AC084B10C4F11860E31702C911EE925B93D994F67E2926B73213D -68AB7A0B7B42E150F3CA1E30BA0ACDF4DC74931E6009334B33035201C698F185 -57B132858F43B7A1DA50415E3D883342665118C3CB952B74BFC7BCE4E613A0C2 -E73A167648E282D8235FD84203EDFEB2A8899B4C9818D91483715F894657C032 -A5CBEEBBFC10B7C5AA59F8883FF4E799E0C4728E568F46CEBB4AB0929DA6D001 -A8FA70332C827535F8F05CBDDCCEE7178C007E60CA1AC783741307D5CD9C3199 -E673C480D0BEAE9DA98ECCEF3BC798AE5286FBCD3B9C0D4BCED845E41BE0AEF1 -763D293C78622EE9818DA386CB77A060B5296E06A44661F1B2289B7857C73425 -C28CA50441AEC8DE567D8504355E34ACBFECAD86A95E82F0D5A09C402EFDB239 -2A499DB371B08634CC07C592CF407738A667DF57D8417C4CFA790619309C5179 -82160A93C4841844CEEB8030B65CE23CFFDBBC0E9A48272A53A9DEB47C991A44 -5600168B35F73748C7EBB2460CB56FD313054E15F564254B074C68489BE6EC8A -A4C16F287CADFEC52FB61BDAD3E1AC87518DE6CDD7921A166B800C03E8F1243A -2B094B68EBE2691D726CAA51E554F96B8ADE6D019C24DD75C7A4F038686C45A7 -2268359BC73D4F0154DED87B863937AFC3EDE0C56507256C0230C43213650D07 -93BADABD4A9C066EB2B3D9BD43FA8169D87791C3A9287DAD03CDE950FBB3676F -D3605535B5D7C9BD0118308F5A94C4EB29E842D1FBE49670FD7AF78DC31610E2 -4EF86FF61693FAF103AA56DA7A920A25B394A461423EEE8231A1DD3FC34F927E -26A717BE37CAAD64E883E2E22C1718C1E9A4E69C977DB13411D427AA96569E9B -D7522FF889462400293E2FA2F4100340578D19519CD9ABF77EF8CAC1571FE000 -1080AA77E574DD6BACFEAC54A1FEE5CF9B6F7E1E7429C4E3B20C4F492D8B3B91 -9FFC3B6FAA8AC36FC882AD4BF6171C5147177DA06295A82E24C3AFB404C200E8 -6103733C515894B0FB2AEC498FFEB5A20A8E020D29A807CBB9C3F7FE0CBC7175 -89BBA2230D6013A3C42588DC018714BF4FAADADFA6E31397FBFBA428F91F79C6 -9A757C636CDFD43E3F6214CD4FC2B56F10C542D7C53FE0268D8D30AC95A2AE51 -3A6401231B8D18A9C57571086CD8F58FF109E7AE7BEDAF804A6263A439D4BE3F -94CFAFB9848B4903970B58DD4DE26F629AD2E2A2183CB3054ECC4B9962A89661 -64F15BD83E84AE8AD4958115B00E557FFB569EB78EFE95042FC0D73CF577C624 -ECE57E45F135BC904D5C6722D791040A426C9766C4607CD5CA7AE54298ED38FE -60ACA2735BDD35A88F5B394990BF320D533CBFEEEF0FC0077300E6FB3D808EEA -BE8C4416E964A5D673093480166B503E7C86431DE792F71B0025541659E26667 -BF303598A53CA0400DA9FF896D6114F5293FB6AE8A1481EF79C044AFFD1C3DE4 -8A06216AEE80BD03D1C579767C296C49A9B4434C3317A19268E3FB8162198D56 -3611EC062C551FFC5E17A76DD094B1BF2DC29FB49E08537224389B666D105539 -091F8CAE03B5C33AFCC39F0ED3E0B154005BB452E76C73BFC3C79DD85E11A59C -95289C023A19DB7F061AB2A39BA47E1A9E81547C73796CB226BB8A55AD2268E4 -5564A217DD47C2E21AB9D1D816E47A9D195022251B0D82989D0F4DC19CD954DF -B1B5BDEC1D7DFF81988967A834D6236549F4D4F484A7E173B2400CBD6E5839D8 -B5C5EF5DBFA5717F8A8FD61B0319067B908795C08BE68961161D7B898A80D9AE -9434D738EC57737E9B2DE0A7CD1289629D94F21F872442EF3D0267A4424C1398 -309295B259BCC8F2C37A1894F347478DB2A7D4A4505942CC5F7ECF884C5D885D -ACE1EA5883050D0FB58AD394F96AA583074ED9BE783D6B7C1B12A02DB2CCCFC4 -EEFA4E50C8FA241CF4BB972C19900F5B0FA8E6CE6F2C2B1495C996D5B8D1C4EC -26100C8E5A4338685050DD2D2A8E5395BCAD3D9064805E85AEC31A8B90EE0978 -680998678A2D5522316D7D1F5B2EE30353CB249E7DF0646D07E0202DD1B7BD9A -66B151FA113C809DF13EB798BFF29818C2CE867E32EF3FEB32BE7299DC51157F -CD9F9059E4CA3A87DADFAB36F4881BD781EC929E9A728C9FD2FE76B839E84F35 -4B4353C08F1A95BEDA491F4379235C4DDBCBD70CBB2BC34B563129F506293EBE -C5C516EF82B087695FA0F1DC412C3BEC7142E5D19368D904F8D2EAEF62FD0570 -DA36CA4EA8B866F9B017E7012F4A8AF1A13FEE0F9C568A7D6A92AC54679E9451 -D7BBDA3C9EB65A15BE4EF37F7C60569DA22F0BB241D7CBC4BCE3544C6C78AC67 -49226B987356C108626B7F07169F2B2CB49AF675AEA691D04496E36875C1D8E9 -C4E792D5F617835201531BD533CEF81C26D754A63460AD3927989ADB385BDBEC -347219074B8E68FAF8D5EE8A26635251C6A59D1122C7FFC71C2D459AF4616E82 -23C0FB4FE06DD91ADCB2C8C1CBE7B2E7AA01414F38E93651A889D4379CD4BE45 -F709055A8BC91BEB8345A56ACCA76149A699E21AFA6F6D423A4A715D77DA669C -51884704E172744920533D18E877EB348010C909946A2507E22A3CA3E3041EA4 -60294E8F205528062DDFC3562733BBF0922A87CD2D5F421FF9FC94AA2D380A8A -BDF33CB17415CA97A74009E70B0A7DE15BF1C714C8D63B72EDCB0E8AE1C6986B -208C9AA1D0B6E9453DB51E4054B0E4E4A544F713BCAF55B90FA84E5DDCE1F132 -3FC5DEE7BA419E006677D2ABC0E012385A049C3B9C51841FECEA0ECB262A0CA7 -CEE05A69BD5BBAA0F8EA06D878AC3B81829D3891A456BFE19B0D9B06B5D715FD -1C0BCC3D304FE9F1C830DE89F6D526BDEE9E886621C13BEE2ED59169270F686D -01A7440CB9165022FF6AFC8EC4FA7C17741FDB6D2FBDE95873DA69A4F8252B8F -7978F7314A143F8C0414F532B504F6A6A42ECE5C0F09B9B3FFCCF68EE81CABD8 -0DE789A64AE3F3F7E3293411B15D1BBE264355F096FF90250D0D2D43C3016FFB -2A59F70FFE9636208054ADC08C8D02F9DC2AE567FF26A95D67923343C169CEAF -F14E4CC9FAF053DA5155520CFDEE63169924357A5C3158FC3D43A7A42E4C5E2C -9A641E6E25FB2115C40A03472C5B06AC4D65A1854985F782B387EDC26ABCAF2C -9837E7D331E57EACD575B3349D17706C398A79BC015A0B01A1977459B86ABC6D -BE555CC7776C0C7DE01A158608A0AE3A3E9289A5D8F2CBA9D6C63EFBA892695E -B7534C0453EC26B7743143F2F1002AD757C177F5D7F16436DFF4ED6AD12CECB9 -D9271BDE6ECA276C3B2AC065029563932B5D7E33CB1B71B996C947546900987C -0E4490EDDD6EE78B6DF8D723C19771D36656F3ECCA752ADBD68951ED0E79D35E -D38852D8AB1496E0960D14C1C8A687D31913589A491EAEA3D18696AEC361D483 -4FFEBCA1FB33A8C600EBC456137A7687F4DF40EDFB9A3B080466C4A470457538 -3823E06B9E6DFB287FA7BD7042203D0A6ECB0E47EDEBF97016D831E0569BB60B -F2DFB207C631EA5AB58FEE4D5BDCBBC4B41CF0BB1F4ECA465242E509D145538D -949C0233F71C27407E75B11891045C9F7801A973EA41AFD742DDEAAEB504ED4F -64D6E0B7FB9263BC65823D51D593EC42CFCBC682CA4770C0CED5B238063DA5D2 -716A9205CC862023BAB6937D2A18FF5D618116B45623E06172EC30280C21388E -4D53D077D5EEB77F2B300C57FC3ABAC1E89AD317B46F1883F5F83E7A8AB1891E -8110ABC7FEEBA203BC9F2EE2982D77BEB0F23904EE340D6D6F72B1BBDC76FB3A -8E69F3C5C04F29E2AD924C390DEEC073AFDF3784DC26B85B7F0528E3B61339DD -1E341DF261CE097C3BB1769FA4C6E728D678ED7B928FB44E6BED81890CF233AD -DF4A72B95F85BD95C5645D8A049E89D0F94AE88ABBC66F5ED01EE9141448C37B -D47FF55ECF86E13B47EF1AB27C5CA26F7C2DA5841D47B3E602CDB2125DC345E5 -74A8E293DBF4032168983A6B439B189FCDFA5FCBA97E166C65FF0641E0B1A7D0 -9AF28005F1CAE32F1D95A27BCFF98C139911199AB6CAEAB49728AF2B0A0DB6D3 -7419EAD54E2EC55808C6C176EEC97477FD65C11BF88BFC0CC39BA742BF841FEF -AB317723C3F95445BCCD5A3ECF82C78C262B200894C983AF871912E47342C0F3 -13AE004F1E05CD83125AA4AA5161B1DB9D3F1A960E682EF93123EF53145A9C24 -EBDBD744307F6AE52FF1D6D43C3F667360FF48673C59D04F12C3AD8FD361C4FC -8F2A902193D4EEA3E9DDFAB0D323E2E49CA4B4FB691F9635AF026CE1DC94506C -49D68F5899BFCD1B947C77A77B1598CAEDBB7AF0F13221B59604E91140959F92 -8C49E5AEAE03C019BF6D2FC50B5BEE2BACD955319BC969EE0FA1752BFBDB1380 -042B1C0FD79AC43B5452A1BA2281982E73F681FA76AF1C9C4F4FC38EBBEFD865 -4648D27D218C40BD2C1629E1DD79263FB7FC2005BB3D06C9EBFFB22F67F356C3 -D20EAE1DE1D11ED1DB1D0E6F2F20FE98A28EB737B6F5B3307620A0199A076B49 -05F16F4D4A9C39E1B806BA6ED58B24657C2427AA6C987619D213AEB93B3754F2 -E247612FDADA5F5AFEC1512AC93181F8DCF831DD78271F12D28B0250440AF081 -5C141B11585D8929ACE6C79BC97C804325EC5931EE393A7B964B14B376694460 -9C0858E833FD66D0DE9B7D6BA33AB8FEEC15C99E3E5D329676F0EC2FE5E539B6 -4957002C77505CEE1027AF7F1BA529B45942058EBF4EA22F1F7FE3C5DD93AA1D -9F3A228EC45643CC629AF5EDF9A4A33EBDB7CDC0ACFF4A4326ED51BA05C88118 -ABC356B35D4DFCA057D8BB3D8ED04DA0CA49210F352E589748E63F2B3CDF7281 -6C3E8F46B9C2DF790FEAC41637366274C88DC4C6297F1501436602AC7CF94F17 -17812F8230CBF820885C3BD086289B845ED8F6B8B75015744DAE3981E8A1C691 -93B1D66ED2E41EFD86C74E12276CDE05A3A929E529F7781F1E49550B44A26FBE -DE59A39FCF8CBA8F05862882D6AC13EB83C20D6115D4BF9509F8A506E5ADDAB1 -ECE74497A17AA12D1CFE36672C2D1A4F2DC52DE56E8AE6CD1E72B8A4F850D3B4 -1551EDEDA4FBA36379A26C3B3928AA8AC63B5FF9D24A893EF019E6FF0735FC60 -7E95D2F29AE0ED922BA57F85CABE2AA44498C160656779860006AFBC4BD6685E -ADF006A4936E52637ABCBFDA6C8ADEBE083845A20B9978A2592F98A8E92F2541 -A84F2AD2DC12A81C071C0864A1510CC6BA44226B03E4DEFB70112B4EA34ACEF0 -0FAE9A6A783FD2911ABF67B974FBAAD4CAAB514DDC66C696C003E728262EF4C4 -4AF9AB3E23EC019EB66269B65CA53271B20CB71962FBBF8967293C1A81369021 -E89CBCFE25C124BD7A8A1F7C84DB681A545692C17C5A4C3D036B7E61C7C8976D -A3071BA77FF9F7C9181AC0B09D02DA041981A7FED34879CD2AA43695CF8BF01C -A92100BDF60720C5633E3047655240DFE1E96A85C1F021FC237F51318A9E82A4 -563725D2267D7ACD7C78B228D5A6114D77F9F055B885A279F7198F0993332786 -A3A6459FD9BFFDEDE996C0BEA951C2BFB14F7753C3599F630B00B6A44C46B2D6 -94E02C6E3CEAF82C3F730DA6486A47C2EC4722963ED34D3E982DB93A891A0789 -5CD8EE15405EC998AC29D6374356F8E4D8125EDD844183FE31A2E00102E276A3 -7F138310B428AD8D3BE683B8525524F14E6ED10AFF68127B617167F1CA432732 -081B87D78B6667E92BB1F5794C6A66DD830154311C59A43BF96100AA8A84BBB5 -7F201F4F25DD15E87F6A9BD20A34402E5757ABA204236C00541C68A52B8C6666 -FC3860679EB3C085B647796B424B598E97F6EDD31E1C1FDB740FD735A614B4F2 -93EC1CA3ABB24E4A2FA853AE8688E535FCC99160F55E28D542B2C48644ABF948 -168DA7AFFA42839CC7EBEC5068A78AD0468A6697D0848A6604CD020BD92F5362 -DFA41E55C003B702655FFA0315EEB6D622DEEA18126267998875C2F2CB9D6A0E -4AAACF51EA44074ED7D625572DDCCC20982B43B7BF9488A5CE852CEAD090719B -8C6A97257123E8EAAF13A06DFA4BC20801079D7636DF8B8D5F5B3C75968C441A -F17903004DE8DBD08022CCA7C0CE9E0D784D7F571D4BC3DCE4AD4B4487CD7ED6 -7E4DD4516FEFEE7FF9D7190CFE093423D9FAB6D03D8C7607B9C8491AFFF1333C -C4A5CA33C669A889D0C0F174E9AC7B2B81CA532D70F86D820A8E0BE35B21F16D -C1099AB373DC1EEB63CABB00949B38DECC52B236AC8FF44E0F35858ACD325E14 -4A21CEB8281D10BF798F2B3E460E89E54A8B255A50623743E7C0797644C92832 -60F30A5B104827DDBCF075872DC910E480A48D73118D4541B19AC92B1086E48E -CBDAA0C4BB3600E546D538145C6C449658ED66B292CB2B10431B5517DADC3269 -0652E4287731B70785C23D0A5A7BF2FCECD6481CA92758B74487C3D50FC8FF29 -FB973E1E518130D2662DDCDD6199422FF55521E0715AFD06C43AF2A99999A5F8 -B6EE78F74BFB8F845CA9FE3A03A50218495724850CC8A66C92A3C4827679B4E0 -02B86A7FCF82248A7ED56D5034A349F920FB25112CA8A84E7EBDE228DB05D009 -76B948FE201D9F56E64CF491A7DCE17ECD0EDFFA25E1EBA6A5B5F8B9D811F559 -9A341D65B51A32B2230FB689F0DB5E70967A2F333194FAC528AF2CBE72C31A47 -0902B69CEDB8BAA7BB1381A4D31EE1198324324E2373263CFBF2D56F7841E493 -90DEDC910506EA457385BD968786C753ACB24820E00D74F35BD07195E2959044 -0BB0B53AB9B29D14D0EC5A35ADB896440506D070D0341A5127241D914BD0F82B -A8BE9416B728BA2BE4E0214A4CA7D354E229AA83BC5BBC744C811A5FE4994EED -46C0103C40ACD7C5772F22EE718159A80C6ADE365F84E1327A5E8725D8618176 -7F331D3D3EF56CCE69F36DA9E620197E52CA7B818D4BADF758380F5B10764C7E -C3B3ED839AB620B9555A2EA838CF5D2E9F014B9A3C96BB0EA054081EB07F604A -E2B1A9758C336FD7EC9C7C2A1640725485C5C7B353D58FE00259EE1C709E07CF -FD54165C87CFBACA6E3101C23601BF20C689BDDDB94BD6DEBA876E981CE95C45 -6543A8BCD8BCF2549C97401442E3ADAC213C1885CCDEBE8AAF47A58FEB1B15FF -F2208DE4F031C8415E83CF7A6611464B491EDE2E9AC7D9AA84441F9A6532F44E -3D142F77EBB3E8033F23C93923F0CE6848F5AFCA7AF0EEF8B8DE8FCE52CA1C92 -1BEDCD239C712A1E6CECD22EEF42A99B6640D59C848F9C630F52EB49CC6E881A -0C2104A3ED2DB85AA79874C5072389A73878C01D45AF07B73ECD178FBFDA6EDD -7380E9FD555E929D92876138934B8434B0774E378C1DFC1AA1E65EE9A4C69ECF -0BA16C2B96CCC0F22C8CB492965A8F6AF7322E4142D8A40A9A3B291685B0BA10 -0EAC0E2A92B955B7A115FD3F75B0F081ECBBFC40B4E81B76BDD5F7CD3255E4B3 -2EC25E35718527CE70470C47D4D160871C8F7415F80EC718338E41FACFA607E3 -C29F11193EFDC1C96D24D9ECCDBDBC5A0541FF5ED2915623346D61A71BB2DDE4 -A273CE9CD37FBAF6903058C7FBA3CF4507DD723C983BFA5C2CE4651E2B3ADA8C -28D1525C8A184140BA42C0B1878C5883581826D7F0C02E6753526FC538C0CE33 -CEFA24C86414F785D2F31A5BA161E696782396E117E6B3D21DF1EDCFF6930A8E -4D8AB720D67F93D6F0FAA25894208574DF575EC31451CE3D196319119BD46767 -9E7B1C7E26CCDDB510E19A057209D1F8DDA77F830752735CA95B8B46EE230338 -F37D528BD533640FC7AA6F4CBCDD5F0154EED7625D9BC57ACAA90481BF18ACA4 -4CC17B1FA53AB188F6D4EBE0E89671BF9926B8B87A6EE17F782E1AA5289E1A12 -F791CF64CFA9BD842771237FCF330478A6AFE0D6BF9A80CE2CE48784D0F1FE7F -E36517A0AF2778ADB4913DCBA5CCEA8F423CD59CFBEC56BEDDA8B3E03E048CD7 -4D670F5BEA7A44D309CAF775DF677EF3E6B5131E3F28CEE8F506990446D077C7 -8293B4F57F7FB2D175EE6A12A0E050802017311C15CABA6C5CC5D56F77F93CCB -A25DE6C9DA9C304B98100B26C5BB88542CEC07C1C1AAC21501D933E2B2F74E8B -5153D70756AFD54C0D1CEB3E70CB40270FB03CEA23CA0AB46BD904919A931769 -FDC333FA2B2D55CDD99148CD555C959BB511732A90DB1B986A3EC1F3251925CC -985228C6BABCBEF2C59A590F22E1D1DF16D6654B35FAA7A1BD7ACC0EBB529437 -408628F19838384635676825548558554D6CF471178B8C0CAF16CC278F58AD3E -1524989C16B63834A76133746B1A306E2F89C52A4209999F0E63DD7C85058894 -98C18F65DE1E03297C51BB581EAD46557BDE7155DAEB76F74E3F00A32271F5E2 -E7E909D1826303032047F61130FAF8BAEFC77D524C6D1F8F2DB87D1D36F1FAFF -5030AF4E0BDFE670712B3F01DAEDFB76C93CE59B766295E1C766C1BB0552751D -EFA83B7080B6156FCCF1796A68CD83B6BCD4DAF3353361F6A79DE994F0833A15 -638AE470FC6672593006E47301ED6A1C8727388AB31EEA34613CAE8E8AB07FD7 -6A18E36309FDCC4834F8CEBAE4AA648754D679DD4BDD86513C851A8102399740 -7792F8FF58081A0B4E84058E4C1A2D6BF680CFF926DCBDDC05D73627B7980E94 -D5E410848B1B6FC742315A2ED6F25635EB0D734C82480157DFD2F383E6508EAC -EE70215C509B0B2A4DB87E6ABAF2E1AC115E6E24A55815703E0E054FC445CF86 -C1E0ACEF9AEAE22EB5D627D7E96701F93D080DB33240065D31745331D210830F -DD0DDB83FCC6E4645D54012254EDA717ECDEB5C114D826D8F2E95FFC67948335 -2B0E77D7541876CB99594FA3C629FF182A7BDA378C823826AB0B24006F80406D -5DA1BDD296992542E75B74CD79C2B4386016F415DAD1C183C3330252B1CDEA5E -9129274519705F35769DF987B207CA0C68F3E6247F6119B01802A55CA056AF0D -E8247CD5EE363A61D10855FF3A495861993440F77301477FB4EB0EFFA5D71568 -D708EC717428323DF6942FC660961D005CABA2388F00575F4649F9FCABA1779F -88F964A301A6D5D1FC02B327B55730031CCF60ED2A15E6039471FE70B9C83C32 -A25E93184F3A994CCCBD2EF04491851D59DB819DA46DB076C3ED8230F0AF49C0 -A2224E5CA6ADEC27C15D0642EADB6A63628EEC98F6E941394C71DF59846ECBBA -E7BF50E44E3D78994167B63641F8FB22460867CEB24CA37B08C91E49F0C47D13 -10F05348092FEBA6250C635FBA5C5962AFB24C950DFA5CDEDF063589804173B9 -EC2979D26993378BF16CB04F4EECB360182CCA00094A7E6C9D16630A1089B6C7 -B3E3FC864CFC613F2742065D4A57EF6559FA02C397AC666B8C9C35DBE5ACDC5C -9624EB9A2219385CB8C83DE36D78ACB2B4A8A84D83C4DD8700534E00B4C4AE0C -E431200DBC2C1BB217159174CF4EE41B6AC8746598A999F9F1CB98275D6D4CA0 -16C45FF79EF527AF3DB2FA45CE3BCB2E5D46D6A8CA3B7D81DC5679CC7D949CCE -7D3F61F0FB9313FF41878D6C7058D8B2D3525D65C7FD7770D119E7C4E93898B1 -6844F80F0ADF8E84DD888594153238CA44CD3BB791186B47C66F6DA75F5E8FBC -A623B5AA758C66F72C6E908E5490E95C1E73E674CC58B1ED4B385130382A2C48 -0D815DD704ACD6A68DDF70D5DD361ADCC1FC831C9680C02E77FF1413A025D992 -27C683ECDA0447F1A027DD1A47CCFDBC30AA59D35F731255609B509406D8C22C -CB4A0BCF1654060D52EB4EDF21BE9F53CFEBDF408C5EA49B22A7909193FDD3F8 -DBF9F403B961F6412F2D27D7A1CF7E18F46630A0CA925CAE8CCB10CAAF42A5BD -BF21F7845DDC89B892349BA7B4BAEF3B85593FB06A267075BFEEC3A857CB73F4 -402EDB98A70D15F48C2F61B3CBD7BF277304DE6EE36E9A55D2A1805B37CA9A13 -B37F00DF6FE4F8508305C3FBF257A7884A7C4D95B6A7DA6B2C4BC6465E0B8054 -77160504FC1976456543D6AA5B521E88A74E5B2FE7AE6CE5BEB4BCA8683AF38A -7C6059764A7CF8E688EEBA0CC520F2AB06A61A07CD0222D2270ED4E17CED6C77 -565A18155B38795CD27D7001E06EFF2C41C80404884E878B64E60F13A901CEBD -B0AB679183726D2808497859EE701055276F2F0F36763FD9F58FC1190A59B9A2 -65FFD2E0278ACFD8C6C575339D8B459C4DBDCBC4DD985F45AE1C7AD96FBEDD80 -60AF0F7FF0FB1C8960BB4BEA08B115BBB2B3CF7CA09B56622D59CD9403C2B2A4 -4E6A7E47B8CD864C07648D07AB07E8CE9173BB2B9C349A282AB8BA11076E1201 -69CC0C54AE2E893FA5D95E1A9440D9F991E29CAA259220DE5F3B99AC86DF417C -0F50FC176CE4A0DC9EE549D2FA86D80629225D51F289674963CC78D11F8F7406 -85E67DD88CCC905FD02C0C7125D7F7C2029114E399489DCE1490EEE5DD8BDD16 -BCCF12ABA0D8E5D016874943E64EE48A0CF3B544662F1C107F8E75F32FBCB827 -6B905EC3F579BE9AAE714BCA85FE11E8B6E29DCE0044AB28A9175B0CF183A0F9 -A43D9742DD8E1AF097D3450F83D97855265B9F612D8A1C6165C339F0CE092652 -F3843DF0A898EA13374098110F461C42A17A10F73127ACA85EEBD115225B3FCD -870CCF74E7103E305AD55C8D77B528000001B2593FEFCBE9014AACC6E83581FE -E0B3C455B02970E509EC1C54120688DACB24517BAD30395B4261D3E266C55FC8 -5CA30725C79DA01BA71EAB826745A22DD24AAAA048039BEFC549538CCE9A4F3B -75A50AF2F15BADC785E37D65A772D919482362A3E7A0EF75B61461CFBCD6AE1A -7941F680FF7A0BD04182C21CAEF966A52DD4CCFCC22420CA5433D148A0D88EF6 -32AD0BF5CA6F3E031670EAD28609AB31E3EF73A4DC62C984CB953274C53F4F9F -165ADAFCBACDAC894C0523646AC25509E65DDBC032E798EC31CE2608F1D89B9B -3413911202DF9C0B291BCA78895AC01F4523C7FA4174E2747032E38B32716E23 -00A6F1EC49633898D4EEB694DA03E2E68E607DBEEFA851F685D6EA3F242140B0 -FE1C632CAEE6E741B9AD5D1D51C0D7D6DADEFD3C084E152F8D3341C3ACF52469 -256FE1C5C7ADDA51B355DF0CF42604C9840D6C01EDD1F5022BE5B15E1DB2420F -44DE5B6E7D1CA024F1DA52AAE5F2B3E080B95D6B65914F1A8D7D6B235ACBE85E -61493A5EB7C06CE2C3CE32A42D9508AF914D4ECA8EBFBAE318E6692DDB02C811 -DBD168004760E33BE0DACC8A5E77D7850795B7FBFFDD85A7A12DA088E0D04CE8 -5946CCDCD41C221A1E9729DDD097218CB4783DE0AE30E333EF00A8AD42DA7C06 -BD3BD7716C10EE6F801D3928277AA87225AA33E8141A47FD9BDD64FB6D29C60B -F91DF1B8BBF9154811DE01AA799F5B9B1683A380429550192C09F052F027CCC1 -D42CC5B2E0C4A0FCE424D50AB5B82ACB7A9B1C7838722D3DC7E84A84BCB67061 -B204E8D1715A8EDDAD4EB4EFC2973EB418666C7F57580278514A6C5D0869AF3C -0CB1D99BD5FE72A665380ED04AC4BD8379A1D5B2894B82B8A5EC319302DDF62B -ACDEE383614D564D8FB8A7C6E6D1FC5C5B70C893ECCB540540C23EFCB7BFA574 -10D7C828495FFE4D7FEC9FF1F727F9CB0EFE9536989601F746CAD0EC97778E96 -D62380591A4B2F38CF1CD42A62B1DF45C760753E0E4AFEA5FB90309D412BBBC8 -6A1FE55FAF842BCD90BAD6D491061BCA6D8E589675B9418723FC18D3FAB84CEB -4956C5868435D6DEE4D4F9172BF165C0C22BACE30A0E10B54D49B04AB0FA95C9 -921E11B6F12913966E2488EBD830CCB05F02AEA26A0E87C98ECC85660BA28C1E -F9C2E577F087D8A844537008C8AED065EEF36CC3A5FBDACC6756EEECA8356873 -47EB1F955743F051D9FA4F51AAB900F7A8F656BD967FA52CDAE022EDB5BA2673 -C775BA4A6FAFAA1243CEEEA4414A1B2ECEF3B40BA6262135301CC62A355331FA -1EB4009CFFE5CFC9DF8391D9BC92BF3E666A3B22696C567F6680ED5C4B5829B4 -8A6EF11B93D084AAF2DCE69B39BA46F28131C0B45EFA3BE521822CF75A528640 -661CCAF1B95560682208D24203D6DA466A4C4260AB717BB1656BA8846C4DD7C2 -5E8A48DE389DF43DE66BAA55789B20360D143F7D89F5A7906DCED9F51F8F18F5 -F1C5B170B883F7C389FE4F935D9EBB68F3EA8DF84E501C1F280F8849BC476181 -7950935420C6CB6C7FC4A470966C7762FDAB91FBA0D6DCF03CE97660B3F9E054 -A63216C80E878E319CDAC223EAD23BC143A921C6619B7E522362D6F37F5EEC98 -F7CB040FE694AB48051612955CCF098578AD99B26736D99E3792508507625070 -12881AB347B1ED8F489D4FCA2966944CBE0F62174E2B76E613EE541E940E8C49 -92AE79B2FA6FD6F5B16CA72F10CAB2A322A217C316E4B4CB99E888987BA0658C -358EEDC1D85BA4486B479E2A2E6030786CF13889278949EE21B21D8F023B2CD1 -901FD514EFE94982A0C1AD2BD1C98E19848A4E36F4039EE0F4687FCD9C65EDE0 -5CD331D4BAA14998B24C0ABEB19CCEEB98611BA87F7BC01CCBD1AC749DECD76C -6D3BAE9B89AE22653BE4482ACD59A35DD0DBE43406E57AC36C5307AF81CB00E0 -3E545F943565D0D925513E85041C16651313564518F604AD60C7F24B14DB7C25 -34D8E4C5A0121FA194AC14E86AAA4E14305F6948C6998B3ACF67CA8BF1B12744 -5E7EE111CA04335F78DCFC440E9A99AB34E60F9EFCBB233A9D20458DA9405D56 -57264169160682DDA15B1B19A2C599C1671D0702D3AEF14B2645C6500C07A7C2 -D4B95437F1EE7D8D0DA247F54D4E68399487CB01F031B63760511FCD2858F1BD -AA7DDF5F3D0E4CDACAFBCA0610BF6DFCAF0046DA73542D5AF1E8EA8015D76A07 -7382A7B4F7419DBCE79A551D7A7CD12B1A8AB09174E5A3548BB56C0BCF4A87ED -18B7B5A9B8375AD8535785C2DB59FE934A4BA33E8112C6FAA92CC683CE765D24 -6E6152964086CFD1A6CE9191D1C59521E98CCAAA407F093AF076F250AE02E0A8 -2835EF3FAF19B53EAB419E2677E1A58C742BE93A55D2E6FFB71144BABABA674C -B972E811BF7857D3BDB809C0F23A51FFFF2E9160FBE2ACE2793EC2A381210CA9 -BFB1BA5F1576584EDFA3E904EF4A208350866A1CA232E6521018F245F33A9FBC -BD3B09FACEBAB6CCE610CBDA6170F0D16E477CC664BD4FBEFAC52A887A1FEE93 -C0143336EF77A46748F464F1403791CF0EAE32CD4DDB4F298A17E9EAF1885666 -4E467059DEFEF575A9E0C4AFE7A3BE402CF79B2D02B79C42B06684CE5875A9DB -DB64C03D668BB381B816A6F9813B2F5E2CBC194B93791F3BE0832AAA705D51F8 -1C0AE8829D844D5A1C5B9BE2519C921C6614D5DFF978A762B6D2F974B29AB353 -94166E26F6D86CBA714E47F84FF0A0CDF672271AF9E2AF7E2E8B743D7EE30E15 -C165FA7EE181ABED7981579A2D9999EAA208C7C8B33B9C6F95FD586CBD9354A8 -3B390D280A7D8FF96CE8A5C8F91DF9935F5A684133534C99A5918781F1B26C17 -E2436EE11DB1E3F104F7B3EBACA254B1FCE4B01FDE4183805ACB425FD8B46CC8 -04C1270FB3055101BB95EDF6E1D076A2A7FD3C2F97BC65802962E7EC127FB969 -C07E70F4D2F53AB08970C61BC6795CC95499F1A2C4BF9446FC4B65B123F81A0B -60C6488F593594E6296844C0959E0AB0C386CC76E769C7D325E1BE46926DDDE5 -1EFFCC709F7998ABCF24DD1865D7C60C6527D0B06A4B50725D1C3384EB164111 -70D637D76C3E3EF63D0057B1A0F970EAE0613F3B94B025C1CB733A4BAE995E99 -3C1D5B00419B2AEC1300C1FC9A9E98F5AD5B92F11A90E07D32E8D6BD040E78F1 -48FFE3D337EE827CF632351057B0C568A3413ED28343E0F3029F76DFAC3C738E -90B243F7D6039F6115845EE2EF471336C4D50FC48BC09EE001879FEA9B5BCEC0 -72EEC9FFE66C377390A5651677AEED0E1AE6800C495709B66C7F5FFC9974BF9E -9DABFD11A00F87FC7861180133E09A718D7685953600600A669247AA8F25C483 -0C72735CEEDF3BF9BFA88C178994AF71A16D84630B0FA21369F5AFAF22527409 -3DF33589BC9C61041C8AF4879CEAA373523D99C34801809EF4160416A13F5D38 -14C0B9B4C95B5E7CFE6E70D61A8C847819A9D2AF78C329DC67C123E45E2E81B9 -A0EADF7B66B5D7524E6DC225BFF4364BA9DE24CBDE57667D694D6628D7841AAE -49008D71ED25B845FD19B440E6AF9B5F140558AEFB89546BBF3B434E8ECCD005 -E8311C43B54F523A04B12D9B68400A6433AF4A8BF56A6E9EB36827DD1A5AC4BB -724636815C3149AE97E24C03D9B7DF5F88343F26A7335F47265201ACEB998AD2 -AB922BDCA39EC2036EC2721EC4B4180257C931237635B0C395A73C0441C202DB -9955C439043F04AF3125BB2FD696884E3FED05EDF1F5303D6BD60325CCED537C -0995E73E9F2B962FE6B8816C5A68FCD4D325A6865FC7D57A992EDBD05FB6E92C -C9725682A0CDC3214BD57988D001A5F62FD8A7C180C4F699A6EF7A804DC3863E -DD7A20181CFBE117109A793F1EFBD99392E400F3DDD6C64BE64BA05FF710E605 -7D564C9BB7F666CFAE8076F2E4209DB688CD864BB58965B33CC7AD08A076FDF0 -3CE533959C33732D444D4ABCD35C73B6CDD1CD70CF072BFB175A0B5476B062B5 -3A637FC14D8DFD7C44DCBDC78EA108BCC4C8E094C4EEC35C9A399850BAAEC9C1 -C73E525076AB7EB6F5388ECD2962F7BC6137E78CBABD857C035EC03272BD12EE -46692B841ABA2A1DCFCE4DD3D5E6883917D06659A523E0D3E3227516FCBE9AEB -7F28DFF0707E0AD6BB92A9210EAD45F69A1ECA248D2883FEDFE8C52F75A73B7B -9C7F07C4AA92537A2E9CE45F39FDEEA6C9FF6CA915E3D0AC4FC67BC6F0AFD108 -4810D67B320ADB50D4D37AD0C27A7564F6FAF3E6DB1CFC47CF9DA097AA269A80 -947043CBA10D93FFC7033C60A672C9D3F3999222D57492A97D5A4D10D99E437E -0C0289A1BAA29D449B2C17C24D780E68354D874CEA9EA4E02FE0583A18C0667D -4FEAB0CF5286FE487C95C969ED1CAECDD9F9BF5EC8A36C864190C73473C33162 -20296752CEBD6EB43144764E6FA12F60EA605290CCC3C69994BF0780A0BD9257 -A09FB9A9D3A5272C9FE2DAAB7975A5DCBD78A67E4F981E4EF224986C110F472E -F86E07EEB1B2B8325D4DF7E4751215C7DEB987CC9662B92590889D64EA31A1CA -55701D52590B3BAB4F0EA40D32CE6F98D6193BB6F843FD6FFEDFCD9C2CEA3A18 -917842BE0C2248B22D5AD817421748C36B4A10B6E65BED5686FCF26F4BA1C933 -1ADDBA36F99AD0F880DE81FA0C14AE93074C0D2F32AE2197ED43E3490C0A8FFA -0D747D1622CFA8CCBD48E8DC112A1743AF9C7BCA93E5B5696C46A27A8815B167 -BF2896574824B20D9C1CADF443982E8B8ADF1F705AD3FD030478AA79D12DEA5D -F5E3E9C309D9F3F360525044503A563F06AE33FC380C3DA0E0EACA854B23D030 -11897C208EFB2EFA86EE596420DE71B3ECCFDF3678888606031FDD301429AC82 -92CD38D8DE1C888EEEBAEFF6E5C9AFD6B2F8FB8B283E68EF1E12AEC79FA23D02 -908DDB7755C11E7DD339A1F2AB6AFCC27FBE797D03D01DFBEDB1460274C8BDBB -57A48FF118324F231274183E0C00064893021BC8F3B52C7E784881A31D913F17 -19675260415F19D5CDBE742FA47668A6C3870553E3FA0CFE56CCF589767DDD20 -D4540E734169D2E1E1E979F74369EEFD66777BC54361CFF22291B76CE36FC987 -D78E9A4D17C75B8DB9740B72859A51B65E0985F1280983F224684E7300191D62 -D8248056727303B6FC6CB175EC5C6E372180995A44680EB012A97AF3B770BADB -40FB89E4D1A48C46B1F56250382AFE36A674B92D132A56F5929260CDE410A744 -40E8B4262891CD7EB6CAF8DCBD3C58B46A5F0E9494651A2DF23EA1E3C80A2ABA -0665C9562DE3719F15473F9138C66CC24BE1DD07C961F7F64E638496911F4FAA -84BD95000B76D644EA13B94A73A1C41E1B08ED9A978AFF4BBF6567ECCB823D2F -5FF935156F79A00BB188BCD617B6FB2541339E4CB82D196BA067DCFF9DC6D401 -3114E16A003D4722FAAD466AC7F0F932ACCBA5A7BCD038DF0C39DEE32E0CE33E -16D59F60B06DC9561B40E328F8CFFA55042FE1C52BFD8A3273CBB02044CD01B1 -029A457EB8C8AD1CB1901140CCC5E8389416DCB7639D7D0A608F20ED96CAAC89 -F73DCB332055DBD161936E6A1EFB24CDBEB8AA69BFC7E2C4AA083B55D431235D -21B65636385C41EFA278C440D24743FD2ADA13B62D53E7235A54760771C50DD3 -608ABA221A0724063C839E96306FF87344532D03EE2BC70A223CB6FA74964687 -82CC44EC76EBC8404A42644852197569B1711946ADF595E8A6C7789C7D8720B8 -371059305ED1ADE8B01C494FC1342154916EAEBE3F7732B595A840C7A0363839 -0977D1EB502C15D6FE8A368B398C4BD7977914B072DF30C4BD7DEF9EAB7AB5B7 -0327D5AE95CD10F79DD6844BA1CADED35FDFCB17B8C28D55EBCDF54FB943B39F -0F9E98494B1654B1CA280350A03A9ECA8B00B59BF0D7015EF79C48A13662B7B8 -0547E2E3DAEDC268822F6DE7CD6F14AF71F7E546E12B4E11AFAADC34AEE5BDF7 -1E90DA341B6CD373009C6E774B0916787F637F6EA5AACC162582F1D10187FC56 -39349AB0AF7665252B5403E67686DF0973104F5B193D8CC9F673B3D9176A4B8C -9C31382EBD5C1979493FAE6EF2056A346F656EFA5B31922C434BBFB892EFE8C0 -6230451A3F26B98DD8E62ED4757460B1F0F5C813901F351A93A7E11758798965 -EBDB3A22144A7782238284780A9263B561FF7F1CCAA4D24DD2F37B177FD24EC2 -B372252825D66DBA7941B096D85BAFFA5C2B9F8AA4A31A30AEF5273FCE05F36A -75AC322BBC88C6B7D11CFD48D6D70408C664145D81130A2445D643E7118C6FB8 -48A01EECC93A45D37FAB6680D32FDF09E25481E18C388241D5ED823EE6FFEAA0 -90BA7638DE302486DD4F682CBCB33871FDCE16B67B158816960B52E75A1C28AA -F4C27D521AFD7E74A51CFDE38340A368ACC89DE2FAD37E34F3858A5C2DC7BAFF -F4CE85374EA40E25E959A9B74834DECBBFF9FAE1F39FDD5D0E8863D71D27CF04 -4AF357E77B565F5EA577466FD4138A5516E4624C7214E2BEDF1BB484D3425BD9 -ED34FD792F2F2B9BBB40FEA9D0056FDDBAE1CCC72FC101AC94859A9AAF2E37E2 -39BA606FEB4689E4E04642B70E58DDE5DA6608E318A70E24B6C7B88DD7E5BA52 -8FBE8B99BA85C5444FAFA046574C9160A0A920DB544419993BC4A1E9703A3D85 -A97827D2AF45C8379398A4D2A9DCE175DE7008A138BAE08B4B9A6B52D73D1B24 -6787C31875B04E35112F6A8AF5A2F8AE9155A80C36C6E8EA83642397717383F1 -EA877B01DFBAE379529D16D1E0CCCA4B8C8B94F979251914B958F0713859605E -6DD76A27705012B089059F9490AB4238107EF9AE1A556CFE69360AE47F66AD68 -CB48D08CB5AEE83A3A9D77121D2A599746E7B7C839B4C5CDB41EA0ADF56A1375 -8BB21918F49B70AC01273EF2C388F118806FAE2743E1DB3164F4D5F7893ABA6C -B5C122C9290394F2A216261845738E66B7650C8CEEAD7452BF6AFAF54C8EBDBF -DA5876569BE294EEE5B54F23ABACEE7FD554998C84B6450BDD689A10FC20845D -89F972F368648CB8CF864FF6648AF21FAB210BF101BFDB3B354C6659E761EEEA -31892585C32A18FBE8E4883D9D5CC48D84EA2F9FDB73638E10CAE3F75C3D9E57 -6810FD5239352AF7DC7DDB3704CA7EC8FA4FA3EE75FDBBE9AF058FFA17A32A17 -AA578E1A1708E8CB257CA968EEB34140804C224B2FC49643E5B3A3F7CC5E6C75 -6EA9BFD9FF9067675CF025636875588F8C7CA7E41654D7D3BD7A388B8F517686 -4DD89A12B204251AD96E3FBB73B5BEFAE355E5BA81EA1A1F17DC49647224A9CC -0CA44F3D25CF352E184544A710CF6EEEE3E73DDF1366A99B07F47E452623FF61 -B2D94549A80ED356E864D58BC00DE620D39A41C8CC18B5301CE74AE512F6B8A6 -72CD753E7161956C6BD11D375787797BEC1B061237307B0E1E08BBA7A94F422C -A77335BEED64C6AA2E850801FBF083E1DB91776FE9F7C6EFA3278AE93AD6A58A -193AAE6FDF8B15B529E7A5A543609E3CFF4D7CD3A121E0871CFBF0EF1D6E39CD -552A2C1C3160D13787E0F01B2C405B8D46A802F8026C5CA738AADDA72AC9B78F -5957ADCC3BC0A3C0A201089663D1FD6B68E1D2020E83BB50327141534336F1B0 -9B264841F663B1BFD914522EE29C20E22AB6141AE15090302ABAFF5CDBAB2B26 -84F3BEC919127A72C6E1E35A7D69B367D76481231A33AF2FEB9470F35872DE5C -50F82702B55FB3BFE33CB165015BE9F7CB928769DE116F207DFB5F6E1EAE31FD -000D15ED943A1A30C4B4048AE9E7D91BC1B1CD64EC2C24DAF572BEB3F0785AB0 -0D74341DB2D399B39FD5A6EF44DAFA7933EE532E6D4DF024EE9D4D27C88B25C6 -5CBA87237B30917F6F7D7EEC1BCFE774B4D7E0859EF5E07071B58EC2B074B288 -E0FE19979B84ACA7E6E7FA1889DEA18A119E2509CCFCE53D0AFA66020624CED0 -C55C31392AC12110FCB8C81BD289FE7B6330D7A5F9B07994AB79A494F370A732 -94776A8C2B5E557C2F5CE0CA852092F2181C4EC8ACFB01D197AF975B5DA482AC -59BD5C70267E811E80525111D17BCA8D53EE95A843F1000BE05E93F507113ED5 -751D6970485082915C28A673008B4F9398EEE609E483D001296F181783423B9B -7BD78EBBA0CEC7D10F35C23137BF69AF40DEEA478923AC289D554E6837D380F1 -5C3A29F97B3C2EADE26B9926D2B7F83289B723032C1385AA809D0B23B093D4D1 -A0A9087625FB595C017C1B0C1029511225AEBFE7A52AAB58A9BFB740DEC5AA88 -6F02290D37B03E3EB90A821E4BBDCD96A01A7A23FF3BEA2216A41BCFB63AF555 -8A7B9D2211DD290DCDE2A28BC6E1F96048CB9DF02F0471BB1F9E5EBA85E035B6 -3926CE1E1E97DA841FBA83D8C95717A23664FB840AF1DB06D0C47A989BBD5B9C -3E710BAE7A7C5BFEADE6F96EB056E6E702AE6A84814E0043E61B5A03B7A717E2 -54CE4FABD79B8F2CBFE163F05B717A76BE430F459AB5EC6BE60F6EE1BBDCBA1F -5DFCADAEFF23E029C48C33D5844673334FC54EB282C76357D93593A34E099E27 -0D29C79DC8B927266DC6E71FA8B2804AD0D00FDEC01917E7499F2706F6FE9EF5 -EEF6E24581BA11ED1E6405394C85E81E3ECA373279306298078DA538EBDBB62A -62AD89EB75F19A810E7CA9C745A8910129B1DDF7C70B5853B6395871DF37E468 -73C456D0A83C17DF45B7B242A0FD09D2157EBD8B14D4B852766F11962EFD1B0C -BBCD3C398DBBDDB157F80CDA579478A9689C720C026372B13B363CF23BA8D2F0 -0828BBE088A6DF3EE50886D5D79282B82145D5B1FBA13CCABF9C4E94F66A145D -F1BCCE4FDB0AA925E131B4270A48D25365090B70EF23F92ED72E770744059753 -1AC58E87A3A8B5F75C39DAB382E14AA485194E650C3F268EF6DBA0B1A604DDAE -7A151A21CB7D411E77289EF01A99A4332EEADB57372D43230B804C90FB1C08BF -201C3B7ACECA45D6A1DE107A9E231BA5CEB149F40D71C67F1F7ACE8DE1271368 -FB5B447454BD37B8BC43C65F6E8733323AA43FB5F83C4FAAB164C3C2DB7A678B -6454FF9EB6C0A4CB8186B895D1DBF0B5382BBAFBE484C5580CB354DD40AEF365 -E1DE1638E582CFB5C1E58EFDF0D3636C95BCB4DD9573F00AE7149371E0CB0969 -B3EC075D3D7ADF61E79E29F83144CFFBDDEB68DAA5E05D30508EECFC43B8B625 -5B533DCC9149E8770F4EFE85207CFA8C1E50D8B589E090DC84EBEF2360B5F3E4 -479E68779E5A24BB722A37A311F3AA39BB04530A2BDEEECB3BC9FBC889E66949 -797E3BFB3D1A1CE6A62CBB5CF5DB3CF99954F5D0CB096CEF2F5431994738CF1F -97FF3260AD2D89FD819B16E53D59E9E0FDF6B56BAD6E0AAF557EFB6A48D029D8 -F70BA32DFC0779B353A4D476B86CF02A505D40815E2585FD03C07B32B14D2B58 -13BEB639824A1FC04E7336470DE07DADD4D25A641B430DD1336F3A1D0F1DB6D9 -453006DC947ED4F2D528C00BBA98BEBBF855AC8C133B68DD62E292063FCCDC1C -0E390165DF8B85C94DEC13270D824E029046C892495BE1303C44FBD3BB36745C -63ECE2B67D2B303DFC22E2FDD140E40775A99B1A8D11DB4ED1C625540E3CC640 -269F338D8B04A713CC3063EAC34AEA0AF725D31642877042C6DB4E7950DC8C0B -61A322EA288F55B899F0A08F49E22791A2D55BBF89CBF0F1B97317C04216D616 -FCB5D100126A49DD94338D4DC08EAFBE1F08AB6B1792D358C50CFA58B5A66643 -6B801A2267C9843F9C06FD9F137AF780DE55D83F949F1B8CD025475779471377 -B8CF89B2765C0A9C41C186C586629C36C879F3A29D7A9F4E8B8919425F3B0C98 -45CC7A7AAFD70D88E2DE69200ADF0D263951718B2289DFAC4A38311519C07933 -9627F52FBEEE5B9619DE3BAC9B2791BD888B70AFDB75A1999540A1D16E9D4491 -FF5D3E5CE027E7700F1CC85F0BC64ABE5CADF8059C77CDBA5EB1AAD36B1C14DE -1B30ADFDBEA34650116888C6714B1825E56406C96C06B1D37000AED2840743AF -BC2F6F95E7917B32C3A5C7D36FB9F34626C0E61231599C2EE02EAB2DE0136081 -48A65E57FEDC0664DD2934ED21FC98BD568B4DD7BD55A251D16D2CB99C53C96C -0A44BEB44D9714F33CEE323B0ACE7923AD307A8D3B0CE768240F0E8C15C2693A -70BBBD740B3C410DAEFC933B324A3FFAF31C3D03516A6EEA22D2EAEF4D607FEA -4E865D7F6A47EC9034D23464715127986B704A08EA781C5DC9096EA7A95F611F -AEE6BF59FC2F3F67B20C70C7B187E0ADDC966BAB1258DC4B7C64E317BC97F2AE -B07D61A535F51DB2C0A058174EA194DA4F0E44326A2BE85E31A81A2D1032BD4E -945838B571BC43768226FD5171F01C24AF9654A8846AB32147D9E6F43F03DE47 -2E515D0A300BDE126FCF69A4C19DC8F13641C89A674E5B299DD875DD0CDADEFC -54FDED84A2946C4992B9EFF20C93AB2EE98837456C5BE2D691E5BFAD21A297C6 -9FE7FCF5F91AFE1546DA4F96E0F437460B044CD9BB2CAB9422FB85C5E131866A -B392515816F305001A0BBA51343572CB7B81356A0B45E33BC7BDF0F507F1A316 -BC9F6563A5BE869CEB87DE1051F1BE6AD6F267AC18B6A8289215D968BD467A24 -1F5F5233230CDE952ACF0B776D919520E70DBD5E1D5DF82C89DFAB421F98FB62 -8CCA29D0D223FAB23AA37B3609D1E15ADB7F680CB67097444672C9347E47E230 -B7A8E5D4FBC1C05DACD6CE17006D2150F6D378459E4BEDF9CFF363E564D63353 -C2C609C19DAF27C7DE9A91AF2F0664ECE84CF7A8C288F94EC8033A9176FABB14 -2B41009D02B6DC09CF9DEFE893386E3CD5E7331A35F481E18BE9CBB04951C4FF -7F08F5A49566BD7142D20E1A42C875A0EF12892F404BBB128174F8979852151B -E67D2D84151BF68E9C6427BC362CADFE532EDEAB49BCE2E5009030151BE5D2B3 -CEFE4F215E91DCE7D407FB57BD0FA8BED720E20E65FF4CC5BA32C867A1F9DCB3 -EAD136D0F7767485A604CC97D47A2320560D95E9315D04D72BDF9DA3F9E4836D -1D24ED2D707DF128810F218425FCEA314852DD80D48BD08963976ACFB9C44CD2 -BAC78BEDE35470512463B5C6E877BA3AA4749680D05FA3959A0B2ECE7171F1EA -9B963122A1A72DFC9E6FEC7E699A4C6BD742E3D4D570877231AF25FC17F598B6 -3777595305CAABA3696ECFCC725EB41E222403D84DA710D690C155978D93F389 -0F49E87EF135D19682BD2A2EA6FDF7CD3A2BEB6C087643ECB69252BB8678B21C -33F85002D1C82BC7066BFA02EA5E7D671D6450E5297BC91B2121BF46DF58892B -14D581DBF322E89E6BF24C6532CBA0C3897DC13C907EFA52142A018CA820A079 -52D7541D59D864C597D7ED9B9714A4422BCFE03AEE1EF4B6B565B40FF1EB4BCC -ADD77668A46FA7CFAC18AFD4B92C8F76806F81A818663A4DA845DF15F6A2DA70 -67F165013514D26B51D958A57EEBA06114DA17B3A930FF23B0DEC464C8D2F915 -68700C34E684DECC3639BFAC26B22E277B1AF59112FC783B887F37A730766AD3 -F50CFBAC08E0B4050C1434241EDB33BDB3F97E1CDA67721899E4A7EF1DBB3E3D -4AA90E615D06A805EFD26EB78A6F9FFC12E53D5E0FF49909F41E69D10C308EAE -707F729147F4D375E461690B9DA00A94CCAEF8C039B1F6A911A2AFFDE3C954FF -DA1FDC3C137433AD11A357F011594CCD9D1EEF0B976378F8CAF292E67662EF17 -AB786E90392DA9618E9D8DCF87C6C51C3B7371207C66D0B692FE7C290C0B51C9 -EE8B2670B63946EEB7FB9A7F66CD72EF1F890301173FFCE6B8FFED59895DAC93 -EDF39170D6D906FD2A462A1D2A85C1F19D77EBBC4CBAADAF49CE9462F23E1329 -8CD5B445800973B978A460921E8825014983943BCAA4D1019AB6627925B03E4D -DD70D0A1B8694A0D47DE8DF8B89D079C9C14C6B804058B43B39780847D746616 -52ACC4AAFCF918C3D3135F7B82A38162BFBD112D581157A19DA30ACB74502FE4 -40D7EDC6EBCD9BB458F2668D727CBF2E53A9F0121F62678D113EAAB36C24F3FB -831ED9761D907C5DCED84E6A9B242B041D26BB25A88136470F112DA1459657AC -AF399CE6FF71A7CD29E40A19C2503D08372C2A770118ADFFD821159C067B98AE -1170DBDA9AC3B3C31CEE8F6DC8B20C27295F362B52F1E309146EE975F9B41094 -BF28580EEF0DD850CE543A5D369676D7BB9AF94FBECDE2AE3F09848107BB9A89 -97EF34E79201D422622E36F78FA2B80E678FB154FE84D934FA7C8D9AA1A1AAF3 -33D0A40D2DCE86DE6380BF617ADE6C6E5C97A3F056BB062A9097293FDC0BD70B -987E357AD571971CFF01E913BBC1D05F0A7205F1ABAF516E38C02CF41DBD399C -E4B4648049569DE6DE43170DDF91A4BA23E398F82EB411194147528312F04F35 -9B8A36719E8CB6094DF7E2A14B1632CBDB2B1966B59CA5A778ABBBD66FD53571 -CD8B761D8BA11C0BFFA71C58FEF39ABA40A4D01974403D5076CB826315A24ED7 -3D207C528FAFB65B4861BF8AD2B53C748B0A4B34E57771278FC24E98AD52F34E -04AA492C9815EBE676781D40239B3FB7E462DA782BFE82C1C43BD937D6C260B3 -29D6DF902006EA10A63DC2090C9484C6234AB78A45957087E65F0F8979D5A6DB -C952E8721133F3D88316977789EB8CFCEE5085FA4741AA4090B920CE7849F9CD -4DB2FCC872CAC7AF5FEF0257B4A0AD781B6B4F634F370F7F61DBF8BB66578E34 -4DF73EFC1C23CA11C7A6C336BAF988B37E55C20F4138A7B5D8FBDBFC70BE5D37 -AF6F7E6958E062C6344C14249958E8566571B9C79ECC -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/l049036t.pfa b/client/nfsexport/lib/fonts/l049036t.pfa deleted file mode 100755 index df2250f9..00000000 --- a/client/nfsexport/lib/fonts/l049036t.pfa +++ /dev/null @@ -1,1613 +0,0 @@ -%!PS-AdobeFont-1.0: LuxiSerif-BoldOblique 1.1000 -%%CreationDate: Mon Nov 12 2001 -% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. -12 dict begin -/FontInfo 10 dict dup begin -/version (1.1000) readonly def -/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def -/FullName (Luxi Serif Bold Oblique) readonly def -/FamilyName (Luxi Serif) readonly def -/Weight (Bold) readonly def -/ItalicAngle -11.3 def -/isFixedPitch false def -/UnderlinePosition -36 def -/UnderlineThickness 72 def -end readonly def -/FontName /LuxiSerif-BoldOblique def -/PaintType 0 def -/WMode 0 def -/FontBBox {-221 -211 1138 1012} readonly def -/FontType 1 def -/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 90 /Z put -dup 198 /AE put -dup 140 /OE put -dup 216 /Oslash put -dup 196 /Adieresis put -dup 193 /Aacute put -dup 192 /Agrave put -dup 194 /Acircumflex put -dup 195 /Atilde put -dup 197 /Aring put -dup 199 /Ccedilla put -dup 208 /Eth put -dup 203 /Edieresis put -dup 201 /Eacute put -dup 200 /Egrave put -dup 202 /Ecircumflex put -dup 207 /Idieresis put -dup 205 /Iacute put -dup 204 /Igrave put -dup 206 /Icircumflex put -dup 209 /Ntilde put -dup 214 /Odieresis put -dup 211 /Oacute put -dup 210 /Ograve put -dup 212 /Ocircumflex put -dup 213 /Otilde put -dup 138 /Scaron put -dup 220 /Udieresis put -dup 218 /Uacute put -dup 217 /Ugrave put -dup 219 /Ucircumflex put -dup 221 /Yacute put -dup 222 /Thorn put -dup 159 /Ydieresis put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 230 /ae put -dup 156 /oe put -dup 248 /oslash put -dup 223 /germandbls put -dup 228 /adieresis put -dup 225 /aacute put -dup 224 /agrave put -dup 226 /acircumflex put -dup 227 /atilde put -dup 229 /aring put -dup 231 /ccedilla put -dup 235 /edieresis put -dup 233 /eacute put -dup 232 /egrave put -dup 234 /ecircumflex put -dup 239 /idieresis put -dup 237 /iacute put -dup 236 /igrave put -dup 238 /icircumflex put -dup 241 /ntilde put -dup 246 /odieresis put -dup 243 /oacute put -dup 242 /ograve put -dup 244 /ocircumflex put -dup 245 /otilde put -dup 154 /scaron put -dup 252 /udieresis put -dup 250 /uacute put -dup 249 /ugrave put -dup 251 /ucircumflex put -dup 253 /yacute put -dup 240 /eth put -dup 254 /thorn put -dup 255 /ydieresis put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 48 /zero put -dup 163 /sterling put -dup 36 /dollar put -dup 162 /cent put -dup 131 /florin put -dup 128 /Euro put -dup 165 /yen put -dup 185 /onesuperior put -dup 178 /twosuperior put -dup 179 /threesuperior put -dup 46 /period put -dup 58 /colon put -dup 133 /ellipsis put -dup 44 /comma put -dup 59 /semicolon put -dup 145 /quoteleft put -dup 148 /quotedblright put -dup 147 /quotedblleft put -dup 132 /quotedblbase put -dup 33 /exclam put -dup 161 /exclamdown put -dup 63 /question put -dup 191 /questiondown put -dup 187 /guillemotright put -dup 171 /guillemotleft put -dup 155 /guilsinglright put -dup 139 /guilsinglleft put -dup 47 /slash put -dup 45 /hyphen put -dup 173 /sfthyphen put -dup 150 /endash put -dup 151 /emdash put -dup 40 /parenleft put -dup 41 /parenright put -dup 91 /bracketleft put -dup 93 /bracketright put -dup 38 /ampersand put -dup 167 /section put -dup 134 /dagger put -dup 135 /daggerdbl put -dup 42 /asterisk put -dup 39 /quotesingle put -dup 34 /quotedbl put -dup 64 /at put -dup 35 /numbersign put -dup 176 /degree put -dup 43 /plus put -dup 215 /multiply put -dup 247 /divide put -dup 61 /equal put -dup 153 /trademark put -dup 182 /paragraph put -dup 164 /currency put -dup 130 /quotesinglbase put -dup 146 /quoteright put -dup 123 /braceleft put -dup 125 /braceright put -dup 170 /ordfeminine put -dup 186 /ordmasculine put -dup 177 /plusminus put -dup 189 /onehalf put -dup 188 /onequarter put -dup 190 /threequarters put -dup 37 /percent put -dup 137 /perthousand put -dup 92 /backslash put -dup 168 /dieresis put -dup 180 /acute put -dup 96 /grave put -dup 136 /circumflex put -dup 152 /tilde put -dup 184 /cedilla put -dup 169 /copyright put -dup 174 /registered put -dup 32 /space put -dup 160 /nbspace put -dup 149 /bullet put -dup 60 /less put -dup 62 /greater put -dup 172 /logicalnot put -dup 94 /asciicircum put -dup 124 /bar put -dup 166 /brokenbar put -dup 95 /underscore put -dup 126 /asciitilde put -dup 181 /mu put -readonly def -/UniqueID 5078994 def -currentdict end -currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B -F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED -2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 -592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E -44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF -9CDC7A1B1B598C69131DEE005B415805A16D8F1232D9E237CD60D35F0FD179FB -1219B605B80A36CDE0BAAFFA5D97DF370655785FB236544DF1E7A00B7E8AA37F -C23C6BDAB4E3F9BC5EE40602171D028423D88D16F57168C9631090E451FA196B -8B446947EE6233FF652CF41C03ACCD60952FE06298CA4E207FAAA38F192D2D8E -E528AD9B647706997722D73A9203CF7377792AE5780299EB8DBF2C0CBE5E1572 -982D74F81C32E627DF120AE53A1BFC783FAA74AEE3920D208F8AF826AE684F6D -CA41AED94655B6A9E0D60C34C318C7E76F5A52F373693DF3ABC03A72E8DB5E66 -CF5DAD37C9CB9EE42DA592D9DB876C6E62DAC02F1B126C59D1703D3A685C617B -F5A8FD9A630D8746ACEA7B41E9DBD4C47B30163DE05B34AAC3337965660BAA0B -CC2BAFFC0F3446E268C9BB27CE08456549C2DFD8812DAF308024973D7C38E8D1 -30C198D253136F3478334600EBF8C0196ACA6E350182B387FCFEB559F62ADD64 -D9B3C78A9832FA4EB023B07719B4D8A173274C388446C99C63F7C6313DCE4118 -8D2127184AFC17D5651DC1F2B7A763052FDDE142C714658009F5407B20F1D30D -FC978A2FBD8CCE7523A2A62EAF38D6485FD62C13D444DCEC7DBC79CF9258B502 -67CE30E2032F03718CACA3A28F71B941923F52B6FC4EE1731D9BCDEB5F456423 -52BC72B85C92AA0A7EEB5E7BD6470B7FF3C9A68EB479102C6F790F27266B67A8 -59AD2EB5CF5A20B6A39274BAF31E02E1C487F59EA0AD622DD509438C43E7F935 -C21E6FE887846ADF1D3071DB5C1A7868787F92F46D6AB19D56CCC3742B646AEA -2D24DDA6E00C6EC895103BBFB6D67B0C902E176F84AED3A0999C2C99A65F1A64 -A362CFD2DB6885F1EF150D828BA5C685A3A0183963102723AAC166BEBF18CF62 -D0C26D613CA8AF740822182523B26060E255124B1F9C70511B9D338A6AE2D837 -2492D7A67A371CD3E757A8130F8FC9D6B13BFF690257B7D41C012CDEFF5BFCAB -B511D068C9183BC0983E09341008C9717C20DE26E61CF7CA45E59433E58FE1B7 -C6884418C26663988693B995BF1EE3842EFC3E33976C988D6CD724D3B81A942C -2B0BB08F65A08BF768138C8A750A892DDAEF502823D4D6706CCC05451652D896 -38C09DB8EABA368FCF8AAC4E482942DD3D784D9C57675577F107594C0D2E07EA -36553A9785E0FE26534DF886F2B5A906018C48F1A0CFAB7E373476BCF98E7CDD -18A11D8F2FD16699FAEC22754E53EE9C972FF4A3901F94E58E23823A78F40439 -B709D90F48348B8B8E78569C77326B684E4DE7AE9192877076BE05932E8D3FCF -DA09EAADBDDBA35290E3FBC6AF2FDBD178AC051807027BABD733B54DA6E6ADA8 -350D3FF874041333CF88705C96F55CBE46A4D6DB68FFD447996A124603F3E29D -4673137D87A8B33A430F18ECA5DE4ACCF88AA16294BD9A3A98C5081C2112E3A9 -FC7C9FBB704BAD222B07D0D7E9F52BFB316992C7ED6AA618163D2268734D7B22 -3991A8C256CC17087E844BB8FB806A66B9EBA4DCD9FE4DDA936CC61229492253 -2922EDB5B12AEF0F77D693C51D616EA252BF6CF515C5CC737495F33CA41D9F8E -34572232EB422CFDAB03BC194E42DC669948235E0BDA96E50A3B78FD24A8F859 -61B560D847BE4A63E97358DECFA6BE9B86E026176DFDAFB470D57AAD803FBD38 -714DC319655DDAF6BF3E085819C456BCA734BC479A22BB6E8C9FE3E747A5E47E -0FD73B4AF5A80AC230DCB02818AF68A251998462E6DE10AB7FCA5FED041B32A8 -382B480F30400DB936DE1665D9D7592110AACF516FD0F68026AFC371458BACD7 -BB9F0A7C5B399DF9E7B02249526C555137B5A2B8BD3FC2A5055ACF2A983C54FC -5D4862F8867C39DF18824D457F222918FACD5EFE01982CEB5E75643EB7C61F77 -5ACFF22D54B58EB7F0BB14210CBB8A8B562B188E04164F46DCD915E428BA6137 -08420B83F3ABEE130C92EBE3A7C55FE7AAA126F2E9D450350F6331D4FCA8554D -2A0D48865FFB3E0CB9E97847D82F8EA1218B5DF5A9966DF6B7622A0BC06531C2 -54F0589991E10C95A5D1CD2BF64E248D3BFDF25F88A405E95FA254D2E4B70160 -9C8153A5504EE22BFB83C771616044B55E0B9676CB234B0054EB8B3B073AAD22 -B7E7A89C15A80E3344ADCAB949955641E1785EAB2D62B843DDFE4D5974FB03A2 -8E9CD8E6B10A98611126BCACF813843C92AC35DAFB9F14055EEC42E01028431F -2456598FD76BB66F1309B1DA0F7077D86BDCFBC6B628B895011B8D74935F5419 -8902392C6D35EC29225CDC7D49712D1D9FDD66C24C5340C1E05646631902B92C -516F67ECD172F882CDCFE2F957E4F6395D79E9F08E0EF64C7FC0B3118E3BFBA4 -FB752619779BC1645969558BA349F8868B3A3CAB48ACA78FC8BBF33198F03AFF -3862063C0BD73AA486316E28F948E31B89CEA0A0F9F10311483EC0676F597458 -8943317514B3B0D47274A499CBA6F76415D22ABF9AF5AE9A164D3444BD3A3CBA -17682AED8A11DEE04EF6965C07849C06970829560793B5E422DD801B4AD94CCE -AB73562530310B79FCD6F2F93182C05C509C0B2163F9F24A7BD06DED8D50C955 -1C9012158313AA8A548B79D495DAEDFC651D4A6110B98A88047A6893FFFCF00F -03D6848F15412C9200C5AA0525397806CEBF448F92E9EB110EBAF17CB2856DC7 -8C22DA7487B9E55B6DF23F345CB478689FB8522A1FEB34EE58AD8A4805B7CABB -58EA56D1FCCEF7869901EA0229908C74EDE80E2CD07B0E33D17389A434C54E07 -039EC17E27A56847CFE4FA04D65AF20650F8C58D24745FFD76F443843B7ACF94 -01528C2F046C2F8598C36367E9FD009B2B73F52AD9DCB49DF76DF74597AF9AE7 -B43E4988D7CAA34ED694CF0D3F67B9C21680DFD8E925FD4DC6E4458939C1F5A1 -1F0465493E0B8DD3F63034813F557C9B321E9265F4467E1BE3070101675A40E2 -36AF9F1D37162176B4B950A37EB1EFA3642B9E8AE6D5CC77DDBC6E5C0A172BC8 -4EDAD45A7502ACE290A9AB4D56E32245F7AF75D540485611CC79C813CCC61FCE -E7C773F74E26BBCF5EAFC476AB031A04C1BEEEFC881843AC2438988CDDE7CF53 -C18FD1A9E1F1EC264DC2484BDF4867933422A75E0EAAD1AD55A408D81ACF6AC5 -D93D12EED180D56666BFF3479B7EFF185E39D4296C7C87F56A6C1B6B0A99DCCD -F7032FF77585F4A1A22DDF46171A5A0C0601758F64CC10DD4EE4EAB0BCD05753 -76ED93EA50B176B36196DFDF5345E4BC934D9B6CF7ACAAE77A9B0BC66E460402 -87AC5F4CF69ABEC05B6DB517FE1059002B95E4245297272E552E6DFBAE1663E6 -1C37C0C90916037DB040BCE0BC1FCAF881461E0B5960997AB582942DF119F00A -A58EF89B9CA549913721521F259B135EFA1C7E1A5F87550621E31BC7DB07FD3A -85F024F2943F95D66503E8498D4B7038FD7F938950FF22310D1B49E61E395426 -B20B952D57983BF33A707C794895B082DBB035705F8DAE75EDD15A2F75C9DC04 -91A59777B2953CB4A1C8575C4FDC2DECE1737E9ABAF62637B0FB6471378E942F -1141977AFC8032A13866589CDB087995F9F78EFF5713572E6F3F7FE4467E8313 -44D994CA7AE974124CA93BD83C9E8451C956BAF993F279AD7044ABBE7BB826A0 -2757ABB1135A21C9DDD3781A589F9252C51452458CB5C94C4FCD53D3ECCA36EE -263C1ADECAAA22CCF6CE9DB923000BD7FA6B6B12032ED49A469BDE95C5903420 -CF275F03D3637C7A65A872F462F19C6EB25EE8F4E7A49C528806EF56ABF5468E -BDFFAA111A3B5E5DC9C46340DB0563DEC9250C603439F656ECC6F8A5E344BCEC -DAE02EE7F349175C35D8F8CA7715BEEBCD45D2980B707B3B2EE44FFF846C8B8B -8A7C02A56DAF16192B3823283E9876E8079FA3EE07BC1EB30AD14DA63B80DAC8 -D1311AA303A9D56859A4169C20C7F279B7527741D44DC6AB31A2A048C2CCD362 -BAB152807E3F73A621579EAA2FA7EB2BD45AD89E170D4AFFE6ED94A395965E32 -09C600D9AF322B870B34068FB0706EAB341FEEA668275183D38C641A98EC2BB3 -0E6827F3A764DAF871DBF5D27D254FD78E5F99432C405E92178941EE9B1999AC -3BC5E2D10BE76BC555C63167A0408A69A3B37A4D263204F6401A3AFF49398862 -C685EEB99C79D42A7859211B6C447462C894150469429C7E5315F575F8AAA66F -C2DADD013A304894E50EAEE124C86E1AE87AF200C8DEA35027ECD102071F8FD8 -F3EFCE1A14AF5910C6CF5A5A8DC5F09A18285D0384717E4FA0232443D12130C4 -EBAFACCEB4A8AC281F8B4CB5136740A15E7184A2BE166ADD3B307E918D326769 -F99E923C3834EDBFAAA5A2BBA1CE952CC01804000E1BF0A4C80B35E0474FC985 -3F852E8AF570C542ECF37F4CBB940E278FD2AD1249144457ADED44359A90D3BC -9022B23C46F25C74D22A61BA69F1BBDB4C5AEAC64AE8B6AE975822C08E416810 -310EA856B8FF8D17BC79AEB42808ACDDA673BE0BCE980C6A98CD5A0455A1A234 -BDD559C0B31A798D088BA0AD425DCD904E8C3013C388770DC9D03B6249E8A4ED -A49B3A2EB11723B0D6FAC3BDE453E1F8DD6531BA42B6359F47A61B5762AFCDC6 -5AF5130792FE98C5FC024B1DA4887095413C6FBA16EE59F1C8CC43A9FCA40344 -2ED9359597B991AFD2D94BADCE1E96B676A5910BE322CA3BED9120062740AF03 -7DCCF5793E87E7C05D95C4F65466C2D1867518BBD4CA2CEF4F6299E122C2EF6F -9301DE754D842D32BF4FF0C61001FA3929564A3935FF2C291B7E3B4425E9A0B8 -BD326EB5926EA0AC4FAC6D34F2A0715A68D38EAD576CB1FD774C30F0CDF2643B -2DFDBE58F38F0589ADDB6BCA49E1280F5219F45B0FFCD574ECC51BCC8625B1D0 -8A710B796113F13B8115B3EE0267F25C595CDEC16A6E7A016436A5AC93783EBB -443AF8DD342F6BD1F58C315973F9FE0B6D85C50D9BAC10A456CC83D8577032BC -FFEDC71049EBC829D6A419DCC22ED0A3A2E230101CEDC64C67E4F442E36AFEC4 -EFD6AF959D4341CDD27830F364E85DEDEC69E1D375AEEA5805D45B4507275AC3 -95575B9C83CF9529A9050997D5235ACCEB4E79BC37515C7C0205D8C9B827A5F0 -04E21177207379699BDA9805FBC4CF0A9B6AEB09E1E21DCC693E985DDD79C45F -A33322BF56FF7B91ECAED3E0E9C92729CE6894815DB7FF4C61E9F74AEFEBFCF4 -56FAB1681DD80EBE8D418B6B7BAAADF34E87EB5CD4AA2FFDA2E4F238035FC14F -6239B152EF3232277E9AC710AAE11C310DFB02BA392A026C661EBA5669F33C22 -B850CC57351F9EF0D6237C36753FE0A63ABE7C6E11798C9CEB6602D8E33724D6 -CF700E1A9D09D6973C99EB520C3034F8B38EFD43FF71313950C1D44565EBB204 -A614DB50EBC153B59A366BC76F01E5C3E5B8BC09D2B68EA6C154F72D54AA4733 -A4FF05C6A82B0ACE40AC70343FC83133797AE8C6DBF3BE1F6E441D6BF809C71B -D392A0CC32F1625D07869950F857E4E2B3B9979131C4432C44D8F6EFE9D01F80 -86D60FE915A474EAD180B21A24FCE69D511C011A8A6A39DF30F87FB2EFBB376B -7CFB1EDA2447181948D01C49F3795ABCD52344B58ADC8A8DA554849C97E5ED97 -E42F571E5F2D060FFB9E1B012FDD38B53C3AA5172E280B319BB3AC47E4BAF2A1 -4F891DF034AAA2F2AECCCD8C23182B5535DAC76C151F7718C39D549B6610DCE6 -9E154606D564619BE796F85050CBCF8EAB4EABF17FFF4ED07A3BAD022C523621 -DE7FEE8172910DD5448D8F7456637A17ABE96218AA7B1665D361B7FE4427BA75 -8F9193B7B9A52D4AD3405B7DFB1FC79D235DDF354D321B293E5C269616A10E58 -722A50BB356379CE744B3839E7822455300AACB0AD45EC8761F560B8D1073C9A -5BD7ED1BEE741282A92AF285BE80C6C65B2448E0A4A359851945AFFC91C9E578 -2C12D27B51BB4500CFB533051D055E7EE47BCC23D8F8DEE569A1FBE3419539F0 -8FA5CE4D8612AD404EB7E83D4E4A547C2C347D217979AC48E5C081CDE3671319 -7DB36C69C2A31B0F633EBC046CFE969448FF2A253CAC2B4FFDC14FC152BF83E5 -E517DE19FE1BDFFB7A3F276293E761C3B39AD3610E442AA58A7C25BE41C05141 -AC500ECB657643CB128E8AE36F4B37E8EF15CFEB1F8E3D334519A3609CDFAC3D -362933B5A55559CC28DFA89182F89B2FD5013E08A2C583FCFF9CC53A2D5CD13B -1C9786D1F39A02106517DD191D9E5169363FB01ED68C4CC13CD9CC257A2EE802 -C9E40E5C0BE5E65982AA15FBF0F04118EBE9DF64C279AFDFB1197AF62F6E18C2 -3E95A13D6B6737C4579B24E33A0A14DC922EC4C7202A30A06A4596547A791955 -B3902033D6047AD6E44A90FAE4333D0891684A9B1895585D9E91985026F72BE9 -C216009AF01806AB043E51DA494644D61AD7379C7F93F17AD0F164D794DD82B9 -077118A0426BF267C12997090821C5E01202BE01A1BA5CF130557EAF84E2AEC0 -C83C03CBE7F14C63884CDF25E5248C45799F080D281E3F9FD932063E7EEDE22F -0B2F478FF72D54E68FDBF6AF5A8BF8EE06EF6C30A5E061D14A512075A873AE5B -5DF02D81390DD9597AA8E902459BDBE5A6A61BA2E6CEC7C563DEDB2BC950B307 -CF22643E985DE1D7CA84881D19CAE2A205FA5CDE59420353F3EF23FDBF391FB7 -38CE81218276B2960C3923B47EB52A8429A50E28A607D5242312ECA5536916E1 -8624CD1482AF8AD52857F38E4E689F774B55C3946C2012635B911205A760F77C -8093298C200E220697E6F3D210C88B3E46F2B2E931952D42F51FB5426DEDE03A -05004DDA3604F38CD65473D13877822CF615C299308395A213B5D666EE06B0F6 -C1ACC344BC1037B5C95D78BD424522F051CA1C03F9FD11EA355206230ADB90B8 -E274770F8DDCDA7C3910FB07CC477B04205A6434DB34E69F3B69EEA2ED6FBD58 -C6CA944822B44062ED2F5B0AE86AA5F40E0B171D158CA1A57E5C3240A1A721C9 -92AEBF5D4075D78D772E1364F9BB631CBE1086D4EEE58E6B4D6BFDD7581D2075 -EC0FF81EC590A69AB9EA6C38D91A3D763A1A85D9588741BB657A7CE31A9D8C55 -9AA83C9DD8321EAB44CA22827230A11FBC9CB12992204FD936401DCF9A71D190 -C9C7EFF35FA97ED1EA2DA3584CDF3D66C545AE37E2403C3945DFDFC3F08A6C76 -C6E3F7C9238492D7022B904C846CAF40F0D571A39FB05B7F359C869081274F4F -3174CCD65045AFA181235224859AC3B5A708301033D0DD449D0F3315C59EDF26 -94B3AF8F8FCAD728C18B55A9A4283D0A257DE2C36F2066A31EB0E401C34A5861 -1E4DD5C81288469B625BDE1B3734804F726005071BED0BC518D0A1CB8C45CF5E -01E344C48668D815DF1B3087DA5B063E9C6D1232D3337DF90E71D10A306211F8 -A360053722E799E182D22CE80F4B0A7E118806F6D99B4456C539DF049BAF6694 -A9EFC7B847D0C45BF90DEA76CC68BFF4F733D246715976AC5BC56AEEBF3783F1 -15A79B960289C4BE778BB63F8C46237A84D9881B40B9562E460ED08BC770F6B8 -97A739BC2A060A76F1F1280EB07487F42EDC0C9510388CFC618A311A3987F4F3 -B464489A974B2F8C2375351E70C95BE7A7E25777D78FE245195F9920C14688F2 -05F350B893547D619300D36C58A8FA419F310A38AEE84A714BC8D0ADC2166D13 -80BBCA7400C6AF8687E0F9690EE1B71538EA3534E43F035B24532305E07133AA -F43680AAC2EBE60674F991234FCA58A01A4BCD9486599B2AB70FC48E0533CA06 -C2DF386E46617AF45A810EB56C610168AC4AED960EC344187934EAFC3E1FA3EF -F5010ACD71A7A902FF0DD4CC41107189041A71DE11A6BFA37CB035F1C14B8161 -9D70DB95AF381AFB800C99D56A366ABC81B4B463DAB84ADFA5272FFEFB1DC405 -11A92D7CEB4D54CC1C682E3BE2C0C2E671DF073A96B9DBF014588B663BA73768 -A7C3D4D546D8B59BF7447DA941A52D295B8002E5F1C31ACA441F6F55DF69F515 -19212E4BA25B340E9740499986A387E9B379F341B3A2B4C0D0E79379C6A2606F -744E13D2E415FCE686A2DA21195AC7431C9AD3F4165C7635DFAEFE5ECCAE5372 -BF7B107E6363B7C97CABF67A141A2B7ED27B415D2CD730FA62CA1C8900C673EC -373485615ECAA7C4C7A187BA60AE6B4E6200EEBC4F421689E5578A29F16719AB -154C41FAB20E9D262C2BFFC9F6C6394CB841E9AF84A48376BBB637EF6BF45330 -346CAEE1700DCBA3C1E0F2E75340B6FBA1721AB007CA80EBE1E66E785B2C9568 -E570A8101996903075E3E9816741BAD2A30EB96430A5710348109270BA7CE860 -C227023C77730D5CE4D23CE0D48707AA4C314D6E065EF55B5E0A83ED927D68A9 -0421AD3A6BB10F27DCB22DAFA033F15BBD985E2468490DCCBE677EE57061184C -73F22395323818EFB3D0906537F0881FEA258E8ABA6F89758F21A47AB72A79E6 -59C9F0737C23D76F95B80BEF922C62502C533ECD80C618C1814F112EBD7616F5 -D9D42153E5DF0B4F844B66F5985A345E26E93C259D36FED6C9751BFDCC82A233 -6FA4A91926D768AB042278F2142C51997A27CC08DCE7985FDECC2F99C25F5F04 -C48C0C4F532256581490B27931E1A472C7895E90520ACC252E55709DCEB8D255 -45C0B5526F339CACFD8A94A1D58958B239FAB094424412FB699FB5A036BEFBA0 -572D5738B2167771B29D3ACD92667C57B07D7AFC1AB676E600823FEC83003E43 -49F0D3F7CBCA7D7BD764C70247299783EAE00B03C09ED5A6330F1516600BA52D -E1832F3268D38396776D36166E26BCA5252A59D3A9DE42A84969092761BBDACF -6C5E83A69C03B53B10FCF95EF76F91F7A8EDE6E450CE253F373FB9382FC84BC7 -833F464126EFBD42A486308AD1A30680F7C423EBE1597FE234E510FB4F2F0F65 -E6CDCA4D2C5BF86E743A39BBE78D0E4A3D56B04588EB457D96629CE5AE95F268 -87E3B49D66C2BDDDD27E9F1986BBB313E33110F099C9F176D188B7594C965EAF -AA4FEDAFCC7BC9E7BAD2E1C983D596844DFE6F321EE15F109150CAA6DCDA513B -78D6D3B8260041367FA44C058C3EF84A37DDDDDEFFD35AB50664F7DD9C856D37 -D5C6569718DB3A6C869C9DE6257E06ADAFE2FED0A544F5023A4452AF73771AF3 -06B737395348ACCBDC9662EA92616D197226E424520F68D38E80537926DE94CF -13DCCB715204C3DDD69DE77BB00334FD3086F8B961FD7FCE4B565BA524C8EDEA -84EB69E3400A075561A19AC5D2AC8786A68EBFAC2860ADF804AC53BDA205AF27 -37D47F05DF295430915591AFCA00CFC65B428CB41EBD97F229F171C8995887F9 -8F99C0B45CFA0787C9B23EC73EEE85AF1ABCCA5DCADC9124A41671ADD3C33BC4 -2BF955421C3D563B1741C5BEC1F28D2011FC1FFECA792B31C208A9A02C950397 -74ED4874D55F2EC1655102672BF26012D747D46563CAD7C0BCF5D194B0EFBE73 -71C1D68F3AB20B63D083F45945E1C5B21C0FBA4FD11597548062C967CCCDF68F -6578505652468F71B803C9A4DE8093A4D0FE29646D7F8737E565EAA3D9F6846F -5AFAACD20B44F58F143E8CBF9C236938CFEA98EC19AC08DFB881F560A2ABA6C3 -45E6E8499338F1ECC0B7AACA6634485468C0BBED3F99D6A304BB5968EF8345B6 -AC1683C7E9D4EA6BDA3BB7D4EE9E819325D0BD1672B65C0D213DD9B988476936 -7948106DB8A26C2F6A511B771CD57462181CFA3B086CBB508270443C48EF7EEB -7C7F0CAB757FE1A1E62C26C079AD2DF5C2A1DDC919F59D7AFEF92DA0B1B3A34E -9B142C92E8EC6A370DB976E3D112458AB0580EB79E6253D01E59A015278698D6 -38684DCCFE13D476679E1CE55D565D5521684B4BE62D0CFD7FB961989C011660 -E79F7A051AA75872D48629E5A1598D29E8AE353757DACDC027C8408E3E027B8C -2304B2F54CA64306776A2A82017F5C96BAE8DC9D7867857D772DC9F4AB8B45EF -F3CDF3D58B91557E6D39CAEBAA8F3D81023C344B2471128BBB0632FC6F05E9C4 -95D16C636DB9858D1359FB36B301929881F09E5F29B0C2D5D13D4E598E1C086E -70141315351EC33C15AEF4FD6519FFD5352CED5E5A878FBA466F1C0252660F79 -29B1428E9D0467FE26A3E1D22B7B47EE8929F87D906923BCB7192DD94E22DE58 -A49D4BAFF8DEF1078DFC049BB16420F6F968B2F6AE8CF8FFC65DB1AB9A6EE972 -C89FC33EDF480124696DE3FC43BCD111108C9FE08482A3BEC819FF71917C5118 -B38040F48D74E224B495B90667A7A678A9F55DEA4F70953B38F97FB2D3EA9B9A -6E5B19CC035DCCEA31C8FACF62CFFE9DC86DE87815BBF5B7F9D4EC7322C3E658 -BDCE94C84A4D747531AF85676C5405242865E9086E77FD8C51C1A5984C9D8C1C -7B29952094DC47D9062C89BB7AE2279B1B92DE43BFC54C8D236E546D0A3B9B24 -A143F5B47A70FDC724F45AB788E3FD7228D4991B7AB0DAC1588F290FA1884EDD -5A895972F0E76446925A73E616C93E0DA74520929A053B730EE97CAE5FC04749 -18F8E2B87C210C799CB0AB651AD24D9749A2D41DAD03E94DC779312BFB90883E -3628A822946BF8F81023F2C0B3DEF58D73B11493D6482FEB44DB9BAE0FFC52E9 -0BC04A6E50FEEE540E4E8C8BACDEDF32A3F09FADF274150134AB3D62AE0A711B -0B30F3419615E7F6DC430C13E976246B470440E759117045A4CF8CCFDD9F0E2F -E1EF1170FA6B80D192C34F01E472F8CA8978EF531C13D5BC6571F7C3196584E9 -06ED32F98FCF35B50BD2C4DEEC9AF9475B79FFB95024D3ECAB0522B19786E083 -5B86E984FF076AA82F707048BAEF3106EDA9317B42AC8D3CBAF0B9E21D0AB84C -957D20D768C903AC512A947DA6119F151C1247B23CB1B52B7DCB17C5A6A5205C -265B78795B1D00B361778BC7351787B9ABC1CE5E5A58D0B7EA5EEDC3EC71B1B5 -BEE69671010F9F22067E99B01575464E9F34574E1BB7464644968547382BE1B7 -891A84149F9A5F42CC21478EAEDC5567A0D430A296EAB205368B068AE66A1B0A -78A65BD2C23B4039CEEEA7903B1CB11E476C1384A332FFB687F661A368001C71 -722E27B624DA1939FADBB5BC7086FDA5094001B50895C70159DA51BA742D540C -2216A1C5BD55E2FEF4E71561612C02809C69C21A072F46FBEDD83935A9C850D8 -EBDA855336501173E29F765129023E86D29D6CB0F8BFEA01229DE5369B143A5A -090B7315D36169A8E4704BDF62F93B949662CD574211CC8CEB59C02E1A061A44 -0CF5A59A05BF9D4E71F5FE55772FF327119B585635EA460B3AEE5965DE139421 -BF947637683431ED8EA28BF1FD43F8AAAD8FF22669DE5C867E388A30D0677B2A -8168BF8243E3E7D7FE9DEEF929735B1708FD0685C575E96A621EBE96EA15C3BB -888D276E8923D2F7C946B11D5E7AA212219475D90CA4114C879783235D636B29 -02E43A52803BF524F84603DA0D27C8A0EB4B3B84C66A0F270A49A0BF6E5148EC -EF7C6BB67144ED456ADFF8EE21371FD8DEDDEDFA42B0738DB69E1BE864CBD632 -EBED5E9C457FBF80B2D1DADF31A63C86144A1AAE498162AC4DC9E04329792111 -C631C12CDB2281987C5F9E12625B8331C3355490C0139A306F7C0E8D9B3FD198 -D77A0D2980599D64829F5B509C5E88AC242BF2B0D6EABC04E8A25CE812352A6C -8A5EA0335322C561559BD1172211A0A5F5B70A8711B2C277E668A47C1E254047 -298EA350947CB275DBC85B531DEB739A78C504FE2D679AD7D3811237D5349D6B -454A0B44051150C0DDA3728510A321DD25BBFCC7CED07D88298C30225632C5E6 -627DB302E9AC30AE902B82DF0ABC2CDDB55EBE98D1213C397780931F58854D9B -C355F7EE7BC6F526A5EEA043FAE8BD740D2713BCB352811DB18A253291A8D465 -EBD45B9E21447B5670D47815E7D04C00EA15AB089EE92683E6242C8948A3FC16 -50BB0BADA960157D20E3AD217C5DA1563A86FCFDDE2D274692A0EE47D41227C9 -1188D534C7F42858D0087713B9829DB97B31EDC82BD05AFAD4B4CEEB3554CDF5 -56F79FC410FD577693706CEA58F300F8158EAEC1ACDD7B0F2DEC83EFCF850B45 -40A00794BDAD3C43777EC8C9CCAB480D931093495BD55F39BC6D33DFF3ADA062 -EE643B9B84086693BB70A7AC9B290586403B43F4F930894FC0A3A4C9133E84D2 -7A144EE9A60A6EE3AA5076ED1BDE8B56AAB7AC243E8317343FC83ED2AB33D0BC -6A130EE2087C0534521954E77121B2F34D00BD2C6D7B29E6B96D15CB1BE9D144 -6771C1CC311CDE1337E2122076006C84659022B235D597551AE45287BE7CA489 -1B0CCADE0B548A0850D29B6C1F38ECC3E534E37848032818CEB1962A7AD21DFC -F4083B75C000F0A5D0FD565F1737AEFAEA0083F3066B540E93EA4C32BDC0D5C9 -4ACE4E5131877B46D2BAA122680620903552D738E225E3D89D41A391D7F492DE -617FEBB74C31F3193275F2E456E705C0126654C36C9243135BED4ADBE26B01C9 -7366ACD0DF11A3C4DF0771007B319462E4396B8F644D67A5DAD7F747B9FBE502 -02D24645EF82BCFAB980F80933ED035D6E31549503126EC31B8D205EE4EBBF82 -56CC51748F061A4322593ADBFCDA9A704BE5FBEB0E733D025B4BD81056ED0A03 -4EA60DC8B3853A5AA4B3708F0A9786AABE370627C32A82E588C76F8DC6D99CF5 -ADBE29DA22EE31311031FD37408FBB7C160C2F9895DD2F2E40D498D25BB3FD71 -A28B9524619B60E7696833F73B5A20078A6330A62456C15EA5EF488094536156 -4ED0B6A26E6EADAAFE761BB8494E33B4D87820961BB5E38BC45055C5921BFBBA -665611136B7400F3271A865138B1BDD4E6FC6871A4E9AA7E447DA991C4A894B6 -B3D2A552639CCC2EAD55A6367B500F7793F9DA332D5AA3B6A7DDC903B1E5C223 -A5843D031413ABDA79FC810E408C352A0FAD6401F612F78FE6601A45497F67A0 -E4047A1953BD656FBF31FF37789EDB624977D7D7EBD79DFB50EEC4EA3F89CBA1 -B88E2BB110C1BF48EFC58539F2E1B36A5B9CE6891B0DA32BF6CEE62DA5B9DAA9 -B9D6AE4D088A536F7C4AD89D079C9E4866073EEFC46C46C77255420F786D6AE3 -A8F397CA9C3DEE47594C109B794AC7E43001E6CFC374C415E62095C7FB05151D -21675170547234C3B3EE974FE929C1FB4BB2405C28B844C82004F533F4BC6FFE -F62BB9F778F81A3B28C7D26527ED751763B8FCD7EC02F565533433E11C1869A1 -E427023B1041B70252EF1C68758BC8EDC2046266EE0518264C8CA97D6996924C -0EDB3446A9A7CB910CD8A2AEB08B1E35F71F9CE07773F3D2FBACB7D9A4FADEE5 -3B51F1468EFE1E9C7B51DE91BCB86733D77B9D11828F6ADD68F72B405C41CACC -98076A626DB8F7AF19B919834DCE03391B7274D1B1D9838791D8276DF09401F5 -B130C9E744BCDB98D02A68BD1D860A54D8E6564144688C0B43BF0D56917A2AB2 -989EFA8F599520F2B19EF6D8D92138EEB8854546DB669CF14CD5ADC9C8F01DA8 -20F8C5D21D0617FCDC8B1A7D7BF6D880AA2B410A98CCC8F96AB191EE1F64C9E1 -C9AF753B04757489881B2D16459B7EF2F612E658C62C32CE17767209C5FE65DD -38D736E96F29CF8F8B6AB28FE3D6F6F48FC05FDA95BE564B762B456DC4B86575 -014BA2B041B05FFCE349DA27064514CFCE004DB9E05F6C1E516B00A948EAD74C -D2F1CEC1E150F5533B662CFCD8AD232C2666401BFB7679DC7530204AAF2FD7CB -8114E3A2530EAB6F7C75EC5982B8816C7AEE1D69E567C0934EAAEA4B09604564 -B2F5416576945A152EFD7B85B0D1F53D4431524AEF0CCA43EE250C6FB1A6AFE8 -F92C3B67EF9DBD5F8739B064DD4826CDCDA3673FC41C521ABD1DE23EB0700C50 -3D202646191A6B031483AAA52BB73D98F17B361B8DF51B984EAE2FFE0B1F4D5F -DBCA6362C76813086B3296D1AC387BDFAC50164525AD253A46F52792316FB237 -45EE6E4B3B4C56C2420AD3DE65421E5A90D4DA797599905558B336C01856BF9A -F77354104FD93CB2E90B0E5D615A2E2CA4F12C3501D0863396290DD285DAB35E -79A8C8DC6E340A0F32CCBA90FAE28FD3FC95710B0D0C5757D97102EA269A0A10 -652E8B9F9517ACDF09218926563F25B6151D1AA8D79732A403ED88ABFB0E7889 -543FE0D96A0E1245DB8337F8EA21EF2D948C0EE666B4EA53836B33359085AE96 -1709376A742AD8B181DB35FD583EA24A5B43B1294D9A144065767659C9DA490C -29FF12165AE21AB10B49A5FF797E3F079A645648C687ED6F44EFFE79464D5696 -875EEBA4AFB09F3455EC2E0122A7E91DBF828906BC05E6DA2ED9D9BCEE5412C7 -3B6868267C29BE95D732BF9FF6CAF6084159425D3CC6AEDF7E552BAEE821A9CB -1F806C46A138A2C5F6765F015C4C27F6521BAD1A582326333BC11D14F7F5C83D -464109FC2BBA092FD6DB0FFE8C1408856DDA1D6F0A04F831CBBB9BA91D700396 -1F3503C4898EA49E922A556A085B9D50D1493176C9C740FCDDB1A313321B86E1 -E5C5A295BAE5C271D536FBF8B31C95B6F648FAC4DEDA02318904CA443DC63A16 -BFA0CDCA75245A4AE420CD20DD780F2AEA6388F84A8FB42BFF09F9996DCC5844 -FBD0850B5E46824C6C5452E34A39E0A0BFD082E2478E0A0B2AC9253B4326B21A -DF20260F9E9D36004984C074B1419385A1C52B3606B9BFEC246E26EAF79C9964 -C34DA47CFF84D27DD210251C784578B1BEE835AA614695107A4CB67298C47886 -9FE67FEFBEAD028894151095F8D728CBE7AA066B03518E2EF6A0180D050F04FB -12E9E7F3859A223303139EFA0CC71138FB807BD816B8D83AD3AF3B3F42B73F61 -F95A647C354C384BA91BDB1F80B1D756FA5C13BC4AF763EECCA28D2627C81EBE -A34C6BDD97B0F3514F9B1A0E3A30D2B07CABB15EB3EE9E3F530019F5C749D314 -5CA78408F38325F93B97F5856445395F7C3D8B98AB1F11358F2CF97DD723ECB4 -7D9BE2DFC6C0E44AB939F235A1CBC300015BB9DDDF9A0AC9B7EB1EADE2E947DB -BEEA69328ADA6C95EECB9FE886ADF89287461853571EBB307395E2058B2478F4 -703779C0516D8F56B021437EA62B26E57E6A023AEFBC3C263A0DE6F365BD527C -531072303C7E6230266C34FD2C0041839B11D2ECB7274E7C30CC584C8C591F5F -C8950B9A2CC207711B3045796B08C8A43D7E580E8089D0B63E4EFD0F188F26A5 -8EBF298E304C8C104E150950AAC8D6E2EC9F7926921FAD5ECEBC0FBA4E0862DE -4E1E1754BA60C7C98DEFCEB707F12CC44947007D3D645F586A132A3A7228B5AA -79081C76C88638543806730012023A16535D0FF1E28E1DED9989E3BED625BB7C -E4C52162FD31C0540D5D73AA9EC196D29D39192BA969E221FF021DC69F379B3D -06357B828D205E2C4D37DE3B88FECF77B3D533CB93AC8FFC16E8E5822433D678 -931FB87D23452D49ACB5680A3E7C3543D728413168441D4BFAAB9B7833A46023 -D971EAC42B2339992915C854A53C62B68F867122956DE5272FBE60C742B6E5E7 -C8821F723450B4579DAB198FAE97E500ACC86D78FD7248876ABF21B761B9E2A1 -7380FED4EFD79B47D3E1A31A7FE648301DD9F7F4F58784DF0B54AFF457AB34C2 -A493CCF0F735C1C9F3203E59348D53D65FBDB6E24B552DB3CF8509DF3930F641 -E6FCDB4A9F970C1FA4CF1A0F4717338835895255A1E3737A588A5EFFB8FCE73D -7EB9C0908DFFA40F8723A9319A39548E8CA5533794F50F3B6AD6BA01D48A9929 -65261FE523320846602F4FBF5B4375D70D8BDB9A559867CAD2D047A8680B83DB -0DD38FDFBACF3678E77CDAE128A19812625CC1CFA9BACE39E6CAFBE28098C380 -17225012670F963056EBBB2748634B343C0677B09C0ED1D4B33DEA7F07B03E87 -99E229A8364F326D8F80ED4A9095181FCBDE9BC4FA0104B28F9F8CE994F1B6F4 -1316B3B768C81CF7C38BD55AC7820BE48F949730167DE7AB0B62365A9F5A4E0B -2ECFD6F04D3652B9C1BDA8176AF1146B91789BC2BE3664D906134D7723EA4EA5 -6DEBE02A75EE93E24583B1217A61521946F7BB69C2371151D2D44E3888C50FC9 -E49FA7705BD8800AE067630191AEBB2E78C4E3CFD62DE90683910856B7FA74C9 -312EFBC58534DA5656239BBA9E102D33D2E76DD8D170350C83663EFA6D07C076 -451AC8F5F034F69855DF60EC8A88BE7913502E562FB9B64FEDA4447AE1BF6F04 -1F366A5FD382142BA4CBBC451B5470EF3D51B57EAF791499A140BB10FA70A06A -E0B18701CCFCCFA2DCBF92BB59376D462F9D59FE114D3538880F32B7F4140E13 -F386343F0C4074277153D61460AC6A392A0EE67F11C411D68E50C9CD2BC171E2 -E4E73A231FA6311B3D0062FA73B5F5563C0357EE52FA4B5CAA9B5EFB20617661 -9EEC6C742BEF43DB2CC2626A76D03FB70C959A24F269E1FE81AEBE54D4BFCB6F -A56B6B8BDFD3E69788A32BA3072F373DD1AA6787704CB0F7EC710FEB08A82825 -50859DD1DDE613BED2F9F0891F5533816ED8137CBB3D7EE93D723EBBB3EB841D -A4EB010D20B870CC5C2C95E722E77C639B189CD44285870666494C2C00639F56 -D91A6C2A45F4C45D7D904F1799EBC44720410E1A0E32F100FED8D696A7031FEF -CF56C7774E4E568050487F1F78A86C968F82579D9EBEF42C500B23BA00A7099E -275C9BAD491D22755B542FEAC98C1B1C42EABA3A39C1C312767820D264438F67 -1A65E314A633CF3E2FAD7F83DEADCF62117446FF4A4B099A183342916F8BF57F -A3D0BF61D2DC3726FCDD3A4F7C723DAAAA40CA0D68460DC2D990B12C405FF111 -4F5B07278ABC51A7DFE18ED1596AAE6208F189D8CBBB50AB6577E2A635205E16 -F78C97714783DB67D467EDD804B062FA8463BCA130D5A0727BDA392C22FD94A2 -25C674C3B4435BF4436432249C48347B7382CAFFCEF88BEDAA614435269DF406 -B9D5011315265A9525B4919218D9B932F3043B3B2B4287F04F12DE69080CBB54 -A11A3BF8D59EDA74DD90EAC521976C7882CD8571E764B4FC566E3E08B1E7A1C0 -7F16BD8A1C1E4677415E9547DED46BC202BC1FEC8741D71E285B87F8C982EFD5 -C201155719E4AC66CBDC95012913031421A36455AEEAD59F24134B2A78C93812 -12B1826E250AB1987B31C6A20129A2EB557BC85FFCD1DD36C678B5F39388E7C4 -1D4B7BD640ED5EFEFE063C9D91308850548BEC011A487B9DDD5E4F032CE0F094 -D548572784220981B268A932922A79B9B8C16FBE12E6D7EA801EDAE92079407E -00312D7BACBEB5C45B62BE9532A4C81D39658A187E1EA1F4C16624A6AD1A56CE -5077F62EDEF7E3A07084B37731A237C746E6D89167EE41C278D2865055685107 -CF73CE1A574A47AB40792DD4A970204B8498C154CA1CBC5A23F270D44742EB64 -5A7A385B37BE67CC817019EA16BA310A19CC3AA2A5DCA5C010B76D985D4524A6 -3643492A26A249FF85944150DAA4343B30D77D7639F4076350D43D7E33C677CC -8DDC7FC142D1D376E98C8E2AA0310287D51168F29612C4C421293E23C5F120E5 -268BC1932C4F9DD29CBBCC08734EFE71678BCB5CDE4B5BCD8635F3009B631D3B -C2F00A38CF023D09AF6A832A32C7E78F1FB9232FB9AA5FAC477BEB54561F25A4 -BE1C23C41A6B1A8F49D4057050D846A50960E64246361DF2B1F829CAE8A81556 -5DF1055F9DA935D01D8071914AC2A89223C7F14AD4C36512B62BDE4FB699BDD3 -FBDC8628B9430467A2B79C4225F060419087B0CF614464F93AF3165A5366250F -72778A1C0BBEAEA0DB639FD61F5680B6A2903EA8FD9F056F77A68D10B2C7B4B7 -C772FBE5D7E3DA169257F2B6F9E3A1F2ADACBC3A10E1A47E26A58B07101B541C -E72012DEA2E1603BBC157C589791FD069E7EAD5EC41061B8034D22FF0EA7EA79 -87139328F4D74C18721E4773F841DF72B3BD044A7FF1EAC934BFDAB2ACCD0395 -B8635FF543B94CA4151C672719E68D1540047B466EDDA89D3FB44E2D75602F6A -639D9F99EF31C5B04299DB9F3B51A574DDB9346BFF5C978F81246026991D38CA -899CAC9A9E91BE864BAA95C082E6A89C7514FB6518341AAD562C3902A8EA5C9F -413CB578D6712BF142F643FCADEF165E7ADCA15AFEA3A330CEAAECD393DCC91A -75989E3B6D937101C344F859D53534B5CE55BBDE02C4DA5FD1B8350AA76A887A -875ACAF58CFB7B1E755FD2011FEAF1DFE43928AC8E01C09B272503DFBD21F115 -2577A6C990FCFC9A42B020EFDA2E199613B0552B7765928F2EB3C4D7ED2B4D6E -978CB8E88E1DDF4E61A50F34CCACA8DCBCDBB2CB1C747F70071ECFA1F31C9656 -22D28A21D48AA970CA6DB819810006C3037D4637E26B9760F7BB016EB4FE8125 -0B9D841ECE3D5A3704D93F448663998DE3FC8EBFB76CDCB79454DEF45256CD3A -2D180C96F89882EAB95A97E5EE721959642B176298959B934141D00B6C7CF1A3 -B1CB3A19E4BE96C990CF77832C665E6F0828867F3859879D83FF45FC5C4489C2 -00A8FDF187E6723B23F760AFDFBA6A4830611C4755DCCCC43F8DECD983275642 -1BF5B6230D3123380AAD3D3A8A9A60F67DDE88254A13CF536A93B326329A4EB7 -BD5CBCFA582DAFF013E2A4F2A909A6DF1465F8C1DD7649C2222E0DE04BA3FF19 -31A0D71EE85F748F964D6D57EE57DD800F105282409FF2E27A08B059AA17A4B4 -E2D848EBF8C8FC23641E2B517710012ED40350615AEBC5C115D4777117440A73 -C4BE0F4F6D73EF7B35140AD9BBFAFB43FCC0764D82E3AA81F25794DB6ECD7A3A -6B72ADBB483D979591D85D3002AF1B4956F3A7E083BE9D6ACFDF409852500ECD -886D3C4E51169ECECE6297959B78B813586F2075701F256137C9F92399F3E5B1 -82FF6E10B5C4CE5078FA4A71841D9C3C01AD81A4F9D80969AD249DDF63FD9505 -6B152B2AF6D4CFFAE20C111756204BD7BBDDA81A9E3BF3024D31C90D1CBB4B7B -BF83B8C033868615017CFDF7B2FB2DA13A7D65834652CF604DBF9412366D4823 -36486DEB84980FD65C2875281D0AFDFA70EE5011118D1CEFC78FC4D4AE20AD45 -AE7E74346B8897BD97630888CDAB0461B781997541F1C74E240623B1A7FB26FB -C4FE22401B8A4A6239B10D9E897191D185270FC4F2DC7ED13E73F9B0A1F3F0D4 -31C739380EDC495827B4E81D7DCCF8BE6D384ABAEB6447B65FF319284F0DAA6F -5ED58695628330CE770F62CA16248B1E0FB657214115DC760182CF062D97CA40 -BC683C923DF12BF39E725FAC6411359FD71DFB26E8FBDBECA81E03CDAA5FEC26 -07A5A8F6C925582E6C516FEA20488E24CD42A5DFD29DA96E6C9A12EC451D18DD -9464DFE4FD5AB577FC667905D9BF08C7083850C3B3EC67DB8CAA3695DF32C256 -D54ED4483A53AD3AD376590BD1BEC8C5AD3E253B3EC721F4A71CAA6C906742D0 -AB1A043660F7679433F7354CF1A36E59B40ADFF929F87B03B951D1393F50387A -B3E7185DD68CEE7C232EF44B747356D3C81D0A018CA61E48EFCDA4EFC203AEA2 -838B2885F7B626512C631538384A58C478AFCD28F4FEA7FE149D850182A270B8 -D899D8CF3730998BD517CA64AB0A9E40956D4755D455F5A56BE4DE02EBC29B49 -7B800445211A9150A9D09F8C285D67876F5C5925E12BF01A464049BC6BE89F5D -807E9BE5B8EEC3E1EAC7CB602C673D0E2C64F79BAC2E963EFBEEDC5E1C6710DA -290407E7C4B81E3B8BA1D40245A1081FD81E2DEFD90944A67EADAF922C269175 -99CFC6962F9409D9BCF1CB785CFC2B59B8E059CD2A184FAEF63A7E4708F82785 -E75B8EADD1C81D68908B09B9FE30E8EDA5AC37E2257D5C689B1AD942FFC30273 -2327B6A7A6F92B6BA207979CE10AEFA56075103807D6BDBE7397A64E9569C36C -CC6AD742DC9D5E935A8E28101A68DA4AB6224BA4544DB47247A30F98B50D7211 -229703CBF5410F964A91FDA6DD4B0A603361C3EE0B65911A79DD7935BDE86032 -44A74B051ED27B31FBE4B501E20076AD67B32A6908D7614CA95B06DD64B01C93 -14D813CE0EDD0F2FDBCFB731995201F07483A8C5ED79C56CFFA3BA2EB734689B -D0BA4DFE2F46E9325A9E7B6EE2FCA7825AF486E0A4606D4A1E6B8C8439AE7AE2 -347BD7656CC4F48DF8EE3074C98C3777E037E8E26C6369008778C331A0601077 -14EB598297507B9F2ED2BDC03C3E29EECADF0F5FFA1225DC5F27CD8EB7D7199E -F496EAC3998FC12515E0E75A7952C6BB951C8E782145F445E917B19413C1F702 -AD9E0180E4941769351F4DED721C0089ADD66BAF9417F5CBD78BB53F12F14CD4 -71BC0BEDD7FDE799A9306D0885FCD40BF15DE837EAB5A40EBB52CB6B4ED299DB -B12A2D1818F135706AE013BE70F3A60057B5A82D661ABAF018DFBDFE65AA8E47 -AC6C8A798D2F3C772C0BCDEF0A9CFB8BC638AA64F95D41715353D25B2143B4D3 -7BF3852091153F5732DEFAB4D4BE6199E13D1D9258142FAA82F3EA57CDE218C1 -41CBC59F5951625C556F6D38557082F300E341B0EF1AF38FBEC6BBF6EBD87FF5 -921FF53B6C78217355B9C1C17216DD5541FCD35123EA68D57904FB1BD7B9A7E7 -3BDC01113118854E5FD8E88712E1C916ADCB543B264D9573D2E96376A03250D5 -700A0CBDC1143FB85B69CD3455E5CAFD7AAF3D2A2154E2E19E9CC8C233AE6E94 -53A24290D61A03F7CD038D15317FDE765000BCE92199B728DF17AE8D540705FC -237F527B4EE8EFA5A870BBC588090A087B108FB0ACFB705103D027DD942D8F7E -CA2293C9C50DC0CDC960139CC4D6384A6BBAAED1D50EC10A261F22EBAFEB2876 -76BFE0D228A14D6DB2524801192D1F0EF49BFAE7667188B4827008D05406539A -1AFE0979DE52C462D998F769FBF62A45552C6CF1B30059B26F3336DF19093DC8 -2C75A5A9022EA3A6A35C35965A96C673FBFEFEBC0EF188EA9B3B31036CA56634 -F7F89E88C7611B6007BCEE35E423B73A63028078FFA84E73490DF2F564423647 -8ED87859266AE96C56883B6AFA0A46AF1BE64F7A07F9B9A8A69BB47B83E904A3 -A6DB8B582311AA9C2A787CBAC2EB5823F6DA66D4CCF5B5016D179BB50D691517 -130D77A7C3205F27D4A15DDB0D2062C486B59C70D0969CA5F00687A0886CADBB -CC06B136064F97A43BEC08811EA53CA13F190FC6F8F07FC498BFE128EBE6881F -1A4913BD395DD85B683FC2A4290C2EA20125ECA194846444811B0F530D16B29A -6CC24D9A7F3BD5888CEF45FB9BA8598B3F5032ECF39E2A1A3CBE122F100C72C5 -071FC086C9739482C8A19195D2CA3D041EC36C93FEFA520E94E01037567F0A57 -4CF1102DCBF9670740C273E2CCDA3553E267EF8ECBF31F1FAC3B1ED824DA935E -9E52E9586ABBE45F3B5A6409C5E779B6A0768AD6323E76606F20F40F401AE6CD -44F2F88CE5DE95B9CA1711A877EE203769B566E263AFD6360F1312A0AB9CB6AF -2546F112C20A703A01AB255739647E46451EFF522204A0CE985A609083F52A1A -9ABD0B01910B4FA3E4FE3A060791E1986BEF81F9150C2AEB6391AE1F09F1D94D -9BEA9ECB59E7E9B116128DE2205D27D2EDDF96FB50F3E1CB742CED4FDAC545E4 -9F5B5BE0A88FE7B227332D171E14DDF89EC0BCECA370EFA73C40EBB1A20FAE8C -C1B7EAE158B5BE22AA16F12952628B2FE8F086ACBC5F778A18E7B67963975550 -735D4CB5ACA7279379D2381BC97D1F2613F79C32742750006973C036BE035C5A -BA17EA7BDB9A8F098B733DBC954574927A16961C2B7DF2D0ECBCF742FFD781DA -3E0A3A1278178426F4592799264BAFDF16CB96EA4D1ABA4D806C9D264095EF6D -1067FDF90690EFCF0146A1E143798F104534FF17AD762F0355DC69F821234018 -A042CDF7D7379DC718E0865FAA8B0C757D0A19498CEA30513FA12003629455AF -B115BC2DBAC68D4937314FE10CBBB96AF8B3F4CB26CFDBA604A7865584AC0763 -BDA317AFC9906AD0B8DCC5A6A88A0B1ED4C6CBDF5F2BB5A5037C1999CCCF507D -AD3F6E4ACDEA803B4104BD05889027E00B027715C1FFD9DE303C2758CC38AA7E -9CC9AEF43DC69027ACE2AC9CB078FE8290FA53D3F6A2AB73EA241E7A53806998 -8ECC1327E41B13C1F5F79A1C963EB00EBAAC27D716206FE780323CA86495C3CD -7EDE7B2A5753E0FD0E0B62960AA8CFEB2823BE0371EBAB60C6FE9F279133E88B -2F2DC40BB446D7C3E955243C55956B7AA576879BE1EC0F2230796408D654A069 -A93FC77990E9C0D437535FCEB32D61DAD9EFAC776FF20A7110E1F3B3C4D89AC9 -759C25536A1604BBC08D52CD8B893A50C0490691960F833E421739B7BF232BE8 -2C53D766D04FF056E6AAFACA416D25696ED97D10175CD63BAAE9510FD1CCD8BD -06A32D6CA296C24AF84692D043E5515C5C261D8C49306AABF81A6D6977EBE74C -51A79CA47EC3017088019301ACAAB074AC3870BBCF2F7A24760CBD344753DB5D -83C3CAB511E2BE890C2EF39DE85FD5778B70C0CCFB18A7717C794488B1D8D1BD -1B23DA8388227ADCF12A251D7202928644FB9F97A97A48CEC170393E8B261E26 -99635A086A8BDE8DFFF1AB3E25F1A6AC7DFB45723AEC5A0DED5769F9AC15A4FF -A951E7D42EB97247257479E3DEE9E695C3D544785B5C1E6BD0B5F4D1619BA7A1 -623A55DAFC29AA4502274386B438F23EF0A56561EC3DFA3F85A1011338B2E5AE -40F075D94A3EF78CE49D514A237A459E4BEAE702222377581FE3A5A6EA51E701 -CDF405444E9CAAB052DEE3E7834DAC8988EC4558E03CD0D9935DAE536CD28ABD -8BF2392B102D2DA4FC0D219DCC8AFCBEFFD823B324C539E5E8B76E006D596C46 -BD79ED7547ED1DA6E352FE2221170EA158E6717C745BF178252CFE4C75801C86 -95074789408C86526E3E872D606DCB4E37B035482471101D8F75CF415BB55E2B -AD747464B5FDF829AAEE09A6823BAE96F66B1452FD4C25A88934F12F448177AD -135818B74EFD6F812A11CD02561938195F7126DDB92455434EB548A5E1B28511 -DC14E3A398F9D8C08F23B2F89370594F0E6544DA432B9FB693F1265AD432CE20 -8123E5AAE03AC7D2C9D6C129B0C3B39CD79F035754854C2ED206791498E26C52 -79BC4C326BA7053582745DA47D6F8231CEADA2547CBDB6BCC2A0858758D65522 -8180BFA16671793B335DC33670B4C7C99BAB013CEB0913B1AA5D0288ED9D527D -FBF2D7F780292D4EEA768D04580A1BF6D292FC886D00009EA6CEDF31D2D22E89 -4382CA2F0FB37686D30898A9EB923F0A181AC58A4A519DA05A5F8C7151F38709 -0831D20D980FCB1B760C636CA2AF619E226DBC0A68741B659D52635E0D1DCE57 -165B0E2ECE8F37B58AFCB15CEF1E23E0E71CEB8AFB3B5E1A59C886486FAAA210 -71B222001AEE2CE52CA68FC3E8ECD1F4692015206665088B3E52E6C33E31590F -17A4E0FCD13A761752BF155A22AA0E1ED55B70BC00793756AAD810A10CA9C4AC -A3804A9C4D27F10EF567F9592731C95E7AAB6F6CFF2E9413036CC9400E00442E -05EDD9B298BFAD4834737E37910B74063BB1E3D5B0CB4CC774FAFECCAD9ACBEF -EAC03D8EF0141885A587B64C83660E0AC8D9B2BE4BB8FDDE306A625DAAC314B7 -B9C359AA51715B2B0DFA7D7F671B1C5EC2B1BB5624D72B7AC0483F7F2837FF52 -2899193863B63E78A39D926940FC71F00FAEFF9751C0CF42A834F186D3549393 -7A052E9CE214054A6889AC95AC408032D305B1CD6C89083763722860F875F4FF -640556DB2E770A449647988FDBA00083BEE2303682B28C8C7BC163777EB51A97 -A20A3F99A01D5B6F2C183048B5DD93A8D445C5DFD41C909B49D23BE41A60F01C -1D6E704C8C5F9D783C224B70E56009569C54D5F64423D3BFF8DAC962FC050128 -965B9870AC96D51CA8420FA8420FD88F6C7B963822BB292F2B00297C40507A70 -2A32271F34B164F772763415FADDBE6ACF6EF3E791E69EB0557AE5693DB0A20B -1DD6536F9D74BCF1C0265A4A88C31106E169732563B2EC5AAB3C0768AE2DBFA6 -4B2C5F7DC339B4BDBE3704DC48633BDBEA8AB3195E9C4677088C47F074D28ED9 -4ED5F03A635888050524C82BAF1087764A217B1E9585C6C38E41A7A26B355130 -9CD809919F9976192C46D2581F984E71B6BE7E626202B45B414A97BB4963E609 -DAA06B99E772BA4C6FA7DCFBB5E2AE2E8E02358DDDA48EDD8B46AD558C1E98FA -D23EFAA66E98B1C49C08BE57FAF9DF8F246DCF7FF9DF21C48DADCE837A503D55 -BA201BDEEB84553DCE5A0C3E2EF0BED804315BB664EC9B8459E09A203AB28903 -9850DB3898EF211CB25C20ADD50EF5439DD13CBFD14000B15424054E0C2147CD -02098784127BB9411E4C96D30C16706DBA484D3C2AEE11D693ABD7079EAD3AB1 -61EED1BDB6CB6FF66B9FF26D4BD79AFBA78FBC53E7F6AA1E103155B980EEAB9C -ABFAF83A91206CC20932DC36910AD39DEB52E5C0539DC99C056A287AE661B13B -1A2DDE0AEEE340A727006033BC6636C743D310130EDF6383747CFEAF9BEF1D60 -8E851A71F212CB203175FC6A58EFF38A833D588A1AE6457E269045C40E432127 -ACA54E03232ADBE5FF45C23E025665F43DF522F20E776163C6B7D069B0EA8D46 -FBE3A12ABCD9F5C249299B57ADEB9B9AB1444F42837B39B1BC6C4026F788CD51 -93E52D681F719ED741C7C9FFE946F665494F17C17501988A509EC377AEB8C87F -8BB6348134BF9806C11669EC6A43DC9B8FD334416DB537D1AC9311E69417CFBC -1565476D77E4C3A1C96FDF49E1F6D62302B571A6FC3037DB9C2ADA5CFF15A110 -83FEFFFC074621E9ABB9C62CC3969B6C0864C41B757F23E189788F0A0BE16026 -D1187D48AA190E42BA6ADF00B80E44AB5512DDD195C376CBE0825343DCA082CC -411E26E3A71EFB7BCFA1B43BCE6F86720E7A0D2A60DA0ECBC4C3A0BF5FE07553 -16EF96247BD1BEDDF29ADEFFFB4B355ACE88CC5D4A37E7D7817B98B2B1E4A524 -C54434CCC39C7A5869BDE8C5D9E3098CA1B65AC57C9D81D1EAF711423A9FB92E -C20F18C80E22E7731C56F60703C6604EDDEF15F234A46F8659C724595980259D -35AA0847B7E96F0D3B3F4D9D1A82E8742CDD1FA2058770AAC4DDA727C506C700 -9A9F93144600628C46B6E5904B7CA98D21F4E08E6804D920AAF68293C4F0666B -1742FA95AA85FBA95037D9FF7E65F6B503D22180437AAEBF65FA8901C1903EC3 -896B213EA46EF7B5541B74F72EFD07C752BFFD26B8746019D131ED8B94E23794 -A5973768AA9FB961394105930FDE07BF0D08218CB985079BA634D8029FE54CE3 -F758E2C8841D7E2D1D8DED3D2D69E437597B28CA971E8161949BF5B71BC1EC15 -910426E7C2855DC776AE87C7482DCDFB994608C0189B7E24E2F16269068812BB -6F1E98EE8DF82468763810DAD7CE08EB0896F7D5342BDE3609522A4D6670016E -A837BAFE7CA0E712D9C68580B5A30E544C25A956EBA242C73DCC40209CC0E557 -D16ECE17D18FEAD279B4143B5F3C69F7F5087D5CCCC6387CE3745FE9FA4FBF24 -A239EE87218BD2933BF6FDCEE282EEB8C709303B35D6A8D9279917E28FFE2CB7 -7F7843C0D4BC1A5A85818F3417B85B416A3EB78C00CB196CA920155690D58079 -33290BE8EF54AC6653D30FAA959DAE3D153426163119BBE5F4D6636AF877D304 -4E74FE984B62E07CD1BEEBF56A26B5B2CFD7E622EC2211DB6368086807F8CEF2 -259FE58C1AD88A982DA8CC8E3656769F2BEDC9B1A1A26985BC3F4AF421DCA42B -2F70334F378D6ED76EDDB59B3B754EBCFB8B35FA47E9DF5CB209BE0518F9E6C7 -22A2A537A3209892448DF436370F0E5DC5E50EC7691C720B26B5027C2FD0DCF6 -BC303E8D72FAC731E2EDC1E2A70C0E51CA0103E7F97727583E65ED760FD724F9 -D318F10A6F16A98574ED667E810224241CE1E674C20EB3DAF738ED6BBD6360F5 -2BE448328D5279BC25C35F2509B2B77BEAADEB4C8F915C73888C953D40417510 -684D630CC51822F84466E3BD89BBE49D4F01D3A8AB9FA1A4A0095A76E95D6D1C -222FA4123029FC4CF44F1E0BBDC820272D681B7540CB096976F01DB1F8F42B59 -1954DFEF62F91CF5D72849B987118BA52928C213EAC75A50B61A7C1BE41B1AB0 -0EC9DE839CB0657A17D9B40BFB7D1A9E101C359E27168A641AC1821760EDE5B3 -53BC6D9643E68F49F87B75AFF41236A9F59F9929BC6BFBD4344A325F5C6929F4 -B1B977F84ECFAD8F885A3D4CA3C8DA38536BB5B76ACBBDA57F882F372EC4220E -1DE5276AB135BC50ACFE5080E281D2243CBCAB5465F18682B09942C56456A432 -7E6C3BFB691FAD4BD032FA4CEF24C1B06CB560AD996AD5C9DD766FD65D3A9C10 -534B84AF27525C7BB98302D952A4469A17F850AA95AC91962AED0C8FD8632BBF -73D29C76285F9733EC29D5B6C7455ABC96BE7F4A3056364A329158F29A1B69DF -AF0BEF221497937A09FAB0C4870C8EFA15303E8DF5B1451805AA50172FB1A797 -02EA9CAE6D6EF65020201A5A0DF800F80C02FF591D1BC9A4E504BA01F48CDE72 -EC8D0FF70B703E749B60A1589B1D80F9E71E8CDA61E7580C12F7F1410353FC3D -0B1604AC55094DD12433E043D958B66E72B718697A209BEAC588407D4F89430C -DF029CC69D52297D801E441FAD734ED519FB78BBF223A60624740CD10AAB1C38 -56534B7525561DD7776393CF031A5B71344809979D150E08BBEBADC84A7E0036 -870490909D120C9614974B2A06D30ACAB28BF9F812889932DEDD470BF2D1874A -106489BE6CE558BCEAB2B0685EE12F7F8099854ACACC27738BEDC39F1034B1DD -08B9D6A0EFE43CE60FB97E9B4C0A2DC5B9B61944ECCBEEA72915C03FD7E467CB -FCB568DD452C729492D0ADB06452F78E8F619A6D4BE8FAC82B3F3BF301830D6D -2773D4E95DA7FD8C38D69AC9BDE1A779AB5B170120F4B8BCAE745FF4F56266B6 -ED9D14509CBD0CC4DF264613B1B021E8029CC0D22F06074E174B635C4C0DD15B -1C2BB2B53CDE374E4E6520D38D8664E9EF753B1E4D7244E071912547E0275504 -C0266420D5F18027CABF3061B054AE9127C7D13007B03C0A4FF7D71ACB26D732 -FD54BD1227C94BB259D8AC8B246F666D3452BC92CF4264664A28C6A744C13AA5 -11BC7801E7956F4E5113500AA535BD7B5225EB693E8A0A8FA7038F789035EAA7 -B5E227C1CB68C3A4AFBB516DABB82592D5FEB58529BED646E3A0E8C0BAFD87EB -CEF8B46FB294B2EBF7720628A3711AF55CDBE85C92A7B0AB3F1820D6568B0FDD -DDFC91A440CADBC88ED53DA9E7C408BFBF59CC87853203E3FF707C55BB314805 -C0E9695DAE783943C37CCC94C7387974A5C88F1B9FE40CCDC5535A48DA86CBF6 -A6A155F451AA39CDF4C010C66ED11E3F4AC9FF5F78721512E8757B77A301400E -6FDEF7FF640B85EB573BE8D3CF834E45B944B22A01DF1F657DBB58A071584A08 -D6943D1E1A712EB23E749BD181C8FDE4C27CA25B9EEFC1BEDE9E99062D83C20B -8CEF0E7E7A7D40983B8C09871B41CA0B3D414E6B503DFEEBEAFB224D1F129914 -67889FBE3BA7C43423D2851045E70369EF98E0FAA1DAD562894C6C93D76B3A20 -B73E4C54E735613973E6E19700ACFF7ECBBDC340EAD2AF295A2F070AC4433E32 -5678B6F710C5545BF2721D3FF8A895F05F7F5D8BA3FA244CCF3EE68544098667 -EF8DCCFA2BE9DE5342D1FEBB4F074A1DAC4CA2DBC82EF2B85E7C1C3E750AFCCA -1FC22A49350D891C052F46D2C04C50BA7260B0B975C0996820BF66F9DD100B26 -1BF9CAA3DAC323CBE5BD11B75020AD3932499ACE1C5350EFEEACD5334252EAF8 -04B2A70F1027AF7D0CADC3AECD739C9CA5653426CE0104D5A1D5D5893EE0B068 -D5F6AC8F6413214052045D650997D30927FC5283F35F6ABCB5BC05D92A241271 -52E1293BD8720727D530A4B368DF0AC5529CD334BADB1F8677D25593AA974489 -2F9F548874FECC35FC83814651A33BF12C79C53A35108C45AD8B0C1B1EE0333A -61F52F2FD2367D066F3CCB15595B21031EE2C1AA1A76E103978447A34E977FD9 -664B7470201E0B68B4206CF910FB57A357DC43923B0D7E29E7B4B2245097D593 -DCCD25A270E762567ED47BF94B6301D7A996B13CB258872DF5302FDF7F0E7BEE -0BFAB7FB65F0DB0503FBD7C66371305DCF168797BE81DECAC68FF3942C9ED677 -427BC47B7AB628A989B8BE079A81B2CA513D69944B03A21C59E99D1B38E65AFF -392A9E10AE8C6094EFCCA5B4D2CAAACF88B6DD46420FE2858794BAB331A31466 -28D371C206865FE867912F5A7249AB90095B075A2184D676A5C7E257A581F693 -FDD8B34A77CA78F06B674E06E3C4596AE9DBE770A51A2FC5D50DE3744F858F63 -2A810996C917F1DAC470CA7B462684908FA48884514D67ED5BDC043CD53021D5 -9C701A1D62D9791506430BB45CF1362B4E8364A43E7E59EF5F44F78CFF4C2ABC -00CAD79E6C2A9ED58156E27D74959BBBD262EB44271651D95FADCC6993C4F789 -008648C1282411014B9F1EB5EA7F0880A80B3B24860073C2EBFEF40CD1AA93C4 -154CA5BD37CDCCABE50C7EB3E5933124E2B3B5451226CCC20EB0611F509CA7F5 -5B2783812F6F4C1F9119485933D8E441B9CD7B18C88E193114613F1B55BBD2EA -3083766C3123D53F2A968F4E0F4D48D31C3B9DAE4FBCB8CA79C5B53EFA185F2A -12E74835F5DE5CBCF32353991DCAFE8A45336264D7C1DC55EC1249FE846B9998 -2E47E6D855E6C56E18CBBC60B84B0AB44A4028CF9AB16F03740EB584E81491AB -00845F21486A1F903378CBABB122FB199E33C89DAFA54F3AD43EB6A4A3B9759D -454E8E3C14FADB4DEC10C64810D3427F1EB144E47A429C8350A99391C82BB82F -29BA08A51D727FF0FC6E7D0823A4ADB2B40D00A96F00FA7CA1D5C8ABB86B3F25 -5CA86D9C55020908DC2C8371F5BA6D999338C7C9E06B28FC1B1B3E5FEF3AF0AF -FF412A76E841CCE583CAB8B89C0ABFC585D365B7D071E6E35E40002A0F654689 -BD1D5647A800FC5AD97C20F84E9A608F9BB348EE0D3E9A542B4262BF1F424558 -D3E455268D042F048B4760A6C2E6BB9A783C849787F9F02B98C356C1BAD94634 -2485F033A0CA885570C419818C8203CAB7B9FA6290F8A62EF9033713D1257064 -0E305EE5170A4DE71CAD89EE2C0BA62E9E69A9870DE74CF52D0DEAD65DE2A291 -2282FAFEEBC0B936E91595F7C6E0BBD33E79FEB2ECBE04891F1071D631B3C9EC -6305879468CBCA461AF927A3561AE15A463B24461B9960474005F98892057048 -6419A27D3A51461C9BB9A0E8E621ED1F536937FD0BFCA77A3C33C35E11F3C367 -554833F4252C036D579F32DDCD7F4081B4BA73AF51A2488EFD7877D917B2D4D9 -C239AB6DF1638C9BD14BFC9964A0C65963F6B79D40CA9E44A301F437B8E03B73 -0A52683FAA4CB2620D7426916F89BF72052DCC7E24509A893B715C4515E740F4 -55EC935779A22EEF3207C657A6833F73F04206D147F5E427B0414D8F6F3DDCCD -BC895E1FDCD3A7E76D4B21669D5C4C5113959CC62F0B7023F58D771229C2A3A4 -00FA0B6760C8B77E356410A854B23C9BE8F4BAB75482495E621F83045452DD46 -B5F299871544E4E922780FCF0BB6DB666B9EDBCA62703ABD4F3CC69E15728DBB -6C2DF999717533FF7F98ED6934826FC7569A4020DE4B06147865178D420E8CBF -FACACBDA128C17B635329AD9995E6E2033E6CC702D5CEF1F0DE1F25322BF58FD -9041EE0D904200FE87E2D5A672FF0B3C63575D5F7E07F01202FCB8C42EDD0296 -6E657B5D703AF68D26FCA74FBC8076ADBA7F5A4BC58C10D91FCBCB628AA9F313 -71CD61BBAE0B6A6C7B774DE4903676BB3D210F220B413F0B95F43121741523F2 -F65DBBC09B04BE87A030C607A545A9D5791FE4FD8F479BB213662ECA9103027C -01D85141DC897832816392AA1F49056AAE3EFAB417AEA3C79E49E68EE9CBE8B5 -717FB5C3C5E811F51BA685A178DA6DC3DAD589ABB4F8A0A27A5DDCBBB11A5E76 -94B6320110123C630857538E620AF88BD8ED5B5B8A10F1F28A15BE1ADB196F40 -CB04E8A50ED5322AEC3CBF8881D32160209E8FB6F7ECFA70AC58F94CE3810BE5 -8597D5657E39AB15B3E35DDD508F74069DCFBF0CC70A6399C3AF7B04D4975FA9 -31698D10B8E9CEB89DFDEC2989C37FDD417360F39FC6802EEE5E3CFE7DF63361 -758BF4861385D4931323EF38E7348EB98633C83EF9BF627A29219E9F75A1D341 -5C8091A908ACCCFC01395AD91DDB82EB58BD88D5387994A74F35BA04265BC32C -4DF225782658BDAF63E8EC8B5B4DB6CEA66F83961D5B41C8FB62CEBA3DBEDC69 -B6DAF5BC4B541FDCA54825918B9C84E7122D9718D28BF9E9066C8B122072225A -1B79B4A73C235DF52511CCC1E0A3420B35A5598230CBF3C6EBF09AEB6265B481 -304D9325DC8AB8F6853D4111D42724C558761991E953F114019169BD632E6639 -037344F1B767B0DAB524847DCAE3C5CAEB864973F3A3FFC06312A7753F571888 -957ED07CAD5EDC9D04497FCB48446F6C44C6083BE9A31821BFAF1046F89985DA -009025D4AA91058EA366244ED8E64601B374DE230A90463AE4E57D5D995BDC18 -F621E2B31F79439BF5A4984BB6A02833ADFDF4AC0DD58F53BADEF74BB1D4AB88 -90AC403AEB53313D51303384053A941B0AA32C3868582180868D7B6822533E61 -A4C1E26794A2D9F505EA75EA790BA944FCF61B5314DB14FBBB6252495103C7CB -8E355F9193D5ABC556F3E4D5B6CD2B8FCE08570B3B69075E241E06CD9AB790B5 -948176080294D56000A0B7ED21D906169D052EFC220767178ABE60759E148036 -388530AFD262244BFDCC980D432DF470C4243BE84EAE322C4D8EED4C2242F490 -93639E49E5548FAE9DBAA2826176756D46BE3449E33E8C1F4CEB4720D0667DC4 -EF9D390416E580ECB81029054635C6DB6D8A1B7B964CCE4B15B632416804C805 -0BBB666A4AA5038D4ADBA00ECF22EB59FE9E6E4F801CDAFE3E35C44EB6C098D8 -093AF18BF4FAFBC3CF7562B90029D395D58383E75039003351E35057489BB5A1 -6AEBC03506289C918E6AFEF280E437299C2ACA7E6D5D52AA3EA2509A1758EA51 -637645F7CE54EE87093AE38B8FBCAAAEAA2452AC65FE2C68235840BE62B91742 -96AFCBCF4AA8300FDAACB55FAB27B2B29C488628347E9262464EEBC8D13855F4 -56D9775DB23F069E9CF9C84813F0CFF1391D72DB08B0C9A3FE409D8D08C00562 -DAEC5022E11EEF099724E648BDD73DEFF8E1FFBB3F80042554CB0C03158793D8 -CEBB320F8E0A86CC95E5860355F00DBB146380CD6BA35F93F5B8FBAA54280262 -31CB7998DA8B43473EE8D1895D5D85ADB6E5C8D2B5109E57DE3697F541C7B27D -12650F96FC01E3D56F457FFDC3BC2668F8E6FFE82B94D81A648046D7CC71C4F7 -E218F5D5D9F899E5A3A33EEF7EE7C8CBDC9F239BD2C12612519ED9D4E89CA4CF -348C0EA704B46E56FD9EEE336494CF103C93CDADA00AC0CB74DCCBF4737A481A -F330C6969D9925BB1CAAFF8A2D857245B8E4C82A7915D97F7466501EE7195D8D -C35D2B5DFAF50C78686CD5F5717ADC8047B7877FB15E84961F372D03C0679375 -88E4A9A5D2492D28D55FB00ED000E2B8DCF24AB3EB4519CDF68E3FF98B54A1E8 -E4DF661329FC27BDFD47BE63E85A469191E476D0406774727EE99EEE6C2A1C0A -EDCE20F13FD1838EDF3C1E5FD764723276ED5D853E609B0800197BD8E59C1265 -4092D1D76BF60B1FB675B25344D65C0F79C3064CB634970B5ED680EA710FF884 -8078F9E050655644617690A3EA66AF2D9AB40D187B46E22E72001E2A9D3541C3 -5BECA48A812700501568565A8D37A2159A51A89BC59D4ECA20F3328CF48838F2 -B6BB50D0DFF3039160FE2E278D178B673361A3D412BF3ED1554540F1F0A9A1F5 -67C7C4B257B97C6BD1FAC85ABC9E86B175DBA1FD0E9BB7C0DED0D47956AF2389 -64EB6C4CBB3A03A8DA5AEEEA4422F432EEE66860BECFF5BC5752147BBE75D0D4 -BED50695E88D2E9F01FDE0FFB409CCA801EB16F6471181E62EE70AE4AE06B9CE -91079CB5ED83BD82A88C835CA82612A4431EB7979FCF8A7D1ECED31CBD1A2C3F -A586804D66B8A86997A05D349FC01A2796F1892A42979F50B0DB1175B42EFC58 -0B1D3CB8DC992ECF5BA9A6DBD1756C20DBEA6948499F0D245F2CD8D121A8F916 -C0D41F5FD5414C12EA4FFC688344F7EEA2DA6BF2795D4D479851DC004555E3D6 -0AAB1969509FFEE0390AEAA3D631B78EED9370B286B5D2F871EAC4F14FC32B7E -5571510C3C9BE1467125B7EB3C9E161B0254213733C6992062A63C6904575107 -3395A27167787044056BF09BA5BB742AEC0D7546E9D092D2F66D3BF9564F838E -FAB5EBFE6FE458D8FB9BE05800AFFF6924270F06FA0DB61E48F36417F2B84ED6 -27076B8B6EC6F7DECD29DED0DEB9D51DE150938B7E94D09D19F28E3608DE37BA -FEA6BBB3BA06C13F39BFB5268D4BA8D8009E41D5DD8F5C0171FE2859A78C8F16 -8A98E12F32F867DBFB07EB5404B6092C7B04BC47118E3B3FB66F981FF9642C15 -A4A63362DD5D20EC4EBF415D79626385EF9D7ED7B18A41A4C33F3C70553B31A7 -01EC23459FAC1A5B9D320B962D966C43887CF3BEF40D2DC83E843E51C9870C2F -43CB49080C3C477358867A4FE87FB6E9F79C7C7D573B0D65F155B2656F4D33E7 -0C6049E8C46513CC500CC600D7EE5D30D32B9324C89AA10A9D676EAD04C9728F -4A4CEF9925A294F26E6AC63730B4520C43BA5AB4EDD6441DBC3F2B4EF8FC4AFB -1ACA19E714C1CBC4AD114FD0744F84C85F4F3293BBD036EBD4CC29B3B9609F46 -E856F37EC8E33396C89DDEBC43C0A78A3FA67A155E1DCF82148893C418531769 -CB82B1B6357335742E7F712A182C413E8D8192BE6584A907969A48EEBBE5C0F7 -95C7219652F28F3306DE1F83315BFF09D66E3C31CDAB730DABB8ABC1A33C2BCF -046D3FC7E0084877999B7D2A8AA3880006B9D63BFA9F82F26AF0B93372E55EF1 -DBF53C7494E42794097DF15DDBF43180CD643589E2F3A40AF0A1A0D7EAC3373A -B94B1C375A45DF21509C3D094F230B8EF207F4D7EE1B6096FA047D0AEB83D12F -E3AE9ECBDF2C24F3D553DEFFC93ECC63A2479AC22A209FAE85E34D7A6855C386 -C611D60159CBE8A9595DB541849FEDDA99DB09BEEE9499A6CCEE6A0BDB150B11 -6DF9A795156BF845FB89ECD6939D6EBC8615D8FC47911BB34107E71FB3E4507D -215C1A8476E75BDD1B3D87321852AB6A94D21027D35A2199F25DE7F7BDC4C865 -98DD84C89BA03D5498AA3AD62135F0B1390613421D52E2869B87579EA5AEE7BE -6804CDF29BC99A9F7355ABC9E42D21E706B97091AB73D3CB9184013C6D8980B4 -CD5C8D5D13973F342E8FB4467260B23340BF1254E3D9195B1D6AA566976C0CB3 -62B492B2C8D4EC481C5756496FC54DD7A6EF6A209F1E15FE2C3F57821E9E19AD -0A563DD390A89A6722513345EF58F98D65450541A0C5C093E69D749E0759FB1C -DFCA7A4782EDBC030B9D692B3EB1003487863549585E94245D9ED36D5576245E -C189F5E31A033C68BD21D5A477B756ABBD830CEA8D7F0FC73F93352CF95D584C -2593F7389DFFED1A40E6B14BBDEBC5368FE10962FF7A8938227FE9C44AF54602 -3EE2AA0B6D7B4044F906480199E49B3F2AC6ADEAD76C88DC8D22A417C8A4BCEA -D0812F1F513068E700040A9F3B6678B1F51A48592437C79E2BEA709B92669764 -8A058E234468B01F498B5A51E2021BFDC09784C706024DACCA6EC0DF8F9039B9 -02EDE264D7BF8381A66751F4B9FC4734CF608898828B5CC3483C688132FF61EC -E7BA899F45C3530ABDAD48A5B5930DA1BE15ACDA0522A33E87127C559F551896 -40348DF2CA4651C51475B1B611957E11D787F05CA436BBF1655999F1DBE03AF2 -3C83746EF137EE71ACA97CFA6969D1CE5ACBF61900A452D630011FC3E85FE0FF -AB5AFB57483E7ED55221A7735E5F89CB4EC92D5A8C9CD73FFEF46D62F8DE207F -D4DBAD9EEE001DDF0750125FBC59A5E13A921955C6D7CCB1CF8F89F3E00F7B12 -5D358163ECD0CF38A118064862EA04B50B6AC7B95D531C2065BF2CDBBCE887F1 -70650E0772EE5AE10AD67FF178EB51F8AFA0CB0213BBF9757976621EE0058B0C -3AF602DBCC7ABFF5F467B7854904BD7F7E89BD19EEF9A2F7B8E557283AC672B2 -92BD96D87365C681463A6FDF56DADFE485E1B81A7766EDFDAE58F92E33CB12AF -EABC9D80CF4514D8BEBDC6433B990B0AB267D378438D738025AD340FD602C441 -A5A4C63510DED267FEFBF9787BABFDB79804F56C89A602470AFC0E541B46666A -1C167AB82E06BFA1814E22B65355F40813BCA02BFECC086C7E8FCBD845191C28 -7FA8F4BE3F1B4057D192AF55AAE787B0C654468600ECE8A763BF3B5A7324F7F5 -62F7F596204F0A50A5A7E1911418C00849DF24E00AADFBBEBB6D10180E9B5FC7 -BF839E08691661836B5DE3E5041DA4D3B4A458E270B274C82EC58617A98F0341 -C4D379C508B3DA7F2C20A1E7CA5DC9505795944BD83EBF02022F31E50A3FAE52 -7259693253A45AD3AC1D1E40D694D4B33E8A5A09C405B52BEE5EC132C9B27B8F -4C45B3EBA9CF34BAFF627AB8D86755D31472CE8ED453F01E96F74851862DDEB6 -0A8B4C6A0D69783E632065B095924AD3D5B98A8100E52F2058E795639BF91C8C -CF10E8F4DBAC1F9BD167FCB399BCEC1652C81DBAC4B0E37DDAC9998105397E3D -73FC7E53E70028314EFEED71A935C9792CCEAE794608DC13C6D14A069A02FB43 -8A05187E9EE03AC908DBCC7551F1E933B4FCE961926D5B81CC885D8CF3F4CD3F -EEB5DEE1769A5C5D8E86C7DB3E96FA500A2EB89735C55AC3252CC280ECD07AE4 -64EC4F4BF687A866CD8A9806BF96FCB8AD9BA0972F3DBC2971F50CCB4E1A2979 -480341DC01E58273F4086B4FB7C98D4271829AC9255598669F26F5B59F3DE2F8 -9BD2FB9BF3AD79C02B8199C952D7135933BFF1A3B3D04EEE52CA1CB9A15413F2 -158BA8D689AE2F93EF3EE2AA055B2CF2CB6D077AC8F72126FCE95F30471F7AF4 -6267671B6EF1D3F5A932D94B700CF3FD7777FE123129E874DA871CC6F54D69AF -CFB6E499F50025567B58595509CBE1300AB209CD88FC472BBE9C5F8124AEF8D6 -3288921A3932D0374333DF8D0F77881B9012D75EADEBD2F80DA17B5B1CF8DCDC -C71A7E217FBC07ABE2395653552742AD35C5B3A99045B92B320711B18E9580B7 -071C0C1598A58D0CFBA46370CC8111237545DB6353BDFBBA45128109B9311523 -F493DA4EAFC9D6FF5B73A486A8D4E39C582280BE7569C1B272F2942782C52F6E -C26A3904E0EF2926B98038E35113D0D1E6B91A310F30B0BB7971E5EF0D4511D4 -888AC76E95D810A7CF7EAD44883DF3CBD91F1452F901F6448EB8914C3FE434A9 -60166AF573EB5D77DA5A16A33E5ACB089C8E0F8FEACE1F9C48C83F18B685A3B0 -027007A99175E59A6C9609A363748E53C44A1602A39E96776738B54690E9E4EE -A3104B25F24E3F3B77316CED31ED193B4A33C5E8E1CC3B2492319BDE215C1AA1 -DD86D2622627C483F831DC8FF17D9125974521EF53760CEA854F0E8DCEE92856 -7E9364B786F6E7995A3CC87196162C734CED436832DF7F10CBBD7726A1A9FE74 -5AF7E934B5418F210BACAA8C3023598DBEEB4DD2B4C92652B61C76FB1433B9EC -163099EA47869D3BA7C97B1D27503C4C8CA20E2735B650C7A18B57B8E960F8B8 -42E06826FAD393BAF7DE0D21AD910ECCC2D9D5FF7A260F2E88345617B09EB029 -432AB4ABAF89680F39FFF1722917F6EFDA157A5B5158C8A6261CE4FF77D4E971 -D892554EE4D3E1AED976FF227FA98944D159972872D6DBB6E0805F0D7F267D18 -26ACA6D4BB463E6D288CEE66B08BDDB4FC916718B3A497CA632CE6E8FC9AB174 -8EA17C8E6F053F81AFD6D42382AD9AFE8D64B2A4C7D91181A73AC25F06E5DB71 -4506F66FD51B010AE1AE5E82A3ACB0CC3D5BD1224A28B05D2470209C182FA991 -A9F2DBBF7CB018CE87D3EB1D9FF744099C62169EC03A45DF7994D8F42C326A4D -5F320EFB7ADB34F2CF4031455F5D42949CB30B925BD9C5D7F8F0D85877FA7A42 -DC6B98FBBCD08BC4A760453B73CDE333CC60A6A8F2BF2785B457CD11878F84F2 -8FE44CB9E828A5AD27EB965ED94BE35BDD3C6D6FC4027CBB93508F3116A0D4C0 -0E75B6E94219DA65169079555947CF73645A516B0B779D4342A4E65B0C8DE843 -4858368B3EAAA38BA9750EFCD7864D6F931240E80E49A8FB2ACCD96C67282060 -B4751BD16AC3232A53AC9B4DD68839A36615642E76607A784ADF74DB11E2C67B -3966754103EB44767F5DF32FB7BFD4ABD89789E9B5D23E51ACFE4E5ADEE1D4AE -26385ABF6CC8B432096689A9CAC71E086FF2F5A5111EB0F631703C7851538CD0 -D6EB492CD25F666697B3B6C184BC91B05371345FA185AEE6A5AF301128F4B4CD -75597F9ED3B7823282CD05655F3BEB5BD4BFFCD0F0199E2FDB6C9F8FB3818747 -6738C4F7610C3A2F46314B90C0DB9A4ADC56D955FF6AA22574B727D8857F2B24 -8B5D884511ED7190EEA9A71E9708D4AA1B06222D5FE5A4E25314388A959FBDDF -1EA0C85E01169B2AAD698AC73A65400E87B7A9E7EB43E022817C7392CEC3FC67 -D6663DC750D40671F0337A49F2ABDB10AE3EAB8EB746980BDEB2E69D762C19E7 -440F5275C396C3B56C6FE9196ACDE6159F41CB9A554D8320A4D71BE0F7AACC4F -466397A75E981E1A215EEEED4F3A8482A686FA7C695B6D40AE92B4150BD00DE1 -E4FFFA42AAA059FFFC4AC9491C33C05E4D27808B69E9FAE08A86FBD01A35ACCF -46E967E862960EC4FC2704B507FBDF00FB02494D7059E429E80761626678AC74 -0BF0108F8B03A95ED783A10FC5938D9E42D64E914E9A4F04EA06BE4C8D79AF99 -25B19DFCE00972D45CA59A8BA41E349840ACA3124E8F3297C26A6D1BB1B02DE6 -C52F047B55DC672DDB9BC73BE4B39410E9CFEAB0A4B1C55DEA46746AB52CA9FA -761C8C8A2D34944E904879403B0686521C9CFDC8FBC32F4AE659FDA262B41F54 -4D5D69DB0D26B43B68EAFF8C8997A267477ABFCC6FB829632BACD3129BA0127B -1B9164BB9AB6EBFDE99D84FEEC3F04533B07117AF9ECC0BE6845F0854805296C -03C11A27AF920E36D28152A50418A9EDA2F14940BFBD9ABF2F31E84D5D0EE3E1 -94F32CEDFA821CC1FEAFA56758D269643383A613B466305C21A87E58C9296CB5 -DB8DC4EEAEEA89A1E84D5DF6041A12563A0EB66C2A0F59581FA47099D429E615 -1FABC2046BFC23C7E848F53D118239D666F058113C865B01A8D4AEDD8AC89F60 -819C1A3A051AA665A43D3552760D9410843CA004B1F2CD998A3FBED3A7CA2277 -E1FEAA9AD910849B10145FC2E0D6346666DE2FF7C2AF38E2F84CE0DF16D0B90D -03E00EC3C55E5C05AD3A120CB1879E84898995AE5A205721E2AC6F88E5B57FF2 -7CD9D37EAE28F3461181FBBC340BE35601D0CDD0FCAC181EC6E2CCCA00ADEDB3 -6867BA1627D730CA71566C9388C6F0E069BFED8968B67AD465645798D18A49CE -1C34EA0A2DAE4C7D13FBA180C50EEF9827FE456C27BF25FEC28ADD3AD94486D9 -9A697024609611947D03EB461FC8D17B2EED155A46C0825FF872C1AAD02CE9D9 -A2FC62A38F4784B40CC33C298B4E8F7C3E8A3018ED0F497B054DEF36487213C6 -116F39D64454F11B0EBEA532DC3F72A16454A5EFD2A0A702139F6F6647338E06 -773E301EE8FB984CE226025F597DF0B44A73629E50D39DBE28DE1852B0C79E6A -1FBB78BCE132753A07F858898522ED3420F671D4EC657B1363D88433F155911E -991DFCD39AF4523716AB392E40BA705784376CA58F5C5F06C71EAB6734C12F8C -C6E8D698345483D4DC9194204501A98315E44C43B38D7F30C00E01F0D1024052 -D3E0C5FB320D54FF4ED525133C55CE2021F9B06130DAECE83115C5E4CA7A5E60 -78A5AB40B902EA0315651E07B8FA6367F01701B9F5460AEFCC9F591678A12F90 -A8CD4150876FBA33C30AC006B8D168BCB4B4D63259127268C996A5A59D12872B -EA4304B8A5A08ADE39604C14416F9B327ABBF977BA56FF620A97FE4F2D4D4181 -ECC349BF0776276405F54C882128121AEA5A07478E2AD6C10742FF6430EC0EAD -752F3541B1CB283CB24D7E37445D4BF42C8BC632D41C4A168EEBD0B086BDA9FA -3D17F6ADE5D0D70BEDCF0A50B1E16055999018B459146125D16689CF811CDC42 -E1563D331618A22EE81DB417DB13ABDB475396B02F8FDB041DF6B099074AE073 -202B439C5956EA33C15AA8F1F6BB27F0160337203EB289BF55D613ED95A97685 -5F86C5FC55B627453171F5BF641E5B6DCCAA31E67DFD68F968EC79BFA39B178A -D3EA21270631FD29031F64621061E60C7E2269645A51A239A207A51DB86CD07E -3BB35993A95FEAB12FF6BA96EE231F1B2935E979AC69CB0CF2416938F5FAEE48 -E813DFFB95D13BB6A92A7A6E2CC08E3789462092F4E72626279E5C8257EACE5D -B3CDF6D4704A729D020C278BF8BBD6474912424702ED4DD0368F30CAE5977FDB -3541ACD80981D99B54976936DA5AA9975B84F7F2A2B2CAC6EAADC5B2BF652891 -FF8BD1DC5BFE7033D9D2A2C79FCFCBE44D84513D542373A9CC8CC6267A6C8BFE -F2FAAF8AE6C30153EE9F280A063D05A9443DC3B99AF1C9C1F2B0D4BBC6804F99 -5167D5481B434092E61F7F6120C743597D4CC8F7F158622C87E0D7FE7595DEBE -2EE42174102C99FE6092CD19A8E424B6DF432EAFC0046595DD05EA58D034F4FC -FD90B00AA18C3CA05F03445DDD30A6F040B51DAD4F04EBCECB1D5482301978D5 -DFED67774A1C1251F2003FBF6C4E2913B259D99C55B25C3173F41AC40933CA99 -2CE8EB0145F68130A4B2960C2BE2CC89AAAF8AE833982768B321DEC8FC8EAA8F -B64A9868E32D1914C46C8A2EBFA46F7C1CF199D24DE24339661F7272A6E34829 -E62E11A0924988177435DA106D7C524C0C2BC1C2AF99D496859326FA74FABDF3 -83FD82C9144B6F03F082E20EAD92284139E45C994018F889A1FFDA5FA2B19B90 -38B9EF87D2B34A7F46AE27BB95E2195F958798982E96979BF23BC7EAFAD3F1D5 -AE454252A06C5953A6553FD93ED295F86F419D15FC76F05B0C15EECD70D0C784 -21CAD58C34FF8689CA2D0A2C9A204D99C2378421A0F57EE9A3E6C9358F3AEEE4 -E9B6A0CC3AB9DB260D68D35E66376A74B26F925F1578737AE6539575B969F269 -872A97EB9E0181BEA5241F9DB74F212F81249B71B82D547D1C9CB6FCDDCFFA1E -700FF34E08147F6E29F10F0CBEF09CD254EB5F9F8D8099C56D859AE9EBA5D4D8 -256B90DE65747C78D14B4FB8E39A67FB1039914026E0CEB6FEF629E1C024CC37 -037DA8F073991235541F09CCAD292E4F7574ED126C99628F6B208661C2EA782F -C74AE7FF1F486B781D89357F70ECDE3F36FF6580E6A0F43F9CEA95BE57AA3AE9 -D82F4D141B9F92F22466637CA739BF9397BB94F60A6F4197C6DF0C4A9F348C46 -29FDEEB9DB680EF7EA71037C2C42D15A966D378AB2192B56D24E2EFFE4421B53 -1930203249DAC898FCBB90EF4FF10B95B01E4CA59B25CBC1517740BF94243B52 -E8B96AD886C9D9EDEE636A4F8722956674D838F57A2B049E0DAAD8731CA7331E -6D5F3CBE866174B949D87043C4686B226AFAB0BC6878D1693D849CDF52B2D498 -729734641F6F8A63D0FCF3139C55D9ECABB27508613C1997A8D8AFD78C8E789A -D7C30F6C58E84FB564093D7A589F4181EEE55EEBF39F369396ECD59D90D44965 -1E267F20B980A4359B462F692E86E04E0167B965B6D958A52CD880FB69F6C60F -F0F76F5DEABE3B0E21592258BC83BD9AD7C087B9028D3F1941A2873FE5D6911C -7D353B921FEA42816DD49B48450049B8F31D7078D0AE7CD7DB8765A8781D9B75 -0547884A23E8DF7778571C650490A77F1124639AA7554AFE3D8589DDFE5D7141 -43B8AF5E82E9098B95F395C2B9988068260570B288D1882D1EEFEBD9E9B0FFD9 -331503DBF1ACAAE998CF3F3452518B30469A6C72C23D3344C4FC1DF7A8A01148 -73FD5F56F95BC98CB2278B583574471BD2E97E95E8EE1860E74300D302602DCB -74D548F0D7377C0A1887D5FB27534A5560DE1D1211F52963AC6C7523FDA0104E -72121BA9D2CF1D84B299F2826B5105F140B890484CD2D5AE03C69BC056786534 -2BAFBEB8D80273CA0395EBE9A3BF3263C1F46093C5B3F17771D7AC85CD72DFA7 -CD767C726E7BF2196380E57453AC511C99DF297E4A7D01ECB22A095355C30E6D -CAC1B1F0FC955478F0953EF9CF88940D6FBF6D77BE921BEA61F3F1C939EE6351 -C2F6A29D1F1FE4383BFBA53ECC232C6535151EA9E1E81355FA9E72847EBE8B9B -11B229BE65DFE9774B9B2970C8C08431943ED09CD1A09CD6EFF896F43EE81FF8 -69C777498FC421ADBC40DA7AB46E3C65998092017F8B6BF96FADD768770E8219 -71D03657047E0E6E154CA34E4013D724A8F78B53CE623DDD13A5F7B7FBDCB909 -455CD4AB2062AE859FEC2F78116EC8583A2B002C2D9258FE3DF659855CD98E65 -876383D0F67C2BA1DBDDC0F652875EE767025C2EC6FDDF5CDC440577D5F9ED91 -8F6593731D04B25C2868B3356C87A9ACC98AA052932E01C509DA912B44AC538C -DB92D01A4AD932CF0D48E6DC067795416BF0A4E5B9500977DA66E4B346394D3E -D27939A56887239B7FC7F15F564E51116B615A4900CF3A67F33EAED29CF39528 -2BBF2827BDAF3616AA1740B7CF12854CB51175B088CC6A697B5D5462C15B49D5 -D4E58A406B51EFF8CABDBE91FFCB58E9C8101178FFD0833FF612DF7F99891F97 -6E994A80EFC41B863696FE7EB6787E4AEDF21E8BB6D5270927CE9AD669261255 -4D345A92D79F62F15454A661B4470310C0C7F85545806CAA0CC180B957846895 -BA04D4ABDF3D89D321D9B9C7DBAE4C690F4625EEF664CD0BFE548E057E484610 -1839E6F5C8662BA539813EA1011E77B85B859E5C2D30C27E19CE1FD55E2953C0 -6C9D5E733BBF99B3FEF8EA202DCDB64B8588E0F0A5EE6D3F214321FE15C3C9D5 -9DDCFEF830B4A0C458962EDA665A95F4779CB7C6F3A1FE80C8C9EC1542EC2D9E -B583B37FAF62443FBB3E5A7F6BFE6596DF1E9651216FEBF11803FAE1CDDF8756 -A55D19B3B1898C71ACA59364386B4912DC634E04151A443C6B6C307AA2D3BDE3 -7AC16A5B39744FAE7E9BD225E04A466BEB4F9F51959F3188325DECB6CDE15C2D -66F4C612224BA6A9FC70787FF17B7E0E31F556E2E088DF214ABF9F27C39EE495 -1EE163A644106E1C1C7CF6BEF07009B38022CB5B9C33CA4C62E69DA01BA25CF0 -BCA87377622FF3C96C68D4FF09BE24612DC788F0ED2910FBB1AE8C023B7CEBF5 -86196213453251BF1231B5BDCE182503C9B0E06724133CAD069E14C36DEBF9A2 -5661BFE61BE51624F42EB5717CAE7F05DF20A27F0CD37D268BD50286E891311C -D55744A29736BEA554B466A7AEB02C5C0575EF05CCB1F69D37EC144458048245 -01EA846682850F97310FD68190044E4CE798D51699058F03F5B0035A83F96E99 -A5F7112737D436EFE6A7C60627B700D4B539288D2006CCA437D0AD04106AC8BC -9E411030E00CBCDC3F9357ACA9CE3E6A63203DF968AC474F722B889A4EC10DBB -39295354F28BD8A3A770BCE14091561583447E29292174A067DDBC4A7C638A50 -7A0F05863F435AA2C763BA5CFCF6DF8E39189E79A9178E80A305E8F03534999D -532CA867B055AFB2077A0C7B5D1B738DC0494871F707B12D1EF469EE4FFD9C63 -78FE05E1DA7E188E997AD2C03EEB2CCFDAB1019581FA9C57C8F1DA051A60B02B -C76A5F7419B32AEC483D1EE2E7512BA83AB78C796CF06D6A01AF6C1A517F8643 -141D48E3344B15CC483395CE83BB56762A423322A0AE12786626E541F85C5A2A -79DFBBE6DAC3A2754AEAE562523A5788C3B548B6DA59D3DA207E5628017BFDD0 -A9DE4072882788AA1177C695DBF0BB784F480F831C4FD4B67365B15CDBA909D5 -F83B44B360609163287D7F315CF95B8090B2BA45518F9BCD3884CA9641704A05 -37D4CEDBCF7F3208C7580AD987F7424C459333F2C7B11937BC3AD70EE12EA881 -FBAFDCCDB80A1C05D129E0C0DAA23909BC56AFEA730F64F93FF369928C40F0E5 -CBDB410CF2EF47D49B0F04841B268F954E225ADA644566B2E2A7B93A6C6EBEDF -F6CCD83C4BDD1AF12A016D640CA9CF1BCB0FA48213C25E7359294857E16A8326 -400C324F4D6D15FD011EA1D345CC8585B06A5D34A0F2103FEEDECC9D3D5C65D5 -620710092A213AC8E1C8C5AED11E350F0760D1CD7062BC1FA480A15DE733FFEE -5F428FBF94488CDBCE85D4B65593362AFCD83A782A03F80672257A67EEE33940 -89F04CEE35C0B418BF33F65357EFBA4E3839D5CA447BE8D1E7C14C99A1866A13 -115E858073E68F259F48908E980C8335F9ABEF1109A93C20164161EE5DFFCC18 -3B913D65D9ED29CE5688A0078454080BB624DAF959BF30ABD78B1964C0D38D81 -BBEE68F8C31A647B75194980EADAE5AA18609FCCFFFC73D55212DB091A812A65 -1C62893A54B9E9214A6223EF22E663B0076192EAA8338FEBD91498B875DA25C7 -DB83A8D36542F0818F02717973F1FBF55811A03592A5778CCCC941CB636E6C8C -0159AD962BBB6951D36FE9966DF8111AD385EAA574BF225F06DC016443CDEF40 -632709C6ADDA1A90DC99DC0C4AF29CD4722CC759C1E811676F12D58148FE7DE0 -6FE2C004CA06AB171D171B21D3F01BC76C5BF9C95B7BDED1E82C0DABA460AD4C -B434BFB99978D079BB31CE9B6961CDBED6BC7601A99A1F811E5A1384107A9E79 -4CD84EBBA899EEF9F33583490C3767041B9DC600FB7311C8C606F1A3C3A30630 -6C6B2E51637DD48659A31BAAD4CED67A90B9D8FC4B548320CF65C66E5D0B0726 -B2047D77C71A385C3A77DEB598E24CFAEB307185D6CF4DB6985EA47290BB4191 -F5A5700F9070499C56DE417EFCA43AAB5AA92D1620E38D9ED6E01230409EA873 -F16CF19C67466306F8D5A442B9C619D5108E77DCABFB71F3F5222D46DE8B5103 -EA329DC77AB50E9F8C73455354851AB748246C351B313D14292DCF639D80AF65 -2E765CB7C1CD67DCB2B1FFB4C7C16FF06E22229C6CA1B90DF3BC04F43DE4F520 -604F5459B3E77FD1448F38E411CF8890DFA4625A9A70018DB43BE1C83DF0715E -769DA23B17BFAC15285413BAC8B44E0B8ED023B4CC9F65427E922F7AFFD419CA -20F0E82EB61C0EE762F546EDF4F6C3BF91F991CEC5751CE393A8A1B5A740E47E -208BA82AD0AD81FB31FBDF64A44AECE390218F22B94F4912735351875810351D -7DADE83748BC01453FA6CCB00DB1F253694EFA2F906121935E446568F9C36D74 -22518EDB8490CBFC2A03E3F7C143EC67BE7758D7E018B9D17328E842A71A6DB4 -5653AD77807334DA683403FDF3909AB57EE261D12038D277D445B4AD4B9D0943 -9E1787ADA6156861B188646A3A065A2BBD52DD92CCEC0121BB56AC8961E67A21 -C6C56FAD0A430B0EAFBCEE41F8D7EFA3D1CF92A5A26AB7B1ADFCE7B43BE20CED -4721BDDD06BAFF6F0D44EAAACF15D4BEE561E4702B525EC62BCF202D52EAD25C -90F6F53F4F37E45B94C0E707B426F5D598DF95372790BACB881E0C817FB3CE27 -A8E31CBE57FDF91582510DBAF8CED1E042D592C18ED85C646507E39D28C8A6DD -073FA1DE452C4AC40489B68FD3343DC637070716DA198EC36C2A7283604B99B7 -3389D0F2D1F95455105A3B7C18400F55C617A2EB7EA84CA48F770953AF9FFF9A -B00A4C6DC1A5BB278129E7B98E1124B396DF750E2C4470DF3AB074602CF55478 -F2DD0FED01D5989EE6E52B3728E9D5EDFACAD462187C310B04914E2F34580E9F -D2D9939D2E18753A313CEFE1C6C4EC368E199D5569DAC78B62B967E2A01537E9 -6288410DADE218305D5FDC8B96F258964BEA24E3FFC3C092F7FF5A8ED7005939 -CBD7594BFACAECA3A650BB2D2BB41A9146C83BDF84CD8349989B0B7C46264EEE -B0AB0F2EA1D9911B68E9709D2AA3772094EF0A8774A4ED4B93B45EC22B6D8616 -66D1CB9EA64AE4500209113975CBE220A83B6C74EDDAC5FBC11190A44223611E -C2829BD6E3443F5938C20761F9B1EDF84D060FE45B20C86C3CCB8C7B83D74235 -598FADECA175DD7AC9C301C875DDB055AA7950C93DE8D7016A3D5D2BE2A0CF82 -94AF5DFFD81BB8E7A8B0664EF4426A765AD48C168965DBBCB4A5292E99E329E4 -3B68419B564858738F4419D2AC492DA601D7D4FB8082F16E104F507B503BF9CB -7F40A15D1D6B1BCF03D5630E16249ABE6DF0EDDB568CC19FD9F785F3F7417334 -8738B91915C553906EE1B378AFA358CFD6FA3C815F4EF44DD5BA6D26C6E17CEA -0A29B307C857D5D2CD8C3E506660D7950B82F1DE12E141F4740DE728900709C0 -696AF057305E6670C23DA0BBA5C64A111206219FF2C1CF6FE7B0EF257D5D99AB -C60AEC3AED73831760CC5D22E74727BFCBFE6810EDF4F48AB39121A82DD5821F -DE6F8A10AA6CDECFE7D4BD8E2388631D5941C5DA0F61640103E5C68F6CC413A8 -EAA7D2419F2B6A643E8F9A95F66A1ACBCAFCC7443F4E01B62320EE7DE0689EF6 -B8397698925233490BC6C4B90243E9A72770FC68CBD3854821DF66B785087743 -9058E6DE7D1D932ED00A1AB57D21067A5411DD097EB0065B1EABEB209C5B69BE -87F33EA9E280B71D4B8C8CB8C99123B8282AB57848A99699402FFF93B755ACEA -DC15E0383422646F3F80BA0698A6A51AB1A28169E38340B303950B69B881030B -1EF221BD8E44BB2549234CABFC545DE97DCBF12F75655BC523A2371D5E680BBB -82CC1D799C451E8B3C8AFF0AE63EE353520A2EAF5C4E815352BB98ED6162F08F -E2EBE7F408BECA380891A40FE3691F984D498935B11F7F295E98A256E77BD0BB -4492D8CE904D9CFF530B5A26D14A0B49DEDFA9B19DD80FFE4A56CCF3AC87C651 -FBE675846EE0A998B2BA26234849C4F95B0C5DC2D3E84A26961B1175928BCF7A -730B085C42FEB713C58A2E335CCCA1A5DA7A88F6E2BB015961C14848F61AB3DC -DA874008FE811F38B13959D227AE5B3E358F1D2BB8E2D7FEC13DF0CC79DB6D25 -5C7BC76C29CF9A0F688A0ADCF3D902FB7E9269837D1C59976F19012919F67E3A -6094482E0EB91FA4B137FE4F07CBE4557F414E60EF225666F9648AC754A28E43 -629F1F070299834C1309BC28F0659B8FA58C133F403D61BAFE7F40B6E31D6C83 -EB980B5AD4CE3F01D8547DA7FE177C1D230480F771183B302FF5C3683FC2F628 -8A9E6E5DC9C029E7957CFAB8C1C9C4B2B604812854153C683618749FBDD5FB05 -3F743A4FB268B84ACF1D9ED1283A7DB64A31B78636B4574B8A473679C3A881AC -F7858416D29D3EDB3C2A62604C0A666188BF9287118F092485FF10AC343C31B7 -66C761AE8DF4634B448201A9DB85B0BF06A2E8BE1A762ED37127DF2245084B93 -FB078BC50ABD8980CEE021547ECEC6751B2295819D5F39BC3B210560C383D887 -A4B179D0ECE8C1AC8E0A2F97DF032D1EE28F3C835D7BFA2DB9AEE349E65B73D9 -3C9A367A6C655174DC8180663D37E19C6B5C44031067CCBC577B786828DBB23A -C076FD672CD32D1AED09BF9F38834E6B16F1BDA5A34F063C64AB8EB8864E7D5F -C74EE517DC915F0C77A2DD5923A50AD8A4DC39344635AED890A5DF3E461AEE3F -E362DA67E73CD14B200DF449FBF2D92C27FAF4B895C45F370C93AF5F429A4303 -4CD0D65D1FB3EC103BB5A48C04D675928B6FCE127AB32BF205F2EDAC29B327FF -A10489744E27D249753E5661634753915059E6E2702C2F58905DE3AFCF2D4272 -9BA4DA3E6781EC67AA39B77B6DDE3968AFCAF99554580AF408293DD5CA032713 -CA5B5D28AA46606E627F53F27628FA563C4759D84697781600DE99D895B402BA -870E5427BCD0FC02B9090770CD84BC9061B76A051F6CB4921990A0DB13C2E333 -8CA0E378EBF8E9E507E22979D9B694FEC20378CBC11560FADFE040DA63FA4E56 -9D7D12D7005DFFB82D17C87C9EF63CFBA5CA887B88BDAD23B4816CDF4BAEA528 -E269CE1DB32E79840D3569ECF356984326C1E4B7C20B268FE955E9BD3884EE01 -4BD7CD21031F7623DBE183EEF39AED664EE4A94156DD0887D85F19A27C90B834 -4FC4FEC2F39029872023186B6CFCBFE065D9ED6B332D63847E5EA8DC91C8C668 -2026FAD8E24C00B2AED44466AF5BFD3FF9255EB05F7CDD90826D88D6830BE8CF -2AD621CBC121437726CFCE345418CAE44DE21AA3711E4F9DF7AB331C5B074BF7 -3FD41C21F642266E799450F7D0EBA2DBCCB9D9DF3F331602FE0FC18225BAB14E -26D1A7E72290E42B39172B949F58258D96DC335CAE79C3B583BEAF9F36AF6DE1 -67213D403790B505E753A10C277A6FAAD5327B738517D57BC130A486BC8B4746 -1D46DED8FDDB9C917B1E8D1D6E4DE551B412DBA2FFC1E35473DF49D9CBB20666 -9ED63C06DD802CA9A81BA3631F1CD8671744267037EEF17A82CF746591C63A7E -8BA5F822B443BFEEF8BB6C0717AE87D880BAD61A1A478FFF5883C463DD83CA43 -793AE5C407FA4C66A56592862EA0F626822AA8AADC651E6010A652477E63AC80 -0F32336858B94F8D40E9F9FCAC69E8813C76B5491F4CA8B291CE1E7BCD138383 -E02AE5A5C8A8B13569D813A947CC46F321029906C5DEED777724A1B34A684E60 -90F8205B446B5D744D622DE3632F31DA8EA4E412D8E65E45FF964A545CB8CB3E -654A99A1C4E6CBB8D8C61961403D12CF6BD20E99765BB5E239E8357620DA54B2 -61BC00063389228BCB59EE9565B3BB99F1AAF30D296DF5D34D86B543B41308FC -B5E55F4B0DCB6D3D5D5A027BA1E23566997C78B477E67F00A57F67414ACF113C -877AE58946253165E92084BDAA4D40250ECA51BCBD9EBFF9EBFD6369DFF081A2 -2DE96084D718C88C6DF2D167C11805CC839C7CC393C052FD4959399A9B4330EB -88CC19F2B480CF088E338708B643279D35D68C3679A6EC577997A54FEE8086D4 -94BA562BF63777FCE8EA4E0E59068A8433EF8B64BF8ED59CCE16B7916D9F1E57 -322E144D245577C69E99E84DF2367B1865CA3B5FAA34F4B00D059D09FDAF9EE6 -F57C0D4F73F17D9136F873F1A8A7D2880E7319B3188CDF8451B66E5D08E20BAE -C106696379B76C44832F51B7BFA28572850DC31EA2512E1BC3888224F96A75A0 -8B7738C1B2981A3B89D8D5ED4B7F6C3F6995C893D6C174F4E3A38268228FEDFA -A72E14856DA96125C4217DF38DA9DED696C4D62DBF37FA9FC1466A31047A6223 -DDA2F118E90B180B45D0A6D20EB1BEF9FF0C561BA1D870A01349AC1E42A6E9BE -FDA106D48928D65EC46F2CCE64D61019ECF22E75F743E9E1D0FE98FBF5729A93 -86D9AE0309816B8C5DF3E9698D51BED760CC637FDD3D8516E36B036E7D784D69 -E3512F9AD76F7C3BFC32CE40EAF7C0B7A0B1729E986790DEBD13E2DEADF92C41 -528C9DD1E835CF18CB8489B4CAB7E105CE9D16CE645599199F1D2A58BA2AFF59 -AECDF574F7C2944699ED630718FEF049139CA3F4ED5C0C5702A0DBBFAD074AC1 -78C70DD53C12EC599A5F1B2AEE886DC46426B8A21E059D78AA51E4AB57F8B4CE -5CEEB784C7FF980C36B2DE62BCFF37CF378A7017D8144AB88CCE45F3A07680B8 -32101BC312A020F621AAFC524C5F86BBC48BCF4F7C81B4B2E82CF585F06F2481 -2F8EA6A1BC2D580617140EFBC6B8F7EB7D7E323A27BE3D5AD599C6BEFBB2CDA4 -3BA86E0E16D7264833827DD01E7B4FFE6EE2454820E939066B988DD2345D97E1 -88ED2DE120992C40A3A5A073C1371662E3DE05CEAB8B438E47057EC5139AE5F9 -7CC2A859CEE5F0EB7F062946327FDC5BA33A7E1358142DC5E7B5476BD1AA7AD0 -1C024E313D070A8D7A3D62FB6B64A5FD562263B79BC832D87C60489FA0A2C4A8 -BAC86DFB78D38A6EDDB47D21A596969093A36BF8185535D3D5C987160188B6D0 -5719D2FB8C8F0F76A5A0A8562E34E7A4543863874E81CDEE68C57068734270B3 -EA9FEC6514B36D5F2484079464CAAC1E8BC82B9708E7355FA8F78C9271ED294E -146EDCF66FA86CDD1D47D5590B633CDAAC3E559609D270BB7CEB794F48B5DDDB -EF716CDDD85A9E39CC640E1232BA4E057518B0876B3491AB21CBD1ED1BF51F0E -5B171D6DEB1A7C292F2FAA36E3AAE7C21548BA6A5D681407613CE614A81AB209 -198C5F7A36F2EE329A3B3BC98B1DC8A8D30EED1D7D0F62D187225BB3224247FD -67EDFA0A6C417B3411533CA4B6BC54FACFA7D4D8377647AF0C9D562080BA8221 -B1371213B8B1E28C69C6DDB4448B8A5FED0F15656FC6A229715BF71EEDDCCE88 -146243275714C6C27476BB6AF2DDF878F223318B1ECDC0B8FC4D1010C1299A14 -83169C33DB33166F1BBBA3197AEF05A8600891D61947E919A0002297CFABF727 -0204E391480B6C4ECDFB94567478AE392F34CFA124CD2D2637ECD95197F371F4 -92CC9A34BE0FC2EC3E7A05E25D1D76157E0F59734C3969EEE34E164C7BA3829D -EB3404CA60DEDA0EB05C66D78234729EFDC442BCB0878530CAA0B8EFFF57F74B -9D3F8361A24E3ACEC3A1AC34766ED8C043B6FB579E873758C501F81939E79C76 -BA612E0F349E8DC891303776A7702C082D91CB23D2F77E08FB2EC60EE73070C6 -4E033D300A5D26F59C51241BDBBEE8DD113EE54CF6DB8642063EB84ED1CFE531 -D9E90C0A972CFA4674937455B30ED726FB98C786CBFE0CEC95EB60D2AA279F64 -C723DBDD83BFFC077DB57F399F2C6731145390B4DAFBAB65A25E0B41E617C71F -9ADD86B4CC8312E8AEC23ADF1096031DF225F59D890AB7AD5DA0CC8EFE1BC2E1 -A5360CD6799FA342B89290EA741B84A37CA3D64297C8DC6B5ADC401329873763 -E227DD032DBF2164DD14408EB89FE313988FD9335BFF72AE9A5982ADFEE44A08 -D75DD38EB950C579CB6BA4B381FC43354CD9FDCB691C413BA246F07E81764507 -E20F37B02E320E2E086179CC60350B236E249FF196DAFB94242CA7FDA746228E -1EB82BDB89AE60C453081FC2D1D9E546376F4464E9AEFF63E8CB8D6B47A4D499 -6BB3A0A8744679D7D1C05AE44E98D7325A6402228B87AA3A410367E956D24807 -07581F6AD7932EB450EB16449E1A40E7F250A989FEC92E27AC6AF78826FA6885 -ADC87FD6C0697F41BA2C7C79D777B344037BACB220B1A9A657030A5965E025A1 -F953185214804459E96A586BACC62FBEF3CE5954EF1C61467F5514ACE043D448 -5D038438250F1B85463F8A324962144F9D7E1C328816994DD3A9B31231871091 -5552844DF707EFC3F81FDF4169CEC3A1C38E24FF0F0AFACDFEFE7F745CAAEDE4 -04A092E5809AC0EA02C3F06E384B0FD60AF369F9A9EA85667035DF87C5858BF1 -603E9A419D4D8DB73AEF26F7AD52E9E394557E1B2B257F0DF026A431A192ADAD -00BD4836B2C8B54D646E8EF9E52B0FB19C4FA322409D09BF167CAC5ED3A82A48 -C8FF640CFE6D091EB6032DDCBC50F9A593B5FEF9976C67CCF409F64207FBA557 -77340CDBCA6F7380B9E2B3243FE805C4B69A3BA2FE1830139F10A403CAAA7ED0 -BF5386C7D3BC998BCA4ACD968401DF751A7EE9492A690BF0D521932FB4E63761 -DB383CDC362D8E5A563BDC4BD8D2A1DB5D900B8FDFB5329CFB85603967C42502 -0947B3FAA5AB0A96FB08A464817136A4F5BF988080CC0085CEB42879D650466E -1B972B717B18D5CDD21AE47FA495641374CD156A4F726A291D4E7C5CBC042DD6 -3D119BBA7E7163F6AFCDAA9AF22A83569D2FD35969143D992570D905A90F247B -475E253081579D0B75467A329E5B5F124DDCB602D34D12D72ABEB65E41C5C919 -BB9B1638E41165C33D20797C3755AD71F53FBB70A0FCA76D52B33097C3ADD50C -7CE5AEECB9C3378538FCA2D0C5928150FCAD751DE3611F9E84ED2A0C6DFE70FC -4AE33F879129C961929BAB02BE32CF4070F8F4F0BB0158834FB0C605A3CF5490 -4BED0B1E98A2FC5399924C4D554E41E74CB58A21200E6DD2AA0A734679EACF7B -97D1030EECA997D2371712690F8D8CFC9A4EBCBFFBB9F4E4BFD790A0F961B95B -700A2877241797ADB1CEF48AE70DE669C8A8E990F7EF38F24C269734C4E230CC -FA6B080559B635F5D5F78972786469291A062617CC8919F2C8CE94845E955DE1 -F668AAE68051854B3766B7D14962EA3C322845BCD8A00341B20A2A6A90A77DE3 -EB2757A5DF3D6292033C869AFBF5E58F4E4C0819504B93F88E6F116F39200A19 -FBF1236080BF69C9F77C53413323BC8250901D87175E2402926C33726D68FF1F -AC4C38FB4CF0EC80BF1147AEC15B05F580E4C51B2F5F01EAAF8095B02DECB458 -C2B6D8D951BB2E7DE70C31E4FA5A4FDE49AE7E89DD82B217D6579A00EFCBBA91 -14E991022833D0DF8CF05A1BD852C1879779176564B121F6FC64A795666A8920 -24DB2D57D0AC1341F032403EB030CA99BBB31BF216A87FCDD7282C4497A99AF1 -EF9E7DA614FDE80B811D62C995F5178588FFA0DE8C76E18CA223BE296CED4016 -A8B92C2C727C4E5AEC2F0C56E1D4E004FC3414502FD82A29EB4B87D8FEB92155 -F56C4C27BC1EECDDDF5F224F935CC45D2509E4AF6227C89C20C250F7C823911F -0E1CF6B31C793BAE12A61A6BF5C8DAA299201D9514267D54A2D201E4257AFD7A -8BC070BABCBA91F449CB6F546A92F87ACE058EC39AA84EBFD8FAD238EBCE0D63 -0007EB216406BA29C84FD6B9385577D04222C305114F3B59C186604F67C5AC8F -4546B1B55348E1E2CE449D3A28562FE514F36A77F66A71CA91EED86EADEED4D1 -07F36C67AB83B0BC344FB9DF4960D11FE02EECDBB829B0F2AF39FC9D02E75C5C -5D3C1BE00FD913F35AB9B9F693E7C9BE6B315B35D035585ACA19CF2C7CCAE105 -349E30AA4F57A63149D9262028C53EB8129E0F15EDCC7CFC2CDB5FC190B1010D -9F198949F56402888E3C7892E48408B34D9EE3E9418CFF92B8418498297E2449 -E7F92E983348CB30D76BDAA84DD2797D822D6F26A582F8A338B9D4D370581CDD -34D0D334CA8D7616E448C86374B65CC0131010CEF730785F3DD5ED2E26F27011 -CCC7B554FEDB02B6DEDF48CE76591CC110C65FC5CC72E7272FF63F07516AFE39 -11202DC05097DEDBE384E8DAAA2F2A422565FF426715A849EC159220C8CEBF65 -1E4FDE87CED9414AE86D6D2066F8CE0AFD31FE5A839EAF3092C2974FA170835C -31E8F1883E82EDF30AA1BD6AE0C5FD22DB9B1A53F27E404E2B8595E241843B95 -A9B16F40CAE8F8712E1BEC901165E4B64AABEAA93A544682298C5703620E42E5 -F8536D0DACD0274B1B13805CDC0ACFD5A242AACF29B8881EAF29780B65CFD8EE -21524F3F845BE6D7E8D5CF594B0B15C50A9B5A2620907241DF6100DF4AD96AE1 -9BF9254162CA6386079FB93F1F88A94BCFD6E47B1CA020129EA7F34E9A261581 -615C23C8D52AFA37AF575417C814E74D56F08AB575D44B2D0C17274BAA5611BB -8C61D49D7BA9343D8998110796E4E060523BB6B22F1D5DEA9CF8620D29A5CEF8 -5EDC173ED7142A121F0E472BDFDB29E721A825FEC5013E8794B8D132E994D583 -412370CCA2DCB10E3A5B49778AA5B4489AAC9918D4658F0E43F10558EC41D454 -FF56C8261842EB93FF326EE3856FD0A25AEDC72CF966CF6FF46383C39C44836A -22485CE993E3A0578466FC77106CCD2195126567E11E54EFFEAF8F40BC0D1B97 -634F8C121D9B62648DD61752005891596F40EFCF13A2276A4C187CB66F0B7949 -BE95486034B3E66445AEB24A084F8E535C754892FFC156AF7EA8315A1997D3D3 -FDAB4CD7C426F839FCC9BF4506C3A9430F6963AA8215E44D86ACEF423291375F -F6242DDF87980A9A5E55DFB668C74F123656CB625E5E335D2CE989FDBB269F18 -432F91A9E4D62B32E6B9BC8AB5CA32649C98597DDCDE2F343AD7E61F0F54A21B -449DCD1FECBA7CCFFFB5B2090D90251DF0E92CFF6FCB89B5A4FE39F78E9B817B -90FC9CCC283011B96319FA61E5C1BB9E2A633CB9BC346D08ECB3AEC5A4E36A75 -CF8843027E2B411B4410B5C06F3B83A37442D06B4BA57316A7C9DA5956B0AEB1 -C7A221C939DFB559CF0FD174C3E9D917DAAEF97391558C48DD1BB7992B14A8AE -55B1CFB6678C44305C03297D61D45A23A162A71873ACC77FDE7501DEEA302144 -11A8EC2224408B7B4159154C4B1CDE75D5A80FEC50C1E123B6E0ABB523B90F07 -91E363150E451670DF047132CB503719485BA8058750DF7E7961AC02B84FC89E -B8D57BCC582C6D9754CB90691F65EA57AE3D8A7F61B70AB95FD6C05B0E0D107C -7560C1C8AC53A0C5588A14412A264BD84DF2A164B1BC8CA599C58A8C581DF0CD -C9B9719A9CB243B95A41402C29F2F56C71D253FC699BBDC4F2D2FAEAC42AFA75 -DB38A8EE0398BFAB528832A80D3ED42E9E3F3375F7DA493A936EAD1162DB55F8 -79F31A554D8BF98B5E1CD6F1ED1FF319B61F5743E24FD64F42873E0BAAE0754D -13634CDB4BB284979BA95CA517BCD14F2BC5B7ADF3C105B5FEC0C9A9FC25D662 -0237C84F75CD28D122E5BA85BAC7CD5D8A520DF718AF068A62E2B9D20DFD2E16 -B9DB0234564337ED27C69DE8881A6493AF8FDBB5920CCE09D5C1FB480540C2F1 -980A6D87A4105B168D570BF0CB65E2E03860C838011393C9AF6F6D688FC52770 -EA668A2F714A1F61F77AE35A1F55FF065B799C1028ED8A5E0111581FB14E3CD6 -BE1A98601BDB8B3AB76C58D31A1EC0C72EB5965CA5ACE2E42C73DD7DF21F82D0 -1A3331DFA06E332B68858574FE9CAD3E3D720C17A2D92C53EEE6B58B230316A7 -5AA30C60CC672E473ED311E7D38C4EE2809C29F2E76EA3F5A474E6AEBA84862E -7BD677B6D9AB0C2B501BD929354DF6A3CBA66FE0FCA49EDDD22D6E660085C421 -533D735684BA3BDA798AB2CF9E8523B16389BD242E0D19953D83FEEEA8ACB5CE -5EAA4BD530D3F8C8CD72D3EF90DC038E2307A58D51800A5F9C62025039CCA4D3 -07DA0A0A0263FCB71E20C9DDC7F26718A2D1B5882C7BBDD3244701B62D890C48 -5FAF33407E9A5E4EA5D1C6910815BEECBC69FDD837E51154E84FF784896EF91E -DC45F60F9C2FB8C376B5728C7EA835A807DA811A64C3F8C7043FCECD580B0B02 -F0E23F84CF6335F261F030FB1CEA8C261EB1934C750B34039A5799356B79F65B -1CA31F02BE58D8AA229FD20CDD1BDFCF6199B6C5B9FF6D63C3585D3475C58E79 -8FCC21AFEDD5D5CB5ACC9B0F6AE689BEA23DD30F02858CA6806DB4248C837B60 -09D96D24C0E2CD5F4CD2ED50E60D03CC760D996B108017B26563E5E8FB203D96 -15FA47459C2CCF99556D0F91E5E6DE0051FB6914EA99F0016627491BA5176383 -AA37E3A49B58E488F1D6D37CE2EDA15AC652164007171D4BB2E1EC06F7ED225D -71AD96534DC26F8E167179AF8714137383561BD7EC9C5F8ABB64C334F1AF280C -4E70CA3751C2ABF7FBA2821B286A9F6DDA9E769646D5878F8860F02B8FABA6CC -A82EADF9A45A30889AD551894A018B81093344C6CB0D59D09D6DFE91112DFC9B -5F0387D8727D1963415748D482FDD5AFB001FC249FF5B02DCE1D62F011E553B2 -E767E48A1CAB27FA0237E35464C55CBC199F7596FC2F60BD9D853D825498D381 -D52C5FECDED23525AE02234F8AB609EB0339B06A46BE7AD7DC67A08FFF568B3F -25C071294F839F96C2AE03BC57DCE13855AD7400D7BE881DC5E34720F408DD31 -B6B5A33E2BE89889F0F5868C71602B086EFF8DA6554640A822B59D547C1DA709 -E29964B2E321E2E803684C8E5D64384228714509E618BFFCE97B1298203E144E -FD4E16F8C2B37AD390CA7A59E3ABDD281B2B41738C96478DEFF7DFDF45BD60B4 -BFF2C7E57027AD51112808DF8E36F0423391C8328E17AE3D71B3EA2958720539 -5182BF85FB826E5119E4D56BD5C0100647B190B3F2F671012AC37165C85962B6 -E1679413DE6F824482AACAE6301C9311BBCE073B1349BE7A287D9B6486A683C4 -4D4C541CF4667B55EC959511E0FB0DD4BFDE5F7F71341598CDD86CFD646C22C1 -A2919208944AA9C75A62F1DEF2AB80DF12023564EEF49D56B0D6D05FE2757BA8 -66F35AB485083ABE685486B81B68082FFE98C89CF09D0171A1FD0CB866E94AAF -AEEEC73F2AADC9F1B1ACD6545BCDA0CE039891B541FC674F2D6831ABFFF143A6 -8CBB10ACE99ADAC14E99ACDA73CF808B10E87B42DF4AE186BA18FBF828D0BC09 -A4A1C10FE4C47233B57CAB00B6EDD73A38F345609EA860C884E22597A1AF21A2 -4EEA28727C1A92FEF237B84507B38CAA4C66BF72CB2CF1C7F94562029B286AAD -BF01AB7FFA13A1E0D33494802667C5A3EEF5D51BE02AC508A997B5F09B747089 -2D7C3145EE5A9E7C15DB5AEC8304FB776F15122DF7B939265D4FCC43488EB42B -699CE8F68E943B035FA1F378E5621BCC00C810163737632CAB6826161D90448F -3403C32EB1B52D7FB65149EED419A765D56A05FE6A2706D998DBC84125D617A3 -37351C9C547ABB6F1AB4FADEA5A265AF4D9B45BEC4147B6CC5110251A426350E -60F3172C40805292170B850FB347DD98793AFB38E475AD2BF38F8628987E3F50 -651114D1527F030ADA4D61944E677977BB8EEE0C1EF98679246CB1D43403311F -5F09BCB30445487F82ED268577F22479EFE87DD0022D42D3328990B88601C3A0 -D5A8389C4578C3DA01F653EEF9EB5D83A98A6939320FCD6F5B6A5A60FADBBCD7 -E5A7DE5A95D1CC7DCF5A051C652B767FCBC59D61AB9FB5141F393F2028879995 -4AB737BD26D81232CA8D64DAFF989F878537C305BB5C09889235BE3727BDEE32 -EC5A4D06A68746CA33CCED3F1D456DFF0118E993C802AF0C3136FDA8B93BC16C -E22A5C124972517594A82850CDC000F6505A7C5AE9E75800EFEC3815C130EE25 -547A326325271049D9B178E23FC5FDE8880CDA9C903EB4B8A44F85620465FF4A -D097A6D89A8B644E7D9944E180A3E1EC6D2581715EADFBF3C2BE3B330B1D208F -B84C4B98E999C5684E9843E6AA2F932D1813DAF4931D12AF17FD2CB2387751D2 -5D14CEA4C66C48C7E6FD61BA6D09E591188E7CFC0F5C306672481FC77B5C6D84 -F589673C4F4EE90E2D3D1345196A10907A22585E7D55A9620FD7D191956DF340 -4C98AB5A8A3D98798F2581D409FBACC2419A031666DC9967DD10A1A565A98672 -BDCDD345FCEC9BC08698949C887E90EAF94B7CB450A9C45FCCF289DEF3380309 -D7644EF509BCFF5628ED51E056FD7848A2A36E30551E13B2A2921AE2028B2C4D -902F7C901BC54F945AA1AA018EBA00AB9A2FB36159147C74880C06A26092B54C -D3E6DD432A3507FA11384F0C08C68942C26ADD98DBE948D854199B19B0421687 -7FC55F9284AF035C5C9DB4269FE72FB251030F9A5A31A75FBBB0DBB1151EC785 -08F8CD88D6FD5A700AC0F6E0F37536C2F1228052846C3ADF9DDB7D56A57F19C1 -B8382EB996D8FECE8F8B130B89037F9FD4D58426049F99B840F337BE6A9427DE -B68BA69B32A301263F8881F35332FF35ED6BC15FBD4A8915C8CC37839BE3944E -A15701B8FABC6D533FF5D8C96B1D599DF7E2738996520A0702307E3C91A476E5 -C76AA881695D7400238B4EDC669BE334B84A66B9427432A3AB970D55A899DFCC -81F7C68D637F77121B75C0D6C073CD14A7311799CAD07684A5C0F662CB10CF9B -FDC4CB98B6E7892BFE731360E35AD6008F8154E419FE86FCAB0264173127B1C7 -92D6DAC832571CB2771F9EBF2486F61FBA0D94DBF0795D5653EDBA2F7441B683 -C3E77B314D02C049282E7B749B80C326DE8DA52D632A1A9C3C84198785161129 -D527239F456F6FA14CC264ACA06DCDF408278CF105A3786073709E365A85BBA4 -74A20C47CF495A0913CE079F33B71BAAE3928C18D59B2DB6A38E54EAD9FB87B4 -EA6D147D264E48E665A4DFB466A948811DE66770B0774C80BC2C54EB7452017A -52AC312508C6FB6A4DE3570A3DF50EB00540003382B91E06067A3D11E1DDC023 -5EF8787F1F1015152BE7F3D5F88EDE778E946768E4E333288F4DE66D604822A7 -5F2D5069B6CAB613145652E07F608A093645EB6DA6A9B231EB5EB31C097354B4 -AF54E8AF3455011E51ECC74FEB9847FEE3C42DB441DC3E39DC1650E80BB2D530 -823B1246699B391341E7D7BBE42DE15092EE2FACECE3B8290FBFE4567E4E3B09 -973088770EC250F55AB5FB3E7ECC7537909622252E7967AE84368FE204800BC5 -6C51A8DBB2DF121FD04225015DB5A39A1D6241C9874215D115A58D8329E752B4 -D5CE3B1BE30D1703A044BA14B6C71F406733E771E8F9FC662C6DDEE86BAB4F68 -DAFB63D8870938C3149CC07F6660AEC0296885F64905B8BC82B317DE4DD729C9 -5989533686291EE980EA2470794FB3DEBEBE9E41F9BD793CE4DE37D9821D44EF -803651668599D59FA7D44526F67C73C954BBB28BB25BF8606340755D02B23C42 -094CEF3CD30B04B9AE08FCDAC339FC1A9DD2008B0FF3C1F68C328541FDE6FBA9 -98DE24C4C3B3FC7D3B0D86FE89B6716E57BF46CB201F6A5EF73F05444D024D34 -639BA30B6D6F1A25D7CDB89D79FFD826663A3DCE5E9F4C72F06DD6C32A34CD22 -A7A1B7E3CD27707F4F09EAF284ACB3D960A530D4932D08028CFEB3AFC2D59170 -730ECD5D19B4D23108944CB7649AB0F1F3C286863A6A34A964A879D63CE05F1D -FC11C5B69374F1993DCCFFC99D0E597C3BC99DE67E5059FF0672F79938F4CC4E -4C66D6DCB0239444F2E614D09692297C7329411AA1CD5A540F9D61EBE2AF8B58 -DF46F4065672539C326B50BA1CB54DE5603D0799534ED0BE40AD5C72B4EBEF40 -A5EEBD414F1639AB6C955557FF9BAA0B62DBD32895B0DE12FDB66694F3CABABD -7D54F0B29F8EA32CE746B652CC9E44EA64C3F8847053D8E50CE044C990A7BA13 -7B1B0F4B2FA68D08A82C30E800F8B26CC84495B222ABB5E41824953315CE7F22 -6D8FB5AA10A3EAE16A1B5BA8A283854C5A1735D5F628DB64C8DA6E51C727EA1E -C3CF188BBE2473E9112529AA6A8DA151DBABCC26973531DD69B4A14D9783FF33 -FCD1672B629CD4DAB4EF573DFE9C3BC550C446A34940BE4437F43CCD16CFA3C0 -537ECBB7DCE1E76D9FCC2EA5E9E5656F7C7A3FE1611BA6A8AFF0667450A4A8CE -0706CDF854B4DEA79C5FC25A0556F44CA3593E89ED5881ECB5BB3EE6572F8F2D -4D31466C9AC2350898349C3208636F43D1EBF5BB2F01DCF827AD6C205F3B381F -800D5F4B827107AC881BD66BF5CEED3205535C8C3704A02614E6233344667C48 -570C4B5A3326D2F58A6111AC9B0CA7F3A48DEC898FD5AA05929492B8FF061E1C -990E08AADA5E9711658E30F71BA41A7806BEB51BE0949777E1550F54C66B8AFF -DF4129B42B71DE6101C57DAFA63FAA169145C0D6A0D6279658431E874C32250B -AB0B09056CF7A096E7E644B5B629F275194CB0CCEFC7A802F123A587156AB136 -513A7362EFC4C0EC330E11C3E25B9A943D2BDFDC1EA5C19DA64B47E690C2726A -0C0708F7A1DB146B80C6E8B4D30D28F6E8B7A7505EAC296258485AFF374652EF -ED73EFC04C6CFD28890F035DBB7A0CFCECE8AA68FA622390B782E595D4157106 -802499D76B0351617B5CDFF4F7F758DAD993DB5628B346240DF540E821144C5B -D7FAC2C00B22D8DD374C6FED26F619FF150AA2292A9D03AC7F5F6A20B3283890 -C80DB07E6923B6C485819A849BA8A3F18F7B4D309802AB3D489587721417A2DD -0B1A4D9994E3C611E3289465E657939EC06D752330EDD2D475E67F345C3527BF -0175182934D53176D5877D064F6FE1C1D559DC657E4C2CC83FB022A38E6E406F -E8F85B556F9A771F4DDA35AAE7C76DE0CCF5C2A9D9F4AC946C1A836553D792C3 -F2F8FEFF9A6D7DAB2FA5F0C9973FF8E3206680D96ACF9CAF54FB6274B99E3F9D -7E2B64C85EFDE220C15BF9F4AB5CB772197464078AE34FFEA9095DDBE6B0EFE7 -4AFCCEA58D12EB46648093EF927A8E600F0D4E239BCDDE8DD5AB6A651018E932 -746F18584378B3B4899B6E5E7B3C742835BBDE2D9271AA95E1E1C714F51B8D08 -562CFF8AC79F495578993955611AD98303AAD37FEA8CF9AF63543C1B4DC0281E -1269CECEAE77D660AB8800EAF547ADA30278345A189EB7CE9B03B936F3511496 -84E87A395C9012C66EE994141779E4282AE968FFC1E764C45751CCB23049BEED -069E6AC75A8CA8D115B4C269C8E6EB3047E0A17251D46D389F43809423BC2A8D -1730A54F8ED38019DDC4BC752539AA8FE9514EBC42F74FC8B50A850D09829810 -4CF7546878A85B8A9CCCFC866B5C30E1E5295E50D2E05F02B414B04830756970 -09BE8D4898B2CB6D2E95FA6890A620DD863B30C1EC77C08AFA711EF6C0D45878 -2E93BB6E2B4B44A5D24C55C22E6D58E4AE93A566B5545783E1B54B937D68BF21 -45A1CFA44CA87DBCEC8EF7A309015EB883D14BFD9DC89DF814697740C100B0E2 -1A5DD11DEE47681B153C4CFA026451660213253618E16F5C3B2D590363786BF0 -83E23B438E0FE85597F74C40611C5D3BB944108416AE0960432B8E59D8B64197 -81DAC51D615971E976768826B90CE2C563E498B8EE3A2D28546814F3D7E6DA78 -217C56ABD4CD323029CDB3C01B1885A9E12D5F92E773F31B50E2DC680708B37A -F234AB215B75DE93E7912E20DC4937EBE1208B476DD8BCF68F115B72FA76AF8B -B14AAC4AC7097D55B469262970369AC25526BDF3EFA81563066A37A4A71C19C2 -27611CF279C483B6C0CDE8B302C531E8F776CD557D91F348494088D6AC9CBD93 -7D0935EB5CE4C558247EFE669A39C56DC5F683337235E405BDB83CCAC1EA995A -7E437ADB4B9576683D8E6776830D570699D696B0C233BDA475B1909197F57B04 -92A0A6F9D72F4E8A56A71CC7F4729C06A5C4F9915FBA4857276A50D2A4B857D5 -3F20433EB0098D714E526D288CB0F36B88B989FF98EAA2AC2FD44DE6E0159E98 -341459E97C035442EE8974C465ED07924FE76933E6C6B2D0D632EFE2FDCEDF92 -6D1B58D9266F961916E0B21C7EDA8533638DE541728C38225C8EDBA3DF56D9DF -7CEE29D9EF955215974AB20AC024439A3730BA9227B1DBDABAA2D83443CC2F57 -21F0ADCFB8C2AF6FC327F9AB05C646C7BBFF81F3C3DAD7840CB477A2584695AC -45BA0AB785FF4C993900136B6139E4D26B5EABF1BF17A80C6370CC2BC3540A0E -4A4914C8F61A9608DE06BC8DABAB1492482AE665460981F4258B05E8F3A197C5 -30350BEA2DC89BA16224E570290845A6C7096C0C7707DAECFC85F9C853B8D65A -616E3323082033D542C13FCB10BCBDA0BA71445145A511641BD12B35AB5D8E74 -11D5EFEDE88EF9392103EC087932CF217CB44935FC6F99353CEC68F814950518 -EF919470486379FD02265F766244436BD290C65600D964044989C7F6A9672EF7 -803021A9E4AA6818125000EAE5F90D382AAE0908A26FC6083A90B88FEEC0746A -9F008C010CA98EEA7AAEA307037D2CA7200CA9BB68916CCAAB05E57FE7164A7D -C3D820303340D49EB29E6EF22A023F2D42D67A664F38C4FBDFC9A31A28A02145 -E38CC211BC73DF5F661EE9A3CAA076E43EB233583865289F66A7ACBE315AF81B -AFA2CFDE8A20549941EAE2E73E33BD0EB8D075F492724BC444FE8953F5F77B2B -4E7378CE552F79C360EEBA56B64CAA47DF10D14402EBEDFFF7069444AE3EBE3A -E96201E14EF892868F9AA982E738DCFE7E8DBE41C8F43A227EFC9EED795F5D6B -40D3A08D867F363232B20C71CF2E44B884A8CF28D96A028BE7C67DE00765793A -B1C867F0DF3E1D578D96428CF1E66632EB746C4B71314D5D009BEC8CA52A7518 -89B9255BDF988262A4BAF717FAB90525C81C223D4936F0AEE0E40908CC9E0DF3 -17AD71C0F5009CA00E1E6F8CD308501356235F63CB112C6760963857B6B20A94 -7FC16C899A7EA6743267F889D070698554DECE912C6052E04DF59FC85E67561B -3C7345EA3E21DB7206A14EAC4F46F457A83C1E2877B56EC49EF87B9B363F4B77 -BB6F51C3F1454325010AD71E28E935E74924A6ADA4A08C6C723276CBD4DA333E -C3590B7FB914E25828CEAC502704BB4C8C0C64395EED986F91D8C940D3F0ADEF -1F2749400B4D9A8BEA50CF4732DCBE21A6BA4DC17762BABC34DFA16EBF988574 -6B6363A6075CD4784CB799E35D29425D55AF001F51E565FCF4D18E98EF3C94C8 -5B88BC96A9157BED2529803EDE8E42BB57FD504764175EAED257D6E62CF9A17F -3E08727A38A0A43221BD62CBC2818ED5DDABD2E2FA6141D986229528AAEE7C73 -532A8D78FB8FDF433022F0EA43B63EEC52D3829E84AF010A2A19742296D91415 -42F9E632FFB3F0D8457AF426F0CA3B9A1D56DABD0537C9B5A9CA82E42A647CF9 -BA8D38F49445387AC896F16D85708BD8CE4BAA625EA09621EC17FD1A1377807E -DD68854483E84C181532D3B70680773CFE5D580712FD948F5D34354394D4E502 -6AD35AB042519E82177E06284CCAE4AF2C6D918FB32DFF205E9D9C88E31143FC -66DC0572961089CD0F2AD2EF82CF204E8AAB1F0122130232ACE276B134A9BB0E -91FF8020FBF69B32C93F1C10026F6B2E1D40796313D974E066BF799311595012 -59886A161B669C22EFD773802ED9321BE23DFC3240D170BE8499E1735623A130 -054EB5EC958884699867E3C94FFE49CBC9AD6C3C935E56C0712CDEB13BA92E2A -AA843CD9A30BA3C01ECC284DA4AEE6689A1A9E3D7D0F6A144C658F9441E730FC -24831893520FB7D2C69104E56D5D49DD6A86152C9BFE88F6166104AEF80B992D -406205CEA63C31A7B46D6B8C9A1782A0A0A30DD52066642554735406851F863B -BF981B4C8DC4882A03BCB160A06D18D72E61A49A23163BF92D091C35CEE0CB85 -04E3D95F3E98CBCC53B0015AD136FC481078ECF65B62EDD8EA3EF1B938119D10 -36D6D85412D1104BFAD6A4589C17B40EEEC5C3FC90933D9095B49A6956CF9F61 -E54384137A39A509200B0E51C1625CB599A91B287744677E059E6BA039B6146E -791EAE2676D2E233F2659C92A10D32A055935A193D4480B4E7069D3DDEEAC166 -1D24FE041BDD02D1A84CD43C43331AFE821B4ACC22F165DC53890D66606FA10C -B83E2BBA03C826B958FA79C31E081B5396297013A70E1FE82E76C8512402EAE6 -840E5943B19623473FF8F215D6332EC26D1DD0760142E4296287F98A30CB2A82 -8A639137E8BB018AE16F54FFB9100F533587B4812B5A7EBB0C2DD22D20F1B55B -D241DAA8614240F2B528CD48CD2F71496F181A94F181F7E85D07E4180CEFAB87 -57090401893BD680891ED7E7C9218409DD4995F3DF56E77F79CD06B9207328C1 -1427488F5876672E3806D8B8E0BB95AABA421B6629EA9A5A5FC811D43209610B -F729AA30565DC4C4A2CA67721FF1F87A4C4B26BBFB2B68766840DD148024FB21 -F2750EFD0F31FE624CAC5D606B6C14C15B1FD7D4DFF182F436399C19F22C9F57 -F243086E319BFFD7412871031E5226D494B41EB70093103C606ACD02F6B2737A -31C6DC7E3617F617471C37861161C799646C1CF8B60E9A5366C3A9EA785ADFE5 -2AA75D252775300DDF7F463E15FF6EAD513BC042837243F8514AF04586F5E451 -AEAA68E3C96574415497576D010A6D68148DE883083070DAD871E8F151C1C1F2 -2E82F50EEDEE298EE66699BADAA6677586F59AE3DA5038F513FDCFD7978B2829 -794271AD63CA26EA8970DCA4F32B57C09799C9B8D78BFBC50FD36A3F3F254799 -B313915C9640A27AF3530C68FA3053AEF80B2659AD152CAC44BEFDCA211EFD6B -1DC6A25A08183879CDB74DD95EE2779416C0B3EA306720FABA153F3BD94B0DC2 -A429050A7D6B7B5A54C2AF4F45194667C3CF2EC4014444717DC6C7100035C504 -216661A97B632FA32FC1E021AFB75B395ABF844C558122C416F3CAB82B4ED56F -15589E9F34CCB7C0C7F7B5FBBF48169105355F6EFF2F41A212C24A81BB9A466C -598B921E0CF721A525187BC75CB3B2DE6A94205517B2CAA504F351BA0DC5C26A -28CF5AC9DF3C81B888AA3C930DE00DA50DB0422A0D85A00C7E2AE3061E1E17DA -55B3E3C998466DB8337E81059214406CC58CC1C204EB3D435C50B52E14B91905 -CC33F6D9C78342EBDD3033EB6A8D41530105CDB05B2E67606A022D366284CEC8 -6BB9FF090261A42EDE521B2BD2D955050F3BD2EDE7976A68F17F889943C369FD -564CC15CC19D082B2EF4FDCB95E835A0CA799B4F8B68215006ECC332955837F1 -9118D86E07EA5D7815F66D3907EFAC1A2B76845B90B1D385EB08434B5DB96FC0 -59A97A94E4C21015EE22E04BA4A962F5ED4BF157A6 -0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/nfsexport/lib/fonts/micro_40_50.qpf b/client/nfsexport/lib/fonts/micro_40_50.qpf deleted file mode 100755 index eae4a5bc..00000000 Binary files a/client/nfsexport/lib/fonts/micro_40_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/fonts/unifont_160_50.qpf b/client/nfsexport/lib/fonts/unifont_160_50.qpf deleted file mode 100755 index 2288575d..00000000 Binary files a/client/nfsexport/lib/fonts/unifont_160_50.qpf and /dev/null differ diff --git a/client/nfsexport/lib/grub4dos/badgrub.exe b/client/nfsexport/lib/grub4dos/badgrub.exe deleted file mode 100644 index 3cd26a61..00000000 Binary files a/client/nfsexport/lib/grub4dos/badgrub.exe and /dev/null differ diff --git a/client/nfsexport/lib/grub4dos/bootlace.com b/client/nfsexport/lib/grub4dos/bootlace.com deleted file mode 100755 index 199831f6..00000000 Binary files a/client/nfsexport/lib/grub4dos/bootlace.com and /dev/null differ diff --git a/client/nfsexport/lib/grub4dos/config.sys b/client/nfsexport/lib/grub4dos/config.sys deleted file mode 100644 index 9aa253ef..00000000 --- a/client/nfsexport/lib/grub4dos/config.sys +++ /dev/null @@ -1,6 +0,0 @@ -rem load grub.exe before emm386.exe -device=grub.exe --bypass --time-out=5 --config-file="color black/cyan yellow/cyan;timeout 60;default 0;title find and load NTLDR of Windows NT/2K/XP;find --set-root /ntldr;chainloader /ntldr;title find and load CMLDR, the Recovery Console of Windows NT/2K/XP;find --set-root /cmldr;chainloader /cmldr;write 0x7C03 0x63646D63;write 0x7C07 0x00736E6F;title find and load IO.SYS of Windows 9x/Me;find --set-root /io.sys;chainloader /io.sys;title floppy (fd0);chainloader (fd0)+1;rootnoverify (fd0);title find and boot Linux with menu.lst already installed;find --set-root /sbin/init;configfile /boot/grub/menu.lst;title find and boot Mandriva with menu.lst already installed;find --set-root /etc/mandriva-release;configfile /boot/grub/menu.lst;title back to dos;quit;title commandline;commandline;title reboot;reboot;title halt;halt;" - -device=c:\windows\himem.sys -device=c:\windows\emm386.exe - diff --git a/client/nfsexport/lib/grub4dos/default b/client/nfsexport/lib/grub4dos/default deleted file mode 100644 index 689c3c8b..00000000 --- a/client/nfsexport/lib/grub4dos/default +++ /dev/null @@ -1,46 +0,0 @@ - -# -# -# -# -# -# -# -# -# -# -# !!!!!!! The file size is 2048 bytes. Don't change the file size !!!!!!! -# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX -# XXXXXXXXXXXXXXXXXXXXX -# !!!!!!! The file size is 2048 bytes. Don't change the file size !!!!!!! -# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX diff --git a/client/nfsexport/lib/grub4dos/grldr b/client/nfsexport/lib/grub4dos/grldr deleted file mode 100644 index a31e27bd..00000000 Binary files a/client/nfsexport/lib/grub4dos/grldr and /dev/null differ diff --git a/client/nfsexport/lib/grub4dos/grldr.mbr b/client/nfsexport/lib/grub4dos/grldr.mbr deleted file mode 100644 index 6130129d..00000000 Binary files a/client/nfsexport/lib/grub4dos/grldr.mbr and /dev/null differ diff --git a/client/nfsexport/lib/grub4dos/grub.exe b/client/nfsexport/lib/grub4dos/grub.exe deleted file mode 100644 index 8df2433f..00000000 Binary files a/client/nfsexport/lib/grub4dos/grub.exe and /dev/null differ diff --git a/client/nfsexport/lib/grub4dos/grub.pif b/client/nfsexport/lib/grub4dos/grub.pif deleted file mode 100644 index 28b43805..00000000 Binary files a/client/nfsexport/lib/grub4dos/grub.pif and /dev/null differ diff --git a/client/nfsexport/lib/grub4dos/hmload.com b/client/nfsexport/lib/grub4dos/hmload.com deleted file mode 100644 index 04c794c3..00000000 Binary files a/client/nfsexport/lib/grub4dos/hmload.com and /dev/null differ diff --git a/client/nfsexport/lib/grub4dos/menu.lst b/client/nfsexport/lib/grub4dos/menu.lst deleted file mode 100644 index e7641534..00000000 --- a/client/nfsexport/lib/grub4dos/menu.lst +++ /dev/null @@ -1,83 +0,0 @@ -# This is a sample menu.lst file. You should make some changes to it. -# The old install method of booting via the stage-files has been removed. -# Please install GRLDR boot strap code to MBR with the bootlace.com -# utility under DOS/Win9x or Linux. - -color black/cyan yellow/cyan -timeout 30 -default /default - -title find and load NTLDR of Windows NT/2K/XP -fallback 1 -find --set-root /ntldr -chainloader /ntldr -savedefault --wait=2 - -title find and load CMLDR, the Recovery Console of Windows NT/2K/XP -fallback 2 -find --set-root /cmldr -chainloader /cmldr -##################################################################### -# write string "cmdcons" to memory 0000:7C03 in 2 steps: -##################################################################### -# step 1. Write 4 chars "cmdc" at 0000:7C03 -write 0x7C03 0x63646D63 -# step 2. Write 3 chars "ons" and an ending null at 0000:7C07 -write 0x7C07 0x00736E6F -savedefault --wait=2 - -title find and load IO.SYS of Windows 9x/Me -fallback 3 -find --set-root /io.sys -chainloader /io.sys -savedefault --wait=2 - -title find and boot Mandriva with menu.lst already installed -fallback 4 -find --set-root /etc/mandriva-release -savedefault --wait=2 -configfile /boot/grub/menu.lst - -title find and boot Linux with menu.lst already installed -fallback 5 -find --set-root /sbin/init -savedefault --wait=2 -configfile /boot/grub/menu.lst - -title commandline -savedefault --wait=2 -commandline - -title floppy (fd0) -chainloader (fd0)+1 -rootnoverify (fd0) -savedefault --wait=2 - -title back to dos -savedefault --wait=2 -quit - -title reboot -savedefault --wait=2 -reboot - -title halt -savedefault --wait=2 -halt - -title memdrive duplicated from floppy image file (hd0,0)/sbm.bin -map --mem (hd0,0)/sbm.bin (fd0) -map --hook -chainloader (fd0)+1 -rootnoverify (fd0) -savedefault --wait=2 - -title memdrive based on win98 partition (hd0,6) -map --mem (hd0,6)+1 (hd0) -# map --mem (hd0,0)/win98.gz (hd0) -map --hook -chainloader (hd0)+1 -rootnoverify (hd0) -savedefault --wait=2 - - diff --git a/client/nfsexport/lib/modules/psmouse.ko b/client/nfsexport/lib/modules/psmouse.ko deleted file mode 100644 index f305164d..00000000 Binary files a/client/nfsexport/lib/modules/psmouse.ko and /dev/null differ diff --git a/client/nfsexport/lib/pci.ids b/client/nfsexport/lib/pci.ids deleted file mode 100644 index 3fa895a6..00000000 --- a/client/nfsexport/lib/pci.ids +++ /dev/null @@ -1,17910 +0,0 @@ -# -# List of PCI ID's -# -# Version: 2009.09.18 -# Date: 2009-09-18 03:15:01 -# -# Maintained by Martin Mares and other volunteers from the -# PCI ID Project at http://pciids.sf.net/. -# -# New data are always welcome, especially if they are accurate. If you have -# anything to contribute, please follow the instructions at the web site. -# -# This file can be distributed under either the GNU General Public License -# (version 2 or higher) or the 3-clause BSD License. -# - -# Vendors, devices and subsystems. Please keep sorted. - -# Syntax: -# vendor vendor_name -# device device_name <-- single tab -# subvendor subdevice subsystem_name <-- two tabs - -0000 Gammagraphx, Inc. (or missing ID) -0010 Allied Telesis, Inc -# This is a relabelled RTL-8139 - 8139 AT-2500TX V3 Ethernet -001a Ascend Communications, Inc. -001c PEAK-System Technik GmbH - 0001 PCAN-PCI CAN-Bus controller -0033 Paradyne corp. -003d Lockheed Martin-Marietta Corp -# Real TJN ID is e159, but they got it wrong several times --mj -0059 Tiger Jet Network Inc. (Wrong ID) -0070 Hauppauge computer works Inc. - 0003 WinTV PVR-250 - 0009 WinTV PVR-150 - 0801 WinTV PVR-150 - 0807 WinTV PVR-150 - 4000 WinTV PVR-350 - 4001 WinTV PVR-250 (v1) - 4009 WinTV PVR-250 - 4800 WinTV PVR-350 - 4801 WinTV PVR-250 MCE - 4803 WinTV PVR-250 - 7444 WinTV HVR-1600 - 7801 WinTV HVR-1800 MCE - 8003 WinTV PVR-150 - 8801 WinTV PVR-150 - c801 WinTV PVR-150 - e807 WinTV PVR-500 MCE (1st tuner) - e817 WinTV PVR-500 MCE (2nd tuner) -0071 Nebula Electronics Ltd. -0095 Silicon Image, Inc. (Wrong ID) - 0680 Ultra ATA/133 IDE RAID CONTROLLER CARD -# Wrong ID used in subsystem ID of the TELES.S0/PCI 2.x ISDN adapter -00a7 Teles AG (Wrong ID) -00f5 BFG Technologies, Inc. -0100 Ncipher Corp Ltd -0123 General Dynamics -# 018a is not LevelOne but there is a board misprogrammed -018a LevelOne - 0106 FPC-0106TX misprogrammed [RTL81xx] -# 021b is not Compaq but there is a board misprogrammed -021b Compaq Computer Corporation - 8139 HNE-300 (RealTek RTL8139c) [iPaq Networking] -0270 Hauppauge computer works Inc. (Wrong ID) -0291 Davicom Semiconductor, Inc. - 8212 DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40) -# SpeedStream is Efficient Networks, Inc, a Siemens Company -02ac SpeedStream - 1012 1012 PCMCIA 10/100 Ethernet Card [RTL81xx] -02e0 XFX Pine Group Inc -0303 Hewlett-Packard Company (Wrong ID) -0315 SK-Electronics Co., Ltd. -0357 TTTech AG - 000a TTP-Monitoring Card V2.0 -036f Trigem Computer Inc. -0403 Future Technology Devices International Ltd -0432 SCM Microsystems, Inc. - 0001 Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet] -045e Microsoft - 006e MN-510 802.11b wireless USB paddle - 00c2 MN-710 wireless USB paddle -0482 Kyocera -04cf Myson Century, Inc - 8818 CS8818 USB2.0-to-ATAPI Bridge Controller with Embedded PHY -050d Belkin - 001a FSD7000 802.11g PCI Wireless card - 700f F5D7001 - Wireless G Plus Desktop Card - 7050 F5D7050 802.11g Wireless USB Adapter - 705c F5D7050 v4 -058f Alcor Micro Corporation -05a9 OmniVision - 8519 OV519 series -05e3 CyberDoor - 0701 CBD516 -066f Sigmatel Inc. - 3410 SMTP3410 - 3500 SMTP3500 -0675 Dynalink - 1700 IS64PH ISDN Adapter - 1702 IS64PH ISDN Adapter - 1703 ISDN Adapter (PCI Bus, DV, W) - 1704 ISDN Adapter (PCI Bus, D, C) -069d Hughes Network Systems (HNS) -0721 Sapphire, Inc. -0795 Wired Inc. - 6663 Butane II (MPEG2 encoder board) - 6666 MediaPress (MPEG2 encoder board) -07ca AVerMedia Technologies Inc. - a301 AVerTV 301 - b808 AVerTV DVB-T Volar (USB 2.0) -07d0 ITT Space Systems Division -07e2 ELMEG Communication Systems GmbH -0842 NPG, Personal Grand Technology -# Nee Gemplus International, SA -08e6 Gemalto NV -08ff AuthenTec - afe4 [Anchor] AF-S2 FingerLoc Sensor Module -0925 First International Computer, Inc. - 1234 VA-502 Mainboard -093a PixArt Imaging Inc. - 010e Innovage Mini Digital Camera - 010f SDC-300 Webcam - 020f Digital Photo Viewer - 2468 CIF Single Chip - 2600 PAC7311 - 2603 Philips Webcam SPC500NC - 2608 Maxell MaxCam RotaWeb -09c1 Arris - 0704 CM 200E Cable Modem -0a89 BREA Technologies Inc -0ace ZyDAS - 1211 ZD1211 IEEE 802.11b+g USB Adapter -0b0b Rhino Equipment Corp. - 0105 Rhino R1T1 - 0205 Rhino R4FXO - 0206 RCB4FXO 4-channel FXO analog telphony card - 0305 Rhino R4T1 - 0405 Rhino R8FXX - 0406 RCB8FXX 8-channel modular analog telphony card - 0505 Rhino R24FXX - 0506 RCB24FXS 24-Channel FXS analog telphony card - 0605 Rhino R2T1 - 0705 Rhino R24FXS - 0706 RCB24FXO 24-Channel FXO analog telphony card - 0905 R1T3 Single T3 Digital Telephony Card - 0906 RCB24FXX 24-channel modular analog telphony card - 0a06 RCB672FXX 672-channel modular analog telphony card -0b3d Brontes Technologies -0b49 ASCII Corporation - 064f Trance Vibrator -0ccd TerraTec Electronic GmbH - 0038 Cinergy T^2 DVB-T Receiver -0e11 Compaq Computer Corporation - 0001 PCI to EISA Bridge - 0002 PCI to ISA Bridge - 0046 Smart Array 64xx - 0e11 4091 Smart Array 6i - 0e11 409a Smart Array 641 - 0e11 409b Smart Array 642 - 0e11 409c Smart Array 6400 - 0e11 409d Smart Array 6400 EM - 0049 NC7132 Gigabit Upgrade Module - 004a NC6136 Gigabit Server Adapter - 005a Remote Insight II board - Lights-Out - 007c NC7770 1000BaseTX - 007d NC6770 1000BaseTX - 0085 NC7780 1000BaseTX - 00b1 Remote Insight II board - PCI device - 00bb NC7760 - 00ca NC7771 - 00cb NC7781 - 00cf NC7772 - 00d0 NC7782 - 00d1 NC7783 - 00e3 NC7761 - 0508 Netelligent 4/16 Token Ring - 1000 Triflex/Pentium Bridge, Model 1000 - 2000 Triflex/Pentium Bridge, Model 2000 - 3032 QVision 1280/p - 3033 QVision 1280/p - 3034 QVision 1280/p - 4000 4000 [Triflex] - 4040 Integrated Array - 4048 Compaq Raid LC2 - 4050 Smart Array 4200 - 4051 Smart Array 4250ES - 4058 Smart Array 431 - 4070 Smart Array 5300 - 4080 Smart Array 5i - 4082 Smart Array 532 - 4083 Smart Array 5312 - 4091 Smart Array 6i - 409a Smart Array 641 - 409b Smart Array 642 - 409c Smart Array 6400 - 409d Smart Array 6400 EM - 6010 HotPlug PCI Bridge 6010 - 7020 USB Controller - a0ec Fibre Channel Host Controller - a0f0 Advanced System Management Controller - a0f3 Triflex PCI to ISA Bridge - a0f7 PCI Hotplug Controller - 8086 002a PCI Hotplug Controller A - 8086 002b PCI Hotplug Controller B - a0f8 ZFMicro Chipset USB - a0fc FibreChannel HBA Tachyon - ae10 Smart-2/P RAID Controller - 0e11 4030 Smart-2/P Array Controller - 0e11 4031 Smart-2SL Array Controller - 0e11 4032 Smart Array 3200 Controller - 0e11 4033 Smart Array 3100ES Controller - 0e11 4034 Smart Array 221 Controller - ae29 MIS-L - ae2a MPC - ae2b MIS-E - ae31 System Management Controller - ae32 Netelligent 10/100 TX PCI UTP - ae33 Triflex Dual EIDE Controller - ae34 Netelligent 10 T PCI UTP - ae35 Integrated NetFlex-3/P - ae40 Netelligent Dual 10/100 TX PCI UTP - ae43 Netelligent Integrated 10/100 TX UTP - ae69 CETUS-L - ae6c Northstar - ae6d NorthStar CPU to PCI Bridge - b011 Netelligent 10/100 TX Embedded UTP - b012 Netelligent 10 T/2 PCI UTP/Coax - b01e NC3120 Fast Ethernet NIC - b01f NC3122 Fast Ethernet NIC - b02f NC1120 Ethernet NIC - b030 Netelligent 10/100 TX UTP - b04a 10/100 TX PCI Intel WOL UTP Controller - b060 Smart Array 5300 Controller - b0c6 NC3161 Fast Ethernet NIC - b0c7 NC3160 Fast Ethernet NIC - b0d7 NC3121 Fast Ethernet NIC - b0dd NC3131 Fast Ethernet NIC - b0de NC3132 Fast Ethernet Module - b0df NC6132 Gigabit Module - b0e0 NC6133 Gigabit Module - b0e1 NC3133 Fast Ethernet Module - b123 NC6134 Gigabit NIC - b134 NC3163 Fast Ethernet NIC - b13c NC3162 Fast Ethernet NIC - b144 NC3123 Fast Ethernet NIC - b163 NC3134 Fast Ethernet NIC - b164 NC3165 Fast Ethernet Upgrade Module - b178 Smart Array 5i/532 - 0e11 4080 Smart Array 5i - 0e11 4082 Smart Array 532 - 0e11 4083 Smart Array 5312 - b1a4 NC7131 Gigabit Server Adapter - b200 Memory Hot-Plug Controller - b203 Integrated Lights Out Controller - b204 Integrated Lights Out Processor - c000 Remote Insight Lights-Out Edition - f130 NetFlex-3/P ThunderLAN 1.0 - f150 NetFlex-3/P ThunderLAN 2.3 -0e21 Cowon Systems, Inc. -0e55 HaSoTec GmbH -0eac SHF Communication Technologies AG - 0008 Ethernet Powerlink Managing Node 01 -0f62 Acrox Technologies Co., Ltd. -# Formerly NCR -1000 LSI Logic / Symbios Logic - 0001 53c810 - 1000 1000 LSI53C810AE PCI to SCSI I/O Processor - 0002 53c820 - 0003 53c825 - 1000 1000 LSI53C825AE PCI to SCSI I/O Processor (Ultra Wide) - 0004 53c815 - 0005 53c810AP - 0006 53c860 - 1000 1000 LSI53C860E PCI to Ultra SCSI I/O Processor - 000a 53c1510 - 0e11 b143 Integrated Dual Channel Wide Ultra2 SCSI Controller - 1000 1000 LSI53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Nonintelligent mode) - 000b 53C896/897 - 0e11 6004 EOB003 Series SCSI host adapter - 1000 1000 LSI53C896/7 PCI to Dual Channel Ultra2 SCSI Multifunction Controller - 1000 1010 LSI22910 PCI to Dual Channel Ultra2 SCSI host adapter - 1000 1020 LSI21002 PCI to Dual Channel Ultra2 SCSI host adapter - 13e9 1000 6221L-4U (Dual U2W SCSI, dual 10/100TX, graphics) - 000c 53c895 - 1000 1010 LSI8951U PCI to Ultra2 SCSI host adapter - 1000 1020 LSI8952U PCI to Ultra2 SCSI host adapter - 1de1 3906 DC-390U2B SCSI adapter - 1de1 3907 DC-390U2W - 000d 53c885 - 000f 53c875 - 0e11 7004 Embedded Ultra Wide SCSI Controller - 1000 1000 LSI53C876/E PCI to Dual Channel SCSI Controller - 1000 1010 LSI22801 PCI to Dual Channel Ultra SCSI host adapter - 1000 1020 LSI22802 PCI to Dual Channel Ultra SCSI host adapter - 1092 8760 FirePort 40 Dual SCSI Controller - 1775 10d0 V5D Single Board Computer Wide Ultra SCSI - 1775 10d1 V5D Single Board Computer Ultra SCSI - 1de1 3904 DC390F/U Ultra Wide SCSI Adapter - 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard - 4c53 1050 CT7 mainboard - 0010 53C1510 - 0e11 4040 Integrated Smart Array Controller - 0e11 4048 RAID LC2 Controller - 1000 1000 53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Intelligent mode) - 0012 53c895a - 1000 1000 LSI53C895A PCI to Ultra2 SCSI Controller - 0013 53c875a - 1000 1000 LSI53C875A PCI to Ultra SCSI Controller - 0020 53c1010 Ultra3 SCSI Adapter - 1000 1000 LSI53C1010-33 PCI to Dual Channel Ultra160 SCSI Controller - 107b 1040 Server Onboard 53C1010-33 - 1de1 1020 DC-390U3W - 0021 53c1010 66MHz Ultra3 SCSI Adapter - 1000 1000 LSI53C1000/1000R/1010R/1010-66 PCI to Ultra160 SCSI Controller - 1000 1010 Asus TR-DLS onboard 53C1010-66 - 103c 1300 Ultra160 SCSI [AB306A] - 103c 1310 Ultra160 SCSI [A9918A] - 103c 1330 Ultra160 SCSI [A7059A] - 103c 1340 Ultra160 SCSI [A7060A] - 124b 1070 PMC-USCSI3 - 4c53 1080 CT8 mainboard - 4c53 1300 P017 mezzanine (32-bit PMC) - 4c53 1310 P017 mezzanine (64-bit PMC) - 0030 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI - 0e11 00da ProLiant ML 350 - 1028 0123 LSI Logic 1020/1030 - 1028 014a LSI Logic 1020/1030 - 1028 016c PowerEdge 1850 MPT Fusion SCSI/RAID (Perc 4) - 1028 0183 LSI Logic 1020/1030 - 1028 018a PERC 4/IM - 1028 1010 LSI U320 SCSI Controller - 103c 12c5 Ultra320 SCSI [A7173A] - 103c 1323 Core I/O LAN/SCSI Combo [AB314A] - 103c 3108 Single Channel Ultra320 SCSI HBA G2 - 124b 1170 PMC-USCSI320 -# VMware's emulation of this device. Was missing from the list. - 15ad 1976 LSI Logic Parallel SCSI Controller - 1734 1052 PRIMERGY BX/RX/TX S2 series onboard SCSI(IME) - 0031 53c1030ZC PCI-X Fusion-MPT Dual Ultra320 SCSI - 0032 53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI - 1000 1000 LSI53C1020/1030 PCI-X to Ultra320 SCSI Controller - 0033 1030ZC_53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI - 0040 53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI - 1000 0033 MegaRAID SCSI 320-2XR - 1000 0066 MegaRAID SCSI 320-2XRWS - 0041 53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI - 0050 SAS1064 PCI-X Fusion-MPT SAS - 1028 1f04 SAS 5/E - 1028 1f09 SAS 5i/R - 0054 SAS1068 PCI-X Fusion-MPT SAS - 1028 1f04 SAS 5/E Adapter Controller - 1028 1f05 SAS 5/i Adapter Controller - 1028 1f06 SAS 5/i Integrated Controller - 1028 1f07 SAS 5/iR Integrated RAID Controller - 1028 1f08 SAS 5/iR Integrated RAID Controller - 1028 1f09 SAS 5/iR Adapter RAID Controller - 15ad 1976 SAS Controller - 0055 SAS1068 PCI-X Fusion-MPT SAS - 1033 8336 SAS1068 - 0056 SAS1064ET PCI-Express Fusion-MPT SAS - 0057 M1064E MegaRAID SAS - 8086 346c Embedded Software RAID Technology II (ESTRII) - 0058 SAS1068E PCI-Express Fusion-MPT SAS - 1028 021d SAS 6/iR Integrated Workstations RAID Controller - 1028 1f0e SAS 6/iR Adapter RAID Controller - 1028 1f0f SAS 6/iR Integrated Blades RAID Controller - 1028 1f10 SAS 6/iR Integrated RAID Controller - 103c 3229 SC44Ge Host Bus Adapter - 0059 MegaRAID SAS 8208ELP/8208ELP - 005a SAS1066E PCI-Express Fusion-MPT SAS - 005c SAS1064A PCI-X Fusion-MPT SAS - 005e SAS1066 PCI-X Fusion-MPT SAS - 0060 MegaRAID SAS 1078 - 1000 1006 MegaRAID SAS 8888ELP - 1000 100a MegaRAID SAS 8708ELP - 1000 100e MegaRAID SAS 8884E - 1000 100f MegaRAID SAS 8708E - 1000 1010 MegaRAID SATA 350-8ELP - 1000 1011 MegaRAID SATA 350-4ELP - 1000 1012 MegaRAID SAS 8704ELP - 1000 1016 MegaRAID SAS 8880EM2 - 1014 0363 MegaRAID SAS PCI Express ROMB - 1014 0364 SystemX MegaRAID SAS 8808E - 1014 0365 SystemX MegaRAID SAS 8884E - 1014 0379 SystemX MegaRAID SAS 8880EM2 - 1028 1f0a PERC 6/E Adapter RAID Controller - 1028 1f0b PERC 6/i Adapter RAID Controller - 1028 1f0c PERC 6/i Integrated RAID Controller - 1028 1f0d PERC 6/i Integrated RAID Controller - 1028 1f11 CERC 6/i Integrated RAID Controller - 1033 835a MegaRAID SAS PCI Express ROMB - 1043 824d MegaRAID SAS PCI Express ROMB - 1170 002f MegaRAID SAS PCI Express ROMB - 1170 0036 MegaRAID SAS PCI Express ROMB - 15d9 c080 MegaRAID SAS PCI Express ROMB - 17aa 6b7c MegaRAID SAS PCI Express ROMB - 18a1 0003 LSI MegaRAID SAS PCI Express ROMB - 8086 1006 RAID Controller SRCSAS28EP - 8086 100a RAID Controller SRCSAS28EV - 8086 1010 RAID Controller SRCSATA28E - 8086 34cc Integrated RAID Controller SROMBSAS28E - 8086 34cd Integrated RAID Controller SROMBSAS28E - 0062 SAS1078 PCI-Express Fusion-MPT SAS - 1000 0062 SAS1078 PCI-Express Fusion-MPT SAS - 0064 SAS2116 PCI-Express Fusion-MPT SAS-2 [Meteor] - 0065 SAS2116 PCI-Express Fusion-MPT SAS-2 [Meteor] - 0070 SAS2004 PCI-Express Fusion-MPT SAS-2 [Spitfire] - 0072 SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] - 1028 1f1c 6Gbps SAS HBA Adapter - 1028 1f1d PERC H200 Adapter - 1028 1f1e PERC H200 Integrated - 1028 1f1f PERC H200 Modular - 0073 MegaRAID SAS 9240 - 1000 9240 MegaRAID SAS 9240-4i - 0074 SAS2108 PCI-Express Fusion-MPT SAS-2 [Liberator] - 0076 SAS2108 PCI-Express Fusion-MPT SAS-2 [Liberator] - 0077 SAS2108 PCI-Express Fusion-MPT SAS-2 [Liberator] - 0079 LSI MegaSAS 9260 - 1000 9262 MegaRAID SAS 9262-8i - 1000 9263 MegaRAID SAS 9261-8i - 1000 9281 MegaRAID SAS 9281-8E - 1028 1f15 PERC H800 Adapter - 1028 1f16 PERC H700 Adapter - 1028 1f17 PERC H700 Integrated - 1028 1f18 PERC H700 Modular - 1028 1f1a PERC H800 Proto Adapter - 1028 1f1b PERC H700 Integrated - 007c MegaRAID SAS 1078DE - 1014 0395 ServeRAID-AR10is SAS/SATA Controller - 0080 SAS2208 PCI-Express Fusion-MPT SAS-2 - 0081 SAS2208 PCI-Express Fusion-MPT SAS-2 - 0082 SAS2208 PCI-Express Fusion-MPT SAS-2 - 0083 SAS2208 PCI-Express Fusion-MPT SAS-2 - 0084 SAS2208 PCI-Express Fusion-MPT SAS-2 - 0085 SAS2208 PCI-Express Fusion-MPT SAS-2 - 0086 SAS2208 PCI-Express Fusion-MPT SAS-2 - 0087 SAS2208 PCI-Express Fusion-MPT SAS-2 - 008f 53c875J - 1092 8000 FirePort 40 SCSI Controller - 1092 8760 FirePort 40 Dual SCSI Host Adapter - 0407 MegaRAID - 1000 0530 MegaRAID 530 SCSI 320-0X RAID Controller - 1000 0531 MegaRAID 531 SCSI 320-4X RAID Controller - 1000 0532 MegaRAID 532 SCSI 320-2X RAID Controller - 1028 0531 PowerEdge Expandable RAID Controller 4/QC - 1028 0533 PowerEdge Expandable RAID Controller 4/QC - 8086 0530 MegaRAID Intel RAID Controller SRCZCRX - 8086 0532 MegaRAID Intel RAID Controller SRCU42X - 0408 MegaRAID - 1000 0001 MegaRAID SCSI 320-1E RAID Controller - 1000 0002 MegaRAID SCSI 320-2E RAID Controller - 1025 004d MegaRAID ACER ROMB-2E RAID Controller - 1028 0001 PowerEdge RAID Controller PERC4e/SC - 1028 0002 PowerEdge RAID Controller PERC4e/DC - 1028 0012 PowerEdge RAID Controller RAC4 - 1028 0015 PowerEdge RAID Controller PERC5 - 1028 1f03 PowerEdge RAID Controller PERC5 - 1734 1065 FSC MegaRAID PCI Express ROMB - 8086 0002 MegaRAID Intel RAID Controller SRCU42E - 8086 3449 MegaRAID Intel RAID Controller SROMBU - 0409 MegaRAID - 1000 3004 MegaRAID SATA 300-4X RAID Controller - 1000 3008 MegaRAID SATA 300-8X RAID Controller - 8086 3008 MegaRAID RAID Controller SRCS28X - 8086 3431 MegaRAID RAID Controller Alief SROMBU42E - 8086 3499 MegaRAID RAID Controller Harwich SROMBU42E - 0411 MegaRAID SAS - 1000 1001 MegaRAID SAS 8408E - 1000 1002 MegaRAID SAS 8480E - 1000 1003 MegaRAID SAS 8344ELP - 1000 1004 MegaRAID SAS 8308ELP - 1000 1008 MegaRAID SAS 84016E - 1000 100c MegaRAID SATA 300-12E - 1000 100d MegaRAID SATA 300-16E - 1000 2004 MegaRAID SATA 300-8ELP - 1000 2005 MegaRAID SATA 300-4ELP - 1033 8287 MegaRAID SAS PCI Express ROMB - 1054 3016 MegaRAID SAS RoMB Server - 1734 1081 MegaRAID SAS PCI Express ROMB - 1734 10a3 MegaRAID SAS PCI Express ROMB - 8086 1001 RAID Controller SRCSAS18E - 8086 1003 RAID Controller SRCSAS144E - 8086 3500 SROMBSAS18E RAID Controller - 8086 3501 SROMBSAS18E RAID Controller - 8086 3504 SROMBSAS18E RAID Controller - 0413 MegaRAID SAS Verde ZCR - 1000 1005 MegaRAID SAS 8300XLP - 0621 FC909 Fibre Channel Adapter - 0622 FC929 Fibre Channel Adapter - 1000 1020 44929 O Dual Fibre Channel card - 0623 FC929 LAN - 0624 FC919 Fibre Channel Adapter - 0625 FC919 LAN - 0626 FC929X Fibre Channel Adapter - 1000 1010 7202-XP-LC Dual Fibre Channel card - 0627 FC929X LAN - 0628 FC919X Fibre Channel Adapter - 0629 FC919X LAN - 0640 FC949X Fibre Channel Adapter - 0642 FC939X Fibre Channel Adapter - 0646 FC949ES Fibre Channel Adapter - 0701 83C885 NT50 DigitalScape Fast Ethernet - 0702 Yellowfin G-NIC gigabit ethernet - 1318 0000 PEI100X - 0804 SA2010 - 0805 SA2010ZC - 0806 SA2020 - 0807 SA2020ZC - 0901 61C102 - 1000 63C815 - 1960 MegaRAID - 1000 0518 MegaRAID 518 SCSI 320-2 Controller - 1000 0520 MegaRAID 520 SCSI 320-1 Controller - 1000 0522 MegaRAID 522 i4 133 RAID Controller - 1000 0523 MegaRAID SATA 150-6 RAID Controller - 1000 4523 MegaRAID SATA 150-4 RAID Controller - 1000 a520 MegaRAID ZCR SCSI 320-0 Controller - 1028 0518 MegaRAID 518 DELL PERC 4/DC RAID Controller - 1028 0520 MegaRAID 520 DELL PERC 4/SC RAID Controller - 1028 0531 PowerEdge Expandable RAID Controller 4/QC - 1028 0533 PowerEdge Expandable RAID Controller 4/QC - 8086 0520 MegaRAIDRAID Controller SRCU41L - 8086 0523 MegaRAID RAID Controller SRCS16 -1001 Kolter Electronic - 0010 PCI 1616 Measurement card with 32 digital I/O lines - 0011 OPTO-PCI Opto-Isolated digital I/O board - 0012 PCI-AD/DA Analogue I/O board - 0013 PCI-OPTO-RELAIS Digital I/O board with relay outputs - 0014 PCI-Counter/Timer Counter Timer board - 0015 PCI-DAC416 Analogue output board - 0016 PCI-MFB Analogue I/O board - 0017 PROTO-3 PCI Prototyping board - 9100 INI-9100/9100W SCSI Host -1002 ATI Technologies Inc - 3150 M24 1P [Radeon Mobility X600] - 103c 0934 nx8220 - 3151 M24 [FireMV 2400] - 3152 M22 [Radeon Mobility X300] - 3154 M24GL [Mobility FireGL V3200] - 3171 M24 [FireMV 2400] (Secondary) - 3e50 RV380 0x3e50 [Radeon X600] - 3e54 RV380 0x3e54 [FireGL V3200] - 3e70 RV380 [Radeon X600] (Secondary) - 4136 Radeon IGP 320 M - 4137 Radeon IGP330/340/350 - 4144 R300 AD [Radeon 9500 Pro] - 4145 R300 AE [Radeon 9700 Pro] - 4146 R300 AF [Radeon 9700 Pro] - 4147 R300 AG [FireGL Z1/X1] - 4148 R350 AH [Radeon 9800] - 4149 R350 AI [Radeon 9800] - 414a R350 AJ [Radeon 9800] - 414b R350 AK [FireGL X2] - 4150 RV350 AP [Radeon 9600] - 1002 0002 R9600 Pro primary (Asus OEM for HP) - 1002 0003 R9600 Pro secondary (Asus OEM for HP) - 1002 4722 All-in-Wonder 2006 AGP Edition - 1458 4024 Giga-Byte GV-R96128D (Primary) - 148c 2064 PowerColor R96A-C3N - 148c 2066 PowerColor R96A-C3N - 174b 7c19 Sapphire Atlantis Radeon 9600 Pro - 174b 7c29 GC-R9600PRO [Sapphire] (Primary) - 17ee 2002 Radeon 9600 256Mb Primary - 18bc 0101 GC-R9600PRO (Primary) - 4151 RV350 AQ [Radeon 9600] - 1043 c004 A9600SE - 4152 RV350 AR [Radeon 9600] - 1002 0002 Radeon 9600XT - 1002 4772 All-in-Wonder 9600 XT - 1043 c002 Radeon 9600 XT TVD - 1043 c01a A9600XT/TD - 174b 7c29 Sapphire Radeon 9600XT - 1787 4002 Radeon 9600 XT - 4153 RV350 AS [Radeon 9550] - 1043 010c A9550GE/TD - 1462 932c RX9550SE-TD128 (MS-8932) - 4154 RV350 AT [FireGL T2] - 4155 RV350 AU [FireGL T2] - 4156 RV350 AV [FireGL T2] - 4157 RV350 AW [FireGL T2] - 4158 68800AX [Mach32] - 4164 R300 AD [Radeon 9500 Pro] (Secondary) - 4165 R300 AE [Radeon 9700 Pro] (Secondary) - 4166 R300 AF [Radeon 9700 Pro] (Secondary) - 4168 Radeon R350 [Radeon 9800] (Secondary) - 4170 RV350 AP [Radeon 9600] (Secondary) - 1002 0003 R9600 Pro secondary (Asus OEM for HP) - 1002 4723 All-in-Wonder 2006 AGP Edition (Secondary) - 1458 4025 Giga-Byte GV-R96128D (Secondary) - 148c 2067 PowerColor R96A-C3N (Secondary) - 174b 7c28 GC-R9600PRO [Sapphire] (Secondary) - 17ee 2003 Radeon 9600 256Mb (Secondary) - 18bc 0100 GC-R9600PRO (Secondary) - 4171 RV350 AQ [Radeon 9600] (Secondary) - 1043 c005 A9600SE (Secondary) - 4172 RV350 AR [Radeon 9600] (Secondary) - 1002 0003 Radeon 9600XT (Secondary) - 1002 4773 All-in-Wonder 9600 XT (Secondary) - 1043 c003 A9600XT (Secondary) - 1043 c01b A9600XT/TD (Secondary) - 174b 7c28 Sapphire Radeon 9600XT (Secondary) - 1787 4003 Radeon 9600 XT (Secondary) - 4173 RV350 AS [Radeon 9550] (Secondary) - 1043 010d A9550GE/TD (Secondary) - 4237 Radeon 7000 IGP - 4242 R200 BB [Radeon All in Wonder 8500DV] - 1002 02aa Radeon 8500 AIW DV Edition - 4243 R200 BC [Radeon All in Wonder 8500] - 4336 Radeon Mobility U1 - 1002 4336 Pavilion ze4300 ATI Radeon Mobility U1 (IGP 320 M) - 103c 0024 Pavilion ze4400 builtin Video - 161f 2029 eMachines M5312 builtin Video - 4337 Radeon IGP 330M/340M/350M - 1014 053a ThinkPad R40e - 103c 0850 Radeon IGP 345M - 4341 IXP150 AC'97 Audio Controller - 4342 IXP200 3COM 3C920B Ethernet Controller - 4345 EHCI USB Controller - 4347 OHCI USB Controller #1 - 4348 OHCI USB Controller #2 - 4349 Dual Channel Bus Master PCI IDE Controller - 434d IXP AC'97 Modem - 4353 SMBus - 4354 215CT [Mach64 CT] - 4358 210888CX [Mach64 CX] - 4361 IXP SB300 AC'97 Audio Controller - 4363 SMBus - 436e 436E Serial ATA Controller - 4370 IXP SB400 AC'97 Audio Controller - 1025 0079 Aspire 5024WLMMi - 1025 0091 Aspire 5032WXMi - 103c 308b MX6125 - 105b 0c81 Realtek ALC 653 - 107b 0300 MX6421 - 1462 0131 MS-1013 Notebook - 4371 IXP SB400 PCI-PCI Bridge - 103c 308b MX6125 - 1462 7217 Aspire L250 - 4372 IXP SB400 SMBus Controller - 1025 0080 Aspire 5024WLMMi - 103c 308b MX6125 - 1462 0131 MS-1013 Notebook - 1462 7217 Aspire L250 - 4373 IXP SB400 USB2 Host Controller - 1025 0080 Aspire 5024WLMMi - 103c 308b MX6125 - 1462 7217 Aspire L250 - 4374 IXP SB400 USB Host Controller - 103c 308b MX6125 - 1462 7217 Aspire L250 - 4375 IXP SB400 USB Host Controller - 1025 0080 Aspire 5024WLMMi - 103c 308b MX6125 - 1462 7217 Aspire L250 - 4376 IXP SB400 IDE Controller - 1025 0080 Aspire 5024WLMMi - 103c 308b MX6125 - 1462 0131 MS-1013 Notebook - 1462 7217 Aspire L250 - 4377 IXP SB400 PCI-ISA Bridge - 1025 0080 Aspire 5024WLMi - 103c 308b MX6125 - 1462 7217 Aspire L250 - 4378 SB400 AC'97 Modem Controller - 1025 0080 Aspire 5024WLMMi - 103c 308b MX6125 - 1462 0131 MS-1013 Notebook - 4379 IXP SB400 Serial ATA Controller - 1462 7141 Aspire L250 - 437a IXP SB400 Serial ATA Controller - 1002 4379 4379 Serial ATA Controller - 1002 437a 437A Serial ATA Controller - 1462 7141 Aspire L250 - 14f1 8800 Leadtek WinFast TV2000XP Expert - 437b IXP SB4x0 High Definition Audio Controller - 1002 437b IXP SB4x0 High Definition Audio Controller - 10cf 1326 Fujitsu Lifebook A3040 - 1734 10b8 Realtek High Definition Audio - 4380 SB600 Non-Raid-5 SATA - 103c 2813 DC5750 Microtower - 1458 b005 Gigabyte GA-MA69G-S3H Motherboard - 1462 7327 K9AG Neo2 - 17f2 5999 KI690-AM2 Motherboard - 4381 SB600 Raid-5 SATA - 4382 SB600 AC97 Audio - 4383 SBx00 Azalia (Intel HDA) - 103c 280a DC5750 Microtower - 17f2 5000 KI690-AM2 Motherboard - 4384 SBx00 PCI to PCI Bridge - 4385 SBx00 SMBus Controller - 103c 280a DC5750 Microtower - 1462 7368 K9AG Neo2 - 17f2 5000 KI690-AM2 Motherboard - 4386 SB600 USB Controller (EHCI) - 103c 280a DC5750 Microtower - 1462 7368 K9AG Neo2 - 17f2 5000 KI690-AM2 Motherboard - 4387 SB600 USB (OHCI0) - 103c 280a DC5750 Microtower - 1462 7368 K9AG Neo2 - 17f2 5000 KI690-AM2 Motherboard - 4388 SB600 USB (OHCI1) - 103c 280a DC5750 Microtower - 1462 7368 K9AG Neo2 - 17f2 5000 KI690-AM2 Motherboard - 4389 SB600 USB (OHCI2) - 103c 280a DC5750 Microtower - 1462 7368 K9AG Neo2 - 17f2 5000 KI690-AM2 Motherboard - 438a SB600 USB (OHCI3) - 103c 280a DC5750 Microtower - 1462 7368 K9AG Neo2 - 17f2 5000 KI690-AM2 Motherboard - 438b SB600 USB (OHCI4) - 103c 280a DC5750 Microtower - 1462 7368 K9AG Neo2 - 17f2 5000 KI690-AM2 Motherboard - 438c SB600 IDE - 103c 280a DC5750 Microtower - 1458 5002 Gigabyte GA-MA69G-S3H Motherboard - 1462 7368 K9AG Neo2 - 17f2 5000 KI690-AM2 Motherboard - 438d SB600 PCI to LPC Bridge - 103c 280a DC5750 Microtower - 1462 7368 K9AG Neo2 - 17f2 5000 KI690-AM2 Motherboard - 438e SB600 AC97 Modem - 4390 SB700/SB800 SATA Controller [IDE mode] - 1849 4390 Motherboard (one of many) - 4391 SB700/SB800 SATA Controller [AHCI mode] - 4392 SB700/SB800 SATA Controller [Non-RAID5 mode] - 4393 SB700/SB800 SATA Controller [RAID5 mode] - 4394 SB700/SB800 SATA Controller [SATA and FC Enabled] - 4395 SB800 SATA Controller [Storage mode with HyperFlash-PCIE] - 4396 SB700/SB800 USB EHCI Controller - 4397 SB700/SB800 USB OHCI0 Controller - 4398 SB700 USB OHCI1 Controller - 4399 SB700/SB800 USB OHCI2 Controller - 439c SB700/SB800 IDE Controller - 439d SB700/SB800 LPC host controller - 4437 Radeon Mobility 7000 IGP - 4554 210888ET [Mach64 ET] - 4654 Mach64 VT - 4742 3D Rage Pro AGP 1X/2X - 1002 0040 Rage Pro Turbo AGP 2X - 1002 0044 Rage Pro Turbo AGP 2X - 1002 0061 Rage Pro AIW AGP 2X - 1002 0062 Rage Pro AIW AGP 2X - 1002 0063 Rage Pro AIW AGP 2X - 1002 0080 Rage Pro Turbo AGP 2X - 1002 0084 Rage Pro Turbo AGP 2X - 1002 4742 Rage Pro Turbo AGP 2X - 1002 8001 Rage Pro Turbo AGP 2X - 1028 0082 Rage Pro Turbo AGP 2X - 1028 4082 Optiplex GX1 Onboard Display Adapter - 1028 8082 Rage Pro Turbo AGP 2X - 1028 c082 Rage Pro Turbo AGP 2X - 8086 4152 Xpert 98D AGP 2X - 8086 464a Rage Pro Turbo AGP 2X - 4744 3D Rage Pro AGP 1X - 1002 4744 Rage Pro Turbo AGP - 4747 3D Rage Pro - 4749 3D Rage Pro - 1002 0061 Rage Pro AIW - 1002 0062 Rage Pro AIW - 474c Rage XC - 474d Rage XL AGP 2X - 1002 0004 Xpert 98 RXL AGP 2X - 1002 0008 Xpert 98 RXL AGP 2X - 1002 0080 Rage XL AGP 2X - 1002 0084 Xpert 98 AGP 2X - 1002 474d Rage XL AGP - 1033 806a Rage XL AGP - 474e Rage XC AGP - 1002 474e Rage XC AGP - 474f Rage XL - 1002 0008 Rage XL - 1002 474f Rage XL - 4750 3D Rage Pro 215GP - 1002 0040 Rage Pro Turbo - 1002 0044 Rage Pro Turbo - 1002 0080 Rage Pro Turbo - 1002 0084 Rage Pro Turbo - 1002 4750 Rage Pro Turbo - 4751 3D Rage Pro 215GQ - 4752 Rage XL - 0e11 001e Proliant Rage XL - 1002 0008 Rage XL - 1002 4752 Proliant Rage XL - 1002 8008 Rage XL - 1028 00ce PowerEdge 1400 - 1028 00d1 PowerEdge 2550 - 1028 00d9 PowerEdge 2500 - 1028 0134 PowerEdge 600SC - 1028 014a PowerEdge 1750 - 1028 0165 PowerEdge 750 - 103c 10e1 NetServer Rage XL - 107b 6400 6400 Server - 1734 007a PRIMERGY RX/TX series onboard VGA - 8086 3411 SDS2 Mainboard - 8086 3427 S875WP1-E mainboard - 8086 5744 S845WD1-E mainboard - 4753 Rage XC - 1002 4753 Rage XC - 4754 3D Rage I/II 215GT [Mach64 GT] - 4755 3D Rage II+ 215GTB [Mach64 GTB] - 4756 3D Rage IIC 215IIC [Mach64 GT IIC] - 1002 4756 Rage IIC - 4757 3D Rage IIC AGP - 1002 4757 Rage IIC AGP - 1028 0089 Rage 3D IIC - 1028 008e PowerEdge 1300 onboard video - 1028 4082 Rage 3D IIC - 1028 8082 Rage 3D IIC - 1028 c082 Rage 3D IIC - 4758 210888GX [Mach64 GX] - 4759 3D Rage IIC - 475a 3D Rage IIC AGP - 1002 0084 Rage 3D Pro AGP 2x XPERT 98 - 1002 0087 Rage 3D IIC - 1002 475a Rage IIC AGP - 4964 Radeon RV250 Id [Radeon 9000] - 4965 Radeon RV250 Ie [Radeon 9000] - 4966 Radeon RV250 If [Radeon 9000] - 10f1 0002 RV250 If [Tachyon G9000 PRO] - 148c 2039 RV250 If [Radeon 9000 Pro "Evil Commando"] - 1509 9a00 RV250 If [Radeon 9000 "AT009"] - 1681 0040 RV250 If [3D prophet 9000] - 174b 7176 RV250 If [Sapphire Radeon 9000 Pro] - 174b 7192 RV250 If [Radeon 9000 "Atlantis"] - 17af 2005 RV250 If [Excalibur Radeon 9000 Pro] - 17af 2006 RV250 If [Excalibur Radeon 9000] - 4967 Radeon RV250 Ig [Radeon 9000] - 496e Radeon RV250 [Radeon 9000] (Secondary) - 4a48 R420 JH [Radeon X800] - 4a49 R420 JI [Radeon X800PRO] - 4a4a R420 JJ [Radeon X800SE] - 4a4b R420 JK [Radeon X800] - 4a4c R420 JL [Radeon X800] - 4a4d R420 JM [FireGL X3] - 4a4e M18 JN [Radeon Mobility 9800] - 4a4f Radeon X800 SE (R420) (AGP) - 4a50 R420 JP [Radeon X800XT] - 4a54 R420 [Radeon X800 VE] - 4a69 R420 [Radeon X800 PRO/GTO] (Secondary) - 4a6a R420 [Radeon X800] (Secondary) - 4a6b R420 [Radeon X800] (Secondary) - 4a70 R420 [X800XT-PE] (Secondary) - 4a74 R420 [Radeon X800 VE] (Secondary) - 4b48 Radeon X850 Consumer (R481) - 4b49 R480 [Radeon X850XT] - 4b4a Radeon X850 SE (R480) (AGP) - 4b4b R480 [Radeon X850Pro] - 4b4c R481 [Radeon X850XT-PE] - 4b69 R480 [Radeon X850XT] (Secondary) - 4b6b R480 [Radeon X850Pro] (Secondary) - 4b6c R481 [Radeon X850XT-PE] (Secondary) - 4c42 3D Rage LT Pro AGP-133 - 0e11 b0e7 Rage LT Pro (Compaq Presario 5240) - 0e11 b0e8 Rage 3D LT Pro - 0e11 b10e 3D Rage LT Pro (Compaq Armada 1750) - 1002 0040 Rage LT Pro AGP 2X - 1002 0044 Rage LT Pro AGP 2X - 1002 4c42 Rage LT Pro AGP 2X - 1002 8001 Rage LT Pro AGP 2X - 1028 0085 Rage 3D LT Pro - 4c44 3D Rage LT Pro AGP-66 - 4c45 Rage Mobility M3 AGP - 4c46 Rage Mobility M3 AGP 2x - 1002 0155 IBM Thinkpad A22p - 1014 0155 IBM Thinkpad A22p - 1028 00b1 Latitude C600 - 4c47 3D Rage LT-G 215LG - 4c49 3D Rage LT Pro - 1002 0004 Rage LT Pro - 1002 0040 Rage LT Pro - 1002 0044 Rage LT Pro - 1002 4c49 Rage LT Pro - 4c4d Rage Mobility P/M AGP 2x - 0e11 b111 Armada M700 - 0e11 b160 Armada E500 - 1002 0084 Xpert 98 AGP 2X (Mobility) - 1014 0154 ThinkPad A20m/A21m - 1028 00aa Latitude CPt - 1028 00bb Latitude CPx - 1179 ff00 Satellite 1715XCDS laptop - 13bd 1019 PC-AR10 - 4c4e Rage Mobility L AGP 2x - 4c50 3D Rage LT Pro - 1002 4c50 Rage LT Pro - 4c51 3D Rage LT Pro - 4c52 Rage Mobility P/M - 1033 8112 Versa Note VXi - 4c53 Rage Mobility L - 4c54 264LT [Mach64 LT] - 4c57 Radeon Mobility M7 LW [Radeon Mobility 7500] - 1014 0517 ThinkPad T30 - 1014 0530 ThinkPad T42 2373-4WU - 1028 00e6 Radeon Mobility M7 LW (Dell Inspiron 8100) - 1028 012a Latitude C640 - 1043 1622 Mobility Radeon M7 (L3C/S) - 144d c006 Radeon Mobility M7 LW in vpr Matrix 170B4 - 4c58 Radeon RV200 LX [Mobility FireGL 7800 M7] - 4c59 Radeon Mobility M6 LY - 0e11 b111 Evo N600c - 1014 0235 ThinkPad A30/A30p (2652/2653) - 1014 0239 ThinkPad X22/X23/X24 - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 104d 8140 PCG-Z1SP laptop - 1509 1930 Medion MD9703 - 4c5a Radeon Mobility M6 LZ - 4c64 Radeon RV250 Ld [Radeon Mobility 9000 M9] - 4c65 Radeon RV250 Le [Radeon Mobility 9000 M9] - 4c66 Radeon RV250 [Mobility FireGL 9000] - 1014 054d ThinkPad T41 - 4c67 Radeon RV250 Lg [Radeon Mobility 9000 M9] -# Secondary chip to the Lf - 4c6e Radeon RV250 Ln [Radeon Mobility 9000 M9] (Secondary) - 4d46 Rage Mobility M4 AGP - 4d4c Rage Mobility M4 AGP - 4d52 Theater 550 PRO PCI [ATI TV Wonder 550] - 4d53 Theater 550 PRO PCIe - 4e44 Radeon R300 ND [Radeon 9700 Pro] - 1002 515e Radeon ES1000 - 1002 5965 Radeon ES1000 - 4e45 Radeon R300 NE [Radeon 9500 Pro] - 1002 0002 Radeon R300 NE [Radeon 9500 Pro] - 1681 0002 Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] - 4e46 R300 NF [Radeon 9600 TX] - 4e47 Radeon R300 NG [FireGL X1] - 4e48 Radeon R350 [Radeon 9800 Pro] - 4e49 Radeon R350 [Radeon 9800] - 4e4a R360 NJ [Radeon 9800 XT] - 1002 4e4a R360 [Radeon 9800 XT] - 4e4b R350 NK [FireGL X2] - 4e50 RV350 [Mobility Radeon 9600 M10] - 1025 005a TravelMate 290 - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 144d c00c P35 notebook - 1462 0311 MSI M510A - 1734 1055 Amilo M1420W - 4e51 M10 NQ [Radeon Mobility 9600] - 4e52 RV350 [Mobility Radeon 9600 M10] - 144d c00c P35 notebook - 4e53 M10 NS [Radeon Mobility 9600] - 4e54 M10 NT [FireGL Mobility T2] - 4e56 M11 NV [FireGL Mobility T2e] - 4e64 Radeon R300 [Radeon 9700 Pro] (Secondary) - 4e65 Radeon R300 [Radeon 9500 Pro] (Secondary) - 1002 0003 Radeon R300 NE [Radeon 9500 Pro] - 1681 0003 Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] (Secondary) - 4e66 RV350 NF [Radeon 9600] (Secondary) - 4e67 Radeon R300 [FireGL X1] (Secondary) - 4e68 Radeon R350 [Radeon 9800 Pro] (Secondary) - 4e69 Radeon R350 [Radeon 9800] (Secondary) - 4e6a RV350 NJ [Radeon 9800 XT] (Secondary) - 1002 4e6a R360 [Radeon 9800 XT] (Secondary) - 1002 4e71 M10 NQ [Radeon Mobility 9600] - 4e71 M10 NQ [Radeon Mobility 9600] (Secondary) - 4f72 RV250 [Radeon 9000 Series] - 4f73 Radeon RV250 [Radeon 9000 Series] (Secondary) - 5041 Rage 128 PA/PRO - 5042 Rage 128 PB/PRO AGP 2x - 5043 Rage 128 PC/PRO AGP 4x - 5044 Rage 128 PD/PRO TMDS - 1002 0028 Rage 128 AIW - 1002 0029 Rage 128 AIW - 5045 Rage 128 PE/PRO AGP 2x TMDS - 5046 Rage 128 PF/PRO AGP 4x TMDS - 1002 0004 Rage Fury Pro - 1002 0008 Rage Fury Pro/Xpert 2000 Pro - 1002 0014 Rage Fury Pro - 1002 0018 Rage Fury Pro/Xpert 2000 Pro - 1002 0028 Rage 128 Pro AIW AGP - 1002 002a Rage 128 Pro AIW AGP - 1002 0048 Rage Fury Pro - 1002 2000 Rage Fury MAXX AGP 4x (TMDS) (VGA device) - 1002 2001 Rage Fury MAXX AGP 4x (TMDS) (Extra device?!) - 5047 Rage 128 PG/PRO - 5048 Rage 128 PH/PRO AGP 2x - 5049 Rage 128 PI/PRO AGP 4x - 504a Rage 128 PJ/PRO TMDS - 504b Rage 128 PK/PRO AGP 2x TMDS - 504c Rage 128 PL/PRO AGP 4x TMDS - 504d Rage 128 PM/PRO - 504e Rage 128 PN/PRO AGP 2x - 504f Rage 128 PO/PRO AGP 4x - 5050 Rage 128 PP/PRO TMDS [Xpert 128] - 1002 0008 Xpert 128 - 5051 Rage 128 PQ/PRO AGP 2x TMDS - 5052 Rage 128 PR/PRO AGP 4x TMDS - 5053 Rage 128 PS/PRO - 5054 Rage 128 PT/PRO AGP 2x - 5055 Rage 128 PU/PRO AGP 4x - 5056 Rage 128 PV/PRO TMDS - 5057 Rage 128 PW/PRO AGP 2x TMDS - 5058 Rage 128 PX/PRO AGP 4x TMDS - 5144 Radeon R100 QD [Radeon 7200] - 1002 0008 Radeon 7000/Radeon VE - 1002 0009 Radeon 7000/Radeon - 1002 000a Radeon 7000/Radeon - 1002 001a Radeon 7000/Radeon - 1002 0029 Radeon AIW - 1002 0038 Radeon 7000/Radeon - 1002 0039 Radeon 7000/Radeon - 1002 008a Radeon 7000/Radeon - 1002 00ba Radeon 7000/Radeon - 1002 0139 Radeon 7000/Radeon - 1002 028a Radeon 7000/Radeon - 1002 02aa Radeon AIW - 1002 053a Radeon 7000/Radeon - 5145 Radeon R100 QE - 5146 Radeon R100 QF - 5147 Radeon R100 QG - 5148 Radeon R200 QH [Radeon 8500] - 1002 010a FireGL 8800 64Mb - 1002 0152 FireGL 8800 128Mb - 1002 0162 FireGL 8700 32Mb - 1002 0172 FireGL 8700 64Mb - 5149 Radeon R200 QI - 514a Radeon R200 QJ - 514b Radeon R200 QK - 514c Radeon R200 QL [Radeon 8500 LE] - 1002 003a Radeon R200 QL [Radeon 8500 LE] - 1002 013a Radeon 8500 - 148c 2026 R200 QL [Radeon 8500 Evil Master II Multi Display Edition] - 1681 0010 Radeon 8500 [3D Prophet 8500 128Mb] - 174b 7149 Radeon R200 QL [Sapphire Radeon 8500 LE] - 514d Radeon R200 QM [Radeon 9100] - 514e Radeon R200 QN [Radeon 8500LE] - 514f Radeon R200 QO [Radeon 8500LE] - 5154 R200 QT [Radeon 8500] - 5155 R200 QU [Radeon 9100] - 5157 Radeon RV200 QW [Radeon 7500] - 1002 013a Radeon 7500 - 1002 0f2b ALL-IN-WONDER VE PCI - 1002 103a Dell Optiplex GX260 - 1458 4000 RV200 QW [RADEON 7500 PRO MAYA AR] - 148c 2024 RV200 QW [Radeon 7500LE Dual Display] - 148c 2025 RV200 QW [Radeon 7500 Evil Master Multi Display Edition] - 148c 2036 RV200 QW [Radeon 7500 PCI Dual Display] - 174b 7146 RV200 QW [Radeon 7500 LE] - 174b 7147 RV200 QW [Sapphire Radeon 7500LE] - 174b 7161 Radeon RV200 QW [Radeon 7500 LE] - 17af 0202 RV200 QW [Excalibur Radeon 7500LE] - 5158 Radeon RV200 QX [Radeon 7500] - 5159 Radeon RV100 QY [Radeon 7000/VE] - 1002 000a Radeon 7000/Radeon VE - 1002 000b Radeon 7000 - 1002 0038 Radeon 7000/Radeon VE - 1002 003a Radeon 7000/Radeon VE - 1002 00ba Radeon 7000/Radeon VE - 1002 013a Radeon 7000/Radeon VE - 1002 0908 XVR-100 (supplied by Sun) -# The IBM card doubles as an ATI PCI video adapter - 1014 029a Remote Supervisor Adapter II (RSA2) - 1014 02c8 eServer xSeries server mainboard - 1028 016c PowerEdge 1850 Embedded Radeon 7000/VE - 1028 016d PowerEdge 2850 Embedded Radeon 7000-M - 1028 0170 PowerEdge 6850 Embedded Radeon 7000/VE - 1028 019a PowerEdge SC1425 - 103c 1292 Radeon 7000 - 1043 c00a A7000/T/64M - 1458 4002 RV100 QY [RADEON 7000 PRO MAYA AV Series] - 148c 2003 RV100 QY [Radeon 7000 Multi-Display Edition] - 148c 2023 RV100 QY [Radeon 7000 Evil Master Multi-Display] - 174b 0280 Radeon RV100 QY [Radeon 7000/VE] - 174b 7112 RV100 QY [Sapphire Radeon VE 7000] - 174b 7c28 Sapphire Radeon VE 7000 DDR - 1787 0202 RV100 QY [Excalibur Radeon 7000] - 17ee 1001 Radeon 7000 64MB DDR + DVI - 515a Radeon RV100 QZ [Radeon 7000/VE] - 515e ES1000 - 1028 01bb PowerEdge 1955 Embedded ATI ES1000 - 1028 01df PowerEdge SC440 - 1028 01e6 PowerEdge 860 - 1028 01f0 PowerEdge R900 Embedded ATI ES1000 - 1028 0205 PowerEdge 2970 Embedded ATI ES1000 - 1028 020b PowerEdge T605 Embedded ATI ES1000 - 1028 020f PowerEdge R300 Embedded ATI ES1000 - 1028 0210 PowerEdge T300 Embedded ATI ES1000 - 1028 0221 PowerEdge R805 Embedded ATI ES1000 - 1028 0223 PowerEdge R905 Embedded ATI ES1000 - 1028 0225 PowerEdge T105 Embedded ATI ES1000 - 1028 023c PowerEdge R200 Embedded ATI ES1000 - 103c 1304 Integrity iLO2 Advanced KVM VGA [AD307A] - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 S5000PSLSATA Server Board - 515f ES1000 - 5168 Radeon R200 Qh - 5169 Radeon R200 Qi - 516a Radeon R200 Qj - 516b Radeon R200 Qk -# This one is not in ATI documentation, but is in XFree86 source code - 516c Radeon R200 Ql - 5245 Rage 128 RE/SG - 1002 0008 Xpert 128 - 1002 0028 Rage 128 AIW - 1002 0029 Rage 128 AIW - 1002 0068 Rage 128 AIW - 5246 Rage 128 RF/SG AGP - 1002 0004 Magnum/Xpert 128/Xpert 99 - 1002 0008 Magnum/Xpert128/X99/Xpert2000 - 1002 0028 Rage 128 AIW AGP - 1002 0044 Rage Fury/Xpert 128/Xpert 2000 - 1002 0068 Rage 128 AIW AGP - 1002 0448 Rage Fury - 5247 Rage 128 RG - 524b Rage 128 RK/VR - 524c Rage 128 RL/VR AGP - 1002 0008 Xpert 99/Xpert 2000 - 1002 0088 Xpert 99 - 5345 Rage 128 SE/4x - 5346 Rage 128 SF/4x AGP 2x - 1002 0048 RAGE 128 16MB VGA TVOUT AMC PAL - 5347 Rage 128 SG/4x AGP 4x - 5348 Rage 128 SH - 534b Rage 128 SK/4x - 534c Rage 128 SL/4x AGP 2x - 534d Rage 128 SM/4x AGP 4x - 1002 0008 Xpert 99/Xpert 2000 - 1002 0018 Xpert 2000 - 534e Rage 128 4x - 5354 Mach 64 VT - 1002 5654 Mach 64 reference - 5446 Rage 128 Pro Ultra TF - 1002 0004 Rage Fury Pro - 1002 0008 Rage Fury Pro/Xpert 2000 Pro - 1002 0018 Rage Fury Pro/Xpert 2000 Pro - 1002 0028 Rage 128 AIW Pro AGP - 1002 0029 Rage 128 AIW - 1002 002a Rage 128 AIW Pro AGP - 1002 002b Rage 128 AIW - 1002 0048 Xpert 2000 Pro - 544c Rage 128 Pro Ultra TL - 5452 Rage 128 Pro Ultra TR - 1002 001c Rage 128 Pro 4XL - 103c 1279 Rage 128 Pro 4XL - 5453 Rage 128 Pro Ultra TS - 5454 Rage 128 Pro Ultra TT - 5455 Rage 128 Pro Ultra TU - 5460 M22 [Mobility Radeon X300] - 1775 1100 CR11/VR11 Single Board Computer - 5461 M22 [Mobility Radeon X300] - 5462 M24 [Radeon Mobility X600] - 5464 M22 [FireGL GL] - 5548 R423 UH [Radeon X800 (PCIE)] - 5549 R423 UI [Radeon X800PRO (PCIE)] - 554a R423 UJ [Radeon X800LE (PCIE)] - 554b R423 UK [Radeon X800SE (PCIE)] - 554c Radeon X800 XTP (R430) (PCIE) - 554d R430 [Radeon X800 XL] (PCIe) - 1458 2124 GV-R80L256V-B (AGP) - 554e Radeon X800 SE (R430) (PCIE) - 554f R430 [Radeon X800 (PCIE)] - 5550 R423 [FireGL V7100] - 5551 R423 [FireGL V5100 (PCIE)] - 5552 R423 UR [FireGL V5100 (PCIE)] - 5554 R423 UT [FireGL V7100 (PCIE)] - 5555 R430 GL PRO - 5569 R423 UI [Radeon X800PRO (PCIE)] (Secondary) - 556b Radeon R423 UK (PCIE) [X800 SE] (Secondary) - 556d R430 [Radeon X800 XL] (PCIe) (Secondary) - 1458 2125 GV-R80L256V-B (AGP) - 556f R430 [Radeon X800] (PCIE) (Secondary) - 5571 R423GL-SE [FireGL V5100 (PCIE)] (Secondary) - 564a M26 [Mobility FireGL V5000] - 564b M26 [Mobility FireGL V5000] - 564f M26 [Radeon Mobility X700 XL (PCIE)] - 5652 M26 [Radeon Mobility X700] - 5653 Radeon Mobility X700 (PCIE) - 1025 0080 Aspire 5024WLMi - 103c 0940 HP Compaq NW8240 Mobile Workstation - 5654 264VT [Mach64 VT] - 1002 5654 Mach64VT Reference - 5655 264VT3 [Mach64 VT3] - 5656 264VT4 [Mach64 VT4] - 5657 Radeon X550/X700 Series (RV410) - 5830 RS300 Host Bridge - 5831 RS300 Host Bridge - 5832 RS300 Host Bridge - 5833 Radeon 9100 IGP Host Bridge - 5834 Radeon 9100 IGP - 5835 RS300M AGP [Radeon Mobility 9100IGP] - 5838 Radeon 9100 IGP AGP Bridge - 5854 Radeon Xpress Series (RS480) - 5874 Radeon Xpress Series (RS482) - 5940 RV280 [Radeon 9200 PRO] (Secondary) - 17af 2021 Excalibur Radeon 9250 (Secondary) - 5941 RV280 [Radeon 9200] (Secondary) - 1458 4019 Gigabyte Radeon 9200 - 174b 7c12 Sapphire Radeon 9200 - 17af 200d Excalibur Radeon 9200 - 18bc 0050 GeXcube GC-R9200-C3 (Secondary) - 5944 RV280 [Radeon 9200 SE (PCI)] - 5950 RS480 Host Bridge - 1025 0080 Aspire 5024WLMMi - 103c 280a DC5750 Microtower - 103c 308b MX6125 - 1462 0131 MS-1013 Notebook - 1462 7217 Aspire L250 - 5951 Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge - 5952 RD580 [CrossFire Xpress 3200] Chipset Host Bridge - 5954 RS480 [Radeon Xpress 200G Series] - 1002 5954 RV370 [Radeon Xpress 200G Series] - 5955 Radeon XPRESS 200M 5955 (PCIE) - 1002 5955 RS480 0x5955 [Radeon XPRESS 200M 5955 (PCIE)] - 103c 308b MX6125 - 1462 0131 MS-1013 Notebook - 5956 RD790 Northbridge only dual slot PCI-e_GFX and HT3 K8 part - 5957 RX780/RX790 Chipset Host Bridge - 1849 5957 A770CrossFire Motherboard - 5958 RD780 Northbridge only dual slot PCI-e_GFX and HT1 K8 part - 5960 RV280 [Radeon 9200 PRO] - 17af 2020 Excalibur Radeon 9250 - 5961 RV280 [Radeon 9200] - 1002 2f72 All-in-Wonder 9200 Series - 1019 4c30 Radeon 9200 VIVO - 12ab 5961 YUAN SMARTVGA Radeon 9200 - 1458 4018 Gigabyte Radeon 9200 - 174b 7c13 Sapphire Radeon 9200 - 17af 200c Excalibur Radeon 9200 - 18bc 0050 Radeon 9200 Game Buster - 18bc 0051 GeXcube GC-R9200-C3 - 18bc 0053 Radeon 9200 Game Buster VIVO - 5962 RV280 [Radeon 9200] - 5964 RV280 [Radeon 9200 SE] - 1002 5964 Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz - 1043 c006 ASUS Radeon 9200 SE / TD / 128M - 1458 4018 Radeon 9200 SE - 1458 4032 Radeon 9200 SE 128MB - 147b 6191 R9200SE-DT - 148c 2073 CN-AG92E - 174b 7c13 Sapphire Radeon 9200 SE - 1787 5964 Excalibur 9200SE VIVO 128M - 17af 2012 Radeon 9200 SE Excalibur - 18bc 0170 Sapphire Radeon 9200 SE 128MB Game Buster - 18bc 0173 GC-R9200L(SE)-C3H [Radeon 9200 Game Buster] - 5965 RV280 [FireMV 2200 PCI] - 5969 ES1000 - 5974 RS482 [Radeon Xpress 200] - 103c 280a DC5750 Microtower - 1462 7141 Aspire L250 - 5975 RS482 [Radeon Xpress 200M] - 5978 RD790 PCI to PCI bridge (external gfx0 port A) - 1849 5957 A770CrossFire Motherboard - 5979 RD790 PCI to PCI bridge (external gfx0 port B) - 597a RD790 PCI to PCI bridge (PCI express gpp port A) - 597b RD790 PCI to PCI bridge (PCI express gpp port B) - 597c RD790 PCI to PCI bridge (PCI express gpp port C) - 597d RD790 PCI to PCI bridge (PCI express gpp port D) - 597e RD790 PCI to PCI bridge (PCI express gpp port E) - 1849 5957 A770CrossFire Motherboard - 597f RD790 PCI to PCI bridge (PCI express gpp port F) - 1849 5957 A770CrossFire Motherboard - 5980 RD790 PCI to PCI bridge (external gfx1 port A) - 5981 RD790 PCI to PCI bridge (external gfx1 port B) - 5982 RD790 PCI to PCI bridge (NB-SB link) - 5a10 RD890 Northbridge only dual slot (2x16) PCI-e GFX Hydra part - 5a11 RD890 Northbridge only single slot PCI-e GFX Hydra part - 5a12 RD890 Northbridge only dual slot (2x8) PCI-e GFX Hydra part - 5a13 RD890 PCI to PCI bridge (external gfx0 port A) - 5a14 RD890 PCI to PCI bridge (external gfx0 port B) - 5a15 RD890 PCI to PCI bridge (PCI express gpp port A) - 5a16 RD890 PCI to PCI bridge (PCI express gpp port B) - 5a17 RD890 PCI to PCI bridge (PCI express gpp port C) - 5a18 RD890 PCI to PCI bridge (PCI express gpp port D) - 5a19 RD890 PCI to PCI bridge (PCI express gpp port E) - 5a1a RD890 PCI to PCI bridge (PCI express gpp port F) - 5a1b RD890 PCI to PCI bridge (PCI express gpp port G) - 5a1c RD890 PCI to PCI bridge (PCI express gpp port H) - 5a1d RD890 PCI to PCI bridge (external gfx1 port A) - 5a1e RD890 PCI to PCI bridge (external gfx1 port B) - 5a1f RD890 PCI to PCI bridge (NB-SB link) - 5a33 Radeon Xpress 200 Host Bridge - 5a34 RS480 PCI-X Root Port -# Comes in pair with 5a3f - 5a36 RS480 PCI Bridge - 5a37 RS480 PCI Bridge - 5a38 RS480 PCI Bridge -# Comes in pair with 5a38 - 5a39 RS480 PCI Bridge - 5a3f RS480 PCI Bridge - 1462 7217 Aspire L250 - 5a41 RS400 [Radeon Xpress 200] - 5a42 RS400 [Radeon Xpress 200M] - 5a43 Radeon Xpress Series (RS400) - 5a61 RC410 [Radeon Xpress 200] - 5a62 RC410 [Radeon Xpress 200M] - 5a63 Radeon Xpress Series (RC410) - 5b60 RV370 5B60 [Radeon X300 (PCIE)] - 1043 002a Extreme AX300SE-X - 1043 032e Extreme AX300/TD - 1458 2102 GV-RX30S128D (X300SE) - 1462 0400 RX300SE-TD128E (MS-8940 REV:200) - 1462 0402 RX300SE-TD128E (MS-8940) - 174b 0500 Radeon X300 (PCIE) - 196d 1086 X300SE HM - 5b62 RV380 [Radeon X600 (PCIE)] - 5b63 RV370 [Sapphire X550 Silent] - 5b64 RV370 5B64 [FireGL V3100 (PCIE)] - 5b65 RV370 5B65 [FireGL D1100 (PCIE)] - 5b66 RV370X - 5b70 RV370 [Radeon X300SE] - 1462 0403 RX300SE-TD128E (MS-8940) (secondary display) - 174b 0501 Radeon X300SE - 196d 1087 X300SE HM - 5b72 RV380 [Radeon X600] - 5b73 RV370 secondary [Sapphire X550 Silent] - 5b74 RV370 5B64 [FireGL V3100 (PCIE)] (Secondary) - 5b75 RV370 5B75 [FireGL D1100 (PCIE)] (Secondary) - 5c61 M9+ 5C61 [Radeon Mobility 9200 (AGP)] - 5c63 M9+ 5C63 [Radeon Mobility 9200 (AGP)] - 1002 5c63 Apple iBook G4 2004 - 144d c00c P30 notebook - 5d44 RV280 [Radeon 9200 SE] (Secondary) - 1458 4019 Radeon 9200 SE (Secondary) - 1458 4032 Radeon 9200 SE 128MB - 147b 6190 R9200SE-DT (Secondary) - 174b 7c12 Sapphire Radeon 9200 SE (Secondary) - 1787 5965 Excalibur 9200SE VIVO 128M (Secondary) - 17af 2013 Radeon 9200 SE Excalibur (Secondary) - 18bc 0171 Radeon 9200 SE 128MB Game Buster (Secondary) - 18bc 0172 GC-R9200L(SE)-C3H [Radeon 9200 Game Buster] - 5d45 RV280 [FireMV 2200 PCI] (secondary) - 5d48 M28 [Radeon Mobility X800XT] - 5d49 M28 [Mobility FireGL V5100] - 5d4a Mobility Radeon X800 - 5d4c Radeon X850 (PCIE) - 5d4d R480 [Radeon X850XT Platinum (PCIE)] - 5d4e Radeon X850 SE (R480) (PCIE) - 5d4f R480 [Radeon X800 GTO (PCIE)] - 5d50 FireGL V7200 (R480) (PCIE) - 5d51 R480 GL 12P - 5d52 R480 [Radeon X850XT (PCIE)] (Primary) - 1002 0b12 PowerColor X850XT PCIe (Primary) - 1002 0b13 PowerColor X850XT PCIe (Secondary) - 5d57 R423 5F57 [Radeon X800XT (PCIE)] - 5d6d R480 [Radeon X850XT Platinum (PCIE)] (Secondary) - 5d6f R480 [Radeon X800 GTO (PCIE)] (Secondary) - 5d72 R480 [Radeon X850XT (PCIE)] (Secondary) - 5d77 R423 5F57 [Radeon X800XT (PCIE)] (Secondary) - 5e48 RV410 [FireGL V5000] - 5e49 RV410 [FireGL V3300] - 5e4a RV410 [Radeon X700XT] - 5e4b RV410 [Radeon X700 Pro (PCIE)] - 5e4c RV410 [Radeon X700SE] - 5e4d RV410 [Radeon X700 (PCIE)] - 148c 2116 PowerColor Bravo X700 - 5e4f RV410 [Radeon X700] - 5e6b RV410 [Radeon X700 Pro (PCIE)] (Secondary) - 5e6d RV410 [Radeon X700 (PCIE)] (Secondary) - 148c 2117 PowerColor Bravo X700 - 5f57 R423 [Radeon X800XT (PCIE)] - 700f PCI Bridge [IGP 320M] - 7010 PCI Bridge [IGP 340M] - 7100 R520 [Radeon X1800] - 7102 M58 [Radeon Mobility X1800] - 7103 M58 [Mobility FireGL V7200] - 7104 R520GL [FireGL V7200] (Primary) - 7105 R520 [FireGL] - 7106 M58 [Mobility FireGL V7100] - 7108 M58 [Radeon Mobility X1800] - 7109 R520 [Radeon X1800] - 1002 0322 All-in-Wonder X1800XL - 1002 0d02 Radeon X1800 CrossFire Edition - 710a R520 [Radeon X1800] - 710b R520 [Radeon X1800] - 710c R520 [Radeon X1800] - 7120 R520 [Radeon X1800] (Secondary) - 7124 R520GL [FireGL V7200] (Secondary) - 7129 R520 [Radeon X1800] (Secondary) - 1002 0323 All-in-Wonder X1800XL (Secondary) - 1002 0d03 Radeon X1800 CrossFire Edition (Secondary) - 7140 RV515 [Radeon X1600] - 7142 RV515 PRO [Radeon X1300/X1550 Series] - 1002 0322 All-in-Wonder 2006 PCI-E Edition - 1043 0142 EAX1300PRO/TD/256M - 7143 RV505 [Radeon X1550 Series] - 7145 Radeon Mobility X1400 - 17aa 2006 Thinkpad T60 model 2007 - 7146 RV515 [Radeon X1300] - 1002 0322 All-in-Wonder 2006 PCI-E Edition - 1545 1996 Radeon X1300 512MB PCI-e - 7147 RV505 [Radeon X1550 64-bit] - 7149 M52 [Mobility Radeon X1300] - 714a M52 [Mobility Radeon X1300] - 714b M52 [Mobility Radeon X1300] - 714c M52 [Mobility Radeon X1300] - 714d RV515 [Radeon X1300] - 714e RV515LE [Radeon X1300] - 7152 RV515GL [FireGL V3300] (Primary) - 7153 RV515GL [FireGL V3350] - 715e RV515 [Radeon X1300] - 715f RV505 CE [Radeon X1550 64-bit] - 7162 RV515 PRO [Radeon X1300/X1550 Series] (Secondary) - 1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary) - 7163 RV505 [Radeon X1550 Series] (Secondary) - 7166 RV515 [Radeon X1300] (Secondary) - 1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary) - 1545 1997 Radeon X1300 512MB PCI-e (Secondary) - 716e RV515LE [Radeon X1300] Secondary - 7172 RV515GL [FireGL V3300] (Secondary) - 7173 RV515GL [FireGL V3350] (Secondary) - 7180 RV516 [Radeon X1300/X1550 Series] - 7181 RV516 XT Radeon X1600 Series (Primary) - 7183 RV516 [Radeon X1300/X1550 Series] - 7186 RV515 [Radeon Mobility X1450] - 7187 RV516 [Radeon X1300/X1550 Series] - 7188 M64-S [Mobility Radeon X2300] - 103c 30c1 6910p - 718a Mobility Radeon X2300 - 718c M62CSP64 [Mobility Radeon X1350] - 718d M64CSP128 [Mobility Radeon X1450] - 7193 RV516 [Radeon X1550 Series] - 7196 RV516 [Mobility Radeon X1350] - 719b FireMV 2250 - 719f RV516LE [Radeon X1550 64-bit] - 71a0 RV516 [Radeon X1300/X1550 Series] (Secondary) - 71a1 RV516 XT Radeon X1600 Series (Secondary) - 71a3 RV516 [Radeon X1300 Pro] (Secondary) - 71a7 RV516 [Radeon X1300/X1550 Series] (Secondary) - 71bb FireMV 2250 (Secondary) - 71c0 RV530 [Radeon X1600] - 71c1 Radeon X1650 Pro - 71c2 RV530 [Radeon X1600] - 71c4 M56GL [Mobility FireGL V5200] - 17aa 2007 ThinkPad T60p - 71c5 M56P [Radeon Mobility X1600] - 103c 309f Compaq nx9420 Notebook - 103c 30a3 Compaq NW8440 - 1043 10b2 A6J-Q008 - 106b 0080 MacBook Pro - 71c6 RV530LE [Radeon X1600/X1650 PRO] - 71c7 RV535 [Radeon X1650 Series] - 71ce RV530LE [Radeon X1600] - 71d2 RV530GL [FireGL V3400] - 71d4 M56GL [Mobility FireGL V5250] - 71d5 M66-P [Mobility Radeon X1700] - 71d6 M66-XT [Mobility Radeon X1700] - 71de RV530LE [Radeon X1600] - 71e0 RV530 [Radeon X1600] (Secondary) - 71e1 Radeon X1650 Pro (Secondary) - 71e2 RV530 [Radeon X1600] (Secondary) - 71e6 RV530LE [Radeon X1650 PRO] (Secondary) - 71e7 RV535 [Radeon X1650 Series] - 71f2 RV530GL [FireGL V3400 (Secondary)] - 7210 M71 [Mobility Radeon X2100] - 7211 M71 [Mobility Radeon X2100] (Secondary) - 7240 R580 [Radeon X1900] - 7241 R580 [Radeon X1900] - 7242 R580 [Radeon X1900] - 7243 R580 [Radeon X1900] - 7244 R580 [Radeon X1900] - 7245 R580 [Radeon X1900] - 7246 R580 [Radeon X1900] - 7247 R580 [Radeon X1900] - 7248 R580 [Radeon X1900] - 7249 R580 [Radeon X1900 XT] (Primary) - 724a R580 [Radeon X1900] - 724b R580 [Radeon X1900] - 1002 0b12 Radeon X1900 (Primary) - 1002 0b13 Radeon X1900 (Secondary) - 724c R580 [Radeon X1900] - 724d R580 [Radeon X1900] - 724e R580 [AMD Stream Processor] - 7269 R580 [Radeon X1900 XT] (Secondary) - 726b R580 [Radeon X1900] - 726e R580 [AMD Stream Processor] (Secondary) - 7280 RV570 [Radeon X1950 Pro] - 7288 Radeon X1950 GT - 7291 Radeon X1650 XT (Primary) (PCIE) - 7293 Radeon X1650 Series - 72a0 RV570 [Radeon X1950 Pro] (secondary) - 72a8 Radeon X1950 GT (Secondary) - 72b1 Radeon X1650 XT (Secondary) (PCIE) - 72b3 Radeon X1650 Series (Secondary) - 7833 Radeon 9100 IGP Host Bridge - 7834 Radeon 9100 PRO IGP - 7835 Radeon Mobility 9200 IGP - 7838 Radeon 9100 IGP PCI/AGP Bridge - 7910 RS690 Host Bridge - 17f2 5000 KI690-AM2 Motherboard - 7911 RS690 Host Bridge - 7912 RS690 PCI to PCI Bridge (Internal gfx) - 7913 RS690 PCI to PCI Bridge (PCI Express Graphics Port 0) - 7915 RS690 PCI to PCI Bridge (PCI Express Port 1) - 7916 RS690 PCI to PCI Bridge (PCI Express Port 2) - 7917 RS690 PCI to PCI Bridge (PCI Express Port 3) - 1002 7910 RS690 PCI to PCI Bridge - 7919 Radeon X1200 Series Audio Controller - 17f2 5000 KI690-AM2 Motherboard - 791e RS690 [Radeon X1200 Series] - 1462 7327 K9AG Neo2 - 17f2 5000 KI690-AM2 Motherboard - 791f RS690M [Radeon X1200 Series] - 7930 Radeon Xpress 7930 Host Bridge - 7932 RS7932 PCI Bridge - 7933 RS7933 PCI Bridge - 7936 RS7936 PCI Bridge - 793b RS600 audio device [Radeon Xpress 12xx Series] - 793f RS600 [Radeon Xpress 1200 Series] - 7941 RS600 [Radeon Xpress 1200 Series] - 7942 Radeon Xpress 1250 - 796e Radeon 2100 - 7c37 RV350 AQ [Radeon 9600 SE] - 9400 R600 [Radeon HD 2900 Series] - 1002 3000 Sapphire Radeon HD 2900 XT - 1002 3142 HIS Radeon HD 2900XT 512MB GDDR3 VIVO PCIe - 9403 R600 [Radeon HD 2900 PRO] - 940a R600GL [Fire GL V8650] - 940b R600GL [Fire GL V8600] - 940f R600 [FireGL V7600] - 9440 RV770 [Radeon HD 4870] - 9441 R700 [Radeon HD 4870 X2] - 9442 RV770 [Radeon HD 4850] - 174b e810 Sapphire HD 4850 512MB GDDR3 PCI-E Dual Slot Fansink - 9443 R700 [Radeon HD 4850] - 944a M98L [Mobility Radeon HD 4850] - 944c RV770 LE [Radeon HD 4800 Series] - 9450 RV770 [FireStream 9270] - 9452 RV770 [FireStream 9250] - 945a M98 XT [Mobility Radeon HD 4870] - 9460 RV790 [Radeon HD 4800 Series] - 9480 M96 [Mobility Radeon HD 4650] - 103c 3628 ATI Mobility Radeon HD 4650 [dv6-1190en] - 9489 M96 XT [Mobility FireGL V5725] - 9490 RV730XT [Radeon HD 4670] - 174b e880 Radeon HD 4670 512MB DDR3 - 9491 M96 CSP [ATI RADEON E4690] - 9495 HD 4650 - 1002 9495 RV730 XT [PowerColor Radeon HD4670 AGP 1GB DDR] - 1458 0028 HD4650 - 9498 RV730 PRO [Radeon HD 4650] - 949f RV730 [FirePro V5700] - 94a0 Mobility Radeon HD 4830 [M97] - 94a1 [M97 XT] Mobility Radeon HD 4860 - 94a3 M97 GL [ATI FirePro M7740] - 94b3 Radeon HD 4770 [RV740] - 94b4 RV740 LE [ATI Radeon HD 4700 Series] - 94c1 RV610 [Radeon HD 2400 XT] - 1028 0211 Optiplex 755 - 1028 0d02 Optiplex 755 - 94c3 RV610 video device [Radeon HD 2400 PRO] - 1002 94c3 Radeon HD 2400PRO - 174b e400 Sapphire HD 2400 PRO video device - 18bc 3550 GeCube Radeon HD2400 PRO - 94c4 RV610 LE AGP [Radeon HD 2400 PRO AGP] - 94c8 Radeon HD 2400 XT - 94c9 Mobility Radeon HD 2400 - 1002 94c9 Radeon HD2400 - 94cb Radeon E2400 - 94cc RV 610LE PCI [Radeon HD 2400] - 9501 Radeon HD 3870 - 9504 Mobility Radeon HD 3850 - 9505 RV670PRO [Radeon HD 3850] - 9507 RV670 [Radeon HD 3850] - 9508 M88 XT Mobility Radeon HD 3870] - 950f R680 [Radeon HD 3870 x2] - 9511 RV670 [FireGL 7700] - 9515 RV670 AGP [Radeon HD 3850] - 9519 RV670 [FireStream 9170] - 9540 RV710 [Radeon HD 4550] - 954f RV710 [Radeon HD 4350] - 9552 M92 LP [Mobility Radeon HD 4300 Series] - 9553 M92 [Mobility Radeon HD 4500 Series] - 9555 M93 [Mobility Radeon HD 4500 Series] - 9559 Mobility Radeon HD 3600 Series - 9581 M76 [Radeon Mobility HD 2600 Series] - 9583 M76XT [Mobility Radeon HD 2600 XT] - 9586 RV 630 XT AGP [Radeon HD 2600 XT AGP] - 9587 RV630 PRO AGP [Radeon HD 2600 PRO AGP] - 9588 RV630 [Radeon HD 2600XT] - 1458 216c Radeon HD 2600 XT, 256MB GDDR3, 2x DVI, TV-out, PCIe (GV-RX26T256H) - 9589 RV630 [Radeon HD 2600 Series] - 958c RV630GL [FireGL v5600] - 958d RV630 [FireGL V3600] - 9591 Mobility Radeon HD 3650 - 1002 9591 Mobility Radeon HD 3650 - 9593 Radeon Mobility HD 3670 - 9595 M86GL [Mobility FireGL V5700] - 9596 RV635 PRO AGP [Radeon HD 3650] - 9598 Mobility Radeon HD 3600 Series - 1002 9598 Mobility Radeon HD 3600 - 1043 01d6 EAH3650 Silent - 95c0 Mobility Radeon HD 3470 - 1002 95c0 Mobility Radeon HD 3470 - 95c4 Mobility Radeon HD 3400 Series - 1002 95c4 Mobility Radeon HD 3400 - 95c5 Mobility Radeon HD 3450 - 1002 95c5 Mobility Radeon HD 3450 - 95c6 RV620 LE AGP [Radeon HD 3450] - 95c9 RV620 PCI [Radeon HD 3450] - 95cc RV620 [ATI FireGL V3700] - 95cd RV620 [FireMV 2450] - 95ce RV620 [FirePro 2260] - 95cf RV620 [FirePro 2260] - 960f RS780 Azalia controller - 9610 Radeon HD 3200 Graphics - 1458 d000 GA-MA78GM-S2H Motherboard - 9611 Radeon 3100 Graphics - 9612 RS780M/RS780MN [Radeon HD 3200 Graphics] - 9613 RS780MC [Radeon HD 3100 Graphics] - 9614 Radeon HD 3300 Graphics - 9615 RS780E [AMD 780E] - 9616 760G [Radeon 3000] - aa00 R600 Audio Device [Radeon HD 2900 Series] - aa08 RV630/M76 audio device [Radeon HD 2600 Series] - aa10 RV610 audio device [Radeon HD 2400 PRO] - 174b aa10 Sapphire HD 2400 PRO audio device - 18bc aa10 GeCube Radeon HD 2400 PRO HDCP-capable digital-only audio device - aa18 Radeon HD 3870 Audio device - aa20 RV635 Audio device [Radeon HD 3600 Series] - aa28 RV620 Audio device [Radeon HD 34xx Series] - aa30 HD48x0 audio - 174b aa30 Sapphire HD 4850 512MB GDDR3 PCI-E Dual Slot Fansink - aa38 R700 Audio Device [Radeon HD 4000 Series] - 103c 3628 ATI RV710/730 [dv6-1190en] - 174b aa38 R700 Audio Device [Radeon HD 4000 Series] - ac00 Theater 600 Pro - cab0 AGP Bridge [IGP 320M] - cab2 RS200/RS200M AGP Bridge [IGP 340M] - cab3 R200 AGP Bridge [Mobility Radeon 7000 IGP] - cbb2 RS200/RS200M AGP Bridge [IGP 340M] -1003 ULSI Systems - 0201 US201 -1004 VLSI Technology Inc - 0005 82C592-FC1 - 0006 82C593-FC1 - 0007 82C594-AFC2 - 0008 82C596/7 [Wildcat] - 0009 82C597-AFC2 - 000c 82C541 [Lynx] - 000d 82C543 [Lynx] - 0101 82C532 - 0102 82C534 [Eagle] - 0103 82C538 - 0104 82C535 - 0105 82C147 - 0200 82C975 - 0280 82C925 - 0304 QSound ThunderBird PCI Audio - 1004 0304 QSound ThunderBird PCI Audio - 122d 1206 DSP368 Audio - 1483 5020 XWave Thunder 3D Audio - 0305 QSound ThunderBird PCI Audio Gameport - 1004 0305 QSound ThunderBird PCI Audio Gameport - 122d 1207 DSP368 Audio Gameport - 1483 5021 XWave Thunder 3D Audio Gameport - 0306 QSound ThunderBird PCI Audio Support Registers - 1004 0306 QSound ThunderBird PCI Audio Support Registers - 122d 1208 DSP368 Audio Support Registers - 1483 5022 XWave Thunder 3D Audio Support Registers - 0307 Thunderbird - 0308 Thunderbird - 0702 VAS96011 [Golden Gate II] - 0703 Tollgate -1005 Avance Logic Inc. [ALI] - 2064 ALG2032/2064 - 2128 ALG2364A - 2301 ALG2301 - 2302 ALG2302 - 2364 ALG2364 - 2464 ALG2364A - 2501 ALG2564A/25128A -1006 Reply Group -1007 NetFrame Systems Inc -1008 Epson -100a Phoenix Technologies -100b National Semiconductor Corporation - 0001 DP83810 - 0002 87415/87560 IDE - 000e 87560 Legacy I/O - 000f FireWire Controller - 0011 NS87560 National PCI System I/O - 0012 USB Controller - 0020 DP83815 (MacPhyter) Ethernet Controller - 103c 0024 Pavilion ze4400 builtin Network - 12d9 000c Aculab E1/T1 PMXc cPCI carrier card - 1385 f311 FA311 / FA312 (FA311 with WoL HW) - 0021 PC87200 PCI to ISA Bridge - 0022 DP83820 10/100/1000 Ethernet Controller - 1186 4900 DGE-500T - 1385 621a GA621 - 1385 622a GA622T - 0028 Geode GX2 Host Bridge - 002a CS5535 South Bridge - 002b CS5535 ISA bridge - 002d CS5535 IDE - 002e CS5535 Audio - 002f CS5535 USB - 0030 Geode GX2 Graphics Processor - 0035 DP83065 [Saturn] 10/100/1000 Ethernet Controller - 0500 SCx200 Bridge - 0501 SCx200 SMI - 0502 SCx200, SC1100 IDE controller - 100b 0502 IDE Controller - 0503 SCx200, SC1100 Audio Controller - 100b 0503 XpressAudio controller - 0504 SCx200 Video - 0505 SCx200 XBus - 0510 SC1100 Bridge - 100b 0500 GPIO and LPC support bridge - 0511 SC1100 SMI & ACPI - 100b 0501 SC1100 SMI & ACPI bridge - 0515 SC1100 XBus - 100b 0505 SC1100 PCI to XBus bridge - d001 87410 IDE -100c Tseng Labs Inc - 3202 ET4000/W32p rev A - 3205 ET4000/W32p rev B - 3206 ET4000/W32p rev C - 3207 ET4000/W32p rev D - 3208 ET6000 - 4702 ET6300 -100d AST Research Inc -100e Weitek - 9000 P9000 Viper - 9001 P9000 Viper - 9002 P9000 Viper - 9100 P9100 Viper Pro/SE -1010 Video Logic, Ltd. -1011 Digital Equipment Corporation - 0001 DECchip 21050 - 0002 DECchip 21040 [Tulip] - 0004 DECchip 21030 [TGA] - 0007 NVRAM [Zephyr NVRAM] - 0008 KZPSA [KZPSA] - 0009 DECchip 21140 [FasterNet] - 1025 0310 21140 Fast Ethernet - 10b8 2001 SMC9332BDT EtherPower 10/100 - 10b8 2002 SMC9332BVT EtherPower T4 10/100 - 10b8 2003 SMC9334BDT EtherPower 10/100 (1-port) - 1109 2400 ANA-6944A/TX Fast Ethernet - 1112 2300 RNS2300 Fast Ethernet - 1112 2320 RNS2320 Fast Ethernet - 1112 2340 RNS2340 Fast Ethernet - 1113 1207 EN-1207-TX Fast Ethernet - 1186 1100 DFE-500TX Fast Ethernet - 1186 1112 DFE-570TX Fast Ethernet - 1186 1140 DFE-660 Cardbus Ethernet 10/100 - 1186 1142 DFE-660 Cardbus Ethernet 10/100 - 11f6 0503 Freedomline Fast Ethernet - 1282 9100 AEF-380TXD Fast Ethernet - 1385 1100 FA310TX Fast Ethernet - 2646 0001 KNE100TX Fast Ethernet - 000a 21230 Video Codec - 000d PBXGB [TGA2] - 000f PCI-to-PDQ Interface Chip [PFI] - 1011 def1 FDDI controller (DEFPA) - 103c def1 FDDI controller (3X-DEFPA) - 0014 DECchip 21041 [Tulip Pass 3] - 1186 0100 DE-530+ - 0016 DGLPB [OPPO] - 0017 PV-PCI Graphics Controller (ZLXp-L) - 0018 Memory Channel interface - 0019 DECchip 21142/43 - 1011 500a DE500A Fast Ethernet - 1011 500b DE500B Fast Ethernet - 1014 0001 10/100 EtherJet Cardbus - 1025 0315 ALN315 Fast Ethernet - 1033 800c PC-9821-CS01 100BASE-TX Interface Card - 1033 800d PC-9821NR-B06 100BASE-TX Interface Card - 103c 125a 10/100Base-TX (PCI) [A5506B] - 108d 0016 Rapidfire 2327 10/100 Ethernet - 108d 0017 GoCard 2250 Ethernet 10/100 Cardbus - 10b8 2005 SMC8032DT Extreme Ethernet 10/100 - 10b8 8034 SMC8034 Extreme Ethernet 10/100 - 10ef 8169 Cardbus Fast Ethernet - 1109 2a00 ANA-6911A/TX Fast Ethernet - 1109 2b00 ANA-6911A/TXC Fast Ethernet - 1109 3000 ANA-6922/TX Fast Ethernet - 1113 1207 Cheetah Fast Ethernet - 1113 2220 Cardbus Fast Ethernet - 115d 0002 Cardbus Ethernet 10/100 - 1179 0203 Fast Ethernet - 1179 0204 Cardbus Fast Ethernet - 1186 1100 DFE-500TX Fast Ethernet - 1186 1101 DFE-500TX Fast Ethernet - 1186 1102 DFE-500TX Fast Ethernet - 1186 1112 DFE-570TX Quad Fast Ethernet - 1259 2800 AT-2800Tx Fast Ethernet - 1266 0004 Eagle Fast EtherMAX - 12af 0019 NetFlyer Cardbus Fast Ethernet - 1374 0001 Cardbus Ethernet Card 10/100 - 1374 0002 Cardbus Ethernet Card 10/100 - 1374 0007 Cardbus Ethernet Card 10/100 - 1374 0008 Cardbus Ethernet Card 10/100 - 1385 2100 FA510 - 1395 0001 10/100 Ethernet CardBus PC Card - 13d1 ab01 EtherFast 10/100 Cardbus (PCMPC200) - 1498 000a TPMC880-10 10/100Base-T and 10Base2 PMC Ethernet Adapter - 1498 000b TPMC880-11 Single 10/100Base-T PMC Ethernet Adapter - 1498 000c TPMC880-12 Single 10Base2 PMC Ethernet Adapter - 14cb 0100 LNDL-100N 100Base-TX Ethernet PC Card - 1668 2000 FastNet Pro (PE2000) - 2646 0001 KNE100TX - 2646 0002 KNE-CB4TX - 8086 0001 EtherExpress PRO/100 Mobile CardBus 32 - 001a Farallon PN9000SX Gigabit Ethernet - 0021 DECchip 21052 - 0022 DECchip 21150 - 0023 DECchip 21150 - 0024 DECchip 21152 - 0025 DECchip 21153 - 0026 DECchip 21154 - 0034 56k Modem Cardbus - 1374 0003 56k Modem Cardbus - 0045 DECchip 21553 - 0046 DECchip 21554 - 0e11 4050 Smart Array 4200 Controller - 0e11 4051 Smart Array 4250ES Controller - 0e11 4058 Smart Array 431 Controller - 103c 10c2 NetRAID-4M - 12d9 000a IP Telephony card - 4c53 1050 CT7 mainboard - 4c53 1051 CE7 mainboard - 9005 0364 5400S (Mustang) - 9005 0365 5400S (Mustang) - 9005 1364 Dell PowerEdge RAID Controller 2 - 9005 1365 Dell PowerEdge RAID Controller 2 - e4bf 1000 CC8-1-BLUES - 1065 StrongARM DC21285 - 1069 0020 DAC960P / DAC1164P -1012 Micronics Computers Inc -1013 Cirrus Logic - 0038 GD 7548 - 0040 GD 7555 Flat Panel GUI Accelerator - 004c GD 7556 Video/Graphics LCD/CRT Ctrlr - 00a0 GD 5430/40 [Alpine] - 00a2 GD 5432 [Alpine] - 00a4 GD 5434-4 [Alpine] - 00a8 GD 5434-8 [Alpine] - 00ac GD 5436 [Alpine] - 00b0 GD 5440 - 00b8 GD 5446 - 00bc GD 5480 - 1013 00bc CL-GD5480 - 00d0 GD 5462 - 00d2 GD 5462 [Laguna I] - 00d4 GD 5464 [Laguna] - 00d5 GD 5464 BD [Laguna] - 00d6 GD 5465 [Laguna] - 13ce 8031 Barco Metheus 2 Megapixel, Dual Head - 13cf 8031 Barco Metheus 2 Megapixel, Dual Head - 00e8 GD 5436U - 1100 CL 6729 - 1110 PD 6832 PCMCIA/CardBus Ctrlr - 1112 PD 6834 PCMCIA/CardBus Ctrlr - 1113 PD 6833 PCMCIA/CardBus Ctrlr - 1200 GD 7542 [Nordic] - 1202 GD 7543 [Viking] - 1204 GD 7541 [Nordic Light] - 4000 MD 5620 [CLM Data Fax Voice] - 4400 CD 4400 - 6001 CS 4610/11 [CrystalClear SoundFusion Audio Accelerator] - 1014 1010 CS4610 SoundFusion Audio Accelerator - 6003 CS 4614/22/24/30 [CrystalClear SoundFusion Audio Accelerator] - 1013 4280 Crystal SoundFusion PCI Audio Accelerator - 1014 0153 ThinkPad A20m - 153b 112e DMX XFire 1024 - 153b 1136 SiXPack 5.1+ - 1681 0050 Game Theater XP - 1681 a010 Gamesurround Fortissimo II - 1681 a011 Gamesurround Fortissimo III 7.1 - 5053 3357 Santa Cruz - 6004 CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator] - 6005 Crystal CS4281 PCI Audio - 1013 4281 Crystal CS4281 PCI Audio - 10cf 10a8 Crystal CS4281 PCI Audio - 10cf 10a9 Crystal CS4281 PCI Audio - 10cf 10aa Crystal CS4281 PCI Audio - 10cf 10ab Crystal CS4281 PCI Audio - 10cf 10ac Crystal CS4281 PCI Audio - 10cf 10ad Crystal CS4281 PCI Audio - 10cf 10b4 Crystal CS4281 PCI Audio - 1179 0001 Crystal CS4281 PCI Audio - 14c0 000c Crystal CS4281 PCI Audio -1014 IBM - 0002 PCI to MCA Bridge - 0005 Processor to I/O Controller [Alta Lite] - 0007 Processor to I/O Controller [Alta MP] - 000a PCI to ISA Bridge (IBM27-82376) [Fire Coral] - 0017 CPU to PCI Bridge - 0018 TR Auto LANstreamer - 001b GXT-150P - 001c Carrera - 001d SCSI-2 FAST PCI Adapter (82G2675) - 0020 GXT1000 Graphics Adapter - 0022 PCI to PCI Bridge (IBM27-82351) - 002d Processor to I/O Controller [Python] - 002e SCSI RAID Adapter [ServeRAID] - 1014 002e ServeRAID-3x - 1014 022e ServeRAID-4H - 0031 2 Port Serial Adapter -# AS400 iSeries PCI sync serial card - 1014 0031 2721 WAN IOA - 2 Port Sync Serial Adapter - 0036 PCI to 32-bit LocalBus Bridge [Miami] - 0037 PowerPC to PCI Bridge (IBM27-82660) - 003a CPU to PCI Bridge - 003c GXT250P/GXT255P Graphics Adapter - 003e 16/4 Token ring UTP/STP controller - 1014 003e Token-Ring Adapter - 1014 00cd Token-Ring Adapter + Wake-On-LAN - 1014 00ce 16/4 Token-Ring Adapter 2 - 1014 00cf 16/4 Token-Ring Adapter Special - 1014 00e4 High-Speed 100/16/4 Token-Ring Adapter - 1014 00e5 16/4 Token-Ring Adapter 2 + Wake-On-LAN - 1014 016d iSeries 2744 Card - 0045 SSA Adapter - 0046 MPIC interrupt controller - 0047 PCI to PCI Bridge - 0048 PCI to PCI Bridge - 0049 Warhead SCSI Controller - 004e ATM Controller (14104e00) - 004f ATM Controller (14104f00) - 0050 ATM Controller (14105000) - 0053 25 MBit ATM Controller - 0054 GXT500P/GXT550P Graphics Adapter - 0057 MPEG PCI Bridge - 0058 SSA Adapter [Advanced SerialRAID/X] - 005c i82557B 10/100 - 005e GXT800P Graphics Adapter - 007c ATM Controller (14107c00) - 007d 3780IDSP [MWave] - 008b EADS PCI to PCI Bridge - 008e GXT3000P Graphics Adapter - 0090 GXT 3000P - 1014 008e GXT-3000P - 0091 SSA Adapter - 0095 20H2999 PCI Docking Bridge - 0096 Chukar chipset SCSI controller - 1014 0097 iSeries 2778 DASD IOA - 1014 0098 iSeries 2763 DASD IOA - 1014 0099 iSeries 2748 DASD IOA - 009f PCI 4758 Cryptographic Accelerator - 00a5 ATM Controller (1410a500) - 00a6 ATM 155MBPS MM Controller (1410a600) - 00b7 256-bit Graphics Rasterizer [FireGL1] - 1092 00b8 FireGL1 AGP 32Mb - 00b8 GXT2000P Graphics Adapter - 00be ATM 622MBPS Controller (1410be00) - 00dc Advanced Systems Management Adapter (ASMA) - 00fc CPC710 Dual Bridge and Memory Controller (PCI-64) - 0104 Gigabit Ethernet-SX Adapter - 0105 CPC710 Dual Bridge and Memory Controller (PCI-32) - 010f Remote Supervisor Adapter (RSA) - 0142 Yotta Video Compositor Input - 1014 0143 Yotta Input Controller (ytin) - 0144 Yotta Video Compositor Output - 1014 0145 Yotta Output Controller (ytout) - 0156 405GP PLB to PCI Bridge - 015e 622Mbps ATM PCI Adapter - 0160 64bit/66MHz PCI ATM 155 MMF - 016e GXT4000P Graphics Adapter - 0170 GXT6000P Graphics Adapter - 017d GXT300P Graphics Adapter - 0180 Snipe chipset SCSI controller - 1014 0241 iSeries 2757 DASD IOA - 1014 0264 Quad Channel PCI-X U320 SCSI RAID Adapter (2780) - 0188 EADS-X PCI-X to PCI-X Bridge - 01a7 PCI-X to PCI-X Bridge - 01bd ServeRAID Controller - 1014 01bd ServeRAID 4Lx - 1014 01be ServeRAID-4M - 1014 01bf ServeRAID-4L - 1014 0208 ServeRAID-4Mx - 1014 020e ServeRAID-4Lx - 1014 022e ServeRAID-4H - 1014 0258 ServeRAID-5i - 1014 0259 ServeRAID-5i - 01c1 64bit/66MHz PCI ATM 155 UTP - 01e6 Cryptographic Accelerator - 01ef PowerPC 440GP PCI Bridge - 1734 102b PCEAS PCI-X Dual Port ESCON Adapter - 1734 10f8 PCEAT PCI-Express Dual Port ESCON Adapter - 01ff 10/100 Mbps Ethernet - 0219 Multiport Serial Adapter - 1014 021a Dual RVX - 1014 0251 Internal Modem/RVX - 1014 0252 Quad Internal Modem - 021b GXT6500P Graphics Adapter - 021c GXT4500P Graphics Adapter - 0233 GXT135P Graphics Adapter - 0266 PCI-X Dual Channel SCSI - 0268 Gigabit Ethernet-SX Adapter (PCI-X) - 0269 10/100/1000 Base-TX Ethernet Adapter (PCI-X) - 028c Citrine chipset SCSI controller - 1014 028d Dual Channel PCI-X DDR SAS RAID Adapter (572E) - 1014 02be Dual Channel PCI-X DDR U320 SCSI RAID Adapter (571B) - 1014 02c0 Dual Channel PCI-X DDR U320 SCSI Adapter (571A) - 1014 030d PCI-X DDR Auxiliary Cache Adapter (575B) - 02a1 Calgary PCI-X Host Bridge - 02bd Obsidian chipset SCSI controller - 1014 02c1 PCI-X DDR 3Gb SAS Adapter (572A/572C) - 1014 02c2 PCI-X DDR 3Gb SAS RAID Adapter (572B/571D) - 1014 0338 PCI-X DDR Auxiliary Cache Adapter (575C) - 0302 Winnipeg PCI-X Host Bridge - 0308 CalIOC2 PCI-E Root Port - 0314 ZISC 036 Neural accelerator card - 032d Axon - Cell Companion Chip - 1014 03a1 PCIe PowerXCell 8i Cell Accelerator Board - 0339 Obsidian-E PCI-E SCSI controller - 1014 030a PCIe 3Gb SAS RAID Adapter (574E) - 1014 033a PCIe 3Gb SAS Adapter (57B3) - 1014 0360 PCI-E Auxiliary Cache Adapter (57B7) - 033d PCI-E IPR SAS Adapter (FPGA) - 1014 033c PCIe2 1.8GB Cache 6Gb SAS RAID Adapter Tri-port (57B5) - 1014 0356 PCIe2 1.8GB Cache 6Gb SAS RAID & SSD Adapter (574D) - 1014 035f PCIe2 6Gb SAS Adapter Quad-port (57B2) - 034a PCI-E IPR SAS Adapter (ASIC) - 1014 033b PCIe2 6Gb SAS RAID Adapter Quad-port (57B4) - 1014 0355 PCIe2 3.6GB Cache 6Gb SAS RAID Adapter Quad-port (57B1) - 1014 0357 PCIe2 6Gb SAS Adapter Quad-port (57C6) - 1014 035d PCIe2 3.6GB Cache 6Gb SAS RAID & SSD Adapter (575D) - 1014 035e PCIe2 3.6GB Cache 6Gb SAS RAID Adapter Quad-port (57CE) - 3022 QLA3022 Network Adapter - 4022 QLA3022 Network Adapter - ffff MPIC-2 interrupt controller -1015 LSI Logic Corp of Canada -1016 ICL Personal Systems -1017 SPEA Software AG - 5343 SPEA 3D Accelerator -1018 Unisys Systems -1019 Elitegroup Computer Systems -101a AT&T GIS (NCR) - 0005 100VG ethernet - 0007 BYNET BIC4G/2C/2G - 101a 0019 BYNET BIC2C - 101a 001c BYNET BIC2G - 101a 001f BYNET BIC4G - 0009 PQS Memory Controller - 000a BYNET BPCI Adapter - 000b BYNET 4 Port BYA Switch (BYA4P) - 000c BYNET 4 Port BYA Switch (BYA4G) - 0010 NCR AMC Memory Controller - 1dc1 BYNET BIC2M/BIC4M/BYA4M - 101a 0019 BIC2M - 101a 001f BIC4M - 101a 0ece BYA4M - 1fa8 BYNET Multi-port BIC Adapter (XBIC Based) - 101a 00c3 BYNET BIC2SE -101b Vitesse Semiconductor -# Maxim VSC452 Super BMC Controller with Video - 0452 VSC452 [SuperBMC] -101c Western Digital - 0193 33C193A - 0196 33C196A - 0197 33C197A - 0296 33C296A - 3193 7193 - 3197 7197 - 3296 33C296A - 4296 34C296 - 9710 Pipeline 9710 - 9712 Pipeline 9712 - c24a 90C -# ID for Newly Acquired Storage Products from Vitesse -101d Maxim Integrated Products -101e American Megatrends Inc. - 0009 MegaRAID 428 Ultra RAID Controller (rev 03) - 1960 MegaRAID - 101e 0471 MegaRAID 471 Enterprise 1600 RAID Controller - 101e 0475 MegaRAID 475 Express 500/500LC RAID Controller - 101e 0477 MegaRAID 477 Elite 3100 RAID Controller - 101e 0493 MegaRAID 493 Elite 1600 RAID Controller - 101e 0494 MegaRAID 494 Elite 1650 RAID Controller - 101e 0503 MegaRAID 503 Enterprise 1650 RAID Controller - 101e 0511 MegaRAID 511 i4 IDE RAID Controller - 101e 0522 MegaRAID 522 i4133 RAID Controller - 1028 0471 PowerEdge RAID Controller 3/QC - 1028 0475 PowerEdge RAID Controller 3/SC - 1028 0493 PowerEdge RAID Controller 3/DC - 1028 0511 PowerEdge Cost Effective RAID Controller ATA100/4Ch - 103c 60e7 NetRAID-1M - 9010 MegaRAID 428 Ultra RAID Controller - 9030 EIDE Controller - 9031 EIDE Controller - 9032 EIDE & SCSI Controller - 9033 SCSI Controller - 9040 Multimedia card - 9060 MegaRAID 434 Ultra GT RAID Controller - 9063 MegaRAC - 101e 0767 Dell Remote Assistant Card 2 -101f PictureTel -1020 Hitachi Computer Products -1021 OKI Electric Industry Co. Ltd. -1022 Advanced Micro Devices [AMD] - 1100 K8 [Athlon64/Opteron] HyperTransport Technology Configuration - 1101 K8 [Athlon64/Opteron] Address Map - 1102 K8 [Athlon64/Opteron] DRAM Controller - 1103 K8 [Athlon64/Opteron] Miscellaneous Control - 1200 K10 [Opteron, Athlon64, Sempron] HyperTransport Configuration - 1201 K10 [Opteron, Athlon64, Sempron] Address Map - 1202 K10 [Opteron, Athlon64, Sempron] DRAM Controller - 1203 K10 [Opteron, Athlon64, Sempron] Miscellaneous Control - 1204 K10 [Opteron, Athlon64, Sempron] Link Control - 1300 Mobile K10 [Turion X2, Athlon X2, Sempron] HyperTransport Configuration - 1301 Family 11h [Turion X2, Athlon X2, Sempron] Address Map - 1302 Mobile K10 [Turion X2, Athlon X2, Sempron] DRAM Controller - 1303 Mobile K10 [Turion X2, Athlon X2, Sempron] Miscellaneous Control - 1304 Mobile K10 [Turion X2, Athlon X2, Sempron] Link Control - 2000 79c970 [PCnet32 LANCE] - 1014 2000 NetFinity 10/100 Fast Ethernet - 1022 2000 PCnet - Fast 79C971 - 103c 104c Ethernet with LAN remote power Adapter - 103c 1064 Ethernet with LAN remote power Adapter - 103c 1065 Ethernet with LAN remote power Adapter - 103c 106c Ethernet with LAN remote power Adapter - 103c 106e Ethernet with LAN remote power Adapter - 103c 10ea Ethernet with LAN remote power Adapter - 1113 1220 EN1220 10/100 Fast Ethernet - 1259 2450 AT-2450 10/100 Fast Ethernet - 1259 2454 AT-2450v4 10Mb Ethernet Adapter - 1259 2700 AT-2700TX 10/100 Fast Ethernet - 1259 2701 AT-2700FX 100Mb Ethernet - 1259 2702 AT-2700FTX 10/100 Mb Fiber/Copper Fast Ethernet - 1259 2703 AT-2701FX - 1259 2704 AT-2701FTX 10/100 Mb Fiber/Copper Fast Ethernet - 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard - 4c53 1010 CP5/CR6 mainboard - 4c53 1020 VR6 mainboard - 4c53 1030 PC5 mainboard - 4c53 1040 CL7 mainboard - 4c53 1060 PC7 mainboard - 2001 79c978 [HomePNA] - 1092 0a78 Multimedia Home Network Adapter - 1668 0299 ActionLink Home Network Adapter - 2003 Am 1771 MBW [Alchemy] - 2020 53c974 [PCscsi] - 2040 79c974 - 2080 CS5536 [Geode companion] Host Bridge - 2081 Geode LX Video - 2082 Geode LX AES Security Block - 208f CS5536 GeodeLink PCI South Bridge - 2090 CS5536 [Geode companion] ISA - 2091 CS5536 [Geode companion] FLASH - 2093 CS5536 [Geode companion] Audio - 2094 CS5536 [Geode companion] OHC - 2095 CS5536 [Geode companion] EHC - 2096 CS5536 [Geode companion] UDC - 2097 CS5536 [Geode companion] UOC - 209a CS5536 [Geode companion] IDE - 3000 ELanSC520 Microcontroller - 7006 AMD-751 [Irongate] System Controller - 7007 AMD-751 [Irongate] AGP Bridge - 700a AMD-IGR4 AGP Host to PCI Bridge - 700b AMD-IGR4 PCI to PCI Bridge - 700c AMD-760 MP [IGD4-2P] System Controller - 700d AMD-760 MP [IGD4-2P] AGP Bridge - 700e AMD-760 [IGD4-1P] System Controller - 700f AMD-760 [IGD4-1P] AGP Bridge - 7400 AMD-755 [Cobra] ISA - 7401 AMD-755 [Cobra] IDE - 7403 AMD-755 [Cobra] ACPI - 7404 AMD-755 [Cobra] USB - 7408 AMD-756 [Viper] ISA - 7409 AMD-756 [Viper] IDE - 740b AMD-756 [Viper] ACPI - 740c AMD-756 [Viper] USB - 7410 AMD-766 [ViperPlus] ISA - 7411 AMD-766 [ViperPlus] IDE - 7413 AMD-766 [ViperPlus] ACPI - 7414 AMD-766 [ViperPlus] USB - 7440 AMD-768 [Opus] ISA - 1043 8044 A7M-D Mainboard - 7441 AMD-768 [Opus] IDE - 7443 AMD-768 [Opus] ACPI - 1043 8044 A7M-D Mainboard - 7445 AMD-768 [Opus] Audio - 7446 AMD-768 [Opus] MC97 Modem (Smart Link HAMR5600 compatible) - 7448 AMD-768 [Opus] PCI - 7449 AMD-768 [Opus] USB - 7450 AMD-8131 PCI-X Bridge - 7451 AMD-8131 PCI-X IOAPIC - 7454 AMD-8151 System Controller - 7455 AMD-8151 AGP Bridge - 7458 AMD-8132 PCI-X Bridge - 7459 AMD-8132 PCI-X IOAPIC - 7460 AMD-8111 PCI - 161f 3017 HDAMB - 7461 AMD-8111 USB - 7462 AMD-8111 Ethernet - 7464 AMD-8111 USB - 161f 3017 HDAMB - 7468 AMD-8111 LPC - 161f 3017 HDAMB - 7469 AMD-8111 IDE - 1022 2b80 AMD-8111 IDE [Quartet] - 161f 3017 HDAMB - 746a AMD-8111 SMBus 2.0 - 746b AMD-8111 ACPI - 161f 3017 HDAMB - 746d AMD-8111 AC97 Audio - 161f 3017 HDAMB - 746e AMD-8111 MC97 Modem - 756b AMD-8111 ACPI - 9600 RS780 Host Bridge - 9601 RS780 Host Bridge Alternate - 9602 RS780 PCI to PCI bridge (int gfx) - 9603 RS780 PCI to PCI bridge (ext gfx port 0) - 9604 RS780 PCI to PCI bridge (PCIE port 0) - 9605 RS780 PCI to PCI bridge (PCIE port 1) - 9606 RS780 PCI to PCI bridge (PCIE port 2) - 9607 RS780 PCI to PCI bridge (PCIE port 3) - 9608 RS780 PCI to PCI bridge (PCIE port 4) - 9609 RS780 PCI to PCI bridge (PCIE port 5) - 960a RS780 PCI to PCI bridge (NB-SB link) - 960b RS780 PCI to PCI bridge (ext gfx port 1) -1023 Trident Microsystems - 0194 82C194 - 2000 4DWave DX - 2001 4DWave NX - 122d 1400 Trident PCI288-Q3DII (NX) - 2100 CyberBlade XP4m32 - 2200 XGI Volari XP5 - 8400 CyberBlade/i7 - 1023 8400 CyberBlade i7 AGP - 8420 CyberBlade/i7d - 0e11 b15a CyberBlade i7 AGP - 8500 CyberBlade/i1 - 8520 CyberBlade i1 - 0e11 b16e CyberBlade i1 AGP - 1023 8520 CyberBlade i1 AGP - 8620 CyberBlade/i1 - 1014 0502 ThinkPad R30/T30 - 1014 1025 Travelmate 352TE - 8820 CyberBlade XPAi1 - 9320 TGUI 9320 - 9350 GUI Accelerator - 9360 Flat panel GUI Accelerator - 9382 Cyber 9382 [Reference design] - 9383 Cyber 9383 [Reference design] - 9385 Cyber 9385 [Reference design] - 9386 Cyber 9386 - 9388 Cyber 9388 - 9397 Cyber 9397 - 939a Cyber 9397DVD - 9420 TGUI 9420 - 9430 TGUI 9430 - 9440 TGUI 9440 - 9460 TGUI 9460 - 9470 TGUI 9470 - 9520 Cyber 9520 - 9525 Cyber 9525 - 9540 Cyber 9540 - 9660 TGUI 9660/938x/968x - 9680 TGUI 9680 - 9682 TGUI 9682 - 9683 TGUI 9683 - 9685 ProVIDIA 9685 - 9750 3DImage 9750 - 1014 9750 3DImage 9750 - 1023 9750 3DImage 9750 - 9753 TGUI 9753 - 9754 TGUI 9754 - 9759 TGUI 975 - 9783 TGUI 9783 - 9785 TGUI 9785 - 9850 3DImage 9850 - 9880 Blade 3D PCI/AGP - 1023 9880 Blade 3D - 9910 CyberBlade/XP - 9930 CyberBlade/XPm - 9960 CyberBlade XP2 -1024 Zenith Data Systems -1025 Acer Incorporated [ALI] - 1435 M1435 - 1445 M1445 - 1449 M1449 - 1451 M1451 - 1461 M1461 - 1489 M1489 - 1511 M1511 - 1512 ALI M1512 Aladdin - 1513 M1513 - 1521 ALI M1521 Aladdin III CPU Bridge - 10b9 1521 ALI M1521 Aladdin III CPU Bridge - 1523 ALI M1523 ISA Bridge - 10b9 1523 ALI M1523 ISA Bridge - 1531 M1531 Northbridge [Aladdin IV/IV+] - 1533 M1533 PCI-to-ISA Bridge - 10b9 1533 ALI M1533 Aladdin IV/V ISA South Bridge - 1535 M1535 PCI Bridge + Super I/O + FIR - 1541 M1541 Northbridge [Aladdin V] - 10b9 1541 ALI M1541 Aladdin V/V+ AGP+PCI North Bridge - 1542 M1542 Northbridge [Aladdin V] - 1543 M1543 PCI-to-ISA Bridge + Super I/O + FIR - 1561 M1561 Northbridge [Aladdin 7] - 1621 M1621 Northbridge [Aladdin-Pro II] - 1631 M1631 Northbridge+3D Graphics [Aladdin TNT2] - 1641 M1641 Northbridge [Aladdin-Pro IV] - 1647 M1647 [MaGiK1] PCI North Bridge - 1671 M1671 Northbridge [ALADDiN-P4] - 1672 Northbridge [CyberALADDiN-P4] - 3141 M3141 - 3143 M3143 - 3145 M3145 - 3147 M3147 - 3149 M3149 - 3151 M3151 - 3307 M3307 MPEG-I Video Controller - 3309 M3309 MPEG-II Video w/ Software Audio Decoder - 3321 M3321 MPEG-II Audio/Video Decoder - 5212 M4803 - 5215 ALI PCI EIDE Controller - 5217 M5217H - 5219 M5219 - 5225 M5225 - 5229 M5229 - 5235 M5235 - 5237 M5237 PCI USB Host Controller - 5240 EIDE Controller - 5241 PCMCIA Bridge - 5242 General Purpose Controller - 5243 PCI to PCI Bridge Controller - 5244 Floppy Disk Controller - 5247 M1541 PCI to PCI Bridge - 5251 M5251 P1394 Controller - 5427 PCI to AGP Bridge - 5451 M5451 PCI AC-Link Controller Audio Device - 5453 M5453 PCI AC-Link Controller Modem Device - 7101 M7101 PCI PMU Power Management Controller - 10b9 7101 M7101 PCI PMU Power Management Controller -1028 Dell - 0001 PowerEdge Expandable RAID Controller 2/Si - 1028 0001 PowerEdge 2400 - 0002 PowerEdge Expandable RAID Controller 3/Di - 1028 0002 PowerEdge 4400 - 1028 00d1 PERC 3/DiV [Viper] - 1028 00d9 PERC 3/DiL [Lexus] - 0003 PowerEdge Expandable RAID Controller 3/Si - 1028 0003 PowerEdge 2450 -# PowerEdge Codename Iguana - 0004 PowerEdge Expandable RAID Controller 3/Di [Iguana] - 1028 0004 PERC 3/DiF [Iguana] - 0006 PowerEdge Expandable RAID Controller 3/Di - 0007 Remote Access Card III - 0008 Remote Access Card III - 0009 Remote Access Card III: BMC/SMIC device not present - 000a PowerEdge Expandable RAID Controller 3/Di - 1028 0106 PERC 3/DiJ [Jaguar] - 1028 011b PERC 3/DiD [Dagger] - 1028 0121 PERC 3/DiB [Boxster] - 000c Embedded Remote Access or ERA/O - 000d Embedded Remote Access: BMC/SMIC device - 000e PowerEdge Expandable RAID controller 4/Di - 000f PowerEdge Expandable RAID controller 4/Di - 1028 014a PowerEdge 1750 - 0010 Remote Access Card 4 - 0011 Remote Access Card 4 Daughter Card - 0012 Remote Access Card 4 Daughter Card Virtual UART - 0013 PowerEdge Expandable RAID controller 4 - 1028 016c PowerEdge Expandable RAID Controller 4e/Si - 1028 016d PowerEdge Expandable RAID Controller 4e/Di - 1028 016e PowerEdge Expandable RAID Controller 4e/Di - 1028 016f PowerEdge Expandable RAID Controller 4e/Di - 1028 0170 PowerEdge Expandable RAID Controller 4e/Di - 0014 Remote Access Card 4 Daughter Card SMIC interface - 0015 PowerEdge Expandable RAID controller 5 - 1028 1f01 PERC 5/E Adapter RAID Controller - 1028 1f02 PERC 5/i Adapter RAID Controller - 1028 1f03 PERC 5/i Integrated RAID Controller - 0016 PowerEdge Expandable RAID controller S300 - 1028 1f24 PERC S300 Controller -1029 Siemens Nixdorf IS -102a LSI Logic - 0000 HYDRA - 0010 ASPEN - 001f AHA-2940U2/U2W /7890/7891 SCSI Controllers - 9005 000f 2940U2W SCSI Controller - 9005 0106 2940U2W SCSI Controller - 9005 a180 2940U2W SCSI Controller - 00c5 AIC-7899 U160/m SCSI Controller - 1028 00c5 PowerEdge 2550/2650/4600 - 00cf AIC-7899P U160/m - 1028 0106 PowerEdge 4600 - 1028 0121 PowerEdge 2650 -102b Matrox Graphics, Inc. -# DJ: I've a suspicion that 0010 is a duplicate of 0d10. - 0010 MGA-I [Impression?] - 0100 MGA 1064SG [Mystique] - 0518 MGA-II [Athena] - 0519 MGA 2064W [Millennium] - 051a MGA 1064SG [Mystique] - 102b 0100 MGA-1064SG Mystique - 102b 1100 MGA-1084SG Mystique - 102b 1200 MGA-1084SG Mystique - 1100 102b MGA-1084SG Mystique - 110a 0018 Scenic Pro C5 (D1025) - 051b MGA 2164W [Millennium II] - 102b 051b MGA-2164W Millennium II - 102b 1100 MGA-2164W Millennium II - 102b 1200 MGA-2164W Millennium II - 102b 2100 MGA-2164W Millennium II - 051e MGA 1064SG [Mystique] AGP - 051f MGA 2164W [Millennium II] AGP - 0520 MGA G200 - 102b dbc2 G200 Multi-Monitor - 102b dbc8 G200 Multi-Monitor - 102b dbe2 G200 Multi-Monitor - 102b dbe8 G200 Multi-Monitor - 102b ff03 Millennium G200 SD - 102b ff04 Marvel G200 - 0521 MGA G200 AGP - 1014 ff03 Millennium G200 AGP - 102b 48e9 Mystique G200 AGP - 102b 48f8 Millennium G200 SD AGP - 102b 4a60 Millennium G200 LE AGP - 102b 4a64 Millennium G200 AGP - 102b c93c Millennium G200 AGP - 102b c9b0 Millennium G200 AGP - 102b c9bc Millennium G200 AGP - 102b ca60 Millennium G250 LE AGP - 102b ca6c Millennium G250 AGP - 102b dbbc Millennium G200 AGP - 102b dbc2 Millennium G200 MMS (Dual G200) - 102b dbc3 G200 Multi-Monitor - 102b dbc8 Millennium G200 MMS (Dual G200) - 102b dbd2 G200 Multi-Monitor - 102b dbd3 G200 Multi-Monitor - 102b dbd4 G200 Multi-Monitor - 102b dbd5 G200 Multi-Monitor - 102b dbd8 G200 Multi-Monitor - 102b dbd9 G200 Multi-Monitor - 102b dbe2 Millennium G200 MMS (Quad G200) - 102b dbe3 G200 Multi-Monitor - 102b dbe8 Millennium G200 MMS (Quad G200) - 102b dbf2 G200 Multi-Monitor - 102b dbf3 G200 Multi-Monitor - 102b dbf4 G200 Multi-Monitor - 102b dbf5 G200 Multi-Monitor - 102b dbf8 G200 Multi-Monitor - 102b dbf9 G200 Multi-Monitor - 102b f806 Mystique G200 Video AGP - 102b ff00 MGA-G200 AGP - 102b ff02 Mystique G200 AGP - 102b ff03 Millennium G200 AGP - 102b ff04 Marvel G200 AGP - 110a 0032 MGA-G200 AGP - 0522 MGA G200e [Pilot] ServerEngines (SEP1) - 0525 MGA G400/G450 - 0e11 b16f MGA-G400 AGP - 102b 0328 Millennium G400 16Mb SDRAM - 102b 0338 Millennium G400 16Mb SDRAM - 102b 0378 Millennium G400 32Mb SDRAM - 102b 0541 Millennium G450 Dual Head - 102b 0542 Millennium G450 Dual Head LX - 102b 0543 Millennium G450 Single Head LX - 102b 0641 Millennium G450 32Mb SDRAM Dual Head - 102b 0642 Millennium G450 32Mb SDRAM Dual Head LX - 102b 0643 Millennium G450 32Mb SDRAM Single Head LX - 102b 07c0 Millennium G450 Dual Head LE - 102b 07c1 Millennium G450 SDR Dual Head LE - 102b 0d41 Millennium G450 Dual Head PCI - 102b 0d42 Millennium G450 Dual Head LX PCI - 102b 0d43 Millennium G450 32Mb Dual Head PCI - 102b 0e00 Marvel G450 eTV - 102b 0e01 Marvel G450 eTV - 102b 0e02 Marvel G450 eTV - 102b 0e03 Marvel G450 eTV - 102b 0f80 Millennium G450 Low Profile - 102b 0f81 Millennium G450 Low Profile - 102b 0f82 Millennium G450 Low Profile DVI - 102b 0f83 Millennium G450 Low Profile DVI - 102b 19d8 Millennium G400 16Mb SGRAM - 102b 19f8 Millennium G400 32Mb SGRAM - 102b 2159 Millennium G400 Dual Head 16Mb - 102b 2179 Millennium G400 MAX/Dual Head 32Mb - 102b 217d Millennium G400 Dual Head Max - 102b 23c0 Millennium G450 - 102b 23c1 Millennium G450 - 102b 23c2 Millennium G450 DVI - 102b 23c3 Millennium G450 DVI - 102b 2f58 Millennium G400 - 102b 2f78 Millennium G400 - 102b 3693 Marvel G400 AGP - 102b 5dd0 4Sight II - 102b 5f50 4Sight II - 102b 5f51 4Sight II - 102b 5f52 4Sight II - 102b 9010 Millennium G400 Dual Head - 1458 0400 GA-G400 - 1705 0001 Millennium G450 32MB SGRAM - 1705 0002 Millennium G450 16MB SGRAM - 1705 0003 Millennium G450 32MB - 1705 0004 Millennium G450 16MB - 0527 MGA Parhelia AGP - 102b 0840 Parhelia 128Mb - 102b 0850 Parhelia 256MB AGP 4X - 0528 Parhelia 8X - 102b 1020 Parhelia 128MB - 102b 1030 Parhelia 256 MB Dual DVI - 102b 14e1 Parhelia PCI 256MB - 102b 2021 QID Pro - 0530 MGA G200EV - 0532 MGA G200eW WPCM450 - 1028 0235 PowerEdge R710 MGA G200eW WPCM450 - 1028 0236 PowerEdge R610 MGA G200eW WPCM450 - 1028 0237 PowerEdge T610 MGA G200eW WPCM450 - 1028 0287 PowerEdge M610 MGA G200eW WPCM450 - 1028 028c PowerEdge R410 MGA G200eW WPCM450 - 1028 028d PowerEdge T410 MGA G200eW WPCM450 - 1028 029c PowerEdge M710 MGA G200eW WPCM450 - 0540 M91XX - 102b 2080 M9140 LP PCIe x16 - 102b 2100 M9120 PCIe x16 - 102b 2140 M9125 PCIe x16 - 102b 2180 M9120 Plus LP PCIe x16 - 102b 21c0 M9120 Plus LP PCIe x1 - 102b 2240 M9148 LP PCIe x16 - 102b 2241 M9138 LP PCIe x16 - 0d10 MGA Ultima/Impression - 1000 MGA G100 [Productiva] - 102b ff01 Productiva G100 - 102b ff05 Productiva G100 Multi-Monitor - 1001 MGA G100 [Productiva] AGP - 102b 1001 MGA-G100 AGP - 102b ff00 MGA-G100 AGP - 102b ff01 MGA-G100 Productiva AGP - 102b ff03 Millennium G100 AGP - 102b ff04 MGA-G100 AGP - 102b ff05 MGA-G100 Productiva AGP Multi-Monitor - 110a 001e MGA-G100 AGP - 2007 MGA Mistral - 2527 MGA G550 AGP - 102b 0f83 Millennium G550 - 102b 0f84 Millennium G550 Dual Head DDR 32Mb - 102b 1e41 Millennium G550 -# Clearly the device name should not say AGP anymore... - 102b 2300 Millennium G550 LP PCIE - 2537 Millenium P650/P750 - 102b 1820 Millennium P750 64MB - 102b 1830 Millennium P650 64MB - 102b 1c10 QID 128MB - 102b 2811 Millennium P650 Low-profile PCI 64MB - 102b 2c11 QID Low-profile PCI - 2538 Millenium P650 PCIe - 102b 08c7 Millennium P650 PCIe 128MB - 102b 0907 Millennium P650 PCIe 64MB - 102b 0947 Parhelia APVe - 102b 1047 Millennium P650 LP PCIe 128MB - 102b 1087 Millennium P650 LP PCIe 64MB - 102b 2538 Parhelia APVe - 102b 3007 QID Low-profile PCIe - 2539 Millennium P690 - 4536 VIA Framegrabber - 4cdc Morphis Vision System Jpeg2000 - 4fc5 Morphis Vision System - 5e10 Morphis Vision System Aux/IO - 6573 Shark 10/100 Multiport SwitchNIC -102c Chips and Technologies - 00b8 F64310 - 00c0 F69000 HiQVideo - 102c 00c0 F69000 HiQVideo - 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard - 4c53 1010 CP5/CR6 mainboard - 4c53 1020 VR6 mainboard - 4c53 1030 PC5 mainboard - 4c53 1050 CT7 mainboard - 4c53 1051 CE7 mainboard - 00d0 F65545 - 00d8 F65545 - 00dc F65548 - 00e0 F65550 - 00e4 F65554 - 00e5 F65555 HiQVPro - 0e11 b049 Armada 1700 Laptop Display Controller - 1179 0001 Satellite Pro/Satellite - 00f0 F68554 - 00f4 F68554 HiQVision - 00f5 F68555 - 0c30 F69030 - 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard - 4c53 1050 CT7 mainboard - 4c53 1051 CE7 mainboard - 4c53 1080 CT8 mainboard -102d Wyse Technology Inc. - 50dc 3328 Audio -102e Olivetti Advanced Technology -102f Toshiba America - 0009 r4x00 - 000a TX3927 MIPS RISC PCI Controller - 0020 ATM Meteor 155 - 102f 00f8 ATM Meteor 155 - 0030 TC35815CF PCI 10/100 Mbit Ethernet Controller - 0031 TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL - 0032 TC35815CF PCI 10/100 Mbit Ethernet Controller on TX4939 - 0105 TC86C001 [goku-s] IDE - 0106 TC86C001 [goku-s] USB 1.1 Host - 0107 TC86C001 [goku-s] USB Device Controller - 0108 TC86C001 [goku-s] I2C/SIO/GPIO Controller - 0180 TX4927/38 MIPS RISC PCI Controller - 0181 TX4925 MIPS RISC PCI Controller - 0182 TX4937 MIPS RISC PCI Controller - 01b4 Celleb platform IDE interface - 01b5 SCC USB 2.0 EHCI controller - 01b6 SCC USB 1.1 OHCI controller -1030 TMC Research -1031 Miro Computer Products AG - 5601 DC20 ASIC - 5607 Video I/O & motion JPEG compressor - 5631 Media 3D - 6057 MiroVideo DC10/DC30+ -1032 Compaq -1033 NEC Corporation - 0000 Vr4181A USB Host or Function Control Unit - 0001 PCI to 486-like bus Bridge - 0002 PCI to VL98 Bridge - 0003 ATM Controller - 0004 R4000 PCI Bridge - 0005 PCI to 486-like bus Bridge - 0006 PC-9800 Graphic Accelerator - 0007 PCI to UX-Bus Bridge - 0008 PC-9800 Graphic Accelerator - 0009 PCI to PC9800 Core-Graph Bridge - 0016 PCI to VL Bridge - 001a [Nile II] - 0021 Vrc4373 [Nile I] - 0029 PowerVR PCX1 - 002a PowerVR 3D - 002c Star Alpha 2 - 002d PCI to C-bus Bridge - 0035 USB - 1033 0035 Hama USB 2.0 CardBus - 103c 1293 USB add-in card - 103c 1294 USB 2.0 add-in card - 1179 0001 USB - 12ee 7000 Root Hub - 14c2 0105 PTI-205N USB 2.0 Host Controller - 1799 0001 Root Hub - 1931 000a GlobeTrotter Fusion Quad Lite (PPP data) - 1931 000b GlobeTrotter Fusion Quad Lite (GSM data) - 807d 0035 PCI-USB2 (OHCI subsystem) - 003b PCI to C-bus Bridge - 003e NAPCCARD Cardbus Controller - 0046 PowerVR PCX2 [midas] - 005a Vrc5074 [Nile 4] - 0063 Firewarden - 0067 PowerVR Neon 250 Chipset - 1010 0020 PowerVR Neon 250 AGP 32Mb - 1010 0080 PowerVR Neon 250 AGP 16Mb - 1010 0088 PowerVR Neon 250 16Mb - 1010 0090 PowerVR Neon 250 AGP 16Mb - 1010 0098 PowerVR Neon 250 16Mb - 1010 00a0 PowerVR Neon 250 AGP 32Mb - 1010 00a8 PowerVR Neon 250 32Mb - 1010 0120 PowerVR Neon 250 AGP 32Mb - 0072 uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr - 0074 56k Voice Modem - 1033 8014 RCV56ACF 56k Voice Modem - 009b Vrc5476 - 00a5 VRC4173 - 00a6 VRC5477 AC97 - 00cd IEEE 1394 [OrangeLink] Host Controller - 12ee 8011 Root hub - 00ce IEEE 1394 Host Controller - 00df Vr4131 - 00e0 USB 2.0 - 12ee 7001 Root hub - 14c2 0205 PTI-205N USB 2.0 Host Controller - 1799 0002 Root Hub - 807d 1043 PCI-USB2 (EHCI subsystem) - 00e7 uPD72873 IEEE1394 OHCI 1.1 2-port Host Controller - 00f2 uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr - 00f3 uPD6113x Multimedia Decoder/Processor [EMMA2] - 010c VR7701 - 0125 uPD720400 PCI Express - PCI/PCI-X Bridge - 013a Dual Tuner/MPEG Encoder -1034 Framatome Connectors USA Inc. -1035 Comp. & Comm. Research Lab -1036 Future Domain Corp. - 0000 TMC-18C30 [36C70] -1037 Hitachi Micro Systems -1038 AMP, Inc -1039 Silicon Integrated Systems [SiS] - 0001 Virtual PCI-to-PCI bridge (AGP) - 0002 SG86C202 - 0003 SiS AGP Port (virtual PCI-to-PCI bridge) - 0004 PCI-to-PCI bridge - 0006 85C501/2/3 - 0008 SiS85C503/5513 (LPC Bridge) - 0009 ACPI - 000a PCI-to-PCI bridge - 0016 SiS961/2 SMBus Controller - 0018 SiS85C503/5513 (LPC Bridge) - 0180 RAID bus controller 180 SATA/PATA [SiS] - 0181 SATA - 0182 182 SATA/RAID Controller - 1734 1095 D2030-A1 - 0186 AHCI Controller (0106) - 0190 190 Ethernet Adapter - 0191 191 Gigabit Ethernet Adapter - 0200 5597/5598/6326 VGA - 1039 0000 SiS5597 SVGA (Shared RAM) - 0204 82C204 - 0205 SG86C205 - 0300 300/305 PCI/AGP VGA Display Adapter - 107d 2720 Leadtek WinFast VR300 - 0310 315H PCI/AGP VGA Display Adapter - 0315 315 PCI/AGP VGA Display Adapter - 0325 315PRO PCI/AGP VGA Display Adapter - 0330 330 [Xabre] PCI/AGP VGA Display Adapter - 0406 85C501/2 - 0496 85C496 - 0530 530 Host - 0540 540 Host - 0550 550 Host - 0597 5513C - 0601 85C601 - 0620 620 Host - 0630 630 Host - 0633 633 Host - 0635 635 Host - 0645 SiS645 Host & Memory & AGP Controller - 0646 SiS645DX Host & Memory & AGP Controller - 0648 645xx - 0649 SiS649 Host - 0650 650/M650 Host - 0651 651 Host - 0655 655 Host - 0660 660 Host - 0661 661FX/M661FX/M661MX Host - 0662 662 Host - 0671 671MX - 0730 730 Host - 0733 733 Host - 0735 735 Host - 0740 740 Host - 0741 741/741GX/M741 Host - 0745 745 Host - 0746 746 Host - 0755 755 Host - 0760 760/M760 Host - 0761 761/M761 Host - 1734 1099 D2030-A1 Motherboard - 0900 SiS900 PCI Fast Ethernet - 1019 0a14 K7S5A motherboard - 1039 0900 SiS900 10/100 Ethernet Adapter onboard [Asus P4SC-EA] - 1043 8035 CUSI-FX motherboard - 1043 80a7 Motherboard P4S800D-X - 1462 0900 MS-6701 motherboard - 0961 SiS961 [MuTIOL Media IO] - 0962 SiS962 [MuTIOL Media IO] - 0963 SiS963 [MuTIOL Media IO] - 0964 SiS964 [MuTIOL Media IO] - 0965 SiS965 [MuTIOL Media IO] - 0966 SiS966 [MuTIOL Media IO] - 0968 SiS968 [MuTIOL Media IO] - 1180 SATA Controller / IDE mode - 1182 SATA Controller / RAID mode - 1183 SATA Controller / IDE mode - 1184 AHCI Controller / RAID mode - 1185 AHCI IDE Controller (0106) - 3602 83C602 - 5107 5107 - 5300 SiS540 PCI Display Adapter - 5315 550 PCI/AGP VGA Display Adapter - 5401 486 PCI Chipset - 5511 5511/5512 - 5513 5513 [IDE] - 1019 0970 P6STP-FL motherboard - 1039 5513 SiS5513 EIDE Controller (A,B step) - 1043 8035 CUSI-FX motherboard - 1462 7010 MS-6701 motherboard - 1631 5513 GA-8SIML Rev1.0 Motherboard - 1734 1095 D2030-A1 Motherboard - 5517 5517 - 5571 5571 - 5581 5581 Pentium Chipset - 5582 5582 - 5591 5591/5592 Host - 5596 5596 Pentium Chipset - 5597 5597 [SiS5582] - 5600 5600 Host - 6204 Video decoder & MPEG interface - 6205 VGA Controller - 6236 6236 3D-AGP - 6300 630/730 PCI/AGP VGA Display Adapter - 1019 0970 P6STP-FL motherboard - 1043 8035 CUSI-FX motherboard - 6306 530/620 PCI/AGP VGA Display Adapter - 6325 65x/M650/740 PCI/AGP VGA Display Adapter - 1039 6325 SiS 651 onboard [Asus P4SC-EA] - 1631 1004 SiS 651C onboard [Gigabyte GA-8SIML Rev1.0] - 6326 86C326 5598/6326 - 1039 6326 SiS6326 GUI Accelerator - 1092 0a50 SpeedStar A50 - 1092 0a70 SpeedStar A70 - 1092 4910 SpeedStar A70 - 1092 4920 SpeedStar A70 - 10b0 6326 S6110-B (AGP) - 1569 6326 SiS6326 GUI Accelerator - 6330 661/741/760 PCI/AGP or 662/761Gx PCIE VGA Display Adapter - 1039 6330 [M]661xX/[M]741[GX]/[M]760 PCI/AGP VGA Adapter - 1043 8113 SiS Real 256E (ASUS P5S800-VM motherboard) - 1458 d000 SiS661FX GUI 2D/3D Accelerator - 1734 1099 D2030-A1 - 6350 770/670 PCIE VGA Display Adapter - 6351 771/671 PCIE VGA Display Adapter - 7001 USB 1.1 Controller - 1019 0a14 K7S5A motherboard - 1039 7000 Onboard USB Controller - 1462 5470 ECS K7SOM+ motherboard - 1462 7010 MS-6701 motherboard - 1734 1095 D2030-A1 Motherboard - 7002 USB 2.0 Controller - 1462 5470 K7SOM+ 5.2C Motherboard - 1462 7010 MS-6701 motherboard - 1509 7002 Onboard USB Controller - 1734 1095 D2030-A1 - 7007 FireWire Controller - 1462 701d MS-6701 - 7012 AC'97 Sound Controller - 1039 7012 SiS 7012 onboard [Asus P4SC-EA] AC'97 Sound Controller - 1043 818f A8S-X Motherboard - 13f6 0300 CMI9739(A) on ECS K7SOM+ motherboard - 1462 5850 MSI 648 Max (MS-6585) - 1462 7010 MS-6701 motherboard - 15bd 1001 DFI 661FX motherboard - 1734 109f D2030-A1 Motherboard -# There are may be different modem codecs here (Intel537 compatible and incompatible) - 7013 AC'97 Modem Controller - 7016 SiS7016 PCI Fast Ethernet Adapter - 1039 7016 SiS7016 10/100 Ethernet Adapter - 7018 SiS PCI Audio Accelerator - 1014 01b6 SiS PCI Audio Accelerator - 1014 01b7 SiS PCI Audio Accelerator - 1019 7018 SiS PCI Audio Accelerator - 1025 000e SiS PCI Audio Accelerator - 1025 0018 SiS PCI Audio Accelerator - 1039 7018 SiS PCI Audio Accelerator - 1043 1453 SiS PCI Audio Accelerator - 1043 800b SiS PCI Audio Accelerator - 1054 7018 SiS PCI Audio Accelerator - 107d 5330 SiS PCI Audio Accelerator - 107d 5350 SiS PCI Audio Accelerator - 1170 3209 SiS PCI Audio Accelerator - 1462 400a SiS PCI Audio Accelerator - 14a4 2089 SiS PCI Audio Accelerator - 14cd 2194 SiS PCI Audio Accelerator - 14ff 1100 SiS PCI Audio Accelerator - 152d 8808 SiS PCI Audio Accelerator - 1558 1103 SiS PCI Audio Accelerator - 1558 2200 SiS PCI Audio Accelerator - 1563 7018 SiS PCI Audio Accelerator - 15c5 0111 SiS PCI Audio Accelerator - 270f a171 SiS PCI Audio Accelerator - a0a0 0022 SiS PCI Audio Accelerator - 7019 SiS7019 Audio Accelerator - 7502 Azalia Audio Controller -103a Seiko Epson Corporation -103b Tatung Corp. Of America -103c Hewlett-Packard Company - 002a NX9000 Notebook - 08bc NX5000 Notebook - 1005 A4977A Visualize EG - 1008 Visualize FX - 1028 Tach TL Fibre Channel Host Adapter - 1029 Tach XL2 Fibre Channel Host Adapter - 107e 000f Interphase 5560 Fibre Channel Adapter - 9004 9210 1Gb/2Gb Family Fibre Channel Controller - 9004 9211 1Gb/2Gb Family Fibre Channel Controller - 102a Tach TS Fibre Channel Host Adapter - 107e 000e Interphase 5540/5541 Fibre Channel Adapter - 9004 9110 1Gb/2Gb Family Fibre Channel Controller - 9004 9111 1Gb/2Gb Family Fibre Channel Controller - 1030 J2585A DeskDirect 10/100VG NIC - 1031 J2585B HP 10/100VG PCI LAN Adapter - 103c 1040 J2973A DeskDirect 10BaseT NIC - 103c 1041 J2585B DeskDirect 10/100VG NIC - 103c 1042 J2970A DeskDirect 10BaseT/2 NIC - 1040 J2973A DeskDirect 10BaseT NIC - 1041 J2585B DeskDirect 10/100 NIC - 1042 J2970A DeskDirect 10BaseT/2 NIC - 1048 Diva Serial [GSP] Multiport UART - 103c 1049 Tosca Console - 103c 104a Tosca Secondary - 103c 104b Maestro SP2 - 103c 1223 Superdome Console - 103c 1226 Keystone SP2 - 103c 1227 Powerbar SP2 - 103c 1282 Everest SP2 - 103c 1301 Diva RMP3 - 1054 PCI Local Bus Adapter - 1064 79C970 PCnet Ethernet Controller - 108b Visualize FXe - 10c1 NetServer Smart IRQ Router - 10ed TopTools Remote Control - 10f0 rio System Bus Adapter - 10f1 rio I/O Controller - 1200 82557B 10/100 NIC - 1219 NetServer PCI Hot-Plug Controller - 121a NetServer SMIC Controller - 121b NetServer Legacy COM Port Decoder - 121c NetServer PCI COM Port Decoder - 1229 zx1 System Bus Adapter - 122a zx1 I/O Controller - 122e PCI-X Local Bus Adapter - 127b sx1000 System Bus Adapter - 127c sx1000 I/O Controller - 1290 Auxiliary Diva Serial Port - 103c 1291 Diva SP2 - 1291 Auxiliary Diva Serial Port - 12b4 zx1 QuickSilver AGP8x Local Bus Adapter - 12eb sx2000 System Bus Adapter - 12ec sx2000 I/O Controller - 12ee PCI-X 2.0 Local Bus Adapter - 12f8 Broadcom BCM4306 802.11b/g Wireless LAN - 12fa BCM4306 802.11b/g Wireless LAN Controller - 1302 RMP-3 Shared Memory Driver - 1303 RMP-3 (Remote Management Processor) - 1361 BCM4312 802.11a/b/g WLAN Controller - 1371 Broadcom Corporation BCM4312 802.11a/b/g (rev 02) - 2910 E2910A PCIBus Exerciser - 2925 E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer - 3080 Pavilion ze2028ea - 3085 Realtek RTL8139/8139C/8139C+ - 30b5 Compaq Presario V3000Z - 31fb DL365 ATI ES1000 VGA controller - 3206 Adaptec Embedded Serial ATA HostRAID - 3220 Smart Array P600 - 103c 3225 3 Gb/s SAS RAID - 3230 Smart Array Controller - 103c 3223 Smart Array P800 - 103c 3234 P400 SAS Controller - 103c 3235 P400i SAS Controller - 103c 3237 E500 SAS Controller - 103c 323d P700m SAS Controller - 3238 Smart Array E200i (SAS Controller) - 323a Smart Array G6 controllers - 103c 3241 Smart Array P212 - 103c 3243 Smart Array P410 - 103c 3245 Smart Array P410i - 103c 3247 Smart Array P411 - 103c 3249 Smart Array P812 - 103c 324a HP Smart Array 712m (Mezzanine RAID controller) - 103c 324b Smart Array P711m (Mezzanine RAID controller) -# Will present virtual install media as mass storage, keyboard/mouse from console session, etc. - 3300 Proliant iLO2 virtual USB controller - 3301 iLO3 Serial Port -# Virtual serial port which is presented on a Java applet - 3302 Proliant iLO2 virtual UART - 3305 Proliant iLO2 [Integrated Lights Out] controller - 3306 iLO3 Slave instrumentation & System support - 3307 iLO3 Management Processor Support and Messaging - 3308 iLO3 MS Watchdog Timer - 402f PCIe Root Port - 4030 zx2 System Bus Adapter - 4031 zx2 I/O Controller - 4037 PCIe Local Bus Adapter - 403b PCIe Root Port - 60e8 NetRAID-2M : ZX1/M (OEM AMI MegaRAID 493) -103e Solliday Engineering -103f Synopsys/Logic Modeling Group -1040 Accelgraphics Inc. -1041 Computrend -1042 Micron - 1000 PC Tech RZ1000 - 1001 PC Tech RZ1001 - 3000 Samurai_0 - 3010 Samurai_1 - 3020 Samurai_IDE -1043 ASUSTeK Computer Inc. - 0675 ISDNLink P-IN100-ST-D - 0675 1704 ISDN Adapter (PCI Bus, D, C) - 0675 1707 ISDN Adapter (PCI Bus, DV, W) - 10cf 105e ISDN Adapter (PCI Bus, DV, W) - 0c11 A7N8X Motherboard nForce2 IDE/USB/SMBus - 4015 v7100 SDRAM [GeForce2 MX] - 4021 v7100 Combo Deluxe [GeForce2 MX + TV tuner] - 4057 v8200 GeForce 3 - 8043 v8240 PAL 128M [P4T] Motherboard - 8047 v8420 Deluxe [GeForce4 Ti4200] - 807b v9280/TD [Geforce4 TI4200 8X With TV-Out and DVI] - 8095 A7N8X Motherboard nForce2 AC97 Audio - 80ac A7N8X Motherboard nForce2 AGP/Memory - 80bb v9180 Magic/T [GeForce4 MX440 AGP 8x 64MB TV-out] - 80c5 nForce3 chipset motherboard [SK8N] - 80df v9520 Magic/T - 815a A8N-SLI Motherboard nForce4 SATA - 8168 Realtek PCI-E Gigabit Ethernet Controller (RTL8111B) - 8187 802.11a/b/g Wireless LAN Card - 8188 Tiger Hybrid TV Capture Device -# Found on ASUS M2V motherboard - 81e7 Realtek ALC-660 6-channel CODEC - 81f4 EN7300TC512/TD/128M/A(C262G) [Graphics Card EN7300TC512] - 82ca G96 GeForce 9500 GT - 82e8 M3N72-D -1044 Adaptec (formerly DPT) - 1012 Domino RAID Engine - a400 SmartCache/Raid I-IV Controller - a500 PCI Bridge - a501 SmartRAID V Controller - 1044 c001 PM1554U2 Ultra2 Single Channel - 1044 c002 PM1654U2 Ultra2 Single Channel - 1044 c003 PM1564U3 Ultra3 Single Channel - 1044 c004 PM1564U3 Ultra3 Dual Channel - 1044 c005 PM1554U2 Ultra2 Single Channel (NON ACPI) - 1044 c00a PM2554U2 Ultra2 Single Channel - 1044 c00b PM2654U2 Ultra2 Single Channel - 1044 c00c PM2664U3 Ultra3 Single Channel - 1044 c00d PM2664U3 Ultra3 Dual Channel - 1044 c00e PM2554U2 Ultra2 Single Channel (NON ACPI) - 1044 c00f PM2654U2 Ultra2 Single Channel (NON ACPI) - 1044 c014 PM3754U2 Ultra2 Single Channel (NON ACPI) - 1044 c015 PM3755U2B Ultra2 Single Channel (NON ACPI) - 1044 c016 PM3755F Fibre Channel (NON ACPI) - 1044 c01e PM3757U2 Ultra2 Single Channel - 1044 c01f PM3757U2 Ultra2 Dual Channel - 1044 c020 PM3767U3 Ultra3 Dual Channel - 1044 c021 PM3767U3 Ultra3 Quad Channel - 1044 c028 PM2865U3 Ultra3 Single Channel - 1044 c029 PM2865U3 Ultra3 Dual Channel - 1044 c02a PM2865F Fibre Channel - 1044 c03c 2000S Ultra3 Single Channel - 1044 c03d 2000S Ultra3 Dual Channel - 1044 c03e 2000F Fibre Channel - 1044 c046 3000S Ultra3 Single Channel - 1044 c047 3000S Ultra3 Dual Channel - 1044 c048 3000F Fibre Channel - 1044 c050 5000S Ultra3 Single Channel - 1044 c051 5000S Ultra3 Dual Channel - 1044 c052 5000F Fibre Channel - 1044 c05a 2400A UDMA Four Channel - 1044 c05b 2400A UDMA Four Channel DAC - 1044 c064 3010S Ultra3 Dual Channel - 1044 c065 3410S Ultra160 Four Channel - 1044 c066 3010S Fibre Channel - a511 SmartRAID V Controller - 1044 c032 ASR-2005S I2O Zero Channel - 1044 c035 ASR-2010S I2O Zero Channel - c066 3010S Ultra3 Dual Channel -1045 OPTi Inc. - a0f8 82C750 [Vendetta] USB Controller - c101 92C264 - c178 92C178 - c556 82X556 [Viper] - c557 82C557 [Viper-M] - c558 82C558 [Viper-M ISA+IDE] - c567 82C750 [Vendetta], device 0 - c568 82C750 [Vendetta], device 1 - c569 82C579 [Viper XPress+ Chipset] - c621 82C621 [Viper-M/N+] - c700 82C700 [FireStar] - c701 82C701 [FireStar Plus] - c814 82C814 [Firebridge 1] - c822 82C822 - c824 82C824 - c825 82C825 [Firebridge 2] - c832 82C832 - c861 82C861 - c895 82C895 - c935 EV1935 ECTIVA MachOne PCIAudio - d568 82C825 [Firebridge 2] - d721 IDE [FireStar] -1046 IPC Corporation, Ltd. -1047 Genoa Systems Corp -1048 Elsa AG - 0c60 Gladiac MX - 0d22 Quadro4 900XGL [ELSA GLoria4 900XGL] - 1000 QuickStep 1000 - 3000 QuickStep 3000 - 8901 Gloria XL - 1048 0935 GLoria XL (Virge) -1049 Fountain Technologies, Inc. -# nee SGS Thomson Microelectronics -104a STMicroelectronics - 0000 STLS2F Host Bridge - 0008 STG 2000X - 0009 STG 1764X - 0010 STG4000 [3D Prophet Kyro Series] - 0201 STPC Vega Northbridge - 0209 STPC Consumer/Industrial North- and Southbridge - 020a STPC Atlas/ConsumerS/Consumer IIA Northbridge - 020b STPC Consumer II ISA Bridge - 0210 STPC Atlas ISA Bridge - 021a STPC Consumer S Southbridge - 021b STPC Consumer IIA Southbridge - 0220 STPC Industrial PCI to PCCard bridge - 0228 STPC Atlas IDE - 0229 STPC Vega IDE - 0230 STPC Atlas/Vega OHCI USB Controller - 0238 STPC Vega LAN - 0500 ST70137 [Unicorn] ADSL DMT Transceiver - 104a 0500 BeWAN ADSL PCI st - 0564 STPC Client Northbridge - 0981 21x4x DEC-Tulip compatible 10/100 Ethernet - 1746 STG 1764X - 2774 21x4x DEC-Tulip compatible 10/100 Ethernet - 3520 MPEG-II decoder card - 55cc STPC Client Southbridge -104b BusLogic - 0140 BT-946C (old) [multimaster 01] - 1040 BT-946C (BA80C30) [MultiMaster 10] - 8130 Flashpoint LT -104c Texas Instruments - 0500 100 MBit LAN Controller - 0508 TMS380C2X Compressor Interface - 1000 Eagle i/f AS - 104c PCI1510 PC card Cardbus Controller - 3d04 TVP4010 [Permedia] - 3d07 TVP4020 [Permedia 2] - 1011 4d10 Comet - 1040 000f AccelStar II - 1040 0011 AccelStar II - 1048 0a31 WINNER 2000 - 1048 0a32 GLoria Synergy - 1048 0a34 GLoria Synergy - 1048 0a35 GLoria Synergy - 1048 0a36 GLoria Synergy - 1048 0a43 GLoria Synergy - 1048 0a44 GLoria Synergy - 107d 2633 WinFast 3D L2300 - 1092 0126 FIRE GL 1000 PRO - 1092 0127 FIRE GL 1000 PRO - 1092 0136 FIRE GL 1000 PRO - 1092 0141 FIRE GL 1000 PRO - 1092 0146 FIRE GL 1000 PRO - 1092 0148 FIRE GL 1000 PRO - 1092 0149 FIRE GL 1000 PRO - 1092 0152 FIRE GL 1000 PRO - 1092 0154 FIRE GL 1000 PRO - 1092 0155 FIRE GL 1000 PRO - 1092 0156 FIRE GL 1000 PRO - 1092 0157 FIRE GL 1000 PRO - 1097 3d01 Jeronimo Pro - 1102 100f Graphics Blaster Extreme - 3d3d 0100 Reference Permedia 2 3D - 8000 PCILynx/PCILynx2 IEEE 1394 Link Layer Controller - 1443 8003 FireBoard200 - e4bf 1010 CF1-1-SNARE - e4bf 1020 CF1-2-SNARE - 8009 TSB12LV22 IEEE-1394 Controller - 104d 8032 8032 OHCI i.LINK (IEEE 1394) Controller - 8017 PCI4410 FireWire Controller - 8019 TSB12LV23 IEEE-1394 Controller - 11bd 000a Studio DV500-1394 - 11bd 000e Studio DV - e4bf 1010 CF2-1-CYMBAL - 8020 TSB12LV26 IEEE-1394 Controller (Link) - 1028 00d8 Precision 530 - 11bd 000f Studio DV500-1394 - 11bd 001c Excalibur 4.1 - 8021 TSB43AA22 IEEE-1394 Controller (PHY/Link Integrated) - 104d 80df Vaio PCG-FX403 - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 8022 TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link) - 104c 8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link) - 8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link) - 103c 088c NC8000 laptop - 1043 808b K8N4-E Mainboard - 1043 815b P5W DH Deluxe Motherboard - 1443 8023 FireCard400 - 8024 TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link) - 107d 6620 Winfast DV2000 FireWire Controller - 1443 8024 FireBoard Blue - 1458 1000 GA-EP45-DS5 Motherboard - 8025 TSB82AA2 IEEE-1394b Link Layer Controller - 1458 1000 GA-K8N Ultra-9 Mainboard - 8026 TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link) - 1025 0035 TravelMate 660 - 1025 003c Aspire 2001WLCi (Compaq CL50 motherboard) - 103c 006a NX9500 - 1043 808d A7V333 mainboard. - 8027 PCI4451 IEEE-1394 Controller - 1028 00e6 PCI4451 IEEE-1394 Controller (Dell Inspiron 8100) - 8029 PCI4510 IEEE-1394 Controller - 1028 0163 Latitude D505 - 1028 0196 Inspiron 5160 - 1071 8160 MIM2900 - 802b PCI7410,7510,7610 OHCI-Lynx Controller - 1028 0139 Latitude D400 - 1028 014e PCI7410,7510,7610 OHCI-Lynx Controller (Latitude D800) - 802e PCI7x20 1394a-2000 OHCI Two-Port PHY/Link-Layer Controller - 1028 018d Inspiron 700m/710m - 8031 PCIxx21/x515 Cardbus Controller - 1025 0080 Aspire 5024WLMi - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 103c 308b MX6125 - 8032 OHCI Compliant IEEE 1394 Host Controller - 1025 0080 Aspire 5024WLMi - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 103c 308b MX6125 - 8033 PCIxx21 Integrated FlashMedia Controller - 1025 0080 Aspire 5024WLMi - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 103c 308b MX6125 - 8034 PCI6411/6421/6611/6621/7411/7421/7611/7621 Secure Digital Controller - 1025 0080 Aspire 5024WLMi - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 103c 308b MX6125 - 8035 PCI6411/6421/6611/6621/7411/7421/7611/7621 Smart Card Controller - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 8036 PCI6515 Cardbus Controller - 8038 PCI6515 SmartCard Controller - 8039 PCIxx12 Cardbus Controller - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 803a PCIxx12 OHCI Compliant IEEE 1394 Host Controller - 103c 309f nx9420 - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 803b 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD) - 103c 309f nx9420 - 103c 30a3 Compaq nw8440 - 803c PCIxx12 SDA Standard Compliant SD Host Controller - 103c 309f nx9420 - 103c 30a3 Compaq nw8440 - 803d PCIxx12 GemCore based SmartCard controller - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 nc8430 - 103c 30aa nc6310 - 8101 TSB43DB42 IEEE-1394a-2000 Controller (PHY/Link) - 8201 PCI1620 Firmware Loading Function - 8204 PCI7410,7510,7610 PCI Firmware Loading Function - 1028 0139 Latitude D400 - 1028 014e Latitude D800 - 8231 XIO2000(A)/XIO2200(A) PCI Express-to-PCI Bridge - 8235 XIO2200(A) IEEE-1394a-2000 Controller (PHY/Link) - 823e XIO2213A PCI Express to PCI Bridge - 823f XIO2213A 1394b OHCI with 3-Port PHY - 1546 803c FWB-PCIE1X11B - 8400 ACX 100 22Mbps Wireless Interface - 1186 3b00 DWL-650+ PC Card cardbus 22Mbs Wireless Adapter [AirPlus] - 1186 3b01 DWL-520+ 22Mbps PCI Wireless Adapter - 1395 2201 WL22-PC - 16ab 8501 WL-8305 IEEE802.11b+ Wireless LAN PCI Adapter - 8401 ACX 100 22Mbps Wireless Interface - 9000 Wireless Interface (of unknown type) - 9065 TMS320DM642 - 9066 ACX 111 54Mbps Wireless Interface - 104c 9066 WL212 Sitecom Wireless Network PCI-Card 100M (Version 1) - 104c 9096 Trendnet TEW-412PC Wireless PCI Adapter (Version A) - 1186 3b04 DWL-G520+ Wireless PCI Adapter - 1186 3b05 DWL-G650+ AirPlusG+ CardBus Wireless LAN - 13d1 aba0 SWLMP-54108 108Mbps Wireless mini PCI card 802.11g+ - 16ec 010d USR5416 802.11g Wireless Turbo PCI Adapter - 1737 0033 WPC54G Ver.2 802.11G PC Card - 17cf 0033 Z-Com XG650 Wireless miniPCI 802.11b/g - a001 TDC1570 - a100 TDC1561 - a102 TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f - a106 TMS320C6414 TMS320C6415 TMS320C6416 - 175c 5000 ASI50xx Audio Adapter - 175c 6400 ASI6400 Cobranet series - 175c 8700 ASI87xx Radio Tuner card - ac10 PCI1050 - ac11 PCI1053 - ac12 PCI1130 - ac13 PCI1031 - ac15 PCI1131 - ac16 PCI1250 - 1014 0092 ThinkPad 600 - ac17 PCI1220 - ac18 PCI1260 - ac19 PCI1221 - ac1a PCI1210 - ac1b PCI1450 - 0e11 b113 Armada M700 - 1014 0130 ThinkPad A21m/T20/T22 - ac1c PCI1225 - 0e11 b121 Armada E500 - 1028 0088 Latitude CPi A400XT - ac1d PCI1251A - ac1e PCI1211 - ac1f PCI1251B - ac20 TI 2030 - ac21 PCI2031 - ac22 PCI2032 PCI Docking Bridge - ac23 PCI2250 PCI-to-PCI Bridge - ac28 PCI2050 PCI-to-PCI Bridge - ac2c PCI2060 PCI-to-PCI Bridge - ac30 PCI1260 PC card Cardbus Controller - ac40 PCI4450 PC card Cardbus Controller - ac41 PCI4410 PC card Cardbus Controller - ac42 PCI4451 PC card Cardbus Controller - 1028 00e6 PCI4451 PC card CardBus Controller (Inspiron 8100) - ac44 PCI4510 PC card Cardbus Controller - 1028 0149 Inspiron 5100 - 1028 0163 Latitude D505 - 1028 0196 Inspiron 5160 - 1071 8160 MIM2000 - ac46 PCI4520 PC card Cardbus Controller - 1014 0552 ThinkPad - ac47 PCI7510 PC card Cardbus Controller - 1028 0139 Latitude D400 - 1028 013f Precision M60 - 1028 014e Latitude D800 - ac48 PCI7610 PC Card Cardbus Controller - ac49 PCI7410 PC Card Cardbus Controller - ac4a PCI7510,7610 PC card Cardbus Controller - 1028 0139 Latitude D400 - 1028 014e Latitude D800 - ac4b PCI7610 SD/MMC controller - ac4c PCI7610 Memory Stick controller - ac50 PCI1410 PC card Cardbus Controller - ac51 PCI1420 PC card Cardbus Controller - 0e11 004e Evo N600c - 1014 0148 ThinkPad A20m - 1014 023b ThinkPad T23 - 1028 00b1 Latitude C600 - 1028 012a Latitude C640 - 1033 80cd Versa Note VXi - 10cf 1095 Lifebook S-4510/C6155 - e4bf 1000 CP2-2-HIPHOP - ac52 PCI1451 PC card Cardbus Controller - ac53 PCI1421 PC card Cardbus Controller - ac54 PCI1620 PC Card Controller - 103c 08b0 tc1100 tablet - ac55 PCI1520 PC card Cardbus Controller - 1014 0512 ThinkPad T30/T40 - ac56 PCI1510 PC card Cardbus Controller - 1014 0512 ThinkPad R50e - 1014 0528 ThinkPad R40e - 17aa 2012 ThinkPad T60/R60 series - ac60 PCI2040 PCI to DSP Bridge Controller - 175c 5100 ASI51xx Audio Adapter - 175c 6100 ASI61xx Audio Adapter - 175c 6200 ASI62xx Audio Adapter - 175c 8800 ASI88xx Audio Adapter - 186f 3001 WR-G303 PCI radio receiver - 186f 3005 WR-G305 PCI radio receiver - 186f 3101 WR-G313 PCI radio receiver - 186f 3105 WR-G315 PCI radio receiver - ac8d PCI 7620 - ac8e PCI7420 CardBus Controller - 1028 018d Inspiron 700m/710m - ac8f PCI7420/7620 Combo CardBus, 1394a-2000 OHCI and SD/MS-Pro Controller - 1028 018d Inspiron 700m/710m - fe00 FireWire Host Controller - fe03 12C01A FireWire Host Controller -104d Sony Corporation - 8004 DTL-H2500 [Playstation development board] - 8009 CXD1947Q i.LINK Controller - 8039 CXD3222 i.LINK Controller - 8056 Rockwell HCF 56K modem - 808a Memory Stick Controller -104e Oak Technology, Inc - 0017 OTI-64017 - 0107 OTI-107 [Spitfire] - 0109 Video Adapter - 0111 OTI-64111 [Spitfire] - 0217 OTI-64217 - 0317 OTI-64317 -104f Co-time Computer Ltd -1050 Winbond Electronics Corp - 0000 NE2000 - 0001 W83769F - 0033 W89C33D 802.11 a/b/g BB/MAC - 0105 W82C105 - 0840 W89C840 - 1050 0001 W89C840 Ethernet Adapter - 1050 0840 W89C840 Ethernet Adapter - 0940 W89C940 - 5a5a W89C940F - 6692 W6692 - 1043 1702 ISDN Adapter (PCI Bus, D, W) - 1043 1703 ISDN Adapter (PCI Bus, DV, W) - 1043 1707 ISDN Adapter (PCI Bus, DV, W) - 144f 1702 ISDN Adapter (PCI Bus, D, W) - 144f 1703 ISDN Adapter (PCI Bus, DV, W) - 144f 1707 ISDN Adapter (PCI Bus, DV, W) - 9921 W99200F MPEG-1 Video Encoder - 9922 W99200F/W9922PF MPEG-1/2 Video Encoder - 9970 W9970CF -1051 Anigma, Inc. -1052 ?Young Micro Systems -1053 Young Micro Systems -1054 Hitachi, Ltd - 3009 2Gbps Fibre Channel to PCI HBA 3009 - 300a 4Gbps Fibre Channel to PCI-X HBA 300a - 300b 4Gbps Fibre Channel to PCI-X HBA 300b - 300f ColdFusion 3 Chipset Processor to I/O Controller - 3010 ColdFusion 3 Chipset Memory Controller Hub - 3011 ColdFusion 3e Chipset Processor to I/O Controller - 3012 ColdFusion 3e Chipset Memory Controller Hub - 3017 Unassigned Hitachi Shared FC Device 3017 - 301d PCIe-to-PCIe Bridge with Virtualization IO Assist Feature - 3020 FIVE-EX based Fibre Channel to PCIe HBA - 3505 SH7751 PCI Controller (PCIC) - 350e SH7751R PCI Controller (PCIC) -1055 Efar Microsystems - 9130 SLC90E66 [Victory66] IDE - 9460 SLC90E66 [Victory66] ISA - 9462 SLC90E66 [Victory66] USB - 9463 SLC90E66 [Victory66] ACPI - e420 LAN9420/LAN9420i -1056 ICL -# Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this. -1057 Motorola - 0001 MPC105 [Eagle] - 0002 MPC106 [Grackle] - 0003 MPC8240 [Kahlua] - 0004 MPC107 - 0006 MPC8245 [Unity] - 0008 MPC8540 - 0009 MPC8560 - 0012 MPC8548 [PowerQUICC III] - 0100 MC145575 [HFC-PCI] - 0431 KTI829c 100VG - 1073 Nokia N770 - 1219 Nokia N800 - 1801 DSP56301 Digital Signal Processor - 14fb 0101 Transas Radar Imitator Board [RIM] - 14fb 0102 Transas Radar Imitator Board [RIM-2] - 14fb 0202 Transas Radar Integrator Board [RIB-2] - 14fb 0611 1 channel CAN bus Controller [CanPci-1] - 14fb 0612 2 channels CAN bus Controller [CanPci-2] - 14fb 0613 3 channels CAN bus Controller [CanPci-3] - 14fb 0614 4 channels CAN bus Controller [CanPci-4] - 14fb 0621 1 channel CAN bus Controller [CanPci2-1] - 14fb 0622 2 channels CAN bus Controller [CanPci2-2] - 14fb 0810 Transas VTS Radar Integrator Board [RIB-4] - 175c 4200 ASI4215 Audio Adapter - 175c 4300 ASI43xx Audio Adapter - 175c 4400 ASI4401 Audio Adapter - ecc0 0010 Darla - ecc0 0020 Gina - ecc0 0030 Layla rev.0 - ecc0 0031 Layla rev.1 - ecc0 0040 Darla24 rev.0 - ecc0 0041 Darla24 rev.1 - ecc0 0050 Gina24 rev.0 - ecc0 0051 Gina24 rev.1 - ecc0 0070 Mona rev.0 - ecc0 0071 Mona rev.1 - ecc0 0072 Mona rev.2 - 18c0 MPC8265A/8266/8272 - 18c1 MPC8271/MPC8272 - 3052 SM56 Data Fax Modem - 3055 SM56 Data Fax Modem - 3410 DSP56361 Digital Signal Processor - ecc0 0050 Gina24 rev.0 - ecc0 0051 Gina24 rev.1 - ecc0 0060 Layla24 - ecc0 0070 Mona rev.0 - ecc0 0071 Mona rev.1 - ecc0 0072 Mona rev.2 - ecc0 0080 Mia rev.0 - ecc0 0081 Mia rev.1 - ecc0 0090 Indigo - ecc0 00a0 Indigo IO - ecc0 00b0 Indigo DJ - ecc0 0100 3G - 4801 Raven - 4802 Falcon - 4803 Hawk - 4806 CPX8216 - 4d68 20268 - 5600 SM56 PCI Modem - 1057 0300 SM56 PCI Speakerphone Modem - 1057 0301 SM56 PCI Voice Modem - 1057 0302 SM56 PCI Fax Modem - 1057 5600 SM56 PCI Voice modem - 13d2 0300 SM56 PCI Speakerphone Modem - 13d2 0301 SM56 PCI Voice modem - 13d2 0302 SM56 PCI Fax Modem - 1436 0300 SM56 PCI Speakerphone Modem - 1436 0301 SM56 PCI Voice modem - 1436 0302 SM56 PCI Fax Modem - 144f 100c SM56 PCI Fax Modem - 1494 0300 SM56 PCI Speakerphone Modem - 1494 0301 SM56 PCI Voice modem - 14c8 0300 SM56 PCI Speakerphone Modem - 14c8 0302 SM56 PCI Fax Modem - 1668 0300 SM56 PCI Speakerphone Modem - 1668 0302 SM56 PCI Fax Modem - 5608 Wildcard X100P - 5803 MPC5200 - 5806 MCF54 Coldfire - 5808 MPC8220 - 5809 MPC5200B - 6400 MPC190 Security Processor (S1 family, encryption) - 6405 MPC184 Security Processor (S1 family) -1058 Electronics & Telecommunications RSH -# Formerly: Teknor Industrial Computers Inc -1059 Kontron -105a Promise Technology, Inc. - 0d30 PDC20265 (FastTrak100 Lite/Ultra100) - 1043 8042 AV7266-E South Bridge Promise RAID - 105a 4d33 Ultra100 - 0d38 20263 - 105a 4d39 Fasttrak66 - 1275 20275 - 3318 PDC20318 (SATA150 TX4) - 3319 PDC20319 (FastTrak S150 TX4) - 8086 3427 S875WP1-E mainboard - 3371 PDC20371 (FastTrak S150 TX2plus) - 3373 PDC20378 (FastTrak 378/SATA 378) - 1043 80f5 K8V Deluxe/PC-DL Deluxe motherboard - 1462 590d KT6 Delta-FIS2R (MS-6590) - 1462 702e K8T NEO FIS2R motherboard - 3375 PDC20375 (SATA150 TX2plus) - 3376 PDC20376 (FastTrak 376) - 1043 809e A7V8X motherboard - 3515 PDC40719 [FastTrak TX4300/TX4310] - 3519 PDC40519 (FastTrak TX4200) - 3570 20771 (FastTrak TX2300) - 3571 PDC20571 (FastTrak TX2200) - 3574 PDC20579 SATAII 150 IDE Controller - 3577 PDC40779 (SATA 300 779) - 3d17 PDC40718 (SATA 300 TX4) - 3d18 PDC20518/PDC40518 (SATAII 150 TX4) - 3d73 PDC40775 (SATA 300 TX2plus) - 3d75 PDC20575 (SATAII150 TX2plus) - 3f20 PDC42819 [FastTrak TX2650/TX4650] - 4302 80333 [SuperTrak EX4350] - 4d30 PDC20267 (FastTrak100/Ultra100) - 105a 4d33 Ultra100 - 105a 4d39 FastTrak100 - 8086 5744 S845WD1-E mainboard - 4d33 20246 - 105a 4d33 20246 IDE Controller - 4d38 PDC20262 (FastTrak66/Ultra66) - 105a 4d30 Ultra Device on SuperTrak - 105a 4d33 Ultra66 - 105a 4d39 FastTrak66 - 4d68 PDC20268 (Ultra100 TX2) - 105a 4d68 Ultra100TX2 - 4d69 20269 - 105a 4d68 Ultra133TX2 - 5275 PDC20276 (MBFastTrak133 Lite) - 1043 807e A7V333 motherboard. - 105a 0275 SuperTrak SX6000 IDE - 105a 1275 MBFastTrak133 Lite (tm) Controller (RAID mode) - 1458 b001 MBUltra 133 - 5300 DC5300 - 6268 PDC20270 (FastTrak100 LP/TX2/TX4) - 105a 4d68 FastTrak100 TX2 - 6269 PDC20271 (FastTrak TX2000) - 105a 6269 FastTrak TX2/TX2000 - 6300 PDC81731 [FastTrak SX8300] - 6621 PDC20621 (FastTrak S150 SX4/FastTrak SX4000 lite) - 6622 PDC20621 [SATA150 SX4] 4 Channel IDE RAID Controller - 6624 PDC20621 [FastTrak SX4100] - 6626 PDC20618 (Ultra 618) - 6629 PDC20619 (FastTrak TX4000) - 7275 PDC20277 (SBFastTrak133 Lite) - 8002 SATAII150 SX8 - 8350 80333 [SuperTrak EX8350/EX16350], 80331 [SuperTrak EX8300/EX16300] - 8650 81384 [SuperTrak EX SAS and SATA RAID Controller] - 105a 4600 SuperTrak EX4650A - 105a 4601 SuperTrak EX4650 - 105a 4610 SuperTrak EX4650EL - 105a 8600 SuperTrak EX8650EL - 105a 8601 SuperTrak EX8650A - 105a 8602 SuperTrak EX8654 - 105a 8603 SuperTrak EX8658 - 105a 8604 SuperTrak EX8650 - 105a 8610 SuperTrak EX8650M - 105a a600 SuperTrak EX12650 - 105a b600 SuperTrak EX16650 - 105a b601 SuperTrak EX16654 - 105a b602 SuperTrak EX16658 - 8760 PM8010 [SuperTrak EX SAS and SATA 6G RAID Controller] - c350 80333 [SuperTrak EX12350] - e350 80333 [SuperTrak EX24350] -105b Foxconn International, Inc. - 0c4d SiS AC'97 Sound Controller -105c Wipro Infotech Limited -105d Number 9 Computer Company - 2309 Imagine 128 - 2339 Imagine 128-II - 105d 0000 Imagine 128 series 2 4Mb VRAM - 105d 0001 Imagine 128 series 2 4Mb VRAM - 105d 0002 Imagine 128 series 2 4Mb VRAM - 105d 0003 Imagine 128 series 2 4Mb VRAM - 105d 0004 Imagine 128 series 2 4Mb VRAM - 105d 0005 Imagine 128 series 2 4Mb VRAM - 105d 0006 Imagine 128 series 2 4Mb VRAM - 105d 0007 Imagine 128 series 2 4Mb VRAM - 105d 0008 Imagine 128 series 2e 4Mb DRAM - 105d 0009 Imagine 128 series 2e 4Mb DRAM - 105d 000a Imagine 128 series 2 8Mb VRAM - 105d 000b Imagine 128 series 2 8Mb H-VRAM - 11a4 000a Barco Metheus 5 Megapixel - 13cc 0000 Barco Metheus 5 Megapixel - 13cc 0004 Barco Metheus 5 Megapixel - 13cc 0005 Barco Metheus 5 Megapixel - 13cc 0006 Barco Metheus 5 Megapixel - 13cc 0008 Barco Metheus 5 Megapixel - 13cc 0009 Barco Metheus 5 Megapixel - 13cc 000a Barco Metheus 5 Megapixel - 13cc 000c Barco Metheus 5 Megapixel - 493d Imagine 128 T2R [Ticket to Ride] - 11a4 000a Barco Metheus 5 Megapixel, Dual Head - 11a4 000b Barco Metheus 5 Megapixel, Dual Head - 13cc 0002 Barco Metheus 4 Megapixel, Dual Head - 13cc 0003 Barco Metheus 5 Megapixel, Dual Head - 13cc 0007 Barco Metheus 5 Megapixel, Dual Head - 13cc 0008 Barco Metheus 5 Megapixel, Dual Head - 13cc 0009 Barco Metheus 5 Megapixel, Dual Head - 13cc 000a Barco Metheus 5 Megapixel, Dual Head - 5348 Revolution 4 - 105d 0037 Revolution IV-FP AGP (For SGI 1600SW) - 11a4 0028 PVS5600M - 11a4 0038 PVS5600D -105e Vtech Computers Ltd -105f Infotronic America Inc -1060 United Microelectronics [UMC] - 0001 UM82C881 - 0002 UM82C886 - 0101 UM8673F - 0881 UM8881 - 0886 UM8886F - 0891 UM8891A - 1001 UM886A - 673a UM8886BF - 673b EIDE Master/DMA - 8710 UM8710 - 886a UM8886A - 8881 UM8881F - 8886 UM8886F - 888a UM8886A - 8891 UM8891A - 9017 UM9017F - 9018 UM9018 - 9026 UM9026 - e881 UM8881N - e886 UM8886N - e88a UM8886N - e891 UM8891N -1061 I.I.T. - 0001 AGX016 - 0002 IIT3204/3501 -1062 Maspar Computer Corp -1063 Ocean Office Automation -1064 Alcatel - 1102 Dynamite 2840 (ADSL PCI modem) -1065 Texas Microsystems -1066 PicoPower Technology - 0000 PT80C826 - 0001 PT86C521 [Vesuvius v1] Host Bridge - 0002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Master - 0003 PT86C524 [Nile] PCI-to-PCI Bridge - 0004 PT86C525 [Nile-II] PCI-to-PCI Bridge - 0005 National PC87550 System Controller - 8002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave -1067 Mitsubishi Electric - 0301 AccelGraphics AccelECLIPSE - 0304 AccelGALAXY A2100 [OEM Evans & Sutherland] - 0308 Tornado 3000 [OEM Evans & Sutherland] - 1002 VG500 [VolumePro Volume Rendering Accelerator] -1068 Diversified Technology -1069 Mylex Corporation - 0001 DAC960P - 0002 DAC960PD - 0010 DAC960PG - 0020 DAC960LA - 0050 AcceleRAID 352/170/160 support Device - 1069 0050 AcceleRAID 352 support Device - 1069 0052 AcceleRAID 170 support Device - 1069 0054 AcceleRAID 160 support Device - b166 AcceleRAID 600/500/400/Sapphire support Device - 1014 0242 iSeries 2872 DASD IOA - 1014 0266 Dual Channel PCI-X U320 SCSI Adapter - 1014 0278 Dual Channel PCI-X U320 SCSI RAID Adapter - 1014 02d3 Dual Channel PCI-X U320 SCSI Adapter - 1014 02d4 Dual Channel PCI-X U320 SCSI RAID Adapter - 1069 0200 AcceleRAID 400, Single Channel, PCI-X, U320, SCSI RAID - 1069 0202 AcceleRAID Sapphire, Dual Channel, PCI-X, U320, SCSI RAID - 1069 0204 AcceleRAID 500, Dual Channel, Low-Profile, PCI-X, U320, SCSI RAID - 1069 0206 AcceleRAID 600, Dual Channel, PCI-X, U320, SCSI RAID - ba55 eXtremeRAID 1100 support Device - ba56 eXtremeRAID 2000/3000 support Device - 1069 0030 eXtremeRAID 3000 support Device - 1069 0040 eXtremeRAID 2000 support Device - ba57 eXtremeRAID 4000/5000 support Device - 1069 0072 eXtremeRAID 5000 support Device -106a Aten Research Inc -106b Apple Computer Inc. - 0001 Bandit PowerPC host bridge - 0002 Grand Central I/O - 0003 Control Video - 0004 PlanB Video-In - 0007 O'Hare I/O - 000c DOS on Mac - 000e Hydra Mac I/O - 0010 Heathrow Mac I/O - 0017 Paddington Mac I/O - 0018 UniNorth FireWire - 0019 KeyLargo USB - 001e UniNorth Internal PCI - 001f UniNorth PCI - 0020 UniNorth AGP - 0021 UniNorth GMAC (Sun GEM) - 0022 KeyLargo Mac I/O - 0024 UniNorth/Pangea GMAC (Sun GEM) - 0025 KeyLargo/Pangea Mac I/O - 0026 KeyLargo/Pangea USB - 0027 UniNorth/Pangea AGP - 0028 UniNorth/Pangea PCI - 0029 UniNorth/Pangea Internal PCI - 002d UniNorth 1.5 AGP - 002e UniNorth 1.5 PCI - 002f UniNorth 1.5 Internal PCI - 0030 UniNorth/Pangea FireWire - 0031 UniNorth 2 FireWire - 106b 5811 iBook G4 2004 - 0032 UniNorth 2 GMAC (Sun GEM) - 0033 UniNorth 2 ATA/100 - 0034 UniNorth 2 AGP - 0035 UniNorth 2 PCI - 0036 UniNorth 2 Internal PCI - 003b UniNorth/Intrepid ATA/100 - 003e KeyLargo/Intrepid Mac I/O - 003f KeyLargo/Intrepid USB - 0040 K2 KeyLargo USB - 0041 K2 KeyLargo Mac/IO - 0042 K2 FireWire - 0043 K2 ATA/100 - 0045 K2 HT-PCI Bridge - 0046 K2 HT-PCI Bridge - 0047 K2 HT-PCI Bridge - 0048 K2 HT-PCI Bridge - 0049 K2 HT-PCI Bridge - 004a CPC945 HT Bridge - 004b U3 AGP - 004c K2 GMAC (Sun GEM) - 004f Shasta Mac I/O - 0050 Shasta IDE - 0051 Shasta (Sun GEM) - 0052 Shasta Firewire - 0053 Shasta PCI Bridge - 0054 Shasta PCI Bridge - 0055 Shasta PCI Bridge - 0056 U4 PCIe - 0057 U3 HT Bridge - 0058 U3L AGP Bridge - 0059 U3H AGP Bridge - 005b CPC945 PCIe Bridge - 0066 Intrepid2 AGP Bridge - 0067 Intrepid2 PCI Bridge - 0068 Intrepid2 PCI Bridge - 0069 Intrepid2 ATA/100 - 006a Intrepid2 Firewire - 006b Intrepid2 GMAC (Sun GEM) - 0074 U4 HT Bridge - 1645 Tigon3 Gigabit Ethernet NIC (BCM5701) -106c Hynix Semiconductor - 8801 Dual Pentium ISA/PCI Motherboard - 8802 PowerPC ISA/PCI Motherboard - 8803 Dual Window Graphics Accelerator - 8804 LAN Controller - 8805 100-BaseT LAN -106d Sequent Computer Systems -106e DFI, Inc -106f City Gate Development Ltd -1070 Daewoo Telecom Ltd -1071 Mitac - 8160 Mitac 8060B Mobile Platform -1072 GIT Co Ltd -1073 Yamaha Corporation - 0001 3D GUI Accelerator - 0002 YGV615 [RPA3 3D-Graphics Controller] - 0003 YMF-740 - 0004 YMF-724 - 1073 0004 YMF724-Based PCI Audio Adapter - 0005 DS1 Audio - 1073 0005 DS-XG PCI Audio CODEC - 0006 DS1 Audio - 0008 DS1 Audio - 1073 0008 DS-XG PCI Audio CODEC - 000a DS1L Audio - 1073 0004 DS-XG PCI Audio CODEC - 1073 000a DS-XG PCI Audio CODEC - 000c YMF-740C [DS-1L Audio Controller] - 107a 000c DS-XG PCI Audio CODEC - 000d YMF-724F [DS-1 Audio Controller] - 1073 000d DS-XG PCI Audio CODEC - 0010 YMF-744B [DS-1S Audio Controller] - 1073 0006 DS-XG PCI Audio CODEC - 1073 0010 DS-XG PCI Audio CODEC - 0012 YMF-754 [DS-1E Audio Controller] - 1073 0012 DS-XG PCI Audio Codec - 0020 DS-1 Audio - 1000 SW1000XG [XG Factory] - 2000 DS2416 Digital Mixing Card - 1073 2000 DS2416 Digital Mixing Card -1074 NexGen Microsystems - 4e78 82c500/1 -1075 Advanced Integrations Research -1076 Chaintech Computer Co. Ltd -1077 QLogic Corp. - 1016 ISP10160 Single Channel Ultra3 SCSI Processor - 1020 ISP1020 Fast-wide SCSI - 1022 ISP1022 Fast-wide SCSI - 1080 ISP1080 SCSI Host Adapter - 1216 ISP12160 Dual Channel Ultra3 SCSI Processor - 101e 8471 QLA12160 on AMI MegaRAID - 101e 8493 QLA12160 on AMI MegaRAID - 1240 ISP1240 SCSI Host Adapter - 1280 ISP1280 SCSI Host Adapter - 2020 ISP2020A Fast!SCSI Basic Adapter - 2100 QLA2100 64-bit Fibre Channel Adapter - 1077 0001 QLA2100 64-bit Fibre Channel Adapter - 2200 QLA2200 64-bit Fibre Channel Adapter - 1077 0002 QLA2200 - 2300 QLA2300 64-bit Fibre Channel Adapter - 2312 ISP2312-based 2Gb Fibre Channel to PCI-X HBA - 103c 0131 2Gb Fibre Channel - Single port [A7538A] - 103c 12ba 2Gb Fibre Channel - Dual port [A6826A] - 2322 ISP2322-based 2Gb Fibre Channel to PCI-X HBA - 2422 ISP2422-based 4Gb Fibre Channel to PCI-X HBA - 103c 12d7 4Gb Fibre Channel [AB379A] - 103c 12dd 4Gb Fibre Channel [AB429A] - 2432 ISP2432-based 4Gb Fibre Channel to PCI Express HBA - 2532 ISP2532-based 8Gb Fibre Channel to PCI Express HBA - 3022 ISP4022-based Ethernet NIC - 3032 ISP4032-based Ethernet IPv6 NIC - 4010 ISP4010-based iSCSI TOE HBA - 4022 ISP4022-based iSCSI TOE HBA - 4032 ISP4032-based iSCSI TOE IPv6 HBA - 5432 SP232-based 4Gb Fibre Channel to PCI Express HBA - 6312 SP202-based 2Gb Fibre Channel to PCI-X HBA - 6322 SP212-based 2Gb Fibre Channel to PCI-X HBA - 7220 IBA7220 InfiniBand HCA - 7322 IBA7322 QDR InfiniBand HCA - 8000 10GbE Converged Network Adapter (TCP/IP Networking) - 8001 10GbE Converged Network Adapter (FCoE) - 8432 ISP2432M-based 10GbE Converged Network Adapter (CNA) -1078 Cyrix Corporation - 0000 5510 [Grappa] - 0001 PCI Master - 0002 5520 [Cognac] - 0100 5530 Legacy [Kahlua] - 0101 5530 SMI [Kahlua] - 0102 5530 IDE [Kahlua] - 0103 5530 Audio [Kahlua] - 0104 5530 Video [Kahlua] - 0400 ZFMicro PCI Bridge - 0401 ZFMicro Chipset SMI - 0402 ZFMicro Chipset IDE - 0403 ZFMicro Expansion Bus -1079 I-Bus -107a NetWorth -107b Gateway 2000 -107c LG Electronics [Lucky Goldstar Co. Ltd] -107d LeadTek Research Inc. - 0000 P86C850 - 204d [GeForce 7800 GTX] Winfast PX7800 GTX TDH - 2134 WinFast 3D S320 II - 2971 [GeForce FX 5900] WinFast A350 TDH MyViVo - 6609 Winfast TV 2000 XP RM - 6654 Conexant CX23883 [WinFast DTV1800 H] -107e Interphase Corporation - 0001 5515 ATM Adapter [Flipper] - 0002 100 VG AnyLan Controller - 0004 5526 Fibre Channel Host Adapter - 0005 x526 Fibre Channel Host Adapter - 0008 5525/5575 ATM Adapter (155 Mbit) [Atlantic] - 9003 5535-4P-BRI-ST - 9007 5535-4P-BRI-U - 9008 5535-1P-SR - 900c 5535-1P-SR-ST - 900e 5535-1P-SR-U - 9011 5535-1P-PRI - 9013 5535-2P-PRI - 9023 5536-4P-BRI-ST - 9027 5536-4P-BRI-U - 9031 5536-1P-PRI - 9033 5536-2P-PRI -107f Data Technology Corporation - 0802 SL82C105 -1080 Contaq Microsystems - 0600 82C599 - c691 Cypress CY82C691 - c693 82c693 -1081 Supermac Technology - 0d47 Radius PCI to NuBUS Bridge -1082 EFA Corporation of America -1083 Forex Computer Corporation - 0001 FR710 -1084 Parador -1085 Tulip Computers Int.B.V. -1086 J. Bond Computer Systems -1087 Cache Computer -1088 Microcomputer Systems (M) Son -1089 Data General Corporation -# Formerly Bit3 Computer Corp. -108a SBS Technologies - 0001 VME Bridge Model 617 - 0010 VME Bridge Model 618 - 0040 dataBLIZZARD - 3000 VME Bridge Model 2706 -108c Oakleigh Systems Inc. -108d Olicom - 0001 Token-Ring 16/4 PCI Adapter (3136/3137) - 0002 16/4 Token Ring - 0004 RapidFire 3139 Token-Ring 16/4 PCI Adapter - 108d 0004 OC-3139/3140 RapidFire Token-Ring 16/4 Adapter - 0005 GoCard 3250 Token-Ring 16/4 CardBus PC Card - 0006 OC-3530 RapidFire Token-Ring 100 - 0007 RapidFire 3141 Token-Ring 16/4 PCI Fiber Adapter - 108d 0007 OC-3141 RapidFire Token-Ring 16/4 Adapter - 0008 RapidFire 3540 HSTR 100/16/4 PCI Adapter - 108d 0008 OC-3540 RapidFire HSTR 100/16/4 Adapter - 0011 OC-2315 - 0012 OC-2325 - 0013 OC-2183/2185 - 0014 OC-2326 - 0019 OC-2327/2250 10/100 Ethernet Adapter - 108d 0016 OC-2327 Rapidfire 10/100 Ethernet Adapter - 108d 0017 OC-2250 GoCard 10/100 Ethernet Adapter - 0021 OC-6151/6152 [RapidFire ATM 155] - 0022 ATM Adapter -108e Sun Microsystems Computer Corp. - 0001 EBUS - 1000 EBUS - 1001 Happy Meal 10/100 Ethernet [hme] - 1100 RIO EBUS - 108e 1100 RIO EBUS on Blade 100 motherboard -# Correction - 1101 RIO 10/100 Ethernet [eri] - 108e 1101 RIO GEM on Blade 100 motherboard - 1102 RIO 1394 - 108e 1102 RIO 1394 on Blade 100 motherboard - 1103 RIO USB - 108e 1103 RIO USB on Blade 100 motherboard - 1647 Broadcom 570x 10/100/1000 Ethernet [bge] - 1648 Broadcom 570x 10/100/1000 Ethernet [bge] - 16a7 Broadcom 570x 10/100/1000 Ethernet [bge] - 16a8 Broadcom 570x 10/100/1000 Ethernet [bge] - 2bad GEM 10/100/1000 Ethernet [ge] - 5000 Simba Advanced PCI Bridge - 108e 5000 Netra AX1105-500 - 5043 SunPCI Co-processor - 5ca0 Crypto Accelerator 6000 [mca] - 6300 Intel 21554 PCI-PCI bus bridge [db21554] - 6301 Intel 21554 PCI-PCI bus bridge [db21554] - 6302 Intel 21554 PCI-PCI bus bridge [db21554] - 6303 Intel 21554 PCI-PCI bus bridge [db21554] - 6310 Intel 21554 PCI-PCI bus bridge [db21554] - 6311 Intel 21554 PCI-PCI bus bridge [db21554] - 6312 Intel 21554 PCI-PCI bus bridge [db21554] - 6313 Intel 21554 PCI-PCI bus bridge [db21554] - 6320 Intel 21554 PCI-PCI bus bridge [db21554] - 6323 Intel 21554 PCI-PCI bus bridge [db21554] - 6330 Intel 21554 PCI-PCI bus bridge [db21554] - 6331 Intel 21554 PCI-PCI bus bridge [db21554] - 6332 Intel 21554 PCI-PCI bus bridge [db21554] - 6333 Intel 21554 PCI-PCI bus bridge [db21554] - 6340 Intel 21554 PCI-PCI bus bridge [db21554] - 6343 Intel 21554 PCI-PCI bus bridge [db21554] - 6350 Intel 21554 PCI-PCI bus bridge [db21554] - 6353 Intel 21554 PCI-PCI bus bridge [db21554] - 6722 Intel 21554 PCI-PCI bus bridge [db21554] - 676e SunPCiIII - 7063 SunPCiII / SunPCiIIpro - 8000 Psycho PCI Bus Module - 8001 Schizo PCI Bus Module - 8002 Schizo+ PCI Bus Module - 80f0 PCIe switch [px] - 80f8 PCIe switch [px] - 9010 PCIe/PCI bridge switch [pxb_plx] - 9020 PCIe/PCI bridge switch [pxb_plx] - 9102 Davicom Fast Ethernet driver for Davicom DM9102A [dmfe] - a000 Psycho UPA-PCI Bus Module [pcipsy] - a001 Psycho UPA-PCI Bus Module [pcipsy] - 108e a001 Ultra IIe on Blade 100 motherboard - a801 Schizo Fireplane-PCI bus bridge module [pcisch] - abba Cassini 10/100/1000 - abcd Multithreaded 10-Gigabit Ethernet Network Controller - c416 Sun Fire System/System Controller Interface chip [sbbc] -108f Systemsoft -1090 Compro Computer Services, Inc. - 4610 PCI RTOM - 4620 GPIO HSD -1091 Intergraph Corporation - 0020 3D graphics processor - 0021 3D graphics processor w/Texturing - 0040 3D graphics frame buffer - 0041 3D graphics frame buffer - 0060 Proprietary bus bridge - 00e4 Powerstorm 4D50T - 0720 Motion JPEG codec - 0780 Intense3D Wildcat 3410 (MSMT496) - 07a0 Sun Expert3D-Lite Graphics Accelerator - 1091 Sun Expert3D Graphics Accelerator -1092 Diamond Multimedia Systems - 0028 Viper V770 - 1092 4a00 Viper V770 32MB - 00a0 Speedstar Pro SE - 00a8 Speedstar 64 - 0550 Viper V550 - 08d4 Supra 2260 Modem - 094c SupraExpress 56i Pro - 1001 Video Crunch It 1001 capture card - 1092 Viper V330 - 6120 Maximum DVD - 8810 Stealth SE - 8811 Stealth 64/SE - 8880 Stealth - 8881 Stealth - 88b0 Stealth 64 - 88b1 Stealth 64 - 88c0 Stealth 64 - 88c1 Stealth 64 - 88d0 Stealth 64 - 88d1 Stealth 64 - 88f0 Stealth 64 - 88f1 Stealth 64 - 9999 DMD-I0928-1 "Monster sound" sound chip -1093 National Instruments - 0160 PCI-DIO-96 - 0162 PCI-MIO-16XE-50 - 1150 PCI-DIO-32HS High Speed Digital I/O Board - 1170 PCI-MIO-16XE-10 - 1180 PCI-MIO-16E-1 - 1190 PCI-MIO-16E-4 - 1310 PCI-6602 - 1330 PCI-6031E - 1350 PCI-6071E - 14e0 PCI-6110 - 14f0 PCI-6111 - 17d0 PCI-6503 - 1870 PCI-6713 - 1880 PCI-6711 - 18b0 PCI-6052E - 2410 PCI-6733 - 2890 PCI-6036E - 2a60 PCI-6023E - 2a70 PCI-6024E - 2a80 PCI-6025E - 2c80 PCI-6035E - 2ca0 PCI-6034E - 70a9 PCI-6528 (Digital I/O at 60V) - 70b8 PCI-6251 [M Series - High Speed Multifunction DAQ] - 7144 PXI-5124 (12-bit 200 MS/s Digitizer) - b001 IMAQ-PCI-1408 - b011 IMAQ-PXI-1408 - b021 IMAQ-PCI-1424 - b031 IMAQ-PCI-1413 - b041 IMAQ-PCI-1407 - b051 IMAQ-PXI-1407 - b061 IMAQ-PCI-1411 - b071 IMAQ-PCI-1422 - b081 IMAQ-PXI-1422 - b091 IMAQ-PXI-1411 - c801 PCI-GPIB - c831 PCI-GPIB bridge -1094 First International Computers [FIC] -# nee CMD Technology Inc -1095 Silicon Image, Inc. - 0240 Adaptec AAR-1210SA SATA HostRAID Controller - 0640 PCI0640 - 0643 PCI0643 - 0646 PCI0646 - 0647 PCI0647 - 0648 PCI0648 - 1043 8025 CUBX motherboard - 0649 SiI 0649 Ultra ATA/100 PCI to ATA Host Controller - 0e11 005d Integrated Ultra ATA-100 Dual Channel Controller - 0e11 007e Integrated Ultra ATA-100 IDE RAID Controller - 101e 0649 AMI MegaRAID IDE 100 Controller - 0650 PBC0650A - 0670 USB0670 - 1095 0670 USB0670 - 0673 USB0673 - 0680 PCI0680 Ultra ATA-133 Host Controller - 1095 0680 SiI 0680 ATA/133 Controller - 1095 3680 Winic W-680 (Silicon Image 680 based) - 3112 SiI 3112 [SATALink/SATARaid] Serial ATA Controller - 1095 3112 SiI 3112 SATALink Controller - 1095 6112 SiI 3112 SATARaid Controller - 9005 0250 SATAConnect 1205SA Host Controller - 3114 SiI 3114 [SATALink/SATARaid] Serial ATA Controller - 1095 3114 SiI 3114 SATALink Controller - 1095 6114 SiI 3114 SATARaid Controller - 3124 SiI 3124 PCI-X Serial ATA Controller - 1095 3124 SiI 3124 PCI-X Serial ATA Controller - 3132 SiI 3132 Serial ATA Raid II Controller - 3512 SiI 3512 [SATALink/SATARaid] Serial ATA Controller - 1095 3512 SiI 3512 SATALink Controller - 1095 6512 SiI 3512 SATARaid Controller - 3531 Sil 3531 [SATALink/SATARaid] Serial ATA Controller -1096 Alacron -1097 Appian Technology -1098 Quantum Designs (H.K.) Ltd - 0001 QD-8500 - 0002 QD-8580 -1099 Samsung Electronics Co., Ltd -109a Packard Bell -109b Gemlight Computer Ltd. -109c Megachips Corporation -109d Zida Technologies Ltd. -109e Brooktree Corporation - 032e Bt878 Video Capture - 0350 Bt848 Video Capture - 0351 Bt849A Video capture - 0369 Bt878 Video Capture - 1002 0001 TV-Wonder - 1002 0003 TV-Wonder/VE - 036c Bt879(??) Video Capture - 13e9 0070 Win/TV (Video Section) - 036e Bt878 Video Capture - 0070 13eb WinTV Series - 0070 ff01 Viewcast Osprey 200 - 0071 0101 DigiTV PCI - 107d 6606 WinFast TV 2000 - 11bd 0012 PCTV pro (TV + FM stereo receiver) - 11bd 001c PCTV Sat (DBC receiver) - 127a 0001 Bt878 Mediastream Controller NTSC - 127a 0002 Bt878 Mediastream Controller PAL BG - 127a 0003 Bt878a Mediastream Controller PAL BG - 127a 0048 Bt878/832 Mediastream Controller - 144f 3000 MagicTView CPH060 - Video - 1461 0002 TV98 Series (TV/No FM/Remote) - 1461 0003 AverMedia UltraTV PCI 350 - 1461 0004 AVerTV WDM Video Capture - 1461 0761 AverTV DVB-T - 1461 0771 AverMedia AVerTV DVB-T 771 - 14f1 0001 Bt878 Mediastream Controller NTSC - 14f1 0002 Bt878 Mediastream Controller PAL BG - 14f1 0003 Bt878a Mediastream Controller PAL BG - 14f1 0048 Bt878/832 Mediastream Controller - 1822 0001 VisionPlus DVB card - 1851 1850 FlyVideo'98 - Video - 1851 1851 FlyVideo II - 1852 1852 FlyVideo'98 - Video (with FM Tuner) - 18ac d500 DViCO FusionHDTV5 Lite - 270f fc00 Digitop DTT-1000 - bd11 1200 PCTV pro (TV + FM stereo receiver) - 036f Bt879 Video Capture - 127a 0044 Bt879 Video Capture NTSC - 127a 0122 Bt879 Video Capture PAL I - 127a 0144 Bt879 Video Capture NTSC - 127a 0222 Bt879 Video Capture PAL BG - 127a 0244 Bt879a Video Capture NTSC - 127a 0322 Bt879 Video Capture NTSC - 127a 0422 Bt879 Video Capture NTSC - 127a 1122 Bt879 Video Capture PAL I - 127a 1222 Bt879 Video Capture PAL BG - 127a 1322 Bt879 Video Capture NTSC - 127a 1522 Bt879a Video Capture PAL I - 127a 1622 Bt879a Video Capture PAL BG - 127a 1722 Bt879a Video Capture NTSC - 14f1 0044 Bt879 Video Capture NTSC - 14f1 0122 Bt879 Video Capture PAL I - 14f1 0144 Bt879 Video Capture NTSC - 14f1 0222 Bt879 Video Capture PAL BG - 14f1 0244 Bt879a Video Capture NTSC - 14f1 0322 Bt879 Video Capture NTSC - 14f1 0422 Bt879 Video Capture NTSC - 14f1 1122 Bt879 Video Capture PAL I - 14f1 1222 Bt879 Video Capture PAL BG - 14f1 1322 Bt879 Video Capture NTSC - 14f1 1522 Bt879a Video Capture PAL I - 14f1 1622 Bt879a Video Capture PAL BG - 14f1 1722 Bt879a Video Capture NTSC - 1851 1850 FlyVideo'98 - Video - 1851 1851 FlyVideo II - 1852 1852 FlyVideo'98 - Video (with FM Tuner) - 0370 Bt880 Video Capture - 1851 1850 FlyVideo'98 - 1851 1851 FlyVideo'98 EZ - video - 1852 1852 FlyVideo'98 (with FM Tuner) - 0878 Bt878 Audio Capture - 0070 13eb WinTV Series - 0070 ff01 Viewcast Osprey 200 - 0071 0101 DigiTV PCI - 1002 0001 TV-Wonder - 1002 0003 TV-Wonder/VE - 11bd 0012 PCTV pro (TV + FM stereo receiver, audio section) - 11bd 001c PCTV Sat (DBC receiver) - 127a 0001 Bt878 Video Capture (Audio Section) - 127a 0002 Bt878 Video Capture (Audio Section) - 127a 0003 Bt878 Video Capture (Audio Section) - 127a 0048 Bt878 Video Capture (Audio Section) - 13e9 0070 Win/TV (Audio Section) - 144f 3000 MagicTView CPH060 - Audio - 1461 0002 Avermedia PCTV98 Audio Capture - 1461 0003 UltraTV PCI 350 - 1461 0004 AVerTV WDM Audio Capture - 1461 0761 AVerTV DVB-T - 1461 0771 AverMedia AVerTV DVB-T 771 - 14f1 0001 Bt878 Video Capture (Audio Section) - 14f1 0002 Bt878 Video Capture (Audio Section) - 14f1 0003 Bt878 Video Capture (Audio Section) - 14f1 0048 Bt878 Video Capture (Audio Section) - 1822 0001 VisionPlus DVB Card - 18ac d500 DViCO FusionHDTV5 Lite - 270f fc00 Digitop DTT-1000 - bd11 1200 PCTV pro (TV + FM stereo receiver, audio section) - 0879 Bt879 Audio Capture - 127a 0044 Bt879 Video Capture (Audio Section) - 127a 0122 Bt879 Video Capture (Audio Section) - 127a 0144 Bt879 Video Capture (Audio Section) - 127a 0222 Bt879 Video Capture (Audio Section) - 127a 0244 Bt879 Video Capture (Audio Section) - 127a 0322 Bt879 Video Capture (Audio Section) - 127a 0422 Bt879 Video Capture (Audio Section) - 127a 1122 Bt879 Video Capture (Audio Section) - 127a 1222 Bt879 Video Capture (Audio Section) - 127a 1322 Bt879 Video Capture (Audio Section) - 127a 1522 Bt879 Video Capture (Audio Section) - 127a 1622 Bt879 Video Capture (Audio Section) - 127a 1722 Bt879 Video Capture (Audio Section) - 14f1 0044 Bt879 Video Capture (Audio Section) - 14f1 0122 Bt879 Video Capture (Audio Section) - 14f1 0144 Bt879 Video Capture (Audio Section) - 14f1 0222 Bt879 Video Capture (Audio Section) - 14f1 0244 Bt879 Video Capture (Audio Section) - 14f1 0322 Bt879 Video Capture (Audio Section) - 14f1 0422 Bt879 Video Capture (Audio Section) - 14f1 1122 Bt879 Video Capture (Audio Section) - 14f1 1222 Bt879 Video Capture (Audio Section) - 14f1 1322 Bt879 Video Capture (Audio Section) - 14f1 1522 Bt879 Video Capture (Audio Section) - 14f1 1622 Bt879 Video Capture (Audio Section) - 14f1 1722 Bt879 Video Capture (Audio Section) - 0880 Bt880 Audio Capture - 2115 BtV 2115 Mediastream controller - 2125 BtV 2125 Mediastream controller - 2164 BtV 2164 - 2165 BtV 2165 - 8230 Bt8230 ATM Segment/Reassembly Ctrlr (SRC) - 8472 Bt8472 - 8474 Bt8474 -109f Trigem Computer Inc. -10a0 Meidensha Corporation -10a1 Juko Electronics Ind. Co. Ltd -10a2 Quantum Corporation -10a3 Everex Systems Inc -10a4 Globe Manufacturing Sales -10a5 Smart Link Ltd. - 3052 SmartPCI562 56K Modem - 5449 SmartPCI561 modem -10a6 Informtech Industrial Ltd. -10a7 Benchmarq Microelectronics -10a8 Sierra Semiconductor - 0000 STB Horizon 64 -10a9 Silicon Graphics, Inc. - 0001 Crosstalk to PCI Bridge - 0002 Linc I/O controller - 0003 IOC3 I/O controller - 0004 O2 MACE - 0005 RAD Audio - 0006 HPCEX - 0007 RPCEX - 0008 DiVO VIP - 0009 AceNIC Gigabit Ethernet - 10a9 8002 AceNIC Gigabit Ethernet - 0010 AMP Video I/O - 0011 GRIP - 0012 SGH PSHAC GSN - 0208 SSIM1 SAS Adapter - 1001 Magic Carpet - 1002 Lithium - 1003 Dual JPEG 1 - 1004 Dual JPEG 2 - 1005 Dual JPEG 3 - 1006 Dual JPEG 4 - 1007 Dual JPEG 5 - 1008 Cesium - 100a IOC4 I/O controller - 1504 SSIM1 Fibre Channel Adapter - 2001 Fibre Channel - 2002 ASDE - 4001 TIO-CE PCI Express Bridge - 4002 TIO-CE PCI Express Port - 8001 O2 1394 - 8002 G-net NT - 8010 Broadcom e-net [SGI IO9/IO10 BaseIO] - 8018 Broadcom e-net [SGI A330 Server BaseIO] -10aa ACC Microelectronics - 0000 ACCM 2188 - 2051 2051 CPU bridge - 5842 2051 ISA bridge -10ab Digicom -10ac Honeywell IAC -10ad Symphony Labs - 0001 W83769F - 0003 SL82C103 - 0005 SL82C105 - 0103 SL82c103 - 0105 SL82c105 - 0565 W83C553F/W83C554F -10ae Cornerstone Technology -10af Micro Computer Systems Inc -10b0 CardExpert Technology -10b1 Cabletron Systems Inc -10b2 Raytheon Company -10b3 Databook Inc - 3106 DB87144 - b106 DB87144 -10b4 STB Systems Inc - 1b1d Velocity 128 3D - 10b4 237e Velocity 4400 -10b5 PLX Technology, Inc. - 0001 i960 PCI bus interface - 1024 Acromag, Inc. IndustryPack Carrier Card - 1042 Brandywine / jxi2, Inc. - PMC-SyncClock32, IRIG A & B, Nasa 36 - 106a Dual OX16C952 4 port serial adapter [Megawolf Romulus/4] - 1076 VScom 800 8 port serial adaptor - 1077 VScom 400 4 port serial adaptor - 1078 VScom 210 2 port serial and 1 port parallel adaptor - 1103 VScom 200 2 port serial adaptor - 1146 VScom 010 1 port parallel adaptor - 1147 VScom 020 2 port parallel adaptor - 2540 IXXAT CAN-Interface PC-I 04/PCI - 2724 Thales PCSM Security Card - 6140 PCI6140 32-bit 33MHz PCI-to-PCI Bridge - 6150 PCI6150 32-bit 33MHz PCI-to-PCI Bridge - 6152 PCI6152 32-bit 66MHz PCI-to-PCI Bridge - 6154 PCI6154 64-bit 66MHz PCI-to-PCI Bridge - 6254 PCI6254 64-bit 66MHz PCI-to-PCI Bridge - 6466 PCI6466 64-bit 66MHz PCI-to-PCI Bridge - 6520 PCI6520 64-bit 133MHz PCI-X-to-PCI-X Bridge - 6540 PCI6540 64-bit 133MHz PCI-X-to-PCI-X Bridge - 1775 1100 CR11 Single Board Computer - 4c53 10e0 PSL09 PrPMC - 6541 PCI6540/6466 PCI-PCI bridge (non-transparent mode, primary side) - 1775 1100 CR11 Single Board Computer - 4c53 10e0 PSL09 PrPMC - 6542 PCI6540/6466 PCI-PCI bridge (non-transparent mode, secondary side) - 1775 1100 CR11 Single Board Computer - 4c53 10e0 PSL09 PrPMC - 8111 PEX 8111 PCI Express-to-PCI Bridge - 8112 PEX8112 x1 Lane PCI Express-to-PCI Bridge - 8114 PEX 8114 PCI Express-to-PCI/PCI-X Bridge - 8311 PEX8311 x1 Lane PCI Express-to-Generic Local Bus Bridge - 8505 PEX 8505 5-lane, 5-port PCI Express Switch - 8508 PEX 8508 8-lane, 5-port PCI Express Switch - 8509 PEX 8509 8-lane, 8-port PCI Express Switch - 8512 PEX 8512 12-lane, 5-port PCI Express Switch - 8516 PEX 8516 Versatile PCI Express Switch - 8517 PEX 8517 16-lane, 5-port PCI Express Switch - 8518 PEX 8518 16-lane, 5-port PCI Express Switch - 8524 PEX 8524 24-lane, 6-port PCI Express Switch - 8525 PEX 8525 24-lane, 5-port PCI Express Switch - 8532 PEX 8532 Versatile PCI Express Switch - 8533 PEX 8533 32-lane, 6-port PCI Express Switch - 8547 PEX 8547 48-lane, 3-port PCI Express Switch - 8548 PEX 8548 48-lane, 9-port PCI Express Switch - 8647 PEX 8647 48-Lane, 3-Port PCI Express Gen 2 (5.0 GT/s) Switch - 9030 PCI9030 32-bit 33MHz PCI <-> IOBus Bridge - 10b5 2695 Hilscher CIF50-PB Profibus Master Board - 10b5 2862 Alpermann+Velte PCL PCI LV (3V/5V): Timecode Reader Board - 10b5 2906 Alpermann+Velte PCI TS (3V/5V): Time Synchronisation Board - 10b5 2940 Alpermann+Velte PCL PCI D (3V/5V): Timecode Reader Board - 10b5 2977 IXXAT iPC-I XC16/PCI CAN Board - 10b5 2978 SH ARC-PCIu SOHARD ARCNET card - 10b5 3025 Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board - 10b5 3068 Alpermann+Velte PCL PCI HD (3V/5V): Timecode Reader Board - 12fe 0111 CPCI-ASIO4 (ESD 4-port Serial Interface Board) - 1369 9c01 VX222v2 - 1369 9d01 VX222-Mic - 1369 9d02 VX222-Mic - 1369 9e01 PCX924v2 - 1369 9f01 PCX924-Mic - 1369 9f02 PCX924-Mic - 1369 a001 PCX22v2 - 1369 a701 LCM220v2 - 1369 a801 LCM200 - 1397 3136 4xS0-ISDN PCI Adapter - 1397 3137 S2M-E1-ISDN PCI Adapter - 1518 0200 Kontron ThinkIO-C - 15ed 1002 MCCS 8-port Serial Hot Swap - 15ed 1003 MCCS 16-port Serial Hot Swap - 9036 9036 - 9050 PCI <-> IOBus Bridge - 10b5 1067 IXXAT CAN i165 - 10b5 114e Wasco WITIO PCI168extended - 10b5 1169 Wasco OPTOIO32standard 32 digital in, 32 digital out - 10b5 1172 IK220 (Heidenhain) - 10b5 2036 SatPak GPS - 10b5 2221 Alpermann+Velte PCL PCI LV: Timecode Reader Board - 10b5 2273 SH ARC-PCI SOHARD ARCNET card - 10b5 2431 Alpermann+Velte PCL PCI D: Timecode Reader Board - 10b5 2905 Alpermann+Velte PCI TS: Time Synchronisation Board - 10b5 3196 Goramo PLX200SYN sync serial card - 10b5 9050 PCI-I04 PCI Passive PC/CAN Interface - 1369 8901 PCX11+ PCI - 1369 8f01 VX222 - 1369 9401 PCX924 - 1369 9501 PCX22 - 1498 0362 TPMC866 8 Channel Serial Card - 1522 0001 RockForce 4 Port V.90 Data/Fax/Voice Modem - 1522 0002 RockForce 2 Port V.90 Data/Fax/Voice Modem - 1522 0003 RockForce 6 Port V.90 Data/Fax/Voice Modem - 1522 0004 RockForce 8 Port V.90 Data/Fax/Voice Modem - 1522 0010 RockForce2000 4 Port V.90 Data/Fax/Voice Modem - 1522 0020 RockForce2000 2 Port V.90 Data/Fax/Voice Modem - 15ed 1000 Macrolink MCCS 8-port Serial - 15ed 1001 Macrolink MCCS 16-port Serial - 15ed 1002 Macrolink MCCS 8-port Serial Hot Swap - 15ed 1003 Macrolink MCCS 16-port Serial Hot Swap - 5654 2036 OpenSwitch 6 Telephony card - 5654 3132 OpenSwitch 12 Telephony card - 5654 5634 OpenLine4 Telephony Card - d531 c002 PCIntelliCAN 2xSJA1000 CAN bus - d84d 4006 EX-4006 1P - d84d 4008 EX-4008 1P EPP/ECP - d84d 4014 EX-4014 2P - d84d 4018 EX-4018 3P EPP/ECP - d84d 4025 EX-4025 1S(16C550) RS-232 - d84d 4027 EX-4027 1S(16C650) RS-232 - d84d 4028 EX-4028 1S(16C850) RS-232 - d84d 4036 EX-4036 2S(16C650) RS-232 - d84d 4037 EX-4037 2S(16C650) RS-232 - d84d 4038 EX-4038 2S(16C850) RS-232 - d84d 4052 EX-4052 1S(16C550) RS-422/485 - d84d 4053 EX-4053 2S(16C550) RS-422/485 - d84d 4055 EX-4055 4S(16C550) RS-232 - d84d 4058 EX-4055 4S(16C650) RS-232 - d84d 4065 EX-4065 8S(16C550) RS-232 - d84d 4068 EX-4068 8S(16C650) RS-232 - d84d 4078 EX-4078 2S(16C552) RS-232+1P - 9052 PCI9052 PCI <-> IOBus Bridge - 9054 PCI9054 32-bit 33MHz PCI <-> IOBus Bridge - 10b5 2455 Wessex Techology PHIL-PCI - 10b5 2696 Innes Corp AM Radcap card - 10b5 2717 Innes Corp Auricon card - 10b5 2844 Innes Corp TVS Encoder card - 12c7 4001 Intel Dialogic DM/V960-4T1 PCI - 12d9 0002 PCI Prosody Card rev 1.5 - 14b4 d100 Dektec DTA-100 - 14b4 d114 Dektec DTA-120 - 16df 0011 PIKA PrimeNet MM PCI - 16df 0012 PIKA PrimeNet MM cPCI 8 - 16df 0013 PIKA PrimeNet MM cPCI 8 (without CAS Signaling) - 16df 0014 PIKA PrimeNet MM cPCI 4 - 16df 0015 PIKA Daytona MM - 16df 0016 PIKA InLine MM - 9056 PCI9056 32-bit 66MHz PCI <-> IOBus Bridge - 10b5 2979 CellinkBlade 11 - CPCI board VoATM AAL1 - 10b5 3352 Alpermann+Velte PCL PCIe HD: Timecode Reader Board - 10b5 3353 Alpermann+Velte PCL PCIe D: Timecode Reader Board - 10b5 3354 Alpermann+Velte PCL PCIe LV: Timecode Reader Board - 10b5 3355 Alpermann+Velte PCL PCIe L: Timecode Reader Board - 10b5 3415 Alpermann+Velte PCIe TS: Time Synchronisation Board - 1369 c001 LX6464ES - 1369 c201 LX1616ES - 14b4 d140 Dektec DTA-140 - 9060 PCI9060 32-bit 33MHz PCI <-> IOBus Bridge - 906d 9060SD - 125c 0640 Aries 16000P - 906e 9060ES - 9080 PCI9080 32-bit; 33MHz PCI <-> IOBus Bridge - 103c 10eb (Agilent) E2777B 83K Series Optical Communication Interface - 103c 10ec (Agilent) E6978-66442 PCI CIC - 10b5 1123 Sectra KK631 encryption board - 10b5 9080 9080 [real subsystem ID not set] - 12d9 0002 PCI Prosody Card - 12df 4422 4422PCI ["Do-All" Telemetry Data Aquisition System] - 1369 9601 PCX822np - 1369 a102 PCX822v2 - 1369 a201 PCX442 - 1369 a301 LCM440v2 - 1369 a401 VX822 - 1369 a402 VX822v2 - 1369 a901 LCM420 - 1369 aa01 VX820v2 - 1517 000b ECSG-1R3ADC-PMC Clock synthesizer - 9656 PCI9656 PCI <-> IOBus Bridge - 1517 000f ECDR-GC314-PMC Receiver - 1885 0700 Tsunami FPGA PMC with Altera Stratix S40 - 1885 0701 Tsunami FPGA PMC with Altera Stratix S30 - a100 Blackmagic Design DeckLink - bb04 B&B 3PCIOSD1A Isolated PCI Serial - c001 CronyxOmega-PCI (8-port RS232) -10b6 Madge Networks - 0001 Smart 16/4 PCI Ringnode - 0002 Smart 16/4 PCI Ringnode Mk2 - 10b6 0002 Smart 16/4 PCI Ringnode Mk2 - 10b6 0006 16/4 CardBus Adapter - 0003 Smart 16/4 PCI Ringnode Mk3 - 0e11 b0fd Compaq NC4621 PCI, 4/16, WOL - 10b6 0003 Smart 16/4 PCI Ringnode Mk3 - 10b6 0007 Presto PCI Plus Adapter - 0004 Smart 16/4 PCI Ringnode Mk1 - 0006 16/4 Cardbus Adapter - 10b6 0006 16/4 CardBus Adapter - 0007 Presto PCI Adapter - 10b6 0007 Presto PCI - 0009 Smart 100/16/4 PCI-HS Ringnode - 10b6 0009 Smart 100/16/4 PCI-HS Ringnode - 000a Smart 100/16/4 PCI Ringnode - 10b6 000a Smart 100/16/4 PCI Ringnode - 000b 16/4 CardBus Adapter Mk2 - 10b6 0008 16/4 CardBus Adapter Mk2 - 10b6 000b 16/4 Cardbus Adapter Mk2 - 000c RapidFire 3140V2 16/4 TR Adapter - 10b6 000c RapidFire 3140V2 16/4 TR Adapter - 1000 Collage 25/155 ATM Client Adapter - 1001 Collage 155 ATM Server Adapter -10b7 3Com Corporation - 0001 3c985 1000BaseSX (SX/TX) - 0013 AR5212 802.11abg NIC (3CRDAG675) - 10b7 2031 3CRDAG675 11a/b/g Wireless PCI Adapter - 0910 3C910-A01 - 1006 MINI PCI type 3B Data Fax Modem - 1007 Mini PCI 56k Winmodem - 10b7 615b Mini PCI 56K Modem - 10b7 615c Mini PCI 56K Modem - 1201 3c982-TXM 10/100baseTX Dual Port A [Hydra] - 1202 3c982-TXM 10/100baseTX Dual Port B [Hydra] - 1700 3c940 10/100/1000Base-T [Marvell] - 1043 80eb A7V600/P4P800/K8V motherboard - 10b7 0010 3C940 Gigabit LOM Ethernet Adapter - 10b7 0020 3C941 Gigabit LOM Ethernet Adapter - 147b 1407 KV8-MAX3 motherboard - 3390 3c339 TokenLink Velocity - 3590 3c359 TokenLink Velocity XL - 10b7 3590 TokenLink Velocity XL Adapter (3C359/359B) - 4500 3c450 HomePNA [Tornado] - 5055 3c555 Laptop Hurricane - 5057 3c575 Megahertz 10/100 LAN CardBus [Boomerang] - 10b7 5a57 3C575 Megahertz 10/100 LAN Cardbus PC Card - 5157 3cCFE575BT Megahertz 10/100 LAN CardBus [Cyclone] - 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card - 5257 3cCFE575CT CardBus [Cyclone] - 10b7 5c57 FE575C-3Com 10/100 LAN CardBus-Fast Ethernet - 5900 3c590 10BaseT [Vortex] - 5920 3c592 EISA 10mbps Demon/Vortex - 5950 3c595 100BaseTX [Vortex] - 5951 3c595 100BaseT4 [Vortex] - 5952 3c595 100Base-MII [Vortex] - 5970 3c597 EISA Fast Demon/Vortex - 5b57 3c595 Megahertz 10/100 LAN CardBus [Boomerang] - 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card - 6000 3CRSHPW796 [OfficeConnect Wireless CardBus] - 6001 3com 3CRWE154G72 [Office Connect Wireless LAN Adapter] - 6055 3c556 Hurricane CardBus [Cyclone] - 6056 3c556B CardBus [Tornado] - 10b7 6556 10/100 Mini PCI Ethernet Adapter - 6560 3cCFE656 CardBus [Cyclone] - 10b7 656a 3CCFEM656 10/100 LAN+56K Modem CardBus - 6561 3cCFEM656 10/100 LAN+56K Modem CardBus - 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus - 6562 3cCFEM656B 10/100 LAN+Winmodem CardBus [Cyclone] - 10b7 656b 3CCFEM656B 10/100 LAN+56K Modem CardBus - 6563 3cCFEM656B 10/100 LAN+56K Modem CardBus - 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus - 6564 3cXFEM656C 10/100 LAN+Winmodem CardBus [Tornado] - 7646 3cSOHO100-TX Hurricane - 7770 3CRWE777 PCI(PLX) Wireless Adaptor [Airconnect] - 7940 3c803 FDDILink UTP Controller - 7980 3c804 FDDILink SAS Controller - 7990 3c805 FDDILink DAS Controller - 80eb 3c940B 10/100/1000Base-T - 8811 Token ring - 9000 3c900 10BaseT [Boomerang] - 9001 3c900 10Mbps Combo [Boomerang] - 9004 3c900B-TPO Etherlink XL [Cyclone] - 10b7 9004 3C900B-TPO Etherlink XL TPO 10Mb - 9005 3c900B-Combo Etherlink XL [Cyclone] - 10b7 9005 3C900B-Combo Etherlink XL Combo - 9006 3c900B-TPC Etherlink XL [Cyclone] - 900a 3c900B-FL 10base-FL [Cyclone] - 9050 3c905 100BaseTX [Boomerang] - 9051 3c905 100BaseT4 [Boomerang] - 9054 3C905B-TX Fast Etherlink XL PCI - 10b7 9054 3C905B-TX Fast Etherlink XL PCI - 9055 3c905B 100BaseTX [Cyclone] - 1028 0080 3C905B Fast Etherlink XL 10/100 - 1028 0081 3C905B Fast Etherlink XL 10/100 - 1028 0082 3C905B Fast Etherlink XL 10/100 - 1028 0083 3C905B Fast Etherlink XL 10/100 - 1028 0084 3C905B Fast Etherlink XL 10/100 - 1028 0085 3C905B Fast Etherlink XL 10/100 - 1028 0086 3C905B Fast Etherlink XL 10/100 - 1028 0087 3C905B Fast Etherlink XL 10/100 - 1028 0088 3C905B Fast Etherlink XL 10/100 - 1028 0089 3C905B Fast Etherlink XL 10/100 - 1028 0090 3C905B Fast Etherlink XL 10/100 - 1028 0091 3C905B Fast Etherlink XL 10/100 - 1028 0092 3C905B Fast Etherlink XL 10/100 - 1028 0093 3C905B Fast Etherlink XL 10/100 - 1028 0094 3C905B Fast Etherlink XL 10/100 - 1028 0095 3C905B Fast Etherlink XL 10/100 - 1028 0096 3C905B Fast Etherlink XL 10/100 - 1028 0097 3C905B Fast Etherlink XL 10/100 - 1028 0098 3C905B Fast Etherlink XL 10/100 - 1028 0099 3C905B Fast Etherlink XL 10/100 - 10b7 9055 3C905B Fast Etherlink XL 10/100 - 9056 3c905B-T4 Fast EtherLink XL [Cyclone] - 9058 3c905B Deluxe Etherlink 10/100/BNC [Cyclone] - 905a 3c905B-FX Fast Etherlink XL FX 100baseFx [Cyclone] - 9200 3c905C-TX/TX-M [Tornado] - 1028 0095 3C920 Integrated Fast Ethernet Controller - 1028 0097 3C920 Integrated Fast Ethernet Controller - 1028 00b4 OptiPlex GX110 - 1028 00d8 Precision 530 - 1028 00fe Optiplex GX240 - 1028 012a 3C920 Integrated Fast Ethernet Controller [Latitude C640] - 10b7 1000 3C905CX-TX/TX-M Fast Etherlink for PC Management NIC - 10b7 7000 10/100 Mini PCI Ethernet Adapter - 10f1 2466 Tiger MPX S2466 (3C920 Integrated Fast Ethernet Controller) - 144d c005 X10 Laptop - 9201 3C920B-EMB Integrated Fast Ethernet Controller [Tornado] - 1043 80ab A7N8X Deluxe onboard 3C920B-EMB Integrated Fast Ethernet Controller - 9202 3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller - 9210 3C920B-EMB-WNM Integrated Fast Ethernet Controller - 9300 3CSOHO100B-TX 910-A01 [tulip] - 9800 3c980-TX Fast Etherlink XL Server Adapter [Cyclone] - 10b7 9800 3c980-TX Fast Etherlink XL Server Adapter - 9805 3c980-C 10/100baseTX NIC [Python-T] - 10b7 1201 EtherLink Server 10/100 Dual Port A - 10b7 1202 EtherLink Server 10/100 Dual Port B - 10b7 9805 3c980 10/100baseTX NIC [Python-T] - 10f1 2462 Thunder K7 S2462 - 9900 3C990-TX [Typhoon] - 9902 3CR990-TX-95 [Typhoon 56-bit] - 9903 3CR990-TX-97 [Typhoon 168-bit] - 9904 3C990B-TX-M/3C990BSVR [Typhoon2] - 10b7 1000 3CR990B-TX-M [Typhoon2] - 10b7 2000 3CR990BSVR [Typhoon2 Server] - 9905 3CR990-FX-95/97/95 [Typhon Fiber] - 10b7 1101 3CR990-FX-95 [Typhoon Fiber 56-bit] - 10b7 1102 3CR990-FX-97 [Typhoon Fiber 168-bit] - 10b7 2101 3CR990-FX-95 Server [Typhoon Fiber 56-bit] - 10b7 2102 3CR990-FX-97 Server [Typhoon Fiber 168-bit] - 9908 3CR990SVR95 [Typhoon Server 56-bit] - 9909 3CR990SVR97 [Typhoon Server 168-bit] - 990a 3C990SVR [Typhoon Server] - 990b 3C990SVR [Typhoon Server] -10b8 Standard Microsystems Corp [SMC] - 0005 83c170 EPIC/100 Fast Ethernet Adapter - 1055 e000 LANEPIC 10/100 [EVB171Q-PCI] - 1055 e002 LANEPIC 10/100 [EVB171G-PCI] - 10b8 a011 EtherPower II 10/100 - 10b8 a014 EtherPower II 10/100 - 10b8 a015 EtherPower II 10/100 - 10b8 a016 EtherPower II 10/100 - 10b8 a017 EtherPower II 10/100 - 0006 83c175 EPIC/100 Fast Ethernet Adapter - 1055 e100 LANEPIC Cardbus Fast Ethernet Adapter - 1055 e102 LANEPIC Cardbus Fast Ethernet Adapter - 1055 e300 LANEPIC Cardbus Fast Ethernet Adapter - 1055 e302 LANEPIC Cardbus Fast Ethernet Adapter - 10b8 a012 LANEPIC Cardbus Fast Ethernet Adapter - 13a2 8002 LANEPIC Cardbus Fast Ethernet Adapter - 13a2 8006 LANEPIC Cardbus Fast Ethernet Adapter - 1000 FDC 37c665 - 1001 FDC 37C922 - 2802 SMC2802W [EZ Connect g] - a011 83C170QF - b106 SMC34C90 -10b9 ALi Corporation - 0101 CMI8338/C3DX PCI Audio Device - 0111 C-Media CMI8738/C3DX Audio Device (OEM) - 10b9 0111 C-Media CMI8738/C3DX Audio Device (OEM) - 0780 Multi-IO Card - 0782 Multi-IO Card - 1435 M1435 - 1445 M1445 - 1449 M1449 - 1451 M1451 - 1461 M1461 - 1489 M1489 - 1511 M1511 [Aladdin] - 1512 M1512 [Aladdin] - 1513 M1513 [Aladdin] - 1521 M1521 [Aladdin III] - 10b9 1521 ALI M1521 Aladdin III CPU Bridge - 1523 M1523 - 10b9 1523 ALI M1523 ISA Bridge - 1531 M1531 [Aladdin IV] - 1533 M1533/M1535/M1543 PCI to ISA Bridge [Aladdin IV/V/V+] - 1014 053b ThinkPad R40e - 10b9 1533 ALi M1533 Aladdin IV/V ISA Bridge - 1541 M1541 - 10b9 1541 ALI M1541 Aladdin V/V+ AGP System Controller - 1543 M1543 - 1563 M1563 HyperTransport South Bridge - 10b9 1563 ASRock 939Dual-SATA2 Motherboard - 1849 1563 ASRock 939Dual-SATA2 Motherboard - 1573 PCI to LPC Controller - 1575 M1575 South Bridge - 1621 M1621 - 1631 ALI M1631 PCI North Bridge Aladdin Pro III - 1632 M1632M Northbridge+Trident - 1641 ALI M1641 PCI North Bridge Aladdin Pro IV - 1644 M1644/M1644T Northbridge+Trident - 1646 M1646 Northbridge+Trident - 1647 M1647 Northbridge [MAGiK 1 / MobileMAGiK 1] - 1651 M1651/M1651T Northbridge [Aladdin-Pro 5/5M,Aladdin-Pro 5T/5TM] - 1671 M1671 Super P4 Northbridge [AGP4X,PCI and SDR/DDR] - 1672 M1672 Northbridge [CyberALADDiN-P4] - 1681 M1681 P4 Northbridge [AGP8X,HyperTransport and SDR/DDR] - 1687 M1687 K8 Northbridge [AGP8X and HyperTransport] - 1689 M1689 K8 Northbridge [Super K8 Single Chip] - 1695 M1695 K8 Northbridge [PCI Express and HyperTransport] - 1697 M1697 HTT Host Bridge - 3141 M3141 - 3143 M3143 - 3145 M3145 - 3147 M3147 - 3149 M3149 - 3151 M3151 - 3307 M3307 - 3309 M3309 - 3323 M3325 Video/Audio Decoder - 5212 M4803 - 5215 MS4803 - 5217 M5217H - 5219 M5219 - 5225 M5225 - 5228 M5228 ALi ATA/RAID Controller - 5229 M5229 IDE - 1014 050f ThinkPad R30 - 1014 053d ThinkPad R40e - 103c 0024 Pavilion ze4400 builtin IDE - 1043 8053 A7A266 Motherboard IDE - 1849 5229 ASRock 939Dual-SATA2 Motherboard IDE (PATA) - 5235 M5225 - 5237 USB 1.1 Controller - 1014 0540 ThinkPad R40e - 103c 0024 Pavilion ze4400 builtin USB - 104d 810f VAIO PCG-U1 USB/OHCI Revision 1.0 - 10b9 5237 ASRock 939Dual-SATA2 Motherboard - 1849 5237 ASRock 939Dual-SATA2 Motherboard - 5239 USB 2.0 Controller - 10b9 5239 ASRock 939Dual-SATA2 Motherboard - 1849 5239 ASRock 939Dual-SATA2 Motherboard - 5243 M1541 PCI to AGP Controller - 5246 AGP8X Controller - 5247 PCI to AGP Controller - 5249 M5249 HTT to PCI Bridge - 524b PCI Express Root Port - 524c PCI Express Root Port - 524d PCI Express Root Port - 524e PCI Express Root Port - 5251 M5251 P1394 OHCI 1.0 Controller - 5253 M5253 P1394 OHCI 1.1 Controller - 5261 M5261 Ethernet Controller - 5263 ULi 1689,1573 integrated ethernet. - 5281 ALi M5281 Serial ATA / RAID Host Controller - 5287 ULi 5287 SATA - 5288 ULi M5288 SATA - 1043 8056 A8R-MVP Mainboard - 5289 ULi 5289 SATA - 5450 Lucent Technologies Soft Modem AMR - 5451 M5451 PCI AC-Link Controller Audio Device - 1014 0506 ThinkPad R30 - 1014 053e ThinkPad R40e - 103c 0024 Pavilion ze4400 builtin Audio - 5453 M5453 PCI AC-Link Controller Modem Device - 5455 M5455 PCI AC-Link Controller Audio Device - 10b9 5455 ASRock 939Dual-SATA2 Motherboard - 1849 0850 ASRock 939Dual-SATA2 Motherboard - 5457 M5457 AC'97 Modem Controller - 1014 0535 ThinkPad R40e - 103c 0024 Pavilion ze4400 builtin Modem Device - 5459 SmartLink SmartPCI561 56K Modem - 545a SmartLink SmartPCI563 56K Modem - 5461 High Definition Audio/AC'97 Host Controller - 5471 M5471 Memory Stick Controller - 5473 M5473 SD-MMC Controller - 7101 M7101 Power Management Controller [PMU] - 1014 0510 ThinkPad R30 - 1014 053c ThinkPad R40e - 103c 0024 Pavilion ze4400 - 1849 7101 ASRock 939Dual-SATA2 Motherboard -10ba Mitsubishi Electric Corp. - 0301 AccelGraphics AccelECLIPSE - 0304 AccelGALAXY A2100 [OEM Evans & Sutherland] - 0308 Tornado 3000 [OEM Evans & Sutherland] - 10dd 0024 Tornado 3000 - 1002 VG500 [VolumePro Volume Rendering Accelerator] -10bb Dapha Electronics Corporation -10bc Advanced Logic Research -10bd Surecom Technology - 0e34 NE-34 -10be Tseng Labs International Co. -10bf Most Inc -10c0 Boca Research Inc. -10c1 ICM Co., Ltd. -10c2 Auspex Systems Inc. -10c3 Samsung Semiconductors, Inc. - 1100 Smartether100 SC1100 LAN Adapter (i82557B) -10c4 Award Software International Inc. -10c5 Xerox Corporation -10c6 Rambus Inc. -10c7 Media Vision -10c8 Neomagic Corporation - 0001 NM2070 [MagicGraph 128] - 0002 NM2090 [MagicGraph 128V] - 0003 NM2093 [MagicGraph 128ZV] - 0004 NM2160 [MagicGraph 128XD] - 1014 00ba MagicGraph 128XD - 1025 1007 MagicGraph 128XD - 1028 0074 MagicGraph 128XD - 1028 0075 MagicGraph 128XD - 1028 007d MagicGraph 128XD - 1028 007e MagicGraph 128XD - 1033 802f MagicGraph 128XD - 104d 801b MagicGraph 128XD - 104d 802f MagicGraph 128XD - 104d 830b MagicGraph 128XD - 10ba 0e00 MagicGraph 128XD - 10c8 0004 MagicGraph 128XD - 10cf 1029 MagicGraph 128XD - 10f7 8308 MagicGraph 128XD - 10f7 8309 MagicGraph 128XD - 10f7 830b MagicGraph 128XD - 10f7 830d MagicGraph 128XD - 10f7 8312 MagicGraph 128XD - 0005 NM2200 [MagicGraph 256AV] - 1014 00dd ThinkPad 570 - 1028 0088 Latitude CPi A - 0006 NM2360 [MagicMedia 256ZX] - 0016 NM2380 [MagicMedia 256XL+] - 10c8 0016 MagicMedia 256XL+ - 0025 NM2230 [MagicGraph 256AV+] - 0083 NM2093 [MagicGraph 128ZV+] - 8005 NM2200 [MagicMedia 256AV Audio] - 0e11 b0d1 MagicMedia 256AV Audio Device on Discovery - 0e11 b126 MagicMedia 256AV Audio Device on Durango - 1014 00dd ThinkPad 390/i1720/i1721 - 1025 1003 MagicMedia 256AV Audio Device on TravelMate 720 - 1028 0088 Latitude CPi A - 1028 008f MagicMedia 256AV Audio Device on Colorado Inspiron - 103c 0007 MagicMedia 256AV Audio Device on Voyager II - 103c 0008 MagicMedia 256AV Audio Device on Voyager III - 103c 000d MagicMedia 256AV Audio Device on Omnibook 900 - 10c8 8005 MagicMedia 256AV Audio Device on FireAnt - 110a 8005 MagicMedia 256AV Audio Device - 14c0 0004 MagicMedia 256AV Audio Device - 8006 NM2360 [MagicMedia 256ZX Audio] - 8016 NM2380 [MagicMedia 256XL+ Audio] -10c9 Dataexpert Corporation -10ca Fujitsu Microelectr., Inc. -10cb Omron Corporation -# nee Mentor ARC Inc -10cc Mai Logic Incorporated - 0660 Articia S Host Bridge - 0661 Articia S PCI Bridge -10cd Advanced System Products, Inc - 1100 ASC1100 - 1200 ASC1200 [(abp940) Fast SCSI-II] - 1300 ABP940-U / ABP960-U - 10cd 1310 ASC1300 SCSI Adapter - 1195 1320 Ultra-SCSI CardBus PC Card REX CB31 - 2300 ABP940-UW - 2500 ABP940-U2W - 2700 ABP3950-U3W -10ce Radius -# nee Citicorp TTI -10cf Fujitsu Limited. - 1414 On-board USB 1.1 companion controller - 1415 On-board USB 2.0 EHCI controller - 1422 E8410 nVidia graphics adapter - 142d HD audio (Realtek ALC262) - 1430 82566MM Intel 1Gb copper LAN interface - 2001 mb86605 - 200c MB86613L IEEE1394 OHCI 1.0 Controller - 2019 MB86295S [CORAL P] - 201e MB86296S [CORAL PA] - 202b MB86297A [Carmine Graphics Controller] -10d1 FuturePlus Systems Corp. -10d2 Molex Incorporated -10d3 Jabil Circuit Inc -10d4 Hualon Microelectronics -10d5 Autologic Inc. -10d6 Cetia -10d7 BCM Advanced Research -10d8 Advanced Peripherals Labs -10d9 Macronix, Inc. [MXIC] - 0431 MX98715 - 0512 MX98713 - 0531 MX987x5 - 1186 1200 DFE-540TX ProFAST 10/100 Adapter - 8625 MX86250 - 8626 Macronix MX86251 + 3Dfx Voodoo Rush - 8888 MX86200 -10da Compaq IPG-Austin - 0508 TC4048 Token Ring 4/16 - 3390 Tl3c3x9 -10db Rohm LSI Systems, Inc. -10dc CERN/ECP/EDU - 0001 STAR/RD24 SCI-PCI (PMC) - 0002 TAR/RD24 SCI-PCI (PMC) - 0021 HIPPI destination - 0022 HIPPI source - 10dc ATT2C15-3 FPGA -10dd Evans & Sutherland - 0100 Lightning 1200 - 10dd 0023 Lightning 1200 15+16M -10de nVidia Corporation - 0008 NV1 [EDGE 3D] - 0009 NV1 [EDGE 3D] - 0010 NV2 [Mutara V08] - 0020 NV4 [RIVA TNT] - 1043 0200 V3400 TNT - 1048 0c18 Erazor II SGRAM - 1048 0c19 Erazor II - 1048 0c1b Erazor II - 1048 0c1c Erazor II - 1092 0550 Viper V550 - 1092 0552 Viper V550 - 1092 4804 Viper V550 - 1092 4808 Viper V550 - 1092 4810 Viper V550 - 1092 4812 Viper V550 - 1092 4815 Viper V550 - 1092 4820 Viper V550 with TV out - 1092 4822 Viper V550 - 1092 4904 Viper V550 - 1092 4914 Viper V550 - 1092 8225 Viper V550 - 10b4 273d Velocity 4400 - 10b4 273e Velocity 4400 - 10b4 2740 Velocity 4400 - 10de 0020 Riva TNT - 1102 1015 Graphics Blaster CT6710 - 1102 1016 Graphics Blaster RIVA TNT - 0028 NV5 [RIVA TNT2/TNT2 Pro] - 1043 0200 AGP-V3800 SGRAM - 1043 0201 AGP-V3800 SDRAM - 1043 0205 PCI-V3800 - 1043 4000 AGP-V3800PRO - 1048 0c21 Synergy II - 1048 0c28 Erazor III - 1048 0c29 Erazor III - 1048 0c2a Erazor III - 1048 0c2b Erazor III - 1048 0c31 Erazor III Pro - 1048 0c32 Erazor III Pro - 1048 0c33 Erazor III Pro - 1048 0c34 Erazor III Pro - 107d 2134 WinFast 3D S320 II + TV-Out - 1092 4804 Viper V770 - 1092 4a00 Viper V770 - 1092 4a02 Viper V770 Ultra - 1092 5a00 RIVA TNT2/TNT2 Pro - 1092 6a02 Viper V770 Ultra - 1092 7a02 Viper V770 Ultra - 10de 0005 RIVA TNT2 Pro - 10de 000f Compaq NVIDIA TNT2 Pro - 1102 1020 3D Blaster RIVA TNT2 - 1102 1026 3D Blaster RIVA TNT2 Digital - 14af 5810 Maxi Gamer Xentor - 0029 NV5 [RIVA TNT2 Ultra] - 1043 0200 AGP-V3800 Deluxe - 1043 0201 AGP-V3800 Ultra SDRAM - 1043 0205 PCI-V3800 Ultra - 1048 0c2e Erazor III Ultra - 1048 0c2f Erazor III Ultra - 1048 0c30 Erazor III Ultra - 1102 1021 3D Blaster RIVA TNT2 Ultra - 1102 1029 3D Blaster RIVA TNT2 Ultra - 1102 102f 3D Blaster RIVA TNT2 Ultra - 14af 5820 Maxi Gamer Xentor 32 - 002a NV5 [Riva TNT2] - 002b NV5 [Riva TNT2] - 002c NV6 [Vanta/Vanta LT] - 1043 0200 AGP-V3800 Combat SDRAM - 1043 0201 AGP-V3800 Combat - 1048 0c20 TNT2 Vanta - 1048 0c21 TNT2 Vanta - 1092 6820 Viper V730 - 1102 1031 CT6938 VANTA 8MB - 1102 1034 CT6894 VANTA 16MB - 14af 5008 Maxi Gamer Phoenix 2 - 002d NV5M64 [RIVA TNT2 Model 64/Model 64 Pro] - 1043 0200 AGP-V3800M - 1043 0201 AGP-V3800M - 1048 0c3a Erazor III LT - 1048 0c3b Erazor III LT - 10de 0006 RIVA TNT2 Model 64/Model 64 Pro - 10de 001e M64 AGP4x - 1102 1023 CT6892 RIVA TNT2 Value - 1102 1024 CT6932 RIVA TNT2 Value 32Mb - 1102 102c CT6931 RIVA TNT2 Value [Jumper] - 1462 8808 MSI-8808 - 1554 1041 Pixelview RIVA TNT2 M64 - 1569 002d Palit Microsystems Daytona TNT2 M64 - 002e NV6 [Vanta] - 002f NV6 [Vanta] - 0034 MCP04 SMBus - 0035 MCP04 IDE - 0036 MCP04 Serial ATA Controller - 0037 MCP04 Ethernet Controller - 0038 MCP04 Ethernet Controller - 003a MCP04 AC'97 Audio Controller - 003b MCP04 USB Controller - 003c MCP04 USB Controller - 003d MCP04 PCI Bridge - 003e MCP04 Serial ATA Controller - 0040 NV40 [GeForce 6800 Ultra] - 0041 NV40 [GeForce 6800] - 1043 817b V9999 Gamer Edition - 0042 NV40.2 [GeForce 6800 LE] - 0043 NV40.3 [GeForce 6800 XE] - 0044 NV40 [GeForce 6800 XT] - 0045 NV40 [GeForce 6800 GT] - 0046 NV45 [GeForce 6800 GT] - 0047 NV40 [GeForce 6800 GS] - 1682 2109 GeForce 6800 GS - 0048 NV40 [GeForce 6800 XT] - 0049 NV40GL - 004d NV40GL [Quadro FX 4000] - 004e NV40GL [Quadro FX 4000] - 0050 CK804 ISA Bridge - 1043 815a K8N4-E or A8N-E Mainboard - 10f1 2865 Tomcat K8E (S2865) - 1458 0c11 GA-K8N Ultra-9 Mainboard - 1462 7100 MSI K8N Diamond - 147b 1c1a KN8-Ultra Mainboard - 1565 3402 NF4 AM2L Mainboard - 0051 CK804 ISA Bridge - 1028 0225 PowerEdge T105 ISA Bridge - 0052 CK804 SMBus - 1028 0225 PowerEdge T105 SMBus - 1043 815a K8N4-E or A8N-E Mainboard - 10f1 2865 Tomcat K8E (S2865) - 1458 0c11 GA-K8N Ultra-9 Mainboard - 1462 7100 MSI K8N Diamond - 147b 1c1a KN8-Ultra Mainboard - 1565 3402 NF4 AM2L Mainboard - 0053 CK804 IDE - 1043 815a K8N4-E or A8N-E Mainboard - 10f1 2865 Tomcat K8E (S2865) - 1458 5002 GA-K8N Ultra-9 Mainboard - 1462 7100 MSI K8N Diamond - 147b 1c1a KN8-Ultra Mainboard - 1565 3402 NF4 AM2L Mainboard - 0054 CK804 Serial ATA Controller - 1028 0225 PowerEdge T105 Serial ATA - 1043 815a A8N-E Mainboard - 10f1 2865 Tomcat K8E (S2865) - 1458 b003 GA-K8N Ultra-9 Mainboard - 1462 7100 MSI K8N Diamond - 147b 1c1a KN8-Ultra Mainboard - 1565 5401 NF4 AM2L Mainboard - 0055 CK804 Serial ATA Controller - 1028 0225 PowerEdge T105 Serial ATA - 1043 815a K8N4-E or A8N-E Mainboard - 10f1 2865 Tomcat K8E (S2865) - 1458 b003 GA-K8N Ultra-9 Mainboard - 147b 1c1a KN8-Ultra Mainboard - 1565 5401 NF4 AM2L Mainboard - 0056 CK804 Ethernet Controller - 0057 CK804 Ethernet Controller - 1043 8141 K8N4-E or A8N-E Mainboard - 10de cb84 NF4 Lanparty - 10f1 2865 Tomcat K8E (S2865) - 1458 e000 GA-K8N Ultra-9 Mainboard - 1462 7100 MSI K8N Diamond - 147b 1c1a KN8-Ultra Mainboard - 1565 2501 NF4 AM2L Mainboard - 0058 CK804 AC'97 Modem - 0059 CK804 AC'97 Audio Controller - 1043 812a K8N4-E or A8N-E Mainboard - 10f1 2865 Tomcat K8E (S2865) - 147b 1c1a KN8-Ultra Mainboard - 1565 8211 NF4 AM2L Mainboard - 005a CK804 USB Controller - 1028 0225 PowerEdge T105 onboard USB - 1043 815a K8N4-E or A8N-E Mainboard - 10f1 2865 Tomcat K8E (S2865) - 1458 5004 GA-K8N Ultra-9 Mainboard - 1462 7100 MSI K8N Diamond - 147b 1c1a KN8-Ultra Mainboard - 1565 3402 NF4 AM2L Mainboard - 005b CK804 USB Controller - 1028 0225 PowerEdge T105 onboard USB - 1043 815a K8N4-E or A8N-E Mainboard - 10f1 2865 Tomcat K8E (S2865) - 1458 5004 GA-K8N Ultra-9 Mainboard - 1462 7100 MSI K8N Diamond - 147b 1c1a KN8-Ultra Mainboard - 1565 3402 NF4 AM2L Mainboard - 005c CK804 PCI Bridge - 005d CK804 PCIE Bridge - 005e CK804 Memory Controller - 1028 0225 PowerEdge T105 Memory Controller - 1043 815a A8N-E Mainboard - 10de 005e ECS Elitegroup NFORCE3-A939 motherboard. - 10f1 2865 Tomcat K8E (S2865) - 10f1 2891 Thunder K8SRE Mainboard - 1458 5000 GA-K8N Ultra-9 Mainboard - 1462 7100 MSI K8N Diamond - 147b 1c1a KN8-Ultra Mainboard - 1565 3402 NF4 AM2L Mainboard - 005f CK804 Memory Controller - 0060 nForce2 ISA Bridge - 1043 80ad A7N8X Mainboard - 147b 1c02 NF7-S/NF7 (nVidia-nForce2) 2.X - a0a0 03ba UK79G-1394 motherboard - 0064 nForce2 SMBus (MCP) - 147b 1c02 NF7-S/NF7 (nVidia-nForce2) 2.X - a0a0 03bb UK79G-1394 motherboard - 0065 nForce2 IDE - 10de 0c11 nForce 2 EIDE Controller - a0a0 03b2 UK79G-1394 motherboard - 0066 nForce2 Ethernet Controller - 1043 80a7 A7N8X Mainboard onboard nForce2 Ethernet - 10de 0c11 nForce MCP-T Networking Adapter - a0a0 03b3 UK79G-1394 motherboard - 0067 nForce2 USB Controller - 1043 0c11 A7N8X Mainboard - a0a0 03b4 UK79G-1394 motherboard - 0068 nForce2 USB Controller - 1043 0c11 A7N8X Mainboard - a0a0 03b4 UK79G-1394 motherboard - 006a nForce2 AC97 Audio Controler (MCP) - 1043 8095 nForce2 AC97 Audio Controler (MCP) - a0a0 0304 UK79G-1394 motherboard - 006b nForce Audio Processing Unit - 10de 006b nForce2 MCP Audio Processing Unit - a0a0 0304 UK79G-1394 motherboard - 006c nForce2 External PCI Bridge - 006d nForce2 PCI Bridge - 006e nForce2 FireWire (IEEE 1394) Controller - a0a0 0306 UK79G-1394 motherboard - 0080 MCP2A ISA bridge - 147b 1c09 NV7 Motherboard - 0084 MCP2A SMBus - 147b 1c09 NV7 Motherboard - 0085 MCP2A IDE - 147b 1c09 NV7 Motherboard - 0086 MCP2A Ethernet Controller - 0087 MCP2A USB Controller - 147b 1c09 NV7 Motherboard - 0088 MCP2A USB Controller - 147b 1c09 NV7 Motherboard - 008a MCP2S AC'97 Audio Controller - 147b 1c09 NV7 Motherboard - 008b MCP2A PCI Bridge - 008c MCP2A Ethernet Controller - 008e nForce2 Serial ATA Controller - 0090 G70 [GeForce 7800 GTX] - 0091 G70 [GeForce 7800 GTX] - 0092 G70 [GeForce 7800 GT] - 0093 G70 [GeForce 7800 GS] - 0095 G70 [GeForce 7800 SLI] - 0098 G70 [GeForce Go 7800] - 0099 G70 [GeForce Go 7800 GTX] - 009d G70GL [Quadro FX 4500] - 00a0 NV5 [Aladdin TNT2] - 14af 5810 Maxi Gamer Xentor - 00c0 NV41 [GeForce 6800 GS] - 00c1 NV41.1 [GeForce 6800] - 00c2 NV41.2 [GeForce 6800 LE] - 00c3 NV42 [GeForce 6800 XT] - 00c8 NV41.8 [GeForce Go 6800] - 00c9 NV41.9 [GeForce Go 6800 Ultra] - 00cc NV41 [Quadro FX Go1400] - 00cd NV41 [Quadro FX 3450/4000 SDI] - 10de 029b wx4300 Workstation - 00ce NV41GL [Quadro FX 1400] - 00d0 nForce3 LPC Bridge - 00d1 nForce3 Host Bridge - 00d2 nForce3 AGP Bridge - 00d3 CK804 Memory Controller - 00d4 nForce3 SMBus - 00d5 nForce3 IDE - 00d6 nForce3 Ethernet - 00d7 nForce3 USB 1.1 - 00d8 nForce3 USB 2.0 - 00d9 nForce3 Audio - 00da nForce3 Audio - 00dd nForce3 PCI Bridge - 00df CK8S Ethernet Controller - 1043 80a7 K8N-E - 105b 0c43 Winfast NF3250K8AA - 147b 1c0b NF8 Mainboard - 00e0 nForce3 250Gb LPC Bridge - 1043 813f K8N-E - 10de 0c11 Winfast NF3250K8AA - 1462 7030 K8N Neo-FSR v2.0 - 147b 1c0b NF8 Mainboard - 1849 00e0 Motherboard (one of many) - 00e1 nForce3 250Gb Host Bridge - 1043 813f K8N-E - 1462 7030 K8N Neo-FSR v2.0 - 147b 1c0b NF8 Mainboard - 1849 00e1 Motherboard (one of many) - 00e2 nForce3 250Gb AGP Host to PCI Bridge - 00e3 nForce3 Serial ATA Controller - 1043 813f K8N-E - 105b 0c43 Winfast NF3250K8AA - 147b 1c0b NF8 Mainboard - 1849 00e3 Motherboard (one of many) - 00e4 nForce 250Gb PCI System Management - 1043 813f K8N-E - 105b 0c43 Winfast NF3250K8AA - 1462 7030 K8N Neo-FSR v2.0 - 147b 1c0b NF8 Mainboard - 1849 00e4 Motherboard (one of many) - 00e5 CK8S Parallel ATA Controller (v2.5) - 1043 813f K8N-E - 105b 0c43 Winfast NF3250K8AA - 1462 7030 K8N Neo-FSR v2.0 - 147b 1c0b NF8 Mainboard - f849 00e5 Motherboard (one of many) - 00e6 CK8S Ethernet Controller - 00e7 CK8S USB Controller - 1043 813f K8N-E - 105b 0c43 Winfast NF3250K8AA - 1462 7030 K8N Neo-FSR v2.0 - 147b 1c0b NF8 Mainboard - 1849 00e7 Motherboard (one of many) - 00e8 nForce3 EHCI USB 2.0 Controller - 1043 813f K8N-E - 105b 0c43 Winfast NF3250K8AA - 1462 7030 K8N Neo-FSR v2.0 - 147b 1c0b NF8 Mainboard - 1849 00e8 Motherboard (one of many) - 00ea nForce3 250Gb AC'97 Audio Controller - 1043 819d K8N-E - 105b 0c43 Winfast NF3250K8AA - 1462 b010 K8N Neo-FSR v2.0 - 147b 1c0b NF8 Mainboard - 00ed nForce3 250Gb PCI-to-PCI Bridge - 00ee nForce3 Serial ATA Controller 2 - 00f0 NV40 [GeForce 6800 Ultra] - 00f1 NV43 [GeForce 6600 GT] - 1043 81a6 N6600GT TD 128M AGP - 1043 81c6 N6600GT TD 128M AGP - 1458 3150 GV-N66T128VP - 1554 1191 PixelView PV-N43UA (128KD) - 1682 2119 GeForce 6600 GT AGP 128MB DDR3 DUAL DVI TV - 00f2 NV43 [GeForce 6600] - 1554 1194 PixelView PV-N43AT (256KD) - 1682 211c GeForce 6600 256MB DDR DUAL DVI TV - 00f3 NV43 [GeForce 6200] - 00f4 NV43 [GeForce 6600 LE] - 00f5 G70 [GeForce 7800 GS] - 00f6 NV43 [GeForce 6800 GS] - 1682 217e XFX GeForce 6800 XTreme 256MB DDR3 AGP - 00f8 NV45GL [Quadro FX 3400/4400] - 00f9 NV45 [GeForce 6800 GTO] - 10de 00f9 NV40 [GeForce 6800 GT] - 1682 2120 GEFORCE 6800 GT PCI-E - 00fa NV36 [GeForce PCX 5750] - 00fb NV35 [GeForce PCX 5900] - 00fc NV37GL [Quadro FX 330/GeForce PCX 5300] - 00fd NV37GL [Quadro PCI-E Series] - 00fe NV38GL [Quadro FX 1300] - 00ff NV18 [GeForce PCX 4300] - 0100 NV10 [GeForce 256 SDR] - 1043 0200 AGP-V6600 SGRAM - 1043 0201 AGP-V6600 SDRAM - 1043 4008 AGP-V6600 SGRAM - 1043 4009 AGP-V6600 SDRAM - 1048 0c41 Erazor X - 1048 0c43 ERAZOR X PCI - 1048 0c48 Synergy Force - 1102 102d CT6941 GeForce 256 - 14af 5022 3D Prophet SE - 0101 NV10DDR [GeForce 256 DDR] - 1043 0202 AGP-V6800 DDR - 1043 400a AGP-V6800 DDR SGRAM - 1043 400b AGP-V6800 DDR SDRAM - 1048 0c42 Erazor X - 107d 2822 WinFast GeForce 256 - 1102 102e CT6971 GeForce 256 DDR - 14af 5021 3D Prophet DDR-DVI - 0103 NV10GL [Quadro] - 1048 0c40 GLoria II-64 - 1048 0c44 GLoria II - 1048 0c45 GLoria II - 1048 0c4a GLoria II-64 Pro - 1048 0c4b GLoria II-64 Pro DVII - 0110 NV11 [GeForce2 MX/MX 400] - 1043 4015 AGP-V7100 Pro - 1043 4021 V7100 Deluxe Combo - 1043 4031 V7100 Pro with TV output - 1048 0c60 Gladiac MX - 1048 0c61 Gladiac 511PCI - 1048 0c63 Gladiac 511TV-OUT 32MB - 1048 0c64 Gladiac 511TV-OUT 64MB - 1048 0c65 Gladiac 511TWIN - 1048 0c66 Gladiac 311 - 10de 0091 Dell OEM GeForce 2 MX 400 - 10de 00a1 Apple OEM GeForce2 MX - 1462 8817 MSI GeForce2 MX400 Pro32S [MS-8817] - 14af 7102 3D Prophet II MX - 14af 7103 3D Prophet II MX Dual-Display - 1545 0023 Xtasy Rev. B2 - 0111 NV11DDR [GeForce2 MX200] - 0112 NV11 [GeForce2 Go] - 0113 NV11GL [Quadro2 MXR/EX/Go] - 0140 NV43 [GeForce 6600 GT] - 0141 NV43 [GeForce 6600] - 1043 81b0 EN6600 Silencer - 1458 3124 GV-NX66128DP Turbo Force Edition - 0142 NV43 [GeForce 6600 LE] - 0143 NV43 [GeForce 6600 VE] - 0144 NV43 [GeForce Go 6600] - 0145 NV43 [GeForce 6610 XL] - 0146 NV43 [Geforce Go 6600TE/6200TE] - 0147 NV43 [GeForce 6700 XL] - 0148 NV43 [GeForce Go 6600] - 0149 NV43 [GeForce Go 6600 GT] - 014a NV43 [Quadro NVS 440] - 014c NV43 [Quadro FX 540 MXM] - 014d NV43GL [Quadro FX 550] - 014e NV43GL [Quadro FX 540] - 014f NV43 [GeForce 6200] - 0150 NV15 [GeForce2 GTS/Pro] - 1043 4016 V7700 AGP Video Card - 1048 0c50 Gladiac - 1048 0c52 Gladiac-64 - 107d 2840 WinFast GeForce2 GTS with TV output - 107d 2842 WinFast GeForce 2 Pro - 10de 002e GeForce2 GTS - 1462 8831 Creative GeForce2 Pro - 0151 NV15DDR [GeForce2 Ti] - 1043 405f V7700Ti - 1462 5506 Creative 3D Blaster Geforce2 Titanium - 0152 NV15BR [GeForce2 Ultra, Bladerunner] - 1048 0c56 GLADIAC Ultra - 0153 NV15GL [Quadro2 Pro] - 0160 NV44 [GeForce 6500] - 0161 NV44 [GeForce 6200 TurboCache(TM)] - 0162 NV44 [GeForce 6200SE TurboCache (TM)] - 0163 NV44 [GeForce 6200 LE] - 0164 NV44 [GeForce Go 6200] - 0165 NV44 [Quadro NVS 285] - 0166 NV43 [GeForce Go 6400] - 0167 NV43 [GeForce Go 6200/6400] - 0168 NV43 [GeForce Go 6200/6400] - 0169 NV44 [GeForce 6250] - 016a NV44 [GeForce 7100 GS] - 0170 NV17 [GeForce4 MX 460] - 0171 NV17 [GeForce4 MX 440] - 10b0 0002 Gainward Pro/600 TV - 10de 0008 Apple OEM GeForce4 MX 440 - 1462 8661 G4MX440-VTP - 1462 8730 MX440SES-T (MS-8873) - 1462 8852 GeForce4 MX440 PCI - 147b 8f00 Abit Siluro GeForce4MX440 - 0172 NV17 [GeForce4 MX 420] - 0173 NV17 [GeForce4 MX 440-SE] - 0174 NV17 [GeForce4 440 Go] - 0175 NV17 [GeForce4 420 Go] - 0176 NV17 [GeForce4 420 Go 32M] - 103c 08b0 tc1100 tablet - 144d c005 X10 Laptop - 4c53 1090 Cx9 / Vx9 mainboard - 0177 NV17 [GeForce4 460 Go] - 0178 NV17GL [Quadro4 550 XGL] - 0179 NV17 [GeForce4 440 Go 64M] - 10de 0179 GeForce4 MX (Mac) - 017a NV17GL [Quadro NVS] - 017b NV17GL [Quadro4 550 XGL] - 017c NV17GL [Quadro4 500 GoGL] - 017d NV17 [GeForce4 410 Go 16M] - 0181 NV18 [GeForce4 MX 440 AGP 8x] - 1043 8063 GeForce4 MX 440 AGP 8X - 1043 806f V9180 Magic - 1462 8880 MS-StarForce GeForce4 MX 440 with AGP8X - 1462 8900 MS-8890 GeForce 4 MX440 AGP8X - 1462 9350 MSI Geforce4 MX T8X with AGP8X - 147b 8f0d Siluro GF4 MX-8X - 1554 1111 PixelView MVGA-NVG18A - 0182 NV18 [GeForce4 MX 440SE AGP 8x] - 0183 NV18 [GeForce4 MX 420 AGP 8x] - 0184 NV18 [GeForce4 MX] - 0185 NV18 [GeForce4 MX 4000] - 0186 NV18M [GeForce4 448 Go] - 0187 NV18M [GeForce4 488 Go] - 0188 NV18GL [Quadro4 580 XGL] - 0189 NV18 [GeForce4 MX with AGP8X (Mac)] - 018a NV18GL [Quadro NVS 280 SD] - 018b NV18GL [Quadro4 380 XGL] - 018c NV18GL [Quadro NVS 50 PCI] - 018d NV18M [GeForce4 448 Go] - 0191 G80 [GeForce 8800 GTX] - 0193 G80 [GeForce 8800 GTS] - 0194 G80 [GeForce 8800 Ultra] -# Found in GPU server Tesla D870 and S870 - 0197 G80 [Tesla C870] - 019d G80 [Quadro FX 5600] - 019e G80 [Quadro FX 4600] - 01a0 NVCrush11 [GeForce2 MX Integrated Graphics] - 01a4 nForce CPU bridge - 01ab nForce 420 Memory Controller (DDR) - 01ac nForce 220/420 Memory Controller - 01ad nForce 220/420 Memory Controller - 01b0 nForce Audio Processing Unit - 01b1 nForce AC'97 Audio Controller - 01b2 nForce ISA Bridge - 01b4 nForce PCI System Management - 01b7 nForce AGP to PCI Bridge - 01b8 nForce PCI-to-PCI bridge - 01bc nForce IDE - 01c1 nForce AC'97 Modem Controller - 01c2 nForce USB Controller - 01c3 nForce Ethernet Controller - 01d0 G72 [GeForce 7350 LE] - 01d1 G72 [GeForce 7300 LE] - 1462 0345 7300LE PCI Express Graphics Adapter - 01d3 G72 [GeForce 7300 SE/7200 GS] - 01d6 G72M [GeForce Go 7200] - 01d7 G72M [Quadro NVS 110M/GeForce Go 7300] - 01d8 G72M [GeForce Go 7400] - 1028 01d7 XPS M1210 - 01d9 G72M [GeForce Go 7450] - 01da G72M [Quadro NVS 110M] - 01db G72M [Quadro NVS 120M] - 01dc G72GL [Quadro FX 350M] - 01dd G72 [GeForce 7500 LE] - 01de G72GL [Quadro FX 350] - 10de 01dc Quadro FX Go350M - 01df G71 [GeForce 7300 GS] - 01e0 nForce2 IGP2 - 147b 1c09 NV7 Motherboard - 01e8 nForce2 AGP - 01ea nForce2 Memory Controller 0 - a0a0 03b9 UK79G-1394 motherboard - 01eb nForce2 Memory Controller 1 - a0a0 03b9 UK79G-1394 motherboard - 01ec nForce2 Memory Controller 2 - a0a0 03b9 UK79G-1394 motherboard - 01ed nForce2 Memory Controller 3 - a0a0 03b9 UK79G-1394 motherboard - 01ee nForce2 Memory Controller 4 - 10de 01ee MSI Delta-L nForce2 memory controller - a0a0 03b9 UK79G-1394 motherboard - 01ef nForce2 Memory Controller 5 - a0a0 03b9 UK79G-1394 motherboard - 01f0 NV18 [GeForce4 MX - nForce GPU] - a0a0 03b5 UK79G-1394 motherboard - 0200 NV20 [GeForce3] - 1043 402f AGP-V8200 DDR - 1048 0c70 GLADIAC 920 - 0201 NV20 [GeForce3 Ti 200] - 0202 NV20 [GeForce3 Ti 500] - 1043 405b V8200 T5 - 1545 002f Xtasy 6964 - 0203 NV20DCC [Quadro DCC] - 0211 NV48 [GeForce 6800] - 0212 NV48 [GeForce 6800 LE] - 0215 NV48 [GeForce 6800 GT] - 0218 NV48 [GeForce 6800 XT] - 0221 NV44A [GeForce 6200] - 3842 a341 256A8N341DX - 0222 NV44 [GeForce 6200 A-LE] - 0240 C51PV [GeForce 6150] - 1043 81cd A8N-VM CSM - 1462 7207 K8NGM2 series - 0241 C51 [GeForce 6150 LE] - 0242 C51G [GeForce 6100] - 105b 0cad Winfast 6100K8MB - 0243 C51 PCI Express Bridge - 0244 C51 [Geforce Go 6150] - 103c 30b5 Presario V3242AU - 103c 30b7 Presario V6133CL - 10de 0244 GeForce Go 6150 - 0245 C51 [Quadro NVS 210S/GeForce 6150LE] - 0246 C51 PCI Express Bridge - 0247 C51 [GeForce Go 6100] - 1043 1382 MCP51 PCI-X GeForce Go 6100 - 0248 C51 PCI Express Bridge - 0249 C51 PCI Express Bridge - 024a C51 PCI Express Bridge - 024b C51 PCI Express Bridge - 024c C51 PCI Express Bridge - 024d C51 PCI Express Bridge - 024e C51 PCI Express Bridge - 024f C51 PCI Express Bridge - 0250 NV25 [GeForce4 Ti 4600] - 0251 NV25 [GeForce4 Ti 4400] - 1043 8023 v8440 GeForce 4 Ti4400 - 10de 0251 PNY GeForce4 Ti 4400 - 1462 8710 PNY GeForce4 Ti 4400 - 0252 NV25 [GeForce4 Ti] - 0253 NV25 [GeForce4 Ti 4200] - 107d 2896 WinFast A250 LE TD (Dual VGA/TV-out/DVI) - 147b 8f09 Siluro (Dual VGA/TV-out/DVI) - 0258 NV25GL [Quadro4 900 XGL] - 0259 NV25GL [Quadro4 750 XGL] - 025b NV25GL [Quadro4 700 XGL] - 0260 MCP51 LPC Bridge - 103c 30b7 Presario V6133CL - 1043 81bc A8N-VM CSM Mainboard - 1458 5001 GA-M55plus-S3G - 1462 7207 K8NGM2 series - 0261 MCP51 LPC Bridge - 105b 0cad Winfast 6100K8MB - 0262 MCP51 LPC Bridge - 0263 MCP51 LPC Bridge - 0264 MCP51 SMBus - 103c 30b7 Presario V6133CL - 1043 81bc A8N-VM CSM Mainboard - 105b 0cad Winfast 6100K8MB - 1462 7207 K8NGM2 series - 0265 MCP51 IDE - 103c 30b7 Presario V6133CL - 1043 81bc A8N-VM CSM Mainboard - 1462 7207 K8NGM2 series -# Foxconn has used a wrong vendor ID for this one - f05b 0cad Winfast 6100K8MB - 0266 MCP51 Serial ATA Controller - 103c 30b7 Presario V6133CL - 1043 81bc A8N-VM CSM Mainboard - 1462 7207 K8NGM2 series - 0267 MCP51 Serial ATA Controller - 1043 81bc A8N-VM CSM Mainboard - 1462 7207 K8NGM2 series - 0268 MCP51 Ethernet Controller - 0269 MCP51 Ethernet Controller - 103c 30b7 Presario V6133CL - 1043 8141 A8N-VM CSM Mainboard - 1462 7207 K8NGM2 series - 026a MCP51 MCI - 026b MCP51 AC97 Audio Controller - 105b 0cad Winfast 6100K8MB - 026c MCP51 High Definition Audio - 103c 30b5 Presario V3242AU - 103c 30b7 Presario V6133CL - 10de cb84 A8N-VM CSM Mainboard - 1462 7207 K8NGM2 series - 026d MCP51 USB Controller - 103c 30b7 Presario V6133CL - 1043 81bc A8N-VM CSM Mainboard - 105b 0cad Winfast 6100K8MB - 1462 7207 K8NGM2 series - 026e MCP51 USB Controller - 103c 30b7 Presario V6133CL - 1043 81bc A8N-VM CSM Mainboard - 105b 0cad Winfast 6100K8MB - 1462 7207 K8NGM2 series - 026f MCP51 PCI Bridge - 103c 30b7 Presario V6133CL - 0270 MCP51 Host Bridge - 103c 30b7 Presario V6133CL - 1043 81bc A8N-VM CSM Mainboard - 105b 0cad Winfast 6100K8MB - 1458 5001 GA-M55plus-S3G - 1462 7207 K8NGM2 series - 0271 MCP51 PMU - 103c 30b5 Presario V3242AU - 103c 30b7 Presario V6133CL - 0272 MCP51 Memory Controller 0 - 105b 0cad Winfast 6100K8MB - 027e C51 Memory Controller 2 - 103c 30b7 Presario V6133CL - 1043 81cd A8N-VM CSM Mainboard - 1458 5000 GA-M55plus-S3G - 1462 7207 K8NGM2 series - 027f C51 Memory Controller 3 - 103c 30b7 Presario V6133CL - 1043 81cd A8N-VM CSM Mainboard - 1458 5000 GA-M55plus-S3G - 1462 7207 K8NGM2 series - 0280 NV28 [GeForce4 Ti 4800] - 0281 NV28 [GeForce4 Ti 4200 AGP 8x] - 0282 NV28 [GeForce4 Ti 4800 SE] - 0286 NV28 [GeForce4 Ti 4200 Go AGP 8x] - 0288 NV28GL [Quadro4 980 XGL] - 0289 NV28GL [Quadro4 780 XGL] - 028c NV28GLM [Quadro4 Go700] - 0290 G71 [GeForce 7900 GTX] - 0291 G71 [GeForce 7900 GT/GTO] - 10de 042b NX7900GTO-T2D512E [7900 GTO] - 0292 G71 [GeForce 7900 GS] - 0293 G71 [GeForce 7900 GX2] - 0294 G71 [GeForce 7950 GX2] - 0295 G71 [GeForce 7950 GT] - 1043 8225 GeForce 7950 GT - 107d 2a68 WinFast PX7950GT TDH - 1462 0663 NX7950GT-VT2D512EZ-HD - 0297 G71 [GeForce Go 7950 GTX] - 0298 G71 [GeForce Go 7900 GS] - 0299 G71 [GeForce Go 7900 GTX] - 029a G71 [Quadro FX 2500M] - 029b G71 [Quadro FX 1500M] - 029c G71 [Quadro FX 5500] - 029d G71GL [Quadro FX 3500] - 029e G71 [Quadro FX 1500] - 029f G70 [Quadro FX 4500 X2] -# Xbox Graphics Processing Unit (Integrated). GeForce3 derivative (NV20 < NV2A < NV25). - 02a0 NV2A [XGPU] - 02a5 MCPX CPU Bridge - 02a6 MCPX Memory Controller - 02e0 G73 [GeForce 7600 GT] - 02e0 2249 GF 7600GT 560M 256MB DDR3 DUAL DVI TV - 02e1 G73 [GeForce 7600 GS] - 1682 222b PV-T73K-UAL3 (256MB) - 1682 2247 GF 7600GS 512MB DDR2 - 02e2 G73 [GeForce 7300 GT] - 02e3 G71 [GeForce 7900 GS] - 02e4 G71 [GeForce 7950 GT] - 1682 2271 PV-T71A-YDF7 (512MB) - 02f0 C51 Host Bridge - 103c 30b7 Presario V6133CL - 1043 81cd A8N-VM CSM Mainboard - 1462 7207 K8NGM2 series - 02f1 C51 Host Bridge - 1458 5000 GA-M55plus-S3G - 02f2 C51 Host Bridge - 02f3 C51 Host Bridge - 02f4 C51 Host Bridge - 02f5 C51 Host Bridge - 02f6 C51 Host Bridge - 02f7 C51 Host Bridge - 02f8 C51 Memory Controller 5 - 103c 30b7 Presario V6133CL - 1043 81cd A8N-VM CSM Mainboard - 1458 5000 GA-M55plus-S3G - 1462 7207 K8NGM2 series - 02f9 C51 Memory Controller 4 - 103c 30b7 Presario V6133CL - 1043 81cd A8N-VM CSM Mainboard - 1458 5000 GA-M55plus-S3G - 1462 7207 K8NGM2 series - 02fa C51 Memory Controller 0 - 103c 30b7 Presario V6133CL - 1043 81cd A8N-VM CSM Mainboard - 1458 5000 GA-M55plus-S3G - 1462 7207 K8NGM2 series - 02fb C51 PCI Express Bridge - 02fc C51 PCI Express Bridge - 103c 30b7 Presario V6133CL - 02fd C51 PCI Express Bridge - 103c 30b7 Presario V6133CL - 02fe C51 Memory Controller 1 - 103c 30b7 Presario V6133CL - 1043 81cd A8N-VM CSM Mainboard - 1458 5000 GA-M55plus-S3G - 1462 7207 K8NGM2 series - 02ff C51 Host Bridge - 103c 30b7 Presario V6133CL - 1043 81cd A8N-VM CSM Mainboard - 1458 5000 GA-M55plus-S3G - 1462 7207 K8NGM2 series - 0300 NV30 [GeForce FX] - 0301 NV30 [GeForce FX 5800 Ultra] - 0302 NV30 [GeForce FX 5800] - 0308 NV30GL [Quadro FX 2000] - 0309 NV30GL [Quadro FX 1000] - 0311 NV31 [GeForce FX 5600 Ultra] - 0312 NV31 [GeForce FX 5600] - 0313 NV31 - 0314 NV31 [GeForce FX 5600XT] - 1043 814a V9560XT/TD - 0316 NV31M - 0317 NV31M Pro - 031a NV31M [GeForce FX Go5600] - 031b NV31M [GeForce FX Go5650] - 031c NV31 [Quadro FX Go700] - 031d NV31GLM - 031e NV31GLM Pro - 031f NV31GLM Pro - 0320 NV34 [GeForce FX 5200] - 0321 NV34 [GeForce FX 5200 Ultra] - 0322 NV34 [GeForce FX 5200] - 1043 02fb V9250 Magic - 1043 8180 V9520-X/TD/128M - 1462 9110 MS-8911 (FX5200-TD128) - 1462 9171 MS-8917 (FX5200-T128) - 1462 9360 MS-8936 (FX5200-T128) - 0323 NV34 [GeForce FX 5200LE] - 0324 NV34M [GeForce FX Go5200 64M] - 1028 0196 Inspiron 5160 - 103c 006a Pavillon ZD7000 laptop - 1071 8160 MIM2000 - 0325 NV34M [GeForce FX Go5250] - 0326 NV34 [GeForce FX 5500] - 1458 310d GeForce FX 5500 128 MB - 1682 2034 GeForce 5500 256 MB - 0327 NV34 [GeForce FX 5100] - 0328 NV34M [GeForce FX Go5200 32M/64M] - 0329 NV34M [GeForce FX Go5200] - 10de 0010 Powerbook G4 - 032a NV34GL [Quadro NVS 280 PCI] - 032b NV34GL [Quadro FX 500/600 PCI] - 032c NV34GLM [GeForce FX Go 5300] - 032d NV34 [GeForce FX Go5100] - 032f NV34GL - 0330 NV35 [GeForce FX 5900 Ultra] - 1043 8137 V9950 Ultra / 256 MB - 0331 NV35 [GeForce FX 5900] - 1043 8145 V9950GE - 0332 NV35 [GeForce FX 5900XT] - 0333 NV38 [GeForce FX 5950 Ultra] - 0334 NV35 [GeForce FX 5900ZT] - 1462 9373 FX5900ZT-VTD128 (MS-8937) - 0338 NV35GL [Quadro FX 3000] - 033f NV35GL [Quadro FX 700] - 0341 NV36.1 [GeForce FX 5700 Ultra] - 1462 9380 MS-8938 (FX5700U-TD128) - 0342 NV36.2 [GeForce FX 5700] - 0343 NV36 [GeForce FX 5700LE] - 0344 NV36.4 [GeForce FX 5700VE] - 0345 NV36.5 - 0347 NV36 [GeForce FX Go5700] - 103c 006a NX9500 - 0348 NV36 [GeForce FX Go5700] - 0349 NV36M Pro - 034b NV36MAP - 034c NV36 [Quadro FX Go1000] - 034e NV36GL [Quadro FX 1100] - 034f NV36GL - 0360 MCP55 LPC Bridge - 0361 MCP55 LPC Bridge - 1028 0221 PowerEdge R805 MCP55 LPC Bridge - 0362 MCP55 LPC Bridge - 147b 12c4 KN9-Ultra Mainboard - 0363 MCP55 LPC Bridge - 0364 MCP55 LPC Bridge - 1028 0221 PowerEdge R805 MCP55 LPC Bridge - 0365 MCP55 LPC Bridge - 0366 MCP55 LPC Bridge - 0367 MCP55 LPC Bridge - 0368 MCP55 SMBus - 1028 020c PowerEdge M605 MCP55 SMBus - 1028 0221 PowerEdge R805 MCP55 SMBus - 147b 12c4 KN9-Ultra Mainboard - 0369 MCP55 Memory Controller - 147b 12c4 KN9-Ultra Mainboard - 036a MCP55 Memory Controller - 036b MCP55 SMU - 036c MCP55 USB Controller - 1028 020c PowerEdge M605 MCP55 USB Controller - 1028 0221 PowerEdge R805 MCP55 USB Controller - 147b 12c4 KN9-Ultra Mainboard - 036d MCP55 USB Controller - 1028 020c PowerEdge M605 MCP55 USB Controller - 1028 0221 PowerEdge R805 MCP55 USB Controller - 147b 12c4 KN9-Ultra Mainboard - 036e MCP55 IDE - 147b 12c4 KN9-Ultra Mainboard - 0370 MCP55 PCI bridge - 0371 MCP55 High Definition Audio - 0372 MCP55 Ethernet - 0373 MCP55 Ethernet - 147b 12c4 KN9-Ultra Mainboard - 0374 MCP55 PCI Express bridge - 0375 MCP55 PCI Express bridge - 0376 MCP55 PCI Express bridge - 0377 MCP55 PCI Express bridge - 0378 MCP55 PCI Express bridge - 037a MCP55 Memory Controller - 037e MCP55 SATA Controller - 037f MCP55 SATA Controller - 1028 0221 PowerEdge R805 MCP55 SATA Controller - 147b 12c4 KN9-Ultra Mainboard - 0390 G73 [GeForce 7650 GS] - 0391 G73 [GeForce 7600 GT] - 1458 3427 GV-NX76T128D-RH - 0392 G73 [GeForce 7600 GS] - 1462 0622 NX7600GS-T2D256EH - 0393 G73 [GeForce 7300 GT] - 10de 0412 NX7300GT-TD256EH - 1462 0412 NX7300GT-TD256EH - 0394 G73 [GeForce 7600 LE] - 0395 G73 [GeForce 7300 GT] - 0397 G73 [GeForce Go 7700] - 0398 G73 [GeForce Go 7600] - 1025 006c Acer 9814 WKMI - 0399 G73 [GeForce Go 7600 GT] - 039a G73M [Quadro NVS 300M] - 039b G73 [GeForce Go 7900 SE] - 039c G73 [Quadro FX 550M] - 10de 039c Quadro FX 560M - 039e G73GL [Quadro FX 560] - 03a0 C55 Host Bridge - 03a1 C55 Host Bridge - 03a2 C55 Host Bridge - 03a3 C55 Host Bridge - 03a4 C55 Host Bridge - 03a5 C55 Host Bridge - 03a6 C55 Host Bridge - 03a7 C55 Host Bridge - 03a8 C55 Memory Controller - 03a9 C55 Memory Controller - 03aa C55 Memory Controller - 03ab C55 Memory Controller - 03ac C55 Memory Controller - 03ad C55 Memory Controller - 03ae C55 Memory Controller - 03af C55 Memory Controller - 03b0 C55 Memory Controller - 03b1 C55 Memory Controller - 03b2 C55 Memory Controller - 03b3 C55 Memory Controller - 03b4 C55 Memory Controller - 03b5 C55 Memory Controller - 03b6 C55 Memory Controller - 03b7 C55 PCI Express bridge - 03b8 C55 PCI Express bridge - 03b9 C55 PCI Express bridge - 03ba C55 Memory Controller - 03bb C55 PCI Express bridge - 03bc C55 Memory Controller - 03d0 C61 [GeForce 6150SE nForce 430] - 03d1 C61 [GeForce 6100 nForce 405] - 03d2 C61 [GeForce 6100 nForce 400] - 03d5 C61 [GeForce 6100 nForce 420] - 03d6 C61 [GeForce 7025 / nForce 630a] - 03e0 MCP61 LPC Bridge - 1849 03e0 939NF6G-VSTA Board - 03e1 MCP61 LPC Bridge - 03e2 MCP61 LPC Bridge - 03e3 MCP61 LPC Bridge - 03e4 MCP61 High Definition Audio - 03e5 MCP61 Ethernet - 03e6 MCP61 Ethernet - 03e7 MCP61 SATA Controller - 03e8 MCP61 PCI Express bridge - 1849 03e8 939NF6G-VSTA Board - 03e9 MCP61 PCI Express bridge - 1849 03e9 939NF6G-VSTA Board - 03ea MCP61 Memory Controller - 1849 03ea 939NF6G-VSTA Board - 03eb MCP61 SMBus - 1849 03eb 939NF6G-VSTA Board - 03ec MCP61 IDE - 1849 03ec 939NF6G-VSTA Board - 03ee MCP61 Ethernet - 03ef MCP61 Ethernet - 1849 03ef 939NF6G-VSTA Board - 03f0 MCP61 High Definition Audio - 1849 0888 939NF6G-VSTA Board - 03f1 MCP61 USB Controller - 1849 03f1 939NF6G-VSTA Board - 03f2 MCP61 USB Controller - 1849 03f2 939NF6G-VSTA Board - 03f3 MCP61 PCI bridge - 1849 03f3 939NF6G-VSTA Board - 03f4 MCP61 SMU - 03f5 MCP61 Memory Controller - 1849 03eb 939NF6G-VSTA Board - 03f6 MCP61 SATA Controller - 1849 03f6 939NF6G-VSTA Board - 03f7 MCP61 SATA Controller - 0400 G84 [GeForce 8600 GTS] - 0401 G84 [GeForce 8600GT] - 0402 G84 [GeForce 8600 GT] - 1462 0910 NX8600GT-T2D256EZ - 0403 G84 [GeForce 8600 GS] - 0404 G84 [GeForce 8400 GS] - 1462 1230 NX8400GS-TD256E - 0405 G84 [GeForce 9500M GS] - 0407 G84 [GeForce 8600M GT] - 0408 G84 [GeForce 9650M GS] - 0409 G84 [GeForce 8700M GT] - 040a G84 [Quadro FX 370] - 040b Quadro NVS 320M - 040c Quadro FX 570M - 17aa 20d9 ThinkPad T61p - 040d Quadro FX 1600M - 040e G84 [Quadro FX 570] - 040f G84 [Quadro FX 1700] - 0420 G86 [GeForce 8400 SE] - 0421 G86 [GeForce 8500 GT] - 1462 0960 NX8500GT-TD512EH/M2 - 0422 G86 [GeForce 8400 GS] - 0423 G86 [GeForce 8300 GS] - 0424 G86 [GeForce 8400 GS] - 0425 G86 [GeForce 8600M GS] - 1025 0121 Aspire 5920G - 0426 G86 [GeForce 8400M GT] - 0427 G86 [GeForce 8400M GS] - 0428 G86 [GeForce 8400M G] - 0429 Quadro NVS 140M - 17aa 20d8 ThinkPad T61 - 042a Quadro NVS 130M - 042b Quadro NVS 135M - 042c G86 [GeForce 9400 GT] - 042d Quadro FX 360M - 042e G86 [GeForce 9300M G] - 042f G86 [Quadro NVS 290] - 0440 MCP65 LPC Bridge - 0441 MCP65 LPC Bridge - 0442 MCP65 LPC Bridge - 0443 MCP65 LPC Bridge - 0444 MCP65 Memory Controller - 0445 MCP65 Memory Controller - 0446 MCP65 SMBus - 0447 MCP65 SMU - 0448 MCP65 IDE - 0449 MCP65 PCI bridge - 044a MCP65 High Definition Audio - 044b MCP65 High Definition Audio - 044c MCP65 AHCI Controller - 044d MCP65 AHCI Controller - 044e MCP65 AHCI Controller - 044f MCP65 AHCI Controller - 0450 MCP65 Ethernet - 0451 MCP65 Ethernet - 0452 MCP65 Ethernet - 0453 MCP65 Ethernet - 0454 MCP65 USB Controller - 0455 MCP65 USB Controller - 0456 MCP65 USB Controller - 0457 MCP65 USB Controller - 0458 MCP65 PCI Express bridge - 0459 MCP65 PCI Express bridge - 045a MCP65 PCI Express bridge - 045c MCP65 SATA Controller - 045d MCP65 SATA Controller - 045e MCP65 SATA Controller - 045f MCP65 SATA Controller - 0531 C67 [GeForce 7150M / nForce 630M] - 0533 C67 [GeForce 7000M / nForce 610M] - 053a C68 [GeForce 7050 PV / nForce 630a] - 053b C68 [GeForce 7050 PV / nForce 630a] - 1043 8308 M2N68-AM Motherbord - 053e C68 [GeForce 7025 / nForce 630a] - 0541 MCP67 Memory Controller - 0542 MCP67 SMBus - 1043 8308 M2N68-AM Motherbord - 0543 MCP67 Co-processor - 0547 MCP67 Memory Controller - 1043 8308 M2N68-AM Motherbord - 1849 0547 ALiveNF7G-HDready - 0548 MCP67 ISA Bridge - 1043 8308 M2N68-AM Motherboard - 054c MCP67 Ethernet - 1043 8308 M2N68-AM Motherbord - 1849 054c ALiveNF7G-HDready, MCP67 Gigabit Ethernet - 054d MCP67 Ethernet - 054e MCP67 Ethernet -# forcedeth source code from Nvidi - 054f MCP67 Ethernet - 0550 MCP67 AHCI Controller - 1043 8308 M2N68-AM Motherboard - 0554 MCP67 AHCI Controller - 1043 8308 M2N68-AM Motherboard - 0555 MCP67 SATA Controller - 1043 8308 M2N68-AM Motherboard - 055c MCP67 High Definition Audio - 1043 8290 M2N68-AM Motherboard - 055d MCP67 High Definition Audio - 055e MCP67 OHCI USB 1.1 Controller - 1043 8308 M2N68-AM Motherboard - 055f MCP67 EHCI USB 2.0 Controller - 1043 8308 M2N68-AM Motherboard - 0560 MCP67 IDE Controller - f043 8308 M2N68-AM Motherboard - 0561 MCP67 PCI Bridge - 0562 MCP67 PCI Express Bridge - 1849 0562 ALiveNF7G-HDready - 0563 MCP67 PCI Express Bridge - 0568 MCP78S [GeForce 8200] Memory Controller - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 0568 K10N78FullHD-hSLI R3.0 Memory Controller - 0569 MCP78S [GeForce 8200] PCI Express Bridge - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 0569 K10N78FullHD-hSLI R3.0 PCI Express Bridge - 056a MCP73 [nForce 630i] USB 2.0 Controller (EHCI) - 056c MCP73 IDE - 1afa 7150 JW-IN7150-HD - 056d MCP73 PCI Express bridge - 056e MCP73 PCI Express bridge - 056f MCP73 PCI Express bridge - 05b8 PCI express bridge for GTX 295 - 05be PCI express bridge for Quadro Plex S4 / Tesla S870 / Tesla S1070 - 05e0 GT200b [GeForce GTX 295] - 05e1 GT200 [GeForce GTX 280] -# GT200 [GTX 260] or GT200 [GTX 260-216] or GT200b [GTX 260-216] - 05e2 GT200 [GeForce GTX 260] - 05e3 GT200b [GeForce GTX 285] - 05e6 GT200b [GeForce GTX 275] -# Found in GPU server Tesla S1070 - 05e7 GT200 [Tesla C1060] - 05ed GT200GL [Quadro Plex 2200 D2] - 05f8 GT200GL [Quadro Plex 2200 S4] - 05f9 GT200GL [Quadro CX] - 05fd GT200GL [Quadro FX 5800] - 05fe GT200GL [Quadro FX 4800] - 0600 G92 [GeForce 8800 GTS 512] - 0601 G92 [GeForce 9800 GT] - 0602 G92 [GeForce 8800 GT] - 0604 G92 [GeForce 9800 GX2] - 0605 G92 [GeForce 9800 GT] - 0606 G92 [GeForce 8800 GS] - 0608 G92 [GeForce 9800M GTX] - 0609 G92 [GeForce 8800M GTS] - 060a GT200 [GeForce GTX 280M] - 060b G92 [GeForce 9800M GT] - 060c G92 [GeForce 8800M GTX] - 060d G92 [GeForce 8800 GS] - 0610 G92 [GeForce 9600 GSO] - 1682 2385 GeForce 9600 GSO 768mb - 0611 G92 [GeForce 8800 GT] - 107d 2ab0 Winfast PX8800 GT PCI-E - 19da 1040 ZT-88TES2P-FSP - 0612 G92 [GeForce 9800 GTX] - 0613 G92 [GeForce 9800 GTX+] - 0614 G92 [GeForce 9800 GT] - 107d 2ab3 WinFast PX9800 GT (S-Fanpipe) - 0615 G92 [GeForce GTS 250] - 3842 1150 GeForce GTS 250 P/N 512-P3-1150-TR -# Overclocked - 3842 1151 GeForce GTS 250 P/N 512-P3-1151-TR - 3842 1155 GeForce GTS 250 P/N 01G-P3-1155-TR -# Overclocked - 3842 1156 GeForce GTS 250 P/N 01G-P3-1156-TR - 0617 G92 [GeForce 9800M GTX] - 0618 GT200 [GeForce GTX 260M] - 0619 G92GL [Quadro FX 4700 X2] - 061a G92 [Quadro FX 3700] - 061b G92GL [Quadro VX 200] - 061c G92M [Quadro FX 3600M] - 0622 G94 [GeForce 9600 GT] - 107d 2ac1 WinFast PX9600GT 1024MB - 1458 3481 GV-NX96T512HP - 0623 G94 [GeForce 9600 GS] - 0625 G94 [GeForce 9600 GSO 512] - 0626 G94 [GeForce GT 130] - 0627 G94 [GeForce GT 140] - 0628 G94 [GeForce 9800M GTS] - 062a G94 [GeForce 9700M GTS] - 062b G94 [GeForce 9800M GS] - 062c G94 [GeForce 9800M GTS] - 0631 G94M [GeForce GTS 160M] - 0632 G94M [GeForce GTS 150M] - 0638 G94 [Quadro FX 1800] - 063a G94M [Quadro FX 2700M] - 0640 G96 [GeForce 9500 GT] - 0641 G96 [GeForce 9400 GT] - 0643 G96 [GeForce 9500 GT] - 0644 G96 [GeForce 9500 GS] - 0645 G96 [GeForce 9500 GS] - 0646 G96 [GeForce GT 120] - 0647 G96 [GeForce 9600M GT] - 0648 G96 [GeForce 9600M GS] - 0649 G96 [GeForce 9600M GT] - 064a G96 [GeForce 9700M GT] - 064b G96 [GeForce 9500M G] - 064c G96 [GeForce 9650M GT] - 0651 G96 [GeForce G 110M] - 0652 G96 [GeForce GT 130M] - 0653 G96M [GeForce GT 120M] - 0658 G96 [Quadro FX 380] - 0659 G96 [Quadro FX 580] - 065b G96 [GeForce 9400 GT] - 065c G96M [Quadro FX 770M] - 06e0 G98 [GeForce 9300 GE] - 06e1 G98 [GeForce 9300 GS] - 06e2 G98 [GeForce 8400] - 06e3 G98 [GeForce 8300 GS] - 06e4 G98 [GeForce 8400 GS] - 1458 3475 GV-NX84S256HE [GeForce 8400 GS] - 06e5 G98 [GeForce 9300M GS] - 06e6 G98 [GeForce G100] - 06e7 G98 [GeForce 9300 SE] - 06e8 G98 [GeForce 9200M GS] - 06e9 G98 [GeForce 9300M GS] - 1043 19b2 U6V laptop - 06ea G86M [Quadro NVS 150M] - 06eb G98M [Quadro NVS 160M] - 06ec G98M [GeForce G 105M] - 06ef G98M [GeForce G 103M] - 06f8 G98 [Quadro NVS 420] - 06f9 G98 [Quadro FX 370 LP] - 06fa G98 [Quadro NVS 450] - 0751 MCP78S [GeForce 8200] Memory Controller - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 0751 K10N78FullHD-hSLI R3.0 Memory Controller - 0752 MCP78S [GeForce 8200] SMBus - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 0752 K10N78FullHD-hSLI R3.0 SMBus - 0753 MCP78S [GeForce 8200] Co-Processor - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 0753 K10N78FullHD-hSLI R3.0 Co-Processor - 0754 MCP78S [GeForce 8200] Memory Controller - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 0754 K10N78FullHD-hSLI R3.0 Memory Controller - 0759 MCP78S [GeForce 8200] IDE - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 0759 K10N78FullHD-hSLI R3.0 IDE - 075a MCP78S [GeForce 8200] PCI Bridge - 1043 82e8 M3N72-D - 1849 075a K10N78FullHD-hSLI R3.0 PCI Bridge - 075b MCP78S [GeForce 8200] PCI Express Bridge - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 075b K10N78FullHD-hSLI R3.0 PCI Express Bridge - 075c MCP78S [GeForce 8200] LPC Bridge - 1462 7508 K9N2GM-FIH - 1849 075c K10N78FullHD-hSLI R3.0 LPC Bridge - 075d nForce 750a LPC Bridge - 1043 82e8 M3N72-D - 0760 MCP77 Ethernet - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 0760 K10N78FullHD-hSLI R3.0 Ethernet - 0761 MCP77 Ethernet - 0762 MCP77 Ethernet - 0763 MCP77 Ethernet - 0774 MCP72XE/MCP72P/MCP78U/MCP78S High Definition Audio -# has a Realtek ALC1200 HDAudio Codec - 1043 82fe M3N72-D - 1462 7508 K9N2GM-FIH - 1849 3662 K10N78FullHD-hSLI R3.0 High Definition Audio - 0778 MCP78S [GeForce 8200] PCI Express Bridge - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 0778 K10N78FullHD-hSLI R3.0 PCI Express Bridge - 077a MCP78S [GeForce 8200] PCI Bridge - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 077a K10N78FullHD-hSLI R3.0 PCI Bridge - 077b MCP78S [GeForce 8200] OHCI USB 1.1 Controller - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 077b K10N78FullHD-hSLI R3.0 OHCI USB 1.1 Controller - 077c MCP78S [GeForce 8200] EHCI USB 2.0 Controller - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 077c K10N78FullHD-hSLI R3.0 EHCI USB 2.0 Controller - 077d MCP78S [GeForce 8200] OHCI USB 1.1 Controller - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 077d K10N78FullHD-hSLI R3.0 OHCI USB 1.1 Controller - 077e MCP78S [GeForce 8200] EHCI USB 2.0 Controller - 1043 82e8 M3N72-D - 1462 7508 K9N2GM-FIH - 1849 077e K10N78FullHD-hSLI R3.0 EHCI USB 2.0 Controller - 07c0 MCP73 Host Bridge - 1afa 7150 JW-IN7150-HD - 07c1 MCP73 Host Bridge - 07c2 MCP73 Host Bridge - 07c5 MCP73 Host Bridge - 07c8 MCP73 Memory Controller - 1afa 7150 JW-IN7150-HD - 07cb nForce 630i memory controller - 1afa 7150 JW-IN7150-HD - 07cd nForce 630i memory controller - 1afa 7150 JW-IN7150-HD - 07ce nForce 630i memory controller - 1afa 7150 JW-IN7150-HD - 07cf nForce 630i memory controller - 1afa 7150 JW-IN7150-HD - 07d0 nForce 630i memory controller - 1afa 7150 JW-IN7150-HD - 07d1 nForce 630i memory controller - 1afa 7150 JW-IN7150-HD - 07d2 nForce 630i memory controller - 1afa 7150 JW-IN7150-HD - 07d3 nForce 630i memory controller - 1afa 7150 JW-IN7150-HD - 07d6 nForce 630i memory controller - 1afa 7150 JW-IN7150-HD - 07d7 MCP73 LPC Bridge - 1afa 7150 JW-IN7150-HD - 07d8 MCP73 SMBus - 1afa 7150 JW-IN7150-HD - 07d9 MCP73 Memory Controller - 1afa 7150 JW-IN7150-HD - 07da MCP73 Co-processor - 1afa 7150 JW-IN7150-HD - 07dc MCP73 Ethernet - 07dd MCP73 Ethernet - 07de MCP73 Ethernet - 07df MCP73 Ethernet - 07e0 C73 [GeForce 7150 / nForce 630i] - 1afa 7150 JW-IN7150-HD - 07e1 C73 [GeForce 7100 / nForce 630i] - 07e2 GeForce 7050 / nForce 630i - 07e3 C73 [GeForce 7050 / nForce 610i] - 07e5 C73 [GeForce 7100 / nForce 620i] - 07f0 MCP73 IDE - 07f4 GeForce 7100/nForce 630i SATA - 07f8 MCP73 SATA RAID Controller - 07fc MCP73 High Definition Audio - 10de 07fc MCP73 High Definition Audio - 07fe GeForce 7100/nForce 630i USB - 1afa 7150 JW-IN7150-HD - 0844 C77 [GeForce 9100M G] - 0845 C77 [GeForce 8200M G] - 0847 C78 [GeForce 9100] - 0848 C77 [GeForce 8300] - 0849 C77 [GeForce 8200] - 1462 7508 K9N2GM-FIH - 1849 0849 K10N78FullHD-hSLI R3.0 GeForce 8200 - 084a C77 [nForce 730a] - 084b C77 [GeForce 8200] - 084c C77 [nForce 780a SLI] - 084d C77 [nForce 750a SLI] - 1043 82e8 M3N72-D mGPU - 084f C77 [GeForce 8100 / nForce 720a] - 0860 C79 [GeForce 9300] - 0861 C79 [GeForce 9400] - 0862 C79 [GeForce 9400M G] - 0863 C79 [GeForce 9400M] - 0864 C79 [GeForce 9300] - 0865 C79 [GeForce 9300] - 0866 C79 [GeForce 9400M G] - 0867 C79 [GeForce 9400] - 0868 C79 [nForce 760i SLI] - 086a C79 [GeForce 9400] - 086c C79 [GeForce 9300 / nForce 730i] - 086d C79 [GeForce 9200] - 086e C79 [GeForce 9100M G] - 086f C79 [GeForce 9200M G] - 0870 C79 [GeForce 9400M] - 0871 C79 [GeForce 9200] - 0872 C79 [GeForce G102M] - 0873 C79 [GeForce G102M] - 087a C79 [Quadro FX 470] - 087d ION VGA - 087f C79 [Quadro FX 470M] - 0a20 GT200 [GeForce GT 220] - 0a60 GT200 [GeForce G210] - 0a65 GT200 [GeForce 210] - 0a80 MCP79 Host Bridge - 0a81 MCP79 Host Bridge - 0a82 MCP79 Host Bridge - 0a83 MCP79 Host Bridge - 0a84 MCP79 Host Bridge - 0a85 MCP79 Host Bridge - 0a86 MCP79 Host Bridge - 0a87 MCP79 Host Bridge - 0a88 MCP79 Memory Controller - 0a89 MCP79 Memory Controller - 0aa0 MCP79 PCI Express Bridge - 0aa2 MCP79 SMBus - 0aa3 MCP79 Co-processor - 0aa4 MCP79 Memory Controller - 0aa5 MCP79 OHCI USB 1.1 Controller - 0aa6 MCP79 EHCI USB 2.0 Controller - 0aa7 MCP79 OHCI USB 1.1 Controller - 0aa8 MCP79 OHCI USB 1.1 Controller - 0aa9 MCP79 EHCI USB 2.0 Controller - 0aaa MCP79 EHCI USB 2.0 Controller - 0aab MCP79 PCI Bridge - 0aac MCP79 LPC Bridge - 0aad MCP79 LPC Bridge - 0aae MCP79 LPC Bridge - 0aaf MCP79 LPC Bridge - 0ab0 MCP79 Ethernet - 0ab1 MCP79 Ethernet - 0ab2 MCP79 Ethernet - 0ab3 MCP79 Ethernet - 0ab4 MCP79 SATA Controller - 0ab5 MCP79 SATA Controller - 0ab6 MCP79 SATA Controller - 0ab7 MCP79 SATA Controller - 0ab8 MCP79 AHCI Controller - 0ab9 MCP79 AHCI Controller - 0aba MCP79 AHCI Controller - 0abb MCP79 AHCI Controller - 0abc MCP79 RAID Controller - 0abd MCP79 RAID Controller - 0abe MCP79 RAID Controller - 0abf MCP79 RAID Controller - 0ac0 MCP79 High Definition Audio - 0ac1 MCP79 High Definition Audio - 0ac2 MCP79 High Definition Audio - 0ac3 MCP79 High Definition Audio - 0ac4 MCP79 PCI Express Bridge - 0ac5 MCP79 PCI Express Bridge - 0ac6 MCP79 PCI Express Bridge - 0ac7 MCP79 PCI Express Bridge - 0ac8 MCP79 PCI Express Bridge - 0ad0 MCP78S [GeForce 8200] SATA Controller (non-AHCI mode) - 1462 7508 K9N2GM-FIH - 1849 0ad0 K10N78FullHD-hSLI R3.0 IDE - 0ad4 MCP78S [GeForce 8200] AHCI Controller - 1043 82e8 M3N72-D - 1849 0ad4 K10N78FullHD-hSLI R3.0 AHCI Controller - 0ad8 MCP78S [GeForce 8200] SATA Controller (RAID mode) -10df Emulex Corporation - 1ae5 LP6000 Fibre Channel Host Adapter - e100 Proteus-X: LightPulse IOV Fibre Channel Host Adapter - e180 Proteus-X: LightPulse IOV Fibre Channel Host Adapter - f011 Saturn: LightPulse Fibre Channel Host Adapter - f015 Saturn: LightPulse Fibre Channel Host Adapter - f085 LP850 Fibre Channel Host Adapter - f095 LP952 Fibre Channel Host Adapter - f098 LP982 Fibre Channel Host Adapter - f0a1 Thor LightPulse Fibre Channel Host Adapter - f0a5 Thor LightPulse Fibre Channel Host Adapter - f0b5 Viper LightPulse Fibre Channel Host Adapter - f0d1 Helios LightPulse Fibre Channel Host Adapter - f0d5 Helios LightPulse Fibre Channel Host Adapter - f0e1 Zephyr LightPulse Fibre Channel Host Adapter - f0e5 Zephyr LightPulse Fibre Channel Host Adapter - f0f5 Neptune LightPulse Fibre Channel Host Adapter - f100 Saturn-X: LightPulse Fibre Channel Host Adapter - f111 Saturn-X LightPulse Fibre Channel Host Adapter - f112 Saturn-X LightPulse Fibre Channel Host Adapter - f700 LP7000 Fibre Channel Host Adapter - f701 LP7000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) - f800 LP8000 Fibre Channel Host Adapter - f801 LP8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) - f900 LP9000 Fibre Channel Host Adapter - f901 LP9000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) - f980 LP9802 Fibre Channel Host Adapter - f981 LP9802 Fibre Channel Host Adapter Alternate ID - f982 LP9802 Fibre Channel Host Adapter Alternate ID - fa00 Thor-X LightPulse Fibre Channel Host Adapter - fb00 Viper LightPulse Fibre Channel Host Adapter - fc00 Thor-X LightPulse Fibre Channel Host Adapter - 10df fc00 LP10000 LightPulse Fibre Channel Host Adapter - fc10 Helios-X LightPulse Fibre Channel Host Adapter - fc20 Zephyr-X LightPulse Fibre Channel Host Adapter - fc40 Saturn-X: LightPulse Fibre Channel Host Adapter - fc50 Proteus-X: LightPulse IOV Fibre Channel Host Adapter - fd00 Helios-X LightPulse Fibre Channel Host Adapter - fd11 Helios-X LightPulse Fibre Channel Host Adapter - fd12 Helios-X LightPulse Fibre Channel Host Adapter - fe00 Zephyr-X LightPulse Fibre Channel Host Adapter - fe05 Zephyr-X: LightPulse FCoE Adapter - fe11 Zephyr-X LightPulse Fibre Channel Host Adapter - fe12 Zephyr-X LightPulse FCoE Adapter - ff00 Neptune LightPulse Fibre Channel Host Adapter -10e0 Integrated Micro Solutions Inc. - 5026 IMS5026/27/28 - 5027 IMS5027 - 5028 IMS5028 - 8849 IMS8849 - 8853 IMS8853 - 9128 IMS9128 [Twin turbo 128] -10e1 Tekram Technology Co.,Ltd. - 0391 TRM-S1040 - 10e1 0391 DC-315U SCSI-3 Host Adapter - 690c DC-690c - dc29 DC-290 -10e2 Aptix Corporation -10e3 Tundra Semiconductor Corp. - 0000 CA91C042 [Universe] - 0108 Tsi108 Host Bridge for Single PowerPC - 0148 Tsi148 [Tempe] - 1775 1100 VR11 Single Board Computer - 0860 CA91C860 [QSpan] - 0862 CA91C862A [QSpan-II] - 8260 CA91L8200B [Dual PCI PowerSpan II] - 8261 CA91L8260B [Single PCI PowerSpan II] - a108 Tsi109 Host Bridge for Dual PowerPC -10e4 Tandem Computers - 8029 Realtek 8029 Network Card -10e5 Micro Industries Corporation -10e6 Gainbery Computer Products Inc. -10e7 Vadem -10e8 Applied Micro Circuits Corp. - 1072 INES GPIB-PCI (AMCC5920 based) - 2011 Q-Motion Video Capture/Edit board - 4750 S5930 [Matchmaker] - 5920 S5920 - 8043 LANai4.x [Myrinet LANai interface chip] - 8062 S5933_PARASTATION - 807d S5933 [Matchmaker] - 8088 Kongsberg Spacetec Format Synchronizer - 8089 Kongsberg Spacetec Serial Output Board - 809c S5933_HEPC3 - 80b9 Harmonix Hi-Card P8 (4x active ISDN BRI) - 80d7 PCI-9112 - 80d9 PCI-9118 - 80da PCI-9812 - 80fc APCI1500 Signal processing controller (16 dig. inputs + 16 dig. outputs) - 811a PCI-IEEE1355-DS-DE Interface - 814c Fastcom ESCC-PCI (Commtech, Inc.) - 8170 S5933 [Matchmaker] (Chipset Development Tool) - 81e6 Multimedia video controller - 828d APCI3001 Signal processing controller (up to 16 analog inputs) - 8291 Fastcom 232/8-PCI (Commtech, Inc.) - 82c4 Fastcom 422/4-PCI (Commtech, Inc.) - 82c5 Fastcom 422/2-PCI (Commtech, Inc.) - 82c6 Fastcom IG422/1-PCI (Commtech, Inc.) - 82c7 Fastcom IG232/2-PCI (Commtech, Inc.) - 82ca Fastcom 232/4-PCI (Commtech, Inc.) - 82db AJA HDNTV HD SDI Framestore - 82e2 Fastcom DIO24H-PCI (Commtech, Inc.) - 8406 PCIcanx/PCIcan CAN interface [Kvaser AB] - 8407 PCIcan II CAN interface (A1021, PCB-07, PCB-08) [Kvaser AB] - 8851 S5933 on Innes Corp FM Radio Capture card -10e9 Alps Electric Co., Ltd. -10ea Intergraphics Systems - 1680 IGA-1680 - 1682 IGA-1682 - 1683 IGA-1683 - 2000 CyberPro 2000 - 2010 CyberPro 2000A - 5000 CyberPro 5000 - 5050 CyberPro 5050 - 5202 CyberPro 5202 -# CyberPro5202 Audio Function - 5252 CyberPro5252 -10eb Artists Graphics - 0101 3GA - 8111 Twist3 Frame Grabber -10ec Realtek Semiconductor Co., Ltd. - 0139 Zonet Zen3200 - 0260 Realtek 260 High Definition Audio - 0261 Realtek 261 High Definition Audio - 0262 Realtek 262 High Definition Audio - 0280 Realtek 280 High Definition Audio - 0660 Realtek 660 High Definition Audio - 0662 Realtek 662 High Definition Audio - 0861 Realtek 861 High Definition Audio - 0862 Realtek 862 High Definition Audio - 0880 Realtek 880 High Definition Audio - 0883 Realtek 883 High Definition Audio - 1025 1605 TravelMate 5600 series - 0885 Realtek 885 High Definition Audio - 0888 Realtek 888 High Definition Audio - 8029 RTL-8029(AS) - 10b8 2011 EZ-Card (SMC1208) - 10ec 8029 RTL-8029(AS) - 1113 1208 EN1208 - 1186 0300 DE-528 - 1259 2400 AT-2400 - 1af4 1100 Qemu virtual machine - 8129 RTL-8129 - 10ec 8129 RT8129 Fast Ethernet Adapter - 11ec 8129 RT8129 Fast Ethernet Adapter - 8136 RTL8101E/RTL8102E PCI Express Fast Ethernet controller - 1179 ff64 RTL8102E PCI-E Fast Ethernet NIC - 8138 RT8139 (B/C) Cardbus Fast Ethernet Adapter - 10ec 8138 RT8139 (B/C) Fast Ethernet Adapter - 8139 RTL-8139/8139C/8139C+ - 0357 000a TTP-Monitoring Card V2.0 - 1025 005a TravelMate 290 - 1025 8920 ALN-325 - 1025 8921 ALN-325 - 103c 006a NX9500 - 103c 30d9 Presario C700 - 1043 1045 L8400B or L3C/S notebook - 1043 8109 P5P800-MX Mainboard - 1071 8160 MIM2000 - 10bd 0320 EP-320X-R - 10f7 8338 Panasonic CF-Y5 laptop - 1113 ec01 FNC-0107TX - 1186 1300 DFE-538TX - 1186 1320 SN5200 - 1186 8139 DRN-32TX - 11f6 8139 FN22-3(A) LinxPRO Ethernet Adapter - 1259 2500 AT-2500TX - 1259 2503 AT-2500TX/ACPI - 1385 f31d FA311 v2 - 1395 2100 AMB2100 - 1429 d010 ND010/ND012 - 1432 9130 EN-9130TX - 1436 8139 RT8139 - 144d c00c P30/P35 notebook - 1458 e000 GA-7VM400M/7VT600 Motherboard - 1462 0131 MS-1013 Notebook - 1462 217c Aspire L250 - 1462 788c 865PE Neo2-V Mainboard - 146c 1439 FE-1439TX - 1489 6001 GF100TXRII - 1489 6002 GF100TXRA - 149c 139a LFE-8139ATX - 149c 8139 LFE-8139TX - 14cb 0200 LNR-100 Family 10/100 Base-TX Ethernet - 1565 2300 P4TSV Onboard LAN (RTL8100B) - 1631 7003 Onboard RTL8111 on GA-8SIML Rev1.0 Mainboard - 1695 9001 Onboard RTL8101L 10/100 MBit - 16ec 00ff USR997900A - 1799 5000 F5D5000 PCI Card/Desktop Network PCI Card - 1799 5010 F5D5010 CardBus Notebook Network Card - 187e 3303 FN312 - 1904 8139 RTL8139D Fast Ethernet Adapter - 2646 0001 KNE120TX - 8e2e 7000 KF-230TX - 8e2e 7100 KF-230TX/2 - a0a0 0007 ALN-325C - 8167 RTL-8110SC/8169SC Gigabit Ethernet - 1458 e000 GA-MA69G-S3H Motherboard - 1462 235c P965 Neo MS-7235 mainboard - 1462 236c 945P Neo3-F motherboard - 8168 RTL8111/8168B PCI Express Gigabit Ethernet controller - 1043 11f5 A6J-Q008 - 1043 16d5 U6V laptop - 1043 81aa P5B - 1458 e000 GA-EP45-DS5 Motherboard - 1462 238c Onboard RTL8111b on MSI P965 Platinum Mainboard - 1462 368c K9AG Neo2 - 1775 11cc CC11/CL11 - 1849 8168 Motherboard (one of many) - 8169 RTL-8169 Gigabit Ethernet - 1025 0079 Aspire 5024WLMi - 10bd 3202 EP-320G-TX1 32-bit PCI Gigabit Ethernet Adapter - 1259 c107 CG-LAPCIGT - 1371 434e ProG-2000L - 1385 311a GA311 - 1458 e000 GA-8I915ME-G Mainboard - 1462 030c K8N Neo-FSR v2.0 mainboard - 1462 065c Hetis 865GV-E (MS-7065) - 1462 702c K8T NEO 2 motherboard - 1462 7094 K8T Neo2-F V2.0 - 16ec 011f USR997903 - 1734 1091 D2030-A1 - a0a0 0449 AK86-L motherboard - 8180 RTL8180L 802.11b MAC - 8185 RTL-8185 IEEE 802.11a/b/g Wireless LAN Controller - 8197 SmartLAN56 56K Modem - 8199 RTL8187SE Wireless LAN Controller -10ed Ascii Corporation - 7310 V7310 -10ee Xilinx Corporation - 0001 EUROCOM for PCI (ECOMP) - 0002 Octal E1/T1 for PCI ETP Card - 0205 Wildcard TE205P - 0210 Wildcard TE210P - 0314 Wildcard TE405P/TE410P (1st Gen) - 0405 Wildcard TE405P (2nd Gen) - 0410 Wildcard TE410P (2nd Gen) - 3fc0 RME Digi96 - 3fc1 RME Digi96/8 - 3fc2 RME Digi96/8 Pro - 3fc3 RME Digi96/8 Pad - 3fc4 RME Digi9652 (Hammerfall) - 3fc5 RME Hammerfall DSP - 3fc6 RME Hammerfall DSP MADI - 8380 Ellips ProfiXpress Profibus Master - 8381 Ellips Santos Frame Grabber - d154 Copley Controls CAN card (PCI-CAN-02) -# SED is assigned Xilinx PCI device IDs ebf0 through ebff - ebf0 SED Systems Modulator/Demodulator - ebf1 SED Systems Audio Interface Card - ebf2 SED Systems Common PCI Interface -10ef Racore Computer Products, Inc. - 8154 M815x Token Ring Adapter -10f0 Peritek Corporation -10f1 Tyan Computer - 2865 Tyan Thunder K8E S2865 - 5300 Tyan S5380 Mainboard -10f2 Achme Computer, Inc. -10f3 Alaris, Inc. -10f4 S-MOS Systems, Inc. -10f5 NKK Corporation - a001 NDR4000 [NR4600 Bridge] -10f6 Creative Electronic Systems SA -10f7 Matsushita Electric Industrial Co., Ltd. -10f8 Altos India Ltd -10f9 PC Direct -10fa Truevision - 000c TARGA 1000 -10fb Thesys Gesellschaft fuer Mikroelektronik mbH - 186f TH 6255 -10fc I-O Data Device, Inc. -# What's in the cardbus end of a Sony ACR-A01 card, comes with newer Vaio CD-RW drives - 0003 Cardbus IDE Controller - 0005 Cardbus SCSI CBSC II -10fd Soyo Computer, Inc -10fe Fast Multimedia AG -10ff NCube -1100 Jazz Multimedia -1101 Initio Corporation - 0002 INI-920 Ultra SCSI Adapter - 1060 INI-A100U2W - 1622 INI-1623 PCI SATA-II Controller - 9100 INI-9100/9100W - 9400 INI-940 Fast Wide SCSI Adapter - 9401 INI-935 Fast Wide SCSI Adapter - 9500 INI-950 SCSI Adapter - 9502 INI-950P Ultra Wide SCSI Adapter -1102 Creative Labs - 0002 SB Live! EMU10k1 - 100a 1102 SB Live! 5.1 Digital OEM SB0220 EMU10K1-JFF - 1102 0020 CT4850 SBLive! Value - 1102 0021 CT4620 SBLive! - 1102 002f SBLive! mainboard implementation - 1102 100a SB Live! 5.1 Digital OEM [SB0220] - 1102 4001 E-mu APS - 1102 8022 CT4780 SBLive! Value - 1102 8023 CT4790 SoundBlaster PCI512 - 1102 8024 CT4760 SBLive! - 1102 8025 SBLive! Mainboard Implementation - 1102 8026 CT4830 SBLive! Value - 1102 8027 CT4832 SBLive! Value - 1102 8028 CT4760 SBLive! OEM version - 1102 8031 CT4831 SBLive! Value - 1102 8040 CT4760 SBLive! - 1102 8051 CT4850 SBLive! Value - 1102 8061 SBLive! Player 5.1 - 1102 8064 SBLive! 5.1 Model SB0100 - 1102 8065 SBLive! 5.1 Digital Model SB0220 - 1102 8066 Live! 5.1 Digital [SB0228] - 1102 8067 SBLive! 5.1 eMicro 28028 - 0004 SB Audigy - 1102 0051 SB0090 Audigy Player - 1102 0053 SB0090 Audigy Player/OEM - 1102 0058 SB0090 Audigy Player/OEM - 1102 1002 SB Audigy2 Platinum - 1102 1007 SB0240 Audigy 2 Platinum 6.1 - 1102 1009 SB Audigy2 OEM HP - 1102 2002 SB Audigy 2 ZS (SB0350) - 1102 4001 E-MU 1010 - 0005 SB X-Fi - 1102 0021 X-Fi Platinum - 1102 002c X-Fi XtremeGamer FATAL1TY PRO - 1102 1003 X-Fi XtremeMusic - 0006 [SB Live! Value] EMU10k1X - 0007 CA0106 Soundblaster - 1102 0007 SBLive! 24bit - 1102 1001 SB0310 Audigy LS - 1102 1002 SB0312 Audigy LS - 1102 1006 SB0410 SBLive! 24-bit - 1102 100a SB0570 [SB Audigy SE] - 1102 1012 SB0790 X-Fi XA - 1102 1013 Soundblaster X-Fi Xtreme Audio - 1462 1009 K8N Diamond - 0008 SB0400 Audigy2 Value - 1102 0008 EMU0404 Digital Audio System - 1102 4004 EMU1010 Digital Audio System [MAEM8960] - 0009 [SB X-Fi Xtreme Audio] CA0110-IBG - 1102 0010 [SB X-Fi Xtreme Audio] CA0110-IBG - 1102 0018 SB1040 - 000b X-Fi Titanium series [EMU20k2] - 1102 0041 SB X-Fi Titanium PCI-e [SB0880] - 4001 SB Audigy FireWire Port - 1102 0010 SB Audigy FireWire Port - 7002 SB Live! Game Port - 1102 0020 Gameport Joystick - 7003 SB Audigy Game Port - 1102 0040 SB Audigy Game Port - 1102 0060 SB Audigy2 MIDI/Game Port - 7004 [SB Live! Value] Input device controller - 7005 SB Audigy LS Game Port - 1102 1001 SB0310 Audigy LS MIDI/Game port - 1102 1002 SB0312 Audigy LS MIDI/Game port - 7006 [SB X-Fi Xtreme Audio] CA0110-IBG PCI to PCIe Bridge - 8938 Ectiva EV1938 - 1033 80e5 SlimTower-Jim (NEC) - 1071 7150 Mitac 7150 - 110a 5938 Siemens Scenic Mobile 510PIII - 13bd 100c Ceres-C (Sharp, Intel BX) - 13bd 100d Sharp, Intel Banister - 13bd 100e TwinHead P09S/P09S3 (Sharp) - 13bd f6f1 Marlin (Sharp) - 14ff 0e70 P88TE (TWINHEAD INTERNATIONAL Corp) - 14ff c401 Notebook 9100/9200/2000 (TWINHEAD INTERNATIONAL Corp) - 156d b400 G400 - Geo (AlphaTop (Taiwan)) - 156d b550 G560 (AlphaTop (Taiwan)) - 156d b560 G560 (AlphaTop (Taiwan)) - 156d b700 G700/U700 (AlphaTop (Taiwan)) - 156d b795 G795 (AlphaTop (Taiwan)) - 156d b797 G797 (AlphaTop (Taiwan)) -# nee Triones Technologies, Inc. -1103 HighPoint Technologies, Inc. - 0003 HPT343/345/346/363 - 0004 HPT366/368/370/370A/372/372N - 1103 0001 HPT370A - 1103 0004 HPT366 UDMA66 (r1) / HPT368 UDMA66 (r2) / HPT370 UDMA100 (r3) / HPT370 UDMA100 RAID (r4) - 1103 0005 HPT370 UDMA100 - 1103 0006 HPT302/302N - 0005 HPT372A/372N - 0006 HPT302/302N - 0007 HPT371/371N - 0008 HPT374 - 0009 HPT372N - 1720 RocketRAID 1720 (2x SATA II RAID Controller) - 1740 RocketRAID 1740 - 1742 RocketRAID 1742 - 2300 RocketRAID 230x 4 Port SATA-II Controller - 2310 RocketRAID 2310 4 Port SATA-II Controller - 2320 RocketRAID 2320 SATA-II Controller - 2322 RocketRAID 2322 SATA-II Controller - 2340 RocketRAID 2340 16 Port SATA-II Controller - 2640 RocketRAID 2640 SAS/SATA Controller - 3220 RocketRAID 3220 - 3320 RocketRAID 3320 -1104 RasterOps Corp. -1105 Sigma Designs, Inc. - 1105 REALmagic Xcard MPEG 1/2/3/4 DVD Decoder - 8300 REALmagic Hollywood Plus DVD Decoder - 8400 EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder - 8401 EM8401 REALmagic DVD/MPEG-2 A/V Decoder - 8470 EM8470 REALmagic DVD/MPEG-4 A/V Decoder - 8471 EM8471 REALmagic DVD/MPEG-4 A/V Decoder - 8475 EM8475 REALmagic DVD/MPEG-4 A/V Decoder - 1105 0001 REALmagic X-Card - 8476 EM8476 REALmagic DVD/MPEG-4 A/V Decoder - 127d 0000 CineView II - 8485 EM8485 REALmagic DVD/MPEG-4 A/V Decoder - 8486 EM8486 REALmagic DVD/MPEG-4 A/V Decoder - c622 EM8622L MPEG-4.10 (H.264) and SMPTE 421M (VC-1) A/V Decoder -1106 VIA Technologies, Inc. - 0102 Embedded VIA Ethernet Controller - 0130 VT6305 1394.A Controller - 0198 P4X600 Host Bridge - 0204 K8M800 Host Bridge - 0208 PT890 Host Bridge - 0238 K8T890 Host Bridge - 0258 PT880 Host Bridge - 0259 CN333/CN400/PM880 Host Bridge - 0269 KT880 Host Bridge - 0282 K8T800Pro Host Bridge - 1043 80a3 A8V Deluxe - 0290 K8M890 Host Bridge - 0293 PM896 Host Bridge - 0296 P4M800 Host Bridge - 0305 VT8363/8365 [KT133/KM133] - 1019 0987 K7VZA Mainboard - 1043 8033 A7V Mainboard - 1043 803e A7V-E Mainboard - 1043 8042 A7V133/A7V133-C Mainboard - 147b a401 KT7/KT7-RAID/KT7A/KT7A-RAID Mainboard - 0308 PT880 Ultra/PT894 Host Bridge - 1043 8199 P4V800D-X Mainboard - 0314 CN700/VN800/P4M800CE/Pro Host Bridge - 0324 CX700/VX700 Host Bridge - 0327 P4M890 Host Bridge - 0336 K8M890CE Host Bridge - 0340 PT900 Host Bridge - 0351 K8T890CF Host Bridge - 0353 VX800 Host Bridge - 0364 CN896/VN896/P4M900 Host Bridge - 1043 81ce P5VD2-VM mothervoard - 0391 VT8371 [KX133] - 0409 VX855/VX875 Host Bridge: Host Control - 0415 PATA IDE Host Controller - 0501 VT8501 [Apollo MVP4] - 0505 VT82C505 -# Shares chip with :0576. The VT82C576M has :1571 instead of :0561. - 0561 VT82C576MV - 0571 VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE - 1019 0985 P6VXA Motherboard - 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) - 1043 8052 VT8233A Bus Master ATA100/66/33 IDE - 1043 808c A7V8X / A7V333 motherboard - 1043 80a1 A7V8X-X motherboard rev. 1.01 - 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard - 1106 0571 VT82C586/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE - 1179 0001 Magnia Z310 - 1297 f641 FX41 motherboard - 1458 5002 GA-7VAX Mainboard - 1462 5901 KT6 Delta-FIS2R (MS-6590) - 1462 7020 K8T NEO 2 motherboard - 1462 7094 K8T Neo2-F V2.0 - 1462 7120 KT4AV motherboard - 1462 7181 K8MM3-V mainboard - 147b 1407 KV8-MAX3 motherboard - 1849 0571 K7VT2/K7VT6 motherboard - 0576 VT82C576 3V [Apollo Master] - 0581 CX700/VX700 RAID Controller -# Upgrade bios to get correct ID: 5324 instead of 0581 - 1106 0581 Wrong IDE ID - 0585 VT82C585VP [Apollo VP1/VPX] - 0586 VT82C586/A/B PCI-to-ISA [Apollo VP] - 1106 0000 MVP3 ISA Bridge - 0591 VT8237A SATA 2-Port Controller - 0595 VT82C595 [Apollo VP2] - 0596 VT82C596 ISA [Mobile South] - 1106 0000 VT82C596/A/B PCI to ISA Bridge - 1458 0596 VT82C596/A/B PCI to ISA Bridge - 0597 VT82C597 [Apollo VP3] - 0598 VT82C598 [Apollo MVP3] - 0601 VT8601 [Apollo ProMedia] - 0605 VT8605 [ProSavage PM133] - 103c 1254 D9840-60001 [Brio BA410 Motherboard] - 1043 802c CUV4X mainboard - 0680 VT82C680 [Apollo P6] - 0686 VT82C686 [Apollo Super South] - 1019 0985 P6VXA Motherboard - 103c 1256 D9840-60001 [Brio BA410 Motherboard] - 1043 802c CUV4X mainboard - 1043 8033 A7V Mainboard - 1043 803e A7V-E Mainboard - 1043 8040 A7M266 Mainboard - 1043 8042 A7V133/A7V133-C Mainboard - 1106 0000 VT82C686/A PCI to ISA Bridge - 1106 0686 VT82C686/A PCI to ISA Bridge - 1179 0001 Magnia Z310 - 147b a702 KG7-Lite Mainboard - 0691 VT82C693A/694x [Apollo PRO133x] - 1019 0985 P6VXA Motherboard - 1179 0001 Magnia Z310 - 1458 0691 VT82C691 Apollo Pro System Controller - 0693 VT82C693 [Apollo Pro Plus] - 0698 VT82C693A [Apollo Pro133 AGP] - 0926 VT82C926 [Amazon] - 1000 VT82C570MV - 1106 VT82C570MV - 1122 VX800/VX820 Chrome 9 HC3 Integrated Graphics - 1204 K8M800 Host Bridge - 1208 PT890 Host Bridge - 1238 K8T890 Host Bridge - 1258 PT880 Host Bridge - 1259 CN333/CN400/PM880 Host Bridge - 1269 KT880 Host Bridge - 1282 K8T800Pro Host Bridge - 1290 K8M890 Host Bridge - 1293 PM896 Host Bridge - 1296 P4M800 Host Bridge - 1308 PT894 Host Bridge - 1314 CN700/VN800/P4M800CE/Pro Host Bridge - 1324 CX700/VX700 Host Bridge - 1327 P4M890 Host Bridge - 1336 K8M890CE Host Bridge - 1340 PT900 Host Bridge - 1351 VT3351 Host Bridge - 1353 VX800/VX820 Error Reporting - 1364 CN896/VN896/P4M900 Host Bridge - 1409 VX855/VX875 Error Reporting - 1571 VT82C576M/VT82C586 - 1595 VT82C595/97 [Apollo VP2/97] - 1732 VT1732 [Envy24 II] PCI Multi-Channel Audio Controller - 2106 VIA Rhine Family Fast Ethernet Adapter (VT6105) - 2204 K8M800 Host Bridge - 2208 PT890 Host Bridge - 2238 K8T890 Host Bridge - 2258 PT880 Host Bridge - 2259 CN333/CN400/PM880 CPU Host Bridge - 2269 KT880 Host Bridge - 2282 K8T800Pro Host Bridge - 2290 K8M890 Host Bridge - 2293 PM896 Host Bridge - 2296 P4M800 Host Bridge - 2308 PT894 Host Bridge - 2314 CN700/VN800/P4M800CE/Pro Host Bridge - 2324 CX700/VX700 Host Bridge - 2327 P4M890 Host Bridge - 2336 K8M890CE Host Bridge - 2340 PT900 Host Bridge - 2351 VT3351 Host Bridge - 2353 VX800/VX820 Host Bus Control - 2364 CN896/VN896/P4M900 Host Bridge - 2409 VX855/VX875 Host Bus Control - 287a VT8251 PCI to PCI Bridge - 287b VT8251 Host Bridge - 287c VT8251 PCIE Root Port - 287d VT8251 PCIE Root Port - 287e VT8251 Ultra VLINK Controller - 3022 CLE266 - 3038 VT82xxxxx UHCI USB 1.1 Controller -# possibly Hewlett-Packard D9840-60001 [Brio BA410 Motherboard] - 0925 1234 VA-502 Mainboard - 1019 0985 P6VXA Motherboard - 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) - 1043 8080 A7V333 motherboard - 1043 808c VT6202 USB2.0 4 port controller - 1043 80a1 A7V8X-X motherboard - 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard - 1179 0001 Magnia Z310 - 1458 5004 GA-7VAX Mainboard - 1462 5901 KT6 Delta-FIS2R (MS-6590) - 1462 7020 K8T NEO 2 motherboard - 1462 7094 K8T Neo2-F V2.0 - 1462 7120 KT4AV motherboard - 1462 7181 K8MM3-V mainboard - 147b 1407 KV8-MAX3 motherboard - 182d 201d CN-029 USB2.0 4 port PCI Card - 1849 3038 K7VT6 - 3040 VT82C586B ACPI - 3043 VT86C100A [Rhine] - 10bd 0000 VT86C100A Fast Ethernet Adapter - 1106 0100 VT86C100A Fast Ethernet Adapter - 1186 1400 DFE-530TX rev A - 3044 VT6306 Fire II IEEE 1394 OHCI Link Layer Controller - 0010 0001 IEEE 1394 4port DCST 1394-3+1B - 1025 005a TravelMate 290 - 1043 808a A8V/A8N/P4P800 series motherboard - 1458 1000 GA-7VT600-1394 Motherboard - 1462 207d K8NGM2 series motherboard - 1462 217d Aspire L250 - 1462 590d KT6 Delta-FIS2R (MS-6590) - 1462 702d K8T NEO 2 motherboard - 1462 971d MS-6917 - 3050 VT82C596 Power Management - 3051 VT82C596 Power Management - 3053 VT6105M [Rhine-III] - 3057 VT82C686 [Apollo Super ACPI] - 1019 0985 P6VXA Motherboard - 1019 0987 K7VZA Motherboard - 1043 8033 A7V Mainboard - 1043 803e A7V-E Mainboard - 1043 8040 A7M266 Mainboard - 1043 8042 A7V133/A7V133-C Mainboard - 1179 0001 Magnia Z310 - 3058 VT82C686 AC97 Audio Controller - 0e11 0097 SoundMax Digital Integrated Audio - 0e11 b194 Soundmax integrated digital audio - 1019 0985 P6VXA Motherboard - 1019 0987 K7VZA Motherboard - 103c 1251 D9840-60001 [Brio BA410 Motherboard] - 1043 1106 A7V133/A7V133-C Mainboard - 1106 4511 Onboard Audio on EP7KXA - 1106 aa03 VT1612A AC'97 Audio Controller - 11d4 5348 AD1881A audio - 1458 7600 Onboard Audio - 1462 3091 MS-6309 Onboard Audio - 1462 3092 MS-6309 v2.x Mainboard (VIA VT1611A codec) - 1462 3300 MS-6330 Onboard Audio - 15dd 7609 Onboard Audio - 3059 VT8233/A/8235/8237 AC97 Audio Controller - 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) - 1019 1877 K8M800-M2 (V2.0) onboard audio - 1043 8095 A7V8X Motherboard (Realtek ALC650 codec) - 1043 80a1 A7V8X-X Motherboard - 1043 80b0 A7V600/K8V-X/K8V Deluxe motherboard (ADI AD1980 codec [SoundMAX]) - 1043 810d Asus P5VD1-X (AD1888 codec [SoundMax]) - 1043 812a A8V Deluxe motherboard (Realtek ALC850 codec) - 10ec 8168 High Definition Audio - 1106 3059 L7VMM2 Motherboard - 1106 4161 K7VT2 motherboard - 1106 4170 PCPartner P4M800-8237R Motherboard - 1106 4552 Soyo KT-600 Dragon Plus (Realtek ALC 650) - 1297 c160 FX41 motherboard (Realtek ALC650 codec) - 1413 147b KV8 Pro motherboard onboard audio - 1458 a002 GA-7VAX Onboard Audio (Realtek ALC650) - 1462 0080 K8T NEO 2 motherboard - 1462 3800 KT266 onboard audio - 1462 5901 KT6 Delta-FIS2R (MS-6590) - 1462 7181 K8MM3-V mainboard - 147b 1407 KV8-MAX3 motherboard - 1695 300c EP-8KRA2+ Mainboard - 1849 0850 ASRock 775Dual-880 Pro onboard audio (Realtek ALC850) - 1849 9739 P4VT8 Mainboard (C-Media CMI9739A codec) - 1849 9761 K7VT6 motherboard - 4005 4710 MSI K7T266 Pro2-RU (MSI-6380 v2) onboard audio (Realtek/ALC 200/200P) - a0a0 01b6 AK77-8XN onboard audio - a0a0 0342 AK86-L motherboard - 3065 VT6102 [Rhine-II] - 1043 80a1 A7V8X-X Motherboard - 1043 80ed A7V600-X Motherboard - 1106 0102 VT6102 [Rhine II] Embeded Ethernet Controller on VT8235 - 1186 1400 DFE-530TX rev A - 1186 1401 DFE-530TX rev B - 13b9 1421 LD-10/100AL PCI Fast Ethernet Adapter (rev.B) - 1462 7061 MS-7061 - 1462 7181 K8MM3-V mainboard - 147b 1c09 NV7 Motherboard - 1695 3005 VT6103 - 1695 300c Realtek ALC655 sound chip - 1849 3065 K7VT6 motherboard -# This hosts more than just the Intel 537 codec, it also hosts PCtel (SIL33) and SmartLink (SIL34) codecs - 3068 AC'97 Modem Controller - 1462 309e MS-6309 Saturn Motherboard - 3074 VT8233 PCI to ISA Bridge - 1043 8052 VT8233A - 3091 VT8633 [Apollo Pro266] - 3099 VT8366/A/7 [Apollo KT266/A/333] - 1043 8064 A7V266-E Mainboard - 1043 807f A7V333 Mainboard - 1849 3099 K7VT2 motherboard - 3101 VT8653 Host Bridge - 3102 VT8662 Host Bridge - 3103 VT8615 Host Bridge - 3104 USB 2.0 - 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) - 1043 808c A7V8X motherboard - 1043 80a1 A7V8X-X motherboard rev 1.01 - 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard - 1297 f641 FX41 motherboard - 1458 5004 GA-7VAX Mainboard - 1462 5901 KT6 Delta-FIS2R (MS-6590) - 1462 7020 K8T NEO 2 motherboard - 1462 7094 K8T Neo2-F V2.0 - 1462 7120 KT4AV motherboard - 1462 7181 K8MM3-V mainboard - 147b 1407 KV8-MAX3 motherboard - 182d 201d CN-029 USB 2.0 4 port PCI Card - 1849 3104 K7VT6 motherboard - 3106 VT6105/VT6106S [Rhine-III] - 1106 0105 VT6106S [Rhine-III] - 1186 1403 DFE-530TX rev C - 1186 1406 DFE-530TX+ rev F2 - 1186 1407 DFE-538TX - 3108 K8M800/K8N800/K8N800A [S3 UniChrome Pro] - 3109 VT8233C PCI to ISA Bridge - 3112 VT8361 [KLE133] Host Bridge - 3113 VPX/VPX2 PCI to PCI Bridge Controller - 3116 VT8375 [KM266/KL266] Host Bridge - 1297 f641 FX41 motherboard - 3118 CN400/PM800/PM880/PN800/PN880 [S3 UniChrome Pro] - 3119 VT6120/VT6121/VT6122 Gigabit Ethernet Adapter - 3122 VT8623 [Apollo CLE266] integrated CastleRock graphics - 3123 VT8623 [Apollo CLE266] - 3128 VT8753 [P4X266 AGP] - 3133 VT3133 Host Bridge - 3147 VT8233A ISA Bridge - 1043 808c A7V333 motherboard - 3148 P4M266 Host Bridge - 3149 VIA VT6420 SATA RAID Controller - 1043 80ed A7V600/K8V Deluxe/K8V-X/A8V Deluxe motherboard - 1458 b003 GA-7VM400AM(F) Motherboard - 1462 5901 KT6 Delta-FIS2R (MS-6590) - 1462 7020 K8T Neo 2 Motherboard - 1462 7094 K8T Neo2-F V2.0 - 1462 7181 K8MM3-V mainboard - 147b 1407 KV8-MAX3 motherboard - 147b 1408 KV7 - 1849 3149 K7VT6 motherboard - a0a0 04ad AK86-L motherboard - 3156 P/KN266 Host Bridge - 3157 CX700/VX700 [S3 UniChrome Pro] - 3164 VT6410 ATA133 RAID controller - 1043 80f4 P4P800 Mainboard Deluxe ATX - 1462 7028 915P/G Neo2 - 3168 P4X333/P4X400/PT800 AGP Bridge - 1849 3168 P4VT8 Mainboard - 3177 VT8235 ISA Bridge - 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) - 1043 808c A7V8X motherboard - 1043 80a1 A7V8X-X motherboard - 1106 0000 KT4AV motherboard - 1297 f641 FX41 motherboard - 1458 5001 GA-7VAX Mainboard - 1849 3177 K7VT2 motherboard - 3178 ProSavageDDR P4N333 Host Bridge - 3188 VT8385 [K8T800 AGP] Host Bridge - 1043 80a3 K8V Deluxe/K8V-X motherboard - 147b 1407 KV8-MAX3 motherboard - 3189 VT8377 [KT400/KT600 AGP] Host Bridge - 1043 807f A7V8X motherboard - 1106 0000 KT4AV motherboard (KT400A) - 1458 5000 GA-7VAX Mainboard - 1849 3189 K7VT6 motherboard - 3204 K8M800 Host Bridge - 3205 VT8378 [KM400/A] Chipset Host Bridge - 1458 5000 GA-7VM400M Motherboard - 3208 PT890 Host Bridge - 3213 VPX/VPX2 PCI to PCI Bridge Controller - 3218 K8T800M Host Bridge - 3227 VT8237 ISA bridge [KT600/K8T800/K8T890 South] - 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard - 1106 3227 DFI KT600-AL / Soltek SL-B9D-FGR Motherboard - 1458 5001 GA-7VT600 Motherboard - 147b 1407 KV8-MAX3 motherboard - 1849 3227 K7VT4 motherboard - 3230 K8M890CE/K8N890CE [Chrome 9] - 3238 K8T890 Host Bridge - 3249 VT6421 IDE RAID Controller - 324a CX700/VX700 PCI to PCI Bridge - 324b CX700/VX700 Host Bridge - 324e CX700/VX700 Internal Module Bus - 3253 VIA VT6655 WiFi Adapter, 802.11a/b/g - 3258 PT880 Host Bridge - 3259 CN333/CN400/PM880 Host Bridge - 3260 VIA Chrome9 HC IGP - 3269 KT880 Host Bridge - 3282 K8T800Pro Host Bridge - 3287 VT8251 PCI to ISA Bridge - 3288 VT1708/A [Azalia HDAC] (VIA High Definition Audio Controller) - 3290 K8M890 Host Bridge - 3296 P4M800 Host Bridge - 3324 CX700/VX700 Host Bridge - 3327 P4M890 Host Bridge - 3336 K8M890CE Host Bridge - 3337 VT8237A PCI to ISA Bridge - 3340 PT900 Host Bridge - 3343 P4M890 [S3 UniChrome Pro] - 3344 CN700/P4M800 Pro/P4M800 CE/VN800 [S3 UniChrome Pro] - 3349 VT8251 AHCI/SATA 4-Port Controller - 3351 VT3351 Host Bridge - 3353 VX800 PCI to PCI Bridge - 3364 CN896/VN896/P4M900 Host Bridge - 3371 CN896/VN896/P4M900 [Chrome 9 HC] - 3372 VT8237S PCI to ISA Bridge - 337a VT8237A PCI to PCI Bridge - 337b VT8237A Host Bridge - 3409 VX855/VX875 DRAM Bus Control - 4149 VIA VT6420 (ATA133) Controller - 4204 K8M800 Host Bridge - 4208 PT890 Host Bridge - 4238 K8T890 Host Bridge - 4258 PT880 Host Bridge - 4259 CN333/CN400/PM880 Host Bridge - 4269 KT880 Host Bridge - 4282 K8T800Pro Host Bridge - 4290 K8M890 Host Bridge - 4293 PM896 Host Bridge - 4296 P4M800 Host Bridge - 4308 PT894 Host Bridge - 4314 CN700/VN800/P4M800CE/Pro Host Bridge - 4324 CX700/VX700 Host Bridge - 4327 P4M890 Host Bridge - 4336 K8M890CE Host Bridge - 4340 PT900 Host Bridge - 4351 VT3351 Host Bridge - 4353 VX800/VX820 Power Management Control - 4364 CN896/VN896/P4M900 Host Bridge - 4409 VX855/VX875 Power Management Control - 5030 VT82C596 ACPI [Apollo PRO] - 5122 VX855/VX875 Chrome 9 HCM Integrated Graphics - 5208 PT890 I/O APIC Interrupt Controller - 5238 K8T890 I/O APIC Interrupt Controller - 5287 VT8251 Serial ATA Controller - 5290 K8M890 I/O APIC Interrupt Controller - 5308 PT894 I/O APIC Interrupt Controller - 5324 VX800 Serial ATA and EIDE Controller - 5327 P4M890 I/O APIC Interrupt Controller - 5336 K8M890CE I/O APIC Interrupt Controller - 5340 PT900 I/O APIC Interrupt Controller - 5351 VT3351 I/O APIC Interrupt Controller - 5353 VX800/VX820 APIC and Central Traffic Control - 5364 CN896/VN896/P4M900 I/O APIC Interrupt Controller - 5409 VX855/VX875 APIC and Central Traffic Control - 6100 VT85C100A [Rhine II] - 6287 SATA RAID Controller - 6327 P4M890 Security Device - 6353 VX800/VX820 Scratch Registers - 6364 CN896/VN896/P4M900 Security Device - 6409 VX855/VX875 Scratch Registers - 7204 K8M800 Host Bridge - 7205 KM400/KN400/P4M800 [S3 UniChrome] - 1458 d000 Gigabyte GA-7VM400(A)M(F) Motherboard - 1462 7061 MS-7061 - 7208 PT890 Host Bridge - 7238 K8T890 Host Bridge - 7258 PT880 Host Bridge - 7259 CN333/CN400/PM880 Host Bridge - 7269 KT880 Host Bridge - 7282 K8T800Pro Host Bridge - 7290 K8M890 Host Bridge - 7293 PM896 Host Bridge - 7296 P4M800 Host Bridge - 7308 PT894 Host Bridge - 7314 CN700/VN800/P4M800CE/Pro Host Bridge - 7324 CX700/VX700 Host Bridge - 7327 P4M890 Host Bridge - 7336 K8M890CE Host Bridge - 7340 PT900 Host Bridge - 7351 VT3351 Host Bridge - 7353 VX800/VX820 North-South Module Interface Control - 7364 CN896/VN896/P4M900 Host Bridge - 7409 VX855/VX875 North-South Module Interface Control - 8231 VT8231 [PCI-to-ISA Bridge] - 8235 VT8235 ACPI - 8305 VT8363/8365 [KT133/KM133 AGP] - 8324 CX700/VX700 PCI to ISA Bridge - 8353 VX800/VX820 Bus Control and Power Management - 8391 VT8371 [KX133 AGP] - 8400 MVP4 - 8409 VX855/VX875 Bus Control and Power Management - 8500 KLE133/PLE133/PLE133T - 8501 VT8501 [Apollo MVP4 AGP] - 8596 VT82C596 [Apollo PRO AGP] - 8597 VT82C597 [Apollo VP3 AGP] - 8598 VT82C598/694x [Apollo MVP3/Pro133x AGP] - 1019 0985 P6VXA Motherboard - 8601 VT8601 [Apollo ProMedia AGP] - 8605 VT8605 [PM133 AGP] - 8691 VT82C691 [Apollo Pro] - 8693 VT82C693 [Apollo Pro Plus] PCI Bridge - 8a25 PL133/PL133T [S3 ProSavage] - 8a26 KL133/KL133A/KM133/KM133A [S3 ProSavage] - 8d01 PN133/PN133T [S3 Twister] - 8d04 KM266/P4M266/P4M266A/P4N266 [S3 ProSavageDDR] - 9530 Secure Digital Memory Card Controller - 95d0 SDIO Host Controller - a208 PT890 PCI to PCI Bridge Controller - a238 K8T890 PCI to PCI Bridge Controller - a327 P4M890 PCI to PCI Bridge Controller - a353 VX8xx South-North Module Interface Control - a364 CN896/VN896/P4M900 PCI to PCI Bridge Controller - a409 VX855/VX875 USB Device Controller - b091 VT8633 [Apollo Pro266 AGP] - b099 VT8366/A/7 [Apollo KT266/A/333 AGP] - b101 VT8653 AGP Bridge - b102 VT8362 AGP Bridge - b103 VT8615 AGP Bridge - b112 VT8361 [KLE133] AGP Bridge - b113 VPX/VPX2 I/O APIC Interrupt Controller - b115 VT8363/8365 [KT133/KM133] PCI Bridge - b168 VT8235 PCI Bridge - b188 VT8237 PCI bridge [K8T800/K8T890 South] - 147b 1407 KV8-MAX3 motherboard - b198 VT8237/VX700 PCI Bridge - b213 VPX/VPX2 I/O APIC Interrupt Controller - b353 VX855/VX875 PCI to PCI Bridge - b999 [K8T890 North / VT8237 South] PCI Bridge - c208 PT890 PCI to PCI Bridge Controller - c238 K8T890 PCI to PCI Bridge Controller - c327 P4M890 PCI to PCI Bridge Controller - c340 PT900 PCI to PCI Bridge Controller - c353 VX800/VX820 PCI Express Root Port - c364 CN896/VN896/P4M900 PCI to PCI Bridge Controller - c409 VX855/VX875 EIDE Controller - d104 VT8237R USB UDCI Controller - d208 PT890 PCI to PCI Bridge Controller - d213 VPX/VPX2 PCI to PCI Bridge Controller - d238 K8T890 PCI to PCI Bridge Controller - d340 PT900 PCI to PCI Bridge Controller - e208 PT890 PCI to PCI Bridge Controller - e238 K8T890 PCI to PCI Bridge Controller - e340 PT900 PCI to PCI Bridge Controller - e353 VX800/VX820 PCI Express Root Port - e721 VT1708B 8-channel High Definition Audio CODEC - f208 PT890 PCI to PCI Bridge Controller - f238 K8T890 PCI to PCI Bridge Controller - f340 PT900 PCI to PCI Bridge Controller - f353 VX800/VX820 PCI Express Root Port -1107 Stratus Computers - 0576 VIA VT82C570MV [Apollo] (Wrong vendor ID!) -1108 Proteon, Inc. - 0100 p1690plus_AA - 0101 p1690plus_AB - 0105 P1690Plus - 0108 P1690Plus - 0138 P1690Plus - 0139 P1690Plus - 013c P1690Plus - 013d P1690Plus -1109 Cogent Data Technologies, Inc. - 1400 EM110TX [EX110TX] -110a Siemens Nixdorf AG - 0002 Pirahna 2-port - 0005 Tulip controller, power management, switch extender - 0006 FSC PINC (I/O-APIC) - 0015 FSC Multiprocessor Interrupt Controller - 001d FSC Copernicus Management Controller - 007b FSC Remote Service Controller, mailbox device - 007c FSC Remote Service Controller, shared memory device - 007d FSC Remote Service Controller, SMIC device - 2101 HST SAPHIR V Primary PCI (ISDN/PMx) -# Superfastcom-PCI (Commtech, Inc.) or DSCC4 WAN Adapter - 2102 DSCC4 PEB/PEF 20534 DMA Supported Serial Communication Controller with 4 Channels - 2104 Eicon Diva 2.02 compatible passive ISDN card - 3141 SIMATIC NET CP 5611 (Profibus Adapter) - 3142 SIMATIC NET CP 5613A1 (Profibus Adapter) - 4021 SIMATIC NET CP 5512 (Profibus and MPI Cardbus Adapter) - 4029 SIMATIC NET CP 5613A2 (Profibus Adapter) - 4942 FPGA I-Bus Tracer for MBD - 6120 SZB6120 -110b Chromatic Research Inc. - 0001 Mpact Media Processor - 0004 Mpact 2 -110c Mini-Max Technology, Inc. -110d Znyx Advanced Systems -110e CPU Technology -110f Ross Technology -1110 Powerhouse Systems - 6037 Firepower Powerized SMP I/O ASIC - 6073 Firepower Powerized SMP I/O ASIC -1111 Santa Cruz Operation -# Also claimed to be RNS or Rockwell International, current PCISIG records list Osicom -1112 Osicom Technologies Inc - 2200 FDDI Adapter - 2300 Fast Ethernet Adapter - 2340 4 Port Fast Ethernet Adapter - 2400 ATM Adapter -1113 Accton Technology Corporation - 1211 SMC2-1211TX - 103c 1207 EN-1207D Fast Ethernet Adapter - 1113 1211 EN-1207D Fast Ethernet Adapter - 1216 EN-1216 Ethernet Adapter - 1113 1216 EN1207F series PCI Fast Ethernet Adapter - 1113 2220 EN2220A Cardbus Fast Ethernet Adapter - 1113 2242 EN2242 10/100 Ethernet Mini-PCI Card - 111a 1020 SpeedStream 1020 PCI 10/100 Ethernet Adaptor [EN-1207F-TX ?] - 1217 EN-1217 Ethernet Adapter - 5105 10Mbps Network card - 9211 EN-1207D Fast Ethernet Adapter - 1113 9211 EN-1207D Fast Ethernet Adapter - 9511 21x4x DEC-Tulip compatible Fast Ethernet - d301 CPWNA100 (Philips wireless PCMCIA) - ec02 SMC 1244TX v3 - ee23 SMCWPCIT-G 108Mbps Wireless PCI adapter -1114 Atmel Corporation - 0506 at76c506 802.11b Wireless Network Adaptor -1115 3D Labs -1116 Data Translation - 0022 DT3001 - 0023 DT3002 - 0024 DT3003 - 0025 DT3004 - 0026 DT3005 - 0027 DT3001-PGL - 0028 DT3003-PGL - 0051 DT322 - 0060 DT340 - 0069 DT332 -1117 Datacube, Inc - 9500 Max-1C SVGA card - 9501 Max-1C image processing -1118 Berg Electronics -1119 ICP Vortex Computersysteme GmbH - 0000 GDT 6000/6020/6050 - 0001 GDT 6000B/6010 - 0002 GDT 6110/6510 - 0003 GDT 6120/6520 - 0004 GDT 6530 - 0005 GDT 6550 - 0006 GDT 6117/6517 - 0007 GDT 6127/6527 - 0008 GDT 6537 - 0009 GDT 6557/6557-ECC - 000a GDT 6115/6515 - 000b GDT 6125/6525 - 000c GDT 6535 - 000d GDT 6555/6555-ECC - 0100 GDT 6117RP/6517RP - 0101 GDT 6127RP/6527RP - 0102 GDT 6537RP - 0103 GDT 6557RP - 0104 GDT 6111RP/6511RP - 0105 GDT 6121RP/6521RP - 0110 GDT 6117RD/6517RD - 0111 GDT 6127RD/6527RD - 0112 GDT 6537RD - 0113 GDT 6557RD - 0114 GDT 6111RD/6511RD - 0115 GDT 6121RD/6521RD - 0118 GDT 6118RD/6518RD/6618RD - 0119 GDT 6128RD/6528RD/6628RD - 011a GDT 6538RD/6638RD - 011b GDT 6558RD/6658RD - 0120 GDT 6117RP2/6517RP2 - 0121 GDT 6127RP2/6527RP2 - 0122 GDT 6537RP2 - 0123 GDT 6557RP2 - 0124 GDT 6111RP2/6511RP2 - 0125 GDT 6121RP2/6521RP2 - 0136 GDT 6113RS/6513RS - 0137 GDT 6123RS/6523RS - 0138 GDT 6118RS/6518RS/6618RS - 0139 GDT 6128RS/6528RS/6628RS - 013a GDT 6538RS/6638RS - 013b GDT 6558RS/6658RS - 013c GDT 6533RS/6633RS - 013d GDT 6543RS/6643RS - 013e GDT 6553RS/6653RS - 013f GDT 6563RS/6663RS - 0166 GDT 7113RN/7513RN/7613RN - 0167 GDT 7123RN/7523RN/7623RN - 0168 GDT 7118RN/7518RN/7518RN - 0169 GDT 7128RN/7528RN/7628RN - 016a GDT 7538RN/7638RN - 016b GDT 7558RN/7658RN - 016c GDT 7533RN/7633RN - 016d GDT 7543RN/7643RN - 016e GDT 7553RN/7653RN - 016f GDT 7563RN/7663RN - 01d6 GDT 4x13RZ - 01d7 GDT 4x23RZ - 01f6 GDT 8x13RZ - 01f7 GDT 8x23RZ - 01fc GDT 8x33RZ - 01fd GDT 8x43RZ - 01fe GDT 8x53RZ - 01ff GDT 8x63RZ - 0210 GDT 6519RD/6619RD - 0211 GDT 6529RD/6629RD - 0260 GDT 7519RN/7619RN - 0261 GDT 7529RN/7629RN - 02ff GDT MAXRP - 0300 GDT NEWRX - 0301 GDT NEWRX2 -111a Efficient Networks, Inc - 0000 155P-MF1 (FPGA) - 0002 155P-MF1 (ASIC) - 0003 ENI-25P ATM - 111a 0000 ENI-25p Miniport ATM Adapter - 0005 SpeedStream (LANAI) - 111a 0001 ENI-3010 ATM - 111a 0009 ENI-3060 ADSL (VPI=0) - 111a 0101 ENI-3010 ATM - 111a 0109 ENI-3060CO ADSL (VPI=0) - 111a 0809 ENI-3060 ADSL (VPI=0 or 8) - 111a 0909 ENI-3060CO ADSL (VPI=0 or 8) - 111a 0a09 ENI-3060 ADSL (VPI=<0..15>) - 0007 SpeedStream ADSL - 111a 1001 ENI-3061 ADSL [ASIC] - 1203 SpeedStream 1023 Wireless PCI Adapter -111b Teledyne Electronic Systems -111c Tricord Systems Inc. - 0001 Powerbis Bridge -111d Integrated Device Technology, Inc. - 0001 IDT77201/77211 155Mbps ATM SAR Controller [NICStAR] - 0003 IDT77222/77252 155Mbps ATM MICRO ABR SAR Controller - 0004 IDT77V252 155Mbps ATM MICRO ABR SAR Controller - 0005 IDT77V222 155Mbps ATM MICRO ABR SAR Controller - 8018 PES12N3A PCI Express Switch - 801c PES24N3A PCI Express Switch - 8028 PES4T4 PCI Express Switch - 802b PES8T5A PCI Express Switch - 802c PES16T4 PCI Express Switch - 802d PES16T7 PCI Express Switch - 802e PES24T6 PCI Express Switch - 802f PES32T8 PCI Express Switch - 8032 PES48T12 PCI Express Switch - 8034 PES16/22/34H16 PCI Express Switch - 8035 PES32H8 PCI Express Switch - 8036 PES48H12 PCI Express Switch - 8037 PES64H16 PCI Express Switch - 8039 PES3T3 PCI Express Switch - 803a PES4T4 PCI Express Switch - 803c PES5T5 PCI Express Switch - 803d PES6T5 PCI Express Switch - 8048 PES8NT2 PCI Express Switch - 8049 PES8NT2 PCI Express Switch - 804a PES8NT2 PCI Express Internal NTB - 804b PES8NT2 PCI Express External NTB - 804c PES16NT2 PCI Express Switch - 804d PES16NT2 PCI Express Switch - 804e PES16NT2 PCI Express Internal NTB - 804f PES16NT2 PCI Express External NTB - 8058 PES12NT3 PCI Express Switch - 8059 PES12NT3 PCI Express Switch - 805a PES12NT3 PCI Express Internal NTB - 805b PES12NT3 PCI Express External NTB - 805c PES24NT3 PCI Express Switch - 805d PES24NT3 PCI Express Switch - 805e PES24NT3 PCI Express Internal NTB - 805f PES24NT3 PCI Express External NTB - 8060 PES16T4G2 PCI Express Gen2 Switch - 8061 PES12T3G2 PCI Express Gen2 Switch - 8068 PES6T6G2 PCI Express Gen2 Switch - 806a PES24T3G2 PCI Express Gen2 Switch - 14c1 000c 10G-PCIE2-8B2 - 806c PES16T4A/4T4G2 PCI Express Gen2 Switch - 806e PES24T6G2 PCI Express Gen2 Switch - 806f HIO524G2 PCI Express Gen2 Switch -111e Eldec -111f Precision Digital Images - 4a47 Precision MX Video engine interface - 5243 Frame capture bus interface -1120 EMC Corporation -1121 Zilog -1122 Multi-tech Systems, Inc. -1123 Excellent Design, Inc. -1124 Leutron Vision AG - 2581 Picport Monochrome -1125 Eurocore -1126 Vigra -1127 FORE Systems Inc - 0200 ForeRunner PCA-200 ATM - 0210 PCA-200PC - 0250 ATM - 0300 ForeRunner PCA-200EPC ATM - 0310 ATM - 0400 ForeRunnerHE ATM Adapter - 1127 0400 ForeRunnerHE ATM -1129 Firmworks -112a Hermes Electronics Company, Ltd. -112b Linotype - Hell AG -112c Zenith Data Systems -112d Ravicad -112e Infomedia Microelectronics Inc. -112f Dalsa Inc. - 0000 MVC IC-PCI - 0001 MVC IM-PCI Video frame grabber/processor - 0008 PC-CamLink PCI framegrabber -1130 Computervision -1131 Philips Semiconductors - 1561 USB 1.1 Host Controller - 1775 c200 C2K onboard USB 1.1 host controller - 1562 USB 2.0 Host Controller - 1775 c200 C2K onboard USB 2.0 host controller - 3400 SmartPCI56(UCB1500) 56K Modem - 5400 TriMedia TM1000/1100 - 12ca 0000 BlueICE - 5402 TriMedia TM1300 - 1244 0f00 Fritz!Card DSL - 15eb 1300 DT1300 - 15eb 1302 DT1302 - 15eb 1304 DT1304 - 15eb 1305 DT1305 - 15eb 1306 PMCDT1306 - 15eb 1308 DT1308 - 15eb 1331 DT1301 with SAA7121 - 15eb 1337 DT1301 with SAA7127 - 15eb 2d3d X3D - 15eb 7022 PTM1300 - 5405 TriMedia TM1500 - 1136 0005 LCP-1500 - 5406 TriMedia TM1700 - 540b PNX1005 Media Processor - 1131 0020 PNXLite PCI Demo Board - 7130 SAA7130 Video Broadcast Decoder - 102b 48d0 Matrox CronosPlus - 1048 226b ELSA EX-VISION 300TV - 107d 6655 WinFast DTV1000S - 1131 2001 10MOONS PCI TV CAPTURE CARD - 1131 2005 Techcom (India) TV Tuner Card (SSD-TV-670) - 1461 050c Nagase Sangyo TransGear 3000TV - 1461 10ff AVerMedia DVD EZMaker - 1461 2108 AverMedia AverTV/305 - 1461 2115 AverMedia AverTV Studio 305 - 153b 1152 Terratec Cinergy 200 TV - 185b c100 Compro VideoMate TV PVR/FM - 185b c901 Videomate DVB-T200 - 5168 0138 LifeView FlyVIDEO2000 - 7133 SAA7131/SAA7133/SAA7135 Video Broadcast Decoder - 0000 4091 Beholder BeholdTV 409 FM -# Deleting vendor name after rereading submit instructions - 0070 6701 WinTV HVR-1110 - 1019 4cb5 Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) - 1043 0210 FlyTV mini Asus Digimatrix - 1043 4843 ASUS TV-FM 7133 - 1043 4845 TV-FM 7135 - 1043 4862 P7131 Dual - 1043 4876 My Cinema-P7131 Hybrid - 1131 0000 KWorld V-Stream Studio TV Terminator - 1131 2001 Proteus Pro [philips reference design] - 1131 2018 Tiger reference design - 1131 4ee9 MonsterTV Mobile - 11bd 002b PCTV Stereo - 11bd 002e PCTV 110i (saa7133) - 12ab 0800 PURPLE TV - 13c2 2804 Technotrend Budget T-3000 Hybrid - 1421 0335 Instant TV DVB-T Cardbus - 1421 1370 Instant TV (saa7135) - 1435 7330 VFG7330 - 1435 7350 VFG7350 - 1461 1044 AVerTVHD MCE A180 - 1461 4836 M10D Hybrid DVBT - 1461 861e M105 PAL/SECAM/NTSC/FM Tuner - 1461 a14b AVerTV Studio 509 - 1461 a836 M115 DVB-T, PAL/SECAM/NTSC Tuner - 1461 f01d DVB-T Super 007 - 1461 f31f Avermedia AVerTV GO 007 FM - 1461 f936 Hybrid+FM PCI (rev A16D) - 1462 6231 TV@nywhere Plus - 1489 0214 LifeView FlyTV Platinum FM - 14c0 1212 LifeView FlyTV Platinum Mini2 - 153b 1160 Cinergy 250 PCI TV - 153b 1162 Terratec Cinergy 400 mobile - 17de 7350 ATSC 110 Digital / Analog HDTV Tuner - 17de 7352 ATSC 115 Digital / Analog HDTV Tuner - 185b c100 VideoMate TV - 185b c900 VideoMate T750 - 5168 0306 LifeView FlyDVB-T DUO - 5168 0319 LifeView FlyDVB Trio - 5168 0502 LifeView FlyDVB-T Duo CardBus - 5168 0520 LifeView FlyDVB Trio CardBus - 5168 1502 LifeView FlyTV CardBus - 5168 2502 LifeView FlyDVB-T CardBus - 5168 2520 LifeView FlyDVB-S Duo CardBus - 5168 3502 LifeView FlyDVB-T Hybrid CardBus - 5168 3520 LifeView FlyDVB Trio N CardBus - 7134 SAA7134/SAA7135HL Video Broadcast Decoder - 1019 4cb4 Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) - 1043 0210 Digimatrix TV - 1043 4840 ASUS TV-FM 7134 - 1043 4842 TV-FM 7134 - 1131 2004 EUROPA V3 reference design - 1131 4e85 SKNet Monster TV - 1131 6752 EMPRESS - 11bd 002b PCTV Stereo - 11bd 002d PCTV 300i DVB-T + PAL - 1461 2c00 AverTV Hybrid+FM PCI - 1461 9715 AVerTV Studio 307 - 1461 a70a Avermedia AVerTV 307 - 1461 a70b AverMedia M156 / Medion 2819 - 1461 d6ee Cardbus TV/Radio (E500) - 1471 b7e9 AVerTV Cardbus plus - 153b 1142 Terratec Cinergy 400 TV - 153b 1143 Terratec Cinergy 600 TV - 153b 1158 Terratec Cinergy 600 TV MK3 - 1540 9524 ProVideo PV952 - 16be 0003 Medion 7134 - 185b c200 Compro VideoMate Gold+ Pal - 185b c900 Videomate DVB-T300 - 1894 a006 KNC One TV-Station DVR - 1894 fe01 KNC One TV-Station RDS / Typhoon TV Tuner RDS - 5168 0138 FLY TV PRIME 34FM - 7145 SAA7145 - 7146 SAA7146 - 110a 0000 Fujitsu/Siemens DVB-C card rev1.5 - 110a ffff Fujitsu/Siemens DVB-C card rev1.5 - 1124 2581 Leutron Vision PicPort - 1131 4f56 KNC1 DVB-S Budget - 1131 4f60 Fujitsu-Siemens Activy DVB-S Budget Rev AL - 1131 4f61 Activy DVB-S Budget Rev GR - 1131 5f61 Activy DVB-T Budget - 114b 2003 DVRaptor Video Edit/Capture Card - 11bd 0006 DV500 Overlay - 11bd 000a DV500 Overlay - 11bd 000f DV500 Overlay - 13c2 0000 Siemens/Technotrend/Hauppauge DVB card rev1.3 or rev1.5 - 13c2 0001 Technotrend/Hauppauge DVB card rev1.3 or rev1.6 - 13c2 0002 Technotrend/Hauppauge DVB card rev2.1 - 13c2 0003 Technotrend/Hauppauge DVB card rev2.1 - 13c2 0004 Technotrend/Hauppauge DVB card rev2.1 - 13c2 0006 Technotrend/Hauppauge DVB card rev1.3 or rev1.6 - 13c2 0008 Technotrend/Hauppauge DVB-T - 13c2 000a Octal/Technotrend DVB-C for iTV - 13c2 000e Technotrend/Hauppauge DVB card rev2.3 - 13c2 1003 Technotrend-Budget/Hauppauge WinTV-NOVA-S DVB card - 13c2 1004 Technotrend-Budget/Hauppauge WinTV-NOVA-C DVB card - 13c2 1005 Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card - 13c2 100c Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card - 13c2 100f Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card - 13c2 1011 Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card - 13c2 1012 DVB T-1500 - 13c2 1013 SATELCO Multimedia DVB - 13c2 1016 WinTV-NOVA-SE DVB card - 13c2 1018 DVB S-1401 - 13c2 1019 S2-3200 - 13c2 1102 Technotrend/Hauppauge DVB card rev2.1 - 153b 1155 Cinergy 1200 DVB-S - 153b 1156 Terratec Cynergy 1200C - 153b 1157 Cinergy 1200 DVB-T - 1894 0020 KNC One DVB-C V1.0 - 1894 0023 TVStation DVB-C plus - 7162 Pinnacle PCTV 3010iX Dual Analog + DVB-T (VT8251 Ultra VLINK Controller) - 9730 SAA9730 Integrated Multimedia and Peripheral Controller - 1131 0000 Integrated Multimedia and Peripheral Controller -1132 Mitel Corp. -1133 Dialogic Corporation - 7701 Eiconcard C90 - 7711 Eiconcard C91 - 7901 EiconCard S90 - 7902 EiconCard S90 - 7911 EiconCard S91 - 7912 EiconCard S91 - 7921 Eiconcard S92 - 7941 EiconCard S94 - 7942 EiconCard S94 - 7943 EiconCard S94 - 7944 EiconCard S94 - 7945 Eiconcard S94 - 7948 Eiconcard S94 64bit/66MHz - 9711 Eiconcard S91 V2 - 9911 Eiconcard S91 V2 - 9941 Eiconcard S94 V2 - 9a41 Eiconcard S94 PCIe - b921 EiconCard P92 - b922 EiconCard P92 - b923 EiconCard P92 - e001 Diva Pro 2.0 S/T - e002 Diva 2.0 S/T PCI - e003 Diva Pro 2.0 U - e004 Diva 2.0 U PCI - e005 Diva 2.01 S/T PCI - e006 Diva CT S/T PCI - e007 Diva CT U PCI - e008 Diva CT Lite S/T PCI - e009 Diva CT Lite U PCI - e00a Diva ISDN+V.90 PCI - e00b Diva ISDN PCI 2.02 - e00c Diva 2.02 PCI U - e00d Diva Pro 3.0 PCI - e00e Diva ISDN+CT S/T PCI Rev 2 - e010 Diva Server BRI-2M PCI - 110a 0021 Fujitsu Siemens ISDN S0 - e011 Diva Server BRI S/T Rev 2 - e012 Diva Server 4BRI-8M PCI - e013 4BRI - 1133 1300 Diva V-4BRI-8 PCI v2 - 1133 e013 Diva 4BRI-8 PCI v2 - e014 Diva Server PRI-30M PCI - e015 Diva PRI PCI v2 - e016 Diva Server Voice 4BRI PCI - e017 Diva Server Voice 4BRI Rev 2 - 1133 e017 Diva Server Voice 4BRI-8M 2.0 PCI - e018 BRI - 1133 1800 Diva V-BRI-2 PCI v2 - 1133 e018 Diva BRI-2 PCI v2 - e019 Diva Server Voice PRI Rev 2 - 1133 e019 Diva Server Voice PRI 2.0 PCI - e01a Diva BRI-2FX PCI v2 - e01b Diva Server Voice BRI-2M 2.0 PCI - 1133 e01b Diva Server Voice BRI-2M 2.0 PCI - e01c PRI - 1133 1c01 Diva PRI/E1/T1-8 PCI v3 - 1133 1c02 Diva PRI/T1-24 PCI(e) v3 - 1133 1c03 Diva PRI/E1-30 PCI(e) v3 - 1133 1c04 Diva PRI/E1/T1-CTI PCI(e) v3 - 1133 1c05 Diva V-PRI/T1-24 PCI(e) v3 - 1133 1c06 Diva V-PRI/E1-30 PCI(e) v3 - 1133 1c07 Diva Server PRI/E1/T1-8 Cornet NQ - 1133 1c08 Diva Server PRI/T1-24 Cornet NQ - 1133 1c09 Diva Server PRI/E1-30 Cornet NQ - 1133 1c0a Diva Server PRI/E1/T1 Cornet NQ - 1133 1c0b Diva Server V-PRI/T1-24 Cornet NQ - 1133 1c0c Diva Server V-PRI/E1-30 Cornet NQ - e01e 2PRI - 1133 1e01 Diva 2PRI/E1/T1-60 PCI v1 - 1133 e01e Diva V-2PRI/E1/T1-60 PCI v1 - e020 4PRI - 1133 2001 Diva 4PRI/E1/T1-120 PCI v1 - 1133 e020 Diva V-4PRI/E1/T1-120 PCI v1 - e022 Analog-2 - 1133 2200 Diva V-Analog-2 PCI v1 - 1133 e022 Diva Analog-2 PCI v1 - e024 Analog-4 - 1133 2400 Diva V-Analog-4 PCI v1 - 1133 e024 Diva Analog-4 PCI v1 - e028 Analog-8 - 1133 2800 Diva V-Analog-8 PCI v1 - 1133 e028 Diva Analog-8 PCI v1 - e02a Diva IPM-300 PCI v1 - e02c Diva IPM-600 PCI v1 - e02e 4BRI - 1133 2e01 Diva V-4BRI-8 PCIe v2 - 1133 e02e Diva 4BRI-8 PCIe v2 - e032 BRI - 1133 3201 Diva V-BRI-2 PCIe v2 - 1133 e032 Diva BRI-2 PCIe v2 - e034 Diva BRI-CTI PCI v2 -1134 Mercury Computer Systems - 0001 Raceway Bridge - 0002 Dual PCI to RapidIO Bridge -1135 Fuji Xerox Co Ltd - 0001 Printer controller -1136 Momentum Data Systems - 0002 PCI-JTAG -1137 Cisco Systems Inc - 0023 81 VIC PCIe Upstream Port - 0040 VIC PCIe Upstream Port - 0041 VIC PCIe Downstream Port - 0043 VIC Ethernet NIC - 1137 0048 M81KR Mezzanine - 0045 VIC FCoE HBA - 1137 0048 M81KR Mezzanine -1138 Ziatech Corporation - 8905 8905 [STD 32 Bridge] -1139 Dynamic Pictures, Inc - 0001 VGA Compatable 3D Graphics -113a FWB Inc -113b Network Computing Devices -113c Cyclone Microsystems, Inc. - 0000 PCI-9060 i960 Bridge - 0001 PCI-SDK [PCI i960 Evaluation Platform] - 0911 PCI-911 [i960Jx-based Intelligent I/O Controller] - 0912 PCI-912 [i960CF-based Intelligent I/O Controller] - 0913 PCI-913 - 0914 PCI-914 [I/O Controller w/ secondary PCI bus] -113d Leading Edge Products Inc -113e Sanyo Electric Co - Computer Engineering Dept -113f Equinox Systems, Inc. - 0808 SST-64P Adapter - 1010 SST-128P Adapter - 80c0 SST-16P DB Adapter - 80c4 SST-16P RJ Adapter - 80c8 SST-16P Adapter - 8888 SST-4P Adapter - 9090 SST-8P Adapter -1140 Intervoice Inc -1141 Crest Microsystem Inc -1142 Alliance Semiconductor Corporation - 3210 AP6410 - 6422 ProVideo 6422 - 6424 ProVideo 6424 - 6425 ProMotion AT25 - 643d ProMotion AT3D -1143 NetPower, Inc -1144 Cincinnati Milacron - 0001 Noservo controller -1145 Workbit Corporation - 8007 NinjaSCSI-32 Workbit - f007 NinjaSCSI-32 KME - f010 NinjaSCSI-32 Workbit - f012 NinjaSCSI-32 Logitec - f013 NinjaSCSI-32 Logitec - f015 NinjaSCSI-32 Melco - f020 NinjaSCSI-32 Sony PCGA-DVD51 - f021 NinjaPATA-32 Delkin Cardbus UDMA - f024 NinjaPATA-32 Delkin Cardbus UDMA - f103 NinjaPATA-32 Delkin Cardbus UDMA -1146 Force Computers -1147 Interface Corp -# Nee Schneider & Koch -1148 SysKonnect - 4000 FDDI Adapter - 0e11 b03b Netelligent 100 FDDI DAS Fibre SC - 0e11 b03c Netelligent 100 FDDI SAS Fibre SC - 0e11 b03d Netelligent 100 FDDI DAS UTP - 0e11 b03e Netelligent 100 FDDI SAS UTP - 0e11 b03f Netelligent 100 FDDI SAS Fibre MIC - 1148 5521 FDDI SK-5521 (SK-NET FDDI-UP) - 1148 5522 FDDI SK-5522 (SK-NET FDDI-UP DAS) - 1148 5541 FDDI SK-5541 (SK-NET FDDI-FP) - 1148 5543 FDDI SK-5543 (SK-NET FDDI-LP) - 1148 5544 FDDI SK-5544 (SK-NET FDDI-LP DAS) - 1148 5821 FDDI SK-5821 (SK-NET FDDI-UP64) - 1148 5822 FDDI SK-5822 (SK-NET FDDI-UP64 DAS) - 1148 5841 FDDI SK-5841 (SK-NET FDDI-FP64) - 1148 5843 FDDI SK-5843 (SK-NET FDDI-LP64) - 1148 5844 FDDI SK-5844 (SK-NET FDDI-LP64 DAS) - 4200 Token Ring adapter - 4300 SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link) - 1148 9821 SK-9821 Gigabit Ethernet Server Adapter (SK-NET GE-T) - 1148 9822 SK-9822 Gigabit Ethernet Server Adapter (SK-NET GE-T dual link) - 1148 9841 SK-9841 Gigabit Ethernet Server Adapter (SK-NET GE-LX) - 1148 9842 SK-9842 Gigabit Ethernet Server Adapter (SK-NET GE-LX dual link) - 1148 9843 SK-9843 Gigabit Ethernet Server Adapter (SK-NET GE-SX) - 1148 9844 SK-9844 Gigabit Ethernet Server Adapter (SK-NET GE-SX dual link) - 1148 9861 SK-9861 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition) - 1148 9862 SK-9862 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition dual link) - 1148 9871 SK-9871 Gigabit Ethernet Server Adapter (SK-NET GE-ZX) - 1148 9872 SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link) - 1259 2970 AT-2970SX Gigabit Ethernet Adapter - 1259 2971 AT-2970LX Gigabit Ethernet Adapter - 1259 2972 AT-2970TX Gigabit Ethernet Adapter - 1259 2973 AT-2971SX Gigabit Ethernet Adapter - 1259 2974 AT-2971T Gigabit Ethernet Adapter - 1259 2975 AT-2970SX/2SC Gigabit Ethernet Adapter - 1259 2976 AT-2970LX/2SC Gigabit Ethernet Adapter - 1259 2977 AT-2970TX/2TX Gigabit Ethernet Adapter - 4320 SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter, PCI64, Fiber ZX/SC - 1148 0121 Marvell RDK-8001 Adapter - 1148 0221 Marvell RDK-8002 Adapter - 1148 0321 Marvell RDK-8003 Adapter - 1148 0421 Marvell RDK-8004 Adapter - 1148 0621 Marvell RDK-8006 Adapter - 1148 0721 Marvell RDK-8007 Adapter - 1148 0821 Marvell RDK-8008 Adapter - 1148 0921 Marvell RDK-8009 Adapter - 1148 1121 Marvell RDK-8011 Adapter - 1148 1221 Marvell RDK-8012 Adapter - 1148 3221 SK-9521 V2.0 10/100/1000Base-T Adapter - 1148 5021 SK-9821 V2.0 Gigabit Ethernet 10/100/1000Base-T Adapter - 1148 5041 SK-9841 V2.0 Gigabit Ethernet 1000Base-LX Adapter - 1148 5043 SK-9843 V2.0 Gigabit Ethernet 1000Base-SX Adapter - 1148 5051 SK-9851 V2.0 Gigabit Ethernet 1000Base-SX Adapter - 1148 5061 SK-9861 V2.0 Gigabit Ethernet 1000Base-SX Adapter - 1148 5071 SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter - 1148 9521 SK-9521 10/100/1000Base-T Adapter - 4400 SK-9Dxx Gigabit Ethernet Adapter - 4500 SK-9Mxx Gigabit Ethernet Adapter - 9000 SK-9S21 10/100/1000Base-T Server Adapter, PCI-X, Copper RJ-45 - 9843 [Fujitsu] Gigabit Ethernet - 9e00 SK-9E21D 10/100/1000Base-T Adapter, Copper RJ-45 - 1148 2100 SK-9E21 Server Adapter - 1148 21d0 SK-9E21D 10/100/1000Base-T Adapter - 1148 2200 SK-9E22 Server Adapter - 1148 8100 SK-9E81 Server Adapter - 1148 8200 SK-9E82 Server Adapter - 1148 9100 SK-9E91 Server Adapter - 1148 9200 SK-9E92 Server Adapter -1149 Win System Corporation -114a VMIC - 5579 VMIPCI-5579 (Reflective Memory Card) - 5587 VMIPCI-5587 (Reflective Memory Card) - 6504 VMIC PCI 7755 FPGA - 7587 VMIVME-7587 -114b Canopus Co., Ltd -114c Annabooks -114d IC Corporation -114e Nikon Systems Inc -114f Digi International - 0002 AccelePort EPC - 0003 RightSwitch SE-6 - 0004 AccelePort Xem - 0005 AccelePort Xr - 0006 AccelePort Xr,C/X - 0009 AccelePort Xr/J - 000a AccelePort EPC/J - 000c DataFirePRIme T1 (1-port) - 000d SyncPort 2-Port (x.25/FR) - 0011 AccelePort 8r EIA-232 (IBM) - 0012 AccelePort 8r EIA-422 - 0013 AccelePort Xr - 0014 AccelePort 8r EIA-422 - 0015 AccelePort Xem - 0016 AccelePort EPC/X - 0017 AccelePort C/X - 001a DataFirePRIme E1 (1-port) - 001b AccelePort C/X (IBM) - 001d DataFire RAS T1/E1/PRI - 114f 0050 DataFire RAS E1 Adapter - 114f 0051 DataFire RAS Dual E1 Adapter - 114f 0052 DataFire RAS T1 Adapter - 114f 0053 DataFire RAS Dual T1 Adapter - 0023 AccelePort RAS - 0024 DataFire RAS B4 ST/U - 114f 0030 DataFire RAS BRI U Adapter - 114f 0031 DataFire RAS BRI S/T Adapter - 0026 AccelePort 4r 920 - 0027 AccelePort Xr 920 - 0028 ClassicBoard 4 - 0029 ClassicBoard 8 - 0034 AccelePort 2r 920 - 0035 DataFire DSP T1/E1/PRI cPCI - 0040 AccelePort Xp - 114f 0042 AccelePort 2p PCI - 114f 0043 AccelePort 4p PCI - 114f 0044 AccelePort 8p PCI - 114f 0045 AccelePort 16p PCI - 114f 004e AccelePort 32p PCI - 0042 AccelePort 2p - 0043 AccelePort 4p - 0044 AccelePort 8p - 0045 AccelePort 16p - 004e AccelePort 32p - 0070 Datafire Micro V IOM2 (Europe) - 0071 Datafire Micro V (Europe) - 0072 Datafire Micro V IOM2 (North America) - 0073 Datafire Micro V (North America) - 00b0 Digi Neo 4 - 00b1 Digi Neo 8 - 00c8 Digi Neo 2 DB9 - 00c9 Digi Neo 2 DB9 PRI - 00ca Digi Neo 2 RJ45 - 00cb Digi Neo 2 RJ45 PRI - 00cc Digi Neo 1 422 - 00cd Digi Neo 1 422 485 - 00ce Digi Neo 2 422 485 - 00d0 ClassicBoard 4 422 - 00d1 ClassicBoard 8 422 - 00f1 Digi Neo PCI-E 4 port - 00f4 Digi Neo 4 (IBM version) - 6001 Avanstar -1150 Thinking Machines Corp -1151 JAE Electronics Inc. -1152 Megatek -1153 Land Win Electronic Corp -1154 Melco Inc -1155 Pine Technology Ltd -1156 Periscope Engineering -1157 Avsys Corporation -1158 Voarx R & D Inc - 3011 Tokenet/vg 1001/10m anylan - 9050 Lanfleet/Truevalue - 9051 Lanfleet/Truevalue -1159 Mutech Corp - 0001 MV-1000 - 0002 MV-1500 -115a Harlequin Ltd -115b Parallax Graphics -115c Photron Ltd. -115d Xircom - 0003 Cardbus Ethernet 10/100 - 1014 0181 10/100 EtherJet Cardbus Adapter - 1014 1181 10/100 EtherJet Cardbus Adapter - 1014 8181 10/100 EtherJet Cardbus Adapter - 1014 9181 10/100 EtherJet Cardbus Adapter - 115d 0181 Cardbus Ethernet 10/100 - 115d 0182 RealPort2 CardBus Ethernet 10/100 (R2BE-100) - 115d 1181 Cardbus Ethernet 10/100 - 1179 0181 Cardbus Ethernet 10/100 - 8086 8181 EtherExpress PRO/100 Mobile CardBus 32 Adapter - 8086 9181 EtherExpress PRO/100 Mobile CardBus 32 Adapter - 0005 Cardbus Ethernet 10/100 - 1014 0182 10/100 EtherJet Cardbus Adapter - 1014 1182 10/100 EtherJet Cardbus Adapter - 115d 0182 Cardbus Ethernet 10/100 - 115d 1182 Cardbus Ethernet 10/100 - 0007 Cardbus Ethernet 10/100 - 1014 0182 10/100 EtherJet Cardbus Adapter - 1014 1182 10/100 EtherJet Cardbus Adapter - 115d 0182 Cardbus Ethernet 10/100 - 115d 1182 Cardbus Ethernet 10/100 - 000b Cardbus Ethernet 10/100 - 1014 0183 10/100 EtherJet Cardbus Adapter - 115d 0183 Cardbus Ethernet 10/100 - 000c Mini-PCI V.90 56k Modem - 000f Cardbus Ethernet 10/100 - 1014 0183 10/100 EtherJet Cardbus Adapter - 115d 0183 Cardbus Ethernet 10/100 - 00d4 Mini-PCI K56Flex Modem - 0101 Cardbus 56k modem - 115d 1081 Cardbus 56k Modem - 0103 Cardbus Ethernet + 56k Modem - 1014 9181 Cardbus 56k Modem - 1115 1181 Cardbus Ethernet 100 + 56k Modem - 115d 1181 CBEM56G-100 Ethernet + 56k Modem - 8086 9181 PRO/100 LAN + Modem56 CardBus -115e Peer Protocols Inc -115f Maxtor Corporation -1160 Megasoft Inc -1161 PFU Limited -1162 OA Laboratory Co Ltd -1163 Rendition - 0001 Verite 1000 - 2000 Verite V2000/V2100/V2200 - 1092 2000 Stealth II S220 -1164 Advanced Peripherals Technologies -1165 Imagraph Corporation - 0001 Motion TPEG Recorder/Player with audio -# nee ServerWorks -1166 Broadcom - 0000 CMIC-LE - 0005 CNB20-LE Host Bridge - 0006 CNB20HE Host Bridge - 0007 CNB20-LE Host Bridge - 0008 CNB20HE Host Bridge - 0009 CNB20LE Host Bridge - 0010 CIOB30 - 0011 CMIC-HE - 0012 CMIC-WS Host Bridge (GC-LE chipset) - 0013 CNB20-HE Host Bridge - 0014 CMIC-LE Host Bridge (GC-LE chipset) - 0015 CMIC-GC Host Bridge - 0016 CMIC-GC Host Bridge - 0017 GCNB-LE Host Bridge - 0031 HT1100 HPX0 HT Host Bridge - 0036 BCM5785 [HT1000] PCI/PCI-X Bridge - 0101 CIOB-X2 PCI-X I/O Bridge - 0103 EPB PCI-Express to PCI-X Bridge - 0104 BCM5785 [HT1000] PCI/PCI-X Bridge - 0110 CIOB-E I/O Bridge with Gigabit Ethernet - 0130 BCM5780 [HT2000] PCI-X bridge - 0132 BCM5780 [HT2000] PCI-Express Bridge - 1166 0132 HT2000 PCI-Express bridge - 0140 HT2100 PCI-Express Bridge - 0141 HT2100 PCI-Express Bridge - 0142 HT2100 PCI-Express Bridge - 0144 HT2100 PCI-Express Bridge - 0200 OSB4 South Bridge - 0201 CSB5 South Bridge - 4c53 1080 CT8 mainboard - 0203 CSB6 South Bridge - 1734 1012 PRIMERGY RX/TX series - 0205 BCM5785 [HT1000] Legacy South Bridge - 0211 OSB4 IDE Controller - 0212 CSB5 IDE Controller - 1028 014a PowerEdge 1750 - 1028 810b PowerEdge 1650/2550 - 4c53 1080 CT8 mainboard - 0213 CSB6 RAID/IDE Controller - 1028 4134 PowerEdge 600SC - 1028 c134 Poweredge SC600 - 1734 1012 PRIMERGY RX/TX series onboard IDE - 0214 BCM5785 [HT1000] IDE - 1028 0205 PowerEdge 2970 HT1000 IDE - 0217 CSB6 IDE Controller - 1028 4134 Poweredge SC600 - 021b HT1100 HD Audio - 0220 OSB4/CSB5 OHCI USB Controller - 4c53 1080 CT8 mainboard - 0221 CSB6 OHCI USB Controller - 1734 1012 PRIMERGY RX/TX series onboard OHCI - 0223 BCM5785 [HT1000] USB - 1028 0205 PowerEdge 2970 HT1000 USB Controller - 1028 020b PowerEdge T605 HT1000 USB Controller - 0225 CSB5 LPC bridge - 1166 0230 Dell PowerEdge 1650/1750 - 0227 GCLE-2 Host Bridge - 1734 1012 PRIMERGY RX/TX series - 0230 CSB5 LPC bridge - 4c53 1080 CT8 mainboard - 0234 BCM5785 [HT1000] LPC - 1028 0205 PowerEdge 2970 HT1000 LPC - 1028 020b PowerEdge T605 HT1000 LPC - 0235 BCM5785 [HT1000] XIOAPIC0-2 - 0238 BCM5785 [HT1000] WDTimer - 0240 K2 SATA - 0241 RAIDCore RC4000 - 0242 RAIDCore BC4000 - 024a BCM5785 [HT1000] SATA (Native SATA Mode) - 1028 020b PowerEdge T605 onboard SATA Controller -# The device starts as 024A, and changes to 024B if set to PATA mode in BIOS - 024b BCM5785 [HT1000] SATA (PATA/IDE Mode) - 1028 0205 PowerEdge 2970 HT1000 SATA controller - 0406 HT1100 PCI-X Bridge - 0408 HT1100 Legacy Device - 040a HT1100 ISA-LPC Bridge - 1028 0223 PowerEdge R905 HT1100 ISA-LPC Bridge - 0410 HT1100 SATA Controller (Native SATA Mode) - 0411 HT1100 SATA Controller (PATA / IDE Mode) - 0412 HT1100 USB OHCI Controller - 0414 HT1100 USB EHCI Controller - 0416 HT1100 USB EHCI Controller (with Debug Port) - 0420 HT1100 PCI-Express Bridge - 0421 HT1100 SAS/SATA Controller - 0422 HT1100 PCI-Express Bridge -1167 Mutoh Industries Inc -1168 Thine Electronics Inc -1169 Centre for Development of Advanced Computing -# nee Polaris Communications -116a Luminex Software, Inc. - 6100 Bus/Tag Channel - 6800 Escon Channel - 7100 Bus/Tag Channel - 7800 Escon Channel -116b Connectware Inc -116c Intelligent Resources Integrated Systems -116d Martin-Marietta -116e Electronics for Imaging -116f Workstation Technology -1170 Inventec Corporation -1171 Loughborough Sound Images Plc -1172 Altera Corporation -1173 Adobe Systems, Inc -1174 Bridgeport Machines -1175 Mitron Computer Inc. -1176 SBE Incorporated -1177 Silicon Engineering -1178 Alfa, Inc. - afa1 Fast Ethernet Adapter -1179 Toshiba America Info Systems - 0102 Extended IDE Controller - 0103 EX-IDE Type-B - 0404 DVD Decoder card - 0406 Tecra Video Capture device - 0407 DVD Decoder card (Version 2) - 0601 CPU to PCI bridge - 1179 0001 Satellite Pro - 0603 ToPIC95 PCI to CardBus Bridge for Notebooks - 060a ToPIC95 - 1179 0001 Satellite Pro - 060f ToPIC97 - 1179 0001 Satellite 4010 - 0617 ToPIC100 PCI to Cardbus Bridge with ZV Support - 0618 CPU to PCI and PCI to ISA bridge - 0701 FIR Port Type-O - 0804 TC6371AF SmartMedia Controller - 0805 SD TypA Controller - 0d01 FIR Port Type-DO - 1179 0001 FIR Port Type-DO -117a A-Trend Technology -117b L G Electronics, Inc. -117c Atto Technology - 002c SAS RAID Adapter - 0030 Ultra320 SCSI Host Adapter - 117c 8013 ExpressPCI UL4D - 117c 8014 ExpressPCI UL4S - 117c 8027 ExpressPCI UL5D - 117c 802f ExpressPCI UL5D Low Profile - 0033 SAS Adapter -117d Becton & Dickinson -117e T/R Systems -117f Integrated Circuit Systems -1180 Ricoh Co Ltd - 0465 RL5c465 - 0466 RL5c466 - 0475 RL5c475 - 144d c006 vpr Matrix 170B4 CardBus bridge - 0476 RL5c476 II - 1014 0185 ThinkPad A/T/X Series - 1014 056c ThinkPad Z60t - 1028 014f Latitude X300 laptop - 1028 0188 Inspiron 6000 laptop - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 1043 1237 A6J-Q008 - 1043 1967 V6800V - 1043 1987 Asus A4K and Z81K notebooks, possibly others ( mid-2005 machines ) - 104d 80df Vaio PCG-FX403 - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 104d 814e VAIO GRZ390Z - 10f7 8338 Panasonic CF-Y5 laptop - 144d c005 X10 Laptop - 144d c00c P30/P35 notebook - 14ef 0220 PCD-RP-220S - 17aa 201c ThinkPad X60s - 17aa 20c4 ThinkPad T61 - 0477 RL5c477 - 0478 RL5c478 - 1014 0184 ThinkPad A30p - 0511 R5C511 - 0522 R5C522 IEEE 1394 Controller - 1014 01cf ThinkPad A30p - 1043 1967 V6800V - 0551 R5C551 IEEE 1394 Controller - 144d c006 vpr Matrix 170B4 - 0552 R5C552 IEEE 1394 Controller - 1014 0511 ThinkPad A/T/X Series - 1028 014f Latitude X300 laptop - 1028 0188 Inspiron 6000 laptop - 1043 1237 A6J-Q008 - 144d c005 X10 Laptop - 144d c00c P30/P35 notebook - 17aa 201e ThinkPad X60s - 0554 R5C554 - 0575 R5C575 SD Bus Host Adapter - 0576 R5C576 SD Bus Host Adapter - 0592 R5C592 Memory Stick Bus Host Adapter - 1025 0121 Aspire 5920G - 1028 01d7 XPS M1210 - 1028 01f3 Inspiron 1420 - 103c 30b5 Presario V3242AU - 103c 30b7 Presario V6133CL - 1043 1237 A6J-Q008 - 1043 1967 V6800V - 144d c018 X20 IV - 17aa 20ca ThinkPad T61 - 0811 R5C811 - 0822 R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter - 1014 0556 ThinkPad X60s / Z60t - 1014 0598 ThinkPad Z60m - 1025 0121 Aspire 5920G - 1028 0188 Inspiron 6000 laptop - 1028 01a2 Inspiron 9200 - 1028 01d7 XPS M1210 - 1028 01f3 Inspiron 1420 - 103c 03b5 Presario V3242AU - 103c 30b7 Presario V6133CL - 103c 30c1 Compaq 6910p - 1043 1237 A6J-Q008 - 1043 1967 ASUS V6800V - 10f7 8338 Panasonic CF-Y5 laptop - 144d c018 X20 IV - 17aa 201d ThinkPad X60s - 17aa 20c7 ThinkPad T61 - 0832 R5C832 IEEE 1394 Controller - 1025 0121 Aspire 5920G - 1028 01d7 XPS M1210 - 1028 01f3 Inspiron 1420 - 103c 30b5 Presario V3242AU - 103c 30b7 Presario V6133CL - 103c 30c1 Compaq 6910p - 0841 R5C841 CardBus/SD/SDIO/MMC/MS/MSPro/xD/IEEE1394 - 0843 R5C843 MMC Host Controller - 1025 0121 Aspire 5920G - 1028 01d7 XPS M1210 - 1028 01f3 Inspiron 1420 - 1028 01f5 Dell Inspiron 1501 - 103c 03b5 Presario V3242AU - 103c 30b7 Presario V6133CL - 1183 0843 Alienware Aurora m9700 - 0852 xD-Picture Card Controller - 1025 0121 Aspire 5920G - 1028 01f3 Inspiron 1420 - 103c 30b5 Presario V3242AU - 103c 30b7 Presario V6133CL - 1043 1967 V6800V - 1180 0852 Pavilion 2410us - 1324 10cf P7120 -1181 Telmatics International -1183 Fujikura Ltd -1184 Forks Inc -1185 Dataworld International Ltd -1186 D-Link System Inc - 0100 DC21041 - 1002 DL10050 Sundance Ethernet - 1186 1002 DFE-550TX/FX - 1186 1012 DFE-580TX - 1025 AirPlus Xtreme G DWL-G650 Adapter - 1026 AirXpert DWL-AG650 Wireless Cardbus Adapter - 1043 AirXpert DWL-AG650 Wireless Cardbus Adapter - 1300 RTL8139 Ethernet - 1186 1300 DFE-538TX 10/100 Ethernet Adapter - 1186 1301 DFE-530TX+ 10/100 Ethernet Adapter - 1186 1303 DFE-528TX 10/100 Fast Ethernet PCI Adapter - 1340 DFE-690TXD CardBus PC Card - 1405 DFE-520TX Fast Ethernet PCI Adapter - 1540 DFE-680TX - 1541 DFE-680TXD CardBus PC Card - 1561 DRP-32TXD Cardbus PC Card - 2027 AirPlus Xtreme G DWL-G520 Adapter - 3203 AirPlus Xtreme G DWL-G520 Adapter - 3300 DWL-510 2.4GHz Wireless PCI Adapter - 3a03 AirPro DWL-A650 Wireless Cardbus Adapter(rev.B) - 3a04 AirPro DWL-AB650 Multimode Wireless Cardbus Adapter - 3a05 AirPro DWL-AB520 Multimode Wireless PCI Adapter - 3a07 AirXpert DWL-AG650 Wireless Cardbus Adapter - 3a08 AirXpert DWL-AG520 Wireless PCI Adapter - 3a10 AirXpert DWL-AG650 Wireless Cardbus Adapter(rev.B) - 3a11 AirXpert DWL-AG520 Wireless PCI Adapter(rev.B) - 3a12 AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C) - 3a13 AirPlus DWL-G520 Wireless PCI Adapter(rev.B) - 3a14 AirPremier DWL-AG530 Wireless PCI Adapter - 3a63 AirXpert DWL-AG660 Wireless Cardbus Adapter - 3a70 DWA-556 Xtreme N PCI Express Desktop Adapter - 3c00 D-link DWL-G650X - 3c09 AirPlus G DWL-G510 - 4000 DL2000-based Gigabit Ethernet - 4001 DGE-550SX PCI-X Gigabit Ethernet Adapter - 4300 DGE-528T Gigabit Ethernet Adapter -# There are at least 3 revisions of this adapter; 4800 is board revision A1 as far as I can tell, revision B1 is 4c00. - 4800 DGE-530T Gigabit Ethernet Adapter (rev 11) - 4b00 DGE-560T PCI Express Gigabit Ethernet Adapter - 4b01 DGE-530T Gigabit Ethernet Adapter (rev 11) - 4b02 DGE-560SX PCI Express Gigabit Ethernet Adapter - 4b03 DGE-550T Gigabit Ethernet Adapter V.B1 - 4c00 Gigabit Ethernet Adapter - 1186 4c00 DGE-530T Gigabit Ethernet Adapter - 8400 D-Link DWL-650+ CardBus PC Card -1187 Advanced Technology Laboratories, Inc. -1188 Shima Seiki Manufacturing Ltd. -1189 Matsushita Electronics Co Ltd -118a Hilevel Technology -118b Hypertec Pty Limited -118c Corollary, Inc - 0014 PCIB [C-bus II to PCI bus host bridge chip] - 1117 Intel 8-way XEON Profusion Chipset [Cache Coherency Filter] -118d BitFlow Inc - 0001 Raptor-PCI framegrabber - 0012 Model 12 Road Runner Frame Grabber - 0014 Model 14 Road Runner Frame Grabber - 0024 Model 24 Road Runner Frame Grabber - 0044 Model 44 Road Runner Frame Grabber - 0112 Model 12 Road Runner Frame Grabber - 0114 Model 14 Road Runner Frame Grabber - 0124 Model 24 Road Runner Frame Grabber - 0144 Model 44 Road Runner Frame Grabber - 0212 Model 12 Road Runner Frame Grabber - 0214 Model 14 Road Runner Frame Grabber - 0224 Model 24 Road Runner Frame Grabber - 0244 Model 44 Road Runner Frame Grabber - 0312 Model 12 Road Runner Frame Grabber - 0314 Model 14 Road Runner Frame Grabber - 0324 Model 24 Road Runner Frame Grabber - 0344 Model 44 Road Runner Frame Grabber -118e Hermstedt GmbH -118f Green Logic -1190 Tripace - c731 TP-910/920/940 PCI Ultra(Wide) SCSI Adapter -1191 Artop Electronic Corp - 0003 SCSI Cache Host Adapter - 0004 ATP8400 - 0005 ATP850UF - 0006 ATP860 NO-BIOS - 0007 ATP860 - 0008 ATP865 NO-ROM - 0009 ATP865 - 000a ATP867-A - 000b ATP867-B - 000d ATP8620 - 000e ATP8620 - 8002 AEC6710 SCSI-2 Host Adapter - 8010 AEC6712UW SCSI - 8020 AEC6712U SCSI - 8030 AEC6712S SCSI - 8040 AEC6712D SCSI - 8050 AEC6712SUW SCSI - 8060 AEC6712 SCSI - 8080 AEC67160 SCSI - 8081 AEC67160S SCSI - 808a AEC67162 2-ch. LVD SCSI -1192 Densan Company Ltd -1193 Zeitnet Inc. - 0001 1221 - 0002 1225 -1194 Toucan Technology -1195 Ratoc System Inc -1196 Hytec Electronics Ltd -1197 Gage Applied Sciences, Inc. - 010c CompuScope 82G 8bit 2GS/s Analog Input Card -1198 Lambda Systems Inc -1199 Attachmate Corporation -119a Mind Share, Inc. -119b Omega Micro Inc. - 1221 82C092G -119c Information Technology Inst. -119d Bug, Inc. Sapporo Japan -119e Fujitsu Microelectronics Ltd. - 0001 FireStream 155 - 0003 FireStream 50 -119f Bull HN Information Systems -11a0 Convex Computer Corporation -11a1 Hamamatsu Photonics K.K. -11a2 Sierra Research and Technology -11a3 Deuretzbacher GmbH & Co. Eng. KG -11a4 Barco Graphics NV -11a5 Microunity Systems Eng. Inc -11a6 Pure Data Ltd. -11a7 Power Computing Corp. -11a8 Systech Corp. -11a9 InnoSys Inc. - 4240 AMCC S933Q Intelligent Serial Card -11aa Actel -# Nee Galileo Technology, Inc. -11ab Marvell Technology Group Ltd. - 0146 GT-64010/64010A System Controller - 0f53 88E6318 Link Street network controller - 11ab MV88SE614x SATA II PCI-E controller - 138f W8300 802.11 Adapter (rev 07) - 1fa6 Marvell W8300 802.11 Adapter - 1fa7 88W8310 and 88W8000G [Libertas] 802.11g client chipset - 1faa 88w8335 [Libertas] 802.11b/g Wireless - 1385 4e00 WG511v2 54 Mbps Wireless PC Card - 1385 6b00 WG311v3 802.11g Wireless PCI Adapter - 2a01 88W8335 [Libertas] 802.11b/g Wireless - 2a02 88W8361 [TopDog] 802.11n Wireless - 4101 OLPC Cafe Controller Secure Digital Controller - 4320 88E8001 Gigabit Ethernet Controller - 1019 0f38 Marvell 88E8001 Gigabit Ethernet Controller (ECS) - 1019 8001 Marvell 88E8001 Gigabit Ethernet Controller (ECS) - 1043 173c Marvell 88E8001 Gigabit Ethernet Controller (Asus) - 1043 811a Marvell 88E8001 Gigabit Ethernet Controller (Asus) - 105b 0c19 Marvell 88E8001 Gigabit Ethernet Controller (Foxconn) - 10b8 b452 EZ Card 1000 (SMC9452TXV.2) - 11ab 0121 Marvell RDK-8001 - 11ab 0321 Marvell RDK-8003 - 11ab 1021 Marvell RDK-8010 - 11ab 4320 Marvell Yukon Gigabit Ethernet 10/100/1000Baset-T Constroller (Asus) - 11ab 5021 Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (64 bit) - 11ab 9521 Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (32 bit) - 1458 e000 Marvell 88E8001 Gigabit Ethernet Controller (Gigabyte) - 147b 1406 Marvell 88E8001 Gigabit Ethernet Controller (Abit) - 15d4 0047 Marvell 88E8001 Gigabit Ethernet Controller (Iwill) - 1695 9025 Marvell 88E8001 Gigabit Ethernet Controller (Epox) - 17f2 1c03 Marvell 88E8001 Gigabit Ethernet Controller (Albatron) - 270f 2803 Marvell 88E8001 Gigabit Ethernet Controller (Chaintech) - 4340 88E8021 PCI-X IPMI Gigabit Ethernet Controller - 4341 88E8022 PCI-X IPMI Gigabit Ethernet Controller - 4342 88E8061 PCI-E IPMI Gigabit Ethernet Controller - 4343 88E8062 PCI-E IPMI Gigabit Ethernet Controller - 4344 88E8021 PCI-X IPMI Gigabit Ethernet Controller - 4345 88E8022 PCI-X IPMI Gigabit Ethernet Controller - 4346 88E8061 PCI-E IPMI Gigabit Ethernet Controller - 4347 88E8062 PCI-E IPMI Gigabit Ethernet Controller - 4c53 10d0 Telum ASLP10 PrAMC Gigabit Ethernet - 4350 88E8035 PCI-E Fast Ethernet Controller - 1179 0001 Marvell 88E8035 Fast Ethernet Controller (Toshiba) - 11ab 3521 Marvell RDK-8035 - 1854 000d Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 000e Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 000f Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 0011 Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 0012 Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 0016 Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 0017 Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 0018 Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 0019 Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 001c Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 001e Marvell 88E8035 Fast Ethernet Controller (LGE) - 1854 0020 Marvell 88E8035 Fast Ethernet Controller (LGE) - 4351 88E8036 PCI-E Fast Ethernet Controller - 107b 4009 Marvell 88E8036 Fast Ethernet Controller (Wistron) - 10f7 8338 Marvell 88E8036 Fast Ethernet Controller (Panasonic) - 1179 0001 Marvell 88E8036 Fast Ethernet Controller (Toshiba) - 1179 ff00 Marvell 88E8036 Fast Ethernet Controller (Compal) - 1179 ff10 Marvell 88E8036 Fast Ethernet Controller (Inventec) - 11ab 3621 Marvell RDK-8036 - 13d1 ac12 Abocom EFE3K - 10/100 Ethernet Expresscard - 161f 203d Marvell 88E8036 Fast Ethernet Controller (Arima) - 1854 000d Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 000e Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 000f Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 0011 Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 0012 Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 0016 Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 0017 Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 0018 Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 0019 Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 001c Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 001e Marvell 88E8036 Fast Ethernet Controller (LGE) - 1854 0020 Marvell 88E8036 Fast Ethernet Controller (LGE) - 4352 88E8038 PCI-E Fast Ethernet Controller - 4353 88E8039 PCI-E Fast Ethernet Controller - 4354 88E8040 PCI-E Fast Ethernet Controller - 4355 88E8040T PCI-E Fast Ethernet Controller - 4356 88EC033 Ethernet Controller - 435a 88E8048 PCI-E Fast Ethernet Controller - 4360 88E8052 PCI-E ASF Gigabit Ethernet Controller - 1043 8134 Marvell 88E8052 Gigabit Ethernet Controller (Asus) - 107b 4009 Marvell 88E8052 Gigabit Ethernet Controller (Wistron) - 11ab 5221 Marvell RDK-8052 - 1458 e000 Marvell 88E8052 Gigabit Ethernet Controller (Gigabyte) - 1462 052c Marvell 88E8052 Gigabit Ethernet Controller (MSI) - 1849 8052 Marvell 88E8052 Gigabit Ethernet Controller (ASRock) - a0a0 0509 Marvell 88E8052 Gigabit Ethernet Controller (Aopen) - 4361 88E8050 PCI-E ASF Gigabit Ethernet Controller - 107b 3015 Marvell 88E8050 Gigabit Ethernet Controller (Gateway) - 11ab 5021 Marvell 88E8050 Gigabit Ethernet Controller (Intel) - 8086 3063 D925XCVLK mainboard - 8086 3439 Marvell 88E8050 Gigabit Ethernet Controller (Intel) - 4362 88E8053 PCI-E Gigabit Ethernet Controller - 103c 2a0d Marvell 88E8053 Gigabit Ethernet Controller (Asus) - 1043 8142 Marvell 88E8053 Gigabit Ethernet controller PCIe (Asus) - 109f 3197 Marvell 88E8053 Gigabit Ethernet Controller (Trigem) - 10f7 8338 Marvell 88E8053 Gigabit Ethernet Controller (Panasonic) - 10fd a430 Marvell 88E8053 Gigabit Ethernet Controller (SOYO) - 1179 0001 Marvell 88E8053 Gigabit Ethernet Controller (Toshiba) - 1179 ff00 Marvell 88E8053 Gigabit Ethernet Controller (Compal) - 1179 ff10 Marvell 88E8053 Gigabit Ethernet Controller (Inventec) - 11ab 5321 Marvell RDK-8053 - 1297 c240 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) - 1297 c241 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) - 1297 c242 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) - 1297 c243 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) - 1297 c244 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) - 13d1 ac11 EGE5K - Giga Ethernet Expresscard - 1458 e000 Marvell 88E8053 Gigabit Ethernet Controller (Gigabyte) - 1462 058c Marvell 88E8053 Gigabit Ethernet Controller (MSI) - 14c0 0012 Marvell 88E8053 Gigabit Ethernet Controller (Compal) - 1558 04a0 Marvell 88E8053 Gigabit Ethernet Controller (Clevo) - 15bd 1003 Marvell 88E8053 Gigabit Ethernet Controller (DFI) - 161f 203c Marvell 88E8053 Gigabit Ethernet Controller (Arima) - 161f 203d Marvell 88E8053 Gigabit Ethernet Controller (Arima) - 1695 9029 Marvell 88E8053 Gigabit Ethernet Controller (Epox) - 17f2 2c08 Marvell 88E8053 Gigabit Ethernet Controller (Albatron) - 17ff 0585 Marvell 88E8053 Gigabit Ethernet Controller (Quanta) - 1849 8053 Marvell 88E8053 Gigabit Ethernet Controller (ASRock) - 1854 000b Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 000c Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 0010 Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 0013 Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 0014 Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 0015 Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 001a Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 001b Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 001d Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 001f Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 0021 Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 1854 0022 Marvell 88E8053 Gigabit Ethernet Controller (LGE) - 270f 2801 Marvell 88E8053 Gigabit Ethernet Controller (Chaintech) - a0a0 0506 Marvell 88E8053 Gigabit Ethernet Controller (Aopen) - 4363 88E8055 PCI-E Gigabit Ethernet Controller - 4364 88E8056 PCI-E Gigabit Ethernet Controller - 4365 88E8070 based Ethernet Controller - 4366 88EC036 PCI-E Gigabit Ethernet Controller - 4367 88EC032 Ethernet Controller - 4368 88EC034 Ethernet Controller - 4369 88EC042 Ethernet Controller - 436a Marvell Yukon 88E8058 PCI-E Gigabit Ethernet Controller - 436b 88E8071 PCI-E Gigabit Ethernet Controller - 4370 88E8075 PCI-E Gigabit Ethernet Controller - 4611 GT-64115 System Controller - 4620 GT-64120/64120A/64121A System Controller - 4801 GT-48001 - 5005 Belkin F5D5005 Gigabit Desktop Network PCI Card - 5040 MV88SX5040 4-port SATA I PCI-X Controller - 5041 MV88SX5041 4-port SATA I PCI-X Controller - 5080 MV88SX5080 8-port SATA I PCI-X Controller - 5081 MV88SX5081 8-port SATA I PCI-X Controller - 5181 88f5181 [Orion-1] ARM SoC - 5182 88f5182 [Orion-NAS] ARM SoC - 5281 88f5281 [Orion-2] ARM SoC - 6041 MV88SX6041 4-port SATA II PCI-X Controller - 6042 88SX6042 PCI-X 4-Port SATA-II - 6081 MV88SX6081 8-port SATA II PCI-X Controller - 6101 88SE6101 single-port PATA133 interface - 6102 88SE6102 single-port PATA133(IDE) interface - 6111 88SE6111 1-port PATA133(IDE) and 1-port SATA II Controllers - 6121 88SE6121 SATA II Controller - 6141 88SE614x SATA II PCI-E controller - 6145 88SE6145 SATA II PCI-E controller - 6450 64560 System Controller - 6460 MV64360/64361/64362 System Controller - 6480 MV64460/64461/64462 System Controller - 1775 c200 C2K CompactPCI single board computer - 6485 MV64460/64461/64462 System Controller, Revision B - 7042 88SX7042 PCI-e 4-port SATA-II - 16b8 434b Tempo SATA E4P - f003 GT-64010 Primary Image Piranha Image Generator -11ac Canon Information Systems Research Aust. -11ad Lite-On Communications Inc - 0002 LNE100TX - 11ad 0002 LNE100TX - 11ad 0003 LNE100TX - 11ad f003 LNE100TX - 11ad ffff LNE100TX - 1385 f004 FA310TX - 2646 f002 KNE110TX EtheRx Fast Ethernet - c115 LNE100TX [Linksys EtherFast 10/100] - 11ad c001 LNE100TX [ver 2.0] - 2646 000b KNE111TX -11ae Aztech System Ltd -11af Avid Technology Inc. - 0001 Cinema - ee40 Digidesign Audiomedia III -11b0 V3 Semiconductor Inc. - 0002 V300PSC - 0292 V292PBC [Am29030/40 Bridge] - 0960 V96xPBC - c960 V96DPC -11b1 Apricot Computers -11b2 Eastman Kodak -11b3 Barr Systems Inc. -11b4 Leitch Technology International -11b5 Radstone Technology Plc -11b6 United Video Corp -11b7 Motorola -11b8 XPoint Technologies, Inc - 0001 Quad PeerMaster -11b9 Pathlight Technology Inc. - c0ed SSA Controller -11ba Videotron Corp -11bb Pyramid Technology -11bc Network Peripherals Inc - 0001 NP-PCI -11bd Pinnacle Systems Inc. - 002e PCTV 40i - 0040 Royal TS Function 1 - 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Tuner 1 - 11bd 0045 PCTV Dual Sat Pro PCI 4000i Tuner 1 - 0041 RoyalTS Function 2 - 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Tuner 2 - 11bd 0045 PCTV Dual Sat Pro PCI 4000i Tuner 2 - 0042 Royal TS Function 3 - 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Common - 11bd 0045 PCTV Dual Sat Pro PCI 4000i Common - 0051 PCTV HD 800i - bede AV/DV Studio Capture Card -11be International Microcircuits Inc -11bf Astrodesign, Inc. -11c0 Hewlett Packard -# Nee Lucent Microelectronics -11c1 Agere Systems - 0440 56k WinModem - 1033 8015 LT WinModem 56k Data+Fax+Voice+Dsvd - 1033 8047 LT WinModem 56k Data+Fax+Voice+Dsvd - 1033 804f LT WinModem 56k Data+Fax+Voice+Dsvd - 10cf 102c LB LT Modem V.90 56k - 10cf 104a BIBLO LT Modem 56k - 10cf 105f LB2 LT Modem V.90 56k - 1179 0001 Internal V.90 Modem - 11c1 0440 LT WinModem 56k Data+Fax+Voice+Dsvd - 122d 4101 MDP7800-U Modem - 122d 4102 MDP7800SP-U Modem - 13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd - 13e0 0440 LT WinModem 56k Data+Fax+Voice+Dsvd - 13e0 0441 LT WinModem 56k Data+Fax+Voice+Dsvd - 13e0 0450 LT WinModem 56k Data+Fax+Voice+Dsvd - 13e0 f100 LT WinModem 56k Data+Fax+Voice+Dsvd - 13e0 f101 LT WinModem 56k Data+Fax+Voice+Dsvd - 144d 2101 LT56PV Modem - 149f 0440 LT WinModem 56k Data+Fax+Voice+Dsvd - 0441 56k WinModem - 1033 804d LT WinModem 56k Data+Fax - 1033 8065 LT WinModem 56k Data+Fax - 1092 0440 Supra 56i - 1179 0001 Internal V.90 Modem - 11c1 0440 LT WinModem 56k Data+Fax - 11c1 0441 LT WinModem 56k Data+Fax - 122d 4100 MDP7800-U Modem - 13e0 0040 LT WinModem 56k Data+Fax - 13e0 0100 LT WinModem 56k Data+Fax - 13e0 0410 LT WinModem 56k Data+Fax - 13e0 0420 TelePath Internet 56k WinModem - 13e0 0440 LT WinModem 56k Data+Fax - 13e0 0443 LT WinModem 56k Data+Fax - 13e0 f102 LT WinModem 56k Data+Fax - 1416 9804 CommWave 56k Modem - 141d 0440 LT WinModem 56k Data+Fax - 144f 0441 Lucent 56k V.90 DF Modem - 144f 0449 Lucent 56k V.90 DF Modem - 144f 110d Lucent Win Modem - 1468 0441 Presario 56k V.90 DF Modem - 1668 0440 Lucent Win Modem - 0442 56k WinModem - 11c1 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 11c1 0442 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 13e0 0412 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 13e0 0442 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 13fc 2471 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 144d 2104 LT56PT Modem - 144f 1104 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 149f 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 1668 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 0443 LT WinModem - 0444 LT WinModem - 0445 LT WinModem - 8086 2203 PRO/100+ MiniPCI (probably an Ambit U98.003.C.00 combo card) - 8086 2204 PRO/100+ MiniPCI on Armada E500 - 0446 LT WinModem - 0447 LT WinModem - 0448 WinModem 56k - 1014 0131 Lucent Win Modem - 1033 8066 LT WinModem 56k Data+Fax+Voice+Dsvd - 13e0 0030 56k Voice Modem - 13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd -# Actiontech eth+modem card as used by Dell &c. - 1668 2400 LT WinModem 56k (MiniPCI Ethernet+Modem) - 0449 WinModem 56k - 0e11 b14d 56k V.90 Modem - 13e0 0020 LT WinModem 56k Data+Fax - 13e0 0041 TelePath Internet 56k WinModem - 1436 0440 Lucent Win Modem - 144f 0449 Lucent 56k V.90 DFi Modem - 1468 0410 IBM ThinkPad T23 - 1468 0440 Lucent Win Modem - 1468 0449 Presario 56k V.90 DFi Modem - 044a F-1156IV WinModem (V90, 56KFlex) - 10cf 1072 LB Global LT Modem - 13e0 0012 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 13e0 0042 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 144f 1005 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd - 044b LT WinModem - 044c LT WinModem - 044d LT WinModem - 044e LT WinModem - 044f V90 WildWire Modem - 0450 LT WinModem - 1033 80a8 Versa Note Vxi - 144f 4005 Magnia SG20 - 1468 0450 Evo N600c - 0451 LT WinModem - 0452 LT WinModem - 0453 LT WinModem - 0454 LT WinModem - 0455 LT WinModem - 0456 LT WinModem - 0457 LT WinModem - 0458 LT WinModem - 0459 LT WinModem - 045a LT WinModem - 045c LT WinModem - 0461 V90 WildWire Modem - 0462 V90 WildWire Modem - 0480 Venus Modem (V90, 56KFlex) - 048c V.92 56K WinModem -# InPorte Home Internal 56k Modem/fax/answering machine/SMS Features - 048f V.92 56k WinModem - 0620 Lucent V.92 Data/Fax Modem - 1040 HDA softmodem - 2600 StarPro26XX family (SP2601, SP2603, SP2612) DSP - 5400 OR3TP12 FPSC - 5656 Agere Systems Venus Modem - 5801 USB - 5802 USS-312 USB Controller - 5803 USS-344S USB Controller - 5811 FW322/323 - 1043 8294 IEEE 1394a Firewire Controller - 8086 524c D865PERL mainboard - dead 0800 FireWire Host Bus Adapter - 5901 FW643 PCI Express1394b Controller (PHY/Link) - 1443 0643 FireBoard800-e V.2 - 1546 0643 FWB-PCIE1X20 - 8110 T8110 H.100/H.110 TDM switch - 12d9 000c E1/T1 PMXc cPCI carrier card - ab10 WL60010 Wireless LAN MAC - ab11 WL60040 Multimode Wireles LAN MAC - 11c1 ab12 WaveLAN 11abg Cardbus card (Model 1102) - 11c1 ab13 WaveLAN 11abg MiniPCI card (Model 0512) - 11c1 ab15 WaveLAN 11abg Cardbus card (Model 1106) - 11c1 ab16 WaveLAN 11abg MiniPCI card (Model 0516) - ab20 ORiNOCO PCI Adapter - ab21 Agere Wireless PCI Adapter - ab30 Hermes2 Mini-PCI WaveLAN a/b/g - 14cd 2012 Hermes2 Mini-PCI WaveLAN a/b/g - ed00 ET-131x PCI-E Ethernet Controller - ed01 ET-131x PCI-E Ethernet Controller -11c2 Sand Microelectronics -11c3 NEC Corporation -11c4 Document Technologies, Inc -11c5 Shiva Corporation -11c6 Dainippon Screen Mfg. Co. Ltd -11c7 D.C.M. Data Systems -11c8 Dolphin Interconnect Solutions AS - 0658 PSB32 SCI-Adapter D31x - d665 PSB64 SCI-Adapter D32x - d667 PSB66 SCI-Adapter D33x -11c9 Magma - 0010 16-line serial port w/- DMA - 0011 4-line serial port w/- DMA -11ca LSI Systems, Inc -11cb Specialix Research Ltd. - 2000 PCI_9050 - 11cb 0200 SX - 11cb b008 I/O8+ - 4000 SUPI_1 - 8000 T225 -11cc Michels & Kleberhoff Computer GmbH -11cd HAL Computer Systems, Inc. -11ce Netaccess -11cf Pioneer Electronic Corporation -11d0 Lockheed Martin Federal Systems-Manassas -11d1 Auravision - 01f7 VxP524 - 01f9 VxP951 -11d2 Intercom Inc. -11d3 Trancell Systems Inc -11d4 Analog Devices - 0078 AD1986HD sound chip - 1535 Blackfin BF535 processor - 1805 SM56 PCI modem - 1889 AD1889 sound chip - 1981 AD1981HD sound chip - 1983 AD1983HD sound chip - 1984 AD1984HD sound chip - 17aa 20bb T61p Notebook - 1986 AD1986A sound chip - 11d4 1986 Lenovo N100 B9G - 198b AD1988B Sound Chip - 5340 AD1881 sound chip -11d5 Ikon Corporation - 0115 10115 - 0117 10117 -11d6 Tekelec Telecom -11d7 Trenton Technology, Inc. -11d8 Image Technologies Development -11d9 TEC Corporation -11da Novell -11db Sega Enterprises Ltd -11dc Questra Corporation -11dd Crosfield Electronics Limited -11de Zoran Corporation - 6017 miroVIDEO DC30 - 6057 ZR36057PQC Video cutting chipset - 1031 7efe DC10 Plus - 1031 fc00 MiroVIDEO DC50, Motion JPEG Capture/CODEC Board - 12f8 8a02 Tekram Video Kit - 13ca 4231 JPEG/TV Card - 6120 ZR36120 - 1328 f001 Cinemaster C DVD Decoder - 13c2 0000 MediaFocus Satellite TV Card - 1de1 9fff Video Kit C210 -11df New Wave PDG -11e0 Cray Communications A/S -11e1 GEC Plessey Semi Inc. -11e2 Samsung Information Systems America -11e3 Quicklogic Corporation - 0001 COM-ON-AIR Dosch&Amand DECT - 0560 QL5064 Companion Design Demo Board - 5030 PC Watchdog - 8417 QL5064 [QuickPCI] PCI v2.2 bridge for SMT417 Dual TMS320C6416T PMC Module -11e4 Second Wave Inc -11e5 IIX Consulting -11e6 Mitsui-Zosen System Research -11e7 Toshiba America, Elec. Company -11e8 Digital Processing Systems Inc. -11e9 Highwater Designs Ltd. -11ea Elsag Bailey -11eb Formation Inc. -11ec Coreco Inc - 000d Oculus-F/64P - 1800 Cobra/C6 -11ed Mediamatics -11ee Dome Imaging Systems Inc -11ef Nicolet Technologies B.V. -11f0 Compu-Shack - 4231 FDDI - 4232 FASTline UTP Quattro - 4233 FASTline FO - 4234 FASTline UTP - 4235 FASTline-II UTP - 4236 FASTline-II FO - 4731 GIGAline -11f1 Symbios Logic Inc -11f2 Picture Tel Japan K.K. -11f3 Keithley Metrabyte - 0011 KPCI-PIO24 -11f4 Kinetic Systems Corporation - 2915 CAMAC controller -11f5 Computing Devices International -11f6 Compex - 0112 ENet100VG4 - 0113 FreedomLine 100 - 1401 ReadyLink 2000 - 2011 RL100-ATX 10/100 - 11f6 2011 RL100-ATX - 2201 ReadyLink 100TX (Winbond W89C840) - 11f6 2011 ReadyLink 100TX - 9881 RL100TX Fast Ethernet -11f7 Scientific Atlanta -11f8 PMC-Sierra Inc. - 7364 PM7364 [FREEDM - 32 Frame Engine & Datalink Mgr] - 7375 PM7375 [LASAR-155 ATM SAR] - 7384 PM7384 [FREEDM - 84P672 Frm Engine & Datalink Mgr] - 8000 PM8000 [SPC - SAS Protocol Controller] -11f9 I-Cube Inc -11fa Kasan Electronics Company, Ltd. -11fb Datel Inc -11fc Silicon Magic -11fd High Street Consultants -11fe Comtrol Corporation - 0001 RocketPort 32 port w/external I/F - 0002 RocketPort 8 port w/external I/F - 0003 RocketPort 16 port w/external I/F - 0004 RocketPort 4 port w/quad cable - 0005 RocketPort 8 port w/octa cable - 0006 RocketPort 8 port w/RJ11 connectors - 0007 RocketPort 4 port w/RJ11 connectors - 0008 RocketPort 8 port w/ DB78 SNI (Siemens) connector - 0009 RocketPort 16 port w/ DB78 SNI (Siemens) connector - 000a RocketPort Plus 4 port - 000b RocketPort Plus 8 port - 000c RocketModem 6 port - 000d RocketModem 4-port - 000e RocketPort Plus 2 port RS232 - 000f RocketPort Plus 2 port RS422 - 0040 RocketPort Infinity Octa, 8port, RJ45 - 0041 RocketPort Infinity 32port, External Interface - 0042 RocketPort Infinity 8port, External Interface - 0043 RocketPort Infinity 16port, External Interface - 0044 RocketPort Infinity Quad, 4port, DB - 0045 RocketPort Infinity Octa, 8port, DB - 0047 RocketPort Infinity 4port, RJ45 - 004f RocketPort Infinity 2port, SMPTE - 0052 RocketPort Infinity Octa, 8port, SMPTE - 0801 RocketPort UPCI 32 port w/external I/F - 0802 RocketPort UPCI 8 port w/external I/F - 0803 RocketPort UPCI 16 port w/external I/F - 0805 RocketPort UPCI 8 port w/octa cable - 080c RocketModem III 8 port - 080d RocketModem III 4 port - 0811 RocketPort UPCI Plus 8 port RS232 - 0812 RocketPort UPCI Plus 8 port RS422 - 0903 RocketPort Compact PCI 16 port w/external I/F - 8015 RocketPort 4-port UART 16954 -11ff Scion Corporation - 0003 AG-5 -1200 CSS Corporation -1201 Vista Controls Corp -1202 Network General Corp. - 4300 Gigabit Ethernet Adapter - 1202 9841 SK-9841 LX - 1202 9842 SK-9841 LX dual link - 1202 9843 SK-9843 SX - 1202 9844 SK-9843 SX dual link -1203 Bayer Corporation, Agfa Division -1204 Lattice Semiconductor Corporation -1205 Array Corporation -1206 Amdahl Corporation -1208 Parsytec GmbH - 4853 HS-Link Device -1209 SCI Systems Inc -120a Synaptel -120b Adaptive Solutions -120c Technical Corp. -120d Compression Labs, Inc. -120e Cyclades Corporation - 0100 Cyclom-Y below first megabyte - 0101 Cyclom-Y above first megabyte - 0102 Cyclom-4Y below first megabyte - 0103 Cyclom-4Y above first megabyte - 0104 Cyclom-8Y below first megabyte - 0105 Cyclom-8Y above first megabyte - 0200 Cyclades-Z below first megabyte - 0201 Cyclades-Z above first megabyte - 0300 PC300/RSV or /X21 (2 ports) - 0301 PC300/RSV or /X21 (1 port) - 0310 PC300/TE (2 ports) - 0311 PC300/TE (1 port) - 0320 PC300/TE-M (2 ports) - 0321 PC300/TE-M (1 port) - 0400 PC400 -120f Essential Communications - 0001 Roadrunner serial HIPPI -1210 Hyperparallel Technologies -1211 Braintech Inc -1212 Kingston Technology Corp. -1213 Applied Intelligent Systems, Inc. -1214 Performance Technologies, Inc. -1215 Interware Co., Ltd -1216 Purup Prepress A/S -1217 O2 Micro, Inc. - 00f7 Firewire (IEEE 1394) - 6729 OZ6729 - 673a OZ6730 - 6832 OZ6832/6833 CardBus Controller - 6836 OZ6836/6860 CardBus Controller - 6872 OZ6812 CardBus Controller - 6925 OZ6922 CardBus Controller - 6933 OZ6933/711E1 CardBus/SmartCardBus Controller - 1025 1016 Travelmate 612 TX - 6972 OZ601/6912/711E0 CardBus/SmartCardBus Controller - 1014 020c ThinkPad R30 - 1179 0001 Magnia Z310 - 7110 OZ711Mx 4-in-1 MemoryCardBus Accelerator - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 1734 106c Amilo A1645 - 7112 OZ711EC1/M1 SmartCardBus/MemoryCardBus Controller - 7113 OZ711EC1 SmartCardBus Controller - 1025 0035 TravelMate 660 - 7114 OZ711M1/MC1 4-in-1 MemoryCardBus Controller - 7120 Integrated MMC/SD Controller - 7130 Integrated MS/xD Controller - 7134 OZ711MP1/MS1 MemoryCardBus Controller - 7135 Cardbus bridge - 7136 OZ711SP1 Memory CardBus Controller - 71e2 OZ711E2 SmartCardBus Controller - 7212 OZ711M2 4-in-1 MemoryCardBus Controller - 7213 OZ6933E CardBus Controller - 7223 OZ711M3/MC3 4-in-1 MemoryCardBus Controller - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 10cf 11c4 Lifebook P5020D Laptop - 7233 OZ711MP3/MS3 4-in-1 MemoryCardBus Controller -1218 Hybricon Corp. -1219 First Virtual Corporation -121a 3Dfx Interactive, Inc. - 0001 Voodoo - 0002 Voodoo 2 - 0003 Voodoo Banshee - 1092 0003 Monster Fusion - 1092 4000 Monster Fusion - 1092 4002 Monster Fusion - 1092 4801 Monster Fusion AGP - 1092 4803 Monster Fusion AGP - 1092 8030 Monster Fusion - 1092 8035 Monster Fusion AGP - 10b0 0001 Dragon 4000 - 1102 1017 3D Blaster Banshee PCI (CT6760) - 1102 1018 3D Blaster Banshee VE - 121a 0001 Voodoo Banshee AGP - 121a 0003 Voodoo Banshee AGP SGRAM - 121a 0004 Voodoo Banshee - 139c 0016 Raven - 139c 0017 Raven - 14af 0002 Maxi Gamer Phoenix - 0004 Voodoo Banshee [Velocity 100] - 0005 Voodoo 3 - 121a 0004 Voodoo3 AGP - 121a 0030 Voodoo3 AGP - 121a 0031 Voodoo3 AGP - 121a 0034 Voodoo3 AGP - 121a 0036 Voodoo3 2000 PCI - 121a 0037 Voodoo3 AGP - 121a 0038 Voodoo3 AGP - 121a 003a Voodoo3 AGP - 121a 0044 Voodoo3 - 121a 004b Velocity 100 - 121a 004c Velocity 200 - 121a 004d Voodoo3 AGP - 121a 004e Voodoo3 AGP - 121a 0051 Voodoo3 AGP - 121a 0052 Voodoo3 AGP - 121a 0057 Voodoo3 3000 PCI - 121a 0060 Voodoo3 3500 TV (NTSC) - 121a 0061 Voodoo3 3500 TV (PAL) - 121a 0062 Voodoo3 3500 TV (SECAM) - 0009 Voodoo 4 / Voodoo 5 - 121a 0003 Voodoo5 PCI 5500 - 121a 0009 Voodoo5 AGP 5500/6000 - 0057 Voodoo 3/3000 [Avenger] -121b Advanced Telecommunications Modules -121c Nippon Texaco., Ltd -121d Lippert Automationstechnik GmbH -121e CSPI - 0201 Myrinet 2000 Scalable Cluster Interconnect -121f Arcus Technology, Inc. -1220 Ariel Corporation - 1220 AMCC 5933 TMS320C80 DSP/Imaging board -1221 Contec Co., Ltd - 9172 PO-64L(PCI)H [Isolated Digital Output Board for PCI] - 91a2 PO-32L(PCI)H [Isolated Digital Output Board for PCI] - 91c3 DA16-16(LPCI)L [Un-insulated highly precise analog output board for Low Profile PCI] - b152 DIO-96D2-LPCI - c103 ADA16-32/2(PCI)F [High-Speed Analog I/O Board for PCI] -1222 Ancor Communications, Inc. -1223 Artesyn Communication Products - 0003 PM/Link - 0004 PM/T1 - 0005 PM/E1 - 0008 PM/SLS - 0009 BajaSpan Resource Target - 000a BajaSpan Section 0 - 000b BajaSpan Section 1 - 000c BajaSpan Section 2 - 000d BajaSpan Section 3 - 000e PM/PPC -1224 Interactive Images -1225 Power I/O, Inc. -1227 Tech-Source - 0006 Raptor GFX 8P - 0023 Raptor GFX [1100T] -1228 Norsk Elektro Optikk A/S -1229 Data Kinesis Inc. -122a Integrated Telecom -122b LG Industrial Systems Co., Ltd -122c Sican GmbH -122d Aztech System Ltd - 1206 368DSP - 1400 Trident PCI288-Q3DII (NX) - 50dc 3328 Audio - 122d 0001 3328 Audio - 80da 3328 Audio - 122d 0001 3328 Audio -122e Xyratex - 7722 Napatech XL1 - 7724 Napatech XL2/XA - 7729 Napatech XD -122f Andrew Corporation -1230 Fishcamp Engineering -1231 Woodward McCoach, Inc. - 04e1 Desktop PCI Telephony 4 - 05e1 Desktop PCI Telephony 5/6 - 0d00 LightParser - 0d02 LightParser 2 - 0d13 Desktop PCI L1/L3 Telephony -1232 GPT Limited -1233 Bus-Tech, Inc. -# Also Bochs uses this for virtual VGA... -1234 Technical Corp. -1235 Risq Modular Systems, Inc. -1236 Sigma Designs Corporation - 0000 RealMagic64/GX - 6401 REALmagic 64/GX (SD 6425) -1237 Alta Technology Corporation -1238 Adtran -1239 3DO Company -123a Visicom Laboratories, Inc. -123b Seeq Technology, Inc. -123c Century Systems, Inc. -123d Engineering Design Team, Inc. - 0000 EasyConnect 8/32 - 0002 EasyConnect 8/64 - 0003 EasyIO -123e Simutech, Inc. -123f C-Cube Microsystems - 00e4 MPEG - 8120 E4? - 11bd 0006 DV500 E4 - 11bd 000a DV500 E4 - 11bd 000f DV500 E4 - 1809 0016 Emuzed MAUI-III PCI PVR FM TV - 8888 Cinemaster C 3.0 DVD Decoder - 1002 0001 Cinemaster C 3.0 DVD Decoder - 1002 0002 Cinemaster C 3.0 DVD Decoder - 1328 0001 Cinemaster C 3.0 DVD Decoder -1240 Marathon Technologies Corp. -1241 DSC Communications -# Formerly Jaycor Networks, Inc. -1242 JNI Corporation - 1560 JNIC-1560 PCI-X Fibre Channel Controller - 1242 6562 FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter - 1242 656a FCX-6562 PCI-X Fibre Channel Adapter - 4643 FCI-1063 Fibre Channel Adapter - 6562 FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter - 656a FCX-6562 PCI-X Fibre Channel Adapter -1243 Delphax -# Audio-Visuelles Marketing und Computersysteme -1244 AVM GmbH - 0700 B1 ISDN - 0800 C4 ISDN - 0a00 A1 ISDN [Fritz] - 1244 0a00 FRITZ!Card ISDN Controller - 0e00 Fritz!PCI v2.0 ISDN - 1100 C2 ISDN - 1200 T1 ISDN - 2700 Fritz!Card DSL SL - 2900 Fritz!Card DSL v2.0 -1245 A.P.D., S.A. -1246 Dipix Technologies, Inc. -1247 Xylon Research, Inc. -1248 Central Data Corporation -1249 Samsung Electronics Co., Ltd. -124a AEG Electrocom GmbH -124b SBS/Greenspring Modular I/O - 0040 PCI-40A or cPCI-200 Quad IndustryPack carrier - 124b 9080 PCI9080 Bridge -124c Solitron Technologies, Inc. -124d Stallion Technologies, Inc. - 0000 EasyConnection 8/32 - 0002 EasyConnection 8/64 - 0003 EasyIO - 0004 EasyConnection/RA -124e Cylink -124f Infortrend Technology, Inc. - 0041 IFT-2000 Series RAID Controller -1250 Hitachi Microcomputer System Ltd -1251 VLSI Solutions Oy -1253 Guzik Technical Enterprises -1254 Linear Systems Ltd. - 0065 DVB Master FD - 007c DVB Master Quad/o -1255 Optibase Ltd - 1110 MPEG Forge - 1210 MPEG Fusion - 2110 VideoPlex - 2120 VideoPlex CC - 2130 VideoQuest -1256 Perceptive Solutions, Inc. - 4201 PCI-2220I - 4401 PCI-2240I - 5201 PCI-2000 -1257 Vertex Networks, Inc. -1258 Gilbarco, Inc. -1259 Allied Telesyn International - 2560 AT-2560 Fast Ethernet Adapter (i82557B) - 2801 AT-2801FX (RTL-8139) - a117 RTL81xx Fast Ethernet - a11e RTL81xx Fast Ethernet - a120 21x4x DEC-Tulip compatible 10/100 Ethernet -125a ABB Power Systems -125b Asix Electronics Corporation - 1400 AX88141 Fast Ethernet Controller - 1186 1100 AX8814X Based PCI Fast Ethernet Adapter -125c Aurora Technologies, Inc. - 0101 Saturn 4520P - 0640 Aries 16000P -125d ESS Technology - 0000 ES336H Fax Modem (Early Model) - 1948 ES1948 Maestro-1 - 1968 ES1968 Maestro 2 - 1028 0085 ES1968 Maestro-2 PCI - 1033 8051 ES1968 Maestro-2 Audiodrive - 1969 ES1969 Solo-1 Audiodrive - 1014 0166 ES1969 SOLO-1 AudioDrive on IBM Aptiva Mainboard - 125d 8888 Solo-1 Audio Adapter - 153b 111b Terratec 128i PCI - 1978 ES1978 Maestro 2E - 0e11 b112 Armada M700/E500 - 1033 803c ES1978 Maestro-2E Audiodrive - 1033 8058 ES1978 Maestro-2E Audiodrive - 1092 4000 Monster Sound MX400 - 1179 0001 ES1978 Maestro-2E Audiodrive - 1988 ES1988 Allegro-1 - 0e11 0098 Evo N600c - 1092 4100 Sonic Impact S100 - 125d 0431 Allegro AudioDrive - 125d 1988 ESS Allegro-1 Audiodrive - 125d 1998 Allegro AudioDrive - 125d 1999 Allegro-1 AudioDrive - 1989 ESS Modem - 125d 1989 ESS Modem - 1998 ES1983S Maestro-3i PCI Audio Accelerator - 1028 00b1 Latitude C600 - 1028 00e6 ES1983S Maestro-3i (Dell Inspiron 8100) - 1999 ES1983S Maestro-3i PCI Modem Accelerator - 199a ES1983S Maestro-3i PCI Audio Accelerator - 199b ES1983S Maestro-3i PCI Modem Accelerator - 2808 ES336H Fax Modem (Later Model) - 2838 ES2838/2839 SuperLink Modem - 2898 ES2898 Modem - 125d 0424 ES56-PI Data Fax Modem - 125d 0425 ES56T-PI Data Fax Modem - 125d 0426 ES56V-PI Data Fax Modem - 125d 0427 VW-PI Data Fax Modem - 125d 0428 ES56ST-PI Data Fax Modem - 125d 0429 ES56SV-PI Data Fax Modem - 147a c001 ES56-PI Data Fax Modem - 148d 1030 HCF WV-PI56 [ESS ES56-PI Data Fax Modem] - 14fe 0428 ES56-PI Data Fax Modem - 14fe 0429 ES56-PI Data Fax Modem -125e Specialvideo Engineering SRL -125f Concurrent Technologies, Inc. -1260 Intersil Corporation - 3872 Prism 2.5 Wavelan chipset - 1468 0202 LAN-Express IEEE 802.11b Wireless LAN - 3873 Prism 2.5 Wavelan chipset - 1186 3501 DWL-520 Wireless PCI Adapter - 1186 3700 DWL-520 Wireless PCI Adapter, Rev E1 - 1385 4105 MA311 802.11b wireless adapter - 1668 0414 HWP01170-01 802.11b PCI Wireless Adapter - 16a5 1601 AIR.mate PC-400 PCI Wireless LAN Adapter - 1737 3874 WMP11 Wireless 802.11b PCI Adapter - 8086 2510 M3AWEB Wireless 802.11b MiniPCI Adapter - 8086 2513 Wireless 802.11b MiniPCI Adapter - 3886 ISL3886 [Prism Javelin/Prism Xbow] - 17cf 0037 XG-901 and clones Wireless Adapter - 3890 ISL3890 [Prism GT/Prism Duette]/ISL3886 [Prism Javelin/Prism Xbow] - 10b8 2802 SMC2802W Wireless PCI Adapter - 10b8 2835 SMC2835W Wireless Cardbus Adapter - 10b8 a835 SMC2835W V2 Wireless Cardbus Adapter - 1113 4203 WN4201B - 1113 8201 T-Com T-Sinus 154pcicard Wireless PCI Adapter - 1113 b301 T-Sinus 154card Cardbus - 1113 ee03 SMC2802W V2 Wireless PCI Adapter [ISL3886] - 1113 ee08 SMC2835W V3 EU Wireless Cardbus Adapter - 1186 3202 DWL-G650 A1 Wireless Adapter - 1259 c104 CG-WLCB54GT Wireless Adapter - 1260 0000 WG511 Wireless Adapter - 1385 4800 WG511 Wireless Adapter - 16a5 1605 ALLNET ALL0271 Wireless PCI Adapter - 17cf 0014 XG-600 and clones Wireless Adapter - 17cf 0020 XG-900 and clones Wireless Adapter - 8130 HMP8130 NTSC/PAL Video Decoder - 8131 HMP8131 NTSC/PAL Video Decoder -# This is probably more likely a HW fault, but I am keeping it for now --mj - ffff ISL3886IK - 1260 0000 Senao 3054MP+ (J) mini-PCI WLAN 802.11g adapter -1261 Matsushita-Kotobuki Electronics Industries, Ltd. -1262 ES Computer Company, Ltd. -1263 Sonic Solutions -1264 Aval Nagasaki Corporation -1265 Casio Computer Co., Ltd. -1266 Microdyne Corporation - 0001 NE10/100 Adapter (i82557B) - 1910 NE2000Plus (RT8029) Ethernet Adapter - 1266 1910 NE2000Plus Ethernet Adapter -1267 S. A. Telecommunications - 5352 PCR2101 - 5a4b Telsat Turbo -1268 Tektronix -1269 Thomson-CSF/TTM -126a Lexmark International, Inc. -126b Adax, Inc. -126c Northern Telecom - 1211 10/100BaseTX [RTL81xx] - 126c 802.11b Wireless Ethernet Adapter -126d Splash Technology, Inc. -126e Sumitomo Metal Industries, Ltd. -126f Silicon Motion, Inc. - 0501 SM501 VoyagerGX Rev. AA - 0510 SM501 VoyagerGX Rev. B - 0710 SM710 LynxEM - 0712 SM712 LynxEM+ - 0720 SM720 Lynx3DM - 0730 SM731 Cougar3DR - 0810 SM810 LynxE - 0811 SM811 LynxE - 0820 SM820 Lynx3D - 0910 SM910 -1270 Olympus Optical Co., Ltd. -1271 GW Instruments -1272 Telematics International -1273 Hughes Network Systems - 0002 DirecPC -1274 Ensoniq - 1171 ES1373 [AudioPCI] (also Creative Labs CT5803) - 1371 ES1371 [AudioPCI-97] - 0e11 0024 AudioPCI on Motherboard Compaq Deskpro - 0e11 b1a7 ES1371, ES1373 AudioPCI - 1033 80ac ES1371, ES1373 AudioPCI - 1042 1854 Tazer - 107b 8054 Tabor2 - 1274 1371 Creative Sound Blaster AudioPCI64V, AudioPCI128 - 1274 8001 CT4751 board - 1462 6470 ES1371, ES1373 AudioPCI On Motherboard MS-6147 1.1A - 1462 6560 ES1371, ES1373 AudioPCI On Motherboard MS-6156 1.10 - 1462 6630 ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 1.0A - 1462 6631 ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 1.0A - 1462 6632 ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 2.0A - 1462 6633 ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 2.0A - 1462 6820 ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00 - 1462 6822 ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00A - 1462 6830 ES1371, ES1373 AudioPCI On Motherboard MS-6183 1.00 - 1462 6880 ES1371, ES1373 AudioPCI On Motherboard MS-6188 1.00 - 1462 6900 ES1371, ES1373 AudioPCI On Motherboard MS-6190 1.00 - 1462 6910 ES1371, ES1373 AudioPCI On Motherboard MS-6191 - 1462 6930 ES1371, ES1373 AudioPCI On Motherboard MS-6193 - 1462 6990 ES1371, ES1373 AudioPCI On Motherboard MS-6199BX 2.0A - 1462 6991 ES1371, ES1373 AudioPCI On Motherboard MS-6199VIA 2.0A - 14a4 2077 ES1371, ES1373 AudioPCI On Motherboard KR639 - 14a4 2105 ES1371, ES1373 AudioPCI On Motherboard MR800 - 14a4 2107 ES1371, ES1373 AudioPCI On Motherboard MR801 - 14a4 2172 ES1371, ES1373 AudioPCI On Motherboard DR739 - 1509 9902 ES1371, ES1373 AudioPCI On Motherboard KW11 - 1509 9903 ES1371, ES1373 AudioPCI On Motherboard KW31 - 1509 9904 ES1371, ES1373 AudioPCI On Motherboard KA11 - 1509 9905 ES1371, ES1373 AudioPCI On Motherboard KC13 - 152d 8801 ES1371, ES1373 AudioPCI On Motherboard CP810E - 152d 8802 ES1371, ES1373 AudioPCI On Motherboard CP810 - 152d 8803 ES1371, ES1373 AudioPCI On Motherboard P3810E - 152d 8804 ES1371, ES1373 AudioPCI On Motherboard P3810-S - 152d 8805 ES1371, ES1373 AudioPCI On Motherboard P3820-S - 270f 2001 ES1371, ES1373 AudioPCI On Motherboard 6CTR - 270f 2200 ES1371, ES1373 AudioPCI On Motherboard 6WTX - 270f 3000 ES1371, ES1373 AudioPCI On Motherboard 6WSV - 270f 3100 ES1371, ES1373 AudioPCI On Motherboard 6WIV2 - 270f 3102 ES1371, ES1373 AudioPCI On Motherboard 6WIV - 270f 7060 ES1371, ES1373 AudioPCI On Motherboard 6ASA2 - 8086 4249 ES1371, ES1373 AudioPCI On Motherboard BI440ZX - 8086 424c ES1371, ES1373 AudioPCI On Motherboard BL440ZX - 8086 425a ES1371, ES1373 AudioPCI On Motherboard BZ440ZX - 8086 4341 ES1371, ES1373 AudioPCI On Motherboard Cayman - 8086 4343 ES1371, ES1373 AudioPCI On Motherboard Cape Cod - 8086 4541 D815EEA Motherboard - 8086 4649 ES1371, ES1373 AudioPCI On Motherboard Fire Island - 8086 464a ES1371, ES1373 AudioPCI On Motherboard FJ440ZX - 8086 4d4f ES1371, ES1373 AudioPCI On Motherboard Montreal - 8086 4f43 ES1371, ES1373 AudioPCI On Motherboard OC440LX - 8086 5243 ES1371, ES1373 AudioPCI On Motherboard RC440BX - 8086 5352 ES1371, ES1373 AudioPCI On Motherboard SunRiver - 8086 5643 ES1371, ES1373 AudioPCI On Motherboard Vancouver - 8086 5753 ES1371, ES1373 AudioPCI On Motherboard WS440BX - 5000 ES1370 [AudioPCI] - 5880 5880B [AudioPCI] - 1274 2000 Creative Sound Blaster AudioPCI128 - 1274 2003 Creative SoundBlaster AudioPCI 128 - 1274 5880 Creative Sound Blaster AudioPCI128 - 1274 8001 Sound Blaster 16PCI 4.1ch - 1458 a000 5880 AudioPCI On Motherboard 6OXET - 1462 6880 5880 AudioPCI On Motherboard MS-6188 1.00 - 270f 2001 5880 AudioPCI On Motherboard 6CTR - 270f 2200 5880 AudioPCI On Motherboard 6WTX - 270f 7040 5880 AudioPCI On Motherboard 6ATA4 - 8001 CT5880 [AudioPCI] - 8002 5880A [AudioPCI] -1275 Network Appliance Corporation -1276 Switched Network Technologies, Inc. -1277 Comstream -1278 Transtech Parallel Systems Ltd. - 0701 TPE3/TM3 PowerPC Node - 0710 TPE5 PowerPC PCI board - 1101 TS-C43 card with 4 ADSP-TS101 processors -1279 Transmeta Corporation - 0060 TM8000 Northbridge - 0061 TM8000 AGP bridge - 0295 Northbridge - 0395 LongRun Northbridge - 0396 SDRAM controller - 0397 BIOS scratchpad -127a Rockwell International - 1002 HCF 56k Data/Fax Modem - 1092 094c SupraExpress 56i PRO [Diamond SUP2380] - 122d 4002 HPG / MDP3858-U - 122d 4005 MDP3858-E - 122d 4007 MDP3858-A/-NZ - 122d 4012 MDP3858-SA - 122d 4017 MDP3858-W - 122d 4018 MDP3858-W - 127a 1002 Rockwell 56K D/F HCF Modem - 1003 HCF 56k Data/Fax Modem - 0e11 b0bc 229-DF Zephyr - 0e11 b114 229-DF Cheetah - 1033 802b 229-DF - 13df 1003 PCI56RX Modem - 13e0 0117 IBM - 13e0 0147 IBM F-1156IV+/R3 Spain V.90 Modem - 13e0 0197 IBM - 13e0 01c7 IBM F-1156IV+/R3 WW V.90 Modem - 13e0 01f7 IBM - 1436 1003 IBM - 1436 1103 IBM 5614PM3G V.90 Modem - 1436 1602 Compaq 229-DF Ducati - 1004 HCF 56k Data/Fax/Voice Modem - 1048 1500 MicroLink 56k Modem - 10cf 1059 Fujitsu 229-DFRT - 1005 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem - 1005 127a AOpen FM56-P - 1033 8029 229-DFSV - 1033 8054 Modem - 10cf 103c Fujitsu - 10cf 1055 Fujitsu 229-DFSV - 10cf 1056 Fujitsu 229-DFSV - 122d 4003 MDP3858SP-U - 122d 4006 Packard Bell MDP3858V-E - 122d 4008 MDP3858SP-A/SP-NZ - 122d 4009 MDP3858SP-E - 122d 4010 MDP3858V-U - 122d 4011 MDP3858SP-SA - 122d 4013 MDP3858V-A/V-NZ - 122d 4015 MDP3858SP-W - 122d 4016 MDP3858V-W - 122d 4019 MDP3858V-SA - 13df 1005 PCI56RVP Modem - 13e0 0187 IBM - 13e0 01a7 IBM - 13e0 01b7 IBM DF-1156IV+/R3 Spain V.90 Modem - 13e0 01d7 IBM DF-1156IV+/R3 WW V.90 Modem - 1436 1005 IBM - 1436 1105 IBM - 1437 1105 IBM 5614PS3G V.90 Modem - 1022 HCF 56k Modem - 1436 1303 M3-5614PM3G V.90 Modem - 1023 HCF 56k Data/Fax Modem - 122d 4020 Packard Bell MDP3858-WE - 122d 4023 MDP3858-UE - 13e0 0247 IBM F-1156IV+/R6 Spain V.90 Modem - 13e0 0297 IBM - 13e0 02c7 IBM F-1156IV+/R6 WW V.90 Modem - 1436 1203 IBM - 1436 1303 IBM - 1024 HCF 56k Data/Fax/Voice Modem - 1025 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem - 10cf 106a Fujitsu 235-DFSV - 122d 4021 Packard Bell MDP3858V-WE - 122d 4022 MDP3858SP-WE - 122d 4024 MDP3858V-UE - 122d 4025 MDP3858SP-UE - 1026 HCF 56k PCI Speakerphone Modem - 1032 HCF 56k Modem - 1033 HCF 56k Modem - 1034 HCF 56k Modem - 1035 HCF 56k PCI Speakerphone Modem - 1036 HCF 56k Modem - 1085 HCF 56k Volcano PCI Modem - 2005 HCF 56k Data/Fax Modem - 104d 8044 229-DFSV - 104d 8045 229-DFSV - 104d 8055 PBE/Aztech 235W-DFSV - 104d 8056 235-DFSV - 104d 805a Modem - 104d 805f Modem - 104d 8074 Modem - 2013 HSF 56k Data/Fax Modem - 1179 0001 Modem - 1179 ff00 Modem - 2014 HSF 56k Data/Fax/Voice Modem - 10cf 1057 Fujitsu Citicorp III - 122d 4050 MSP3880-U - 122d 4055 MSP3880-W - 2015 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem - 10cf 1063 Fujitsu - 10cf 1064 Fujitsu - 1468 2015 Fujitsu - 2016 HSF 56k Data/Fax/Voice/Spkp Modem - 122d 4051 MSP3880V-W - 122d 4052 MSP3880SP-W - 122d 4054 MSP3880V-U - 122d 4056 MSP3880SP-U - 122d 4057 MSP3880SP-A - 4311 Riptide HSF 56k PCI Modem - 127a 4311 Ring Modular? Riptide HSF RT HP Dom - 13e0 0210 HP-GVC - 4320 Riptide PCI Audio Controller - 1235 4320 Riptide PCI Audio Controller - 4321 Riptide HCF 56k PCI Modem - 1235 4321 Hewlett Packard DF - 1235 4324 Hewlett Packard DF - 13e0 0210 Hewlett Packard DF - 144d 2321 Riptide - 4322 Riptide PCI Game Controller - 1235 4322 Riptide PCI Game Controller - 8234 RapidFire 616X ATM155 Adapter - 108d 0022 RapidFire 616X ATM155 Adapter - 108d 0027 RapidFire 616X ATM155 Adapter -127b Pixera Corporation -127c Crosspoint Solutions, Inc. -127d Vela Research -127e Winnov, L.P. - 0010 Videum 1000 Plus -127f Fujifilm -1280 Photoscript Group Ltd. -1281 Yokogawa Electric Corporation -1282 Davicom Semiconductor, Inc. - 6585 DM562P V90 Modem - 9009 Ethernet 100/10 MBit - 9100 21x4x DEC-Tulip compatible 10/100 Ethernet - 9102 21x4x DEC-Tulip compatible 10/100 Ethernet -# Subsystem ID is main ID reveresed. - 0291 8212 DM9102A (DM9102AE, SM9102AF) Ethernet 100/10 MBit - 9132 Ethernet 100/10 MBit -1283 Integrated Technology Express, Inc. - 673a IT8330G - 8152 IT8152F/G Advanced RISC-to-PCI Companion Chip - 8211 ITE 8211F Single Channel UDMA 133 - 1043 8138 P5GD1-VW Mainboard -# PCI version seems to be IT8212, embedded seems to be ITE8212 - 8212 IT/ITE8212 Dual channel ATA RAID controller - 1283 0001 IT/ITE8212 Dual channel ATA RAID controller - 8213 IT8213 IDE Controller - 8330 IT8330G - 8872 IT8874F PCI Dual Serial Port Controller - 8888 IT8888F/G PCI to ISA Bridge with SMB [Golden Gate] - 8889 IT8889F PCI to ISA Bridge - e886 IT8330G -1284 Sahara Networks, Inc. -1285 Platform Technologies, Inc. - 0100 AGOGO sound chip (aka ESS Maestro 1) -1286 Mazet GmbH -1287 M-Pact, Inc. - 001e LS220D DVD Decoder - 001f LS220C DVD Decoder -1288 Timestep Corporation -1289 AVC Technology, Inc. -128a Asante Technologies, Inc. -128b Transwitch Corporation -128c Retix Corporation -128d G2 Networks, Inc. - 0021 ATM155 Adapter -128e Hoontech Corporation/Samho Multi Tech Ltd. - 0008 ST128 WSS/SB - 0009 ST128 SAM9407 - 000a ST128 Game Port - 000b ST128 MPU Port - 000c ST128 Ctrl Port -128f Tateno Dennou, Inc. -1290 Sord Computer Corporation -1291 NCS Computer Italia -1292 Tritech Microelectronics Inc - fc02 Pyramid3D TR25202 -1293 Media Reality Technology -1294 Rhetorex, Inc. -1295 Imagenation Corporation - 0800 PXR800 - 1000 PXD1000 -1296 Kofax Image Products -1297 Holco Enterprise Co, Ltd/Shuttle Computer -1298 Spellcaster Telecommunications Inc. -1299 Knowledge Technology Lab. -129a VMetro, inc. - 0615 PBT-615 PCI-X Bus Analyzer -129b Image Access -129c Jaycor -129d Compcore Multimedia, Inc. -129e Victor Company of Japan, Ltd. -129f OEC Medical Systems, Inc. -12a0 Allen-Bradley Company -12a1 Simpact Associates, Inc. -12a2 Newgen Systems Corporation -12a3 Lucent Technologies - 8105 T8105 H100 Digital Switch -12a4 NTT Electronics Technology Company -12a5 Vision Dynamics Ltd. -12a6 Scalable Networks, Inc. -12a7 AMO GmbH -12a8 News Datacom -12a9 Xiotech Corporation -12aa SDL Communications, Inc. -12ab Yuan Yuan Enterprise Co., Ltd. - 0000 MPG160/Kuroutoshikou ITVC15-STVLP - 0002 AU8830 [Vortex2] Based Sound Card With A3D Support - 2300 Club-3D Zap TV2100 - 3000 MPG-200C PCI DVD Decoder Card - 4789 MPC788 MiniPCI Hybrid TV Tuner - fff3 MPG600/Kuroutoshikou ITVC16-STVLP - ffff MPG600/Kuroutoshikou ITVC16-STVLP -12ac Measurex Corporation -12ad Multidata GmbH -12ae Alteon Networks Inc. - 0001 AceNIC Gigabit Ethernet - 1014 0104 Gigabit Ethernet-SX PCI Adapter - 12ae 0001 Gigabit Ethernet-SX (Universal) - 1410 0104 Gigabit Ethernet-SX PCI Adapter - 0002 AceNIC Gigabit Ethernet (Copper) - 10a9 8002 Acenic Gigabit Ethernet - 12ae 0002 Gigabit Ethernet-T (3C986-T) - 00fa Farallon PN9100-T Gigabit Ethernet -12af TDK USA Corp -12b0 Jorge Scientific Corp -12b1 GammaLink -12b2 General Signal Networks -12b3 Inter-Face Co Ltd -12b4 FutureTel Inc -12b5 Granite Systems Inc. -12b6 Natural Microsystems -12b7 Cognex Modular Vision Systems Div. - Acumen Inc. -12b8 Korg -# Nee US Robotics -12b9 3Com Corp, Modem Division - 1006 WinModem - 12b9 005c USR 56k Internal Voice WinModem (Model 3472) - 12b9 005e USR 56k Internal WinModem (Models 662975) - 12b9 0062 USR 56k Internal Voice WinModem (Model 662978) - 12b9 0068 USR 56k Internal Voice WinModem (Model 5690) - 12b9 007a USR 56k Internal Voice WinModem (Model 662974) - 12b9 007f USR 56k Internal WinModem (Models 5698, 5699) - 12b9 0080 USR 56k Internal WinModem (Models 2975, 3528) - 12b9 0081 USR 56k Internal Voice WinModem (Models 2974, 3529) - 12b9 0091 USR 56k Internal Voice WinModem (Model 2978) - 1007 USR 56k Internal WinModem - 12b9 00a3 USR 56k Internal WinModem (Model 3595) - 12b9 00c4 U.S. Robotics V.92 Voice Faxmodem (2884A/B/C) - 1008 56K FaxModem Model 5610 - 12b9 00a2 USR 56k Internal FAX Modem (Model 2977) - 12b9 00aa USR 56k Internal Voice Modem (Model 2976) - 12b9 00ab USR 56k Internal Voice Modem (Model 5609) - 12b9 00ac USR 56k Internal Voice Modem (Model 3298) - 12b9 00ad USR 56k Internal FAX Modem (Model 5610) - 12b9 00d3 USR 56K Internal V92 FAX Modem (Model 5610) - 12b9 baba USR 56K Internal Voice Modem 3CP3298-DEL (Model 5601) [Hawk] -12ba BittWare, Inc. -12bb Nippon Unisoft Corporation -12bc Array Microsystems -12bd Computerm Corp. -12be Anchor Chips Inc. - 3041 AN3041Q CO-MEM - 3042 AN3042Q CO-MEM Lite - 12be 3042 Anchor Chips Lite Evaluation Board -12bf Fujifilm Microdevices -12c0 Infimed -12c1 GMM Research Corp -12c2 Mentec Limited -12c3 Holtek Microelectronics Inc - 0058 PCI NE2K Ethernet - 5598 PCI NE2K Ethernet -12c4 Connect Tech Inc - 0001 Blue HEAT/PCI 8 (RS232/CL/RJ11) - 0002 Blue HEAT/PCI 4 (RS232) - 0003 Blue HEAT/PCI 2 (RS232) - 0004 Blue HEAT/PCI 8 (UNIV, RS485) - 0005 Blue HEAT/PCI 4+4/6+2 (UNIV, RS232/485) - 0006 Blue HEAT/PCI 4 (OPTO, RS485) - 0007 Blue HEAT/PCI 2+2 (RS232/485) - 0008 Blue HEAT/PCI 2 (OPTO, Tx, RS485) - 0009 Blue HEAT/PCI 2+6 (RS232/485) - 000a Blue HEAT/PCI 8 (Tx, RS485) - 000b Blue HEAT/PCI 4 (Tx, RS485) - 000c Blue HEAT/PCI 2 (20 MHz, RS485) - 000d Blue HEAT/PCI 2 PTM - 0100 NT960/PCI - 0201 cPCI Titan - 2 Port - 0202 cPCI Titan - 4 Port - 0300 CTI PCI UART 2 (RS232) - 0301 CTI PCI UART 4 (RS232) - 0302 CTI PCI UART 8 (RS232) - 0310 CTI PCI UART 1+1 (RS232/485) - 0311 CTI PCI UART 2+2 (RS232/485) - 0312 CTI PCI UART 4+4 (RS232/485) - 0320 CTI PCI UART 2 - 0321 CTI PCI UART 4 - 0322 CTI PCI UART 8 - 0330 CTI PCI UART 2 (RS485) - 0331 CTI PCI UART 4 (RS485) - 0332 CTI PCI UART 8 (RS485) -12c5 Picture Elements Incorporated - 007e Imaging/Scanning Subsystem Engine - 007f Imaging/Scanning Subsystem Engine - 0081 PCIVST [Grayscale Thresholding Engine] - 0085 Video Simulator/Sender - 0086 THR2 Multi-scale Thresholder -12c6 Mitani Corporation -12c7 Dialogic Corp -# 12 Line, 6 port, CT-BUS/SC-BUS, loopstart FXO adaptor. - 0546 Springware D/120JCT-LS -# 24 Channel, 1 Port, CT-BUS/SC-BUS, T1/PRI adaptor. - 0647 Springware D/240JCT-T1 -# 4 Line, 4 port, CT-BUS/SC-BUS, loopstart FXO adaptor. Revision 01 - 0676 Springware D/41JCT-LS -# 48 Channel, 2 Port, CT-BUS/SC-BUS, T1/PRI adaptor. - 0685 Springware D/480JCT-2T1 -12c8 G Force Co, Ltd -12c9 Gigi Operations -12ca Integrated Computing Engines -12cb Antex Electronics Corporation - 0027 SC4 (StudioCard) -12cc Pluto Technologies International -12cd Aims Lab -12ce Netspeed Inc. -12cf Prophet Systems, Inc. -12d0 GDE Systems, Inc. -12d1 PSITech -12d2 NVidia / SGS Thomson (Joint Venture) - 0008 NV1 - 0009 DAC64 - 0018 Riva128 - 1048 0c10 VICTORY Erazor - 107b 8030 STB Velocity 128 - 1092 0350 Viper V330 - 1092 1092 Viper V330 - 10b4 1b1b STB Velocity 128 - 10b4 1b1d STB Velocity 128 - 10b4 1b1e STB Velocity 128, PAL TV-Out - 10b4 1b20 STB Velocity 128 Sapphire - 10b4 1b21 STB Velocity 128 - 10b4 1b22 STB Velocity 128 AGP, NTSC TV-Out - 10b4 1b23 STB Velocity 128 AGP, PAL TV-Out - 10b4 1b27 STB Velocity 128 DVD - 10b4 1b88 MVP Pro 128 - 10b4 222a STB Velocity 128 AGP - 10b4 2230 STB Velocity 128 - 10b4 2232 STB Velocity 128 - 10b4 2235 STB Velocity 128 AGP - 2a15 54a3 3DVision-SAGP / 3DexPlorer 3000 - 0019 Riva128ZX - 0020 TNT - 0028 TNT2 - 0029 UTNT2 - 002c VTNT2 - 00a0 ITNT2 -12d3 Vingmed Sound A/S -12d4 Ulticom (Formerly DGM&S) - 0200 T1 Card -12d5 Equator Technologies Inc - 0003 BSP16 - 1000 BSP15 -12d6 Analogic Corp -12d7 Biotronic SRL -12d8 Pericom Semiconductor - 01a7 PI7C21P100 PCI to PCI Bridge - 71e2 PI7C7300A/PI7C7300D PCI-to-PCI Bridge - 71e3 PI7C7300A/PI7C7300D PCI-to-PCI Bridge (Secondary Bus 2) - 8140 PI7C8140A PCI-to-PCI Bridge - 8148 PI7C8148A/PI7C8148B PCI-to-PCI Bridge - 8150 PCI to PCI Bridge - 8152 PI7C8152A/PI7C8152B/PI7C8152BI PCI-to-PCI Bridge - 8154 PI7C8154A/PI7C8154B/PI7C8154BI PCI-to-PCI Bridge - e110 PI7C9X110 PCI Express to PCI bridge - 1775 11cc CC11/CL11 CompactPCI Bridge - e130 PCI Express to PCI-XPI7C9X130 PCI-X Bridge -12d9 Aculab PLC - 0002 PCI Prosody - 0004 cPCI Prosody - 0005 Aculab E1/T1 PCI card - 1078 Prosody X class e1000 device - 12d9 000d Prosody X PCI - 12d9 000e Prosody X cPCI -12da True Time Inc. -12db Annapolis Micro Systems, Inc -12dc Symicron Computer Communication Ltd. -12dd Management Graphics -12de Rainbow Technologies - 0200 CryptoSwift CS200 -12df SBS Technologies Inc -12e0 Chase Research - 0010 ST16C654 Quad UART - 0020 ST16C654 Quad UART - 0030 ST16C654 Quad UART -12e1 Nintendo Co, Ltd -12e2 Datum Inc. Bancomm-Timing Division -12e3 Imation Corp - Medical Imaging Systems -12e4 Brooktrout Technology Inc -12e5 Apex Semiconductor Inc -12e6 Cirel Systems -12e7 Sunsgroup Corporation -12e8 Crisc Corp -12e9 GE Spacenet -12ea Zuken -12eb Aureal Semiconductor - 0001 Vortex 1 - 104d 8036 AU8820 Vortex Digital Audio Processor - 1092 2000 Sonic Impact A3D - 1092 2100 Sonic Impact A3D - 1092 2110 Sonic Impact A3D - 1092 2200 Sonic Impact A3D - 122d 1002 AU8820 Vortex Digital Audio Processor - 12eb 0001 AU8820 Vortex Digital Audio Processor - 5053 3355 Montego - 0002 Vortex 2 - 104d 8049 AU8830 Vortex 3D Digital Audio Processor - 104d 807b AU8830 Vortex 3D Digital Audio Processor - 1092 3000 Monster Sound II - 1092 3001 Monster Sound II - 1092 3002 Monster Sound II - 1092 3003 Monster Sound II - 1092 3004 Monster Sound II - 12eb 0002 AU8830 Vortex 3D Digital Audio Processor - 12eb 0088 AU8830 Vortex 3D Digital Audio Processor - 144d 3510 AU8830 Vortex 3D Digital Audio Processor - 5053 3356 Montego II - 0003 AU8810 Vortex Digital Audio Processor - 104d 8049 AU8810 Vortex Digital Audio Processor - 104d 8077 AU8810 Vortex Digital Audio Processor - 109f 1000 AU8810 Vortex Digital Audio Processor - 12eb 0003 AU8810 Vortex Digital Audio Processor - 1462 6780 AU8810 Vortex Digital Audio Processor - 14a4 2073 AU8810 Vortex Digital Audio Processor - 14a4 2091 AU8810 Vortex Digital Audio Processor - 14a4 2104 AU8810 Vortex Digital Audio Processor - 14a4 2106 AU8810 Vortex Digital Audio Processor - 8803 Vortex 56k Software Modem - 12eb 8803 Vortex 56k Software Modem -12ec 3A International, Inc. -12ed Optivision Inc. -12ee Orange Micro -12ef Vienna Systems -12f0 Pentek -12f1 Sorenson Vision Inc -12f2 Gammagraphx, Inc. -12f3 Radstone Technology -12f4 Megatel -12f5 Forks -12f6 Dawson France -12f7 Cognex -12f8 Electronic Design GmbH - 0002 VideoMaker -12f9 Four Fold Ltd -12fb Spectrum Signal Processing - 0001 PMC-MAI - 00f5 F5 Dakar - 02ad PMC-2MAI - 2adc ePMC-2ADC - 3100 PRO-3100 - 3500 PRO-3500 - 4d4f Modena - 8120 ePMC-8120 - da62 Daytona C6201 PCI (Hurricane) - db62 Ingliston XBIF - dc62 Ingliston PLX9054 - dd62 Ingliston JTAG/ISP - eddc ePMC-MSDDC - fa01 ePMC-FPGA -12fc Capital Equipment Corp -12fd I2S -12fe ESD Electronic System Design GmbH -12ff Lexicon -1300 Harman International Industries Inc -1302 Computer Sciences Corp -1303 Innovative Integration - 0030 X3-SDF 4-channel XMC acquisition board -1304 Juniper Networks -1305 Netphone, Inc -1306 Duet Technologies -# Nee ComputerBoards -1307 Measurement Computing - 0001 PCI-DAS1602/16 - 000b PCI-DIO48H - 000c PCI-PDISO8 - 000d PCI-PDISO16 - 000f PCI-DAS1200 - 0010 PCI-DAS1602/12 - 0014 PCI-DIO24H - 0015 PCI-DIO24H/CTR3 - 0016 PCI-DIO48H/CTR15 - 0017 PCI-DIO96H - 0018 PCI-CTR05 - 0019 PCI-DAS1200/JR - 001a PCI-DAS1001 - 001b PCI-DAS1002 - 001c PCI-DAS1602JR/16 - 001d PCI-DAS6402/16 - 001e PCI-DAS6402/12 - 001f PCI-DAS16/M1 - 0020 PCI-DDA02/12 - 0021 PCI-DDA04/12 - 0022 PCI-DDA08/12 - 0023 PCI-DDA02/16 - 0024 PCI-DDA04/16 - 0025 PCI-DDA08/16 - 0026 PCI-DAC04/12-HS - 0027 PCI-DAC04/16-HS - 0028 PCI-DIO24 - 0029 PCI-DAS08 - 002c PCI-INT32 - 0033 PCI-DUAL-AC5 - 0034 PCI-DAS-TC - 0035 PCI-DAS64/M1/16 - 0036 PCI-DAS64/M2/16 - 0037 PCI-DAS64/M3/16 - 004c PCI-DAS1000 - 004d PCI-QUAD04 - 0052 PCI-DAS4020/12 - 0053 PCIM-DDA06/16 - 0054 PCI-DIO96 - 005d PCI-DAS6023 - 005e PCI-DAS6025 - 005f PCI-DAS6030 - 0060 PCI-DAS6031 - 0061 PCI-DAS6032 - 0062 PCI-DAS6033 - 0063 PCI-DAS6034 - 0064 PCI-DAS6035 - 0065 PCI-DAS6040 - 0066 PCI-DAS6052 - 0067 PCI-DAS6070 - 0068 PCI-DAS6071 - 006f PCI-DAS6036 - 0078 PCI-DAS6013 - 0079 PCI-DAS6014 -1308 Jato Technologies Inc. - 0001 NetCelerator Adapter - 1308 0001 NetCelerator Adapter -1309 AB Semiconductor Ltd -130a Mitsubishi Electric Microcomputer -130b Colorgraphic Communications Corp -130c Ambex Technologies, Inc -130d Accelerix Inc -130e Yamatake-Honeywell Co. Ltd -130f Advanet Inc -1310 Gespac -1311 Videoserver, Inc -1312 Acuity Imaging, Inc -1313 Yaskawa Electric Co. -1315 Wavesat -1316 Teradyne Inc -1317 ADMtek - 0981 21x4x DEC-Tulip compatible 10/100 Ethernet - 0985 NC100 Network Everywhere Fast Ethernet 10/100 - 1734 100c Scenic N300 ADMtek AN983 10/100 Mbps PCI Adapter - 1985 21x4x DEC-Tulip compatible 10/100 Ethernet - 1385 511a FA511 - 1395 2103 CB100-EZ (4-LED version) - 2850 HSP MicroModem 56 - 5120 ADM5120 OpenGate System-on-Chip - 8201 ADM8211 802.11b Wireless Interface - 10b8 2635 SMC2635W 802.11b (11Mbps) wireless lan pcmcia (cardbus) card - 1317 8201 SMC2635W 802.11b (11mbps) wireless lan pcmcia (cardbus) card - 8211 ADM8211 802.11b Wireless Interface - 9511 21x4x DEC-Tulip compatible 10/100 Ethernet -1318 Packet Engines Inc. - 0911 GNIC-II PCI Gigabit Ethernet [Hamachi] -1319 Fortemedia, Inc - 0801 Xwave QS3000A [FM801] - 1319 1319 FM801 PCI Audio - 0802 Xwave QS3000A [FM801 game port] - 1319 1319 FM801 PCI Joystick - 1000 FM801 PCI Audio - 1001 FM801 PCI Joystick -131a Finisar Corp. -131c Nippon Electro-Sensory Devices Corp -131d Sysmic, Inc. -131e Xinex Networks Inc -131f Siig Inc - 1000 CyberSerial (1-port) 16550 - 1001 CyberSerial (1-port) 16650 - 1002 CyberSerial (1-port) 16850 - 1010 Duet 1S(16550)+1P - 1011 Duet 1S(16650)+1P - 1012 Duet 1S(16850)+1P - 1020 CyberParallel (1-port) - 1021 CyberParallel (2-port) - 1030 CyberSerial (2-port) 16550 - 1031 CyberSerial (2-port) 16650 - 1032 CyberSerial (2-port) 16850 - 1034 Trio 2S(16550)+1P - 1035 Trio 2S(16650)+1P - 1036 Trio 2S(16850)+1P - 1050 CyberSerial (4-port) 16550 - 1051 CyberSerial (4-port) 16650 - 1052 CyberSerial (4-port) 16850 - 2000 CyberSerial (1-port) 16550 - 2001 CyberSerial (1-port) 16650 - 2002 CyberSerial (1-port) 16850 - 2010 Duet 1S(16550)+1P - 2011 Duet 1S(16650)+1P - 2012 Duet 1S(16850)+1P - 2020 CyberParallel (1-port) - 2021 CyberParallel (2-port) - 2030 CyberSerial (2-port) 16550 - 131f 2030 PCI Serial Card - 2031 CyberSerial (2-port) 16650 - 2032 CyberSerial (2-port) 16850 - 2040 Trio 1S(16550)+2P - 2041 Trio 1S(16650)+2P - 2042 Trio 1S(16850)+2P - 2050 CyberSerial (4-port) 16550 - 2051 CyberSerial (4-port) 16650 - 2052 CyberSerial (4-port) 16850 - 2060 Trio 2S(16550)+1P - 2061 Trio 2S(16650)+1P - 2062 Trio 2S(16850)+1P - 2081 CyberSerial (8-port) ST16654 -1320 Crypto AG -1321 Arcobel Graphics BV -1322 MTT Co., Ltd -1323 Dome Inc -1324 Sphere Communications -1325 Salix Technologies, Inc -1326 Seachange international -1327 Voss scientific -1328 quadrant international -1329 Productivity Enhancement -132a Microcom Inc. -132b Broadband Technologies -132c Micrel Inc -132d Integrated Silicon Solution, Inc. -1330 MMC Networks -1331 RadiSys Corporation - 0030 ENP-2611 - 8200 82600 Host Bridge - 8201 82600 IDE - 8202 82600 USB - 8210 82600 PCI Bridge -1332 Micro Memory - 5415 MM-5415CN PCI Memory Module with Battery Backup - 5425 MM-5425CN PCI 64/66 Memory Module with Battery Backup - 6140 MM-6140D -1334 Redcreek Communications, Inc -1335 Videomail, Inc -1337 Third Planet Publishing -1338 BT Electronics -133a Vtel Corp -133b Softcom Microsystems -133c Holontech Corp -133d SS Technologies -133e Virtual Computer Corp -133f SCM Microsystems -1340 Atalla Corp -1341 Kyoto Microcomputer Co -1342 Promax Systems Inc -1343 Phylon Communications Inc -1344 Crucial Technology -1345 Arescom Inc -1347 Odetics -1349 Sumitomo Electric Industries, Ltd. -134a DTC Technology Corp. - 0001 Domex 536 - 0002 Domex DMX3194UP SCSI Adapter -134b ARK Research Corp. -134c Chori Joho System Co. Ltd -134d PCTel Inc - 2189 HSP56 MicroModem - 2486 2304WT V.92 MDC Modem - 7890 HSP MicroModem 56 - 134d 0001 PCT789 adapter - 7891 HSP MicroModem 56 - 134d 0001 HSP MicroModem 56 - 7892 HSP MicroModem 56 - 7893 HSP MicroModem 56 - 7894 HSP MicroModem 56 - 7895 HSP MicroModem 56 - 7896 HSP MicroModem 56 - 7897 HSP MicroModem 56 -134e CSTI -134f Algo System Co Ltd -1350 Systec Co. Ltd -1351 Sonix Inc -1353 Thales Idatys - 0002 Proserver - 0003 PCI-FUT - 0004 PCI-S0 - 0005 PCI-FUT-S0 -1354 Dwave System Inc -1355 Kratos Analytical Ltd -1356 The Logical Co -1359 Prisa Networks -135a Brain Boxes - 0a61 UC-324 [VELOCITY RS422/485] -135b Giganet Inc -135c Quatech Inc - 0010 QSC-100 - 0020 DSC-100 - 0030 DSC-200/300 - 0040 QSC-200/300 - 0050 ESC-100D - 0060 ESC-100M - 00f0 MPAC-100 Syncronous Serial Card (Zilog 85230) - 0170 QSCLP-100 - 0180 DSCLP-100 - 0190 SSCLP-100 - 01a0 QSCLP-200/300 - 01b0 DSCLP-200/300 - 01c0 SSCLP-200/300 - 0258 DSPSX-200/300 -135d ABB Network Partner AB -135e Sealevel Systems Inc - 5101 Route 56.PCI - Multi-Protocol Serial Interface (Zilog Z16C32) - 7101 Single Port RS-232/422/485/530 - 7201 Dual Port RS-232/422/485 Interface - 7202 Dual Port RS-232 Interface - 7401 Four Port RS-232 Interface - 7402 Four Port RS-422/485 Interface - 7801 Eight Port RS-232 Interface - 7804 Eight Port RS-232/422/485 Interface - 8001 8001 Digital I/O Adapter -135f I-Data International A-S -1360 Meinberg Funkuhren - 0101 PCI32 DCF77 Radio Clock - 0102 PCI509 DCF77 Radio Clock - 0103 PCI510 DCF77 Radio Clock - 0104 PCI511 DCF77 Radio Clock - 0105 PEX511 DCF77 Radio Clock (PCI Express) - 0201 GPS167PCI GPS Receiver - 0202 GPS168PCI GPS Receiver - 0203 GPS169PCI GPS Receiver - 0204 GPS170PCI GPS Receiver - 0205 GPS170PEX GPS Receiver (PCI Express) - 0301 TCR510PCI IRIG Timecode Reader - 0302 TCR167PCI IRIG Timecode Reader - 0303 TCR511PCI IRIG Timecode Reader - 0304 TCR511PEX IRIG Timecode Reader (PCI Express) - 0305 TCR170PEX IRIG Timecode Reader (PCI Express) - 0501 PTP270PEX PTP/IEEE1588 slave card (PCI Express) - 0601 FRC511PEX Free Running Clock (PCI Express) -1361 Soliton Systems K.K. -1362 Fujifacom Corporation -1363 Phoenix Technology Ltd -1364 ATM Communications Inc -1365 Hypercope GmbH -1366 Teijin Seiki Co. Ltd -1367 Hitachi Zosen Corporation -1368 Skyware Corporation -1369 Digigram -136a High Soft Tech - 0004 HST Saphir VII mini PCI - 0007 HST Saphir III E MultiLink 4 - 0008 HST Saphir III E MultiLink 8 - 000a HST Saphir III E MultiLink 2 -136b Kawasaki Steel Corporation - ff01 KL5A72002 Motion JPEG -136c Adtek System Science Co Ltd -136d Gigalabs Inc -136f Applied Magic Inc -1370 ATL Products -1371 CNet Technology Inc - 434e GigaCard Network Adapter - 1371 434e N-Way PCI-Bus Giga-Card 1000/100/10Mbps(L) -1373 Silicon Vision Inc -1374 Silicom Ltd. - 0024 Silicom Dual port Giga Ethernet BGE Bypass Server Adapter - 0025 Silicom Quad port Giga Ethernet BGE Bypass Server Adapter - 0026 Silicom Dual port Fiber Giga Ethernet 546 Bypass Server Adapter - 0027 Silicom Dual port Fiber LX Giga Ethernet 546 Bypass Server Adapter - 0029 Silicom Dual port Copper Giga Ethernet 546GB Bypass Server Adapter - 002a Silicom Dual port Fiber Giga Ethernet 546 TAP/Bypass Server Adapter - 002b Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter (PXE2TBI) - 002c Silicom Quad port Copper Giga Ethernet 546GB Bypass Server Adapter (PXG4BPI) - 002d Silicom Quad port Fiber-SX Giga Ethernet 546GB Bypass Server Adapter (PXG4BPFI) - 002e Silicom Quad port Fiber-LX Giga Ethernet 546GB Bypass Server Adapter (PXG4BPFI-LX) - 002f Silicom Dual port Fiber-SX Giga Ethernet 546GB Low profile Bypass Server Adapter (PXG2BPFIL) - 0030 Silicom Dual port Fiber-LX Giga Ethernet 546GB Low profile Bypass Server Adapter - 0031 Silicom Quad port Copper Giga Ethernet PCI-E Bypass Server Adapter - 0032 Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter - 0034 Silicom Dual port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter - 0035 Silicom Quad port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter - 0036 Silicom Dual port Fiber Giga Ethernet PCI-E BGE Bypass Server Adapter - 0037 Silicom Dual port Copper Ethernet PCI-E Intel based Bypass Server Adapter - 0038 Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter - 0039 Silicom Dual port Fiber-SX Ethernet PCI-E Intel based Bypass Server Adapter - 003a Silicom Dual port Fiber-LX Ethernet PCI-E Intel based Bypass Server Adapter - 003b Silicom Dual port Fiber Ethernet PMC Intel based Bypass Server Adapter (PMCX2BPFI) - 003c Silicom Dual port Copper Ethernet PCI-X BGE based Bypass Server Adapter (PXG2BPRB) - 003e Silicom Dual port Fiber Giga Ethernet PCI-E 571 TAP/Bypass Server Adapter (PEG2TBFI) - 003f Silicom Dual port Copper Giga Ethernet PCI-X 546 TAP/Bypass Server Adapter (PXG2TBI) - 0040 Silicom Quad port Fiber-SX Giga Ethernet 571 Bypass Server Adapter (PEG4BPFI) - 0043 Silicom Quad port Fiber-SX Giga Ethernet 546 Bypass Server Adapter (PXG4BPFID) - 0045 Silicom 6 port Copper Giga Ethernet 546 Bypass Server Adapter (PXG6BPI) - 0047 Silicom Dual port Fiber-SX Giga Ethernet 571 Bypass Disconnect Server Adapter (PEG2BPFID) - 004a Silicom Quad port Fiber-LX Giga Ethernet 571 Bypass Server Adapter (PEG4BPFI-LX) -1375 Argosystems Inc -1376 LMC -1377 Electronic Equipment Production & Distribution GmbH -1378 Telemann Co. Ltd -1379 Asahi Kasei Microsystems Co Ltd -137a Mark of the Unicorn Inc - 0001 PCI-324 Audiowire Interface -137b PPT Vision -137c Iwatsu Electric Co Ltd -137d Dynachip Corporation -137e Patriot Scientific Corporation -137f Japan Satellite Systems Inc -1380 Sanritz Automation Co Ltd -1381 Brains Co. Ltd -1382 Marian - Electronic & Software - 0001 ARC88 audio recording card - 2008 Prodif 96 Pro sound system - 2048 Prodif Plus sound system - 2088 Marc 8 Midi sound system - 20c8 Marc A sound system - 4008 Marc 2 sound system - 4010 Marc 2 Pro sound system - 4048 Marc 4 MIDI sound system - 4088 Marc 4 Digi sound system - 4248 Marc X sound system - 4424 TRACE D4 Sound System -1383 Controlnet Inc -1384 Reality Simulation Systems Inc -1385 Netgear - 0013 WG311T 108 Mbps Wireless PCI Adapter - 006b WA301 802.11b Wireless PCI Adapter - 4100 MA301 802.11b Wireless PCI Adapter - 4105 MA311 802.11b Wireless PCI Adapter - 4400 WAG511 802.11a/b/g Dual Band Wireless PC Card - 4600 WAG511 802.11a/b/g Dual Band Wireless PC Card - 4601 WAG511 802.11a/b/g Dual Band Wireless PC Card - 4610 WAG511 802.11a/b/g Dual Band Wireless PC Card - 4800 WG511(v1) 54 Mbps Wireless PC Card - 4900 WG311v1 54 Mbps Wireless PCI Adapter - 4a00 WAG311 802.11a/g Wireless PCI Adapter - 4b00 WG511T 108 Mbps Wireless PC Card - 4c00 WG311v2 54 Mbps Wireless-G PCI Adapter - 4d00 WG311T 108 Mbps Wireless PCI Adapter - 4e00 WG511v2 54 Mbps Wireless PC Card - 4f00 WG511U Double 108 Mbps Wireless PC Card - 5200 GA511 Gigabit PC Card - 620a GA620 Gigabit Ethernet - 630a GA630 Gigabit Ethernet - 6b00 WG311v3 54 Mbps Wireless PCI Adapter - 6d00 WPNT511 RangeMax 240 Mbps Wireless PC Card - 7b00 WN511B RangeMax Next 270 Mbps Wireless PC Card - 7c00 WN511T RangeMax Next 300 Mbps Wireless PC Card - 7d00 WN311B RangeMax Next 270 Mbps Wireless PCI Adapter - 7e00 WN311T RangeMax Next 300 Mbps Wireless PCI Adapter - f004 FA310TX - f312 FA312 REV-A1 Fast Ethernet PCI Adapter -1386 Video Domain Technologies -1387 Systran Corp -1388 Hitachi Information Technology Co Ltd -1389 Applicom International - 0001 PCI1500PFB [Intelligent fieldbus adaptor] -138a Fusion Micromedia Corp -138b Tokimec Inc -138c Silicon Reality -138d Future Techno Designs pte Ltd -138e Basler GmbH -138f Patapsco Designs Inc -1390 Concept Development Inc -1391 Development Concepts Inc -1392 Medialight Inc -1393 Moxa Technologies Co Ltd - 0001 UC7000 Serial - 1020 CP102 (2-port RS-232 PCI) - 1021 CP102UL (2-port RS-232 Universal PCI) - 1022 CP102U (2-port RS-232 Universal PCI) - 1023 CP-102UF - 1040 Smartio C104H/PCI - 1041 CP104U (4-port RS-232 Universal PCI) - 1042 CP104JU (4-port RS-232 Universal PCI) - 1043 CP104EL (4-port RS-232 Smart PCI Express) - 1044 POS104UL (4-port RS-232 Universal PCI) - 1080 CB108 (8-port RS-232 PC/104-plus Module) - 1140 CT-114 series - 1141 Industrio CP-114 - 1142 CB114 (4-port RS-232/422/485 PC/104-plus Module) - 1143 CP-114UL (4-port RS-232/422/485 Smart Universal PCI Serial Board) - 1180 CP118U (8-port RS-232/422/485 Smart Universal PCI) - 1181 CP118EL (8-port RS-232/422/485 Smart PCI Express) - 1320 CP132 (2-port RS-422/485 PCI) - 1321 CP132U (2-Port RS-422/485 Universal PCI) - 1340 CP134U (4-Port RS-422/485 Universal PCI) - 1341 CB134I (4-port RS-422/485 PC/104-plus Module) - 1380 CP138U (8-port RS-232/422/485 Smart Universal PCI) - 1680 Smartio C168H/PCI - 1681 CP-168U V2 Smart Serial Board (8-port RS-232) - 1682 CP168EL (8-port RS-232 Smart PCI Express) - 2040 Intellio CP-204J - 2180 Intellio C218 Turbo PCI - 3200 Intellio C320 Turbo PCI -1394 Level One Communications - 0001 LXT1001 Gigabit Ethernet - 1186 4800 DGE-500SX - 1394 0001 NetCelerator Adapter -1395 Ambicom Inc -1396 Cipher Systems Inc -1397 Cologne Chip Designs GmbH - 08b4 ISDN network Controller [HFC-4S] - 1397 b520 HFC-4S [IOB4ST] - 1397 b540 HFC-4S [Swyx 4xS0 SX2 QuadBri] - 1397 b556 HFC-4S [Junghanns DuoDBRI] - 1397 e888 HFC-4S [OpenVox B200P / B400P] - 16b8 ISDN network Controller [HFC-8S] - 2bd0 ISDN network controller [HFC-PCI] - 0675 1704 ISDN Adapter (PCI Bus, D, C) - 0675 1708 ISDN Adapter (PCI Bus, D, C, ACPI) - 1397 2bd0 ISDN Board - e4bf 1000 CI1-1-Harp - 30b1 ISDN network Controller [HFC-E1] - b700 ISDN network controller PrimuX S0 [HFC-PCI] - f001 GSM Network Controller [HFC-4GSM] -1398 Clarion co. Ltd -1399 Rios systems Co Ltd -139a Alacritech Inc - 0001 Quad Port 10/100 Server Accelerator - 0003 Single Port 10/100 Server Accelerator - 0005 Single Port Gigabit Server Accelerator -139b Mediasonic Multimedia Systems Ltd -139c Quantum 3d Inc -139d EPL limited -139e Media4 -139f Aethra s.r.l. -13a0 Crystal Group Inc -13a1 Kawasaki Heavy Industries Ltd -13a2 Ositech Communications Inc -13a3 Hifn Inc. - 0005 7751 Security Processor - 0006 6500 Public Key Processor - 0007 7811 Security Processor - 0012 7951 Security Processor - 0014 78XX Security Processor - 0016 8065 Security Processor - 0017 8165 Security Processor - 0018 8154 Security Processor - 001d 7956 Security Processor - 001f 7855 Security Processor - 0020 7955 Security Processor - 0026 8155 Security Processor - 002e 9630 Compression Processor - 0037 DS4100 Secure Multi-Gigabit Server Adapter with Compression -13a4 Rascom Inc -13a5 Audio Digital Imaging Inc -13a6 Videonics Inc -13a7 Teles AG -13a8 Exar Corp. - 0152 XR17C/D152 Dual PCI UART - 0154 XR17C154 Quad UART - 0158 XR17C158 Octal UART - 0252 XR17V252 Dual UART PCI controller - 0254 XR17V254 Quad UART PCI controller - 0258 XR17V258 Octal UART PCI controller -13a9 Siemens Medical Systems, Ultrasound Group -13aa Broadband Networks Inc -13ab Arcom Control Systems Ltd -13ac Motion Media Technology Ltd -13ad Nexus Inc -13ae ALD Technology Ltd -13af T.Sqware -13b0 Maxspeed Corp -13b1 Tamura corporation -13b2 Techno Chips Co. Ltd -13b3 Lanart Corporation -13b4 Wellbean Co Inc -13b5 ARM -13b6 Dlog GmbH -13b7 Logic Devices Inc -13b8 Nokia Telecommunications oy -13b9 Elecom Co Ltd -13ba Oxford Instruments -13bb Sanyo Technosound Co Ltd -13bc Bitran Corporation -13bd Sharp corporation -13be Miroku Jyoho Service Co. Ltd -13bf Sharewave Inc -13c0 Microgate Corporation - 0010 SyncLink Adapter v1 - 0020 SyncLink SCC Adapter - 0030 SyncLink Multiport Adapter - 0070 SyncLink GT Adapter - 0080 SyncLink GT4 Adapter - 00a0 SyncLink GT2 Adapter - 0210 SyncLink Adapter v2 -13c1 3ware Inc - 1000 5xxx/6xxx-series PATA-RAID - 1001 7xxx/8xxx-series PATA/SATA-RAID - 13c1 1001 7xxx/8xxx-series PATA/SATA-RAID - 1002 9xxx-series SATA-RAID - 1003 9550SX SATA-II RAID PCI-X - 1004 9650SE SATA-II RAID PCIe - 1005 9690SA SAS/SATA-II RAID PCIe -13c2 Technotrend Systemtechnik GmbH - 000e Technotrend/Hauppauge DVB card rev2.3 - 1019 TTechnoTrend-budget DVB S2-3200 -13c3 Janz Computer AG -13c4 Phase Metrics -13c5 Alphi Technology Corp -13c6 Condor Engineering Inc - 0520 CEI-520 A429 Card - 0620 CEI-620 A429 Card - 0820 CEI-820 A429 Card - 0830 CEI-830 A429 Card - 1004 P-SER Multi-channel PMC to RS-485/422/232 adapter -13c7 Blue Chip Technology Ltd - 0adc PCI-ADC - 0b10 PCI-PIO - 0d10 PCI-DIO - 524c PCI-RLY - 5744 PCI-WDT -13c8 Apptech Inc -13c9 Eaton Corporation -13ca Iomega Corporation -13cb Yano Electric Co Ltd -13cc Metheus Corporation -13cd Compatible Systems Corporation -13ce Cocom A/S -13cf Studio Audio & Video Ltd -13d0 Techsan Electronics Co Ltd - 2103 B2C2 FlexCopII DVB chip / Technisat SkyStar2 DVB card - 2104 B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card (rev 01) - 2200 B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card -13d1 Abocom Systems Inc - ab02 ADMtek Centaur-C rev 17 [D-Link DFE-680TX] CardBus Fast Ethernet Adapter - ab03 21x4x DEC-Tulip compatible 10/100 Ethernet - ab06 RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter - ab08 21x4x DEC-Tulip compatible 10/100 Ethernet -13d2 Shark Multimedia Inc -13d3 IMC Networks - 3211 DTV-DVB 704A - 3216 AzureWare AD-TU200 - 3219 DTV-DVB 7049A DVB-T USB Stick -13d4 Graphics Microsystems Inc -13d5 Media 100 Inc -13d6 K.I. Technology Co Ltd -13d7 Toshiba Engineering Corporation -13d8 Phobos corporation -13d9 Apex PC Solutions Inc -13da Intresource Systems pte Ltd -13db Janich & Klass Computertechnik GmbH -13dc Netboost Corporation -13dd Multimedia Bundle Inc -13de ABB Robotics Products AB -13df E-Tech Inc - 0001 PCI56RVP Modem - 13df 0001 PCI56RVP Modem -13e0 GVC Corporation -13e1 Silicom Multimedia Systems Inc -13e2 Dynamics Research Corporation -13e3 Nest Inc -13e4 Calculex Inc -13e5 Telesoft Design Ltd -13e6 Argosy research Inc -13e7 NAC Incorporated -13e8 Chip Express Corporation -13e9 Intraserver Technology Inc -13ea Dallas Semiconductor -13eb Hauppauge Computer Works Inc -13ec Zydacron Inc - 000a NPC-RC01 Remote control receiver -13ed Raytheion E-Systems -13ee Hayes Microcomputer Products Inc -13ef Coppercom Inc -13f0 Sundance Technology Inc / IC Plus Corp - 0200 IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY - 1043 8213 NX1001 - 0201 ST201 Sundance Ethernet - 1021 TC9020 Gigabit Ethernet - 1023 IP1000 Family Gigabit Ethernet - 1043 8180 NX1101 -13f1 Oce' - Technologies B.V. -13f2 Ford Microelectronics Inc -13f3 Mcdata Corporation -13f4 Troika Networks, Inc. - 1401 Zentai Fibre Channel Adapter -13f5 Kansai Electric Co. Ltd -13f6 C-Media Electronics Inc - 0011 CMI8738 - 0100 CM8338A - 13f6 ffff CMI8338/C3DX PCI Audio Device - 0101 CM8338B - 13f6 0101 CMI8338-031 PCI Audio Device - 0111 CM8738 - 1019 0970 P6STP-FL motherboard - 1043 8035 CUSI-FX motherboard - 1043 8077 CMI8738 6-channel audio controller - 1043 80e2 CMI8738 6ch-MX - 13f6 0111 CMI8738/C3DX PCI Audio Device - 13f6 9761 Theatron Agrippa - 153b 1144 Aureon 5.1 - 153b 1170 Aureon 7.1 - 1681 a000 Gamesurround MUSE XL - 270f 1103 CT-7NJS Ultra motherboard - 270f f462 7NJL1 motherboard - 584d 3731 Digital X-Mystique - 584d 3741 X-Plosion 7.1 - 584d 3751 X-Raider 7.1 - 584d 3761 X-Mystique 7.1 LP - 584d 3771 X-Mystique 7.1 LP Value - 7284 8384 Striker 7.1 - 0211 CM8738 - 8788 CMI8788 [Oxygen HD Audio] - 1043 8269 Virtuoso 200 (Xonar D2) - 1043 8275 Virtuoso 100 (Xonar DX) - 1043 82b7 Virtuoso 200 (Xonar D2X) - 1043 8314 Virtuoso 200 (Xonar HDAV1.3) - 1043 8327 Virtuoso 100 (Xonar DX) - 1043 834f Virtuoso 100 (Xonar D1) - 1043 835c Virtuoso 100 (Xonar Essence STX) - 1043 835d Virtuoso 100 (Xonar ST) - 1043 835e Virtuoso 200 (Xonar HDAV1.3 Slim) - 1043 838e Virtuoso 200 (Xonar DS) - 14c3 1710 HIFIER - 1a58 0910 Barracuda AC-1 - 415a 5431 X-Meridian 7.1 - 584d 3781 HDA X-Purity 7.1 Platinum - 7284 9761 CLARO - 7284 9781 CLARO halo - 9880 CM9880 -13f7 Wildfire Communications -13f8 Ad Lib Multimedia Inc -13f9 NTT Advanced Technology Corp. -13fa Pentland Systems Ltd -13fb Aydin Corp -13fc Computer Peripherals International -13fd Micro Science Inc -13fe Advantech Co. Ltd - 1240 PCI-1240 4-channel stepper motor controller card - 1600 PCI-16xx series PCI multiport serial board (function 0) -# This board has two PCI functions, appears as two PCI devices - 1601 0002 PCI-1601 2-port unisolated RS-422/485 -# This board has two PCI functions, appears as two PCI devices - 1602 0002 PCI-1602 2-port isolated RS-422/485 - 1612 0004 PCI-1612 4-port RS-232/422/485 - 1603 PCI-1603 2-port isolated RS-232/current loop - 1604 PCI-1604 2-port RS-232 - 16ff PCI-16xx series PCI multiport serial board (function 1: RX/TX steering CPLD) - 1601 0000 PCI-1601 2-port unisolated RS-422/485 PCI communications card - 1602 0000 PCI-1602 2-port isolated RS-422/485 - 1612 0000 PCI-1612 4-port RS-232/422/485 - 1711 PCI-1711 16-channel data acquisition card 12-bit, 100kS/s - 1733 PCI-1733 32-channel isolated digital input card - 1752 PCI-1752 - 1754 PCI-1754 - 1756 PCI-1756 -13ff Silicon Spice Inc -1400 Artx Inc - 1401 9432 TX -1401 CR-Systems A/S -1402 Meilhaus Electronic GmbH - 0630 ME-630 - 0940 ME-94 - 0950 ME-95 - 0960 ME-96 - 1000 ME-1000 - 100a ME-1000 - 100b ME-1000 - 1400 ME-1400 - 140a ME-1400A - 140b ME-1400B - 140c ME-1400C - 140d ME-1400D - 140e ME-1400E - 14ea ME-1400EA - 14eb ME-1400EB - 1604 ME-1600/4U - 1608 ME-1600/8U - 160c ME-1600/12U - 160f ME-1600/16U - 168f ME-1600/16U8I - 4610 ME-4610 - 4650 ME-4650 - 4660 ME-4660 - 4661 ME-4660I - 4662 ME-4660 - 4663 ME-4660I - 4670 ME-4670 - 4671 ME-4670I - 4672 ME-4670S - 4673 ME-4670IS - 4680 ME-4680 - 4681 ME-4680I - 4682 ME-4680S - 4683 ME-4680IS - 6004 ME-6000/4 - 6008 ME-6000/8 - 600f ME-6000/16 - 6014 ME-6000I/4 - 6018 ME-6000I/8 - 601f ME-6000I/16 - 6034 ME-6000ISLE/4 - 6038 ME-6000ISLE/8 - 603f ME-6000ISLE/16 - 6044 ME-6000/4/DIO - 6048 ME-6000/8/DIO - 604f ME-6000/16/DIO - 6054 ME-6000I/4/DIO - 6058 ME-6000I/8/DIO - 605f ME-6000I/16/DIO - 6074 ME-6000ISLE/4/DIO - 6078 ME-6000ISLE/8/DIO - 607f ME-6000ISLE/16/DIO - 6104 ME-6100/4 - 6108 ME-6100/8 - 610f ME-6100/16 - 6114 ME-6100I/4 - 6118 ME-6100I/8 - 611f ME-6100I/16 - 6134 ME-6100ISLE/4 - 6138 ME-6100ISLE/8 - 613f ME-6100ISLE/16 - 6144 ME-6100/4/DIO - 6148 ME-6100/8/DIO - 614f ME-6100/16/DIO - 6154 ME-6100I/4/DIO - 6158 ME-6100I/8/DIO - 615f ME-6100I/16/DIO - 6174 ME-6100ISLE/4/DIO - 6178 ME-6100ISLE/8/DIO - 617f ME-6100ISLE/16/DIO - 6259 ME-6200I/9/DIO - 6359 ME-6300I/9/DIO - 810a ME-8100A - 810b ME-8100B - 820a ME-8200A - 820b ME-8200B -1403 Ascor Inc -1404 Fundamental Software Inc -1405 Excalibur Systems Inc -1406 Oce' Printing Systems GmbH -1407 Lava Computer mfg Inc - 0100 Lava Dual Serial - 0101 Lava Quatro A - 0102 Lava Quatro B - 0110 Lava DSerial-PCI Port A - 0111 Lava DSerial-PCI Port B - 0120 Quattro-PCI A - 0121 Quattro-PCI B - 0180 Lava Octo A - 0181 Lava Octo B - 0200 Lava Port Plus - 0201 Lava Quad A - 0202 Lava Quad B - 0220 Lava Quattro PCI Ports A/B - 0221 Lava Quattro PCI Ports C/D - 0400 Lava 8255-PIO-PCI - 0500 Lava Single Serial - 0520 Lava RS422-SS-PCI - 0600 Lava Port 650 - 8000 Lava Parallel - 8001 Dual parallel port controller A - 8002 Lava Dual Parallel port A - 8003 Lava Dual Parallel port B - 8800 BOCA Research IOPPAR -1408 Aloka Co. Ltd -1409 Timedia Technology Co Ltd - 7168 PCI2S550 (Dual 16550 UART) - 1409 0002 SER4036A3V (2x RS232 port) - 1409 4027 SER4027A (1x RS232 port) - 1409 4037 SER4037A (2x RS232 port) -# Single DC-37 connector - 1409 4056 SER4056A (4x RS232) - 1409 5027 SER4027D - 1409 5037 SER4037D (2x RS232 port) -# Single DC-62 connector - 1409 5066 SER4066R (8x RS232) -# 4x 8p8c connectors - 1409 6056 SER4056D (4x RS232 port) - 7268 SUN1888 (Dual IEEE1284 parallel port) - 1409 0103 PAR4008A - 1409 0104 PAR4018A -140a DSP Research Inc -140b Ramix Inc -140c Elmic Systems Inc -140d Matsushita Electric Works Ltd -140e Goepel Electronic GmbH -140f Salient Systems Corp -1410 Midas lab Inc -1411 Ikos Systems Inc -# Nee IC Ensemble Inc. -1412 VIA Technologies Inc. - 1712 ICE1712 [Envy24] PCI Multi-Channel I/O Controller - 1412 1712 Hoontech ST Audio DSP 24 - 1412 3632 M-Audio Delta Audiophile 192 - 1412 d630 M-Audio Delta 1010 - 1412 d631 M-Audio Delta DiO - 1412 d632 M-Audio Delta 66 - 1412 d633 M-Audio Delta 44 - 1412 d634 M-Audio Delta Audiophile 2496 - 1412 d635 M-Audio Delta TDIF - 1412 d637 M-Audio Delta RBUS - 1412 d638 M-Audio Delta 410 - 1412 d63b M-Audio Delta 1010LT - 1412 d63c Digigram VX442 - 1416 1712 Hoontech ST Audio DSP 24 Media 7.1 - 153b 1115 EWS88 MT - 153b 1125 EWS88 MT (Master) - 153b 112b EWS88 D - 153b 112c EWS88 D (Master) - 153b 1130 EWX 24/96 - 153b 1138 DMX 6fire 24/96 - 153b 1151 PHASE88 - 16ce 1040 Edirol DA-2496 - 1724 VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller - 1412 1724 Albatron PX865PE 7.1 - 1412 3630 M-Audio Revolution 7.1 - 1412 3631 M-Audio Revolution 5.1 - 153b 1145 Aureon 7.1 Space - 153b 1147 Aureon 5.1 Sky - 153b 1150 PHASE 22 - 153b 1153 Aureon 7.1 Universe - 17ab 1906 PSC 724 [Ultimate Edge] - 270f f641 ZNF3-150 - 270f f645 ZNF3-250 - 3130 4154 MAYA 44 MKII -1413 Addonics -1414 Microsoft Corporation - 0001 MN-120 (ADMtek Centaur-C based) - 0002 MN-130 (ADMtek Centaur-P based) - 5801 XMA Decoder (Xenon) - 5802 SATA Controller - CdRom (Xenon) - 5803 SATA Controller - Disk (Xenon) - 5804 OHCI Controller 0 (Xenon) - 5805 EHCI Controller 0 (Xenon) - 5806 OHCI Controller 1 (Xenon) - 5807 EHCI Controller 1 (Xenon) - 580a Fast Ethernet Adapter (Xenon) - 580b Secure Flash Controller (Xenon) - 580d System Management Controller (Xenon) - 5811 Xenos GPU (Xenon) -1415 Oxford Semiconductor Ltd - 8401 OX9162 Mode 1 (8-bit bus) - 8403 OX9162 Mode 0 (parallel port) - 9500 OX16PCI954 (Quad 16950 UART) function 0 (Disabled) - 9501 OX16PCI954 (Quad 16950 UART) function 0 (Uart) - 12c4 0201 Titan/cPCI (2 port) - 12c4 0202 Titan/cPCI (4 port) - 12c4 0203 Titan/cPCI (8 port) - 12c4 0210 Titan/104-Plus (8 port, p1-4) - 131f 2050 CyberPro (4-port) -# Model IO1085, Part No: JJ-P46012 - 131f 2051 CyberSerial 4S Plus - 15ed 2000 MCCR Serial p0-3 of 8 - 15ed 2001 MCCR Serial p0-3 of 16 - 9505 16950 Compatible (dual) serial controller - 950a EXSYS EX-41092 Dual 16950 Serial adapter - 950b OXCB950 Cardbus 16950 UART - 9510 OX16PCI954 (Quad 16950 UART) function 1 (Disabled) - 12c4 0200 Titan/cPCI (Unused) - 9511 OX16PCI954 (Quad 16950 UART) function 1 (8bit bus) - 12c4 0211 Titan/104-Plus (8 port, p5-8) - 15ed 2000 MCCR Serial p4-7 of 8 - 15ed 2001 MCCR Serial p4-15 of 16 - 9512 OX16PCI954 (Quad 16950 UART) function 1 (32bit bus) - 9513 OX16PCI954 (Quad 16950 UART) function 1 (parallel port) - 9521 OX16PCI952 (Dual 16950 UART) - 9523 OX16PCI952 Integrated Parallel Port -1416 Multiwave Innovation pte Ltd -1417 Convergenet Technologies Inc -1418 Kyushu electronics systems Inc -1419 Excel Switching Corp -141a Apache Micro Peripherals Inc -141b Zoom Telephonics Inc -141d Digitan Systems Inc -141e Fanuc Ltd -141f Visiontech Ltd -1420 Psion Dacom plc - 8002 Gold Card NetGlobal 56k+10/100Mb CardBus (Ethernet part) - 8003 Gold Card NetGlobal 56k+10/100Mb CardBus (Modem part) -1421 Ads Technologies Inc -1422 Ygrec Systems Co Ltd -1423 Custom Technology Corp. -1424 Videoserver Connections -1425 Chelsio Communications Inc - 000b T210 Protocol Engine - 000c T204 Protocol Engine - 0022 10GbE Ethernet Adapter - 0030 T310 10GbE Single Port Adapter - 103c 705e PCIe 10GBase-SR [AD386A] - 0031 T320 10GbE Dual Port Adapter - 0032 T302 1GbE Dual Port Adapter - 0033 T304 1GbE Quad Port Adapter -1426 Storage Technology Corp. -1427 Better On-Line Solutions -1428 Edec Co Ltd -1429 Unex Technology Corp. -142a Kingmax Technology Inc -142b Radiolan -142c Minton Optic Industry Co Ltd -142d Pix stream Inc -142e Vitec Multimedia - 4020 VM2-2 [Video Maker 2] MPEG1/2 Encoder - 4337 VM2-2-C7 [Video Maker 2 rev. C7] MPEG1/2 Encoder -142f Radicom Research Inc -1430 ITT Aerospace/Communications Division -1431 Gilat Satellite Networks -1432 Edimax Computer Co. - 9130 RTL81xx Fast Ethernet -1433 Eltec Elektronik GmbH -# Nee Real Time Devices US Inc. -1435 RTD Embedded Technologies, Inc. - 4520 PCI4520 - 6020 SPM6020 - 6030 SPM6030 - 6420 SPM186420 - 6430 SPM176430 - 6431 SPM176431 - 7520 DM7520 - 7540 SDM7540 - 7820 DM7820 -1436 CIS Technology Inc -1437 Nissin Inc Co -1438 Atmel-dream -1439 Outsource Engineering & Mfg. Inc -143a Stargate Solutions Inc -143b Canon Research Center, America -143c Amlogic Inc -143d Tamarack Microelectronics Inc -143e Jones Futurex Inc -143f Lightwell Co Ltd - Zax Division -1440 ALGOL Corp. -1441 AGIE Ltd -1442 Phoenix Contact GmbH & Co. -1443 Unibrain S.A. -1444 TRW -1445 Logical DO Ltd -1446 Graphin Co Ltd -1447 AIM GmBH -1448 Alesis Studio Electronics -1449 TUT Systems Inc -144a Adlink Technology - 6208 PCI-6208V - 7250 PCI-7250 - 7296 PCI-7296 - 7432 PCI-7432 - 7433 PCI-7433 - 7434 PCI-7434 - 7841 PCI-7841 - 8133 PCI-8133 - 8164 PCI-8164 - 8554 PCI-8554 - 9111 PCI-9111 - 9113 PCI-9113 - 9114 PCI-9114 -# nee Loronix Information Systems Inc. -144b Verint Systems Inc. -144c Catalina Research Inc -144d Samsung Electronics Co Ltd - c00c P35 laptop - c511 R20 Laptop -144e OLITEC -144f Askey Computer Corp. -1450 Octave Communications Ind. -1451 SP3D Chip Design GmBH -1453 MYCOM Inc -1454 Altiga Networks -1455 Logic Plus Plus Inc -1456 Advanced Hardware Architectures -1457 Nuera Communications Inc -1458 Giga-byte Technology - 9001 GC-PTV-TAF Hybrid TV card - e911 GN-WIAG02 -1459 DOOIN Electronics -145a Escalate Networks Inc -145b PRAIM SRL -145c Cryptek -145d Gallant Computer Inc -145e Aashima Technology B.V. -145f Baldor Electric Company - 0001 NextMove PCI -1460 DYNARC INC -1461 Avermedia Technologies Inc - a3ce M179 - a3cf M179 - a836 M115 DVB-T, PAL/SECAM/NTSC Tuner - e836 M115S Hybrid Analog/DVB PAL/SECAM/NTSC Tuner - f436 AVerTV Hybrid+FM -1462 Micro-Star International Co., Ltd. - 5501 nVidia NV15DDR [GeForce2 Ti] - 6819 Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller [MSI CB54G] - 6825 PCI Card wireless 11g [PC54G] - 6834 RaLink RT2500 802.11g [PC54G2] - 7125 MS-7125 [K8N Neo4 Platinum] - 7235 P965 Neo MS-7235 mainboard - 7242 K9AGM RS485 Motherboard - 7250 MS-7250 Motherboard [K9N Platinum SLI/non-SLI] - 7327 K9AGM2-FIH Motherboard - 7650 Hetis 865GV-E (MS-7065) - 8725 NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter - 9000 NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter - 9110 GeFORCE FX5200 - 9119 NVIDIA NV31 [GeForce FX 5600XT] VGA Adapter - 9123 NVIDIA NV31 [GeForce FX 5600] FX5600-VTDR128 [MS-8912] - 9510 Radeon 9600XT - 9511 Radeon 9600XT - 9591 nVidia Corporation NV36 [GeForce FX 5700LE] - b834 Wireless 11g Turbo G PCI card [MSI PC60G] -1463 Fast Corporation -1464 Interactive Circuits & Systems Ltd -1465 GN NETTEST Telecom DIV. -1466 Designpro Inc. -1467 DIGICOM SPA -1468 AMBIT Microsystem Corp. -1469 Cleveland Motion Controls -146a IFR -146b Parascan Technologies Ltd -146c Ruby Tech Corp. - 1430 FE-1430TX Fast Ethernet PCI Adapter -146d Tachyon, INC. -146e Williams Electronics Games, Inc. -146f Multi Dimensional Consulting Inc -1470 Bay Networks -1471 Integrated Telecom Express Inc -1472 DAIKIN Industries, Ltd -1473 ZAPEX Technologies Inc -1474 Doug Carson & Associates -1475 PICAZO Communications -1476 MORTARA Instrument Inc -1477 Net Insight -1478 DIATREND Corporation -1479 TORAY Industries Inc -147a FORMOSA Industrial Computing -147b ABIT Computer Corp. - 1084 IP35 [Dark Raider] -147c AWARE, Inc. -147d Interworks Computer Products -147e Matsushita Graphic Communication Systems, Inc. -147f NIHON UNISYS, Ltd. -1480 SCII Telecom -1481 BIOPAC Systems Inc -1482 ISYTEC - Integrierte Systemtechnik GmBH - 0001 PCI-16 Host Interface for ITC-16 -1483 LABWAY Corporation -1484 Logic Corporation -1485 ERMA - Electronic GmBH -1486 L3 Communications Telemetry & Instrumentation -1487 MARQUETTE Medical Systems -1488 KONTRON Electronik GmBH -1489 KYE Systems Corporation -148a OPTO -148b INNOMEDIALOGIC Inc. -148c C.P. Technology Co. Ltd -148d DIGICOM Systems, Inc. - 1003 HCF 56k Data/Fax Modem -148e OSI Plus Corporation -148f Plant Equipment, Inc. -1490 Stone Microsystems PTY Ltd. -1491 ZEAL Corporation -1492 Time Logic Corporation -1493 MAKER Communications -1494 WINTOP Technology, Inc. -1495 TOKAI Communications Industry Co. Ltd -1496 JOYTECH Computer Co., Ltd. -1497 SMA Regelsysteme GmBH - 1497 SMA Technologie AG -1498 TEWS Technologies GmbH - 0330 TPMC816 2 Channel CAN bus controller. - 035d TPMC861 4-Channel Isolated Serial Interface RS422/RS485 - 0385 TPMC901 Extended CAN bus with 2/4/6 CAN controller - 21cc TCP460 CompactPCI 16 Channel Serial Interface RS232/RS422 - 21cd TCP461 CompactPCI 8 Channel Serial Interface RS232/RS422 - 30c8 TPCI200 -1499 EMTEC CO., Ltd -149a ANDOR Technology Ltd -149b SEIKO Instruments Inc -149c OVISLINK Corp. -149d NEWTEK Inc - 0001 Video Toaster for PC -149e Mapletree Networks Inc. -149f LECTRON Co Ltd -14a0 SOFTING GmBH -14a1 Systembase Co Ltd -14a2 Millennium Engineering Inc -14a3 Maverick Networks -14a4 GVC/BCM Advanced Research -14a5 XIONICS Document Technologies Inc -14a6 INOVA Computers GmBH & Co KG -14a7 MYTHOS Systems Inc -14a8 FEATRON Technologies Corporation -14a9 HIVERTEC Inc -14aa Advanced MOS Technology Inc -14ab Mentor Graphics Corp. -14ac Novaweb Technologies Inc -14ad Time Space Radio AB -14ae CTI, Inc -14af Guillemot Corporation - 7102 3D Prophet II MX -14b0 BST Communication Technology Ltd -14b1 Nextcom K.K. -14b2 ENNOVATE Networks Inc -14b3 XPEED Inc - 0000 DSL NIC -14b4 PHILIPS Business Electronics B.V. -14b5 Creamware GmBH - 0200 Scope - 0300 Pulsar - 0400 PulsarSRB - 0600 Pulsar2 - 0800 DSP-Board - 0900 DSP-Board - 0a00 DSP-Board - 0b00 DSP-Board -14b6 Quantum Data Corp. -14b7 PROXIM Inc - 0001 Symphony 4110 -14b8 Techsoft Technology Co Ltd -14b9 AIRONET Wireless Communications - 0001 PC4800 - 0340 PC4800 - 0350 PC4800 - 4500 PC4500 - 4800 Cisco Aironet 340 802.11b Wireless LAN Adapter/Aironet PC4800 - a504 Cisco Aironet Wireless 802.11b - a505 Cisco Aironet CB20a 802.11a Wireless LAN Adapter - a506 Cisco Aironet Mini PCI b/g -14ba INTERNIX Inc. -# ARCNET interface card based on SMSC COM20022 chip and manufactured for SMSC Japan - 0600 ARC-PCI/22 -14bb SEMTECH Corporation -14bc Globespan Semiconductor Inc. - d002 Pulsar [PCI ADSL Card] - d00f Pulsar [PCI ADSL Card] -14bd CARDIO Control N.V. -14be L3 Communications -14bf SPIDER Communications Inc. -14c0 COMPAL Electronics Inc -14c1 MYRICOM Inc. - 0008 Myri-10G Dual-Protocol NIC - 14c1 0008 10G-PCIE-8A - 14c1 0009 10G-PCIE-8A (MSI-X firmware) - 14c1 000a 10G-PCIE-8B - 14c1 000b 10G-PCIE-8B2 - 14c1 000c 10G-PCIE2-8B2 - 8043 Myrinet 2000 Scalable Cluster Interconnect - 103c 1240 Myrinet M2L-PCI64/2-3.0 LANai 7.4 (HP OEM) -14c2 DTK Computer -14c3 MEDIATEK Corp. -14c4 IWASAKI Information Systems Co Ltd -14c5 Automation Products AB -14c6 Data Race Inc -14c7 Modular Technology Holdings Ltd -14c8 Turbocomm Tech. Inc. -14c9 ODIN Telesystems Inc -14ca PE Logic Corp. -14cb Billionton Systems Inc -14cc NAKAYO Telecommunications Inc -14cd Universal Scientific Ind. -14ce Whistle Communications -14cf TEK Microsystems Inc. -14d0 Ericsson Axe R & D -14d1 Computer Hi-Tech Co Ltd -14d2 Titan Electronics Inc - 8001 VScom 010L 1 port parallel adaptor - 8002 VScom 020L 2 port parallel adaptor - 8010 VScom 100L 1 port serial adaptor - 8011 VScom 110L 1 port serial and 1 port parallel adaptor - 8020 VScom 200L 1 port serial adaptor - 8021 VScom 210L 2 port serial and 1 port parallel adaptor - 8028 VScom 200I/200I-SI 2-port serial adapter - 8040 VScom 400L 4 port serial adaptor - 8043 VScom 430L 4-port serial and 3-port parallel adapter - 8048 VScom 400I 4-port serial adapter - 8080 VScom 800L 8 port serial adaptor - 8088 VScom 800I 8-port serial adapter - a000 VScom 010H 1 port parallel adaptor - a001 VScom 100H 1 port serial adaptor - a003 VScom 400H 4 port serial adaptor - a004 VScom 400HF1 4 port serial adaptor - a005 VScom 200H 2 port serial adaptor - a007 VScom PCI800EH (PCIe) 8-port serial adapter Port 1-4 - a008 VScom PCI800EH (PCIe) 8-port serial adapter Port 5-8 - a009 VScom PCI400EH (PCIe) 4-port serial adapter - e001 VScom 010HV2 1 port parallel adaptor - e010 VScom 100HV2 1 port serial adaptor - e020 VScom 200HV2 2 port serial adaptor -14d3 CIRTECH (UK) Ltd -14d4 Panacom Technology Corp -14d5 Nitsuko Corporation -14d6 Accusys Inc - 6101 ACS-61xxx, PCIe to SAS/SATA RAID HBA - 6201 ACS-62xxx, External PCIe to SAS/SATA RAID controller -14d7 Hirakawa Hewtech Corp -14d8 HOPF Elektronik GmBH -# Formerly SiPackets, Inc., formerly API NetWorks, Inc., formerly Alpha Processor, Inc. -14d9 Alliance Semiconductor Corporation - 0010 AP1011/SP1011 HyperTransport-PCI Bridge [Sturgeon] - 9000 AS90L10204/10208 HyperTransport to PCI-X Bridge -14da National Aerospace Laboratories -14db AFAVLAB Technology Inc - 2120 TK9902 - 2182 AFAVLAB Technology Inc. 8-port serial card -14dc Amplicon Liveline Ltd - 0000 PCI230 - 0001 PCI242 - 0002 PCI244 - 0003 PCI247 - 0004 PCI248 - 0005 PCI249 - 0006 PCI260 - 0007 PCI224 - 0008 PCI234 - 0009 PCI236 - 000a PCI272 - 000b PCI215 -14dd Boulder Design Labs Inc -14de Applied Integration Corporation -14df ASIC Communications Corp -14e1 INVERTEX -14e2 INFOLIBRIA -14e3 AMTELCO -14e4 Broadcom Corporation - 0800 Sentry5 Chipcommon I/O Controller - 0804 Sentry5 PCI Bridge - 0805 Sentry5 MIPS32 CPU - 0806 Sentry5 Ethernet Controller - 080b Sentry5 Crypto Accelerator - 080f Sentry5 DDR/SDR RAM Controller - 0811 Sentry5 External Interface Core - 0816 BCM3302 Sentry5 MIPS32 CPU - 1600 NetXtreme BCM5752 Gigabit Ethernet PCI Express - 1028 01c2 Latitude D620 - 103c 3015 PCIe LAN on Motherboard - 107b 5048 E4500 Onboard - 1601 NetXtreme BCM5752M Gigabit Ethernet PCI Express - 1612 BCM70012 Video Decoder [Crystal HD] - 1639 NetXtreme II BCM5709 Gigabit Ethernet - 1028 0235 PowerEdge R710 BCM5709 Gigabit Ethernet - 1028 0236 PowerEdge R610 BCM5709 Gigabit Ethernet - 1028 0237 PowerEdge T610 BCM5709 Gigabit Ethernet - 103c 7055 NC382i Integrated Quad Port PCI Express Gigabit Server Adapter - 103c 7059 NC382T PCI Express Dual Port Multifunction Gigabit Server Adapter - 10a9 8027 Quad port Gigabit Ethernet Controller - 163a NetXtreme II BCM5709S Gigabit Ethernet - 1028 027b PowerEdge M805 Broadcom NetXtreme II BCM5709S - 1028 029c PowerEdge M710 BCM5709S Gigabit Ethernet - 103c 171d NC382m Dual Port 1GbE Multifunction BL-c Adapter - 103c 7056 NC382i Integrated Quad Port PCI Express Gigabit Server Adapter - 163b NetXtreme II BCM5716 Gigabit Ethernet - 1028 028c PowerEdge R410 BCM5716 Gigabit Ethernet - 1028 028d PowerEdge T410 BCM5716 Gigabit Ethernet - 163c NetXtreme II BCM5716S Gigabit Ethernet - 1644 NetXtreme BCM5700 Gigabit Ethernet - 1014 0277 Broadcom Vigil B5700 1000Base-T - 1028 00d1 Broadcom BCM5700 - 1028 0106 Broadcom BCM5700 - 1028 0109 Broadcom BCM5700 1000Base-T - 1028 010a Broadcom BCM5700 1000BaseTX - 10b7 1000 3C996-T 1000Base-T - 10b7 1001 3C996B-T 1000Base-T - 10b7 1002 3C996C-T 1000Base-T - 10b7 1003 3C997-T 1000Base-T Dual Port - 10b7 1004 3C996-SX 1000Base-SX - 10b7 1005 3C997-SX 1000Base-SX Dual Port - 10b7 1008 3C942 Gigabit LOM (31X31) - 14e4 0002 NetXtreme 1000Base-SX - 14e4 0003 NetXtreme 1000Base-SX - 14e4 0004 NetXtreme 1000Base-T - 14e4 1028 NetXtreme 1000BaseTX - 14e4 1644 BCM5700 1000Base-T - 1645 NetXtreme BCM5701 Gigabit Ethernet - 0e11 007c NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T) - 0e11 007d NC6770 Gigabit Server Adapter (PCI-X, 1000-SX) - 0e11 0085 NC7780 Gigabit Server Adapter (embedded, WOL) - 0e11 0099 NC7780 Gigabit Server Adapter (embedded, WOL) - 0e11 009a NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T) - 0e11 00c1 NC6770 Gigabit Server Adapter (PCI-X, 1000-SX) - 1028 0121 Broadcom BCM5701 1000Base-T - 103c 128a BCM5701 1000Base-T (HP, OEM 3COM) - 103c 128b 1000Base-SX (PCI) [A7073A] - 103c 12a4 Core Lan 1000Base-T - 103c 12c1 IOX Core Lan 1000Base-T [A7109AX] - 103c 1300 Core LAN/SCSI Combo [A6794A] - 10a9 8010 IO9/IO10 Gigabit Ethernet (Copper) - 10a9 8011 Gigabit Ethernet (Copper) - 10a9 8012 Gigabit Ethernet (Fiber) - 10b7 1004 3C996-SX 1000Base-SX - 10b7 1006 3C996B-T 1000Base-T - 10b7 1007 3C1000-T 1000Base-T - 10b7 1008 3C940-BR01 1000Base-T - 14e4 0001 BCM5701 1000Base-T - 14e4 0005 BCM5701 1000Base-T - 14e4 0006 BCM5701 1000Base-T - 14e4 0007 BCM5701 1000Base-SX - 14e4 0008 BCM5701 1000Base-T - 14e4 1645 NetXtreme BCM5701 Gigabit Ethernet - 14e4 8008 BCM5701 1000Base-T - 1646 NetXtreme BCM5702 Gigabit Ethernet - 0e11 00bb NC7760 1000BaseTX - 1028 0126 Broadcom BCM5702 1000BaseTX - 14e4 8009 BCM5702 1000BaseTX - 1647 NetXtreme BCM5703 Gigabit Ethernet - 0e11 0099 NC7780 1000BaseTX - 0e11 009a NC7770 1000BaseTX - 10a9 8010 SGI IO9 Gigabit Ethernet (Copper) - 14e4 0009 BCM5703 1000BaseTX - 14e4 000a BCM5703 1000BaseSX - 14e4 000b BCM5703 1000BaseTX - 14e4 8009 BCM5703 1000BaseTX - 14e4 800a BCM5703 1000BaseTX - 1648 NetXtreme BCM5704 Gigabit Ethernet - 0e11 00cf NC7772 Gigabit Server Adapter (PCI-X, 10,100,1000-T) - 0e11 00d0 NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T) - 0e11 00d1 NC7783 Gigabit Server Adapter (PCI-X, 10,100,1000-T) - 1028 014a PowerEdge 1750 - 1028 0170 PowerEdge 6850 Broadcom NetXtreme BCM5704 - 103c 310f NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T) - 10a9 8013 Dual Port Gigabit Ethernet (PCI-X,Copper) - 10a9 8018 Dual Port Gigabit Ethernet (A330) - 10a9 801a Dual Port Gigabit Ethernet (IA-blade) - 10a9 801b Quad Port Gigabit Ethernet (PCI-E,Copper) - 10b7 2000 3C998-T Dual Port 10/100/1000 PCI-X - 10b7 3000 3C999-T Quad Port 10/100/1000 PCI-X - 1166 1648 NetXtreme CIOB-E 1000Base-T - 1734 100b PRIMERGY RX/TX series onboard LAN - 1649 NetXtreme BCM5704S_2 Gigabit Ethernet - 164a NetXtreme II BCM5706 Gigabit Ethernet - 103c 1709 NC371i Integrated PCI-X Multifunction Gigabit Server Adapter - 103c 3070 NC380T PCI Express Dual Port Multifunction Gigabit Server Adapter - 103c 3101 NC370T MultifuNCtion Gigabit Server Adapter - 103c 3106 NC370i Multifunction Gigabit Server Adapter - 164c NetXtreme II BCM5708 Gigabit Ethernet - 1028 01f0 PowerEdge R900 Broadcom NetXtreme II BCM5708 - 1028 0205 PowerEdge 2970 Broadcom NetXtreme II BCM5708 - 1028 020b PowerEdge T605 Broadcom NetXtreme II BCM5708 - 1028 0221 PowerEdge R805 Broadcom NetXtreme II BCM5708 - 1028 0223 PowerEdge R905 Broadcom NetXtreme II BCM5708 - 1028 1f12 PowerEdge R805/R905 Broadcom NetXtreme II BCM5708 - 103c 7037 NC373T PCI Express Multifunction Gigabit Server Adapter - 103c 7038 NC373i Integrated Multifunction Gigabit Server Adapter - 103c 7045 NC374m PCI Express Dual Port Multifunction Gigabit Server Adapter - 164d NetXtreme BCM5702FE Gigabit Ethernet - 164e NetXtreme II BCM57710 10-Gigabit PCIe [Everest] - 103c 171c NC532m Dual Port 10GbE Multifunction BL-C Adapter - 103c 7058 NC532i Dual Port 10GbE Multifunction BL-C Adapter - 164f NetXtreme II BCM57711 10-Gigabit PCIe - 1650 NetXtreme II BCM57711E 10-Gigabit PCIe - 103c 171c NC532m Dual Port 10GbE Multifunction BL-C Adapter - 103c 7058 NC532i Dual Port 10GbE Multifunction BL-C Adapter - 1653 NetXtreme BCM5705 Gigabit Ethernet - 0e11 00e3 NC7761 Gigabit Server Adapter - 1654 NetXtreme BCM5705_2 Gigabit Ethernet - 0e11 00e3 NC7761 Gigabit Server Adapter - 103c 3100 NC1020 ProLiant Gigabit Server Adapter 32 PCI - 103c 3226 NC150T 4-port Gigabit Combo Switch & Adapter - 1658 NetXtreme BCM5720 Gigabit Ethernet - 1659 NetXtreme BCM5721 Gigabit Ethernet PCI Express - 1014 02c6 eServer xSeries server mainboard - 1028 01e6 PowerEdge 860 - 1028 023c PowerEdge R200 Broadcom NetXtreme BCM5721 - 103c 170b NC320m PCI Express Dual Port Gigabit Server Adapter - 103c 7031 NC320T PCIe Gigabit Server Adapter - 103c 7032 NC320i PCIe Gigabit Server Adapter - 1734 1061 PRIMERGY RX/TX S2 series onboard LAN - 165a NetXtreme BCM5722 Gigabit Ethernet PCI Express -# Dual NIC server - 1014 0378 IBM System x3350 (Machine type 4192) - 1028 020f PowerEdge R300 Broadcom NetXtreme 5722 - 1028 0210 PowerEdge T300 Broadcom NetXtreme 5722 - 1028 0225 PowerEdge T105 Broadcom NetXtreme 5722 - 103c 7051 NC105i PCIe Gigabit Server Adapter - 103c 7052 NC105T PCIe Gigabit Server Adapter - 165b NetXtreme BCM5723 Gigabit Ethernet PCIe - 103c 705d NC107i Integrated PCI Express Gigabit Server Adapter - 165d NetXtreme BCM5705M Gigabit Ethernet - 1028 865d Latitude D400 - 14e4 165d Dell Latitude D600 - 165e NetXtreme BCM5705M_2 Gigabit Ethernet - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 103c 099c NX6110/NC6120 - 10cf 1279 LifeBook E8010D - 1668 NetXtreme BCM5714 Gigabit Ethernet - 103c 7039 NC324i PCIe Dual Port Gigabit Server Adapter - 1669 NetXtreme 5714S Gigabit Ethernet - 166a NetXtreme BCM5780 Gigabit Ethernet - 103c 7035 NC325i Integrated Dual port PCIe Express Gigabit Server Adapter - 166b NetXtreme BCM5780S Gigabit Ethernet - 166e 570x 10/100 Integrated Controller - 1672 NetXtreme BCM5754M Gigabit Ethernet PCI Express - 1673 NetXtreme BCM5755M Gigabit Ethernet PCI Express - 1674 NetXtreme BCM5756ME Gigabit Ethernet PCI Express - 1676 NetXtreme BCM5750 Gigabit Ethernet - 1677 NetXtreme BCM5751 Gigabit Ethernet PCI Express - 1028 0176 Dimension XPS Gen 4 - 1028 0177 Dimension 8400 - 1028 0179 Optiplex GX280 - 1028 0182 Latitude D610 - 1028 0187 Precision M70 - 1028 01a8 Precision 380 - 1028 01ad OptiPlex GX620 - 103c 3006 DC7100 SFF(DX878AV) - 1462 028c 915P/G Neo2 - 1734 105d Scenic W620 - 1678 NetXtreme BCM5715 Gigabit Ethernet - 103c 703e NC326i PCIe Dual Port Gigabit Server Adapter - 1679 NetXtreme BCM5715S Gigabit Ethernet - 103c 1707 NC326m PCIe Dual Port Adapter - 103c 170c NC325m PCIe Quad Port Adapter - 103c 703c NC326i PCIe Dual Port Gigabit Server Adapter - 167a NetXtreme BCM5754 Gigabit Ethernet PCI Express - 1028 01da OptiPlex 745 - 1028 01de Precision 390 - 1028 01df PowerEdge SC440 - 1028 0214 Precision T3400 - 167b NetXtreme BCM5755 Gigabit Ethernet PCI Express - 103c 280a DC5750 Microtower - 167c NetXtreme BCM5750M Gigabit Ethernet - 167d NetXtreme BCM5751M Gigabit Ethernet PCI Express - 1014 0577 ThinkPad Z60t - 103c 0940 HP Compaq nw8240 Mobile Workstation - 17aa 2081 ThinkPad R60e - 167e NetXtreme BCM5751F Fast Ethernet PCI Express - 167f NetLink BCM5787F Fast Ethernet PCI Express - 1680 NetXtreme BCM5761e Gigabit Ethernet PCIe - 1681 NetXtreme BCM5761 Gigabit Ethernet PCIe - 1684 NetXtreme BCM5764M Gigabit Ethernet PCIe - 1690 NetXtreme BCM57760 Gigabit Ethernet PCIe - 1691 NetLink BCM57788 Gigabit Ethernet PCIe - 1692 NetLink BCM57780 Gigabit Ethernet PCIe - 1693 NetLink BCM5787M Gigabit Ethernet PCI Express - 1025 0121 Aspire 5920G - 103c 30c0 6710b - 1694 NetLink BCM57790 Gigabit Ethernet PCIe - 1696 NetXtreme BCM5782 Gigabit Ethernet - 103c 12bc d530 CMT (DG746A) - 14e4 000d NetXtreme BCM5782 1000Base-T - 1698 NetLink BCM5784M Gigabit Ethernet PCIe - 1699 NetLink BCM5785 Gigabit Ethernet - 169a NetLink BCM5786 Gigabit Ethernet PCI Express - 169b NetLink BCM5787 Gigabit Ethernet PCI Express - 169c NetXtreme BCM5788 Gigabit Ethernet - 103c 308b MX6125 - 103c 30a1 NC2400 - 144d c018 X20 - 1462 590c KT6 Delta-FIS2R (MS-6590) - 169d NetLink BCM5789 Gigabit Ethernet PCI Express - 16a0 NetLink BCM5785 Fast Ethernet - 16a6 NetXtreme BCM5702X Gigabit Ethernet - 0e11 00bb NC7760 Gigabit Server Adapter (PCI-X, 10/100/1000-T) - 1028 0126 BCM5702 1000Base-T - 14e4 000c BCM5702 1000Base-T - 14e4 8009 BCM5702 1000Base-T - 16a7 NetXtreme BCM5703X Gigabit Ethernet - 0e11 00ca NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T) - 0e11 00cb NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T) - 14e4 0009 NetXtreme BCM5703 1000Base-T - 14e4 000a NetXtreme BCM5703 1000Base-SX - 14e4 000b NetXtreme BCM5703 1000Base-T - 14e4 800a NetXtreme BCM5703 1000Base-T - 16a8 NetXtreme BCM5704S Gigabit Ethernet - 103c 132b PCI-X 1000Mbps Dual-port Built-in - 10a9 8014 Dual Port Gigabit Ethernet (PCI-X,Fiber) - 10a9 801c Quad Port Gigabit Ethernet (PCI-E,Fiber) - 10b7 2001 3C998-SX Dual Port 1000-SX PCI-X - 16aa NetXtreme II BCM5706S Gigabit Ethernet - 103c 3102 NC370F MultifuNCtion Gigabit Server Adapter - 103c 310c NC370i Multifunction Gigabit Server Adapter - 16ac NetXtreme II BCM5708S Gigabit Ethernet - 1014 0304 NetXtreme II BCM5708S Gigabit Ethernet - 1028 01bb PowerEdge 1955 Broadcom NetXtreme II BCM5708S - 1028 020c PowerEdge M605 Broadcom NetXtreme II BCM5708S - 103c 1706 NC373m Multifunction Gigabit Server Adapter - 103c 7038 NC373i PCI Express Multifunction Gigabit Server Adapter - 103c 703b NC373i Integrated Multifunction Gigabit Server Adapter - 103c 703d NC373F PCI Express Multifunction Gigabit Server Adapter - 16c6 NetXtreme BCM5702A3 Gigabit Ethernet - 10b7 1100 3C1000B-T 10/100/1000 PCI - 14e4 000c BCM5702 1000Base-T - 14e4 8009 BCM5702 1000Base-T - 16c7 NetXtreme BCM5703 Gigabit Ethernet - 0e11 00ca NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T) - 0e11 00cb NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T) - 103c 12c3 Combo FC/GigE-SX [A9782A] - 103c 12ca Combo FC/GigE-T [A9784A] - 103c 1321 Core I/O LAN/SCSI Combo [AB314A] - 14e4 0009 NetXtreme BCM5703 1000Base-T - 14e4 000a NetXtreme BCM5703 1000Base-SX - 16dd NetLink BCM5781 Gigabit Ethernet PCI Express - 16f7 NetXtreme BCM5753 Gigabit Ethernet PCI Express - 16fd NetXtreme BCM5753M Gigabit Ethernet PCI Express - 103c 309f Compaq nx9420 Notebook - 103c 30a3 Compaq nw8440 - 16fe NetXtreme BCM5753F Fast Ethernet PCI Express - 170c BCM4401-B0 100Base-TX - 1028 0188 Inspiron 6000 laptop - 1028 018d Inspiron 700m/710m - 1028 0196 Inspiron 5160 - 1028 01af Inspiron 6400 - 1028 01cd Inspiron 9400 Laptop - 1028 01d7 XPS M1210 - 1028 01d8 Inspiron E1405 - 103c 099c NX6110/NC6120 - 103c 30a2 NX7300 laptop - 14e4 170c HP Compaq 6720t Mobile Thin Client - 170d NetXtreme BCM5901 100Base-TX - 1014 0545 ThinkPad R40e - 170e NetXtreme BCM5901 100Base-TX - 1712 NetLink BCM5906 Fast Ethernet PCI Express - 1713 NetLink BCM5906M Fast Ethernet PCI Express - 1028 01f3 Inspiron 1420 - 1028 0209 XPS M1330 - 103c 30c0 Compaq 6710b - 17aa 3a23 IdeaPad S10e - 3352 BCM3352 - 3360 BCM3360 - 4210 BCM4210 iLine10 HomePNA 2.0 - 4211 BCM4211 iLine10 HomePNA 2.0 + V.90 56k modem - 4212 BCM4212 v.90 56k modem - 4220 802-11b/g Wireless PCI controller, packaged as a Linksys WPC54G ver 1.2 PCMCIA card - 4222 NetXtreme BCM5753M Gigabit Ethernet PCI Express - 4301 BCM4303 802.11b Wireless LAN Controller - 1028 0407 TrueMobile 1180 Onboard WLAN - 1043 0120 WL-103b Wireless LAN PC Card - 4305 BCM4307 V.90 56k Modem - 4306 BCM4307 Ethernet Controller - 4307 BCM4307 802.11b Wireless LAN Controller - 4310 BCM4310 Chipcommon I/OController - 4311 BCM4311 802.11b/g WLAN - 1028 0007 Wireless 1390 WLAN Mini-Card - 1028 0008 Wireless 1390 WLAN ExpressCard - 103c 1363 BCM4311 802.11b/g Wireless LAN Controller - 103c 1364 BCM4311 802.11b/g Wireless LAN Controller - 103c 1365 BCM4311 802.11b/g Wireless LAN Controller - 103c 1374 BCM4311 802.11b/g Wireless LAN Controller - 103c 1375 BCM4311 802.11b/g Wireless LAN Controller - 103c 1376 BCM4311 802.11b/g Wireless LAN Controller - 103c 1377 BCM4311 802.11b/g Wireless LAN Controller - 103c 137f BCM4322 802.11a/b/g/n Wireless LAN Controller - 103c 1380 BCM4322 802.11a/b/g/n Wireless LAN Controller - 14e4 4311 BCM94311MCG - 4312 BCM4312 802.11a/b/g - 1028 0007 Wireless 1490 Dual Band WLAN Mini-Card - 1028 0008 Wireless 1490 Dual Band WLAN ExpressCard - 103c 135a Broadcom 802.11a/b/g WLAN - 103c 135f Broadcom 802.11a/b/g WLAN - 103c 1360 Broadcom 802.11a/b/g WLAN - 103c 1361 Broadcom 802.11a/b/g WLAN - 103c 1362 Broadcom 802.11a/b/g WLAN - 103c 1370 Broadcom 802.11a/b/g WLAN - 103c 1371 Broadcom 802.11a/b/g WLAN - 103c 1372 Broadcom 802.11a/b/g WLAN - 103c 1373 Broadcom 802.11a/b/g WLAN - 103c 30b5 Presario V3242AU - 1371 103c Broadcom 802.11 Multiband-netwerkadapter(6715s) - 4313 BCM4310 Ethernet Controller - 4315 BCM4312 802.11b/g - 1028 000b Wireless 1395 WLAN Mini-Card - 1028 000c Wireless 1397 WLAN Mini-Card - 103c 137c BCM4312 802.11b/g Wireless LAN Controller - 103c 137d BCM4312 802.11b/g Wireless LAN Controller - 4318 BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller - 1028 0005 Wireless 1370 WLAN Mini-PCI Card - 1028 0006 Wireless 1370 WLAN PC Card - 103c 1355 Broadcom 802.11b/g WLAN - 103c 1356 Broadcom 802.11b/g WLAN - 103c 1357 Broadcom 802.11b/g WLAN - 1043 100f WL-138G V2 802.11g WLAN PCI Card - 1043 120f A6U notebook embedded card - 1154 0355 Buffalo WLI2-PCI-G54S High Speed Mode Wireless Adapter - 1468 0311 Aspire 3022WLMi, 5024WLMi, 5020 - 1468 0312 TravelMate 2410 - 14e4 0449 Gateway 7510GX - 14e4 4318 WPC54G version 3 [Wireless-G Notebook Adapter] 802.11g Wireless Lan Controller - 16ec 0119 U.S.Robotics Wireless MAXg PC Card - 1737 0042 WMP54GS version 1.1 [Wireless-G PCI Adapter] 802.11g w/SpeedBooster - 1737 0048 WPC54G-EU version 3 [Wireless-G Notebook Adapter] - 4319 BCM4311 [AirForce 54g] 802.11a/b/g PCI Express Transceiver - 1028 0005 Wireless 1470 Dual Band WLAN Mini-PCI Card - 1028 0006 Wireless 1470 Dual Band WLAN PC Card - 103c 1358 Broadcom 802.11a/b/g WLAN - 103c 1359 Broadcom 802.11a/b/g WLAN - 103c 135a Broadcom 802.11a/b/g WLAN - 4320 BCM4306 802.11b/g Wireless LAN Controller - 1028 0001 TrueMobile 1300 WLAN Mini-PCI Card - 1028 0002 TrueMobile 1300 WLAN PC Card - 1028 0003 Wireless 1350 WLAN Mini-PCI Card - 1028 0004 Wireless 1350 WLAN PC Card - 103c 12f4 Broadcom 802.11b/g WLAN - 103c 12f8 Broadcom 802.11b/g WLAN - 103c 12fa Broadcom 802.11b/g WLAN - 103c 12fb Broadcom 802.11b/g WLAN - 1043 100f WL-100G - 1057 7025 WN825G - 106b 004e AirPort Extreme - 1154 0330 Buffalo WLI2-PCI-G54S High Speed Mode Wireless Desktop Adapter - 144f 7050 eMachines M6805 802.11g Built-in Wireless - 144f 7051 Sonnet Aria Extreme PCI - 14e4 4320 Linksys WMP54G PCI - 1737 4320 WPC54G - 1799 7000 F5D7000uk 54G Wireless Network Card - 1799 7001 Belkin F5D7001 High-Speed Mode Wireless G Network Card - 1799 7010 Belkin F5D7010 54g Wireless Network card - 1799 7011 F5D7011 54g+ Wireless Network card - 185f 1220 TravelMate 290E WLAN Mini-PCI Card - 4321 BCM4306 802.11a Wireless LAN Controller - 4322 BCM4306 UART - 4324 BCM4309 802.11a/b/g - 1028 0001 Truemobile 1400 - 1028 0002 TrueMobile 1400 Dual Band WLAN PC Card - 1028 0003 Truemobile 1450 MiniPCI - 1028 0004 Wireless 1450 Dual Band WLAN PC Card - 103c 12f9 Broadcom 802.11a/b/g WLAN - 103c 12fc Broadcom 802.11a/b/g WLAN - 4325 BCM43xG 802.11b/g - 1414 0003 Wireless Notebook Adapter MN-720 - 1414 0004 Wireless PCI Adapter MN-730 - 4326 BCM4307 Chipcommon I/O Controller? - 4328 BCM4328 802.11a/b/g/n - 1028 0009 Wireless 1500 Draft 802.11n WLAN Mini-Card - 1028 000a Wireless 1500 Draft 802.11n WLAN Mini-card - 103c 1366 BCM4321 802.11a/b/g/n Wireless LAN Controller - 103c 1367 BCM4321 802.11a/b/g/n Wireless LAN Controller - 103c 1368 BCM4321 802.11a/b/g/n Wireless LAN Controller - 103c 1369 BCM4321 802.11a/b/g/n Wireless LAN Controller - 14e4 4328 BCM4328 802.11a/b/g/n - 4329 BCM43XG - 432b BCM4322 802.11a/b/g/n Wireless LAN Controller - 1028 000d Wireless 1510 Wireless-N WLAN Mini-Card - 4344 EDGE/GPRS data and 802.11b/g combo cardbus [GC89] - 4401 BCM4401 100Base-T - 1025 0035 TravelMate 660 - 103c 08b0 tc1100 tablet - 1043 80a8 A7V8X motherboard - 4402 BCM4402 Integrated 10/100BaseT - 4403 BCM4402 V.90 56k Modem - 4410 BCM4413 iLine32 HomePNA 2.0 - 4411 BCM4413 V.90 56k modem - 4412 BCM4412 10/100BaseT - 4430 BCM44xx CardBus iLine32 HomePNA 2.0 - 4432 BCM4432 CardBus 10/100BaseT - 4610 BCM4610 Sentry5 PCI to SB Bridge - 4611 BCM4610 Sentry5 iLine32 HomePNA 1.0 - 4612 BCM4610 Sentry5 V.90 56k Modem - 4613 BCM4610 Sentry5 Ethernet Controller - 4614 BCM4610 Sentry5 External Interface - 4615 BCM4610 Sentry5 USB Controller - 4704 BCM4704 PCI to SB Bridge - 4705 BCM4704 Sentry5 802.11b Wireless LAN Controller - 4706 BCM4704 Sentry5 Ethernet Controller - 4707 BCM4704 Sentry5 USB Controller - 4708 BCM4704 Crypto Accelerator - 4710 BCM4710 Sentry5 PCI to SB Bridge - 4711 BCM47xx Sentry5 iLine32 HomePNA 2.0 - 4712 BCM47xx V.92 56k modem - 4713 Sentry5 Ethernet Controller - 4714 BCM47xx Sentry5 External Interface - 4715 Sentry5 USB Controller - 4716 BCM47xx Sentry5 USB Host Controller - 4717 BCM47xx Sentry5 USB Device Controller - 4718 Sentry5 Crypto Accelerator - 4719 BCM47xx/53xx RoboSwitch Core - 4720 BCM4712 MIPS CPU - 5365 BCM5365P Sentry5 Host Bridge - 5600 BCM5600 StrataSwitch 24+2 Ethernet Switch Controller - 5605 BCM5605 StrataSwitch 24+2 Ethernet Switch Controller - 5615 BCM5615 StrataSwitch 24+2 Ethernet Switch Controller - 5625 BCM5625 StrataSwitch 24+2 Ethernet Switch Controller - 5645 BCM5645 StrataSwitch 24+2 Ethernet Switch Controller - 5670 BCM5670 8-Port 10GE Ethernet Switch Fabric - 5680 BCM5680 G-Switch 8 Port Gigabit Ethernet Switch Controller - 5690 BCM5690 12-port Multi-Layer Gigabit Ethernet Switch - 5691 BCM5691 GE/10GE 8+2 Gigabit Ethernet Switch Controller - 5692 BCM5692 12-port Multi-Layer Gigabit Ethernet Switch - 5695 BCM5695 12-port + HiGig Multi-Layer Gigabit Ethernet Switch - 5698 BCM5698 12-port Multi-Layer Gigabit Ethernet Switch - 5820 BCM5820 Crypto Accelerator - 5821 BCM5821 Crypto Accelerator - 5822 BCM5822 Crypto Accelerator - 5823 BCM5823 Crypto Accelerator - 5824 BCM5824 Crypto Accelerator - 5840 BCM5840 Crypto Accelerator - 5841 BCM5841 Crypto Accelerator - 5850 BCM5850 Crypto Accelerator - b800 BCM56800 StrataXGS 10GE Switch Controller -14e5 Pixelfusion Ltd -14e6 SHINING Technology Inc -14e7 3CX -14e8 RAYCER Inc -14e9 GARNETS System CO Ltd -14ea Planex Communications, Inc - ab06 FNW-3603-TX CardBus Fast Ethernet - ab07 RTL81xx RealTek Ethernet - ab08 FNW-3602-TX CardBus Fast Ethernet -14eb SEIKO EPSON Corp -14ec ACQIRIS -14ed DATAKINETICS Ltd -14ee MASPRO KENKOH Corp -14ef CARRY Computer ENG. CO Ltd -14f0 CANON RESEACH CENTRE FRANCE -14f1 Conexant Systems, Inc. - 1002 HCF 56k Modem - 1003 HCF 56k Modem - 1004 HCF 56k Modem - 1005 HCF 56k Modem - 1006 HCF 56k Modem - 1022 HCF 56k Modem - 1023 HCF 56k Modem - 1024 HCF 56k Modem - 1025 HCF 56k Modem - 1026 HCF 56k Modem - 1032 HCF 56k Modem - 1033 HCF 56k Data/Fax Modem - 1033 8077 NEC - 122d 4027 Dell Zeus - MDP3880-W(B) Data Fax Modem - 122d 4030 Dell Mercury - MDP3880-U(B) Data Fax Modem - 122d 4034 Dell Thor - MDP3880-W(U) Data Fax Modem - 13e0 020d Dell Copper - 13e0 020e Dell Silver - 13e0 0261 IBM - 13e0 0290 Compaq Goldwing - 13e0 02a0 IBM - 13e0 02b0 IBM - 13e0 02c0 Compaq Scooter - 13e0 02d0 IBM - 144f 1500 IBM P85-DF (1) - 144f 1501 IBM P85-DF (2) - 144f 150a IBM P85-DF (3) - 144f 150b IBM P85-DF Low Profile (1) - 144f 1510 IBM P85-DF Low Profile (2) - 1034 HCF 56k Data/Fax/Voice Modem - 1035 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem - 10cf 1098 Fujitsu P85-DFSV - 1036 HCF 56k Data/Fax/Voice/Spkp Modem - 104d 8067 HCF 56k Modem - 122d 4029 MDP3880SP-W - 122d 4031 MDP3880SP-U - 13e0 0209 Dell Titanium - 13e0 020a Dell Graphite - 13e0 0260 Gateway Red Owl - 13e0 0270 Gateway White Horse - 1052 HCF 56k Data/Fax Modem (Worldwide) - 1053 HCF 56k Data/Fax Modem (Worldwide) - 1054 HCF 56k Data/Fax/Voice Modem (Worldwide) - 1055 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide) - 1056 HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide) - 1057 HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide) - 1059 HCF 56k Data/Fax/Voice Modem (Worldwide) - 1063 HCF 56k Data/Fax Modem - 1064 HCF 56k Data/Fax/Voice Modem - 1065 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem - 1066 HCF 56k Data/Fax/Voice/Spkp Modem - 122d 4033 Dell Athena - MDP3900V-U - 1085 HCF V90 56k Data/Fax/Voice/Spkp PCI Modem - 10b6 CX06834-11 HCF V.92 56k Data/Fax/Voice/Spkp Modem - 1433 HCF 56k Data/Fax Modem - 1434 HCF 56k Data/Fax/Voice Modem - 1435 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem - 1436 HCF 56k Data/Fax Modem - 1453 HCF 56k Data/Fax Modem - 13e0 0240 IBM - 13e0 0250 IBM - 144f 1502 IBM P95-DF (1) - 144f 1503 IBM P95-DF (2) - 1454 HCF 56k Data/Fax/Voice Modem - 1455 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem - 1456 HCF 56k Data/Fax/Voice/Spkp Modem - 122d 4035 Dell Europa - MDP3900V-W - 122d 4302 Dell MP3930V-W(C) MiniPCI - 1610 ADSL AccessRunner PCI Arbitration Device - 1611 AccessRunner PCI ADSL Interface Device - 1620 AccessRunner V2 PCI ADSL Arbitration Device - 1621 AccessRunner V2 PCI ADSL Interface Device - 1622 AccessRunner V2 PCI ADSL Yukon WAN Adapter - 1803 HCF 56k Modem - 0e11 0023 623-LAN Grizzly - 0e11 0043 623-LAN Yogi - 1811 MiniPCI Network Adapter - 1815 HCF 56k Modem - 0e11 0022 Grizzly - 0e11 0042 Yogi - 2003 HSF 56k Data/Fax Modem - 2004 HSF 56k Data/Fax/Voice Modem - 2005 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem - 2006 HSF 56k Data/Fax/Voice/Spkp Modem - 2013 HSF 56k Data/Fax Modem - 0e11 b195 Bear - 0e11 b196 Seminole 1 - 0e11 b1be Seminole 2 - 1025 8013 Acer - 1033 809d NEC - 1033 80bc NEC - 155d 6793 HP - 155d 8850 E Machines - 2014 HSF 56k Data/Fax/Voice Modem - 2015 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem - 2016 HSF 56k Data/Fax/Voice/Spkp Modem - 2043 HSF 56k Data/Fax Modem (WorldW SmartDAA) - 2044 HSF 56k Data/Fax/Voice Modem (WorldW SmartDAA) - 2045 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (WorldW SmartDAA) - 14f1 2045 Generic SoftK56 - 2046 HSF 56k Data/Fax/Voice/Spkp Modem (WorldW SmartDAA) - 2063 HSF 56k Data/Fax Modem (SmartDAA) - 2064 HSF 56k Data/Fax/Voice Modem (SmartDAA) - 2065 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (SmartDAA) - 2066 HSF 56k Data/Fax/Voice/Spkp Modem (SmartDAA) - 2093 HSF 56k Modem - 155d 2f07 Legend - 2143 HSF 56k Data/Fax/Cell Modem (Mob WorldW SmartDAA) - 2144 HSF 56k Data/Fax/Voice/Cell Modem (Mob WorldW SmartDAA) - 2145 HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WorldW SmartDAA) - 2146 HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob WorldW SmartDAA) - 2163 HSF 56k Data/Fax/Cell Modem (Mob SmartDAA) - 2164 HSF 56k Data/Fax/Voice/Cell Modem (Mob SmartDAA) - 2165 HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob SmartDAA) - 2166 HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob SmartDAA) - 2343 HSF 56k Data/Fax CardBus Modem (Mob WorldW SmartDAA) - 2344 HSF 56k Data/Fax/Voice CardBus Modem (Mob WorldW SmartDAA) - 2345 HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WorldW SmartDAA) - 2346 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob WorldW SmartDAA) - 2363 HSF 56k Data/Fax CardBus Modem (Mob SmartDAA) - 2364 HSF 56k Data/Fax/Voice CardBus Modem (Mob SmartDAA) - 2365 HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA) - 2366 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA) - 2443 HSF 56k Data/Fax Modem (Mob WorldW SmartDAA) - 104d 8075 Modem - 104d 8083 Modem - 104d 8097 Modem - 2444 HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA) - 2445 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA) - 2446 HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA) - 2463 HSF 56k Data/Fax Modem (Mob SmartDAA) - 2464 HSF 56k Data/Fax/Voice Modem (Mob SmartDAA) - 2465 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA) - 2466 HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA) - 2bfa D110 HDAudio Soft Data Fax Modem with SmartCP - 1025 0009 Aspire 5622WLMi - 2f00 HSF 56k HSFi Modem - 13e0 8d84 IBM HSFi V.90 - 13e0 8d85 Compaq Stinger - 14f1 2004 Dynalink 56PMi - 2f02 HSF 56k HSFi Data/Fax - 2f11 HSF 56k HSFi Modem - 2f20 HSF 56k Data/Fax Modem - 14f1 200c Soft Data Fax Modem with SmartCP - 14f1 200f Dimension 3000 - 2f30 SoftV92 SpeakerPhone SoftRing Modem with SmartSP - 14f1 2014 Devolo MikroLink 56K Modem PCI - 2f50 Conexant SoftK56 Data/Fax Modem - 5045 CX20549 (Venice) - 5047 High Definition Audio [Waikiki] - 5051 High Definition Audio (HERMOSA) - 5b7a CX23418 Single-Chip MPEG-2 Encoder with Integrated Analog Video/Broadcast Audio Decoder - 0070 7444 WinTV HVR-1600 - 8234 RS8234 ATM SAR Controller [ServiceSAR Plus] - 8800 CX23880/1/2/3 PCI Video and Audio Decoder - 0070 2801 Hauppauge WinTV 28xxx (Roslyn) models - 0070 3401 Hauppauge WinTV 34xxx models - 0070 6902 WinTV HVR-4000-HD - 0070 7801 WinTV HVR-1800 MCE - 0070 9001 Nova-T DVB-T - 0070 9200 Nova-SE2 DVB-S - 0070 9202 Nova-S-Plus DVB-S - 0070 9402 WinTV-HVR1100 DVB-T/Hybrid - 0070 9600 WinTV 88x Video - 0070 9802 WinTV-HVR1100 DVB-T/Hybrid (Low Profile) - 1002 00f8 ATI TV Wonder Pro - 1002 a101 HDTV Wonder - 1043 4823 ASUS PVR-416 - 107d 6611 Winfast TV 2000XP Expert - 107d 6613 Leadtek Winfast 2000XP Expert - 107d 6620 Leadtek Winfast DV2000 - 107d 663c Leadtek PVR 2000 - 107d 665f WinFast DTV1000-T - 10fc d003 IODATA GV-VCP3/PCI - 10fc d035 IODATA GV/BCTV7E - 1421 0334 Instant TV DVB-T PCI - 1461 000a AVerTV 303 (M126) - 1461 000b AverTV Studio 303 (M126) - 1461 8011 UltraTV Media Center PCI 550 - 1462 8606 MSI TV-@nywhere Master - 14c7 0107 GDI Black Gold - 14f1 0187 Conexant DVB-T reference design - 14f1 0342 Digital-Logic MICROSPACE Entertainment Center (MEC) - 153b 1166 Cinergy 1400 DVB-T - 1540 2580 Provideo PV259 - 1554 4811 PixelView - 1554 4813 Club 3D ZAP1000 MCE Edition - 17de 08a1 KWorld/VStream XPert DVB-T with cx22702 - 17de 08a6 KWorld/VStream XPert DVB-T - 17de 08b2 KWorld DVB-S 100 - 17de a8a6 digitalnow DNTV Live! DVB-T - 1822 0025 digitalnow DNTV Live! DVB-T Pro - 185b e000 VideoMate X500 - 18ac d500 FusionHDTV 5 Gold - 18ac d810 FusionHDTV 3 Gold-Q - 18ac d820 FusionHDTV 3 Gold-T - 18ac db00 FusionHDTV DVB-T1 - 18ac db11 FusionHDTV DVB-T Plus - 18ac db50 FusionHDTV DVB-T Dual Digital - 7063 3000 pcHDTV HD3000 HDTV - 7063 5500 pcHDTV HD-5500 - 8801 CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port] - 0070 2801 Hauppauge WinTV 28xxx (Roslyn) models - 185b e000 VideoMate X500 - 7063 5500 pcHDTV HD-5500 - 8802 CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] - 0070 2801 Hauppauge WinTV 28xxx (Roslyn) models - 0070 6902 WinTV HVR-4000-HD - 0070 9002 Nova-T DVB-T Model 909 - 0070 9402 WinTV-HVR1100 DVB-T/Hybrid - 0070 9600 WinTV 88x MPEG Encoder - 1043 4823 ASUS PVR-416 - 107d 663c Leadtek PVR 2000 - 107d 665f WinFast DTV1000-T - 14f1 0187 Conexant DVB-T reference design - 17de 08a1 XPert DVB-T PCI BDA DVBT 23880 Transport Stream Capture - 17de 08a6 KWorld/VStream XPert DVB-T - 18ac d500 DViCO FusionHDTV5 Gold - 18ac d810 DViCO FusionHDTV3 Gold-Q - 18ac d820 DViCO FusionHDTV3 Gold-T - 18ac db00 DVICO FusionHDTV DVB-T1 - 18ac db10 DVICO FusionHDTV DVB-T Plus - 7063 3000 pcHDTV HD3000 HDTV - 7063 5500 pcHDTV HD-5500 - 8804 CX23880/1/2/3 PCI Video and Audio Decoder [IR Port] - 0070 6902 WinTV HVR-4000-HD - 0070 9002 Nova-T DVB-T Model 909 - 0070 9402 WinTV-HVR1100 DVB-T/Hybrid - 7063 5500 pcHDTV HD-5500 - 8811 CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port] - 0070 3401 Hauppauge WinTV 34xxx models - 0070 6902 WinTV HVR-4000-HD - 0070 9402 WinTV-HVR1100 DVB-T/Hybrid - 0070 9600 WinTV 88x Audio - 1462 8606 MSI TV-@nywhere Master - 18ac d500 DViCO FusionHDTV5 Gold - 18ac d810 DViCO FusionHDTV3 Gold-Q - 18ac d820 DViCO FusionHDTV3 Gold-T - 18ac db00 DVICO FusionHDTV DVB-T1 - 8852 CX23885 PCI Video and Audio Decoder - 0070 8010 Hauppauge WinTV HVR-1400 ExpressCard - 1461 c039 AVerTV Hybrid Express (A577) - 18ac db78 FusionHDTV DVB-T Dual Express - 8880 Hauppauge Inc. HDPVR-1250 model 1196 -14f2 MOBILITY Electronics - 0120 EV1000 bridge - 0121 EV1000 Parallel port - 0122 EV1000 Serial port - 0123 EV1000 Keyboard controller - 0124 EV1000 Mouse controller -14f3 BroadLogic - 2030 2030 DVB-S Satellite Receiver - 2035 2035 DVB-S Satellite Receiver - 2050 2050 DVB-T Terrestrial (Cable) Receiver - 2060 2060 ATSC Terrestrial (Cable) Receiver -14f4 TOKYO Electronic Industry CO Ltd -14f5 SOPAC Ltd -14f6 COYOTE Technologies LLC -14f7 WOLF Technology Inc -14f8 AUDIOCODES Inc - 2077 TP-240 dual span E1 VoIP PCI card -14f9 AG COMMUNICATIONS -14fa WANDEL & GOLTERMANN -14fb TRANSAS MARINE (UK) Ltd -14fc Quadrics Ltd - 0000 QsNet Elan3 Network Adapter - 0001 QsNetII Elan4 Network Adapter - 0002 QsNetIII Elan5 Network Adapter -14fd JAPAN Computer Industry Inc -14fe ARCHTEK TELECOM Corp -14ff TWINHEAD INTERNATIONAL Corp -1500 DELTA Electronics, Inc - 1360 RTL81xx RealTek Ethernet -1501 BANKSOFT CANADA Ltd -1502 MITSUBISHI ELECTRIC LOGISTICS SUPPORT Co Ltd -1503 KAWASAKI LSI USA Inc -1504 KAISER Electronics -1505 ITA INGENIEURBURO FUR TESTAUFGABEN GmbH -1506 CHAMELEON Systems Inc -# Should be HTEC Ltd, but there are no known HTEC chips and 1507 is already used by mistake by Motorola (see vendor ID 1057). -1507 Motorola ?? / HTEC - 0001 MPC105 [Eagle] - 0002 MPC106 [Grackle] - 0003 MPC8240 [Kahlua] - 0100 MC145575 [HFC-PCI] - 0431 KTI829c 100VG - 4801 Raven - 4802 Falcon - 4803 Hawk - 4806 CPX8216 -1508 HONDA CONNECTORS/MHOTRONICS Inc -1509 FIRST INTERNATIONAL Computer Inc -150a FORVUS RESEARCH Inc -150b YAMASHITA Systems Corp -150c KYOPAL CO Ltd -150d WARPSPPED Inc -150e C-PORT Corp -150f INTEC GmbH -1510 BEHAVIOR TECH Computer Corp -1511 CENTILLIUM Technology Corp -1512 ROSUN Technologies Inc -1513 Raychem -1514 TFL LAN Inc -1515 Advent design -1516 MYSON Technology Inc - 0800 MTD-8xx 100/10M Ethernet PCI Adapter - 0803 SURECOM EP-320X-S 100/10M Ethernet PCI Adapter - 1320 10bd SURECOM EP-320X-S 100/10M Ethernet PCI Adapter - 0891 MTD-8xx 100/10M Ethernet PCI Adapter -1517 ECHOTEK Corp -# nee PEP MODULAR Computers GmbH -1518 Kontron Modular Computers GmbH -1519 TELEFON AKTIEBOLAGET LM Ericsson -151a Globetek - 1002 PCI-1002 - 1004 PCI-1004 - 1008 PCI-1008 -151b COMBOX Ltd -151c DIGITAL AUDIO LABS Inc - 0003 Prodif T 2496 - 4000 Prodif 88 -151d Fujitsu Computer Products Of America -151e MATRIX Corp -151f TOPIC SEMICONDUCTOR Corp - 0000 TP560 Data/Fax/Voice 56k modem -1520 CHAPLET System Inc -1521 BELL Corp -1522 MainPine Ltd - 0100 PCI <-> IOBus Bridge - 1522 0200 RockForceDUO 2 Port V.92/V.44 Data/Fax/Voice Modem - 1522 0300 RockForceQUATRO 4 Port V.92/V.44 Data/Fax/Voice Modem - 1522 0400 RockForceDUO+ 2 Port V.92/V.44 Data/Fax/Voice Modem - 1522 0500 RockForceQUATRO+ 4 Port V.92/V.44 Data/Fax/Voice Modem - 1522 0600 RockForce+ 2 Port V.90 Data/Fax/Voice Modem - 1522 0700 RockForce+ 4 Port V.90 Data/Fax/Voice Modem - 1522 0800 RockForceOCTO+ 8 Port V.92/V.44 Data/Fax/Voice Modem - 1522 0c00 RockForceDUO+ 2 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem - 1522 0d00 RockForceQUATRO+ 4 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem - 1522 1d00 RockForceOCTO+ 8 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem - 1522 2000 RockForceD1 1 Port V.90 Data Modem - 1522 2100 RockForceF1 1 Port V.34 Super-G3 Fax Modem - 1522 2200 RockForceD2 2 Port V.90 Data Modem - 1522 2300 RockForceF2 2 Port V.34 Super-G3 Fax Modem - 1522 2400 RockForceD4 4 Port V.90 Data Modem - 1522 2500 RockForceF4 4 Port V.34 Super-G3 Fax Modem - 1522 2600 RockForceD8 8 Port V.90 Data Modem - 1522 2700 RockForceF8 8 Port V.34 Super-G3 Fax Modem - 1522 3000 IQ Express D1 - 1 Port V.92 Data Modem - 1522 3100 IQ Express F1 - 1 Port V.34 Super-G3 Fax Modem - 1522 3200 IQ Express D2 - 2 Port V.92 Data Modem - 1522 3300 IQ Express F2 - 2 Port V.34 Super-G3 Fax Modem - 1522 3400 IQ Express D4 - 4 Port V.92 Data Modem - 1522 3500 IQ Express F4 - 4 Port V.34 Super-G3 Fax Modem - 1522 3c00 IQ Express D8 - 8 Port V.92 Data Modem - 1522 3d00 IQ Express F8 - 8 Port V.34 Super-G3 Fax Modem - 4000 PCI Express UART - 1522 4001 IQ Express 1-port V.34 Super-G3 Fax - 1522 4002 IQ Express 2-port V.34 Super-G3 Fax - 1522 4004 IQ Express 4-port V.34 Super-G3 Fax - 1522 4008 IQ Express 8-port V.34 Super-G3 Fax - 1522 4100 IQ Express SideBand -1523 MUSIC Semiconductors -1524 ENE Technology Inc - 0510 CB710 Memory Card Reader Controller - 103c 006a NX9500 - 0520 FLASH memory: ENE Technology Inc: - 0530 ENE PCI Memory Stick Card Reader Controller - 0550 ENE PCI Secure Digital Card Reader Controller - 0551 SD/MMC Card Reader Controller - 0610 PCI Smart Card Reader Controller - 0720 Memory Stick Card Reader Controller - 0730 ENE PCI Memory Stick Card Reader Controller - 0750 ENE PCI SmartMedia / xD Card Reader Controller - 0751 ENE PCI Secure Digital / MMC Card Reader Controller - 1211 CB1211 Cardbus Controller - 1225 CB1225 Cardbus Controller - 1410 CB1410 Cardbus Controller - 1025 003c CL50 motherboard - 1025 005a TravelMate 290 - 1411 CB-710/2/4 Cardbus Controller - 103c 006a NX9500 - 1412 CB-712/4 Cardbus Controller - 1420 CB1420 Cardbus Controller - 1421 CB-720/2/4 Cardbus Controller - 1422 CB-722/4 Cardbus Controller -1525 IMPACT Technologies -1526 ISS, Inc -1527 SOLECTRON -1528 ACKSYS -1529 AMERICAN MICROSystems Inc -152a QUICKTURN DESIGN Systems -152b FLYTECH Technology CO Ltd -152c MACRAIGOR Systems LLC -152d QUANTA Computer Inc -152e MELEC Inc -152f PHILIPS - CRYPTO -1530 ACQIS Technology Inc -1531 CHRYON Corp -1532 ECHELON Corp - 0020 LonWorks PCLTA-20 PCI LonTalk Adapter -1533 BALTIMORE -1534 ROAD Corp -1535 EVERGREEN Technologies Inc -1536 ACTIS Computer -1537 DATALEX COMMUNCATIONS -1538 ARALION Inc - 0303 ARS106S Ultra ATA 133/100/66 Host Controller -1539 ATELIER INFORMATIQUES et ELECTRONIQUE ETUDES S.A. -153a ONO SOKKI -153b TERRATEC Electronic GmbH - 1144 Aureon 5.1 -# Terratec seems to use several IDs for the same card. - 1147 Aureon 5.1 Sky - 1158 Philips Semiconductors SAA7134 (rev 01) [Terratec Cinergy 600 TV] -153c ANTAL Electronic -153d FILANET Corp -153e TECHWELL Inc -153f MIPS Technologies, Inc. - 0001 SOC-it 101 System Controller -1540 PROVIDEO MULTIMEDIA Co Ltd -1541 MACHONE Communications -1542 Concurrent Computer Corporation - 9260 RCIM-II Real-Time Clock & Interrupt Module -1543 SILICON Laboratories - 3052 Intel 537 [Winmodem] - 3155 Motorola SM56 Speakerphone Modem - 4c22 Si3036 MC'97 DAA -1544 DCM DATA Systems -1545 VISIONTEK -1546 IOI Technology Corp -1547 MITUTOYO Corp -1548 JET PROPULSION Laboratory -1549 INTERCONNECT Systems Solutions -154a MAX Technologies Inc -154b COMPUTEX Co Ltd -154c VISUAL Technology Inc -154d PAN INTERNATIONAL Industrial Corp -154e SERVOTEST Ltd -154f STRATABEAM Technology -1550 OPEN NETWORK Co Ltd -1551 SMART Electronic DEVELOPMENT GmBH -1552 RACAL AIRTECH Ltd -1553 CHICONY Electronics Co Ltd -1554 PROLINK Microsystems Corp -1555 GESYTEC GmBH -1556 PLD APPLICATIONS -1557 MEDIASTAR Co Ltd -1558 CLEVO/KAPOK Computer -1559 SI LOGIC Ltd -155a INNOMEDIA Inc -155b PROTAC INTERNATIONAL Corp -155c Cemax-Icon Inc -155d Mac System Co Ltd -155e LP Elektronik GmbH -155f Perle Systems Ltd -1560 Terayon Communications Systems -1561 Viewgraphics Inc -1562 Symbol Technologies -1563 A-Trend Technology Co Ltd -1564 Yamakatsu Electronics Industry Co Ltd -1565 Biostar Microtech Int'l Corp -1566 Ardent Technologies Inc -1567 Jungsoft -1568 DDK Electronics Inc -1569 Palit Microsystems Inc. -156a Avtec Systems -156b 2wire Inc -156c Vidac Electronics GmbH -156d Alpha-Top Corp -156e Alfa Inc -156f M-Systems Flash Disk Pioneers Ltd -1570 Lecroy Corp -1571 Contemporary Controls - a001 CCSI PCI20-485 ARCnet - a002 CCSI PCI20-485D ARCnet - a003 CCSI PCI20-485X ARCnet - a004 CCSI PCI20-CXB ARCnet - a005 CCSI PCI20-CXS ARCnet - a006 CCSI PCI20-FOG-SMA ARCnet - a007 CCSI PCI20-FOG-ST ARCnet - a008 CCSI PCI20-TB5 ARCnet - a009 CCSI PCI20-5-485 5Mbit ARCnet - a00a CCSI PCI20-5-485D 5Mbit ARCnet - a00b CCSI PCI20-5-485X 5Mbit ARCnet - a00c CCSI PCI20-5-FOG-ST 5Mbit ARCnet - a00d CCSI PCI20-5-FOG-SMA 5Mbit ARCnet - a201 CCSI PCI22-485 10Mbit ARCnet - a202 CCSI PCI22-485D 10Mbit ARCnet - a203 CCSI PCI22-485X 10Mbit ARCnet - a204 CCSI PCI22-CHB 10Mbit ARCnet - a205 CCSI PCI22-FOG_ST 10Mbit ARCnet - a206 CCSI PCI22-THB 10Mbit ARCnet -1572 Otis Elevator Company -1573 Lattice - Vantis -1574 Fairchild Semiconductor -1575 Voltaire Advanced Data Security Ltd -1576 Viewcast COM -1578 HITT - 4d34 VPMK4 [Video Processor Mk IV] - 5615 VPMK3 [Video Processor Mk III] -1579 Dual Technology Corp -157a Japan Elecronics Ind Inc -157b Star Multimedia Corp -157c Eurosoft (UK) - 8001 Fix2000 PCI Y2K Compliance Card -157d Gemflex Networks -157e Transition Networks -157f PX Instruments Technology Ltd -1580 Primex Aerospace Co -1581 SEH Computertechnik GmbH -1582 Cytec Corp -1583 Inet Technologies Inc -1584 Uniwill Computer Corp -1585 Logitron -1586 Lancast Inc -1587 Konica Corp -1588 Solidum Systems Corp -1589 Atlantek Microsystems Pty Ltd - 0008 Leutron Vision PicPortExpress CL - 0009 Leutron Vision PicPortExpress CL Stereo -158a Digalog Systems Inc -158b Allied Data Technologies -158c Hitachi Semiconductor & Devices Sales Co Ltd -158d Point Multimedia Systems -158e Lara Technology Inc -158f Ditect Coop -1590 3PAR Inc. - 0001 Eagle Cluster Manager - 0002 Osprey Cluster Manager - 0003 Harrier Cluster Manager - a01d FC044X Fibre Channel HBA -1591 ARN -1592 Syba Tech Ltd - 0781 Multi-IO Card - 0782 Parallel Port Card 2xEPP - 0783 Multi-IO Card - 0785 Multi-IO Card - 0786 Multi-IO Card - 0787 Multi-IO Card - 0788 Multi-IO Card - 078a Multi-IO Card -1593 Bops Inc -1594 Netgame Ltd -1595 Diva Systems Corp -1596 Folsom Research Inc -1597 Memec Design Services -1598 Granite Microsystems -1599 Delta Electronics Inc -159a General Instrument -159b Faraday Technology Corp -159c Stratus Computer Systems -159d Ningbo Harrison Electronics Co Ltd -159e A-Max Technology Co Ltd -159f Galea Network Security -15a0 Compumaster SRL -15a1 Geocast Network Systems -15a2 Catalyst Enterprises Inc - 0001 TA700 PCI Bus Analyzer/Exerciser -15a3 Italtel -15a4 X-Net OY -15a5 Toyota Macs Inc -15a6 Sunlight Ultrasound Technologies Ltd -15a7 SSE Telecom Inc -15a8 Shanghai Communications Technologies Center -15aa Moreton Bay -15ab Bluesteel Networks Inc -15ac North Atlantic Instruments -15ad VMware - 0405 SVGA II Adapter - 0710 SVGA Adapter - 0720 VMXNET Ethernet Controller - 0740 Virtual Machine Communication Interface - 0770 USB2 EHCI Controller - 0790 PCI bridge - 07a0 PCI Express Root Port - 07b0 VMXNET3 Ethernet Controller - 07c0 PVSCSI SCSI Controller - 0801 Virtual Machine Interface - 15ad 0800 Hypervisor ROM Interface -15ae Amersham Pharmacia Biotech -15b0 Zoltrix International Ltd -15b1 Source Technology Inc -15b2 Mosaid Technologies Inc -15b3 Mellanox Technologies - 0191 MT25408 [ConnectX IB SDR Flash Recovery] - 5274 MT21108 InfiniBridge - 5a44 MT23108 InfiniHost - 5a45 MT23108 [Infinihost HCA Flash Recovery] - 5a46 MT23108 PCI Bridge - 5e8c MT24204 [InfiniHost III Lx HCA] - 5e8d MT25204 [InfiniHost III Lx HCA Flash Recovery] - 6274 MT25204 [InfiniHost III Lx HCA] - 6278 MT25208 InfiniHost III Ex (Tavor compatibility mode) - 6279 MT25208 [InfiniHost III Ex HCA Flash Recovery] - 6282 MT25208 [InfiniHost III Ex] - 6340 MT25408 [ConnectX VPI - IB SDR / 10GigE] - 634a MT25418 [ConnectX VPI PCIe 2.0 2.5GT/s - IB DDR / 10GigE] - 6368 MT25448 [ConnectX EN 10GigE, PCIe 2.0 2.5GT/s] - 6372 MT25408 [ConnectX EN 10GigE 10GBaseT, PCIe 2.0 2.5GT/s] - 6732 MT26418 [ConnectX VPI PCIe 2.0 5GT/s - IB DDR / 10GigE] - 673c MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE] - 6746 MT25408 [ConnectX EN 40GigE PCIe 2.0 5GT/s] - 6750 MT26448 [ConnectX EN 10GigE, PCIe 2.0 5GT/s] - 675a MT25408 [ConnectX EN 10GigE 10GBaseT, PCIe Gen2 5GT/s] - 6764 MT26468 [ConnectX EN 10GigE, PCIe 2.0 5GT/s] -15b4 CCI/TRIAD -15b5 Cimetrics Inc -15b6 Texas Memory Systems Inc - 0001 XP15 DSP Accelerator - 0002 XP30 DSP Accelerator - 0003 XP00 Data Acquisition Device - 0004 XP35 DSP Accelerator - 0007 XP100 DSP Accelerator [XP100-T0] - 0008 XP100 DSP Accelerator [XP100-T1] - 0009 XP100 DSP Accelerator [XP100-E0] - 000a XP100 DSP Accelerator [XP100-E1] - 000e XP100 DSP Accelerator [XP100-0] - 000f XP100 DSP Accelerator [XP100-1] - 0010 XP100 DSP Accelerator [XP100-P0] - 0011 XP100 DSP Accelerator [XP100-P1] - 0012 XP100 DSP Accelerator [XP100-P2] - 0013 XP100 DSP Accelerator [XP100-P3] - 0014 RamSan Flash SSD - 0015 ZBox -15b7 Sandisk Corp -15b8 ADDI-DATA GmbH - 1003 APCI1032 SP controller (32 digi inputs w/ opto coupler) - 1005 APCI2200 SP controller (8/16 digi outputs (relay)) - 100a APCI1696 SP controller (96 TTL I/Os) - 3001 APCI3501 SP controller (analog output board) - 300f APCI3600 Noise and vibration measurement board - 7001 APCI7420 2-port Serial Controller - 7002 APCI7300 Serial Controller -15b9 Maestro Digital Communications -15ba Impacct Technology Corp -15bb Portwell Inc -15bc Agilent Technologies - 0103 QX4 PCI Express quad 4-gigabit Fibre Channel controller - 0105 Celerity FC-42XS Fibre Channel Adapter - 117c 0022 Celerity FC-42XS Fibre Channel Adapter - 1100 E8001-66442 PCI Express CIC - 2922 64 Bit, 133MHz PCI-X Exerciser & Protocol Checker - 2928 64 Bit, 66MHz PCI Exerciser & Analyzer - 2929 64 Bit, 133MHz PCI-X Analyzer & Exerciser -15bd DFI Inc -15be Sola Electronics -15bf High Tech Computer Corp (HTC) -15c0 BVM Ltd -15c1 Quantel -15c2 Newer Technology Inc -15c3 Taiwan Mycomp Co Ltd -15c4 EVSX Inc -15c5 Procomp Informatics Ltd - 8010 1394b - 1394 Firewire 3-Port Host Adapter Card -15c6 Technical University of Budapest -15c7 Tateyama System Laboratory Co Ltd - 0349 Tateyama C-PCI PLC/NC card Rev.01A -15c8 Penta Media Co Ltd -15c9 Serome Technology Inc -15ca Bitboys OY -15cb AG Electronics Ltd -15cc Hotrail Inc -15cd Dreamtech Co Ltd -15ce Genrad Inc -15cf Hilscher GmbH -15d1 Infineon Technologies AG -15d2 FIC (First International Computer Inc) -15d3 NDS Technologies Israel Ltd -15d4 Iwill Corp -15d5 Tatung Co -15d6 Entridia Corp -15d7 Rockwell-Collins Inc -15d8 Cybernetics Technology Co Ltd -15d9 Super Micro Computer Inc -15da Cyberfirm Inc -15db Applied Computing Systems Inc -15dc Litronic Inc - 0001 Argus 300 PCI Cryptography Module -15dd Sigmatel Inc -15de Malleable Technologies Inc -15df Infinilink Corp -15e0 Cacheflow Inc -15e1 Voice Technologies Group Inc -15e2 Quicknet Technologies Inc - 0500 PhoneJack-PCI -15e3 Networth Technologies Inc -15e4 VSN Systemen BV -15e5 Valley technologies Inc -15e6 Agere Inc -15e7 Get Engineering Corp -15e8 National Datacomm Corp - 0130 Wireless PCI Card - 0131 NCP130A2 Wireless NIC -15e9 Pacific Digital Corp - 1841 ADMA-100 DiscStaQ ATA Controller -15ea Tokyo Denshi Sekei K.K. -15eb DResearch Digital Media Systems GmbH -15ec Beckhoff GmbH - 3101 FC3101 Profibus DP 1 Channel PCI - 5102 FC5102 -15ed Macrolink Inc -15ee In Win Development Inc -15ef Intelligent Paradigm Inc -15f0 B-Tree Systems Inc -15f1 Times N Systems Inc -15f2 Diagnostic Instruments Inc -15f3 Digitmedia Corp -15f4 Valuesoft -15f5 Power Micro Research -15f6 Extreme Packet Device Inc -15f7 Banctec -15f8 Koga Electronics Co -15f9 Zenith Electronics Corp -15fa J.P. Axzam Corp -15fb Zilog Inc -15fc Techsan Electronics Co Ltd -15fd N-CUBED.NET -15fe Kinpo Electronics Inc -15ff Fastpoint Technologies Inc -1600 Northrop Grumman - Canada Ltd -1601 Tenta Technology -1602 Prosys-tec Inc -1603 Nokia Wireless Communications -1604 Central System Research Co Ltd -1605 Pairgain Technologies -1606 Europop AG -1607 Lava Semiconductor Manufacturing Inc -1608 Automated Wagering International -1609 Scimetric Instruments Inc -1612 Telesynergy Research Inc. -1619 FarSite Communications Ltd - 0400 FarSync T2P (2 port X.21/V.35/V.24) - 0440 FarSync T4P (4 port X.21/V.35/V.24) - 0610 FarSync T1U (1 port X.21/V.35/V.24) - 0620 FarSync T2U (2 port X.21/V.35/V.24) - 0640 FarSync T4U (4 port X.21/V.35/V.24) - 1610 FarSync TE1 (T1,E1) - 2610 FarSync DSL-S1 (SHDSL) - 3640 FarSync T4E (4-port X.21/V.35/V.24) - 4620 FarSync T2Ue PCI Express (2-port X.21/V.35/V.24) - 4640 FarSync T4Ue PCI Express (4-port X.21/V.35/V.24) -161f Rioworks -1626 TDK Semiconductor Corp. - 8410 RTL81xx Fast Ethernet -1629 Kongsberg Spacetec AS - 1003 Format synchronizer v3.0 - 1006 Format synchronizer, model 10500 - 1007 Format synchronizer, model 21000 - 2002 Fast Universal Data Output -1631 Packard Bell B.V. -# This seems to occur on their 802.11b Wireless card WMP-11 -1637 Linksys - 3874 Linksys 802.11b WMP11 PCI Wireless card -1638 Standard Microsystems Corp [SMC] - 1100 SMC2602W EZConnect / Addtron AWA-100 / Eumitcom PCI WL11000 -163c Smart Link Ltd. - 3052 SmartLink SmartPCI562 56K Modem - 5449 SmartPCI561 Modem -1641 MKNet Corp. -1657 Brocade Communications Systems, Inc. - 0013 425 4Gb/825 8Gb PCIe Dual port FC HBA - 0014 BR-1020 FC/FCOE 10GB Eth / FC over Eth - 0017 415 4Gb/815 8Gb PCIe FC HBA -# Same Device_ID used for 410 (1port) and 420 (2 port) HBAs. - 0646 Brocade 400 4Gb PCIe FC HBA -165a Epix Inc - c100 PIXCI(R) CL1 Camera Link Video Capture Board [custom QL5232] - d200 PIXCI(R) D2X Digital Video Capture Board [custom QL5232] - d300 PIXCI(R) D3X Digital Video Capture Board [custom QL5232] -165d Hsing Tech. Enterprise Co., Ltd. -165f Linux Media Labs, LLC - 1020 LMLM4 MPEG-4 encoder -1661 Worldspace Corp. -1668 Actiontec Electronics Inc - 0100 Mini-PCI bridge -# Formerly SiByte, Inc. -166d Broadcom Corporation - 0001 SiByte BCM1125/1125H/1250 System-on-a-Chip PCI - 0002 SiByte BCM1125H/1250 System-on-a-Chip HyperTransport - 0012 SiByte BCM1280/BCM1480 System-on-a-Chip PCI-X - 0014 Sibyte BCM1280/BCM1480 System-on-a-Chip HyperTransport -1677 Bernecker + Rainer - 104e 5LS172.6 B&R Dual CAN Interface Card - 12d7 5LS172.61 B&R Dual CAN Interface Card - 20ad 5ACPCI.MFIO-K01 Profibus DP / K-Feldbus / COM -1678 NetEffect - 0100 NE020 10Gb Accelerated Ethernet Adapter (iWARP RNIC) -1679 Tokyo Electron Device Ltd. - 3000 SD Standard host controller [Ellen] -167b ZyDAS Technology Corp. - 2102 ZyDAS ZD1202 - 187e 3406 ZyAIR B-122 CardBus 11Mbs Wireless LAN Card - 2116 ZD1212B Wireless Adapter -167d Samsung Electro-Mechanics Co., Ltd. - a000 IPW2200 miniPCI Wireless -167e ONNTO Corp. -1681 Hercules - 0010 Hercules 3d Prophet II Ultra 64MB (350 MHz NV15BR core) -1682 XFX Pine Group Inc. -1688 CastleNet Technology Inc. - 1170 WLAN 802.11b card -168c Atheros Communications Inc. - 0007 AR5000 802.11a Wireless Adapter - 0011 AR5210 802.11a NIC - 0012 AR5211 802.11ab NIC - 126c 8031 2201 Mobile Adapter - 0013 Atheros AR5001X+ Wireless Network Adapter - 0e11 00e5 NC6000 laptop - 1113 d301 Philips CPWNA100 Wireless CardBus adapter - 1113 ee23 SMCWPCIT-G 108Mbps Wireless PCI adapter - 1186 3202 D-link DWL-G650 (Rev B3,B5) Wireless cardbus adapter - 1186 3203 DWL-G520 Wireless PCI Adapter - 1186 3a12 D-Link AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C) - 1186 3a13 D-Link AirPlus DWL-G520 Wireless PCI Adapter(rev.B) - 1186 3a14 D-Link AirPremier DWL-AG530 Wireless PCI Adapter - 1186 3a17 D-Link AirPremier DWL-G680 Wireless Cardbus Adapter - 1186 3a18 D-Link AirPremier DWL-G550 Wireless PCI Adapter - 1186 3a63 D-Link AirPremier DWL-AG660 Wireless Cardbus Adapter - 1186 3a93 Conceptronic C54I Wireless 801.11g PCI card - 1186 3a94 C54C Wireless 801.11g cardbus - 1186 3ab0 Allnet ALL0281 Wireless PCI Card - 1385 4d00 Netgear WG311T Wireless PCI Adapter - 1458 e911 Gigabyte GN-WIAG02 - 1468 0408 ThinkPad 11b/g Wireless LAN Mini PCI Adapter - 14b7 0a60 8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter - 1668 1026 IBM HighRate 11 a/b/g Wireless CardBus Adapter - 168c 0013 AirPlus XtremeG DWL-G650 Wireless PCMCIA Adapter - 168c 1025 DWL-G650B2 Wireless CardBus Adapter - 168c 1027 Engenius NL-3054CB ARIES b/g CardBus Adapter - 168c 1042 Ubiquiti Networks SuperRange a/b/g Cardbus Adapter - 168c 1051 EZ Connect g 802.11g 108Mbps Wireless PCI Adapter - 168c 2026 Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter - 168c 2041 Engenius 5354MP Plus ARIES2 b/g MiniPCI Adapter - 168c 2042 Engenius 5354MP Plus ARIES2 a/b/g MiniPCI Adapter - 168c 2051 TRENDnet TEW-443PI Wireless PCI Adapter - 16ab 7302 Trust Speedshare Turbo Pro Wireless PCI Adapter - 1737 0017 WPC55AG - 1737 0026 WMP55AG v1.1 - 17cf 0042 Z-COMAX Highpower XG-622H (400mw) 802.11b/g mini-PCI Adapter - 185f 1012 CM9 Wireless a/b/g MiniPCI Adapter - 185f 2012 Wistron NeWeb WLAN a+b+g model CB9 -# the name AR5005G is used for the reference design using AR2413 - 001a AR2413 802.11bg NIC - 1052 168c Sweex Wireless Lan PC Card 54Mbps - 1113 ee20 SMC Wireless CardBus Adapter 802.11g (SMCWCB-G EU) - 1113 ee24 SMC Wireless PCI Card WPCI-G - 1186 3a15 D-Link AirPlus G DWL-G630 Wireless Cardbus Adapter(rev.D) - 1186 3a16 D-Link AirPlus G DWL-G510 Wireless PCI Adapter(rev.B) - 1186 3a1d WDA-1320 Desktop Adapter - 1186 3a23 D-Link AirPlus G DWL-G520+A Wireless PCI Adapter - 1186 3a24 D-Link AirPlus G DWL-G650+A Wireless Cardbus Adapter - 1186 3b08 AirPlus G DWL-G630 - 168c 001a Belkin FD7000 - 168c 1052 TP-Link TL-WN510G Wireless CardBus Adapter - 168c 2052 Compex Wireless 802.11 b/g MiniPCI Adapter, Rev A1 [WLM54G] - 16ec 0122 Wireless PCI Adapter Model 5418 -# the name AR5006X is used for the reference design using AR5413 - 001b AR5413 802.11abg NIC - 1186 3a19 D-Link AirPremier AG DWL-AG660 Wireless Cardbus Adapter - 1186 3a22 D-Link AirPremier AG DWL-AG530 Wireless PCI Adapter - 1458 e901 GN-WI01HT Wireless a/b/g MiniPCI Adapter - 168c 001b Wireless LAN PCI LiteOn - 168c 2062 EnGenius EMP-8602 (400mw) or Compex WLM54AG (SuperAG) - 168c 2063 EnGenius EMP-8602 (400mw) or Compex WLM54AG - 185f 1600 DCMA-82 High Power WLAN 802.11a/b/g mini-PCI Module (Super A/G, eXtended Range, 400mW) - a727 6804 Wireless 11a/b/g PC Card with XJACK(r) Antenna - 001c AR5001 Wireless Network Adapter - 1468 0428 AR5BXB63 802.11bg NIC - 1468 042a AR5007EG 802.11bg NIC - 147b 1033 AirPace Wi-Fi - 168c 001c AR242x 802.11abg NIC (PCI Express) - 168c 3061 AR5006EGS 802.11bg NIC (2.4GHz, PCI Express) - 168c 3062 AR5006EXS 802.11abg NIC (2.4/5.0GHz, PCI Express) - 168c 3063 AR5006EX 802.11abg NIC (2.4/5.0GHz, PCI Express) - 168c 3065 AR5006EG 802.11bg NIC (2.4GHz, PCI Express) - 168c 3067 AR242x 802.11abg Wireless PCI Express Adapter (rev 01) - 1a3b 1026 AR5007EG 802.11bg Wi-Fi mini PCI express card - 001d AR5007G Wireless Network Adapter -# the name AR5005VL is used for some AR5513 based designs - 0020 AR5513 802.11abg Wireless NIC - 0023 AR5008 Wireless Network Adapter - 0024 AR5008 Wireless Network Adapter - 0027 AR9160 802.11abgn Wireless PCI Adapter - 0029 AR922X Wireless Network Adapter - 002a AR928X Wireless Network Adapter (PCI-Express) - 002b AR9285 Wireless Network Adapter (PCI-Express) - 0033 11a/b/g/n Wireless LAN Mini-PCI Express Adapter - 0207 AR5210 - 1014 AR5212 802.11abg NIC - 1014 058a ThinkPad 11a/b/g Wireless LAN Mini Express Adapter (AR5BXB6) - 3b08 D-Link AirPlus G DWL-G630 - ff19 AR5006X Wireless Network Adapter - ff1c AR5008 Wireless Network Adapter - ff1d AR5008 Wireless Network Adapter -1695 EPoX Computer Co., Ltd. -169c Netcell Corporation - 0044 Revolution Storage Processing Card -# The right ID is 196d, but they got it nibble-swapped in 2202. -169d Club-3D VB (Wrong ID) - 3306 ZAP TV 2202 -16a5 Tekram Technology Co.,Ltd. -16ab Global Sun Technology Inc - 1100 GL24110P - 1101 PLX9052 PCMCIA-to-PCI Wireless LAN - 1102 PCMCIA-to-PCI Wireless Network Bridge - 8501 WL-8305 Wireless LAN PCI Adapter -16ae SafeNet Inc - 0001 SafeXcel 1140 - 000a SafeXcel 1841 - 1141 SafeXcel 1141 - 1841 SafeXcel 1842 -16af SparkLAN Communications, Inc. -16b4 Aspex Semiconductor Ltd -16b8 Sonnet Technologies, Inc. -16be Creatix Polymedia GmbH -16c6 Micrel-Kendin - 8695 Centaur KS8695 ARM processor - 8842 KSZ8842-PMQL 2-Port Ethernet Switch -16c8 Octasic Inc. -16c9 EONIC B.V. The Netherlands -16ca CENATEK Inc - 0001 Rocket Drive DL -16cd Densitron Technologies -16ce Roland Corp. -16d5 Acromag, Inc. - 0504 PMC-DX504 Reconfigurable FPGA with LVDS I/O - 0520 PMC520 Serial Communication, 232 Octal - 0521 PMC521 Serial Communication, 422/485 Octal - 1020 PMC-AX1020 Reconfigurable FPGA with A/D & D/A - 1065 PMC-AX1065 Reconfigurable FPGA with A/D & D/A - 2004 PMC-DX2004 Reconfigurable FPGA with LVDS I/O - 2020 PMC-AX2020 Reconfigurable FPGA with A/D & D/A - 2065 PMC-AX2065 Reconfigurable FPGA with A/D & D/A - 3020 PMC-AX3020 Reconfigurable FPGA with A/D & D/A - 3065 PMC-AX3065 Reconfigurable FPGA with A/D & D/A - 4243 PMC424, APC424, AcPC424 Digital I/O and Counter Timer Module - 4248 PMC464, APC464, AcPC464 Digital I/O and Counter Timer Module - 424b PMC-DX2002 Reconfigurable FPGA with Differential I/O - 4253 PMC-DX503 Reconfigurable FPGA with TTL and Differential I/O - 4312 PMC-CX1002 Reconfigurable Conduction-Cooled FPGA Virtex-II with Differential I/O - 4313 PMC-CX1003 Reconfigurable Conduction-Cooled FPGA Virtex-II with CMOS and Differential I/O - 4322 PMC-CX2002 Reconfigurable Conduction-Cooled FPGA Virtex-II with Differential I/O - 4323 PMC-CX2003 Reconfigurable Conduction-Cooled FPGA Virtex-II with CMOS and Differential I/O - 4350 PMC-DX501 Reconfigurable Digital I/O Module - 4353 PMC-DX2003 Reconfigurable FPGA with TTL and Differential I/O - 4357 PMC-DX502 Reconfigurable Differential I/O Module - 4457 PMC730, APC730, AcPC730 Multifunction Module - 464d PMC408 32-Channel Digital Input/Output Module - 4850 PMC220-16 12-Bit Analog Output Module - 4a42 PMC483, APC483, AcPC483 Counter Timer Module - 4a50 PMC484, APC484, AcPC484 Counter Timer Module - 4a56 PMC230 16-Bit Analog Output Module - 4b47 PMC330, APC330, AcPC330 Analog Input Module, 16-bit A/D - 4c40 PMC-LX40 Reconfigurable Virtex-4 FPGA with plug-in I/O - 4c60 PMC-LX60 Reconfigurable Virtex-4 FPGA with plug-in I/O - 4d4d PMC341, APC341, AcPC341 Analog Input Module, Simultaneous Sample & Hold - 4d4e PMC482, APC482, AcPC482 Counter Timer Board - 524d PMC-DX2001 Reconfigurable FPGA with TTL I/O - 5335 PMC-SX35 Reconfigurable Virtex-4 FPGA with plug-in I/O - 5456 PMC470 48-Channel Digital Input/Output Module - 5601 PMC-VLX85 Reconfigurable Virtex-5 FPGA with plug-in I/O - 5602 PMC-VLX110 Reconfigurable Virtex-5 FPGA with plug-in I/O - 5603 PMC-VSX95 Reconfigurable Virtex-5 FPGA with plug-in I/O - 5604 PMC-VLX155 Reconfigurable Virtex-5 FPGA with plug-in I/O - 5605 PMC-VFX70 Reconfigurable Virtex-5 FPGA with plug-in I/O - 5606 PMC-VLX155-1M Reconfigurable Virtex-5 FPGA with plug-in I/O -16da Advantech Co., Ltd. - 0011 INES GPIB-PCI -16df PIKA Technologies Inc. -16e3 European Space Agency - 1e0f LEON2FT Processor -16e5 Intellon Corp. - 6000 INT6000 Ethernet-to-Powerline Bridge [HomePlug AV] - 6300 INT6300 Ethernet-to-Powerline Bridge [HomePlug AV] -16ec U.S. Robotics - 0116 USR997902 10/100/1000 Mbps PCI Network Card - 2f00 USR5660A (USR265660A, USR5660A-BP) 56K PCI Faxmodem - 3685 Wireless Access PCI Adapter Model 022415 - 4320 USR997904 10/100/1000 64-bit NIC (Marvell Yukon) - ab06 USR997901A 10/100 Cardbus NIC -16ed Sycron N. V. - 1001 UMIO communication card -16f3 Jetway Information Co., Ltd. -16f4 Vweb Corp - 8000 VW2010 -16f6 VideoTele.com, Inc. -1702 Internet Machines Corporation (IMC) -1705 Digital First, Inc. -170b NetOctave - 0100 NSP2000-SSL crypto accelerator -170c YottaYotta Inc. -1719 EZChip Technologies -# Seems to be a 2nd ID for Vitesse Semiconductor -1725 Vitesse Semiconductor - 7174 VSC7174 PCI/PCI-X Serial ATA Host Bus Controller -172a Accelerated Encryption - 13c8 AEP SureWare Runner 1000V3 -1734 Fujitsu Technology Solutions - 1078 Amilo Pro v2010 - 1085 Celsius M450 - 1098 Amilo L 1310G -1735 Aten International Co. Ltd. -1737 Linksys - 0013 WMP54G Wireless Pci Card - 0015 WMP54GS Wireless Pci Card - 0029 WPG54G ver. 4 PCI Card - 1032 Gigabit Network Adapter - 1737 0015 EG1032 v2 Instant Gigabit Network Adapter - 1737 0024 EG1032 v3 Instant Gigabit Network Adapter - 1064 Gigabit Network Adapter - 1737 0016 EG1064 v2 Instant Gigabit Network Adapter - ab08 21x4x DEC-Tulip compatible 10/100 Ethernet - ab09 21x4x DEC-Tulip compatible 10/100 Ethernet -173b Altima (nee Broadcom) - 03e8 AC1000 Gigabit Ethernet - 03e9 AC1001 Gigabit Ethernet - 03ea AC9100 Gigabit Ethernet - 173b 0001 AC1002 - 03eb AC1003 Gigabit Ethernet -1743 Peppercon AG - 8139 ROL/F-100 Fast Ethernet Adapter with ROL -1745 ViXS Systems, Inc. - 2020 XCode II Series - 2100 XCode 2100 Series -1749 RLX Technologies -174b PC Partner Limited -174d WellX Telecom SA -175c AudioScience Inc -175e Sanera Systems, Inc. -1760 TEDIA spol. s r. o. -1771 InnoVISION Multimedia Ltd. -# nee SBS Technologies -1775 GE Fanuc Intelligent Platforms -177d Cavium Networks - 0001 Nitrox XL N1 - 0003 Nitrox XL N1 Lite - 0004 Octeon (and older) FIPS - 0005 Octeon CN38XX Network Processor Pass 3.x - 0006 RoHS - 0010 Nitrox XL NPX - 0020 Octeon CN31XX Network Processor - 0030 Octeon CN30XX Network Processor - 0040 Octeon CN58XX Network Processor - 0050 Octeon CN57XX Network Processor (CN54XX/CN55XX/CN56XX) - 0070 Octeon CN50XX Network Processor - 0080 Octeon CN52XX Network Processor -1787 Hightech Information System Ltd. -1789 Ennyah Technologies Corp. -# also used by Struck Innovative Systeme for joint developments -1796 Research Centre Juelich - 0001 SIS1100 [Gigabit link] - 0002 HOTlink - 0003 Counter Timer - 0004 CAMAC Controller - 0005 PROFIBUS - 0006 AMCC HOTlink - 000d Synchronisation Slave - 000e SIS1100-eCMC - 000f TDC (GPX) - 0010 PCIe Counter Timer - 0011 SIS1100-e single link - 0012 SIS1100-e quad link -1797 Techwell Inc. - 6801 TW6802 multimedia video card - 6802 TW6802 multimedia other device -1799 Belkin - 6001 Wireless PCI Card - F5D6001 - 6020 Wireless PCMCIA Card - F5D6020 - 6060 Wireless PDA Card - F5D6060 - 7000 Wireless PCI Card - F5D7000 - 700a Wireless PCI Card - F5D7000UK - 7010 BCM4306 802.11b/g Wireless Lan Controller F5D7010 -179a id Quantique - 0001 Quantis PCI 16Mbps -179c Data Patterns - 0557 DP-PCI-557 [PCI 1553B] - 0566 DP-PCI-566 [Intelligent PCI 1553B] - 1152 DP-cPCI-1152 (8-channel Isolated ADC Module) - 5031 DP-CPCI-5031-Synchro Module -# cPCI Carrier for Mezzanine Modules - 5112 DP-cPCI-5112 [MM-Carrier] - 5121 DP-CPCI-5121-IP Carrier - 5211 DP-CPCI-5211-IP Carrier - 5679 AGE Display Module -17a0 Genesys Logic, Inc - 7163 GL9701 PCIe to PCI Bridge - 8083 GL880 USB 1.1 UHCI controller - 8084 GL880 USB 2.0 EHCI controller -17aa Lenovo - 20b1 ThinkPad T61p -17ab Phillips Components -17af Hightech Information System Ltd. -17b3 Hawking Technologies - ab08 PN672TX 10/100 Ethernet -17b4 Indra Networks, Inc. - 0011 WebEnhance 100 GZIP Compression Card - 0012 WebEnhance 200 GZIP Compression Card - 0015 WebEnhance 300 GZIP Compression Card - 0016 StorCompress 300 GZIP Compression Card - 0017 StorSecure 300 GZIP Compression and AES Encryption Card -17c0 Wistron Corp. -17c2 Newisys, Inc. -17cb Airgo Networks Inc - 0001 AGN100 802.11 a/b/g True MIMO Wireless Card - 0002 AGN300 802.11 a/b/g True MIMO Wireless Card -17cc NetChip Technology, Inc - 2280 USB 2.0 -17cf Z-Com, Inc. -17d3 Areca Technology Corp. - 1110 ARC-1110 4-Port PCI-X to SATA RAID Controller - 1120 ARC-1120 8-Port PCI-X to SATA RAID Controller - 1130 ARC-1130 12-Port PCI-X to SATA RAID Controller - 1160 ARC-1160 16-Port PCI-X to SATA RAID Controller - 1170 ARC-1170 24-Port PCI-X to SATA RAID Controller - 1201 ARC-1200 2-Port PCI-Express to SATA II RAID Controller - 1210 ARC-1210 4-Port PCI-Express to SATA RAID Controller - 1220 ARC-1220 8-Port PCI-Express to SATA RAID Controller - 1230 ARC-1230 12-Port PCI-Express to SATA RAID Controller - 1260 ARC-1260 16-Port PCI-Express to SATA RAID Controller - 1280 ARC-1231 12-Port PCI-Express to SATA RAID Controller - 1680 ARC-1680 8 port PCIe/PCI-X to SAS/SATA II RAID Controller -# Nee S2io Inc. -17d5 Neterion Inc. - 5731 Xframe 10-Gigabit Ethernet PCI-X - 5732 Xframe II 10-Gigabit Ethernet PCI-X 2.0 - 5831 Xframe 10-Gigabit Ethernet PCI-X - 103c 12d5 PCI-X 133MHz 10GbE SR Fiber - 10a9 8020 Single Port 10-Gigabit Ethernet (PCI-X, Fiber) - 10a9 8024 Single Port 10-Gigabit Ethernet (PCI-X, Fiber) - 5832 Xframe II 10-Gigabit Ethernet PCI-X 2.0 - 103c 1337 PCI-X 266MHz 10GigE SR [AD385A] - 10a9 8021 Single Port 10-Gigabit Ethernet II (PCI-X, Fiber) - 17d5 6020 Xframe II SR - 17d5 6021 Xframe II SR, Low Profile - 17d5 6022 Xframe E SR - 17d5 6420 Xframe II LR - 17d5 6421 Xframe II LR, Low Profile - 17d5 6422 Xframe E LR - 17d5 6c20 Xframe II CX4 - 17d5 6c21 Xframe II CX4, Low Profile - 17d5 6c22 Xframe E CX4 - 5833 X3100 Series 10 Gigabit Ethernet PCIe - 17d5 6030 X3110 Single Port SR - 17d5 6031 X3120 Dual Port SR - 17d5 6430 X3110 Single Port LR - 17d5 6431 X3120 Dual Port LR - 17d5 7030 X3110 Single Port LRM - 17d5 7031 X3120 Dual Port LRM - 17d5 7430 X3110 Single Port 10GBase-T - 17d5 7431 X3120 Dual Port 10GBase-T - 17d5 7830 X3110 Single Port 10GBase-CR - 17d5 7831 X3120 Dual Port 10GBase-CR -17db Cray Inc - 0101 XT Series [Seastar] 3D Toroidal Router -17de KWorld Computer Co. Ltd. -17e4 Sectra AB - 0001 KK671 Cardbus encryption board - 0002 KK672 Cardbus encryption board -17e6 Entropic Communications Inc. - 0010 EN2010 [c.Link] MoCA Network Controller (Coax, PCI interface) - 0011 EN2010 [c.Link] MoCA Network Controller (Coax, MPEG interface) - 0021 EN2210 [c.Link] MoCA Network Controller (Coax) - 0025 EN2510 [c.Link] MoCA Network Controller (Coax, PCIe interface) -17ee Connect Components Ltd -17f2 Albatron Corp. -17f3 RDC Semiconductor, Inc. - 1010 R1010 IDE Controller - 6020 R6020 North Bridge - 6021 R6021 Host Bridge - 6030 R6030 ISA Bridge - 6031 R6031 ISA Bridge - 6040 R6040 MAC Controller - 6060 R6060 USB 1.1 Controller - 6061 R6061 USB 2.0 Controller -17f7 Topdek Semiconductor Inc. -17fe Linksys, A Division of Cisco Systems - 2120 WMP11v4 802.11b PCI card - 2220 [AirConn] INPROCOMM IPN 2220 Wireless LAN Adapter (rev 01) - 17fe 2220 WPC54G ver. 4 -17ff Benq Corporation -1803 ProdaSafe GmbH -1805 Euresys S.A. -1809 Lumanate, Inc. -1813 Ambient Technologies Inc - 4000 HaM controllerless modem - 16be 0001 V9x HAM Data Fax Modem - 4100 HaM plus Data Fax Modem - 16be 0002 V9x HAM 1394 -1814 RaLink - 0101 Wireless PCI Adapter RT2400 / RT2460 - 1043 0127 WiFi-b add-on Card - 1462 6828 PC11B2 (MS-6828) Wireless 11b PCI Card - 0200 RT2500 802.11g PCI [PC54G2] - 0201 RT2500 802.11g Cardbus/mini-PCI - 1043 130f WL-130g - 1371 001e CWC-854 Wireless-G CardBus Adapter - 1371 001f CWM-854 Wireless-G Mini PCI Adapter - 1371 0020 CWP-854 Wireless-G PCI Adapter - 1458 e381 GN-WMKG 802.11b/g Wireless CardBus Adapter - 1458 e931 GN-WIKG 802.11b/g mini-PCI Adapter - 1462 6833 Unknown 802.11g mini-PCI Adapter - 1462 6835 Wireless 11G CardBus CB54G2 - 1737 0032 WMP54G 2.0 PCI Adapter - 1799 700a F5D7000 Wireless G Desktop Network Card - 1799 701a F5D7010 Wireless G Notebook Network Card - 185f 22a0 CN-WF513 Wireless Cardbus Adapter - 0300 Wireless Adapter Canyon CN-WF511 - 0301 RT2561/RT61 802.11g PCI - 1186 3c08 DWL-G630 Rev E - 1186 3c09 DWL-G510 Rev C - 13d1 abe3 miniPCI Pluscom 802.11 a/b/g - 1458 e934 GN-WP01GS - 1737 0055 WMP54G ver 4.1 - 1814 2561 EW-7108PCg - 0302 RT2561/RT61 rev B 802.11g - 1186 3c08 DWL-G630 Rev E - 1186 3c09 AirPlus G DWL-G510 Wireless Network Adapter (Rev.C) - 1462 b834 PC54G3 Wireless 11g PCI Card - 0401 RT2600 802.11 MIMO - 0601 RT2800 802.11n PCI - 0681 RT2860 Wireless 802.11n PCIe - 0701 RT2760 Wireless 802.11n 1T/2R Cardbus - 0781 RT2860 - 3090 RT3090 Wireless 802.11n 1T/1R PCIe - 3091 RT3091 Wireless 802.11n 1T/2R PCIe - 3092 RT3092 Wireless 802.11n 2T/2R PCIe - e932 RT2560F 802.11 b/g PCI -1815 Devolo AG -1820 InfiniCon Systems Inc. -1822 Twinhan Technology Co. Ltd - 4e35 Mantis DTV PCI Bridge Controller [Ver 1.0] -182d SiteCom Europe BV -# HFC-based ISDN card - 3069 ISDN PCI DC-105V2 - 9790 WL-121 Wireless Network Adapter 100g+ [Ver.3] -182e Raza Microelectronics, Inc. - 0008 XLR516 Processor -# Strange vendor ID used by BCM5785 when in RAID mode -182f Broadcom -# HT1000 uses 3 IDs 1166:024a (Native SATA Mode), 1166:024b (PATA/IDE Mode), 182f:000b (RAID Mode) depends on SATA BIOS setting - 000b BCM5785 [HT1000] SATA (RAID Mode) -1830 Credence Systems Corporation -183b MikroM GmbH - 08a7 MVC100 DVI - 08a8 MVC101 SDI - 08a9 MVC102 DVI+Audio - 08b0 MVC200-DC -1849 ASRock Incorporation -184a Thales Computers -1851 Microtune, Inc. -1852 Anritsu Corp. -1853 SMSC Automotive Infotainment System Group -1854 LG Electronics, Inc. -185b Compro Technology, Inc. -185f Wistron NeWeb Corp. -1864 SilverBack - 2110 ISNAP 2110 -1867 Topspin Communications - 5a44 MT23108 InfiniHost HCA - 5a45 MT23108 InfiniHost HCA flash recovery - 5a46 MT23108 InfiniHost HCA bridge - 6278 MT25208 InfiniHost III Ex (Tavor compatibility mode) - 6282 MT25208 InfiniHost III Ex -186c Humusoft, s.r.o. - 0612 AD612 Data Acquisition Device - 0614 MF614 Multifunction I/O Card - 0622 AD622 Data Acquisition Device - 0624 MF624 Multifunction I/O Card - 0625 MF625 3-phase Motor Driver -186f WiNRADiO Communications -1876 L-3 Communications - a101 VigraWATCH PCI - a102 VigraWATCH PMC - a103 Vigra I/O -187e ZyXEL Communication Corporation - 3403 ZyAir G-110 802.11g - 340e M-302 802.11g XtremeMIMO -1885 Avvida Systems Inc. -1888 Varisys Ltd - 0301 VMFX1 FPGA PMC module - 0601 VSM2 dual PMC carrier - 0710 VS14x series PowerPC PCI board - 0720 VS24x series PowerPC PCI board -188a Ample Communications, Inc -1890 Egenera, Inc. -1894 KNC One -1896 B&B Electronics Manufacturing Company, Inc. - 4202 MIport 3PCIU2 2-port Serial - 4204 MIport 3PCIU4 4-port Serial - 4208 MIport 3PCIU8 8-port Serial - 4211 MIport 3PCIOU1 1-port Isolated Serial - 4212 MIport 3PCIOU2 2-port Isolated Serial - 4214 MIport 3PCIOU4 4-port Isolated Serial - bb10 3PCI2 2-Port Serial - bb11 3PCIO1 1-Port Isolated Serial -1897 AMtek -18a1 Astute Networks Inc. -18a3 AT&T -18ac DViCO Corporation - d500 FusionHDTV 5 - d800 FusionHDTV 3 Gold - d810 FusionHDTV 3 Gold-Q - d820 FusionHDTV 3 Gold-T - db30 FusionHDTV DVB-T Pro - db40 FusionHDTV DVB-T Hybrid - db78 FusionHDTV DVB-T Dual Express -18b8 Ammasso - b001 AMSO 1100 iWARP/RDMA Gigabit Ethernet Coprocessor -18bc Info-Tek Corp. -18c3 Micronas Semiconductor Holding AG -# Nee Octigabay System -18c8 Cray Inc -18c9 ARVOO Engineering BV -18ca XGI Technology Inc. (eXtreme Graphics Innovation) - 0020 Z7/Z9 (XG20 core) - 0021 Z9s/Z9m (XG21 core) -# duh! Device name, not my name :) - 0027 Z11/Z11M - 0040 Volari V3XT/V5/V8 - 0047 Volari 8300 (chip: XP10, codename: XG47) -18d2 Sitecom -# Sitecom HFC-S based ISDN controller card DC-105v2 - 3069 DC-105v2 ISDN controller -18d8 Dialogue Technology Corp. -18dd Artimi Inc - 4c6f Artimi RTMI-100 UWB adapter -18e6 MPL AG - 0001 OSCI [Octal Serial Communication Interface] -18eb Advance Multimedia Internet Technology, Inc. -18ec Cesnet, z.s.p.o. - 6d05 ML555 - 18ec 0100 NIC (ethernet interfaces) - 18ec 0200 NIC (szedata2) 4x1G - 18ec 0201 NIC (szedata2) 2x10G - 18ec 0300 NIFIC (szedata2) 4x1G - 18ec 0302 NIFIC (szedata2) 2x10G - 18ec 4200 Flexible FlowMon (szedata2) 1x10G - 18ec ff00 Testing design - 18ec ff01 Boot design - c006 COMBO6 - 18ec d001 COMBO-4MTX - 18ec d002 COMBO-4SFP - 18ec d003 COMBO-4SFPRO - 18ec d004 COMBO-2XFP - c032 COMBO-LXT110 - 18ec 0100 NIC (ethernet interfaces) - 18ec 0200 NIC (szedata2) 4x1G - 18ec 0201 NIC (szedata2) 2x10G - 18ec 0300 NIFIC (szedata2) 4x1G - 18ec 0302 NIFIC (szedata2) 2x10G - 18ec 4200 Flexible FlowMon (szedata2) 1x10G - 18ec ff00 Testing design - 18ec ff01 Boot design - c045 COMBO6E - c050 COMBO-PTM - c058 COMBO6X - 18ec d001 COMBO-4MTX - 18ec d002 COMBO-4SFP - 18ec d003 COMBO-4SFPRO - 18ec d004 COMBO-2XFP - c132 COMBO-LXT155 - 18ec 0100 NIC (ethernet interfaces) - 18ec 0200 NIC (szedata2) 4x1G - 18ec 0201 NIC (szedata2) 2x10G - 18ec 0300 NIFIC (szedata2) 4x1G - 18ec 0302 NIFIC (szedata2) 2x10G - 18ec 4200 Flexible FlowMon (szedata2) 1x10G - 18ec ff00 Testing design - 18ec ff01 Boot design - c232 COMBO-FXT100 - 18ec 0100 NIC (ethernet interfaces) - 18ec 0200 NIC (szedata2) 4x1G - 18ec 0201 NIC (szedata2) 2x10G - 18ec 0300 NIFIC (szedata2) 4x1G - 18ec 0302 NIFIC (szedata2) 2x10G - 18ec 4200 Flexible FlowMon (szedata2) 1x10G - 18ec ff00 Testing design - 18ec ff01 Boot design -18ee Chenming Mold Ind. Corp. -18f1 Spectrum GmbH -18f4 Napatech A/S - 0051 NT20-X Capture Card - 0061 NT20E Capture Card - 0071 NT4E Capture Card - 0081 NT4E 8-port Expansion Card - 0091 NT20X Capture Card [New Rev] -18f6 NextIO - 1000 [Nexsis] Switch Virtual P2P PCIe Bridge - 1050 [Nexsis] Switch Virtual P2P PCI Bridge - 2000 [Nexsis] Switch Integrated Mgmt. Endpoint -18f7 Commtech, Inc. - 0001 Fastcom ESCC-PCI-335 - 0002 Fastcom 422/4-PCI-335 - 0003 Fastcom 232/4-1M-PCI - 0004 Fastcom 422/2-PCI-335 - 0005 Fastcom IGESCC-PCI-ISO/1 - 000a Fastcom 232/4-PCI-335 - 000f Fastcom FSCC - 0010 Fastcom GSCC -# Dual Serocco - 0011 Fastcom QSSB - 0014 SuperFSCC - 0015 SuperFSCC-104 - 0016 Fastcom FSCC-232 - 0017 SuperFSCC-104-NOUART -18fb Resilience Corporation -1904 Hangzhou Silan Microelectronics Co., Ltd. - 2031 SC92031 PCI Fast Ethernet Adapter - 8139 RTL8139D [Realtek] PCI 10/100BaseTX ethernet adaptor -1905 Micronas USA, Inc. -1912 Renesas Technology Corp. - 0002 SH7780 PCI Controller (PCIC) -1919 Soltek Computer Inc. -1923 Sangoma Technologies Corp. - 0040 A200/Remora FXO/FXS Analog AFT card - 0100 A104d QUAD T1/E1 AFT card - 0300 A101 single-port T1/E1 - 0400 A104u Quad T1/E1 AFT -# nee Level 5 Networks -1924 Solarflare Communications - 0703 SFC4000 rev A net [Solarstorm] - 10b8 0102 SMC10GPCIe-10BT (A2) [TigerCard] - 10b8 0103 SMC10GPCIe-10BT (A3) [TigerCard] - 10b8 0201 SMC10GPCIe-XFP (A1) [TigerCard] - 1924 0101 SFE4001-A1 - 1924 0102 SFE4001-A2 - 1924 0103 SFE4001-A3 - 1924 0201 SFE4002-A1 - 1924 0301 SFE4003-A1 - 1924 0302 SFE4003-A2 - 1924 0303 SFE4003-A3 - 1924 0304 SFE4003-A4 - 1924 0500 SFE4005-A0 - 0710 SFC4000 rev B [Solarstorm] - 10b8 0103 SMC10GPCIe-10BT (A3) [TigerCard] - 10b8 0201 SMC10GPCIe-XFP (A1) [TigerCard] - 1924 0102 SFE4001-A2 - 1924 0103 SFE4001-A3 - 1924 0201 SFE4002-A1 - 1924 0302 SFE4003-A2 - 1924 0303 SFE4003-A3 - 1924 0304 SFE4003-A4 - 1924 0500 SFE4005-A0 - 1924 5102 SFN4111T-A2 - 1924 5103 SFN4111T-R3 - 1924 5104 SFN4111T-R4 - 1924 5105 SFN4111T-R5 - 1924 5201 SFN4112F-R1 - 1924 5202 SFN4112F-R2 - 0803 SFL9021 [Solarstorm] - 1924 6200 SFN5122F-R0 - 6703 SFC4000 rev A iSCSI/Onload [Solarstorm] - 10b8 0102 SMC10GPCIe-10BT (A2) [TigerCard] - 10b8 0103 SMC10GPCIe-10BT (A3) [TigerCard] - 10b8 0201 SMC10GPCIe-XFP (A1) [TigerCard] - 1924 0101 SFE4001-A1 - 1924 0102 SFE4001-A2 - 1924 0103 SFE4001-A3 - 1924 0201 SFE4002-A1 - 1924 0301 SFE4003-A1 - 1924 0302 SFE4003-A2 - 1924 0303 SFE4003-A3 - 1924 0304 SFE4003-A4 - 1924 0500 SFE4005-A0 - c101 EF1-21022T [EtherFabric] -192e TransDimension -1931 Option N.V. - 000c Qualcomm MSM6275 UMTS chip -1932 DiBcom -193c MAXIM Integrated Products -193f Comtech AHA Corp. - 0001 AHA36x-PCIX - 0363 AHA363-PCIe - 0364 AHA364-PCIe - 0367 AHA367-PCIe -1942 ClearSpeed Technology plc - e511 Advance X620 accelerator card - e521 Advance e620 accelerator card -1947 C-guys, Inc. - 4743 CG200 Dual SD/SDIO Host controller device -194a DapTechnology B.V. - 1111 FireSpy3850 - 1112 FireSpy450b - 1113 FireSpy450bT - 1114 FireSpy850 - 1115 FireSpy850bT -1954 Curtis, Inc. -1957 Freescale Semiconductor Inc - 0012 MPC8548E - 0013 MPC8548 - 0014 MPC8543E - 0015 MPC8543 - 0018 MPC8547E - 0019 MPC8545E - 001a MPC8545 - 0020 MPC8568E - 0021 MPC8568 - 0022 MPC8567E - 0023 MPC8567 - 0030 MPC8533E - 0031 MPC8533 - 0032 MPC8544E - 0033 MPC8544 - 0040 MPC8572E - 0041 MPC8572 - 0050 MPC8536E - 0051 MPC8536 - 0052 MPC8535E - 0053 MPC8535 - 0060 MPC8569 - 0061 MPC8569E - 0070 P2020E - 0071 P2020 - 0080 MPC8349E - 0081 MPC8349 - 0082 MPC8347E TBGA - 0083 MPC8347 TBGA - 0084 MPC8347E PBGA - 0085 MPC8347 PBGA - 0086 MPC8343E - 0087 MPC8343 - 7010 MPC8641 PCI Host Bridge - 7011 MPC8641D PCI Host Bridge - 7018 MPC8610 -1958 Faster Technology, LLC. -1959 PA Semi, Inc - a000 PA6T Core - a001 PWRficient Host Bridge - a002 PWRficient PCI-Express Port - a003 PWRficient SMBus Controller - a004 PWRficient 16550 UART - a005 PWRficient Gigabit Ethernet - a006 PWRficient 10-Gigabit Ethernet - a007 PWRficient DMA Controller - a008 PWRficient LPC/Localbus Interface - a009 PWRficient L2 Cache - a00a PWRficient DDR2 Memory Controller - a00b PWRficient SERDES - a00c PWRficient System/Debug Controller - a00d PWRficient PCI-Express Internal Endpoint -1966 Orad Hi-Tec Systems - 1975 DVG64 family -1969 Attansic Technology Corp. - 1026 Atheros AR8121/AR8113/AR8114 PCI-E Ethernet Controller - 1043 8304 P5KPL-CM Motherboard - 1048 L1 Gigabit Ethernet Adapter - 1043 8226 P5KPL-VM Motherboard - 1062 Atheros AR8132 / L1c Gigabit Ethernet Adapter - 1066 L2c Gigabit Ethernet Adapter - 1067 L1c Gigabit Ethernet Adapter - 2048 L2 100 Mbit Ethernet Adapter -196a Sensory Networks Inc. - 0101 NodalCore C-1000 Content Classification Accelerator - 0102 NodalCore C-2000 Content Classification Accelerator - 0105 NodalCore C-3000 Content Classification Accelerator -196d Club-3D BV -1971 AGEIA Technologies, Inc. - 1011 Physics Processing Unit [PhysX] - 1043 0001 PhysX P1 -1974 TransferZentrum Mikroelektronik -1977 Parsec -197b JMicron Technology Corp. - 0250 JMC250 PCI Express Gigabit Ethernet Controller - 0260 JMC260 PCI Express Fast Ethernet Controller - 2360 JMB360 AHCI Controller - 2361 JMB361 AHCI/IDE - 1462 7235 P965 Neo MS-7235 mainboard - 2363 JMB362/JMB363 AHCI Controller - 1043 81e4 P5B [JMB363] - 1458 b000 GA-EP45-DS5 Motherboard - 1849 2363 Motherboard (one of many) - 2365 JMB365 AHCI/IDE - 2366 JMB366 AHCI/IDE - 2368 JMB368 IDE controller - 2380 IEEE 1394 Host Controller - 2381 Standard SD Host Controller - 2382 SD/MMC Host Controller - 2383 MS Host Controller - 2384 xD Host Controller - 2386 Standard SD Host Controller - 2387 SD/MMC Host Controller - 2388 MS Host Controller - 2389 xD Host Controller -1982 Distant Early Warning Communications Inc - 1600 OX16C954 HOST-A - 16ff OX16C954 HOST-B -1989 Montilio Inc. - 0001 RapidFile Bridge - 8001 RapidFile -198a Nallatech Ltd. -1993 Innominate Security Technologies AG -199a Pulse-LINK, Inc. -199f Auvitek - 8501 AU85X1 PCI REV1.1 -19a2 ServerEngines Corp. - 0200 BladeEngine 10Gb PCI-E iSCSI adapter - 0201 BladeEngine 10Gb PCIe Network Adapter - 0211 BladeEngine2 10Gb Gen2 PCIe Network Adapter - 0212 BladeEngine2 10Gb Gen2 PCIe iSCSI Adapter - 0700 Emulex OneConnect 10Gb NIC - 0702 Emulex OneConnect 10Gb iSCSI Initiator - 0704 Emulex OneConnect 10Gb FCoE Initiator - 0710 Emulex OneConnect 10Gb NIC (be3) - 0712 Emulex OneConnect 10Gb iSCSI Initiator (be3) - 0714 Emulex OneConnect 10Gb FCoE Initiator (be3) -19a8 DAQDATA GmbH -19ac Kasten Chase Applied Research - 0001 ACA2400 Crypto Accelerator -19ae Progeny Systems Corporation - 0520 4135 HFT Interface Controller - 0521 Decimator -19c1 Exegy Inc. -# nee NextNet Wireless -19d1 Motorola Expedience -19d4 Quixant Limited -19da ZOTAC International (MCO) Ltd. -19de Pico Computing -19e2 Vector Informatik GmbH -19e3 DDRdrive LLC - dd52 DDRdrive X1 -19e7 NET (Network Equipment Technologies) - 1001 STIX DSP Card - 1002 STIX - 1 Port T1/E1 Card - 1003 STIX - 2 Port T1/E1 Card - 1004 STIX - 4 Port T1/E1 Card - 1005 STIX - 4 Port FXS Card -19ee Netronome Systems, Inc. -1a03 ASPEED Technology, Inc. - 2000 ASPEED Graphics Family -1a07 Kvaser AB - 0006 CAN interface PC104+ HS/HS - 0007 CAN interface PCIcanx II HS or HS/HS - 0008 CAN interface PCIEcan HS or HS/HS - 0009 CAN interface PCI104 HS/HS -1a08 Sierra semiconductor - 0000 SC15064 -1a0e DekTec Digital Video B.V. - 0069 DTA-105 -1a17 Force10 Networks, Inc. - 8002 PB-10GE-2P 10GbE Security Card -1a1d GFaI e.V. - 1a17 Meta Networks MTP-1G IDPS NIC -1a1e 3Leaf Systems, Inc. -1a22 Ambric Inc. -1a29 Fortinet, Inc. -1a2b Ascom AG - 0000 GESP v1.2 - 0001 GESP v1.3 - 0002 ECOMP v1.3 - 0005 ETP v1.4 - 000a ETP-104 v1.1 - 000e DSLP-104 v1.1 -1a51 Hectronic AB -1a56 Bigfoot Networks, Inc. -1a57 Highly Reliable Systems -1a58 Razer USA Ltd. -1a5d Celoxica -1a5e Aprius Inc. -1a5f System TALKS Inc. -1a68 VirtenSys Limited -1a71 XenSource, Inc. -1a73 Violin Memory, Inc - 0001 Mozart [Memory Appliance 1010] -1a76 Wavesat -1a77 Lightfleet Corporation -1a78 Virident Systems Inc. -1a84 Commex Technologies - 0001 Vulcan SP HT6210 10-Gigabit Ethernet (rev 02) -1a88 MEN Mikro Elektronik - 4d45 Multifunction IP core -1a8c Verigy Pte. Ltd. - 1100 E8001-66443 PCI Express CIC -1a8e DRS Technologies - 2090 Model 2090 PCI Express -1aa8 Ciprico, Inc. - 0009 RAIDCore Controller - 000a RAIDCore Controller -1aae Global Velocity, Inc. -1ab6 CalDigit, Inc. - 6201 RAID Card -1ab9 Espia Srl -1ade Spin Master Ltd. - 1501 Swipetech barcode scanner -1ae0 Google, Inc. -1ae8 Silicon Software GmbH - 0a40 microEnable IV-BASE x1 - 0a41 microEnable IV-FULL x1 - 0a44 microEnable IV-FULL x4 - 0e44 microEnable IV-GigE x4 -1aec Wolfson Microelectronics -1aed Fusion-io - 1003 ioDrive (NAND Flash Storage) - 1005 ioDIMM3 320GB -1aee Caustic Graphics Inc. -1af4 Qumranet, Inc. - 1000 Virtio network device - 1001 Virtio block device - 1002 Virtio memory balloon - 1003 Virtio console -1af5 Netezza Corp. -1afa J & W Electronics Co., Ltd. -1b13 Jaton Corp -1b1a K&F Computing Research Co. - 0e70 GRAPE -1b36 Red Hat, Inc. -1b3e Teradata Corp. - 1fa8 BYNET BIC2SE/X - 1b3e 00a3 BYNET BIC2SX - 1b3e 00c3 BYNET BIC2SE -1b40 Schooner Information Technology, Inc. -1b55 NetUP Inc. - 2a2c Dual DVB-S2-CI card -1c1c Symphony - 0001 82C101 -1d44 DPT - a400 PM2x24/PM3224 -1de1 Tekram Technology Co.,Ltd. - 0391 TRM-S1040 - 2020 DC-390 - 690c 690c - dc29 DC290 -# nee Tumsan Oy -1fc0 Ascom (Finland) Oy - 0300 E2200 Dual E1/Rawpipe Card - 0301 C5400 SHDSL/E1 Card -# nee PathScale, Inc -1fc1 QLogic, Corp. - 000d IBA6110 InfiniBand HCA - 0010 IBA6120 InfiniBand HCA -1fc9 Tehuti Networks Ltd. - 3009 10-Giga TOE SmartNIC - 3010 10-Giga TOE SmartNIC - 3014 10-Giga TOE SmartNIC 2-Port -1fce Cognio Inc. - 0001 Spectrum Analyzer PC Card (SAgE) -1fd4 SUNIX Co., Ltd. - 0001 Matrix multiport serial adapter -2000 Smart Link Ltd. - 2800 SmartPCI2800 V.92 PCI Soft DFT -2001 Temporal Research Ltd -2003 Smart Link Ltd. - 8800 LM-I56N -2004 Smart Link Ltd. -2116 ZyDAS Technology Corp. -21c3 21st Century Computer Corp. -# (Probably only the Mobile Phone Division) -22b8 Motorola, Inc. -2304 Colorgraphic Communications Corp. -2348 Racore - 2010 8142 100VG/AnyLAN -2646 Kingston Technologies -270b Xantel Corporation -270f Chaintech Computer Co. Ltd -2711 AVID Technology Inc. -29b4 82q35 Express MEI Controller -2a15 3D Vision(???) -3000 Hansol Electronics Inc. -3142 Post Impression Systems. -3388 Hint Corp - 0013 HiNT HC4 PCI to ISDN bridge, Multimedia audio controller - 0014 HiNT HC4 PCI to ISDN bridge, Network controller - 0020 HB6 Universal PCI-PCI bridge (transparent mode) - 0021 HB6 Universal PCI-PCI bridge (non-transparent mode) - 1775 c200 C2K CompactPCI interface bridge - 1775 ce90 CE9 - 4c53 1050 CT7 mainboard - 4c53 1080 CT8 mainboard - 4c53 1090 Cx9 mainboard - 4c53 10a0 CA3/CR3 mainboard - 4c53 3010 PPCI mezzanine (32-bit PMC) - 4c53 3011 PPCI mezzanine (64-bit PMC) - 4c53 4000 PMCCARR1 carrier board - 0022 HiNT HB4 PCI-PCI Bridge (PCI6150) - 0026 HB2 PCI-PCI Bridge - 101a E.Band [AudioTrak Inca88] - 101b E.Band [AudioTrak Inca88] - 8011 VXPro II Chipset - 3388 8011 VXPro II Chipset CPU to PCI Bridge - 8012 VXPro II Chipset - 3388 8012 VXPro II Chipset PCI to ISA Bridge - 8013 VXPro II IDE - 3388 8013 VXPro II Chipset EIDE Controller - a103 Blackmagic Design DeckLink HD Pro -3411 Quantum Designs (H.K.) Inc -3442 Bihl+Wiedemann GmbH - 1783 AS-i 3.0 cPCI Master - 1922 AS-i 3.0 PCI Master -3475 Arastra Inc. -3513 ARCOM Control Systems Ltd -3842 eVga.com. Corp. -38ef 4Links -3d3d 3DLabs - 0001 GLINT 300SX - 0002 GLINT 500TX - 0000 0000 GLoria L - 0003 GLINT Delta - 0000 0000 GLoria XL - 0004 Permedia - 0005 Permedia - 0006 GLINT MX - 0000 0000 GLoria XL - 1048 0a42 GLoria XXL - 0007 3D Extreme - 0008 GLINT Gamma G1 - 1048 0a42 GLoria XXL - 0009 Permedia II 2D+3D - 1040 0011 AccelStar II - 1048 0a42 GLoria XXL - 13e9 1000 6221L-4U - 3d3d 0100 AccelStar II 3D Accelerator - 3d3d 0111 Permedia 3:16 - 3d3d 0114 Santa Ana - 3d3d 0116 Oxygen GVX1 - 3d3d 0119 Scirocco - 3d3d 0120 Santa Ana PCL - 3d3d 0125 Oxygen VX1 - 3d3d 0127 Permedia3 Create! - 000a GLINT R3 - 3d3d 0121 Oxygen VX1 - 000c GLINT R3 [Oxygen VX1] - 3d3d 0144 Oxygen VX1-4X AGP [Permedia 4] - 000d GLint R4 rev A - 000e GLINT Gamma G2 - 0011 GLint R4 rev B - 0012 GLint R5 rev A - 0013 GLint R5 rev B - 0020 VP10 visual processor - 0022 VP10 visual processor - 0024 VP9 visual processor - 002c Wildcat Realizm 100/200 - 0030 Wildcat Realizm 800 - 0032 Wildcat Realizm 500 - 0100 Permedia II 2D+3D - 07a1 Wildcat III 6210 - 07a2 Sun XVR-500 Graphics Accelerator - 07a3 Wildcat IV 7210 - 1004 Permedia - 3d04 Permedia - ffff Glint VGA -4005 Avance Logic Inc. - 0300 ALS300 PCI Audio Device - 0308 ALS300+ PCI Audio Device - 0309 PCI Input Controller - 1064 ALG-2064 - 2064 ALG-2064i - 2128 ALG-2364A GUI Accelerator - 2301 ALG-2301 - 2302 ALG-2302 - 2303 AVG-2302 GUI Accelerator - 2364 ALG-2364A - 2464 ALG-2464 - 2501 ALG-2564A/25128A - 4000 ALS4000 Audio Chipset - 4005 4000 ALS4000 Audio Chipset - 4710 ALC200/200P -4033 Addtron Technology Co, Inc. - 1360 RTL8139 Ethernet -4040 NetXen Incorporated - 0001 NXB-10GXSR 10-Gigabit Ethernet PCIe Adapter with SR-XFP optical interface - 103c 7047 NC510F PCIe 10-Gigabit Server Adapter - 0002 NXB-10GCX4 10-Gigabit Ethernet PCIe Adapter with CX4 copper interface - 103c 7048 NC510c PCIe 10-Gigabit Server Adapter - 0003 NXB-4GCU Quad Gigabit Ethernet PCIe Adapter with 1000-BASE-T interface - 0004 BladeCenter-H 10-Gigabit Ethernet High Speed Daughter Card - 0005 NetXen Dual Port 10GbE Multifunction Adapter for c-Class - 103c 170e NC512m Dual Port 10GbE Multifunction BL-C Adapter - 0024 XG Mgmt - 0025 XG Mgmt - 0100 NX3031 Multifunction 1/10-Gigabit Server Adapter - 103c 171b NC522m Dual Port 10GbE Multifunction BL-c Adapter - 103c 3251 NC375i 1G w/NC524SFP 10G Module - 103c 705a NC375i Integrated Quad Port Multifunction Gigabit Server Adapter - 103c 705b NC522SFP Dual Port 10GbE Server Adapter - 152d 896b TG20 Dual Port 10GbE Server/Storage Adapter - 4040 0124 NX3031 Quad Port Gigabit Server Adapter - 4040 0126 Dual Port SFP+ 10GbE Server Adapter -4143 Digital Equipment Corp -4144 Alpha Data - 0044 ADM-XRCIIPro -4150 ONA Electroerosion - 0001 PCI32TLITE FILSTRUP1 PCI to VME Bridge Controller - 0006 PCI32TLITE UART 16550 Opencores - 0007 PCI32TLITE CAN Controller Opencores -415a Auzentech, Inc. -416c Aladdin Knowledge Systems - 0100 AladdinCARD - 0200 CPC -4321 Tata Power Strategic Electronics Division -434e CAST Navigation LLC -4444 Internext Compression Inc - 0016 iTVC16 (CX23416) MPEG-2 Encoder - 0070 0003 WinTV PVR 250 - 0070 0009 WinTV PVR 150 - 0070 0801 WinTV PVR 150 - 0070 0807 WinTV PVR 150 - 0070 4001 WinTV PVR 250 - 0070 4009 WinTV PVR 250 - 0070 4801 WinTV PVR 250 - 0070 4803 WinTV PVR 250 - 0070 8003 WinTV PVR 150 - 0070 8801 WinTV PVR 150 - 0070 c801 WinTV PVR 150 - 0070 e807 WinTV PVR 500 (1st unit) - 0070 e817 WinTV PVR 500 (2nd unit) - 0070 ff92 WiNTV PVR-550 - 0270 0801 WinTV PVR 150 - 104d 013d ENX-26 TV Encoder - 10fc d038 GV-MVP/RX2W (1st unit) - 10fc d039 GV-MVP/RX2W (2nd unit) - 12ab fff3 MPG600 - 12ab ffff MPG600 - 1461 c00a M113 PCI Analog TV (PAL/SECAM, Philips FQ1216MK3 tuner) - 1461 c00b M113 PCI Analog TV (PAL/SECAM+FM, Philips FM1216MK3 tuner) - 1461 c00c M113 PCI Analog TV (NTSC, JAPAN version, Philips FI1286MK2 tuner) - 1461 c010 M113 PCI Analog TV (NTSC, Philips FI1236MK3 tuner) - 1461 c011 M113 PCI Analog TV (NTSC+FM, Philips FM1236MK3 tuner) - 1461 c018 M113 PCI Analog TV (NTSC, Philips FQ1236MK5 tuner) - 1461 c019 UltraTV 1500 MCE, a.k.a. M113 PCI Analog TV (NTSC+FM, Philips FQ1236MK5 tuner) - 1461 c01a M113 PCI Analog TV (PAL/SECAM, Philips FQ1216MK5 tuner) - 1461 c01b M113 PCI Analog TV (PAL/SECAM+FM, Philips FM1216MK5 tuner) - 1461 c030 M113 PCI Analog TV (NTSC-J, Partsnic tuner) - 1461 c031 M113 PCI Analog TV (NTSC-J+FM, Partsnic tuner) - 1461 c032 M113 PCI Analog TV (PAL/SECAM, Partsnic tuner) - 1461 c033 M113 PCI Analog TV (PAL/SECAM+FM, Partsnic tuner) - 1461 c034 M113 PCI Analog TV (NTSC, Partsnic tuner) - 1461 c035 M113 PCI Analog TV (NTSC+FM, Partsnic tuner) - 1461 c03f C115 PCI video capture card (no tuner) - 1461 c136 M104 mini-PCI Analog TV - 1461 c20a M755 AVerTV Video Capture (PAL/SECAM, Philips FQ1216MK3 tuner) - 1461 c218 M755 AVerTV Video Capture (NTSC, Philips FQ1236MK5 tuner) - 1461 c219 M755 AVerTV Video Capture (NTSC+FM, Philips FQ1236MK5 tuner) - 1461 c21a M755 AVerTV Video Capture (PAL/SECAM, Philips FQ1216MK5 tuner) - 1461 c21b M755 AVerTV Video Capture (PAL/SECAM+FM, Philips FM1216MK5 tuner) - 1461 c230 M755 AVerTV Video Capture (NTSC-J, Partsnic tuner) - 1461 c231 M755 AVerTV Video Capture (NTSC-J+FM, Partsnic tuner) - 1461 c232 M755 AVerTV Video Capture (PAL/SECAM, Partsnic tuner) - 1461 c233 M755 AVerTV Video Capture (PAL/SECAM+FM, Partsnic tuner) - 1461 c234 M755 AVerTV Video Capture (NTSC, Partsnic tuner) - 1461 c235 M755 AVerTV Video Capture (NTSC+FM, Partsnic tuner) - 1461 c337 E106 AVerMedia AVerTV Video Capture - 1461 c439 M116 AVerMedia AVerTV MCE 116 Plus (NTSC/PAL/SECAM+FM+REMOTE, Xceive 2028 tuner) - 1461 c5ff C755 AVerTV Video Capture card (no tuner) - 1461 c6ff C115 PCI video capture card (no tuner) - 1461 c739 M785 AVerMedia PCI Analog TV (NTSC/PAL/SECAM+FM, Xceive 2028 tuner) - 9005 0092 VideOh! AVC-2010 - 9005 0093 VideOh! AVC-2410 - 0803 iTVC15 MPEG-2 Encoder - 0070 4000 WinTV PVR-350 - 0070 4001 WinTV PVR-250 - 0070 4800 WinTV PVR-350 (V1) - 12ab 0000 MPG160 - 1461 a3ce M179 - 1461 a3cf M179 -4468 Bridgeport machines -4594 Cogetec Informatique Inc -45fb Baldor Electric Company -4624 Budker Institute of Nuclear Physics - adc1 ADC200ME High speed ADC - de01 DL200ME High resolution delay line PCI based card - de02 DL200ME Middle resolution delay line PCI based card -4680 Umax Computer Corp -4843 Hercules Computer Technology Inc -4916 RedCreek Communications Inc - 1960 RedCreek PCI adapter -4943 Growth Networks -494f ACCES I/O Products, Inc. - 0520 PCI-IDO-48 - 0920 PCI-IDI-48 - 0c50 PCI-DIO-24H - 0c51 PCI-DIO-24D - 0c60 PCI-DIO-48(H) - 0c68 PCI-DIO-72 - 0c70 PCI-DIO-96 - 0c78 PCI-DIO-120 - 0dc8 PCI-IDIO-16 - 0e50 PCI-DIO-24S - 0e51 PCI-DIO-24H(C) - 0e52 PCI-DIO-24D(C) - 0e60 PCI-DIO-48S(H) - 0e61 P104-DIO-24S - 0f00 PCI-IIRO-8 - 0f01 LPCI-IIRO-8 - 0f08 PCI-IIRO-16 - 1050 PCI-422/485-2 - 1058 PCI-COM422/4 - 1059 PCI-COM485/4 - 1068 PCI-COM422/8 - 1069 PCI-COM485/8 - 1088 PCI-COM232/1 - 1090 PCI-COM232/2 - 10a8 P104-COM232-8 - 10c9 PCI-COM-1S - 10d0 PCI-COM2S - 10e8 PCI-COM-8SM - 1148 PCI-ICM-1S - 1150 PCI-ICM-2S - 1158 PCI-ICM422/4 - 1159 PCI-ICM485/4 - 1250 PCI-WDG-2S - 12d0 PCI-WDG-IMPAC - 22c0 PCI-WDG-CSM - 2c50 PCI-DIO-96CT - 2c58 PCI-DIO-96C3 - 5ed0 PCI-DAC - 6c90 PCI-DA12-2 - 6c98 PCI-DA12-4 - 6ca0 PCI-DA12-6 - 6ca8 PCI-DA12-8 - 6ca9 PCI-DA12-8V - 6cb0 PCI-DA12-16 - 6cb1 PCI-DA12-16V - 8ef0 P104-FAS16-16 - aca8 PCI-AI12-16 - aca9 PCI-AI12-16A - eca8 PCI-AIO12-16 - eca9 PCI-A12-16 - ecaa PCI-A12-16A - ece8 PCI-A16-16 -4978 Axil Computer Inc -4a14 NetVin - 5000 NV5000SC - 4a14 5000 RT8029-Based Ethernet Adapter -4b10 Buslogic Inc. -4c48 LUNG HWA Electronics -4c53 SBS Technologies - 0000 PLUSTEST device - 4c53 3000 PLUSTEST card (PC104+) - 4c53 3001 PLUSTEST card (PMC) - 0001 PLUSTEST-MM device - 4c53 3002 PLUSTEST-MM card (PMC) -4ca1 Seanix Technology Inc -4d51 MediaQ Inc. - 0200 MQ-200 -4d54 Microtechnica Co Ltd -4d56 MATRIX VISION GmbH - 0000 [mvHYPERION-CLe/CLb] CameraLink PCI Express x1 Frame Grabber - 0001 [mvHYPERION-CLf/CLm] CameraLink PCI Express x4 Frame Grabber - 0010 [mvHYPERION-16R16/-32R16] 16 Video Channel PCI Express x4 Frame Grabber -4ddc ILC Data Device Corp - 0100 DD-42924I5-300 (ARINC 429 Data Bus) - 0801 BU-65570I1 MIL-STD-1553 Test and Simulation - 0802 BU-65570I2 MIL-STD-1553 Test and Simulation - 0811 BU-65572I1 MIL-STD-1553 Test and Simulation - 0812 BU-65572I2 MIL-STD-1553 Test and Simulation - 0881 BU-65570T1 MIL-STD-1553 Test and Simulation - 0882 BU-65570T2 MIL-STD-1553 Test and Simulation - 0891 BU-65572T1 MIL-STD-1553 Test and Simulation - 0892 BU-65572T2 MIL-STD-1553 Test and Simulation - 0901 BU-65565C1 MIL-STD-1553 Data Bus - 0902 BU-65565C2 MIL-STD-1553 Data Bus - 0903 BU-65565C3 MIL-STD-1553 Data Bus - 0904 BU-65565C4 MIL-STD-1553 Data Bus - 0b01 BU-65569I1 MIL-STD-1553 Data Bus - 0b02 BU-65569I2 MIL-STD-1553 Data Bus - 0b03 BU-65569I3 MIL-STD-1553 Data Bus - 0b04 BU-65569I4 MIL-STD-1553 Data Bus -5045 University of Toronto - 4243 BLASTbus PCI Interface Card v1 -5046 GemTek Technology Corporation - 1001 PCI Radio -5053 Voyetra Technologies - 2010 Daytona Audio Adapter -50b2 TerraTec Electronic GmbH - 1111 Terratec XLerate -5136 S S Technologies -5143 Qualcomm Inc -5145 Ensoniq (Old) - 3031 Concert AudioPCI -5168 Animation Technologies Inc. - 0300 FlyDVB-S - 0301 FlyDVB-T -5301 Alliance Semiconductor Corp. - 0001 ProMotion aT3D -5333 S3 Inc. - 0551 Plato/PX (system) - 5631 86c325 [ViRGE] - 8800 86c866 [Vision 866] - 8801 86c964 [Vision 964] - 8810 86c764_0 [Trio 32 vers 0] - 8811 86c764/765 [Trio32/64/64V+] - 8812 86cM65 [Aurora64V+] - 8813 86c764_3 [Trio 32/64 vers 3] - 8814 86c767 [Trio 64UV+] - 8815 86cM65 [Aurora 128] - 883d 86c988 [ViRGE/VX] - 8870 FireGL - 8880 86c868 [Vision 868 VRAM] vers 0 - 8881 86c868 [Vision 868 VRAM] vers 1 - 8882 86c868 [Vision 868 VRAM] vers 2 - 8883 86c868 [Vision 868 VRAM] vers 3 - 88b0 86c928 [Vision 928 VRAM] vers 0 - 88b1 86c928 [Vision 928 VRAM] vers 1 - 88b2 86c928 [Vision 928 VRAM] vers 2 - 88b3 86c928 [Vision 928 VRAM] vers 3 - 88c0 86c864 [Vision 864 DRAM] vers 0 - 88c1 86c864 [Vision 864 DRAM] vers 1 - 88c2 86c864 [Vision 864-P DRAM] vers 2 - 88c3 86c864 [Vision 864-P DRAM] vers 3 - 88d0 86c964 [Vision 964 VRAM] vers 0 - 88d1 86c964 [Vision 964 VRAM] vers 1 - 88d2 86c964 [Vision 964-P VRAM] vers 2 - 88d3 86c964 [Vision 964-P VRAM] vers 3 - 88f0 86c968 [Vision 968 VRAM] rev 0 - 88f1 86c968 [Vision 968 VRAM] rev 1 - 88f2 86c968 [Vision 968 VRAM] rev 2 - 88f3 86c968 [Vision 968 VRAM] rev 3 - 8900 86c755 [Trio 64V2/DX] - 5333 8900 86C775 Trio64V2/DX - 8901 86c775/86c785 [Trio 64V2/DX or /GX] - 5333 8901 86C775 Trio64V2/DX, 86C785 Trio64V2/GX - 8902 Plato/PX - 8903 Trio 3D business multimedia - 8904 Trio 64 3D - 1014 00db Integrated Trio3D - 4843 314a Terminator 128/3D GLH - 5333 8904 86C365 Trio3D AGP - 8905 Trio 64V+ family - 8906 Trio 64V+ family - 8907 Trio 64V+ family - 8908 Trio 64V+ family - 8909 Trio 64V+ family - 890a Trio 64V+ family - 890b Trio 64V+ family - 890c Trio 64V+ family - 890d Trio 64V+ family - 890e Trio 64V+ family - 890f Trio 64V+ family - 8a01 ViRGE/DX or /GX - 0e11 b032 ViRGE/GX - 10b4 1617 Nitro 3D - 10b4 1717 Nitro 3D - 5333 8a01 ViRGE/DX - 8a10 ViRGE/GX2 - 1092 8a10 Stealth 3D 4000 - 8a13 86c368 [Trio 3D/2X] - 5333 8a13 Trio3D/2X - 8a20 86c794 [Savage 3D] - 5333 8a20 86C391 Savage3D - 8a21 86c390 [Savage 3D/MV] - 5333 8a21 86C390 Savage3D/MV - 8a22 Savage 4 - 1033 8068 Savage 4 - 1033 8069 Savage 4 - 1033 8110 Savage 4 LT - 105d 0018 SR9 8Mb SDRAM - 105d 002a SR9 Pro 16Mb SDRAM - 105d 003a SR9 Pro 32Mb SDRAM - 105d 092f SR9 Pro+ 16Mb SGRAM - 1092 4207 Stealth III S540 - 1092 4800 Stealth III S540 - 1092 4807 SpeedStar A90 - 1092 4808 Stealth III S540 - 1092 4809 Stealth III S540 - 1092 480e Stealth III S540 - 1092 4904 Stealth III S520 - 1092 4905 SpeedStar A200 - 1092 4a09 Stealth III S540 - 1092 4a0b Stealth III S540 Xtreme - 1092 4a0f Stealth III S540 - 1092 4e01 Stealth III S540 - 1102 101d 3d Blaster Savage 4 - 1102 101e 3d Blaster Savage 4 - 5333 8100 86C394-397 Savage4 SDRAM 100 - 5333 8110 86C394-397 Savage4 SDRAM 110 - 5333 8125 86C394-397 Savage4 SDRAM 125 - 5333 8143 86C394-397 Savage4 SDRAM 143 - 5333 8a22 86C394-397 Savage4 - 5333 8a2e 86C394-397 Savage4 32bit - 5333 9125 86C394-397 Savage4 SGRAM 125 - 5333 9143 86C394-397 Savage4 SGRAM 143 - 8a23 Savage 4 - 8a25 ProSavage PM133 - 0303 0303 D9840-60001 [Brio BA410 Motherboard] - 8a26 ProSavage KM133 - 8c00 ViRGE/M3 - 8c01 ViRGE/MX - 1179 0001 ViRGE/MX - 8c02 ViRGE/MX+ - 8c03 ViRGE/MX+MV - 8c10 86C270-294 Savage/MX-MV - 8c11 82C270-294 Savage/MX - 8c12 86C270-294 Savage/IX-MV - 1014 017f ThinkPad T20/T22 - 1179 0001 86C584 SuperSavage/IXC Toshiba - 8c13 86C270-294 Savage/IX - 1179 0001 Magnia Z310 - 8c22 SuperSavage MX/128 - 8c24 SuperSavage MX/64 - 8c26 SuperSavage MX/64C - 8c2a SuperSavage IX/128 SDR - 8c2b SuperSavage IX/128 DDR - 8c2c SuperSavage IX/64 SDR - 8c2d SuperSavage IX/64 DDR - 8c2e SuperSavage IX/C SDR - 1014 01fc ThinkPad T23 - 8c2f SuperSavage IX/C DDR - 8d01 86C380 [ProSavageDDR K4M266] - 8d02 VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK) - 8d03 VT8751 [ProSavageDDR P4M266] - 8d04 VT8375 [ProSavage8 KM266/KL266] - 8e48 Chrome S27 PCIE - 5333 0130 Chrome S27 256M DDR2 - 9102 86C410 Savage 2000 - 1092 5932 Viper II Z200 - 1092 5934 Viper II Z200 - 1092 5952 Viper II Z200 - 1092 5954 Viper II Z200 - 1092 5a35 Viper II Z200 - 1092 5a37 Viper II Z200 - 1092 5a55 Viper II Z200 - 1092 5a57 Viper II Z200 - ca00 SonicVibes -544c Teralogic Inc - 0350 TL880-based HDTV/ATSC tuner -5455 Technische University Berlin - 4458 S5933 -5456 GoTView -5519 Cnet Technologies, Inc. -5544 Dunord Technologies - 0001 I-30xx Scanner Interface -5555 Genroco, Inc - 0003 TURBOstor HFP-832 [HiPPI NIC] -5654 VoiceTronix Pty Ltd -5700 Netpower -584d AuzenTech Co., Ltd. -5851 Exacq Technologies -5853 XenSource, Inc. - 0001 Xen Platform Device -5ace Beholder International Ltd. - 5050 BeholdTV 505 FM -631c SmartInfra Ltd - 1652 PXI-1652 Signal Generator - 2504 PXI-2504 Signal Interrogator -6356 UltraStor -6374 c't Magazin fuer Computertechnik - 6773 GPPCI -6409 Logitec Corp. -6549 Teradici Corp. -6666 Decision Computer International Co. - 0001 PCCOM4 - 0002 PCCOM8 - 0004 PCCOM2 - 0101 PCI 8255/8254 I/O Card - 0200 12-bit AD/DA Card - 0201 14-bit AD/DA Card - 1011 Industrial Card - 1021 8 photo couple 8 relay Card - 1022 4 photo couple 4 relay Card - 1025 16 photo couple 16 relay Card - 4000 WatchDog Card -6900 Qumranet -7063 pcHDTV - 2000 HD-2000 - 3000 HD-3000 - 5500 HD5500 HDTV -7284 HT OMEGA Inc. -7604 O.N. Electronic Co Ltd. -7bde MIDAC Corporation -7fed PowerTV -8008 Quancom Electronic GmbH - 0010 WDOG1 [PCI-Watchdog 1] - 0011 PWDOG2 [PCI-Watchdog 2] - 0015 Clock77/PCI & Clock77/PCIe (DCF-77 receiver) -# Wrong ID used in subsystem ID of AsusTek PCI-USB2 PCI card. -807d Asustek Computer, Inc. -8086 Intel Corporation - 0007 82379AB - 0008 Extended Express System Support Controller - 0039 21145 Fast Ethernet - 0040 Clarkdake DRAM Controller - 0041 Clarkdale PCI Express x16 Root Port - 0042 Clarkdale Integrated Graphics Controller - 0043 Clarkdale Secondary PCI Express Root Port - 0044 Arrandale DRAM Controller - 0045 Arrandale PCI Express x16 Root Port - 0046 Arrandale Integrated Graphics Controller - 0047 Arrandale Secondary PCI Express Root Port - 0048 Arrandale/Clarkdale DRAM Controller - 0050 Arrandale/Clarkdale Thermal Management Controller - 0082 WiFi Link 6000 Series - 0083 WiFi Link 100 Series - 0084 WiFi Link 100 Series - 0085 WiFi Link 6000 Series - 0086 WiMAX/WiFi Link 6050 Series - 0087 WiMAX/WiFi Link 6050 Series - 0088 WiMAX/WiFi Link 6050 Series - 0089 WiMAX/WiFi Link 6050 Series - 0122 82437FX - 0309 80303 I/O Processor PCI-to-PCI Bridge - 030d 80312 I/O Companion Chip PCI-to-PCI Bridge - 0326 6700/6702PXH I/OxAPIC Interrupt Controller A - 1775 1100 CR11/VR11 Single Board Computer - 0327 6700PXH I/OxAPIC Interrupt Controller B - 1775 1100 CR11/VR11 Single Board Computer - 0329 6700PXH PCI Express-to-PCI Bridge A - 032a 6700PXH PCI Express-to-PCI Bridge B - 032c 6702PXH PCI Express-to-PCI Bridge A - 0330 80332 [Dobson] I/O processor (A-Segment Bridge) - 0331 80332 [Dobson] I/O processor (A-Segment IOAPIC) - 0332 80332 [Dobson] I/O processor (B-Segment Bridge) - 0333 80332 [Dobson] I/O processor (B-Segment IOAPIC) - 0334 80332 [Dobson] I/O processor (ATU) - 0335 80331 [Lindsay] I/O processor (PCI-X Bridge) - 0336 80331 [Lindsay] I/O processor (ATU) - 0340 41210 [Lanai] Serial to Parallel PCI Bridge (A-Segment Bridge) - 0341 41210 [Lanai] Serial to Parallel PCI Bridge (B-Segment Bridge) - 0370 80333 Segment-A PCI Express-to-PCI Express Bridge - 0371 80333 A-Bus IOAPIC - 0372 80333 Segment-B PCI Express-to-PCI Express Bridge - 0373 80333 B-Bus IOAPIC - 0374 80333 Address Translation Unit - 0482 82375EB/SB PCI to EISA Bridge - 0483 82424TX/ZX [Saturn] CPU to PCI bridge - 0484 82378ZB/IB, 82379AB (SIO, SIO.A) PCI to ISA Bridge - 0486 82425EX/ZX [Aries] PCIset with ISA bridge - 04a3 82434LX/NX [Mercury/Neptune] Processor to PCI bridge - 04d0 82437FX [Triton FX] - 0500 E8870 Processor bus control - 0501 E8870 Memory controller -# and registers common to both SPs - 0502 E8870 Scalability Port 0 -# and global performance monitoring - 0503 E8870 Scalability Port 1 - 0510 E8870IO Hub Interface Port 0 registers (8-bit compatibility port) - 0511 E8870IO Hub Interface Port 1 registers - 0512 E8870IO Hub Interface Port 2 registers - 0513 E8870IO Hub Interface Port 3 registers - 0514 E8870IO Hub Interface Port 4 registers - 0515 E8870IO General SIOH registers - 0516 E8870IO RAS registers - 0530 E8870SP Scalability Port 0 registers - 0531 E8870SP Scalability Port 1 registers - 0532 E8870SP Scalability Port 2 registers - 0533 E8870SP Scalability Port 3 registers - 0534 E8870SP Scalability Port 4 registers - 0535 E8870SP Scalability Port 5 registers -# (bi-interleave 0) and global registers that are neither per-port nor per-interleave - 0536 E8870SP Interleave registers 0 and 1 -# (bi-interleave 1) - 0537 E8870SP Interleave registers 2 and 3 - 0600 RAID Controller - 8086 0136 SRCU31L - 8086 01af SRCZCR - 8086 01c1 ICP Vortex GDT8546RZ - 8086 01f7 SCRU32 -# uninitialized SRCU32 RAID Controller - 061f 80303 I/O Processor - 0960 80960RP (i960RP) Microprocessor/Bridge - 0962 80960RM (i960RM) Bridge - 0964 80960RP (i960RP) Microprocessor/Bridge - 1000 82542 Gigabit Ethernet Controller (Fiber) - 0e11 b0df NC6132 Gigabit Ethernet Adapter (1000-SX) - 0e11 b0e0 NC6133 Gigabit Ethernet Adapter (1000-LX) - 0e11 b123 NC6134 Gigabit Ethernet Adapter (1000-LX) - 1014 0119 Netfinity Gigabit Ethernet SX Adapter - 8086 1000 PRO/1000 Gigabit Server Adapter - 1001 82543GC Gigabit Ethernet Controller (Fiber) - 0e11 004a NC6136 Gigabit Server Adapter - 1014 01ea Netfinity Gigabit Ethernet SX Adapter - 8086 1002 PRO/1000 F Server Adapter - 8086 1003 PRO/1000 F Server Adapter - 1002 Pro 100 LAN+Modem 56 Cardbus II - 8086 200e Pro 100 LAN+Modem 56 Cardbus II - 8086 2013 Pro 100 SR Mobile Combo Adapter - 8086 2017 Pro 100 S Combo Mobile Adapter - 1004 82543GC Gigabit Ethernet Controller (Copper) - 0e11 0049 NC7132 Gigabit Upgrade Module - 0e11 b1a4 NC7131 Gigabit Server Adapter - 1014 10f2 Gigabit Ethernet Server Adapter - 8086 1004 PRO/1000 T Server Adapter - 8086 2004 PRO/1000 T Server Adapter - 1008 82544EI Gigabit Ethernet Controller (Copper) - 1014 0269 iSeries 1000/100/10 Ethernet Adapter - 1028 011b PowerEdge 1650/2550 - 1028 011c PRO/1000 XT Network Connection - 8086 1107 PRO/1000 XT Server Adapter - 8086 2107 PRO/1000 XT Server Adapter - 8086 2110 PRO/1000 XT Desktop Adapter - 8086 3108 PRO/1000 XT Network Connection - 1009 82544EI Gigabit Ethernet Controller (Fiber) - 1014 0268 iSeries Gigabit Ethernet Adapter - 8086 1109 PRO/1000 XF Server Adapter - 8086 2109 PRO/1000 XF Server Adapter - 100a 82540EM Gigabit Ethernet Controller - 100c 82544GC Gigabit Ethernet Controller (Copper) - 8086 1112 PRO/1000 T Desktop Adapter - 8086 2112 PRO/1000 T Desktop Adapter - 100d 82544GC Gigabit Ethernet Controller (LOM) - 1028 0123 PRO/1000 XT Network Connection - 1079 891f 82544GC Based Network Connection - 4c53 1080 CT8 mainboard - 8086 110d 82544GC Based Network Connection - 100e 82540EM Gigabit Ethernet Controller - 1014 0265 PRO/1000 MT Network Connection - 1014 0267 PRO/1000 MT Network Connection - 1014 026a PRO/1000 MT Network Connection - 1028 002e Optiplex GX260 - 1028 0134 PowerEdge 600SC - 1028 0151 Optiplex GX270 - 107b 8920 PRO/1000 MT Desktop Adapter - 8086 001e PRO/1000 MT Desktop Adapter - 8086 002e PRO/1000 MT Desktop Adapter - 8086 1376 PRO/1000 GT Desktop Adapter - 8086 1476 PRO/1000 GT Desktop Adapter - 100f 82545EM Gigabit Ethernet Controller (Copper) - 1014 0269 iSeries 1000/100/10 Ethernet Adapter - 1014 028e PRO/1000 MT Network Connection - 15ad 0750 PRO/1000 MT Single Port Adapter - 8086 1000 PRO/1000 MT Network Connection - 8086 1001 PRO/1000 MT Server Adapter - 1010 82546EB Gigabit Ethernet Controller (Copper) - 0e11 00db NC7170 Gigabit Server Adapter - 1014 027c PRO/1000 MT Dual Port Network Adapter - 15ad 0760 PRO/1000 MT Dual Port Adapter - 18fb 7872 RESlink-X - 1fc1 0026 Niagara 2260 Bypass Card - 4c53 1080 CT8 mainboard - 4c53 10a0 CA3/CR3 mainboard - 8086 1011 PRO/1000 MT Dual Port Server Adapter - 8086 1012 PRO/1000 MT Dual Port Server Adapter - 8086 101a PRO/1000 MT Dual Port Network Connection - 8086 3424 SE7501HG2 Mainboard - 1011 82545EM Gigabit Ethernet Controller (Fiber) - 1014 0268 iSeries Gigabit Ethernet Adapter - 8086 1002 PRO/1000 MF Server Adapter - 8086 1003 PRO/1000 MF Server Adapter (LX) - 1012 82546EB Gigabit Ethernet Controller (Fiber) - 0e11 00dc NC6170 Gigabit Server Adapter - 8086 1012 PRO/1000 MF Dual Port Server Adapter - 1013 82541EI Gigabit Ethernet Controller - 8086 0013 PRO/1000 MT Network Connection - 8086 1013 PRO/1000 MT Network Connection - 8086 1113 PRO/1000 MT Desktop Adapter - 1014 82541ER Gigabit Ethernet Controller - 8086 0014 PRO/1000 MT Desktop Connection - 8086 1014 PRO/1000 MT Network Connection - 1015 82540EM Gigabit Ethernet Controller (LOM) - 8086 1015 PRO/1000 MT Mobile Connection - 1016 82540EP Gigabit Ethernet Controller (Mobile) - 1014 052c PRO/1000 MT Mobile Connection - 1179 0001 PRO/1000 MT Mobile Connection - 8086 1016 PRO/1000 MT Mobile Connection - 1017 82540EP Gigabit Ethernet Controller - 8086 1017 PR0/1000 MT Desktop Connection - 1018 82541EI Gigabit Ethernet Controller - 8086 1018 PRO/1000 MT Mobile Connection - 1019 82547EI Gigabit Ethernet Controller - 1458 1019 GA-8IPE1000 Pro2 motherboard (865PE) - 1458 e000 Intel Gigabit Ethernet (Kenai II) - 8086 1019 ASUS PC-DL Deluxe mainboard (Socket 603) - 8086 301f D865PERL mainboard - 8086 3025 D875PBZ motherboard - 8086 302c Intel 82865G Mainboard (D865GBF) - 8086 3427 S875WP1-E mainboard - 101a 82547EI Gigabit Ethernet Controller (Mobile) - 8086 101a PRO/1000 CT Mobile Connection - 101d 82546EB Gigabit Ethernet Controller - 8086 1000 PRO/1000 MT Quad Port Server Adapter - 101e 82540EP Gigabit Ethernet Controller (Mobile) - 1014 0549 Thinkpad - 1179 0001 PRO/1000 MT Mobile Connection - 8086 101e PRO/1000 MT Mobile Connection - 1026 82545GM Gigabit Ethernet Controller - 1028 0169 Precision 470 - 8086 1000 PRO/1000 MT Server Connection - 8086 1001 PRO/1000 MT Server Adapter - 8086 1002 PRO/1000 MT Server Adapter - 8086 1003 PRO/1000 GT Server Adapter - 8086 1026 PRO/1000 MT Server Connection - 1027 82545GM Gigabit Ethernet Controller - 103c 3103 NC310F PCI-X Gigabit Server Adapter - 8086 1001 PRO/1000 MF Server Adapter(LX) - 8086 1002 PRO/1000 MF Server Adapter(LX) - 8086 1003 PRO/1000 MF Server Adapter(LX) - 8086 1027 PRO/1000 MF Server Adapter - 1028 82545GM Gigabit Ethernet Controller - 8086 1028 PRO/1000 MB Server Connection - 1029 82559 Ethernet Controller - 1030 82559 InBusiness 10/100 - 1031 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller - 1014 0209 ThinkPad A/T/X Series - 104d 80e7 Vaio PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 104d 813c Vaio PCG-GRV616G - 107b 5350 EtherExpress PRO/100 VE - 1179 0001 EtherExpress PRO/100 VE - 144d c000 EtherExpress PRO/100 VE - 144d c001 EtherExpress PRO/100 VE - 144d c003 EtherExpress PRO/100 VE - 144d c006 vpr Matrix 170B4 - 1032 82801CAM (ICH3) PRO/100 VE Ethernet Controller - 1033 82801CAM (ICH3) PRO/100 VM (LOM) Ethernet Controller - 1034 82801CAM (ICH3) PRO/100 VM Ethernet Controller - 1035 82801CAM (ICH3)/82562EH (LOM) Ethernet Controller - 1036 82801CAM (ICH3) 82562EH Ethernet Controller - 1037 82801CAM (ICH3) Chipset Ethernet Controller - 1038 82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller - 0e11 0098 Evo N600c - 1039 82801DB PRO/100 VE (LOM) Ethernet Controller - 1014 0267 NetVista A30p - 114a 0582 PC8 onboard ethernet ETH1 - 103a 82801DB PRO/100 VE (CNR) Ethernet Controller - 103b 82801DB PRO/100 VM (LOM) Ethernet Controller - 103c 82801DB PRO/100 VM (CNR) Ethernet Controller - 103d 82801DB PRO/100 VE (MOB) Ethernet Controller - 1014 0522 ThinkPad R40 - 8086 103d 82562EZ 10/100 Ethernet Controller - 103e 82801DB PRO/100 VM (MOB) Ethernet Controller - 1040 536EP Data Fax Modem - 16be 1040 V.9X DSP Data Fax Modem - 1043 PRO/Wireless LAN 2100 3B Mini PCI Adapter - 103c 08b0 tc1100 tablet - 8086 2522 Samsung X10/P30 integrated WLAN - 8086 2527 MIM2000/Centrino - 8086 2561 Dell Latitude D800 - 8086 2581 Toshiba Satellite M10 - 1048 82597EX 10GbE Ethernet Controller - 8086 a01f PRO/10GbE LR Server Adapter - 8086 a11f PRO/10GbE LR Server Adapter - 1049 82566MM Gigabit Network Connection - 103c 30c1 Compaq 6910p - 17aa 20b9 ThinkPad T61 - 104a 82566DM Gigabit Network Connection - 104b 82566DC Gigabit Network Connection - 104c 82562V 10/100 Network Connection - 104d 82566MC Gigabit Network Connection - 1050 82562EZ 10/100 Ethernet Controller - 1028 019d Dimension 3000 - 1462 728c 865PE Neo2 (MS-6728) - 1462 758c MS-6758 (875P Neo) - 8086 3020 D865PERL mainboard - 8086 302f Desktop Board D865GBF - 8086 3427 S875WP1-E mainboard - 1051 82801EB/ER (ICH5/ICH5R) integrated LAN Controller - 1052 PRO/100 VM Network Connection - 1053 PRO/100 VM Network Connection - 1054 PRO/100 VE Network Connection - 1055 PRO/100 VM Network Connection - 1056 PRO/100 VE Network Connection - 1057 PRO/100 VE Network Connection - 1059 82551QM Ethernet Controller - 105b 82546GB Gigabit Ethernet Controller (Copper) - 105e 82571EB Gigabit Ethernet Controller - 103c 7044 NC360T PCI Express Dual Port Gigabit Server Adapter - 103c 704e Dual Port 1000Base-T (PCIe) [AD337A] - 1775 1100 CR11/VR11 Single Board Computer - 1775 6003 Telum GE-QT - 8086 005e PRO/1000 PT Dual Port Server Connection - 8086 105e PRO/1000 PT Dual Port Network Connection - 8086 10d5 82571PT Gigabit PT Quad Port Server ExpressModule - 8086 115e PRO/1000 PT Dual Port Server Adapter - 8086 125e PRO/1000 PT Dual Port Server Adapter - 8086 135e PRO/1000 PT Dual Port Server Adapter - 105f 82571EB Gigabit Ethernet Controller - 103c 704f Dual Port 1000Base-SX (PCIe) [AD338A] - 8086 005a PRO/1000 PF Dual Port Server Adapter - 8086 115f PRO/1000 PF Dual Port Server Adapter - 8086 125f PRO/1000 PF Dual Port Server Adapter - 8086 135f PRO/1000 PF Dual Port Server Adapter - 1060 82571EB Gigabit Ethernet Controller - 8086 0060 PRO/1000 PB Dual Port Server Connection - 8086 1060 PRO/1000 PB Dual Port Server Connection - 1064 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller - 1043 80f8 P5GD1-VW Mainboard - 1065 82562ET/EZ/GT/GZ - PRO/100 VE Ethernet Controller - 1066 82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller - 1067 82562 EM/EX/GX - PRO/100 VM Ethernet Controller - 1068 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile - 1069 82562EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller Mobile - 106a 82562G - PRO/100 VE (LOM) Ethernet Controller - 106b 82562G - PRO/100 VE Ethernet Controller Mobile - 1075 82547GI Gigabit Ethernet Controller - 1028 0165 PowerEdge 750 - 8086 0075 PRO/1000 CT Network Connection - 8086 1075 PRO/1000 CT Network Connection - 1076 82541GI Gigabit Ethernet Controller - 1028 0165 PRO/1000 MT Network Connection - 1028 016d PRO/1000 MT Network Connection - 1028 019a PRO/1000 MT Network Connection - 1028 106d PRO/1000 MT Network Connection - 8086 0076 PRO/1000 MT Network Connection - 8086 1076 PRO/1000 MT Network Connection - 8086 1176 PRO/1000 MT Desktop Adapter - 8086 1276 PRO/1000 MT Network Adapter - 1077 82541GI Gigabit Ethernet Controller - 1179 0001 PRO/1000 MT Mobile Connection - 8086 0077 PRO/1000 MT Mobile Connection - 8086 1077 PRO/1000 MT Mobile Connection - 1078 82541ER Gigabit Ethernet Controller - 8086 1078 82541ER-based Network Connection - 1079 82546GB Gigabit Ethernet Controller - 103c 12a6 Dual Port 1000Base-T [A9900A] - 103c 12cf Core Dual Port 1000Base-T [AB352A] - 1775 10d0 V5D Single Board Computer Gigabit Ethernet - 1775 ce90 CE9 - 1fc1 0027 Niagara 2261 Failover NIC - 4c53 1090 Cx9 / Vx9 mainboard - 4c53 10b0 CL9 mainboard - 8086 0079 PRO/1000 MT Dual Port Network Connection - 8086 1079 PRO/1000 MT Dual Port Network Connection - 8086 1179 PRO/1000 MT Dual Port Server Adapter - 8086 117a PRO/1000 MT Dual Port Server Adapter - 107a 82546GB Gigabit Ethernet Controller - 103c 12a8 Dual Port 1000base-SX [A9899A] - 8086 107a PRO/1000 MF Dual Port Server Adapter - 8086 127a PRO/1000 MF Dual Port Server Adapter - 107b 82546GB Gigabit Ethernet Controller - 8086 007b PRO/1000 MB Dual Port Server Connection - 8086 107b PRO/1000 MB Dual Port Server Connection - 107c 82541PI Gigabit Ethernet Controller - 8086 1376 PRO/1000 GT Desktop Adapter - 8086 1476 PRO/1000 GT Desktop Adapter - 107d 82572EI Gigabit Ethernet Controller (Copper) - 8086 1082 PRO/1000 PT Server Adapter - 8086 1084 PRO/1000 PT Server Adapter - 8086 1092 PRO/1000 PT Server Adapter - 107e 82572EI Gigabit Ethernet Controller (Fiber) - 8086 1084 PRO/1000 PF Server Adapter - 8086 1085 PRO/1000 PF Server Adapter - 8086 1094 PRO/1000 PF Server Adapter - 107f 82572EI Gigabit Ethernet Controller - 1080 FA82537EP 56K V.92 Data/Fax Modem PCI - 1081 631xESB/632xESB LAN Controller Copper - 1082 631xESB/632xESB LAN Controller fiber - 1083 631xESB/632xESB LAN Controller SERDES - 1084 631xESB/632xESB IDE Redirection - 1085 631xESB/632xESB Serial Port Redirection - 1086 631xESB/632xESB IPMI/KCS0 - 1087 631xESB/632xESB UHCI Redirection - 1089 631xESB/632xESB BT - 108a 82546GB Gigabit Ethernet Controller - 8086 108a PRO/1000 P Dual Port Server Adapter - 8086 118a PRO/1000 P Dual Port Server Adapter - 108b 82573V Gigabit Ethernet Controller (Copper) - 1462 176c on board on MSI 945P - NEO (MS-7176) - 108c 82573E Gigabit Ethernet Controller (Copper) - 108e 82573E KCS (Active Management) - 108f Active Management Technology - SOL - 1091 PRO/100 VM Network Connection - 1092 PRO/100 VE Network Connection - 1093 PRO/100 VM Network Connection - 1094 PRO/100 VE Network Connection - 1095 PRO/100 VE Network Connection - 1096 80003ES2LAN Gigabit Ethernet Controller (Copper) - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 1097 631xESB/632xESB DPT LAN Controller (Fiber) - 1098 80003ES2LAN Gigabit Ethernet Controller (Serdes) - 1099 82546GB Gigabit Ethernet Controller (Copper) - 8086 1099 PRO/1000 GT Quad Port Server Adapter - 109a 82573L Gigabit Ethernet Controller - 1179 ff10 PRO/1000 PL - 17aa 2001 ThinkPad T60 - 17aa 207e ThinkPad X60s - 8086 109a PRO/1000 PL Network Connection - 8086 309c DeskTop Board D945GTP - 8086 30a5 DeskTop Board D975XBX - 109b 82546GB PRO/1000 GF Quad Port Server Adapter - 109e 82597EX 10GbE Ethernet Controller - 8086 a01f PRO/10GbE CX4 Server Adapter - 8086 a11f PRO/10GbE CX4 Server Adapter - 10a0 82571EB PRO/1000 AT Quad Port Bypass Adapter - 10a1 82571EB PRO/1000 AF Quad Port Bypass Adapter - 10a4 82571EB Gigabit Ethernet Controller - 8086 10a4 PRO/1000 PT Quad Port Server Adapter - 8086 11a4 PRO/1000 PT Quad Port Server Adapter - 10a5 82571EB Gigabit Ethernet Controller (Fiber) - 8086 10a5 PRO/1000 PF Quad Port Server Adapter - 8086 10a6 PRO/1000 PF Quad Port Server Adapter - 10a7 82575EB Gigabit Network Connection - 8086 10a8 82575EB Gigabit Riser Card - 10a9 82575EB Gigabit Backplane Connection - 10b0 82573L PRO/1000 PL Network Connection - 10b2 82573V PRO/1000 PM Network Connection - 10b3 82573E PRO/1000 PM Network Connection - 10b4 82573L PRO/1000 PL Network Connection - 10b5 82546GB Gigabit Ethernet Controller (Copper) - 103c 3109 NC340T PCI-X Quad-port Gigabit Server Adapter - 8086 1099 PRO/1000 GT Quad Port Server Adapter - 8086 1199 PRO/1000 GT Quad Port Server Adapter - 10b6 82598 10GbE PCI-Express Ethernet Controller - 10b9 82572EI Gigabit Ethernet Controller (Copper) - 103c 704a HP 110T PCIe Gigabit Server Adapter - 8086 1083 PRO/1000 PT Desktop Adapter - 8086 1093 PRO/1000 PT Desktop Adapter - 10ba 80003ES2LAN Gigabit Ethernet Controller (Copper) - 10bb 80003ES2LAN Gigabit Ethernet Controller (Serdes) - 10bc 82571EB Gigabit Ethernet Controller (Copper) - 103c 704b NC364T PCI Express Quad Port Gigabit Server Adapter - 108e 11bc x4 PCI-Express Quad Gigabit Ethernet UTP Low Profile Adapter - 8086 10bc PRO/1000 PT Quad Port LP Server Adapter - 8086 11bc PRO/1000 PT Quad Port LP Server Adapter - 10bd 82566DM-2 Gigabit Network Connection - 1028 0211 OptiPlex 755 - 10be 82567 Gigabit Network Connection - 10bf 82567LF Gigabit Network Connection - 10c0 82562V-2 10/100 Network Connection - 10c2 82562G-2 10/100 Network Connection - 10c3 82562GT-2 10/100 Network Connection - 10c4 82562GT 10/100 Network Connection - 10c5 82562G 10/100 Network Connection - 10c6 82598EB 10-Gigabit AF Dual Port Network Connection - 8086 a05f 10-Gigabit XF SR Dual Port Server Adapter - 8086 a15f 10-Gigabit XF SR Dual Port Server Adapter - 10c7 82598EB 10-Gigabit AF Network Connection - 1014 037f 10-Gigabit XF SR Server Adapter - 1014 0380 10-Gigabit XF LR Server Adapter - 8086 a05f 10-Gigabit XF SR Server Adapter - 8086 a15f 10-Gigabit XF SR Server Adapter - 8086 a16f 10-Gigabit XF SR Server Adapter - 10c8 82598EB 10-Gigabit AT Network Connection - 8086 a10c 10-Gigabit AT Server Adapter - 8086 a11c 10-Gigabit AT Server Adapter - 8086 a12c 10-Gigabit AT Server Adapter - 10c9 82576 Gigabit Network Connection - 103c 31ef NC362i Integrated Dual port Gigabit Server Adapter - 103c 323f NC362i Integrated Dual port Gigabit Server Adapter - 10a9 8028 UV-BaseIO dual-port GbE - 13a3 0037 DS4100 Secure Multi-Gigabit Server Adapter with Compression - 8086 a01c Gigabit ET Dual Port Server Adapter - 8086 a03c Gigabit ET Dual Port Server Adapter - 10ca 82576 Virtual Function - 10cb 82567V Gigabit Network Connection - 10cc 82567LM-2 Gigabit Network Connection - 10cd 82567LF-2 Gigabit Network Connection - 10ce 82567V-2 Gigabit Network Connection - 10d3 82574L Gigabit Network Connection - 103c 3250 NC112T PCI Express single Port Gigabit Server Adapter - 8086 a01f Gigabit CT Desktop Adapter - 10d5 82571PT Gigabit PT Quad Port Server ExpressModule - 10d6 82575GB Gigabit Network Connection - 8086 10d6 Gigabit VT Quad Port Server Adapter - 8086 145a Gigabit VT Quad Port Server Adapter - 8086 147a Gigabit VT Quad Port Server Adapter - 10d9 82571EB Dual Port Gigabit Mezzanine Adapter - 103c 1716 NC360m Dual Port 1GbE BL-c Adapter - 10da 82571EB Quad Port Gigabit Mezzanine Adapter - 103c 1717 NC364m Quad Port 1GbE BL-c Adapter - 10db 82598EB 10-Gigabit Dual Port Network Connection - 10dd 82598EB 10-Gigabit AT CX4 Network Connection - 10de 82567LM-3 Gigabit Network Connection - 10df 82567LF-3 Gigabit Network Connection - 10e1 82598EB 10-Gigabit AF Dual Port Network Connection - 8086 a15f 10-Gigabit SR Dual Port Express Module - 10e2 82575GB Gigabit Network Connection - 8086 10e2 Gigabit VT Quad Port Server Adapter - 10e5 82567LM-4 Gigabit Network Connection - 10e6 82576 Gigabit Network Connection - 8086 a01f Gigabit EF Dual Port Server Adapter - 8086 a02f Gigabit EF Dual Port Server Adapter - 10e7 82576 Gigabit Network Connection - 103c 31ff NC362i Integrated Dual Port BL-c Gigabit Server Adapter - 10e8 82576 Gigabit Network Connection - 8086 a02b Gigabit ET Quad Port Server Adapter - 8086 a02c Gigabit ET Quad Port Server Adapter - 10ea 82577LM Gigabit Network Connection - 10eb 82577LC Gigabit Network Connection - 10ec 82598EB 10-Gigabit AT CX4 Network Connection - 8086 a01f 10-Gigabit CX4 Dual Port Server Adapter - 8086 a11f 10-Gigabit CX4 Dual Port Server Adapter - 10ef 82578DM Gigabit Network Connection - 10f0 82578DC Gigabit Network Connection - 10f1 82598EB 10-Gigabit AF Dual Port Network Connection - 8086 a20f 10-Gigabit AF DA Dual Port Server Adapter - 8086 a21f 10-Gigabit AF DA Dual Port Server Adapter - 10f4 82598EB 10-Gigabit AF Network Connection - 8086 106f 10-Gigabit XF LR Server Adapter - 8086 a06f 10-Gigabit XF LR Server Adapter - 10f5 82567LM Gigabit Network Connection - 10f6 82574L Gigabit Network Connection - 10f7 82599EB 10-Gigabit KX4 Network Connection - 8086 000d Ethernet Mezzanine Adapter X520-KX4-2 - 10fb 82599EB 10-Gigabit Network Connection - 108e 7b11 Ethernet Server Adapter X520-2 - 8086 0002 Ethernet Server Adapter X520-DA2 - 8086 0003 Ethernet Server Adapter X520-2 - 8086 0006 Ethernet Server Adapter X520-1 - 8086 000a Ethernet Server Adapter X520-1 - 8086 000c Ethernet Server Adapter X520-2 - 10fc 82599EB 10-Gigabit Dual Port Network Connection - 10fe 82552 10/100 Network Connection - 1107 PRO/1000 MF Server Adapter (LX) - 1130 82815 815 Chipset Host Bridge and Memory Controller Hub - 1025 1016 Travelmate 612 TX - 1043 8027 TUSL2-C Mainboard - 104d 80df Vaio PCG-FX403 - 8086 4532 D815EEA2 mainboard - 8086 4557 D815EGEW Mainboard - 1131 82815 815 Chipset AGP Bridge - 1132 82815 Chipset Graphics Controller (CGC) - 1025 1016 Travelmate 612 TX - 103c 2001 e-pc 40 - 104d 80df Vaio PCG-FX403 - 8086 4532 D815EEA2 Mainboard - 8086 4541 D815EEA Motherboard - 8086 4557 D815EGEW Mainboard - 1161 82806AA PCI64 Hub Advanced Programmable Interrupt Controller - 8086 1161 82806AA PCI64 Hub APIC - 1162 Xscale 80200 Big Endian Companion Chip - 1200 IXP1200 Network Processor - 172a 0000 AEP SSL Accelerator - 1209 8255xER/82551IT Fast Ethernet Controller - 4c53 1050 CT7 mainboard - 4c53 1051 CE7 mainboard - 4c53 1070 PC6 mainboard - 1221 82092AA PCI to PCMCIA Bridge - 1222 82092AA IDE Controller - 1223 SAA7116 - 1225 82452KX/GX [Orion] - 1226 82596 PRO/10 PCI - 1227 82865 EtherExpress PRO/100A - 1228 82556 EtherExpress PRO/100 Smart - 1229 82557/8/9/0/1 Ethernet Pro 100 - 0e11 3001 82559 Fast Ethernet LOM with Alert on LAN* - 0e11 3002 82559 Fast Ethernet LOM with Alert on LAN* - 0e11 3003 82559 Fast Ethernet LOM with Alert on LAN* - 0e11 3004 82559 Fast Ethernet LOM with Alert on LAN* - 0e11 3005 82559 Fast Ethernet LOM with Alert on LAN* - 0e11 3006 82559 Fast Ethernet LOM with Alert on LAN* - 0e11 3007 82559 Fast Ethernet LOM with Alert on LAN* - 0e11 b01e NC3120 Fast Ethernet NIC - 0e11 b01f NC3122 Fast Ethernet NIC (dual port) - 0e11 b02f NC1120 Ethernet NIC - 0e11 b04a Netelligent 10/100TX NIC with Wake on LAN - 0e11 b0c6 NC3161 Fast Ethernet NIC (embedded, WOL) - 0e11 b0c7 NC3160 Fast Ethernet NIC (embedded) - 0e11 b0d7 NC3121 Fast Ethernet NIC (WOL) - 0e11 b0dd NC3131 Fast Ethernet NIC (dual port) - 0e11 b0de NC3132 Fast Ethernet Module (dual port) - 0e11 b0e1 NC3133 Fast Ethernet Module (100-FX) - 0e11 b134 NC3163 Fast Ethernet NIC (embedded, WOL) - 0e11 b13c NC3162 Fast Ethernet NIC (embedded) - 0e11 b144 NC3123 Fast Ethernet NIC (WOL) - 0e11 b163 NC3134 Fast Ethernet NIC (dual port) - 0e11 b164 NC3135 Fast Ethernet Upgrade Module (dual port) - 0e11 b1a4 NC7131 Gigabit Server Adapter - 1014 005c 82558B Ethernet Pro 10/100 - 1014 01bc 82559 Fast Ethernet LAN On Motherboard - 1014 01f1 10/100 Ethernet Server Adapter - 1014 01f2 10/100 Ethernet Server Adapter - 1014 0207 Ethernet Pro/100 S - 1014 0232 10/100 Dual Port Server Adapter - 1014 023a ThinkPad R30 - 1014 105c Netfinity 10/100 - 1014 2205 ThinkPad A22p - 1014 305c 10/100 EtherJet Management Adapter - 1014 405c 10/100 EtherJet Adapter with Alert on LAN - 1014 505c 10/100 EtherJet Secure Management Adapter - 1014 605c 10/100 EtherJet Secure Management Adapter - 1014 705c 10/100 Netfinity 10/100 Ethernet Security Adapter - 1014 805c 10/100 Netfinity 10/100 Ethernet Security Adapter - 1028 009b 10/100 Ethernet Server Adapter - 1028 00ce 10/100 Ethernet Server Adapter - 1033 8000 PC-9821X-B06 - 1033 8016 PK-UG-X006 - 1033 801f PK-UG-X006 - 1033 8026 PK-UG-X006 - 1033 8063 82559-based Fast Ethernet Adapter - 1033 8064 82559-based Fast Ethernet Adapter - 103c 10c0 NetServer 10/100TX - 103c 10c3 NetServer 10/100TX - 103c 10ca NetServer 10/100TX - 103c 10cb NetServer 10/100TX - 103c 10e3 NetServer 10/100TX - 103c 10e4 NetServer 10/100TX - 103c 1200 NetServer 10/100TX - 108e 10cf EtherExpress PRO/100(B) - 10c3 1100 SmartEther100 SC1100 - 10cf 1115 8255x-based Ethernet Adapter (10/100) - 10cf 1143 8255x-based Ethernet Adapter (10/100) - 110a 008b 82551QM Fast Ethernet Multifuction PCI/CardBus Controller - 114a 0582 PC8 onboard ethernet ETH2 - 1179 0001 8255x-based Ethernet Adapter (10/100) - 1179 0002 PCI FastEther LAN on Docker - 1179 0003 8255x-based Fast Ethernet - 1259 2560 AT-2560 100 - 1259 2561 AT-2560 100 FX Ethernet Adapter - 1266 0001 NE10/100 Adapter - 13e9 1000 6221L-4U - 144d 2501 SEM-2000 MiniPCI LAN Adapter - 144d 2502 SEM-2100IL MiniPCI LAN Adapter - 1668 1100 EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem) - 1775 1100 CR11/VR11 Single Board Computer - 1775 ce90 CE9 - 4c53 1080 CT8 mainboard - 4c53 10e0 PSL09 PrPMC - 8086 0001 EtherExpress PRO/100B (TX) - 8086 0002 EtherExpress PRO/100B (T4) - 8086 0003 EtherExpress PRO/10+ - 8086 0004 EtherExpress PRO/100 WfM - 8086 0005 82557 10/100 - 8086 0006 82557 10/100 with Wake on LAN - 8086 0007 82558 10/100 Adapter - 8086 0008 82558 10/100 with Wake on LAN - 8086 0009 82558B PRO/100+ PCI (TP) - 8086 000a EtherExpress PRO/100+ Management Adapter - 8086 000b EtherExpress PRO/100+ - 8086 000c EtherExpress PRO/100+ Management Adapter - 8086 000d EtherExpress PRO/100+ Alert On LAN II* Adapter - 8086 000e EtherExpress PRO/100+ Management Adapter with Alert On LAN* - 8086 000f EtherExpress PRO/100 Desktop Adapter - 8086 0010 EtherExpress PRO/100 S Management Adapter - 8086 0011 EtherExpress PRO/100 S Management Adapter - 8086 0012 EtherExpress PRO/100 S Advanced Management Adapter (D) - 8086 0013 EtherExpress PRO/100 S Advanced Management Adapter (E) - 8086 0030 EtherExpress PRO/100 Management Adapter with Alert On LAN* GC - 8086 0031 EtherExpress PRO/100 Desktop Adapter - 8086 0040 EtherExpress PRO/100 S Desktop Adapter - 8086 0041 EtherExpress PRO/100 S Desktop Adapter - 8086 0042 EtherExpress PRO/100 Desktop Adapter - 8086 0050 EtherExpress PRO/100 S Desktop Adapter - 8086 1009 EtherExpress PRO/100+ Server Adapter - 8086 100c EtherExpress PRO/100+ Server Adapter (PILA8470B) - 8086 1012 EtherExpress PRO/100 S Server Adapter (D) - 8086 1013 EtherExpress PRO/100 S Server Adapter (E) - 8086 1015 EtherExpress PRO/100 S Dual Port Server Adapter - 8086 1017 EtherExpress PRO/100+ Dual Port Server Adapter - 8086 1030 EtherExpress PRO/100+ Management Adapter with Alert On LAN* G Server - 8086 1040 EtherExpress PRO/100 S Server Adapter - 8086 1041 EtherExpress PRO/100 S Server Adapter - 8086 1042 EtherExpress PRO/100 Server Adapter - 8086 1050 EtherExpress PRO/100 S Server Adapter - 8086 1051 EtherExpress PRO/100 Server Adapter - 8086 1052 EtherExpress PRO/100 Server Adapter - 8086 10f0 EtherExpress PRO/100+ Dual Port Adapter - 8086 1229 82557/8/9 [Ethernet Pro 100] - 8086 2009 EtherExpress PRO/100 S Mobile Adapter - 8086 200d EtherExpress PRO/100 Cardbus - 8086 200e EtherExpress PRO/100 LAN+V90 Cardbus Modem - 8086 200f EtherExpress PRO/100 SR Mobile Adapter - 8086 2010 EtherExpress PRO/100 S Mobile Combo Adapter - 8086 2013 EtherExpress PRO/100 SR Mobile Combo Adapter - 8086 2016 EtherExpress PRO/100 S Mobile Adapter - 8086 2017 EtherExpress PRO/100 S Combo Mobile Adapter - 8086 2018 EtherExpress PRO/100 SR Mobile Adapter - 8086 2019 EtherExpress PRO/100 SR Combo Mobile Adapter - 8086 2101 EtherExpress PRO/100 P Mobile Adapter - 8086 2102 EtherExpress PRO/100 SP Mobile Adapter - 8086 2103 EtherExpress PRO/100 SP Mobile Adapter - 8086 2104 EtherExpress PRO/100 SP Mobile Adapter - 8086 2105 EtherExpress PRO/100 SP Mobile Adapter - 8086 2106 EtherExpress PRO/100 P Mobile Adapter - 8086 2107 EtherExpress PRO/100 Network Connection - 8086 2108 EtherExpress PRO/100 Network Connection - 8086 2200 EtherExpress PRO/100 P Mobile Combo Adapter - 8086 2201 EtherExpress PRO/100 P Mobile Combo Adapter - 8086 2202 EtherExpress PRO/100 SP Mobile Combo Adapter - 8086 2203 EtherExpress PRO/100+ MiniPCI - 8086 2204 EtherExpress PRO/100+ MiniPCI - 8086 2205 EtherExpress PRO/100 SP Mobile Combo Adapter - 8086 2206 EtherExpress PRO/100 SP Mobile Combo Adapter - 8086 2207 EtherExpress PRO/100 SP Mobile Combo Adapter - 8086 2208 EtherExpress PRO/100 P Mobile Combo Adapter - 8086 2402 EtherExpress PRO/100+ MiniPCI - 8086 2407 EtherExpress PRO/100+ MiniPCI - 8086 2408 EtherExpress PRO/100+ MiniPCI - 8086 2409 EtherExpress PRO/100+ MiniPCI - 8086 240f EtherExpress PRO/100+ MiniPCI - 8086 2410 EtherExpress PRO/100+ MiniPCI - 8086 2411 EtherExpress PRO/100+ MiniPCI - 8086 2412 EtherExpress PRO/100+ MiniPCI - 8086 2413 EtherExpress PRO/100+ MiniPCI - 8086 3000 82559 Fast Ethernet LAN on Motherboard - 8086 3001 82559 Fast Ethernet LOM with Basic Alert on LAN* - 8086 3002 82559 Fast Ethernet LOM with Alert on LAN II* - 8086 3006 EtherExpress PRO/100 S Network Connection - 8086 3007 EtherExpress PRO/100 S Network Connection - 8086 3008 EtherExpress PRO/100 Network Connection - 8086 3010 EtherExpress PRO/100 S Network Connection - 8086 3011 EtherExpress PRO/100 S Network Connection - 8086 3012 EtherExpress PRO/100 Network Connection - 8086 301a S845WD1-E mainboard - 8086 3411 SDS2 Mainboard - 122d 430FX - 82437FX TSC [Triton I] - 122e 82371FB PIIX ISA [Triton I] - 1230 82371FB PIIX IDE [Triton I] - 1231 DSVD Modem - 1234 430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX) - 1235 430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP) - 1237 440FX - 82441FX PMC [Natoma] - 1af4 1100 Qemu virtual machine - 1239 82371FB PIIX IDE Interface - 123b 82380PB PCI to PCI Docking Bridge - 123c 82380AB (MISA) Mobile PCI-to-ISA Bridge - 123d 683053 Programmable Interrupt Device - 123e 82466GX (IHPC) Integrated Hot-Plug Controller (hidden mode) - 123f 82466GX Integrated Hot-Plug Controller (IHPC) - 1240 82752 (752) AGP Graphics Accelerator - 124b 82380FB (MPCI2) Mobile Docking Controller - 1250 430HX - 82439HX TXC [Triton II] - 1360 82806AA PCI64 Hub PCI Bridge - 1361 82806AA PCI64 Hub Controller (HRes) - 8086 1361 82806AA PCI64 Hub Controller (HRes) - 8086 8000 82806AA PCI64 Hub Controller (HRes) - 1460 82870P2 P64H2 Hub PCI Bridge - 1461 82870P2 P64H2 I/OxAPIC - 15d9 3480 P4DP6 - 4c53 1090 Cx9/Vx9 mainboard - 1462 82870P2 P64H2 Hot Plug Controller - 1508 82598EB Gigabit BX Network Connection - 150a 82576NS Gigabit Network Connection - 150b 82598EB 10-Gigabit AT2 Server Adapter - 8086 a10c 82598EB 10-Gigabit AT2 Server Adapter - 8086 a11c 82598EB 10-Gigabit AT2 Server Adapter - 8086 a12c 82598EB 10-Gigabit AT2 Server Adapter - 150c 82583V Gigabit Network Connection - 150d 82576 Gigabit Backplane Connection - 8086 a10c Gigabit ET Quad Port Mezzanine Card - 1518 82576NS SerDes Gigabit Network Connection - 1960 80960RP (i960RP) Microprocessor - 101e 0431 MegaRAID 431 RAID Controller - 101e 0438 MegaRAID 438 Ultra2 LVD RAID Controller - 101e 0466 MegaRAID 466 Express Plus RAID Controller - 101e 0467 MegaRAID 467 Enterprise 1500 RAID Controller - 101e 0490 MegaRAID 490 Express 300 RAID Controller - 101e 0762 MegaRAID 762 Express RAID Controller - 101e 09a0 PowerEdge Expandable RAID Controller 2/SC - 1028 0467 PowerEdge Expandable RAID Controller 2/DC - 1028 1111 PowerEdge Expandable RAID Controller 2/SC - 103c 03a2 MegaRAID - 103c 10c6 MegaRAID 438, NetRAID-3Si - 103c 10c7 MegaRAID T5, Integrated NetRAID - 103c 10cc MegaRAID, Integrated NetRAID - 103c 10cd NetRAID-1Si - 105a 0000 SuperTrak - 105a 2168 SuperTrak Pro - 105a 5168 SuperTrak66/100 - 1111 1111 MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC - 1111 1112 PowerEdge Expandable RAID Controller 2/SC - 113c 03a2 MegaRAID - e4bf 1010 CG1-RADIO - e4bf 1020 CU2-QUARTET - e4bf 1040 CU1-CHORUS - e4bf 3100 CX1-BAND - 1962 80960RM (i960RM) Microprocessor - 105a 0000 SuperTrak SX6000 I2O CPU - 1a21 82840 840 [Carmel] Chipset Host Bridge (Hub A) - 1a23 82840 840 [Carmel] Chipset AGP Bridge - 1a24 82840 840 [Carmel] Chipset PCI Bridge (Hub B) - 1a30 82845 845 [Brookdale] Chipset Host Bridge - 1028 010e Optiplex GX240 - 15d9 3280 Supermicro P4SBE Mainboard - 1a31 82845 845 [Brookdale] Chipset AGP Bridge - 1a38 5000 Series Chipset DMA Engine - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 1a48 82597EX 10GbE Ethernet Controller - 8086 a01f PRO/10GbE SR Server Adapter - 8086 a11f PRO/10GbE SR Server Adapter - 1b48 82597EX 10GbE Ethernet Controller - 8086 a01f PRO/10GbE LR Server Adapter - 8086 a11f PRO/10GbE LR Server Adapter - 2410 82801AA ISA Bridge (LPC) - 2411 82801AA IDE Controller - 2412 82801AA USB Controller - 2413 82801AA SMBus Controller - 2415 82801AA AC'97 Audio Controller - 1028 0095 Precision Workstation 220 Integrated Digital Audio - 1028 00b4 OptiPlex GX110 - 110a 0051 Activy 2xx - 11d4 0040 SoundMAX Integrated Digital Audio - 11d4 0048 SoundMAX Integrated Digital Audio - 11d4 5340 SoundMAX Integrated Digital Audio - 1734 1025 Activy 3xx - 2416 82801AA AC'97 Modem Controller - 2418 82801AA PCI Bridge - 2420 82801AB ISA Bridge (LPC) - 2421 82801AB IDE Controller - 2422 82801AB USB Controller - 2423 82801AB SMBus Controller - 2425 82801AB AC'97 Audio Controller - 11d4 0040 SoundMAX Integrated Digital Audio - 11d4 0048 SoundMAX Integrated Digital Audio - 2426 82801AB AC'97 Modem Controller - 2428 82801AB PCI Bridge - 2440 82801BA ISA Bridge (LPC) - 8086 5744 S845WD1-E - 2442 82801BA/BAM USB Controller #1 - 1014 01c6 Netvista A40/A40p - 1025 1016 Travelmate 612 TX - 1028 00c7 Dimension 8100 - 1028 00d8 Precision 530 - 1028 010e Optiplex GX240 - 103c 126f e-pc 40 - 1043 8027 TUSL2-C Mainboard - 104d 80df Vaio PCG-FX403 - 147b 0507 TH7II-RAID - 8086 4532 D815EEA2 mainboard - 8086 4557 D815EGEW Mainboard - 8086 5744 S845WD1-E mainboard - 2443 82801BA/BAM SMBus Controller - 1014 01c6 Netvista A40/A40p - 1025 1016 Travelmate 612 TX - 1028 00c7 Dimension 8100 - 1028 00d8 Precision 530 - 1028 010e Optiplex GX240 - 103c 126f e-pc 40 - 1043 8027 TUSL2-C Mainboard - 104d 80df Vaio PCG-FX403 - 147b 0507 TH7II-RAID - 15d9 3280 Supermicro P4SBE Mainboard - 8086 4532 D815EEA2 mainboard - 8086 4557 D815EGEW Mainboard - 8086 5744 S845WD1-E mainboard - 2444 82801BA/BAM USB Controller #1 - 1025 1016 Travelmate 612 TX - 1028 00c7 Dimension 8100 - 1028 00d8 Precision 530 - 1028 010e Optiplex GX240 - 103c 126f e-pc 40 - 1043 8027 TUSL2-C Mainboard - 104d 80df Vaio PCG-FX403 - 147b 0507 TH7II-RAID - 8086 4532 D815EEA2 mainboard - 8086 5744 S845WD1-E mainboard - 2445 82801BA/BAM AC'97 Audio Controller - 0e11 000b Compaq Deskpro EN Audio - 0e11 0088 Evo D500 - 1014 01c6 Netvista A40/A40p - 1025 1016 Travelmate 612 TX - 1028 00d8 Precision 530 - 103c 126f e-pc 40 - 104d 80df Vaio PCG-FX403 - 1462 3370 STAC9721 AC - 147b 0507 TH7II-RAID - 8086 4557 D815EGEW Mainboard - 2446 82801BA/BAM AC'97 Modem Controller - 1025 1016 Travelmate 612 TX - 104d 80df Vaio PCG-FX403 - 2448 82801 Mobile PCI Bridge -# (rev d3) (prog-if (rev d3) (prog-if 01 [Subtractive decode]) - 103c 0934 HP Compaq nw8240 Mobile Workstation - 103c 099c NX6110/NC6120 - 103c 309f Compaq nx9420 Notebook - 103c 30a3 Compaq nw8440 - 103c 30c1 Compaq 6910p - 144d c00c P30 notebook - 1734 1055 Amilo M1420 - 17aa 20ae ThinkPad T61 - e4bf cc47 CCG-RUMBA - 2449 82801BA/BAM/CA/CAM Ethernet Controller - 0e11 0012 EtherExpress PRO/100 VM - 0e11 0091 EtherExpress PRO/100 VE - 1014 01ce EtherExpress PRO/100 VE - 1014 01dc EtherExpress PRO/100 VE - 1014 01eb EtherExpress PRO/100 VE - 1014 01ec EtherExpress PRO/100 VE - 1014 0202 EtherExpress PRO/100 VE - 1014 0205 EtherExpress PRO/100 VE - 1014 0217 EtherExpress PRO/100 VE - 1014 0234 EtherExpress PRO/100 VE - 1014 023d EtherExpress PRO/100 VE - 1014 0244 EtherExpress PRO/100 VE - 1014 0245 EtherExpress PRO/100 VE - 1014 0265 PRO/100 VE Desktop Connection - 1014 0267 PRO/100 VE Desktop Connection - 1014 026a PRO/100 VE Desktop Connection - 109f 315d EtherExpress PRO/100 VE - 109f 3181 EtherExpress PRO/100 VE - 1179 ff01 PRO/100 VE Network Connection - 1186 7801 EtherExpress PRO/100 VE - 144d 2602 HomePNA 1M CNR - 8086 3010 EtherExpress PRO/100 VE - 8086 3011 EtherExpress PRO/100 VM - 8086 3012 82562EH based Phoneline - 8086 3013 EtherExpress PRO/100 VE - 8086 3014 EtherExpress PRO/100 VM - 8086 3015 82562EH based Phoneline - 8086 3016 EtherExpress PRO/100 P Mobile Combo - 8086 3017 EtherExpress PRO/100 P Mobile - 8086 3018 EtherExpress PRO/100 - 244a 82801BAM IDE U100 Controller - 1025 1016 Travelmate 612TX - 104d 80df Vaio PCG-FX403 - 244b 82801BA IDE U100 Controller - 1014 01c6 Netvista A40/A40p - 1028 00c7 Dimension 8100 - 1028 00d8 Precision 530 - 1028 010e Optiplex GX240 - 103c 126f e-pc 40 - 1043 8027 TUSL2-C Mainboard - 147b 0507 TH7II-RAID - 15d9 3280 Supermicro P4SBE Mainboard - 8086 4532 D815EEA2 mainboard - 8086 4557 D815EGEW Mainboard - 8086 5744 S845WD1-E mainboard - 244c 82801BAM ISA Bridge (LPC) - 244e 82801 PCI Bridge - 1014 0267 NetVista A30p - 1028 0211 Optiplex 755 - 1458 5000 GA-EP45-DS5 Motherboard - 1775 11cc CC11/CL11 - 2450 82801E ISA Bridge (LPC) - 2452 82801E USB Controller - 2453 82801E SMBus Controller - 2459 82801E Ethernet Controller 0 - 245b 82801E IDE U100 Controller - 245d 82801E Ethernet Controller 1 - 245e 82801E PCI Bridge - 2480 82801CA LPC Interface Controller - 2482 82801CA/CAM USB Controller #1 - 0e11 0030 Evo N600c - 1014 0220 ThinkPad A/T/X Series - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 15d9 3480 P4DP6 - 8086 1958 vpr Matrix 170B4 - 8086 3424 SE7501HG2 Mainboard - 8086 4541 Latitude C640 - 2483 82801CA/CAM SMBus Controller - 1014 0220 ThinkPad A/T/X Series - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 15d9 3480 P4DP6 - 8086 1958 vpr Matrix 170B4 - 2484 82801CA/CAM USB Controller #2 - 0e11 0030 Evo N600c - 1014 0220 ThinkPad A/T/X Series - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 15d9 3480 P4DP6 - 8086 1958 vpr Matrix 170B4 - 2485 82801CA/CAM AC'97 Audio Controller - 1013 5959 Crystal WMD Audio Codec - 1014 0222 ThinkPad A30/A30p/T23 - 1014 0508 ThinkPad T30 - 1014 051c ThinkPad A/T/X Series - 1043 1583 L3C (SPDIF) - 1043 1623 L2B (no SPDIF) - 1043 1643 L3F - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 144d c006 vpr Matrix 170B4 - 2486 82801CA/CAM AC'97 Modem Controller - 1014 0223 ThinkPad A/T/X Series - 1014 0503 ThinkPad R31 - 1014 051a ThinkPad A/T/X Series - 101f 1025 620 Series - 1043 1496 PCtel HSP56 MR - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 134d 4c21 Dell Inspiron 2100 internal modem - 144d 2115 vpr Matrix 170B4 internal modem - 14f1 5421 MD56ORD V.92 MDC Modem - 2487 82801CA/CAM USB Controller #3 - 0e11 0030 Evo N600c - 1014 0220 ThinkPad A/T/X Series - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 15d9 3480 P4DP6 - 8086 1958 vpr Matrix 170B4 - 248a 82801CAM IDE U100 Controller - 0e11 0030 Evo N600c - 1014 0220 ThinkPad A/T/X Series - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 8086 1958 vpr Matrix 170B4 - 8086 4541 Latitude C640 - 248b 82801CA Ultra ATA Storage Controller - 15d9 3480 P4DP6 - 248c 82801CAM ISA Bridge (LPC) - 24c0 82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge - 1014 0267 NetVista A30p - 1462 5800 845PE Max (MS-6580) - 24c1 82801DBL (ICH4-L) IDE Controller - 24c2 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 - 1014 0267 NetVista A30p - 1014 052d ThinkPad - 1025 005a TravelMate 290 - 1028 0126 Optiplex GX260 - 1028 0163 Latitude D505 - 1028 018d Inspiron 700m/710m - 1028 0196 Inspiron 5160 - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 103c 08b0 tc1100 tablet - 1043 8089 P4B533 - 1071 8160 MIM2000 - 114a 0582 PC8 onboard USB 1.x - 144d c005 X10 Laptop - 144d c00c P30/P35 notebook - 1462 5800 845PE Max (MS-6580) - 1509 2990 Averatec 5110H laptop - 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) - 1734 1055 Amilo M1420 - 4c53 1090 Cx9 / Vx9 mainboard - 8086 24c2 Latitude X300 - 8086 4541 Latitude D400 - e4bf 0cc9 CC9-SAMBA - e4bf 0cd2 CD2-BEBOP - 24c3 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller - 1014 0267 NetVista A30p - 1014 052d ThinkPad - 1025 005a TravelMate 290 - 1028 0126 Optiplex GX260 - 1028 014f Latitude X300 - 1028 018d Inspiron 700m/710m - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 103c 08b0 tc1100 tablet - 1071 8160 MIM2000 - 114a 0582 PC8 onboard SMbus - 144d c005 X10 Laptop - 144d c00c P30/P35 notebook - 1458 24c2 GA-8PE667 Ultra - 1462 5800 845PE Max (MS-6580) - 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) - 1734 1055 Amilo M1420 - 4c53 1090 Cx9 / Vx9 mainboard - e4bf 0cc9 CC9-SAMBA - e4bf 0cd2 CD2-BEBOP - 24c4 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 - 1014 0267 NetVista A30p - 1014 052d ThinkPad - 1025 005a TravelMate 290 - 1028 0126 Optiplex GX260 - 1028 0163 Latitude D505 - 1028 018d Inspiron 700m/710m - 1028 0196 Inspiron 5160 - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 103c 08b0 tc1100 tablet - 1043 8089 P4B533 - 1071 8160 MIM2000 - 144d c00c P30/P35 notebook - 1462 5800 845PE Max (MS-6580) - 1509 2990 Averatec 5110H - 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) - 4c53 1090 Cx9 / Vx9 mainboard - 8086 24c2 Latitude X300 - 8086 4541 Latitude D400 - e4bf 0cc9 CC9-SAMBA - e4bf 0cd2 CD2-BEBOP - 24c5 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller - 0e11 00b8 Analog Devices Inc. codec [SoundMAX] - 1014 0267 NetVista A30p - 1014 0537 ThinkPad T41 - 1014 055f Thinkpad R50e model 1634 - 1025 005a TravelMate 290 - 1028 0139 Latitude D400 - 1028 014f Latitude X300 - 1028 0163 Latitude D505 - 1028 018d Inspiron 700m/710m [SigmaTel STAC9750,51] - 1028 0196 Inspiron 5160 - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 103c 08b0 tc1100 tablet - 1043 1713 M6800N - 1043 80b0 P4B533 - 1071 8160 MIM2000 - 1179 0201 Toshiba Tecra M1 - 144d c005 X10 Laptop - 144d c00c P30/P35 notebook - 1458 a002 GA-8PE667 Ultra - 1462 5800 845PE Max (MS-6580) - 1734 1005 D1451 (SCENIC N300, i845GV) Sigmatel STAC9750T - 1734 1055 Amilo M1420 - 8086 24c5 Dell Dimension 2400 - 24c6 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller - 1014 0524 ThinkPad T41 - 1014 0525 ThinkPad - 1014 0559 ThinkPad R50e - 1025 003c Aspire 2001WLCi (Compal CL50 motherboard) implementation - 1025 005a TravelMate 290 - 1028 0196 Inspiron 5160 - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 103c 08b0 tc1100 tablet - 1043 1826 M6800N - 1071 8160 MIM2000 - 144d 2115 X10 Laptop - 144d c00c P30/P35 notebook -# Conexant HSF Softmodem (CXT22) - 14f1 5422 D480 MDC V.9x Modem - 24c7 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 - 1014 0267 NetVista A30p - 1014 052d ThinkPad - 1025 005a TravelMate 290 - 1028 0126 Optiplex GX260 - 1028 0163 Latitude D505 - 1028 018d Inspiron 700m/710m - 1028 0196 Inspiron 5160 - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 103c 08b0 tc1100 tablet - 1043 8089 P4B533 - 1071 8160 MIM2000 - 144d c00c P30/P35 notebook - 1462 5800 845PE Max (MS-6580) - 1509 2990 Averatec 5110H - 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) - 4c53 1090 Cx9 / Vx9 mainboard - 8086 24c2 Latitude X300 - 8086 4541 Latitude D400 - e4bf 0cc9 CC9-SAMBA - e4bf 0cd2 CD2-BEBOP - 24ca 82801DBM (ICH4-M) IDE Controller - 1014 052d ThinkPad - 1025 005a TravelMate 290 - 1028 014f Latitude X300 - 1028 0163 Latitude D505 - 1028 018d Inspiron 700m/710m - 1028 0196 Inspiron 5160 - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 103c 08b0 tc1100 tablet - 1071 8160 MIM2000 - 144d c005 X10 Laptop - 144d c00c P30/P35 notebook - 1734 1055 Amilo M1420 - 8086 4541 Latitude D400 - 24cb 82801DB (ICH4) IDE Controller - 1014 0267 NetVista A30p - 1028 0126 Optiplex GX260 - 1043 8089 P4B533 - 114a 0582 PC8 onboard IDE - 1458 24c2 GA-8PE667 Ultra - 1462 5800 845PE Max (MS-6580) - 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) - 4c53 1090 Cx9 / Vx9 mainboard - e4bf 0cc9 CC9-SAMBA - e4bf 0cd2 CD2-BEBOP - 24cc 82801DBM (ICH4-M) LPC Interface Bridge - 144d c00c P30 notebook - 1734 1055 Amilo M1420 - 24cd 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller - 1014 0267 NetVista A30p - 1014 052e ThinkPad - 1025 005a TravelMate 290 - 1028 011d Latitude D600 - 1028 0126 Optiplex GX260 - 1028 0139 Latitude D400 - 1028 0163 Latitude D505 - 1028 018d Inspiron 700m/710m - 1028 0196 Inspiron 5160 - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 103c 08b0 tc1100 tablet - 1043 8089 P4B533 - 1071 8160 MIM2000 - 114a 0582 PC8 onboard USB 2.0 - 1179 ff00 Satellite 2430 - 144d c005 X10 Laptop - 144d c00c P30/P35 notebook - 1462 3981 845PE Max (MS-6580) - 1509 1968 Averatec 5110H - 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) - 1734 1055 Amilo M1420 - 4c53 1090 Cx9 / Vx9 mainboard - 8086 24c2 Latitude X300 - e4bf 0cc9 CC9-SAMBA - e4bf 0cd2 CD2-BEBOP - 24d0 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge - 24d1 82801EB (ICH5) SATA Controller - 1028 0169 Precision 470 - 1028 019a PowerEdge SC1425 - 103c 12bc d530 CMT (DG746A) - 1043 80a6 P4P800 series motherboard - 1458 24d1 GA-8IPE1000 Pro2 motherboard (865PE) - 1462 7280 865PE Neo2 (MS-6728) - 1462 7650 Hetis 865GV-E (MS-7065) - 1565 5200 P4TSV Motherboard (865G) - 15d9 4580 P4SCE Mainboard - 8086 3427 S875WP1-E mainboard - 8086 4246 Desktop Board D865GBF - 8086 4c43 Desktop Board D865GLC - 8086 524c D865PERL mainboard - 24d2 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 - 1014 02dd eServer xSeries server mainboard - 1014 02ed eServer xSeries server mainboard - 1028 0169 Precision 470 - 1028 016c PowerEdge 1850 onboard UHCI - 1028 016d PowerEdge 2850 onboard UHCI - 1028 0170 PowerEdge 6850 onboard UHCI - 1028 0183 PowerEdge 1800 - 1028 019a PowerEdge SC1425 - 103c 006a NX9500 - 103c 12bc d530 CMT (DG746A) - 1043 80a6 P4P800/P5P800 series motherboard - 1458 24d2 GA-8IPE1000/8KNXP motherboard - 1462 7280 865PE Neo2 (MS-6728) - 1565 3101 P4TSV Motherboard (865G) - 15d9 4580 P4SCE Mainboard - 1734 101c PRIMERGY RX/TX series onboard UHCI - 8086 3427 S875WP1-E mainboard - 8086 4246 Desktop Board D865GBF - 8086 4c43 Desktop Board D865GLC - 8086 524c D865PERL mainboard - 24d3 82801EB/ER (ICH5/ICH5R) SMBus Controller - 1014 02dd eServer xSeries server mainboard - 1014 02ed eServer xSeries server mainboard - 1028 0156 Precision 360 - 1028 0169 Precision 470 - 103c 12bc d330 uT - 1043 80a6 P4P800 Mainboard - 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) - 1462 7280 865PE Neo2 (MS-6728) - 1462 7650 Hetis 865GV-E (MS-7065) - 1565 3101 P4TSV Motherboard (865G) - 15d9 4580 P4SCE Mainboard - 1734 101c PRIMERGY RX/TX S2 series SMBus - 8086 3427 S875WP1-E mainboard - 8086 4246 Desktop Board D865GBF - 8086 4c43 Desktop Board D865GLC - 8086 524c D865PERL mainboard - 24d4 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2 - 1014 02dd eServer xSeries server mainboard - 1014 02ed eServer xSeries server mainboard - 1028 0169 Precision 470 - 1028 016c PowerEdge 1850 onboard UHCI - 1028 016d PowerEdge 2850 onboard UHCI - 1028 0170 PowerEdge 6850 onboard UHCI - 1028 0183 PowerEdge 1800 - 1028 019a PowerEdge SC1425 - 103c 006a NX9500 - 103c 12bc d530 CMT (DG746A) - 1043 80a6 P4P800/P5P800 series motherboard - 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) - 1462 7280 865PE Neo2 (MS-6728) - 1462 7650 Hetis 865GV-E (MS-7065) - 1565 3101 P4TSV Motherboard (865G) - 15d9 4580 P4SCE Mainboard - 1734 101c PRIMERGY RX/TX S2 series onboard UHCI - 8086 3427 S875WP1-E mainboard - 8086 4246 Desktop Board D865GBF - 8086 4c43 Desktop Board D865GLC - 8086 524c D865PERL mainboard - 24d5 82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller - 100a 147b Abit IS7-E motherboard - 1028 0169 Precision 470 - 103c 006a NX9500 - 103c 12bc d330 uT - 1043 80f3 P4P800 Mainboard - 1043 810f P5P800-MX Mainboard - 1458 a002 GA-8IPE1000/8KNXP motherboard - 1462 0080 865PE Neo2-V (MS-6788) Mainboard - 1462 7280 865PE Neo2 (MS-6728) - 1462 7650 Hetis 865GV-E (MS-7065) - 8086 a000 D865PERL mainboard - 8086 e000 D865PERL mainboard - 8086 e001 Desktop Board D865GBF - 8086 e002 SoundMax Intergrated Digital Audio - 24d6 82801EB/ER (ICH5/ICH5R) AC'97 Modem Controller - 103c 006a NX9500 - 24d7 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #3 - 1014 02ed xSeries server mainboard - 1028 0169 Precision 470 - 1028 016c PowerEdge 1850 onboard UHCI - 1028 016d PowerEdge 2850 onboard UHCI - 1028 0170 PowerEdge 6850 onboard UHCI - 1028 0183 PowerEdge 1800 - 103c 006a NX9500 - 103c 12bc d530 CMT (DG746A) - 1043 80a6 P4P800/P5P800 series motherboard - 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) - 1462 7280 865PE Neo2 (MS-6728) - 1462 7650 Hetis 865GV-E (MS-7065) - 1565 3101 P4TSV Motherboard (865G) - 15d9 4580 P4SCE Mainboard - 1734 101c PRIMERGY RX/TX S2 series onboard UHCI - 8086 3427 S875WP1-E mainboard - 8086 4246 Desktop Board D865GBF - 8086 4c43 Desktop Board D865GLC - 8086 524c D865PERL mainboard - 24db 82801EB/ER (ICH5/ICH5R) IDE Controller - 1014 02dd eServer xSeries server mainboard - 1014 02ed eServer xSeries server mainboard - 1028 0169 Precision 470 - 1028 016c PowerEdge 1850 IDE Controller - 1028 016d PowerEdge 2850 IDE Controller - 1028 0170 PowerEdge 6850 IDE Controller - 1028 019a PowerEdge SC1425 - 103c 006a NX9500 - 103c 12bc d530 CMT (DG746A) - 1043 80a6 P4P800/P5P800 series motherboard - 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) - 1462 7280 865PE Neo2 (MS-6728) - 1462 7580 MSI 875P - 1462 7650 Hetis 865GV-E (MS-7065) - 1565 3101 P4TSV Motherboard (865G) - 15d9 4580 P4SCE Mainboard - 1734 101c PRIMERGY RX/TX S2 series onboard IDE - 8086 24db P4C800 Mainboard - 8086 3427 S875WP1-E mainboard - 8086 4246 Desktop Board D865GBF - 8086 4c43 Desktop Board D865GLC - 8086 524c D865PERL mainboard - 24dc 82801EB (ICH5) LPC Interface Bridge - 24dd 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller - 1014 02dd eServer xSeries server mainboard - 1014 02ed eServer xSeries server mainboard - 1028 0169 Precision 470 - 1028 016c PowerEdge 1850 onboard EHCI - 1028 016d PowerEdge 2850 onboard EHCI - 1028 0170 PowerEdge 6850 onboard EHCI - 1028 0183 PowerEdge 1800 - 1028 019a PowerEdge SC1425 - 103c 006a NX9500 - 103c 12bc d530 CMT (DG746A) - 1043 80a6 P4P800/P5P800 series motherboard - 1458 5006 GA-8IPE1000 Pro2 motherboard (865PE) - 1462 7280 865PE Neo2 (MS-6728) - 1462 7650 Hetis 865GV-E (MS-7065) - 8086 3427 S875WP1-E mainboard - 8086 4246 Desktop Board D865GBF - 8086 4c43 Desktop Board D865GLC - 8086 524c D865PERL mainboard - 24de 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #4 - 1014 02ed xSeries server mainboard - 1028 0169 Precision 470 - 1043 80a6 P4P800/P5P800 series motherboard - 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) - 1462 7280 865PE Neo2 (MS-6728) - 1462 7650 Hetis 865GV-E (MS-7065) - 1565 3101 P4TSV Motherboard (865G) - 15d9 4580 P4SCE Mainboard - 1734 101c PRIMERGY RX/TX S2 series onboard UHCI - 8086 3427 S875WP1-E mainboard - 8086 4246 Desktop Board D865GBF - 8086 4c43 Desktop Board D865GLC - 8086 524c D865PERL mainboard - 24df 82801ER (ICH5R) SATA Controller - 2500 82820 820 (Camino) Chipset Host Bridge (MCH) - 1028 0095 Precision Workstation 220 Chipset - 1043 801c P3C-2000 system chipset - 2501 82820 820 (Camino) Chipset Host Bridge (MCH) - 1043 801c P3C-2000 system chipset - 250b 82820 820 (Camino) Chipset Host Bridge - 250f 82820 820 (Camino) Chipset AGP Bridge - 2520 82805AA MTH Memory Translator Hub - 2521 82804AA MRH-S Memory Repeater Hub for SDRAM - 2530 82850 850 (Tehama) Chipset Host Bridge (MCH) - 1028 00c7 Dimension 8100 - 147b 0507 TH7II-RAID - 2531 82860 860 (Wombat) Chipset Host Bridge (MCH) - 1028 00d8 Precision 530 - 2532 82850 850 (Tehama) Chipset AGP Bridge - 2533 82860 860 (Wombat) Chipset AGP Bridge - 2534 82860 860 (Wombat) Chipset PCI Bridge - 2540 E7500 Memory Controller Hub - 15d9 3480 P4DP6 - 2541 E7500/E7501 Host RASUM Controller - 15d9 3480 P4DP6 - 4c53 1090 Cx9 / Vx9 mainboard - 8086 3424 SE7501HG2 Mainboard - 2543 E7500/E7501 Hub Interface B PCI-to-PCI Bridge - 2544 E7500/E7501 Hub Interface B RASUM Controller - 4c53 1090 Cx9 / Vx9 mainboard - 2545 E7500/E7501 Hub Interface C PCI-to-PCI Bridge - 2546 E7500/E7501 Hub Interface C RASUM Controller - 2547 E7500/E7501 Hub Interface D PCI-to-PCI Bridge - 2548 E7500/E7501 Hub Interface D RASUM Controller - 254c E7501 Memory Controller Hub - 4c53 1090 Cx9 / Vx9 mainboard - 8086 3424 SE7501HG2 Mainboard - 2550 E7505 Memory Controller Hub - 2551 E7505/E7205 Series RAS Controller - 2552 E7505/E7205 PCI-to-AGP Bridge - 2553 E7505 Hub Interface B PCI-to-PCI Bridge - 2554 E7505 Hub Interface B PCI-to-PCI Bridge RAS Controller - 255d E7205 Memory Controller Hub - 2560 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface - 1028 0126 Optiplex GX260 - 1458 2560 GA-8PE667 Ultra - 1462 5800 845PE Max (MS-6580) - 2561 82845G/GL[Brookdale-G]/GE/PE Host-to-AGP Bridge - 2562 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device - 0e11 00b9 Evo D510 SFF - 1014 0267 NetVista A30p - 1734 1003 D1521 Mainboard (Fujitsu-Siemens) - 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) - 2570 82865G/PE/P DRAM Controller/Host-Hub Interface - 103c 006a NX9500 - 103c 12bc d330 uT - 1043 80f2 P4P800/P5P800 series motherboard - 1458 2570 GA-8IPE1000 Pro2 motherboard (865PE) - 2571 82865G/PE/P PCI to AGP Controller - 2572 82865G Integrated Graphics Controller - 1028 019d Dimension 3000 - 103c 12bc D530 sff(dc578av) - 1043 80a5 P5P800-MX Mainboard - 1462 7650 Hetis 865GV-E (MS-7065) - 1734 101b Fujitsu-Siemens Scenic E300 i865GV - 8086 4246 Desktop Board D865GBF - 8086 4c43 Desktop Board D865GLC - 2573 82865G/PE/P PCI to CSA Bridge - 2576 82865G/PE/P Processor to I/O Memory Interface - 2578 82875P/E7210 Memory Controller Hub - 1458 2578 GA-8KNXP motherboard (875P) - 1462 7580 MS-6758 (875P Neo) - 15d9 4580 P4SCE Motherboard - 2579 82875P Processor to AGP Controller - 257b 82875P/E7210 Processor to PCI to CSA Bridge - 257e 82875P/E7210 Processor to I/O Memory Interface - 2580 82915G/P/GV/GL/PL/910GL Memory Controller Hub - 1458 2580 GA-8I915ME-G Mainboard - 1462 7028 915P/G Neo2 - 1734 105b Scenic W620 - 2581 82915G/P/GV/GL/PL/910GL PCI Express Root Port - 2582 82915G/GV/910GL Integrated Graphics Controller - 1028 1079 Optiplex GX280 - 103c 3006 DC7100 SFF(DX878AV) - 1043 2582 P5GD1-VW Mainboard - 1458 2582 GA-8I915ME-G Mainboard - 1734 105b Scenic W620 - 1849 2582 ASRock P4Dual-915GL - 2584 82925X/XE Memory Controller Hub - 1028 0177 Dimension 8400 - 2585 82925X/XE PCI Express Root Port - 2588 E7220/E7221 Memory Controller Hub - 2589 E7220/E7221 PCI Express Root Port - 258a E7221 Integrated Graphics Controller - 2590 Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller - 1014 0575 ThinkPad Z60t - 1028 0182 Dell Latidude C610 - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 104d 81b7 Vaio VGN-S3XP - a304 81b7 Vaio VGN-S3XP - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 2591 Mobile 915GM/PM Express PCI Express Root Port - 103c 0934 HP Compaq nw8240 Mobile Workstation - 2592 Mobile 915GM/GMS/910GML Express Graphics Controller - 103c 099c NX6110/NC6120 - 103c 308a NC6220 - 1043 1881 GMA 900 915GM Integrated Graphics - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 25a1 6300ESB LPC Interface Controller - 25a2 6300ESB PATA Storage Controller - 1775 10d0 V5D Single Board Computer IDE - 1775 1100 CR11/VR11 Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10e0 PSL09 PrPMC - 25a3 6300ESB SATA Storage Controller - 1775 1100 CR11/VR11 Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10d0 Telum ASLP10 Processor AMC - 4c53 10e0 PSL09 PrPMC - 25a4 6300ESB SMBus Controller - 1775 10d0 V5D Single Board Computer - 1775 1100 CR11/VR11 Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10d0 Telum ASLP10 Processor AMC - 4c53 10e0 PSL09 PrPMC - 25a6 6300ESB AC'97 Audio Controller - 1775 1100 CR11/VR11 Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 25a7 6300ESB AC'97 Modem Controller - 25a9 6300ESB USB Universal Host Controller - 1775 10d0 V5D Single Board Computer USB - 1775 1100 CR11/VR11 Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10d0 Telum ASLP10 Processor AMC - 4c53 10e0 PSL09 PrPMC - 25aa 6300ESB USB Universal Host Controller - 1775 1100 CR11/VR11 Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10d0 Telum ASLP10 Processor AMC - 4c53 10e0 PSL09 PrPMC - 25ab 6300ESB Watchdog Timer - 1775 10d0 V5D Single Board Computer - 1775 1100 CR11/VR11 Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10d0 Telum ASLP10 Processor AMC - 4c53 10e0 PSL09 PrPMC - 25ac 6300ESB I/O Advanced Programmable Interrupt Controller - 1775 10d0 V5D Single Board Computer - 1775 1100 CR11/VR11 Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10d0 Telum ASLP10 Processor AMC - 4c53 10e0 PSL09 PrPMC - 25ad 6300ESB USB2 Enhanced Host Controller - 1775 10d0 V5D Single Board Computer USB 2.0 - 1775 1100 CR11/VR11 Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10d0 Telum ASLP10 Processor AMC - 4c53 10e0 PSL09 PrPMC - 25ae 6300ESB 64-bit PCI-X Bridge - 25b0 6300ESB SATA RAID Controller - 1775 1100 CR11/VR11 Single Board Computer - 4c53 10d0 Telum ASLP10 Processor AMC - 4c53 10e0 PSL09 PrPMC - 25c0 5000X Chipset Memory Controller Hub - 25d0 5000Z Chipset Memory Controller Hub - 25d4 5000V Chipset Memory Controller Hub - 15d9 8680 X7DVL-E-O motherboard - 25d8 5000P Chipset Memory Controller Hub - 8086 3476 Intel S5000PSLSATA Server Board - 25e2 5000 Series Chipset PCI Express x4 Port 2 - 25e3 5000 Series Chipset PCI Express x4 Port 3 - 25e4 5000 Series Chipset PCI Express x4 Port 4 - 25e5 5000 Series Chipset PCI Express x4 Port 5 - 25e6 5000 Series Chipset PCI Express x4 Port 6 - 25e7 5000 Series Chipset PCI Express x4 Port 7 - 25f0 5000 Series Chipset FSB Registers - 1028 01bb PowerEdge 1955 FSB Registers - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 25f1 5000 Series Chipset Reserved Registers - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 25f3 5000 Series Chipset Reserved Registers - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 25f5 5000 Series Chipset FBD Registers - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 25f6 5000 Series Chipset FBD Registers - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 25f7 5000 Series Chipset PCI Express x8 Port 2-3 - 25f8 5000 Series Chipset PCI Express x8 Port 4-5 - 25f9 5000 Series Chipset PCI Express x8 Port 6-7 - 25fa 5000X Chipset PCI Express x16 Port 4-7 - 2600 E8500/E8501 Hub Interface 1.5 - 1028 0170 PowerEdge 6850 Hub Interface - 2601 E8500/E8501 PCI Express x4 Port D - 2602 E8500/E8501 PCI Express x4 Port C0 - 2603 E8500/E8501 PCI Express x4 Port C1 - 2604 E8500/E8501 PCI Express x4 Port B0 - 2605 E8500/E8501 PCI Express x4 Port B1 - 2606 E8500/E8501 PCI Express x4 Port A0 - 2607 E8500/E8501 PCI Express x4 Port A1 - 2608 E8500/E8501 PCI Express x8 Port C - 2609 E8500/E8501 PCI Express x8 Port B - 260a E8500/E8501 PCI Express x8 Port A - 260c E8500/E8501 IMI Registers - 2610 E8500/E8501 FSB Registers - 2611 E8500/E8501 Address Mapping Registers - 2612 E8500/E8501 RAS Registers - 2613 E8500/E8501 Reserved Registers - 2614 E8500/E8501 Reserved Registers - 2615 E8500/E8501 Miscellaneous Registers - 2617 E8500/E8501 Reserved Registers - 2618 E8500/E8501 Reserved Registers - 2619 E8500/E8501 Reserved Registers - 261a E8500/E8501 Reserved Registers - 261b E8500/E8501 Reserved Registers - 261c E8500/E8501 Reserved Registers - 261d E8500/E8501 Reserved Registers - 261e E8500/E8501 Reserved Registers - 2620 E8500/E8501 eXternal Memory Bridge - 1028 0170 PowerEdge 6850 Memory Bridge - 2621 E8500/E8501 XMB Miscellaneous Registers - 1028 0170 PowerEdge 6850 XMB Registers - 2622 E8500/E8501 XMB Memory Interleaving Registers - 1028 0170 PowerEdge 6850 Memory Interleaving Registers - 2623 E8500/E8501 XMB DDR Initialization and Calibration - 1028 0170 PowerEdge 6850 DDR Initialization and Calibration - 2624 E8500/E8501 XMB Reserved Registers - 1028 0170 PowerEdge 6850 Reserved Registers - 2625 E8500/E8501 XMB Reserved Registers - 1028 0170 PowerEdge 6850 Reserved Registers - 2626 E8500/E8501 XMB Reserved Registers - 1028 0170 PowerEdge 6850 Reserved Registers - 2627 E8500/E8501 XMB Reserved Registers - 1028 0170 PowerEdge 6850 Reserved Registers - 2640 82801FB/FR (ICH6/ICH6R) LPC Interface Bridge - 1462 7028 915P/G Neo2 - 1734 105c Scenic W620 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 2641 82801FBM (ICH6M) LPC Interface Bridge - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 2642 82801FW/FRW (ICH6W/ICH6RW) LPC Interface Bridge - 2651 82801FB/FW (ICH6/ICH6W) SATA Controller - 1028 0179 Optiplex GX280 - 1043 2601 P5GD1-VW Mainboard - 1734 105c Scenic W620 - 8086 4147 D915GAG Motherboard - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 2652 82801FR/FRW (ICH6R/ICH6RW) SATA Controller - 1028 0177 Dimension 8400 - 1462 7028 915P/G Neo2 - 2653 82801FBM (ICH6M) SATA Controller - 2658 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 - 1028 0177 Dimension 8400 - 1028 0179 Optiplex GX280 - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 1043 80a6 P5GD1-VW Mainboard - 1458 2558 GA-8I915ME-G Mainboard - 1462 7028 915P/G Neo2 - 1734 105c Scenic W620 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 2659 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 - 1028 0177 Dimension 8400 - 1028 0179 Optiplex GX280 - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 1043 80a6 P5GD1-VW Mainboard - 1458 2659 GA-8I915ME-G Mainboard - 1462 7028 915P/G Neo2 - 1734 105c Scenic W620 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 265a 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 - 1028 0177 Dimension 8400 - 1028 0179 Optiplex GX280 - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 1043 80a6 P5GD1-VW Mainboard - 1458 265a GA-8I915ME-G Mainboard - 1462 7028 915P/G Neo2 - 1734 105c Scenic W620 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 265b 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 - 1028 0177 Dimension 8400 - 1028 0179 Optiplex GX280 - 103c 099c NX6110/NC6120 - 1043 80a6 P5GD1-VW Mainboard - 1458 265a GA-8I915ME-G Mainboard - 1462 7028 915P/G Neo2 - 1734 105c Scenic W620 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 265c 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller - 1028 0177 Dimension 8400 - 1028 0179 Optiplex GX280 - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 1043 80a6 P5GD1-VW Mainboard - 1458 5006 GA-8I915ME-G Mainboard - 1462 7028 915P/G Neo2 - 1734 105c Scenic W620 - 8086 265c Dimension 3100 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 2660 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 - 103c 0934 HP Compaq nw8240 Mobile Workstation - 103c 099c NX6110/NC6120 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 2662 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 2 - 103c 0934 HP Compaq nw8240 Mobile Workstation - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 2664 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 3 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 2666 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 4 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 2668 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller - 1014 05b7 ThinkPad Z60t -# based on the PTGD1-LA motherboard - 103c 2a09 PufferM-UL8E - 1043 1173 Asus A6VC - 1043 814e P5GD1-VW Mainboard - 1462 7028 915P/G Neo2 - 266a 82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller - 1028 0177 Dimension 8400 - 1028 0179 Optiplex GX280 - 1043 80a6 P5GD1-VW Mainboard - 1458 266a GA-8I915ME-G Mainboard - 1462 7028 915P/G Neo2 - 1734 105c Scenic W620 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 266c 82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller - 266d 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller - 1025 006a Conexant AC'97 CoDec (in Acer TravelMate 2410 serie laptop) - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 266e 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller - 1025 006a Realtek ALC 655 codec (in Acer TravelMate 2410 serie laptop) - 1028 0177 Dimension 8400 - 1028 0179 Optiplex GX280 - 1028 0182 Latitude D610 Laptop - 1028 0187 Dell Precision M70 Laptop - 1028 0188 Inspiron 6000 laptop - 103c 0934 Compaq nw8240/nx8220 - 103c 0944 Compaq NC6220 - 103c 099c NX6110/NC6120 - 103c 3006 DC7100 SFF(DX878AV) - 1458 a002 GA-8I915ME-G Mainboard - 152d 0745 Packard Bell A8550 Laptop - 1734 105a Scenic W620 - 266f 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller - 1028 0177 Dimension 8400 - 103c 0934 Compaq nw8240/nx8220 - 103c 099c NX6110/NC6120 - 1043 80a6 P5GD1-VW Mainboard - 1458 266f GA-8I915ME-G Mainboard - 1462 7028 915P/G Neo2 - 1734 105c Scenic W620 - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 2670 631xESB/632xESB/3100 Chipset LPC Interface Controller - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 2680 631xESB/632xESB/3100 Chipset SATA IDE Controller - 2681 631xESB/632xESB SATA AHCI Controller - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 2682 631xESB/632xESB SATA RAID Controller - 2683 631xESB/632xESB SATA RAID Controller - 2688 631xESB/632xESB/3100 Chipset UHCI USB Controller #1 - 1028 01bb PowerEdge 1955 onboard USB - 1028 01f0 PowerEdge R900 onboard USB - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 2689 631xESB/632xESB/3100 Chipset UHCI USB Controller #2 - 1028 01bb PowerEdge 1955 onboard USB - 1028 01f0 PowerEdge R900 onboard USB - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 268a 631xESB/632xESB/3100 Chipset UHCI USB Controller #3 - 1028 01f0 PowerEdge R900 onboard USB - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 268b 631xESB/632xESB/3100 Chipset UHCI USB Controller #4 - 1028 01f0 PowerEdge R900 onboard USB - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 268c 631xESB/632xESB/3100 Chipset EHCI USB2 Controller - 1028 01bb PowerEdge 1955 onboard USB - 1028 01f0 PowerEdge R900 onboard USB - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 2690 631xESB/632xESB/3100 Chipset PCI Express Root Port 1 - 2692 631xESB/632xESB/3100 Chipset PCI Express Root Port 2 - 2694 631xESB/632xESB/3100 Chipset PCI Express Root Port 3 - 2696 631xESB/632xESB/3100 Chipset PCI Express Root Port 4 - 2698 631xESB/632xESB AC '97 Audio Controller - 2699 631xESB/632xESB AC '97 Modem Controller - 269a 631xESB/632xESB High Definition Audio Controller - 269b 631xESB/632xESB/3100 Chipset SMBus Controller - 15d9 8680 X7DVL-E-O motherboard - 8086 3476 Intel S5000PSLSATA Server Board - 269e 631xESB/632xESB IDE Controller - 15d9 8680 X7DVL-E-O motherboard - 2770 82945G/GZ/P/PL Memory Controller Hub - 1028 01ad OptiPlex GX620 - 107b 5048 E4500 - 8086 544e DeskTop Board D945GTP - 2771 82945G/GZ/P/PL PCI Express Root Port - 2772 82945G/GZ Integrated Graphics Controller - 8086 544e DeskTop Board D945GTP - 8086 d605 Intel Desktop Board D945GCCR - 2774 82955X Memory Controller Hub - 2775 82955X PCI Express Root Port - 2776 82945G/GZ Integrated Graphics Controller - 2778 E7230/3000/3010 Memory Controller Hub - 1028 01df PowerEdge SC440 - 1028 01e6 PowerEdge 860 - 2779 E7230/3000/3010 PCI Express Root Port - 277a 82975X/3010 PCI Express Root Port - 277c 82975X Memory Controller Hub - 1043 8178 P5WDG2 WS Professional motherboard - 277d 82975X PCI Express Root Port - 2782 82915G Integrated Graphics Controller - 1043 2582 P5GD1-VW Mainboard - 1734 105b Scenic W620 - 2792 Mobile 915GM/GMS/910GML Express Graphics Controller - 103c 099c NX6110/NC6120 - 1043 1881 GMA 900 915GM Integrated Graphics - e4bf 0ccd CCD-CALYPSO - e4bf 0cd3 CD3-JIVE - e4bf 58b1 XB1 - 27a0 Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub - 1025 006c 9814 WKMI - 1028 01d7 XPS M1210 - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 1043 1237 A6J-Q008 - 17aa 2015 ThinkPad T60 - 17aa 2017 ThinkPad T60/R60 series - 27a1 Mobile 945GM/PM/GMS, 943/940GML and 945GT Express PCI Express Root Port - 103c 309f Compaq nx9420 Notebook - 103c 30a3 Compaq nw8440 - 27a2 Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller - 103c 30a1 NC2400 - 17aa 201a ThinkPad T60/R60 series - 9902 1584 CCE MPL-D10H120F - 27a6 Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller - 103c 30a1 NC2400 - 1775 11cc CC11/CL11 integrated graphics (secondary) - 17aa 201a ThinkPad T60/R60 series - 27ac Mobile 945GME Express Memory Controller Hub - 1775 11cc CC11/CL11 - 27ad Mobile 945GME Express PCI Express Root Port - 27ae Mobile 945GME Express Integrated Graphics Controller - 1775 11cc CC11/CL11 integrated graphics (primary) - 27b0 82801GH (ICH7DH) LPC Interface Bridge - 8086 544e DeskTop Board D945GTP - 27b8 82801GB/GR (ICH7 Family) LPC Interface Bridge - 1028 01e6 PowerEdge 860 - 1043 8179 P5KPL-VM Motherboard - 107b 5048 E4500 - 1775 11cc CC11/CL11 - 8086 544e DeskTop Board D945GTP - 27b9 82801GBM (ICH7-M) LPC Interface Bridge - 1028 01d7 XPS M1210 - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 10f7 8338 Panasonic CF-Y5 laptop - 17aa 2009 ThinkPad T60/R60 series - 27bc Tigerpoint LPC Controller - 27bd 82801GHM (ICH7-M DH) LPC Interface Bridge - 1025 006c 9814 WKMI - 27c0 82801GB/GR/GH (ICH7 Family) SATA IDE Controller - 1028 01ad OptiPlex GX620 - 1028 01df PowerEdge SC440 - 1028 01e6 PowerEdge 860 - 1043 8179 P5KPL-VM Motherboard - 107b 5048 E4500 - 1462 2310 MSI Hetis 945 - 1462 7236 945P Neo3-F Rev. 2.2 motherboard - 1775 11cc CC11/CL11 - 8086 544e DeskTop Board D945GTP - 27c1 82801GR/GH (ICH7 Family) SATA AHCI Controller - 1028 01df PowerEdge SC440 - 1775 11cc CC11/CL11 - 8086 5842 DeskTop Board D975XBX - 27c3 82801GR/GH (ICH7 Family) SATA RAID Controller - 1775 11cc CC11/CL11 - 8086 544e DeskTop Board D945GTP - 27c4 82801GBM/GHM (ICH7 Family) SATA IDE Controller - 1025 006c 9814 WKMI - 1028 01d7 XPS M1210 - 17aa 200e Thinkpad T60 model 2007 - 27c5 82801GBM/GHM (ICH7 Family) SATA AHCI Controller - 103c 309f Compaq nx9420 Notebook - 103c 30a3 Compaq nw8440 - 17aa 200d ThinkPad T60/R60 series - 27c6 82801GHM (ICH7-M DH) SATA RAID Controller - 27c8 82801G (ICH7 Family) USB UHCI Controller #1 - 1025 006c 9814 WKMI - 1028 01ad OptiPlex GX620 - 1028 01d7 XPS M1210 - 1028 01df PowerEdge SC440 - 1028 01e6 PowerEdge 860 - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 1043 1237 A6J-Q008 - 1043 8179 P5KPL-VM Motherboard - 107b 5048 E4500 - 1775 11cc CC11/CL11 - 17aa 200a ThinkPad T60/R60 series - 8086 544e DeskTop Board D945GTP - 27c9 82801G (ICH7 Family) USB UHCI Controller #2 - 1025 006c 9814 WKMI - 1028 01ad OptiPlex GX620 - 1028 01d7 XPS M1210 - 1028 01df PowerEdge SC440 - 1028 01e6 PowerEdge 860 - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 1043 1237 A6J-Q008 - 1043 8179 P5KPL-VM Motherboard - 107b 5048 E4500 - 1775 11cc CC11/CL11 - 17aa 200a ThinkPad T60/R60 series - 8086 544e DeskTop Board D945GTP - 27ca 82801G (ICH7 Family) USB UHCI Controller #3 - 1025 006c 9814 WKMI - 1028 01ad OptiPlex GX620 - 1028 01d7 XPS M1210 - 1028 01df PowerEdge SC440 - 1028 01e6 PowerEdge 860 - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 1043 1237 A6J-Q008 - 1043 8179 P5KPL-VM Motherboard - 107b 5048 E4500 - 1775 11cc CC11/CL11 - 17aa 200a ThinkPad T60/R60 series - 8086 544e DeskTop Board D945GTP - 27cb 82801G (ICH7 Family) USB UHCI Controller #4 - 1025 006c 9814 WKMI - 1028 01ad OptiPlex GX620 - 1028 01d7 XPS M1210 - 1028 01df PowerEdge SC440 - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 1043 1237 A6J-Q008 - 1043 8179 P5KPL-VM Motherboard - 107b 5048 E4500 - 1775 11cc CC11/CL11 - 17aa 200a ThinkPad T60/R60 series - 8086 544e DeskTop Board D945GTP - 27cc 82801G (ICH7 Family) USB2 EHCI Controller - 1025 006c 9814 WKMI - 1028 01ad OptiPlex GX620 - 1028 01d7 XPS M1210 - 1028 01df PowerEdge SC440 - 1028 01e6 PowerEdge 860 - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 1043 1237 A6J-Q008 - 1043 8179 P5KPL-VM Motherboard - 1775 11cc CC11/CL11 - 17aa 200b ThinkPad T60/R60 series - 8086 544e DeskTop Board D945GTP - 27d0 82801G (ICH7 Family) PCI Express Port 1 - 103c 309f Compaq nx9420 Notebook - 103c 30a3 Compaq nw8440 - 1775 11cc CC11/CL11 - 27d2 82801G (ICH7 Family) PCI Express Port 2 - 103c 309f Compaq nx9420 Notebook - 103c 30a3 Compaq nw8440 - 1775 11cc CC11/CL11 - 27d4 82801G (ICH7 Family) PCI Express Port 3 - 1775 11cc CC11/CL11 - 27d6 82801G (ICH7 Family) PCI Express Port 4 - 103c 30a3 Compaq nw8440 - 1775 11cc CC11/CL11 - 27d8 82801G (ICH7 Family) High Definition Audio Controller - 1025 006c 9814 WKMI - 1028 01d7 XPS M1210 - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 1043 1123 A6J-Q008 - 1043 13c4 Asus G2P - 1043 8290 P5KPL-VM Motherboard - 1043 82ea P5KPL-CM Motherboard - 107b 5048 E4500 - 10f7 8338 Panasonic CF-Y5 laptop - 1179 ff10 Toshiba Satellite A100-796 audio (Realtek ALC861) - 1179 ff31 AC97 Data Fax SoftModem with SmartCP - 1458 a102 GA-8I945PG-RH Mainboard - 152d 0753 Softmodem - 1734 10ad Conexant softmodem SmartCP - 17aa 2010 ThinkPad T60/R60 series - 17aa 3802 Lenovo 3000 C200 audio [Realtek ALC861VD] - 8086 1112 DeskTop Board D945GTP - 8086 27d8 DeskTop Board D945GTP - 27da 82801G (ICH7 Family) SMBus Controller - 1025 006c 9814 WKMI - 1028 01ad OptiPlex GX620 - 1028 01d7 XPS M1210 - 1028 01df PowerEdge SC440 - 1028 01e6 PowerEdge 860 - 1043 8179 P5KPL-VM Motherboard - 10f7 8338 Panasonic CF-Y5 laptop - 1458 5001 GA-8I945PG-RH Mainboard - 1775 11cc CC11/CL11 - 17aa 200f ThinkPad T60/R60 series - 8086 544e DeskTop Board D945GTP - 8086 5842 DeskTop Board D975XBX - 27dc 82801G (ICH7 Family) LAN Controller - 8086 308d DeskTop Board D945GTP - 27dd 82801G (ICH7 Family) AC'97 Modem Controller - 27de 82801G (ICH7 Family) AC'97 Audio Controller - 1028 01ad OptiPlex GX620 - 1462 7267 Realtek ALC883 Audio Controller - 1775 11cc CC11 integrated audio (AD1981BL codec) - 27df 82801G (ICH7 Family) IDE Controller - 1028 01df PowerEdge SC440 - 1028 01e6 PowerEdge 860 - 103c 309f Compaq nx9420 Notebook - 103c 30a1 NC2400 - 103c 30a3 Compaq nw8440 - 1043 1237 A6J-Q008 - 1043 8179 P5KPL-VM Motherboard - 107b 5048 E4500 - 10f7 8338 Panasonic CF-Y5 laptop - 1775 11cc CC11/CL11 - 17aa 200c ThinkPad T60/R60 series - 8086 544e DeskTop Board D945GTP - 27e0 82801GR/GH/GHM (ICH7 Family) PCI Express Port 5 - 1775 11cc CC11/CL11 - 27e2 82801GR/GH/GHM (ICH7 Family) PCI Express Port 6 - 1775 11cc CC11/CL11 - 2810 82801HB/HR (ICH8/R) LPC Interface Controller - 1043 81ec P5B - 2811 82801HBM (ICH8M-E) LPC Interface Controller - 103c 30c1 Compaq 6910p - 17aa 20b6 T61 - e4bf cc47 CCG-RUMBA - 2812 82801HH (ICH8DH) LPC Interface Controller - 2814 82801HO (ICH8DO) LPC Interface Controller - 2815 82801HEM (ICH8M) LPC Interface Controller - 1025 0121 Aspire 5920G - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b - 103c 30d9 Presario C700 - 104d 9005 Vaio VGN-FZ260E - 2820 82801H (ICH8 Family) 4 port SATA IDE Controller - 1028 01da OptiPlex 745 - 1462 7235 P965 Neo MS-7235 mainboard - 2821 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller - 2822 82801 SATA RAID Controller - 2824 82801HB (ICH8) 4 port SATA AHCI Controller - 1043 81ec P5B - 2825 82801H (ICH8 Family) 2 port SATA IDE Controller - 1028 01da OptiPlex 745 - 1462 7235 P965 Neo MS-7235 mainboard - 2828 82801HBM/HEM (ICH8M/ICH8M-E) SATA IDE Controller - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b - e4bf cc47 CCG-RUMBA - 2829 82801HBM/HEM (ICH8M/ICH8M-E) SATA AHCI Controller - 1025 0121 Aspire 5920G - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 103c 30d9 Presario C700 - 104d 9005 Vaio VGN-FZ260E - 17aa 20a7 ThinkPad T61 - 282a Mobile 82801 SATA RAID Controller - 2830 82801H (ICH8 Family) USB UHCI Controller #1 - 1025 0121 Acer Aspire 5920G - 1028 01da OptiPlex 745 - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 103c 30d9 Presario C700 - 1043 81ec P5B - 104d 9005 Vaio VGN-FZ260E - 1462 7235 P965 Neo MS-7235 mainboard - 17aa 20aa ThinkPad T61 - e4bf cc47 CCG-RUMBA - 2831 82801H (ICH8 Family) USB UHCI Controller #2 - 1025 0121 Aspire 5920G - 1028 01da OptiPlex 745 - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b -# Name mistyped on previous submission - 103c 30c1 Compaq 6910p - 103c 30d9 Presario C700 - 1043 81ec P5B - 104d 9005 Vaio VGN-FZ260E - 1462 7235 P965 Neo MS-7235 mainboard - 17aa 20aa ThinkPad T61 - e4bf cc47 CCG-RUMBA - 2832 82801H (ICH8 Family) USB UHCI Controller #3 - 1025 0121 Aspire 5920G - 1028 01da OptiPlex 745 - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 103c 30d9 Presario C700 - 1043 81ec P5B - 104d 9005 Vaio VGN-FZ260E - 17aa 20aa ThinkPad T61 - e4bf cc47 CCG-RUMBA - 2834 82801H (ICH8 Family) USB UHCI Controller #4 - 1025 0121 Aspire 5920G - 1028 01da OptiPlex 745 - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 1043 81ec P5B - 104d 9005 Vaio VGN-FZ260E - 1462 7235 P965 Neo MS-7235 mainboard - 17aa 20aa ThinkPad T61 - e4bf cc47 CCG-RUMBA - 2835 82801H (ICH8 Family) USB UHCI Controller #5 - 1025 0121 Acer Aspire 5920G - 1028 01da OptiPlex 745 - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 1043 81ec P5B - 104d 9005 Vaio VGN-FZ260E - 17aa 20aa ThinkPad T60 - e4bf cc47 CCG-RUMBA - 2836 82801H (ICH8 Family) USB2 EHCI Controller #1 - 1025 0121 Aspire 5920G - 1028 01da OptiPlex 745 - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 103c 30d9 Presario C700 - 1043 81ec P5B - 104d 9005 Vaio VGN-FZ260E - 1462 7235 P965 Neo MS-7235 mainboard - 17aa 20ab ThinkPad T61 - e4bf cc47 CCG-RUMBA - 283a 82801H (ICH8 Family) USB2 EHCI Controller #2 - 1025 0121 Acer Aspire 5920G - 1028 01da OptiPlex 745 - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 1043 81ec P5B - 104d 9005 Vaio VGN-FZ260E - 17aa 20ab ThinkPad T61 - e4bf cc47 CCG-RUMBA - 283e 82801H (ICH8 Family) SMBus Controller - 1025 0121 Aspire 5920G - 1028 01da OptiPlex 745 - 1028 01f3 Inspiron 1420 - 103c 30d9 Presario C700 - 1043 81ec P5B - 104d 9005 Vaio VGN-FZ260E - 1462 7235 P965 Neo MS-7235 mainboard - 17aa 20a9 ThinkPad T61 - e4bf cc47 CCG-RUMBA - 283f 82801H (ICH8 Family) PCI Express Port 1 - 1028 01da OptiPlex 745 - 103c 30c1 Compaq 6910p - 17aa 20ad ThinkPad T61 - 2841 82801H (ICH8 Family) PCI Express Port 2 - 103c 30c1 Compaq 6910p - 17aa 20ad ThinkPad T61 - 2843 82801H (ICH8 Family) PCI Express Port 3 - 17aa 20ad ThinkPad T61 - 2845 82801H (ICH8 Family) PCI Express Port 4 - 17aa 20ad ThinkPad T61 - 2847 82801H (ICH8 Family) PCI Express Port 5 - 1028 01da OptiPlex 745 - 103c 30c1 Compaq 6910p - 17aa 20ad ThinkPad T61 - 2849 82801H (ICH8 Family) PCI Express Port 6 - 284b 82801H (ICH8 Family) HD Audio Controller - 1025 011f Realtek ALC268 audio codec - 1025 0121 Aspire 5920G - 1025 0145 Realtek ALC889 (Aspire 8920G w. Dolby Theather) - 1028 01da OptiPlex 745 - 1028 01f3 Inspiron 1420 - 1028 01f9 Dell Latitude D630 - 1028 01ff Dell Precision M4300 - 1028 0256 Studio 1735 - 103c 2802 HP Compaq dc7700p - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 1043 1339 Asus M51S series - 1043 81ec P5B - 104d 9005 Vaio VGN-FZ260E - 104d 9016 Sony VAIO VGN-AR51M - 14f1 5051 Presario C700 - 17aa 20ac ThinkPad T61 - 8384 7616 Dell Vostro 1400 - 284f 82801H (ICH8 Family) Thermal Reporting Device - 2850 82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller - 1025 0121 Aspire 5920G - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 103c 30d9 Presario C700 - 104d 9005 Vaio VGN-FZ260E - 17aa 20a6 ThinkPad T61 - e4bf cc47 CCG-RUMBA - 2912 82801IH (ICH9DH) LPC Interface Controller - 2914 82801IO (ICH9DO) LPC Interface Controller - 1028 0211 Optiplex 755 - 2916 82801IR (ICH9R) LPC Interface Controller - 2917 ICH9M-E LPC Interface Controller - 2918 82801IB (ICH9) LPC Interface Controller - 1028 0236 PowerEdge R610 82801IB (ICH9) LPC Interface Controller - 2919 ICH9M LPC Interface Controller - 2920 82801IR/IO/IH (ICH9R/DO/DH) 4 port SATA IDE Controller - 1028 020f PowerEdge R300 onboard SATA Controller - 1028 0210 PowerEdge T300 onboard SATA Controller - 1028 0211 Optiplex 755 - 1028 023c PowerEdge R200 onboard SATA Controller - 2921 82801IB (ICH9) 2 port SATA IDE Controller - 1028 0235 PowerEdge R710 SATA IDE Controller - 1028 0236 PowerEdge R610 SATA IDE Controller - 1028 0237 PowerEdge T610 SATA IDE Controller - 2922 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA AHCI Controller - 2923 82801IB (ICH9) 4 port SATA AHCI Controller - 2925 82801IR/IO (ICH9R/DO) SATA RAID Controller - 1734 10e0 System Board D2542 - 8086 2925 System Board D2542 - 2926 82801I (ICH9 Family) 2 port SATA IDE Controller - 1028 020f PowerEdge R300 onboard SATA Controller - 1028 0210 PowerEdge T300 onboard SATA Controller - 1028 0211 Optiplex 755 - 2928 ICH9M/M-E 2 port SATA IDE Controller - 2929 ICH9M/M-E SATA AHCI Controller - 103c 3628 dv6-1190en - 292c ICH9M-E SATA RAID Controller - 292d ICH9M/M-E 2 port SATA IDE Controller - 292e ICH9M SATA IDE Controller - 2930 82801I (ICH9 Family) SMBus Controller - 1028 0211 Optiplex 755 - 103c 3628 dv6-1190en - 2932 82801I (ICH9 Family) Thermal Subsystem - 103c 3628 dv6-1190en - 2934 82801I (ICH9 Family) USB UHCI Controller #1 - 1028 020f PowerEdge R300 onboard UHCI - 1028 0210 PowerEdge T300 onboard UHCI - 1028 0211 Optiplex 755 - 1028 0235 PowerEdge R710 USB UHCI Controller - 1028 0236 PowerEdge R610 USB UHCI Controller - 1028 0237 PowerEdge T610 USB UHCI Controller - 1028 023c PowerEdge R200 onboard UHCI - 1028 0287 PowerEdge M610 onboard UHCI - 1028 029c PowerEdge M710 USB UHCI Controller - 1028 2011 Optiplex 755 - 2935 82801I (ICH9 Family) USB UHCI Controller #2 - 1028 020f PowerEdge R300 onboard UHCI - 1028 0210 PowerEdge T300 onboard UHCI - 1028 0211 Optiplex 755 - 1028 0235 PowerEdge R710 USB UHCI Controller - 1028 0236 PowerEdge R610 USB UHCI Controller - 1028 0237 PowerEdge T610 USB UHCI Controller - 1028 023c PowerEdge R200 onboard UHCI - 1028 0287 PowerEdge M610 onboard UHCI - 1028 029c PowerEdge M710 USB UHCI Controller - 2936 82801I (ICH9 Family) USB UHCI Controller #3 - 1028 020f PowerEdge R300 onboard UHCI - 1028 0210 PowerEdge T300 onboard UHCI - 1028 0211 Optiplex 755 - 1028 0237 PowerEdge T610 USB UHCI Controller - 1028 023c PowerEdge R200 onboard UHCI - 1028 0287 PowerEdge M610 onboard UHCI - 1028 029c PowerEdge M710 USB UHCI Controller - 2937 82801I (ICH9 Family) USB UHCI Controller #4 - 1028 0211 Optiplex 755 - 1028 0235 PowerEdge R710 USB UHCI Controller - 1028 0236 PowerEdge R610 USB UHCI Controller - 1028 0237 PowerEdge T610 USB UHCI Controller - 1028 0287 PowerEdge M610 onboard UHCI - 1028 029c PowerEdge M710 USB UHCI Controller - 1028 2011 Optiplex 755 - 8086 2937 Optiplex 755 - 8086 2942 828011 (ICH9 Family ) USB UHCI Controller - 2938 82801I (ICH9 Family) USB UHCI Controller #5 - 1028 0211 Optiplex 755 - 1028 0235 PowerEdge R710 USB UHCI Controller - 1028 0236 PowerEdge R610 USB UHCI Controller - 1028 0237 PowerEdge T610 USB UHCI Controller - 1028 0287 PowerEdge M610 onboard UHCI - 1028 029c PowerEdge M710 USB UHCI Controller - 8086 2938 Optiplex 755 - 2939 82801I (ICH9 Family) USB UHCI Controller #6 - 1028 0210 PowerEdge T300 onboard UHCI - 1028 0237 PowerEdge T610 USB UHCI Controller - 293a 82801I (ICH9 Family) USB2 EHCI Controller #1 - 1028 020f PowerEdge R300 onboard EHCI - 1028 0210 PowerEdge T300 onboard EHCI - 1028 0211 Optiplex 755 - 1028 0235 PowerEdge R710 USB EHCI Controller - 1028 0236 PowerEdge R610 USB EHCI Controller - 1028 0237 PowerEdge T610 USB EHCI Controller - 1028 023c PowerEdge R200 onboard EHCI - 1028 0287 PowerEdge M610 onboard EHCI - 1028 029c PowerEdge M710 USB EHCI Controller - 293c 82801I (ICH9 Family) USB2 EHCI Controller #2 - 1028 0211 Optiplex 755 - 1028 0235 PowerEdge R710 USB EHCI Controller - 1028 0236 PowerEdge R610 USB EHCI Controller - 1028 0237 PowerEdge T610 USB EHCI Controller - 1028 0287 PowerEdge M610 onboard EHCI - 1028 029c PowerEdge M710 USB EHCI Controller - 8086 293c Optiplex 755 - 293e 82801I (ICH9 Family) HD Audio Controller - 1028 0211 Optiplex 755 - 103c 3628 dv6-1190en - 8086 293e Optiplex 755 - 8086 2940 Optiplex 755 - 2940 82801I (ICH9 Family) PCI Express Port 1 - 1028 0211 Optiplex 755 - 8086 2940 Optiplex 755 - 2942 82801I (ICH9 Family) PCI Express Port 2 - 2944 82801I (ICH9 Family) PCI Express Port 3 - 2946 82801I (ICH9 Family) PCI Express Port 4 - 2948 82801I (ICH9 Family) PCI Express Port 5 - 294a 82801I (ICH9 Family) PCI Express Port 6 - 294c 82566DC-2 Gigabit Network Connection - 17aa 302e 82566DM-2 Gigabit Network Connection - 2970 82946GZ/PL/GL Memory Controller Hub - 2971 82946GZ/PL/GL PCI Express Root Port - 2972 82946GZ/GL Integrated Graphics Controller - 2973 82946GZ/GL Integrated Graphics Controller - 2974 82946GZ/GL HECI Controller - 2975 82946GZ/GL HECI Controller - 2976 82946GZ/GL PT IDER Controller - 2977 82946GZ/GL KT Controller - 2980 82G35 Express DRAM Controller - 2981 82G35 Express PCI Express Root Port - 2982 82G35 Express Integrated Graphics Controller - 2983 82G35 Express Integrated Graphics Controller - 2984 82G35 Express HECI Controller - 2990 82Q963/Q965 Memory Controller Hub - 1028 01da OptiPlex 745 - 2991 82Q963/Q965 PCI Express Root Port - 2992 82Q963/Q965 Integrated Graphics Controller - 2993 82Q963/Q965 Integrated Graphics Controller - 2994 82Q963/Q965 HECI Controller - 2995 82Q963/Q965 HECI Controller - 2996 82Q963/Q965 PT IDER Controller - 2997 82Q963/Q965 KT Controller - 29a0 82P965/G965 Memory Controller Hub - 1043 81ea P5B - 1462 7276 MS-7276 [G965MDH] - 29a1 82P965/G965 PCI Express Root Port - 29a2 82G965 Integrated Graphics Controller - 1462 7276 MS-7276 [G965MDH] - 29a3 82G965 Integrated Graphics Controller - 29a4 82P965/G965 HECI Controller - 29a5 82P965/G965 HECI Controller - 29a6 82P965/G965 PT IDER Controller - 29a7 82P965/G965 KT Controller - 29b0 82Q35 Express DRAM Controller - 1028 0211 OptiPlex 755 - 29b1 82Q35 Express PCI Express Root Port - 1028 0211 OptiPlex 755 - 29b2 82Q35 Express Integrated Graphics Controller - 1028 0211 OptiPlex 755 - 29b3 82Q35 Express Integrated Graphics Controller - 1028 0211 OptiPlex 755 - 29b4 82Q35 Express MEI Controller - 1028 0211 OptiPlex 755 - 29b5 82Q35 Express MEI Controller - 29b6 82Q35 Express PT IDER Controller - 1028 0211 OptiPlex 755 - 29b7 82Q35 Express Serial KT Controller - 1028 0211 OptiPlex 755 - 29c0 82G33/G31/P35/P31 Express DRAM Controller - 1043 82b0 P5KPL-VM Motherboard - 29c1 82G33/G31/P35/P31 Express PCI Express Root Port - 29c2 82G33/G31 Express Integrated Graphics Controller - 1043 82b0 P5KPL-VM Motherboard - 29c3 82G33/G31 Express Integrated Graphics Controller - 1043 82b0 P5KPL-VM Motherboard - 29c4 82G33/G31/P35/P31 Express MEI Controller - 29c5 82G33/G31/P35/P31 Express MEI Controller - 29c6 82G33/G31/P35/P31 Express PT IDER Controller - 29c7 82G33/G31/P35/P31 Express Serial KT Controller - 29cf Virtual HECI Controller - 29d0 82Q33 Express DRAM Controller - 29d1 82Q33 Express PCI Express Root Port - 29d2 82Q33 Express Integrated Graphics Controller - 29d3 82Q33 Express Integrated Graphics Controller - 29d4 82Q33 Express MEI Controller - 29d5 82Q33 Express MEI Controller - 29d6 82Q33 Express PT IDER Controller - 29d7 82Q33 Express Serial KT Controller - 29e0 82X38/X48 Express DRAM Controller - 29e1 82X38/X48 Express Host-Primary PCI Express Bridge - 29e4 82X38/X48 Express MEI Controller - 29e5 82X38/X48 Express MEI Controller - 29e6 82X38/X48 Express PT IDER Controller - 29e7 82X38/X48 Express Serial KT Controller - 29e9 82X38/X48 Express Host-Secondary PCI Express Bridge - 29f0 3200/3210 Chipset DRAM Controller - 29f1 3200/3210 Chipset Host-Primary PCI Express Bridge - 29f4 3200/3210 Chipset MEI Controller - 29f5 3200/3210 Chipset MEI Controller - 29f6 3200/3210 Chipset PT IDER Controller - 29f7 3200/3210 Chipset Serial KT Controller - 29f9 3210 Chipset Host-Secondary PCI Express Bridge - 2a00 Mobile PM965/GM965/GL960 Memory Controller Hub - 1025 0121 Acer Aspire 5920G - 1028 01f3 Inspiron 1420 - 103c 30c0 Compaq 6710b - 103c 30c1 Compaq 6910p - 103c 30d9 Presario C700 - 104d 9005 Vaio VGN-FZ260E - 17aa 20b1 ThinkPad T61 - 17aa 20b3 T61 - e4bf cc47 CCG-RUMBA - 2a01 Mobile PM965/GM965/GL960 PCI Express Root Port - 2a02 Mobile GM965/GL960 Integrated Graphics Controller - 1028 01f3 Inspiron 1420 - 1028 01f9 Latitude D630 - 103c 30c0 Compaq 6710b - 103c 30d9 Presario C700 - 17aa 20b5 T61 - e4bf cc47 CCG-RUMBA - 2a03 Mobile GM965/GL960 Integrated Graphics Controller - 1028 01f3 Dell Inspiron 1420 - 103c 30c0 Compaq 6710b - 103c 30d9 Presario C700 - 17aa 20b5 T61 - e4bf cc47 CCG-RUMBA - 2a04 Mobile PM965/GM965 MEI Controller - 103c 30c1 Compaq 6910p - 2a05 Mobile PM965/GM965 MEI Controller - 2a06 Mobile PM965/GM965 PT IDER Controller - 103c 30c1 Compaq 6910p - 2a07 Mobile PM965/GM965 KT Controller - 103c 30c1 Compaq 6910p - 2a10 Mobile GME965/GLE960 Memory Controller Hub - e4bf cc47 CCG-RUMBA - 2a11 Mobile GME965/GLE960 PCI Express Root Port - 2a12 Mobile GME965/GLE960 Integrated Graphics Controller - e4bf cc47 CCG-RUMBA - 2a13 Mobile GME965/GLE960 Integrated Graphics Controller - e4bf cc47 CCG-RUMBA - 2a14 Mobile GME965/GLE960 MEI Controller - 2a15 Mobile GME965/GLE960 MEI Controller - 2a16 Mobile GME965/GLE960 PT IDER Controller - 2a17 Mobile GME965/GLE960 KT Controller - 2a40 Mobile 4 Series Chipset Memory Controller Hub - 2a41 Mobile 4 Series Chipset PCI Express Graphics Port - 2a42 Mobile 4 Series Chipset Integrated Graphics Controller - 2a43 Mobile 4 Series Chipset Integrated Graphics Controller - 2a44 Mobile 4 Series Chipset MEI Controller - 2a45 Mobile 4 Series Chipset MEI Controller - 2a46 Mobile 4 Series Chipset PT IDER Controller - 2a47 Mobile 4 Series Chipset AMT SOL Redirection - 2a50 Cantiga MEI Controller - 2a51 Cantiga MEI Controller - 2a52 Cantiga PT IDER Controller - 2a53 Cantiga AMT SOL Redirection - 2b00 Nehalem-EX System Configuration Controller 1 - 2b02 Nehalem-EX System Configuration Controller 2 - 2b04 Nehalem-EX Power Controller - 2b08 Nehalem-EX Caching Agent 0 - 2b0c Nehalem-EX Caching Agent 1 - 2b10 Nehalem-EX QPI Home Agent 0 - 2b13 Nehalem-EX Memory Controller 0c - 2b14 Nehalem-EX Memory Controller 0a - 2b16 Nehalem-EX Memory Controller 0b - 2b18 Nehalem-EX QPI Home Agent 1 - 2b1b Nehalem-EX Memory Controller 1c - 2b1c Nehalem-EX Memory Controller 1a - 2b1e Nehalem-EX Memory Controller 1b - 2b20 Nehalem-EX Last Level Cache Coherence Engine 0 - 2b24 Nehalem-EX Last Level Cache Coherence Engine 1 - 2b28 Nehalem-EX Last Level Cache Coherence Engine 2 - 2b2c Nehalem-EX Last Level Cache Coherence Engine 3 - 2b30 Nehalem-EX Last Level Cache Coherence Engine 4 - 2b34 Nehalem-EX Last Level Cache Coherence Engine 5 - 2b38 Nehalem-EX Last Level Cache Coherence Engine 6 - 2b3c Nehalem-EX Last Level Cache Coherence Engine 7 - 2b40 Nehalem-EX QPI Router Port 0-1 - 2b42 Nehalem-EX QPI Router Port 2-3 - 2b44 Nehalem-EX QPI Router Port 4-5 - 2b46 Nehalem-EX QPI Router Port 6-7 - 2b48 Nehalem-EX Test and Debug 0 - 2b4c Nehalem-EX Test and Debug 1 - 2b50 Nehalem-EX QPI Physical Port 0: REUT control/status - 2b52 Nehalem-EX QPI Physical Port 0: Misc. control/status - 2b54 Nehalem-EX QPI Physical Port 1: REUT control/status - 2b56 Nehalem-EX QPI Physical Port 1: Misc. control/status - 2b58 Nehalem-EX QPI Physical Port 2: REUT control/status - 2b5a Nehalem-EX QPI Physical Port 2: Misc. control/status - 2b5c Nehalem-EX QPI Physical Port 3: REUT control/status - 2b5e Nehalem-EX QPI Physical Port 3: Misc. control/status - 2b60 Nehalem-EX SMI Physical Port 0: REUT control/status - 2b62 Nehalem-EX SMI Physical Port 0: Misc control/status - 2b64 Nehalem-EX SMI Physical Port 0: REUT control/status - 2b66 Nehalem-EX SMI Physical Port 1: Misc control/status - 2b68 Nehalem-EX System Configuration Controller 3 - 2b6a Nehalem-EX System Configuration Controller 4 - 2c01 Xeon 5500/Core i7 QuickPath Architecture System Address Decoder - 2c10 Xeon 5500/Core i7 QPI Link 0 - 2c11 Xeon 5500/Core i7 QPI Physical 0 - 2c14 Xeon 5500/Core i7 QPI Link 1 - 2c15 Xeon 5500/Core i7 QPI Physical 1 - 2c18 Xeon 5500/Core i7 Integrated Memory Controller - 2c19 Xeon 5500/Core i7 Integrated Memory Controller Target Address Decoder - 2c1a Xeon 5500/Core i7 Integrated Memory Controller RAS Registers - 2c1c Xeon 5500/Core i7 Integrated Memory Controller Test Registers - 2c20 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Control Registers - 2c21 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Address Registers - 2c22 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Rank Registers - 2c23 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Thermal Control Registers - 2c28 Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Control Registers - 2c29 Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Address Registers - 2c2a Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Rank Registers - 2c2b Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Thermal Control Registers - 2c30 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Control Registers - 2c31 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Address Registers - 2c32 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Rank Registers - 2c33 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Thermal Control Registers - 2c40 Xeon 5500/Core i7 QuickPath Architecture Generic Non-Core Registers - 2c41 Xeon 5500/Core i7 QuickPath Architecture Generic Non-Core Registers - 2c50 Core Processor QuickPath Architecture Generic Non-Core Registers - 2c51 Core Processor QuickPath Architecture Generic Non-Core Registers - 2c52 Core Processor QuickPath Architecture Generic Non-Core Registers - 2c53 Core Processor QuickPath Architecture Generic Non-Core Registers - 2c54 Core Processor QuickPath Architecture Generic Non-Core Registers - 2c55 Core Processor QuickPath Architecture Generic Non-Core Registers - 2c56 Core Processor QuickPath Architecture Generic Non-Core Registers - 2c57 Core Processor QuickPath Architecture Generic Non-Core Registers - 2c58 Jasper Forest QPI Generic Non-core Registers - 2c59 Jasper Forest QPI Generic Non-core Registers - 2c5a Jasper Forest QPI Generic Non-core Registers - 2c5b Jasper Forest QPI Generic Non-core Registers - 2c5c Jasper Forest QPI Generic Non-core Registers - 2c5d Jasper Forest QPI Generic Non-core Registers - 2c5e Jasper Forest QPI Generic Non-core Registers - 2c5f Jasper Forest QPI Generic Non-core Registers - 2c62 QuickPath Architecture Generic Non-core Registers - 2c70 QuickPath Architecture Generic Non-core Registers - 2c81 Core Processor QuickPath Architecture System Address Decoder - 2c90 Core Processor QPI Link 0 - 2c91 Core Processor QPI Physical 0 - 2c98 Core Processor Integrated Memory Controller - 2c99 Core Processor Integrated Memory Controller Target Address Decoder - 2c9c Core Processor Integrated Memory Controller Test Registers - 2ca0 Core Processor Integrated Memory Controller Channel 0 Control Registers - 2ca1 Core Processor Integrated Memory Controller Channel 0 Address Registers - 2ca2 Core Processor Integrated Memory Controller Channel 0 Rank Registers - 2ca3 Core Processor Integrated Memory Controller Channel 0 Thermal Control Registers - 2ca8 Core Processor Integrated Memory Controller Channel 1 Control Registers - 2ca9 Core Processor Integrated Memory Controller Channel 1 Address Registers - 2caa Core Processor Integrated Memory Controller Channel 1 Rank Registers - 2cab Core Processor Integrated Memory Controller Channel 1 Thermal Control Registers - 2cc1 Jasper Forest QPI System Address Decoder - 2cd0 Jasper Forest QPI Link 0 - 2cd1 Jasper Forest QPI Physical 0 - 2cd4 Jasper Forest QPI Link 1 - 2cd5 Jasper Forest QPI Physical 1 - 2cd8 Jasper Forest Integrated Memory Controller Registers - 2cd9 Jasper Forest Integrated Memory Controller Target Address Decoder - 2cda Jasper Forest Integrated Memory Controller RAS Registers - 2cdc Jasper Forest Integrated Memory Controller Test Registers - 2ce0 Jasper Forest Integrated Memory Controller Channel 0 Control - 2ce1 Jasper Forest Integrated Memory Controller Channel 0 Address - 2ce2 Jasper Forest Integrated Memory Controller Channel 0 Rank - 2ce3 Jasper Forest Integrated Memory Controller Channel 0 Thermal Control - 2ce8 Jasper Forest Integrated Memory Controller Channel 1 Control - 2ce9 Jasper Forest Integrated Memory Controller Channel 1 Address - 2cea Jasper Forest Integrated Memory Controller Channel 1 Rank - 2ceb Jasper Forest Integrated Memory Controller Channel 1 Thermal Control - 2cf0 Jasper Forest Integrated Memory Controller Channel 2 Control - 2cf1 Jasper Forest Integrated Memory Controller Channel 2 Address - 2cf2 Jasper Forest Integrated Memory Controller Channel 2 Rank - 2cf3 Jasper Forest Integrated Memory Controller Channel 2 Thermal Control - 2d01 QuickPath Architecture System Address Decoder - 2d10 QPI Link 0 - 2d11 QPI Physical 0 - 2d81 QuickPath Architecture System Address Decoder - 2d90 QPI Link 0 - 2d91 QPI Physical 0 - 2d92 Mirror Port Link 0 - 2d93 Mirror Port Link 1 - 2d94 QPI Link 1 - 2d95 QPI Physical 1 - 2d98 Integrated Memory Controller Registers - 2d99 Integrated Memory Controller Target Address Decoder - 2d9a Integrated Memory Controller RAS Registers - 2d9c Integrated Memory Controller Test Registers - 2da0 Integrated Memory Controller Channel 0 Control - 2da1 Integrated Memory Controller Channel 0 Address - 2da2 Integrated Memory Controller Channel 0 Rank - 2da3 Integrated Memory Controller Channel 0 Thermal Control - 2da8 Integrated Memory Controller Channel 1 Control - 2da9 Integrated Memory Controller Channel 1 Address - 2daa Integrated Memory Controller Channel 1 Rank - 2dab Integrated Memory Controller Channel 1 Thermal Control - 2db0 Integrated Memory Controller Channel 2 Control - 2db1 Integrated Memory Controller Channel 2 Address - 2db2 Integrated Memory Controller Channel 2 Rank - 2db3 Integrated Memory Controller Channel 2 Thermal Control - 2e00 4 Series Chipset DRAM Controller - 2e01 4 Series Chipset PCI Express Root Port - 2e02 4 Series Chipset Integrated Graphics Controller - 2e03 4 Series Chipset Integrated Graphics Controller - 2e04 4 Series Chipset HECI Controller - 2e05 4 Series Chipset HECI Controller - 2e06 4 Series Chipset PT IDER Controller - 2e07 4 Series Chipset Serial KT Controller - 2e10 4 Series Chipset DRAM Controller - 2e11 4 Series Chipset PCI Express Root Port - 2e12 4 Series Chipset Integrated Graphics Controller - 2e13 4 Series Chipset Integrated Graphics Controller - 2e14 4 Series Chipset HECI Controller - 2e15 4 Series Chipset HECI Controller - 2e16 4 Series Chipset PT IDER Controller - 2e17 4 Series Chipset Serial KT Controller - 2e20 4 Series Chipset DRAM Controller - 1458 5000 GA-EP45-DS5 Motherboard - 2e21 4 Series Chipset PCI Express Root Port - 1458 5000 GA-EP45-DS5 Motherboard - 2e22 4 Series Chipset Integrated Graphics Controller - 2e23 4 Series Chipset Integrated Graphics Controller - 2e24 4 Series Chipset HECI Controller - 2e25 4 Series Chipset HECI Controller - 2e26 4 Series Chipset PT IDER Controller - 2e27 4 Series Chipset Serial KT Controller - 2e29 4 Series Chipset PCI Express Root Port - 2e30 4 Series Chipset DRAM Controller - 2e31 4 Series Chipset PCI Express Root Port - 2e32 4 Series Chipset Integrated Graphics Controller - 2e33 4 Series Chipset Integrated Graphics Controller - 2e34 4 Series Chipset HECI Controller - 2e35 4 Series Chipset HECI Controller - 2e36 4 Series Chipset PT IDER Controller - 2e37 4 Series Chipset Serial KT Controller - 2e40 4 Series Chipset DRAM Controller - 2e41 4 Series Chipset PCI Express Root Port - 2e42 4 Series Chipset Integrated Graphics Controller - 2e43 4 Series Chipset Integrated Graphics Controller - 2e44 4 Series Chipset HECI Controller - 2e45 4 Series Chipset HECI Controller - 2e46 4 Series Chipset PT IDER Controller - 2e47 4 Series Chipset Serial KT Controller - 2e91 4 Series Chipset PCI Express Root Port - 2e92 4 Series Chipset Integrated Graphics Controller - 2e93 4 Series Chipset Integrated Graphics Controller - 2e94 4 Series Chipset HECI Controller - 2e95 4 Series Chipset HECI Controller - 2e96 4 Series Chipset PT IDER Controller - 3200 GD31244 PCI-X SATA HBA - 1775 c200 C2K onboard SATA host bus adapter - 3313 IOP348 I/O Processor (SL8e) in IOC Mode SAS/SATA - 331b IOP348 I/O Processor (SL8x) in IOC Mode SAS/SATA - 3331 IOC340 I/O Controller (VV8e) SAS/SATA - 3339 IOC340 I/O Controller (VV8x) SAS/SATA - 3340 82855PM Processor to I/O Controller - 1014 0529 Thinkpad T40 series - 1025 005a TravelMate 290 - 103c 088c NC8000 laptop - 103c 0890 NC6000 laptop - 103c 08b0 tc1100 tablet - 144d c005 X10 Laptop - 144d c00c P30/P35 notebook - 3341 82855PM Processor to AGP Controller - 144d c00c P30 notebook - 3363 IOC340 I/O Controller in IOC Mode SAS/SATA - 3382 81342 [Chevelon] I/O Processor (ATUe) - 33c3 IOP348 I/O Processor (SL8De) in IOC Mode SAS/SATA - 33cb IOP348 I/O Processor (SL8Dx) in IOC Mode SAS/SATA - 3400 5520/5500/X58 I/O Hub to ESI Port - 3401 5520/5500/X58 I/O Hub to ESI Port - 3402 5520/5500/X58 I/O Hub to ESI Port - 3403 5500 I/O Hub to ESI Port - 1028 0236 PowerEdge R610 I/O Hub to ESI Port - 1028 0287 PowerEdge M610 I/O Hub to ESI Port - 1028 028c PowerEdge R410 I/O Hub to ESI Port - 1028 028d PowerEdge T410 I/O Hub to ESI Port - 3404 5520/5500/X58 I/O Hub to ESI Port - 3405 X58 I/O Hub to ESI Port - 3406 5520 I/O Hub to ESI Port - 3407 5520/5500/X58 I/O Hub to ESI Port - 3408 5520/5500/X58 I/O Hub PCI Express Root Port 1 - 3409 5520/5500/X58 I/O Hub PCI Express Root Port 2 - 340a 5520/5500/X58 I/O Hub PCI Express Root Port 3 - 340b 5520/X58 I/O Hub PCI Express Root Port 4 - 340c 5520/X58 I/O Hub PCI Express Root Port 5 - 340d 5520/X58 I/O Hub PCI Express Root Port 6 - 340e 5520/5500/X58 I/O Hub PCI Express Root Port 7 - 340f 5520/5500/X58 I/O Hub PCI Express Root Port 8 - 3410 5520/5500/X58 I/O Hub PCI Express Root Port 9 - 3411 5520/5500/X58 I/O Hub PCI Express Root Port 10 - 3418 5520/5500/X58 Physical Layer Port 0 - 3419 5520/5500 Physical Layer Port 1 - 3420 5500 Non-Legacy I/O Hub PCI Express Root Port 0 - 3421 5520 Non-Legacy I/O Hub PCI Express Root Port 0 - 3422 5520/5500/X58 I/O Hub GPIO and Scratch Pad Registers - 3423 5520/5500/X58 I/O Hub Control Status and RAS Registers - 3425 5520/5500/X58 Physical and Link Layer Registers Port 0 - 3426 5520/5500/X58 Routing and Protocol Layer Registers Port 0 - 3427 5520/5500 Physical and Link Layer Registers Port 1 - 3428 5520/5500 Routing & Protocol Layer Register Port 1 - 3429 5520/5500/X58 Chipset QuickData Technology Device - 342a 5520/5500/X58 Chipset QuickData Technology Device - 342b 5520/5500/X58 Chipset QuickData Technology Device - 342c 5520/5500/X58 Chipset QuickData Technology Device - 342d 5520/5500/X58 I/O Hub I/OxAPIC Interrupt Controller - 342e 5520/5500/X58 I/O Hub System Management Registers - 342f 5520/5500/X58 Trusted Execution Technology Registers - 3430 5520/5500/X58 Chipset QuickData Technology Device - 3431 5520/5500/X58 Chipset QuickData Technology Device - 3432 5520/5500/X58 Chipset QuickData Technology Device - 3433 5520/5500/X58 Chipset QuickData Technology Device - 3438 5520/5500/X58 I/O Hub Throttle Registers - 3500 6311ESB/6321ESB PCI Express Upstream Port - 3501 6310ESB PCI Express Upstream Port - 3504 6311ESB/6321ESB I/OxAPIC Interrupt Controller - 3505 6310ESB I/OxAPIC Interrupt Controller - 350c 6311ESB/6321ESB PCI Express to PCI-X Bridge - 350d 6310ESB PCI Express to PCI-X Bridge - 3510 6311ESB/6321ESB PCI Express Downstream Port E1 - 3511 6310ESB PCI Express Downstream Port E1 - 3514 6311ESB/6321ESB PCI Express Downstream Port E2 - 3515 6310ESB PCI Express Downstream Port E2 - 3518 6311ESB/6321ESB PCI Express Downstream Port E3 - 3519 6310ESB PCI Express Downstream Port E3 - 3575 82830 830 Chipset Host Bridge - 0e11 0030 Evo N600c - 1014 021d ThinkPad A/T/X Series - 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP - 3576 82830 830 Chipset AGP Bridge - 3577 82830 CGC [Chipset Graphics Controller] - 1014 0513 ThinkPad A/T/X Series - 3578 82830 830 Chipset Host Bridge - 3580 82852/82855 GM/GME/PM/GMV Processor to I/O Controller - 1014 055c ThinkPad R50e - 1028 0139 Latitude D400 - 1028 014f Latitude X300 - 1028 0163 Latitude D505 - 1028 018d Inspiron 700m/710m - 1028 0196 Inspiron 5160 - 114a 0582 PC8 - 1734 1055 Amilo M1420 - 1775 10d0 V5D Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10e0 PSL09 PrPMC - e4bf 0cc9 CC9-SAMBA - e4bf 0cd2 CD2-BEBOP - 3581 82852/82855 GM/GME/PM/GMV Processor to AGP Controller - 1734 1055 Amilo M1420 - 3582 82852/855GM Integrated Graphics Device - 1014 0562 ThinkPad R50e - 1028 0139 Latitude D400 - 1028 014f Latitude X300 - 1028 0163 Latitude D505 - 1028 018d Inspiron 700m/710m - 114a 0582 PC8 integrated graphics - 1775 10d0 V5D Single Board Computer VGA - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10e0 PSL09 PrPMC - e4bf 0cc9 CC9-SAMBA - e4bf 0cd2 CD2-BEBOP - 3584 82852/82855 GM/GME/PM/GMV Processor to I/O Controller - 1014 055d ThinkPad R50e - 1028 0139 Latitude D400 - 1028 014f Latitude X300 - 1028 0163 Latitude D505 - 1028 018d Inspiron 700m/710m - 1028 0196 Inspiron 5160 - 114a 0582 PC8 - 1734 1055 Amilo M1420 - 1775 10d0 V5D Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10e0 PSL09 PrPMC - 3585 82852/82855 GM/GME/PM/GMV Processor to I/O Controller - 1014 055e ThinkPad R50e - 1028 0139 Latitude D400 - 1028 014f Latitude X300 - 1028 0163 Latitude D505 - 1028 018d Inspiron 700m/710m - 1028 0196 Inspiron 5160 - 114a 0582 PC8 - 1734 1055 Amilo M1420 - 1775 10d0 V5D Single Board Computer - 1775 ce90 CE9 - 4c53 10b0 CL9 mainboard - 4c53 10e0 PSL09 PrPMC - 358c 82854 GMCH - 358e 82854 GMCH Integrated Graphics Device - 3590 E7520 Memory Controller Hub - 1014 02dd eServer xSeries server mainboard - 1028 016c PowerEdge 1850 Memory Controller Hub - 1028 016d PowerEdge 2850 Memory Controller Hub - 1028 019a PowerEdge SC1425 - 1734 103e PRIMERGY RX/TX S2 series - 1775 1100 CR11/VR11 Single Board Computer - 4c53 10d0 Telum ASLP10 Processor AMC - 3591 E7525/E7520 Error Reporting Registers - 1014 02dd eServer xSeries server mainboard - 1028 0169 Precision 470 - 4c53 10d0 Telum ASLP10 Processor AMC - 3592 E7320 Memory Controller Hub - 3593 E7320 Error Reporting Registers - 3594 E7520 DMA Controller - 1775 1100 CR11/VR11 Single Board Computer - 4c53 10d0 Telum ASLP10 Processor AMC - 3595 E7525/E7520/E7320 PCI Express Port A - 1775 1100 CR11/VR11 Single Board Computer - 3596 E7525/E7520/E7320 PCI Express Port A1 - 3597 E7525/E7520 PCI Express Port B - 1775 1100 CR11/VR11 Single Board Computer - 3598 E7520 PCI Express Port B1 - 1775 1100 CR11/VR11 Single Board Computer - 3599 E7520 PCI Express Port C - 1775 1100 CR11/VR11 Single Board Computer - 359a E7520 PCI Express Port C1 - 359b E7525/E7520/E7320 Extended Configuration Registers - 1014 02dd eServer xSeries server mainboard - 359e E7525 Memory Controller Hub - 1028 0169 Precision 470 - 35b0 3100 Chipset Memory I/O Controller Hub - 35b1 3100 DRAM Controller Error Reporting Registers - 35b5 3100 Chipset Enhanced DMA Controller - 35b6 3100 Chipset PCI Express Port A - 35b7 3100 Chipset PCI Express Port A1 - 35c8 3100 Extended Configuration Test Overflow Registers - 3600 7300 Chipset Memory Controller Hub - 3604 7300 Chipset PCI Express Port 1 - 3605 7300 Chipset PCI Express Port 2 - 3606 7300 Chipset PCI Express Port 3 - 3607 7300 Chipset PCI Express Port 4 - 3608 7300 Chipset PCI Express Port 5 - 3609 7300 Chipset PCI Express Port 6 - 360a 7300 Chipset PCI Express Port 7 - 360b 7300 Chipset QuickData Technology Device - 360c 7300 Chipset FSB Registers - 1028 01f0 PowerEdge R900 7300 Chipset FSB Registers - 360d 7300 Chipset Snoop Filter Registers - 360e 7300 Chipset Debug and Miscellaneous Registers - 360f 7300 Chipset FBD Branch 0 Registers - 3610 7300 Chipset FBD Branch 1 Registers - 3700 Jasper Forest DMI - 3701 Jasper Forest DMI - 3702 Jasper Forest DMI - 3703 Jasper Forest DMI - 3704 Jasper Forest DMI - 3705 Jasper Forest DMI - 3706 Jasper Forest DMI - 3707 Jasper Forest DMI - 3708 Jasper Forest DMI - 3709 Jasper Forest DMI - 370a Jasper Forest DMI - 370b Jasper Forest DMI - 370c Jasper Forest DMI - 370d Jasper Forest DMI - 370e Jasper Forest DMI - 370f Jasper Forest DMI - 3710 Jasper Forest CB3 DMA - 3711 Jasper Forest CB3 DMA - 3712 Jasper Forest CB3 DMA - 3713 Jasper Forest CB3 DMA - 3714 Jasper Forest CB3 DMA - 3715 Jasper Forest CB3 DMA - 3716 Jasper Forest CB3 DMA - 3717 Jasper Forest CB3 DMA - 3718 Jasper Forest CB3 DMA - 3719 Jasper Forest CB3 DMA - 371a Jasper Forest QPI Link - 371b Jasper Forest QPI Routing and Protocol - 371d Jasper Forest QPI Routing and Protocol - 3721 Jasper Forest PCI Express Root Port 1 - 3722 Jasper Forest PCI Express Root Port 2 - 3723 Jasper Forest PCI Express Root Port 3 - 3724 Jasper Forest PCI Express Root Port 4 - 3725 Jasper Forest NTB Primary - 3726 Jasper Forest NTB Primary - 3727 Jasper Forest NTB Secondary - 3728 Jasper Forest Core - 3729 Jasper Forest Core - 372a Jasper Forest Core - 372b Jasper Forest Core - 372c Jasper Forest Reserved - 373f Jasper Forest IOxAPIC - 3a00 82801JD/DO (ICH10 Family) 4-port SATA IDE Controller - 3a02 82801JD/DO (ICH10 Family) SATA AHCI Controller - 3a05 82801JD/DO (ICH10 Family) SATA RAID Controller - 3a06 82801JD/DO (ICH10 Family) 2-port SATA IDE Controller - 3a14 82801JDO (ICH10DO) LPC Interface Controller - 3a16 82801JIR (ICH10R) LPC Interface Controller - 1028 028c PowerEdge R410 LPC Interface Controller - 1028 028d PowerEdge T410 LPC Interface Controller - 1458 5001 GA-EP45-DS5 Motherboard - 3a18 82801JIB (ICH10) LPC Interface Controller - 3a1a 82801JD (ICH10D) LPC Interface Controller - 3a20 82801JI (ICH10 Family) 4 port SATA IDE Controller - 1028 028c PowerEdge R410 SATA IDE Controller - 1028 028d PowerEdge T410 SATA IDE Controller - 3a22 82801JI (ICH10 Family) SATA AHCI Controller - 1043 82d4 P5Q Deluxe Motherboard - 1458 b005 GA-EP45-DS5 Motherboard - 3a25 82801JIR (ICH10R) SATA RAID Controller - 1028 028c PERC S100 Controller (PE R410) - 1028 028d PERC S100 Controller (PE T410) - 1028 02f1 PERC S100 Controller (PE R510) - 3a26 82801JI (ICH10 Family) 2 port SATA IDE Controller - 1028 028c PowerEdge R410 SATA IDE Controller - 1028 028d PowerEdge T410 SATA IDE Controller - 3a30 82801JI (ICH10 Family) SMBus Controller - 1458 5001 GA-EP45-DS5 Motherboard - 3a32 82801JI (ICH10 Family) Thermal Subsystem - 3a34 82801JI (ICH10 Family) USB UHCI Controller #1 - 1028 028c PowerEdge R410 USB UHCI Controller - 1028 028d PowerEdge T410 USB UHCI Controller - 1458 5004 GA-EP45-DS5 Motherboard - 3a35 82801JI (ICH10 Family) USB UHCI Controller #2 - 1028 028c PowerEdge R410 USB UHCI Controller - 1028 028d PowerEdge T410 USB UHCI Controller - 1458 5004 GA-EP45-DS5 Motherboard - 3a36 82801JI (ICH10 Family) USB UHCI Controller #3 - 1028 028c PowerEdge R410 USB UHCI Controller - 1028 028d PowerEdge T410 USB UHCI Controller - 1458 5004 GA-EP45-DS5 Motherboard - 3a37 82801JI (ICH10 Family) USB UHCI Controller #4 - 1028 028c PowerEdge R410 USB UHCI Controller - 1028 028d PowerEdge T410 USB UHCI Controller - 1458 5004 GA-EP45-DS5 Motherboard - 3a38 82801JI (ICH10 Family) USB UHCI Controller #5 - 1028 028c PowerEdge R410 USB UHCI Controller - 1028 028d PowerEdge T410 USB UHCI Controller - 1458 5004 GA-EP45-DS5 Motherboard - 3a39 82801JI (ICH10 Family) USB UHCI Controller #6 - 1028 028c PowerEdge R410 USB UHCI Controller - 1028 028d PowerEdge T410 USB UHCI Controller - 1458 5004 GA-EP45-DS5 Motherboard - 3a3a 82801JI (ICH10 Family) USB2 EHCI Controller #1 - 1028 028c PowerEdge R410 USB EHCI Controller - 1028 028d PowerEdge T410 USB EHCI Controller - 1458 5006 GA-EP45-DS5 Motherboard - 3a3c 82801JI (ICH10 Family) USB2 EHCI Controller #2 - 1028 028c PowerEdge R410 USB EHCI Controller - 1028 028d PowerEdge T410 USB EHCI Controller - 1458 5006 GA-EP45-DS5 Motherboard - 3a3e 82801JI (ICH10 Family) HD Audio Controller - 1458 a102 GA-EP45-DS5 Motherboard - 3a40 82801JI (ICH10 Family) PCI Express Port 1 - 1028 028c PowerEdge R410 PCI Express Port 1 - 1028 028d PowerEdge T410 PCI Express Port 1 - 1458 5001 GA-EP45-DS5 Motherboard - 3a42 82801JI (ICH10 Family) PCI Express Port 2 - 3a44 82801JI (ICH10 Family) PCI Express Port 3 - 3a46 82801JI (ICH10 Family) PCI Express Port 4 - 1458 5001 GA-EP45-DS5 Motherboard - 3a48 82801JI (ICH10 Family) PCI Express Port 5 - 1458 5001 GA-EP45-DS5 Motherboard - 3a4a 82801JI (ICH10 Family) PCI Express Port 6 - 1458 5001 GA-EP45-DS5 Motherboard - 3a4c 82801JI (ICH10 Family) Gigabit Ethernet Controller - 3a51 82801JDO (ICH10DO) VECI Controller - 3a55 82801JD/DO (ICH10 Family) Virtual SATA Controller - 3a60 82801JD/DO (ICH10 Family) SMBus Controller - 3a62 82801JD/DO (ICH10 Family) Thermal Subsystem - 3a64 82801JD/DO (ICH10 Family) USB UHCI Controller #1 - 3a65 82801JD/DO (ICH10 Family) USB UHCI Controller #2 - 3a66 82801JD/DO (ICH10 Family) USB UHCI Controller #3 - 3a67 82801JD/DO (ICH10 Family) USB UHCI Controller #4 - 3a68 82801JD/DO (ICH10 Family) USB UHCI Controller #5 - 3a69 82801JD/DO (ICH10 Family) USB UHCI Controller #6 - 3a6a 82801JD/DO (ICH10 Family) USB2 EHCI Controller #1 - 3a6c 82801JD/DO (ICH10 Family) USB2 EHCI Controller #2 - 3a6e 82801JD/DO (ICH10 Family) HD Audio Controller - 3a70 82801JD/DO (ICH10 Family) PCI Express Port 1 - 3a72 82801JD/DO (ICH10 Family) PCI Express Port 2 - 3a74 82801JD/DO (ICH10 Family) PCI Express Port 3 - 3a76 82801JD/DO (ICH10 Family) PCI Express Port 4 - 3a78 82801JD/DO (ICH10 Family) PCI Express Port 5 - 3a7a 82801JD/DO (ICH10 Family) PCI Express Port 6 - 3a7c 82801JD/DO (ICH10 Family) Gigabit Ethernet Controller - 3b00 5 Series/3400 Series Chipset LPC Interface Controller - 3b01 Mobile 5 Series Chipset LPC Interface Controller - 3b02 5 Series Chipset LPC Interface Controller - 3b03 Mobile 5 Series Chipset LPC Interface Controller - 3b04 5 Series Chipset LPC Interface Controller - 3b05 Mobile 5 Series Chipset LPC Interface Controller - 3b06 5 Series Chipset LPC Interface Controller - 3b07 Mobile 5 Series Chipset LPC Interface Controller - 3b08 5 Series Chipset LPC Interface Controller - 3b09 Mobile 5 Series Chipset LPC Interface Controller - 3b0a 5 Series Chipset LPC Interface Controller - 3b0b Mobile 5 Series Chipset LPC Interface Controller - 3b0c 5 Series Chipset LPC Interface Controller - 3b0d 5 Series/3400 Series Chipset LPC Interface Controller - 3b0e 5 Series/3400 Series Chipset LPC Interface Controller - 3b0f 5 Series/3400 Series Chipset LPC Interface Controller - 3b10 5 Series/3400 Series Chipset LPC Interface Controller - 3b11 5 Series/3400 Series Chipset LPC Interface Controller - 3b12 3400 Series Chipset LPC Interface Controller - 3b13 5 Series/3400 Series Chipset LPC Interface Controller - 3b14 3400 Series Chipset LPC Interface Controller - 3b15 5 Series/3400 Series Chipset LPC Interface Controller - 3b16 3400 Series Chipset LPC Interface Controller - 3b17 5 Series/3400 Series Chipset LPC Interface Controller - 3b18 5 Series/3400 Series Chipset LPC Interface Controller - 3b19 5 Series/3400 Series Chipset LPC Interface Controller - 3b1a 5 Series/3400 Series Chipset LPC Interface Controller - 3b1b 5 Series/3400 Series Chipset LPC Interface Controller - 3b1c 5 Series/3400 Series Chipset LPC Interface Controller - 3b1d 5 Series/3400 Series Chipset LPC Interface Controller - 3b1e 5 Series/3400 Series Chipset LPC Interface Controller - 3b1f 5 Series/3400 Series Chipset LPC Interface Controller - 3b20 5 Series/3400 Series Chipset 4 port SATA IDE Controller - 3b21 5 Series/3400 Series Chipset 2 port SATA IDE Controller - 3b22 5 Series/3400 Series Chipset 6 port SATA AHCI Controller - 3b23 5 Series/3400 Series Chipset 4 port SATA AHCI Controller - 3b25 5 Series/3400 Series Chipset SATA RAID Controller - 3b26 5 Series/3400 Series Chipset 2 port SATA IDE Controller - 3b28 5 Series/3400 Series Chipset 4 port SATA IDE Controller - 3b29 5 Series/3400 Series Chipset 4 port SATA AHCI Controller - 3b2c 5 Series/3400 Series Chipset SATA RAID Controller - 3b2d 5 Series/3400 Series Chipset 2 port SATA IDE Controller - 3b2e 5 Series/3400 Series Chipset 4 port SATA IDE Controller - 3b2f 5 Series/3400 Series Chipset 6 port SATA AHCI Controller - 3b30 5 Series/3400 Series Chipset SMBus Controller - 3b32 5 Series/3400 Series Chipset Thermal Subsystem - 3b34 5 Series/3400 Series Chipset USB2 Enhanced Host Controller - 3b36 5 Series/3400 Series Chipset USB Universal Host Controller - 3b37 5 Series/3400 Series Chipset USB Universal Host Controller - 3b38 5 Series/3400 Series Chipset USB Universal Host Controller - 3b39 5 Series/3400 Series Chipset USB Universal Host Controller - 3b3a 5 Series/3400 Series Chipset USB Universal Host Controller - 3b3b 5 Series/3400 Series Chipset USB Universal Host Controller - 3b3c 5 Series/3400 Series Chipset USB2 Enhanced Host Controller - 3b3e 5 Series/3400 Series Chipset USB Universal Host Controller - 3b3f 5 Series/3400 Series Chipset USB Universal Host Controller - 3b40 5 Series/3400 Series Chipset USB Universal Host Controller - 3b41 5 Series/3400 Series Chipset LAN Controller - 3b42 5 Series/3400 Series Chipset PCI Express Root Port 1 - 3b44 5 Series/3400 Series Chipset PCI Express Root Port 2 - 3b46 5 Series/3400 Series Chipset PCI Express Root Port 3 - 3b48 5 Series/3400 Series Chipset PCI Express Root Port 4 - 3b4a 5 Series/3400 Series Chipset PCI Express Root Port 5 - 3b4c 5 Series/3400 Series Chipset PCI Express Root Port 6 - 3b4e 5 Series/3400 Series Chipset PCI Express Root Port 7 - 3b50 5 Series/3400 Series Chipset PCI Express Root Port 8 - 3b53 5 Series/3400 Series Chipset VECI Controller - 3b56 5 Series/3400 Series Chipset High Definition Audio - 3b64 5 Series/3400 Series Chipset HECI Controller - 3b65 5 Series/3400 Series Chipset HECI Controller - 3b66 5 Series/3400 Series Chipset PT IDER Controller - 3b67 5 Series/3400 Series Chipset KT Controller - 4000 5400 Chipset Memory Controller Hub - 4001 5400 Chipset Memory Controller Hub - 4003 5400 Chipset Memory Controller Hub - 4021 5400 Chipset PCI Express Port 1 - 4022 5400 Chipset PCI Express Port 2 - 4023 5400 Chipset PCI Express Port 3 - 4024 5400 Chipset PCI Express Port 4 - 4025 5400 Chipset PCI Express Port 5 - 4026 5400 Chipset PCI Express Port 6 - 4027 5400 Chipset PCI Express Port 7 - 4028 5400 Chipset PCI Express Port 8 - 4029 5400 Chipset PCI Express Port 9 - 402d 5400 Chipset IBIST Registers - 402e 5400 Chipset IBIST Registers - 402f 5400 Chipset QuickData Technology Device - 4030 5400 Chipset FSB Registers - 4031 5400 Chipset CE/SF Registers - 4032 5400 Chipset IOxAPIC - 4035 5400 Chipset FBD Registers - 4036 5400 Chipset FBD Registers - 4220 PRO/Wireless 2200BG [Calexico2] Network Connection - 103c 0934 Compaq nw8240/nx8220 - 103c 12f6 Compaq nw8240/nx8220 - 8086 2712 IBM ThinkPad R50e - 8086 2721 Dell B130 laptop integrated WLAN - 8086 2722 Dell Latitude D600 - 8086 2731 Samsung P35 integrated WLAN - 4222 PRO/Wireless 3945ABG [Golan] Network Connection - 103c 135c Compaq 6710b or nx9420 Notebook - 8086 1000 PRO/Wireless 3945ABG Network Connection - 8086 1001 PRO/Wireless 3945ABG Network Connection - 8086 1005 PRO/Wireless 3945BG Network Connection - 8086 1034 PRO/Wireless 3945BG Network Connection - 8086 1044 PRO/Wireless 3945BG Network Connection - 8086 1c00 PRO/Wireless 3945ABG Network Connection - 4223 PRO/Wireless 2915ABG [Calexico2] Network Connection - 1000 8086 mPCI 3B Americas/Europe ZZA - 1001 8086 mPCI 3B Europe ZZE - 1002 8086 mPCI 3B Japan ZZJ - 1003 8086 mPCI 3B High-Band ZZH - 1351 103c Compaq NC6220 - 4224 PRO/Wireless 2915ABG [Calexico2] Network Connection - 4227 PRO/Wireless 3945ABG [Golan] Network Connection - 8086 1011 ThinkPad R60e/X60s - 8086 1014 PRO/Wireless 3945BG Network Connection - 4229 PRO/Wireless 4965 AG or AGN [Kedron] Network Connection - 422b WiFi Link 6000 Series - 4230 PRO/Wireless 4965 AG or AGN [Kedron] Network Connection - 8086 1110 Lenovo ThinkPad T51 - 8086 1111 Lenovo ThinkPad T61 - 4232 Wireless WiFi Link 5100 - 8086 1205 PRO/Wireless 5100BG Network Connection - 8086 1206 PRO/Wireless 5100ABG Network Connection - 8086 1216 PRO/Wireless 5100ABG Network Connection - 8086 1305 PRO/Wireless 5100BG Network Connection - 8086 1306 PRO/Wireless 5100ABG Network Connection - 8086 1321 Wireless WiFi Link 5100 - 8086 1326 PRO/Wireless 5100ABG Network Connection - 4235 PRO/Wireless 5300 AGN [Shiloh] Network Connection - 4236 Wireless WiFi Link 5300 - 4237 PRO/Wireless 5100 AGN [Shiloh] Network Connection - 4238 WiFi Link 6000 Series - 423a PRO/Wireless 5350 AGN [Echo Peak] Network Connection - 423b PRO/Wireless 5350 AGN [Echo Peak] Network Connection - 423c WiMAX/WiFi Link 5050 Series - 423d WiMAX/WiFi Link 5050 Series - 444e Turbo Memory Controller - 5001 LE80578 - 5002 LE80578 Graphics Processor Unit - 5009 LE80578 Video Display Controller - 500d LE80578 Expansion Bus - 500e LE80578 UART Controller - 500f LE80578 General Purpose IO - 5010 LE80578 I2C Controller - 5012 LE80578 Serial Peripheral Interface Bus - 5020 EP80579 Memory Controller Hub - 5021 EP80579 DRAM Error Reporting Registers - 5023 EP80579 EDMA Controller - 5024 EP80579 PCI Express Port PEA0 - 5025 EP80579 PCI Express Port PEA1 - 5028 EP80579 S-ATA IDE - 5029 EP80579 S-ATA AHCI - 502a EP80579 S-ATA Reserved - 502b EP80579 S-ATA Reserved - 502c EP80579 Integrated Processor ASU - 502d EP80579 Integrated Processor with QuickAssist ASU - 502e EP80579 Reserved - 502f EP80579 Reserved - 5030 EP80579 Reserved - 5031 EP80579 LPC Bus - 5032 EP80579 SMBus Controller - 5033 EP80579 USB 1.1 Controller - 5035 EP80579 USB 2.0 Controller - 5037 EP80579 PCI-PCI Bridge (transparent mode) - 5039 EP80579 Controller Area Network (CAN) interface #1 - 503a EP80579 Controller Area Network (CAN) interface #2 - 503b EP80579 Synchronous Serial Port (SPP) - 503c EP80579 IEEE 1588 Hardware Assist - 503d EP80579 Local Expansion Bus - 503e EP80579 Global Control Unit (GCU) - 503f EP80579 Reserved - 5040 EP80579 Integrated Processor Gigabit Ethernet MAC - 5041 EP80579 Integrated Processor with QuickAssist Gigabit Ethernet MAC - 5042 EP80579 Reserved - 5043 EP80579 Reserved - 5044 EP80579 Integrated Processor Gigabit Ethernet MAC - 5045 EP80579 Integrated Processor with QuickAssist Gigabit Ethernet MAC - 5046 EP80579 Reserved - 5047 EP80579 Reserved - 5048 EP80579 Integrated Processor Gigabit Ethernet MAC - 5049 EP80579 Integrated Processor with QuickAssist Gigabit Ethernet MAC - 504a EP80579 Reserved - 504b EP80579 Reserved - 504c EP80579 Integrated Processor with QuickAssist TDM - 5200 EtherExpress PRO/100 Intelligent Server - 5201 EtherExpress PRO/100 Intelligent Server - 8086 0001 EtherExpress PRO/100 Server Ethernet Adapter - 530d 80310 (IOP) IO Processor - 65c0 5100 Chipset Memory Controller Hub - 65e2 5100 Chipset PCI Express x4 Port 2 - 65e3 5100 Chipset PCI Express x4 Port 3 - 65e4 5100 Chipset PCI Express x4 Port 4 - 65e5 5100 Chipset PCI Express x4 Port 5 - 65e6 5100 Chipset PCI Express x4 Port 6 - 65e7 5100 Chipset PCI Express x4 Port 7 - 65f0 5100 Chipset FSB Registers - 1028 020f PowerEdge R300 - 1028 0210 PowerEdge T300 - 65f1 5100 Chipset Reserved Registers - 1028 0210 PowerEdge T300 - 65f3 5100 Chipset Reserved Registers - 65f5 5100 Chipset DDR Channel 0 Registers - 65f6 5100 Chipset DDR Channel 1 Registers - 65f7 5100 Chipset PCI Express x8 Port 2-3 - 65f8 5100 Chipset PCI Express x8 Port 4-5 - 65f9 5100 Chipset PCI Express x8 Port 6-7 - 65fa 5100 Chipset PCI Express x16 Port 4-7 - 65ff 5100 Chipset DMA Engine - 7000 82371SB PIIX3 ISA [Natoma/Triton II] - 1af4 1100 Qemu virtual machine - 7010 82371SB PIIX3 IDE [Natoma/Triton II] - 1af4 1100 Qemu virtual machine - 7020 82371SB PIIX3 USB [Natoma/Triton II] - 1af4 1100 Qemu virtual machine - 7030 430VX - 82437VX TVX [Triton VX] - 7050 Intercast Video Capture Card - 7051 PB 642365-003 (Business Video Conferencing Card) - 7100 430TX - 82439TX MTXC - 7110 82371AB/EB/MB PIIX4 ISA - 15ad 1976 Virtual Machine Chipset - 7111 82371AB/EB/MB PIIX4 IDE - 15ad 1976 Virtual Machine Chipset - 7112 82371AB/EB/MB PIIX4 USB - 15ad 1976 Virtual Machine Chipset - 7113 82371AB/EB/MB PIIX4 ACPI - 15ad 1976 Virtual Machine Chipset - 1af4 1100 Qemu virtual machine - 7120 82810 GMCH (Graphics Memory Controller Hub) - 4c53 1040 CL7 mainboard - 4c53 1060 PC7 mainboard - 7121 82810 (CGC) Chipset Graphics Controller - 4c53 1040 CL7 mainboard - 4c53 1060 PC7 mainboard - 8086 4341 Cayman (CA810) Mainboard - 7122 82810 DC-100 (GMCH) Graphics Memory Controller Hub - 7123 82810 DC-100 (CGC) Chipset Graphics Controller - 7124 82810E DC-133 (GMCH) Graphics Memory Controller Hub - 1028 00b4 OptiPlex GX110 - 7125 82810E DC-133 (CGC) Chipset Graphics Controller - 1028 00b4 OptiPlex GX110 - 7126 82810 DC-133 System and Graphics Controller - 7128 82810-M DC-100 System and Graphics Controller - 712a 82810-M DC-133 System and Graphics Controller - 7180 440LX/EX - 82443LX/EX Host bridge - 7181 440LX/EX - 82443LX/EX AGP bridge - 7190 440BX/ZX/DX - 82443BX/ZX/DX Host bridge - 0e11 0500 Armada 1750 Laptop System Chipset - 0e11 b110 Armada M700/E500 - 1028 008e PowerEdge 1300 mainboard - 1043 803b CUBX-L/E Mainboard - 1179 0001 Toshiba Tecra 8100 Laptop System Chipset - 15ad 1976 Virtual Machine Chipset - 4c53 1050 CT7 mainboard - 4c53 1051 CE7 mainboard - 7191 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge - 1028 008e PowerEdge 1300 mainboard - 7192 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled) - 0e11 0460 Armada 1700 Laptop System Chipset - 1179 0001 Satellite 4010 - 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard - 8086 7190 Dell PowerEdge 350 - 7194 82440MX Host Bridge - 1033 0000 Versa Note Vxi - 4c53 10a0 CA3/CR3 mainboard - 7195 82440MX AC'97 Audio Controller - 1033 80cc Versa Note VXi - 10cf 1099 QSound_SigmaTel Stac97 PCI Audio - 11d4 0040 SoundMAX Integrated Digital Audio - 11d4 0048 SoundMAX Integrated Digital Audio - 7196 82440MX AC'97 Modem Controller - 7198 82440MX ISA Bridge - 7199 82440MX EIDE Controller - 719a 82440MX USB Universal Host Controller - 719b 82440MX Power Management Controller - 71a0 440GX - 82443GX Host bridge - 4c53 1050 CT7 mainboard - 4c53 1051 CE7 mainboard - 71a1 440GX - 82443GX AGP bridge - 71a2 440GX - 82443GX Host bridge (AGP disabled) - 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard - 7600 82372FB PIIX5 ISA - 7601 82372FB PIIX5 IDE - 7602 82372FB PIIX5 USB - 7603 82372FB PIIX5 SMBus - 7800 82740 (i740) AGP Graphics Accelerator - 003d 0008 Starfighter AGP - 003d 000b Starfighter AGP - 1092 0100 Stealth II G460 - 10b4 201a Lightspeed 740 - 10b4 202f Lightspeed 740 - 8086 0000 Terminator 2x/i - 8086 0100 Intel740 Graphics Accelerator - 8002 Trusted Execution Technology Registers - 8003 Trusted Execution Technology Registers - 8100 System Controller Hub (SCH Poulsbo) - 8108 System Controller Hub (SCH Poulsbo) Graphics Controller - 8110 System Controller Hub (SCH Poulsbo) PCI Express Port 1 - 8112 System Controller Hub (SCH Poulsbo) PCI Express Port 2 - 8114 System Controller Hub (SCH Poulsbo) USB UHCI #1 - 8115 System Controller Hub (SCH Poulsbo) USB UHCI #2 - 8116 System Controller Hub (SCH Poulsbo) USB UHCI #3 - 8117 System Controller Hub (SCH Poulsbo) USB EHCI #1 - 8118 System Controller Hub (SCH Poulsbo) USB Client Controller - 8119 System Controller Hub (SCH Poulsbo) LPC Bridge - 811a System Controller Hub (SCH Poulsbo) IDE Controller - 811b System Controller Hub (SCH Poulsbo) HD Audio Controller - 811c System Controller Hub (SCH Poulsbo) SDIO Controller #1 - 811d System Controller Hub (SCH Poulsbo) SDIO Controller #2 - 811e System Controller Hub (SCH Poulsbo) SDIO Controller #3 - 84c4 450KX/GX [Orion] - 82454KX/GX PCI bridge - 84c5 450KX/GX [Orion] - 82453KX/GX Memory controller - 84ca 450NX - 82451NX Memory & I/O Controller - 84cb 450NX - 82454NX/84460GX PCI Expander Bridge - 84e0 460GX - 84460GX System Address Controller (SAC) - 84e1 460GX - 84460GX System Data Controller (SDC) - 84e2 460GX - 84460GX AGP Bridge (GXB function 2) - 84e3 460GX - 84460GX Memory Address Controller (MAC) - 84e4 460GX - 84460GX Memory Data Controller (MDC) - 84e6 460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB) - 84ea 460GX - 84460GX AGP Bridge (GXB function 1) - 8500 IXP4XX Network Processor (IXP420/421/422/425/IXC1100) - 1993 0ded mGuard-PCI AV#2 - 1993 0dee mGuard-PCI AV#1 - 1993 0def mGuard-PCI AV#0 - 9000 IXP2000 Family Network Processor - 9001 IXP2400 Network Processor - 9002 IXP2300 Network Processor - 9004 IXP2800 Network Processor - 9621 Integrated RAID - 9622 Integrated RAID - 9641 Integrated RAID - 96a1 Integrated RAID - a000 Pineview DMI Bridge - a001 Pineview Integrated Graphics Controller - a002 Pineview Integrated Graphics Controller - a003 Pineview CHAPS counter - a010 Pineview DMI Bridge - a011 Pineview Integrated Graphics Controller - a012 Pineview Integrated Graphics Controller - a013 Pineview CHAPS counter - a620 6400/6402 Advanced Memory Buffer (AMB) - b152 21152 PCI-to-PCI Bridge - 8086 b152 21152 PCI-to-PCI Bridge -# observed, and documented in Intel revision note; new mask of 1011:0026 - b154 21154 PCI-to-PCI Bridge - b555 21555 Non transparent PCI-to-PCI Bridge - 12c7 5005 SS7HD PCI Adaptor Card - 12c7 5006 SS7HDC cPCI Adaptor Card - 12d9 000a PCI VoIP Gateway - 4c53 1050 CT7 mainboard - 4c53 1051 CE7 mainboard - e4bf 1000 CC8-1-BLUES - d130 Core Processor DMI - d131 Core Processor DMI - d132 Core Processor DMI - d133 Core Processor DMI - d134 Core Processor DMI - d135 Core Processor DMI - d136 Core Processor DMI - d137 Core Processor DMI - d138 Core Processor PCI Express Root Port 1 - d139 Core Processor PCI Express Root Port 2 - d13a Core Processor PCI Express Root Port 3 - d13b Core Processor PCI Express Root Port 4 - d150 Core Processor QPI Link - d151 Core Processor QPI Routing and Protocol Registers - d155 Core Processor System Management Registers - d156 Core Processor Semaphore and Scratchpad Registers - d157 Core Processor System Control and Status Registers - d158 Core Processor Miscellaneous Registers -80ee InnoTek Systemberatung GmbH - beef VirtualBox Graphics Adapter - cafe VirtualBox Guest Service -8322 Sodick America Corp. -8384 SigmaTel - 7618 High Definition Audio Codec - 7634 9250 HD Audio Codec - 7664 High Definition Audio Codec - 7670 9770 High Definition Audio - 7672 9772 High Definition Audio - 7682 IDT High Definition Audio Codec - 7690 9200 HD Audio Codec -8401 TRENDware International Inc. -8686 ScaleMP - 1010 vSMPowered system controller [vSMP CTL] -8800 Trigem Computer Inc. - 2008 Video assistent component -8866 T-Square Design Inc. -8888 Silicon Magic -8912 TRX -# 8c4a is not Winbond but there is a board misprogrammed -8c4a Winbond - 1980 W89C940 misprogrammed [ne2k] -8e0e Computone Corporation -8e2e KTI - 3000 ET32P2 -9004 Adaptec - 0078 AHA-2940U_CN - 1078 AIC-7810 - 1160 AIC-1160 [Family Fibre Channel Adapter] - 2178 AIC-7821 - 3860 AHA-2930CU - 3b78 AHA-4844W/4844UW - 5075 AIC-755x - 5078 AIC-7850 - 9004 7850 AHA-2904/Integrated AIC-7850 - 5175 AIC-755x - 5178 AIC-7851 - 5275 AIC-755x - 5278 AIC-7852 - 5375 AIC-755x - 5378 AIC-7850 - 5475 AIC-755x - 5478 AIC-7850 - 5575 AVA-2930 - 5578 AIC-7855 - 5647 ANA-7711 TCP Offload Engine - 9004 7710 ANA-7711F TCP Offload Engine - Optical - 9004 7711 ANA-7711LP TCP Offload Engine - Copper - 5675 AIC-755x - 5678 AIC-7856 - 5775 AIC-755x - 5778 AIC-7850 - 5800 AIC-5800 - 5900 ANA-5910/5930/5940 ATM155 & 25 LAN Adapter - 5905 ANA-5910A/5930A/5940A ATM Adapter - 6038 AIC-3860 - 6075 AIC-1480 / APA-1480 - 9004 7560 AIC-1480 / APA-1480 Cardbus - 6078 AIC-7860 - 6178 AIC-7861 - 9004 7861 AHA-2940AU Single - 6278 AIC-7860 - 6378 AIC-7860 - 6478 AIC-786x - 6578 AIC-786x - 6678 AIC-786x - 6778 AIC-786x - 6915 ANA620xx/ANA69011A - 9004 0008 ANA69011A/TX 10/100 - 9004 0009 ANA69011A/TX 10/100 - 9004 0010 ANA62022 2-port 10/100 - 9004 0018 ANA62044 4-port 10/100 - 9004 0019 ANA62044 4-port 10/100 - 9004 0020 ANA62022 2-port 10/100 - 9004 0028 ANA69011A/TX 10/100 - 9004 8008 ANA69011A/TX 64 bit 10/100 - 9004 8009 ANA69011A/TX 64 bit 10/100 - 9004 8010 ANA62022 2-port 64 bit 10/100 - 9004 8018 ANA62044 4-port 64 bit 10/100 - 9004 8019 ANA62044 4-port 64 bit 10/100 - 9004 8020 ANA62022 2-port 64 bit 10/100 - 9004 8028 ANA69011A/TX 64 bit 10/100 - 7078 AHA-294x / AIC-7870 - 7178 AHA-2940/2940W / AIC-7871 - 7278 AHA-3940/3940W / AIC-7872 - 7378 AHA-3985 / AIC-7873 - 7478 AHA-2944/2944W / AIC-7874 - 7578 AHA-3944/3944W / AIC-7875 - 7678 AHA-4944W/UW / AIC-7876 - 7710 ANA-7711F Network Accelerator Card (NAC) - Optical - 7711 ANA-7711C Network Accelerator Card (NAC) - Copper - 7778 AIC-787x - 7810 AIC-7810 - 7815 AIC-7815 RAID+Memory Controller IC - 9004 7815 ARO-1130U2 RAID Controller - 9004 7840 AIC-7815 RAID+Memory Controller IC - 7850 AIC-7850 - 7855 AHA-2930 - 7860 AIC-7860 - 7870 AIC-7870 - 7871 AHA-2940 - 7872 AHA-3940 - 7873 AHA-3980 - 7874 AHA-2944 - 7880 AIC-7880P - 7890 AIC-7890 - 7891 AIC-789x - 7892 AIC-789x - 7893 AIC-789x - 7894 AIC-789x - 7895 AHA-2940U/UW / AHA-39xx / AIC-7895 - 9004 7890 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B - 9004 7891 AHA-2940U/2940UW Dual - 9004 7892 AHA-3940AU/AUW/AUWD/UWD - 9004 7894 AHA-3944AUWD - 9004 7895 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B - 9004 7896 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B - 9004 7897 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B - 7896 AIC-789x - 7897 AIC-789x - 8078 AIC-7880U - 9004 7880 AIC-7880P Ultra/Ultra Wide SCSI Chipset - 8178 AHA-2940U/UW/D / AIC-7881U - 9004 7881 AHA-2940UW SCSI Host Adapter - 8278 AHA-3940U/UW/UWD / AIC-7882U - 8378 AHA-3940U/UW / AIC-7883U - 8478 AHA-2944UW / AIC-7884U - 8578 AHA-3944U/UWD / AIC-7885 - 8678 AHA-4944UW / AIC-7886 - 8778 AHA-2940UW Pro / AIC-788x - 9004 7887 2940UW Pro Ultra-Wide SCSI Controller - 8878 AHA-2930UW / AIC-7888 - 9004 7888 AHA-2930UW SCSI Controller - 8b78 ABA-1030 - ec78 AHA-4944W/UW -9005 Adaptec - 0010 AHA-2940U2/U2W - 9005 2180 AHA-2940U2 SCSI Controller - 9005 8100 AHA-2940U2B SCSI Controller - 9005 a100 AHA-2940U2B SCSI Controller - 9005 a180 AHA-2940U2W SCSI Controller - 9005 e100 AHA-2950U2B SCSI Controller - 0011 AHA-2930U2 - 0013 78902 - 9005 0003 AAA-131U2 Array1000 1 Channel RAID Controller - 9005 000f AIC7890_ARO - 001f AHA-2940U2/U2W / 7890/7891 - 9005 000f 2940U2W SCSI Controller - 9005 a180 2940U2W SCSI Controller - 0020 AIC-7890 - 002f AIC-7890 - 0030 AIC-7890 - 003f AIC-7890 - 0050 AHA-3940U2x/395U2x - 9005 f500 AHA-3950U2B - 9005 ffff AHA-3950U2B - 0051 AHA-3950U2D - 9005 b500 AHA-3950U2D - 0053 AIC-7896 SCSI Controller - 9005 ffff AIC-7896 SCSI Controller mainboard implementation - 005f AIC-7896U2/7897U2 - 0080 AIC-7892A U160/m - 0e11 e2a0 Compaq 64-Bit/66MHz Wide Ultra3 SCSI Adapter - 9005 6220 AHA-29160C - 9005 62a0 29160N Ultra160 SCSI Controller - 9005 e220 29160LP Low Profile Ultra160 SCSI Controller - 9005 e2a0 29160 Ultra160 SCSI Controller - 0081 AIC-7892B U160/m - 9005 62a1 19160 Ultra160 SCSI Controller - 0083 AIC-7892D U160/m - 008f AIC-7892P U160/m - 1179 0001 Magnia Z310 - 15d9 9005 Onboard SCSI Host Adapter - 0092 AVC-2010 [VideoH!] - 0093 AVC-2410 [VideoH!] - 00c0 AHA-3960D / AIC-7899A U160/m - 0e11 f620 Compaq 64-Bit/66MHz Dual Channel Wide Ultra3 SCSI Adapter - 9005 f620 AHA-3960D U160/m - 00c1 AIC-7899B U160/m - 00c3 AIC-7899D U160/m - 00c5 RAID subsystem HBA - 1028 00c5 PowerEdge 2400,2500,2550,4400 - 00cf AIC-7899P U160/m - 1028 00ce PowerEdge 1400 - 1028 00d1 PowerEdge 2550 - 1028 00d9 PowerEdge 2500 - 10f1 2462 Thunder K7 S2462 - 15d9 9005 Onboard SCSI Host Adapter - 8086 3411 SDS2 Mainboard - 0241 Serial ATA II RAID 1420SA - 0242 Serial ATA II RAID 1220SA - 0243 Serial ATA II RAID 1430SA - 0244 eSATA II RAID 1225SA - 0250 ServeRAID Controller - 1014 0279 ServeRAID-xx - 1014 028c ServeRAID-xx - 0279 ServeRAID 6M - 0283 AAC-RAID - 9005 0283 Catapult - 0284 AAC-RAID - 9005 0284 Tomcat - 0285 AAC-RAID - 0e11 0295 SATA 6Ch (Bearcat) - 1014 02f2 ServeRAID 8i - 1028 0287 PowerEdge Expandable RAID Controller 320/DC - 1028 0291 CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) - 103c 3227 AAR-2610SA - 108e 0286 STK RAID INT - 108e 0287 STK RAID EXT - 108e 7aac STK RAID REM - 108e 7aae STK RAID EX - 15d9 02b5 SMC AOC-USAS-S4i - 15d9 02b6 SMC AOC-USAS-S8i - 15d9 02c9 SMC AOC-USAS-S4iR - 15d9 02ca SMC AOC-USAS-S8iR - 15d9 02d2 SMC AOC-USAS-S8i-LP - 15d9 02d3 SMC AOC-USAS-S8iR-LP - 17aa 0286 Legend S220 (Legend Crusader) - 17aa 0287 Legend S230 (Legend Vulcan) - 9005 0285 2200S (Vulcan) - 9005 0286 2120S (Crusader) - 9005 0287 2200S (Vulcan-2m) - 9005 0288 3230S (Harrier) - 9005 0289 3240S (Tornado) -# Some early versions reported 2020S - 9005 028a ASR-2020ZCR -# Some early versions reported 2025S - 9005 028b ASR-2025ZCR (Terminator) - 9005 028e ASR-2020SA (Skyhawk) - 9005 028f ASR-2025SA - 9005 0290 AAR-2410SA PCI SATA 4ch (Jaguar II) - 9005 0292 AAR-2810SA PCI SATA 8ch (Corsair-8) - 9005 0293 AAR-21610SA PCI SATA 16ch (Corsair-16) - 9005 0294 ESD SO-DIMM PCI-X SATA ZCR (Prowler) - 9005 0296 ASR-2240S - 9005 0297 ASR-4005SAS - 9005 0298 ASR-4000 - 9005 0299 ASR-4800SAS - 9005 029a 4805SAS - 9005 02a4 ICP ICP9085LI - 9005 02a5 ICP ICP5085BR - 9005 02b5 ASR5800 - 9005 02b6 ASR5805 - 9005 02b7 ASR5808 - 9005 02b8 ICP5445SL - 9005 02b9 ICP5085SL - 9005 02ba ICP5805SL - 9005 02bb 3405 - 9005 02bc 3805 - 9005 02bd 31205 - 9005 02be 31605 - 9005 02bf ICP ICP5045BL - 9005 02c0 ICP ICP5085BL - 9005 02c1 ICP ICP5125BR - 9005 02c2 ICP ICP5165BR - 9005 02c3 51205 - 9005 02c4 51605 - 9005 02c5 ICP ICP5125SL - 9005 02c6 ICP ICP5165SL - 9005 02c7 3085 - 9005 02c8 ICP5805BL - 9005 02ce 51245 - 9005 02cf 51645 - 9005 02d0 52445 - 9005 02d1 5405 - 9005 02d4 ASR-2045 - 9005 02d5 ASR-2405 - 9005 02d6 ASR-2445 - 9005 02d7 ASR-2805 - 9005 02d8 5405G - 9005 02d9 5445G - 9005 02da 5805G - 9005 02db 5085G - 9005 02dc 51245G - 9005 02dd 51645G - 9005 02de 52445G - 9005 02df ASR-2045G - 9005 02e0 ASR-2405G - 9005 02e1 ASR-2445G - 9005 02e2 ASR-2805G - 0286 AAC-RAID (Rocket) - 1014 034d 8s - 1014 9540 ServeRAID 8k/8k-l4 - 1014 9580 ServeRAID 8k/8k-l8 - 9005 028c ASR-2230S + ASR-2230SLP PCI-X (Lancer) - 9005 028d ASR-2130S - 9005 029b ASR-2820SA - 9005 029c ASR-2620SA - 9005 029d ASR-2420SA - 9005 029e ICP ICP9024R0 - 9005 029f ICP ICP9014R0 - 9005 02a0 ICP ICP9047MA - 9005 02a1 ICP ICP9087MA - 9005 02a2 3800 - 9005 02a3 ICP ICP5445AU - 9005 02a4 ICP ICP9085LI - 9005 02a5 ICP ICP5085BR - 9005 02a6 ICP9067MA - 9005 02a7 3805 - 9005 02a8 3400 - 9005 02a9 ICP ICP5085AU - 9005 02aa ICP ICP5045AU - 9005 02ac 1800 - 9005 02b3 2400 - 9005 02b4 ICP ICP5045AL - 9005 0800 Callisto - 0410 AIC-9410W SAS (Razor HBA RAID) - 9005 0410 ASC-48300(Spirit RAID) - 9005 0411 ASC-58300 (Oakmont RAID) - 0412 AIC-9410W SAS (Razor HBA non-RAID) - 9005 0412 ASC-48300 (Spirit non-RAID) - 9005 0413 ASC-58300 (Oakmont non-RAID) - 0415 ASC-58300 SAS (Razor-External HBA RAID) - 0416 ASC-58300 SAS (Razor-External HBA non-RAID) - 041e AIC-9410W SAS (Razor ASIC non-RAID) - 041f AIC-9410W SAS (Razor ASIC RAID) - 9005 041f AIC-9410W SAS (Razor ASIC RAID) - 042f VSC7250/7251 SAS (Aurora ASIC non-RAID) - 0430 AIC-9405W SAS (Razor-Lite HBA RAID) - 9005 0430 ASC-44300 (Spirit-Lite RAID) - 0432 AIC-9405W SAS (Razor-Lite HBA non-RAID) - 9005 0432 ASC-44300 (Spirit-Lite non-RAID) - 043e AIC-9405W SAS (Razor-Lite ASIC non-RAID) - 043f AIC-9405W SAS (Razor-Lite ASIC RAID) - 0450 ASC-1405 Unified Serial HBA - 0500 Obsidian chipset SCSI controller - 1014 02c1 PCI-X DDR 3Gb SAS Adapter (572A/572C) - 1014 02c2 PCI-X DDR 3Gb SAS RAID Adapter (572B/572D) - 0503 Scamp chipset SCSI controller - 1014 02bf Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571E) - 1014 02c3 PCI-X DDR 3Gb SAS RAID Adapter (572F) - 1014 02d5 Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571F) - 0910 AUA-3100B - 091e AUA-3100B - 8000 ASC-29320A U320 - 800f AIC-7901 U320 - 8010 ASC-39320 U320 - 8011 ASC-39320D - 0e11 00ac ASC-39320D U320 - 9005 0041 ASC-39320D U320 - 8012 ASC-29320 U320 - 8013 ASC-29320B U320 - 8014 ASC-29320LP U320 - 8015 ASC-39320B U320 - 8016 ASC-39320A U320 - 8017 ASC-29320ALP U320 - 9005 0044 ASC-29320ALP PCIx U320 - 9005 0045 ASC-29320LPE PCIe U320 - 801c ASC-39320D U320 - 801d AIC-7902B U320 - 1014 02cc ServeRAID 7e - 801e AIC-7901A U320 - 801f AIC-7902 U320 - 1734 1011 PRIMERGY RX300 onboard SCSI - 8080 ASC-29320A U320 w/HostRAID - 808f AIC-7901 U320 w/HostRAID - 8090 ASC-39320 U320 w/HostRAID - 8091 ASC-39320D U320 w/HostRAID - 8092 ASC-29320 U320 w/HostRAID - 8093 ASC-29320B U320 w/HostRAID - 8094 ASC-29320LP U320 w/HostRAID - 8095 ASC-39320(B) U320 w/HostRAID - 8096 ASC-39320A U320 w/HostRAID - 8097 ASC-29320ALP U320 w/HostRAID - 809c ASC-39320D(B) U320 w/HostRAID - 809d AIC-7902(B) U320 w/HostRAID - 1014 02cc ServeRAID 7e - 809e AIC-7901A U320 w/HostRAID - 809f AIC-7902 U320 w/HostRAID -907f Atronics - 2015 IDE-2015PL -919a Gigapixel Corp -9412 Holtek - 6565 6565 -9699 Omni Media Technology Inc - 6565 6565 -9710 NetMos Technology - 9250 PCI-to-PCI bridge [MCS9250] - 9805 PCI 1 port parallel adapter - 9815 PCI 9815 Multi-I/O Controller - 1000 0020 2P0S (2 port parallel adaptor) - 9820 PCI 9820 Multi-I/O Controller - 9835 PCI 9835 Multi-I/O Controller - 1000 0002 2S (16C550 UART) - 1000 0012 1P2S - 9845 PCI 9845 Multi-I/O Controller -# Serial ports at BAR0-3 - 1000 0004 0P4S (4 port 16550A serial card) - 1000 0006 0P6S (6 port 16550a serial card) -# Serial ports at BAR0-3, Parallel port at BAR4 - 1000 0014 1P4S (1 Parallel / 4 16550A Serial Port Adapter) - 9855 PCI 9855 Multi-I/O Controller -# Parallel port at BAR0. Serial ports at BAR2-5 - 1000 0014 1P4S -# Parallel ports at BAR0,BAR2. Serial ports at BAR4-5 - 1000 0022 2P2S (2 Parallel / 2 16550A Serial Port Adapter) - 9865 PCI 9865 Multi-I/O Controller - 9901 PCIe 9901 Multi-I/O Controller -9902 Stargen Inc. - 0001 SG2010 PCI over Starfabric Bridge - 0002 SG2010 PCI to Starfabric Gateway - 0003 SG1010 Starfabric Switch and PCI Bridge -a0a0 AOPEN Inc. -a0f1 UNISYS Corporation -a200 NEC Corporation -a259 Hewlett Packard -a25b Hewlett Packard GmbH PL24-MKT -a304 Sony -a727 3Com Corporation - 0013 3CRPAG175 Wireless PC Card - 6803 3CRDAG675B Wireless 11a/b/g Adapter -aa42 Scitex Digital Video -aa55 Ncomputing X300 PCI-Engine -aaaa Adnaco Technology Inc. - 0001 H1 PCIe over fiber optic host controller - 0002 R1BP1 PCIe over fiber optic expansion chassis -abcd Vadatech Inc. -ac1e Digital Receiver Technology Inc -ac3d Actuality Systems -ad00 Alta Data Technologies LLC -aecb Adrienne Electronics Corporation - 6250 VITC/LTC Timecode Reader card [PCI-VLTC/RDR] -affe Sirrix AG security technologies - 02e1 PCI2E1 2-port ISDN E1 interface - dead Sirrix.PCI4S0 4-port ISDN S0 interface -# Not registered officially -b10b Uakron PCI Project -b1b3 Shiva Europe Limited -# Pinnacle should be 11bd, but they got it wrong several times --mj -bd11 Pinnacle Systems, Inc. (Wrong ID) -bdbd Blackmagic Design -c001 TSI Telsys -c0a9 Micron/Crucial Technology -c0de Motorola -c0fe Motion Engineering, Inc. -ca50 Varian Australia Pty Ltd -cace CACE Technologies, Inc. - 0001 TurboCap Port A - 0002 TurboCap Port B - 0023 AirPcap N -cafe Chrysalis-ITS - 0003 Luna K3 Hardware Security Module -cccc Catapult Communications -ccec Curtiss-Wright Controls Embedded Computing -cddd Tyzx, Inc. - 0101 DeepSea 1 High Speed Stereo Vision Frame Grabber - 0200 DeepSea 2 High Speed Stereo Vision Frame Grabber -ceba KEBA AG -d161 Digium, Inc. - 0120 Wildcard TE120P single-span T1/E1/J1 card - 0205 Wildcard TE205P/TE207P dual-span T1/E1/J1 card 5.0V - 0210 Wildcard TE210P/TE212P dual-span T1/E1/J1 card 3.3V - 0220 Wildcard TE220 dual-span T1/E1/J1 card 3.3V (PCI-Express) - 0405 Wildcard TE405P/TE407P quad-span T1/E1/J1 card 5.0V - 0410 Wildcard TE410P/TE412P quad-span T1/E1/J1 card 3.3V - 0420 Wildcard TE420P quad-span T1/E1/J1 card 3.3V (PCI-Express) - 0800 Wildcard TDM800P 8-port analog card - 2400 Wildcard TDM2400P 24-port analog card - 3400 Wildcard TC400P transcoder base card - 8000 Wildcard TE121 single-span T1/E1/J1 card (PCI-Express) - 8001 Wildcard TE122 single-span T1/E1/J1 card - 8002 Wildcard AEX800 8-port analog card (PCI-Express) - 8003 Wildcard AEX2400 24-port analog card (PCI-Express) - 8005 Wildcard TDM410 4-port analog card - 8006 Wildcard AEX410 4-port analog card (PCI-Express) - b410 Wildcard B410 quad-BRI card -d4d4 Dy4 Systems Inc - 0601 PCI Mezzanine Card -d531 I+ME ACTIA GmbH -d84d Exsys -db10 Diablo Technologies -dead Indigita Corporation -deaf Middle Digital Inc. - 9050 PC Weasel Virtual VGA - 9051 PC Weasel Serial Port - 9052 PC Weasel Watchdog Timer -deda SoftHard Technology Ltd. -e000 Winbond - e000 W89C940 -e159 Tiger Jet Network Inc. - 0001 Tiger3XX Modem/ISDN interface - 0059 0001 128k ISDN-S/T Adapter - 0059 0003 128k ISDN-U Adapter - 00a7 0001 TELES.S0/PCI 2.x ISDN Adapter - 8086 0003 Digium X100P/X101P analogue PSTN FXO interface - 0002 Tiger100APC ISDN chipset -e4bf EKF Elektronik GmbH -e55e Essence Technology, Inc. -ea01 Eagle Technology - 000a PCI-773 Temperature Card - 0032 PCI-730 & PC104P-30 Card - 003e PCI-762 Opto-Isolator Card - 0041 PCI-763 Reed Relay Card - 0043 PCI-769 Opto-Isolator Reed Relay Combo Card - 0046 PCI-766 Analog Output Card - 0052 PCI-703 Analog I/O Card - 0800 PCI-800 Digital I/O Card -# The main chip of all these devices is by Xilinx -> It could also be a Xilinx ID. -ea60 RME - 9896 Digi32 - 9897 Digi32 Pro - 9898 Digi32/8 -eabb Aashima Technology B.V. -eace Endace Measurement Systems, Ltd - 3100 DAG 3.10 OC-3/OC-12 - 3200 DAG 3.2x OC-3/OC-12 - 320e DAG 3.2E Fast Ethernet - 340e DAG 3.4E Fast Ethernet - 341e DAG 3.41E Fast Ethernet - 3500 DAG 3.5 OC-3/OC-12 - 351c DAG 3.5ECM Fast Ethernet - 360d DAG 3.6D DS3 - 360e DAG 3.6E Fast Ethernet - 368e DAG 3.6E Gig Ethernet - 3707 DAG 3.7T T1/E1/J1 - 370d DAG 3.7D DS3/E3 - 378e DAG 3.7G Gig Ethernet - 3800 DAG 3.8S OC-3/OC-12 - 4100 DAG 4.10 OC-48 - 4110 DAG 4.11 OC-48 - 4220 DAG 4.2 OC-48 - 422e DAG 4.2GE Gig Ethernet - 4230 DAG 4.2S OC-48 - 423e DAG 4.2GE Gig Ethernet - 4300 DAG 4.3S OC-48 - 430e DAG 4.3GE Gig Ethernet - 452e DAG 4.5G2 Gig Ethernet - 454e DAG 4.5G4 Gig Ethernet - 45b8 DAG 4.5Z8 Gig Ethernet - 45be DAG 4.5Z2 Gig Ethernet - 520e DAG 5.2X 10G Ethernet - 521a DAG 5.2SXA 10G Ethernet/OC-192 - 5400 DAG 5.4S-12 OC-3/OC-12 - 5401 DAG 5.4SG-48 Gig Ethernet/OC-3/OC-12/OC-48 - 540a DAG 5.4GA Gig Ethernet - 541a DAG 5.4SA-12 OC-3/OC-12 - 542a DAG 5.4SGA-48 Gig Ethernet/OC-3/OC-12/OC-48 - 6000 DAG 6.0SE 10G Ethernet/OC-192 - 6100 DAG 6.1SE 10G Ethernet/OC-192 - 6200 DAG 6.2SE 10G Ethernet/OC-192 - 7100 DAG 7.1S OC-3/OC-12 - 8100 DAG 8.1X 10G Ethernet - 8101 DAG 8.1SX 10G Ethernet/OC-192 - 8102 DAG 8.1X 10G Ethernet - 820e DAG 8.2X 10G Ethernet - 820f DAG 8.2X 10G Ethernet (2nd bus) - 8400 DAG 8.4I Infiniband x4 SDR -ec80 Belkin Corporation - ec00 F5D6000 -ecc0 Echo Digital Audio Corporation -edd8 ARK Logic Inc - a091 1000PV [Stingray] - a099 2000PV [Stingray] - a0a1 2000MT - a0a9 2000MI -# Found on M2N68-AM Motherboard -f043 ASUSTeK Computer Inc. (Wrong ID) -f05b Foxconn International, Inc. (Wrong ID) -f1d0 AJA Video - c0fe Xena HS/HD-R - c0ff Kona/Xena 2 - cafe Kona SD - cfee Xena LS/SD-22-DA/SD-DA - dcaf Kona HD - dfee Xena HD-DA - efac Xena SD-MM/SD-22-MM - facd Xena HD-MM -f5f5 F5 Networks, Inc. -# Subsystem ID for PATA controller on nForce motherboard -f849 ASRock Incorporation (Wrong ID) -fa57 Interagon AS - 0001 PMC [Pattern Matching Chip] -fab7 Fabric7 Systems, Inc. -febd Ultraview Corp. -# Nee Epigram -feda Broadcom Inc - a0fa BCM4210 iLine10 HomePNA 2.0 - a10e BCM4230 iLine10 HomePNA 2.0 -fede Fedetec Inc. - 0003 TABIC PCI v3 -fffd XenSource, Inc. - 0101 PCI Event Channel Controller -# Used in some old VMWare products before they got a real ID assigned -fffe VMWare Inc (temporary ID) - 0710 Virtual SVGA -ffff Illegal Vendor ID - - -# List of known device classes, subclasses and programming interfaces - -# Syntax: -# C class class_name -# subclass subclass_name <-- single tab -# prog-if prog-if_name <-- two tabs - -C 00 Unclassified device - 00 Non-VGA unclassified device - 01 VGA compatible unclassified device -C 01 Mass storage controller - 00 SCSI storage controller - 01 IDE interface - 02 Floppy disk controller - 03 IPI bus controller - 04 RAID bus controller - 05 ATA controller - 20 ADMA single stepping - 30 ADMA continuous operation - 06 SATA controller - 00 Vendor specific - 01 AHCI 1.0 - 07 Serial Attached SCSI controller - 80 Mass storage controller -C 02 Network controller - 00 Ethernet controller - 01 Token ring network controller - 02 FDDI network controller - 03 ATM network controller - 04 ISDN controller - 05 WorldFip controller - 06 PICMG controller - 80 Network controller -C 03 Display controller - 00 VGA compatible controller - 00 VGA controller - 01 8514 controller - 01 XGA compatible controller - 02 3D controller - 80 Display controller -C 04 Multimedia controller - 00 Multimedia video controller - 01 Multimedia audio controller - 02 Computer telephony device - 03 Audio device - 80 Multimedia controller -C 05 Memory controller - 00 RAM memory - 01 FLASH memory - 80 Memory controller -C 06 Bridge - 00 Host bridge - 01 ISA bridge - 02 EISA bridge - 03 MicroChannel bridge - 04 PCI bridge - 00 Normal decode - 01 Subtractive decode - 05 PCMCIA bridge - 06 NuBus bridge - 07 CardBus bridge - 08 RACEway bridge - 00 Transparent mode - 01 Endpoint mode - 09 Semi-transparent PCI-to-PCI bridge - 40 Primary bus towards host CPU - 80 Secondary bus towards host CPU - 0a InfiniBand to PCI host bridge - 80 Bridge -C 07 Communication controller - 00 Serial controller - 00 8250 - 01 16450 - 02 16550 - 03 16650 - 04 16750 - 05 16850 - 06 16950 - 01 Parallel controller - 00 SPP - 01 BiDir - 02 ECP - 03 IEEE1284 - fe IEEE1284 Target - 02 Multiport serial controller - 03 Modem - 00 Generic - 01 Hayes/16450 - 02 Hayes/16550 - 03 Hayes/16650 - 04 Hayes/16750 - 04 GPIB controller - 05 Smard Card controller - 80 Communication controller -C 08 Generic system peripheral - 00 PIC - 00 8259 - 01 ISA PIC - 02 EISA PIC - 10 IO-APIC - 20 IO(X)-APIC - 01 DMA controller - 00 8237 - 01 ISA DMA - 02 EISA DMA - 02 Timer - 00 8254 - 01 ISA Timer - 02 EISA Timers - 03 RTC - 00 Generic - 01 ISA RTC - 04 PCI Hot-plug controller - 05 SD Host controller - 80 System peripheral -C 09 Input device controller - 00 Keyboard controller - 01 Digitizer Pen - 02 Mouse controller - 03 Scanner controller - 04 Gameport controller - 00 Generic - 10 Extended - 80 Input device controller -C 0a Docking station - 00 Generic Docking Station - 80 Docking Station -C 0b Processor - 00 386 - 01 486 - 02 Pentium - 10 Alpha - 20 Power PC - 30 MIPS - 40 Co-processor -C 0c Serial bus controller - 00 FireWire (IEEE 1394) - 00 Generic - 10 OHCI - 01 ACCESS Bus - 02 SSA - 03 USB Controller - 00 UHCI - 10 OHCI - 20 EHCI - 80 Unspecified - fe USB Device - 04 Fibre Channel - 05 SMBus - 06 InfiniBand - 07 IPMI SMIC interface - 08 SERCOS interface - 09 CANBUS -C 0d Wireless controller - 00 IRDA controller - 01 Consumer IR controller - 10 RF controller - 11 Bluetooth - 12 Broadband - 20 802.1a controller - 21 802.1b controller - 80 Wireless controller -C 0e Intelligent controller - 00 I2O -C 0f Satellite communications controller - 01 Satellite TV controller - 02 Satellite audio communication controller - 03 Satellite voice communication controller - 04 Satellite data communication controller -C 10 Encryption controller - 00 Network and computing encryption device - 10 Entertainment encryption device - 80 Encryption controller -C 11 Signal processing controller - 00 DPIO module - 01 Performance counters - 10 Communication synchronizer - 20 Signal processing management - 80 Signal processing controller diff --git a/client/nfsexport/scripts/README.es.txt b/client/nfsexport/scripts/README.es.txt deleted file mode 100644 index 7bfb31ba..00000000 --- a/client/nfsexport/scripts/README.es.txt +++ /dev/null @@ -1,38 +0,0 @@ -OpenGnSys Client (Scripts) README -==================================== - - -Este directorio contiene algunos scripts de ejemplo que se utilizan -por el cliente de la consola web de administración, para realizar -las operaciones más comunes de gestión de clientes. - -Dichos scripts están desarrollados en BASH y utilizan las funciones -básicas del motor de clonación. - -OpenGnSys Client Cloning Engine incluye un completo conjunto de -funiones para que el administrador pueda personalizar sus scripts -de gestión. Sin embargo, estos ejemplos son completamente -operativos y pueden ser utilizados directamente. - - -Scripts distribuidos: - -- bootLinux arranca un sistema Linux con partición de inicio. -- bootOs arranca un sistema operativo instalado. -- bootWindows arranca un sistema Windows con partición de inicio. -- createImage genera una imagen de un sistema operativo. -- createLogicalPartitions define las particiones primarias del disco. -- createPrimaryPartitions define las particiones lógicas del disco. -- formatFs formatea un sistema de archivos. -- getFsType muestra el tipo (mnemónico) de una partición. -- getIpAddress muestra la IP local del cliente. -- getOsVersion muestra la versión de sistema operativo instalado. -- initCache inicia o define la caché local. -- listHardwareInfo lista los dispoisitivos del cliente. -- listPrimaryPartitions lista las particiones primarias de un disco. -- listSoftwareInfo lista el software de un sistema operativo. -- menuBrowser arranque el Browser con un menú preconfigurado. -- poweroff desmonta los sistemas de archivos y apaga el equipo. -- reboot desmonta los sistemas de archivos y reinicia el equipo. -- restoreImage restaura una imagen de sistema operativo. - diff --git a/client/nfsexport/scripts/bootLinux b/client/nfsexport/scripts/bootLinux deleted file mode 100755 index e20b9489..00000000 --- a/client/nfsexport/scripts/bootLinux +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -# Scirpt de ejemplo para iniciar Linux desde partición de arranque. -# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). - -PROG="$(basename $0)" -if [ $# -ne 2 ]; then - ogRaiseError $OG_ERR_FORMAT "Formato: $PROG ndisco nparticion" - exit $? -fi - -echo "[0] Inicio del proceso de arranque." -PART=$(ogDiskToDev "$1" "$2") || exit $? - -echo "[10] Desmontar todos los sistemas de archivos." -sync -for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do - ogUnmountAll $i 2>/dev/null -done -ETC=$(ogGetPath $1 $2 /etc) -if [ -n "$ETC" ]; then - echo "[30] Asignar nombre Linux \"$NAME\"." - NAME=$(ogGetHostname) - NAME=${NAME:-"pc"} - echo "$NAME" >$ETC/hostname 2>/dev/null - echo "[50] Actaualizar fstab con particion raiz \"$PART\"." - awk -v P="$PART " '{ if ($2=="/") {sub(/^.*$/, P, $1)} - print } ' $ETC/fstab >/tmp/fstab - mv /tmp/fstab $ETC/fstab -fi -echo "[70] Desmontar cache local." -ogUnmountCache - -echo "[90] Arrancar sistema operativo." -ogBoot $1 $2 - diff --git a/client/nfsexport/scripts/bootOs b/client/nfsexport/scripts/bootOs deleted file mode 100755 index 71a9fe73..00000000 --- a/client/nfsexport/scripts/bootOs +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -# Scirpt de ejemplo para arancar un sistema operativo instalado. -# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). - -PROG="$(basename $0)" -if [ $# -ne 2 ]; then - ogRaiseError $OG_ERR_FORMAT "Formato: $PROG ndisco nparticion" - exit $? -fi - -echo "[0] Inicio del proceso de arranque." -PART=$(ogDiskToDev "$1" "$2") || exit $? -NAME=$(ogGetHostname) -NAME=${NAME:-"pc"} -OSTYPE=$(ogGetOsType $1 $2) - -echo "[10] Desmontar todos los sistemas de archivos." -sync -for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do - ogUnmountAll $i 2>/dev/null -done -case "$OSTYPE" in - Windows) - echo "[30] Activar particion de Windows $PART." - ogSetPartitionActive $1 $2 - echo "[50] Asignar nombre Windows \"$NAME\" y usuario por defecto." - ogSetWindowsName $1 $2 "$NAME" - ;; - Linux) - echo "[30] Asignar nombre Linux \"$NAME\"." - ETC=$(ogGetPath $1 $2 /etc) - [ -d "$ETC" ] && echo "$NAME" >$ETC/hostname 2>/dev/null - if [ -f "$ETC/fstab" ]; then - echo "[50] Actaualizar fstab con particion raiz \"$PART\"." - awk -v P="$PART " '{ if ($2=="/") {sub(/^.*$/, P, $1)} - print } ' $ETC/fstab >/tmp/fstab - mv /tmp/fstab $ETC/fstab - fi - ;; -esac -echo "[70] Desmontar cache local." -ogUnmountCache -echo "[90] Arrancar sistema operativo." -ogBoot $1 $2 - diff --git a/client/nfsexport/scripts/bootWindows b/client/nfsexport/scripts/bootWindows deleted file mode 100755 index e92e484a..00000000 --- a/client/nfsexport/scripts/bootWindows +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# Scirpt de ejemplo para iniciar Windows con partición de arranque. -# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). - -PROG="$(basename $0)" -if [ $# -ne 2 ]; then - ogRaiseError $OG_ERR_FORMAT "Formato: $PROG ndisco nparticion" - exit $? -fi - -echo "[0] Inicio del proceso de arranque." -PART=$(ogDiskToDev "$1" "$2") || exit $? - -echo "[10] Desmontar todos los sistemas de archivos." -sync -for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do - ogUnmountAll $i 2>/dev/null -done -echo "[30] Activar particion de Windows $PART." -ogSetPartitionActive $1 $2 -echo "[50] Asignar nombre Windows \"$NAME\"." -NAME=$(ogGetHostname) -NAME=${NAME:-"pc"} -ogSetWindowsName $1 $2 "$NAME" -echo "[70] Desmontar cache local." -ogUnmountCache - -echo "[90] Arrancar sistema operativo." -ogBoot $1 $2 - diff --git a/client/nfsexport/scripts/cloneRemoteFromMaster b/client/nfsexport/scripts/cloneRemoteFromMaster deleted file mode 100755 index a755871f..00000000 --- a/client/nfsexport/scripts/cloneRemoteFromMaster +++ /dev/null @@ -1,215 +0,0 @@ -#!/bin/bash -# Script para la clonacion de particiones remotas. -# (puede usarse como base para el programa de restauración de imágenes usado por OpenGnSys Admin). -# Versión: 0.9.1, 2009/03/17, - Antonio J. Doblas Viso. Universidad de Malaga. -# Versión: 0.9.2, 2010/07/27, - Antonio J. Doblas Viso. Universidad de Malaga. -# Version: 0.1.0 2011/01/26, - Antonio J. Doblas Viso. Universidad de Malaga. - -TIME1=$SECONDS -PROG="$(basename $0)" -#if [ $# -ne 5 ]; then - # ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG tamaño" -# exit $? -#fi - - -#/** @function cloneremoteFromMaster: @brief Restaura una particion o imagen sobre las particiones de equipos cliente remotos -#@param $1 str_origen admite dirección IP del equipo Master. -#@param $2 str_origen admite int_disk str_REPO|str_CACHE -#@param $3 str_origen admite int partorigen stre_imagen -#@param $4 str_sesion multicast -#@param $5 int_disco_destino -#@param $6 init_particion_destino -#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 1 1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop -#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 REPO /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop -#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 CACHE /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop -#@return la propia de la herramienta de clonacion partimage o ntfsclone -# - - - -FOUNDSOURCE=false -HOSTIP=`ogGetIpAddress` - -SESSIONMCASTSERVER=$4 -SESSIONMCASTCLIENT=`echo $4 | awk -F: '{print $1}'` -DISKTARGET=$5 -PARTTARGET=$6 -TOOLCLONE=$7 -COMPRESOR=$8 - -TIME1=$SECONDS -PROG="$(basename $0)" -if [ $# -lt 1 ]; then - echo "cloneRemoteFromMaster ipmaster disk init session disk part tool comp" - exit 1 -fi - -if [ $# -lt 5 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ TORRENT|UNICAST | MULTICAST:npuerto ]" - exit $? -fi - -#Chequeamos variables-constantes - -# check HOSTIP -if [ -z "$HOSTIP" ] -then - source /tmp/net-eth0.conf - HOSTIP=`ogGetIpAddress` -fi -MODEMASTER=false - - -#Chequeamos parametros. - -# is $1 a valid IP -MASTERIP=$1 - -# contendor origen (disco particion o file) - - -# IP destino: session multicast. -SESSIONMCASTSERVER=$4 -SESSIONMCASTCLIENT=`echo $4 | awk -F: '{print $1}'` - -# contenedor destino (disco particion) -DISKTARGET=$5 -PARTTARGET=$6 - -#herramienta de compresión. -TOOLCLONE=$7 -COMPRESOR=$8 - - -###IMG=$(ogGetPath $2 $3.img) -###echo $IMG - -# Check command in Master (sendFile or sendPartition) -####if [ -n $IMG ] - - -case $MASTERIP in - $HOSTIP) - ogGetPath $2 $3.img - RC=`echo $?` - echo "$RC comenzando control del valor del origen $2 $3" - if [ $RC == "0" ] - then - echo "mode senfile" - IMG=$(ogGetPath $2 $3.img) - MODEMASTER=SENDFILE - else - if [ $(ogDiskToDev $2 $3) ] - then - echo "mode sendpartitons" - DISKSOURCE=$2 - PARTSOURCE=$3 - MODEMASTER=SENDPARTITION - fi - fi - - echo "modo " $MODEMASTER - - if [ "$MODEMASTER" == "false" ] - then - echo "cloneRemote: origen no encontrado" - exit 1 - else - echo "cloneRemote: sistema preparando para un $MODEMASTER" - fi - - case "$MODEMASTER" in - SENDPARTITION) - echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER" - echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE" - ogUnmount $2 $3 || exit - #Obtener tamaño de la partición. - SIZE=$(ogGetPartitionSize $2 $3) - # Reducir el sistema de archvios. - echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" - ogReduceFs $2 $3 || exit 1 - - #echo "salida de ogReduceFS" $? - #if [ $? == 1 ] - #then - # echo "no se ha podido reducir FS" -# exit 1 -# - REDSIZE=$(ogGetFsSize $2 $3) - echo "[20]: Reducido el sistema de archivos a $REDSIZE $DISKSOURCE $PARTSOURCE" - if [ $REDSIZE -lt $SIZE ]; then - echo "[24] Redimensionar partición a $REDSIZE KB." - ogSetPartitionSize $2 $3 $REDSIZE - fi - echo "[25] ofreciendo informacion a los clientes-slaves" - faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & - echo "[30] Enviando multicast " - echo ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR - ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR - if [ $REDSIZE -lt $SIZE ]; then - echo "[85] Redimensionar partición a $SIZE KB." - ogSetPartitionSize $2 $3 $SIZE - echo "[90] Extender sistema de archivos." - ogExtendFs $2 $3 - fi - pkill faucet - ;; - SENDFILE) - echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER" - echo "[10]: Preparando Imagen: $IMG" - TOOLCLONE=$(ogGetImageProgram $2 $3) - COMPRESOR=$(ogGetImageCompressor $2 $3) - REDSIZE=$(ogGetImageSize $2 $3) - echo "[25] ofreciendo informacion a los clientes-slaves: $TOOLCLONE $COMPRESOR $REDSIZE" - faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & - echo "[30] Enviando multicast: ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " - ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER - pkill faucet - ;; - esac - pkill faucet - ;; - *) - echo "[5]: cloneRemoteFromMaster: sistema preparando como CLIENTE modo $MODEMASTER" - ogUnmount $DISKTARGET $PARTTARGET - echo "[24] Cliente intentando conectar con el master $MASTERIP" - echo -n "[25] Buscando informacion extra sobre la clonacion: " - # While para esperar al servidor - while [ -z "$INFOEXTRA" ] - do - INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null` - sleep 10 - echo -n "." - done - TOOLCLONE=$(echo $INFOEXTRA | awk '{print $1}') - COMPRESOR=$(echo $INFOEXTRA | awk '{print $2}') - SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $3}') - echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " - # comprobamos que el tamaño de a imagen es menor que la del cliente. - SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET) - if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ] - then - echo -n "[30] Iniciando CLIENTE MULTICAST: " - echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR - ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" - echo "[90] Extender sistema de archivos" - ogExtendFs $DISKTARGET $PARTTARGET - # Cambiar nombre en sistemas Windows. - if [ "$(ogGetOsType $DISKTARGET $PARTTARGET)" = "Windows" ]; then - HOST=$(ogGetHostname) - HOST=${HOST:-"UNKNOWN"} - echo "[90] Cambiar nombre Windows a \"$HOST\"." - ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST" - fi - else - echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " - echo -n "[26] ERROR tamanio particion= $SIZEPARTTARGET tamanio de la imagen= $SIZEIMAGE" - exit 1 - fi - ;; -esac -TIME=$[SECONDS-TIME1] -echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s" - - diff --git a/client/nfsexport/scripts/createImage b/client/nfsexport/scripts/createImage deleted file mode 100755 index 0fea453a..00000000 --- a/client/nfsexport/scripts/createImage +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash -# create-image.sh - Scirpt de ejemplo para crear una imagen de un sistema de archivos. -# (puede usarse como base para el programa de creación de imágenes usado por OpenGNSys Admin). - -TIME1=$SECONDS -PROG="$(basename $0)" -if [ $# -ne 4 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE imagen" - exit $? -fi - -# Si el repositorio es CACHE comprobamos que exista -if [ "$3" == "CACHE" -o "$3" == "cache" ]; then - if ! $(ogFindCache >/dev/null); then - ogRaiseError $OG_ERR_NOTFOUND "CACHE" - exit $? - fi -fi - -# Obtener información de los parámetros de entrada. -PART=$(ogDiskToDev "$1" "$2") || exit $? -IMGDIR=$(ogGetParentPath "$3" "/$4") -# Si no existe, crear subdirectorio de la imagen. -if [ $? != 0 ]; then - echo "[5] Crear subdirectorio de la imagen \"$3 $(dirname "$4")." - ogMakeDir "$3" $(dirname "/$4") - IMGDIR=$(ogGetParentPath "$3" "/$4") || exit $? -fi -IMGFILE=$IMGDIR/$(basename "/$4").img -# Renombrar el fichero de imagen si ya existe. -if [ -f "$IMGFILE" ]; then - echo "[10] Renombrar \"$IMGFILE\" por \"$IMGFILE.ant\"." - mv "$IMGFILE" "$IMGFILE.ant" - mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null -fi -# Mostrar información. -echo "[15] $PROG: Origen=$PART, Destino=$IMGFILE" - -# Comprobar consistencia del sistema de archivos. -echo "[20] Comprobar sistema de archivos." -ogCheckFs $1 $2 - -echo "[21] Desmontando particion." -ogUnmount $1 $2 - -echo "[25]: Calculando la reduccion del sistema de archivos DISK:$1 PARTITION:$2" -ogReduceFs $1 $2 || exit 1 - -# Crear la imagen. -echo "[30] Crear imagen. partclone lzop 30% mas rapido que con gzip" -ogCreateImage $1 "$2" $3 $4 partclone lzop || exit $? -#ogCreateImage $1 "$2" $3 $4 || exit $? - -echo "[90] Extender sistema de archivos." -ogExtendFs $1 $2 - -TIME=$[SECONDS-TIME1] -echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" - diff --git a/client/nfsexport/scripts/createLogicalPartitions b/client/nfsexport/scripts/createLogicalPartitions deleted file mode 100755 index 7a693aac..00000000 --- a/client/nfsexport/scripts/createLogicalPartitions +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - - diff --git a/client/nfsexport/scripts/createPrimaryPartitions b/client/nfsexport/scripts/createPrimaryPartitions deleted file mode 100755 index f69f354d..00000000 --- a/client/nfsexport/scripts/createPrimaryPartitions +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -ogCreatePartitions "$@" -exit 0 diff --git a/client/nfsexport/scripts/deployImage b/client/nfsexport/scripts/deployImage deleted file mode 100755 index 15392ec7..00000000 --- a/client/nfsexport/scripts/deployImage +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -TIME1=$SECONDS -PROG="$(basename $0)" -if [ $# -lt 4 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" - exit $? -fi - -#controlar param1 REPO - -updateCache REPO $2.img $5 $6 -if [ $? != "0" ] -then - echo "fin del updateCache REPO $2.img $5 $6 con errores" - exit 1 -else - echo "comenzamos con restoreImage CACHE $2 $3 $4" - restoreImage CACHE $2 $3 $4 -fi \ No newline at end of file diff --git a/client/nfsexport/scripts/formatFs b/client/nfsexport/scripts/formatFs deleted file mode 100755 index 832592fb..00000000 --- a/client/nfsexport/scripts/formatFs +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# Scirpt de ejemplo para formatear un sistema de archivos. -# (puede usarse como base para el programa de formateo de OpenGnSys Admin). - -TIME1=$SECONDS -PROG="$(basename $0)" -if [ $# -ne 2 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion" - exit $? -fi - -# Desmontar y formatear el sistema de archivos. -echo "[5] Desmontando sistema de archivos" -ogUnmountFs "$@" || exit $? -echo "[20] Formateando sistema de archivos" -ogFormatFs "$@" - -TIME=$[SECONDS-TIME1] -echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s" diff --git a/client/nfsexport/scripts/getFsType b/client/nfsexport/scripts/getFsType deleted file mode 100755 index b3516a4f..00000000 --- a/client/nfsexport/scripts/getFsType +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -ogGetFsType "$@" - diff --git a/client/nfsexport/scripts/getIpAddress b/client/nfsexport/scripts/getIpAddress deleted file mode 100755 index e428ebfc..00000000 --- a/client/nfsexport/scripts/getIpAddress +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -ogGetIpAddress "$@" - diff --git a/client/nfsexport/scripts/getOsVersion b/client/nfsexport/scripts/getOsVersion deleted file mode 100755 index 6e6d91d5..00000000 --- a/client/nfsexport/scripts/getOsVersion +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -ogGetOsVersion "$@" - diff --git a/client/nfsexport/scripts/initCache b/client/nfsexport/scripts/initCache deleted file mode 100755 index 69cdc535..00000000 --- a/client/nfsexport/scripts/initCache +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -# Scirpt de iniciación de la caché local de disco. -# (puede usarse como base para el programa de restauración de imágenes usado por OpenGnSys Admin). -# Versión: 0.9.1, 2009/03/17, - Ramón Gómez, Univ. Sevilla - Versión inicial. -# Versión: 0.9.2, 2010/07/27, - Ramón Gómez, Univ. Sevilla - redefinir parámetro. - -TIME1=$SECONDS -PROG="$(basename $0)" -if [ $# -ne 1 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG -1 | 0 | tamaño" - exit $? -fi - -# Si tamaño no es numérico o tamaño<-1, error. -if [ -n "${1//[-0-9]/}" ] || [ $1 -lt -1 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG -1 | 0 | tamaño" - exit $? -fi -# Si tamaño=0, no hacer nada. -if [ $1 -eq 0 ]; then - echo "No modificar la caché local." - exit -fi -# Si tamaño=-1, borrar caché. -if [ $1 -eq -1 ]; then - echo "[10] Trabajar sin caché local." - ogUnmountCache 2>/dev/null - ogDeleteCache -else - # Si tamaño>0, ... - if [ ! $1 -gt 0 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_ERR_FORMAT: !($1>0)" - exit $? - fi - # Si no existe caché o si cambia su tamaño, crearla. - SIZE=$(ogGetCacheSize 2>/dev/null) - if [ "$1" != "$SIZE" ]; then - echo "[10] Crar partición de caché local." - ogUnmountCache 2>/dev/null - ogCreateCache "$1" - fi - # Si caché no montada y no formateada, formatear. - CACHE=$(ogFindCache) || exit $? - if ! ogIsFormated $CACHE; then - echo "[50] Formatear caché local." - ogFormatCache - fi - echo "[70] Montar caché local." - ogMountCache 2>/dev/null - # Si error al montar, chequear sistema de archivos y volver a montar. - if [ $? != 0 ]; then - echo "[80] Comprobar y montar caché local." - ogCheckFs $CACHE - ogMountCache || exit $? - fi -fi -# Duración del proceso. -TIME=$[SECONDS-TIME1] -echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s" - diff --git a/client/nfsexport/scripts/listHardwareInfo b/client/nfsexport/scripts/listHardwareInfo deleted file mode 100755 index c38f35f9..00000000 --- a/client/nfsexport/scripts/listHardwareInfo +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -# Scirpt de ejemplo para almacenear en fichero temporal el listado de hardware. -# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). -# Formato: listHardwareInfo - -PROG="$(basename $0)" -if [ $# -ne 0 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG " - exit $? -fi - -# Directorio del servidor donde se exportan los ficheros de registro. -SERVERLOGDIR=$(mount | awk -v d=$OGLOG ' - BEGIN {FS="[: ]"} - {if ($4==d) dir=$2} - END {print dir}') - -# Fichero de listado: hard-IP -HARDFILE="hard-$(ogGetIpAddress)" -# Redirigir salida al fichero de listado. -ogListHardwareInfo>$OGLOG/$HARDFILE || exit $? -# Salida: camino del fichero de listado en el servidor de repositorio. -#echo $SERVERLOGDIR/$HARDFILE -echo $OGLOG/$HARDFILE diff --git a/client/nfsexport/scripts/listPrimaryPartitions b/client/nfsexport/scripts/listPrimaryPartitions deleted file mode 100755 index d20dd76f..00000000 --- a/client/nfsexport/scripts/listPrimaryPartitions +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -ogListPrimaryPartitions "$@" - diff --git a/client/nfsexport/scripts/listSoftwareInfo b/client/nfsexport/scripts/listSoftwareInfo deleted file mode 100755 index e5b0da1c..00000000 --- a/client/nfsexport/scripts/listSoftwareInfo +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# Scirpt de ejemplo para almacenear en fichero temporal el listado de software. -# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). -# Formato: listSoftwareInfo [-r] ndisk npart -# -r listado reducido (sin parches) - -PROG="$(basename $0)" -REDUCED="no" -if [ $# -ne 2 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion" - exit $? -fi - -# Directorio del servidor donde se exportan los ficheros de registro. -SERVERLOGDIR=$(mount | awk -v d=$OGLOG ' - BEGIN {FS="[: ]"} - {if ($4==d) dir=$2} - END {print dir}') -# Fichero de listado: soft-IP-ndisco-npart -SOFTFILE="soft-$(ogGetIpAddress)-$1-$2" -# Redirigir salida al fichero de listado. -if [ "$REDUCED" = "no" ]; then - ogListSoftware "$1" "$2" >$OGLOG/$SOFTFILE || exit $? -else - ogListSoftware "$1" "$2" | egrep -v "\(KB[0-9]{6}\)" >$OGLOG/$SOFTFILE || exit $? -fi -# Salid: camino del fichero de listado en el servidor de repositorio. -#echo $SERVERLOGDIR/$SOFTFILE -echo $OGLOG/$SOFTFILE - diff --git a/client/nfsexport/scripts/menuBrowser b/client/nfsexport/scripts/menuBrowser deleted file mode 100755 index 164d5314..00000000 --- a/client/nfsexport/scripts/menuBrowser +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -# Scirpt de ejemplo para iniciar el browser del cliente con un menú predefinido -# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). - -PROG="$(basename $0)" -if [ $# -ne 1 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG urlmenu" - exit $? -fi - -url="$1" -browser -qws $url diff --git a/client/nfsexport/scripts/ogUpdateBootCache.sh b/client/nfsexport/scripts/ogUpdateBootCache.sh deleted file mode 100755 index af2267a2..00000000 --- a/client/nfsexport/scripts/ogUpdateBootCache.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -OGBTFTP="/opt/og2fs/tftpboot/ogclient/" -ogMountCache || exit 1 -echo $OGCAC -[ -d $OGCAC/boot ] || mkdir -p $OGCAC/boot -[ -f ${OGCAC}/boot/ogvmlinuz ] || cp ${OGBTFTP}ogvmlinuz ${OGCAC}/boot/ogvmlinuz -[ -f ${OGCAC}/boot/oginitrd.img ] || cp ${OGBTFTP}oginitrd.img ${OGCAC}/boot/oginitrd.img \ No newline at end of file diff --git a/client/nfsexport/scripts/poweroff b/client/nfsexport/scripts/poweroff deleted file mode 100755 index bf867467..00000000 --- a/client/nfsexport/scripts/poweroff +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -# Scirpt de ejemplo para apagar un ordenador -# (puede usarse como base para el programa de apagado usado por OpenGNSys Admin). - -PROG="$(basename $0)" - -echo "[10] Desmontar todos los sistemas de archivos." -sync -for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do - ogUnmountAll $i 2>/dev/null -done -echo "[50] Desmontar cache local." -ogUnmountCache -echo "[70] Apagando el equipo." -ethtool -s $DEVICE wol g -(sleep 5 && busybox poweroff) & - - diff --git a/client/nfsexport/scripts/reboot b/client/nfsexport/scripts/reboot deleted file mode 100755 index 7b7f3c94..00000000 --- a/client/nfsexport/scripts/reboot +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# Scirpt de ejemplo para reiniciar un ordenador -# (puede usarse como base para el programa de reinicio usado por OpenGNSys Admin). - -PROG="$(basename $0)" - -echo "[10] Desmontar todos los sistemas de archivos." -sync -for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do - ogUnmountAll $i 2>/dev/null -done -echo "[50] Desmontar cache local." -ogUnmountCache -echo "[90] Reiniciar el equipo." -ethtool -s $DEVICE wol g -(sleep 5 && busybox reboot) & - diff --git a/client/nfsexport/scripts/remoteConsole b/client/nfsexport/scripts/remoteConsole deleted file mode 100755 index dc0fc4bb..00000000 --- a/client/nfsexport/scripts/remoteConsole +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -# Script de ejemplo para enviar eco a la consola remota al ejecutar un comando de la shell -# Formato: remoteConsole - -PROG="$(basename $0)" -if [ $# -ne 0 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG " - exit $? -fi - -# Directorio del servidor donde se exportan los ficheros de registro. -SERVERLOGDIR=$(mount | awk -v d=$OGLOG ' - BEGIN {FS="[: ]"} - {if ($4==d) dir=$2} - END {print dir}') - -# Fichero de listado: hard-IP -ECOFILE="eco-$(ogGetIpAddress)" -# Redirigir salida al fichero de listado. -/tmp/_hidrascript_ >$OGLOG/$ECOFILE || exit $? -# Salida: camino del fichero de listado en el servidor de repositorio. -echo $SERVERLOGDIR/$ECOFILE diff --git a/client/nfsexport/scripts/restoreImage b/client/nfsexport/scripts/restoreImage deleted file mode 100755 index a01f1a49..00000000 --- a/client/nfsexport/scripts/restoreImage +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash -# Scirpt de ejemplo para restaurar una imagen. -# (puede usarse como base para el programa de restauración de imágenes usado por OpenGNSys Admin). - -TIME1=$SECONDS -PROG="$(basename $0)" -if [ $# -lt 4 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" - exit $? -fi - -# Procesar parámetros de entrada -IMGTYPE="img" -IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") -PROTO=${5:-"UNICAST"} -if [ "$1" == "CACHE" -o "$1" == "cache" ]; then - IMGDIR=$(ogGetParentPath "$1" "$2") - # Si no existe el directorio de la imagen, crearlo. - if [ -z "$IMGDIR" ]; then - echo "[5] Creando directorio de imagen \"$1, ${2%/*}\"." - ogMakeDir "$1" "${2%/*}" || ogRaiseError $OG_ERR_NOTFOUND "$1, ${2%/*}" || exit $? - fi - IMGDIR=$(ogGetParentPath "$1" "$2") || ogRaiseError $OG_ERR_NOTFOUND "$1, ${2%/*}" || exit $? - # Procesar protocolos de transferencia. - case "$PROTO" in - UNICAST|unicast) - # Copiar fichero del repositorio al caché local. - #IMGTYPE=$(ogGetImageType "repo" "$2") - IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") - if [ -z "$IMGFILE" ] || [ $(ogIsNewerFile "repo" "$2.$IMGTYPE" "$IMGFILE") ]; then - echo "[10] Copiando imagen \"$2\" del repositorio a caché local" - ogCopyFile "repo" "$2.$IMGTYPE" "$IMGDIR" - fi - # Comprobar si existe el fichero en caché y no en el repositorio. - if [ -z "$IMGFILE" ]; then - #IMGTYPE=$(ogGetImageType "cache" "$2") - IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") - if [ -z "$IMGFILE" ]; then - ogRaiseError $OG_ERR_NOTFOUND "cache, $2.$IMGTYPE" - exit $? - fi - fi - ;; - MULTICAST|multicast) - if [ -z "$IMGFILE" ]; then - echo "[10] Copiando imagen multicast \"$2\" del repositorio a caché local" - #IMGTYPE=$(ogGetImageType "repo" "$2") - PORTBASE=`echo $6 | cut -f1 -d:` - echo "ogMcastReceiverFile SOURCE:$PORTBASE TARGET:CACHE $2.$IMGTYPE" - ogMcastReceiverFile "$PORTBASE" "CACHE" "$2.$IMGTYPE" || exit $? - IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") - fi - ;; - TORRENT|torrent) - echo "[9] copiando el fichero torrent Unicast \"$2\" del repositorio a caché local" - #IMGTYPE=$(ogGetImageType "repo" "$2") - ogCopyFile "repo" "$2.$IMGTYPE.torrent" "$IMGDIR" || exit $? - echo "[10] descargando imagen torrent($6) \"$2\" del repositorio a caché local" - ogTorrentStart "CACHE" "$2.$IMGTYPE.torrent" "peer:60" || exit $? - IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") - ;; - *) # Protocolo desconocido. - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT opciones ]" - exit $? - esac -fi -if [ -z "$IMGFILE" ]; then - ogRaiseError $OG_ERR_NOTFOUND "$1, $2" - exit $? -fi -PART=$(ogDiskToDev "$3" "$4") || exit $? - -# Restaurar la imagen. -echo "[40] Restaurar imagen en $PART" -ogRestoreImage "$@" || exit $? -# Restaurar tamaño. -echo "[80] Extender sistema de archivos." -ogExtendFs $3 $4 -# Cambiar nombre en sistemas Windows y quitar usuario de acceso por defecto. -if [ "$(ogGetOsType $3 $4)" = "Windows" ]; then - HOST=$(ogGetHostname) - HOST=${HOST:-"pc"} - echo "[90] Cambiar nombre Windows a \"$HOST\" y usuario de acceso." - ogSetWindowsName $3 $4 "$HOST" - #ogSetWinlogonUser $3 $4 " " # Descomentar para cambiar usuario de inicio. -fi -TIME=$[SECONDS-TIME1] -echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" - diff --git a/client/nfsexport/scripts/sendFileMcast b/client/nfsexport/scripts/sendFileMcast deleted file mode 100755 index 54e82ac3..00000000 --- a/client/nfsexport/scripts/sendFileMcast +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - - - -#Este scripts llama directamente a la función ogMcastSendFile $1 $2 -#1 path absoluto del fichero. -#2 la session multicast. -# ogMcastSendFile [ str_repo | int_ndisk int_npart ] /Relative_path_file sessionMulticast -#@brief Envía un fichero por multicast ORIGEN(fichero) DESTINO(sessionmulticast) -#@param (2 parámetros) $1 path_aboluto_fichero $2 sesionMcast - - - -export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys/client}" - export OGBIN=$OPENGNSYS/bin - export OGETC=$OPENGNSYS/etc - export OGLIB=$OPENGNSYS/lib - export OGAPI=$OGLIB/engine/bin - export OGSCRIPTS=$OPENGNSYS/scripts - export OGIMG=$OPENGNSYS/images - export OGCAC=$OPENGNSYS/cache - export OGLOG=$OPENGNSYS/log - - for i in $OGAPI/*.lib; do - . $i - done - - if [ "$engine" = "testing" ] - then - for i in $OGAPI/*.testing; do - . $i - done - fi - -export PATH=$PATH:/opt/opengnsys/bin - -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. - - - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "sendFileMcast /absolute_path_file sesionMcast" \ - "sendFileMcast /opt/opengnsys/images/aula1/hd500.vmx 9000:full-duplex:239.194.17.2:70M:20:300" - exit 0 -fi - -# los demas errores controlados por la funcion ogMcastSendFile - -ogMcastSendFile $1 $2 diff --git a/client/nfsexport/scripts/updateCache b/client/nfsexport/scripts/updateCache deleted file mode 100755 index 5723c378..00000000 --- a/client/nfsexport/scripts/updateCache +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/bash - -# Scirpt para la actualizacion de datos en la cache. -# Versión: 0.9.1, 2008/03/17, - integracion eac -# Versión: 0.9.2, 2010/07/27, - integracion opengnsys - - - -#1 REPO -#2 nombre del fichero con su extension, tipo /imagen1.img o /ubuntu.iso -#3 Protocolo TORRENT | MULTICAST | UNICAST -#4 opciones protocolo -#5 opciones de update cache - - -PROG="$(basename $0)" -if [ $# -lt 4 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_REPO _str_Relative_Path_OGIMG_with_/ PROTOCOLO OPCIONES_PROTOCOLO OPCIONES_UPDATECACHE" - exit $? -fi - -REPOSITORIO=$1 -PROTOCOLO=$3 -OPTPROTOCOLO=$4 -echo $REPOSITORIO $PROTOCOLO $OPTPROTOCOLO -# Si el repositorio local CACHE no existe salimos. -if ! $(ogFindCache >/dev/null); then - ogRaiseError $OG_ERR_NOTFOUND "CACHE" - exit $? -fi - - -CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`) -FILESIZE=$(ls -sk $(ogGetPath $1 $2) | cut -f1 -d" ") - -if [ "$FILESIZE" -ge "$CACHESIZEFREE" ] -then - echo "el tamanio del fichero $2 = $FILESIZE es mayor que el espacio dispinible en la cache = $CACHESIZEFREE" - exit 1 -fi - -ogUpdateCacheIsNecesary $1 $2 || exit 0 - -ogMountCache - -## Si no existe, crear subdirectorio para el fichero en la cache. -IMGDIR=$(ogGetParentPath "$1" "/$2") -if [ $? != 0 ]; then - echo "[5] Crear subdirectorio del fichero \"$2 $(dirname "$2")." - ogMakeDir "CACHE" $(dirname "/$2") - IMGDIR=$(ogGetParentPath "$1" "/$2") || exit $? -fi - - -echo "ogCopyFile $1 $2.torrent absolute $OGCAC$OGIMG" -ogCopyFile $1 $2.torrent $OGCAC$OGIMG -#TODO: comprobar que el tracker definido en el fichero es correcto. -case "$PROTOCOLO" in - torrent | TORRENT ) - #[ -z $OPTPROTOCOLO ] && OPTPROTOCOL=leecher:10 - echo "ogTorrentStart CACHE $2.torrent $4" - ogTorrentStart CACHE $2.torrent $4 - ;; - multicast | MULTICAST ) - echo "determinando puerto principal y auxiliar." - PORT=$(echo $OPTPROTOCOLO | cut -f1 -d":") - let PORTAUX=$PORT+1 - echo "comprobando que el servidor está activo" - if (nmap -n -sU -p $PORTAUX $repo | grep open) - then - ogMcastReceiverFile $PORT CACHE $2 - else - echo "solicita la apertura: hose $repo 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO"" - hose $repo 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO" - #echo "espero y llamo a: ogMcastReceiverFile $PORT CACHE $2" - sleep 30 - ogMcastReceiverFile $PORT CACHE $2 - fi - ;; - unicast | UNICAST ) - echo "unicast" - ;; -esac - -if ogUpdateCacheIsNecesary $1 $2 -then - echo "algo ha fallado" - exit 1 -else - echo "updateCache ok" - exit 0 -fi - - - -# \ No newline at end of file diff --git a/client/shared/README.es.txt b/client/shared/README.es.txt new file mode 100644 index 00000000..4ad361cb --- /dev/null +++ b/client/shared/README.es.txt @@ -0,0 +1,25 @@ +OpenGNSys Client (NFS root) README +==================================== + + +Este directorio contiene la estructura principal de datos que +será importada por los cleintes OpenGNSys mediante NFS. + +Los subdirectorios se copian íntegramente al servidor bajo +/opt/opengnsys/client, y serán importados por los clientes en +/opt/opengnsys. + +La estructura de datos es la siguiente: + +- bin binarios ejecutables por el cliente (compilados + estáticamente). +- cache directorio donde se montará la caché local del cliente. +- etc ficheros de configuración del cliente. +- lib librerías de funciones. +- lib/engine/bin directorio donde se copiarán las funciones del + motor de clonación. +- images repositorio de imágenes de sistemas operativos. +- log registro de incidencias de los clientes. +- scripts funciones de alto nivel ejecutables por OpenGNSys Browser + y OpenGNSys Admin. + diff --git a/client/shared/bin/EACInterfaces b/client/shared/bin/EACInterfaces new file mode 100755 index 00000000..b63b1db1 Binary files /dev/null and b/client/shared/bin/EACInterfaces differ diff --git a/client/shared/bin/browser b/client/shared/bin/browser new file mode 100755 index 00000000..08b77dbd Binary files /dev/null and b/client/shared/bin/browser differ diff --git a/client/shared/bin/ogAdmClient b/client/shared/bin/ogAdmClient new file mode 100755 index 00000000..27bdd1aa Binary files /dev/null and b/client/shared/bin/ogAdmClient differ diff --git a/client/shared/etc/init/default.sh b/client/shared/etc/init/default.sh new file mode 100755 index 00000000..c8285c28 --- /dev/null +++ b/client/shared/etc/init/default.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +echo -ne "og\nog\n" | passwd root + +/etc/init.d/ssh restart +#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 + +ethtool -s $DEVICE wol g + +# Fichero de registro de incidencias (en el servidor; si no, en local). +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} +if ! touch $OGLOGFILE 2>/dev/null; then + OGLOGFILE=/var/log/opengnsys.log +fi + + + + +if [ $ogactiveadmin == "true" ] +then + export boot=admin +fi + + +# Arranque de OpenGnSys Client. +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + echo "$MSG_LAUNCHCLIENT" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 +fi + +# Si fallo en cliente y modo "admin", cargar shell; si no, salir. +if [ "$boot" == "admin" ]; then + bash +fi diff --git a/client/shared/etc/init/defaultTESTING.sh b/client/shared/etc/init/defaultTESTING.sh new file mode 100755 index 00000000..7a258588 --- /dev/null +++ b/client/shared/etc/init/defaultTESTING.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +/etc/init.d/ssh restart +#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 + +ethtool -s eth0 wol g + + +# Fichero de registro de incidencias (en el servidor; si no, en local). +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} +if ! touch $OGLOGFILE 2>/dev/null; then + OGLOGFILE=/var/log/opengnsys.log +fi + +echo -ne "og\nog\n" | passwd root + +#TODO => activacion de modo escritura en REPO + +if [ $ogactiveadmin == "true" ] +then + export boot=admin + umount /opt/opengnsys/images + + if [ "$ogprotocol" == "nfs" ] + then + mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock + fi + + if [ "$ogprotocol" == "smb" ] + then + echo "montando smb" + mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og + echo mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og + + fi +fi +# Arranque de OpenGnSys Client. +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + + + echo "$MSG_LAUNCHCLIENT modo cliente full" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 +fi + +# Si fallo en cliente y modo "admin", cargar shell; si no, salir. +#if [ "$boot" == "admin" ]; then + bash +#fi diff --git a/client/shared/etc/lang.es_ES.UTF-8.conf b/client/shared/etc/lang.es_ES.UTF-8.conf new file mode 120000 index 00000000..330cec2b --- /dev/null +++ b/client/shared/etc/lang.es_ES.UTF-8.conf @@ -0,0 +1 @@ +lang.es_ES.conf \ No newline at end of file diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf new file mode 100644 index 00000000..929c1288 --- /dev/null +++ b/client/shared/etc/lang.es_ES.conf @@ -0,0 +1,127 @@ +# Idioma español. + +# Mensajes de error. +MSG_ERR_GENERIC="Error imprevisto no definido" +MSG_ERR_FORMAT="Formato de ejecución incorrecto" +MSG_ERR_OUTOFLIMIT="Valor fuera de rango o no válido" +MSG_ERR_NOTFOUND="Fichero o dispositivo no encontrado" +MSG_ERR_PARTITION="Partición errónea o desconocida" +MSG_ERR_LOCKED="Recurso bloqueado por operación de uso exclusivo" +MSG_ERR_CACHE="Error en partición de caché local" +MSG_ERR_FILESYS="Sistema de archivos desconocido o no se puede montar" +MSG_ERR_NOTOS="Sistema operativo no instalado o no detectado" +MSG_ERR_IMAGE="No se puede crear o restaurar una image de sistema" +MSG_ERR_NOTEXEC="Programa o función no ejecutable" + +# Mensajes de avisos. +MSG_DONTMOUNT="Sistema de archivos no montado" +MSG_DONTUNMOUNT="El sistema de archivos no se puede desmontar o no está montado" + +# Mensajes complementarios para las ayudas. +MSG_ERROR="Error" +MSG_EXAMPLE="Ejemplo" +MSG_FORMAT="Formato" +MSG_FUNCTION="Función" +MSG_HARDWAREINVENTORY="Inventario de hardware de la máquina" +MSG_IMAGE="imagen" +MSG_INSTALLED="instalado" +MSG_NOCACHE="sin caché local" +MSG_NOEXTENDED="sin partición extendida" +MSG_NOFORMAT="sin formato" +MSG_PARTITION="partición" +MSG_PROTOCOL="protocolo" +MSG_RESERVEDVALUE="Valor reservado" +MSG_UNKNOWN="Desconocido" + +# Mensajes del proceso de arranque. +MSG_DETECTLVMRAID="Detectar metadispositivos LVM y RAID." +MSG_ERRBOOTMODE="$MSG_ERROR: Modo de arranque desconocido." +MSG_ERRLOADUDEB="$MSG_ERROR: No se puede cargar el paquete udeb %s." +MSG_LAUNCHCLIENT="Ejecutar cliente." +MSG_LOADAPI="Cargar funciones del motor de clonación." +MSG_LOADMODULES="Cargar módulos del kernel." +MSG_LOADUDEBS="Cargar paquetes udeb." +MSG_MAKELINKS="Crear enlaces simbólicos." +MSG_MOUNTREPO="Montar repositorio en modo %s." +MSG_OFFLINEMODE="Modo de arranque sin conexión." + +MSG_HELP_ogBoot="Arranca un sistema operativo instalado." +MSG_HELP_ogCalculateChecksum="Calcula la suma de comprobación (checksum) de un fichero." +MSG_HELP_ogCheckFs="Comprueba la consistencia de un sistema de archivos." +MSG_HELP_ogCompareChecksumFiles="Compara si coinciden las sumas de comprobación almacenadas de 2 ficheros." +MSG_HELP_ogCopyFile="Copia un fichero a otro almacenamiento." +MSG_HELP_ogCreateCache="Reserva espacio para la partición de caché al final del disco 1." +MSG_HELP_ogCreateImage="Genera una imagen exacta de un sistema operativo instalado localmente." +MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)." +MSG_HELP_ogCreatePartitions="Define la estructura de particiones de un disco." +MSG_HELP_ogDeleteFile="Borra un fichero de un espacio de almacenamiento." +MSG_HELP_ogDeleteTree="Borra un árbol de directorios de un espacio de almacenamiento." +MSG_HELP_ogDevToDisk="Devuelve el nº de orden de dicso o de partición correspondiente al camino del fichero de dispositivo." +MSG_HELP_ogDiskToDev="Devuelve el camino del fichero de dispositivo correspondiente al nº de orden de dicso o de partición." +MSG_HELP_ogEcho="" +MSG_HELP_ogExtendFs="Extiende el tamaño de un sistema de archivo al máximo de su partición." +MSG_HELP_ogFindCache="Indica la partición reservada para caché local." +MSG_HELP_ogFormat="Formatea o reformatea un sistema de archivos." +MSG_HELP_ogFormatCache="Formatea (inicia) el sistema de caché local." +MSG_HELP_ogFormatFs=$MSG_HELP_ogFormat +MSG_HELP_ogGetCacheSize="Devuelve el tamaño de la partición de caché local." +MSG_HELP_ogGetCacheSpace="Devuelve el espacio máximo disponible que puede ser reservado para la partición de caché local." +MSG_HELP_ogGetFsSize="Devuelve el tamaño de un sistema de archivos." +MSG_HELP_ogGetFsType="Devuelve el mnemónico de tipo de sistema de archivos." +MSG_HELP_ogGetHostname="Devuelve el nombre de la máquina local." +MSG_HELP_ogGetIpAddress="Devuelve la dirección IP del cliente." +MSG_HELP_ogGetImageSize="Devuelve el tamaño de una imagen de sistema." +MSG_HELP_ogGetMacAddress="Devuelve la dirección Ethernet del cliente." +MSG_HELP_ogGetMountPoint="Devuelve el directorio donde está montado un sistema de archivos local." +MSG_HELP_ogGetOsType="Devuelve el tipo de un sistema operativo instalado." +MSG_HELP_ogGetOsVersion="Devuelve el tipo y la versión de un sistema operativo instalado." +MSG_HELP_ogGetParentPath=$"Devuelve el camino completo del directorio padre de un fichero de sistema OpenGnSys." +MSG_HELP_ogGetPartitionActive="Indica cual es la partición marcada como activa en un disco." +MSG_HELP_ogGetPartitionId="Devuelve el identificador de tipo de una partición." +MSG_HELP_ogGetPartitionSize="Devuelve el tamaño de una partición." +MSG_HELP_ogGetPartitionType="Devuelve el mnemónico de tipo de una partición." +MSG_HELP_ogGetPath="Devuelve el camino completo de un fichero de sistema OpenGnSys." +MSG_HELP_ogGetRegistryValue="Devuelve el dato de un valor del registro de Windows." +MSG_HELP_ogGetWindowsName="Devuelve el nombre del cliente guardado en el registro de Windows." +MSG_HELP_ogHelp="Muestra mensajes de ayudas para las funciones." +MSG_HELP_ogHidePartition="Oculta una partición de Windows." +MSG_HELP_ogIdToType="Devuelve el mnemónico asociado al identificador de tipo de partición." +MSG_HELP_ogIsLocked="Comprueba si una partición está bloqueada por una operación de uso exclusivo." +MSG_HELP_ogIsImageLocked="Comprueba si una imagen está bloqueada por una operación de uso exclusivo." +MSG_HELP_ogIsPartitionLocked=$MSG_HELP_ogIsLocked +MSG_HELP_ogIsMounted="Comprueba si un sistema operativo está montado." +MSG_HELP_ogIsNewerFile="Comprueba si un fichero es más nuevo (se modificado después) que otro." +MSG_HELP_ogIsValidType="Comprueba si el tipo de sistema de archivos es válido para un identificador de partición." +MSG_HELP_ogLinuxBootParameters="Devuelve los parámetros de arranque de un sistema operativo Linux instalado." +MSG_HELP_ogListHardwareInfo="Lista el inventario de dispositivos del cliente." +MSG_HELP_ogListPartitions="Lista la estructura de particiones de un disco." +MSG_HELP_ogListRegistryKeys="Lista los nombres de las claves incluidas en una clave del registro de Windows." +MSG_HELP_ogLock="Bloquea una partición para operación de uso exclusivo." +MSG_HELP_ogLockImage="Bloquea una imagen para operación de uso exclusivo." +MSG_HELP_ogLockPartition=$MSG_HELP_ogLock +MSG_HELP_ogMakeChecksumFile="Almacena la suma de comprobación de un fichero." +MSG_HELP_ogMakeDir="Crea un directorio para OpenGnSys." +MSG_HELP_ogMount="Monta un sistema de archivos y devuelve el punto de montaje." +MSG_HELP_ogMountCache="Monta el sistema de archivos dedicado a caché local." +MSG_HELP_ogMountCdrom="" +MSG_HELP_ogMountFs=$MSG_HELP_ogMount +MSG_HELP_ogRaiseError="Muestra y registra mensajes de error y devuelve el código correspondiente." +MSG_HELP_ogReduceFs="Reduce el tamaño del sistema de archivos al mínimo ocupado por sus datos." +MSG_HELP_ogRestoreImage="Restaura una imagen de sistema operativo." +MSG_HELP_ogRestoreMbrImage="Restaura una imagen del sector de arranque (MBR)." +MSG_HELP_ogSetPartitionActive="Establece el número de partición activa de un disco." +MSG_HELP_ogSetPartitionId="Modifica el identificador de tipo de una partición física." +MSG_HELP_ogSetPartitionSize="Establece el tamaño de una partición." +MSG_HELP_ogSetRegistryValue="Asigna un dato a un valor del registro de Windows." +MSG_HELP_ogSetWindowsName="Asigna el nombre del cliente en el registro de Windows." +MSG_HELP_ogSetWinlogonUser="Asigna el nombre de usuario por defecto para el gestor de entrada de Windows." +MSG_HELP_ogTypeToId="Devuelve el identificador asociado al mnemónico de tipo de partición." +MSG_HELP_ogUnhidePartition="Hace visible una partición de Windows." +MSG_HELP_ogUnlock="Desbloquea una partición tras finalizar una operación de uso exclusivo." +MSG_HELP_ogUnlockImage="Desbloquea una imagen tras finalizar una operación de uso exclusivo." +MSG_HELP_ogUnlockPartition=$MSG_HELP_ogUnlock +MSG_HELP_ogUnmount="Desmonta un sistema de archivos." +MSG_HELP_ogUnmountCache="Desmonta el sistema de archivos de caché local." +MSG_HELP_ogUnmountFs=$MSG_HELP_ogUnmount +MSG_HELP_ogUnmountAll="Desmonta todos los sistemas de archivos." + diff --git a/client/shared/etc/preinit/default.sh b/client/shared/etc/preinit/default.sh new file mode 100755 index 00000000..d16da52a --- /dev/null +++ b/client/shared/etc/preinit/default.sh @@ -0,0 +1,26 @@ +#!/opt/opengnsys/bin/bash + +# Para que no haya problemas con el interprete +ln -fs /opt/opengnsys/bin/bash /bin/bash + +set -a + +source /opt/opengnsys/etc/preinit/loadenviron.sh +for f in fileslinks.sh loadudeb.sh loadmodules.sh metadevs.sh; do + $OGETC/preinit/$f +done +unset f + +if [ -f $OGETC/init/$OG_IP.sh ]; then + $OGETC/init/$OG_IP.sh + +elif [ -f $OGETC/init/$OGGROUP.sh ]; then + $OGETC/init/$OGGROUP.sh + +elif [ -f $OGETC/init/default.sh ]; then + $OGETC/init/default.sh + +else + echo "No se ha encontrado script de inicio" + halt +fi diff --git a/client/shared/etc/preinit/defaultTESTING.sh b/client/shared/etc/preinit/defaultTESTING.sh new file mode 100755 index 00000000..73b75a0a --- /dev/null +++ b/client/shared/etc/preinit/defaultTESTING.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Para que no haya problemas con el interprete +#ln -fs /opt/opengnsys/bin/bash /bin/bash + +set -a + +source /opt/opengnsys/etc/preinit/loadenviron.sh + +for f in loadmodules.sh; do + $OGETC/preinit/$f +done + +if [ -f $OGETC/init/$OG_IP.sh ]; then + $OGETC/init/$OG_IP.sh + +elif [ -f $OGETC/init/$OGGROUP.sh ]; then + $OGETC/init/$OGGROUP.sh + +elif [ -f $OGETC/init/default.sh ]; then + $OGETC/init/default.sh + +else + echo "No se ha encontrado script de inicio" + halt +fi diff --git a/client/shared/etc/preinit/fileslinks.sh.NoUsed b/client/shared/etc/preinit/fileslinks.sh.NoUsed new file mode 100755 index 00000000..07b87399 --- /dev/null +++ b/client/shared/etc/preinit/fileslinks.sh.NoUsed @@ -0,0 +1,38 @@ +#!/bin/bash +#/** +#@file fileslinks.sh +#@brief Script de inicio para copiar ficheros y deinir enlaces simbólicos. +#@note Desglose del script "loadenviron.sh". +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + + +# Si está configurado OpenGNSys ... +if [ -n "$OPENGNSYS" ]; then + echo "$MSG_MAKELINKS" + # Para tener /bin/bash y no haya problemas + ln -fs $OGBIN/bash /bin/bash + + # Crear directorio de bloqueos + mkdir -p /var/lock + + # Directorio de tipos de letras para el browser. + #QTLIBS=$(grep qt_libspath $OGBIN/browser 2>/dev/null | cut -f2 -d=) + QTVERS="/usr/local/QtEmbedded-4.6.3" + QTDIR="${QTVERS%-*}" + mkdir -p $QTDIR + ln -fs $QTDIR $QTVERS + mkdir -p $QTDIR/lib + ln -fs $OGLIB/fonts $QTDIR/lib + + # Datos de dispositivos PCI en /etc + ln -fs $OGLIB/pci.ids /etc +else + # FIXME Error: entorno de OpenGNSys no configurado. + echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje. + exit 1 +fi + diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh new file mode 100755 index 00000000..83b9b9a9 --- /dev/null +++ b/client/shared/etc/preinit/loadenviron.sh @@ -0,0 +1,83 @@ +#!/bin/bash +#/** +#@file loadenviron.sh +#@brief Script de carga de la API de funciones de OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + +# Idioma por defecto. +export LANG="${LANG:-es_ES}" + +# Directorios del projecto OpenGnSys. +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" +if [ -d $OPENGNSYS ]; then + export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + # Cargar fichero de idioma. + LANGFILE=$OGETC/lang.$LANG.conf + if [ -f $LANGFILE ]; then + source $LANGFILE + for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do + export $i + done + fi + echo "$MSG_LOADAPI" + + # Cargar mapa de teclado. + loadkeys ${LANG%_*} >/dev/null + + # Cargar API de funciones. + for i in $OGAPI/*.lib; do + source $i + done + + for i in $(typeset -F | cut -f3 -d" "); do + export -f $i + done + + # Carga de las API segun engine + if [ -n "$ogengine" ] + then + for i in $OGAPI/*.$ogengine; do + [ -f $i ] && source $i + done + fi + + # Fichero de registros. + export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + + # FIXME Pruebas para grupos de ordenadores + #export OGGROUP=$(ogGetGroup) + export OGGROUP="$group" +fi + +# Declaración de códigos de error. +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + + diff --git a/client/shared/etc/preinit/loadenvironTESTING.sh b/client/shared/etc/preinit/loadenvironTESTING.sh new file mode 100755 index 00000000..1273db7f --- /dev/null +++ b/client/shared/etc/preinit/loadenvironTESTING.sh @@ -0,0 +1,95 @@ +#!/bin/bash +#/** +#@file loadenviron.sh +#@brief Script de carga de la API de funciones de OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + +# Idioma por defecto. +export LANG="${LANG:-es_ES}" + +# Directorios del projecto OpenGnSys. +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" +if [ -d $OPENGNSYS ]; then + export OGBIN=$OPENGNSYS/bin/testing + #export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + + #export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH + #export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH + + # Cargar fichero de idioma. + LANGFILE=$OGETC/lang.$LANG.conf + if [ -f $LANGFILE ]; then + source $LANGFILE + for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do + export $i + done + fi + echo "$MSG_LOADAPI" + # Cargar mapa de teclado. + loadkeys ${LANG%_*} >/dev/null + # Cargar API de funciones. + for i in $OGAPI/*.lib; do + source $i + done + for i in $(typeset -F | cut -f3 -d" "); do + export -f $i + done + + # Añadir dependencia de arquitectura + ARCH=$(ogGetArch) +# if [ -n "$ARCH" ]; then + # export PATH=$OGBIN/$ARCH:$PATH + # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH + # fi + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + # Carga de las API testing + if [ "$engine" = "testing" ] + then + for i in $OGAPI/*.testing; do + source $i + done + #export PATH=$PATH:$OGBIN/$ARCH-testing + fi + + # Fichero de registros. + export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + # FIXME Pruebas para grupos de ordenadores + #export OGGROUP=$(ogGetGroup) + export OGGROUP="$group" +fi + +# Declaración de códigos de error. +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + diff --git a/client/shared/etc/preinit/loadmodules.sh b/client/shared/etc/preinit/loadmodules.sh new file mode 100755 index 00000000..d72cb6fb --- /dev/null +++ b/client/shared/etc/preinit/loadmodules.sh @@ -0,0 +1,21 @@ +#!/bin/bash +#/** +#@file loadmodules.sh +#@brief Script de inicio para cargar módulos complementarios del kernel. +#@version 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-01-26 +#*/ + + +MSG_LOADMODULES=${MSG_LOADMODULES:-"."} +echo "$MSG_LOADMODULES" + +# Directorio principal de módulos del kernel. +MODULESDIR=/lib/modules/$(uname -r)/kernel + +# Módulo del ratón. +insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null + + + diff --git a/client/shared/etc/preinit/loadmodulesTESTING.sh b/client/shared/etc/preinit/loadmodulesTESTING.sh new file mode 100755 index 00000000..cea7d53a --- /dev/null +++ b/client/shared/etc/preinit/loadmodulesTESTING.sh @@ -0,0 +1,28 @@ +#!/bin/bash +#/** +#@file loadmodules.sh +#@brief Script de inicio para cargar módulos complementarios del kernel. +#@version 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-01-26 +#*/ + + +MSG_LOADMODULES=${MSG_LOADMODULES:-"."} +echo "$MSG_LOADMODULES para cliente full" + +# Directorio principal de módulos del kernel. +MODULESDIR=/lib/modules/$(uname -r)/kernel + +# Módulo del ratón. +insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null +# Módulos de discos. +#for m in $MODULESDIR/drivers/ata/*.ko; do + # insmod $m 2>/dev/null +#done +# Módulos de sistemas de archivos. +#for f in reiserfs jfs xfs hfs hfsplus; do +#for f in reiserfs xfs hfs hfsplus; do +# insmod $MODULESDIR/fs/$f/$f.ko 2>/dev/null +#done + diff --git a/client/shared/etc/preinit/loadudeb.sh.NoUsed b/client/shared/etc/preinit/loadudeb.sh.NoUsed new file mode 100755 index 00000000..662887c0 --- /dev/null +++ b/client/shared/etc/preinit/loadudeb.sh.NoUsed @@ -0,0 +1,27 @@ +#!/bin/bash +#/** +#@file loadudeb.sh +#@brief Script de inicio para cargar paquetes udeb en el cliente. +#@note Desglose del script "loadenviron.sh". +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + + +# Si está configurado OpenGNSys ... +if [ -n "$OPENGNSYS" ]; then + # Cargar paquetes udeb. + echo "$MSG_LOADUDEBS" + for i in $OGLIB/udeb/*.udeb; do + udpkg -i "$i" >/dev/null || printf "$MSG_ERRLOADUDEB\n" $(basename $i) + done + # TEMPORAL: corregir biblioteca dinámica para "partprobe". + ln -s $(find /lib -type f -name "libparted*.so.*") /lib/$(grep libparted $OGBIN/$(ogGetArch)/partprobe) 2>/dev/null +else + # FIXME Error: entorno de OpenGnSys no configurado. + echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje. + exit 1 +fi + diff --git a/client/shared/etc/preinit/metadevs.sh.NoUsed b/client/shared/etc/preinit/metadevs.sh.NoUsed new file mode 100755 index 00000000..0870e552 --- /dev/null +++ b/client/shared/etc/preinit/metadevs.sh.NoUsed @@ -0,0 +1,28 @@ +#!/bin/bash +#/** +#@file metadevs.sh +#@brief Script de inicio para detectar metadispositivos LVM y RAID. +#@note Desglose del script "loadenviron.sh". +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#@version 0.9.4 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-04-19 +#*/ + + +# Si está configurado OpenGNSys ... +if [ -n "$OPENGNSYS" ]; then + echo "$MSG_DETECTLVMRAID" + # Detectar metadispositivos LVM. + vgchange -ay >/dev/null 2>&1 + # Detectar metadispositivos RAID. + dmraid -ay >/dev/null 2>&1 +else + # FIXME Error: entorno de OpenGNSys no configurado. + echo "Error: OpenGNSys environment is not configured." # FIXME: definir mensaje. + exit 1 +fi + diff --git a/client/shared/lib/fonts/DejaVuSans-Bold.ttf b/client/shared/lib/fonts/DejaVuSans-Bold.ttf new file mode 100755 index 00000000..040bb9d3 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSans-Bold.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSans-BoldOblique.ttf b/client/shared/lib/fonts/DejaVuSans-BoldOblique.ttf new file mode 100755 index 00000000..d0fc12f0 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSans-BoldOblique.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSans-Oblique.ttf b/client/shared/lib/fonts/DejaVuSans-Oblique.ttf new file mode 100755 index 00000000..19f9f749 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSans-Oblique.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSans.ttf b/client/shared/lib/fonts/DejaVuSans.ttf new file mode 100755 index 00000000..7e411a71 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSans.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSansMono-Bold.ttf b/client/shared/lib/fonts/DejaVuSansMono-Bold.ttf new file mode 100755 index 00000000..86f97226 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSansMono-Bold.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSansMono-BoldOblique.ttf b/client/shared/lib/fonts/DejaVuSansMono-BoldOblique.ttf new file mode 100755 index 00000000..b1439380 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSansMono-BoldOblique.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSansMono-Oblique.ttf b/client/shared/lib/fonts/DejaVuSansMono-Oblique.ttf new file mode 100755 index 00000000..81208a6c Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSansMono-Oblique.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSansMono.ttf b/client/shared/lib/fonts/DejaVuSansMono.ttf new file mode 100755 index 00000000..029fcac3 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSansMono.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSerif-Bold.ttf b/client/shared/lib/fonts/DejaVuSerif-Bold.ttf new file mode 100755 index 00000000..e7aeb9e8 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSerif-Bold.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSerif-BoldOblique.ttf b/client/shared/lib/fonts/DejaVuSerif-BoldOblique.ttf new file mode 100755 index 00000000..a457fd82 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSerif-BoldOblique.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSerif-Oblique.ttf b/client/shared/lib/fonts/DejaVuSerif-Oblique.ttf new file mode 100755 index 00000000..887939c0 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSerif-Oblique.ttf differ diff --git a/client/shared/lib/fonts/DejaVuSerif.ttf b/client/shared/lib/fonts/DejaVuSerif.ttf new file mode 100755 index 00000000..5d096d14 Binary files /dev/null and b/client/shared/lib/fonts/DejaVuSerif.ttf differ diff --git a/client/shared/lib/fonts/README b/client/shared/lib/fonts/README new file mode 100755 index 00000000..076fc9c2 --- /dev/null +++ b/client/shared/lib/fonts/README @@ -0,0 +1,21 @@ +Copyright statements and the source of the qpf fonts are located in ../../src/3rdparty/fonts + +The fonts here are in various formats: + + *.ttf - TrueType fonts, requires QT_FEATURE_TRUETYPE + *.pfa - PostScript fonts, used as source material for some QPF fonts + *.qpf - Qt prerendered fonts (QPF format) rendered from above fonts. + +QPF is the portable, endian-independent format used by Qt/Embedded 2.x and 3.x. + +The prerendered fonts are generated from various sources: + + fixed* - Fixed font. + helvetica* - Helvetica BDF format font distributed with X11 + - Latin-1 characters (about 250 characters). + japanese* - Helvetica BDF format font distributed with X11 + - ISO 10646-1 encoding. + micro* - Micro font (see micro.bdf). + unifont* - Unifont (see unifont.bdf) + - full unicode range (about 50000 characters). + diff --git a/client/shared/lib/fonts/UTBI____.pfa b/client/shared/lib/fonts/UTBI____.pfa new file mode 100755 index 00000000..a4fda2e9 --- /dev/null +++ b/client/shared/lib/fonts/UTBI____.pfa @@ -0,0 +1,1172 @@ +%!PS-AdobeFont-1.0: Utopia-BoldItalic 001.001 +%%CreationDate: Wed Oct 2 18:45:57 1991 +%%VMusage: 34429 41321 +%% Utopia is a registered trademark of Adobe Systems Incorporated. +11 dict begin +/FontInfo 10 dict dup begin +/version (001.001) readonly def +/Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def +/FullName (Utopia Bold Italic) readonly def +/FamilyName (Utopia) readonly def +/Weight (Bold) readonly def +/ItalicAngle -13 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/FontName /Utopia-BoldItalic def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 36546 def +/FontBBox{-141 -250 1297 916}readonly def +currentdict end +currentfile eexec +f9d13ed4c538ee56ca0c8979e615439db5863a5292e578086555752cf04323b5 +761364ec433e576f108b1bff6c56d0f56331bc1243c31feb9985de983b0b3300 +e35eaa63cb5ef5a522d2e2731f37eef0cc62a540af58c4780559b4a0499bd168 +7642677ef167669aa264d68a8ef6da7425b771d48260108ab87a077560b2ebc7 +dafcace10cee472c35746fc11d5304e441fa0678decc0652588a56cef7c28ba5 +5cbd94a7acac9a06942a82d6abc1ed45ef21f4f3f5f61d0002340725ba15b9b3 +0b9992741770f020ec318f514874b6abdb27c3f0dee979cce17199b9f3ecb0f0 +709736e55bc48c55ebc8f7259d9e0ba13b46c2983c6e8265633d11358057019a +9bc40f9ef8830b5cf7022bc19c01160d17df4ab51d113cd49bde4d1e3b5f8ba2 +7d179464b8fa28e12092267d5c70cc341eb3ed0eec08b343175d5458311a7404 +a9463d728eda1642be73366ec57a705501aa054b60b04983e30b9987bdbd1c69 +95ef18d327beb2f2086a2245602495ccb7851bcc5eb302b980ada64a262c562f +6b2748b8f7dc4a0a06c69a7231fd40568bb236b33f33ac04f1d2f91573f60470 +599ca51abce802711c7fbd95247ec33fba3a393195a5cd54622434e668d1e63a +a39a51699962bfcc4774228ebdb0b01f29b430434d8023331bd1b6b2c76e43df +b3c68753c55075856e9ea0f5c7d60f510bc115bb70e0a8eb9998d3f32a0b72d3 +ab524841ef36b198e3ae58129ca64e005f776a0676dcef57e7961dd2b948c2da +f392cba950f1101a7bba99952251c82ab5d0eb5ecd8af07973eeafcb3e0b5f2a +3b6c8852ea072b9787fb945cb7cc7a2acebe92a5458e7dab5ea2551a61a55068 +d7023b6193c750e32502fe1e1d8e8d497453fff493caaed83c410eef050c30c6 +e38339831517101b07fc15d5f63470a9863bbfee0c0002695669900aa70a18f7 +a87f1b0b83494c39c3c90a8313060204d19553e2d66419e7b002b25108ba00ff +a7e60c68b73c53f306e112ecba3b64d35caf59f11a41ae76aa2fb4882ffffb96 +400c2b6b0051c90d7279ffd0df3a6ba63daf802888bb6b98db281b89734b6e2c +9ebd473352b36e11b5c3f3c7ecb22095b7aae220fbc89cf6036fa963530b8a01 +1cb06875ceaa143eacdbf1015631e8858bfe5917e01737ec6c840fa7097a42f1 +15884772664b9665e5575dc3003914643d34f329b9cd12b1012e93133a27d139 +ebcf7f9b68dc21575f3ef070ef94d4f3f9ea0d3ab4a75e6ec849a4630f4f13f5 +0883dd86a9903613ecf36ed6ab7294afdc167e0eda4b1944870a2f99ae8a22c8 +1b711d1eeefd489009b86f08078f4510c6846b17ae72c87dc51d0433ed9cb40f +197db7e3c2ef41f077481b3d194aa3284d5400681001e0531348b91cb957c396 +5611aab14b92dbb110db950073dcaf69d6454588bf63c477112c38ac578b0ddb +18fbf7f0d44138c4721743fc05cbef7cc3c684328df7c4bbc17afd9084bafec9 +99b4b8304cfd2d604e31d96c466466cebb6ef3a2236498e31b3c8dd8f15c1ec1 +c67d2b6472c3dce8f613c8a206e5dbca88b03ea931fdbb7e2d19625d4aa0d800 +b2eb953de5ae22b2478432710ad8efc57558171c332f6b27a2cac9145badf751 +9cf4987b853ed30d3a726039a83158c03a0f457dfc9a81e78d909f070e8d47e0 +252b72d03d049ed6349c752a01b92072a2c8f6c50ae85d6a5469eedab2e0a5f2 +6e502cf72a76706ecaaf7a590105feb6f0c1f52a820369fe3b903b08ec602ab6 +882e1ea21007443e2460e29de7fc07fa72bf89c145b04be55df48c0ae5ba1bcc +c84bbf0a2de650ded51dbb240dadc2faf3a2fd0fa8749f0b1e372c579f905148 +706e910cd5578d06c8018e3ff8b88af6002c549b87a9fe2b1f804e95921ef83a +2810e015e315d55496eec2bd16e0b71e4d7004dfbaab8a5d651c4446e343e382 +8204f6e7b4cababa6aed624942902c65899615d858ca24fe6c91a41d087fd647 +e50c52850049c81a5dd9447761b3a308df7403fa4f8669df366d3e114628858d +17ba68a92fed47c199d1f7d415c8315d30b394177b161fa487225c38e0b9d9c7 +ab236e90e926614f9fbdb3bc081e948319ec3871fd37193f0889ecf2c47841c0 +666b272328bbd281f719181b4e509c01ce80afe08f6244ecbfc136f8edaccf79 +36399e63e5982d27fbdaffab086e1e064c84cd97d4eef959aa3a452e065618f6 +b549e3fe7207bcdf85ec1917612c098236b9124d6f1c037bd0656777dfee995d +5d125d678fa7ac5c995515e952194f9620579316eb0f0ad55930ac82fa773159 +c1ac7f4b072f06baef03ee07c23fcb4ad8072503469a8e4eda4cf143c7a68d27 +bbf01668c0abf4950277c195fa1cba7297a2e863299e195c6684f2a076427e5a +a2f308fcfb1dc11d14bcc8a4a59611eb8bfcbfcd73e963d69c82fcd95e989ff5 +ed486f9809d3f9e1a0ddfb573b37d1d3d57e0fa4594f66ac56fe16168a472552 +eca179c7ad26be24e9afb1a759b73de53e9f7075b7ce0ab8bc8e30ec6d68aa42 +a84b36f2c4e4afa9e59c6dfa9af97a93b2cbd9ba786fff8d8b60305b608bfc36 +83c2c94dac72000fa51ff15739975e9ec0185f3b7cd805e67b5ff91fabfa648d +81e0beddecb47dbbad28a99acc3074f1c248b2231be3fb01b331e90a1bc723e2 +8a0b2e99f2defe00a0b33c13f0a6a37717089fb28b7c58daf478e877e4bcb73d +54b358c509a630d73938bca5126547c94f88c97cedd1c65a3d514b3ab86a489c +317554f67e1aecc75e3c71cd37f268999f17fb649cc52ce4ada26d2d4ff1c248 +e9e4f6f5ccb85aa64e90f371cb94da1ecf5b995ded0fa6771e3f874ef449186b +4b78c298d5c24e5127532b67c9479f70c3703ab7800ba8ecbca511703d6a1733 +7f2edbaa61171f00f01debc6eba2094465e248cc8262bd35cab622443a1be5c2 +8e6318e4f3b7131045b8f676e2086f0432f51983c74fea25cd5aad0797a4cb5c +6503695292d798c755170f0ae137674d25759bbd89cf4fe0917e32999b4a04a3 +655ea871b30e22b0ee39f29f7915fa3dbac0d01c55a454728869501335f97e3d +24b17ab7ea28784b6f8c9e0b72b38f64e0fdb578eecaa5590c20a1d17ebd4ec4 +1632b40553aa80fced6d88079eee8097a410a29b549a0bb3b6fec526caa745a7 +202eabbe2cf3f1262db3e6e309e0afc3d9c808fced17b05c320945fdf0a05459 +ea7ba64fc4112fa68eb4887bc845e63a598e2d31df0ab0d64155e631e3ab4621 +744da7c3da19a2e66ed2bf759505e0cfb47a76a81ed7242cc29c7383989afc30 +df86c4b38be0a5c8b360f586f463e53d6684584a3a5fc75495200fc707cd1981 +1a0fbcc0fa784b02140158ef0913170979c4fe96f3fdeb414cad01b38d2b5934 +0b21cf14a28c24a583472ae3cd667ab094e56744c6b35ab7870ee5b0aa22a70d +dc68afd34b44e45275ca8d12747dc6fef76b826f1dcd70a5a30537e096935f7d +ba37414aa1f0111cf7a1844c5e2b3f63764458ce9e113d06cc844bead4d22109 +069b5174e0ba5aabef78dea7e384369de2e4142bfe6521efadfe67aa41fd7bf5 +52ff016ad8d6314b4285e129ebbdbfd3c6e3383906248f0ce045ad370b0f90f2 +a832944cbd59bc7cf15a9c17ee0fa0bbe12f2304fd6a9f56cbd65e7cc91ed860 +7d09e58934079a74d02c1b25b958567133657dc028148e9f13a0ff6db812422b +6c7cfe064a171b4fc5e1764000d4a761d1c476aeb59a45f7b64ba1c8623b1423 +91d79d124b8506eaf94ef8fd28b5fa6ca6aa5677ffe979dd3d75f540d577ea8f +9cc95f5b41942294df812c4d4aa4ee701f654be2c00440ba575c5512bb5c196b +3ad24366514f2b4ea4ab0c35927517bfe166c261c0c7f9b73ab0c52ed0da3696 +628a1f230e48cdaf2ae53000dbb2ee3fe17b9785faf74baec7caadb23fe6e329 +b2b908bae996af74097cdb6e280b5d5c2783b33ba106d6f458179822af89ee24 +f99514605cb4e232b62d92014636841a991b3790ae7478d020d6513e70244034 +dec5f2106a1820acac4b7e091dce521896f25dcfaf58a521ecb5d26ae3b8bed6 +c61c3c25d09d159d5ef58e253dc0f9817fbb469e44eed683ffecb08689e66108 +ce6f93327a5ade948640d0e9347b113d846846fae982687d95b66d6a75ffe876 +a2c50ce60e3f7953d9dd5a9f5d65b1105a7849d734336804de32576e81abd201 +4aff1a36aae15c725df295daaf26238b21c6d288450aa4d94e26ce6a1de7f096 +5838c195a97ddeb019500e8fb95e8b48190b020cbf0582a99df66b7192b67448 +c1695882808efb39a3c54fa42c183f65492f9d0cccd832b5590a6c4cf18e8d2a +e9f50100f197818f192c39d4204b6dab711c2f8cb53e5ef002719755cfee11e4 +f1ca77783034901fa2da7f82254d1184f2f724e36be731fe923c99d444407539 +3000ceb19548d5c11d7aab1e13917ea4391ac626e02bd7a1960bcdf24e048f46 +76fc3cb4031811d94f83a0c23b309cc9a537b599c174dc862429bba8b94e7e56 +56682c13bc4deb402af2334993c66d6ef48cebcf6dcc924a2a1615ee92edb7bd +221fd3204d9dfc6b2abe84d5b47a9d03227a4c015204af7dc5f937adc8c60de9 +feb1c1c722a911b2a5f186478ad7540ff28f7cbc82d85e461c740e8aa51c16d8 +8f939075b78f8a097f647de080dadd87dd5a4107ae7cbc25a7964e5e8e0aff10 +1f17185e95a7c432c76f5fba2138ee76b7ec76c691df228099c0de7107aa0f5b +523209576c023ed23e9ea9047d1def8175e515bd1ee133167f0f92fc87732091 +4be8e6a04a796e5affd91f2e0bfb1b47d960228b970cae0824b32f602504cb12 +9f29f933e538a01fc231eedadd0bea5523ce4acd3ca5d512aeffd4bd91adc088 +47e520f07aa173dc6d1dcda5c7a20a1cbb399d7a11694bd2c959d2546d5cd1b9 +b7afba473e7c9f0492c2d4b4ed1204d6f633a431d83b813b5ec5ecbe41b6c8ac +003fbe65fee1581fb80c2f4c691f9e8a33630940b198deba7491d83421017409 +6dd46e914bf82841e2377e57cf81c0f03db26133519f638d0b6422585af7f7f2 +589aed2dfd15c02f83bb6fbac42b4fe85e14256c5b5f6e7a287953a4f96a0c6c +562b87ff8a8ddf922571aedf6898faf7f9327f92a6f736546c5699aefc4cd1ba +b403a43f8464b215993ef53d2d9186ab1218f7e1f2ccf589ee0a52096a153ac5 +e328654465f3f734fb590ed232399f9f6dcfdfe7f702b4ed829e444ad685b1e0 +d0764217ae144e4af82554faf6d013be83816ab94a6b175905916bea3c053fdf +8d033e48ce7e6a7338fdebdf9cd047624cfcf3be1aa133690eed083e28939707 +778274ae874e906f972080d9dd453ff5039cd351776a1ed52d3e4a8fbc749f9c +588478826593e0e8625b013ff1469bf76aef8ae06a63ebbda3176d517a7cc32d +ad93a096258b227102b2b748359ff2e70a438709eb5f1b60be92f7a6c8f92372 +c3b9a58ee0934083f2300c6423250c00ecc2cfc67a6be83450eeaeca993fd695 +939e47e7c7d28f9db30e2a82ad4895092a1a5a734f1727b4734a14743ee1c9dc +851c9463451042f28a519e8c532e16c6a7f65a11286b85d48ee3bd6f09caf327 +cd87df6f40cc9ed5784744408da6a2e65cdbc6838812b2da414fcf7a33ebe676 +d381f7cb0bc1d84273b03240fd3eacfab2693d04abe2a89f6d884fc1ba2c0c6b +183916096f98f062bbe990f87a9d74d275f18d5d97e9eff897b99fd5e5f2353e +16fe417e644364017a1f014cd0ea62ad0a684fcb1f7a4969bb2d0119d3021ea6 +91ad90564b7cd59c03662d4809943ac3c0316c45b3e6576a9cac3f549f04a9cf +b21aa641eeced2af9c0e9944bcd355444f1ef2dd626d94d65c1e00b208f06fd7 +526f73917bfebde0538984edc704fb56a92f429f2b3ccd2324926605ffb9e06c +e3f9435778a9972bc1d9511b1c9e013c9232cfa8fa03b8076de78144e24583da +ce13c107390a4b4a66fcf41d02c7ea3889fcf648bd9b202a77ee0debb98745c9 +b424aa89f8028129fea8293f44efdfea96ca75d1462715087baceb18506124ad +843bf5b5eb3044665921c1e711ae61d7ea772773f99f7aee6de71fcd8c5c2c9a +4e5d5a1f02ba9ad0e31ac0673594882b491d8dcc9b7c4d8bf806845cb7e7b054 +e073b9379f6f7b756786174fdf25b080adf0cb4645dd8fe1b4cb5377195bbbc8 +88e09bf98c82e523794bc350fa0fa12413dbffc006a66c47c402b78164fd9234 +b9fae67432f7a9423ee7569d3e6bb293cc0a095f3c5a0abb6a2c52a0c4dccddf +54dccede5914afbb9bce717409060d5772bf6c19ec65700c6395884b3da5bd6c +d81daba48977e3af9653875148fe7ddab905a0cf6c5352a468c36ad2bd09d897 +2d54f62bf9af9688c1454b67f24b5cbe39e9c069d6b5429ab9e8b2117c0b09eb +7f877d667af2af4c06339230c2e2d082f389d7006f8bacf00bcef8b652a8f1a7 +e210e7facbe69f8b0cebc21b6cb559ce9f6d8e1b0546870d773f6335426b6978 +60bfe9e2c6cfd1206ff1fa27cadbdd58c4c2368e95e17bda712c4feb1e89c63c +45c0cc72dac845d10847408dfc7dd390ea0c50fbf3012939372707be42c88a8b +025a77150be73e08e73fa1e15fb39d985d5e6666d2a4f77f947eb1b2228ef0e4 +bdb7f767621b7edf5b863d44c09a02b08a41a3feeb239ec9e022d0d8c2fbe939 +fc242a923b082a3035a23c0ae48dae76b4c2147a7f8126ab66dfbb8c892d858a +48f8b65eb85d3216b8c156ee4005045697a11f0f349d05620b1c0d41575c11bd +e8165d443d4e836d4b4b2fc028e3ee7eb995115de8bb5b58d7575a260c8ebb93 +cc5d43766f56ce454dff93669f41be40953c42ffcc98a89e9f6ab320f7688083 +32a48d4ff8eb88c84c7e0cbb9e031ac71c53873da074cd4112dc30b4f27c163c +0d6371b35d0571dbc1b80f5101c90d4745e978091c4c8b2bfe8aa23db4979a9f +143dba6c041772bfdda2077985fe5da829d9de5d8c5c9d02175f65e23495756e +2ba67a1f46d862bb76a4f330c66adc2df5303b34ca0e705f28a97e2782105359 +3ade715c3f7eea39e401af757229bd314b886dda55f418b3a67657d199cdc8b4 +d05a5b7aaf37b53e1c5707fe5454d512c954b6887731d2626499cccd6e80b1cf +9b3116814c0f7705d53b402fc4e9b6307b22941daa12d9c66849165e8de01e0b +20c33b1b503c6ac7995d4bda83da72dee3b177389d500061e16c6decd05bd391 +1e2d1727b5436aa550e1bd505e91ce0efcea62d9fcaebc098880180caa252f6a +667c75a3185f62caa0c28763104f57e93fba3a396d7015b3a55161401970668c +7e6ed168f6e0f1029216c27c33544cc77111b2ef2b1538f1e89397a2e78f0319 +28e948640198d7d2b5684f9566b5e70988c2516a81623a6fba82c1554f3a8a85 +98c1efd626eea0ea586cea3b1f6b62f97b1ea416332ae107f0f174ebde1f84b7 +4af56a9495913e0e84ed0d8702ebe1c699f8e8f056de6e7728023e6fe0dc68cc +aa76c3e2aac6eb5f5ee502c1098db8033c4432fd0c6f62aadb989954d81e4247 +6efe3ddfef52cb066d3da1811e1bf13a9da68d77b3d88ae4b5e0ec252a992b2b +dd6b487458694df4bb1f300f88f6891f2033dfd4ed6eb147315ea84efef20c16 +3b2acdbd1a6812ebfa51f69413d1750c60d374839d46400b9563daea410e4bb6 +4231cc49a6db6f9acad1bd930faa27bc25e636deef091d07ee8c405eacf00d37 +a67027a49443231fb38cf74b4afe723353838866c9d56c2218507344cfe23e85 +264ec426283982e0e299b8557f37010c921d4b1e92b1997498426d3690408685 +5e0ab86ffb4c74192269197dad437aafdfc98809cc865a72f397901a02e22f97 +f035deb4063864798cbbdca6adfdd2e1f644c299d5acaa8b0ebf0102cdc1e478 +77179fd1e5c69595485ce83dd18e3a154e8f6bf6aad3752f209ad3e561cb2400 +0959f964e853ec9cde9deea9278c5988db3f026a6120e0020438f44066d270f4 +af05c4d6568fa3b288c0443be3cc406b6ea555ba97b9fae56c2b7e75263397c4 +f247bee72066fc445c158297eab5151852dc2c32306794b7be0a5f23c22f76f8 +4c80909a303d6d29d808a606b8c0739e69d715778ae843c033bcc8065ce83795 +f3d5b1a403aecd1ce8db79b148946d9f96673b51840fe073065a7da8cf8a8e98 +0e70984d88ef691e21a7f3b52c2a455286d80e3831ef4b7119459970a77e2bfb +1b2e12a6e2cd4e02d80cdf90fc00a1fbcb42817660487d5fadefde0278d4fcad +98fe39b3827b681d4427fe992adae296946720129777c73d954e1f91dfe80130 +362fd97c8a7f693b73ebe45155434eb078fc66adde8f9217583680f5e0c9f80e +c413226de65a1e06fd6bb4a4870e8702d2d77eeafc0ea5634272f19f31a6ea21 +b51de45449e89807b18588c9a43524713c31f27be41941c32da7c5cb636c5e1d +0ef69e2ef2c18ab0746cb2d19980fbdcf9691c1d74606830522219310193b32e +f886e8f200135b55e178d832f0416de4b86e2fb4eb8731337efccf833c044446 +1ab477118d9b6d53ebf5c42e46ed8e5d0181eef7a15145d5a51d7a1b8f82189a +f6ccde81e2f1da5a0e419838b90adc945a7e74a2132aa57807fe6107caff8296 +aca45bdc7366cf3b738cf402674c2c2ef0954ccdf7c7df0377641e9ffa12a165 +725cc7bca1a0d38dbabd6982b2f1c432454919fb58876f7854ec713ebf05e0e7 +01d1135f89b31ffa94413f30f72527de872418559c07c8a87556fb558bbd7726 +aa9cfb99d41a7ddbc8d5e4f8aaf20619b2dfdc18ed319b958b5812867e5f4442 +fc670f55f78be8ec1c3ed00fa36cbd52c5c15d45a5c77746de5aaadbce70eb29 +05c3972ddd7e2c220ba4137a5a6aa178af65fd65f225393a08197057d5dd407e +9c238702425991496f7c7c91754399ff3be95c95704f26de0cf99aabc5786994 +9b727f5cd72f4428908b95f1b879c2366ebc061ad4ef68ccd4f957cc76594d88 +dbea7f48b814a94be79e2cebf4de7d2f6b2fa680baab5196b132c5970d035801 +e021704e10823478c68b4f791e63cf7d9725088a6fc2279e1d09a68b04f31901 +7bfdf33caf58ef856a1aaa0793d327c91a2224e7239c211f1210ab11cab44b93 +0ac2b75868db9a0faca784a130fdf9f47cc09d44f9bc9f697f698d2da440441c +1adf05c77b768535ec2dd30b9897c52b1e28d081f1dde26d5e8438c405277c2c +2291b1911cbd914a714159a957e0b436583b1d90cd36c7ba1b6e1041c8eb3996 +dd2715fc01e9a82bd1590cb4ad8fbbdac9410beda818b81260a3a8742c137f6d +175fa8bf26d648c991fe684e0e1469900ed0a53b7d44e35e63c7e1fd0b5aacbf +5e9b854f302f3ee9c7620f5c9e2a5446f7653446f0bdc192a34e23654830e5d1 +52bf36fc02c220ac72569f80795ee9271fa89b438a8fa4de0a3fef6de60310e0 +77bb99f86ae3e0824c593cb2d0387faf97b3612131a2b0edbbc79a4444acd77a +53ec23d447610ad92120f7702df3c0955e5870e1ede213b5edcfe5c0405538bd +6d1a06aa55a8afa73fb82a29c6eba9adb721473d0756c31e77a4012d10dab6e5 +80c90caae60c3ea5a846f74536079bd790979059936c7e879eb79905e3b67b3f +ace6bd0a20a8afbf1034dff455f130347f54b6f7862a772f0afd46f3601349e8 +9d1caf04d0598df4cdb164190614aaa872036855c02c3c92374a3baf5453baec +0c0d2d89d79fd0452babb562e925422d17e888a9350fa50d9b34bd119618a1a3 +50f9059f36ffc5adb1f29923af100fadb5d32aa948ae738d53ba04c44c3afb82 +e935f0ccf3a7903ee5f939f10d3668c672b75e90777354d1429453010e4f72ac +23bb5cd7ddb1712a6851c033bfc10470f8ae87308777dc1d69a1b95e0ab1a655 +e46f843d3c4bbf2714177d4c83747f918884d366dad7705e4668087eb0d13548 +2d3c35939ad5402b94d3fd7f2bdceb0ec55ec0fde7fe7a555ab921dac698917a +fc4bd079834d26e0b1d4020bb50588e961658935079e8b542f927ec7a7e0ccfc +d03a7bff24ddedd6d7df33c3507c449067e548b0db1a42baa9e3b1d0528298ce +981f8e35b10b00f69c92390e4aa06d2b3374e868b4ee0cf0ee5f59f1c734550f +640bd5eeeddf30a340558a831b9e39bff15b35649a22b23b8f39d0d473a07be8 +0c757d16f7738a0190178de0e5509ad9fe624499d7464c43833515c9a5841c1b +e704c88e2df4508101dbb7330ab3dd863f544294887e6ad56bdf15800ae7a0d8 +e523cc1bd1f9424576492b11b41ccbdf5daaf31e3278b3d1c9160c9310f604be +1e869ce18ea776bd3ad33ad41dbc5b3a0acce72033b37aaa5fd6854d0f2faf59 +d2e674cf97ed09c3ec2f7a02657bc036f78c29e25284c7caa6e480beec4772ff +09b02feed2cf374a02b43f653c1d095d21cccefd30d2049c50327fc38bf44e61 +1e5afc9d29d37fc5c22f62b927fd2c5720a8025194734d8d361bd63745781d3c +996f448dd51f345442f1738ef8915a69bced678b6dc75ce6d77c44464d4e3c23 +0f90600074b5d31a870ccb24ccca94e8597177d51f85f9079d3de3ea0978a8fe +f94346f14cc5dca7c6476dd60ee8a7f402e498d91f4c3b8071f5238bf16e8909 +0c0d2b246fd6ac9bdff3ec3633c6d90dc5ae76e353293823b20abdaae12a66f5 +19637c1e69ddfd24df8a76807c441732f3bc7d334bdf5cd5eca5b3ef88798b59 +6f0eee2d147dd35f57c4a776a9c89eb781acc56491e6adf40b94df9e8953df54 +ebff8faa7bc3128a375ee91a17ef4e6ac5fbd17f84db3bcb2ac0468efcf8575f +b51865ed827e1dae4a3b601239519fc552e9959875285d9f688b1f4da4a62ffb +b166645fcc7e587fa82d02f8ea43049f9c589a3b570c16aa3d37f34f999c4f13 +ef852c19789834269ecdc91433b6351f1936b24fda2c6614a467855679c50162 +fb62daa72b9b971511e81c8dc7305e90cfad4950bc2dcfee8f1ad6f30c2133cf +c117dacb41836efe6d5ddb09b6948475c21a7c7e0b843820564b7f4375b43c09 +a07632390ba4fb796e2ff6b45a0584f763873e6a36768ef958c306fdb23607ba +73cfc5d53a282585b9c7c97e8b59ceeb43360107efd16c2d54f825fc77e4eeed +50c040e210a2be8034648a0cd886e2720b8d939ef7c94df36bec7ceb983e7157 +5d8c7d688fdbea4c23b8bdca5e5719ad6bbd1384032235ab03d05af8e86b2e01 +2f6ba96703f6d2e4a014c3de80067fd3fd665ed1c64c3362f254e3c7fba06800 +389cbf12c7b229b66b2df82a823765b41235e31a1e348cf57da0e304fca82b44 +0b2af48040f04750d7df18ebf95da0101b418c3820e161be149a3459e1c39758 +e8063dd0fce331702e9f7be3d10da99033bf2c90a1a24ebc48cc276d78f61cc2 +a6721f3ec1d48d86b54f8eb88b9ef248ee50896901be472b8196f52289869d9a +a656932d4872bab54cfde6eb67537c70078bb808bdd52f4d4b99f4d3a3d7fa4a +ee72b2b5202983641496ab3cd44434d44062db39d6c3e8b60ac6f73ab9b101a3 +2d687ab24b84e27043126bf4eee162f2cbea040586f49fd91b5d4069704bb9d6 +9ea28a6c20643c3f92f648b38273abb8bd944e7edabfd4e3085056f4b29fbe1f +ff5ec131de60fa61812a8ab0d3673272309e36f6a1bd1552a3c41af2a2228f85 +f3809d222aec8eedcb4baf373f37d2a5de8ecc62ea37b335b81005f8e92f27fa +6b2397952bbbe44fe9a3213c33e368d9dc37465e84f538d969f97d55b31956ae +7d8522a5ee6d6fdcef2cb6ecb636de6ee1b2e7b44530166f7b2eb278a0892504 +30cd9e39ad1d38748ccef3f201330fc43f12f6581162775064b6275c6959ad21 +b5486b450d8581de96291f870ed3768da5833520cc36c14b31a90232d1d1cb03 +de7f8f0a506c979b765205d82b518a8ddf6e3e494b4217e47c5dd770c51e47f8 +106f23e7e9c0c4c9b2bdbba64bef04c5acbcf437db53d1c47fcde3bf88d58f23 +fa8a8c482b5d45c78985e7e850b676d773a4ad42bea32e3090403c01c1532a7f +ec6e008ca9911f15319bb2708a57499e19b3482537ac0bcfe8a2dd398b0ad1a3 +a4f9812a66e9b82b095da83a9925c4e9128ad159dfb674cef7090c06626853c9 +0f5d64f662ce69cb135a4ed6eab6f69df2f376f1e3ea47a1903d066441d157f8 +858848b89aa4634011799b26842adc6981686381638e9d7e2c6c8ca22e8cb9ba +d86986aa0300a224d2d0bc6fd227fd557de7da66c301e4cac1aae538c62697b0 +b2258394e0af0333ef56007b98b436dde0d40937923c9c72ad3e3fc7b39d1c70 +2851b4dde84e697f7983d5f71089c3f94abe8ea47392800d7300f4576e9498a4 +20b537ff69231fe3643209c59c485471b2cfa89aec05e50b2ab081eefc80e1f2 +b08f772631c8c649497745610363246af135e2c3231b64be0d5db3789aa6a000 +f27ede24cbc19346557465818d4bf4c4286e08840f030dddf30bb175e81482a6 +bdbdd5c83a361a28b8ea5654a9066b5c8cfc8f5d4380cae506d6a61cf0ad481e +832e08f17bd9bf87749ef53d858b2a9eeab8d7be7e259bf110c4e3313d6ea87c +1ae3664089e4af8160d334fb3c3005de0d5037211f888ac0d959dad0a586b61c +0dddb0be9c5110479f5b0674d00f0e54ca7f642b62b32593779591b4dc119a25 +1e8fb9c40b68ecc9e5a08e63bae86aa52235dea3902f3c355fc1ae6b8c79644c +01a54c68fcbcf46ebfdf0a54eedeafd5d1120bf228ef499913b4426ba7dba017 +75d6e240dcb7d41352b5cb624bafd11fa37fde8b4d4fed2c106a34d8325fc31a +b86701cc72fc1e8db68a1508337947352c46d46d4393384cfef2c9e9e9d6d877 +f13780441ed70e86aee02516ee87bf567857f6af21aeb625ac3e30fb1b873bb2 +862a5ba6c7a6f30dba14fea378a41d38116214c999ab4666e48ce091751ce700 +62bd9e47351e9458e355e08bdf9f38ce3f52993df8d6893bdfa29813fafcefd2 +217b481c1100b8db69b9f3a2169c2a66300af2099a9acecbc542f140ad5d3a64 +6a1d818b0cfad8cd8b4b8a3f8e8ffddc03ba62a624e72df170b65fafed325883 +feb1bd45e3865043bb008d3055c08a3e4c95734db50f983f3ce6b6fb9367104e +c44b96c80b2fff43285967667a3edfd341ce587b212e12b2fcf156f03b0848b9 +3545bf50fe4ba75c13529ee16857d317ae98a934a369b83db5f6039b72bc09be +6d14c88a6e2c77543796939789252b70f51fa37a69b08551be5416fe8c785110 +30264f52592909c8e7f81f54f1b37c2b488f088e85994336c7a075779b168464 +fb37e8f7085f8fbeee68fb68ca9fb2986a53878454d72a3ead0b5b2ed507528a +ff6aa53b238380d6f0e59e991f4092d68e2001c0e6d945b810141d3d1bbb7405 +46d378af9ba3fefd4d44f6caf78b74450a0e230431a5c46e79c222c3767c4132 +90cb9f75baea5d1bbd25a718e8cbbe551441b642f10173e90aaa9b2cd6301332 +0ced79e66e38e8dd290bf36fe33244548216916fad18f20da7b73e31838930c7 +f4a9c44b3207eeb6c103f633f3fc8b2b74fb04a072fbc156089ee3f7351ef196 +f365dd43088f4d4a280be7e81fe73293912000e3e5f493dc4bfc275b5b8a8796 +bdbd266090733ba17e45239f7c0dfb4153be451a8560de6551202f700efafa6d +2bdaac1ba9c8f6e084e4b273fb8c501f336b005cab01ffd38cb6d27941096f75 +db1721eeaec315842dc7938dfa1b9e530b285604ec2c6982389e6c22fbb126c1 +e6a21916e06ee778b51fd72db2dcc11d878f21276a00bae3cf3ad0999c64d007 +f909d0ee79251810c64c4d05a2a759ef0837cf5563a8765817003dac3aa1bd1e +7e3b868307e2d1ccc93b1a5a0a4cc32b4eb6961f71750644fde26dc7b01a66dc +667005b396bb597d1eaeaa55b46506d447449497d29872485b31207e460df2b8 +c5b181459bc68b686182f1b6e164a825199c3ee24c1bd6a1dca450ca1a3fde70 +2d2e89bf6d8b98e4c4f25284b667cec77677be9046ede444a1b93b3b03db6aea +f89aa0759cc8aa7f10a2c4b36f63487f59bfd6e3a2025f26c346847fc257741b +629a3f662e3bda8c3c010c5dc1838afd26f875a56fd6042aebe1dbf119cfd387 +477d713cdda669f61ec1070705382520548a94749711144d8311df5db319ec0a +033f2d5c4c639b5af42549b1bcfd95afa55994389ca8a66b64c28520f821c808 +4ae9dcc9d6020aa6b1f93de064318e5e464e8808bdf0ac519653752e612c9149 +6e3c8e61434d012a5e4537465cb678b6e9a9005f5039e415dd2872ff0985439d +12d524a4f34c520aeecdc4d96383e1edd0059943d59d47880f51729e54a68a98 +a03fd6ba4ecb567c47422e04966c4655f9bb6f74f2b82d4d3ded42a42e90157c +6639f18ecae1cdc636bd616b60218d1b6f8294ecd09a88fc5928c37c9304d7b9 +5bc609286a3524fcfb9e406f636bf1b40573225e658543c29be863964556b622 +da308dcbb6516c88155f6d9b8ae4fe34b17374d46dc560809fccb19e87f7fede +beaece1ec0f41102b99ba6c4de9dd105dc5d90b6d3b392040273e0703b204d26 +89d1a340d0d32d6e201b91244e07ebbaae8b4c877a213ceb2f1b1d3ca07880ec +3f4817c00d48a06102352ef4de3440699cfd69ffaddfd1b90edb42034e5b8e3b +c42fa37c38d563554f8d5b96956879b63866e552fb931c6462b934dd0454dd9f +965055bb3e969b0063dfd2bc299df5552d8edb68b6530673fc08f3a0bb96557f +13b068d62dd8b42060e67d2584b4e6fb97e9dc7439f5c1d23c6a324e72062395 +6305ab4be3a430141d8e615b9f59c3a3eb2b1267ede3987cefcc1419a9f6de7d +d73ff35749b44018da9e79aadebafd0495ee9e29ae4fc7e420d86572f735134a +f54e8f853b764c6e0319f720e8350110c1b300290c8bf8fa4cd3be47533482d1 +53553691ebcdfb46c6879347e3573c318195bc13ea1c732d8d0e7567eb655b22 +1960e8476188532af8af85f7ed7d399ce2ced204894be3a592ffbccbd831f027 +7ae604851702b50c4ef6482c78c77c7959869e83001f7f8f93bb3b8be70d587d +9e5cae3aeccfb455463adef4038ccb6eb8447a7e1992929f5ff7f8e6f37d4a11 +d5815c2ae35f90d3708f3e2a166953d9823846d87d2e7a7419abc47f4044c8bb +a9129cbda3c7fef7725b481fbfab1ec2b3700b3b3780ce5e711663557e873531 +72c3bf0ea8ba03a66c5033602f12cd8aeb3c5cd0e0abd65c936cd7d973e8d3d7 +c5d09bec259f41005187115317afe5f6ef895eac769459c0ad7ab039febed7c1 +dadaf14d015a7a3356982c242713e27eccc7c4d7237052b004e8e5f15008a826 +ed515dd699e6bf60e3a2aba08c07b8c8d9df393094069e781c7d75b090445c7b +1741949aeddd01691102b001781598b87f493ed956b500b2d813d50ba749ea1e +bdceede30f45e0fac0aae683ae087a635ca344411c26a2dcd04a084b5d1774fe +c1f77079af1f9d8c75f383b3755f3ea120e2bef4375dccdd221e1811b4b775a4 +f45b142ae17f1654a53a938eab4c2b2e71293cdc8e2d18ebb8b502af594de4f5 +00795c3712a58bb65b8287aadf183e508d907290cdb9ad20e578ee485ca6aedd +432f01a550980bf7ffdd0a61834748fa4ddd4d2f561b9aabab279e8c131f4d32 +68d89b5f8f542d881286b3c8913a0a71036058755e2f47994157f645ff086729 +67ae4c8461191607b1cd8c4c83298a4bcb397fa5eeef83c5955b301fa270c293 +88d0fa7d58b00f5f79cdb0326172364a0f4f91e189101a2bbbbd448b576c275e +ae6b320f61d6536649b0b0f9340d25ed5ef2746f385bec9526a2d989271e9a38 +302c84169518891d336882d85871ab751c147d1c8563e2d7bf5c3a660c0b0ae4 +9c0981e96dcd4ec45c166f7a34270018a852d5108219486b706f84ebbe9ede96 +6dabe61fcaa62658db716919af23f384948b4ed54ed369dd3e6e9a4f0422f35c +afac114819e7b1b9a09bfd1b985e18e6dde975e610f48d752eebea00ede16f3a +0b090103100000d0c213c4425a5b0ff3193941e27eeb978c7a42dc6927bf301d +1f0f366a5d0ed75b8a969ba68c8106466db17cdf5b516a0ab63f3772dc7ffcf0 +4ff5a952d0798b68273dcefc30c3324ab824690821875bb8580543ada7b15b50 +aa04cefb22aedd548ca17e0c334493245c2eb4fa7549fbf0833f142967753111 +96dfd986a2536834b4dbee2945c2ed76205a05b9fdef35c9b4e41a808220e6d6 +e0349659c3ac8c3f86462866807ee5179d6994dca75b8d162763e8af6107b272 +bb10c72d297aa93c0055125a426ca0ef9a2c79a4b73060ff6b45719c3dfe2924 +8ee4430acc1c9c28f8b93f554f668cf14f39a728d7b2cf00523248d5877c718d +28aa6d2b25e1b0ef7fbca7bd87a1bba4ea760b7db91c7d8f0811840654860fcb +ef679163d03dab048f05194924b68433b76330a6ac806034e954b80b5a7c8652 +719aa83b70fd434ede624963a0ffe25bb1f72b71f3351164d1124712d58a79f2 +5c60a3fdecccb25a5658ad50961a756880b81698c2f2915d13f02ec6cbd28edf +587457d825544af042a800e4387e004d0701b12b8281bdc76197de64309c5a33 +463bb7d317e7646ea2e7bdf7c0a38e82b0142d51a055bb90689f11bfb8cc5065 +b98cb98bcac7c740d9b1676a103af5a3501e6949ebd9705131b7f30f10323ac8 +0e69159b8da52acc1bbcccb8096d378536ecb498900fcf1d21a92dfcadcca90f +cceeb56d38916c2fb64a9c9df5ceada68553e18d5c5d184c8c23ec78dd5fbc1e +f685737e77767afdf33fc585e5d4e9fa1d85446b1b209ed0f18e529dc1487bef +57c45e10759705297476b4d9b323b45c9d7b364df726b9108f4efdf1c080c151 +5d379adb369724746185abfb9567978b090f9159317be68fefd735a62d686ff5 +0b08e19c87f668aebde88f66fbba5c614415c7ba4085b35b3b086662064ad401 +abe40b7c4d0541d69b745f7e4a9ff3657e74c797ee656e721088409226aeee8a +be944ef94ccc9d0d7f4f059eeba35ad008e961a252119950277e7f1028305b7c +a09a5f4c99a3620001d53d8df889589c9aca04f525a39a67fe2f776fc650b3f2 +ec5a895911171356df2bef1fb6302d4e9ec698af4e2c4320821f37533e1cae94 +a5e14eb18f98a127c498ea7e70b1c8599d4ca425272bca3aad3f499130c386a3 +ec3632c8ce2d714d309b52a90ae662ffd310e335a3690bdd831f52ac88279a31 +c3441d8e0c6a741f615c78ef08502af34d81cb1ebd03af02a3fcc76b6648efa4 +d8e550d995bbfa02d5a1d08d0625432267ed55aa34fecd3078c75e1d8e4185f0 +390abfacbf6dc83e8e6bd75094a54a28ac5c44ba886c3b586759e192beaa88ad +b1f1e7b59703ccc55d0c4383875f8d9fc1e24d7574828f8db01ed10919e3abdf +f062f0350da3414719c765b600a281ac245f4f7a33efdaf6ea3cefcf081158e3 +1451b8bef0e8ac74d0ecd0ea1958e171fe2a1f23b8557556927b4db67a09a077 +fca48bfd110420bd160c931c07799fddc47df1d5a7050bf1221bf3c5335f994e +c002a6621068cf4630fc508cfbb7a89ed86593370fe36d559e4fad3853aa596f +50a4d4fa7c28ddb348986fd5e41c12aa6612e1b8ae69723decfecf062e7108d9 +f0b6f92c3d9251d7d061911fa6d35ed466763f82f669b3ff5dc1cdc5ecd21b23 +6424453dc9fd542578983cecdccd279cd52a2461499ff3709ca9b52e7d8ca177 +b59ebb7aac2e5a65dad9f3d07694e4f161b6c78c37f85cb9d21f2a4908c523e6 +5faf1a391066e68344a9f15467991f809d421af2cbdb9692e4ad9e64d0175f59 +729db92384af1d1c9d058b4c5c9808404e72db14c434929a2ee56772a623811c +4bd21e254fc99e23ed1f8b2997ab725f809b5b4a6a9019d61e82b151a3a03c24 +4189ad819e0c0852ece01cdb4829fdb205a3f704480c57235cef0b9960134ab7 +4b3bdc8ed7376980e75d48829dfa6b1f6b3300e2ed170771b9c450ff104ea759 +666461d62a16674950d54d804ae25dbe2540896e7a9fe57006efa21a6efc9630 +4836db559319fe389cf960f041a4d9a0366121a1ead35032afd4b699db7e6252 +abc9a67d9bbd956f5e99de22a0ca48ae978d2c8e018bff87406a9f0c437eb552 +e19d2455b56d4ef37b47577d009d14b2ce56b87966b8d2de7a7c423f89a22ca2 +60c837d76b2ba0d5c4817e9f67ea9348d65975fa356851a9e56c19bce0ef8aaf +3905b73c16eae90cbcd8c1eb4c8e9d840cb7158f145120e3dd6398e3a2034fd9 +95f34006745ccac381cf8c36a13bad6cc4a5420ebe75ee9aa608437fa831d5d3 +3113083cad048dc0730667388bdbed24b33d2c39f67f501f948fd810b8111903 +63e2fe20f823845f9a876e679120f93ba686cf408bd7d69237538e3751c20e84 +4b48e15f86188b8b1002be79cbbc75f226bdf458193c024629aa680f650cc8c8 +71f4a6983ae5a1598821f3f4d8a53aeca3fb8b3bb4266c4aca496110962a8de4 +bf4d133bef58ce2dda36222249d0532cb935804e1ab3fa15066bd90ce643ef8f +4446bf23d64a9212f5386f4cec60ac632c0e9d7404eb70303f35c50b3ec8dd5a +99d309b6b7364cdf5fbc1ef653b661442b260764c902e8f4cf6f2ff2252472b7 +53fdea2300d5d6e1f77e46494d6dc0533a77fc007e723591769fea95906c9a0a +c65f04a8fab8fae134b1227406bb3e44fa20a8379c91318d21315f730b208763 +654d279af7d123b98f2ae67bd5b2f7920187ca936b45b7e3d1da116953f1416c +46a41d922df8d5941e1a860879c052020ee0ebb78eab5e0936b1c8d02eb4061c +11c2cd1098e566a180e63cbc8ccf70a0298f45adbfd0db942abb2470bc1b9c3c +98f61b3ca787d0f823c90231439ac4c5f8ffc7057469b2955b9bea13dcd9835d +8d020f593e21b87cc8becab62522a1b1dcde669760e830be5c3bb7b12decca2d +785e1eafc5d6bb3ddb447c2e69215f7647d4e725a2c647746b7bc7f5df9d3189 +d6239ee2a2bfded2745418befb8def463433405f4b4c278295c8c2ad9ee43917 +11353ecb9ae9685f17550f208bb3eb7179a1fa69882ee2691d280ead58e93f37 +70ca26ac429ee5b8e0dbbb7dc1876f11ebe6f1a0dc330cdbb24b9cd1439b3044 +8cb62e50b33ff18099602c620af45674a3ec0c93fde12ebde8b1543c1f9c5d0e +0a12916ed048ea3244f07060235145cd2a366581ea658b85272d59cd429fc509 +8f62c9937dfa11d29ef22c74e5115f6383d5aea6b2de0ca4c5366800a2bd802f +162c3e3774b12b016914e4c4e008d81b0278c336d764dad0cbbda4652abd4a8c +213c7da9c9fd6ff7270575c6c15bf622b6f6f4802ff6f7991d371a7f06755ff3 +cc7b344749f239036a68803d367d121a24241a559e8d64b6658a8363371cd9e9 +b79231afa2f6284a1ba5b99f18bded77db058469932ebe7d405cc7fad3224536 +fa5fa3f7c643637960e88b0e50014a391c65f22424f7edada3a7dd72a3bbe5cf +47a7dbc05a7955d77fd115db666f4858df46260425575b8ad8ad44912540ff7d +1cc336c3f9056df50f5a0a2c34f12830f81a332b982db204d218593b804661df +5adf14c6ff71504cf9a6faf948601e3e1319c806301ba2915fcb59208ca378e7 +afb5adee01e4167cac25e8a1da13034162c5b1d648bf608174a38205ef838067 +c4943118642ac1d5723eccb0d5e365226ff4c34ab97cec6c9ccb7b73c01ca8c5 +85ec906334753fe353bdee090a79bd56905deeb8e4314620e509a83867ea1c19 +a16599dcf0f2d2f3eae58d8bcd8da926a1af99b4057ce29d6ffdec24a7db1a14 +4ed9feaedaa325b6eb583ed87901c43f9f31bb97563afe8630df00acced9d95d +4b8c1d0f47e02a76730b960e95fb78a4a11284923e9c91a2a5804c14ffb3e352 +943cefbcb1dc6ac888c3a332528a89ffe36fd2824c48eaca69919838665a3367 +7d528ce020fbf68a32d10f0e0708e16611e734a0b20d18aa6dcbf8c450e2b5b5 +f09d32c94c115e9ea5e1a634a163cec01c3a2f3c7826ef7e9d5e8d19d4c4866c +84666db73ec62d9c5b2508b05145522c3da50a31871ef2b6ea0f48187c191e06 +e0d8160390c05376f0eb931bc07007fb313af86bc0934bcab824073d6b30aed6 +5bcb843f80cfd4c3ca11926c604512bb9c14ddc64bed2eeb5522a4ff3120fa47 +d454352891efe9fac5fa88660011a8c0ec0570e0430b19b698160d4ddebf7051 +079809d76d8aecd01ead398d4e2fb15423fb38a6dbec48fbad2098a9ed738f81 +f6330165622f646fdb5b148ae89168c3a1fbadedd5d316246ae37e45bc896d9b +aee9dff0f5de45b6121e9a092ac8b4c69eb61138505ec66b367f59b0c6f18fec +c0010864ccc7a0dfb650115242f1664ec78b1861b93a82a793ad55f1d27d646e +90cb1534ffc6b9f5e982db9070fc65c9559b67285696acb8c7d680e7f109890f +4df338c15cc2359fdc3d52bf64c5f1f04d2507e80b4f3c51e68c2fc099e56fcb +89d0d3bc15657fce79a2633352e4b6ef022f23f17c9b99006de8f42b6c09f5c2 +c82d88b0bf013d7500e10a838d34098b657ce411d22916acfa09121a3a84fce2 +a6ebf229b12763e2f5777c99234ec8a966a7858330ef3330a3e3d0fed0c8969c +1d5099164cc9f1dc0e398cd9d30bcaf6a4b02b148705de166306633ae538f9cc +e791641864e73441382828e68f406a673cae2853224428921ffec808630e495c +64ab4c0754cd85327bfd7fc9ef957642a6d30258b4b9d29bc059392b7e3fd339 +5a6e5a0eb060f9dbd09d110fadbd8a061b1ee8880c61e01fce52c661e1d1b5f7 +cc45b9efab2880a9bea2bd64e8ec183632b1a7a996baa7eff23b18ccaac6c88b +1835eb751974d2930c1f354f5173c9266918872eb7c70d90f64113f12b86e6f2 +eca0e29c4d4c20fa26df487b9be3323ef6de8dfad3f81c7a23a4930fd3a1c6ff +ae0a952f8e074f0f034d4dc16e0f3c11463a57ce0c14fba845733568ae0e8f46 +1a00d55508e00a80be53d818d38acc4f7212c628cb2047f18bcaef075e7fb3d9 +6d090ea9a95a21ca3e7f797aa2934653176bd7ae0e72c52dc19196142e571338 +572a939790b6fab6592f56f8a876c99bc0f9d04afb37da897e2dd8a3818f9134 +ff6dfc66c7142738167ac5688b4da11dbbf343aeab2fddc82631fc7f5e3e5bae +c857ff3757de3c01f097db34436e6d9ce0736734acc91c447277baf1df07c5ab +ae7bed411bb203043f0c16155e38f62da67dff78f94bff4e8ee86e0261628487 +0290e8b302f9941c60a04973aaebd7ff2c4fd0c5fad6e85625921e641b73bd91 +8ab85ecc505552442e1d1802460024a9d3f523fde2d1139733fe54e74dc1322c +0d67261490354ed262e2601098689d583f0feabd9b90fe030812442be5645817 +5fcb9cc603f45146004f4f06d3b6325adb329b6c0686403678ee2901165cd44a +f85d7977c6e3c84a0c5f5d7ac40be097e91259eb0928f84166b2bea549d82ffb +e2187555d160a406a8f273d18778b42f37ec7045734e579b9a7141f48559d8a1 +2a491e774eb885449bf57ed3737c42ebfeff262bff74eed2d0a2a8915006950d +24b1f2ed4bccaaa7a37f126759e52034dc7264eedad951a69dfaa509af59549a +f2de1eb4a74f18abd83d7e8bf00ebc4755ca342836ecfdd0c11221aa26c187ea +95700568592036fa3a03b7378633984b7340e8080f82355c2a572579c06d2c86 +b3602943102236aa99d971cd3fab42db95dcedf44d04c8f05a2a1381c6e9c58a +a526db2ab99b4033ba0d339ab2e1d93b57e691e66efbb79e627f2d0eba005080 +7ed4a60011be87ceae68fade61f969daec01accbaa640cca88a550c7de3b13c0 +ee86bcc1b3d11cb069bb2c205c205b35da97c554e0eac66dd8585bbfcb18c8a0 +cb3941d9eef3a493a2f7dc187a480d21a7b4e5285de82b81e04d6e239f7807a6 +6a334b6c7bf6fafe27c1a81c3957ac1590de2f5d74a0c9b8a990e2dfbde91298 +30c494a28e29557f3cb2ae8a6637fa3d83eb11331f8a3554a1419d8c5e84c1e3 +35f4325506a08bc8ae49a113a5c3a10f6d4b5446fca9a287d02d8db0bd53d706 +00137e83ed703f3e72e6f5f3f2fb14b6dc3e61c1bf7d910f03610666f5579a81 +644c5eca8ba56df6790561ecc91db4fbb7872fa49d2b7f10ba2aa28fb9ac85a3 +4d571ad54e98993f94b7c551e237b314536681cf8e42a26144ea39d9f9a9b295 +9aff80e5b965d2b3127d89e27ab1c8804c68ff4a1ab678ad2f1bfd5b2df38985 +bce719099c9c7a128e29ca4ba9187ef9462d4059034d7379a04aba778756f48a +2373c32c4b29b769c6e9fb458bacc4bf10bf25320d757b76bacf1745c0593e2c +fd20432e32bade5a213d53c77d56d34d67f436c1566395e6143c36c16796cb27 +bdbdad5cfe3dd3eae67b9474edd492c85879169324cd9fdef636d5b9c3abaf36 +edbb4ac14a98893e36dfbe7316c3b9dd3c072327b0bee8bf09fed0a0262f0e5c +08bb6dc0474ac2b428a4c1ee5b624bb1833be8b2f4b14c254d7129a2162308e6 +48035a579d1a7c236ec5bf6255630be94bf6129b96989b933f9ce2745f69140a +515da1fdf975588afbd4c39201ab3ae8b016635c2bbbe6aa27bdca6215617e2e +b9d4c0e1fdcffa313d847929c37ac7b07f96b0180fbbb67f46e9b6cfcae1a66d +4be0afa99fa7787e7f8be5a04e723d4f30abd5a25f080f51de36130b7862b025 +eb56872f2744686fe5959fd51b40e6d11876f61bd9e3eaecd57b40441b5bf86b +378c83c4deaddddb6ea17f6997549eccdcee9a7a48a24466d9c55ed17d7733fb +f323871fd7bcb8414609729c27575ba9fd429553e3d63ecdf78851b72dabe4eb +9ac67e961a4dc4cabf70946cfecc144a87dbd9c73259455199412faeeaa3644c +2022489a3136253e1497bb3458be497afd4c9049c4a615a102829c85e9a4576e +350e14d837372b4b1663d415cbae6a3a954880114b13a1c214b61ea6594127e5 +742b98849778893631b67469aef59b15919872a7cfd255910f17c53576f03571 +0819d59e2c1a46d0dea64fa7e03a63256a8e65047a1ffe4fe36497d2281b6aa8 +9ce1ec831cce61de63c1da6c8a5672c25e5a5a7bf20a7f933bfdc45cf7bbe921 +42d8625b3aac773bafdcc614425fadc62699de088714b72691a1447506e9a37a +093a960287e418f2e530c537c08a3e19ec7becfa4ca9320b05f27974d4c22ddf +61a0ccb6b866d8961f04f9f9b85809bc57d358cd918dfdc9603b32fcbea81d3b +e193034bc458941b7a413947a1594e46b4ac9bdfe9416c275807a4302694f7b9 +2a226b8c96361a389a9bf92a47b28e501a06d91d6cd54fd2d2707ce52af2c279 +24c6e95948a936b4e0cea35c6bc62edb1f545a28ab762ebc3c2ab4c4c3a670fd +14cd631fb5fbc26cb51ded32461d69a2b82c586c40cd1841fa3ba780dbad789a +cca61d286389dae51295141ed27217db047eea3247388390c153c22f949642b8 +5f87f9193421abdcb6d4d3882578f9e70b28ad6238d1fc25877f42e3899ed0eb +4cd9f13eb898e67a053d41ec485931655c9575370aa8f4ff30e8d3e7a26bf27e +f32f2ad0bd244272f84af019bcb2bc6332142b4d0bb50fcfe13b9c4e9883f0cd +c4773686b3ebc08b1dbd2ee12fc3f18a28be0610c4bea2df1543ae37dabd861e +2c1a65515d8bddd314f8949b5941aca77220073b541c9ee457e24c862781f8b7 +56fa69719cfcea364a0d983989ced39ba2c910fcc25a00601b0340d8d6083f54 +73d54c577012ff8895d006922198cbd4718e32d5fdfc56143818901a670d67e1 +0971b6754390848db25f059764a99801ecb89fd0f38d46c8da9e01011bcd32ef +c3c445769122d22409c8492bd716782f411aef4b4e0f1234a936e71b9e8a6237 +9b18088464e5e2934c748c64d69b3f2a92d81a1e0ff81a3150013c3764ca0194 +110f7691c3a2b8809900ab262825cef744812fd2f5566894ba1f8d2250d98b89 +a8683f736d4b5a59f51f2e332c8ed0751089e9c51b91b1c54d9b260e312959f0 +c692d4a760932264214ed92c3ded8f45ed1f40dbde9f20fa7a658b6a36e121dd +cd1bde6e0b8942715b5080fc04a7e6db224faedd8c5778219966177e476de4a5 +a22be484107a0c11d6eaded4ebb020651777add24537d83b6d61b407df0f60cd +34ee532a9343f5b4231937839a5b330df795293ffb2b27521d142065edeeefc4 +8fc9f90558cae326dc18fa6b759e4d0db1decbe33bf3c1fae3e3ab33c9392d62 +429506196d1050a0e2da447161f2e323103da806d05c40618288fbeff828d053 +d3c6e0b0718f5c9afd1581f0098eb9b97c35aad2cd590e97f4a139733cfcc7dc +acaa5814d3b63efee7c764c0d0a8ef392e3dc3f02c8e89f64fae8ee4ca05f115 +4314eb98e6a0e032886fdf29692dfed62802e84b48e4705cc0c158eaccf4d7db +dc47b91aa3c5a49ab600679c13a2177c145759d8bdd337e35c77717a15c55caa +45339aadbda46e71a8a018d7782b9299a2681c927888408328699da5b8cbc45a +b2705038b818fc0bdca4d52896057e105c8b859a52676735022208a76abe3f53 +3b012a22daadacfdf29aefd86f67ca840a1473dcd650f03c315f23bc6ed8285a +9d1796862a88051a4ec70fab8697b54c53260eb12edcb9e533eba6f9c1668f5c +9709dc308f35b927c974fb1d0c58757086770e1774485e757f1b777db15a6857 +1c084f48b3da6102cc7b38dc89f7a8e33411d7e35434750ebc98dab8439fce99 +37f7b35ebdef734e2b44faf3dc68fd5d36e8fa82face91146ca6bfe1b1710cfa +60a6178c88ef1137074956c67cf81e0052d7109debf10409d752e3f770933111 +a069a639005c0e043d42f622e96fab8a4a203857a788b32d3b2b5867c7fcc075 +9236e5dea77a574f4cf964d0cc2cc786c6f0068049f20015dda844a3f409b4dd +bc95f22266529f58e88eb9568ba44cc414535075b383937d1b33135f77c87a92 +9e77f95cdb0d71a1807f1193ef20ecc1c497df8e08732505288fd2ccc73b77dc +cd88fa4db43b9410af1524b03864642f44ded44466b5caf39429e2c18e634834 +11bda54bfb6787cdf3810a3f2e15141d7dbf09aec5b80675d65aec2c66e80177 +4bd3e428b6d111e50d6f2e6b5d4d9140689598d147473b57a71ab08080d37d2a +7f2b89ae2f5948eb11f3808542b8af7ca2173bd33eb513c67f28bbeb87627ad0 +09fff3b7ab0c2deb1668fb922649bec4bde78448bf7070e07b101055584d002e +93826a781916f1e2ac7d272f1a31611835737d54671d9fe6e5b9460b15e39fa9 +af198819f2073d6dae3b3763abc240732d719b0b1c8a37e5f9f76103e770c0fc +9343289d8cf3cb969bb4053cd377413a610084e68c255a6faed405bed1e4437f +f93b34eae37559b78cac42761c985e280b92c57c0641c244f3c480bf57fdbf6f +8749fa7a45d44a40f690d7cbf8b6d9d014a533b8fc62717eac7e069cbe6e3a2d +62e0472bdd23f0edf4202a643c8fe7dcf37f4401d94abf44c749ccd26c2d8fd7 +1ebf9ecfcf534280e759959c243f3592622d799747efa7d5b75964090e0a3dbe +dd08b6106631bdfcc890bd5eac60e6fe316e1780b0073eb4a25dd38ea62793c2 +e3e73f9c4ec3d85693dfe038e322c2c383193b789d13c4be802852b7c877cf29 +4b58bf6ab55f9d6669bae41771d926ca28aa6a58c2601f13fd1aa9b0d7b481f6 +2be12d72c3ee24851851bbaca53045b24823e02581988e4432a8ec843866efbe +5f4511418efec41146309c7a57d665d8ff4d97dd85578dece104a6589ab5de28 +c7d3e653f01ca8492ae98a2dc7381be07abdbb5ca3ef9241ad0e74561f9f5a15 +2ae8cd680fe804aeb1f73eba506da5aab780d3fb24f617957f7835c406c2f017 +1bcedf43715e7f01450f3bdd30c91d91c64e55ea52a8fe5423d54965aebf4574 +b1e9c8e46c78b76fb87df3491440a7bedc74af6a963a2d34486b81daabdf4ff0 +37529951e2bac3dc85ae2aa8a2a0543a0093d2ad7a872369458db38188a346bf +43d572f9e2bc2f780ec70a5b65d94aad411f888b5592894da1e4486a0d800895 +c08accb0c9b8e0f18c0ded81be332ce12989c95f451c661496fae73ed7f0eced +8a9a8754bf7778ff0b4cb4ba16c67c9a905e781ddbe16bfa57462ccb6044d891 +83d761ce58941024a403ab718764a1855d0673d39975a286ac8b32f043176f85 +f2efab1f0a0fa4e32ff159be4f53292d5e393262e9f6404b6ed6349ee4ebb62a +53dfe5dbd2f6b63960cb2bbbfa89d7c66a44b2cf5969ee98854cea3e04b27c19 +f4c79157311318bc975bdcac70548ace6dcce4d71e506e4fcf2eb115309a4444 +f76b6c271017a02953d0ea0a2448aa832e89ab0895bcccc314fb02968cf754ed +3307f1c59306eb773d7f63f7b853f0ae71093da716b6c0b8ab469c2371c26c85 +193ef171b6c1f48c559146d1989af1700d9d08e3d60ffdf548d5cf7a8712c75d +24ad4dc445f310b625c4a00e0879b95a2699189cbf88fa7d2c3fd191c963164b +d363998c215e8121fc3c44a6fd4e428b244a8f2c08b3b058220bd3a83ecc4b12 +24b192d8972430693d9692a045df6f8cc8e04829a1ad2a690cb876c8c72ef8b7 +d04a119430d9882aa7b4994581ea9d846970e80f29c4e4386e95cc74e60d1aa0 +e0eb8d5a9b018dcb3bdb9fca1605efebb39bab3abdeed7585fb989f8149db2b1 +22bff8090404c44bf2da1492a697454804b85f7f282f78ed0df62d59d911107d +524f6db56e00f897c58015f399bc82d4340a62025c7867c38f7063dc4012a795 +016ee4d90f14c9568d5e324e73f6b7c57ee5f5375907bc403584eb44a4e33c4a +88435a399d72307c46d232ae24b3ffd31514ad891b7af711263d5778f1412db7 +4b8302b179fa8810340f07fc9b0acc27c06c915f1b45dd1d4d238e00796d937b +4539a8386a42d6d73f66bea6d8719d057d54cfcaa282c4f06336c05285f53667 +8feeae08253eb094aa8290c40ad00bcb7e1ec20cc99a0ceb80f08f8f356657da +ba56829d869fde7c4645559f9349d3371efa44f58bc36aa493d9a0624b5ed4fa +935703ee695de66e687f27e1f88228261eb8c5a42a6c9b30eb45227874f42fa6 +aeb66ec01d1b140af535b1e28d625b1849d2914cba6545727125f739bcd1da1b +7d1fa4b2b0e6db67c549e0e2e52953cd3a240d3eacbf623043d28b119193923c +94a15f4773e0c3c974325f608d0ac0015cd450c02118fef94cd39341b8b1144d +9ed9f3764f3c7796bae60881f6d9d84e76fc18ed060cc82a1beba6123f05ea92 +9a3f3eb82e2ac1eb99e5c6ec65a9cf2a4e0b3c9d55816779edf45c429b49f553 +f0ef1f1c49966a822920230d1a4dd6c05e2c676780ad7a6cd325422d3fb97cfb +1594f9a31f0730c1c811cd0533671940b3dca7a70fe1c1a79cb4d22194a7eb83 +20323cea558fa1ab48573b4d56fadc9ffc911c8e94680985b0f527be4d218233 +890a06787f21b60b459b8a712eda9797f9dfefea8bdadd077e56ae6035fd5ce1 +a405b543538c790b0bac9c7586d9677feb4518aa590e4b4499902f8afba48386 +908d301b8ed6b87ee1f1ddfe80c37eb0affdc1406617d37613b9a3e82694f7b1 +60b2d43483a09811ea5f50cb559022034d9726c0f9f80b5efbbae8d1dff34e34 +ad6a03f4fe2396b50560fb8a9e9edb2c33f359728f2ff393da760f9a50a04320 +916a583228be053cf17a11246d97e2adf68891b73cf607a1c2705f9066408137 +39c09fe101bbf9d6f0be4fea0b469c47ce6bc2ab1df3c5123f3693ecd1e29ce4 +20f76b77f99d428254f8bc54f0cb95ec02872f83677bdb3aa42e6ac247df1a65 +9c53f63c779b4a2d8a720818033395d47798594ae67a5d84c4505697991830a1 +b244d86dbdcb1b57499332ce0c7c2b69275d043e5be094d835ed3058fef037d1 +2771c26dcbb2da45f3cbf68f219f102b5926200726ae55a214c5267b0ea374de +41c46376cfb6bc7c005fc5cc803822982133c604261f3a53c7f100fb43638195 +5f4d544d99e3296fec2d65b9f3c40636cbf6f6225e62498320a0148dea171546 +6ec4a4a6626c2d69ade49abc9856a5df5d5854aeec16070750dd7de29b8b6a30 +63aeb9bd772f232e80080f9eec514e8578ff7a51f2d7c083695c50c679130a83 +9708e9e7111c6d8abeb055502ab14e0e4310676140a79bc88a0cd652eaf497df +e92d43ac0bc724892d7b44926852030ba229527177d42f648f829a77942f1181 +2aa4688d4953c18b231b0e016441022450b6a4efa08a10b550734c2e7794bf06 +567fec60c62d0c159025dec3805ee2ff0e85280442f9cb14b5e6d2cbf2035153 +b49ba7836a372a2c4a4173e2b63fa839a368ac7896cfe0e3c8b131cc4385377c +b4ce47bb4fc50e84a24af35342cd3356b1299d421ef7d172679816d7bc8ec23e +e778c76e59cff801a01bacea63f46568ce5fdb81e5fd21f9f43661a9f8815df2 +58e2e9de4b22fb8b2588cdb3037b5725ebdd76a50ebf6afe36eaaa072aabbebd +0c6adb74468395b34b84567cfa423b19deb4bc67dcfc86345cda9a9f511ee834 +a17ea4349584ece87b4fb9ea12718c600a1122c1096326e06e193da1b32f9945 +3a40f5f8b37245c99e5225c6b75e1bf9af0fb5d0b522fad58eeb2d6dd9d63ec3 +d9dc272a5a80ee7626651f9181ce39fd8717c870dd9e84ce9e942e1713c11c6c +87acd1b3415c15ac0b34c24dcdfc59acdfa56d5980efbeba111a4e5693c341f8 +613d83b3a0828d48ea00487e55a27ee4be7b93c30bee530ebd2bd0c41e280f60 +eaf6ea444894e24af55e04c7892dc8860d19dbd60f157537e2808d2f561bf869 +143efcd8a7e3e52911c58f2148fc2485e3b37ddb23e933b074638c6459c09e2c +29244a49f8e7fc86546210e7bd68b966e67333b2b527ae20180f8af858a1e2d9 +8f21bda6e98e02f310ad7960411eb89bdd97e79751ce5cad665ecd7e7995cc6b +18969d13e902252b163eb346857d6b091c1f8e5f7ac76284be6eec4748e92c68 +4e31a333726ff7d5c1fe6d9867814781ccbdcbd1d270cc2bf014d8d1cce6a8dc +b184f18651a2cc94975385906e22128aadf419672cc862aafe5110fd9cb4a028 +4f7413e4e244638660a20968a81ad923eaf27bcbb2aae3106ebc5050a69a92d3 +483e3ce8e5ce69f06edfe2c6a1ead8522184f4beff28313a8109731fda4228ff +e3ca429f4cfd68035d2f73667bf0510135d968fff85cf8c516a09cf60bddecea +8f889b3e63bbb6ebd2ef7ccb0db00ef5a92794b162c82846f7fcf3e69bc6956c +5e63776482c6043bf73c986f1f18c6abe32c71f1a4a74f29e9fddada315f5ec7 +e4b38e1225ae92ba3dfd4746ce74c1004a7c2007bc3a95d0bca6eedaacc05078 +ec3a6e32fe37b6b3edc1ba46da5eb8bb981867b64404805dcc91b4b5e0b527b0 +be53e79596a7db573edd7f8f913082e0ba15e74d44ba59f89b0c9d46fb34c2f1 +25ce2d967c903debbdf67040af8bdae68ee0b1e0e89d79e9bec185394ce531ec +8ff639e1ad00caefc9fab3880fccf55dce1e3937860b25a47aab8fbe4376f854 +f0c983ae950bfa5b53ac225557d28dbef67a89ea7571ddc8a710756833bdb5c4 +30ce1ddcb86623a82cb4e1be4ffe6b777a0a8409813580b75a89f6a8c65e81c0 +168dc486916be4f40cafa4cc6b1e22d553963b2449e00796e459c57b94e34ed9 +5bd4f1eb9798dac04521d031bb8eef565c6b0740dbe50f0b23fb1d799fdc2f61 +3f46ccdd6ff1ae778909d8998598fb796e9921069e4766ed35a4422782f62338 +a03acbc0a8f42c0dbba5917d7fd0bd2481e1835c660ceb5f2334acd57d4427d1 +97a82e44b0b172ee769b69666776597e018d05db7161e3662e42e0a1d5906c96 +607ae2ed6447cf857ce0e58984d8c363a3a6516bf4713c3b23246232b5e512d3 +9d2c3e32c33408c03262cbf5c517772ace92982b59db582ff69a3ff6c0497405 +8dac147089c03c44bff3ac70e685939ed4c1097a0cb6bb9fb399c5c0950f6689 +5dd9f05c7d262061813eca80e87e2c15a266f5be420796d1493ff3547db70f66 +26543b1ae2d6fa431c5623191327118c5eb8b331ccaa0f198f062c51cfbb981a +dbc442937f63c8a0c179c2c42d572564bb872a2e6dde8e7d680372b157e840f6 +6fef984b009c671bbec94d3446e85579806b11586cdfefd7e2bffce117f15e11 +f9f47bcc9e390595b06f7207f6457cf1f775f781af79b5b825dbbc98e3858056 +aec61f1d9210769e2761f216f01038b24422e67b5c2386182a4e9382d1f345c2 +c6ee6299e4e3a784a4166183be9c2628afcc27c45ca0391975591961cdd718a4 +3c3d1b85b793b5f3a8b6d7590daa27eb6e73ed7726d9719b43aa13e05ea7ade5 +ccef5bf1333eb7880311869e055391412a9f09b676ec67c994783d0be74cca70 +76424bad7f2c80f031c2dcfefb6f2c8e352d2f41e010dff7d37dd6b03cfd207c +6308d43432d33a1ffc94b74248b5db43f044764a865cf2a6671bb1f99a7e0df9 +5ac614da6c4a8d2f8fafef2fb5358abeb8cf307e0a710a4d3670de75e0f19410 +3062037291a143c03375e6c1fcca2711de12aafacdd5c071adf22c86dc240ce2 +d5182701ade04a8a1c73144012e2b88d4d5621e76a26dd5418f171f8edcd1dee +3bbe3d6a357b75a217a40e79545113fa2ee15ac0ea2a94b8abdc82e7645596b0 +d8de0966693b23183fc34324b6b7c3d58dcd3b9a6fee2df7b599ec03fddc0aac +632305776c092c7d45c8e64d9f4c4d9342fa55f9777ebe941ac71abcbaa94a0f +91ecd9ba159dbaa6ab418c1bdc3580728705e782b6259478a036df71d56cd481 +1e5679ec3fe59432d6491749a9653ea2f22a16cb93a0762e7f2aae8fcfdfb43c +fee053fd488746b2af285ac480e7830a0707adc87161595a5cc5a81feeaae5e7 +64a73af7c1d7e8c1dcca93374c6dcd57d0d31c479b3e89ff4135e66352290dac +86d663c53d9b2f4479662c8a335b00ff194e0a29931552a641510bb9b08dc991 +78a63331f41b7a813ac7640ba77d7a82d9f9823f75c01175d49d2d357b2be420 +b8137c3821f260f3dac79818a7d0b4d86d257af7bec5fed35f157024f89795fb +6723d13bdc0f41a1d16cb2a232d457376acc0e332fbe5b36344fbdb22ca8d7e5 +660a86f3902f04ad8e1685998888baa9b4e0a2c064d2b63cbbde79914f3d8f52 +059ba32a5f541fed91ab69b69ad53d045755270345d3ce9916488f75bc83e7ce +041b96eded251aaf6abc9b68b16da135f86c74556394cf9042b54cb38784c548 +6491c83043598564ca6c64ac7e11fa09a3c3887fe20d9314c21ad36136e6bc05 +561c0c1e9be70079846939b84eafbb0030f4a9b0cb303cbcfcf16ddbf44cf977 +7f8cfd027bad28fb461b29ec10abf2655341f0dd3950a508026ad4031f3b139c +1e16220521c36ed2f7a0e11780dd8982747af44a62bf13bba9eec406077238b6 +a03acfc88709d33589cbf6341eb2d1f3b096e515efbca9b6c1328d97cd840dec +e341741bac9d0ac07f5608652af7caec833adff0e09eb728588a6da3e3fa8038 +b8c1f4105a5fd50dabc7609007ed1ae39a0b75f11772a452ca7d0bf856e0c9f4 +fa0e98d21df2f47924528b6edaf372b937d3fc9e418b6e5c18058f93d5bb0e28 +a2b59dfb5b5924cb20ba6aa4a5e5a1239e864c9de629aa43543ac2eacf89f6fc +cac316215a3295ff05f42bc41cd8504f33326a3f1596c63f15272c2484386544 +9ce9e479d5df3214c91b9ee0fa94da29036912a6b1f2b8e240a9123a6854d84a +08f647bad14829aeb65a3a6fc8b7cc53723b992db9a94d8057c33c369b401ad7 +1ddbf2078bd8ab303b399002600d5eea4dc469535562e1e6e50366728441fd2d +35cd771495ffa169ed4cdac01f988e7ce5c7d28f9dd0093bb95aa97ffb30bc6e +dbe2f71fd3e70aa1e2de7cdbe96181e92326d26a7558b1c1fd0edb58c63c51f8 +b1d741513d98e06d3769d64e1a11fae44088583ee7584e867b9492e66e9c7114 +3e165b672204d444aad59893d4212860f074d1c6079a261f6b3e7383c57ef17a +bb600552eb518698dff54a48ef83ac82ad43534c07dce6e9e32078b5d60240f8 +b10d07d496f7b7de76fda6a20db434f88428dda2c5320a38836ab84de94645f1 +c511080a50d8254c0cfb67bc3ac2101c401541a34959107898bfacc611bb2962 +f4b3d1ba8006c28103c2a55286bcdba75a3537f81e7cd0d02a9a3f574cb6389f +332983f4cce98c6d53089588532402a4b8a1d1427d550c7015e5ef584272160f +a044a92664299ddfc990ab0c885666c09b6f2d6240db9f7dd3f1a53a6e312a80 +963080a78e62169cfc1a1a7a329ea2998568d9be427b7c69a504e56a7920246b +1d12fc87e7f797798b01aa76fb34594749fca31041373c2a3e1bdf066c839925 +fd89b479bc991372dedcd1c4588f1edc25ba46b7f48c93d13ee470727c9f9f27 +dc942e55051d4f73af8ff183bcd232980fa907def8f9192c3397552070d0792a +0e13f3dce6f14c904992940dc66abcf4de5d31be037a8d913fbf6f0a71c8a9b3 +ae5962d0e70397aef6d42d2959bf2f4058f4aa2226afdaf9a24f326e37d3757c +56d590dfc41a5a2313ef3a460932e71c16229a152a36bfda828d9d68a411d64b +24e4854cf677d412d22db866c7f70ce1514684a9a09203572a0b5088ce3d2652 +b014a181389279bc373f982b2db5d6cd9e6f17af6dc1ffa3b05787c50ff2b9c5 +21509b9ff68384217c6c8027b93478e31083e71b91ac4e8de22352ac08aff22f +e7821600af0d1a269bc56a658bf7650187545a1ff2b85d73c969199277a76dbc +5f1246a6a7066720b62310321411be865fabd80cba515d52a7767fd70d3bd0c3 +7512150200b4d5e8d92548bd3f392c1f16a55ae1a110fa2bc6ebacc5276e6983 +7dedca629ff9d85218522e59566991ac22a584af50b6155873012e623e64c0dd +9b029546c73368bd1a91a1365a3082b715738d2d470b4c9cc0798a9d09756157 +74b8b5fe0fd88864260e3af1b2cb01f3cb6123834a468fcf1de1f1ecf945b6fb +6e2eac258b0e67cbae19250eb2ec927bacde291d4424d8a5537bafdc2bea300e +3fb2eb614a952717fa35749dc90a683359dc426d901b4f407710ca529f6d100a +143cc3264586dcf7aeb6ae1e0a38ce7efa0bcc2eaba937bc1d924c61fc4e1214 +f421cab4a51d223cb75fb13258fe0cf3001760df8081e5d8796e329b2219c773 +4ba75cd625e873f19d07dca484886174c089c1a50482edce0b33e297980eca19 +7e80f95612562f655958510bee41fc43eb6f3a6dcfac20af5492449994016664 +9f17f649844b0061a2c7bdfdc3d2d8bbc0decf248382e29b34ec934c3be95aa4 +4d7ad210d2f47c986bb74b162a8b646246e7399dbf42e744dda2aa4814f184be +9e5b40762dc25102e036833f22f02ac701bcd27adfd7233ecf8178c4406372a9 +44b2afe64739bec4f3fb782643245a7c76a541997da6ab9273d73b506775db1c +d1009aab2289e1bec86bbb3079e20b0814a0dc046c557d8d5d9a04fcd8deb4ac +76bc3daaeaa95012770da4d96120e153595c2cfde91499ec1d3371e4f662cd2b +4b3becdaf3d3cef3c93e786bead46fc8b7dcafddf067e43571cfac08e2c2a94b +33c824176159bd0612cbad0ab9c87e86ecc7e6fce0e09ac6b42aa81cf1d216ca +5fa78b5e5df6ea279a8466822c15e9c570c782dbedfd2a2b472dd555551d7e06 +6c582844169e4ff992f0632f3a5d84d0ad97e5e0c87471714f87fd02f7470af0 +f64820292af14a29e600293cd53e9a0d3c2e4a10386913a08d3aeb81830745be +be651d33c4dc3f9a362b295a9feeaed0a2691659f86846dbf96fa73d14c69fb6 +2934e3e881ed6ac09db98bc4d485ce9b190d1aab30e1bb2c6fac242505c68e89 +d796cafde8195ca0922fe315295e9644d4aed6b4f2a0219784b3933b7814ef25 +5e37a309edb100a6a9484778f195f1b89620e7a46a719953fbf11ea504575842 +9deed1c4d9d9eeffc4988e1db72107ae09873586256168e00f74efc803245f90 +7191058b70b823f06a5728d4bb2cc329b16b1622efe45898da9c3eeb82a0faaa +ceb67820fc60ed2f8673e089ede97024fd7e7a4c34fe53882f09aaa8fa14d5a8 +ae172b4a20774dba7e98bcd626b6f45ff15742fbb2586c581a44ec7197019e2a +2a53038e15af2acd5e33fea4f76617d0bdfa83fb7a8ce070abbf357a394c166b +7991ccfb463e4178d4d4e92629e993639b9f2e80d90d0e040e12c60b563426cf +0c5444224aee42c44f7dedc06aa93cee86fe7407f2f8cb11d1ecd71852eabc6c +bf25ce66d4776da60f4daeebfcafa240620e9b261b922ffb670d53007ad659ad +f25e33c2635201b15afa6ccd81b225d9d59ef78e6f809d03f39b6b968deaf8e3 +b52bcc1c9dc6ff4de50d039d98d0b36773cc230153fa438f8fb4de8fe1f0a3d9 +548ef3078abac9aa74bb499fb06fecc78db02bfe48dc441510a393f6805613f5 +a762368142cc9b1de1163bee652ff1427f0b81836d42bc0d50e70d29846115f7 +3299bec648eaa5afa960b13740716767c92e4217eeabf4f42f7773cf08eede70 +c092e17c4be3e18a0a18bed80c2538f53dbc7410e9cb346df72070dceea70d68 +fcf91f821da4fac781a50ace3f2fa9a4d1f843e07d24b906ac9eee025ba98f5c +29de05050c88a0c5e645bb6abb68ac9b6e1b376e32d0e6e312bf8115479bdc62 +c34a9d7dbd3b7232e96e326352c6957e316c4b68befaaec0d8c72835a4833ee4 +e745985eacb33c712ac6639f86959c11d6d22c562de124dc83613e86e9359c07 +a1517830eadd1286aa48f699258e9d85678cfeb425680f630c5090d9528ee401 +26b02bac723e01b5613ef12dc9dc22f5c3061f5c39a3948bbb46c20fe86f48c2 +408bfc9d8b8d6bbe00b14bb86070df73dd49d24db3e54a11c87aae6741ea6419 +bd9a370f71f23a42d2ab67d8a7b01967416dfec9220c40ec6203e0739034e29d +ea00e150ad58da630bb057036216c811a26fd1dc945babf9af676f1bc6f67a7a +f4ff3f67e34677c5c5012de714c8c0fb6ad2cebbccc73f82b0cc4b52eb992756 +51dbf27622056839bb491674f7632c55a7ef67b249e3d695a883d6fc0cdde6b3 +79cdecea565d186d798bbf65b2a420896dd075df38bd54236a93e968b5d9fd75 +cb178a7da86634231332d0382a0e58c800f453e1fc1a83e19d17115037466395 +71987f6a57092bb46e0ae10110f84d1d959c567b67b9603d22b4e5cacdc827e1 +85e5559fed3b702e3f79577c4b4b3ad26fc8e14a326a94e776f4ada16ad544e9 +0b3a19012f9d6e0d3583f2e814648e86c01561fed1bddcf9b3cde825d0a7eec9 +bc7aeb705c5d1476ecb00ae4b8b8a021bf03aed4e7c9c5c6753f04fd87bb1322 +350e6db3ed8da517dd938dec6befce20a854567d0fcf1a339149369235889a1d +70f31bad6c47c4e52f6b2e785a0eb141359d76a05a37bd1c566e36d262780140 +65a4fd366723c4841bec798e4ce07f542183a01ef9d7f8f1979539e84ec241d6 +6aa2339275f588352fbe3b05bbae7b7bef3485b05641ebb8c8e3a619c48f93a6 +dd301f0b108ae77b36302af00e580cae0174eb6d30813e9ffad6058e7e850338 +1e53adb9f1f03d8524c4aad05c98ab3862d6d7cbbdcd7d2d7bd921a4069392b0 +bc8a531ae000b67c7e8bebd6b94c2c79f5303c53b045a47be451a3f10afafc76 +a28360374d5fda8895b79d1f94555c30966e5ad8a5f58d54b2dc4c4c39e47b1e +b3b2a57c8f7aed2ae776fdf4f839cb77f1b2be2d23aa4cb8b8d205152fe3f9b0 +d9002b58fdda551caac65569880995267003437b20cd3a72c3ab3166e593f3e2 +c5399da8ee17843e224b01cbe2c1548d1054a8c21304085b93b95caed462679a +fa228b98a458e5f08435bcc981e58e4cdc310f57c85478e56b186a65cb8ed185 +4e8a1b30ac414152cabcf2773a2a6c296f89fda5f0cb3634288291022eb1e608 +d7d0a8a46f84aaf58929f8dd7097ca83443ce71f56455092d27b22816379eb04 +4930c56449c419e37978806f3b42e97e1279e9e897a3a709dacdd5d87d0d774b +e14672a4ef12ba4b49915c76d4d574d44f3e94a20d911db728d973356e91604b +45e6eb25bc0dd3d285311bd2b01a22559f1e14387c996d531898d5fafceba4ba +0c6b87aaf5f8e82afc71c04d634c782ae7288f397e50ca0cace18eaa1c17cea0 +cf388e326c7ea4ba925331fefbda0606aec1defbee547666002d478a69538c99 +28106f509a53bdc2167903c9e1d54c41b3696e25106a6062c10d945602e341c9 +b50f1df6630a886c8c6f27383f29817e1b2aa326cc85e43afb136fa58ec24dd7 +03c43b4694b403a1471053cff14fbf9b34567b4eaa0b96adea3a5d428bdf8b9f +c0159e4acb57deac8d87597b4ee450e93f682bca0712f2136f8216945ea482ec +8ca99a112e447aab44850a576b69a254a9cfaf86d7cd1c130dc6c1181515b79a +d703f0903faea4c8e76375951b03b924c1079df5ac55802b53cb34113ffdc513 +8201c1fb93767ede80e76cfbea2f07ac0f95f250697ff0267c206bb7048a862b +7715741877e4c27b7a88bae1414be335d97ddc235deb4b95a5c51089f50996d6 +a812c4e9cefbcbdfe18388e75df88d04df66eb53cf3e7eac5fea15ff041ac3c8 +834356278f31517ef1d30d53e0dbadab04bd70f2ac190c35e7273d45a0259363 +40dc1e0b0017a7ef36c4c8669f29f21591e43541f149c4a3b1412a5057c5348d +33b8aee4f452db49b54d4faac7ec9c4eff03bc3c783d901a896fb7533b51097b +81783a016b20dacb75f52bf78dde107172803db8d3a24300aaff61863ac87c27 +f62e44bafd260a687a8cb47daddc2bdb6570669fd3b63b9609c57caad4fc29b2 +01082b752a679423dde1a8c86836c44dba5d1e3ab96676707df07bb47f730363 +cf78ceff36ff2ca976c969cb74abb3f72f693396518e9f1ec0fab6b53fa334ec +741b043045e31ace728698c097d458dc733fa74a63d61f53fd4f45b9ac1880d0 +ade4bad2e774af7ee6549e2824168f0aadebcc069efea4a90d4f2d327a242042 +9557284971dc1f1ecef59b92550929dcc42a3168d7f5df5d18e53837ca6bd01e +003a02c3700842fac98946f6d516ef503be66d4897cf2f138286ee3aa79f771b +4af8541855c21d583f747c294bf1d1016d3e4313b5df8fd2c3172820bdf19792 +428072fae237ea94b4e28daf257d41cbcbbf9c56dc2d964ad26aab3df4f912db +71546ec1fb9dbaef67a4a8771f859e0e78a9f6972724df27f79ded61b92ff3df +4de0f497c50f569891279b968d0567d17c99cacf6c07da376b986299423adc90 +84d4f8e93dead2970857b2c562244f898a59995b5ba464087cb3e2318eff4975 +5079a9ec897cc4dd5bed02e820619bc1edcb56385e0fde4c2ba27fb51a3e80be +9a2116bf27a5a42e2a70487177d1ab878bfd89347513c54eb92abbc87d50ce70 +3e2d237187cc8abeda00f686bca95cfb404053b6261d4795e558f3886c523282 +06adbea3cb36212dd839d26755ac16632a723754890ac8d9a6599d6f2663f2c9 +b920d92da7c773aecbe0cc7b950e619ba5eb1abc667cd354d417995d6eee1b0e +e43f5bc9061b897e0779b023eaf9aed24ea5cec2082050c92e0f30e23ba713f6 +2fe14d9957dace391f05e8370b9551423dd76bb50dc218d7fddbbf235753e1fd +f35e73d4b81e2f8bce061451a2c53e95015a7be71df27847b628bf8d3b682b4f +0ea381f5635fdd2b8e49e534a9c4d50e2e3991a7d5d418c9922774246f8e9e62 +9096c4c4bbbdb0b7fa78877883fe2f47f4570b4188d540163bfbd5d10975a80e +c4a21c1ecd43e211ecfbcdc391869a27b06a47bc1540a708a4e58c2fce67bdde +94fbf0310a60fc2baab83cd16b1c0c3b05a6fe84367b3e46f93a409633ce202b +fef120b0c791a48d376e3707689a186c73135f034ec6bc28870ff0f9ca5c2dab +2412d8292fdca20113abfff496ca34eb7829f43d6e1b51eb79ec9d331d6aad28 +2046c1eac346953e6db62225770dda2d02150601fc66f53f94e9d58b4d3499ff +22494b4ce45de3739f3ed286e421febeaf9e125168babd9b705b51ea733e31f1 +ce295f4d144d86a26bc8aabcd042a4953ac9d61b90e2d4feabab18648ba16ea3 +ae99f53b971f48ce1985c0a02703f1c609b7cc77d551fca1a6dbae9ad7d2dc7b +a61a5e6f8b729bd7623d9c73d33fe9ae249a3b776634e10dd49222cbc4705af6 +4e262a75bf5e60b249acf6d40358f5ead7fc3096342ea25de703909be907e364 +0a1315a1589df358b7eadf394d4b355571809b1e860d96f4d1386b9d8276b85d +6ff051e2883e2fb05c809d189e66bce5465fbe830282a23f1bdf0fe3bbf77780 +8b2c93fe7b69d6156f6ec93cae83bbe9c54638bba8d6df08da9bafcb3d080d3c +775c0347a472a23da6a22ca855ace9385893fa7d851cace8768fda1b2716e6cb +fe875530ed94c49e8c67922ee003911c08f2165d97d8a18f62d040e64b35b544 +d740bd40d8715005dd5469d106a4bd8040fa53cef750287560433965c6656508 +9cdc19875262c227b8ca384cd97047d279224e13bc8cb280f18e163d1aceaadf +d4986a6db5a6bdad04d188a927b6b7a8c21bd67bdd4210eca16dfdef107c8228 +0d722d8a3bb5102c0dceba5e75a5d8834e8f253bc5b9938d5099873e1848b0d2 +76040a020d677b2b5b4f7e029df54650b0d1408bb81824f003232c5e8fa4cc52 +8da2f15b4cfa2fd8770e0ef75a7a82d92fe20af3d5132d00c136a8740d88b7bd +5004d69fc459d373672b2b72f3ca1fbe58a3c2dbe5708b57bb3c2489f28a9e3a +81d61c0a661b8b039b1b7677438906399a6b8fabedf9b25dc024a038574d7719 +cc4686a43725c624d07a0760aac63f477123f7f4af8caf41874046fb963eaf4d +eb027b0651dfe68f224a5631eec6342258f71bae4053cb491c6c37bd9c4c0915 +2a643ca05150b84e2342205415be8556ce7b2f22ebceea680873da60f1a1efe6 +97e3e9e43c1756a243d3a9757f1219ae739579d393d46d747bf36bbea11dc549 +df94f5b12386c770d6927ca29b80eb728d68b7c20438ba3932429e5e7cb190e0 +3213cfe74fe392ba93dedd3b1779fc44c85d9ad678d92bc25827807b607aacc2 +414b2d0d59147ab8e0be0d32f76b95b27fddb2ff275c870a5c441612faa47330 +5ff3ea6caa6cfd284c2349ac9e5d185beb1eedbbe07b8c2a3ad4766142c02434 +042568172b0d3781bfe703b149eaa84fd09e8d488b99aa38eb577f7b21c740e4 +6088dbc4e17d9333a3e387531f97b4ca1ea179952eb33878bcaa465333e1de7c +83616e413ee6e4c5bcc1fde1987a0cc78d279468b9b1511081f6e3bc802e8d6d +78b19dc59990579eddcfaad310e0f360632da25ed5f6f16d560ae7d0175e7b2b +01c3dbd8c98f55f494bfc52b49f3227ce12dc4f458de34b2ad36b3b00168ac80 +85e35caa9ffb7ff60098e5027e32be43790a0dbdeeb8223b692aedb3d6c6130b +b6089c764fa7897b9a36207c9fbf50ac0c481a37096a57da8beadd05bd16deeb +d93fd56fe54a6097c61c1d647f2f52553609c3f936831f4f981862526139cb29 +48a02146d1815d3d078bc3dbd7c32f2167a70edc28b30025ef761cd43bcecf7a +a8ea6619cecdeb83147467c3970c772db2989301cc8337350be1f55c8566d14d +8d963234133bc7ad37397be014950d325d2b67d70232a50fc6a4a064dab0a970 +e7d4e1949f7a0e50ea970934a621330fd477107843bcc7713dd08075127c19d1 +5497f2a13f917c3b7a8917a5e7be2009dba70ea513b405b8926631562a0a8ffb +4bee56250fd7c147f5b515a8f1032564b6baf2569e913e7660098d72eaf586a0 +078af231d4595d67cc0c73faaf4463fe6ca8f94a8aa8f9132106da58d45bbfb8 +3e574f76201cd5ef05d47daa02001a89452b5a8bcef2cdb714b0bf5c36c76557 +7e2eb7aa71d085de5a4f5fefd4b22e25854c21a8e9e8460a2686da7f4dd2926d +3533f3fd3ef0d7cf276fabccf0c1dd01eaf32d788aa6e01d810713bf2d236a83 +4c67f4c69fa9281451c98307d7e69afafe851f8502421c4276061bd6c3790029 +5f72f1ac5d78564cc221302cd97889400b3238c65a2cb820bf23006208c65d23 +9b428ba1a5f9696665bfdf9057d645615993d7f572c6646d710482b9ed62f0cd +4dd6515b31ddc3a154beac3d89c81c8628daf456ac62abbe9de7a5b6062cf650 +4060c23ae920cc4967798b6eefbc752e3baf2492d8327d295f710814eb11b167 +629c496c555117f76309ea311c03ed7fc7f248f7d1492587d0cd5c5ae5e037a9 +57e68d48f4b8128c31dd014ad5230ea69ce33ba6c0c4e6aa1e1a7b3eb2245445 +979a59d7796a059f54c3a1332e06906cd565d21c0acef799d9d8aadfa6f5aa2a +309b296c1bd84c1fe08bae310f5f22e60c9ec7096490bbee14ca80cafee768f5 +7ca0d7a51894b2d52ffe875b3762d20f0a1500adda6a401dfc1adace27677890 +ec2794c07529ee08ff575ebcce496c16e6b36f9a9beb924f95c4566ac092be59 +1694ca2a76062112ac62b1360cccda1c5020fcb4f400de7e87b26391d4177341 +c91c4633b878ff121715bdf6eaef905841cb096f66547d03aea8d8c66dc7b603 +9b354bf14f3bdb74184393f00dd5840e23b08653d045f18155098fcaefaaf8b6 +2c548f4a756994f8427598ac8f68d7304ee37107738c74c0b1c911396c7de26a +3f33dc50809c971c394d2846208999bdb9bbe252ce67cd7df343a4f0e108623a +837a18e3f19a9689b823ede76f782b46d3635d60e4fb66d7a672b973d3d14262 +dc6e05092fc79544b2d82b03a089e8314c4ad8a64498f1bc699f58983c1c5087 +98aa563860b833bcc7c490b0eb852d2ec7ee9d9a02c91ae1e94a4f5a94688492 +05bc1df3e49c6368463303c81ebd9ec0742a8374ddbc39da1ba8e51d1e074e05 +1b3311fab5daab09de62bc9580ba9dd337f8c72fe557ae91caf5bb3c1932b544 +04eb6a55d79892f70331e72acb7093b38e7327c336fb6b4a6e6cfaf17ea978f0 +04b58b0c8a04b0c8806741abd1684835fd5a1a7c0345d5a2387f22ddd0b93269 +8559f7a4b1170e98ca957fc9c903cffd18fe9b92b4b32c508e53efb68883e042 +7f8b646afc1d1c597942e79111d571be9cec5221383f5f6b03193e0c8eeedd50 +261b9f57e594b795c3c7f493296e9a8ba1f4506f868b8502649d7784503fd253 +c5e99f3041f2b4cd9db715728f1e692ae507e234e0e8a3a8f6c732413b90176d +48e910abc918ccfd30a33c872f9efe34a8944f692f5f770c027da9bad3f65866 +2abeeb55a57dc13c71bfb71cef2886453b43d9961172723556639642ae281980 +50fb7ee850651738a68be6420eefae78d1a20817ed96dff413656bb4a968a70c +b9fdd1e9bdb2c0e1dd5d32ea1b50cc487de1f55407eadbf2b3fb9c03b64c15c9 +5aeb67cbb5ecba0889ea4708141e82d2ace7a841896c77ab00dfdbccfafa1f64 +61abe7803872d15961c1c31a6b1ad50f120d555471579bf02399f815988958ff +97d0132e6429769ecfe39b270a07ffd1469246229cbc1450251e71b1beb00886 +35399527233576ead74ef01d7bd7bad02d951e93b2e71dd1a82c523abba753e0 +95af0c249ad1f5d59f5c95da00d4eafeede3a093e4cb6e108469c6cc80fdb8b4 +5116c29b0a9a02a48f6f77115649b583ba4474900f69e9472ff178e41a33842e +78b476a924c14814191a61620e398ee3b48ebaff1b3635edb48ad16d497b3362 +ca9fe38284e1261344b34dfa8d46e43324b3d3b21f31146ef95c2c7c08029e20 +776474fa622d5f145ee66aef74e4d42b40e981fd5ca36c6697c2655b2183c655 +9901a8f632beaee841515da5956eb82b341d4683c37050ce998df19480662d7e +2d09b430b0d79441295b2d599bcb59a3ccbbf3333745e509903400c74b30dfc7 +7da9616b21b268b07f65a4a32d878feca9852a78d43e341e893238a2b2c0cf1e +3dfd75592bb9f15c4e8653dd6e8aee0b772961a9e54696a266506ae7146947f0 +ea378bd1ed22b391795bbe5737994bf9756ca3019f42a032435f9429eedf2d41 +5ff27dfa5aac62a418667843ad3995684018c1b1de4ea68848e3762818e5b80e +0d5bbd9dd866753537ed7ba8ec145d49df30fc8d293d69e3083209754a4b425b +99e39da47bf27152049231f60dc3a849ad6a21b86771e945877cb2ecf7451261 +b5943f02252618cc734cd0ddcdb312ab729f35826c89fa9420fb1ad70647a74b +70474ddd8ae200fca9317e1c50f9cb68de8379399bfa7424e66311c9d7574746 +e19d44413a0c6149f28a340062946288f9f78b1c2b6f5233885e6a19cacb78f2 +31534202b24aa659211adc6420b95b17b20226e74e9ebe01948582b8ea2d3ab1 +78d5b4ed4c778041fc17d11157d5262c90571ff706099c5b06130412490833b9 +c5267a7163ff7e1d45c89050d6497d097826f5b26be150ddf1ee486d232e687e +453116f0b6b7c93064207213540cbbd88d549b74dbea59176bb6d7f7712dd598 +5256a9273aa32d1701a6b2faa0da6d21356be95968dfc03221b0ac65b2b22287 +90c3cb64ab2a65909824dbee9b5399b0c651bf5efd603621b94feae2fde41963 +c266e40755ca4266496ece2fe93c4397d907cf8d413a230701e7045cb9da1d17 +f1a00e00ea64b45dbca755a454a9fb232a8b4b80d6032650231b9fde78ad9664 +71232d9076520306940852e529fc46d83fee4d6fea15056cf42fafba1e8482db +6870f41187c0906484e8996738b52a946aa34dae017d19faa08c86845a85a543 +20dad4f4002f6625b84a1b4b80467d102c678823b676df24c9ca802d568ccccd +615858fe6517ae56d631eba96da6b71e0e0e7b71ad9a9483c61574e23c47bfc9 +a0394b4bd85fe41c3a8bb60ee8c6f788017ea90ede0a70cf82f14056b24a6c3f +58849d613f08ec3ee21d990dc4fe661dcf4b3afc8ed34ec2ddd279cfc2cee1b7 +f1929ecb72d10752ea012342923450110ec1868292babcf755d0b393768de27f +702fb68daf1154e8855a89bc32bc378580ad405a05cd12b35826a9d88a3cfb65 +987f364b89c30340a2b1e25ca29cec4988afd940c1321d12cbd50eb411a29a65 +657b2e7fe642bd8c90cce146b9d216b7f87aa135ffb9ccf0fc8da1146bb6f03c +1cea3f7d532fb572bae2db81b7f15c14de973f6bacaadde5cd0333e71a9a539a +8356038f876ece85f7e6b2d057ee8d48626483ba054f8a662991cd52fc317738 +2d029b04dc44da269de8be9b025f7929a34ccb6efeef271232894ba8c837698a +fe6cefeb4c1ca0180215c2adb029986953af902ba21c7531850ca7ef798ce22b +3496988dd07347e36f26cd55db9caaa73c5ac260256432c9e0f6e3bdcebd81a6 +59e822ba4188ef395f10c448c4c09270daa19a856c34f5cf0f91a74ea962b4a9 +5459408633966d6730b85c54e2de6ae317409287414079072d9422ff38db6c93 +d37994e7ef1a0e65c88019e729528b51ad23bffad9ec9954de8678f03a307c43 +0c498a7c16b3b348947e25a896bdab2168bf3119b296a327c2378904045e322b +9cb321d23d74f470fafc828404612288252f1701df6c743de571e2e876cc2672 +23f2aff00d26f1155d6d41a3b08322cf8eab002fe47f5265bfb67a405d4ed77e +89cbb4a61b54e796b8f3cdf388d5418b96615c1312ab7d4e7deb1aba8984e3a6 +76dccad1bb953569931f8c26f7af460c5689412648cdb7803f1c93dd452a8ec1 +6c8e3e6190d558919b855b7b5db34bc42b992ea155615cab202009a96fe13363 +4f649e77e4268cf651a74b8c8c645aae6dff800ad17b194c0b883867151c6230 +dddfaf596c2639a46e6746fc3ccd1593d432063ba27bf2476bb3ee610fd7d92c +c09b70c657a8255cbe2d8ac281892280d5f19fc27b5f0e912eed9c38007e748b +079ce05131c3956dd078c0846963268fb4dfb5eda5ee8894a89920088f721d1e +b725870aa43e92c565d10d5d796cc04a114b5c32e90c9c7f5a9b5d03d894f96b +9ef0b123b9f90d1692be30515757e54c2f9e073c16c04587363c1e9bd4f834df +4134a10fffc0b5960a83c4f75979a14bbbbd52d4d4b5eb75901fd20a36613826 +0d39c035f3144381fb6d4eaa99953736614d1a46fc05f800ee66ca63b1c6ef10 +673e4faec2288afbf5cae62b7f6ab8c80e96c8cbc7b666ebe78e68d184d85c4c +d8b92adb253aef17ada1dcb3eb1895047b93163050a6f3c1a69a7935a12244ba +cc164a780f44dba4c432f913f5b649529721b123f4d6816ac8f1029bba12f442 +935e1b03a434297d33e03357e0a4a56a10f0fc2c16dcd060cf858b58f3cdb5b3 +4f571ca4ef8a7a22bf7b54c35b38aeaa6548be8a70027994834ba2d55b4893a3 +c70d9d44cdf6cb9d1d6b92af027a0fa802f207d34c10f8c4aa3a2cb64f8817b5 +78408cd8f98466905ec58a8df6cf060d6ba17235dc6591e2ebf061f5a7f1bf9a +7690df303dffc583b98e8765977c887e776814899b45feb0f0cac642912d4b81 +e51c5ae48c0cdf9024cb96f421d1b7ae45b5ce9d41d9d35c2b00416c8b9c032f +b27680c1f8c1e55d9973a698180a786b92fe97c1b0a9017e37b51cab3f388b2f +42329ec38e452fceaef2152d36471573caa830a5c80eb0ea73c1c7161f7b21b4 +cb7d3e55f29e36dfaa09c8b3592fd8afbb64adde44d8665143ebf1f3afa1a5eb +a16860b8e8f52eda1a6793be62ee8a682a1dd30b6482a3188b5e6b8dcad4c688 +98e39892691434d85c42922a035c752827474e01cfa507d0c434f746993ed746 +3d32f530ea324bbe0ff4a38581296788fa2dde0db5dec9666d8af2deb947f200 +b617a83e84114e684442fe3360e0a66880f3a87f1030dead88eba805cdceb8fa +4b110dcd71f720d93de7c0e8122a09081b9cd1152dbba5f0411728ed87028a21 +9cc36c72bccd73e3cd517b9a7210cf1f3c719e7e23511b0f0c272de69951e0cc +c264387948b95b3fd7d7d849947117e1f14bec10d2d718374eb09734709ca60e +c7037c7c3c5d1b9797b9e4c539733fb69fe61cc569f76b269780fe9abd497f54 +4d728bea738a4ec3e17aae0ffc36c2bce74cd24bb8a2758b9c8554d92a64413b +ad5f35aafdb387b28f1ca329a32d8d99db75121207109e6fba304fc86e027bab +b631f93526be28022f06af5126cf0a69c7de8aec8043aff5a47f6397097b8dd8 +8538bb33987fbdd064558e7634612b8b2c22390f35b8096fb0674fd62084d7fd +15d98b22fab5dd19f9d222a2c4d2573badb76db8383c74b4996cb068ad4856b3 +a01a8f42bda0501aa7c317c275e050a133df090b6274f9beb1af87f8b48f7b03 +64bb4e937369972839448dc459dbb463e8df91e0fc7fb909f5a423ea9aeb2f23 +0d24b27dbe955c4b6c3a9d22603b42c6c5ebcfd67c74f915a47ed1b762e10738 +b7f181feb8e6a3b2b764336966c6acff5a2e2fe237a4dcd64b7dc7b7dd33669d +8dea06bc3c1ad351e2305335036b8f109fece9e30cde9ae2f472907780dc1667 +e34cc399da1ae24fb728529cf610c6592df901ec9a7a1d0c52ef3840a99861da +b28412b3751b07206391aa61c33ca87d4164876b92bd6d27de24d6abe4af0119 +aed63c73e43a696bebc21252a6c39d5ecdf45042d230a583e177b1e41167ff25 +1e633941dd1808f8a4436e663197fd2442e085c596d3fc12b654f94f05453599 +e7957e70a965c87132bdebab6eb857a450c23d36538da886be9785a15ed6a2d1 +64dcce81504e271f58101d36257f8cb1d146c5dca3d00963d245634ab074b95d +d490b8a999b83ad4e4fba3573858fda34ef4735ece350868c4ab772298e22b6e +d78e9faa6af70f400df8c6777d27a205fc1b40b26e9ebd72e37a18948d447dd6 +021aefcbc2ab7939928daa51eb03d66172d0d4df7e01b032de40c3ff156e46be +28fad368241ae811d6914a3cc4ecb640531adc026496999ffa429093a40615db +81b63de704aeb0ae6363559a0b70d55940bfa22415edb9239b27bc5ef0e4fdf6 +3a91764ca5dbc491df84e07875da4814bcae9b715d3e4dccc55cd83fcfd63696 +c30648600c986bdf4b1f00c1334b1403670a56d0cc8bae15187e1f4dc8082eb6 +7d85d9413fa5bd3215c6af814cdb8c1b7dc579c6f8f2bb11836a5760021c0fe5 +e715080339b24aa017ce4aae8bafa417f889c5d27a285004429383bf4cb8f65a +6bb72bcb975d903020bc27752c7e40a2d00ea67609a04b125da0ae443cba553e +d3d7bed8408f3cf9d22176f96382fe832a85fcdc995663c777ba80b9750000a7 +921d3fb174ffc454547a90a74289c2a5b49029b3e7798f5587e9c646ac23f2b9 +254b151cfbab3472eff67ded7ce08db90c0a9a858b3d58e7b185212a0c45c1d2 +ba5d5527e23860ff4a9c985f74efa6c70a749206addbd93278965d3b6ade68ca +8e2e9ad4974a836fb78836fb95e4fb7dd7d6c2b5423334aed2644b09259367ab +8a06c57a99803b547e3becb7ccdbba446a7061d624a8ed0ab1f86740351ffa61 +2f55ad009fe1486418119f3b9932014cc92ed1f13ec433c62c3a004f9fa207a8 +da0dc1d5adc59d2268866b143868feabd83a7a27aa68c1d2d31b5a3c5b2dc1b5 +6f65f46b5a3e33c9d2202d901c9eb2b100667903493999f0a23bff58c6dafedb +7f2914f65e1654579b4a7df69ee950a223b679161f4455cde3d275edb6e8977b +5067a80d040e349655f4a3a60adffa2a9e56a4c0a3b1d4475c29dbcb177b18bc +2c755214570988ebdcce1d8f54c59fca0b0e19116e6a2bf951ee7d00b3feca8c +bbfe7c9914ff0eca51ac6273ce6e8f5915eae72bb2e3b8c67635da114e783e91 +57f1ea86d828fc1aa506e0fd7843bb036aea75714c5638793076f0b87de3f6d8 +8527a8b3adfb5171c076ad8fc47b68f186af94a0de3b7badfa167cf09c7909dc +d9649484238f6be5c2cea6b58f37e55e6aa1e331d2bfd64e5103841ebd324f3a +f9b9d7ff7dd9934a1eca605ba4a38c926c654d0c9ed2ef59506fd93f25ee09f9 +ef6383481ff4f29d33098d0b1c3675a256d924c8a344590fde46880cf9c12128 +dbe09c32735b56de14dbab2957fae3ba143a07de4b48c25b399b0e77d537da00 +f0fe4d154f1e9a09b9c4bb74f62ae698fbfe43bd06f038089e8b1876eb07e249 +533f9aca9fe1eba0d89e0bc4a0f98488462a11f95f6d77ee6ff20508293d8e71 +cc81d9bc80450c2c6e6a0fd46b8a24aa263acd703217ff2e19e7c61d7d1200aa +b8c6234e397ae8f474f7afd9dabb65cb6de25212987a8530dd5ee78aeea4226b +56fbc58fc736c7fe3eaa7a842907cb4f4589814479ad2a09bd1e3bb0bf575d15 +f0aa886a56e30b5991f7064d4b298c4eeb2c6a33a7307014315e3dae2ff72581 +283e0a607a7d8c62766a23f42c8722590a784b34f5e97b9707bd45fbe3b08630 +1df111d0aba815c03369f7caf6aa950498bcd6bd02736bf70970525b70c023eb +11ef2901a01abc672153ddeb66264d59a7eca681c602e1b4a362bd4fe09ec788 +2e739d4c3aa9ac9446b2cb7da376c4617cdf9fe436aab026d2e23c755be7ba9c +fb61013c90dd986c2f90ab7444661c16ac4db3a8402b03450173aba644a61e98 +99d1cafa06a27e428ecd6307ae89b1747de0609ba95f4d882986a904f1c1f3bb +da550327d637a29fb1b4b23f5e08772889d27bf3cb461144d0f01db6699b2cc4 +8c2a7cb91090432d70fa673b7ade79f862e9b79a94f06405c44c2b0de8f233b4 +8080e440921cfabc9133916a0419613528f04b00275b140d691f4057c5420d49 +a1e53fde0e926a60613d1168d886ba0e2d5de629e212cb9b8b4e2253a7c7b531 +8287a0fa5438528bd414e679d20b92d0ae2ed58d2c6874354ece38b933a1da35 +508e5c4e63e62437a77a443a2a9ad7044d63f36c23b5f3a2ab443c717219e02f +dcb6a4286f765477eaae1a18bb63c3375fcd109a953a644e168f2ac0e1d85f91 +3d62b34dc51e3a134aa30bfccfd6178cbe7dfde088a435ecd7b310f5f10a5b8d +9387ad196d7e1b37047670c8ef0397cd1f380415de77419a20ea5349ce908027 +a8f8d1498f5bffa712690e4ccca077a452c902fc4a9b7c7882ad7b9db0d626c6 +7def29713c25d7ca466958350d56aeb8dcd0987ac05fce2205081d301cd3e601 +f386f99eef9857fabc6bf49a32ec3d4a921ed57063e5366cfe51adbcc48b3fc1 +ea1e40205c7fccec4fbe6dc0bcc7af55984f6e49a8a466e144b7e1bbf63506c5 +f60caa2320f9ec1732e9767ff4c9effc5b2f9ba6a9dad549dd30771c53f9a4dd +24adfd39cc5be74851d51b4fb038b22fb65eca6cecf6c7e902e9391c89b1587c +509bf28a987cb1c8ad74ebe7557792a9ddad7dbdb1a367c633a8eacb91e3131f +02000b5d06213700a011011cc1cfc3abe1bac54878cf32145d9b18eea7b59b9e +19f551170b92472f8922c0838f5d7ab5421d59a325c05372fe2c4c37184361a3 +71572d378c3d0de308e2c1cf3dd7f2c3dfe703de9df84e569dbe2e8cf00c54f5 +15db602bb2d44d1f99cf2aaaf78953b4e838fc1532e2ef4de4f0268b2e6e2c2b +cdd46138aac78f9f34d6911ae387008d594291c7a57d693386170e7e6d377cf8 +11966b59bfa3cf47fae49324348a91f80399e29991d659b32e0fb0af79763ad0 +93630b21d061cd935351fad564039a2fac55b025a04e9668771118e86f9216bc +55c4cc8ac588333bbc1b8fbf6b76a08bc14e1f83a683aefed0e20c7bacd2ee51 +96d723daf15279d8e2ebb993847b43d63e4960ad2f4150b07fd081517de48a9f +6f4ab09802181a2e4e44cb0204200fc112fd99ee2e09cbaa3c6d3cbf97f95bdc +a4f6d06ad415ebe00d6a78c3ac0ce6cd4dbc06d2829749b7e410e6fbd6f8390a +b958ce73414a8766576c3b642916778c22cfcaa498afd93aaa19cd506e231a81 +f9994006f5e948a2b20912d70132e6a0382666f35fcf21b6edd947d1e497f66e +da9cb07d716cabfdb6535e5ebffff6196b495327fa4e5c60778f76b40d46d4f2 +769ea09961f24b8110be2c59f426f16928866233066135ff9e1f15379ed5b11e +de442dae3895e438ac05889c683687242a4758f1a234ef144510bbcc89e20954 +93272fa2dd7373c6b7cf9170287f4dbe3022b20bfc08e27c3232514c813e93b1 +cb37193b2eb17a832c1833ece9666aa24c12424d6c157d4f279e1950d45b4940 +2c54e2bee3f3eb017af95881e32f009764f5e67b93eeb2172023b510a874a159 +4975ed54f35268d3df9c2cfb65c6316b8178d1945abae3c5566b9da3c8681b4d +acee486d5084d66e88620af120a44b5e35ab55591ea5283b4a69a31a9f5b212f +96456ccee559dd42c58b6da34dc181a0ec0a5be41a9b3e0958f399d083fba072 +686a38da9b05355fd47c3f59708c7b7d4c31de833a87a4d8da6abb4b9d2ef519 +7575de9dc5b012e2e3aa51c407afe407001a0714d7ef1184b33afe085754edeb +3ae4472f53011049af4ce4e0ef299720cf8c10911dc0bcb0f9f81a8caec00855 +91b750dcae4e3b0e0f507c25c1ca59cc38e366f27ea5f13427f2bf6809fcff29 +5d513e03c98272a0a822592dc9682a49d9324dc1c07f5b8b933ea9232ada0108 +27eba8837797d8782f46dadf53cb7404cb6612e71820478bf37f88615ada4989 +00f10078a2385cb83c8e41aa5464148bd90f7f2a18fd0b3f41a78b10471bc33e +0b2815ed757515a331a6dbf861844ffcbf6b37ef7f348d7d918fefa2248d82d5 +56580cbbc3ff9c079d04b9ab4fccf1682c0b66358cff6840a9808d91374319b3 +09fb2f795569eab9c00e850a50afeb42248a251473156bf4d220f220e8acd814 +2554128f83693005694e19707d0630ddf56bb55f47f21f87c37286015677685d +d6763e4a3e28de9d9f7292f659ac307ef3e83d84529389f7eb0639c02239861b +86df711f11038176d9a70b04aad94f14285bd7ba4b264696c383bdb6cde76ea2 +c3870ada2dbd7fa7c70e3fbf92ee9baebf07e97da553aec0c90ea3feb38ff428 +7625706fd41f54aa6d85124920c33c48228cdfb0e426eefbc3732e12813bd368 +01698802e58db4eed2aa7fda4c1e439ce2012457c55115d69eedb9f587e46b5d +35abf7e7372203b01ffecff24226de4e428217c5313a2e8bb58efd0f465cc612 +c143ccae5d8b6dfe04583b1168259f15c363bd4a7db272642b0816c7e0e5ba0c +b2bb4690aed8e0455b878e139c15ffa403828e30c079b3c3a26278050ba66ba6 +fce91bad29dc2d980c06678131d961e47363f11856b72f5ca039fc991ba248fc +f838d935789da19681db4d9119cf55bd29847d2536ef4f69327163c3e262cf63 +695d42a83ab0553b4c72c5eebb9e71c358c5fdbc209ada006f885f262e3d077f +b9966e8f53ce61e144d5a2d096a2ba15af75790609218bcbf7097a0342e1dacd +4eecf33fe3c4c7dff8b4c1f501007957f8aaba2e7176a707064c266cb723ba18 +6139e0bd697b37528fbd3a4bc8be5f7c6a50aa6fc65a0a52fd310140e750176c +698a919512867a1ae998b32043c0e11106f81154aad48fa3f6acc98bb2b38493 +863b2ab05aa77dc16e5b01b328d10dd7af79ec3a5fd38eb7712e9624cfa2a620 +74988bbd4014a7816a4826319490594c0abba1643e85e961870e7125de720ed9 +db31febdcb739b3f8f0a5a2803819f9f7f3fb3ac983e3b6743c7cb3feeebe578 +0b0456f15047a76ade4d764e56093b19ae91d52cd93ca61bab22095711e2dd56 +cdb2db4cb0a1120dba8939720c84f2faadbda3b0cab8ffd83bd77580e0dd59da +67cebf38ac126e54f6b70b55e7940c6b44d459757958c13f1c6f248eefb5af86 +48d752e91788945fda3da668a887f657de389b123260e3ef4f1b93393c1f484f +7268e84e78585c0a3695ce84bf217637f8326c98407c1060a00ef8950e498d0b +79ce31264ab755493d4ec00babe341e431d34c8b7228d0c5297bb776992586c5 +ae9ceaed8020f3ed8c0ff4bb963b9c488f8ca6c667c851861e8410973373fbf7 +56b0355b1a0dea5adf037ccf59bd1d4957c116187c99c558d5827d609dd27cd3 +b2fcede2d281ad3c33c5f9d55cce22bb1b8e9b14d9b6dc140620733a10389574 +eed9fa2caffd5591b8091c8533cc29d600b4a75b738f8dd2951983f06da5cb54 +26c1b1039bdb3550ec6cba9be971034a125f58e74152bf38e59b6365e7c6be2a +8d5decd0397e0edeb638238e8320f0425c5ba6f18ed9bb32693dfe1b079ffaa0 +3bef302dad880b1b4625865d2e8794793e1e63fdd5b0acc91d1f83d12238427b +47dc31e3b218ddef4813ba2e15d872b0e6b640905e261405d148de380b062b9b +a73f115b4f5ef94d4023bbad60fe61939b5c6cfcfacbd85110cc027a194d92b6 +f64b2b2bd0c5648e744da3048486e5d9b77b45f0360aed982351fadce42a42fe +f2151ec97e2e546940a7d9154cef3b2b8dc94aa1076369d9b1fc54e22d65b6c3 +bdbbc16f315b52e31933acb14929e23f0a1806d7bef12578a6 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/client/shared/lib/fonts/UTB_____.pfa b/client/shared/lib/fonts/UTB_____.pfa new file mode 100755 index 00000000..36ef3395 --- /dev/null +++ b/client/shared/lib/fonts/UTB_____.pfa @@ -0,0 +1,1134 @@ +%!PS-AdobeFont-1.0: Utopia-Bold 001.001 +%%CreationDate: Wed Oct 2 18:24:56 1991 +%%VMusage: 33079 39971 +%% Utopia is a registered trademark of Adobe Systems Incorporated. +11 dict begin +/FontInfo 10 dict dup begin +/version (001.001) readonly def +/Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def +/FullName (Utopia Bold) readonly def +/FamilyName (Utopia) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/FontName /Utopia-Bold def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 36543 def +/FontBBox{-155 -250 1249 916}readonly def +currentdict end +currentfile eexec +f9cd86fd4821715265f16a614e3770ef80561e77ba6ecbb4ef4232445eef2839 +94e93e3c8c9b09c09d71542241821e07888ceb54e8cacc8a45802f50c0afeeca +5e3d9114c1860bcb2ba5fd2a879a0d79953e30c90d8347513f4ca5f05b2e231b +4973bd1e9db66a39d846a8b3d9e48da72e2de8743ba2e104893167c235719245 +87b43ed3b6552cd85e4bbdeb9f46bd813298d531c74be81995a52ceaad4112c7 +f65773b088bffbc9874f615371c5e7b50ae99d5b6acf9c80d87057bf3a424377 +f4284b7232096b6ea623dacd1c925ce09cfa6515f675aacf815c38e984b4ba40 +0d409bb62cd4ebac75201c8e782e68fd73e8622c46b696b1ba37ca9621400041 +d95b948a6bbc089fe6b230b39bd358228af9b3e68418166a9adc4e7665341088 +c47c074aa4b21b0949fef9929e1a32ffddd2d02145cdb256863cf6067d27ed9a +f0aba85b1e0cfcbab7e74880e9693b5626ad31e6b5c2d208087d86c116513212 +710c9d6ca50e1503f8d4c2863fa378f8184189af0cf109f4affe7cb74563d513 +2104fb9dc6f3f5992e075633a0baebda8ebe9a07c3ec4b25fef015d9915a26b1 +d401a6722015090672714181580350560caf79bccd6040c0c1651d917c73107c +2d46aad5d4a370b55e896ce1eed127b6f0aabaf7c4ca62e89003032abb2c95ba +58c4a0eb0bb1a59a439a6a0c2082e50725b9e8139324af06ff03b4269a697342 +8fab0c1fabd320f1452d9c435e48037eb8cf6df4233cd9c05691604146cc813f +7ea131f21e9863b7bd1b087a583af14675b9bd31fd364d5dbddbc9b533a6ac38 +c4bdeb28a1ae3d2b374da72405acf67b1b3a83d80726301b3677c067c748d857 +ae1da4f723d4365647de10f90e96dd7e9ab9ef5c7e6866a13b807fd3f78136d5 +72950a10bb0165e61f12c60a813c7e35eeb9a0500725dd912ca2deebb238538e +790af851b14643f40e5eea13660e57b5c407735079a292a7c162dd11d0a3d342 +67290f1c9261fa5de6b92ca1e7daeb7cb970c766b3e0396ec0ce55dffbef0bdc +b437fbb4d63634b9abcf5844e76f9313ab2182e1fb3c47a705a1d97b79e93dbc +5e48ac19b45f9be4b9225e5a7e1d3679dd21001eca3c08d6febd35fa5453290e +1269c1d195e45338c10aa60fb8ab9e5a5aaf08c82e737f082bb6216d7cc1d5d8 +8906c8b05c4432d04561377438447eb5fade652af84c1ced99551365cf9e6f99 +03d1593de0e450003fb0d5b5588330d6527fdd0c8193fc0cd2293012310a425e +0ea0f8b901b991648ebbc894cfb7d95da6d35fb7c947e887bd3b6599e673b921 +c96f2a033e30b341a14066076ff0abd5fe77f393b548a15ea2185f99a3545b01 +dada854fce1ddd3448a9aa42ba260a4f85a0d1bdcf08b3de2ff8b6411adff446 +4a2929193ade35f4e26006cfdc45929250bb76ef007043d739d798a4973f350f +52fa1690423381539e3a4cc458600fed91fa8e16b5ae0aca710dbf318d16e3d9 +16a082a093b59f35ff92a1b235d5621e87ab471310ca26a07a9ecdd3cbdc9bdc +7506ff13b886b26eda6d4ccc52a312593a0f2845a4a30aef829109e6b76bfcbd +2f2fe267d9376acc0686c9b1df3a25fc41d9e5390a90249cc26c502e4bcf582e +ca5054d96b6ebb2bec79ae23125b4c2a13a97570153b83dfcc4d9dec9717679a +ba8c37c02697d8f47269b9ddb983bd4dc029968d0d1729bcb9f94c899906af40 +0df490eaad13acd5a893663fc90a850533263cf6657632e8e4df31e6e6636521 +78dac783feb9616172d7651e3e4092b409383ccfcf8aa04b330119c334d6c8ab +bdf97d97fb475c25331044413a117dee0f15d6560cac5ca6c01c1c98b56d2971 +724c135de3c624fb7a1994a8267ead0628af72d5af1dc0ae3177c3b678dc15cf +9dcf100dd9de9bb71f568661293515002220681b0afd9775464be2f66df08c5c +7d3995a57ffd2af299564dd57614e3273d8555f705ce2a2cb095cd662acb8163 +dc5c587747e27fbfab667dd449228e7b2f40cea584c997d2b98e78a063edd327 +9e23947ba2577035ff349019293b13953ceea11b49b230e2a29d295b032ebbe1 +dacf823e3587184182d0b910794a1d784f0bdc21c74a65d12b5875cdf0c1cddd +5995a6e56c9a95dfff55167f82b3de41a2eb653b0d1eb61e9c48654424ce13ec +8671211b2b8a78839a4569b3cefae520e91c538f09d96f98ebbe905b01ddb080 +f7f6ff00d2f662e02bbe7dc3044b66723956559669000810f706f4ad544b9a29 +b384f554816696eb7b59540b407d438efb6c8bfdcf05324cdb65e9ffb8864a9a +05adaa3678a341983aac1f6bed28040df2f0e18d27300cab0930958704d900fc +5e194b149740b089814d1050e11a9d885bb1d835a7cc092ada9f08858e1ac5b1 +84b6fdfdea41d4b1241ae64fa3c47f125f48cc05c5dd8e2c896bb88b0a846379 +4477252f0d7abd31d4bd5703b9f280b09a59bfaec0663dcb2ccce2821e0e382f +837f4a4fdf0e57d531383155f4fd633bc4b7315e54425a0395bd91f050783685 +eb0b85e15e331166795acc5dcb2ea1239209f8296c2c4cd1eb15b37e3ddfd2ba +33a25c3761da66c0c08635101534607ca02990447c210689d31e49376d152161 +7696160aa2da75f993535e6cfbce229c657578620d7c8de8cf720f21ccc22ed1 +2be5c92bf7e26cb750f707fa7e2348a04a642ff319cda45fb9884caacb562df1 +365992416084a4d40da9831865b02246bda402f4354e8882e98215c37d3eb3c4 +d2f9ba2b93f190005da1bbb506a5d39e2a24be0ddc50e1bc5235d221a151698b +803f0f0414bc085a395fbada62a73a9a3d4c66415ff1704226f8437e9bc470cc +63011be0e1f3dbe6e6ad3ff35541961f6dfaae1425b2020349486880fe7fae78 +5a2db27a586f0daddab8ca62887db0a18462a9a3d821f31923c583bb731d7299 +f051b8db5f33fcf53c37c1e4ac7fa0275dd39ab9abc97cedd1c65a3d514d96df +8b7a49217fe1af15b5c738e927028d1ec523e8e8575f018e7bb3f7e9afc81ff9 +3de7a4969ba59f7093772e5696bc4f2d6616419b43ff26f2a9da0e183f7bd542 +b31f175724d2e8f18a61ccd010d8c18394f640f905b6832fcfe7d3e9c02e3e03 +911dff14d0a1c73129ba85e2179372aff3c028388f30621d1f8aac757660079c +63c22cfec96ad9ee4846c0854ec912abbf3f934e293e0f1211786455019a7f7f +38f9e877f4186a9440c75a4babf3a9fbad1c5fc484082e1be4084ca3018b676f +0e037cfaa4195a18948d8bb46a6d00b68213c09d5e69673ed4e00155fba9d840 +9e08ca2dffafc93110751b59ebc2b6ed4bf5f535ac9d73c9399d9081eb6b2ba0 +a13aabde56a7f9200749c9e866cac735bc6e2f7859cbda912f0c26e85d3f7b25 +3185ec64546cfeb89d3992b12815e70a548299615c6889379218c0e7dd1cffaa +ff4ccaf3c35c77b09513b5f9b0d501322a862af4f6df0af50b62e4e1c1b3067a +f5b24a44190c41e96b659f62921dd6075609f7d7db532298a425c675e4537952 +bf06fa9b1295e32068740c361048301f6ba6386602b8cb54bf8f38fd77669f5d +791a7b1854b7f3effa193e9e5a435694b1c8578ec78426134c9c56e6c9f08951 +2469a5137bb452be5ec3b3d27c3cbf6e6fee0d58d73dd3d277bb0c1540ad102c +50b746093832be65d05c102ddc982b08c7ec1fba629dbe27d4604c1476d91392 +801f91ff781aeabec88132162e021741f8f31f06db82b29d17fe66ee04e9c200 +5240d68ba82373c7a567ba33bad4aed1d6b5c570d03c5c394c09e5c5eb9e924d +9e1c2f161a9d52cbafdad75dd674327ec81ce286cf1abfb5ddd8606de9265784 +5c950413caeca8ef80303793826c3ac4b58d9fd4b02fab612fdbf71c2a1698f9 +048769235eb9dd35823536662ccccc128c74818c8ae48edbe9a4624ece9d1ff5 +39795c7b4808520a08d611af58eec60bfc8d272a944201096c45749bc97f32ce +a52618a1d6d53267ab4fde671ef1a47b03687a59e47a8e277c02a618af09b78c +f5be89f5da433ea9d31cb8319bbd220099a8d7d2f879abd99b4a96b06ae3f8ab +4cb89e72fea1355a010405cd72dedc7bd35b3ae32fac3d40642fe88e7a938579 +f4c10f751174cf042331e7274eeeaa28e5829f0e6e866783412a45e8ce8ce127 +5438c3fedf8cfbc9078e2b6dc439d9a513fb2a74a672b496e19af3c092342811 +983b1a3d6c60981db5aaf03b1fcd375f4ad64a10b57d378f52f29cb89dc77814 +1dd5106934bae98eee32b779eddc6cb5fd13d38ee5b39d4513338af4feafcece +dda1f3d9b6f0b5cae4e7efa14921578cf07ad6e1eb7e0a3bf7d52bb7e2fc9656 +32c5c642a6ab07c108d79699d56727db2da956cb576b97648ade80eab2ae12bb +2dedab0672ae666115758614c91108c9e4a4da0bd49f15379cf6716a303accbf +477ae6756d18a0f6e3801f72eaff179849888104e38e69fb722a385a630e06ad +e71c5553a14c5955f6189e08f8cce45ba8fbb5c5b6b0bac8ca48d11c0656f21a +9b9286c4f958db61b111ffd40b3c8d69720b6e2eeac5452ba0837fd6806464f1 +0cf5bd73423b9f065b6ff58954a9090a53e31a16fa9703700fba14f8b6666ee7 +4b6a7bec61fdce1fc10245e2e90e31463bb7d326857e389d87834ddffa9ca581 +5a5abc54a958bd3738753e38b255cb1012cadb7278f8e84d9c649a4a659a8385 +19e128ddbd0985505fc613d9c577fc10c429648ad18771b0da1087ef584c2628 +b91d33da27c403c0214e0b7f984a9bfe6c2c574883f446e4dc1a563c32898bff +ca2433f1161168565e063ecf045408d619f2a3215ee881cbd13a7751b14189bd +a0cfafee7ce4d9600fdf993ceddd965c4a608129c89b52b5b59419ed079a6f57 +9efc222187cf25f848d47bf3bdca06ec2573fa8fe20624cfeec3f9ead6ded709 +75cae667bf025ad867944faef14fa9d6617b74cee3804d5edb688d9ed4a0c2bf +1aede05eaca61e297f03026864c738014d8afd79294e062e04e5fce1a784d850 +b00e58fdf6fb5182d6ff08bcd05d2c7860dde223a37ce53131c09cba9c52e9e5 +76cf7e58bb99f045c8b23d67c43449c6c3f6acdb5b5f35be96d17fb0f8d42685 +cc79fbd421fdbed2fbfbdbac976736a6fb34c62eded4a12ad456d94aea2a2bf5 +f1fe4e1519361177998c8272866d26cc0e1af48fcc5a399edb8550046f3e8b31 +baf20c0ba1210fa2487cc2982e3d39e6a630d11813801bfdf4cc3695384410e6 +067d10d37aed54394448427032c9cce4d00f89418f10a45fda8aa392db636c06 +a26c0b39b25f128f7e5ad81a548f643eb1802117172d9be1fccaa3f1a73b7c1f +1cb21f7f8f71fd8d063ebf41cf2f3eba32392f0303affcb36e113a7e46e5406d +20e6c47a9be1e8f8085a8c49b04d219e13082d344c91dda69384c0b16d3fd7e5 +e46f213b789603c5d89257d6510ab618f24df56b1ded2029779af220b40eb86b +cb9ecc32f2b1b713132ba229c3bfa888b014e12ccc1cc902b28bd5a9d5263ac2 +a47b38f37f0c9b279418b1bb81b288d0312667dfeb0aff86b8072c2bbdc79835 +f6a04d34c0825caef54293348bd6c672ba2ace4d7d3fa604faacba1a42dfe02c +0150abaf33d0a6582071af6b15929a4857cd57048c9e32b04237ba047a2e2837 +a23da6917bf5912e2b1abaab68fa65891788a6c3b30ced2fb907e603a7654c27 +976d2fffbad1538395c05cf876bb3b64198e0a1b94f40d748c03373736018466 +6a9a9e53e0a159ac7a5890bcc18cab7172dedf4b8fdea3544184b0032edee0f4 +6429cd0451949277013d89dc6bbb23566cb158489d168a341271aa99618de261 +9580e6ebc094ebc5d7122fac0cc95021df41feffbf34ed59dee7556ecad36d75 +12b96ace5f81203e47d9e3b9698163a175767762fe2278648d0823b7a41e8730 +16fea5eaf17effef6b2c537b2727de3ab71987b49f9bed16fd8aaa06e5580643 +c2514bda11e7fb68f310bdded37ff6e6fd67b04c83fb8ef288da520954f0c2e4 +ee463de5ce7bcbdfa5403a4de7c64a7d9807dc7fc21678fcbee60d8b2bfa59bb +c8303d7f060c0a2182f6779a386fd82b9b44550a03d98cfc0095524a7308cf6a +e0c2c366b8bba56ccc354f3319a888e1483595b28f38868231631d25f50743f5 +07d08da61232da0353fe9fef9bee08c93e66b4cde93369efa538d03dcae19d88 +1fffcbd05c767b97fdf225685d18d7076b2b9b788404b79715b18655bf816f57 +2d96ea5f0d6ec848b399d0629c5775e5edde2a79a3dc6bb189506fcf65ff104b +389ccf9387a3d6d243e4c83a5d78e9ee659b8e47b54559c80e15e1d9b3fdf838 +565e0ec14404dbfb5da05ebd0c3cc925f2a0be3ba741b9dfdc0531c2d35985ff +89268541bbc6e4ecc13a50d937cead6b3a9863f85a8c1870838f4abd35494e28 +92248f65c7d3c452f6f743a345087661c3f5e8f09cc6854e7f2d6b5c9461c0f8 +3170337fb694d91478be1ccefe270f28e1c8ce48ffd25ed2dc83c070289405ce +533af0bd4aa922d8d3b9220edc5b2fe6fadeeb81dfd270ee469b434f44622223 +307e041823e65f762048d028c2b66c306422102c19e3eb113b6f613759b68d15 +9ed5665ab83a1fd1e8d45f0de9c187db9f0f7d145c3bc457b5ac065a0bf447d4 +2f92b61a915f4dc8c03757eaf6cc115c87cf2aba456e01834a0e283347d487b5 +0e9bf1ef39ff7ce6505d1be0e20f425943cbbb4c188a359348d67c0247da0c3e +3116f9a961e616894a704f192f550ed25503bf14c828ab8bf3211ce02689ba55 +49b2237fb5861f7fd2003d4c82a15ac10f5e1325928aeff9169fcf585334f62c +571057f3e5d5bf3ebbbac63110353fcb05a533af4199d0abf922653efecb2177 +5fe358df229a5daac3ebede23bb469173a33ada03cb2afbe309195dbcfe08cf5 +472f9979956828289448a9781ff3b8a4a3f375a57ccc6d1ed120ac150b1b4ad0 +5d76760c330d85616e88801050c93c9e44dde990a8d1867ecdcea7700b6ad389 +010a5f0b846c2fbc7e4c4b2daaf0fc6443004d6993fbf3990f78d69350bdec37 +66b9f8d3659fb44cc7917208072d1cdc3618044e0706804aadbfd6e6823e197e +e8dcbeac8f6ae996260f5d75279b3d1508ba47b61759dbc1dfe41cc229ff0f5a +a3ff10b0e1ab34e1b29fc95f245b69d61f8ccd5835937b8cf2afda032bd85635 +9448b70d736946734ecacdfc0652cd5fc7653b3fd367c4c5d9c7f7ae1be27671 +8bf62030e55fed95b073eb8b805088eda02d726e2f9416eb02ef7ed5ee19b57f +f196b0ce036cee614680585d911a289a4953b5288dbadd44e2e6c1e406836a6f +cab530c36ddfcef4a58922f96cdb00a41929cc98dc77c52dc6c7e9d83b188a88 +1c8a16de3557f9bd5b23e03d5c9cd00f921a1e7f7c520b6c55205ab0dfc8caa7 +6f6d7aa1e2c4819e4d19af8bd07aebb63e716d0a4fefbd0c9600e5c5a9857ff8 +a637e2da191cc7bb8b1a09f4f4d1ebad7549b7b2d41d74cc991cb0ef99fc1bd7 +b3575dc3003914643d277f88131facc8b58b3bdcc55dcbc372de6e3104a92609 +09d9fe9c16e18ddb44a481438ca22330c7d6b7a4eedda79f01bf19c266ec672f +99fd1f26d55faa7c485af35609a799918dce99225bc28a60256f5d393d488bc8 +660af7a2651391bfb765a8e7993a8701dec9254c983682fbcd136b4774ee2c41 +bb2e1c64a6371db80c433e8b0c14658ce0ae511bef8da3ab0d10d4aec7d9545b +90881504302bcb086528834bee3a0c744092067de2205a7d773a5b1882d6094b +9f32b36d94033259881aaf60c7ea2eb496ff2bf705aeb576a41170461fd95e2c +0c4a65ba15357e7ef123f8a749b89583e037e1e9e2ea2d8f435bce1627cbe529 +7183f4634de4d321d6b63d939abd38085a1d1ecd916fceb8dccac6798b358449 +ae06c3f7dc948b9f32346a3f492db2b894605f0d33bf2ad98445afcb05b6be5c +2f38338c78b40cc533b4d7dea2b9760f48a5822ce3776e87a8748f81c84ee7d3 +d43971f8d572904da8b6e1f2f20f95bb2c31a4febdf195973dbb2b8399883d9d +7edd05e710d4161fa96e30244dea9c2dae7ed30e36058bf077f060067c3c6331 +b26d7e358cf3efbd5dd8820d0f383071fd7c8f29886e7fa098a9521eeb557af5 +d275f95ccd75f593e97aa2a1d7463ed69ca8b87e3ca8359861cdf24ff3a01955 +befe00289476891a2db20b0c808ccd590598c4486d00a53ae66acea05e921f91 +b6b8410bb4708bf580998f9e08df92798f3da75b1ba7e380d4e3a5efac7424a1 +83bd2adcfd45d84a0495cb2cf6f647ed38042d03ebc57cc7fb01c9b6eb809815 +aaff355c0048fd1456bb3b666d69b61e62e5f8764d8fb8cbe568ffab07b2b20a +dd75e6e8afc57cdd6a368b35903177c16db14c14f861eb4318e158caa7615743 +c847e066be616524248056f1f1323cb75f976f3c45db703df818eb011499049a +3795c81add7bdb60c942fc7dc78cc0644a6cbffee86744af3127d021b0db7cad +29745fed8dcc7c814da5085ffb6537dc87b2b10c0d739ec72037060d77d03479 +80b7c1c66f33594dcb8fab64cb6a7595bf4321074e177b613d8ff0d6b3165734 +ef7ba807198398cbfa82b5c22268966bf1c6efcb763bda2771370fe353d5f74e +39b97d0007c8f07cd4ec408d5fd8e0b91898da51c5995f1bf401201f3d990741 +a413a1873c0630b02461dbe7eefc315718b935819245a3e4ed6f7245205b0260 +2ba4e3fbd10e9e9a6d795b7e5faeeb4bb327f8e2bf6288afa17b33febc30da26 +339646fde4bc2052156bb105b6495ebb1f109772fc0cf4e74d04fc343e59455d +f66e127b01af76306f1eefb66cdde33513c9cd8cfde5191a30a611fc740c7778 +a8ec6ed6ab7294afdc13c647b5beb50d055f1713d94f8f4c34198de9e7d69140 +4a6ac35aee04add4622ee052dc6e5ac069ca16f44699d6dd1135b167daef2640 +6354b17dd0065b0667167a32152e0a1bfabcc906d6a83f57322b6aaeb665739b +0a129704c95439feae80813d4e016707e58501284f589bcfefb24f2d4f4a64f6 +8f498156b4b33739c6d709353b297803d5e2be86d22a8537ecd6f22eae4a9a08 +8675186ed6b6f04bf4ebf656f62c93b707b488177b56c671218c0ecfc7c331e5 +ebf4d7d19e24e3874722d2ec41850586bed01c51501cdafb58f62da3bacf1e5f +fbe991ae47504f4cff536cd07c27ea98c7874d0332184e8e9ec489a8b88cf4da +3aab2cbf5fce08fce1aac46f7be72bfd13b2e68247c6dbc126e94b6c223b65b8 +e10e023b083a73ba7116097cc30b32619e0337e0234231d125c615edab87a076 +11dedf515e1015422838455580e1ee2332f79b66e0b187045fc80b02a42b5864 +ca8f5ec65bcd6740cac58c1bef50462dab2b0148c1f38ece89fbdc8fa08aa8c2 +6bb7f7c2760f88e4b56e3ead341f6696544fc6735122c136ebab68afa8dadb4f +54c6fc0166bf56990d9b28d0fa8d843f1c971029a46665c1e5b7bcd2b9d794cd +ef19e52d4a154e0d537d14c4bf0feb4ee4f289cae0c86cc82fbac3b43102c28c +b5f6a82948da4c51fcf85d95a91a5a60806815f04c7175f695e1af5270f961ca +bf7ca7376887489e598d4014b2bcfb9f4a745a14f577ccb2f402be279fda4d02 +3f464004998682716083496d4112ed9ec7351d81bd4729511a96f001d119e714 +7641307abad87eef8cb42bb7ddd62f61eee2a3944a834039a5456d3324c53c4e +7b44016242baa784eba34a2ca7556dedad425bdefc04f11aab77263b508ac9b4 +4f372af561266420f852b0f288c5a8d08cb682b47bcd0f8c738370c48ff9dc51 +17e8551a946b9b0d0b441e8353e15214cb669f5a696b50a23a4092b65d3fdec6 +f174fd8b2d51b22cefac51cd5fc7653b3fd367dbf0aad2f94172a50a1bc5c236 +103d08e2aca1b465cdbd6441a8b9f05b2e998d330ae453cb4d2ecebd069ea9ea +10a0652dc518141e6bf674282bd3ac1aaf7361513a945163bbfd249effeba765 +38c41e708a6e765fe6b7fde08d192ae7e1e4a12e61ced834f873f89bd13934db +828fe9925e412e687fd5b99ce4f0fadd5d20a2d5d2c083b98d7e85655df6dcb7 +f488d3bafc7e1cf88a8ddac3e33b3f38c1da0bca42f052f379bf663f7ddd047f +227dc4461713cf88d27780480ef4154c1cda2c40ef944a86aa053375d9504107 +4149481e9f6d061b6cf70d533ea7f4df16075c1cb2d84fe52ea967b85adee81d +976e3b5cc75fa41286cefd804fd3b471c74e973e3961346a3b6473390660492f +1e602e7f27c38f282c7d398013f133812a6e8d2d20c45f8c31c8dd26e53ac22c +5581ab149190010f6e3213f77da2662dbe1919d79a23aa976d23183074171102 +9dc5311c96a7dcd36bf4e60780ba68f44292b23c6301bfe39defe3f420306b6f +c94a224e43638aaa1d3ddcaf6d4976dc33831d413f691ad7867feebf53ff31e9 +05a6f084f525873c6e1a7eaf956f8c1f9728f88303c6cb14b6f79fd730febac7 +1552d5a8e5f4b8e0bcb10efbf8a49ca6f470ef4ba8fc2b5b05d0e2077ff12202 +bf480f21c47ef74592b6f8a25ed1bdec3a87a3afca117fd40ce5fd5700cc0b62 +5f29828d7dc95812d142e1967b748961b343cb96408146a6aee63d8cb82e0984 +1073d3085e5db40b230814bf4a2fe816891d33003db3cd0a585c1dd306042423 +a212af55353f1e915436137cb6ef0823dc1f14746d0de7425e036cfb6722a890 +3e5260dec6a7dafd44c995c215d6a917075a3c8220884be62c0660b833b658a8 +74f9af8d280d67bcaa96429d4882427c81b38570c66d0e309628d8d7cc28c442 +2511210838a12cde39af4eca0423e5b040c52124b5c549774e207401ffe8a771 +08192fcbbfb5a127c24241c8d3e0bd8a70456ae850725fc1dc1b2d5c2d1acb49 +71fcdcd33e027a562c0ab202e73bb3e701d4f675fc4e301a710bfcef00da6ff0 +926112665593322dfac72485b8eddfaf4cc449154c53c4403eed5332f38c7498 +9851e9e056c6b8cf9fb7079b48420f04cd54cc12d505f13f111df1a51672447a +71defa3128cbd7ccd50afa388170bc80162228c1ab8b8b98ab9bcfb0d49686f9 +2fef95de610905562e92665992fc6fc31c2a0e9ec7fc06bd22addc740e02bb02 +d08cff9cdd111cf41b91a7e4d8f38d88d8cbb7dcd4120fbb76f69a24a773f32e +a1f63f906a92a16861db77523c55cfbfee0e96b00e1f93dd20d154343ee774e0 +1fdb1be91c43a7d690a557dcd5f75fc2bb0e3e18286dd8e1e23412fd61fd79ad +602259e90d0e5a2894a29eda1c096289766160e356931015f1ccda0a56f3f2a9 +d9c2e495157514e1b03768d8190619e0bd113afcf91f67de3ec80a09281107b6 +b2af3e22a970ddc8a28c61140b102d990392c923a50e55971f6751287aef256e +f1c4540af2b1d7754b16fec88e3ecaedb6b713ba39fe835b27cd7fc8c132a740 +46702a4b9737dc04b12310ba7f30ad94de90c4cc2c0e174c5a119d14ba6488a6 +a1134a68ec0ea009c0caef6c0b1edbfcac670162a1b3235757ad4dc4b0ef153e +a4c396a809c8ad3945607752dc6ecd49348d9100c3029da91cdd15852d80cff2 +dddce3e7e2818294a4113ce0bb2e4d930b1069156c346c2eef80e8441084fa66 +7ed142e5f9414f02a362992ad52055fb82d627dd481405966836efb51f858f8b +6104fe5d335427b528c2a83512fc056de5f0590945e84d9da75012e2382cc99d +cd957c861f43582d982411c74d62c0ba1320d0e069cdf1ad193a4afdae8b0b3e +8bc1179ed8b02e0acf0591edd39971dc36698a884f750694b57bcd28ffa1848b +621f22b1a5c9b85498caa13e82aa9573695d3e1ddd2c408123494d46e671b50f +5314e92a073fc52522f6492de090208493f1581017e05d7f8bcda9cd8cb62cf8 +2cfa57390a3e27ea3a15014a00c9b6189bc82996f2823b1f7b6c932ae9d44cd2 +351af96c918294e743f054f1cd71f1287e7d0dd8908e573c3113734c091cd343 +95647aea885cd9df1211028b13f99591f653f69df2bc629297ec1c273ff6c446 +a7d6bc6579118915705baad148ce2d8d0f032ab0ce4608d3f2c19ec255df6b86 +c88700d11dfc2953b60391c5c4eafab97fb6fc87c467f25db92c05ac2aec8ab9 +f4f624b08f92522739d920f7e07eb4d32807990a1f03dd323c5b5d2b4b5af128 +c18cf5270e0cfbb3744fbe8041d7ffebbaea8bbc7b851f6e34e7abe48cfa8b72 +00ba0034a95bec468ca2f49f7f34fb3a441936128fe1d842380aee63867b2ec7 +38963bd51781d14bb5971e156e6fb64b2ac5fd5fb3c1c1569a6081ba0f98d8c7 +7736a52aa2313dece258c0b9e2cc3c8547fcdf0ecaf7c704cb646eb9b00b0d29 +4ff444b03c4d041667206d44adf45890b1672eed8cd460c32b8cb37e21be14c6 +0852be32de9002618df604770ffadf5cfc05857966bccb01edd59906bbf4faca +52a14c2e1f0857cf039a4a82474f03dafd54b8c163882ba77436820fec657082 +45bb02be9e7fcad3cc9ffbd119ab53982acb49e7c74fa8fcd92b2b0dee92eb87 +fc7f8bde3000b42656b338078c2ae8f58eb616fdf447c06ca70048b2f5ae25c5 +123655dd45b546277bd35b63a1308ca47cf4d8917c4bbde2b8a07855a0628c7e +eb5bef472819729b3878168096a81bf7dcdd59df236fabfcb0c95c86ad80800f +c2f69fc835544ea36403ff2cf0f3bc8127bc2eb5abacaee987b76e202c8de7d9 +954fdfb49cad1a5e9dd6e5b943d9b3477acb63cc884168cdda0961b483c20b73 +2f7012e980d1c6a353134e2ab65b8f93b6c6929ba78287c215daf08f480b786c +45b5ee6df0b2b030fa7a27e39268c1526759aa0e095606d2de48f0e7ead25596 +09eae59437b3621716a4892a241d8fa957bb65db783ce120cbd1e6bd83b8a26f +579f062654e17f8e35159212f7b1b7788934279c0315b9a603b3008cfb1393d0 +edd53889e22df7108a6cb6e2732f9edb9ea792e00469f192a288ca6fe995c7f9 +e3b321efa32329d3b1f0d467e49aa584000810c5b547149295a7676ff1e4cd89 +d8d6da7e117e8cfd0877e8d7ad0869b15e69da45fe038ba3d62ae756bec8802e +e27ead377a333d62377718b523658dce2f8669a67a70585fc50549b52ec5289d +22dd47a8892152cde34423e671a3820089f4f3b4007759dd686bbce52c7c9fde +61585a41e1e74d33d72e052708b3163d62ca2e89fd981b595b3840c94afc7b5a +3148be452208a894dab2becf9820d8e7769ec43d9635aa867edc4453e7d03b4d +f0e4b89b4b6a3297cfbcdb97b158e46503f38c9543c49d81a41665228c07c28c +33965bb4fbdf8fe213bba119605114bf07c4de83aca1eeaddea3345caec6ef41 +ea7bc93bab21a2948eb3808f467090058fd08f00510ff600658fa971d1f66e54 +7ad1965a174786e4d92e059fb6769e965b1147f4048648fe82ec51b13bc56c71 +229b19829abcc1ffa85a051c413245bacfe48d720fbf8d4496c05d7b5f45572e +6190fdc37301f6cbdc44031c1e97cf47f9c5b9ebec8f79c8bf8157c5fd861ca6 +4a5d258d12a8e48f7c9ed901fdc289b53641d5cd5e63310a8be495b1104a96ea +664da883db4d8b8dd8ab1dfcdc10d771d37562edaa793cc9019389d060709efd +18d78bcb6d3719a0ee0a5316f9f40fa503d9707a6d6abd1cced61dbfccb06be6 +714985a9ca63809cbba77857712c2381c569207cf9db2699dc0aa6b7f5565043 +816bdeb09e29be611cc336c31e84302245c9ed37231a7b92d711742c640d06ce +e484024b5335dbd0387548b2b71655e83cad37abc1496e1cf9d8fe792fde96a3 +bb684ca9fed1bd75d9bf50b06d58bc2929de047f96f003302fa2872ad8be3e0b +68873f143abdfa4a73702f481ec4e32018581f19ff862c93fdba310f5914a242 +30a24df9f56ee75d274c9d5cdeeecd61618c14a3c2d36ae5167b04312e7a7797 +0267e2df6837256f0cad7af1b5e29386fb384a8ec2a3a116e026bd2e48fdbc5a +90d503e2f3c5919c715724b234b71349ccc9dbee51808884d39a8b1ffa448488 +504b67e245eb403221348735723197708a564298581b5d75384b13ba92a7e25a +5c40792e86d3401f9fab4a41762d95982365f6408f9683877402ce4e98e4a00c +c3178e104c0857719ac4cfd53d07c219eb60e66d463708e3ed65cb4280285c2e +723673836995e18aef5a9a503d7e89aa2ce4e17c33a1214df21ef551d68c3066 +64583dfd9664e09acecee772d6a70a23f3840ecdf6a671dd7870e1fa9f261e79 +6048168a73a20c53a971656d47a0ecdf7e7c5cad76073335ccdc14477746c675 +e2628951ee83c402f7a0b581af8ee6a594923a375d18c98a2dd01d3d5eb8f71e +657bd49e5b0c4f4cc0a62ffbe13f10cbca8bc2b631d21b43827a5c3ee7548ed2 +baee96c94af70cadccd81dd3a48c7190b0630a0c7ce48249b91d92a1bfd06ba3 +123f97326e31c195fd1771fe71abf66fe3fcea8b285d6a1d4cb55b9de4699b0e +c55bf2f5d6c245f41cd933a4ce3eda258cb90e401c6075a02757e36717c8f547 +4b4e9f3a8c2d172b5d380dbb9e5cf8dbbd8b2d8cfd014a5011b9069cc00b7dba +21b4d17f44a55ef1e5c49ae01d91ab509c3313f2b0a8461194bb89fec131a396 +4e58fceb5677baa816bfb9e15a5121b3f0649562f920ddc302a949268741a677 +4e8c2fcd11288f6705250232d4de4caa56a8e8219dcb805ed08722a674d94491 +ee9f530d2eb8e07173f86912f0e585e0051cdb190e4d0040f9da037f29890068 +4e4d5577f67a9359e6f86b690ed5e6d3e772f7817edc2867dcd6d11dbd59b9ed +904a57f2c5dbaedc298dc4f2bffd42a93e77925e00b4d74460c68196f0326f39 +f1ba9059cdee88c8a5377b623fe791c7eaaaf6ee2454ec3f681bf42600a97acf +bba69df07157f26b64a642849a3da66f0e458fa885255699024771c0e448e620 +c3a2607b32cedb6e0b72a5a5dddb10981c3cefe08ed3921c4d0ff87c18cea04c +16bde8148e530979c140973c68ae56da99048448c6041f1e15d162163c46f7f0 +5f9bd3ec2c7b2012d6f3c29eb76abfb56641774cf6b6bf17ba63b7dc94efd7f0 +c5412d1448ae3a093cce169908469e6ce06971d89a547f25d5479fbce1b89278 +2440339e904500a9446ed22e000a9213858c097896a83f008b180d942e397804 +a669da5d731b2b29c3af90d009e4d5fc9885e9a446a8e4c7d1e4f2e64629d829 +444da50342173a10deee11630aa33d865c532f39cad6326674ec49a348a02da9 +966cf4f77692ec51253f5dbc8650e28992673c97a8bb57ae2b2a1331644d3de2 +0236f8cf1c3f071fa6bb2bbda641410c39585a57895988e5d653daa8558d797a +87d8ad98fdd07477a82c09076c6d5b8c2b6da0c3f4b916149bfae6ab3e47b977 +9c00f9e01cefe0e56a3dc2820a78bac7ce577e4e3e9b30724ca1ae980bf5320a +41f38e2fea835dd1b7f8f252ec7052793b34314e0faa27ab4edc58ce25feaef4 +011cda00461160b772ac3dbb072cb3bb02b27f33ac2b9873a8131954a4abcffe +1ff1b3acbb237877ef0faebe4ba87e886a217d62a86fff64119cb68a54ea16e4 +6042eb0ac3194be279f6662a3bc1f6d46aad795274df8c5810832a8a7b442a4b +acdef42384bd3c25765321fa46f000e330d01a4d63cd71f11bf2cccecbc0916d +3a78816f519b6ab5e58cae3543236eea83678c61c3bf8da0db91f4f9553565a1 +ef7cada3a2eaf42bdad0fb7702dbf84ccaee6e01b97b2acec60a47cf19f42871 +c4255eae175c0265ce822ba301bbf495104a995014cd9456e73d2ec34d417402 +38c08c6c296cca1ca3b6591e3bb34ed9aa0061b1309444c29f544bdc8b22083e +f8a1975c3b20d6d5ca9c351c26334eea4dd8b8a94f33e6195c1a80d6e37bd2e8 +4122ec755d4c52614af9dd42d9741e365b019654bfadfc69a90e2ef9b84957fc +6d546f6d8d8f75f7dcf53ac4f597cb302ff298fd67a72ec5fd2d2e480e239060 +d6c242f3101f449fb1c394a0e5aab4e2c045506d3839f811d173c0564fcd1657 +f668ba835451a95dee465ae2ea790afe0e9538a6da482e3c9dfd134366ebe8ef +d446d7daa9c05da01815985a2a5f2c3ec1f0a7a929717d234e3e2eb26a5552dc +3577e7aa7bb1ca1ca6c3b36503d08f079892a2e797a54def5681eee1f9a3577c +40e7ca2fc5dea406e54890bab23732e6384a647926d8e072de0bd636f1c75e51 +952c8aa250389079d6b04490e372b4218613ab658ac1c77ea9a1ab429277b778 +6ea8dde78ffb71bc0bc4dfd9ff7e1a6b2ef19a12276f3ce7d4a5b281401af046 +f8b6c6548bda69192ca355cf43bf1175b033f01e1bf61ef403053a79288671ba +85dfda331ad1fdcd203e875047c740c42bb12304c4a18a407bc99a2c13a87c60 +645b158b0513a90049845a03cf574e1496acd0f2fb0f914e011b103533e61aa0 +1ac25bcfadd456f33b64000440c1e935fc1681e9fb6685786b72c909055e4f40 +b70afc227ac5f2dc1e3e58363547223cd835d369351f36cf698120403c53e4e5 +a16b756600bf0a37d1965a2ea457df75e07f3021023072b12aa7f3d9e8dd010b +2dfa92b24d7375b7ba1290060b5b5c9f1537dd0969cf9a7701fda9f9a96359c6 +ccc15f736f5d2479824e8488f6aba11b3d25187a9337effa41ae611da4e35763 +f60ab26fc896697bddca64b70300f09a104d041ea41c4dff6f33861b8ce4f45d +98fe08b1626cd9e60a4453597e2fc3287d9790296da5087c25ae7b85be898583 +ba29d25a59c776bc93fef8f3059e77827449056c2e55a4772385354bfdd19284 +7a02b8d0d5ab6b34ad9968d68c1641a4ccb2c03e5253f1aac444c1afcca8c94b +934806c61442f810a7c53f06db5b23d0b017a72afb5be70287eedd1e0289ad87 +43965dae9770a18faa7944cad4c638eb8d918558aec3a0a695765172d5c834c2 +13e680fc79d9566fc3b47601c706c2609892dc9d1650465703ee6c2f7eeadf92 +809cd4831e47a0188c633102019b6425cb76403f967af48976a2737504060649 +954c118f616bae1de9cb94ed75f6a3dff1ce4954dd298ce8b5007d1e182a7e6c +e0c6873f582d21cbc2f0638d4a7b2679ae58bb54c7f8a1bc1c3e9eafbbe909c6 +40ac2bba74aeed432242720e473163091cf6fbfec4d44095434600789d7d795b +e5ae5500584e8e637daf9a7ac458532f3e44320be7ce7aa1f106b6420e67a96f +459c23b7b02404c1b7620742766142545551de23fa8ca655c1579fb2c0a10e93 +1c220e584e9fc86eca3aab882f3881c530ff92dae83340193d5aa93bc857671d +ca3fb1f03534ef6ab4cab64e29c02a5c37e19d1274618211f2e7493a4a7045b5 +3d39adcc8de68bc7f2265914218d2d69abd7c49bc9237535b4d364cd67bbbe35 +f13f71b88e83e3bd6f09caf327c629cbc2b8ee728daa1626795c2995c7919a2a +e966108bc76de252e4df625e95338332b6aba850f0fe97fdf247e85db1fa4a8f +3d307543c80426061ff86b4ef8d26997baaed5679cf430bc88ce20e31cf510e6 +987be01e58a170bfc8a6259f113cdd3541fac41467a862acb3de36fb60f72de3 +e0cb8a02e17ea8cd2eea27aba315fc34795ab06dcabf5ffd1b83e2308b2a21c7 +72cb356f98a7d2d0f0cfcf69d672aaf7fbe6198344aadd2ec28f593c7332b0f6 +1809ef49d7c19bcb6c065ec2d890d4c8a172e061f47ef2cc392e974d1874278e +250453cfbbe55c77a0715475a7cb383a287cb83f5a14fd027c332f79a09cfcfb +2c7546c8aa601d925ef6b72a2f1ac1df26505bcc8229a4aa0c7167b9d7c56508 +901efdc77754cdc396482d17a6e9fcd200a0cf35f67948d11beec6d38794a826 +7c48da337fd191705e26eed2981df5ac1e8f4bb23952b9eb6f92cef4139e1884 +bff9f37257cced07790b6ec333d66a6800d8c8befb1d6362786b3ed00ccd233d +80e8c4fbec37dc7dcde3e5ff2b8a81596dd10b714d9697419ecc542a661be66e +a5082e50ab273dbae50d60ba68273be1adc6f750ba2115af58ce22e8e10443e7 +2048d5b248294cf81e9e1995dffa731795817c556133b714d4970b379b310698 +d4f690f2d799153b8890e74dfb72a5a50c476be90cd65157b82fe6b42c5f1be4 +3d5cb0c00ccc62f270ba879311467dcfe9fb62aec22c5d4872f6b02b8a8442d9 +d309722c4d30047232cd0c97049695a2cd80478ef3845f6d1005f36730c41429 +0576753e869c83d458f0dc3f42f68264e020270889c63218df8e1a8ee73488f6 +49ff10926847ac73be9e89879157cf78af203a66ac491eb93ba365b8891dbb8a +bf8a4403b36e0334beea6749cc202ab18dcd07028f2f6b29b0eb5865a3748aaa +c60575212f532b4cd4c9dfdf00aedf6cfe6703ec89b63950a1011785f6dc9c78 +d09280ba67eb5a78f9bfb797add8d7b705ac5ac61a16fbdedfc1ae720f9a4ca3 +4cd9828c287b680c24f11bad00b644beb9f6196dbaec8ba231de2d065bd7f42c +d731e09725adc7213bb1f5e675bc11aadaa56da37f62ede33a390d43f42a795a +0a5df034adca9ecd0e3132453aba99fdf4ae8cc2a7600e4aa10db1db113674f5 +10b2427b1dcb424623a259cca49ed14c97f0613edeb93f459fe9b9cb75b4f308 +15f5c65f839208a6f25652c8f63196ebc83c081c4739a692bf14ee8ee54ec4ce +72a35bf84d5f4e6c0015a4443e7f799b7bc6828e30a97687a0e5b8b722fc69ab +5baa477d07bbe2ef09a4fb7f05db2e02923bc8582f27693a5ce2b473ca02a815 +9c0789ef683ad4c7d8708dd28c408a21e358fa2c30cc598bc36c5651917da2e0 +593e472b57d70c0d6854fa5422e8b3825a9e39b0a54b0634190c2aebff4913a9 +7534bc70e3e9b3458f272d24087e74a538764b43168e74108da00351ea558e3c +34bc8bdac1e1bc9061a688723bd54f0bd4ed7c165f32dec016b056b7cc566a4b +1c873e36ffdb7e29fb088782ce60524e2d75cacd23fc274e307dd1d2b07558a2 +7f64c4742eb3ba451c8ef3b6591d193d4a55a42fddc17f12ec3aaf51de8056d2 +80f09997bb31a07d6112a855dbf7062218dbe89a6844a006f23899f98624ff6c +6c364bf079c4b3c2f92cd79534f89925cfc55016218192a98cdf6cf4fe1b5fc6 +9540ea49643891db45a7a71cbb85f41035f507dbc6b161f7f1eada70e7905aea +0b1983f7909d5575e3e7e8095bf0f4978217b23f329f057f1152ffc14b9bad8e +cd6fff8598542a6adabc992ab3563f424d108d95abffe9977f09630ef4c6ba01 +90828d34098bb40bd230685153e7282671478138e578f608873d64b00eaf1339 +6dbfa02de3fa983735d90fe2d0cf7d28bd9f35a475a6f55017124a58988d00c8 +713745c7c999ea746bc969d31aa62eb0d722cab1e57cb0ee97cb969d1c3c1b41 +cced2d7ad87df16215f908e02a358b725eb5b234fd620f7f54d70f764eafe8a5 +de65e3e171c885eb012b3db1707c76724b62bb0c1a51be0b67179f96a46ea538 +17bd480e774c31fa131141e017ecd4c1864f62636127a4c7e9bdd05679462314 +042f0858441e3d261ded65833d91d80a6ce303de41060312e60527a3dd45404f +55c93a9535c3a393f1748609b002be9511d87af20c7bb2c4cfffe466df21b100 +e20172c8215855aec00e3680c7efc58128a95820085cbe598b9603c70638e128 +bf0c2ab7113eb95b62fd40fef845b1eb5414737cd94ac65970a4d6dc2726d2ed +2ba7567155154ad30301ee997a3bd52738dd17030860d3a479426c652cdc22b6 +2c70f185d812543f836c7d0253ebf8788cd6148ffc163699f72a85bd2600cd2a +72104cfae46c836939c5a8a6584a58022d0ffbbc1d1f035d959fe58013611cd5 +be08db068630e5a4c5fe915e20e5652bcdcc44f0ce93221ae09c55fd565c2523 +79189a85ccb93f2d6162402f2209df604f140799d7e0b34639149eb5e54c33c4 +05389d46c775ef19519f1ad4a6f63a62435c090d8e3bdcd6423f5b7dab32d263 +165c93dbfb1af542af08aa5ea25595b3d8ef053e19a16e5a1b13f437fcd2586e +4534aafbbfe1e76906e832c6d1d47a3c5c868e65afa7af2e21e54ce233170b0d +e44bf290c512ff3acc84f0e492c73a0d827d701bc9766abc4c08d12fee986020 +d06762d4a0163a976031bb13e7e86fdd3101b8d5155046ad9d82fc26496661d8 +8cc516350229461d6c11114c35a0d13a1c6ffcb96fdd56105d67bc5666512de9 +6aa15713998ad53064b7023f64dcbec8ecfee625ef76f5a024c92330585cd17f +1c3f82bbcb509d4d31b535cd5853d803ab7cf1862e8a87cc3d6557aeb7567ac7 +9ee04bfc8a445169afdd1b1375274fbb78ce431ffb9c6fd61a99a0bf1b41c19e +1ccd5dff38a45647d51fb014099c74ebb11c5a07050078507d45a1ff1fa2e178 +567f745448157bad850f1fdcf9a37afc8968120892ebc0f85f5dfce9116a7108 +b5cc34c5d85a91a65d18b9093fd27e9778ce26bd93644e4c20ffad131503b509 +850f4fb260edb6d8cd0bdcca4beb8a25ec1fa44eb5b31e9213d11d0a42d1aac0 +650e1ad3880d59d2256a2720081fa2a7482e3bf1e4f4afa59ec16b810c0c1cf3 +2cfc726205b285ad7cb21d7a59fbe526a844a5d75ab5d61a801701c2984b48f4 +ff020607f2ce9b468df2f74e04812262943d8932d2e3c0478afd42a8a04eb7eb +44f9dd70b1da28153f4f366df0fd25e89f942aef374fb9bd31d9575803c03e57 +50e5e75975f108b6c7bb770d824e5eb88d67dac4526d6e4df1c6fca0a5fce033 +84b06624e906912a26412b36cb177fa2dd18279591a0db289d18b1754461b97d +076631b5d598cb2741652bcbcb9804e1d01a8502b03739981b42e4754e21287f +ae2adecc9ab60a3ba753bf94d1b586c0f689309cddf12131eb442180c1c25b75 +05bae86b985d6975d1048d3da9ccac02bac3e6d8a2748082e252167809ec7b81 +7cd72fd364f27f9aa276cd5e70edf56cd5a0b9cd00b815411c766b67dfa424a5 +1d9a9c7e27cf57e513965379e180f1bb94b174bf827dcbdc89ffef77f5e2ffe3 +9f1dafdb747f003723dfdfc91af3c6c23619237e4f661de027809a510242ea85 +d9b93733b9276e37c01da481bf86fd040b2a21df21b3aebd8cb974925ac339cc +110b604531af29325b8d844305196e5e1366edbd5e6196ddfcfafb27e28b1adb +6c2a3fd16d904a1ffb4a998a4614cacc85157d8463f7cda5363f5f03b9141bbf +4788f8e92de9680f3fdea66415c9ce8295c8a1276fbb9b57e97f899caa8ccd60 +275e20ef7c0ea888cd60bae018ab8d59d4b9b0e9a19d71cdaa96392893a7284f +6d94291130edefb156dd9a7d172c89b881aa5dd8d1a4d9177640bcc8d308a801 +547a4fe7b75f04f99d529c854dc059641c7652132291dcd0deca5ae1044880d0 +4a82600f293dbce78d2dd503a4b20ea39f25633c216021b78cdeedf51fd73c9f +ff3b4e7b637e90de3838f8aa7e1703cbb6b5c74e1f0ef474c9ecfedd79d0b8a6 +1559407b87435fad2ca5ec36b170391fea7cde5824286f66bb0f2b14431d2481 +0fe6b2a6905c2ef0908bdd4b05a16c01c00b2eae7bf294251633e806ba08d21c +3e1823e8c0e9b6ff171c19f2d4b27f070389606d90ddbe0303133f565644c8ec +d9dac4daeeeb490b2dd2ffecc57d69daf3fd4ac8666adc318c245e14f5e67d44 +d8941a967696da623d22c077d7484bb1c9029bcf536aa060626df3d5593bd4b7 +af56296934d03d03c682426f00542ad5d3f9f8631e97eba46416979b6b2fd5f4 +4f19b0cc18d28d551fec3b3fc5440f3dd5a0d79fff8df917dd515f68eea2ed9b +73fe68e395c7fa2cfcbbffbb4a7cef13b875b96f5e805dd45a7c8d3e2eaae5a1 +34e00e26988281b159cd8f9d31a2f15246efd8d927e881a173487df644cc7656 +b847682c04542f35de33a7d638b5a2187a74f036ac693e4ad95142e8fd852899 +b8ffd2405f5d79af6fa919f2613c2f6f4fb729f5d6c3fc8ae921eb23a0827667 +11432b8e7ea4c6c823b57acb073fc00ae93223a0f893bb8e3ddcde28de69cec6 +5c0ab65d48799ab8d1c269ce7ce346d40256992947b609cf9d3da1d758ceb593 +1d6f05acddafc290e2b59a93bd94507be8a4d4d675dccca80891ee13846be24b +8cc4f7052c5de700c953319b29aa4b87ac3c85377ad31a14584ed6970928e850 +5819d527dfdb85e330a5cd47a60932ac93b359bc0921ca40703f8abea6ad6d63 +83f8d2660f8c8571c5a13d889437d12d6a41552d9c4afcdf2fbc2bde8055d681 +3b7be320d48247a34cbe1b84791d2c8e9c417777bab9869cafea2c522c59b12f +23cd59779cb58f047e0b81fe4d42d1f4433dae0ad691b9c26e8f82b5ab867ea6 +fcb2d7f2c0718610130ecb7ce93d1ec2eddd2cedf1458412dfed5f7f067c473e +aa0235862bac6f8c8408c0f61d978312fc1a671c292620bc863537d286a60a22 +03a2d5dbbb772b365b925b9a616ec398359425e3b935c7e833e572ca8ecddf98 +121a7bbbef3f8e262d4c08cab12d97f15776e7e202f493e2e12b87f2e421e5b7 +6e3db0ebae2f1e62239072e98391135f5ce4141cea6d7e7a19ec1236b81d1ea8 +0fde0b0f2fb4aad1fdde1a004ac235c896a8a5cb15a4806401727e7dbd148ec5 +8bbdadd754e31592c37a7207a82989e5405a7ac58067f07932acadb77de65c56 +92caff85e5c183181cfde88b045e596cfbca6b4e0d37e6b881bd3f081ccc4a04 +a6d576b41e277b1eccff69feeb5253bbd9a8e11b554e496a16f714ad3bd963f6 +b8425f07ca5de122de2717d09917f19ec3238fe557c44782caca0e4e52f38b5f +7c207b180b498a8fa04e66f6abee7d7e79fae9e54cf566803a885db7488506e3 +8727b5bd772198624051c64da3945da5e904788ec969dbb890f264e54e2c661a +9574347d34634550d5b1a1355f35140adbc07be4d5ca5c791cc8cc01c4b26875 +26d8937cfea55684de8165b792f7740044e50ba4c19677a30bd453419a7b8d46 +437f44d206dd8a871269c903d78bfaa35c4d1a054d0935afc44f048da40cdfdb +5c15cfe9c8f19cf87cb93a6594cd394c7f64fe21cb599985a69836ddbaf80410 +4848eb7252b523563b1c24e57d4966d1eb261e4c9c5ecdb8547e936506175440 +381020593bd8cbce659a7a345a4c05a9790df98ef2bddc9fe45f6968c49373d2 +d55cbdb4de22c4f7d53f8263843f8690baa842f6f1bc7cc1545f3e0a169633a4 +01e5656f08a48b17a69d7babea61d476ec62fe1395d1c01988926fb0e69326da +c69b5e5347167c0541f226d4d2d8ed2b4828ba74f3939a4b77dea31d881c7b70 +18e1c1b646c10a935807e6d3a9e6674aee575023f941a098d2df22af754b5296 +360777bd1a5b1a8fbb29ec9ad201dbe0170850ecde219ad290af01017f26b777 +56c14a5d3ebe7ab8560ddf0140924131cb0a693433437d4a17f33bb22e92503a +337de079b27ceea348d9218278870e1404f7733200e31de980e38ffc55268921 +200bb4a6bf116ffc94e5d68015c7b0957254589bbcfd6b0d7318e1983d18bb22 +982e598484b2c7c7ca5b08482cc0f23f74d1ca4baa5bc61d1fd9094b860edffc +44c5bba1d314b46d6c45a5a1ad97706893733a9eaab22bec79f4437a5917beed +f24271040da4386867c830621ffd6744ddfb078caf5cf59e7e7fa456eac5abba +dfea921d226d36cc6d03c73716badab60c4021630643824a81ae62a731d7d647 +69749ec4f34068330b11d2f9664f56ab8b8a91864a3a2d2680717a6f7ebf8785 +a18fababe5abf9b1e759573dad33c4a968505e887c7b0f9bdf65db75bc04c8e3 +f397740b94b07dd154a5523b19b87879f8f0466d8fc9f3acfee32fba47661417 +a6a97aa66eb83ab06a8347a76890bc83e6bbb6de46f007e7ddf4c316e904244c +214382939b4507a69a29fa3a60ad96e420d6873f0f28c8283fe85c59f9a5ec11 +0001740aad1de7f7bb72ab2b699492b5b6855c1bb78562caf497ef78ce8ac3fe +b5f05639785318ce1b7e9ece0f28d560dbda6d134ba8222d94fc98e1910eabb5 +b8ac30c4d0f2574f2e83f309293c3530ffa08d140c4b568e1868c7b5b3edc79d +716a5597bc45616e2f11b4caa3e248fb96d9e84afc205280fcd76842b913fdb0 +d22a1c741274af30fe94c29a2c690e4e32292220e58e31e815000aadd624fee2 +4d72625d57ebd75a24ead23e75889bf3fb35738516b3b77a6fddb6590ce59804 +6bc39e4e9ae32ecdccb0bf9490ce9c8cd23e997a63bbef088fdedfd9ea40f21c +4d89f264329c674689a8536d83e395b5c17e6714cb48fc72a4879e525a954048 +595ef80d4b03d92f12664b841e00220e3a2c7abd65457f95d1d6b53ac96e545c +25b8ac77d8549bf343fbd27700f1d5b344e965aed917c82211f723410c8260e5 +ec603111b03673922f118f1b41f1b436dc347909355467db3bf0dee4a7844c27 +5b15c9ffcdcf334ccde89fb61c58e42848582bd44e2833619b0ad907fdfaa8b6 +97a09f114e9e204db7e2319a41a5866eccc8665ef6d94a9abaf54a71760bcae3 +f253f7079fde5e138dfa210368707b963f0c4ad772d30e1b56b969d911192482 +e1c3484f52bcc8751b4c4a20430316d90adb8114ac02e8fa845dc66978cdf313 +4f1c58be8a9c2990a1dbf0c1151996d1eed8dbc6f35d4a0a5f44c22515575d32 +6772a70d00dd938360ef9940beec9ac9a9aa2143cc02c3c030fc6288ae783bf9 +e6c6a04cc0549e2e0108807b31acc0def31458a8b32096d5ec0ea1e9871db2b6 +35dba89e4b0cb6b965c48be61d891a0faeedc6ce4ff743bf826f524d4f313414 +9368b2da65c9c14546084d955e937ac3ebeb5823d90670e2480b29402d0db8c4 +31e12164912a5214b439d8546711a39648e652d68cddb4c4e28aec95cacdf5d5 +73a7141e0963422cd82cb1d4568ff99cd8cfc938614f13a5948add5d8914dc57 +ac6b916f4fc5fa6b0a42f35e7c2120b623c61a6b95e35ee2c6040654623d2e78 +f2009bc55a897e0373ec35427787370450bf03ee788482396b09dbe8e2ca8d19 +dbbd3d71115978044e3568b63fe15d56cc5b08767f5a72861b85262e8b194db3 +5e2bd58275c19de4a46f45b3ac0c297a9e1d8238cacdad6b8728fc1c3c7c980e +49e05424f7cb02991dafd70e277388591e3e34923415c383d62cb366dec6f2f5 +da863baefbece4000fc620227cd325071aef5e62dc3e4bfdbd4915c03e686d17 +371c75ae25ac8cbc6683a378f9f617d19725057d84531c89cb0bb686bf9e66e4 +844fc8d6ac46b4c309cc74a1a948bffdd1d5d663672ccd358c9ed2e21e72767c +16a968605b3c403d99b8bc2bd8d9fc41a1f30a692a1302943db69e5b9c69076c +51233bd6963cfa363b280b8499331c172abef2000c09ef43f04db75fd5502a77 +b0c1027c3fb29456f60b56d7e9983e8574b1e75032b8605a27a713be6e0106f5 +fc61ff596c600275a27a13140056fca17426d235e71cb6c4eaede2cac9529d0e +e0bbe303ef02bd6e4cf0446fc21d90079f91eab4484a9251bd956483113c5eab +36e7b8c94cd0dcd6c5c82a082d335665b37effc612bcb5793e7db4a831b51ba3 +2b44f1f9a10027a92cd92634c93167e88b0564498af080eb0e1f92bac9672986 +ceda766c4d674cf74a1124f9aba60cf8074b493bb28cc379485fc6d11f050dd0 +80a6fb444933008df47b50a0214bc210090f9a0cadff94f254e58af23ed76340 +34eba92a70693c7288a79477d7e9a6afbe342867ccbf6b44ee7c9adebde42793 +e4a59ef5953d031f33fe4f12652f26a74b958fe4ced8e6025289027340bb27aa +946ae6445d6c3f79147c67393cf739061c2417cf81c75f85be80c99c8f37331a +e6526df9d46a11c3c1fd15886f07ca08112fe60ee83cea46016d15f68e64bb48 +167cfce032d138f6c124ac0281f297439995583cb9825547be0017918dde64c0 +1d78776bee428f7534f80a3bac7005aaeb2ab9abc0b534be7563cb582d298390 +f47c2e5a6f0376e7312d6d0093bf017f64f6697b18b9ef831b2a29ac630f80dd +1d6cee9eba526f2eab63cd1a53d842f52e58df2815f07f166e7960a410726b4e +b4437978696e134d4cbc80a465744b872bbf340155d9789194a06e891d1a1f88 +7a74da8de0065d6bfe492d1326910624cc8f50405bd9510c27dab17e281b462f +7decb40932108ec5ad173e146a3258d88c43c9f30be963eefc7bfe130beaafd4 +98e339cafccb138f954576ad1a38c0f149aa852cb3f0354fde3c7949de59dcbd +a42a73f39348a8fa776c27b5e23dcb6d90adf52289f3c84d49c185fd5394f712 +0d2c35f112a99197484795467b3215ecc0d51a807fc77d76264c305cb61377b4 +97a0f1dbaf69c35529584a46de46f516fd4d1a8172360bb1e1d0d0c44e158511 +87b471d543e4884c6ae7cb6f5618cc584d1e978f744b3bee0269bbae4dd4718c +ba02513e332a6170d0ea4015dc74aec1ff63a35b13b2bb91233026504a8a328f +ac1e11c82fe34d6d24bd5753caf5f0d8b83c945add3e7b36cd0aed086bcd0e47 +3996dd6f821236d36324e3d387ca7bf1707e7de378286a5065e050dcbfad91d3 +5c82b436b4fdf3736b422c00c6728583539527b554ef64b1c2e6a9c1d17e35b1 +3c58226254ac2a47dd1223193b4e1649095013734c40aeaffbd7160679f8e801 +f18376260ee6e393deec9e0693b4e6b728e35de36b1f40a6683f7e34e6e086cc +9805432b4ccda429b0136dcb4115c56cb01fc85f333204e534fa17558f7fe48c +ad9a89128ca6c821b01864bbb67062d5286283ebc1c559e5668e11f469bc7e33 +ef69003732d1bd8f0b3f153bc22e8b99a3ca9669ebc50526461fe3baca5cfa6b +5f7962fbc8cf0372cc716062f29dc7728499c9861424ee92b094227303046fbf +54aa62766e8c9eec066901a8a54f395beadf01af8620298cff08f20a455416e2 +2247b637c6597a272f7b0a28d616a82e234e49b0ada3999073e77b58f11fd0aa +ef941d49f73e962e9ae57574d57fc46a6b3ba2547dfc9e9667c08ebc05c98fbf +02e2e43bffc8a244136206f481f0d584fba9db1ba41ef8a2e4c10227633aadb0 +846c79c5d7049648f50528b5ad34e449540418ae28b53c3e34ae0d8867ac3902 +9746aca8629d847851a6a13b21e2cd95acac4abca1ccbf5f955e6749656314d4 +5bfa890e77a9fcee0d7d67b9a34cb2a140954678555ee64f95aecb843d32b4a2 +281ea103839fd3860ac5de0de726d02341bbec556d8626fe39e3df189c3269a6 +b73d27881d4bc81c125a1cc26b0c6f28811d4f74bc8a757785053162f64ec819 +4b9bb8300b7184699ac7edaeb491f1f7bf236ce695a5ff56bf5c1f4390fb3c68 +68fbe2d542005635927e401e338b6bf6bfc12702ff8fc951a22fdab1d720faab +e66f16d85889d6a15586b2f53edbc5f907179169c2a8a22e747a12d1bba358e0 +b0fc014a1c42990e01d76268d311e05e4ce5948c42bfba4ce63f0b86e0cfde4b +4be316bb2cebd0e73e26f446ca8478bebc132a064ed117f1a02affff29dafafa +c4ecd8e8e32bf8128a62aae5e7f2d84e6b63435cf6d2bfdb918a5d28ef147547 +f9e569b09b50dbee423c1a7ee40355a1cbece709a13273cba0da2e3825c8a970 +8037c94de0e67d5ada84c0bfbf5b96c0741fa043868c402079df2ffe8b8eb03e +2492ea5a6338a5deb290315e26eaf43086655014ba9ffe48f4d19e172f9bedd1 +218e1164730a81bbc1391615488c5b66d2f4c66bf1bfb54e226df3893a4b5a48 +2f540f19560d9f7d3b32757582782aeaf607567e8f4f0a0a30f976dca0ba5206 +02488b0b7f41861a28247eaa84af240a91ee8a4292454f7c3c05ead6f814bcb7 +84b96a394e834cf5ef4dbef50ca3d287409b060f767758d95114a26b1613266b +6debb528e85d77deb7f3bcb8a572ea917bf39aca584c4f841ca622e6e06ff8f9 +e8970dd1c9510c1618d01e1af0baec26c3882b6eb80a7e8f945ad9abd60911e2 +6bcb6aaa5f0ce78068400f9eea67fcaccc763770ccdcf7477f32dcc49abb5566 +4e75f91acaea2a9141436861ecbc358628590b2adc5ac76f1971818a49383737 +9fd6fe8d74e76a367abb6f7b624568fc7a4e2132513fdb1e66e06b9f81067e91 +3d6d1e5d95e052d569e75164830c1cad1bc168213da1cd06de144f4c714b0e42 +34ad2f8037115ec2c1a8fa611ee4094accd1ac585bf7235b1f07b6e2b14111a7 +409fe76c1abfaca8a35436eec605e4b43760883b31c6ef176342f834647de59b +b54c16ffe522bb5d71f432a253b966587dbc5bdf85472472d9111b8a23c49285 +391771f0e037bcb24a5803b323a27f6f0aa96b46f1c23dd91cf899bb59b2beaf +6ba551cacfed10663e3e7c6e7dd856ee8a3aef30b0dbbc22aecf3b3a8ee10fe9 +873892898ceab62300309a4cbe779873fb3bc7784a159e02ecb484f2016af7c6 +bff8798c7f00bdf847a6fe0e317465343b4c1585d03f83f2aa56904148de6d90 +65999bb74ec61877d74bb895b7dbb977d88e55fde157d4e0176416b03044e895 +655fcd0d98ea455342ce0e27a1c71c9178fbecd2eb6c35666763a6558d297fa9 +9983a24384848911542f0fb3956c7c6761b7e2b8588354eeaac4aa145203dbc6 +2d3b319538af1da0602ec260085ce3256b9a0ce6be0208920dc49eb2954ad6cc +912846d093aa398ae77075faf578d0c86650318fd8bfb82341281507691449d2 +b498947c9ac0c46f7676e0ec94a1a7aeab00dafbe8b1a464bdc9b41137e0219e +9eeb5a8c72795c7bc34600c7325efac4f2cbf55aa9b4a996c42dbbfc0329a694 +7f9dd261330856fbc0819043b357343eaa1d3fcf362fbd0af9a99ad57c5cc4fd +a10dd10097941bec739ba978da465599d16b6be018bf7fa1ee3ffff04d35db7c +a7f6acf148a663f999280b36e51bd77763d6a6ef6ff28950a8d4b04590d8b51a +dcb555cc47d92b21ad032d31cd54ff911516f356127e38f2fa9108aff32d2e5b +1f1452901c38cccfc8f23122f4680bc316785e012f61d2ddb468cfa55ac91998 +93a8ee273eec61e760ac5097167994cb9f52e62182fa0845b2fa6779c914047b +41d1a35ff4c499474ac5c277aedc0ee957400fb6643a0437f7f6eace0f512ed9 +3a33686f28bbc8ec68aca9a2bdeb407e975a8524ec3c068bc0a63ac6779cd84e +1d46c983fac8c89073669d02af734fbfddec35e195c1444c4ca678835a54b0f3 +f8a0aba3f3b5db7cefb364f491cd80110b6333f061613b5bcb834a3ceb20d95e +8119457df0838105bc9998b41067b9ce9612825cdf10a56c7b3af464fc4bd133 +a9d9b14bbad06ac3598419ce3537fcb383ce9f650bcec756592bee0205e0ab71 +77b172fc8c15425359e43af5aa75959561e3b0e6ed08ded9da737f3181218d1a +1be1044211e9d9fc86f23f48ea8dabeae2de9ee4ebca14a734dfffe643c55875 +e934dc377f170ef8fd4e83b1ea53026cf1343dfff18fdf667bfdcf21f82a5a3d +d40d34e7c3090e76c1dfc01aa0194721d9a0a3783dda58edcdd65a497718a66f +658a3c0dc104bc44b36a4372794702baadb0f7cb1594598414d5eaf0369405e8 +9726efdc14ce04bfea94bb1935c4d07587400eaa1d565714a33891f3e64c1d25 +fa527eea2ef14dad353c11733d6b0189dbf7c910601528d5bae1f98c01c6a347 +47b9c484e09e03e10e13b5be1d22ab7b8906c5e41a0b2ebacbf640e187468ce8 +af86b096de62d206bbc54492431b8728c55249aa887c01a82219e62e17b62eac +82a7e09b484eca291295f575593607af6373ad85c692e7130a4b652ae5a706f1 +2457875d6098e477354eb52010424e6ecb1b69447261fd1b1f93e72de04e3f31 +7dd7313d7bcd5afcfff4e0f02f7e2dafe2f476810450fa2cf4daae1f85150f6b +df4e5e7ca6533523dbe78054c7bdf73b04c4b562fc75fd6f6e2f9285410fb08c +7bade37df9910ded1d21f0543b24ccf0c1c984a4d7811b8dab97ea56a14e9028 +999c9f71c8ee8fbcf78da616194678da5311ad63acafee762fc268fc2bf79881 +60f1a3a61ec3467956f15085c1808c8187ac5c5cc91b9165bbd978dd45d2c100 +de3fd8533581beb1864ad04e7dd74a016dd77520d2739a1d3e9524c8498bdf6a +d7e9e0571c5108c7c7870dd240ca2a53e30353d7bf39bf075d3839681c1f8eb4 +b289720980a1d3ee6c5bc7349bfc37345b1ad0d770bb12819d72834cbe2670a2 +7129cb9f51973694153d80309e5a4f6f3a0476025074c15b091989d0976b5e15 +858a83818105b144f5097087f3219bcb26b446b033510a955c891a501983b25a +d72cbfe682ad3b64c90853163504c4d2872a88ff8db26c3a62ac564d49eaae00 +c7f92cba1712464281b4100725792f62d16981ec1b1ca7a7c82ae9687c326ee6 +36ff55fd3211461deaaff7dff6bc94b248ea50f86a39d5edc51572afecb891d4 +c893dfd74fa47ebbacfb0d4490b5a8c012db8a6aa5f4531250869150c1c25fd9 +2769ee82670d8ea963329d3119005d280dfae888d29494533edb026fe0f11018 +3bf246ec4bd9f5c0de7dd158895ff40b7c2fe9f8cc537d23771cddd1bfdc171b +72d58e2fe9de17cee61af288318932a6137f976d3804e2fbfcfdbf66bc31f435 +ee1e0dacc8599ef22ec48010d4c79707118da59588bd89557142af786ca66ed0 +a5a2bd6424d137c2352a0fe3ffca8db62656d143093f205c18e8dc761448fec5 +510fd026493991ee9ce12f4b2cecdc157f3bb6bf46509abbdabeaf66703a6a2e +616d5d15f1145ef8654f810b2e30158cc883f04d31798672421afe80979630da +fa9c444aa6e4b242c28df13c80d8799b8916c9dad6eeeca41ca24cbe3741de73 +193674f95269bfb2f832513d434c34704365a3aa76d3f6fae51b8d75f4460df2 +95b64bf0668fe311f78177bb0f560dab089ab5a6fd11ee9bd6faac3e6c5ee08f +79c94b34fe82b1a2561000fde54d3b8fc1fbc7d82392690b2216982e8d9b09cd +1151a8aae36231d9606f2d737dbf282f4f685698e48698815664d0a4eac63dea +f0d58ea4edc1ef27ee2f4995e0231c246aaa5e212bad9a4f133f1752140cd8bd +7e203b235b3f54a74a8c2d8a4106ce38d558d3e9061c34cbbcb5d133820cd5ec +fc7ad5c83bb1b22781bf049a9381bd3743c6ff79bf98a25fbd361dfb8a7facc1 +708d075739668598c9d0b597a9417849de1e8169df8ba2f2dc6fd57d7d07ed4c +bf6f64734a56795c6480216208026a24e0272e871a44752e850892e9fe72b22c +15d83271bc1613cccdf6616838668fa293c564f8dbfabfea0305b7497286fde3 +411e00adaf00fe89f1625c57ac1121927000bf28cf712e55b2a717a4f5d2db33 +c2921df3f6449bfea10d566ffc096450e78807f7611e281693e30463d32b2135 +4d94b8a6d32f158f1053513eea31213d73dedbd3db635e0497bf3ff4876049d2 +922e0bf8a8da35e25d19b6b0ce73eb7da1402b73627e90ba89877bfc16f3166c +5a458aca38c58e7c652926c6547d018e109c4fc5c9961aefb4607e48b0c89cc5 +b373ad46dacdea10a1d503a7496ada54d41c342c36dfeee1dbbe8e7fc3664460 +6860622ae1c90d5045e3a6eba40df23d4eb867693a5c3d25ea2e1c31d8d9e630 +b22140e1078d577df6cc81b92bebafd700562ed45772247a7edd7fb4b99db8df +6aa8ab82b059d995474744b7a7bc637a449cd4175d19116cd1e122beda56868b +f904ab38fe601ee18ac0d56afaca712d10c09763cd21df0b222405160cba40f7 +a1828fae4db2edd32a8e2c5c173434348271dce53562d1c7f96264023f4e54da +63035f84596d3a2a028b4692ef98b3362258c59996c07b04e83b66d7e5ce103d +2352d8404e32c8408a5b05cf150f151484d3cd493f2429ca170b555d7d2be9da +96212b3b60936fa14a71b72359b03bc93d72f9018aab793ea640582b24109e63 +5bae72061eb66bdc9f28a9c6ba27caf470e05e41dee81b43ef660d5baea7463b +d36c47bf900b78f8053cdc842fa4c642c5e313fefa82c1aed58038df06201027 +79450a5b69923a4057d090544c8b343d45be71ecb3564b5ae59e18685679c804 +3ca2680a60ffb8dea818085870c75b54014fb031764e95b666d6ed70b3711b9a +012479e72d988d5cd8f8a95c3d923b9ea9717eb15c47885c7cc5ce411d4adbf0 +8cd49e76553efefb04888f85f17e6000c0d1c3a875b54ff0aa1a85bf1ca4dedf +d0adf53da875eefa66319d47b8b7af2e641dafe9466a8a1ee3f81458359780f8 +4037e4c647a86cc2630a6cb49675ffc1dc97667a589df4e77e3cc5c41215c16d +43691a68f62e779eb70af689ba7770ce5c2f6e060b35c7289e3fe5369ea79179 +8bc466d7c415a0c68fdccdf5af35776cfc5074a92a8f131b5c2423cdd13315ad +a0e4969330ca8b505c0d86efcd3cadb7f5c77c2666dd9e89b9b03023e1db13b6 +34d442bcf0e3df94c239e06e9519c70632788c64bc9f4c0d92be238be009cd8f +c8765e62d5702bd31435c9eaf5f2a04d3e2cff1406337338821096da07740689 +68e4918bd0e5e26d0404e4a8b0169ab68b2980d2eb8a5c1ce0a8c751f5db447a +b0cb1f731aa4c912ed0e07c3fee570ccc6653b649e6ce447bf2fa355ac39f692 +b54d744d5a6c1c03249e03b298301941d89bf065a2b30a0c3aa993ad18eed0b9 +cd70955aa7aff8003711178da2eadac58cefc9c1e0e4fe7ec10ced8be8e1b40e +56effc97fcd8c1e68230a111da8d36806ff8c9bac32c879fc461c4cce809c49a +5c489b352f86456032a19b6bed07c13089bf948d32831f2ed25c587a477f21b8 +ff3bc437460438312fad6141cac9311bf29dd9f221b7a0cf442b48ef64c810db +82a097530a129f2e087cc45cb96d8e7a9b3e761d3f3ff61f8f84ae47d6a2407c +c653914a9c1dd0139f299c84f5f964e6266edfeeacabc4f5fb89b9189b119ce5 +7c8ba8709b3f3b73e9e152de57d9be8c3a339ee8ca40c1bedff6008c158d777a +611b1f2a7e8ab0b52d211d7a8998f6cf2e59d5b6ed0f0ba65985353d2734f025 +11d235720b0860e35cb63b65657f2c002fa54d6ba8054cd94cb450559bf18ff8 +41f886d991d1298cec09ab4bff98440cbc4977521f74c2c1024eb76c6c827b20 +64af83474d982ef71b5b4d10ff5e99f69943d9ac4cad444fe5aef239e51d0bd9 +2bf89b9aa0462413961b459b1d7fe25672cfba44da5d787590db7cf6f41bf8ff +f568147f252935fe642f45be670a1f5ae82a53d6e850e6a0d7a37efe8b6c3384 +7df10e6dad855b05d8cc56db3d5b457cb44ba2061ed18bcd714b6ae4cfeab6c1 +f44a983d3b09fdbdbcf49ab4d4328aa83bf6d35136cbfbd7d9efb9387bb43859 +82761e4dd9a2e8af77f8f975b08f158dcec98b861a7da0da7b72c54fc7f32ded +961d8a402150fa9936415195a5d45da466d90bcf96269b77a549c615291b4aa1 +9387d40c6fc1befd017e98de8f8353e8eedd53e13f858f5b428d8d481d43b23a +34cc07b024e84e56ba46df541baf7ae5444de3aa77a387d27d5149ba0d83a910 +44f1f3692324fb3a7cc2adb22d5063e5bda1979b7cf64e264da24a21c636699f +57b75385698366c7a44d025c4d96735ea99cc446bb20371b234bbe531aa36e4e +2d2aadb8e6282fbee95b8b4b71f90f2d7d6d38c9030428b0ff301c8e6620375c +13828b08801a6099924f114fd3fb26afdba9100caa7796f312e5b98b9057a932 +e5789fd8f710032d29b526c9df47af7023d4acaf512e4b7f4f2d13827e235821 +3c4a8e0224939013a38fc7d73fd599b1a7f2fc9e314118864621981243462328 +61e1c62f8ce1d4ce8473d8dff76600b670e7649fbf8422d09dd79b80526a6284 +e74b3d04f1ffcb2a31bca539a25b64754f893b9ad03d965b5fdab567cd967320 +8a1511b9442f896f0d5d5094649b6296279549ad3699f348796aed2316194404 +e0ddb0d0f89682de1648f4675c2d8db63b68cc653d390fe2333ea0829eedd9c1 +b6f6a945aeb5ae4d7973756eb8297231c9ce5213446345bc133ce5b1470c6b79 +063c8877442e16dbda8de7c5365a9c8a91a8c9c99767d15acbcc2b82e54c8784 +7c93f7a51f91c2dbaf550130ad4dad6896d9c1d905aa7746d7af81b7f22e4e9b +18db615cf7e7bc813159f5b125fea93787fa42db2b4602432c487bfb49f29d3a +71ce1ffd9c30206b294f8281f58fbd27218317587316c308ff6f719cc347dca6 +49536a86205c1273edfda12610b212f375b91a841657a3e9b9a359d398edaa43 +f21041a76f2b2249e0f07925a996b24d56bf902cd2e6a2ea2b21c1840c0c1a2f +85c98789b1438292bc27dca7dfe417258144d267c15b53532e49023d620b4471 +da5f47f99ba092cda984a7b9bd308b65fb0dda4c92cb84fca3e5086df0100ff0 +7a031a99e1b432fdecbdb2136e29faac53425c65cadb7ec198da5cb63f6e652e +c84866add1b4f754c639ed962928edbfeef1325fb2bd80f8624ebc1465fcd609 +0931ffbedbef0aab40593c54a51d44ad7491e07d443ee0ca86167233de12657a +34a84d7a96e9b73698356f5b7010eedfd0190287810dfe3bf4b75dd58e98ce98 +d10b180f754b686e8ab4c621e4684b34680d062bb6e93c5676f9637d72520771 +82e1f2d39e889b03785b28928291fb0997a2a859c7e732b27cd15ad1b70fd13f +9200246496651f4d5580c0372a946a6a272c7eae3b071afca478e5f23e95f950 +f58ac0bdf7dc5e4ef0616bfd8e2b51fd5d2ff5ac5a816c4f79efa4a4435ff54a +bc65250ec3ba0671ec26fd1179edcbf4198b5dc25434170efae9f03b5e6da69c +f9d7c08f7aecfb5da7e493708e51339a7ede11d3de96e97300f97b550f84fc78 +175fa0d6ec79c2b29cabba67356f91f43bbc1bb659dac336d54a39eacb36038e +29f8c412a4b8ba0272c2e0bda184577d41e3e257194925643c04ced8484e7f3a +899b12a5d50b058f62578cffb5fdd06eaeb05def00d246c2a7233629efe00e24 +1d5a9e8bdb053c506cf1ed8d8305d4ad7bc7575d84fa8cd1c135a6e69ac8da9d +09b0115a6110c6df36f7bd530e6f01beb2730acffa423c64537f419bfc76e56d +099a956ee260ec7848be76d4ee19d16eed24b8f0a3d8ce3df142125dd863d00d +8ec3a0b843378fb2c3ea865cae64914acc78f8951503547690233b4541f3f07f +a38bfb69c3747cec408346d846d9a94b5e259b51833e258f78b8d56562190a80 +1e649a8ba76fcb180b6c93925e26d258c7c407262739e0252e1c41f4404d4e85 +458d6c0c821b6b5f099628edd92ed5e49ec2e72c3429ab2f3e5745d42d2e2d5a +8f110fad66cdc39fa4a5cbf520130e2bdc9cae5b182e4d06d4e14caa48f035ea +f9661ce17cc29d4c91c57d757ee5586400ee768b901c4fa51ce00bcfcfcfc5ce +1b2c8a7dc2eaa4e4acce7692f00ee06e6f9ecc8be980cbedeeefa1de4571dbf0 +2ce7bd33eda192d31d31befeb2af77c43795fcc79b8d8f6cb0c693d3aa6cf49e +0f3925aaa9f1173ef04f03d98e712334039fdbdc37308ffce34b411448bdca7d +cbc32d6da5087c881d55e98f66f4679955b7a93c02f6b2960052319bb62c4063 +865b82366471478fd4f07b44d6443e308f8b2296068e4a32301cffa189a2a287 +74ee405234755f042addeee91b058edc49d37f438bb8693b5c8ec0dc84719b27 +c578b0586ee86290d38c1122da90e89102be47e53ac93f3be3fa55132dda885f +4bccd87bdc334c32bdeb08933d4a5e6d85fd678f3858cf91f2338207c490c475 +7ce9d56960d5043b8c6b373bee6c0e173e6b3af58578fe6b36679793f07aaf5b +388c7727d8e04a6f0076eaf9095a3ac2ca87eed2bd7a5c35fb9ef360158b0f64 +48ff114f281f2e8844d0ac1eaf0d3436c5310e6ae25b11e3740cd03ec49fdaab +a40732a5bbc101b84d70449cb1c8880b0723e07bb2ef63bcc66b95aaaa03ad7e +c163bb5e98ba3452d5373fc320fb774b13861b72624b46f92178c2d6212fb3e9 +abb7827037747261fbc93521cf1ba38a47a44efdbd6223a0f3f929309cd4e160 +83588b4ac6a9b874aea87a69a8081c5b6fc2f2f70a6b5a086493b644e5ab1d01 +31041fbd60c970f675b13a311e48b86425a83f68087dfe05a6aa22d6238e3e76 +d31d029915bd11d27dfaab5a3ae95e04ca156d2a600166616ebed20132690873 +8fd58eb219a91830624f6c1556436d82ceba3293b1c742f29fc5896fce7d9e54 +e1fa81bbe5b0ab391b73172c7ce9b1bee7b0784cf4495bc6fcb755092a5f2327 +c164e6d783be38ce46375f27afff4ed0878f8eb46634b8f0d84df58a54226d5e +e4d25edb042bf51bde2ab6c83852c628bc95fb10ffb4cba46678b30f7b108ff9 +3adffe98f6adc255bf4b0d323dbf68fd559caaa55166dfc4f1987508ec46d6c6 +f1db251152af4b9366b559382a3741e8fb0383eea8deeb6b4ee9ac5c9cdad65f +5996ed7dcc672c41852e9891d25ff257dd49989ed6eda6b3e5f762c930fe6d39 +75b412254c0279ddcd9fc664b9cfebbf06c884986340fdc76c8e4eb560300943 +3d2d96a10f09e80ae7b2eb1f74d82bcc9e16fd11617663768f5f51dc464355ce +f33d0c912abc567c2d327b0bf95aac49f503927236814663541abb7c689365ce +75587190537231e16c0d049332d3ce07562cea63b3dc191d68e86824b43887da +4dbeec79ea7b0089f9bf2e61248ad3d27bb881b704b827e303c21cab98d23447 +dc20818fe8a249bdc03d772aa548f6c75925c74287ca9100e91ac1693d029f7d +73027e8ae734e354f2828f18a8e87b13d803fa68e6d7c4a79333b21d177c61cc +6097ca7ccbf700a75ca3b340472daacac6e39be45dd201f4517b22fc0acfd06e +8920c858542ded1c95590a1b5814103c700c13ac904e7ca36aaea572110080e4 +0057ad118b690e48cb8545bd2eb99b06003c1387354fe3947eb5fbe0244e9350 +e7fa6e8da13b62b862b22fe5a28fb5f933d0d97d0e54d2ea8811762ad02488f6 +163c146a53f8ee78478ffab1b9e123872ee7f50e7f8b124765f3bad9c43b588e +27c75b8e7ac979e20edfdd2cf68b506baade781facd7c00fe6c967d84c2a8758 +3a44c786038aaac152a10f82d5fcad2fb609f62c24fad60bbe5e8e0d3c3396f6 +3b00be25467570f5595f6dc9e53bd5a437fb7388acef7cfcbc22689149c386e0 +97f429be6c7ba8d70d8548e796192921b764deed94f5d4de9365d3535901aa91 +6081b7b548c3b7555f8936e343eeb062a2596b3065ed42f1489fe03ed0441236 +eda3796353e768a256f7eb8f6f9c05d9f8449bbe0a1d7e99519b7e119ca452ef +46600b666c010d1f9a2eb21a66cff233852e8fcd21cd475423d32a5ed8f1df40 +e18b1290ffce0fb278066132598133f094b52988a9e3ceff74297f4bd6f8b8dd +cc069cc7ef14ba3033ac19413afb7676de9a07a2ba70df9c96bd135564e7ffdd +6ef470d939c5164eebd1d3824401c6e75b1b5695fbff0ecf5056142cc8afe527 +e260e93ce22b5e0098fb54ca8cb1ccb24ba0c4c8ed9ebc172dbb1b5755d34b29 +d175b739f71d3befbd43edd58f0b3b560466348628aeb205a6db30a05da09ed0 +a2a99eb5126257cd30c90758af231106871da538b340e7d6ce24fb0c43397f2c +9dbc10f18c1839cc15c0e331deec3fceb468a9c6f60c233df45b0c53840dc659 +6a776c43976449b2cbe76e0939f060263cd00b837d21c32e1dd78d1b974fce3b +e8df3ade9b4be5ee8c02bf10fc08f0148177e4b50bf6f1c98589092d8d9c52f8 +2ed71c6009abfefb3a2976e40e700a02b2d5ea69f59dc6598d46ff6b7e3050b2 +983a3e12acc618b4a2d369151b49cb89ca2bd0b150d6faa0ac681c932a7fef1b +e77349f948e67596893acf953df11844fa2b074fcc8ef0b37e5d43a9282f3f82 +92436c0508cadf1b59b4e03f778dec524fd6465467ebe7b064ab2ec7f1e24a7d +20ae5843b6919e1f4bd0215d91ab1ef346fd97fc9e4871ba30f83b06cdfd5180 +79d2926690101525f2361a54983ca427b4a7937b550aa9d3fa3409f6d4087cc3 +3507a7dcc6b5769a8023cc0b790e149494e0b4a62474fcf199f0522d0c0edfd2 +68a3b5b86d600177616323dec75753f4462239d88eb6c44827119de33665e57a +a7a1f133819dab77d51b264df8b9028651050598ee266a645cf34719989a059b +5493aa548ac308eb673f9c5edd38fac3997c4f7249f28883d763a6dbe8faaa9f +ba42981773763490fd6ea356aabc5178f8e97387390910b3310bf74d879a02df +15ce08929c489e7ab1b7fd5dba4b31f4d10a4d5d860b354549b948179339d08f +09459bf54e119824e5a856cd287ee1066a69f78e0846fef677dcbe223357861c +80e5b7f08bff3a08b1d3c18e0fbf66b43adbd1a91e0d609d92636ddc654afd83 +d490b7909b780c130d5ce89818169700a3ea8de81df1ace8a8443b4c365531e6 +ff35353f0923afa95c1c3fd19cdf0b9327ca8708ef9c891c5d5c96ea695d9047 +0ef9b222757d150824fe741bc0f9afa6ff11a882da853c1ef45a7f6936fbb2f6 +6efd8fcb33650ded480ee0d3857581fee0623dcd0207e6e708b19b0b93822994 +0151e373c3d60366d6a1b61f42ad9dafb751e557a7d4488ab09acda685610bdb +4122e2ae576196f50c38a26a757b2b6e6ebb332a62b98c801fb67bc10a97df07 +f5b6ee43ba7a1c4583439a69b90f160a46f3cd05ee9d58774ccb8f11f8a1bf9f +736579cf2d3b1ecde9546d86aac7e5a9602bc9cf2cb68dd3264a6b12f5d185bd +10d2cff08d2ee240c3b2d4ae0d5f93e2dac55b8d3adf1166473119c3ea90cc51 +bb7f28012b48a63ee7acab3e774f043a008666af6d0efe9460c40ad82ff85ab3 +cbc09e4cd5867a52e25b1a72e678ae7cc06f6d8f913ac783749f30dee5feb866 +5ee18012b1c596918a5869a2eca7539063f16bbc2631f4ea99f041fc64b0be69 +82d3761638d1dea2ef828388c0629e3d953ba41816bb171d65e4b99cdb003281 +cd6c9b350577d2a922144402e90d8b2ede231304f055f7db115536c6fccda5ca +a5f182bfbcb454c4d45dc9754d04a0e881fd03fed5383d8b30e8397fcef19169 +df94e71ba1689f4cf42e60fed255e8f49ab1c90a7148ac377807e088bf4a9110 +afb3a02181f44a7caa8fdc61d2fd78fc18883ef6bf006126737d5889dcba8e99 +7223053cf17a110798b1a1c5f319317ae63f9a6ad23eb6d47d61b34c596e37b9 +c1e107ba5eee08c98af96261458d758b9077c3874a4b7ad2cf2bf1d3a8f7abd2 +9533934e5f6adab0b87b68d953fb98e219f956ceb8f172f03286cb84384e9288 +6166b2b49da6e5696f042bb6006d942e34589984e970c2641b97fa88bc536d40 +5155f236de881c851a52ab869969a377433cafade08178b1d1133891e9df4b21 +f8348e0bba155ed17ed3c26fbbc282aa8c3f27192e1cba91e2c461dfb5a52977 +71874292019b743cbdbf11dd1a6bd6b7c1695f774a34f37748d49aa32b5ecf5a +8a1a30e329e2ea9eef8f90bfffa68641bd11d749f5ba343cfdb0181a92ac9702 +97725b3968c8cd20a0af360e9b740bcec8644e4e1bab4cd7a3dd1876f09b6af7 +a90fa670a465949784201096eea610fcf2d5c15f57d39642bf0d3b246da6fcf7 +d01da8ce59b4d349ee76e8ae72fe26a170b2b320eb5d0a7d816488e248cc016c +d9f4af759126fed20f54f6176b44203b3f1c248d9cc0e3c6ce05aeeb2d127183 +e1f89aad8ab25e5660ae88852b0465f2bf00f234aeff78a82abf21b3bd807172 +94760e71a0472d14f9d3445c24b38d72df442b8f78640c55412f21d6b42f7645 +277caed0dd19ffd5941e1a325aad194512d13e144259ae01fea735580c28c4c1 +48ce5ee289d8bc05bbe1323019076da77187d90a35fcc1d0b52e921ebef447c3 +fd0e445d5fc62c809df85bc141fe677098b65d78c29d9f279cab0e7b452d4490 +e93e6c3ce30c84ce73e2c419c91a304d0e265df004b549f73f69995347e3a654 +7e6a0ad2862de39e182bc4e880bf717643165a90b094ab19207369bd92fc3cab +e1b71c496698044f2f1d2d30248eb0de57281ada534155d6991921fc3442c8e9 +0c77c1b1811bb3ab2bf9045afa0ef9f74f8577e48580eb9840354602b222e9a6 +cc9dc2c70f7c7e7ff18687a420c3f2a46680007c14d75fb701e5b8981f4e4175 +fc81d4286920db1080ad6c8d066ed15881d710952e5bc28c444448aad1df885a +634ee6bc8ddb52470854ad55958e179f05e61f8151a6fc6311bba2419dd9a122 +93d6e5cf69411520f281b8ea2908ad8f4d774e777a633a8e9aafab363f426b65 +cd8889d109f0c0ef516da05063d1d3256250eed899d6ecbb587c7b2ea943127b +f76453e581002ac170d6764cf3ef98ca600f07c75e2d124e3faff95fb28e23b2 +3969ed2b48b2be9b9c388660cbef5dd96ca0249dd307bd2044a5acc598aa0bc5 +73a97be07ccf5b6bec78d99b0e97238e550e4c56da12ec2657b6dcc9d9687795 +8411cf3d159f8796f6e9b8ee98daef301c4cd44bdf9da4c6aa6e50ff517dbfc9 +7be31ee0955a1440fe1cf27b6a708022104a9131d6ad031f87143394c7d21655 +2a540ddd9eb2cc438c06c9e38caa404ae87726a1edd9aaefa7e6b269cc543224 +35319eb5556497653b293197f1a5fee96c0c8fd7cefab51a34022eb008dad5ef +e010fbea98e316dce7b94a9a766c121907be64f3759dee51413669aa882b454d +51fb13a4b428d61b3506c20d551a6e96c1b538d6f10098abdc6fb8dd739cfe69 +512dce4336bd31eb5a626457ff6c1495200056c716a10c4c8e6cbf24e5a89a91 +a78d31db4b1dd71d65bb978edae1b0821bd3ba879a646c4e41ace1fb44d08e61 +1a9d945397ac69d01e8eb8e75fd60ca662ae1649346031ac32c3cfb352d84419 +52190ff0f58283bbd1bf4cda15bbd219f22e738d2c0a114e3d50f66f9fa5214a +34dffca2cf6c88883b0e416196e49e45a513994ce8f1abe93591c2b6d67a151c +820f1c7f4ec6a0531d2d13056f35c2c625044abce5111e3f625c09fa566c52c3 +615e8f83b28506f21ec2a9f0d93fbcccd3a2362ca0612bb8ca2123300786581f +88f1632c5aa76dcaac69c8f0140b45bb46871caa9ff1c221dcebca18e506ea12 +c8ca217029dce549a4d34a58c3a5333e90286ce87919665657acec87d268c255 +36837e5b6cb6d46367faa2951dfdab709b2d2932f44561f73545c82e85599f5a +8cd72bad593341e0de99b41b34f3e5f8c1ae749cc7e551f465da293ba7af4973 +35bf4d08a68e7abb0bff04ce36b4571b4212e6b98539da495ed516f0438baf8a +ce13dcb57eeb473bec625cb3c5bc70ae22067e6f9a8b0f4b4fd231110aaf84c4 +a48559e8303e7016c0d02125d73c690abb75c178855eb2cfe2ededb11e76b06e +6942a101a031fc5b110576389fbade6619ab0e05e20b8d750af2241619ff8224 +fd1396f44683f3735c0b83f93da04d435aabba9073a7985040bbc0ce5094ab39 +7579d5bf618b518ca8b1c4f9a8856c711aec8ca0609d7d338fc6edeb27fbb400 +db045314795a74317812652d0c1ffb1fcf453d5d769df6b38831c3914aa0d5b9 +ad41e0b7b9da3074043926028a84d1b09f52b619703814911710cd915e3ba310 +d17cd6d1e5bd4b7a9e7e3fa2f9d0dd50f88b50c895f3c7cea1077242cae145b6 +b6311f96996d437e369ee8e46d6680affb65c151541ce5e2eab2c851b693cf8f +2b304d62d428fee0c99841d4518fe2f67ffd0a26934bc70b2d970e0dcc13892f +d3b725ef5a946c273da4714ad1b2f4f54f1c257511770cb2bd0c010c3c8b03f6 +3190f52f50bb4db5aa56eacbc174e40452fec845b974920633f2185bb09beb6f +f7f1be65ec2fef9d10313e6830db245c9c976784acd842f22c9a12d51fa47759 +d9c0db2858e0ac424e923a48e89eb55b4d8ec738caf394d3b4761a1370fa496b +6d318f951299eccfd3de0b94ac27a952911e165ef590fd2729cc2cd86e0362ff +f5b51dac1c08519ea8fd5cabcc45d1672f3f04d1e463acf0bf4125434e72cc76 +e900f78a48609069187cc80acb13d0f177b56280d468737cdfc77501bd9b4036 +fb146ec5319f7a3d828d5523ea007c9cd545ca043bc48f174f72bdbbc984b40f +f6d51401d414fea2bb1ed31761cd919dd49199c0e0d0f1ed1f00e8c3b59659ed +55a1bcbc97ad9195e1104af67d4ca355c0c37ee8fb6ed7be5f5ff6a68cc2ddec +49cbbb71871262c4a1a7cfaa39aa6c86002050d91f7cc507715fd6b2d3777d2a +3b9074928121dca38c6934019d4fb8401c4c2484dd0c0145950067025edaac4c +67a0d18a77005bf9c9f953e9e55344f449278cd75a65a3b79071f4c3f0431c82 +f9fc739fc4f3e54611bfb7fca635a02492dadaccd7c85d8a4465aeb5285620be +fc6180d39c44795748f3fa23b9de86a548feb40bd8658b4adaf79ba705edbe4d +1e5c36ec57d22a9c8d64bbc765b504658c167ca8829e60526239ca6af7624781 +2c3d3b0d06f4a51cc6d8c8edb841bc0a5ed2f1ac4b9fe64e09fa32417817304e +bc2ab036447956eaf189ec62f0e415f7020da9264ce26c5dbadb6dab9166fdcf +56e1e323947513da6e14e111996db6f92e93c429cc62d4744f9ea96cc7c55cc8 +f1859730327991842fcc7c2f2fc74895ec3974ae60a1b3345edd7929761b6338 +5450c2927d83993844e156ecf5266e8bc5613bae81fda0a628954e111db74915 +285e808bb8a4660c098b60f251ce38512910d17628131476de7f1ac985ae1fbc +a382688cad091dde470d6407a0967cdcd26328fa9a28952ba14fc49af8a908ef +82cd09ef940c6f66076bf67250e40b19a1e9e4f164246f6d1324c702a59c143f +53a829d967d83e905f49fa3a64a2b72689d35213f3ac78f80ae21fa415f2440c +4bcaceb6ba89836679103b22bc93a425606d83c43fef202e4d6f20530da1ce81 +2963064da571136d79edefe79ee876a4e01fd64a5466315ecb61832fddcff2c0 +73e6aaed9940bd8d28eb78f75a04dca7235f8794074ccb5b2b8e5099124b91c2 +047aeeb70e8fc5dc8bec6e18376fb7d5546edc7bf20671931dac014c6fdcdb35 +43d15211873ee65f793aeb3291f3e88a603367f5beaa7ee59e862f54add1a819 +1c4b38065adcf525170842879e91529f35bc5f7f78e58f17f870dde83938c149 +b9d15b3e8996fbc2429993e05683a4c7e64f7bbd5a7efc2c9ddee24ba3f329cb +0a7b32180e73cc1eb891104bc8b0a294816011bee7039c6fcec289e625c725c1 +546ac9b505162aa68156bfbf40720498408809e5312b4fcb1505e42effe3d3a5 +04d792517c2b85388280567a1554181855fa60e250dd91af20b44bc17931fc52 +a88f9a9eb5b8c1823ae73f4a7bffcdbef86288b38efb87dcd76ba02bacbc8349 +3613b0938cd5e98c4f3966339748854ee61bc5592ec209de1759a50663bb3360 +831bbcbe02f72cd061ad784137e2480fe026a9c1130a5a557062d72808530bd4 +0b470f97a025ec3b2789b6274ef44b92f5d7a7f138683cc6dfe03e0cd78f9df6 +5fc8eb68eec6f8528ae8a469cf0521062ab95a4c7997f38969541cdfecc7f89e +3263cd46c25cf6b7cc64fd20e741017b89d0298e2c55e9b582e6afcdfa1edc1d +fc65f458a91007254db8a33c38db16db0fb35352d54d9c88d602caca571af64c +b0ce3b21689d64fa4561dd65be69b6e8fb81d3b2e32f7aba81353cb0f583f90e +57df42cfe601d5c05df071b49d4bc7a45df5ca2eb8a1b547d8767a1c0263b93b +e41caa3561b425093e8c8a44034d9553d96fd11e72be93b81b975533b30530f6 +fb7c44a81fc33028d1474d6d04ea1e8863403a4f27da27dbdb37f2af7eaba079 +ac68f395e8237597cd822fed413d10e4bc700e8e3409729b51ec700b17732149 +742fc60c9f5b26b11aaf47d3e80d4c671e5bc0511f8bd6e7dbd28790e622a32d +15e9cfb4739f4c6d67c8dbee302232a3fc9cda721102dcdda24447202601daf9 +f6c374b9b5d687d06c0755df942e51d5522b896292211705cae907523b9e872a +04f49baf43d89c3a4a37cddba1d3f20301666f7bc970b72f5cba25029bcbda99 +9afcb5df7a9fca9e11239902bb4b2e4609fc6fed679f9324c16216e4fdce2f3a +50057b1e73344eb5a8b739788b30d3c4e3ed6336c95c84a2237525c33e59dcd8 +4a08ca60d031829e9bdf9a3ab6dfc6f8bec79e40cac1e69ff6d5d2ccc9c65a38 +bddcc8526320d847d7c6543f29f6f50959efaff66812939136bb69233f36d376 +c01c368e7fc20fe2afd1192229305000ab8c2068d8d2158878144b545c2ae572 +20700483bce6259efaf2cef4706059847bd721da53a0f842011e6ccf8c2c3ff8 +97a477bf6dc659a256cc73f4f3b02f541bffd23439b12520e45e1f731e06af12 +0c93c3b21993d1cfee5ca71eb495e705a830eaab201d4ed332d65661cd38e493 +039f250a3ddaf8c3a88231fb9a92c72e02d50159faeb9aea556c89017a8703f4 +f2bfc73d0a40182597a260cfb29c7cc946780548fa1fbf28d35a93a2393a0793 +1c789d864ef906249c1d36ee78a62512e29a9a3f970f7a1be3e7e566206d07b5 +15135f143706e0b713591524dd318f1b10210cda652d5a6cd43e4e4a1bb0e855 +26157e515df835a962e7fbebc7f51a74d5224d20b5e0472ffb65913d8da5900b +31d90ca409446da57450fafdda1b5975d898b4ad2cd43b9d0660aa81417d2847 +d4d0cf0c9d73ec645e61f16b80e1506a2d2ab8f87a1ae7617d7fe8e5caba611e +ba028b2036b33721f78dd420557254b02c071c99fe068be1430a1fc3a29ac15e +37097bfd6ba1d7f095e98874ba909a6a58a419f82545c65aa70f5f2418fea14b +1dc7efcb3144c4cf060e6bcf0bb68c3830e09d069e83f830e6e4cabda75e9cb8 +cdbe388b0a7c23f7e62a4990c705ef96fa6d95ecfd38b2575b0be70d0872509d +d66bf4e2951121cae49c0b21a13685782a2a83a1ec70bc987bb9a0fa8f41b273 +e071a94a9fa55c8cfce83d1c7d9b0549c6227b8f8c0ed03760f5ca091c29a663 +749627d4038021a7c90bedadb4fa40b8548126986369e04f62c1b9c31624ff89 +debef79c9ca9b8ee82c6db65d8a67fd9c6fb4463e956a1d7120a5bf735902327 +6cd611fae157909073a41db7f5586666efea0c0ee7216a8a5699102ecc251f18 +f26c6630cf5273bfc9c1a27e6abc5156231d8879c0d1d767f6c86e7bb09829fb +6b1434eef852c1c72751010e25f689adadc0e0ec47fb9e4515ee95bb75a77271 +0b13290ca72e10d1ee9ee35e9aecc6f32c83f2b2eb30aaf52d6948bbadef1b58 +7092fede63953a88925df565bbe37456e085bc3c22c2b340d07106ad7b699614 +f7e74dcf82bbba467ee87152378a4ffb6192fedbb103b9abe1d6af8e0b84143f +f2da81b8bd16f4b9c110602129530d051a23df6d993e5f0251429a9dd8bac65e +e13e0ad97335e389f3bfff17b562ed1526ed4ba8f1e52450de53dd275acfd050 +dfb13f167c1f18ca022c2b6a74cf496999b02ffc072a6aa998e386cb1418dbbd +c30ab9ee4cd0ee2f0b4eb816f7cfff1916d0cc8cf278cc8a1ff0501f48a46b6e +8dea7d7242efa272bc744d96dd89c2814c27417ab2d6ed7b765c02d8b9a1403e +3ec34f94e6c198994da83a17ebfaff5e310140b44f9496caffedb1640d85d8b5 +d3e2b2b5ce786f6d910da398db88738498eda315c4c84acd1e3534f6612b1c41 +a27fef1368c001a24ec8b5ee18a9e0d84c6d79671cc362b0c89217158b930cbc +c852b3ba003143a4a945aafa7d9c060c911722bf05018898840e8f72f459ed72 +13d17972624f593de7d4574a1a9c7e2590cf1d17c5e284021472e4c16fe656ff +e0cca210ea8ef7a64190c489ecc098c09ce5d0fc6700ab2b4ff0d6dab59f37aa +8962226106bcb7a416c48170e107f5bea3fc9fe680ad4a7858be6f1184bf8521 +4eb16a7549cabdd7fc6dc23c62f3164728dfbadeb65487fd0b979d3ddadfae17 +06cc49f9e781de915ff8d88ae280986549fd6e8e228940aff26e1263879af4d7 +228c6b84de15ce2b2a5ea3d3771bf8e95c04afa2e922582f3b7b4aae3bf322ff +30a6464cf8c3dbb95a21a4f724c4e59d581a01bd6be1ec8948f82365125cc16f +3caaecb92d36829d781ecb3b6cc69c70b28912a75010ef84402c6245a9013d0f +7f24bce18f8d73b5c2ac9e9d91337bdde61801fde21bc848876817d2cdbd500b +f745bdff95fe3e4e3751b157a590e88ca7cc089ef91d55757792019742bb9cf9 +000b47a1f0d14a1fbb71b8875f7069f246ce622727e771363475a132909f2723 +9d4782bf2bcb24db445a975d7b84c0c0668b0dd8dd990583788bfb5f6a4c853c +32bfe6ca6718801b712e3eadccbb086a9245fe255413893f64a6a4083586f476 +c66112c90d7f9572e2ad81853e8157af2bdeb4d0945c02c046a1f0309ca2c93c +fae5dde45a34e2d6e27f28af0a606c854eea86bc0ffdf96c77df1b89b39dcb75 +a49c09b7047689abe355ea5c2db4f5ec9c67451a4a3b7b92ba4a202b96b1f314 +ba8935ee7497f1d4375fe761841bbed442591f8154a5e9a62cc7091d594688f8 +70f11412ae503e594e26b3a55d6ec4f24b4c3697343f22ef816bd8fe8d13acc2 +c7544368358b2dc55ec9312ec58c536793ad6488e7a410427ea80bee493881e5 +273efb06078b999d66884513052db33f5304aa8a5e35f2881c3d7a3400fb6302 +9997a24ae45d0a092bc78d0d005da85969615da06213333c212cc42f4ac43902 +750caf338f4cb0c590c4d5fbc21d676c5b5c39e1cf9139ac9b66272abf97f0c5 +863f4a4be9c213b2b1bd67aa45b917d919ff99748ac72fa997a52d5b5958b38c +40b3b89322dacb31b2ff49b98c2c6a5bcc5d2e26ecd69659bdb88ffa1e226a74 +d4810d6f0a7602d79992067908c058016b9d0d71c6dbf7bd1d13a2cf2280b7d1 +c5e53ae86e6480fe7fb57efc26de2df4cfb7afbf0a0f6fa6060f0b2a3d1c64c3 +cb9367e1f54d49cb808c1adcfbef9b278095cbbd2d3720f5ded47187106ae1bf +becc86c6676c98a95eda58cad196e2da2bfbb8f11681ba95207df27dda96d8d4 +9943d4554ab623396c271b4a087a3693cae43f944a00bedc65e2c724cc3eef22 +0289695379b2bbfc594837e20963dfd0cf5dca06d8b2452be1fb37fdec2229bc +e6928948e26596437978defafaf1020386c1523f047ac699802cd674359b35fe +9bb4dcd3e2b60b54c70a28a5bb780baeb2a12c5e333fa7315b38eda4d03af438 +ed35fecb6f50f5cdd3b9fc770fb3bd6e3564b49737dfb730fce448a1ab008366 +2ed9113051be9589966ec890c750df83b89f07e95a8d34b9970503336941c35a +fe2f09432285cedc586d70ce35ef5b6b678c2f20b5011e92d285421272c052e5 +4bac78ffdbfa89d1407572c8595e274244973fc29f3c1e3a85fb63ac3ee099c1 +5cae84c945970fbe4f8513055d5803139b8207687d2aaf9eae9f87f459422bce +6fa9ac1b6b7cf09b8529b93b31abdd91a44278ee39faf29974f34ee4d787ecd0 +e689b5076c9113e4242c5e62c01a847825e402376465ba14d12477a241779bbe +659eea57ef267d35ca3c88d34326028bd24747ac2cb6fd04e556a99f0bc44d8c +35137b165465764bc92c9ccb13f77462fdae83fb68a2b36d70719346f56e79ce +5271fb10bddd68982938c5a4be1601b16b32af11586fac8299a76d37ed286643 +18c06a87721cbfa8c5507b6b40458afd111e0945077f145cbbd2137ceeeac951 +5295ee98c1747f3209f8ce643017911a30a0d184889104fbfb01f9f1062af6e4 +b05b489302bfb2c8ce55839f7d6186b081e9ace3799cb323894e9d9bb59aaa91 +a7d78afca8aa91952fa5cdd1c76f602c95c31d5f83470c62e4fd90fc59f72b92 +2fb22b1f4414753875674e00ec274551d88a5a15341a2f98ab8bd6555edac3fe +c5415609051a1c0174e69929fb164223b6cc9171758da0a676a5a95986229dd7 +bbc4f2e3685bad35de0cfe6e42dbc304bd763d8f1fb6557de226e00ce34b6f26 +2f7e621342a34409b3390c4b81c50d1de3ca485e1c56a61d6d13127be952cbb4 +617a079b3137af9e35bf8a65634b212199e232775d98f937d6a8bdf4c8aa233d +5e598dacab2e87363acf2748ca7670fedb4c7f5ce9dd007a0b786e4619a82cfd +350ba74410e49e93a15f1046b34c2014022ea2a44c31ca910e7105138c60a289 +a1327aef09a7e4dcd4b63ac29038cf2c57c5440a355446fbae9c90686493f055 +81a1fe20b5a1d9c657ed6c3a0ce0d363c86c5d9bf5a608e148d2e512b9234aad +295ee956dff7ba58bbb2e2b62bf4d86099c6daceed8859c8f666f758e5533dc9 +63a98e679be18626d5cd0e04f2d92922fd0b1657c57bdd39e85adf80019953f7 +bb5f5c4b7d7b3df072a764e6f1e41ad3ad10d23386ab594cfd17d330c9341e39 +e67ff6cfecd3d7e2d4ba48ffac38572b61bef1f6ee7d631967a357b6299159b9 +a20dfdd3aa5b2b7edb1e686fc8081106912a5524b234b740a627741751ccc556 +ddd0424f5491a7a9101cbb197b99e3e9833790f8a7e65b4086e3f6014f0aa6d1 +424e405a5f75a55bc7d55374fcb4c1f50153f6c3bbae87b0f3af8261bc42f7e2 +48ae94a660db17d3db51527264501e8a5ffd8ce7582c71a0c220573a86181d12 +7346b4c7218a87f9578fba642b365d57cda7aa59a770f402f0c8ee2334360193 +1d519df5ac2e9cba36be0cad1a3817ece63b75eec256d0678799ad0a56f3b56c +db021b6e8431f840e1a2aa9c898c5ee73cec569a8110878612c459e0356d51e5 +8d132726b2c4ca26209156b91950bd344628d7e6aeb7628ae4154ec8cd1cd6e8 +f77d9ae90930427d682fdf44239c52f43d93a5649ab1a94c8691622057946600 +23767f3b2ac73390eda83db23e6d1f0a3b58f09f7d82221d6ef5835a15644a5f +6359a98de0acf1b8c06ec0de6d3c91804bb86280e11a982f4f238651e1d42335 +eac6301249802389fd8b45c30056fc29add3c4ec7cb007097799549267a45495 +9b83099d6409ef78d725cff9e13a0d5b13b59cf4f6d6a3b2402a1f80c1e35c19 +c448bc004cdc88cb76867b97b0156b0988a152eecf47b30d473f731df755c8cd +8693cc86e9f0a1a0dd9dcfbbbc724f521dc300ac50bcd78e181113dcfeb74710 +a70d6e6c9920256d613c6b28b46ab08f82b5af67a4f216ccb31d3cda24d91782 +0e7f45b0a135c50e03fc75e622819aa54c02339474366c07129a5c42f4d8f2a0 +e23a38c34d47cddb09a417f2fb90923cbc508655de01235df27c7eb511aa56c2 +4fcd572512586843ac6a80816816e6dc852a36223bef2299c6a478155776e16b +90031f71d6b7ae2b7227c5d8bbe57d1af693ccdb8ff883730cade61fde996bc0 +6566259af76a91b9b123665686d660ad9de6b292c5bc47eea9d2ea19a2adb49a +7a1cb138d99e4473cf1a2c52579ddd41c04d302a9214c5ad7ac412be4794fef4 +15a5e11eeb5a84ec3a2e68811820e084a0256dd625e6f6a61241f8904bfefae0 +899891ffcc05cb11519da935e3b9e692ff22927da8c03efccd2aa9311e014ca7 +548db11e8e8c8c6aa5aa6507c70ffaf846a571e76fe421661dbd503141431262 +fd436c79108d8c7ca8c5eec44fd9eebf54181beed85aeff4e1b6ef6a9769e2f4 +ae97060298f4c7fede54865740cda6cbaf52ceb0c963e935fc894318b997add1 +977b0229fd0eb7d13ddabe457b7aa8a2d05b2b99421e01b4d775cdbcc820b1a8 +3ff39d8a7c4d6e4d96125ae2ad688f997e5f221b6ecc4134ce16f9613881f4d9 +049e171462845117cff0bb70669a62570e7361c5efb8aa5b6b858d8aed27c149 +70155e3406acdc035b1b9d1e49664a75c8d52b2e8777fe77aaa8ced567bbc904 +a44305a7b550 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/client/shared/lib/fonts/UTI_____.pfa b/client/shared/lib/fonts/UTI_____.pfa new file mode 100755 index 00000000..de07ce5d --- /dev/null +++ b/client/shared/lib/fonts/UTI_____.pfa @@ -0,0 +1,1165 @@ +%!PS-AdobeFont-1.0: Utopia-Italic 001.001 +%%CreationDate: Wed Oct 2 18:58:18 1991 +%%VMusage: 34122 41014 +%% Utopia is a registered trademark of Adobe Systems Incorporated. +11 dict begin +/FontInfo 10 dict dup begin +/version (001.001) readonly def +/Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def +/FullName (Utopia Italic) readonly def +/FamilyName (Utopia) readonly def +/Weight (Regular) readonly def +/ItalicAngle -13 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/FontName /Utopia-Italic def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 36549 def +/FontBBox{-166 -250 1205 890}readonly def +currentdict end +currentfile eexec +a9994c496574b9cb23f8cbcd64a4a16861c70f0f2da82f0c7b06ceacd6521bb0 +cc26f1cf47836cbab75757d7a81793f43e56cc8f22f926da04d715ab6ff2e257 +5a135dabbaaa58f31f548cbe8a76c69e2402589b9e5e46e757f06bf2eddbbe6e +e48a624cbe1c4840a338e90f7efbe9f2194aee1c869bc4cd76e2f1937d78e207 +d8149c05b50ef0bb361f5905977c40be7d4dad07b54e087896acda5aa70ab803 +9dfc55a73134c7f1c9be9028d3ec6ccb0fbb8fda52bba4d7551a8124e68481d0 +775ed7f8ec68d8073bfdd3b67f72ec68634ffc57727e16b9aba841546ae54d99 +b60e227682315510edda09bd6ead4d1652f449d737592c44bb178689a3840169 +53d899636686efc6f838b19f966be5f833f5e7d41af38a899df96fdce1ebc116 +9b0ec87c930d9fdcbab7e74880e9693a24de9c67dbb0dd75b3dbd113b079c490 +60018433ccc06ac1df33fc090c4642fd5225fa0a188c131974ca8820319704dd +14b1719b958779d1475d92e712322eb2e6a79d652c4e3f5833aca3091675fef3 +fde103446e565428267b009d87bb7d6bc40f46b498b19bf1223aba33079e41ba +a9561254a9df97a48d71015b6a24cf952539f664f172d565f39a55e063154d80 +a960cd56c34011fe26e8849c6677427b2c7e728cd16272363d76661b3ab8bb2c +85c20b747519a4431421d4c83783feb896c45688ff7f824381cff5654a1bfc68 +6f4894e1d265455fc00064d08c37dc3a47b59a5b2d14dd893a2b871492b07c4a +591695c8df012ef46a750d6cb7fd86696e7ead280648bd737e9ea490140f3b1b +1dffab2ff8e085a8b1c78e4b9ae9cee277a29233cec5ab2588d1cdaf4bbb6512 +e1b1476c68fd3db18ecc2536968ebebf4333c2c3709ca354f21fffc38c3858c0 +561378a701158ed0201a3b236ca9cb7f7528d1e5e07a9bfab04f8d0fa3d12405 +5ba2fa9dff76f41b980bfb36e8db1300f7172c902dcb9f5f0bba3cb9c212bf31 +76cb802ddebe556f4610021fa3700d476a2be2a66ae6c658fd0a95bc1b9629ad +03fe4e775ffdfa9f87a274fd904c0db5beae258f9af213f257db2be0265b964a +681fc4d2855f5356fc87576d847db274fed9ca5bb4961ffcf53f28b673f50e31 +c3c634604e70fd0895af711c9fa302572eede069f65502f68884a90d9f1ed7f1 +cdd95fc73ca6ae925cce4e01e49934539739f082f0ff1398deafda84c3d9b1e0 +cafdefe5bf321670bfa286078bc066bb1895b1a3f0253abc079b753c8f020fae +ceb70acca52c4fd011825ba3ab32ce9c7ec263b4828d979b57588c48de210085 +e56eeb002dcecc967c95f219728511ccc6c51817125e1afdd3e4a9b35c8e5551 +06a026900808425393fa10ea4b6f4513f0af047d326d80462d36c2c7d033125c +ab05bd0d3058b69f11a1d16f23345b3c97e444ffcfb4b3496743d9f6abca53e1 +b702a359cedda4d78e1a771989290f86ceee70502c574d6582a64045acbc33ed +436871e9beaaefb12174806003037e8616b5f12ff470cc6e08b0af6789b9614e +6ce98441b72e79b0c613e4a01835cb4d61c9cdecde9a66184af5876f0c6bea8d +8280472a4c6a2f38fa95b7c475ce75f8acd6850e8e82dcbbbb96e7b389612cfb +082c280fc4babf5da29e26f1f163d5ce353c9eb61122a10634ca3224261089f5 +e999b1d591d92216afe16a409f7735043885cd0218b4bb7289fb4547fdca93a1 +30280807d3c5fe5abf6d6ce88af04beb42ee031be89efad865f05daadc0ec4f7 +871c1a8d78e51a453a8c4b0ea780268639009c2ed6741fef8c598248ea9a2c5d +f3ab0401a05b0fc35f66bcd6c812087ac03be6cee22ff97df7152681279de3bc +be0a5c3574240a561f667c87a9fd065b788c9bf4e38dce8abc94f29acfef1933 +6568527336b48570be215a8ed6c54642ff28aa5edebe0228873c55a65430ff76 +8502e836e97ae8f2f6ac4dc5eee76beba71cb16389399a34535296a0175974a8 +c44918f7c668fcb07a72c0771fa8c49ab7d238611d8c2eb17a2a6f7bdce45b45 +2616dd51ec465225f83e886237b273488f4ec220d1837272df8a504273fdd95d +ad88d197a3a6e92519eef80d7c18b31df15b9530d96f9982c1f7f870a95272c1 +325b394ec41c9e7fd2f13ce4adda1cc0cca0ad9b068e4d1c92e17d1ebbd4e365 +f7f4a9c547a81470f3ea6386dae456937b302a2e6f9c4553a39ea280895ad232 +57b00bf0b1c9c38746dd5438067ea5ba365b1a4509a29bf938f3c028cd2d0dbe +441c1e881135b7abd353f1b14f225001812697df59ae92b11a92eb68b41a6e62 +637f097d4b079e266a81e6bc30a69d5741ebc518a6bab96ee0f79b9cdebb1d35 +04f88ac6a46db5e7be43a3c290399f00e2f78da44d348c66d7d12ce239b30dc0 +8f916c875e3e54cef7f5f1b966f606d8fa3e072d4a417b3cbd43bd3b644b2928 +626f29f4d369502b63ff43c7be25193bf11216db04ddc2f39faf825a559576be +427bdb147daa9d9dc8a9839daba32fbfbc8d9fe41bae9d7b15d8106ae01e2cf0 +d59c6f8c2cf498fe7518fa7b84f38c6f4be7cfcfd0e75908650f52a107ab7d7d +2bbb6361d5378232b80edb45dfc91750eadad74c9b42a19339d0227d83caaba1 +72a43d3e5c64129284a50ecbc669f29a4d4caf634369d069118fd7a3fe12bfdf +e202f3376727ae5f1a9340d824dd8b76a517da44eacd882063c8243e121769d2 +809ff04b1e23d34d9ce5f496c7f1926cf1b0930466df9076dcd5b82c97fe1b45 +d1579437aa0820561298a96e22c94befa09929f74c067706594eb37375c136e1 +a9491f80c7a0a0fd447f078898778428309ad92d89cae7f48727d8912deba5f0 +d7b49674111a6033b67c19bb92129b7127d4ce80bce642b1880628df772a87ee +5b48f395b55aee658c50ab2c81ab7de66eaa52382fadcc60957581a4e09ee989 +331ca245586217a7e6b0f746455c59552906d8a525f5ba5a07cc1df0c45b6ed0 +95230142ee05ec75e12531f65374f78173615c913532a330659b9beaa653eaed +c0895b65d1a44304e09765cc9e070f61820249b6236194d952103f17799b68e0 +8b447986aea15ecfb780f7717986537516a6ae928648b16a51895f33adc17310 +f0813e7c715368bce559bab6c2292b42198f7f28a2ef66661f70aaad4e5ff132 +07de7de9f1691d5d1235d1e77a71403c2ce61c8f8960c262ea5fdf4e93fe87e3 +b4d7a400080f90a71a8805257c24318563575bedff7ecf2ee53a6ca8a24f8ac6 +e26c70b028f87a1806e63784542067b3d9deb6c96122c644e4052624a9f5e2fd +c04d4c1d02d39b438097040027c0b7131dd5febaa0f09b767cce35c4e4447387 +567dc3887cbe792114a9a0bbcd01c3aeeb167b5ea4e08f2e04eeb67783669fc5 +16e91b1fd880efd3b1e9c1553a2900b5f1ef5f7b6ac7d3574456eb2fb6494511 +cdf324639998efce019716334e92407673b4ce1d19dd9ff89d301a7954e95b4b +11e33d64682ee3a8e215ecbb482532e9f0dfa9859b014711a1789d97b8aa0809 +a1338f2de4e58a9c3d727b6efb754806c2cb3698d01ffda6ff4baf277aa570d6 +524ddf0898a02c508bc6684ae45ced430993828c8193cdf0091b2dfd7d811424 +364490b8e607aa52cf695a4179703ca2ea9d0b595770729228f912fd9228360b +359e298a8845c00bb1fb2aca1abdfc1c570b044bcded5e35986c484f0c84cf37 +6fcccd6374804a3d380b48a6b50506b0f52c51dfa6d49c83c9a2a8bc366137cf +3840355310b16356606f84b5da7783d2f6d6f46284f63f1ca4bd7672e114eb49 +9a2d80bf132de70d992d326f70a272c64f6264b68aa7722e7a0e400eee21e634 +8fc2524eed6e4df4ae7da2667dca0cc4d79eb78dc7db496a7f54564931434aba +a06e085a1d1ecd916fca69e8cfbda338b6f873c90f3440ff8c442646dbf337dc +9631f88f60d4efe91d35df767fa8a0e3c1db3d0053cb419e78453c595d6cb05f +a4205d1b3334183c34b5bc80a898ed9ab1cc015c65189fd0efebe5aea9c71196 +ae040a0598a301c4aeeef4864e4789b1124dfe3f8e1aaf66a3a510705f6a21a0 +cf0de7e2f9a2b89179cdd4b009b33935b87765f3bab41ab667e39b74c3774edb +443c772d06d80f7248bb6366d64b1a408044b55f61f641793436d23b35fd55db +3a8f7d0e99953a6e74338c1d20083b579e534e887994c2080731ef4f9c6cba7d +5ed6975b583022715232c005033ffb24995ccdffcb1f8655de53044fc3a46950 +694b82f991cdacaef5879fbbbc1ba7de04cab076fdc76b7e75aeb177c61143f2 +4ea610269642f4b1c765063418ebdb6e0fd220f6005ce8223f956d6755b7d145 +e734a947ffebea2904bad11b0fe43beb9baaa38108e475ff79e8ac33bc9d7138 +3feb6e6e7083fed7a31f178ba5b930f47f4c197fe5217f9ae5b64c3ee13ce1ea +5db10538f5e54aff7b81aaeee741713bd60bffc2c8d3f7361ceacfdcca39882c +6b0e2217bfe1990908c1c79c59939a2344174f73d069d0bf1279aa30f722691d +faedace1bdbe056026c8c7970def57b68fb8fc30e7a86d461a2210998c103c6b +835238192c02ceb0144f2e035fc89f160fb9f14f3a6772b5dcf908244629ef82 +30fd14e830fec7280100b5eda94d83208463e7358028f83fe2605e7dedb85355 +50384276f3b72f5895a6bd4170abd2bf25d6a6d8c165b2ac5620a3417927744c +2a9798576343f472e6edd840b3082a22cc0efef8f53787167273e0cf926ebee7 +868803e55a266e761dc6ab8f7722efc301fa93ee781e081f4f58e6b6ebad140f +ab33411eca49b23928a425e4348cf705a1e0f4fdd320025f3c315cf0da1170fe +1a13ae53d45b712a3370f2e68051c1381311cd34da1096e7cc8d2c8e018bff87 +45621d8452fd40edaadb9e5d4f89d92b51f8ed170dbea911ecd14ac32be75dce +dac5e26c212d389c94cd67126b98cdfab76600fdd7f36fb51813987daa38bab0 +974d2ff8e114b529a87d187e5d6e782e8f4f5e01342a5d8c95131a799149e496 +9549a3cd70a85c5e69894ea8b544c3df17e4f25d704b96e1ab28aa76babe5b74 +e39b799c88ba47826dd52f55d7840a32481524a5067c247389bd392e80318ae6 +cca790fbfd0d7c6ed9ed7523b80390e2a67d5e11d03cede53ca91580a4f90e83 +17fe325ce9f63b99ba9874c84cf44fd1b87d593bea28b5b674a643753758f9fd +27aa8213e088f885272f0cdb0792cf315ba0b03ede938756d26a025ce9f682fe +2c6cfd369314eecb40063f24f365edbeee61d41370bbec9b08665e43857ec274 +6516dc151c4fb114da529efafe44ba73a2675d1d19b1dd9e696c380379df7682 +42de54a93033c757441b7fdfa404678109b0034c4b4777ff05f4badda38c5b88 +d6c1ce1d281521ed0077f1bafd0426e63b522c3ef1eeeec9df67f3bae4bc48e5 +15ba02efc3be471c0ddb42372553ebcb4863d6625245dbb6c0eebb15efdf7e37 +27335a4e3ad99e4f70e57e218e749f30bf9c9a20f172c40f0532dd17d93eaff0 +911ffbee62309b59cc549faf8048f56afbd6936cf686514b16bca3113d17671e +15731aa12b2ea9c46f887180c3885878a4b59f965f15e1af4cfa20f1d9fd84bf +7d21d8488356d638867f2ce794c2d1b836bd471bd561daf63e1b427ea3e3c371 +1acd9f55e8fd1d53c279f5c93a2da8a8aa80857f1312d2e9e418ae4440a7c4ad +6216861f66844f4ff36f5ccf37e96f76706f8dcf7d2a8b6e76a8bdd30d66abe8 +6846fa3b8d5e8c9b516457aec4036b402bffd6913d24cce8714449de2ba50848 +6d3f3fcfc5f81e9f85c99e20cd7551f1f0b63a04b5d8d9734fbbcaf55b44897d +621b90bb0f3039ef877c04ea5d7c747cdbc9c25b98df15c1ae3946453ba2b8ea +733dddb19f5a1f3ddcbd8d0c6bfa2e4b914249156d26e0e0bf16a088a9eaa107 +60fcbf45dd8e9d8bd7a837c3e4f840e1d747ec1bd31a82172152819011c53c1c +7f2ddeecfa67ae102bcd5b12532bf43d6e1b515b27918c89c32d4df49c3afb6e +3b719f37cf1cc9bd04c45129bde8b221f88e10cef81a75e890543f0a65afb387 +7df9dffbbc8a0bf424628a26a48448e17f180c4dca4c25daab5f4b5fecba8ec6 +24d80359767b2bb4dcc58163295031ff07ffe7b73bd22928f63c62c2e556c419 +c3aa968ba13b7bb559197339835490f2c15d7617578787ceb25e01cf3c7e031b +607a2397a682db4b4ae408247d00136abd2e631c85653f45c833948b48aac4b9 +ce421dfc528d49cfe98ad6f5bf332ea672288b85520b13efdd67bd326a10e118 +6b9e7026afe8f70aa21888e25b6e28ceea8dbca35e168f23aeb233a18d291a34 +05cf105b4bb6966acf3a2ea3395cf406dc6271a358c3cf51ee3f63949e738c69 +3a2622ee7dd92ed867a3c279aa260499e75ce46503f33c62a85404c6715ee35b +861357f1e5ad91e1779f474165b3c61b3f5cadb6e38af59fec5eb9fb81773bf9 +83e923c4a9d7aac4c64a4490d575030e5d1d2c788de808e626968374fddb4977 +954430d7513b84f74d7c16755027fe46e5b9ec95cc3913dcc28f8963e90cb00e +ed7d1af4c8c05c52f4f799aa42dff81ce677d750aeed905ddce7ed886f1e7ca7 +ad587245d7c74f4b9272860b36a76701b184705e7e0225ab64ccdf3aa20f102c +82ba6d86254808c33fd7205f340622360844e19a937645702c923faa2dbd1218 +ee5a8eafe6e66913d3a895ba65dd825c7dc1b579b0b8f6d4bd47de45e5f922a8 +25b20041f7b8a1a55281f0fc44b149f0e346e0f3e1e8fdf5634eed22537df9eb +40d8c8bd63d844ba24798ca2060786679aaaf1753f2350f12c3a984628362db7 +f4df3e4ff03f14be6ca123bf8d4bf43817df72c92dcbd6234c0fee3b8bae81b8 +5d7495a6acdff5033bbc102016c267ba56013a739c9ac62dfe9fdafe427d22a7 +1fa02c29744c713dce48b9e52be12797084cc12dc805dda41fd60578a10a9f2f +0a51b5efa3feb126888d0430649e858dcb9c59a17872602334edce0a92336f99 +250406dedea2e1b1d3f8031b2eca7ae2e96973b852c90b59878faf06286e8dba +f7b1ff75a5454235035d1d68158585cb5f08aa68b4c5971ff0499f0a3f491d41 +8e2ed07b0cdfba8001740ae437674704ab6378f650d84b6b562bf346d5b3a338 +e21fbe69d330a12d69703a6625fc77e4eeed50c3eed7db53553e1183258cb374 +25c209961144262d9145735df60c1e3cee6c21ea9667d328aa6424dc1d0d4c31 +bdfb91c001b3b9c30e6343bc3e6af5148ef219e48e9c49e2d9f8818b86e13ec1 +ef1ba0e04c9a93b509972038925babe2964cc034d5947c9f8232fa9a40999fbc +b26adb0ad1a69e25c896c97307ff214ff08b76427f982d0eb9eedd8cf2126219 +9758b2b07735c086e9a6dd43b4094d320379b3ef0c20bb9fcb691a6fb40b9c25 +9612905890f8fbbe837b1edac168764ae7721a97d9e0ef67424d2fd6166951f8 +00097747f5db43cd16c8f0a5e2041366bbfec05cf950876f7e4462c4231f83f4 +3f14e61553b99ebfa7ad033f51ecf10ad964d71c18b90e360e208ee79f86b722 +d6f062498e4294ec0991b318d18270374de5212418f54a5a1700a19b23a31dc7 +b1c4bf77bb4c4fb26d219d87c7c0ac10a88f65bf5cbb122cc250035499ebd3be +7b839f311cb67349e68cacdefcaf9970b1e22a120ba90bdec02374a7fb96b232 +08619b8a9cb59e86fffb65f1f0cb64579de0cc5b4a1d428c0c4f4b46ce3ea0c0 +3a4c815b2d210e3ee18f1c5cef74ec07c3415f2dee72c7511cb479e78d3a0d96 +aa7f15360ae7455210f4528a18d74863516b1c688ce1e539306e260fcc203e9b +5af0c06c3c04fade53ed1009672d75ddbf3358396868c2225e9460590590a37a +d9b361c5872562a91042a635d8531a62088d1341f9519903f98e339a196c4e2c +8e6ed843cd24fdbeb101f09bc4516a7cfc4554320a9318f10448fb9d10c45939 +050a55114e979f4cd9473af6254311e3f50d619d9f304df427ad53ffddfad0c2 +f849b4ea37eaf66005afa5269d435d1b3362553043e98eb631d8b4e820e9571f +88ac251d767e3e92666f3c0aad0f5a5901dd5f0a72a44ca5f957b40bc29541ef +5c28f10e36b8102e5038c96ca8a7cac9698d6f8fcbb82bc413d364e3bedde064 +a77e2347719c840ee53489d836646e8fd4ac6019d00a045157bf223f32f0e68d +379965445dc50bb7b2c223f2aa12fffb8858197093319a10d3203038f4e16c04 +c62294d51a206da6ce0ba74e5b204656bc172c22cc2404f882e91ad157bf4dcb +dd619aeb837e0bf53c4328e57e5be92943a9dc6f2c5664255d7872c976386c42 +5235e3ee2671789c3c32b7d5e7fee0262a43cde4d3bb98d2aab133429ae002f3 +b71c2b3688d9297cef802a2330b12b1e03989fc8b9d1dbc91a7bdaba94703525 +4efd991952a2be03e1147e9b5ca770638a5778a7a141a705ae4ce474000033f9 +e1ba21d948c4b016162cfff6bca97a7f8f81cc2c22f8011b0cb74e4c7c92ac80 +c7c53ee9c0520d2c7a5dc97a78fe15cee47994362c65210336de52f9841b8d09 +4be1aaa04e39d7f66d0c4d01eaf270e26eb38e09c8b303816c34ffb8cfda9f41 +c03d95d95688a154c087930ede2dfa63ed8f228e3917dcc8722d1f8636305073 +31d43ea9b53230b0d0797013e7604b528215f1a128cdbb26b0cc3fa43e3fe25c +b57c9bf8f8e290586e27924cd20025c54d6d8792b4fa52450684c8d0e131aa49 +2ab0a4fec2d0f91f4b81d74153b5e2e9bcca216c1b49bcff347c57a727202068 +0e040eb5d5e2479209d7e085760a7604544f0e1b541bbc73431ebd722806cc24 +505dbef65e4ca3457d0587c4d4fccaf7f14c31b5cf62ae5f0c08661c9f5cb386 +ec057c82dedeedd54c8f380320831f2d6d9094a5d0075a0c5c203be292231353 +3aab44061f0c75483c8c90ddfe2de61eebaa5c23f3c1e14bead51e741963e5c9 +393e8c906adce443244f5fd6ad7ab164ee9a217e609fcf90e5b8157d27623d62 +a803207d9839752a19da399e82082ded26d15088bc3623923fe5d5bcdc2bec1c +639e190dcf9181e90ddd7a07c773e6a0511f1e268acf8d1a0d985abab4c95363 +c88093bb9f111cd66e7b7d8cd8eca3407fdd45d01d566944abbfb99bbcd5602b +dc8e250247dd7a37f4389e94c1342b5e6ccd99ac4d62595b91b15462dbad20b6 +5bf5fd83a8d8864cc9e75f018caba8d7feb8dbe58766dc0a06405ba89e39a6dc +a302161f88b641a7427aa926d438cff5b5e463309a6cd2abfea827a512d03128 +ec1f323c8a92929a4a6f63c798fe0b73fe59ebcbb1e4614c2d3ea0ce81cf5cc8 +8a6d82334df23cc978d9a97930cee6f567067f7c3877cd46b672d116805b1543 +4a019e47fea549f9942732bd1537c24fdc2f1b0780f7c9b3ef7e846906abd277 +82e21a4a8456cd0a880174efbec65e6eb267a94a9e0bb6bdb6c1c4998d7523ff +eca5ed22cd608abad4f8570d80ff8cb65bca81b09536ae22a0925ec620cfb875 +70ac3a8e19abf258af93113ffc08aa07f0ef6d751440d874b3631f8a4bbd7721 +9a796911b9dbc0b2e1fc5768d40cb8dbcd38ee9f970c35bbef52deec4582d18e +17a184203a891ef39fc8d56c29ed3b9010bf9092c8afc63f072c6ae93eeb9342 +6647475cb38c7a634dae53b14995468e4e39464ad9829b48c97e78c580ac32ae +b2f5631d37bda7f69936d4cfe342279eddc7ce5262969c87e74ec6c4728c82bb +eff94703031bb14d7743d97690d7a2ff863904ebcd94d1a2fd7270343f38355b +ad318250da6b388c644a9f62bf59482d7a7161f5d3b65ad5b41005bcced2c16b +c60f81fb3b013544a32c81c2f455f34cdc12e195fb29631b613d0db8fe3b4957 +a49b3e0382b3ca954a0c135e19cb83b7e29c7904b5852641bb08cee1bdba5a09 +f1f03521a866d99a6b5e670351b73cfb453263adf92a8677de8067ff52ee5a63 +e9ba822e8a11dcbbfa745caf433ef673fbd0e6c7d28f9d3260e2b2d75b888181 +3662efea0548a4f4c2ea1031376182e12b36987f2afbdf205af3229b7e87b20b +6b334fe8615d13b3c640d25b5c822a2270111d964e4cff01f36d2df200f41872 +29389c1482c576422c158fbf2405e3dc0d87d76237f6666e6e89c46b83289a9a +718686fe767577688e8524474e522ba5fe3f6222ae659a12855b295d408b7da0 +042c02087ffab03b422ba9b4bac8c39d08605624026e355fe62328d4df8c5d9a +63e3118bdd69a142412d43f20d23d990ccb50ef669a76a9fc3924a64fbd9bb39 +fda7015bd5b56d3402151be6c4240dd647138bce226f7ebb9b723b3b3e6b3b27 +4da0d1245dfe453bd9ea5fcd36eed1c09e800b20eb206e3f1782d70c67a82d88 +10451c2cdf052ef603a41d50b90dfa15a5e967c6ae7b505b1136fabc9898c004 +5c1043754b8bd712703233855db0895697dbfcec02ef25092d073f37f8f86fd5 +e647c80b0af65453bdd645f92209412ffdf14cb48b7daa02781bc981d89e075b +39c7e8251d2d384835691f495b3d5a43557f1dff58b935246c2c0b715b40d4b7 +ed7386bcdf5be2beecdbb223dbf57c9a06864f399d4748c11b89760579f1e420 +a4e8c67241a8348ef3bd04634b9e69d5dc5015f89b10f7580a008e5dd424ffed +60f14a39a759a0c05e4bc3b1e344feaf613be4e1007f5535a7850832760b84d7 +3391a60001d472449b3e4920f46186d0fb8c8a1b96165e2f463e39e289274985 +e4062504ce4ce8b24764d050c371e6545c3aaad645242e39876fa2d8c8fa931f +73d56e5206d47649cbeae14ef3187d43f6a3bf48bad527f6c01c8b1287edefa1 +1016690d1f50d310d463f9636d6f8514a60337fce30e6d72ddd2f381bf2bbecd +d416f7ad7338fd928296aeb8c58c33e08737974840b690f1e8d6c46928fddf4d +65c07eb4cde5f6b5dedab807a67ee995fdef7e7fcb285ea981e0877da1b8bc42 +fc201fe269c44a48be11a5ee8a365b50760c477e51005db9fde781c080f8ab14 +44181e4a0bc80741530370fc987e7eed25cd1b2de3bd5c53e0cffd67f24f9e2a +82fc866abac0d9e690a0075cb623a625ec6154da7bc0c36431f20fe0a8df2fe0 +50cdb6c3d767b5f640833e7ff56016665ab4d42f28853f5bc2726de5a7372ed4 +8666c51df290f796fb129d441bff05f661a123dad14e5b8bd3839f0de22e44ad +77cc296603290f731b23a695b45f5b930a8d6d3c6783466226fa0a20ff0ac7c9 +f63eea109a17da0ddf5e1356e23c37528776ebda66b0a5ab37b7aaac291eae01 +aadf7c555a4fb77722c0a527b5a711188e28944494ac58f58c6dab6df90971f9 +9ed636c4eba0dbcad659aafc776c3efff28a7d28da972a8bc5d8eeef3b7bdcbb +8de66ae1d2fa6ec3eb33c37e632118bbc8dda3bfa80da3b7a2770908fc4575ff +de9b1db2fa31637a13f8b97e73a55f7a975fc836eead6dad2453aa31d00447d5 +6350145197d430f8e6af1246a7d605e7df7a5ff4fb58e8241469481bf48b8436 +31acf36fd14a7de24d3a90d681246d5bd65d31dcb7795f2c9f6dd3f04ad330ab +37636fb9da5f27693b7613cb6268d36cbe13f628cbbd5257f2644b9be91b69f7 +2403f914beb707992fcc653b96fe7b23eacc1f46c325bf02427894a28ea28e74 +482a2585f57f4cca2a49fc473b73b2cc47ebe014e78f9dd868dd4c63923f660a +0d465c1053e7a6dd9138ddead25cdfe5f3a211d6f06e2c19453b405173a814a7 +5017f34fb8504208864db35ea2406c19d989e65e5417105ddd09fe62ddce224a +daffb81a19999b0459da464d3d10492b62c12d085f4381fb91b597f218b7fc1e +c0418a9292c6d2fb2cca2786b1b9a5cbd5edef092b5a3afa05d09e6e59a70f02 +1346ef208122d8c8f6bd2da33609aee5917f0c92fbc0941dff2cb3df9feef235 +4efa7155231d3403ce8211ca2786915280811d9dc9275456e491331899265c69 +8b3698810effb9e6e6fc2f5b1daa88e0740f8195cc8de64711be512f43128d28 +58f130156cc2bf774075a2b0bd3a0fec0729494003d58fdde93a2fddb529803c +76834d20a2f0654a56d1cb58ec344aeac5bb976c694fbb328a3cf9c355a5ccfa +3de62645b792d17c86e64a14465c5d29686a03037abb8eddebf2c55c94e4d984 +713982f983d942b390674695a46485ee6eac26cf864348762b018ce478fcf5e1 +c434b8a26187f6707c6963a933c1e7e5addb9dca4d5e9f5ea43a40c43d068b87 +f3d8bd0324f2d10f52d92da826ad20917b039076bafd236881654a5abbae112c +7fcb2bd027c96d69fa1224a8108d1b7caa4d4b03f813d461157a7b5956be1296 +d929e3e3e5249cded2fe79950e619b47b99cfcf0ce26e6c5135ef0d5a05662d9 +24d57e0be99056aea4094b3894b644585ecc7a6f016df96ce3fc1ae75635ec2a +2761bf9402fa697a76e326afb8d7ae5f7d375d260ce60143a38913a4e085381f +ae19ced0d207c80cfd0da23b999fa947408f31c00ed5046f48187ffa4a9dc8ee +1e410719a9e1fa29f15ab776e8013158bef0615e6960273646af89da0fa935c1 +8a7a1b67df2b0fd72b42cf02c5e916b0761e89550303ff45560bcb350b7e9ac8 +0422c68d1e34211212999f5a99800c7b103afdd7c8c5e32ce86d906031418297 +415ecd921c44e3d65759bfbecdc688167896374b5cd91a64cf08e3c224b9f22b +06d26bd1bb52679fb75e2489027a7cf868ce7fec588def5493f6570d2340a2d7 +61a6272402e9d29d02546929d02ec741a4f54c94a25ac1dc87b8f2087e4d9275 +32d6afc9597fa33166e593112001404b15e1691f002afaa8a4fe0fd803adaab4 +ba64ffbefea2acdb3059dd040b2305997fe7a6fd78db6e47e385af2cfa834af9 +3cff1bd3773d6b6d2f303ef4950825d6c3768532ba44a111af37f8b632cca18e +7325171953b66ec7ad79eff3b69219cb31201f5bdd8da70a8bac1df11ca37519 +5658f07151fdecba4c1e14c375de60affcee4998a0a377587f54271bedd8b226 +ab3c9b3638b4e1f4b633120aef8e4a2989e2925cc84c7281674e7089b71bcd8f +da8d1a26cc2181ba716d80be532578d6798584c364f9220f1725670c78007454 +0ece6487869cecd8e66f8adfefcf23cfc5fb8f1ce23a5e1e7159493a78742f05 +660bb55526f65f17eb255e84cf0a5c0b6b98f1d54d7fd00c1f8236c60c596f6c +28c7adc584b38671839b5847e37a7017f4f7857e31c3108cac29640fe9cc2ddc +9165273404769a556bd04c3bf5f9d76627603543947cf885de71f44c65760076 +a889b5b2d3511219936476ffd38e2d5e86fdeafaa17dd36436ea3dd6914e812f +b1d5d0333a7ebbcf6e908d334ec8dd335357546e241e6f3064251323b2fd746e +54d67d5e2d5b425cbdf89105b0c19ab4cea931a557f2d7d488009fa8685a1c78 +57f58bf6f62a8c71eae1b8944d78df9897dde68b628df2706d7aadbeb2d4a4b7 +561810d4f7e1988262f7460684575b38f13c4680c3dc254c7ad5bf5bf200950d +857556ee412c33b42820f740ad368a8392ad0605f16692e2c06b78ed542729e6 +d399a052823686f83e8c3f0e0befd2e7405c52e1d083c13e9283b50b4a834249 +6214238f65e52491566c183d5ff36711e6a99eb49f5518efdae0743467dcc32e +4d4c92ff8de5f8c649152d48106228117f5c160fc8bd2c69b1dd365337722742 +2c59cd0589bf70287b487799df5e698698f4ff13bf4618c63c2b0e000e57aad3 +dae45bdae9bbb459fd55584839dd185f48a75687a8192f3a63d2280648e9322b +02b9625144e67c6080f0eebb7c741968736caaafc151c4a9a1c1395f31b61ca9 +004eb39a789a9ffc247a249991106df6e1c52e40e4533f0fb6087a59080bf55b +f197ae35804870900129d9a941004273ca0065c42ecec8cb517609d01405ef3d +b500f09d410e230f680e12e5cd607cc0d1edc63e1845fd1bf3d9ba07e1b7a5c2 +eb0accd178e1c0178ef55eceba43a30599a0477fa4f8ca397b69ae64f6b6310d +9fdb875a00545daa9f0dfc0ff9fa355a9ad4b08d08ca7bece29a5d3a325c1463 +8f38dfe12ccd5c942a5aca6414a7b04c698c9adae4d8d43732e41dc0f04da349 +8bdf6b9f3a58296957d88f217d5c46f45c7c3a433ff9c355a5ccfa3de6553bae +ddc411e40b9f5e95cd6e9f62dae79353c5e1b874f6677bc593d2a2a07b1c3b20 +9596abb07ee8f71212674a53b3a604f5af5449dbcef830433acdcf845e44d879 +fc619fe992d5f6ea9b0cddfc24fe223e7a357cb0d5771cbd12bf50851f400b49 +9e55a3efcdae3b6d6cfb72ca9e96f9355234ea284bf70abc81d29bfc928dac80 +5eaca5ca15e3b8303bd3710a1eba32e3c13ef7641c7637afb5cef5dc59902e6b +aff4c7ce9fae89977d96691d306dfb9a54bd8b9cb8484ae4b50f7e2ae5ade3a2 +9076c21e036a78c3d78918c529b3eafbcffa7c842dc917f162fe68179bb45b4a +75ccb684f7c4b5a6d5db3cc876537e4b643e447dc64bb76d9e74a3d378517880 +9896262b00893cd7474bb605994df0ee028f4a703b4ac00ec95dc3ccb3342835 +418a5a158b4e6072a657a7e3d2728c0f64242be6fbcdf27d5093139fd7bc95d9 +89320f2ac958c06cec8fdcf56596bbb45b18abf2c6b5b891236063441ba7331d +613c0f1de49f50a839bceeee1f2ea065fa879f50918c6a3280bd7bbf1e366e27 +4d5e9e0a6bda5a8768f72b811252f40704a1190b5887bc5c586b1704ff1f7d4b +a8ea68ab335a506771a681f80dde3b8aa04ee1bd6cf881217b829942d0282c3b +e262314736557d8a43e8686f3280d4c9aeb9fd78262834ea5569a233d459abf4 +5e50d17d666d3e9caefe4f8d74710aaf2497a405d73fca9e107a922d0a9eea59 +6de7f71ef541a0a5b141f786dfdd1861f81651f540f82505b3fe83aa32067db1 +13812fa761a7f3b28342bf1ef531746b033232fbd06a12a0b80a9e23571fc1d2 +184a850fcceb331ff7076d3a03e8ed50991837925efc91e1ca33491b36cb1aff +2c1c58338fccc4a9f0e298e781afb718990cb9eb141c6ebbebc79e437b52a17b +0b4a8cfd0da2f9401ce9370a1ef04986793a67fea0fc96d8eb325cf73ae51c14 +c5030d9a8340b8b33986ccc325f93903c0928af3fb3766c8428fa690cda94c97 +939fd8df41abc0652e0ca8e82e048b133aba600278e3a227c4eaf8b557856ff9 +e6d2fb6671ba75b779e90f2bee7e349ec394ac76e16c73509b5e99d44fa10636 +ac63f8d546d5eba3c6bca7b738d4338134d2b79dd8436932d6ee22e2183a5c07 +a72f4742edfc2ed11145fcf8a9bb54313894709b28d214fffcc4b917e0c389b2 +590ef307e3ebbf0e42570de893328dcfe81e7edebf72b88ff1a557e2f038ef1f +8c25c68dd7c037226f7dbab36cf73ee00b92ba6efdbf9a9e0f4a7a91853394b2 +a02077209350a2b61d4771f338e739c5382c07e18386e398b2946ade4c3f0a44 +ff6f333d550ea7db004654aad32542571febf3c31271cc5d167976c6407c7570 +115bfb3f838701b58b320496c39c59553b33fdd7fcf135bf4d849b130fa58739 +6a983a93344bfd37afdb01b18232af9f65d5e3f5131bdc40063d7916a2b67ade +09e2fed7968e96c6ffdb6b41b0a7bb6b8e93c2ac4f1b466f16e219321c9ad83a +8027101b3d007ed0e43594efafac9dc0e4764477f6328ef0936444bbb4fd20e4 +2ae35cc3090ea9ea8ffc5a85236a4597f661568964f6a839650470f79eac69ab +e1794cc369c4183f66715746b9abff4c151ab6f06be72ae63f41f5f806b3fa05 +eee4f22990464b7e4950f5654b36b7e3158a7b4ecd4fc7d5600c831ea7521df8 +e61c5f5a3942eeb82e06477461ddbbbc9551ed095d78309f0dc9465f88e70fdd +7cf599e493318efbb07aef45a81f2d36111838a736b422891c562c933005dc2f +99a44557c978e4d9da41d3e2c3820e4a40fe28a8c268cb593960058f0fec18bd +c23102a74807835b1244daf8bb9a7553961977ea5a7d0e8a59f58b868c9daf82 +5c4cca4d84f4f37484b6bf8c1da54c5e089d3cb47377a99eba19e3e81a13d2f0 +59c22952aad0fa4f3a4d82478a06a1913b8f2dd141e776fdd43d76fc9d28fb93 +d198f84310f271baaae7e44752a4f8fd1ab089d3555f9d7083999bdedafca730 +50598a2b85541f071716d335c793b55b007392a1f757469aae1436de65d00f07 +66e196c47010731b77aa457876cb8994b97e20991af4e7b47bdf752f59c7e6c1 +27f3043e2b06dead3d6fd024aeb2413d1dc2ac897aec8c2a97c848d09b102982 +06f2dc08f0f0ea755c68a0aa8062521d34f16beaf87d359db9cc79faabc3d256 +3cae31022f3d4ae7dbda58194866a7a29dd34f17a4d9b7f7987e01a6db74bf0c +5e0c53bd07af310a2756f22c1cb9bf2a0e1a57aba6753d037887c4b65a661f70 +b2d10fad50c5ffd365d3778295d880f498ff4950257e5ce855161796989611b3 +e793c99f4e12e947b51643fa80b129c6664b283c100b5694d2d8bf60a3213157 +a17b72080842b4ee055d0860a801d930d63e5354f599854b5a142f11f6b78717 +8897d66f3f6a3ff20029ed1870d538076c1d4fa4ece214b0075ada5cbd5f4087 +8975b21a79d8a67be6d73f8777ba26c18ae3b8613387b25f43beda7a2c9f6692 +667015b80847d0759ccf2ef45aeb00a02d63f630dc6823d5f61e91b410fcbba3 +677470b440063d43bf734b16ab45a42b698037ca3cc5b460b563467d9b6f9453 +d31b47822f6fc7fa1604e77d00ab1f172bf8f4cd9bde3635703a4166293494b4 +37f032570a165604cf5b8b153da54077095196e55252dfccd90a8ebc09bb7f45 +ada3560fd014a844b2d9bae654a533733ca8ae359bd7537c60b52997e10ef2e6 +f9a2210dc484431af83a956af66f06646d918d2832ecd425ff9cd8e9268557c9 +efc84868728aff4d8174e6f85135c11a6968b13f7d8346334dba97a1a3f0990c +d1d2bac3aa8a5c294e4d0d67e893a609189383a24cd3bf86c22720d320d59a6b +5e543b799bb5d45fa9826b832a809026d104293f363200780278d973c9c63492 +8576754d19d28c0e4058684cd1a71a919e5814346bd40fc15eeca1591e0a709f +f083b86841f04cdf8aadaedd95f26fb807bd09886a011443d410466fc6bbc56f +95468646ababaf39887f25e485776892c89a6cb7bf5d20b6c4e8a0bd65c5de90 +7a988a3e2e39aa721dd03ca69608d59cc1e8a1d2ea706b0426622e4dc6c94013 +3f979e5d141f06fd2051a54d84fdd4c7170a44f81ac786d258f98893bb4559c6 +ac59332f599dbf644367e28fcf01da3e8f33b14f8f83052d9c0af2061465b059 +5a923f4567274cefb60341ba793ec77e5d8c7f96bb88b63591d8cbeda48642dd +c631a115cba7694f64506c787271a8c9cee064d9af1ab39cd121f7a1ff1c812c +903aed1a0d13791c051ae21ba92b5db47e72e7d6001fb31535a385202edd815a +40bcb9937ef719f7cd20e30fda23fd356476d22ed6c206f15cb2a78fdb45389b +6cfa3cc388cddb82886b8eedbd9447a48844921a51d4cb19921c3d42e58c0173 +5189ba388aa32ac9b75b5ab43e428b20957bf253a117efbdc6d9dc0931099af7 +eb10790dbb14844be86d80c5e1ae17d0fa0f73703f180effa98dc52c5a8a9740 +869fa97d0bce9fb59b36a960315cc1d7264f5fe730a397c6ee121021a3c82cf4 +bcd40e844b78f99ac28c27d9c4f4c90cfe0062736be1bd39d45592020daf0b9d +91efd616232a6aed299c9a01388e0460b46ec288d4e1cc5b08769ac88002094c +9b680abb4d3e0823b0832d0d60d08dd7e1a27531803b26f74966f6f4fa2f4117 +2048782c3e3ea7744dc52e7113d3e290d309881514fb40773b1ec9bd7932f7b7 +42c3a3dd44ad5207b89125d7a11aed1a249863a6e537c887b00161ffae6817d6 +269d93d4752375c48ad0a598d2486f1a173bc55562bc889eee0afac3a4b12fd5 +cc2a57080eb6e3880e1e2930fbbf7e6629c428a1025966b47ddba3d48874e8b4 +ac01d33158f31760d82a88ee60be24a62fb5ad9f24254e2198d968255d79e4df +206d37d52891300c669855a59e666dbb4676c4ec6fa988d6378ce4d00892c711 +3fec62c89dac139cc2b77a954f6fe953064c52a9345df309d8baabbeb1cb7910 +5aecc2f99b451c1b028a81d62927e2c932805d38cc8ab7aff70fc84f944d3fe5 +12694fe2dc46e548177bb78e4a51ad574c30f29145be59a24faadf91d34e9750 +1b1bba9cd1563e7e339e9d8795a3cf887053f1ee7062fe98bbc2257e8a6a964c +d8542df1129217515f38beee762ca45f9ac85c4497afc6b7200c540287d85c40 +7dd6cac0ae86a4d324d1b3fd2f249d3613772ab3362840a78ee8633b3f89b46e +b6749c008a46eca09c3ac738011772215d2e61e59e2b35b0d9bd012378c2e8f9 +7a58b7febc683901bf086f32282a9e539f2816acd16d5b5a0d7c26372e1b7ecd +d64464cbc518da0ab436329afd5f6e12d0ada7cb9bd84cd2b6eeadc4b966e2d1 +33dbfa0ebef84b45019f47c668325dd037f85dbca5fbcc54ef9aa710d998f3cc +df1e64c0809bcf0386de718201cb3c474fb5ce9cb8054ad3394bb6626f7eef64 +f60626142f6939666fcefbc920932d389770acb70180dae25a1e06fd6be4f45a +07e382d0c055447a99dd7e0952f24e89401a1c15a277d02dfb6d31f41ebcb754 +2f4f608640ef289ce4147dc1cab77ce02b1823a87bd46f0c00cefe0191d68573 +6af019569e89ab388d3d770af3f61546fe350adac3337713bbc091318cf92de1 +7b61ccda6e28c314cd2d6a27e758e48dd6038fb55c6841dcede725a1a30d5fda +87a37ce7461be94135e94dc72c976fc326a32194046979c351a53fb544d1ea5c +dc87382f3e020e019e03ab3ae26eaa4e64256cd32aa1eac38539d04ae425e1cd +e4548d0c352b680b4922b6b407856f1ebf6f3ea6ae68eb941d914d50642dbf74 +fa2a8df6b682e0d53f3b21ffa7225b105e359f49488183dc94cdaf1d7aa849d8 +88849fbd3bf680dd02198a557e768668eb2fbbfa23cf3af7bcd76940e1329b04 +bea1e1da8d71850e11eed811616410e2f7db0557aad2d531e1d3af851329a38e +96b192d5ab246fb72788f99e07d22f9bf6c35bd15036db0fe66364654ca2c34d +4aa14542eab8d979311725ae045f9af9790b26f13d0e447b3f58a8b817eaf26e +f9ac8938054c130583237c616a5f3be196c9252a0621cd35183ffa748b0c4e23 +869a58dc345282066b213b441823389934fea2e40aba453edbb936ef4695b6ca +5734f49bf4c21f0c66287df7cd723cd1d0e6d1ef02514a89a0360d6630f41781 +e06d5d12f793d64c257de894f58a074c06e4e18a5991b46af372e7c1065a9132 +f88a83fdb08a4a54b50d4218785e15b6a86d90b7ed621302558b510c0c205100 +44c2ff47efed6ff373b46f1b1188f96da0b38b0a9430e571d4dad21eae98dcd2 +8d36affac5ee640128374d182d451b3aed3f2e2080a1531a2723ef40b496ae2d +f0ba56582870fe7ddd397548d59042d981da2c5b15c2d3cf8ac934d91679067f +e601409c220b8a6647414d0b73afe5e96fd5106f9e5c9883132953083730f75e +2947bb0a0ad58d73cf0b0ff80481d2a152262e1b024df4ee74d22e9933f1f222 +f389b8367ec1d5200c70f7f48079fc559a6610e483fd55df95a8621c4e42774a +0e978ad53ca8466cdfc66e1eae6ea5df41dce8369b40c6aebe585f4e9b3b23eb +19139f371c9565ee85a2d8eec6e0c48ac857ee2660ce13eb5cb81616649953e5 +53e23fc2fcfbf98a83cf202cf6ec7f3816e9d70a4f86391e51327e047315f653 +906b49384b9c069fbdb27c84521aaaee74e53055897cdbd167a7b5d33b8feb24 +aff3e22b5d9da4966788ced11943e209ddd32f3085aa28f2b631e56693a390a1 +74b5cc902bd67a2c3959dcd84a08f8ff2dcfbfff5f75e2ef01c9fb619117fd97 +f8682a84f0e718362659df2d082fa8d9428010a76268380f525c4a3292cdaa9c +475554ed161cd2c43355af9350c3fbc654993a3f8901391308af9bbb1fce0813 +7592a1a4b271cd98d094d77ba038314ea68a4e64d68b0165bb593b873b24fe3b +8a59f22ea3714023825140e0658fb050e8c4e32d85e92cc0d2eeeeaff00c353c +c00483ad71627438a50b4dade6b0aa1caac73ce846581b858910486820ad2190 +33a9a108a502fa6ea60b8c85d1ec5c816a325dc802f213ba6bfcbfc65306d07c +3202f0d42fdbb7b62fc6eeace31837cc024965695c529e274ea638ea2a24847a +db9eabb31283bb13944309c17e3615256c7b95d8f99f86feddc2c7a566e4dc87 +bb060d88c661f589080fae039f4fa4b5b611caa6c65455dcd4bff9ff89b63f60 +5dbbdb21c07404e02688b7f92a8373ee1a6a891bf6c315b793a9fe81079c1ef2 +804238c72039924ea63039020363282f24f969f6a1aa10ef2d9e7cbcaf53c9cc +1f0925637190af45c7aa731e7dac0f091dd22e5ddab9a8dea87a0269d5343ef9 +f8297d133a037679c6834beb8741396754f2dc5a89a1621c13722289eded1880 +c9859ce2a9739d003bb874f747abe3ab28d79930680ca53ceba6db84aa3eb869 +0830eff19972d32f37eb6eab0723478f881127a84536374025a782a7cb24f90e +892bf7b8b9a44a237779c4cdbe5325d3e67cd11ff1a58b9d69ce962a659486ba +6649708daa2f7a0cb144f6b11161501464b7c7b20659f6e5ab21231aceb813fb +b30f9d6c6afd24d638ece5dac5259af8eeaa46abfc1d6f29383188b4ef4d8e08 +fc13a8cb07f61f55727619cde4f86944b879e23dda590ecc57f312c9d6d6fbc6 +8c875291b617f8040f4494323cb93e84f2100092b5a0527dbf02fe55175a1b8f +7b8b130de1ee8d39589b7489f2d087e6f865cb536b595c552534475f1bae5981 +807cfd89532d91a6316154dedc1b8fb3f8fa0270651107c5ab24ad8310303d98 +39b801b2f0158aca98833b79846369993bb4a3a715afb6eba5a2237652b17d60 +2dbc21281bbecab7df65812e9ba59b78f6e3f6248d5cbebfedde90149d823635 +0ad0a8cda735b701534eb682dd2261883e19355d6e31d980265351f1895cd212 +a8a006a6953dff2ff7ba40d5263b6547b6cd5a5317bd77c08364987424033bf5 +bd9dd20c0ba69bb3d25df2ef5fc06092981c2f57ac3d38b93976eced658544a7 +942cb27ef9cc649835863b2e14a4390fc3e5bc2c0be8fe2a67f1ecb3d4734636 +6b29b60d7261a743583915fba3c8f832c4c41bc1dff13178f2d61832fdd13853 +db2135b4d92b1628b80f3baca26481a48a9e0d0847e4c53427e5066816b474f1 +052fdbf71f550738c13f1c3ab27d1fa12a11194c145d90f61e4ef2a1fae0d25e +6974f191d3e1106c406ce4fba266c952faa505954f6ddf00068422eb0cd4baa5 +34b06c1805468d7fc0b88a491b48a393c55726d4941ea7d869b239a69565a892 +82e020721bc7ed828c88681584e0c49452fa8f2bb88914491074cf0ffcb5fdb3 +628b292a0f2fbb488e96767aeeb4b5b738ddd65d50e143aeb6e37fd6110e0dda +5e2120fbd267c00b1b90626ede7eb1fd37636e7f3b01ffc6f7216b396bc1a5a6 +04db15b065c9a030d08127a538f69779a5bd73a6d6f55d2da851afb9da60bbba +d782ffc339762792fbf66b2d139b11e76a28e8b483aa5d858ad779e905456574 +8c2f59a94010ed153e90a961b45a225cd9a131315d2691f6fcce8b321078deea +6582997e824705703029a8aecbfce61d427d476b559145f5ee40364c49ae13ee +bd940e7104a70a5501f5c0a632ca1902b75598d3ae606319d0ff4f0bdae32c70 +b1e4d5065157499c15fae5349fd68e77acedeb296cda2c912562546b9d1a966b +e7959a20045af835d9e7348b5b33614005f05fa26f45c3de3397e5ef9cf02036 +37b89a5085099eedcc025785eb5fc2130988a19570a1661772be2497d4c8ebdb +fde6619b3af0fb42f4d4c3516db21d44941a62f62f087ae3731735beab50f7c5 +27856884c3c4c01b83a40af32613638be95390c4c66f71672651df6bb4c4a0bc +a9533884c477f6ae268cf7c21fb12678c54e4b3fd8ef032d3e3c2d3651bd905c +562e643f42d81fbbdf819a28c81c9874100a65e70466226d90662ade31127e95 +c7f5052cf24df0a04d14d1d8a5d5d9b89d212272860db459e07731b3a6537c6a +83c352d2d1f09389fd4da36da0cc25a57f402976cf3a473ff27b6554faf254c2 +ec8e52fe59d346baf8b1fa0afb13289b6ab06c8d25afaf4f218ba88565cd3acd +f1fbe77f5209e6d5dc361c18d9152ea6a5267116769c987b89dece4fabec70de +3adbac8e5e7cffa82f4b7e2ac41696dfe89443c64d8fc50c5699117d094ce852 +c2d7dc91ca9f1e764bd117ea7cdcf98ecb87648e82c64d93f58daee619f531c3 +615ce9df8abd7a63b2957eaa3cdb10e48c379a96334f8510a1f04a7c433f3756 +81c565d30f7c7d9e05f4d6f249d203b286c45eaf851190ac74822c5a6caf4f04 +94520c329c09cc8e0f5ac803219b76c8be672d5eeb878eee0c1116ca9942b133 +0734efd931c8e5d54bf9f22d194475e14eb923a453c9b7f4ebba83c80b4d36e0 +617ba6de745ac02953a63a9d73bc2e07c52a6fb3182e001c021916ca4993647f +8be57505636b75e2013b781c2ee65591694009f1aecc0195349d48d780db2da2 +dc8c60410235e5c3c7b4542873c609f921a62953760759d81b718500fa45b09c +504f9cff973ce3e32a35b426c6f3fb2cbc366d980e133fee86f961dff6a21602 +d8e14529e91e10105afe9f88c9f65052db9b32cc2d88c7bbd1248d4448706d3a +defe4dd13ed573d1e8d31bfaa9fdec9fb1dd2ecba1ec8cffb0601523d86b8187 +e1a1526c20166314bb65cfc266d01bbd562c79f00c390ff40c42e424976ba541 +ee3860910e852c72b4c8de0cbc50679ea9434f4f21940480f148365bcb9f8889 +9c6e39c309a84f63a0b01896d4165395618198fc9ce773a874074a2667120e7f +3bd73ba915a657c161c04ed2ad2a25d81c286f5ef0e0fdf91f6c0a1da5da4d13 +56a4df2f14c4cc408165ad0fe1c60373909ce04828b2c333569b78f35c6594cf +11becc7df1fe0d9980cbfc9b083e6ff52fdc26cd74e64b22196586f4b21768d5 +2fa9107d541384b53737b872b0d7b0f931eb1525e118a45764bb1945fa8b91cd +944fbf3b63be737baad604e8e93d08521e00f8cc93052e4692f1de842505c39f +054d49d7bc49a836c724d887c0905d218fec71b710fb0a5fd2dd736354c6b43a +4bf4cca989e6deb360b45e8a353b712c2745da57934d5629923523686d471c60 +6e09b539c13f1c803dd11cdc41a41e8427a513e4808dd4f787114870b3bf8ece +f68fcdc6820e82b4d537534cb2a7c81f4e6878bd0cf435cf5845fb8402aeb47a +8be7f8658575e7fbcce387587b6563eac02d806aae5a83c185627d9e8857edea +2fa37ab90a1aa2cacdacdcca8a23a2be13b1016b2716ff29c2a660d49d4d2400 +dbd73edf65aa2981dd46641d15f2b5bfd40768309c570d5b5bad657915ae022f +7fd0805df33437b8ed5d961a0c65b33a6ac36a9ddbfe78169d4a6d2cfaa5672d +9354964e4c756a20b65f1550064e435dc5b0b8a53732a97ae91c337bbfba8e1e +87d2ce72b4577c8474a0ef36cd33a3dde20e650eba05a242065b8d1fe3c702df +ce2f7ed86080bf5e0efd27e162ebc4471770197c13ab838945cc2df10daee14d +901fe063ba909462ade61c130d7911c73be3d448f36455ed30c21bbc2527d0f2 +5bacfb066c0c45300752906845190fb3e76db5fa537fde62a1e7dea1af35898c +3edf2d9e6bc359439e38d363fbc37f89001e3dec0a7b6a4a7b112cd687e7c5e8 +4b0fa42d52b534b2d16ee3ac26b4dc3fec6272d1867a390ff9fe074d449b6cfc +93129a45a6624d91800c7e638c32c057c99673e7b57c5fa81e60e1b7a0604424 +458e1bdf2f7f77d1fd1275512e3f6d5411cfc20cb8571ef52c16adc6073a9542 +da94754c931e74704ac639fb69b227ec66d4446231bb566792321da24cc3510d +89b59bff3d647ef55be28555e93318d9eb888e32abfb2b0276ad9483ae8bd4b6 +5f2a3876c094f8e22056b9a26dbda1b09b0ce8cdfa085c8803151de9187d5c63 +406d87c00f3ce085b9bec794b99b2365504e7274aff81c5032db910e31c8f2f7 +c647a598171a4e8b19d05b5a77f1073ca0d5f58ebef2be11c6f390af9c835f90 +9b726589c9e75687dd9ba33beb8a42b5bb63076a5cd2cbfbbd43498934b67f6d +35556aaf2341c4d3121ace6338238cf67a76ad99ce7be30040484133b44d08f6 +e0d6acf93cbb3d7b3b860e620efafbb0c644fbf90228a339e9a5e99632238e99 +b1644b65c08859787d58988cb9b6b792aa43981c2eba7136fe17c9fa4a671864 +d39bc4ce208357e4e178a4c0ece034f01955199d38dad2b9e9f3c47ce7c652a1 +29476742bb9219514553a1bf9aba5af84a3530746f5d24795f7d79a1927f1266 +4e9e31e2d86be65a64463db3077fbb4d8ba24f577ad99d58220c09d15d7478ae +7360e3f048ce8bc4e7c171f86d2055c61cb4e32c8e28e52d3e8a87109f5b9c43 +b3948f9e62356c4f55797f5c349ee40bdd6e6d98406e361af69bca61870057a6 +63c08cd95a45c1d49e5ded4ca719b675f8fecbbf6cae5bf666352afee85c48da +e728a4672cfd6a669015d51c96e74ef3d42233fa3e5271134aac9354d289e7e6 +4d5d7be4433a62bbe54900fea32c6bb7863dde80c914a4d50e11db676af24cbc +6161712ed2e4ae8f0d7407c83889a3e52486a3d7b1e4ff2676a80039d4217eae +febc054ff700f06cbc565353cb08267b50276528e5da421aca6d458c8d381645 +3d524f1b7d143791c3939bb177dedd8000a364a4fcf6d27912cd57f8b1aae2e1 +2f012bd0049675d4b47fab974f28d57b151bb0cf1290aff5fa25e4219aa3e1d0 +e6007552aa41b3446b5624135d748405749cc1db00a6575685b8f78856607a3d +db56c0232cec6d31608342c785fcf455898832088ae4e608d6fb63c57ef4b2c1 +055ba60b0945c580292adeb56bded15de6311695fc74c35f311ebf99702b54d8 +77a677ac6df01ce3fdc54c527c543d3bfd19265fc579c4fb688ba9f1b7233e29 +ae0355e5a94f2a25fffb4a8fbd74f6798c863a2f318b4ce0c826f738614f5726 +2a2dccf3d5b00fc8140b153f360dfcadc36873b124a035781afb7ed41fd3d546 +79598d5030a8661603465eb2ac7a615c3537ff96556dde086f16040935e04a1d +32fca9256ce570eaa1ba42b53032bea880447949fe73fe1633a552346c930fea +020e94d8f22f115b195d0d8ebab7a07cda81497b824bd9961b660836709e0c9a +a7e61662b0684e925e4dd74fc97b675b79674aa3f6d16e96a1c86fdd2c6cc712 +1b00906b4d70c2b27390ad840962c2aea555822be94c6a46dd5a09d0ef16d346 +32e6e2d9563d10762b2606ed532d652b7949ab11efe383cd0afd2a92804998e0 +7559a8140c01ae4b4fb4eae2c147464cc71403bbfb42cf1bfb2e009327d29ed8 +65feaf33fe93c081568949c382806f465e178142d956b250a827bfa2c39f462f +5fa069853ba2e2d18ef99bb53878c78ae61d3ca268e5123ce3706d0aa11c336e +f5d8cc7036c9ff0e73c16bf7fba5d692847cf0016535be27b2119efef09c8890 +ea845adc88dae8bc41a11a861d31e86ffc64ea135aa53c1823a4e1d4aa8ba507 +9e5df4efce318b6d3f486b385377ebe65bc916f13609cea424f9c42e8921f757 +50a6c10c6c13ac5f8a5b629fdb16ce10200ea8f825280a115dd641cdf1763f47 +acad9790c90657ef835ee1d02f3d2e241b7d6749c9e4371216931887778de4b4 +60d0ce386aa03cad70c7e8a133ac4ed3ccf31d91dd0986caa5962c6312679d01 +359dff0b5a357fee803d61922367be5e97abb50f4048aaf6c76b6c65410a57eb +77bbdaaa596833dabaedf537786063320d766fc6e6826be6fed511babaaee583 +7b0643306d7cdd12f02e183d46350bb7c25b94b7d4166666c556d2f3adaed6af +fb36837cd861192b7a36e91b295cd832a67094197972348f44d0ce3870a0891e +0ec2fdd4413f67060f412a3cd31a509028d6361353a5e50058fe4ea46a6732c9 +98900dec7fd4b20e6d6fec5a30fe1f4d743d0deca667b5fe871a7c68143acc21 +ed2512990fd94b7ae6fe738dd326258f6cd6060f243df995a3af97687a78eed4 +271f3dc4f79ed18dea9a84694cb969ef7221be2485c8ce9101e9b1dc59af6222 +02a8ff7225ea661d01d5370b535c33ea4202b6f1a3ec6525a56e1ea71611491f +47bd21ca86ce6d8c924f28c8d5e5f66b9222827382dad72df22ea440726154c4 +19aa0517d06423294bcbc7c6f64940c999d9fe1c6f514c73cdf05acc4105bd2a +764b69f7d17204e9291a1d13be111261c53b5aa1fc255a44acfbd6a3e27d20ba +0c2d9fc7cb0fd2bf3a9cbfbb53eb0b03c6ab2cd636bac90076e486ce9ee10b8f +e69b03cf6aff7b5a3fec75294bdf32f198d65680f6779a9c6ef6b8edd936ce66 +e9cca6bbdcf4cd0808f33175d40c3f2ab76a02d0051ab512e32adbc595014767 +1ff6c57a77b8303e50e7bf024c8af22a2c7d5adcb9ba42ee6565ffff73212f22 +5f69eec749413749bd663976da9e39c7f2120fc475427a64d578e332cc5d2ec2 +84307c30b92e8ec05500c8635a069294902bf4f2969dad5068bac49cac00a307 +0e5203b294f7a42c2db51b4bf3e80bbecb780b0adac425db4e167f893ef4d257 +8aca20afe2773ef6fdc6e07c20ed0b0b4620ff0d5dc28edb59f39ed3e976c510 +e339c4a0fc9f56524df0aaebc9d985fb6781da97e651df018635096cac944d58 +ab8634a3b02cf1376b1c5fad86ab57c5ce85435ace10216a9eb3bd3deb8ee5b9 +acd93838e9c5b26f6f02f5541ecf8e94ff33839b93e16b740beba88c19410250 +301614938b4a69ba7b9cd47d79d9f58649225ec073b8c86503ef606afcbcc79c +287c9315cad03844d0a465ace3e83ed75182fa6de0166ed492659d8e872e5f32 +c3043b055e44b91ee3bee18777b28169dadc7375fd25ea67288c8a7919fb6b90 +e5a805a38a40f1ebd4bebbf6e26b5d5ef18e381970be0753c35de24b6253f9d2 +4a77ed4532f5eb2f464e946babea6cfb2450543655fdd5ba1d46894538dcaf49 +d824b3dcf5484ca5098cdcd138997398a60b711568f26ad6eb964de44038fc32 +07c85ae853ccf6406906bd00b9af16f3eb2246d3ae95f6944ff39b64453b5a99 +5592ab75507ebdd4a7f5ed567eef5aa2697e973e95b512549da9190dafa3f3bd +abb118f5a81cda2103aac289be4ad5dcfa566bc51d8ba2d5b19b7bb31a484cd1 +8a84c5dce3c7e50429d637c22b29d8f750b60e65e2fe3a7316d458557c1e87c9 +c6f8105537aa3b5bc789cd7c370b741477d21af453ea2781d5ce29d20f2176c9 +9418ea8db195cdc57bc982e91ef665411741fda4f9fbfe4bb3966ac00b76e517 +c7c0988339bb8848e616a134f95078a0a5c1a295bee68499d1428ada2d995633 +39d92748fe4016a88f9d534b35c766c9f970903c0b466bf4867cf914c570ee9d +f4ebc45e058759a851b8aa472d14c305f6410fc4d05acc1b11b431fa438490e1 +816475c1a6316c7635226b49399563b3dda5efa5b38d1a32efde767ba4a0fb3f +3d93da113a8e3e32a33b5fabf64917251122ec6dc8165f26af07005b2da6aacb +b7c8e299cd7cac6e3251bb812a600ffb1a028d36ce351b3216a7d23a195a9afe +e3461a40159201f1a89b8ad3da7fccf08906310fd84eab1ae0a76589d69e13be +ee3ba496b5c3f34757363c4f5623f975ec58c115901ddd9cf4b8e135f1d996e9 +1a438123b50d453656a44088b62fa37f575da53a2a42bc659540bc759ca7f24b +d7290430dbd53edd3c602f2decc5d5c2e305e8c9ce56626fe5591ae3f6fc9b50 +62fb69b77e75d7e0808f984b7a062383d2514b0d682ee525b39fbad9b84663fc +3b74f5ff1adee4775b8060b227c1df3c3b2fba8bd36cb216a5717ae6d6629a06 +c099300377b741877ef1db03047a531dffbf8dc6aca4ce0097b9e623717eef1f +b40465ba5b56d6d618aa3e837cb2791736223243621b3c0f36e8cf3c5fa3b815 +36815d1a277411b9026a9eb2b1d1591aacbfc92b49babeb49269eecdc24efcbc +7b0871150cb009a229b3d1665d05a796f84dea63d9c2e23af3a999f11f53aede +953dedb336ff92e7839bc7023f8f4b868b5171e03857ac0ad870c8dc42c6ebdb +cc7d51d1484f93106fbc79a677e97db44190ca4478f1c6e3ed2dd57eb8098798 +f3f163280a6ed0a87e57581fd663917674328cd2d1c6f720ba8c01f8ab79d4fa +7c08f1417a9a9eedfdbc6d7c84bb796f3be629e476565a34885dfb7c4164e821 +529be9d79022b6e1268cf6517a0fc2864e4b718f4018744984a2376a822dff4c +0344668df1caf06b38c229dabc5a8f51ba120b53ff9291b99340e46786c809f1 +912c2d910700252081efab3d5e1d96d8933b6709ec5198b27fe6c511209d84e3 +cb1aeaf13f364a8dc62bc37803dd71c663f7cceaee35e5b39f87bc7affc1dc97 +16f93f931ccb3164490787b1432be66246f8e8d2d01232ad3ecb7962b9ff256b +886ca9f86af2956dd082491d015635e02d867a199c481d51f8751c6c9a3efc2c +7de4970992cb00d45e1d71522ae651b177c2a5afa2ea22a1c083eec3fa104296 +b5b9b74464f293e394fe8ec2d4bb82b7a27b7b4878eb9ca6d8fda476b76c872f +5f030a803c7b1f1c0483a96c6fbd43a97302e17b5e0e28eacca87be1015d91f7 +0ebb16c26c51a8d7efcf50cdaa4d7c3449b1134c30d181932ccd93ec16b44993 +329b44a6c3638b23521eefdd79e7200228425465b0c3df07868818cdf53d9945 +a740ccd2413b8d53b52f3f6b435f960173b0b4cff2e52cea7bf54e5002d254ed +c7ed8f69fbe4fa8de61973454ca0a0c9ab2c2a9882f346d5ae456b074f367547 +54e4995e568d48065f9421f039c6b36d2b4baee80bec636374611123995da79d +54a8e318f034d9245cc5f2fcb4096743366a1b6ea840461f45a74129ef2be0d1 +ab028681ab144f68f02aa84cd5bf824f06d7ebe88d55ce185e9defa29b55592f +3896f917281ff282a252bc9e725ffafe2db8374c7c34820944991671ebc16393 +cdf712bb663640cfe1e700bed129c5b3b37cdc5b725396e471534e75acc23657 +12cb452bb410347fa3de8f13d2ae52de9e4a0291cff3f45bd1387e0b0717b0ab +c7998d15558b3c80adc7f8d1dc3d3565a506050f3bb187f49ee8019da0b49917 +124e925bc05e633da732acaf407477b47dd9329dcaae0c3af728c577b5402521 +887d20bfefa2028e1ee7ebe6f5092cbf0493e4256dfb59d62b9f26ebbf5e3b96 +5be553da8a9e3ffa7ce4de7e428d8e02795ff5d7fe6dc2ccfde9c708233201cc +b433e0fabcbc498b649af575066ec7a198ebd6d6bde12a1a5fba108bb34d316c +03ff8b0368fef25689c95d3f1a1dbfdc891cedd92dbe22a037a2f3054897eeb4 +ddf01d1bda48d1eba76f5441354c342963da0b9b3f86b0738a8c58f4e798fdcd +04882c1a3f18075e31b33c78529f4ee2fa66f09ff4c3975df960c6ba32ae0532 +3719cbbb5702844f3a84478c7e234341a02d44cc60e4390f335629b692832ffc +ea98f9ccfcad11ea232a22998660ffd04320d94dc276af68dda0050406307287 +5e1af46fcc2859f6e91190b15e68e7aa56cf02593dc4e76631c3dcb7fc9ddd64 +6c7ab907941ec4348ff95fe5dba5d6233696b3ed777eaab40c4eaea7766f4856 +3679565c66ca57b9bf714be5504191337b4c9ac40f87b0255e22d24e4adce456 +3502c29ac30988ded18faafc96bd0ff8a268b0bf5830a6ff11cddda5929659fc +ed4cee41b07eee3229d1241f8b0a3b9b1757e1a6cd2b53b29d245c0409321e53 +7f2c66df8356115857782d74dccbd69190852001b7bd6612511ca1c458c0459b +1b1afc2dea548cd9984cb34af196b08d5147ab49aba60c0014077442e5b39170 +2c6c265b25a215fc6bb84931dc00156975908b76cf1fb54996cd798ea06d1840 +937c7e1caf0f5c595bc038d3689e7d4af6c15a3943bd3d5fa645bdc0fe0c7fa4 +a100b71d2b60cfe9ffc65d2503372bd5d7713cbbb0dd9481c19e5b24f987ab34 +861beac180f61c7e8ee68846db98c9c88aad992d8875d7b44b5de8e8c780722f +4849ebaf90244b14d141264fceb58ea3ecffd9ca893f44a1d5104c6c9c4e63b1 +ced9e015b9f415690d526fff0be7ed7a93535c5f823ac753dc074d9cacd4a3fd +c03879f8216a892924cc696b1d256f0d7f8f24850db602ddb9591126aa067343 +d61163475489a8ce2a4643c5e3db6a9608c1c506cfa2439991d807b8a3d89a5e +711969217daca3bbee9289e474a0de12e6ccff0984f10aa965e6a38725f99f0d +881053165dfe7f8a1bab8b24b9bfb7a382298cb7e9b625b78e53b731de5e5938 +24f1d53d970622a380d913c0db2b4f156033aa2c3a4423c5ba3be0261808c000 +a42bda95a6768ada32b929234e4c3a9d0c212f0b197615695f84c9a12cf77a02 +d446971dc5ffd7cbe68775d948fd9c9aca5d93438b7b2f77e83cca3d3c3cf885 +badbc9166d3eeff0473edbef598a9ddc5e5d50637fe9cec73e695d38e413fae5 +7f11aa2c1453c9c56d3a92fc33ad60e0f79e3da79b49c8cc77c40e4c82f2e9e9 +3f7eed0a0b488dcec44f8846f8a58a970dd88c12114ea58e1cdd105c656c4c34 +3d01f7bb5a35e18d730c3967c5b0e711009f14574d947ef626b4ed333baa9537 +ad0ad7d4bb5daed5af9903990bef203a529e310e5fee72aa629cfbaede5bde1b +7a53c7cbf91a177fd3a40fff8a1eb215aa5ac9ecba228b853d55d54e5205d0d3 +2d68813164ff61cb3ed67387de44ee9d93ab2a082b50aa39050f11cb7c894914 +3850b334dc7db907ad6b5e7f3f89bacad3771604f0f1eb2843a1a5df85dc6d23 +bdfbaf5665edf79e652006a822f6b9dc0692af54a51860be74678b1c57f16240 +8c18a8efb515987fc1ef7522224dcd42450dd4a195c43117885d66850aa1f701 +54af834ee208ff22b3d49667cd64b18aab0c528ddb3363c1fc375f1f6c133f1a +5e5ca1e83aa6cde513b11d0d80ce36bf7562a35643266996e4502fdc85ba05d3 +c1a7e39f62276ff85deaa199c3e357757f547d77467886ef66af72968e363221 +25b228b05df472afdf38d64dd4b846df73cbbf2ce1030d8ae964b330e8d7a3ce +52eb0aa4f164d44d8683a6270e952f984dfc78a720775be462cbd41bc8d56ccb +383daf0007b58e6fde73ad44e701c23750fb4a2afc174905b2554d8d95aff499 +713856cbb4cbd369455ba97b123ecde74a928afc03e2e11235b0c7373293bcbe +6193a86693f5db6c6aa905dd539c19a5e953222e1c68007068f5d6b7e232fec9 +4ba203a44ec7318ef6a0db9d255585b7589f0d3e08e420f8ef7b612637a8ef0a +2692f52d9b094d32e8c197d8c3aa8c671529a4012453bf23e7ae1def8600f056 +e715dbebf72bb7eeaee282c926f4ae871c495282c6dc98f191d03380337c8881 +07e6113ff0fbf360a225f354f0ed4ddf9c97d30fe5d4dd03dd929ee799714ce7 +6182e399f53969cf4c8cc2df7332a9de56dbd19a8704661d842997f06f3589ba +f63999f94b4c00cf23d1b540818fe68ffe739b1773d8ac1746e51d8606e06400 +4eaed25d729b5168e8f4bef2c59eb953fcb9956d3f3e733591a3978700510553 +8f9c1721aa7cf7552188c2ee521116b1cdf4852ef70b0d2066a2b2e5dc194fe4 +c14503d57f7d7802014079f915f3af34d0fa4b3fd4a0be01952933c8e939eb95 +dba63306dfa0f2ecefa6f8a868e9b513f5ae04d8fa9715e04daef3225ff5dc69 +b6e455f4c8e8670f7b4c27f62f0c9c3083945d538b46edd1c20cca764e370178 +fd0e0753664691abf1be81c197fc26aef772e4cd6e3b3c08b092e84b80946788 +1a00df4bc03890f5464d453a683d59eef81734570e635e4c2ddfa34b41a6736c +b740641e676556182d98b7e50c56f8bd57020f515d73867fe1a24e098a656833 +38039c76da859391f701e404a0218adb77abb649687e685821f0f32691a82b07 +15ab96d0bdb3baab325089911ea11f6112b69c1e877cd8f2b8dcfe55108f0fd2 +12efbd4f7954149e64e1aa1bd0d0b709f13d032d1ffd5c68bd4fb14fbd7721d7 +a9f9355767875dd2dbf55d85ff6f0378d60e81b3e37ff6bcb6031668ffaa0ecc +cf414fe67e9261eb0f791a092f7c97dc98f9fdfd212a363bf7473fc107ee5fac +0790704f6fb87246143e0a53472593157180617772180173d0b0ea6949dcc49a +3f8ffc3f033bd306ef4b6a9001d34d05e7a8a200016afaaf6a69b5a10e6fc316 +5d9341b62bbc709ab8424b84d25965834f27750afae63468b791cba8dfcc32b4 +158cec29e8112e70bd237c1a180d078070c6feaabb7d35f5167447e54ce4c6f6 +0f55d9f97ce8f1a157af6b49567a16bbe23233e68bfadba699b69b22d70b94b3 +bb551113de57d25e2cc22a3096eae40bea7e353034231ec33554fba3920e3f80 +3611e4dc2d2bb7580869d0bf7cd3a0b24ba6a2cee9210164bf0e14e76642cea9 +bed0b279b01007826296ff79b3fdc11c24beac7857667139a80f0243b16b153d +a927925575ae6315fba5e54d5f9958004e31a4acdb315b78d08188accf9a0099 +e8e706553f926d14afbd8c39cd805eff90b3993c96405990aa9d189fd66acbd3 +123e94f66d3d1a5f4061b0ae1a032ed9eb5010307a368c1c6104767bab95bc46 +86ddea0248d2eb0a886115e22304e81deafce6e1dfca09a8a8c93e7a44b6baee +d222d3cdcc5a8b1661b9a874c1bd871a4cce7f9666d0ae94735fa3535a44920d +6740d5e6dd0372733bebbc603d89cac8450df40be169d9bb90e3480f3659f28f +5b2de56f7c596b3d3c2b80dd82c1f01196c301855d6217b99bfffa93b9d40e43 +1a22f7a9ab31462d3f14b5dfb0795ca0675cceddb8e7eb010b1521406689b491 +9d264bc1f084564e6a564a76437c6bd4317fcfedb47653f191d6c6b649270aaf +d083771031afca63850e7a552dc8cde90b1c6556d49c09bcd3284956ff555e57 +77365a2ab6d7e265a1a4f29de8203a2a15756ae595a48e11b958c6ebc478ecec +29e0ba3a7cdba448c7abc3bb6e21d21bedc9e49e730a5872082e9b2ce588956d +b35eacbc2f3f41485b0b0403029b7a5405ed1a40d6d0a7a802c0bc4a0b1fa6c3 +32450dc5b1cc97378a2edba812918155e84e78267ec5e73f2c0bbdc96604294b +3f840dd3d7159999fe24b2c6f297adff2074ae10a9087e2222af7bfa938a2058 +4dce0e6185a493b9c177b8238af099bd737ee30fc40381833e6a08176f3cb0a0 +504270ae6e7701a47a721d70ca5099a2c55e9558320285e4584e64d639560d37 +50993e0757a1419eeeee61f8186f8493034da3997e6000354bf0e07d948afd88 +ed9fb679b76b39b0b4b444bca762ffe47103bf812b63a2b7c26e56ae4b8c73c5 +58d0f7d6971cde60c257de6688d38bcda59d35ccda430df05fb25f2a3c75d377 +d88b1f22eb46731b7b36f8d9ecfdacd3f11f9fbbc1b4587141c4b3b9b0d0a9d9 +bac41cf6c67a995491d52d695aa14aedbbe48d49126e55b2ae43d0545d031e05 +1d52602401c68d41fd21e4faef1cc86a15dcd17c1975b2d841556017a8f39f26 +b6c0c9cf80e7b5d9488f9d4b08564c8ff25c52c16c3d11ee55e18dd3462f9436 +ce1e4bb7eb090929b4816aea6150fea2659389445800576aac75dd801524bc6b +3f8852f9a999c05c7b29820afd544071e9432ef5cdea3610acb574cca130ddff +aca7b6ac5a6d86758edcc686be2a61b6f5f2a3405faf7a9b06edc40df07b74b7 +409e2a172430b1d504b041a5c7b0a4107bf60581e1fd5e43a5732ad62a2301d0 +07c3a3489e8ed7c963cb5ea2bb5f4befeddce251c8fa914c424764311d16c7d4 +1e855f4b2fc2d4237ab0457b3a1752971bccd0e321dea65684d0e44a73023a19 +4a9823950a620ea838eb5d98f9959992f48d5ad23be313438385a6ffb29362ea +a69f16b642066ffabd919bbccf49db54550299476a7143d3d89a6c1a18e94db0 +656a51dc9d77dbb58568b3365ccdd85d0e98097342559bace953b33cde10d826 +8a3839a28d7c218bb4b0a31d105c5d5464c2fa0ae31f69994057717892369191 +3b67d16584ae555dfe1aa32d4b40d144cdb9584cc5777d1e30429f09e0fc25ad +c87af39d21328dca6c31be361d2382b2c20435e255c6f3014f052e8f4d305a06 +7b3866bfed5eb9b9434909f117bb602c1b743496c9ea13dfe4558b443c347a96 +6665d7e5c06125a8aa4e906f7cc0bc04118a26e9129fc23a63fb0eaa010deb73 +76fcce5d4a3d4ae626517d2d77550c50f7a45b4ade74018b746f5aed001cef52 +fec5e73534a2de1256ada58aa26e5bc0d9d848c8d0a7f42dbd7ecab47d6be1df +71b7632ba5fdfc28fad09fab97fcdf3ba729973d39a5cffdcec0d1173be7e7d0 +85a59a4504617981421dc9600b2b65fc122d34ee2fab5640893e34ed50f53037 +102330d718f7c2bb7b9f50d18643e04af5c860215f7211271fb2075e0152d85e +c440a933a87d20a0677ea2717baec45e8578a077805615c7d492db713259949f +0392cd91480059059dff830b24e2e6e5c715efb4aced3dc637f88cf3ce57ca45 +2e96edc986edce66a831ee92e6e284c72b1307ce4ac479e57014d5114a9054f9 +cf9fba1ae66b0f83e173f31378fa74e8b087490bca05f77da7842d7167d8964d +c59089eb222f1a33963622a9a17c3542d9940baf4d1b8d68cd4d51f16acf31f2 +91570def9261b67da9222acbeba21a6f3fa905e081be29befe3152b326902afb +bc6a57c110bdfda8a5c4ce8e272eabdca671be16f4eb7953d1df46e250acc0b0 +674deed452de3b04f258e081110c5ba20a934fa9180abc09806e257abb22041b +836ab3b73f5ea8dd1dd8cd56216d1bfee9a8ba78d83e2cf0935586c0cd7340cc +5980e5ca4989174cd46fdadb86398bbcca75c9580310422f692812bbd8a91602 +4f28a49d35ca1c80d5c6c7b879f14d037ce98c0be18eefbca8acccec2fb01923 +69154709b772b7a13d2a9737652a1bea28da5be3815867a952fbdbdb8c45c347 +afb7d7de74620d97b52a6bb27d2b25fc3d0515129eb92be62f7efcadaeba61ef +88d82df3daf2d1b0a117493075b501ad84ff1650bd7196a1e481c393de324dcc +c50ed36647ad32f2c8c1820aee9190126c1e622d1f686c71855f8a50062abab5 +54fbc041de1cb0f6163df274e0b148cc24ff66aa16590447b5018474e5bc20eb +77a870366b3ba577a6f484ef97c606cf71f15470905be27bac6fa4375629f80c +b8aef8957b856abe4f885c47acd94a7a32b2d81cb5ccea65a52328820404f5bb +512ae315f257f6196effbbb484ae7c877ca278a1f086e771092915d375667811 +f874c618cc6a117310287382fecd5fad1bf3656f9d41c6b798cc1f6e6f7f789c +8eab2b1634cc255f999a72ea0e3e201a4335558e1dfc26a8b02a8a1fa55cfbca +d1bc49f81b8f7837a29d7af533d9fdca050cbc2809ad4cb54699131364977a03 +775148adc0957ecf2d7317ee6b582592baea2f25d926a1738df65b37a519ab95 +a99bab4dc07e56df6e4ebfa0a8e4d8f90693f8de9d1cba77b3f11dbf7b1eb907 +a381fa256e2e943d68e773459c7ae4e7ff969b43d5693b5b612fbbcccc4c5411 +49a3dd6f01ba7bb3d11a331cfe3734ba2b9e1f8a353be0f7a6a0567e1f0acccc +0e5f27eb18fd60d809ddea01e8d6d1e8c5f59b9554910206ec9c56e7c483478a +1e4a4cbe7bfc97c7c96f119726e45d23b337e547667281022269e8b66dbf241b +d74d3cb856da025944794c90cd5196bc8f3a57869c9f9647a0faf133263e96d1 +78ee01be0f6b67db214b2e9c3f10aefa22e7e0dc1ff6d463a2cf77d66218fc1d +9a0f754c3681591d66f8c455a85e3e7d396fa1cecc04b218a892da24ea8dedf6 +2084965bb34be5e897a6a6c7818f0cc42be52edd5cd7c45cbcfaf89c94569343 +de0c4bfff1f6120684fed8652a071b6587f37aa970b5be3e8574918b97cba372 +81ec8e16a93fd111d796dc5833b76f3f3254a1c126fe28e103ce61a0eb89ef8c +9202f06e04949602431a5cf57a940c059876b3724e461b7cba19a398427e0d07 +8a88c2eb0f9d12b608d777cc1558522e5f0e96362ee59cf1ee03b1ba9b864bc1 +d186152f24e7e28b92e3a799b23c2416afc0820ecb57a0fc36f44b73aaf6ea3e +3b952de790af21f21a273a5c0f86ea671ed2ab467469a0ebba738b6257ad34ff +499b8e21a77a5685dc1de5f21f8ae20d85c6c921f1ca434b67e876e9d3bc0136 +dce9e8d97c769e07e7535ede8bcc169bd38b5f3881f94fc7526ffa91b7870255 +f62e423e2ea2946faa96353152b56ae03010a42f15cea95dd27c89a4614605d3 +636f44785350a920f63f0cbc5566aa9fdfdaf29c109dc83169b3a64ffb0a7c58 +084a88d385ade5c3273c02f809e3dac76dbad71e76462d909348c609dc0bc7f5 +0cbe05994df34bd38feb8b5876cf5a50989a44792c36f0a989084acd73cb700b +64103a290df126dadf1449a45c713a71353969d41bdda892871644f895fef631 +15b63299dc61de72c7201d8392dd3f10b819b792ef91f1bcddf9f04bf3b94c25 +ce81c6edced5ac26c9cc0e304683656c9ef456b1b666bedb3fac1c597bff1d9e +932d05de433889db501bfa1abf7158b428b24a0d49b467b3a38f916601c9d36e +22374c7c96dbb04a5de8ee1013ec7d8515a9eba05c41def2b8af7bae6691abad +51b58b489b3b20f3276878bd520e6e70a9005ee6cd9651199e71269a9dc9e1b4 +cd24d01d37448b25ea34d6e0ec921c4c1904b7c4deb93a5c6a0c736a501ce7b3 +5e386a065c1f5df136c8bb89103febc7b9b3de8f74e0504fbd7ff702c5c7250b +881e83499ecb6d80b3f9d9d17aed8414a6e723603c8762a3409f6766be726bc2 +79f70435a56a0e096209231f5b0c134bdb7aa6cb3db9895720cd02b9dc0476ca +90c7a9ed37ff0b380348f66d85037e9abc95499cf6a3006a40c3874fbbc4efbc +93b261cde619c9f86a4203dcb642e59c59709dfcad0d15235264fc7923227094 +ca105019b1bd20e4bfe5f3ea8edbc33a7bcb6ebc523533228ff682e8a1150aca +fbee38b10517877329be50b45bd87df864b02c6c8cb5125b01e79c64048ddd3b +7bc817f3998adc78819febb2d81c7cbfd179908cd36b7e5169218b449cfd1a1d +d0979eee4aa2c2f664b9532775113f6d528c0e7c1ddf7f92738b1ec1c903710f +9543712c0133b208a9bbafaca0a5ec4a087a1e5de118fda50b4b79a658e73a04 +ea556ee2b9891278e414984da3dc6d739ce951cf058e2bd79d671877c4d5680c +2a757744cfe0cf31bf587043af1acf031fe82e85f1199c1e606232edd4501949 +dc70516a3c30b356f35c2b4e14fdc62abc3cef6b7703937a1c5561694b2e2022 +457603ec1210cfe44401a8ef8e43ab2c2244428c4f8138828f2a7646a8482b49 +00a7fca8dbfc30cf7dacbcb003d06c36644d61e901114cc5348ebf805af2f70f +84398891f59cc49846e23463d89ba78dcadb3efe0f1f00f4b45c40bc0d2f3cd7 +63c231487557e68ebbb01cc9f96f246e9c2634cecff4a381dd27814e07cf1eef +75a68378e92e56ff486dafb1bba124ccb1f2e9dfdf43c5fabc0336d8f237f9c8 +c0a656c7691c674c0031ec4531b6e7adffa69d634c9af413fe014cb6464b4ba8 +649cf7bf0b6ef90126d312c361fbf4618957798879d967496ae34ecdd53985be +1bcea07ff99f19a7bf3dad5bc31e1941161e60b98a7f78316b95db862315bd25 +c46474a7e5cbe24c54f54fa23b299901cc2488480d258db25713dc97ab0e4b5a +d66bc1131efb7296f2edbf6d27734cd45603cf5c1e0915dee25996df850dfa31 +13e23c722aef49ad2be71db794c86926c13ad66f17d8b8de2a4b66d9191afc44 +2b4e95d2cd04cf23374f172a183ba3d6adf8b2f919f14b4ab794f53531aa0da7 +fa0d5ea6f4c30e24db53640d51248cf1001e7330286c1668a7250d3a0d34f84a +7acecf297caec2198b56eb1b9263ba531658d06a3d9902c3c96034cf79f4038a +2859c9e47088ed6025d59a69abe6c86ffb467b4d8b44028fcd099729e37bf8f9 +5584763055731e7d7ac8b76765955c5c73c00bdbd426950f69ac97f55f9f9f2f +bc217e166c442e627ee893965fbc7200396403b1f52693f6079886eac12d3553 +a02944981ead829e3bef62ce5d9274e039e305c48b23c604a86e6d816b649faa +ecdff4777472f32094796aae48960b0f3d74e40fd1e4e72bb37e54322c126341 +039c3b3fc15a137fbee162877a2b1a27dbc2cb91b9b8cecad345cb00d519c051 +f46df1f96224e95646e02d4af7739638c5a261e36e46be731e3425d8f62d25ce +5a7f1e72abf75237bc7109d0f6503b684c728a888ce8a67d622a298fc09d08a0 +39b7508db67d1fad998be17d49438696e9c402bf6ca7e5ad7ca7a1450e04d17c +2b0fa2feb0b9d5af5dfa5367faab7b3e2f104dffb5da896d00b890764b83543f +70d04bf1fb56fdf0a5873edc4124e42b1546dcd43f4896a2b313617c5675e84c +1fb558d1b944084e431c29a8b1b1ea67f22bca2ea0e503c422f13d3d18c16dc2 +2f8215c71346762875d4864e20c107f50d9b42963aa2185db553e60af6c6a6a9 +886ed38b48052b0cce1e5b3f2f5d96975849eef01399553443d2722f1fbe8266 +aab7b8c1d69ee6926c1f916c62dce7a293589e10141173e30b5790f18763f1d8 +e1168cac05882de798bf361b1ec201c9f5fc970e5bba72515ecf3ddfcb14a6d6 +2f38cec6004fca8ec75d0b2ae1fc8bc94d4bac124c97b770759987d4322ae181 +55c7a1d7c0d3005385eeae58b8a07c556dd439b676b496682931327031d68f43 +daa631dff340b8531a8f1cddc1f7061dafd88109b78958d52acbf458dd3ee2a1 +fce78a3e5a8ad9a5314464a53699701ce17dfba2e176e9ac0f34e1692224926b +61782f6ffad4c6278a32b1bdb73cf6b8b2f5646dbea6de31b2078cad5a87dcd9 +04ea4e60601f7547c1544b863ba383ee95ceb4a42ce89e815740e0abf8d3087c +637a29e0645de6f2edd027cdd56e8b558dbd26e9582186bd5b4792500926f8b2 +5d0dd38c7af1ce0e2d99942b0099757140f9dfbd514c38e3d15e502dbbc34c0f +61e3262e48f80bc3b6f93ac5aaab909cac3b776094c2a101b0ef5c891e28ce69 +9ecbbb70fa9a71bab19a9a4ae49f9316b7dbdfd63b43db9aa064df4092cee544 +7507275807a430358ff0df98f2fbaf716785742ba18888994a8e2b54aa0f6fdc +07feee88c4c98951495943bd42b395b92b545cce05be3db4a0ffc43ca064ac4a +9baad9d402c97fb79b8f70184e011f78d8e96538f4ef66d45950a80d186f3b96 +56ce530f019a1269ecd2249f6514a6b77e486198ed8e4c28760a6482b1d3bd8e +8104a8c964154d8d23fb33f0028960d92c5bd3dfa6bb390f6dc708a9f4fec7a3 +7327a97723acf7b62070cd7dffb6aaa77505a05fb292c54baaf428f9b81e5ded +8c92353e46081e4fc0edf39c53ad0e64a29e34aed73d18e25d0fb73134ca03fb +382c1f2d703e241986e9bcb36f4a9a45bf183e5898364d95369febc1c8867d7a +77b76f92c3668ace60e180b685698d403b86e27cb9725405955fecf496aaf327 +e4f5e75ff5123402b23b0e8c5f7cf7ccf1364fbc8d9bcb94f0f3f018a2902f61 +ce2e4992a5dd21e2432a6f412e77b13cc968355f9298c0fda7bef338086560a6 +7c774e05aa3e6d1f0a3b61bc1ea89cbe39423ab0c3bccf10e091a76563ff8b09 +c509f9f69409b7bbe8ccfb574ea7a80cb1ff7502388b4969f91f319e0c609bb5 +c3ab477330dc67d7d900f2cae9890caf14312ba25c8722f73ab0d9b0c884aafb +b548a565b92af0ff6940d36d40442671cd9513f93d19107cca2462d5432696d0 +97f56f580721b0cc583aee69922f3d0209989ed6e6bf55e70e293c0c3e89f0a7 +caa0d50b519ffe06b5e86068deb84ae448d5041d20e03955b5bbf0d78ae45bbe +2e548c64687229f1033fe264d1eddd5437e2519aaf8d1f7f2b8acff36cd650a6 +3cac39cb7c215c7b34e29b58fbf5d8493cc1bbc9e4dc92d8df9cbc28cb3884a9 +b5031e13c12ea77e63e74504fb6609b446ea85900cd8351853e71bbaad97ef8c +14c8691ea4a1b39c94b7ffd97605796e7125ea5a6ef7cb631ed1d7805155f6dc +d64e6773ab236b4c9eeabdae300229d4710af35c88f3a61fb3934dfcf4756533 +bf1a27c68f82bba998f2abd86aab3b741fa09837a3f32cfb5f0a35732c7df553 +1277c984e1c32777107cfbe7962971b6bc352ef17179d94a3accaa0730f3d360 +ccc9e41a9d019759443990c8ad253b2726872bb53a3e6217b3ecc57242068b70 +1116465f90b58a16e703ad75c3da86b2ca6f6e2f88ce00a60175843321e6e6d1 +8e1fb76455d729634c196a8048ba1d7e399b7e5529e312610cd6e38e11de0500 +47bf6d8e7fc899e90a40f639ab3ed83e4f8614245ae7929da6a8872a15b3b6d8 +c0769d8468fa9911fda9fe875c7f4532d2cd641d8024b1b43de1d9fc0cf0dd55 +0337769be1a0da6afa42b12c8b3d21ea450df447196ed23071ecc65385cf7111 +d025b3d4d396fc2ff5f814fc7b249b88c012765d66402a3cf926e3769522c650 +62336560b22fd0865350c75541ddece29da646b137d467aea2b14e0c8a9d004d +c914e1e36247f010d5acdfc06a5a86477392e6b5df8bfa0201bd160c16edd42a +1611d8569db8d294d64cd76f9132970e961a57cbc9478fa37507f44197d73490 +3a6aa1706d0e0b4115e3c6bddbd4cf4be087fe8cdde3a8d764b299fcaefbf13a +2f480e9385aa9db1d4358cecb9958ef760f6dd14459f2a93bd2d49e354b7a672 +8e6bd45f17e2c6d86512f24234f1e8df4e5ebfab6c094504041adaaea0139028 +5b4223e9cefe6e67c7a055c9b56402202fc3964989ae3d435ab73b071c022aa4 +6c2226809e1c38f8436f42d3ac3a262c94cd71383b50dca30ca2d275ec463405 +e7de48bbfcf53a152083382b8426ce804c958b9aae95a13f2575658991c91988 +e3af9fc6d24986700798775ed0edfe717510f248d3fd68a5e229c9862f7e5850 +1527886041988bcb5fb8e76b80a5292e982f25d51a97a594c4bc30a0cf3739e5 +6381ee320c7a2908da6732b29184ba5312b24e0935fdea476a5aeaa75df407fa +4ebf181d5a15a5ad7d0561ebf0a4e55c220a9beccae6fd830c0fda764583cc5f +f59dd84c9c2486afd7039eb22a657ebcb48c5ca9053f9c6671cc6cb448897f01 +a33036fc2438c9afec583261506e1ce938894644af8d14b5af8b020f0061502c +685d2919d5babfcbb1658002a2b5b6f5fe8636f4addbf97dc7c28eb93dde4f93 +831cb9aec8d2d3f6173f16d4c31ae3871e4bfad4b652c0f5e11af2270c983cf7 +47e3d8ef4619c2d76db67ffac11988cf3e7f6a2976305532a2a2174656a926fc +1e9dbc981c19937c1fbfd11871ab3b96599182227ba0f840f29bf8533d33e4c0 +052e60cc0a266a97857f7c6bdb412ea779b4094a5ca237960957dd0fa2a37c66 +97db26e03b892bbf9ea9b6e39d131f8ceeaced68e12b7f2ce9ac64dfc61009a6 +a4959924651f7158dc9c25f3e603629c979aac5c308fb57a460f4229ec663d88 +51e6947cc40678dfc56e8472f021d3264c06a3b76cf1f77f4b4d0b1886039d3f +e166d739bafe7cbfd72331c343fdd7395cb8cda3a85c735bb35a286090b6055b +62808bd999289763d9e433d22573fa3f069f40aa45df44cd9e17e843e9841828 +d18b10f2325aafb6c872e26486f9c059476a50a4a3654ea8ae9e7f6fb7496a4a +887054819293cfe78eb82ce32bdaf4c291faee9b01a04ca557cb09e614d0568b +4fd1eb0cadaa3014aeb0325eb68606f07885a5234e54e76ef6d9769b80e640c1 +8b21a8f0d80f7029228c704ac5d747edc455493f33e844a3b450f36141417a52 +0677fad5d7812b65640113f8daf1c45aac012f587719d26e84e8f98cdbc9e3cd +a9e148ec08d03ebbc9e875b21ae8a3456a032d39fb1e726effa0b5039871cd72 +6faf210bc4927de53fffa0d987c2232bf27dcecda650bb7d7ebadaa7036079c8 +0f067aa09ade73b0f22f92ca57ab4a1873ed901c7eb934fef1524824604092ff +6f255608a2ad18636b7f69d842764c672d3392b35b7e12ddc355aaec9023f8c2 +730ddc4e7b49e754e7550c70a21b5bdd7acd0bde562b34faa2ecbbded4956cc6 +45747aaf479ddf5269180428781e96f3589ab47bf5d772b0a6a01eda4dbf27f1 +49cc8d9fc57e95245f9da122f1e3b6a31ca21d7bce9e846b3484bc32310902ff +acbc3b5e1191ce9a65878695678a3ea186d03fa6cd13b1743f327ab65a848d30 +1dd0abd9aac5b38e9f727365120dd5024f3da20c5cd4f6105490e3e45df85ac1 +300a041e5a5ea1d8d882bbb1afd4cd7156f19a48f43ac58cbab60674b4daaf45 +7528e5c201d32ca7e06ff8719b79b94d6c571a99221e5ef00c8bcd7d82ce818a +e2c4f8b426438788ba84c02e7c9395b00f9780b7770facde25094236e106c405 +14913fcd39c2d2b0d084931cb5b4ebdda3d91d8a25ecdef23154779b30a277c9 +509902c229d32557328bfb32b20561dc38e88fa16a9ebcd74377ee96dae69167 +87481289a5d322e9c34dce09c833d7e479200afdd9998669b16a30264e72ca70 +f34e79f2c544ab96c323dadda4c9900737121d68aef6978feac182fe1214b1e5 +e2f3321680eb5f0e6fa1f2bee600b07db3d9546954fb6137443956de879d58ad +cb7d8a870f12a58c5475ab59790565de421f59b39e643ab54f38a94336cc0f6e +c5c54c6fe6f61d6c6121aad3b9b1d66350061d1679e795c252dc429647c83d29 +c684a07d0b41c72a62be91564cccf41edc5b079b2f06e6a9236addad84d0fc4a +b5d3403b42c9dbe80d119de3855e1b17498a9c2e827f4a8b85736371e39bc01f +7d7d14421219d136d182783f5d6f8aadad83109f5bbe65ce504735367ca9b26c +40e10288fbdea5d46532331eeaabcdd5ea937f1537796f43c7a3ff713ea2c86a +2f325acf06ef921222eaaa928a4dbc95a9a720bdcab273737e7753294e42a8ab +3a27daddd130ef705f2702702f39c84de8e5de998f507bc54a69de88621f1968 +bc135bd14c3ce226befa65d8e117c7dad682ce6dd839c443e5368b1dfcbb8cb1 +7357d126b021a47bc4b3eb4967183f4a5ad66bb4ced909993a13f365604432ab +42bbda92d93d132d4194a64717c65d6bdfad697e3e2c1b2962382d43cfdb20c5 +ed6a61484b3322140ae300953acaff45077505701f7c161f108b902734803f93 +b6e89a2cb7640388248e2c263135f0dcf9d6945f8b648c89ffa5d39911bf196d +24dd049e561cf823988605fb0b3b2b960be8448dafe7cb335dfd8870f2fed3a5 +ad8784ec4c5835f2aaac6a5f7fdf8f15e1bb5f28296f6af7f8fece5ba290030b +885e30d245ed99db82c0d669ac135390af59032d6b44b34cf43df8b7e3434bec +eb8794acf138dbe43d028c6bfb9b27f2690324f201352eaa4f3ae5601cfd4802 +81180cb05c6bb3a90948f261ae1e31edd7b34dd8f1dd2451eff15bc7b881e47e +98183454b03554d5aaf541f087bf56ad3087681521bf3c7b84c8047d3c23b02f +b80a55f6a26ea426feb545f7075a84d903e1ee6386e8bf13deef625de5ebef1e +5d693c8fde15c264113394b035931bfd00308cb7fe9b84d4b18df639a65f454a +9136598ad3f5fe4a71e2d7ee28ac54ab4735957cd1aeaf5b91247426a706415b +1f974db500682c188fecb8ec291a81647d09c3326e05a671e6f406140d94a86c +edccd20538009a2867c3fd9d8b8a703de2f9e2dda4a495f6c8adf2d8da8e06ef +9f21cc11807dfa35a9732f9fe8bdb8f2406552ab3d67621d23bf5f425b4dbdca +79a2796dd74cab6305c5a8459e54f5cd6d8ed1768676386d19e483f257b9fcee +1c8d9a0ad09997343314ad22fd713a49b8a7da1e2302ab57360ac15abf917f4a +930dece02b588a0564271e207746e4e7c330889a3f272e85120c7d1348379a95 +80f40a595b1a0f939aa46b7eb17d07981136851acc677e78e8715639357668fe +fb162d0bf9e7b58eb0a0a8e3040de3cc5d6ba9236cfe5a921dc2342167ec9d9b +1a6ed1b7da0da8474ffed17740221cfeb7de9aad199e58bbddce88ba826a14aa +9b11abcc6f897453ddca5565a096a79125a192cfebe71ed37b5810f13fa07e1b +286bca46d8f8c1e76c7ea100c2dcc5501653c7cf156582152bb6aa34ae041580 +6292f09c7c3ccf7581a1d1828a99866f5148de42ab060932d1366c2bd8104053 +f5d3744c9d825171812dbce8ef600b937ec0430f4a6129d69fefbefbd94aeaa5 +12673d7ab07f05528c529d4552ed20f00e8bfe54721cd959ccbca7f5c1850168 +5d5ab669a3aabbf6d431a429696274df399f3cf3760a4ac9453d407b211b2bd1 +b8416c1c23b3e68343ec28cc5e520fc2dacff7d41274aeb8f77beb6174560e35 +fcbf7fc20042393bf52b5278402ac5cd9f2e1ecd5a9dba963b9acf08d78cc5ec +33bf5c620b6f5520cb781a48f247158899cb347b977cd62c54cad66c7e6cfade +433e5be9ff8af602bdccec15daaa4316c8289921d19f809c20e68fca2b71db82 +df2bf6f0ab9d90b9830d399d838547fecad841b07fc429abdf02d544b41d5e31 +7655829d65c3c4eceb08dedbc1b2db023ad5e524ac9cfba00bbfc2bb2df14d60 +954d55560fa6e2ff31786acf9277e5e2018ea2f839873e3a4cff611d83a1cf8b +7ea655c6bd34c7904818fd857cfcf4a9b39e5fd5cc551655dd75602a432a077e +653d3096ebdfe93e0c7c7fdb0e52ac0145a5857d5bc46daccc9d9bc048cd6e56 +1ac2f5cac16d537abcf20dfe3c6aba54f400573da27a781dcbcee2bae55db664 +18f8f003aba535662a2c891070ae99839b4e0fcdf5ff9b7201ff83bbc9a5d39e +bb61de440b63d08fe86bbb51e251a65501f8ace59ec1907c1268c639012974f0 +d8c09babdaad610d2c065174687fa1d783dad6567f1bc9056b4e7f90796ae034 +529735bb2c26f89166b67385c0b3ea8befaf0d3c5d2021c5e95f332659f57c20 +7b74c058fe712f9f6f7bba2afa24d922819590e2fdaa7b44e2b7a401fad4d28f +05ab33026864f395ec60b658d42784533883b1cf6d5c32baf24262d835be78f1 +eb7b30ab043abc420085fc13622e1eea3438d9736c4ea328912fe1f587d4252d +bac29ae8f47e156b7183c1b79034bbda31e08619fc106ff4ab743bf8b9d8bfcf +a8ab6b810c1e1f862201010a3e3da3ebb9457071f5bfc811869fdfa0ea873a0f +fc47d86b663bb3309bce467a81d6f757f62a195f7c6962a729794666635c8703 +db1e2d71ae67d5dcbae3cbf5b948eaae1e7e7ee478a0e4584ed70a019449b463 +9f812dea0ca7e191c9698c48defd784c76b4692337749365039b13055ad9114b +1a456477c879893ec3bdd4d34184ae5f3e7bbd8b8ac1abeb315540673a792b21 +6473e225bf2b925d77276d0741cc50fb9ffdd34459642d337c044cb4d58c123d +652dffe4dc9fb7df87bef364cd7d62d8fe7046cdcf4b387798754c409fea2867 +c3c3e9603e79d53c02465ed8b57b752f76477dbbd1c8945522901478aacf4871 +c3dc4aa90b10c08351d608a02d168a5978fba8eebb48ec93653a8e178d44daba +e42ec334aea08544a01dd57943e050e87fdf8200d2cc475c02dff5ab8f90e58b +d3efce06d49ea472df3f149b629059dd9e839536fe014503ebd1e6acc1c35637 +bee2f01138614af7521c7a9b0ad46187f168e387a095d795c067660f71b43521 +7132c561f442b12f84e183d1f5dc887b3e38f904dfa73777e7bd7d3ab6e91fe8 +fed58db8f42e4b65856d633c75e5c9f27fa20a7c352f30d2ceda868f61fc0548 +f2ef8ebcaa18fcbb4439ad597a2f2d89ecba33181e770d5e8b89d95ac0c9b137 +a8cabedafbb3a2071a0484c54dc24ba3b00314555dd3268690308c839cb0f0e0 +410116d5bdea76dc4e37d89e5262df1a2d5214bdc3287a67e7657cf5b5f66892 +0e5b549eb0929093bc809afe32a60894d7d5dbcc546b0664cdea07442c75ad9d +8bcd96bc17af39925125ccad1a305829e9054454ae7db205fdb3c459836ae540 +ce773785b55b103bbb400a6472c14b125d85426138c06d67c5944cd0cb27b224 +e1dba5ac9631e37b2a3ef25adfb0271f729f6c4b9402771e0dac6068e12a0df7 +7dfe8ff7eabc22211bdc35062527e1ef26da58a905331a5062c66abafb46feb5 +05aa06ae1a4d7e88143666dc8a7add3f049fdede30f7785f968dbb0ea2de8bf0 +a08da2f0c9473885963b710f96fed7751c4ce01b4f954e486325488951d4bf83 +01662f9bb15f48623f8b61c7bf7dd47fc35e73669f03286ac8b1d714dfb24415 +7083b0340c5535e329f6a114070d01df96675ca34d6a0280ae26e81a64ce055a +8261cf5db776cfae5cf1fdc3f8bee14efdd08b832ac93ed7094b7e57a02b86c1 +574ed345d13e9f9ee91bc99fff620fba401de9c6265a1ab696a581e15a3e5d56 +dc74fc5c276b7d1136c94e1816aa95c0f3207ee25769b17948d9a4aa60f7968b +e033c5e124780bc4f532ec96f64e542a0851a75664b073dd16034e76adc06931 +5f5f2492fb97859d59cf2f6fa3a6053caf4013c4f47469b9bb1636e7017a0c3f +5d90c8d94894613b51895a11f37e9f31fd98a37bbf4cc1e01e5420556160dcc1 +25bd769c66ebe645bfdd4eaa9c53d414ab9757c860861eac507a612a9309e5fe +e75c85868fc360a41846a8fc79b60a175606bce995b584b5d645f9223b7b3a3c +e4e249600921f783ec8f13abf5aaa3b5008389c46da5721dc304f56d7ed99f40 +264d7c378d96a6d1a960cc2e412a85fc3a2c47c6f70edf2cedede7cf39d8512b +9679bb345fbc28716239bd95246b59d21a9d8378897e9c7607af76ce59e66ca9 +d07928d73ca7744dc5cddfbdac11468497cfc89dfa1a24b120753229598af48d +0d2e6332a73189656cd1f584496e6f3b1552b04cdd6e51a8388dcaee3dcf8c88 +072651ee9cd44e3cf938172570ebb994bb821bc04e1a7723e16ea720bd8cceb8 +af7ddbb6ac14a58e144ebc37819ce9f2e78c0b8e5f68ed48a5529e47b2d9a7d5 +b381bbbf863a318d719ac4e678cc1092f721b5ca28430dd1b597004390ca2a34 +a54e73d1d8a556c14c4f04eddb0adfa43ce6ec57c8fd98ef7abc2cefbe991786 +a58ff65ee2bcc0ac940a0f07e367c032f0a306375948b54546c7379053ce25a5 +707d9c54aaeabe39fadadd74e1710f617d751f7751d396c5d054d28f93314ea1 +0e6803b627f3e1a1b2a2c4f14a8e9f9da3a032f7bfd872f86470b2f50e7247f8 +97ac03b1a4fc9ae5fe6dd088171746706b39432cacff853edf1b2fe87208a44b +c1304b88b88f70b2c7596cf5ea33d9d11317da7dd2b8497aac6100ca08551dd2 +a57ce4efd1522a62f292caf6e273878073c82f48a6c9f10c42be92c439cf49aa +8d4302a85a9f6f313ffeeef59e54aac64b7dbaa8265613f46e62d9a93b3e5740 +9eed68eea907fc84a6ad170b8e1ca16b62e46b1067f28eb6b35756c71443e0e7 +f0ea70df14dba384368a68baef33b7b2105085d179980d6622db47c1dd4f027c +0fb25e8b1ed04be113f6961107c235eec39afa4db672fccd5c11737b22ca2a50 +af750d838462311c1111d31211fc41b76a96197ed5f62505bd627efc44c98cbb +12d82f9969735d8f4f36e097ef1cc66629b901cd7d530d74521decc86ccc0707 +07e8a5208fd26e0fca9dc03e4b5b5bb6ee8d899d439457f139f7d2eaa4dc6676 +a411a40412cf8808cd1e9ece8df377dd30af8dcb28e8635c0596c9f68728a877 +671ff5872c81635145e98e055dbf7eff602a4cd98986e49a26c3754b8a264b99 +b53dde3ac4448ba76a550df75661094484ae263c8bc0613152890d17b1a09774 +a16fec15c779257a9038a6b81ce29162050e1fcdfb9aa0c88dad199a74470938 +21b4585d40e628823c42a45bad0c67427ae3dea6367b69d76820550cf3b9820b +043f6c646cf42d20f1241d0ce8196b2c652e9e10278545cd289bcf37c813fe83 +1a437c6e4991750aa4c7970e200b86ec8e26657deaf058e633011946e8569c27 +fa7da592b78df95c94607eb1779393c5c2b4de50c425384431505a93cef43c13 +e042c12a57eeaa2c48d002369aceedda1b7866c865c8f043bc4e50d824d2e312 +04bd8c1a4d01a688bb2133a4ef37b858fe1de27fdf8e5382e4a3f323e016e151 +8b1da5df2706b1d76b72db59fd5753e23b41306070650d6990cc2e7ba3014d2f +fde0d8e36ddc3de6917bf3ef03c84f8eafdbfa7dce1c3007bb57c3860f65e991 +13cbca57852b97ed21a7a55ea9f0803d13accab45fac1e4009be81d3da217dae +45b421d6a76150d7997de83c0aec3d7c09d5e0cacc5678f2834e21c22aeb8ab7 +aa20ed2112bf7d3583cb287740f2e6f828f9d07385eafed61527d19055cdb129 +e1e5f1326edb56d107250346184e4580fe83bf44e2343cac0f366e04dc9aba72 +0261224f33ea17f779ca8532400edad7ac6a5868a0251b030360b1ec93aad4dd +04caa52edd01246e2e275f007849b317394f9ef09064dfa18fd3c0b32ab4073c +855cd08ffd407d937292f54b0857c281b0d7dc4ded8070d8616e92faac8fdecc +710a60c61f88319733d888795c8b45ed895fd29863943b6632336aa49c2fe365 +752b6463cefbc1fcec8e8ace944ba4d35a4dbd87a519eb5ce02348e106c3eb9f +a57577ba58e7d357e55259f182f72c426eb9e12daa1cee7210f75cd7519fa1bf +80b5b2f3bb7eef8348e39c270336f4c96a4e458f71699be5eb94f26d0c7ae5a1 +b815789c4c038cdc8285c6394b442ae05dd2322f5aa943badddad4449606020b +f0f63647645d0c1cefe0a0e4964c2f2c9df5754c5d671182d8e15774752e06e4 +f9bc5cb91fc5d31fe4fe2f9bfcb53b920c22ce8d0c244851c9433f2d8f9d00be +47a03a8d4246ed7a9a9bf27235f7537d071a6208b6eaca1b2b6c7c43e4354a23 +b97ba4ecaa7d93fbb73a4bda88c406a9a1fbd9861252f03b2385c3517c321411 +2f968c018db6e3e3de8246c05da9f4dfa2b5d0f2cd2fc3ccc8005486b9c1d1be +e1e8c14ffa77b18c024a98dc5a38b6b0e057d80111e7d2296414e87276c13da0 +e550c489381ec3da91eb4dcca6affcec210ecee0c8911fd338b9dc590d17896c +9f96dd780503bb15e0638db81ce3f26b1857c3705fed78959c83ba079e49fd0e +08b3a60d8641ff061398f779498633441313aaad5d54e4b3fdef4e0ce6013b20 +f17c6b7b1bcf14289c52cd55b0c456a69960f32fc06077819f32bade75c69b23 +bc97b0dc78532580f9fcb1a7d13b2dca90785a7e958b579d397a5df187d4b0b5 +f76282b4b00e94c92cc3653a047ea5a003a72f2fa4053e3e9098f82944131394 +8c471657767911fafb254abb22cb50693c8c644096a922069e2e2498d230bd19 +4d2cfb8086eff1761fa2b13a0ea61d6ee0923c7c4d31897eebeb1d73982e21d9 +66f303ae3ec4dc108f8ff4da3bb381be3f4050d101d37042b11b314535a1c370 +1b3dd8305868241efaeb394ea2d3efbfbbf3cadaad79416bcd47f8c19cec479d +19bc73567bfe6d55713ad85a42337200752777a1af0bdfe46bd53534c4fee290 +c23aa58863bc3d0f1afc9622c886244c3da73f429f8a130510505b554f1688b7 +709b0282c94e36468a0af39d04fe42825369197784a82d13011cb3d193bc40d5 +5ca5393d2b32c57abbed3a0bdcf6f5dc0bf26c97aa46daa4269d6e2e104a78a5 +c96a39b4b121958a0e643244f646480b348563e417335e5703c368081c178054 +293bd69b1d6de52d140ac2dba03cf45c83dcadcddc046526b004373d8aa9d2fc +bd3b354ea1136b0161a7de8ba06051f3cc22b028a2f76b6780f74c5509c49268 +0ac5e71a1578e344dfa147d4136d57a579bbae76a482d742b44ca381a96ee349 +613690f1a6f8bb1e8af1df6b2555681485122512162894c2e85b2b9a3bf5628c +2a7d925e263edcf66eda45022c012d0ae52faced11324543ce842b5c6349a832 +d91999d162fdeea3451b87671f83bfe321726a6244d6f948088c0392d140d0d5 +5931ea72d9f6ef32bfbddc2fc6ed0c50decba208beefbe2da0f1b6d918f55ecd +be29f3017d358dcc4a3daad96fbd6edce1a0144dcd3bac07d163935f8580040b +426a9434da7a234354e273f62500f88237cba7771d4ca0f50a506f07b7eced7a +6704154a7eb342bf879fc79f7bc6c488a155fadb56df553ac0b5546cdf3a167c +528b6ea5f65f0e02c863a738ffba4c4a0fb67a788609bcea6e504547c6e66cd4 +45ac2c76dcde706679ef2d509f7f45624afc984e0a3f2bb2e1d1364b038d214c +11260ea09afb681a4fdea1df8aa130bfe08ecb071e7fdc72c90dc1b114d81935 +92e0b7a609fe06b2c805730195748a02b1879ee6e350c7837c109063628d1f76 +e39e0b4fd212b2da075c82e052a9f66be9446c306a956f412a39fa903e430eba +d831d86c7f66765f92137a8cf309cefde84580726dd922a4defc48604b992684 +a793c7a25a21438dc7eed60e0a0c82007888457ff63cbab3184d5009ebc30428 +b5c1359c3fd71ae27bccf2be4eeabd9ad709ac34bc6afeb60c3afecc39358bdc +5b56f65b2768111635621d7797882dd1db755d26bb2e0f03b1a8d80f902c3960 +396dfc9aeca6ff7d42e7f6b4f83d1f217a68f3affb54e7e9aa1d0524e1bab538 +3843852ddf61b2ad706af3d609a8d1f841f9e9d12b1b0f92f3b47b0dd0bc5f04 +866528c0f63db3feab76645cde31f0283fb8c711fc34504697fa0cfb8cd7b150 +172cfc93d64ab6a1da1bc96d501d49ac87cc6a04db1635c167a1fdb58eb9e3cb +94c90d2f9046890700513232d5bf1678651012e2f817114f46a1019e72220d7e +d216d12712bb8ae73140aeeb48a3339dc1d5a6efac1e8f50c92b58e32725424e +ba86033bb1bba686695cedd75be66d54275c8ddecbdcbbdda44f595e6b686af6 +f6117bcef51df5e3c98e90171952a23f445c2bca9b8626400905fdce9e0464b1 +c1d241ae619844513e9cc3a58a6f978089d209bd775438d7b87108a342c76b62 +8c3a6a28b9d0c42e696f3d5908cb2c70d8d3ead811ef4dd19023faf86ee053c3 +014ff20983774efe8e26646abda4954ead06c80c7670 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/client/shared/lib/fonts/UTRG____.pfa b/client/shared/lib/fonts/UTRG____.pfa new file mode 100755 index 00000000..d9fa0e78 --- /dev/null +++ b/client/shared/lib/fonts/UTRG____.pfa @@ -0,0 +1,1126 @@ +%!PS-AdobeFont-1.0: Utopia-Regular 001.001 +%%CreationDate: Wed Oct 2 19:10:38 1991 +%%VMusage: 32987 39879 +%% Utopia is a registered trademark of Adobe Systems Incorporated. +11 dict begin +/FontInfo 10 dict dup begin +/version (001.001) readonly def +/Notice (Copyright (c) 1989, 1991 Adobe Systems Incorporated. All Rights Reserved.Utopia is a registered trademark of Adobe Systems Incorporated.) readonly def +/FullName (Utopia Regular) readonly def +/FamilyName (Utopia) readonly def +/Weight (Regular) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/FontName /Utopia-Regular def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 36552 def +/FontBBox{-158 -250 1158 890}readonly def +currentdict end +currentfile eexec +fa444f2716d92b815f58ca9049c815358e22e32e73a3e6a653c538ee56873363 +67713b8cab082730570f5b5efcf34c2cdfb6f8dd2b7905a37c1924a2424c16e8 +711db76501f564506b0f45fef10d83c3e3c6df2dc0af7802e7f42c81b4243697 +ca09088b868d983e79e4b2c3e17321993cc8837921fd4ff7b92a1294c5ba33e6 +8fd40e63df624b51865721e034f71bf57bee0e0c2a9c169c7a626496540d45db +585d2bc93f83e6829eacb859a194d7a57904cfae75e6188c7121003ae40153f0 +0fe6fb52f339e72d4aef38469328465a3bf0ca1ef58dfb447612eef4ada248e3 +ca525b0884971b85099d73538152affcad51d03eb4060a5c580f453ee78e5c4b +991f77c6e9600c135395d56335a7c3a75c0341979d6b404ee496214a5d20ae06 +e17d80d37bd3540b8fe913bae1674afe37d0c41e3d9836a7b5147be32f9ba01a +df1a73b89d30bb595a4b279032e37c8230b6d4933065947c3e9150d2c7c4d439 +d60197eb69991ef059edf886ec0bdd28158a71a2df96dcb67fc0bf81c34cf27e +12d6ec950a75993af99fbb040af595134198151e7361672d8538cfadb4716785 +dbd48da442ccc911ae9157b14e433559dba1a1c5619e99b57274d6998eeca3a4 +7e804d8fe3a664f39f33237831385949a230a21e52a2dda733f2f89b02ef4ce2 +5d603c9bd2f8e4c0443070940f0380dd1ac60ff462a9a71965a79d787e0711df +0a69bd86a4846965ac6c77f2e1699c4620c1bd9f5b2263e13a2213631c55f7ab +cf60d2e63a7830d5011d9b9934bcee2103f4a5d56942ce0f590a15dab480e5e5 +723afc8e1d8d96f3e0d8629b88ee477ea6cb8121b0adddf20405f8a32756004a +8a59b2cf922a6dc0747bc15e99079aa12ac0d9fabf8b47c5a61ca5268e01317e +1f0a38c468ffea597a392ae3399daf7c03126987750258b5e077d703cdbe05b9 +a5fc4d80e8551c2c06a2c579272877fd462fac6569a7a9f964797df79628ba7f +f77447fc2aefb25089ce946e0aa5c5ff21370f0cf84d8e2affa8b30891081b16 +6fb86fdfe65e7e02ee551c6b3e2e324cf7e18664883dc538018ec8cadf7093f4 +a13708013d6ca2afdf644c0155342917c2725598fcafddaf8807200682fcf04a +4efd5919c21ed2ec2f7951c2db953ed292a54783f5c541bca68d305b05df5c5c +f17b9af31035dd8a77ed8b54d4de7d684f54c58a28f0dc55e7c692cfe444216b +18751c24ec1c8a00a5cbd458a0ad54e7c13f26b4c4257fd992fbd1338845fc69 +6b97a2ee6a4d4f03fd387e745eeb8e97eb67e40bacbdf1d6c08e9fa2e317d30a +c4234559096affd5b2e65602ad9c4868e24d7f1d35e8b6679e436a010be5ebd1 +52666a26ba7f7b68a693add1d21138ad64425e9202a043cec98ebc182c152b93 +9f88cb8c89069b72f3c264e2bea7cea9aedf1a8736beb55cc77b02e3989e7013 +b4fdec2767194fa85b1aba185aa01fc8902209068fadfd1d282a59f8b1d7e30e +3829383779fb9a28404759c595b986deb7c59d315023e542b461327e8645f440 +3d1b571403e30d988d5d17b09590d644cdaa885cf36881602f220a7891130e31 +2ed47ee703368c5beb240427e1b30446dae522143ffeac91f3bd6a3ea5c57a63 +f81919870daf71d9b522529438d5e51173973f612b3afa5e4c5c042c8a8a4ed8 +27d00b1f5a102ba8a11ee7d942e1954cf35b875abb184df026b1f600b27aca0e +4dfea33866de9d8b6b8829c128876a2b882b1aa1518285d87de3c39bd74863aa +229a0108f3070908664f4f77a62f0e67923d844c9ef91a6affb8a72606f5085d +88c35fb9e8eeeb663742369e6b0ab87c82e3eec3dec4adb2098cb25a35d543a9 +70025ebe038e7057a8d0e8f7b2eb86418dc39b494884bee8c92c87f1af4cfc44 +c14a177f200389c0a23c24ef1c59e9a143756c1ac0ae50a12a82228faecf86c3 +4f7ba61f010a0d285063676097c7c3fad3b19479c8c50d712b48ab99e4858096 +a1799936df4bfc4169e5544adddf343c7fcb63e83e2b2b6eb68c8a33edf201c6 +5d89e5b0c3d21d1aad02bb07fd463f763c09dcbbf7c216b1554a9402a8eeb5cc +9de4edf0753d8882ad183a9d14e2de51fd81daee2ddf53745a076dbbb790cdda +4b25bcea0f98d832886f26bc15fdae9ebfe42f0a95b7d02c0f65ebb1fa0d730d +a1f6d63c3da03f9ee0961f5e93cf943915e0dae3147e4c100fc97859f1db0e39 +a85a06f140305e9cad70247718385e9151a091aa9a09552c199e3ab164f28270 +fc60a08b30ce11e5d115577e54b57c73b2008fe0f9679cb7d60c3c80b8e63cc1 +046a093b0838c832125c9084c9d3691fdf6236f1e4b2cbbb4ce8d898d4c27a97 +5f4eb9ee7e3c2d1a694465a632356ac7c06abb42f89eb2791ecd146d29fae767 +2f132e065ae5f5432a5705414049f68b871b55c409ac3f02cddb56deb21c8d4b +202b93e8a5f22d09b287fde695e9beab9fb790fadf1250dedfc8188b0a3975be +db8973fd1ee42841b2bf6ae539bd46d0339dee6804a92a0c32ca204ec9897f76 +95d04cd16c3e09f37306109da8b55b5c69660682e8328724655f88a08f11f9b0 +6d3f1629240662f0a0ca024f16265503390d9adf8b521d971d419a4cbc15d322 +1eaa0b79e4a45d2f0bfc9bcbf135e44b937e4bed0a4ea896da90e40bd793ff7a +d0bf85fed6224690f801cd8c0100c4a79be124833774b86ead4d58bfd2598e52 +6bb5d08264df1c4ccd29a918bb27d7c75d0fea288e066a74236de1828a0c9fe9 +6b1de344a4f57ff0997707f9e83c25cc5639ffcf2cd01152d9f676a80c637a69 +5cba153263f8c1d93bfc03642796263c3b460b1fb22fd4f63e742064a337d1cb +c12ad7b5c36cfb0a62341c849e97ed8a6b5e3e93911dfbe3795f9debeb3cf7bd +6311ccabcd1d80c76d608e0366e23725b4c27210c788f25726bcb13149c781b1 +3e77341630a99a22cd95717254844bfd4221df25ab740978011a301861c4f0cd +cbf77e1b69b90ecd4aba88d2c0298bf525c4f6f0be9d34d74371517e485eda6b +d38374ebc2ec4abd9b7969b426b40c356982b735289f80583b377ebca2c14068 +77d7a6516135878a18deefa530a88685cf0bb9ba03c45d283510a68b17853cbf +c1c16428a598e078564a8d50bb1171771ff483ee395ed074d7f524eb8af23061 +5b30a01122d440365c7787ff477ce068ad1c8e4f9a409199138cf49a435326f3 +645d5e093179b96831b7dfc926ad11a2b9bf2ed3a5f4ad135278dceabe5f8aaf +298bcf406c9c11cfb55400fcae95910ea7c09e607a1c2447ee82ce7e3faedbdc +2b1827ec539eae6ae25927a35be1aa6b7951073746e5f684f758fcabea3cac25 +f608e033b3c92cb05b7c9738d3a6d2cd5e0c2d29b968ed7c7bb43d7fe734a959 +7636ca80ee97f6d88550c39d36db458997a98e8bef087c1000add77f8c6d24dd +2e0f6f4772ef61c5bd5148c3d67dbe77df27a300e5d8c9e4b325a6d8cbbe8675 +15ad15966b130bf4499ea1923bef7a9047eb1b0d35acbf0b8303fa08b26c706b +7368332adefb42b66dd9ccf61fdfba00b5aee231c2232e8d752703b0af6ae850 +ab8274563f8fead4bbe9fe860dfd95a6a7e0cfa3d8f6ebd0e066cdfd396d8c57 +f8f17bce0c5678649034a62418dd2463b8f963b43ca02d011a9a1ac4aef9c9fe +151ef8c726e376158dacf1131f0ee855156d95730d3626003e51983624b417ad +c258164ed5b2bd3d4e562f16da8a0b69871787cd9142d297ea3fadad3c2c6dfe +3491c8313c2608cfb1d6a6b21d9569049031b0cfc1d9e96a7186164e04d713a3 +2f1350ab08811688619335e7f331cbf390039502cfa7f68ebcbd75937862add8 +f0c7f498d6695e9d48c4d3e07753062a992675f1eea3cbae77c7bf35433bf424 +45aeaae7876749942982520abcbe95a7ceeaff412a02f6922a1e6c05e9a94d82 +11db8144984dcec1d1fd6418934a57338e070b19ce6d45c0f861e429b3828c9a +c98821dc4ec4d5b7f64cfef16380c478bc5a0ea0c4b82d94e3e01067b3027c73 +e93899ee5f37db55e0be88844dc7c5a538e43510a65716320dac3e01e164fe26 +3406de45c19c250cd2a9c3bb3bb7cd5fafe16d9eb7e00d012b65668104a68eff +bd0c11b55497378896ac50abb47a6daa32f7c21cd34b19f3f797d883fc8745c7 +db21a910abd7e9733239c6751f71b126bd8e26f7cb16bcbe5a066cda9fce63e0 +a9d40a9527bdca47211648ec231d0aad9f4659cad640181b76d6b02309365348 +4e7e328bb1f7280ed4f8fb571d05a7a55842ad1dd294cc46cda410160f2f7c09 +4a34dbb0aca809a6271c8fc97f4103bd83b701f2f474e0bd1e7f37fb7d898e16 +6612f9b03e25bffde2a8d6ae1dac8b7c28b67c371ceaf8020ffc9e1e35973dee +63cfb07a6e3eee03799b4841d195eba565c03e10998fb80fb279fa123c2e8dae +94644927b473c414c1fd0fa0b359a279310e23fe44104f0988de3345d9aab3e1 +e64dd94ec8a6c20556d785e7e4f4bec46c0de73185fdf9a84c6f46ffe7c52c1d +c7d62ad792987dccc225abddbb6fed504864476f1e8d0e2ae009de5f4c50bc6d +8d3902c6c169cc0c2008dafeade6308daa473bc4f8af398ad4a8300f6b989271 +dd59f6d52ee210bab4028b4160979401ed9f626526e43b2362ff92b208a29b04 +8110c2801db3a59f1cbb89139c80bf025d45d61b2bbb6fed4456089976a94d82 +a094aa8201027413899a402050ddc0421afe5d357a8d8e0ab398e01da601a0e5 +1c6bdb86ca2d064b2d8af3ab7a8d39a564d2c2cfbb74f62aebe4c9cdb668909f +2d83bf84894edf23a3db2d3b4ed77d091f21ff313c67a0abab68e57a541942f8 +58ebe5334687a8dfa0bc1eccfcb1b793d5aff3d7479a72ef70b3490f7ef3dbcc +1beef6d171dc7cf8acb25d04181009407b2d61dfb7de55cc433272a46e86a74f +a8a5bc69419e54c39220b7b3b716c5c4cac5313e4d8e1389a2217de9ebc0a4eb +f72dd28b7b2e7481457123167f2a138a2a9ab099706c81b83e3a02a9f9e2e321 +c9658c611fba436a649d72ab9be1707e3711d20e15d778bfeeba66b09286be38 +2f903ec637a8ea274ef8a8c488c5cfeaaf616fa0e090ca2c7a767048b6086dc0 +ea0e3bbc8ef9d01a74cb264b3ca824f0d6ad786127c61d0d8ad13c31e5a25555 +ef5e64e1d19d150d24d1459e8da3ad799fa554dc7877a417f51dd1a3a02e7341 +51b6cd7a2c6915127017f748942865f30fe048b7e749bcba0e015761c0a9e1cd +e1cbae4bb1807245d7547f062a05c1f13a753eb6fc3473caf620347338bae987 +1d2bf08764c309b32b0c915b4735481e25259f53c53c144b8ea3e8c2a4dc2725 +85e197f684936c0690e497653a46a7b86c7e57b8f4c890319279034cedc18bfc +ebe1828d23cae6d1fa854149d1cde376470869f9383e83ccab2af11c2d35eb8f +1bc9273cd399c7e8478ecf742c2db209479460e310f8013f1a64a385209d2e30 +000d71f5fcf62f251989a3d852b9c36e57273a60d565aa387236f61162e46821 +9f755ec5501247ae6bd14644106c04f36662afe7c3cf741664c6a4789f3f8ce5 +baf6e347f6564be8d6fd92ba9bf04ef31c9fd60a2650b1086f9a244a113d85e9 +405dcf23e29d7b46281baf01728b7355b8a1e50febf4443c2d1a2560cd47d652 +cfec6f5cbe060f8c1b20fd4720ed00186609c40771ec8db4e7e4434eff8aec89 +007816aa98863f8f8fd3ca454bc228bcf4d2522d948ab346b5137f1cb52b5a52 +3877acaca92215b9fba427112786c2fac9e5b57879d28249d2d71040aba21fc0 +f73498c856cbc6c5a5f25bbcf19ec97768b8ee9aad3436536a9ff8f22ff72206 +8555d0356ab16b1fce02b79220323bfee1ebbf156308bed2d91febd3f3a13927 +be4d619c75ed738dc1913971fab9a76bf697c6ce9db692d0495abb1034fe31c7 +23eea2feaee80aa07117c16008a7b5e00a13fe2dba4c4e3174762c28da98a191 +0d15eeef183cb994c829de35324614301a6e98311d9f5f282d28da1b485997ec +41eab629352822a5583d307d6d417b869f6dfeb158523a581557f6acf91c4f28 +ba0af9e428099b152946769932a190410319fa3cf1274c6745ab16df56afc3eb +4e67f521dd52f3e3b38e41d0055a8bb6f957817850d693f76c2237f78ef9e660 +9ba5ec79bb0cbb08f461991a7baf70e3f8c8d619c0ec7d3d7aeb964f2e8b7113 +8e9868c98d8fa3a5769147fb72bb82ae844c1331ab285dda9df924cf36f2200c +b0c4b28f19aca7c4591413c8e89ce410d469a7844af4ad00b6089d1efa64de2d +49069a4094f2af0552b68fbe03655686cd845e46a319cebb984fa717b7fc2565 +4cc9843d079512d8ad6d58d55332a962c7b20514d1b53818b47d028b59ec1176 +43d3571e690531d6980c0bbf2150f5afadf3198dfc48995afc745a8fd0b40b7b +d48c00010ebce60dcf13ad056bb53ad3e7a3d0984dc28b8b4aa109ed4d62bbf9 +9f7be92fccdaab5c52cda9fdc972e55a933b2c4c1d2c54ed5d88ec8132d0241a +91fda05af2a736547dbc1da85588b04ac56602cd9335d9a31bcbc50a5e13626f +f86b9cf6bf32d2a5b6c4a3754f9447e2eefdb2207e1c277794bfa5defc88cc63 +1ff2093a0100c2db33baeb231846754a10eafd8640674dc03d737446a345eda9 +fa03143bcd01de7aa1486de001ff31f1f7e67681017a32dc46f8a9aec6cc0573 +4a0253dab3476519de29344ad7b0eee93d0e4438bc852f4ff4d018a690781924 +1730a369bd2312732816efa8000f0b30e8d19b8551857eba645f76f38257d96e +4088b20e11f5485dafce80ab03820127a291acd4ddfadd039c03962078aee0fa +6429e748bd3ea0290ac67f1c14eb8f63cd5b7f4a3e61b91f3428a73509151784 +3ec501946e468e8b68374ff8b0560cdd38f2eeb263106ddedaf7d54ff1ed7c65 +c9910de2993171eb6f5d9a4f0fc3368d6f6b5e57e280fd9c5c1969cc814d46ae +81c2ab001f03e1aaff8017b6d7e84cdf0e3a747daa3d2e1d674cc49c8049e8f5 +8914f54313f1084396beb5defd89dfd0d73ff6ba76ece9939b988bc5353f221b +e4bb40b79c19612319d196938935747e96030a5df12caadc7afe24878a2d6e82 +5230548f931259546b44b4460eded3188fd76d06a2d0392e2371036401e9ba72 +a14e50d6aac474d148a40872f222d3d3ea322c37aed0d04cbe2551e513e40943 +04b30dfb33710c66f3df8e24296604bb84e3e498200d942bf52c452f79b855f7 +bfc47420a44f80ea16be3f8e0716695d20ba1d28739ae88c04ed2848b70d7369 +46734ecac041a14ce87397706f1ddc57144b7a61231a1d0e458d3d6d014ce66a +b6e37b46774a7a9c74d6a5b636303d3002151be679abfbb7399a0dcae5bcb5d8 +7c84bbc66fa03df92d4f5ae78e85313acd62522caf4fafd187c553302e692133 +f7971b24b92b9e0321f93e7b747bd6ae5f51cdbb247d36255740752549bcf8a0 +09e774a01bead6ad931c11453a179e0ae2d23c09acb7b2bdcb16fbecf07515da +0ac8a4b2728b3d5c8945aaf10fcf770008a0aafd33c402b7304f6b203d0d6a7a +be7a27608b10f9d67c39f5fa2c09ba5900f0a6e6c6bcea1a0ca14411ada0a36c +d19c25ddd2d29ab25d4cb7dc3afaa0f5aad7e22761863cfb427fc4fb8c991251 +31cd3376c227747a6d3afedd341a4e6474ba273e687640eec85bae3bc83d762c +3380159c2af1dc118fa1bd2382d339c5d213bcb89e89fc8241707e9bff40ec4f +85a889421643ce7a87953bab67fda678da5111da8a95f29290ef70d672f0ef5d +ce90ee85275392766ca752cb7a2bb9eb416ffce5166a955bcd54fa2082d942c2 +89a0fbac57b9cde759be0b98d0e6f5b51c7dbd6331730a15635edf1a3287c679 +61c0a248578b53559a3d040f8847813ad1d76480c43f4b674bc0659bebf9f1f7 +e8cd4acdc0e0fc27104601abbf25304f8d5aa221e02e73c37868baea6106e069 +88a7b580b091e6c4ef56e0b52bf9055039d2c3de83c3a6d4f8186646a6e1ec4b +5ee53764f122509d63e339c51b15fdfdade4cba2880c66bd607977684ad01aa6 +d405553066de3d2bde7eb27b332d5bd0371881eb0a9d2c2b7728f827444a13d5 +758591eacaee4121c2a00c05b58357d8053d2223490b5124fa646965a0ddfcde +0f99b41916f8f80d81970753daa6079aa0014e800c54052e01d0861a7d3add7c +2b542695ad2a3d6c56190a170d23bb34829b049e2c02c69e79d597fb5d2f9ce2 +713d681f072435c8e3740fb61127f5d3bf4cf1adae5e99e66a0c472076f476c6 +171660a613a35eae2d353cf78a06dbe7dc227dff30a501a547241c6cfe8123ae +053293e9ed0c1bca42ceddc775a9200420a37ef81552b721c077c005afcee2fd +fb2e9088451e0260fef0be7dcaf9d0e4eeb3557241bbe429583e4fb813fe1992 +1ffec808630e4b3e64cdf9d2e664802f3f0846f0216b8422245a0363a2a6ccc7 +3f7d8b39438246611428c6c32584976b10375003469fe0efd968e21319e382f7 +50c386b57d7b7e8e4b5dd8dbdb8d816ce712bb7ec4d3a2ccb6fc5784c066f79d +f9fab8f575b42bb18f22a7f2919364c61e81cd47d0b121bc0352247ad8d83ec9 +36891e106f85e8fe25efaf00582095dc7f16dc48b3cfbc34234aedfdd357643f +79cea8fb1fa81b91b49f8c063fecaf8b8bf0fddd8f2063eaf6464de3e963acb4 +33a3afa3944fdcdf61597fc7d6caa8e7538a784024ed4cfd497ac35c6796fb14 +65aefd0498b994fca5c74c003c6ea1d6c8f935df6ef5cebc5ae7024986be09a1 +3a368d9da9061aa8ed1015a60778e63640addc44dcf2e32bb1d017f10a319f44 +fc8aaad5cb149ebfafc0dfcd665b07f6387f4e3fa9273815a7c0e87390b89964 +18fe077d8330190a04f348648e1eb790cc3cdb5005afa7dbeda6e102d848e725 +ce4d4a9a9e7dc16a9035892a73bfbbe130b8d059e0282693ba7f062ee031cd38 +edbf41556bdc7c34c6f2547797f2b4b202fcea7d6c1f6d6a890dc850549e2d9f +d4fed66e6a66f93ac27cfbfe938832d17c171729fb0eedb5befd2d07fee6db06 +ee7d2e5302904d0ca4b21b40e3ed346e6976024f6ddf05ab1b7a339c42d2989b +8afb7447b2b772f3cae03abfd55b1d14f412109e7e99057c66ed1fc1c842e336 +8f8ad95e67626219b6d538fa55e6146f7c4d2819b6ab69628d3f918d5c21ba65 +6101700f2f9b5d5399a1209e0fe5cf62cd4dd8b065abbb2024b7766478b78d89 +3ea80e633d445a240e27c7671018dbb01e4b38beb85ff02de34a4c06a092467b +2409c7a6f7d94461d55073a87ced3a6048ee3b688042bcdaf6d4ddbde6edced1 +7c0b7a2317e60410453cba8646e00976bbf1542aa0614f93a6a323de99774176 +bb2babb068c8c29bd4e4cb7f8b3646ceaddcdb611215a5ee9e61bad78d8bd5ff +f66177e2069d7b4f87c6fb13a61f2772e8632f158b4f1cadb8e3daf55e5df78e +9d50a27bdece942f579490f570d3eb34cb69203627abe7bbb6c5b2323fd8fa7c +1a9271f36f727ae3bd9bf660514a052c86625b1245e190fc91df37b7e6960fb5 +1396405a4f2de27f7146ad45f9e5e14755985c189cda794fa21d336354bedd98 +14ccc92cdecbef77ee962b78d053752a22f5ef66879af4d77cc798b2d6579d54 +9077dafbf4dcbe07c70ff56070ffcd869bbf2d96271e461c5432aacb7935ac07 +fd239929e5d27e34c91a785fdcc479b84a99dd3db6711f1026a613d24a6f5de9 +00e4a410ea22a81b1106f6e11edcf83a3a9f3adba5b22b129e3d8f30807303ed +fe50943d68951bc743e7391d7aa1672fe0dda7fc8a6c2e87aec891a6d8ecc050 +03fbb9bc38114416c4e330c5b7b43ace475f0c8edc9abdf5fc137c9e07f1f8ea +bb13365b3f7e3dbce2afc9388e9279136ec6e0edb289beeaed74370bcb453884 +3ce1b3afed75a47bfb50b7bf4d267b014f2480cff2d9e21685a64b5a6fad8963 +1d5ccae56079f4871aa6b9b6a7ec8982f266b6eadc060087f2f7af187dadf05f +c31a47b30f2a250fb501f4faf7e18c3aebff55fa08c74ef27d96aae869a26b2c +45ba8c84b958db1a7679ad0e6bd09c498543e6d20691b072d84c6760c70e8e90 +ec179e6d00f684e6c2d070f894b98d495cf2d2978b96ea13cebf5c8b9ccfbf05 +72a00358a8faa812b00c06f2ad40237839f0e2ecff57d359a2c2055a1361768e +f816ffec8254c512e3d57ebb23da610fdfd5e1e16b97e1fe97e10a279a203e6b +b52f0be0ae9742d1a7faf2a0d5d6e1560d6a3e8e1596fc57a3288fac6a541646 +5ad8c50485e42cb5214d4dcbb82a16c2a15d406698ddefbb5fa3dab291c4020d +52b76c9f0c91b5516143d99d82611eeded385015cb53e07a30bab7f27f22ac73 +95210586bd245bc0d2366952c1d85ecea90e68e189fc313823433321d6ff1785 +0d8eb6f1e4f2f6153d84b4b0bf198ecca9c87a80dfc33977a9b06e994bd86800 +4ab2f317727243b9c9704fbd88a0e6fb5ab8c94f38c7e20daa078edaa9878c8f +3509b2c135e9801c79500327adc9537318d0f6b700fe99166d4e7c8f6a41bd45 +6bda6719e0ea158b8aa25e73731e02d215294d91f44985ba21d4045b1f8dcd99 +69a0b36e07b3c7534e9401960683ac1696459b2a45e0a4133d630e5bc81024f0 +b1ed05e19a6991bcab03482ad446a1d542249cc9e1f13e091508eeab9f744a67 +85e3d64fa0c7c79275292a4284f62754d46c0835e432c3a1776396feab389c20 +775f2f94aaec26813eaffc4d1e6b4df16f7b25ad9cd3e8645dff53a354718283 +e6da4a788dca6de2521295f51bd4b41d7b1f06c02f9cf60ad1136425c7996c55 +a00798c6f180ee8bdf52c71c01b48b3798eff89600b2281d68fb2e8567d61d22 +9b31ddd64b49fd662131d12bb500ba609e2f298c237b90c17c4a29e1c4e75ad5 +c1631c7058f7aa486b9c19c760b2bbae67167472490d537d14c9c70437d8a964 +fa40effa6af2862db37b5ba62da47685971093e11103228b85a6a0acc3168486 +cb4d94f0b1b01bb35ff617b5b36a120f82f783752079b66cfbfe2088290ba9c0 +cf8255443a6230274299b82c7e0078a9435c2a48ab298954043521391cdb627a +efc038208a97a62fefbc2284290e83c78fce56f1f6aa31428092800897d6adc8 +ba2c0bdb767e9b684dd51cb44dafbdd3f084b3ded0fa1af187bedd1e7271ba2d +9b040ce2d98fd7a56f82191756bb8f582cb83ff0188350d8d5451671a2bb3478 +97ee71a4621d366d810945c790ec3bf4126eee53265a2ddf2bfdb8cb8d78352d +8032e0b87fb87323d4defe5c5c974db8cf06203d0cfd1470aeb474dc0fa2d32d +e1ac57cf43f5dc2d2751c84e10a5055ce00c594a0dea8c1f65268de077f06ff5 +c8e083d70fac84a5605eb80c81bdeb92a65fcda58979a93566b29c935b3ad83c +a1303afe4eef046c2ed3646c0ced2e1066d4eb7f5db11f171b2440a0ca362253 +20098d9388aac930db7be1cffe5d6eb05dca2a6355df026393b99ef5e3cd70c7 +c82ee1fe5cd113766bf011bba63e78b2ddf4d86519aa68bd991d782713ccd2c1 +3f2eea70dc273576aafa2a0d2ed22e35f246e92d88c907425ad6843abbfd75e5 +78e1cbd1e59969cddfd6d26f89e617005718492b51442c55fe617da67d8ebe5f +bef9bf22357a125d611e04d9e5e28d5178c83e2c3b073c205d7e3a792d4d0232 +c70e596680b5947e6504a7aa48c67795a15160d49d40174fea72dcce9f97edc4 +75d030d02347961b7d725b78c7024f98aa0d4fe953807b39632f0d4531c6c1f3 +7062320fb655447c355e55dac7faed0643d33f14cced8ff7398ec85fd93bef6d +e6032c7689658a96cb9ddd856fb6c0a4be0fb15bb46c068673374bae1fa73bbc +20dcaa9398b526128991d68eadf0b90bdfcfd097b2f858363d819fc6ca7fbb47 +6aa237cf38daa9653b5877aa322e3039f86bf54ca078c55a35301fdcad322d14 +8e65067a0e48cd62cecb0d7f50faf272b51c6d0a22c402f0df1373ddef2d3c2f +25f3c636f9f5f8710bdb1f5998f2040b7bc4bf6dee428357a695e5f177feedc2 +be6ca3d7456f4fb7b97803df6de76aa4bd622cf080800628d35841a838371511 +04623706136658fa3cfacfc116a30542f8825d80532454675cd5c9ef6640dc79 +aeb9c37a0691d14bd260f58995b7ef2cbb236da7a93c042450d940df347494ca +6d5df95bd04d3077b47926e34610583984253fa1cbaf4b0d544e71d5f7405e49 +41445c23b0a1c3c6882254602d0ae6582f64dddd079f2d112b0dbd31ca685bf3 +dfea6d3f310bea2b2f4cf4154cd37fb19016f703a1f9a045c7e21cc994c0f23c +5e4a49d0ff47deee398d478302cd0c90380885ab4a59b6f3d50bfaf00d9e7f3f +0b97562161091b4eb201c7bcd4d1cd239b00df09d03836a63e8a9419cc9dae0b +493aca2a7fdafe0ff81b6a9896c7e57faf1355fce5f3d54afe62c018a5211fae +935f1f9795d1606cf77673b699829c9a136c6534438ff817759f8684d5345417 +70f6554539184ad886156fd610f331532d0ed22685d56ed02fa51e265ff34a1e +fc8cb40b749148ef80016f71cb0647e1232b7450237f686828c36dffba04aa6b +46a526e693da4fc9e2c84d7245b76ee7dbeb360b2f92b112de8e5feb3e433321 +eb67e59f3a41c7c91e5fc51e811b2ea7a70a9562bcd8fd854d761ef290ca50c8 +16f3c58d8e48d13edc3ba242c35ca241fa15e6243aab8f4b5441cc0cffc1c9e2 +7729da8ba3fe1837504d73bb13ba53ee7029aa5a1b137244be2d16ff3ae6cd71 +8151c53d223def6463c124acf3c37bd5a42e4ccfe3db5d3a22f249d0a5cf59ed +ab67a3a6cee4f7838314e9e167d3ac722539c6a60e5961cca947c8b9d818802e +54162eed974283ead7dd09fc33bcefe33a78ae540a98fc6710011f0cd96300bf +e5b9acc91af99c6b38d005481771655d1b89bf8fc5fa8d682ac36a54753a106d +6cee95baa71b131786a76f6ca7cd143270f679c91635822a4a2285d6aa44699f +38603c3af88b82d5658531bf36ff97bb959c44345f51ad2c990347d7f803c2d8 +3345ba5554ec0af247e7ff00f483ea94a3a6407a2d0ccc9fe5a530139336190a +166575049e84f3964141e64f9f9fbe2feff15930340b49adc782b7ec9c2c24c7 +816b7cf5e7aa3c194b3f50af218aa2b1a69e9772a74cc661a96100f9607fec9f +0e6a34b6d3b9b6df0d0cdef014c6e3ac43491883a33304b464c3219b883a1f2c +9a1f882449ce7c0814be53e0a26aedb003f25f8ed3f9506efadba4b8133db373 +d66c0fb02ea5d1db6484418398a374bc43f624dc1dbcb70f9b6b97691d297b4f +50b0b7aec4de5732ac5db32e488e8131d763ea2234a8b6ba67acc6ba688c3f09 +b1da0f7074b2ec71ef2778dc1dfdfa2b27d74756a43fdf2fb8be3fdc9189166f +5747a30bfdd73b8507e6d41bff9607a770cd6d30a8b476cb972c896b90f15057 +f3b5095adf44ef4347da078dce7b6a41f01c29abb94e2c70e3b3a24f4169f80a +7eff7a9b53909f97160964eedcc0862697c872a164be415d28661702c33f4edf +bc8c172fdcd3e70d3db0341ef1ff453232617b89935a9249bef30cfb7115addc +c06bac8b37d4363710731a69e3975c983b96bc5b8033cf0c17c4a6dee8e45f61 +53c1683d296a937f733c332fa08bc9f4c5455e308733567fb7b51300c3dd4665 +15a2d90c58d2155270e64f2a555f45084bc75cc2fcc2dd5ed0582943a7a5359a +4fab1a5310c083343ccab56c224f114e46c8e6f8233e9fb01a352048144592ee +fbffbe37b26c257f91220d792dd0f08da33f10baa54d92044f24646f9b998283 +1bb052d3873debe609ab925b8cab12a80067e52adaa1bc0f469b0406c975a17a +c99594a7a8c7ff29754319338e16508989ecf307e9ea3680ee18cee760a02b76 +90e09970a402bf91895df85dde19f9f125c75558ec5002cabc1d4ff0ca1dd979 +ac53b2d742f45d787eebe0c983e12740ac3b74eaeb8ddb0a058030e2b5aaabe7 +3acc75052330fdce054d0df654b4dc7cce4b07b9e48abaa918a2c45b0675a360 +8f9aa1f307b1d93c13075a57903935978e764ef45628f219ea21740a2c720dc1 +4037ee1edec2082462f882bba13fe63a335eb8c18d95c420da75b152b5791200 +2dea7d6f2eae40f84a622f33376da36234c4baec46bcddc2a7874ba2f1f57b19 +b47a7f3a4f834b5780eefc08516d223b42a4e201194f03cc94aad45cc49cb238 +2f6af71dfd8abee459fe9f9e19f1d52659d6dd9d378c4f06c39552012e17e541 +f40704a1190b5887bd0cb07fdf4a3a3adf04639c237242cba12758e371dfb2f5 +5871567815806e74fe8cafda5031354aeecf88feaa172bf8f4cd9bde36362120 +2938fff3f84180ab0d5e2ca492631ff71835add3434bc1aca1589cf50ba27fee +f0d86e6de410c00c5a40188a91c01d944d3b941ab249ce3de0dc988482ac835e +ba5e0a045a6dee34f7c92ea4a1dba8c403d614dfdf3bbecafc61ee5762ae4f3e +11511eaf682fbd245d75530476c2151c4ff6aa7959c5dd0c2f54c483ea556c95 +8774853ea5f841577eb57e89aeab3ed00e79902cf36fba0a18e460c849f4e5b3 +db02888493dc249f1c1f44bc7d7011ae65184280f5f4cb19793b3bb002a439a6 +5518fae1d5848e10ccc01e75a77fb1db966111754111044e6bd282ebf00b3731 +7227ee6f76a51e1921b2ba047a5f1f09f21f13e1cf44b3582af9c2d26df159b5 +04738c1d27acd2c898ef8148f9058dcdd4ce885927ef51c36b43fafdb08dc186 +180df681f94cb9b84c298bf7804280162f58f62fedfd7bc0e9b8214992f4063f +7685d655f248ba694252e5ca13623f12062c4872b5989e13d9c162773f976144 +cc8fcc96013595b498562ae4261e7a1efede4b79efbe7ed5e4398d1d9e66b253 +a0f99f969c15fbdac089a5ccabbbad21402852801736f0dcc64b0d4d7cfcad33 +ee75b328427178082a96435c3c9f40e9cad04d223ab295eda1ffb193abb5718b +f5efa9db4ae428bcfb422ef2ecb16225c67def9ef76ad21cf8626f46854ccedf +885709053e56e6e758824ee80b0c8e4d67cab4e5d6d9e92fdd9b99912c709ff4 +57d0ae3c258229551c93fbd68e47b00bd643872e5ae53f292866e566f2f9787c +1edd81b005745b10fafc9911644c5fee21e092fde448155c9f69ee2f55c023b1 +2eff9b86a86f8786b26069ff3f2a5f7112070db4f4bf93f40ce24d1a5c4bc5a2 +b577d39f069f506f197be8c590c73bb5f44ffd6994e2eb11786004c71d349521 +2efcba99561ba4cfd479ffe07ae4c45f5ec38c164db89b192d0dd7c07228bf2c +0ca8374f377c4b8ae58a265cee76e71e952accb01a9cf1676faa4f49dc456c9d +c020521a2e88d2e5c3904157d3e68158ca53371c73be43bfbe2cb78e3e1a9a15 +f29359be03fe111b87b252b060c453fe8bb0ce288a37907e7648352fbe66792e +e4060dca4506ad6a7a8806951df8d3d29d0347fc5f4f408472edf2c4abdb7418 +28dd1afa26e6e8f84e09308bb68de881a61d106757c09840e49993551dae5915 +a28a25ee7949c3a00b7f33d3b2ac252f1b8d0896d3116396e2a7fe57c028308d +d7864d81cabe4824bf15cb5778b941a6b5e9e46539a8206f8bdab18e92bc0aff +2f7640dcdbc2b04f7cf5781345ea8513d00c7a22dd5f1e43b60ba05acfe45572 +76ff2374e36f5132b884ed8dacaf72d5926bdaf62a16715486bfcbe4758ae053 +687031d0fdba9199fb4221ffc9b12844c4d2e94e393f6f4ff2d6842abea45372 +12128d3234738783ae23850090718bef9adb55d26bf606dc4736e8be6ab5c079 +d5a6dcf0a6f1b1df6f33ea9c1cb5e916aac2b80395522382a1801e15b44e97bf +c32017aa2eb223c188e63a7f5e093b7354bb25071eee2c3a545763dc93e44e35 +96b9dbd7c4b4818fe8237ee258a2032153fbae62f5dc4afc16bcad79d2550a1e +2221482e072b9ff488bee9730aec44740b55a35d9454a4afd2542ca9e992d781 +6fb6ab598ec696cd7d58db737ea1e72cc4e4ee39e1d50cf8af3d94636239bb87 +2d4532e783ea90cb1c8278a9541e90aa0b6cb5a6522617b406b495cd2f9af263 +6d9e9453174251786b4c449aa9ae25f9f48d6eb00234003a421570f08b3081cd +62e4de0418033395b45f559ade69a75075f363a13add803d20d13f54f0f6fa6e +4061f653d4021f3eab7808ef212a5565de8ff35e46e8bb02660326fe6bf92cda +02f4990e9c9653d2ec5687662b965468505f26d772499e649c3a0d69e118247a +72077084bbf6828daca78ac4524c599df56a05ffcf11d073465fff2c52b8200f +2ab7de3212d573455e4be882a31e3f3b92b79a9fd621c5dce0c70f09df800df4 +8a594435652f454905ac19fc7aa3d43a5a5f360778e85e0b6b82d126136f4858 +3796833f454bee0f16c40dd79fe440b263d9a354ce8e7dda6947ac89828f0a0b +4ea40d62a651421c15fbc2d271cc47116df9ffb388093efe6a3bd4a6d21150b4 +286cb50aee34371b13083fc5cb8ce57ade9ddef9bc4a77f5ba71e9c71d159199 +b29203c64c53041e38b413b901e90bbc9c67378734c049e497cc67bff03fcac3 +684c5f18857fb8a0d941660e9b04b55209241226cab4684ed71dc9a212d2a7d8 +75d0090ebc27e3ea81cfe4daa0c3277f91544d134cec4b5da927a8b9c0727ffa +9db44a2d6d9e34a8673903879b041462708af18ec1c658f83d4f65d3df623fc5 +db60e9ca57db545ba05c10a9a68e94f85b4c2a42a686de90a50f482cf150ca6b +f1758078bf655b04bb9cb71336c96ed9b1a217d9a0619a747cbf82c4421f5520 +3ccb5cac0067f83d17b6e57264856491bc1220aa9b628ce4252a9932aaf5fd6a +cba6cbc11a5cf2d34bd21c77f3963a49ca746d4f1661cbdf2803ecab28f50aae +66d2c2dfb81f0aea5fc3ff710a5e35edadc08792b69c4af174fed9cdfb2e0c43 +b5cc87adf3fc71121b1cdfed660ae99d8d036c4896362463da11a7d7ca08c7c3 +49ca8733021acad25f152e797a946d1b4010deb8c6dbb9432979556e0cb80a89 +493d58cc933e173cbd48118605bf7de3e8a909519b1f7d58c4b9811e7d3b50c7 +297270d1c1edbcbe0f4c3e93143ca44dc128eb5b17d1cdb1cd8b8233387b6270 +d2a8215407cc1df046713aed6d1495150bbea29bebfd0c08fc1124a4624b7cd1 +fec7f156f95321825fdee4c0ea668e2fe1b0d92d6aced305ff511f13ca92afd2 +e99535de55a09a3b3e0355645df6b4547a50c2c29a2536cba3909bca6b761b91 +caf5d4ab8e9eb5cadf71eee71f0433b9b9d9ce0394b5c87d38193498f3961673 +7a748fdea2248f936dadf0d8952c33a4ce3eda258cb902f87e4f623c77151eb9 +18e6e4fdc9537fbf03b743693187dae6c9a749b5c7c07c325b9b27b025c38b48 +c5ece2d82a1b982b9d058dc49b33aa425e7eb79827b5a62a4bd7c5bd4488099f +f7c8d9aa169ad961e17a946b4e65599e268a2a96d53a9c0147da713517f0bffd +cd992a1ab06f6057e17eede9c7f9077fa60bf4f11e885810564c0f40b29ffd2f +b6e9a8051c661dfa341ef0ca3c630e4df019eb057bce4c1407f9185a8ab4f882 +81d175eedd45086905342282d26ae4df524b713ef2088451f1073a59acc3a1f2 +4004418469561682e72d20f59cb9ad4ee5232aeefc996ccb77fb3beb9a635900 +06fe6d2bb606293d40410919e31db52063c87c17584854d108f711af8112eefb +890429a772e77bd03e50db3a2a1ef371268ea9cac1bf7bb15a7746790d67cc0d +a592fec74f0000f2d1073985fd1053537a455548d43a12bd556063a6fafb0127 +e8c1190f11b992a0fd26a3ca823cce5fcfd5742afcdc02a790a25fa57dc9359d +ff8fb3550da075e3eb3582ef454c92493e1578788f966db39d0038d2cd7811ff +da49bfeba9cfe0654b68fc512616439226b08264533f295ae94108168eaf284f +290d61a62e8c8247b66a64289303ac847dee0f651c1b4575115d79a9abb9e71f +8cf7dc4b3db7c835f2abb42c37456fe3202ed6ce061841723bb2cb759bfc78c9 +07c51737b52469f1f2dafa7ece85cc798050dc1bb63436c94ed1af3a0e6628f9 +dbb10bc24d2a6d94000b2d142f654a924911de0779ee7ca12d82e04bca01b3f0 +bf6d1679d8a4210bd58933be71e5bdd9e22ae192637c90e7b8905586d8312945 +4d68274af56c5d9636dd4976c0c8574e7804bd8fac44fef418eaa7f5a0410be5 +a4c592bf762ef8e66132f71378c37ce7c1fb485d5be0a27628125cd768ca1427 +790fb8c160a7f94b80188dbb55184ea6d657178f30c055596a370c9f40dd64c4 +f7246bba74679a347e03d7037a4994f348c8c4874df31358f02157132f98ddd2 +322231a9271018a49672897625fa0041550c99ca2cac35cee4281ed9db5cbb0a +229fecf98aa5facfb951a1b116ed5c58cf4015a9bf03a0b1505132a46ca6b3cc +02002c40f040e0b97303ed8c42d9f62a95610de3506c7a628546f9e4d6e9973f +2a77cff929c7a41603a99363dd7f87f3c076990546e7814ba3150d70ce635943 +88152a0bb6d23bb4b0ad0c7edda0e5fd83842a6c2db044330119c3557ece70ef +8297d1d86334958ed8037d6fb57ef20bcdfaefa66d2f02cf9a074dac8097469a +b35a644035a7a0f91a813aedb3d9ec6fe2ded7c9d5a414cf394dc646df0510ba +f27f501fb2627834376f9776d4f00869bc8b0189ce88008503bb16bbc588eaa1 +edbedee5e41b81774054df5b31c4323c4f2d2289f018a3d07dee4397b69470b8 +b1d64a694f1333130b5310763054870b88d2d017fbd62f3a2d042ddbc4cf68f8 +e1aa1f790bf2c7f598ddf275f11899e46d18d9ce4645671b14617cbee762a485 +95bf927abd6aa985c1bf117d82727432b8cc573197cd87a096daf130de5c101b +ded264c14969b04f8f55299ff35cb77b033a1752ff04c96a4dd43e9e66fba118 +9dad547bf90c89bdbd77200042172c6243d1c465751dc96f5101eee86c76e4d5 +435d1f1fa667e7b575760681d8ef3b97f01f58e2406d3aa084552ebcf985ebed +06baf00f2098f01976db0d4a36f39221b08c00b680ee425a9fa22b5baeb571d9 +31c9009a03a88501ca1cc8da7a3afaaceb87a92835161c3f4c84970ee219dab7 +ee9f5542d108b9326d5fc58cadc39d10527d481d303cc11cc424398756932aaa +b06d5600e4d24a0d7dc36da7e8b32871fe36e59e1049cb9ae8c361c3c3ebb365 +5ee4a2facda18377394b68f046655d679ff8122da647ca64df6a7b99a3bae5b9 +da56fbfdce787f9f8263eae5e16f348c22aecb06398d714a69dce1a932f2b50d +4964641ded3143548e33c879b8c03206f6feb025268f61f9cae4642e6009c804 +3adf0e4a1b5ce27a812559bbbecb7402ac2a580c6d8471dcdb02e6960fb51396 +4058ead51e6b121158c9e3d0dda75439e6eb47293c642c60a70bd9307ef337f5 +ef4601dc0eddaf6d675d17e37350ac6bf3cffb442a602054b52a5ec600f883d4 +cce1ff0d70304522df3d2cacb5bcb2cb37d453b76f7d4d915663e19c6e1335ef +6fad8e7b76fab514abe26d837565908135cf8518819916bc9f0db07fe3b6439d +c42de0dec1f5110b8fa5ef40289834953438a7bf83a6261dc80cfef8405eac76 +32815aef696c5b86d2cdec5d3588bb8fc5e9dc61d97d2a5869115c8260f31f06 +986110dfe2c477f80bbf6b3d9f59a6dd573eff782887c9b84bed766b63fdaf13 +dc4ac55b7a127be7c2555bfdfb63ddae8346cd6ccb6c77ac057bdb1c51372603 +8cbb594119970a50f42acae2b9d69784c5f621f53292fac082bf8a78c197af6a +8b56466e9b14f825e45a9d8f554db27cafcae033831219f6bfb6e3568c7532c0 +ddb22ed77cfd1f46bb98480d1cea4800e3d2b8f623051da01bde6c8bfd1aac33 +240f6f89d49c824e4b5d8bfed9b536fd1773a3ea254d2e56725861a1289de1f7 +8960dd096d6ba285716881f26795345504bf0685127d91c893b57122f858e1f1 +93ce8270796fb9b0fd7246445d484005689948c40376a8e612fb8827965ba50b +565748c8afb55247f32feb36a4245f136d6cabd1f491b753eca2104199bb3f1f +461d1be91c8ebbe6379b2ff0eef8a6fdb5fa98029d7cf458e17e15631c2b63d1 +72264f66e45a8c108460e3e353997d9ee098f83537a22b5cef20fde0ee260b85 +c98befd03e86abce66eb6551625f8dfe379a07f53c32888e9e4c04817d6d5abc +f02ca074a8d11754f4c6fafd3c0751886de2fac502bd1d3d9ec6b56b4d5d5c01 +90aef863969d280220e45f9bc52a18784cafa7e9bd0aba47832cd22e6c0cedb6 +28cf6a1eea4e519495c60be2f0657a43f311cf331e83e9e8109b6ca5235097e6 +d116373c76e9dce208bbd9573c7b815e33e3e39f8eda3d1d07be9ade9f74181d +c5b9214372c93275865d0d4f3902c5dafd4fb246808dc253d15626549fd97102 +1be3384bdbeb3e70f5b846a85088dc8c4a9a411ef04cb3ee0399e2f92e889ec2 +800faedbebe32208a0f81f4fb33b97bbc9daa92a3b3a53d1f7a1a957cfcda2ba +76ec22331c2ded3de9ccb0f51e7ca924ff8d4f0f541bba1a62da701fd2a05c02 +204ea9debffce3adeb99995087932d5963d2a6c39f715225d7662873624158b0 +a3fb470af5036028a3f04600f9e86ad203fe14dcb5360aa9cfe4e225b5abee97 +e21237ae6d76aecc97470950ee7a2d6b2c5d6ec7a88578ccd349aab544d151c9 +67d693f7de7005e4d92c5dc7b14b6979b1636092fd75b52ab6e83d7de079b2e3 +f5187467a0a6b3fb4e001ac42c3ca4ba743536d9e9a8f0a37b23a5509fd88ef8 +bbeda576aa8440eb7c76ed2c1b2309120478e5a35e071d75c16ef0086eb07ce0 +4e7242a68c801dc3c68663444db00efd46649bd00616b5a346955ba95b881e7d +82733c8f7b563ef8a124d7312fcd0ce0dd57a26e6e104a080ae51b9b80b48960 +f1ac9f15f7ad23fdae73b7e93edb14823fadf09afe275d1503a0bbbbd57efc66 +e7b4f6468369718601a36e3b163be29fbefda393416a86f976d631b80ec34755 +9a0b2e328ffdb6a1ed1ede49ea6749d7d55b04342e40804f030b04daca04b43f +f04d2e71c3686d9a3509086cc247524725cd7ac89fba7bd37212754fa0afa635 +317f846959f2a4ddd0dcfd1b1e5cb66bad528e47f850941d7ce69a967118f490 +95a8f8978254def9e7c5e91d736a70cc3ac70d1aad33d1195256020a9ccada88 +76c0ea39dabeebf3182b0fd89fe5be65661cdc62afd9a3ced45628adc41a1a3b +d681dbb4c941020ce8b8478cacb0e4fceb5b6c16ed9ba14f1c3704c89114c5b0 +80d1a7115d69e6f932096eb9059a6252cd63531e9a72a36bab438a17686c41b1 +5a7616d857eebeb60c66d3b2a991fc2eb3f0b93df445b370cbfbc1754051d1bb +b2997b93b66ecf29d6e7d3c552e0538fa41e0896d05c10684e280d683e48379e +164b356e916afb48f42fb90acb10223b54e74a2a821787322e628f6eb02be9d0 +55f46574342907e69038ed2258dd96cfe873c6fd5ecc7d460252762e7fc4af9a +608b65b1abd49db62324c1efb0742c2ac7453012840729e4798fb62bf15a2db5 +13fa7ddf79c204efe0d4b7cb7978aa3eb36a2c53c8d2c913ebf3debb9df9c52d +c5ec37eed5d8924adee4ab8313467f3f0afb3bf9b424749f73715cabd5b86ec8 +7264cdcbb8c111a4bab2fbc568b65a081a8e7e18fa0d04462720baac968cb6a9 +445cdf029ab4adb8786f35a8d2e02459401b5be2ba6522a7a90b46d8333c35ba +38437539b4b994e1c1ac8f6ec84a301b764b284ceff5ffa842f298d9c2f3c197 +54809e99550cec6ec73cc66b94d6e2980c54f17506e7c67902631704f51252cc +1596405bf72ec7243687fc7a0de9b8c2f4b311dc8ec7fee6bc31645e4322efb2 +a59483c1734df0ab32ee58b6a156ca6b9507797706894aa412b9903203fb506f +345be538c0e253dedcbef172cb9365f99e55b740b45a091848f8ce635f54f499 +43afe4697285361f718b6de2b79f98e0e3adae0509bf571370c425d1aa795cb4 +a1b10ced0d43b59bea690990313afe7ba7eba130f7e5639bf12c6b7dbbc1a17b +4e0fdd4b02e7fe481ea5ca3cf45337d47488bfc09a0312b0258596771ec1e26b +c7803227bd4a5bdfa0495c227a454a579dcab23fd4ae8034458fb61b7d89de7d +4524d7bbdfb4e00a6b4275691be8f77a490e768309d6174379f52ddce411b55d +80843074dc394e4e88b7311918985a58e5012c6eb8007f22903f3ee0cfa1aa61 +3128fd7b6dda6e93a6cafbc6a7f3f277868dc34939542072fa746c228745319e +c0aeb14792d9d266b2d58c804d7f4094d5cae77bfe150debdc47f2f23b0b37c3 +b19e19cf0ebaaf50d64df8f624048c3cae65e0c5770792d6a6cb97202174b003 +a4deb8a3758a83283dc162cc88526a3d037d8ab1f823eff5115da7d2373d1d11 +56b883d419931f7956024a22312130659a8d2a946dc9cb721599fe7d5d28dd66 +12977032a94bf26215af645d8659ce53528b367e30368fe0db4b194487a4890c +26230fd2bce623a12bc09b437df3a3faeee49571df114d6492b0c1e3ef4adb7f +8ec807c39c3ac56aa82b2a8e7b4bce3777ce3104d3a62e8bba72608649f12b04 +e5908b5f9d167d865c9cbdc94e3e8c99e06693fd43283c58cde48e5295b327dc +176b0ca861033c1f183a41a7002e9ebecced00584c5c1fccfeb630c20666d91f +0eda19c9a59ef508260f6bea436b351af6518cb4e009865fea06d4fd3b2ba970 +c3632c4556861e54a6441f7398d420a99624fe52cbfb68b8c1ce2a27038809c0 +424bcb7e54c5781be2be39e52bcc1df2b74ce7828056cf8e3f5a56df1e54e7db +d281570e270dc818aae4581789c7494baf7b1ac9cf3dcb9cbae77da67c39c6ba +db606df4098d341e81cd5a24d1abe2dea05ea064cda4017526b956cdb79540bf +7f1324f9e256d555ba4945767f2c72db5597abcabdc81e3015660232c67e0949 +0ba4b7a04074154e8083a8c883c8b884a1681cc2525f6cf45330d8818cf92906 +049da3a2455d2041a0cf9aeaa2ca7fd0f4e5d15580e5bae137d39baab9c400be +0ff27d17d87970db423398e931f58afbc415758b1b1a8312facde8c4451dc91a +09cdfa481770f0e445d35b98460b6a7b3e93f2b3d5f0b49b967a3819c13ff6b0 +4b3e665d95d8760fc380ba7f7d400154684e081ce7e2000c6e3a02322d3f3835 +4e49daf3c8bbb58422d64e73e0a491d3edfdb599614ef55b603b00d8e1aa200a +225f39bc76f58506ee900c2db1d8fd16872998017927c4a561b83b6167a34ca9 +4407b21a2607d96846a9bb7b543382980e39fc1a9dd9f47c562de35e18a341b0 +63878dc89f993080a1d995ef07991d52ea00c6372863b56b744344541feddbf2 +75b432e36368e85161e1ad0ceeb772939ace8a7db790c66d5b821a90d1cccf7d +ec5b2970a04efcc3060b0c163594d7b4f0215cc30b01e71b97f382e11f27b871 +922ce013ba8fc3bb678bd64630936f29f853e1379760bde9562f8708f8905a59 +6df302ff8f289896a7a38809246e2ece8e99e96b6b471916c883bb7c948e8fac +6588e2b30bfed55f074fdb0989b85fdfd023f15f1ff89c2f29f4f5381c5ef9ff +8e702aa40c1c6dc7aa48430c564ed5712ebb99af607df5860af30e1b4ec1a492 +6b9ddf2aac1352f4b15613cf6e86708c73bf73728f3bba7eb6b0d30c427454b3 +c8e882eeeaa998e9f02d10a787f6017a5c0a55027d2ea1da1485ab60a397f449 +4f2fab1106c23e3ed97dd268a6f5a9abb2f0cb470e1ee6411b27708b1f2cc7f6 +9efde016cf7c122903ac89dc47aa11d0c45414b8264bebce5850b39884195860 +39a7cb52c877e5ea6a0bbcbfbf3a104c0a66af928f6aaaf062b8da0fdb290f51 +9b26b6b2cf2fa49ff36e7435b86f720c06036f2a322c3fd0fb37ea7b850ea80c +6cd6b4224e8eddd5adcf97f69d9c80102ae4f6f6e5663d0e47ccf992e11233db +5f37e9efeb51f8cb754b919a80c0f0999311d1784221347d746be1590d077f8f +c8a98ec3ba007a04866bf3e1e24bbdbe7839bb7adedb55c3584ce2e2b85a631a +5bee6015589a877604e67121ede937afca89af6e186d10d3fa057c9703b17f26 +30025f6332087e97b1ce60c7e26e48d546ae484dbc604a1b33528b5dc41bc2b1 +1b9d717dcef2d469f7b5f0b3047876c578f3dcb15425678136229a7387966c00 +593c6e96e603f222d4bf10880978e1d0f2e246176e6daed0ecf75e30430ed2a1 +8907963577026bf6689b4a4c420c5a622602f2390ef9fbd5f6c716c8550acf50 +3180e80c95e8d4db4a8fa3eaccd85672b2fb2c0f7b0f8deb4955bd625f131904 +289166003bb3451c1d82b19c461b21f9523681468ea247f28d6e8eae788cf06f +3148ea2d53810077c14b98b5aa1bb2294b202885808854bc6107f4667ebaec53 +6dca8dac30a933b183f5465bdb24ac02a6fe61d7c440e068d5c1b2511599971d +09ca25be37e1baa6580850a7656ef4875ac5dca306ae04090496932140464a48 +2b60cf202b4e308a97d4f75123e655e4d210b6f2f285ff921a9906028e331aba +6542a742fd93bbb77167d04267e3b7fa862437c37c2a8cbb1e4085ce24887ad9 +b00155d04414e5e8d35903c4b2f842b43a333442d17a0545681a20188e6f58ea +bee8d954f42963533dead29cfeb41dc6cb8e70c122948be88afec65d315d3a1e +8440ec98d8191c891affca48a8fcb5feba24cdb0716466840bdcec527520aa6e +2fc538993766cd018effd726855a2759a0b90c12995b475d6e4703a8fb39a59f +1499ca0079d2a25ab06e0c8772889354840c25e10cc6706e9108b62ae8e545dd +1be37905f8adb05fa0265b736c55ffd4ccfd8b0e4ae6b558c1debdf02a836d0a +bee910df3e245d668cd878f528b6d9d16f4a0fa5540623182028ca199a0a8386 +ae47cda55b8c71081a78efdda2d709d973d69ef1b8f27db52ebb298bdf2fb718 +afff5377c78edbc3a58fa3d56a3b811bf5873a8f787897c62ce1a281141df5af +be323c10e74c8ce430dd192dccde81adc639fef9e5fbfecee5be9d0da1547211 +6d6961617b07b6d8a8e184969da1cecc18745012ced3834fa40dce5a0e93a673 +8f51f43afb5ad5ae0939f4d3cae2b1e386fbefd8c840e2685b156c4d2f2cb563 +511bfd502ea44f80eab5a58ea38a682e863e13b07a442864c1d8215db4e824c5 +bd5abb55ed959042b65bb7d1272c0e4d429024cb101d8d340e3c9b918661a55a +d29cbd42b25000959044f9d5f9256410d5dbdc9619a54229a1ca1a96f939cd04 +7fb87288db04a3a105e61b967467123d186ace108abef8ea741a4f3aa45738cd +37b9af8a997c9f6a4cf1b335e3248000dcad05d7565aa99dc144076bb70721b9 +eafa34f716ca82830e8981c4368559f859ebe5a89ef467193a08a3ce62822321 +4637619f8ec9595107d156be7153b6433bedf24d330968dd9153bb90a09f0a91 +43c851d4a5de88c60b0a5d8e3fd2ce90617d14c2ad91a3b9e54b5447bc0fc905 +d27e961b1888ae18d5455fd5878cd43849dcbc2b01a1cfd2543ef89aa4ac0a07 +e4b3bc437520361daada75f76668e37daf5c2f21133653ea1855851a3fac8a3c +a8bcfc449febdcb4566b0ade704fb68e8715eb37461750897b802d099af47ba5 +3efd1f74f9d13ee62aa163174cf38d8e75f793f763f9ab03fafd8d52bef23f5f +86f4da2b1cfbea8233805b9d9e47e7c4232631a56360dea075491e410ce10b33 +8e9bb61387fda4dee805d038c67ef2c9cf36ef4f2d7705ec90002afa3ee52059 +d4412a1ace2939ec8753653aab214344cc65b2c2e2a0fca95fe6144953c4b2f0 +8dd8b6d0bb097ee5d333e4f9c0c7a54687c3f2745a5ca79dc3238ab554ced0f6 +29707805440078bbbaedc13a2ebf81fe9d5686b9ea7aff8d6d98cefb0f453fbc +441e9d82023541d3dcdb8d255e16a7b48832bfbabf7802161c7b164bd7fa7035 +8cb6f75c1dd4838277a5baabb00276394b7d3af5dd1ec4db34c33e73c6be810e +d1e1c0f07b397c466ca035edadc839ccc6c3b7b07ec1f669ed0798d1296b191e +31551b05356c2fed9fe7680e0b5e1ebc1dd117730554c57fa82854729f3e4c6b +2428a8de3d3555ffe2220259ba377772616f367966c983a3ac18b04471506e6d +07fce9847e39bd3a845bb894f7b0e04daea1f10f8a23d030a0054659db2b8949 +a79ff3d3df5e76e7bc5a0163e1d108e30d47c01a0d17780736a36b664372f6fd +71f65fda05da8fa900c3f9e6f78c2e3a83e97cbf56aba6e4d6be0faa5ec5d7e0 +bb97e659c6c1a778354907ed74bd12d79d7a0b4fa78b2a157c3fafb6814b4759 +3db04c2a8b16f3635efb2d03525be6d6372560bc4c96e489e971559e49960bfa +a5be48071bc009df1482b6c9b452dd558cf537ed3263a10b278ec050492728d0 +4f335c50b2ff81c70a78f8d8d3f2e3f9efe9efcc2c5f4e52e00b97ead7d11295 +912b35bd0dab31c9c3e661db42eb98b86e090e55db806b16035848de4b60bc07 +f6b7d9ba8841a73471692dcaf020cda34343fb71a18910aa400927d4359c535d +773d3e4b7b95fc2b10292a38660f0aeee380148ab062142399c767c4add99367 +f28c35d5b8aea728aded4ae367b41d43b6adb2032410d70dd875828fdcc5c976 +e221f05c764c5042d2a7ab671a234a4baaef58054064a3265d6e5c92dc532663 +87c81c142f1b94ed0f5a16eb83fa9811c475aa0dc93f9ccf237970904d983cae +a7914a8e481400e58f431701bf0cb884c1e5c1f52d592ad3caa7d8a37d1c9568 +acc90fde3c96fca19bede3d8d92114d4702e1d38e9526fb918c2b8b8a80fe52e +5545fdc287108a435029613684952b6d9f5b14ecd5b02d607a311b90b84d68df +ef5dc37f2c55ac5aba975bbe16f1f18b2f17b4a9fb96754fa1228a848fbc6fb1 +c874307680c9c58f46e69bd27ca7e55e7cdd7cff4271341dcb34ee5b300e8dd4 +bdec4fee74bc74cdbbd0ecacfc1a4ac7f4714b4bc308ce6d88438920fca53ece +8367968559eaf9df11a0d3bb80e650e4d836ca854dc1556b5ef36b9e64bf60fe +650125a292b63ef6982b7fc80de9903cfc18ad9a1a14dc03d32e9ee15adcacc5 +a9b11139757d948bf23e547769f4d9e897ba15ef4a495735af47de7bdaa63765 +40d035a6ae198f03ef371a49fa624478fee97359bdbab730e4750a79e4ecaa3d +182c6bcf9af7f132392b5e0940c10d8cbb27a58f84001a951c356706ad2463b7 +24baaf3a13bb4aabd80f4c1d32d48a0a5a5be34b03fb140c638de3cfb14c4c1b +ca45d82c270692d193f0aa4286cfa414beaa7be6908e4d1208b5c2ed29407091 +c6fd5e78400d148a9ae24dc6589dca89ada0ddf0126203229b33de78f409c247 +90ec215d8889e450b6041406aeb5732dea90891059e6f03edba61e003ef6eac6 +925e213b1b4cb51fec8578d36527de080e9b6a2f2a8cc08dd888b705e580f4a0 +5dfac8b6c05b297368fe786caf8730fb703b28ff3fb63c5183f4f8f97719e4ee +d65d13043f1b28b01a2b555ce07acaaf98e47d034e6a3e271122935f6224a167 +5b4cd9fa85ee51deb3b132b36fccd473d1ec278c87a6e4c2976ea93c5348cd6b +9eb4dddf8f3c9fd6d5b7a746756762f641adc4e1bce84423d589cd4d66d521b4 +a99ea4c0766e9de460ba8f32d580383884a9c5e4907d7469752ee7d68d04372e +db9579b6b20fdc55c9bc29b227248252f595272fd12639d0f2179f27754adc25 +334f39f6205ba259f5544c39dada5d7ff050d80afeac0c552fd467b10023e530 +f791ad4b12d04665a9f9e04f7fa19f74c73890f6bffd42a7da2947ae70dd13d5 +8ab82e2c44a7bf38c6bce43d7026441418f12fa7a2a7cb81b7e4d4d0652d13b2 +2d6b130dbf0b6433db47ebd76cf0ee4f2aca9a4d8c9b3339c03087f871793105 +d25f5f4591a8c6af03c42ad8bc129437b5698a6c67fb36ef68ca0e9291a3eedd +1e5fbe6e97a8a56482c0c2f99919648a24e4067c6180a35f37e066af4134abd4 +e366adf29467371a14c80002b5afc5003db922fa92af13306de6ad27edc0ff47 +ad4da4af9771c76ef2c77b54fe2a67719478718989abf9beefbd962b449ad634 +9ae7fce4e6f425e752460dbad42163fe5e9f8eeb93375fb3f46990445ef2e59b +de0045c70a03300752482f1ddc1755806babc181224471af546b31584d50ab56 +9ff247586ef4e52363df927b8810a5975152d92915572e13c92a65e5444a8ca0 +46fcd260cc88761a3ec8834e169af050408655605c793f9298edb5f657fd9e0e +0142cbcc53e74a5b00c3d0c77222b4b5df610ece643275968122e36135d86ada +7fbea4d22e1b51017274365069d75851b50e8401c1c34a228c23c10cbe330dc6 +4ed9b9aca8f3069f636e286bba6cad0159321d5c27718f410b39f99f4724aaec +1afc7f6ff415a8fc73d5e26be4cd6e93b5464b764b7cac70827d48a3fa61c7a0 +f1943551599bb6216bb70b19a1a0b763e2f6b1c4babd95094bb87c222fdaf5cf +9eb0467a5c93a6c42f4ad9be37d0137a057aeee887f9ced56ee8ccd85bb8c5c7 +7de9bcbcb7200c063735150ae6f2fa20cf3cd920d5198483ecb81c0eda832843 +27e0c1828a244ff1106323d4ddef2c71430b4c4de536abbb28f87e5ff93c3a23 +7697a73cd0653bca405e167aa727b132e98092629971184405e342bd802d5b72 +f1a61d42152936472892786973ef23a6f4254b3c3a42531fe34af9569c466373 +8bb88d96f27a8478a732fe405840e685aa416052a8a86beb62fad458e6b90c17 +a45b1ded2eb9a31e2c2f7ae2832c34326dba870eb3fe7439fc69d6f26d5572c6 +ce9b77a07d977392f52594c4610d5c1974378d2626a79d7f084ece540d32ed18 +5ef252ad0b4be2fc499cc708cccb88a80ae59a31e3038fef230dd0c101781d95 +b754338c0286917d565feda78b54e9a46f929fe351c74b649d05e014f4b9f941 +14d84223a0f3b11f6985fac073e2e6a3124b664883a92a0efb9b1d017f823525 +fac9bc150808a58caad6b7c0f4892e0285d86e79d587686d0a52284572ccde01 +7a9eb12d4559e1793e09f92a84e99a0ca40e00024a9d80ecfafe6a4a0afd607b +ef3c195148ca0699a363057b98be0ff2981bb9413fae9891d8ce9fa723c278f8 +828be8479cc8f1a792d5cc074bb7ec4c3e65c1e2ef34c14241fd0b6c097ad945 +479e7a932aa4654f34705cabc11d8fae6f4aebed345c325f907bfb04b41b35f2 +4d261885880bfb5b1f98b138ef31e3a7b96e439232e4d0d9bb84139f41f48561 +d828648a60ed3ae4f092b86bcd6789015b085506fe1f266cc02ff5c5f3ad7280 +4456b4ef8ad3c1eb2f4fb956f726dcfe2d49a73d7e9f7abca13cde848550cde8 +7e083b85084000f39d390d707a017c63b44a9563547648c48f3d3e5c577a9e15 +a7e663c19b7d82aaa700229bb541d7dc95d83c3a953670c6aa4ba8a95e2119f8 +ed8b056d8dc936c4fea8e8b298819a56cf089c0be99820bf2eb51455e3482f57 +62acb88c1baa53ac2dbae3030043e8992ebe1a7863e47d9e106a60fbb83355f3 +b98fb2744652df95ce801cc169936cb12c211aff9d77ae43dc7fbef2112e2d44 +a3ecd9a8c2cd6fc94b4ecc6d1f5b2fdacdfd153e11d8c936d822306ce7cd6d7a +2172d8f72ecff7f8a4d1eab8247c1261f8df09ad23e5893f900e1e414d13c25a +1f235af5fff7743baac23af56c8d8baa12e095ace339a4541e87eed758ae490d +04da6c27bdfae6c59e263c3143caf2febad0f61a618a372052f3f550e80f6a25 +3109a9d2cd667ba408e019fb67f8360d5590850e1ac72160f57ff00cb8e766c1 +dfd23f82fb24b407dbe5cd232641880da9054ce3934475db0ecbfca3cf56eb3b +5d5f9d5b69a847eb7bae3f80f5d96e49cc11251cd4e3ec235b211a75551d3df6 +8c9bf13c5cb2191f42a92d9ef1419a0b31996a53a1b13235b6dedf6719ae00af +af731d1bdeb99eafdb8ac4007e4a689aaffe5afa456ef93cb02b4a6842d60ce1 +cd0b0d9ec8c90fc47779fc2494dbc683b6db5360887f367ad6f5cc2986d21cff +622f47f4dd116d5e0300b0d1d5ac15ff4162435c7a10ed614359d63d230132c7 +bab8dbc07d28aa915a91c5bee6f3073f6de313d561c0ef9c8746ce87cee5d42b +74a9bb276cb8797f1715136b8a181a7ce12c85f5b9e288ca852617add6b72ab6 +07eace83bf400342f5273f2670212358c22192bd0ad7a5905074e42081df0fe4 +de698f14471fb3162a847f5dfb83a84f93f8ee6b6519ea588e0d4baff3953bf8 +81b78049dcbd4b84ce45bdc45499e3a5776b8e4e9063137d4e2556aa2e62b2a9 +eb5ce11735ed65ed5cd49135bba4b6d5f184eed7933f698157525da9793c8b10 +41d1bdf92d244fe701d30ace06cc28dc4afbc99ac05f2b8ece0bd19771c7337d +d7470206c9e4f9ce5241ba4f038c02a8db27f75218875cf8334ed4bdb739a13c +9d1469d58033f821c98b3684b51731451d3b05dcb1a7a691d3f0e2fe44a82688 +cc91e3711114d2997e159c81408665b2050c89e10a045ebbec019bb9e7567d95 +9176ee0cd69104974a26c6c7da1f690b6503a75cfaeed44e9e37be1a9454b7bb +921f7922c213b175abd329b680f5def8130c911c25f4ba34fb2bf49c65ce74bb +223904c11d7860ee74ce7aa113fc40a64fa702db89517b0fd444d0166cff31f7 +da476a7415e5c308ed98b09cb41adad1807694c1a39a20d3ffe0f33211e36d54 +395061b0df33dda283e1d7f5a9399bc144ccb6863611e7aac1817fd2b95182dc +92755c6bac1b4074dcf43e556641616541284d5eb13fb49a4b375c31df13db9f +ed989c06f374582862caad3b745fec8145649dcc6b23adf6b4852b6021394dd6 +a19ce0cbfe5b041afdad277df48db2955de8cda9a54379ed246370442196dd80 +0875fb8a65e3300e3e4b97ee6cb4134aaa59ee3517e285982a4e65ce966836f3 +0465e0a7d4bd636870dab95869fbe7b7b9cf28db23839a964612322be21c4f0c +3cab665c4dd6f40150542c3ac64d147c09e5cc969642154a35edcae9c119bdac +2b82e582e2ff515e1c88f91f474e03381368417b4084f6788a8e19519c9f771d +92133700a7ffbf3e82ae50fb19f59a7a385d169d1393c150b88e5156c41e28fd +055eeeac7fee07c6a3be5a8587be73b77826274bd3d35574e2ad12bd1551be0d +d4ff959077cdff691b265cb353ade31f77ecf60057c0eba5c51a7bdd69739633 +b45c312f9b77b0d87ec77fdac0049645c979663dc0314c8f101681e0e47aeeff +fc8f7d39a57009ae49735d6c386262bd09cad0f52d862b60832ead3b3cbd3efc +bb992f901443f78f45f9112a8b79d83888b412803e5621e70dc7b2eb475a7a3e +0d07c36ab6dd2eb352738536c879ca83b31906ebc89c7304dd1cf95559cf7bae +eecc29a5d0f839b64c0a24b6b9135dd0fef4bbfa01b7d6a86d407abeda8775a2 +6e20bdc6d2189cd7055b39d30315b9ba68f717840c10f27b88e22075a7288c8c +3db83c27b55d6032a2b71f326469af86bc7342f43c4c95c8b13bf295ad130cb7 +421ce98e16cb34afd5342289819a8927447c0df7c98e9a965ee83269056a7c91 +961efa627927d007bf3836ff5eab5b6241ec8debc29dba3055d38101d1032307 +86644c8ae82f2c516028f780853be93fb7a220d71e60dafc26e582065444bda3 +5afe0470dfc2f2faa9d2af52eb11f048b16ebc88f23f33944085e1d9b1e85870 +18029b166b6a6eaf36f2507415fc1a58ad4b403c89994910896bd32acb360703 +17534352e8b001ea7a79e81c07e740c3dfae6f247579f957fac2c71cc792f7f0 +1c5d51b81f5029866f454fefc4c15fbc369d0b5f45633fe46a0fb141ad869770 +91af47762fb7c2291a413e51f9d697864c8a7018818a03203bda7d356382fe40 +b271118745973af3455e9021cffffc9c429273404e0813699841332ae86aa519 +608e948ba76806963b3656c44263a1c5df864e8634cecc6f8dc053ffedfcf030 +fb3c759daf5376152d39ad6e724f2a09a06e77bc1eb78fac830149954261f8cb +765d2aaef1847073e6a5ed1d965ee9d3ef47650fc131a229bd68a22aa3bab374 +b0ca5b3ae476fd880957cc7c08f8729185aed5de06dc4ac1727ca7942ca50e7d +8bd0c697d43c70cc1992205c9b914312b4a91344d47be4a9ba955da671977af9 +a92f0102e56705575bbb13106995f75de702f0eef35474ac55608c72bd513cb6 +e6ad69f1dd84869c03cf13d22550471c04cc72a5664d3154d56886fca7cd18fb +e7e172dd975923c6e6a34dd59653260a28d90bd16e5ef7ed6a76a55345b08015 +b5e1e209e9db3471b9d0008174922d1e120f00620519d526e85a80fbdd658357 +56428f1549147e1adcf069508723625f929ceacdcfbcb0eac8337b3de3276894 +1298a952cc3fb5f55589aca8bb44111dd1023305f8a1d2b70d1da6fd510efddf +a55a18dfb4cc9a1b4378f9dba73e29d16daed328d3b915821159b0bfb6872240 +acd1a3fbda983af9d64188be5412b15a03b52982bb60a7748f06897c63d97775 +3e60bda00e6cb10c4fd1c14a49a9ba5383f025393f79efffe774ad9cb66bdb11 +e3feae202ac9ab6dc25eb347b967b9a9af308368cd0702dbdd5f8ca2744eaad8 +0f0a9093c127b1b01bc718e7979c40d2c3c130dc3e9eaeed82e44f12872ff753 +ab30138a8b8ffa23123abf35e67a20a44fce65e6f7d20abaf919f8e1dae23d04 +5e3c5ff827a3ae677e0ec586f828a0f2a60e61eb82019ac0e1798af174de34f4 +d65c27344cd9f575de52695e1564d76b3bcd81d02fcb1ad4b12499fdd6ebfba7 +c1c55c98c7418936fcab4606dc7203dbca8471df5828ba2a8d6ca99d4aeaeb7c +bef1d59a6daa5d0e7ec0a82fd392790b8e17d25f51cdf802784931d9f10b824d +ab7026fe65d2832d166cfb9b108a75b02ac5b74c7726cb5f178784f68d478ca7 +e29097b39014e81f10828dd37e22889551489ba2f6a2f53c72e831c75d2c36fc +e19cbb452652673c10a79b0eb2cd2bc4360a464a8bed2e369cf49660c9ece723 +7d8cbec3c3d7fe2b223b469a0feaccea1451d1cb931ecc6c307132d89a281fa5 +85626cd2ab00279137c326061a1f3165b68d04ce49bf0d308a21168d54f4a3f0 +7d8b8984b41248a4b5ba90c1b88403e69c920179c41c83a5e2dca301dc67bc54 +7171f622980e28f452568ea30e9dfb145d06afff9e28f43b04535ac63250cd37 +22ffda3ddc5049cc71ff4592766a786190c7fe9c7e87331b3bf1c8c25e289e00 +e9aa9e8ac24a978998366cb808f1dd3bf204af1adf8b6c3fcc93482510c720af +03e18d7f6820935881c4732bc2bd68b1663260581ac200be9b0dacb1e6a910ee +d5186437c5bdb966b939edaacabc104c3db19553117de2371839e6034f0f9f9b +878626fb6de546c64224475d416418a1fffd40341edf45f4d91df8571000b6c4 +e7e890ee4ca95e65f18bd0ac230b98d2487a59af084feb16e4aa48cdcd150549 +f93a03156ff8b76913decf03fb5ca3213b14686b664daab69d9d6f056cc6d372 +31122a599b78080a0ef40e75b9d61b17612c0982690bab7a8dff6265189ea5cb +4d8607b8a3447e2de6463f97e35c40efd806d021d47f01568ad586ea33fcdd4b +37680417b08ed5fd7bb1cf72b3751fd861e0f5170d6cb02a803c908420482226 +e009240ba80b0275b1402f6536da71325bd6c88e2d0642d60f964ed85acfc28d +d0fbcc7ebc3d462cb97fc41b8c4bf8352a09d71ccf318db3f2ef5e16d6711c37 +93bd1ab7f7c73db89c93b7843c2c2f2deb720a2e840fda79d3220ac62c280628 +0062d213b27010e5332a1bfff9ae17063c4aac27a190a5559933cffe1fb01db3 +b048fbb50add93b115ff5370ca33678389a703bb381841ef19d8cd1b930c2c3e +0f1211744ea18b15e6b29d8fb3fee9f5416718e1da724b7b3a1e82a28ee059fe +463640a5fa80025208ecdd98c0bab3ba2cbbcd80b730686ca27b14240fb1e9a5 +c751f88f42687a2901c489c8e7e428616ae0553d503d093729b64edf3937434a +390e6c6e1094848d10511feedeaf239a1afeecb5981ff1f6d042914f02f17847 +4ceb12269438aa42a0f9bde00db8783c01383be5c3a45941f8afd0177055870f +484eca20fe4288a96ba1d7a341b3c48cd24ba4dcb14e703db1389a5659e86ee6 +e4884fa3363238f8532d950d5b1566dc7f68eb0a31a0aa314deefdec9a87a7a6 +e7fbdf52e14cf413fd6029a77aeb5f0806ba51f9e63063185c926ad04df113e9 +265be0f9fc4e71d2b18680bbd314dae429c9eb2d84789bb85064468c26c04215 +321132cd4eac9046092f1979e2833d2d5d1a724d10629a0d4e9c7e03a9d3b2b6 +3c07d9f4cfed06a476ccd1941a071679df08f38154c2936fa47177986edac8a7 +925814c83814c705994bb0c9546a1fbce22111adaad613960c0a95d98d9452b8 +7441c3666b539950a27ce6d892c2d65b412fc58547ab21a6d02f1209cd304235 +ec32f4349fda2d1a6d9299c9ad560781dcd011e1d2d7cf91ecb6f5193bf9a33e +9f73a66b5184f9266afc4183131e7854f949d4114c48cc079cb892e8cae078c9 +c88223e65723bbdd78e23843515712bff13f4544d43a144fd180639c00e0f6e3 +9f871f8c056d8e774fd3d05175e8b411038483f333e18f169048ff21000fe84b +2541309205f6635a05de58dd71efacb7182f3972ea4aa2c5a6483ac9e38ddb1d +008e5a2f4940fcf820987e2bb7b73fa38f8441806ac0de93736109af54048a1d +e95cab99b1f3c5e104af17c67f0e0a99a0dd9c7cac7d917a8a0032abae8c577b +f6a647f505fca2e854998057387da13f8189a3f9bde597d66a1d87388d840f09 +8a9e712c6e3485eb1b8005e3e3224d959b925a237e167e10965f6aed03941a4f +90354b6bc6dcab1a2079d0fec8afb174b57d339252bc36a554682cf59773fca0 +36230a8bfe5538f7770e126ebd9dd87d800663c14f5f8a4d4bb935fe7d05d2e2 +11b720bfb754d323a8a252919a048db606eac7c590ad68115d052a78d8f0f7b4 +89e048372b293ae6a44169ea795cf46d25637c7252bc7a0062896f546624e151 +891ca2e70dac19e06a3fd3c67de2ff19c3d3838413f82a38369c5f2166ccd869 +5d4dbd9856755ab9f7c94810488bbc713b1aba7f66c07155138ce859a79f023e +8954decac00adaa02e38cdfb927460cf42cd34caaaa62acb7ad369f917bdabef +9e2103e0117f6f99b1e9dd73edae4b8c353f6961c8f078327d7256b5ca6a5996 +bcaf0cf21718f574f6f2b501dc8a3b115d4af7af8062e17a9f43ef05c1103ed1 +b406b350ad72f31ed50de231536a0ca1db4373b3641b39471774426a87d5731b +7aebab1f6a9cc832f7a8e542abe1b8815d20addf94c143f4824ad09d702acca5 +f80bc581e0c848248613f5d86a006ed509a5a55591852200aa9a3534e90ae0fe +95098ccb45bc63a4d86e2e1883db0bd1e293360158a5403467b96c1b9e11f082 +ac3d3a5ca47a04b7605ba54c8f9b34abe2fbeade06c3f3d32d667b6a0074eeb8 +84a40571a4e5f2c31483accf78230043c5a17f8da13b1bc9fa92d1db17724bac +73e48427410b582352164389f95357f53902454e167ab86c5a5c404b648c4c37 +aaced6c49af4479405fb9d32f6cd78e2114b820cc03877c29cf4707642c942c7 +3874aa52f3f2955ca7832a12545f745cfb8768b1d24354f9bf721d55bd9d0722 +acd1fbbea4b1f26128902892bfafc8c9b1c5860f33321edc5afe7009f6ee10e8 +d5cd98fa521b3f45869b41f8ca4032e8f814ed3eb0dac7828893cc1ef2649390 +e70cef649f6c469c830a2820ac2b19bce71b76e2c7fb653093b9fcf65477ea03 +0e09e3de1306a2131a1792a616755b670e91a002166433e03a221310b633f96f +7c4671b45b9e5933f67019ce6992ce8575efb90d4691680a02a4acb8978ce207 +817505cd7f01e027a965f79e6d698d6de13f56ce427a7ff627ed78237f99a702 +efb328304bfb288641d8685cbf43e96e85e2d6aedfe97e8bec0bd5f9622b98aa +316450a090f406879c74985decdc96962a50b5de3a5848f92492037011d0f4e7 +dd0fdc25d578a0f86f80a8ae25b9975fbac71fbef5c04810ea0a19b89facc0cc +aa73cd34b809854296cbdf532f9593332114e100ee289cd181bd3b3aa05c4fe7 +b3f323638087a2b97157b23505f9a653cee29017a39666e3680df121aaf641e5 +f971007acf53e8065a0fe536bb72e2fddb8bc51701f5d069faabd6c101e786c8 +ef8d299eee8fc6f7f97c1d9c09bc82f8204c9231083394ce840312344d592d98 +f652724515c99539d2c463fabd42c8360e0f0f5aa9739e3d2e484d3d39f2ce73 +f522a79dbc46266aa36518f0278432bb380904ebb6f30ea6edc835e33b81be18 +21b6e0d803f31e8be97a261b3b1426281b00b8b6baa6ddb76ced67d802415006 +1dbb011d04048481d815ea0db0dbccb20044fec53da88ec8cadc39bd57a2dcd0 +fd36197e8075729a1bd4517751dbae89bd44e2ca7cbed060e3e6e6b124b88ae3 +02f90a2388bce72b3ce9ef9e1bc8392246271d4cd5fa6067ce5eb426b2692836 +6f00ffbd94493239104a7d71adb54f3f1d74447676511fdcb82674cc89ed6b67 +7e6a24a5dd5d29f76eff3bcfbed6b5e81ff42a04b42b9c30763e501b1bd830e4 +4c9890fbe3b039eed303f064e63b7bf7291c58f2b45aa511b6e6fd2b169d6ce5 +3c9d4331ba7029bb94b7b5265da7c0cbab1afeeb6368ad410552a8b23c4838f5 +eb07bdafc3d60458649ac2c8fc787bbafb1b17128e82359c89a20075bfdb63e6 +d9be78d619689ca0f8c2e9c38a5e8b5eb42b4d07a9a3542cf835a423cb65bedb +ba210e7b2073919ef7d76471d17b165d6aedef70651f46d22bb1b6d3a8b3898d +e9370aaa67830689c4773e20e0264978655ee01d30e42f8a6ea3ce955c657970 +23129accb969cf84005341b24f92e23b4b3962834ed91ed40c6866f6aae07219 +f49f0d260d329c287d4bf91c504dbb44d13da65a96b522673b7912dde6fe5e76 +2ee0d89ed7fd96886e761c4f262c88db3e212c603e8981298e4520428c058480 +2f5fe0fb223f697f946330d97f6275c100e5d15f36867a7e9de9338d654cf267 +5bb52e5ee6c925faa522780519c15b655ae54ff19203a3465582e7b40e904716 +45152728ad912b05d25eff9cdf03b762507d6980908e22ba5399b2fc2cdddb10 +47d8d3b6d502ae49527a62ca8968a2c8b6c814ee0cf1a7618a8ea8d7e7c5f61a +50515dba6ed6187394d8051121b685be8d029d97449c85c95b4d68da2a31278c +dc7f39c44039a3a363d243910bd26c882ba1ef5be080d0f8b8eef954d9b7c186 +ea5e664aa4141f9ffea443d59124e25899d0d18dced06702499ab54e72894285 +fa1ce9a831ab914be5711a225ced342a9de51a7178a4e5c4491a3aff1a606aea +4b91188a20a63747374aeb9014cb11cd6f52bbf906af5aa6b5ac2cfe27e75efb +c554648f01f12eccccd3d94ad3b3271ec690e9a874284fd22587a58a4d78680f +20bdaa27a59c0fe1eda28b86834234d291682efce38bcc93bf85ebb7b493066a +40ecb74eb37dd1d018d3af16977ca7b539e5d9e68312d255b930cf1a859625f9 +bf81aec791a6fa63f578a4ecf972e1f61ef9258eff34f91ad002ea7a5c3b29ee +2ab6d77ac6c14c71ad07895206b0a68ed4c21e197851ad6944d4f61f3d089c06 +d0589e1dc7494f3e4ebab1f56666b2290679a7656cf84ffa3f1a58c1fed9a62f +3c1b0de1496a711f5b8e074712c3b44f49bffe341ed6e5926368388d0ff7882f +ff24a63273155908d94e78ed8252603dd8eebe7d19e588b029e5136840a26664 +9918867370b5f8d3942127044ec81cc46d1e88fe88e47b8af625b6826f2c9ee3 +5f8a6afd319d66812d80a171a13316c2a4c73900686d4616126aa83d635c4f9d +27fae14feef992bddddc1bd7c890e67cc544c31ac9d05541d7af116724081cb3 +8517dca6cc490a02295fbeed7e147b1e45033c70afbfd711a2d41248cba6b56c +94e1b2c1a12409ca6e529f82e0f23bd91da21fbba01f22968a8cac2a231362e3 +61523dd5ebee42c524cfdf2eaf818650db8da4e382cc519214a7b4fb3f90e82b +315db75c77b7ca98f2f21258a68417326cdb55cf6c2b31f197872a8d9d65e17c +dd64e130ae2d6d2a16a717de89257bca08f5bca777b3021ce17d5b1a07aef098 +88fc1e420c9e08ae3ebd4ecd38d4417191658035a623a3dcc20257c0e1c4d1d7 +d7e0e54defa4d27fb4f815ddb2604103030e95f27871c7b0e9a4c4610948fa16 +012c4b30cc2e6c03a7ccad7f0643b9a1cc1eec9c7a2681ed802ddbe7d8eb18f0 +2770b022d4f2aba40045ffd23a888e04b800735f917f0abea17b934e4a7e4d06 +aaad3add44cca6826070ec12bc89e716dc416bcefe0725c086e7804ab8b7fd91 +6b1e1e3b289afbcb202d7074de5c61f2819f13735639aaeb50e7dc9aef89209a +eca7316bb46f7f03ee99f56817d385102faaee63ca8eda61bc7b905ee48a9625 +69dc8122ebd8bfabcb8de515b7dae09542db46e0e6036611762442e8d3943d90 +a89024e8cf46bab577380287f30284717c433f304119762b276fe84fb0d0f075 +3d6591879886da5fc0e179a7fef454699e159e8a2d35dd1f678c8a5825febc07 +6b2d56fc48370317c9fd3cc71a4cf3772bc6a9f202a736e863ddb4cebe059958 +1ee4c17ea43b964cbc2add4d2e2ac013b43d11d1c1471565b90d1bb0da9b914c +44810b030e137b37ef8942dbf6b041d9f7f90305afa411ad92527177f894c2ce +835b8942eed694b6e7503851d5dc49bd40e05056841fdd21d6c29012161cff37 +8e213657bb2db9f3655cc1d18b8c6a4d31b2d37036b1be5f51d1277cee26c758 +685b9b2bb9b9f9e88f9146ba4ab794f535358fb49fc0d40ffa41ad402644120d +0ea676f3d5588683683b79520de05a35c0f394f0f5ec6d13ac6b1df71e030dc6 +9d51c242324df025c96c5429f19c7190c77666731a46f8143c37252db87120e7 +8bf1c9f22b7a80dc4b999baa805d9f1eb5ac4e28a70d0fbd6c7dfdd7c1fbb560 +26073cc5cae5a1cdf5f8471585165ee0191d353ccdcd05f2117cdae9cce71d72 +9d0f61304f1d29eb2c5b6ec18290a9b27baceae80a405afb5664ba513ab26596 +bbaf87266ef51dbd35112eac5576b04b650031528738edfb937dec3f9b0caedf +2447aeeffec2129814289b09842d3dd90b86300f1a035849b87fc2dc2e4292eb +568ecf43a518512f9dd5287988e688c5f040a442150d447196bc5216df070c0a +551928a0629cf3c7e430baab504b2315156cc367f55f090dc1f6ad0214353780 +f1cc7f4a9b262debe551a5de29cf1cdf08117de2df62f164fa91d166eaa72758 +9b862a3dfdbff31b404c11e411f0c642ca06962c18304403db2eb93cfadd392a +c7a030971f2f897017317054572a4b5fe8fda9dfbad4c079b0c9c3e3336aae94 +b11baa3d0257a88a1919be409db0e1ea7f2f55fbafd3b4a8b5f55581aab8fb31 +a233d2081374327616cfc745b3c7039dd295a0b5068560fb68eb67c567c589f6 +08a45a312ca25accb1775badfd7b2eb0f4bc948b62362b3bcf40766b987622b7 +da7d9b68a7909104056fd5e0709a5928a0c314d407745c9b5f4c9a65483a7bd2 +3f550b7030671bba32d959442573fe4e6cbeb995b2fbc273b6894f70701fd2fc +3f6ed6fe95cd521e83862350df167894510c93b44032187f171773b42f483e61 +2048daacd1f4be69c9ef5e6c1f63c72b759651047cd9ce71199dcbab1c36c1e7 +da6dd872b1a4c03d7145e4dca72064e2ffca5e43fd66a7c532feda1000904032 +843fcb1e24d99146dd27fc507cfba1a63b0843af0ebc0a336aafee4eb27d8796 +c0c1298a23874928f35c7cdd27145835742eab898c2d04e7ebd5c0fabf4806c4 +d44ba374cb1ff5052be5066d3a52e1f2ba4841fe35ae6c097cdd1c8b04883764 +efb0f51f646cccd0321ecab07647066dcff2bae0916983248b080730e45b8aaa +df9fc1805e6c5fb1b536c598ad35c0f69f561dd949ed142ba7fde6778620e8d6 +ac443fdfdde254bf1475ef95bbd54d1ec0d9b531d1cf690cfea6ea9dd4d732e3 +e5bcdec23e92eeefd411298360effa920d3ceefe61858b9a356023766a181bf2 +aedd269b7d4c610fcc03cd8fda705186b3c842bc6d7299abf6f704b419bd2b2a +a3f75c8b0ebdeab45eff8f1b9bbb9b187b03a0735b28813860d2916f7279fc8b +e6df8e6f5155c3dba782aecff52b1be8710747c51e9a76d2574fcca699b9fdc5 +48043c2fb363a596f6b3b371657bdc2be900c9707a78fbfcbd1c0bf881468e2d +f7adefd8bf30dee1b2347aecde496c012f0cbfe3816068ff31f3b3adf56b612a +632703d469de017d29769ed5d55aa1f37651c11f0739ebb4c3af0a3c62c4523f +05081ee09ae3076d361ca40f8b13d4a631b9f24a5366f4e678481abe3993ce9b +ab8813c00b4b95be15086c69a55e65ae908fc071f0b3c59daa9719321edff148 +62fa6efdd42bd192d0138f6bbf5890f78a9c38d147ae00157f4307dc3095432f +5bbe889da9a5bee8669c6651e758ed5ad38856433fb9702d70c12aa29cea4424 +8e50e17ce514b8ef3131a972b8db0b0be78c93831806e98916572e7959b8317c +54149e5372718963eb74983316ba7a0418a921433d759e73cdacb1bb6ac69df6 +7961040ac80e5459f3120ca3c8eaea02497b64ef871030f1501ad79dc405019a +00e355ae3b7c48ed22873196a98637ba2b25bf8b946ce509da8bd25456373c29 +dbf08751baf2bbb23ed57b32d3abe306c29eba95e3a404c3a15b172a8313932a +c5ae1588a0227de80156713ea8239110c31e0452a2e2cf376cfcf90a41f68bdf +c08018786b166a5e9326b1beff6a4ed7fa44f523911d1819cb6aa1ea58fc52cb +51a74b886466964dba973726352554470d5c35353b60b68830bfcc8f14cbdf00 +f8974ab1914694025375901d71324ba933b2ba61204c4ba5f6429077f429f17e +8f1f95c2308b2900bca909945f96f33d73a7a2186e28d4132db91aa6d8751e47 +fc1665361bbeaebdcf6bae29423c6fadb892bab7cc872ee4cf3490d2956907ff +baeb199c2ccde45a2649aa2e4d8dc65142df9b332691d9b154dc072ea33d1710 +e64eea0969e54a54fcc812d6c8ce00c790d71ddd67c6b8d4ca7baa6575cfcee5 +8af7c205f455c24ede135b653875780f54c98e3159ed284139f4fb00f64ec8c1 +1191c0b484b9fd15fa6f0fb5b6999de6358741a0a48abeee116a44cbc015c0b4 +5584b76b7e73d6d3148bcd17cdfecbefd83aa402162367bc40e7835fb64a4b04 +dc4827158e4b8f193bc470c9bc0c46047b4cc4d797ea9ed7f35868331517fc43 +15b9a080d5171104dce9c6b8d9105b0031f4b1f9ce7d8e2b7d08c5d633290fa8 +8356b073770339203622f09407cd263412ecec6c7f58f8d8f5be935ccdebc64d +5f0a0287fdcabae9ffd00c24e7cfaeddf9fae5f60d4864e8268885f71a8a941e +facc6eca987d76f1ca3ff9795045b4b9057a7ecee50a04d09b859207ee869750 +282bc24be3dd0d84e33963c4c1a484de057541399cfe79a5bded1bb90833d8ef +4bb6f36b7b9f236ff00bcf441ea1e1ea04bec9f3402e7993be2d024a5d06c653 +6c2c090d51187ad3eafd64bb0389da839cde99222868ce4ad6e03d6fad5411b0 +9826c410db9179d22db159ff72b0c9246c690b527bbaae566d145284f3e7bf24 +20c2a7bc2ee6607ced1e89c558f3a4bf132f23ddf53b240284de7c4839ef3b53 +6532a60c9df1cbd3470d44c7c0d26136cf4955951fdc3f0b85ff4d4057f47a6b +8648c3640059f4543316ba9007c0e784f79c79156b04f60b030cb98b4fd47577 +dccc5c223e0f1211744ea18b7c0e676bfc5ca9592a7d9e7c13b93bbe2bc62251 +71d0a4c44950754ddc2ccd486d2b702f4188987595bf8988130b0c059b279418 +ee3d0e21a1a8e2b1852ba7e01e9cf19746131e126bf5eedb08e6c635d700b0b8 +caaf2de2c01f82ed911278abf80a8a47aebe6330e0d1bc308f00a9fb8944052b +4cf11ec1f73f3dbac7a9124c6fd2009944732d672c3d4cd2d387b4235fec275b +907d25342890dc44dd670020814e4155463f6bc4804f68efab0501388a3ef816 +e2ed8b83840782e22be4a0b562a6b0361b8129872c5ca1c0055940378bae85f8 +2a39e182e758f970c22aaead53ee5f934dfe39abfd55bdd3275b65b0b71eca9e +467dd786fba4f8c7084db6069703dd97b05f80013cd99dea6698ad3ab5f09f11 +5a00e47fbfcd13caaa7e82191d1881b3992b69c6cfa15307d6ae8370252145b0 +97709d56b69ecb253757ae7b1a11cd9a8c2210af5c91fe93bc2147681b19c75e +a360636446935d85470b0c28d927b07afcf63809a53c0a8baee76632982e9fa3 +1cd9b8f117a7b41689c83a23043550a3f165bfe81f0e0e224a6568e60e28c466 +28b633d66fc7370f65fd2ac5694e7c9a616bb88298cc7a7bdf9a39f1ffc1aefb +16de11a575a58fb8f65c47aaab60b465d3e8eef5240a9773874bb658d7356723 +f449270f0eaa74cda1a6d5f732bffebf4415e77d3a566d48e47d7629fa6b8a21 +6e8032e7ceedbd8ead4e922685d6be6448a14fc839ae4a74f6a5a59c01375a4f +d57555f569d036d0337351c7305c49217103adfe4b6ddc8376f134eeb11ca705 +92d1e2e80c423ae05a0822375e0d3f059cbe839b07a290a6b421c7d513f1961b +27c632269a8c35eed49010c561b580412b9363aa0e9c76e210b6a86a55016da9 +e04e8f7a5c525ad3ef4edd7550b6e2f6669508051973e36e435579c178d2d39f +3e27bde7de754bbc68da87698aada323575cca997a1cc75f706634834d1dac10 +7103b40c71a1e59358ede2d1ee87082235e808481f456968bd649a268e566680 +3a8471be291dea8358c52ad22508da5762fb1e1f6128b34e32bb68039237a400 +c1afe9e07c69d8b486281a9ec09067d09b0c8bc16c0960771066aca2f4c18907 +4e2ab98be4da38b2ef92f3a922a1fa3afa66ccb7dc5c59cd06f7b6dfe00eb86b +8abc28551decbfcab8ae483839cbedd2cfd6e7c8f6348444ee0e67e943e88444 +f9f871e9291a5eae7d63522caf0396c4cb477d2df5377c39c46b14125e100ad2 +4f15e1aa3dc33b356f6a6d9e1404efa7f05b6208948b01acbfb8a1079181872b +f06cdcd561a855b1884008e605d67e653ef3357b9c6d5af90228c6b4676644fc +cabbab905c7e9164a901ba7fd1c4742d454784887907b7e1a9b2d1c844ca2f03 +3991fd9fdd19fb4af35738bb380bb940b03e9fddaac1f64afc6e3c99ee1d7dc5 +5ce48afb651c9595e41c894a8d75af382c709720a2e94f03fa45ec2cfbf7d3e7 +6fc0dba65ae93bad352e1b14aa0f3c39cb8766c106a1fc656401e4ff5c4584ab +974e93b2bc7f16209d80bb566ed5b67acbc84635bfea38f1e87c39027a0d1ccb +1a93049e936116e1847fb3123585096edccbfd0aa63e623b8503a0d4760aae40 +0a88a7e87400875eac6f14fb7a7a8682560de6cbb43fcdf303758e182c4d12d3 +87ed4533d7c9f2b8e13489130d6ae5fe066f4ad856b167725e4ca2e7b842dd7f +599de83285aa617d5ead39c7ac6ab77e42f5e1153250803103f7769cf35430f4 +fc5b91642a1b798ef39d359f7196d3f7b0f864e016da2e43ea1a2b8e8334e8ba +c0af735eeec83a2e344ac6a62461cc1dbfacfafe1cc1db2ab1655ba0a7d64eb2 +4f165b64608fb31dddf15f708f052adcb6ce974d807e6ad8f7b94979ac09fd65 +163a3699cb80a8a32d49efcafad68856da3be30b616873ee511e361963983106 +f700c080555e719697b0de489286e397f5f81af94632216e357f1020dacd270e +c7d9bb4235aa738a8dca7f23680c377a643b0b59e6a7fb83507c8cfbd1df3758 +3a565760689d25526f064e961d0c3d2071054eed80850bb10ee9e73f27654d20 +32bc2a750714ece1a4ede7b7c4be79f4e0c3d7a6b433f44774d6cc6a93f6dd1a +29b855b805788ff4436794d2aa348da5ab69ce698e7d5b1956d1a7888607d7bb +a6b59226b144dc8589e4787c8ab0342c8a085e12fe9ddad5fe1c185099e207ac +f4308371fa4afbdf90eb5d08a0076d70615a4d17264baa2e712063032c188877 +fcec4971f2c7f4a9012fbf3fe15b76adf4f35e5c0f337862584b12d04bfbf85e +8b3e8eeb64bc0fea31faa7a697b34be4a8c3fcae69ebd8c25fba58f3d101c9cc +7d6cb4a6835a5262a28f9304dae690bfaf6eaeef09d44a0418b78e2a4d381047 +35a4523e8341a74509eef699744865f10168cbe739d4eed29e6542cb0dbad470 +d9dd0ddfb8164959ec59a632863920e18ab5c001845ece330868dff7b7ed51a8 +c50a11861df524d4dd80c7b370886921b9f6b28015a83412cdc4fab786791bd6 +37081dff54753214e35477c847ea13286c28fdefe690fef446f4cad67ac3ba20 +958743af664767e8d8ef8a389ec1c138128aaff1b7557b52eb59dee75db67cbb +60d9b08b3a443b10bc84417aac4aa89973c8d8932af5b91b82b7569cac09d69c +0cae12b7411269a1c550c94dce68d60ef418f21ab29ab552eca48a4ee94a4b27 +5d174ae06ce469bd5110d23678269b244cd596650ab74f024460c84b564cfc31 +f10b7d0a15166acbc8e9a70668aecd4fda96ec72af4d438f3e9c42e068bb2504 +66e725c097f17e533d6ddb0223a8c018e6445a468e5afed7d7d93ca5e8807f6b +cabc59e9d7eb20de335ee9328a6726bab86e2bbcb847e18e2be079bda3c1a380 +2d338cc33a35b0bb17b37188cbcd54c760cfb17d5da0c66197da9123942a8789 +6bf0e622dc9e93457e1b73b7f5b96c894eb76af290e1f9dc439e36e972b3f865 +187781130941b3596aa9dc699a6a586c1acfba7e1d7b340312856ba9caf63662 +02f6f303f92f15726dd083b1555263d2e3bd50baaf7c0bcca4ca774f5e35cd0c +85caca2366e06fb942b482bbfb1926fe47b1d95a83a5143ba801efbc7d62c003 +2f915672ee8ae1b235096c8f62635bc5c42a03d6be518e9c4a68ee0d8e48d1e2 +2de2828cfc76efb4a12ba5c3a3a08175545256dfdf53edf0c91bdff981f5b9b3 +fb8b9ffabb007646755e76a278cb1752b8081ebe91dc77177aeca8ca90ce2077 +f90d35e6f7aa90b1505e472ae5f09bb05f2a37b5e2cea2e1a3e5fe0e367a07c0 +f31f855d7f1c7b4272ea37398bec83f7b79fbf86129799e2ca9e07b2a01213aa +2d73499beb7ff978dafb22518227532efae2a60cae34347ad352a00c0adfea43 +e3f95208c6f5c21e1fb3c0b07a1d143d5a8b55cac717fda2b72ff0c3fdbabf56 +34cf4c2051dbc59ec4c00b6e1cfe454cdbd9fda033cda90a2b66fad3e8271e17 +fafa42139467358062f2a1c244c48d52a9fbf5c1f360bfa45d0b03ec7ec4805f +3e7f67e258936a690090abd309b2b93424efeb8d5d7deabee5eaf0db5d56c33b +3a728c08624ea5d0c85f77beac600c5fb8c184ac63b3fcc5344f22dd878abe96 +4320ad7ad8803c28b4753b071213851247f35a2f90a59072312059373cad6276 +2a17bb449602f8424ac583843810a1c6db922a87bbddf800bea24f6ebb071d2f +3a82053bc5ddf3eb11c3c32f551a81deb3000e57282552fc0b8ee17ad909bb2d +b851793f65123af449d07279de0999aa5208cc293593eb9ef607c7e20e873e64 +6097ff18507152a8d111e24e419c148a5a1fbd339428f184bb3c5ce3a36af6a6 +9b211cee9150c40506c1e990d19ba8b4f0b5c01e7c19a05904cb63d127118908 +5ab937a91b2dc3b59ac6bd1971c084e2c156c10661b2c7a3d170bde0fa3e682b +abbbf187ff39304d6e5ae80eabce1c54a0bfe09f22d97133e94afa9981e837cc +0a80b34b29899474b65ebc6df73e5abc2f2300226c4e96e7c32b3f80a26fadc1 +e503fed433b7cfaf681e6cb33057a915ec53112e76cd9602ff64a75543eeb82d +e6f45aecf9620a5a3bae1f4459b9ae6162e472e93eb2e0daceec8f0608721072 +e456972d5fa6bc4a45afe5a8a5694e538e659107ff4cd6a8ee3d38544e397ffc +26a98e8771a5e07c99402b1722b09cc959f9d25126a82c7820de21a9855eda2a +1b7e4d0145ec7017caa0349bd13177070509276241a0aa7dfae14f1e2d1805ee +58714e9f2a647fcede216c7b3297910df45f91d8e0c9ec279f16a744930f3b77 +0b80d299b44b478377ef237341ecc5d9a59b333cfbbc229be944d368559988c4 +940209b2a4fe6d55713acce94181339a1d70589e96a54a952163b072e116f5ae +4e672556501ac126d0dc91531894b69d5c8c6bc531db69a961cd517d4bc07375 +5683fa7cd9a77fc56c6ae62cdf6bb0857e8906f835035e78d3f7ad14375b6f21 +fd0436e6c914c3b8d6e543df1ee4b992c024e9d9fd316dfba3ba9809a089cc99 +8f34466ac94d689350a5075998d7240efcda132f3b8f2ccc0fc78f5d77a313e4 +09d5ae9f2839b9ba67cb79e1a0e7ff8f77e766aae4e1931a51890b3f0e3b39bd +5412ab04baeeae007ef88984afdd56b7f81f403fc6eae6993367ac9071b396b7 +f690f613193c638b9c6b10350d0170696db08055fc583cb04c3c66cb71d354a6 +6c02a9c33e312dd36d23c37836795088375e42241d176d2168dcea614a14850f +d283c962ddd274d58fcbba7668fc6987cb0d204cc4db70ad44c53ab5da5e15fb +55c5c53b85d0468b1798bffc105d55973d081db5cf801d98525597cfab8be326 +f6723c6c5060c6001ff9da8d01855933f68d88ea8c403e6dc8aa446e5eabd57a +4d8c080ab4c164e3a97c1c6e87b3e279b97e99127fbbf1126099928ea8c0af7f +3e592175164f46dd15ce60c6087d1893dd388b7a8eb65d0c38c56fa3fbbf88cf +314e3ca2b710ff61f610ba945f7405c373c2b4147713206be618b238ba3e367b +9d158dbbbe4dfc0aaede3f9457893910f3a83bf6baa3688fb1176c93132e24a9 +bdbecae4b53fd2cd971091dc99359d11af0aa3e94264538203459faf0cc36410 +def19e919a2714e2ce1895ceeb1f26ce613e5f1bee352ef3a63f94fc343fe7c3 +4f831ab892db8e438144821d5a701cb71d36526ac44a9354f3440f74e9e1fda7 +723f0120f75059513bd52cb2781a08b52142e53d0a4a23d7d003cae26b838552 +a1376832da4a1b8cc20cfa9f72fe3a9380a282bbb73a9ac07972677045589c0f +e08cd002c80e0064a732a3dbb6dc83393d470f826fecdba4f1d2e4be76a5a433 +9a5e25b1f2b734d4f1469b84d977e3ccbe5951c768c9274d0423fe5d740ac8a4 +e3affe4fa68dd8cab058ebb21962d72dcfeaaa47e541a2ff3e6ecdacf0484ec3 +7151b6b1fa6109a0113e3bef3145b53d05c62e0391e266393ba1a4b39a806a12 +f2fe6562dff2fc97eff531ded8dc6e0ed359b2bf16d00031e9e0753bb32c156e +ea81b7db813752506558d39f967450fa05390368950c456f106211dfc0621e52 +66c14e1ebc6a9f3de3165500218fd683fa0dd2b4fcb937f14f7d3fb85faf556e +3f53ad74a4bcd96872b46716e0bd737dbf5d3115ce382ffb8243c499503283c4 +274a0e51c9d41b302fd57c648a4e1769dcab4668ee624f3b9c84f296ba9ca925 +056358d1e7f5a56ce13333e53b5676d5e9ccfa4cf68f18f28aee890b1bfad737 +03b64dcd7c5f34387f4522f421045adb7cb8b552d5145b83e24667d4f80cf636 +45f80b863f0293b1d494ed65532c3963b69fe1a858850799155ed2450d836d30 +d28dbfc50c7a58fd713346961d7f0e5513394b29c06c52b786b48a2f13b95b9d +56d6aca8250f3b716f055275af003304d36713f14228b5ec40de7c3ba9ae32cd +eb91f8110bafcf7c92ea383bd9ca4d4fd0f6ccb0902b07841a4cbee2cbe21c4a +8124a11ef70c32d89e4b86d0e84294412f305ec186afd600ef7d72634e931f60 +a75a22b03abbb87b4a163044b96d43cb1a8eac9484df8955edd18bb298612f6d +a9ab0fe3153be8def9616e883e5ca081c79f607d7439ce5a28ceb6b17f51f0f0 +9affc2a8a766dcbc19e1dafdb34bab555934bc8b3bf2255e4aab837de34079d7 +3b310d8d82d2abe249a28e1fc6f65e529c301933849883e86fd7b7b44271da63 +15913982ad40ffb9c796f3b519f84d15ba2fb42fdd632e042b7d9f94b28f5b81 +5139956c9d4e3521d59777d3c34a07e4ab2d92ce1e64c02c612023bd84153d02 +ac1b86b34937b82522277d5c11a7a3daa95e63e4d122e626d9167a5a17b4d041 +8d5aaf88b8a59de837362e48c9fd7123c3c30d906cc081ff9a0a1ce3b168b9e1 +ce50fb45fcaa3061d7dd0fce1c7051ea3c032fa52fa63442629461bbf742df11 +e6a548e7f73cd0441032ffb059fb81b468380c5eafb679d5ae2f384fca2236da +5d5d878a6e29e282d045a419488daa5d3500bab9ddbb6123112949548b37cd85 +46e466baf1c18d05475029cf8b06206338df4d287541137ee8d509ae9e3716df +32627c0e28eb8edcc62bcc37536bf8a36b8a545d539f2754fc39eb8da84fef99 +02a3733603379181d07b780b1f0dab6b69ab3268adeba5cac438510e80b96eb0 +79ccdf7e76b2f88a37beb1b83e4b3529ab0b6b1a35d5b7add114578ce3783582 +fc23f6c5df43330e9397c71e984817b908dddb6a02e6da93c87f623b3dcacbb7 +5c7b032d24a5e516bfe910b1569ef48975b8b7448f2469a41b4ab69f419f9f39 +2d3ca7b9bc768151274aaf55b06c3e399cb19b6e0f15ec8868c6e668e524aed3 +ec176ffb6a8accdc068a22eff5d79498a00a99562e490c7cff7e59e7d3b3b1f5 +8e48e1ef5e08391391c7e9ccebcce6376480909156717c07de203306e8c7c7db +0b8737da43a6a8e9218133af777bcc505e5f5375a3fe8411cb5a317619e9d259 +07cbec0088f2610250754acf52e22dfd59a160aace94a7392f2f3a578980b1bd +6d1dedb930b6948583f7d978fbde76276822ffa4014cfae2ac22913621b0f778 +d50edfe8517092759af5bdd038316d1b08f2b31550d1fe1fab8b62e79419010d +6a59355a2e73cb08443700ceab7ee437401683f20cc5e9a21f056866f2b67dfb +4e1e8df8ddcf2c5823e7fef6f91ebd1fa571ce77ba080c0f604a263379ec4e2f +f5694975fa6adb5a646ad327db787c204f9b5ff9f9228a3337c111d32cbd6f8b +1da885425af61709e40d4352a1be6d8e2775372a3f7717e9aa9b951f79d2bfb8 +399d1f915e26836d454d286655657b72378551cf133bfcaaaa2a45e98f840bca +522311100c7c92f46661aa1a75fb44cb28a1a7f0cbeebc2008c5fe882108e2ee +1e0c683320c084d1e5ff7c0657de7942b0daad28494b24649b271d82c10b7373 +f02be60741104e31bc70a2fc2ceb7db132f272caaf093993de5cc3d139d559b8 +ddfd287fb1705ca461eb03a4e039428ad0ea3baf3b29f824fc8c8edfffed4803 +e5d0af7bef8aac625a184911bb28809661eb2631a078fb9a244f043adb379476 +d0dcdabb21be4f1cee1b21d775a53dc6a1bfc4a8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/client/shared/lib/fonts/Vera.ttf b/client/shared/lib/fonts/Vera.ttf new file mode 100755 index 00000000..58cd6b5e Binary files /dev/null and b/client/shared/lib/fonts/Vera.ttf differ diff --git a/client/shared/lib/fonts/VeraBI.ttf b/client/shared/lib/fonts/VeraBI.ttf new file mode 100755 index 00000000..b55eee39 Binary files /dev/null and b/client/shared/lib/fonts/VeraBI.ttf differ diff --git a/client/shared/lib/fonts/VeraBd.ttf b/client/shared/lib/fonts/VeraBd.ttf new file mode 100755 index 00000000..51d6111d Binary files /dev/null and b/client/shared/lib/fonts/VeraBd.ttf differ diff --git a/client/shared/lib/fonts/VeraIt.ttf b/client/shared/lib/fonts/VeraIt.ttf new file mode 100755 index 00000000..cc23c9ef Binary files /dev/null and b/client/shared/lib/fonts/VeraIt.ttf differ diff --git a/client/shared/lib/fonts/VeraMoBI.ttf b/client/shared/lib/fonts/VeraMoBI.ttf new file mode 100755 index 00000000..8624542e Binary files /dev/null and b/client/shared/lib/fonts/VeraMoBI.ttf differ diff --git a/client/shared/lib/fonts/VeraMoBd.ttf b/client/shared/lib/fonts/VeraMoBd.ttf new file mode 100755 index 00000000..9be6547e Binary files /dev/null and b/client/shared/lib/fonts/VeraMoBd.ttf differ diff --git a/client/shared/lib/fonts/VeraMoIt.ttf b/client/shared/lib/fonts/VeraMoIt.ttf new file mode 100755 index 00000000..24049248 Binary files /dev/null and b/client/shared/lib/fonts/VeraMoIt.ttf differ diff --git a/client/shared/lib/fonts/VeraMono.ttf b/client/shared/lib/fonts/VeraMono.ttf new file mode 100755 index 00000000..139f0b43 Binary files /dev/null and b/client/shared/lib/fonts/VeraMono.ttf differ diff --git a/client/shared/lib/fonts/VeraSe.ttf b/client/shared/lib/fonts/VeraSe.ttf new file mode 100755 index 00000000..4b4ecc66 Binary files /dev/null and b/client/shared/lib/fonts/VeraSe.ttf differ diff --git a/client/shared/lib/fonts/VeraSeBd.ttf b/client/shared/lib/fonts/VeraSeBd.ttf new file mode 100755 index 00000000..672bf761 Binary files /dev/null and b/client/shared/lib/fonts/VeraSeBd.ttf differ diff --git a/client/shared/lib/fonts/c0419bt_.pfb b/client/shared/lib/fonts/c0419bt_.pfb new file mode 100755 index 00000000..4a49dd59 Binary files /dev/null and b/client/shared/lib/fonts/c0419bt_.pfb differ diff --git a/client/shared/lib/fonts/c0582bt_.pfb b/client/shared/lib/fonts/c0582bt_.pfb new file mode 100755 index 00000000..9baa1da2 Binary files /dev/null and b/client/shared/lib/fonts/c0582bt_.pfb differ diff --git a/client/shared/lib/fonts/c0583bt_.pfb b/client/shared/lib/fonts/c0583bt_.pfb new file mode 100755 index 00000000..08f6871c Binary files /dev/null and b/client/shared/lib/fonts/c0583bt_.pfb differ diff --git a/client/shared/lib/fonts/c0611bt_.pfb b/client/shared/lib/fonts/c0611bt_.pfb new file mode 100755 index 00000000..ec6ed060 Binary files /dev/null and b/client/shared/lib/fonts/c0611bt_.pfb differ diff --git a/client/shared/lib/fonts/c0632bt_.pfb b/client/shared/lib/fonts/c0632bt_.pfb new file mode 100755 index 00000000..07011728 Binary files /dev/null and b/client/shared/lib/fonts/c0632bt_.pfb differ diff --git a/client/shared/lib/fonts/c0633bt_.pfb b/client/shared/lib/fonts/c0633bt_.pfb new file mode 100755 index 00000000..d68f639b Binary files /dev/null and b/client/shared/lib/fonts/c0633bt_.pfb differ diff --git a/client/shared/lib/fonts/c0648bt_.pfb b/client/shared/lib/fonts/c0648bt_.pfb new file mode 100755 index 00000000..72a1606b Binary files /dev/null and b/client/shared/lib/fonts/c0648bt_.pfb differ diff --git a/client/shared/lib/fonts/c0649bt_.pfb b/client/shared/lib/fonts/c0649bt_.pfb new file mode 100755 index 00000000..b5d4ded6 Binary files /dev/null and b/client/shared/lib/fonts/c0649bt_.pfb differ diff --git a/client/shared/lib/fonts/cour.pfa b/client/shared/lib/fonts/cour.pfa new file mode 100755 index 00000000..b8c097b0 --- /dev/null +++ b/client/shared/lib/fonts/cour.pfa @@ -0,0 +1,1954 @@ +%!PS-AdobeFont-1.0: Courier 001.003 +%%CreationDate: Tue Sep 17 16:16:38 1991 +%%VMusage: 57844 76768 +%% Copyright International Business Machines,Corp. 1991 +%% IBM Courier is a Trademark of the IBM Corporation. +11 dict begin +/FontInfo 10 dict dup begin +/version (001.003) readonly def +/Notice (Copyright (c) IBM Corporation 1990,1991. IBM Courier is a Trademark of the IBM Corporation.) readonly def +/Copyright (Copyright (c) IBM Corporation 1990,1991.) readonly def +/FullName (Courier) readonly def +/FamilyName (Courier) readonly def +/Weight (Regular) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/FontName /Courier def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 263786 def +/FontBBox{-48 -288 684 841}readonly def +currentdict end +currentfile eexec +b2de7b9b2a2783a9a81f7a04e7605e0bcc84ad7a981f9d6b201c5fc6acdad3ec +d09a8a1907296b7bf5510822bd65c174d41912f5e2bdc23ec621dd28cb4f8b62 +5882cca862ca3c8bbed56696f8e17809439151596792163977eddcdae7b5c346 +e93a0756e7da36a403e30b34b70eb809ec5a5e6dd43dfc5d482e2424a93fd4d2 +d0e648621eb8f9339f10ba2db9312ae5c071e20946278b5d54f7858a41f0a1b6 +b2cecd201fe0cc773a733fd892bc4352fd2c68554ad49658bfececa5de0a4178 +07560879485b17f950018e00fb441ca6e0face6fa6acc95daea5b530a954419f +a15ff97de6a7ab23540344e0193d5356ebdb99f60fce74a4c1828a36b3de4ec4 +92551fa4f0cc7ed791d897ed75bc5d034f85f7326b59e16a9e9d20d7c7072a4d +311fff4cd4635852ab3e098236a1eb05be8e5d3e4ced8ea930076fb27ae7b5f3 +a135b8e3cfa19b4144c0672503b51641ecdb779eaaaaec164216beb4de034575 +66b93918a02aea1730b7f138623f2df763d6ccadea312d4059487851ad39fa5d +6ae273d56563eb3788c4d9aefb2bd85feff2c8f6a0c383f653ddca8d4072a397 +26bc47616d936e336d1502b65cec60baa4f7c423c290d9a8e067b433ad52790a +b3de64436aeb25a5b8e18a91e616b9c310d8bda5546cb5f46e8d74adb8f970d4 +88a1602e8ed3390cbb9f1e4564f70b2141cb8262cf4dfefbbeff3d15f49afa29 +da9deb04f1e004399a20f57f770b838059aa75ffb5da99581f2fc90dd7b7f4bc +3d3d32a8b2df7a3b9ca0311f5a555e6f05babae4c577b02379370e5a364dcbb3 +1962317eded89394dd26e5e37e5f776a9ce97ffef9429f9e89773a6db3d642cf +319957b03a0434f4f81e782121d8fccd08de4e54e29b1a25b1436d859db45cd3 +c254fb02b22288d080139bf20c4fa130f98e83fde39963c3068c7aafa1c6afb8 +2ff6753842d6dab630e63fd8f7853e9358bc6c074f0acbfe9d56d3b93eb7eb9a +901ed2bbed92737fcae60b95e7186ca800ae2db1570ca4b0ed9ea9fed82ad73d +ed3977472c257b253773de2ca37eccce4faf68f1eb5cdc827dd5bc8e3c03bbfa +e9bd30bcb3cc1d35660637a882f0f4a037bd07fba1c6f5c0e8a88088ecf853dc +b2dc41ee4ed1f75640a93e9208fe5cdc7366cf3b738cf4177df4f922d8081006 +8f8f2b0143a44caed520141238781111a1331e7a6afaedb2019cf0eb438177ba +68fb0d443989e67d21f49cb8a52711507792c45bbf0c25f634cf7c1323d6146f +7c778eff204c71778e5e9723e662106caeccb514b9be0936aa409567ea40b9af +b5852cf3c9cce25acbfdee0097f828d90d21cfcfd46ea083ead540877e565883 +3234b8609a3f376ad94098ec1a1685323be81a64a6174851b6e8e80d3d8cd6f2 +41e2492bc07c052dfd66c7fa12ea0ca90a15f49194b0dbbd6f80aa49cc52e0ab +134571c2883f5adf6b57a036dcadd18f7e397b87fa80be532ac7aac3673796f6 +f20f5341984695dc99359d6e923a79441b64b85d405d53f89edf79d76278604a +4001ccbcf3e10ca83f71202d6f0a2f26db5114515f8eb58a2eedfc6c9f1f9a3f +c40205c32ca33771d7497307b4f67618bf46d3ecadd0d5b6f21d298784f9e22f +e8a97443e951a141e79a2cd6e500653fbb8e34613e57c270301dbad7b89d35b6 +b7f6cfc81e5e9f58508bfdd6c50c8b4d9114f9d9d0764232abf8c84b8c8d5284 +f78138778565991ffefaa9b63d205e74146229c2656d126e3664870c9800b9cf +ee76f078dbb1064aa5609c6c553b2c660a4054e46fffd645e8eb8864d1e15c33 +e20d690b90b6a5b9a7213bdde4856236d9f00d882d8d8cff4b27fbad85503029 +b9a4a75da575bcf29ae444f0714b5580aca0bad9460fbe2c847cd770825c8b0d +72fc684ae45ced430997d41467889fc1969702a44fb77e8de557851d4eb34433 +631c225a516281ac5e0ee6c0dafbc40855c315fd60559e53b5f33d9ef0fd1d04 +31be569d13f6dbd52bed9eff8e7eb514fb469daf3f9f31c7b8d31411692a72f8 +fc3907df11992b3aa76ca73c82710c4901b4eed793d4909a451f5f09f73db0e2 +0c32146422d4d5f83a4e2e92cbd9297944c8bb7205aa2adfc88dc6dcb4e82ff6 +07e4278885300463775ad999e2393ac0f67cd635d955f4ca5a9f57662c7e76a7 +26e7c4256827f0c03cec6855174fff2b78f1870ec2366a59a4e9983ce00941bf +17dc97b59104d05746ffcc1f7bbfd007fbb0eeb36d42f959c90382e49737352a +f582a0c76c1d86a1323af83fdfd653373a3c3b7460c839858f6fcc885f3d47d1 +902001ff877043ce9d13b1f8d1e819320f6374975e740aa77886063741e378c0 +ea28694a1bdcb89c1e2d5e8cb9fd5ab6d20be8cb0a2a74ee73d5f4c32b26c067 +0e7608a372b6e0cdc1819879ca3eb1870c22ee21b8d42780d9ca1489a4abaec2 +7dcc2fe096c55b528baf52e468bac2ee1db1c6e1609740828ad1f4faac82b9da +066b8472b15faaab3109dfbb85667a7def1794ff158cbd6fdaf9987567d8a6c6 +f86ce77b9aa3fed671f7c74a345812c978fead18ac776f7cc2957540a1720941 +5b9cc4bbd5d8aef5997110b41daf2c3d41adf834aa24862f052446ff8a1747f6 +5dadef8451aa72f9c367f21a98e1cb18b2010fc17637a673959e5790df9abb82 +9314ba4785b7bbb5e68cc6da2e021cc4345f4e6f5c6488d481947454148db9f7 +c289ce25764ab1d810268a6db157520ce871f1dff95396f03780bba8202d430b +f76046c04e1f0ef462afbf3650327876b5ce19d87ff9a6ec2e3c294976778c66 +9bf548ec241a295db3cf4139936b6127009f9807f48f09cd54e920474fc1ee65 +8dc69c4afb90f7a737df582b406c98801e77b02a02212a0d924ed58ead539b7d +18f4940a717b46ad908d521b7d07237aa25b4969239fc4968f5cd9827ab24272 +3d29ffec1926011161405f8a9a5c9e1bdc9a9152af563fbeb44d5e4ae05405bc +6a92b23e71cbb866366389fe0d91bcacd5b98a2ed4dcb9976ef9eb6c7cf06d9c +185ef69af37163d441b756f08060fa733b3ebff43160d0ccf5befefeeae06468 +0d18f7c38748d1cec437e170ef4bb6d85eead3105b2a354de80a6396c185caa9 +1d57966cc000bff2880e068d61f2ba670f7f9a2fad0ac5d1f205c1e1fa0a1d3c +110e184837018af730878a978ab3d08581e8b222307d00f86909c39c12d40bd6 +c7299dec0867f7417de60edd1897bd627767b29cea62593542c642f1089242d8 +53f2db5f45b7b21fa906851b2f28437933bd4229e32d093eda4d448641380da1 +9696d7a77fda761865d9a4a8ff48de5aa6550b2f80c7e7fef54f5dc709a9b2fc +120b03223ad9ae5d06298699ff21ea2f71bd34afb79799e67cd496a57e417f1d +87bcf2bb0c5f9fe9067af267e5740c26d6f3a256330d68f138c81883d7c07eb4 +cde5f6b5d82cbf5dd32e0c27c393cbb77cad6dbb058fb1c6653a5cd1a78f0577 +87c9dd5b1a5f83a13226571d38d367f2a4e369b4651a77789aa785f4a6561c92 +e0e82f217b2597d8a180ebe4547aa1500b0f814d309b5b1fe9dc53282c914407 +0fc79d82b5d5ae8bd272b022b35e66cd260c046d102eea1a1a4c0d376daa9b2f +e0dcb3a7254130d5787191998d88d4872834f331c75485d09799d467bfb62465 +5ea38fd84edff90fbcae880820fda0f2a3bd5cab972b4d22f1c649f970e05549 +f33e95a6d0af69653ae918872958bf100a04a7c61b8fe7433697a92b451ea444 +4670e38e33893e59ecb4a621ecd68e76308ec0eb2716fc7427ffd64fe309a635 +71c7b86839add49634114c0aeed57a2afb2a46afb303fed2ca4a7b3cce180595 +49bccef00e92339805dbe1b0c05ace5cd5a9c6d8931cdf62ce4f5406f8ceba6b +29b696b0e0ccbe8b9f9e1afdcec58064e3daa54676f493af1ebc8a2c26ccca62 +9418f0015d84e5931f620207d2c8b193113c8e6af5a0738f7085930e735227e3 +7bf703da80016e492cdffedd077be121b35093b031c35d369298f78134093147 +363062d031233a26726d549b16ccafe56eb0324ddeeb4ca8904da4fb9016fb5c +46b60e873074c2e0c78364bdbd05e0246fb44e77dffbed7fb94364a0ec0970d3 +29ac31712d356bdaaefa99865561391247a78c8ff19f6086b4d8cc464d0b3b41 +7fbe5f6b3e68de6ece2242224dba66940dd25a412c337e4c19c3305e4e1699e4 +53bfa096d66bae0ddf3a3f6d84cbc7478a00f2ff606f86913b768a18f5adafbc +8b18e653351cf8d251ecd0f0d3002862223e3488701c0a5647bfa63b55b5e162 +335533f701659833fed17ee4ef0281032344faf499ae8e33a25f97d5839fe077 +1ad9bfd9e2c1a863e0eb7ce72cc615f4ff19a8ebfe2f44aa6a636bf3197ec107 +37b3ab19482250c61d1a1bf7fc4f325056fc30554f92b88e6c8bc8ea8e5954dd +e367a169447091d9d01b79265cb1054ff7000df3b659208c6166cae1973f3559 +6f4f9645361ecdb125b87b6b9096b8c1894e5e1cbada10134d54ece4bc0a73d0 +7a93de3a3b943697cd3be33ddfa0696663524a7b6e246984620dd268ff65291d +e84855ec9192f88540c57826f6e6f25fbcb4c4e39f6b7fa2a3defd578c08c8ad +f66fe2cc07a3317b3697ac9e5ee19a9e225edd3d52323982d83d4cfa156eb858 +681dca6e77ad60dd946c8a1be74a8bb83fedf6dab14f5a2a5d1cb08ad95f2a93 +c16c39cf8672fc59bf40400920265c7e06ed02b2a788aa23425b45dba3b35a53 +098d3ca23c0bb5a9e16ffd99cb4846121c6f5656bcb8d34d29e3eb078bb39fce +be3b98fd375ba941c515c88cca36f7c55d325d3ff0932244f9c8359831981a10 +67c57e4b0ca5e2db14a9c2e24b10fddf7e037d4cddabae2e5b0443c3387eece2 +04af27ae3befdda5e88267ddcd3eebd90560de14c8f2817b6e6055e53e40b35b +93d64234e4e749cc875d9cfd48032e1059f2d2ea0e7861f3f525c81fe1863640 +c851079cd35118f98d53ecf08b86add9fa65016797fb13f20fa4f9fa0c5644e2 +86e4f6427a278a0715ad34c88b103c6fb8c09d6500886c93f399d56dc0444a53 +f64649f39e423e9b8c5bd7e8711a4455b9bc82282ac372524bcab6140921f9b7 +10f75c662901c3ae885424b03f12a4c9f589ac693c7df6e188913b64a7b1f70f +0c315dbef339b801d0f228c5d82d08c00a9c9b1d825559b47b00e98e58204a11 +257dfd1e7cfb5db205b0dc4c3211374459a58a3d23713068bff43c8b73fa51ce +bf259e69f45b37f30869f44bf3898ef27d9f3b4710b28579538ead0240f72be6 +15eeef499d8d2f0a7aa72a6fffc68a0947dafa98f52e94aa14da157cc2c71aed +17f3c2661ed84e058555d0354770c155c54a03186b815440cf8c7e37f9117e94 +67a5d50281ecea2188537254696c4b50c3aedbd3eba04b543dac970a7193bc79 +bc707725c13b8a747ad5df929cc8365da27c028745fcc82dde3b297258ee413c +d84d17166ae6dad65489dc8d98a4c760c08dd0de05754b408a39434b17773f32 +a3519b27d51781c807a352880f5d667dc8cbe54f2132200db7971b0be03eb42f +aea467cc7a1bdef783ce5d710772da9b71db45c7ba4f3c22ae9a9bdf1f26c29d +811037a170868a8f6644b0092e7cc538fd5c13568ca262ba0fe244f7307727d9 +318a281f38b607c172e64134edb76d6535abbeb9689840a297accf5c15150f2b +29e8cfee85d099297d0c6d50720d686cdd849751966c88e3aa8998c0c5c17665 +69029750afce844147abc710780af405d2a4163d272186ac4d486fc32c1770c8 +37a0656b6a0563e5b38a080f614ae9d49bafb92c96e2bfd140a88c4989952edf +2c835503abd01565e2cafa4373b790376483d4762a99adabdfa0d7a7eaf9da29 +530f626e330c8cc65113b1b7ddf5b01249b9651ce4c47111a5c6590755ff0744 +5ea2a3afa851de664cae6706bf0b640f80ec4a178e518bf6b41c793995934999 +0ccc3cb8f1864b6f20b1160c9ea3f1f8e658e88c81fcb7a28280fb37acfc06d4 +5d5c93509db13e88349ccb959dd1f23c6d5a574b9489fefbca90f8c24982bd5f +8fcc0ee7e13ec573153b51a760f47811a50c1b1e981ed0007e952d15de9fc00a +64966a945ab7cbe49e6bf90062cd8f6fd438428b14612085dd18ecd59924242e +e5c9038abee84cd94acba6c96e805305bacde3a0390a456e19dacc83f8767c5e +a9fef61dc22613e3048cac14ed6a75fa28c06d348e240019aa36faae66d21853 +b43a4c05372b0a958d3d26cd22186f95057ee646602ba13e1974758307085b23 +6ff8b0f2194a00258a76b18dfda0d5049bc9780289dd54194800554a086b80ea +65d97b1d6d03ef0ad22356fd31c90485c34a1cd00837c419c7295b712a9a9258 +b7f0452165473af73b7e21cef53ce54be278298053937f89d0d3bc15657fcc9f +3246261de1a1443c26cca0bf28d291f451d3ce279eec77ab32d5463f7f5ccc69 +5f6fc60739a5ff55dee8232b2b868fbf60a2137d8371422c1fd08fc21468bb4e +6addec19fb2def9aed1599fedacc1e5a38670011bd19ca8415af3d94010a50ac +69e8d2f36cbad97548090d37e081824c5bff928e0a767e0947c8c4f00388e4a9 +5e992a705ca0e7037000e4c191a898b40a74808db0c15c9669d2009ea5c7a391 +dec4f2f4685dfc63fd94703f948d758f11efdd2e0a634e2d4274da9bd84ccea5 +8fb6f41e617ba30fa2114deb639b7b579e2ba187bec24145664921599b6b0559 +d742b3ddaaa4f91ef05cd15db7cb7fa2400f66fd9db3d207cc5728d65b866295 +10b2b6a1cd2a33424a9006a26e8bfa8b3571a59e5cee066cc10bf301269621d7 +4f1c492a02220c551560eab04213b3e8be62fbe2d7af013072ef82f1dbba5b3c +be1974b35ad6e92e6d15c2609c17706422beb22f12d3c4c0a748426dbe65cea3 +a0ff0b208a66460ce8d359b09333e208ef39fc7fefa453cdcb028b195e70c577 +260962e2e8900a286e628bc5b0eac0328c2c6f64f0229ad0fc7872f48fed6d1b +bc490da985c19f622bc07b388a4e70e79bbe40e75d928670eecf2911075dcd05 +6f0010a492dba50abc966411d49f39515b27aa1e16e7b6104b16c6b52b428ab4 +9a6e98ecdb65aca5377819de9d99db481a2d0ccb90a1663cfa6eb6456d101609 +a1958aee3c8f2fa4396038dc4aec5dfd472273900e50bcf3cf5e5711055b90a9 +dd6845b57fcb0d9c6cae3ed0180c7a4c554a1b05298518f4d7de4107993f2715 +4b90a115a8d1a3f074a4f34b67ca5d733d59630a5b0ed10fd6459f4f9e3d17e5 +352ef13aed05ed7a17a44068884977c653628d8bb5d185f5783d041db9644d0d +69bff8433e2d00c9f6a8837a414270c66d0249e414ce0e56d5051ed7aff463c0 +5d6cd8ea3b09e1a3fa4c1a866ef3238fda1b43606f29cffafd8f91ae673bcc38 +804f91178c0d596e109b65d5a462a103a4a29d995567ec16f0263a03bac4132d +e2573eab9dc7349b6b1fdce50dc21125e38d17a3f6ef66b3212de5e0b74c3dd3 +7541e341be122bbedb6ebc2db96dd991f71011aa719c1784e24479deb65f5d05 +3bc429785d4aad99de7b5b5c03e5ce4443dbc7bf483ef1be808c8e508e6000f5 +1dd9d907b07db3d9f6566e5023a8ab0eed23857b30a6ffda86dd1aa3b98eb1b7 +bca8ce298ec3cbe5049272ea33fdca7a8a5e701e27e07cb3da0d395d258a1dbb +8714d83f3ccbbdaa9fe08900475ea6ec759f425bde968014214728d08ddd7358 +1408d3974773001d9bf782dc9cbb5209a5d3027aca7bc277b5dde20b991e8535 +1889d8d498d5e8ad712cd499727f61aa3953be4eb62133bcc578381ba3acddbd +bbd5de324e4195cdc594baa48782031b9df8aad86ebd62218b119123e213615c +cd6894853bfd77d26740d044f58e602733ee307442ab929222edb68527550414 +9ca05eced3d317f03715b8799ad1ef2ede2e3e0fb5aaa71931e70c33f7557128 +cdf1022264f9c9b5dd2d9b548a76ec92ecf9ec2029158b376c89a27c4f738009 +b555618b66865c2f98af0733208d65b1822c734d3a5a2a0d359a32dd566648db +eee996fc085b7025b47b0f8f4df03a5f9a3168b722351088a1eadecb90456a05 +ba74d908d4804034a3b9a915cff7a3b2d467f9a6adbf12c2995b75c03db7b23e +b224cdd2b64a0ea942ee4c07af8eea6587a8d3781ad7a6528d821bfd7028a2fc +5478b6460aa696ee868319dec5e1bcaea69f007b1dc80c47701adacf722b5458 +60158e090398d30a9f049adf3274a492fe891fb7b2bf76b78bad2fb05bf43bf6 +b14095b00eadf94491eb50d75fcdd95025dd329127e4746c2b433cd4793deffe +5015755a330b821f93f96ab10b508e71363ddb55cf4c6f9092201715cf26d859 +784c49b636c639caf84e044dbe3c14bf6d64e9c259af1f24ec73c9d30fc0fac3 +1f9eaf2ca8f49d0d5c18e6a12dc8acdb9f3d8ed49f607258c94967989cc31a21 +5020a9fc65815c230e8da7751552a895b0064c2a1cff3f18f9ceb908540a92a1 +06c7d46c596ecda2e25d331ab85f534313b214ed307dea03d4113ed6fa2ef1e1 +db3adb7861fa48ced61f10ab89faeb82caceda7fb1e9ca240e38611acb421be1 +119683647413c0c063c1468f1376a099f08351bffdfabdfce352ca87c125c021 +2301c6793146014d87d22727aa014d56c375945f7539863eff029d046197d65c +6a7474feaf44f7c07b0ba500752ba29f5f165d4abef0ec13c625ecf722fc9ee4 +6958a291ca5b1f385c6a5c6ed4fb0036cfa6fbfc46f1622a59f019983d1a2f2b +6662970ba2ffa63322b5bac4d58adac06e2ac789e0deda106a28a860e87ccf66 +39ed41fd29be8e218733d486633b763d0c226c18f264a632767957662400393f +4ccbfeec54acd358dbd43e71fd59096150e9db5a2aa6b01bdf8549dc0c9170a0 +05a2e18275d6d74b6815f0205a6990862a083edf44b4052f83ead884c2d891a0 +698a2cdda09d43d67fef477eb0181246a8ea49d8407ca5e24691dc83c45bafb4 +4e555c33e59bb6a17f2bc3501217502c545082e1de1e43a3fbea39ef67644fec +e36492edde144cd3aab6778cc0a4be0fb15bb46f95e86f7b4de290e66cc69f66 +5b20522987d2d0ed0ace9e250ec6c0c4793a2eab0f8f9a00d76d624cfed7399e +d1e766b6c2dac1c46c6a8c3f291ffc03eb71dc220eba0573225e74c9df93e3c3 +d31f4bf8b79a0eae363eebc0d4547d61d0d54c42dd66fabc8befeead4fdc6bb2 +0586a0a47f373849b0b6ddf42a21c6be6e1c9ddb2f78c71a334f855173f681d7 +253a9084447b363872c750476365ac690bb27460e4bbf22ecf0e4d2481bf3b0b +afa54d4295efa2d38cc6490324b12dc991060dede02e8e29156ffe3f9116067f +0478f9b5928e44075e847e0864e06191c88f6ef0408124499b970c5c5acc28f0 +6f15eb4fcda631fbbeb199ec847fed052710c5d3e1f1598f7a279110dfb67e87 +8a0caa27ab4efcc03a6953e28aa9d660999624cb29ab8904942b5df81d67a462 +615111d743ca174075f3cfa6d239741a4e6bddf182de776addf3810047c24c44 +e453a67241e96bb3ed0ca17cd928b8f67585a228176d85ef4b7fc0374123987d +2bc1a0fcb9c5a5be1749e684270f9b77c5cf4ae8d360c14ca596efe21302d343 +3f7881e8a25a88ca999a9f31a2467fb739511a42913b98d56671c74683f2b8de +6cb20b8b9fb3d1b51b9a9a43b8afcee655a3f7217f5a952093f7a7ad84593aab +fe0767f6879cc2ec7e9ab5b59bd82f48d06c9adc0fa218bcf9e1f63e9000eedf +ed014a091dc952e3e0f07eb8e7dd1dfe0cc0e6af9072a53fc95199f9233a66f2 +d04c65bad02d00c3c5ba1f5af4d33a94e8eb5ef8b21ed1637b1c3e3522cff141 +77cbf28628d468249a154e900a9deac70f0be7b7d7efe43b9243eeeea068b03d +0122feac859438fe96eba107d3ebaa99817816652b53944df5bde7b78eae04dc +d2a179fa5c3002457ccce48def5739cd02a8bebc5d65a626bb50e4857a592d46 +52d7696129b176e5ca95c9c3491858d341deb70a0e2d57b811eaef78e52ca362 +9e9dee7e39259100ea60488aabcc05ae2c6f751f41bcb2c690161e8813fb4e7f +d734f2c6fdb37ceee6f7bcbc29b2819e904e61f892fbaee59c4581e2f171f9f3 +60452fa11a872267d49f62df732dee74c8074370bb37d33d939e4a933758487b +280b1d83cb23df036ea8304a2531465a647f81e63dde4734c49a51ad26401384 +0793737f31f69413e5f5152e30309701ea8e96357cbc6bd39053135647519300 +70836262da78a79f8ef1d9a17458e02d8040629b6dc7a7dc114d05a4bb01f90e +01480ca86f291747c4c1b226b2ea6c15a38b6d7078f2f51b264eb125891db1bf +a669525940531976089a9a63fda1c89fbbcf9e5a8ef413f837bb541b1fd6f825 +b7db4d1c1f3fa3eef70eb4df0e962393060034581ae4609479013a72d16803fc +a455f9722c2bba278a1ba5bcf1b8d1a5139f5ae71ff532481524acef4fdee7ef +14d343a1f0e3fe847d9c9e5878bf1e5530820de3e6d438e1e66f20baec033b4f +92d055105ed98345bde4fbb5612dc76b7f51cb9d66150d153a10427c027ee838 +38faa910e77fcd45a41bdc6081b0826206b56c08232984a85a5251a8a8362cc0 +c4b4f4dce651519c55777e6ca349bc060f9523c421b264d1b30895da4abfc4ab +9ecc4fe0b4a1ca8310f453de21a1e73e8bb587ebefa3f4555b5a332499cb2f1f +49b7d122ed4f470711f436d05695fc1f275b93ceade6d04fb2108517d670949a +4bdba8b6cddb62b1c9cc92ed63a8890d1e287e0051e7c8bc47b4a7fec9c7c33b +f668abf07c2ce4e080c8c4e9503b61940db11c5f17c54d09b8b8c5ce3985b422 +1ed39a00c39e87166c7ba0ef441d352259022b609513a2b134e13f48065c7acb +4b101230ba98195e8b49d570347fb95443269e9fcf9fd03c7aba76e7a1b13e18 +7d344d41907fcbdf19f616daa51df3b1b1be673f95c4ef1a271a908548cffd0c +5f70521eec3119ca5588b4b7e04954df14b0589f1448eaa347734e92128f4d51 +28243b9e8d1d64fa12f0c89c604ef7ec03587ba0858739ff07b07dda99390b74 +a1ff879e4219a459c6ecca54896449c3bdf93582f0890bdd0bd6cf8d5168053b +9a33cb7746f62a84af705b6135ad2bf04803e34abb34185acfde007901cfaa43 +64c992303e28a71bdda153858d252d7fd2da0d8dc618fda68f3d26c03641019d +7dd2050beecbf38dd29039ef1923fdb29576b7e3f10671d1cfd93a2e5dbff204 +effcdf0035eea6912163e8a3d995ef07170e0d74f88762a3cdd080d6cb7cbb60 +3adf3cf1e8079a2642cf23f40277b1d0fa687adc1ce2e22ca28d2715d58cf727 +a9bc686734ec03602ac69fe7ee9c08a1a38ce9871e9038cc624c1e423f34539e +4c1dd622e6a2d30e06e2095e30b6c545dfba323e78413ac65afc1be958369d64 +f21405f98fe5b5e58e9ee85dac85dc318349e91e64c839e9c94ce019c32c6cb8 +5ed016f2e6069a4b374e37155400beb75dc3fbdfa829980698b9d725996db955 +e4702b4ab9c406991b30154e150ad128f2bcc1d6aac5383acd6a9ce148ef92c8 +70931f701e867f254c7c82aa34f8d55b28f546e9b7f80437e5a258f22d55ff60 +916a502103299649fa9b14e5dcb9d2beea401e2a3a12bec2315fd88f23fa8a9d +f60511057ad5ab55a602688c5d9b215355bd24cfa4dcbc9959d1facadd693a32 +0bd8737235896ff92faef4135e208e0b52fee9ff7f101a4957c241cb836ef31a +4368603d687ebc95ed844fce7c18983c888ef7309fa051593913ad1d767e142a +d6e6993375d0abce782bd9a6ce804fbf4634a65c063344c1d8469684c09a9d41 +d64736dd3c7dac43b546866d7182336b6a73a4335b8696a43116f9d4a83518ff +1ef7be60d5a243461737ccdf00093ebc76627a1e24d3ac2a60cc8eb39b7ddd3c +205d80bfdc89dc0571abc93def1998bf1c9c4128be86b52c362446f2ac2695d8 +8ad1626b27d6110b8d130fc7189266c5bb05f193e826a98e86374c57ee9af55a +2ebcccf8497a068d6f60769d2c6a22bfb9685fe12e239b4b7c70f13d3ceb0dd5 +9eb53809883cffd0d5ec27e0b66b7a41e642ec1d989ce0ced2f386ee381ea1ef +0c659556abc7dac2d458f816f04e0fcceec190d561c0683f4d579807554ef59d +71762374f6bde146e18ed9944e053f99688ec4d84cb8ed2cff8f7aa3a9b624bc +0bfcb231c35f93dff1382e9568db2499df08dd1f8f8b49ebadbbc2df3943d11f +3a18992b25c7562a7f1faf0e6e653a678942ef689200eaada357e28f2610f9d2 +0f5fa45e81142d264e1e1a54a327ad4ed915749e9f27dd8a36af0b61c4440c6d +9703e5d375f449d352148cfa26c266ef7afb0c3b598e6458d82780dc8d262fb4 +57a136e4107749b0efce94a6ac6c9d49d725d3ae79a217a38b238e4b766edaee +64d0d9dd1e571f16ba46307838319adf6a0d1e7495cc545b7f1ea4911c21c8fc +b88075446a45baa28a9ef33e0b3f3b8db25c57c3a85e34ab0c0fb1b18e7be01b +cc2629fdc69e64825a845fdd7bae1cca2666dcd8a7f846521f4eaa2ab5eb1b51 +af7002dccab0a9a7389c2d3129175d8ce87cc4d73c6d46fcbc10018ea1538fae +45d1b02efd79b908cea0b20d186dfbd0ab05ae06084c5b338d1f60111f5dcdc9 +e2818773fe82b7e0a621678987b93e37946bb24b181a4fb4cba56e3ef726c158 +b0e878ab6469ea8fc0de95a17742141c1ac2b765be853343cf3c935be5b14b37 +203788f32c418aa6206e80edc58a9af1b9547a5bbbce6cc95b56bca4994b32e7 +6bb19593d6da2bb4db58c0b0d1bd0f94149aad4b85a30131f56931a145a65f1c +ccab13dd4b4f3f233d6eab4daf44f42b89da53d2df61dd7e1fa0575f27504b1b +74f843847454fca0e5264fc642a28541d6f1d1caedf7db860ed45d9965121b53 +5611a3fdc881cd1366ebdfb490085ccf11f94905ede6442391bcd93b1d44bcd4 +a7b2f17c7b0ab3bf04d07787451e43b3f25d5e864fc6abbcee5297a293c02937 +b374d8578b71b911556f9c0e71dee07042bb46706f5523f72dda2156e364dce9 +644756987a5dac995c0c86c4df48c1cca629126a0b67b59d50c4e34635c04cdd +165d5607a353568ead3949838d4e5ca7a8e7a9f88540508a122ecd371a77cddb +588e6392fc187c1a210dc63e42491795c21f9f50421bcbb5f2b58fe1db5be2e9 +bb7938f70f3f12aabdb6cd26559d18fd1e7e6757c5470fc2dc7f8fcc6564fe95 +c2164fac044b3243c72f3fd8ca843f111df1a51672447e49070f6ee4c3adc8e2 +5754e8fac50535bd2b164987dc02452a9de63973203ede40ebdc6d0cee93160c +05aa3aca73dc14bb9b8b01b94e8dbace5e937e7f0f09834f266d71d71bc4e06e +885356033cee9a7f346c8609fabffebe003a54704a4035abd55b26fe6819805a +cd33b6425a3b61dd8f3db2b7b9551318d8048b24ffa4b40861614765716d5e67 +a9b1799a48b69864e90476f693cbd8ec106c20e94502ea2ee452c200dfbf45ad +273ced950370c316ecac58f3dd67b523261a30fbcef78d51d427d414619e812e +72afbdfe5946e0e5ff7029808e6fbeb849fbd716ca435bcecfaedfffb8a2c48d +3bf406a132e7a3fc2a9f52c28763e7575bbc2f22f4029bd90c19d9c816205b48 +2b03f88fa36332d72e5f0df82134760d26ffbc3c5867556120f26d10bf19a25f +b52baf6a8f98f0a6322b2735e9c7cf5e152d0b7b01d97c5ee45438a287ff2172 +b164791b1b60b29e88f3b4eb5fcaf195f5d53910c8f00517a82c650621a83ea9 +94cc63f4788c98d56676ae219fef3e446356fba4b49a24c3e0a8c7413c8ac1be +4d0a063d6dee027e9fc4ca54943cefbc760615b6ab16091114003b158b019e10 +5f8c488dba09b70db0ab77ea949f889c1498faf8883d63c36caaf1d3a198e2c7 +6a2c97a0a14e5c3dcfb7034ad7357b3be8cbf95d93131d778758c29887f5cf4b +493044e28e29903a3763fd76b3d69aeb4ae6f95b160fd9519af1a8c90aeb2977 +6f438f1313feab076ccd14323a237ba5bf76faeb29d0ecef23adb8cbefcd6df7 +6741644d51076cf66f92b52d852c8994b9c763dd08099897b11adcf00e9dfcfe +fb6c876b4f076f7923fc3975af92e9606475c78b98d53f60f656b5ff23fc4b60 +32de05f8077319f6b35e97c43dfa17b4de3cf2a3cc799f8bce3aa8c9d1b83a4a +bc42a89abd121d46c1a0235aa761af492e2e2136221ac34039136c291e877912 +d3946118d5afb7f44a7bc0abb2b066606c7d4cb5fc0c8133a84721d8cc7ecafb +fb6b15b6ad5adac50a7c3a3b8beaf70054601140cb8cc08b6372ff8fafb5bd0d +f04364633edc41fa1c4522402313b35550fd3515b9feb6a17c4a5b197e694a07 +477cbd4a46999edf0f0a500ee4c701f55f00d5751c65d08a621cb3f41c298c6e +4ddfe05703b6ec04c25de3e0e7ad4f11dc918e011c5fbb236e5bef784b2ffeb8 +d79be24f9c1c394d5bb839142c1193bb7f224acd259d1a90d2d237addfcec05e +fa0c387d984ce73e67169dc36eebcf137fc9829e4bbddbcbd5f61c2f3155b72e +8f427a15b099c2561ce8b9871feb7c1cfcc24a639e0f2d051ecfab89797d1b1c +0bbb7b374df1d3df75e16998dd4198358e2829f7bd40f50a449b968813949115 +db90a7c403a2832454be362c71875df7476c7651f3414c0d4f497ad1b67b2952 +d41641c740028167677c48374b3151a9021fd3b9c21ca8a8efbd86b11d998813 +f01c3fcc990c60fba08f67d3ab4a302b62ec0f04b9063e01a8c6178f3806935f +638c972686fef41baa1cf372b735fb19bc389af9d7ddbc7d31acb7e915d4b418 +d7a5ab181ce663314278cf8881ac4430ebd3ee131a7a2aade1de7731da96303d +ff212e8fa851cefeafa4969d11b0c4a74e23654821ba2458961cc2b1361bad81 +a8fcbb99475b003c29f738ef40e4f9b1d89cadcef391db7cd117be434d085636 +3af49df9d46a0cfbff5af6e5e4d192a4d13050f5ce3e30471e489d57330853d2 +728007ffe1b7ce41375dbc823b84812a6794b58e38de43b2e22d0d059db64238 +5d32f79fe0d2b8482f61a0e1c2155dd69d2dbd2636bc0f07efb9f6f13c4e61ad +16bc525b35930de9dd5ef4e5e91146acc78987a2e9578475522b3c87d2f5c5ec +ac8e55de0399eb852551148047019fa08fcae9bb7831454ee0d5c36e3744d7a3 +4eed0cb0cc8e82810a673c1098986b7d3ca984597f37f695df8aa168a70d0ae9 +6f526f09ec75fd2c0d2fa0055c519459adc3e7c61816d57ca3bd36f78a06dbe7 +dc22505a4ca8af1b284d887b12b7f161fe27b6f1ed063fb4f7a37b5af0d1231e +9ed802879896ecfad70260c1065ae88e593c75b6d0ce546440c482f5503467c8 +54758fdc1c95cdcb7d5663a0e1ac98d0a518894aa3c6f4e4adeaa8ac81d8952d +585c2b70d5ad861b13f6b48616332c765d1fdd8a97e8b15d38097afa88cd7bb6 +b7c82dc031da0e5e919b3a8cce89da12b8548a7c45fe1ac418eeb8b2318c9516 +59a30e56f4f166a6fcf2473c213449f46cfb906df3ff8ac703020e8cbc71bf21 +6518a3c76265e644f62be4b2c17ce1c8fee549fd14d1cb94b646ecb1d14cfdb5 +cc422d8dae5a86550d4862acca62644fece36492edde670bc9ce80b0ffdaeff6 +82bde3dbf0c403b882882af7572a42b4f49f6bdb5a8aef91159546d90238ec37 +0ba7e2b0cf8bc7505d8a2936e88836d097f48d57aff9b04d08e9fe8f3f35d046 +47d6ae41ab09af7bc1335369407a9558436be878be6e8b7f4cf88cf09a6792af +911ffc61653653d1c6c8da705377941c7d4c1a6cfa6f47c2984436ef697052f8 +8dc07c91414283515bec6bf581c046306800b755c301e5c5e2509c8717d7a450 +1666d78c7a63c74279dd218840526d5c64da4cd356d24ee7382a471e511aa7fb +94dcc208f1d79e5b878bb110d5df78d7a25facd252ba729213bc5b60093c115f +61d72b91eba38d54600893f12f41c59b26752d3efec1336d8a1bdc0e9a33b9c9 +cfb1946d4a60836b1dddddcab7c18a1db24bffe3df0aafce0c145f5c27b8bfef +908fbff18d2f398b914a5803d2337b95bc7d0520bcd60d3730189af04c8417d6 +e12c20626580881bcbf4c7f6a6a5f43e7792de58f7ada1d8784f6a7b4e6f96ce +73c7629a1b3f78b821629b8027e85eb5241d8723f1632145263b0457985be78a +4709401ecb03f96444d94f3369b30b41ae1a16a7671d2a6ab6ecbdad3753fcbb +0edb46887cca933f5909694344f7282cc7bfeff1c3e19e7668db02447082f8d1 +72111d8526c17a4458326bccf6aac24088a3f6dcdc42d5c5587e05ddc8ccfd07 +38e7f9185281192a15d248f7a7c7f013508024e4f2386df48f076b2674e5a720 +c8e5d5db8b7ea56c349a963ed8441501c23b7334c245069978b1d13aae19581a +c8d6bd5bfd27b3083652678c15ea96ac0a901508d2dd0d4d89a772c740ac408b +b9b61c28d5fd3f46463888a3ff49ee43721a0d03907f2d20f9c953c6c1db8bd4 +32afa377913b374443bd560f68d11611b017c876d7cd1a2bed5789a0e5bb2756 +60a68957b69249f0fa1822e3deb8c8c879287fb81344aa625a772093c6ba1517 +11232715b0d53725ab50343c5b1917e2d2575340d003db8adf03b3835475f098 +25e541e87a326369ac59d4b9a71b2d5485f01cfd40313d14492e828a47fef188 +57aad991e624ab1d3d8d696a55d34e3a3689dfb64c5c33fed34fb0c8293da01c +83c58943509507870979b2c51f74ef700bc52509da2802c0f0c1f4516807c3dc +fdcb32c4b5ed6a87231e58f5896c85687edc3e7872206b3c19be99a863a40ff1 +5776e396918ae1ddae9acd9a3c654133aa17294a9e57ba5287db3c71dc1c0d12 +d9d6a6b85f5d1cb487b51e8c1329204815962b6937a22375d5db47c4bde26ed9 +3ea18c82839f55a28f62a508958bc7fdffdfabad5757e5a4e891efdfe9421686 +7dfd4e36a3a394fc1451e38907b58d16fb110d8b18e99945c9d1a215f6c906dc +5c2a8b98ba49c225c437068ed7120c3e591f754bbeb880fa51868ebe4735b7d5 +7c1107652525b3b844183f4cf351ba35d655bd5e66527cdc311a4f0db5412956 +9dabd87a4e45081b4cf219a75432c6c628b596afd87b39b68f600611b3ab3d83 +61b8b056e3aa2b403f6550b72019be02a27b7cd023c45f72ebafca0315f4fea9 +d490254d0adfd8702b6ee29af2e47be8350196e470d622bfd3febf223d7358a6 +a00f042f7d168507d7e69adaca8cdd219cca5ac0a1d28ec684467d9a16152c9c +a31478464b5a35cbb18f064af9de5a5044ae920b9897d6eda7bdad45a2ce8196 +d918a6c98eafdb088df5e11e3eca1b860fee77e4a7a68e21edf484532e24246f +345bc0136909dcdeb2d637b215f1087a3b14a74ce614e00dd9b52795f32dc03d +f2b5fe1c2b19d76b3ec5bb517b0623faa536c0752c796b2179ca76a40c0171fa +99c78e06bf1151c9384a0ecf7e384bc11248d954b21c9de2bf6df4229df208fe +a16848c893f1f25b80020ea691d92d47d82504eebbab22c4fabb9aa29ebc2aab +197d861b9a7949fd86f201a90ee2a453bfa2f49be46e87935cf365b21f946b88 +a3e8647fb2330928c1e5fde0a807c23fcb55b4e2008d5e3add8df3a74e5239b7 +aaec108ea92033cc581aebcf23116ae19f25b8d31eba90ce20388fe73b79cc93 +3fdd183ae909e3122384f79d2fe53cc07cea9151bb3ec076de154e672b580ae3 +42763452c9fd521e7be2ebd9f2a410e989ff4c5beb38346e37d6bc91108939f4 +3edba27cc6d69a60eca3cb41ddec11536719e3cadbfbbbfc877d39021aaaf578 +7b986a01db572a62b492c38466110e1f484fabf38054d0fd6acecc367fcda35c +f928707a3e15a0cbd3f0a6d555e1625582dcf088b8fa6859b01357a3fa460e7e +5cc1a3330318b3fada86b2c55f904d77675ef57f137e8d3852e1cf505029dd33 +153640e04fec2575888cae0258b22f309c93e9042d567ba4a0ffc57cb9e9caa5 +14ecba866518648f968390586f1cb0ac986ddddcdaab912a09c397d12a9973dd +c5abc02b82c7b3c1caac0f1da96154677b7112bfdd1c349dfdb5c4bce5d7146c +8475e3cf71ab9034abacae8182826bcc8836a6c0cbef7b64b67f874a11535956 +2c9a996748958e7238777f23511b0f2c18848599beb4979e22b98eb5d579611c +86d917d84c50b23d55e5975a2cc934a1265c0731c9510c003930cd829e40a4b5 +7690c4b63595f1735d8c2ea162db038f58bf18f3155d0d6c5982d43e0bbcb187 +2eff929a6e4788611c2527175460fc9a8a8bc2b2b3acbeebd6c53779a1156257 +0f53eee2be859bdd702d4e983b2877f1f3ae6e4893cab50d607c42cc9dbd13fa +64f20956338528553e7f0fd6db1fe98257c7acece718e79e6c3ea3588fac6ef5 +a280f937f89e570796220fc2b939832fbb6f34a9cff554269121ef6aa6c3b331 +4f2e22f5e597a4ff253fca5f757fe152e4fb5e6019766336e6288c352042fc2b +e780c7e555f03b991bc44a7456762fd05c9c2e997c626379d447dc056d66332f +fc2a137fc9c2dfa584b127429914c40bc3a8a0ea5e7d6cd3a86844cb8f1ed4b7 +63af17e80a0b808dcc5c70b38c1378c9cbf77601879d0019a8b2ad2d458c17da +932639d69cef730623acd1243b062ccddb62116655812d396686ddc1c8938edb +bafbfe0ccd33221070a60888c8397ca3924e55c5820f4eb29ff35bc501347a74 +6e3704fd2051a50c4c4c1c09c74c9e6ceecad42d37ddbc410485f90a0fea0752 +1d6508208d4d86ae19e2446d21902441b44739849abcbb2adcfa2fb353e6838a +0444fc13839ca5edad7b5638d76537257187eb5dc89a1f412c35ee4d8bc661bc +e25d809bf5e3b082051090b20b6b83225581b547421138abe92a2c3c554651c2 +604f7e79b48a1fe0e630a4caf13fc15fca552dc094be6f359736a68fb4791db2 +9b16edb6e06d3ddfd451b111a06bce53b70b7ef5858905663629e780d0a79fb8 +6c239fd3da4d2fc79a2b7619a3612490f147a44fb5a9a5a8826c7e6f70d9ac90 +41e33c39108c8b963f692c8719187246e9d34f34d5d6053ef759da18ee8251b4 +df0bbca723f7ad791c3dfb0f1db37b01cddda2ce698b3bf679d2cc1ce8685ce0 +c872c2f89c6a6897f8c203ed61aad3f8cc5e0371710f5c4c86343ac388770c56 +f7d1c14b15ca0434218f86befc24136ec73cca2ab768faa087ef70b3d5fb7f20 +0a68082ff38e522eab0ac5c74309807eb4597d8ede958790885aa18c792e6953 +74dd77595a94f74fb896587c5caf286f43223bbfdda9e89be778dffabde05823 +909db8ed5b5310ade1e80da1ef16805f5f8aa900be2ae91c54aa61d40a0cbf91 +4dcec7a0dfb650d6323855a5eb0adf481a2189f7b2736106c56e30a50c27578b +b7b21db20bf5496e50df4e50c834624fc1275dc25375db000aed74ec1a1a6445 +4f041db66cba8a7c7455b4b55eef149414ee08bfad9bab1693f197efd3bd22fc +8368d39b706cc7982ce7179cb85b9eb073fade8bacbb9af70f7101eb114a773b +f5fb3b4231bb9f5e439bffc1464f50ee94b499b3d84d879fac0012433cd406bf +b7420354879ea2220ef28c07df24dcb079fd0dc2a63f9cc9c709dd122b658f95 +e5211c61795a791544e9c21ffdab0acf64bd60644146153f02822f1518d0f6c7 +e3ca9a4096ff4c424516835c7f6607dafe23c0b70c8f8990eff7b8ae724a07b7 +13297d9d7c83d87a6b19eb98c48c6e9422dada99113c8540f48c1ca03058f052 +712c1a46f17a23b45135c443c1128563fd6a66fe9e3c07ba27511b4cf0ff68d7 +792f6fb1589fd22a2cf5051ed798976fb83d3b23b6981f169b44a3e3cc47af92 +9ba4716c51ef979a3ff7e4266899a457a875c0bb296ebeb8384586aa380f9eef +9d52ef6c952e848923ab3f564e776dce58f21b6ded7960f326f4e925ab2cbdfa +863e9c79453e338d7d61b387c193a862fa9e6c456b7652a791a91b0bf01a799d +cbade03850b816ea002185f7740c8e5b7c32b003ff7a8c78911be015f2996455 +586fba449ae8f9b27940cc97d25d77d60b0aa847f586dc6672e0c0f6d2cb636b +51aa401ba97d84da2774cb84912e47c9dade61de470b61994b83b75207af9abe +5e10e5e8cfa8fdb8131bbc68a63886e7fdeed53ad867b6d3284f4e957322274a +3b7b1846d860c446b0c5bbcc3c6241a56d2de295173c3d64103955b1bb8716ff +c0dc492fd348cdd46707637eba91fa455d53b9f528d2245682997bb43cbcbc5e +8ea3e9e2a2bd19202f67d7c16a42c602efe8254c3b2fe935c1f5bdd67d21d270 +35814763f60ab26fc8966849352d3fbdb628486cf74c5224f5d8965c5932f80e +0d8be4b9716e5747ebd84bf452312042fe88d07e57a42a8049fff714e690ae0f +5f7d54fde33112198294c3c6f546b09c76ecb3c414a5ed2a2f93e94c895a6010 +e6bcd4e883d2c7d7e826c14c9ee12f474948664138963a96f83ba7906736e893 +118be766df46767c4464623be7c3697be8fbfd662ef959e03b688d73d2a2d1f7 +4e9982faf31d21830d338bd8bcd83ac92127f9d48bd2660432e97bb6887e869a +9e1871fa2c1eb361bf3916f571d9c7ff2b864658ac152431b931ec6c4f1d48f0 +665a90054febb824b428c2a997b404813e861723fb6c9e2c4bfcd04e8a4d2b26 +2cdce120e24912d32fc6cdd7d7235ac5f3d7840eaff18bd818b715afc03eba17 +7a8c3c3066e95c8840f291521c8429841e8b39d7dec80c3eb56b49a21a02ac90 +0e7a2b67e67732298f4e324825f7c823b7611fad2a8b7eb6bc44c3dc0705b4d2 +58fc26fab5d9c20a786188f593d010a843a9b6fd47f5a71cfd728c48279abd0e +0a26dedb870faa7e19fffb970bcbfc6a61a487a19c56bc4e8d2e3ef093df0b55 +5a928a3b8f8f26c3e8cd4e1fbdb913d3235dabe2fa3b66c832bc9533c12fe5a5 +d6a004efde58f949bfc8bd48c44f8dc5f55d94ce79aa7d71ad14a4f7517ad7c1 +f17cab05e7a745220c32913f3c8f06cf02bacf882d8c293c8290740eb05c22ff +c32c4cb2012c3d7dbd643ef84cd928ef8aaee42797d010e0fca4ed02a1edbe1e +1d7861eb0a741cf976ca07bc02c22930776cb0a36b46b1a4aca00fd2d77f685d +8ba3c1e24c522e43f198fed209ed810b0a7214faf8d583ea9146b26e9ebd52fe +30826222af5fe432bd82d840d0a22b8ba2a7635de4c7fea5aacd8f946df99c0f +cbb84e5194aeb9fbba94a33ccdb34b44a309954dfe2decc1c3f5056bda9456ec +5a6e0bd801218083ac309c737f10e9a42e69b5bf74d0278fba6a691b934d748c +ed7644dfd2f5c5ecac8e55df3b5a225e3d5ba7706fe4e50b7d9d53df98880cff +01aa1a5936513db38de449dd1b1bcb6cf199752df7e2161857fa86cab9d1b645 +95da5a17bc0f305f9023bd265e341558f73a22bd4a01fed1867179986ed99822 +f6eb5eae2fcb74be99f34604fb47cba6c3a0f0cd388ed13dd07337175ffc9fb3 +3befc49a742d6f667af2a4476d6e8e0bb61a002b29ba069a4a78ee1bbd00fda9 +ac18a33cde76217e48b0444e7c90788e60ff3c820ffceda02891d12333d6788c +8028507fa8b9c59d6d6d476c349c1e3646640fe504893b23587c0fef7c278fd7 +e1fc0c12de081c4bc55ee7bf65c9be4c6168abc5281429f3d39bd0bbf771d574 +8b321d993df752b5fecc462ff8306ff73ced8c946f61087ae9606699c2e85261 +c50715085f967542e98f92d89bd22d1b96c1bbf45e11958ce4f31ea3bc994ea8 +e9d0b7cf4ba9ef66b8b6005d6b2960e68dd0c0af4dd9957a253e2d4c47d46a09 +cec1580c02d05bd3720daf7e8fd3d2144b8e5b3414fe89b2b95f8cd153b326e4 +25b4733ddb2b4e1f02000dcc806252311c1e313a1ebbb4a9c445350609cb8bd7 +25e67f6fb760765b01ac474780faa7078d0d0a0973cf6a475087b720de8c5200 +e953eee885e5510b83a16014a6a255bd8273610fd698b773a0e2911690b1d5e0 +517fa1e2909905419d539b7d91f06fcfbe4c05041a06cb8a35bbb51b563e425d +0e65eb7b086acab5475bfe889397b2326cde5d4f7b30da851c55c630805a0548 +eacaec8b20bc10ba9925d13990ffcdb569782c39032bc5c6834eefc519747cef +23e1413ba5c6a03a399e7adc118dab0e5a1a8ddfeb5888a6855ad7ca9b8c5c96 +b33538ca373d4934a879387f55ce65390d313d93e4cc7ec7e0f67c483c3cba57 +f5625699cedee9da8622f0553d19231f626404329268f440398ac131190cb74e +4cecd5be8cdb1a01bc980b993cd8b3ea77eca9642da8e185a363e7df2441b2b8 +d991a14e5a5fea3014aa375197fdbc0b1472b321d5b0d8a543cd958ac036208d +6b33858d4f5a454fda0443a5976a1008da84749552fed657df42290ea9e0bf14 +49b2f609c3b69b8b2618a73e5839fa69cdac52a68932ffd4b9eac9a96aefd44f +d7475a9cdcaf91cbf86e81758426068aad6dccbe6e874248d86bf55aca000641 +4e21877854e95f7b76b3994424bd597f3fbfe58461dc5eb0c03df892baaf83b7 +e5b743b0fec309198e019cb64047d127e47ecda08a6398a46621ee521d05ce94 +be413888a3ffbf5039563b15d39659a57a9044e6caac763d25aefa6ae3315fe2 +a2ee1f6fa44554bddd7150b8d852515988753ea49ead18885ae5d2c876335be4 +c4e022ab6fd7ccf70ebd8afb12c741f8a6b559aca8b7c8c71f2c7c2b046f5922 +4d15b2a85fb38fb2c15623bd669b4da58c1862a69e3d01dd5098887472bddb34 +8f37053c8a9022d23cceb6106487e1d9b3128ac1dc75cff1cbbeb778ecded89d +47e4e96d97b8df40e2b1b21fc062a353ccda5e734d9ed9b1800a27f3f100764c +5f568fa7668cbd8c9cec6ad262c36cac701239b6f462ac4936ba7593ce53e49b +ff228411d4f133a019c029ccb7b973c8ed2239e18c207bfbf148019d088d2dee +c58a1c243f368d42a7123f976cdd4bb47a754e112a27939bbae57c1335f365f3 +20d1e89079e71d3b8f7c2a4a4cda6961489a6f884d75d7493296e2dda3ee5bda +4ec01a82354be5ca793904fa722bf37d85e7fec21b4e98c225fd66e819ff11df +368257087feb4355932627f3f6b9c288afd80ce4533967f42b89da53d2df67f5 +77a03ad16d54cafcbb249565325b7609e419bce2f136756adb46f2bb37010fa4 +211f58e74d0931c6ce66474089df52b9401ea0e26c19714dbfec4f138d6a0acc +f4cab67c1aac582a768819f6eb7f1591bb471640e8a262d8d6be3f935229a8fd +e0c762f89935c88b847d7e7e6b15b2956ac4bc9095edf740c615c9018579fb81 +064a1d68f6982c0cbb0a33cf9a8bfc6e094c3f87bde2ac70fe526cbc63672520 +e6b35070550449599914f3be35eaa1e326bb251d9c9ef42a9244ca8ee79fab1a +dae983f83af2a712f9bf9a2ef74b288a23ca7e958ce8c24ba0c4ad0683306da9 +51071e3ee96c25cd8123e87ecb93cf760360ca98727a7ca23f1273ef4a26eb14 +8e00c231bf56a66f74feafe07322ee921c5de6979821441201c46d7e6cfcbc31 +3edaabe7adaaef5f7f2d7d297de18b504ccb3c0b0d77f03bc9fe79394441267e +5418523ae7f91bfd7389d20f77115a4a9129c33531cfd99a2ca3f7d3f39635cd +0ec256f7bb65b980a9353e9692bc936d8ab18bea370933ff01e8eac03bc98f76 +87e754593e3e06bee184bec18b126f7bf3fd083f87cdfc2c1074ed007432a6d7 +97182114ab1c8e763f8f37c705584da16b4bee27a6b9b24746df9e9b71729bda +630abb697f3348adac537b97ae350f64c8c8b05c82a49f8bdf4a2843c33be4f1 +3a201c7ca5b41823923c9d510ad2741b171e8506b0b79d3f18c8c363f3f04384 +1940e1be692b06b13774d4405ac2ff62876fdbf10d1a87456293c7f4cbbf8a7d +8a0c5ad8da6698efd998f58929c2919d2f8b4c52a904b618a61d4a3936ceeecc +fd97cecd156c2a5979b7321cc4f1b8cb84b00bfd6eb32e12febc812f0115b57e +b60b4cb41d6c109d9d4c4684cc2e46f7a8012aeaa0d7effccf5057cd4efffb16 +79f3b1e8bcab177a67427e3643105ddd8a6d292681cc9114c008febdc659ee93 +70aa08e8bafd8607a45721df8f66d072ba67b863797c96053df935e1950a7ccb +e9f22ee34e2e3607f1cf4bba18eb34480ee49898f7dfe120a3523646c7693b6e +809eeb360ff12283e6c67f84517cc4794c580810df85b855e394d7f1a35c8905 +d61252c16ed95e1b8b64062d122ea621777678d13d7924cd71666c191599921d +f18bbf96addce54db9ee2dd1d4083eb31593b706542e8cfd5438668747dd9234 +afee940b0c9ea6cf1470a700aaff7c1ef56751ba9b10fc5772dfa61f471890c6 +911d9b68bca77b2fc6021d86d68b032f1ba6774830f123e21b4656380efe06e7 +0a6755d5b599dd09e4b1e45c1dd74f7523f447c5fb468a871db7fd074305fde5 +ec49a348a02da990b1fc5cb991a715fa79f49b4d32f601f102618731d98a10b3 +05625db0c0e0eeb02a4fb69a39e4b716993caf7222e329d83cb7e60ea78ced15 +844f3079f7821a44c27c237873b9729c0d690c31e52f3b93349522c6a1da789c +75cc0d1059a2d1339a463acb7da3399414b623751485e9ccb0523a5d0d42ddf2 +e89dfcae5e6a7b743f7e247d171deed57bd133eee43dcf5c95eeffe36b3440fa +2276ec0e4f99715067736ff688c881396724214099c6e2f821721ebdfc68f16f +936a7ca1cc3745ee9b127fca1d9a338cb602b03655e8de2111ea1371808381dd +3190a5ab16fa563e4a71d2499e095eec2749e67e532583d7bb28c595bc45c665 +f14d206480ac3d562c7db8f3314cf070eb696fc952dd964704f7705c58351736 +2364b2b1017c71623027fa35e90a24d7f5172b16fe9a88bf97e05576e582edb0 +8893b5e2465c61ca3157432a1ffee7512e94e63060b4a5c43d8205da43c6f75c +065dbdbfefcadf13177c2b77011e121c1f5d19b6bf1fa1de2a141c4b6210ec1f +05dc8f30bb9feb6d9c22d6aef88aef4ce2c3c9563f0b0eb391cfe00df55e2e68 +1ea1707b2f0371d7095f718ae3bca6c483598937251cc43209701e55a0fec0ca +2a84abe42e58b16b19a8cc1875463649b037bd08e0f3af1dd70348450784e46e +23aed8305e833a81740513e494ec2f1083038404b3a79b679e530d8e1cc833f8 +4fd29391aea36d2b37d2ffeea00e90d50d52fa2d9cbe5224bd19a4bfebfd6d36 +04c250544cc529026dd473b7e906cac0bfd8b106953e4801768dd2f21a12b674 +3dc8e9ea6e662ef88cf8bce0e34f7a88d2401a80ce26d44b0897339dac523c85 +3953cb6a3794963e5cdf296b979a20fb69a20884894c05e38da4d3097da18417 +8185f72ca9e34e0b842662d9f51c59c0d61579414e44f294be31831e7f806b48 +a9c60ccd6ee051d4d29e406c6092f867ea3563fdcdbde1925fecc354ce0ec01e +281d1b4360f3ebdbcdafd217081557869c8618ce923ded375425b9ce0a1f4a33 +eaee378ad6a1177df9432a2f140d5131bf576271a0db8d1e74ebdb78cde4c193 +a7f2fd5e1783013db6401acb51b108f4a71b16c9cf57ef903998163e5201a02a +137992528337a595d9c17828074609b7380f9ea731edb55d4f31c542b522b6c6 +ea2e25c8c562d392317318150d4869c0417be8f5ee48600dee3bad8076d86109 +8a2a3b62bd512b4bcd48916497dbb3c90935321ffc39b457220cc32348a2d2a8 +02547d1f4b4d4bafa402b8a7a7afafbfbd3207b046a576e3f039643b325d8474 +1d1d156f026f664f2cad54fc268f41fb9ded61b9ab9dcda646b42c9070f40635 +a46dfe209b72eadd40049867e8b15bb0a927b1c51c31ea74ca99c4b06322dbc7 +1da693dde3e686c7494d7b49701e8f2b8cd754c30476cf9bd5e0d5af5c6d99a4 +bd87f1b73c25858ede3d1d82710e3bce544fc397a91cda4604e5db7ad2d6460a +31bb35c9ba6df033a70ec0c6f601873d4c6a3d14ea9fc616786920f468c2cd0e +ec9d63e8d085d0be593d8344d989bcaecd6f770f7763e0f8f8938a1a26afda38 +a79a1a0780ca251ab2d9b11e33e394e4ab7bb1f459e9695ad88ad71331277094 +5d3d6bbf673d418761ac787ef5159f9fed9103b28f0d5d86c4aaf4ee462228aa +24bd59026dba7831062dfbc34276c5bde5eed1f7091a216d155ea9f4d9e1e4fc +850ef02f31cf85eb5c9eb8d4f5c55ff4147242cce03827a0c60abf2a727981b9 +9891e361364bbe822a4a5a88f52328ab182a459e5856ef9edf6c835111e2b91a +04d83ea913210e40015d3be601c0b43e2e677d5c9cda5a3d2c405b67095f3fdc +f973bdbb333d13693924369c36f5ae1117bc90d9624016b22a3d6f23a80577b7 +5562f3d48655db8a537bf3409b92d2bd3b02b1aea544636a6b2856d0a1a8debc +43bcf2023a54a3cd885fd9ee3fda7f3435a911c9103f101a39b5a3b5166eaa66 +6a348648ccdc9116fd0167dfa044e6f3f73539fa3444faea7a34b37e49c34ccb +3851f03148c78ce454712f42044b159167701fddd5b664196666bfcbcb7b0b26 +1fdd85134d0a46fe319cf381a545b577d523894b7492f632c944848ea6901adf +9deff2feacd94bc30f6db00a591cefe205390e32974b78f82a6ffa0c1e746ed0 +430f333fb242cc438e0e107faa0ca1a4073224fbdb3af21f6926b6c327f14bb3 +680282dd37e809b2180b112a1d686ed5beadcb5a230b890a30ba2832c1d08aa5 +9a6e9321c362edd0042c1483bdba5ff764a474e6254c16904f76642009c316a1 +41e3c824949a766c5e7067f9eb168a2f152bed22acc112bfdb3162a697698f8d +7eebdf52bcbb14ff206de000beb437783d141f93daf468b1a6a62ca6422e0d3f +c51fe03209132e719c3a7dc6a1aa36aade44c9f9b867afa34f3c26129cb619b5 +01ba4224c7ff90ef8b69650045c57d58d37ab9268abe8bb62459917aad27d939 +69e9c089cc4f417a679bdd99de84a400fcd4e388f4f156fefb6466039fbe72bb +3d05549bcb90a7ec0c2c3565801b3a7a437615337c8dca761d83a7644b04d4da +e67e00edbf2b3139c40dc3d470f8d476728119e9ab31d46b3ff3d6e34bbf6532 +62ecd23a9ecb93ac3d2498f63193ef72d192f98b05aa779b5015b6cad18fd29b +421a17e01cb394d588e37ab7f986e20e204a0f5fe06224f53accc121f112d58a +79f25c60a550a1b325bf33f568d69ca9a4cfb249096b8efe3b43cd703db80fa2 +0bfdfd3e01433f2f69913d13c1d14031545db4877ac7fe4f562322dbd2572cf9 +94b7eb300f26c3b53e75b02b5889cb0420f378a55c9a9b6bba64ce698ceef061 +349f8eee5b3a486870c6a11e9e3ff3fa00e3480610a449c9ea48bee511dda6cd +9ea3e4653dbefb8224bc55a02f77bf16e7b9879bd9ac48788e2fb2e237dba707 +fa90cdb918e02cb6c3e49925b60e2a05a71546d49d1bb161ea5ce6d303fc1876 +dc17e24f47344fdf6029f63d8fe1cc789a7753e492f5421c8b7ec7b777ec3497 +4575b63e74fc255ec95f3a1e93c4d752b42fbc1b1b7dc52b3bd4e33102046fc1 +e16b7ee6fd0411727965c75de86e547608807e51cdc1e51b76b8f9ae0484488a +7d21cf0f3b7ee73f691fa048309c990db12036ec5c299a4eae7411759dfc574a +c321c443af71421b7ec71550348ea60512975b17d6ad6a22463aabdd94befd38 +88ccf264e94a723bad53e4ee0a32245aea16837b570ba36eb70a0414695eed42 +e02948c308e22fcc6d2e1bf714ca662f615aa7cf0b71941fe08fd416db23e1a2 +307575f66fb214814bdf38383587cb14f5096241a544edd522f12bfb4864f0bd +989068be6e80b36c06d4a3609f45a3f249353225d7b0360c438ff0e862a2f29f +77842f954c289477f1654aa13250611733e6c7c531ac69fcedbf29c1e6de2d5c +edebb77f51a6ea25a3fea286986232a2410240b9b7f31ba31a59c40a5882f794 +832097dc9cb0e806db71677341efd5244c8c23a520c8267213204ff5f13e4bd9 +ce3e44c9387c17161ecc5d9c9f40b8dc4e6a16d93f833f07277e976ffb09be89 +d1fe74c1c6e1cf5e21724f8b83e70fd0d4ae72eb2bcd30eacb81710ac3a308f7 +e138c921577a06c8ec7293ac443fad6fd7a6a1873c09011b29e0469e411358e7 +f5d274a072ab9f84f3c5c74c7dd8121084019d89479d44bf25b47c248d4859e9 +c46d6f0acc65a9e1403ae66e84ef3141d688fcf71290cfc65eadab3f43474c2c +c8ae995be0f19d7c0f8a3e2d3e40e2ecdba5efdd8f07981db3fdc34b3d014039 +3d2cb0bfb72e821d01bb22f461cd8f0ca7254cb8937f9f228f1b356c0eb3f522 +8a9337aa9e0b24d3bcdf37b2e2255a8df12b1b343f8df33908e6bed58d5ff638 +584c0c4bfe04e43a4237cefa6cdfaee5507428543ff220a987e68c769d0440a9 +d4a33739e9072bcdd885c601dd30771d731a7c57713bd4b8ccc0c3c188edd8ac +1145ceaee80b1bd2ca85d582f05799bccd97b8547cccd71d10892b1409f2d672 +dabd6f0be7864de89fc66f758f120ca8a7983688e0b05283b5371ef01f2a68b2 +68d9fb855d7d7238b971371a8ab5f9d80e151c132a377d48704342146f9744ec +d7ab4453d258a8719b8455ebe73d35a9f70dab2fdd5d41d2fae8cf56146215ba +3fba4abf8f98765c6ed70b6ca8ab6e28c61611741eceb33e6c2958db40202f25 +8d78853a789ff3ec7afc19e5348d8422f6a28d65f2566d046d7b74973685473e +5cc0ebeba1c944630042e7296d81ac8caa96238bbc09f3067a7d3bbc45b27431 +1abb8e4c580de95be79dd7cda3903094a88fde6a8cfe77633e0481b2e67ca61e +2dcf7872318e63a4134c0f98a472813d4fcf98dffd30736ecbb4facb9c6fd915 +2461f90b736211e0ab68d5cb662be0b511a1e60132f7969dda9b229091286f87 +ec576661a94f818b99dd27ff65a4c2a3c500ff9cdb4b7df109db016ecb5a239a +4cbef1d443c48703f62905ea599b82f76be0fcb01263eef1ef411c72875dd0a7 +a5157265ca3cad3d27f9f9c20577a552e59910187a9d04f4002e07e92d8f5929 +fff98442ffd6d3f8eed65f2c2be666aa6220ec4e18ffe0d2f3daa680d4f27044 +0c3ec7971da783bf7928f77cd7dd11ab8528a390318fc0572f13a5a2b20e5ebb +1daa9df821c0cf3a34258dc56f872175f1d5d8bdf14478a19b53e278cb4fe83c +527bf56a42eacdf193c6ee25337cc2215016a7014f1532df6711d9b637a3d500 +3849a0881c778c74e8e5a47204bae5374afcd1bb8e901bf2a703c5cda6df6915 +c9a93eb94d553d50d3f178eab2f8d6338416539f225964b688bb649f4f148737 +410ff38f25e56ecf583f62f09985f94ec048b8b460de00e58f4f238570b689a7 +ab307b7113814d5f3ff6cf280262acdf7b46aafbc234ec32a931399bab9f2ab8 +b6c05b23fa2152c10888ea6d4e44b44e65721ca646ecae52a79a532565371f14 +1940d81923ad84adc5c6a9f2d1d1efce1e53b5907122edf3df1b69e2d9a87acb +303667cebf95dac21b053fbd39511df938b33032db098fa64fc7bc6407d11be9 +8402713b6bbd9027ba62baa364ea172aba41d3cdb8c6ffafc5468f51644b1576 +84bb51f49fb04a8a56a6cdff871b78b413d8b7bc595bc8e81e453c36087db7c0 +92ccee99d0d3f8ead6877edc5e28210a35dcf3cd49c594171e2531da1536f451 +0e0d51ef1760ec7b1fe195bcb5785c3f26d3c3cac4989c66f6f75a675ed97990 +5621f8b814be502c4c8a940bb6d825e27ca6633eecdc0f1bf725448950a37bef +6abbe0bcd5620ef0a66a736b7eddfaffdf62796577a1f482ec4bdab07024afe3 +18e92459fd61a4277b5e885c50a825e94ec3e8aaf4292ae4bc9499a00ff14c6d +4f742615f0f63a62f273218da051f35a1a429e1b79be5926c10c5a2ac38ea8a8 +6b055407faf2cd0fd6a6b16f847d9ec7e911e436d1d597e012cec5a08d98056d +63ff4d16365a9033251e8dba1ee34f7359fb1115ee681f78a0d9840fd88cde7e +e4791044bc3618b646af915e316d64bfbeac1f6c50cdbed248261813749e1c0c +f998383bc6454d6b384ad69f9a8833860df4d66f750fd45e36f9aa1da976e55b +0b06477f3bafe5feca828fde3a373dae7c2c029f2b2c4992d71ae4fc1804301b +35ca5e73dd0a354b53d1c74531a4c860ca8946c9c05c93483c0f315caa8d791a +afa03fcae03ee7f6378c9ae14cdaf68f002c3f306682777ffc83abccf992c787 +425f604253359ccc2d30361ced2137d2f825eab125a9f4411453292afa0a5228 +e5b6b4b6cdded786c3623f8d02bae3733a72bc1d1c5d8e6ad59a371a1769512e +c26ebbb115291652182bc46ab673d016ec0f25487607fc04adfc072cd084e66a +2d4ef87343c42a4d94cb9bef449af70bac826c0688e26fb2978bc71dcd25fae8 +c3e2d96e8812f882fbe9e0962e1bca90ce38a0da87c42579b1cc21c117ae7533 +1016b8827a466609f215fd6b6b4217beca5e741118e7f77600e1ec593fb3ce2f +cd61c7083a4c5c9b4dc9babc7e573710341d678c527068533bd6d38d9d9c17c6 +51ab8db46418ab6a794d330c7d0c2c5f4d8e6e198b47ad4410fe1e3dbf9ce038 +0d82be729e3cbe262d2bb7f05f269022fcf6c89b204288de95aeb246bdecb355 +341eb2e622215e967abe6b6814e4f76f6dbe972688d7c2ceedbe858b96742122 +8cf1718747cc0b5ace901b98f4a99d7fbc8e5c675d78f0e822fea12e8100b88d +5f8d86c5e048d4d33942bfe125d27f2a4cf26ade4b16d4986ce4e8464f7fd90a +20a162991146ec48522d334120d140e31bc5dbc0c038f3ecb63ff9a2ed0efc3d +a2d7c96b19d6ed49cc04a54f33d365737297ba328e3d646cd0390ec55747bba5 +248d44e594fa8389c72aa738a99dc4dde351d381d010a0f5fe48aade17f62958 +773d1d8500819db54d5f7a21a507f767f2ca63c5ac7c08fdf71e65aea255b971 +f5c2d65dd53d9f62d85be99c8ee05bd698cc7abb7e596ff0d11c51d0534dbb49 +2b219763fc99ba557da54c10bef24935e45364d8cb1ca2471bacacd1d67a77ac +ea885796af2cad89cc2075f3b8bed21f9b56d11d21561e5752289352227e944a +76f5fd44513b79a03f3639bbf8d2c7f4b8fef335a20482b0a3b401923458a4f9 +63f1e52f94ead00d13a5f0fbeaab7826cc8408635b28378899a05e4e390490f8 +d92a93eb8a105a4116a86611ac89f27d946e52ce39eaf255fce513d2b2042e66 +618cc2bc91e8c0128e8315624acb66f2d48cfe637bbf27cee5d0fbaa4b9f99a0 +ebb9f9d8093c08bd4e067abed9308ae286ecc5b0cedd695bb863da43eef448ad +6ab3c9278955e9c1be2a059ba2524352a720c49e5db9eb8d06a09af38b957f78 +c686bfef9f881d906e5caa32e496939359397693aed22c868b2a0872ffd968f9 +53b7c508ae04f706876bc1e165c26abf7ad0cdbb6a0176df1564d7f7cff2359b +cc151a058c48d429db6bd161b8410082d3ac53331c4b57a527d18847ef744ab8 +af983f3d22e35b8724dc460d0484f6e7470316dc9554906769faf9e1e070ea2c +816a9c681e3e00be2a1ab9cbddc6a43a96aca4f4e7359c1535e1e88e4f360569 +13d587efe19e00d48137804dcf153719e8b7b80ff47c0c007d80a1c6a1327d17 +bdf5d8c0c72626ac7e5f569e12ef87a2e142ee2261634e8210f72d92f64e34a2 +c15f7f588e78865b3d6a62b0c3f5a3be15c0754e400d62e7e2618ec5a93417b9 +1a079de49906243fde354491603335b4bf6daa0798b51ca307e41f41baf0bf79 +490f892cf47f2fc51560023dd15049526e134d67f48181f3751305c34ee200db +772cc0dd679264b45a99f5d30c7e893faeb3906d243a037e9baeea613596f222 +172033b01edd18c94df6641f049102ced150c535c70d1c4c66805c5626b52bf0 +9a97e5b539778a096b79166a592e0d5bb8950f7d28ff143f99495cc7c0778405 +fc7fdd349cf53686572f89219faddd5de8f3ddfd828f333edc15f3614f326975 +c9fe749a6a2730670919b4276eaf9b482ca96a0ca64af391696a78a377fd1010 +74a90f73d9895c89d4008683f0759813a61714269f67b10c082843a92fa97b55 +d2f9a40b8e4156f3aebc7fcba0773e00e781b80b07004e5b20f8c9fe14e7df67 +12a64ba22cb262799c84746e45f3f41c4776314c3f4a0b9d7eb83feffbeef166 +0d4590a43a9373c08942f46daaae287a420749f7046742e7b6e15ab3a04d2b97 +2ae73510f57de8d24e555c438d0953e1c41db9d6f6c12d2ae784af55f696efa0 +24b5aaf5b3e20cd6aeabb356f33b6b93ba8cdf2537f4570332c0dd0fce1cf8e2 +ff3cc038ff272b1df339cafe3659ac4541f2204e934a555ad9f1e9ba83148113 +8a8947bc49b9062e71c202631cd8c856e87cf08278f9fd047325dc4be74ede82 +42f483fed616aae2d6a5dad1e1e83f124dec374d57b81da43a0983daa34af7ec +ddec60dbed7ecac68409956a0eaecc110145ceb8d99bda1a766c2ade43326b29 +cd6bfa4416d9e0f2153f4f9a969b033087e152ad9bb85a40479fbac509196c99 +a4f0841449eca6dcac1b9f9d7b26fdd6f7fbcb3cdd32b75091c5f96b3bf114f9 +610343ed284f5658752aac710270945c0a41bc3ddf3bb0b21448311e9331cd27 +06364e3090a1265a17b1b424d03b1e950c824645e11ab766503b0ce70415d410 +afaa5b33eba7b498d80302fe982d9778e4845f3659254ea382964e395d4d0341 +a9feeda8f963739e10ccc58baef8dd49a1361a0cf95083559ba32a8e5426c981 +42ec2e925e4b382d5a531912627eb2a0d98a25fcd540cd5fc6df156d4a5eb1e4 +14dd84c16fb9c6945e7920179130036b5f05f6e283ed715306cea7ecea13e281 +fd69e9a93b2bdac310088ca3153323138d52bb2db9d272b6ff67eb59f3db66f0 +8d1f6ce77c4519977721aa8f532006be856b00b33369fba6b980c420e34ad5b7 +810122ec90aad038dacd3db88ce061e05d12ffe44066c1671738aa913836edc9 +3ab7e596024fb3498a29e5bb543a67ed3e14b9eb13dba247325e70cb0e1fdc5e +b3784da0415cff2b1a089779fab42debd53920ae48556e4f906f92abdcb35cf8 +d53e938b1ad434904aaaccc9463d608bd4dddcbb781f44b864e1703813fae91c +c0b148445b88e4749cb9f52e8a6b8f598d754be58c22aa33d00597d22502a71d +c207d7ebc4efab16f0a9c3bcf6f888698b443779236c33358ac4fc59c2f5ecab +3ed32277fd98ba68be767aacc6abaddc7755b15c62b458a66086dfb464f6c7cd +adad1017b7f4f14d98ef09f0c709ab6c529d19afbbac325ccd80d57ddc19ac69 +57f50212f6500e4adddb800bff909d6117961e6a1bd8580fae0e33103618d4d0 +ed7af5d04ebc3388821c121ba2067e10816fd1dc7a75dfc98106c6e9105f01b5 +99e845e0236258628b904df5441abd12772594645537c75b20460c48b5f21fd0 +2f73460068ec2574fe6829d86d6958a91a588ff609f3c9bcc2bfd3d2220e4550 +3d0e5a0fc0a837f73351be9752a659fee027ebcb926f5ede378f0bd10cc567da +8a829b235b48eb7735919563136fa1a79f99591d431c768b5867a8d2e69e05ad +4f5ff1e34e6971eb4413328c45f3267cfff49e498c870cdb50680ab42bcbc34f +c836c1efcc10e50a43b648c88a7cc7d703389dae2b835cbd5510e1b26d4d436e +5f5ff8f7527c1519bcdc7bd5fe20a390f484db9ed9b91ae7c4f03dfb68b1f204 +5118f5e814af4ae832444f60827aab48a9dd05ecd39dfc943775463889604a74 +58c324cd27782d8bf4b3017821759d70a344eb605bba453527aa7de48be86d71 +c3477d99f41360c647d103666648a5ca008af3e1d5cfa3b40ac10dd1e79b302b +eff96c18bf92a086103a9aaa81e55d1af9fc36931952a736bdf7dc57354afcd6 +a964933bdb66423ea58edbf68618cd5ae35ec562f343c5915df0551e54888e29 +5c86cf31506cd44e8b3224db4aa472bd23bf94e1384078713baf280093460a52 +fd49cec5c2c29d91bf98064e53137575260c5867e73dd117e814a1b2aff8c497 +406a5dc5ded79cbe50fd30846c34d7841a850bd3fe132bebd9852d9b2f1d7726 +559e1cdd292bdac58eed6ae15d3f17b4ad0cdde87b584b190675d27b5fe5d0d4 +71f3040390f6d65937c6d83dc34ada9dcb8b2b401cb1e5396505d0af8c33f113 +518912b0b959f3c2e8d208e1ff28951f403400ad78ac0e4e1456fe9af63303da +adb9fbc8e99ed0a02d960e54c39b3c27e58198d01e358b2336a4be0eb99ec566 +73d45d79e6706c7304c6982d64c00432335da50233fdd28d4dd03851cb8aee4f +523bc43b61f26affdac9bbd7305d389f508b35072c30be43147727dad9199881 +c7044b0abecc5c64d7d3f13aad67177d34237ab9f8cd77893758e13619efbb0b +67315237f63312eab8e1ee1e5a594ed963326bd2c6d54c50b8ee10538b4fec25 +16d138109d2d48849e015934d7e32a192ce4abe5156402c3ee8a3a5d502ce829 +d40b9c801b78c024fae15b5fb88c7ac33028235330da644482c0a22ad5444ed1 +0f69b227de49da59eac7aefcb4ee7dc0b5d1d1aeb6394ae1e0d9e130c1b1cafc +10787eb5aeebc4e7235e6f5b1a991ee9a4cf0c0439025eafb59959c32604a640 +e9007f46f9136026d058b594b796e6747ac3cb6b14eb61a1d03dcf87f05f4edf +e1c6c0dbf6c0618f2ba9d1a690cc811c28033815c699441ac4055e7cdd9d2b91 +b631f7c3ef32648d2ca927186872cf2fa646630d4eca09162ae9fbb00d1ce3c6 +585e4cdaa971d4b7d4ae0d5f8db5da74ad58fcc9e3378e7b2d4ca0036fb50611 +c98fcd020027cbe5faf311ac7a05af6039843af9fc3b830e0a2cea945eea5396 +a5dc74a465a0b6560b6663ac69e867925fb1a69cb553aef3dbc53d8a631e87b0 +0d48619e77de39aaed7dcb68a7a4108ce2225010964fc08660d54d73064d7cc9 +c7c6a2d12d7f5898280324a90128e4d0730ff35e7b93bbd350669297a6214df5 +6a775a5b7e73be6a972896e05d423f9e9798622b632d215812e911a93bdb0ad1 +3c5f628c4ac5704cddf78d3272fb1225bd4e12713557a403da937ea52d193726 +dc8178766f4e739d2e95f14939270b6507f35d83e1fad6c821ea1dcb5eb2a3cd +be3870ece243b7f406cd6b5cb1caddb1b98c32ecdaabe8672dabb042cdecc286 +9e895eb6fe13df2abd25e66acdf07d402998dc54815386a3956cf36458234147 +c90a39e7101e4bf2186153c63ce96f3f34499ae1e1c234a3357ca2ce163106d7 +94083eb36aaa93e85e1676cd94259e173fb6ac65d133b16bd1314b259315c462 +56f294e37c763c5f16af239738efcedc3a6bdf8dd79b34775709ba54296899fb +e9a316485274ed8363da0329ad0f41c62cdf48d7a25ed45ac95b5e6a4e1bbac5 +6da304edcf14c008e3f0d306c7f845b87ba80db258ba7881695209352f41d78d +316017371a32fcd84bf788b511afe571f71e217c0dce3e04ab749d4596d0d340 +87540d4730c013796215caa073a1b99733cb7121a44e22e4fc2b1c052798acae +0f086dba8eae791662949a26eb35613cba94ac58e47f4b7b953ef9913dd2c535 +37da9c1cce1474632288903c95bf7bab47f056b62d11401abc85b20b66d0ce72 +545566f9bf44f5cfa099b66ca02a728afb9877021ddf05c1245849dc6b6816ea +b3cce3e604f604cc7cad40b2c919df5c92b356e0b81f6738a8dd7469a1015a4d +6c5c6decb0c3eae39b7b3fcfd482d53ce5c171c73e23aa44ad41c062e8c7857d +e8b56561cdcad550c6453c755e3e081273763f4e68233213a4059f6363f55741 +973356725ead4dc6398d1d6409ca8d49cc901f6e9958974a7ee5c02f9c426f11 +f29b54c316daa3f1d66e0c9ef73624aa70d23c0f15448cd295589bc2915a6a6d +616d77134382687be88b7c1b9c63c0e695de5487a5a5162411b8218b1174f035 +216716b67f01661902287ae5b384b916d2c1682e2a0664600ce5e494f13ee820 +4b267bf8e863072bc11bb5e4506167ede7aba31f58e468d3f60cf5bd5a2a8721 +018ff213e5c84f672f6f2e651c4708a4f24c0302dcce4614233ac6f540ead177 +7a1155534ea0b6acf7dfebc0c6dc49fc9692951f587cb8c1cf3293328df7655a +d82a144d193cf8b9a274d27c22dde2358ddaf79400a7977a1917fa10f445eaa6 +260ea56720e322abeeb790731031a345c323b9e2e220e9e9fd0d121475c6a7f2 +464252ed44f00d02181f1a5814d682f28c692f969db1d834227cd4b539539ffa +46be32ad1ca3c9b4b337c64d3e61fa5a6d7dc29345a44d0470e564ad61cece8b +37595d7eb3c0933457be8f73758d8d6f38b3e843c8d049103f5193b0e855d5c2 +df1092085c80154c50fa825254dc1b8a895e0bf3f681c2575bbb2b49e64a3c3e +77794024051769ca5903cbb11fd3333656c4eb07d1d366d656467df392bdb9b9 +373e38deb2d83a9eddcb2699116e15b9d0da679aae82655eb917986e768788c6 +279d5559bb5b104b829164cce27896027913105aedc252cd0bc68032feb026c4 +1792df669bdb1d4bd94aea620cfef970e8756b258fa82a9eb86af25b6de4e5e4 +8b0bab5d552326d8c0e6c57783935d7f0cd66c078722682bde80af3645d4a9a7 +ef9aab474929c1749186c309347db0a5020865337542550397b2020dc666b333 +9ba495f358ab8d0adafcc5a3cf7014ac94b635e2ba1779bd0c44aac60cf3fa4f +ecafdc876bbb528cafaf4f577266ed00509dfdc52aef8ece25912c04b8283f6d +a8cbf712d5df4bed83702a76ab73d0adc789924a600c1b00761b986bd668b6db +3de4008316053ec633300ee2e3ef9d0ccd3e2e5ed6a829ca814c8d127dc6f618 +d6165639c5ceadc8ff161f081a019def0f888ec6ccf12b69502a4ac2e802546e +52600c91d51e70bd891c5ba957ed3951d84aa76f6d2a1a7198965409f1ee699c +08694d9852f4a97839956d8060dd6004b0df827d6daf19325ffacf8773f5a14d +b92eeb033282a681b443b54f242016dac22ca7388fb8d00dead2af7f39fd58b6 +f109bcbf96c58e46982148c86ca3bdbf8b61e8164b08f992744c67c636164fd6 +2d68c25016e9c672edbd444e058d3cd9154ae39993f1d5f319d58991f9bcb03b +34910a12bbb597c3f871244561495f5d94b92f3c6b5e1ea0254c7f989e033eb0 +de0beae9676efb0d75ca0ec0fd07757bae8caff29bf2e1c0098e6d0843a2bfa3 +1031b383ebf4d12c07f1e3caee0397f7528ce5eb04c595358875d2872f19cd45 +7b41ac5dafcaecf120b2b11c0f3e927366e7a73bb033845eddabc9c62e373117 +de6a7e7d6895b6e6972d6c36634d46d55e0070e82f96ec375ffebce8a4e09818 +11328206eb0f4b66e0a8087d0145c1d10c49710c3fce4a5239df90d0ac21a0b1 +04d2505f7b5243dc96d4912c9dee3be9dcbfd9f7c2a9c8886dee4c41c58e9ad4 +71836d2e48f5ea7b0fb04ff6d2ba7b8e78ae70c765b11939aab939ec9b9a025c +f27923c7bd0455bb858ac6f74baae573b066943598c3eeafc7f1bfa1b0e5fdad +cc763c0badde7dd314d186b413216fc35ace73311dcf84d0faec0dfb9483eec8 +895fb678dd36d56618c3b125f7ff3b20f7bb8dbd86f52ebb08bad2a73ed6c940 +44706ff7ff263b0dae915e78cb36345989ccf84063ce6047e93a2acbaa983182 +db3ba114d80fecaabd2816ebefcaf0dc6eb42fb47b3d2318fd557cf96eb5201b +b0b265bbb77da6922fbf9184afe896b88738ab3f9ec78e711e418275b101f8da +be795d094d3b2c5f1c5e01da37b4e5976cdfb56fb459c8611ab2cc9081863e48 +eb4515035709f715f99fd62abc2e495cc8d4f8a1becb35d2126ffb08594ff4af +bb82f793854d96a50ff37c24d198f533c348f657ec4726ffb648522893cc36df +d25665df44ff0d6465ab46691fd9445cd3290cf2455618cc3a52d8056f179be5 +649a1b17bf25108f9b5b5a3eeeb22d970d968e25e20c5d4e503ece7bebbbe696 +465191dac3046b7dcd8c3824836bc6ace208dd60982451731e82aa0e85b2c6b0 +af9b9b14848146b09c64abbd9625f7a3bd7b5ee015c8f5edb3755b6356c37301 +18bd9f49bf060984259ae5d7fc6f3ba6f3ca2223e0782444bcbf911885a0dc77 +65d705146b91ebbe0cab032ca8336ce9133136ebe740d0a126f12f43b76fbd35 +4c09f5a66e3bd1c295a6034187e0ba7f916670b840f146d4681d43e9ce18387d +70f44aee7ae7bfebcf588759213263a8a7c4c3fb7c31e890f285f502c5e88963 +964556caeac1f31b8975a9537e40c010380042359200b4a951a9effbaf6fcb28 +1fedcd940e10ceee8f3428f1e00eb8b1626ddc9c6554a8a7ef2e87319f3c532e +afba30b322cc358c2ede14a5aff1ff1f835963929a3f396361b714f352133a81 +406515004549a91a192127406bb9f7a61536f16b6e2b51dfddcf0f31ea338259 +a0ba5126d1459dab06c8ea7d88816b2a750b4e4c6c45109cc8f0944f4a42371f +383a585be96f72ad5884e8337582329971407ac1e6fa94d7faf980550004be9d +a86af226e74b6b87ce02bc9949e3edddcfe0eaaedf502e649122829a4b5a0a96 +baf1aeecb528b092ba289cbe641e2775bd74434cd3915082c4a36a898d2a0347 +6a639cb3665b8621c9ca4b633e7b5e7fb699c39d2fa9583aaa000b1b3520661f +398e43ff8ac75221bb92a5a19ba43def0c89b9ac73f936babf0c930cf3f22eae +373a4c86e6356973490e17ce7163ae33583588d7b7d7e9d3ce84d68ef9c0b524 +8f14be69001dbf85b887e902b37813eaed85fd1b8610e2e964455bd3525f1e99 +c8bec17ae486775dcc124b4a3f2acbf05d6a73146ff4bd922a07022d09cbde83 +5c4dc2588db5720f6d73829b6fe92e592679efd487ec842be2a87a503d88d397 +36bef70dab7684f29558b85bc5ec75db196967063d4ea3942d18b6bb4842202e +2ec18bff6a32a85a82f16342f1c8c2ad3e0cb12d4e61c7ac250f481725256c8c +c7b29e35caabe5a130fe0c917b568453805ce48c7822f8323b7b6bde5450065e +a4a1a6c2c11adc940d1dd15fbadab619b677fa1710eb86cf4d7d7b0c543bd182 +5cf7a30310c18c874c8040e10addd57de7c326253c2a9f550bce08565de02526 +e0f014a504529dec9086aa674b94c1e0786982849905fda956a2f85fe487163c +c68a363c2d44a3300c0364d66824f31dd0f11ef7fa7553cc42fd8961baeecaa0 +edbd70d3f34363147328b558f8247baad15c994d33fa696af72ac2a0c8347179 +b041645dc46262a64d3983c46a3b460295b6afd8bb2de931bdb27a2e94f23553 +f1f87c2d47b88755575e09f50499d1cd6387c16c11399a6b4bac761e80b97370 +0d4d8e3d599119446c9de410e33aa6d5925e8c4947533bb2709b9b1d4d0b96e7 +4012b9cb27a8e1391ef72870058850227748afbbc55a03a79390b98aafc2869b +fbc9ad0d171ab701befe311c559b3865fc0c1055b3e8e881a69fa630efc7a431 +75af2b55c9dee9bff2beae961861e45773e9e37735859983b9603008de8d569f +a9a19016c9d9f101f64c345a4ed17113dc187584c1ac1cb7577927847793c8f7 +0c544d329a753aaf47aaeb5e6550777080224c57fa44a44ce4b16f7ab6a3fe74 +368f6c2d0f8df4f3ce6b762e43645ab0996894b358861c4927c45fc1cfffb7a7 +52cf9ba3966f53f00a3b26a394bf92094d579552f79ef2531e375876e52a88dd +8222317318357ffe48d43a58229a93e7d6113dd47043efb48c85714ac19da484 +08000c866b7675813786229a16e5789f73c1c16b876a790913dd2cfcf92f9c5c +31a33eaad8f368d6531c06ce189e07e9f1cd61aaaa3f8291a61311481e5ebf9b +a45feebff7bd242fe2f018aafb62a4188435c46fe68a7ab09aa8c16b2fca9892 +0b9a2d7148603cb336fbd6b08eaaddb6eeeaf325d25c50f726379d9de1618c36 +d2a1034a29fa981b94220d711e6ba5dcb5ce7ea16d7ea03cbeefba5dc585e5f8 +bc032ff17febb2879e61c079f9b90d0a0b6eb537480000352a63ed828370467a +c526f861c5cfc6e53e9a83077509573239c1d5a349fd53638689132f831ba29d +9963a7497c2bbe933fb653110aabad3629e31a7cb3d6d3875b45b7bb8f62d740 +5a6ecde413d365ed05e7de1d2c95d46783a8be9d1b61f24191a1119078283800 +deb44a0cd447d47581972001497fd5d9972541b6ba2ca719a8177feef3a19097 +20f082c42a5de8a071e16e1bc181e34ad5018131127fbbcda2a9ce8b9f5eb83c +c59c96bf0562e6916be9d99779d8d5294a04aa19d8dc839caa42f48f770f60e9 +18c593242436bd1dceebcd354f77e462fc249037b0fff2ee093a799010800ea4 +8da10c23b02dc20f3c3682b32bce8d7073c13f20ac232a6a42a4a0b5e995b197 +1fdf05dbe37aacc0ef62364c466817274496cbc8686650d480054a10c8105ee4 +47e2347c5cca657dc944fecdec1616cfb16ba4442d08d7f6b8cc69b38fa05211 +3213e8ba2990bbe7e3836c167d2c8fb126fb7cfbbbb28d33058c595cc6a16d6f +e84babe05ccb4bce0b62193e337e8da5320f29f752f03a92cd843a99bc7a1e8e +b449b0c95dca19b9ed1861812c7ed1f2ac7294d227358a5da798d7dd314a601a +3bbed33797c6d571e9cef4a29fc421d2b7db70a7e92ebf91ee50f0ecf2ff63c7 +38a713d1b6d1c542d5c6d95fa4e9fd16f4d219ca943317baab091d2021ebff72 +0a5a81cdcbf5f3bfa3a633d16f4560cd3cf9bc1df7ea6504a3e3b9377e9869e3 +e149ab6fea0f80287c4fb26cc5ca6927f5219a8379c58450b7525bf017d72f4c +b5611169c7d001fb816109b334060b0f2913bdeaea69ff36286c8fee4bf2cc7c +83505fc4b7dcb29ac97b3682c48525e038e5d1274a069858e5505dc932c5634e +fd115e02d0343b75907fe80d7d8d421ce40ca292140e0c0f3d79161c618981cb +ccc0f9c4545942dfa182bdd45dbc71b8ea1d79f1ef51fa88d64247d4d2d3fb02 +f4d908ffd1a763d1383f7f54606269c4a0a6c8c82a01f8a40951dd141e4833d9 +7142aaa9b0a7e1c28dc578faaf9926cefdafaf084d50573395633ee6097b2c8a +e70a16f3191405adb7cda9ab344d0872482f6db9969cda14b7e70821b16b0393 +a0431332b925e11f44882286eead545c0854cd41be75391e2a537f12c1826bee +fb1e13a9e40995e2c20c3e330c993fc40df42e4c8d9f09dbe4f5f4476bc6addd +0377ff3cd6a5f1fd26b5c23744555720cd7902f34407fc6f57fb83cb095a8703 +c9d70c96c50fb522affda15ac3ed668a70be3e1038125f57edb83c4a8e520747 +370b6131f6446eed8f68177b4d3a06333544969d04bc2ef75b891b943a89e011 +e078d01940caa9e1d4010670dfb80b1847bcf9578a6b6bfad675b65b31f8b075 +08ae31e6d3a26680b9cf228bf61514496fc2c7a2cf0a635be96383466226faf7 +a8c3570b3c55a009aa091fa99f71f8a4e82833428ae5cf0c5a585da9dac86a3e +faf1c6c31fc7fbe4395a58b193311f67bbe598f88ad884a5381f82498aa3a2f9 +448f50a604d9db2c1f88b47aa783a82d6d0d45b2334b4ff48c8dc810751fe68d +b2f04324562caa35c19a80ff56911399f5abeb971b982745efbd7b10edce63b5 +e490925781673def91f3329107936028e85f1f633791181217e239a2d4dfca97 +171812d2614131d19115eaac6550184f973d439d723f2c6b80a5678efd9fe5fb +2526505ae8968700b352599b1bd964ef8391b3380e90e8febad06e4545c01017 +14bb2784abd7bd7ed8fff02a028767a781a57e1ff6543e996da730610fd00026 +3ea263f3c46d9844f4ea67c39701fc39e54b9f7316af609b22171c743e7e2fd2 +aac70ffaf84692b1d25735e95e45699a5e15a86a7ce7bfb7c51468c09d239a51 +45802559023de368135b52f4f299a4a3272c3969de888202bc1e99d1990d2aa3 +96a0e2230c6d2494e02ad04e8697e61e0b9420cc90bc0fb687aa27f85929fbcc +f6484d047c785284c777bc07f1c7f558fdc170fb0495d1fc65a50a33a06a061d +718391e14deb33fd37e7d27e47b8f3c9dde4bfe43866450e86105746d10cdfb1 +1e1714a0b78158517aad1eaa5847b37208dff3bf319d87184b82a18ed20d07b0 +ec25a1d278bc3840614953c1219add7c21998a6be45126eb61d87bfd5d1aef28 +7ff4b2724025db64ab552c28f0cddd89a04beb667988cfd5adc8f7b1ee091086 +c2b31a30a9bf56b671c81fe10db4214fe93f3d80bc6b0e90410e123b17fa0d41 +e5cbd5355c41bb9579e1ec93177d3f6ae798df9f70f9dcc6b541d5f4b3c6bd69 +83cc692c4448f91a730bae1f278d700c45a5ac32c6d5bda96aea73c95ba417a5 +5ad76fbb2c2a47c9896efd54cb4f178fda187dffaf47c89d5541c6ec74bb505c +38c34cfe95faafb26eb9d1bcfcda8fc0617da52939ed4dc5b7616691a7188585 +8de6b6cb6f6f742b4a61836d6ccf60775aa0c5ef3bbf7b007f4e2053b4cab7f2 +23c96418426367fc5a833fd2b1a388f3352c8b390ce596b9caa79b9d77ca2020 +41550303c76625b527b29f0446e1e18b93abd527d537d927b9eb1f403c306b9c +c3003ce36eca033b7655eac10b1c2ac5fe0774574d3bb4718039e498dfb06e92 +2e3ca571282388bade3e55cbd711c20a93fe24bfb1ebe38f0cf7e1627cf8fd3c +d0be08d8cb4ad52bdc53587bbdb53362d31e8b0cec96c7f0bada54a0bee96c1c +40b1d8506913e7edc80983683481e8a3e7b049fd9549f422945ccd41b63953c0 +6702215dd8a1e466ff3e2e9b97f7a96df89d3078d5ad49af9480fc84bafd02d0 +6b61dd88963e9ac75b42dc9b255a1c20594ce1265ad4df4c485b3f73cc59a4ca +767b5f026acb27a0c71bb2e92e1761744882dc892d4e53297921a27510f23873 +91bbc37710eb2589dd6ca1784043f4e5dc2f08a3e1b9dff5747f69b3a6bc2e14 +2257f3de54ef93c57001539dd6779fb97029e17b9ed9672ccdd7b0286a3339f4 +30b78bd1de5730f6c46faa5b7b4b6213c3bc8671839ba50da8ad0e47890ec3ba +78d1bc128cfdbfd11d59d3292b277e65ff1bfb343f84becf9130107326e4043e +514a01e05be59423c44cd4366268650173cf594316bd18f0081f10f72a665f6e +0020b773a90493b5ddaca8adbfb488d5854d1591170347cb16eb4a426dbb7cac +8576f074017d3d34d98c5d82e84d52071c910929e417412dc64d0f5ce06535fc +94c62b61337c5b27f4ca50b4f516775ed8ccada4c3203917af8014d0e01f9f5c +568fa7668c26ea9e085fbc736b2e7c607db5c0e983107283fcd701d025d4eb2e +1efef45b9d2cf08827d53568598104724fd6f025c50c97d182218e939b92fbc9 +42fe6460ab63ce07f43189dd38745a93a9179dba460173bb3715b145b74680a9 +aaf104ab04b6b8c8f5803bc03458fbc3ac036bf4f48894248048f6a81dbd403f +12c31ea4736d0dbca37d0f45a264af161accaa64e645d20fd10856b063f83b8d +079863f4984840b937efacb021d47bc94b1cfb9dc183247d25397ce41fb861e0 +0c95fc77407d98932d08c42f2393c8b37ef6357fefd4d196c4bd6fbc414e18c4 +aaaf1e54feb3d81f6d5644eb5759ef5440207410464efabf54645132e798dc10 +b068258a3be66fdebf1c1d428d3381aea736336fec6e86b56f5a6143f74e8bdb +62e0f9dc7b80323b3eabbec05d1bbd6676de2e2543cd37d6055e88074c4bebbe +53ce30241b46f82f635a1833f41888af3771414bb943353ff865da76e25be7ec +2bcea61a15f180552f98af07333fc03749598ae8f3d37916c33deb106a2c15f2 +1989350f1dc372c831fdd25d104e82f05b7a102256d9f8008e23942e3f9aabf8 +9d723bb624d0f60cf559cef6379e552911ba014f422801b50b15ab9fdf4b3311 +a2d79df0a820e262ee4140bef47ed964b1dc7fd55b81e00368fffbc63814e3c1 +46cf77833cce07d69c7f1dc7189171484ce5051817ae7bc7b980eae9a2b05022 +60b19176564e2d1ceb79cee1666ee85f29331554d11037c8a79a7d53948a300e +b7344a824338cfe73480989a0318ff63a0428c8134a2c754e1f5394ec300bc62 +989d2c9fd52e76124ebbaa3576a735ea45a87d8442782a617e765ec3d3b48076 +a97a3127effd10e46accd9947728a362fb83f8718b98331f9b84df8c270f7efd +f2758c8660c1c0f7c570d86fe15bdec1d91cf8c1a417c9386e09c548bb401ec4 +db99ef40ca62cfd7a0e09fe111c4c72674254b5ae6e778dea51ac7e298ed7072 +7d0b85c0fe154538a90c7ecb7e1bebcae32f2db9016a00a6e3bf5a103efdb3fe +8b0212049f9d79f95ed645ad3d53658f1e0ad84237d3fef48579cd86a76bae26 +eedc5dfdc3ed94c434903a6aa1706dc18b91e782b0f31dbd64358d6ae7edb7e8 +39dc973ca173c564c92ff13e56dc206415198dea13dcf9cb8a67af542efac923 +369061a76351da95da7e2e95fe0e245ad0671dbda13efca30a654c37320b4d2e +7cc9699c634d129622df340923b7eca09e7b5961bb33ecb62c85591365a70b93 +ceaed2c7cc0339799783c1047df648349d9c800bae1443589f423ea385798b3c +7bcc72cebcfd2bf1731a488365e50280ed9603b4c51931f91920df1a96bf62c4 +8282e4046baeced383604f06e310d9cea008ad5765d374f854fb5fc4ba116d73 +2439b37d8e391db3f4cfb4980fd6747d3e86aa425a5b4ede03674f404026a74b +61940470546d80f7aefa98482cac4d8880aaa329129aae1831c26f91989901f6 +72b414ea6dc7d8468d112521f57ca320dc8cd56c9023c496cfef9588778d66b3 +79c1ae217e9b4706be2c7bc85ce7e98c7c58189f994450ac8ed2d2b153aec4ec +ef5e8c68866d27e2e77b7760c8911753cbce4994eb7ce82e6b73e3e3567e2ca4 +4fe75a109a4276a6e7abb0dbd00b48318bbbdca6a7d7dea749995868aba5a1fe +50ba244cd047fab144d67378e0b21a5f39231e7cc4ab9cf010432ac20ee61599 +34fa8142a2166266d0d192a502790ae0af11ecf3c94c17ecd26182d6a2a45bf7 +85e3abc677487bc20d52eaa378ac3088706d9b19d7a52efb495e34e605c00597 +faa503dabff584127c2a479075f89497cd7a2d54d02329b81d01c900d18f80ba +46d4f7e8a464cbe141ad02a64951a2927c8fe8f155cd6fa4ff3a44412a59db72 +b74499d0b52486f55672f075ca1944073cff76df0ea2bf64f534bd3ea581e956 +e102bca1029ea246b1f08731ec931f1c0737cb931279bd51e31f83094d47ac55 +d969f50def8c9a2bdb3e340710c2c1337986beb1e032fb9bebf692a5a42dec22 +24befc772b8641e0de28e4fd6271decdb95156908b4a53e92f732888ccca9650 +a5496641ba0673f9a10c2e8c544e76d33e84d1d2cdcaa23fd55bcc7e2969ec01 +c009f0f7f834796bccd863b7f1528c13ff1c499e6dd8bb4ba671dec515fc9ec0 +81bdfd97a96311893af9e102a1ae63a96bc22a2e8a2acdcf082bcba6482285e0 +bb744c99a227a18179e661f63be26e242b3e0b0fd2ffa982a1c4e7f051a66204 +c13a59e66833ce590439c9f26356c74765bc0cf209c1d89e2893f017bae39ff7 +f01d79ed9a99a43a3f6259abc9822bb01ba93eaf77d03cbdc5075860ed4bcea4 +378285716de824c71cbf033015522ab3e741aec821747bd635bada9dc243e58c +f4d8010383774f9f3a8d75bd5b9b8adb3ba2ae89772743fbb4713c46c30168bd +aecbeff476e0c2e6ba174f9301df9b295bb213d3a733e4b5d82d24fe579dd73d +87d647aa7cc0bb6ad46e4ff01d1bd6b8a8eaa59855e73a6e6a0a9a800842f7fd +86748489e1b52a597f23220e6b1da30a92df4eeeed744f56b5ed811292d9c831 +1863ccccd7672ccf160851630b01f805c77893ddd70307d3cadf4e259d25dc37 +5c0f89cb28b082f9ed1b8d61e52f01b7f66e401d318db7a93943c78e47886af2 +56611c91c11e628f9aa71f7553370a97d2766baad7f9e74a1457fba25b6a2ed0 +750694da50f77e4b3dfbf38af5983499046732bce1cb3f435626de6a7b8e46b5 +04a80d1ef0ebd4ed0780b0ebfd8c792cea07d2f1b7e2a63a104088b87da1e620 +29c2741c5de63cfd9d12b4c5212ed7022b5eccb7df7faf85e1d5c4b82ec55795 +de8fa1e4654b594b83069e0692fc4954e6d0d3fe94cb574fac65ce4ed497386b +16304392ea2defd78c6a96bb53bbac50ef7ac097ac45a902b39cc3be09d98f61 +2897ad7d1325af2ae4cc80716ba062243ac48dd0d90d86de3c88b16b4281d009 +08be72525f69b7b286fe28253c4be746976cec1de175b3aae41f3e56af915a04 +7dd0cdc064623e453db8123d652ceee41b60ee7db30d96ed641ccbdd70570c54 +82a169f1b9eac1e410b693301c0dd765afce2af327825cac271aeb79a9ff4691 +830517e26d4682dc30b60ab2555b39471ccb6f38ae631e7e1ef89fcd1847a242 +06592ff50bfc47c434142997a4b682da77300bd19d65af7d2b83dbda5b95903f +220d1a2d90a19819607c481fecb5921de9099a60150a1ceb1a7723ce8b182897 +14c1c181343ec220b929336bb2f35056706dc481164f581bfb8b9492b4a93a76 +f4227de34613379b40d8682d58f56419b7b4fcebb75e58d4d17bc1bdcc114b9e +9aa0ce37136b2d92312a40643559a8c8a2de53af09cf1bf9f978aea6ca80547e +dc97a08a8677bdb27a599dc6027bcb2060274f5034af37c15d737307bed56099 +8df21be030b0e57c4d03e2cb2e3de42daa26ba760ea7279815e6175a6e98e496 +618cb4bcc6c071dc2cd94774b5dbc0f912a7aa808e8f4e92585d0a1bebf22596 +82257ec17a792283dfaafe2e93bd4bdd75c1bc2190454b2da333a335cdd0dcec +6561b83cf0ccc9ac09e3b0b1e2e108f14b500358f8fba4a4c3fc05deeffdd4f8 +bf2d0cadd592f37933aeefb253c717ede98b3c870464382f1d97043a039e6202 +4ceb9e25a50834e1134b4c553442b5d4e763b2f833d494ff6f4f5fedd022066a +c62c41d32bac09cc0faa9f00cea1ad21ffd7b62580d6e4973ef82a0a88a94ba3 +481cfc5541b1ac68e633e53823abe38df4bc11da9e41b6bfa4671082cd0fa20d +d5aea26151a947f7345c69bdad50c344ebd7d52c13f0abb42669724bd7dcace8 +01a3727f02b2a9c7452c890425f74ec7a473b2f6cddb89fc02063349096616f0 +975b3f1360ffa5162b577d556c21c1465b997795313db5ad01a059d074d5186e +5a039181aeb9281717d9fc71f2ae7c423303317f66d2c145a432d40ea79b0cb5 +eb426a4dbc2548439630bd49c09c3ac56aa8c857658bbe3c345cdbe60786dc1b +aaeea1e8134c053bff0239c3b22d9f9811f0f986d34b10ebad0603b099e61a27 +f5da9d88b88c435ed87c4906de206849f5b4427ee0439ce2c99b3e52eb634ab5 +287abb15154d08932c6c360d85030a92bf8dcecad523c123c7d992f742823af4 +95a83c4fb38407e87946bedfc719cc3998d3487589d773ac6da3078b06cd5ecf +77ffb84a96cd2cca241b84a0d35b0b340dff221b9190c1aa2d6ada767a0cfe14 +7e3428cad1c93da6f3a01f821c6a410cf69fd03a2e46f17a31df33af3fe25492 +c6ee8dfe79ffb29561f92f50c69b6fb2ee2841ff6e3723e18f86fa65ceb3bc0d +61e2f19e9962320aa05e82ba9ec7fa6dda9edb2eadee478c2da6951a226ebef7 +b2fdfdea854e541a449db75700f057179623c32027ca181b1c8dd6d83ebb8bda +521d637b32d7bb0900135f61d72bfc97aad5cd3a2aff218547cb96386023d3fb +9a0b86d9ab93acdae4f4eb855735357b77a24ec5ed31811feaaa2f93d6e4ce51 +2c9fe4830743bd3082f52ba17e2a4cceb5bfd2c31099d852bc1d1d1d4ce92c95 +b1868a8fd559e2950a55a8dd30adb1f0aa7b40c900642e56c958764b81334ad2 +5386c2b94732865805b994b5e9949b7b59fa4e9e27cde175106e944d0466fdb0 +85a73fc4d329efc235f368515bf6a5e9460c9e997ccde7bb4691aa903911e9a4 +14fc8fea294185f8d8d80a2a1359f9707121661201a72e571810f9cdcf792c05 +ab01ae9c0916be2070c264b0baf34f63d78df7cefd0abefca77639bf25c32fbc +143a000e2cb1fba326deca8b32671af989df004e1f355b4faf7323da6cdedd69 +1c73f44cd381644c8d6987161b3a5ed5a36cb698f94970a472a32da1ebc8074d +e29a2d9967f7f3e656db600eb06daa0778478ab53b653d19cbc096e39945331e +0d325d2667226e85f7d5e3442e70ab51c294b8eb95edb631cccf964fb8fdb8f2 +83d6dc2150b8c1c31f7a6b2990cff2dad2cce88d8982c4f01da6f41b271f4d43 +4ecea79d6a7c3408d986dad00d2173d387277e35095513a67dff237c7d92b745 +f0ecf708b72515cb9b695e73b321247a08834d084600b3eb7707b9f42cff1205 +814c1d788e3ba40d49b97f15df97173f17918d3e4da33485081791990389e2ee +7350ec14e7d2311d7eaa03718035babf963053ec12e427a0e503f8d0aaef29af +ab22a7ba4410cd40626c21d29eee1b4c5b632d68859d314670891f87f097e293 +80a0a248dd3c0d940f119bab3a42a4d5d62990a03d2dee622e14de8ed1939658 +4db30c49e896782cf4e451269bfcc00f5525b1ad733c068798f41579ca6a6ccd +3aebe7de7bbc0739b45cd693227933d8f36ffdebb558894780fdd8c2f58dec0a +d78ed417b05e089bf1c3c9fc389787a1f510b7c8f103b2ff8fcfa06aaa41cb22 +68939a1649976475b1b3c90d2a69d30ef7d1b800c8fe250fb605f04fba577776 +0cdff81066d7a7703574b0407eb78953dc8a21ea0864324e65c75060fc889f0a +a8d26a6342364972e530cb822ab91393e298075263a6f2f31c2cced33c217aa4 +1b15e0acab0f88706b40b1bc490d9304f588c2df3331b47af241d0136216a1fd +8869ee2ca67aa0b9f3e0920f815ed5f91bfb5b3701402ccdf990d0111254cd40 +00edc94f1960d511583f82f28f71c30eb44e1366f83f98b8ce38bc0a620b07b4 +9a0776d358f6e3d3ef6f145dff0158fd839583401753fff11cc7752ca1813ce2 +8d9266aa71bc27a6cdb2c3ea9bf486e4ce62a112c65f44649d7bd68d8b1d182b +1b7d25cbee30bb6c56bf8fe290fb44946c5c7c5561d6c24e97137e915449ca81 +ade634ff781cb95ac4c43ee88c6c8bb0a5fdff6d0bbbfcd5801885b1bb4f4276 +1b6f2c117bb90058466bebc36ba78a4d229352347715965ade47fdc175bdacf3 +1de2d37ea1106e0ef279da2d566e42f98fe6e5fde8e3a292da9b327541b7cfd5 +d60538874042da03b15ce640ee2d940ddfff12ef13580efd2efcac2e779b9eac +3964ba7e6ca66e05cf3673c49a18e35df6c69f9c4ce16ead461bc5b09e9fc35d +0d66dd4fb6d33066c8b15d6704a9890435742271ea33fb6ac8e5261c2d3db0d8 +84d4ed885d5d4635a4e4898be0eeffebfc0ba8a90bd92bee924078802ff82ff9 +afee85f3a4676be2300906b95000516056165942ccda64e891325dacd9b73750 +5039d2520897cc43d9d404c299a9ee3884704408417d64512d9a6a2afdabacf5 +6ba334c51a72fc247dc3a079e3133517055b607adc13703fee0dca0f3f8ddd59 +8656337980bf58f3ae667b81458d7d539bbea00ee1f0fbe756a22cf51817e7b0 +8a7e28d2acd83b912365aa69ec031c135a5160fcc55a5f9ef4d023c92c2f4598 +8899b1abbc1c8e957c2a416b1be6eb1bedc273b3cc91b1a220bc40b96463def9 +58bbe5b6e685b472e81a125263816fe2e4165960b7851ea8f65cf61aaaf130c1 +04ab6c86ef0493d806386e889630fbf6ad9614041d92d35b5f788b63ee458ee2 +c6e3c06c60cd1f884ad3b1455043757e32e0a35d910c2fa33ac3abefeab3616c +3023179fd264c8d3155dc6c73901a109abc353d664fc19a09ba716398118c94b +5cbdc6c23364cbfeec6410ad2712edaa9932769f4c369877a832359d078559d1 +be39204ad8b6324806ae945e18fe20f6a757a0470a2667bb7284a9fbf1b343e7 +26df689bf6d69574c6e63572e9532fb1e38bd046936d340c55eb8e14fe2e80b3 +a06d4b911c6b3e8333c36b676ae8986469295cde55929a1d1d767476cd47557e +d438bec525de2d4b3f55ae52a6ff18d00d5a1e1abca167a7d8b6dd2c6bf23fb4 +ca20701c9869cb5e930156da33d3b2fcb70404c0df725d664deb78814e175035 +02639a8935dfe80b8809086195a7cc4c354bfcddf7798edab74522bf447f2d47 +52532fe58da8b5aa1c4484b50ce37678f001a6aa77edbc7f0e2ab2b65e9a4635 +92dddbf932a5141e9ca9f108abd76de7c6f73269fd00eb8211f3ce32b92b788c +85933381308f912476ab352462ce1e1d98fb6eea4f690e0e036f3deca9cf1435 +1e24a41320b229df0600c764b7e09984e96501c18eeb9d8b9b6636bf3b6e7068 +581bcdd1def63429afb5aed8edd44646a6dfc56b4f82f49d5819cdef9a6f08c0 +6c559f07d3f09c2b5956acc01544800a24d0c22b00cbb1c06b119521b967cb62 +2981313c666afab4c96817c230807850620fe00bf98be25defb29670cbc61440 +90be418d8263c478d879bb5ef72eede7207cc7b2dea21957e9c476608abcbdee +d50e7d58160952ebd4e840d604d28d68292c556dd79340bae75c318a9f0b2f64 +f3616c680235bd7d4470b7e440bc8b37f351780aac3d311ba51d56cb5267fa2c +0c45354d73fd084635552bf78898e2be90f5d7daaf9353f58920a0fe0de56eed +fdea94349d207f4a5fff48c14c6bfe03eb9b051d28bc950574fde10e2e5e7cc7 +b4d9282e005a2174c09c62adda2e15f87360d8c02030de0b16af093feed4c409 +b908426705ddae110aa3ed8b1093702d8a50c08c2358b932e9b98b0b6e7cbd13 +7b6b2aa51ca68df71980ef797fd483f8dea3e44357451e2b834dd0df380ad9eb +e1a974f1dafde3620fffed6385b1132df572cb35c705614556bd07129c02909c +2bcc8c5aa450e94eef375efd8f77c0a8750c45f45379af43a12f288ede4a0935 +8c67eccb2733446f2a7cd0adbc989b21d5afb11fccb57bb350a39c13b3970e90 +17ec4f1e0c2ab7fe6310a4345d1934fca54b386305f015ec87cc15910c323450 +e1cb60b5a8e0dab68412dafc511811d7fb2ca08d9338a85bfc050e171dda308d +4e58c9695cc8cd6ae5b14e1e5c47fc30e2f38d11c6f4964fd16934a8ffea5726 +8e489a334d073fac76196db7b3c8c6d4eb1b21171ba9d711433dfeef3b7bc0a9 +a50751154d77ef7f6c6be0e35fd0d983a5c03bbb35b7afdf952a9a883500a80b +da5f65cd7aaa71e5abef7260a089bb730a5dbdde0a86c1e1a8acaf76f998eb17 +55a0edfe1207c5692c992741e653480788accb3d8fea8ffafb73650ac8a8c349 +664e92a2a8de84125c75d6155bb6165aee20a0a8ac09ede3a1fb800f6fdf0b4b +4214fa222a5cc6c41f7f7763891f5d578b6d989ee6fa56d8e0f77fb09acf241a +88f5a24d4c08f569c4a305162247216455c4bf6e529128081b10f5cb09f748b8 +e264ed4adc3a950c5ffac368799c4c031ca888d31ce9386986222dc3688f1c22 +82dd221f7463ec3cfdde846512774cc9ee1b1a6a2091355b09a33d4ca8538237 +8e5babc5eb20b1883bbb71a6987aa178aa4dc2378a344b5c6c3e214314c9ff3b +dad4563fbe133fd2faadc70b5e36ec6de0f2d757d49b51c623d42f148f31d730 +a0cf5953840e388b8c6f750e3dae0677a00f78cd81ec1a76dcf0833dab08f3f0 +17b60777617649f85149c20fd9b13dae3efe3e8f1c7b801c5ec0a4e2ece7cc00 +9453c80674657d535bf0dbd60e31a2e9361671ebbd8591034fc5d77951ca9abd +342d1b3ef381ccd243f083b3ca5cd79053a4b1efe8a668b73e9295cb78a9ca0b +6e90f22fdf826ed2561f5b4bd0e6d1acb2fccddbde5db08e82d9113eacb6260c +fbe7af67407eb89e4f29b5669f0172c6e4b1cfb81fd7d28ff5167111b16ee4a3 +49d5ab9408be98a51aa4d17412f0d23f7678238bee914506ae72b470fb581a89 +8969eb6bb0137f9b38873cb5ecb0501e49dd3704719743a5ba4ec9bf5c7d3973 +557888428d30d2fd228127ed32b484096edb0c8adfcf6ffe8cd030f3d5410e62 +2fe54d615272a7bf503ac89d0ef3ace83754978673f9db3e005807e470ea5b55 +3649f61148d42e9e6fd19e4145980c7ecff2bbd8ef84b435e6562a920e88698f +7d1105af11926cd6180d6179eeb68823d99392dc95a948e48f3533ff1c4b2026 +b5ea505db22a265d56441ab455024f4263c9ad36c3e25ce067a1937303f9f216 +186ac443d0909a4ae76915584bbef1f884c321fb823b724c58757e619ffaf201 +17e5d826afb62d2fb7a1e115429191c80aedecf84cc71ac9e7eceed3aaa33838 +861d5699440962f38db466528bcd883ad8385e5b8b9ae1fc891152ffede5c2b1 +39b1445e0da532a4c9d19662c7b9af3a158ed868f5b11d284d19c850ad79bfdc +fc4b44ba68537b205420140e803a16eb78111fdbf1d89cd1efd2663e3e306245 +84a5e70d413f73cc1f9392610d0c4a9a0a3e4e32906a058d8bba062c94fcf4e1 +e402024efb1b7ff8379500d16fdd85b556002de62f78c827de10fc2550bf000d +fe81b29747882b8cab4cd04acbd92f009ae3f79956996cdd6cf5006e200caf32 +e014fa4b4e67ec87f6b76741006fa43e17f11e0aba57592f481bfb8655bc3499 +2e8bc3d57ad02b4744e1cdbfa0a76c543bf214cb6c637eaf4a958b337665baf1 +b286b40fafd6d833d45b4feddf163bea2716d90ddb483f8978b5d92d8f78d13e +9c24b1044543b289efe180f0dc7fffb90cb99f928458d36dfcaa18145b130d7b +6b57be3f81244f6064b61f630af5e876c8847ac278dc25aa942b9b90b25916a2 +ce48a2f2546056f7d3c9e0f637b52eac424c3c7b838b279e9cd310a520be41ab +8c7bde64af685340f44d0d5e4bf793da6d7fa368e9ccec9c933251e56bbecd77 +b0a3a4566dc074e2bd55ec1adead11e4ec91937c8924b7fa593b24ef32db66fe +8b27d795c12db95404b2c66945a9c3124cacb24311fca2567b10ceec21e22667 +8925a85067442df6e02e21e10d6ac641da354c318ab4f244c1c2dee6af49732d +3f390fe6ba7c84e415b35e390ee2037026c01e2fa69d1348871b867a37ac2bcb +df84ebed1024ee8fed087491c8978051c47fc1ab12a4deacfa17797ded28d929 +e212172d3d8efc3b04f5d074ca57271e604ef5d0b9893a6dadf516fd75cb84f1 +237ec510567264b2f20ac77c21e0a623ca2e05f50bdc856d7352bb03dfde6a0d +b16e1afe6d3b6cee4e695d985b7fba36d64365c231ffcbb8be40948810e8147d +591bcf096bbf5d2b545c9945612f60869abcafb92fde6616b5f863e55568c7de +c6b413edc7473bb35c6907607ab5fbc91ad25f4c38707f57d22902f2519f9a76 +338a0c3630d101e49f14089aefb0e8d6c735493560900542402938b467e8437a +1089d9460027ca5851a788767167589784e55718d98528883657b4fa709f5451 +00d0cb2ea4213a44a337afd552b19c10e3f6dbd866444735570db480f037ef4d +18edcefd8f6b14cdba58e3fbf75b469364d0e69c92b8ba3895207d8217c72fb2 +6238e3c231451712babcf6e08c08c637d319867554b4426341e315217fb93c65 +bac24552f95e6890b9dbe1bf7530d720e48e1df460eed718b0fadd1960eec4f2 +f72742a1b8fa8846c10f1201b22c0d79b8c77350226476d4ced87e7b67649c9e +661066879ab9dea79eed6bb0fe1300a73fb3578c0628255273ae4cd379231e9c +aef0f8b72bf778bf14731c68ee50c2a2f31e848447190c3e42b5889f1623e196 +bffc1d8dd1323067e075fe70b4c762ce5fd8aff0e4013f47c2e2ddfd06ad78f1 +63da5f4065a272d91f296e2665b219d6e88c094523116ac9440ec2f9b25ade7c +5852659ddb699fd030656733c6d232a49e75d776a235c1a56ee2f8901707a40f +5b36ac3c98fe021bd1f28dfa10327cdefa5f06b471e8967eac5172dbeff6ef9e +bfe7d129e8f99830e4a12c100d6c5bef79114757ce26d8f0d67b95d9865c7a5d +c91c7d542a2a908b2227ef0b78c7a2bd562a8d73f9c20728917082a2c8dcb321 +de1c8f89588908cfe1a5833bf444f8944088e8742635774796d8d4a0040bcd9c +64ddab4db438402813b59edfa79dfe26afdc6a87093baeabae0c10305f70cea6 +5803702798df945f6f45ed221fc9c2537151d086e2df720b8c689c4df331edc3 +2abf9d322cad08e3c2c06921f3a2c9f7a13a4f51b184cb77a4e7aef35613740b +2bff9401d1488fc671828fef4ee8ac4fdd247d6b778e5df06179b5bbb462f2a2 +e2976cb8794041897a65bc5a9e1c561dcc34c98db07947a416c302b8f20a8614 +572639459e1ea1e510a8f8432b78bc5d1e294d8f57dfc956ef227584d236d0f0 +70a2aea00d94e48110decd629db3727e5015bb0c99a794106d1145fd9fa8f407 +bf279f7b1762421b1f3a1437018efc9704121176e2185065901df20159eece5b +808b749e7847b6ae9ea268f561b90f8f47abdb6528a21a714b749377a3350761 +08e9506decc618e42dfa4ee0abe77d1f771cdde50143913f0407023e19fa0cc7 +464e53218da799ffe7a232241f3debfc6f68bcdc45a73e264b675e3af587042e +1e35b346de4c76875c656aafe366c9097edd12df958335cedf7e25a72755a888 +78fb21bde7a863797c2f0adf73d3dcd928971e1543c594cb1a3a5c364840f0b5 +780b764655fcf831285671b076f7eee0f1c6245e47917124a832ac008ef60825 +0c5220af5e833b6aae1038e9f7dc3c793c7c1aceca66b3c6b0377a4acf9e5aa9 +8fd729ae8ee375e831f507cee9975b130402b78d84a9d685625ad309d078bc2b +645c48ec8503b02569bccf978689a6ad2e2e06c1978f10bdb20d2f828237df91 +cdce385991a328c94e0b556f4cb8987de3a2698c78eb2f2fef4e047292fe9832 +dfc6252ef732568e87aca6b40f113e45852b213bf6e3d1e822b61a34344b65b9 +c68246f682588eaa0dce7c1d1e6a3d3491c34f7df5b0a55da9a33f4d59b5ee49 +beae9267a4542c4bcf7d650e0b533db67074f7a889568dc8d55da631cfe65d1c +305c2c49574e2358bbab65e298b46eecac4caf9c79c918ae18626cb6ea3ea5ab +afd51c88faf8309e2cc5ea3bf72fa7931475882da87a9249cb713bd25ddd0f66 +c98e58dc0eece6bfc1d537f887887e3bf5f52aaa42254ceb85481732f4f22ad0 +c326321139e35d2066b859faf9179d497da1bccc88614d1482cbf349474dd848 +7cfa8ae04a47cc440f9c08b7916727fb9a48325d84de181acd84db1f8450c727 +92f4d2472826883094a0bd330e79d8e79aa7f0fb363d6f6432cf6b191877315f +13b0bd9c5e0dac052685f04b7314f1578e14042e777ef6c7e49b4b1c4510d8a1 +e97ca72c77a81b757ad555437123f371534851fb922fb8ae6eb861d4cd4f14a0 +7cd933d97c711e58704ed2cc1313f4a899b401d7354709fcb8c5204a5144e100 +fd49513bc03eb616b83fcb488905bcfc751efe672ce1911cd55c48dc34e5922c +1e300e2be75c97aafb6d2c7d8b2a27dfcbb59a512e6498af827fdcb3a7a3b572 +2ffd35467d2f4e23a1bc2af72efc4ed8d0e86e983e5e822f5d7479203e7032bd +1ae7a3a7930850325a42b803552a3b00753eb9031c57185c5ee5b8a2c448555a +91cb4522b8688d2a42c15eb2e1931fd963b2e10d09cbef03e4ebf90ff61976be +720e07614b853195dee2ededf3f30c750deaeeebdaf86cdc35cf6bc8f05d7e9f +35eef1e212b9c6ed696bb4673cd837a8fe736c883f042b0dd9f14beca6a1128b +204c2b57cd58e90f046d8ce6ea694e1b71ba8baf7cf6c3346cf0dd5642676b4f +f8b45cacdb4975d45edeade19a7d1970ad567e03cd0fa17222f638b873f60c0c +085b714c18c6ec4ac1213946824452fca1d2e85febb6c071bc80cd3728cbd8b3 +8a85376914273c134b8b8327fd591c5960a0ccf823512e936452df7302d19275 +fd19ee696eac93d10b3bcfec333e1fdb77439eee7f7ba673be0edfa26c52b258 +4f6a61bd87fc89f3cf7b662fa8760e30a800aa7d85e94e57749dc6ed26927ae5 +4e1f84ede593601063711a345afc9ad2daefb924ad66c9cf7ef4d7613cffb79d +e86fc6b5e378a0eea2c69df8bd80d3b34f5e126dafbc5030bf408fd0963e0949 +a537002f59dbc2180085f46bcf7fca9356dd630328b7eef27b7577ce3c168281 +3c4df17f86a68ca27e8309ecc6e6d580df9d6073704008714381148da19acb91 +ce6fd2afa781a092b881b1e75c4525e668ac8450949eb5b4e49ff38806574657 +d45062a294972c441f8c354413102002790c9d27fcccd3f98503d6cac0f9a41c +4966a3899636a40dc223f07568ec42822a05afd80e10795b86b05529faca9c05 +f956766457dfaf48992084889d76195cf5e72e3f689a85fadede52d52fde8385 +0ded200b05377ff550e9a26ee3e976d275c25b536bf429efbbe8084c8908ced2 +7091434606e6f8f76b7407bebadb2bfeb03bbac919875c308ea1c32bd56c30a1 +f61bbd705a87d63f4709d39100257c05a0fe66cdfdd0234cfcb67fd999f88f87 +c13dabfe1e7e91db67b83a4a7f5033bcca4d9e3ad4979b1091ba749e595729ae +ad79ccbe02adef217c049c29e05508a09cc4eefcc004610acd3f45849c631697 +68253242095addad40ec80726101b6d25a4e52e746a9f956906c32f2cb316777 +bfdf3a470df987b5228620332983f68625e7e32a9ca809f61e3c25983fe95987 +a2b032cba145d2a9a31236d26e4bd86d71ea16a0fd85b393f7e3e1ff5b6e418a +25b54766aee0d8272bb2d3c85401e788cb75bd8d676acb121198afc3179dbcdc +8281c914295fc4dee61d150bd8623011b495ab2350e0047dcbdf9a9db40a87c1 +fe9464ff6e95562572c61346b1a00f37c3f0333c81753cf4c5911e5e370c70ed +bbb4626b53f9716a3b83d201957059546ed22831f5ba5ddf5eda421b3167e5c5 +8e4a5ab8437540334a3b3285c1a94a5e2c87fce09d00ef5db6ee78400f1f9c4f +4cdaf7bb85e56677c02dd2b46281c64522aeb1bb1fc83907b4fedd6678ec11ee +46dacfa31b048910cc6c9463bbcebf80ae98304ff2ee9d5c05418c667ce54354 +d66d0c61ad5c8825941523ce6800c2fd3cc05a9bab764f79369599d055085e00 +8d36906da59a1fe6d137605dd7707ad144285bcf31a6047978146b61a4dfdd01 +ed38e1888896f8b02f0bd89a57402a92107e626383323a5fb2e943316575bbfe +b707007cecb0edf4afc52419fa8ac4f6076e1dea9cce97c3f1e60b2212c239de +b4e71711ce691ad89c42074ad4c9b9917b40119dac1f9fbd5cb3e241e5aaa2cb +ba248028a4ab8389fecf0ecbbbd9d0ab8450535f2f7c85c02db8c287f24ec8ee +f67baa4a0eb50a8bbbaf0841f4a24558044a0e41b7fb390b6512aef6d7795222 +5f7bc00e6a6b3e5314fac779a9eb11b38d36facb40ec14e0d875640c90d9e856 +a5a88a273886288f14d44d0d9a8d4144827d587ee2cefed089d6979793051660 +c322890d382117f38e35e643808fd66e48b521a6eacc926b748c7070b6f3cbad +f2a3dfe4e2706dbca9439ffaebf1522e180bc2876cf7f736698fa955fe1f036d +145e3216487fb904045d5533e1b2c3be21e1a64e96bb132581bf0180b8e370ff +a32192305d1075352f404f4e8e338ef2926e71118383a9b328f8e55a5a938c73 +7b7b771d6ef4f4d62d96d5bd1c64190fc6932ac6a91c92f267c502d3c1539b48 +c6e0c511e83b687c80a8d290702c26ed02a355ec420667a8f1ab2e201b814b51 +da7700c5fcbbf06c1de4b4feea2562d1cbaf47c4015b72aa22a9b6490e775d60 +f7b5fe4e7362c765a398b0c39b047cfc5ada1d8abd3efd2894221d1676f04e24 +fd10f66a7a185403caae0a233896a2ae721c0c74798ea526db2a13a419f60883 +d4524d068379bfa6effa715d8907e4729a99acf06d7e2348ec9277c295dcbf30 +879c2a7e7aed3bf984bd8a3b73cd518f8a4f612a179ad16b5c8e6fb0c8f21692 +c764a39fbe7421d2584c7542f9f3e2e76b1a8d81f57df2276e098df6f9a2bcaa +f783708d5d966883d2bafd88416177a159c304091202f2518f31e512e24f467c +67bc619bcfd5b889b0d83229b76ccc9db033745ca4aa2b7fa65e12421c95364b +bec1082d2828ac196ed6340d9c90bb5f102678640d3481397c077ea83cdc3ee0 +927dc768113d2f4deafc9a6a982e129c5000ee2f5051829969719fbe96bb73ea +c332ac4c81c52ba840c1be9cbe9c735639bd9cde6da5f0cc484b20ab18cd8235 +fd2d8eab0cd5a9fe4c276ad9af585aa519de92be8aaec2c7ba6185d7703c02c8 +2a829b02d2cfa16188f5e3ab80aaa4526dc74bf173abafd7104c6c8351f5f362 +84a3db9c28acd707fca8a97979607f4d6dae5b23e111639271f8ea152a6d56db +dd6a6c33c962020393e13a23101899e3d2d3b1be77f23dfe1bc8bb2c56fe0f8a +4ca063369a0efc593be649feeb516b5bfc6994ab38a75beab00afa4c406c2ef9 +a7f2533b5f766bf115a05ae0dd8bd4a0436cf2abb04354d54c82e3e706587cc9 +32f95a254041b036b14d249d49d7390593231facb2c2d80848e94b7700b06527 +4b833e2a22722ff90731aa0f47166fd4fd286d5315e01cbedef249c9b740278d +2a4e183d1148433cc20cd3479d7ee981b0bde4f7f46470d9ee2b6cedc48b0d15 +81849271ebb8536f55b6712a7bed80f2550298b1f81f3aa70d39261a187d7e6f +2097660de875cea28e5583f475fa4e26950853bf6fd5e9b9cee59c1371780054 +b2238f9e6c3c9f3b4a1411fbb89fa1fbcd3052d1893332063add912ca1489077 +9b988149bb9d4da1436a18891fc7f229c2f900fb6b272d55ba55e581f8d0630d +8bb6c022d366dbe8b4238058873514e0df31d73920a720f6dca145fbef4d15c9 +411f5e0322cc61990a48f98a63f23793318c22d178734fbeacc04988901481e1 +ff62d5a8c7aec831ab49c4b5721f68f693e442cbb62d13017ded5011eaa71f41 +7707b7915b92e280d0a7fa0063d90ced947c82ffb0a01b962d2b1aecdfb1839d +d0e8335124fe352593c9938b4f4ec21a4d04bba3a46826df0972c5d8401f6871 +5c7b4906a37608dbd3f630d8f3bb64247d8e198cdf8ab8f891e00aeddbd48263 +17227225811fe52a9de08976cefdb7d5e76db46941b9576e87dd6b400c64a256 +a134755011e3d4d27cb90eded548f91e1acd8ce08b7adc929c1a02b22d65f10b +bed695d8fb1337f715c792b04d103632223040eecf2703e597fdf30a8c42d448 +82e73b2a1c0a73919df7a5cddf25b32afb51f2d24dc4dac2a747cba641fc6fe7 +ec4ecfdfe98bca936ec2819ff6016a17bdfb1c91d893ff861a67fb1ba168c5ef +59f774d859741c6606d680b68b67563b965ef7cb98e162f307504fb77ba9b3c3 +4eba8e45e161f8977fcc6fc2f4c2a677d8caef269e49c9f2f9ff6a309b2c21e5 +c810df536db392cd1b7018dca670f0d484cb7b6ee50ea1bd158af5547dd96166 +da10d10acadeaa04eb9d144a0d13d7a8f80b3e505177b3cf9893396cab022350 +bc705ba65811a2c60fc9f0e6f044206dcf524323b5cbf547d13d54ee0e87f00a +d5a4f507757cef3b458e792cdfbcc25339d8bf388ca94bfc341d76ab42cad16c +3f37cb51c85fe91e387f8c1d84a03da897a699fb80b5de32c0573014ea558d71 +a0eb713c0499438120b4702176b39a69bbf930309a555173d8558e7df642a40d +d506f2498136a5cb19bbdec74d7b436af3ae2fef171244fef9711a9ae983e452 +20f3154be125816f948bb0d93b9853ae68c77ab71a8df0d5df10e4d6b7cdff22 +c3be071f0e5dc4b82293025a27c4ff3cb5209ced6295fa9303b624737e0f3e8c +b8ef7e39762c82c89627cf2e430aa0c339eee58b684ca7fa818dd90aeda2f85e +0844963d933da431ff54348d7d9bd3159549650fa956e1395abd116aeed54518 +649290b0b1f54950529f83b0d8d9620176d7a91b803edc637642c83a761cfc82 +1b21787f83920decfb906a5260def040e62e38135944df33f2c4ad7eab631f22 +6afcf035ff68b4b709311d9d713ac6cad9e7fceec73ae0abeb5fbeafce209148 +1a0e537bd666719b41028283cb1658f4aa7f4512fc61c7631fc4eda8d678e7fd +e9db0fe0f89cf941fe65c32fc88f490226acbcbc93e5ba23dfc83ac4a289870e +5ed31f2b5cf50a93525f381bd56d01bf11299258dc387694fc0cfd877eae3247 +8d6933340343ae8d2fd1740beb0eee04c44614f9c1d45beea74fd4c2d3f49d62 +4388241c96bb392add3896e74b93f670dd8a5c415631b2834b3b8135b49caaca +007feaeca5fb75d9c4423f2f04ef576eaa87b69ff1033a70409cd5ecc93155c2 +18d154bb152491f87a8a49a77c1b6b6bd09982a55c33601547db6c8344c0ba64 +007c9487105cfd10a7bc342309d1aeba097d21d9c1da6e1ad1b1f05b2364678c +e5e496c2e2056dcac7b5c90bc5dd0b0853e30d01800f91597206dc2a1bb5f0fa +d8735dae0e61eb82138284fc4174b009d8dcb57c96b2897dce69785a571549d6 +67f539640bb0092d7d130ce57428b10a985a48576d7f6ea6c4207a53bb62c485 +5275cc7334b6fcb89bb496f3889377c1b0b5719254c3b9b19d041fad4a399e67 +1ba4b04b4a62b1879dd7b04f3b93fe31a3c544eaf70855d695eb3112a05b0537 +4c2196780e52fb906deab5add98ad9a075a1dc44a5e6b5ba6ca0f8d2a634491d +eaca8a763311e9544556b65082f93074e5e4457956783c11dd6b1be5749fe952 +d2f642e8bf267e5426a0ec324af7d2e990254de48c505b1fb742652ac86f38bc +cc59509737401620910489d3a4aae6e84f7b7001bcd617b0f09b5002ad00122f +b1dc4c7db88585c31e637095d3d0dc7fac2337eb79f02fa62d13af0d4b76d43e +69179bca2b3685d635c6f2e1e26bf1a9a609853d1510fa03f78f0b7fb384586f +3e9c1ee38da709fd02ea0ff4d5ce512f8352aa15b232cb91411d1e95965f485d +7ab5421d700af653b90839773fab6d37538ae3d61d9cdef3bd4ff94ec113e9da +9a65f75abcdfac298717436af9c1a1667e7fe80339e1383bd3d45b94f76dd91e +f1ba70a8bc50b51d6b51766722802205c0fc5e8ea0514fdfa5d5b18482694e65 +6ff5d21dc785b278f11b386e5812d42f0b4505f896d7f22b4ba42f4cff11dbe5 +07a53031462b3e29263851e0c91ceaa0573b49a2a6cbcc3c3c1a9c59c556dc2b +12d1a9f6bcc751151ce62c3f30a0ef50eae7a56ab9eb35f93975fd3ad2e21459 +52d709f052197a64afbee9fa03ea2bb9201506c0b6441c9ef7250d73444e01d8 +7ee3dd07ca8cdd5549f62d1726c8d69833e0c9d2ff5af11b1fee0596853fb75b +1387bfe18c4c747f83619a6096371fc6f444877ffaaff4a8f412847409be666d +6f96f3a2a6bdfd20f0bd08afdd3506facd35e4b62c58b4a4645e732a9b1acd6a +cc71f018c9e0622a1705ca635f96c7315f9d876afb459641315bf4ca0c4f7930 +1c0e30a8eeb441218c91d12647d5bdfe2512f2321bc51968c257fd339a24b1b4 +203ba90691564a9c83aae4ff68664d03b1a95da707bfb90033444ecf3deb43e6 +412fdea0ae772206a398de11c52b652ac04499968e2cdd4345fee97a40b86567 +2ed4711234d27ccae5f151d1825af76e8624c0ebe4a5bec34b6998040c3b8292 +76200fc70a6bff7a15cebb81e8b52221a45196fda4087bb32d5a260d077677b6 +6e070d33ad1868a51f7201924825b04335bc192bfefb74e496dab3d54ac4553c +f959ec0dbfdee94289a4a2c166909c26c130ac3ad182057644c8c2dca84a3044 +4e86e891fe1b07729531642e7374c9a272cec66bc04a36db2d0b74a622028adc +d6702773d0c9b6750c28a08902fcdc9f8a290c80c0360ba8019799d33fa42361 +c66575ac108946c97f3aa027ff95d2a6753f9dcf5949df046cbaea6333f19716 +9c0593db17459534deda9863a74b496a837c1d667df9afdaf54320664d0319bb +3bd41ef9a54b4594e6be5dc416c275a73a26af17e493f77ca7ffbeb2f7abb317 +035c249b4b5a33757bf9601b4def56a6207ebfce6e073fc9427f95e4cc3799e5 +5eee6d0422a26449f713a74f0c114d3ea2e9b2e183dd857cf21bb3a53480b0a6 +9c7d8fde6da71863f2b21eb407345e4d72c5667137f83610cd2c391218478c14 +1f1f34be21dd6fdd444ab1c4b0a59439617cd0d04ed9fc568b0c70ab8222f17e +e10c0934f9b567dbb26ee612929ef36036727e4b787015c76e78bef4aee02049 +4896893ffa23af70b4c6363f7b20db155f496ed5a8609be1e5173ce968cdff5b +2fc5a3bc23894ec6f26b71a2ac555a5cac33aa9f71c184b8f9569d286978c586 +0c4d0be59e267ad86edac17b787cbb93dafab3ab4406d83af0fdc7a29b0a0b8b +478d2717fbbc87b305b3f3020c69c358232b5b052d4376db297eef247ed2dd25 +6437c1139017556f879427b786a15bda065a1c70c6dc959f8e0cf727bd50924a +b82a8c56c225fb35f49c6937495f2b6c7a80d6ecd28b0088b52558cb45b238a7 +dd65fc5f16ea69febdb60167d4de4785b1ed69c9f40495cf1aca058ae2795fee +4812b5ae9a88ec6f37f8fc2a964e0170025fc558a7d5e093a498b018390064da +45f6d3c9abcc3af22fb37946cc10ae42bd651e213d7e26570b1eed493c374260 +6e3861f1fa365824d012b5ba6b6bde3d198e0fe078c7c17b045109f6fa5700f4 +86e7fa8b9c1a5aa9a14955877f9c7ce8997cf709ce97211dae33e406979e83e6 +6ed2386c06b400c36404ac371ec3bf27dea61b15d3db5a2eaf68b5e5366112d6 +a18aeb880bf2df3f4c151cb23ed00afd1f41edb073022ea746336ccc2eeff94b +0c896643f9d44d67ca2600eaba8db2a75a18edfdbeef3e55aae36d93c115835a +a41cdcb41d00721efa83cf094a623c356cd01f9f3e61b52336e039f3ecccbcbb +c3db862117281a50bdecc0057520b748a4beabb24b8a5f2d915eae78b359c012 +43b351570dae60fe822219d20aa73d0d2eebfd64a13fb0f05512f1c25eb8cfdb +1f85aefe9cdbc6d213db2396580aee22e7f39ce8fcdd343c9a65f86263613ef5 +c8b1d3d2ce31961170db7f3a930aacc827643fddfebbf77d5a402be5d1000db4 +c80c05b38cb971bb260fb31f8a42750519ff7ca45076a75d3490b51cbcf8b47e +9c43f349db24dedd1c41e013de99f4a02d7afbe73517241dd78d1bb77fb815e0 +23ec47e41c4f1f8cc34b6fa12cfb9837e7428a0eaa9769e786818556955407ba +5079607225977b9d1329e9837fa6ade7df59a7a5c3c6a9de0791655b3a9c88a4 +b9d643f79acbc20eb60019d7afc63f30c5430f0dfdb0750a899347eb1d9cf604 +7bdb596275613295aea793d76f6c1c012385a29721cca1d4a49c666cd91e578b +4cb177c7f24bb53b2a096e7abfd475d8fdbd0bad06ac17be32807dbef46afef6 +743bfe9c65d9f41691f698027dade394fb03a862d3c8aadd957f2e3d22af692e +fa918ace6fce92a690b5481d88638747ebefaa504873781d51bbe392c8de01b5 +ae4efd418cddfb846ae695ca0c4f4bb18da6b54ac6deaf533c552d8dc157a233 +6382159f28a121c9f2f486f9ad00d487fdcee4459470a5f8e3d3ee056b7cf51c +860ee6e54886aeac337f26d1ffc297b6903ef5756f964318d3aeaf9bab264111 +ef2ad05e4666ca98a320e0c30bdecb5d0bb00447c26e72a74cb5067c4734854e +f85a9efea96a40705a62b9fe6ce93fdc47df59fde42c957fc276c86696a70d3f +3503a4ce8c480c2f8abb6b86d4c0b689db26d606dbbfb1ba22960631d355bd6d +f77ba316866036141960bea735580e6b306b30232485f662b05284775da99aac +580a53dc696dcc027a4b008c7f55c8224e7c59eb86227bd3ab0f45f4080f2728 +3721ce2c92b117ef4ec8540bf86ab9aac4d142c87c483764691656f7b95d4c49 +69eb8403eb6e52effc8ce15cb9826fa477dabe136c2915d5f9e03b80e83b7158 +013b8ef2817b1020dacd0b8f8c80e00450cdb8e1d794cbf23596d25116a6eb71 +6186870e761f3b024ef87136d248af0077422381ddc0d997c10677e5c51c87c5 +873b5354c2f429661b9adb4b9c7ca76ccc878daa248857ea3746db53b3a5cb7e +9b239744383e4652d32b75b75a4d678a4adbabe8e640f4e0a80fab602e09c81b +4c563db440fc714dcd23d3a7e4aafa655d569b7f6e4a3e02233027d740b6950f +349d0caf99ad47e7b40f3f9b88e1e6b32dce22027029ef7a470678ccb8651509 +bd9278055958c6c8802ace0c1655fe5e52a9840513b7925150d092a1f7ced5cc +9938244b0bd766dec4954ac6cdd1db1304ae781383d253f65bd24ed05875eb50 +ad99d1bce15be48a6a363ce8f7d1d89b37ca7bc55dd84fb7a925ddacb6134a13 +13ec21412cf11b1182c1e88be892863fb487c57918a111d4857d3a4740603097 +8456c2ad7efd34d949111de4a616362f218528474dacc220f86814f2543f5038 +5f80cb9d39fbc70ae1f66855dcc1ef7982b3488f719683aa5296e955d72a3ed5 +6259fc3f9bc41b0e42514740d750a7c2987ac132eef1f7546a7ee8b073dcb7cb +3077493e4cc2d0b8313968730bd2b0ab3d94258a840e25a52b96025704462c9f +93c3cd3c2f3c66fc7e954dbcd5ffcffa622c797544121f91db0cb7793112dc48 +6996c71221bd8318a1439007735826533bdcf1fac581e5b3b8dd3356e4a578c8 +7d73026ef076fcec3124917ccafe0bf56f934dd8b57e2dbda712020b1c4a7b79 +19d9d7bcb7d5f850104e668f597d1c6945aba72f2ac3fdd00fcfd4f3aa871eda +fa706e53c1fa0d376d1985655cf33ed3dc1791517e9414860e0ea2505d280db0 +864b7b02b80f72f10b5e92a7b79c71c656a14ce57f096ee937fbc8ccae999900 +bf31a9eecf2689584976cc5d9d20f84c3796a4c9c200775c03da8fd51644f372 +0ef4a6354fda3c562a001a95217b009a6b6f1adf1eda0ba99a5ae28faf22594f +d80d09ea4bc02bd5d63f4e0116ad29ceba0b961f2d0530ddaafe3d3b3df8ffab +804c7b7855117d0c0cd591b0828539c954e7b6c05bee6e8002f9453caec5cd25 +ab4397c807b2af43c2b2a883d87fddaf6051f8b2bd6d8c9beb43ea821e48de0d +83ce6e93ac6959d8c7e4088b12240ecfd6a02e0a8a452161f878f024dc8a0786 +35ec88e6a33dc633147b9a2a1ef575e86048b9471713e0c8cc202d56c7ba584b +9edcbfd980a069a994084180291a695144ca4e0ad3ca947180f6fbe8a709a3e5 +401e96b74f2009344d43723b1215d2a145d0e1e91985375efd8e340f01f825a5 +a0d457eb5c5b7da3551bd7edafedc14c3b6b9bfe7eabcb38bcec9f1f94439145 +a32ffc10032228b5d1154d2e22d2efed471a0651c3b9fb04c1910052d08649c6 +3d5b987ef316a90b2c1bdbcca3cbb12f1f426bdeedc8107c9f2538bb506c7524 +983e3147012dd9dbc0dafc96c65478bcf8eed378fee8a20dc9dcb0f229088a1a +67336bbbb67e68efa61fc6a5750c7b29b868eb5c050c493b97ad7dfaef8f75c2 +8a8092c5be3c1fe73d519c1625670c78c373765b2803b932dab26c54664699ae +d14e20aeed56b0a70516517a62473369e6541d759522598a0be737cfc0f4b74b +17d63a72fa6798b867a1cb133cbe5ea48401fd4646773d5c377628a2560dd870 +283ecba942f65f660a909811a5332596b84ac3e6b583a24c7c5ce30ed978ebd6 +e0ea5b8f534d586b97b3d8f3d9511cf39b0ac45a21cb831c81e8b78b7824b0d9 +211b916b64a0efd2fb710b6777a93874dd625311bbb74a04c734bc3c8298b660 +9cf371f8a04b6e13bb4c5cf308a042e4346959cc5e7209f5d7e2ac25911f4f2b +b14eb97582f80998b77714e872260ca785293e0f67aba0a232d677515c3e5611 +3bf6cc8c1b0d13219db4ec3d600392cfba7c3c7602d29ee0583baa53c1601433 +76d3f84601e562b73e389ec97a1863bd0063c5b2edbb5dbf35208a9a19291f25 +3913cc05c4ea5fe74c591893b53bd8bebbed59f13bbeada69cb75d3b8fa31afe +3172b85cc8863f52b594621f80eb005e0d038adb6802e1ad80492867eaf8ea04 +6b391ac713a3fc24c0e036066c8c1143491e8854a4e8d3a6eac1c063bf1cc60c +3333732f67b43bf55b43631eb2931a9519af5b44127b432871b99b3621236172 +d0ec4edcc0be44702893c0e749d7ffd81ae042be89442ed0d0f45fdfd2a34cff +d26e692dac3f81ccfb7a7676444b48a5ee7df7b37da76b1c7c50654cf9df7f47 +da61082b64748c038e8b6fb6dcc2d82446064d826fc2406c3398b5d24fc41ef1 +ea4b833f9c9818a78864daafff9bfeac577964ea167734f4a4e4fd85516a68dc +bc0a64b1d406651c9ec70e97bc15f4d0fc43e96bd31174dd4d0d228897a01bad +1530f486e86bde3b7fe8203fe79f3904cc70f3fe5b70a52cdc3ac40812974ee4 +3ee335e05a5aad251c22b83bb027f8fd6a695a85eed610205c395f7ebba3a6cf +27dec1048355636242f23e74b70640c1affa52309879376c911b07074bf35f5d +d74e2a963209ef85f1902784898da3d4f43af02744afe6679890b7ac96f3176f +e1cebe8d534617401e5342ecc07e115fa5cd1d77998d30c28da15b763f1e9412 +d314c535a574d0584a257487052c4f088066ed99e434bc8cc0f975436473f9c4 +17588ecc0c37bf0901211aeb658dd4d1b30a8155ec7ce8940f059935cf6ddb00 +e47d4da7428dce12920cdd864ed00fed8a18c39d32556a2a1befece0443beb0f +690fc9552f851aba3862083d820da90009c546c0f8d974644c3f2033a81bc38e +9432837e0469329715ad7c6d910a8506a4135fb4fd6951dedc46231de609f65d +c86d66af10eeff7a899f92ef897410d56ab4193039c558325c7240ffe9172847 +42076b218220db2011c9dc6938f41d08634c9e07a81e91753f595a2fbb72752e +0e2eb941101c30a26cb976cdd181a4d8fb0187092773e56b47acb7d6bc7c878a +00bf69eafe8c2fd1665c3fe1b6358e3b6fc761bb19d8fdb16b77272f28c0ddcf +db4c7afd48f12daf1ccee639e8cce5234f7e60905f7ef178b39cd17a5f5819af +bd6523b008e1e3fcb7ebf0a85e328b9845788b9743ba205ff3809cdff74c8f83 +ac937ab9b041f32e9ce0209b62d8021c5d05809fe51d277a31f531f8e62d2e0d +143125b599d06c714b6220981f5e8b20e64bfc4be032393b308cd99d1cda5433 +aee558820c95db7f5ed52e60baf77cd27a60db1d6ff7c907280b024e3c1d6726 +3f3eba29035bb5d70090c199ec5682ef5fd7ce0563c453eca594ab0349fa32a9 +707df207e19461c79c33b3e6ff2dc5700cba1b297d9d215dbc3647f7920b82b3 +1e7d22319352e83376b373197e03c4c42137754961ec274a241c492daafb078d +8f0b2c1127e57f13de96d2bc9be9b5120e063757fe6b05d4e5bd7566b22d79cb +78c01deeacd07d86e961d0cb9db376d61d1beada56b1a629a93f83405c7c10c1 +eca67a71aa87d7c0d28e295a01fddf038bad9b0de720718eae09d7edbf128a7d +da8d786ee0b16d4d21b3564133476ff42ae7d8a5347749ec2a2a4642e87e7b64 +e6166032aacb00247f1ed8f552c94f3506f9939418ea62ff14d3ff98158eee04 +24bd5e3fa77c2562cd5bc6c7f0ffa1838653713e87b1da2e1a4d202f04e60dd2 +66d6d48653caea42cfc43d05894d1173cee0ff773fcf9803c2e5c150385f0c8d +b67532b4012fd89c5558b045c3026017fa4cb17cece11712ab0d617631b1a509 +6677062be9a1289736fb1abfd9630274e40393cc9988d2589f22612bcba6b339 +c961e5a4e1fbf411a7e719959a322dbb622c8a9cf51d6f405ebebac19e6051ca +5b750d7506ec8a03cdcc8e62c6d7af9f6a32b0b585f66b26ca61e290e39e341f +0b2d3784d104f82872ba0e1ed967a064f708aacfe052002972006fe14cd4963e +1b34ef38b99be8a7a83ede48c85d5c71d69e0e4ae72d7b6b1a46bd26cc636dae +815786e9e0eee89493bfebb89037f3bac832781c8b1630e31542ef7cd6a483c9 +004ab161038ac6aeb38b48b8293ad11bf441db1fef2a168b77d69c4a79f921d7 +ab9f1cba257605d81928fc46c43a4f93d39b01b07ffd0006d38366393cc64b18 +d8b18fa2899b9178c40f008044fa0d1a41e879573171478c147cf71731075421 +650fbb856eca3b36a741e2077245845e074dbdd2fcfbbc4581a2766f1830fcf3 +3255695d54307eac8196cbb693d536795388233829cb670ea78b793c4c9aeb73 +f7e7de4860712a5fbc17ce5ad07ca98d70eb3c94a79383338199a56951a45a76 +6fee0d58788e22740f2568e515aa495edc80da6a84a2797c198cc1f3d6fbb2eb +893f79f9f54ac81b39b6dac070a763cc81959bab607569423d423fc8fe5f98e1 +4bcf769ea77c0d11e5dbe2fb539ce15e09b68349a925949afcbe381192be5146 +d28382fed48e03ee3221bec2aa8c7270f43c948320a3cd0b831e529aa585a7c8 +66f2edbc5b569d4d95e3ec52c8a7d35381cafac5c301508672352d9b0f582a73 +9564b6cca37b517019c7633561f33198dd54a886408080671e1e77c0d2e5023f +489305ca314ef082008d37da60896f6c4094451ccc52f7ac0d72286febd7c852 +5ed8f36974b846d64bdad643db37d8ea837387e100432131b11d5c42e5ec117a +d17b2bcceb463d68ae7aad5b877b076f34609146884f216716186f4cdf7134c0 +f72d36ef9696d2b53ec3a3149a5b17f45bad371cbd72f2699cd52636151546e3 +d22c085349f42ba0c21d90524a94b37168ff489efe6de3ce97679298b18eca37 +bee071ba1f93d7d2fb811987973864dfad11bb5c645ce0a435f1db7bf20671b3 +caaa89df0478215fb76ea26f00682f4656e63c358f3b0bc84c64c17c3471dee3 +c97400d051617c205d5815ba63ff38bf46f06a8fbac182a4ca27038b0c8ee103 +6a9a449cc5a9ac774dcb04bc9f48503a3f4a085114e2f190e57859724a8f1e36 +cf97cfcc15d196ef82aa6d2964dbd886c39c4e72e15d869df1dbce4169171f27 +68cac43be9c95e344bcf7f0af27b45d386ab6248608416be5f432d582338d3fa +c77b80e9874d5b65658698e21bd2d4ba153f97d21223e488d4c5c2c8a7520e95 +f6ff8b1a19d4cc920de4621166a4eaea5774219ab3efd4dc9202c5225d4e6505 +91c475337f68a2d870375bb8def9f4319aaec852b76049401c121568f16b9be4 +ed27ff64c810b325bca29b5642438e259135f361419e8b5b23f6aab03ac0b22a +348478b32e93fc448502b81b0626489f4a358702e7067b1bbde9448c4af59d24 +a72c83e0042ac510c6a91e5a9ae0a69d2be865505238e396006527756734e924 +4e883e05abfe0dc62f9bfd0e8025172704111627916379044c3cfe0bd1d7e2c1 +05adfc871ff2db60351210af676444b37ce21aa14f1879ae06efe7b4338eb55f +0aa768ac12df6bd8b87feac0f48fdd26f6d2de4ad88e898499608cb770f754d5 +3571822bdb5de28107b378f4b1bc67c0106a24e9d1785336bc80d1da9636a5f6 +d25dc355a88023f7189533e4a2416755821a03a069681f4b0554ab826d2819f2 +a4cc0726412e1d2a0001a3ca49709dc21e7032eccab2f58d80a8163cc8129684 +b4277d3ad896600f610b1883cc973f8a975e328cf4b069b44e4d5207ce889bcc +49684bb2f1eebd711c8adfd4607abced0fba91b6958bcd5874b01e8370c7264b +9cfe66d1298374288f3d3f399700fda41a7b193411d1873d321e846b089a2e51 +0426782a79990da94d6182c912fe9752a93d6de0d37eee602f0907b8cd2f46dc +ed1179536bf9a3b74c0fbfe8974173a2c630c7360bd90f9c697b1d5068478814 +7806f05c70da8a11ef065cea507de043415f855f595aebd10ad001a0b68cd5a2 +ea7858041a9f40f05485b0385bdf08007f4213ab76c70b463e7427b79f826ea7 +ebf94bc420f700a50a2bbf291c867d5b181b8738738bbb76d93503e7c603a7f8 +354772c516443fbd33382b7913840785e5ae794fe571eb3fc65070eac273f00f +d12bc28451ff8be0dde26dc63bedb66acc6570fb166a583d796fe9493793baf9 +6a13bce0e7952fee6c6700a9180f5ba2d0cfb2963e0cc8606d48b9be7bc99c9b +efb1a2dea357ba87d790c52f7a90a2db476bdfb93f48910ae8cb5e91d1d146fc +04736b13a017ee2216f286ed57965d2017adea323978d3fdaecf864b51fc9aff +cc24902e266b084d518f1f063a2d0bc625ad9b108e322019d1ffe9a26aea6423 +69edd0537d1097bbd66dad8d859e7f02bfb3a77762907f989cb8579a352a0719 +969abd926a2caaeb9db6852b1494277fcfef88795af85f0750856b9a764f94a6 +5a120b04e33aab0d36907b89bee7586021221b27ca23559ae68a208fca16703a +2fd2f1d8ceff5274e64c441befc0ef7901e5ec1be2faabb271b3801c485713bb +8846c95c6ac596046cb941fe5a5ef828ead0808f0dbe808e96b5c48253cdc9ec +a0f946a3877a9a0d61c0ad150f50b186f841125a311d606cde70d36f7c03ae8d +027f88c6b92fa0f2d2b69f15a1563d5c76a3db13f43eeff40c9da317e8e0c93f +ead28d0fefb5a253a9e998ae1cff676dfd88f6d005b148948b7407cb24285302 +35313ae2eb809b59813c15ddc621a69cb03e022a71dc1212627141a77c2441c4 +39202c7f4b0937828648544b05288337535cd3d4d2b80a0b3241169c8898e4a5 +db36b8230e8e56e3d0cdb214df9ab611003063037bace671454a70c801aba2af +35048afeb620dc4fea9975bba58857ce16d2439633989d9306914bb002b376cf +00be076bead119370763b131621c4daccf9ee58226a014d05c428c70e28bfc1c +e9fbe10d94828d9510c22a7155bd28d6abdfb16e486322236b678978bc49eb1e +8572abc47de533c8cb98d80b4a529b7d05fff2302fa2b099efbe64f56186f14d +56771ff9802f23c1302732931a28bbccf8016aa68241da46b03c352237bf0182 +90f3afae514d05552932233857697a0aa8fe291d8ccfb8d85c5790157afce28c +a0d50875e4107cdc0179afe2290120c6ef96ee34bebfccfdc2d47de8cc301c14 +959a4f14717e9bd54454f382394d0c9d653357c683d65857be45c662e8468bb4 +8f916c8baf08d028e339e64803d910196d19335a65f83230a9e6c2be9baeb01f +9776b81d665f0bddd9a1a0ca31a0fb126b1aed8ffcc297786bd29cca18794fb7 +04231664a4cbedb3b41ec2d9066e6ca9d1b694a8d7be8973e9ccb799f79ed2fb +e63e114daf8c937e361d4b7e0fc4caac2b87f0c9406820e9448ea9ff98d053ce +9d5a7db9118707bfdda8f701bf6bae1021ca34b924185aab0526b046ea4fa65c +d4412f43cfcda0628f0f5790976cd501621f5ba7937e6c04dd6700f9b35f3a52 +62640ee4be7db358b971c2aa5df1dd7d090195fb4fe96c8908d24529228e7f7f +bfbe6138f00143a76b3c09e29f8eda3d5c630aed311c3fc3c9c57b48bd070b18 +b44aa15009176d0ce7ec488c945c51b26950d522bf80226251fde456d1c8399d +7fb77759130de5e1620a47f6e8eabbc2ad48129f32e97974657c8aa6cb2e7ee0 +959ff4d70bb8b307d2b6fabbc887c04a6e95a986ce189927fc97d8ca7db8febe +e699d3d193545b1937082373e930af3db6ec7e4eb8c8e1d6e5615b93177b9a2b +ce0d7616642da91de69b7ddb922a4f47eda748a71eb4662d7476ac5b15184acc +7bd92e2542f853d72f1259020f66b782f83727224470405099fdd181dd4210f9 +6e8e28b257b8444fc35053a7da19361b01bbc3bfe0f8600e582620d1afbc3803 +56359cf6e9f1964635e0e734d7bb9a1e4c7d704426b8d2a0700411c226e13818 +f739cfc023921809d6b1c8639eae19f014a519d6b71133c3e12451d21aa36cae +16f002286b5aee0bc46d5dc92ae3779d957212fb276d86cd0c6cec26c2bc2dfd +cc2c9fac9ebd5b4c7324352806a0d9894a1e809d8c9c2b1a4b56780cdcb7a548 +fbc3faa955088fa50746598b134f64f4d88e8599cc48a5d5f86f05f898f5c270 +18d50d256d761964c12aaab06befc98a84307547b80839f8fb1b7e6553d7e522 +c641db4ebd8faba0f24af058c6de88f1ddf478641c513423513002bfcba37ff8 +2336a6ab4ce3d926ca060a4084f3beb0073bce8b91271a3b2614bc0aa19013ec +694afdeca7eead2a6527acd348d00458649ac2e475e8349d186ffaa64f2f058f +a8c94e7202a8141f64ca347dfc8a7ce7ce3c9402072e188c77290563b766223f +deebc865fd7ffd4507e74a972bdc5ba05f1595c4603627e07871268392522a65 +93d3035b5f05e8cac3d90e3b6a8c8563baa8f13d4d8a878445d230f71c257ca4 +90d72b7697719b66b62055fb8581037905a422baa45aaf39efd0c40fbcc7109f +dc2eb4bd0f4ac59bedd12f12deb947f2008088321be00902d555e22391a9921d +eda8691ddaecb8be07ce75f459c1a5e9ce7c57386e8629bcfbbccc796d3b0551 +e207f6e0fa063e926f6c663d576b8d6069c022a51f9f9c21147c7afbaae7f697 +762db69c73cfc80afa498024870e3b7af96203caddb5520bc20db4b7da0f3624 +4b20a8110e753d6129c9dbba86fb5581dd9be7a021fb027f5f0ddb40bb111af0 +a019900edecabaf3d5cdf84981fe2a659cf9f95a7f1d5146a566cff83ec3523e +919d4a6ae54ac444e1e7f0a56746850186d8461721656b54bb784960b5251702 +33d92e8c89680f0c71ecdcba4b15152f2c933908449052c4b4ce617fea02a74b +b715828d499d2208d85ef7e45c08858bb344144802c885d102364e217253a739 +2f6442170b29f8e70b4b24bfa97c434038364a0c52084c204a09ea5d48873d0c +dbdc712312c582f9a8cb516a5aad8e30b591566389be57d444ee22bf80a06f76 +8530bb9cff7cba7b8374f091fa17ff0c1755d6917b073a2e167a82e381793592 +cfebf89561f0fdb63044f7636424bd0e406d622f957c740e6f0d3884702badd1 +2cfbb07a20558193c10e5cf372010a7955adf5d7e16e66c732ba52e3983026f0 +002b39b62b628dbbd44d467904e8726e79d79987812f07ef14465cbedaa19476 +5692fa39d503daf1f3f0a3ae881cfbf7c6a0e4ec54d7d0572d810f8861dcac41 +e4efe176c5219721911c8ad2b3985328d49e4cc4380892a6f108c62d711a8d9a +c44c46936b90e4d1e6fc9cb7d01a6812d11a5bb0eabf497d0d3b1eb09c2cbe15 +823ed1791d2199481c08c1f284bf72d428650319b881fcf79934c5ee86885b40 +cc6240cb1f8d80b0c8f221d8ca58c228d6da93de005b11c15fecd9450293e3cd +5005cf191803a161dca15fc2d187f22ecee8335d58f21f69d15fbbe3c1aa3d59 +5a142f8c3dcb7fa934830423f072b0d7d5613c148a28806085bb7c18a8c53c6e +43821aa5cff8497822b48cb09ab2eca0fff054299726499124f7b25973cb9c80 +936aece707b66985d7bc56f2980444cf3b1ce6a462a5b78ec05a036ba12e479b +cfad5953786ced3f29d5f6e5b33ed9d46901de314e87b831c376a21ff4c8385d +175aa0568b1ebc5f890a213483cd218194e15bdc61d51feac0401432859b5dcd +253395df487a1ffaa708a64ce045ebf6c6dbb4c9acc91db63a3bc1680a697538 +f342ae8b6e022b1a4d77293f596365503d5aa34712345d613e92a3b214cccec2 +a40d0e3a80e85caea6fa0145a6489e65a252ce407fb0a3e1f6ce12d4ff4737ab +514065a7a791f8d33df8d52849ff5d97bfc8dba6568fb51667cd3f0179ec89c1 +0d656aa50b2ff5305168af18f77a28ac8573d8cbd277f8bc08482cc0f23bbfc3 +c62c400c5f064143fc73b04fe2ea7d48f823dd9631968048820d81e97f2d6046 +992d89770073b795682fe2fa6a9356ef89cddbd94e66c7a61bc6d3a3fc629643 +2d576a90d30cd1fbcf3d511e03374ca758a245fb43ef5dd1dba49072a627e35c +10f831569b3b1d57f8857aa5c7eb7c0a9767bdc44d734d3f0794716b23f64831 +0af49c83e5aeb12dedf627af214c7c48f325f1102545981025d38fa0bb579388 +cc5c94144f5643dcb8986714082941d358d35d2c8d8b3e5f731a9c7940e81a03 +e3407b740234a2e20f1a7ce7f32b57d5f25b1788bc242f732540f0344950a6bb +6bd5bfe7d1d62b1596c7ac5796ad727a47864aa730e4fe4b0b36154badca57a8 +3651d37f4344a6520c67b41b3ef31444399933ef13f053627d361d7b3e5bd1d4 +b94fee21034ca389bb4a6cd73c26021b23784bfa0bb621a17a13217d3cda2b68 +284f41b869b70ee24a3acf909a67686eb95805c8e7ef912d0dbd5c3eafd377f6 +7f94b76bd18f35684f9c4fefaef7829534900b301a0eb3557a73fac07a977f81 +b55ac50a1386c7d6a4019a8c3bec9bac1d1d54e68e53e15bc58348207fa58bd9 +89a20e2f3396354723aa3c823a957a133286080fbc124a11a42f416207ae673c +0773c54007f9420f92c6bce228f5c93248e4bf7bcb85bb79fc6694ed1bb7e43e +219b996905f6501948d0575358667e52445ee9665035904804d45cf926d91828 +8f1398b668941950ac0bb6fe53bcfc9fda2945245aedcbd07cf07f85a7981b4c +e9e84139a46ddac48b8421fe99aeb64ea97f954b758175433e584d60cffacafc +915b856e26dd41e000c1162f76d185f469d3271887505811e12e1558d1ecc456 +2de5bf7aa4c26cab047001afae3c5d3ec9cee9dd0b5edebeacc765924ba00624 +ec49223ca7be92cac4583509aff3016bcc446e14b5dd7d9a39007b5d222f70b0 +a977e0192e6080160412b520a8e72f7bc93737e344f1c99acb3630aeac72d60d +344d5ca010e962de47cda71d704587d266d0e584e17917cf528623677da03619 +813bcbd6d360d945068e74f8eedb6aebf69c6e2d2158b050dc402d55fddf451a +d0c1a407154b04a5904b6987662af27231cf49118603a4e5de4d0b5ab40c7ccc +71847ea1f330b2a54ce9cf1abdd13208a6494d36c3fad5cbedf46d423bb07e72 +8188f9bf937e0db8d8566efd8e056acdc3f5689c8e19a27be166a0edb07bba64 +3ea6b53c4632ae33e0616222a54391b8cca32d7889f95f0039152b8dcce8ffaf +c0ccd4310fc6dca19b0bb994ee62e8085f3989737619c8c516f7a6a25f9e9887 +fd60a30ccea017e50ebd5a2c32c553d0188cfa26796ab530acbb3eb090f88401 +12f6a52f0ca684d55ca2d414a36228d88a20b2eec02d182392f0924987cf72ac +92897708af33bdcdb18c7437d103fe4a96dceef7788284878b4876333de5af76 +4617fcdd491c5c8095d19cd920dd3ad8b5b71a375f49520bbb6355eac3a188d4 +fbdcd55619ec3b6305f50d818f6ee5b5ae92dfe5a7f4f209e9f3ccbedcdeb78a +e0d055c3729429e9ed3787b52545d480b5380e839374983b6224dfc56bc8bed1 +47c1a8e7dfcb285aa1db7716164cb63bdab011797c1a9bc76e73ab86958f325a +7b7e15e987e90622824f2a12a220893f47737fe5b5496696e7772e50a8cada3b +8c826724115a236c082389390fbd27b6c3bb10684cc720dcd875595b39a47196 +058b06758e80443175359c3402e4e84ab850e42415516a19f6d10ba52369884b +e3fa91eb9a38d3aa07b0aa9294b7301faca79b4a601e92428026c70a7c6300d3 +ec7256768b257ffebb593eb497cde45d9acb4b44cfdc6452ac1f9f612af2c5c0 +be0952971025e5919fe3836a145be9e264a8c7c36c658f2ccd1acc9bb96a87f3 +a84acaad0a05f932907451ef8d050bef2f693726396152031b1f796103ee26c7 +0551f75a9334d8fcad954997d05e932c9f1f3a96e74c44e04fd18714a03d486f +1cf8ba0688599fc8e6524e4d9beb6816a4e2030d8ea06a3fc50183abad196668 +f15bfa80281fdcca6436b04ca4312e7feee8ce08ccbf90b1638b9fb57db07975 +5115f9fbc599449bb101a7709fdfba691318060f52ba610b818a849d50d2b11f +bb0d8b5f859ec9ed3ece36411d3d58d58f14827b14cd5c2a0ec4dce72a73c452 +0e1dab33aa33ca4cd3dfdb103c5579bdf0506853a7d08821ce69d4614d1a7c67 +9e9e9294526b50cc284adf3eb0cac4f6df491756f1216105e5c25d898c70edac +dfe0ade3d98daa6c07f6b2f04d3cb19d108d63b432ba6db41e68121250e5ebea +3d85b413afc8d87b934d14a663a62b4b18841b78f5965eb483631b4232cdf87f +c3159b354b6f70c2b595f46f43fca2a19667b0f91f5ec7a31972b10462a6e83d +5affa53f7c8e4b30436f7da31b6c41b831b30f9d98034708f1c5c3e34c451bc3 +9aaff97ae2c477748c7f96afdca8655c9dbd84f30bc1b568c3f9b6f495f17e18 +8ce2286696cce2367abcdb42e4000dbae8bed2d6d187b7e9fd616a17df7bb16d +ddad03b29d51489c5092e032b6ec2f365774810771e2b03ce94f5b97cec5a896 +086909f0dd481c8028a720977fc8fbf5aa62f6cfd91a798210fdf28b3df8f4f3 +937e7306048dda7c69aa5f4912e7c6192e72b1e9700a3fe380b3c9b63fb3153d +48787b1da476fd22e986874e123e30e532167bb3f17323094fc84143ccb8d7c8 +b5ef54126bd9d5e3eac00459b3636803a6dd2b3673ee865b1fc2828ae38b74fd +8c0e3fdac44f7c5111d6ba2661dbc47a0d13e751b10de1e1346633efa2607a7a +d1db1a062202c4facd05e829e37661014675f2df3775d88fe44e7ddbb3aea3ec +27d7b4bf413d54ddbe1957cff63a267bcb8ef99c27280879f5aed3b55c288e31 +2d3bf0c631894b30e0c3c8179f277cc63a395d98b66f99a87351550545dfa98c +ae027ee68d26c098d586537a2b3f0ae3de112aad1ea133adb4bbf5fec1f1472a +b941aa2db1318cf1dabfa8ee0a184398f9dbb7e6d29229830fe091b487f04d8f +f7d1daee5253cb84fbe492a4d1e117bbd9107f9ec521d924f115441f3abe6644 +6a1d4ced84caffd29e221c1e42c7379ff700abe131de0f363226a90abfb0401e +970dd4a2727eadb374f5e933ee1a11e9e85a9740e0b9a850f3eda6e904770f69 +bc3edbd52ffacc16513d4eeaaa948e533a8d693d184660dd89ff3f945ccd2d5f +602cc243ab739b4d488e2577e58648d78716fad157fbb814e0c7991764a3e0bf +9d6da3925e634a1fb3d6de50b563d90dc8ae3be33c6369a1a96ba6fb8c16f2a0 +db154373adff4e920c0b32ec6aee55887d4670a2c2340a12556e5b9d688fc299 +283e19469a14a8068efa9b489522e2f44c293278d138c732129aa7d97a8ee41c +30d2f40e8a7e241ce4d1596e6a1cd065e90167a52aedd2635e7465144df866e9 +9dac70f78425c9e68340ea5d19ad3d0fa0f944d2ad489911eb5abebd7b48bb95 +6e8ac0948aa564552395de41aa2a72646fb369ae9d08958f759afc10185bab4b +34349c12294abc6802bb1ebe3357f3b0c0ca227067f3768e57dbca68c2d1955f +5d18a7be0b9805fc2bc4b3287ef1a9d16350e5997f642ed6a9bbf46a68aa0ba0 +80102f020e5a331fdf8217fc1bf0da21ea7f20e9be95c1b59fbb458e4a5cb47d +b38fb3a3c0ceac39788794e47ecdd42b81c5f8dc6b6e9af7349babc8fa79fc77 +df3b5b303aa5dd5a2949ceac2fd202423a918f8355253f20cd86d49d8ac956b0 +2993c270fe41c6c7c4fba75b10a777191f33618e4158dd046c5ba0b145a0b04e +18a5f4ca5a7662bf6b913975d6fa9b4d1e6b71f0eca1029ed9440c91edb1d246 +7657d9ecfd8981eacd537757a8baa5318631c688d1d865d9645b4e52ccb9db3d +6549a792a1f207df608b6278dec2956a2b00aa3783630f6c516d448daccf72c5 +3557436ae09b66e0ef1f1156945afa125eae9ced158b8301f19efb2daa86a71a +fce1b319f87f0955fb113973adeb7f175590020beaa16db43bb361fec1dcf3c4 +d21a58d9d01f40b86f5059c437ecf83367ea8acb91baf187e03fc51cbf4c07a6 +74c5f63e7c7f8400c171f93ac7d3de26d141938cfbd6163240565995f44a6254 +c840c1b4bd66f05c2c08b55747540d267deeb6673f1ed54ac99ba83d15d6354b +1df05680bb93b9237883261a3a475b138373c573efef4011f042102289a50dc3 +1eac543df910695b1971d03c256f258ca48878e6c1f3170017e3ee97b9b705ad +2241ac927a86b4a44f05f37d260f451c0fb10daed031d67872764fa273a95c18 +3e9be8497c3f68236f32027f8c01fd707d2cbdd339b07dfaef35f9efa1d43a24 +5aba59558c3c0b172e30c3a64ed18c9eb7141a00f8862583cc9ab16b9184e099 +10ff30eaf0638988cf54d6e40e2a0ff8e5832cef7dc239ee90fd1eb079d0345d +cdce0a6d9ec621dc6ea7aec3eee09eaa05cb6505865b90274fa890bb64d19d74 +a618a951e3b6e74ae3c65c84cb5d48ffe4ecb86c859cce068c1665c7aa9d982b +951b95e10c6ec1dff747ebb981b380056d9ec5125ce14266bf81036a581aa8f2 +3d76432c7e846bc7d737ef0f3b91262e7cbba277966545940c67cf4feb14682b +f557e45e6f44b120c90862f3f1da74e9b0b35571cca2c2860168821289d2f836 +897569d072774cecefb2ceb1f55460ea5aeb252a2a9f653c8b646dabb7d1dd53 +1e1da1c098cc5e5e41893944ebc6da81ce44d8096813f4323e97badbf6c2a118 +942e44874e63004f7b925d6f5b3a15a42c6808062eed0880a8893c816dedf674 +96f49c25ca5f2bb1f1f49b178490c1ec6aec6bb3590005f40f339c7efaac56a8 +8f132f9943edabb2fd1f3b8b1ca97c90d376f5f62c5ec6b3aa6c88ea7bb28eb8 +687e8d24498ce4c7cc7c2dc4c60beadab36d50f0705606c4777be8f391b78560 +56c87740ed507a3c4aec3c115f837de4a620b2b8a028e9ce52213f3e7c425e0c +a2756efdfd243e55e094020fc74b820530051c414a32129cea783402238efa46 +b98348ad5cbf27b1137ba5d7ac1ea2d6e8df85908325f75bfc130bbf0b1056f0 +f1815bda877bf922f7f71488cd63f22107ab224da5af9f0bd07526df7b78ea18 +223eea608cb614bd38228782a8f6dd42d559a894b814f08f9120ba314fc85d80 +0b6909c98735b0bea839012811ecda1b5ac66974262a232eb06daf952b70e07b +b417767fd420961262fc68c7f9c4084fc324d1b7c9550db0c3aa665cccdf684e +f077cf33dc707a148e325dd3fcefb13b3d531849202f83a7909406c1f2190623 +658c0f9e483b8ec4379f43360f31c1c259f4a8dd369405affa2fd4ff1fc6bf7c +57be200df6f16d82fe62f9daa00d10bfb79fe0351c7d5044bb6e6ef64914651e +c046e9a6e9544e7fb5a983007a59dc78efacd8bac06dc49148d0df947b24db81 +551c6e8d05a75dbad023f1c600f6455eb1783aee8e2841b63659c57bc309605f +e21524b5b59865ec7eaf6df1cac0032b10b9736da197620b86125db8a97f6d7e +8e305f92b4912641b692bfd1b98193967d2847edf3c7e1efcee96b1239cdd35f +f4c843564827f9f5adc858ba2b911637205a9fa8312675d021b259f56342e9b3 +95d3ebf837e945c7f08494fc2960b92f7f6bba9bc2f5455b5582fd670e6500dd +ce38653d5dec5497726c15f3ddf885302a430f9b7946bb9ab2d9efb3c3f81ad0 +2394aa54141e3849b5ed816a717044bab44eac003a8095bc03e6b6b11cdec77e +979fecf2e780afa121e03278fc99d25c0bd241c657558ad88128f0ba7fa7482e +e6f643bceee670e0bdd932290624086df2198ca3bcdbb976379edc7204607f8d +b0f6457b3bcac7eba6513e9b8dcf6a47c075e7418b0cade13c43180970d4ba6e +fcf574c4f9da83b289a7a6d2a495b6ff32316b905f878579ed5565f7509437fa +02a28c87083fda09105649beeee44fd1a80b0092f064f7600d3bea4c549e914a +d8d595d8a278aeb78b5751eb2feb3b8099ae0495eceedbd747361df15659a9c6 +4718304f7780a881472317605a38a9c3f7a39e03fb7169390a5282acdac387d8 +88fa9ac46d3885e65be61519c131016d65f85bd2d1d6b321ed9bdb5f7210c4f3 +62254ceb44ce75e79d8aebb96654a28e96be766c19439e26ffef7f185bf62856 +b0fde276533cc68618b17221426f86406a5b0c999f7468d764dd92a632bc5998 +ce34724e7ddebb53e9c125a2be5b2712d029afdba0ff9826583fd261c85a7951 +7e0c89058d87e2105ddd8ba7e277e9bcb1cea56d64f2ddb3a3e92751d718e18a +e8eb8d55d1a35edaff938c5f6d95ec089c727953c3ff6de24f7fcdb38cf73ab4 +1ebe06a67ad901ba536ee1d5b208b86e692498215075abc3af597dbf93aa87b5 +84876a167d593c5fc0c487235b6cd349d3edaab4265da66f7c4ee4967768fd89 +c7c28a64c97e20c3a34973b9142314a1511a6fc6deb13dd451ef69710513f18d +d1c960e712d73b1db1e8e534096c255c63987ab4d32e1a8bfe145777fd1ca548 +762f7b4f7447d03a61e770c12ace3860c6189b3d0e41f0551cf722cb3dc09073 +f0567d0be9f39e8bfb0f338d6efd8e1279cbd43f6c4a063819aca553c54aa234 +6eb9d433c5426bcb9b81ce88b557a2d59bc7863397a9994dd6bfd6c7c7faac38 +0b128642a86241bbf8a4ffe9887758f94a153d6b2c138442c5ae670fb50218d1 +fd57d841af8f328b33173e4b8ac9b6db3006741eb323a502045702eede107dfc +bd4081770e3d07dcf9cfccb7e56e3f0c7da3767ac373a12f3164f81b493f12d5 +49ac50605430dafcbd4a9f49edca82b594ff829ed3bae596a825a618d49a96a1 +6b61f8e8b0e5b3fa032561747b96fa1935d74d0130ae01accb3da668a887f6d0 +9741836de17dabb950d84738dc5ff722838b507dfa7f4a88de4d9aab12ff9a34 +1db27abb24fb8686161443341a975cc810ad1a7e352037dafc33682a5556e6fe +46bcd08277461c74caf2ec1ca2db253d82dc72ffcf5cd471900b7c0f2390aaa4 +eb6196020e305edce04643a2faaa4fa9df91d3e21121da099ce25975d4c950df +f59f5e4ca3f426af7b33b958ed1ff3e1d1970eea0b97da7212e8a42124372638 +cffdb6c5dac17629c3d04ff2344df5cb39f6f156b6b8a4bf38c77d421a26ed40 +eb2e4e1d274ce7b5934c69506c1705ad076c58ccc5e27c580ec2dd978dd1074d +286163d79baf91e3ff30a507cf1c1691f60e28c780b8f2b2cd7a66e18413094d +d4381a15cc3a2b8ca189320df07dd3a25580dcdf91a2b33b3d8fc89ce71cc087 +8c0d5d4fd12545bdc7fe4af1b9cba1652dc8c076df6dd029ad8b09d75631b4de +63b3ee38b3d133d0d3b7d6c991cbae09a8aca77ad4e0351ad54d2a4a1a2c84b6 +2a8dc9646ea4cfd1b66af0707eb5fcffa78223898c0f377ad55e5657661bc1de +e331cbd9fec4677181d3577978ec08dbda4c684cd0266ce6d1e487cfac64ef84 +62873d034ad7d22518a7e767ba80e8514317710a71a228f76a66ad59b345c4db +f03e056eb6c9b2c444f2199c8488c037c37934d449f0049e14c588523d9acc78 +50538da9ea98e537418f811afb492818c285bdb80a31987b41a1671a77ab530e +be57d8b71b6f9c95f7474faec60705c2132010887ad668b1d7d53e26b480590c +28367553ef4cd87ee973a99346fbd55a2ab67635dbf2df12d4ced638b733a921 +4da2b898cbd41632807b34fafda648b3c1f53d0e5c835b0cd3803ccb34a447b7 +6a5bca240cb0b1db849d40dce5fc8f2e3f711ff47e7b0e1a71cabbcb4c42e265 +1f482c194c301b4ffde9f787f9ac37c620ad634e7d1bee6bf1dc92acb38c1e6f +fc4f531f5e8959e55c5d6a97daf9b11841ee4b14c4ba58e7f0dc9aff440e2a5e +61b046b0d47d4ed606b4055077bfc0d7c033b3e4fb817a02be0891fa360b6205 +8cfabfa60198f426bb7ca31877e4273912547e1738446c2816ccc6b796898310 +ce86f1f01654cf02b7e6f647e9a884041655a76d9d646e2e0098b15123de9ece +8580c5e8b36946f2aecbd1922d21d15092617486d2a7da0419c430ff83a76428 +d183c15d0520b821c22e0aa806eaedd6df9392b6dd93db8f22072044883f7102 +dc2abf3ab094b1cff83bfafdbc0f115d1ca965885356039bd90c76a78bff2b7f +931ec1a762b750146183f4080b7161d9e313c90a3d0ba031dca89f5155ef2c77 +d1e9949d07a2a318ed5bb9f43ea2df854dd15c45c09595450b0cc355db139f6a +15792d516ffbf05d2ffde2ccb492bc5f8582c88695eb42ff075f1393d04e19e0 +5bbb51e286f578ee126792068106db3960ca7e7da8838c52381d1853e731f46a +fc759825cdfd1c50cca5e63e1a24a9d3eb21a032cd4333648ab4b6725ef7ee64 +4bc1c07206312e241ae8c4206f8d211752ac7cb76f2569e2213c113a3d4f2277 +2fb6c2df9461da1b36a0860cf2dd52ceba0cb8fa5134d94438458dc4ef566166 +0931f0a13a88452fabba8805471b38d776fcfc616c602f91ad0072b92a13da58 +08f716287712de4f6acc57630b3c4343c37c5156fb610f2455795cc9e6804de0 +c7b6b16da5b274460bdfaa1a5249a3219caa1dbda045ce35c3b34d628d0a6e04 +3935f09635d6063592dfee4e8713fb04a74e0bbf8bdd6efddd86d6eab693df65 +d7e71b96d3ab69d78763f6c06b6ee1fc2b8bfc274d33e58f7c13e46f884f64cd +2ff2091d63d8d0d2305704d42a18c353b55956f11057a920dc00a5c78ee5c61e +0ab73272866a3b5c6a46683cd4f761f267fc8e98a5ee0e55a9d8cba48cde5215 +c96d0fb18f757705697c13055d7f2af893a097b594fc5200a1fff0d231487f94 +c6217ad21609874754afb8de70a84f92eb3999ad348ee6baefb476097ff1cb8b +dafce224290bfaa04d3184d02ea2c8525232b1f62d8a3ebc5ed8d2aa1f7b009c +83d427e281551583ff6d1690692648d7e65e7c98b67c8d181ce0736f1518f150 +9c2b13ef0135118fadb78e58fb01f90fd846fd9e7fdea4a8cc481333305b1e95 +4d0037fdfb31d34bdaff1e1c0ad0f30683bfcb8510c30eca21008147a17589e7 +2a8b2971c2c6e8d45259be84e4884fa79791f7bc3abfd138b8b4556bb75e4f68 +bb934676f740e015396c5ddcd224834f53dcc17fb33bc79e15374249c1d06a1b +f20f3b29858ddb1cfd470449e098195aa1a64c187fbfe6488b89db49851bab87 +c77b617543570e105c27e7ac73583f02d0541afd6139ae5ebd8382464456731b +6779788412dfc026575e27a197c5295e3a261864c9aa91442ed12d3024db79cd +1025564f9cbf5686244000bf2caa92df14db97bd2a10535891ff3a84008209d9 +cad7566b8800ee7287ede867d79ecada749aa5e7ad22b01a9f211ab18e5f755e +6736bb2fdb47e4152aaf887aff350a7a74eb69430287afc58d46e2c171aba4cc +a01792b0dd4b0a67624d82b71b19c331e355a909eac5bb94802233e6e3310f97 +da3c5d40ea74ed3ce0d283233d1c5907fe29dad678a9c3309402167881d3daa7 +4e3fe4255ac1a73f15f90ddb601d827332115538f1bf93811a35b441e4442327 +d7fa2dd901f3d66b7e79e09f83f9bef5f5fe1c01fee76381ad3394861155cd08 +fdf2ec5778e4cba57acdefe6a35191c613cf12c946ad8b2b40b6026b5bd4b9cd +909d1779782f4af32d295b2e8f881a18d2cb0570104768449ee2e960f082921b +e9ad82731065b3c3ef18aba3f9beee050545d766b4bb012cb05e36c98916000b +22f7dd0d60090fd5812d9c7e0b7f109eeb4c225c9b6260f687a39429e4ee4dcb +2b1c5f8cfae108e005887b30a949df06bcfc34700b69a5103330e400e4666a1d +5c758b6d5c2ad8a733882ac3cf1e6a1395534c3a9300371d3992436227635313 +531d453ae6142bc47f086f805faae0543b21d52962343b25f64bd46ca8f63f25 +bec767324d38576447056a6f508efb68e491af661b46f7ba81da215fe797a16e +f03cfa53db0b51e39a7c71897ac5ba31d902964aaf3b148e7ada10fb7603d4c9 +b1585312db95625d45a286228dbe2217d6bba65c9a7dcbbdb7bacb5beefa3c8a +43f848f473d9bf37abe92a2ca91d26707ac230f577f7a1618a02d2dca08bb84b +3343f9175ebb3e89b36a46eb75b83b62df50b0108d6118f790dabbde765d53b2 +7cac6abe7b5440325adee21be51b9367eb9cdf8fed87a081679e7ae6aefbb6e6 +589cc42556fd865f312b54cff53284cdf8b442c4b3326eeb8d39abb1e0d2e95b +316e87b7615b0c37e908d4391f1ad9d2715e94bf8de57a1c624512c23fba4d51 +9150b26a4f13be2e9ced538d80ef807612d561dc8d3f5b602f4886b8c9f2466c +5c948ec6dae5b87d00c03caff6c7c241f4b965a6c6368a30013ee2ad5e1e5000 +94308aecc238f659e736965842b290ade6f05b5152a27fbde7a90fd97cd59509 +f5f05fab13461bd7374399bc6da554acd718e4f67d8696718facf56d5ac10468 +cac7833ba92c74bf186ec50fdbb043223974986e2012c1d18df40f5a9c52fd39 +97df5f9e5f3a827d50b6ebd6909e7a0de29fb97920a03e32422cd71d66bf5c52 +357a8d8eb241c6c8be42b67cfac2c3777a0fa43d2838db8250e2b5b8efd3c367 +80b19339332f67d477cd3600b04c05b87b7a41d0def6bf82fada771804a5a756 +bec34265b6fc9e11790f8d1306d36c0514f6bcc76e93b584bdf86384ac22a96e +31549eec68909fd34bfcc467cc742dfa628b15abb7aa6a181dc3ac0fd08a2097 +9480abc06fcfbd81e7d4ea358839db58c30c3a7eb5d698cca371f7630939149e +b897b24f6d957c084cf0e2932331fb5c0b501068b4551812a9b9abd4ec27df7c +e824d672ffe6e5971ecf816f447482130819902d26039390f84fb513d2d89662 +defd5725eb153a074c84dab1d4d666d6e1a4ae2b078ac16f80caa6314a1f63fb +6d7eb530ccd833ee1f4946790344ca86668cb3de69c3013c73c971d7bf583095 +539dbe02e8f18e2da3bf9fde9cc5a5e859f9e5bac8721e36a1d50192140ed21f +a6fcc212ed167a50e940b38a0ab78d3053507500d768d1ea9c7bcc7b3100a05d +1db9350ee33c7a492f4543b45e25740aa99a76a1dc7940b8b52883974b07a407 +df7560cdf1b103c75746fcfc418580816597424c0aa36e0dd38eaf524e593512 +174a0ebcac0488958b01c1199d786f93ccefc14d219b2dbabd5b50c57ac6c195 +fe51a6fac81db1fae5052f21b3af4ce8280bdeb5f27e15f069ece57b0b628858 +947ebcf41c69d0c023d67cd21b9e0db1366ba5abebfb9c98752a6c63cf1c8333 +d7185403199b82e9e5fa15d33e646e63459352f829fc039ef185e004cc63fe21 +bfbeee4c8102cef70f56aab4e35c4a7ad51c85d985f42d54e4cf5678ba7ef4bb +3c768056fd223fbd6ae0a390e0e7489f5582d4ad805a6ed2e5cc0502be6f58ce +b1e3de8cd4425a053f84ff85ca7a1b9c679b9b57457f91c441d9289469255452 +34c45d58ae796a7f21b960c8dd3195854ff59e6914dcca262af6e5db7f150976 +b91527a1f0f00caa0953e082f5dfea46c0029bed4eff22be6a32a9bb591334b1 +68da599128f4b31034e20c0efd5e532b9ded85e5633ae8631e83ec1d6069ff76 +aa302b99f88e0e4070e4b93e1cfe528123928ae67733bf6fe6068c22328f16ae +3fa5b130d9651b531ea4e197ae3d3c16948503f1842d967eb3c5504e13986933 +cc0a3228269139d68aaf3480875149e25acd6aa8e14f5c21fd12096e274a1cb1 +223159ae0b531804c1a8f8dbb9101d3d0e435292f0452990ac4a646058651025 +3ed58cc6fc71eea6ea99c6f96f029b65f1c24cf911a35076564cef64dbbf82f8 +7de0c4f2faf3e56a1659d2b56dda42a3f63e277645b9bcd5c92c05c8b05adf75 +35b3aa4c341358c7c7927b8e9937c087e5e142b14dbe5e5f709634ae97bc9f2a +a82a2f3c3dc16b1abbd1e3f33559f8670e1dc70a9e3b0b717ea458518357740b +75a9b2b9cb076e81bb95d786d4720dd59120200dfe860b6e40f2c723dadb84ba +e83a80a7c874b9d36a1843d3ab1dc330eb986d25d6e036940f89670cd41d7ff2 +0a9e19ee36a1c334c779093950bea2854369f4ef24dde7b17e4581c9c2f5e5d7 +49bfc7a6a9433ef9dc465362bb2b252d7505369b40ab4ed1280c690599765d3f +6c395d4f3955dc9e7adcacd0f85b34e33c1d5b0da79e54132e115002728fbcc9 +def9ad99c3c72ef5fb77d883f47e417bd26cc8a13824297bbe6102cf7f60013b +3410e61d06f4d9afe6d9eafc92b97459a0433a8928fd24240f6f3e388373efac +1bedcb5dad56b55d248dfa546329ce77f4f94c388362e836195638066d636a1e +9de34a86088831a498a52821e2843d704bc01d386e7f268855af107ab35982b5 +9a474a271c205b19ef717c66cdcfff8e53e207c2c1fbfb8129f045f0c150a053 +33787d5dd2d7322b3ec6f9193a891c3c1b414f27fea3635a1c1d88c21c18cdc9 +1805f3214e8536500b67ac22ee4fc1aaf6a12be4f8fe82e021a734937f0a05eb +3de81d728121fa862a4993320c1fafb719ef1851929ac2efbe7c1e8d2a3e35b2 +5dbe28dac5ddce834663b196e17be78fef40be1ff3885293dc9b6db2a7973408 +0730556c0b64d66176078983b062cb073d32000e12e8cce47ff23f877078b5a4 +2207a050c62e39733bcdf87f6b71e39758f531cf55a874fe76548ccf8ecd227d +9c0d76da8f0ea5b1971e71559203f2c731bf31f9563a58d6d110ea507bb7734d +3baa443805c67207f3337ffe88e0a052eab7b73296e7011fbebc3984abf53382 +1f38a1483b88eed29606b25619acf5e21e6764dfac4559e8ab2e8b987c05cb3f +23f7a9b18fc54c10e59b1dce3e3bee7299f9e98cb58df0fb48aa79c6b87476e4 +bcb73de1eb9603cef10b6ff191174e23741cfc9711ee68311a8e739dc52a1b69 +b6bd1afd81df4f6b1ae5df916faf6c6fa778f9330059fb88b5e97ba8b864e485 +b2747a1a7cf32e259ab7737530e55b2fe980ccc088c3f5e2815e960beaa9ecad +530436a2c0b86f3c3aef098a8dd927ad13f9ff34b87a1a9f07f455b913cf1147 +270acc6db471e53dc3715cff25ac42d6786c3e9d90ea77873b301cab084b1472 +71c0cdd6e088bf710114ac00e1d6d215e5445605034b771390d0ff76d2f7dc34 +1a065f905f258d223b +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/client/shared/lib/fonts/courb.pfa b/client/shared/lib/fonts/courb.pfa new file mode 100755 index 00000000..795ec5ce --- /dev/null +++ b/client/shared/lib/fonts/courb.pfa @@ -0,0 +1,1966 @@ +%!PS-AdobeFont-1.0: Courier-Bold 001.003 +%%CreationDate: Tue Sep 17 16:48:30 1991 +%%VMusage: 58156 77080 +%% Copyright International Business Machines,Corp. 1991 +%% IBM Courier is a Trademark of the IBM Corporation. +11 dict begin +/FontInfo 10 dict dup begin +/version (001.003) readonly def +/Notice (Copyright (c) IBM Corporation 1990,1991. IBM Courier is a Trademark of the IBM Corporation.) readonly def +/Copyright (Copyright (c) IBM Corporation 1990,1991.) readonly def +/FullName (Courier Bold) readonly def +/FamilyName (Courier) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/FontName /Courier-Bold def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 263788 def +/FontBBox{-48 -288 746 847}readonly def +currentdict end +currentfile eexec +f0e992e2abe69f26883d6a2f691cc4ffeaadae4ed96950027b000a0e04f88bf3 +07a055997fc4400b46368da1c0f572a6e1e58371f4770d8e09ba6f39d5948f18 +de1038883553c352f8e6add2a9df060927fcda05454a5bce5badc6153a92a950 +b91e671de818c860c77eb6b93cabe55b175ae8265971df2c78d5dc3bb7a23a3b +5eb80699e4f540d2aa0774262097e2f171f03b3f8143143f7f192c7c3ea4b3b0 +d0bfe6893744a6ef8f3fe2071efdd77eb2ed6a1f8365d33ea9a2e3baccbf0886 +890dbe8fd6ec2d9db9b8a11d6f0c2a5ee4b84b2ed02498706a8c6fda02e1ac8a +e43fe22852111c257d9da8a8d69c9fa405341c435bb91cf627e7ced2e96614bc +ff826d0ceae4942a5c8ca794b11bd2bd48dea7cea631afa4f7c52cc775c70f17 +4c36dd977c5cf62ef80ae874fe87bf798674a7b32d84da7c9557f87c4c8b7b6a +a061b8d1f83190fb4df552d2742fd99986e3e33a9a4c578d90637f42d84cd9ff +0e866d419216ac5de7308e8b98bf17ff95383454d45ccf07e90cb1a0ce3b51a9 +dd88c2e2b3dd662cc745bb5b4ec33418a1e4cf6c9a528e6c283c34b24da3eb52 +4431c4da3cb34a43339c606956778e666815be262bd069b1b5103abcb91f1524 +5bf33428d6cc1d3e146f0c711336b471bbfaaddb4e1951c8325801c2898c6dbe +b5d96418513226315c9c8bcee2f3ebc1117d5e136d8119839aefb2c76d8c8a37 +cea1d23467717a8398f2437f1e61a2dde224f07e835e67950bab0542fa635ca9 +9c457e420ecfd17797a5ac7d63b003e4bf6851400b5a9431d9e4746525107c4e +4529224ad6f666c7b4e8419a3630ffddc5eabfc0e3f1c089004b79b6ffc45d19 +7087ce92f5691dcaae4223416a9bb4836b5e4d3963dba28445d81ffa93d59c14 +96a8bebb0dd93230a8fe36bd1a4e31d3be4818c99815e7ae26023e5c68fbd21b +334b178ad4989c333c37de8f821bfbbacabeaaf49a38e875a6fd13ea6fe45235 +c96be719db5725ec6e507e1a64daa56bafd017460730b9befe29bb27115968b7 +241f56bbe5e1c787f3ffb590da9c3965c184cc5f94aeff1ea7b0a013caab3bd1 +c4d41e2f61ab5e2eaf1e9c075ca3dc040f988ffcb815622c7e0c31ed670a9aff +3833cc7707c2887f0de43a590344a70e014cc67dee79bedee7ae796448e61c74 +02f2f7e72f5db644c2fbc093f5ff5d6a787194de10423849768a48d56103bddc +598699a43094dabd1934e8ddeb284b9651b9ed215c9e3b5a63ac766e29e7f0cd +2a4f010df4b1114115ce819af6706107be602a21d002e1c45cfcdb568a1c617a +68c25f2e3e0781192c7ed85f449b56caee4ba991e1376ab43c1c556708e65797 +ad13dadd61ebfcdc57dbb59771fb0c8f0b4b829b6b4a575f17da658fdc2a261b +87fa8d8f39540f3b9a0cf46b59341ad320f37d71a8a9811f5f24b307ca32ff6d +e80b35ac8262334afed2567d691d0ffd933b26b977ab624d2757ef20e9ecc3f6 +8b0bb17594fad3c27fadd8487b441fd520c8feae3b22646d71073bf43ce3597e +6063e073db9ab0ab98128b97a84482edff091bc809452f0b2a37b26e5f9963f7 +118dd4f78d097efb864a5495f0104674564227145d923fbf39d1e85c78c8f92a +e316bd6b70231733d39c10590c070d173c7a4d10e08e63303a77206dcf01746b +1f78cdc44e06a26191024686d64436e519ad103349fa496e4159b3a436bde5e4 +20bcfde3d3cf24f50a1a625ee6274576104a3ec62c0abfbb14bf6dd280559160 +887cda1b88edb9dc2496813cc21e7e26fd42fb6770df364096d34cb66ccf8a40 +af4530facc5dfc5a672f5c893ee33e85a88113f2f19d1a40dfdbd2c1f7e132ed +3a2607569db81e7558b536d131dbc71f55cfcecb31137b0d807cb90b2df7eea7 +6e7790d59d7ea4fddd66247058ace1d33f6d8cbdff99be2840fca3727307ef96 +3e19cf0f08e953c85c4141bfdd8b6f6d942389ca120969c69f35c10738f5bda9 +b872253532604e5058fecc5ac4b911b3602546ea3a3b5f84dde99316fff9c1d6 +08b59bad54015883cf8cfc01f9828b9ce335aa26dcb5c6f445770d0fde2df51b +83a128c79d7a1351e6da950c256bf97c69f73e7161692c192778d3d361149c40 +9c27e97562b7e2ca2f0a498818571fc7eb9552542bf56c93862aa9e06839d169 +ad983d0a370b0655d45260568ebd3cc272c344a3d0697e05e27641fffbcb13e1 +aabdd1cf7f24a5d550700c9129b392746103afb0ab72e0f0305ee21eec6d54ca +bb0e5d92b7493719bce7ec85b3f683ceccee4fcfffc7d127ee6e8f76e7ab578f +80933ae97405f4e25b793eeac86057448882c70e3497d430f8e6af1246a38a42 +0231a4f8bc095b87ebdbf6b6e5f0e9e824595835e06224fd549b55dab5d72511 +a8829822fbe050dc7b9d952a1a8274eeec665a7cd924718bdc21747e43ae8cd0 +acccb305a78f6c201916d5db4efd23a890826b74b9402f141de37d254d7656e1 +093cdce592272ab46e2c9dee9c100e7fd1f3a558ab7eae233b167b447bfb56d4 +becc14a403850a481eb75b554adddc89e1e2d0c1a5ecca30f7c2183cebae411a +28ddbe48777e38e16bb02e1f62d1f9a090427f47a5da5bf867c04ae679617439 +b4674e92d80f659734b10d62ac5fcf1d0aec16297c11ba085eeab1c4a7017cb3 +d9653f6e8f77056074e3933e65ffa2b08acfc8b90599ed85f5d91818b80bba55 +6c05cd944be5e6d76e00f6df048992c4b293b83fe275cf4231cf0648f26a0d28 +0593ccb41a92b97c24a39de7886ba7f53924743fb66baa4c01ee21a16c66561d +4fd8cfd7a7e7f4386cb6d818277efb779b2b219adbebdae898083d26d561e797 +14553ff7b1df6523f5c50c8d7d4bde22a4c220f77d9c3416709dd5c4c6a2baef +71c8a7f65eec53d15ce0112e745418467e49172fc5cb0d5df2c000b3da184ddc +9a3b24e4e4c919717c9e348a1a5665d06ee268303c11ddc16078fa8424796663 +eaa26915db69cc77126df2d80dde5beeb879b9c23ff1acea4dd0584f45ddb29f +bca6f48dcd420b2fa5e81dfb3be958c18bccfe7c6a61016614017745a0f10a03 +ad4f56e670ce0a98a227feb9fb28b1b952c4b86bafbd9210ab745828533741b8 +4efed05f94d0aab602b37d7e9ea944138c541463621ce3ddf0ff99ae36f8b9e0 +c14ee7820eee3a45b8d69e8f65fd2288e6f1b7eec5c2a45822ef46148db12390 +e87c7a2708cf346e04f0bf81cb5623a92d17405cd0430df9d3b7cab3eb6115b1 +d18a1e8f3b56f1b93322cb091f1ad75e1e12b36f052592e6a0def7f5dd9e18fd +2f52ec209488ca7a954a04eaf4c6c50d2175657755512d43734ffd5a545cfbc6 +f9b1e740cc0d3a171f46d0bfa29a55287aef25886ff435f9921b714c0553f566 +fb8dcf761180c167b014b57ae4428ba4ca642c0a88226aaa4dd86f822e93f19d +3ddfa9f26b2a1079d87cd7b3c571f989b92ea58fd6661200664b36fdfb4afa4b +5169c09ff2182a2c973b8fd3db31d1eb306957cfc99b6ffc9c060cc2c77308ba +7f09373339b2a28eca14f263f91be194705f9b23915e2f6d68ffebdeb9b2da73 +ce80d19411dca457ca50870929f48c8d72badaf27fd8d64cbe2c1ce900cdbc35 +cab95fef9628f6c87fdb6c45e61e3c6b5bc15fb2583dcbce919786278ce3b691 +c0934f10c953d259848784fb9f325ee140f1c421d6d8a63ca4096c9c1ea6a5f8 +0476a9c4505129fde53639673371e803e60e3d337de079b2377d0bc9677734b1 +1188a98bf1d009d0e82d8e3d8817d465d568011a7c59fd2ffaae8d93379d124e +91b182018b5e50b8b7cb0cf1f914edc6b44b38419caf14bff525a4a5790e85d0 +0b7741cab4dc8711985ae161a253f878e51a453a8c4b0a6c84f533affdd0aac4 +3e6744f1e43904c009f4bf3d8a677d66659108b526ecdc0ad8a51d16de6f8001 +4efb474aaefc49626bf733937c1d25f17f3d30abd35e074527e26056b3b4e0d1 +d1787939b0c8e14edcb4061ea004993463249de82d73912bc435c4d792fae794 +7b99b3e1ab7e5e1018fbbf1003b9fa965d43593fd0aa1b568b593d9dae2f6acc +4a8b8d6d8b6b5d5fd2aecc392c7cb83588d250050dbed3b32df79de71ec1984c +e841adc77597be223a79a37ec8f5ac91b45f40943932bf30b77a82a2c62d874a +da8b86f910f1269ad594d5ff033724d3101098630d3728baf72fc281d13cde34 +fbdb8087c23d86fd0cce3ac530c5ebc086062ec32adc8fc2e5ed66f38d3b5a07 +d1f41fe240b3065bbd5f848d6c97f8b2ae149d07502166425d9285f9b9929100 +cc3b8c824c5ae124157f21d63c17d75990740c8e083540c0fdf55ab6a6128123 +894e6846d8f7098bc76ca1f696ecb31cfe5496ce20ee4859dac102bee4e9285b +2ee0d97409fe5fd5f7dab76118d8394d3c4e91fbc3a0bbbbf314d91671ea9206 +598129e121977b36e97a9e7cc3949bd6aa7e92e58ffdbecc7bfa8712277d2b8f +8e0f6e402e5e05b70db4d4d18b82a92dab7e712749b5632e62aaf26988f4ec20 +9755e47826073aa09c410741a8cae9ac19f0695f61db9552db60bd1d8dac78a5 +4a649f77461f7546fd35e33ae5c918d65418aca54cffedab20a86545a7d7970e +1ab75c12d09714a37fd516613f1e9ad1887aa3566000bf8a7c9751ae22ec3be5 +5f7e8c58229da2944051ad23625ec7b1c26e65d30de52ab5fee7a5d3184cdf0d +4acb0dd78ad3f79e2d6eecf19d8d45a18848611913336d25267ead7b1fae93a0 +c123c0dbc44f0178a8a1c31b8ca54827b34925b7b1432a029380e9571442a77a +aed4dd342f6bd1f1b773a4f1ad1c0d4c955a1faa001e2ffdeeadc86282e09c8a +ac6b9d886ffc443ed05966952482a7ef206e891c90b9dff910884ffee5c78de4 +ca40f6ce31bf465859c27c7b942246c43ca286dffcbb08ce12842f32175bfcb9 +21d324e0746ede76064849874534bdee62e99b2812d07314e76ea833e491b01b +7dc009f842e10b4876bae3f132f8ae3ac04304dbfdcb2785557e7b48c45d940a +45db8cdb374097a8c745ec7951e6e12ff3c51f0e0c8e7a82d3f77e90baa09658 +311167e0a688701bd62c3a598772e12c107deab4fc6ae3ce2b81659593e63734 +2bce989299c0cf8b815ec475e6b281e5d93725ab50f2881cd14588ba1cf800c1 +4656537f35711c98bd0d0fffd6fb6a1dbb5b8e3f3047d0ec60b902a64589594c +904f9e4ba36837f774951fafd3b9c99b0a7e643350fa50fe0d69723493507b57 +6dfb9c9befd7dad68d2a094abb1a7c19d8b89d6b5290af2f774dec10699beb25 +9fa0bfa8d76cffe9ccdd9a56e20dbd043bebcd61b4f8d795d6f273705ef0f664 +02ca640413e2b97f721d16ffcf103a49ca746d4f166b3a241a9d35edeff5fbb0 +19af2ea1e4ac319ed01a39ebfb2623dc69470d2c7bc38e876daecda4888ae494 +28e94d9377c2634402dc988423358bc949db18d55388126c982b5965a9ad5648 +c12f46f6e5e6518e323d685011fbb99c0456c4566ba542929d767c7bd154454d +75ddfa96c0e5a79c6bad3d0020556bda8b74e6199f327b0e17e5c3706c2adf05 +2007f91040a0f256b4d9748754638ff019afc766b12d937551b1814f28de13b9 +78344ae18668bd5f2792f7f12617043e40603d7474677f0b05967cc58a0ce610 +4c7e806f0646e6a631595384aba225d071848b176eba2a4232a2af75faef21b8 +cde74831d96c4682bc4c285ec5d4e1433b2750de64a9f42d0ee379908bccf699 +6baff1d5e115eb31e88aa4f123f4a9ab2ec71f3458001e53549a5bd512f27d50 +2f75d33db2732674738e98fd5562107aa071edf740e6fe4c3581f7f1a6bdea71 +11878ee1514d2a764770bca4a1db912ff98d26b7540915b03811844bb606fe66 +3d5de9f1b8ac6a46cb328b66151d5a7aafc5dbbef4931a94409ca6fa9b26c970 +f275431fbb91a35622d948fd939e56efb989f007b0d68b012a045ff725cde14f +9acc5df8b491f21ea3fc8b2b435eaee1ad74572cf52f1e913d44f4aef6df048c +00375d6734d0e829c0fed80358866c1988e3c09c7ef36f5ecfc0ed411e0b746f +6b04d7cb5f7134921969a2751074a3e33e9a7e2e68f501e66b71d3f68f7d736f +7c4cf241a6494045d87f7011a4a67279ac40d5ebd644e9fc56a97d5cdb31dc2f +f047589909a0a4517d6057e668f3594fef45bcdf30c854eaba5c1baad26e647a +097b4a0ab8538459ac97d822dda5827d96f29387b40f4b673bf3dff58b6845cd +3fa300b8cf4acd3e6301f5a47f1370c8bfb8bc8b3a961204e2fd696fda87c16e +30ac81f9d77634c5e8b19eeeaf9ecf43637aca16051acc7b63cf5b4fc157554d +e510d2a8f1c65369ce48c3233c445a0e4a81df26d68a2dcbdeee609e81affc6d +632d584b2d1e5939fb0eb3c6a7880ca593e99bb4d530445bf552e9f7fb0bb25b +b13a151832acb776c7768ee9bfb2d320c90d746df806bd755cf8604b2b0b8786 +052c5e8d2cb2f96c7876dff63f5ed31634ced7a1098d754895ac6f7e8f5f6a01 +494770c3a22cda0fad4411cd76fbc92b0c76335a9bb5b3818259e62383f6a1e8 +df4b1ce43717a343df9f91a5d2df077af4fade7cb9af6608804c08808ee2ac9e +dc25407c6e3ca02462b5d16e705f90b8fc64b7d8679f7d0de875b72f7c9c6a3d +b45e96e0ee3ee6f8cbf4c85f09746745ecbcf39ac3b7d6e52f3c5e79af0962f9 +91935435880d10ff0f00dcd7cf994af8c776700df9a07b6161f44d9d803300c0 +8fc227bad040c6658beb8bc4a51bb0adf41beb908d39a7d60137a43de5f1d97e +fa530897e71be24647b015cd2c76c0b0d1bd0f941499fe00ea4e09dd82910861 +e671f2f0c56f5d4a7f6f19999b4ed50426ce7085ff5ec9716f7393d604fb7387 +fe09bb5346a8cf2d054a7fd817e075e61961cdfcc9ff71d4651822ddc1fd05d0 +7d8a9d8d76da5391bd75ac047af65a351681baa87c9a6de0f1027cdf5266e68f +48a290aa2197ba3c66c575082319700a8527fe308c78cbb4d1e3a2543f9796dc +7105763fe7e57106179e22bf52aa25d472d6bffb0b906d24e788685b93211546 +0b97acf5adade19cd7cb6d9a5e7fe5012a3fa15e6e1b85648da877c1e3eadc9b +630d2b92f60189c1fc93a8d49b13c1b97714052b1976599f98dd697b9dd91a0a +06510ff600658fa9979cd633296db2a67a5d2d9c42fc530689167b7dce26ced0 +4d8a509f04a9cf65eba06ceac4c5e3644ca3280038626245666a2e0c19532c8c +720afd6d43b436a7ba1181ea34b3ac852481809ecebb4ded573b688e896ba021 +8a08eedf873e331fb7d57c2fb132c53f1fe70356eb0e8bc41368f966b3cb9272 +fb1f8e44c76f0b12c3bc79d848fbf93e55cd36eed1c09e800b2b8f53ab92d8d5 +2c6ef3fcdb64195f74eb7b8e7f2052affc111c48818d1e69fbbf38aad47e59e5 +45dbecd57c7c9a42007888fddd7dc740742d3ce06aa6370d8427a3924731ceb0 +6330390afe0853ab4646e48ccb5d49286ded1b38188a881c8af0808db19d39a4 +b3525226b5cdf3aa901217bef8a5392651e4fb4e8c1ef6dcb8faa406d7ba1d77 +4d13f87ff0c0064ff0fe0e3dcca2e79c124ec86ec13762b49208fc35bc0ffb92 +9b8a38465533f260166c6f488eddfa0be4b6d15b8b1b59acb4e8827655eccb02 +559e8b90b384d0f0115f7f44c7a6247f246500aad2fe475a6aba511a10d70650 +7e8035d4f83e33adac6e14fe40ecec89b632c06996f1d68e7a1655d69ac4f6fc +227aa5966547791a16d4416d785836b5a3724146a34324ec12a09cfd7519c05f +d395699da7086d56e701539e0363d71fd9b279027252c8ccfa7a3d25a41a9644 +7d4d92b7fad210143afb526389342e18b790671676367c6cb41c3417d75522f7 +2187d83b605bb6db3a695d6cca090cd353e23d0512c06e8810f0fbda1b19ea83 +ebbc1ffc7f90fdfd8ef644874a7468f121564c9b259ebc94ad0b69c83cca6e20 +11f4a698aa690893a2116e502e847f9b9990b5a4d3f533bfe5ee1b5436b2f692 +f6b5f6b779b4e59697ccd5c04e8c0464009c48bd105482773f873902bed5ca6c +b13a0d90c4ddb6ccc416b349ce7e2c8f91dc5219011ea6df871029ff22c7d10a +fc890880b9f13669c7a6a60da0f66e5474cc30ff1e12ab765aaed416318a8405 +15ac5c30d883903bc5c04fd20ed977e22482591a46c63ff11ccf18756c080377 +b4f72c4fd3b127700dfe7353adb29431a50ba9d0ccf764a450a9a57668095392 +d9f924832309bf16b8d17c0fe2e147b9afd086c605ed6998f9873b9136575722 +ea03bfe76571ddfe0c86a1b5ee8b3c0712a81b397b5e0e6068810b0ee52bc0cf +1ff6df62eafaca67e1f553316a7bcfeae787ac7bea86056fad39696b222e887c +b1aee0acb9e4093068661a6564292808535ca4c7b9271165c73eb89757db9438 +47e609ef5766f00c21cc5696a5872cf39ae59e79ae9b0854dd3b6ea7763f59ab +b4443fd1998d1c784d815b4c067c844d942f935123a0ccb76532f18572405458 +6eb065f20ca9f301fb04a0f05bbfdb167ed497dd191a06fd43c060fee5be2ffb +b804236bfcb6c81abfb5ddd864a61dca262b97c5db8332d049287c39e0fc8532 +91bd8e2731532d461bd22f4fe65603efbbd39715f38fd06fce91a0014e80e7dd +f80fb0f27dc96c6df12881a7c4f1c47b2c7b2cb7224960c44dc616fd8322efdf +1905121f598b6e0aef30353763662ea6687ba0414cdb45384a729d1e903c51cc +da599e566012592aa78c55e45808cbd9952c8c3b2f21d098370af67c2270f32e +1dfbea8d7fc0b88a491b4a0101ce1d74a10e27c2eebe19f361b2fa384fe946b7 +c9720e9ed02b59cbe30062e902fbd01930e66400d69c274ca8ea0ff6f7580cb4 +54d3c3206477f7b0dc20cb80055d470383d137d226be0f9a15374e0a0112b04e +f25db5ca9ee78fdf7fa7a8b3867f599a61e010d6ed3ec8b13e1439d3a231a099 +2179d4deaa4eefdbe467dd077fa49fc330f9e06a6aee7d102a3b55890e0aaad7 +e2276183ac7cd1259350ac2277e89bf452858d9418ed01a22919c9012daddc3f +ce9bd052032c7fd79148000277ec903093c227e52f19b959a99c7edf0689f4a1 +9d004980edd98997da23cc1ed63c1cc0f1e46340d3cfac421df31a95f032f297 +0c397915c5dbb92a8596896d1d114a0964926be4dc940e857c5a53cf8fdec3da +e2958089db083fcfcd3eb090282a7c978f3f58e93544c9173382031797bc2a44 +b5aa61adec96086af8ba5fca90dffc8d0f4d5a8a22013b2ea06675eed2641fc6 +03400edba05abcbf6a8afbd3c6319f23bde069c6721e7679610367ce47d40ff6 +9c018e23a85e2971e7136280bf42064fc33502e6c7375e328c32f03f05e1e3a7 +d35816e5862966a1efeae1eeac4a4c1a24cd89467bea5e9670da181fe333f795 +b6176f94702a496f8c4da01916dd5859f41fdca457ca50870929f49341d06392 +715d71e508f55416a59ebe5ba3c093fdadba2ac413b6238314e8eed5c7b353b8 +b09492a35309b3da82a8af47a2378c2e4ae452b5ba4d706ac27ca5107f98d4e9 +64300bcab484fdc8c9c967aedd2f351b54ae0ba150334ef42fe7d57eafbf1074 +cdafea5358e2239cfbe0abf635778065e433b9f1c17357e67f692f5e98641723 +24aa6a462c0334f2ef7bb30fef10929224ae0578fc49d68f7f48c91655371e99 +751c18e5f4c375a734404e533dff279c9a2692956957b07d11a72ce6c7ca64dc +8c90eca4cd037dbad39a5e6393ed0ff2855711dc7bd1f33f122eaac8fb2cd4af +ab6a00132c1300f152554b81a5e33e864f7baf93c2ae5d9feb5e2bca4f4b48f8 +c813c42accb8a9b1eea5a14f5f9795257d70d0910cb738a9d8d47146cdb5c837 +a74c0402493a3b3a849306cd997659088c8efeb0050758e1c2d8742f34350304 +8f80ca8cc9a9aedf8008579dd936b29e3f8495b61f0e416f7111124e95e9b0b4 +9c69063f46a9ef1f2ae58c57392ef498b1e0b9980f274d5d4504b47f03261e57 +2ce746715dd521d6d2d9ba1b570ec8de309778955e06f065a3d82ca42d0b8ccd +5e635b1165478acb9ba24f02e429731c315ef0a2cdaf185a142654aa9dcb56c5 +c82e44a81a57ba271000597a99f7111e25f7a4247d40287bb78478b07f2c220b +a4c43a1f1a87cefdd179447e9ea9cfa41aff4ad8d03eccda89819f0039637e64 +2a8f3de1b7182f4237c27429114ce1dd195f546b57ac964d59cb821b2261552b +c8498cdc5a76879dc4de1dfaf3dc15505c0d3b4cda3ccfdc1049a9a5c48fbcd8 +8b74208e6c99826053abf4c2b0973277ddfe6505bb9f77e8a84957e144516600 +73a0e3fcad8c597bde3faa249d2511f545c051ce6461e3c01411ce7945ea829f +d7f4ffd30ccdf757e7039df7deee4ef47a38b6f6f9f7af190b038e464ad3863d +20c2a06954a7f29a61cb9b7daa437bf06f8b6a34426e85c94c93b037098b9aec +5ffa37fbc51d19ecca38b26adce6704cffe57973a0090951da23385cbfcfee4e +4c1f040273247c1f9ef76d20381ef92c9f7bfe723e90e176a34990c19df2ba53 +b2d0a21f64d48d0f2198444c945084f568a04155292361de380eb864f8e5e452 +b37db08686546417a3b87dfd34686c1dba5aeb055d5841c30b1c8c1a182eccdb +876ec9c6a49e02e7b249d3da4061fb63a0342729a26838be79d6939fd0460f37 +fbf36c6a6a76c6a99478551b095c34df7d754a414ed5f0dd28a99519226be1b0 +da01e883e0d5b34e0f2a1a0d23ecac458f135173b7ab3f3c1d9441f8dcfb2c8a +bffbe97cca66b4a1a3924333ab8c79151393a21fa0a215577b808f76b31f5065 +43af482160fa036f80f8ac65fe25d9cd2963ca14ab51718caf8ae7d636fb442e +2e414ac7193fd67e408e86a034036f4a7d1a61557c11ecb9466a403e5b744427 +cf75d3be6081ad827b6db779da50626390603ca0f3adc54afac1febbdb78d6db +776a4fc4bf7e1d0edc29b39fd107dc5974d03fb34a84403ce3b2f603fd30703f +4d0e6c4fe5607dc36c530c88f6424c5ad080ed6b949e968be2b3d3cd9e719e62 +cce1dd547d54e39521e1028ee429689ea3bbab05e117fecdcb93ad8dcd04eddf +f5de8dbecdfbbba43a6f66cdbf3c81f572bb1d4568311224685e691cf31d5961 +768dd919a400b000e74bbefddbc6c9b83ea18c82839f55a3bd3d8b6b900460cb +b62526b4980837609d173a5870465d334de87bd11eedbc2f400c687e2003d74e +605733410e790c0fb5a28c57325916a11f92ee2b9c4124001af738fcb6e6c588 +d75fd336e5b30da46d805767468fcec686284c953049f3d83dfc986fab43eb93 +bccb55c9c0304300f81602a9b9d8c2233baf519c7d72d11a55a2b7260f763437 +cdccdea198ca7cecfd9b5eb79da4772e711c74138a778d6a120fc530fa5ad085 +387a944223ad6cf9a621052e33fa3b64f60871dab95423565d806a64c00b6ed7 +375ef1aeaa10ba8f0843020e3fccdd5a830d79039544981d55b59fc6f2a799ee +124640d4195d9db251984dcd0a0343c52f78904b9c688d2dad4260e7d4967517 +194c29b9313ee2c54939c329da64d5920d26a0c9718de120e577d92af78b8a71 +32180c1acb34d07b0846a34fd494078c06f3911a0bb4348825c3b5a0ea559449 +7ca555e36caea15dd36f778d8bace7f154f8a73535a845a9b3c97ab136eb96fc +276bcb17ee7f191e8441dc025b272c59d4f454278a75f64925e441e40ff9435d +a012b8f2a7686f6128346a5dda941dc2c5b7e8792ea8379aa91c38babc76bab7 +397661c8bc3162de6290736ba23fce40cb1c3827d0c65b19a9a23ce1b5b9cdfa +60a7f0742a4ed69ee7e8d2dc8857cea1af870f7998e6fabedd3cf197130cad2e +7c6d6bd75c1d24aede7d6e0160c67e138770e8ad4ee8822a8782cdf9e5e45424 +7ba28985a01dce99818c05f187e431d62e107b61543a83ee1f040d6e46b36a5f +223a0a35418c9d328c5ce67bfdde69edc88c13995d52c93483abea8c80e083d5 +a384b35c8d2f87deef4048290b34bf3dec299d16f37e1baf0b620a72acaa04d5 +fe4731f88411c7bb53c4768f85ddfdfed7e7696ab17922606163852d79e8bcea +e6c9d902108c24b4d83b5f325eef14c818bab38587b75532b9d38edee82204e8 +20f956e4f87cc7d033d68cb0017a79638e2360c4ff07a81706109beca9258c7c +a60d52f07d102fdaf3cffb1ad14b999234d302fbbe7d3af784bd5fd9d1dacf05 +5b192654b7febf7f71d88277b3990af63a98520f27f65758bd9b2e5c1fb4f940 +b87ad3da4c96f4e1d38e5a7ace307c73e82d7b17c878fc55c33a3699fad5f841 +f9e9d17d92a4216543db45e9f92ac8f36cf01f220e295e1dae16cb50986ab0df +cf7c6785742bc5e04086de192efe19fbb871932c8d992b763b226bf4f054ea42 +8ed3f6a580bb12a1a93e367a505ebad742ed63d4a9ef7c4da3a8f6eb55eb8cbe +dd59afaad1e24a8b87c17f3a9c245dc4a30dfd8b0eb424d94266d61e2f47addc +0a52fa4db7bdb7431e5f80604e95e4091aacc7bcea215e75a7eea59642ac0495 +6c08128c27c59089db3fd75f1fc8043d9636f4c0e3a29e2aa5f726d37876e6e9 +de7e578926359f3cb67ebc2e678267799cfd41f29de2cacca067715e79415fb5 +a5c06eaec36e4cd8d5c818312ffac88ccccad7fe46dafc3270ffcdd78c52f205 +04368ac9f622c1cb7ba8fc968378cf54cb42ebc9330062a9e9dcc466b674a9f7 +c455f575c1840535782c9f4106a47d5695a13f6fce147dae42e1b05784d0b66a +a0c3a36afb3b58469be79bf5887c606490c7f9bc66aa9eb06aae67bc3f6b2c6e +b1abafb3e128ddbd0985505adf6fdb4f85c84c6a2177e9871488885682125b3f +d7ec6d50dc6886a867e87122502d7a5ec8101d81150b7a7c7836ebedde05b5e3 +a2b6afec021c3edbe2911bc8ec445638bae593b0443e3407e3218d59eb85a34a +aa02d5b860324f28b7e8461cbb576fa71515af67c0f061ea0426f9b055f87066 +cfc94c2594cc55caf2be5dde04c6f36cf3261a6f9ab826134c9c56e6c9f76a9a +c88734a060a0ea4463ac6ceb6a1c782dcc199be95860539cbb7b2ce5fc5503d7 +51f0a495337b94fc7118f7101b837651776ec0d40f1c61b57d7e7e16a0e410cf +da4b0dff5728fee5922640e5faeed1e0d6b1e8b87c87e72feb3bd2a7ab8beef2 +c6ede873609fac5274bc1620fef65c7a9b52f8ed233fcea62d37f606d79699d5 +81bd29d2401feb3a9c32a34f15d0ff1ab299abeb05fd27cd6d26d8dbfd91fe3d +dc8dfb290df7a58b72dacb7c24b4067dca4197f298c43ee8f9cea520c2055cd6 +0bcc95e3feabe7e6aa0abbd41dbf4a26c69bfd5c7926c5d4ce1e3c30b3165514 +5258db44055b68401326873a05ab30f645417706cc3fa6522098cf253a851e93 +92574758249035e3ec5e7b3a03f81532d871cbdf738e66261f51b094c5e3e8f9 +480f68e8f26f68348ab9afbd19a49653cce7ffffe8911ad8eb2761696a0c4eab +39e268e261003e4cd0cb15fb36375ff4b2c39bd45710ed4396c1d89563ef8b6a +4e86a73b8d36465b37cd5a50af5f8cf613e7c5fb9db895c6c9827a6e2b1e681f +461dd52b5719b4d048dc63e47fa3aca8c8441376318be1358250f676bb9c4f8a +982d971649a6e687c43b3861050bf5d846c24ce2fdda4917077b1cc4109bd764 +c650199f51dbd309877c268e750230d507e1140caeb2cdfbe1a03ee1d0f4906a +645c9a378691eadadf8b1f291e32448f930e74133183379208b442988ae5da75 +22cfd3cc728a5dfa50dc4a708f25cb851fc94f5d82ebb37b08ea28b43a882d85 +b4d454ed11ab74d0ed50536577807e736fc6cb07a890537ca45e15b3beaf1c98 +07941b3a172e85c4fd7dc90195200036d413cd408eaaa640659e9826d9ba553e +215ecaf8680b04cefe02fb8c0642c028f530815b2d2e4dfbc600852a7412b963 +bcfa31432a96e066ed29ff731b75dbbc801442f521ea3f4306cfe0333b4efb06 +840a81f213bc075b113050e6ecf2c18163f3329898e167e36729340f0cf89d20 +b34019ad3e8183ea5f666cb5387ec8ca8a6ad62b93f3554fd43b6b1a21dac8c1 +75299570f4aeb3c51b6bc7cc3cb80d0d2789e99625a37396aeef59bb3c661761 +47e02c3fb22c4199da98552807fc8ab9457ce81ff4ea010a36b0e319f1e98bbe +a63056668a65b1822cb57a82551b1ab33fce67bc20cbd56e559bce3c2bdbdde3 +ef5d1f232eca045018b639b7378fa773c7486db53e1947bbd02f827a7e19883c +078778e5bc7697a9e474804eb33c2af722dcaed37cd14e8ce92d093b83335eb1 +a25a6d99c7e286941d682ab64f098e93a252f959ba4e9c3ae26dfe3ff8a1a3e9 +b78e85efab7f67e5eb32d1f517d62d35563092598b0748b26c9567801223e93f +adad3cc790b8029939db16ced7889de68a1767f700be22433b7494a079d6c85d +b3816641d6ff42b5a99e575161254ce929120b78f489a76ca4f3b2f1ff4eae62 +16c08518955fe8e4e8efa4cf3dcbdbf512fc6be7329bc046d61acbc6b19540b2 +52ad79177053337ec4fc094c977cfc6eb036b5059e14b7f92782299a40c88209 +f7021f3d155b2fc306e7edcc98f9e93a6593caf8b4e5561af4088ac9c2ece955 +1b15f8b538d7f41731dc09acc707f08bd8a59d92d7d7eaf5764bdb7c5e85547a +32743157dfeeaf3f7df8192a0da2cef45e1ff911d66cbfe005170cfb933d8bb5 +85d93708c87e51efb522944e2df9fcfac13ec7079e1af32d03e233af8ea6604d +4d906af71dfd8abee459fdeef767a385b15d0e677b5034c1bc91f047b46f300b +db6092c34dbff505b0897ca086377772ecb27b9ac70019cac5333d10b67b5b71 +482f241a91fda05af2a4abdb351c42672b580a25f01b79b8fede4c01051eb115 +c64485e3ba4fd9478f9172d6cd73198c318c9db59f71ad709b9d567b4e31e2c2 +8d0b93a1d24c82b50f01a070a952a079e1e7f9c2eb4bac979388d99a25577f93 +57d9179078aa0d2f7a8a65d58b8741244e3684285dda86cf3808e68b48accaa9 +5b3a91fa39542cd3c80bc5fb5d636ca5ecf506fe1e4e645705bdb10f9fc67a56 +7597dc5c9a1adc7b47c404c06ef16daa37d8fe6c952e06d056dd15008ad2e796 +15858275270c5804432e91c7adb467102e1e7ed962f04f3f6d39c6fbfcd93f21 +d11016f5e65e9945c1442ac63b535196d65cd3990d94128f3701fc32d1079668 +12749bfd5c15d965c3174221882914a1fab5495b5fd0d7a7fe3b11935c3aa6fc +470ab52a32c9a9fd1ddbe800b60f3f24d9d9147fa86d0a0925d7140b5a04a493 +f3ad02d6c352a1f6ebf7ae326f6ee88d7701ee907c88728150e0a2c214b13f12 +e7d5d83efd62cfaabe68f02fc23332703c02daf224cab53c624dba61b5ebf164 +0205dec482b3a52443d207a11d4b4ecbef3dbcf17d48759e7e1d69108b4cd456 +d263d15d719f5230cdcabe96dc49df253b44aa047fcef75ddf931cbd6f3a2a52 +c23eeef852c1729e23e3bee93b0a5085913f64b7c3dc650432ef005301062a5c +90c400852a7412b963bcd035e6942cc8ebba9a1e3d3353b26769ada213428979 +78a9f549a86210d53598cc1da57b8a7490ed6b8368cfff93578f979d16c8819c +80dd050fc4aa8ccb4f7b2681245451d0d13403841da091442013a6c5609c7d68 +da409a41e4d90f36d0acd74368bdaa75e618883eac528cd6cafd20754cea601b +33b0a58b33669ef561745830793f5a06e72c0c8718d24de9f64af17c50beb1f8 +cde6ed0ddc136eac0fa98d9f0ab9bab94d18d86a7907c2bbc50d69d07e3fa905 +68145b3c0acf303db053c8a0cf1d7619a215f6753f804c6739ca8c1017f553f6 +48d857f926d74d15812215b7fd87333b8f00e65c81fdbc856f1323a342bd0507 +be91b5c365d7f895e9c374a9b8e0d1413220403e4b5bcbfe5a5977640249a233 +fea8f1d22ac9f6e506801c4a68e9f8108af7ec2aec0ebefda8d1ea7851c0b226 +b3b8a76d93736c746a351ac265d9de903de0028a2013af8aafeafbaa8c2d1d54 +523925d4d606b13bd04f0e41fbeffae0f00d89c83366a1ee1e5bc0c18ddd134a +ad7c32a0a25b921b33d91846fe945d785888091c558e3cbdeb761922386ca63a +3ad37a2fae3f575e40d1223b416c798bc3732c6dff964b29a02714911858f156 +9c87d427f5087455da19f24eb75712692f3693f1d2ea5b3f40e9f9eeb0f0f8a3 +d00a0959ca4e3bfe8c4804a429ddee8d842c8de8312610e2cca9cd33c51a5145 +e7f8c8b97df06a0a023a43db46268c5bb2247df3993dd4536837eabd9c0d381d +da84bc4ee58e730442cbd7966e070d8be71a0b24b871027bb3d586d8cc2d6fdc +917ffb3e85d5f32acebd3093e53c83bfe41242307d774cb3ebad79ceacefd887 +57a0ed1ec8adf7cf1952411601ed59f4c4be8ddec78dd26a10c083f6f04fd83c +705ed42a0891a5398169c528f7911cfc467cc6df8bd5c835494aa1a7c5bcb836 +40e6c78e60c19dfce997ed6e0dfc88fc01b0349e0455d4f22c06c16f7b9ed61d +9ab3d5a4f6e2fa2ef4628431cedf579db02dcc30a54d6c10392ee4480af0998a +b823cd0f9484c3579e90dc412967faecfa026bf654602f3bf6b7a6ec54350be1 +c836493fc0ded9384aa53b770cc0f008329765ab5bbb896c3bc12d21f37733e8 +7c7258778a68ae72133f40defc3a817a72c8cdfb2c2614bb84fdd568d51066b5 +5d9b4dfaeab9dc73b2d489cc1cd29461be050cc6e72b15bc7fdabae2b7792d34 +427ac97a386e31161bed431328c0ff34725192b95bf911814a98e09faa5620a4 +0af40530e9aa937d32facab765ab6efbded9066b7c6a031db5b0f34826719622 +ce9203e7396fea2e7d5cb567236ba11607ec8579e01d0741a5dafc86a49a3ff2 +c1898d961bedbabc3bfec4a4dc1ff565ab27805c0f27dbd4db1184ac8d13a66a +03f3477e9303aabbe2e8f009506fa8e03e14c9cddac07b991db50356f7fb7a09 +86fa0dba919eecb006dbf46b9770c52bf38c992c1cfdf487bee675464fb41020 +70cbcd98348f290bc9f8064271899314f5d53cef33351b85a9b2782d891f4fe4 +f0dae67dd58fd46c7d2e3451ef0e7ff93c38e92685ef30660a8140aed73a239f +1adb9547e33369457d849e1417363508961ff097241ceeb0bea7a1b8e350f680 +f5194175b51793efe0ae38a9b930473ec836c99e8c9fc220700f0f6577b77fc4 +5d69bcf32455d506629cf1b15af57f244eef2bb5b824957ced172fd621618fe4 +394a3b3f1a72836c4dceabae9190c3de48bcc34945bf21c468308590e4912896 +4f331cf48a1764a4f828cdb11fd36fbd2cf546afd8cb3ecedd7c0b9ea5bb0d82 +8bf269ecc868a9dbae49cd5173b30d568ded26e6c229b09868ccca377bb5878a +390e48cb3d4d596e167fb5af544d01a429280fbce6caeed0df852406611e3f67 +b1e07a92c58e9887f39aa3b65df90f27a2f9ad203ef4923009a69cca234dd41a +abaf30cca6b13d77e38626a228b59dee4c20279ddd3fb7e47f3630c69ce918eb +0af51da83358654b2b28c0bef8ddd7a22261f873010e35adb40f63bd5f6febd3 +50e44cea34928aab9cbae1e6ef35e713eef769ea2e06f1005235b567cff130d0 +8b6dc201eb476bad95426e3c9a7df4a803ae01b5ba4a764dac131bd273f17e48 +c1b0bb228d5c9ad4c39262c4ff6d98547fecafdae4ec0cfb0c04dfe7982490ee +82ebe0e712cac8b2ad4161c88602e87c68c7254fc019cbd98d1deeb991962910 +d44a6e8d11c2afdf94f140f4a94958b0189dec2fb7dfd7ce510210cd76a88254 +b832de6879983ebbdad0220c8c4d5f7c37a55a125ee681abae550575100e3cff +f5ffb4e64a8d0b2e7bcd2d6d016c598c6baed2951e4e5110be8b5f4c95ec5583 +44cdbfe4d78f21b0bbf5562a9325fc8c75dda43d30c33c3902821b9a6041483d +3f4346ab4b036e583674418db32c71d2a511103c105490b6fa774b61b7e03216 +a466960ac2db48d0826034e4eb74f2a95e735d9a2a048e4eb159e7d6702c28dd +3a1d5a390e4d69e0da121673719173ffb31fbca5b59b86f9d65edaacd36d5e30 +bf872cb7977a3894802498d20d656d9d9ba7c997450b2a3f0ea6017ffb5c2a9e +dd4a6a415c6c6bea9497313478da8630a9417a3a77ef6d1df9aa2ca014eaef96 +8ee377fc0b90c42a64486c4145044c72082e76fd9620d2335c27f87e169f7f9f +b4962e06d98165ab1017436ccc68830ef42c904ff8d738ee2793526d476dcf19 +b51db620fafb84cc7b2188a293f0f7669f48e1d6ae0d12997432f67580c4e36e +5ebd336638c50ec777965083dd485be6f550f9392441e53a78068e7057a8495f +25406380eec1548fdbcc215d2417ed3a1a2db029f9ced3c0497c042921c72b8c +566fb204a2f3adc54a88957260553c33301bdcec98b8797e1ed36d21a22686de +2bde225886c16ec5d132ac0e543093e66568332aef3bb15f85cd442a8245bab7 +681458364ebeac7758c2c4b1e0f6c9e10e5c1149cbe99651944c29f042483440 +af0f3c88e181722940dc1a8a772d99f2dc495c97367126b14053de51a03a7907 +a725b1dec299588f81bb1992ebd9db972aac396c47fd229fac4becd1707ddf8e +8733e447b03c1a671dc33557daef6c83be6fab0cccdc1eea095e9996131eae50 +cc9831922dec49ceac282b5e1c0542a01a71bfc28e91bbfbb3198d33901162d0 +4285a62e07f82b95d0e0db1cd8bd664f1a6603687705936a87269ed00616b505 +dfaa558c8be45f0425469904d42239b24d4ecba5efe9b29998a30ffa6722fa47 +5c5c63027d3349ff581f3cd71c9e948b419489485639c46ee6a62eecd082d89d +639ca2a26d58fb3789e2dc853c4b6adaee2a45eda123a1620204ea143d2926e7 +049dfe2de7e1b4d14dcd6ad90dcf1fe26413ecda2008dea0d7b7409b5aab672c +40c71aaf8536602406bbdf5ba17970341c90e60db0f8239f5190f0a46ba0993f +f0ba8eaf9c45f1ceda81d521fd353072b694334473fcf3982b147d22911a76a1 +162fee53f301906e20938bf6f38e0886b9d340fd23497c52edd2b9319e9b40ce +1e87a94353d01be656952db686e4fd9d22c0583d7c6569e46445c01d06ea3cc2 +6a564f0abaad453d006cf3e868e2bb4e23aa6a93542b0c4e06d839bccbb64470 +e689f85aae9034fe57c583a30090535a89c22fa8336ce9cae3855b6f3c80f1ca +67db3c3d9193747dd24fe745496c12d951180e7a24bec0cf5a5ffba06b925895 +e2463e2046eafa6986b7299507002ce55df328059434a08817f76e1c0c6fe864 +c5d39048e042b01e35a86b322ccb2656474f2a0afbc1aae14543e72548dc927b +d1fb32f689da15497868e14ab927ee6efbf2c1c16bfcf698b77b190b57ad5f48 +8734baad1e836f0348458139a4fffc8f9334552de099ee80c11e84697389c795 +93177a0e179949738c19d83b36986a769ce821736a3f2f69ec82b7e19c2f25db +aa99e888592bd478b2cda54403af0786702badd1cb8e7af2cf44d98d142fa824 +9364b1e82c0bdfe255739c7aa1486de001ff336bd84d58d845dc77e573092b54 +9b2eb4d4309d113be1cc36c3e3a1a8fe6ba813e147c0ff6be1358865383a3b4e +e242bdcdd2c4916d1eb595b6a6ffcc1532a60463f8e0670b96dedb7540a0233f +a05467deac20d5544fc026e83c80fcd3b4a227598a2b320418cb2b37f132f68c +048cc26f58904d1f6d0bcc4c668843a86e81fee25383a35514c6b18a0ecb0b81 +514d937fd90e3b70f3cb83a8d06a9bdeadad9763a34098a306a7d38da2e2a32f +fc202db1b3cecd7a99d4d778287d34a1e5ddd3f6aeca5ddd730facc26899f838 +06dec4d2a4db94abdbdf46b10b4f2d11b3c94a8686d210c350759d479d995a9d +33fd660b16c4ab555dbc247cb559d6072f44491b32423ae4eeb761e271f304b4 +dfcbaa03cbb1833c822085dc6d6aeeb436e24bc0639e5cd4de306a7301f3c077 +2dbd3289cc3fb7822f52b450641a345750ebbad08437bf23331bbd6ea4e210bf +b81fefd3d410330fa1d2ce93a534b3772f4bce4bf5335881371940a8bb302e89 +6d5043f5c69babca785c3984ce2ae8128d861ad78270ff78b7dd3678f4a9ddb4 +c6d4442d0780dabd78e652c2f30bb993f28c669fe05b9eae576c44d9a17ddec5 +6f49682da228f917c955fd75194d0361a30549f677c8d4df6c215281218227dd +b5893844ded6a908dfefa52d3c80a46f92701b8e41ccf0ce82195cb1584dfe0f +ae4f282c2f0702f93f9f73bad96b899ab06604d48fecb0f4c7436dabd184d62f +f3f35cea68bbaebaa8473f6278321982e1bccca10dc064c463e02a4529d9047d +da5b65ad3fc13009db932c0ccabf8318e4309516c19375ba41440c70028f1773 +f4aec7ccfa41b60db4a624a735d27977642fd8a9061195104d8ec81f0c2a5534 +45b3775e1fe556db12e0b2785f3e55ca8b8f8bf47bbfb555d0cc2c4d2ed879f5 +4f4efff486b3f21a12f89228b2254c937a7f6b4cf97452063194ff23485bd3f4 +c106a3bcba156b42e806e6238c39a0ae0d06557ef260df0dd1bd149caa76fc4f +b12b7f2188e627afe0890f16d8a5685d5feb9ae8f0031f165f63b5df63f65aeb +2ef56f80362ca765f6e24056b6f0f93491f6d8dd1d90d7d4237158ce11fa3102 +b40fe936dd641afc1d60891acc80967b02ed9d83a464be8e07b2f80d65e3926b +ed7a2075d5140f321b8dfebcc4d808d09f80311996e7822483ad59a870bf8f17 +9b376d66cb785fb5135dc1351432370fa4060345ad5b69c7ffda0f2497c8c12c +e10396ac141575a04a9a409d4903cf36cbf6602e09d0823f9498d19fea36330e +bfa209fb096c09b1e2fc8491c0124246be6e1d4ad452e43e91b30d938b6e7e49 +9439ae5c62f36ebae128821bb90753000bc9db92ea04ff6c7e34343348a57af7 +90fcdb72efb25a14a687df7dc3b76eef16f96c649611b79d640516a2f9e81874 +c539df496f9a9c14c1ee4012f41c37c3a3f2189d91ff8570899c8c2e07017bef +8d2ee37c6588f896914bcfb8d551bb15fda56c856e08b830956a01a444a8d2f6 +72b6f8ebee46542bf7a9f5a6c9c84418f840a01acc612c65231ae2f4794ff8d3 +c97c4cf224c3d0c26355a424cac0f2d17a056d203b523e03c60c4ef8a715a3f9 +5d879a4f344e371af8c675ccf394957fac75e2c039ce7708a6c7f5b46ce6e34f +4df11daafa6491a63a46b495805896acfe5034d037152c41d9997a02ba58010d +c338b23f185b3e4e3ba1fd1c8284f904a112475a08d3b23a92213e7ce51efec6 +297850850c99b5aa0bb31c15c7fdc4aaa7564c0dd664d334a17fad333927a616 +21bd7ba42819171e14abe2410455ae42b2a0fe9db7693ed36ebdb6305da51a5c +7cab74a7d6669bbb23da061c5d641997b3d0e55d06ac1a41d17ac326b874b450 +88881784220f0829ac2077e09bfe9579b078f08c250f94931824ad8157402a49 +45847593275ff352dbe59296c2b0fc96a2ed97dc6f79b23e3796dbb309145e1a +aadcbe232de323bc2a55b7af043c39dd4113d560558677e8a202229b3ced466d +e37abdb7473b21261cf96e2a2affbf7c6dbb3622de6661a90bad85825009ef2c +ca808bddceda30a3ca8aec87f960fa7c85f215b393e11e09b48db55f01cd0a9a +aa33a40ec2dcd70df052bba543d2c22c9e93b384bff9055b426b1cecd5f90ac9 +574dbef0f9f43d7005b2a9be95113db7b12520811d99df5e4e979a5adf762bfc +5d0d4c3c8150715b7f319d35875a7adeb182c37521ee80d994054e902cad0489 +9176a8953d4b6e28f541d608ce5e3bde32099520fe617e9bc9496df113a43d90 +7e1b212d24535290ef66c9833a23fa7a66e7fa11462bd210456b6edbc16ccfc1 +70c322b65330f4251d6bdeea11a8a0e58b2d438d7f844b2216aa53354464eeb0 +77a06fbfb0b72f8ee1f0bab6d0c6b27f94965bbd6260c70dff6c08d4edbbc4cd +5a8adc974b690fdb53b51ce295e6b2b40c784651c0e78ea6b33c567568d1ab87 +193d2feb76ec18f4f6394fa5508ec4d6f871101e26c122b7fe132cff7f115e1e +22b3eabff49bd9deec3fe09317e00639fcf82f835e6ce7ca9a65e294e869e700 +1c85a71e1b3cc1a4b9716a4a2dfab2986cac085e176dcb45091a01ce61dac2ca +b5306da956147fac8a3bc131f0d8f31953813f52748e70b4c8d94a82c17d83d1 +a8046f80956defe12693eda56512d6d29095bb1d42e36466f6fd2b7ba7c70bbf +123d753593f2b6373bd74d40e00d59b2be8ea60438e42818821515c417e69bbe +c457abc9204f0a8ddebb88c44be364b358e2dfd117072f125c71bee9801801e8 +ff5ba5b44b0115ffa676f3bb99aaec050641fd9f5b6bb095a682b52c64ce6a75 +bca3587e2ee13f2ee022fc905b3babe03f154684ff226990c2ca27ec57100cb7 +dfed37c5f5d52882eeaa64357be3c9ed5605380445bdf2bbe0dc4fd5af17a3ed +784a20539621e6e1b889e75aaedcec08db740396cb01aa753130f4b0118e50a9 +dc10da6a1059f331df49a25e98103e09473304e099d8578f2387098e380ae9fc +f91f9ea36c0d900aacf7fa9dc3ce29b984e1fab13532aa4cf1e19a37c6b4f78e +da75b81069ba80e1ed4ef2b9b5084e5e1dcb8f01e7da8ebf491ec5924a51294b +81019480bafb622cfe2e500739bf8f4754e7e3e85e04d4932a71cfddb8d3b6cd +0bc90bb7b839be6d8c052d1f0d93c833811b452403874b2a5ee226631207b6e6 +6492248559db1ce609e516e659d6107378a2e6d51021473fca2f1b87dab66d98 +39f607dc5eb0c03df892baaed0345514570988eb4895e7765c5bc42d1e76fee6 +b05bf0c77abaa0d7c5d6dbf2f7e039f04f9bf3b9a71ec0ed91e3a00f725bb1f0 +c74deed454f903d2c96cf70a92a048b05bbb624c091e3181c607ddc2477ea47f +e76824c0af0092a62aa367448a10fbb6355354c5ac0737c69a4d641fb3f2d80f +11f64eb4366df7060b4e849261faec37ff325e7f583ba04ad4fb37d6cdfa99b3 +0d73c662d1ebb1af64a2ed168dfaf80fdc284dde297efef48134cd6483dc1bc8 +e46b1c3c45fd5d4bcef85d9772000144ec49dedb9cf161792333104e50a27b2f +1add3398c121814015c92096fd6d3b1352cd41d2eda7f3729d45c1d288b0f560 +17059816840217f1ffeef482ae49ca6b376a5548b0edc9018cae5eb6b1c33c41 +03642f744cffbce7898e525b1e8ebdf8cdc7645516fdb1eba4cef73d18fbf4af +3517a140b206119a0d1dcac28577aa115ac29be7de2f9ed1f679034929c48870 +a6d50c8fa1779560b1f5b760450db3b8b350ca3b2890d04d3b33f19aecedf0d1 +ac01c613d992b423891f9ed878c8840937ede7d8a1d62fee5f92826620d801ec +3c3edfba8445cc52e5f83e01ad27abf5c205eb022ae6833c2aae6dd550da4a97 +f10a7e363afc6d53a274c0fe41b83c171785880b637434b2c8c4348615bc9259 +8d8508c412d17099971aab2bf372b96b0b14ad90670ad976714d000373380258 +4b6462644a34bfa6f5b746fc0db76690d52b2229f7c79172184fadf2b5a9983c +573dc0f5c11aa85ba845f6e4f5836e95636c8cadafa8671b2632c84e3d94ef2b +ac6565267518e2f747127c6f7b13b4aa888a5ee3869119ece0b2b447a5343edb +f0996b80d9437e62546b137e22735347a684af93cfe80ec102a50516092cbc03 +b0e52d5e10b06e447c118fe2bcafd3ba6babed083ab7d423e7bc5c862cc06dde +56801534f09260d1f246d070f094f57219407e92769952925bbd0cfa29a523b8 +fd3ab5b278b2a2f12c89e6ed1dc2bcc4ba69e6452869b246596f71a310af0867 +c9aafc6af2c88f1edea2ac2dea51e8fbd72eeb0893a18706e16ce17a8ac44545 +ac68951c0f284b0149b71d924330201362ebbf72dd8e5a8a986fbeed97e5ad11 +cc913858ede949d8f732f742b0d73ce9c8239c077ac9d24a80c03c0a7daae558 +f17d2310822d33918f75aa835b5b4f9fb61730fba8c55441218fec3c4d1f54ef +708a05f6fcd38a51d287cfbc58d92e5f3793da39c0f55eb9fc03b658567e7474 +557de727bde7afeacb94c90d0b38b5e9f9b19a14d7c73e066eb556eb6ce393d8 +fa956f4b75f6aa4701d03360f1f354e1bcee9b167cace1605718f337dccf8cb4 +57c3ac8e3b5b730c60aee2e685a80ff8ecffbc005dfc5f11c5e338fa20ca3a43 +9154621626157e9efbc0b390b143ae736dba62723c99f5efaaa02a090b8aba16 +1b712e55d50a2a6bfc06b5eb32ddee1ddea7bda2f176f0f1c533810137262a59 +f8b14ec3b0349ec36bd0b8bae99368d21c4dc0c902e92dd73231b03a91275edd +9250f14fff4457350c747938f2cd6170e6b8713f439ac4e116e70f00bdf5555a +99a7162b703b45e92f8e77b50e85373f073b6907f95839c6f6dd306aede407d8 +642113e1bf2be60a5ec8a64431cb46f882d2df7eaed39c326c26327513b3a647 +9ce800635106cd90cd7f0083d2de423a5b9e5d63c49643d3e220aefb899f491d +28a30c49abdd19ec4bf66677e8bde6e43e222a097398ed2a9e9933a1d5ca87e9 +cc6cffda1deb6d13806c2fc82c4b32dca80dda4e3945c6589e9110ac91681603 +c4bf11c9d5510fb8d4de96ce3177297b692464776d9c07a1116b6369204df7ec +4592550563d3212b50bafad065887b3c369a7810f98bd521be06a3b4b997a6d5 +e0c5ad7ad8aae5275f400d86a6f09f1bff38d9d7220fcf688212eeebb8712f1d +74ce4985615a59c89354c1fc0975caaff671151a561edcc2017b0de504974190 +49c53f1f17162afacce065f1300cc2571a0f9dba7d21d8488372d386c41a9fec +bd1c7def33329827cc99c7eeb7e5b91607849173f68ce09a2aff09c94145aaa2 +76cce38832aed1a437e8206426ca41f49c9e45b6f581faa8afc3b47869d5762b +793b8d5fb6f0ac9c391d49424528ea39f635185bb7192f87b72acad339471ebb +decd039457a71837c2f543652284f1f40f82c38740c2ee36b45d620f004246e6 +d73f8777ba26c7a7e3a2413fae9b7dd37553169c7209790f14cc03c08d0bfa05 +6e72e0184d32cf070f685ee4507b79b21b353c6f228aa087ff469b69b1171567 +88fc37c39977e09d1c46456f1568628844a542736eb0ddf3fe3d134b7e78e87d +b126702e8ec60839b53c363090f698c5c11643a1bb63ef2d2f159872efc68ae9 +a96666fc8ce25cc0e2b47fc82f5f25f7b6a732901cc6d4295bec66132cb3f175 +42cbb4d4ffed7156beef36446452cf2992e8d9ba3735269ed51ff32f8c915b8a +f0050d9a1136e352d4eca8ef9ea6c1978fe689c8c563b8faaa1128625d9e91fa +d173c8e2b7f94f520098dddf4483b12abad73e2303098ec46b603b08f34f2bc0 +8ad44e897c2ab11148728f4de8f0390ffd947bc424f0f0f1ba80a107ad2e00d0 +ff4e76ed5b305b72b72a07e43f98093e032088c52c07e3f77d4a2d417f141512 +43d996cb0867a056befb66f052e1b65b37d2eec54a802e570c8b32554b794392 +3280107fb91a91d5adb4adeaac86a422717603de317a563251073bc740f10928 +1df7669744f5fb89e3f460bf820cf006c75231e979fe162fee64786c144a19fa +7ceb1da2096076fa0dadc7bd1522014288aa2fc96baab5078db3de94807f3af7 +854cc320e9f70da4efa02d38fa65c15801475207a09d254a1bba489b78a8214d +cfd4da769a8ae060fb4eda4b51d780928bd6315bd293f6c6b0f3e4a593464f0c +55ce0c1120b2099da0250d04f792b2270db2d7c606bf80e7a56062181f7da864 +a42e97863ec70187b6620559b29207c549366172c55d7f665952c8057a4f2152 +a69f772b065d414e65f57719a99cdbb57872a86de9fcca4dc7aa32b666d474e3 +d20508d06f0cf028521ad7d46e9c25a40d1390ee271d2ba5ddbaf7bf64585c3b +a859a2f3ab88e58f72a1485a33c419187fde432b697809da526477341d7433ed +f38e1ff4fe51920404138ec6403df7562e4443ea091c620a13603ed0388b88e3 +671f7436193eaad4cf55ace6d04b79f0389ce28a1eb223b24a9f8c92b4f5ca3c +0bea3ec00a555756676d77de2a38e35375b82c5192001446c8517818f18be439 +6c900f7e1587969d9bf8a9fb5595bf055222951c2b0392fc387c258c8cef50be +7696d9360b0f2d4095e52388b395a10096769586c03fc96a69615b92b9e4d3bc +275229ea8df5c72ba0fcc67bf8c1b2708bbe298cf75d1a97d452d51743d457ad +7d25ea5484500f4b086bdd81351f71885845fdf5e9129e8b0833259146dcd34a +3547c21e093a4fae7469620a88a126e0d025d3e50103f66357e2e05985feeb5d +4a9adb2db82460076845e54c083a2874aa56c5b95253a1e8cf8f1e35448577fb +8147f62f33c968151352488feb6fa978676c9f274d6b11f7fb65fd39bcd7dcce +7846008370dbc907341269f7d1c355d087fb176fe06836511cd9b01addccf580 +f68010958b8196f50277dd16f3039a9aa70411fd94d1b145b3ae34d5304e6c4b +02fa4b80f3693cb6b16a70dfe06c132438e0e56c4fe504e1923196a58e04034d +6cb67335f4218b857cdcdc928f3cc436c63f10ae872b93788b9a84b546c3f504 +7bbb0d419d7882dd1f7bfa5fe8a1d1c671ff3f56b50160cf4c23e8bd55111d03 +eaa7ff86ce5762687b6136f5728db1b9a1b914c7e2fce70c2da513594a989437 +ca8eb6792445ff806e502d238984d278a81d89b22864ddb0da2e49658657cfdc +6214a570113a00e55812ccba870feb01f397f010a0377a34fbc8b052084e3d75 +5e0bdcffcb26045c428d8de34af04aa8b7a5031892935c16918f0ab2db811533 +545d35799195310e5b109688830bda180f096fc5dd2f2cd98801466cd44a2b50 +68e54fc80d1d80c9f875b7e75860cb406e83132f5cd0813757d75b5bca06c62a +fdb7f0d55e94cc9a223c0f9eaa30c0a5c13ea0fb857fa703f2844d829418ae2b +968dee2aa785c07ddf773e30bd42ee89df6618796171c58ef11f6570d21b89ad +55e4ba58fffd7f112dbde6afb5c5cbe7d73b69b5a25003394ab6e0d5302ba575 +51ec63112e038b79f6b9632012ab775ae978f4d94ffa70e5d095a8fa0fcaae76 +18fa4fa41df5e34e7483c278d4470abafca5c110f1cbdc1e9e10fe169342a2e3 +6ea635ecf0f5ba7ac1fe1d11f661e825191ada43218eee5f5aadc42436c98789 +e7692be875ce211a94409ca6fa9b2bc1d67ee0e375b83b62feb2671b75566620 +47c9ba88ebd7f795c9c02e63cbfef0515a62db218f4e5a0c81b00bfd6ef12e8b +7bbb8e9ab5a1be0c2773c7b5244d7a815d95644a188ce66280637dc8cbe5fb16 +f2ac4a45a8a8a3e13bce53c345f35b3ff85373a8733aa6777008ae9329c7e54b +9fb18b1e137e253c72128820e04c7bf47189c1d1836f6df447ff9efc0adf7b0f +09c1032853c67fe92d961a91e70add002c0b8f56a07c3423cefa2e5f65b028fa +ddf99e24090b56e5be0173e8778b5c45fed11fc0c0ae64a824bbf77f1150b9b6 +cb4f96ba0413fc37f7590955d075120862015df7171ea3b49fe6b0f261db75e8 +5bb33fe6043a19688ce286573be42c114a0495cb2cf6f642e83674b5ab17c7a6 +191c140c1ffcc54d70e2b4d1b82fd0aa1e61583564753cd6c5c0d6d7743cfca1 +f6fecc0f51f247b081cd7fcdd498da22d5a2c8dec0b7a9f92e252f63644c50d0 +874617703ecdebf7ba8933041793391f67ef138fe0e4efdbad4fa6d7b01c1f01 +b9eb2868632c20ec8f3e34055f6793054bbc31c111686ebade4b4d44a9b69021 +54cc2fba1fcebfc1943433fb56b10b60f5edb160df0e33e7e98ff752060140c7 +8511c870920c2369a0d6d4dfb687c30541e014bf4443f665a24a5f05d5a21acf +f99d9131495b773e42e3f1333866f45dc35ef9231a00129564d194006c447bb1 +5f341631210376632d90120ccfdaf8eb6df5e2cb1b9046cad64e34bf4e524c3a +f786121f9136672b6bdc99baa00d412db7d5155c94796da2f490cb441786569e +769561942b30cd8b72d01c11434b9a64a82f73be48821291df689324a361fb54 +c1760ba86b250c9a6a2c855eaf318703d4b6c23f67931b376f48dd3d87250ce5 +7614efcabb4a6b8fb9d332f121aa8e83edb6897987ee25bbf692d1c243e6b592 +1954fa91ab728b5844f0501a63abfb7f6c8a018e0f5cd409139ecda8b427754b +089e9f71a74c55b8a0c7d3dc7ffc478e693ca78280c9b33193e82383627bdf30 +771103c535dcc00c7d9ca352f135de010a9dc95780046bf75b36e0a284d8c2a7 +f3b6096d905dac2abb33764249b1bd61e3994e96d0f3c1e8cc9959a404dce763 +31b01ba083a82d6d0d9cf9b163bbe2e84e01a9eb07bfa80ac69babca7e725fda +43b67bedd3a23fa3926300349021c2337a5dbffa2021e05d26207958bef87ba7 +eba130cdbf56be5516c5ae4441390e999822089200aafecdccadd69169a27414 +1c0bf4ff1be4221b4e6465da6e5ed755568f79762a660653e10ae8d098471457 +9c6a90dde454ca311947f0d48749b14e04aa65a9d8c62097998b4d78e171f166 +40bfe92170c33de5ce03dee2bb50a656c2748ee8eaa15951da01771acb0a7c97 +25eb74788e6c283c6cde569ce52beaefcdb29f91dd345ec41b585f1e2dda5b29 +1e85d3a50e93ca8caa6fec04df003df18120152d0540efdc4020dd6475233f7a +1bb0cd65e6e389a3d714455aa5341872a48c01f9f3451f0a41051340a9276afa +50473824ebc231402f4ad6e35ee9d50cd89d2dde31cb5cb47c72cf47ad6e8538 +e1d41960475db823b56c20845107d5f2ebd3515ba63c00b73f9f069a7b2d8cd1 +862b61a9481a437aa4efa394315eff55fbd6ffcb26ed9010daf763a3806da8a7 +14a1e943547d733eaff9b1c8ff5d7ede9573851877756c99adac534773a87ba7 +e3e320ed16d4c383bb75fae51a0bdc694cf4b945a389878d38662a3d3b6287ed +d505ff4d7947250e56c501f630ba5066f343e550de87b42ad8eeba15ac21de34 +ca8b18eed081283179a71ddd916c4efaac62f0603685530d08d499918b726311 +ebb642eae0db7fc91554fe6e77580244e6f3dc871f6bde18a80d732fa6f2f04e +108029179f799d54c7eebbbcf6c013641657c98fc17d652a9b48d15204936752 +89f4312216dcd0605be6fac8c1994dfc7488f89fb2e777297b16c95c66e4b7c8 +5b30681029156954c59c7f4009e6e51e5a218de4722daac7b24176c9184f8da8 +150df8d26760dea0757344050a36ee320d1e71dafe9fef9bee08c93a2ec25d86 +310ccaa2c2b42c87298b238b449b8e9abbc89b9751cb1b2d86051baf9d84ed66 +e4123cc33e02b6c95f60d72dff4ec2e59c0e85370ee21c6ce7d2f2633c69f037 +00608a7d4c67e14d6eb9782762c193ce09d9700ed2207df978ac96d967f64d7c +d1890a7992c7b1f0a6240d53bdc279a1e9809963532108114482b30325585466 +050647c568823771ea8e227bcf931321bdc7699707ce84721f3a8d9247ab7428 +2eed6d1f734244c0006db24d909c39575f3c31d67c4b06100dd37c12637e23be +103d0fc36c3db59bdbe5c86474269c394b0d910ea9bfb4f321724e0b73ef96e7 +542bdd57d34c91b319d8ba7c692608a0c0db47d5c8164782c5f5d9a438c15afb +80c7545832948717eeb7f6b646c59cd2d44be1fb792e9edf4a938f887304314e +b064e64acee79563271364ccd68552bb354d1b868bb91aa38345a1f712bb191a +44267a300c19d3ecb9c756879351f430eabfc5b596f63a6860dfc94cc6ad909f +9815bf7d7d885b62d3aafd9624ed5eabe77acc50b5c8aeeadd4ad79e01f4fcf0 +c0bf6c0124da07e12348419aa115c90fad1d3a6b8d12a9d65cf3c7e8059eea56 +29a9a09e7d2df23e180c19734acc46356455886bd9e1981ad86ab2be96eeda66 +87654f6ea6e20c95aa61c9a50117db0a647ebc8c34c55f158ac2085ca23de1ca +02b4ded478ca08c4686527cff76d641e0097f3cda433911682b399604ef61c89 +901c7da40dfc094df7025b1a692c159ba0a743b1550f3c548b2c5f7b33016a29 +a370407acf516e13a466e03a8a71ae6ccfa498d6ee19f53e258c3644a6e86852 +7f76d2d673ac3b07e3e23554886243d94d7712d778839a0c754a8a1217162b8d +a3ec1006d9d36dee27d54e4c6e256f9a06db8a5a752a1f56766f0c6982df002e +4201c9988b769c64aad5446a8190a5b5b3c1f9bc8cb6ad24c9beaab17c17441c +4a9a8391950fcaba005782678466b3659c7eef7ade032612a9a2e238f59278da +1deaa6dbc1a007c6fdd494eaa997ee56bbed5f797df482213f03b75da3a05a0b +30b3d63c75b125b8ba5129e298c45d958a3c69067af3313cad7db36d928d8ec3 +dceec61f0f7ee22622434248cdd8696c5b54c8911b9d90714347f7f6b11c0bfd +908e7f9cd6f98b97a3b8fccef61e6234332a1094b3c968eea224574947de42d7 +f8d5de799f40caeba36b4fc4bf430bb380dd217366446482f94d207c58a25e76 +2cda6f2af982916b182b477772674283254ae75a8d8d4cf121a73b3a2592ba76 +1d6d914992090c438c4a68018d474b7147beb38ae35b8d8e9229490655900c3d +e615951797650c229683c3def25be277af6385b4f0ed240f86547a1a3742aaac +a0d28fd8de4fbdeaaffc37a669bf709f0dcc13fe003c96e44a9d33ad16217675 +04e1f237dec054223a0a35a4ada96b0a683ea1e016c6fdde948e0a7a20f8e8a4 +a6d3bb3c09636e0373dca7746eb163f43810e2eebe8a50adb76468b8a779c371 +6c61b780626c027be20eddcaf408dcfe07cb044aa03f7805290d252ed3f30016 +9ddaac33d863e1ebcde7b8f3e0be3f906c3375e4242f64c7ea6f0f662bd9b776 +6702737841953a725113b45ab4eb8548a1c1479695ff4ff9eb8d474ff66c869b +196aaff62849081a98ee963bd74da69ffa1dd8519b106ab22b4778cf97f1aec2 +d9b68354aab2fc0a8fd3516e2d2cf08c22ab093ba89434c57874f4f87831062f +213a7fd7a5572d8088eea1cbf77b21ab4de8f4c7a1fa8312484dbaab9ab2a923 +d87b1fe0ba3183ab27d00fc13c624efe6ee45e62d2d328aaf9f501e64765b946 +f21d5f77d5b5436a6ccaeea7002b0fb24bae81ac550a731505287f37dc04af2d +a4cfee3b3a1ab21781afb9222da39f72f2dcace99dab50d82bc73e73125279ff +431a5a2bef0b78abf0bfb1b3140698456beb47261801937d55e1dcbe40403dcf +2495b10dfa47211d9342f7676cbb498ecc5316b1dd64a74fa22cc977176d03c3 +f3b0760ec63393d846ea11b9c2aea75c5b7224dfa193a2534f0436cc90d9fe88 +1f56441906e4d5644fc33b472c28646ddbace7d8ee8fd8c78e5879e638b41b14 +eabb5715c81ab6cd2fb872370888be6f6aced19820394a42bb286adf8dc2a82b +18b166efcf0c5c7626aebdd3abd5fda35cfd70887f695fdf82337b821c510005 +90c6f06a4e88ed6d4d0e5f2c3ae5e4865d67e144bba6f6f3ddf309c049772e56 +0d865223cd88963c6fdb573d56b8fbf67255f94c1c4e264a8a13810162f1ad7e +b141f69b353c7a9737aa9d919d1bfdda75910dc5e841f4d52a5f58a3ebaf305a +9075edc50f9fe0cce188ff64e09cf1769949589b221b451c0e7f2b6176f6ca5d +680b1b4bfae4b7ae87c03049fcedfc09a33a680f96d96c1d09fb0921f3d4bbe1 +9655fd72398d8b66287357626d90d44b9f0e2973942dc06de660f7278cd0749d +27abe4645698676a1ec645169bbf1134a573ed63fbddcf8e690fd66f943eb675 +2552768f52cdd9b8c4938e1d583cd6576611b1495b4339c86021ce6661175e68 +873991ac3c93a55d9430d510bb2d6c91dde275732c87275d2dfa3a0124b3da1e +1fd7bed9edf509a3afe352813a8726522244d32c8bc31d01cba0e1248ae5c75d +d25bcc26826fc61c172b5ed70c869894bf1a37369bf1b98f353caae79bc05fb9 +8c9d59c91e67e9040642e7b4c54912f603bc8f8696ac9d667c557c0e0b90679d +9c809c82701fd2725752ffe02d243baa5d340a59d26935d520b3f0a7eed8fc8e +fc352542627f167062b1d2657f36e518ac54d03df9a51e857a3ad589f7986513 +914d6b735e08c0f0e9925a49e08921da73050d323ef835f24565fe5b34aa55ec +b8c41e873d766d66230b8156f06580034d61e5060f2b6c8b7bbacc2875c26c07 +ddadc43a8d13860888dd97accc083e597c99cd92180582ba9fbd03d6339efb43 +27af006d0784c3f661ba85086486f91df5dff5985c111dbd19c17b357bbee805 +6ee8afe1802988c49999f36a176aa339676f67b3a99638d6a9db1c8219636720 +a64fe07e8968c0e2d013aa3583095c15b4f6cd716dc4cf833d4595a5db580082 +66c95090df00addd1a266558da09328570fd3ebaed85e853b0c38fa90ce59417 +da533b879bba9813544f8768cd27b91275d44b3876c187c7b1866b943d01cf14 +3dc10332256dd9d603641390e9c4a5d69a2e3a5a64cf5f25f3c97fd69673cd04 +af830aac66c8c58c7d6ca5c9491776b6e0ff293a7340f55702448d1c13ced978 +a5925f0aa260461ee1c304caaf92b12f5e268ebfa0ded8cc0262bfaf51f5edca +c304414a151d57c00c8d81018ba41f72e9f6b0ede165a4902be08de6796520f4 +84e03e723fc8fbdd5c708283d410bff715bcbb78184c9825bb93b13ff067b8b3 +8f13ee2781128cbace25fd8dc9b6cdf0094639797eedaf5cb118a2de7d53d66b +aff54b243047c35c1fcd4adc5942757cc55792f3370059fffeb95ffa99f10e98 +adb201b57efc5ede4e03dafed763d81cd47b4c575435eb7bec1193ff84329a23 +8cf67d8414e8d1a57e41f3ed0ed3b46f1dd2edf8ef198cd857c05dbc65350dba +a939e74d0394effef3780ac622549b301ae4539534ce23da4757a7205ca6dee2 +fdfc6608444093c046976b919204c92d985f4ee2db74678725c56348c40cc447 +8770ad251b6442630dfe076de75dd57da6a453e8ba58d0016aae4dbe05591e80 +fa2c2df3aca1de4f21d86c560a9d25280fee16d5844a5308d7922d9bc40201c1 +c648e37d929853249e572f88b21ec024bd07a8cf3dc4fce45df469c94192563e +a695b6fed264c72b66256a3e9b0ebbba06d36a9dc18dadb4ac7bb9c33918a106 +ae23bdc5326af0b6ef663b6ed2894bdd80d334a084bd692ccc42fccc033ccb29 +5c7bd33199403d488c61a9e0c619a8e501a4f5c8034df1d2782d8286ef950513 +be7391b1543e36fc886672a4556c66c4a92c40ff9abde49024eba8e041236d3c +f68125512f1803b8cadbdaa0926906c6a33ed1a52c75e5589dda5537ed70572b +6f94756f25eb171372f4513377760fab4bda57d5badf1c2f81cc68f4189cf499 +bfc5002e5791bfd84a40a69983dac1b26cff33475913e7d410d65d228c695ed7 +6e896482179611844eb586a8023e6e03af4c787d991d361be5aec58fd67222bd +a3a63f3785abfff3e90eda8f151bce01026a425587da9d8001e532fefb75db48 +ef723bb5ff12398ad736c4f329fa941b1951e171732ce74b2f569570ef9c11fe +8e15a4746bd8c4dc3828e431329fe205584b946ac06beb7efdcc77d5bb6f299b +265a56ea29b78903c605c1ef909dd25abe6562103084f9eccc550698ee2ba7c1 +ce69e49a7a3dafb88a155d7b6922c9efb5e1f8364728cad0b8b4761a1370f06a +aad0d9467fe10f58cafeebeb187be257859be4d730f33c8d4dd5e1b0dffceca3 +b23434c2a25bb9cdd8c553ae92093b594ac139fe70fe9f4a607ed7d4f44fbfe7 +0abd31a1d27f550acbb627ed100b06b0a90af2c1aa9e334b54b23863693bcce4 +bc517db889fc3d8d179d670b1e282c6479d4f278a620bc61a5e3977458da98b6 +dc4ef9062ce128fc59a595f9741a7ab354a086bd1b0cfbc8830f19a0a5b7a278 +1ba1afac9e8f805f5563a954cbc48e85565b0acd3930dac4f1f4d0c0eb8b833e +4ef339d3f5ad304e59f0958aef225767f1f992dca2d9279ed920e6b1f1d6ca66 +3814264a4455e999bde37475f3bc5ecff3622581ea9145dab6acdf95c22fe293 +272d2875a939ec35af73933e9acb08e419dde1c8296e1a5ac1006dad3bd4ff51 +f278103d486128712f55c34f4e1da744350965f2692d8d6690b67445b8d0a2d2 +6b1a18c1cac898071b9371cf39ce17153fa963d83e646486d9449d434200b912 +5bef39637f3e298c5dd1f0e817f523d68a994b3b05c8d4dab4700632f39f6410 +3417a3c7562cd8c399ab5d9b9efe99688b832d5a2dbcacb4ad5d4024ddb302f3 +38a6eb2e23e47702660dfb5327bb33347c833ac8c9ac158d2e676589def43d5d +9bd741ff2d68859e6974891121a14afa2c9a0b591db56404b19f08adc039a6da +0f5477677ba691e27d680068f832603cfaa10b27315e4ca8d8fb63b6a3c755a0 +aed3f49af639ca8735928670f37018e48bf3d9ccd8203017f5c52d4dcaaaeaf6 +d91371e52550e6e0bc72995965cc5a9f987e2099bb915bfa28fc0f57cbd740b2 +6630b3c1fe2f7314f66c36f3014d8940a6b99e20c2bbf66147ca17cd9d52e2dd +3edb04670d745d9a2b33ab65cc16a68fcaf84e360ae1477d357afa62df1374f6 +1219e7ff000117ebe8dc15d58a4d2d44102d235d9788d897667cb686a61e9519 +8ffe8a7958659c0ee5e1289c8c1676ebbe71b61b20e4eb930d14927e2647ee60 +92b3a7fe0c8c02b760f75b85bbe0a429d98f021d0f4d9ae2219efd4dc06f3a44 +a1718101659bba461a904c2560f5d3e14a0b14992b489b2b524cace637aae881 +030ca980db54d8f1dd988ed0fe2da5f799c393d8d12582dd218710e0a171da2c +25f637290d2296bcd20c593c0f4c3b05635d04b4504725442a5c038d3c3d4ca1 +9e121199a4517edfd81f9e50b9cc6a88c8c49e048a7de4dde8c77c9eb4aa36e5 +5b26a061ed03eec44693b9f5a7ef0bb70a26a147bda86981e93ded72f12a918f +133e63ad8507daad920be5531d03b75b491f95b76e874180b434ac0795f961b0 +aed9e078966edf01ecd449afb7944080f6f09260e767f3a388c481df67d4d6a6 +3d5949ea21d07bafd52c2bb664295bacee81ad5a2b16e4e560be69e9f19fc9f0 +d5e0772784a6917d2bba7ccc8455f1572a716f1e032f5f244dd26e5e77bd6894 +829620277dee975d609c3a8d13c5dee7d05bc9842af7a84e9753420591d0f6e0 +e457111aad08fd5818b23baecaef43d6c42c423f37cde8ed09cadde44ee7e8b5 +c5699e82dd3b7d5f268907d978b58fa774dfaf90ebcc85ff390c78056806f6c8 +9ae7aae8295bfe14c499513fd2438fec5f13a9299500b0abbc17df9c39a44098 +1784299d7229e0f36748d957e5cfea65d8d2c940720ef6adafb4b40ea38bef22 +a997657aac9473469b33f7b35cf12f92a8906149fc17fd56febb5e8d728671e0 +0df089cb79e80e41de415f9e7d1b5b93a7355d9eb79bc74026afcfd0e82b53ed +20715a06fad8a586bd1961b0cdaf91af18045107311f73f8f9fa185271ca70a9 +6242825133c68e6e480a9d96ced60694cb24a3127357b9ddbaaacb314bc76870 +8cc7dff7c1d96ec22e39930613b154a2d52f6d0ea5eaadd5429c2738b27bea90 +d05e15b53c2481406e56bd2fbcfd9c73b9bbf9ff905fa83f6359ccd92f2f6494 +69927e744de743f579b7d3c0221c8f1e644a49d33e86208d9f3940e313abf42f +7820c38957f38908db156a4820cee64ffe0ed3637a26ae347df177abd9ea683e +91b15018fed6071ac92cf31ed64e5152636a01ad869b09afc76a753620901110 +f317eae8a99e5bc888bfad1e435302146323d0b752d0347c9b5c40fca5393ee5 +ad16201bc6aa52b4700d790af61387f16f0ab6977291dfb25ba200ba5248bd25 +4850cd1197e0a7b289439b0442fba60a1896d5d8eccdad1f16e5824e665a249a +2982bc9cbea19dc6a0429e192f005474e775d5dff231d5b3855a2da7040c1058 +5490126dc9c2e409bc8f4eab60b75db09b08c94c8a675efc22a0a8931c790cad +ff09b39407c33cee4253e5c5f9e806b5bc5fa785fbfc6db334a484e8e0f023c9 +9094b1cff83bfb775af6751a4d1010416b4886b3a40213297340212604d556a6 +2c56be99d04ee8c1c0772783df3bfd97a9600c3336302155a019579b1c753b81 +93b5712637288c4c657d66aa21aad4ad0660f160c5c61c2ad73a1e1ce7518c31 +2df63067457a38a37f27e3e4224ae637c2a977a5ccae87292abb73a29b019bab +91c4ad20b02dcb57774225183f9d386136ad0547e86b64cf5337d42efaca336c +7bbc10cf8163aa44fee56370a74d47b6620c9c70f822b69d292e3a2379fd776c +7540c44c8ba1f0f072336630d77e45a96b232897d32f726bc579fee33e2548f6 +3ea6c07e6b7c8a39d82905ec789c2ed837a380d354e93064a516605bcbe587e9 +99f69b562805b54604a6ed75d84f7cf08bf33bfde2cdef33efaa1a4e417d2640 +a05bb5f57cb7f96dec69cd6bd3cb909cfbd3088f60d4caea3373f31a684797cf +0b1cdeafb76cace154d45bf7775f6441acddaceb8332ebbbf148395e08073da3 +f54f6d1a525217d554f294d9665fd12766de19fc11e23a1483cb0abc75b21bba +9f7c2f5e21a0eb5b79585b9935b7d7f2254c4f7311d6367a6cf51fae5b228648 +8173d553701cccce508b5623bf23bb59a66356800f2513725046f115d10f3a68 +4d5aad7551797c563a6a5934cfac1c95216db928d08a8adcc4d12d855c142f41 +b663ab4755813cc4bc432147c5b9e4949d56a07c084be5bb14b74ff3a9ca0fa1 +708e861d3133c5caaa90213ac1042dca3febdc4431fe092c35cc2d60fe92eebd +c96157af469b6e3bd124a183947cf960aa29504dd4eb9fc9c10d1bc77363644b +6c452a8824b48ea64a3084f6219c65cdf36a1f8a4d7da515ead6f0e03d0bc2c1 +69ad00aaf8a2b1782c990f7ff40fb9bf2c00aee85eea074f4568760d8c78529f +835e6ace945521a39af3bfe33b73b62a9c755921b29c0167190c6fc2133645d7 +6cd319525acaa82fd7727b055e212c7db32b5efda34de81160378efae97fcb51 +8fc021af9ec77692c0bff6e8ac0de9f938ad65c48d56322c5719767da14789a6 +06dd5ae421aeda6de57c968c883ae17712aade14da281fd823c99561b2c7895c +c0ae4cd1a94e689bb579d3978ea9b2bd70bcd167f15508d1d820c8f54683cb3d +8b302e2af9fc2474245fa9c3fcd50f57699ddbfe78c83b417f2ab301cf335284 +c7cca7e8d5225e036591bebcabec13262d1a7782f1e53e2a1d75c152c0ea6d18 +04cd294417f9cd90912181518915e6d81def1ac5957a7d59b62c5766e8ef3554 +43938d39498456ba87c424013135609c6437aa6346e59b385992b196e5bd7f8a +0b44804854f29e194b6c2959ad55c5bc94cbc0f41f837d72c1e91e795e4d98af +976eb1b55e01ab71a0a786032fb6a62fc6201db7c67f2340a5c504b9a9a9abb7 +3df1694ef6c098769477cefdd3b4b77ab716d240ff9fc0a1ac737877658df26a +b6e7688c7382d170e1218cfc3be31a193f26e9a029c74da3ba2661014b58f58b +2cc7719be663206c3cb3f8993a3400c149326651751e8e9d7902346660c4f845 +c7b0bb144ffee8e1187efc1a5e9e44fb277876d17221287c87ee6351a5c887b2 +72e0c04d45d060190dbe5b1bd8afb1de6c6d984b65362bfb0f9a4aec15979b4e +e94307f351f30f02d8656f24a4885a5fe3bab465b7a0421f240edd8dbfd8f4a1 +fb2af2f4fdcd000d0aff4b5ad85b54b98a83c59654705ca2df9ef54b742bb3c0 +577f7f422cc7cc380e5dbdf0d4b1fcbcd418a219b88279fbbc8b5397744ff5df +1d795570adffdf79a38a6ce62456c2601b8f09bbf18287bbc7ffec9d1b164856 +77b6f176286998b7e76698945e70510ee09966817854263354a751cb09afe9a0 +76b86ed14a837dc7c4c15ffe7a448056908deb055a02558aacbb6465481b81d1 +f42fac1b857a516852b3e7db8425d23dd0e2e80c423abcb3a5b95f1d34f28e76 +74c3e3a77431cf1f75ffc9f61efd8c9a09fe9d74681e541e4435d8443fbdd7b5 +4975b26b3c69d2e2283b0ffd5e934a480c4ee656e068aed4fd180fe5f6ef4af5 +1fc86e6f9271d0b07bc9805cfb43f06add9ec5e410a7bffaa925d84a26965fb7 +6942fec6318bc03627e112f16fa00f56ef464096aa0fb4298a98b3010c404009 +d16c2c133878b6f2988107a01cce2c7a3db4cbbaa7adc2d45083903a357d4911 +3775dbcaef8f814be6d600cb277b9af93d8ab005fef834ad50d8ce9d1dc09f95 +5b7fb930cce65c43d9cceaaf4517b8f1ad764b1c256280f19cb69373805ac79e +a4cdefaaf9064efa1247ba74bacb09fd16122646d36980eee215f83dc9293193 +02789698f6fe0c5a0539fd7ff2b8a28746d92354bcff6d6c056171bda61e9ad1 +bad7f68caa7c81dd31d3effcd9074caa07943ccc3fa68438e9712002d7b7d5a5 +2ed1fb85a70e55a15ffd0fc5bbb64265a048ba668f0e8513f733ce257473c517 +0315715e26e0676819f8a16c22d8eb39d07846efeb177c488957a5237fd3d592 +3d10c2e5e1e6b50992649bc18fcc70c396312b350b9cad02e0af2146d9894f50 +20eb54df3eac30225deed70dfc42784e3da822f380f46b4b3036261b2e19e933 +675dc99e5bcb66381136877f0e9cb2ddf01522a66b33d559160d2f184a7ab052 +e5129afd8225900893ebd39e92830ed4da59e777ff5b0a298a2e3bcb2897a6ce +8bec15a6522071afa21cc13ef47179c8877e6b3722180f9ce4ea63302640798b +af1d2fc6e0132b3505d3b0e949d6fc4d9f744436c619fb0611b13a6b0a4e2372 +a21d4b034d9b4e0fcdf5f25c41e8ce94c8e417088db74d2d82a618c18111d385 +c4c66d1f37f6e64b8dfde45ad805c374cb8030fd3db32e8489ee7243c78ee4b4 +3f58f68c2f77d0917aa51ea69481d98cad76a2e6a2833f2b1cde6d15be2188e2 +40f304e95494f838630665b8c8330ea641683eb4aedef08ad22b5870e8508f4a +098fb39f4dc7ec87bc0eb35ae1e97c29026d6c800deba720641445df76d42a8e +6470dad8a60aebac364f773ab9e7f2a8b31af927190c4baf7f7b3d2da3becaec +06162e878fa179de59cf84e37f0e56764963eabaf87b1fbe061917749ea18ac2 +1794eedf33f62c32de4f3db287d51373384a2cfe30bb5daf59aedf26fb1fab59 +5e8897f2328f9233d396e692cca1ba9cc4e6246968ae05fee297a5cbe1dec18c +59d1618cce3b4bf40d4e07de3cff3b20f7bb88e7f1323f64bb8ea416700c3703 +52a06a717e69ceed80be16007079ee6d7ad3a87012eb2929312c2b68aa785214 +6a5760590785548490ee4b55bd78f179671e74268c670dc71971773683014080 +b742cdfa5f5c58173cac5dd60832c9b6ef16b85c4280472c96e264b54f158989 +386bb30d4336cc099887921049db56a41d2a6f57028a7cde2ea150e9bdc16d8e +e0f42177a9fb423f2245a34dc8808ecad15ed373a368dce05930e4ad627da6ec +30c03a2b9f4368ce8bea2a19405a5dfe6745c90ad99baec67cef778651e4ddcc +e469d3978733fab41a687f7edb977653d119a9c8d33f299836f12759bd4f5abf +ab5b1679c61b46854d8c9345a33d3338c813f5f8d0947abe01fb4846afee616b +84f713090a8b665320c9b3be3baa1c7d1923804bb5ac590dd2f7d1cca105e7ae +a1b880890497bdc0c965e6c355463f8a5c481fa144dedeba2b5d6e1c805096d9 +f343738b9bf2571b3675a19a2f919ad7da95cc16bfb4d7e83bbff08c5bfd5b51 +b3ac712724e9d031ec14e05979f79e2db6d1b85755c327ffe124bbfb62c93f0a +28e5a60ca370948a3a2fbe3224849120cd74ae75aad8e4d110ea8cd3f7983cae +e269bab03078c3ec14d9169b2ccd4c5a3173d63c7332b2ed58b622c8bdae6c31 +bbb347a18271f610c1192085b933051bf4dc83f627002b9654092bbb48a0c6d0 +e280db40562724e3284aa644e399062787a2b58e850adb5c1c3300c2731b53f0 +ea5e3d8c37ca795bfc171259877c8c3735a46beecb8e8cf9bf7a3ebf60d90a5a +b228dea11f5b847663d97e8d43416cdab60be9641282027a152f39e953cc263a +34e070785904b1cdc78998d53ea6a44b2edae5be3a22aef96970ced5b1a8fff7 +20e39b7214ade784dfb059d1b9ff5e8a0a1c910e0d6dd399055d7f91bd13d9ae +2b6a651d1ac110d1bf8e2e43f1b4d98b3bf62b7aff5e7744eaa994d96d6a05c3 +cc66b18ef140d07551f83bfc4fb770f8674a6f9e844879f3f8b7bc956cfce62b +c658bade1f84701103df87cf8ee9e5d33690839e8fb6e3fa7ede4fa9e093da77 +81d379d9b12bf2a56f968d0849311e81a72c96a421b6cbd58ebbe138ae58623f +2208930037c3cf001134035d7e47cdf849004522de61c27263c515655618d1f8 +69784ab3f742689ee655228e1672ac9ca1806b76232fc9eb85f69b110ad6caf4 +2a054adf4e2767a95f5534c5525a5a6ac6008a10a59cb28bb70e1a41fab590b7 +3fcf80f3a989e905d344ce643aff41a74275905e9235cd33818c5bcee1994c33 +77938f2c4fd08fd052f6f59a9460d7897c139729e768cfa384df59bec67dc82f +5cf8e2638bbd8dc769ce87857ff6e7c4580ed80e630815057a0e381a91321af2 +aaf3710f92d3bea496587cc1baf8e76a90d8406716ad85e8bb3067ee410e32cf +9dbf16a6ba4a6993a1454a393aa1c6a4f5b85bd71dea9d09e16a82a2e64b5c98 +8d2f05107b11cce59735219b104815e38219b1dcc2a8fac862cdaed85b4e7f3a +3f8de686cbe956d7b11ca62dd89c68754e56caa56ce6f523579e725213913d16 +987674baf3e75b9e1176845eb69121707b6d061fbf86a28ed7e3cde2c0ad5fff +3200813651016bd240ea190b9240e682df8104baaea088c868e83924bfab865a +99831038e67d113489df5abf11f7cf0c1ea9c24ff19a56faeeedb1b2e103e0ae +b28b73d58224f590be7c0a7548caba79e8a312f758e48c9eeef76a012383e31c +4f457d451bb1c3d9bbfa9dc84c016f6a34a40a5a7f61d5312abcf985a5b56bd1 +de2bfb6427053f4f73b04f545d2e7941d6aa8a465719bc818b14f388161419d6 +9a965691fb68b9a8a0d78f89ced539556ed137321ef6c35884e9485070d884da +b5875d08200a593ae7f9398f4684d19a3a0b621496f032fb8d17a5735dd5a288 +0058b60770ef1136d78fc9dec10e5d78a7dcb4e804d199b659030aab2eff0a07 +c64aeb7b5bb2181d8a80f3c9c5bc1eaacccdef478777567c2f03d9706b4dce68 +2ee5f872e112f7a952101d859246bddac59acf9339b546fe213cfb6230bf2862 +3f0a53b0439839fdac6950f1d1ec14121a8762c94a928473e76e767931fdad0e +c399a7b27203d2198ea577f2a518fa57c75188fbab9de2e7fae055afe6f3c7be +80ae91ee04de86ed38fbd90fe76160e9eb222cc28c11ba39c3ec6155233f4313 +5478ddc2fcf853822921c9a5dacc1bd8a11858ce9af112e05ea6923d4f3af379 +26359d6f9fcad59dd887a7c302e868cf806c3804a997810b16d66ec54bd8993e +ded40daf9c1326d48d649390652bc12f8df57db93013a53a340d060f8f0ea208 +51ba4eac5c3d3afce0dbdecf1b6284c3c16c5529bca906a4cbc295fbaa9b2588 +7d5c2c70f6d7e0e0b52c4c4f8fb406e03ab88787ed35f9c5d95f6abc995be12e +9e51fd4f7771512064a1b2ecd96e89151cd5e135ed5f5ba07a16bcd4e51a1622 +75d9009dfdc4ece7a5bd9561a46099f05a8dc8f350069aad74aed48f7ccb4b96 +4cd0366b94ee152fbd623983a5fc38b9a68cc3d08914d2822e78da693b850b07 +b85a17793750802f661978504694e3eb4b5b2fea34b48eca0a8c24ef81d29ba7 +f6622d6be3305d90cb2af2d67a665c9acb1159a5b34353b0bdb0626a71efd2f2 +56188f41f6c85800ffd51866fa082561b6f19153b8afe445f88b4b7f15f8eb6f +757743d88a687e44ede5135356e211c8b155f12ee7aab0f9abb94dbc3c4a5367 +737468e6a095481a76d16bbbf8ecf6ba56f710b1d18af7ffb4eeb8275e095d76 +743da78c7e97bb5531a71f00ae8e8f5dabe1bbfb651b076aa72fda2d8bd0a645 +b4862be4c0d789d645234b46286cfb807982101600186720180ccbf34d64b0d6 +232be45545cf2f4bf0d23dee4548208296064165c34a52e734155f56cde02134 +60c4aad2e5d9ed3b44a42dc897482d4a1f0780210decaa5fb38ee0cd00a8254d +239b98ee8d82091f45afd8b2c825af54d78e1dafa382275da5fc8d345f643df4 +e4822123f04d053b026bbb686066674630165f5f0ac094d184cef0152242fed2 +fa7b4bde415c3f9ed71d34f37f59a132f8255706a3a4777d7af1fbd4321c86d5 +bc0fc80f4ab662c0f1e59689b6ffc36d81e9349ed7b762e10d85d7294e7d394c +616f67dc9624951164f310307ef5c69db573794a6c0c67dfa180a6bf62df1194 +63029907d339f69af39663e8346d43ceb7433770a42c00c7ac49ae623f4773b4 +20205ef154d2bf9053a159c374021a8202b246e434164c4353e96c3055a70a08 +b890bb0bbdc381da324c1f443157880753f7dbe688640f35d012d011fdc3b84b +530ed296eed8c3ba88ac312a5e94d23c4a6bf5639fd103c14db6fd71b6751d57 +92069f67cc142c1533e54fcd76109046f1acb94d66d3ead2ad35fb9e3e8e349e +dea50fc8fc4506446a8ee556f8c6f3bda2bd502518bf237a7623bca8e81655a2 +22aaa7d829acdd789664f32ba972b6dda0b6d69340ac6a4840352ce04049b134 +e34187426220067f15168f593bad76800e3687a9ea99d5d79a544adf232bd90f +205865688bcc84739eeb804f99f354dc932bedda4a54b0ccea94d3f129bb5978 +60a8d881a7b017c3ffae7c8b5ee76d09c8ab8572c81b994d49c2efaa80a5f2af +299945e831d2335d669c596b4af8e9f5083f90d7846b9be991430e7d396efc33 +c232634fe93d5bde557879b106ac4c7a124d5cfa47250a666c2cc9ce0a158d37 +63dec10be1648ffe60b51e94e8317c71c0553ec74889f87b71c7920fd676e09f +5f21a1fb909ac44dba922b62597681f9e9323e3599473f39e52b1348bf585cf4 +2029944d229073babc0536e8f4d73c8cb49264e660f0df5f606af0543a1137cb +5c5d008b019d542bdfcdbb3761d8dc373a20b76ae2b4885189edfe5bfa1e0599 +8fc793a9804ec309b0024a04a3c24a1efa61b87d1bd95dfb688a6cba47fbfb94 +5ec8770e1ab19a879891ec6318981d6bb73234675a44966630f34efbea0fe1b5 +a585e5ffe8f6d58ffd7abb3a7a13b0d532fcd8cf878e57cc0dcb761f291c5536 +dd8222e8777f112bd7c5d9d16e7ea46b00bebba2fd8870fd94282339f7298c1a +cf2f3c0eb7c203181b55043be782b79c1e33a178c53a7d09dc2ebbc3b338e5c0 +2dd813e2a456d88f4b658bb35c6ccfb1d51f83073cc5643fc3f98a6b712dab8a +a41ee7183668913669d13c9b0cd981f1b6fae03f47961a49e349bbb0bd62f47d +5a0d4c35a9bd80945177b33bb07ec5c92d03364649fc8683d1fc202c5ef8ffc0 +d7cf9ccb7589ebcb56f2ecbfe6a46a028b65889014748d56968746e37e9b4310 +7eaf668a9a949c851870dd5564e29be355b75f93496d997929888f451f4ff7b8 +3ec717df9865ac5769e8078669da3063645a9ae0576b5576bcfa3c1cecd8e82b +6a6727448ab8e6d5f8a06b08c885f59fcb66e918521c32d006aac974c10323e7 +a1f97b9cf30c825c35483db7b5196744be5f286fb9814c7789ad4b1b397e00dd +366b5b80a7e5aa28cad3856fba593cfefcbfb19bc6227b79c252936fb8f2d49a +2315ac036c6e08766aa2b287b6e0a5d851cc66afddf1e577793209d2dc75f2b5 +d8050b0cc54efc673ee8e42a0d305812a5f89979478de4c24896489ee3df4328 +a585536232e065fde26e460fc9435bc02445058d56ba2bee0a7b54e359867ea0 +5955aabdfdac296c39ba589f11b3d2d9c5e3b7508fe43bf63fccddb5ba21bbee +4269b218d978b5818751b2ac06871753c511d36f82557f561eb95c3b70f712dd +fd84fb5230b503222cf3a17fe8fe2666d1485419f4ad7bcb32ff66396d929d3b +207df2d811ee6fb1b4392f8b1a993dff3c254ac865a5217a459b24158269a889 +2a868c6c4fa9811e356371695713123d01a261af4eea0a72061137a17a93fbb2 +151979e29a11ca6914e3c6ba7990bd0ce58cac96c2e84927d1de1754a9d56ddd +a0984576475946f63c2c454bace266de5a6f4487a03ebcd1fb0df6fb22af5434 +6938dc41bf1517b3fa99fdc97a8d09c320388fe718a843fc3d7ea5b5ecd27985 +74b38fd9f1d21f2d4a25d0688b7d311ac747b12066a7866204b91c648d51a9d1 +b67e7cdcbe4e4489948f9f70f6866be1a92b4f7931a12d134cc82fdc4782e8b0 +d42822d2fa5df15b349f8f8bb4f56125e5a578b7afa2f409565afb59cecb9952 +aa42a7bd56fc954052fd6706caa5fe3ecd54035f2dd9e10336543f4eb99e3177 +c0d3b65b64252b132e23df390875a3a612823d62959128b25e688fefd781df4c +11a205fb7337c83b3191d7e38bcce10ccfa3c411bf6384c456e7d78bded31f8b +eee65bf5dd748fbe4f70fea9a542f894616252d9d809deb49a9775542e613919 +fb07e86d16b3f51736e82d27dfbfed036782ee3739871239e34dd7fba8deccdc +78aba8245f945c5b2dc53e2cd2f1354a5495d4a002878dbc7ab9ff6384d9d9e9 +131b73814ea9e5fd0b57889496763d073fdc1c5433be30acc62f3fca83326384 +5bf724e35bd947a611a7bcae04648298dc434e415b8c1236aa8bcca1be497a05 +8a0bbf35d224c77ebd7ce63a69b21163534c00499f312de6cd1d63112fad9c4b +86d437a975b0854e35c68a0259e0f9aaff4ccaf3938a2e7711d6545d75f264d9 +a1a00d8407b8d2107183c2cade139485cc681b1127304fa3c40d377dcad69884 +86593525bab6ecb33e02c7203e75255b7e778583cad2c2bf8d5da414b37d87ce +2c230c28ba4761ffe92ce3219d5168e54fc89ae3f1ad70cbc9b956b09ba6e3ee +58e57de7b56d02a9cf7cb8da0d6ca2c3076cb9130165a2b65bdbcbd47c31ac3c +382e0227ea54e52070ac8f126867360726e1124415c83ff1e64eefcdcefc0ce9 +54ff72e9a015e02e4bb8b9ca0e04592c833cb2cffa03eb0447c1cde397b2ef92 +2c95430ed3e54046921ba40bccde14d4ce5a0fbfacf25b2c7d7024545c4b51b7 +d03f662a87740abfe9248449753a9007deebb387d7e7ab76631aa062f79a434b +35e38c577bac6a5efc56772255ac92326adf9023aebb17d8e073ed683a029ca7 +8da3d55197392554af500283b0e47611a3e2b68c852c349996113e47742ac3fa +20e61b641e29eaadb4c90076d2734ecb674e64d25e859f6a085bccdc22d35885 +ba0960eb7bf1072bbe291f9b1d1ecd7935cb7656ec6bc15d64975b1c506180eb +0dbb33dbb74551622ea37f0d813c71416051d0ca33dfbbd0d552863afb7061da +a359160a493ef304656fba57239ab154af8727eebdca342b288bc07ebed351bc +f276f5e6c1dc9cbdaa91451106df45822393a8eafaf03c3f024b20dc0bd5e4df +43f3c6687f2019d642fa79e8ff88a42506d1d7d6b9be7feeda8e21315efe471d +59bffa506786dbdbcace04a8fe8ae423a27b4b9c0c1b8dad3600f5bad7bf1780 +759d7cec3cba13cbf618a53df36c5c2702a38c3af55bff63829ad7f7ee534144 +13f4d5614c05b140de29a9db8135aa108757505841f855c24761c2ed71f89642 +041c855fe532013d0febf7a861bd8b019980fdebea9b245fc3059a8112559970 +a62fa095a55c638bd7a2f28fa2da186d62f130791e8c34e8d7dddd1e9cb6319b +cf6ec3e238f5c1312e92b5dee3dac520eecf315610fc65f458f9f48b0dbc9e93 +b1343008995ac25955fbb881b051114ea5ec4a45a729fcbccee8da29c4798237 +5db572fb7eccb0ba2b41371686c237234a8866be9f1017ff5d151b931248b9a9 +d279e6faad1cee0e2c94b424be49aed7288311ea1ae5f9612bccce83e65ee68d +00b3aa5358cd9fc62688a7694a0e4de3135cecd48721bbc4a686bde074832dce +0f0c31099b35cfdbae50071d2f4c26b55ae51b919c4c1100a02927ca59cef516 +ab603d631abb6ac0a5bc4788bf8e53f22f83dc621cb82372ed4329f60e180c17 +e27e822de8a5ea5d3fb9e0ea0b2b96f1fa398392ac2e001721ddd7423f19b967 +4053cc18287e2ba5a3e2d0a0e80d93ab99b0b3ecb3afe71f6a384f62b938c818 +17462294d1c9b17ab3988e7ae73f3efac6ae24b3ff82df6eaa285f3ffb3248d4 +fadaa73b7217b0c1faf8f4dde2c53fe9ece617950bca9b3d66f0251536963e58 +15c6dff60754eda6427e43b0285643c0a619b14acf45da5dccf94a2332f99752 +dab07d1417ee757010e091cce4143b2053fbb276f5e1675006f3198d865b483f +f4f9225dc95b47690742826aa2c0798e8adb97bcf983cacb4c3037d82a0afc4f +5596547ffee1dc83e7fb94d3d14aa19e70c4d9bbe9f0cd519cfa91ab345f0e6f +ef54525efc326d87993e8e51c9472be3b346b06d6a05b93b07e04c45779914c5 +66ae97cc9286e7218b9dcae206c48f73de2df368912f7a45602cc3071170b502 +93d8a6adc85da881ac3eca963b02849ae9889eacd3129678dba7d032d465fcf1 +bb50627f25cc2f290e35ae4897cbc9ee040e66db1cbd80025ca4188fc2d22d30 +38f7cc8e488b0a769599372fd924ae386c18bb6313b6dd7841302b8bf688ee31 +4477d11eb74b2402dd2a4dc51a6e795c141eb38a0920d6fb582abb07aba1efa7 +d28c7e6a7b0952e1ae2ed26de402f712c27a96c1c51abfb1f5d56c0b67e65cfb +08adbb2c7f725dfc14c054c84e875746a704ef41122f0e9d496dc36d38c80861 +17341595c9c1097bd547bb1f25a5a64627def63820479beb5780cce34dc7dccd +1d5bb7718177f49c6858c94178ab5dfe5a973f4fd9b621220c13f78aa5d2258d +25cd8deafad8fd1dbc6778ff902e36a3c190d60547fa62f0341250ccbefe8647 +5e4b22828804d03f17f54549a66514f6458694b884a8a733ae55975249810acc +354cc875ec55260386693c8ae60160d7af456e43e8b7a3cea517dc502a42803a +73da983f7a78d086652d3e0add8fbdc7c9c2cea754a8305b9b79e103e65b1832 +a6a024a5b8fa8c77edcddccb5beefa3c9d1d01c37a74a08953642083851fcbe9 +4d8bce1f34b7c71b68f3247eb463e7a2fed1bda308c877e91a86d6052ef9d55d +06d6b83b9af7600d61c36a6c460cb43af1cd5bf65113115de83bfc6081d1c0bd +d88f19949680caaa9f48a608fc67deb98ce9577f24f1c2184530f78f788e19a1 +5f17836d2522fc9859b80d7a3c032f533bba7210e9fc43740dabd27fca4c0a84 +fb0b1849a93c4a09c58c553d0e910df0b2c5ba53e8290a3fe05680cd7c611bac +2a82297a1d42e400df434b476be5a2f92aff2db009d26dc81043bbff997ba7be +eebe8ebd761d56ec4e45328dc273f86f13bfc0f5139d908145acf933632b4f78 +aaf3d1917ff63904f2ec971b5b2f4ee6251c0e6500fadc45fd9aaca127967082 +a61ca2891a40763f1fa17f5c6ad3cd1643be1c088eaf4d91e328ebd670768dec +dc895dfc6a554f7428b5423a86858aacadbc8819c0caf25ce204f98976c7f18b +071b79f03d9be136d36b51fbab43d7b7e4a6b3792e3a0c39794c46eb4f4e27f5 +e805923bd6c4c5ea9612fac86f7ffd3b8ad343d2492b8d9f052baf864747fcb1 +b6465f1b1b7e020684c863ea38668c55ce6958eb6bdf0509834ee6fe50864116 +e3160227aa042e26fbd6629cae19d0435b19dfbc92058f319de60913fa956fd3 +26e76b5635b9f4d6adeaa45f31a32c99be06343571e5176e8a89c544f6ea4572 +964f1787df93981b88f68b4999768d382128d5316e83e74643d70a2ae288291e +806d19b180582e19eebf8d295ed214d966b5282e93c32452d58805829d69add2 +4d9ea97d33da81df65a4fe30ebb6b5b8c9b5102ba616bc2da448eeb0f0a93762 +a40521b52f7387c535e17069ffbaf80f0dbf57b296043367237fa4229ffe30ca +938265084c735ceb1fcaee87ee82a2aadf9efbbb4cd80168a0f975b913a236f7 +22fc543668e57e0b0cd201b099834b660b49673d12ecba4f123be5545bdd0df8 +4f1f0e00c46c679b915684b51995d80629cd4485a67fc28a18416a3639b11e34 +b40f292a620fafff9e21b31c85779e885f07fd8a400f84235b585634d233834c +d20801ed4b4973f1e91379e451cd8d29cff2b9989ced4fc976536446fe2bbe7f +f446c5f791ee401cc5dc916d94a2631396634be1a2bbc944da4017ebc4e3965c +e780b758000c9928962f667300812363c761d33f868b1b8753adfc3e77666e04 +c1e468c04da304f2876d1afde4441719c3687c19e75dfaa44bfaa64bfae835cf +501d71ff247d1dd18953e980c8c3701e1215c588ab78b27c41c35c265063c5de +6fed78259cff1d0c848272b4991c414e94fb052043e0a7fd59df65fa27941e06 +9f1ffa2c5f0c32d0ce639ee9c4a5ffb288b749094c464c679ba3e39a11a19cad +1f5192376ecdc9a9afabba7f4b036edcc94e472ae1d1aa64197eff0c87dc4d97 +5fc283cf7dc4944ebc13bd1e937c97e59f053633c52afdfe1495953740578168 +5d137087920373603688a3dc4ad18137b7dc38d8f94bccd6419d9d356d7596f2 +e027ff487fe91e74139ed748df7de8c3db5fbbe0e724bded756113bab6047ab1 +574e67413fd8aa1aa851d1841d7188685f0413ce23140d869c822e22ea13aced +4ba4acbf0d9b65be4227d95e84944ff8de263775659eb52615d6ab62319d75bf +805a6abd316794954d029491f9fb47110ed48760f7b39a8ac5b24841536c2a02 +2555eb6dc69324f9d735e5f2421c2271e6b2619d2515e035203778cf0233bf7f +e98f23bd109cfc4ec0d01e3db3620b1b9846670bf1a8b2cbafdf7731f50601a0 +214619f59f389d6b1e0e0f5660292dbdc7f2a31a3370d54ad4b02d13f81a2f4d +18b6487425ac00228266f1027a26e4903147213a7a5c29ba1bc748da6385d919 +dce09b00fc655251eae84d6f56ffdcadc25d8c22d5171f8c00ba8b61f151b985 +6d55137cb7008061645e8e4f2315c1553381147cbf7901c4207acf851ee2d34f +ac0bbd28528525aa65c6321cbd68bc64694838fd81b20845de3088ec9e13a886 +801a40c656766860361e04ca6483aba7fb9ce30339df27fdfc44b34fc3db554b +4e4ef91c3b7ba7484cdc036fbae749376229a608d1e00913c03018e247cd6346 +9769dfdf3012c2f562905d9da397bd007b2c81c47b8dd3ae61362fc8661dc620 +bcf9ef2561e3c342ad2f3962ccffe8e98e6d62c65fd9ab872783dcfa035ef347 +a2d0d61bc2ab27e4f96f609b91ca099895354ea9aa11881944c99ae187fb591c +01cccfaae4247c6143689dc9da0224a43c2ce43b97d49c0caaa14b838bebc579 +37fe3a2aea774f1b1cb928d69b3cb31f937ce83097b12d6f76eba9be803c0a31 +b0bd8de2b22489e3da1b833bbf7524252d51ccf76088fc4125e1d0e6d6815468 +547b248d16317095d732d1e9276d063ab7665d2e684ba272af6351a737cb8751 +9c74e5c624c79a852a39bc22446a87c09bf4ca365b1d134c7d6ab23fb5069d83 +be00745f0672fee615dd8071b8ccb31a4866853d7805ba92c618d2b849ffc498 +6fdf4abc9711617d498fe7013936a85d12da318bd0b4d2a2dd715749747cad04 +ed570e583b2f33855af8a8d1437d389d6e9b3e47f9de9de4481c492a05ac49a3 +457307dde03b8a30ef2edebd60a5c556db43bff4854b255c716cce2eb9559a95 +5dfb185e18a341b0776d6c782c98675aff75d2fca752e915f58e5c9d0f192914 +88e46db6a51bae30403328930f5639ed29396895778431543578109c917e5730 +9c5cccdb2b6de16a8cbccd1bcc97556e666701659a43c5af8848fa4318cedb25 +67050ee249eb8a7fb5c210eef38be485c82d69ff77d68982222387a04b2d08e4 +48aa0d2dd0201a1d06b8bfc14169ba52d34bbe65a03715df03259656760f90d1 +043474c465b5c900b86461c5e33a5f93210871d0979fdb5b26ca1b2409c8b5a2 +9ac23b4a69053f7c63efd9c9d904472e1c387f97669a830f482bf3658403d095 +9795695185c1a677fd24f146a4c01821377e35373c2f29252f2d33bdb4c2e65b +54f6fb2a74f4f69c8099cae259e3dda70f680d76027e951c523b33adfbae41bc +33940df06666a88153f983ffcf016ad439a84cdbcb32117e5e597c541e7192b2 +11177afe54f0ccacd3b67c10d44ddad93e604585a513831c8ba986971b189295 +843caa12d4c3066951a9f5cb6fcaa07444e4be618b3d6de06fb7754823e62fc8 +a87aef5f867e80fd2bd0c699240cd59203136efc3a94eb3259f68a81e923a78c +8c30c38150bc808b7a0aec0e254e623474456084331837bc16ef060780df87f2 +f74fcf280ff478a04add5a41aac7dd136afb9a4721cb04f1a54e8ad7c886cef7 +33d14d742c292a307b8c50ed8c16756a336c45e6843342a15ab362170975b429 +3986013ca616f6728ec65e0b4ef1f4b648db8f12c74e38b2164ff0a056b53aba +a218e7ec36425b4e8dff37e420ca3e1ba16c5bf6adea301e6039b596f3ea7b29 +df568fe8c742d0bcafb24e7f561c73aeca87ae7cdf7ba2c4173a5fd76f941586 +48144781457282078513542a6ab75d2dc6976f185604e4ffc7480015d9feb000 +46bf9f6650d702058dda7e4f410de647e3ab2ac42561e4c73f96a22fea4a31d8 +f36da788f42ccd7ad66668fddac36c37b800b19bbb32721c40fdf1a523a06750 +86de6580a675fc5e254d782daf7c903bf2640aed85198ffd17f19d91ae85b526 +448d14aed5cc66dbef9b510c9edae9210dee8f44670b4ba2945dd98a92d49fdf +b884118efc1263ba6fd2712047df194e12e107b793287007b57145b54056cde2 +e8310ccb234ea73ed35cd7a060b6088fddea99c4d93827a0adbce5d927faf657 +d3a7f8a49626f9ed40e1e3aaae8650268c4aa85e8b51f63ebe592e773306deb7 +c78f80d5c96968264d0001bda325f560e664f9be197ebc3bbcffcd0ae6fba5d2 +fa83b6da0f8a6278c84530e657e59ecdd591660a6607eae2191a0fcee0e8b8f7 +de61cc07fa55dc1b9bbb98930f93b1d9419b84e6e7b8ef2595442dc264c65746 +1bc7a160af243059e0030a31740a012b783247420967746903bbf44ff2b33aae +487fce9e1b54b1e67fa272e64463a796201b20b6f123bdacc9f04ef881b16ff0 +b60c151419f090edc5d95ccae9773dd1909a37fee6bf39f2fa658c1da7a3ec5b +290f183b4ea95fc6edeabb46b5f518a63d7b8a1e2e0b8c1eb35c95963ab65e55 +9720282fa5e4989ad605ddf5543f50382f539642340c26e379b5325a1262fc57 +532fc4e6a315aff2d4159a0eac7fd498e09ba2e64dde029f33402a21f54efc92 +609fbb36907d798a34c86644264e0ca3da53639e262b49be5f3d212d36086fd1 +5b68624476c0ab1f715d35907fb19dc62625f59b5e9e63cf8fcf3c3c68a6e480 +2d927018240a8fe4230922bd0a431d67664753d51d4f5ee894b5ecf678f342b8 +05b201c2d4540e452a1be93da7c0137a3852709a8362355935494b1401ab73d6 +0c4fe07b2314e63db3005a40f4b36dabd0db3eff936b0a1cc643227ca4fb7e0f +a29ec03ab4610337bbcb63d72f42716fab0a3058dd961b2f291293beb9126000 +a8009a5ab98b0c7529c0e2c4ae27acb684bc3c07817a2d13c672dfc6cd448f2d +9c8cd5a1f597039ff2601d88f2b3dee5980956fada5599c5c968c5cd2db83a9a +e24e2a9eff9d3a0a488f3d7a68cd056a6f8502d6e5a61c305fb99416001a691e +fa95afc08246bf070268f62f8ee9e4ac8b2d812a728db372c62209fb6b5f6789 +7bb1443ad5241a004b3cee1b9e1671d5de56ad5491e42ea7325cd718578a44ff +fc73f544a6b0b1df27c39e213379a1017d60c11a5f8769022bc8fbec7405f4e2 +bef06c1962e4b4c45a1e080ae095ce911736f220831a2bc4c958a607b9c88a05 +96beb76fffcf4e469e2dcc09857bc9ea5687be77e1e392f416f681dbbd8da68b +f378547ecf9648c1b95005bcfa1872dd1e72c5510bec48b0e411ca163c8214dc +0efdfc1f08e925a5bfda8e6ad2f9ee106ab0a053fab30677c6ed7992899d3d1c +30f11e59bccb1e0b329dbe5415fad4b7e420cf9c2caa8f7a032d5e9f9558c2b6 +80f5e6af2158a8ef1fb1e36554ffcff934bda7039ad926ab6e12555d30f76f0b +e98e2e19f12d4f4e8e5ce72e4b2928c396b2e9debd44b9bf80e1df5acb4b9097 +f6fcb00e1ccedcc72e494e68d55151764795949847b513c4cf8694a759f1c5d3 +c6884ed10626bc8eef3097934426e7d45b919ec141b9ab389746b6c277469d33 +b82da2ef40123707646ca62adfeb5828706b571e160efc63d98e8e30af9a7c6a +4046777b2a7c17d08e0cd5e1b79c261b60cd86fee6668f6a3812c6d1bbe85d1b +53a79f0ff4e19c0bb6b2b07c3bc145727d25f9adf2f6ffa14e74e33f21827092 +1ff9d9227d08e044cc750d532bebf0962b6f65aa2d50fb238ad84646d16fa466 +3e592b1e3c21b07daa5e8978793436c50b30f31b17f3b8c3a8a9c98bebecd6b9 +2ad5f9a99cb4649d799dfcaf8860759ac26182ed3eb6a82a980232a426fb7934 +7869b8b24c966de308f669ee47f623b95abbd9f7d81e5d0e81714b6f328599f7 +5e7f9a85f92f76e3df446a7130fbd7652d17abdc021fcdc761f300cde20bb116 +e36484ea2f2ff9032bee64fffe992b4c437845edfa194bfa3388a22ce241fbd8 +fe8d0549d2bf43f0ddc6b0606e976dc36ec055c3722d7fe96a7339d15f93befc +74b063908a089d9684f93364476f9694a9a4a4e46100a6d5d2f3ad34702ec2cb +e64cf76d70e70fe725eb25780a3dcc619c3d3d1fab7d93ffdf695c9d2d86a007 +ac11eb3d551592ae551cda8f78ce2f4a06c798b6bce573d35f9c01a775fd3e6b +9d6f2eca089b11c38b812b9fc497c58d96797744d9a433f0f0f545bd7b4b6ca8 +ba8011c1ecbf6ef91b1ff7d016865871a12eb9ff3f55e4052c152de96bef6d1d +698b9918a8a68202378374097d8ee27f153aa3eff3c6d49b67d8e09cb51b9bb8 +d18eb43dfbd8647e4d2b3992810e46ac719cbff5a28be6532b39c2b462620109 +f42cf1cde4aed3b9f78ba888824dd0d32778be34ef4a7a84a785ad7920621a25 +74376e0faaa0fec39bdc769f5526fbb3f620b3926f6bc749df679115610bd29a +fbefa357d082db7719a75b6396a01b775bfde12394c4ec0a0f75ccd92de8803f +ec9f408861ab730860e0309b3f799eb7d99fae4989c83e46639d08a662e71ede +60aceb5280b19a7ded32438cc1ce140487e52db031e53ffdf299d552b7f9556d +438171ee4787bc6b445dd2bc23da420747f6e81046e715dd6f5cbd9a97f08deb +a742feadcf5d93c7c2557e69b45a505b91ac6799e37f40a2a70f3d0c0885f85e +cad7f5d5498c18d496f84010cc0da7fc91c4d1eca61ce021b3f204ccac60423c +269631a05d330c8b4574754aa6019885866e0245eb7efcbd747dda328525cf9a +3b13b29b8752df2c8c30c0bc3207b37948c30a2d037a29d1ce075b778db6ce18 +551facc66a4032c9479e5122ef759d8c58601a572b0a02d8c606e0f4df80f411 +ff5c60c06c5f263375fa7fb67b6f670a453bbda2f41e71c7da09770162f636b0 +108680424e1d6ed498acf2b997dfec6d8079b2d26103c67543fd0bfeabeb027f +dea56c640827bcf1d5c9e353e30b46ee9d3495c9af5a6cac79703aedfce3a0c1 +d4ce1b20275ed9de111473494bec7da5d579ac5260aebe9a0cfb7c6730bd51ef +c8b8343166a6ea72e0c25fc745b2c425d852b6cd9e8e2c0cfb16be2257bf6933 +86693e380a7eb1c9c24f193620d886921945e5043fd6b8798c1105ec40d4fb82 +56cc8ed9699a1f84d7438eb7447ff6112686403c97385442c3d34a9187eacd1d +dcb4b5fcf4a11e90baaa10fbd457053f5270e4cab233f41f56cea906103c5b3b +0e7e5f9b8abaf1d66572ff8b15e0979926dadd51de964dbbac8abc813c28ad71 +4b14bcc1690838b6a2a33a4045e7ae481d679178ff87b65d5e7bdab7bd59b536 +331c132115020fd681ae7705d805023ef790e163ec92f41035e28c6edebd276c +d4de63de8141cdb8d77b6a657713bd1c38f02ef1d97dc791883e15d96b7b701a +2f124ebb9aa3a2d90dc825470852ae8a959e10375ee5abfe70aa5a1cc6cb58cc +df3ccec83216907b8b80ff54f35d53a2d9c679e61c2cc9d8b3271c597d1cf153 +f5dda0a71eb2d2ed289a5b0d8eba301e7a4fe05e649d53cf3c6275c802b88fd6 +5508933966a5f261c898f755a60d7d3c95223e470b0af6ca4b2a57615c3e2465 +f535753c0c3d21f6cbefc29036d3e925a4b6216290abf8ddc86ec955157ae441 +6772fb59eb3b6280a78f9183bfdca096d5b46f938058c03b38adeb1b4f4fe848 +ff24ffbbab3077bf50b1fc474688bcb05d9e07294f3871bb2c0dbd266866cda9 +a22b2f3638e7b93d6eece65df65835d6c8396e5a109bb65d9f23619ba85ca9a4 +34564b9f706f2b0b7b68518f6e0962e101d6a2a83565cb1bc4342fcedb6e7394 +4d303d4ed4f792238531bd105fff9aa61c29bccd5d6c6ee399b48ebbb5bf3932 +63de8e873dd0775fda5861d1a9c547c01fc3cbdb7f9574f14bdb1e97280c024a +63a922657125be2d5f975e86c0e4b9b6174157126a9a06839530543f1fefb261 +143c666c42615933aace075512a988c9f2a46a449ec3b13fd118b4626e2a047e +fc90a20772c4ebe9b23eb733fd45dcd20289ab7d801aaaf5fce13807ebc84420 +fcf927bc88e48903f17bad04fdeccb76c7e2ab93e008321fd5a83a39b8325343 +59d4cba664629d807b624ec727850bcb92043788a855a28e86aeed0fddc4f6f1 +fd11b6f00224dc2d88248abb9245112914e92c933800336c75e10550610c7569 +e09c8a3389f88d25cb30f7be1a6accc5dd17b02f141f729f1b36d32fe93b4ce9 +75865054e448fcf1ca846bf004c1c67fb3c48a4ad2bd9f1d594e4646eac106b6 +7e747f2e64fddd88d076c03b8d7fae26b53dcb1027f92fe769a8385e7cbdfff2 +e569a107b76e592fa59f8d92e9f009ebbd872a09f3fd3d9746e8a8955634858b +4d4d967be07f8999d7fdc0ffed37e83f865469901ea075fc27e9a759a50dbf02 +a7a1d7031c78c9cd66e359459469e2896d6d4fff36b7b2b510d66761fe133053 +b2d64c8199558288054b842da2816588a898e05f2db1a5e11813ad89f1660910 +410c531faf42f728cc1b34188084de2578dd0f5458bab3c17da610b7d6afb635 +8ee66f8094436d0c4896550753f4a06cb566188ef59b536ba03ec04ee8650a3e +3f3a932b61c940bb0eeef0ef7c1301ba52e59a904542ca2a9bb82e1e03500a04 +f818f8f747d3c431686d543e47b14b37cd1e44f021a5da657aab08bd56cbdd7f +453c331b7041958d618d4b007f5798cb49260ab59801977df6eb49d3f1e609a9 +c862cb2a297a2acab8d2ff5263f40fffc73078e777863f7947b0419b6026b7a9 +f1c14bd344902c8837f5a5c6a7002984f40607f8dbf01e9caa04aacab39ee10c +0509c706a04db09e08ecff57cce67da05ac8dc14f700b2ff731d0799236646ba +68f305cf7f79020dee5c99511a37b63a693339706560635dcc6bc14d5d12ab98 +4ec26e657619d2c6d8f6490e55d3219ea28c69cc92c3f67bdc437a77fb9b320b +ac18393b3fb793c308e92a336b174f7355710966c2cd8f1f8ee6f081f0c3031c +58149c41849c763fc6395658dc43c86f5488404778235d7f066b3654b9e04d36 +786c1a766e2a2e10f870246bdc94e9241267d7b71c0f4acf0365d8f8dd3c1c1b +178734bf1ccb8d202929f2e956b4f27809fb2e2677162c978fc098584f510765 +415d6254734a525d73c92050c3a2dac12e1c037eb2c1f1ea479cdb9a2da0e899 +05b9eb18eda7a314654f7ecf608531be3cc30bb8abfa03102a670b87b61eaac4 +5af4d898243ac70207fd1d5803138a78744528a47e9e371817674f2ca6b97a59 +f19fe641e8e121340daf52a2ed995658806777619a6b6dee640a04b63ea9f446 +f4dbfb071cb6f6b4d82e85b4be34c39a4d2dd417aa93e07fe3b3ee3b53644510 +4ecfef4e1caf7b89c0ec5c3ae61ba1e958f114aace905f7cafe7a2fb2cd17e91 +20275a058ac69193c471ef47490d21770792563a63d87e23d8e1e6158fee9510 +eea1d2bbccd5f8e28d63c04bcdb78b3a49d640825559634dc9e5625db3b72011 +85de810c60eea94efd5e25a04de8cef3566c0f4b6a92ed6e58700b5598fcd65d +42c4ea8efeaed8168f36893aa2465f7f6d5d3087763b4f2a53b38ec3a61173e0 +48a4864ae6a6f6ecbfa1e92f15de678eea897b0776c7fd7ba192c7da0277699c +a1ba6c9516f89ad044c418c24f8af15fdd129f2db45cefe186a20c6abc895c94 +241a19145c7f8652439fc92f8ee142abd14bdb4f80bd43c3a3aae6cc8c77b759 +21b42047c0e374c123d3f631e25bbf1ab42115927ff52af0c3c8a31cca288d72 +126fa5bfc2d54aec8d05488348b72e80b08cdbf483d994cee779296b9357fd9b +addd288dc5a8ae95467e485a92409afbf3497aad25a097ef8165c40d802bf74e +79f08b2320aa4b110076d4ebe15d073d0ee1107ed6e9d58c05286c62f4136b40 +4a89129c66c1d1726c99b8cb4ba8bbcb6b3b4e73a11cbf11354284f23a76e0f8 +aee94bbf4d661739b81e3b47d5b4ace66f695001fa09a18a9960d741a8cdcd4c +4dc1c68c0fcc38416fa6f7877befef5aba8968621ff6653653b3c21c8bdd0c3f +07b8eede44036cf8a0aaba353e2eb14cdc1341687bbf0ed1d1f910c6ee563179 +95bd02430a3eda60eee5d36abea5ec10e2de1dbd9e3cf96c0366b602ff976873 +3a49d5019640163949e41eb4073fee6681d61698932a4d8c613b686bee37bad6 +ee7f19ad012634c3b6aea6a4d44d1bcc018f57a72cd1b078ed3fefea13f991ae +e6619bb1136bb64b271c96ac8b4290a34040c3d56638227676d75655abed1eb6 +d709082d70698cbd5940cde861d6dae8a7656d6772b89202d376076e6d530a2c +c1ffca88e2aefd6c4ba2f3dea6881d835bba8d433e18a067bdb7dde867edce0e +48d9854f21126726dfcf64cc97831883e35fc429be7c8ed512b3049b40af8114 +35477c782c676d374dd41673af8e4d3d929054f1cb3aae92a20469fcf2b0ebf3 +55e18aa050c89b1f35c8dd7ce1f26dd542d6c70af4501c7486a72cbaacf5624d +66dda7607fe961681476fd54154705c0b0a2fb1f8adb4d50dcef80ea10b341ff +d276e9e12bf4a41aaf9efff1b98a4223221a58eeb2c094972c4c61aa9d6b16f9 +a36fc6af6f121158c9e3d3fc47b8b716c785c0699703c91b80a0478a391ecd41 +ae7d56b313ecf34774933493d949346ed190a7a4ccb7e7fddc8da3c77324e9ae +70af63b469cc3e8838d61784dabede694c35cfa46f1396296424ce3ad1dc7d05 +e6e94624065717493ed3dcf92620e88472118ed0981ffbaabef21fa5c708e3c0 +349c89b88fc10cba39a1807c8c74aa70829126ce906a351203e1542d43a45779 +59e9e65bfb567e9bb7929077a0a1dd08b089ab35fcccc96d3a6d5ebbe4860fd4 +3c936648b92b2d455f979d985bb1af8dca29859224b2f1e411c2cf9489d41dfb +75dbc22658a45c16da828652dece832db5dd454783bac82eb4a33a4d3b82f62e +a36ef09beb6683689077c8fd089efb46549515ffc875cc48aaf4152fc484782a +4bfb4b2f38ed7ab8600d0066e27b03b7c4c21643f3e977d1a9a830e714d54b05 +04e2b7f883e9ff51f49621e53edac289052e44dc1099aba1717391973f827b08 +8b2c076e40abbc61fb9ed2582ef2484e7e07a7341defd54da7e21f16c071fa3a +51aae26760029cb64ee948c4a54725890907e94804fd221be309b33ec2901dcb +95be395576cee7f702a03901044054423e3aa0c508cba6f545d1faa5eeced999 +f0f9d4bfc5495c8fa65a1f18aa190bc11ea45ab16140f8ec88d309648c64eaa6 +57210b86df19d8d9ae5b98a2b74ea37b88cea4e11c44f879cab4e7510ce79079 +bf63192ad4904b92b6f622e535b538f246d802e089ef1c8b78666ac83d20f864 +681183aeeb6b4043afef1ad4cb4d5ed2d0bf8fcc4f1ee159c1291050da9a52ea +fdbeef2e5d5b2579967b4f33aa310f8c726aab7b9a0a07523a3c17174ed67a37 +bea1fa202f75ef9dfd3c597f3d983bfb53ec3d5c0170cf5405ad3be2634315b7 +f823b857f8854bd67da9ff0a01e9950bb0699bc2a4c0fc0387f336ba33d7ed71 +84d531f2b0bf886b562c2ed2dd6fae78762d409ce0cddc96a7161b5b597fc154 +1a1abeb0954146fcd3e44c93295c709e30cfd0b7ed5eac7cc4eeb0e99dc8fb07 +9649645b8c590850ad20bc44eb2c4025a0a568ddeb503ac1c21da965ecf9fc0c +5631cc74b3b0ef2b9826e2b4103ba3e0011ebfc2f0430afeff63ada1a3bb5568 +55bccd1ebab67ea9a04bc971ec6a055563a71e362ad3cb79d4c1ee5337ce5f87 +098a0ddada02c19cacb1002146bb3631beb166500d1fc9ae7b88949e36183f9d +86a17a36b0acf3421162cf120180d3a436ee5f6bc937ae7cf18ffeb652c48633 +20ec0d42bf09c22daeafcc2bd681f19bae1f8ef7e15f5e09c4beb446d7578b0f +49f2042482b785e8543acf5159a40e847b078629e632c5620b86e0e539b6b4cc +f78da4d96f465ffe472fac5ebf8ea6e68b2310a558b9ce3ae2d16f0bd1a1caec +e3e7ff8ef1ae81ec8fe81c6c5bb7315165e89d753987eed98ae9f2d89e3336a3 +0fc24c0f8c3f2ea135f6c306816470fdce5d48a229783f3d1f332b6f4ac565a4 +0b1ed85630e64a1ff78ca6b92d47d317064c88124331b78cd6caa7c93f5272a5 +123db565c6b798967e149307118178b1d4a0417c95b2df7d2867e15e7d5574a1 +4f2146a5377247336c09f3e4e5b45db385d7cc90a17543b86d7c1f77bf1c5182 +ef3d26e6e95b7365d12d5845301ee48f90391a8075a80306348637b56f25fb0b +5ca4f6b8c2041a5697a182773b30208c5afcf5c9acb8902dfeadff795d998cf9 +b3a8abb77f90c91542ba110ef727c7d9a13696d858bcd567ef5d64ac43d26c20 +a9aa27606e9f5770c3cad5f8a9a527de7403ea118c8e43ea064e6a1da9af3382 +38591437dda2a87e80a9028459eb1ec3411b3f24f27630eb7e356ae3548570a5 +8bb9463d1abf3b3608ceb02aacc7c9c06ce283355e5073b2b445bd815d27708b +4020e90cdef6bf39de645736d0730278dcb3fafd44ce088ab70287d9c767d49c +8ad8117251fb55718cce2cbaa17d8494369b3ab37ccc50484fe7bf2d305210d7 +e011d36728405d1ef1a73f9e53e33ddc8fd38569ab2bf28cc07d0799772ab6c9 +6b8e28f396e0938dc86b896bd668768493ac290cca566e84a0aa432832df3b10 +8525cb08ca50ea7d71eb8d64e5ceff15da8a9c89849e85269cfce2e09fbcc42c +28a3d675d9f75d7d63778deb63893b1e7676ab4408719ed6e3410b4e2b783013 +de27eaa26e7318c372ec61282404e7cb9f7b79d2a65f8077f0a7a1733538fa78 +66b32437cb5fc67eae875dd77374d3f2c3c082f2eccbb5d7887e49ae1adc0d84 +0f5171d843ea609516da88bbd906a8dbfa77cf4e68e76aeaf960cef82d8e8f9f +7d03eea0c16aabe9501fb6c1993fe240b8b4804d92bbab0bfd58b8497e45d410 +033735eabeb4c92d17af8b9c5dd7bbf93ca4ef8010407d69c35a2b5897ca56ec +920980a1c8f159520e6dc28f3a62d6e7d995df93447fc8e9c19215cef25dcd62 +c9a19e12862f8e3bf347561addfa34c9e85598b68490553cadff9ebebe1ebf9d +954bb6d27608acf46322ef67b6537ee8ebf6c16b97b694641e9f2858fb9dcac6 +311e198ed43c34aa0a023c1008449186f2659beb9bf7085cf7a7ff5dd048c910 +66e704075bc9d5da90c2d26b14d7ef8e3d54fc72703186a8453b83a7bb4fb5ba +d3f796de88910b843c9be15ef354d26bd39e1d1503385a169f3f92b16f3f20f3 +1ea9cf4642d5977fd23aa0e13ca82377ec95fa4b908eb0524e2c573e42ecf2bc +90c51054a9a2e0cc8e93924a3f71edf177cbc656ae838f0542833b6deff1f990 +7d34eecb257585fea135ec1081a97818479c80215e8d5c4fc9ee6e9f68781682 +85e8873da0a1d6e44b3187df9a0e9cf69372d9fabbb11c9cb68b4bfeda609682 +dac5b5e18f004096c42ed39016ccbf4008fbbbb32ffbd970888247bd7d57b1d7 +11d4b5d76fd339fb769254a0833157eacf95703abbaa0936bb10a59e9149f070 +f82daa134f97f0e48f8cf9d508523e98d1e331e159a0c422866620aa859a30c3 +ea9ba48d4553ba65dd3f316bf64c103ca11839f2ace974e4e26221ad9f6741a4 +5004d4e3cd24bb296f1c58061f245792a5999a8053b246568c8c0dce7a030d95 +77824a46638ab0e07dd74ba20e76e28ddbfcfc27240998d418e9ec12cafb7dc1 +7e5916bdc46a59f31b3dca99263bc1c785aad33ac1aa0c57dbfe09d7757867a5 +67b47395f5d148c9ffdf1bb401e216c79f5ea233cd2a5a82c94e24f778c25353 +145ea4fc505c32c168cec430b3fae9e69a921daf0d5b2afbed1575fa115aaf2a +61f1be743ecd301e63db4996958698cd1f27aaf66adfc853cbba31e0f98d8e15 +d2d643c8a3cae4d421a52adc0cd80d2ec4ec9e9de7bdb1315b52ec72d437746c +5c91204e96e3bc839aab8833a766a7b05a223436e3a3cfb5c689425360fb7fd6 +508f6993fd4fa79dc4612ff9faaac79eddf47e0da29d6426508ec4271f1b87ac +446f79d28e672c5c04c6b46e0d1b102cff6b9700ba8fb08b3139d9ff06fdbaf6 +a55128ea0ce3adb73fa00fbfe0450156e9183f6b91889d8e4ad6415f8438952b +de7ebb125e4ff9c2e357a32d3707cad278b9aacc542aa83898e6a26e7f8719d2 +6088f6be110f7000a3a4b48ab264f84d1d7778629c41e0a2fc2d34e22382e1ef +e688ca04d31119c4c120da10b9dba2708bf54e3ac3eb183d7f3b5cb8087249d5 +d4fcdfa9c4b71b036f46f720ebc0563f45199eea4cca13a5b95963a677a5b6f3 +3be08c9275fa8e66823fc04c151ae6793919c89185f65140d8d1f6772927b88c +42c0d16d08d563f5b93e05689e7bb8ea958f90d4e5eff9bfdc7a5acbc29a4672 +f532776c79f34339983ccbaecd33a9daf6fc1672229c0022fbb13ae37f6fc27f +1107593d8d88aa67c1a76495f5f2e08fe8d1013bad99b694c1762ee5e1bc100e +9bb119a159392c286fc689dfc0693fb911d42d47a0e3ac59b516115b12884ce6 +6473c70272420338d03d2ccbe9f96e4fd12416939e92e52e3eddfbad15206bc7 +9fd633cff17ef63826879fd701f275b5fa06c48f462f4f5f9ff98046827c37fd +91e254f95a14b354a0b5759d90a75eed92f126191d6437a81d538c7b55986e2e +18523bf547845d77a3ded6c69ec5bf558094ddc40a6505c938ef395d008ef1de +1296388919a9ce63ff38f476d01bc30445338735c7fda0359d03d58f748f4a28 +ccac2ba01879bc05a44fc21835e4aab1204b1c6b05ecf32c8247a63fb685a523 +35505e2be2b0000c7fdcb1604a6d480a1a5827919bbeb66faae78ed7d27fa8a6 +436af96fbefec3ee6e8f80cdc4ba28a65138b6b18671839bd96138795bf389bf +2298b851db853c7906178a994223f533cf3b00680dde84aba13ef69f8191b7ca +02f5de337081df829efd5f3f6a435d6d805272afd5b2af3eff829b14cdaacb31 +c179bbf59a3b10454d0b81e0382fdee3cd5c941a2c6e6b446cc7b08358ef4409 +c2a4e6ca109c9b3dfedae8728f60b560ed3ea8252d150e11db2b7fe19c8d5233 +1e8385afa0f792ead4c2ed5d3b0044dae4e732801724de12d360f0f47bf6d7fa +aeddd62fc5b21f4dbea6ef739d1a005b141d4ba3ad34b9c34257ba5eed4b2e85 +4f5d8d07e0ebb4bc6b70d5a5260c7c0b4cc7bc1044c77e8703d0d59c9408f103 +6737c15b3ad668dc22066a6198967fd8653ba004737f5394445da06fb344a4b7 +43a1debd846c52687e9eefe5e06ddbe8c8126a87971a80d67f4600f442220b6f +4c41f388645a6fc978c6dea9b31e09732f050e19ffa4b112771741c025d610b0 +6e1f8543890cd4cd2125d9238d008091ffc2e78ed57b9a6ec5113cc8044c9372 +f305f5ec1a992907464e22188c13ea10b1ac76196336222c0e052ef963a1c6ae +df38e2fc92abc00d5a8b6d8cc608d670636a15cd41da8161e03d8361c09fe713 +dd60041cfe0c82f9df04625f3a8c01f1ff3f9f2d571e406a5775626e3dbb7d8c +1e4aaf46df0b42e8b8f9c2abcdc7ccd0b6b6eda2fcc1602f0b777a8e494a892f +d3cb1521199cadb66fcf60e6d9163a2ab0c2cfdb20e897a1f16555d97c2c91eb +946d05f5905982ba85b77ff081d1c69f73d9014423795c4001af6f9bd2e484d6 +91fdc2a911be3c9185b28f89fae11ed94de19cab9b52e0f52493707e73de0e31 +f9d558e75bea05a5b02f5918e7139ab065affe31956ad54865d0097c9582514d +99ad462d1a4de2ab2bac081e92ccead8c03318b8ea7f6d6077a779f74173794a +59982dfb57998a0e64cb6413d774120fa51c165210b3c63678b0204d326db945 +678869868bf4abbc060d9961c03586e3603d01bcb12ecbeee7ef95e89429a2e9 +980c4c2d6165cb22670efdeeab861b9bbea1b10ab948c9e99eaaa7f0c6603c29 +c67bf2d42ea6e029bbe2ee4f48634d7c60cfac1cdab4daec98705fc8397fc656 +af7cfa465ed1f7ea9c0d1c5a86c5a33601d75c0293f9ec0b448fec40e348bfee +4aa7a6d1293650c7773562b31cb8181535b3e5462b6b9acf3f74fbe01944512c +feba186065cf34877600426abccae5ce76bff790dc03bf0758b64e5c95010a10 +ac1197e84514cd9df7ca150d0585a09bdbd3dfa86b6c8d328f4dc8ceae0122ea +d7833cc21d6628c16003f7fa5e28b392d80a246483856c63dd35233cc7308ace +0bea9a4f2c4e06e544bb2d5e412bfac62ec648f9fbbc488d65ccdb2fb7a6a3f5 +c682b805a16c6be9d03f4551387d3b19ec6f2ad0d2969041b18c0ed96ba90d74 +cf0c9e4c0812f2d98e761afc63a71e58e0eb5f4097bd7e72e7d650dc3a2b012c +9329124c1ba2f4816275aab0d145103887770bfc9e488ab635245a5c8ac03cb7 +90aeb5eafc4e99e70e37190bb5012a6987ecc403b2b54b0a3a0bb30587e99fe7 +dd6beb3a3c8df7a50b4d5c350d7182e4497354eb5538061458af62d5a111ce95 +08a94bae4a4b9abb53f2d4395bd6fa4c1da13e97e4db15c598468d238b81a78b +2a24530b43d81dba1f265581be36f4a19b5c51d7aeb0b4e017608656c6ce7cb4 +adcb33a8ff7cc76f7ce54354aa76fafd4958b9e1ec9936e587ecd4fa75e3dc0c +d25ea85d744d52c8a6228bc4c9718ec43d056412b513e141a139f5c118a44060 +9827bc275c901b5ae9b6179a04513b6c4d039edf8cdb3f2c95b43316ada44146 +f9e7fa093fb2acf38891492cf93e407ca813da0ba34a3da595c346d3354c1f81 +2972d78b5fb3d09e413adcceea264a12da69451a786db4c4ee8f7ee2ebdf0854 +70f04388848dc5c782f7a91e070e1b79776b9254e27f0a0b3110c431f8fb3848 +294e724802de1e27ff3cadb8fcbeb920e7967be152c10e299eb30d632f54fe57 +823245fd26dfca5036c4cbebe443e8a4a21d1e6ef3f1dc6860613d908187ba56 +dd64f85dad9db1504e7f858cb388bdbe829e067c8dec2125c764b79607cc822c +fabb2b2cc93b4d5dca0568057febf7cd86c72762955f2c9d7e1d734da77b0862 +60915afd088ac2b113aaf06be481ca2174fb224746e26b93175da43dbb72f4d9 +68a85dbfaa81b6802c130ae529ffdaf3dbafb39b4c55317825b3c687738f4370 +621a2e720ca0d5710f3a1d963c424a73eb88af68c3dc7ec0996a11babf14c823 +a3d52369c42e84301b47c9ebf16e33cf02d1cb1c872b0ac7ae59361d330f5fc6 +31f104cf221a3c6d23b9314dbf3190edf21331787a0ca1d55507eb76fcfcb8d6 +da4e2ba9d793d158998c06733cb34dc891a8e296a48bd0c0c4dcdf4fa27dcbc9 +0d7d1ead5f56a22336bdf4818f4f8ee4df9b82223389507725837abbb193854f +fb0ae2c55d8259aebbabd35a4dbd3433430618462e9f23f91885d0f3ac99bcd4 +9d1424f9aeaa09887c06c6f62e07339b3e4424fc920b11bd0dd53b200c896ae0 +ede4931f85766645f04c94877b0364e6e7e2a0ace71347b8ab0323fdecf82003 +ad75a9390ae1d10ab82363ba83bbedfaf24225141a6033bca3f59d065926de8c +efcb260f5e394ffab5e182473154b81ea98e5cbec099eff84d53b9348f4b081b +9f120e5275d4e9490044fbc2a9d275b84a9a40b8451522e79c2fd383d5866c96 +84db0c0552cbb14e67ff321ca84793e8ab95cac35e71ae4e20958a5b274be4a3 +641cf01e9b50487a9263f4e60a7ecf6a80d4e2269303bcf8589bbc7d9306411d +1f95e0b59d232b303dc030863cd6a5f25c769dbd49e150f56c4b0efee4c096e2 +130321e1dceac61b3f45a808fed8ea47e0354eae9578991d88c58526ba635f93 +591b3f8debb90e2c5a73050766868ab418e6bc1246f9a200c9010de827147f47 +4a9a35b39947767a2cf12774083708e7e7d1f25f75f1c27806a7e40c5f4f8456 +8bd43aefc069d7d862b78bdc488717928c0a283cbd5e57ca76efbadac172a6e6 +28009c10d8047648c549de7f26070eadecffad1e954185ccf9acf02ea2ba7bb6 +0730a1a46969fe637617e9283cf68ba3400fbc0bd9e24dd4ae4f33241451c4e4 +0f8b996eb76d3b47f0dd0ad64ac75b6e12c516f843578290079aefa03c6ab66b +8063bfac6b2b07d8a94f636626b7803ff277e963222d738a6c4cca04592c9687 +8a9c74a4c528baafa16a2d87e6182b7a6836e901b558d4b9ac7c4258c2ef1dd4 +e70dc0e985661cae6535af3fa04de9be151d75502a65b9ce9ca88351728cddfe +25bcd365d219ef27b7986cbef39cb7450ae28826530e0413108d08ce5c624dae +b1906f7fcf4d83c91dc89a1165a1ea5470ea14a91634540d7e37379d358ffdb9 +38d3c40cb195be0259757ad84e0bff7271d666c62bc9d07dbdc2f463f0cdba3f +fd33bc0b7b566934159b77ce59a431e837c913cb8a3159b4b665e0f0cf237dcd +69c056d03b39db46d40ad75d31a1f27e28af37c0a3d95a6bb89844cdc60939a8 +a2827f7e9d64fad39befbea536b519ee61d1db59cccd0c1c62975c34fbdc4fdf +a2c85d3122b83d27a81ee97c81d8c1e280d67fda2c89bb8ad5f9e34c4408278a +20ce29f25391b4aebaca2bfa94855b58e53180cacd548d084cccdfe203399397 +3b34eb9758acf3335999069b05ca7784fbb467619bd48008c129ce80598cf595 +2d2263a36ba5a5b61d4ce7faf05e651d26d9a96ddf4d6e164a76caaffc7b7439 +37c2c332e496cbbe3a15e3f07c8211c9cb6f745c0b95a5bf36c55b37056f5159 +56a87691c070a5bc22adcb697165b17de566c6ae87473faa4329f9d34b84a448 +a93b1ae3c3b05dbafc8f0a9b246ab12fb5c5f21544d790a03b0772c6c07fe41e +561c04d25290ad18bd24674c5d557dd73a1c022c4a0c3345c4e97ab872cfcd23 +93926ce1f80402e6f1e32a069e26388f85f58a6c2f8d37185f51325fbbcce7c0 +0ea9ce821951358816a3c35d9a3ae47c15a429feeb24ee9c6e91e7e4f4e4bd5e +8e9020451b587aff54a9733beb5ddc14d478ec52011d172e308149f6f68ef4a3 +af9f56f2734989eaebb7b1bb96153429d9bcbf3ee0a6c2acca62f586b506368e +21494002e1c972624da592c5e0e9a316482ef500dcdbded7f4d7331f7bfbcb0e +1ecfe5e9991d59301b062abf6cd8e3543c24e948bfc730d8344e0a323efc5e4d +b1c037b366de5ee1eaa0a0e74f39c7b1af40de37b4327e620df1bf7eed4dd9aa +fd15a96128d8f37f1ae60b6aaffd96e806e2c0b29dd43c7c3ccd00d936f76924 +54e3234ec6529a77332b11a25c2242c53aee5e5d128f5805fa007d972eea2d9e +fa55bb624acd378707405ab37a49e129d003fc9d561ba621eb71f2d1f0342f68 +fa3fc028a7f3ece1d94acf6c4e91eab1656cdedb6ecf4925207b9e547cab62e4 +af9cc1bb900b02d55a89ef5bfce1a8f121d0c80276d61e41bfca88674c65b4ad +2d66dadb8223e8386d40b775d1195b6bc6207b439b2c5615bac548dcc041b7f2 +2f84d9c3d57bd7d58d95c455d74cdba0dafdf5333988d94aea34d01d93a6fa1a +a034f7cdc3a486f0eb051a55a39379b78ea908a450c286b6f7902c1542b7054a +be2449ecf445f56a5a4c2ef2f0994fb3b3adaa35987cbbc0c64ebccd1aa110fe +379f36b8e590195f4409426ddc515ac37be56a6314537d839e77dca4190dcadb +e423cc230dc717b9e7ca35647c3113fa2e27270079736680b0abd1905125275d +18a3ca6ec043b23ba6d9f90b88a6cf51bf8aefe90c25b5c211940058962ec96a +c03c144f18a1e1b13d5c871c8c5c7ad18b0c3045c7db5e77d6f5ed211bea4b00 +0b8bffd69c668c98bb08f4207a80247a80483fc8fe2484483177d6547bf66595 +4d7afc64a6bdefa6d8c12d8ca7a3acf95d56e6f6098345d3772369955e3ce2f0 +affea8a2475757361e2001976de029bf745d701cf0433997ca78c8cc1d6d130c +692474ea0a9114359f645f722da96dedfb0bf6d94529326493b6b18d6abc70d0 +c7ab6f8b68a9ce6538a1d9ff6e41a151f37e96f6735d0fb76cee4d502d13e4bf +4db0ad2c84d44596a66ab1fde477bf14cc7e673d598cffa89e8e8fcb1575890b +4969a53570793d3cbbcb693b09bce2ea64c33f446f3f6b71a976ec1f960060d5 +b80631526110b7aa266b23eb27b1e565b8f0d9b44f4a90c57cfda6fc917f6efb +f05630b00eda90f568c583cbe506b9b91314e31b1738cfafce12f8a17a7bb096 +631effaed2543a732fcb2e5d81689982399e1048ff6199ee677e859f36cb6070 +10ea3ab6faeb30973dfbd8b405134c96a6d40d5e278d76916ef4b66d3bfdb15b +f0dc3f8cc169ca142ae73e778ac690e1038e8b5898f6101ce4d57faac936de06 +890b32c3768394e0d94829f51ff9bd315fc44e33a58394bd5a996ab52b1dad68 +d010935f5a0e7f118aaf9fb42dbac4e642d5b7ef61e43ec2a5b68a3584965c23 +f842dc4cab186b39650edc77dbf52068153c875bd28e4bc30f554b88436b40f3 +1500199d497958c28391846a00f83287fb4e14e508f8954b6ac61c572e634f09 +fde116d3cfb40b73573a969774883c5501d738fc67e3f31cece099996950efc8 +e431c63ff4eed98ab8caa0ed1996ac8530f315b2b62b882a6dae49e46c834b09 +c3c0d35f27be4aaf09e0abd445844c40754ad0c29dc4fc8a3569b182003b24b9 +cd79db88db16272238f9ae5f0a5f0823bd0b174bc25448d9ab253654781a2e4a +51a23e73e22d714e45ae27dd5e8cfdd9dfbe032530765c0751ea3395fb0c1380 +414ef2cce4944f56a2a14a564e41d9409e1929956625b87a17f64ab0131e55b9 +cc1822d73b578854e8c26ae0d560d405dc8a72ff40b240ce00d52c3d8e74e30b +57dd3f7686f6ce18805b2b7757853e49f956abce93dce1d2700915c5b2250ab3 +7ee35b1606aad163d121c4eafc2ff9d7648494db513af8aad8a3fd1ad32291eb +901f9afbe0494a64a99230731841c455d82db72b9e577e17676f53d5f1f3a98d +ef88460a898d5b5184e9e1f65ad43c108f679945bd7d6c777e131fb79d99c74b +e3cafba83814d984752e99e7f86d1dce93d00615d064427f28148b37a2c49668 +974f6a2f5de659b42d04e73d0e5137204b5e68288029327ba9ad8d9124ed4560 +1344da203d7cc8a26af36454a392193657cde0fcac0ba0fd379b74481fc56c39 +63abbe29416be7ced922f0ff6ee6c2bcb032d83bc4fc0002578dc1943549ef81 +4b26f5938980e2b607ab290de624b06c31ca4eaef275212faeda9bd87aaa1b27 +3e8fc6882f298c8e503f59279f66b7b6ea576458b979ae92f3b6172a8f6b9f31 +a7fcb1a241891f044e20a29cd948ca8be18059e01381f445b75316f8fbc77b07 +cd8558b13dedf690eac3715afe7b45421f857d7df4df4229e9a5d5f81ee905e9 +6c63a6b1ea510d0a5fc7223ca5e14bc2475952beec5de9542c692f720e33b41f +d7d1a649d788964430b605a6092fd5653edd47967fd72f8251bd9ba5b5347d25 +3f4b2329fabd0082b71b517d69afa5ae4c6a02983d07b905d4bccb1c0a249fdf +8c6a8b12a7728270b4e90c05c1f6ff3a962ee8f67fde611fc39d95a2ca550290 +8157f91dd7a967b7b7068d1570885f763ff2ab8d57221e4780c5e8e981ea1d8d +b703653412e13b2e99b9c6fa232077894aae6afe819068a141b876b20534d7f8 +d7e2b169dd5720f0170d3b801741797b7c775838b4b36842de3e3fe231ff2a5a +57421433ed3bef75a860343dd31092f0bdebe47cd6a9881a63b55e675db769fe +182a8967fc6829a1fe49d1b25bab86c04befca59b7fb9458863d779ad8df7b42 +835ac1c5a6d16c4479ca09eadc16742be17c1e59ef1ca1fb725db9e871b64db7 +8ef30f0e954be11aff43b674a527f5de267f2b52fee2e51a6681d5ad10e1d822 +c15ab0ca73f25e228f390c450621340f99c4870829a7e223b5bea167c7f6b968 +e2f7f7d3a5c3cb9bcbc45795e98aa6013bf142e2410107a410c3072b96d24e15 +4270a10457d03e9ee7425a416958e991806b139f36d2bc9971efd6bf29e06e92 +713344c9b1a6bd6ba6bd28b6404a4c4649589cc6bc917ba6af0ac4e3ee359cd4 +48a9f74b9601dabec713b8e795e942f0fb90f15f27a8491689c14a5e71e56e14 +022233bd3591a1c7aa417b22f0fa2a7b02e30fdfd56011c508513c8b4385f210 +9b0f01a69b45ad5c701436fdd05d780672ef30122e6b33aea4164664667cf0c7 +3d3bea1a4778b3d35db869c12cba4fb99c066159bb50518bfa211096ec448228 +039f96dadc9b9600ec5e60b70c475bfb024f6d7687c156aeadde8e48b0625c3c +0aeca4fe017d4a18cfd1bbdc370ef6b1c7fe7c6463a961dd06b4329210eec8f6 +a172284470b0d933a2bf0fe7e54ae607f5fd17bf7e62be47db76210295e70f48 +3ee8d4c7f4350cac22004b68af0a1b0105efd86c72c1e6615c3d36e182cffe87 +6d4b4b2fc066d8b6de0283e1b64964cb0cf06a2bf9115d4a0451557602e9ed87 +fde4351940b3dca78d5d66db800efa7b9f0d6f4862323e541cbe078d9404696c +42c62de5fd2fde68deaaab671313f371c2aff793fe6caf4d3529450a9310d4b2 +df00029c115ff3ac4969f454c8dd4cde13ac7f8da419fc22e985063ff6429211 +9a751f54f6402b43d01fcfb86d7ce8c18a69993d40313b419e75a419f88ab41a +40a0052509401fb48777817a764192e55e2df39ea866b150339681a2c894106d +daca983773e1a280a661663f5d192674d0288a303da868f93aee92743504f6e0 +271430d963093ff7172d748b14c917a99896e0b71866050aa97e8d969d111de9 +02874fa90cdee0dee39bb6fc0cce58558bbbab4a4d024157546a57eba7c1315c +9a1c051c287b6e43b0b4195c1cfb7845df3ddac7005e22a861e82b1bdd1dcfe3 +ac9519c77e2a88b302beca597ca0cd3bcad5afd4080d38fa1155080570dab5f9 +f7f8ce9eebe14ab702d19ef0137c615f72b1b3509d3108bf7d6d0f5c7fa5a301 +42a45c30ebfd452e67b294d8ff9388aaaf3ec0572c26034b60ae088ff19e72c3 +ba186180d6f93c64202bc9591b441e303d5550c251d75ab94305979c9942b82e +3bc053641641077a0d203d5d6036f1c918173309f04d27845249d2b92911affa +84dcbec3baf6c61623f8a73002f9afd287dc162762a91f6698aac67bfcae3404 +db70f32c9d81e76f4145d8aae76c8a2b42557e79a3c658cb5ca8eb844cb780bb +dec028775a380862b6d5ee1d5195dc507ce3ced0aeb8938660b4c727d40c6e89 +e60ab163b14cc1f713999906fa5fc58b8b1d10044c17c4e32fca78d99d33cd3b +af638d37c1f396b898bd47776cebbd71fae4162012767362f833dd3f620cf5e2 +49d584ebe4eb183a253d5d4a85a65acc7ee764589234fa74a25849584bc6f9e7 +6da6323675bb14334c7d23db9f8da42d689c14691875712ac8f4263662ba9953 +76a972fa405c90a574ff35afb29038c4048085d6a61ebde090381207ee9dbb1c +f2dccf97635796111a8886662d39d7e3b2b79c9ce048f6d769f36fc80348eed3 +f4d5999faed84c8f4e37271b29d0adeb25c980a8c388afd6fc015b7c5d182f57 +78e9317db58e2efe61a6c3a63a2a0ef9a3c6152b2dfcb81e3c0d00c6520d1a14 +2dd8d314384fa63fb33c47b3bb3e2624fb1ffeb31f673df5105e024ac697fa70 +051aacb07e671787f6f76741c69ea9204ee1216f75491e1e1011512656f48b40 +2272666adcb4fe07be5b79e39ba3aa85774dd992589aacfa7b080fc4b94d855e +e9fa0afc3273d1ae161563c33740c5e2519ef806b6f3a4c7d832c46fa8f86f35 +8aa32b9b0c6e464e41797312d93fd25264b85fb996cce679586077df7e5fceea +9852d4012959de6a9002b4e67317b4f87e2229c9bf89096c32b8ddb3c14855ad +f5fffddbb24a63da28ad2b6028184a4c083f090976bda8fb60bc51d4c590dc97 +b80cce59290aff40472ee22afce117737dd804fbd43de024399081076cb701df +bae537473ab542a08b6a5964ad5a5026f68dded04855c34144cedcf8380d4a89 +a744823b4ecec5f225d26f128912c3f3822e51b37b7e5b6b29e9f1f43fa7ce48 +9ccb6b309bbb9f879527660a6fbef9d7f11fa0104f6d27e32292ff2247668b1b +352a4c244b53141263bf6f6842ae64f198266388aff922adf272ca3b360d8f89 +27f2aa449a42ad993382efa008c700fc74bc6c61a5348c052f247df465f63060 +49531b80c92753ae16a817af2e28182ed43f8a050ff90fd45cdd314b568b61ac +45f575948f2da79a035ada12e83c50c24f09cfb5ce9bcc15bd9c34479ed4ea59 +21960243fa433442b345cf568d78e314b2054e2c146c7c9a8e938b9ce3c7ab4a +2a2aba81a72caed7874134d4126ee3a3096282aa87b29949fbfdcc173e1df4d6 +a5957cec97a798e61ff9ed2d620f4e229041ddb5e9c0a787916374bdeb03d0ad +1dbe01778b2b86c36818e89839e761b0098a7d8db58ccb0e4d67ceb9cbc04e6d +c232c9fab1b2a63a24886b060a78e221fc964eba7f190f5c8d02e0e4711c4a46 +f6611940a8782fd1606a5975dc787fac23f15ca5bc3529af7695abd9b259484e +90512c6667d85d78862e548984e8443511abe283b7714abf122110eb21747422 +c4fde0949df2811451d4bdafce1846156ea531a15a7f8f54b7a117f28885ef86 +5209ac012c0ec7641444fc4032e48c16d2dfbfa3bc12961d5d1ecf95cef74456 +df2efb574e4c42c80a65bb008defdea2e732b101ad7bbb9646874d2e799130b7 +208e1e174cb552d9fca89794f010525898a096c97f0cd41eb911c313efbaf01f +8bf26d7d2820ae5937abc3994e0129d15838bb65a43203901fb3f2375231d818 +08c5ca211909db4cbeaccc21107181a5a3fd93ad6398734f86eab4bbbb5e929e +b4062eee1cd6e18ef5a94b088cf6740b60b08ac496c6781e35d4be3c9c6c6150 +e25ffc859a51489798fa3037d7e2cd96399f663a9c3537649a88297effda3e77 +d98941953f41ee2973e7d80be32ee2d48d5c7d183f4608067c4a72f5067160ae +aecc4b68596b7f80222771698584b1e34ca77c54a0426fa5d3e009350f0e71f1 +bcc6eccaf7001e7fa8b23c321b0335c87397d1a375d467f1783d9488dec2f269 +89590d3a23b21539cfe64752e51ad95c351033a1fa807fffeec3589efc1e8b76 +f81de863071160931055a01d94dc2b8fad30d5bccb926a1d4a9ff858d98d9178 +8c60932d50307b5993fbdd530a5e25fe381959b01e5ce66f8ba694c95b4d578f +3c56d5cd9be8553cefe694b396407f46531c333f1dee44e8d1679133ae7163b9 +c9dcdb20ae4d2c87c7f37087e78570ff608effd4202caf7c2c64887e47617892 +de8f0b4006972fc32628aa340c05e7aba10d892a1d2523fd216534a0dfdd11d9 +db9157bf1febc5877179bd4d8c272a598b016468bb31908e1fdea32906963927 +18a303429a7e1b4240c382f2a02bc8ac9d28bd2181b576c09097c1a76866b5bc +2af2ba8a15427f9827036d5d85d76e0a9fcffbc331d769378b610264c5a4d953 +7b44cff644c1dc209da02b6134622f26014e847e3efc68c1403447e7b3f59271 +2dfd293e0d4b86007a8d9071958d979bd36a47c9e709a0252d61a1e7ecb119f5 +5302f9ce3accafe7dfd8bb2e1708c775143f373ca805a442bef5523e82ffa034 +9f2530b9aed89a8e5c81e013a7edcab6a906173cb0cd48434ad711e89d970762 +3afe152cb282db3fe2e105575ab5b75c00c3b1ecded579cfa23e97c964bb3e9d +48ec0ef42e4761f01ec5c12cd1411c9eba7ed00e85fd770a82266c71c841392e +8c8f2724203b9a44f09005b3173d95a5de83f54bddf23fec70058564161da59d +02121c675380fb0f0f7e0bdce96f656e46f15e2382f316c039826f091cc03e6b +ac9969207117681e0f472ca8b5885355020e1848d66fd99b378542c811f63f5a +bc79477067649055735f2d5a46a35c4133ca4191e6a75f798d6ddd8f72cdbd4e +75de4762d2bae425796b19a65647a3971abbfb29132f35e9accae847962c218b +4973888e3ac04631a358b57d1347e2a74544a70e219b2e6c4c0e4b9f3af2b872 +22f27ab269f3248935cc65135699eed4c1b85769da13cd156108a7d1cd894b46 +fa7e2884d180bf6962240b20812a6b89a49ea08ec6b5a5e8766adceb78cca7b5 +8b89a9c7299801939004db901e195ad16199998c821bdbfb7dabcf1a80081de4 +aa30d5653740803ec63c0f377eff0377d44e8aac6aa289b144acdd5207996dce +96359a17dd3f6ca398b91e86af024f0533ac70b186a940f96d7464fffe38e22d +f8e83d34c8011351ce7dac20a9e35c2460701eb62ed3c815d43dbef99828c025 +21dd0f3680e4505a5a166696d16187d6e85363023823e70f41e4fa7b796e8608 +493a3b3a53d575880f09fa117117d6c946fd8782637bf122d9a8421807105b35 +792dbe884b02a344bd235328c139bc91aa524a107197539fdb2abdc99a7113f6 +176ea649a61e4968187bc7a97475b063d4a52d085ecd3191137c4ea1579691b3 +8fe05a2d3d223c7e5a23526699054f254236b96bb3f799ae176fa86859acc325 +44e0adf45ade76a9d635ed8739c55defd14aa6b3aa86f3504e71176ca2fb51e4 +08f7a7b97ddbd73cd848390757f830abbd1e5437ccbdfe9117d73875c7241f52 +c4d8854a3ae81ac2646700268c5fbbcd03a9e6772dcb7d5b7f2e925a944f89c9 +0e7ad30925a1737a44bf80a83b5a68733ca7f30bc6f47150d337d13f8a9a33d4 +b94fe1cfd05cf1714d6e0496e21b4e6aa498cf59f4dfcb30625cba83a53f524e +e90455af7c17310107b2abb1a287fd1c8489a6ba6195a0f4a18378392e860976 +cef9a48f00b7fbb6c04afbe796a3af0b3a7ff9ad53c448011709d4239ac523d4 +7286b3440f7f9abdf19e4062c415b5cf1e5b1c2ec79eff451643517a7cee43c5 +56f2d68440f64a2eb7f5861dd3de1175ea67b022a137bbe8d3ea80775898100b +f29cb8e25c2f816bac1cef6d3ce5c15cbc3f449f6b5db7c901a4e0953b38f1ed +ceedab0acb10df42e2cd6b4d231ccd752b69fe0627098a3f1bc3b547488bb1fc +03e0e97103cec3d60635a27b41826283796db8bc2d72e0b3b8ec3285f3ef5a75 +5f69a2be9f0e0733bc32ca037df0af3c5f29af5772cf1bce273cb1dbc2143d0e +0a0598cff5d570ed5f1821811e6c7aa8d9ca18593d178d55e45ebc2cb32a2adb +c29f52bf976c98491a5d0a6300922a3031095820cab7baf7344541e08740df1c +a6e661ff99a9011e6fecf6ffcdd8235824ed8f86e02be31440d93f7b65ced2d6 +d2381e370df510ed09b424193dd4202b8277c586e7398ce8e43dd2016f7e550e +644dea807151d35e8d3b3fb66949c92191a86bb236aacb255ff8fd410ec4d884 +e41d54d1eeb2e724ce43d96aa249aee87a9c2637c8fa4b8c4f9e28c23c4af501 +f93d7120ed9b1167983c3c87c44823697113d6614ed80eeced54e2d0f3fb44f3 +4974e6135949b26f352acd7cfb4ec79e30dff73b8d75a6ee74a55e427980f946 +87aebd0edfef0769e12d199b2dbef64565a30a698c30ab05ffd06d68310e55ea +93ccac06a08a530a7440d36f2a736af590a682a13b5a73689b8d8c00c5fb635a +71bea3db8b8a1e5006f1f72e38ecc48e40f73c39d473b92048419be4e5825bfc +2eb3a3130d47e541b5c714d5971497cd23d8a5abb6a93e2da1087bd4b2b0d841 +fdfdf7c17b92e47c9093ebafbaf1b9429958f74e79deef860b65c287370b4502 +26d5fdabc24c04b34f07a048db884927ed1dfbd19f5b45276b2f56ad0a5a51bd +9578d53562766255256c985891b2fb3d1150fe772faa9537315b199788b4a596 +39572838b9deead32f579f9ec94da84971c35149fcd7780a34497879a5422546 +74172a429a6b85da115f966c34de2c00cb11a1fffa16d8cc84b86b9ea31d9af7 +9cc851fd0bb6e2397db8ef7d0f1e98edc5f302f0c9a5b33950990d4019293801 +1e06cfad4653e1a4f5ee4be3a959cffc2231be88055c6d724b9d83f5f8f5ed01 +f4863e329d3c757cac3ed3d9aa3bcfc812407c8b10a78f629d8f660b42423754 +ed23a022797e478f8b25f6a3346374b8e285986aa1e19a19c3af7a81f14e6b0e +a595ec48a0c6a6e016c629c3f1a91043c0eab6ce5401267d5091dcc0c8e14b4a +7062627a065c66fe9fe068267b8c434410774a97d28b76024e171deb2306eb01 +84854194c373ef3659b489e337134e5763d16d00d6a4e66afe3dbd30e0b808c2 +cf044b277485fb807d66b6d0033d0157c5aa1dca6ee774406a7d4acdbb06104d +e582402782f0d19920b7c4c66a65a10703f07d30e5663b37688a090e7db49783 +b5b31e9478e1491c5b40325d6eaa41e35bafd45bc85c8f1be10463cd5534f110 +8369f8ea5a4895428c1dca59bde35cfead2dabb44bcabe96b27156abe4dd9a18 +cbb4dc7b5908715faf5db93a206a4f40a19060ad1c33474226482e8fa3cadd37 +197f9f8bbcf204e76e6e411e56c7b33664ffa0125cb0e8f7ff3a55647a841a28 +9589124c91519db94723a77ae008a7657949e8bf80388b5cc51585fad67bf242 +f5a081ff56ca0870dc9799fd03b5291474c63b83b771b8bee604a11a70e21d55 +3709247b92f5d26049cb3d2963ec785b68455bb485f30af7426cfd02faf10934 +d32c8d7b0909f993724bb7da23b7bc690754384fbdd366b14417e6bb59c8362b +11b7aa76af2a21b0dba56d8c04f14cc768220acb8dc4d7c60646c85cf11eac9b +710e60d1e02c4b9a078ee52c154abc7bbb5ed801087eaa68298014023f93af89 +bb257e37bb4ee55bdcc563b5f28959187135aeb95ee333196f6c0ad8e2fa493b +c819e39856397cd076f6ec77c2de08517b15cd6404306bc45963aaaa8adcd1ad +0c78bc5a53c2370870ccb3d5b781b811ddeed772b2b21d6cc2b8aefa894a8350 +48dba6afdef72f44d779dd9dc6ca91da09a9a825a12322a2bebc69cab203954d +1fa1cd86adbc7810620475e8dd1ce2210cbc056d586e4d203ede41398ef9f106 +b58e657f3ea69f719e7ae006cc1347a31b573857446cb3fdf83afd5991993c94 +95e8fd62929149e5d83b852423a0a92d3799484464bfaddda2e3182c087cd330 +e7c077f7b37b1938e3ab954edb0b98b8f25ab428b313047b6e66e6f6ec940d2a +8f9989ef2553993877bac51edf043efd752a82ea0a21a80f514b1ec69265d777 +e0e6f7b71bc23f53681ef43809a277799c930a1189ae11a7d30fe14c5df3dc8f +86cf3e329c494ed6cf0f08b5ac828d16f522985effbbba364440e78c27535b77 +517b9bcf39f6a038593c6b5fa7a7df8144df223272188c8e5b672f55d3f862c5 +6747225c9f48b995c9f416d519ce7e302c22a8c568e53fca67692d0485d9c34b +936b69c65919e2a1ebac36520c3dacd0fd0a837a8ab82964cca79590fa568eec +936b0df2123977d9b0f4604ac160ece39eb624d285e930cd59b30e26dab47ddc +bf1e601b39d3081be32eb3cf521ba730fbb52298732f17752d36758c331ddac9 +66478be91854a54e9b101a52f94b13f94a80e3dd73a077684192f88927224bfd +35339070cbbcfe6e51bc583b1d6d1179edc0409c56190e3f08a67e4c59fddf24 +9f0a430f6a2093bb7a9e32eaff050ea21201febcad5514f5ea4e1c790437a3ff +1722fbc4a51f4fd4e48653e6764bdb83195233206c6db692056e93eaad28fa16 +332517c4e2259bb6cf36fc5d9c923ccc69047f10e8bfe2f088b3e95077f4a312 +508ab431048bc2344a31a4583718c0b9e0ad8ab0ca97dd51debe6c3dde8a51ab +01b9ed04a58e7a2e73f34f7e2e8e9ddd7b99949b5f0eda2cb61ddab64fd0dd5a +344a20f03b6f9b3fed433329b8372eef9612608380f4916acc5292b7f5fda274 +e1b296f142ac27ac06a3bc96d5f4cd9d317a5318e69dbfba646074f2304849ea +3c813981fc03fea55a109aa1e174556401bf37aa870778a73eca9d2c60eec4cd +b88662527f7dde83a248475b5476dd935833d6ea8ce5cc912ca5897168bfed0b +177d4fe4c328f55625f35d11f85ae70e360c68b5601dd64681d557ce51e724ed +6e5cb05523f3860698b38910ef6348c9abeb14c645b34d08e42d84928a36e91e +999d15841c9ace2276b65dd78ee6e4253c27376ff691a11e640fea8573509b70 +9b0fcf1fd6c4acbada4957ddc2e9b4bd7444cf0a658f56878da729cd2e6c340a +3a3bf51132ceacf89a3bfbda4be6a18b0c5be6021076fbf6d2c5ffd4d35b8855 +d69f62c22621414d6dba9140f9fc62919d1f0c4b2d725cbb895bf04b874b8e42 +2619d4653d065b77f02148cf29931f52f94f0f21320e541cfa9b03612d76eaad +48d1c2ed840c390363994f75fcbfeddb48dea5af3d5e869206f42cd37428844b +e69d57813618c3cc6e4dfc270bad5a74023f38a379d101adc41f62173a19156c +580d2c9870014a090bbdca4ea89aa7c0406e8f73bbfb90808956903b4908fd9f +e439a4a7dfa4bf0cc31d89bd88c5470940a1a4dbd871b9c23518e5694950eb07 +79afe884b71caccb2f350154fd6b1f90482e2d9268fe383666365fc41c5b0c04 +6fcdaa0cc65e320103ef976f4aca093a5b41d47bb55bf58fab366d3c9088297d +49c88fdf7eff4920faeae791887cde9a1c9b2f2fbc2e23f7bb5438f9a5c91790 +5d9666ed9a3a780a02dce5386f1af23bbed00c476cafc4734015e367cf600916 +4654d10bfc6d06af5316c45c8cc0a5f92cb4016a2b351d6484705e9f1f9056ee +c530943ca1c9fc321a838fb02857f0709aac2009eb3cc38f81145d6ce6d44524 +da3e21e5701f972cb836afe077e6376875a953ba427b2b2483330dcfba0783df +c371f9cc79cbde94fc5e6f968b14c56f0f7690965058f6ac266a8baf2f545336 +1b99a92db5f63cb16cf850f13e0c18a779679b03ab74f886b2357c612c0e2f38 +2c72cf7e4b979f888d772eeb5d5dd2b1d837f03f7f9ebd613663fcb8b2f7fdf8 +c761a958b41cffc4b2e2a48fb62ce80b10261b96a23b00f6084819d088cfb019 +84fbae235b2cf56b391a1973bb09fdaf180f6ba062bac913bfe0762f196d1680 +f7de26c276ecc19f6f8c84c580b8a007319ee045a04aa6e492b347004a26dd27 +fcb2590c4ac89041c481f8cce7043c2e84033e9ca3810a63e5b272e1b716993c +48da6bd8aab1c70e28f2da5636a7757448608a7d36be50ac184c3e4a58d108aa +e1aabad61f8773a698546f22f22df892a2ed287cdadf8858c86eece0bb566af9 +a0e48c19ae49dd2389fd38f2937ad3e02c8a8b281088affa0e1c7f7829d1b191 +9c5ef6f3ced2dd0c51f6e18de1602df35f588503b25039b79c371d4ef75e6ce6 +7514d977dec3af3de9f7dc7ab9064cb21d8b35b4a7efe21b6f4681c090c55aea +1fd129f665053887abb1b5fcb09296c6226ceb394dee57664ca483e9d7496dbf +10a480d97ff4af0ce136c51d90c3d8c3734536e69d0bb4c066d1bb05184fd7a2 +374328b352f4cbc93c613309d0f83387e565c8114e38677ec5972a64f701a1ae +8ea54f1293f413123df659adc7d8e9eb0aad32ace9f2ab0f69a989b3bc58d13e +8dae3890c928697a353da54311cf1e98719a82ff91754ca207409b6c10428228 +f78907e8e9e21f1cce47eedf402444344751d49afbfcb460b6d233ac8bc7a569 +32a3362bb06a575f686c1b68716ff9c8c93020fb6e5ac189834021d09d12d136 +529c6b5e28390a877a3daf3392e50dc60c4653f33abf9cd550371d6af3bc340c +b5c34ef3d2ed6bda5e8e2b4e97a865525d21d43ccb1412f545e3f1a84168afb3 +378248f719bf8dee72e408caf3eee889129d389cbbd62fa285ec9eefefcdfe44 +5fc87a84d103b3fc8c349f162ed5d830b5e7ab99cb2f82cfc2a83ed146999a56 +11873298b1c8e983c539ab6acffb13be2dcde7816a7015c72ff2097de9334e76 +4fe9359d3b3f1b5dd5ae02ccb7b1175e5e5b2a5d4414af3376fb605d805446e7 +e131cfee56d1c41dfe690113b891a4950d57975b1d608a19cbd10d4d53ebd4db +c6d78c9cf7c06be5fd47433aa18250fb896f3db663deff28f1976e93e7a36b4f +50830f7b0b5b47e2c0ca4a08482290aaa77582887fbbd330ad0c0c412ecd3fc6 +534baf96f8739a4df7860f73b8abf2e97d3567c09c616b432235e0ea8505cefc +26c4d7dc44f7789c338c8561a9742cf177620bdf68209254c1b6c83f26ff44e2 +74d98f45a913751919506bc3720cac860c01ced3f825d357afb098a5ae5db776 +63911f63a83b586e839d08a94715de06dc3765bcc949539394d75b0c6930eae1 +9c8772443ef8f8f1403c2a803100acd0305359b7544681097dadf07259fd7c09 +e80b28c4e0e75ed038feae6e0b3ba5d311d21f716d90fbd1aef28a60f84f8e87 +0a4d395cdc956ad485934ca58f11cf9ed829c4ecdd984dec9525a736cabd684d +db24ab8b679218c355faa975d48e837066f017fe39cd135199616461b9c7c77a +f3a986c56243594ab113115385bd8de3e560eaa3e468ee419f9b97d3b20dcbe8 +1a64942075d88d48a2b28c39328ad74e2b02b011331f655066b7790d1e2e68d0 +ed7298fc1040fdd407acb03e6dbf680651a9068082db7d43d1c85b56bbdf299c +5a9b88b8608d2a21d7a9267d952d71b786f7cdcd4f63c13fce13c6dfd88f20cc +874e1a42fe2430c0c0da698b021a7e82eb668371d7a8559ae906d7d6a0a60502 +c146f7e838822f22e4d0e1404cc853aa913087dc959b2fe1fea7131a4435938b +2ceec71b3101fca9c4db903372b2cb6a6a0e88748dd8479cf0625a7d5159913e +69ea97f5153b3fa681e940b0c59c1c4193fc979049b88cb38ea53e64ce6da9e9 +d77abf19140f3abd0c1b89f3690b59603abc202d4e0437431c8da5b6a2b1231f +89723b569fcceef6a78c38843df658eef93f6414ab589c77ff88c25a1829cae3 +ea663f93db354455d10f4d40a4c075650a4e84a2468fe985ffec14548e2896e3 +b1dd0616c0a6b17681e24fabd35501bb0e446244dd55cc6a632dc018688d2b05 +18e7c16ad731096807c8c7984d9a90df59d2ca0649e1f7111f105fa3808df731 +10de360b039985e643fabe223c2836e1a992a5eb2ccd396ba1fc1be39c148e3b +2f1414d762e9c95f1ab131aaa17d5632f6b3c3e566a1f1bc9be2ec3a89b595bf +bf99ac8fd3963d7ab464059c643bc6de1e806d5361b55731281d2556878d1087 +10f4f9f79598e4f37a2bf74aa4a94e563cd226e50d1244f38978bc3994b1b082 +586e5fe3723cb33dfa0c48ca249ffc20283e7e3a84cdb0d8df92e540ed428fd2 +0943e502f763f7fc0c879d6a18ac22c7b9fb410761ffb5e60e2698828666450e +aaa8e0c8d5541036badb9c7c92885462a9e7421c8923f82d978074d51483e594 +b0d24b3ab7306234079f4f52186a341a8cf7eec6485a491f558c50f86aef7c10 +6fdadeee7dbc16438b213746425c80bf19ee1ef22ab8952a6a91cf1629d027c1 +b4ec94221468a107eeae9b727e1463c690c41053c6ed0d27adec33586212cf52 +c4aa47cefa30fc2f22d1b36cd731f8818ecec6d3bcec641fcdfeb74f37f561b4 +f716913c74df2893324861227e362084ea3efa36414906bbe0ab92b8dc7360f8 +ab2dcdfca4bbc7f23ae6a6ec7eab609a6d04fc0eb78d95d63a7be15db384a098 +477c2d5b367996fe969f6b26be3d09a2ab3c3deda2f2ec4c9bb2f0646bf6124b +23c91547ba42f72c6d4ff83478769924a09ea982092deaed2445530f7e62a64a +6c6944f5c8a8272c7611fc494fd7c2a9f371bdd05607ba865fbf5cf8627922ed +46d67ad28c4e8a01700634db291a8c900c37d8f7cda706184bde8dfbfda3cc1e +e6071783a69c4fce21a094fdc2d7542d005b33850772f73a0e7ae2c6e4624ff8 +d77fb1e978e9b013c2c2810394675b76c7ec45e39f8f3dbbee1a92e43422ac76 +d9dc26e9b4163fd449f1d2442f9a17ac6034ef3cd200d50875b89843ea4ac7ad +10c8a2cc4df2c690e68c6f1070abd2bf25d6a62dac0da009d9b949cc257b4941 +8ec05287561ab344e71aca7cb870e71fef718dd65a69c99cd4173cbfcfc8155f +f8e67003b086437f488af5497fc9416b15fa81d22709730f32ccb984ff67e291 +355503d6d6253fcb17f072f324b3259bcb47f2ce27ef9708fe4b09449e99d575 +030ea81d86622fbaa1bd1e347105a283f2b394e5a541aeac32151b376464ed0c +96a2282ae7812383e1434e766f240e1379dd7440b4901a124607c4463b6328f8 +25fd34dff1bc61dfc6c3fb2ffcafe3b67068711e1635becebf8c890c62f342de +baabd191fd7f17369f6456cd3f69921466bedc81966b1055c49fb4d139f234c2 +8cd8eb0d15ceb048def05831b3e940627b2f98ed44a0cb193284c616cb77390f +01cf62e583c01909a36b83e9dc1097f7d946b30edb637f431ae85871f33f24b0 +0f3d42e09bb3cf5b9fbeec56c2762d4c7e2571c3300058af94ed8a09ccae9e60 +420e3b78dbe9b76d2e661eeb84162d2514564d3bd76e59ec2385ea5ca8e77480 +cbac4e07de6aadf16a183fc172d5c5bf7f979a77660706f2df8fc7c49cc77f09 +e3232aea4172e2a10cea4a9753724ab2b5a31e40febcaeb284436daa7328bc3d +48b2f8ba50495e566df032f44d23a1ea6d86557d48a71c7456c415562464c4ae +0ea04fdc6b07680daa44a90f34b59dd67802ad85ab62ddf3790b8f8a8b8660ef +815cfd50cb8607affc2e4fa152157101c957a422f4368aa35f9faa8b6735c27e +7c6ad626bea86f8b66398dcf40080a2ff60fdf8431d0285ab80668d39590351c +588cdbcb8245e5b9d5259ceb2e95f6238f0dc40b5406a15ea059751ca482b345 +10d6f256ba50792b8adbb790bcb9b52cb37cde2ba2029afa435bb4fc541735e4 +f76aaa503353a8370ef5a83bba65cae93b3bb20d727b24ac58635746de379ba9 +04bd03403cd2dd8cdbbb96282ff967bb11c89392c5510c1889dee5d2126d1e22 +c2815a7c54b10aaa07d797e0337c992bcfd5e023a0dd2603913df6fd060e40de +ea1905d3c9da64ffebdc539bbb00792a098e0aba893cee2b2222f62f7bc33b9c +0fe107b99feb52d76b600648b32dfad7f7edb025b143b445c2182c8278da240f +8909e3de7456428deac22c0fc88c3ed99ef0444e762edac64c4a4afa0b97a609 +58c607172daf23b09bbebbf040b5dd5b55cba5f2bb1e765e359d1a80c6df7f76 +c703baa94076ab528d326cfd0a31156698b9c9c3ffe0f13b7711ee58276b8422 +80fa784133d0e5f5b07dee16f7fa0dbb95f7e1f5c8ba8b45ff72d64586fa334e +0db8c968d3628ca508f945dd9189d1f7d3462897c141d080dbe946a66de8b2fc +2f2c89df29e8ee18681c8f01a43213159b9cb09c121eb73a080047b9706d4b25 +de8b147972ae87932835a6f4f12389542de405192f0023ef363327dc02af7ab5 +f3eda2970f67ed2e5435c50c522dd8dafbe0dafcfcc58daf945657045b3bb9eb +a9b9f8894400f2c1030c752e4ea6bb093fd5a09fb95bfd484cb326afa941e2d9 +6936453764c5828552529668257f87fee07977cc6d217b5b923808f93000a451 +d7c26a81dc47a1e7fffbae8016303157ceb3f64af87f5a2fd8c8dddd04b8ed7a +809140824d1349bf77e19ae91f8e42d7550f4163570d87c349ed3dbf427625c4 +f18245abc4ead1ec09110a30f4fedaeee971a2fd5c4bedd0bd1c80576da035a3 +a2527d163b2198e6c483ed7b14e9882f0a4ebcc2b55b204fde963da8e5358371 +dbe833aa2c41f60e98abeaa394bcf0212743fc5a3efaebb77d3206362db106a4 +2c57562c547826a558bd82bd5dbf7d853edf511135538d554c25e94c40b3f73b +5c79f9cfd585cc5cd1f0aecd196c019adf970563fe58627bcdeb9e2e03471e05 +d90d43ee6a20a468ab4ae304d8ac4049cbbbceb0cdce45d38975bd8f1ce5d1cb +b20fb81cd0507a3699c888bd8127aadeafb330151049b09b3932bf301489cbf2 +b09f7c42502e6ea82041403ede92b34f1bfef5fb5f5d920d5533eb4d65445c06 +7899f0e07e081795c9ee931a34ee6a9c65e63744db3f97815ad946f41dff97cf +7099378fbc99ce8e7f0c7f4f4e7ffb5089e970085b74988304ac99c229df5291 +9be0d25d890b071bea811aaa588d28f78e6331385c5e12d03682567e5abcd599 +1b51b54a680759f13683eeea378081c76234cdf5e3d3e5faa8363c2e74a7adc3 +92e744d370d8d466a7e1461907ebfa43f44376a7323847ac162c24ebe8ffcd9a +3ef3f05e197604898f9dd3c737c7da17c8242b8f7a261774d48b822831ce02c4 +f9249b22cd805ac81a0b9fd24ca446594cc50137223b67b97507d18409586cdc +aab9f58cadeb6e5a1f9a843b7cdb58adc014d4f2f7bee89cc3d207a82e6b9e7e +65485bca7253c6668629c44632120edb18b3e4bd170b5f431c35b2b945f55f1f +e0181e92aa60f35ee61bda2a2f25dd60afcab8962077b38db99c12efaa3e62f8 +024bf9e864953cabc76f42827360f39ca838b7b603b83f2c8acb52b4bbccb905 +953612745b0a8ee64753f5db78bf77762bbd7e48b370ae59f59a3609737ba1bd +d08e30fff8ec11a92050a7733539758889fbb3ec25d7c287e74697f80a485653 +1453d337173bc751eb122095af020c6acd57451e9d492d87130f898073705b05 +d044c77d42bd91116dce3774460fdfdfb7942c45f3053f13e71cdc7e5ff368b6 +02adffaf5eb51099c87806cd481d923548e4a1b153f3518445c2734a5b852ef0 +7028968378a565dd0245685ed23165d93450a2fceca590410aef8ffec0747afe +a184ac2c6ffd4252421a3fa67165c48e1c0bba8b039bf3c5f42bc031d8bde0bd +075a3594ec943f67ea4dbe5d5ec1bedeb833af6bb8c6ae6a3974ba1241113597 +4eb0a6e3107654d209fc0f43416c71645605a70ca1f9537eb49e2b901ec67028 +63c6a6b6a142dcb22182e2cb05a6572ede50e2391943b3a589f496af92bc2053 +3f68d7ecb40d1cdacf114090014dad9b9c00f34c47263d626016bf57ee1735b8 +5944bee9cee9d46a7a78bdffce9015ba5120b062076ab7968384404bfc7912ce +0025ae48ff3d663aa3b312ee77b669ec2b4052794e90e85a7769b500c709833c +607a352a4e69b4fa6cf41908453d07394740bbe9cf4501c5a64c0603c6f24812 +85cc4f4d1b22fa1281084b24f73b3436d0db59f2da5a100cc70f57c033c04dea +cc78a56999fffdc14c143e965bae844d87c7f7cd59aa05d352434cd3a70feb77 +3e878d1bb0bb9681622449483923de84737149dfc0566962808602790de465dc +86051f569beae85236ecb0b6a8de7d2e5c62cde8c13830ba5d3a5943affce66b +29f771f8edc3bae0df9629dcc9761b2caa07d29b92aa72564e700ec9bda0340e +71281448fc01a5eb62516d5d921d22e69b54bd74e30f85fc52647ca24fa8d273 +4ace1a25faa68a654bb60827585a9b5dc901dccebf5bb02437b6456cdb93ee83 +3e226b7822f375d60a1b75cdcea40dc0acd32f9aaa39808d24043098d76e7367 +26e24d0602eabbc35d28509c64a4d66df7c008d32e5964de8aa2c50134a00177 +81d085806a2b2783911c89f6876c1a4964aff3e59644e05aa6fba05e970ee558 +614ced908bb4838b5fb24c1a3458ca50a1d7e51af615549d340cc334b96aeb9a +4aa99e74f3939a4b640c653b03181a4c54d45604da621d4fae1aa04d4237b7cf +9674a72b50e6f26c07aa85343b43e1cc4436e0b326b890440dbc6ff36202f144 +e118eee07c880f3d5121834366d6b174b9d67886b62ed002e78e592a42668cc6 +31e500ee27ab1beb2c87a7fd3b1f2274efcabc70dc189b942e55d6f3779d6bec +67701f5aa3efea75615cae8bc8ae937cd29b9a6811f9ee11585e39b69b09176e +e5b0e4a8cf0c6fc393fea31f0164ba03ccc6af688df68f4228868cd63a84c480 +1ae93da9c45f79f384fe3a54fe463d4c7853031870c9e14687dd9dd76b9db209 +9c21790b1523d2ff913552ffe62b3b371fdfb87919a2d961847bfcb4131a901e +9a8cf933b2e2693a688e435ec50b1c0800ff31c63d1f5c7101fceabc9211860c +d043f5a575ea71977c7a5065d927a4de2c7752c02a857b884910df8511eca9f3 +b81d36526a9083de5c32603649e944961781c3966fc6c8b9a7c1aefa7e08e5da +782a9d694b8ca6d5c3887617e2bd3b5ddcfa2f965b78ed018a217ab5c4a4e538 +85ffb9485db87327232541ca112dec18d9f6d4e66256c929d8c38eb634cffe5b +b4b3aecdd3ce66b85d9df1f87b3cabc609ca8d1c5bff49215f8c324bfc42dead +64c43bcea81619ee6948ca0dcaa9c7e2a19f8b9e830b9febe1a59ed5cb8d650d +51ec17b2844c9d67184557654add27c135aec9c6a6bb2068cbc4edfeb82133ef +a5f46f0dbcb5996702b4b1b67b3cff6992ef64fcbacb316e901765a87d76b0d8 +17d389d165efd517aa40f6c75a91cf060968467c82b1294f2abbf54a35227b61 +3b3bb9d32eb143393796fca19b4812402f221c7859ab4cee3777a52f847ad8a1 +3c637ff08c83a58e5389960e44cbea061bf444fcb64e613f8f47bfb1990c5d6c +5da42c20b4199b633f3675d91f301fd3fddb875093d565e01f45e3c22250358d +1a7af5ce476b44245788eca65c4db73bde810290d8a63e59f30b3c83d16c5c62 +de36b6dbab5d10659924f32a5b876c1583cd8bf728afa797b33a6c3c0d85b40c +536b2c7d1ec7ef7ee7a9df19bdb5fac451001bd1e8964a320209372646202954 +0eed46fb166faf15f8b10b8515724b409c7461a738248f60429976bf7ace5a7b +bac4452ac45b5cd4caeaa310f154d78f101667fd22b0e69bde93ee67c68913a0 +67231e0b73377f31d3bbcb61d8819e32f0aa013fdc543ad95ea5f48cf95deb9a +70c31b233f591549701daebb81dce7c3f6241d0a4c562bd9e267f55f017a20ca +d232044a680e59425b8c072682dbe71e21c7ea603056d9ddc41f16f26ee5e74a +523462e49d58fca01dc10d1ad6b6629cfdd36c556f8fb347af37886140a145fe +4fe9e34d22e5d7804db730cc076ce074762f3849c62ac49a2d66c707455106f1 +ab854054aa54222ef6d5e628c8065228723805076993d356f0349243d9e43abb +968eb1c9998ec26447bce6aadcd84f0b6993d4ffa5f536fec6e12943747aac99 +c253f9b24caa7db44311cba889b53ddc5664475c22526fc9e1e700b3d38b3568 +85ea0e60d4146811e80386c11b2ae0e2eb94afe92dbe3b5a82fc3b7ea5b39847 +475b707b4058e717d5ec2d599db0f27c04a3de4f85bab108f6d1463183291cc4 +75edb7b62e0c1d6e6f0c5f03e5b9862c6e5b1fdf755610ba188ca32f5994ba24 +8c6a0f6e1a6cbb2378b3f29c4543511dbff9345a6992fb19d67500372997478c +5618920ea5a62eac4aa661291c8a3e46a26260c8658178e17605b413bb89cc6b +fe10c7572049fd36357290dbbb19a670e1244281b4b2a3ba60e1b322182183f3 +96d486b97fa3d435987879c3ed1a4c4a5e1794f7594f05ba6a1d75138dbc76bc +5994ccd69499f4fc7c01f0b0b04a7e2b8c2c3eb6cc39a6e61d8610d0db8bbf88 +074959d4efb3f4e638208c7935e08d34379884930d8e99c3465ea4d4213a8f41 +67e091345d5ead21e5d9cb489f2666c02a25c938cf7686a943d645feeeea7028 +7e1885a3a2b2cb9d3b3e75896058ea924009f40c8bc017c82495de1f8ff0c62d +3245610b0e5d54908eb3d96091cb87df26ad8133c46040e168f82547a32346b5 +0175b7c37b6bde3f345b4322f9a57c25363d32d1988941be4a84403c0e4d3440 +c840be8d4697fcb6678cc2db85fc9d6ba2f59814f257f18bf17e57b436581d95 +d391e318081d75a1a9d8c1fac834819a82100b47b78424c28871ded159b5e5ba +49a2ba27f1a0fe358661ef98a937baf3722a1b471f269e3f8cfed8f4b44ec694 +b38f4106570c9ba31a30d56a594fe4bd91178389667c3d15b54cf7590c46b9b9 +a1ce513f45ae78bdbfc81a820b2ea832f390ab3d389511add1f30d1d07f97e7d +fef1e1f796826561873c6321e0915eceb5d141d5e8d9e664802f39be458850f1 +69990f176dc24f0b3148cada39a20c3afcbd82ce6fbbe0cec2f3cd6dfe390b96 +f9c450e3fb31fa357930ca4a2911b3441e4813db96daa79cbb6b6da2ee464055 +374194ff4d779d0ed6baf67e7c06d711fe1b5e868c1a4e6c7f3ed529fd3d3492 +ad079fdb6faa5dc0924400149ce79a9ab729283669917b2b538f05bab7596b8b +bc9c86cb74481d0181c8fc2b0c333619b96c63b6fcd352f0564862205f685eed +ff81f069dcb2bd3d0ea80b86952f7efd67ea8b60f3e90ca23cd176c76d73cb1d +7c7de170a4196875e99ba42f5e53a5c3a7740bee37d08900d68e1a5836ad4c45 +2f325a1fd0d49f74e9437f2d28062ef5d2934d063f0521ef792638fbc96af2a8 +8bf23e8a33c7079d2abe21a018521acc0e14c5508e629fd83773c9f59cd37fa6 +4a121bdb1db13d1c598589b00da37e78bd59d0e9f3e6d3c99054626e9e0cfef3 +35d2dd25c138f96a3f7f62e2ff2ff12010049edb86f3645f0272f36eeae0a60e +532cebda1c0c0f39c454e251aa6ee1ff82536c1fc1c9b7c9679fb2deae693a02 +9eb57eba3882901d2dd7d0c24d5f0ef6b799080e98ef048eeb4429ce058e05d7 +6a296e34c80467c71fee0d41a366ca38b6fa3c5eb7abcf854fa7adc4d6ec565d +7d8c39d192fb3b06bb93518623a1b1c56cfe095354ef43fe73c1de5541a7af68 +c51ba01019d7685596d730bee70268 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/client/shared/lib/fonts/courbi.pfa b/client/shared/lib/fonts/courbi.pfa new file mode 100755 index 00000000..5162aa6d --- /dev/null +++ b/client/shared/lib/fonts/courbi.pfa @@ -0,0 +1,1940 @@ +%!PS-AdobeFont-1.0: Courier-BoldItalic 001.003 +%%CreationDate: Tue Sep 17 17:04:09 1991 +%%VMusage: 57715 76639 +%% Copyright International Business Machines,Corp. 1991 +%% IBM Courier is a Trademark of the IBM Corporation. +11 dict begin +/FontInfo 10 dict dup begin +/version (001.003) readonly def +/Notice (Copyright (c) IBM Corporation 1990,1991. IBM Courier is a Trademark of the IBM Corporation.) readonly def +/Copyright (Copyright (c) IBM Corporation 1990,1991.) readonly def +/FullName (Courier Bold Italic) readonly def +/FamilyName (Courier) readonly def +/Weight (Bold) readonly def +/ItalicAngle -16 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/FontName /Courier-BoldItalic def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 263789 def +/FontBBox{-48 -288 860 839}readonly def +currentdict end +currentfile eexec +5c03f98a9ef1056084234938772b65b659a297a60831474f7f06192b155c7867 +6e337a4b7c45b34a88552e942ea1b7667df4b71b67df89e141537fb4b1d26675 +7b98b6502e4b2246f50fcdf717d3a5cbf57a5bf92df803946d950138fb0acd1a +c81f3f66f82ef04256e333e070972e17b42d661f50b27463cec7ab9995060f63 +ad76b5de2ee0546d9a2e43488699c40c150f6d60a9fc1dd3b5367a87d081de8b +a232ff2c4e9e7ab38f13f20d747cec9f5cb36fb8ad1b9228a42216d93925b91e +3643f1c2f86f0ed4286847196391768d58895b7dcd757d9f656af1125a11f291 +42e28ccf91a17be1a89d3214be746c4fb82da439d6ab53f4bb12358b2f8c6b17 +32fe22465ba0dfc22a955139b55389d1904f3f742faee44c1af9c3c9f588ac13 +3635df24815df9c92f7ee93e79555f834f18f20eabf3b2b7a815770715bd2e16 +4b1fcb206e2fa3aacaddc54d5d61dce9a8795d8f346bc180a550aeec53154733 +bba47e38c6be925bb166c8b776c4350935f15e3c6123f8a91c65506f2ff63ac5 +d79c7a7519f9d09301a6de5052913938ed21c0194306c8ae995bb8f5ab991343 +5def56faa796248a10f995ff7d6ae352111eed560620bb6ac41103ab077d7cc2 +d97a20aa0a9dfabf6063f3a600f2c12fe79d30f9967788f90f5285da7c197d4e +58a9ed99659dc24269914e0c0582e37840b0f6ef456b0f6b445b18e6b5073f41 +8ae4fc99f4998da4fd8820393e41aa4f953ceba2edcd901d5b7ef2fd026fc8a5 +26610bde74dc20173add2c71dd98cd1b6445ea20f88684638f269801cfea8dab +e4cae300090a10211e08e37e65b79433989f2a3d888982631301a76e4c68a604 +b9ffbd0b7bf26b12cec3ef5c6af999e72243e396f5eaf36d7a02fd686268bd85 +d66d617e51c2c7a5033d160b8ebe9b7d3c0595cd0ec31cf4b88cacb3e74e2870 +ed7e20f88905075cb6821889e85fca3fcd5a397d44e9150750b16260177280fc +92a20e8b891abff9492a07144e9ba614d069d8afe28441d03d34eece34f89640 +1ae1c190991de2ccd321ac65b9b575661dbb7dd5336f1af355062446fe088c45 +05d9eb7fd3f0740528564f945ce3e13e5697b23e1acdafb8322f77b455e983ab +dadbc73bb4c8b593eb357226060c4f723311d7c48435ed02bece6c61523c3c75 +5be81484919dde97279579df674527ae2844220a490187e9350e34ddcac7c82e +e1fe5cd11259688a987d6127565904904dc3d4ab7c41035c5258a9841dd2120e +de49dc1ae7f4c308e169098267db701bb94b4862ec87e13c4176a3b362f7ac17 +39b75de7bd9fa615fed494334254229a30da7357f1015f7d2983fecfd2cd2444 +6e697b50f2b8e409e73e46194c89844ee5e5ae5a4d646587ed37a0255b86fd7f +9c287a61cdbebb354185d2724464a70461a29dfd3c3a98291654bd13a64598f5 +4e23fac9ad312e05d6c689e529ce5ce92e97ddc924bb5c7ca024bfaff8e2021a +dcb6f07bc45ae0f8c80b693fbab5c1c66d5655e7de5151f48fb0d5972e2f523f +790c7c46663b5032f62a9a510d75f7809f3c7774d2f7378a8de57a912058247e +30e29f65e7ab0a93ca198e6dcb287d7e44f01755f849cb46ee4e8a5668f5fe25 +a4a579201bb36e45d4208fc0309d5b763cf6f5903f4c59b3527e11a1d594f9fd +d3f6e55a9ef313faf9ee6d0f05c3948fb186cc981ae63de15e4aee46d7e3b623 +736066975cb20d00149fa393a35d8aa21637c73c396aa1706d4486bc38ccc199 +573e5c564947739431f445a8620383c17350a9f818acaa67ef7aa609afc1cdb9 +44a8a2c76f2e298b1de868a5c379f8f7fd05af8e66b55858d579e09c84100b7d +9aed565c5b3491b2fec23390ff21231bc4d231a75576cb7382619f0480126a31 +ea8bc6b2b1535c7bf260351756ee37f53ebe18c7115a594001dc5b6d3415b88d +8a2bd9167a5ad2949af32718aa189645a94fa2f5ee1c07b8c2a6733fcd44b21e +8adf515da9d623d02a7a0f4d34d7969454c68fae43681a970841a4fea9da5a94 +445d4fbcf36ca7f185e8f7d085fd869203a8f3f9bb87d31c46f459c1c3ab4854 +2def58e42fbdbf28cd14d3a1bd1f7d8f4bd136ca919263dbb3c52ca2db0fca55 +110940cddc11095c5562e4338cc7b74b0ff0c6370c1cb155154f0360220c82a9 +9fdb9eae6e988e28d7fb0d44869ca4c92667ae358dc1db7601ab42668ec40f50 +14fa64b966506873d63ba425d899ce827cb7532eaa44cb8ca1e5763399387a8e +6dafa8b3b5852f23301c441366956805ab69dfc15cb156ac11ef709c651ff3b2 +064a491521cb0ba8abb66b99119d220a197516a7ed8d4d5d223bd6c2afabbc9a +be1daf6a4b9d6064bef32971984fa314e9f3a8eddde83b39075b3b6f9f9f0b52 +793655e96efc0cf833fafc4460565056522b189870ab1493638d6cdca563e6b1 +793516c25d149caeafa2bde531b397c4beb75b09ac16430b4219ddce0c4c6400 +1a32fdd1385372158ee82b837becd6af14ebd1cf92ba934154232cf3f5b4200c +41e65762b0dc5120e7034e1fd4774a0da978e6395e855c8cb369e677adc49ef9 +f4dce344953fe9da428bd35a79b6d6155263c0fb306f4195a5a181c38ba432a8 +1f7039f3221d3700d584e4018469dfe590a22c3bfcbeb02c56fe0f0f5b93e6c4 +0cd8225b071022e08372ef5c5de6de6d24e22640002597d92051197a2b88a27e +071cb9c6580212f6dddcb80185ca39a774a905b447b5b836d72ed90faee84a51 +d9f5fe37de26e4a3e5209cbcf989644acad73eedd16f028a304e0eeff26655ca +890a74c6ce61b49b81a191e158b6f3161d6ac5def3f084d1c0e48022f111bdf6 +091916d4adb5284d062c8d71d487dfed925c4f26fb6796d36eeb818b9ef5c503 +3d4fb3bc7b4aab1f562b563bfab9a79ebf49777f6b8c0dd77af6e4dcacf81688 +caf05981536b4e91ce965abe966acde3d304d9d0f3b6433078a8ebcb02ffdc7e +c210a35c7dab3ebf015fa81b6dba86e683fcf8962117f44d68f562b4f7c68c0b +5df0193ae2283f35c421c6da43dba3419c63438ae46eb65fec9d8902ac784015 +398706463e99a1cf1554ecc16494477fdf68d40ca992dbb01816d410662b743d +f0255e6c891b1482ee1353a5cc268a264e300b94d15aab2fb2f80bc1f0b714cd +7e1546bb733ee3db28611f58fe80bc6b4bf8b637b00fee2997cbd2d2f8808944 +f428727190675e1dbe9e4ea29869af8729248ba59abc84861be3814e003ac8e7 +f8f7d7ad667df77d6b9619d5776bd048c7399f01b3688730fc94af5fea41e905 +43faeb064b8a7e8c9ed0f04631f4223730e2bd7357d6c4c114419a2d4aead49c +d2ed2b619a15204c8fbecaa51802f3fcd8f201ca100c36281294f2cf2981d59c +ad0d9e2ed7ebf964dfb3a5f2b1bee1b3f361806b0a5f7a74b32791644d5184e0 +2515f2122ca3e24295e4aaa1165bfcba0ebe9718243db1f4587f24cf6a52f92b +c2229b9fdae40d1c97b6bc6eea4e16231fbd92592ef326227fad7ca81701af4f +f47a2be563bff9d42ac841df2914b89f372283b77d62faeb611eeb870cf9b052 +dccae0c500d9ba5c86f984fca0fbd37e813fce5339e177da499e68b74965fe03 +6a4e030386eb28c668c18b04bde229c53c86941d682ab64f0ef33c47cda25acf +91ea2c53beb3a7552d69b092a76ff6c496d84608ead8080518943a6fc57fcbcc +15da6f2c62a6326ce45f19b403c65ccc613991bb5e493d1cdd913269816341dd +c484abade62ee0eb0f2aadc0fb4ca2b04cebfb9989611ef65b6697fc6f0fbaac +6745ed1a21dea33907385730bdb0cdc2fc37376ab389267ee40056eee0e6467d +8181a77d6478b78d4c140ba7427eca7357e0f7d5f72324aa1d5e6bda674c5743 +4fceef4a522731a5092cde4ed87211ddfc4267b93655789469d47cbe3d1cfd35 +2a98cc4896b7920887378174447ae1c501c55aec394822cd4beec7ee8b9b042e +d6255479d8e1aa7a5efe0f486417e5a5e6f6ebd019aedb0992e033a8436f4da1 +44db254c8990b3d25a7786c1250d71fbfbf6f0e45faa7661399f12089822697e +62e4081d586ea80ae533b192cac92f9f59ad445f7ddd088b66b307041b737ab8 +cfea19ed2a9d2d35bcbe1cc4fe4487f09288e7e85b98ddcac4b097038b8a7905 +c0293c2d66739bd457cbdd9892044dff52106839c707b2e02fc433bd1d1197bd +3cdbe6b1e55298253b09f7ce80b94cf7715f2947cfab6dfb389e045294424fdb +6f90ec45fbcdea39cb05c6d0a4614c33769d135ed0d6a6a5a4cb25ae1d1dd408 +51aadb3b4eec2651c290a62d95a9ecf17430db06a42593ce2d06d3590e76b929 +39a2f87c2614d353d109717fcd46a7f9b6795cc840ba6b4ec37502d3271d5ff8 +09c61aee0b67bc4b8629d9ea756fdb3724b1f67ddd7b0f47b3c47c4c067885eb +d3cfd3b7fd4f949bf87994709f5f278a699b3addcdde90196b5fce894a44f3af +82034d0b4ad4ac692f54b6bc07b849bcef0b651d2a1b1f69460bcb62985cc661 +4da60cb063586207661c758ec6bfec68b1f03a32e9b41e8742fe7ee126411cdd +f327812a36818f8a88f4945202863de81671c01c608f2387d1de2d7e686b5f20 +b7dae705d654112576d937efb9cb33ee65b5435ec9ea9eba518b3f9f1d30b9ba +7f7162e86ea5082e983295e074a854f1be92f637be4e7d99a75b582ca29f968d +3585e2f6481ef968c08ce36976ee7dc1c1577fcf9cb546130352f80e880ff81e +3458808bad09930300f85833c920c47d61f6be8ca5a5655eb4290fea4d4847c4 +bfe69e08c0a5cb8f58455f27d360da7950118eb86df84f490efcc4969827a14d +884551b1185831850fe284b53b661098d1b145b3f2a16ea5c7ae601756da6aca +c141e3ce0b4079accf03fd2376db53832bf0d41b49da9063e79d63bdfd37bf7c +94906c6cd82ee31e2184bc695f2746a01cff0373b369bff632f3753058cba0cc +2e7339a4c85170dbd24fbf89d917aa24de7583dbb8feda459081af95940e35dc +58c7d363511b82b95d983b6679f11bea2675775a1390bd8b1f66afbbc1295bf1 +05bf399faf1665bf04d975b31d031c6c74e3ea1489c57e4826263fe56de76639 +2698ded8780494b338640fc42a58c354a49ed70301b128f18e1c33c45ceb89eb +39ee8c97e200dc39325571494b49851ce1b8d1d0bcf79a3120411a8b168a7758 +15c0eb119ca69ba8fb227ce5747785e4a096f4b35eb15abf3a8f45bfb50246ed +2a3b2be2d639fc263765a00fa0047972552466f8dd6d596bb6812fe530d78ad9 +5a6c1f0c70f003d4f5d6d255e747c99c7bad63f97b51de299f7788ee41f08ebe +f60f52904502200fc62d912560792ef032433366860a3154a16bde3204401e00 +3bd3663669d15a79596abf25c6770bcf93012334db1f1383d80e18f783b5088c +8e03e5537396852caff77cf3a15899d21f6cfd57ca4e73aa5a6db1d7f3e7dba7 +6a31baa5d770072c9a29c06010bffb0a0e1141c7d9ccf6193cdbe7da527f4cf3 +e63298fe54b6e82d64bebb75fdba752968910cf13b2320eef043de5a140ec54c +01942dfbc94375e12a9612cb20d117f9d3e0878ea790088bfdd237ebb2caeef1 +6e13217f0f83f508777f9df0e37843fc9216a06eb096f7d6276df5ae8cd9db39 +25a9bd2966b7c3b58214efcd2f9af2636d9e9f73b09b4da344a81f7a47dceab2 +b23238f002540d017bf200bdc87bba433c7d7ec3b55da5af20c37cbff34701c4 +35f091ab701cc51c9f0191d5028668bd6a871e4d08ba19170f8c1430f1b542b1 +7bb65c5a95924a1093c04c9af060e456ae7695ff5f6bceb846976bbe437a780a +e7cf5650496c859eb598942e3700e7d1825e0af3bbe764369a7ee75f14dcacb5 +24be8cca7f80985d42570543532aa5302964f5d50fcbfd1e094833464c361d94 +de5ae694e605271102112615143f68365c9a626218b923b2a2ca76c4e8707810 +f1cc16d0da031df23e71591b1cba436bbd25829c3d0f0eb60e8b85d2f47e30bc +b0abb659bca53b96cc968db4d82f0adeb1467b54315451bc89e953e1e2f47141 +174fe9a4850b451ad468afb338539e2faa9320edff3118c60a5c4a7e32a072fb +59bce786196cf4fecadfe62c4f3a000a230169397f73388f06d9c6ab33fefeb5 +b0c93ec5c4fd02ebd912fe85eca4668d8723d9a755ec2501ae74abac9ff03238 +d8f82e1b48071f527443f2a94a1f90b6f2260ccbf51b9bc2de684a2a8563beba +3b05379fae11d6ec2214953decdeeb994dfa50847ab7357b121abea5672498b6 +9a52b029e8c77151bff878f7f30fd0f9a40b8e1579a8b672b7c755b68e28376e +4b5becc11fce9480bcd2c10099447b4e6b3bbcd3b7e84ed51c633290ec084571 +ba4665bc26ef665621495045e18e2be0ee391f764d94f7e631d02c3c9191637f +e49b03f893589e3ad60281ecea2160e8171783693e04355722ba6f7c8da1db86 +b1ea3004f486f94e9ccf37749e8a0e927d15e84523402684c1fc4c514e7baf20 +d77d00506cef1e9b81fb8244f0d6095ea861c446948fdbd822d10df5d6a82c3b +0af0caed6d1fe7521c6515665be4a5e10c8703c8e4d7db3a735119fda2bfd79f +8f3dd3accd038fe9158e33cac57890e6fb22b41f82fa854e1b6a75cea187d2b6 +18d4bf9117bea6261aaa838ead2e50c115c997dfc996c8d00b587791c5285df6 +b5cd27b12e338a650f53a0ec9cad5bcb0f2053dc77aa57a766e2f8e290586e27 +924cd5a5c1cf0c08c48d0e7f9990e84644e9a6f5c9b49be9e3d7322b9b66de57 +2e5b0ab001a2c9e2d9782796a4a7475ae1bf45d9389a99371ea684ae896f3985 +8d17a6c734ec6fd734a64c6747a207ee39f1c9f896b6f6ccead910d8bdb9b642 +b141d1a57dc06f9f303947c61fe1d97699fc3ce4c66bf9953b6ec5ef743717cd +831c22f49a68446b3b8a966b8659fda893a67fda0cb566c0eaf31bf88f7b480e +1f05a59cdbc561b6c7d532252aa464fda44727d80b6581c7f8fd89caedfc3b57 +802e694b74dc15b889c838571cb6ce197439ed966d5624ba7567e60e4dc52c48 +c74e5f2c2e0282e54cb82a5214b3a97fa82e779957265a4acf064bec17700158 +8036c7b52c4c2233cb0e8b5b244de31afa11afecdf26a916cf1ac85847a51eac +6cb46b3b35d7fff18d2041a63d853535fd09213116b0b62a115623b471aa4849 +6d4112ed9ec7351894cb36e9f9a0bc1c015cb3110201390643b2925dea3a3dc0 +7fc8d62b62ebcdc38c2d3316b8ec0055c34acdbde86473e4dfb1d5e33266943e +9f777ceb99c757b6c6fb5c69cdebf31336d418f0698622f2a0e46bbd0094cadd +deedd149e7ebb57664649e550a850dc994df665b57d81b571e4bc6c0d25a470f +bb9d78ac9d2fa47c41675a11f3e5b88b567813256f4a544fcb21238a91e2e30e +c3fe52ff997ea81e1b0d9ba23e0815ea78f46003a8463158f6077024b33de798 +ed9c1b02aa6428d1dab23df5c5b055537b44c47b4cdea9c7783ae5d534e65b2b +4dcbc46156e6353307e0e510e4d63c2b438737671c024f29b80513335be3b4d9 +8dd586131c242b34686881b7d38deee1ea765c86e7cedee45e8f184987ef2e19 +15e668f56d7864d1a8ffee2446c74c34163d2f3b7a9c130ffe08ed50f82ef23e +de6b14e54da94c19bf1e845d52cfe4bb5799572993d3115c4e8026d233eeea4a +2e9aded6f4f13059a77a291a68899f823c1dc8cb477b8a63e613dc9aba760219 +e59dd6207ca3a22da2934773001d735472c921f2c2edb778c8cf892295482ba7 +6253c77b38ceab6254eda38eda2ade861ecaee566ffb7228dbbaf41cac2cecce +53631734fc3240ac314f0c027bbfcb5706cefe4f1f975a8e2ee0956b23fee700 +92ef2de443b84ce88d513ba4def345f5804f6b88752921e636e9f3805ad16575 +88415aa0e0de5696f58ee1f5bef9053265fbd2fb59b1ae56b57976169aca1856 +e577d8ac3f8682ac5ae380031077961b4f5109f32cf14844d5bf33c230bdfa36 +7849549ec66ace781a6872b0997b3ae724ecdbcdfe1e3bea3985c4c49a301c61 +d420275f26fcd495a44e006fb0dc4466adcadc04ed4e7d5327430b63da5fcbc6 +15df77ee82f16d884b82ae2ca29fa3ed9bef89c39636c60d9b3fa3b0979daa47 +247a16e7c85d3a2eff262f02693468edcbab854de2450ad5b57549cd210aa038 +66b7ce681a264c8fe84d1e9db444dc9384613dcdc5eba9b416e45957d6781b68 +2b91c3f421c8ab3cc4c34770d92c17154e67c70dcf432c75b9eb5ba31fc1db9a +deac4609c8cabcddebf16af760647e84cea4ca275a0172367ad1267fc4b53a93 +bda2df9bcf433ae4a97e97d2216fc97fc6471b30d717c89c070f8907a7606c63 +2d584eb26c0def8166b20e33e5801f41937240794c42b9a89cbba3d69edd7983 +702788b068646d730615f77cab05aff0d0d3d6aa954aad02b927fd16ad2e0fc6 +e867725194465abc056a13368c8ddad965d1fc158d8b2860ecf62f91254f5d22 +642493aabeddcd7936ee057c74b65c3209f97d139b4ee97d071ca97ded70b3dc +135b4f6bb4b614b9b873d8861803e52b5c1c244041ac55002271c638d59fe5e9 +81869703cd7a6c4bf77ee3c1e874d01e42e5971584c4fe6793c9bac4ce1e4241 +22267304ee3494db762355ad4ff4f4adab137c86b075c9b8f9d550f7c064c50a +f47e512f1249167dc28d02f21f46de36139b14c872cf9bc0c42cb876b9381cc7 +c193a46d0e7e4445af03a2b80f21c03c1bdb4c8e73a45786b4e3bbb461765baa +57b956e0cd966d1e6df77d4a4fb5ac914cdd7c6619ba317f7c33c453ebf567e4 +e4ec75816c790bd658350a0fae0eb699c708559b4b5df253895491ae9c77da38 +8ddd56129988ff4d6fdbe7c01d890ee2689f235590f0b80de4a591e33e8196c2 +0105969df7fe558f8e2f97372ffe67adda409f12c17c979739510da4b5314ca8 +e4e64281658b232b0e3edfade545fd3c7e7fbee52adff818010270b0855df99a +acff5c77eb34159fbbe8c6d355da82eee52b7e153c354cf3f18baf88d4cffdb3 +00c8b1cc7f30219b26efc8abc8edd998eef793c7f4cbbf8a7d8f702271740335 +ba6e596c0876e5b3437218693508f5b59a5e24e754adb4fc549faac222b31402 +a8b754b37c2cc69a69abf86cc89123c9cf654d2d37a08251bc1f119ba6b72ad1 +55d2d0155edd88f76eb739280b74e364505548ecd95887229aab96271e461c54 +32aacb7fcccfd3616ceafbc4932eedcc145aa25e9ca13fa8d9ccbc9147418793 +b86718c5fcf833e4ee24fb58fddf71a53fc5203e1fd3f8132425d9a9bf216a79 +e769958a89ff7104dee938179b316361207cbb3aedb8422ddd16a10cab1edb0d +0077f1d83716f824236037c83a759f323cd24d057a3057e5b5cb8364528b3676 +c9bdd5eb9c47412c1a65d04a72f4fb24aeff98ac6383398760f2d593f1462aed +705e4ff227ac6805f91d12486a7658a9015ca7fe8badd6f449a97e4a4d3912a7 +3942c9ad0eeb2d732fb5243700cf95e18712cdefa2406b5c230a495e57b46274 +e064104b8b1ade3f2e62762a9528b850e4ef45440713626eb81df73b470c2f7e +e1df0501871f216a39cf671ecd4a289dba51123997309113785b7b73a5bfac2b +26532b86124942c3018c02f3d904c17596d451486f488593aaf66b73490eeaeb +f28eb3eac5f2a7659015f205fadb5c833f10375b029c1e3046a957036bf27c18 +1ac81761cd177fedf126833b3dcf3e5caf296b7b910caf9f6ea742b6a8b7503b +3772ab82feeadcbe041fc4b959586e06aa7185ced2095c33fe11564e857bc596 +2cee40d18e59317f21efe1f27a10b32ce40d3b4a60692d5346cdef10fc6ccebd +2a7ce79bbce9c4ff44b2f06b9a28ee1328e043cc12b42ab03317cf9bae3e84d7 +bd52b0761c1c0fb049e7aabe8b2a6bae03b2a8ee4a6543cd1f2c89d4b906997d +5530f949c403ebc40342e9d8816a39061aab7ff76c0080185afa3153500dfc70 +587481dc9db515fbd77c0b08d86f944f71745a0a29517136c9b679a5b0bedca7 +f623fba6b954f39e14e1fa04f01b6e377ebbe90e24d069908456762c42b35010 +677308247b6343061bc0d785d78a786b1a04bec9f9dabeb86e30e64fb4ada8f1 +b9fd75c9b0d64676c4c78d635b3386e362ec7cb06bf2c85b8a22292a58f7c038 +827a1a964af9b7b9f3fbcf8472d120c5d9c0bdbbe9c13ef14d2bab51a183e3ce +487c2c463b5b74f4b770ef9e0c60ed08a7eb54bffc1c0ab00c51163af9a1d428 +c30a5f2abb783c39e1891b93b27ba533aea8aa8b3bde4d9bdbebd0cb63554705 +5e2dbc482dfd2f70e88f9d7785b37492e6068532149a9e8fd5607911993e9dee +e1dfff50620ab8d327e51ecbc1d9f57045cad11228d13f073b197ed7bcf23bba +338890c5e4c89a831d3d6ec6f4938658b12656546498a6c7ea94f50c04bfee0e +96b00e1f90bbeef51162d5122d00a62d6fa8bcc6ba2609af9ef96f2af7341ef1 +ff453232622e760c66c04a5ad7005288a1963291a82ad061105283d9c1b6054c +5ac6087102fa0840a71d8ca55225f5ee5d9d8c5f4233f6e27992351df89150e2 +0e4c5b3707c15bcbfc0a2eef1babd8bdc8ce88410b5d21b2ad07f6a6a752346a +9392ac16bd36af87384b3959c8ad6092acfe0bcb4b1ecd45227fb53969512f34 +a99c43d16849f0282592f199a87cdcaa47af35b93c37b341d4f9df8aa99de0d3 +9dc3ee52a87141cb9dc54ee197d01063340f0d8c34abdfdc6132bc39e0d10e4b +094ef37bc33398c0c2eca7b7fd26205816798ccdacde7f235a70433df45909da +178e6ba670d4ee36c0894e42fba7c6e563dc44b64c253780c586a355963c153a +d25126232fb9a930e7e46f68289d1d1ff10cf89c2b81a82872b725d74a0067cb +76f0c8d490a3347c1e8c514dd118ffd233fcf22eebf361b73cf6d3a2fb137276 +4adf6e62d8787f9988416118607c6128f7210327017bcd6db915b88c7233b2d6 +25840ca2473d6a9b86442963466334f743263c0d9df232d42b7b35df16d80cbd +a08e17732d864bbc1e3f244c54f22f8fc198355440f8790aa50af33aa967eddf +d61cd3272c0e9bc63598c50c3af58a18c649ee88c38e4404af24867e43a0fabf +8a709eb5ba11696a044c4d287dca9328d768fc04a14c382d55dd54500cd5e601 +bf64480cc4f247a4b0c2bcea1a0c648e7e8e661f69dc09e789e12581d99464b8 +549ad6a29c2874744c42b434eaea2d2943fca61c27bdeed1a52be6e6808383e6 +a7c204ab964e78295355e2c53f021a809475ac21375c55e0e7491f4b1289b3f7 +5a2e607195f602687628ae541fa96ff05d01dfcd6c04a2ac5b6236a7b9324fff +00b71e095442bf04ad5b8e428b18dea2e6dbbd77a9c096cf4fd591f6a563bc3b +734b45ef6bfa0e83ccb996b9f8981e55627f790eb93947b2f01c46b7b4ccd788 +d870da4d3242541fce9968ddd6e438be5d36359d09ffdfaf2bf1ee47d9633132 +f41001b946b4879400ccae1c8a934a808fd1fa6db83cbe3d8dcf2af0d577fe8d +f6fe30b1e0ff0a68c7c8fcf950bd9aa17c8d8a19296670eea02cd17bece759ab +abb6a93ed4a6af531b7f8ba2e9ddc5c438eee125506816025795683f27d4df22 +d811c2646ce8830860a5d8992ea6a8c0ae01280b8fc4f27b1b31d32f826caaa9 +635a1ef2cfef6ba6c9ca9c0fe970d6e601a88ce06719578c27f33ff9f6f2d672 +dabd6f0be0235e3ed61c90bb0f304188784a018ff90156d8d04c7071f0de22f7 +d2cf7ed96707a83461ec99fa40f6d894286308858bf6f616f6c1105e7e84060d +1e20502bbb968b61eee38f151fef5af57e92f1d0196b8eaac2bcd8ce523529d3 +e8771aad8265b7e5e9846f28c2a83512fc056de6a20f8c4b0711231304b5050f +9510c17801de0c8e2dc22934ebd24a6167ff15e9a06c023d025f05d1f960312a +bbfbc9eae21c4da1a6cb51ced11db6669da3e2d8530fb9c9287a4dbeca43c0ca +936364d960f7611ab03fb143557d9545ab4fa4d407f125b8ec4e5c366c4d2a7a +0bb9a135eb9fee265dbb5955ace3bf374a0d321c82e99329166806ec8d198adc +af85bf2ef282c3ad477224d4a028584b6a2b5e4677690874194bc2ca665ff590 +da247aee67eec7772dca11a4897b12cd08532dadd9a217055b4840f26a8e2103 +e1563952d46a596e511ef81d1fb0d502fba1c6f5c0ea17c3e75e2b69e54eec6e +0bbb9278f565823dd1ba4e5e850cd6f5aae2672bae4a07bf015ff08a013bebf5 +810fa3969991aaf53ce458d35a44afbb39d4c3bd166ab4cdd2389f3cb67ebc2e +6782677b79fa51bb557c49687bf1b11f2082665b151e757e94259ad6659502f9 +0dea0e4588b706f5b9dd7e75bbd371539949a4f203b1402e5b35c06a7061f048 +8ce78957c95f4d0db1897d624e8f6f60e4f604973a89445221191f8c06f5519a +ec6be0a1c2be7cc6e5ba73c619f2badbaef9e54fa9ff4189246fb333f4dc1f9d +deb1120971d08567d890c29571327fed1651b073a357d71cb48a852afcfd9a32 +3e1b540aafab71f6a61e05addb80a225b4b88c4c0f484197951e3972df4b9560 +33d831653a2ff15e7083adbea09b33a35575678e145030c94b0c6e0927c9d4f9 +866b72e6b2c203508848ee893c13ab752bce6fd4f9fc6ffd91d28d14db80db61 +733849442b4979ec6dc0d37c1467a2d5381c8d33663995ce613728d6ae739370 +2f9d266a3e09aee52ae15fec98a8abb59ac09dfd740c0eef4e11b78cad38208e +5f60d396e41cc30828df87b3e50bdab69b39af0fec8c02c324d086eb42e097ae +4ce80ad0d2dafdc139e67391347e116bf1520ec8772b4b74e9272b4bd1d4cf18 +e808908988ab4bb2cec3db5565393461ca5af862e6a0f2183fff5d81d6508247 +05d5036599fcca825a74d487a8db33e6bee831d324f78af5910919d966ea57fb +830f6b782d3dbb8d5f7bad8aff2ffa541b16e78e2d23180b4c21aec877254afb +34076c578e4c40058375ac7e7cbbb7793488d7544bde5a6d29cffae9eaf0bd69 +b717eb353a7151bb06bd5ef2a38259798a5a6c9a684b377c0d72c932d52db0d2 +c9e86fd712ab9efd0eede6c36f24f2209605c401a3ca9bd28ff0959ffa480ff4 +a0eba22ff723e4fb4699beb0eb10c3f8e52022bb2ba2541941582667a784f397 +3cff0191832b3eb363c6977661032b8728ac754db575f3504749f70c8b021518 +90c8010c0da0503726f4aff60c240e8fd733fe37c74ce40a236e8c088c083dec +dd187a2c95515e54ea4ded8226dd9e8b217e936d4b41c767eed5d20da9615b32 +2193abab5fdf0a2c3ac1b35743e5dc9df9048557982b1d87296c2f82dccaa4c2 +3293ebfff03fb7f8f252ec7052793b3e01fb17cb526814d7b73ec1abf03d9769 +a18e3fd9d4ac55bfb534481780790b76fd92d947f3adabdc10d7ca73e59406ad +65481ce38557f64c5a23d1841b896923011af9d7c3b999772085d8da26122059 +ccd4972c484f9fb3e6319414b393d39b813ca2b603fa2f18926178f1fd33d22a +bcb5d561159b0bf186e52cadd6114791a9cb211c285118cf6550ba24a931dcf0 +d5c7bf30dc413918ab2f6404e51d612b50094de3dd281db363d254e17fb7b889 +cb5b906db3b604789ab7c7cd9922e879b1d7a5292990a7667fc1332d71e01be8 +95be5d17f05d662243c7e3088fab828dff19c60b61f1b413e38891b5c0125648 +59db561729c92db0aaca99d8309b18f0789a09429059c57f4aaf4d39c60e4866 +a01944c0adee288eedc7a3a3abdca9275720d1b3da4233c91a4ff6f1ad4b8eb4 +ef4954da9bc9e0c48f049baa0fb35815c66d644d3bb340872928802611b73c24 +397f3fe32125811c8891a8a4c454aa2ef649d12d9c285310e0177e0400d6cead +27bb940f9ec37b7717c3668683ea1de7e6fa950a5df69c6acc537864062cb948 +435d769f1673dfefffa71d9fc33c063c12f77ffe7a9ae14198a6623488ef0721 +93b48be6c45bfe6a1eb11d5cdf6ca9dd4bf4a2f0585365c690e57f83f7c0a80f +2e24520d10819e81809116c0948278b9a9de9bcf87b2cd06723c0d95480e5747 +f437531f4bd6fb9ed73f5072812f66dba6fbe10eed9b19ca8d16fc023ba44cfa +d17841f9bfd586f914e0d2b3336b4cdfe63c602fc06ff2d8dee6705955bb5b40 +7ae736aea9e77d00f679ed23049980872f1ca425b6ba0f35703f5d3d28cd7bfd +8ed8818703308374a6a0bf0411b8de186a8b9ae2c67a37e4d2a4048dab5228dc +53dd2bb2b269b1d220975d7ae8db6f17eefcba79d8b8d21100e528110bc6c3dc +147e8e2ae9a38c54dd105ba79b57816991c435f412e6deafa71724f00a1d0b68 +faf771589d6de7b07f48e0cfc509726d1015233a6d79ff1d290d40d3f1ad1dd9 +19a8b41646c625c840ccd98fa5856ebb7a36f778d9b920d7ad0357c13fb3235f +52e7e9eb1316c4fd0d692c6ef630edb722568d9eafc20ee3103ec21ec8ecc46c +c6cae184b121be328883aa1c0ef56ebe2eb0e4b7cf40cff3d0fd5cd2ca339dff +5560ce823f29fb7e3cd0cb47b16ed8bd72a2126f3276cf178bb0f1a2017dc12c +8a64aac7c26bc7f940e29410d516f4543a21b07f28625bbcbde727901f157a8f +7ee6d875847151cc685c1474012f5c92f25e8117c16b816bf3d99f3fbf844e71 +51e2f5d2b487a03399b3e263ffc722f6d4652ff11eb158327a2c94ebe007f9bd +fa6365221e676c846423d48cf1c945612bdddbafa91e7f76cb71174a48bcbcd7 +3330040298c4b93ad3dc7f7ab689d3c68daae2693482c746f3d16ab5fb291fcd +16c7dfc8b36b5105c35d65e23b7ae1f46fe78204f0e48dca991d94bd4cd0ff6f +b587386211746e1814daf38866e9293a890b47cbe47d6d0241d1a05db32f3947 +dcd22aae8d26a2c92aad8041372f86ad9a518b2b40d8f9a35e5afe82770ab8b7 +b1b2a2e2e456a7895fe9b3144ecc6f3dcb4804d21a6cf11e5f48c8f7d6e69e23 +cfed3dcbc7cade5410701d7dbb19297616419fee5ed72f6c4c302d4b6928e551 +7a810b9c7cbb33096cc68d509201879f24646bb6027b541be7013fae97ec91a2 +1161e2c49a2ab5f6ecc731da083842edab4d7a029cbace3af24dab6ef566228e +892062ec9ac9420ad0cf098f89bcd0e46f385fa52943c352c62341d5a1054e5c +5c8976d6085a43da60468e301e19f2c10dd0084143e377fb8f53b3a4ceeb0c83 +6f88ff44e180d46bb136fe75b2b2ebccc364260bd72ce07e935d65d2beea401e +2a3a12b6b1a9399b76b66fb16f57431e0a84813db0672d84c405bff5c06dfb1a +7cda4ab6974e13d88c631208a06ed15794469491547056e7929d543d05ef7f14 +a51f64728e444b0c6fcc06ff89a8289620160d82e36a477342b70ca1254e4792 +b3b0b5fd349c38dfaa19a3c306124d50079295bb7224ec8b8568c9a60f8063fb +4d49cb80175ed24bff8260e3361ac5227cf87a0d9d49f56366756991112e567e +a80ae3e6451f90184ec37082aed7eb7ffabaf3ea4cc8e9262a4c893da2e6531a +4fd9e46d3c448031f043b0fcb636084bd0284a20c57333c11a150ab595049323 +d0b9c535bc57dfbc7f32247a374412328f5119098c9e2a5182a47e8ea456a42a +bd3e53b3166a525cf6722aa07efff48901d63d851666ab149439f0a53fb5a45b +f816564244c03ff44292183533ba2251bc0b2b1048a02b270dc0d20fc731104e +176cdbd1dc8be38245cdc422ac0f96d8cf78f43343a3be655aa8b1fecbfc67e7 +aba66493f877b7437c84aadce69d46ad9d61a9b2cc484e0f0dc9376a857a8709 +39b695d5afcdb77049cde5a4ec726022d0f92d309cdbc7f6ac5e6b5630169dab +c70fe75da2048a6c5c6b75fa2017e8892c8cd4aa408452e0054c2a9e73d43e91 +67104adaff3f149a43da3deb46045f507b08768dad3587cb00a1ce8c185f874b +d66f45316bf9ba7cb47ee1a1a055a91c03c3d94128a82b5a7bad7e304f7baac6 +5d3ecca28b6624e745d728af83006891bfd39cc56e28af59ae3317501b450592 +bc6bdb032e8d5f319552bf281412e033b73644912eb30cec6010c152f36462f2 +5bca347b9ff899a593a7e9b96d6ad4b3ccb20e6a972a192428d4c5bdf79cc717 +97cc5d48a22981afa791078445b7873ba9f36a47d4e9124fb063506536bcf433 +d4f898d334548332e655f1430c5fd56161e78a98f8584de372f5036b7e02d712 +c0422bd413b89b831f41ef23d94dcec5db71061cffceb7c3f920a1a63d28cddc +fa742f11028226b3c6c9987ecbeb75e343c61837bed4597f4b2e8e130537bd60 +7eb0016b5c48efd3282e758fce1868ff5b302074cbd62af9856de3fb54996a3a +ecd8f0c6f0b20ac3b511321dce8f97d5e67643a9a63f7af293c863bfa4ec2c0f +a2c76aaffa828aa6643eee7f6408b6ea09e91037f30cf2c391f4c9d9cb5fc01a +5a012008b64c7e19ab795e24ec662cd3a931a98bfbb545be4489d7d5fe732cfd +c903cbcf2f600bcfaf858b0123a31c12f2abb98c17833876b152ee9efe354873 +b9c144acfdefcb99273276050fe43a140247a35b0994927aa2a1d7463ed69e08 +8881a303b6131e3183893e3d001f241809a990efd1c1ad7c3b419cc1644bcdb9 +a47e3a8d8fcf1f52865c4efee0079b840b82a95223193515b85b9102c7e3f0e8 +65f44580845f0fb5fbc16e339b66aa51779eb714a056e56afaf0ff6be5bce7e4 +754a553912486a7658a9015e1cd381969ffb9c6bc4aaf54ebb6b0051fc7eb362 +39941c8e0fbd44bb2fdba5dc229e9d659db1b44bf2688cc7b29eb0bc96f03f79 +fa0b953aa215ece923ef8a4030ce185073c30ed1dc8f6d6c005eace2a3642060 +b95a54b0a0b1980b1f4608b63f245b8ed7e640a9c3bffa3fc42449d9d5cad579 +e86a050e5c9aa8696c5e7c4521daf837f3213249848ad7f26da04aed56f8c543 +61b910f4e1c0e56e336894db76da6031e445f889c946e4c79c79b21c5c64cf8b +c88d06cce7614817e26c5d522a2c3d26048b964f93008d482af4f25638e190f5 +0d2775dbb1c4a4c077e3721df3e49bed7f8f642a6016963b6f58b8efd5ca7ff1 +1367b20a7019cd66c43738f84203abdc5b12ac2c0e9c8fdd15d1eefa86b464ea +d60127e71e62feb7394d5b99d465cca9022a4942f9e8f6bee849d655f6e52dbf +26188ced3107e70480cdc5e7eb3766fd734dc86f86f823c3e5c0bc0afc0707a1 +33663995ce61372981903adb5cef4df34a3b891cfb8c30ec92c4627b30078643 +14b9ef98e4acfbb87a6912b3559d58dfe7288402bfe33064f126a2da07b981ee +0dfe84cf8b2c72a67ec9c94039cba069c3ef2a24847a72d01a86145d0a97be64 +700effa830feccf46541278fdd3d35d082ce150c39d946362f3e5d23096d97a4 +76367bcccdb04e7ef9c608416adbae868f8800e645a80793bc0ce0e648a398b9 +268f697af3372197c8b33bd2760b0e75f7f38a6d94c4a52ce711c3ea21292bf3 +d48ccf0088c5781979bac62f072e2702529e43ff4bd63d94048a825882d6311d +dcdb6f2de1c3de60cab153c6f48f5b993ddae60211b154a5ef0fc2a0c3d18c90 +eca4e35b8796fe6d99734fff908735ee111af75af45b6665b82189dd3c835ffe +b13290cc59b25161908d29f385b517e85401222a94e1e5f139c5c00b72d5d4a0 +f4b1fc8dd6af78b00442b19ff2b9e8d87b0c33565ee49eda9a5e3d26b7c7c82a +ed94f162930ef2bd23fe4628085a3e7c41153fdd1a335b994b9bb10f6cfe6ef4 +2cb7dc8f3ce9d8458f560fdd41c6c189acc63a0c38e38cca94560924b4de1e59 +873896edc1b8d0170c7da1af5908497d4a48158498d8c23e49bc813eea34a1e7 +3aa06342b6f1c7914d73c1618d856a995cb51c407b2f6ab72f76ee037547279e +336fc3d223ede5cefd69b5c15d3972b2f06ffcba1dfb9a0c9f23c47f369de28b +662cdf284d112ce70934d22e2e00b5448905591d813e0ecba462d5edcebfac9d +415539241ac5e4f2ba785515a78b7b009b4cd20cccdfe4f5d8390f9765749f5f +d6e529814fb9d54e906bc323b160a29c65c60bdb47083a378727009feee85acd +ae66a691a76f7d58d031692215c3a82bfdb44cf3c52697006e8a5899a78aebea +ddd3b4c4c8139a0fe0ed2aafd845adaff7b26ef4c318a568dfd89b5060b20c4b +3c000b7cf8562fe82185dcbb58298decd616f6d9a0e879f1887c1605bc921f72 +d6b7eab7a44a883ba9f1687432c498eba28a7e650eb7b1d97ecc72c9fec17047 +7c62e050da13dcf5f62f26e62f4025ffeec90ea5ec51a2326f5c08bd1f7ebf97 +483279163ac37bf0795ae19865fbc560658c512240d5771ae5b8da18ebd3ef91 +e83fdf9d32e40ec1e633733ecff3ba66190f94f2b5338fb7d0be162ae41dcd46 +388bac55ae53b56e308c714a91ff676ae87f1e6a478075e259e9148d1b60774a +a1bee100372a7e29379ab244c8c4ba555f5d77c3d98f22e80f8a255a36f1faf0 +b2fa0ae59c61d33cd9e70d0259da5d93f19bfaf6b19df1dc35fc783b3939dc8e +d93572299348201b4549a05f316cad76edfa35467c4328df10e362b91aaa50a2 +ea7b859a5b11a9c5e9dd49a2968913619b57b8a2d6319ea4f102d8a9813d6c8c +3dc6de3091f3a4034078f15dbee8514a59e6eefbd5559192d86c7b55761afd5a +6e97279028aecc6d391feae0deac7cfe033e9e64339b0e581f5284bc81cf79b3 +eaf122baeee10655aca357383fd83d481291f37c90b8737d16d3416af742ba1e +db69f6a73f16aa2f7c122a2ba21c499818774d11141e740d8848ac15d0acd7d3 +f0acebb718fef48afec1dad102e364a5f4624ba04bc3d87fad0798bd45a99923 +abed715884d93590752b7f86a3c77b14543590eacf229f8f223b8e9a22eddc3f +a2907482fb537652ac3f6df21fa57cf44ed6b8ab79495771acbf4e99c1451507 +e949dba77ffca3820c50570d56e1d49fc4e9d89aac4824c370ce8833441f8b02 +d19753daa907205d4a7fdaa0fa130c296cb7b345916ffe0cdd15d92b7521e46c +93d5b6ad6c39e66d5d6a254bde88dfde11fc1e0a15ab05899434396d95dbd7aa +fbb7e1335de4a13915d33bac3f4da705d9ae891eda4d9ac185a9fe58c1ef7ebf +bd73a418c1e43ebb42938182c0d905e79506f642ec70961d096d6fb73be25805 +4064c56284f06ceca2a7afdbecb611a0f67e2e3ea52c186384f7713691c8174f +0bf24103dbab5900253a5f424e485c7c27723fb555d0e2c8af7660a5b914e044 +51d41fa45b17eae3f7815926098fb5346d527a7d7db1cbdba966bea36e6b963c +2cd8a9f509319cc9ba41eb6ac29832c8be17776779f8c2d6cedeac81005b91ba +fc8e4cba19744a4433c91319ecf73ac1a013554ca0ddb4eee09ea087fc9b2596 +5a9cade9dc4c9888ad0c9cb468b33bb95231646f016fe42b2b2749f77f6cfbb2 +d4b131c98712e2df5d1b024f9f22944fdaca133567d66fe5a87e734b958bd292 +4d97cfd2c3a13dbcac7a09abf9b153549d9b9c078813f407b9a9d8afe99711db +00edcbfbcfbb273d767e4c4334d9a91ae12522eaa15f54f84e2f9468b8e74bf5 +e74a1fbcba022550c63a64d85c5eb33d02ca6c0fd1f5a9aa46348a953aeb3396 +86a46ce0a13686927c03fdcb24ab3d98f1a4dbd8e6b991bcac96bde4603a9f1f +7859375319a6a850dd327d7d745fcfdbe437255a3566e9edd14af6c2e3444b1d +d9dbbcf70cbd7fc5b947266938c04c9f63938e88ca30e4d636aa9cfb2daa861c +3874cf2fdbc490e32bd6598ec696cd7d58da40bfcb6199d24f07b283b4a9a9cb +9b5426be43b4d0d67dfd8d88152fa14b531d522a9fac6cc79d2617993d95dca7 +d89b8d7efddf4c29e58cb0feb70ba74400b8be82c0499833253934c7edfe9e7a +90a004c4ee1c7e3dc31c24ad166cb1320da8e3bdd05afcda1492bc34bca43b5d +32d540f77fcf45d879a5646d4a4604397e37fcc732001d0af721d7aaf69952dd +ed912594fa9428a20fe0ae76e8401a9535f38e448f69d48bbd770f23ec075d69 +10bfd3604a1dc79f2a5159e8fb26b4a3eba3b50cc46e84e4ad657fdb0d254f0f +64e37824ed4c1efea12231df670dbc1847880cb64f7f3c382b88e183de261485 +f7e917e67ea381a568ce37212f8849df5cdd75575ebbcd7522e1dc3400a1d8e3 +8e09555799cbd6d3f488633a9e3bd4a2f6f180e1d27e0aa3949590cee53cfcb3 +3a14fe287e8021ab0777baa8859de5c21ed2fd8c3b818968bc26f5f9fd712eb9 +424c83d0ad28b76d1f5ba1678ca31925d49e2786356867ecca08a150a4591523 +964ce4589563210507493b74148ad80cb3c171e22f38e73a0aa59f13c839882a +536c00ba899d409a98480a1c7f82a44c36698d8ba5d0fb8d50771c0e91cea55b +836a946ae06e2f0c2275db32833265402264e2f6a1c8b896d5ebfc7c1872f2c0 +b4fcaa97210160403ae0ff1380d7e68251ef7c25e0a66a312fbad992aa1311b3 +61cc5afdc82f982d7343b8b7909c6c7171f568eeac8bbf8b43dde0d928e81c86 +ba3bf4549e255adf55d6e5909a01ce0b270f53169f9807cb9c7c70f3d3a569ba +8675d0f345f8e3a00a1c6ec27d5f83d275358830afdfd12cf23a0500e2512fb2 +faa9d333566da5a65dfae8ee515ae450ec5aaef7374ae1d598d5cbf677b85dc2 +e0394ae746b8c9554581c737d79b31048f4471d72972fd34bc2662a83bebbb32 +7d3e2c2bd7c65e68672dbd3ddc32bcc31b27812a1841c3edcecb723bbae371c6 +70f5dec75dbc9dc90e557280a836ce401105aafb64deb25e6ef6396da68183aa +a39e207a4ed29a41d9be11cfd888c1e7c1c5f869ec0272c7be8c85703721101b +0d41921b6ce168b781b1c745dedc1b8fb3f8fa027b0c2f63aaef59bb3c485c1b +c773e6c0672bd48bcec83042cad9b3058b14f14051906960602293261be27514 +bbfc3b41fcfaccf05d7eaed0f50b3f9d85d8bc79288b474094ae92dbec3b7870 +d16c92d667fb2074d176928ec7bcf3939f665b774762ea69b989ee8c8334f20e +3451189600c26df2e3a2453057dcf2562cd28a8d04b101ef004990d09afbf7bb +f0bc3b20218d3270e0a3e3446ed7ddfbac2c37c5bf8eddc74c008b170d912bf6 +b1da8b9377005a6b6fcfbff04d0250a74b93a1437ca0a7cf497637106c239017 +160bc50eeefc55e12d6c3d65261c238e00b0bdd7a7c0cab8d1e3902ac8d22a11 +a7ed80dc0dd04ac63ccb08399b92abe56b4cb2b29b2bf5bcc4e7ed008bb99881 +c74036842e45e41debec5cd4c652d37ddfea9049fa439747e6b700f7baba635a +ed47282e91ce7eb743571d533b7eb9d09f0c70081dfe408e503f14a0e117196e +c1e7960f5bd60a1f5f076e31c6ca28c9ce51061d4bdcf5e35beb3622e3424529 +ddead48eebdafef6d30c02dbdd5f1b5c00bb52266a8ac0819fd60371053ba1bb +80a8954a4eb7464618ff70369083068f1b60f059ba217291b6585d12f9046aa5 +e66dd926f9d802e694ce1dcd909ecfc14b5f3f44c4f73a0efd3e1422a747a308 +06ead9d72deb9fcc1a33617fd94ce9cf6e31b027b86937d0dc58b350a3230d24 +2596131192677c84137f034d015613e65e04fce2fad699826a666ec8e1f758c0 +f6fea6d199c6b3fdb6b81ebf80fba48ee1192e0731eb1b6f439f654fe7f419f7 +618e1e00dbcc0dfbbd1897678a9e4a6078273233229035c98b0e1fb4f4ba5102 +91d44e807c37ba07dbfac535c9714fde3de3114776dc82e28f7906c342ed5688 +44c2f06a45de22c2704f3b8c6293626fb9a018026a9bf7f688dd2c25a6f35845 +fc3bf34ada6e71c93249a8575cb6753fa9d7d8a2b10f4b0979aa234326185387 +63a8a532543e427ac650c67aec94fd5f67a697d93baeb2c8d1fcd83f04de01be +37e4b8d966f5d91818b80bba52c34e80897521bbf46172c89247c257c77be91a +39c8e4b4eeb5d54215def158219b0111b7f9a6c3c5b32945a5da895ce74fecd1 +c89c2a3933fdc1183edfc2042594fb11d3f2ffdae852be0443f5c37765b3aa75 +2e94fb1a0ae436a38a5178023601e903851f015d1a74d1d132366af6ab2e78ff +5493e19ad35553ca6fe7dc51b6f5dd62f22058c35f2b0ec5755aea9722491f8e +6a7f5d3e855f56533fb9e5775fce5aeb0ed6af76c3e7b24eabc352548bfa2550 +c66dc44b2795ac40d1223b416c798cf1c3aa90a8b404bc4926b3bbdfc2c8a995 +823857a98bc528813437a0b892530fdcd05f1fd496340f528b8bd245a7cbb8e4 +a77482da0f6c2a00e492d878a13efdc2f280015a6864657ae3226ca00477cb3d +c5ba741aa7e4bd3a876c6d7100564be6f6a2de0613ead5f9926c2e4cf5acf5d6 +5035e2a79e286ad6fb4289ec577bec28f51a8bff37423f9f0751a79b91bee5ef +1e18ece169ed2723c9d2103b675e335641cfe424360ce2503ef49dd8d158b8fa +7c3d6bb8d1d0bdc607a08630a67be00625786626f6ffe698c3dd414215b56ef6 +756720a12c1c32fc363db28ae0e206181ea32fe554972e6bae5fa7bf89ea3c5f +85f8b274b9fde63c7251e43102fcf4aa7180ec3829c55040bbe511c619de5ca6 +95765172d5c832691f6c432be0397bc401e2e54ea1b847bd63c85c5c9f62cc5b +e1ddb4ed907938472ce6a6a3cab60495ad8d5967150732915fbb5ba40a8130f0 +5df637309f37d4249298cd57619452601dcbdb1ac7f022f6a024d7ef53c0eab2 +b00ec3212764ae73ab88d18806c1252d0ab508951bdfa2afb67b9d5a1460c11f +c24eb5ffe80440260d212923432ad3f3f9b67b58462a66e7313e5c886a046e34 +80a23e08048ff3c918f26194066e29c36841b547aa3e374c1bdea8c9802509e0 +e787ef0aa8a9955e1824d0ff95e294dddcb644a292e91e8f00109994cdf9681d +c84725604b266b8ad4b196791f2752662189ec0e9fd076ecd5233b3a436f39a0 +388be1ffb33d075e55a4683b9cbe917b06c1d18de8f08bc06df4a8946869355b +dff8bc9a240ed22bde34f932d90ad2994c7b001b55957b9dc7a7931d1a87e215 +367e5b424cb74545623d8aa9539b66803581c1746e463079f3b52fdad364eb68 +58d70b9835b140cd6db9ec95e50a64e4b88e88d2a79fc3cf7ffd469801bfac17 +1373ebfb52e32486416c387c27f0a455ae5023cf1259e691cf5b5b339a2ceba0 +9a2c556ad65734baef23d18acb009564a661f59e1e93fc163dbd1c0f2fe231a5 +8aa558be68f033d219b0736b42a0611fb15916f3058b3acb9f9fd35d81d6e1ac +665a358233c0aa23367ec3adbc777539cbd7bee88e68849bc91037670e8d9df2 +5402768f04b5fcf34fa8f2153c37ba7ef356b669b5cf4615b745d8b9968b6009 +bfa5ada490637faaa554106d24d4e755e4f9f3a9f52a1b15a61c35b8ecb983b8 +083af04f9fd3511fd8d36f2d822dbdf884c61627d81020a0acc19f5e36099daa +53b0d6d98d0394569fcc93833b89f87e115f5cc26317196ed78210afa8a5f0b4 +9abdf7ffd38a892bffcbf30064176ff3c7fb3030da4afeb5af90610abc321319 +020412a91fb03811741e1b0ba8a8c93e59161eb5b41f82bf41a5c21694c8373f +58e3d1dfba33a6c5665d8b73ed95c9566d67df8456b2f61c559b2e8d60c6e2d2 +f1c85d4eb1ee33dc4718a4f37e6a5b965ad32f8d16cad21d98ad189721a79aa5 +454249076a91c684fdda1a1eeff70dd07274b8c402b6a37012b89c0c6870537d +056fcea0c6fd79efd834fb29f8ca28c25c57de5123c540750972b2bb08311835 +c11e6a5bfa0c31b18ca3f44899a8e160d97715676ae211ae8ca83cecbc6bd654 +e1422aee98c12ed1fbfc834edb3229c7a693ae4e6c759bbf3cb496672469d856 +cf7da97eab3042ebc9bd3b645c1d314d3e7b38087a2b0e7f5aad5e880a4adb50 +e2819b638eb42a2cc2c3b84a27eee2959e51811af80b3abb38900e48a8bda718 +078a5402c724cb4080bad3657b1bab969e2f0a2a088fec1ad16c2f7100370b95 +62753c659fe32401787f51e1649274294d3886e7fdeed53adfc66efa195a546b +05bf288823b178a968a20f8af64667d75e3e8b1c492b571aef01e55623e33e9a +f88bef36a34d620fcc742244482747708491a1c56611abd75cd8964155f602bc +60b24f38121bf53748455bd660f17ad52eef19ef0d16eadaba48d5b4e0cb0422 +7229961f8c1d14cf17a7e88abcaefc3eb54fb656c105b2babbd90dd6ff7d44bf +9d29c6ccb09b5c8ef13515e6184d15939fc90aeb78b4e064e21e2d376dae6dd7 +3f4fb1442ba15e9161c62cc93acafcd55aa333ca496803927d4e40371cd7b5ea +665113de3b56993e991c966b7777e80c8e0b82dac778254d6d9b3b4c661db3d9 +f2cf96fbdc16a936912a0781cd61af375f314fd8933642fa12b970a75cb813b2 +7a2e900a742de7d1d762f780fa3d29637c1b7dbd66b7d4f7aea7a3f51a6510bd +8dcf5c4dc4b5ef5139a7f3f0f654588a4848e9d642676ea145d5df301ee491bd +4784e01170c4a5a4a0787f83db24931b5d9b761b1ef47302944b8e689d56316f +80cdfe37424c484c83c02ae707803169d1547cbebac170ef5779911878988333 +1577c0f514131c9f94914d942d0b4cc6d72a9d06c250e0454810862a0973ba63 +8ab9d4b424ed51d5abe3e39f0befae042437bf1acdd364d20d76e3737956a0c7 +e666ba52a889a52385496273bdce52e307440c4db4a70e7a6da7c655469d060d +4353f090bd41f70dbe4b30f33c00d8964f64029c41ccae18243551afdee211b8 +9744d966c63913a6714ee2b4d1b82fd0aa1e6d2b296da04b3377f9b621f2fa39 +0b23bfa275b1342f62e6dfc4e3ba85dac525ace7cc2c170157b32dd13ef9ab65 +63c62e6c44c45affa457d12f0a8fc23e1e0cabb5927e7584fc714d310d3a5c30 +71d204f98979405a0edb83f468d58f0cd82ce3d84857f928124b5d4d592c2dc9 +196a7b32a7b8ca9f3877a9d6463f1a4eebd736d02e543d2ca7675702e06a5c54 +08f5fa709feda49a9b7e202610ac9dda957eb65d5615d91c2fd66c35b88ebd5b +ed398fade31d7ab65cff138e211f9014ac86a994e58d20183908ffdb55f64da0 +39d1a1f86f28d18f9ecbdbe7f6abebb2ac41ac88e385c64eda6fb9f73c47c6fd +b29f0b4dd0595e5c7f76da3ec7b81da2a516031bb54ac9678eaf2c16999e5181 +1af80b3abb07354a786e339e812ab142a59004733178d3922de9a23ade1bb2d9 +23234fd2a2836d3c99f582778cb069c46ee8c14999748c93f7b5d0b607abd3ba +cc79739ba4bc945b8cc535ec56511c8b184569c7428ec82f5ee9766acd217037 +2b72cf351729da098cb6323a724db4561045f239731661d2ec26fd014f57bd27 +07948c03ede03875bff01c4972530cbb129359826e1081c9f2fccc0d9e6098c4 +4dd980b1988c77bb4e04962c501fd7f8c5d8cbf00e97b2020d75d1d73e4d19a4 +929f282565a130474ca0777cacbcf429f995873f54031469e3095e39976a6877 +92e3db78cde4e930213f64d8ada47874900a2fb611e18c45dbb8e219d44620e3 +151fd42a61da68301334c7c8883c800e7a851ef4072aae38076c4f11418443af +7e22c10fb99f32b8ef835156173e00f37a1457bec7c74fdf0af7f75fb1cd15ab +a72c0eea8ff66233b2bccb79ca66860a3154a16bd31283d0ebdac5fd5f54df28 +190388468f1a102a99b733781b7674dbcd9faa280416923e7331b6f407d8ae09 +5a380d8ca81de6dc066ebbbd1341553fdebfae0e60aaa229d6a80a419991e8ac +7585cd947f6e026f6d1abdc3ebf4280d3292948b1ad434f26b98a05fd19646d6 +88894412749bfd5c15d963696fb5b8490eb5d0eb4a72d15be972d115db0be268 +724bbc432e470a467971c3f18feddca78ec38e60c79fe265959e82fd986918c7 +ef5b7a72361ab3249272ffb6e55b5608dd6c0a4fb1b72b50430f230b2383d8ff +bef2b686cec585676616033e1a0c66287d6803376e5d8e689980c3a5bd5a7bc1 +ce993e47ffdeea6f94d8c562d4804034a3b9a910c4d567ba82af21e4fd778bde +ca490b1c5e4982fdebbe4ca4592da9e70d5fa99fc17ee11963b866f7f62efebf +e30cd690813542f4fd8a14b43ca849c323c8d67569d279406b31bc066e8a99b6 +284586fd6e7f5368bfca05466560952fabe47658cf67b93207b004a9e7995a8e +49c81472e2bbf23fdc86466a6151e797bf086f32282a9e55749f94f8977fac75 +e2aa9e4af7784c533f50c8f1eabb82f5c325f8b89604d635c05878ffd17e45c6 +5f71425cbd6df1354f76a48ccd20d009e6d7a866bfb654fa0b1f4c1003f96419 +b49b5fd675698911d745106d7bc1d14db6d182fc82602ce2ed91deed5a07e683 +36c1768e8e0a87e1e112fa37aca99b4d37768120930c71cbacf45b58f70f767b +3db154fd31061251ab484ce619129b2d5c13a76bd15cc92d68aff8773c65e212 +399c6d54cc6a5fc0b48ebb33b23b916421dfdf26d4e8afb814619dbb9dc67a07 +951192e58ffdbecc7bf82bfa10d37cff66f5b211da9b7424fdf504139e6e733a +b1179cb9b56cf570f63aba413cb12872ae76eeed4ae160f83c977282f7c9a692 +cafaa72a6d89a9adfbc498625cdcd53fe9fe591ee00a625b157321839eb85784 +775665453d8187cfe0aea8a671194ae185ca9db23537356c9061d934de5249f0 +2ac01055fb32f110ffba4560ba8bc94cbf657ba57ac8f524a2d01a8323326777 +b6ff3413220187834e45da6076051cd695b1d51ede7348cdf8e51b675ca293df +dd1101fc53db5d7f8de55ece38a55e5528cfb4e8266df99d41ae7db821903111 +bedd329b1237bf7468ffcb8f8ced0d4416b36f7b2bc0231aaa331bf2474f11f1 +3657a008f9279855854ebe123ef3918acf58530ff76553394ef3e72741e9fef6 +ef6aad2e58d4ec10614f041698e78bbef2456260e6842dab488d96d609f4c77a +02e18dd13549d77925abe02fa098e923baaa3c0565028522fd8e7c0cd85e15ab +18f37d4ef871b91a11b2b5de8f5faa21bd9d1d312d923964c2f608708aeb6301 +e31d028eeb41c46369ea39e99d0ace2a3739e5f8db16e86615c56eec5ca95f6f +4195b39efe02a7ea9a6e7941baf8332f224bb9ab9ecb4b0dcbfba8e084ec7279 +24a004938789150a479da66cac3b054d108019b4745b3ad8b87aba19b39d00a6 +104e04eee9b26af64e338bf34d109b12b79fe268ea224a827311479b3a3b527e +40e7e864ae56cec78bc5a487590e0178a8b6fc25654c60404661e09c1f82003e +eaff3a58c0c3730cb34415c85a5a1f18d71b96cbcefe4685609aad50c106edf0 +9cc002ebd9fedff5e401affb0047bad90130e144fbe267234390b70f21d8dd18 +c43340c360bbbac5e15a745ec971d3fc7a07d78d9414e37ab6a1f547d7630c8b +a657883d45e788c499157b37410934f73002f10e6183b696b1034248e449ba93 +9178ce2ae5249d4a4db91adf295fbf3bd72d201e90750a60d9224da50e2644dd +6904b958fee6400b27cef19671c51bdea071c494acfcd1cf8d85bafbe9b2c3a3 +f39d120303ecd5636e6ea61ebc8af0037be2789d8d885953687df1c7207589fc +62441bcb3e7b5fb34092d8f062aaaec579a29d0ee2eec0530eacab19356a0587 +d143aa46fd5f7748859fb088646edc3778ac9f8cde1da8684d62feede0ed12ba +3e4efd2f1f3702edbba6f881e40b91ffe0a10ffe7f52f14bf975509bb43b2516 +e05ec913fbd145e7a6efe70d770fcc43700e9585432f78e3cf0c98a8c68d738a +dec7a4b809014ed76cfb8fd1b12eb02ee8617f94d0f3a3bd273f0675c2371410 +42201b05d1d131af293d460105f728afba25e65d4f8aa3d1959fb4e6166b6ad8 +fc2d6d41f5b1d11143a7fead000e9f46c3a6c2610f013f39205e4dfaacbe7bc9 +dc534ca456f44f95ec4e573ddc053cc124499e20ef2ea5c4989a9fc053b48a87 +aa4618e403cebc2c398af7ecd2d4aadf65363842e27bc5d20f24ea8ed8bfb829 +506d5a1d0739cc7e5716d0581618a1125b87da79e086d52d030603da88493d4c +14d99bfe5a30e955c233d3aa98f4b447aab941f069dff47374825d012b053733 +922c16fcda14aba584899d2766f4b0dfb3b2bc505149aebbe63a9ff68df22cab +1beb9476ec1b69d1f036f3abf79799e6fab6a7fb7fe7f61878642b5a8fcd62d9 +1218e6e52585dfc3321798d4d27b147be6dcffc1bab7c372570c5608e0236f26 +2d9e81d2c11c06e453f40f8453e3a4df34fc0dc124108a9cf176d41f7e2675aa +030d9c9a0c3eee010e2e6b53416b07a07addc43e22aac8a78c89f687fcf10924 +2b8e323b666063e23de1fb405d213567807edc2edf7955f4ce43938afd21eba7 +0239d81517b14c34a320e62ce46f48b10e3b8f0d443cda27717a5a416dcf968e +93ccea00568c42b31dcc857ed537d1c32d4583ccacc21efbc9efd7cfcd22a88d +4594dc9c9cce5c6dbb68a6b6a86568712a79321a3ef48335fdfc2a3937447b89 +d43a2fb9e0ec41085c249c571af59b4822519aa496da159326458b5168d9312c +13ff0b9879a8c96dea99cdd10966071b12f2a3f75ae6b150bbd0e032f7a2393c +6afbc4ffc9acc38afe90606c4f9afb95b5c2aa160539126dbdb2ae9d61e5c4e0 +ce260ba60a5c289eca44c0898637888e1bbaff38a4ce83a342fb92c64ce086a8 +5e6b0048c4282631bf1d6a42dbebc647f77e63429b18cdc8e89b2d0ba8040ba2 +7fc47879bc4eec51e5ea8f4b5628929a0859483cfb2089660cc15ec5d9dc577d +6d69a076ed24e02e80b83f1444a1aaade36129cdd98f91697f0b28d53a56418e +ca65cd49ca8c49863a8f066ddc4ad208dedaf2e54da80f294cb0211a90340771 +aedef1185653f5a2f7925894404a9c12a50b6e8615c2e5f48de9f9270d79c70f +61599223c0a8e822d8c60c56fa46100f85e5ab43fd7dc58b8330563495317ef5 +8219cecbea2f11d8f24ce226b52fe0ac472069eba02e29655c20c272eadcc1c8 +18ca5a0e46eae3a5fe1f050fecaa2485899f8a53f4234baec7c38343552c1577 +10c72838c76b82bc6a323f1d8dc68ac54f8d468da99c828ded907e6f7c1e38cc +bfe55c46ed3c2676335891a0e3f0f3e660435607a996030008f28fdc34ec67da +c93e7062c6b46c6149ebdab9d8378aa7443fad6fa5fa52d76834aa04de524148 +e5db4023e4de3ca44d245b94d6d96b503c14abb03d7c2207f28439cb338120a4 +da8d30c55cc8976c25dc4affa410e8aa3749a6a08b7d37da55d8fe73f95d0b0d +3c6b302a09738b28b703c31c3912646b2b64bb6124ed529748dcd032b4832174 +38c51c3dd591f4651a22f9fb00c91124c84d8717c4313437c014da2e72b62f56 +22ead7a96d0daefe66dddf7cd9d4f77eb17845958bd97249a5896cfdd57c4d8f +24e3ce5dda5629409f881ab5e8498bbd473e61dd7160a5eb6e6b5f47c2e3de09 +3bc622e2d1aa235d4eb341ad4277c1d6261c77bdd27d14e8d0f5a226957906b5 +f6e86f1a72fef7d88a90bd711cec812ef92f08cef71eed903d8924f5493aabdd +94cce69e2d4b04f111c63557f460cff4702b46f2e49195eb4f749dd4fc67070c +e2770be237fc41a300600e8e4363dd2d57da17ebf287fff4b3247673b662c7e1 +eb74033ddbaef52f8a00c406e7b01875a54e2e41b9149cdcf919356aacb0d2b5 +88cbf5fd0088a65b789e51d2a0ac37f1c833d62f022eb47d0580e04932cf332b +b7c6220ef8791981944439bbdd9934007dd5fdac813cefffd522164d16727705 +7078e41788ae6450dde5753f39edc4bc21861024aef6145aafc70d0d3c7c509d +5662ea004699eba1876f6fcfaf1757ee7f580ad9c071ccd3d02bd445a8d2155e +8a1bf1b8663af3102b1fe47a14bf454b789ac0c5dfa3afd8a47c55a7f1590c2c +2f520cc3046555f35bf8a847041d54ef6babd4c91fc786336ead55c3e83bd9b2 +fb4b4a0e84184f0bd7130800760ea587157e08d5a2390f84359dae2b7ff1561d +94d8dbcb34c98db6b45d0a593e2b0cd398e1a96dfa93a7ae8e7774ad57cf2ca8 +1028349f8a5feb9652f811221368bdb34eaae8d5e2e7e16cdb6f64ce04c37ba2 +4589e43481d723051f163789334a5bc087f2796b96d58cef21d82d0372a919b7 +93d782bee7cd8e91e26166f2041e371464ed4cb6a73e08048ff3a596f4689f6a +7b09546d8984ff5931a5ad2c772eb59ba1386af0281de907561423ebbf7fae48 +225a4261359bb445959a50a34d4f6550a582d152a83066f90cd6d99029513b9b +ef7f182b22afc41fdc2824bbee4fe2c53afa59ed68c9c2873aceb7e4354dc0a4 +75c03dc0bfa5697b7327661cd4f1e61471c439365707afa1b73377bca188774d +a8135ce7279ee809f94a5de196b97dd70e89a152c11c57b88ef540ea1c083bfb +3c99faa22248c786e216dbfe8fc6d60b3f7a5e291ff0870c61485a051264e213 +58fc910521db6766bc77721fa8ee503e40efc848be05822ec37f4aef6486cebd +e693d839b7bb902efa75ada15cff2040d1ef45feb81f6f69010ecdcac215f5e5 +f11186cf3dbf369c11275a1874d4d8cda1e17565bf6b7a4f22e5f7452071b3d4 +14a1f17bb32ad088a7751101606c6881e9d2c1d72d88e05410df086d62936262 +5bdb1fc4d48bae24abe9a8c49238a194b009bd7049914897ef28879f14366e1a +9ddf1f3bf2d55eaee7676cdd6fb111eeed0b67dec4ab583f53030cdfaa800a71 +cdcfc5fd361dbca0ae02c754ce8de1a2dd4d19d8d91f338b4f4dade9a5f10f6e +6a0201c2a7a11ffa5bf843881b5fed41f778111cfbaf373806c1fe279a686b32 +a8ea253b2dd83d6af13c5111e1bf990300fb337672df16d47f9b988471775229 +337151a88011d68faa093c4439185ac1d4ab96c945a363cc9b599f1ea0b9a4c6 +6a53a7e5c49cd875f0565a693a5b99b4d70046545549e32e32173d1a33660de7 +a9104dc3cbaac08b6cd22095e7492aeb5ac369cdf9a5fca87d343af87d625d46 +b465d0fde1a5e425f6e6509808a775bf65510d64ba9f1fd4cf83dc244f637c05 +e108512d9ddc088f6fd41a4f4185e664cd906fb33fa0ccc4c3c0ce1d546fde4c +c06919304f2fdb24500aa01a61ba0c365f6ca1b57bec0795850c6bbd3eb63218 +9fd7c118689b7a17793ed9d2165a51d563a96bdd2ac062d0c25e055e13965af5 +c140014d039ee059075a208035a5e9acdaeabc61b08ea51802be6cb592cf1e8b +c276d2ce5f4ac5d914e8f8dbae3799372d0bb33ed94f8077bae807ef69a07758 +d442ffe74d01f6f960b8938140e83f1adffdf4f0f0393e73ed41bb2bf11bab8c +aeabd4f54fca2aa26bd5bc52dd3e4d5c598e3af226deb96c3efc96c479e0db19 +6bf1debfcc4bd8bf05cb0e3dc04be5b445881266b74eac4595198addeb53dc46 +16781a275a481f4768f607346db394fd23eefc63e946a4357e8da64ff14813af +0a06b51e6f9180a48cfe90f3c9b9eaf82823213d605e56359ccd898414fb088f +6a7c483928d5ecb72fd544a8cb46e832b97653efa1629c4890b90e02b9e54ab1 +ae990473adc54d7b687a9c559734574248005dc2f125d7ebe7040eb23f4927b4 +d376768793b666f7acf187b985fa099b8890cb17e211b67ebd09742f06b224ed +96a0c969d8bddf909afb02bb05cc66ac0a5bbc9b80cf09fd19611da7af1ca69b +87179d1def40bbce64ae68a52e41978fff34f91a2b4369f0edfcbb7749b042b0 +d9ac767cd80d57438fe5108b4536b72e6e5e504a6e5b4cf70ffadb19d502bcdb +e7e3e566d1269d0a9631776c4f5c52ec3c98d63f41fa32ef489b5b697e2e4998 +3da756a7791a3a036c258f59bb22ac004c821ade383830f0277cf580fb1e8972 +7c75a27af24910a338df6a4fb373c6622fbf818cd71a5e891d19aa95a0255968 +619f356d84f6b430bfda80012396a2ab3bf91ace171a6b3f6295fcb701f3573c +684f445ee96b38ca3b53db61954b4de9250c487181f548bf9b2a20d62bf61c23 +02769834fc84af37612595d6e57be1c80c38e5b757b99c3c073a490356ce8099 +ed09b5fdb9c9e1d9f9219033d200c9e5b31846f4c14ccaa679b3d7fe2fa688b3 +7229c69c984c5982933f0ef41765b1c1656e4fc98a2086ff68b910391aae365c +1d88447411145f885044a11f3e11110296d9a81793ad31310c1041fc79c337f0 +9d2f073d28ce537934b841c41bf677b24ba9826b6db142f36886f45162ec3679 +fd46d7a7c219182cc2e2760d8d2de2c975ba4d29ef94b65ecdb2bf1a75a8459d +5facd5dae80fef1ffa72b0824165f25e7a47b100e1aaa34192d3f017fe5f11a0 +a9bedea570c9ccf6f8d18f5ab47ec271e5dfe1d4280d24f76b471e2d1dda8313 +4e0d760ff6f5673ae87466ec2e66e7ee5aed7bbdc5ebe9c723ef0e0bb20159c0 +d41ab0a2f609a0066f627fdb132fabdc28d067a4fa8f313421d5096071b17e33 +3311d9e905a42d49d9c6c2e3a09e7afe91fecf4e1ad5e6acc6ad0c91a79d3046 +c9ce741f9b2796f2d021f8494804eccd7e256fab1a8623a014060f0b19b7154d +2aa1e772c9ca5c68b6247987d190cb0043a9d2ca7572bcb43a69503570b2a374 +3930210d268fa1b528ba3a2260e6363df7012857c411dd5e6dadf4286ce805a3 +f03295e3c3db0f81c6e4db5faaac574ee227f7b3c98f4b738c45c9bb39eaa1bd +17812d2cb45fcc54ac785af72420ba310e3267d97bef54c29315eff146b2867c +d300d8f6c0b943e2f206a3d14c9d8a9ab4358cfbcc9cdcfdbb9b2bde4aa8155b +69c929f12179006235dd1af1a906d9769978fd90e21b9e3d2369f21f4b9e78ec +41a67909a2de30cb2bd2c10d2b9a6020acad882d6ff778c4a6223899f1832b52 +a23ed654236c8e09543e2c6afbf03f4c1a150c0ec1563db17931b1304a8248f7 +76fa88792ec90a34d39f885c95af9ea39ee8e93f84a9e66785431a7a99a52bef +d1cfe2b871cbd391e6b3cee6461e42d6837aa46d632dc3c302f07bbf934244f9 +77ce851023a129fed5b480b3bf8321488939288de6d054a55ed01a97a9f6364f +7fec9ef87b9b49b1edbc3fc5e192c6d9aad582d2fb1ef161bc2ca9c421ad5bbe +33bd0828d5228cc9b4caa49632781511789186c3212437e72e4914d5fb17698c +74978dcb5f89b066b8804efad90b3bb8b7246d4943c71d54122c2a36d9f71f87 +c3c898cf272e017ee9e2cfa8a0c224da23a460a96133b13f7821119627b325b9 +bd2fa8f30977d85c690723bcfce51694bfe89439f2c39222bca6dd0c9215cd1d +6b9bdf9f912c470d204d2b7b5717e018e03417181fb10685d9eebe592ce5dd6b +626094a06dec5a89b7795d789519ae31f43763828d6075eb023983ff6fce4e21 +25d516de3b380f04c1f498b846d945a32664b61bab4c28e68ba4037a8e462be6 +8e5622372c5f8d56c2b6c0cac890918ba6995e1b03a4340c9ced6ebc875be611 +1f445f705f78cb117f3396f707d2736be5d32c58d98ba4d4f72a2bf05bd45271 +5f1da83969880e4b580539a3c06d4415e89ab8f17729bec04b961929834c9c2f +05967038a7100bb5812f618a084a8d137d8fba8c414a5a0fca217e8f4fc0e3f7 +0da232421dbe0a2fb47a0d078ee4b3b484356ad7889a942fe6b29b4dda5734c9 +70f668a614cba321a71810550a84678e71f43f845cc47b0f4b82418fdbe34234 +0a28f53cae7f2ac0bffc4a9b4a4448cbc7403594b9c1570d475837bcd6277aa7 +8983daeb3f31442d4a0cec8a41b362402b7ec3afe2cc8c4372db07cab32b44a6 +3a00389f097006b1b1f7187b745a628f60f64124e845e16a8114b1d6402d3898 +158ed0573ca935bfd23bad60da9c6fbc0b10117dd56304cb58f81de3fa0feace +1957bacedced8e8f626752cd755f067bcabfd234d4f551c684524a711a691fa5 +3be61de5319436e86688ef0f0b23fb1a8ade3a78a1348acdb47ca5c327305555 +156c24acc760602f133116649bcc5a413bf919a083c2dba88306dafa66f73382 +50ab5e70ffd8e298883c620d3a37a1dd532c193f7976051e8e2da980d5603ef4 +8bc2518775ff39b5390cb7994be69973e3fceea2a99046cca5d72a5a2e9fce56 +d1f5f31f9d05f4e95de8349a6645e936ce02825f55785d110c3843399c726129 +d7ef56bc39b65f4fe6bdadab905206bd305f034e6e64489b7d97da2d9831c988 +8a94cfa8ad0c0130154033bf82287160ad0340938a78cfa27aa291bf4c0a4b09 +1db4f3322e3f76e556fb16afafb55d9f90c0749636e71511102d3d2cc091e8a9 +bb0ab55707cd2fedca6151d279ca75d90940b3f8ccbff65982143af38d17090f +02f8d5b6b25e1c49ba918cb6f3f2b9befeb404f150e593162ab14e277ee0ccc8 +3fde67c7778195b795519556db688e4f76a9045e029886f60db89fecca97fc9c +23fa3c0ca5fefb0de6a923c715e90b8360b85a51dde11776fbc01323b578ef6d +86b76123e3c41a2e9e8470034c64783072e549ce2949d5c2bf6b0d42836a60ab +2b51621b608b2e22c16e6fd23a3288c8f721430b22043cf3b48a1c8a74e84aa3 +7a06514ad9f9a697328571e506d49ed1a7e1cdad6e1e9f3f41a99f84ed060d85 +41f56e88cbca3267e0d496857c103fca42fa3d4118396d494c82250c0273e939 +94a09f812dafa45efaaaa6194a234ee39eee66882798bfc41d24cc303f58a445 +5733943c10c0c10f6776b663d0f59286e2a127a906e8d7b2d55654b15bf58016 +0af11f67c20968d2b13139456385cf84430a425dfc6a48066a59f6a91ef3cf15 +b3c8e068b91892ac2218add4ddd8d201579d6ccf3664294bee67d3bbd0b2804c +5165e37d567a70de26860b8c13e90d280b0a79776ee6fe064343b1350094cf41 +a5dd65ae40fa25a4a579bd9fb74f47114cce0c04e6c7f6b044fba8509f456b57 +81142522088226d82a95cc38a8823092bd3d113a61f6439fd78f70d781b0193c +773a4c5810cd352d2febf25ec138f5af2e5ac51b4adb09fdbe4ea683922032ce +1b202d30876a59a3c0009139b87b6cf0c37ca07e0d585435986fe85a9bdf2743 +da27b85d5d1a37de840d7fc2e5d92609d65bab8192f88b758a6c631df196980c +2fdd706a2d8c28011699e7498aa1c14e47a7a2cbd54312a6c5943ac0a9a3f163 +47eb0d6a10f5ad603c080d9faf3571cd2335fe4d1c92c7315adc25f639a4f0ea +609e73035bc24bb5d44371f19a7fe7c497be059904606007ad153b59c64bcdba +e3a613c2787010cdc081df84ad9a44495d78f6440c9a7bc7395d04d776169c7f +1ef0b7621e2b440a8c533ee3660d35acc3b482d20b3515457173bbe7faa9751d +f1ab67fe48753834da25917b746ee6d2e30ec6062221241283d8c34787455db4 +541a04752313bf45c844a9ad0a29ae66356f4bef8fdec5741c19c0d2d7bdc699 +ccda2af082f28202f443a789e9b40bd6491e777a49a4be285d5f985583c502b1 +b2d9568e493bcc1498a90589e5981323234426e5769180d74a5bbe4358492875 +337845eea1381ac1be58745711667874a65ef86e367bf298a27b60319179294b +d2138bab5125b6171150ea426a6158164fd3390cb51f1fbdc930a2c1ff6dc802 +cfbfe3c6b6e34f8138a0880a098992b2824ffeb149d5b136543b326d30520063 +42f2a60e79e576769de0e65da6f65c88ce9fe8d7869b1687d0912c518d1da5e0 +5d4aae80fe32d8f25aeaaf53865e022590056983221fb8966bcf4ecabcc6df19 +8f03ef373007e80e224e1a45e03b957d39fdcbdefe916b32f9afc8a48c91b647 +6ef437aa7768588068977c97892eb1d4b5d1c9c9d49b6ed7e0573345ef971304 +119f725e0f88fc8794b0c9cc35c925e4db50726d82d4788bbf8bca83ec533f2e +7c19d7b153bf2d4cef8d5c7f46ed2f1b1a6ebc7f547a7ca5289a1fb0c7ea14a7 +34dfffd1543702cbb4b2b67e8cca16e54f971d115aae21019cae5e9b24defff9 +a7d4b50a44aa37015d68f3064f9c3185ec444cfa3af32aaaac7f4e6b2f71f7df +02ba34a4d51e2886a2517ce0b21ee84b1f877852b3d5932840c14d523576777a +114d80f83c8b730eb41447bf168c3a2d259851f545fdc15c5812c58c79c8cdd3 +f8e9eca6e2a41b53557beda8f889df48884d521add83e65e7ce4025c5187419f +cce51c7ee43dd66baf2409b4bcae3a94ad2d99227be325ab135c9b38a8a0bca6 +3bbd58e7f7b0d438e8b01e441786d8a5faa23f6b957dee7c01e2172b09c7fcdb +cebeb62ede3a36b13a3932a81f512c6ca6f69413a83ee30efb5513d2b5a6d15a +ed4eb95338d01879109e113515553402c994f32ec590e11f4c0845a6729bbb71 +de7d4893839da80f1d1200a2ea5ded805b3f8b8e4209fc74a16733993e910e8c +08c3aafa543c04d9ca3947cdba12a285466ae3cfeadb0cef83286da68a806e56 +62ec73ce7913223adf0c88deabfc3c5852ebec0b67c72a00650314724cf38bf1 +eb463820e829bce660104921f069bfadfe4e3454e9d6342abd2b8c5bef56f385 +f63c2e0d095687f04a2bde230fbc1beb95a19bc3ccb0e454967260b13313ac23 +048e48979aa0e379903fc3307a97aaa6933519318a68dde5bec8370956b11b07 +46a09198235e6a5d3a21ff337be92d5f291606cd3505ff41dfecef31c4d5804d +3f361277028148653bfe090a8a9322d797c2f7c094b7e302a7cb7d0a6aef8533 +4db7dc06c846cef50a24d5a463f461c23b24b171f964f4733c1c249401e791f5 +088b0eae5cf16bfb79d5dac5532a7814aea77e35c072e6b69e50fb18445a6130 +2b19b60969afdec3edbb0b66b914c3973d1836faf2ea01c65d75401a57bef394 +8de682b7edd50be4b7a946ade2f5221d6cfc4b00e94ac2b390067f2dc92161c1 +d73f7e580de3063d112fa8f27cd5d6d37ade4149ec5f8b8c3c9d88d13c235a7e +bd04cf1a2fafe65da20b949322b50dc78a485119775de3e5ee70ef714d598c27 +0b82d4e73697111d0fecc9552d8f5caa3439b7a52f5f445b27bba45c3606ac01 +0666c4bc2a39af44107750ac6bf3a8005dfa3248413d98b000bf5e55c3188ade +5287349a01041067cce0f841d6c2f828248fb96e6ffd770789c72369cf05a9dc +831e7b1b2c01bad69d465e83af7b3c291cc74fc5ca2e69c2060eac386abac347 +5d56028547656815f50f46a251020ff63ca64dc1fbeda490493a55b285d1407f +3cd803fb15906baf8bff8aef2eec3a738fa9c011ceb51805ec77ca1a4e8434f0 +9fb36b45e8d95afa830e6ce6ab350a4ca06c463444d4184b681df11e04e733d2 +9dffa1a3a68c502a29e05be5206c5d31c3f260f56b5f88901fb0aa8d7dfaa992 +4045686222cece6a868b664a533571b19fc3e1e69397f3d9d0a8bfa4b3df5a6d +40a52946b8bed057167e3c3ad3ee2305d7af4a16696b00bf5463e8fb76892a34 +8618ec3d153b3878c8bd72c21ab2c90ec88993b855e19bb7ca23e454415e9977 +3def574125029a9cf24540c6f61ae73ca96739ba838f1938627499014708f2e4 +1a00d397e7c67c74436dfbab39869975b9ad748b90abdbaaef6744b796696c19 +5b8b2d0651b163bca5a1a5b6188a29024ca97449dfc87a99ffa00f05c68c3906 +b2588be6003f1f35d16d2e4f52185b87a0195f64cce629f9ae188c4f21936b48 +01a34c69b570b67b4ab176b30f23e28f40b25da9d5f8b30d147c19dfdb1c5f3d +a8ab8fdd2c22d629fbea477afdb3c230f8488b6d24791f76a53ff2c21daf7ea9 +08ff9fccf55f0712fe16bf836032f104eb2c454cb4e2a3bc93493f40f9dc0c02 +c121cc50ec16ae11128b8f43202622a4eba117753eb656fec0e702fd1f680ce9 +1865b792896d48aef87f5bdfe71429e5963c74a77b24a036cade70ed655b4271 +2b5ba33ef9166444840df7a1e3b0f6c5675994239840ffa04dd8f4cc8b47d694 +e6d6d601d775c19bf504ee8ebacbee258841aee1dbdadb64cce7c026897a3ffd +e77b3e0043af31eb442ef7ed53dfcc969b726eff1f8a43c13c13131c6532ae0d +9e8703618ed8af07ca8468aefd047658ed08d6f647fa2809cbfd58519adfd791 +3f970d65a3f97f63152d9dbe9af502a2b6f012d2a81e32f8d8cffbd56e63a9b9 +e49a301b2c3699706088f94e7a3f11c7fbd215cfa8fcf44892fbe4f50062bf95 +38fbcacca34099f0370de74576d768f1f199c1457bda68473729f390543aeead +c9be3985cb5cb4e01febbfba7021d69b9d038a326a76fbd1aa2becd26f7979e5 +bfac785b8dbcd84cdc90993b553b694449c98ae3aaa0d1fc59953dd57598fc9e +2062cfe07d482e20f23e1b6b8f397b797656f38116853178b7b1fd8a78fb7071 +c433fbbd9ebe90897f52651aefeda189f61069f96d195ecc93692c417c9778f4 +0b23525ce5a0f6d29bdadd0abd029089b9c255201d7d829d12e138538dad4108 +1826ce5a43d78ec57f641000d191c9631106268f64ac7f4946fb8ca5599aa3a5 +017d03a837ed1c765bdfa4780f3375d95041526cb137250a0af36b9f9d055fb1 +98fa33d374baf553aa3bdccb1f4eff10f972228355144c7709a6cb45052ce6e2 +bc667623b47c220498a25caceb28dcabaee4ccfced7aa6c14b586a2e1c60a9d5 +4f4313885970d4f824c9807375d8a1b70c7b5fbc36eae7affc902c89e394a2c8 +39dc7e4d0c7faad918c768214e16a3e3b38e3a3bb382bce607968c8c970a7bd5 +91c6d5bf50341ea777a3d64538875fd65a714c881e73818c61a567d1ff2e4d78 +0b2851ec0a9abe877f26dc9b7269cea5585ee3997eb314a370724caca582830c +f1e1cb6e517528360930a1b81735adcf20d43511249f520bbacc0d94f7449d60 +b62c90d220e1b2f9afc749b9178829b5140c5471074b074b42ec5c28e600e8c3 +b596461665b2fa699f33ab8eefbb7932d383814a402748183cc59289b27f19bc +ac8b64cedee4bb5bdca401e1714cdfcc9c0329d35939a76229b77f629fea9551 +ce87384ab083011c4bfc8d5e3a1367b48ae5a964785b34827aa72c7b6bb4e8b0 +3c6990b6fa4060dd7bd1eca5e2b6efe3c8d9915940525d6d70ff2b2c8fe45128 +22d4cbd4490ea070ba7b8688aca9ad168394170b7169979d7c223fd1c67c02b8 +df0aca0cc03331885c384c8a573770e5ac87b01bbbb8ced847f7a4d68e5e655f +ea4920b32bdb79d3d7099d942f07c18b7829b1ec7d68d187c550081a4831ea95 +c3333e213aea8f45dc8aa8a5b7d925e05979cd2b0da0560be2367b9d1fc368e1 +837cfd77bece8538b26b9306e054fd86cddb668e58e487a772f89138c00cf8a8 +62b913e9ef8be9fb90cec90bd6a74c4e96f55b3a73be8f223eec41958313dd0c +b0094305eb85730ba87f6827d6a5238727030123fdf6566581105d0645454553 +0cdcb5069c9f1ced3cebb1f5944e44979f17bca52400c98932e6391d5cdfccfc +da6df93f86b6da1832f83683fbd0ff6b47ad7f2734fa4243520ed9da9521e922 +9fd4d1961d36f1fe1f0fff958d4a12caadb6de73b54ffc64d72c089090af3fd6 +24a712e60c9d7c95c030827d1da39227d5e6537f01e149f084451c7b1799dfdd +ec0fb4d8b3655240ee03ae14b08c1947da7a66465d5accc205e0d4c3a25ae300 +2a1f991a5efb7f592260e6576a26d168c568deb32919a5f47325044e7ea0959c +bc65907b731957685aae01d3fef2d9f87b3ab44cbdf72f161ce92240734b3018 +ca6c963aa5b29402b5f12d539672c4ea7bc1c66ab6104625d97f41e65abbedc7 +5d3df3802f9c2101b4cd6fc7e559873b88e8dd54309c8f53dd2d6cedf292b366 +2fffd38681bdc5936dfec644cf6b7a7e415bfd7fb9de469266927e5b82ef3e7f +011aa4d70ca53c6e71e460a7be3fa42d9307ffa701ebe91baa7875816e1901a8 +15e3ba35c3b4cb00a6c87b98eed8d8095740ec71d3c00f8b578daa88b3f33dcf +5bb6635f1b2ea62eb9abe181dff47374824dfefcafeab400020191e74671a097 +91a6757c880d4dd5a7e3da51241876415d9f70c689c804b6e9ab5b2b87f332b7 +c0e2c3bf5b2246ef438ed81ff8f7808859632ee8fa4458eae295eeeb9cfc7b03 +0c0b906d4805f9d33a39a3dea89ff2eb56db4c254579c92ee37286385a5c67e2 +0a1399a73ad6921b46082428bd84de18cf92fc9f8058b7bb3c193a4a50b34403 +358600d3d3251a543a6bd9ad3c5db4138dc043876387bc1f55d919fb8c35cc11 +cd707aa89a7618ff67f427c74998a6e75a84f261a2030710ce94325020dd8814 +91384f4c83ea17fbb58f73630613552a6e9a905a98206c8adc56b67419f996d4 +1da159cf2d8695507ee04fb958ef554e30d482cd8f214478062d4fa026f86b13 +3dbeb81c957e43ae99142d2b9eee13712878f5ade9912228bea38b1d42a835f6 +45f056ab9b40681d736ba72a9b4b5ce2743e92931676d8556000d32d259e163f +ac90b30944a2cf1c52a236b4d71a1b2c0c8d45fcbfe447c732b9efa9d3e103c0 +381211c00da6df127d5f57aae449b9699466cb369b996898306722d85f8c24de +e5ec2018a7a4042b07178fd55632305cd5bcc0467dfbcd5ecdbfc9e494dd5a65 +8327ef45f0ee3d232622646f56d7764398dd5d01e92f5aa4fbb11d95cfa277d8 +1c0d5a15007cde0aebd5436103be6833beac9fca1eba100724eff0924dbf1569 +97f7c080f05ba7eb68e201f6bbea8541a94973855b800cdb7ef6079de238b758 +e465e27c2efa56dc98ed8e4c2861e2ec8df3f2e919678ba369890d15b8002fc3 +546a3ff1def38e2694941a702ae77e16fa2e55442de9248110a8739e58cf4b76 +664897bbbe30c2b6d172b2604da84c60746a7339c7971a83d516ea4302785c02 +e508a35efeec0b61a42caba94b28bec74f53e66a9a54bbef4ea1171472e34bd1 +dd2072f460b24283c8217d6bdf8ab34210c08cba89a7d761df442ca147effc4b +4c041cac1774eca35d106b2026d71615b4279207039ecc03b0404dcaaa7d61e9 +d18ef74eb9bdc614225238ec4ba8ae417be9a6386ad0327dcefeb5a25412bf36 +e6ece299be240192d182508a51c1c1ec7ff65096f0f6219f25b8d07d67aaa3ef +d4bb00475135483905e87aadb826a889cfe5fd3af57466b0cbcb91c397cfb9ac +f17bf93c4bd1547c6b196cee7741726321a55aadd02e6677872f6685af9d0030 +f1c331a926b9c42ea8b6832bca8ac9c607a73b527da6c9a2fbd289d781dfb35d +7c5a053f8f91248f1c3ffd96a1a5813ceade13599db1b3ce32f5bc57f0335693 +c8d4c405b6f9a956e704e6e99163ef2f0b6787f0bff18623dbc1158e34006608 +70434bcc19164b41d499feb2b26fbbbe4020728e4882a6a123a8d78bd1f298d0 +5249ad33d6111b4a9c6f3ed2fc7b5a552b79af79a0ff935775823729936d3083 +b7b93a0b15ddcd84581e28b75451682eb6bf9d3c8ace9b275a510cd6561058a8 +8406173d4128c3cc60170d911246294f6c6f8e71a8de8c587e84d44b78e8ee6d +b68a4e4dcb14d73b6d3b35f2d8c3aaddcd0967e570516ed9387382f78e741c05 +1093aa322dd6b0a42cdaa10e510ae3905d0542513d348ed98c4c9e01e0505f52 +2ee0b4658e51a433252f9d10cc18232783d58f88997634ecbf89a2124a89754a +56a4b88de81815b3a17fa42e5b229f80aae7b8559459a773d408141928619cf0 +f56cee08f05f8748a201573013e41c6f6bfbfd740759e512a1e48cc4da24da1f +aa24672d4164234b31c631da10260e2e9e788bc2289501b083e926d63152b46e +6821383d6065e28d61d7a6b57b7d9859289dd3a2327d3251ff65c72ba121d0bc +81b726e38ec1a2e9f2abd4827a6ff5d19f3b58ab955a609a97f221fbf793aead +e245e3164f2824210a5b97912b0a71694c3cafbf60e0af983b31ae30b4b9a41a +aae396d6433db119aaa6a174e02941a4209e3a7ec58581701021c3af19b12925 +4e16cfcbc2977089ec85258501494eeee8e21a4729fdab90efb334fd2ae0300f +ee893650e27238444c5a8c0511712d6c00afaa55b83a258a691177384a7f2d7e +17da838132d47c18a528098888bb160762d1d93660de8de402282c4df7492ce8 +920d1ac9e9886e4d9a1302739890fe2c95eb37f9dfe73ac4fc51c4b0dcb1ef45 +d1dba50df66f32c1b2e03e2bbdf0b151424eb2a5479dc085a84ff7940ecd5651 +7480a4e7653edccf6a147d8af6da9977aa7871708f6dbc0125ed0e4eb6a2aba3 +656018e05f90831ec7d00a9fded05da231c00b95779b0cb9780d9fe96b1dbbd2 +291d7eed562204c11393602fd2d90ddc31d438b420720b5e19a7a760773107b7 +8e2c1aa72e2e1fc16ea9474e7167ae6be661e6d0f37f3beab24d3f9ccace3dad +be68fe29e086a62b2882eed800451f432db02614da4d1b7440d2c8aead012aac +e32f90080f444b368755d49dc24b05e0c48ef3fdf57fd112166685773c138ee2 +36cee78ae6d93130e97e8e633688ceada23fe3aef575af02d5bd3c2c5bdbfae0 +7c83cb2710fab57f4fbbf57a8be81415c1abe8b6318db53dcb71e8850511af89 +4d43b842cae1e9b4f3db6304d45d99fdb452ebf0ca76c1d7592f1c9eac61f785 +c775c0cd72c883b0088cc2cea72367337a0af42b233da8324b02b660cebe5970 +ca1858217a3d140556d5894be895249f04a2fe9a03cd39eea05ddcfa0c757fe5 +0122410c80274e6fabeeec6c0f8181718ee6e673229a0a0ac2cb4414da14c4d8 +757e44d32207fa9f01cb6a4f04a6a67c38b219d1425dede228ba157b4d1ef96b +e16bdb889e8c9527a0fc4cdb2fd6aca296d7c06daf3f259f0ad74fd806c047ff +0250339e1c1d650d8867ef37c6c42cf7f930fa6027445692ed00f0be90a79ada +9de99a986f81117165404bc82cd33a64c1778eefaa123c3581454a8334ec0529 +4cee91dc0226be0dd6e8a229199a069ed36d5b76ec66fcf363d749ce886fcfad +d6cb008f76f0298be337c8eef13a24ef7c3d774010e2e4a7acc429d8c0da7a32 +f8bb44aa9389d4f594be75a2f764f9cdab9011a3c65a3555a9509f81c27dd091 +221ea30ec6ed8449368a5d4ffd302fe809f3ce67f4738e96ad29d93e265921ce +45622608522273b64bc36454a7a2d3ebd334aa8acf9e4d4ffa863ec25819e7ab +2ed613933fc57a4afbd0811d4829d2bd9802885735ccfb251ef38766b436deb5 +359278fc0067aa17cb27310c52cb5ac59802aab49029ecda9dd1e02696d4fd20 +75becc63dca6908d1ff00efce86d5ee281baa70f62e3738ae4f054bc027829f0 +5a57e15b9326df9fc56ff8c040daa752a0399db4d265f221103192fca2b3c88b +a6d90659c0d85556e58c473dcf3a1f851b4a1c96cbb48971e1cbcadbde7b6799 +ed6b2d77eac67a7776eb7c571f6dc43ce0697f4392e75978b289965920cf17a0 +d78aeec7c733c885ee89ab9061094d0d01022bef4839951faf991876c26e5e42 +9eb7e5a57de0da10b61ce825a06d33df1989ef3a93b83130219f933ce36e4b0d +1f626265306898140b6d6f4e4a253cc3c6e27304b975767a38127a0b8d906f60 +53d097e7a588648e71fff1fd9415ac7d7141abfb33086171868fde663f6a0aec +ac7c8f8e8cadf5827ce72fd49d319ca5985cbd50341c30967084b5428cb488c4 +859b000c3f0cd1019267d9ac317e02cfd4f7d4480309e7f6850bce35c850155e +7cb5f93160d33fafb4383ad3924d0d665647865b5b9835519ce1ae14cd4d26a9 +c46f889407d0d984d2a3e63cf6aca920262df305ed31d3d1a965c20422fa870c +d860c3ec7d3b5966678c238c0e4f69daaca76fc006201072facd2873aa30db95 +626cf97cd33eb47950b2b831040be0691f451765f57824ff493c3d06133744c2 +9fbea2172f3097881cf406da9cccef1b6be9ada1909886ad58edb99228972dd4 +240898cd356432c333673b8902ae243686912f45ee6bde468bd3e8b09448ec5f +00d7a9213628fd6743f0cb028707ffe5e5b8a8a24e83c3750d68c0e465b820b6 +30d209d39da1f548eb22aa88609136aabfd98026bdc4582bcbe7cbc50deabf90 +49d4737e44f1f899062386edfecd5dded3a743db71a61ebd8a81ffda6470612f +7cdf827924bb4e7e75e6c91dde90e698b319d6fe6fd982955eb99424e0f26aa9 +3acf642ee1c9ffcebbdcb6102f9ba206238cfc64d68036129817a65a175327fc +f34c379fa002c5a2b9112d5b9064ecd77912987e28883259a6ec9f2c2741a84a +03830b31693492ea5286ee18a52af05b41a6c379b6c850b5cb4d31f60a6e519e +981c22680db193fb72d365f0260abf3389832ab1d78759c1482eb1ffae6d8c4f +20676bac1407720c6d3cb33d0b19106c6f3059afa85f3c782918708dbf809228 +81552754d6fa2c7ab482e703d664aa495805292274adcd64e7696a5d096ee928 +9e350c8294d7a1645354674e66213f18553a72fbeb7fca3647ebb5828f5a452e +03941d4cb822ef0839254516c2e6fa668006bee04122ab89d1e958b57b98f0e8 +ef8839dda01dd884e0bca9cecd0a9d6a037f5731c7048b488f8e972884904692 +c0a558358d736a25b7eeaf608f9c85ce45bfb13fdb0011164c50f82513f8fa5f +0a53330cfa24ca4c59c50813974c2307480a47c25044b2bd1360df7c82f2f482 +9fdcd0581ae31fdae1e36d59ed2a6b8cdc97f005d32333e27d1dd49444176a4c +71887d2757d1034f27dc74793ddcdb0d97806e9e16328509c760801174dced00 +316084e04d488626ca71a824c2e1f36c7b325a3f1446b21d465b8870f7a6b05c +ec4c2a996db293a754d49a6ec448b31cbcafe353209ead320bc8d963432888ef +1ccfc29e46c0c7c8e2849ffb6bb680f5016670b639bb411a399c63371fd36c6b +079077160bd539d0f253eb437d3c3f8bd522a05632db51872cc2b74cf505da34 +eda8b3039e636f2b8e9dd82951380a5e5e8bc776e996e50938b8f9c5a470f366 +e26e719646a3cf2e362a95f8ff6776cf5edbda555846f284c75874399d211240 +33cc43062237e479d024a7c34c6310b81f3a299a148c0510b78ef9d01a2c0db6 +151c80d7978a93409e2c7e01417bd898fc2d091a4f258e777f5c18dfc432cff3 +7a13005c10deba3b25411d93b6426cf9c1e25d3eaed39f8f7d1c17f8ff23bc9f +47dd0674ce0ffd60e12c1d406587cf6ecc678220fcba0ed870e0be75768362c1 +2b8158c19cc70560a058e53b83b19560ecf18d0acb4316b7061a9d9dac63fa9d +ee3a0da5f7cbc2addf7ae5310aa833ea1f45b97e7698558f73f952baf03ec25c +ae370256a1f81578d360814dcf29b12764f88ceb7ec3358e923f781bfa4f632f +de9414f7b98ea0b063536770f3fb4ecec21a68caed7fc7c85b9abf613b94ea8b +94f49a2c22e23233d65d4d16e4e6cf2c317da20e8f2307d4b4c654ca9d215479 +9cb625b53cb49947961f81ed2ca5fdb4d64f97edec759265788cfc48333de518 +fa274828bdc27394e4a0888925d2d9270716c89f82c2bc569be497f7ce930924 +b4f16ceca99254efc0965a3eabd78da5a16cd9f8d581cb7106ec2e9058b2c9b6 +7550555c837e57fcb453174208c072f26c717b88ef55bc13bc3188e8f768aa6d +11026d3b69f0628cdca2c2155df354f24d2af4c9941b0172acd73cf9c7f973a5 +394aebd41728178dbcd55e73a998df39cfb66a287c0288e8e0e0816ce5ec98a6 +804b2d1ce83f2e31a17d32d47033ed9549b0b0119df7e2736bc89a21ff725695 +018ff19d096d87e8b310b9c0884d4f8fedfb889538c9911d4e3fd53aa570492c +98a5f5a822886c60b8b2a72e775d33d0509a4b63e016cff3b2c767a6d39143ba +995cdd4aa4a8c4de041c27343cd57715fbb6d48a46238c18d79ecbb2548c0374 +b9af808dcdbab805c520b63b30aa66a4cdae35e4b71b45c3a2db55c34c2aa879 +29218f60b74af83e44b1ab43906a3a54a34d85891573c594d3ae52fcb548d177 +296b52fe2253195f97c568894e8678583165010db416012acfe3083431175563 +6d1dc919105faa02f9ca5878a719aa7f0719a4ea81ce7bbc5c2af1ce73a5b403 +c12ddffcb317a401a4e12e3a3168a04ed036f04b973093605d8d4a9be6bd4cf8 +6a8b57b37633a1fe2791b281f40c018bb53ca08a467735377ddecdcedb939d8a +38f757b77970cbf6f174b6a6c60da653e3e3366ad55890e78f61d293c4f96e4f +f03dd48b2b23f06b3dcedce3c624eae1497e5d65eaf1723447d2f0ece09c8f60 +df0976b17c95dd43edb503237218d7a36346d08b285ed0f288fffe09ddb03cb8 +d2d76449dd1d40db1d11992055f5494f9b8137e4c918a33446a616f12f5e0683 +a4979daa9b97d3acb1fdac75242e1c3f2bad66e3dc8a9203333e48376a6ee721 +a86b34087389370ce971a7057d608e93eb4d7989f487c874418fe9a58bedad1b +622192bd5f8e012b1d1942a6d65bff9cf5af14cd6e4cced7379a77cad8221dd4 +06adf2beaf7b32155da0b6b22a92adaa95d206ecf5a7704c4760d14d70b7c268 +4812a0ea07f20c02a797cecd44bc22e147df1c10d51c221e0c2161633616da82 +53ab9a727305515f5e287f7ec56f540f1e7e7d9142811123b84df2cfe7124789 +447d50bfafffde6ee2d7f206996b2fc896978a06628c983f5e33335b20a20fe1 +a71f01634e917ebd7996da19287755e9f9eaa0efdd7a12934da4849121e0f52b +da07c25468a7cc24e792f5d8b37443a72e2e50c655bd80a7badd47e4fffabc67 +7d7c4190824f88b63c0606e93ec889184c70e88f92dc556e7e71239bbd733af3 +0d781cd85b03ff796bfcc24e7ace070db05149982338665b57ada0e7c2b80d27 +a64bbf46940f28865292f05f249a1b0d3891efcd184f32f85bd96a2623c5329c +c59686103b6593dcf33a6b77e263167dca4a067874724d57efe3786f97349854 +809d3c8ddfd04d3942877f5def5aa3fb5d8be234abe999704cc133dcb3fdaf1e +889f6d43cd4fc7fb570460f7ae4c3b2de650b6d9e8caf3c6a338394a68bae1b8 +ab46be4452b9709240803db075bcaf0a5c36008ca4d8080cbae6adf1de652b8a +72d6f9b1bd1628eddab2c1b1f28bb144f9cf7fa7f86613b5b0e13d3f870954d7 +6e358c7841733c90d28f8ca3b045bb494392d36a1b2c9da9fa354c0909fabe20 +b9335158f0258d231301e9ae5a2217e566b520bc87583a5d67d5b1b9b0a999d3 +dbb824d88fc6510e065329ebdeeb33e7e7ee38ab4c9afcf46b089f6489287a22 +59a1137f6f31978958e1c425c2b8aa54e8808d12fda962c912c44092646d2fc3 +cee8190baaa232d539f9b453aa07d1e0527e6493d97b970017bec1413409110d +3709d1a7faa79f1f07757be5d05718b09cf1fd0fab0a442ca9d14483d95767d8 +d8538f13c198e4072c332b3e0002a3a77c014a1682a5b113eeb65155e5a0b464 +1fb6d589313a2e56709e1be53e8acff66fb138e8f18bcc6b684457c16aca8a02 +d063a19b8b2849205dc873ff1febbccd7778f5948e8f974d85f74ee9845716b7 +d431708eb918eff9ab80be8ccae06fa58caa0c57f6c3b0c4f24fb07aaf81da87 +e12ddb61435e564ecb3b74759374e8e08d98c011bfccfc824f1a7d9df9d83fb2 +cb3a4136415297410035b6c824bcfd9b01f7d6f19f065bfba1eee8d560045dd2 +c552badbfd6b03ba6293d12b01985eb156c61033bbfd2553c4f96a77559061c5 +8e9e0d7737316fc1a1b4fadfc662ef1caf4aec6c2231d50cd7583f94af423b18 +ab4b9dbff979c200181921d84a63e4e722bcba97e42f78170f9441d0001dc280 +451cdc1104dcbb65df237553e3baeee3c69153ced25001e6fb970e6072ac27c0 +fb99138c0c63a107c9ee8e9fe1de42e534180dd9ab1a5c2d4f4a5cfd47711c73 +f55ca3cbd2e074c1ba4700ba73d237113e9f1908836c5a334c157b903113a9d3 +5ddb5608d0efcd863b973fc55017d106e68bc4fba6eb3129259854d59da2b47f +e82b837e5c9b44ef7f279c0f6c0ffaceb7f48a72245216e5ce316a09983455a5 +089114d310a111a4b11da77a68c5e965265504cffefded03b1dcde16d3c3f940 +ebee6cea1616cf132b0658baf0bae5d3cd6043a8bb2f071df65f1e5f16eb0e7f +84411556a2a7e5fcdf6b692c3dbb9d9fb6c063a2ff8eadde118501b4edb0e647 +324860b5a4402ebee015b663eb8ea6fcc0ea91b97eea89545ae93c5e3cd5548f +c83f754e3ce0ca0703c2a0f35e0343d137a499aba617f83d46c7b7c0597fa84e +1e544dd77afd9cc36558449edd033fd4e7dbeb57071cf624c109ed1ebaad04c3 +15eef5bb0b004895834dbf6b867198688c9b4117909aef484930e8a31602452f +c799fbebacbe7b75d1ac37f6afc8c32313db3c8e4d64ee504632c76654e984a3 +882762b78b8791e6e46e974ddbf7ab4d048076aded03b6071f373aab006e89d3 +87dc28db2580559d957e2a1626b1b936a869da79be30d451f42e583f0d9feb53 +14a59195da976d1b6f42472a9cd34834e3cc6656cfed7a4f56a00f721967c384 +d664d6a48781058652094ebd87350c6a3a4692526053edc59963e0c5623d1df4 +0a0579224fccfc98730df4e1e0ba9b258bbbbe9d2b4c1db9c33e2a4311080da6 +bab0e4044ace3f56fb92c99e3cd0229c4cd9c1cc03c1f1ee32e772ba7cddeb6f +4057a68a458414611bc2eb218d824189818cb4a95cde2fb9a6700d412b3503f9 +8ddba098f014da81df3344748d1229fbf801c1e2316d95ed9559ea16c898ce9f +64f4e41fc35748e1efc299c26dc3b42c26123c330b9c8cb7e001da5de642e6fa +c44c19f97b20e47ecaa5263bee98690f122326556c5cb69e9a21286c3e462332 +e10721f7747d3425cc204d4b4f514501e14840aae43fb523b89e8b2abebea979 +c6762a89e4546531afff98c36cd30a38d13fc19116873917684fd3043c3446f3 +7c6c5a36ed36eb3900bcda089778c671d6711ccb2f7a7373aa6f519b27e7ac73 +581ea404ef17adf8c92a1f8e9edeb0201b3a48866584806e667d7eabc955e19c +2abfd1bff1f71289b2d8f694937e965bcfd6de56844f0e5fc980efc777f50f18 +9cf4b2d7c0fed84513f215845aff1bf3e4250aec7d7c19158978110a81d73f44 +92da75ed640441da004cce30d28826514e409baf6d41f7661c4668016d9fa019 +380a21444e969a6aeb6ad3cb2341d0287e2782a409675295227fa2ade601e1ee +33dadbbaed9ea5f0715a88f5390868706ae6b5ec4473c15e65ff58e9c8117106 +c83ca1b91001e741eca076cf0cda6d9e44de4f8dc762175f422e12382dec63df +164388ffb614abd40924ff4f6ed0e57cb451b320136c34ad9e3462ad884e4472 +7fe5f7d5c6e55997355cfcdf375f3ceb4913f23d7873731d77435e78deb10d07 +d0afc29c261ab66f2b5d1ebebf36e96b536218e85de4211b5be3bfbbf0c359ff +3207f6d35ee4738be6233e4fab21002039fe208f10fdde73d0ed01e117a69c8e +056a048757242b698bc4567f0684c8437d5d391fe2d95ca241f09d573654fe1c +cf138ac60ffbdbeb15f975f8b1fa3dff83f552e27844ae3f44c4a874feb1ba98 +5237293ef7cd143d83dd6ba9cd08cd0dfd63d3cf8b5536dc9d65ea582b2b5a1e +852778730e3a0ef6853d3126dd7ab94bc3cb8c41f60c82aac4d82223296fecfa +e01714eee59cc4f75ca5bc0eb875f8a4c9a6d499c9a7e1cc470987404dc820bb +c610db9470c0153995c2ac7cfdd334174b91923efcf4de1f3543d1e9971dac29 +a6a67169daf36b910780d691201638783401bd49010122d7456c7d8c1d301fc3 +243103d48e9fda5982b07f7300315a1abd3c84d7aa3088f00214f8c2b4ade1dc +d82061a23adb2d2112efdfc648dfb995ea7da854793df6cd6b3d6ed7a1120832 +220c9e43f05ba4af43913c5bf74c1d3340d4e11ab7d68f6e4b9f785034b64321 +1a1ff2fa676fd0cc367605ee99f1c7f4e618bdb26746cd879a8670c3506707b2 +b774104efb3596ce07ee5966c7a7bd06563f7856742b284bfbda52a2664e264a +5f781c5fd79ba767a19936fb3a0ef2072c998e1b916a2f2f663b4343afb8f168 +f2f00d3f5e1f583d20ba03f6f41a980d777c7c5fa5300d457830c48faf007548 +b642a7da2ce598799b042d03f4a1979cd0130662cd81511a5ac2866097352329 +a93cf79be94055616a889151b66b0054053822de0248141d4d3c0471f3ec95da +cc00eafbcf9010ff26f90c186fed7adcf4383297311c3dc317c5bde2da60ced0 +e6dfcce2f0b25d00b1f16f5884981a210483a1a4d7dbabe00baa1e2ddf541a8c +cddc9e051a54be5f4c2d0ffec3b83e931fb42456d49b12f4488627d3d3214c4f +876ac4ca7e3a4e09a13d09c0741c7511361ee2726a8973650c7af8175fb81882 +245d94df87618d1c17632cba8bf34c37f91681670dc816afef4ed278f63a9140 +9cdcda8ca64904523eda55908972827693cf36089dc580743a9eff42e3f793f3 +100bce00a6bfb089e595c736eac8444815aafae9654d9da0accfaddddf283629 +be4a00a9f6b464bd3b84bfe069761777f71c6fd398cef5b915b7729dc2ec8cae +b4ef063d47ec4ad9a0d8d8316a0deb5fe7982824c9f20ba43f907b56b124a2f1 +b3fe3d644e9a6f1c1979130b56a08e9a91d71de0458777c461a93fa416246373 +81d8a7b70639422ecc3841958dda5cc2ff32fb018f7127b24fc1f8b2a97f4eb8 +a5ace935d51e1f55c5ac8f2f3627efd76f052bb517560359f6e139080b19f328 +46f0bf11f1a5485f055151b5a802d3c9b042ce62e367446f59519a37dabeaf46 +9c7951ae6216be980b97c3106e1bc77516555ce6a82a25a2c348eb0078cf5a49 +ae48b25df34867cbe4318b2180a68f0d283ead9448f3a93cf5006c9fb4105c38 +e3ee2a6a0c2c68516379781abcf30bcdd3e29353c08cbfc7c71cc33080a37fdb +5eb3054341ff059d1b0adfd213644085ec8f1ec8e0ed033db2e69e5c0c479925 +1e7996a730640b1e16ac49341478ff1b73bfeab8dfcff54c4f10dd7f10d00db0 +16d2e673fe75ca7cdf656de1aece63bc018ce97c53335c140cf8b98927b869ca +cb5b1f6667d9df1d62544dcfcf12a15432e31efda2d8f4d96b73f6128e73d9dc +932d2babfc3220aa8c6319c9fb435470625f259104bac932b7cf05c222dee3d1 +70ac1627567417f41f4db1c7fc7b892d18b2c53f12995344466d44be856cd953 +49f4b959b4749d390f66bdc6ba0983b377af879fabbd02f1311b6d87b3a45075 +516e347a9bf9c30f0c22573d03294fe0bf1d86490dd5e0f1800e97aa4cd34328 +325d62c753ae10fbd5098d1659687f930da4f195b9e4b8616bec2fbd0b6c941b +09b03eaf23bba7544838473f2b5aede4a712d754a117591bf98f2a534057d7ea +4a99ce86c87ec2b12619223c8046f9e9947fc8ec69018cbe93dec5ea5ded8ec8 +56b1d03f7b57b6ca0d8894e7a26c721956a66df5d582c397beb57c6c120ea224 +a7d5acfbc6acd556f5a08d60e5c1a725fcf062c8755df1d6f22381564656446b +19bf6518fff2bb1e04aca06aa90cad4333f10b16f9585e5d19ee150da3931c8d +a05618f6e4e188b44059ac3758c930c3ae763267ceb422e1b4595802b374ecf3 +2576af6afccf151af304747e2405f609f04509f38f17dfadc6383ac24d18f5ae +f8eb5125446d4d9b0c67001c84edb4032df4bf86e8eef2c113617f3771c333fa +c9b4e8d10be191b4f0b62a21c839a52f75ab070ad8d7b6fa6fe538be4844841a +d1da0cf4948c018259ff3065dee62ea4a2a586fb09550b1e32ee006768065f6c +a62e69542a84ac74349e4682988f106f944da6132c49facfe3a71e78f15fc928 +ba3a391a2599b16fbd0624504f340a0854332c12215bc1a8638275f6bf3fc328 +8c9cbe92a0196afe73ce3ffe76b146842cffb10446e80edbc2675458f3143366 +803d716bc0254178f6a3412f9978dce95ef93dbbdce9dbb2e8495780a784dcae +7e01eb627febe7ba97e715d3439d55e3d86ed0764b2ebb4e09a1a44a4f187fb4 +dcf7edb3bdd615cf4d8a2ec78483f2c5f1480cb520f50c370ea1adaac5d105e3 +1299ddf4c84b810164d9bd90500b956ca1e9cc387ec7b697a220d124696fe475 +b963bed158dd5e6a466e0674ab8fe21413d2bfa7b890a2f75447bd75e18f582c +7b94f812009f9e8c842e68e3f4d8545ddcbd12b522adf6bef2db3d9c9e417d19 +ead754d89c81cc8355f3e74d9e83df3a5502027be852275d5a292e84fe0f3330 +f0430353f25f954b08c7798719e59d889814d0f3da68006c3866e1ce7d4e4c6d +1637a36b81c57f076c2a534139a3fbd06e814308f41d534a0b8efa70dd0a3334 +28b39be5842b7ba882ebcb7cf6e4e39a8ef9049304661a35067d684d4338def5 +0651c76971c635cc67118e8fc3e14b1f4593e855bdf58cab00bd96c4b9fa3fae +06e5f2f0453b9785067720fad4fa2bce85e75f4c7627ba4c9ff60264b7e3203c +b7ffebc5a030ddb3e9f73e43476cb14db814f6582ae10880bc2e05d2b45d6703 +fe5ff8fac1811faced4a873bce848c67f21dec481e5bfa16273b317ad724471d +d6c000d0567054afcaa249b29fe4868d3de14f3aec71a9a516534d7bcd5f520f +4b692be725813ad0686818ecff6583db9caca9217d917ef8e95b4f0f65b359a7 +bfad81b047489b5a27f25e9d0083f3857155bafde723af49d89d12d0ace5fc57 +55ecf06556351af4cbbfb31ced64e43741e00effd88c100126f6a9ea7059a29e +e676d797f763662be90baf5888d003a90e1b3d2972ce2d2692905474fc3ca302 +45dab5e679b2649139d087da1c52b573f720136584590951849ff1acf3fc3a8f +3598951f265080079accc4792c81607e426c7c94c49235defbf99c2ce7cd6f83 +f6500ba6df15e5db02a83f6fc92a707f46763f7cc3e061ed52833ea1d5e2c3a5 +e792d30003fc4442c2b2da5a7b6265ff74c554b66cd79bb3f8fe8f925be0b8b7 +5539a85ec4d8fdec57744f34ff9046971df2cb948efe784244567ba3ca7585c2 +d30e9227fc65efda488c6258472b8078e4d53cfbc75a54b2ae83ca83d25eae24 +62925ec4c6a8a71f1659c30a40c27a8002d5af1f808e305584a987659eaf20c9 +bb9149bc90071f272e1668f28d01cf753dee6184f401dedd303e41270d956b3e +e8b162458a0b5b36f1b44730faadb167a76a906e4d515640db77355c10ce489b +f531944e2af613ddf4e8bf63744073505c11b7a2391f3bbea1eca42415e72784 +67ac2104f88c79ef1adcdd9708241b6c666a0d9376fb23ba488b16ba96a4ac15 +828e8d286635b79c99bf768f8fce273e569f2f1c6c34be942b833a1fe05de68d +ef04afae2e78ad7d500d16d417b517459820a3056be375cdc94d51b97bbc360e +918e36d526c1bff1242103d6aee802457fe39deed5f80f274a4a76930ed84c41 +08eb6d4ebadad5d97f9e5226af8bffc0366b13cd443863ed1f3ac1a43656997a +1562b520c57ba0ce60b0470c6200fbb418b567b575b76cca63a371e05b44bacb +8fd22384616378260738256cb80100fff9d04375e79f8740923c4f87d02eb586 +40b9af5147a7f15a8278252473c6a757900ecffb061aae3ef8437bed0f443f99 +7e1d41fbd1ae69e08a4b72f3d82c0c9aa74558f2000cd23feab368fb9fe8adff +b1edec68788c845dca9093d157db4aff2385d94b615d680dd2463cae985d94c0 +bb1e898d1ba8a26e8fd4dd75fa1ff158032b42ece876dc01ef0af5e59889c9d3 +3867a41fbfbbacb9f2b182a9e88fb57f4abf2b4af4b76b262f8b04e60f41e64b +9b54b05972a8c8377db85c8c057c7770ef3859ba3e6d4317246b4d82efec05b1 +b06749c85bc5a915b8da1d3ebdcf13ce8f09427bd6687eacc75ea0a196d22616 +6dc5dd288539be39b3fc157e957c1ae0c61f682ffdfbecb384796e603b33e5bc +43a3ee16f854455cc1825a2fd49931dfbc0b76acd783b8d6cf57ffd909e44e0f +65f51296a1be58b28ab759390ffefd476cdd169ede92dfd5362137f2412f76e9 +ab8d3d7c0829a910aa7866ef6d7712fbda2223ee1c672aa42584d3e5dceb6ccb +e16755b381dd61e83c43ef2636c33c5e1a453bdb8f30f51074ffa5ff9b427639 +4bc83edb449f5dad51984e25e77062f4ef7981b0cbcb6b8f97e938aa6e8ebb92 +2d7f2c599d714d3732caaabe65994e20e56795579f7feaf5ccb5b1448b7cf3e4 +c59366d5e5af71390116e2d7c545523fd2ffecdb8e2a59766cd2a8720b3bb898 +063b54de265f82d6cc34e88bfd5707b1ad047686dbe9d434414b73ee4cb2bf32 +8882565e93a6434d7d5e40faefffd695ce65bcf0014232760e63389558ac39fc +23a295ed68fa43957428c359b5256c6b7cdf7f4bf4de03d6e24dab79d709a27a +0ca54d84fd365f67d85a0c641073971e12260b03c0d9f88bc45cdffa45bcf544 +77e564efee2b7d8b8fa4af0745b8f4eefb970e6072ac27c0fbcfff9444ea7126 +c7befb2dd02476f58123cbc23da0ab4c91c8839af709a516df1db6acbfa7874f +50f41b707e2edc5cc705a64f3d9b1cf30231d422b97acf6a37b9c5d6c0f6ba6b +0768ae1b907aa7e986fc583178c251b36bd3bb424c13bcb9cde19644bb8b40c7 +63d2c192798218322f63e82bd1176158ed074b7293e4178e9953766f19aa08b6 +1765dda1ec557de4d4841f98e10f53985d111edbf0e132dcfe12d8118ce78632 +b67ea99982fd3cf289ec0cc186ee5993acfa41113eb12f9457c01cf3a13714f0 +f3523eaf4229da65ef3bac70e6518dc954570033bec5bb9c49f2bdd52db14a0b +9b1dca8b489d0e9992d9c44720f9e9039b920a69b36e31a27f33f105bc700e1a +dbf42412f827b364c91bd06a57e22097806f615ff8cf20ddfab163f32351b638 +c39bd7b05d0fb10df6ae8bbbef8a47870af4198ffa6f35859a308513bb3cd6e2 +32e50206aaae2f5e14d5bc6b8ff3f64a9497ebf7566ef04ff1394d1997ccf7b8 +31629e685294fc9cb7468a919ccecd64048c60a44e217e775fec9d31711d2ed4 +839a68a91e099d16e24b813817aac1c10e6aef41b6c616dafc4f6965eb4641ea +db27f46ac00e4aca80488665771724dac1fe2206506f09ec75885d5fa3129bbe +4e15f47090e9310c0d47835c5e697a634bea062a60c4dfc2d4e67bb8591149ee +30ee8c5d284d332f4d7058b1e21826ec6df07a1b12ced9b109af752cb4aca0d3 +b2f64eed115d963fc4356953a62dca58d03c6a1574eb46c2a902ef65c2d41e15 +677eedf8e0f92d99fe465d596ce0154785f623a6f21d0b293e211402870271b0 +a7669015f8fa46740fc7f171f42b1450e001190e0dec67a83f96e24ebd79d9cd +f8767571b35a891f9a7da04ecb6d0b0ef28bf4be1e1e6ecb634a3bcf8d48f797 +89fef27a51d3da06742a93f5367ba9dd87932d6f41fdcdebc7313673a427f172 +b142a59879ec5a115ba6e50da31c0c65cc88b2c012f14e7acdcd39aa96f58b3d +8feef0df2d568a41874b0ba77aa07ceb12fb6113698279479d15b5798d065431 +22d252e11d1a8ad35a267b8f9699f36c87e5f9e84f931f1fea9d9226de70a6e7 +e8503681d81dfc236d06bb2599f896cfb97ed5d287f452c7bfdc04b6c25bcd40 +5624a580f4e3ceab7d7e13768cb014bf82e1988b458a1d98f1e28ca698e5e108 +7be4a8f26c3a25035c6ca7c176215877b2ba1e812d79a37eb3914f2eb5ea4414 +7c3f38cac536f3a8d5f7f9a17e6008373c54669e00c937771e8d6ba2bd833648 +8f5b9b61fca0099ab4d8acc4b5df4a5dc685fdbc90a6cbe881cd4fb561e8ec6a +c76c3a42146a5dc2ce7f6dc221d0717138f03e7c5a93ed07cf7620975f4fc4dc +5ae665540f85b795e42b15df5b82644f6e817c831087e2f7b1a49eedec62a9ab +6b6fef18ff94e1e1f9f60c445ae93afbcbccf496255b1b64433e445b8eee247a +18d7e43f90e084b0728f70744f87313ff6fb2c7ac61f207abe55d9bf4f0551fb +12ab7d62e77d0eccee2ffae62392d6cd7f1b70d29046933384cea2e2c1428d33 +4a33ddac649ec5d4b7a65bcb483096a6ac1dd6408f48102e378cf71dd4c872cb +772c1eb0ca9c8535a757478b30fae38098b92d38a2972e3f765b8b302b74ead0 +b41dfd21601497bd746ebf9392bc35c358ff0debb36b6800d254a10214e0196b +eb8150a66c59e0926813c5189a777e924cb6ba0ff1c593c6405d5709e70af9aa +e553034680e3af6afca2327983165790a6be4850b378556b29f213a78ef91560 +82201faaf9cd64884a12b176e5941f4783bdd9c4ac23cd7b33aadc49d2f2ac11 +ed6b4196e3a1546f2723fa0cf4e74d51227237e5be8dbe5b61e2860100c8a212 +ae75d5fa0f3cf636ce9db565ae8503d426f7eabe413920d7a98c3fa47414ba75 +af6580df563f70c08422873e6ce8e1282a6058f87dcd2defb30e25bb3bea88ca +c4365dff510d9ea8e3c85967d70d39c035f3083c3624d7617bc5dac707f5b993 +78ccd3e91f5a94a67413515a21233f1b09a18acee0602287bd3a1031e169098c +6dda3771867c4b6035ee839a1547ac0532ddca75a8b778ae07ec9c917cfab4b0 +ff9298e54fff5c54b4ddf6e5c3c44c1cdf1acd48f7b70bf36fe1a8c675f957d8 +005836caf879933b4290dc7cae52900dd58897aee9f8d6d91270aacc08065815 +3753a34da04548780f70ba1ce29c1019f16d1193d94366b0dd071c323b4b65e8 +e0f8580ab8b9c1818fdf7b2a92a5dd7d4cdd005d5b902135f0410fee82cfe1d2 +44bcd29e599d6d5f95643bc960779083159e00905cd2fb3ac66d4bc2565c4aff +6b0ad51d1a051bf9212363f5508a98035af3c89748249af4b08253891fa1c26c +e2e47cc4c3585450162b3e94eae6efbf5314d1567e240179d642c50096fff099 +bfea2ed1d2a1aad5164ee7554deef672219fefc240f979ab9e97e746b65927d6 +ab034d96066e955a3c53b8e3f2f2271e977e6ab006293b2b3c1fd7f615eb76ee +faa64f082f68bbd8bd690d154cf62d48a7aac61f37d325295724dc0aad8edf92 +d24eac64a11d372d132434dbd70f34a67ecb0fb97dbdebae6d738446949de8a5 +de1f039f4b49c7d637acfeb002b56b1b97dc504ba5f00f18881454aae16f0793 +baf18badd0dfb6b218aacd7d1d878cd9c637729924184c546de16aa550e81741 +3218f217fd6fb7ea6145dc73ee00b0c0bc6a93123706333ff6bd82cc38aa848e +b014ed145236d5b8ef7905f9be3a98fafb89e811574779f482bb9b0cd4c8fbb3 +0f12457defd87f6576c0c37f542d5ed7dc35f09b1f382718c535893fb1c2c5d1 +989a1245e44738cf6a9c49d80158796a90e98b706b03ae10da2d58a3cb79890c +0d45d554667aaf0b110deab7535656ee3995dc28b34af6796c52dd0fd682b048 +7dc06a27282d141cc02bb880a0a87756faf56972e53257af8ae9c362121b0d93 +0b8321683cf50c57a463600936c43bfb65396235837910fcc1a0bcb79c57f721 +c3cfbfc40643583d680b3162e12794979c6c593f9c9525060cbc2b77505977c2 +a88b40bd2e25d8aba89801a09ba7aa50c401647e65c89ac200f072231039f7d1 +962b7fd0104e04636114cb84e7317310b590245703e54b37781e473265d5db82 +a19fc83b9725f1aee25ef915815b3d3399de9ece699d2c54c2a39fe2408e3f2b +84010a6ce7dc04d192ac308a3209dc0ddaee51a502f198b2f74913c2fb6cfdf1 +b39c7051b7a2b2c374cd33463d784da35f96e0298cfd1950c4f2fd7a64050e10 +98c07c3f8d4f6631b7aa1a0456825db870ccd2b8187a48dc6aca0cc86d5c1cd9 +1c062ae412283578268bb9241946644186bb61a71cb80fec8ecdbc2c1254d4f7 +cc02660552a8c46871b574714d9bfe53e7ad6315bf022fc769eee9988e7b8a06 +64d6c44e3642b9d06632ee37449b26d733f6201d862d7a4137142d7fafe95f3c +1f63107ef0d183f69922c2927c9b244ef4efb28c9b1648423d03039806ce157e +ae5bd445ca51f3eecb05f104ec9eefd3bf76a37bd23494768306f143f1170177 +2ecb2abbc0ff27ee68face57b720c0724e1afb2ad4405d35ce79fa406102cb93 +d110fe7c707781904e41a48fc4ecd9819cd5cbee4e606a88932172cbc37e1d66 +2f0f2ca2379f5c5a7f554c59ab6c151209972825a4b5fd4a20c77696427ea5ec +1d30765e4ba579742ee3c719a9d93c77908ad70394669d66321f1200679efce9 +7257b2f7c5b2a68c7d097c8fb900b415b490f386d9f6c439b3067893eaccb2a3 +c376da7e13b14bf196bc9940d0aec3d560c63b8497381bb16625ef73b1f4e71f +30fce3196c7643c0eb9683c4f311cb41f6825d736911b294117ecd759386db0b +97def1aa3a7e433b89a8d8c7d1ee8b89e6e6c8082d80e71bacab06ab48b188d8 +f27811d13c04c03967bee4322dde4b2eb76e58249a74397fcb632a3c69ca5021 +10aea31c1f57cc1c9ab15cc2c8e66ab3b9c59e23b06e08782c9217cf8f2c6459 +3b0cc08e7f6c75ee74701a47c9504d6bbf5d2b5468f7270783139ebc2c14de22 +661522d175e3a847aa72db59a991f005bc86622168bf57a3d28c2ae1cbc06ac1 +319c4b8195bb715501fbd26cae0827ff92058d7a228eec31fa0c6eb70554a256 +1fd9b21773a3f765255b6eb4d4379ab3f599c11479f5085cefd19bddbce533bb +9465f89e493a7ea66cdb039c2e85a0fd0aff5d7dd8f4fa0f618e248c837567a0 +9b72aadb2bf3ff6b9d4307e88c206ba9b75e0ac844848b5fd2a08d5f7c1848b6 +6e49bf533c94346902eae08ac41aba2836bec511d8bcac30986a18a8405c72cd +0f189c2ccbfce5dbbd09070f0f916ef76683855fed5982bf9b1760420eb45765 +994e8da3f7033a5963c244439a7ac157219fe0a7ccee82804f641591e6b66fe0 +2b0d55bf5f704a04dabc1d5bf63739e6cdff39415a5fc216a55479fa8e7e2647 +643e302eb4205dfed647b3b8b47ef2616df65784347d5677b52e9abc82c18666 +0b786335ac635e573aeffcf8224205d947b0ea67b353640237a63bd73510f828 +3816c87d8f12be5f998b727ae398e1fb4e46e7cabe627d8f6ed455edaff7d8e1 +05dc0203e7c407dc05aaf9b9df596313630f683d408400c6b41ea1b7e05c8471 +a22d583135a9df1ae41b0a2ccb4a739c2844730893585ea7586c580a0f66eb87 +7066491a6835c2b3141fc1dc23e1bb1d5427860a996ebf4efd3c092edc54710a +ec4da96ba61f0eaf6f0d5d9680bdeba2b6c5fe6d71c3ca7a425622135634cc68 +7aab3e9ca2bbe997e074d251c1e8daa885aad2c9322e6cc85031f9e205baf648 +d257f38b320a958e202ccad9dddeda59a8c0e4939aee0ee7fe1daa0acbeed8ee +111214437e6695f25b52f1386ed2b5904b2cfa095a8ee8f0ac2707239091fdf5 +ddada518e04bb44580ee924a8c38d681aa160378fc3c76290b21a9cc03f1850a +6a277de7ff51614e67043cbeebfbc2a473993b91bc7b31150ac22fecdc99dccf +eba2d8ecdf38f46dead509b780ebe45bd0879b68d9052fcd50e431f299412272 +79afa25fde7a63961c924ff02b0990b938e96683f82537c0073e42e58a49690f +369813992dc8049111536a76e1d1db712fbe9a9d353793e4b1e31b4e6c836a96 +e542d207c6987dea794d9fb2c23ce8d1cd9d1dc6b13222963320c0f3c5053323 +37744b297e3c1eadcee45dd8a0b62bafb7f6bf33c628e20f40c4aad75f19cc91 +c5832cc45aa9978c087ee415be15681e3abba579d8bf1f33c1208068a8150bd0 +deb3ce69a7cf00852a436a71f9c5065a3b262238910bb60fe4d08a6c74873628 +697c148fe67f1a59cc1e4f9d18d862fdd6bbffe395d9ac79686ecaf001cd9068 +2f6a838feed75ebcf706f01577fee2a437cf11cb392881cd9108223d71a95edf +ae83dea1f6bd87dd0240edeae67c7ee6ca99b569d15deb7cb52a2c768882fcd9 +846359dc48a34f9c93cf5058d60342b01feac20aaa60ec0973dc5e3af0198a84 +052c2beb9c53e6ac865ba4567e42dbdc69e888f6c1ab4eb7b547a41141578c9e +75647ad89fdc7c31b34a9ca6aeb332b3e6942b3c41775307a59a86275289dc84 +9430fc23784b0cac2a581e4389b16d17d83d685822d09e47113c3c03c45b90a8 +5de29e346636f864801b043d1a1bedbcc0c610144a6900d28ddeafd5533b5ffa +79058fa4ff48ce1c7c7ff32024f4e7aad75032ebf0b125466356f95158194a5f +5750c3022797f5d91e6ba6648c62b7e754fbd6a74b82f9671234020b78689f47 +638850f2e1a57bd3441c51716b6cea8d53a422ad81d7f35014709d2c960a6697 +0d7d8c00b63d97bf188004d78ba34a6f60309bea91c077335e09f72bfb662340 +156cee8710af1551e940719cf9f22d9a0ff51a0981301c4f1435450a0c9c16e0 +de8d669b759bf6796e6653a07b305df4c93e62dfb869c5c4439c79e1011f3676 +c8b71f6c0900ec9f5acaa83b12163a912b0448ac5adb76e29dee0ba832938f52 +895f878fce7bf9d3bdb7b16e41504dc90df6abbc31f2b9f50cf7edb363998de7 +3d77e142281b2d02067bef95da5e7429d4d16f41cfd94f76b139baa0b96576dc +08e6e8d6bef850f2c530003efa2a12fc493f1432ca635512bee93893be90dce9 +6c65ba7c3472585bf1d37e6c3eba0b9bc34a438fad5ea0799c1bdc674951fcbf +b5635d169110a70d9034cd19be6d7ee95a06e542968c21cd5427c8ace58f52cd +8769ad774a2e46c8e0d8ea342fc39c683072bb821fda38c1e3fe34bbb209eb21 +e4d9f44ff3b252dc0df3361cfd671749023b1504e167a3e72c2f38bf20ff58ee +ecc0bf2ffce73d51cc8ee71a43afaa6b5b91c8b27218f3287595ef75eb8c184d +5386918ac83903ff8eac18e55ef730abf6262f36b7e3a58a25ba0219cff270cf +eba11d973e4ac3b3f76a1cb0f6a3cbb03a8c17c92b89087347ec273db0035838 +7398603c291847da22ea02cd85cc438a9bf69cad8e6e1d44898d927d9e10eec4 +209c642383c700e644c9240259ca6ef8eef9c9a33337ca0f866850851e3e62be +aea1357ced843cca5d5494d30917b78454c78387b15185748a852a91f6f9a981 +c7de39732653ae16f28b7cc2d8feac6da414de43621608e2fd7b2855de0975ed +3e7ac410e6eedf48165310e4fb817a02800b9ce0be655e035174abfc073064af +0b999221ab0e169b1afca5642e139f482771e4fd1fca9c2c197c0262094e6a71 +a37ac0c0970d89e7220a1ef66bef84c959f444a0a7bd666935970748c0bd4670 +604614d617e8c54edcd7c0ed73912cc074629d0fdbef9fb6529b82385adc3cde +b0107b8b2ce9ac4c8b482ad14853f78be96e7b99c8c70ad7a0ebe802bdeeff5d +b2ed7e836651db037f2c345f63285157ddf3238fa19130790e7a603afdc693e6 +ef58cb564a063050abf1d44ab800d754d354256802068f0062ee06952e95904c +f3e456831a6c58214f9f48c507777e847a5408e7f1a4eb890dc97503718267b1 +45125ba0e28636d20caf4baaecc17c5545f1b11c73dcf7d1627b3abf6933ca21 +8db138a9dbd295818cce7b4931751c8eacffdf7110d9a37241b12b8906b6bd69 +6a8841a83b3ee2b85752e4cf927751c6cfdf7a7138a4aa5811a1c858e4b555c4 +05833d5ec60d25920de78fb347af37b50f1c3b2f7e087d059406f81ebce8746b +8ac13758aaac6ec1cedbac0477927a5bce0564c1517f6a20f140a868f1624e2b +20332bbb61fa5dca68c18a20bf9d1397cc0e991747ebecf1f6305c33aed5055b +bd1bfcf15007ecb49b61334d1e2d38e5ef24339fe6d66948846a55a88296d2cb +12f47df17c72af4370565e1f73a449a9b0d26c39eea04125fb9192141265a122 +449ff568a1f3654585dce47622ca0bac147715cb7a1275d02c1d083aad411878 +be64dc4da6ef276ea20697436faa00de144b11d2145a0a0280041e0618ceac52 +5039839261ee468bd1ab9a22a098f195d3853155740005473b0ed526751ad4d0 +d671313593340b36dac33b54bf78cc87256c6930a765f2fd927a3582343bc8f5 +8ec18900b67abd359ce7ef7eca1f1f9411943e057872f3386357300957e9e75a +314835045839468e1e5d41b890f7f83255c3584ecd26e2971367aeaa1d3cd22f +22121826d56aff35e356dab010747c2f46d46629a951159b6b69117fd548614f +ec9e7d0a917402628829460cdb6bc8ce3f93f96837c594eb29c63500866d9ddb +fe78d09876d3d2f8327c3318f96a1327691195afe12065448493411832ca1a1f +3b0d4a9593625d8da1b359398827da68a7824255446e6342364db03dff29c917 +e44486cef063382245d06d9fd5a36a5ef79a08f36a66409a2f63e9235a12fe2c +bc9bca58381b4d9cc7a6d79caad7d1b00cc6520836cf3794901295935bec1975 +8f473e0147da152eb2127f1d9da2500fc70be6811dad855d3a00ec44496a4338 +f89664ef47b5ae81fd8ac944448d1908345f3f0b448a028cae01e0e6c7c12e18 +30299a40196e5de461d5184efe63a568faffcf7c4272a37b8af0fd106dc94e7a +9a55c62a4ef9b8d29b5d85fd0e596bbb228fc20a84641700ab85b33fd420163a +deacc45055ffae165c50473f13119d6ce2d5ee143c52ce41260a22059b106529 +b87a8cc28917a38d5aa18029a96b3e095ef78730f4332c4f59eb02e686be85e0 +ddb57200449614b8209fdadf7ca82f4e8051a7baa6501270a3d1f00d99d552b6 +316010b7a51c23709b23849156adedc38379fe4be0ee796986674e2a73e34c7b +195eb533fd924a2cdf6e73c1a02de2b3e0ce5ff89ab08383fe39d880d4dee544 +3dbddad4fd25d3881d8d5fb4422635e72a9c237249ccca7f926e728de0d293f8 +f5fff6b9f13ff9343df8a1bc3663d7786cb6d520b2a81874a17ea112e5b8dc0a +b3b81ad49837767e7879ee03a82e7822c57e265be60d0f6b2789a3059b673da7 +5da7157f777cfdcd9f5c004ada55d8852952d8364c696e762dd8f449783f9290 +6b8f1c9817f5b3564c1fbd5f2ce6bdba25bad8a38b29dcc26938a7285577c391 +7b972d3fa1738737089433fedc6b6c11f2d9eac832727abff83342cd4f99e14d +25e7463585c1be15989a0a0bb377ac009fd8ca8a5172903fa64566b06e2003da +dafdd852a6937f9522a23711964b30d4fdbcff209d824491c0d0d46e22bde4b9 +4e33758ba1c3df8429ff69142e39d447d54caedd9e65ccd5a92015e979871f0b +9d88029dfb4c74f286d7711a1dfb1c40fc3b697f3fc8feb4ca281b0027d8988e +841a4a6ae8660c7c54d335322587693ba4fca91e55df91006a7626cfe30d331e +5b518d2110e317d71461d12d8a908028c0030dea4fe6ab488f213fbcb97dc979 +4a844abe241435ca55616ae41715df1eb11558fdf3a39e7b854ca99d1535bc87 +98ffe95ff41816bf1d903fd839badcc7ef963f825c7c18079fb521c2c0f2405d +397972e2038be57a51af173480e23b8b0959573029c386fbef6c0bf83a8ecf1c +f3d6e1f174fecc45ca6caab7c90211013b552c6f7aaf3e837a02a2c2be6b4cae +fd267fdc0c24da26d5ce30388a69280465886121614b029130325aefb656f38f +5b56a08c2c379a8dbaccfebdd2d3e5217f75db4d7b0cfb8952aa192248e4bad2 +545fd3cec2c0cabb48f25817a4dbb1b9a0733f0a220ce533665abddd39a39eee +9f4784cb26411c7862c644191fe63fa81dd9c69fb2c2f32d519ff145e5ff4ab6 +88a996b4e43c5289274aa0ce8b67bb95b9bd6ca6ba4e86505dea9dfa153e58fb +ce3acb84b1d5b156ffc84eb9ed8d86f5dd8db7ea1a44a70feff4d03541199760 +0246a0071be64ead64a82f6f370a4f9d39555622e8bc09f4360aac8442c64959 +544189deeea7d78b62953fc6c1813c23f77c72761e56ee70ecc3f07bf4b5ee44 +ed0a6a7dcd4dcebca9925d39d190cf815b0585c1dda5897842e7dbd44b9a93ca +9afb0344416c7e12f6a69bb9ec3a0a5ccd176839b24cf375c7b5aa63fb020ef3 +86d1a5467f5be498dd3dfc7041627ffc4b9ec0ae397c001a3f7703ca4ec8d27e +ea5c798083c4756cd0d4dbfae4eb389026f97ba04094c0ed317efca15ada576e +5315be4d6b84e91b8fc41b4ca765c508db57265a76dfed2ba23f2005ee3e1666 +f0f0ac085e4151f698661c4a69bea8061ea0d86db942164e18f51802ba4a4cc6 +2646865602d3d5bfab3dfd4a13d9127075dada545d9254dd39cad08661ee1891 +40da958aa1d7f9ffbc5d2bc6f8c13a54a4137bee3472955875df9643c71aaf89 +cc4d0b34313ad78fb100347e9a6ba236bffda2c9120f728f7f9dc24475885a7c +6d647b40e380ff8772532f649a0a8af8d5d577a75548cc53bd93b2d94975bd82 +6058f644a247ddb8af1bf9169b39afa10d810842992d9503e869439b08958f75 +f255cf86e4943cca9ff8190955c4bbe52a22db1d33b38a8ceb231f25fe67d7d7 +1451d378083f32232c5f1f46a654d87705fe42be37f24130ddffc294ffa72d63 +3bf863e3668310562dcf82853af99ab19d16e015a5c52f718dbf998e20316811 +988fbd4e96bb4532e180f9f76e7089f7d15ad1530ab7e3b6a833c4ff4ac9a86d +41c91a98c6f20c27d816b5cd07924e3dc3528f7cb3922500189f429ca8568af1 +fe89130ebd9c11860be49ad45643ec0d18993fdc9b0e50a166ff04b409a9bc3d +99215881c09d26949749cf7ca37b0b89457d3b392cb44aab689fd25ba7b5bad7 +06257de81cb1c50d2b283726b050d1ae03fa491189c8b9fc1b22b373dd70e86b +1d40de563ed4a3a80579255ef9dcddd6853c8a757957ce2907a0cec4e94fc5a5 +9641afbd3cde23d6a31dc99bf9180c35393e8e6fa092f5e0a5e215c618a6eb9d +421d9eb8087fc539daf2b707856d59c049b650c264105d2eaf3c5c383b8c9665 +7a53e3aca0f93395f70a078369facc3cfcc8b17367e6d88887b4297644309b12 +8f4116185b756509d9df731553beb42e51e78953a7d9fb81f5dc3a149de0adde +c7f7f517410f474c218cda7880bb53eb0b27d0e3903e1d50d641aaf4c510e03a +4a0862d2205572130f86502a4fac7ba66e5ded860eb07cfc0d90e908eb7c74b1 +334d1783a3111f249055e620b622a4600224a38ef5ce99fa6689aa9fdd5fa97a +f90e3c3d0b44a0090b840404686ad0825117bf9fa688c989597039238cb3bbec +a709d680b9277d87eeffffbc5c21e8b667f1c3830c6feec3046e70b3f46431e8 +0fd084aa78463ecb7e4dcc7b73c046236372f8701397244950dfded1274ef63a +74b45676af1f34b40a82def94255003583bb3845e92f656d0c553155016ad73c +21c9b41d25876b01e1592384222e6c8af08f3bce00c1785aaeaff39fac59771f +858c044ba0a298866bcd42fa82d6e2b1d947d922597892eb38dc8bf3cea0b556 +80d643f58644c80d55b64ed144a03f6a9b2b5471c685c8656f3c19756adbe22b +be33a8f9b37e9b3bcb84c13171abc2acfd73fe7f20a8f6ece9ad9de3c8a08e75 +670425356ddca1f26aa9afc9f31de830373c71213d2b84c29fe667ab899df5fb +9f0b5102556158112a095ba239a299b20056c981c17f2c06614a1a0862f084bb +f420bd958d1d458169124d68c5299d9b35464588e192386347aece5e2a48ba84 +43213219c87812647a9410d34cca55a0a62bbab770ca79b6959dead30f6b5451 +8a20a077406e39d2d126b7e13375104a1ed7239b95a9443b95dc24079d0f149b +08123838d5c21cb3e8d9fe656c5736306bdd4bb5c88393610947253ad725952e +7d9b776ebcb6617e74de8e9c62dae3e081078a04c492c4a35f303e0f600d7d34 +eb629dee4f5531f86916dfbbdd1fb9f6b1e385afd3dae0cb6c15f45ee49911ef +2a8e2ddc4c5e1570f512303d94907fd941bd7f7a053a42f990e7f25fb6f8d1ed +e7d401ea0e4d3405ef89d47416aa7d24dee907fcdd88cb2ab09ef07261f45f78 +733903e89215d7acd1df74ba26056f5c7d3d0ac61d2718d984c022179c98c658 +4405af27a3c9863f1c8278dbde150addbdd057d5e11587ca2ba42c1e6b422932 +6bd7314e190103af64a33794b3ed12d8023483e8d17ee4f8c0bbef5c9b78e2e4 +f350c487df51e966f985b5ee5da43991da55362f6326324c77ae53d320326ff6 +202a089c8d8aa68c588ad9c82768c1f889615ec5b6ac79f75d95641a500a499f +1b57a6758c9da836b7124af1d37ee04cf01478edecc008521831381f6225f593 +f371fd87ec832bc3bd853d579a20244c3030b0eb0db3191d900b654f1067b0e2 +d2a07232d032b264aeab347be9abd0d2a07b6caf85ecd57ec87ee34ea40733e0 +94dc88246eb7fe89c751326de8c008fd1b55e2cb07f3b6a08f7a0041540c7d68 +fbc4ece7a2d0184629adc0cfa77ac198901aa5a1479f1dc97a0b3ab87458e1fa +4704290fc5a744412454a2d3677d9d7565a97eee239a5c5f7eb94793899cfcd7 +2566835d9998e772fb3afd9673b3c74f4bbd339095f2f71c93458484bafe9741 +a1a65b3e15ca5045fbdfabec1723ebbd4e7ab85cdac37df2141af2095e0e16ec +bad6fe620d2e1b874c4e3bdc34f656e9604c6e33cfab4438324b8958c8a7528a +4404b2b8aec31bb0420887f4a6f3c3866e370b1466526937851f6851865b23f0 +0245a38682f68990351c12f34e63aa96d729828bab71327b29eb1a96f30c36f7 +65d4cfbe0769864f4a46f037d2798279f914b8b2ae86acf94385c79db5095b86 +d684a976dc1e662c6e02ce94e69fd20a9960c304626aba2a113766c5923dd7fd +fccbb999567520ff855248bf8377f01ef9dbd6ed1511581b3468d11e73ec622f +6dfc289cc17026fb10143d870b68e32e6f84d19567e177fd4a48a6f003591c1a +83fcd03148ba9f32e6ea26fb33e2b7626620acdca5b302caf98dc6cbe8f93d09 +a877d7cca4d52d75f4f39ce9a17aba04fea7707c097f5a8c50657ade42c5adc0 +76d6ecd980b068651e8d4c630827e0226343c57b39d782faa3f9004585cba68c +ece0430f332e4501d2ca668145020181263aec4a988db312995df391c9638619 +6ee6d1810a9731cdba8632772f844feb41e34e7d046c13f3346b1b4af62f6f8e +da0026e5b306830c0aaea5f3b91eadc7ff9108008fc1081e0371b08fea45ad38 +ea17df8a9d1b7194f1ae2819a2c1fc1b46fd054f5b98b84e4b221a7c50ccf1ba +c995d85664cf8646e2e5880d847f532736d4de8c9fdc2f91be71d89b062d2246 +ceeab03bfa0f8e5e3ca581e958a8ccea868216178925614309f2ccb1616c44b1 +bf772125753fae57762c8a617e6da4d716aa20a762316bd91bdd080a30cd8751 +7462a59f7a90200980e620811ae9cdb8903887effe20061f3558ab479f365a06 +2a8cb74720631f690dea945f6149a4e010e73ec5937c180fd71e68fdd9f4b101 +0ef804407a9b2a375a5d742ca4126b102496c02a6f0630a4ee91089a2beef12b +97f7a7ccf7c2c751aee789ea80cb91291eb2dfc2855fd792bc858a9a0df22e09 +19f5158f584771d9446bfd864fba50582ed52644eb80cbc73b37fe9f8e4f8ca8 +de234351e56df85ea853fc6bd27f5b4f0c1d45cab7dc0aaba49585f3d2e1086c +1f002a8a6585816270be2953a6e6bbe0accd129e201423582909b00d7bb2c73f +c2296a4769da723f979915a82363a457b814d97a2315dc448d3017681175b6d9 +2184936f9784d753644575d5ce4f499047871e30c84263722460ade708d0c2ba +e7998af8194e6d041ceccf6c7ed6d937322b860081a165bf69be1b47490453ff +0e2aa9f0c08c1856c53015152850b8cba83cb82ac6d21730ac9e00919e78f994 +0a14c2be0065b65351a4d130612afe42c09567c277dafd4e74bfef17c252ba7a +e0e8480f0e184c93e34552d4fffa5e427fde368d6b1583581858081613e9074b +a2d0ebc6965254a4d5dce59ca92a857873bda1575899839af87f456faba850e9 +16d06d3df6931f04330fb719a8cc91ecd28821bed1e993863cf9ea95d9e03c7c +b67490ae6a05e0ca47da8d6d7777ff553477a949fb16864ed0ced4613dcd5e73 +5517d0eeb3b86b5892efd3f91b7a1d9eb11ab7bb7feb32f54a1e63788f3a4854 +a4e16f8e81459838f341e5d288d25ec470c18c29f8e5d449bdd29e40244332a0 +4ad3233d92beb334520f1285aa1b11d8f844d33ffb74edeb98de1923c0ac07f1 +92b887d19a423ffdb409def765678047b774d040f771a6b7b675814b63011cf5 +0584368a865b6cfcb4b124d79d7283df63d601795bf5ef80b747d3dc23276610 +46cc26d90ecb0f3261d1750958bf19925e4962cd95d10824a47cf1406e8881ed +1bc5dee966ebb033a5af7a74d7183117b380fb848d4d5890faf6691e9bc3d0b8 +ee3edef892a29942544e1cc7bc2017ce7642c6eef265c916a011c4dc8fe47b45 +3e338d4655572c220bb50a1a05df970834ac6d0b91a86cc416eec40de3cf50c7 +0caa0b554698fae5fc76e5073a9ef47b6d739a8ee52758b82811811e32aff60d +d474cfeb8ddaf5cd242c7a8e7747602aaad0de7f1124194eb3e30c060d3476fb +43d520389df0b15c44007dc97245ca41f3e5b8fe0b283a1e238b57774472b73a +da0ad5b739c912e42864f1ca568e7f8b3c7525ab752db196b35937a509e24596 +73ebd59d66a82daefc60b87f8e21a2bc4e85a5bb2f858a5cba43eb83f54bbcf8 +d85731024babb818063e68ebb3a7e0978b45fd02b7f3734777683cda727312ac +b54f2606bebfe66499dbd8738fcad5b26e749a8806b7116ba138442bb85f55fd +49049434878537165f2c573241b1c1a56a0f961cfb5a269556f3eabcb41b09bf +0966d4cb4a0f3682c212e251310347a2b6bbb258f346d71dc4de399a4bc5529a +dabbe008d511ede8a302a407c7a4095739c505f1fa1f7a51de21b542f23d5287 +2e8ed319d7e867282a407ab35b5ebbc72d96a4cc6d6cf8322d92a82c5ce488e6 +f7a90ca6f5f9b9972e29526031f9d5ff881bf951e0aa40c6b05d8651385c7eea +48ca375b3f06732322f3259a5f92206755336a2579040d6768c85c4ca0afc4e1 +d28eab5d5f1ddb7d5d4f1a3b3b2b01cae132f4c0731e44f103abd7cdcd0d61d0 +8fccabb2471b66249c4ffc31711013cda5de95918cc50daec85398288439c7e1 +9a2196bc68ad745adc5fd398c3189c574380df2c2e4486a40817c23a81f3f316 +26825bef951991a1208cdb551d300ed38886ae677713f4b9d4092c9e9c76e5ea +22f1ec6be10e62200f4f9f591fa0255f249739dc710de9addaa9d34ee904641c +9bcbe6e79a6e4484fc6d0086ec2afa5b8b1926df580af637e73bf126680f9e49 +6e5bb8c21d6a428e77521156f78430ed51dc2e33284f88d78ce909fb940ceaae +0a07dda0d9739b8a3d2a304c2d9f8cb443d4d4d6fc3047842cda21c0b0073e0b +b52f5e1b7ddc2048fa9f67486e2496e0fd2d09ce80730d5f7d0f7e0ed91b6bf1 +87683b6f62f263c10b36b01ffe6fb601327450cd5a4cd8ef322277f942bb2567 +0b358456c29fe2f529d334d5db6245c1e8336b29af092689764cb1a19276d9e3 +2b4b77f0a1c3313421c89801f2c2ef5f75169fc2b3a98b69519c9a7c46b40148 +d474e7a98f7fa7cdb85c471fb1171da6de14027baf64315142b75f677ce7a413 +6466f817519848f9b9aad66b34e3be10e7fafc53571da25ea3b449d7929ec079 +bb4c3f6d513b9174a49bf5500a5272fba2d95362a562339eef996944951e61b7 +38beece89882bbc5580b7622f84adcd3b460828aada98e5cf6789dae52a41ecd +7ab5fcd2dfe6aa11cfe66d6366672c46ef3140f2e0657da447a4dc2f855895ac +b5a79d11a9e45aa7a457c11b4df4ad291f25a925e4a01dc7a64f848c64f2a739 +bffb51c2531e6717dea38da478ce0c932a3f9f856cbd2aaa1e148a0692a92642 +9d77254e7adf8aecd46a8626b7a31442e2046b9532817d285469f59d971bd398 +b6971a38e6d44f31cc46e3f48f10722641905d7ce093f5ae90fc6a56e53ac90f +7f1cdf1ddcac29bc60d3202de837fc9d659e30cfd707ceb5453028d1199a8a6d +87af5bab407c0a78c571e01020560bf1c77936521405c28cf79514579b017733 +70470f68de4e7667237065ece8e2e9bfe2b5d3df69a0bfd8b17ffb8254aac5f1 +d7a8c51d3f93947f7779f368c71c343159eac60c5a671f81cbf2ba05626f91d2 +aa7887e41804f5961b341a5d06b849cb52676311c81739a96d5da0d480cab2a8 +ecdfe115dab597f553767e59cf392a536dcc9d52ce25c424a9b840fbe6413361 +ef591c196e6fd7954ddfa457e7cbb9d5fc00c45d1ea21184f29291c54c353ffe +59d19239224f9de9f6595d5fb5279fd19278e93b366cefa22b41750cbf2e03bd +7b8bec58170e6d3c276f8dd4ccc99885a5582ba4ed5253a17910580a7195d775 +6e10c5608e2499df08572d1fcc0ea139beb4f0bffa5e18f7c1c17ecd20a9e400 +95e2d469da5d9403dbf146aab0a04ced94b508bed89375c6253424f6fcb2afc2 +a8019b6fc866646c1b54c32858992abf31da24399f89ead105a4056526d52965 +289830fb4bac1b0cb6a629104dfccae1a688563a271da0927cf2a644274d2a3f +f90e5c1845205ff935fce3a7633cb8f14e01167b6a0368d2a2e8f072c1bbc6a7 +d6f441ab6d23cb3111d8ca1634cd58dfb4d704c5aac7dc2df32ef43c0fc490bf +86592326f415cb9c543563e6c2204aa0e58eb42163bd9d7209899abe51946f7e +7505e6491711e10d5d125fad62e34fd2e08a0ed0028fb0234768f7948ba2626e +d037619703b922ef43225732aa509b580e92bf5adb3979bd8489d5a50a132b7a +685b271c2facb092739061b8ff4f49b2253db3e10839827fc99498d5a44a5806 +8d9962908f92343b87f44a8bb92fe1830c362d29f990e861461210113ff1ab0a +55436ddc38db4bf16131d9d96784f3165fcd0058401dbec514749dad00b6af4f +73afb28ba5b5ff1a023cb318fce617f5f55eeb0bab7c5bf819edf6a7f81d38a5 +d75355916dcce33cf2b8e771f9730b385c646555b1137e9416c70d5f860a6138 +7d131a9d8acdbe4663772c07722c4e4bc85451fefd08dfccaba1c8f3c251cd09 +3fa5a333877d32ff4d2ce359e6aa47dac276bce065cbb7b50c0e3add00f41c6d +be9778dc241411d1f9e934be7934c6506686ce7c8d619490f2a3f065ca6f213d +9b173efd5541375438e9c6e58d664e8a61aa1f646be623688b1934fbad34b627 +2e1e5614345e8e42ef1456785fd526f21078798a49b61c106e23678f1f593c0e +1ee8c5561147fa5bf38847b982228952ca06cf4549e210ddb6e37cc2921f98dc +162b175bcddbd5b8ad6c58d59ec66c5e118d919ea48e81cde2c17149ab133d78 +e1f45f4c5d931f09526310f2bd8f0233fed3a6a64be805d626115b35b0b5b39e +9cda7b197fec956504ccd72b71a29e9526a544957068c9b7ed6fe04255444d01 +2ecb4f59707fb4cc4a1636c37f9b94d0eec7fc12b70a3e88c7325c5524a5fdae +bc4307a8ee518fb10801bb3ba4e17a2931b5596155171765fcca938fffb35693 +82e0b69a88235c65631e4072e3fff4b3f00a06624db945db691e97986357a509 +5410d64bac2774999f960f332c9050bee455f229061ed099eae00dfc3fb9724d +ac85ac49b79a19410649f06099df677b8d0b39c4c7dc52e0aeb1d35baab7319c +f16795131e2a6d83b4f30fa42d7057ff9030c348327c91f1a780209ae58ebbe4 +188d8ef5e354491d38bfaa4626736cce69132d6b1e71f0962644dc09ad793dbb +368a8e4cffc7a8cb1697ea1b85f5eb9a831458c968ed6b860c344b928d182afb +677a88a431acf29e76053bd900e3fcafe19cf96146b492cb0b046fc4388c326e +1f5ba7f4f9b738c11af96f86cab033b8212716766c1d64675a52c304be62b163 +fa483e426fa8a8066bf82180f77909029eb1063b861ff73dffe14fbf7a25cd7d +73a33d520f6349b76459f83ba004fb60e3dc4e50b4306fdb870f29cd7044d6cb +20d345621ec5ea26ae9ea8e66dd198087e51e8ee972f6435b82f635c83fb4d95 +585e1f88829beeca19a6ea42157c10f703ae52b0c0df309a4634314327ee3ece +2ce41c7dd423345ee25bb7f64f5b300002e11463baf80547ecadebca51b18156 +09c7e479883cd404756e73cc8411dff1dad55e88757314f155bf1eedfa94d1c8 +7806e41cbc3d89eec743c50aee90d6b69bea9de11684c85ea5d0a64cff534085 +f180ce75bd623afe1e08ff4fc4902d88f769e1b3221831f7559867e35137fba3 +773f7bf4977cc27997b9da44e1799353cdd563c88d067b13279752179752ad5a +68f300640de27cf42c42c5e235f5d7d8b345ccd63bee391206499bee8304ea0a +591ff1b118171c51ba62ececf66006f78d1c56415178b9c144ac2e83457126c0 +cc7266234abbc4c1ff4ee17fc352e9bc830aba16351a937cf1304173f0aa12a9 +f79575ba5e45e6c14b93d7a34001b29df1ceb73cae7fca7f34078f99a72357a5 +c7b040f377b8dbe90bdcced28f5363526bf14f0ecf89c919d53f4c3653528b79 +8dfc4b4244f2d9747e09ce16fba69911dad746356ab3f2db59e871b21b10939e +ec4fe4d11b49055c5cdf81f37a0484978dd312eccd5e95d5ef7ba378196396b6 +cc3b51de1e27035f62fab5d507b5a95493e2ae54a6b600d1727db436933ec9f1 +1f01d50b0c645e8dfa94f43b15c47b2348c3c387010989bc4d0f7401a024d351 +0914708a6015b66af6f255efc2b86a535806de1fa9520889f566d000bd185ee0 +9dc171fe42079ac3c342ba13607bced1ecb521827c465f83ffd8d45d50a69a34 +8b1f0d3a524776641483ece863bc262f470c3e603b380c92dc8e5e4319428fa0 +a5a8cad19c001868977d6c36c49eec7a4e3068507b075b8071ac787db8a6d3a4 +3b290f01b24b0fce5c77ada9b89704a5fd3de6f5e8eabbc2c51daf3727b9474b +8e2f4aecd0433e0ffd20671d68f64254db38847ecaa7b118bdf0ba25de5c45c5 +1815d08c82c6ba3dee113d34a1fde725ba8aa8fc05c607487b703c1ef2ab05e5 +575602cc6558f7620e43450f7f508e029693498e2728e4b62571e36e02360964 +62a9579264eb4baf12402284f0bf498d116da62e81d6d3b11c5fd8b0231d3c5d +009a3b0a5506f2c5ff195923a8dbf04768655e63b48d22ebeb97f8e416925e76 +3bda061a1593c0233ac9c058b5ff5b6f483cbbaa4bac15d89f3093909a4d50e8 +a1f61bb76007205d4abd546628cb3d17202cad80f851ee95567cb313e3155258 +23459f6c8b3f02f7e1cdd1499eb58c0128b83c9086eef4e1479a915e75e06905 +f08ba8678f8ba2dda7a15a5461568c2a44e100e078fb41b49bf2e34a35774c59 +cbc642f03830c29c73c8c8334f7f0b8ae263235dd2acf4325973ae353194c10b +a4d017e0d61602715e8a7a3fc90adb659da741a39b2dedb707d5446cf0a12997 +f5df3044fffb50bc9b40c0f551ca4f7b012bfb033e6324dd071372e93cef41b3 +8e29dc94fb145e8c080ca7e606dbca4b292ae98bdee61041e733140c638de3d5 +2e49482c182b75d5d1ea2a27cd8c40926b7aec98d97d80547fe840d1ce753797 +e8f903f0c59f5390823e6a15941a55af60a6b0f82423ca76acb3b0e27bf4998c +2d35e08c4bd4534f0b43facc2b994775ab7c84903605358015445ab8649c8213 +8b1ef913b3c9a3d46d4d9c863c07ea43ef77f04fa4c91f238a5ddbed49629e62 +a4c84190f9ff58575dcf46392c0db97a225d99dc1e7ace1376ac9f20ceae14c1 +8372673772db403747b6067992238fcd257cdc9961f30cea0bc096c77936bc96 +51e8529f52175ddbfce202f38ef4bad1e437fa76c8801b7569c347cc9497bdfb +d693d6f46e66aeeeee2f2b0d4d1784234064ff0f63a730d0c0c80669ec5b7ad2 +3e68a361a69b4de9663426606cecfd2b13171f3e1f8d278240803a0f9aa067e7 +24170d8ad2f4850e1cbf01f0460561a2d06b32c891f15727fb139ed20fe35875 +b04b174e9292b2be4f30f2fb783c2e35f6a47e5626ec3539c0ca7c78a8c65fad +8255c95360855297e5baa060b4d0821ba56c95db62f42d5aafe040ab927d6e6b +a50de0a1fe6c404bc445cd13d1ef1f6f9ac1591d174687f4d5e4b80f8c57f1ee +e2ca56e6b71ee222fc3b75d9c8275b5ae804c530bcbaf814543b53b3cc333184 +f259717a387c6517e31cdff3742506dd3fdfac9e86a00d15ab09c2f381029609 +d34f14fd5a799f1460472115d8452882d250b72325f273261ee8cbd06dccd1e9 +88aa035ba584ef6062046704f0ce3b19eebb71ec933a174be1087f7e763e13c4 +fcd95a51745025643ba2ec4ebf6e7d08cc2661b38bdd189b68d4f5057cc1afec +bd5920178b7ec3bf3073716bbefbc0fb0fff6dd56b32995245eaab7d686d61ce +cf8d35d7ced60e1d8583a27803cc31eac0dba9dd35ac730304c057bc81ecd5b9 +9a7eba791852d17300c6253de776cc756614eea68c940d787656887930b9c38b +74ebcd963254a3a116f15fd5e0568deb54dd076760fefc82e43ab8caf157f2a1 +0934ab492ba04b727b4a12380d8620ecb36b234ec23ea06e1c01b0ba6172c505 +b5fdfc5e1808c9050c8a9835859d97e4c626d48a3a26e077b86970a4a4f1f924 +2e056404c1c3c750c7e6de295c6b9eee36f1ebf4b7813d335144884068f1d8e8 +adb020e3f5971f627fe12b6c4d39e56be8cfc9855ac76493ed4994e9be17c9cc +3464585754dddb9e577dcda000fee128090977165fb6bec6e90827bf7902a887 +ae02126496ffb08eb85095cdb4e5cf63afde1a5a5948793b163feffd60cfb9f8 +428ecf3bb84679c18356122b74ae5efd381d63e496750bbd3f294c55c4306df8 +4c4c5bc4d7e7aadd52704b1cc066bdff579ad4aa3dda718db17819884ff48c16 +18a6fc03cf9954436d24005f7d0975d8aa864660aa30d3bb3ca001ace7b6a0b8 +f115b6fe459915616304ec5fbdfccb656da02cae21b5802a9dcf20ae0e06c5cd +fe92aa4bf2be74a17f7f8f2b338d3a53600248bd394982f97239089f5b7c6c8e +de8339b8d17adf2ce3cbefccd4e6a6daf5d4881131330c1eb4c0ade5276dd50f +2b0b4fc97ff5b6c887fe7bf378f58e5dce3d85b98a4a9fa335438158ee3cf58a +f17b2a4553afa66043e146652c23a69e6f6f747ea368637d4e1003b4251a43ff +71c4b12f7e2dd6848cb84316b9ccdb4fb282615f89384717a5016a0660adfca4 +7e9545b2182f553d14660f38ea41d327250ee94d9d1a23d0b395303295a6de00 +312ff97e49ccdde1359cf3d098e7ec51df6e7487b4f9b94a69330ec7885a90a7 +b294a8e5ef7e99aaca70ef8531bb8951fa70d28f8e94216ae8c54d03d5fb5766 +b08a89c1786affcc5b771581ba4ca4040bdcb201262985482c346fb3a00b5a38 +332ba95e627431fbcd2811018044d8fd34192c775a0025868c41c34619cdc4c3 +e07c62ff21e9b53ad927b473643185eff0e0af5dbba7a79cf8b2cce506c0f18e +a3f8e23a4eff5c581bcbc6dddf0442780c00346859988f464557207c2f3d79ae +830f86148daa52cad0fd0e768fdfddb665f046960da31f389460790c645fc65f +ae80feb3ac5e96c07267175b41d80b79f8bf05eb5905aa917dd65a95b3b90b62 +5e692400b6bcba9c60df3de780ea6c3d39c3702a4d0fc899e26d5466c3ce7924 +60529634d54e61a992d907923ea6a831f94b1be0a311abc904dab3e0d71e9d9e +4d87d50e6d99e03b54501fc78c3f57de92f6c336cbdee2f4c03728cdedaae12b +1e28a0160cc0bbe6b332e5e0442763dda2701556c351c4f81ef3059b06804a1a +da267bd5e1e0846e23f8472740f0260c9d5c82daacdc931190e7f10011a6f718 +80218742749e3493db5f64b500e53dbb333a87926b413444c0db7b39cfeb12a2 +8d4a45e223e651ea6e6c65f5b1c89d4debbc133c226c27f7d8638a4af9803b72 +e29c308e2c4bffd6285910b9968dd1eaaedaa84f335173fdfb51593384a9d128 +3e2e49c3d722e825f67c77b9bbf2ca5e19e64bd7dc212b7f512ac8835fabe249 +89a19f724e474456b6aaf6b0cfb951d3a522510b5556fe6ac1d993f1ad0ab9ef +1d29ab40b6bbf4b8c1eb90db2220f3944f6a70f7dab210e0d2bdda392b85522c +079843ab8d38903c54f2354520cea0a4c1f4d60d2b6d6bf97b9b657982d5d3c8 +4a60ac668bc365240bbe4b5c17ce2c64a1f2afdb01997851f7c405139b3e4c55 +eb2d2a9aee9d4ca05b3d11066167f4bbb75ad5bf8f35813c1692fc2338f70a78 +efd212989488b031ff8239c56ab9c65f96940e45422ec9f721cee7bb73be2a08 +5921862a0a039d658534931865e17607e35372e501562f074a8d7c2366faf616 +0e47317e3667b2abbec7be0a3dc640b0bbc7336db58de5ba26f1f1e910adb1e8 +5172e182308e9fac6a50cbee3e5e22c21026bc31a8ea05577a5aaae1ca049f43 +a9f930ff5994abde44ed4c5cdc4139d1687f30f2b414e106dda8c246a54497c5 +1e9aaaa4d3e2c35a13a3350514544c4096e4ef17510d59eec945a7825f560b98 +c96f5a51e05bcb8878a6187b607f135c69f1dcd1fdf7a88c60da3116c5e46ded +2238210eee6bf3872c8b95e0e70ba4d7194d4aa51b356e060e2ec150cc9a666f +4942009188b80f3ed33481d8b754a3e7f69b1913ad6c7a1807bf05c5c7f06f84 +5ea967d0cfdb1ccd8cf14a02183f1e8ee7c20aec2ad2d4882028df0e165fdfa9 +c06159026bcde2f858d7358819795d5460a464cfd3fe23bda12f4096b62d2039 +4be06a2b4b08f94aed653608dd59684cc9d5585a9ed606e2aa9cfa7191badfa1 +fe20e83d01f42f06e8431ed876381326e2a31c230aa834169a18e92a9ef20b98 +0c96bf695b7771aae13d335733c96dd8541b5a6e3c7777093955f598246d135e +ee64474ada3f017cfed068c9f3115921276f1a95a1a2162f2eefffbcef0c3aa8 +e36f8c45889f3757b51af242c64fbc3d2c04574822487e014daa342ffbb8e1c5 +f0b7c0ad1eaea5bb5dd6b9b36f661e029001b40845d011dce1a9188718384933 +c0d3ec74eb27768cb5dc08f86b7914e2fb3f2b717a1f330c29d91e89888d83d2 +2f1d6d4531109a10f3b869377422cac3d2f89c0390b940321a8d0dc7f343b56f +a417206882526ea43ffd467c2aa969cd80a09a9eafa0a103c8f8206178749c1f +549a3393c1deda03623924281f806d8ed881ab7135903e993baad767de650fb5 +17615ef40209ce1ac15201fe094b32dc870208c0dd032ab639d4ce4b8b1e2a76 +ff3eb9f0472ad1bac009e3e9ccad32eeadc5047c8c80aeda16a946b558a4fc83 +6f8b9a897b415920a946bf2c81e2d9421ee21cefcbcc7f9ca6a8242d47d495c2 +158531ce2831f5da195954f10fa375d24d7e4e6a92af21972e02696780333cc1 +ae4b6c6bd8f43fbf196b2f7bf2f2f277e628e959dd51bbfec1d654fe7220f252 +cee9a500071f202a8567b6137551de985d5b0beb267d044c091a2e5066a0039b +bfb96bb94cbf04dd2fbf7700f42b68c9be0eeac34915c212d5cc6c781c89af77 +9e5acd11d425c13239fa07f0e28f2447d63109d16f909515389fdeb76c930791 +9c4d10959b0b63b39f49af938f109e45e62d2e46abb44a873f291eb4d078dcbd +c852cbb032ab7533ac8d651cba2f1429532122ff08967da9fbab8eb8e927d718 +136da194ce2a6433d6b92b441a4a9d06577c7c8cb4cd740f5cd83ebe74fde770 +229f7f090351a048893d43330247ac80afc9b28f7729287d54ed1fec1731a198 +a0642b50adcbfc5f9fc5dc00ceac0b4ef68f16cf5c5cdfc5c047ac5cdc26c357 +d8d9a6340846bbb4dc81966b4e54a550ed425b260da1b45a4905e6cd1014f197 +495ccb262aeb75b56377dac775b5ecfdc123eaebb617c48224c1e3276e453867 +65102b0313aa262d358566c9d518ba3c67692881747954e9e87e7900629fb73f +56537924923a4aec74cffaa5f32b4fb2fc0eb5c599d80991c02f1369721cef28 +dbb86f5c67f9ee5bd42ce86dca1872a382038926277a1b7d690ad7ff52945536 +32db74e9a632a5554221871082e4c33d36f5b0d225f0f75286d8b117e7d2d3b5 +7c334aaefca81df6d585b767004b6bc0fcdfd7296e8225b3af501a5e6ca4b3cc +3363da4c203513fc473bcf178c48a71e9fb1feb2d86d815d0c684daa1b2cef8b +7a17ac40531b319250803d658ee867e7beb632307701626d55460946c478ec2d +55e7f3f71c059816372a7ac7110bb97f6e86a782ea114b0adae033b89455d3e8 +19fe495b155971f926b139f8d003b9fc9c1e612d61508ec2fd4832740b47c14f +b1f194c3e440e9fa435494135b6af2d9aa706b7516ff853dc3f13c57862d7406 +63efe646cf15a3a54823e9302d870204e8694857f5ab8b8152f6c5332997975d +2bbc57e321c4f328ba2158850cd40a6227a64195817575c017f5fa090ae0556b +a7665849a46ff51b36263392d22734551a6c2a4faf5159ab2ad481825fb666d5 +653006265ee72e32c8230e733788428c7a8bbf821a8c8ec41b2b7ab77142b626 +1951cb548c93955bd2b0bbac1b460b1f490a2b6711471bc33e10d412ef004577 +49760ee95cd989440f59f188458fbadc10780dcd6b76633f3f60689ccff06f4a +ac24d19a052d25bb5247624e1251329b9f6e9200785faf56efc7955ba7dadfc3 +4bccb712a5ec29503cc890f16f14be12c9a98d27c4ad4ae7fe0feb05aba081ba +004391f5cd198e418654fd240d523ef4df055eec36029723b311bf07c3388116 +bf4da3aa56d5b9e3330aab618736d2a5029387a472b437947e2b9029e05b0218 +912afd8d21d5aaabb3135ab311778262455f2a559e166f48506dab27e0ca87a5 +315d30aff6499bdee67e4137347133a9edbee671d6dfa01ab4959858b2c1fac4 +5aca951a3a87f45fb859d7c7921deaf989a56f12c09a899d5e2c20746d44c380 +a88c5b06697083996c3d7690fe1c268e772a68651fc36936a36ea4ce8dc9057c +05f0a51898a7bb4b5045e2a58cea600491f21a09161ba7866e8d7f2d59d502b8 +ee2bb74404d02a92962d3c04a05659daba8ed04d8d92f2951863d67ba045f217 +bbb3f09bdcd2676bc970c34337695d053c6bbcbed78315ae82270b4aabf8f3f5 +8826a965b7ee29e3e6c13bb4213b28b0877a91145153f09ef866dfa1831481cd +87df5322e6464ddf257908a35d2b49a3f41a5767f14f5ca17c0be3ff13a8bedf +d59283abf933f33d7b0db0bc4d95c903fb422fd3b82c6ae88591d6fb3eddb7ab +3966850a8bed62c957170fb89607fe22aaefddb22414ff7a55ab50d5f151d86e +600889da55834432fe74afccc7be5f16a6c63262d5a788b3fdcd7ae98fe4f3e0 +a3ec297ffbb9d0875ffaa52ceb8894ddfa269df08d786a0e29102bf5a8d58d90 +293ea4e6f9d50bf4e7f19c10d805dd5de75770129639be680e06f25be7d07b40 +4001eb64a6b74e701782b42eb03c689d9b9327fd7fcbd0925f95630d3336cb5b +789388b17aee7e3616e43f935f30608c02acdfba2487664865f998c5fbbe6a2d +ed471586c5e68d4beeb65597c9ce368b494983548ec6fa4b15c556415bc15b27 +8186864315427c9aef3c102193c013b424e6ed789dbb0d21d75ce2afd3d9d8f6 +52f158edffb99e4e38b6df1ce9421e7eb130dfd305b5f9d88a94fd645a7a5669 +a5a2f447f3f1ed95ba822bbe972e4ab9b75e03094c3f23163385fc551050b982 +9b059a5a530f4ccd5eb0d4ba98f003f95c8f90210012830b76c89792d1898b9a +76c0308878786c3fd23199701f383b986c8f5cdd99fc86223b3d4cfb39587800 +35d33a7e56428ba3cae9283aab4d5280d952d5d028299d958dac4a23fce6ffb7 +7cca4d88a720d5d47fb2cdcd69a1829235fffc728d6a4b98dd2aae73bc163263 +ec6356d0d9a909a512735263a1ab810296026a7b0141ca44afde4632c5e31f87 +116869aeef9626d5786ed2d25ab3a1cb3adad4beb38bb5e3197f18b678e3f5b3 +8923c5405121f0433167b3f8651877974ccc784d92d9bfdef8205f6cabb2da97 +5e2871b2a0acd7c5d4998f942af4d67d84233aa6ea1d54c8570c3eedb76b0907 +e50d67404fee83fd79623f0599eccfde0fb9c7e8dbd87baecf9cf68aa07992e0 +8ca55e5acb1948f6478102ede178577b1ecf8eb4851742c25a20c39a12774513 +dac23ac5b53be148a4bb4c80d55b273b58a7279220c377b25920c4d89a6544f5 +f73204ab88bf1ed0f9fb756d28696ba1b3ca2ddb292115cefbeb71feb75b1427 +12c238c978bebbb9584c63fc9afde0b2ce3a6ec8e8818b040588187e3f03f1f7 +d01da8632a8b74347ac40b419da45c6cbb9d76c66a97caa79e44dd5803d898f4 +a3f22409aa49c0a837b47004ca324a59ab3ca4d4b8c23f8cbf99fd72ddc1ec46 +205826b8ae3313675fb819e3d62a7a356e68f5b65dca8fc54e98982d9528a279 +7fce2ccf3eed85944bf571173c63b0911f1a34a2badcd67fb385468cc9d243ee +f66aac6e15ed9add917ec73497ab853675c7721a1a767bc75ddd2a959e95b06c +81d92ef8773b221334525fa10ce0829551bc0713d1cf062908c439448b56cb3b +526742103abaa9e254d573728e902bd053a9c3cf044a99e509cb73b8d14a8dba +05492c2dd922b7f30c120fc1159e6f442cab60ae23895d0318254e5b07381e5b +1a2eac1bd664a9cb018a0c68b407dd84b17c21457e0c2501662f434ee592c6de +8bbe5fb8aa2b88f398b2ab790bf10431abe91de30452704ebfb4450b90a99664 +1924960ae32615374b33dfb3669569b69cc60cef0178c38151c17887e3b7708c +e0a473b3edc9aca81506cc0962786ecfb6333d51cf3c3d01a4f4ea20cfab0b75 +408887aa9cfc740ca661a7edd6af8e0b17ab5713165286d2ce1882ba9302e5e5 +9f02527ded5011eabd72ce5ff1f12350d4e5130a990857e9676ac998dfbc4351 +800e309e314cf6dcf3750f3bb5467fb72de0b3afab584e4915ba93233c5e513f +d2f63bee7721881aa14a331c979028d7c20889115d626772b465ea0d9fc0c775 +b5edbc3f3e27edd6b46ab8c3a76b0245e14b755a308ef25a8dad6d9cdd64b890 +e169114fb7e06afe3b91ed8071c91235b25d4969ec9f03c1452d22b1ff2137ef +bd3d7b465154a1966f9b203e94c3f136a92faec041f74af4470cb54208ea6ab6 +c92560f542b85dd9f9b31e8ee2b5ccbe4ce674dd9be8492a161d646b77cbeb49 +aa5244cc402524caabf499c8f2192cc1a9fd5517105999a0338a3648ca03f9b1 +1b486352b68ab7a4816929d4d2706b5561e3e7c91eb5b116fd10f9ec9ea529a2 +e1ed87699193a44c174900fbf685f5cfa2639ded75b2e40fe9b0fced8da05161 +51fc5db43926292602db810b3a412c6f1ead6428aa7f45b4599e611289b31648 +8e9304e1da4d49d67d6217564a1bf74c887a2b595ed2f7a43426e1a7f1851c5e +97f591fc95625614cd115c03d8a3e2497b99c6b48510cb1e7f556e2d56babb27 +0ce9af4d3c3a37801e1fc28cf9457368737bd90d2bdffc8aa9e03ecc0f8c4eb4 +666936e527dc0efedc81a8acbb0f925de56566dbe14d187a862b43f7c56a438a +97331856ba272c57653a90a4276186d9f16350ea0f59def08ad5cd2d67316254 +efd0b990048bf4b88af600ec5faf2aa5369ac7c81c6caa59f8dd5c7dd29f0a03 +369037756c72ed98032589a86d9f31267c4932fd5ea2929992035781ef53788e +f64ba08a3573ce1f4eedf19744737486475480b4afe3cbf2ed608fa651d77047 +e6b016185db1503cdd5f17c8b515f40120f4a676ce153f8bcede25e0e998f7b4 +c9091b98d0364f599a783fb5ee99c24ccddc7bf77eef513b06753e26e2ba763c +fc67abc3f845719cad166be74e582eb74884345ccf6c265f4ff6623671358624 +5ea33fb16a4a4c4443c3d3c217b167e97c9c0eab334cf6f4f02a61a4d9c6f41b +5695fbff38e8d4d91733ceee4b1d93b642f974b510b1407d7992f02666d26ec7 +aba5eb40cc4cd100cd964df5dab0a31d07b36fa48efa64cf8c591c04381b3a92 +31c8f11150b820871fa64be805d62634c38a7ddd0855c315e32621fb962f7baa +44c9f56de9b712119335863b8e08652c9ec3cbf07279950b11b2eaa12ff17909 +40abccfd12674887866c008f06976d3d3aa9bfb4bf064e50bdcf3823b7ce5d6a +66732655620ea67c93ce77cfe64cd3e121c5ce207b6cb583fb317c1704034dfa +8d7d5ce9bc776e2e3f7cd965d3e5bcc453842f07fc539dceaddb5d2625078735 +ac550c310d989a98b4eb17ddcbab25e709cfb854880a51109be883d0703b8f33 +c64a47fbcfb7c1a336831f666b18a7ea57ab7b090e54eff27ef90c1795920917 +18ce8255e72339bc4accf7c4a0a832b3ad6d326218954b6ef1eb2b1c6e283fdd +1a84af455f2b88feb1e445278219265e36560e12262640f0b8c39d5823ec44f8 +f7fb0b0b1396706533621e3d3f1504f526224b9234c3cdcd1623c2025675be08 +89796843913c5bf74ad911974728626e2ea150b990e11027fa99ef57c7599702 +c0c8a8f3bd0a4453abcf0ee43b9d2f8bc691c5bf000c8d39a57e3a6061c7da19 +0332b98c25b3a5eb14181baf64d1ba6e846e962a5a3ea875ede2412419533f00 +0927ae15814e4fe907e6c002aefe845e32ce23a785965f87a4433e3d9cb40146 +fcfcf5dbd1cdf4cc5b00fcdec032af3383ee52d1bb019178b5d64ffc4735f4c6 +2350cea2f0c6c844fa492a097dd45af2692aded617e8a061d2734e40dd12cfac +51565a595b10c4c6eab692c7d1898bc887f0664ca953a4220d49585b6910d048 +bbdfcf28540d9a418881877dbba6cb7214e3adab8da4c2fbe47e395900428f6d +4b4b2f318199e3b60476b81d65ba33486d6581a95532ef5a8c4a6182756d1a5f +19a35a156896d16eb1cbdc3c71c34cbdb15b27fa08744257f7ab4df53312cc59 +5899050b9a1a484c6e7d7d2b8156c1adc9e65fd3a0afffbf77880e596dd4fe88 +70160f117e7f994f1d44d82b290b3412c05094227d953cd8d936253e70bcc45b +e679f3c37cd829e2210262691d4b4fd2715d235ed932fa7a4f3d6a51cd2c1c2d +98bfdcab79d94ae5a0c763b5ecf82beaa0346c55591333a2fe74ddde412b5113 +4ecf85c4f33f16870585929ff3a43ca183880c3b342de71d0b50e0caec8ac96f +84d6c65126ec6e15b475536b0cc310ac9f4b2e878f82c989f85aefb499cf31e7 +617300e920b4fc4c08a75760000fd68dcf357301c58a7d85d259456c19822a33 +33df916e8dab10ed7533e4a5cac1b999c30fa597da3fb3634b8c2d3f911ffa10 +c77152e36ddc54eb66be93aec9d38b41040fbcad8582789037c2752b45b95d89 +748fef565f2a0db42b2a5811388302fd3f66854ee861d3941f833051563adbc2 +ca1447923350863fbcd08df7b2014a1fc656bcc14549abff4345a697e7971457 +2fe7f47f74f6fb110ec6c19a820b9b8b250629ba3e1c5875e05b4f3337fb4964 +a4a4ccb5e2b3022070fbc8d443415baef77dc51cd2fc0e563a60ff115872eda2 +386b73b755eb353d84589804462783d6f2e47c88ac22149f64e5cbf873c41174 +7da691f652905e230e04457643f56a0693083c3ab6cd488d25b2ae3d4d093744 +4e7434e673578a3bf51005f94abbf2e2cec0c49bb157d6230c1166f890e7d888 +af0eefbdeb7a8c8e2c329736fb1abfd1c28a236f48bf45ad3f9800208e2c8941 +d7c2646791a2c6a9f77ff6b14d7a4cb1561ef7d5a1a4cddfa41490ef06be0dfa +4dddb8323a2ea2db2acf4abf56bf4f0cc6f667d1ffe303fbea1022063007e244 +03bb1e90bb071aad2256fa48458390f293b11cd33588cc1360df26cf9d91d9c1 +f5b300a063059ee65641c58fe08b5ed6fccb1f67e54cfe0076b02ca362a45f97 +245ed407e9f1931206addd15ef3784dad8d867746dbbe36bb2ce156744a87b3b +a15af3e3cb363c364563a81cdfcde7cf4161ac8896427d02328b951359a912d8 +1875b42c28813384ec0c949a6bc976f6742593e3c9a99448636568639dac3c53 +9a21cdc09cd7bfbc86cb8eda122ab9d6eda9fc0e4eb323431d002c6a8cb29983 +be023d9d52f147d73773c1f1380900e0072662ddde03b7c9d2e4db6368372608 +e0496a71c64ef37b03aaa37b039bb034e6a62ab9847c99bf3f9099a6ac828649 +32a248d723f9382cc93c76dcb0ec3db065bd6ffde538058914c02439a92aec80 +a66aed7b67ba8d5b75eb76e277c198f1f1c2f71565bc0c23d25d6437a7c69017 +c72c73f0fba4bfa80a5a046dfd0ca7a783d708a338ae2eae71790312ecf250ce +a7fb1b69c6c52f955bf1b7333972d48f6f479e96f8fcbf0ab105b92ea72d0613 +7505068b025f00b576831cd180cdfc27494245d75802ed8220d1dab513e5927b +083eaaae23ecc085b27d6ef444ec9fd98782e35f45b0347b55499af1e7a55526 +9ecd6b6b0b0aa2b711e5d3032ace6fee06d5542c686215133cb7f158c65184be +e20041a7d55c838e396b3e50030d4ac5c5831dd6cf3be395aff8d416a1cf29c5 +88149b83c31cb8bc45a3f900ba4daef0564564dc006c44009a8c5967f87ee50e +3fb7b500da32f03ab2abc380fddde8c875c19701d1b9ed54777f2a33030f1aa8 +def1ca0b3720e9859c189fa70462a3eb074bc25c2b97c2be9813f9dd887cf118 +6126db00de2b454417852b5ae707422cd60b337c63ba1acbdd549c79f0e16fbb +ac549022ccbb79a62e2fff0bcf1d99a016304e8349fe6c7782f868c7ecc3c27b +b81fa8c522d9cd26268c3606d529d8cbf039020630e084b6385ffe35d911bf6b +138a9afa6174affd18a6204e0b67c8ca76c229c30a13ee2de45e35631fc03f4f +9b1645ada82e4aaa2504df003f8c6f7ea621a0d2bb693feac0e68544e07acd39 +ad72aa50b3b9518e87763a52f92f7d2bfb84ebc5c6c7fd83ebf6ab660b5d39ef +3b8ad3d47743809397e04c52fb109ff9a99a3dc2f462db485b70068b80546b58 +a77bd668c96f83fecd4947ea612638502aa06285885913c3d0a55ed59fcb5717 +4d6cc24d070d554074890f9a30bc5f749220def451ed203fa509e245d0022dec +80185e5130ba4c2d55f2ea3b518cb97cbdb99c94b7c71de53416cf63db5662c9 +314bfe5972e405f56d9c64fed47f2403d9a369d9762d045c51a81f49f2dcf7f2 +9b4b2c95386371755169be5ac5c77bcd5781b0024707f89703390a57417224c2 +f3c071030c29c5362d86fe7b0d6fbdd4ae0d5f9d88b0b6b3f3ee624a06d12a3f +cce2f10522acd3b1627264a10d27bf4e4228daab35976226415e2b5580801957 +580b9b57d264ae556bb8c19aa894a68cc203a4f1c61b8f736c0056a6396816e4 +b325c498cb8ff2163bef8775f0374edee0975c0e12664f28c91122b2ec426e3c +bc4040b96af0a0e1f1f08181a125ff32f1deb1541e765d3f6c395d4dd72cf70a +0c8786e78251339ca115ee3f5ad2f2833b3299b88dd51dd6e106312b6d2863a5 +d5be8dcdfd3aa0c23442f5d9f2c52e26b7bcd93f651531083cbdcc8a1983cd9f +7dc0de8fe4a2e226196bb179f8b06c12041c55b3e8e8919980bc4dc1b7c40ff8 +37370003395291883fe84981a3890f0c7dbe8e528cb2a81ebc8af0faf17a9069 +a7a7c9ed225f696a36115daa94dfd10dd270ae15fe601a9987bab5c9f66b69fe +893345a4f78534651e6a1c3c3569ddb6f9a055e1bfc7dd93b698d98797ec1328 +a49c6af1fd7955f566b8ec99300711cea2d99dc4bb2c6aaeba79af44bbc2debd +d43bd144d1d53b6232dec21840790213b586fc630685c69e438ef6d245019c93 +9b506df33da438b20df1aea4a4e5c246a8e6e5d3bd22fcfee85566287ec4f7e8 +8e33762e9475279fba8c2a21b334d6f21f189dacad1f5df0e6de190418609ef5 +9dae7a86830607c5eff55bfa5dee90f611d04f634b19b68f3ad16320ab5df8c4 +ebe6a153b8aa346060bff0f079c765f5b007d5a480acd201cf21205f3999697d +23868cbea55866d79f3f44bda0140212f0790f51dd9c8d6c1b6eaff7443241d7 +7ae286049962a7a2df2f86d77817eae276876498128bbf9d0bd0d8afd6b7df05 +640a58631d71a56095d048d54e43b95e2f63a09e36286bf5fc9caccc3b353eaf +3215a65f0bd46782fa6eff4efbb0a35edfdf715e7a0cdfba50c6ecb72808f1cf +e2fe93a936c821c4fef275c04c4ce10e503216d92f41dde7132b70e78ee27753 +5eb60b276faa9b10b2c485b6522741889e4d80ab8adcd269e598ac4fb359a4a1 +ca313b71d5c448d32f7828b9c0854adb69d25caf61a7fc418e524167ba324abf +78995886c0a6edfde425d5e2171de85b609152f30305138418f76f9c3d15753b +0b2716cf8f9c412e553a0b7dd4a3b1aad4c6d5ea4f18f55ea03b91305e2d23b4 +96b5746b9060aec17db39fdef6466e99c99dbaaf458d19a5290969bbd1241fee +6f8d49448d81521655b7e24f5c4d4f60f8d136d4c62af41ec98611a04a0323fe +51671e40ce6a0ebc879ca0823b42ef74758648a09bb7b6491ab3c87860dbfa5e +1c55f515d43d55074764dc43d7fa8c9f +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/client/shared/lib/fonts/couri.pfa b/client/shared/lib/fonts/couri.pfa new file mode 100755 index 00000000..2822ec2a --- /dev/null +++ b/client/shared/lib/fonts/couri.pfa @@ -0,0 +1,1893 @@ +%!PS-AdobeFont-1.0: Courier-Italic 001.003 +%%CreationDate: Tue Sep 17 16:31:02 1991 +%%VMusage: 56675 75599 +%% Copyright International Business Machines,Corp. 1991 +%% IBM Courier is a Trademark of the IBM Corporation. +11 dict begin +/FontInfo 10 dict dup begin +/version (001.003) readonly def +/Notice (Copyright (c) IBM Corporation 1990,1991. IBM Courier is a Trademark of the IBM Corporation.) readonly def +/Copyright (Copyright (c) IBM Corporation 1990,1991.) readonly def +/FullName (Courier Italic) readonly def +/FamilyName (Courier) readonly def +/Weight (Regular) readonly def +/ItalicAngle -16 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/FontName /Courier-Italic def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/UniqueID 263787 def +/FontBBox{-48 -288 800 841}readonly def +currentdict end +currentfile eexec +9451d7e7a4929782edaf756a2645851dbcddfea354f61d8628b8cff733b549d1 +03a6c4f5bff18e7f42cc7ab902ffc194c26f5e122df5e4153316cf8bdd34f70f +7f4ac63c058fb15bed425f41d00b0fc3ce2bc7aaf11938e1e62955f527022fa9 +101fa95110e14387d94d5f312dbfea32c17f8467e82d9c3c014699e7ceefd421 +346e8b03a0eeff980f4119e6862a5e4c2acf990756a4c25f41289ed051a09703 +966cddf3bb9f59d54985d5473684443849535c5c052a1a9fd7bd55f5f76f6e3f +f7eaf762c3144175458d38e0c1cfad096c5f759c52459a0bceee202940109f4b +7e589678aeaedb32e62789199f908ae2c370138de2b7d42d9fd5f24a1a39526a +16f99ff43def7d9cc15cab7bd4984a978c5004eec4dec999af4f79cfd01ef149 +746140fcbe1dd3efd7bea7c6ad6b84229d3836f4d7f5714424c21a13a941181d +cef9ea1d136feb92b96b3e3126d9529878cd620a1fa3e4cde95853533f067ac3 +39f288527ebc6ba9eac0e767731a02705d581144986ea6ac8eb055b550ca00ac +d031813c1ae301f907efde4be3eecfcb4a5928013475debe556f045ee0df78cb +cc080be9c5628a6254b28b146328f10163a09a83267de2cad5115f778a369cbc +84fad9d59d6eee9785bb43e2c96d13476cdcecb6560ebfffa7de0cf4662b3490 +36859bde1974b21efb897c498691cfa294b724a58138e92e4a32b138302362d6 +784aee399bddfe6a40ac7a1e473d9eb34e949ea7fc42e7276591218e4237b50f +b02bf78be202b0972447920155dbcb8fde70e74df1167fc2ce02a96fac4fba92 +4aecf5f4f94ced70e010eff9147c40fa6ee88c7e5b06e5f761f2c222d414cff8 +12999db0535504f922a533c7538d77239c45f04c9c31a48bded20106cf6d885f +1f428e2144d399a8e589c3790d572985a9b26876960e31eef7b8ef5430d391da +9618103b8d95452d9ad4fb2df2fe324500e205f5830649bb6688ce7b599dc96c +884d0564a73d7a3bb2e2aa12102079ea29ed01340ea9c2e6cbdab1b2ab6301c1 +815b16b46aa4cd714d2454c81a5c65fe62bc038c62f3db91431361a832fa801b +001999d79ed82fc813e004b875f8f0b69764d55966952482a015cf67587f3624 +f0e94e983980c9ada89df75eea4b6f3c0fec7288b07a51bcaf9b50b7316c4c22 +65da826d30372d94e3e01067b305907a6784fbd29b427dd950a27a4569c9a93e +b94d553d5698f8f312e015cfbb4e411a521ce2f0216f900eff711d60a21e0487 +1191cd8a870bde5c7d90ef2c52ab892db301513264ae73b2213c6eadb474d7b6 +03e6fba747bd5532515b9385eb4da75f6acdeb8d5225f01745158ee38c574b4b +842962be90df91632ab92fe2af21f8699e670bb3ace0f4b1e5f252f8a9e836e8 +baffed5e34f70561ffc24a440bb45129d3197476d9446d4d15929d957664c3cf +a3f238ba39dd636376e86414e7b1efcb42a6079e1570d987916d1c0e3abe739d +bd70ee831509b8bd6276adadee7fde2a39b015884f5a8dde60fb6422a00dddf2 +84839f70f58cd9674d2a5b3e6608dd892a76425f4a719d999846d53ee1a2ba19 +fd0a7144af29d774ed2d707e6f5c409dd262ef6a1a76ebb0f326165e41578203 +492fd1817cbfe7c20e4e71ad1e708f72aec944f42e097cd71e75e530b853eefe +3930ee67d4765fa79b2922884a4f54f5ead4f149b3d7397affd32da788d33c0c +34c7b6b747685680cf8de88352869e58aa05405f2100033aef8e07e465421ce6 +1906499e3a9219bf545a2fc6dab9363c51d28778cedfc72a14124bc174868a5a +6b077a5bc3fab24ddcdb66ce8f1228f2e8795ca00d158dd85b6ce80bfa2c5b33 +54582dee7138beb45b0b795205263cb3922fdfdff57a077395eff212f13dbea7 +595159bf5fa6ef014b84484bd27d8cc405dca16b6aa3ed6ea9b0b69ff2b160ae +c0af127322c7f3bed8b8089f9bed60aac6877faf30db93b59e3f99f751c03174 +37135c58c3c43e95681e4254ed00531a086de8fa24f68483db6a97fdfd3dac5a +6e0296b4f2207e2c301e3e424e49c7c5e98f48bc1a545b3a1b7e4bd5b6829f20 +0e5663995deb31543a56990850f6614abb032a91994f9bf380a8d0a22f6e19d7 +006edb7e5dfcad6e01b9e3d791fc9326862e72aa717fa3b68c537202cd6ae9c5 +d81773186a4c30c5a95d86e6614e30eb630690c78a40eb87c08e6f679ff4f862 +25dce99ad158f978b63c037b51dc5267c11d2d46d5823f429ece0d1b1e5225ab +092cadb0c5ac32d54404b1dc2b6b340e7b2d0b478ab13a3e53d1f365a50c515e +8d4bec663f52a818faddde2cb9f05aef238b5cd55a29382faafa3089d6f69379 +ef72942826fc4742e7beb16a452d0319b6b3a3e08bafc4f69bcbe9dbb938e768 +b392c9755bc00415744c0f850c855a1ba009b1e2b3a8c48ae92e4b4d95bdfa30 +aa0b6e310854ce3137885f88f687ba590220d27378d0ea52145b84429071ca41 +fbc3d285a49c55f32cd0d31676e36a2bd406f33a0ad837af2cf35602f9c6921c +9167ef568466c90308107b918419e3245dbfba44178559abc36fc6c1818aed6d +91c79d4fda4b4b2a47c068a11bbb899ae064327238fe5b4816dd820fc81a8871 +40025ede257cb64429dd34f9a1632c60eb44f3b24799a8d271b5059b45092b23 +a4ada866e017c76c8f7f701a37169fe6404a9c2f3987f81b9d13fcbadcd2505d +2793770da0f40850a837fa1ca9b6aff2004b92c5ee6fab82895f7b7b584d704c +94345ffb2f055d296f79fd2adcb5b1c1604290913b8df0f49df05e637266c882 +c0aab6855aca04b6bcc488a4b4cfdd8314b932f50e5d2c72fe4551390098da93 +060d3b350082b6950e7c9ace10f3063f9c24956cc7312ee1453defd2618392ac +b8c970cac9a2caa289639c4a3540fde6851e0801f5fe97b278e42280dce79568 +a4d459defe3682ee830c395e0949f8b0e90b43c5c1081b02d28ada072e63a5ed +6bd693ab68093e99730bad8499a55fb9b50c8a1b7ff3e01735077552b1f14466 +d86462a79e3b965a9183c0539d827686ac0c0c828448bbc999cee7545e6ff564 +24d47780bc2ccb4031214818681f6c1aadf6fc05ef40feccae7a672c83487458 +694df4bb1aca47b5d7922e55fe29c7df4e80d6e4bd4b79402e299e98a89d22e5 +d39073fcd45c50d08224481a9da4ec0648f002e0e9ae733d56823c9504a467c6 +325b8c959e79a08504417dc181116ef4c082394ac90814e97cd63c2b591eb78b +f78c30368cfd3ade41f83b89dd6ebc2db9bdc9e62c40db51eeeaae3c0e36ea1d +153f80beba54c411b75852627f45de38e320e3fa7870134e7cd41e355fc90aba +3adc77b781ef03e67e49a0a94c8fb24f7b01c6eb37fb38cd409d000438b39296 +dbe1edf020ee046411bd70a3100aa113c4be50f47371119570c7b5a74fa60b62 +ae02a8488a26ba8b057ebd29c3dd1d813f29c85049c86d339f32f0ed83b41f7e +92da22abf963abf1afa56f424c127a23e39a5a2213388827660e1c6a1b016b9f +834e6eb705a69f7ed8cc981c651014fb12c6de4894bf36a317db98b870d07409 +43144994a4be0cdc78c8b14acb0583b9c6ae0286cfc355c2652e3ce38e4b57d5 +da616ade47fb63fc9ca2d00e118de2f9a43a18d5065c91ee3b57cd05d5ab7dc2 +3cf8c1de80d30a857edf235da528370b006209854fb381fd693bbc060936639f +3a90ffbfa38d497c5e04bc92ac2282064ded4f8b48a1f0684650e8ec7aa8729e +cbd4f167f3d6fe90a095ba8f75f03a60cdd5bc4d83afe96faf8e8199c4211e57 +4f7f843cd927b2581aa05b07ebd916989d980e3dabd8140e200de167e0c81f93 +bfa47a97844c1a663bbf1975483989d9357229ab5c774d4222acf58c8da0e891 +a6068bebebc3baf1ccd312a45ac40706486735db1fb8eb68f75de2ba3b640fce +39934712779c7a27ab2ad4c3467b0d00f48bd23c32b3a2c3fa9b60a26047d7e1 +052d1d8c316caf1be1bac044be3564604892b7d33202142e1ce3d5952fcf0fd2 +faea492b74cdc5112ab8af4dc17997831d98b641d39592a9e84b1d7981c413c7 +63c3ae7b07ee80199900c204b54ce8e28ea28a7efbf7f7a13cb9122ad020115c +ad375a74983094c289061e23d54b8ca38e8a1567a4a44ba1c1f3489647faff31 +45ba870af754402bc3ef934ecbee92735e8d88f0ed1097247e40257c1fe188b7 +b100222b745d457d8ed2aab04206dd62391fa2dc7b3d728e10405c9b5cd93bc6 +afe10b476451d3edb361a090a6c32b8180bc02494e01ee684313c171b4cd96f6 +4dfa467b45577b795deeccc0701c29fb665e8a20d04683592f7b3ec507cc8d74 +4072115649b573b99cee72393f788ccfc8b6739ccafd4ece7f0fae20ded802cc +ce4442beaec97cf0b5489707eb9779e9f72b5f55b314e26422a8019c44fed234 +a21f96b1b69f99e0a265c6435bc18edcf6cff798bdb0b9bca878776b925423d6 +0c9941fbfe4e374a51b4f4ab6bdfe767d3aca462d727a364ee60360248c54769 +7b3cdf8913a78f4ee0ac72369545b36a8a74ee785c1013f04ba3a482815af951 +703f3f3359ae963f49d1df66cdc5d47010cd3765e29b73702f9e0b687207b8ea +28ddb6a47c9aac53b65fb50d86cf716c68572a6e9223ffa141a05856de949f61 +12bfc258cb674114f7a5afed4ac2d75e5ee8e5475ed070342c724be8a8e14474 +b044416541284b470ca3360ad99898dae8194581749b1d7626eb0ced901beb7e +33b3672d74ca975b910e81f14569c725b9fd9bccea96bc61dfc6c3fb2f490e64 +97c6a20d8ad2e065a697ac178f99b174d65c8d082d9a9fc937bb669c9a93daf7 +c32d165b09e1b9a0824a3072990cf9ad7103ebcc6cb30c552ff984600560d2a6 +ab1270bed37af4b8b7863ed2d10fcf15a88fcac28c61f1e9f97dce05200a9a0f +291b4d0420a6512e6614c28457bab7007fee6591241943deacbaa5be0edd15f2 +6bdb59adeaccf91b843bad3ad2066865c7736cc8b4eae5a1ebd3009802955717 +0dfe24c72ae5da4261ea8f9070ef1da48ed288e22ddb060220f6822595ff0208 +448c931d2c6ad2e132fefb7528de2b6afd1c6453d798ddafb3eeaf906f972080 +d9dd4539de39dbc3654ace2fbc914ffea6bdb35aedaed3f5e0717c0fbf60f167 +5c9755485c254b6106faa14c995b6043d073a009572dd50f5054879b2c75cf3d +08048ff3f1957355bafa70ebdb1aed4a7c0ba38648d193b18cb83f90b2610cf2 +df3f4c96a25dc64a341e253cf2d09dbfafd95f562826cea8a85c38d76d0add80 +cabd96927cbee4a1c16d89aadebbff0a7e2632e25e1b5d82132527e4f47106f1 +0416aaf3766916ce6d4ed930fb45cbb2ff6d606323ea3557fc29e0403ae664b4 +434cf42973abbb2db64dabaaecbbebf16547396e751138a24ad9d5c3475304b7 +99e85b57b37ca1060378c8211a99078f8b8e8e43e3d191ef85f4b7a7e7f11898 +b3eeca83053cbb2e5cc421429361867d6631d5eb3c2dfd890f74b504cfdd2042 +6ff193765ccf5ae1c820bdcad46bd1097386d02a59360da1e30b0167e01557fe +4360050e15ef77f236c833bb7589b6e335d3c7aba5f90baa924d725a7335712b +4549bbbd20c12398b8c8e8f7abe3104c068ba6db673b81d9532ba41b8be616f0 +3350f14644713b17482bed129bd1c5c2c4c5c3924e90918ce9e7262701e314f3 +cc8956a36219aa6b3c6782b7fe6c91af6b272f9936ba0c819ec1b0fa0a8616d7 +2d4a63f758128e2c348c083050f06a0b6feeb189ef7a000f4ec552377671b0b0 +393c66047a5756d7e9ac38c955d3ce583f94e50b41a0a153961ee049cab60d85 +97cccbe0686d23140adc2fadbecaf085d96d31a8358912989dea8787c292cae1 +7d4df00e359d791cbc932a31626662e0552f79b396a22adaaff556326d508275 +a2bd744f4583dbd8c91c8e89bb70104d88e2faa619020412a91fb03d1b511c78 +ac048f87ae0ce52eee8161a84bd9994d8c4de132a71d06278e80d3fb341ce4b8 +49a4856f5d0bd770baad7bb1338449aba330590a9784447b363872c1a2c7a390 +101e4ac42b1331daacd27aaf670b13b29da7601e05bd49cd62787644ef6f6ce4 +c1e67e3fd2a3923281faff11ad358e756d285642be31a8b36fa372b6b826ab34 +af6a9dcbd37aad998a881b8910552cfd53a03b2ccf128fd5634b30279b854a7e +c3d87c27da01113b2e134fbf0283f00e6bee34291027ebaaa310a6728b98a2f2 +40fd33a44caf62306a706b5ead4f7e16ade438be5d36359d0aad5da320d98657 +9fe6af830b8bf4bb32ccc46d56f48e769b49cb6ce9606bb0f32309333e87ac82 +91f85441a72bd6f6adc4922908aa822dfc4ec0e95123e35b40f72be615eeef40 +58ac7c03070bf65c5fcbf8b7751a4955985fc42ad26c6b87433bc98f03ce0f8f +51c1e63c253d32f7383d02c5b8d7c57aaaeea850f13881972fb594fd74b57d63 +de373261225149e899d60daf10c7707a6572e5b61d0cebf985b1fafae29db8d4 +e2e0969bc8351d482d270d93c6741eacc85b53b3fcdf04a931776933e36f8009 +0d15d03f4c51f27e41e1b09a233e78b95d50bb59f80f025e497494a35168628c +b69da174cd860bf66879831bba9cb20df1fe8a005929b8657ac38e5518b94ca8 +ddfa11cee6f424446593c9ab1061bc6d7d285b4d2ba61dc734f23c68165796eb +48bb353d874ee8b354ea4ba245f249cededb1a45eff353d3b24e6ae36b4bf29b +f2f0d4958e8652c90c8607ee99d364525ff45ed28b2cdb035f4a921ff09f7fa5 +a0fe308f9322bee5db6e8fa9c1b928c093c9e3cc21d7f914209ae12fa687fcf9 +b143b60d1b6eddbabe07324398a4dd3b96b38637b979ffdc844712bf1457e73a +aa66b914a46707ea94d87bdbf964c736a72d1f173b5ca8eeff1aaec036756e86 +2ae63b2a05ce9bfe44dc59c91046127522b37dc99e1a0a40f9189f2041e6d3af +64adf60b14ccab5b3e0f19075f44f0b24bfe305db1a8cc97fc268136462fe36b +c18c54f419fab7c9e6cc41ec5fb01970cc761cc5439d32f2d05d7753934bbf7f +9ae1abc694d25e864601aeea52cf0393a8d99c1e278915970019298f21fb1eeb +253ad932b9ca86ece282690e7cd815ef823dfe706e31499b3200983d7b2e1e03 +ee85904457f4b67ecfc10b2911be7935059375b5e1f4a59aae648dfdadd37d9f +92aa32dfd4ad6aa52709ba37237b9ec1c15f089d80306f4a2f86ee4e53d43177 +72139d975aca988ce9fb925d4e8869d9bc3807114c8cff3b89aabaaae6c004f0 +b47d29a951688e253d4b9edeec90537929563e134863a5bc5b14b10c7003b172 +af367f7109a0026ccd1b21b70d768bab9ca649052944b5713df04fa2c491ced6 +42abb041b7dc3afa5fa54a1bd682f2f4fc11028e2742e4620bb7f7d2b6b3cb04 +2cca29b6e140da488a6c015a5405f6a9e87597934bd2eb54ff7cb60b457e3125 +75d1c1fb0e2b263cfc8a36be85418bc089c7ff09808906fcf9b2fa33c37926b4 +2ab5548fa99a68ac72ebed94f9e196ab78661d1603829f1077ed9667f1153b5f +30527f64b47ead21c8971e649c6f08930b334c052ef16bd8e08ed918b551ff1d +5b06e6a02c22c325a36a628ffcb7cda2e204a09e6c029dc837a1220e728f3a26 +370f833b16d3a24510de53f83f6295853ecc202053748399b8ababc574b17fe7 +d543ca4269466ac9b2f96a5322b1b2bda825c483f632dca511240c9ed233b5f1 +ecd258867fa35d43126995a505ccd4bee92964493d633dedac48bb516eea368b +6dd30c92ca794affcf72cf93efe15a5d5bb730dc2ff190b35e7805a6a448d8cb +91095447ce11dff34debfbd18e88940a93d2b35ff12108b89733a4fef8a8aa09 +4a569660e66793ac5fafc00dd26b07bd1e8a5db3de4599153864cc9c9b5b978c +939272c070947643f999070239fc0489e4248aa1ace1111fa45a02ace8924393 +d8781113740c2666a2a9338023a4f0c0ffa4c304bd96f04a93edb7b6f04526cd +6dd6125edfff5a3e252aa049a974e00f62c449c68a6f636fc56abcc3ea957011 +d2ed2932c11f93a299f9c8f76a99c166a8f0b3ab07723601a5360fed33dd9af1 +f9de7d2e5c62cde83a485f7b701a1de173c6480bc2354328736d3012ff4026be +5f4405e71a1f3c6589bbf93ec9b44e9172c872a23190da0eb8783d864a55b073 +c606eccf6e032aa395a025593c00c1ede21490d590f75e07a0ace72030a03103 +aa6452a75de120ee0e87dbc5100924a354d9bd59b45eae1ac3522f1560db9d4b +cea57007a8e2efd9eeb415fba88c17b6a262608e03661f78d84d10d2e3ffa3b1 +a6e22f64c77c96606897483c283a61b6eac19867f8ea6d30e7ab1c8426bc521a +9c6d95285ef146c3f26306048c0faab3ce8903141ac00d34188adbb2943bea3c +24ada2b77c2fb234ba81b18319141d0f66ed8f030b9488b42a8b77a9ea818568 +33e52373e4af68063a20983f7ef9650b36d756a9914e19459ca5f73de2aaf099 +6b7a4feff0cb044b5efdbe79c0f92be56c034f0837407936c61cbfc5c246aebd +bbd6d10151ff96e6c9a70c83c252caad6ccb7dce8f8daf0fd9369fb7ca917318 +305553c4065a128d48e72c15e73d342b60fa5cd5cddb4ccd312909f3aa74c6e8 +93e4d03dd5f14ffe7620fa57fcf052edf14b24946c3298ad90495d4ffb1a3efa +fa2a7fe539da1eb9a1caae17db4d791f82a6f7549f1bc9c8511c67fa7f9a0c4d +0e1f6b499c20ca4bddb2d01331235306174ddaa89fbba3940fe3f0d90ea99ca1 +7b6068cc3a067fadc54ca07971fc760dff6c379e0da34213efb3e31b8bce103c +b213d370e9d56a7d45d717ec95c147a5587d8fdc2dc5a473c55682d8e6ddf0ff +99b84ff7708d0861ba2e173cc1bc5bea35c9167f434af0892b36df9185858494 +9a8c30aa60f56427bc62605639c1fbbbe8b3abe849cf9811dd91e51c7cbaf230 +2de453d71129891f573111286f2e1e3409d655a5aab5b711c827727a1c2b3a12 +3c6e267745c9151e4f68fdc8408cbd61e2415af33491dbcb6213f7f863a885d0 +a0e22a64c414738fdde20b991e8535188c7fdfa2c4c2f7464996d39ee7a6e2a4 +edeb319993ca59cfab71ea429df70d7c13003a14195491f38bfe9ca0e847d5ac +5b4cead59f46f9a96e9d2da356764c8f9ba7f28ddc44da1e71aa78a1f37f4d65 +67d089bfbfc5905d0d9f8bf91d59fb36368ebe6dc98d2dc30bd4dcfd95f8a7d4 +5e5fcb994cdf902dd0d1e1c6811da7035265c2500fc841b593581a685348cef3 +e7194022c27ce9b6e6b145c00673ec1b5e3b44c591b624be9b98af5a2047f91c +ecde59fe67573c7ed7059abfaee47366095ec644982546b7ade8fab0405df825 +77a1e716f6c5ac53f6399471af444ab647d20d73b56bd4f691a1af23668676c8 +7fbdd5f36ccd0b511a3ddca6749aade0226839bf535c49aa48c8f77b93a92502 +ba49d66c339eb423849595aab668a0fddf1f05ceab7aeb0b07df1f074f5379a0 +716aef2d1ce011c7f446af69375061b61ee2a5d53070c700cd61d65a19699654 +5749531ead8bab91300d32155699a97ebac94fbb074c047f0891dabbf4efb01d +183cecd9cd90e4276a8b706f851a9545e24b979db7a160171a647ce1dec9cbe1 +48c67575c9225276534d4954f5bb7980f8ff64d841441c358c2fa6745dd63377 +fba23fddfedd38a275d953dbae7f499e16fd528bd167e35895d92ac4a43f1390 +d18c8df01a18da71936f4f21274a19fc16ac14676e9204874dbd4c5375d1761c +26a48edba84acea46018cc75c5d394f5a512ee51296607e8dd91cfb635cd52b8 +f789fa9efafb8ae5bb03f7dbd997a9c935a55cefd104f0f9668ea3682beac7ff +68fbd047a47b2f31e775bb7c014aadf38448734b5077843ca1b0c170f212110e +0cddfd06af06c11ddd5d77f705354f6bb10c132cc3009c229360799254319322 +09b3f4cd6527dd7843483bb59cfccde571e7f0c3eb1097227206846f4ad2e0ef +20ccfa79a259dce46351f57e6e593ebad5bab102f379b3d092b4562a3ef7410d +c31c4e65b0bc5db4a9e62744f222f389b8367ec3b98445d18ded8ff88473ddb0 +bad0e15f159e29f4498a68f566e7f9cb93b8d49f4b896323a364bad3260fd5b2 +18de9ef59b9d86cb2cc3d909ce04da0711a6e609ef5766f00c21c1b0866df62c +1ab78933e58c6579b1db3f75f59063ac680a2c71eebf9eed664d261926a448f0 +597eb74549a6fdd03986f8c131436cb4d1c0c1c2700a8be389ce3b1599710199 +5f24a9b2a41c0a3d2cd603b0295d93b8353bd96266da252e13917a0559b1b17a +14f7d6bc5337a70f25f14a530d10a10eb00f9e3cabd9957394fac9e6d7af4f42 +c87de4804b581186ca91a8be760d4b95e605168f28009c8ac52e043cee9076ac +fe0454370fd4ed08294327d321f6f9269c31702c9e22ad65b7f1d1e5d88ed353 +a5c22be5a8bcc628d35532eb0be85229e66efbe32940d6a0deef0af4a712f9bf +bc42144f489e4f55d128f3c190c0580cb73e1f8126bd9af51007d29c5ba37bf4 +193e55c40fec90ead412ed8e67ae1706487b8b99a0053287a67f9394924fba0e +66befd41f5984d869e86ecaa2abe3bdcc88f0a293d4f8d6fededada3c95c63ca +f315bc533cf7684d70a535397e0a365e51b0ddcdc44695d64fca2f88dc830caa +520385dd0189477673c12dff1a8a933fcdd35ff44b378054a388659bc7d34b18 +747e91e762106878133ca087ba8745055fa56b7d55be79e87d1b5393a1e354b9 +37ca1ccfed929827205fd7f4c488c9771c4ffebd7ad282e35781db53a4980232 +36afa1c8285393b8babefdb39279cd7e81f552b60789d4b3e75db380e5f5e146 +bf710018254463c6fd3afe5d36e031d8aef7466003a59e02b9a33d47a984e10f +1467571b66c861dad8df92ca1fa8258b2e050905f754428289f2fa21903569dd +4f41d32008714e3274eb89df20e990e1f5f8e374d9a02c1d6bc259292c589a84 +b1627573ba844ce758650e4b06609876a3358b42dbab955c6be52033a353992e +e992e1508ad495437176290ed1cfeafc4f810d1127ca707e632aa22a2adc7ce3 +fd75385bc5b0b0599d9177f2a73228dd510bb6136d02bd456f8a4a7fdd7b61b6 +5beeb68fa6d07ebb2f326a9604a45dd1281f2fda33a2e392f61c0b2d358539db +8abded8ac63f5bee429ecfbb646482bf5233c568d9808d2d6d1223262d97cb67 +cad55177ffe979dd3d75f23885195d30e1052932f9b0f0b69f56d20a6afa3e7b +716383a3af055c83d81350c49f3cba01202ae59fc4917435fe2d60141c4c9b4a +10a737b86504c8218ce86564063ddba7e1f79d348247fc9a0e66ae45977943b4 +33314c4d62945b734ee2cff74e2251e57bafe2d7df36aacc16c4e7e8317a99f0 +cdb643fd9bb8baae7554a3ce36f46203bf90ad04d4308182fbe1443e5d9b06d6 +0f690e546f14a3b59e88c73f8cee9e14e933870e726e57b24ab26a42d208eba7 +6bb854b2616ea206249684c7deca7a2039cd56a8b61516f4b804a8e7cef8f7d4 +64d43dd5addb534af596e512989402c18e23ce24d71084f38ab320c95cb9e812 +d1b1e0a5985229ebee8c939a4e520e7a6a9509328969fcfa8068ff6d7d0b2554 +2a1692872457f852a723db78280fa52f7169b8a781429bb077359249e35a456d +70e023cdcba49da955831be885c3cf2cc5f70645c66d22ba02896edf191f6b39 +6a475fa8ce12caedb99f36fa1a152bcf0ef1ed857bda26d8fd95a8f47cec70e2 +7bc1c1e6b526ab9f65b0dfef215e559f8e83b2fab3bcd7a84805bf30d6302b12 +3f04d1df11fa76fb79a173c3698b9c77a7696c96965cc63647dd5517ebc07c65 +2bd13ef9ab6b4c85f1138add1aca375e3d59bf5f706951a378801bc3aca40f34 +b3803a4ff311d461c636c05572e86af42078ba9e791887eba8e2a5794a39e119 +1eabbc368e55362f6d07a4785469815210cb386fe46f837187c2934158c4ab17 +977a1a7c901ae294523c2876955387f47a44eb4eb669e05fd34a07eea12fd6c1 +18e86e83837a76ff03f38f3ac579489f2ff340b0c3ec3bb0f2e57c226dcac005 +fefc63ec5047983995465ff27efc036e879267677a8ec92b6ab89c5cf347d25e +68ae8eea58c00884e4061b05b22e8cf4eaa7754046cde1ff34ba093712179848 +04b598e20ece471f32f99b8dd2cded970c6aaf98250cd2a93ef2b539fa7ab354 +27c69e31bfcd9e7a5003735d4a477051fc41261e2fd14cacaaed091a2928cd90 +3808bf6f43f1c9c68bd3722eae14fb308786562abef6bb2cdf044cd8b0b26518 +45a0292d3f11cd9deea8197b2d5a33cc78d2c9e14a3289c98eefa1b1ea91eb94 +fe8b9e0c132a0a3cbdb70c9ded02a644b31cd766bcdb7508ea1f1ffb8a9f9a04 +f72a3dceb6b16673d20a6b7acd566a955247ba287cc74e6007362553bdb98102 +bd5a1a1f8df9e1c1adb8f290f659357b592e8a325ad1f9cf74136b576ff926f1 +f37c044961104de93de26a01a2d98b8aead9e113c47e9179e7ec06aa5148d1bd +d00f415d4aa5a94293f8b0266587f463ef0db2d7f10749d072faa586b674abb6 +56849caefe4f8d74710aa97549103a526b89bc9d286f0f0b400cddf827afc178 +3ce120cbd1e6bd83bdaae22dbfe752158801c42460b64518f8c7a374cb23617a +3ec662a90c324985c4693b6e80b88aa2e96f7d35323c0999f56f1f8db37f9448 +d6214fd1099b4a73065987a236a4353cb11051c1ef75950c2c03647abaa98615 +55907189bf0147ff0c5a2e1db0627cb316fd2e6dea8f8c9b34fd5a58ee6a4aa1 +7191e2b5a08818b72919af8173fce5863cbeed9b500c924a55e58252e710c648 +d41fe4c020c0fd607b08a4969f3fc7bfeda3e20897669f2ef32511e08e9207b7 +305e9723c52a16224e8d0f1bb7cf6f7b687aa5bfa61582d1d07e980f91fae736 +8b5ccd687da89c884c5d199518d0fc9b0e424e740aa04cdb52510b668c09a3b7 +ea5a527074cace5b2c4aee3c846c383a1c9acdec4a0bcba9e0b3d05aa81b573b +14794a9961ba4d80b4f308cc38f89005120bc284c67e670e35238a3a72498be5 +b84a88daef4ab123258918a4bd292bcfca94049ed9b7310834a0c6d1d1b4258f +e410beac79f5d5e2bcbec6206421358fd7ee8d5090539dd3565ac9cafc9c2768 +9d84a692b06601008390986d834cc44e0bac0c773b099501c02800247a1c81cb +85f8502e773fb41256c84725fefc59c6f39b3696ab0bf812c3ad445193b9dd02 +1efc04c8a1e13b0c6161134fd0679c029780537d6e9dfc33f8b30b2549e8ee6d +360d5bfcfcfad3083805e8ee6a54c4802c8e6629feb6a291ec26c9c393fa6049 +aedc546db31ab6377913737976822d44ed7d41325146f691604bffe6da0ca977 +821d9f2dc65e7099ad3a07b3cb2943b9d8e5380d8287a787de997ce19d37ca09 +2594b973b56e58b0d14977b4180f9753c6ba97e5de6f268bd0d9c6a81009d3c8 +1a0bcfb206e17104f491ab5a736429afa5954c1a65bb7df664b7922c4bd041aa +4a2a0bedb4fecc36c0589e22d20f961c43e19aaa3f372bf4536644c19e0b4922 +baf7b50b04b6f7e0a6702cb7972b82fdc443ffbd22144dd9a5747801c587ca08 +815578b8cb6580c773d297f4fd1c087564a90bdefa63ed2eea4d44a728c84d89 +102537f5fac46638aecdc4e07ee9bfe2981f5add3d96f49976bad8fedec4bd19 +b352cc3f804a5109f058aaf9bd6fe1808166155c89c73cda60287c9f00e234db +b787860ba0e02ed0ef5cd7eacbffcae54064cbf5f0ac568800689bf02341cfbe +aa1902087ced298dd82db84866ed704b83fdb7e28b43154084ccb8beb437703d +b3a3215417039df5532da395a2d5ba64f2c19354b5541390d58c9ad230675e8f +0ae43962fc1a40aee6906e05a517c949eb03ac9763a33c232b3fc0b728111698 +685cbc993a0868b467bf7df14645d70739bad8dd0e3b10317ea9df08ca9208d9 +b7491ab3732fc730bbb33f062662db76df5622999109e566e7470d2d3cfeaac3 +f7de6b3d715ee3055126843b4a3d0d2f7f4e671da66a2bf4eba18fb4ce3abd5f +2fec20771e3647980766da5a9e5618a36e0c1c1b37f0e2732c7e0db107cdd357 +005a12ee4449f8b57573ff8b1dca68ee16875845ac77e89b8d3ff57d046acc8d +6e8930a8484ad26389fb6dbf0df6ae8b1ed9e689b6dbf205e3cb24f89f54f6c1 +240c693a1289a36bd5d286aeb94452c7d1238db5e904470bcf411db0db9b1a9e +97684013ad8e8377147869490ff59cd008c5a5104d08ba192f96cf9752e3754f +3e7850bcea027eea59aef4b18023f4b364423087b56b4c22e3942d6aa6a16300 +08703e93bf8a55509284cd1776b0c8c40777096ce1dc9aa6b5fa28e8a0030d39 +a9b64b72bee43f829b544172668b358b3cf3432f6d838ceb488f144e4b500ff1 +45a0edae69c61b7e457809392cde962540f36077803aec3e5e637b9ec513b623 +830204a7f532d6ea27ee2c4a2969eddc749c0dfb0d8e059a9e18347e094076a1 +15bc162c4979ad89aaf5ef22a715eeef6aa356e39f53e122259f21ddfd91fac3 +b8b6df3c3e91644b30102a9e656e6542926c13cc8401418f1c6b84953e527c3f +dbe3e76e2edf034b63f68c1905409b5f03a2d5b1bdeb97dcb8987c06f877603d +0c8bc8621836c082310de2fac8584fe5e453c3cdd1963093585942eedbb099c1 +1b659943eeec493efcfc13a1628b63e101a0a40ffac0dc492f03062dc18c3665 +d0b7b37cb756fe6102bd8590705b9de712f169514b8b6aa528e42e36012e0e57 +1de7c4cbd8a2097f0b3e4d6b240983657044e7184144db4d790d552e9d7198fe +b3131ab841d51d2bae989ccd6525c6f8f52f536e9a8388a760402af7572a42b4 +f49f652dad74c2e3296aaf7b6005b5e3a8d95507c145744f071c6f9e71c43cb5 +7760b0413ef195db30aa604b362de810c56d438311cbd193e540c68dd86b296d +2b75aa450134ce06d0084c2b52e7afe6e061935084759ed8b7bca87e58985741 +53255144a2c75fe57209787204a562a2d5a8ab5e14816075be42e56a062a695d +13553f37570985410f780f849926da1470240ee9246d36cdc06082425e381abf +7707eca0ea73e1ebb268494b190b020cbfc46d54e14bd0ef6595d49ad50fb1c4 +13b1bdc640a3a249102f3057855bbef5f17f1ecee2323fcfc5f85ef23a75e114 +8ff0538bf1cee2bdd9535aba93abd484d837a88c36f6270241205a1e1b0f50f9 +acf34b5175d5c41d93d406a606ba5a9fa4ad177d73b2d8e830fec7280100b0ee +65329c638ca69430f227ffdab6d8535ea52cfc4b31d6edd1c888049499cafa73 +51d205e533ee0a11e531aa5b7cc7daef28341e15b6c868535afa65529ec1fb00 +ba680a5f9aa6f90db191db3c0a19bf54291beda8f02f73e692075e1fbd287bb7 +1ee34421d52715b3a1bef464d0af2d367dd6be9ea9dbd2926688c09ca1a0e1b4 +3261a0008201f1663d471a3d758b28f1c5a8be1e904502e34eda86d92b8d420c +09febfe3f294e01915a8feb99feceec3c3a910c53b475eb5330b2541b41c701a +d17c810a269767abd65426b3e95b33ef098ca20606c000a8e906332e25e6471e +0e7d662bdadadd4ec64b301b415b8b7adbed32fef6b484809c8e8bbb98d058d1 +e68fae1442178c9a357ef1239b8ee076c7a04381f92aad974589dc543a4513b1 +ff178b50671ba14780cd777efd5bf09ccd81c2ed6e3bc723596ecba121403fa7 +e832bc13e5a549c311001a113e6c35786a65e654f83527e319233ed4130d20d8 +c2bfd29ee477e639eb1493d09078266056bfe3cbdf1e3181c607ddc24140ccee +fa9c2774246f2c93e7e18822f967b2d67035476dff57f0d9fabad245c3f7e287 +351affa20a22dcac4e8709ecca97ce660172a5a896ec58bea7f2d45ced2b4885 +d27b124367b65de5397e773c2829755972821c8fc029d91ed777532a6404266d +c3e40c32358049c6fbcb6b6e0827514d8064d0787bc4e232465908ed25db2cae +e66d3160836f0ce4a9fe4c06895772f31fb6a0a7db32f965845a6b12d3c018b7 +321e63aed1d54fc0429ad1a022c44f7ba340a3d584cd587cddcff7fb299513b9 +3d4dce430e28af6a12515359866ccd441c912c8f4f1bccbc00a651688a909516 +567a8b6264da305812330d6a3482b2869d3e108ce3d7884d5a53d20a84f08fcc +359dbf9869295eb94e154dd58c6097a8feca591e0039cdee5415c768facc86ff +1784aa20e914f1bdb3938a137d09359d65d5351d5aa30c46d57444254fa97fc5 +2aaa91b4c5a350b5546a1c645d28d60c9e2e1c172810c3f522a6a982c442d262 +0215def70617b5facd0ff4813365e817c207163d58af491169d5170871c4e353 +2cf911c2393cd627c73d591b500206f420e7ed5128539ff74faa798ae990df72 +d72b7c724070b67e0c032b086b11760f7abc6ca32788fc0f382282fbbb30c453 +9a8f3c793cab5762afc63b996421411e25bcb2466f1a2eb451f20d49e204a006 +51bb615f14c511c57108d08139afe3b1caf4d5e26af909ccef2c4da1df7cbac6 +445c366d5ae5c8c3085411ab5c27a9a105501581c57a26270f809b6d6396bf89 +025115d2e8731d378815abbbb637d13ddb8e871374a58fef87c6586a47dd99b5 +bd8c4749ba5f1f340a8d3d4f237c9c5a57dde560443e1ac655667ad624fc9462 +c18a75317bd8b0e953dfa96871d6a00004fe1823264e04966227cd079564bc50 +13ba790cb1856b33e3b857a5e9fabf0dea0cfb18fe337d6a0566a72484631396 +e5b5ad7cbc0dea22cd13a8a4f077ba1872b602160a9adcaa68aafc759a78363d +35aac022ef55bf2c760fff76c16678bb74f3a9206a85a4adbf6b0e3bb4d3e4ee +b3558f6bee823a48f62071eda0c220023cdb400a28251a2677daf9ab2831bccb +32143cb4cb8ec6a7c437cace06240b09f6a8fdc7786f02af0ad7c27747495c09 +45d09871028c14ad33d661bfd0ef987570b10838af72315ab79c7e4186ceab72 +322b65635b9c2e839a610505a43b82f6e84a43b2b501e5f9727baaac91224f2b +b268351a72fd17d87e951d1014ca44199f828df4efb0beda1906f858374239ae +1f8b1f957b8ae1244119f72f035bb6d65385ca0ba155bfa9c97d176aa1f66b3a +ff9190159758d211c45ed2f1d6aa919409e7c89ab1eb46285fa3f062b4069319 +515e88cb84306a498a4f7251619a7b8c6a8ef6430a65da49563d82e908785b70 +bdc12a18d08f7edfe7dd8dfda3c2a13596e15af4570bcec1eeb14d29d5ff662a +2958be2cd3333c3aea2f91b20972246d9a61a7732b238ff9e233cf311c49bea9 +a83d354966d8e964b0518f0f5f16cc003b589a9da8627101e51cd2ff759157a4 +8a9d9de94c6d47f1579d021482b8eff62393b1285ea5e521ba09751b9b722d77 +1690529076e745164716242b6dd41ef4fc5e95f15924b43f75a8c689f143ae87 +f5e7887a9873697a8c4131352911a8e50004468c72482b7a38149e7abf8534b7 +2388ed5b8cf474b3a3b78ac89e840697205b569eba2e85e2f6416d41149aae6a +9434f7e8e95e2eda2c8eb78925345e59728da3310e9d5da06b3b88569cb7677f +f348e8ed02296d1c2d4523a0843936592058e916dfc0524a8f240dc760867dc3 +0eb44ceda8f3d98733378ad7b24795574cba77f641a4498102296c985f9e8098 +719c0992a5b77292db052593bd5b8020c8fe583a46e804c00c715f1004e627e8 +bc976f9208c6b3c19cecf6158f27a80cae345ee464b2eb14ef033be31ca9b0b1 +a1dd40d025d2fc0ec2e40900a596bfd205803b1f4341933e0a998100e343fa04 +9de20c2534a06deb43f8f3d0a2a65dc9dcfcdc052282ae177f478048b0c1916e +e599a29d36fa69075254e29ca1d158d8c7dcd2f7aa643a3a391380dbb5258d6e +75ac53529abbc2bd29c803285d2a6be5089fb84704291d4a6219c040efb8f439 +07261d057541ccecc7846a3b8710c47f35a490a5078a6b4271e429e77782f315 +90dec87f91023bb8c9d9626b8dec28f4f15a88ad2378abb01c8ed262075f6f96 +6684c0b0c987daf6f52751c00c45c390e3929e7364b1959d5860f693b2e2385d +5dbaf080163e6922b88824f632ca07585d8607d9e5af14980558e6fde1008972 +fb77980aea10e2fd441a0186461a802572a6fc72e64925d7acf6f60f3e5b2a93 +fa3c76bf1963936286f496bedc875a1c6b51b4edaef334193de9f0a4cb00e0aa +19de0a3ee0b1658deb23de3912ce82982f7666df1167794e707a5dce52c620a0 +7a8d93ec150f53f2ec22528ea4514f5e8b47159cb7eaeaf5ba779fa274e34245 +1f0969e3315af81bd0fe268ceccd1f20d7ea709a3af61ec7726863ff1e5c2b44 +5d6c1da0ae53a2e62dee5f7f1a518eaddd3a9905f4cdbb74f62a16ad2e9a3ca2 +16a2eeb7da59521b43d9b358fe7fe5b252850a292a0112d22be0377b6be31696 +e342592437c19cf0e5fbce729c395fe046bf9412a3fb11e6182f53ad1124e129 +244b19c5dde1adba250bf9a82daea88ca70fef20f81bcc21bb7547c65c89ccc4 +8a62a161a541a984e6284cbf2e1158f053561ba3c6da02cf176afb494d1e020c +dee46d50a8dc700e6b71742dd929207846dd02ad2e5eb5d0db70d6267305fe4f +d99c1f9f8c260cc8e521d2ab0aaf5baee24e2b7a168aeb971aaaf2bf207593bd +466fa0a2dc24f2951557d02af2de5a05ab226b2fdf7d95259814db46e9e3f069 +12ae5b7b5c93a3b024922803ef16112acb0a383af5142ac274010d4ffa4ee7a4 +b5460fc628b6e8ed5f449a4e879c8af7550e7ece8c63fc00b1f31a7905251a6d +477e0b9dd1b42eba39041a54db3ec7349280eb9471f09b507e2c878a5e9aa8d1 +3f6a0d3e127ada508e3685a272ca56afba11347addf873b229fac5b047e2c950 +258f7d280a9cb608639702ae9e78ab11dec0bd348a7b9b43a53e30afe18ba463 +36cd658c82171f41750ea125f7bdcde7837c36b8309f8c7ef757a08dd3eeaf4b +4c28d8308556afaadcfca572e9cba9ea6bf5ac682eb798bcd62f5e4d97a8c6b8 +71d0de906248b1b103f461aae6eb1ee2ee0283cbcbd662c94468128d61eef30e +838075f383b3b4606c160bb9e702c2839224342685ba8673d284f80858530460 +5b82b2d44ac5ab01b426bf49a38647870889fd8c62fc5c34d3565aa0ce8d74ef +1fb14c1cd8d6f4f1306166698b0fc3c0446cfa14c6bb2d9f6ed7d7361f8fd573 +d4e032772529fe2248699a10b305132e0b0e03f8c709ae75034468f3252be6de +c005ddd79a854116edcfd4e17a04e5f737df69e0a6347930dd7dd8cf460563b0 +e85af9fff730731f3778faf6a95d696075fa932491fee95b206b652de5e35a82 +0217f13e9b0cd0f7156859f1484f3ccefbfeefa8ac8f006299f7ee663a1da3a5 +142999b6b0520696a17faf2eb7134e8e2b37664686a6bedf2cdc70fc66f7e970 +a0476a91340719ac17958179770cc2c0e38a6eb46922af669a531aa0e927fcec +309a7b121fcfa2cef327c4e71ce6a7fdaa611a0db34ddf0ab5250b8dc6770384 +c49ae556dc1a613e98f20a3792699275ed4d187c87d412a15908b6832d95ab4c +865b2af89c0e471c46fbc6d0686b36af4b12c3684a7f45d7c2d9d9817361df14 +7c5e95c3a813daa7048c0028afd43bdafcba03c5c74309501d0494ec31671d29 +b30cb884d9748f0e2b7a8d4e3ec11bccf9a491905628d2c4b6b40f8bb5d0b9c0 +b0acddfc846d84487e9c2e7f0d82b991ab2ff2140770f2492e3908b6df2d86eb +b23af04389a27cb3ad0dce5528059a519a6092a18f3a2b035cefd46d885d4654 +24029359070136db35c346acb8b288d36dc85aa13231fce659d4391a8f5935cc +c8e47200f97c15b8ebb5b8abc023d027bb5e8211d0595548e0c95ea47bebf498 +76ef585ad3b76331c75fc41bdd44d82671ac32fd665bfdecffd4b8fc61255e34 +58476113b59bec5aa15b03d623912276f1ac560c0cf18bd9043aca2c28e805d9 +d03de88dbcf10aa9d7d0b1cedeb5270871f632f7b703fc8eb5020e76a638bc75 +40cadbab7cfedceda58d0254ee7e8e48920b21a7cd38cc350cc6b67bacf468a8 +a246fabc596a2675c1fdba8cce35c28655d0e82755fda8a8b5bbbdee98c30d91 +c81f08cd0f809e1d55a046158365e04f224656a6c46a43a3f79fa2d55cc6e420 +fba22da808c4afbb03f6f7b0d33be67f9883b30a1c1fff85f78badad279de4c9 +77f1d9f16a5b9b7dc8abfc85488f117a5cb317fd5c84fc1e59ccf695892e6ef9 +26dd71c9a6c342a877406f0258adf45810746c1454627eee0b7ccf94ceba76c6 +7f1ce137f97ee6025a23ad42a4cfc2ded9bfe7e206f31a63e65bbc3e304ba088 +4f0e0738675e2a4535283045a69ff637ad95c9e0b86d834726e2ad29ab3a03fe +71ec91f8c8564ccd0069b552ea28867440145f767db71486d2e38e5a0a3c6099 +b6d3b57ab4513a0c25897b46410c783297a9b280f138bf91bb17f4f5d5bad5e3 +f858fa265cb1c1b0d0d9b84426f0ee6e4f5ff5deb2e50ba82d3405de51fd265d +3fa7396ab39ddeebf8bd2b61af0090e349863e88c9a5a280c4693b6e80b88aa2 +e9609721b4747b18008df3517ed1331f1dbfa46b00155288b7783862ea9e6498 +52ca1ddcab6c190aec0e25927e8526cdf32030cca61f071325cda7e0dafacf8b +c3cadc3ddee55640a7c627beb2ac0cb38e3bfa38f9c3a49cd7a400be740d5f67 +e59582031ac46c467fb35622ccc7b627718f858abe34a43e5734a74681ef229f +757dcbdb302475577d18d5cea044dcf3a8026ffdbde20a2585fc84bf53d6504b +ad3dd458ea271e5bfb498f9289849349a0c8935843db2382069eef873895c978 +341bf3c1c9535d13ae4ef05f135588edd96bec9066045199a8e76582dd9c957c +2fdd24cb36b53692448ee0db7b1689118fa13ad5f73107bf0a59fdb32a958438 +6d9ee99dbe469d3831f43773dacf2a228276d076b9144d6b70b315658dde76d5 +8b949e998c0f4e0c2f5e2e888bd316001cf0c981e9c89f69ab39c6892f658eaf +5c754c0fcaea82eeb8a443cce68fe5cbc857d99df78215f00b222f799130b7e1 +8d985455482cdbf5b9f8eb096fb0966aecb5bd5394f4224d85fecf80632fd858 +ea3aa8bcb7834df7746ac013d8b980eedc405df342604a8f87d92ae38e5f758d +4ace6d05c933347a85e08e6b796e6bb59ed8c7fb72d1ac04dbf57acab8875e08 +a5c4d4092166ea473dfa9c3da7e61c53b2249515365cc89ff4e5b6f4ab5d2514 +9b2f24ede7e8adceafbd8ef9d01a89500bc0ed3ba5d691dcd4719f70527ccf01 +ad15912e288dc397de28a0ca73837d54ab4f67e36dfcde2d75bba41fb152b312 +0eadd98894d332b20ad05436a75d0874a18fecaff6077db4ced96a6e91c2e4f4 +65cdc8e73b23299317a7ff4b4304c34ba43afd9768200e141a7309eb837223cb +be451fc43db69dd2cd3b1cb6b5e879ddeb6990f19027ca2d15a90d11d999e519 +d7ae9f87b009ffd95c5d3b5f8d0ac22629797ce6374451ce62d659ed1da0a826 +26ad8021bfb2db4f00f81b8e524b217e3347c2f93d9140e817c7b49ee457b9f8 +1f5b49c665ab2468ae83b087f3b6454913f8498db5d8f2ce02af56f307042c8a +290bdbf72c24ad3678e0c527129817dfa5240c03ed78153e0cfe712f301372c8 +bf4b82df2ceaddf1b819b828af9bd9e595009c1d96700a14a2ba9117a04dd425 +bfa4672d7f1d70df323fe6efbccd582ab3154358212cb5e4d1938b097185f53b +8da80ba35ef2bc26b88b8b0df9eecbfaeb6fe80893eb48da291b5b6674c009d4 +b9a473c4e191b673d693f865946ea5c448109eed42b054cbb3a8b9bfc1b30b3b +d021e90f56634c81ebfdfe6d00c97824729979b3e58481a0f6186093e4c74807 +04ad223b1a696fb51777c5695bc106ce57811c8ee455006f60bab6b6c43f1fc8 +c524674a638ed65aa0597ac1ed7052ab3f3caac9e62d806ea31ebdb359b005f6 +75c57cc36147841fcfac56baac914cd697fa2052eab5bf27d035f65cd0fea717 +ab06306d5901ee083f929cf13afb5a54d000f61524707cdc090cba1c46868502 +9b2469b0a29ce0178d61b66ce2f6b56d8a3d725687ee03611ea42f31f29c281e +8c4dc1a783171441278cbe383473f7f6eb4ded8513c5e14edb793bf0c98fdaf1 +1e939330122543d2725d3e700e0dd8205e8c1d16bea0314f5a1e993e0bd1892d +cd04efc67b855d03208086dee33d0297a853a1b913e71c7dc495984f7da86818 +7db70ab6e86c974a4983ae863927b0456534abdcf265133c00c42115455dc665 +6c1c683a43b373a1602efa87f4b3a1be04da20f7f51dbad3af313a5658093b25 +5156bf9693ab3ba5ab071cc5415e1eaa29160f8090968fd9dc458cc8830b500d +14682c560683dd5c3e2745bd9935886053181ab7d323e4b993587605ada1d9f0 +42473496e8e09f9af27f287c29fd4607a7e246fa3e77666ef78c0a0ce9c3c10c +5e75ef7385aa2078d8c98453449869d40d39a720e345779b5e20a3565eb47f78 +48bca3ca0e04daecc57db1a18ca96ec60b6ef42deea17246509dd81542f667fc +6d3b808075d84cbd3ae5821ea71310369f5b31c13eb0d122400dcc9cc52ba85d +6a7d2290af5e21268eb0e837e4830bdfe930ea91d4dff36ea26b2c4547437336 +4f5d8fbbb4ced10bfb1f3afa9e804c31c08057140e178d37408ee6f10b1f2054 +07839a09bee7931628b0720cc62160b3f541b2658cef64da994bf8adddd663e9 +668bf56e93e92edac17b9468bb02b1d90bc4dca43a508cb33e6d1f0ba5ef0f3e +cf43109894b73cfa7484484cf3f18451db8c0993b339362183d42edbe0c1bc76 +9adaa253eaecb81286a4c9ee0a89ebf9b85c5ea0198dffa514a192fb872d15cc +f70f773dc58a8f1f05d710f1de541327eb795bd5b3e5bd01dbdebbb33696242a +dc92a04dca1323151227dba59dfb17835f5da70889940e3fb886ee4453bddc3f +f02944799dfeba4b46272ae29aa6748e5408b90935a481be47303e5227f2e230 +5082fbff2bf084a05546d32b918ff8ef71ec86132f28a52777189ba8d05b1d00 +b08f9a78e37bea0b42ea7f48f53be4d72cef03c72ec948a4c23b16e7d3b54ca2 +6cc77493f5f2a767c0f348a0c85c85c544b0c24709e52272ec14fe72c719ea24 +61a1a842c599d4e6b8f175eea17429415bbc70b71433047e73c2ba5c4998cfff +30172a45e39f7fe86ad780ec28b9cabf4429b55ae8aeb38d6027922e985e725e +0a4aee85139bc1d3532e00b80b389e9d4c8197d0083323a495aa6ff75b613bea +94ba02977f79fa5752418ba6b1f4def3e66440985c525a581e6b75bf81997f9e +7d49bb437b500aaefc8423c1ea3aab735f87f7a17958a20e2de998148f6d777c +54ab5a128ea1c37e65d14f360c671745a2911313d174f12214818ca417e38670 +699371a1f7ddfc5c1634bfd34ba99cfcdb86daeb368e5c46d79b974b609448d0 +90b832c1f958142754571fc98c9cd0270fabfb5e8466ccd7f34e56c52d086161 +d6def2b38cb28a5126a8c0f233cbb7e5b4bff2e0eb4c8474d7e0515b14fb7702 +5fb5c21ccf4827952e2e20757ca37afcba30f4dc2b7e9a66aa9ff34a1ba94156 +da92b255835e8c8dcf8c054393537ed4b9fe616b1fcac41724a19abb7a1541b5 +d3e5208363e42adbacffd409b8ed46e410bfbde876c1b77fdff235bcfdcff0df +65998b975a24e2614a2a8ba89c2ab9f41469b409ec9e0a5c4234de73c630f870 +36060c9f9f3111586739972b638da804ea935ef2e74adcce254c9efe1bc00667 +9ac610b00a9c00a1e3ff36f5e982504f2fadd1d6c3d458819bb0359daf480777 +4d7e2cbe16f16afa47155c1cde36125d5e89432a508832c13fb8c7fd5ebc6440 +49814c8fa01838117f6d298baed8cc1158ff99d0a3a6c8e5231fb6aa4db98baa +216a556c04bf0e6f39c8c30f39ad1ec64f4a0db2827652e8d354a821cffd4dca +d23876224ed57795ea129d045e387a45bb88372e47757a16115b9ac149ccbe30 +982ad2a9207b175d2fbb72752e8d3dafbf4ba5c02c2dd6a15fc0490dd0f6324a +ecc2523ed53e2d5fde36b3acdb5609d70809347bea983fc6db80888420d82722 +7d1d237567be0c9c24a585c52fe3cbec727823fe2ec67152944ee35a65e7a005 +37e096939e42099a3cf73e4633cdc85aa3b4a2511e27223e0053fdb65eb85df3 +54009e474bda07b6a07da75957e621bcbe7a1e9d1caef92565c5a6c73664abf5 +fde175a64314f6b166351af7acb166b6a0bf596288a5ab613b80db91ff50f7ca +17e99d41d493031d1a5b5038303f091153cd08300ac6c3cc15860e33fbb3394d +e4b383b97b77d8ff0c2707fca55a838e0a2b5089fff480af5a50e6f07b29945f +789aa9333211be2ea8e425e00255f5a3725cfece8d262202a73db785b39e3188 +55abbba63de9c53c24bf11125f6f0d3b412f777795ab86c0cf9d9d43a2076fe8 +828085480e7adbc77fb137f8bd8cc8d26ee6435e7e3b2511e7a7d7a19d330d17 +e7d797061428bab2e7c290fedd6c0de9bdc2c5b6b2496b8356593c570bf8eca9 +c5aabe89434de698fa17ff0c08ec3cc13b60b4c3d3712df8ee02ab92a71cadac +3f4cc5e69aaad92774edfafd88d95ff90c9781d9f771c143b9918f554e3b3497 +4f822ccc3e473d345c7c598271e59456d2b1f75560fa36b02d75d040c23fc511 +506955ca16901774f7b4b9d2ff9f4e0afd79fd66175c0dc634e932566d067fda +e40a710edc1c893e919da8baeedb4ae0f4ecf0ede9f08e43dbeac3e62c97fceb +c434c60ba5c80d15f79823e25563e2d746baa0ef31ff6826c120ccd9c2323844 +9a48a624790b757f9f8c03e1c447c16de51104688d79c87461f610af5daed900 +748acd52bb3eb9d975d128adbbe794421c434cf21d0b07c33427b81a6d8a4c97 +49e24142d669e8eecef30f35a96390b81ecaedf8bf65edaf9fa12adbb895d631 +986008fc95aeb2df5dd57a4e09582d9ebe82c685c856769186f36433400f1be0 +1daf022f7c217099e520d05ade233feaaac372f2e7f2067119925b801698ca24 +12976934dcd628be992734365ac6b522b098c7f3d788eb86f045c6c9fa7ee89d +2d84a923ec1a6de6dda87bd949867b2a6d6f910ec58519088ed577531c624d32 +bc7c62116630a4ed7af8927fb6c4f4e65f000c69910841fb600e1de1c6a23f5a +a2a5d199d79005294c66dc160c38a880a11ec92942c01ff8ad5e5693f132b238 +12c90045fa8d0b60c6b868f0c7d2a27815e196438c884d2d82222125d2219356 +555f8a67d48a13b3662e988d03a2dd3b648162884b715c89d7021be05917ea43 +d1be90113ed3b3af434ceec723ac4cd314527f560bcd83e7cb3a764fdd8f09dc +f1f1f45fa4a47afa6401420b1a2a6cc0f28cdeaa0c83c6cb35fec7ff2e432270 +78d283f79547d6689b5450d02fd13ba6096e37b08ca096d942cb94ed324cb63a +55c9f171cc29eda44d10545dfd8bcdc4afcb26191f92d0c61fea1b106769e9d5 +234112650aa8346eff624a259f3f6833997038e24fe4b74c459b14841e2189e6 +2842ea4cd2693bd162a9e90ad5ad3ff82bc6ed2e7978093b9bf4caa1012e6843 +5c34f01c470eb39483e22a1e67faf26fa74ab7434a682072ade050e72cc73123 +1505db7a7b2512ee6f8cedbe6caa06b939a440c9e5f0d5497611c291fadb0948 +1b19186861938233bc62228b15171612f026b677601715bb4c5b1f2ba72db37f +d15c629cab69bcd96ad1a6ed6533b09cd3f6049e6d214caee58d4ed72e9f502f +9a9f5682398dfaaae732b6306076deb3921685b419f41593a46e3cf4f7de9352 +950d1f0a6843175138e8589d22efa6c4996098ec3946aa1fcb1245625d7c4e1e +d18abc806cd490f103da453ccbd52db6c97ebc5df69a3f94229994bbcab8805c +975b57fcb6ab0221a1c1c553cb64ab882cd3ece7da6b13b0505950c5d58ace09 +fa7a0e4ad20be0733d9d540918922c588bec42902f9f8278dc0d6729a31c01fe +7f90292b8c5c006035ff40f28498f88ce4d9981abb7c9c80b915f8c12062fc89 +2d49b55e06e3d1220d1d29c7844e96c259bd806ba601a6e6a1d9f34f15f8e10e +945679f99ba204fd1b7cf84adacd615e858dff1365aa779b241c58ca6d07ded8 +81dc8c5cefc435b9ebd7139879674385c860251ad25d08745165e0aac6b46c61 +49fc0da7baac61ba658ee976689ae42c13d2b36f2fd0b526585b6098a6df1f11 +a3943366fab8eb81c4fc2f1e510b4452d23c41e47849b1f15f992e9428e8926b +8a28f15206802507f5dce36de4cf257e56dfb6edea19c9078658c32212005db8 +5eb640885757fa5fa468f7267fd0d89dc2814828c5b1113b7b276093854b5fc6 +88a01863a861c535e227e98949aa3db4062f52a88a0dc7ec40d7c8a92e972982 +a0f7f6b0eff29154b5d0297ed270948f05fdefdae6126ee87a8baa0469512ab9 +c2ea9ac48d5a01d9160a3e38eaef6550cb05dfeaa33ade4de76f4ca4649c69df +2ea79a0f787768b7300bae785977076d4777bd0c76e7bc23f90fceb533dba7d0 +b9ce8ee3de306315527bc84ae9a14dbae631881f485b88412a5d56f4e69438af +33ef583f8e6516b1bb7414318cf785444cfe87ccf1a31af08f89c574b8394a0c +7d260ef39f50feb4df3121ccae4ee370cb6a769b40292d559de8cf00700cde64 +439eb7ab50b0547252b14ea1c88fe9c6f3b5ef5ecf8ccc010d488fc3c91c5159 +e0baa7afdf4af77778331e7ece03d8aeb6de3bcb9ef6370b9fb01855bc68ac19 +476a442d3c5aa77f9280e04ef51960b53492665b3a6d0e5d95bf545ba3b1d2f0 +b80cea9b814ca19fa6399e2e93280ca1f93a9ff39cf7ac04badc4adbe383fc59 +e81c19fa691c829cc5fc63fc56341b724209becea74960adac6e033e07838b65 +20ef9a40db38442544133888acefa9a6fe282e745af83c5e9d9acbfd2c73df57 +7245f691e3012c8ab3d9aae16adf1791f2de33765d2697a3c9cc01955d138831 +87b46d44db880c7bbfb5f9839b4800c592ba0e96484350221080f457c2ff80c5 +4794387ebd07cdbe2dbb0099c078d7ce26c89cf4d47f52b5796a6a861c2c3bbb +c28fc7321993e18295721898a059af827be695a1466572488fff3b00aeb24306 +743bef6b9616e0e69c6c123a86049d2038c9d58b13d43da51f4a31b2ebd6f84c +c72ff201ddba0047d6bba501edc889ba84bdbe82845df10f6af17e8d32cf3c39 +a8e9cdb6fee684b9053ac5bf867867745c661b4244a6e9d416b96c9e7acf7c7e +bf3e65a396917f5f3362091e221f30194efe419b15b01c2c172dda86af46b1b2 +fc5632820d48e1292694a3869d0550c7256eea172fd2c2c51b52b6a9204bb040 +6aff5c3ade4d44e7ea6b259aee7a2a196f96d8df445f6ba0439787a2f9d56dd0 +b7e1a48bb48c564f83397e299bb6e4de0a3ba3ae171095e1f29b30dadf456031 +237754be8fc42ecd1a5c2c47ba0a4dd454f9ad43b772a43f10b93b9f21456aa1 +0a6fdcb3dd43c9e9fe0029a3d78ebd534f1f1373caae0e69cb63551c80bcecd6 +ddd726fe1b8a10d46e0daf9b028f13cf4f2e248915eacdeebd403397077143d7 +982fa3be9b3690f299de482d9d9d30d1a3c73fc0f77a5642ea70a5a738c4a203 +a0ee361178d65dd9697f0ebbe7c03945e9797c2b4fde79d251088b54dc011dac +2461d15a29f76fdc80e3ed21625a1ce5ee5848b32fae9fe6db0ae668d5fab8d4 +65dcfd42cfbebfaf42b5a2a604c429c29031dc86fd90161e9d25f7426e485171 +d6db1381147bf66d92fa199377109b05723c5b2dabd5dbc157b89b7965b07dfc +bc1271ce306d95d2c75988978114e451e07dc5ea5a0a7ee2c4b5b560d8e63661 +52b8175c258dbfcbe57fc8f1369238118ec7c1ea2c8183a6bddae0def782d71a +9f0e4cffdea4ad89fbbb351c139133936b7d8331f17a14faea91b0fdc69f7b28 +c63c13383f1bd915c08a74801a12342b690288c0be035bd5001de092b0b0e04b +60d56735d50b99f9810588aa4231fc6c7ceeeeda1f5e420c6e8d01a0db4b1b09 +51057283a92739d75e494c69ee7fdcea905eba07480addd991fd2b7f066f84a7 +bd6c7a24a3f7632c0fa1965b0491dfc426e9efa2dd53c6cfe9c00bc1ade9b3f1 +54943704d3ef3d40cd97ff5c28cc2ac0709d9e765a06ebc729f16b442bb7eaf9 +6b8382db843cb5ac8c3e404b765ec45dd2b4ed24ba321d019592a37b2ac208cd +450dc7107b57a74e9b7381dab65d48548c665f7c9aad56dbf5d8bc64074b186f +abfd2d574801fa6ead0e1d00908456f361f17ba2c74c99ef7e26b7e8032b65f8 +ef19777bb992383f1f10d363fe7bb8ab7ce8dc304aacd1b6ef1b6b65d2d41d83 +0910a514c3059bef3f677b92fd2601917842f9836eadf6cd62a1100855bab14d +225c974eb123849a23514d1f50c622b258e59cc367d6cfcaddf27630eaabffdb +5394b86e724d634868ccc7e7991bb2997631f8fb35ef850076128d65ead586a9 +95cbeacb7e6de8edc0b369742cefcaa38775275a17a6c83d0a81e323fdb8bed7 +05f6261f7976f6f505f6c97c12f80eec0cd381a048ee9c7a8a05595af297dde8 +79803975697c31da784c5ca16c668d3b7503b3aae5494a4d631929870f9e603a +38e311ec4480e366c79d4d03c533277c4aa585f99a32475fc691c2241b00ccbb +c55c1e9b14851f815b162cd057f1bf85984a3393aee38c0b9ed3e9722495bfb0 +b13eac7d28d2aadaee2b280e48e5179743528efd7042ab6b7ed6dc2f4efbbce6 +ad43c35a3a0372814b1d64a342ca614d5e601827c1c18f8a347de9573b1f55f2 +2a3a3d709e17f7727477a45a4fce29efae3e16b80b6df52a4abb265577fc4178 +0ea7a98238174222eec322104e04dac53af8867b5bc0334b02f634602191d4b4 +960b4f482c46862a86e02f4c0b496d1a8108cac762022ce6644b4e6092353146 +c9c42942a74869c9351b3101bf15421a95a7ca34158a56e7de3a7d45d4fd2bdd +f1f5b4e5b3bc9f7320eac4f94655e8a42c7799314376d6fbfa29fa8f836a83c4 +c1fc3dec65d28c408d8f4460b12d6c63a323c0533110c6b6809d1867110f166a +3b41da821e59fb8c8b75068dcc4c8f8db77fef2e5d5cc965cf091b9f47369fa6 +1c1f5f5d501b11ccb9f43c3235f94cd287b944ff7203034f0985bb163054afec +484e0e6046aeeb50ee74ac84186027cac9891b1871980bb94de61a47c7379204 +cd8662b17cf066567c9bba779f76edeb13d2ee996655def66a0cf0cc59659cfa +e416a40ce4b7ef774185e79c76545ece7c498db03fa717a591f9aab08c167ec5 +f2b4d9bc25478aa6697d0edde31041f185c965b263acfb2399c5695e42901822 +543f8830ea58e49ec7189ea0b6bdbce349ec55346fc238a7a6c4cd6652c6c30a +b5c8bcfd382e6a1fcb1344323db38fb9829e4ef506b21fa5b6d58a92657c05b2 +09adc73d93897867cd867c915cb7ccac7f1170f9a6c555ccd4a097574501b6b2 +565a57e5c1df5adf39c5740ae63016da9a566d7a830ca624b5b4c75685c95000 +5de2d662500107686eb62b3a8f7f9f72bd6071c85518741da3b455249d84152d +a165aca84daebf9395d469146bd4e35452d00f742905c9a47ae2040e136e8e62 +38dd0e9c0901ba3a9c3216226c44b1f80e41c212daaadbdddadeae082b016305 +54798bd555a251d380ef952d085457041fc51dffb6eacd582ce2e7cd1df623cf +9237da7c39b2167c7463bb427a7199588a6cab503aed16238c68c250ad9f1293 +b4904d843ee27e2c1010ec9f4d1190a11d986e8ab56ebc5615134d52764a3ebc +a9aaa1b7d5bdd1ca23bcd8fef9048c4ec2fc1b60853930fe82c133bdf9021102 +15ec5dca1d137a14e519bbc2e35f93508753fbead6543c66d40b28d828be75cf +2f2d3e116b42ea71772e07fe42f298945232934fb85f9b046e8fc56d843f0d5b +ce1594c5bccf37117111cb497c1532afb3ab347e3f555ba63bd47525407004bd +8ac2f37f632f253ed4bed95afebe62f2316c225f32f1ed41fba0f84d49cb80b3 +cb5503ff106053ea70540e3732b4474e5b6e1d53aba1b8ba36b1116d2516d883 +aa55e8401226b175450b8b4f1ef18d55e377f7b40f305a6df691d316a0ef17f3 +8cb4506398258e75cf230bb26523d391fbdfc331a74c64fd06b14441fe966641 +4469ab2f3ee113716cdf0415fa646bee2afe4dd3449dd1a38f4135ee5c4c83a2 +4faf571b0385d2a2a0b61fe9bd5a047999028fef216f2ba0dbd678572790f66c +c575cc82c4825aff3b542499519f82f4d1833c2899b5a46e7a64793c291c7238 +da8d2c0c7ec69978d3848957062ca371c8808f6d3244844d54a49ae57e92adcc +a97bc421d8cf01e3e2fef019fc2d9c3ff6edffa264e55a24fd1b7c32f4a86285 +3f9353aaa19e6918a3fe84c798e019eda844a5168397bc875368dfaf42514a20 +f8123edc760c20356bf81d8230ceb04730d5d7ab947ed143b6c3c772350eafdd +9636db454174c0de1a047f0e30370cdd4cab9a1f9d8d7f99abd8494ee82836cf +c73cf595a2a72807f133a8704172c069cc63cd317dc20d28e45d6690c25949d6 +6bd3293aa87b0a93d5675c42636a8837b71fae1945023db866ea01a774b5c2f4 +6ec4b86a3055327f28b179a6a93087b15e7c6169b7053d76026207c41dabd8fb +bb17dd3d49e63686638b4611b43896d1c7697e352c976c26fc58b4e1e08df30f +bd25f93e05f58892bc7f07c4f739d16de447d8eb84537e847926e39461dc385e +f79c2ba9327ca12e7033e6df84d8f044b57881e71f32d52afb2b0e61975e730d +a21fc31cce5aad86c09c82b7d0b4557fb79feb7e1ce6d98d26a49e8160159023 +4c5da702c3feef7041b5dc43ecbc8b2d66b7c33e5008a4d171ef828bd96da0e7 +4d8389f04fb4eeaf1f38865a912142c0eb9934dda5c4576fe18251eafd7608d3 +f35319aa2335e2df4a0aba8a246aa93324dfc19ea353fe27c47628f377259a19 +f9f89c599d11fc306e7181d35792401f9304662f56a2f3e44a1281ba24f4efdb +35876d8bc31f5e19dbc58ee35b98282167d21a1069dc64ae87240384309c42ed +ef9dbbd68dbfffd34c57a001aea0c91c36c2c8f422cb09f9456379f450edb717 +e7ab9b36b451c27f5bf10f018e25c57b1cdf4d2124f284b3f0c396ab3c806506 +ac6cab227e74d19a593671ade70455869614b5296d8768eb4d390a2e644b4ee0 +46a8d64d40633575087b3bafeea233f8e7f22ce22d2c190a0c4301647ce67668 +dbaab051719d516cd4e6e7f8c2b9557e8167c78ca6ca1cec05b79ab1ef61975d +c2511aaaf3f20e393099ccd20ab4b022d2b206d9cbae6dbdaf96296df88f0092 +aa318348201f37a5738f17b440b35e47d17f0acb0d0d255d2871dd5dc43081dd +4b0f9390af189582d2d9b39fba9644537ec6e1725de83991f190b5fdfef310b5 +e8483a7a91720758e329efc146c95771b2439bf2607a3f10ee247fcb1b7d5578 +a05775df4bc4ce1b59084f5e625e26e11243185d730fb8931455c3342fdaa91f +7093b21bb911fdb04469469404dd387ab3a61fa4a1347be3c5d69324ff67c6c4 +b6de7d8ad88b287265a9609a6266b0d9146c3a3dbb0a3c9dcdc0d6f04d48a247 +df9ea9ac5daebacb06628fd7c9feaca1d71c058fec7eea5ba7b14bba8c5ceafa +3b81037a197dd21919d6028849539f2be815d65057d23018049f2201c33608f0 +54f358433c3df8bd7c72f81d775f2a86ed7edb494db813e6dbaf76e405f64a4f +cb3240348612e2940b7531ef8a93a5978faf36e37cbc1a02f2b5e3337fa2fa22 +91a9d6e9f9969604869b954ced43fb53ea1badcd0435817d1fda2e66552dfcff +8acb5b5a5c819906a8fb02cc97f613f8400a9ab950e12d71f076807caaff259a +e63f0de2c096a63eb4451e64a4f904162252f398496c8670b92923b8f7bc4f40 +a53e324f50a66920b4f9f9239dc0a3da083791fb4e524d2c599229aefd8f64d8 +34ed26ac3f7af54ffee427e4d9ec3f8d7d91d4978d974be305028d3a32954d4d +79f64fd4b9bb74596c6f6d17043e104c664f42c70a3f526069cc369abb2608ae +ec16a11b0a8ca8095e30cccd7df1c4543f9e53c3ef8ee191b3213c4e641e0772 +d85601019f3c9b6f94692e729b87c5de209a92dfd47a478e7580399d635ac5ed +0bab11cd5b969e9af5bf1fa7d0865a518f177c77a8631784028fec51ee1ac336 +fd2d1d9c8c2fb4341187042ef872aa168b87054fd265885f2bc0a1332b3e406f +259103dcb242f40a07a5de136a06b03d3ee31d6a5f385ff1dcf76d1a996cdeff +76ad2f1dabe5e2d2ceb334ed78a9aae6c6ee8f17483a8e7c61f7ca4ba03794b7 +3582a8334cd5545eee22aea82e0b31b0981161abf1611c2e350f4dfbb77807f3 +3d3536c51f2a2b83e3a0f9b7ed72de16fc6503e9d8967d83a557d662062036a2 +7778fe6c9f521b3163a2692d16c4eff90d5fc06c69e98a4d2466a77d28c80c96 +5287008eb275a93713a78e8d542d4917abea24d60a0c90d1921a5880aa521fdd +65a16bae6b72b82f2b2eb2e46ead1ba9b9710b4847a0ed217bf98dafd5759478 +cd3e8ad681703c00eb13feb3e5ff2761455a70e0bd9181ea6ee4850b281aba92 +0d8192418492352b2c7ca6a168915de1951f774de37d63ebb033d774606c5d4d +b6bc72a68859237c5aa77421305ac6fcfb6e555ed3f52c41fa177ba49aa31bfa +fbd4cb3f5df1d87df5f7dd810d8bb6ece0a8db60385f6aad7d9248ae8eb799c0 +9e4bd4d2e06ae9adcbe4f5d4b5c8232aee85ce60357a75886f3ed6f6e0082879 +c36c45d57707f76f8bcd1f472271a56095d05f4ced5ddb6a72bf6b410c7cf0e5 +c6cd21d8deca9f8ab7dc08efc69e5ed7925a0e531eff73aa537704db9779e83e +097b9974b9d697521ea6b0f3a76820494608dd21ddf0aa164bd9830db40efc9e +2c07c02b4c7236688d8fc135757aafa153e75b8bc3636485112b5bb57f01648e +1e69d5e9e6ae84c2a58cce8011e71a7ccea36b8efac02f75cd506b402365b467 +ec1f9e60eb81169f8d7b676ed8fc4d5704b8d06eab192939cb570e0e0c2bebde +3671b64dbfbcc5376e1464964d6e05eee27abdd36e52824d80c74cd20795f3e3 +647f70416d394c89bdb150ba20bec76b2be5f157d1a9dafed474c521a214769b +4dcba56bac771999b3d3e172be1133d91755234a8d277b1d63942f0cc3933acd +641e40287e5340f8efaf9d06715eb2abfa57a7ec2791b3fe2bfbd3f939cfff50 +ee4062c9fccef2f3296143190ab4f34cbf11ab5fff417a6ccf01f7a1d7b47b8a +4ba4dd923b0621b26944b513e530352c92e0f783be39286ab144ee76c1e57088 +fe62f9c417eae4770fb7e27959fb74e3b6b3efcc36f96a5342d6ee780db6397b +cb0478b4f1f8245bd8465850e3a83816697eb16163b7d78d9e0eafb40372b999 +e173293dfa6efc2516703d13836e11f407113c49676b16f43b4165731a4c0f21 +01aa6f3a89d7f5fb743c1ceb44f97857555774a63b59f96bcf03c87b5057032e +4c8d1d6b768b7b0db5e444116be731e287ac0a13bb25e8143f15c493c417f20e +be5217df4041413f59e33f6dc1737f9006bc221c6458b1a5c6d42da46e84e3fe +4db8b35dfcf7c0933d4c1c977c5edc7d89185fde71534e2addbf635b819bd48a +595b29cdf59e590f2eec097e3241d78fb27edb9f2274fcaa3246d0ca18e4cd05 +81e45dbd0783362463adb5177ed036e6f17f1edfabeceaa16d20a176968039cc +89fd7902947fd931a080e2105f50ae2c865c1fb3629f22fdfc4f5c0f21dbf758 +56cb817833d0f510da858fd4bb64e91b30705114a2add3f3e8541a89825c9d3a +0bada8a21626aa329875c9f90dc92e4af23a7d83ddcf140888e3098196ddfe30 +8014fed9451558c2f74b1f13aae39a1a0a50db19609b237bc96fe275806f2e13 +6c8049f38fef87d5d0dbcd10f232476ca4153bf2bb3cede4102dc388cb05caef +723b21b6f6f2d6731f4c72cfed94f77bd76efdd37bca46c9f7dae18c05617a3c +1941d5bf77a25169e19f0fb50c5335539680ddd39e018600021856ab815e8bc9 +cbe764e4e06c8f7b20f4f84d404423e6ab37271d564c8f3eb1b1ebec03de7c3e +3a68be5edf58414076716cc454bb971c4d7e09af1c897ab8a5091024ababcfb2 +43b89e13ba6d3af800736f9ab077641c8be2849125ff20f3d760cd52d5bb6518 +afa9eb41b98094cc129c790094c6ac076e758ed6d1dae764ae66a7fba70d2671 +92afd13be3200f95432af7618203c6a28df7453198b8e426b82514648f8fd0e8 +79424287eafa66e276341064bc42dd35f670a2dd82d2c41021531532e4333463 +c95b0aad5247ad3b6f1582f2016e94bf1f9dfdee6a28d74e05dfaa5f41d1bac2 +fe4f355ad90c24361ca11c24d9a92203be1fced536bb855777a0065964cfc86c +d3a27f3ad545fff70ce4921e4479b61281f728d334093f90ff6f33b0135d91bc +684be649b6db580b1d34f38a491ffed9285ae4ab412b2e1623c8b6679422cdb1 +2263bba72cf82416e151f47fe4bde170ccbb8523459d36ef415903fbf38c4834 +86ec72ba6c9a02b4827433d39c27d3c7741d8a9dffed007cac8157d6e3145788 +45b0a5dc6a5c627d2a1e24b351d93e2dde958d206e434379cc20e4f7eab470d4 +e1159aa0e714d3d4191cd08dd45457319e2c41198923c8cc360532ae4f640b60 +7244c08e546c85f9d077e2a249ff2ea24a989abb69e861f8e71bf788fb81946e +bef9d0b05804417e75589e89d2b8186dfcc79b2511c810a4581334d6d215effd +0e8ebe5425d92eb19022582ad7dac770c36c3d6f86cc2ee279cf432196ea8eac +d3514db0d7f6c59e1a68401358a2d5aa8b80259afd002e6975d86a1b8b2bafc4 +5cc0983e4deda769c0fce889e049c00673ec87ae17f1930af5a5e2423709c2da +49f44db4dfec3e00507d4779d904384b801a43a15770a40f10752d29e14c253c +f4e2a01f25b70386667e7e5b2877425502df89a4c25b9412b8a1abc432256a98 +1e50c2e2c7527b6219d0413dd104b80e9d045a4f6e8507f0bfb37339f864988c +b1f62e3f68697b2cfbcf63178ef0d7cd564577d7a4d0517eaf8baeb8b81b5c42 +8273229f9013e77df1bedc6f04f380e3e90f5edd9c81c416fc78a02edac32ccf +a01c5d8b6664fa08dca3d10b9fcc59fcdba45cd41c44a2e0f606dc1c7f2e618f +ee8f9bcb4685f26fa93d73be1d97bb431fe198b04884eb2d75f604f7326e3064 +aabfc389b7230d325f32beebb2d0c339ca51feef98de442792c0b5b7bb4d9234 +b7f82ccd14bdd609816215a9921d67c4b891aebdade0677297e2b9fee67c60c1 +6bca445b3fa9924c81f46a0c88b0bf880477bba09b471da11dcb8e7c42714011 +70c4216ab739cc7e998aa1e54240f9913e0162333a49306ad5973c8f650200d0 +2123a5726c9e939db85cb8978184338adc1eaee4c892eec474731e567ed56618 +32bc375af73840f81530d8a2679d25b532495263eeec8a438b7a9569b01309c7 +e263f451e593689f209806808edef5a896c1632dfd9a823c9ec5d266702db77f +b145dbf4d34a371344437074c6d9954253da577be60e4c2f3e303e382890e688 +112c07d9e4b2b6e5e710e51e1de8399eb0e01c618cbf2d0c02a71f3986575ce3 +f2afda7f40e9da546ffd5f61fa12ba786a27498ba5a60e568e09a7c0f0b1341c +7bbc5552d10a3c23de3a76ede29825d50ae9c509bda892e6b3bbebff58dec41c +c126f433c9f7a8f417585e026468565f5b2f823388e8d5a36807cd6b53294c6c +bebce4329ae476c02d3e3e64dbc40b05c9d1eacc9321179491a4c760c0c14ea2 +a0b6fe66832957f908eaa6f18310690938a38a606f73132b44fab38884d169f9 +5826312ab82666de60297f057e98e26f0914a32f7b4ccd1c9640294909b17e5c +1b6d206c57221a5a17e9eddc8e51cc9ba343eed45493fdb9aa37e477da35a4fc +fbefb497d3eb070784ef08239303afc0f15b4a9d6d1e7ffe49783c3c4bdbb5f4 +7012884e1cef1996d2de2362492d8065009c863d0bcf4867463fd5befe4af3a3 +9730e869b632375b1696dd1b2479d21d98554ac1853fca848241b911b96988df +db0713c481cff11118f5f0e99479a79b5e59eb0031f083721a37de51758fda74 +5332f9ab1215884c1476aee17267c91d5b354314804d1f56678a168ec756b61c +d57d4a4476b7f3d280557586b0c0f88be44350338c1b43eae03d0f8f21232123 +6732997b3dc602628f23619a081af22185e1f0671d807f682885d9d7832ac477 +667dd8d99cdb3683cbb4758ec38c2982d4710ee31ef2b9427b9f0278b5a36b12 +8c1511fcfd79cd8bdd95f845e164202caa314bfe1dbfede5ef71016e61d47c89 +b880f63dc0a79122118304ccec4e3f5a7e9dd6a8d988664fe2165910a65b14b8 +27e34155b2857ed8af38eb81670657cef86b8151b5068ea992902fb55bd4468e +617216c9e4f11a193c5e8d5444700caceb3bb49365e2dc4771a58cedda7d6640 +fa370a4aa115a45d78e61e1bef9b1f47eba3ad1d690aeb1cc1fbd14c003ddf04 +fa374f156be114144cd4a124063aea75f383bc81759535bac7accdf27adf05ed +bc184fd63f064e97dc2b650f04ea22fba2c9765c9a90f00cd987a0bd5bf12f70 +54a870dd7e615b3ab5dc0f16879c7020ec4a60b7eb94dd23bae021d06454f6d3 +985e49bec7c5e01c8be251b4368d1f77b28f8c8aecf5a41b959bf43bab9f0ee3 +5a057d2671d5a408f48ec62be987e8df582f40931d1f3ffae7e9515df5452f73 +0aad038f607c30140ef336261a310fea7e13c18d44de07968367188b77930bbe +d3be4cb2bf84392256b8a180397af2ff0ad22c0107c333b0c690ec01aedb574c +9ecb935dab18a853b5de2fd79d63eb688bbfb55f8982a9f6d19cabc1d2f27999 +8185e5ff169c01ee9d41723c8762087b4e7fb05b7544972350438825df0343d8 +29005417158a5cb24e6df53d767c0d82f3d72c53bc5cc7de22d0c346efc28af8 +ceb4ee03194d7b9ccb465c0e6f9d015e1e2daea4a43d9b04d7473e1aad92e478 +d8f083b1b4cfae16b3aee3cddff25d6bac9e05289952044599c25143b6d58059 +9ffb92a171b10fac1c3f22cd64b9601894165b76f9da6021c90e1713ec69ec06 +5b3d3048ef04fc0f4da8fad276fef2a36f79488a5a00e61b3ccfe7b237dbaac0 +5e0a90e10eacbaf9bc7f47fcd09befc4e6f502bfcbf988327ff5ff8e4b85cd63 +f6f253e601c5b267488aaa1a0bc8b590e647455ebfced9a84e4126b0c67c5974 +8d85e0ad234d93ad38bf9d320b7349d5fd1b9ecddc1cec055903c9aa96584a4d +03330eb0e95fe7ae0ab895828a9512989cdedfd1e66403bf4122e293582baa57 +60b961afcfd1e529240b44f5943fe38629fecee1446d6a20863b603634dc0605 +3985d82a111445f7006ff79a4bde99b758c18d3cef4c6c281269ddc43f6b3758 +0c58462b47b12d4f79f1c8745d9a197851e00329bcffaa2e312f45b9a909a7e3 +353fc343413647fdaddde0836faea6a7a0740623bf43fcc3beed6a99b9803a06 +a02ce672574d41898e330f18f3fdb0c3493e377dfb002728be112e6625023724 +a89da99cd67caf7c1f3b395677169559b06d748a331e2818f27f50efcf76d881 +c09c7c237e3c00304b0d6f59dd7a12caff0b1af769255bedb43de8d4a0fe7803 +62d04729ecde386d5e85e3476dafafbd4f41f24d9941f441cbc92b73a3c9817f +ab397183e9a64ec258fd965707337408c4601049bd8c38d8b6f769ab08008f5a +badf01bc94d801e9561a9ff414d7d2b9401ecbace8a8b80ba5abeb5d701d02bb +6ddea8841621c977ef5d680b1d22b4ec83c1a749455c1aa9c5087035b832ad5a +c364bd1f18bb7b20f6c735ae149fead92d2c3a5403c46e0d55d1ad0fa0d4f1d7 +f9d670e5f0426e865c8733825102b6b92dde23679b74cbb5ca4eee791b93ce27 +e8abb062e3eb82f38018dfb9f144cc640543fe7d8ed16493848b5f1f31fa86e6 +caff6c5fbd54555940d3f1bd376f454caf69f002b91c2fd77848c3353a3cf208 +414155a9fabf34047f1d6ac10e3967f434218357ac6c5159698f21e53075122c +fa05ed1392431c4d2638965864baf262fb8d7fae487c4f755a782855aa157de0 +15dcba11a1c649cf5c926ffec3dc264386491f298d52071ea5b9bb50d82e1701 +fb5463461de9e98e029cc3b7d4621b16f29c598c10750f61ad95c1f096c3a3fd +d4a327adda358bbbbb0dcfd9ad6331e6a28bee5c58506eeba7db703a9524bff6 +2abbce7362e3f0dd61052504cef97f1725a5beb35edb5e08de8cdb3b72c2aabe +ba2c9f6340f95487edeed33d8fb9006b2b105a71dde5f440a0543af51b9d13a6 +70f0438884b84220229e992f3c18d0193267b133f8234cd5be9625c712913e2b +14697b6042de352f6f1afacfc6a225a4faba63826675f83290965a536ea3f31b +88ff1ca2774aab2d636ab6de2f1f87fb54a5380d3a8b5f9a303649a4f7c0de26 +626b97599b0a935da6a62d4dcf88b7f603bac672f6575bbcff1784271bf18bac +4e33df2ae95221bc09d7a58b670df76bd96d1303f66ebf40c3712eaa384252bc +b63d409a8f280ddea937f73388ab0acbe7f37145bed320d3efcbd94bfb6e6c29 +9ddd6925174f858497804ab4688db812cca27262e7b5713979f5d5fe167294c3 +5f10878e60950d1b9d1bd4f7f10c0c0e1fbbc095c4fc1856f4c04d85649b8011 +5fb0dfdf37f9604f4a9aa6061b5029ef157b757cf3064a9aac5aac24648a9c15 +f0a2a74dfb655e65341c03139de98db3dfc2dcbb39bffafdff9e67d734516e0a +eb7c111c39b6ee987f99a7064f98c4f974a24466f60dcdd9f8e526033bfc238b +35a5d78df28a114456211b5d26a164ac45bfe67bfa3b39c4622d67fb8a305d03 +e5b8548d0c01150d18ab5de5aba0aebc35b456c42933ce0370f8e8413b13bc6f +db80d558ae7b5a32077897e3ef1eb98b93db5c00f34f33133d08a6a8e7665e3f +eed2e1bb318afb48b73ed72bf9b6234c40f028e76a5a0f902f8702ea234a92b7 +b8dd516336336c31f9baf355450fbe924c44560f32510e183a976a1f98e0ee77 +e99e26faa72e5e7bb50248c336e6481c1e7b00596b1f511db2dbef7a288edf8e +5653620ab52f7e3d10921ae2e194c6a842ff1829ccb8aaa542a53c04f8c23cd4 +08b414afdacc34931bbb91187dfd8c1f3bef02652e042adeac4b9bb5ff5ef7de +60926e02d49e3d55cc1ecdd555c1f4c1a1083dd19c6d58972d86558198314511 +4cdcee4aadf3799bf6d81ec7d4347225eee6e67126fd91937c7711072047ed3c +4bcaad89c800e05a3304b95dadaf9c7333f0bc8aa1d711122176f3db92d0a4b3 +30939d1b554d47893be691dfe0e5c47d32928fd984daf6c03f32c1b99efda210 +faae4a783ef7d6eed603d5db1828c274061c1fdf78c40ce76a7949af802bce9d +d84a726212e23d97b0ec1e975245826f3c49c995c08940c680c39a598553dfef +1b3c7232f0b698fdce76a0dbc3a2fdf0a53c6a0a48233a322d1701bf43c82bca +12ca3393662fc5c4d38a693c30b9d3c987e872b91a0bed138bc6a671573d4840 +46c9adf2cb62df79585011d6d61e2159ba67b4e7cb35caa2de2ec53452dd6d82 +f488fed31ebb907cee7f61773290dd0e0cf4969f2f123670d59d24f909b8156b +9af55056199c5a1a4d4d3f72eafcae937765a6e041f626fa9ef67ad918d9e10f +328b3ee0aac1fe1d3a0231ee926659f238c60c772fdb1d13ca48217e43a54b03 +56cf7084cd9bcc3e0e482c18a1d5e01cfc1ccf0cf196af73f676b915e5efb9ef +5427d032e8d4f9cfa5fed93f85707a1cc136b7bd35b52a7a4cadcbe3f3a6911c +dc5b7fe0607861e73d5c36bda58e125d20c30ebe336dfcbc4232524a179d763f +6e23915fa34eca1e4050027a2b8b7f54ebf0b95a68960c676a0927242a436cbe +64f7fcbecf8dc5c850858725a1e3b701915f9be0a41214e42fe2b850dc7de4e5 +edff5f9c6eb1be2faf002a6c3347f5895a6b39f8a4ca5aa65261b03d7a17b58c +b04fcff305a35b1afce3bc9465770b512604209efa3052c2a455ffa83b870d21 +15bccef823883d2a92d725123912a9e89b4abc02185621a728a447a5957d78ea +36a3e8640e9169a850b4a2cab7ecf9ac05f2e0b30c6f626a1f59316e29081c07 +5b22a491b8cc89d149eaf7216cd9d55de0214ca1e70a5cedeb9824894dcccbd8 +dad1e22d7954a8434773ddfcc0474ff722a521462bc78d20369fb9383a6530cf +e8ed7e26bf47e61f7d16c44631edc1bd494c461aedd67ab56aee434c442927e8 +1acdb71ad196938935646560a0cb98677a64431ff44f2e50552fb2706f206a1b +39b95c94b82c148e1a3618b666c555a258908f96bffdf1e6c34f65919440e8a6 +4c10982dcb24cb5ae5ee34981c9c340065bb0a6d68b1735ca808bf5593d86440 +6bc88f81d3c9f0575216f2f2e5d7e12df7459bcfd90d217f4eda8a8d6855e960 +e7427f6f3630ccca0d72994f168eb9e0b7d401e797a1b3b250cb11d3873fa3a0 +4521d64a5c71b3bb2ed62c762184a15fcfd4290761f54e5c2dbac8a9e196bdfc +0fb03afdfe8c441933c35296063e4a15699c82b83142ca7ba239b6c65e3fc1c4 +e287be933346e534d611c38b85b298c51dacd20fa15f91a7c84dce62e3f9ca70 +000b6d0e62ef647b47f8550ab0b3e0e0575509f08d73b522653610f2cdaa60aa +a62677a35d57d06e9f15d99c7fdfa77fda7625fb3f418bcf4cbe480d748b99a1 +2e332920f119423c75e8d3b18de4284155230945da1e26b73cf56aadd9e20fc7 +b94a75b55e3e5ae6b51a831d087e6e5b1606757ebeed58b5895d47546620313d +80c230bc01b17f0e11b70e1a9b17bd878e2d5ab31e3436c92e5366c5b92f2392 +08e2c6994fb869586c4095ab7c559bf8c70ba0ad8cc13ece387c57a6f79dc107 +ce6f7821f77c6e8e493f756453512038b01f872e90dc1d9cd0b82026446a9dde +fcceb653599aa3b063fcec2f7e9c80665b65ea21e69b82ee4a99ea51d9441ffc +0f2f7dbe9d4dd204cd4066874b85ba361fd0aff5bc11b8852625701c7f174302 +e60cc1e257e6511bb7c819a8838501b1432710df25b653e1e3804e4749cb9abe +f08ee2a0b28ffd07b9742fbe2d67d568618a593945959a706fb055abef058a45 +c07d62ad9f63c2349ab441e2d72b8be49d1af258e365bbfea63da2449a87aded +b306753dd10c806c0c9361cc27ca6f837723cb538ced898caffa815e12bf5e9c +819b16a449f8e9bc06a8f8ad631ee0e8e23b42dc7eabf8dccb0f9dd14f129d23 +49dd04e23f1e033c95d11fac2e2809416055546a93c9d1bf3c95fe8cb4cd8cfc +f0f7b21632bec14a136a9b694e40e36049c6f233e01df150a946bb28fb0f000a +4d99dd94b292f45acd9bf8cb8269061bbecc062b64b38c526cc7a55e2aba039f +c3bf691978904c0152d90c85f5c33779af5101a6ab0eac7577624649c9ea8604 +b942b0b966c3c6e670601cf3ade97a20fb5a7a79e5c3c0d5a7569d615120e89b +1c33397696744512a60789193d699802ee1f37ab3a13f8c007da56db937f80d0 +b9a23b066971241f34004597effea6d0625fcd9f18258aa378c8fc4a41b7d1d3 +931d1a7d17edb0d36568955e81787f4f2ff2858855f60b3061a85e6cdebc42e3 +44559734780c07989a41642720daf7cb97bf3be7acbc590d57f1791238ac096c +b373165488fec94045578f0a69fa4ed0366b94f000045ecf486b0bd54d89bbd2 +33d1d814886fff091d6bf567417120895056372ce8d490c02ee8c0b40634becb +3f13ca1305f352e96df55e9467e16ff92d2a2be8b1d65eac380e41db62be9d4b +341f4bd6aa69349791c98fa61490bfe18286bdcd936b27b18b6675733d447eb3 +79d07b8cdd7bcb3f1297d4c142798d6871bbac3752de9b23ff6853d5438dbda7 +6b33d3fe159a064ad2d2901d5b31ed8a3987ade8fe06cbbe7d69716b4a35c489 +841220a5365f0a000206619b081bf55dbf6abe9adbb9aead2dd25b66896f81f0 +9c1c9cc4332972ce1ff07930421dcf83428e6fb32fb86c6089495bf91273d7df +681070765ffc1eb22f5a31a00d424f99e11bef8067980e3d9f0e66ca266bfca1 +61413cfe419bf03ebffe788882aa52b4ac2b1928800008394e18fc88a55f1db3 +788c6882da7e4a1eaf14fb1dbe6ebdefa5cef0d686245c1dc794298511d38006 +2fae24096f728f0aa080ecc9d85e5bb0d989c5ea82fcaef430cfeb7aa9f6369c +74cead4731d892a49458cf89dbba50d7f6ec38140852169dc4ab886d92a91a61 +40fa81b25b8c93393837d64b8c390389205b36d444731b3ec745a944b6cd2d4c +b75a668f49b01b6689ee9d3bf88be3ee24d39b00e20b4764513e0b2813c5d4ab +2d067d468ee2a805e3ab73c05ae11e55b1205af42fb851bc69c54e8f3f1083e4 +4b4f781cfa7f44ef6b1ddf3163567d125e052870995761b2a9c5753e867339fb +781f0f80452d6350d4cc6dea0c7c6dc7ebc3f1d99653ab1374b26091e7247364 +b9ef32721378fa994ee464b5d653438bb181e2d5af0d52f6f25955fe91825f2f +504ed079a87da169ef93971413c2f31fe10ac677b7d533207be18b95360d9aaa +ba427161e12af468b4d05e929406396ab010aa775b3746098a044328ff0e98a7 +e53240a0a3a87e955b3e7c5dbacd9a0cfd7575ad4cd9cc22652c7cbb43a29764 +01ae4868bd7f4530775f0a6bb230567ee11d542cb993b2aba34f0bc38a36204b +85ba53df1d746b211b1bd22ba85d6a7dcf9c039527b26d950afdf4892d186b65 +c7ce1c2de59c03a520af9d013878e989d6d5762824733cba8a37b01fd7e3c169 +90bb8b8b469767dc749663904285bd4fb4de7d363efa8fe2e058c641744f7678 +99f9b384fafaed93e9dea5615f13957c8080388b70c478eeeeaeff2f0d3d123a +04ba45066d402c6d1afcb4920bd0a07a386bc5876c73cc5e89cf3f2fda80a47a +63c7d8a2403c2c767625f25f2407931ca9f11d3f3f1236a77c38aa35811dce4a +ce4f9fc2ec53e0d87262fac254827144e92eca37c09e73445060ff736a334f2c +c1d6789ddc6f426024e6765fd9815f3f2636fef179784f7b47ea92a3f6b66382 +5fe65c4e219a2c43af91e40ac28c2b7a02e7afc1751b2b24eb838ca55bd7f66a +9500ff4ad31cb1a627839334ffee506f87b0c44b50c4214318aa8c41551a606f +e3addcc30fe261c4859fe204feb3471d9d5356c6508e2c37616d529aecafef05 +25b67c8f7cd1c26cac2d990ea57f3f48b221d288a034768646ed29db82f0b471 +fbfe3a70debbaf9736df89e7b054bfb1bb6c6ccb6a1a71f9e11937f156a75291 +5b717c9a40c8902740e1e5eb8eebe94183d9ec18ec857bda2635e0eeb26d7ff6 +3edd21c1cb4be925f049878ef687007a67636effe6deceecc73e8871441c842a +117b9dd817ed80d0920ce1743ed6b8d9cb15c93725a4140995411d75a0f1bd2a +a10bb96893a7d439d3110bba9ee156d8b18627c7c2b8217969e3f6328b53b4ac +62dcfcfd498581b59b6d018733a3a5ed55eb759b83fa3b1c0793a247bbc6362b +2a8837413d0edad8ae649f3e06214a316fd23c5d0306f0ed9f8f5b896026da63 +d2a18c58352a04c540a3f90de5d56a4843e3d1fb90f5e712da7897680a7a1d25 +4d32308f7e1b8de9e8cf4535d9c525325a1ad6f543eb0b1fb5552dfe957e59d1 +e66da60051d6687fbd7231324380c9eb9fc8b6cf4510b043fa48019fef1c094b +84b7f5e3816df7c138f2e6ab1303b368687d1e3c7dbce4754337a3de11f57252 +4d2a143826e406e082c3d7a69ba88e2871a1cae22d6a7bf1ad1de45fcaaab235 +038cbbb623719dc5533d36af35f712e9f8ac826ffb49b4fedcc96c4f30913c69 +ad0533b02a4684bfddb065c32b54652402869d8d6141f90608201397f3f0bea7 +f41670b138c6339230df305a07d31b5aad40ec48277df06092358bcdb3961bea +d551c94cd039fb97f46115d234965aed70aced9be3305de77c7f1a33f3292bfc +f965c53292a7f31a8926e038147a827589579842df86b16e840b836c23fe23cd +059ab92be7d7037843661fe65ef0dd48d31b07782b542f0b0852071baf3b2809 +8b95618ede124c9545b31323d1e454ada5a03e1a33ee34f6e1901d54fb90ab12 +ac146fa7bf5aaf50f0de423e8e47d45cc01867674ffd404060eedb137115f352 +c07f7251835a8ae2bdfb70d022c2700b79fcb83c3c312e7dec4001ac20919443 +acc723f7269d60f3d626dde9d961805ae77acec4d40419a51baaccda682de591 +9df8ac6875b9fdf1f1281988bd94cf1f5f06ccba48cdb6039787d63295fff9b8 +c2b84b30383dadf7ed216b830a38caef32a3279e86ff7e92865bb6b421166e93 +923b68a473de95dd52c986a5a4f73473560ca69e8ce5f7005e9aed1f2ebf81ac +397c9d6efd6067cd741739f7ba770b7724336429685d486ced5a122aa4d78647 +81fb6611c6fbfa68e7aceb2a757992b249cfbeba51bed32b7cba777fa78f6db3 +95641dcefd1a61263e2ecfa95938e2c3380a8617d4a775dacdd824cd2c2cfc67 +8a5727ada2b1da97f157e543f252f8d3d2bfba555cbfe089e8bf708ab253a4c6 +3f6ad9bf11b96988aec8a66984ea4952ffa81aeee213ab59184f8be355db5010 +17bf130f7d492b9bcc4b67f2cdee249f9b00bb405e3c580bc56dd1639ff81771 +8d57d1ca96b5e8df212bc86b709355d1551b4167b4e35b14a32a708d7df1847d +f80904addbffa67dc2098848c24b6154410df3c6ca0559a1855803ff6426aa69 +ccc262dc8a2636c17ab65c23004d5a33c7b6c801596f0089a033afd69006ad4a +f21c0cb08238c0051345e0f1b780e914b80b1d74eb45facb77b1c043a55616c2 +8ba8ad3983fdcfa07a3ed19ba69b97c234f89a296f581e4a380fc58056e72096 +7781f036f7c3691ca713ca9d886ed1b4a742295c29c1ef093f93d6fd507af0fc +80c5a01ca38c17b8ecf33b38fe224c67cb551e43db191968311c38779aab6c4d +0efcc2a0781f4e0758a99b13b520b75808cc555736424a4333029c5b95edf387 +7e6d17b114cb2821286dc34dfffc1e89eec9519c44bb5c928fa4ec44bf5b75d9 +e13aab1a73abeca008d75e73d72839653af898db554ce339a867d7cde546c249 +d0ac179997861a121cf2e1a1001154ddd1f337ade69263c021bc78724884f470 +4cc8b2ee48a1e91eae27a905d0e73a98b00c4353c4da0aa4abb75794b5617080 +a4a610ee9270af4393efae916b8c4f5af945d453e9ad0159deffdc96e5c6fcfb +95d9546275d8d7e4608cf4add77202df1894ba8bd0394d7ab8a066bdca5c649c +a78544a7b54b7c6745321da400d74a0c67b7c1f412901aa0c8c73d075918b4c5 +a5462d30577d848479987a4a6110b1748884576a374b488ed5d06e017880cd29 +70eddedbc04a39bf3cd2eb3f0a48dcb3b7679bdf0686e77c63b2fd085eeedc2e +bf04a42bfaae73afe9012890b088f75244b6efbdc2f37774da13dd60c89eb077 +3018a2d9707daaf64a1efe40cfe46a5ca252def56e9ea2abbea02e4c86eceaa3 +85b194025491448e9317efd74f3e323683c036805c158e6c420c54a9717b4c7e +7343b48e2e9cb16d98efb347dd42f9f2ebeca64bfca0d15c5f8209d35c0e6328 +f19be8be0c967c2f577d7ff09a9d1b4c6dee3d744d6912977e597be47e4023dc +3979dd6280d66382782466112ae09f2c8048c93df7c38176560a87e679a681df +708ee6ee2e3270bf6c8b07c15a0839b0b4c4a9beb898d523216f2a9384fd767d +07256afd80a51a2782907e34d1694b1aabffc98f5dec33af246e5fc759c452c6 +6b34ec94bc9d66fb80898322701ba188fe5ab3dda0cac7230f6deb980006b0c0 +786f1586d58bf75fba6f52697c8cbde27b8525a27c0b8bcbbc43faf42b419156 +eaaf3475a96cbf399605bbed9fe577155c920eb4a4851669ffb1083ef45ee35a +83eeb96f3d0586402baaeeb1b71c448639a1ee577c42a327cc78484f4dd38fb4 +44162bd3b5e6eee672e6100a818657759b899030a0b1105be1e629a391aa397b +888f0175e74c210ee7d5a8a817d4725785d2cd565059c8f08a6ad227a2645918 +5de5cb6bbf78143177a4aad766d2fa844dc7399ab1f800b5671777d074b8398f +dfac8803cf6cb19ebdc486db2f55b8d0249382dfea1732ff0ee0d8fb4638c316 +458c6263e9aa416105806a4eff7ad6abd753009c243c3b1fe505e6200a7fbfb2 +0e5595292589d13e73286122f291dcd71b708414936143008bf4e42da33043c4 +c4fb7fc1cd40fc685c923439419a441200d118c497892ca1c492c52dc1408771 +c428cbfda340bee7f84d0c2ca16c4e35a0962da289e76a728683bc6baf252f8d +a0bb4e3514f5127c513ed939ad1a585d7d3303e13af4f5c35db672658269feda +b0d139750a4b4a26253f6402460117d541e55c7b899f544078e7a435d78d474d +71f7bd24e01a395265cc80e525eb2185f137b26dfaec31f616e7deb0f6018edb +a959bcf2d04999d1bb21e39e43739c995101557de20e32e0b25674d17c12ce93 +f0dbddaac156767ed03f2e081c63ef94828ab30d4a11ab5091e632b6efc0d740 +30004eccfdb55c3a50ff091afca5acf052cdbacc49f4a20edde87dc6dc2e9d61 +7d0a40cfadde02ac8e7ea1f375267c7322dcc2d3e9633895d1f897969c3091cc +7a0a7a7c84a4bd15ef83a16690d9dc380f07189403ef0d9113c7ef0da0f1a66b +61d7f9593f82f849743647d8c2ac15b7e0c87b9f7ec8d7adf890c754cc29c38c +02982e19d542ce713462c3f5e22feb2cdd4cdb6627d419c5b499c9442c58e4f7 +f0c0ba8ced3cd519473145238abd923930d31f369d3e067b6dabd69c740586b7 +93acd9e69ae61baf1a063f062f22025bc3fa2e0ddfd7d75454dc1b8ad9629167 +656edfee69a41240a08f6fd792e5cf510a3254970429cc76f8c2f95a86d75d2d +c98d8c7bb4418561d37f478ee00e9ec8f52f8c745fa570d42eebff048d60a6d3 +e16d9a9bfd1722aeffaaff77ec82cf4fa593353a1bc6d96790dfc9c6484d22be +72ef63932b363c6b3057969624cc63d177f5b103b77b8a560bb0595da7416e29 +a8e43480858201306e31a72b3a7e01b367a8917c19293e57e4535d734fff4e17 +f50fc475ad13a5203501cf2c29a3d135860788507413ae93be0598f21a51f317 +e9da8415f5e00a4dcf49f640ca26c8623ba9c5e80e8fba310c8f06570a629a50 +758318dc48c876b126850118b8134ac65333f17d67ffb7f3c7bce5c07655665c +4a09e6fed0bcec0364386fba63f4cd34431d2e5fc44e3821abe5033d77c1a901 +183a127f32b003add501dc875c453762446a87bcaa50bac3b75a453caeaaaa30 +12261d6c08c95eff1df3ece254e9f41d7ae85efe476e244fc9d9e0853017eba8 +7ff6241cb9d11b7213d2ce679cb1c071daa5317c7e3624df30854049ac46a995 +97422a2dbe9814d92e829744db3d600fb8509f9537a101862f9dc84d17f84b82 +b819ce71e40c2e397259459f55ab6af355a6c4f359ebb831fecbec1dcc4ee2c2 +503dbe52d26b3a72833d36a67a73c9de2705769d8ea05c92bfabf4d3ddced23e +a37214587f6b58df7de6318187d2272ef039a8955de18eb7069d08fcd6f9bea5 +87a2a6d3db572662f278146b51f771189e46a044ef16b7def53b9746d888f2d7 +ff871658dcd3487ab266197e7e34c177f877b07ec4dfffe71a0120fea56282de +97de3d547ea5b97b5f2fe7f14f7adc84f461e5fcf9aa866bfbc84c9797c68749 +03b1a017186b2a386dfa8246c584461bc07194eeffb18f8127cf521e7756b715 +7f6f7c7358d2e5d9255feeb70eb771514d052035d27a86378a22d82378d99911 +f8e667e1d2df9611eb6c369826eba29ed9dde39dbaea38c9fbf05ceb5910d484 +453c9c282e5d418163b4adbdd92c091758e1432e8e75e151872e1dbdd5e813d1 +1a86cd3a230bdbeefd67c02448594bb5e8ea2fb6d07b098131a73a28f9cd9063 +59e8cd66c000894ed7ab70240e06602d7c4e5c2847095c961f88f2b02f2ff063 +ccb5f34f7e0696af4e43023cb3b0474af145dfa09dcf90835b766358e2ede785 +c63e9bdbbc208fed261c5bdf4d10a769112b62b086bbbcc8d25486310f6a919a +35383ca27e13724504c63667f79103fda47692d2713923a5b982a2633b3f86a3 +46b4d7159a68ccfcadcde10084b91150fd86e1e185753a663fa82eaa428541e1 +40edd7a75007ba37fcd7bab998a401a37348f58bc42d809ac2d0d38c7f49c350 +2bc84208804d6550bb732dddc1f760684f0f2bd1d8fcc61b29b5fc6b357f3832 +54a0f238a00f9dbc38f063827fcf36ab943c9f61ce4add29be32889b32dd1584 +c54d3900de0b0acfc1345b1bec5ad097f75adf92655a12542af7b8c618f07bc5 +cd4d69b206bce599e1e6a8485849a7f2dca770618e877b44150cd34101e4a8ea +e8d3bbfde9dc4a862af61f8fb4db683a81e614545d38927875cf8c027c3e28cc +152d7299854b95eb16df2443c7ec9fd40ec579b52f9ea5a6ec56e3b662171b3a +bf35565869988ab1684d47b801ae6eb23a6bf085c41e3c3f2b040aec9bc6cd82 +58ed64d6ecd8332f966da918d44af30897e54085050a0cac70f459a72f5af683 +3264a26d0cb7fef77574f10d4fa8ecfea0aa397d5bdf3a62d8897723de545ae3 +bbf38ef76b76e3e72d1c3a35b29966acb40e13928de55cdc20e691daf5dede05 +b71e8713e67ffed407f926be5b69aafab337d2f04992abffd60364a8549835e9 +299df33af8212c75c0819000536b89127613c763df066d184f718e1f10fb8e08 +f5fe7b8abe9f72743d0db04afd1d528780a097598a67a9da8172247c6d638318 +9885e4fc9231537ad9bea8c3028c7cf26c3ec6b7adb82b1481ca1b149a9d2316 +2ef5477fe27363a3b2ce1dbed38128d16b869eb8f21807f6d5430aec30cec535 +d0f4458efb8c19834474719b6791b30edb637f54639396a7dd581a4ab5e97fba +284e1b756f2e2e3b54d6e136b237bbd042c69b21244248674dbb4973ec7ecdd3 +9f1ef47545ff01b39b09d06aea5b412e81fa46ab0d048b6803a5992de0fe2f63 +6d6d29b316a9bd4608131cc7b4c0dd1db4a249647ef8dbc5a2f9b9524284df3f +1e70a74c8aedcfde0f6c556713ca8b13cfd5094cfe64f1f482c29e72adc2024f +a2846a10ff5344cfcf8113d0d1da07927c53b9aa76094106061eeff3c7e5bf25 +d875ac8c07c4ef7a0bd5d4af2644e6ff82c8aa6e4506975ac9625fcdd47fc085 +4ff26d3dc3f8843c1d97948374170812c223ca163451e0fe4ad73ac7089e4fc6 +c24836cb8413a3185224724c5b302fa8d9ede4bf88a0109d98be35ad56b45045 +3422785c4f579a9307a860be505f5d880fa5ae66c82b293205e738e910ebefaa +af82bd9d493ee18eeb12e40a69b9ad40d5aa6839d58a7894b5cee115a2c42465 +860139d35c0f2640041679283c476a3fcee985a53ea863414b206dfaf72c7d10 +851ab12466eaf532d90be235d9beeef7e389e88a9319c536954f081f511dc717 +16f16c21eef839669bfd0d8b505498b0bcc83eb41889e6380d8104fb732e982c +ddfe4d508c45e8741e21d6e5934e678f38dbf17c98196dfeee7f9e205a52ebb1 +b9e2fe333d6b1c1b1b3386e079fb941c7ce482f2ed5c9426a224309edae06e3e +9e8f5819ba4248d82c7e9cf44f7d1eb97b2110f9ce9acc313579840154427df7 +b2e57e2c50c38b25f593092f20350e27f67a1000f86fe87e2acc031235de5aee +f246f75d4f4bf7d8852267941cc50de864e0ea34e02efbbfa72587ce257ef2de +b249377e0df834e89060680b54c38d036895e4e2f8d55b9e4a5fec6da7b99966 +9b4ad9b695d6cffc349bcd34ed2abab20e289417eab1916574e583258817a100 +5173bdb345810dbbe2c600c25fbcc73727698446a2c4d1f71732208a70cf557a +30e67fea48eb40f288ce4f576366b0079195507f25bc9852f6fab94827a79d9d +16fad40c0fb0733ca838a148f1c2050590eda6cdd3a87283911efd861c7183bf +10462d87eb0c7131c18346611088c5a8deb6e200ae86977736f2d15d818a444f +5c435bbb043c7bca3d5f65152508a0234c6043d7e67da24f0b4d8b3e7367afe6 +c50870216ce2e4048589188cf361412cd5cf8baa691fb7dc66677822263ef3e2 +338a4064fbacdd0f7460139c508bb21b65f3f433c90fdabd0170268b7ca7003f +d72ab116cc3207ea8aefe60b715e426cadd96d4dde5cd91068214c92a1307237 +951e92f30e07878b695bb519d60512ec7124d4df28fd5ace12a9cbc8c4ff6c16 +f697ade3613e22880897bdb1a3aa680ccea6085e234ae3d62d270afe5d4254bd +6c4d0fe6b7c281919e6d422431e1be80d47a51628e3edffbb685a7aacaa27dce +73938aded090460b036236e6cbaeefdd26c1e5caf99efc45cda9b3fde97bd072 +9efcaa80ef173375e99894d12c609bbb57fbf0bdec7b2150970889d08f992382 +23cdeb12483e3fb57705d03eb900f648618cf5822b57480e2fb420a5022b4e22 +138ec9b68d4088a833d50b2da7a26b4cb07ce56aaee2a1fbe00dace02a1de81d +143f3b20f87b6a394ebd896b3a6e8ff548ccd70bfe95eeecf9bf9367d543f75f +575333b7426d644dd94d675e17dd5694b3a1535aeae056900a9bf30d6a7e39f9 +62dff42d57b9c7d469446bea7dc3248e2093d47c3afc995e7be86438cecd902e +13b1686c5ac4a58ee9a272f0ad18599b8495306d146ac0f6b958b86b72e66121 +3279ed284087ccbd1e8c865df2fc26702cf399b46afb744a3e99af6079fdd596 +5d1b59ef92713a40d56917270a40fc029583989c94caac0ea6aedb0310ceeac0 +96c62a045f3e6b5de1963ced45c566d7b10ce5ac76a81ff38737104595667628 +b51a1ba8172022d9c06f5ed6ee8e429be415fea9c8f648a27f8529090c6bce5b +69abe90177b1274d5bcc64d29db949132223c7eb9473d5af376a81d94826f141 +9bddd79521481b06adc451ef5ce33ecc43a69be43916509779b4c8a5dcb4a2cb +c12bb54f3956a97eff63d26de59faee85d6d3ed74e2f897fe852de6831deab85 +10e2790367840dae069eec64a77abff4e09225cbfe9f4fbc99a1cff38e2fe632 +792db6c32e444e85b2e09dff8f66dd638c2b0b5ce375980a894bdd6a1635c793 +33da9068aa329714e0ab8066ccb7eb15d1ff96414de80b5b791b34a62b25a249 +21cfe87d128a4cb6b93d0e51ececc9deb841e3a3d63e78c053f1c580bfae7d6d +7482bc54705022d1f48bbd33d9a2ac7e0f6ad5efcb172aa4e49f356b993bdd6b +8667e358e612b24ea9994a30f80a4db180c801b740a3234c0c95a8ad6d823791 +0ffd5806fbb8e86165fe6f343c72e655b57b2102f41a42d0220ab13a53feb105 +4836b876148c29b5d2532869882f7b54c92bdb7794c13c737d8a44bff734def1 +69786d9dc57dc55d385209061f38a411b5d49c66f191af793ed37432d2001a7c +0fa0f23b32e80ef519fba48264eaa841427b4fb6311995d63ad919ad034f2313 +d6f504d4eb0369678afb331cfe7f4ea1b69175d72ec4df93d4fcc4d91b880009 +6c371d04c12f033541b6e1e7a010689a1614c157d5191c69edc290a907349459 +b6ae2a0eca1e8e871cba19bafa4b861a29172153afe7b9b7764a6c3ff87677d8 +8f8db936d12c33ae05e93ec31944ab240099e39ea3e9de81217996c91a4b5685 +e5d9f7be2727d5f3fa41079bd37760568f2f4b4ca19226949b0723985e98e7c0 +9c1be3b1d19514e8236f8da7655c016cc7a79e7d19c0415c74ba1dc510536799 +5c08f9e243b1d3065b601af52a1fc72a24cc36b3a283adc49dec4d33fbdfaa37 +055f9ec1846911e326cecdcdfd4ab522d2b2871c03219bb991567cceeae2959c +96f068e117770adff52a3be04d935141c20a9d1c56252003f8bd51aa1d22ccea +15fb359f308ff2d6979ba1d0da54d9927f723b505b86de8325bf3978230924b7 +97234835b6b946c5239c196be506bccc1e9a4f2c339bbbf7b4291f1e830352b0 +2ba637fba6dccb5930638db302bb61621a534c7993a0096265271ec3ed86fa81 +b6c7888114a33b3346a27931ea6b0b2eff65f94ea692addafde2579482a28609 +bb20c6f343c8fa777cfa9bd9436cb47cd0dadf4d16754e7da03aafab0edfe819 +3d5afd59b5b96b329bb4955a9af589c6881d81ace8c97dd92be95623d94b7825 +4cec015c59bf4ce98de9081328e7cf5d085803212054da028016350005aea631 +bfcc435114a426c5d4367c86311e6437e0a59137e29db512efcf312e1fa13624 +ee6f728904e0ea5def5e842f8f07f2627d077320e90927a81fc6162586f9ba73 +d061839ee5dfb7c4c66a530d1a0647a87ac4ffe48c956fb619c01feb95baf99b +56b0799c8bff1d670ba5530cf7cceb6b4aa1de7119958d3ecaedd5dcf835e7ea +f16dfc6c671e6b861297e675ba9bde08d0654c4d9add46a288b15268df4a6572 +62f9b12765b59b338c718651ba92329c9510655da59347336f8be78b9508b267 +3e366a409db85adf04edf07d75111d2fe6fd24a29e5072a876ccfc4290b0f868 +fb9fcff47575a376c594196d8463f4b2defa8434bd1e769553eea3e817fce981 +dec52191e10a7c9e2a7328df0d568c9149bcd8476913e4cd385176184e029343 +3ad94901ce4b5c2cbb88c785553db92464284fbb1cc3c456d8211848dce535ba +697134df3371ed34bd6b0fe30ad22356c0dba8ccb32055f01c0fd9a931191bfb +a1af29f383a66ae3a810de7da2b79241e0bb376e4405bc7980cc17ab240b9820 +202c4cc9ffba362c8a547a7c9f3fbd37b55062a294870721db5f063e05b48d9b +567728f7b844f85701174fc98aef1e583a022b7207a834dfbd9705a16ceb4dc8 +c5dc9305ac98f5f41be6d317e20cf2d7166934586bc63a4cad29b1715bbc8d0c +0fa882e364ecd976e7406899f12bbcd6145dcb5f314195cd4ab865ae475a0c20 +644747ed8f79ab9f4fb736fd7f7361d4885bb41cbbfd59b0b7620cb17659be6f +986fccd526e9756bdf412c6000dbb9ae766101ec23f8036d1afafd45f106ab14 +a3ef3553cdc80411e766399bcef62e77e67ad7568812d3b150c29a961dbd4e47 +ccf7ea533d1bc8c16ed25bf5a330731ccd02139b72f63234d49d5c33a995abac +40cd06c867a08cb3c19b7a0f9df091d51a1d387773ae8dce4147533e41f929ca +cbe198e61b81380306dc2c99e99abdd0b6f2f84056ea25d549bd1f88be1dbf4a +6fc994783d4475d4018f48ed18f1bb851a221da3d9624e3a7faaacbc5e9b8424 +797e5646d08404f2feb868d59714e4ff77d6aa968749e1507dbd7b3ff19218bb +fab82906e56136cdb9e3ff1db470a20298b16f08f48a6937761a593e5d98243a +c842bd5c3acfd41791ab02f991374cc14e1cd0de834d5a13343d70d739c746ea +626310b0f7678b8e7b767265f343ec770cb789e8dded6c56889ccb0528ecd747 +0668da632b3f399ef2e28e3d8731708d630be0df2a1becd0e95d031aeddd74cf +6a2e2bfcc5024033e2828bd043dc7271d1863937c71650e5510418e9b9c35b7c +8bf9037305bf2c78a63460dbf914e867c16ff5dfcf05c44912c4083cfcf6e498 +e7af6072d7052e882b188c696fe69d1cefc7baa001f095ed80299c9290c31dc8 +3042ef7d9d3be6ea2f97f667a77918eb207e459958b60feaa7ae8d0fa14f00b3 +37a1b40055b720048a3b67c2250f3d94b10133c1e473e5f9bca3b4f72da29c5f +d4c09b6520ec5c54792dc37f10d75c0d4302844f7d193cba7ca088838ce44a82 +f1d3161489ad1b9a2cd319840c0f347131f94296f856d935661f691d737a7e94 +51872d4c49e71e9fab6ca34a96f682da48c50ea79dd68e199a2a1d49f81a132b +9a990f99ddacd43888069c37571834ae8dc60a69851f7a80d65f5e1a688930da +8784aee9a5d6ebe96e62e4cdc8b34740acd63f50e208b43a38c6bd0808d356ab +5ea11fccd7ab3bcd6aae709995b45e03bddfe1052a1c8417f1d8a794a66a0e72 +9db494db21a36118bf7c031c1e0a47c35682e1f0a183e1289a438c799273543d +99a3840d7549891458f6a3ba49b9f556920193dd86ef7d457293c17ce9cc76b0 +6eca47da729b0c9d0c3181b59f993e773f0279ac90a5ab526aacd6d8293e67ed +ca0eacdbf1b9aba40e5979a2f20810e6590decebb53bb32414b81aecfe304407 +c42af75e03a6c1016c381a378afb7b943392c081af0680726c0ce4c984856999 +2b7995735bfd871bcb6228d87d3634b3ae50d766a3237361a9478adf6a32b12a +b435014eebcc53c44c63c7ae474b4f6b0e4fa1b40731d0a3aa530f9a1626e700 +12b5a51fc6473e3bba2e0eb274b747273ca382902511948174fa78de5c7ab5d8 +7ba99000052d5c0a4c3ede1da7927b214b893d61fb11ebd6dd1af012ad26c065 +fa64581182cc1ca3b86150e63e5e3b892c49fe4f6ae6c34ca1900d5fdbf72c87 +6728d86b87fd0db490dbaf34c1c10b4d123ccbddc9887b3818f4335baa4991cf +812bbefdf1f3a3c4ac56fb633d75d04c17b5256a8216537c928f9d48b0fee946 +fa5d23ce42a4bcef5075e9b4b144ebcaf4887180c733e8e3ecc1ffda9459588e +a4c2f6af2ef3a06a8edb613ac2d5dae127e50077c4377ece47b7239b15b2d27b +d08df1870d8f78fc6e82a08441ff64b83ebf556db056fa7847f572fb4c2b2a71 +e5ce66c223e92040e104257c916587c439e8ef8cf32e65b737395999c7a435a0 +2abacb6129f95513d1d89d7cc1a0c8aeae5b5aac1d78dc42a37c435c641972cc +b3c92858756559f411b808ba10a55ee5296fcea9f4574550ef07156b66807b45 +2735cbbd8fe3c607b2e683ccc8f7932e4d5ed4d87c672fe56fbe8fb644f40ac6 +9b88d91bbc73fe3b94420e4aa3e493800934a40e519e492806fc34d134989a5d +1c002d51790b15793c3dca232a38c0ed32ced20ea5bcc8da027a7144434be835 +9689e94ac5e8b38da131015f4d34dd8ccded41cb86fa14946ca03f3ca776821f +83f875a2660a64c4a3788038d7ca62d041e24ae86c327af49cea43f81f9494db +935a8b065639c789911a46b3737d9e5db2bd918982f172a76cec867a086cbdee +a030c8ec695dec82fe0a6ae7dc013df64abbde862456b4d525517185015efb3c +f997ca8904e985f2fa2ba8f72acf1b6704ae358e7d7c2868010831ece2c87739 +17c92b6b425ed85f3f21a7bc4daa9620eb6a224cfd08fbeccd11652427fc904f +f589c45547a3a33146b80dc930fc515655593d24d259d925e4fb46996bb35db7 +fea309a4e4162646a85d3776bb44f20621d4193b38a28d1472535ec01d1b442b +b681c799ced74655fa5b5652a8bb99012035a5f66b2729cbf45a998130d619af +77301e13e23fde352a367343b8ed274a70ea92670eedf6f61a34b18db9cadfe8 +f45bf4933b81c8d98a370e5d9afef4a7bce1681627e3cdb633708efa623a3751 +7cefcc75635dd85ad3ea10ecb575789247b9d0257c40f97209447341deb604d8 +6abfb08a5120fb0fe71ec2e337928a4e4f6ee3113064e488270af5425c9ae51b +17e9dd6892f9ea2f98480ca299275c88bccbe584a4a192c966b9dad344753efe +efdb52013c642581e44d1b1c866439648fe1389963039b0a9352b68d7f3dc41f +fd3cf32c49c062d964fd6cba0fd1100beaeebe0fdf55112132d5e51fcb0c079e +f644dfa99d580e0cab548258aa864149d4a4c0e618566fe4ca9ebcb9324bc63c +5ac232512d086830d18d0f6657e9694bb9b3c4f4915a511a45b3c56460dfd523 +30da25d236b0356aed6ea76117885adcf2bd57222199bb5fb586e97d1c89ab8d +08ffff75137d2c0446a81c32bb336562088bea8702fea749c21147defdd87024 +d159b2bf1692244ade86b3a9f63beefd1b030a29b6ccb2904cee95b737180520 +59f4426d40c7ca7920d06fe5cdecd29e70983f787607055b277030105fa2d9d5 +adb7029c7a3a799494c6faa9ecc9bdcf91ec35cf0defc2b95d6bd447904851a0 +ab0e39fbecb080046246ff21e2328ce12bf355ed414334be01ec175299c7b82f +3e85ff80347a20c6d46a596b85e842c185b8e7a9bb8a54fa272edd1d46d7466d +d668d145ac815c5b051536a2a393724dbf52a3412409f40b92f857337f1e0adb +23d2f0cd6fc33564a3c1e9010f6e0350c966a7a003cae4da4767ab839f032bed +9ed1e90d128cd8b1396cef03c25bdc76ab04e6bef073bca02d83684e11731c47 +6937e5b7c02b5214ede19fb749eb7b33a4212701ec325a343a7694dfd6be76a1 +98890826f825f18ad39ebad76e2d9cdd294a79398d431215dd95bf1a663ba9e9 +b130f8e80d2260cddb9344b644ce84974ec8787ab84ab4b9517e44fb09d77a36 +102df99690bdafe89b4edda58c693b7f8619039a3ab676f10d37d0be02b29bd7 +da19c67fa4d07c1d562a65247932762895fa5e9002c45e59350ffb811cc5181f +e8eb49a988ba3342d129e03e86ab9b16d5a92b4e872e973be41da232878cd14d +f9d2db75d4d5285232ce5e4480fbd0c035dcc427e35a9773edc39d4b17f1eb09 +e842a7348246f1d69e3a15f40443471fac10aa392adb71e66b61308508ba380d +64374b66e8d234fc62e392347dfdbd4301cef800aa88f29414f8d5d625ed4971 +f49a4473ec350715c296c71cc7947091b49b62feba902f3d68a29e67522b0db1 +3524416b434fed422da4563d3349d19d187f7f8fce150d746b4a038224e123f4 +8e27c8b26a83d039225b551c489d1309dcdf05eeabc4c1594a0ec8596c2c8a05 +081c9df97b8675259256b8531fbf5b684e7ac076425ec9e4082530763c9142c9 +808c3da66c0cba1f5f704a4d4d25183d243c01d33feef4119606356be453474c +bec5283151aac2b18f231c6542ecd340f07cd7728db3b345aeb977f14962d72b +e54f4db3e5596d6da03985689d8e6929a2aa8cacbe9e14b539cef80b2edda603 +34b90ee98455008b4768dca85003895ee04613075287741fd8ca8d579dadfa69 +2a5ccb49a6c5257296f9fb71028a6cbd52f4daaa7f089b8a65f1baed85c35313 +29afc857a7b9bc8ce5905ff58730033c8d49a45f9f098c39a08c2d537ed00b01 +a6605633e2eae0971506f3df8248ec06a343a4aa93dcc57bcb9afa200efbdb0e +543f964e8b9b524f460ac8a72cacdf807b7dd6efb9f768aefb928876e40820a8 +31686dcc538e5cfd348ac3b6547add583322b3dd982e34ba161ebb0a9737af1d +580bb24095d2629a6db07413050f653e8700156bf5bc85ba077c244a55316841 +aaa3c6bac859ccb7cb9a79a7c9a3704431c2caccfc35cca5f3851a560f5720d3 +34497b4a425b539cb74d462463a8ac183c924a8e53726325cedc4913b1ffd640 +466ac24da3595c7f67993f9b6c22ed186412831a0724a352c9670f6b5df44513 +2f271fb623984cc1f8d268565f5def71ae23e6b5ee14e33c7b3a247763ca2a4f +9ca8f339add4056629787ec74e0bf54b8102e4b22c577f9bf3b151dc8aeda087 +bf05c29721f2e7bcd3433ceff31fb65cd6fd530ee077f4f0939ba37cb38411fa +fd11e1dc3e910c2a7ca28eba1cc381e3e43c3a78cc1087a25631238c894dd752 +46cba9a8df26d9d44a830a3501fd65a324d63a969665477cbc0306aca018eead +533c7685ecd289573423ea384eb629db976f9230d6a1fa6cff299aa98de3ea79 +f29b4c274eebc64bf619fbf552d6ae9c60e7c9de74036e434a4a6dd6e671fa41 +b8cc4c56b811f6ad0cc459fcfcc2bb3654928fa015fe4c6b1177d7c39c747fbf +5aaf612f30b889ba576d87dd4208a9e99becc44753aed1480bd1187ec5172632 +25d00b69d034e040971aad2beb20710f726a696ac48efb960d05a0f6f6f47962 +2c5a5690275e47c173ea000d392e8c20789cdaaae0637e01b321cab63858b0fd +901209b323dbe6c61c10d9bc8ee9acbd2a3cfc357f33ba4d5003a337df07d9cb +32b7b7360148291c45a4d34d4d850ceec2ff978a5f0c90a0420b2bbdb4b6c778 +fe9b5a41833940a0ef9fc0015e0d3e6c80a9bba970c57e1218e10c0c8b8c8808 +2f444af6ceb012b2d9ce6a96eaad590070424ef286225d972be1fb2ec18e713e +59497bb9917a173fd07507a422e35431fcf4fbc6ca86086f289c9680be087a55 +873c75e7998ddcde7b71c54b3ed2f6b3571f0fb3d4c103cbd1ba2eb006596829 +cdca02d166fea0f63fa0c044ddf4e3d941413b900f8550740e6115a86818dfac +9dc935f8842e0b011d2746e198ae3a4fedebd8245b8285b7dbec0ad0a6d1e277 +23ce1da5867caef28cd21cf6378e43858e596f5ac514cbec60d57a6c4c6a2820 +b541f4d6fd50a03eeaddba07e236417341ce99fe674079a48725c6fee9b3293e +7e2b593a573681155c344b0626ccc477840e49e6d7b76738dde7b340341f4edb +30155156049a4600f1d8c17c3dc2496776425fd23287127d5a2f0d9fb785db1d +9be6f1b410830df7f19f4c432c7c7766253c67eac8ea7ed19bb0df2ceb178adb +5437c8d85b7b27fbd2c23d2148305ad2d44ec69fc26880705d4efc5daa7a1a6b +3c5790e1d691a9975ca37d585c845cf15fc3c7b152e29137ca4168d42f8a7d98 +876564c9ad163eca51a2cc404ddafdf61f9139021d7dd275da494fa167267841 +b7903394140a7544ce4cf8b582bc8b0de916890a560ff490db22dd7b27b34ef8 +b8ac86149645f63306cd298b803ce40abda69ce13dacabeb0fd3c44248b49232 +2daa161603ddabb2498b9ccc84fec903b6b5cfff8e9ff5dfde25a69457d5a206 +c0eef48227281bb1866f2d3f13d96c4f26c6f6c2c8aca1359674430747c5fede +93ecc169a5855f12b362da58fa513ecbf15dc22e9ee46665507151590ab60444 +89ee1f1986af4e82c8502880381b246a905c5358e8d23e62c210c455b579ffa3 +d8b3e4d993e6c446f3fa77b1cf68c1ebeb463e9e78bd53b68f918e05091b6b9d +453ec9511b8bc1fea1025875fc38ccb3d8d4deaacb959b1d08a226b4c830b733 +6bfb8ad627152314212da50aaf2c2b5185e2429d46ad31cc6f9db819934e1af7 +b1f7e75aad6653b03c2b6415c11ff5c6918ee1c03e4cfd08de00c2240194df84 +328d780e49d3d616432272c26711cc0e05d88068bd009e5085d172c31c97a64e +f8070719ad1dd72d66ab78e8201cf1f67b84456e3766544471fd7aa45e706cb1 +37a9c256a0d9b2607d15392f7060a47409e4d6a5cfc310045ee7ada6d0105fea +fafed036a5cb444478ae11d920d9541877f8c1c3740afb763c4ccaf77f6d1dbd +40e40ddc6a430e8e99962ad32820055ee55cedc516b17831062d308916502d40 +255f786238453677e19b51c44d8f0be9ef19cd747d5836b65af6dd5c41ea6901 +b6fc9c5c7dbd04d3fb9f7f08a2beeb9d0c13aeb2bc1d5419ffbe2349dccf91c5 +3cb956df77eb73ab811ca30633e6d61d5534551d45ae24fe967cd29f8e19c8b0 +305283df0fb776e5d84c3edd20bc2c4df715285926e95f2f4c3b963726d2a7d9 +4fdc743bb2b82bf4855cc0ab701876827457aecd2a69bf58ffb363b7fdaa2ca2 +8b7b7824ffb535b9a74b00e90ad3f23cb7daae9aaeaedf7d2b97807fa3329cc7 +63689a645f515c11d4e50dcde110015d5599859ca67f59da7f93ab98b75edcbb +f382f878b9b045b9a114b2b4bb6404c0391c8ddda8d9d635a9e3c74d7ebc604a +d07f0d4025e39a369cdbc672ebfee5a287e07d94f161e11d0e18bf764af79a08 +f15543796e4daa5c3497c4a3986084e7a9ba0789a2ed2e1432623b03c210ab9c +e59dfc017ffc59039df164157fe74dbfb00087d3f4026f4d625c41250fd4c09b +b71495a7e2889044e87bda9d1c514734c3d14f4123af5dfb6d618765845f9730 +c66751d613770679c554cd03d99f4653db05440e2bd1202006a05e044e501381 +5f51c02148a91edc8af6143aecbad2804038d2381f7436db6d46b0e9364a893f +5531e49e42a740a40a87614d10f9e22d336711ff79a6b7b9f8248456691f864b +4ee2261a13ea203f282e36d6001cba9fa218c220e447313420be2a66e76c4c38 +2d0cc85cccb5d4640fb8f923e1c55c9dd5cb80918976b5e898f03263177b0832 +2b1917869cbbcfc7789f3d799cb53183bf85b89d9850c1a0c60fd6a0047b5f97 +592f3dd46718e25395b6f13c20d121bb1b8c4778980d05499ca442b3d4363491 +19a968f8a0ebedff2b95cac72a617172cbcef5c6e706b9bb1d9de6431beffbf3 +715116cd1d9207402ed3453f6d343b92cfa09c4c23f8835919e183d14526322c +1722e4eb7e8172b1c8c86eaf3a2187bf9674f482e1623163d2178351ac35028a +89aa2668c0e10315ad5b5f65081e768bf4b02fe2cfa1e636266c4f632d1c57d4 +bbb4470f51d06eb3b26a5e02aed0d6f00d27fc4118b8a0b8b9ccae2c307fa7c1 +83b45122390c52d5de9bba735546c29d40027ca6c00ef6a5bdb99e7d9dcd721e +cf6f3760d25ebd62174aa9c563a31da6a1225e3b4ed652db5b8fcf013954c077 +ed730241f4c26e0d2cbd1c246c855e8aeed5c8059e70d5bb8a1b7ff37e2d9ffe +681f6fef2788e4a603be2b272a41946f63da44978d2b03033e5b44d098998d03 +05fcd73ebd820e5f93a9e9f79573a60b805ed0375c32cc65a1ef4569a893baf5 +45befee450304d67cb3460a10d620e929f44e352157e6d12d353fb3a5bff0a90 +4bab7dfbb4fa6c398877c79fdea6bea230d2b6df6b46cae2dcafecd544b56936 +40a00323ed5c9e30cbd14b40f93f37fc56011bf329ab6fb5d96ec229edd0c541 +ed4f661fb4167ef9c705b1d293dd432bf89b33e97a0dfc1ef10fe8d4c863da2e +b16a3fb06680812c50cd83ae377c94fe26deae946687df5601e56a46496e2e09 +bb38c3414580cc1c327853235c483cf4600d1de1dc59223b4bb641cd4f256092 +9e0f3df061b19e8515fc9163d4f16fb3ee44a7a8cb1df1dda0ab32adb9252005 +34b21ae2d23b5d39399a7dee2866d2962445501d298390bc870d2d9ddb3586aa +1ea3ea0fd2ad4458cc3b80c65364b893640c1c450505346a4f22d17bd44e7ba0 +09368203f133338077bb806db218d3aa4c187fbf7c440d48cd18ec75fb218210 +ce3081e0a56a7b44536910cfe0340c3f48033c9eca88560d8207c31474b42446 +6be9d5caf07a46a7892c24ca1792b5b3efc4dcdad2fef5da25e1b0cf22f2ece4 +0dd8715df95a808a223e3715a4a534bd276b6fb114f8493f72521f15e2f7c194 +77e0072d1c8f2f5a6038f3a91d5970656d7f3f740eecec42daa6615ebc893a6f +cd030de96086b39cee1ef7e9207f1bf228c1fba43c53ea2b34732cf63bea3ff7 +60d3abcd75551d0b8e8d5cb80646ede7706674a63358bcce4059341471a7df8d +f0bf5fb04baf4d41719f505923085f9c48388ce354b4bcdcf4fcdf7846a565cc +38385d0892a856ddbf7f712c156cc114a67cadab7d472be7890b298ce436206a +a31e770c38ec997a397f5af152af3df7e350bea9054df0fc53cec2f4a0ced3f1 +5c59a8436e4f14ff49b66bc6f9e1f1d97d4a0bdaef25cbaef33a0f7e951410f4 +ed5aa38b2da8ee932ba0a414ccf256c5d68271c75d51fb4fa4a7b66d8b4307fa +82d5eb2e0b4681edfef789033b08b70c2e35b66c5f5b868a9825247719d2e14e +7c1be51b5cb7b69fcf20f8435207e803bae6bd01fa949bd59d6e20c3ccf180e7 +e383fc79038a439dd256a4782906723448bedc672c980196562830632f809645 +872deaf72534ad4d42848ce497ff12d28ef0fbc728a7f60d60810db5884d77e3 +bd259d298dfe0e4de7695fe2ab4a43ce1100a5f766fca8ac44a9c470369a151a +728d06bda6ac3a64905a9e7cbe1462bfaaa9a4d57a317682a221554fee457aaa +485729cad67fbb139d4d7d4645457cc28575160493cf84ed6b4cf733052bbc95 +1b80a186e49dea1eb7f4e7aa45fa5c3666ae749676bca70674be4bfe6e196bcc +9a294d3af5424dc1e994e0f0e8a89fe667ab89bcd11353b441e0b24993b0c1d9 +cd7558d2c89419aa18c2e85ca74c013e53b8d5f0ae4c53f29f7ae09e51c2d057 +95423b75ef20a44ab100c45755764a8d0eec7d8f013f30264a648a75bd5b88d4 +1c92ef78305f6403da9a971625be0b9503ba6a28e440af5dbe1954d785a93f9a +7dd2904214940630ab80f88382486c437754bb541c946dfbbdcc28ea0bed96ee +517b2f4de993cced9a5b503a8ef1561b74aed495fd64a44fd89a0adf96442db1 +cd2eb39bc85a1ed8bbcc60063998d49f02d3dc2edbfebdc022b8ce3ead29196b +9c07622728bb9ce2bd992876c2e783b1dca5f33e8ff322f63209d94eba4ac6bf +108ee86f250a9a5a6ae5b06ebdd0fd2751199d99513609864b434dafeddd7d47 +713b3da2b4b12ec7b779003e7df7d4f2bc33c9cc41ef41f0d9529dd0d3678957 +4d66283f10091c41bd2387cc771c4499001ef2c86d0eccdaa904e44c3fb818d6 +703fc8e425088b3753472b6c94a946ddb7ae390b2a2a86e67302cfbc5a3ab520 +728bc8c399655998fa6c4eaa3385df60d379173deadcb5e7543f8c6a8ada3c16 +744ce62c12e0f312ecbe114fce1473bf1a9affb8df1a118878066047c1a1ec5f +ff9b8455ac309d720607eef62d2c0146fb73c256e90a722c5fe42aa19dba818b +17fa00fb024793c03613650640ad749c039550e418b563f2c522eb7a40543dce +7cda1b1322834ab1bd1ce555a5c284c9a92f666910af211aa6b258eb2bf7a28c +ba47b4f8cfefe17985470306a85bda0aee57de81220a5f3c265096ac21da57c6 +60bffea3d98f2358dba450b29e832b09e764b4e41f9952e2935e09e76941a850 +d25fa4f4f916552b7ee31144c78776337c67795e135e26cb5e4e80484fcef1d0 +fb6c8a86911f7358d5077f41b31ebf9886430964bd316f75710d83c7dd696fca +7b6490801cee0387b0fd42342322121f43163f512ffde8f284ff3aa1f211319f +5556d08adc1880b1cdd4acf7592d4ea358d2f34e69a73ea9891498cd3d59a74c +7a7c48629be752b60e795a12c1fb5f6d29ea48b1d32253e7cda453357d769774 +af1728837104aba991ab43309b2f298290dbdb32066b59b360fdd2f0e32b77d1 +797406014fbbe7c9fed681f4efa445ef694b26716a9d7b5ffb1375628d61d800 +70262b3011625594c8eb5dfd7147cd224d15aeeb9d443c88359236da5514d32c +2308414414c22f47b85d88cb6954eb5a7bf4283754b6129ff9ba6fcd78e558e3 +281d4201679a411ad5613e38f5542549325d6fa0c15225eb1c13917b8d33fdc8 +30b2eec374994f6b6a19701f9b3a7ddcc8b2478a8601750da43565c7acb34114 +cd24f87d601f995fe17f94a33ca9005c53a5b760e6bdd4256f716c8d59d81128 +1e72c01629c2242295791e664f490d2808fa695986534146942c7cada8efcce2 +bc3ededf886ef8f4d0ebe0839c90496481b324dd7de90e2713c985d0dc196f79 +059f964352a2c72d2df0b13a4eeca5282091beab8bce8f1d305464a8cc69515f +99c720e6e2221be1047c938a112f3e31930ad86bef1b90fa747238bbcdfe5a52 +92fb9cb8b9a4165c7b0156b550b536a7680f217f0e7130785644e1421a57c9b3 +e94d27d62d2835530785126d553640f88f4e5d05dc288743817504d48fedda6c +637c53296d2703c986abadfb74f6f830a57c0c4915ea7758f2dc0881ce5a1426 +3f298c8ddf55dbab0a8f22e8fea76f63a565059c72e693d7e29a104f7f550d0c +3d871d6c7e3c2dded288500f8925fcd72cc838545f2c7c05086cb8c19a3c88bc +dc738a47505ed1e76616fdeb9421861d5f88b0904deb9ec637c997495ba85d93 +7a491a2b125e3a7a97046bb2cfc7187071067e6382a8da1ae760f513803404dc +47a7f93b8f3a0b2ed5f033d65db9a5d5fd11db4f10152b19f4f5b2f48b8a95b5 +50145156dbd721997233961621f5a64f1e6513472e083c2a5357b08537c53b9f +07b90663adf19c5028d53d26c4dc1c540c86e8f744c8e1d02dc76f137bfa6a06 +1792d82752b522e8911953e0f58906d47bf089ebc14dd0d9948bfd6ef2e0c892 +c8ceb39d382ebb830b9e6ae7cb522d189b34827f45c962b0da89ce3ff3e9f6b3 +967f59a7076733d65ccd8526a3b3db8ff45ed6c16392152b5593c94a1842741c +2bb710e4b331fbd7bfffbfd77f81ef4d9c83b10eb58a2f51c4655f6bf062783d +18c3c06ea4e922e60cef329de28fd55232aa8dd4224937a79723519b3b60504e +5994fa207bf4e2908fa81ac69a2841d21cadabbb92498416a04630520b391c68 +30687dde665acc525e86fb783a3870ff43e0f0b55e50798dcb788ae93666564f +ba7a6fc3742c86ef7e500d2ad2b77ee29348145b0738579189cc36d8fe15c5df +dc4b66450947f168347afd5238e153b9f2b1d7f64373c0a90da71eeb18f72b9c +f3e48ffff7c202ff5a7c2cd53a1c967f7d71e7cbb4e4159e5cb5f475ba0fef4c +0713a2923adc04968030dff07fe9489eaafb0095e542aa9497544d47dee12c4f +160ab99511673a43cc89c8629bba5f3863636b9ef246078815b283d9b7e91399 +e74cee17e147ed7caca02f203ebc977618ab18590e217ebd57e41ca020290d84 +f02a4fdb4f2b97df16b6cf7e3519eb810b654d0c50c4df1e68cd54bf05e52e94 +7fb47f105e02d1a4b7b78c0ec9f3bfd54b5cafd746322614ea56afa4d613d5ee +6baa19c573bfd4640f9428f23988fd9f0ff4a49457e7bf1f25392d0d68eb89ac +68f43c2c2e02bc83bb45d9f541bb2a6ad28b8c70516ca2476a52edb1ad4b467d +63b970e2e40af4c59d46070352162eed10bf2662217b32ddcaa42b5c9ca7c486 +f3810c51a5c9f25af078ba635ed08620bb7b91818797cfbf47e7d9e22ddc1d47 +de4a7765c4566b479a1c66ae9362bd4bb7dc3db16daa5d27e79918bcc11e995e +3055d826b489f527c5061f4d46606c7a4375ba317b35e43ddcc5811448489273 +c8e114b48d9e4e32fef51ae8e4440ba35f4c7ed307fc81cedaab0264ad7187f5 +0bdda954f5eff597f65759e538916efe1ceccdcf33c363a5879e78f1f47dd1d8 +2fa4a4cd61fa4d32de859714ccee93b1b64a3c7d9d6bec30aea2b10c896bb60e +c8336dbcb047e66998ddb368e1f83b94bf3df73639560f568a5aafdc810cfa37 +f2c53a0f3a5d54fa0cc59a769f862b22d654472d9846099f5b5841d5f30982c6 +ac2feefef527613aaa3005607cd82cd56073dbf37d446f53c9509d9540d4b10f +ba4198cee56d6c2448112ce7431a382fea84c92577de8ec194e3227b378ecf02 +a8443b9f395ba5bf18899d37b2cdca0df725fc0d3f2d2d010ef35d1d11009c9e +23e611de999294c5b3854ac2cd44c6a3b5d93a2e3c0979f2aad87ad368478739 +94f0d9d78334a8cb0a9ae03cea4a9a211fabdb4cc1c50b325754e9c615facb09 +6e5bb94dc9b4ea3fa0470831cd8eb273753710a9d0e1122e0390c763c07b7296 +9b1ee534c46a82e62dd6d85eb1242f577a444cecd5caace05ead443675715ae4 +b2e89c8a3f861aaedfb882b2217c8a59f074ff7666d9dc0e77760e8ac0131580 +b4674ee1483cf7952d5f2614af279fe375d9e80947af930dbce773f89e2d1942 +55cffa5a25fec611208a5347d8da41d06b265537590ed2a18dd61244561f6a28 +6aa7b7d003fbfc182bf399ca86fe4f3b0f9916b4be9494dff4dde43d543b4475 +2dd8d8921b631588a792ea159aadc9a05b07bcb5ccbd39776eb733a2340300ca +d08bec731a9d17bdfa35ba445f38db9efaa3f8bbb550cea8b742c00ed6237599 +9b9292275df9aae57f782a7ab34a92782a0b1be183913061201faa4340b54d8a +0ae2acfb004ea2366aef056ce8a0a0e17cde94723223eec759e7abf285a133d3 +ce981716d305690e627509df3701119306b8e8adbc9cb7891bb5faf9a6b81e6f +8b25275bee86edb442518ff110aadf7cb120bcfbd380af3c91e62f1cd51333b5 +6b25de8112c6d47e77bdd08e3bdf3bca8f20e6b96b687450b23fee7ded8099af +31a25c939402b197b2356cf9d4d882a02b01a82bc7091775941e0c883f9ac2a1 +30ccf1d51440f8aaa64a2d0eae3c5ee5378b3ec57a27a6be73e3aa6676cdf3aa +c6ad5603f20a30f032386d1293ffd63b98e751c6d937509bb27a0dbdd677ed62 +dd628e490b5a3852d2841774d6a3c16912b76314cbfd630bb48b958824aca788 +36dabb0ecdab2a2da7722c9e3b7f511a56a2498b329f11eb454b34b185704e3d +8c244f54c36945370aad2050fe034726f739edea05b164662094962904f8474d +263b43008f4ef5de0cc69c9dc7faa91c6beeb28d2bb977fdf96bdf27c4a49fa6 +bc7b802373517aa1e4d43342d90acb99f8db854b41bb95fc333e3fe0ccbef3d3 +de3abb46991ea91baa44fc52b96d5c5d683675fc6498d85daecc9f467dc76b4a +f039a69902c5c677e998367aac1d3a765f52d55cc48ecefb30d709056d22c8cb +b21a422419e6b9b9b50b3b5ea417e6b079d6fce2447322a960b74c33e4f7420f +0ebefc2f36471c6f9997afdad5632ed7c0913a76b7314948696846b793aac81a +491c8640a04a0867eb16d497ce0f26bbde677f840b87dc743122a144ba858a80 +1ce58bf6b3e5fc0fadec743ecbfb6f8fc19f778a3062cb14cf9556289e7484e8 +73e950c71c46b940d60a6a718fa72927e770e7a917987ac5f0afbf0c5b3c5ef0 +591455ae1aee69f4768d690148d8e2c831febd5b60203914c960015edd0a8e0d +e3a47cb4e0093193dbd2b925bc3921f88b58d856b384b1f0158e44bee3e17306 +6c86c5a9673521f0c6dffd8413201a17e59a8235ec8bd63e60176ee65fd81832 +7782aed7eb7442d55164a7b35bbbb6413a36de24dc127cde8eeb9bcb1cdaee56 +7463bcccf86e738d7b5436d1079fc6aef850369c04139e93933ce920465fb403 +a1354553eaf1f8171fe79e61fe157bb8c9cdc80467859599354b73d983190ce1 +60171ad887b1d46bf64dcfe3c092a49e3b9447e1d2cecbc440a03a9ecea40105 +a7bd0e0a4dbbd18030887df3dc8271fad0a92b57da8202e425cb672cac0c36a8 +095330aba0cbf4635969d6f35d2626fe382ca7890b5743df92963de76e7eb4bd +bb8a9a950ca59a553aaa6a94ee66b9bb154b86dae32ea20ce79de441228c47a4 +aa40949db9fe13d761781807d8e7adf991a26081427cf719ae656d40f3358000 +37330a4464860a41a0653fe5fd69adb6a733f84c2617420527ed720b944f022d +890b2cdc2d7dcd26419127ad47a747c9d3e0f973ed50e9a83329294a7ef63b38 +bc297930be33e68046c466b7f44c3d374138e8ccfaa477db9ab5d83a77df8f31 +d330555acc08f04cc5e2126d4a163313183e0aaaa8645e545aa59c37efaa3663 +3c92a17a53afb715a6c8500dc1e2c7d454611ff5d7a60aa8859b8c3fec060f02 +c9576bda4ab3b101424b99e07096bb5cb7625bec43ffe2180635994158aa8b03 +2c82a993c6c7233d971d6c8306a2cfd45c787cbb5a1dd9fc01c9803689b4b281 +c82a7469992dbd60e611e37f0ed8133feb5ccfa57d9f091758622772fbc94e6c +54e3b3d94983d914b3fdee77954be3252497392db6b3bd290c85e0a295f98c44 +5f87998274dbd62d5c724c3cfdc2385c6b54c8f073f9104086d618ff37bb4e1d +5d571a0d41df55629c5c226317b77ec2c2441b5af0166517aacca31193143e96 +51ea351b6b17eb764be26591cf205855ff03022af47782095a3d03c805dccc44 +20fcc40f5a3aa7639853ccde5badc2a85248161a9266a60f17869ee89191524c +f286cb9cef6a48d9fe8256fdc6f53d608f99b8cfbc5190402cbfaa58e16a0e87 +9f4cac054676b5f591f831c07a32533665bfc07dec0c8439bb4b51d54e35dadf +5d81dcafc0bed1a21f0ef2fd67547f6f74815d8951b7cea076f26f5d19468e78 +4433f450bcd1f3b29bcdc72ec68385d908e773b6f9b1c137ca2b69b115d3bbc3 +05ce0e8217a1f42305c77b2bf244d298b53937579f5d54c94ee6f8607eee44ac +06a657673402aa59402107aba64d49f1cf28aa48ef73d5d0ea01218c7b06100a +9501fc2c15e5b67ad8f65eed9e42cf8a53cab1545dbf8c82803ec71a1bcda4a6 +0fa271fb315cbed111384051ddd396b8902ec7976fb48e216e3505a16a30e96a +8d2da699b6160c8b3b5af59a00e705479d78dda5e08870cbd81da9868000bff2 +5a3311cdd21326a47a665c81bc450ebb14884ca84b2a7a1996a558330a7f17e0 +99eb457dcccd90a9d303afa279b45af41693612953c0f086d9ad81804d09759f +c91df65a83c83edd31e652ae98f3759ccb963f40e83f532a98528911bde3d7cf +041c6f8da633368d1bb63494e8ceeade4b2a50e6f3f4203d2ab275b751cdec18 +2509d76661094660cf22e58264dbea4738f5b2f05a4b6fe97509626f79561386 +3e78b156fbcd6ba9df4a2edb9d56251593feba7c510bce2768252c66ee7a096a +0f350a5ae6fbb6c59f5369b3a94c7b4026f7f0670d7d7c01c9f4b58209a16b0c +210167490ae40b4eda10dfcbb455c1068bb91d28634da73dc05830a33e0f2542 +848afe96acc2bcd8a138eae0baa5d1b31436751c649998f3aea75e95f5248abd +d62f6425fd91506fd25f925097d6d67c6ca523f72e6a5b70164e0bc5c5781f5c +04bedd5a784b3ebaa00c5ec187b9f30b36a0e3f6e4b249fc4fd085d7fdd36446 +70c740d4dde28e44a1210323dc4b1d6319328970acd5102cf9a049bff4e99cfd +28ec810b2575aac8efdd65e7a9e6d929734ee4927efb0e25f843f9d4649d847e +5917b6e18e440f23166d04e721696f18bbdfab79cf291684b3f0e8847007df8d +114f4b3e7b7933859b0e27d019c0841f7ad680e54b25e7b52f8e729f9a62fd6f +68757a9a650f6fc3cfb39f7ae9f03566b7d5fc87d765bd97e08e87e021a0369a +34306fee74a2fdfb11f3b5f75499159e5c97a4f1558e78cae37ce871af94c108 +6b1cef84418ae4408897f5920443585f5029c8d70ed575c19eb1714e2aa53748 +f03c05bb82a355df1e181c1f3aec05cd63370e10136a3d912da64a717f66d511 +ff5edc9e42e15070b54455b95a52ceadfd2fcab3b3c338e6edd087123d2ed361 +ddcf924f61fcae961c6b8cda5089b4492f47db89088d80a994ed9551b977fe94 +8f2d92dc83f93067b38c91e873babd2ec1c32864f521770b3709c4ba93eacfd3 +74143d8159260afb59f774f70fc8a892f765e474b5e870d7a210ce552d1aa077 +10cb44f43b9c3e1bb6b0767f3de1d18a485316e80cff3a163b8e44970bfccb2b +ea9f75157b99184cd1313d47dbbb21fca18ad708dc914eda5ad4122f7476fb73 +2c3a405c091a211756647e53a010822ebb8cfd4d331a97a1484d239986732179 +4ddaf15ec99812ed7f55cee6f8f015ef62ddc931378470c5c1ab335f5958439e +f3f21f81e2993afb8f512783959134886b73df730f351e2135be658b38e005d9 +2be5950daae49a5db747e46f8376c1aa09c178b2d4d08674daacf05880852147 +6aec9a46230df3f4bdcd14081f0fd21801f7d26a0b0c5090a3e144f5f486d5c2 +85170c17145fa317903e7ad4a97315a8c4d0a9f845cb2d5fa818894f8647e94b +feac033768c71dbcfc7e4b2ee4afe82fa0f63a2e88d191e579df6be30dabfb4c +39116e045c791739845b789d2e5a4f4e138394c57ea1bdf03277fe1df2372e57 +824b4cac8751bf0d96c27c691b71ee19eaef51842d9a621a180af064aa774e59 +6d17c8f39b5095b8412fa0996136b523aa7e2d34a15ef1aa3860d1bc693fb986 +df92179b5c2c283ec1739a31c39df37e02570b2068fed8a7865d530b6b83e6d8 +c90755bebf25f806731eb5afe12c69b7b200595c5b9488511ce0b6d3e50eb78b +b87384aff6319f53fe82a57e39a9758b4c2baa7dd9d237fcff940c7dd4e2dae9 +fd6f9814b52ae3952ae507d890e8ef4e46f47644d15663e50bef06e4c6e8f4c3 +c9bcdf6ce9c12e59442aab2209222e8e9c38e8d836e47401d8912b5944783d04 +2185e0b5d202456311fc41e3c9aba816d79444213f17d96b673bc819a5afde1b +9fd118916aa3f976b67d40444085ce1295b2cf635a58d881b58e9d6da3cd47fd +c385915a260cf460cd51d103aba3b9b7b718a6cfdf6e31ff90aa8abd8149720e +7dec2fdc1f9ba1970dc589375737d50861ae4ea98b54f134d7870b435943e4fb +50896149e3f419de19027f01feaaaccf1578410450cfb575957959a3e7f2b3a5 +295a1e03e47d2cc044af13c7f8d2e28f7bc6d498aca27d9503e19c7993795444 +50a6820f38c24b1415aa1322f2d3dc5d7e7802067fb426beb22fd9da5d3d7f77 +f7df61f59f5228d99e930652925a12436362de55a25f190fa33c3300997dc628 +ac5524bf2954d119407635b2f866e52bd1a44d764df26b66590696abcac99637 +6dc90dce6b68da6d630587aa9cd14fd4d9c2f27d8355179cd1bef7eb8f7b3ccb +adaf1a938478ac5f858e712f0e908b394702a6e1129d6262b299a00e8767827f +dd0f7d3bfb425b667717be47f8792fc7f852e2f3119a179c7d156e5e020926f0 +1a92a05ef6346a64fbc0a1b09ccd2a7e09d6e848570aceff71cd34ed28ac95c4 +03a468a2439ee50928e555086a6d40caab8d40dd847cd13e67f5acc91a12ef37 +85967f08fee498e5d9b562fa2cd3473995a0f76b860fd08393d4e59c38c86634 +f9d044b6d6184ff952b377691f3970e155f07412a640d49b696e3ea58cf60630 +ed965503ce7a6c0c145b6431fe0a5dc244173a089a49e0907fd2f8fa080f38ac +ff70eee1ce6089611df1f488858c74b81518bd028d55b437878dd4d14e8d5362 +10fddd8c4cc9a8ee14e961481d0c0b00606084ca496a88edb25d984c34f6c1d5 +a85683fc244cce71b54eda970b9111a6ed2ab33c63fda50b49d343ad5eb6562c +01748041fa0f964183d14239a0292d06ac831129fe7d7d34d0c82f1eb011f207 +c63fa085625feb4b87349abc9a065027ec25db3534c91ec2843c2ec4ff4d1b27 +1b1488dc1907ceca2d4eacf2d0c4d4c7ce6c42ac81ec78e853baf03d3941ccfb +03a5dfdf040fbe9e61613d9147ce6f9c10e4f96797d15362467058bbe68804d7 +eb7113b166df726b040f2cf4aba8bbd3ed943c0715e09bd676cfd457a3c1113f +eec29889c0e8286c314b74e4b39e2497c3c5dfda95278958c0995faa6dd4d9b6 +8dc6c934b1463734ad0c71e641298ae0aca519168bc667ecc7239cbefe78f34e +465b10de38f54923be640a55ffb991a0164a6f8ccc09c5b041809e6ace280343 +0f447b22a97a8a7a340078fe1b765bb6f55d340f757ef8162162883ed66c029c +f7ad3264829ac8c8c26f9d76d121167a912e1bc1e2869308499a1f8dc9eea626 +fa3f9d1ca80b45c3ade3621a3d4ba9ad3482a0e13bc7382af7157633adc45822 +d9a5c8a481775c8a69765c8956968affba3c77c115532c7680859c41500c13f6 +6f5b445374a79bc199d11930b2fa1cc1f8c76848b7a34c65f24a86acee4f02be +4eda4c7da149723748b748c0adb67c01eda2a9c0db4e527f289281a70c32d574 +5486d18a49144a2d6f2d4488f61f0803805105b307e0ab0f4d795a0139acf396 +9c3cd6092cf0fe955653943dc38f9220981efe8d162caadd1f3587a5f434dd9d +0a5efddb38477d669b1f2ddb90781c790ccf341d0a348112b559746dbcafc4d2 +e9c81839e66de708f12e907552c99140c428b13920f459a455832917abc1dc21 +aed809121dd4a9df4133b84378e413e62a0fbda75ff4e86fb8fd405dd3f252c7 +bed26aa06b485eb423c2aa83e0a478235240b19ef7f7ff1875c21831c7d50eaf +ab4e0fcb929725dc92823eaf498c806a1b0102be38e754e3dc87754d1f480c64 +30d95da626a1c08434ad5edfd4e6be96a5c593b96f062d7c60e56a4a07152c23 +7fe4e29b99a23cb4a93ddec151cdc68fdb8428791987935574e53b8ff6c2a4e6 +4c6b85c47607618740797ff21b34f6a4a534523c649fb18798b55ed04d9080b3 +67bac8232a2be46e4d973f3cb860f1058ff46f7af441049855085e9ab8de8e1d +cf035c13d86c62a1e7e39bf4cda92898a21e9d1a878f8cfc0c485d40c35d2443 +87a3a20eaa6cdb4920f6779fe9fc3832a61ceefda3d6b45b5b8c27845c2e9e2f +c572e80423fe40d6d695d11853d03ead0e46974105333111101dd791c7b03f6e +11a7f39a2d2232c9452df2e7831261a365e3e79599b69fa0b787844d05c538ef +3274761f16f644fc94a7fb6ca0919fe5ee78539b59fd0232fd6bdf8e9e4b1c11 +485de6c6c1dc27f59fbdcad2790d1f9b9dfb1f88ff3330ca215e36636dcef81d +167456983820580af7ba55c1f1c6b217f8a11e487fee442235768eb7b95fdf29 +d44ab8c385236c3947925137e26fd1278d4d3fe710527d9b017692b357aef874 +ffa8c09d59b78f3175f8fff85cb4d3e07c21dfe08db6c2036e98dccb11461fa9 +ef986be98232c893e25d76cca348df852963d1fadbc217658e33c49bacaf43d7 +1ba692b8e65feec21749e489c90ea26fae3540cb3a2af56b391569fbe2e6e1f0 +4e5a83c374455e1fcb6dd1adc2ed96007258416817bc4d1585625bba98ca3ed7 +f49f6439bfb0fe67ee1752ce1a678cdef7d9b02422858cc2fda1b58d0a62f598 +4f78daddc56c29c9c5d8d1fa7567cd69f58b3f6407f925fcadf6a1111978e51b +1730a24ad9f5bd83e7a367c8e258c2d45f2dd5f7c3034690e968ec4eb4746a74 +d7d3316a6dac948d3db0b8d069bd2e833120668dd794d89f99166b04fed9cf0d +b224d6985605512acb08fa6e27a8772e5e968fb66495cc618aa42862174f174b +b400f59621a17bbb22087385ba839562281503632921c176c9e6c27bc2aaabec +ef388fe9cb262e9305e78ec22a52f0bc54e0c4f167930de0558d3a3f228ac651 +932828895747c28573d3fb5e12bd7dac2ea2e00606f1e34ec36443822cfc8258 +fdb3b8f3a8d80fe17c6ffd932d63da28b50183071b30b198b078430f8c25109f +710ccb6687fd2c3bcee778a5c80efb9edaf2609d275741575601b52f9b7fd6fd +f99c10d28f4576c29530ba7d40ae384be27d88770b0ec8d870dd3e4a20a64476 +a30282b0e816c58080b09eb651c046ee91f52ac08f6c264a36099659d1e50e75 +ea75dd82238a36e7ca1c40cfd44ffc12051b06f24c2c4a4bf4bcd4aac42814cb +ff434dc7c0a4356f4f9395913fa1df17e1ef2caf2f4afdc87189276b09988c55 +6b6bf8f4698d33e6acfc89e1bc25f0614cfcd94e575f0b881c1a8ea294996482 +ec2b1b0a6e4645d68aae01131692336fb74bacc9d91194054c76b21c2b01a8e1 +973e402e8915cab5c0b11da03ae8dc4bd570cf65746f0636a30c8cfb92752bde +277aff02df8402201779f4b675c09817faac3b384f6b334524b08ae52b7995fa +4e3c0a61f58fda7416db15558e1a6772a2349d2e1b1c669e4ba39a01b7b18c98 +aac82b5cddfde1daf47aad0dcb6ae96593904555ed04ec06a4595238a3508d4b +4374bd37d3e8380f49c01f39c0071655e8b0808e9be5dcb715faa15c7875871b +b9c75c2e0fccac1c5a597ed1d84a7f570b9fc582c6e54455551fbdeaa8796f01 +5800bd5e2530399b6be18f4e406e42ea671406ea691c732ab92182cfd599bba2 +5abbc1f25965c5696dcf2f2e9c64e138dc10bff55caa9a58a8c34519f8f50d52 +894e1d616938225abc73a28cb2f9216e8b7f1928a82194463a6092356aad8fc8 +35af7da897e58ceb6897ff6930e2712ba97e6c53c470d177c91300dbd04566be +233833750c2e79b320c33fb7413c856a37eecf0b89c9079cc7d70f8c62e16437 +3b8f43e28aeb470b8865aa04be19307d3ed6ce12940a24d8d43ebc16ecaa905f +2d7183d425035db5d77b518c34b2f002f199d27788664aa94551a7a5fd574368 +6d7a10851ab124640d58e0f67f0ad64bbe8c7a2654a29391485e571d5542f87d +4d1b016cfd97584f18f57f6bf9e2fc514cdedbcf3ebb1518e9b53e8b64752eff +909c7cd0a34a2cd3a945ab3c7049e255ebe0e40a84e2dd81d67e543ecc5a6443 +34450a5cccd34edd52dfc43fc420ef298103431ed1e49e8c2b4df26fd0727bff +7f3ba05b16232f4c795f93a5912f6002c43aa243cf3dc7e4fa5c8d9e40e96985 +da2e3ead98770fb7c07cf8e71ecff35d2c255d6a3ab730ae6c2ceb3510752f0e +2d8aeafad5a4ecb4c4d81dab5336d764e8b7df68b5088d6dffb9aea0db0f7384 +7593dce3f68c793ec780cce00e92e28a342d05f2d0b0d48fc23336c7e0dcd610 +a37eee3cd6863fd4b74eee6afd6f2235f92a1d32d32fefdfba511c8837d6eade +7a27e375ff1235557486ef07d80a2cbcb0645ce7d1d2fd06247e2b52d47a25e9 +cad734659b9bead551871b85a2aad1340a9649467a791d89c9e40c6ccbed4f1d +317b63eb10fc5b913c72e9457f0ba3aef5c50bc83248782c220ba4e1540f7192 +002c183e861eb1dc7f4f74a44088fee28b03979eb8e94e9392dbc24aee6ce563 +f4953106b2d7f71e2d38639965fa09d69d7c5569b416068612b32fe5faf650ab +8ff820bb496ed9a4b025874f7477feb37157df5a35dda9a19a7bc3fd604e4050 +5a5c5ec5e9799cbaf4a8d525d2db9084f07395d03ed7a95e2adb4865cb36f3ee +7a8cbfd35faaf669c4fde98ba282e5d2fdf8ca495ca7f1a054149d15a6138f69 +9a320b1a30f1faba3ab29ce4c5e4490aab404893afa88a1b7ae6731251e15db9 +b00e5f82f5f1e03145ae703849120f65fa475e1810a0bc636cf540ad441631a4 +52ab9767b4bc16efbfdb5c197501b0a8344fe008afae144c126eae037fdf9364 +f743c060bc4d17116e3a59ed0dc0e3218949c3d9259a6a4e0be391e8c8455600 +7871c3e0db8e7939346fe37f14d7a980cbd945bd85a78f84eb1809826c6d15d2 +628f170976117ed59290231459cdd6dc863cdad13504bf2da4c38ae32259ffdd +f9325ce161a472c192dff26a10bbb74f2209dcea75a92fddaa50bfbfd12f6683 +3054ac58aa385b4e00bda8c962261fa4edafa0e85ef7fe908662b9f1c26cc471 +f28853b5c50652538f1b984db2197805deaadc12fb9cadbb68399bec0f707bac +dd165f865a0e9a455e0a8e317b3b4c75182a5f4001c5c4dd68bdaab9896090e4 +f7e92f51bc147280b33249fc8785acbf402441e769f70b4d61991c51f6ae12c7 +6a26eee6986509400ffdf62268092c7e1ff78ae963673b60d874d2a57c2a1822 +d24822a1d8fefb88ce18b20d446f560f86e9238ef3e78d54ac04697c4ffcbc40 +09b9c1c2acbba6e17ee5fd9da57fa7e0b6aa720103862c9e5ff1567506b5e09c +47fdef0cf04e4c10374eaaa0c47957ffb4fec3a9ff0cb465a10a5b6a09fdd474 +204ae694ed6e2b31cbe9333a6be0dcd9cc1a17672fc2be032386351c4ffa4684 +42810dd1c372e10a5343b97d6f623968691417bd32fbda32b1db60deaefa4df0 +c804d1c1926f6abd1e8d8fd4087a28ad05cd7b13080490b1bd03121270adada5 +e94a72be1e1c7c975d95690d4c2147026e373d2f464dfee782b5d074cf3ba1ea +f669ccdd1ff040728bb9bbd3f27c2c63f0d381042a5e3d5ed43c397513a5aaf7 +62b4e17f1687eb9bcee0430b766ea8e1ecd137035a7c90b29e0e26b76ad542f7 +26fc0017903351fa32c9e9242aa77ced9f71623ca744ada6bf0ad855875ae6cb +90d72dcff52084c7969ea06a49db1c0a2f11a82b5f524d1efbc7a48640944d28 +2c92da4d78aa8d13dc57a2aeb3f39e788e3563b5e6a36d78ac1df07dfc527938 +a12a129064b6e581d90308e2982fbc3d5eb92d7ab8b2e34cd0b2b9d7979def02 +e9a9559cfb15221889619ce00ba62c09dd6fb51e6acee8bada9573614a0ad0f4 +411d35ddb1c1d801a8970071bc5b7b5d1c41e14e96ee54208f17ba69ce95977e +de58beab72e4c6bf484a8325a96153ed4672010717157034e02e78ab861f118c +5ed3409b1db8f05f6ebe0ad2ced8008a73b3cd355da36c721aa40bd1df3f5af3 +41389a9b965dc43002ca70a828a849e41425c85cd827fe6e5416d5bf18347726 +241d22d665332ea27392009e81b3a24442fcc1b62832e7b81b02480dc6df345a +ebd859cbe6a4d439b8400f4813cb9001f4c2fc67d86350d2004f7075a8264ec1 +e29eb0b255c6bb530206e96f39611d5446ec2c468acd603423137643e26fa702 +942d436bba71856e248c89000a6021e8bd2106861ed20c5b02ca4da733102b97 +7ac7e43e8099febda83003b6a4610a9fd0dc723d506dde420cb36e188c56bde1 +0a433a8a85589d9ca5fad1533da73075afbedbeb5358edd0e57492414a09dfc9 +418b0910b3e32efe87c0fa8702480aef1b281a5acf6d577e49f801626b9d5532 +d85ce8bab30b27c9053f740d9b1ab84812071dc7294fe5a79dccfb8ea3d33e6d +514e303c806cc8d27852acb180e2cfe39c72181ff35c8799371fb5c0c0c002a8 +b1b63207ea72646785a35c4b1d6b7db906f1a1a814c102587a4640eb8db15ad0 +4d99460c843109555b33859b1aacb2e527d5aa120dedd7e7ff078de5782ff5b3 +3aa960e29b51b867c111a439bbae20cdb9cf3312288ad9eb549a989d863225bd +a7991839644cee9cb7b2544b41e4777dd3f0dccf0337977e32c6e9791781b091 +2e568744cbb4a2c3b431f62385def0ac69ee221d4e339b407fc5641b1d67026e +76e7c4425c5c6b8f56a1640c0b78c3c514138300fa971c220fee8ea1924802c2 +f58176075ad39d4c3f336a758956c1502539a23d67ca167eb119af5a95cbe134 +5989a25786ecb9b34abd0b5814468cc339bf0df3f63fd5032f0708bf0cfe1876 +91430a5ea81e649ff57f6a2a89e97532d7b58ab4d9be95e234885b39a73a7fa3 +d0ad9eba42dd20ebe1c4805641341b7a06ba786fa8c95d055de5b1b35ad51ac7 +d3a98d7e9ead882c5a0911fa45692e6dbe34f7fd318c17ed7094b38bf7113f02 +053f3b8a8c74eff956bb5c15f6cbf212059a2edb25528f60f67d6204b08ed8de +b3f591ab5fe471ea4f602ffd6903afd034eea6b4fc7ed858c20d1e4a1c343ea7 +bf6283d3f3d8764f3b89282188941876679b48448645aabe8a04b8ec12e8d76c +75a5500659e3cc3109962fe5c945979c8f56a997fd806f3838337de82cefb25d +986a4e39416a170cd2c2bc223838d24b15330cb2352ba753bfc0d084886e7221 +2d275a4cc0faec6af2cb8591db187da7503e479c83d2cd78745c939088650573 +e9e60b3aa954044b347a63eef25daecc3aeff608cee0c3c3a7864081f7b237e5 +6806e57f68012877e0d4210e85d8c0f917c3172ca19c6fb9198ac8456dd9607c +aeeca44bb0984130da6830522697fb5d8408430217ff9496275f0ccc323a9bb0 +52ffc86a010d14478ac6ed38eb6d4f5095bfb738ef0d88efbb5d26558f3691f4 +59f62b6f3d8f3c2bf2a87634d6b65b5c7c0dd9fea60fa51822b8e185999b4c60 +73730e89c0b8e48bce1abc500c1929571afce0ad11147bb0fb682c976e67947e +6e02b7cd6aa88a3d578bbe3ea88a458629dc8799d34df525fb56b5618fb025eb +c50f0659d9e9922f0dfe78d0d9c8ade1beae1cad423b5d63d43b0e50b8a9707c +6322600d467750cfd7a4603bbdbe9e7c01899a3447ee96c66a464859cb0a886c +baa46fce0373d84f6ff705e177497315d48a1b569ccfb7ff6802c2ffda806e11 +8cc119e9401e0ac7745971d33f21622cd806ef4d761d23388d632470f4c04ff6 +ae7a008f343d80bf70a7d02a9aec04ec3953501594ab91fdad11d6119e6e5ff7 +5055af6868e9ee262c36763b29813f6a6660b18635ca76c9ca7da158f9cbc823 +c234598ef5e858eb25cb422a0a30a7bbddae046b63b2e18832d73b7d2c2c8562 +31f88e8d3ec0f6a3a319b06cd5ca75a8b78b060de77d6108f14182836f2ba937 +914b433c8718dc06dbf52c11f6db1026d2e03418bbfbd297158e18583101bbfa +7d932e2ed1a3d4bcb4671e9c35ad24732a296640cfe62adf680f66175fa8bfb1 +078b4f8a36b6a04c0534fd0037e9be040eab494fe8181ca7e99911f339d49a24 +8f084ff5bcfa9073e541c2b6cd2ea98e9818ab8594a1952a9a4a46ff5ad29692 +5a2043cb4ee3d9ffcf04ab6847b73b870350c32648193193b2de0a087262d213 +b270353988ee6dad64e54fa69ce113ba122c659ddab50525a5c5fff3855dd0f4 +5f8d1e6f4c8790ab73c2637a89af0adc86521390ca628b87a0b28b73d527dc77 +366d2bd2bbd51d881a0cf439aa85e19315923793aba81cb43ab8af1081a43f03 +8a8b6c6cf72b5f5d5761c279d23bab4cfe0db2c08b557201c583f401ffd20e7e +a459c408130a1cf7edd311410d6fc05c7cddc6b57cd75ad08fb7bce952e0e378 +f6265ce9669177c624184dfd2a8bb7318acb4709e52224e44322a68e23728410 +e7ee378db5286996320a84ee9b00bb98cc9e6a1939ecbc6983827be07a8d2f4a +7f16bfb7cca00c158e584965d7899a0a627163298030b8ffbefe9678289f4bea +f835f749d878ad6cf3791e86f18021c795038f7dd00f180b9990006b9c8cfdd3 +630a37c8ea6ca98e5fad3d4a7cc68ed9aaf043b6a2e2974e1e0b77aa9e6edc4f +491a7186ac562875a59abcdcf5b92abb49bb976a0dcdaf652ad02d70a93dddf5 +d2b2dae72861afc83bcaba60e08f5e149e5ad3e133b2edba17c77ec4bbdabaed +57b9993fe76f41b0b5677892ac3520a04cd900070e589cdcabd105294c201186 +81f1d8b6d424c8f3d4a3311d1ba1fdbde82b1181fe27559e989364d34ce45f59 +54b49210cc735bde2d530d84de0825bdbbd3a43ad45e0b2c2369d7201797a873 +d13a15e97dc4011328682a38ba18dfb2720e1ab6060d666166ac3fff441df908 +0ebb1e3a8b039e80fc5c19638501988467a55a5a72aaf62e6f79ccce8a3095c3 +37a8454de4d221a3eb4c27c77bfdc4c1eb13c82987963ca769bace0f1306f3de +5feb716b12542517ac79f5b21008654a9db7f46e2ae284c466f0474c92e4b13c +286801a27516f2e33593188700950da279f55166c260b647033d6788518fb8ab +8365fac94ecf28bae7951c0646c841c7374288cda7130b22189a0a9f54620c12 +3611842e62e411419974775609633d7b77bc5be483e13d4b34851f67f3395580 +b47781aad518df810601e7d7d297abfc761a2b86624db2efe2f11402a203ae52 +d8626d2d9830ca9e19cc6991cc818461a5a4b8bbc478de1699ebdf8a29f57436 +8503b18b699c98f0002f04018ed1f9f0b3ac9ce0f87e212b23774f8ace72cc63 +1e99c6ff814ab41433ea2ece6021ca93e5fa451e3772ad243090e0937b7484a0 +5dc02321d6c055a60436ebd4d778754f3e7e4605f4250e22b9cd1a12ccd814f1 +eddeb081c03244951cd43ef802e3aa5d1176417eef2d1c33643787f5528a61df +90aabc2fc28a06d051cb52080a55783a91d9daf657518e5cbe6a7f6b91a82f86 +0dcacc75436c1e97e2273391802ac27b13af9bf2ef23277f2d45005ffceb0318 +45baa5a0f219ef6bb7ab7e4b393eb7ab602a802cc711acd271cfb6e886b582a5 +645924862d791d9305f4c3e72969bec72708b08ddd1e784bfd93e75b2eb90754 +0787c096a117759fb3375751750589bafb889d7c3e0d72fe8177d7c29f16b0ce +96d65201519884c6a6255b50aadbfade3dece3fd1d37610bee5a31a614d65bd6 +980b7b2b12ebf02feb7482ce7fdeefc401fde075957b527bb07de743d7f8fc11 +4ad7e0d01bfeef9d19d4fb1d36151bc866b85489af274d4d58996b33d107e9ed +b62b0517d4b1bdeab330f0281ee051ac74811995d148e0b0059986ecb5d17c28 +5fbc4d7ced7bbefe9f877fc303a0b0da0988e564a28e06a09127c34477cd37e7 +3b6a367e155fb2883cfd9f05f2df64d9feb9b379dccad9d1f3a123c3fd1d4ca5 +f8993ee3f62b19015fd51860bb3294625a6f936135d0b4c76acdb41b543d3de7 +c501192ae23f20f5f03cb3a2d463e3392ad6c5ffd4d33ed382bc3068be221667 +4f2f73a3e82c12b65e6a6339dadf3494a32e7f438629b7619a807d78ca6e802f +52b450a4a60ab82ffb8345a3a83b1061320f9d4a67467f4bc46e9e86b88103e7 +f1c218b0881f7525eef46cd61719c018874681e6564294d37874fba063ffdabc +24d57e553799da32f7fd498fbf053e626834e07390aecf277af8ded94146cc0d +a01dc0e8ee4a1558a38571ae3a23ae16f6ba5069bef357692dcc6090bd2a5a03 +72acac2f7fdf52898bd539cde242d5ce0985339060e30a7b8ab2816eae920141 +47e70223801fcb31d23aaa237f9a46c386f2000681f17c9c2dbdc41e60e66b99 +ef318f557f62f9f375ffdfb97a439dea9143f0849b579fa4949be1066e28463f +f2eed4f309c8aadc0ddf04be3f08edb096bfd656d8f567b48f157b0e24084899 +03b64fcec581ddb9d5548fd0f52331cc9746a7dc0a506bb37772f1c1c98d9ee4 +1dec9b9e3bf96fc73d40f5b4220ac1f3d2db769eb6267d985d3ba2fcd451a87f +74321e8b1967d344f666a64fc939514b985ab808512861527253e0203387183d +26e3f001bffc2fc25670a0edccb7e0bb1ae77acb8099be4e65d3df6f490ec116 +fa8b1ce80884b53b22547111d314680c72ea849d66430ca595053997e9669894 +12bf8a94d3efb24cdcc547f4993ca291653f31b16d64a0b15561bae47489681e +e56df9f2ea964d6bc27ec9c33fed273e2c91ddafc0e994c61621adbfcef7e6bc +29da8d114c35c48d87633072fff31627a095119ecf2014443b9b3d180a3c1848 +1fd0a079f11c60c046487904c73e20cb0c8558e63f1a1f03810430df48044b46 +2d7dc135e3dc7df8f8f86dab887e9f3e59e07348311276bc4451745bb0038f6a +a03101638329ea3719c573a74f638540e0c6a9e26b638fc9e21aec2bbc9c12ef +dca71884caae97a648e19c2d0d1d89364c47e7f8cdb68db910bf75cf31989929 +9f73d0416b472698c88b49ea6501ef95d72fd70702709f19e01457a70f9e9590 +e546dfea29d2ae0f97ff65c6b7fae6874e230465e5dfc37e929199cff89611af +ddf0ccace45de017828aa0f60c12b4816634820fb31278ab8afcc4d231a8652b +ed7ca3f05794958caf5ce60afa102a17df3ff4022531009c4fffb57a87b8a64d +afb003137508e574a1674bb6a0a6e56c65916eaf7a280235673d4afcba05ec33 +b4924aa9a54d9dd4773a51b5f00e60baf0c950982db184ad0c96ac402a12259f +22d1337b3c5321b7c8692943fc5655e0746a3ddce98ff33b9d13f884e9029347 +2aabe2275bced7ce59373a650d11cafd1a2f74394567c6491b2c0c1546f3f284 +6e783fcd8757d2b8570f8616d60e97b3830606d04f130ec22bb950efcef6652a +01f8e358c822d788557c41d1066695db66f60440aeb80351610f7efdc2aea014 +4a682d7dd13851f6d187e9d30c44f3377c9cf7356361cc64e4ee2adff163121a +9ac78e13aa4fb1112b31153c19b0d28f007848c1bed88a10ade265a8b606b9a3 +662683a775f94bae38e065681f7e00b0afa9364e56cae809771e53b826deef22 +4f6cd881c6b7ca7dcbc33806606c987f0071925edde39d68392a137aa17561d0 +8f14c811e8b51bdfe34c0aabb9f31013879b3f8a348e5e03f7c661822834e6c9 +2f6f64c36177c579706ae06e73c3756efd98b26a9cea78362bca4cd8437dfd98 +ded00bf0129da7508680158a213888fc8165aeeddc216f77f05e635d4a6c8515 +3f953a8039f9cd162e2778f30644ef6c13889080cd8a05b6fede9770834edc5e +04fdf83bdb9422d18ed88b6f614569d63864c399942b1c9aef68272309e6bc7e +52ebb157dec5104c1f9e0c1e3d9886403ca2a2515e0bdcf60e66edba0f340d56 +c1ad2b8d5518cc178bc4a8135121c45b8afb23de5d84f4a123172f9a71f721c6 +e4847c2f5c6d30cc2a966cd5526b6f98d85d3a8255c6a9776335bf2fa1e9d5df +a154702bf15025b8cecf5bf1c66f0abc9ba99e54da9390dd5c04bb984e1c406e +1e1c964e99a2f164ce3a6aced4af3ae77954e900d5508cb7ec7b83e5ea9ca73e +e832ba8544107820e053627f8624e89e14301e18d80706ceabf0d1860d8a088e +89e491b38c6428555684e9572c82f292d59bc8d23ec39cae1ca2e152805df3a1 +9b4d96ae8debbd4faba3dc79960ebf56fb18caff0c0111543d66f3d530c502dc +cba972803afa6ea4f8149ba1708ff8748b115c523367244e9e2e9fa31c830d09 +f422f8cc49e5300de95eb6d6c07e7c7a29eb14c0ac30c5eef24219586b3ae56d +3160839a2252f464860c32b3e74b23bd6d2deb50e23f547c6d8d60415f123f24 +e3bb62ce14d851c7d103e667373d6cd61c66513c79b0ebc72adfd40b7acb6c1a +7086061551d74085fa458d212c8873e49658fae2c8c6c28d89a7f7c9deb4e1cd +270082ce880954b8aa36eef316f8409e4835d4677ea5e35e1c093fe1d544388a +e0b559b1245fbeba4eec94cf4a14be7c83bc8806151a071070cde9f13a8b8c36 +3d02b83d6f0c24c5e85a36b0fc2f907200d4e45fc4f5de13855ec20f5f9d65b9 +11b1d6f9544da2d5a5e2cd173db447995b351a722ba9122f4ba214465328eb59 +998296c9bf8d3ce6a95c458b9e0acc925cf33c35d99df1677240962cfa6e14e8 +2a0b7442b75223821213383e3785a3e3998e96d6305c61beff921606cf1cde1b +d45be689ef1edcb04cbe2c7c317ea93fbce61db1e76f8ba6e5dd3fb265f52762 +59142336e4d375337a5545f944f6f8c8e50b4f524c3421b0316a401358a2d5aa +8be973fe695518d61393ed4c7903a816535b7cc28ee379782dceb1ec955c2184 +8b9fb4aaeb7e19447f47f46ace999c7fc458129f215e4533a45e49bec7c5eb7b +9474691c5dbfde3f56a63930188596e8264c3f5157fc896d1afc5f3a2e190f92 +33e8ccad3e8aa7f94b1068370f19075fb16efe9ce48ad789e905d0218bdcb325 +c7632a6d5220ff2b05d5401b06b5b9f3e2c2fe09af3f18e8a17eb6d0c51959db +cbc76651bf2953b9590b7ec08b952ecbb1f8f8c86d08d217f04520cffef1318c +56ed7eb2abbd6040a04032f62f59603bbbfcb48b578cc8a8c332e2d8e2322415 +a443a92afb8bb38026160f679bebe4638a81b259488f73b4301e36f052ea618c +52dc0216c924e2b418fe3805eff335e6f2dc4517cd2ecf8fce49baa53c44b80c +4809bbdced1f8cc72e35f362d567b5bec58f6e9bb8bb9e134fef4a8850a11c6d +743ea1d516aa3f00f559e7432e3521c094f9312ea7613ee8a6b900fffa99b26e +896fce4ef775717c982a136978884f8aef17d96b253e80064577dbecd1747c93 +75c16902367a19d0b5a8c6f14ef55214aeab3e4983d5d00b4114a07f74ae3250 +58c54d6903f26e3283eab708d672725549105992fd14eabe5ffa167f850de4be +e473c356eb540e8bff1acba6ccae793f162ba95e8589505138460fecf8bb9c47 +0ef6f107ffff8f8a3c6e5f856c8be2f2c57c5487c9829f72a74b897258eca965 +58dc303c1c0a28503e9863564a07ea6ff620eda460a224dd5af73c806e72fa2f +ab3f702a99e763b4ec585da2783d049a58b4aeaad5f4c799e3d2d3b1bf9f101e +5b041db82f366084f692e914adbdd1240ed5d2afa22e7fc432f1bc194bbe2150 +b4521875c441a20b3d71ae58a63decd8cf47672fa04ae0e816902926c6481641 +2f139c8b605c1d065591bbda536ff18f93449ab8106994581811da593661da49 +6f964eee801f05bdcb631ed1d79e373ca07722e424a20e3dc2be63e6a0dfb028 +4234312463799b57c90aa43cb725ff51509ebd9852a37f9d643a81b0a4c9e304 +203512e475f467171805484bd5f6e38016aad5090e5d1e5f6cd4dbe6907c532b +c5ad198ddd056dff2f7f32b75dbbbabb1dc24e971cc6768e388a612408a8577d +dd6b5b8a03bd7cd432e59d34aabba7bee276bbba245000d5cd9be7f5d6a332cb +6d73fa04674da67b8582b036d93ba3014eb336ca4c03119169ca8aa5c5ccdd6e +297d651a6cbc07b8b8fffc95f56eda32bc6e748f33d07feba741a9255a8813e5 +6a788869ffeb0accb15e982debb0e81cda9733ccc8f79a48063d216691b72111 +1a871ff5754e21a7788e +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/client/shared/lib/fonts/cursor.pfa b/client/shared/lib/fonts/cursor.pfa new file mode 100755 index 00000000..ef1724ca --- /dev/null +++ b/client/shared/lib/fonts/cursor.pfa @@ -0,0 +1,954 @@ +%!PS-AdobeFont-1.0: Cursor 001.001 +% $XFree86: xc/fonts/scaled/Type1/cursor.pfa,v 1.1 2000/02/08 17:18:22 dawes Exp $ +11 dict begin +/FontInfo 10 dict dup begin +/version (001.001) readonly def +/Notice (Copyright (c) 2000 XFree86, Inc.) readonly def +/FullName (Cursor) readonly def +/FamilyName (Cursor) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +end readonly def +/FontName /Cursor def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 0 /X_cursor put +dup 1 /X_cursor_mask put +dup 2 /arrow put +dup 3 /arrow_mask put +dup 4 /based_arrow_down put +dup 5 /based_arrow_down_mask put +dup 6 /based_arrow_up put +dup 7 /based_arrow_up_mask put +dup 8 /boat put +dup 9 /boat_mask put +dup 10 /bogosity put +dup 11 /bogosity_mask put +dup 12 /bottom_left_corner put +dup 13 /bottom_left_corner_mask put +dup 14 /bottom_right_corner put +dup 15 /bottom_right_corner_mask put +dup 16 /bottom_side put +dup 17 /bottom_side_mask put +dup 18 /bottom_tee put +dup 19 /bottom_tee_mask put +dup 20 /box_spiral put +dup 21 /box_spiral_mask put +dup 22 /center_ptr put +dup 23 /center_ptr_mask put +dup 24 /circle put +dup 25 /circle_mask put +dup 26 /clock put +dup 27 /clock_mask put +dup 28 /coffee_mug put +dup 29 /coffee_mug_mask put +dup 30 /cross put +dup 31 /cross_mask put +dup 32 /cross_reverse put +dup 33 /cross_reverse_mask put +dup 34 /crosshair put +dup 35 /crosshair_mask put +dup 36 /diamond_cross put +dup 37 /diamond_cross_mask put +dup 38 /dot put +dup 39 /dot_mask put +dup 40 /dotbox put +dup 41 /dotbox_mask put +dup 42 /double_arrow put +dup 43 /double_arrow_mask put +dup 44 /draft_large put +dup 45 /draft_large_mask put +dup 46 /draft_small put +dup 47 /draft_small_mask put +dup 48 /draped_box put +dup 49 /draped_box_mask put +dup 50 /exchange put +dup 51 /exchange_mask put +dup 52 /fleur put +dup 53 /fleur_mask put +dup 54 /gobbler put +dup 55 /gobbler_mask put +dup 56 /gumby put +dup 57 /gumby_mask put +dup 58 /hand1 put +dup 59 /hand1_mask put +dup 60 /hand2 put +dup 61 /hand2_mask put +dup 62 /heart put +dup 63 /heart_mask put +dup 64 /icon put +dup 65 /icon_mask put +dup 66 /iron_cross put +dup 67 /iron_cross_mask put +dup 68 /left_ptr put +dup 69 /left_ptr_mask put +dup 70 /left_side put +dup 71 /left_side_mask put +dup 72 /left_tee put +dup 73 /left_tee_mask put +dup 74 /leftbutton put +dup 75 /leftbutton_mask put +dup 76 /ll_angle put +dup 77 /ll_angle_mask put +dup 78 /lr_angle put +dup 79 /lr_angle_mask put +dup 80 /man put +dup 81 /man_mask put +dup 82 /middlebutton put +dup 83 /middlebutton_mask put +dup 84 /mouse put +dup 85 /mouse_mask put +dup 86 /pencil put +dup 87 /pencil_mask put +dup 88 /pirate put +dup 89 /pirate_mask put +dup 90 /plus put +dup 91 /plus_mask put +dup 92 /question_arrow put +dup 93 /question_arrow_mask put +dup 94 /right_ptr put +dup 95 /right_ptr_mask put +dup 96 /right_side put +dup 97 /right_side_mask put +dup 98 /right_tee put +dup 99 /right_tee_mask put +dup 100 /rightbutton put +dup 101 /rightbutton_mask put +dup 102 /rtl_logo put +dup 103 /rtl_logo_mask put +dup 104 /sailboat put +dup 105 /sailboat_mask put +dup 106 /sb_down_arrow put +dup 107 /sb_down_arrow_mask put +dup 108 /sb_h_double_arrow put +dup 109 /sb_h_double_arrow_mask put +dup 110 /sb_left_arrow put +dup 111 /sb_left_arrow_mask put +dup 112 /sb_right_arrow put +dup 113 /sb_right_arrow_mask put +dup 114 /sb_up_arrow put +dup 115 /sb_up_arrow_mask put +dup 116 /sb_v_double_arrow put +dup 117 /sb_v_double_arrow_mask put +dup 118 /shuttle put +dup 119 /shuttle_mask put +dup 120 /sizing put +dup 121 /sizing_mask put +dup 122 /spider put +dup 123 /spider_mask put +dup 124 /spraycan put +dup 125 /spraycan_mask put +dup 126 /star put +dup 127 /star_mask put +dup 128 /target put +dup 129 /target_mask put +dup 130 /tcross put +dup 131 /tcross_mask put +dup 132 /top_left_arrow put +dup 133 /top_left_arrow_mask put +dup 134 /top_left_corner put +dup 135 /top_left_corner_mask put +dup 136 /top_right_corner put +dup 137 /top_right_corner_mask put +dup 138 /top_side put +dup 139 /top_side_mask put +dup 140 /top_tee put +dup 141 /top_tee_mask put +dup 142 /trek put +dup 143 /trek_mask put +dup 144 /ul_angle put +dup 145 /ul_angle_mask put +dup 146 /umbrella put +dup 147 /umbrella_mask put +dup 148 /ur_angle put +dup 149 /ur_angle_mask put +dup 150 /watch put +dup 151 /watch_mask put +dup 152 /xterm put +dup 153 /xterm_mask put +readonly def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] readonly def +/FontBBox {-484 -517 517 484} readonly def +currentdict end +currentfile eexec +d9d66f633b846a989b9974b0179fc6cc445bc7c8a959a39a32e9dce7faef17ee +3bec9f509ea0bb8adf2cfac3626f0443046fbcbb211c518d48ebccdd3cf3d833 +4877f4ef1dab34759b6d38f757cf015a5ccf12d00a3239084905ecae5ec9d399 +ff3b917ce3cd4e85a1c49a750549d42f00f90f5110c822aa441ea813981685af +17a0e41240e5c924b9c12d51f92ed0f3ef4fbc72c8b3eaef402c3befd6a52631 +47ff2e91ace4fcc6f381161f004dcd1db73271726d2ad25185a9b1ad0097955e +b319d5f6d40a9f7163a0e106a361ebf256f5d931e06b8d9fe4e84e785bd29b7d +fb70d68d41d66196ab5099bc38e613d11db08b2e9194806b651615dbdad9c797 +4bf4ad35bd0ce5d087baaee81b670d70d72475c0236751e9f2ba029abcb75682 +ffd70e77bbc2fa605cd824d77659de79f11275b5d6185386f0f39988ae683aff +876ab78964fff6118dcb35b502ed5c7a38c6e7f898a352c307c6ddd0558702cb +f9c763be246b45355d103ca1bf99d92e0f7743000d0019d4e66bac2292422b81 +7dd20274357d55680301b21eeded828c8836a5c47b12daaf00bdecf88289692a +da641e1893c2eb202c614afd6b70524c9e2d6385de26e6f48a5959f587f80a69 +5401aeaae3c78d5928dc524e12cf874a89961e67d9d71db9aafbbfd960e6c395 +1f0ba3a4af64ec2379e956b2715829f009faa9fedfc79e06559cff13a4c8b860 +4a07ec9c6565dd8530acee97e2d2f0b92eab28e5299648f00bfedf9c87bd0223 +02495fde3f194d735815acc2e09bf4abc693de6e975f0c2b6b0051c90d727988 +c6a90a3dd10bc83e264984752520880d26f1138dddd805001ec71b935a8461cc +0d6aa7cb0cb6c7c7cbbc99af3a513ac06848f7e6a222363f8696cf4ba2409054 +9b616ffe2d893a8f5066e6e7cdb21656530c2a720578af66d456de1723b3dc3d +1406bbf7dfeda3aa3f649077ea7ec19f8bb18b28b876ce1f8e61dfc50d7b4db3 +968efa987e8479766356441906d6298fb426a428a1109ee9058d4a71235ff03e +205a60f64b77d3e0920790200fe13d6676c77f78e4ced35f23912234da3b568d +e729baa323bb7ebb41d72994261eac9f2c02709de342ae5c070d9e7b394a3ca1 +aad2e95d98c05cd4696759cdf12d16c3e000f3b2a7b5ea03d3fbb204c6d59b48 +e4dd5094a54aacd3f8f62d63b93e3524bdfa95fcbf75fd8be02544bbe661c485 +9f4a12191be62ca8b60cfcfba14097f4f7daaea4af8675fdec8f6ac22dd822e6 +bd4cbb2380c0ce2f6e7e4db197ba213942cefeca436f33249a881c60c77e58e0 +93100c28caaa5f861d8557cd2779911d42563f5fb8f7c890c8e24bebf300c3f7 +15d0854bb460462de7364c007c0be17a57c23959bda2282f9fa8bfc1571d7e2e +5cd033129735be336dfe0efe4bbe19669e7c1a3f3d21e11c8ca081ec442fcaf9 +e4d5a1eac515db6b686f9da7757475c7b47cd2dafc56aa63208f5e0bdc127a3c +51b9bd6796842d3089641604bf32ecd04874ecbcaa8c4be805cbb6bbd3988040 +8505740a2023924894097f466e1736c0bd795cddb95d80937d662592c70763b8 +97a8dad80e3467ee8192d4d8667cae0ec40a5bc9192d59eece9a405dd140f988 +ecb324c75704e502d088b5184cac0ee0857289ec1bfe9a2bee359911b9bb30ea +8daade18b1ad9ea1c28b2d9aacd6e93833d9d8acb46349225b4d6b0e32cd7848 +fe8ec185522eee670d0cbeaaeaab94fe7904232249027292be36d2aa06ce4b53 +adb71f29d4746fe19cec148ada960820ec7eca5ebce18f19de5a7974b0d15b14 +2c0f1d0af773b4bc5ab79c7f16747b468ff0a9ce39970cf439720bab853ae9da +c6cd1e282d0860f012ca867969474e3d396370a876dd9f603a6b64afcccecab7 +dc0186a089a815288a68564f62db84d3a295f31efe6c1b40d1602e40c8fc8ab7 +713c11ec7f175b31389f70bd3255ba32c10b2db0215aa5fddb1c02f74bf8c33b +d4059f1f3640a4dbcbe0fd59bbc830881326e28b7c8d5b9704f95827e5e21d8a +f720e3ce0c1bd124963ea970e1c4eaa6d340eae793aff5f8257f471937147c59 +fdddaeed8b547b3b98adf6b5bc81a86dbf9436d010d14b3b5ecc4ed9aecf3ffa +9a4ae3b08b9cfd79370f4c6ade8406e7808ab8fe30694ae7bd9008c3507786da +543465aa40f8ddcbcd1d561a5871be7f39c95ecb0e3fd7754469b1103c71d18d +446ab34f5ea212f0b5c4d3fa8c50658466d770adc17f53706ff5449729b9c23d +72cb4ec02402c38924dccbc49c976312dfc8f086050dd5a38132eb139b43422c +756a95879b56babe8f77771f221f4f1f25d1a308064ec10eecfbb306eb55ee78 +2692db518eb3d477c4b52a182fe897e45c0c3d302aaa0fdc69ab3c26e55728e5 +5e12e7a51d28af01f104e5dbc61bd210daaa526c4dd9a93abf8867178cfb178a +70dabac26de06f5abb43392964a7acb193fbf31070de491ab477a4c5492f4fc6 +4c3bc40d760d41ab31d8a3ec657814086a133801701ba8fc4dc5ba92b03b463a +0f8bbd73b9bfcd6eba567e0c84b5ad5b32dce09e5edf39bd276d75c3cec89124 +a4a8bdf208fdc212469bc9ac96ab17e9df27ddd8b085dce1ba68ab50ea445bcd +0f002681a8dd517660794d96bba265fbfeef267d26fa2a1bda94235f763209c1 +1f817081f930f20d2d0cefb9261e22eea39cd0a390626fe71d312fc0fcf11db4 +6b0b70010dfadb9c7725f419c1c89f34fcbcf3b268c7a4f838d94cefd82685ec +b619d3f6df7571031a82e2d2a8bb98b8471d8c9febeb853ce0d38d7747c0bd63 +fe04e36dd00d2ef30b0c842d2a59457b3b41e2b8cda904a5d281290219814b59 +c4a75469375e9e0b3a358434a910bf1774657bbdc64cd408c680e2a09ca26507 +06f95e8c16735cdcca195f20c9a03a2a0ed60184c03f4e3478859c6639ca8ac7 +241b33432661741333406add1d9439690f07564d09f4b67152f32943cf93e247 +3f2a17a476bfd897ff69d4fefed1f4a994fdf535e3e45b1a3d46d560d5ac55dc +2e4c20408c8ceb82d7bc21016bfcdddb8d5daa9e902c327261549ba62090dc4b +27ad160070880cbdff5d022dc9c7d6f3f51a49af6dfb713308dc590c7dae5236 +74d7946c1db33177e4caa604ecf655b792be55e14272e0daa0cceb2afad8f3b1 +6558426e102f72ee42a5d9dff66d65d672451316fe551fc2923e4b24d9788091 +66457f55f9c83350a62bc5bf590f7135929b365c0dd003a95e98760472ce988e +0e5affd7c654bb99eb4255bcf030fa008bde51daa55ed736086953c599bdc3be +16efb2368acc883bd670d753fc7bbc65ec5bd797d0cecc14ac15f6423f0f22d1 +6b630dfe8736c2db51b45774f99280ea1274ae1c207ef3574e55478f68bac3b4 +8e24180f8891a2f3e8c0c9f74c22744830f1617b99a78feba5fbd752134775f2 +5ab542c17ce32465058ffb9e3dea8030dfe1ec82a1818c9bd1e3db30e25d8128 +9ecfaffe85bdcad5126fd461b6d5137d2b15cee2d97486f3266e4c49964d46b0 +db16d96593bbf257efaf0dc10f18e2f4f14a347cdcc220e8ba87eb215a66030f +8f30d405308dc15ee9f7d7c92c607140a6bd1cd8c8274a507c5f12293327b9a9 +e5c3a13eec859919a805f12aad2f1c665d054a17fd4dbff471890585a35f4e0b +5e64c4df9b687526be10da6eca391eb351ae661e16b930ad77ad33ad2a2777a4 +ef8881b5be91a83cbffd8b95a8f7c91fd86c71061e7717e4cb2f44f4ba2cf5ba +a64c4f7290690036427ec227446192efc7c14479525994dd0e86e7bca081a9bb +00d55ec51e1bdbb504c4d43463902c05ff0c1d67f3125b8ec48f5d1d394c7f13 +54e70eee5ec074d6a7e0dd6f3d2f006fe8a527b56a560685cfdbdbc9f5c905bb +1dd508ec7829a13a2d49cad2db823dfae5b85f3d7c04c0d8ba1fe9878964534d +c23e890fe460c0b25700c5f6432f420f3698c6a655296104eef778a5b125c74d +79ca60a8f987e278421b0d4a311bc4ccd59fc3f85972091516c8a4662275060c +8851c2532e2a1f72dca5c350a03fe829db297d0accf6458b10836d22cc461b68 +452cd2f3764a3abbf2314105e414fefa39686715463afcb6fb6782eddd94781b +5130a77d16bbf0689bf64fcb46c14682df23e70f7a571aaef0aecfda9c889562 +080d3bf39422821ae0093fcab7bc29f9c4281eac9ca14454adf3ec397855c008 +fe7a9d64ad134fe9122f7650e37c17bce7bfca7661a0a11b45b42bdffff2decc +47df5d33671daa487d7bd6a5aadb32e7257dc8d0feb9b7f0a4a7825fdb8a5cba +a31a988477486d0f09858c772b8c468b794ab2db0defa88c3b4927b615bb34a5 +8ac9d9af50a150e991e6f4330786f8a4f98654558a4fec8144eb2e46a6190b4b +5043ae396e7fca1eaea3e9a96c0b200826cc065f49c47c2797ddfeecc6e9b95a +f2deca74b594224dbf75041f00fb37f3aa70b0b0eceb4343a9331e3047e86548 +c3a7b1a42e7af0792e02a5bbd2ab548f7cb8cd112babb89213f66913dc109d8f +c1fd5307e7c20d7340372935cc459a795ebc9c4ada9136b71fdb3f68aac98729 +16052f949b6657114a04472fe931a761c4fc5f9b8ed340c16035889172f7669c +c6dfcd50bdf910c615e5f3c64101e2e6546f252cc4e0ecec03c5e19249b37269 +a0bd2e68296f9627e4ff72e37bf3c2be74e3b34d259aaecab472a595af08b2fe +db51394d6b59c390046ad76dcb8285a32c247c7cd181d2e386c6d5abdcbb3789 +3e8d9859a02c13a72743047d8880606488a521185ca446499f7adfc9a25c8ba5 +1b1c84ba24c0612ea3d957e76bc398457821e25844bbd906defed4d3ae434c39 +9e52e60fedecc1acf4ddecfe92452e9841eca92acf99c4ca9c2cb32afab1dc46 +d0ad255a851a78cbebac54fd314846c35d35cb7ea10596734ab79be35e11dbb4 +9d30fc29b140d5823f429eb8eb3d1fabd90b9c1509faf33f609b3ae40a48f873 +763b3a5d5c9236aa0a2be1661be917921b58ba7fba139796d4c125127885779b +6c71427cdc5812dbb6725153a83809446d26f9bc64bfc2a2a4bdca0c57a20918 +4415951c5d56cff5a3824ba8f8c0652e91a5d9c04d1ed0d928b33801b98d36bb +04af8348436aef4abd549a063eaed12f7a4655f5183515b067eccf550f7bf906 +abf1dc63139fdb1e8a1d2472133fe920777df1acb2d12f5b655e568bd42e381d +861daebf84ed9c6db8d307de2bed017dece82881ed7677b5f26dfa34ac25e19d +5837f76dcaf237de6391c1d6679dc1a981737ea3e07e729060a0472090d5c76a +dca9262a3823f24b1ecb646aaedd7de4a319f091a948935480d53376703049bc +a45851f924ead472f1b100ee7b4b388c6d37e6e9cb850ce7da81896c1ab68677 +c3298a9e5aa71ae6379990327ec585aa1e291354e44ad972d3193424a9805226 +f43b07992c5f1c5e01cb5d049ce2922dd2921ddb5c4dbce968dc7a340ba0449d +11ed4160c846a508b5227bb5ae574c8c7dc5d43a0db7a0bebcc638814f8933b9 +03404c4e720929833b4a5d5b3e54b806adb35724c2ceb47d77d39e43465e7a12 +51da0d53106f41313f92fbf9cd992bcfa4d13054bb7154965dcf530b2e0cd18c +92690f54a6c6d7bb38ff4c59d8e35359eb3ee07061356ec6506b2081878986de +80a2ba253a34519189e706fee9906a723bba749cef1c15abe3653eb31c59e486 +a6191335292bdbba1c442b229b56e7180be446a319e811327ed75f939936cb0f +56e123a274c843f27b94b35babf938717b4d02c2a673df0a88d35c35833c4d84 +1bc1d5cfb8a00a181cc1bb68f9dba8fb10ce8ff9a520d938ed21fefb140b5634 +8f2c237d2d1701e50d3132ff93ba3c0543694c83dd500000b829b705e3268ec6 +f94887386593f0e629f6e74d3cd192a48c20d0b1a00ec7b18aef659a62777caa +3692512ea0efe4b8a4f2a138631b10b59f0df0fe27be23f2d3e1b195c2375be9 +6e307b3b8404d2cc6f798fc995c1547354c24e04cbe50d273b50967dfce4ec7c +ba9bd4cdefee3ff4310358014dc02ef0be941c4a8273cce80ca9b8f75eef61be +854b698a2ca1100f40987aa622fe8fd1932984e77e8c9781c691734caf0c4e86 +566def79a60cd4d3a3cd79f59332ac99315844424a627e2d6d38b5d6e81838fa +357f0d137804d5a29abdd374afb2e3c4f5901cbaa94b8d15a5a8988a62fb92a2 +e06cf8788f37a1aee7adc0e67626d0de2881d822f940dd658b5f310a1c4f1bff +cb7fc9fdb347ad0372127ab143e4d80657e5f0c364f4721d5d68ff624705da2c +27090a53f2d481492c3b15bd70fc050f909edbc2bbfcea26ae850abf2c2bbcbf +fc4ab4d34d006a1a41469e2c8a8f5b4ca5f9820d105ca12f1d1240dd32d955ce +ef9de1e096ba539a3fb11415bdc0851356a40e0571a1033aaa55cc3f618f372d +8c71ec445768cfc42b2c10c04e45e98a649e770a324defb330b84952d46e5287 +65c417a6a82deec37727a517c12bb296eeb5e6c285dfd16a479369bb85289a0b +e24254e6ab5de4e3a0343e7f901c6e39d79902e7bf437087fc894556dca62fc7 +114b344d4052b3d7f84b07ef17199a938f69b2586ce6a9bb840c7dc1336e185f +6264b644cb411a2eecdc43e1dd26ec51a837401cf78dfad608a3b9038f9a3a40 +9fc464ff2214599f8ed573112ac944b593ae83348f92c54ae5d6db5956de20d7 +4d48f8f6c685a70265766a97367ec2d7c6e1ac00c30fd3b0fa4d2891d013d840 +693f61956cd4dd4ad134886868a55d9244f58c27f101b321ddb99b4e2eb23137 +a2e596ee6d131304df4265d6e72f9425127729028cf2c3375a4bba7ca9363e30 +9278afe6c282536537034c787be5e9ef1a0053c64b461ff496050cfc8da1182b +c1abe0eb88089e2d4a994108b1d24a2205f33f3293954b8e8102be94aee1e8f8 +d725d52e87e57a2de1f79c68ca6b5b36d05ac31c2d2f73cf5b955b602a1f2eb1 +6091edaca5e90cf43a1fc23a19e2fa06eeba82b15704ccb5b1b93587b2762517 +abd0e6375409f518e74d727b145daac480a52602ef35aa037647d7c0d403408c +095daa192800fcbb56e5af904fb72d069f6a15d4f95897f530bff36828630bc6 +e4f83f82a6f0814a943a49fe2288eda1452db8c48cad67b1b6398e481ca1835d +b0f9f9257fd3c6aa11a7242786b47fe196cb4860964cba7d224acc20d22fffad +c9e11d0c6a4487b53654719506c04b2e1ec53b3ca316d5232b821e5256fcbc7e +7ee284e54eca74acb23fc3efeee59e1dabdd4e9c46c7a4234f7e3e5784b3e65d +32ebba3709c63dc9ebc2dd6891e39c87bf846c3fe524e434d98e2ad199230432 +c84c95422e8950c4323caff03a9de5daa32a5ad3d07b5ee831bd589c0e331888 +33ac8dd264a563457fe1213d23d0d14536ab8c1e75e5af941e2068d1ba9a74d3 +ada91585fde5c2797229599749c420c694108595966b815c96adf3328894e76a +a0cd504efacc06434c27cbcf96009947a0f80315879d2108bd1611d6f4a5455b +178b5a85b5ea739546dcf226c6889dc02dc08b5dbad34b702fb77b82069777fc +3892034144ce7995712e3295cb7e31095f430622eec4117d98fcfd6075a4f0f3 +01794fb45f3a05e725588fccca124eeaebce479b9a835bac7b113dddab302dee +6c50e47c8e87718b3867c99025be81d05a905b2a9335068b59de14733d656b89 +97d21bb34893b9548830c45071921d0f13add9d9b75a6f38ebffe39f1d2cc4a2 +2482a80bf04e13b0e3614d1326e97e86b3dd77757764a9cbf6a0eaa530450928 +0c5926cf98b98bda505da3a35684fd0fe656e71aa67ae6e7693d3ae11425e6c3 +7fe01890b287f354f747e4de8d5bd48451ce4f28ed4bbaca7fac03eae6525174 +6e75b117e4c7fddb6979ed288f81053783f49f4ecf3af9cda24a7dd6647368ac +4f2b8108451496612276dd42d7281d6365810a5ef3cdb304fa2630432c5fed60 +ace8924e807b54a77d63185e7c7ec65c887ff17a3633322c0d4c8367affe2ab1 +0845fa3f85262ed12a0ca9c74cf1c0f87ff1233868b83238831f911e41845abd +73a346e7ac01c2b07dac7153de91318619f576a5ff1c0f9ba90315c5e89b8f37 +cb2d8d413daf121e0c1b3aa7bf1a62a2ce28e39d7c43da5275e8f0972aa73986 +98dac6dca24adbaecc997ad0488bd9cd356dc86c15756ecb6fe2fac61d4553b3 +0b996e98157e29e174bab3af12176094b414bdd13f4145144f087c349b8a7042 +b1e5b9e705c93ade44defd86ffe43bb513b3254e8310ec64409e79743c2f897e +40270fd5154140e0e65566556892c49762a351845f767621f5f5e5cbe0b67109 +84e30ad39832cc5f8857c23aa7b19981ffdec5e4497cb52da24fd1ebb53855f7 +8f87823ff65f6650f362d6741f496c21f8db8a609af33f6e60f858e7bd5ab91d +9ac64226eae4994670acf610130e10e7e3a6b1e6f3a07b87d4e6b712d243a493 +d5280549b827378ace2f866acaf117f9094c2b15c2430624d2f1c9a8ed3c92aa +7c3ceee15ef6eba0e90686949aee9f375acb97a49bc96942d20abeae79fd8e04 +fdabe92b3c8b493f3d7efb13ca6bb9b8d98c41fc4c4f8e171dfb2ac038aba4e6 +60724b873c96a9e7b7b4edb24f09e22c937c8068589afba95bfab3c0618aec42 +fc7b68f1fcecea13a54f421c23e2df1b04785dd471f82587616fbd140758e21d +17a1ff6dc30b301925fb1d2956cfe57f8b1baa1ccf4d171fe03c9336bdd0678f +4640dffdc2ea1834e5eebfe68d4c26c9d009cc04d0cb8ee8f4f0bc477df068c9 +95eb41e087a9a4c390ac5ecc87667aa713ada2cc1991262a20fcda33625eb9c9 +1f419c6723f2875f40de2258fbaeb821e2a398dc0ec62119c4efc1e7da92fbb6 +c0175c56d32e975115a12697fead8852b8fb75b23cef1bc53b8deaf493c7cf1e +9e9a9ce177bd9a78ec55f3dbfd247f9367974984f31ba071365fd79bfaacb882 +fab5934f730081165771963587130b5a1826b618ee51001ea81ee3372507ed03 +545d33d977d4bbdd73e0d1f235e7a2e020a28759dc53d383a980958ea0e49865 +b3658294acf2a04e0d93bc0806150eb192c8fd02c5dda1fb457bbaf0f71fd063 +29b87327fb05fe02ff88f7850d17b65ef608e7857d2876fb37fb0665e634cb39 +2ef9a4e3751103c087fa26998f68fe730c0ae114e34a3d412e715c7a12df3b56 +862f24f1fa06f6cc83769ba4d310467b07a91ef2dd6bb873deee11f1f326c40d +89aeeb8f7ab1ba650444b2d3f077dfcf18803f38942f3d30f22d93cbad14fe1c +1d968b62b018525144a5d2ed4bc636a0c9064940ef84d9ed682004774d8b09da +998824b6cd1e7efb724fe553a8566b51bf2c6ec6f949501ce0bbc54a9309eaa4 +378e143ce3e035d57beb62873b294d07b920fece0f58d5ad1c5c4c67d3180a3b +33eae3ce510ab906c841ecd9366ff615f07a905df9810a163ddf8d681920bd96 +d7b2212c74a05cea57e1e474be64eea47b8433755d72e5c1f79b8fccbcf7106c +b70022721bd1bc779bc3f59301fb393d4429bc19084e228034291413f21fbd79 +83661ca0f6d331c1657fa69e2117464b8fe708520655c58b3f346f9213630fe0 +a31a55ecfc61f5466ccda3138f52cbbd575a56d4abe425266cce9e490d03bdb1 +0f9f959cbd9e34505dc46b9a439167931828d18f8e2b8a0b5d33b4bfb64df5dd +b3825d34568453b740127811f4ef2995d0e7a09f29d432e0e0097343d5726719 +b04a72b4a5e0aa2804d6f7e155e1f89a168dfac8d593a8af33c075e213c0ab66 +366fe474ddb9ca17e6e7bce12b473ede15fc938239f21583bac0d6951648cc94 +cedaef748a18fd237b8b50f36fa97dad4b0a2b9e4bca1eb243a60b0eea59df8b +74c76ea6067e77c0fa5b0aa43330690462851f923f6503ca2076f6b3d10483d5 +a1e8871c08434f6f2707f7cdf3a68d7dbeb4f2c7332d01435e37787877a7a29e +a59c1493f2a959981026d58da06923d04c47502c7b5bb7f151ad5f0ebaf72c93 +db1db631865b261af7835ab3b596e4efa81cbaa8e6ec72f784e0b268f71d268d +517cfd39804d0759486f8968ec149b1952be695da8553900c7e7c6878b63c664 +078dde438b8c75888e32c0d3285f6bed05132ff8e81e393b8be800662356b8d7 +b0fbff19c35c9ba9326b36586a179ae3e8869af85ca655406e1bd5a36c94ada6 +f280d1352577263444122341f71b118c95ed413a1237a72a78b59d12eda3da5a +3d9fa119572142e43ae69551a024fbce71d153a1a1c211288f878bdb3f8a9502 +4a6420b3ff69f0ffa246d5ae44370a24576118dcd8c5f28f6988fd922ffa8cc3 +af68ab7dc10d2c3bd5900b05060b984a063bfe7b03932a1a4427de62b8e4bc21 +4ef0c83fe86919a766478406f57d148ddc4ae0500e6e15246e31dcf0a7149ff9 +1800ade772d44268a63d11ee0f3f8ad11b01cb96d04a52d57d827fd931e7aa12 +f31373e2de4027c293a1329311510a63a268af6d73bb839ce767b3bbd4da9680 +4e36dad7495374b17f506f899ff61fe23f71310b8ee2f530bdb6d8c951fdb34e +8fcfe71b12a555f174cd72428acc96eefa57652a2f5dc1a446d9f363c7994c53 +0159b89ec2694fc59cc9e083f506698db58d841d03f3961897168b96a3965a92 +500e29b74743e35681fcf93debff5785569e3b0e42b2b586dacacb72ceb0dfa9 +6c2aa8902fb26f1c3293177dcc7f70b54d85cf1ea4ca1a980e0e053bedde3eca +0aca76c214fbed2982cd51892bdc35baa7e3ddd34da26a5b9302ded1de8099ee +0e87410403d8f782f46987be974b25ad7766608525de89cd18bb00f831c8b3f0 +54db8cb4ab0ee2a9b1e63c8840ece040c3d7d763c7f65bf4ffcb33e7ba98679e +2f2f77ea277314b42e94e936751b1c649afe60fbc8cbba2655c4bba13e622e92 +4f72a5612bd507388c7cfc8077209c68c4252a81f8efbe8b8f9799a947594894 +8a1d1087bd458d2436f837ddce87ebea385e3c44f433f2b775f6257b1f80dd96 +2bbb0fdcc8c78d32dc1e09521bcd9810fe25117326f2ba159a60c26d5aebae75 +8d8a422e14feebf2cc3d30e6c70e320d3448eb3edc08ab72e44824e5175790fb +4a6401326b5ffe81fac99839bdc39a9af68eea930ffcb80223bf21e301c531a6 +2a523ac9985cbac3bd9e426dd9cf6ef112817313ec460f8b90a4a2349f819d74 +3444ed4872acee556af837375eff1b44dcc310f4ef67758731f7be7c1cfec351 +ada83a533c06701f63d2d8b7b2084afc5e7949ff250340351eb4b2886d16ebc9 +7cca76190f3a4a58995fb281a0dae019ed92b64190656f7bc5bda4b2532c52c0 +aa2d5ec6168e24b120ad5ccfc0bd31d631345c2e2cf3c7fe1ef9ca9cd4322b9b +9d587204a24e18ae280b2ece030626bbed9f66f2979131ba38043a92d19429b8 +53e3475c7b933e054616aafdf0d3fb6345ef888e3fcda12985c2b2afeb2e59ad +ed76cd456c6ac11d453deceb45655fe71a3ad5f5f770a7124a2976639a0a5847 +b79379244738b5a7b176207080dcbbda96f43a68370b434b348ab5631dbb1d04 +1f1082c04c564b44191a51afdfb3950c2b65f9c4ed4afb5f4bde68fb7a09d710 +4bbaeaab1612c1a0b1060fafeb385da056099a2765d69388d9a276601bc13a54 +fd114f2ce447e68ef452a6703d6fad6acc3bb591c3da0581c45de6f2edd02422 +aaed358aa940272865f7f93acc28460c8f0f5222454c05fdd3eb100219113eef +5b0c02314cd29c2ff20f4e86b7866ddc9b8eca4c7256e9434091319ed99f9446 +f606dd0fe2e5b86e3237b2af55df6bf9624b286a1a9970759fe83b3bde380b8b +df7132016d4be25517449ad88c5e6da4e292da5632eb662a898bf2c76714b963 +ebf7e7cfd268198ba84cbbfecb7c3fd01612f7c6a9f118aef4cd59307cdde680 +25d9f98dcc9542ecfe6a8bd8b2d09caf77f29e4644bb7b6ae295277eb8f5b733 +617f4ed5a2111a5d9eff858db8ebec3e59e8fe318c2e7a474f07c9f4234c9add +fabaf11cac0a958be217bdce993dc99865333aff57576ea0e43fc70016c23077 +8ba456546e8ffba24581ab50e72fc463e2f524a07cc6bc11a347584d4c9f40aa +8fe8a6873b680b5e7871b47e1103a77f0fdf2110b9801e8f24ca8218e4a9724d +021144c9449ded25b0532a33d410bfef2382e1ef629e04ba1b5fc09d86b85481 +bd8b1f1d719cb01352c49e1cc54c34d115a6c1d0f07a83afa2acea650ce304bd +919eda435e6f5a044ce65aeba0884f5099d860fbbc90dabbf0ae5cb1dd59555d +2ada2f748f3a74010519af69b8ffcbdde7e88de7ed1b0f53c255cbfb8e41fcb4 +8c80603c8be3f3965b3af9f94b027dac3754764f75509ca2f554ac1de60bea69 +a53d7a9c4973b51a41aa7c0386117b6353555b31670c803db4e475c330be39da +4d10f247ecf2992f3e3b35cc56bc19ec40a3914da09c914005419448a633518e +3d4a0ff8c39f6ea57917fc87f890ef834dd2c6531b3fab0eba79e0f580c19291 +9974c58cc1320d8e66765886ac966a55e594abf6fa69fd1ef3ad7dbe2d964495 +08dac3b161a45e836755af3ce6b0c3e3247fa56d71723e41838bed42de4404b3 +967c900ae419a7006f0832bc24559a56f417921ff6c83120e70fb9bacc6ed431 +8563d3a82877b5c1422cf56cda1305e7154ad1f63873237de5ac6f382217c4c1 +17559be71ea1491edfc3afeb9809fe0b4e9b6e830a48af9798e70c9411acd054 +9d835fb1466aacfb17b7a863c7a1cdc81811c220007ca99454e8c423ac95b8bf +13ea2b29bd1af8ba4e56662df2eca3ac252b683df1e9ef0cd47326252131649f +e64086725efa8a6886b8c6dbf56490143d5d91ccd1c1f3db4c78ec614c3f6ee0 +3a5cb384ad5b7f3c7e1fa13ac9cdbed4eec6c5012de7f3f48b41531a79708f53 +d5f16ac0b89c06267e11a5fb32aae3ab16a1782489945c14492824724206dddf +98cbf03cd9d969a543ea1d516df6664b4a839281b179d1096a434bdf08b3b6a8 +b0231c8857f9d4b4436f9c02211b6af4bd22d073d008bb8789545b7f93635082 +641c6e475c12ce89c0a4361e91dadca8ec20583003b1c9306122accc59fd089d +28757e3e3324c4bde7ec7a161b49bc994084a42880693ffb8676366879ed7554 +43661ba1326baaf4dc099884f753648a05a37c71be30b4a3425d768b049a00e3 +2a3f3c3b12ca5c99bbf419fd25714cbd00a850c7d84a0b4c3e5346cdb1964a0e +9cd1ac316f017f6dff9679091a6e93a70fb6d26072a2dd886baf9b4bde98cfc8 +372927bc92f28bb3eaf14252c7661be1c656129af8b3e468456ce20f872bf151 +22ea95d1c79560268976be3ee9bacb2a468e1e84c8c387ac41d3531742ff094b +c3e14b27444d2d0dd8f4dc738e0af4133cfdf7b0808498646e6d28b738e80117 +870bb74f8d4947a15100bd891188a1609560000bb7bfdcc210508903dbdff736 +07dcc542b58699beef7545cf0456b8ecda464126c86ae3db47c7ef6a6477808e +a8c1dc20768895055bacbe2562921d078fe91794be3ef5ac268f410e4ea47f0b +68bbe84e54fe139dc9f18808574ae9316e15d0f3db78ccb4c0a8ac63ede19a31 +09749a0829ae1302fc18d38d27e43cc24dd43b091a58ec394f998c5fd4145781 +d6ef576e99c850fd41d46450fbe5d5cd4063d0a24c8bad4a45753335937176df +36d2d60a677fbcf63d8342232b3d9c0fe3062ce4f1ba853b40bed54da124d913 +4ccd113e18fe2d0c4bd55b58fd5c5fe6321996316eebcdaead6751004dc26676 +1f47c198fd7c0b686705a63a8d2d7e79fe826edbba1d166822aa804858c48f3f +2a126fb0e7b2d0b4f2f082b78b98c2702f5ff3e4307e1b55fd99ddd861bbaadc +90075adb2581c3d4e5ecbfa5bf8fc2a4cf6df7bdc0e3382bf12e612cdf016479 +3e237ab37bb1049ba63bbbc0da17d1ba3f98d88ba38f98d7133f53c2b9e87889 +5304664b4d5b6a43fb2577c5ae332fef6d7b7982e0ffb57b265d0f51cb569936 +8fac060e6ac472317597615711d6c13058b2f192982a9e858c093f854a60ae49 +8687141101d45bcb53dc69d432e0632265d8704cfb3766836caa3b09b2a44a1e +bee69f88f9b8e62d36dc16fad6fbbad7f15c91f1d2431ec61b659e9072fa34d6 +8306c715e2d111f834f7d9fc93a902976ae995bada6bdcfe09d5d3a67b247c74 +1e45d070c6e02c7a9e4aa540a8fe3a41df7fb4b60dc943bea339219bae869762 +223c7492de1434dd6a75c0366624f936179c494f7166085416d126a6bedd962e +1321f9a2e1b359ba90023ac18942f3d19f8dc7ea36468d055d68c9e758c0bd3c +7bd2b10e7567282b6fe689a2c713c3272a664df39acf1eff9e3a64a353195290 +4e100ec249c9de6196020e30791284f028f8d98e4447330cafe620642db22f16 +e4dc191d9c2d4ac9b54c1de35a59b2d3138fd686741e836d55d4b12ecdf1cc85 +5bcce70a55d9dccbd33005e654150899527801be8ca74b238a7be4fa846ed624 +9e4d5a6a0fa190963db0d0b8c5f982aa477bd202ce0fa2fd54c3cd4d788d3eb0 +1317a307682c2a2813b48ffd7603a4b40d79209d49eb456064e66cdf7551161e +9204ccd7d84c0deb458cad1a4556a1cc1e7df0c815da189fd9499e58c9d22610 +f387782f059929860518d3ad42cb245278dd67b01c9e3ad391e0a57b19fee753 +824cb856bd538a05898ded31e347c26ad123ff3669ac5b39e137d655b1c05899 +a9f73546d556290347af154004be5e9ade507c27292e9c60d8a2bdef92d57a90 +89ddeba1dfb5bd781c8ee4d036bb8b67ede9cdd533269c40a7f862a4ded71e16 +cd04e4f144cd4e2070379f4aee9c47781a15b46878ca5d640e0f434010cc15fd +220aec4821174563c17e19cd934cef3290b3462ef9cb001b84991f29e8de05ff +686787bd434149a2dadd81e4bc4079c31b7f19ba28eb7240a06b9cd5b5e11490 +66573636e87e5c0a10d0ba380117618f8bcdf3152826b110a7218c329e49fedd +c3d494bda6c0fed8ff7da20da6a9e0b54ec79af50c7fd1577bc4c5fe1bcf35d6 +891091bdbc81d468935fdc75756067516080fa9f6cdffc557537b959d150d86d +9e0e1794de22b011073e79eec4ea6f14d6ffe0a75677d20fc0dd0391603569bc +8e7ffee11b6b4f75f081fe4e7a9eb847a49d11d8531bdad6a73f1b9146625294 +85db9550e9ce21213904a4f9997a83c1bb9d53f5c2099ba94f56bb7985fb1cfd +be30d619af77363e943b7e94b12f88fe3f3a1900d722107350b0376291296f94 +8515d1b41e6bbb5addaf252985596f30df0aaa37b0e16936dd786cdc624c68d3 +2d796eb0faa89df09f0b41980b8b86009b682dca85eea7c16638d99ea711c631 +35a79c1d426ca9e8782007c61e424c8ede1d72dbf919267d25c73727882557eb +f78da42d7e816cc83d80b95f3bb86356314e65083022a08f82148044d071cdaf +db03c7e44017af773f0e7d03c2124e3bb8ef458736c1051f70fa18536395e521 +cbbe933c514747710cb9edfc30f774f75bba103b091e24e4811b4a8b9ea2b492 +de7c5ce1ed103b70c913261fd04caf13727c6df5d246a419c52f175e580b9f73 +fa96742e4f119405174784450411374263d2fa6d277cc0a9dd60c97e9bd91498 +a7942547c6888fb80f8f9a4a3640aff4c00b2181e9a89f367a680cd1932b7ccf +6e1604774602cf412130503d43f8bc54bee8514a24da005c733295f022f6755b +e5387da8e24854cdb5a73c39b1c34c4d1884a4d234adfa8d104c004efacdd2eb +43f20ee50840d297bff0095bd290ed796f726b506e316224907130eac9d99a69 +3a62927d3ef4bafe96258b2b391b373b255a84d6e9d03797f0b1db056052a5d7 +4d4754284dac23a05ad8f2a0c823a8a9add8669678c9acc3d1d086ef67e116aa +2542986d3a021f8bfcc00f66e812c83e1235990d4adeb39dec07e62c10089c93 +f1801ab8f6210bd328aaf6d44e0a4df0d5b2ee8ad1c8f2a21f43e4f9b897ada3 +88653a83ff3cceabaee4fe26de33ad5fb3337e48e35d14423718642c4071a56d +f39725f27ad0f2a71b67a14708e70007bac926be651398bb19746f14d1271873 +b7d77ac822aed13b6689b311ca57b895287e16acaf3a03cb9424dc840ba5fd17 +543bf2b93b4a11cc9cb7f9cdf118feaab5d22244096b4ace849d8e51c9b86d4e +4c14d5874bb374b75e8e468a10db921c066c5c095c5886f4f21b4cf32801a1ce +ba7968215ea52e217b2f892722f3749460b65838227b45b4c697c2f7d9ddc59e +e76a83887354180d4eb39a789f0c4ce770f54802b55c238b5189e8809bc29775 +e02104bddfab6edfb13614960b68a49f8e903e6c53d38faeb9472c8bafed7516 +0fad6c4b186735d5de8f6a655ca46f880fac0981383b4720fbb3cb90c757de45 +8f0036a7281b877143b5ae8d0bcfcfbf15f7fe641e216d09aa391ade483d0b4a +f304f07036ba5b7f32d9f2d0c8969c4f392fa855dbb57940e80e56b3209853cc +f140c62c9af0a44b180280b95c9af522e77b0f32de23eb5f7625251bfda99170 +e9dcab1f6ddfc1fc7d9ce75c8b9d9350a73823790b789a41b33bdd12e5f527c3 +6785611b74f8232deae963e873156e473f2282f7598d6b05275e8c5ebeac183d +5239da1e92b56d987cd9e8d817b2be1730651955754e028b4041189921f28683 +8f80a3097ce2e58784a85a18477617d1565160895c588601d71584c097711d07 +fceb3809a57de8185ef6f4492f0ed8691693cb3c83a889f4116684657f1aca5c +d954d0c87ab67b71e6f13358a83c1a651805a7d3571c0c9791cb761014129388 +de2dea7ba4d0e10c3e3055155fe5f713e51e35d927ad9bbb85b033b9c6d94737 +22cda751a32c178a3e9a526ec9f50d3ea4dc1c4e979597a1f85e3d4342e25e4d +2bc78e24765ab3cfabd4db25c870488c2d5962756d737bb1c27ec5ea049e6ae1 +91ea186f69bfa8c8969c6c0453a47b73d9f6550131e73f00140249cd8dfe74c6 +c585467610842babae638f2c67ddddde42cf80d561cb19fa06a3b9ef7dbeec22 +e0083cd8916482c5badbcbf03e88f28aa322480baed5cf147f7077da4368da03 +9ba3ed7a96798b9bf4af20946fca2d5cce88915df1e03bccc0a8e8c8c65bd6dd +6b2195c57bb04dd20928222a230f22f564f51b3e9fe79564525eaef5d017872f +3020c9326b49682962c78064c067c2b46fa3b94567647e04e9e059287bf2895d +9d9d169816cd864157c41b432c86626680157cd9e3bf1554965ccf68d033123c +3667deb2680ca27d3241d6ad950b50ad22aa3166f566c91128cf9448777a33e5 +15a5bf3acd90e0148c7798a5a3875c7aeef66ac2d30c16e9ce00c71c82484f9d +39ad43a5a30dc01aa0e0bf5e18d0f91f0fdfcf8c30fb6bbea79a848af26d02c8 +431733f1f7e82fa4b37afae125d374fc172d1c9197ead90f986afc0da1243ff9 +97d02fc4b4b5c340a748429841b3a8b56cf3f72aedd6a4d90575fe7c781667ec +155153ca416dc9eaf8df3830eb21e077653f595ddad569d8bef8802ba2d2e2b2 +7123b7f55745380a83080ea954ba9f2c9039867777b33d1d3dd812d4f8166baf +9e1124da1b7abdd6c69596cdeefb999777943235314d3098beb54f8f9ed68ec6 +b6acb5aa9d3347b138636a0718f19a06285f194e7a7a81fc94e4d54110561e5f +61b8fee49f71566c8109162f879f16b80e3ef0342c1000e0cb32bb3b81dff1a4 +dbff77e91e6a561630848aebd0d1c40c5f3129e409da578238889870a7bce285 +b744707adac54c8091b1b1f50390f2886144294e036008c3e4f20267974310da +229b68182c2bb1af96139268da254217c47e5e2bc279200d858ff72a885fb791 +43ae0be2efd2ba6233620c039a1d47d8b111cd330609cb1d810279a7882aab28 +0a20204aa812c580712c7179488815e2366103d96cb0d564afb0f5a020493076 +46cdb743dd9df4f304a60871e597bda480624939ff921d7d36957afc64d5a507 +a48f8a087585bd0548b1f2c5a4c72533cef1db0694faae62c035bab307b765ca +422f221a5536c51eb201ff03b81834aa581f36c62916dfb1dac0a680f1f4ad6b +2353c8603e960f4a70b2aecf44c0d134374c35c88a77e0a62b542efe834e48cd +4de9d5a989923c8a6da285b3f6ba2e8ba4df07e63a16fe98bdd392df72759073 +f7af0cc58e8f279a232763a8a9d18dcb205350cefa25012c0183713203ec50d0 +f2d6bf83edbe9a6d933ccda8b1745b183adf413617af83605120075f49db2a24 +df5dab6f8085d71c4eec8944dde3ec0c1e51b4800a90116b25204a3e51def988 +eaa3ddb44d44a052477e2ecdde55d0282a5a9c5f4fe31f1d0bc7f40d1f76866f +c31db401b2865de254b1699ef0660727bc944470949955feb0a8077be04a333d +72de1f17e061040ebb66504544fcca2ae6b1b58dec1478967b7b17659a4e8c9c +fb5cce0a95f52d3b5b9fae59451608518b907aef2e1e94144b72fc846b1990a4 +69674c263d050b38ee61ca447b0b25043c980d68fadf6114bfe9319f27ece2cb +2437c5e78984c9599761d264bf15379d554540b13a2adebe9d5dde18b5663650 +025f9db1e17d5ebdd776125112f32c157d87978c564afc1ab4bb9d734689edf2 +e165cd4ed1eb93b699350d5253f3f869953eeabb6add680ba6a2d840bb7d90b4 +c4e478460059c38a99be0b7c07173b2fac2c68e242e9d3a2eae427c6fb733698 +e429a14c8b04fa08bf6b9980895b4706da12e7f8cf42fe3eb14aaadc87638a45 +704b14972f1df00b8e7a9354c15462ae600a6a8c4b95f33acd11a7da207e49a1 +192cf225d16b58ded179c8ae20fa7d6ef7fd384e7941a588fb7f8c5c29d98172 +4a848cd2a7109333f2a5963f2f42c6835170a57f92c54f03fb2bd434364d6a55 +d5adc8f90b553cf66848ead1de1197b267061f83442021bcd668fa332f3f2034 +143168d02812313f6abea888a321affb1a540a20df468fa35562ea4e45640c54 +e03f932f5581de862bf2bd2c05d2c995bf6ee2039a22ca68c9a71990cb499081 +60b1ee8c5dc10c9174e88f2aa5791908fdc7f7d37e7bada45f04043ee35d1dc9 +ec3704d315bb4e372ea62da6580a5cb5192ec21865ed4ded15de27bbb1672531 +bc5b4c3b2ac266dea3812192324b38c50e264f2bfd995e3a33119e6b47f23fd5 +51271d0a7603da01412889b76031948f722f9fdc54012b4ff53cc77e9a787946 +b79a81d8a32577317f3c7f715f8d3f0daf03877d06d4161503cc441c723166f7 +40e4727f23a4c75bec756e4c40b0cde10315afed35bf03d523d6ae00bad2dbd0 +358e691bf92867237ab36951657aa0c4d79726dc75d8c1c272da1b3d0b47f95d +2436d59ca941577a232e540928bbf58673d51715188aecfbee7aaa56fa672850 +b047bb56b9c8ef5104b10f8117402b229e483c863d4831b9a1efaf164e99cb35 +39c0299e73158510e5e1f861a6715b979a9982dfd800b0e38a394f169f0f3d9b +f4f931de232db24c616bf79f59719e6bad4e451df62e9769ef3b2e74033bb0d1 +437baee3efb900853193f6ce69c7d28a871449e9f84909a96e594db7fd08efc1 +217482e67b2e02065e60f4dd931136556c80f39641860d84b7354e86feef096f +06e84d35dc3645f05626b80e24f01df1031a4e1ee3df4fbf139d27f95926ad14 +fec86931515bb225c1334c86a2a59dbbfb13d6558d389a7202e0fedce9df3d06 +3c4559b11255d23e5a45709756d857060f186c9dd2cdea53f0c3031a4f0392d1 +4beeea8c705f18ae48fd22c8412b71aa4c62231bb9f34d2220e361cbe109818d +1b6b0be26b2ff128546d68029dc837e42204d73a35ca2a18e13c46d488fbf3bf +7f6a6f623085e42743ad29b3b9c042efbd195dadc87928ca26487e711463969f +e972c925d517c754fbf308c3a4ec5c604359a4c8fa57e8db4ab77341dc6364cc +c6d0640113d541476389195295d68984a2f25b33441d7d7bdf581229503759d5 +e955ff29ec234f2a7ddef7fa898dc3ef0e82da664087a42b6dc28d665622cd30 +92868e09703aee3764518038ca3969947a1b4e63cea5d6a7ec7aad6e7577b88d +2c9fbe177a04401747ef15b436b75d660c7cbbeb77bb44e430e9835ab409c2a9 +108f94117951832a5a0af0a5acd4e8233fe636a348f252d22fbfea95a5eae39d +d145abddd1467561b7fb12660b7cbfd5cf9cd84ee2988ddb6d56429e4b87fc44 +6cf4b70f45e8fc082d7020bd6e8ee33c6b94fefc99336031d219145fd293f4ac +bce0f52f8ea974d74f2b858a3daddfbfcfd50c3a778ddadd1d1090abf318fb58 +2129ab1f2acd880911be86a256af0d0f74657d53a339a4f527e0e9809e47914f +d7719db5db1ab21f486d85dc8852e9e2cdce6d35f5ae66b361980bc0516d1d12 +51f9444d3830473e30c9060a76edc532e8d74c4fd22b5bec03021bdb293a3a60 +9d8fc3aa0ff599c7a4593e555e1b82f0186671be699c73a26a281aed93af14d8 +5f9961d44c7f4954d3c878f8bfa0c5632b31d9a0c978442e917fc9ee88666818 +9e13fb731cdecca15c658320272ac9e968ae89bcb8fae5765998c8b4d98aa59a +26e36ec1543032f391f712dafaeaff23be8821b3a23ca765270cb0bfc601f57d +da601e2e28bac03b7b171101ac26c195863ec701a6ad7b9db8177aad94be5ede +eee3b11860892cec50ec4059b6adb16c63482233de6c780a26109f8639a029f4 +5c2d3e6a2d95ba25de8097aba992609cdd0a76683f8fc50acca1533e04f0eec3 +96859b3a92dfdc7d8d34f2add87cd55ff8cbdfc446e7154adea4dda504f6a835 +8e2b3433070f23fb153bf3838e13a23672dc8a1f88ad096693212d994c523955 +75b925b8ee182522d63a882f6d6a3ba45fe37eb499f44ec274666b1256595d2e +537684f807838d60f07ab06603e23f360d6ab50c94cc48d3ac9b31926cb8342e +b5a881221c1e34888336699c7cee8199dcf5318cdb661f9188be6dab543d2bd6 +9016f5094d7b04677de039ec3fc22732fa1ace506320899074a31d1e9e580063 +39613072d3eae526b88b5933a0c5c1a438558372ae20cb80e0d4682571f75a1b +47d69c6868ee47dec033c4ac744d0f958e2915b2c5115a73b5268aa94ede8f3d +182e89777695d9bc36217ecc7ac1bd1e460a6503d1f1a33919e1bf91349ad296 +45cfef1aa1dffa8a68d4cce0d3f6f5dfad069c8363c68924647562f23fb98a00 +62212b4b82a5ca2d9c98353b7863909d6c1de93a2bea9327757528701415eb45 +43472b40f1a044cd32ba7ca9737ebc5e98d7a0bb808b66d616526ec48e60f788 +d5051dfb52801b9d3ba318da1354dfcc13edb89536e9eb6216bf35a77a1f4b7e +5eca0840226eac5a9ca586ad811aad53a1938860af4fbf5fdf1af521c07ba519 +e2c2fa0dd7dbfc1153a5a77bda9d78b0ec5f28e832943ec8268a9fe453bbb53c +6a45a9e2f679126e323cf885ba754bcef56ff40bd992f0372bd85c303930be6f +14087eb0f5b26e5900f236d2a8895aa299e3b769767af33f88da11e5374eb32c +6f5cbc9cdd8b067abc22e26504fa960e4464803f95af1ad57b249f0826e3b092 +4a5508b46c8ac2eb5d113da479890a7be56a7a5a4896fb097e2374f2ac7d2e05 +ef4d4a31d8e9fae9a0df448f198cfb26ee8462dc01c448af7389076577d4814b +65fa2e4cd81d22d81db6ac028c2c0419cf6c6b0c8678e1c8bbeab1b89637fb5d +f04d600e7ea27f4768bb2200fea08e1872d2643cf36b7dc9a1d45425c2c330d2 +44dd92eb0631c87d8e6a275ce000dc7891a91f71a326d191c50c6426c7a5f677 +17a628260eabd753444083e6ff60c1a4257d97c6026a15efb19af06c73de3845 +878b618e10ecf189126b9c1f440b5114bf0d736226f86753da676fa34ea9958b +863e2f5e085ffcce7ba461ed3191701eafcace0c98abdd6ec4e5e37cdd1375a0 +cde67542bede694bea4bd5a92bcb296e6ff79e40f730490fb4ffa1c0b88e5d7d +cf6819b545612c1978c34ddd242ce9f05bd2de8c6bff8e79fb747035c89f0c1c +8bd4f55f14b6c510060105605dac0e571cfc02a8a580390292473b7b1705175d +33efe45867e7fbc9029106d0e66341ed9fa6ecdd6c8b4c50ce213a022a4d16f6 +adc0ef53f46870add3d7d1038523d8fff0b2443a58f087f910fe374b3181c982 +732b86c0e23bc8f9b657d5c49f4925868ece6e5257b6aa08f08b2df97380cc7f +d9c8e09d7b6886fe8adb6184751bb1a776b0f0b365dbca4d2e470a9f33c0e424 +318ce60407abf86c71cf2373e4226cc556491a91f4234f75d8a974a5b4c9748b +25e143d76d91150a4796b1f668e9d709b8d92c47173ca4323a5b1594c97409c1 +82a52797bf1f74a8cdebbe221e9d1868cfa963b57a28f27ced76ec79dad9eafa +c9dbc14b8a0542e93eb35bee947ea0c0fc373170406275d6f94483b5adbc3c48 +1d877a83805751d169c08a772f3dbab227d3ff467c9804ca7ccbf700a75ca77b +14f32e0fd063e6462ef94bec9bdb4e8a392db2d4e392a270e982b05cfd2dbe37 +02eaa1954bb92e0c74873c3e7b780e7ac3341635c5a48ab40a855052f1f769b5 +48b78ce8549bdc2d972b41b2ff8d4c188a6c6a3009b3cfbf20c9320c78b823cd +dd1b836a827ab16d2479c289f766029f35fe1fa278ee20c0c8bc21b02837a586 +2112128d04df3d2677260b123ff58fb1b7e6075f1aa0f6c7d56b9cb593ca07f1 +7e5ee7ca93720a395140b558549933bda0106ed4fb29284ea2b76eeddf0e1ca6 +89aa2a31f3a655c6886efc94ab37c6f2bd2cd81e351554ac3f569683ff1876da +ca0e0f2183c0613ff4266f9c4399f11dc9db5257a48f44ae2994dbce930db588 +46ba3d42b1e318a207645ee9b90ab34aa0ef3e113744471e5b827a90fb5f7717 +27f72758ca2e49aa0fbb427df80dbc2dca243e2d6c332d205fd8e8ccf4efb9dc +be143004845e09908024e4e59e8828f3108da8b9a590decc82e5f821cf3154c5 +319038719c08714b54082e645fe0baa6667f6ef885a19de9033e25f6f2274f77 +8e8fe9b9bf35e5b8186e9cc7ab124d0e49a8df2343922ce64f0f65a00a5ffd47 +9dcf079a301f59192a3b9f6115845ed1909643e3171ab6f105cedf73ef9652ac +c7f9c68b0b0fd090ea8bd3d3838af25fa3cefa1580faf0c50bffe0e964a12859 +e27e017bd84f8d89dd445f0afbf8da3a73904ca77d2b1ebfed76c96ec2f8a1ca +d38cd76b2343f3b3ffae2ce64de4a0e3dbd9f0e265807f731f6f01e1d61bedfc +f214ee2ab782eb6d3cf4746fbc372acea6153853b94f37f3f8771c5c01d46e1e +1d307cd73f2963313f46b0ece915298005a2e37a20e8b0da1eba7f0c06a7e2c8 +5bb8385b2034401837bf414b33e4cfe4c40f46efaeb4eb66d8c73c82798b4dd8 +ad3e231d2fd7ab77e3bbab8f4e7b15bb6c93f92139beae8b92fe3903aa35db17 +35cc096486740c95add2ee1c3acab366b335d361f39b441d0e22794696cb2a89 +279f434cf1ca1cc2263218f4084261de8635c0f87e38240a07f5a0b8706201d5 +e84cde169961dfa50d0aeb38a6606b76289c8234a918a37c766877fd4b254b55 +44b31946a76521b83b6175e892670905956aebb55876d19cbb009346b8f6f10f +a6a7a4c86da23716364edff21cfe7427d6bceae58e5fffe9e3ae92f3f88d9ef0 +786ec2ce0f1440cf0ab52ee2249d0eb924f20687e6716af698f8ab76f919d5c7 +4b4a860d28647c916c23421c50754d52749551e7349f72a5afdde899ae41a0a7 +074f2099a53d4403e3bebc0270bab5d191672b4fd9b24a3a32bd62c863ab113d +0c98bd274aeb746e8c592c72010af8b3806c86d1434113fd3a915e11bdfd4e3e +b975ee34dce95ef509c14f5cbc0ad0dc6b2eaccbfcea974baf685a369aaf802c +0df511bd0d2250813063525c128eef1a2ce9e0015937a9ab1d590a71587a9a7c +b75c6a13ab9072c934953e93ee05c36b99d54a765cb1b1062e5a312de7a5cb2c +092a5b06a9ac8914f57212df83432441a1eead79584163d3aaf35be581bacb6d +b70a2e42bc886f8bd7224c1e98dbd4fded0f293650901d03b9015b6a6f761978 +770bcb647758f87eac41a98633abeb13226e46171db24a7f0cb2f94e43cb7775 +e389dc2cc772f99b17f04dc1baecab2cbb77fd8810e1d818be0a22fc3e313d2d +462d439e45ba764422692d68b01e7e18fac49e91501607974c9c1cc61f2c9a67 +1cabd1ea8ce615786bfee65314b414fc14528e59befb56f4863056b4fc18bc21 +d61bb8c0984bc7c16b491267a7f80255249179c6f3378c9485514ac7c2c84f61 +00e5d81d362e49f278fafc1b6bf0aa9d76c98476a3e3635165d53a904dd6b699 +d6ca2e9cbcd609d11cc9373f4c1179891d2c370681c8010ec75ccf893b040b7a +a413663f8e262d4c054bca74f0c5fe40e24d57ef4994db6543bbd561f2b33504 +0356430cd25451126ec91f82bfc73ba6d843c07f304472aeecb7cdd660a34a2e +05c1e3c06be790aedb514288ec1e029bdcbcfc13689377be037674051972e96c +df6753b2e31da945b56c0a7316ed42adaf78a531d7412b3a26e33c3fb926446a +4a8abcd35799ef47481ac60948245280236668ae7df01f3cba2384dc88945c36 +7c9d70039f6adecabc5be2bfeaa8dfc69bc1d40b593140c974587905557c4a68 +71ff97652466fd44e8f18d31e9855bcb25640f15a398c257292c61ca77b752bd +aee91ff16e070da93ba5a9cb1d2e137fac8d78499b015ec2c3f8e38422c058b6 +8ced660fe0af345c9d4513983a7662a0c679236b9deca23879c983788e49b143 +67ce3f436353b3a86148ec21402c05a5e815ae1e375de539628557a8caa5af62 +7bc56019eb0c11f753193b3475c6512f1af8cd4032b4e13ceae3fa51c167a692 +01d054707f40b3cf7d7fbd23a6cd3b680d5c20e0181208d4b102e0f96841b6e7 +ec818a881bca226699ccf9587bac922a6b51b545d8222e9fec0fc90bb7b88496 +01a7c60dc2adcbcd798c8d3b67a6c4b6978388d83ee7f052e58d117c15067d4c +7e0c8bcc3064287cf2cf511ab902872592280b67295c0cfc7b1e51b3f8b71fda +b9e285f6f0de7030ce9b57e50df59fb2ad6ed36d423f7f2e148246e66d343396 +82ea928d4a3153a382a9638e9bac663b48e2d1f565ecf22d2a2eed624f3eb980 +444697474a2b983697ea5614c7a867d48363a1ddadf4efaedbdcf6306543d62a +4e2c4b153ea731c1e44b1f362870621b3f7b992c85fce0d4889b78b25d1a1a1e +c017613de16f6da6ccea3e6c0958d27aad413ef02097a1e379a965ccc3a75b04 +73dd0b82caf8ec8788d4bdd46665810855f8bac3daffb60ad8707c728fae783b +e9c8a8d34d949caa5122f37fea44063211379c4b88c5fdc06f451d1c06b1fb81 +3a25044a5f8d348b4eaabdbe4f9c1ca8943d2af204c41dddc2c1a2bbf979128b +665b9f84cdd35c82fe3fc9f7457513bf4a908c3bc2a0d917d8af2417ad776767 +9b8c7be588b373753077761f99fe50c8df8a8f85eff5e4fd53d36644b49e7cae +3f65634f6feb5838017ed45a4ca1dba9adc2d4c525d1f952090d31a49b8e2aee +6b45e0423385f52628d8e43e0cfe89d07640971455c629da5d938f551f8e60fd +03eb7fc642bcded570f8f592eab13c71ea7c9e833ca2d2d08c453f84b13fbdaf +7cdcd6383ff2c103fced1d16cc4d8a21d57a9e65d89f913f1a028250cc3226b7 +0fd0d223f4d715e233caa1aee5e9fe4ffaaea243b0e13c198bb8dc8af12fee06 +09be128117b9c7bc338f21434dbc92bba4f7034b062a3232f73132558ede0fb4 +5ef02c7bb6c146e4290f0d897ca4d72eb8d5312a9a5fbd0b1fb878aa3ac69c5c +3330a735239e9181ae7f29267cfb5249fbe39470d119ca8dc6e0ddc18d5c277d +b2f4a12cc489660685fd824e4db3a9053cd6fca133c94c75f8ac1485ca36045f +8ff8c6640b95d2eb5a7b0d4c5931ea75418c151157bd25f93e05cba374c43c38 +f04e4e89cd5cda0b60e1e5d4713396e2b553727a20bb76a33273bfa660ecfcee +2d3df3bce3c339a423fa84d97a637e3a3d99aa19ed8d6e5a68246ddb6d3d609d +7515cb0f19df665d9f5cefbdbb745a89d3d69887e5a0bb1b4e59f4c5bc0c1a03 +67568e924f8c50654474b48003c443652a2e7a32d5c1775e9b930cb0c99f1a3f +e6ed3e505ef02e231e9ba5a08c77571fb397b28df3f6334a59d62e87b9b73bb4 +8b3f911be84cbf41565870434642285ab575d94cf326ac39d601db42c83371ff +55b1f9d5471f81754a3ec6233b47f444e28c0f537d91d8d13f57be0b8cce06ad +f946dfcd3b272ddc13c3360225b79919f97bd2218313b06a80e4d76d899e17e8 +90a00622db00345e86a42f406a6f4185fda063e80b2f8b98b80bac88b400eb82 +12676ec8390a716d56e244320febf16f4ecb70e06caba17d7459801da82232ef +71c80a924edaacb29af50d26be34bde0c1554671f4b0153a40a8693790d3ad6a +5422eb65661cdca9379e47e813ddf9e1240cb259990bd8b92d96ae9576df599c +743168ff8f0c64c37e870e3ef25146a9231c46578ef77cc3464adf25ce35131d +640e067c5843d0d628a36b9f5fba003cf19d15ec0d693a8862685d46a30a18eb +7d66a20b365b258edc2e9d9a6b414ed0f1ac1894ecdd4bc2d707d88833a1e34e +a72389fc95d26ec2c10e8474bb00dc4200aae15adce11e1d8c4014d7e13c5c0b +6caef835ae542019f4ea14c7283fff973eaa8a310f40de4de0ff56807bd4c46d +c45523fc703fd8c6d08b32ee6e31943dcb52a47b30dad4d3d2a5cb4d647febff +ca269375f1cd0455dc0a81e1886a1dd4b78a9d30138e03517011550a22997fbc +4c6a833d32631d4a6cb9bfce3d8a98fc0393aca086a6bedc8ff833bb9c455e2d +1cfd953d3f4e60f06e8226c561ec5dc4994ed8745d934e231d95765a0809b952 +48e85d325ebf37d8084619d4de9cc4aec1204c9122b918279b1ab7e63d9eb477 +74654bfa2cc04b8ca5984e2ed6cf7358df124b5bd67b523c4785046780708e2d +982f3a7f3e6e266a5b3b72c1d9d13cd7d055a957d96015b11ac1e05dcd9fd6db +aa69fec04dfd90eda81bf71aa205d1587eb8d1ce5b97cf43f32bb9bb2a41ba55 +2fe72fbcf8573a998a4be2e870380d4f6cb4d086ce926c86db0e248b4e594d4a +e233bc13dbc6a55c5e7fc9c9ec994876cdc9795e0d3d0535f702f13c8cf64659 +b0248033530ea3b00295bc96240e3a41fd97a7e175b544242eaf7146a6d413fe +fd9d4c4bc1362f20a1678b8d6ab03d7a72d9cf8d79a9fedcf826274efea6ae0b +837eed3e717c09f713dd29b6ed9f5a6bd7ed0676b6dfea8c9c02a32fe56d704e +bf1271604acfc1ea301d86e270427c417baa917c5d6e8e24af0b352d4f6b419e +b63ac268e581a5aa86c7eeef14a718e33f4dfe5bf05a94675368e780b8f81ef5 +ade6d7647f4282ec319bf5991a09714594dd1854ba9c20d6b00ffab76e54f388 +a60780ec12af64779f2adc061dd71135447bca3daafcccfa6183fcc78522b533 +1f39f30e8750c0a3337a44766cc3f7f210c1a8e10f4ed1cc54d0729b26f1fefa +7367aee66b33e8dd0e78cbec4bee5a70ca809ac39f84b72f1d119e4353c2e4d6 +20c7f6383ab7129b62270e6f7e75a1648d1da0536e79d60787aa3149b96a284f +2ed1e0d2c9c4de7be5db53b35d360c1c6210362d4a35f91c6633daba2c2272ce +d87c53f85ca1b55002d4e8680cbef6bf500632752827c0a5f19a062bbad900c1 +11442036e66d360743faeb0636e1f31b554b6567e4540d07abd6e1ce39313277 +5029e890b63ab4708ad351725bccd79d75e49cdb612da57efe3b44a2e7870e67 +a5d9686eef4b57c2a17f2d83cecdeb54914610e5a3401a97050fa517f1662297 +e06d29442d0fd89ba10f21584e71eb8bd5b03fbd56f5a538f72c9cc8ba5da11d +9e4a7f8d9dc2fe56f2976d3e6bfc901de356a3d0690a0aa715ec6d339d72061a +530bfb5323a8d038b8ad3adae140668e505bd100bdb20b98371228b841d0873e +832309912ac7e9d4c7ee9ce81285c7f8e9afa8e2077e635bb36167c9e9c6153b +c73fe799800c39fe343d70e38f30a721cf2796839096add3c82b675f0b659f6c +99441f9352a332065c9df5b419a020d9b2fff06efd3295250d5335f7a256ef97 +992005ea2fd03f408a7a923ad8afbc8224daa112e8e4faf2ca974af2cafa92d3 +d5e9fc80b0bb00d933f50ab9010d671751b3a12196919e073678c2b047435a8b +b826809e33bea0f12379ab1a0392d37f27766ccf15b3648e574e7dd1aff8295d +df3db858bc078153072770fbe45196c3107a12df7f48d7bb6e4b99cd3553e01d +59bc130f7877b18b65b15ea50db1146c8ffb2da5180b603d920c099d15aa9533 +b594791c144a3822f337abcba4d33d36299bbcd94190f85e0c28f4fd51f9cbb8 +9d301eb3f41179389b4e3323bc407c1ab223ba1608a5f8cea8d08a13dc4fc307 +2f93d59a3c8b32cf0721dd80c369e4f590d6fca9930d4ff110611d755b5fafd9 +9645e29003540c72f70f1ba5b1a884d1938f77ad689e6e70afa7216f31988919 +86df34a1089f9a009926b8983b05663bebbc603d90ed348ec33afc5a549af5db +86b90fd34f534b24234f229409f960e2e921575cf45520f2d651c62bce7ab637 +6c2fcc99345aa8880a8cb7a67c54ca398cd61ad14162c9561ed8e4e9737aa9e6 +b513003edb220ac92894ab112e100509608504afe0fcf85b7bef8000adb3afa0 +3f85f52b856c23a68f58bc28a601e5430ae318ffafc24975eec7836b147a5a50 +d0369b90f111aeac20b4db1abe66c32bf4231006d79ef4c303e7aefeca4cd5b3 +00b6900a26b2b9d98da2809a9135dc6e16644dc932f106b016fa02730f1d6dc2 +b1c9e10b610f2bd769fc071e06ee636ef566bfc05899c740bf3ba380cd7164da +7fa355324aab667f33fe518cdb19060cf3fae8a0363e4460a6c2c9b70bf39054 +b2d3eb81093b0610cb03e2e7180523561cb05761b5ca8cbaaf5a35f7179b1d4c +18d0b7eedde1634f120fc0f6134e55a6de259aee6d440444e0ef0fb7db8a9c63 +95f3200e5d40b854ea844860529d1b694585b8826d988f432be1f620629691ae +f282e79b2874754f96c4a4a1155c2ea07450c2a256b9d8e33eee33c232c99860 +1e34dbb63812ca08aff99255ae6def9dc3ee2789e9bc1d956de9fb255bd51d5b +09da88ffc9d8744f61e002da68f41aab3afd0314ef876318c8785f87b04dfbcc +bcf681dc8a0d615e24ce8f6322705a59a0824b5d1f0d35c7b04062d13f5cce04 +7885cf30dada61ba4cda74df52c4d4afa32206ca799ff9e9ba2bf939deaad2fb +5b14cff0283dcb41869cfbab91eed9065d69a6ddc91cb241634df75a81fcb4f1 +490bf1195ff98db50e9fc3c82f10d91968259bb1b07645881c274d7751e5c2d9 +40e9e8a23de33344c3e15b8c0a3801cf73eb1dc8e9df066e7ec61667ed349f0f +45ba6b0832143d4e6e7901d4ab7b461ea6489f419b59ef6fa892663b01a222e2 +7bc2f4cbc81b1982f595dd2cc94d6388312cbb61ff2bfecd27b1220dec43e9ac +143a83b5a63c057e2ae6393054710b5d616316ed94db2e6698c4c1ddeab6d9ee +2444408d659c7b68d4cf5c294dfd4299507c41190068c3905bce2425f652c49b +de244eb94d28d3d5297e9a11adaa7c9a9138f00659f2f4a42fa34db8b8e29246 +15ebbafefcdc538911625e0e0e9ac8eca76662bf295c8fc2f871fd9aab87ef3a +3a7b293875328e89d018f40c760006fba666b8c1aec0c64231793e22825df5da +923979c72db39f5541e7f489fb5d9510674e8be697a1aa7a0249dac954fbad79 +06d11031ce4605ea491e9920524f4a60ae55c85371fcc9f046c1b83bf3e5812e +2a2f06cd724c777d2238fc465bb016e8a78ce7c86808698a852d474b63c811f5 +43591f5d8391fe4a4d2dc3abc5005757a17922b6eb0be4b9c238fd162f9224e7 +475456f639c59a26c8c6107ec20330c8724d6f6842edf3875cd0f87dc434ee65 +421155bbf5226c31de48374d426bf3f3d07b9bd718ec54f8eb9a6f88a9de594f +ec2c9d4b2b32827fedec8078a6851bbd269993b246b0c902242f0c7ea422d799 +65338a2ed8a27e49a0be708911bff10f485b753574d8ac8313caeab496e0ccd9 +5b67f10cc0c074ca7613d05a67bd45df6b72f6e30eaba836812c91a2a0a4bd42 +2141d7443ab359be588901f46a22d52fcddf6bc04e1fb006a32d37dda270565a +575354b40af0869c9b1f8a85696326f546e9a25417b38b9b5d972bd0d933226b +f8b34f70b324255750f5a64c85318907900c3320f070b1f789620e4f5db6f37d +461f4a2f15e884b948327d53420dadcc4b073b37ee4fe935c8f520d9828ee209 +976fd2c26c71e3bad6583784ffd61a2f419981d51592a6f8f47b4718b6736a2a +1ed7f729a521155a39394d038c34d8a76e9c6f91ca369da29fed83edfc05a219 +853e5ebaf1f3d5c6ec932e69b7a0dc19d248f81cf541348c85853acbb8334b12 +26ce33140f3965db1a6f79ae0abb24b93b6916496b1698057d4c2d4a6a72305c +11b731a8a07ff1eecb84fb6e3f3c3706b09a0cef4b1c2012bb9278b76f5189a9 +38d5b9fdd4cb9028f43d16dd39fbbd10a684582951236a05e0692bd1c139742d +7e75a21cf14fe99d51dcf0a0b71b267a0ad42b8c1d7f46ba46972c8ba7bdf849 +15fa6c5a922dc93fbaa9fc50c7696494e6c372f3467695da5a6d7eb87c0437da +d7b68ee36874203d741e373e931425d4ce521b2728633a25dbb435f963399f37 +8d0adde8345439cc5295ba3d255a72039ddb1592dce1ea47a92d7b641182d0c6 +85d0616a85361c3b78bede0190834c1de0d4d132f459d8f29586dc73f974dcd0 +5def570984a9c2bc5a720999111c7de6a28dc0c6e9c51f82d8c55a26ff5ed760 +4337606960f847382671bb144d5ae5032c74e0581b19b21eea8ce4529eb792c1 +044418fb0e3da356a5b33cd97a0dce15ee9279b076405e23683f68c63b6b09fe +c3ce3e1b30a4cb3a1e72455a372b6eccc7e4c97336df45d0bdf94aea01a108fa +f28d98d7bacd750c7c25874e0fe3fe20d8e1d51043eca67c546278dc13716d9e +f81a8fe2945a6a49c82b653804d54f626238396d8e4a9bdec4946c365d1164e2 +fed12929b769cb13712ad61c764d31798a87a3e12e1502cab14ca07efb524ca3 +dc31cf17f73feace77494de837790d812dabd36cf4c78123cf76b504886d0cae +13fc6757bb6878f792a86d52d0e90913d089d7c81faefc56dfdbc3acc2195981 +0728dffd98a2254e39eebfb51742657ac9088cf8adc21208f3a333a1f45beafd +69ae647754161c6bf0a76800edcfb6a2339f03e4b5ba4308b924ca56344770ea +1c7322f692c297794b03f3c2a180b645ebf850afb290465ba050ebb9c8298f2e +50b75571a15a599650a7fb1fde8263e49a68773b5184c30da3fe59a7c75943ae +c5d26594361b53c26162410d3a1bced7c1cd0053390c1e2f8848e6aeaf75319b +7ac5654a16cb93832bf981b9d54aebb8daecf97894b560ea75f51bb39a2bdc9f +f59d01321b51b23a10827e1845e2db316d86d7dce368313f99ce7cab2a8e7c50 +8f91f0faf03626ff87247ba86dc7f3d837020e6aa83921385df0f401e4084237 +95251c27e8944749aa33b0b697456453ad8a5be8324fd22b192adcb22e03c74e +6a3c9e6f7e452ca491db52e6b18016592cb09955f05365ec73300dc3e179c32a +d08a443de2753d56f0c968db00d9cd58f1af7e3811202398bd58a337e7ddfd84 +1c8c8efd21aac90582130416d261f3a1b9f36ca431c8d4efceb9eee03d680165 +70ac1f37a1698c0b4da94cfd4c57ff54edc1b25fb713177fbf209928a1272cbc +25655632d43e6d14c052763452d51cfaa32c8df47c57112ed37ed239f8c00268 +c78d7f3a0a965fd9e3f3c1aef2dcdf74f663a72b15fa09d7309f2d15b232efcd +baed8a66f17b0dd190081a95a5619684a184603491a32114a5ef2c5076caddef +0b4eb2197fd59ecacc6416398da20414cdb6a9a3e9ead646c34ae4ace4cd57e4 +430cf5bf55ae076419c0b79095d903753ad7f46dcc1b93f782127d33a309f245 +33484156f9ffcbf9e841d0c71ab0b12594cb2c327112508593573cbd95d75739 +f4ed866beaa48bcfe3599f62b0a848d6f63fbf79937966f3a0ee4c6163ed16f0 +4b8bd51ba483da59fd1d719499ea3aa49fe4917e10e2da13301b0a8b50f3841b +6e80904dec24e5428b97ec17e66889170d12a27c028cfac9adb2eef49815f433 +b6089c9d6ef39f058f0cc655b27f4241ac74993af39e1fc17d5f9e27c569ade9 +ffdf46027fdd633bec61d8c5fe318810180f4437f356001633e14e098c992da7 +52f392cdb417d2bd30698612dd7b2ac00d0e5b4b3d7a20b99d0858d5e744d4af +bc9acac37005c3841103a6ffdf3192ff85ed425dd221e4bd71ca3db6a739c7fb +9602c130a1cbfb5b9bb9342099c2f60497642ed1029e5f9308a5097d6f33c815 +0f9a31a988ab5c162e5aa56357c8186ec5914533aede037fa99820ec322c8fcf +1ae1a6aa6e048c99d2af1b96ee8b313ca0453923f5fa095aff28e7cf79c4be83 +70058ec3619ae4eb31fae28947355290e967453cf351ecd976ad1c5da7573f0a +ddadb5b6661c47a0dc3dd22d7c175f9391bb9e359bfec4eb2b687a5a6f2fc8e2 +3ab232c34a95f54cf924fdf8011148145466799cd44a8440a0ac99b7f119e470 +a7fdcf6ff7a57a588f407de565b6a45e7fd5a1925efa770209110c54af8815ea +ac1af9a0b5a790f6df301f7f9a105e776ba30e2b56d1dc2c0811990c8d2a0d59 +d733ee5bb53fe30323632057131ba4ad1d49cadad65d386ccd7a2c70bccc068e +e881a538aa3471ea3b66ae24127dcaadbcb01a9abc8df00353c568aab8a971f8 +fe42a15ae22fcba141317584119f38d44e479a0d230273fb235a7895972f3f12 +c9964d1fff7ae88b9d39bd0c948a5ecbb2d858a26c01d57f3ae91ecca2475bad +2d9c5d8053119644ee9ac5c3448c412b9fa18b8c5cd666b58714124c3c1f7d24 +62b31fe9605544652c1b62a4c16c03876977228b7808919fd49da8c14e12971f +bf157f70c41e54927f569a8ded69e9ac4af29fc679a278a7c6b0b1a605bc8f3d +d28c0da975292d88fb0b27a12c56ebb71bd93802ed8634e6615f92622e598726 +f1964331f9f3353638adfc0b3ae281842a8ab707b753f94cdc80a4133dc2fa76 +0e723c34a5962c79901e1c3be3644d926abf5a71cd581c2753042a0264fc5a5e +f6196bbfbfc152730227798be62643e38c512d889e61b5123e58c173ae6cb8ea +1f3c5358d9ee649afaa3c0fa0efc9d018be248b664f9b16ff484989e0ed8a199 +85abe77acc50b0da312164a738dd0b0f8156eb2b18b9c18ad7c08ad8b61de543 +84d1f5ea363354272e3d937a2f770a74d30910f195d337780b3b65791a0546ab +18a8ad95353637c276b4fba66000886be4c478fdf68bdeab674527bbb86d75f5 +f05702581626ac0e693f73f08005b929bc154a5cb26f1c1447a34cf441aec12c +e061d5c75dabf9b6055131b7e27edfa1197492525b8ecb98a74753f10324b4be +61c87eed22b31f59c4fc0a434df9d34e3ef204268df01fe50866c937fdd83de8 +be67591219361b44441676d4e24fbffdf0fe6ffc1246c94de5de84d0e2ce54f6 +4001a4d5056dddaf20dab145f59405e14629138ce2aef7f7df4c3ac3c34c8270 +0195c65a7e6770d2e8211b5d6ee9ee826c316acd3063c634114d96b68f9e7be6 +d6f09e1004eb05a1b8d5b8602e7dcc4e9942a1a07cbce0515a5f651df70bd369 +31149d9d07e155b69fb7aa2ee350c52fec11cd82b0bd41dbe5af51b22a0d1aa2 +42bb655f8bc0cf68708f4891d0152ea90a8ace90fabedb75807baefc45b6fdbc +ce98089dbe4004fb84cf3ca808b355a401bfb7cb0bdf3d34c56920ea7c9fd810 +1022917883c46cea4f9c53a1b735206870f51b55f688da9c8569dea21b033a7d +26739a6dc374059371d7f0e4f1369f24abac48e2bd6c37033106921804790ef9 +8cd1e8b8e954dda81ce530dfd6b96e68e9e65f68893704d4e1d462e7fcb38be8 +9687baab78161f5e6957db5340f62b08b6a15b34574f8e66a0e3ef88db94a571 +2d01ac0f7b3971c994b8c4867c26294e63e18b06748cdf7067f521acdd28f928 +efd5ba043ff030c24f8dd60f472c254442493e4d5ba92cf85023881b5a222ec6 +5a37ebd19b3cf67310f5fb521ac4f8434ee8e998339f7fed4cb830c5f84198e9 +c5ca9e7347186fd6dc622118c624b6c5ec9554641de66beff929d05364b9ff44 +dd342e36818f8af5a81208e7d92eb91647f1b68e4bfbe708c0ea70e90a1bc7fb +7fe7d3d81f207dcf44c20fe86ea34cebd111b7c5cf7e0c4ace99eef31ebf1160 +ac50564b361d8d039b8f622e3c4d6e85474d232bceeab726bf66b307ce147c32 +b1351681a3b6be40d13fd8da37cb71bd787b78a922f3e9f70969a716a76c2c1e +fb6c315bb455ecc8d2475b1e61aea14f788f235f8b5a7cf987b78910b2da28d5 +288a7fdc879b66f78d5aaaed5293a17a1d96d0715e2d0006feb9a9d7e4837fb3 +91f3ff93e02ccee1ddb2b47716abca344666c1573ee338bcf35d7956b9cc82ce +5083ef6d3155e28f8755aa7f8dc6dde81dce8c37736e78b97c4459be3b471336 +5b93671811cc5a397a4a943b1a82f712a7526d9010fd07514856505621d5d667 +68820a69f5ea83b0d810ab8ed4e5c9acdd54d4c19f958add35d3d21f7089ddae +f69e4fddb831a94cc51f7be19410c5c6f3b0ae57026c4a2ff33bc8f91afa9844 +abf3f6ce +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark diff --git a/client/shared/lib/fonts/fixed_120_50.qpf b/client/shared/lib/fonts/fixed_120_50.qpf new file mode 100755 index 00000000..95b60804 Binary files /dev/null and b/client/shared/lib/fonts/fixed_120_50.qpf differ diff --git a/client/shared/lib/fonts/fixed_70_50.qpf b/client/shared/lib/fonts/fixed_70_50.qpf new file mode 100755 index 00000000..76e5919d Binary files /dev/null and b/client/shared/lib/fonts/fixed_70_50.qpf differ diff --git a/client/shared/lib/fonts/helvetica_100_50.qpf b/client/shared/lib/fonts/helvetica_100_50.qpf new file mode 100755 index 00000000..5b407e6a Binary files /dev/null and b/client/shared/lib/fonts/helvetica_100_50.qpf differ diff --git a/client/shared/lib/fonts/helvetica_100_50i.qpf b/client/shared/lib/fonts/helvetica_100_50i.qpf new file mode 100755 index 00000000..ac7c6963 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_100_50i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_100_75.qpf b/client/shared/lib/fonts/helvetica_100_75.qpf new file mode 100755 index 00000000..a1ddae00 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_100_75.qpf differ diff --git a/client/shared/lib/fonts/helvetica_100_75i.qpf b/client/shared/lib/fonts/helvetica_100_75i.qpf new file mode 100755 index 00000000..8bd9d1a3 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_100_75i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_120_50.qpf b/client/shared/lib/fonts/helvetica_120_50.qpf new file mode 100755 index 00000000..f7b8484a Binary files /dev/null and b/client/shared/lib/fonts/helvetica_120_50.qpf differ diff --git a/client/shared/lib/fonts/helvetica_120_50i.qpf b/client/shared/lib/fonts/helvetica_120_50i.qpf new file mode 100755 index 00000000..c7968286 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_120_50i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_120_75.qpf b/client/shared/lib/fonts/helvetica_120_75.qpf new file mode 100755 index 00000000..14c1904c Binary files /dev/null and b/client/shared/lib/fonts/helvetica_120_75.qpf differ diff --git a/client/shared/lib/fonts/helvetica_120_75i.qpf b/client/shared/lib/fonts/helvetica_120_75i.qpf new file mode 100755 index 00000000..2078f49c Binary files /dev/null and b/client/shared/lib/fonts/helvetica_120_75i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_140_50.qpf b/client/shared/lib/fonts/helvetica_140_50.qpf new file mode 100755 index 00000000..daf1e0f9 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_140_50.qpf differ diff --git a/client/shared/lib/fonts/helvetica_140_50i.qpf b/client/shared/lib/fonts/helvetica_140_50i.qpf new file mode 100755 index 00000000..002ac3ff Binary files /dev/null and b/client/shared/lib/fonts/helvetica_140_50i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_140_75.qpf b/client/shared/lib/fonts/helvetica_140_75.qpf new file mode 100755 index 00000000..c75d848b Binary files /dev/null and b/client/shared/lib/fonts/helvetica_140_75.qpf differ diff --git a/client/shared/lib/fonts/helvetica_140_75i.qpf b/client/shared/lib/fonts/helvetica_140_75i.qpf new file mode 100755 index 00000000..81ef8ec9 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_140_75i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_180_50.qpf b/client/shared/lib/fonts/helvetica_180_50.qpf new file mode 100755 index 00000000..23900221 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_180_50.qpf differ diff --git a/client/shared/lib/fonts/helvetica_180_50i.qpf b/client/shared/lib/fonts/helvetica_180_50i.qpf new file mode 100755 index 00000000..b2d32da5 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_180_50i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_180_75.qpf b/client/shared/lib/fonts/helvetica_180_75.qpf new file mode 100755 index 00000000..b3a5f204 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_180_75.qpf differ diff --git a/client/shared/lib/fonts/helvetica_180_75i.qpf b/client/shared/lib/fonts/helvetica_180_75i.qpf new file mode 100755 index 00000000..4beaf00d Binary files /dev/null and b/client/shared/lib/fonts/helvetica_180_75i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_240_50.qpf b/client/shared/lib/fonts/helvetica_240_50.qpf new file mode 100755 index 00000000..a703e96f Binary files /dev/null and b/client/shared/lib/fonts/helvetica_240_50.qpf differ diff --git a/client/shared/lib/fonts/helvetica_240_50i.qpf b/client/shared/lib/fonts/helvetica_240_50i.qpf new file mode 100755 index 00000000..75ec4eca Binary files /dev/null and b/client/shared/lib/fonts/helvetica_240_50i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_240_75.qpf b/client/shared/lib/fonts/helvetica_240_75.qpf new file mode 100755 index 00000000..ca900141 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_240_75.qpf differ diff --git a/client/shared/lib/fonts/helvetica_240_75i.qpf b/client/shared/lib/fonts/helvetica_240_75i.qpf new file mode 100755 index 00000000..9584de84 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_240_75i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_80_50.qpf b/client/shared/lib/fonts/helvetica_80_50.qpf new file mode 100755 index 00000000..149db404 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_80_50.qpf differ diff --git a/client/shared/lib/fonts/helvetica_80_50i.qpf b/client/shared/lib/fonts/helvetica_80_50i.qpf new file mode 100755 index 00000000..007d1d83 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_80_50i.qpf differ diff --git a/client/shared/lib/fonts/helvetica_80_75.qpf b/client/shared/lib/fonts/helvetica_80_75.qpf new file mode 100755 index 00000000..42930660 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_80_75.qpf differ diff --git a/client/shared/lib/fonts/helvetica_80_75i.qpf b/client/shared/lib/fonts/helvetica_80_75i.qpf new file mode 100755 index 00000000..e1929258 Binary files /dev/null and b/client/shared/lib/fonts/helvetica_80_75i.qpf differ diff --git a/client/shared/lib/fonts/japanese_230_50.qpf b/client/shared/lib/fonts/japanese_230_50.qpf new file mode 100755 index 00000000..5bf076f7 Binary files /dev/null and b/client/shared/lib/fonts/japanese_230_50.qpf differ diff --git a/client/shared/lib/fonts/l047013t.pfa b/client/shared/lib/fonts/l047013t.pfa new file mode 100755 index 00000000..475bdeb0 --- /dev/null +++ b/client/shared/lib/fonts/l047013t.pfa @@ -0,0 +1,1346 @@ +%!PS-AdobeFont-1.0: LuxiMono 1.2 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.2) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Mono Regular) readonly def +/FamilyName (Luxi Mono) readonly def +/Weight (Regular) readonly def +/ItalicAngle 0.0 def +/isFixedPitch true def +/UnderlinePosition -88 def +/UnderlineThickness 83 def +end readonly def +/FontName /LuxiMono def +/PaintType 0 def +/WMode 0 def +/FontBBox {0 -211 600 993} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078983 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83BF47CFE01E54AE843C1 +FF919109F85F08DC15086C2613CD4932FFC3BBCF951312D7AC8EB70626A8256D +9CB48AE151BA7EBA556B7FC8966221E8114D04E16C2D41159D816F0736665744 +C5AA840A8C9E4A697E288564BABF9F22155139A91877825F56BC44047FC0057C +78C5CD71D7859D99CAD461A73C7871F7161E71EF00E7DF6D787AD0209C092AC4 +FEB4AE0EDF2141C62D4C5120EC43941E32433D8D3EDB02539B98433D8D9CA45F +6AA67D383551729AEF5E277B8CFC1BF612583912EFA2A3EB1C1490696E3B5B64 +987F7129C7F195446A898B0405208E0943FEBF10E74DC40EA182198E60E9BE5A +785D6DF540CF0AE65F2EF925FD27DE63269160F358AFA6CEC1C121F1EE2BE18C +DC1237C59283BE1B774EFB9863BEDEAD8229E459BC6E2DAE03EAA3083214E847 +AA01F76B67C91AC84CF459139DC819E0575C04BEEF896208B91E6A6CE8AE784C +E77246F7BC68A2A4B4F642AC3AB4748E352DE8555F5907B36C1668ACA42182D0 +E9FC1C228F7BB63F6B041C2DD08180D1AED8C25B136D007C6DB9E11C2367F0B9 +CAC27A34AE8EB2981315AA94AE8377875C50BD43DDB93A2DF261456B4B945340 +C81C790B5EDE5C3828C55E244DA6257D05D0D2C3274A35FCF96C19BF666B8C45 +1982729FD8C9E61FD1F81A4A346902E511732F09CFEDB4D88AA555E15C05F19E +2CA7BB2294D9079A9182D8970ED7153C9D262F6203290D693744F86EE55CF4BA +2F11579C681D25B9FA91255884C9A5050A15728E11348EE5EB4F370749C3D27A +D6A686868DCF0E327FBFFB45EFA735CE9AE0367E6A239B85FD751BE92E2C7D8A +618A08110FDFB48272337AEBA86F992A033663B0DEF168DA75BADB4071110941 +7320C0990BCA84EF516AD34E5AE14FADF3E3E44EAD46613423069D24BFE0E28D +DB6D32D0001738AE534BC2BE240BB5BFAD1489CC2B2F6621449936C68786A51C +02E8C179B643E401D01BE6849BFC89E896B1C3356DD9E8FCB69691AAF6BEBA04 +24D62B9F266D560B4089E20A9F35AD4A7F65A7183761ABBEE0F7EF26ED3565A2 +5516A3A5A57143979A1EEED8CD52A69E4E1AE4795F3EE0CA21B9F4D166783A9A +F54B08B6C56703932A310197E328C6E6A6BADAA11D66A952964F31FD690082FA +02D1E2A4512A9F274233B203FB770A3A1C7490ED630D0FAEB3066429D00302A9 +5B07D8F628F1EF4E3F45B5AFC9638A46BF1286E21A7463ADF8D870CF36728FC8 +3FED84B967CE31C5F19D9E36E707907AB3946AA1DDE97A87CF71BFAF25A904BF +9D15DA7739FAB55835A8B8AED166F2445E020BABCBC2A84B0A20C8CD2778BC3E +074CF498E454F752CE7412BAC70A04CCB4C093854AC72F28F0ED22066816568D +2B61F311C2EE3444CCE402A461CA0118CB6328C7A8FB765C4A008B5DA5AB9916 +AF83CC04157B769C659A794A7C3EF8149211C0EC2E81A2FDACC6E6C2C0271987 +E8C47DDCD84E8AA3BB0889764042EFC8249E0FD10586BBA5E3C7D5394C3C2FF1 +D482A67514026A4D65B094DB94C4A8872BE1FF437E983F6F2E8B336EEA6FCEC7 +5ED6683A41C9CE6E70671A63F4BDBE846CE41857FDACE3327FF35AAADE4C338D +528224A55C4504C2CE5A774EE32DE11CA3FBFAD628A915FE452B0B40F774AD1F +099860E44D875F4DA0C71B9E586A7D4B8AAA9B7D8225CBADC7C069C46B465BB0 +3F558588B9A6F0330D353A8025B39BFE5ECD63F6A6DAD23A1034B09F44BE2CFB +F7D974BFFABD8E22DB54CFC0CF46203ED59D7E257E07531D818752BE3E059D0C +453666701360B64A0E687F8B6B06234CEC96F09671999B301174E74945BE4726 +3CF6B35E73461E18DB1598541CD4903EE143F0FF8411858E57956DB86364104D +369FA26A999BE77F55F821932BE8C1F6995ECE359BEC8CA7232E70C3E17F0DAF +4983A7A210F2585266B9AF3C044D70B536630411908DE81B688DFCAF9322E09F +F0977B628FA31D986C1A66D0F4A6E8A2D7376C6C60099E31F0AEA56CC42E30FD +DF24FEA95C859905D140824AEB9FFE0A7791C50B22E8E158989FAE39A43D14E1 +BD1617E8F13FDE3BDD86015BEC64003E1D634F3DB00520FF465705B55C18F64A +695739ADE2508BB69D539CAB9101F955D15BA475043848600BBCB00FE0A2A53C +C5B5C98B2B0996D3DCAE394BDB1284A6B716D23AD0714E05AD6F4C749DFE7351 +A9DA7F1EE6A630FEAA7ED2BADBD4779E7715B866EF5CD6D17A79674F3F185A19 +EC9BC0480AE6FBD2DD06F3DB4D234F938A4FB5F61FCD5E23B151E89B610556CD +C649D036DA38897E2603E9E2A5E16116D8484A0D810FABD973AB649646769A11 +534B6C8AD5CA5BC5A38D4236DE32F33F47132143AF460828E7AA912911E899A0 +1F3C85D501D3C8136AF692B3832412113F57F5B498D06E8BC475D6FFD7DBD416 +5033544CC77111B564F7B21465B2BC0429162BA4FD49C7A7A7A36F646BCDECB5 +01E63158A6DB744B925977154927F97628D61221A64F6DF5FD63771F4A76A4ED +D0CBF03C2AEBE2B364298D7D8A4089EAAA7DF9CD4D0632E38525D0E59F037188 +BA436DEBB3D050B7D214B21AD842DE28E6D46D273F6413FB2B9A508639FC3EAE +21B2F659568474C617900CEFBB5243D7496F73E0EE7F4A3A0343746E7B189A7A +B1B3974DEE82543797BBB3D093DABCEF39C27CE8AB728CC971CEEFB76A24EDCA +564A31C80052563EA4E9F5308F070FC807CA062E26F2D72AF06069F50B1EF911 +97C8873EBACD1D974C8BD85D586DDE8E621F41648BB24DFC3BACD74FAB79EE9E +1DBE30BA8C1671125E5940927893B2790F7760631A34DBE6CD348E5605B5CEB9 +ACF9EF7A627CBA5DB5E899BD414506329E46F0B9848F730E36553F2A35AE992D +42D7AE4DA66E75CDD23CAD56D4C51176924D5BE94C2A974BB46E1058454FDF5C +7EBDA1632EDD353FFFF7525193286A9AF6145E102979CFEE99D9FB3CB1FC2EB2 +570476B11EA9A19A434801D58F4318D8414439922D89E568D6E83A57FD76802D +C0D30431821B145BBFD0126F2AB0161F103DC8F2A874238870740AD3B8954262 +55475C3BC6B1EC0E77BA8B1CBB176A8959AAF99A2969C4E0A3214D0627D7CE92 +A0D7EFE8E39CD42CC31263968ABDD978F3108C8D2F70B6E386198088209826E9 +6C31F1325BBFF8FD0E4A59327049FDA978C9CDE7D79E565E1BBEC909F8EBB12C +6BF8505890855BBBFCEE7265519875954B9F44FB1A024C28A734BA1A03AF3A3A +64CD95D8884B321A43F1041E38FCE81A6B2563C2CBADB04F4036B0208B863FA6 +9E88D301B364AF0F99CA28E1D023539158B7CCC48D092CBE1167817B113436B0 +7AC9BD5B0382F02EB8C8BF99E2F463994CC60A09BEA9A64E8D2CBD966140F4AB +F361D62845F72FAB9A107059C96E70DC1E2469EEDA1FAE3982A64BC300C9E81E +A98B34D8DAEF36B9E1F55E3F5697EF6F029E650D480D210014C8F18647EC2356 +8EDE0B22E54524F04BE37DF85FA61E3377A08E57E03B14554FDB1B40F07F2E86 +259E818A7732150B01A71181EA18AF4032E1BEE9A4532B26B9C8C063396DB817 +1A1E25A731C10F8B31A84393E9ECB4F279C884C29A5E596E08D144D081C4B7D8 +CF46E43E35EF09F56892E322D345FB7BCBDC665FFC924AD4EC638AF0959D931D +33A54E0062C68EC1852047D73E8715D5A6E11F62837DFCE1617608CDE2C753BC +B1CE0C4C1B151CF1FF1A4830F7484B8B1134617F6B1B60CD54B3623E518CBCF2 +95C49DD546E783F884D38B86022865E8B57139637516EFAB9DC8043A4A8EE1BE +623EDD5DAF585F5F3A9EB96E6A51C18E0B3793AA94B6301C3473C58B11B9322E +F90BFE890466EB6EC6A1138CD2AE2398EB1AB8749FADD587C711E18AB171A149 +D262A8EA2A462C4B0AD1A00C53F7C3D3D1C9CE8FBB95A7653113D387ED03573C +6AE045A7190E794571972FD93DBB5BB1475EB2F946795C131C1572F187F1E6DD +438DC64EC74AFB6B730830D835642F1456E76C3327850B745C38ABADF4E742EC +17B3293D8C64E041EDC5750FF5552C333DF29FF5AAEF6214463FCC682254BAAE +84C0C71D4ECBF232AC4A4DC563C819BF966C37993F2754077385DDEFCE85C532 +95B2F6FAC17A557DA24669B61997BE8D589CF50BA27FEDD9E76A19A96D1D48EE +4A4D2905E97F89E6C08F25172E511F66E04233648C85F00F219DB234C3FF33C1 +3A75ACEDA696AD9D778666C706246428F6B0BB75F812A4C16A689C9733B0D105 +71F948225DE8A512B7B94298D38555F9486E4496389426C896BDA10B71A25D12 +E984AF2EC3F78613269F85BBC185013872B1572A799506137E9A6A271683B7C5 +4590BC0FAC02DE3E0C9AED49C5CA0E26507DF36C2574C1FF73BFCEBCD4597632 +810D07BA9A666A07A099C06E0639283F42E7EFB3FF8DC79F7B2962967107F5CE +41CF3EAA45B092F2BC433BADAF57E390D5995B69F1E7806BCE13834433C891F3 +80694297260788AA2EBC3A0910CAD32B7E0B3E5101B5164BA8B0259B7DADFE9F +84A7C5DC8DB864471CB666F4148991C3530535DD7C086CCC09A768B22937D0DD +E18B1EE12E1DE6AE83F6FB9E1FB217B1D9BC2B4F8A01907A80DBB16A496B2B7B +3A00BF5CBD2BABFE145E5E49AF9C3398605DF0589EC2438A167DD38B46D52340 +2EF47C0644CE0258457F0D24FA19676191AE2540D4C98C6764B00D6917F62C01 +276D9E04BDC21E83A59CBFC7C6C252233BFD5C0C96A004B217B1E78436EB81F4 +FC2F82B70B19EAC733BB0E5B3352E4293717DFE2DE360EF780567D255AAFACC8 +432774772791DDC2BA4C250CF314D53DB0D8DB88F2B624AF4337C19F36D5557E +8CDE1B8703A5F1103BEF1E83A8327F7DEF9431953A9C814D067EA660252BD0C3 +BD0423DA5EDA7EE5AAEACD32ADB758D3697110DC41B6F67CC19F7435BB9EDE00 +51B5D7D941F01872ED0EDBD0E012DB3715BA84F06AD9A7CB13221290ECC5D98C +167209DB56A38C8961533D3CE2897063DC915F84BDA4095703477FEAF6720F09 +A70F352C574CBB342C3E69EE05242DBFF4BC8B673216206B6BFBC5FDC3F79216 +F44F8E2AADC0172794192CB17A696979CD4F7264268D1CABF9F8464AE0DF3FE9 +A8729F8B6AA0B493CE015BF1BD950E9D89FD9473215AD7513157CB46BD410FB4 +E130B2CAC097335F9C546FC6F678A0C8351A9424E981F316D7452846DDA58384 +5ED585947C87D1E1271E7ADB72085C960D9BBD3BDE3321BEE52132A62A57466A +F6BF8B639C9E5B3E57461ED4671283236D09F7C26F35EFB6D363417E24684C83 +C758B9AC5FBF012EEA6E69F5CAB55BFDA10B062E6D439FFCA550E7BAA1019636 +C5113FE61ABFF64F29118024063A4359D114E21D80190E293B80AB32BDBA340B +065DACA9553BC4C0F1FEB1F16E073937B11413C5599C058579543DD1A350F69C +0C66EF2D800F790222CFA1AC0745652238BC471FD4DED46ADA6226BD83089FE1 +91C7909A2FE12F5F4FB0D41341FF86465D4539A227E782E1FFB9652E853F65D3 +04D9203D4C9A93ACF81DD54FE0A4ADF2E839C997FC49927B92A99616BD77CEF9 +C77266204AF4219EA4D4EF5D974D4993EBD3FFDFF0B5D7AB0CF13279577C58DE +726476A0C291CB406A8D5DB1A631D404FA202AFD525B54041EE4FCF4DD94B326 +40511F36C2958FDB83DFBC22D6CFECF5415FEAC44C6529AAFE85212E9F030844 +DE707696B057D6AC50EF053F5BD88DDDB9552CD9F42AE29CFEA52065F06AE1BC +3F1D7B12B2346AB2EBB9024294ECD82B148D17D1CACED60D2BD5EC91447CFA12 +9479FBFB279ABDBF2FAA8760A54708E65EE4B3CBE671447A8DDFE9C51881A47A +83D5DF96FEE8EABCE230209E6A5208D1FB109D1B49BD2E9278C6603FA82DC102 +CAA038525870995634541931A77177BBF80BCFE9C12EC321FBCEFB916653F349 +244B6DA93CE590D48C6DC0D673299A47621E8397E0BCB164ED6D4CD605570CD0 +AF46D0FDD920181A58A1F2236D7AE126F07723445AA36179531633F8647F88D6 +3494299041A1B7818A7B62B8B8783B97E7C8F5FA7E65987EEE8C87DF23C0B09D +8E84BEA5B8613F0C144EE32E58C837B0A2037F51B467083EC9FDA57FD8FE5E72 +89455DD56A17275637E21AF50EBE5EB9D573F2D834B0BFC0CFD414D569D4AFC3 +C71219F52DA9A1A73CDAADA94EEABD9B14D42421A562065DF9EFF2784F1F40D2 +AF44CC68901213F1E6FD68CAE79898785FA3FC317F5D402A6697F6E52FEF977D +1C962966D0E44C714B15BC9B613A680B054D6B64B974AD0CD6C4BA7D255E49FD +D881755B15859CBF57EAE82406FFE8453AEC2F07C9D17A8C4D3A52B6D4259CEC +604DBE8177A6C3A96BE29FB309773A1B1472529C21FAAFB3AF407978B250353D +490CC9BA66416E522E200F5BAF87A3AEA2A556021354D7B74A9AB3CC0955A5AE +2B462ABC670F327CCB53C939E0586DA606EB7C2DF1C9692FA4CAC3078A250F10 +1A73EAC268EF45F1C3369758E1448600234477C85FB11770D17C36A66CCC5413 +544AADFE34E62102F2528407ABCF5775AC6308C7E3395F9F31976A7C0CA9A95E +30A5CBB8DE888F8C81B8F9B1A2BCC36A89E0E75B2F0B19EB4145C9CF0917518C +0EEC1D6B3CCF7DB0EC6354B75B9C54951796C825D9D8110F17BAEE6F4713ED36 +07BFEF64033F1B1E684C6F7D41AC91E8404D46577FF16E2851D3436770FDCB17 +B53D05F1F49C5B6DE9CCAA2B11F5470537C5C80353C62346058110C084C804DF +7A0B9134752E93B76F54A7A573FA95D6175319FF47496E608241D2E33E51030E +B79B9E4838DDB48A81DC4DE9492662F91C5308925214E2C226B28D8264F96E16 +4A49B248594E8053F86234651DE05A0188E26BC3D2CB7116DADBBC4DF98312B6 +8950C20F99AA330B1F011370CB0E50111CA1CE3773ECE6446742DF74432A38B4 +800DB338C4ED84E75506CB8E601B345BF60BA8B49710AC9765B33470A85FBD2D +BB0D2000FF9C0EB524F44AB6A0ACE74EDA1D46317CB2BD488B621FC237CBDB03 +B23A450B64BAB89B60FE976160E5BB90642C647A0FD609B2A6DE281A9978ABEE +0CD7D99F087274C3AC641CBACBB0E128CC29E141F022E4A404BB25F7FD57B58D +582D176EAADDAE7E3385A93375C8B37D11924AAF00565EF7E53C117F10EEA3A8 +24D6DAEF6766D9BD9429C84448D9F1890BEC8FE63513E5690426F85655741096 +D2DF9DEE68530E79B08CFF9C53B280581C6FE3C5C5C8D54C54705F12B1CC6C14 +7606153AD79BB94473AEE5056ED3974B71FF5D3AFD68AB651A94ADA4F84C58DC +42F3E29D3B7423C72DDE240542F038B338D888910E27B4F55F40F11B654B4BE8 +A196AC89067CD52DEBC77E0C4CB4B387D4D7DA79FDEC55AD017E62AECF4A69AE +F04A2CD3F7F897A50FB1ED048B117A1BED63E07A0B9645EF7CD6B91FECEB75B2 +3E4C48C9F82300F8C100972F29F0C132F3F802128B3C28DB8C0C557E0C18B0F8 +F6F3085E1300FA06B9C360681B8B5083079B79BBFD9E8E82D160E8208A3940A5 +553ECD27B328EA8425A53EC26CA31D86D486D9EC8BDDDCCBA4421B050CBFF54A +7CA93679FDD917E46A288060E42FDB60BCB784FF90045821410FDD246DE7F240 +8E4E5F9EE7A97945D959936D692C5345AAABEE0E739C8BEBA85316649DB457C4 +308CFA1AA2D107AFF0EDB39DB5208C4F6FDF48B053A1D7F89C473A158A031213 +80B96B47905A4FF806CCA81002C3976A4ED1849382ACA1BC62940D2F2B5423D8 +FC67B48D387B440A04C2051BB75B24B4C15F6B0665988427F23A3CBD576436CA +4656A035E9CE18B233FFC11FFC35A88367DC48D61512CD052824B2272A92304B +5D04D414022E16FE3A86B047194B7A0A29DA9E2111A575ED97405E78DE606058 +24E00909DA25E9F50E335128969455E6D3610F129C46501917A352E5F34C5C30 +8B5E67B07E4E6886E909FE8DBDFB2DDC0D3DB1F4978326A50ADE74998840F3B1 +5E82C51F00454B57DE06854A58A38D34B5B7197F46CB9AFAF975198C7821029E +4CE991BFBCA3115EB5131414640292341979F90CE55FE7D737BAADBBEFE37D14 +F17C8D795A06F04883E3207A1E72AD520B22DCD826B676463DF341E365C3E95F +58CC0C17FF5E13DA0CAE7601D5C09D0F5E5A06BB0452D26D3399AA084D88D2C2 +AC9DB9261BDAA3699EC899459996E26EF30C36B636B18E5532DEFE9EE1157949 +D719550715D577C1C541EADAB9564D2A5A8EB242014C65764002DE9D1368A3A6 +F7C2B52411EC39477E94FBD8E022F9B3392097953BE4F90F6098CF819CF2272E +5D4A4C202550F1DB1D98A097FB8C1B1636C2E90C8E903CBC9461066D6D4F9694 +C8D0452C4AF2EE38513434633ADB80E1CEE43F90DB31DD3402A9A8F79F9E4C6D +4CD4F5F4B8256B973923766DDDB1241E963F456273A768608B41B160472512FC +5F708B6862C97AC5722799EE650D6B94A9CC66483FD6BBF17282C1EF506A3034 +7751B8CBE2494884659CB9B9E71126D50F2F771358C7ED0038C67721E4DE280A +91174C08D3D1CD9CB02D52EF619EA3BCA6304A8C64D277BB7679A0E13E12BC26 +5E251DA7E103F7E82436FA55F5CEAA984B0920B415D919AE9698458E336FB257 +2E4A4341A2B26C69FBCBEEC84E608777CFEC5C099C912B638037C7F47828F5E1 +D47957FBBFE87A5A7B5454435510D5A79B769EEF11199C6A81E64D7C84AF6E42 +80C3185BDB0353584EDBB0B8691505CA9B69321DB43B9DF3F19E0A509EDB55BC +0D1BC93EEDA436AC29C087835CB7DA098813889261C2591DE2C20672A9260E6C +F7AD215E722505889A98A0FA33D9C3939B5FABEB8598F413A47632A029D99E6D +1E40079A737A6EEE0D5DCE9776746448B4DDBC1DB82075FF8370512BC31F992D +0C1865E1EB7B4A3234EBFA45B5DFD2803770063E06F54D07DCC059022A2F5793 +2A87A7E516B7B69099328F1274B491261FA9118F4305814AEC9154C48C2E6E63 +96C5E315056B50F5FAEF68B76EAF217AF680340A8FC7F91B83D79103E1B168C7 +6D90577D2E151338A287A5D8F6D45D21EB07D98D1445157EF9A970858E80ADA6 +30F63B956FD01971FA9FE829E99D8F460616C4462215CA40B7BDDAAA74EF9CD2 +20E86A2234C836201A7A53E511DB8C7DC430CBE22BD1F93E9010C27957A20FC4 +714981CFE0EB619D9A84E1B8A1985D5B638FC686FC8738CF790D91D97741A74A +FB39448D99ECB58E7A7A5C061DEB0EA250BD616FB538CE3F332E455860536EA9 +7F59962BEC3D23EC294302604305C544616D3245EF904D6A62517BF85BA33090 +E68D5AD9D974C7A97CC63470138DAD63DA0FFCF87FF4476EAF26DD7C1D89B330 +9D11B5E451B73F5F6D254939EECBBBC90596EF0EBAC7D2F6A423F44026DEC23F +70356D47F2911351B9FFA5D17B8A5D3100BD020FF83FEBF040FDB8E179C74105 +376613C15F5BDA64F18E162CF868DA0862F89883CC6822B266C1EDC84A2A5A76 +EDE519E849C2794B5975E968CE9001D823F33FD56E14E857D1DD6C5490EB678D +80B66AC404AF5C25C00DE8FD8B811F68019A325BD008FF2758CDD0CCBC65979E +2B8F2CEDA715EEC6EF000AB97CF24F5021F0529C8E52DA2B05278E9391D0E164 +DAC055D267FD3403237FF9BE4D30660E192DC8AA46EDEC4230AACA029C99651F +DA02296C4A7F48D3FA14A66A46D3B2C4EFC585B4638DCA012505A09F6DA59875 +3C418609DCCF6EF10336093B10BAAFEC6447D8820F7F1D2BF8A1692D3876C8CD +2152617F95BE5E507C9FD85B65CCC9716157E15E9A9A163C95A615981F67FB83 +B9A30F47E660766CDAB3D2FB5D4B32CC38B1EB62F4B0E3977EA0CEEC21391C6B +602EDD051F432F219FC7EA421597F67D09B713DB13061DAB18219213F340E5A3 +CFDDA5A71F5FC87E6AE0DF373C0F4B38CCC8A69844740E63E17E526B32718E4B +E1678F5B1EB02F35ACD314962D7D0111369142F1F318CC5CB72D21A1749F3C80 +744A126E6FC8875FF8AAC49573E9D28CBF5EEE5EF984507F01F5B56C6B2B9012 +F5C2D8C85BD09F8548D24095B691888C39ECDF6C1961DFFD56FB055ED7C620CE +3E680603440A9368C457C95E340130B86737C1BAB1DFB2DCBD14A87FD61359AD +F633434879EFD38A7DFDC11F935AA0271875377A39346F4809792D75D3D1A036 +DBE9C6E0F4BA355EC58E46A7C85241D72D3CA87B2E5BDEAB24BE6E087CBDA69C +F5507560D13D13510640742CB19FDB451C2A313D3FBC571CA74E48D20FF8C998 +C30E56C2142EEF490F5F88F694708AE7251AB61FC5A55FB1BF6D975F750124AC +21CECC1B8A9175BB8FF8EFC8DA34C873E5C3ADCFB3AFA3EDEB4A4BAD75CF63D8 +4FF86FEFCDB51FF7B8887E5C2E4DE36201AADAB8BA2671F2F7154A157D1C9700 +7528B1B9509C36428E277BF37A097A281F2D9ABE1AF16328505A265A4F2B8F9A +E0D8F6F391785358835D5D382FBB2BCF5839D78EBD49A104ACCA215C17877E59 +B438ADC652A2130F5E79D4441BFBC63CA8AE9D6730FCAEF12C92FCF1061D0E24 +83FC035789A10DA0FA865CDDCDDFF7749D0723115D869E6DF100057E2EFEC85E +1BE6C671205128371FA4D39465FE54343BC195498F3EEDBCE65B913E9A45F96B +5591241EA325970EB5F2CC9791B632F057482F8E1309D3A20A52C2398BC96673 +8D6F30BB78E4F55FF4339CDCAFA8C47A4DBE00CC0A3548B1CACE66925427B900 +1E6ADAAB861EE413B225C26DDC765B1EC7DDD718CA0AA0E7E0B92A4F11435E7A +BF6F106538B016EC5C713774BC3D71663029E0AD2D02674AAA26A91A6D048D2C +8380645767CBFA882FFB0F62B5452AB47953C35DA3CD6F178B5006DE79D5CFDB +7CB628E29C3BA71674D35F346488892F0C1FD53B47B8613BCD6FD8EA73BACBFA +15C85653D4DAC9924A324423C92638D93E2C9DB9289271F7DEFFC67C5CF3DBD4 +DB5997D9356A4086B5D2041EA33C78EB7A4B8271840614E5D9021448C93CCA50 +85EFFCECB75F30B1466869558851A9190EF43F6C25EA419F02D0B4A571C62454 +2B5AF2D07841904716A18AED7F49DC7649704FB5D3154D1BEFE2E47073D9D2CF +40D1D6EA1D0806ABEEE7803DEDBB65F30E69E0EA7838BAD0E878A86359529A8D +716C6123D5BE99ED71A47CF92D27EF42F8BE0828261054C62565CF6DE988943D +0E653E4A4E2EB84AC004FFCFDA56E5444E36B1BDF8021DAD38D68975F68B96C6 +AC7DF86DFA8B06E85669487FF3066DF334BC3F7C7A0A7B728653D333C901367C +9434E3517D782B7DCC366E5D1217790F14C87839E0F820A7073E8E7ED430B6D6 +50FF6E60F50E6B4931ADF0B9C796D47CB44C9B8497D7AEFE83DF411DEDEE59F3 +3D9D24C893DC7C9727691818D856A9974422AF79A32AEEE7F84EDE5FDB53F405 +0C4CF8D19DE038DCBAA6B67621BE99979BC8D08801682CE7A6BAF9AA0920641E +19F99686191AAD34B84C6497D7035DBD189A5D868721EB92EC73D62DFB0E272D +6C9F5048E0AD5AA1E8DEE499ABA2F8D891E5EB8BA3BFFA54DABF3B16E439FC34 +2AF610DA9801FD977A102A136DCD03342ECC66E68B983E344ECABDF95387D7A2 +C0F749E5C9F5D71AB50B9AE441D7053332CDAFEC4E57FC1AFC794EB367307AB5 +750CB771BA33C8591D4CE3D0E8C4C841E3FCA230602B4609F13433CDD4D0815F +7059BE698C1F4DE0D0297AB43C3C0B6417CD6DA5629BB857F4475DC30267D831 +01417146B0C1C7DCF877E445FA50C2CC5A433EAA684798E2EDD76EF9BCCC978B +1A6473F2306C17A6B92A53835E2F6C64AC1D129644EA310A920E420266CE2648 +E3DC281BD364B5C3EA9933EC57E55FC1AC534FB4932C1764D84458F8B14A9D18 +3E99ED71B7D67CC839E9FB4747D7E15EFF60EE9026598D7FFD39CDFC634F6543 +4D538D4A33A5C563FAE46EDC8A7D4F7B62BF7538694CF5BD427E01E60CCE30B0 +50F2890260F7B8B82EE310C5E20E1D02310B36B76864983A187BC6FDDE8B1617 +F64C971F69761AF5C6CC550DBF3C80E69BE8B2AC311B727AD651665EE53F9350 +D472E4CFA202E95CD72AEBFED28F411F9B7DC4C2F7F9FD501B214E9950EC3F7C +684BC28D0A8272A769209EFD48ECF6A633511388F5738FF97B84B7230C78E9C1 +C76804160BF038CFAC465E3F5ACA33E2CE853F0191415EA84072F9E44AB09715 +950013A33EF8E0EC7A9A7B7C10BE0DFC17082ECDD1C3D6E108F098623008F3D1 +6E926ECFFD1A0743FD695D52008925B0B031C14AB64FF996FF6128DC781FDBD6 +ED3C9B0E80E49B36B3C4812E9EE63A70C689172C65687BB83BA8E7916772A06A +D972087B74718FECD5E32CC04FA76B57915DC0827C9D387344E72CB20E373325 +66037392EF2D1E9B7AB58609145AF02EF435A2EAE82C06F29B8E736F081D4FF1 +992BB239C627BD9CEAD20D82B9675B70AB6603E4F932B3AC9281DF73F2F40F52 +C2FC6951D6EAFEDF7F02BB70E1B5684665DC0AA3627AF05FAF58031D6643D0CE +A54F11E2D07CDFC9DEF212ECB685522C9D6F6D6290D59677AA606313D0F44812 +7A4A7E1E2C992286184CE893B4A89FC32BAB2320BC3961EE4B49E9351C2B28E7 +0B28A837FFCF09E2F6054902C0BBACE191453FF48D6D0B0190BC3BDBE365846E +D2A8039ACB5D9673C50C0AA82BC0FDC339FAF8CB61DD5E0BF5F18B9F979E3442 +4CB364E6D9AE720DAEFFE1A862C0A68EDABB17C4E43278B4A4C98C08D975F62C +31836B3EF8912D40F1D211ECD3FF967EB36F332E3D8D7F7C98D7B4A57B373418 +C5732B949E391CC6B7C456E72E6ADEC949E603814467DA7D2AEBFA32EEB1A039 +ED79359CBB060DFC9782B28B7481B356CE2B39605EC6658971360EED1C72A524 +A95FCF684A44781D103CCA8B11D4390524D1201B68527E60EE2CEBBB3CD45E74 +9468E5A73EFF365C05EF520230A52BA4FD53405D08752D01613029D77EF2A7A2 +05F79644E955660CCAA3F2CA5E58ED822F24E73970C92562F3AE99FBFB7270AD +D588318B44A214CC4DA5CA6CFAAA3F70FCBBA7F0B40767495A2F19599F8C4DA5 +A055EE9BD280F09E693A3B196A37628AC7115190CBFA9CE5FE51B5BCCCF86DD7 +3B2BCD92FE8F51246D0CB193661F197F9D731A3B719D87853D1BD267A16C391A +9D4F1E8C16818DCE0D24F7213E3A140C07F66E465BD7C1DDF762F48633464D42 +7B8529FE6968B378DD6140FD636185E1C58C4AD8FC5FDA1F5D1ECD76E81B2515 +F29BD82DE369208FC9EA8ECA3704CAE5944CBC74FE076852658F237F3AF02D43 +9E11DC17C900E66910009893C751E74E3BA60B95605DA55CB9ED4EE060A34859 +7D0DBB5021C15E596361346E07833987845FD9AAB8FE403C9455C21B4947B978 +00840CD11857A4979208E2DFF63E5EC4D9435E297CB1EFB5E022EB30FD1C9508 +C26D1135B157259FC7E6B53094F4EB7E50BD21979F428CA996B438D88E02BAFC +D1C2DD524879A76FB96C515F18DD3BD49A9BCB9B6D5BED899757BE7E748D842A +61B916DF86CC3CA1431A9D3B6F048BBF4F348A70E03EECCE83961F7675CD8821 +9241C0DA67E5BEC09EBC3A4A16DBF7F42FF35D7BD3EC21B52FAA4D1F6A446721 +6F9D2C770CFD004E830CF11BEAA35FECEBE878B85A3A0D13C5EF7FA6999DE090 +3CA1A7C149AA66CEE6AB31E3F376AA4D3CBAC14BC612D5DEC98121D32BBCA0B0 +97BD77384E215A3011EFCDA2E24B2866C0CBE8A3FA646CC1D40F519D62A7B6A1 +10A442599852F9352221219EEC7873DE48F0105F95AA4BBECEAAFF33F94BAEA4 +B90C5A44943E4B9502598D260476DA762FD3F69CF92CB3FFEEBDCC3A333CFD31 +F5893F591CDF7A14412C7B6B24FC6451BDAFA0B88AFE3BC385D30C9459BACD7A +4A50AEED28243A668562956006624E4F557E942212DCB86B114C5F88A1064CAA +FCF7FDBFBF62609E114E9E1AD40AB62F6D638D866F278860E3F89A4987CDB130 +2704A70DB8C42D1CD9BD22A1494B52ED3B71761E459C30492601ED712A9A1751 +CE57443CCCD28E6116BCBCD227C50437AC7812E7AA9166AE6C0078B7695B4853 +4880007783A978B75D2DA6CC7FD83B1E7B07D55078CFFA0312FBA9062B6DEE2F +B1093B47682FB325F3EDCFC428D3D56DE67101CEAF945ABB8BEC9A9B223C092B +A322E0F0319495EF5A6B8F5538CF76C538D5D57E8D05945412B55720ABAB2CD0 +14FAF4DEF7793100A21715F4AFD7B9A2EF18A633F5767DE967E03954A7052057 +E0928F7A8115C2971DE3B14FD72DD75665525EC2DBFEDBB3153B7CD0B7BE1E5E +A74148D557436C3F3780C8DAE74A715A41FCF50B069E45D3451BEDDE480F3689 +0E48EE9A64D35252B51672021805C0D7D76772470D28616B7E760DBD09C52A82 +D83AA682F189222CA3A01889E016BA4854B1ACF2121ACE59DAECEA323F9CCC34 +5644FCA6B0537595851B12A3C1E159D5CC40E9B632A941EE0AFA50CFF3E26575 +A3B799D850DE384D1BCF84AD581E30B0EFAC66EB8F4FE9DCACA0403F2F42BABB +C6E30BD7ED53FCDD893606CA9F41EBD95509EA1448F8BF76BA545B3AADBA02F8 +9591452EB3310AC78FD5F86BFF400475F9680452976D717374C62B2AEF3B6115 +53885C26E4E2B35C58847F36B825CEB631C11109E5E9EBC52918DE2A9DA5F3F4 +D2350E2A69897FF8E4D148B2F554F22B95EED13BB4CFF88DAF7CB8EFC08C4D0B +1A4DE99652B29BDA1AD6C58FE3626A1D31D0FB3234695835C33EDFA37584CA48 +5813347EFC28237649F5A29775D2681CF949130F93BDCD16B759B44EC210F457 +E09F25FB0368E4D98209EAC333EE2159612984F18B8F06DC1F7E89F2239CD7B4 +43FAC95CB2EC0881218DD3AB689168AB4EE907E09490DF361A1BC1C978C7C79D +6FED7176C2B72C3F7D64B01E635C404C6CEEA25FBAE5B5669B5D089B562B1408 +D5FFAFE3C1C653A55D6F1F6EB4EBA1A56F8E255C15B41C6992E070B1DBE872E8 +202F7163E36C72AC78DD56CE8239BF3198293006BBAA89707D90E4C729D774EE +165DB7FF5988125094175A7196939017EFE1A2DF1ED89EEC5309790AA50ED3AA +1B310BD333BF2970CFA038C3DB87BE39CB6BDA17706D5508C26C9F8B4FFECDD4 +43E098165E0D0635FA8A54C2776C655113E27FE1641E1738B13873BCDAB2D922 +85698D571A6EB65A8F33B3AE27DD12C05F08B57E307A7B55561805C0EC855E44 +99B73DD02A6F95156A9AE5C64B677DE5339D97F19F4BD75D4A1251DF34EA169F +5E5EF8C7B7D1043BF75E80212D05B3C3A9161F68FCA385C1D8553E299F9E2DC4 +EC56F08ABA3B8F692A477595AFC231A319410B97C5A34ACA08133BB3B5E7D449 +63DBCE7A0404711C7CDB14BEBF3405F1AADBD8FE13D8423D5521E11766EDA4FB +8D751F78D4E012237C0F90B6F8FA1E42EA550FE5BD856DB4CE9F84908DD27B0D +452373A9CC8CC6267A6C8B8D5B253A7F930DE0A861540CD3D6C5B68B817DCDC0 +11074810779B2E243C444DD60FA0E165B662FFB16418DFC1E476BD40549C09DD +EFAA9752533B315BBC5072A3671C294126A8D4DE746CB0C61499577D3AA047F1 +28ABACCF06BC80D32B76D83C4E4EA743D61BB4D8F6309C5BB8320CAE0D0E84F0 +F5E407311074CA8260A32D676B3015DFFD9442D9F3F5E55C06982B3E359D2608 +8F918A354373C5F8209CD51BB8AEC4786D2591108D6EA01C0CD335FF3D007184 +F056535B30DA59FD9916531C9AE0EE69F9851784E3D79DDF5502D878FC92B08D +D94F0538670EE8273F0AFCC92CA9B34BC71F06080DFD08DD0BEA5FBB4918DA94 +1AF17468F57970A007EDC44E7D095C66E6325A9C55BDCB1E4F0D003BE568DFCB +D49D0C91EE3DC0514CBA3707408B35428689AFFFE60EC051CDCD04F8DDE96BF3 +37DB8DA3AF0587D4E1F7AB4DB221EFA93094BF7C8BA71C66D41A850C873EFC6E +2B0FFDCE7524BBFE592D7C5FC27856125209A19CABD8390E436188984B982E84 +EB38C95514C5DD830ED54908C08B5076E174DB8B3A739780B96C085245AB077E +83734DBAD19AB141ADB004B4B2A83A579B60EF3DB586F18DE7636692956290F7 +2DF3027C7E083EE457D4AE6CC35E11C90405304D9B74E0455E0DC2ED84D3223A +476C7442336595FDE7F1D9CBD3B108EFA3F5BAA7C3B03FA2AD9D0BC7AA2C0160 +4DD87E2DB156E11F0410C59556A50A989ED90F37A167349B9971DCEE6F840117 +7A985EA44452A62A69F2406F0E0D781B7D52575171190D42F2156C67BF68F828 +1947A1E79ABE287D6A19C2A2003891AE956BBF4F18012385B249354093DC1692 +8D7B068CF6B371CDCDC742A20AAA4CA6DC052CDD2A1A3292352AF976270951AA +7BDA8D6A408A761E73271A77E4A6C299161FF3E2292F77E8D319F5A39041741C +FAE69BD1855A2DBA7CF238F0E0F3E1AC707A420D40ACF1AF5D79D268A01106D2 +27AEB0E25D265EF85B6C4715F8B2169B191FA5666C369C3DE090D352DF99FCB2 +A359992F5379F796992C77C4648B74D2BCFB70D2CB88644E6773B17385767C53 +63A897E259DD25D1DEC1B917270E9C2B90432343A02F62A3E864019EA3E48350 +482ADE56458C646DC3213CED67C35798718467536C417EE7ECDE3D968E5E6E80 +00BC3317067F615FDD4224B8A4A6F2D063799818681FBEDCEE6BF532FFC9A4C6 +22E99C5A3B6B3B8B0906E19934E7B4768E4229C9993DF93D279CC08E624D76E4 +97F5C8A68B9B0A3E20DB1F97AD62A9EFD0D94C86D5F5A50804D93680F7875E8D +CCC5D9720BDB031E76C4DE35D408282506715C928C4C7DFC1CE7B569830E8158 +C64FA2D3791CA5C5EF2FEC2D0E7CAD0F72C15FBFE175C3BF768A011AFC3FAE97 +77F15B35F618B040B5DC4A6D952C947C93BFA3A49CD7660548F0CB67E1B7EBFD +B02F89B429212C589DCC26E8D0A862F978743FE67E6E3CD80E9EE36023A90F9C +6EF66BDF100B09613E6903BD7BB4893757F772842C8E71E01529740A453A5FF3 +EEA0FC407143610F244547C5EC06F18182014EBC167667B1C3469C5E36674DBB +CD9822914244A3FEE18C6B145EE60C806DDAE13A827B1BFF9DA3C5D7219689C8 +4F425601F01CB9E15D67395A0D571B3B189818822E6CD0537C661DFAA8852E56 +1DC02616F2CF080976E48997C2115D1BDF863473D7B76953CA6B52F23F7464BE +50CE2C9875882D265A9DD514E41F3CF44009F5B71E1F52D09261D95C025F1D51 +924891EBC45A09E1360D062CBD2E65DBBDC8BC92A7C3BF8FE1CC570AB7CC1691 +129650C975F1EF024D54FC934371E605C47E06803D85915B582E86A3940618F0 +6FFFF72D7369C2CBE7A2A5A1E2DF9373BD3C2D76AB12EDD4F11291781DAE2F6C +E0601144B6E3AF22F5723403303887F1A4EB9EC17A3A0AD2D020EF2FCEEFFA9D +EDE73E93B6714CB34307B11763A1B833E0783F918F72C508C529D76CBC4F0AD3 +EB9D86EB288648F2857D546E8FF022B5B0B039E490BE97025DACEC16D8EFC44D +3D2D45FF8395F75EBA7BA973ADB7EC73C539160DBEA3E380F875ABDA51710054 +EA6D478B39E06839C5A163BAAECD19EE086474D9EB302B818061E1E4E6FD1D12 +FF82DB6077D6D6C99309A225074E6E8E92256042E3E88FCD9409FA1E19E90047 +9697E4AE194F086908F91B8D34A649C060027CDDE154E9DEDC39D9F6AA90C217 +2DED68743609DE718C75FFDC92FCA076BE4D0865A249BC72000F94E4F1D03FF2 +7F13CB176E0DBEA521BFB4A536E8FE36639ED3EB0CEAD041DE6455138576BE7E +41AB953FC3720AC4F3512BE290A5E2D5C63132E1B0D56ADD8728CD616117EE12 +066D4E68B82BFFAF18B9DD91CB69558534CC419E600EE3E670250D0E19F2FA17 +A381077973542A10F6182FC3D0D250C24A2BC5C2E3AEDB7ED3FA858D558EE47D +FF81A4768A9A233AB11C844035ED5718497E3395F0238686BE00D975CF7ABE92 +E0C58038AA7B09DF68EF4C559ED91AF5A6E607781C7D540BA0C77D4691A475B7 +B39363B6D7CB872032C4C8E382127B0756E0B91BC6F87FBB050C630453C08493 +AC24F4BC8379CA871515C8F503BB0ED5CF55A6C7BFBC7A09E4208776603447BC +068A016CB63AF338355B44545B4D9FF234403E858D2CC43584DB031F8EE38B3C +2732293233312769A0A984ACD721FFFA24A03AA9A00CD1620FD332EA6421C40E +F4E917FCB00638E8B8FCA62228DE95CC02CDCAF8B2A43BA5950881BD7136286F +BDCE88C3BC964E268D8BC6EBA1D367EE179CFB277778F20CC21DF0DA363F73FC +A0CABEE965599A00FB9DD52C9E5EC85F598CEBFBC43C6B1A85CD6A382829FDBC +D65E57C80AF9BB8D33177C856F488A91F6C97D89105702D9E36D3CEE11657DE5 +848D08C6F777ED161CF596C2C21DF22D5CAA13E9FC2B0DA8847C63B78E9D8239 +B48EEA44A4C1D17EEF695C8ABDF5F688B0C71537BF80146CA2DBC3030CA9D942 +1BBA232834D3220B5DE5452109AE248D0F5C87F26813BFAC6A953C49C456A74F +D0840CB8E08AED6E07BFDB69AE6A4E9F8CDF872DC0D05D3CBB3EEABADD5428F3 +2A6E7C217E8BA597B225A08BAAED70C35EC9FFA8941D719B6E228C3E1BC94879 +FEFA33CA8B6941981A8E1DAF8CA642C7A6932686EB7E77BB54F4477290DE593F +2AF063542CF48F8C0D92548903DF4144CEDAC9B9A4E83824839188D0755AE284 +07DC1C008BD7102572EACA79DF2F069BD6C53818C64D855F2B8B3658BA55E78F +391BCD00E3E517B5FA7E738B10F304E917522BF4AF52AB6C799E1839C8CF45DA +28A598DE94B0F4101C5DC4FDFA8D22B53A0A9D557B8B84F8ED6B0ADAC375B837 +346130A77F0B97CC46ED60A454CA958EE065584A0E3BAFF867CB29889F60BA44 +AB61DEA85910F12CD0F297EFDEB244ACC85537514159BF2277996C674D9B22A8 +94D2A552AF8556F487B6357F59B3EFF328F675CEA434F5780C1C59E540942274 +D6852E2461EC38DF58D6173EFB3A520EA6E08A6904895097746177A1F2676225 +A229432E5A44B77909A74D1300BFBFF446AA4394524F93F4621A10AD5DC44722 +0A0F1B79AA194C275EDAC3E6016E7FD5CCE9A47A493CC0DC6922B639EBC98EDD +C906452E37193235127A6FF5F873691F98D714AF9E834004268D85CEE5D87D4B +C9CA8345487900A16AD97243BFB135AFE42A138C2FC26E7F7C2F3655797608F6 +A722BD7A87880E7F7B18E61BB5C780A62E81578C2E6EAE90468CC53C16D34888 +A41F542ABCFF5946A475CE31D631010238C03288ED5EFE6AD0A08F5698A55CE8 +6202516ABBA71A3837168DC0F3605D7B5FBB88FEEF8F62CF8014F0759912E0E2 +883134B6D916A436864BE76727743F4AF4630ADE41507AEBFCDC4BDF1B09866B +AD6C12C854E15194E756B96D2C9F986154E767F4DD73ABD97D31C0C5619B5CAC +6B8F9F709BEA5A9FE2A94B70C0B6E0DBF63F849BB253EB68F06E43513EDD6F6C +F80E10D98D348DF6F6FCDE5F0C20030A05AF703A5F4EF72F09313E7EB7450AA2 +BCC6386463FD43B51DCBBD2F585DE6AE64C8C0A58A06C26377E917EFD2477F9B +0C084ED099199C387A3176A2DCC142C8103B74275F997C4E38BEA75F25CF3594 +079939BFD5DB439C24F25E5D900353EFC3A71F9E826D8019148495B692137587 +354E52E822609639ADDA15D9C466FDD5E41A6A3BCFCE8DEBA38F3605B4E262DD +3D905D67B680F04E08208A21B7FD8ABF2D41D46BEA9F5697E32EC9701DC0F395 +B41101EC847CC82259A5F603ED6D8B311CC68D48BCCF3F88D19C2414CE01FFD4 +DAE254116363C032E274B538712310F46C2CB3E54F85D14D8FEB6751068A5785 +788CE873183B60997E0D5A0E54848383B56020F7105B5FFE278B66D7A4D075B5 +B7F02D7BA1EBDAA9EA32EA5953591DAA2A39FC9A72C364D0FC44D199BC1D035D +F5131AA54AE791A2223AA3FAF28FC36ED32F102935B728BFAAD51EDF8A379C22 +193172FD86F26ED77EED31405D2C5A964F20FE631123DD3EA41CA5EE1A6A0113 +5B6BA096FBBEB694E813C3B99672EC808A0909A9AE96A68C0B960BCDE731A49F +DF5F8AEF17D96B253E80064577DBEF7CCC237877477FD25650E26939CAFF93ED +A7354A9FB698D629CF1CEEADD41EB09048CBA593A6D2698EED63F5281ED9CEAC +4F6D8447BDAB9573AF6A69326F82A1D28C1D71B5FBC6BD0160D5D058B3368F16 +DBE9BF339018ABFE4B1462FC12B5AF34D94C47F8FD72320A2CFBB2B5C6D871D6 +630887B9022B75D603DE136AB08A3DFE989519EB471C308BF4CDCE9895092439 +190441AEE9B95D976F4017EDC3E2FAF831767543507A36A011000F889C75695B +73B38DD95EDDCFE98862142096DBD55100715BE46366D0B4C07B41BB86D33CD6 +6D069C60B2479D512CA1BDAE44760D26D1E1AFDCAA882EF6DBCCDF5C8C9C0351 +55C58985B1E558EF7BE135405B3C6F436C4B601976951BC2FC021C95530D4962 +4B1AACB5CECC35355CD348565F2FFD9726CFB074F1AC582B433D330560B72DB7 +7E1DA2E2F92E695978074DE5ACBDE9B3BA497249A6E31629FF041E8F9D1AB785 +9954E01AF3E318B983E57668D6F9A2C71CE7744BEC3FA216ECE3740D70445691 +FB86F4181B0F8DD0250A0A5FF42E07018D0F42D2C052751D942AB2ABD417A219 +15B3F393CF8567EEA0991F9C749AB79DC9CDB9972EE564AC97281018BF54C116 +F5678650A7C0408E4CABDF28B7BB84383B4DA3F3B32B54F1B01972EBBF2C540F +AB2C85B4E34106D01593D680CEE680B83E335DFC30951100DB3B2F1DDB92169F +86D88093DEF5FEF12BEDB7334DE681043A76E887121AF90AB152F6B473222355 +C088DBAC06100F32F9601C5D76C7E2EFD238C3B1F06E91471E2E31685E7296B2 +DBD18DC081E23C608BFA875F632C9C2943C10EC6BAFE59F116B1FE4474FE9B34 +F1F831767543507A36A0110017E3AF059AE3AB77A75F4AC116131CF4CDD06D1D +57A80FB17CF0608A0D00E77F7769C2278833EC936584C62BC403E92716EEAAA2 +E4264AAF7C0340E1C3BDF93090E2E9DC77541690BA2CDF850F9E1A967B3B867D +1961709D9D3D5E3D0D9013BAC0D2A581E09E7F2F4ABF073BDFDB2BD0FE1C8162 +B1A98B5AF8382481B511AE0143F87BF420EA3E4B82D4672D449371F4E1AB6165 +36583BC5A90CCE79572D8E6A3C6CA0FD46FA494765FF4351F6A773D4EEFD42B4 +A2A1A24DE128D63457808B5CAF5DF465C1E966923DCDD7E3099A8D43C3676BF1 +9E3D6B1E7D996664E063E0D51EE85CD6AA56240BBA9DCB5485888E3F7436E467 +8CA74F68060D052110401E694AF6E016184348EF4C6FFEFAA073498205527B2F +51EB6276E8B1A483ED40E46D10D775E5E9FC3A58DF4E4BF7E7692E61BE18F517 +BDD664E28E4EC5C6F53AFAFD18CB2FB7F9F4B2A47CF529F9536637875AA9FFAF +544A50B142F015EA16B9A1055B5A15F184E4F6BEEDC245455943A3DF312D7F24 +9EDE312CEC2160BC7A169D3E9E6917FE7E795BB1D3D2733F0E77B5D265BB1DE9 +4641C27B08879B89E76E0AA7DB55C373637EA09C358324C9A0522F6E26B263D7 +2022A0E788DEA549DE6A1C991A3BD85C4EA3E71C2B461BE7A9121FC09139992A +B474CF3732B8EDA9C38F903167E4DD3B35BF99893747ED95A0494141D3234970 +B9D8DAA1109F6DB5122A23C155A988FBC188C5A0E7540392C039A6E7C8553473 +7889355073080E32DD4E529DC97F6E7040C5DC37214DB4BDEE26CBF1E2E2E7F6 +A06B7D9E86C7561842B61A3E5C4B94DCCE011BCF92092A00D42B1A3B3F799F58 +11A4C8115DB64711BBA4AD932297F91739565F38A7FE08025B5CA3C479E39588 +5657AD3849A134F035FD142A263A1A68902ACFBADBC4CF3E64A10064C5EF7B5F +A8C5B11EC9199E75B83A1BF891B2DB8B180F75E942471E7090E9E78A97507941 +9798D4CA52DEB18C09E4C4B24D4FB511681732E021342BF769437EB266EABAC3 +9332C3008375CD804DBE03AB0C9B5A29475E6D8C79E61ED661819BE50AB9F1AC +81DD036968F39844EC50555A5DE8345382150B2693B607A67E0AEAF3DDD09858 +7AC8D0A3FAAF552F1B224F0BC57B967E9988845C61AA68AF74A3DD5BA00AD7EA +7BB4D503982779D7397B566EEDDA93D4E3FE0558EB8351B7F15B4BFA39351FBA +0EA54BB0FFD1D31E22E8C00BB3E642A64628C51A5CD3A4B9AA240B1E3EC4F597 +9A1090ECCA2120EBAB4132F0D81B60A1CEBDEEF87161DE49A707240A70F667CA +5E78346070629D8C4480F9FA4B5026FCB7C48A149AAF3C909A298FB39CD6778C +E1B0B400B1E2EE7576DD50E082E84BEA93FE08F884171F5A3B402C29D373CF5E +339D8988EB92A5345CD6E10B6B61FCBF51E881A1B64C40BEFAD5C72C5DA4D219 +C4F3D0B68FAD2EF1626D1659DDE8EE66FC9D7E65F8DBDA58151412B6D9524777 +F9F1657AE4CAF358AEABDF7267A724AD62B4D006C463B44221BEDA0C08CA934C +5DFB1C77B4A6A1F8A56D91B1D9192722B265E883AC45C1CEC5E176F331183B63 +F3E7D61929861372E46631FF63916BAD3D10C1111E5253878F9820DB501B0FA3 +1FD1A89C3DAD269A818B175E6E2EC61B7F7A562C0D58205A9D4471B083F9DBD2 +33D7DBDC0CDB8C464F5A1A798401A3EB50004CF735F8E8C16E6F83CE65B720BF +B15410AB8AD4A9407BBB3E7A68EAC77AEE9698E5E50DDEE6EEA0A984480417F4 +9097AE400B8999F08A7572C37F89207CD83C1BB1FADBD562096362A13E173B2F +D82D67804247D0910BF81334F2F843EBBCC0458DBE9F21D458D7F7900235F6A5 +C0B81D6E3B9C9FA25F53C714CE8BD134928E88EEA0CA70F49B8942CD33FB9BD5 +55F6F9F9B40879FF7BF41BEC25C6E676244AE10DD13676A09FAECC3FC2B62BCB +89AB7305887932C37827F4044C555E89FFDD6DFDDFE507DE5785C16EDBB13D2A +C76A294796ED347F6A6B3FD434FDE1329B37A4EEFAB85A489FB253AB54F627D4 +51401BC7B78F2FB41F43C47B33F33980C43939686392D3B1BA80063E35F07A55 +38C66B7B2CF11058CAB2EDAA16250D57C889EBB4147E963085ECDADD5CBF741C +FA9D1CA3D307758530ABBB5C2A50BDCA276808972135BE28DDF01016E7EECAA3 +E90E76DDA13906E7ABF92301C72CDB2334AEC951934AF92A594F9FEBEBAA74D5 +25DDA66DB5045BC505FD43450B489B480C9868B17D0305373271039F50D0A381 +FAF7E94DFBFCB40E3DA958514066303BBA8D0B585721C861149EDD288428DC05 +CC5252DF29CA07BDA189B9AA0E56463FBEB46F098E5F1FFEECCC14C8AB0731AE +B7AC09C515B3167691D90457F87A16D1AD02E53E3CE8CE7A199DD93C809825BC +F1D8C736EBABFD526601EF314527A827D08C987749EFDFB8D57F95D0B0A4D32B +7BBE1828EB2DF4C64C4DF2C6703BD8346F14C59A9AEB7615B3C6BB81ED09F494 +0B02C88D60F7C344CA0DD720220820CC857208B0704530AAEF522B46945461DA +1FC1A105B514ED4A35594D391DAC2A7A7DDBA6C62802EF75E7A4E21454896F5A +F42FAF1909A5EC61831E6288215D8C8BDD866C18FAE3668D39BA217567BED9F4 +5415FF5916B851FE3ADCEF9B9E2A113019436B3184884E6466FBC3F24C5ABB32 +621C0C4C793AA0BB51C4A68429A611563162457DFA45F651699F2F21994680D2 +E18AABA6115B1183D6A4F6CADE349423A4D3D83423EB59023E66023872E80D96 +D3E2658E3062E5EF5B9A90A3C4BD07442F57BFB0F4868EC9D373B5B8C72F8A4E +290A12D1B2EA158FA7EC4818E27BCB2C0DF316A9F5A9606899D73DC39E3295BC +3B342D20375451E653AC76A096F731878C0B250C5E3D1045A01ECE86C5643193 +0E309F64893EC5E5818676980BCFFB3372ADCD656B42ADA232BD1EAB9481CB85 +B738B31F0504C78A89298EB16DC08E3422516E51B871241C3D348A09576AF5A9 +A7AECB8C4D04B679187879EEE76FC1FE0810FBE6FCF7E9A51E25D02F4E30672B +9D1DE282DD2D29265F2B8339533EFD9575E2FF57B1122DB4B16D35A54F3C4908 +6CAFC314068E5C37A89E2E6BCAF8D9B1BCCA87C14F41BEDB9214B3230274F922 +3E269AE3396283032830E8870DBFAB3B01EFF41A49D360218850CBCF2772F780 +0E30166FD6992C18FF429CDDA136BD81F7CEA7AEDEE140EF20D9F6E827FDF918 +0C1FE773A147A4AD0C2C0D8E789F4387DD69CF4DDB7A5084A37C3CF6BAEDBDC3 +7DC82ABFBE44E6D45960858C46A5B061A7FF169E95C4CDC59574B36F7B410B43 +C8643EA56010192D8CAC939D95009F3DB69E782C71A0DA0F78DC73FA5F3D6BB0 +D0E05C11D401DFAC1F127860814DC9A14780577C5ED809412BFF82CA82C47E49 +0DE1E08AAACA436EB618C2094F3519DB1685D572B046A4FEA93D19EDE10CF0FE +DF2BF0C402D7BC3A9B9582EC955CC57A9377D0F7562F7991F7FEB542806DFAB9 +05F9304B0546C9D04C343418AE1204B6AC2BF6EF3DCAB00B2EFD50884B8BE2DC +7CF985258C5489A37BDD9AB727E4430A2361D6CF0CB45C80A60DF0EFC677F1BE +66CB904C11D868F88BF36D9AED9D4217A42F0D138B6943E8B42FECAD07B248CB +89B415A0D36289E1F566A4CD2DEE7C8EB9F62E8A2EB3F6016780C60C460750B7 +D599D04F3868956371D587E68063D86A673CBC9E1FD630A85F27883E2CDEE493 +D0ABFD045055F162A009CB3B29D3219CB8AA3F6E0441E189C29E0E7033240F93 +907A7FE8AA4E9CCC93B0E6E6E8EA3DAF7212659378E95DC6AFE72DE348BB9892 +DB4CE11916BF8B4ED640A9CF0E9ED09E4A133AD659AF36196A8E2BB82785C51A +A4931E36CFEBA394BDA9306F93BE42E9775B72743413D41A5656C6716013D30E +21845140AD93C540B7EB94493BC25C27BEC5F3BA459F9B57EBB9379AB42AF326 +F3004C8EB6E90661E23231B96E054D7D903E77E3C01B8BE2A05DD624B84D7876 +E09A58E75E3A14D40BE9710C87B87839DA33A74E38C40171098286EFED3A931C +A2F3921A688BB57252DE0FF714E4E6C57F50476BA3FEB5ED6EE6434F1CB9EF2D +6CC52EC6A483956E812A30C4B565A02D85EE90C1899F5CDD9210926BC142F7B1 +A19C4487B4417F94AF9783815EC2825EC7B16FC827A75C293800C70C525C1C6E +DD8A31FB7149ACE92F580CBEAADE4D8025BA127B528C88B6D511FB38AD626732 +ABCCE4176971678EA3492A168B16055065351D18576312B863B1FA566D380FB7 +A2DBF1AD881751DDBC8328B9B2E3B00EAA12136B14BAD25D2173ECCFAD1C0CCB +3954B60B4A0A93F027050A2323C8A24175BFEB0DC33F9475401A84625F30CA4A +2990ECAA3127A97CF50F995C001D5F190AAF7E1AAD3FD511E5DB04BDF3A21D97 +6763083BF896FEC43A4407571857790AFF5AFF1262814B9741F3A72C872FF129 +6953B892CE7159640FEBEBFBF790BB4017B4BDE4BE66F255D4115FB0261BD500 +90BBC4117BE9CC9FEB9F58C02F5ECFD16C402A55E16F31AF0028CB62A8825419 +8F04B7B83C6BDBD31FFFE546617B785D1CB84918226C8D15E29CB8E20EE2F706 +58E899DF355A4CDF41C7C3DCD52356B97ED4D9632A11C1F10C728D8CAFCB6A9B +F9780D00B6B3088C8542AFA3BD27BFE59FE97B1A959295AD9F3998637EC138F1 +686C00676484DD3CF97AC801F31A764C799F2F207398267508558163DB6F9401 +041BD8E9D12A194E2B9816EA4585414005264F0F475E10A452799732C04A629C +B2A6B696CB661584A092BCE0622AAEB5C8DE8753925752E8D7EC353E7D819192 +37A48D0ACC93BF59192BD92239E17A144C8FE2FDAC9F45A0FF0A784C0F33C0A1 +DFF65E2F1BBD6FCD94C4C41D49D82097191871674F926937EB84351E66D618E7 +DD0AF1E5D1F4BF5F5FB6E071F16389EABCD20AF855322775F6EF175DA0CB3525 +A0355FB8A75B2DDC429D6A3D3D14DF49E594F6132F40EE84607B21DEF33CB651 +986876CFFF7B9BFBE0A48A13A616583D41167A1AE4985DA3E295769E6833C073 +421B7A1BB12A1FB7F68E2B689C62CAC27E49ABC85400AFB47B65C347165E8287 +E051C825736965833C97C548A4DA4A5CDB970A26E5594D058A664ABD5E5FFDD8 +D4B2E46CB14A1146BD4318DCA6B934C0C0CB359A2F864314C060298DC7DB3C2E +EE7A53DEEDE3488283848C612E01A3541C006D51EAFBCDEAED5C8BF5A53F8765 +8882C233355671ACA971546F073AF5D523D6CB158BD2E52ECDE1C86A320C1D56 +5C7CA1E2C7DA1518A64D7A9946BC3CCBD4DC99ED4C06C49FCF7ACCEB3825C20B +A7FB66E20CDC7CD5B6DF85A6F9651B5A0A6AF8A7007D247E588CE3D10A659DB2 +2409C592617E844B788F8F31439A864A83F150B9180ECCCC77FCE80FD76762F9 +FE36D8622E27287C1BE29C6ACC87BAC41E303229045ADAB41339583A7E2E182A +25AEB962E2DEF3938BA4A36C1FC61694231232E0556C48E4CA6F2D8B778AA221 +C7C2C602E5BDEFA829B8042FF26F6DE8AB24C3D6AC15F08F18AC87FD5DBD10F5 +6FDA435B1844B5B5C001F812465593DE42ACCAA50107438F94B9540883D5006A +989426C0AC036D9F32221DF58D516CD07E8A62217595902DDB61C0122DA5CC53 +033484B751B448E828B3F2F5B780384E879A4AC2A0B0463CFACB6E71E64910D1 +C29D15AC53900540AF00AC76ABB9F58BCDEC17A66943978DB0FFBF26E7182F9C +51237DDF5171BC1272D2A92795FA94FBCFC990A30BB4089729DD36B34EA74298 +4CEE7B47FE85AE188CB7F01E9D976191C6A179C793CB5854ACE7105651EFFEF2 +EF8A2692CCA84735965666AAB61B7E66FAF98B03C2C91AD6BB2CAC04A25697DC +378F43BB2026ED0CBF3A95E8D43F3DEE43E2121623BD3F211D15AD7542666E4C +D1139BED9A63B41A12CCDE934DEAF7417779748B6507ACD789049D0A9A13F020 +52616D42561F9D099CA6C9C2FE5F75841BAA73F9B66B499547924103D120A9A8 +D487525A93B270DDD29CB89F48CA3794FEA61AF992B6D063EE294EA6506EAC90 +50E497D4029A2EC47970F69C3CD93871128B24DB7B64F9E1DB03D6C26848C888 +DB489E5494A272A2671FDEAAEB5467D9BE36DCAC57C1EA64B5981105D6C0CDE7 +16047600B109EC9FB61CBDED2B3A9C048F5DBCC6894A4C2788B66265AE2919D5 +FECA073894E52BD30069C895471E01C2FB1AEBA27E651ADBEE11798B8641AA4C +6ABD9FDA2FF963A342E695155472AFF17729FB6CCC8392DBDFD0704DA078F819 +39A12840DB11394E8C52B7D525F1CF6A9EC558175489B490C6CB529CC6C9AD9E +858F6C6574E5765EF040A0BC741339CC899363C897FB17552B54170C094AC439 +C633D71A0A6B07FA0E5F052CEC01B7D39972ECCF810DD236071E6F33886F1967 +5BEC9E659784790AD81F18478217BC614A09B450F9F367CA8C1319EC321304C0 +F167005B9442397C767749A0E80172A3E798778842E72C9995090ED9EE7E77A8 +B4E0B5182CBD20305D29FA42232D25CE8CF595AFDE8AD238796CAABA7A05732E +DEDC3D9611E73FB21BF48A838AE013D1DB05ABD0A8E104C793ED29C821B74B60 +7BBF7AF551643427F79E4A5D5430AD237629DC722B95DF7997D56C0AA35261F9 +059895E4915405E39187287F253D0BFC35C9221BC7BC7D1D6347AD79EB57D16F +7CD8A0F05688C5BC3DCE2833435A9617B0724C9D0AEC113719FF60498D379DF1 +EDDEDA305BB21A276068B03655C718ABCC9463672BEF5351A07A70CA909BCE6B +EC8D4FA901DACBE229ADDD6196678AB4931A4453D433BE83FF4B10781976554A +E32181301F75F423949AC99BCCAA0D5E45E2C6443EEC033DBCCA5EBC98FCC960 +4D0FE0B2AD4D63F8243ADF0C07C669433639C898B6032BEF98D61A1C712624B9 +D703992E39D06ED9903819E6E06DD069AB2E49B39C7556A9A74FB9CD4005BD93 +9571973AF75229D7427643828DA54783719E0BB7093AAF9CB43E93C70C17CE00 +4F2F2518524992ADF04A85077EA168970C035F7BAE96F1982136D215BD19ED26 +B13FE585D88B9CFD80BE1CC3C475BA976D327E06A2C9453439C498A77074A537 +9CB48921B22AF51CE96FAA8194FC00E1A3BC5EE90758A28089DE5B78A9DA79F7 +9A292B613509BE684CEBB5029E7D06B115C6357A5FF14977EEEF7C54EA07F6FD +B144024D10CD770D563B3BEADE262952B6D59260D9F9C5E4D0C0A01D3FAC32E2 +667FB0297A92CC731A30F2B6380E4BD1B5296001C5AE4AF98196CDC282F8EA91 +D79C2F7A25E3D28549EF0AAFCF9F9D25AB744EE76B62FCCCF9A2DC9EC00F4411 +AD6B2A3F7DB78DE22ADD31DA29ED3EB6105C86554605FBE0A9ADF6AF06360856 +8FEB129D9EED78D6CBCFBC65EC32D619405C62C5BB36FA30FA0AC7E38AA3A920 +A681E6368244CE4E3A850D08D5D779DB84AB1E2D2CC9AE7EB7179D01E910803E +8D156650E3A0E2BC7DD6A123E640E6C7C950F5B11DEFC114FFD19B69E0028D81 +5D71285E888DC780692E120C9FF86951A13403321B6B32189608287EBE42C9D4 +5D87D9930A80732DE39715374715AA9B5D9CF24E753110E6480C0895F87A6055 +F9BF8CDC63AA7A304F91B9919E658E3E3506CFADCDACF85AA32C2FA99BA6A40E +DAC21971342C2969C79DA65A09543D982FB7AB63EE9E016BC89C3782AF98FAE4 +F3DB22427AA0C4081BE2A3FBBE6E6B8873BC448E79C38E4ECE119CBAF49303BE +83CEBFD5ECDD39B618D87AF87D2B23D0A39E529E6FA487799979C9CA7A8E057D +00270FD2B06F5EFA066E071C7B6A2A9BAF7FF07383B73E115E6FB2BF4961B35C +C1A4CC19E872465C98C0E7EF7566232A6E519E5DAD75EDBD011EBEC366C78FD7 +C38473EA43EED26FD251482E3BE6985FF6012BC6C29DAECFEA389E34B13AF04E +EF40BE464C56A9BE7BF590DC2400B357FBE1010F848C62C3BF13A095D5CC597C +49FE5119698063A4126D2B1EB8CFCF9A60521EEE14D203C4538EC94AAA4C42F3 +CFE1266BDFAB7807874978F69764670312AB322D502BA3C577E532D388864321 +F47D4750A55010B09B39F55F76BDC353860BBEAD1DBB0DA88986D8FC0B7E6B56 +4AE8ACC638BBF965BE16F967CC3647B7BE00D06C28EB360FF58801B5C4AE5DCD +79A68AE48A36385CD539B0682551D1D7C9B35DA190991341443F3846F6A4E957 +9CB8B3CB47A432906010CA28F18DBA32A8C6425DAB7723843421C0524AA1542D +7B23D36CC397AEF3C65D5A18B423B42E834ACA21BA92B5CC7E3B64BDB23C87F7 +2FD8B0D0BBB84A14DAE53C0582C35863FF8F372FE09DD1C1433F20DC53B0C42F +15015FBAADBECBD8BB5AB0CD91B740CEBE9D7BE2B4AECB9E5D572C52BD3C8DA2 +1C52B42DC5B1861540EB21EDCA20DCA5901578FB63A768B5B25BE7E79E6A34DA +C77D7BB4C18B90968FD2AEE3FA992359E5DBAE6CCD81CF3EE72A80C2D834BAA0 +B3E1676DABDE1FC4BA707DA236C3131DC4E91EF9716ABB2C71A57A076C7B366E +1015F0E3D69A002190FD689C11E3D137D5130EB46E27AADE6203B1726B852FDA +9A9BD004FBBA6F449309C517575DA18E7A9255152F8AE78B3B9C970C163DE775 +B9F4EBF840DDA1F70B2E20E5946A84C3997436A0F52D5EB8C923E9723EF105EC +93BC86F27DC41BD26CC28912126EC88B376AC07409FFAE4CDB01A72E5B781BBA +4316A3FA4F46A88B9B264F8DCBB9A8A043FFFBA529A134F62A05319825C7949A +A07CFF3C255C68BDB81DD007AC7D759CE74DB20EDAAE9153A9EF4E48929CDCA6 +8F85965CF5F8DE1C8E7526FB5F8C79351BD2027287C8A587461FDD4F4801E953 +8910F3D1B2B3487FA56B2A5A19E16C0DF0555B4003B3B377A3E2F877872944EA +FC334A14C024C1BEA0C8E8E18DA5B3E3CCEED380D50B278FAE9675BAE1A6A7F2 +8FEEA5B7220C84496216141E83ED512F281EB0CC8A34F29A04E02D29D4A2385C +98E61C5D507DCBDBFCDD6DA3CCDE8BFCBE2BB31875C62F5A3ADA36A5BE0B2F1E +372A88C8432526C8FDBFC2A8CD635F9D3055FB335AA1318425D44C7C290926DB +52258A4467AE67FA2A373C6ED1FE3FD47FEAAA70439A06A3BC4F764754F48B89 +A47594FD6C71901DD76C969477F61D4D0760F0D961AF9A24620C3BED85DAC965 +0D2EB1883381DAA2E88792693D52516CA19AEC59085AF2DB01903E2310812CA7 +F43D7BD3B08B3B930EAAF44539AAEECC6F35507CDDB5E92D928DB87A72CC9CA2 +C6C454D3E8B1ACCCCA5FB80D518748898D771D7B6428DD6CCA288DB550D7488B +296EED5C50F2FD74255C7B2A1177DB4D86F540764E9C51EE17F8FC39653B2AE0 +5171EE26A21F8242502DA857EBD9718319168669D9ECF8B072CB8DD0A5BE623C +C26B4862EB22EB5911AEF655ED4F52BD5441B04F917EC023851BD94BF70E84F6 +84DD916927014771943A72E8BA16E44F782B7AB40839E20847A2765FF9EE44AF +66834EE6E122B159FA7247AF41E616E5F6427F1D29480CF9D6B8BE66F42D5122 +34D7275F749AC63A93AD14E5E9C5C3A32CB1EBA1AA184EA8400FF39E0CFBDFD8 +C46078110DFCAD0CFC32606FFA7BF2183FDB0F9BF8FC68D5FE2C6B267562B777 +F3E11B16A37876A39F1824586548F5FAEAAFA57420D0CC28A57AEC1839C07AF7 +80C9D53D08C9030271E4B79739F2FB995A9E5EEF6957BA37DA2A5AE3B49D66ED +A57B58063CF1A9F7A19EC131178E8F7CB63BCC3AB7B0AB7B2B705E1885766A14 +615520B8B4752ADFADDB24092EFDD737761709D8C2B64C68DD84C8A6ADB68FA7 +2DBAAACE58047C6E051EBB8646342AEAC94BCFC9D4111977763847DABB4A4061 +292B80A451D5B0ED2908242C842B907206BD8A9292F88F37106900F8B6826488 +81DBB4C9005F5618C7E807C45B04B914B5B96BD39C432BD8B29D3EF605898309 +C7C30A2B24A64706862075A7CE7A6C58331B1E6A22868D9032C34BE24C468B20 +CDBEAF15A1027E4768EC6D30A39F68868911CEF80C074328B8210FCC725F835D +32B560BC1BD4BAE1BFCFC9CC645F24CD71CDB55D8F1FEB1CC3B579C2A6B2A50B +0C79A09838569602937841E0D6CCBED038A7635CCFE7DA841CDDA91C0C14BF3A +30F979E31B5060A102C24AB5CB6656DBEA74C04ECA37B8C9404426C60E0CF670 +B14150C7F519967FFF101AAE9B1912D0965119A31A57DDC772759F107B915F74 +956D7C9B33DFC59221EC7CA179952D0F05D0A21BFEA10AD65DFE985951304701 +1B0DA869C6444DC6746EBED908FE37E046A9C3A05263F0ADB027A201E3FDFCE0 +002339107609E666B29BAD895D1EC51C8CEAAF77C9B7900D4E48A8E0FDD7EFA6 +85890A414BF53D0811BD4424F73EFC028E1E24F827EE690A2C455BA56826BDD1 +76AE96CECB5CE924AAA05223080EA723FA1AFACAF18C879B1675E1334D14DFE0 +BB8F4390F3736EA40A1385E830E015E09034E3EC1EDDEB2ABB6B6923540555F7 +50D0AE29B82828DB755C16D3E28B9B4C003476EF672D9FEDB65C59FAD148693B +2F9A6AE55865581D54A0EADF9DEF317DB623AA0178C423C72A5FA7CF6583B565 +D68F4AECD003B6777AFB5E54B7724838FA27BBCAECC7FEFA482CE122D67C1F5A +7A89524A95B431C56180E67A728EB87E3831EE81AB8ADC8D5CD1BA34CCD3F7C6 +B57130F173E1E74167505C95E062AF8D17DA1AE20F5487D37ECB72D48EA157BE +8853F32050DAE379469C56F529867CB1DB8102485946F4642D12EA28AFB23338 +309516C967102F60499CCFA5BA738861ADF3881E4C77381AE42DA48CDB8B93D6 +8C944D9C00CD08FAF9F3EA6EAFC4BB81A046D60B9615E9E32CC1DAD8BE65CCA2 +4D9E275EBA74300318C0808FEB2F97EB11179CEDA173FD5DCD01C7A9B55F01A0 +72CFD68091BF0936F2CB6B4762B4129DB790A130341B1281239317BC4413C5E3 +33BDC68F9FC125793F1E71E49A160E70A0CFB2935384036D489ACB19385070F6 +77F1FCD18ADE1BA6128B6472D9BBC41916B50D349294BD9A8E55C53C32146906 +C33F4E0DB30DC2B1DCD95C14FF736DEC32100887BC3AD61F47D518B984DBF15F +9DCFD8D52DFE416E9330E8A7CB387993E92C40CF345CE5B4AA6237E5C165E444 +87B999C9C9BADE827E99338A935960B43E5D489216AC3A1B12553983E7387DA6 +0B30128CDB47234410C2CD262F4F513406129DDD4A5683D9A90213B15D82CC9A +CB95BF820B80792BE989F8CAA2C6A2BD03A17BD5BDD2CE037430D3C9D50B04D2 +57C04A27111800E45EB0A23BC142F8E94FC5EA851476BE4B6F28040CBE35CB92 +D58E7F283EA78F7803C9B531A641F969CBC91F76F9971D839486841F7C73CFC7 +12014116686BFC632620EA3758BE9A1BADF107C3CF1D56BFBDF38A243BDF7348 +1EAB5035A7D20A19A9244D922A16A66B9A015AE480DFF90EC74E1ACD6579A7DA +C0B60F1ABEEE7340156B4DE7DF797A6EC6931AF2FABCC7CBE12408C17EC209E3 +FA0AF21963EDE23E789F16FE7D5E504A082E0B1ABD3F32802541CA86D3DCFFAB +FB6BCD78D318EE56D9BA4D9C79727ED3CEFD9C95FB08BD05CD91E460F249B955 +AC1EE6D90C09D2C58621940E58E8BC2C7CCCBF44D8677D17D00AD53978C46064 +7F3A231901E4C0520D07A04D308BACB848FEA20D5D3AE8D2BBD6AA1637E0510B +42CFB4D7DC696414DFDB26622E3F9A763EB25B77136BB41ABAD6201D4A26597A +D5A21CB25E54EE60B6FD238905A26192BE539C1C06301AC836402BA71952528D +29E35B987EC4107D74F018410E5224C666847C416735AA1894A23651DEA153FA +9AFB47EBB67B66181EDD00FC8D0ADFB9405159BA37AEBD20AC6DE2361C787BC8 +60E969638371CB4003657300F22EB205695F5780A9EF6946C41ABBB314860407 +5E8FA325CF7A73966ACC1A9FD07183067705EF961E44784033A2B5E439679D03 +649D027F64149B1C223846C72D485BCEC6C627A24E5606919500289EDD483582 +86B9F89FFBFA9949AD5119486222D9B90A836E9F3A30DF87C8B6605FDA841D75 +3CADEDA0CD4F5E462A769D807CD93E817597583C273469E451DC0A0EEE2D44DC +390C8569903E0E1A8F3E4BADDF2810625A94C64B478F3B23329DA39C7D667A86 +A8C7980840A5BCCB26E9E00A03AF919AE303DB02E9CD24843A5C31D5C581F344 +CC05E9B78C99DF60271303F5636583D4AA19261A27324AC35FC60609C95D8A89 +1E1BD2D5D3BF85E9995ED8F5016E3ACD768C628F6EA4D629C225DB7665CA678B +CEE9262A08F77313EC07D428CCC490FC953ACBEA8B82662843EF29194BECA18A +9B9F7DA6EE5E69E1F6063891B6640E66A45DBC1BEE2ACE06966231460AFACBF6 +5F8CC0E6DC0E990ADFFD6958E9CDC3E2406ABF261D1E566D66C53FEBE676A6E6 +7CC2B0490A452F36FDDBDF720A73B499B2A24559447E6B64D3D1B9DD757EB587 +DCA3B09BBDD6270F3341F3C050D58A19DFE8DE6C967DD21191AF8D007546CB2A +29B6A9286C4E247DC8499D53F166F96E7B48F6CA9A1615156BF26569F38162C8 +379229886C9A14B7CC27079581E9E1AD044B911A204B5B5099A0A6CD4B93B5D4 +9E19292024C8B177377C650F14D7156E7F80CB1543B7D1AEC4BC22FD0CACDE1B +873D788E7679BA8CD24809A0E54734FB1DB1CAB70F0E305DA6FCE5158478FE21 +33D27702357D89436ECC6261F07609B047450F38F1FB447F44AC661B88D599C1 +46625D0796CB6907DE4EF2E96FE6619DDDE75FA874FB4C1885F533C7C3441FAB +FEEF1179C13A7C15C3742B832629F1C934D9870FCC0FC49877DEE9E31BDAE0A2 +B7D7A893BEFB1D1E8D661AA06A615166EE1A809739526EAF5748B402787680F5 +15B0E2C09D10BB1CDBC540B321DB8EF320F8762787A3550C6F0EE4A1F4C448B8 +989C8ED0646C084F39F72A0DA2F033A27A309F002779633D69E4900E716DEEE9 +4957732BA6B0DB00F3AB9EC6838E8D95C2CCB4F3C2DE12683AD34FF8D98CE70D +C2CD04BC2308FFE468EBF3E28C0451D2126E12FF74807E4EA74B6D318D358392 +50A057D3518C663E5C22D431097FFA3CE2D3BE94315C3C263E3192E2A0AE7468 +E8734C3907565B917A802637B8E17C0C3099E09CE5FE1F4C49E8F986EDC3F62B +925AF8AAE0DEE73B4554E19407D4A8AE540954CADC8E8E04C0DB4F4CBDD597DE +A042F8C1FD867A5981117894CB11DCAC13CB5B1609277AB8F52D5F14B0EF5CBA +6FFEB15BB5EE985C5BB5B6FAD69DB3DA85EA0F607ED70A07F4186A976157CFD5 +1FD77590B37B053366B2D59076E7C4BB5B17E37C0905B5A4178801DA04393335 +C2F5EC5170D36510D8EC5A3F74241D943D32D5936312F4E1929201CCD8AFF4A4 +8ACA3EEAEA2F80811E1AB97C722F5683CBD3BDDAABE2BFD365ADD468CCF773F3 +0D4CD51FBF78276CCB2261335439820D3335E049625BD62D64C10FA5482CA484 +91353DFF4D23AD3A1BB45F544DEDD955B76BE2179A3C115BA21486FEF6B9FE06 +C09DD1FE4CAFCA1638BC6C9C063D6CEB9ECF127EA34B258D56D9F466F3DE8E98 +44588EE4E2BE29AB2BA7CDBD0833E48070E2CA66569D1A31D74B3BB93C88B192 +9F41690EE73BADAAC366A5583EDC00C3A09A3B36206485D0EB6F952BC475A992 +7A08E52A909D47F93064AEF90826DF8DBEB1B8295843C34526CF1A753D2969F9 +41D4BBFEAD6445152C7566597E27074A6D65751802C955762833EFCBB59CC9AD +143BE9E315FF6962B510AD73E357C23B1E95E95D0E66F1870342066E083EC5EC +106599332D0B1C04080710368D15505BD555E08552C6BCBE59F8E7F52099DD8E +1262CD45DF1424FD99F35CEB8888EE76950AB97C325D1FC8FDA6B59C1DA5E642 +BECDF0BBC1D8FDAB995F0B42AC4B210841683DCBE8B0E57D9836EA9C5076D4E1 +FB7D278C068BBECD60136C1FEC4694E4C7258C4B907CD50D03481AB429B0DFA8 +5CEE01A1A789EAE744D80392D32F2D0D4D985DD521EE87FBEF8880B755BD8C88 +125FD6AB5BDE712D6EBE6C87E3CF95763C7F97C390E28B46DCE4BCD942C38A0F +B259F6EF84B53657102B0F531757AE6F3D5ABC4AF25682F4AA841599623AB99F +13613C3A8AD151528B371AC9AB71D884EF7605F242B0733BD8D053338AFEECDB +C04F5CE3F9B87882C241BD22612D8BC8CADD3A0C5DE9F951B4A9BD4C31C96EEC +7CD77871CB7FA20002606DAEB05C950B80428F48527800E26E462003975BE918 +6686583FA859951BD6B66661A0285D78F322604D2CF6CF12A3F92FE9B9121F05 +FA07B5FE84861D713956C1A4DF6A7899918FA425B97261BE40FAE4AF0F524D0B +1D3C7708CAC08B05D68296333F7CECEAD9DE485E3F290E8C8011B7A0AF2ABAD4 +C8C91729CF4CD7176F99ADEDE5B888EF92FE06D05E597738BDBD4579103CF437 +75A0F31B10B54642583CCA5C7C2030E21068A52CC5419406BCE7334F4861970B +1974F921D71FB38A0DDD0276EC5C2EA35C500C0806D9E06316B43F1B00B954BD +ED1DEB6F6840D36EF1E6F0DA25C565D06862BED9473D6F1F41F7B8B5B91E7398 +EECC397C96AD82ECC8411C61E0AC028E557B5AC3155EA12547C4E7BF9583F0C4 +AAD5FDA2DF0A8590B0A142287F7CD739734FA5CC5C9F4F3BE2007B055BDFED37 +D5A1414599E5BD8308B7C0CC59F59A2E5296EC476E578983C818F1307BE7EF50 +5BF52A9F05BEAED92F19301C5D754B4DC22607DF4F17C843EB25A57963128882 +1636862F5791840C87DB94004094D7472E1742AC5A8223803BD20BC0FF3B4803 +C64DFEE01FD9603B9ACAC6BCA107E276D5AA4F120C007B0720493A37EFBE8110 +0873203D4CC3F03BB8986608787346ABAFA70C97ED093AD9F8DE3898454D286B +FC6BDFBDDF3A907B1B9756431A73857B9C4605735776E00B63168AA6A7DB76F3 +3F57D42D4A742641C43C16DC4E9F9361100855DC833F154EABD36432338160B6 +7DCF1DF9CC167BE044C95A0C78ED4122DE12E8651941A9A00E9C110C7C8DF6C4 +3FEC21390330A78136783A85A410289C94B6EC85B28DD48F2D7299F10380CA40 +0689234695AF310ABCA57D37421A09245CCF60213C250BDD57D3FFC4B9DADA63 +4AE1788F0C90490780650C1BBA52139B4DD961A3650F6144C89E82012484AF76 +49C3371F84EFA5EFDAC65F27E899655F78E40DFD797CFBDF2888C10F720B55E0 +36B8670C5D0F2F1F7309F109583C440338082265523750F1872CB7C97E93E319 +D9D2CD62FD24A67DBBA77B305EE62FCFC13A60831F86F066AE738EDE223AD809 +74A5E78B2973B979B27652B12B2F65A8BE423E5F09E511623472496F1F886A93 +593CD8037AEA269C1D652B8261BE9F2C7DF6E2D923F7BAEB1089BCDA3F9F6C21 +EB0A8DD0F0CF8F28F5B2498018D995B14AA7DCC6A8C5F620F387009B7F4C9533 +C42D6C3EB234EA2AC527C551D098B55FE095645BD6EA74873635FECE40689D95 +B644F180B4515FBDAAAFFC469EDEB3D2257D3DF9F0CD87341F7D9894B709AB5D +2D2FDA926F4E66019A5B2C66A22CF7875DE999248E1C5FF77207B1F4989A1155 +BC301C4B0C7DACBD9B1A233295DBD7ED1E750366EAD9C138FCA8F38B12E067B0 +24FA74A712404A8EEC4B37BF2CA76783D8B7D4D1EE29CD494FCA463F2D95CEC4 +C602D52B102556E20DE647CB9EDB1A4C0D0D61CD40FF4EFF35C7F7D7E39D7A65 +B932358B6A749D90089F0BD9B0754C0034E1D599A0F627B6B1BAABA838567120 +D4EC81A2C61A44CAEE0721DC58FB6CB4A294B2C27FB1848499073A4282F8914D +29B158333483A2C30F1EB0CC5C35C9B44FE629F6A5A4B4227010E3065A39431E +4387E8FA2BB656DD3CAFCE39CD2EC1B8C694FF8A9D0A83412B59E064CE126325 +7D47C1E6D0A14C2E00FF23CC3B46491290CEB5CB0D77C076B682822AEEF33AC3 +72E5C3C7F130D4ECA6573DCFAE80E2AFBFCD8F75B97767336622B7186D1E4D2D +DBA4D4E7848A2528CA0B2932CCFF7C44CC84391A790844B68B7B6AC4E5247E11 +12E8B511AA79B10523C08F87C4FFD13DF16A32C14C14DDC3DFD5C7707AF0ADFD +206C5F08B6FDFBE6A25BDAEFDAC6C62D46FAD67CEBB962253F422E03E350FB2E +5D85310C754A56CCC4D415FA3EE330F65778D9FF6EDF4561971AB36976A7AA13 +65873392DB9FEA65D6CBD192D77CB3D712BA57CFEDE28FDE700E023D722C2107 +FAD33C3EC6DB0A1B8ACD2F5BDEC6664AE084E37C08DB2A394D6A03A4B5AAB584 +C56986A6A70CED92535BB8CDEB6E061803769D9AF11CC4F4B6681F7C309ABE6C +A45067EF13BD9BB6128B82B884A82A93805C7F9979E5EC4259829EB3A609578C +8B746C21E78AFFC105BCEFA657BA7E6A5232F6442C8F797CC460EBE086E4B5BE +CD71C218A4B381E95FA0193E29D9925E4892369B4F872D4D05041E04A94884AC +DDEF4B84BBF7CAB2E86CD9794931FF10CDFD59E4532F064BA6A043B7C878A1A9 +5E549CEFE02905047F5FCD191CB9421DE1DD7BC56EBD37D25CAD0B443663813C +AACA226CC461223ED82E6BC4ED9C9E463508CFAAD72D7B294F6A1C3F2DC462DB +D1D7A36FDD4F7F33C5CE8C9401117E58C88A1504E23A59E8B9028E6A17BE97B3 +A24057954B34E02B2013BCAA8E53A2A3BD80AF59375E58574796C76EB4F80A75 +65D18766C38957BAE977FCAB12B0905A798BDC7DF764A74A832F01A7EA583D2C +80F177A56353EB1436DE7BAB8FB36A72D0C99DE947F801522895B37169329106 +9231484FBF6DE63F4B2E97EDE44B80308CB50770D49F00E61E0B7544CF8B1069 +7014F9E674B59D24685755BF266F6F9A77ED1035A8101CB2B78BEB3008E75CA5 +5FD5304ECF13459607A337F5784ED89063F6844277DDA39787738D355C680929 +DDFC4CC7BF266D18523F2A710260820E8EE84E3B4EC13886E43A399B06B5A6FB +1CBE44275EC77FAD42B0D5F7F44FB119F848EFF4F93B7B4381EB3A6C70213BE8 +E90B52EE30700BD51306F314589A1154878DDC33967229B0A367AE70418739D2 +56B24EBBC2D687681684FD867163128BE945622F74AE2F6C57A63484CB126820 +17F30AD1C5329523D679696C4A7B8CEF97FDC8BA5C0C31B7F19EC8C39A61E5D0 +60A11A4CB9D899B363AD88F9297900E6BF51B5315CB42DDD6CEC555AC54E0320 +B97E989638A37897AA76614326D90977B6D5EF13DD830F004093E5A685C8CB50 +D976EF544D8C0471D3E037E19E42CA87028BC27D1477406ADBC4CE196A1EEE89 +BE9A06ACD6C17922A61705CA894C0D7F1783EAAB8031CB1C18DC3CB81186A1F9 +867B07FC73AEF3526C0ABC2F77FB35A52F82168B7A5C0455DEEA2522A5B74487 +82FDB49035062FA89995B9123F6EC3F84592158DC2D4B6D3E61EA90BE082E44D +275A6C4512FD61A3012861111496E6DBCB2CDE57F5963AF6FB129A3DDFBDA2ED +0EF9B3208FDFA7EC3B1F02381002D82BA5229E9F8D23D7802E8FE955E0DFBF6E +624C20E9707AD4C924E080F65243C1B0D53492B1D4E874BCF92862F85A47A010 +C32FC9FF385860AE6C95481FD8B83B37A86435AEFC6230706452993982ADEF24 +8236F5D4105A4F5C20C8796778B8C3ACD4D0691B984459608915C7587D382C20 +69A1DA37B0E75C90DC7060A5971B9551A593932FC8A137CA32952BD67B6EF041 +53E8AB1D2DF33C50D1F8B46D057333F58009BA460057573463E0895AFAA843FD +99F54D106E0BD9C7A87F8930DA17C78FA0A7057314E1E450CEBA5E65CF2596D4 +13684ECCB6BB7BA6C778127C4D69CA2E5F39FFD757BBDABDE26CD4059A85BED7 +C0FBB4C9428796356EA5F3094E76472A79E9E395F5CAB8B49F991F4D20CFE349 +D07B6412320C52F18EB4E87659D7E48AFF69D7A415F38BCD5BE489256C1144BD +281F85F7A037E4E7C8D141FE449D16F8D36D9039B298BB1F61BFCCF6737178B9 +ADF9A3A184489C6D5EA2B6C81CCBC3D89072F5093025BA69B6A29F2976898824 +406D932F7F3A6EAC0A65A7F016FFB80D0738FBC2D503E2531433E4F074D29DF8 +507C48857E39E25A1EEB835D5300ECFECDFF08215141C7B6100DFA0BB932334A +A4250162E36AC575FAECB1174F20F11EC6FAFA4CD886C023BB60DFA8595BDDFE +BCE6792B85B17D046054A266412F96583F76A66DD1D25599F31FBF598E8E9641 +7415366257EDACEC2D4672F9165BBE172F11BA76E5783CAB60F86655F87BFFEB +08E31DF6CC6863D05AD0ACCE9AD421437D17090354412872287B6D9575F45562 +C35597EA596E716B67971F5667713D8F2A971285C4D1B67EA77811AE7799CB13 +E357B1A03D5B71F3A7B836F74E65DC19DC8822277DE8B0073EEC17ABBA940B34 +F664745A79EF90AD4FB007C3F7558B84C98EAD1C20064082A2714539CC7F0155 +87508D192DB05FCECA78630C4133CD827932A84D21CC953B999C8C851A224B83 +F3EC014FA0D80C0BED17A359872160683A658B65309BB92A871B736E1B5E77A5 +8C43A658A9373F92459653C47707297BF2B08A8087B0D0E9BDAD307F118782D7 +D7003D9A160051C772E5291F33508921E1E16E48C03FDAB0F1C33BD9401CDF51 +9C7771022D3B69FE47296770914BE6ABCD4595116E2CDDA1139E6C0236C217A8 +DDAC4962DE70098E71FE6811A2E5441A54C5C91C2673482AFDDA9F1D25D39BA4 +667AC88E269E0A5973EAD0F112FB692A8DE56CD0840F2D3ADA9E35C8DC532669 +AC8EFC8A473C52E68A47C2EB6D1D60FBD80039C1722CD8D33121C295EC3B0949 +9DC8E10A76323B17EF0989B8C811A46099B179716BE70163106B15C58FEE49A6 +2BC6787698965C531312264F7AC5013A7F48C25D3B484D88213E093F81666D22 +D11A0FB4FAAF8D579125D58063D11ADE621799BB9CDF9394828BBA7C73BCF863 +B8B83B42C94AF06F076B73212756A3B6FACFF9F4AEEF704A5E8F6E66204C3EAE +3042E58635DB16E2B20D6FBFFF4FE81D34DD3E3CA24D9870E81519AE8701328F +B7AE637F2E009C8CAFC9C8CC9FD212A8D04236540FFFCE06A53F5E0DAD66692D +CF04864C36BB8B932D869AB4675FB0576610A39E426E16FDF718940E11FBA5CB +5D80356B2E191F3A6EC7062A60A91ABA2BF455C38A88681213E358016AECDF6B +F29412284CDD0EECC405ADD56FDD02D4C98324D60EA23BC8FC61849D2C8CDB45 +EE7996210A041FE7DD55EC3CB98A89BABBCB11EF1DFB332DD2A053E2F4DBDB18 +D147A80A364AA417B4EDEE6F799D012BB094FDCD5E2FDFB3CAC7D592C7B04C92 +29B6C5E2DE5B1C88FADFFC69B356394978FA36BB8DD4B8AFCD61EEC7818029E2 +86B5135FDAD4C4024472565F1154BC76FE9450FE41BBD47CBDE835D888AF9CA8 +2AEAF152D0EC8F366DBE7283298711F4E19A262AA773A4B5E2F83E514AFAC904 +ED893CE36C8CF3A4032D79B3DD677E49E40A40ED8B818D1C49A49E9135FD3A95 +CB47CA7EDEA07E1A5583B92D7DCBBA85AA62C70C7C79706F69C374EC8C9C8DF6 +85FFAC786ABEAB4C650755BF6B5D8B0D7C73E8FE45DBAA508665EDAF8FC4C49C +3A053156D255A9857272D167DE1999D51869F4329F336546D8CAA564C40E11F0 +9BFB24D7A92E602B520D2FAF80AE1F2306A6E4FF24EBEB2BE5F43AE99546F739 +2C1EB46C7E678416F973FD64C8F9A8FBAC24DDAC97FC3BAE905285ADA80EE265 +EDF710944473FFE82E0326579BAAE82A11EC1796F66BFBFD9D42B1F1844F146F +468436F1E3B101350A15961BE3ED3B060EA6EEA54B4640F9135DA9678B776415 +0EE9B4E2023FD929505AC4ABC41870A287913B41A29D4482439081B22E4C9EF0 +606DB52CB4E42B258E26E398918AFF672DDB8137A3D9E56AAAAFF283CD204F60 +1A7020497BF3AAAFD5D19BC5027129759552BCEB666025A958E3C89D87F2628B +B1CA120F99A5011E364F45524A30398A89324531FF1974064D8E442FB7F217BF +0DB02F38BDE00115A217DE0B6450DD5B06C1B4335B55DA1B1738927CD6C0FF64 +82CA6B57AC50923C38343853D1FB4F04B8A5A08ADE3960339D85271E59CD2AFB +2EB22CF048AAD9F50E5D79C8F640FCA9357AC2201E2F111B19E9E6D97837356B +4BD21586B4FE993EAE89C196D08C445A0936D9AA5ABE103030F5054173E33ADD +A3EBFA2DADC766577FC0EE7AAE0BE5FCCE4E28732905A49107201BF8DF75C2C4 +8EC78180A36420836D6909671E85B0FAAF3771EC118B6420116DC43983CF83C0 +98513F8F231E9C94DDA2BE07461E9738659913D3C7157269FD28A8B32CF11E0E +9548AA110FCC71B3F98284962854310454D28D8E38B37AE93433824FF61AA808 +5628F23DE58D64EC1A52AF495DB65FE16087D1F3FA0A36319B517B51679755EC +9E19706ABE12B8E0641336FB8F05FCE1E6672820E3E9C5EC624186805E4399C1 +F55F16230018FEFF64C51D5B89E6AD23D260551504393A9DE155AD8B545B4D09 +EA2EA8275E104F7BCFFBDFA9F8D4526F1DB9ED1687D1B74370F747B0B0E4B720 +CACD3A22A78819EC6CBA08AD1E7A729E5E42ED9B8D5166ADA2A94EEDE2627751 +336CF3F9033FF20CD52BE3F56EEC67E5B732998F4B1F136736987F4A2605A64B +1E95A07F5CB058FDFBAC5758E9F0252A31F72ECC06DF1053E090762D17AE84F0 +0424DD6FED7193F99520FAE01556CA67914867016AA86C1C72F87F5D843DDE28 +FDC16CDDD89050A337E455DCBFAF605FBDA91BBE7E3BF1E88005CE32291C52C7 +DC2B3640454D0C36C05648DBEDB2EEBB00F585D371E7B2A9F3B1B153E5635002 +25F859F46BA3CDEFE809C80B1DBC37438479DED51ED2647F405CFBAC7A429360 +4AD394586ABB312F3751FB1328B15C7B15FFD6B7E92B3C8D61C99C8054A33C94 +F6A9412EDFD6894C45AC431D1B29E2AE959D6B610A91725265C4EA7A865A64BC +CC1BD93DF0828E529C0CD5744644F08FC05B88A5D0AF329972E3B2CC2768CA75 +05DCFB2F758327BD961D7DB6C8401F3337D0A72CA5CDC00CAFF86A5A40BBDC38 +904BBF359700AE4DAFD9AF7B8731095AFF6F0572E857E9E8AC1C2DD5D74F5FF2 +DF3C0B3EABAE300C043FBD2E64AF0CF21ECB09A78FB62778C86E8E5A356B6007 +12ED08D19AFE705CE8E73A58136657E7357E074BC661681B4CF919B0B01B7D87 +9FEB2F4955DC17B86633EE72F9BC1277EF7D688E7FF5DA5B8E5646FB7A5B0457 +F37037F76100FAF3DBF4504F203F569550161D1B578E0E03EA93857ACF26C58A +B75CAF8E1BF6BE7DE26C974E540FA8049EBA2D17B4C7506EFD6E99B776A78613 +3A953BCA37768BB990D56A650C70D0805D21856301BA9ED1CE9CA46DFDA188C4 +F5C73416AD75903FBCD6D9661C4599BC07E28C6664C72606BECB75783FEDCE87 +29EE7DDA74C74E62BD1F1699531892540E34B795189BF088923E21E65976588B +A3E06B30DC4C62A4E10064F6D638CCEC9189A7BB33E8B599CC2AB618476D45AB +55CA9D497C2642B6F3326FC846AD02EB109AF7D9866B5988ADABEE994672085B +52C906A7F28343FE913EA90B9ADCA82FF8EE7A1B2F3E43687F4B420B5D551846 +3CDC11E099D8B0ECCB24B40C74DD93C5E40E9F3BB4814840A14A291191E95446 +2CF04B18F0E7DBA93BF4AD458F584FB02AFEF085AFC248263B12D76133776A77 +1343CD1E0BE802CF9D9A6FCD7F70277B10FF89AD4A78405C4D3C7C6767ED85F1 +20859187EDC5F026CFE93BF7DF4DC0B32D1F4660B5995A2A79A8FEFF93389CCB +93D00A3CEECD3B631015A56D9E6C5E30D36DD98E6CD2A3F6148940AA180D7E02 +4442FCA1EC0950FC292E35D3A1CB8AB4AA1EF85B6197BA950AF5D1CB94712C7A +57500E5E8B1B0A05D865672B098BEE02BE07A01B0A9CA67BF7766EE0EA5941D6 +823ABCC777162C9E35C8451EDA76E0F06E758EDCD0B65BA8AAB143C339D9E843 +24E12148C2CD94E6025FAB0093011ADBF3199D7EF02FD52A7DFDC782E9BB9DDD +D76955BF841D7A75D806533DEDAC7A906D6CCDF5990FA64F38CC5C22A5270396 +0A8C7963FF5830231D6BC7D0A18A9939B159B50E026AD34D7A8BECB7EDDBC6EB +00546AE102AA3D88CB76D9B816E069F1821BB2804654802E8EDD9A9ED2458D99 +C5C2D04D87174093282AC0879457510CC1A8EC14B3CE72B4207D7D35F0F74B8B +0F121DE6EE1A189BF7E076302AFA5C0A09BB8095D32F469E08575E6AAC4AB9A6 +BF82FFA86CC60A3A34D1EA753DDE232119D9A4891B77B9527FE9D9DAE34D6944 +CB9EAE528886AE53C91EA315E708213196A01CDD9A181EDBA37AE4C63A23FC75 +77C3AAB05987D3BC0A654BD9CFD5E6F48D8F4AEDC967A8C51DEE87DE9629BDDD +680515991E6D71FD417CB784E3EDE648DF8912EF71BF93E20FAE714E422792D7 +2B5F02A314191CB65DDB648898594B44A33F1252676DFDE978BD0188390120D0 +C0E5550B77CD3A08CABCF2FF5B62C59B2B6F95B8A2D8F3DE2BEF93E9CBC20CBE +64C51CE0E03300459F11451F42C33DCC1D361206A1FBFC4FE27A48F667892C7C +0817245326322B600B6C323587E7A07A6132BEF029835FE7CE5DDD5DA26FC5C6 +786FED8425EA1D113230D161A78BE519538614F61ED1E92DBA5A0D8B5B5BBC4A +D875B43B1986449AB67508BDB269D2549D2F794881556DD132E18B657D33C2B9 +83DF615A05ACFB843453E291CAAD9E2CCFC7490F9F6E57C934C5A92037E866E8 +3B2785EE6F10F6D4DFBC8BE8DC383ED4750E67ABA0A74669E2C53FEF09B69CD0 +9D14DCD5A8050AE52F0BEA66BF37B315DC6461CD782957A3A14088A7E4016815 +AC603ABBBB4E179862A20129AE3E4BA0ED6CE562F7BE1C8498A17CBD58E954F3 +AE82734476C567DA005C28510423C7914655D53B0CB094586A0509C190F64770 +C55D2EB3329FFB1D67E35D50533629DBD88986444EA470207BC789EEC011E302 +4B5CD55C640C3D1174E1EEC5F5A1E68FE677BE2D0D8694394C0563734E6F08F4 +FC35024975ABFC560C487AF7AC9961D912E620305A58907A0F7A9CEDCFC7453A +290C28E1AF0441419571546FCB5442A20674459E9E4E56D02D6D636DEB263A85 +38C63FF6F4F07EBAE0E3E204E94C4A56AA818FDFB54BBA54DA4C25A55C2025C6 +CB6483BC3B55AF578CB4BDC8DB58FF5463D1FCCC63400481A4C3CF4AF3D2C61C +A7ED38B6333A755EA1190CF54F7881D3F9AFF6408FE2DB0FB36321DD833CA4C6 +25816321DD6E830343CC5325331E765DEA567A8A1ECB8A7E54AE74C7DA049606 +EA4BE6A9E13BB0084093BA80DC98BD5E214F34ADC9452D4A9512E550FD4E97D2 +A64FFFC366896E8325A6A816D04BCD8BBA114F6469D3BEA397E35C7F91AC75B2 +2DDC5B9BD0BFD8C259E0467F5E874BFC42EC6ED7FDF043469FB69C9BEA747915 +778A99648F8F00738962958D1D87424F2667E3788E945895CFCA9EDBE7274A4A +BC44F16EE2A78599CD73B41E189025BA088573273DAA7D6A2AA19474AA29C1C6 +BD656548816750A76FCCD5634B7599362FDC9B4A252BD5667C4260F1116FA856 +AA4F363FC6032974DD19B5989D7D27BD59B8A0ED42FD9D1DD2858125583F28FE +A266081D50EEEADF0DD5096885D7DC706DEA8460D04D3900E9E081F92A6A1F95 +3EED1486DFEB20B3DBDFF252D0B2DC7EBBBD755FA3929015205986AAD7404ED9 +67AF080AC63ADE35132A4AD0E9C63C600326048179B6AFD1907C0912113199B8 +427C6196084922B5A0F5E1FA25052DFA4902BB43D349527468A9A8F3732DDB4A +AD1E9E3028B8ED4623D8D1320CF8A1E0B29C16DAB4A559EFEAB0D234A1A7D8BC +71B25D5CDE127BCAB2AE7E71A328F2CE9D3EC9D23E370A5E95848A00F2D1AD8E +ADCFEE7E929F666EF63CC9C90CA02C2ADDD3216C3BA79F469738D1B2B6349F72 +CEF3CAC9F4B4596771D6EC39E61B9817439F0380A57A97AA04091D75B7DA14AB +0B864A58E00B4B28F054910709B93B37AFE76A7EA777BBEBD9A45889FB52C6FC +FF985679C9607AE167EAD42791BD42DBCEB89D356416A38007220CEBF4A3203C +70DE5BF488A91278272E337A47CF8A5F12F95641AEACA5AB485FC5A316BFBDD9 +3052340DD5739FF1C1F850DDEEED70968EDB150D50D7A1F1C894FCB95F9B4CE1 +79721CB1DDC387073BAB999EF40FAEAF721B6BFE427276E3AB02143D3CA60AC5 +055757203EA5071D7730811D723237ED10B83B457BE6CB673B5BA4BC097C6293 +EBE8393443B750766B87534949057B7FC8265048A748D61C4B80F9109CC7E1EC +36217DCA2709BFDC1682F85E75E0FCF3235ECF266A78E859AC400D5D02ED385E +7E30492DF22D7D5B3035D2162DFF1795E7E9096BF30957B3F75481F31FA87916 +D25DFE1711390CEE845A3B7842787985B516D60A7F3636AE0D036A911771BA34 +866336E447DD88B6892A00BA6C017156F7D4F4E613BF163EA2F325998F046CB7 +5EFD1077B1EF7D9A40705FE2AB8C9D3200EB1E5903C5BE740B88B3A46C6154E3 +F702924AEFE30BA19D64C20876D8CF14877BE2F1FBA6D2A52D35C395BA35016E +8A9ABD8720C1A79360150242FB188AEEA1D02D7BD70D15CD0A4261B185ECC8F6 +DA0D3C23250D6B4C188D10D99F5B0B8EE0809BB20D0189D2E8B6FA6E0EF6E415 +890DC4E9F8252F6EE25830D5BF07365B58E0D682B4FB236DFBE36F32CC574B75 +9C997F3E74832510AC57C496D8F131F610A607246C31F548C859DC34CAEB66F8 +AD4A6355C7D04AE6876746489A94C750471DD1A33FDFDAB58BE702D1EA89471B +1E73286289ADAD1935BEB2F17B2EE77AFD9FB1E278C99F85C6EFC112C997DFA5 +66FC3238FF89BB840CB6B9610C983C24424EA95A2229CCD0D0B62DEA1CE377EA +B18709581246A060B6181D0A99144212DD9D4430E8B213FD5F37CF5EC4E11DB1 +E3E48223B990724D7C8561A9FA5CDEBBD4BD866647653F4DE6D794FDC4005D88 +C2773247A5D6397CE425E51B96C741FA01EFAB5DA86E5435365671E2BD29A628 +BAA80C56AF17B725BA84E5ACC005C658105162FFE81B5CACAEAE8F3A22209735 +E470CC97B04B0CA0A969E41E94EBADFE40684E0D018007D1267C2E27F4176BAA +B484A032B0CFD0B3977322AA298EB5A11ADCB2F154294FDCBE9117DD3FA00587 +83430596B2D432A471615ECA7789A6B01BB496309C8424C818357844F34ACEA3 +1B71F88E89AAAE14BB7EF728D75425CEECB1408334D2836A9F62D1B34A1BC9FC +25A43F2C69F01F3217BE0487563E11A9DEBF88C7655947F0BD725280348F9AF2 +864C611638D3B78B26785DCD3E05C47D297A4C6BAC0840C5E3C646521C7DE8AF +CE9CC7AF715F62AA0537E7965EF4158276AA8C7A1EB9D7D61C423F39CBD918FE +EDFE99AD29C73D106F7F1C3DCD4BDBD56F6E608846E32CF26DE47B08C53D3521 +9F8841AF5554757D0CCB44FA7ECD5BDD0C20263D097D9975E1C41DCEF4D8C9B1 +97EC5977EA0EFD9E405B429D451140105161EEA54D4632D6EC6220E28C7153C0 +307E1A3953DE1CEAE5D51CA6C58A15B69BC2528B1500BB281C7E90F40453A685 +A329867D17142A7D2FE906E15FFAEFE641EA5109E92FEE41FF134E8BFD57875D +D4F8270C12808FCDCEA5812812501F64EC79342DC192B20FB93A1A6E0475DB34 +B7A662C95EBEDAF862726ACF65393A719980839A9C05C705F251E6B46E276CB0 +127CBB7EA4C251B0672C01FD185C7FD287791019D8FBCCB391E9B9F818BD32FC +E61D57334FCB2266384D8FDDB094DB86E87EC7789A3287C1194827A38926AE50 +F6DAF70C2D3EB91238D87148642EB0693F7583F0D8D8E2B6FAB7DC139B06CB0D +AEA8C08415C14B835BB928FB81B7DE129A08502D89207B8673BEDCF22024BD99 +5777574A3495BB18121903550084E8FDDE6F940511F23FB95104E76E3846515C +F954431752CA60C08E345CE8E6199F1041855242A7315FF1ADECA2A23B7218BA +F7D895AAA7D5C49AD7EF03CF8A2EFFCC1DADFBC101895D17B0C3E102C7DA16CE +7BC977E49BC120C4673E14F55D00FB30DDFCBF592AFA42A887322F25C15A100F +82F5D3336804E68FBD0A470FD66D0566F0FEADAE76BE6A436D715BE62A653700 +BE088E4E594D99611E0ABE626A9AFCE2E7066B65295DC87B6A508FA3EA6C0C43 +2580AD8D9266FD81E825C4B0F908DE635B650613435DC700B7920A3B08BCD409 +69D7E559B5AF1E98D02169D4F2BC0CC08CF94FDC62D1877C823D886569EB5DA5 +B93EC5F0283B8ADC719A4831C107394919DF585AB3BABDCD98A63B153DF2BC7F +55EDD18E2195CCAC549C9B4CF3B91156ABBFB56970EB689EAB871D6FB5919B3F +21418C07BBEC9FFB2E1C7268290776B993363429B20A5D4C7C66D1B3DE0256FF +A3A1157C96BC1CEF6F6CD55207FE4DE2CB26E799C768E1DF47654968F6A708A9 +7F42E3A32DAB67EF6D16146793C36FE6876F1CAC18B409D5A5A6408F13CFB9A7 +141D3D25FC0027F6B7FF6D186587BB146DE91530B32B0F1677C48C28D54F3967 +C0E9C3619F09878D2C2A6112DF8FCA1133BFEA4AA87D358A35591BA6F402E7C7 +404A078F95D33AB26E0595B5BFC85D6D8BFDDE1297DCAADF67E1A30DE26D504A +7FBBAD316A050CB9FC56A10F0A6721E61E87A462711604C33044D6197C0A52D7 +236C147B09DA467579C62A09BBB25DFD9DA11773EBB8032D1946A35928ACA3E4 +CC94CC723D4FC49976F39EE66225584DC3537EA4138AF062951CFCD0BB9D5D41 +F119E670ED47DCC59E67DF658942835353783F571801BF33922D8EB886AF461A +EF66824F731E5E9A50B153195536AE96FF7F34F21598C83712DAA54B780FB815 +36880FBFD56675EFF13E12A8EDA31C76F6367B818089DCB9C25464C47EC3968B +AA0939DFCCFDAA0D60672A349E2E4768B386160EB8B41FC8F959D45FA8831BBD +4EA49CB9F152FC8D730216129FDA998DB38810CF886864927AE9F047855AE4CD +DD6BC5C4733B48C6614E9E9F7EBE404BA26E352CBFE1A533E9E74C78EE17A9FB +148B178F503B2154264C21A39B323D8B4FF8129A8E101949DE2C081E28D05DFD +CA2E08F44BE9B5663F331D34D47C8876AD9540ED7DAFCFF0216D6A50F7D9C00F +1591AD6FB27CEDEE703D6C3D9D024675A117EBDDC79DF5D4DFC7F201DADCA2A1 +72EB9A21EB33F5C8325CF8D8230DA66B6C7BC504386ADAC40C00E20BDE3B5F2F +111AF81049379BBC4712A78B6B0A33BF40512A1C42E3095323D07B0B85927AC8 +29EEF89786724EC48D30B8F2F26831BC7238AE0786936CE46FE7B2426A09D370 +460B950E850FA2D6710C50E78497C27E5FE43B7A830E67C5F28219D8B0BC1158 +0A2B02EB3E7A96CC1B6FC8B3DA8708070CE1C26AF0B7D80D83021FC27F0322F5 +2C3B92C29F738CBEACB1065948289EB43E334B5BF6FD7CCE82FE9DED9E3551D8 +1C4F66C9F9C1A3BAC534D79CDED98FB5A28F5E7A4650B4F3DC52058B619FB0CA +3DC70998B508CAC359C469E488B925685590AE5084C4EF8572EA48DFAACE35AE +B9CEFC91F38A26A2105DF9C3B859674F6B20F9B3A9B7E2DD2FEB80A899FD2731 +54AA5EC8D6107A55C59A9C20F2990B9DB221908F629E0E45E371FAA3ADE91879 +84479D6F3E3F8F2E972606BCD37276E9425B893233852201D8ED2D753B33450B +1CDD8AD735BEE3AC8C4E4DA651748B2333B972B6A9DC1A133E3D695D6C975067 +228ED6A4728729D0AB55040AE154F668A2DE8CE6CD5BFBB28A9DE3F90E358BF6 +1BE66D7BD0409D59A6E3430C2C32DAF12D55A8356E25B9B805A69B828B399F96 +824B96589D5CED4A9FAD83D70D12E2CF7C9B9CF34E3F55423F478A2B8FE24C6C +FCFD80E8898C26FE65DF206C2BE1C6439BAFBF809046472A059F53CBA38090D8 +E03AE270F456B2F63987F18AED9823DBDD39F8A175770C6164D839BDCD7AA732 +E63379F4A5C45E217A5F37AF8DE3F5F463BB67F57192F71AFAB06CD96B2ADCC4 +D9FFAAA11B176A5CCCCD8FEE8453579EE23F97143E6B176418184C0F3C004908 +38D73E689018BC811251901EC141705FC39D61A3FEAD3D869A1CBFA833AE9FB5 +659AF715D30854D9312919DEDD227A4ADFDBBC76851DBD3427A28B9C957396BF +6E530F570893A2056E53515D0B5A9FB44E16F26039161683C3F4D34A87E1A631 +7C262B4A9D1175C07239B87FF6756B5AEB02E315659D938B7E55CF59C35DC48E +006F444D7D17178FB459506521227674339CC9D1CC80C3BC472B026DF0A45F61 +A8940F2D6E9379B95F28AC3BA13987E685E4C30BB8F6BA6562EFC9D1BFF66E1E +AD72AFE048DA95093D064B0E692CADC6DA786221CD5655FF768B51FECA289395 +7062E952A0347FAAFD0C28F1ADBC0BB121F0AD038DA635D0AFFD2F1D65A769DB +2F69BA310ABAF715AAF91EC3C5DCFADA1235716A9F53A510EA3A3A21D1034163 +48A7963C8B12C1DA71A02EB87C2863176EFCEAAEBB5289568D37689921FCE677 +7D874CCFF1A72391F25CD922DA5A7B35A0E40CE40AF2521B567596DF422DE776 +A9DDF64744F8164F24985B081F0E73F43E43217BF0DEF9CE522CE604AB739192 +BDB8FAD799C43F17AA436B7CC97268A73D583BC579B95E56B2FAEE303A565CAF +5BE8FD7F04C03417A3121966B549FB7E7BE070C0B05A6961733D4F189B78FD41 +412EC99F5B7E841DBC5A7503E5FDFC10E85E2DCF4D4BFE9CE967C09139082FA6 +F40337731B9B6ABC831DEE16BB3DF818EC2B701210BFFC32CFA306AF069522E1 +C05F3A0A0F93E7251FD4D57FEF2211F79422C5172AECB8B51D1FB521924E43FF +54BA9A4FE04BCECDACDF64D00D736272937F9257492E90A83E064051ABAE4FB1 +8FDB08EC54106FB4B3289FB095E83299B57CB6276B78F465800651B8F7C8479B +1C97E0E31CA741CE73234440C0C62FC373006DA598E550AC386DC6E0932F46A3 +8A0588C3AD1B862FC14D9A8910574C17984B1127B6985C969729898A9197529C +2897CF8A077FF821BCF055C2EFC1948AF0569AAB1ACD59F15D648671E726F3F4 +2312EBC0E6BCA0F7B977B04020976AE645A5738401DF2D81720C4BC90D1132FD +7334F2C852838583465DB27C834F3F10B1237A7DAC5E0136BFC785759F29F5B7 +CB0DA5C01C2AFD7460F14E03A73C818B313824B23B1B5B7443E3581E3BC11200 +D55AE9E7900AC167A7D2F20935FD72F33B695F25B6F08DF95677 +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l047016t.pfa b/client/shared/lib/fonts/l047016t.pfa new file mode 100755 index 00000000..48094088 --- /dev/null +++ b/client/shared/lib/fonts/l047016t.pfa @@ -0,0 +1,1356 @@ +%!PS-AdobeFont-1.0: LuxiMono-Bold 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Mono Bold) readonly def +/FamilyName (Luxi Mono) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0.0 def +/isFixedPitch true def +/UnderlinePosition -88 def +/UnderlineThickness 83 def +end readonly def +/FontName /LuxiMono-Bold def +/PaintType 0 def +/WMode 0 def +/FontBBox {0 -211 714 1012} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078984 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83C82A2DC38F66F08FF34 +E7B34FBD496A97F0AE69763627499CD43525BDD2FA2EA9DDE51C821C26AC69EA +AF027BC54141332FA165BFDE024DBE6CD20A8E4EF56F52F260AEC28695FE9141 +7E7F100CCF64993650A81C0856688B1D101418D3B0926F70BBDCCAF43FF4B16A +B8328A5C459C7D6DD6FEEA1AD5049C4EF32D91C30962146E922D498E4D38D172 +CCFFA8F084C6BD440ED2C77C1B574CF8CE25AC39D2B18C91E596994081B36688 +EF1C949FBA04376ECBE32C3E29ACF83A8C36569C315CACB3DAAFC2FC8FF68839 +D9BF2A301E3E8F5B27EB82D8DF5D70444998F05B99D26AD632FC21A81D887E9C +80BDDB95A1C0FB1F43386515E0F2903E3623B19F363F35885143893761E54BD7 +C9EDB5940386C62FA7A8919B57E4A4F0D9F3B4A4EA82C071BAB90B57C7A0F553 +BEC3A57EEB877476FACBBB61DB74A76D95DCE4D5C46F9686AA5176D6B65F0FFA +37E1850A881EF057A62E3092D923107C691D32F3D619B05DB75B337EB54D5505 +2B7669A69A162DE45E9F900FB8BCC2BFB7AC5CCC64DF94DA97386D4E4AECAA28 +A9CFF3C9CE3031CC890E563F7A110D4690CDC5BBD49F7ED21C6E635952FE3ACB +02373DD80C2C653E01525504AC37C849D6C5F25DF0C5C762C45A83233517EF9B +D7F67A77881F6B46BE10E458FBDD73D225A6047095AB3B7AFE9FE2113751B732 +950B7865DE7DE98DDEC75D3D0311E902C2D7FD4A7F08F481ACB695078B930EC3 +6F3669F4E50345CE0A4CF1C739BD8A92BA29CF5FF0C3A85B687C0BC0BBBDB8D5 +DB96AF1962948038D1EC4ADD39D3DF966ABB57CA3017A28EB9B2148D1AB72F08 +899F5686A2013D69F6D3F5ACFB0503DCDF2D93CC7722D3F7D7486466F32741C0 +17F3D8F2D64063A9CBEBB462D4CF8569EFE4DEBE6DF3CD2F3C2AC955D8A20B1E +A0199D05C93CE0F92ED01330A7C9E65E7ACE079CBF7616F24ED2AF540FA4A1FD +5CCC7A1057ECFB91B02A84499F9209CE5989021F4D27B2B20D4793F6C81591CF +ECBCC22005F89BCD1A089C36E659BF3BB92558ACE98DBDF10F0F6C7514356F54 +5A8BD7EA0E326494BDE14D91C6C74224FCBB42FC22FF8F819AC8CEFF7F28A56E +A86FA3DADB388D04A015B0E703553CA2C2E5B688DD49DA92FD89107B744BDE7F +85986FC9C688B97C67C0C4C555EC943D5C6CBB8BDA89ECEBA41037A92BDC075C +3C2CC573B084B19EC7FF10FBE814B0226E216452BAF96DC3503218F49ED279D3 +CDC0369901B7764918E8071258114002152AD47B0ACA19066B5DDFC7AC37A6D9 +E49FC3A5C16F51A5B86663E15139A063C5D408C562951934700371469A49A940 +FA7074CAB31DF454BD990124F5E70B4B6D62DAFF949FD73DC758598B34376867 +3F7BCCB83086D6AED4460D71BFB2395A94A27CF34DACF70BEB4906BC6DC19203 +5512F6948158915E228603A5D4B906997D51EEA9BAD01BE45C36BC39D9C70778 +D6F8619B3814F7A3E9E0524C8DD61EC63E8B4E15C42FBBBDF8257442E5D2CEC0 +890F6B2476340387E8A4E21A09805F82A17392D2AB3CF3429DB5FFEFB093165C +63525A9BE659AA22C7FA5DCB894DCA8D1560668636FAF723B4F618936EE634D5 +EF823BEEC25B274EB5E8912BF186A537D3EDDE38F09801E74D5885919850F48E +A7A8AABBF6625CF2B0A9843E5D9A499C1047C490EDF9774F02A5CFE926BDBAE4 +18843FD4575E8634B27E536FAE9E09084D3F73FB29B9E4AC002E709986A90995 +B4EE10012F74A0BCFF2A6C0A69D945C19DF4F7070D60E3EF03508AF8793BD70D +5D4BFC8BF5A29B4339C799EA8AA64ACA925A37EEE489C7FC8A31F5131F386A23 +C63F7D3C6BB60E204B169AA01EA12B590B9F0FAAD50D030381CD0C6177D28538 +377F92029F2A448F7586C7B14BA5BA08543D8216E6875AD18E974B39A53B5D3F +157CACE3442B1948D2C44DCD88D1604D3AAF4487B4919349B7F0E01302261204 +50380294937386246EC4444C08955919A30118566A9B9D409F58255604A90782 +0583591C68296746D4DA1BFD0184029B73EC4C955C7F0BDCA08D8B85FBFA4CBA +336BA29DF59226DB39C3B02AC5A906857EFB7A227A09FFE63BA35DE73434BDAB +C11BE30C59E650592C518C0F533FA0CABAF3E2CAD23E69776879CC7A9225A086 +281FDF2C1F72FCA1723A5C2492BA061FB6D73F6240AE5708521AAB52F736863B +B05E53ECB5C64A26B277F106FF2E0C9699719335BD32842806F0F866CE4818FA +F61D141532738ADC2C8BCC1145BACFDF3BE1CFD92914C3945126847769D6DD0D +6F44FC9D966F224AA72C22D0EF953B2A43C93E581DD907B611F3005D62C25162 +FD2149DEF7894A112449FF5F43D8F30CD7DA81D408E85F89DA78C4998BB8A24A +38B9F346E5FBC6D09EDF332B8B7F8EAC363D0D01708C24655412AEB148E28D99 +D9F41076F0E7BBF10AB96BBD72FD05BA982F673D3D79270107C040707C6316E6 +11E4FB04A320621B6C3E10575FF97A28B60B30B840A877A5BEB0EFCCE0EF03BC +F247ADE0F509EAFD6CD7F70B523E6E145EEF8AC9C17614BE65934DDC17545C4B +50770418C185606C0A01B2622CADD9CBBB97E14A92D5230FB7ABE7D0D8CE9047 +F64225C6D488695FB9801EF4C76E20340721F7734AC114B3E6041D4C76C11F19 +3326FB3DE6CBF4B4C1F18B3388D6DDC000F04E195827F68CDCA2E0C411788B05 +4AAD40E3E09EDECA7817AE2B29316063C8579A90CF67D93AC158E940B14FCDBA +3B82EBE2D4BBC8A8B22AB531DDDCEF6E4104314DDC2DF028E2F09436CFCFD32D +0238D1C9C0404FD97DC627773CD8022632E4914D40283AAA5FFDF86914140D42 +0C4350BA37D3CD49E1D79081462E3701DC0A9E9AC67D712BF7CEC27C1200138C +9729AAADB724BB9FFD5B831ABABEE5BE8C270A1ADF85A246ABB9612F181730A2 +30B9886D897C2EAD9AF7E6A47DA049373049E5E4C29F5B7DCF2258A1AF341CB8 +C5F464EA85663A9B8132775E4B8620420750161C419F88594908C64A2BE265B9 +84A950C8B63C065B1FD4F78121F582EC875F396E0EC8F6851AB87C36C56EBE7E +036ABC0D89D9FE8E626646AC65DC5445EF3FB60CC5C50A5118F9F248FA15B3B8 +C8A88E168BCC5488D10CED157A8EEF8EEEADDA64372B76B944685B686DE8AFC0 +F4A376200790E0D0DB2172C80E6BF90052DE847633912F72840A5C745DA4E774 +014841DBB53EDB729DA7AAC1D3FA428DBFF252F91BDCFE3AC31C2CAEEAE29045 +DE7F0795D6D924180292E18B3955FA93DCC555683FCB5FDECA34EF0D0885ABA3 +C7BF9CC897C6E5737AF9448C952269D18AAA18FD1D3C2F5DB49D652F43E6CB21 +D22F7ACA596DE470A1264FA065C0B2CE3C58DDD168BD28D6A2FE2A41045F3219 +AE87AF49E363AEA5164C7107CDFEB8BACAF39C795D98F9855E35BEA4482F78B3 +8A62DEA5A26336671AE7D96AD413A2A5E98111D319AFF427420906C75D4E16E7 +AB85A37972380840CE59C78273A510C819EF376534266081CDCF3313C83D7089 +71BF31000698E853973A6D275A8F215677CE9EEC26B5FC21E481AB9C189C37FA +2F7E2A63B4286E1AAB933C0CCE1AEA78E1F7B9F7A16DDCFCF350514F1E671D3F +DDBB3CB3324AA85E9373060D2FEC1F218A06E4A1E6F5DA7E3B72511C5F0F348D +A221902C405AD22CF96C4A14F09BE984C710AE0472E90ED804C33BC2797D5F30 +F31B250C791B0CDCFBA202DBEDEF03C144D31D7431B7667F88C1AFD9E218A08C +46811F871812FA17AB468062FB0E478B8AB84B9C06208C8ACAC16E34B42E8B9F +747F8BBDAAE6736A5A4BC9C494EE15356CF6F02FCD2F52D4A3F9CD5B472AA89D +BF371F08DDF4FAD324B46BEA792CFD4E148E33CD0CD5C74A76CD5CB4EC885420 +AB9DF5D757C33BE1CE9AD32E6B0179C4C511CC984A5365E50E12CEBB8CC71CAB +572054A7DAEB7EFF1025B60BBF1ACA5C3A701396DA00C6F77E7B86F1BD246393 +1030F1B6A8D13F6A0D3FC3825DDBD7CE36CE55612D3516EC214AADC5ADAC59AC +054743534AC8068A67C09695C7D04341D22F5AAAC4086CF370583B93F417579D +7392D7B57928230688C7C5B1931E26E843B8FC5D2D5D09A3005C1803BEACFD54 +F5A8BF2A6CF7852616F93E05913D188AC4E2F9AC3F2C1C455B0F0D1E32D9752E +331E7ED9F777FDEEE5ECA4FA4A27354C1D5E7E388008D7C45456CB361F3E4D0C +AB08D54AEC00286398730911A5F145D7DDA76D696F1DC17C0965A4B0899E8B4A +7AD364ADCA31D1A0714ACCEBD2BB7FD77A4025EB94D4436925DC5E460EEB013B +359983AEF8637A929A04D9D5A963AE764FF82C42C62FB220530FE59018A89D0F +CC8C3E2E4B918FB14279F5D0ABEE4756C3E79C1CA70359FDA92487D42B7A2943 +3ADF2FDED43EEEF0108E7EC8778E14C4C0BD06B6687C08C1AEC415477176C892 +496E84FD5E9A7E4DB11287A9605F5F0CE1B71D3C198900C67B9B333D10F5F331 +CFC638F80E03CD59C5DC5862BF8A18B6ABA8435936A3E2406AE848EA94716472 +A726D75C94BBA07926745B20EFAC14EAC276B477B94FACFD9D664365B1CAAC7A +DB2BA6B75F4F83339CD645428F0A5F498677108DC473CA984370A7D6A9E295AD +AA68CE2D5B435915EB0F6B72A9F4D49E356050223F524A270A9DEDD0B8B66822 +C8E94A311C4A055EA18BF0292CD25EAE689C8F932226643B5085E72F5FE0A232 +6064C6850F189B2C46F9EB94966600A8B7205C654F33737ECAF9B4F3FB3CA0FA +44A85FE7A9AAB211C6B4062052C4C01685F58F0D2786585CE0FFDD1B348F2FDC +A19E31CEC44C59BFA74997E570EE0FD56629135F3BD7CB2B6466E2F031DA6E8F +11813E7118A232D38AA3EDC86ACA1328FB9F870174F4D1BF511531FFF0E23278 +9D29E817441F255261318894BB2CEDD0E6F8B3339D888A2C401D7009E7879D5A +7C6DF9C8D97C5221DC65181A96992EDF4C983DA8C0669F3D0BAA4DCA2FB17848 +F34F69182E6A129A983A1FC394EBFC31551185A750114B383E01E61CED8637FC +B4765F1791D121B8B1D08035B6D8ECB2856FDB43B25101444D160E02588E80A6 +10D55BA3B76B5B9C6B97B4C07A0AEB124459603BFCF1C50DD19776543EE9891D +9FAA53093A933077B5D3C0280679818348E77835C679C603F46714478BAFD156 +803B736D4CCB3F1C1FC2192B2EC1CF78C36FED5E0496B5A8F0CB1B72407BE183 +0BAB9171EF79069EC940B9B13F69F952EE781A811EA4A0A7FC8A5E5BE4FC60DF +45874393CD027EB52EA2DC1EC163152F3B74B7E7D62E042093CF3119F4F50179 +302EEBB352C362A6C2DAE8A251156664B492FB60A1DBB7801DB26476BCE9E78C +444040DBB110FDA2783A62FBAD6A95AB513B292920960E7F630CF7F5C2A5785D +5BE65897155D32CC657E231FFEE30CCEBFC00C375E105A5B613FD2C27A6FF7D3 +92C00B7E0BDCC70A6E80F5BA164F116A2732526B669E50F5F6BA575E37FDC9C3 +38A49BA0522EA697F517D74D533BA28F928565985AF5E32B84BAF188F2B9B952 +0C291440B04DBA34354177783CDD82AFB65DE0E179E638FE1BD2EB3EB20D5344 +C4B6E5D639DFAA78A77433D36FED5462B6B090E3434034B8BF00BF7EF35407EA +9F122694EBC6B6B4214EB779C94E6BBB04998AA57249B8D84353E0BDC605CA98 +492862A8239E8875A9BB5ADFEB966F0D7FCC355E3F0428E227D8B41945257F63 +9F6A6A69B7A902DDBE08D9FEC8233E11BCF15C1458C19F9E487314C26517D162 +9AFD021C75353FE5A161EF3EC7E06B616AF1447602483A3486788298AF766714 +939A160EAABF06B61D86CB02F6A958690D38C86BE7998B444B7A2B74C6BF72E1 +B9A59AB78D20C121D1AACD208531FBB2BE37BE529FBCE24D229CC242A1FA721E +AC762979A4B92565B6BC94EFFA2CD84985F8FFCFA1BB44503BF1265D52370C53 +4B445AEC55B12E40F05DF383B356CED44B5345007B9F3454950F12C8E87E41FB +72715838A27013F689D6B55925C49D92E0E14CBE59D9585BACC8CE5D62F86F27 +B51E89884EF529F27CF4C61A28BAAE981524CE3714368D664AC4773FF8B71728 +88C3E8878032EE246359A97DA80F1DED34DF09EE5F249B364BBA41BF81D16AAA +9ACFE092E3E491ABE1C40A53B1A50B88788AE14870079175C14AEAF7EE777437 +8F4A7A03178AAC032EB320DBD8E0C19C0071B262C76913B787E1B3FBEF926A49 +CF96ADF8E3BBCC3F679294B5DBB5005DA2294848229A557865E0116AADB4E6AE +94AAC10394B4FA2872BBEBDDC869163E50CE3BB2925B554235B6BDE9A29CEDB3 +07DFCC3D8AD0CFEBA9C7AE10314771DA1E6C3B927FB950ADE62D1FB8AE7A3CC9 +C9E0F4484D61A6C9F353B9AA91A186DB859385059544FC85C15E1A3357BEC89D +92AF74938D1B56B7120B934297A71F1D92E93658C69E7FD4B338F59FA6F6C337 +427532AB1A4EADAA5FF1A8C7A84F444F81D60557808ECF3DB67C052EAF4A9FF1 +0538A114857BBE83BE784E9865B00EE8B407AD9E2B65E402EE6CF733C9B31603 +25F2C97BE78D94A51CA51F28ED9E840F13057B1F21C30F77ED6FF458C8EE4DFC +493B64190AA9C8B22C5977FE16F31C3ACD5CEE976839E2456916EC66FCB30B44 +8FEF1B63D552E1B0F049C48445DE8C80F8563E9870134038DA5546C7E7E3A1BA +1879235D0F328957290810F18037833D7A83558C94EE9856D3D82A3AD00659C9 +3E9587751B5BF2535FA1D1A508FBF86DBF7FC7009E1A542150F8F0EA356689A9 +DAA05EACE716C3496D4D23F326D4634B24A419F483154FFA9B81DFBFCEB31624 +1C87449BC00AADF4DA13A25955485D0C7C5CB9AAF29E1940B0DDA19594A8F7F0 +033C60CA8C9057879F10A6116BE5991F332AC272834D99344B0E476F9B2034BD +EEBEAD5D1437C0B9E10DD38A002BCB01218A40844A91FAF28940BA11A40F2BAC +EAFD82E977AA41B4971C69E82232A5018A31F71C1E60F2635D59DC40B233FE47 +C29D0A2A906955CC69BCB72BCA6D80E9B84F06F618BA1C7EFE99A75FE35AE359 +730863494339E0F2239191B6E7C5E8FED2F43EF6B5789872128DC528CCC2D023 +AE7A0BC6F9C194E642F09B78D898D63EE3EAFA611DC428C24CF363F78A174C45 +8C3C91CA391D7F1AE652C2D81DBB7F1A5AAB745AB08EB93BB316CCFD7D353023 +4B7CF322F928CDD5A413D60669D062E5C59A0F2C1D6BAD36CA9C5F5D50BF48A8 +AB77EBE65D054FECE72D08CE3A0C1916AAB4202D5BF4F07998534C1CFC49350C +095D98A12E1E1E6A5BB2D3F3B6E6DFFD926A647DA7DA8EE687AF44DDC9FE4A00 +18D679F66287FA26D6AE4075E430BE22684B42EF75CD59AD72C2E97383D5AD52 +1867C37AF8855A4A5428D125DD22AE0B2757781A80EE7D425B7271AD95B96B81 +2092E92DA4D04D9E711AF88292C56E35E7FD15C0D12BFB7F244BF4CE5B589CAF +89807DEA042EB5CD7615FA6551DEC1CAB933A6218E08C02443AB912C915A5E95 +DE3E2B66C64846F9FF403DA1642BFE9F5FDF0DA4BEB832D07FE6552394558903 +82ECF4DFB28B7E5FED973A99C0AE3CC792EBD9E7F53C84783AECAC10F9AC8661 +F023093A9F37141E27811C6B33FF8614AFA7DFFEC2E01F0B3D60442F6C62ACF4 +7274D7F52AA594A3A096EAEAA2C161FCB10E0AF00ECBF9D7EA6A4533B7F8EC31 +FABA55E1AACA89E5D02114E7FFEBA84528FEFE356A48090A59AC39F358FD8800 +0AB1486BBE16BED95607ED284CE271D6D9239F3F23FD403304C19E3132E2F3F2 +B7E1323468C66444B2E296E42365A9276FCB51DE065D6196CD4ED0E45A096DA3 +C45D8DC05C009C1C335ADE0D874F714C8EC74121B386483D2E67B8E7466A8ECB +DFE911178ACC242FCF9DB814498ED313CC6199DE67133ED4EE9253C6EFE87DFE +CC9E4C6F2950F1F9A93834BC359215BB37EFFDE944344F922B2AFD7723A45F44 +DEFA4E344C6E8772EB6F9D89E850E853E8119860A6871668C8A062869E15EE11 +64EDC397E138D823F520B8475FB6703098E3F779FD6446B2E2B27289B5D569E2 +C2B5FD00FC05A609572F57D14801C5EC159423E4B0AE61ECDA938424F47E99AE +BEC534EAEF22396119C3E79AAB1194F71044A8973FF94FEDC317CACE3FC26E25 +8514B5C039CAD5B2E83C049D31C135EA4BC2167C44EA92AF8F45BB777BC56EAF +BE7CB54F02AF2263EC1AF29C7E8D548ECF88BC262AA04D6F7DF26E5EC5E2919C +52B5A8CE42AA960EC9CDFB35F2DC8FA31E0DD5FE5BC18A7A5FBAB0A509CB7451 +DD4230D95D6ABB2B914A93F42D0B17AC931E4814AA939F90E389EA9DF311F834 +8A0A1A86602B07EB1CAECA4178A885C11CAA3710B6DF83DA05AC6169364E6EF2 +BB75559A056929BFDCAD8C30CE83AFB66266D24D308A8A510FF245BE51B49A0C +C608B08EFB13973C7BE9CBBC46838DE5BEBA093863CC9B896C1761E6DABC0CC8 +889BA134FFDA108C9B101AEB88E18B52FB151DD631ACB1CACC164306CF909452 +C967430620DE41E0BA22C811F5D6D728781DAA43B2279C9E301096D58DBED1B3 +EBE39E8444AE50AF6AD2929AC1C2FBA27497A0AED80A72D515403B46DDBEC309 +7A8F8A7E1D840E4D7F7FF390A0176E85D09A5AECE75D167594FA3F7C670068FC +31B055894450460F91CF36780916C17E8644C05EFE80D525B2CCFA1FD1B5FBA9 +2CA3A87AEF0867E8F135086BF78C43BED284339040754E8091EE2FB26E58DCFC +9025C55C286E99D5CD2B1C0767F1FE0D89BE87146C8D9C21118267CA2D9E15E5 +4DF80A9E709C6E4D284AC29AB032FCE2AC173A4381E47FC8876716DB39C63380 +E0D5417D1D1ECA49D5414E93DA59754653498A27B796C04CA3B3DA37D326EB09 +5646C20F0CF2D34D45758CF49BD7CFF0D71294BEF0584E87D06D4C069A7D9256 +B5AC4005F524A46A97574FC42EF2F0FD8382C26A385A3437FF85525F80711A14 +B928853A5DB29B64475D06B1CF33ED36396BC1FDA09B35E0857B2424584D5E9F +A1CD56B852D910C67EC88AB907BDD4F94A6CDC9FCD1CA1ADF7D2D3D3F4C8EB88 +EDDB632D8430B157546038CC69FEDD9FBD7E58BEA5507520C9D55910A656511F +273BBBD804DB9AC2CAF9D0D02F6F9420C7E3974B2A7C57D74B562155FE7D1679 +904503BF008E32DE50A007251D27461F62277E50DE498C0432B48F3F8AE9B589 +919EE62872BFF2DE14850773B86331895AB20BD96412A52E9B87D06DFAD62EC4 +ED02516D2FD8866B41140D53B4AB65DFABD08B96E7FF634DFAFFF3403BB6ADAE +947387754DE0337BEBB7CBCC8CD4D0BE5A2FECC73DBEB5A3684979939F352E06 +CB07BBDE49096A91872C1B77BFEA8B6686354E53009577C2AB75BA32D9E6A6D9 +1D2324B105428EE06BB04B862127F0DE5A849AF6647AD7722B86E1E42C58A940 +F3A7CE22C828D84B84D80BB7A3AD87E1A16C2BEDC68E9E3ECA734840614E1480 +F70C26D8D185830FE5C1B2E6FD3AA633E5F856A4496574405310C3FD709BF92F +23353CE76FF2C5D22B5345C3AB129F107D478063807E9EC522EB4905F59F72C9 +31012EE90C7A4412D01832AAB0F8B0A84C532ABA1F6EA8EB84C91F16C5EFC2D1 +3A9C2F5DAEFCB1B00936DEA1988049FB1655BD5C1912399621DD755D506845FE +A59C625AB92649383BDDF1CD48B33CBD8E207CC63D7B4EB314354F5609A68713 +5EE512AAFE98A7329AB516F89FBA8BFC6AF3AAF189CDB905ED3F63F479CDAA3B +27A384522D571226623E887756EAF7539BD2FEA33ED6A30656A3EFE0264C2E0C +44E065EFD20E0961F86B2067FC7B60A3201F789E8712D79528CC5449D8A4BDFF +A16F13C8E077A259CC71DEA56691BE117BBF356B78074CED1F54C9E16DD2CE48 +501444BA0AF54B1C84F5415CE7863DBBE37CA30688D5B6542E9E743F8EFA5A46 +4F46FFD30F801D02ED63B52C6C0AA0750FD82ED149C8D35DB524C424B2DE7D17 +A886FCAD0D9A0EDF04EA5C4072ABB8D07A6589E9AEC0C9E1933B94DDF9350751 +A6954226F040D8D13F7F34ABEA21CCA64D59076F61885116C307A95E74F52324 +8B1E8A05358FADE97BE4703CE7AA80047BD200F59F4CAB6EADB05A892469C4BB +3816C606D39BF8B7CD0B69A5CBCBAF35E7C9670FBD4CF8A5E11ED3794308568B +174D42AA69F3FFE58333619BF448FB0951D9E627DE153FEA9A4F2312EC701C2A +9915D9434205857AE251095E8E856D01C4F1CAEEAEF2A7F2B974F1C27EAD3976 +7479273E36A7AFF9D4EA352ECF7642CD0CC31982D945EC00720286E2ABE0F9E1 +199033AAA3F9F0142F285B88B091E01249472F339FD8A9BE3ABB16DA3DF606E4 +2467780732D6CD6C20101FDE86391D4CF8BDCBDC0A112E9339FC5E928792B62E +4FBE7770C4EC526C4F5CEAFD25B3E4D1A0B4F06B516971A099299D8005C9231E +D06688D4AAA4550604F7D1C9294B74B159B6B0B15CA2A5395EF6EE355E59BB68 +DD8B01A0CC19ABEFD5337B00E8079FBD5E5CB3188C414E015DB57FAAF330FD45 +E62887ED507092202F32CC49757032D13444DF1F619FB561379FAF4931BFDF62 +3FABFE5B949829267190F61A4318678A07403A5FD9FC8C2F10EBD819D6EE9C73 +EE3D852B1DB42EDA74C3C63EE61762EE0C8D5582332AFAAD3A3BA0B5FDB17836 +9BF11422BCD69EBF2F11C67780BF0533353DD045AA551757111F11F4FBC067C7 +84486CB7A486B602F9D7C56EF84A804AA08A740E3BD2D647D1DCE018B4D225BD +DC9607D21377E450CBF76AECAEFE4C4FEF2F72A4A44E90B28D2F46FC8E549C1F +312CBB690F9D96FBBBD77827158FB5C2DE80DE51D17BB86A4E634EB917ADAF1B +00038B6028D3FCFE6805A72DD10B17C7A434C68744F19A260BFCE7C040D1930E +B4B35E0A3A8330A6E197F359CCAF0EF03502846C784ACB3068280CB7D3095977 +9BB914063E289DB7BDD5F8D50B9D8B64A6259AA947FA3AAAF20FBEB3B020B169 +8A2A68D6C899F8CE32BCA97D75E9921883663DDE2735439F8BB5B62BF61463AE +947A0E4862D480D9197054727BA1C1D3E34A0310DC8D30F24AF051A384D5CFDF +4DEA1DC83277553715A026F0B676FA651D6036886319455F265C4AD78FE72B41 +9C8A0B613A4FAED194DFE836C15F10E4EBDF0D2779B0337D54628F4CE0EB0AB9 +2D67DF7D287D233815462CBA378BB4D05AEA230DD884BBFEA756954EB0A6F304 +5169129B2D3A55D3ADAE8017B3D9CFC5687F2CE00BE59D084AB6ADDC8D8DF76D +B9449917623FFB4F924EE1BD40A536E1380F22BD07260D3BE827E62220E0FCAE +E21094047696EC4378722E62F696C4FFA6CC92D1D5F719E472CFF99995CE95BC +7D3BD9A6172195243343868EC7FC4C51DDF43BE6649F096C4DDDBF6498BF6208 +A7FD124B9D7CE06E89C45EE3162C8505255DA806684280C4A7487692862096C9 +ECCA26F72DA251733B700261FCEEEB7DDE3542FA852B39707044F5E34AA80AEA +C4F54814C72C5480AC15478E28D7898557F7FAC89720BE0C02B726F674ACD9FD +635A87EEB2BE08765AEADD636E261625FA9E93E77D954E5DBA6A2A75D431879E +5936B3E396B3E681F393669F20884B1D75CFA3714D967A7C6DA12D31E26FC12C +96CAADA06D701DC45E00C1903A8D9BCE04B19DF613B54AF7B6DE33678078C03D +F1B0C31A9B87FA42FB434F105633C646E2A45617D8352BA18F5F9EFA6DFE5A0A +2FBF4F79A0CC5ED15F8B9EFE6BFBD2F7F7ACC99A7162F1D0491ED4208F2A7E23 +1165C3D65FAE7B3513818BC46A9A2277100867AAE0DE763FB6C7319C933F92D1 +4A8F8B5B5460200FA193805D3972F18B4B3DE7398F8C0A4462EB53C54A4CA42F +93E671584DFAF63AB8B91FE0EB29A8E525C1F137E7673F632B0E1E3864E1AA54 +D22252FC1EEFA76092E85680AB35DF214E761395744BC84E03D6F2E50D15D1FD +6B0C0914E661159BA887B856C49C04993C4F3FF4530F45CE0323752EA175F97A +F4C5CF8E8F103FBB38295D016E639C931E1421762C075133DA533E5F5ADB6CF6 +AB5BB6C69A761BB71398C0E1C15E112489367193FF3464271F439E4ACA94F47B +8855971F042AD99F97B049F6D57FDDDF401551B4793C4217851444D674E2E61D +98D1D55CE1B7B00A82E16C25766195167C01E3BA58CAE1A5675B4E9DE80EDCD0 +96DB71DC7C2E8B147A22E683B900DD3EBE402F2DBAA6DDB847E5AE7D0D95D4A3 +0E5EE6E1514391A69ABCA5078C96E0895047D2242316792BC99D59EE40293A25 +AEE147A96C9B8CE778C4ED454D1E1BBB351966B1684FEFD4A8E707FDD5EC675D +96181FD81641BB578C486A0529FA2EEF184B0402BB93BC400B1A29DF5ABBBB03 +774499655178A19FF518E5241C86719B1AD5C04A0775C0620F23BF19A1DF3864 +9219F74D06410CC1C85DE0E172DA953238F83BB44ED46C37FA1841D2282D16F2 +5C3C9D3A3897F880D49BB65E9A12432F517175C2F3F12C5F44DBFF1094EA2CF9 +0AF10CFEC825F1DDBE0331DC70EB7AB9736DFBE1D6C3448B5245AD469DB40B64 +D1B89F7E083156D3B44E7C27ACBC411413D69D515FE03C7EBAED6DBC7CB3FB7D +DDE6239F8A21E6329C07E0C601D4B114BC3964D921D3C15BACAB7AF7EE202B20 +3FEAAC53D13F088A932409337991D5CE4D4D55FDE4D515EAFFB5E47ACA6207B2 +F059EE7A93965F859AAD0EEF2A6FDBB45408834E885747349244741526882DBA +7AA940C038AF5D0909C1B6F163CCC5A9601E6F7BC13AD1DE6A699100F9E2BC5F +EDDCD46C3147E747C6D6006C05988AA402A7C123F015A271C9199E3338B7FD85 +B73B31611FC6ECC10F203C91605279EB6894304A0FF6B67A7CE10BD48E44C0BF +04395105279961D56E6D3CBB3F5ABEE1F069FF512D70BD9C81BEEB62710FA967 +2AC750075845E2EC4B7826F170023D7BEC4719EA2028AAA3EE91D3E212DBE02D +53CDA397F61A4CFA58543FF5A5AE88D410EABEF0AA0CA8170AD71922181CD387 +96ECBC28C88C3199618DDBDADAB8FD6B87621B731D91FD6DCA973F2CB347C2AC +110544A352FBC02B408AF4475AC4A5792455416A6E9184C861B4EB02F6D565DC +EBA2A752C0C9EEF51CC5C0EB286ECEBC7FE5303AA411F14DF5B569A271BE0650 +BA2061861610C64BA81442A8C98B5334CC41603B00FC7D49CBAA7E6257EA6F13 +72A7FB4FEE1F7EE3B6226D7564B105D7902B3DF2BB43286B6C71A5F70A67E926 +706F301CA4CDF22411A6C91BA7EF405FA5EECA8865E2A12290BC2485714D891E +CB9EA86E36EF1C7CC6BE96AFBEF493420FAB5195DBE4DC80BC075C17A1DC6565 +AE1949B72A9E26D9E832C08CDCFB37B73BB0C80C452EAD2145E1C217A53C1E43 +6D7EB4F6D035DD6A6852F33E561043F8C9ABF09AC746E936B522522D1B5A4A70 +7A0566D6F3BF82A29918D3C01EB69EF77776236EB876853CD9C599D81E0ADBE1 +F909101A47927116919FD881015CC23E7280DF2AACB0D0D442B337952A691393 +7A7D996477A04A0A7893B22E6DF75C912518C0E80CC57D2F3011F7CA639FCD2B +5B69DAADF0882629EB56CA6823680B247C5131EA52B097977AE71829EB7D60E0 +9190E3B34BA4022932F24166659795E75AE0E286268D84F7D57F1ECA608EB49D +04B7BD31A76337C487DD156A131BCD19154ACBB7C36FD5E11FD3DD7D57684E4A +45861AEEB590967ED45ACC06D360188912A89BF7F01CF4430DC196B32F29414C +8BD6A961882B3999A3EC9CED31B063AEA557667AF65595B67ECBA01F488FD07F +4684052C4BAA9D038B4CC8FE1C1381083CB1A2F7DF95A213C46A272C45F7AE94 +47A605265A776BB5B81CA6A87875B3BF33A2E055F54E73FBB3FBC63CA47C64C8 +21D776FB9AD5FBAF9482E4A24A556B1C1F92B3984105C1C466B340DCEAAB9A41 +7869FA344F7AC673AF6D49752B7391260762B8525F43221A86D87FC74EC3F92E +BF23C1F2B04CC63F9751471E3B399B683318762DA5742988FD122D1263064645 +079F1DC46F7F66039AE0B9D42CC2B387C7C47758426CC1E35A249DB3875A8466 +198155C887D5502FAF403650E6E336CD5366FDA28662B818BF5C5E2BF484E207 +498C3CF05C037BCDC3B68D0FC718D9EDBEE4B27CABFBA52DA116A60EB766AEAF +3D16F3DBCFA065720704DB80A7045FBBCB219A4F679179B5B7E5851A4CBAF2E5 +20B4FA5B5382EED902E6CCA8EC283E2B39726C5B79AA72B45CFDF9E30EC4D5CE +7FFF76A90F2A3EBE77E017CF6418C4CA1E6DA141D974360FA597273013ABDDBC +A340524C822A2DBFC5E9551D79745595105EE1FF49A6A1E33516390A2C59FB71 +E394B13481C5179DFBC6A7E698C0364D93A8830F2BDC3C7B4B603D64BB53BC7C +67270C93AC504557DFA97050029D6D7B85EDD9719CFF04581004BC908B358FDB +6DFBEE6183A0F7AFB84040299B04C560ADA8AED59E43C2036F6DA09F3044A781 +DA12A23145719FA0B2C6AB6E10CFE84D8466BBD176EB17B5FEB793A917B3B604 +271F299780A5F33E212CE334756D9768339FE866DA429858CC7A6551B192C80C +659A3627BB903D74E8ABC3910A662793BF0BA13CCBB5361ED6D1B4AB6AD299D9 +DB7CD8E592D2D3D9615AEE2BAA6E67A46327E29298B0E91DB801832D66788D18 +47CFC4A5C9B8CD41AEA2366E8D7D19E605D0474D6A2D9C1AB44CF5CEDFF9A678 +9B74A83724CB185EAE4A58BDD2ADB9941B41640EEBA42C3E105393639D84152F +8E26E93EF7D35E028244785683C8A4D59566AB8D2FF2906C0BF7C4856AA9C3B9 +E000677FDEBAABE33B23F13077EA25E1699519624C03916E3CC0136CF3A3A468 +F328D43F7BD1C6DF305206F302936B12F3529421A81D0D5026FEA5B811029790 +42ACE0E4AA1D401D15B283E2959F3E130ADBC3262F73DD1CBC94EF659860A2DC +1D9ADB113C701867A4E62886C63FC43BEC3461205A37F1307061C62EBE4509A0 +24A95211B890842C00ADACE0B75EEAD4031AEE5EC113B7303AE4C42D0A263021 +8882592E518CB3274E367B937274A5F7FCC9F6E9D36B83784C4E17888FCDA3B1 +CC0F9E41246CB830D282370137AC001D9E4ED0351BBB39DDD7F19A78FEC3CBE3 +B875543006CEA3BF1724314ECC6AF4932DD9B5CD64A91D5A72CC2487A2F4298A +34A1DF796D1E32DE2A7F12685B33992F92886647B4CACD145FDC35C5C8317DEE +C9F58DC50E135F65B1A0A1862EAE22F1056EF92A2ABACDAF4A701543F274700F +4FD59D4033BAC20817F1C97B41466ABDAB3AF22DC3F60A5A5C1096A2ED73E84D +F5ED5392ACB5FE5027D0C3B1D47249D809D5D7C7FFCB0AD72C6E54438CEB4AFF +E7F1C42D158C78144B7073B8A1AA4AF5707CAD9E9EE68C45C32B1F2B2C876624 +163DB24823427080D1F81F52BAA3C0BDBA113AA6F24AC2F01E7E70D6F7754BC4 +BD2DE4C46D398DA4C94DA7F8A38AA2EE20A9D124291FB3649DEBB4A5476FC536 +56E85EBACF09E3B129BD41748FD8972F124DBB5821EA6BD7F26EE1DCF086D847 +82D0C7D60583B1424EC98A3B436A9939ACD437CB3B0F5DF18B4BAC9FB1F4AF87 +0854FE355E5C8790F5A5BDD2DDC835BF8FAACC22FBAA6589E843E04C2E8FE52E +AD35EA2608BBE0D77184EB4B4D211FF2CC58D37E3D7638A57551D4961F9E2264 +A7DDC677F263450D357D482B61D91D2B1EC15F6DE08864A5693707AD46266ED3 +46C1E5C8D14962B82FB881FCDD2C2C20A1AAE200E39FE74E8CAF7E396F1FCBC0 +5A0CA7EC0D2FED67B17DDE349A72923D2692B565D5B752336F4F49370878AD9C +772386F42C7E2FD66F4B8C9558F9E2C078B7D140A5E6B0D8C48E5F0196CC5D66 +553EE79C3596349568293464FC361AF011F8148B47BEB397A4F8A0552E416F02 +03FD3967E0AD6A928DC1DA73488D2A093E7D587A404F909D24A57CE63F2EE6EE +C945CFB2297EA4E331F41A6B8F67843B61C9226FC429EA62FDA4F91C98C4D7EA +D2EC09399998F08AC9C2A3602018CD28B3411218D90A7BD6A310427EE54B19D0 +2FF1A39B7363D31D6BCEE6394174BCF0CAA755B2EFEC05B962B7E28A73BE0BED +9D33189E82D125D4EB6E5CB370705430B78324A079769FBF7B4DABCF305924AD +1A8559ECEEAC4D0967AC739420C712B213B9A84C5D930A7265728931CB35C4DB +1889EE886BBA68383E8926821C7EBD13CA2AAF9BE7C5090F9D301AAFB1001C75 +C52BFFE1B81E7F415C38F560E902653714B853FEB28125DAA168ABF2EE66B6B7 +E4C0AA21E4B936F9F757188899EB4BB6AB3D708429954F706B12D928E264AD64 +1C4AB1A5C4D209D757DA7857B383FE9AC3319A9380603348A700BBEE4849D9A4 +2D7C6D49145FDAA73074B8F568BCE751C0A9023124C71F8ED7D8CEC4FB01E841 +EDEE9C56BAC00DD17E83CDF905D1B8667BF13C3B8DF717D23C6676840A152215 +ED17A14B0DB3602DF9170F979D8098412345BA610888F3FE450387CC46D47FCE +2241F9180024331FF12D713DFCE680F167E8AEAE710C765FE0F791C065DCE040 +676C53C797AE7F26C52CBACB82AA12DA9A14846EAA73A6F0F98A628CAAE12718 +A9C30F2B1D13A4FF3BAB73CE32593FD459A9ACC4FE7EAC78E893C9A37BCC8363 +D8DAA0049F383F1848F037F0250F5D9A07E0D6271F771AEFEA2FDD6E298DA77D +41CAC0CBF6871D2D8891B297AF8927D33D6E7A16974B97B7BEE5FE92ACFB9442 +3DBFC1A323C2DECA0AABE3C44C4E5FC67E31AFA32A2E384F9A158C5F5A7DC04C +C6342B7D88308F4BD0C813A8A8FF6D44E8B6FF5073F11EE1FA41FBBF07CE8E72 +CAAE5FD345A00CD4E0DF5B80A44DA6A11B271CBE994935937BC477AE4862E0E4 +0F55BD2214CA9F7186885EC69811F821109428BB851C01D1FB2F38341408D262 +F5DDC76451A7C107A725B609DC363270EAE8E75CF6BC1877F2B2BA1455EDE408 +159506B7727F9ED61D807CB758C0BC165EBA7C734EE4BA55AC6F42B6BB930FFE +DD0AA0A34F994AB151BA1815BEDB828AA1BF85DCFF99404FE4898548F2FD6DCA +E1A338E6446093AEA135A75832AB0D268A3B56C8C20F29341CE6A48D5F5CA445 +91CEBBC1E344CED028FB823437CBADEEDA3B322077A05573D60D7BD016240153 +6C28F065CB849F8CECD24377C69B42B00D01D388363B99330AF05226758AAA2C +B34BACF2F63EF54FB718B001C5AC90C9BD85DE8CC38398621AAACDA2FCFE3784 +B3257A9DCB63773B8B99076F2D969C0D7AA09478DCA4A6B3F7D8D95CEC5208CE +ECAD3A540AC0C067733557B5134B7DE5C75D2B5673CC9E3F08DE0B9AE76C829E +97E3BCE64918E5F1687046D0318EAC32659629DCB7CCA135A2A7B450E14A9A1F +D89F5C9793A4FE2AD7719037418ACDB24643ECD71D70FEC1D529A87B89847945 +F4BB9E9919386DA70484036A926DC3DE7FED1612C4B89B701EF4409979CA914E +5FB3ACD50E15AC6B4B22BE79954F45DB6BEC4CF3670414540C7F394BE2CE8F34 +1E8D02282357B6BB6DCC14B6E1CDFCE52FE38BF7FD091F44E3309D88C2CC2014 +3AAFFF868E201F1729C0303F62F5E21EF7581674C46DB63F615A57C4310B5F07 +A591A293340497C59D73365152F4F1ADD62DF144C0B2F4BBA9C04819D74CF5D6 +E5DED166D9065438C89ACFB14744EEFF77FF21A5DC2E60F8FAD10DF69556219D +3D5039A505D5DA8A35EE75094EA3930417E7F92BBB14C0948D347FAB53BD7077 +3FC6CC7EF5541D2082507130932FA415218BDD959004B5D1D9C6AC7A6D62AFCD +CEEC5F43688EF251A1D7FD4A9DA3018ED9A63520C0A0E4910C2D5B2F9FF03712 +EF45FC4AC93DDEBE9E1F434EC1D86938253F736F7991FA0E20500961EA080DCD +D2A9164A8CF2FB7546EBB59DACE8B6BA5F9438A8FE29223341EB1B1592607BE7 +E6E7FB761FB4B198F8D346ADE3B6C7F31192541D688518969AAF7C2A1EB51563 +0A233BFB89F1C2F8736E89A46DF07D64E68CD0F58CE1D698675E4A3F504F5D63 +E58854608EE83814127A760695FF30281D2C4648D5808C8C8548854474CF2F0B +94E15450CDE2CA5D5CA333BA71163E202F54DB4E6B3AFF1948FF2A5758A9BDB6 +9F004B02C13211A86F6B382A809BB726A22AE41C4E6210B61FDE76D99A5E6890 +BB1C522D0DCEB8916506622083567680F405E687C7FEE05577A8E7C02B30161B +A775FE0DB6168AD93C19B83AF6E95761BF57EF046642FD3C47CA1EDDFB426533 +5022A78E85A91D86F3B78E463B01CC30807204AEBC0E622B383DD5E2A093188B +62CBFB1CDC759D4FD7A66CDE922671D6F6F2122F39DB3C4CF73F3E16C1003688 +21838863DFFFB77EED7093A1B22CAFF89443AAA734B788F7F64BEB8B7C6E9579 +0389ACE038CF73D46AE11F9D653820FB3EEA99144CFDD4C6A28B3A86621F664F +9441664E4B2EAAA897F0FC577344FBEF2AE0AE4DB43C0CF12CE089AA00D6925D +BC8537F52868FC9EA59DF56FBD7AFD6A4DB12BD17E4B47556DA97DC1931AC87A +38A1EAD3D3AD8B462C1A76F830D7EB0621CC8B4FE740AC409EACC48BB7324B92 +1F5B2093F0F6575E4A903E2EE134E77874F70DA87C073FEE5191C118EF6E75CE +42E143037A40F8D5B5C92C55B497C134B61BFCE61D8E7AA93E66F74F0BC2F725 +A8BFD5795BC47B0B46F526E772917BE1FD164181B5731E27CB13D8DFAD0E8D9E +BE4436C6921E7AC96953F20CCEA3C2E6450E51FB088E16DA8DF471ED8AE84F48 +71433349B7EB58332DE9CB7126906B6FCC08CF2047D39986D4DE9BC1B2F2FDBE +163C73C9DF62D1335EFC64F38D42E2E4EE9A422718174189082A4E83B5C5D04D +E34ED308A2D7F8907571A40A0BF77B4990D7C1BF1CC0474C0A41876F2CA0633B +42D5A037E87BB056483D0E88298260265AB723B24DDF8E4220C8E7F3E681B883 +E94EEC6B2E77BF249CA69E12AEE9E03569D6E99D63FEAD2ADA9135B62793AFD2 +B7CCB2CF2D1144BA7FB613F00C6DB9736720CE1BBBC49AF359FD56F9E98253FC +57E2CD93BBDAFDA1FFBF9A33E427B37B333BC48844B9F7A757398D146133B416 +58DA341B54FF74D097DFB950D0C850E11D85522BF8D10BBA53A99117CC4A4B72 +A1636FEBD444F0D61397039ABDB39CC4D969910F46AD2EFB671C05C66B0C6FE5 +5FE8FACDACF7AD619A44B49800B287170D086BCAD5597BF592521B51603CF4BA +A286F141942C67471B47D67FCC581CE2F96D3C8152D4A86F9BA90EE6D5F06730 +CBCAFFB91FD653675DF525C3948EEA1F09CB6CD084D7D34F00826975368373A0 +A05CBF4F7425C9F57F0EB5F1BBEBFEC259BCA347D47BC00F90EC77A06C0787F5 +6FE2264D2E37615E28C74B5B1B96B950243C32CCFCA6925F42E921819C57D387 +819BEAF8250E117B9475D4A8FAC24ACC0EC44CD4C9597F0F852781C9C1817C14 +F38F8280AC2415268B3BFFABE7AF59B50DC33F7ADB38308F67F50EA4A74B81D2 +5FC9C14894963F82D10525E0926DFCBFBE775B85DAB7A4BF4D13E422643109AA +A93E559CBAD1DCFB01C24037672B2AA2E06433528915C03F222C8523E06A7BB5 +90049A82D9E930E77DD4BCA67A765B24E7274C45331E07D9AB8544C7112327F1 +538C7E19BB37C05C42A2AF30EE19D10E4137B75594EE6D6CDB9431B3AAA6950B +99CE785EDE29C89F94F3C0A395DC4CE31D058732DE45B6FC3D15E12E474AAF6D +D43D56FD939A8719B432D4ABC752E1201A8C1A66866465AD9DFD2D9B3AA029F7 +9B95EF7B4459F360F4F515D11149942717CE8137F0DCB4ED01F74E474FB91718 +4AFE6342F4D4597ACBADCB5E40EA16B86D4DADFDB970149C0177A943038CAA99 +D07C82504696F1A87046160F9C0AC7DC0F3C8496CD63B31E56F51BEF07C6E7E4 +C73FD39EE686C0B833315629060DFA6DEA06DC6BE6958C3F9BD1F007F64525BF +7F1F1B1D17C682BCAF0B581F0B986BD12A8C843DA6CFB65E901BA8BCBFA7CE64 +9F1E86EC50417744825150D56F2FF41E8B34D07B7EA3B19CDF906BF67DFAF212 +73EAAAE9015C8DFFC0C6EB7934DF360ADAB6BF70FF5B18F2A571B9E42A113F11 +38EA6A07CE358D0B2F4EC4FA45D3C441CF21D465CE936FAA1033E7AA407DBBDC +4A44306ACB55017E136D70DA322A115FAAE9FF0A07A3D588E48B1A571D2585BC +C7AA26DF65D9416A3C5DE75324CBFE52A76F3B74507DE787C9E9DF41FEA9A02D +7DD35547E56BD3FF30B12668BD2804F93CA6199B4AFBEC7EA51EFC9EE14AFDE1 +91C69B76727373D40C5D66129896314959DC47D672ED6B3F977E671E020BF01F +1A838631CA10118F13F91CF616BA7EBAE0C06EA8AEE25C73D4CCB7203FCFB0C8 +6884A1E23FE5ADFBFB0FFF19C532C2571062CBA81D3570761E3E00BE5556CA1B +25F2292F689E5B950288B794BAE1E15FB3284AA76731772CCD6C6085C394C5B0 +3ACF82A852A32989A638054C2E75B0E6893A880241498D3627B55F3E58761B83 +34208FA0A34738A75A67E5DEAA16597E0264A75BF6E05CE3C3B8B1B5A9BAC508 +B282B2B77CA0F5EDC38EF2D3DA6DF7646AF3C9ACB62DD0F59F50D0EDC193D847 +F8A5D40956C169468F5FC14E3D527AB047E8E5A223A8BA05270700AE1A07C3A4 +ACA5ABA29958F3CB2D1CAA9B5A0643012681D0A32048458BFBF2E3BE88C326FE +5F6AD9C996F3C82F186B5D77B4E31498CAC8EA4F6B3AA6BF524B38FBC53A2B04 +3F27EEB7854861B3EFD8C5DF19D2DE5D9C44540AD64AC3EFE729F4BE0CD144A2 +8A1DA61C8CC27BB6B861DDBB25782E44A33EC1D507D7127B51B17C7BB260937B +C4267B4CCEDF56B1FF949DAE7C5E5C3F061B6CE47BC4BEDAD0A78A952A33F339 +ED8654918143FE913EA90B9ADCB9B5C9C140DDE7E2E692B19A49AC15E7ABE60D +29453E54AEA9381B981EFD66CD957936D6C7F54CBD6306B82D13B8A716DABB77 +465EC55DFBF33839D5F37B47B634CA94489BF050000ACDEE4019C668C6EDE0EB +42985CA668123F764789075C18934790B1D1D9191E72D748F2E30E0AAAE07451 +E4D294C0106CFFBED91600DA5FFFFA3F6DA6F7C5CF3502FBB2DC37ABF30F04FD +6283BEC78FC7865D1B428F0698672E431D2A20E9FE24B1833C0EB0E82A34A1D9 +23C4791E6F8C17911A579DE17A289D904ED8AA16C8A365481D8235613B9C71A4 +26679333F179886DF86BEA8F3FB599294CA1A9859BA59E42B061255C93ECD97C +AC0E4A89EEB16A25A5FF625713F8A5792A2E6A0F537D3436F603D7F464B61470 +DA712B94735254FC69C4F4E0A66A36170EB151353CBCC3E55D392D78DFA3FFCA +EFF08200F1B222D9D9C4BF8329DEBB42D651E826BEB449BF8DEDEF0F9CDA4105 +8406F1E26BB06F60B7B00E92CAD3BF4EF06B9553688B099106932B18F7239DAA +27B747808CF11D151C28C9DA11678CC1E140DA40049190B194851F753CB82993 +349CE659FA85B8AB585EB7FF322499C5940C026FE8DEA5EBC9DE866B03C98F79 +D36AF4901182DA9E9995FE8400AF094906D52D3CFE28088B14675F2A6F846CE6 +5D5869A70EBA2AAD1D0C538E0EF7779C801F866EB96C7B5E19C67354BD364263 +B67D82983106C682E0D9A3BB0D5E60EDD6452393FF2724739D426295CD40AEED +882153073D356E2AB1F543E20F2AC2BEDDBACA73BDB5E8610E58BE6D704E5274 +D5C252A0669C56261555D0642C0937EE08329B8BBA2F807284B8777E1C2D73F2 +31E897BAD03DF7587757BE939038E75B25137471552DE0B7B3842760F441FCAB +0557EE93F87FC7079457AC62402B55E51ECE8D50F94566B1671675F0215C37DD +31FFFAE9B27B48798FFBF14D18A2C6F1306522CD8E8C0D8CFC228B3F1C17A827 +1E5273E3B5B20C2792275DDD7C17053AE8DB61B679ED2780740E947D5DC47B27 +D35F9B5DE0166539FAE75DA2179F3F9EEB39ED0452E49A35A1E1083683BFAFFD +9A066C4CEA4DE699EDF570C9208892E0ABA87784EFB455238BE1A6A376F64252 +82EA5B523A8B2E7812E3253C2B6E1CC4681656561179A4C95B48E97CA5F9A39C +D255209D9F7D80DF55AA3FB99908B46B101D509F3BD513568A4949920DBDCC6C +70ECD3BA39C44423D02B4E5B13E9F434545979F7ECABE6A6FBD131E169C914A4 +8063C6C9748D32E71D0A25FB40C764ED26450EF49735E12DE893F302FA491B29 +D5154B441D5C61AA4AED88F06C63D52409DE17D7D97C572F7579296D297B9942 +880FFF44810390ACD46FD1E090A6412F7BF21DA7CD3B166A845890CD887F607A +1F04BCC7F4BC3107BCAECD61825A959B61E62795CF4E458EC63F1F2235C64D60 +C62FE46E4A913685CEB2DD7B25494832542059ED9DD0849029BC1272582D630E +4310F978FE6569A4B9B97A7BB4BD602D5D32E79727ACF46429CFF0F7BB8EB39C +DE55DB6246DD9DAB7863DBA6DD21EF340E19727D5AFE9026C284326BA0D4D9CA +E015056824B392BE8B930D04BA60B58CF4A683FA14850B6B24787958D1A7A42C +7C33C1362DF20AF31CB88F0F11BEA022C609D9575F71EE270440480E0AEF6207 +733236DBE9454F088CD4A01F63B6B2C6270DD08A13108ADA783F2E7067B7DE4C +C34AE192B05F68B0022F5F30583D9D68754782186E5B8FF76ABC451DC9EEA08C +52C12642165408AEB813C00DDF6C27F4053435F2CCD8CAEE50704DBA37A4AE42 +9B7960169B0C865E92D270A714449FDF13D8835FC1D4C03D7FB376ABF7201BE8 +A593576476D8AB905076237BCE2630179D158F04568CE4C85734FD0A1C8E3D90 +272F3A65B556C7C803FAE8A0C82756B99C35C06673210766A8042682C873F811 +CCDBC015005336EC438C3476B4AE13715DDF6F7034D032D29F2383E005F6FB4E +19AFD4A02BB7A79917D54519D37BE66ABBC156464898583522A4D63FA6DEF194 +BD4B90C83470330F8B5233C24E80CB64C13C0CFFEE81E3087A4BEB84FC8B152F +44A9FE7D4393C652799B12A2C0FC0842861B1F1B656E802CF0C40DBE95350BA6 +32341D0503CC7CC3348953723981ACFAD95E18348CBAE09B630DE4247F3F7A7D +E4A0095D461854E4CB12840D355912AAC33A5A04C833E20005C2A71509AF51EF +697773C2D5C8F958893B26BC64215E4EBB7350166482F29539AF54D860C68F3D +1C60ADEA814E869E974E1B78114B091134589C089A2CBF12ECF1E31C4122155E +A90587849A11C46DAB620284D66BBEE187B61413740176EA8F914D6923AA0A0D +3C3383D95EC1FE1587DDFEF289B4BBA9EE208408BACBF5FA0A53BFFD88BC0529 +10631201650A258809DCBD5D136E038110AE4B818783716501CC5DDCF42ADC23 +86382A06F7FD13F6E99935F9CFA67D49BD51A2D28E1C605DEDBEFD24BA337407 +00029CDD5E8808F6EC2FE5BAF3BD3995414E9D390092ABDC355B9CD4E80A8DE0 +F104658871D0CC6A7F06CD149A0FB36F4C1F484D5A43AB44394934F65C216EB6 +C33002BF7D0283E798813065C84BB8EBF6E19A0855F0E146A7ED9B4B11C9B89E +48465EBDA7CAB38EA818991CA0B07182AEA5438ACC95823656CE47CF932851EA +3B0A9A2DBCD3FBD926D904749F62E27C4725410E297D9CB2CE16ED4B32AA41B6 +888B1480C538548FB6EA68D3E8221626AE219EE5E998B310D8820AC61CB9D9AE +D5C1AEC7C3CDC305A5E88E028AD21C6DEAF272ACB93916AFB42081E9C46F0C2D +98081D7D0CCFDF2A3062F218582CF432DD75BE9622B1DADB99B5801F709E2267 +BD5E0E1511912DA7D888FDC49C2137F65D5C1A0AE5E10961CC392307890FFA8C +3CC9CE5B898812BB6F0AA59557E352735A2B11D6CA98017C7C118D1D460585E9 +C6A2C132A522F0632B5B66CCDD2572EE7378ABD5EEC211CF82EF19D151D290E5 +0A0B3328C699746960A0A7BBF540E6F6CD9544581D879186CA576E3CC0164930 +264C26785042123F5784D2CAE377233A1387A3B4F8D868B40171EAFE7BEA628E +7ACC740937076C878F76BB8EDF36ABE98111D319AFF427713EF3CB8F16464228 +C083113FCEACDFAB97AA3E193E8FA750FA5024B674F63CFC58073BA959137339 +4B6958AD894CD17C4DAB82CCCCF154343270CEE203E13322D3808321FC02051F +90CB293FC80FE9BCB853738AAD70563E124CB39F9935AF590ACF3F5FA8560169 +2572D275F36192A5ECE86B988D6133B0A1745D6D386937989850DAE1E62D09CE +7D24EE2066814DB161F6103247EC2E8E065940F82E1E984942184E68E556A120 +23F52C75017514BD176AD60F29DB768E9F1B3DBD72C89E895432C39D2EDEB089 +3692507DCD57FCEAB7031D391E5CEC454D5266D140D7EE0CD151F9CB042E044F +FC95CA7AC869B4B04DCE1AE9D5202C36E343B1A2AD786F5B7D0F1AD1E42C4C1B +6E6BDBF86F022D90840FAFD81604C02689B3550AC41AE36435B29CB823D255E2 +EE9BC538502D18ECA40E1F340D0E9BF70C58E9C775D86DBB6BAE3D3EA1BCF920 +6ACACBD4D2E960723EA3376AB2B077010C1E685F759A56E9B0A84BBDBBD9A0D0 +FB4B0806861C272DE667F219D8645EE294FC321D8E373021BA63C1003CE2D689 +D5855861A575696ED7FD601D114E602735DEF72049400119E933DE8A1198DD94 +8457A24FBD19FF5D21D169FD99B6F6F6A2824F8D1653A13D5BBCB9B11E36B8F4 +2F9DAB2CAA39AA9453279F8D222EC4AC8114CAF0F7F58736D457BC01DD915ACF +7D9B4AD3D90F93256C4C9E41CC15A43B71E26A8DAB324639FCCD3E082B580CC7 +B7F2A695D029161D2F3A2A8963EC8BDC0E6D256BA06F08B6D48682CC9ED169B3 +58B063D8D7265C15B59C3DC91EB307F33FFF73C3101AF250F3CCA40A161FB3A9 +B698F261E9F7299F2418D1DCAA1400F7BD3C74AB55316F22593595649F3E9C26 +6F903C6C0B74D96CB7F92CD33D610F0AFDE14516105B49F1A43BFA558BBEF71C +2FE095E954125172B6CFE4C6390F701738232605A38671424723A68F13F2B94E +2FF970C51633660D9F5B00FE64046C85722B40515F34E44F32D18ADA4C85315C +2461D81D8F34BA7B13227E865B7C24236A16D9C6E1F428998C22A43D3D0332BC +55AF05204EA352710B199C0F1F710C96C72370CA7203A2882310A629995B5D78 +D57D695B654A718C5268E9751C7F848CBCF87776ED10DEEEAA32F50769CF5BF6 +58455F8CB9C793290D7F8A38320743F0E87CF2BAE8A07BC2DADAA9F61ED6EF01 +6E24883E78AFD03E23D3A9E77C62147447BB772B4C80C1022727A9C863CB8A7D +5C54C057BE3E148FDF79659CAA77229C438A163D366F5CA9F857ADF98F9377DB +8CA7CE8F361E5A553B4541763D9A6102467A059DFE0004C350EBA6C8FAAD15A9 +3C68C30AD52BC1496C4C214B5ED4E537C3B25DF46166E1B22B0185FBA3F9507E +7ED64C77517B077164E6661D73E441ABBE1BA0F68D8B53BC8337879EB8C08F47 +A579D32D0EDCCD91CF143F05CDE56B87E1F2868D001648513BE0FF3700732AB6 +CEC0CA78BE25810FE125B5542E407A984E758EBF4A3FCECEA2434815F64425D8 +C8D0862CD06D88B613434DA7CADDD3D6D4F1739E744B4DBB99C08CAD6112F0E5 +4FDFAC2B8D0D75A7A7AA5CFBE2C3966284E9D33CA71043357CB951808B3453B3 +B140807FBABE8F6B89A99B329D84E21F14F5D0022C0AD05D24B00CC2DD560C03 +AFC9AE7BF337FCEA66C41BC6A6D3768172C30F45DE176C1B4EA57828702857ED +DDC1953FD25CC900941214ACC73A8878EFE63AE700ABEB0AAF8113675B12D8EF +E370EBC067F82917498DD9A5C6B080AC066FB0B209C52448CD68713AB98D78A4 +7ED37127959969CE4C18D686B8FC5312BCC6B5F4B375DE186E927F42AEB377F4 +E96381BF6906E4A24328DA33A3C33F00C7034C53B10CEC70058D312D3EBDF1B7 +C81E0972E77259376669C71141162CDE55F5EF7E4A8A95A16AEBF41D00740055 +FA8CADB6CCAF1BF0850C4A11F905AD3287BB90D66E2878C58F00A71DFE1334B3 +3FEF4A33513070FB9AF215BD26E039563DF3BFD597B8723545C52570E863DA43 +8303766D7B0CC6EC75676C77516470F9D83908C0F91AB5DDF2041BCC68B1D3F1 +652153EE95DB246F151F63D85410B6B5FA265937B373A085AE2C42542287C17E +7FEEC7246F98BF641ABA0006F8658956222A9E5CF6605A3A93E5C0C97F43E679 +321F598CB94963C49AE48BA497D99B304D53F40D605D17DC12D966837825B070 +6AF66368D569B2BA9FD4066A155970E0A9BFD8F9E4645A41EE98391C5A2819A4 +CA09ACF8A056B5F65A4EC08DB490EC4BCCABF6D5ED8DDADD250A704D8D0B70F5 +D54C83A4E971792EB7A807172475F195836A9184EAB13020A8924232C95C8C54 +5852CACDC34481E182F98C3A3102EB6979B8D81A2FDA248D74E76B3C8900D6EE +9EB9AB23DCE457ABB1829C514F5AFBB43435FB2B4E83E6FB0CF79F24E93591FF +59AFC759E491A9B569A1B1EE3D61CA858357BE7215484F4504C6098EB705BA7B +A38C7B683FBF36EBD39987C5447C4F5074893D934C59A056D72AE4F0A363BA09 +EAC3C4AB6EECF15BAD98A0201CDB4F836206F64FE1B84E590D6D4119D2F7B548 +36A2B3EDED5A8BBCD95509EAD11F6F43FEC653F131CB4AD546A6B7096353B016 +FAE4C3C0C8AFE9E541291104425A1DBBF7091AACF5F539F29CF261F27DB2F2E9 +96B170EBD139D7D9BD009D6DC3EED26EFD5F0FD4F46F590B3D218F0F54F324A5 +C4FA31B4DA7340302287C8A3F2417F02C6324F2EF4A7BA2612F343EF11A4B4D8 +C3D6CF3DBCD272010AC01B525420CADFFBF2341F22B018515D954AA24E026A00 +AB3B5045E73440ACD6A2957BC5835009A310C7C85DA385C498D5D847469563D4 +146E97EC0FE9F8B5244B6F9C83B6E1DAFD109EB7FB1AA5AAA3A3ABCBF4B4FD5C +07B5524EA0501EAEC5D280688D6FBF1441317C2EB2DF818120427B4FB62A6AB2 +68FB208350BE986F805CC893E6C3F0B2936152B1E7E19001913C0A9F821C345D +6873A92FDF009CF16B72FAB99632B783DD3EE5317C30D3363C10569FED1519C6 +78F6A2343B3152C4303321F6E2158C040C7877C7514F30A15F052D3C0EB1794D +17A5BA81039F0B0F3CB0093CF6FA0D7389DB279018806C1957154952901F41D5 +C9786A7C0EE76E57189A58925CC11B9F79C17687198674B2CDBD77AF4E0C528F +21E588FBDAE805AB5ADE20E37242C55D6ECB9574C82A6044BBF8C649A39C5512 +D500006733919C4FDDCB5BF3F586E6C0DADDE28524039187CD1551FC7E193DD8 +B912AC9D6DAE8B1FC859C46D871FC08408E2ADAEF7A361A47DA2DC64DAE45B96 +AB720474BFE8ECB8A524FCEBA21ED5A28A01F90F6D28A7D40A4F1A9C2A7A9820 +12FE8B0E532D637F1FD9E939F124A8322AB92792AC25B2C6D5964F54FBC0E882 +9B4BBDEBB7895CCC4DE40159121E2BBEECBEFC1E83E2C386654997A9E9947B7D +38EE4C03C5145167E554DA0A7EB0FC8F4B80D822C321D7574D05A1289494271A +501FDE3325B7C87E1D24C34E08B799A073AC8361C9D49A02B564126065A7D550 +07E36365337A08E65AC7130BA92D6C9B97B12300F2C8886F55EE9C434F7768BE +5B9BD13D87F2063E39747F10C2CDF8A60B9196FCAAE79FEFCA552919AE988A2B +B16705FD84EFB22DC538ADECFCCBBE8E1F58BED0588678CE1A0005FB3F5BCB82 +E5519E9D23ED670D2D6BDE06E36D0EEEE7D78F99BFE25E1A89145B138612C8A4 +90D0B41453AFA81C62DDF3B21CAFE3C9807275BA3C5A25E74FFBD61A092958FB +CB84C171EBA5F91D31123B578780AED7E074BCAE8DEB9C10900F2261F198ACAD +72621D416CA2768A0851FC0F5483895FC84FD629F1C32212528C966DA662FE7B +8DE8D4B261723F8853A5BAF63276EA472698079F7C8E09908C614A0B8BC680F5 +9EBD5DEB3866EE4DE76926BC31DCD160224A056BB6EB98843D2AA129A3B35999 +3A31A60727B74218771BC7594DD1494E8B385F037F1CEEF0E1F413507E89F426 +A88D4D599B8B7D40E7C90A2CE00EC61E35AE94FD68E165AA4B30F3163DA0B493 +18FCC396151A860D96AF51C1BCEBBCD15C711BFB5A33692D7FB570F044386748 +6BF849598D52C58F4E963263CE9A9F64E8EFABAD9FE77B69C1F62A418E7DC918 +87470BE747148D5D3B5C718F9F49E2F398E7A2CDC59216AAB2F16FDFBA741F9A +9E0FDD43CF376DDEDC8FE833FE4CB1D5E27B7CF160F2F22A05A117F348B632CE +B9C299669607C6A08C86187B78A6AC4A70C5D6A204153B346D2AF6E4DF9175F2 +31607B29E99B5641BF3A818AE6173008066844469A0837A35C227DA9863D9ADE +DD2314224B8C3296B93D698D0B5F980EF4E1B62C30EC9760CBDBFC0277A242B7 +CE7989E0BA910E13734EDA04992F06A0A77E8B20C87EF6AC80A2AB7C7FEA5768 +46D2BAD6C8CF1D70B9CAD91EE7FB2F88562D6280C12A1B4D32FDA0A422E248CF +220ADA5A2AB5597B312386A58F8A21C3ADCE6D5FEE3F9D2A4363835B07527BE5 +BABF7FD63B05217FFC7ADCF2EC311F6B91AB091C6C963255B4B8453897C5D8E4 +B67CEA88C09C23A3FEFCA3AECE9B7ECF02DF65A99750A337D1FC2F13D198247A +D892F0D9A6A06265820AEFABB3F0729AC4AF8062B916DD3ADB87121EB799965E +A07438A72CED4E5320E6706DC2CE33BA6085DF0F9C788A176571DA3501A15929 +C2214FFA20A0470B9CE8952CA671C1B717A57B48CC839F5DB4A6D66248D182FE +C6D0C89A8CBE513E0AA41595376F70DC4EEA7ECA38B8E44EF6BAD64F6C15103F +A7692126DF2BB08AA38C4B90DD6C39B0B462A4B37729CC59B85105D5C6309749 +F1C93F8B2EF214F2CBB58922F050A80C2EF0F7A0D332B5F5D0209D7EB3779828 +F94760FC65E0F1547CCEC5159B7F751637F8A73FFF9860547CDC94040F432FF3 +0BA714B6665EE9F20A8A56C3D3E6225C3CF95D24079E41797913B7BC1869D27E +32212E244C9E9184CF56CD15A8F1EA694C92FC45997426F19201EE37CBC2B24A +A8015D92E29308FFDF9901CFD5061DE67D85AB5E9E5752356F4C98AB864AF589 +389E6B85C439670B28609810859B5EADD6173159903FC65125EE9F444ADD967A +CCB73B5C4E153C81110C5578C552D914E05DD3A18395087CB147B1985AABB2A5 +A2D97BD3D050EC2729E4B2E05F5204C06E266F552ECBC4472B0710D7A431C3E1 +0B7F89FBB561D42487527024D0F9AAAB4CC4233DA4900FABA883A595CD445101 +45B5F4088B21B546BCD6C0D6B757BD8114A7AFBDDEDCF923016671015D3DE3D3 +3759EE001C9828684374E20D6EECA756DE290F6A020E09D8C411353231FBD7AC +E02EC25A5B7AB5C681FB95A03D79AA01CD91B0F58CD3E3C723BD40ABD4B9459C +4AADA21BC33C4F5161874616818BE67923E3FD3D65BD18D4F90691F491B4EF3C +34DBBD11D03D396A086FE67F18928C5409FC0298D21AAB0779CFA7440FD3A083 +7C3414740EF7654EEAEF51253FEAEBCD7C0D5958E1EE340A298902E4B23E5BA0 +AB47D6B8A41DCE006A4E3671840A4C077E9E948AC9C1FF7AE26D09575727C2FC +8A2EC23A7736665DC4AE2BB65B475640BE71AC6D66BA0971128E7840654E715B +EA8C8277C1BC221590A283EE764584DA9AEF65CBB1E52CC41736378F1E294C44 +0701F1977AD8F5F8F2D060DEB4FA32D9D9FC53408522F74640D3444BABB39209 +68C1873D6E0C0E3E10483D67CF70570F55FF4A111F0F4EB54557AAA79115E31D +8D682671241914FC07D431201AD76319A849D53640C5E517AF616A157A056CF0 +ECBBA141AED25FF648829604626D52BE98AA9B29EF2E2382ADCF9704D0B2216E +D7408C359B159E84389B5454AD8E10E4C62C592E052590DFEBE546B02E2C100B +599FFA2942872097FB093540BF7786E7D45A8B5EEAD6D1C1118FEED2635012CA +178A40DF6F626F6596CC773954472F5D4CBC310CCC041E384304ABD270BA8ECB +D04051004C71FEB557C434CF3773FA9750F5C2757B7F1CD17DEE48B1437B59BC +30E690522C3045943D45EA6E51A4EBF8FCC557261689C562BF8705780986D2FA +C866A3FC22F941DAD2820912C97510B1CBB1BA36839EEF82DCF7368E382A4EFA +0ADD7FE767994941E9A5D7CC44570DAE3CE7A785D65AE2784B079BAA5DF1D7ED +C870EB560B792467C72C874601061E0FB3BF003101EAF8BCF7BF01F6DC3A71BE +32D391649160BE738A739FC07BE94A0241BB41CBE04A5F794C37E2F5C258CA81 +9126D73B4471411D4251283EC936EBE3F8C28EC36BA0E38FD4136F779635E95D +8D5E5C4E14C680D855DDBB8C1F90FF30BDC971919C7E6A93074A36D88561114E +6C999B1CBED051B7675B6264E27EC4A015CDE54B0A986250A21271BFF242B675 +9AD36175B01E120D43F8A60FEB9DAED5A70BB4FA975450097B966F1C95F2BA44 +3071E1057B6996F53199879DF834EC867B161334FD281CCF75CA1480F04DDC4F +511E6EA992114990629034D590C97A6409B520A5E78BF118E11B2BB74F1374FD +F3415AF23290A4FC3DF6683F1D5663B17260850FB1E307D670CD527E53BB2CB4 +40A4452BEE0F4BE7C62B0A7074A5303B534F3BBAEF96C818A3BCCC30B082B502 +55B5A82FC5E0C6EE660EF38167D9AFD853D48500839B16E1FEE13BB232D55040 +0805F63323C6D228E192B6DDBFC0A54C19C3059E16EA511F33278AE666C403B3 +BBEC3B9F435A9752984B43DC4DC6C5AED25A3D2E73B10B01BA097BCFD167D4EC +937DEAF6D992D924FC03B53A70EDE75494FC0EC27A34EF8B637357BFE6081EC4 +9731750F93B4AC3D1B3B6FAE7AE7D71DE3F2C0CF4D734CD43DA41A24DA7E7C46 +A1E76C9C1005C0313797A2C620DB3EA13E924BC71B2916C308533834030CEBE2 +E2CAF5AFBC7FC6D6F0D12FFB290A461F7D262A1F620AAFF509F05705D48FCC67 +B143ECD4F2B0D61AA00A69B700209F2DE4988323112836FC1A75409516F86D16 +3D36C7B1E7C4995E19F0370586B4C6242C64E9604D541B1DBC252F782D4F5BEE +A81FBFF9D7A49307E2265AAC20501FDE30BA6E9C949D5095DAF00ADAF7BD67A3 +77BEE10C62F19F9CC3B0763A9B1A62EBF43FAB15425E7D7AD7E29D9B40FCA346 +096549B43EF7BAAD35FA663928050E3E82551D502403105F7881257039A8D67F +1B5934CB7FF76D879DC26D6D9F8DB1412E04A18CCC4E30600EEEF35557E73FF0 +B9583317CE899891CC608D3E5332E0CF05C754FDB2256BC946EE256607A1550C +75907D32C995B1B54A243617AE98E2BA9C042B7ACFB4919970505E7482653F4F +F780ACE9308C9BEA60C891C5FF175E108C45301C588D4636C09AF8D6AF016450 +F66E262673314125FD1459282BA9A0EC01A7305A8ACFB6FCC254BE58DF6CD19B +98483D77048A3DE933F94DB60CB3D89A7404939FCCF918464032EC47402AB1C0 +DB66E1F48AADE6A3DA6D77D6124D75B84C5CF556AAAB07FCC2DB87262E5454C6 +4814F1933591DD4C29841719D334BB11281B94E5D44D234212C3A7A42C2FF04A +9766AD45A1B0498D0DE841D0DCD7C02428806F6F158B7C69B92743892FC693AE +4A147EE4E79D6F47017DB95262BBC9787D330D3A4A8A85EAFB909E197177EC4E +F2DF74F543EB7D97B5EB6534D7BF16D16560908D8408777D96D88741604B2697 +67E91C3041645C0843815BB87E0C6CF3BE2F8244A24017E6C2114EF0F51BFA97 +15353712C0F388552A853B285DFDE41F352F5ACF474B8D86491C2F2977FDDB43 +1F00F9C05C87ACF8D9F9B56C3617FEA2E7D8D9195C2C553A6863C734145D156E +FCC1D17572AAAEB4B0BE5CE51D10BD4273020DFF43E0F1FD270BFEEC8B2BDC3A +F16B43FBDFADB690685A6891B497412EDC358CED9589836AB173BD20E984CCF3 +59759CBCAE3825BE4A428BEF168DD88717837503804BDECF675BDB8174DA3EAF +EF5ABC8BAE00FDCA6F1AFEA1C03C14902D0FD9BD67EEB2F344A374688117858C +DFD1AB9A50E7F4BE806C5C5BAE3F07B8A7F3D4F54A29187BC6C38520895A823C +4B5B184FBA09CAA547CD661F6B4BF98E68A630D403D214374C554737AD7D5994 +81149DB2480176D618EF15E0517D56BA02FC995E85F2DBBCBD046F723D52903F +14B617472E7305E9F6C223D78A2F477C9D065181AA86FE051F70F7B52A3D82F7 +ECF18D48DA8C17870E8B7E543470AC7BE549759A1B27F31AB30C68ACE22BC9AC +E147F8C182255E7262EAC0D1DD1B8FA888D0D5CE9E2780C0280C519AD761AEB9 +C5C3FE40DBC65147F680F9D2F6B9AF3BFB5D075E91CF3A092249EA71774FBDFA +FC479A7148B477BE528C3667F0C3CD9C1CB9ADDF4F4AC8F93E1FDAAF3FE1793A +24F95BD0EFFDCD59298BA7BD8DD48A718C660E195C765E450380F771183B302F +F5F27514863F9FC48CBC94306556B6DAF16D54F9CEA9C45A8D28AC6CE2CF954B +771BD117CB67E8F93D933BD0693AC61D82BA1381D51AC427425F8791B779AEC6 +20AA9905734C7688F1B1EAB3F1F713B14883C48EBA0E91A64C7EDC850C1A6D7D +186F405C48125A77377DE45AE05B6BB2FC42849EACF6F6F9C003EA93D00B89DA +79E540A2B9BD52113D41618D7483068F923B847718FD6C516000B5B51769787C +8DF0B33977F61AB477861AB8D493ACCFF30D4F39511B0D9BFDE188FBDAE805AB +5ADE2C628E6E047CCE9EC352CB63964DC90905AF18DC3C7874C337AD2184267B +DF974A6237B97451A0C77410EFBB3A8A3D55643CA08A8EA2E0AC5F0A9375C461 +E4B343F80CEC40568C521447BDCE1A2E5D45408B47E5058D328C8BC323DAAE9B +274E797685343E37583F2F631BB07A8B954A5124FB9B90EAA7E22DEE4EA616F0 +C65C57864A3AE70F4E7C09328B845F53AAB943138E005B560EAA306EF67AACDB +122F74773D084FC0FE926AD1FC0C3EBC9BA82904EC2D6596EA65F4B3E4B5BEEF +74C3CE3CD45EAC63D7202E2FB9EE03AE4DF5B30E0C78AA18F38EAC73045DF537 +03D558AFD6CF63271F3AE844614482BAC4A34CECBB873F13888C35B29652E763 +30087613B8C3CF47008FF0C2B4DCE7B4FB86D0B968AC4E98882EAB48F41F7197 +9AD42A9C46648EE7F0F270C203E125C92CD0FAF9ADCFA05AEB08A69DCCB712CE +75D6B6BE60839492D18BA28DA2251A5E5D3D9504100501B32AB001F5D4AA2991 +ED06C8F063F93B888D504C5596CD273307730460EB46BC5FAC040123AE2837CF +59E9BA4C2B1E83412CE3F9CB5E2FC7DB0D15607276D93B3738C549619B17C0D8 +357FD5094A703B74DB8D61525C3FC1DCCAD810F5E5278897DEFAD47FE30350D0 +C9D3D830D5447A8E52AD2DAEFFD2279EE01FC95F4C38EF18A6EE079727FF62F8 +7F4D2BE5B80CB0B14DF3281A312EEEF077584D7FD2F0C06B6047934D745F3396 +AA7ED80DD3B1E3D1FA27D68C68F1317D30FB14C6D9D5F31EEC05578C08949A0A +866D434E4C62087DC082C036BEC3F9DAD2A26BF89687D537B58A9001CF3324A7 +75022AD2F66C9F4200A5EDE0314190F6638E8F7703B25C0912681695CEF8AE5C +E0A8D860526C6AAD0B0C3CA9CEABA721C69D93D5240F186B849BF50843DC098D +9F57A70E3B2F0961B304D771FFBDBE2B5B737FFCE21DB8EAC51594138F63A104 +9994DB21D186FC4C317A14FE9FE9FDA16B9B9B2F94E1E8A9DB232DF8B23C3704 +53164F61CCC22789D30C7145B6FAEC3D0501AF29B4FFE749A091BA859EE5CAE9 +9A404B19E949311CE275101FC885408CDC12C46AD88F530DEB6FC3DBC7929613 +C5FDB899B93807527A6CD8842B09E701E3C2BDCB75945C4B2E473BC4DE2C9B07 +5DBF4243D35E70B03A26DCD0EF55282E7993032441E8B6EBC5EA8923931B48AF +3A9618E3E6759C2CF32332BE904D74B41A46B53EC579A8CD490E2D94BBE4131A +89BDA47D0809830EAAA4C6BD50D146AC79909979E5716F768D1D95919C6AC4C1 +A63AF5CFE0C31F4E8CA5BE704EB74876DD3E8BCA2CC14DFF2C6D3F15A5A66564 +2416789B275E6FDC2E93EBAB3FE9448FB38AF02F3D37D1C9105B03A49DB0A86D +275CD3CFF32C1250335100991700B0973F3D5E54C39D07D260C2FF3E054D2D5A +728CA8DF72801940AF4F129FB2E5C4F32DAB16258C3DDF41B41334304C99D25C +D164D565E687B6FBAA406E001BD778939720B725B29B0444EBB2E22AF08A50FF +0C00EA68F9D4EC2C0DAE1D0CEDDB9C7417A413F5173326DC5CB8275021CE6F04 +5A9B58A4D50832A861CDF9C9D31525D35A943AAF66A34877DF57FB6B156AAB19 +3EF93C8C4B8394FC0A51732AF46FEC3497D2D84B19F64AFC3BC52B054231D5B9 +A34D45FDBC25501D52C6ECC63492962B685FEE3BBB6C2DD70A84D704CA35D745 +467E73C8E5B6A2DD66C370D412525628174D5E10201C84C9C4DC77D0FC4EFF73 +293ECBD31C01A74379DD9C4F90EAAE5FF84ACE13643356755405F66C7361A2AD +8600BE9E98A52536FFA517A2D4AF896663E6B930A66E2DFFF2C57D4D7A5C9F69 +F3154F6F8375E9803060CE0D4C45AF6475E53920957BF365961DDC2DF476F74B +5149BD0687AFE0786B18D2BACC769E28A6E2E8BB1E3F284992AD1F1DC058AF02 +CC94EE0845124DAE980E6D9ECEAAEE1849027B0684DF492F168C5DE0DEADF4D8 +9800BAEAEAC9168846D852C49387968E86D65ECE24D6AA3B60A64CF86484DE06 +F540D5FBFA86BF810EF5DA04473E8E25345AC9A12424150EB621CEED8B1EB090 +C76FA51610E7CBE23C6CDF040AD880B73F3331F85824319DDE430C00AD7F809D +D408879B1FFFFDA10384BCC19C8F3499B63C19DCAF99A5D0C2A948A7CB69E094 +5D3A79A06DCD7FE2122D3B3E646ED2032B8F82DBAD82A8563C5667A5F015D31F +8FA8AF22D4728672AEED085F88DD7DE8BD13B0E7D0306969AF29AD850E149889 +2B4F81D1592CC36DA27A29097B8F720F477E6F9E26DE7C265A54BE07E036B7F4 +ED5E303876C82496C2C5396679DF6A91802452F079AA8E653D13438B214AB47A +282D714843AFF0B74BF1F72C4F7EE4A012EAEE04A82AD8B2EFAAA33A87977644 +AC4F6E5CD474A6C8B08EADCC1665E3FFD09C78FF30CB4929CA140E04795686BB +C985F7CEB0363FA650137E7DA8226A45810CA44175E66ADA50A0743211D3FC9B +11B4EF4B5DED09A3CA69E48E0ADCFA5EAF749DF18AEDE11F9046A8629880C9D6 +38BA9498CC17F4DECF25ABC9AD80335ACCFDC534C82A9A479EC9074A1D9A01DD +96D464E1D630688755587DCCB5E8C1AD4032B4EFF0E645E2E2329D08128E3D11 +C8D22F4CD4E4783DAC3D6BE9AAEBC2F4AF3DDB05020796C972677AB90AD7E8EB +9FE96669A4615BFE4BB77CC787C941B7A0FD430AD5B9D7B63A26E954A28F60CB +E380AD0BB4724D99F3F46E73160555A2BDD7FF5BE83A2312F7B04055EBE5B2A0 +08FD96C4C90DD9A06DB0B3D5F570E8CF4E9FD7FAEF7B5042A5513C1988E63ABF +B3C8E1D8704041E279CBBF208AC23385E97A6EAC8BC634E3F9BEDCB3EAC4C57A +EDA544E06719AF5BEF69257CCA51FA7840BE8E21F66707EF31300DDC70717F44 +EB2DF6070007E7B93D1357ECF8ABF097B757524E92D31524638E69E63B2DB200 +4BA1E338B284936557D6DF04AB23741BCA5CE6B34099FCBA07CAA9595DAF1E8D +F10FCA58FEBBE12F8E2FE6A0680EA5E6CE0CDBF9A1C872621CA4C10AC91E3F55 +14C3918E1D32A2078CCF4D109ACB79C3FC55E3D222B9BC8E1D0CCBA5DFF91B1D +76367940D4CB4CDEC260F3152E03A86FEF74DA6A1DB82522B496C177A77EE9C8 +652B0B6DF023E60401AD8614ED9D77224D822F4B961EEAB6D9911922311131B4 +49167FEAD3E3EC5E251618F7D1986069847C7F1E7503E04B48DFE249135CA5D2 +8903F8C25A141CBD2E7117332EE320DE0DBF03946FBA0DA27F8DF4AF8771699F +696C489E8AA7EEE92B7824B5A03D8B297F9C606E64BC376B10C5C606106CA8C8 +B764BFAB04512AA9510A361CE189858A9A565276CF007EC6BC1C7ADCD6C4CCE5 +CDF512143002C6C2376D3CB2624095DB10CE42032BAFBFF7FFB6BC8AC5EBE973 +02520AE31D24A36AF5C897965EE3922C280FB056A36B802E1FD49A7C590F9A3A +2D699F0DA5D50F8EF5C01779953A5BB88EEAFD3DB8C428C6514146B1B55348E1 +E2CE1D3D4A13A84A240C40084EA97B971EFA414370BFBFAB6F6342425A324388 +7DB7E4A7BF1FB654BC7DCB56C7E1FAB0848828B86F5CC8B069055B76986391C9 +76CCF12F945173646F85C1676235855107EBAD75BDA3CB3E655BC81AFDF3F629 +F79687F72BDA04FBF6ADD00F9A1F21C0007599A177F46140D6004D06F6CDA03F +F087938716D4D6B2806985ADCC344B17B976547AE0F745FBF4B8663EE4F39196 +4B21F9AA8442DF78B1BEF23166510DBCE4405A20DAF5AEB09C4ADBE05169A52D +839BA7B8CC777A0E4F685686F344716E2AC2940282FBC795966BEB564B018DD8 +FC56F588AD42CC2630ACDB1957CD2F3A461AAC09E95A549144809DD7533812A5 +7A8BF8BE337EB618E11D24B0B2C34CB39BA93DBF0A588DF611669ED72B92144F +FAC3BE40B7B1E56B38068008B17DAC0C6648E5868A965166A798B9C918B5FC67 +E60AF10D6191FCB156411ADCCC75010D56E7A87C95F7C1CB33EAAC7231BAA719 +B927473D40BB980F3E9D304567305A653290423E74BE544D39BFE92E0CE23BE9 +0ECCBDD14E74EDC3C19B121128E807299C64E68391F13A96CB1A418A450AA9C0 +982B3B3CAC83E11C8A6CABC01F5F358F2BB79578D8298FDB47151007756597FF +0574F3357B719AC0E368A14CC91F6E65108FE1AF6797DA6AE4CA52E1B15890B0 +888D8082B70CA6B7BC5FB7AD9262CEA6FD18611AA1D7378735E923A6A45D1869 +81801E21906A4D73AF8D397B6DFA28F52355FBF16BCBACA72DAF170FE4CED247 +F8A80C1CB66BD33BBE1AD30182305ADB2A88BD5F9B435B472AD6564845EA9CD8 +84738801D498CF826C540664BC8E87B868C982E49D77916CB87E10AC669FBD19 +2CAEFD9113127041479C98CF1B2987A45A22ED99B048EB76AB183714E069D51E +6DA757A9A4E17E07AB37FFEA7618ED5E583F4910C7EC87042E8180DDBA7CF58A +B8417BBCCF198AFB196124807215030A9204771B3CAFA90876A5193F954D73ED +F0BAB43D936D0617D804B6B2CACCE9FACD2035141808E583A6E4AD03FC1719B8 +7BC89A97156B32033B9A3538E348C8D7A59183132E9BADA34F1E77B2FC8CF783 +3ECF3E24FEAC7C7BE1E236A94C9C44CEC78DA17D4D33BEEAE1A76CB5D4F0DD8D +93E332D493C6D6ECE0FC03CBBD275441D61AF9A42443355A369A0C495CDB74E5 +AE071679D9DFA6715543D3FC1B6E4F66E5557428C616047C498DA9F50EFA1683 +AADCF6B403F0EF9A78F1F8F1ACC478D0B5B66FD60322C5AFC4C79557998FC714 +41AAF6009A53424935C0EEEAED8CB4513D8CF9AD3B52CF941989591FAF2696CC +40F1887F8EA77AEEDF67CD3BAB4BF1DB2E57087D50A1F5944942CA5CB7085240 +1929A28CF489F26F59B850FC78A647287740EF2755A91C7196E4A53063C42BC3 +575061B2CC994D41EFA131FCB266A9AD1E18DBD854F2B99846EC903AFBBEAA98 +B32671B08856D84FBB7BCF5B82D245F7DD6459CB437B4183ACA555B4B274A63E +158F68D8873925660D260B4C7884014E735B72EF322D646C4CF5EA4917CAAA18 +3FF6ABC26D16ED118DC4F1B85B3405A6EBD15C1A186D7C7A9A8D22F6F03B5DED +F11167C738C758092C6BEE44D03532AD27708884E6F3EBD040A906D59E81FDEB +BF0C0AD4030D661DDC3048CF4883A59C362229EAB078978F7E62B9AFD9E329B4 +822CCFC1DCBC7D0714E5EF2B7BAA7126894612E5D1F4CE7421DB0580E8C3CCCA +BEC8DFD6392E9575607C895CD9FA1D78E92B634D62F3FB5DA75BA65958F720A8 +C0006A580F39D8B63D7351BE480B24B3E10318BE8780D486D3AE2E510217A5A0 +3936E396AD22D01D611DDE5F0F5140BB003D24599E9238397939ABC3833B8B79 +5C2B8CF9DEA9F3DB71377EA34DFF4A7062E91BA9E090A815AAB4EE3CE94A4619 +488EB722ACB22B32C391633A9B6BFFE656C75BC7A9DEF0E02CDC56DAEA9597E9 +360562717D81560E24972ED5E8C9CDF7F54B30792829A9136D2CC9B1348504C7 +A2F500383EC033F4756FE20A8EC0B1B0643F8644C1D871AFE21412EF88BB7497 +C79E3905528B6B2F744B9C9F10988BE7D061F5A5F56C72EBFB94A5FFE994A2C5 +D0BBD6F79F2BBFC9B811D6B4AAF40FE1D3FA6DE3EC49E0F24EA9490D6E3F81E0 +B56FC8B4D6EA1A0E899A9C1ADE24693A6D7E4C214D0847E8C0D5B31FB133F4B0 +F77BC331474486F8E4A69E970054D0802BFBEFA856550D95FC2CA900F5D6D3D1 +38A892C66D541937D24D9FAF5F54F169E5E78BF181F2C2E2B2E2B5D6E0F21727 +1E420D2E69203BD76417DE9A70685382A0F3329FC26C671537CB07764D1165A7 +6E4403882716938A18DEDF1292F688F657E27FA8E5D86821978DB65B0166FC49 +E7CD5C8D1C6AE1B78EF02E8A81B51B20EF5BFA1EC1F2B80017292FBB6168CC82 +871CA253ACEF6AC823372F41CC766617377ADB19FD677C46D7CCABF870DC5DC5 +0366E0A5750ED38A2A86811F9852E9878A95D3BA0F6CE7FA2670480B6523BAA2 +ABAD6A9C2D43E2BD21F2EE7222D21DBC394EF4CA9FE693A5A77CEC2EA60645ED +BA3BF1ACC360B253C970F7BB86281CA813563CDEE08817DBBA24059FF290B550 +4F803469E990F5ABC2F66726E7D04E00D8E634CEC60EFF5FB69ECCAC20C2986D +65F5ECD610BAF2EA2AB937056DC724FEAE337F5777258FB5462F3C94AA7E94D0 +FCA0B0684F884D7EC6ED8BFD0AB95BD5830CB4ACBFE139AB0A0C1C288A318B59 +A9A3E79A5D1D8A13ED7F632C7E52216E16A331101EF404489B2B095C0F787063 +9370950775CA15495982D882396417FAC4FF86355E203F53B33F35D4A5175EAC +A78FC91C980A6AA5BD49D87043C4686B224D0535C816ADD1D48BB45EE7529E64 +0EDB35B4A27C167DFE994EDFB41D9D166802E37318CB6D4CDDBC73F7CB30816D +E9C645E32C1B7513199F8D099CF39BB8DD762B6A947AC26242B3D51B11971F72 +DA4F942EB19C883CC0749E1596CB89A1E6EACCB35594FD8E272F1DB7529B059F +FB204FC404789EE182D117AB303A886EAACAC08999B19367801BA5622F5443E5 +1EB2903D603F215C9355DEEE42A5DD29C5CBAF1BA1FD52B9F8E1FC5DED7DE91F +34A4461661549339B595FEF063BA44CC0DE7428E131CA38106279246F5B9FFAF +B127B9B46B1F5E050133071924005746AD3D6AA91E4A0E75E5056AC983A6141D +D3DE44D5B37461A76EF6A8906210456F13FCD15203A80AC071FE10B2F064145D +0C7FCF12AC9EDAD42EDF4E327FA57D6BA92607F41B7E34A7DD27945B4AB2F0EA +532AA886EC057F98964EC0CC1E4BE095ADCF030B1952293B7B6465919A833D52 +F24EF2D9BEE963F7A33320CE29D54471526D4592CB09B0DED834AEDCAE0B629C +5BE4E13337BA87E9D64D744CA5CE709E528F7BBB7C35A3444D643B1ACDED2F6C +F4CE7ABD757F477BB4F64459886814743C8872DD2312EB952D5DAD81B0A6E52E +AF1915A81D5DE395BE25B24412ACFA3C65B7E447BC4B801B5531218BCA18B0B8 +D72809B5B3DC921B2BB0B76B91618064F45F614C3B3E0506CB24DF52FF8F2555 +6B231AD0088DBDDE51908430A8102E0246EE56870D08C960E00B9D49CFD7D751 +697625B30027C82D4B3AD0AD5CB90CEE2A2FF301608967581CC45FE77D67EFFB +2508905DFB42A0C335D1FFF2FDA1DEBE81C39628F53601D9ABAA6211D044F930 +70378306273D11DA99BE820BFF208CE0A7A81447056FA422428A6A21389CCFDC +5FC34E06B4EA5D9C5DA9AA401F1733E2CF6669B438134AF47130FB9838208A83 +668067B89C9025CC059E73C6B4C332E1D70BA59A83EB7E4407D000167DFDEC42 +8B86B4B1D5772DBC673CE5F8128858E46EAD3A675BB5BACF61E0D1114D5AC0A7 +D4BA9FD5C37FE37D6823A517F39B1FB14B01E38597E51BC93CB836825ED1A3B5 +B841CAF361302234A2C3560FDC71BCF6D8832A1D74AE60806863BC1F3271640D +73A10720CD078DAF15652B50716C0BE61EBDBA0AAA8A6DAFAAA327C69C29321B +251BF50D418596E84DC3BE92542887BC0785F6128085F019C1FE9EF33E02A968 +DB0504FAF26E033A05C4C37E5946EC500C5941F83318E765DCBCD06D4A09B208 +56F226B0C8A9C55B6EB087C936F7237FB2A3D2A262E9C6F95D454AB92801BF57 +B5788CD2C0FBAAF274BF5A8BA908CA18EC8FB5C52368DDBEC42F9C3E6FA16AD9 +6D4CB47C2359309BA3B458BD05FD4FB40EDF6B495DCE6A091E780B328BFA995F +869B5ED92BF513511C6DD88690114C5F3626CC6824ADD9E2BBF528158995DB9C +08888D928E420016C254485603C49FEA0D26E34850843A066F5628509183FB4F +78C3E0FFDF61E91C984D23DBC5677442559540A798E820E3F1BCC192456E9B53 +72F2EE0EFE321115375F0E43AB35256C770F5DC063DC7DD4CC59CECE9E7F3BAE +BD474CC7AA33FAEB2920A44D78A51D3B75964A4310F30CC0E33018D3E365F947 +A69434C67400EA09F40706320D603F292862AC24A488AAFAB0392C470C84C912 +11BD82A3A5A3B70D3DE85F3095A6AB122A930F8014AF527B71B424D29E91123B +0934BAA13F0765A883CED744E967B810EF265AAB4F7097A817E94C580068AF35 +C141EEBC26D24754BEC2FF730ADA142BEAD3DE4292E93A359E701D90EC594E6C +D1FC795EE82FEC8FEAB7D21C656D079645F36FC9FC9D7C8B35B0BF424FFCD466 +65CAD025F6C31398018304AF29117430B8745D8372FAE966404129C8BDD5F31B +BD827695C491C7E6D7B15867AB4C5DF488CB9628C6C8C114293337043B1616D5 +6F6B6C5F75238B27ABBB0773565A686BFAD3593BF53BA7C8272E1C597DBA0D6F +D16517424581069689EEBF47641F9A0E3E7367423FDD88FDFCE78426A0D3F0D9 +942F66169B84E5418C80585989E407B5415EEDD8961BABB8AE61BDD51AE60BCF +033F5360E7294430CDEB05DFB40C382D28C9834782B68F73FE9C129B7AAEDC38 +E3B6DD8DC041408FA064E0AC4EE68A7C07D96A51A1B7C65CA28951E38B58B774 +0312CE987BBEC2B3C6F20556F7E8066353CC46D8AF15DA8D7CEC2DBA8A3038B0 +BC09C733C76D095F8BBA0EF44D6C1E397B19A866364DF8EAD8E2E0E7531C7525 +8A6451008591A02C59FC1DAA7C83A3689A79037EB90522FEE181763D496A716E +C01C78642DFFE2589D3980574220F09B144072E6135DEF2919CC852056C82B8B +7F8EAC363D0D89CBDFA1B40505F3D356EE16E5170FBEA46B426E3D88FEBD8E23 +59C2FEDC109DC7A300FAC3EBA750BF6071DAF7327884D3C7467A15189AF18DAE +17F6605DDE4E2B2F3AFC641503E4DFE27F462705B356F7C17E1AA0E3D26C56EB +DADA9BF8B1E7149459B958001093DE38391374A78BEF8951DB54A69964525693 +63C5017ADE86C0E2CA89BB581FF57D0370F8AED9C95E326F88533E690B1C591F +ED30E893431F6F615ABB187130634BDAF94568E2E17613658D02B29A25F35F06 +7FFA714B60A56D2E9D586D4A4DBCFF440A2B47B179CD456EF099A34A56AF169E +5CFBC9C59516407286B2E11184F91EF25925C9274A6EBCA6BF38EEEA96E27616 +5AF1E9F5E84D9888F8EE35119C43CD7F02DA23C130A2D1A753A2D1E25E0F7478 +1ED3F6BFE62714F53DB12D15138189D0DA31E79F18CDE3FC84CD6D6B5EAF9E23 +F90A1703C6C9B435623FD375F926C8D013620432174B8C765299F6F08897EF92 +F129CDBDC3006D3755D3EB5D2953E182015BED56819D5A7A1773CE22214CC7D6 +0ACECC81DB66E1C6AE9AB70B77F6DABCC09111F559DF0911A87726B44AB063FC +1CD60C964334A97E2A6604CDA700C112450389FADEC5DCFC12980381CF6BD92D +772BC45964247E3E39D087B52FB67077AA8197EDDA4F613DD43D1A3EB7D6F686 +8528F7024C7A22B61A33E43502CD37E91605E0EF16D28A9A2806518B839433F8 +1802738E0B1BF0C7E95C4C1500887FB099834FE6DF4CD9A9D7547341A6D8CF21 +F49B9F8E7A9D602644B31396A7270C989F1A5BA9E3E225BE1F592D02D8AECA8D +79C304CB010A2645158654387C77AB0083D08A3C0A41B29453908AC57C181431 +101C6EF00A8A55B6CB8513DC8ADC5E2D6FDF41990E6B3DADBB607CF37411345E +42D0DC8AE568B2DAC69CF347B18C175C0E91CD34ECBBBF3DB1B5E6CBC17AC9F2 +8F77337D91885D14FDA32EE7A7367A3A382E8A894A9AD550DE350398FFF2BEFB +C05BB7A915B8DC4AA5AAFECCBF716F518CC608E1E76588CC77359CA228596279 +F95055FB260502B1377E1AD575D3C1FA65DC158057E071A56D2BA3BD77998B43 +938DC18257C526FF2F9625CCD7DF0AA3D50730B35720E75777DEA2175017A503 +A49509775646DC8D8926A75D64548B9E9C01AC33502A7BE04BA31441D5F39CCA +F889AA4D6B0CBDB9023F05B39DD7CCCA53608173E9DC5D45E772A3F7B4F7C4E8 +C3F7E7DE51770B2C887F14C473EB4F1A2FA420F64F4DBA1A6B651625F2AEAEA7 +8A030BC2B65BC4237AEE381DCD24B6E9940F39EF1D4BF81DA1A25140BBA7E1ED +FA371277B13A016B264B14833BCBD14E6B3F71FA822CD0E1B174B569ABDB6C6D +CAFF1A208C8E409623A051033AC99A06FE1FDA685CAEFEAB404804A701A702DE +79EFA5F9DBE3587A2B8434BAFF152B9F18C574FDA77AB286FBE21AE741813B4A +CEA10B071946CD4EC410BEDE7C68CD0B5142C2A99C836861A5B6A07FFE60E7E4 +1201B9966CABE2B10E71888FB8FC43FDCCB882DC2792994AE178B6129F23FC45 +32BFF56904E68A53B85FB8DC55D917C7DDA412625BB28CCD6A74273F5204CC07 +962DF7D462C57DF81738A8AE709F63BAE35532607CDDBA7CAC46F6789CE52010 +D84412E3CA30A0B8DDDE45A1E9956B4A7A8199D3177B5CF715A120FBA413CFDD +ECB451EDF3DE65A8FC8069D4D1F65890EA6D6969D8663C5909ABAC85D4941312 +CCDE68C63BAE2DC990B6D119FB0A8ECBD5A11C503A668FD66168BD051E55CCF8 +D0022F58FCD3B6020A70838B97BA5A54436F41D26F4FB60EFA36F9E632BA44A8 +A21F57BD665EEAF35BA65A4F2090F3D831E14B9164183C0565DE2352C00C1649 +0796E84BDB6B679DA065AAFFFBFA67CA8AE9D024A3700959262EB552C67FC216 +E61CEE4ADF9BADF3A38B4A618BFEF4CE0F96C5C382641C99B706A9BE793B24F8 +78CD09F4CCF19795F93B8B35AF5598470124204927C7EE6D3A87E05F40626F07 +B9521BFD489B136B01F406BCAC98D60130A298C5C455B0B2CF05465D268C55AE +26CAB1A2D4D740EF3D90914D334910DB05B5BB62B6863A4CFAE3834014D94C38 +F8E20C677C6A8B6BFA4B1EAC29EC87CE9E3E08C458219FB6B719089AB6982F75 +ACF33109F84FC1C7F0F542FB61F78587B7010265B411CCF63F00EE397C6C9D39 +2E33E50B1182385C79773956ACCB5970A8758638FE8069401540EA209B2D5AFB +3B20D9B33A51EECF3D65F0DA2C2063BA2A2AE9164761FFB5D1D36F2E21F29F31 +D2852443F8C6316545C9D413F64466CD7CB3D0DC23B5C282FF5E2F91B63B7486 +83800E8CF3D07434DF16557AD530DDFEACF3CEDE34C7C4ABA3278E815297C7E1 +DBCBA8FA4291D43F1D1AF0E35B0E09A2AC97F10A93AB9F2510BB690E3C635D2C +986179ACA326D19BB958BC60382A9E8C765A978A148CF02403C2C9866D78F05C +3DCD029540EDDFE623C9F016734B8BC19BDFB039BFF4FFF409DFF33F62508298 +B152FE332127EEF6B236AD5C1EF9B145849788311477ACC365D9E5848626DB26 +773F93F0C44AEA8B014A5A7125D09E28761A8720DA53966B251BE1C1534599F9 +B246763A28D4F9E3C52C33670EE390FCCD476419FA1C4429B31C055EB8072D74 +0C1FF3311293F931EA7F73A35E870F6D81D0FEA3CC445C841BED7089A64EA42D +947359421B7EBDB671E2E30306912EB99A754AE5BEC90783DBB14BB0FB3FBF95 +25BF143F7C9D9D6DE690C88CFF219075D9F9698D23A5C428F7418DE625217393 +0B79113E1D56E74ECE402015E0AA9FC320E447AE0345FF429359C48D617CC9B4 +6FBF2F72C9DBC94794BD9584E23F757C49425E7665A1A97CCB278AF1016E4969 +C813A40590E738E70C5B732537F477E9B80B3860B6FFD35A631DA0B6BC84E4A3 +8C1576C9EE90FE2E5FFF30F1ADB9581C6296D442FE1D3B3526780C5F70F73E07 +0233A3C769F74334BA6560ED81163307DC4AE74060B736C49BD83A837CCD7EF7 +44EC891EA5828026982D9E56834A3663150A462939E6557A5AA30C47C4EAB037 +589BC1710A9F042AC39006A5170B0DB0A952257D231498633D99B3D405C2A4CA +D064E43E50ADABA18A80301460C2F17965C5EA3DA09A7C96274AA1915FA9E98F +059358763626AC7EDFAE84B026CC16BF40296FA76396148C57F5C0E219B759A9 +33A46A922233E0AD0FC248DFEAD35B8B6EA330B97BFB4A6AA6DC27DF5082AFC1 +C17A6DED72F61D0C7F4DE52A3AB13734E55A875946F6D36703BDF1B917A758B1 +C1B4D00A52E890C43A7B8C0BF725F82FD416DC8EF9BB6E0487D7682F79DAAC6A +C9595E33481A87C6CFED013243C5BF92AAF6D700006F608E30CF70FE9E9E0835 +255F9ADC616A0218C7D4892B9188C61C801889291E17344448ED2D8C56095302 +E71CBCA27D70DC38B8BDEBCD7109D47FC1B6E6399F07AC085BE592FF9B5E4960 +02FDEF5F965785540CF412743E0C71126A68272CB23128133090E757249854BB +3F271F2DD8D7FA66985F9C380C104FC3A1A69A0CC03E2AE81E1EB3C7A2C3C297 +BF91DD1A6E2B0D3798C3535717F8046E92EACDBBA1ABA7D68D08AD31AE673BD7 +D10BCAF3324CC5A668199904ED903BC88746F2995ED2F5B1B49C73C34607C632 +37FA574A1F09D9C42789077425B8153E8F7F36589B1EB8917C87FC29A5E97E14 +3FAB4DA5EC20C38DE0CD0863683B58DA5C412A72C1BB8280A9236A1600BAC9E4 +BB930318B55E3006E5371157B1E2567C9AC8FD1FE196AB8AA86EC2A27B5207F9 +81AF2F85115BBF22287BD8A041DCEB89B3F5DAE811F1740D010C345F53FCC8C7 +BA7C7D685ADB01AFDB0D30CE7CB0E3BA122B9C8FA4F2CF4C5BB5793439E57137 +9D2E63B6132100B459F31D822AA742DBA61B8CDACE93DA530A66C034125344F2 +DCAE69E08FE774A5E09B29466898ED616EAE3458478888DEAEE12B6C1E2B1228 +A8A7C9AD6658D0BDA20DDFB0B4D831AC61CD216A60DE294C7408F7E34487487B +B462888649DA65F548C6EDE671FF2967FE50331006EB5E3636EA8998384CFFFE +0CE6AE5DF4E49ACC5574C73223CA5904DABBF73437D55E2353AF9F7B17E33771 +775F67FF5C53C5D45C40E60252F70ACBDDC054CB3867AF0BA7B01EFACB67933A +404D56C53520278826DC106956E120A34A7E2B9AFF2B46C2AB3E64FB38776E2C +456B5901398E5BEFC7CEFC35AA61E497CCEADE62360A0EE94D0273636A6CA4F8 +F144CBA6697FE4707361E09ABBA371A5FB8D8FDD319ABEAB87A5C3AF9889AA70 +B53E3C5A9565AC1A2F275EA303D579A0221004365CE864634BBBDBF5036CBE63 +3B5358E8DDDF56C65BB54A9FDBA710A10F9E6C505A2D8D11A6A17551616EEAD5 +679126F3C7D52B17EDF2AFE286454580A34F1BD963699F1AB742DF7CD9EE4D34 +17DD8BA2497BEE1933B02EBED1161165924F04915D1A9D227B719AD876995D88 +7C67DF53C14C7FABDC5B4D773CCF361BC58413765E7DD21A439E86B74795203E +24ED7491AE6C9FD9CF3310D3FD1E91FD3F714013722CA2B13DA3EAFC49A2506B +58B3B2984A1933CADDFDD10C628BEA54C798AA4E0A84FB4639494814FA18D79C +147BE5E688F182B901F9730DA6C8CF362F915F69CC74ED4B436E5DE3924D7DB1 +6B4728BC39E8F9E0841865BFB0AEDCD7404D48ADE9EAE74F6C1E9FADE513539D +9056DF8B2F6168A86405EA4635C19E128DB67D6F7323BC14A983FF1CE808B4C1 +F9226F3C6521310DED43A16EA768C8395E6584E90C5F24857BD989C1C6C2C248 +06D4BCD3C2E271C7AF22210EC2A3EB1A73509082819760E2AE9950D761828F9C +0D1DE7B23A9DE64AC61F48D45956B5894815F0DE950FF02FD0A4E0355900C665 +D1FE0B411D4E34B093E17AA8087B606AFE7B2E909AED96B799922953C8416148 +7C3CF96E27365C3A4CCCD78849CD9D9D498D7747EB8AE8137B16178BB67B7B36 +E41780DE90DC23072DB8916BC8C778B79215212719A88744DFF9AF40980996AF +379552BC08C8FFDF6605FEBF9B3CFB6D3D27D07C49554DE4844981DBF08A43A5 +DDBC572CAAF60EF7F8C4137C38B057E1AD5D953FA64E6844EF770A9B19B7E643 +F376273E028EDAA0729CD722C57F05023957F93B281F91510ACBD72F476572F8 +B66681AFF60DE653F4C8BFFB5A9076447AA5676C08828D7C6AB803AE9063423E +3FC8F0E7DF5F8238EE36A7B8DBFBB88DFDD587D5C9133B69C6E4B86D4FE42886 +F0BAA809350CC835274614E4DCFAB77A8AA83916E5B65351273A69E6F9B5DB39 +205E3A62C2C4F483B3D8BB2C4C7C72E2ECB6E024A275DBD82F5A1A9ACEDEFF4B +9C5175BDE3DC023253026E5E321A0F5867654B8F11076CBD6D49F2A7A1F45420 +9CDD551806DF00372B4D0426EF46BEA85816AB39246F38427431D513FEF9E143 +64F3A06ED9F59F1F0C250C9C6D45FD2B6C69375E9E0B89A4478A5EC458E132FC +433E8A93D3497DAE9E1AA0AA7CA895B8AF67913CF0D13310DB883D388AE9A35F +F5780A0AB6D55CD9B976014689C185E9455AB5B9697DBA8B9132C517133CEA4F +CE40FC2BD4D9DE31A6A5F60E00C781F6763DC03DE8D159CA70048B8CF6D1EBB2 +2BA6966CF523579CF5FE324AC1C7C12A50A8EE71A55B3A6078AC0EE02E877A02 +18F886CAF9FB51F29D01E3F4AB961E5515454D05490F4C57AFFC4E63C0D1FFE6 +C4BCEF8F67066A4284ADB88E569F0E7D36269A6A0DA678CAA5C1B1A4BDD3800D +FA3E3624A3698300BE00884235A996F611644E19AF114AF29E045FF2E4BE248B +7BE9FB19B64B2DED77D5CFF8D85A332A33EF073BC94E30BD78AACE2B40C9E04E +1E88D9EF0F0116E27E9432D461B64FD5F4055EB420963FDA20CB8D746B6AFD30 +4C70C4DD1AE440D04C6DE4F876BA09591D1A7F7F5755DB5DBDF1AF0FBB9744A7 +051885F2F13400F77297D66BED2FB53CCE01B56A7B0F7A74DF38BBAC0BB556BC +9EF9F4FE429DFA89650BF6453FD1B6F472427FF2F91DFC218BA4690C55CD23FA +C7E2B86EEEA984E0DF8ABE65813C6E9068B878F22467E7D981601238F82A43AE +4F61CD56ED2C3828D7DD53AF88655ED8E00FB33795EB13F5A166626D35A94AFA +3EA4331C79B44C8AD4E85E8A58248B83FF91BFB89C64CAE2AA2EEB95677B075E +3772681DF3F512E315C7266B9B6DD3C38619E8F0813451BF48660E137FC76714 +F799E17380CDE5813B4B6217B0D0A7763A754065E2CE172EE6DA76FF5038C614 +0050F3BC4DD98CFD8C0BF526ACA742F4B79B53708DD52EBE58B00CBAB52BE921 +C131A671AD85BBCDE61B97CB147D9786EB2C01DB4425E827C3297F9886BA6354 +C526D89B6B4629CF7DBC38AEF5D3EB58E92A7BBC14F796778BB3ACFC654E3CD6 +9B0C5EB8B24C3279D46CCC0A3EEBAC870EFECBAB222233E62E76022E9C80C109 +70517E245561033028135DE10E1BD8FA0BB9E5FC89AA5197CEE50A98EB778B63 +BF0E7A97BF243FC8D6952C78192F19753BE77B576486D491344D4DC5172F9655 +EC6D86C591840E8B90AB507C63A7942A88C5301C8E7C9AA2EB41BFDEBBF19DB8 +A905B90FEBB86086E2E01600FB897AA3EB954761045B00DF247C796EBD4E8E18 +41894D9F62E4C8551944FEF97BED212B29FF795A02979ABF453C0E83C00AA39B +E95AFEFCEE23B58571795F0358912C7396AD8E05373E5DAC0F76AF1B7A5406CD +2D82ED5E0F014AD1512DC75D71DCD22443E7A071E27A52329A04A18E12E4191C +57DED26A8573ED0BBCF6417D993269E56241E45E05A61CE72C63252D908DBBB7 +ADCABD21921CD36B6C2B1C4A5D8E6ED8F29B8F6AC9B8097F477AD77CE01C51BA +00BE8E44D5B3D3389E4ED09A7327763E7F50426CECA5424D243AA8BC7E7B5529 +9D14434148B294C2441DD0A926B678211EFC6A48EFE84130BD4D15BBD2CF1388 +B5EF11940CEF3CDD4AEE073AC131947B960D716973E63BB928977EEAD41B80E9 +BF08B06F0F107B4DE2828FECF7370578FC116F03ED602FFCE688FA6D25E274D5 +519B1EF07165FDB10CB32D3748C33CFB601C98D17F274887B554A596FA9B3C3E +63A7C426779220BF013EFA2B30448FD9B20790F87A069E0704A1EB4188A4298D +6A7ECAABF7F0454E3E7EB98650C2BB14D2B08F2265B439FB20C74BD93007DA70 +EC6C445351BD0607997666DA0A56A186859237F9BCCE4F4E594BC8A81E6E22EE +5A58C7B349DDCF0F753B3DEF9484B841DD1428881B625A4E28CE54CF896711C9 +4D380F508081C26CC9090E09C9C6BA12FAECD7074E2549779CB6FB88EB1368A6 +F709F6A2CECFFC5CCF48CA2985BFB1CE3E0FA2CF5C3B0F612869171F3649ABE0 +20837D908FF436B01AB54EE132A8F0D0ABB4C1015FE6ED45575B1573AA3F9D64 +66B521470DCD5C73ADBDA46E86D6EC5667D2AEEB5F7938F42018E1541822E475 +B11180512375AE63EC7BB000883043513928140A23CBB26658A6B0521F8B8DBE +2007353A924E762BD8DD3AD901D81DBADAA3DF3C2ED5AA2163167AEBD049390A +F4459FAD558F3FBB3B805EB1EF332FB14F0C677FF9CFF7831F203383DE4CE7BB +8CBA629180AFF36228D3997BFC97E051F2390791B6F5AC0B5AF929107EF3CEF3 +00894DE1693653C33B012583EC5FAED006BF9410510A709594D34E558DF5290C +4A36633EA935D67A351630E6F75FCCFEC361A8298DD7C9DA2326C8EF247481EF +20B8C91013AD02613FB321DC00C7B9EF87ED8AF212D769C0EC1D8F116950A60F +3FB2273E4EB993A8CFD3787C86AAF54CE86DD44A9A652307B7EF8BDFF73942DF +F52AE037D5D9FAD5E2D673F4346921B642EADD945164F8B8116C24D7A5EF8845 +0D1199AA2D6C6346075E1FEA51B351F6688DB0F9D3DA6489C34C9E1493038281 +D5929568721CF3A309C21FACDB7B4AC9BE329935446212E060629507D78CE8C4 +C5BA819D284C6AEEFD81CFF819A14C445BA6DFC9549CAAD4CF56FFB4FFD46716 +C60DA7F437EC08CEA0FD4711D745892ECC7AC2FD5422CB464D42977F991BC3DF +52E26CCF63B0A0D73AF537712F551DF4C8A9EB5837C6CD11119603EE13228E6E +3326A8A9484B9FBEF42D121304FD19581085459FE250BB3CFF7B689EE65EFAF9 +9CB50E6DF0DE0F2785EDA4C7B9E7AA036CAD799C8451C72C8387EE5BB933851F +ABE54FD373AAA654DF7B5646427BB0165303DA86B8A778F4FAB052928B6ED9F6 +083D9DFFC0FBADB4BA284BF9E3D0F45337EE4E52138044E8D2D9B09D1B3BF028 +C9EAFE1E2D352CF101B1CB1546A455C3264E951519FEE78C35BACB2A4103D5F4 +78A555C6E7B706E40B55115364E3690C7A7632B74CAC15C54D97662DAB2E7549 +777A7D0F70F1D20C5DB19E77FF69AEEE8DDCC120783D327817D3BA0E2BB98D02 +123CFF3299A4475153DD03AC6ECCD53B7395EF1BBD235E4E635BD925B46E5E9E +DD4E3818F1092525B84F504450523420B40140F7AB6FBC8441779B724B371939 +CBBC534E8AD2EAD3561DFAE319F1455D8F4D6F9A20A73A79FCAA449F067A1AAC +90D25E25BE199A9AB789D2B130605CB19CD2F3D97130B38B6B493DF57325B885 +467EAF56A17FB05542CD9567B0E04E291EE8E9E19ED3EAEC6FB270FA3F477B65 +4B60FD0A5A0ECE6D822290233D2FD6D0ED1BBBD82E5F0222A18417773597F999 +D3619B41BDEDC612072E87FBEF1ACECF313C297F4D6B27837C60FD840353C902 +31CE101BFB0B80450E991D466C0D33093450F373EF24A82EDCED7B9D0BD658FB +8C7422C078FFE08CACA51E7C14795759B2F8A100D042FA3BDA944E6412659973 +4037B9A540A20DABC38FB0F6A346E50E04D530115AC770669BF34FD88238EF5F +A80C403CDA940AE1CA5213E8A06E387EEF3C7D4941D634C3B3BBEB133BABEFD4 +28D3FDB15075E1A6626F90303D4E3DD558B910308D9CF699AD02DB06629C894E +B09D7EDDB076FBC42ECBC07B8C248F653BA031FBAE56D61762B48ECC3DE15CF8 +7FD07380AA03FA30DB29CED313D5EC2F8C21F74A337E76C097AF48463869D0A7 +20F46A5FE98359236E7DEBF231916B70AFC44E201F13215D4C0A017EA43ACA63 +F86A6458D0AA360E451DC4E3F864F33ACC0D5187DA632DCBEACF296C6C85A42B +A31E58EFD9F8B19893B59525B1DAEC780A71CA6FD27CA22C23733382E6D46689 +9AB673C87D7C6302C34FABC19B4BD25CAF910BA2A2957DC98917CA2BFB27636C +80F2A056CFDC2CB868CDA68F342AAC19538BA177B228B3736D6050298F868F8A +E9F0 +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l047033t.pfa b/client/shared/lib/fonts/l047033t.pfa new file mode 100755 index 00000000..11e8dcd3 --- /dev/null +++ b/client/shared/lib/fonts/l047033t.pfa @@ -0,0 +1,1353 @@ +%!PS-AdobeFont-1.0: LuxiMono-Oblique 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Mono Oblique) readonly def +/FamilyName (Luxi Mono) readonly def +/Weight (Regular) readonly def +/ItalicAngle -11.3 def +/isFixedPitch true def +/UnderlinePosition -36 def +/UnderlineThickness 72 def +end readonly def +/FontName /LuxiMono-Oblique def +/PaintType 0 def +/WMode 0 def +/FontBBox {-15 -211 758 993} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078985 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83D51B996CA62E18F5E16 +E975A60A300FD933D7A757982DDDB53E6F052956F0A57B2EEAD78CF7E7056859 +D267B6E270C1FF751B2B0803C0B282576AA3575CC0743877BC5F871D3E0260CA +F07EA74B7C3BD6E1C9B3441A87CBE0C24C39D5CED05780E7A051605C83647B3B +4E86D8C9CDCBC1029AA84E30E1903B322805D506160BED37770D3317D2FE2469 +3B12CC7ACC1E3BF68E1F4F3AA7AACEAAB78CC0288FC854175DEF8280BA4981A7 +E88AEA83A0960C26504940E1104086BA90E50BD53FF14FD9EB047A0FBE45457B +B4327143B7AA30A23A05D29D397FE113A6AEF33F0AED8CAE911EA27A56560D87 +1317E25F10F1FE017D115ABB4800E8CE8926A3146BAEB4E48DDFC4834F93F488 +42CF2A19F662EA9A223B7F12DE1F71E9197DB954D2E57806F6CC5741E5AD0EEF +0A47F7D6CBF12D269A2ACCFE3976CA6829DC8BCE2165E18952C86A417777B867 +93F78E7A83BCB3FFE7891DAC14FD7FF0D327E664BF01093046303A3D43CF4E2D +1D22D2CC2900FA2D274C9A5E857C780DFBB1E935E529EA1903FB85C982282A15 +A36BA8725067022561F47DFDAE8B913B525718B98BEC9AA28A50EB40A96D1A92 +EC82A03A1D24CBCF043F743547B8DF642E7B872793C2D61ABAD6B655233F09E0 +509B371B60CA55FCACF6FDAC2D1FF5710D1E9613F5837963BEA103D99E02F9D7 +B75C9D78DF42286BDF35A50997D6BBCBF08309D0247C1E9410FD6F1A5BCFE056 +02A6C4C5C6E54F32B1AA03A7B377D0F8C5378DE4A6BD519FD954BE94EECC40B1 +1B2B14FAEE89675C2D6DD97623A9EBAC87A08DBF8A71417904116B989D30D794 +A9ACFF1EB9FD4EB6627F541FC552E3602EAAC4798761225FA682C5646A21FCDC +FE9934A59F90722F6A4D1A4BA63C4D44412F38CF175A8FEFDF9130DA4FA2F614 +E6842BF6F2D1DB5D8CEA85ACDA992C3ED51F60422EE7BD353AC911432419B925 +629BA2CF0CE7D2B93AE1783756F78FC322FB4BD50986AA0AB7B789DAAEE7416B +8023B87A09EFF918BDC4147B761217310B1467D92B15E49C3E15AF62D47AACD4 +AD77F5AE7EEFF90937C6FB7A0C27AB7EBDF1D97E1512925D772B114BB44747C2 +9170057AE71C3A36D11E1B8AD9C1CCB207915DC181A0FC47E0F66B1018EB091B +54602D0D0F74463EEE996ADAD5F99148CCFB27D402A59BC27D610BC0177BC0E8 +CB287101F44CC082E657BDAD45DE4C4E231522E56FE328FCE34D38B020D3E34A +99A9CC2BFE1DEF5E1129CA82364C6D62A346F94599B9ADCB5459507A92F19D72 +9D461A4DEB9AB96E86C21085F9587191E01BF047B383C1DA20F1F56866D370D8 +F3DCCA23F36C776866BCEC11F8451FD632233B2973A1A4A64B94558A92A287F5 +074A8C0148F2AE882FA202212C575F5B32C44C767CE47A8101B25530F8BE1C8F +B45642B3C7C2EF7FEBA3A38EE6BA20636A525A7A4305D8CA22BDFE84D0F95F11 +AE5AEEE2D2F22391F7CB647E1131C0853DDDE1C65EF3C618B286794875DD6690 +7ADFA1F1812F1F078C851C24E2B2C31D593589E9F27228CA21AF66F4E649B6D2 +3F67B91206DBE74E704276634E6032C91B71CEFADC7BFE832A8955F139F56981 +3422C47B3E8809B23C259975D466440820DD4E9E5F20A24787504667FAD72202 +83FE9B391A7CF5F297CDEE3DA8E9B9620F1DB2D387351409D38A9C120367E388 +4D9724EE90C5BA737B847A5E330A23ED12DB609837BA866780582E486C89CDEA +39D101941B7608A5633B6EF6FA9848C2F8FD8DC9AD48201C98A7E72C38861822 +8DE5C6800E152D2CD869137DCDE16DCACE6019FFD26751A5689967512AC8BE34 +882245228E4774EDFF6C8E4A805F854AC5CE495EB91F84876A1FBCCB65F5E896 +BF07B3AE7B4B6F388D6EE0072BD9DBCA176D225D0F45E55F492457FFD2CB27C6 +DDBA44578E2AB640190F11C953C3C80CFF99D2FB39BDEF423AA9AA4DB4D4010F +BAC17523B4B386B4E81B98F0AAA487A38641A966C829607521C7CCDFD1ACC6E4 +088F0295842C8F86DB2D05311EF38924840BC8FA3E02D9B554475C09786CC4E9 +F4B942030E1765F1CCCA561FDCECD1579DFE1F6B4A30D35576599941A2CAD8A7 +783135720E6AC6454BD4F1A7C1A1CCC9AB629445A4423AFA2B99296B2A478735 +62DEEDBD02BE125A4F7FAAA55410683B4950F60131BC8969A7E52BB8E11F986B +5193BF75D36BACD8D2B732FFB29A5A7E76E6BD785EB1F605D035B653276EE252 +344EE302BFD7DCEF9C1DFA24532D6E0AF7F221ACBFF7EF479F8031B8C836ABAC +FE89FEBF57CCF8089F9387AF1E919B815FDB85C69DACC562FCCF6BF843E088DD +E64FAD2F51D22189D6D2402FB12C9CF390791BF3F628C04978EF15CC9C2EA909 +B55DB3141788765F610587CF76FD63C73FA8FFE8F7697529D85F42E9FC0DABE9 +4DEFBDE3BC659FB168A8C4BF06A57A8661EC248E1579101F4B7CF022E7186675 +EBF6E5F8C3DA362612D97EE664BD10A0A81DFCA85F2C3250BA95B0903B45FC2E +34AA1C9900C092C3C1EE4A514EFDDE0F7BBB3FAE4A7019B547126FD62FE6ADB2 +17B9F504BED3487D1CA9DC6B5DD9DE01C2CCAEC45A0E115C251B0E9275FD216A +9A7445B40BEEA1E99997E81D10C6331797DD98C94288A64DD4DEAFB68E64806D +4B758A177694A38BB736D5C799F8B64FAEE01E8DBCA99597F0DC4DADCFACCDA1 +FC3010B68BA528E49BFC3A72AEC35B084DA9BEEF372C53AFF900824CE31269AF +9FE252457BF229DA29CAAFC67A6B91E2B59922379302D243B2BAA44A6D24DE8E +9D7470F7987C54DC3407221E1E90FA763B03536C9FE5DF99064B716412EBB665 +762686EB4249D83C7D80B27817DDBB152DB064796102467E4A604EF3328EABB5 +3366D50B9E2330CCFF98A8B98DD6E2C39AD991C8921DAFC4CDFF75DDE5E2F2E2 +DC1D8091B7E4B03A9772298DE764FE81410506B7FD8102EC4186D6AF7219DBBD +E11BC975E26F8057F5EFFC1FBA8E80C4653E80F24347D8D5697505B9D3FBF980 +847430935126B257A8E0B1326AE1C06A5EFC97F01C45471C7A528C550D2FBA8D +9CF4235FBFD4340B9CFFFF0802EF934183F93E0CC81CB125ACD01FD01B669595 +00A7B8675E1E61515594C1612ABC6C08B93732760B843FC93880E9A1700FB89B +5DDD227A3BB43D2C30A953182EC1717EEB6AB016EFF3FF18108BAAFC62AFE6C4 +819B12052B09742A16F9C86FE887BCE63B23A422FCB2531235CE49CD4E7D3B85 +EF05671D86BBD1494CFA9F2E8A9AE5C0BF831B6E537EC57F69626AC89B685D39 +AB226C5339D90F0CD595169E3D3F70DE1B05CCD3A7B54AADB9C0D0BBF1E35D47 +F55ACA00064767FA1A02318CC3F90635CEE5944C984148BF437352CBC2122F42 +26675385DD0131BC7F41CF4BB9D914D29972DCF531A1074055477B3AC44FF0F1 +D895759AF4B365FE9112BC4958191171EBF1EEEC3DFFBCF23DF9679CA9350A6D +66E54A3EACEF4390B7CD1A9C88C53490119121DA5DB6E77D9E065E9EC2B0DD1D +2A276275A9CCF63D4462A2DAC9B3F62F20BF5C8B3FFAEFBA2971A0DA0F78DC73 +FA301543A932076CC943C65D5147E2A018209F0D2C18926355994F3F17AC6310 +909B998AFA45EB9B9E5225630821DD05D6035F9677F839A7970499234D93C0F5 +5167BD2FCD1A8D3FC1850E21978C3E09188688E383677E091DCE521F65A8ED62 +1020255B64B2889C787963D0466EC3BBB6BD2A02907B6D8355A3149EB88E5EFB +D95B59470D51616B93B5DC90C84564AF3126689E63DC98D432B6FAE3CAF328CF +04373D09BFA77F54368D24D546C7B7FCCC1F66B7949AE19136EBA43BB5B0FE54 +E0E7EC4DE599DEDF4B2A437985235F08142555F62282CE0D0187987F7663812F +DF9458012EC5EE9624024DD39C3C6F3862E12ACD7D7D993F7A36A0E08E777C04 +DC55DBB78C02639ADB7D7156624E00CCDE7B3637C8DCFA60BD96E03786E27237 +180F51C3613F2C1B5C38F173A5E6CFE20F074C3BCE04556B6A6F2677C83DB5D1 +0F3DA48AA22E8B10D61132A58534C477D8A6146F60F1201801046500D37541B8 +F0576F790E918F92ED070B31DE94AD7F46EAF05F3677BB5041F1899BE14950F9 +7CBCA06BF444839A18126D23D57D567E65F9D4394F4846D88F6D3EA9D76BF4CE +9D168701DEC9254F2F0676F27917D25EBF495AD97144886A468F8CFE1475C3BB +DA73DF9EE532AC7EE2D706824B81467A9A2EE84C5D6205C4E1916C8250C778E9 +830718DDB534E6BA14F4A1D723CAF5A43F7668D6235580CEF1D296A9828F7397 +1D97D57748460EBA113342449E28B8EF96B9D0B8AD79CFF9FCCB979C86F14149 +4970698ED1FB72870122807321E0E2C3B1FD9B6B88FC3144A594646335BEB914 +B8882474AF2A0315BB55C1924EA4BD6E305B7B92E2BA498F5EDF6E0C13AA9A10 +218899781EA3EB98E9C9C52361BB9338766F055198970A06812DAB8EFE4893B9 +AFFEB1D540EB70D18CF3C8D2CACAB15A0D158E21958F020427F936E15F969467 +D2D998C50541009AAB95BB2844A0F1FE9E3394BB64A6B1E5AB8F98E9311A0CA4 +38CE611ED06E80C9DFA8B380A89AF7D18D1692DA62D816FA3E20DD647958F52B +9C7219C4AE3A6CB987E1C0442D1F92BE6121DFD75A4E7F68A4D3E6F2BFBF000F +509F8CFFFCABED431E5CF48B6BEAD630ED02D893D8F3A16E97E91C802B23153D +A2E93A3A9BD228AA835C9394085111344805E53B23459251A1FF26802D7A736C +9ED13E9B53D9BEC50A3D35624431F2E27E05FF01E56BC64801D06434C7179E81 +9390FDD19E322010950F09F9A36878E41D9D3C2E4FE37C2AFDFAE9519FE4939D +DAAD914E331196BC856E68BDDCCAEAD7551B0C9808E10A92D02275AF1A5590B0 +CB71F116BFC878EEB358E741F35F8C69BC659B844E2946E1FF649001A6A2B1F9 +F973DE46F57A27A567EECCE8A1EEE48760C663F9D9E5665F2038767CACCA4A9C +C9D0C11D846A5C649B52FEC6B42EA6717434807A999FB70784E620E9E4F05638 +7CCA3D6BD952B69AB9845FCF2E197455DB59A118B8C43C26E5693170463E1DAE +A8CAF498A7036EFC436AACDF9221A35AC4175917FAB053818A318F7CE4C218DF +EBE15A7E773CD4E988643B09D6F5482B9929D12A1C3A8B6611F14FD47C21BFAE +674C10B6B5FA34108CE615812F9D0E95E34F84BF024D6EC5AAABF6011684A03D +E83B69273A74D75073A380781D38C7D2A317086D80BB9BC3F99EDCBF8C3E4077 +39FCB1D7F88391FD4445DD94E2F193839B3A5C2CE65329FBAF0CE58CC24D01D3 +539D2C0F94F65DA1E5BBBBA772997227B2A702EFF5EFEC87195F6905E9A9ADBC +B8FF45681D61D02D28B119241FF8C8B377195451FD30AE615EC2913FD53B8DF8 +5E2E4A63663FD231758FCB97DFC18F1B522A9C1AD976C4FDF257E1D529E1D325 +34E6C1A6D8339B6A61577A17947148481A62C5E41238FA86968A3ED0DED467B3 +4AB877EFC912839525FF9A52C0E86FC7A9D7499FC0A75C604299099106256F5E +EC8168FB9343C144A726004BE642D55027DF9B18B80F9EC609A91C8E8E1E4AED +FBBED28CE193CD71F0F24CB64F08F936B7B0932CB6466E1BA4D8EA73E66A146F +12CB155775FDBAE83E6AFDC46E9A0680387B6663919884E88BD13FC117963368 +0C637980CCE4B7F393A7A7D4BAFFBAF563CE3358CB959BADF631B42E21E164AF +81AC41C462EB987D4A90EEEFEC128D1545C27A8A34FD0781F85C1FB588B2B12B +3DD933BD3C85BC4DB4D6EF64D7A1E71A68E56894E93775823EF35513DA281866 +9AECEE4647B99680344398D121C290923103E463B7CBF17514F32D1201FA86C6 +75C00997EDC3C17DF62E0A4EDC539167A79AB515B0712CD5702B3C8ED1662A5D +AA8994BFBB26CE64A54A1AF3B2373E8215CE0F64A6BA038654E1A098DE4E67EC +EF8244DCAF470EB351B684722E9FF7EFA6FCD589A1DF28B713A585F013DCD268 +4808FA1693FED0A859BEDEFF143673340F75A50F4904E3FA2351D874ED7DD95F +149C82171CF7992CE2C64C64CDF1E9E0C9CCEF0DBFA5CEB4B20B4466E1079B0E +8BE6CABDB2C771776DB783EC1E4AA66FBD34EA8CD04D253B005D206916B19EAB +2F89BDEA64268DBA665FAA0D68D2371EE1327D0C0CF18FEF2CA99B93A322FDDE +68D8F289A92C39C2B6B722DC1DF742BA4B1BE35259F0CC9DF36FFDD4E037B512 +364BF1D2D450843A1E9651A7431424BF1425AA1C2CC5C8E0DDBC959966BC3099 +D792ABB111B5AF5D48027A853AA22167A6704708AE7AC5E94B0F233512A7140E +125D86625BB6DDD4B919AA9F322F34A570B772307596216631906BB5B8D856F1 +665D2168ED20C9C7B5D9B4B49584B4687ADD1D4F888229E6A2DA6D7CECC34442 +3D48FF83F6AA41BBEC5A5627FC8A3F6D9A4AB9130C6FD0DDA44B48434200E0A4 +B939668D041BDBB88B5EDF1916598B4E6A28B893C4C1817C14D1E2335533F236 +B7B62C425C7155B85EDE07CFAC64B907C115859965A617D383440944DB680D80 +B959CD223F917446FF9354D6C833AF334E8E1C8EAABDEE4FBC864B5D4AF6D0D0 +3B26D04BF93BF3DED0DC029E69DA8D7D0404DFF15E050B233180930BD8B87813 +1661177C7E5B5348BF0EC3B12682EB539168A4304F754F244C8F2FC92D24AF2A +27B4CC7B9FC94447E28DE63B3FE9754FE4C6BB25B2F5DC5869A1A2D088406CFF +893AF7968C6D4DCE14E9133AAC1F03664E1E65A15C440BE2E9D7F48FD6F63A1E +9C06C311A7990D17134F424C41FBA0351FE639313CAA5D5E13FBD636E512A543 +1AA47D50876064744E03B82CFFBA550FE76D4A3DF6481F178F27D5B2557C0690 +D702153C470986414604018F15C89DB61F10BB7CC0ADBEC3F7CB3359F9F85473 +94377EC80668B4947F508CAFD4E7566F388801E5CFF6DD19EAD712D1E2EB9AE2 +F15A76E0F5844A7D7609D654B6E32991568CDB99ABC3078D960C0D1125A75A1B +90B73079E29654C0DBA19565303A9106602DAEBD547C31F82C29DB4A98F6142F +B67DB4D934D42853462A2EAF9CB05D6E0901E8774491BD44219EEB9CF4FE4AF2 +493FA01140E2ED9FCB1372E6484D2ABE6B1EB5A63E272F44F7DB36080342F7BC +A63321982294C76A9E63823C63722EACCA6C6A90010D3343A89E49FA2103ABFC +C60D3DFBBEC711F50B739031C43D984D8D59A2A4BA4937B5A08E55E6319B49C5 +D36B1A39170EEBB4D892228788F90DCD25878A31660AFE06CDBA1E656C60BF5D +0A07A2104EA457D1B3C6E54D068C7094AB8D0B9FBEA7E66C72547B7F63B8093D +1B29DF5F16D4BE002A4C5093AD3567AB0E085C87DD97FA849C1811CA8014B54A +C1B1518E962E8C96D1295955C53DBA39ED5821FB1900F24DFBB7C8F1942298AD +E97C85BE7A0D46873EDDD6D5EE79531DB92F3A8DD319D89E5D59BC4761562709 +EFA2526749A5FA9632CCC71BDF953A4F0A26C5B4F383A7CB429322736F449F43 +570942D8393FA50AF619BBF760016BB43DD12DCF93A150D7CF1B41EBB4AE221E +3C2F91C3D9DA821D2297B0C13A4555E289BE8B900A7B7FCFE2A1AB4405ED44BD +76F459235B3A5CFACA4323E85FAC84BFCE532BA323A92554D9799B20298FB086 +EC7A1CEB5D36BF34E7D6BE96D8FB7CABB562A59ECBBDE044E0CCDC42B77766D0 +54F2B99E0A7454C4FD03E30CCCF3887CA6C048C12F9D1D8E6155D490E78833C7 +EE6085889F8C8DA07E233FDD3BE1164C715B07A160EEE303CAF453079DED6F94 +91311B6CC2C79343448E6C94DE4CB1159E00CCAC3DAB69443B4A52270FAF2DF9 +285B6FF81E7F2413E7A79BEF760C253E9AD40B28D86F4924CC02274A6E37102C +0716859EFA924E50581B092D2EEBD55409A211010729337DD11B376D70B2E816 +39E3F67B0CA5051F2FE1D6D732878A8665B255A5C490F6376021D7C3E614BCF3 +CC3EF1045CDAF7A6DB17E3C496FF792605D5388C93E2316264D9CBBD3FB64258 +F462A7F4EC677BADA2948E272D2EA4F7D45344CFE0764886CFA3FFC4A2177574 +168F3236BA418838B7C0F68B9AF7FE806F1057E97575A79D4815C707C5EEEF46 +3A37A0E5B3DF712246A50C8A1D08940CC73A75FB7E80F73FC044D56001AE3474 +BD7AB6A05DD79585B4084489C2FB228A7BC1E39DF7C01F9FB6A8E8F9D6675C28 +351C433CBBDAB5B7F9EDF1F299B9F3831D60F6F7FC0839F3E33239F1F75E02BE +2F0D9F0842A3DF1586DB930CEECFCACD4CD74AB61EB66B20C3240507EDC9B178 +B0DA13F58AF8CF48526D84D39D7E0EC4E8D2E83CF8510E052D2687C6FD00AA79 +FC426348F421771E9F728AE1DA40FC3A6400E2F00164C7640EE12F8B9D6D485E +C0AB79540F30441E97941E5D9920DA22439730C84E1404E2E3142966D2FAE1C2 +937BD857F6A44B76776FDB46E849DA71032EFE2A5B50349990B90EC233E75ADF +E940E4EFC436D15DAD29C10BA71FF988ABB796B659FC250BA6BD83561D00DD2B +EE1B4187754F0DD7FC325EF420CF64149EB7C010F4A0230F5C00E8EF0287A430 +FD501437E36B3CA17C50A47800E8ECCCAC731F5217DC39CAC15EC1326FE67412 +4C8B6C795C60587B4A9200328FD08CC435723ABD617A9C1EB6D6137F845F1EF8 +12B2E76659E88A00B35C3D7DAF9126E35794B2BFA733206435AAD584A464DA46 +11C6F47250EF166301246CA57B7A4A360A43A577560FA90310B9A41DE8A7A569 +11DB0902F1F8F4580D2C9990E19E6DE153D42AE72F9CD6654A09EC69086100BB +7C7F940DD92A8404A09B6CBA2577AFF4FBD1731392B404F2C73477C5643AFD49 +CDFF85D630DE9014437AFD41DDB2A235B606AD3D19A3F32DDA92502C833B27B9 +FE7EA1B93C4EF69D6C25FEF0919D5270F1FA526EDE7CACFAD9282558BE6669C1 +AD9987C7261825EC00DD51D806B2ACC0F1325743093B6B1BE15CB05582D942EE +7F32F08C3FF5D4BE9BDA66523F19C565035E56A2BC2610CBBD446735F81BB02C +4A1D232F34BD287241B57B5DBCCA8529FCDA70CAB0464A91CD99A0B68A5BA7DD +1643513B5EC3F79264DAB7936CD59A7953F563E5E34EF016CCF46F1C1CCFAFD5 +118CFF688015AA2B3B3F287295665D51C4DCD6E96D18BA3C5E25AE7886DA085A +C1A0FB9471BE802C6D69B23BB1E9AD88FE3258FDE833182295330067910857B0 +A3A72BE8834CB2A1DEDC38CDAE04D2B0CC5492D490173A4757421323238C8438 +A660C7AFFA3C261E5EE4CD655B19B6FDE54760C2FB0955941097301142206565 +D048CFE4A7148DFDFB2012490C551A9309FCFC651892242EA852DA00FD19829D +1838904AE7061E21A7F1566E70469F52BC8B9E02EFF3D944B162D3C563D91E8B +28382FDCEE78EB8A527C9B6FFECB466AD43E0C0DA5C16831467F53EDB0CB8626 +BA92737DA27C98AB10C97A8A76353D3F975EC666FA00DB003015608CA6BAEEED +AB8BAC7D02A6607CED006DC1B4AF02110EBCCB50854DE1633C8085ECF57271E2 +49B479B3BA13B3D491313B266C9085ADDB3EF486237AF30306704B36D99B99D9 +B4DDDA188FD08BFBA1D7691651338BD1F9E3D2325CCB349327D09AD5A9F82548 +0CB6FC48BB965A24E3D2438BC00A80BDBF322E5B81DD7D51599A8EED5E1C0CBD +3D353DF1BFBC3050243CA4CDF48EDB660DAD7CD4326E7D8ECFEDDC3B79A28A58 +89FE0A38791F9778B809664E1DF7B0DD829288C3C7F00CAC6182629E86B1931D +D5145A5DA2FC1EBCF001ABA058AA48027688AE1725719BE01163C03F26FB3C6A +DE78AC5156763D1955A713CA60E9B98A0C8A84D66628217093FEE40C45E1B873 +BE5E5629F437E9C821EF110B3F89692B89F15F7FBF46FA1B31B66F0BB6956A0A +B1233B3D0475B839B2F3A57C1EA98842DB201E2F78D654837C11035F52C165A4 +91206BBDFB2098B435A0BC91622094B9F460956D1152AAEBE80BF2AD888DC412 +F8741BD4B4F5E4577F5F1931C1D9D6D8F16D63376507465B216E42586E28903A +8FC9A8799742081204B5BAE38A59047E0668598102BF487733BE3F830A1F524E +55CA5F45EFF823069DF8D162A2B4BE2542D6AAE3D7506710E46E50F80E4E95B6 +A5CFCD4063974BE71542FE87820C530BDF026DF178AF3F99BAE56F50DEB17645 +ED9FCB0F52A576EAAEDD00E5110E7406C3757DC5120D4E8263ED0F04FC7AEF04 +BF4ED0D0FD4EC2CF08044677B8CD49517FC934AC97789EBA59A68CF5593D45C5 +7257A4408935543255CB46F8BFDF523E1695065265FBF1948B95DEC97C7419E3 +D15BD2640E3965DD0FF38015994858FC8FD1EE7CCD08CA522F88584177240D93 +5E51036BD64402950E6E655BCF7AF79D94D5881A04E439DB1CA3D1CAB39CCA82 +19D1CBE17DBC2DB0AD5596B0BDEE6561229BA42A69763722DE13CF80BFC544D0 +49E9EDA64605BE71FD6BF076573B8F7ECFBCFF911AF62B6C45056C3D62779A55 +5AB3824802C2B317B985A9FFB380EEAE5E816EDE9A381334A323E1A3EA9892FF +6B480084B6FC82E42413CC9DA035A5B587DE706804232F4C269FF4E13D8A03AC +480124BF0C5C5536F9B491A40F9E5B74C154E6A7A05D91E0A01D1B07BD9CA08A +DEB2B51FD97C30D828A530BF26D35EAF941340FE61AF9D30D96E7293676D55B2 +0F20991553AC5910B75E6C8F5728F5060B3B35A223DB1A69C4D2E752335B2C9A +4D380197F9413221E12876EBD61467024A304EDF24E6FFB17622DAACB5AD710A +439CD1626F3A6836EB48315B2011491FF4F2FD7D9046315C8998FE7C758D3568 +D6BA5C6E158ED2FCDAA81B56B603DBBD917D82C124A61F629F9F69F834D08B59 +B53F10029802F0426C83E923D658D7F8D04D96AF9912389EB467F7271278601B +DCF84562F771B4BAE0A5A367015F91512A72171E37CAEA1B9930C0EE51275FE5 +0F49B05CAC5E9EFCDCD57CAA3EB5D101CEED7545F2BA17BC45648D22119B23B1 +0F9B7DC950350929A310C3853C4333C230A78479127953E85A56C335B264FCC2 +FCB6737637F864A503BD2E4FE44F14AFD8E8B51EBCA87910F6AC4671F9A9591D +972D0AB26E2AF36519CAA939C07D6D75F56BB331E7F37B6173383EA3B967981C +903177D5E441B6069D6310476781779F68B4A60EDB732DF6A9BF1606B5BA8616 +AD10D97F711902CFE0B79A228F3CE5D31D7E35FDE180E3A52609BF2A3E3E6DBA +E83650227EED7657D43594200EE4B71BE9A70ACF49A79173A985E1FCDFCFB705 +EF6D655E220FFA05B96AD4A5EA28FE833272A2034E0DE412818E89160B1AB71D +CC2293238DA9EEC3A0E6BFDAD89BE4742A4F893CFDC4847E769A8AE4E3607D2C +8FCAB808540C553DFF751FFB4996580010C53EDFF3354EECD54DD2AFE4BBAA66 +3587D0488A2E96BD38B16D5265FE05D92608F41CF56FEF44E977CD965DD29390 +7393AA40AABEB5006D6F0CC0740DB96B2685737C89E445DC07718B5986D13284 +0589CE723475C6E750F398CF7B138D4017120F774054EFB7CFF3182167A24035 +0A31A73C79CC763DDBC12C371D8A77F7B9802F9200EF1715F163EAAD1BD26139 +289405D97CAA32BF9D5C2979382B78635E39E4B4DDC0AE2A0B2B411C08A8D0D9 +ECF61C48C33693F24EF1B49293B2F637732C932C35998E9F7C2CC23B5031CAD9 +B2A816310F484FA71FAEA04B09237762C23BA7D864095B3234E32814AAB28142 +F65EEEED4BED3A1B7AE05BE68D6FDD81AD73CA46CC51FE29CBB6AD9A7FB0C521 +6B776EA1A7418CF0D4168AC00CF74DC39BF649B27F32F9791D51DC32FEF7E1B2 +F79502F3AF78BA3D549E5FB21AE5D265326D93CB4D32F6DFEF33029432A74D1E +B23363450A94833F158F86B7885E877AF5F413BF0EB3DB99B508CE4CAE50BAF5 +C522A038210828B44EE62FF7D64E0E33D959D6F45FDED3FDD6FA828A5858AF82 +4A63D360801D8DDC9ED0E131E3339E86C0A6E1C20F7B7F85BEEAA6067F18D9F8 +E5971282585D3930011661A5F4333868CEF20CF01770BA2C60DEFF2B368AD21D +D4167DD179EECBE8EC29225FBF1FCCC1D1D5A311703D80C942388BCE852CAD69 +E6034691247123B45A5613C7A307A3118DF37F009001A8A87D093BD0F48B1E93 +57A0360E523CAD04BF1BE259C75F52043A7BA57EE718852D350F7ACCA3664722 +20026A57015ED6C0208F36AB7247D91F81868424C5871A376924FCAE64382287 +D232C928831EB8C80D0A107DBB9CB53568E51B85912733B9559B6DC8287EE61D +BDB6159977F76D58C6D925CDEC01F728D7D6BDD27A8E61473EDAA7BD7D80D20F +B47E20C691794186AAA4F6AB76FCA59058E190DDFA2179EA4A3297BCBFD6F546 +EC6A1F7B013264BD04DE97E325A7F440ABA206CE1F0AD45AD09932F33DA483FD +A8C54582ECDB96F9E612C8F2A7DA397E1CDFC11D8C1168F18B5DE813CF7EA37E +1C7B2DF3B38AA6B3D96C6DE5637FBA31152034EDBC6511A965C78CB526DF27E7 +967AB9939D93DB8379DD1AE267FB7FC543256686B68434D3C5A4F5D823B50F69 +0F1D4DF1F4C575B9DE19C46363CFFD6CED771E0A74EFCBAA609A564631C59C0E +0AEF13343DF77FFD4E0EA2AE1C1405D5A9C010FA32317445B8B172E6382D6F19 +A128393ED2C4ACDB9391D3E96BF3289BC12D1B8C0D6E3AC30074E55F641FCA5B +B237CC2084537A34284BC94F3239C4E56A23722E89B8D604813CB8F776D17842 +AD927359B8147FC6E05503A0D0209FA52653481E38E7530D39E42DD57EDB19C1 +C4D8ED8222495543FBA560AA5774BED94A5A24D933F633BEC4DCEB70166176A3 +49643A62599243EA05741910083A0652E39DA7A759A554F48A4D550A933E4ECE +D6D12C6D6BBEC0A3408A9BE220B328060015B3E3B663DF829D93B9A982F4BB23 +F5C8F24DC9CB77C7DD80809D353E336659C5E7C2528D95E521208ECE1AAF8DA1 +D84A8A68E2289650D800AD369399594309A144AF3CCB62BE30669C1FE773F072 +D9BCA31AF45DEE792D623ED6E99DDE9545638A721111DAE7E74B3A5B07881662 +628D47F08A3749F6AEBD13FA11312CCCD8E06297A5A698C59E139D52EE5793EA +A03B23583052F10AE38CB951E533623133568377A7F2FAAB301C16F957A12E82 +7D2A9451DD123A725EFA3C3D93838581CFD60E69C772647D384BEE1A312F879F +940EE9E91E6F7883B91DB9D4F1C5D1A941DA8F320EDC0FF8E577DB3850F2B5BD +3535917873627308450D8CE2BAA054BCDCFF9CA964FBFC8161787697FC10195C +6C32FB43D6891AA1538B728C34ADFC9DA526E87145693815F6C17CD9C361BF37 +E788FBECC2905D57DE7C2AD8D03AE51C33210490395C00ADFC0CC1FB5F5CB3F5 +994FBBD3DDE7DF9A1ECBC87480EA78770C35E7DF78AF2240F7E1412F8ACEB501 +FEB03A131CCB795EA51A6FF5B188B5927481C63B82EDD1542512F069800249F5 +A8F963EF9383342C0BB584BBE323069CE631D985DB8C4F2109A8E1804AAF0603 +BE3A5C8863A4B815D5200B65AE7DF41D79BACC2510E700F390B2EA3F4BE01D89 +BA75972F5354406DB6157645B80A9B43B8E0346A7E20D090B0A37C533A7946C6 +EE2953D8B2B216AA2237E9407DC6F90008C2C0E449112DC5C3C2C8019CC9135E +C136FD411E23F26398F422EDF01AF433D66F60E5B961B6963F5D14CF48F77A50 +8F6C584459FE6887764353E2BE8DAB3C4CCF79A1CC5E1B28C427F520E9139230 +83E2B8C409F6C1A8E954F81F8F8C1091C4960C5132B7B5AD865AE564AF68CEE8 +7924B401ED8FC90F9A222C6861BDBCCBF54D06D1F2B27EA2176E4BD643295A4E +49CBB9CA351F339DF41D3A0ACC6A4C7A33196FA53E49E409413E8D6D69F21B09 +3D7CBF3A96347F3DDDA92C435E1BA4980457D3D9957B800B144F590C136547A7 +660F182BF7162F5292A4AAD4A1E841867EA48FD686C90D563BE6E2879BF05614 +EBC88A6DB350DBF2996AF28B2EBE9415AABA07FF509B9DC0F5F066F6AF30BFE9 +D9800B5708503CD57BC055F5434655E68E322D699EA77974F1A0B4BF47AE76AA +29F0BF7A35312686997FACFE24E9F8C23FF882E36D99CD4426742B6120B67E92 +BB855092A15A7BC5E9A6AABAC61CC20EFF52246334525628BF6F4D7DF5542399 +91D6E985BD244B8A4FEF73A2366783307FDD8960D81648472C9FE19445AD3AC0 +7B0C8C2DF9CDA23301BBAC2D7D32574DBEE3A176FE9C27B78903D1F3B1E6B7AC +AA2768578872F3FC652388DCE24FB5F4D83426756915476C62A386B95FCC7133 +D21B17F9548DBB193D8C57A42E6B76306487EB53A5AA8765BBF8B64188A44E79 +2087928358CD1F1CB7286D6C7BCCEF10AD5BE805817BB9BFEDFF5EDAE0F691F2 +742DF076DBC7FD8C5D3F6B2ACC84BE4E16B1D68C3008055340B1952919387BD9 +D3C45456CB361F3E4D00CEC4F4D289074AE591074BE3C7AF4DB010B6C1A577FC +DB61CC1DAE946C39B1573AE788B86FF95457513681CECC79B5CB533AEEBC98DE +D04DE9C0CD9FEB79ED7143BF3B1DD911BD1999A2F223D4C41F51F9AFD17C9E84 +AAE9B30BD00F460A88C74A27268559754A4E416485F0F9E71C2CDF13F62F10F7 +25808965E37EC3FECD537D32CF915B6F47D6AAC1E7FDC9A90A49DF2C1CAF5721 +66501C306734B40278AD1129CF85E474264E65525F14DBD3BE2C358364F5A624 +21EBF782925A9A271CB4ABA439475B6D52A65EA1D8A71DEFDC476F73099D7EF4 +C5E68D5D0174860D55486F443E0E9C81A86594D28B2BEFEAB7AB9B14D1EBD02D +0CC44A01437CADF55E4FDF86B2CC1762175F11725F292819C97168262C3A2D51 +3E3A45B29C5EEB0E57CDB122C8A5C077D99AA50415E39C44C206E980F06F0ACC +7128ADA7761D7520AECDA4660F2E3382A733C31B5A5BC5DDD782C92E9D1C64CC +F0CDCEBB4699C08FAF77712EC8D58FFB78253B978CC7219D7D79515F8E54A060 +180FEF767C9D8798CAFDF295303E7F0A6623A8C12B14C1836F11F8EF13E426D0 +6713C847925CAB6A2BDDD84344A9F3FC9ED2DBEBED62986E39B762DB093A70B4 +8330414B6CC6210606074CF505197209BD0154CCA72DE4B58CDCA2164BBF3AE3 +3CB35DAEAEF2247EFE9858FB09FD7386EFBC3726E0D8D0C105CB6F39715A9AA5 +75E088AEB767E520F30FDB5B1CF1301EB4CAD57E870C91C11F2839956FC3B033 +ECC34C4794ABC5062BDFD9EE75BF35C7838DE696D2E89CDF370F6942C224090F +6866206B027A9385C29E50DEBC25EC087EA404BC87D9B06D6C9A6DD16FFDD199 +53E5B20FF70287A5407C80F4C29BF1E997B9206333CCE010E05B6C8C2ECB7E35 +486F96890C7A4F8E97FD7B42EEA6FB4FB3083BA5B01BADA2164C3E71D2438FE8 +4B4D38EDF4F1B9BF8334A34F42C6D093A56763498F359AA5AF15D5FD17868C80 +854BD80EB0F1ABEE40195B49FF7E9E04FD5DEA0FB07B12E0FDAB3EABA242D3D9 +11CF1F8A0BEFE0F6C4CEBC2DE687F7088E3556B95C0EE7D0BEC654F642212093 +E4ACA7C9F8049BE764BDE283D512BFEB784CE3E83BE5AD94CBE97A3C71DA85E6 +5ED201F11B6BFB09139D8FBE9516F1CDEBA26868D60A5244700875C72BC399FA +F5D8B663B4BE7484E46F65EAD424D7EE440E1DB7394CF6BCDAF07DB43C86D0EA +E08F34C56EACCE341389ED82C4485E53C3273F3F7FE285530D13A9A7D7F0A298 +458A3735A2B84D8C2AAAB2DBEFC847AB55CA7B74D9364AF272C76A1E9FE5D64C +9F61FB670F5521FE8386A332BE4D5083A16C705E61FB58D7D88ED2B540949451 +46A2514F38AF7357F6CECE334C83E274A194A376BB5F053914C7DF83E411BBDD +271C782539EE5CE86E3DA2682C634912BD8637BE31FED7085282BC8FFFA4A0D0 +2F9F7B62714D3F5B0F594983C9250081011114C0BF6BFE683261BB901A140656 +7FB4D34B2D59D4B2A37952B2150F7F0BFDCE25FD104A664867D9B5F9134787F1 +BD1AE54E3E1F8657DD5094CBE001A79FFF7A6A29C25B50376929504155707993 +5788678C618380A2D114F65D064435D44F56D8C2E969D054F3A5CC369D6772BB +94805947ACDB934C10CB78FDC3FE572D844AFE0E8CCC0B25C67EB4BE8FA68447 +22DE142AF0D17C8DC4581F65836CC100525220925067A5DB6831DCEFDA4C3409 +58D49AF007E13958E64DFF010B99A9B2C250EE05106D80C7958AF90A2CAB61D3 +6EC40568FC2DE10756E7DF2C9838EC534834CA2E6342768B33CE370AFC934FE6 +57DB8DB7E490EB547D817E717959EF4C3124C9B6DFC6F313430426A7CE5011A2 +B8643B26857188E1923BC0C0D722DB3495C07B393D5CA15E71B1163114B4368B +1041D31ACB26D732FD54BD27F7E0DBF1FEC7D4CB80130F3F750E0B9574B850DB +675B928FF95029DC848E8975132E46A07F4E4FB760DFE3E599C8A84ACCBDC7B7 +50E2E7B44B12315486B5E36C10031E4FF14E1B8C2C101B9616B6D3F1F6DA316F +458D0F76E00AB6239173B13DDFEF9E5B0F0E687957932E351D6DA95504B359B5 +F7E5863B601EBBDE3A8F858F8D226B02DC011914865E009C6F55AA1CC4FBED04 +0C13AB5C954B2FE695699010F5F228428DD79C3D3920F2B75631467487FA8486 +AFCAD8174F32B55897DF2610EB5173CED6E53534406D78000826DDFA40459E0D +FD81766CD79277D950B1615599634258ABD320D8F1E60750FC5D839BF5AF451D +DCD394129C099484D808AF2C833BFA65B56B8108ABB795EC97AAA0DFA912F306 +4594C7CB096546AC99646BD06A66B00AAF37163831DF857D9BEC11D0AF565073 +3EFFD23961848DCEDD747B329B1C0470B7C2C88C044DD6153592E6CBA21A015D +4623C290DE06B357E931155942D894942DE13D7E1FE94D4FB03A90C684FFA97B +D7257106C3C71B8BBB70D322CCDDE39DDF104CFFFC3C6A4ED68FEA52823AEDD2 +3DBE10A46C930B7874050B7D4A310C14451C9955E7D02EA21B09EA974567A655 +DAB255D067B913C8C8BEEF0F747F9900806D7618867341C49F395D78909B00B6 +CFAFCF12CFB569C7DD3357858905A89C09DF87609A0153471300D032B2CACBA6 +85EE4EDDFCBA9B9393611CB6398160A6178618F53DC8D9A26BD12FC5BE10D99F +16B3D8A44009CE664056FE03DCB5938255C6450A6EA03F60DC577A1DB34A8358 +C48095F42E3F59308B51C402724DFB4654944445C655F68357E6303A1F480E26 +337818AB5B12CAD66E41DF871C71486ABF5217658A34630968B3ACBB5ED31971 +F6853BB51725FEDADB0107090C1FFEADCB70367D01655BB43FED064F3C59BBF1 +CA9059AACECDDA6A93107A72BFC8C43546219FF4BAD0E2BA19FE9FC6F42772BC +4EAF6FC8FE96218DE04D77E00F666550F7937F610B037D62FE873001382384D5 +371C5B73D690A5EBE7355AADD29205F7381D3D758D655DD72197445FD743A1F5 +57D7807A98D1E8FE400C6E741AC6537CA76BEF0A74C24BCBD284726DDA89E7CE +4431F4AA32844896766FFB8569B70D3AAE67462AB13C25520560B97F1670489C +C703998A80E8010D509A48CBCC48EC52D619F7542E1427470500624F1F50C589 +6F03FBF17BDA013A752F4CE279E87112216AD59910E1B9D0957B6A2A3D839CE6 +81E311273D4C2B9A33CD0C760282F37EBA8CF6356C3D31465AC73DD9ECA31EC4 +5AFB71B52BFCFDD2F8A4410400A2FF3547B80B65C397D4AF6B314BAE4B5FC408 +D697AF9AA4FDA94B6BC540410D270A5317D9AC13F075DC8E3D5A2424ED57EB81 +C9CBC37DB4C6F453BFB5E52A1C30EC66129269B583B04A0A6FE60CC5694A8056 +14F8A81D7171653B491E30B236D39CCC40885C7B8B57DD43DAC6C32C95481871 +3B112939856B2C6A16E27264F4F65F22465B0015782E1553643171C469A08D35 +3F351E5EFAAA5A3440FCD03EFAA716CDD06454DF556F027903045D850AF30425 +231E67D59DCA6095F1A8005A50D8B0F85B6EB4844737C66A590BFAC2CF9AD141 +658B674A174C6FBA8E57BF6B34FCFBEF31CCD3658BFFADF331351B1818494C12 +53FFD05FE9677DCA63E4AD2C5EC1983E045DC861AFD71A696FC606B7C0AE609F +36C0A90EB386994A007ED9D2349EFD645265013E717BD94A66D6308D1DF01BB5 +F87CE336C3EAC77EDECEB76F173DB9E1BEF481B7B02CFA679ED2DD5EA04EA512 +5D3F45A05E681B9A226B0701941CEFFF253DF8FA7FCA4C793985E6993ECDD9D3 +F3D0B2F267188C93C9824B92E8AAE50BB63E4F0932C92592097425F9533C747E +9F9338839396E6F5C6AB0834600AC2478FC80D4756428C5E8C953DA74BBA67E3 +CA1E597134FAF54121D96D3EC56B04E942C0CA51B9579669E5B0BA3CD3163505 +F5A18DAF3E10EB1A9CB666B811154FCBA7DC868C9A115812329ABCADAF9C17A6 +467A90E949026BB37B2647A7D051DBDAA490723C43F705D7A53FABF2B91E9417 +39D2070ADA25A7AEC2F5E7612F07CB51A7E8729B059C0FFD0E11D77A1EEF82C2 +84319DE43E3854368DC488DD65D2EC3B8AE92611C1B74CCFE301B9130B31C8BF +8146355A86673AD5DC32D0D00C7FC33FB2F1FA263797411130E686373AE3838F +A42AA4F7BBEFF22F7CC829A95B9018C232D880E6441FD6A2E68B0640E0C74709 +C4E1976A6499A9D07D862881D0D063D2CC215D4825573ADB72DE36F8FD7E7C07 +807E88153F4E1261BBED152592FB9E306E43FB4338C7FC7E584B148192B03003 +CC5DC0E2926C59FED544A5D9A8FBFEFFF43967568B595597130BE1D3806FC034 +9E769165B83A05436E610A3E2ACE24F3E6F6FC40F1B9C7DC049404F1282D8A29 +ED19A320E30C2E66D2B133C585AADBD736A4950D77B6278946459ECC98AE9A53 +9BF64A9BF5CF9B24F12BFB5ACF91AA0F13AD869D7F61CEADC50BDB3EB949B706 +99C99B4674DAFFC8D31B96A1222834D8F7A81389A583F8FE7C9BB16023E8798D +C5C8B3BD2270C8D9F35EF54A8EA8038A50018F2B8CA0CF190BB85C7D135E436C +3ABBC9C76086B6A9425F84FB3E6EC62AE49CD54A4B673DFB819F37847B0D3E2B +9FC5DA3C384DF99112160808FD3E15FDF82213859EF0E653897B64415A2BEE47 +7B7BDC1882292CA07F3948B7C26A0D3B2A57AB664F5A0C399E5697A2FB09D1DD +B2FD96F7691AC2060173B7457287C7B27B9DCF58E609623631CC0984DD4919DC +24B66FD64ACFE2D15BA049737DD142A254B6F2F4222034E26EA6C9F6832B958A +CB479806632C44A5FC3BEFFEBAD867D1DBA5C0EA9AC82CBF56D89B4557C7192C +293A693759CE35359055A2A549040FC43F58E48495CFD33D7CC7DB25480FA8D7 +DF149E8E3ECEF8328991923C4B3FD0A4D0B1C7D5E1EB033C56A5546A711DE5E7 +A2F168EA594A7EE68BF805D039CA96CA9C033E11A20F8A6A3E1E7400E86B3F89 +DB506BB4936A300008CA2E3F5D28C71E2FFB2B5BBAD18B950C90974EBF01A56C +5AB94077D6071CAC8E45B0EB9DF22A3D896D2A45DD6474CE6504CA41D3562F89 +A034D7A2841D810D8B9E962625D7B9AE806009D39C6568F3B86F87B86F3AED6C +6A42F9FF86F3CD8F78659FBED4012AD3C903E140981577E9E9AF572E9709DED7 +2633035EA96932A6A9759E5A39A8B59CACDA37DA21F64EF56E6683C166D5751F +132B5A99E5624B81A364861495CD9208A811C47A594534317D8172D71DEBC579 +B7F602E3656C138331A03C1D66E02A19D68B80B6CEF1A30C36FFB21A8FA8DF16 +5190F44EC79B651CD09A96A9572E27EE3DF890D9FE1666710134288E97C14357 +6DD606516778FE550B81817D4D29EF9C1048AB62C5161347B1239B5F456A917E +EC333564922DBDFDAC3537BE348EEB932D2700855C1B38E6632AB42688EC96E5 +E70B6E21597DD9AEC0C66CD5BE04886842418E5D7026CCF8F3CDA2560CB15D72 +64FF100148BE72752ADC59C8F19B039954A66B5D17B03ECE70228085BE334806 +FB49BB79CE8082CE9CBFADC30179B303D64C34BBCD9BBD50D0773B7EE72E9246 +5B01B90848A5ADCC95227310A886872DC56466A02A3A9A5F720B7FE4EA511BB3 +518DA5D1EB43E13429BCB41242E8D2908CBA3FD3A2881C911BF95BBB667E8B7D +612A9035BA2602D6BB6E44C66138FC57776827BB7D6E19056EEF9D1D01CE27A9 +02C6517FFE875770123508F5C5FEC021C2BE78AA71F9D9952EC91820874B0A93 +AD291A3032F4198BB8BFE80EC6EEF6DF748E37316383EC01CEA99A64CAC75EC6 +1BC2997B1F2856FF05FB6772F6BF07764CD4751CA4FE1657A1ECAF6D8C5AE8F0 +8C9247C4F2BABC32CCD25E991A387DB42B2DEDA9FC2ABC3137D87C9D54778164 +7EA9972546C794D69C636D58859035BF8CA3DD17231F354445FA10DEFCDBDD9C +495A261258876CA0380917962C18EFFCBF89DC4194FE9A1CF72DF12AA04A6084 +E631F9D152775E93A4005A19C1FD6A4EC47EA032C6BE37A2B78785370405E27E +6CD97AA308A962761D4B7FCA5F042615169A97F738D2E3DB6C4152C6FDC5D5E5 +5161772E44B4D900B9EC705103368DA03F5E062C2936E0A98D310608BB170E0A +721766F9D9A6764720624C1A735DA3FC426FA08BA9FE9F9375A3CD338F0E8E9E +AC95AD060D67186CCA0576C1BCD646981D38BA1D3D33819F9548E468D9A8460B +ABABBDC0A2D50B5C4224C722A681A9BD8D7F5DA2D4A343D1BC9029F1B9BD4B7E +FA4817CA039BEE3856BE4B367F942B1A9FDCD1B804D69A132A476F5DBD8D7253 +E11FAF4B04BEDB7CD483BA74CE27B2C4557DED04E0A472F4B745DA0CFB86A9F1 +8AD4206B208661CDCA7F7C7ABADDECD59EB566F647A9138A8C5376D034878D66 +B4F4B241411B9489A2D9BBAA5D69A6F075B790E42FC929F4703CB5993D7F2A5A +233C307CDD20F07756AC73E62E3FA4B599A19B7114033A6CC6810F1166A06F2A +B13A9F2183C9B05F13D80BFBE21F47BF5948766D82AA817B5DCEA8C3332A308F +72AE7EA0CDA16227B77AA521C155CEC0AD88CFF8F8EAC7C6CF91457F050007C6 +FACD0E8DE03F5A484920787625CDDD132C551ABBDDEBB1F7614D5B84937A03FD +51DC15EE0737A98368B12D24F6CC11F6C6DE487B0FB803A2322EC745443F93B1 +C31C452CB55AB657011080D77DE585799101C012ACCFB55B0E0DD7788B6D0BA3 +8C73441FFECBA1924D322BAE3B180D6825A4C3D4E0E72C2446FA448AA84A0FAA +428D6784FE0DC862229A2A4432B21F3A4A9C6CE0611606F97603609792DE3B44 +FB1F8E62327ED68CB6F372522C05A857E059337AB8963C9B74458AFE461803ED +0E49E0F9B522BBB7AB20BF8C80937F41971A3FCF31D06F62571373E097558027 +0692E476E281AC8009A400AC26FAC8D7E8FF65A454ACBDD1462A89E8B2E7C7B5 +394DE68607953A7E3555C7471750033EEC5120731EC09FA95C9790777712BAE1 +36730C0EA143778E476557720F32848A0DD352F1A909AAD94A17EFE08EDB3D34 +E2CD67848B90525F263F480C47BF4ECFBB1B74BF2A905127BFF26B3E844A96BD +470BC54684FE137B21821358D191B3A511B8ED334E1FAA089A43897C1DBEEF45 +D9FC57743DC68822F51FB589DE48E0A2FACDDB47405E56ECB39CDE9E501FF1AC +0EE82A440A3F32DBE2396C3F78FD4C591836913F2E60805CA398377919C31E47 +030E4561CD6C7FC45F0ACE67D79473624794C8696A79CEB837700F3EDFD7A8B3 +D1942FE8090CA16D616272E8A3ACAA54356EB2052767480F078B395BFD7B0CEE +182D6D01FEA66C5A6941F74D1BC8DEF650740B2A2E9848262290D704AFAB96E6 +5BA9515184B323E2425356D38E85D137F79C13495330F034FF7BA30B02C5AA36 +8E0EA4A6A10A56E4CBAFB2A0043486426CD20A168118D5427FEA1264777F8543 +4A415049AF307F6E4C982FBB3718E255F947C1F2BBDE78BF7C08FDE37C4CB6FE +BF88A3AFC4AB9B077516D7898EC3C87A4FB2C2CA4E89F6FCEF185990509F91F2 +1C85F09084E3490DCA8F96FDD0CF777FD4FF021814DBB471891F8DBD584C475C +912EF1F70CC389A390D36F290A544F1D3303A5C2728DEA320843076351921FE9 +323462B251FE732D2EC98BF1E4ED4C3F96FE04CCAC497AC8330C4D3D8D3AED08 +3B7BA8E51544DEF22CBB7FD126F7E01D6E3E6DF0D2F38E0B059637D90E2E9DA8 +5A1A404BBECEBE1A0D5308D992AF73560603476754C6BF79126C436F8081AA12 +BCE6E8FEF3DD192ED812E7BDB1AAD1F8D14C169889B6C1E155007DFD98140F6F +37AFB159DC12A9E05A272C8C7655229980B5CDAD4047D89FCCB41E66DED71F63 +F07673212DE5D6FE3262696586A92EF04561C101405E21B341424B361928FA74 +D1F0F4B36B01FA6A07A7E45443AF1CD8ADC0AFED6FA8D8AF2C8CD5272A53C28C +AE944B9045DE6305CABA0B57CBFCF07145C297A4BFA8B4EA532BF6E6A0D7A452 +1F2CA064ACA886650D27E3F605A27B8FB827BC68BE30EF1707E819BE9F90FB5C +D305CCA3C1C6DCC1F1A1640D04A037977721F14F49F449D00CE1AAF040CC2FC4 +7614798B64A4BBD1776F9A1F958C0364C5D87555CEDEA1D979AE13F028C1A79F +5232C1706CD1957E6B772C89DC78F9E1F2D4B4CF9C3081973726FDC294698D7C +5B133F141499C32F8A466D72047ECE96EB36F6CA3AEFC2DE54D25DED3A3E5A80 +D02DFCB3A5E366C0581AFC853566B5A8FE47871B3E283257FA60C5AF514EE72F +97E44BF870ECCB515A94ACB1BCB22D37D563286B2F5E484555C5E94E56005A86 +A6B2AFCF2166929C97434E72C35DC831162CC6F484F36A130B8FE1BACE568210 +90ADA920D96AF14E812CED41CE8DA5C50E9E7B9194BFC59E3697790DE569A6CB +DF2CEF5A4E802CF13C18826C26373F508B6972B82BF855F6908687246CB307E7 +38E9B07F8048063A9BF4B98B8C064D1F156887727D430BCC27D5A0C406DE1AD5 +140F883DC4948F45C5FEA6518EE06CAA2173A4DCE956FC96F1B1A4FDE58FE917 +F92BA13F1A97BE8F67D7F4E31FD190E48BFCE942219AB34B2471E3A1DAEF0391 +EBFD2D7E6B21A8A7E14768A51A5FDA4BD00BC6655F16C8186DB3AFA1BF4B117E +EF707AFB48006BEA3A03CDEA5ECE604C5EBADCCE8DA638FB8C7BA7C62C458703 +31799FD9C1D86BA345FD20D20819400EA4C5852EBDB2BC24D93349E4A0F83B13 +F00FEB05C4B9EBF60944CF77E73B7B02A4FD77C55E8ED9CF5F90B74AD0F7B31F +45008D57A1CABC54D17689256648BA772B5C5C4187AA81C5BA8836C4FA9ABA57 +7BEF8291D50AACDBDA73923814A2B3E7B42ABD14F3A14A60F4AF671FC8DE5ECA +A91A3889B81A2396142D56AFFB120C5879E5A831241C321EF41D4F07F9D042D9 +7B70EC2AD9B5AD42ECE4467605FB8B7A51E9EF319684FDEDD446C5058B5A7C5E +0CBA92B61A69E6E3C86F927AE51CA81DAB7192F880BCB408DF63BF96E7F0CF96 +EFD11A84EDF771B51B13C68E77F555AF327FC45AD346491162CC3FE0AC38869E +A4AB1727C8B50EA6025FC0799CE6CC08DBEEC0F159D48C56DCFF08D9DAE3012A +F9AF6C7ABEEC3DAF9A802F246923709BE64048C9E9F409485A1E176E62DA2859 +315677A95BFE35E67AD99F718D44ABD943E5B92AA0F2C59780C718EF1B26A631 +233F61E53C8A197A0AC2AFC9775EABED3FBB7130081B3D0C9CF4BBB1D9A1B67F +AC2F993BAD45B51CD67920E4F9637B69F849E89844991ACAA1E8790D19B5DC31 +DFA36E3F855DC73143AEDB781072153CA543A2DA531EF0DC4810FF92D9B94FF4 +DAAC1B0DC33836A54820C7C7F5642F0D20CE07AAAC77AC4FA51AB8B736586F65 +56A828EA7DB2E6AF374D40D11C30BB974D7ACC1C2B27F947178F7AD8B35BF2D8 +EFFD2E20B8C5BFE5D8EEE155017AF9EB37DE7F5544097DD2470F66AB07CA6382 +226C92B9537D287A0A1E57AF6C1A0A18DC3764D19D0A7AA3467FD97AF670A0EC +BCF0D4D42F1A493467C4535E82A258F95769C7BA6531EABAD7798E22B6A0AA63 +4AF47B8197CFFE4DA3FEC29CA25CF395D601F06B39C89D7A3C2FB110CF59402E +D3C89808BA8D3F0302F82C7E66E1DB53D7B02FC5DDE9A050C2CB71003807A9E4 +9B73F7B945929F9B1D8C4976CFDEF099B1A8EEF3389797C90CA68DBBC3816567 +24D0C57D55758F460957705F1620DE8306256180F1DD9E98163D499F6BAD893C +73A29F57A88C79B55D644C37882C7B82D16CB15473BFF847C60373880EFEFCBF +15271BB52855B75762CDD566E6673DF95BB784B578353C1BC5B56AACE1CB6944 +6C79D6DA087565A0714E5EEE2D0EF9D6E3FF7EA0331DDD7AEC7DCB441C81FC5C +12A3DBE217C4C6CF893B0D3DA4B73DC2F2BF130E7813E659A7CF758E73180635 +D5C9EB39D6802EBDDCE71040B65B96EFBA434E55F0D62274D2AA44A21AF5B0B2 +839A93A97BD9A732334EF951518FC8A0B10C916994BA16DA6D4CCB190DB6D252 +7A837AB66DE254292258131256E8924AC7A0F1D1AE25DBEE15545D26B0D675B3 +73CACE88AFEE6A1102501F8BAC82A5C49429B802E81BA07D03321DAC1541EC5C +FDE0C08B796895F2E1B2C82C158FE38F1DB46C6B525C693253045F9A41C99162 +5C59DD1A955D89A9A803AB1B386E563E97CDC59A89F7ECB733951C53B405D0B9 +FFF55AE6A92FC524BF3627690BDD7CF51C91702ADACBF25FCA4472BC9EC24109 +3A7E7F146F626FD04B1B1310489FEE98F62094536EBF413D7A14F4630CF0049F +3B06B0C0A9CDD4145844ED7B2A359DD3F3E76469A1E1F88D5BA08D98BB152BCB +E82452EE2678CCAF2DF565205F1EA4B7152DE9267890184D2643C0EAFDE6A10C +6D4A118B470525AB8333793D68CC118FB4C2594C9634E174E40A287BED466AE3 +EC659A1C817622EE74FDFDEBD0C315026E23F246872822EE91CA5F54DB10D82F +34CFDFFA8EF5E7DF28599C76C3A5A8A8012845667C3AFC8778CB308A7529DCFF +946D662F2985478560495F401FCDFE110B652F02486A31205CB3409BC2445E4E +4EE5DA2608260D1F0FB9F19479CCB6E3FFDFD9C0AD22D05C71F85253A8A09AAD +5CE32BB44B26A5E0CC4DE00BE9D053F69949A82EC43216A10D33D971CD003E3E +05E46A797D07FFE2BE809534DE891063D91EF2AEB2CCFF995574A4A661AEADDB +2901F6390E93E1D40E98C7269B5D0376B1D556138B84C668A3F01FFF41563CA8 +22496A230B1744C5E9BAE0716FD4B20FE26F31F982E8E15F366CE98AA78711C7 +E04BC14426245E073CFF01B310EC370CD7A1D12442A302DF741536CB81CA5AAF +7E1AEDAFA92693552810E5E9A30070825694B374AE6A71C2BC836CA76CCCAD00 +ABCDF96D1A3743C526FDE299FE0D34D2A02D61C4609A4308E19B7BCFFC4F7468 +141592B2837E7508FEE49BD3CA0E7F00EA0339442D5FCD0D613BA8935D73B22E +1D04364D7CF5B2884B657BC4654DACBAE1A96F281123179892C21127466243D7 +1EA15DDB2B6EC1BD2FBA790EE2F3A78CFFEC079558DE093D4D5D673E0376BE27 +D97737149CCB05FC15A018303C8197C6E9341850886B9BF902B1009372565BA2 +156D4594856A834EE39E1F4F4E97AD97CE3142E0315D0DA4FFDB85EB20C1849C +A202430CF6AAFEF97F628D7A605E4E321B6F7338E5AA37FE94344F98CC48F5D1 +480C452EB80C17591C6DE1D3BD4128F0A87EDB0B4E6BB00C0DB0DA7552C98FEA +1ADB74A24041B574EBBD78AB937751A3C5E67F47E90FBFA0D88CA6CC7A8F06CE +9FE37899631D1C4175EAEF9B0D206F218D72495F0BEEEDED6B736898DC7F5BE8 +886C6F1F971BE694023581596CD92FB856770236CE273D67E589DE38FF09AC56 +54FF28A6229C014184100E63A58313053CA2AA7178AD9E83799216DA2A533532 +71491192A6BAA0AB61045CE0BBF1DC3F97EBD47939442D56D60BE3C8769542FD +82BDD0C82C59E12EBD65FAFFFF9FDD1DAB4C2DCA793073DA6003D43AB34D49DE +6BE4984F46469246C696D0DAC8CE1540946D3E1E3DCC62DE19C0831A2459B282 +0B3856AC04F1C8FDCFFF85FEAC4F39EB3978DC78A39A491F5345E76737F6D744 +949BD6C007C1355644E5CE8F5525830A9F6A41D5C4CE124BFA22D934D6CA17E7 +A605411CAF6FBB973412C0D77FCE528C4D8964C7FE38AA2E5DC90266B29B43D3 +5C5A25157C68155609D313E7F15B055FC0D94F2C5EDCB633623168D4A430FCFE +AFA26C0FCB586A81567FD0F442B373F2C2244648E0560E0A8E2B250F6549BA36 +57E2B248920DA2995F735FE19502BE2E8E917EEB78DCBC7DA169D8A9CDE8B839 +8E49BE238E46CEEE2FFDCD4022924196A92BA33BBD2631A7299FB77168898816 +12189825E564FFFAC9BA9294B7355FEBCE3A2656F803951F3DE3703987BA1C65 +B70755A7A84702C1650E6BFDAF02630057C81DE4739FE219742C9B7B38799431 +77010C455E31DB824AC206466FEB06DA7EFC0FFCA5388F5542F93C56F9311088 +EFC400535CA13B64406CFED124CE07658514B0CD9997EE7BA1ECBF9F208A5842 +48A6559A124253BF0B7FAE1A572FF4ABACD0EEAA5CDF41731983F2AF1C3480C3 +6A702AAA1ECA89433F5C432AE2BCB78B762077F5885154A59B1BD750D08F8FAD +1B239532A4963508222BE34ADF98816F358DCFD5F81ADD3C017A808F9E8CEA8F +FB112E2956EEB689E0F7BB4BE12317FA352C08E74EA43CD49C200BD19DB6EEEE +36DE5CE0E2C648212F1991F8CE69D093A792C8C16A31E40C436744E47B12D24F +69F1EF34986004A83720144B5DD8C92695818BA4D9F95CBD1607BF768FF81F9A +457B40E7C7C8218FEB865A23C41BB84557B5975F386D48F20BEB92E9B164988C +426BA43F1F30EAAC3AE65765155B94555E2A5171DA4BB3E243DD6D50DF5E365A +A54C5C47F62E3472D363189FB9BF00C15850225A95B2A5F85AC26758CDF14058 +7BA3F07245800F0E1A195477BA46830353A6707A63EBB486F1A2E628764849ED +6A082DE08DA495EB5A1CF5565A0DCA7826EE7B800D4000619E90211C19E705E3 +D667188571622A904C468B19E515697B7D9DC650C1FE08D18E0452BC32175CF3 +D0AC419627C323C02CD6E23BA6C0B2E95EFAD56AE1C8E750CF210BE153986563 +5D15CA3700598BFFF0CE909C921ABAB1001F846D82C5BA038D314181B534D17E +36EB7B608D2AD01818D2151408FB57D70EF005857BA884F800AE2103A18A1BD8 +F507E08944D6E0FA6CDE0CD3CF6D07898B8887B2A21776A198FEE71B7A0FA1FA +5B6624E72FE4A672EC528F7160F23F837DFF75F7DC11A78B505A31E90499E92F +A29D9E9D5E385BEBED4E543D0B0D92C271B9D517C82ED234AEA1DBEE24DE3A17 +C341549EC96164986809E4648092F6ABABB5EA4F9031F89D706F3445E2E52250 +4BDB1C62D2FD8A71BFE834C787C603609B62915F436D56A385237B84C024C2BA +450E64CFE43893B573415FFBF0C18D97908CC3DB39DBFE5322DA82D4AF6DE21B +CAF619898FFCAE76174518C33E6EDAB7A2EFFAD5EAF8FA4F7A3D021C55A4C002 +DDD96D014338A5FB2C214B43B4C6B733BEB957BDBDDDA16B762C82C4DB7CAC2C +5C66C8C248C6B48A5AF78D7B718C988182F6C56635B24FEE045E6B5428A21833 +611058A27DFBD824ABDE08615491A1439AECD10ADFF051658375263C4C2DAE8E +5FD3309FD5565082C64060ACF770FC723BD76995154D35D182DDED00B80AB6C6 +379C42D40BEA5A574E489B263FF2A27E12DAF300D2E08F439728CA0C1370E6F5 +C32E0A1D5B7C8C199C53AF6BF8905FEDCC883E3BBA883FCCCA6366384DD69818 +D9C4C2FE0D13A8F82431C2A4964D949850B936C89DC34853D7070AE0824199B2 +EA0787F3ACA846E37E9DC39DC89E106204F6234480E07E2DC94319BE1C488F67 +9E984848253BD7DB8332AC0425376B6B3F07019B87120B0F25807D6770754143 +5054374D89E7D617213FC9F782D34730F58E916F2DDBD5319F0A9BBFE78E253F +BA463950D5737B84CC250DDA5CA4A9AE3EC7034C78AE09F6A05BA63E8FFC3175 +821DCD0275020A68EC05DBCFEB123D114D3967C7D68D5A71BE5090C72472EBC5 +472FA95F07C1B85B91B03BBB90B5BA9263138807B5139CF5C35481666A7ED675 +986A6305DBFB1E8681D61D17B903F247CCD7E94569F598958685F487F413BC05 +90B76EB550A20CFA7576E3F9901C1ECDB60142F578FD684382B0BDE1C8B8C40E +70E200C825E4C853D1DE36CAD6DBFECEDFEF4FF8D9610535722E7E92FB46AF92 +30C9CF8547B36B788F6B464D0403FF830E75FE5C488671F49EFB070860EEB9EF +59A0663919E552FFCB7DC70A9B37039FEA11F955E0047D4C51223B29AA0AC2EA +49E41094B59A554D3F6B89B01ADA663A7239254BE38061D0FC1896AFE32DD6CC +9B7F45FE6CBBB251604917CCDE3217439C4043638B9914151283B1DC4FCEE80D +2851B13BC5FFB868FF564683292BF51F2FDA82587BA89618CF171347CAA34671 +020A84C1235E7CD9232CA37438638C26AF281B1437D126B5848EA474E61B2DFA +887AC50CC739C34F9759ABD50D4814D9DDCC3023A307ABDC42DA6A5B11D13E8F +7DB330FF224E96FB36C6FD432CE957A0552893EF638DF8FF77225DDE7F2FBB6B +961280AE30FF7A6A2DBC7A06CA57F0F53FCAD4B5716839AD1B1C959535AE4888 +125A1995517B77A52783D0155B2779DD346E873DE3C6D648D1A7C9754C29C343 +D9F8C81EBBE8F59906E1A610AAE958373D315BA032EA026F22A846D421D29B5F +49BC07D6C056B61B34293BD9FAD4F26F5F4F75C1AA67B8EF5B316ABF8277F39D +C3E23830EAC84627EE1F023A670D25128907885ADF64828B9066A56AEF4D1EAD +98A2ADFA5EBDF80B3569D93B60032B619F7A79A19406C04CE33112628AB098B2 +609CBF3D2E63F64AEB9A68526B4C9696D602A0DD4747AA230DEBFDE27B1514B3 +66BE6C0B6F33BA3A990F14D0148B7AF706B95F4677A8F0E84164F5AA9888FA91 +BBB46D23B89C6D9B3276AE7AF2DAEBB0658232ADF4BAB4C4D75BAFF7BE9EB97C +486F625F571F41D950E521C162E4FD8CE1643E13156A74D63BE736BAC443CB59 +069BC06608C6D958A0CB4AD2F5CDBFAE0922ADA57600D753A9E48E82AE08B34C +F5582BF8B654370663ABFCC008BC20A004F5DF0FF001B225AE06F0805733CC40 +DADCFB49CC90404F387E9D126330BC4221E4BA6A0E8A8C496115DDCC95D5388E +E10C2FA48BCC7AE21CFE7CFF979F91EDD80B80C18D877BD93D0AF3E02F79DF4F +981FDE508492B20F7F37E9D35B69DEB6D1F8AF3F05ED411D61FA89F8913A690A +A3CDD0D72D529483734B05872038744F17760690EB6E6B8167CF2581B13521AC +0BAD559B9C1024083AC6AAA885DFDE9AD7DFEC0B0139754215569281843A5073 +CA3AFEC3E265C457B628968C44A6AE9A53FA423251A03AA270F51F13BA5F9FFA +80DA548D56DC6D0417F3DA517058DC9ED756FB2E8867B74FDF70817C15879C27 +0D8456CD4B4E39B41B635A8E10DA744889CDDEF45B406BC6D9831F0DD0AD77CF +13914D7FE112EFEECEE1F881F9C375A9BCBBC00F0F3D0D5F9DC58CB26B2C63A2 +20DD5A5A1DCB3F49F29073957251FE88D9DE640BCA0978DB287357AD5BA5069F +B7ABC4F5B10C9FC272A56490B24E0FD2F5BC3FF60CBDA5EAD0AA4CBA59E6F951 +F5FCA03546F7D242A0BD67804B580345DCC9C68445C213ECC69E1E730BF6EF06 +05AC8128F5A4D3140A8844846D174A77F0D4ED59F170238F0876EB4D3444A080 +44262048710F00D7E218346004BAC79802CE708BDA11BA209FC9002AE1B694FD +3F616199C5AA6590761585C12B49F795C9A8D00808697A437F00921C66CE6D86 +C68FEE49A62BC6787680A27A0DB318F4CFE0891AF2EB26365BE68F2438E0EDC5 +75DEEA0C73886A0471F6053776C786453B1C092A553B7953AC92B2B10EB1F8E8 +EA68D048E35E3EA92BD0BD47632FD6E13BB4DA00F55F9199675B8636AB23D634 +06EA2A5C58737A8E30EA12F22EFB2B0AAF180C3130122D385583FF417202CA9D +588754F5501E5368BD33D79BE01D9A2495E7F409C9DF4288FD55B9076478B41B +B4085CA5B8D8B6701D50788124E5656B3E9D7500654730006F3A39B4C76ADC94 +9FE02603844AFBD18144BDAC7DD09D154D6A047A230D44CE62F1317B2A3B783F +C13722F7AEEAB2F9150A95FC8FBDBB6CB0415D5409A57795F5083F72D1FD79CC +FC1FF965FDC61297B4F76D059C493656CA6F0965F54229BF23A13F794B0F5BBC +D4C4D0351A346DA55D4221010DC9A458902F20ACD56F01F409518C4EBE896B5A +05CA57DFA78DCC9DB61D0C477D131CCF4DF3C2DDED4E7573E6AD6D5A54536E5A +007FB21C25639DB2AC2C5B618325EFCA183E89A7FA85A0C1D6812F0CE129C5A1 +F3DD02C6181728CCF87D6F8CD5606D113EC79899621ECFCB29F8B4C4F08E89D3 +E7988071DFB3232C7C21D04C5A2F5AEAC737A1392DC2F60D88BEE9ED6E882CE1 +C7B42E43709F34F68CBA4F352B387DE2DC06E471F98B310D0BD3E994FA0FCFCE +B4D97C49E494F814FB09835AF83EA1E18642F4A4C32D04BFAABEA46BCBFEA0CB +F8230E404ACE57162F9F96CE7ECC10F782140E11F23F4C2BFA61AB6E1ACC9496 +012837CA40EDBA0C62E1230A30D5C8D2C6F478813CC3D0E8BC6ADBA1E5238837 +DD5C6E4F1675C92E41CAF10749907EE81DACDFD8A65A9FDC4ACE2AB457925E68 +8DF970BB7927FFF2E957E53B966C2A5D8EB11D43A8F10DC21E3F8D2490997229 +3AFA58573E7297834E153A23A61E1380BC0C8B157E3D52B9FE1587282DBE52B4 +7D021A4F83CBE165E8F7E25F91C78F8177DD0C5FFD35B497E519444446F0E24E +FE29CEB06666E1F5760C2D2B5C8153659DB7AA36F284FEE3951772FAA4E9BD41 +D9CF7968CA215273E88FD37F1A64B7B4AFA2E239BA6F9C463A8C5D0CDA152D44 +E61D6524E88D940FDA1B4306B1388863F80ACF9FCEA03C88ADADB7C4FDE56D14 +2192097015E0C4F622C4118EAA3823248E6B9CD5C9DF3517F731E17C1DEE88E9 +8C10DD9482135FE1581B9F9D274AD2A4F4C4AB82687C897373786FF3A19B5DB1 +28D5A3B59455D17D2442BF44AE3D3E37E5635B3981346782D169E3860E6E33DB +C5777DE21CB2446D3D53E25C1C3E4A5319068D3A4EFD2D1616859959B5573B97 +446B9CFEFBF8DA22FCFBDAF672748900A1986D6FF0C7DDBB737AD8CCADB39D93 +B8C0B42AA5811564134EEE9E1745DDB5D87D6336E21EB806BFBA21F296F3620C +77C57F9F2F1535C1847D7DFE870D292F1889B17F2A1DD8122D646D4B5ED89A89 +A27B55E5E3DB0A21BAE974EDD145ACA2D3DBFCC41E1442E4C71572F6332A2BBE +1F26951DD76F7E9F1D21AFDF2B2F176D5FA873A0E87927C98432469A5719E87E +61F0AD048A2C6CEB22E0A274A2E24739CDAEF7E741785098969714FF22FD766A +AA91BAA4F2E148AA2A4849E44018CA3A56CB24F661BED204A3228BCB34A71328 +DEA7E832753F683136EF071596E0E1553FA9B7C0FEF063099155D11E2B4CF246 +01F0BCCCC30D72FF73C88DC2AFC3E2BFFEE8455BBCEB9E130D528E13BCFD9FD2 +A0862E4516CCD3407C7C7EFECA329194A48BE68A099F9CC80CF4724252DF4D2E +BEC248133C357C7601B3B7D76D040A3EA0F3727C4479F1F781F9EC9EE799A795 +EBEBFCD07D218B1C37351AEEC49D2FC2133127ACA717FB1E3DF5C553D7B867F2 +984659D466BD116A607E68A3D7776B10E62DEEE8AC4E3D019C65567E66CE17C0 +5D77CA70FF0BC2B669673169C842F724BFC7DBFA4E056DF12AA73D85669610F2 +98F468FA0BA593C51040940E87E2E7D3DC8C2E843DA2756D6D139F410F146B05 +D18180CC1FC0ABF1EF9EE86901E87582641E7F09BFCEB2CD5089A3D6B510C792 +C60E635E453519CDC183DE287C8B2340D731E4A792CED7174B9AF9037DF5B279 +8375003A95965124AF855AF2CF04812782E1CE0B1B9BF7C188A53C4B86321301 +F023734419DD8F8236B11F4C7015080B3990EE63A22D721EAAFE702856A5ACBC +ED1FB74F68245C1DBF46C33B755777B983DDE8D41590E7248AE8DB259CA35197 +FE3ED93CB51EDCF280E094B2CFC61F53FB5A52CE74702030A3C90CE2AB3B7FA6 +59B305765206591B0143B4DA04D625B22C7264C261917A02A2750BA492C0F0F8 +114DF714AA6B003B9540001644DEF7462C01F7B90E2FDC0981E79E9763A10251 +FE38FCC2FD0AE00EA22722F96BBC059C371CE5936C634F2D07BEA7D46CD3CBEC +0C7862B368988A95BBF0CF65967E54EAA99F39A23FAA08FB2858D70CF94E865E +F7D4A937C06917E8D9163A2CB42CFB57478EDF9E6CAF70DB5477AB1550E97F12 +E55CE92A01EA26E55A8BC51A38EF2079B0D7BF46376B8FF0AF901B8227C936EE +19B7AEABF17F242544350A1D0C28CD2E526A44E60A708221302E3B16544E9E84 +23CB9A8057A7068320F1D53DA24B308389962B9AA889DEA3A71C10E4DB41B967 +2C2B9121844BA1C256EDDF8EB34ABC0B1961FB40B44656693EF0C864971A3627 +C9C8D89E73445E684A49BFA4D3670AF017A9B5425085FF8CA94484C8D06F0C5E +46302D06D1EB646019513472C9FA7C2296085E208C6891EF2A7E3DA75E2A5140 +F5BEA92C2A5AA6F44E6B2C1FA1FFE434E58BF6CEBE3F90E0D299ED043EA27EC6 +3CDED517A698152C766B56AE25BCB8FD12C27F0AA3F50FFAED672BDE0E14F674 +5EC2F24FC0C84D684DAC7F10B2CC4808C0A9F91818DD2F05E364D0D8658449BD +BF598370B5FC48ECD85DD9166869DEFC21707C30F7B7CF99A34ACF26C62872FC +A15EDE09F554E21317DFCFE0D45CF7E38A72DD2E8F6AB44541D85E0F95617224 +CAC6E099E08CDD956DBDC49F1AB81DE6C6DD6C48241C0985FD00952B453DE19B +2EBB3424E658507F403FD0BD1C0C5E09F15CEE4A24DB327DDA8D88D18A41DBE9 +26761688A6666DC33A6B0CF337FAE51CF9337627941B818FA53001F639D488DC +C10873E21F3BD0DEBA50BBFCDBB76CE071151AD2C3B54E7DD18865BE6233F95B +69DDE72B7679DCDCD24DD7DB3732A1E8B4C8024AA5251A4FBAB4FDCE468774B3 +8904877FFCC902C3DF9404F3A1C7A1D0F49A3E65C7133B4C1049A6845A57638B +A9B10CE7475AAFDCC84276DFD61369A1640C76C2372EE95A0EC399DCFDA9133C +C593E499E24B5B2D03A6AB3E43B4B73E233F7F41FC38A0FE60575245327A47A5 +41E2EBB51562EDA317BCB5E207ABDC58B74F28B904DD69D58D534662E95CDA5B +DEA467DA01B240A3A71B2624B49B71DB8A81A3BAF67E15F4F2B57ACD1F1900A5 +252B680D17F0887F613BA5B9081CCABC851CCB4C37A8E147D3466526B407A4E6 +19EA389E1D5ACB3B494BC5BB2104807977E5D773354C9AAEDC1B84A92CBB706C +C4247888B0E2EA8CF8AB5F7B89834C08AD34CC099A59CC51264D833332D19422 +36AD35E35F1518AFC233A4FC35CF30F94A8518E299B6233AFC100FA3B3657225 +88A43DCCF90B6CA4DFF9685DAAB56CC40B6150C27CD76F4AF209B2385D41BA2D +02B552C436304431B4B42C4C94EB36BAAF23740E36F555989CA4BA8B4C17400E +044C7B7482F0683EDE11DBBFC36642676F02FE0BFB74FA890DB2125B1EC34561 +77E3D7CBC9BDBE1A50662C9118B78EBD96BED8BC7F2661AC6E39696CEA072E9E +485DD6FE282F02DFC87F3588DE87F1E5B4ED84E5D98883DE09CD37B421ECF443 +F3FF7E57D32D528E5AAF87436CFCA1A0D915E1FFB734D14F81F4629400931E49 +E5908D1D3BB86B3E02D69BEFB614E5F058F715935AAA8A9B03FE6BF82ADAB9C8 +4C382F364D128BE5558747DFA3342979954B0C484B698B663508923650ECD360 +E75A9FEF372951FFFEDE0561CEA80EE29F015EAED4708616478E4405D09ED7C2 +6221BFB22BA42401FEA2966161A65C08275E9EBC7966E560E69AC39CAE196BCA +DADE8D7FD55E69EBC1F74E8E0CD632687DEF2E32D02CECE979BAC2694410623C +E89C01C905EE4BE92DB386768475C054AD40FAF3B044ECFEE1167C08592B4F6A +038B20DDD4F8C70654A00C0D28107E45BF775B1219DA6B884F7728E0FB23DEDE +A79D8B6F80E1FDF72EB717620544E58D042BFFB2A89F01B7E2573F6B5DA82DC3 +5F9ED7B644452FFACCE761382BE894061AAF0ADC92B218D3F30AC8B7C2B4474D +740A9661FA4F44EE53F2BEB101E16102AF3AED740A0486BE28543BC49DA90282 +88E9977720ACC7720217108EFBDE37D013FF19B60744D735AFBA27C49281CFE0 +84E22E30D2B418CAE223455679F7AD9A8BE049562B8F8069B2DEC65E6C07752F +3AB1D19C6EB11903187DE9A2B5ABE817EF14C5F3CAB32B382A4A1AE10E9FAC76 +57275CB4A19D5E4AA90485C91DE7D83846A309F908C26E3C98110BA217ED7A54 +F0FA10F8CC083189C8ECFD6D24ACBB7D14BFDF7E8EA573F01938E750BFCE841A +0877F25A4EC9AF0D17DD358329C5779E3C4DC2097CCF7B2F23A3670B3B67AD31 +5428E0A587AC2806A9634B15CD1AB20A0245B4066311CF8271F005F66A22B102 +04DF7C6E1BA88413155201BB2CEC6FED892C8F812CA35EA384FCEC3DD8D5BCBF +C1E676896DFC2D34507BF1E934552DB0C1BF2DE3881D42BEE94FD8B1835463A5 +51868CFFB3BEC123D3AACBA8589DFA7845CB99C5881FB07E97834E805686EF4C +50B71DD309E704EC56C5B4C431CBC6A9C9F7454ECB5AC64113EE5D90DF8C1ECA +86386B38D6A985E03B45448F55D39E07FD4696FC4A2DBB2B911583DFBD10264B +9EF54217156384F8C0D5C99D0B6EB62B88991C5158542D202DC1B1365456BE94 +7233B0B31D541D15143EB4D48AFA929E22ED2E3AACF090B9E50E320256D95223 +2E4B473AD58805DC0020DA6FE8CEDEFF339569BEE59BBAB8A9C789A4D1B1AD24 +07C995B974AC8C26728E25C49CCF2F54341BE82892B3D3C1243075E500679F93 +7F120BDA233CE416FCDA2267AF799EA4345FC4B932CBFA61B588BD7152996EA7 +D441EB0172E418E22A0120D148A4C1F73D95595670BA3F983C7D36EBF68B0916 +407D8083877311B5F8C9A72023827ACDD925B9FA7FF7C1F629FAF23BB224EB30 +1322809CAF5DC40F883929D1039829938E19FDE2559D2CBD001A8AFDC7E2B716 +8118701CDFECA74D2F7A82149B3EC4101C77A0DFEF11F3692FF2B3DFFFBC164E +BD71DA2C7005F942C76C3454A7904EB717C16848A7EE8B67A7575F5CF156438F +0D54C88F91412C0A6D87AB253B6065B997B84AF1FD24B03CFDEABB2EAE85118A +E0A35424667E71F732924097AF22C28DA648A2E8A5BB764E5DF9072E6C503A9D +C05CE851FD964ABF5A2573851F7216E613F4535FEC10068E88C26E799EAABE88 +1BB6E4BA270C2744508F8B68EF9F551E7BD3247969CD3D53569723EA41B32538 +56AE9E4EF636C1299256E1D1E4ED108C14A69082900F5585906AF8A899A22450 +0DDF61DAA3B3F626DF290EA31B1F37F6007F207A78C798F40853C40F62DE362A +08C0B06386E1A12270C528135D3C2602B14801C37323B53887FE309227353E7C +A02D6EFD99748B9CB2493612A80A936249BB17F4540F93A750C56918D65FB485 +693F169B514B077E49CE664C619653FB7BFEBE77A63D1B2FF857326654F7A32A +87970F775C3C57AAAE98365D69D3CD9AAD6CF26ECE04A9DE4E3DAC9C9ADAE5D8 +0C7C60C62F69414150C31AB9E0567F53C3A8F575DD994CE0F520262497BF8DE8 +4D52C3D9DD349A062154CEFB784AD62F625163CEF7F01690C711D4BC6FC53DB3 +A84187FAFEAF5D93D0F06A25B4EC48341EE39A8D1F8F7387E5A1DADC00F2D83C +4E094BF1FEB09A0A7E6F0BE30284F743040264442F3188C84D388FC01332DF39 +2FA2AA98FB6A75E926749781717D2AD92ED2E14EC42866EB5046F7C8CF86D298 +0BF6C520EDACF09EBAAA43A477EF416E8F1088D31554E1CFA4552E1914B908F5 +92513A2C5416B76FD56C12535E2656344D0877105F841A259EF69927AEE6B1D7 +BED8DD0F6CA7F6D5CDB621E4FB44899CDEE60B8E99F3BC198912E3687636221C +4CC00D2A8A80F196237A54BCDB1C1ECDE659D183A900F544205AEDF192CD8AD9 +0FE31CE9513D298B7DF9E2ECEE56C10DD81E4175DC2966504DA5B1EAB0D88400 +3A43F4330C53D2A7506E240934CFCF65ABE9C39DF8F79442D3B8872519D89ECB +766F57344FC42D5611B0B86EE4CCF4BE6A550A7E32FA83A8DEDD10279A1A5CE0 +63F3DFDBF95D2A60323399469F72C76FB26B92D95F1ECA6F6D4CC8ADD207D69C +FD0BB3E2B00F3944C4606941E723D904E5D7F55D72921DDB383430CD0C4EC291 +B6BA49B1B2FE99FF849FA2B5A8A898C8179D0C2E796DE8E3C4A0F998CF4B5433 +8099424A7C76C3A498AA6109E46EC9E6AAFF45E10B364FA41B7577457D6CB5A3 +FAAA3EED89269FC270B1014A22C4D2788FB425396B97FA3FB7A959823D5FCDFA +2911B02A6A856224F202B50020F85FF91C1397366AA94734EEFCFF1D66AECD97 +B4A443F37733498F4B8175703FEC53547BA08CB2FC84DA76076B1D49905A36EC +E8AB606AE53986B8C0F26CB2FF58A58538511FCDADBC5F51ABD0901ECFE06707 +B41CA6329128DF5CDD6F3526D41174DFADC2577E4AEE525D5B01B0E1E3327A95 +B0E4050946D347C0EAA483C2B8F9DA33EB687347B6A0CF28BFFB11BA7246DFD2 +84E721312CF19CD124AF18F3F8C7DAE99BA5AED0D951A84F4955A218215DC5E8 +EA5B2CE36C5E06196966B65F4D3AC37F54FF8B2E5568C234970369E5732F324D +6EFA761A777DED5C806D6EC15F45ED14D58FDBD331C9F4597199205FD2AF2A30 +2C41EB17F71AC38A085AB87F6BBB37BBB8A40EED15BB05FC48A99859BFBAFCB7 +2F84944CE2FFE95B4CEB21DD43BB323362BE4C8F2D6E016F3D69FDAB2BF5DFCD +287DF42B7672E4FA8AF34BD9E257A34E388C7B47B819AB081EDBDB20DFE86F72 +90EB77835924F2FEB9D7F1516DAC09467D720506C419E94E44B79225C6FD001D +461B64AB5AE56440D7E84D5C551010865BE4CABCB6EA62DA4503C7A73C22E05C +31EB5B7D480EA9F8BA4877D7BF8618D88C7B56E208215B9B50EDC8D378C2D835 +DB7F3AD35489F6F3D6A03C9F0490956ACE2D3878BC31CE5445A7C63B13086C28 +9C9AB643D12CA41C54A6A98FF8C550B00D8035FF7E485CE380084C80282609ED +18BA58CF164A21C80A65B235A5C10730BD6AACF33BE7BFCE7371F647D5D73708 +2791C584D5D19BD75D9A9882B70B8AB253495CCCCAEAA74455C61DC23E257279 +EBF501B3BA3A249C6F0215C1810D02B021E90ED3946D96066880E8E594B0B125 +28B7F3FE3832E3BA37DA65ED789F3EBAA00FB6F43382BF83CEBB70F056D06896 +DDD48B5278A27EAD5547BA2F583CD0961A5A040692FA8158B0C83275529AA118 +1DE0670915C269650CF843CEFDE6F896E0E897E12899E591F6EE44AE743E3A04 +AA7F2B41CA6472AD33C6114561B3A15EC8FDD3595786C52F5889D3BF0B20AFCB +803E6D199DAF887509A9A7D663840B15FD7DC05EFFB27B3A30DEB80D7BFC1406 +481BCE51C2D6033758F2649EC81044097F039C448B8B91FBA5AED1F15CF17347 +96C3F938EF0B212A707F4BA27D6DDB9016B07CE699C2AB314DAC8A99A004F43C +92C0EABE8A0E13848850ED528D5269C353243B20EB4C1DA88AB6301137032E54 +0BBCAAB039E216DC09694D2406D82C1803D26BDE251899012A7EE6298D2C2F52 +E5D87FB42ECBA66A40437B754C0E57120FDAE35481382DDC2A498DEDAEA9915D +4B85EB7A313C73E804D425B79A2EE9FBDE556F745F5DE31947B1331D7D965179 +3F6F66D3F4700807BEA5232CE668137CBF2FD67BA025D7CF37ACB925C5651337 +2EAC6D5513DB99F6BFA61B717B33796D46B47B68B3E5B937C170E37F4EDB7B66 +E3A8417123B7824569AD515E47CD823FA8F0A2944DECA5A257BA2A71CDE90A26 +985A9D46F4B4EFE36BD46C8CD48FBEA4B3B98FD33A050A16FDE2518E09B7FDCA +346F6F01C7B441563D64341D29CAD327F62AFFC3A59675EAE1ECD2D0670AE179 +D98511AA514EF8111BD2812041D875BB9A198133D3FA17319BCF8F9BD838DBE4 +D0BD072D92DA296A9333250EA05A9796BC1347BAD789B803B317914EEF08AA47 +A05EA5C5C5B903B7F33CA520502CF3E8E5923C6AF86488CE2F05A1A503117762 +F49765A64E4CF9343E937CDF79097A9E8ABFD5CA9D31C8979B8F72D80259C4A3 +F599F0E251D2820A48B01ED48AB4BA7E474CAACCA2F9773285A049B66A0E75FB +77F1FFEF68D6FC457C6C0AD6630266FF749C58A021FC1382BEB1F400FF4BBC2B +EED145F907CCAF9C8532EE3F447C64D28334ACC54B9D4F487A1BA4CB26C0274E +73245199C085FF391245126B990D8CE428C59F872F86EBEBC88D0242486BB201 +0076F1C5ED159CE403D08BD278DD21C917808E20CE8B23730A38E172F537383B +410795C3915BDB06D922C3604E68656995A3452CAF4BEEAA176B487A39E24149 +05D0E6E6FA2EFFE71D96617E5CF773E55165EDBB37C63E700F1593221F866189 +CA8DC2EF18FD9DD83D312B1B3B159656679DAA25BFE2B54ECBF532ADDF3F7C4E +BA23628D7FBF19E6D4271F16A91F751357AA46776D1F874FF4497EF50F6465F2 +48F547A8D00FD9022814F58A69A8643AEA9886EFEA87E5AEEDD35652FF584AAC +31901B459D2BD707FD79F629C68F94B471FD95E4A4BA996AFCAEE15557C1B167 +4649CF28A5C8BF857C3A63754E8CBA570E4235F179CA3691E948ACB1FE92ED28 +F82D2D96E3CEBE59FC117570F19F364BD092070E06C69A40B6F53F5912841BE9 +AA6238E14A774BDD8E13060B20BC8498014F3A5511AED7544BA9CA3BAFC4529D +27F430F14C6016B7A5487FE6BA6EE10545A0342C8DAF5EF6D6FFD4D55F74F406 +49C557FA75E61BBBFECCF67C0A512C23559CD71CC67A5788ED0282B2F0B8D6F0 +3FA276675CA5F2411929D6ED8E1F3C3B6E3011B46CFA2CE18AB291C7B3A7208C +DF161C0B2C23A0000819848C490EDAC1C320B5A7E60DDBBD93003387298D04F3 +1EBCFCA1B17E3C136A9D60080DE114697682E4AEA88E2C61698E2EE9E38A491A +5E10BA3E6AC61203642C2EBA3BDD759E15F36C75B4FC4D58F33BD9F4E1E2CC64 +E1E88E22F80F0F160F4BA00ECF5866717EB3899617C21D1ED5F98BF2AE74DE49 +F3BF8CBD0F8C68759C3D4CF56EE723B12ADC58ACE93CA4274A89C216AAB3419F +78B60B263A44B1EB69C07BCB1F77E2CE24EDFFA75A88D5738C75424150EFB5B8 +9D128D3C20E4A1517E4C085C67F1EB943603F4DBD591A617EC740373B5AE2DDB +FBBC875171152C79AD3BD887291433489521D7F6B4D762FBA6067EB6AB5996C8 +32B1D3179BB3CBDDA8A23B7238791E2DF97C654B8A8EA305EF4951283689898C +0FB114A5EF5F29F9045C7817EA7D8E578DD48D8806DE88B68DDCB879A0AAF44F +415B911131E45C4CD5664A1F35179A3355B4430520D5C5D08F7B63ECF99BD920 +7EBAD74476FA147B94447E84AC4FD7CB8F850CB19F41D18210DB569D5687FC95 +0CB2E776FCC5BE3AB89C611F488FC07C2F8A77DE6C008208DE782D24395BC158 +5EB7FF2D4AF74BB0F10D8EF2F1ABD2435CF699EFFC1E7CD37B4382BDAFD2A83A +23419D5A7DE1F19EB03D7FEDB30D322BCFEF3234580A91DA108FA4EC4F2091BA +D169DECE3AEDE61C07E2092A80F6A8D5A8E4F8C24106E0D76B71E9B63F9FD9F5 +3F7A735CD61228364E76D65077B2EFA802E15578F4785708DE8A509CA8A329A6 +9194B07F1FDF2FF3EBA62BD318F0ABB3ABCD32B4F77870D8C4F964AE4FB32723 +3BB395D30BCCA1A06966788E2F8FF5166985D83D0BBF0C0DE778E246B3B724F0 +2EE098B24EF06F6600BD6EC4F109FD2CD765F85E04D9C95DDFC7B9EA8D14A892 +AEC2C060A7356B297A3864FDB434EC80D577FA82EE91C8C43A1D5C6DB5120316 +048075EBF3A7D88AAF3CF572A1061617A075B0861474D4ABA6749D14C0272156 +4B8709C55F7FA89E47C8348E8181BCB4683A8F3AD1D9EBAA9EA7CAADA9D8E939 +0422BDD77C9C023E7E1DB7AE1F94FA53E8C9F98C6CF9A9F11D99F35F2310389D +B468F37C3F0C856B9CA592915F91BD94DA48DD620E1B07DFFE09E0EE181EBE44 +75228558C1309B0ACF02BB225C7640F1453E89F9EF8A81752F66538498B835F4 +06DFA17EB45FA5BECF212C55F27E038FD55C6BAC12CF6589A150AF8E61F1932B +AE29234E26183D4C05ACB111BB0CB06397264606C3B9043979785D77B17B181E +B6749BD23196CB92A90CD96418B7DCB67C6E361726573735EF5406CE233A3E7D +045BC9FFF1796FB53AEFCA6A13E8E00EC0583E5CF1546572770BBAC0F8E15F29 +DCFDD2EF48CEEDBA6E8DDF847396BD03631A20CFFA2D980AB6A8449F07A5CF5B +8B21931B2019B4E8EA928C26940EA741038A1B7522B62A06B78FEBD9C88CEB72 +17FED8435A7EFA0ED35B36742CE23C508B0940A362C7AAB5C3A0CFF8129D7085 +12AAD5A82E3759AB1A700007A16A911E25B895175D3286FDC3E60B038D6D1E65 +4E0AE7CA2A93B482ADF9BFA97B46B314607D2D4227391DA382D4C2E0A853D2CB +A9DE0559A60ED27AAFA24AC31726E19A213654E8DE43098F329C107E71698815 +86B7C2DF663DFD34504AA2F5AA848D3FBA32A8C21D3726A14626F8E253F4503C +2AE03FDC57D866882DA26B319C3DB35DB4797D4FE14C8EDBB9E26B130B9D25F6 +42B006483B8541F195EFD48890729843BD683E76C3318701C0423997AA40E8FD +214D5C28D6C37FAB59AFD4E9B17C142302800B02651FFA7E10B9EB88C993F559 +BDCA7958B2629DCB21C5AC2F139B5341D0795B594C2CAF50CA3112E030FC9E60 +EFDBE4D5CA899E0ADA27410CF1220E3C100148124120E104FBA6494CC9D8BF39 +6485AB8A75E588FDA7BD2E8F0ED89E87796F52AF8800C9BA3246C0CF0AAD955C +15B545540748C11F32B970D7CF9C16F4BDB2908485E27807EAA51A3CF11BCC86 +DDBEF33E2B13994C109C7607C4635CAD863FC7D1E49051EB501E47D8AF8A96A8 +8DFC6A2A908FE78A7846016C2071F930FD2A3E5050E19FE26CA09246A350839C +C7A06F69EE29B4826409249B8687744B1C28B1E4EFC4423EE93403C4C1DD054C +28C48DCE81C21EAB792BB74E7C173EB784771199CB163783D232A735F74D8430 +5E488CCF55B1550C2E63447F0622B407D3B680EFB8EFD504E88F1F7BE09A97E0 +217565473AF1E7EF0594256AF56A4ED17781F897AF7251ED8B1680043AA64B60 +1D7A2BD9DC3F4A9D07B0BB2B3DACBB2A9AA3F3DE8D747016983BAA7C21BADD68 +583BC8A37D27DCD643CAA653C50AE9D4B40719CABECEAEC5AEF9419A8A370DB3 +3172E5DF5EC198F7E96F26C4EC7107432C2D8C7D280039031096196E57A0C3D7 +4B91EA0194685B4D933FB898F90BC9B31552486F1918653B50B28FF81369AD88 +39F875864F938051CBB1D872B193338E68135091DCEA243655FB323278B92E09 +D87D8CD4FCA034AD7A218B864A54FB13F39491938E0094E46CE16990BB47DF69 +D236799B02699BE88B54FB17C80092DFD628860824F789000BE4F2C3BB2ABCC2 +4447F49BD36B1BEEDED6FA3B5CDD935126835080FD2AC78D04A4DE3A153F5C9E +23D4598C9CC923FD9AF0B6E47D50403A6566E68ED8655AECBBB4D4D0C0D70287 +D02AFC5FF37C660EC894A4ABB0614FC165C256AB968DEAD57414F06746D41E0D +36AA18F73629BEE12532B32F93E5EFA54000F251BE4ACD610F5168D32E0ACF1A +98CF89170C4D2D9E4F057E38E7E5DFD61774709A823581B0723063F88E217723 +54627C11E53B904958CBAAABE93292A55067B04FCAED977C016EEACAFAE4B8CD +09F39F4854CCA7E6E7E7C1B9702060C781ED45C8354D3AB3923BD200BB2ECAAA +5D767EF34D525398BA831973D9BB67903D9580FFFEE1AB2358EEC23EF38C426D +C433391AB6229752CFE6EF4595299E02383FAB46AF8B3E3015B6CA441839DE46 +4841FA63E8A7CAAFD0DB875B0750AC00A4C4615EF8784E0B70AE0C00BA83532B +98351D012A8994CCA18D3AA36C2E7AF12A051A8E166B2C57EA8A23AD2D66881A +EDA79F565573C76F1249AA10C1DE4B60B51220D6B946498D9800B8B59BE65271 +A8EEDDB2DDDD19B273C48FA601CCDD84C5495F77FDFE22F609D4C8FE2DFC7BD0 +F108AA16AB5B34224C579A7E1BC8AEA267C44100BDBED6897528A799C2E9478C +DA8F6ED505AE1410F0E4071CF80FF8D3CB5C1CE1B44AA7B2F38990E65D9814DE +D5F2CAF8DF24154B0E54B58AAA2473F4A27F712A0C6690391138EA6A07CE358D +213C6D1B0CB9DE945762F18BEC50C5E11DC0A0DCF0DC8A02CC2BFEE7C4DB0BBD +9FFFF7F3C79F3A991ACE3BCC36785FCD072FD159E2CE9AD429A27CEA146BF182 +10EF72E4B329EAAC8B70ED717F0C8B4B2AD31A0FB0434652C01D42FE29A2E0FA +3B529643E6FA98A66189E00CEED4A4A0D9A583FD9D83E8485C7569875F9BBD5C +270B0859EF041BF4006DB8E2D32FE80C1C54C49B1906E58576EAFCE3DDA41AE7 +EA6660CA549BE72E06666D69F82B26222BFF5DB21C15B8CCA4D8193500FB0520 +F7FD4AE3196853618190C578F485DAD0D52D7EE45E47890327EE8A2387E26413 +3209DF5C93760B565625378FC1DAD322EB0373525447170919D40D12394CB0B3 +72859C51197352AD62F3417D147D88DC59C5CDF32543AAEFFCE63542C6E69B96 +1BAFB6AE012EB227A066AF9799C58A02FAC1227327FB5C0A4C3A83D105275287 +8CAA7E21AF180FA6181643E10B72E0139BA78A03A4FA97D3B64D079A3BA8564E +14400D92A3794251E68CF55FA7530B64BBA2CC4AF800769D6F1CD59FE767D129 +D84B4CC327B4E27566B60B8505119C2A5967342B055274C793A624EDD6156478 +0859496478997011C584BD20CC9B6E950A129799A71BB917EF6399D60B62E6F2 +1BC2C88A955A6054DC6CC0CFA8EA2384CB34D381670B034ACC7B74954C6D3871 +60534C777E1E2193CAA62F14937CC9CB4ECE9B5F23346EC280F06B7A8FC53D6F +EC0A91A2B5458D46763D6207BB6D7FBD8CEBAA2D028CB9C256EA1A9A04AC75F2 +0DA3B4021CB3F872AAF7828BB33DD137058B6CA96E9A371662CEBDB0CF2228D8 +BD567C88D9B813BF74D5B014E34344BDFC46FFDB501770BFFC22E3411EA26866 +8D21DF54406DB95377DB2DD3045653B25823DB046672CE0095BEC20B8F0A6136 +374EB7584F372B665C07441903E19E61F84A1103069F7DA211DE645F48A3F550 +1C42CC2330F1BFD8913A9EFD1155F2C87DC62608D532F4F5933A226322B91B5E +CAF2A1061908FA76A09DC057B582119E526B5205CB52E77881A9FC75059719D1 +A0FEC51FAE6971FA9F981E7CE7A2050F426A8C1D9EC418825EE8EFA9D54A6C5F +628205A912ECAD23572E3610DDA047EEF4457EC7F68CA82D2E0299D92ECDD09A +BE7C3E9E81A9A72572E3AECF8AAFC39DD7FBB3DD56A1C8997207BA956809913D +881A0B818F235611FB3CD8C3735AEAF53C5B6959A9CD7608FE2BA5C2A1027762 +83EF74740E37ABE827E61519FB78994F28C59F5BFD328171B825A4BF80C91E9E +10ED9D71094DCE44B556B331B4DF9CCBFC21DE15440F2814F58A69A8643AD72B +DD53A2CFA63CF29CA3DCA60EE2C558F3F4D0D7F6D1AF921D581FE434244AB4FD +01C32682508A964114388582C645F32458FEF0673FCEF009CBC27FFFF120C57C +0C5A9294023870A510CC6B5FB5C54F98FCD27CE5575ABCB1CC6F3930E3CC9895 +BFC7FF80C86E2608C3FEBC861C71F34C1F392B7BD86146590CEFF7CE332D8797 +BAE8FAE23DE40905CAAAB4FFD115849754D2B5B3A3B9B726BD45E0935E22ABB6 +CA298C9D8C313D83AFDAD44792AA29B814D2FDE9D8209FF3FA4DD21AF52990CB +E0AE5B9B7024D8D8E147589B496771EDDCB46A8034B6B2E7D304B5299D44616D +114328D7327730EA360AB2213EBA21A32930F323992973EAAC24BBF4097EE98D +2C4BC8E7278923E8B726FC916C64E6E746F1E2DCE24EE57FEC432436DC2E0028 +375006996DFA4CBB077034D588E27C2DF082E4A4115A849E8B77FB3CE4B9241F +E747E4A719CBF2DC16DFF86BD74F536478261827A4C9CFC96806731396036CAB +DC301B8979F7D1B467323E0FA501905F0DD3075D6F2F859A905350285F8BEBD3 +C86186D8B644D7C07274A7AF96761464201EAA4E0694ED8C091326F7D2D0F464 +9CFAB448A108F376CB6BC533A3CEED71E6E995E33F8197F23ED966AB0595EC82 +4BB3BCA4DB7BB42E6593EB0933CBC7E404AD72061CAADAE15A94602A7554E6B0 +294F6DC2D5FB7929426DFB4B4DC90FCA08331AEA9D226D8EB21CB8CB2A4012D2 +027EAEDCCD4F4C17CF03484A94B824388EFF176962C3426A09979F84608628A8 +B8504D72E5040573BA7AECC13EEEC54051A31807E77FC5F480C8F30373B67E7C +F9A45DAA5B97030E16604EA3A24337537D60638577913280A130C6D25C8FEF7F +439EE76E361B3E3A46EEE9F6C61254918C666EE7A94969063E7C8E5023D8F354 +0CB1179A4BF4C009C67B8B10464C38B2B631DDF0801177681B7E7CFB941FC926 +D4362E86944ABF77E2C805815CD93DDFF46D574947A100854AF5BE55F0AE51CE +AE58EFEE5D00DAD282DBB600935FD6D3676D4B35872E7DBF2E5D164495CD93A9 +E3EDC2A8D06F9CD7E6BB76D655CB563F2B709B1FFA45E486C1E2A46A5C2EB5F4 +3DAD30D0A21F3FA4170382DA80D2729EEAED59FA99800458B6E8C2BE642F01E5 +7181BE0C35DA1B3D85E49E78C65E7ACA7CBD3EDBB07C59D6AA49F89BA36F9C10 +E141D9B7EED632E1FB544716309F24651BE47D4BF099441B763567EB6156FCF7 +E90554411216854A74824113F4C7FB626A91F32CB824F6BFE607455317DEE718 +A0C49504B2817459B0BF87319085BFF82F8C2D4E1C7DFB0EF4A9B8D53C78FD0F +5646B00130AB9F22300B69F3FA222971386CE71B4EE23006914F73B6AEA13422 +39126FE987F592176DCF482BA5B61AF13809512957A15EE3A1298A8BB5A11AB6 +314434BF61067ADEA42FAD97CC02F0A89A62D96E9E6C7B06088C3E02044E78BD +F479A423A44754865C36F54E154D663CAD44F635AB03D62447E25F5FAB14CD4B +86DCAB14B68003A6715FC145A62A8CD1FE60230802E56A5D906465E17E8E1384 +EF93A2248C92AA69B30EF1958459F2B4E073EEEB207CAA1C2C81ED7EC203D328 +080A7E22E41386A49F7C50C7C3484E118CFD08F4085553D08F95E9641F2F016E +CC589906448A0710F3D46F2FBDF6E11014B71D5B000FC8563300F3DB14F20C88 +1777732B61850770B1292132357DAB822EA0E82CF09069DA6067E8810DCBA80B +E038AEDC46DCDE18811BAF4CC2BDC823FA0E525E4920AC49A13FE1F0BCE09595 +6B0A80B68659521ACA8DFE71EE72EAB21DA362841DAD6F1F50D20DE4D53AE3D0 +3F5C96727CCEB1272DECDA82BA27E018170F55EA2D94660037E05207633556DC +4C8F0108367FAE02F1409DAECD5D0CA9BA47558B8FD450EF3C332E655D3222B5 +AD96C39A5F74DAC7DE60E5352113B3A778D97A49569411FF7B8502E1B27BA4B8 +741DF55BF75E51AB977C3F0DC4ABF7A654AB21C603A7CB63CAFCC87B5E60052E +E091065CD32CD1E15237FBBE40B5E8D4C6C34AB13D1EF5C1CAE1093824FBD5FB +562B809BE191A1C4E6CBB8D8C619536385C76FE5313F186AEF625C4D7E159151 +77F732524F5300DCBA3FB5EC9091CCC533F9D8D617D02E93A80DD924A9F8FC00 +08F1B1D0A1F78B36785C529C35301BED56EEC11F4940F12EEBDEE487C8AD94B0 +6E14FCBC1BA8AC32960AD9FC1CEDB320D53204AF69A56E4EF6B28EEF0C703DB8 +0604DDC0DFD2296BF919658C28D9027434980456A57577ABA0024E3CECEBCCEE +BAFE230A285771F1E6D56DA431AC0E06253F141CD97988D7002598D4B14849E7 +EA30A6ED6681C43E5169F2CD31BEDEB51F29542D470C3D90E87A7DB4F11A9D07 +B740EE90E4A39F4CF3586C2C723C3139F33186EAE49A3FD6F11A79626E422CDD +7D7825DB95BAB0C42AF78CB0E03FCE914A5489E6AB2143AB4D2B516AFEB3D4AB +92D533AE294568FC498E5AFCE3C131A7762C43C94BE1940FBDBDC0A44087FAC1 +5F7EC321EC0E7DDB3925C94BFD150FDB1D3556FA8456FCE3FC3B12263DF3EDC9 +C184528E75355BFE6D88935A666F53A53C1606A019E5C6E328F787078B15AE32 +9F49454CD025F0D601098FD599642340A59A5D2E9226E4E468E77B240030479C +14BA84F04B0A4063CE396D89EF3091467D212C5FAE02730A17879A1520D3BF00 +BD5E80610A75E4C3581C53674B4D18E3433B24841C20B7CD7A63C99511366927 +0A117CCC8CCB519DBA75940D75897C664627C88B98B4EF7A34CE5A9FB212777A +FC65DA6A4E1BB920494407828F19501A649850F6996171528F5A9E0740DC5D50 +DD72C991663F1605D53F7D64EB94AC101380718313DB47D43F2F465616F7949B +E46CA304A89594023EBC34B252867541C336D2B534DAD7AF58653956985F0AD2 +D24E9C4B75755A5CADAB35E11047510AB4517AB2AE659E42B7C4E27262376BC0 +43B6FC44E67B3A85A9442EBAB410EC5A4079D690C3DC2284A080A520327DD98D +8B9327C6F3B24B0B445D09030E07297E568DFFA76EE5B8349161CE403AECED8E +1B539A2B8414C0C45C5D99AEBC72E97308F6BA250DBBE6D924591A4CDC18D6AD +E9988BF0EE0FDD981A674D98BB066BDA43F2E38CCA7BC274F8B3DFC9F2AC5235 +01FEB0CB145AAFF3EFF9DD7884A228F417C8B1F62152915FF43D09E3BD3FF648 +30B06B57033983D6976E635939D746F194F3BAA218B2A37C6E27FCDC8BF8A0AE +5B077E8F11A5A9C23C24E4E0F28902FFCC81DC60B243E20C6789BFA50A86C25B +EA4B440A7FCDCD171331DDCD591C83A512B2B962B1FEFEB9D334987893211AF2 +C2A6F2F6BF83CFCA266AAB342A7604EF55D4A94A0B9BA8247A328697E3D633EB +4DB8EF437A559CE366B7F84E3707C6957C09759CBD4C3432EDB02835B16E6F76 +5DD95A0DD812B06613EA5B80EB037010E9E4BC4A73D79B6EFF0F40E84BBE57D5 +0399F85547D3BBD324B30C931C8D48A3575124BAA6AFF4C0A857E99F0892EDD3 +563B4B441817EF65B4430591DCF7778EDCC73080CF9BEA32ADD6325D5DFF6292 +DA21601B493AC7A1619406B9A62F7D1A31AEF62B95B3ECED8E12AE21F66CF90A +4C82CE92C5EDF3A29006D9960B110F2F732A0407D2291F4F4DAAB8E8F2C7FFD0 +EF48EE5901316D4A1556E16700248C0CCC984B728FC9A89858C4830B5CEAE115 +9631A1023078363A0A217FC53BB20791AED526194E1F286666325CAADF009D9A +D7DC8E3CD65D635134B149F806BF27B10E642868B5E26E1A8A59F6B0369B8114 +E1BDD480038007155224BC3B593E60F4BE8E59363974CFBADC8A322F13DC7FAD +F5A63B0699F8FF5181F2CAA5B20CF8545E63E7C034337C748B3BF5B61EB34EF8 +2CB3639EA164F6F8A981138701EDB82ADB3172C77F3D01BAC1B1F6740BCE0FC9 +2B09BFD6BEDFA3CE8EBA804BBEE1258CFABDF48C296CD1B57D4A938E2EE41B35 +CDC177E6EA0BFB5BD493637C4174476CDDEBE2C1B6F4F90FB9680907158FA53B +EBB6B96EE573081C420A0C1FA35F7E2A5EC39E7A915E466FB7F4A750148E3CED +EB6375853DE4180252E790FE09D57373DC8CA5BFE68DF4D9FACE3A95C2FF8BE2 +E342BCF84C98F2E07C6449732D7885050D9326172596CAF8D6C1D5FBB1A35DD6 +927367908C3DF2155AD9B651E02E56341EBE697F5856CC2811E58DA6BBFF14E4 +46094DA3EA6ADDAEBC29C3FC83A549D883622B1E02CF5C0C780BAA5B3C84D895 +39204F12F590C1F84947657EE2AD21473F766CEC0802E662797DC0322D13FE9F +309982171134E7102DB9FA3245F906CDF1C2FFF5208852C7C4E9F7BC95803D15 +F7C2717D78D75843C3D5D4AEA4507956954DAFA23DB15D43B26121D03FE5417F +2609A9DF71782DC41990592A6E81D9390838F1F753D9A3C003B0F2516E8D0689 +7BD5269E48D8BCDB266041F51E8BD54AB37120725945F25769DF62B8F3C24000 +C38ED31E14974A6F4FB99C87B2DB02A4563742A0FFA768213E834E4029208966 +BB4E4AC13F8591A02C59FC1DAAF725341EA72CF61C8F1EB6343FE99A924581B2 +CA0F034285758D49CE07427C96528834AC2C99F8BB4A9223AE4D8D2B113E769A +5DCB1ABCF2695477B7BB30755346E970FA500A6575189E453C66DFC966F4C088 +B9DAC012965BB890CCC132F4E6160CC2B113F5C908C621AFA34F1D95F3DB2332 +AEC26440CFFC0564B57B4E40B484D93CEFED8768DABF83A3788F5B68239C40D9 +0AF793F5FEFCCDA7383120660A4451A9ACC99D10B232D25075EAA46D39A3D8F8 +80FC17734B9363D3FA70E30F3CBE102BAAFEAF854C1BB4944CDFA73A74BAD32D +5D0760A5971B86735B2F349970B0311D9B36A74412F5F7235A497AC3EA69FDCF +9F8AFA9812353B45ADD205B5F31B2B9BFA46D08FBBBD4CEAAA527B45679B55EF +87DF44F0539987ABF6CE2E7088DF7AA13A515ACCD17BFEC5626F01D97EA9CBF3 +3DE7E57ECC531119B97695463806D889853FC8AB6EA6BAA44BFFF796C29DB97A +FD6675ED1859C61CCCA85D672104B9F20384D2973797BD8E77FA198BE97E7B88 +D7EC196CC296EBFA08A048C60005DBB696033E87F4FA8D50423E5C58CAF32EA9 +F0669FCA67692291D86BEFF717D6C5A1E0AD6A75C0F7E3EFD2F7A5F5AD7D92B5 +9BB4BD9E7B6E7E337ADC6ABECC3C1B41073FA3A25A2FC1640DE3AFD97BE7BA03 +95DB5026086C842BCEC3A6A1C3DAB1D50DB50261A8B19A7CDD7B7891475E53DE +754050D783D64029006A5BD200B6C64D18EE7576C68E30E1D6F762E9A90C9566 +D90FE497B27A9B52223A5DEA20D7A67FBFCA5907BB0496E10D87FEE2FF90C895 +CD69414B219900CCF5D5E73461D0948FD57B8681E8E598A25FADF80BC88667F9 +C871B4F87AF7DB9797A98B40BC29CA48F614F754442AC9F5D71D55D14B93BA67 +180B01E51B781345F1AEC0E68CBEE1270ECA7B3593BF4E3E4046CDD4FD9703F0 +59822E8D30209D01BB0E404EE693ED74480B179F8431E0BF3FFF6F404AB6803E +782F592E87FCF7B811683DEC0F6DDEA4D5BCCF19F1842D5E08C16E4D61952D46 +2620AFCD1DCBB1D3D2E38539537B40E291FCC6D69667C47DC77742A8C01149C4 +DD0C08470FCF10C1D5C02985AD632A55C8C86BC7604D8438DF27DDDE6F773051 +38E268C9D7E72C12EF3C02287D229AB27C864DC7A90F6208DFA2B2EA0027420B +13637FE2AAB2CD0E90C1BB3D58C1A1E92112353C994E4A3B1FD71781CDDC7237 +A97299CBC0E704ED11FEBA7B3ECA2A1CBE15F38BCD5999525D24200B0B742553 +3FB0065C5DD170C57EC79E9E04D46BAFD0FC8C9FAC2BDF17B5B756F9B0BFC0B7 +B505E533CBBB6762A076FD1D6140C3BBCAD87AF61D1FC65613C84FC7DB3E2260 +45C8A31C5F4E98DAFA54C7730454F66C867143D2A81D841400ADE0DA5BD9F992 +58C51B112AF3674B454C138B3B087FFCD596D5F8C23A5371D955CDD247F87229 +515388BC8CA93925412DBF27DC507D29436A64E236465C3BE9C5EDAE31EC5CB7 +FE4A32CB0DD86F5F5FCDB616F45FDA945A26565818F62FB21B7DE86F61160A6E +BF7A74682E9EAC5BC99BA5709D96E52733F71385693E6B75BFC0BFE73B8F7F56 +690CD5BAE46F2E7655DC840ED4B1A8E1BEB7F956F586580CB3C73F144872D838 +72B7A58281EDB4576C06815F79EEF626A1269FA5A899B6C2B67CAAE87E737DE3 +A60AD91CDECE2F5FFBDE4D84179AA3A5A84CF55132C7160744A0BC0B30A59B8F +31BB9CA6D079CB016EA257EF19FE7787EB73158D1589DD2CFD1E6F5CB343A57A +616111909DCC5EDEE2194B0648D58FEB782562D469BFB04A55B027A567E6931A +4ADF8ED23D57A6C2F7CFC24186BAB1D1637520B2ABCF18D78F69F5BDBF4D1859 +27340FCDD8E09A247752C05ED51A08B063FB3A21150ECB022AE818E49AC126FB +B0BE9023C87E2F15A49B751D03EB78B55FA135A735926F6C08627D980DDEA027 +17ECD8798B9259D1073AEA2364F08F75DF3F3039C2A5268210941212638A9198 +2B9E83C5325C1A87EBCC577FE081557F252EDB8DCCADE7D92B6F90607D635CBF +B1CE7AA040121AC48BDD09EB9A78AD2C004C2852CC208844EDC6C63C0ACEAA1B +02006551B614463B87156ADE0E336773C7B364175ECB202EE9823D2C11DB4311 +A872159D70B91783BA0D47375222A677166DE6B2D727E8FD119769BDA354947D +B4AA82966AFFD527D160DEB0E5589C3FAE2EC11A09A41F9B04A947453CE96A48 +203827A9CFF9B84AE9B0DA3F +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l047036t.pfa b/client/shared/lib/fonts/l047036t.pfa new file mode 100755 index 00000000..fb500c6e --- /dev/null +++ b/client/shared/lib/fonts/l047036t.pfa @@ -0,0 +1,1361 @@ +%!PS-AdobeFont-1.0: LuxiMono-BoldOblique 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Mono Bold Oblique) readonly def +/FamilyName (Luxi Mono) readonly def +/Weight (Bold) readonly def +/ItalicAngle -11.3 def +/isFixedPitch true def +/UnderlinePosition -48 def +/UnderlineThickness 96 def +end readonly def +/FontName /LuxiMono-BoldOblique def +/PaintType 0 def +/WMode 0 def +/FontBBox {-29 -211 755 1012} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078986 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83E1F4276DACACA37DF93 +6E81F12A36C75497181154EAB28226DE282D3F090A9E260BE05FB75D62F0E576 +938A5E3E63A16FD101E72F7A3306261230B60339CA66A60A810D6560F2BD77A7 +B4702D2F9D75A595C875E823EBD7C94797B3BC36F98FA25220790470D2A38DB9 +0E90AB4F3609A1A013CF93D016E544F4E385663414AB2B2927BC000A9B3E0544 +00B18DE5B168D06372C55EB16D6D952F716752775B0B8BC63CD5A2DF27C0E0C8 +578EB365ADA6493181D9AB5D7B8AE30E2B499F952D65877C8E38EDD7DB29F957 +9D09EAE5B1EFB3F29CB94FC40874DD2248AEAEDC411B39AF2D35822F0F742AD4 +DAD1049609EA9CD325557E8E160E64239BC87CA11A7E215BD050A87E55EEF494 +6198CD3AC7FFEBC6D44FE051179BB739FC89B74B5183CE255C10320DD7407CDA +65E13878AB431E7B99F49D2E6E1B39D152BAB31A5BFD73BF6D298C2E71EA710D +E094C139EC016D48233AC2C25E8E60F168DFF50892EE10F66894C471861B784A +BE82A8A08C9BC8FAD0FA2E2D84406C5522CF6B9E46ECA79BFF1678DE26FA6E29 +2C3E13C38726369542682E88F4F3C0596C877E0040063BB3962ADFA6CF3FE9AC +B15B289FEDDDAD64E40AC82B3D26B1593C4C8A90B99493E33C453933B127095E +835FF7B340EE9EF89A0C792D4D0DB38784BAD3F484CD951F98B89F93824B729F +8C93C7B931D025983DB5BB21D2560E444528DF8EE5A07CFC5B5B82275CD64CF9 +926EFA32B59335B1B6E709A62D8C17D278781FC619AF66FED15922229ED441D4 +008B81578C0F30866E20841D389875795F9FA5D573A911A573281A1051293A6A +5C21938DB0F7E4508CED69E67D1F4C2BA55448BAA255E0A28DFA983C55260E54 +2E01F5372F15F74B785BFFC7502DCD104D2270B0B738BED86DB0F1F680F67408 +A9A806F586C0995A7586822B656B620E9B392D3BAE3AA5EBCBC86358CEBA1256 +EBEB0D9B5DAB1CF8F45D1FF5229ECEA379729F326E85A8CC963AF8EBFC9D84A0 +F5D7D4B3DD19142D521D2D7F96372E53EB54527D6E2EDCE42912D0B382FBD266 +4BB5E5E8FEAA8D4EA4B63A6497C0B276424F50A5E23BB17ADC8592E0A88247EB +420D12CDF7417972702B41738B7E6819476362466410CB3BF8452135B16E6F76 +5DD95AA1C99CFB3F988F1C895AA4C434076FBC66297C8BEEB146CADC7BFE4038 +CC6860C0ADAE8C851BDFF35EB980B8B4CE3BC9C2F2994C4B76C25A3811336B48 +7BEACBB256D0C91BDF5B94EE65A4032D238B59DC55D442C02553C48B1D4B8ACA +2FD1418A19576FF0CB0A58B41BE33D1810D691836F064809AED5E819D30AE1E9 +0CDF269DCD6CD605AD27E3262D25A2245933A08689A8FA2C7910938615C19CCE +8529DAB09A8CCB71847F5A79F8546B054E6E2568A39A316267E1B0C145DDFD6E +199C481BA1233D069EA926B81F1AD863C9784E281515F7CECC2B4845634D77B3 +70AC75FC74269301F562AA2B647AFF0572FAC99DE472A9B8154812ED7D0880C2 +E5A57DA12F51B724056475519E205047F52655AEB77EE422FA3E10AFF782CB25 +E02AC8572678232A611777FC31914196BF83CC82D2102A5BDFD5317063918EFE +10B43E3BB2368B7868C178B1F940512B463F0D41B85D6275EAA75856AE4A5CE2 +5E3B7079EA624D03443222496D6E5F28752F3955638A06CA42AE43EFDE812EB3 +51B65581525C8EFDD17B0514F3096D12ECF2FB417DC4F3FD866D7F3A15B7E98B +078A37367794D00DA2C72512A788A68AC0324935A25642C30320885272CDFBC6 +89F87070581BB8E902B500B878936A270441FDF0731517F86C512E02699911CF +2DAED27087013873CE750708EFB2DE9DDA19AB4387E4A5E09DF05F620C7E4519 +43A4E391BA3069202557823519C6D07B4AB3D19CD9D081CF8AB9C8E3B2AACA28 +A6A1977A7C8609019A0A716631E692AECC540BCAFDE9073E2AA7C6BC1F9AF124 +CBCBED06053F8B176F6EE71C6D804F5CE9187A2CDCE9A5B5CA28A07C8C94E328 +6D29D9051524A60EFFD07CEFFC39592E14D6F1460EF90059129AF3D989144A5E +0DAEEDF5EA6D1E7F7212291541F0E1A1DDE0CFBBAD2DFCD5B367227EF9F13F57 +0EDCC40844358B9C95764FE0981D99A793DD6260BFCF25A3F660DEB9EC5397E5 +D33D526857E454BF2694C50E7558A060C292050D534F7212AEBCDBBB622ABDEF +F31E6B6BC528B7AB99169BD1DC4070D883BBCFB69EA73E05AFD18DF56F31B251 +A1E8C9748915856FE50D441C0F968B7240688CA6CD661EC9964D030BDB6BEF8D +3FB25596A888D7530E767B60FC3C85932525DED921A63D7CB8D84169522B336D +368901BE9754CC72DFCA2A1FD4F21C2BCB512D6B97D07F9902EEB1338680121C +B2A6DD32F54632E44943081F80998C0674D640CC003BEB0307B51593BFA99CC5 +380390D36BF36A83618064BF63EDB81D5347C596D9E43291AE0D6083E6E10ED4 +7C78856F1F36C5B5C9A7570A654A86002EFD2D757CE3D59E04E2FDC681C3D297 +C8B8EB8FD5821FE4AA3C35B2B4EB97B45CB0AB7F8AFF57C861DDA0F78FC053CA +B0F01FCDA6EDFC00174F62B4ECE8914AB495804E9793DA4587B0A295A8626A69 +64A1B3C9B2D828B60BC6D18F19B604AB72D007FF0B571BB42FD6BF692C887C66 +D21540E2790ED44D117E1C942FA69694067FBF198FD8DCB22FFB10D47F75F445 +59FE728C24B0968BB9EBFC74C1BA3D42858DF3EBBFF8C27E4ED19C4F2ECDC009 +EDF6F19E1EBB4A653C5E0FC6F01B30E89BB1D5D4D232034E8D1059334DB204CF +6C75B87ECA4995A322BDE7A2B9B3F355A191E86A3B23AF11B52ED596A91B46B3 +8C03B34F328992BE927DDC4B153B615F2C55224167A957E4CC442C041BE4B961 +9EA06EF6F76F093FA3E672EF104FABE172545E51C4666C0BA73A6F08948D05E4 +E54C4496EDCEC0B33DA14FFA172A3E2116F1E10A04BEA1269E38F396C857DC74 +3DF40255BCA91906CD2710ED5806C6C6A4688BA557B78F5F81FC9764E06D391F +EAE0DF580AB7F045DC04A3BB886BB27AF53DDEE38D38AAF35CA96CD3F5C869BA +2DA4D9927809677025B7007278E0916FD8B5FB793BA74DD627CF29E7A3621EE2 +0951BE2D39031BCFA002E6FEF53EC0283247145B2947BBE8BBD3E7D5C49D9A1E +E8B6C05774B1A339A469C677BFF0B30CCF7325F9077349C96608B60F44C18101 +25E03F6EB91B25562A4F3738977FB3A463C0B8DB6B771B3145D44CA360E54E7C +697750053AA18EF9E9A3689B6248F124A75C6DBFBAF5181D8AF35A6152641092 +320A21B984DF101293A365918C113542819414E0462B6697C0993D8462A7F853 +D22DEE0AF329705BC81F362C13CD8FFD411D53BC4FDD03A3F5B95AD75FB29B08 +D5DE5830C69B2DC4E6B8423118B1069A1275CB6414D09FC27CA353B8B239AB41 +FB8E8E68E175B3793818C22C394932CDCE1E17FDA48E8AA619583D5E27A8D06C +9176AEED7FCDE33883A4509A5C8D7F81BA4F517888265E57D756314626BF3674 +F0F327380828E9D129D8BC8B352658BEFAE98218BEDE1C0E9E2FD95D595506B0 +70169BC18FDFB2EB5B4F216D07D878FC92B08DD94F5D1E06C3B20A15B5772A29 +79B770D5C82EB260F821CC53E97B5FFB84FC936D1452A11912C9D865B1C4966A +C9192A0E1CBC421619AFC16EAD4C75ABFFD0F801447D9E197A3D8049B859855B +E61345674D6D4BD99C94B049CDB1253D45C14DFEE7B17B8F7A8DCC9B26296657 +E7F033CF55ABC7A703BC755504EFECE597F0436B98491E0A8B6B128C8A4E9B22 +924D33B6BE65CD0470871835C856E25B491A527B1FFBDB8263A64E7DA5914C24 +1C4B7798424AD3AB0E7D97C0EB3FA94215F98A2172FB9AEA3AE44B04F4F14505 +C229FA8974641636010907CA68786D1C84BA5510A26EBF0D9C23E7A0EF4C4E7E +837392A223C16C7092BB2677A0E6C3BDD718F8C16DFC2232440EDD967B305F1C +85346F4F5C109A902DFF10E990732992CE920D95F999C97948BD254AE64AFC2F +771306DFB8454F8BA062AF715F50C0CC1C0B40C039D8A36CE350CA5C858607F4 +0E86B74DA44262C3F0D2F8E19D6E3D93683D204F9D506481C3022A281D465DA0 +2C33F3CAC0C9E357A1B96C24EEA1E4D6B3CE3B61E84ED48342BA80DCB95515A1 +964537E23E8368316790E6F5810FB266DAD3DD8F72FC219C7E7162596B4441A4 +1ADF396127473EB8FE164B52C251F3C997B726FE3F437564A1E5F455B595D20C +F38A1BDE3D7A61691DA09F7D8698950883B397A9AC908D69CCF461892FD9AD5D +F17B55B60B5378F9846B7570803990AF00BE3D92E40A62C9EAC215ED8ED4F12E +10BAAF1BF1313B88FBC92C37292E2C431D9C5E7D7A6E8B1E300E0B8C7E6B0137 +3DF9B8CA1CBA01F68FF29F608572859251008B3CA544521593A19BB470E35DA1 +9749CF4B5BE790810DD78DC9C28C310F15AEA54D23D58B2449E93C5044D70229 +5EA791A06AC3DD5F512401400561419EEAE9D72900EE6336B6A8DE9EB91846FE +14BDBB2A318E8FD269AE8862FD5121E402D85CFD707F844F02818F003B4A7C71 +8C03A18E097FC460ED1651C34B2C83A08DB246AB16389CD1B73654F222A16A96 +132EE0772CEFC1001FDAE643F0077E393AC5E328654F06FBB16490AB1C4B1016 +5DE8437C5E1C2FEAC4DA3E73F84266CC47928502B1FB5DE4A160A9CDA7E876F5 +FB512D043832F0B3C3AAE969C5DDE3515C19725D7573E0890C2A0D64676DCA80 +1EC2E72C1D93A08755E8E6AE34788A7EE87B0198FD576B798841A289C3E4B18B +89438BA3EE74BB0ED495FF8F2DBBFBAF532A14B0D75B90D6533DC439F65980BB +F081B537F94B4C48FABE0873D12EAFAE4CBF3779D34306071814D2DBEB3CC5FF +0623456154368D68D16E478358590539195654C70C9C8C814F0AD6BDA45AA546 +3F309D22787B7DAA56F60D65B953A257254FA3054727A57EBD5055FC96BE3C9B +9D5B11BD8A5D980BF5C1E1611D0EF6EB000D594491579ECC8F45962ED6228A9C +AB2311B7E09D3F846ED366963BD57A5F41F54130103A97401FDBBACB880A8E96 +70F230922715A6CA9D88B33CF4C9CBA196C3BFF1521925AC49E514689B094159 +FF60C59D3D6963F72690DFCCD6740A1C0D274CD047A83F7630BBEC073AAF67DE +E484787A78C170FB8D900ED4C8351FC64C75BC7F09089EC8D56C11C575E22087 +98B3FD21D1FE47D7899B908DBBB80C0CCB0304D491798F5090173264AF3F5622 +E97C4BAC6E22D336732CAD404D51CDF3B2C1F1F098244A8FB998E77BF689062F +8EBD6631461CE66217694515BB0BE2F5A97ADDE9295001E5BBDFCF1CA8DF1312 +2D9D444EC1438AFB1E1A146D14A8D4D1FB554D8A8B7DDED6D01B3D3FD2D408B5 +6CE034520871339B6070567003255A7C685CF7579C5A9612D5707DE094D3DEB9 +1253809352F9170EB020BC26CF69A274B31F99AB44386C01A02D0F3E4EE49BEF +7D85C07C685AEC301E0323C9554AAE970C5874927909BF8A2F48B553DEA37057 +D39ED353AC8F7EC2279FDCD395AA162354F237BCB993AB3311433B6373B555F1 +BEC82D844D2D51CD938EAB2CCE3603A46DA3C9868C3CD586559C403F21925AAA +51C60451296C01AEC7604C7CED9363536F2CDAE99A774E2ED95A60787872E132 +311E1E8412AF134BDC094597C80BE0535D81ADD7464D4DDE57DD2BB020D0B57B +C5527E84D4A7FEF6CBA439FEB165E0629D08E7BD41C138CB1232A2B992540D3E +9626A62FAA6F64961B56E454CE4C918B57560C08868F0F262E79F43D7EADADDC +6B42DD8DA70AF5AEC0966C0000A93949CD8B402017EE23B806ADED418B470DA4 +B7732B8CEA6A2464B35D3850F7B57596E5F6AB71CA9DAEE51B21C8D093D159A2 +10F4752F4410489CC6734735A4CCA0CB0E6124F38C5B879715509A99A5FB7F8C +3353A4DD03B43F41117B9673E1B8470579AF8706965AB50CF5F402848A603E9F +60FE3B123838A090E1CC6938DA3DB19908BEC6D92BB5A0E2774206CDD7EC2969 +186EBF848BE9EDE2A30DAFE89349062A111B53346E44CCBDFDEA993DF7E4D06D +0C395C514E3C9BCEB7F2C3B7BB6BCA214F7DDCC1A0BE92BBFB04601563686CC8 +13901FB618CC2EB8B07E7568451B63F8D294881CF4E03C492871DD81C435D92E +8247C5D3D3501CAE89D690ECBA5B0FCE995DA9A1A56B4A0EE568281C44589A46 +0C927D6FA7873DFB85137FC1A712C97771495C98F86B46968C3E9C62AB80A93B +C5DCACF6ECAC4E0827809FC0A0C6B588170BACB25B3CB1E99A38CE73DBB6D0A2 +43E5A0626FA8019557FFF1B27B4EC673A3775641C4AAB7F84454191383E77E96 +3D309D17B3E74998CA515D9B80C329EA920A7BA8E0097AE066B5A2F83D7A9456 +78738E0CEA73B15A4DA0259507501DF35F8AED1E9CB8DAACD2AE0118428B06E6 +4CF0F812B618E7070F36C4A9832FC7348F2055BF55E5E25853F669BF1415B67C +FA30F3C3BB89A96985E6B82461AA8016A93B8DD61F2AC7E607A86D84291BE847 +11A0AF6F40AA08BCC6464468CFA7C9B0AB741C3CC01C14BB26F6F7CCD561DC7A +BC38619F3D445BD4BA31607DB4AEF620CCFF5DA527261E7C7DDFD6E22E7B1AE1 +AED11E8DC5132A1C58B15B82E65DEE25FDB5E4F53403C99E2F67FC074412DEED +E83E53B23C4A571828C79AC3FF17D5701354A14B83969FDF984BB065FC0A6627 +1772E33637A3D303B652305DF8DB459E43637411B04312DD2F7BFD268B209A10 +2B2B3482C84E4A1F27430B729CF6C3A25116CB81155832670CD8EDC17C9FD068 +C07475A76F7F37D84C905CE96B5ACFBCA703A19E35DD2EA7060A8A6C6BED4209 +5620764469BE1ACAC422E039D35057F5FB68E446BA6134FA05EAF51D70809586 +44B539790748F9B7C0FF2698FBBEEF37D318DCA12FEC1B32F88BEE11A91E9054 +BEAABD1723857DCF87B13D57AEF68E6CF2CC31AD340270607EB6709E113392B8 +0459C10C6D06A3BB7C7F6252621C5BA73BBD8ACBDFE20D7146B0C1CB96E393B1 +25002DB37DCCF2633EDCAEB9A86F618AD4B3A985A83CEBF0D62B31D0D09082D1 +6CC0E355D4557C8391A5F2716F8BBF01F009235DC8070600F473ECA33DA726D8 +EF411D558D5A8B80CABDE111AFF83C0F9C058AC2B9D053CCCD1DA44C97AF4C7F +702B162E4CB347CAEEA9E650C076DF694ACB8F2E4364C675263D3A677A754B96 +20B67808EA3D015355F0888C406D1B0DF6448F2E08D9A164F955940D517A38DF +F9677BE00C66FF5BC8D722BD91D66D22AC2AE70BC551406C69F9CF4B2FE69870 +634CA58D8FA15DE46ADA6403D52037684CEA2F5BF8E589B23B402C596BA54825 +9A6B0365E1958886E26E5AB8BAF31DF7FC9BC809E8D776A42E7E8DE876BD72D4 +C226133F690A08F11E249AC083F3A984B1D3C27AE4486A4620E14D9D6A361F3F +38CEC60A5178D8F91893B91AA2D5D8FCD1326079F29E439C5D2C7ED3F5F10B4C +A29C4E97C111E18476731E0013A0ECCE409EA27077F35E7F0505B9D49F2F36B6 +4DBCBBDCC801645163D605A517866E71288130609254E5D4BC3743D7A81729AD +501A63E0C74EED7E1AB6D1328C67236F9780E50146A5DBA0BD8A402FEFD5A6B0 +956C11C68D14796CABBA701AA133C3432ED4679526DCBB089DF0F4C6780D16F0 +E90029530125B39047E4DD8CE1EFC7ADD58BA85DD905807468446504DFCDC65F +4BC08B27AA069C5383128B36FFAF4A06EA758C511F6048D9E5389A2F6066D7DD +D1FB36F91CF9D555934DD2342322B725EED853A189C698331D26AF00B9D600A4 +EACA6CCB05E063BB7B9DE8AB01CA4C071F31279524C18B52A9F92B7F2BE7A2FE +FA88112F9D534284418689A7E5A8DC2F7E03B43544BCFEB4B98CDD23C4D7A48E +457FF99CF93866B0BE306783205E3C525D1BC42370ED0C0643C57CCE4ED2930E +6BDA7B6539D9A4BFEAC4FE186CBFE3C728D1DAB5D59D8E542CFA2154FD2AD3A7 +64DC84114D21E4549D8F6E4E2BA469C4D86987BA339C9906EA3408481198E71E +7FDD1C135105790A81918A00920B17A56B11A78605571933BF450B408ACC11E1 +6D18B2D95188A2E878BEA4BC99CE430F3336D11B4EE22B72D7AC4A095E34DBD0 +14B96FD5A7CE5851AEECA990F98FE61214104B1CED07FF1648BBDD5C9E9F9BA0 +EFDD2F3F5A9CDEF9D514AC81EF0194BB22796AA1A86A04F77EAC27414E94D4F5 +FDB66069026628694DB03635737D4F51ED68BCECD50AAF6A24DB6E8B02D83A6E +6C06A2126773A1898855138F8B98E5368486FEEBE7548A968DB773D3E2B31056 +F217B22DE4E359BD03B38653F959790F3CDAB6CD89DB03B025438070C1C4C3DD +33F82E6793C7B922548AC44BE5683E28948218D1DE771768B4E01079113772AD +6A9C99F07AB2A10656CF381D58214C821846C049DB3C4D8327C1C6ECED879CB8 +54286708A843CF50D9BC0F665CA7FC81774C8E4FF3DD40DF528EBB1EA735B3FA +FAE0AE213414C3D527012BEE1302C7301A8E20CE45CE52430CEF71DDBEEA9CDB +83F0CB20D791183B6BA77076BF912A48F200EF883CB1A28944F6AD9E19B139A0 +39477AF27ECEE71A9CAB3A8CE15F721E65AEE8D97D281BC2D1E8700679C46D37 +FA193E8C3B307E013AA5473E32E1307F296AE7A69B467B502752133624A5D608 +011F4AE60E1BF61463E862D182A6C782C4B0FB86D6028578F317E5AB05D2DE98 +ECBFD98975BAF5C7A30679179E047A1E382B8515EC3F41793BC3A9F8C86B2B86 +84AE948763AABEF2AFC145EB1E978EF2152F8927334486F9A9C9082BB4348795 +478E42B197ACF9AD0D51A26F0692E9C9F7C802ED28E9700C3F5AF42AB9AE5983 +CA8A47B5E286F8E47B05F344DA33CB13C65AE17884A929F5681CDC218C128AB3 +601EA443AD09E8907EEF59F83D52223EA7812EECD8E5A49A8DE58AB7300838EB +2BFC53A28EAF747D4D375EDC1B904C705F4A100476F6E06855452E1E7A89430B +643B6ED36DCA4E4EF4C9B637F7865303A5B32701CEFB270B2301D97A4DA4DCBB +6695E94D42952F1D135403DF65D025E6D86299C4E56BACD22BF8D8418436F380 +C34C7C40E583B8FE3D4176B905828D6FCE052D0363F2C525542E5F0A0B25ECE6 +DB7C70809D53562B48A65AE5D98E299881F30FF096E53E8876B2C18C88706363 +B7EC370D953C44BF78A10C9B76904191465F72B1839940FC5568EA58D62CF1FF +A986F9B187FD03F8AE785B16AB08A5E4C37022B79E96250B31D55BBFDA0D8B20 +067CD1E1C8608EC14B2A1B46B3B7F6A1A694FB5001091D797321EBFBF1708097 +D4AE6AB1C315FE5BAFDC7BF2FBDF894973BBF91EBB14B0B850551CB23A4BCC39 +0F5F6CB3FE36DD2FF66DBAF8DEC16F99910B7D856D0ECFE608E3D8A5B018FDC8 +BF9B929F25DEB245704A546A9A1AEA30062141DA6CE80BAC951C432726C5C91E +A5A23F31596799F6E675A932A0338F0CAC2F52331442FFCA5B1570A498ECA353 +C18AB67E8164B828A21E9E4FEABE3B94882B2E819543F4E723C59C964A267DBC +A2E8EA1D48018A4D4DE7608A7CBFF01C29C4AFE44B2662C0180F0C686BE89B81 +30A280D61C321C67B2A6ABF1209D03F16C05539AFD90DEA6ACE3AC539214BB0D +10E39EC438C3C952399C07A96521C42FBD1EFF57971D7B06902D9BB9C9E32629 +FE2439769D67DE7103138B5C161E8D58C6B01884C93C2D4FC8DCF87DF00128DC +74F6A34F7CF4719524FC8D28502115EBB86938CDAFF00C61D70EE4E1CB98D1AF +436197CE8670D99F6CD73828CB3860D34C9B8B49089129C71DC3B4BCA918CD9C +C8B978011AE713105AD89529EBBCBABFD85D629F058BBE9C14169B7430C835F3 +6365DB92E8514721DDA91B2EA0BDF9C9297BE12E2897F59F5C6886BF8EF6CD90 +62F5364E2D4363A7A20CCF26B24016C260F4660DD823E7995F575ABC3048E8CD +EB0E3D0EDC1CEA4F86EDB1EB6F46EF5CE226AEDCDE6D7A9BD142F87053581082 +168FB0FA1632F6304772F83781D5B797631E3D8305323C28F8096AE577001EF7 +CF4B69C7A31DC24D9A22EC0B9352A35DA0284E78D342059B2B87E186BCC06D0A +C2B459EE7B3506C9E79C72E4B3FCA87AAE77183C14FA5BDE7BE126AF47E16A69 +2C1F50361E8ED35D6C77B0BDAA18C12F219741838E78E2E721275100BBE764AA +9CFD95728F9CD3BB344B40ED7F23B0E89A8AEF47ABF898ED6BA710623652EEF3 +9E9FD89221B624C7B4277A4AA45FFF8147AF3F68D5A7AB0C8C06F122DF0F9733 +38B1A96D51633848FFAD7DC260BD09936BD1FC0ED1BBBF67ECF2D2CBFFA77D88 +82E4DA43E68A11690B477A7D3B2B2E404790C1EF1A58E898318A360B72BB87FC +F5ACF9CB294A091162A5F0F9A391C8EE2BEE9A15C36AA99CAF216C1506B1171D +E20E627B22FF9C685ED7D9CD8924258C4CD490F72AD5A488402919E2C6ED3864 +2B9C54EFF3C03DECB50DC1D48E1479AD4C6B5471103E1903365BCC84DA4D04B3 +80AD01F15F2BCDB2E341064184474466245E44DA617B24AE17C49D57F2CE26D3 +2F7175D78255F7195EE48400BFFD86B99F7AE62D0CB70E72026AFC38F1D2FB8D +CE7DF49602D24BC8199199EF5D9706FC24E0A57F7270B70CC5976B9A6EFE8F00 +B0CD1CD7131651D0230C17C02A844CD9F4BC13FDA70F5CAD18CFDB6C62FBCF34 +E56579BB8D47053A5C3836C87A047C99D36EB2B66F89D8887F3CEF292EC6ADA7 +3299ED6C5F12ACD7D952E6E7824293CB993E8A68EA874501D84BA68A264C82CC +C9A99FFCCCAE6702C9D37B9C9BD9DBC1471215DAFFF6FF1D0890733E3838AAB1 +31D94D1719B35DF54F41F3C1DCC65C138714C350825746ECF14A4C5C80144E7A +4A91C57217C2BD91D6869B38E6FE2D2078EDE5266A3CBBDC8CC625FD5F1575EC +FE57CB298FB7490111DC9D89F6450D8DFE17B478B0BB2C49EC8DA7B66B2CD6D9 +6BA9365A3CD1E90D2DC12FEEB38500CF56543D1AD5B9E8E1CC0C9A2E12CC988F +47B5A75A6FF8C047C678A2AA4E8947F1C96F9C0BB8C2B9589404594731C5B18B +EC8E87925BAEE0D39BBE9D1435305488DAE9BFB681558654044C27573311E2D9 +B0F5E4F16BAE74ACF4C5F76C53E2212EF9F24B36BE2EB027015860DBCA06F0A7 +569F7C5AEB098039038B90D2D5BBDB69BC563ADBEBBB65F09EA75E093D92FD85 +B94E5E495C985B406F7D41AC91E8404D5CCEC7F0A907C2600F5EFB567C7F2BF7 +95A755C8C121A23F7C91A211D454C004CEF93AEDFC906E155AB5E547F0C48010 +B410F1221EEBF25F4088F72163296E956AA9E7CC5E691D4B1C40A62F21DE31E7 +E3D78D51EA7704D0A2820FDE922964D51ADEA8D0B1D855F8B6C35848938E5E19 +AEDA302E955B25BD58B2582EA770090567EBC1607049EFB639A4CBD3212CB220 +C0E2E11B5694599C82A40C1EA9FD1C5BF91C782A9912715B2FB534013822E28D +04F7C089CA656D77960368217E0B9D485AC80226495D72F4E29706E714227C4D +38203D69653566A26033946E71AC51BD78A513FFC383FC3128296FF68026B46F +6406FB931C699C0EE832519471EAFA2DDBFFE30EC2A34F0B7D0C2D87B34A6ACF +57716BF296006D7ED48935215E98AF8B79568027DCD643E0E67E504AC34F5F0C +93795382DFB9E1FD1B1BF12FB5342166D48188B84E30E3BDF3BBA314DA4A62BF +1E8971BAF7DCD7A1B515B265FC0105E2E647175CDFC932F83DDE00AF9BA09C01 +FB1AFF7CE0CD22A5F5FD4DE0CCD0449735C1E2D4292D4F9B781E94C611126CF4 +772743225EC58DA1100917D45C41819D718CA930786377B236BC0B1EA6020EE8 +ACB3D3BBDF25BD5013A7A61AC75BF1668FD77FBA4F03F62119CF0737ED0B0419 +76308D50194F06B47999F6C354D08B0627D7319885FBFC69328416368815F09D +DB26EEF2563129A4C8AFDF106AEA2FCC0E6754CE0F71F7DB6F559A70C683A5B0 +03FFD10A4284C9738039ADFB937A91D0C1DE16684B6D1EAE980EAAC05D93D5D9 +B262567864671E796743B9D06C00803B6390D48644914BBCA63F28C4562FF8B6 +20B8B5F28AD2F1D3E28AC217ED0A37FB310892BCBFEA9BD5B78DC8E507E14233 +B4B08935B47E39D976A0DFF3C78F35055797F80D7518184642446941857CA803 +86FFD7E3379ECBFC607EC5B03CC2EB13CCC4A1C2AC7FF94032D005662B432151 +27D3CF031A878AB01EBF4B1F99D8C9D682857399A88481B7B4ACE2F168FA9525 +F3CE2C2C1293386921DCAD7A0888D8E9934D4451BDA74F91774D2FC1699B6AC4 +22BB0E85C1503FF692B48E43F445959F599862D5445EC97F6B9543BB8DF87A5E +D0F0BEAC996E1355CC2C2812D617842B1C13440B9710EB705419B7E9C7364219 +BC005310FCCBA5C410639DFFF7676D44166848ABEE84C5A14614650BBEEF7996 +91BA6AB25B3D3FC0BD80FF9FFB8CCD4D27160C14F4808AF0BCC62B288CBA9B0B +91F266295E5148DC34C3D89961C76DB1BE8213BFC9C2259CE3E10C52DEF4331B +4847AAC71094B1883BF342ACC37463B7E16E4769F3591B426F2B4E3DCDE31B08 +BA838A9DD1C9968204C777034A745374C96B13C5774D7F46C7DFDEA2D8EDD79A +E678BEE2CC407FECEB38CF5A76F9EB8D67155E5212F77FE0FD17AFD4D7ED1D2D +CA92E8538FD5152608268CB0A5A6F068F7C0D589F6CEE36634C81F69712726A7 +3393557C824783D5915BA5952131BAF40B28D78A7260A24E399BE1467125B7EB +3C9E7988E993DCB90B1173D94007A31A87F35AABD3D6986B230EDADD193503DB +0843329EDFE2AD82DF632E3CA916ECC6AF1E9517087660173939D20AFB2FC8F5 +30E028382687AB6CA543EE1BB120B29A9148ECC9EB08E580ABEC61BBF833876F +965B1FB64C7A11616D8D7CB6A0A83F08ECDE0499120853371F936F49B4C03C29 +C0CFE89B22DF2705ED6518A0076C045DF47D08C708D13559F50620B00743115E +301528F33A7865A028D6356DE6B73147FC05DD30EB35521DA418A1DF70E06326 +FA40451E91D8737117D9CE45F039635061F2F33253F865D60E7EFF52C1C6D2B2 +CD3646A717134228CD910A22C256710C8E61F8D0676AA54A94269CB103F83854 +FB64074E1A5D4335EB72B37BB1CACD438EBFBA04D9171CBFDE77AD0C9E12E4C9 +FFA191FAA899BB448B1321D2D8D99D54DD126C4EBD5E70BC9FEAAE644E79DB91 +167A89F2C736DE4E4A760B84109F746F56CD32CBF8846692DC46590479B4102B +FB1F8A64B613277CADFC500BBAB0EE49BB24B134A5B4919163D15DEBB8E914FF +A446A5F9E10538DF344392B75CDD5FC72C2CDF999A285C11C431B4F71612779A +ED983EEE2C397420FD7F92199B2086A5DE50C6152F4EEA3E27C1B8CF908F2F3D +11C654DFDF2636CACDD571BB10C94F2434D39D6D9AA97B12F8A1C2F5295C4112 +3145DA333E3A5E21253920B698A87521E4DC22E8353FDC4DCEB771D22781C30E +9508B8D30431483F12637B271AB8BF27FF28658F62CC017071B58634F19B6FF1 +26703703E29FAB5F64B5AC46539BE8F3B8E11385543B3A5E997B6DB4EEF4BC3F +08251E1FAA50528EE2F35A22D36444CA11CD8F0D4AD0BA9158D300E89E6C56C7 +2E84628C68CC84AA6607D9852351B43CFD29C6DCBD7E7A98CD838A80349031E9 +C8C30D7178E9DA6FA7709901D17AB300C946327F2A59F038FCBAEB5FE6477115 +411AED37A43BA69A99663FD1D6A1BC52F1A5FA757B9DC89AA452493786809D25 +9CCC6A177DFB1FE396A9EC6F1513303D16D806ECCB12AB4D160B857AFF1F36E7 +E2C72C5A4B29B5CF1FBB55B7FCC0ADD70438ECB5CE4961091D096AAD12166590 +A8090AC848F0442E952509F2059ACA93E6C93A62646B06A9CA2F27295DD72025 +61C8190EA2D782A12D98AD1F59A7087AF2F7E6AD183A2A8B131174BA12DE822C +7ACCD50426A96AF76BADDF9C7E958625324FFA804319305B7C5E5B745AE14215 +517B1B1FB791E9E18E5D9DAC6DECC6397237DD6920D00B308E205493964BB46B +09A2B35579AFF38D6394BAE736686D89495888079326F42CD18454AF18000942 +AABCA5694EA2B965206CF24A0971C254CA889E5A50CAAB373809D9AEDD7E2F49 +7ECCFFB3E20258D83B93082316E149A9BC3F1952A541F644A91D830410474264 +CB8219D66A87111B48DA301286472E62F68D9ED53A80461ED91A90CA5B74D7E8 +C715F2CAC2B8779E478DFE036BD8228DB056DFCB5E59D0DF7218034573352C36 +C2100F4D8754C41CB15AD0FFC7C5CE5D091C41B7D4E9FF4DAB4908EB2D5E289C +FE228B98B3C647B12889739F99E9EAAE81C406C71D9BCCBE030FC5630134FE73 +6F462E6725FC49A9461015367EDBA48FED070CBA581C0E75D20ADDF2EEB46A79 +ECF3B1BD89786130D6CEB0514F294FAF1E253A5F6C359068E8A233E0069C371D +EFA85D0C87012D04CB4A53BFEA47A148CA2B4530A5C40D37BCC73C6FA2BB7C9A +AA3B6C5DB69F2BD36B1BDE5B739C3645C60ED7D37825F691D3BD58B8ED63A257 +4EB7BA091C66BD98DC9772179B0AD2FA4EEB2EA8D61C332D88B7E60D4D2A7C22 +80ABEBB582F7E1813E1448000CDEECCB85D9E135D7AA2E28D867F2A87F902F28 +36155B7D0DA50E56464765D7CAE2232CEC8BB7278F69F8631B33A40B2EC09384 +4DBA8F6999DDB77F55AF8E1C7F7646C66ECB86D4DD869491B457E9CB35CED2D7 +F4173E894210E65EA08AFD1EB2810EA4972658C21CEC80330D7DB5F2A07CFF6F +343C3AB0930F392612FCFFF26CED13A711E63C591E0A592B00E2453F982219CA +5C5ADF76C4F697E9A73C992D1EF01162D36DAD14DD0F6D8741C2E08FDD51A915 +B964D967EA8752012546F5D2056761F7B694C3DF915432944491EDE756D01997 +FE85794680849A613C1CE80F8BB514864A0340CA0AFC2BC750CF8DC0954B6DBD +A97B1EE3D8C2A7DD7285F2CE0F995F96BCBA3365F2247AF9F6B924D80192A70F +7EB242BE6441482A83D441856B528AB7606DB5E14C5790140BE1918EA5FFB306 +10E08F80C9E9524F73FAF68D5BE79419343B3DE032706EA272603056DF6A821D +C78B5F703CB38652482F5D7DAD5D5EA7AD1F832596423EEE9CFF1DDD2998511A +C43F3A71CBA3A5C14B3B2297A77DFDB49B940BCB3F33A9C4B99F26CFEAF818E1 +5D37C5D029C9DB979D89DFAF55D253E0E6629D9E2E4C5764DE4BEA3CFA6AB185 +F62E1BCDBB2CEF688433229D07BC458C4DCDFC3CDB17C8E288E7586BD7A4DE29 +E8A092A0DB26FE23060477AAF5359A558B9E79BB6436F2B181E8B53C4174AC79 +5796F204189DDB3C0156E5675151D09BB73DF17134F7575269B3C22BBDC58104 +12ACA2F40BB9918FFC1D77160991242FCC4AB7044F7C01282F166B3E9B6C6B50 +B805C828695555413CDE6DDA31E83000B76C5FDB3D30085E6F02A8F2CD1A8213 +2ED5E5188C18852BFB629CA6237F7B6C634931D90F5C183FB880D96B8B975DEF +A29D427ED88A34F09267525169EE575AE043FD180E1A793372A551E0F4DB7EE1 +4B18B770EC4EB043067D12C17D147207190D0C6BF8723DF89AC1668B1953608A +F1C5EF65B80A76E34DF9A77BEB0C70699B75F519C80468313CC2FCA9E3CF42BA +1302BA6B3970C3A72655648C240CCE5D75EF67F49A2EDDF8624A2B7521B888B7 +AC27EF9CDAE54040E6E7E797E18A3FD149F680E6BC5192E0F067CF1DF6969D02 +CFBE9CDC500ED58B2A140BCA75AB5822B2F1F34D8AC3B3ACF2132A0944D5D912 +33923BD27BC6CD13DC87361F5D03186727F4FCBB03E24BC1872CFAA635014882 +0F3A790BCCD88F22F49F4EAF8C56955D3073132CA2F1FF89F12FF67A2AB9A80F +02C257BAC189E1907300DED6A5D946A217AB4372DC64CF596DEACA9A85833E9B +1827EA876EFB89C94BF9FBF31563169C31F5420F6D10D89DD88CC87BA46FCC87 +761E9A50E32FAC58648CA233FEA7EA1C3EE485214E0AB723CB192F3C46004010 +3F9CD7382CC394CB4A85034B2D0D7C0CE9DABC0C73FE7BBB8BE5C4EA27C2BAE0 +977C4C730F2A37981137D23657218BC8BCDEF4B2806AE29B135525C17FD4E8B2 +D5673C58F6DEF3D1F11A7E8416268A3133882BCE91A97C3F4F07B8560C918677 +C9ACCE4AD07653638F9F03BEDACA787535C2DFCAB3DC3A4303F7553989AF6FCB +8D4A958EB5A3A6FA666E7A1A7AA41427AF986DB990336247DDE616914C4F41CF +5549DCAD6C3F8A80A01108069974FAABCD6A372E7A4DB8A62CD1E052218308D1 +3335F3337E097B266D683A5305D0343F6813B0D1F26B118ABBA30983DDBED252 +36479186AE5CC91E4FC060EFB1FE70F9E8F1B450893D30B36E6C5CED71B45DF4 +E586FAFA0D9AF57647728ECC16025916769E84F870FB9CAB10ED3AB674F765AA +E720DD18D2FEE1DCA40BCAF1D3F8D0D54B20B12E1DF52D625277B49355FEA41A +8366EB9C6336F2030F0D9E7E467BDD8FA7A1D4BE6025E33DE99825D9CB401164 +C2EDDEBCCBAF38E74B4E41985087BAB13883F205EECCFD674203504292518548 +401E83A377D3E7E419C2D4F86456C059A1CE971B02FFA0952F361FB758F413B4 +5D9E783B6B9D5CFB6878EAC6A75CBF4ABD3BECD01F162ADFA2987DCD1CA12F0A +10B7B4E153743E3B92D13E6378F770CE2937CB185BDB4B53963D54E1421DF5BB +AD6AEF0F6702EE22FB980F24B15CD5F961D74D20D66340D37F6A8EEF4F1F19FB +2529AFD84E67BBB1BFF305820F567697F675F0E002F4972A48B8A52AF5A98B5E +71811A929035A76A036627A64F5BDF97178B83B1B9156C7E52D278DEBA318038 +8E59DDAFD2FDAF44F80FC1CE7E65F328EAE820974C7FE1BC0AA8DC328FE1C692 +5884ED1E5C19B119DB94952EC58139BD111086D0C134A9B6C0E1A291D5B091E5 +59D406F60AC58B82B6D0A523E7E94C53F6813F79B0FF1267B751FCCF9122ABAC +72AA9F993FA42971B30382637C2A8EA8BD1567BE6F24C87350F581A0F0E3854B +2893C37A5B7195AC467155C57F7A0C94F87102F98EB370D6C16D4CCAFEC2B258 +62A53DABF7A892D8ED0ECC1BCA5D78933BB69B9355DE8D7A3E297FA4AD7F1CFA +C6A0C8E3819BA20EAF56487DF5A9FF545B958F3C9F8B1DE57C570D64D97C6396 +AE325AC12A5102A49D683B78A1FF49D16AE237886440B31B80A5BB3A15ABE827 +6524120CC5E432226F2B74BD6B24B2D285D95A840CE3BBEEF7FED24C2FD07D57 +6BB486645F60BC180DBE5EABDEF926E923F405270CFD781C2205D7B68E5A7BF3 +AA20A4961C3178420CE6F76ED017C5B23CEF6C66125F5642EA872103911A2951 +01DADEF025A53FA3C798183ACFC3CD6C115EB9717D36D1F293248B94A5A1B1F1 +DA51EDA82C30FAD863E0AF8DAF85AF76B7C49BC10ED28BF794D8122A54A5BAA2 +D9AB4615290010FE370158A640137212E93BE4FCAF685FA6C257E350E3CD021E +F8E51CC1D4E89A72E63E6B798ED0A4C88F07B994EF8EC79FD3559DB99DC9E501 +235474E224DF5E3EF7B72C7EB5FF2533DF5265E2047323F9E073C4C098F55CC4 +F291C9B403FA7C04B0ED802F2868ED917EF69F45E4D95600BF425B8A62968D03 +32F5E19219432CC55891F4FA758943F337B8685DF269425F97ADC08EE9A35C45 +788BA07F0914FF05591B82EAE3DCF106975565EA089D1A7BACED9FF13E29DC06 +4F3CE6A1E3CAE3258426214A3D98F7FD59B78BC228B5D26EE0DF1848C2C135B8 +365736967E5F2DD98C468B5ACD2E1C5C51A961C98F7B043C47B0586D54EF8582 +7420BB57D4C6C7C670D16492A757D7B49ED54A3D1A95EF635F35E99F21C250CF +DFE05FBD85576E9D7CF3942B870610526C130FB83736C0766A3F75D7EF20AD46 +DE70D0BB071A6156C4A4CD1EF853A7DBE6F0EF405D97515816F305001A0B9067 +D9A4025585E6CD0CE6D215C3CC7C10B0FCDA876810A20C87534FE9818037F824 +8D3F10FBAED0D281F6B455FC91B7253EA61758E318E724ED441468A793DE0020 +478004FAE5A78FF9B6F35AA3EAC21527A7C1E754DF332CE26EF004111CA4D791 +0787B7C7539A2AE35E48D7D6C28702B09187557EF3097E06B53AEF62048023A5 +19DE2FD4FECCCE4B945F7A90E38DE5C7C0E1A98F8294271A0234D735EEC3BCA7 +9544B1A2F7C0A934B04D6F2E1F19CDDC2B060F309CD5CD3A6EF9874A45DBD0E2 +51E52E2E2BA358F7D7D7D1415FBC788F230C17BC8E233396F121BDBEC3D2DF25 +FB9BA0FF917AC8E885481BB8F92A964FD89FA52CCB97BF4090896E1B3681065B +FFD9B517D06A0B9FFF6C4E16984AA1631C4521488EB01F645B3BD1ECA92952D7 +229117E36331EE347A81A93A61628656D50A2C6C149DCE418D4B8F5FD8E68042 +B3A25C5B2A310F793D479E39F31BB5AB901B7513BA3C61F891DC1CBC2613C777 +E47A60B1EBB29D3D1C695950C365E0C3F13994ACA6F79C812D3DF88576EBB0EA +C49A0C4C94A4B28CC6445A4E2ED8D7880D1FD473E2A62AF441633CD7B880DDB8 +22A0F54F963F56A38CC334337ADB163F5810DB8B478D432B99864DBFFFCD9CF8 +4764661D1EC2090EAE1A05590C2C48C7851829738234FB4C8E36415369E85719 +EEE6347675672DE97992B294BF1E501046FC1BF0EF48B746EA2BD8C277C21773 +406D0821424F52F967755A2CD99883EDD26F4A2F83138CDE1A9DFC3D85580E60 +350CDB143E479976D252AF123C9D03A7B3068641C950B90AFB26A9625F1909F2 +700C5113CB19AD7556BD54EB9BE6DFBBF4F4926C193802B6F61847271661D56F +A4DD2537BFB0E5274CF71C0B159BC2A624BA9EF265FB55BC2806B5A91DD33F1C +A6D98BB3B5390051B750383B707B2AA6D6DF26FBC1959A3438E3687E75E29376 +31FA652F12748C3B49B43C1FEBBD00687ADDBEBECDCEBC0DC1A940ABB1FB3F32 +2D46DB5455F3204FD1AE17273DDB24E6DB85417184C9935937332BDB8F115E08 +E8F54891CD1D64C94951541C296AC30DF00CAB27FFBB3CCE8402DF81F9CEA1FD +6E04991D688114D018023694668911E06B29E020FEA094577DAC47F10ADCE816 +899B93115B1AE91BF47129A7AA5CB9C11654386EF9819B666CFDA0773A19BD32 +E2EA8E225747899DDBF6A10411AE29447CE9426971CCE0A5BFF7B0F3B1885B41 +4887CD11240ABF1F9F390AE922C049040C5C7CAFEB76BB0C1833C68D5AA59193 +D484643C90248AF23C0CC645045BD0CFE07A8FCF4F6CF643E5EAF566AFA702C3 +8FD22DE496E04AB1C4234AE5B7B7088B92D2AD2AACBB8D1F21D896AC099E3A80 +CFD75DE424F8AADF45D1FD52D240384A469209A5AFBD4EB47F6F391C5DBFB7E9 +36D6C9B923B43458474D510E4FC8F206353ED27101F9C5AD395FC7184782E80C +0EF532C0AFC326D49A5A363E4A271AD388529B1B3A0DA25E27E116F282D87ABF +320BC51CBEABF7B580F41EBE8F35B6C6D04D0A8ED6384B8217175DEDA617FF41 +E7EFC2C4DD7EE978E45495656C39614F9C129A75B0A8DC6A801BCFE9AF5809D7 +607DFB1563B49A2EC7FBAE0CADDEBD561E1E6C5143A22DF0DE9DAB834B095D70 +532852C47336F8DB56747ADE28315C5877E7B25CE4B3F9EB3B6659EEB0875A8A +D78C8240BAEABE84B14ECB5C927B3EED837A9A6C105EA0C3ADF011474DB3ACB9 +2C5106FCC4CECD37AE11669188B553B8D19BF69896DE8F8974A73798B900C2F9 +BB6A1529ADBAD84A77EC86D7E1EE235586F54B6B6E12DA0432E4E6B15F9EAA58 +54ACEA0F332CB4BB133218B9A1EA0982FB1E8C2060EBAD881D8E0E89CDD8F1EF +9A2B346D99DDA2347402F60638211263BE2EC6EBBFF8286E9DE03C7044CA2664 +C843692695475D60D325C46D8E6263125B70572D5B6CE75A6D55E7F02E746581 +5210E04537B45EC6B3D356AE83E64DA24942633EC35EEFB29AD01520956A34A8 +5F188CC020C5B5D8809403F3AC9AC67D1FA1919843CFD83A8990E89E45A07658 +F06D8B34392C44DDA5109A0BDFF6038A421223B0DE8604A188B40CC0236FF76F +213BC77372514FA46B833231057BBFE73A2C60DF37E592FB8387B62150E089FB +83BE288AECD13F6B9E4AFAB9860BCFC54F567DB1A3A992296FA72F9F7CF1236E +CD4A8350FA3718C056786536C9585F8EDF06BC8B228C684452513CBF13FA5AB0 +6555D628BC5DC83C5EFB9D4E3843618EC8A1C2C80EDED76CF2162779BCD9E9B6 +AAF63DB3797294EAC1D1CFA70034CF6504EE792D4AEB0D268B31A09B12D39BBD +B0411CEFC45CEFEE106C10865CB7AE7B1786F39C0BB93AF3FDA169E556CE3010 +E46EB2F6EA196A0C91EEE784D372D9EEFAA4A4E29ED940E97D1FD4796315FE4E +5DBA57EC20895C32F37DA3327128C242FD357F68AE8C17C599BEAC615EC07268 +78D4E2179600E0672EE605787520E8B370567658078A379CF6437A7D2D6684B7 +9B9B155D30897740E4696E90C5C4734115153849F10D21B5D031CA61F1BA5B30 +C22DFC777CC5D5056B5FDDCCEB66EF1D37916398FB231079281D8BC778640A0D +417BF9DD81E8D1DD6FFBD06AC6F7196D12F71D3E34BB9251EF2A4AFE4FA321D6 +F6227A4EB3660AA19D3F96DCFF1C0FEA659FB7DE881C15F7C65B76CAB9194B56 +BD1AA0A2AEABE2B5CCF260D74926831663A9165F95C178DE64153FE87C323C44 +692970FC8EB7ADB1FF6D3D4932C7D17D000B42BB579D1EB057C63894567C9896 +38A37897AA765949AED2BAD425F4F68C51E3E1AF0CB1CB0CC3F0CBDD72EDE2ED +E50226E68EC8FB46BBC06BFF263813FA7B6E564DDE31DC482031B19180ED957C +B68B6CD679326C478D5D9A9DB92B19CB2C662679D6B692643D81760589B7C211 +A71F69228B4A6EF80AA4D3C816525E1B589A15F825653201A8230C66DE7EF8A2 +33B3DEA5465FACEF0757469521C59FA932955A321AFB159DC42DF603BB449F19 +BE418B859D45F9FEC1B218465D6850E8F95F1DCE44708225CE2893DABA8F651B +FAED8FCB4142D9BABF7FB71CA8B8C42B51F8BC79F5DF0BD56868C44624A6243C +532EC4412C580ADE86D74377466C7CA13E6EF1BE45805791DC8C25D7B6FC32B9 +2021C842497995F60B67309CC132DE74EC422D7CBA71A1D0DFDC772353F08E73 +D333B1148D2ABEB2881D8FBE18A49476566F61593DE423E11AF90909B949D3B1 +0DFA96D77CBC1CC3330920AAC7CE2DA6456DFD8D0510981AA923C399FC3DEC55 +2CCC5CB34C81D21B8C6E78E529B6979AD17547B164C1D1D756DE7C9170A44396 +B5183E2F47B265EC4F5CBDC9C3EA2D68198772053DE5FD985B4B9912399F6A81 +C4C37724FA73FFAEDBAE3F31BCD6269FCB4E3CBEE214E9D46BF1ED0FD38BB385 +72225D7CA6476A2EA62B9E5780FC5AC3DF591F56261EFEBF59B567D0A9C81B76 +D88869088CA4C1AAD0DE77ECD53461B5B370F93558290AE7FD5563D16402ACFB +A635A73EC6AFECB0F10F0F67AF7039B3F8E2DC7A03B7F3C50FF6C3CA4DDA95BC +7416FFCC10A615B1FD4252DB7DA19833DAB0C79F4992DB442F2A1E20A16B412A +211CE3661D04FA5E6C9BAE3437B7E0DA579B176E1CD6B5888BB4ED30B66C651A +91EC753E6E672847FDB5F3273E55371B247F38C3F863B8391C7E6731C25A10BA +E939C248D83D5466BBB7B868EC3B49DFE4904A796D26C0D0EDBF49BF0627BE51 +DCAB5D752D318EA1484DED9C7E50FE4C5F89F3A39DED4C781A17501FB5159314 +D26E72AC51F03DCE4A1534233A0FBE2F18E9E812D57323A7D463BC4394A721EB +F4A7AFBF4127A3EDCB31BCCABF8B6E38553116FC15FDF323A7899AFCC3C61A31 +38E292BCFCA7833723239CDED4C31F8AD1E91B1A46D51D7480834CB6BA824EAF +F468B832C6F59254C144FE56978D68A00C4D9D4FB1BE356543EDB9F71EFF7297 +D689EDC87A558463A913D176881552360C5322BB70698F8825D40790811DFC07 +CBC54AECCE432A0F97A63E71414964B10F330AAF531DA36B0E70364066EDC970 +A52637EBD8FCA59AFF1744F5B46AE79FCC86E31BA883012AF7033ECB43C8CF2F +474887951DE88E3288936F9CB63ECCD381F906644CD4036D3EE056A6E26D52BE +C23C2102AFFB461943D393967EAF80E1422E51478448C211A0D62AA97A686DE9 +6B21CC05DA1CE1392FC7C22FFC4CAB08C60CAD17F8DAF5B360F2CBC2F1611A62 +E704671388B7B5B8DC1405B3239085C2DA2944401276904B000D46A5808087FE +3B7EB5AB33B934AC0E871117F8F9AD77F9D4C3C9ADC104BF7E6B53EFC37BCAD5 +7B73A3BC2102FFA686E1EB8C784654EB18C7AA971E30CFD598B54BF11E1574A4 +5A6E3C7EDC4B000EB802A90F9F2B8A9E3CB1476382542E8BE4745EEDED3CC1F9 +2E757983F8837517D46350DB7B463E0AF5EC62D99F161E2E6E2D5D31C9A67474 +0C33287741672DA6D25E4D12569BB09A57D05D77C4507A36BA534833046D5A58 +88DE60F1E3B475BF6645565FEA080C918E67AFBAF673B83A89C866954B2709C0 +98D93B44FF3379952A5C3E4F063D3E2EA07F67B2B5BF9F7202F4AB2DA5543DEF +0429F61E4939CB9C41B86099F8EF62F5E80FE38139E9A75F9EF4B946F775CBAA +D31654675CD0EA94A63803B27B72911E164560D5939111A1D1B579F80509F8F3 +A3A591E530F12741FA5C4673BF894005FB893C2D725CCDA3EC41429383A4D6E3 +0E69E7DD7EE8481E237F5C3B3C2EBB29165A7B672C8D9740E07F10FD04479236 +E6E61691A73374537DFC2DE078BA3F4692D06FB08EF2493633510914649EEF10 +B6DF07297D1C28BABFFBDAC287F83D9CDD071831E1688FE2A62D654463C3BF1C +574EBCB7CDBAAFBFF43932F944D130FFFD11C37488E452D616E745D1F4AFC58C +5417AF552DBAC64147F87AA28A04F8C1A3762DE1E9ABE6CA61AD64547C637D68 +0A954DA58CD646586933FD73C59B124CE7DC09A32289E13ECDF617084B05BBCF +8ABCA791092C9D2AAA654B40C9F3D3101A47B7EA53FD3D3ABA444ACDAD67F9D7 +2F6CEFF3F06C5436E0D541A145DCD80E0DB56D966C563A2CAC59D7B64AD40E0E +8BDB2952F66A77C6C2B2F59F59E5546B67F9753EB7ECF59099412A91A5E02DE7 +B42D80C851690AAEAF4ADA1785BCDC63DF7A857C1DF503315BCB9A48FBED6624 +C04373553329C2E2D7EDA7FDD877EEC15EB9CB4C32BFB2AAB37187E6F7D91554 +2BB4036E3510176A4CFEC4A6ED7AC037618D0B02F7E4E61862A5D8C89CF7B69B +3CAC808DB6F582887113DE7E70B0A833831A6250348F19493BA4619D4E9AD23B +356FA36E0576441BBA4ECE8E15F5C4AFCA524FF9F884CA6F22D0E8457EC0D7B2 +89B16700323B125633B5E78762293B5FBF0A3783069568099377CE17A2671292 +FE5C91CCAC9308C94266820944001038809ED5CA1B80C1C5E5FC35014F7CE5B3 +94E5C4C513DB75BCC1D616A3C952DE3370FEC7EA89AF705A1E035370E3695233 +F2AC4D0117290BCC7C63D930187290BF470C9D33C980F62A79862F5B722A8DD8 +5744A2271E7D2D5547E0685E046AE1B99FBFD83FAC7EEBB576FEA7A823FD665E +FC5FE7C997AD1C6149B8494C9F508A1F29E64E8C636A0B570650425D4CC6F803 +5E8060B89ED4171442ABB578BC9F7DB9F768F110BF55B63AE8B1561650B6F11F +974D2E2E2CA973C2599835523278ACE31B11CB208AB1BBFC342C653266768B1F +F11C9D18A3125F364237560ECAF6918C66AAB987B0028C4AE5FE72225755269D +A2A5C843B134E7602AAC47A5BC6881C111F4895CB6314F12AE0051B426FE1F4B +2F6916CC6645CE8E4A636BCDED8F542679842582DAA3C10E7FE83018C84BF6CE +7728F9FF32D39397C4B73BBD6EE5D9D13BAD2BE727A5FB89654767010A8E6380 +959601231774B9371798797E1AE5AEEB8EABC2BC9033BFA440A6895E090321BB +2B02349DE3178B6A6EF649644C6DD4B5942881F6A35FA2D71081028F1D504AAB +123ADBA4F0A59E8CAE2565A62E21C13464FCBB0DE37957F3EC66332DFB2BF4BF +943BD3280E406863C8BE266023959B99C969C2C2423C9F7D814B82D56635761D +3E026A163E3BB32C0A97505B9A87CDF5D08EE112C00BE377E170618E59897378 +A2026BC33EEEAF1F902194F17837E6D14273C1B23A97D080C26419F5E68F8378 +BA223CC1B29A0E488F21C47462EE2ECCEDDC58D4D6229CBFD7999F8552B21B07 +26592F5D4BCE67F427F54DF72C87DADEB1EAD4684319EA39BDECB65EFD9C67C5 +EFFC1C9171B05354BC769B4E0609E10884735700D01D3421295D75D4DE190D83 +90BC3F9EE03E97BF8FD273B50D3185BEF5B0EB32506F51335D8D555872182830 +1213403560F935CBF17B30B53A5B3F422F770CF3E0AA964B900635519F486A2D +41EC65C342EC235F9DAAB07AB10D7B0A15A231538FD107651A4964B913E77C8D +BF49CFDCF4CAAE0B2E3EE0EB06792C600811EE8890DFD01598B272FC8E6686C4 +FC425EE1519C372D02B0BBD58647D5E39E243AAF08D90F8092A424E2167F7BDD +45A95EA8E04E1B966429027E6467416C98C89F16F23EE1CD6D5DD6856927E845 +20FEA2128528DBF01966CC8DB433C9FE3E0E9EB13F23896F84E369A9AF0E80FE +D193C40C072D71D85045E7FEF3913094D71B84C8304154199B7FC2C7F278CCAD +899A3107F56687C26A9F60557ECB4791CA4CE7CB6D7F6422AA1EA6C67C2D57AD +2F09B3BEF09D36187650743D8A6A0FF16E88CE09728EC77EA0507EC8817AF105 +6399158B4C7AB6DDF3505A20880483579CCC027218CAC36E5AB7C4EF83743A03 +EC38E97E4C4FDF1B35D8548274DF1713E509BAD45BE78A49DC41D9341AE68D3F +D9C5720ADB1D7077223F85E73B7EA8A18EE0A44856906C89842A0E734EE7D3F7 +5C7E6FF3524DAD3EAB6060F37CA8DFDDAA9D7B248F3ED84D4AC20D3D7D23496C +61C7A315752E2906B0CFFD0E70D1328DFFC890CB6D77A9D8EF8C205E3E52613F +08845C54EB98AE98FA5B7099211542FA54CC5D6F75FE3DED541B7565C656126A +68CAD216C1A3FA9E8F72DEE7FA7C5AD5136044BB161023C701B55F483BC8155E +7DAD9D13C9ECB613CB6D2EE48C0FDAB9FD2610B7B32D13B27E023A5975C776DC +265DD695BED2DB7F63390B6E17810C6C84CC11748E49ECE00AB18896726E9C1C +2BE9ADFD635FFED6FD9E3A319DD43560DA9614F896D762062C1E29A8408B1642 +C5FF316F6F919335C06369D9C4A83EA7AF7C30BBF5126760647DD964516E1BA8 +E24EF01EB04F20764837F7F5A7FCCED77389848E276F71F05DF88C655AF17437 +774B95174BD8D8B77064B87B9FAAFC461331EF0558F3B48E2004C5541ADA5A99 +A8C27FD3A67B18E8EA02CB2C28ED4CA3ACE3F456B509590BFE9F74F73C5CF180 +4323C1255EC01A6D90C5F25804E066B4497843CE0954133D363BC2B224549568 +1660734AAF2F36F4310DF330BDFBBC7D8A49773481CB4C9E220D86F33A07253A +114D59D15851E63826920182939AC067D72A3AC13A279460F7C45AC519C8D413 +C8FEEF16ED896E8DAFC0AAFA8531324315A736793F0C6BEE37E9F856EA90375B +00BEEFD6FD020C5C867950B8EE72FB0313B52D405817C4DABA49C44687FE6C7F +8CB2D791B8268E8E6E84F7444A2D5611D96FE06C8D26A200EA644D7112BAAB4B +2113F0B88EAC26D30E928CE19F1C0540F0A0D1B86B610A34494231FF64939F1D +774BB1331A19BD8362EFDA7871B334F20E3421D7A36B38DE952F20E98D74028D +5D076873146910CE272F9C22072AC3FDD68B4FADD7EF802375FFD8493AA5C52B +54BD781D1B8252655F51942526D1415340CD45F9BF03ECB5F04B645879D617CA +62E9B669DF2B2D6601AEA8F4207C0A5C0037EE3803F809BB12AD45D4889CA54A +D60C06FA1577B206CADE0FF82A43D64F4640A98153E8518EDF8835116D21A87C +F2406FD91D70F27315FF9479BC139C41ECB02408417E82A50A7A369D739EE1E7 +92524E23CA98C9706FC6007C2602B526AD5D4999C58A45BFEBA601FDE6746BA9 +BD6911DFCDACA9CB5A7E98EC1CC3B5BEEA50D99C33A514BA7AE8760AC054EE49 +5AF381DF0DDE1407A875F507E0A251BBB4929F987DE13245A0694FE20A77FC44 +18854A70B761B234ED078EF1E01C4AF65B426D4B8B5D0B677BD02C178FD0D9D7 +3D637D18ED510C81DF887CFE1B5179168ADF2A9FC4BC2CA5704543DED74765DF +6980462F7ED8A555C59242F229689CE69CF6C02BEC7CAFD901DE76BAD3567349 +A91478177B804F1D1269E60D86154B7FDF152EF501961ABFF65752E91292B0D2 +1C16AD00A93162653338A34A851F64A843E265EBE373858298931361B79B6DA2 +DBD8BC513A6B2BB1EB207261B54047F34412C059DE05C6A2EA8971424BB0AA06 +84AD5E495A41CF9F11A844D22A805385B27FCD507DB9B5B9834EC15C047F462B +63B44D99D7CF3A744E6528D738A3D42AE696191B6B6EEC3389748058ABB8A3B0 +B161E749539CA01169A39B16101EE2EBAD18F62D7D936D2979BF49B92ED08268 +A774B4121EA592263B367F3FCB7B89B35F72DFC85F85193B8EF32EB07DF86FD3 +6E3E8DF750C199322010950F09F9A3626121DF00EEEFE761C19E05416AB28916 +49570B7B77705906630E72BD5C12C99B68C09C00C43837F4CFA8715EDB4128C5 +7267F3FF652C858E3D2A8349B332E3BC2BC3B2F82D4B05EC0E5520B2D7235105 +51EFA9BC01C096A492130ECBCF21389E5BF1D2DD2F51245E47CE04E684A0ECB5 +3C517EF74789773889DCF605DC459E9DB154C3E171E2CB28B171C8A251595F8C +89EDDE44A82C9F6349D51418DA47347DE4C2D8D58FE770574B409A4389293E60 +6E5AD82E2AF14DFF39A7332F5089FB957CAAAB4EE0DEC0C49E1F60CBAC617445 +F22E290834D513B248653D348E0F735BA046895452B2E091259E615C45FB18BE +B00B5B8DE4AA1AF2025EF1FFB46AF12DA219772D7FA2D2D9DA29860B5C0B5C0B +F87D104C167DCE484E1834CCAB2068722B51AA1C287DA9BB041C3FB12329422F +B3B4D3413946FC5686F9A3C028F23305DAAE24901649B535D3A1D24A140CC6F1 +A098963ECC6D302BA9501B4D9CD0AC35D30B33051B190691253C7C82C43ACDD1 +9CC5A439590BBB934FB917A135EAD27EE431A2CCD999062AA58D70289E60C04C +99083B7F7CEE37370AE49C85342882348661B1344790E6B15A26DE133342AE03 +140C5A9D17C96AFEA55747425D19AF523A42AF250FA448CD3E1ABC318A95269F +07F72C14C466E0D2A1EA73262FCDDC95BF64E1904CB1DBCF751C748AE8BF7332 +F99ED128E60D4562A163FEA253F955CF0E61020B03AABCADF923972C8696B9E5 +5965A516773909AE218CE76507E734E5DCCD2CDE4478D956319FD66AEC8C15BC +E421B166D663A1D143DCC8FAFD843D60DFF89D32D9D4AB29061C3E8E7E1FD89E +065EC49781D209B5619ECC2C0A9B0F155E56DB3DBA50B847B0CA06587B4AEA20 +DF3F6E220EA5843DFC65600398989EAD4F6632B923C583D0FD4D57E9723D42D6 +420D9189DF6064E2F7CD8FF0AA59375DC4E1395787AF03FCFFD59FDFCEF452FF +43E28A9490EF824BF80D471F2C5093885AA41DC863EF777730D074559739BB43 +EB84C8CED352384410B018842B453599909EE6CEAE259C96685BB1E5C08B7968 +82A00BCB0C6BFD57170F1DA7EF8FD41097C8BFE09AC3EEF9FBDD8DCC52E71157 +7B3996B93612F4B65FE0B7CEDB5F9EE91E77D7AAA3A3C8E6DFE4AEE3BAD2BA65 +A3786CF3EC4A3DBEA0BFDE3ABA62DE428E032B3B7471BD6CADFA8189FC2D52F9 +21628DE7E96AD5AB9F57ACC77F9B73A9F762E8D1E492BF92D42CFD210F7B3F04 +691F02C13AEDF69B0DDBDC417B3A12B292A8B41CB22D53AC02189DCD5D7142DE +CB7568FD3584F6E1F134FE9251056E4B8FFCF06856B9E30DA50EAE765348F39E +4F6EE206B73B4F399244AD997F7AE0867C78126F070E000859364B690E72D492 +CE00035F9F8341C61F220F27A29F73776F542C939445405CC670AD753248343E +12AE1A2016E87A8861F05B7ED2FF65AB2E823C8D8FCBB3B65E0E24864D97B79F +A94B489CB32EA91176D5C3D170F7DEAC36317AF5800B5BB0DE38D38FBDD75D71 +B2C45D2AEF29EE2F1F55E2C7BCBBEF114F801A4A8F340E3159EF67CF966520C2 +6FCDD2316112BA45E96544A86D3BA064E674ECF9FC71CEBEC0678A85B1229CEA +6A174D115B6E834F74DC0E21BB0FE151482CED2A5E037ACD1262AA3979FA4604 +CF5C2E68C657967B3CDCA1AD9F7AF8E839639320D24FE4C8FF25F4F8CD459967 +E154862952058FE33E16357E2C204297AC81488E33B76DF2D4F93B1FB8CAB223 +B998577B7FC6C8B4AD8B5321AECCA360E98D2E163C3E4DBB01B7F8E02B413A50 +2EC8D14480849B85FC391009C961E2CBB0820A2DDEE153A29B727A4547EF7A4D +40310A9CF65D49D68860D5161A5F4F32A746F8A4FAC234EC6C515608012D6AD8 +812279D4364864582CB04D0DB04D7B80F2B43ED41B46DDAD763AFCAD08B10DA7 +4A1BB1280D22A2E538FC8C764AF934494FE22AEBE6845D20A626BC4F9B0F93A1 +BF02AAC68090AEF9462D1E1517B0898B7607FA866104A60B652A7A2CFB9D4626 +1108C550D6BDA61800E63BA5EC8E7035F1D1CD66402686B231AA87C0B54399F4 +A67BE1C656004E34D74031C046CB57B35F3C32AAC4CB9F7757CB35C6C7204960 +975430B63BA2DD5B951EFED5A1DD645BA4BDBA778FD5231807A42E505D73277A +7C0877821D82F14E064A16474B1D21914EFCF4CBB9A1F4B34E58E98334A0B732 +430CEAA87636705F6CB0AC748AC6EF54CB42C31BC2E9D8458D467E13A6BE6F6B +F37777185D70689D4AA63590FE4CDD91031F647CED0B09FAA741FD90D7C82A8D +5CC25897C73BFFA5D1BF67D768563A3627389FE841D286681FD2B507AF80B948 +1FA3F25EFF61C42E1E59FDA3C6A0F5BAD5C23F2470695660BF2D218F3EAB741A +C0E0326D88691A2BE6715A739DAA2F410F51C9FFF10FA140F18DF3BBEEBAF0DB +0BDFF699A8FB134DCD17E9E9B60AB3A7B58FD570957DEFD4854C2463A823B795 +2BEBDD075982332BE20C7755907C977C9B5C1E50D824748643748BB8B03EE518 +1DE1AF9DD73D9D40B855C8FF3501092E810A47FC25110B1B8B2DA25D6CDF034D +1EF0628227C433E48BD5FC7066D091238228AA83342B306C3691BFD16F2A89AD +9195347B3E5F51F07665D634933A348656C5C563E7843EA3EB7B6897A722BFD1 +14EA5CCFF297471F14486BEB20C5B086FBBC3839EA6929F640A249CB4A1AB38C +45E76617102B4AC6C0A60701EA17B23C5452C03BC49B03592D9C389B41489B10 +A0956B893D7402EEC055A93CD60B0A91B369022281D996ABB7F9530F520A8439 +C76F2A1BE71639DEC7545C8E37C75D43B35E7BA53D52736A5D5B6231D795D8B0 +66A9A7E2F296CDE2E11A95C7BCA510FE3F3DA0B8F4F312C5D50549DCA50CDD19 +B6ED0F3D9B9266706A430EE505535217D0F4C19736A235BD242B044706B17831 +A4E8A51490796F045104BAFAC97ED33961535B48FE7642FC3A05DBD1196112B5 +00EBA4C56C3E0311E4104E50BDFAF7C98B8FE0BB6EBFAB065CBDF71CB3507ED7 +44AB743713804C00A5CD6B1DF6F3AC3E971937087C9E1B82EFDFCB905ED833E2 +A2ECC8E08775EB081C5D16C3B5CC5B25312AA0680FDB74F95B5B98A56D34DCF2 +7B04A3DACB5DAA21E17F8C13F2B358901AB91C13EA4EFC19EE44A06C38AE7091 +7C1EDB90B538E092A4B41F1308E6DE5769FCE25E6B9FFCE0426119D868C3B814 +3484F31941231BD94FEF454F62A56D08F5D319303B2A612AD68032FE7596CFB6 +916B5BCA3EEF33966B845F3F2D5F0BF6832DB5073FE3808BA5F1D9812091E226 +FC2F3F7F56DBD04BA14D06B1E3C77B7A1F9D9B3E81FE843AA08C650A5A7EA77C +D9DDFFDFD4D0992A32915E8F162D52127248889882AAB06495D56780BA3CB143 +0A7D0D416A8B8B408E9C93EBEB2AD23FA486CAA8AF348755111532CBBA15DB40 +02E102A3D1E979190F4506447BB063CCD7862C3E842E42C3FAC628A8D283B193 +DCF1B4B5E5F9A8FE229970123CD899ECE471C1AE20CAE796D638F38180493347 +C06E62879492306E400F6643D5E4C05846342436B01287D915CFEC221881B6AB +135B07C2066C33BB01AA8F6FA3E08747D5705F44C1367BA01BF0882B4128F5D5 +B3D3DEB47BB78E6FA654E56E66BB882EA194DC224F5F156A9AF7B30EA87FB116 +D6806A6A302012E9927D05D4F72E49DF7FCD76D26565DE03B0A2353467BD1E11 +0749F05760AF2FFBC3471E37DC0777E349A5D843B6B2979DC8F9C069A48D7506 +16502F58D9152C391ACBADF638ADB08809F71C647A6C3A2C8326E014215F0288 +D98C51D5875E0EC2C7784FC48B3D5BB5FEAFBF4D6099B903C034300AE4D78E64 +A2ED79053D3E95F08F5FB761C494ECD5E2EC943D8F38086F2D16DD9736D3DB93 +E4EF811A1506AE38F13A9BF5FCEE9F240C9FB139638305C0CDA53F3C42D98A89 +A0EC3B17FDA0FCD8AA28E1555736755EC5B9667E69B1F493CB5130C82B70E70E +DE8B948F17B04E6B860D2C2744B29F6053F0E938E23CD2CB3049CE97430D6F77 +2C918E7CC58237CDC43B5B4BB714CCEA475DF58E87520EF3072AC90FC2A4E310 +C7D5F6AA831D3804E44237E08C318286A4947E603765E7D1E32F584F943BE06E +64726A02131E416B04F0D33E0825F0FBC6D7B1A5BD6D2916D098A0F977D29ECD +B2A6296FA4C182C24FA4356488E81E4144A5A1D40ED97BDE6235BAB6F3CC1318 +36B9B94DFD0C47C3341CD622F4F4DBF5EE98EB43BF107D59C005745FBAC7CF34 +8442F5A76B632CBBBC1CBCEF59B5B99C0F3981378DEC3289211094A4F4D3FA0D +EEE94BDD5707EF4A94776766C76C85E9D984422D4282002D9CCC760339219864 +BCC23DD9E624B3360CA714A9B7270AC4A6F7CDA7BAC441C684D29D29DCB8A761 +634AC269C6809F99B73534AD2BA27210107E49F65DBBCF22E31F828FB0194BCD +5D4FECE626925475B43DE7B346AF10893DCDCD9C13DC9111506FB5E8B41A69EE +3BE7815105A6FEB8DA8C6D7BE2ECD49B7F315C66D212C4400AD81426EEE1C5F0 +193CE191E871D4F9F578518E372033B8121869EE7F874F3513BF81D28B7D660B +B1C59B638E677ACB4CAF561EEE077ADB0CF64E8CEA0930FB294E031C0BA973C6 +903DDF3F33D4E18D0C55CD89FC109E72AE5CBC86C37EF512966DAD266676F8F2 +6198752E232C6F3241BAC082DA14A68FC89CCA1C3C0422D19BD2054D3B91E60F +51AB90BF2317562A4ABCE1C96165F1DDAAFE73BDFF939C327550BBBB5B0FF5A7 +3EED7D777E48E7D337FEC7836A7757343A3C3781E99179C654345940CD55BCC3 +681906BD573C7A47ABC7E334899CFA8090CFF0104B88F74107027CD6412C6183 +2AF6851F048280DDF8BE1A2DA8DBC1F7634ED64C3EF0F1A94E27BB3A3E137BC6 +F4211E62F774070DDD96156815653BDE961D5303A16F67AC4AA7E66477973A84 +C6AED52AB10A57E95DAD8F212E5E25BBF0B45CF4721450894F67A01FBCB498FF +BA5AD16FB1521E3FFEB53E8FE8B2174C76B780DF8D0B1B8B9B3EC6FA9B6AABA4 +8530493A92A904030845A5158D6B3A8247773BF93CE1D59D793575EB912FF49C +13E0FB588DD61D093D3E50EE934563FF44E26728406864C4C955E58756D217A4 +B9506576819E76B74493C7D5EF4448673504D81E0CB23F039BA9F048073C5FA0 +3A47C5B314F1AECE21F8EB9D77BD9DBE49A2B505DDA54C1B787FCC1B302DC9AD +3DC9A2822107BB6023F259B3D44F1269EA5A57C457DBAB824EA2F93B046B797E +4C82F7EBBF47A4E69072D735955576F17F7D3B5AEC2A420C347CED162D7C734F +3B0FA59774B5266387C5CECC7B5D856059C195869ED7C0CCB66DD20E8F70E875 +BF607899DFE6E1A2858380317E49BFCC0F331A75B12D646CFEDAA09CC28EA30E +1BB70F720539A60C9348366D9EA597EC52DC4169A8505565FFFAD2D372FA6F3D +CCFFB10831010C190EF3248898750D45BEFB7B444727F6B45B61F1D10BCCF6AE +6190105A1B427D3754DD9A4B42BA65F82A85D0A0739693F52B01B7D1FDDF38CC +5FD09CC00C42529D96579810BF9E5B6ADBB96B8C907E29D662530E2D67BA8924 +C68204FEAF80B1252084E657C7E7C836C65CDDB909B91B9E52E33FD14670C6C2 +B6316D2BF298DA1BF4E6BA9BC2D50ECBAEC0B15FEA65ADA070DA8FCFF3F7C329 +8CBC3B100307FBCE9EBD2105B663A86AC14CA64DD7DF46240F597C693E0E79AD +C2C6B46AB8966B0500F46167C881A88B9F8943CED18762CE708D053EFF9A1837 +8A542C548ECA7FD8266AF696DBE4823DE65A7381EDB5CEB5338027881A29A340 +2C655936D1FACFBDE4792101E1A2F758CC2DA582DB3E8520AB299EAB77CC0E5B +5A3F84F0FFFBE93A35D8D903C14D0CDFD9D592AD188FCA5ED5CC7C9F5A94929B +50CA7CA7EA2B3ADE408FD05AEB7BF322A694DA53831DDAF8299196822D2FC0A6 +91B95D4A3D9C46C36DF6E80B80D6C2982B73DA7D790477083E312EAD31D59AB7 +D172BD52AC99925EE781493D6DF86F174BB6BCB1A79559AB6BBF6B6ED1A3A85D +53BFCB6E7BC7BCE12042DF6071575DFB96CA21FE03C3A9C7BF9B6D48FFBF59BB +83286F95D40151BAB0A20EDFE224BE0915ECBC400A0F11E9B7C1BC22C71EAAAE +962B4E1BB8AF0E7365683A89BFE403880621422684A8A5CC63F6243DC4A1BE18 +E59F1184C6B8BC943282FC3EB1B099A47B3A8F5862F1B159DDFA05A046DD4311 +276D76A13E9E308C28C19A9BF5D6F4DF18DA369A8E9B18A32CF3838B641D8A73 +2421B397BBBF80BF80A197353D0CDFDF324FC2E34143D2C1D5EB6F91DE906A26 +0D11990A96F29B7F3C7735D5F8B9433AF21E8D84C5D7593FDDCABFC6D024640E +8CC8A1B3F9B05E68797064D6F9D163246E6BA5A5198170406640001BE0C441F6 +656F6A2FC0EBF17E7324FE428EA430B6885A8F100D6C1EA6EA3BBC865DC7DAA4 +FD9FB6B6EFBDC86FCDA11FA62C2E76826BBF896846B90F99F58B3AF125F9DC42 +A7036347DECF0693A058EF45535278B7FB440A07E32DA0C52A0C8F2E8EDDDB88 +E6E97458F2FAC03A7D01873E37B3DE6E6A1125AC5BEF387EC2E9BE91246C530D +E52F13CBF94C67FCFE5DE8E0CDF959ED6CF65F327C08A915572FCBB9AB6A732B +289E2CC770A642021106AE8103B28A45FA062E84F1395D51EEFED2D0C2143DC9 +939EB6D57233AA4AE24B347373FF4C285749DC66FC225FBDB3AAF247AD1AED2A +02CCA1391191DA629B0CCAC3EE434B12ED69DCB05A96ABF32A44BE6C9CEA1FBA +CEF2FBCD765BAD4C53929015D381B8562E91AAB72EEEBC4E741353964D003DAC +FDA6F739D211209B40776889B8F208336F24FC402F27A8AAD6C45A5182B1FECC +EE2BADFDF613DB925307006771088CCEBAF0805924FB298BFA9A5AF06D28D347 +8181EF23DE09F8D8E1C8023988F957A740E5A7586C7DF06995D9820F82A8B44A +B8D484561A558B896AF8B5D8C3FADE04B2D6D8D11467CCD869B9C6E8EEF793C2 +0529818E6742AD8B226374B4FE146219BEFD5A13E0C7F1A461A8123CFFE79166 +2EE95CBD7F0B29918DAE04E030A1BFFE6BAC8F5F0C3B9407C4B611CDEFFC9E01 +3BF0B6F50922900C431A0AFB51B32F6A2B814E03A17EDE45B3E33A0E1C2FAD2E +68AE579E8F303E755C62DDC7E417094DA352935AEADD188273BD46E6A9A94CBD +9C522A4197A0B9C40C79CA656396231D9C609C864A21B1697CE532436B6BCA1A +B9370F172FAD0E997286D2806B3521E09E19D9F76311D65FEF941B0DCA969D26 +FF2F6F4E83D52D765D218DEF920D27BB21E270E2E7F31EC1849F641AF0B9FB60 +EBD6794F1023A7676A53E67295D46A75DDF7C240AA05730B045E1587CFBEB501 +BB9C9BBCB8C94A1061013CBAD5ED3F02D180C7886D926181B2E1DC9F3C8E8B6E +FE48EF896AFBEE109300C692D2F94C8A140DB6378D6F294025AACC2E95E9907F +F0AB63D937C1DD9EF1B4CA496E3FE4F329F246A93628923F122C2C7AD0DF86B8 +53653F52D36AA1F67091296FA55B978990565F63B92E7BF7B4B3D043D7F79789 +71CA93A7146A4C5CA9653C92B172FC275F332B07260A573F843B0BB83CC5E5CE +EBA290AE6C7B43F3E5CB10BD84D558D2A5B6ACF1A0974EF20FCC824F5B92746B +D2A517006E707EB44899D4407FDB912BE5F4AF3C4796438331EEA2B09ADDCC96 +F798BCB7749E54F578CF703EB0AD086A6A98E4EDE1118EC76338E3B76A28306E +B1C400DB863A2282988DAD49F337A5BFAE7BBF6E06553DB67F34B3BC115C63BD +5ADE29D5E6770BF0A1CDCDD0637B9F877BD2BB6363062B2D6A01BAED65D5859E +16CE1A4EB86B9998D5D28213EC0E5CB2A297F24250433D61937B607C289DC54D +E9F7FF54BA94E40865A70273C4915BC17D6D934D275BEBDA3BE285E12CEB17B0 +75F6C87759B2E2E47DB0F4A5BA9CDC8673EABBDEFDD2EB781D9121276371656F +795F9BE5528E2F56D7BED80C679F996957AD3606C0B1E1050FF62F6CC35BAFEE +3CDE09668AB4C5F58DD7B68352CACCA2D7CBC3DBBA2B1EC9ABD1AD16A21AD93E +50DA4ABBA9EB945A93CF1C5BAB83C1BC0A1FD2084A42D892B2FD7A9D390CB09E +96610AFC7181DB4D25EDC34FAE3B0A8B54D32AFDCCEA649800DCD263730C2C7B +79EB5117277BA48A4A00806D704C58BE4679C71ED74DD4896A95248B99AC3192 +D01920DA9D284B03D8535DEC11F1A7EEBAB5A209458F0752746E1E80F1096EA9 +B72054460C14CD2DF069CFA77E7A70A366BD3A72CD81F4FC844A386631F2A661 +6C72BD35E2F5568453C1D67287EB4D1F088CE9167B2A9698507CFB51319EB6C5 +2D597A548460FBF527F53D1E43BE94B343F5EE15365D7435EFFBD0FF54D5E9DD +04915AAB6426DE0C749A0221FB8E8BD679B93519B817938F6C92392F89446228 +57F2C33C867E0AD824B78A81EDF0FBA93F89DFF8A8A832603E6CCC5570EF6150 +B4AC37603D0126D485BEF2C6AB59CED890BDE0B6FEEE1E3DF069B7E62139AD5E +85AF3BAE0A35F6F428E02FB819EAB7E07DCEEF52A2DC7AFF5BE9C5440EF61C49 +DCE3422CEFCF26721D73F0BB1D07C4F8D74494B399769273C8F3F8E8CFB811BF +5C52C3B3006963ACF2CF0A240F93D54A62DCC8BBCCB2D9FCD29A2CC515A5C668 +9CC2BF03AE1BDCED18E564CE28BC424D8905F2A495BC2264B19B36CFB9606837 +D5648832EB6D7A3806FEFEBCB37232619AA722D47DD4C182E3496F5FDA769E77 +21F50C61BB6D7EA38412C02767010CB9DDC6DF5403EC5883C345BF6B0E49505D +C74B68373429C894CC8051B9041EA12026C99F162CB5E817DE3DBF79FAA17FE7 +60E803A56FB1B25E425D589F421857C40AC0DB303AF7EA5948986EA9886DDF3A +2EF39DE46E24A789CDAE1292D8DCB35FF1457AF0F8EDD204EE66681FD2E0C120 +566AB747A050363BD7F16A94438FA75B4EEC2B4B7BB6E5F37339398F57767DAB +E217F5FB234595BA5858295B3C17B29EC35C5A9B944C9BBBFD3A1754C95166EE +1CE61F4125D776618CF5F28929D708A1193944992FE9BD0084CB83D7CEC379F2 +35774CFBA88FA0460668292E55B932B806127E9953A21234F3DC2ED273715546 +478B16A332DBA4E9FD4F995BACFE211FFB648572B4628E6683BB1FCA63227184 +6C1E7B0EEC7DBC12D2EC7D3FDE590A0B1925C581AC460F873C2A698E4F95DAE5 +D52A2872D795687D3588DBA4CFB7D9CFF2CDAC190BB7B14C25A05852B03700CC +03BBD5D3EB8108760D942FCF0816C642D0C11471864228D073DC6499E9B6EB9D +8BED6D54FA3EEE8F83D47440F6004A62491027338203F8B8FDE5250BAECF0F88 +CBD9903DD0FCAE0C2FA3848E1FE0BED94BBC52D740C530570142D6849BC55957 +DDFEA6A33695FC5EE51D31582F8D65FB1A5006F87E3C92850815411F9A5BF768 +E78B7CDC680787CA9A418C56B5B51442F3084C1EEFB6F4C1F9584C9ED5FAD5C7 +8C7748480224A4B2F2EAD2D64F6AC26EFACAF1C50D2A052328A56DF2D3522960 +4EDF824D7F9E86318959459EE2501B4D395198562E5C9D53C6FA0F8FE9FF0363 +82197B9B30D56A80A999AA522C1502D2FE6D5DF512704B7FDCB041FEF68C8D9C +B9CEB47B15F8D7B74CF7D2CF328B4F02AFEF1A2EF6BC1A3FCF1677944562C497 +46A10E744D45E0DA7A434CE2611EEC8056D331BA0C1E76ABDFBA1AF15CEE01EC +5D43BE452C090D8BCE86A02B03C9D28F7053523608FB56C7F3C865843B0F301B +2962F17E44EA805DD18DFF5D7B323E733D2F0D47476E0C701CC6CEB3D68E6D73 +4FED816BD6BC3CDFABAD659F39098034A97388B778FD29ECEBAE6E46F944DD3F +F4A5EE2737FF5EF2FC6BFC7AC13FCA18F0534A61F2BCB07FE1F3FF2C0A708F1D +5B478E0BD6E28B98EE9AED665B84AEA01E611D2A9C5CF678130C24E86A8ED000 +BD2B002F06420429DCFB092921512AF879FA9D9EEDC6FB1E83464A48D894AF35 +69968A886433EB620A3B2FE1A2EB577B19384D8503DE590B9389F70A0DDDCCC1 +8AB02CA3B5D0822BB6410F69A35C9159CA848B0F2AC5A3F34531E69AC0CB2EC8 +ABC182E05BBF7E1E3EF0AD8C91BA89FD8D8033071B7FEEB1EE932466A7A03547 +31D03B38DABCFD83F4E6FB7C7698FB11892E86B14542F8CFCBDBBE8231BD83A8 +5D9148E6B2C41D20CBF50ECE4290F33CD551E92A28F7BBC7E2D1B4EB303A4AEA +41D682037B8A1EE6A8146C81FDC857AC9993DAB7E438328EA8CC01B6818CFA4B +24AB35E0A6C4BB1A4AB166064B195F7F92A8461F982F6EC9595B7A1E36E72465 +04D6DA6A97A9168EF5A252A1C1E5CD9E9810299A105F59789304AADE75A4115C +EB2201197CD87FC59E5A601C9B66B816FCDC2B23A062A8EA5693289B5256E9B4 +CDC042F366E3DE8511176D560764E0F92BC5E9A1BA1151A64649FBE4C3CCE03C +0A427E27ABA7AAAC6EE305FB1C1DD6983F026C64CDEE06F57A000682F880283B +AC0F18194953E96429BF6A59999DA5DF128503AAD963F49F61BD14CC82266A77 +A20B25BE10094D9D91B3E149B523B1A503BAB5B4AE619552895B8C632411F496 +865455FA98AD63A7F5CE08D08C212CAC5185AAEAB87823282A500A1B0530D618 +BEE058F8D4ED61BAB4CF56CBE19E66CC0D2F0C5E96DF2B23E1E750F050162EDD +5FF3EA8B4A853C5E74BFC67C3B37E44E5CA5188745E5D18D23245450EED4DE2E +2166A9C74A595E6C7AFED61479929F9860597BC486BAD3557C8A59AD38B1FC17 +59A70D61226D0E83F416F982CA5F8E7AC98D35D4401DD35A288095C220AA2EED +4662643FAA021E474FC11C0A9601C8CB1B597AB9BDBFBDA9AD2FAD662A8CE14A +89481D11C0814475C6972EBD78031F2BBB3A96A3C8436FC7E11A3C35654A914D +E7C83F8B0521B3BFC4A98C87640FC8050A95CC740E01D8769541956D2C91FB4E +3E4F5A45F76183A847F202D7B63478358CBAF452CF47F0CC26F82893300D0F87 +A8C0FF3E1505943ABE4C725516F1E52B47EA3232D3EFD5EC0D5FD06DBCEA8585 +5179CE8810B64978B9353C1AC8739B86CAC020DB9326BF917E63E1B4C9BB41C1 +5C165DBF5BB76E2F2E192874159CC287678C20B8BFAFEB61F621CB8185DEA0DD +C45593CD896AB1E3BBE85A0D0957DF2E49E5BB066C6358FE7DD15D861E031777 +D5AB5336D9026AC2C8C3D041B6025E93E60921508C435699ED0AA29C5443FCB3 +63431F6A0341F4157B1DB8A2199C692E6ED6D3964F552BFAF7A4AF424F1A0F11 +5280159EAD178138A1076F51F7EC5C35E318F9B5789EC2EDB7C788D0A6DC9D2F +4AD61CBC193222A76928509CB73986E377123B4ECC99CA12B6B627F3BBA93276 +C553B701C5F879E4B38568A77012B44AD4514EC0D7603E742C842D329B629B79 +BF38C72A3F14BD08CADFC25D7908E0B1D83715A44AD81368629E51CC75586357 +9B702B7761839FE17D47C63ACC701B266AC345F1AC15F3C30F0F5322E9310054 +EEE5C861E0071CF161E47CE6155A1BDB6D938996F3EB83BA923950FC90FBA41C +9248A881226BA32174F85B488F3E710BB7D2376E371D23BE051EB54E15E22796 +675FF7A2BD540B119C78790E0B8C61FFE7E74E2B18FA0D5A7BAA2BBBE9B969F5 +C0D465E11D8F6CFCD8A4ECD536A7F477C86CE7D6561F3C17C4F70D1F7FF4A66C +E315BB44D8832F9AA0B35974C9B0B741E96B8404DD9C835A476239135463C9D6 +09ACADC65D032E88A9C0FBA78C6FE4F625DF242383FF689322796F9003B66D13 +B9545377F48AC0EEBB187564E66F2A56C04F8B3093B5DED8AD536499A921A231 +765CB71B84DE828F905EB87E3A2B86DA1508A18788825CA0FFC5E1473015686E +A24B2CE92F10A199A71FBFD56110E7FE7B4AC102AE7A03E65E8CDA68489ECD60 +E8251072A2B61EF9523BDA385E64EF7DC05DD37730B7BD4685755C58391EBB3C +91D2E04C0840C80FB77B71B8E28F43BE6C7F54CD3A87EE5F07820F927EAA1BC8 +0BC5C897B56B83906F35857C0528044D4CDFE72EF613BD27EC286CA90883F5EA +B50FEBCC77961B3B7B2A3C95127A697A1BBDE0AD2E485967DA824E46E982E143 +A514888D5FB0DDD91E7D216F6B3D8A92ECBA09B2F1493F520D32B16561603F59 +2A3D4F272BD7E802A871A190944C9329D2FA05F16C278D071B00CB25F3F5005F +053683F8213CAC1AFA299BEE16F2BEA5F9EB512D60295D216F39AC080B2523B5 +2CABB71A1384F1A5915C255464AA7CFD008CDC47DC9A6DA83B65B6A5D121763D +61EDEB73F5D1C7556C66D26DF92F853A665AAC14D074EE1F889A0C21348151E9 +231CC55FAAC46E267C623FB80A647FB7C8EA853B1380C623FCCE40225793D949 +49C0434E4604E86F46686EB9B95C5AB739547AB0238B4AE798AADF5D07B37126 +5858C1EAF561017BD4ADFDCF3BB5ED00381BF1638ED5241D6CCC706667E6A00B +B656856EAF809EFFD856BD53A3FC2710DFB05A0E174AE941A8D60AE698C7DE72 +DC63147A6E9968E8F58357C12FDFE37E3294D210019B402A4C37F21CFEB68ABC +E68D16E0E69BBB3BD3385969AEB2E4E16651659D31BB700A4D19CCB5CFE85E84 +64422D11C64113BD309CF149252FD5C0128AD0E70102B3CEAF21792699B4CEFD +14B8219983F1E03F2139256FE52D837E8CA3A010B683D72D041D8055BCEB3942 +8E26C359BAE9B98B98CE6661F9F03EAC9930F8F26CBD4D35DBF12A828EECD77F +66A2AF677147351D8EE322C049040C5C7CAFCC4374FBE8A8DF601C79830FE6CE +2BCE4A1988C1DC1C063CA77CBCF6DEB93F01516AADB40629040B2BB9762239C9 +BDC49BB22D7DF3E3764CFB26F6AB4E32F60367C229B6ED37B3B69D7DC77CB752 +58B17DACA68EFBF15219F8644A06E87806CA9F98C44707F6CB21E91E1342E3BD +7B2659D95B6273AC59078BE16CBE957D9D6B9C24CA9FE2C3BCFEB0A27034624C +02BA674381EA0C652B6128DCCADCE4EB7069C9E67E96EA3A803F2D0392FD6914 +EA87C90AB51314E25C0CA722D9EEB6063AF0484DD6789D8A6FB1FB6021FFE6D1 +A4F5E64D3D944B44CDEE76F449E3A19ED9DD908F4FF6C1FDEE709526E492876E +68ED03B7D07186AD57D5A39F79D56443236DCA1204B7FCB3C57D0D20070F359C +F4CE4EC541CDBC9C3B3467CE5412371FEF041C5E2F3B0B5C2D020815ABFC26A0 +C2E9389C2B8B44D4C628E69C07712659B261BBE1CC681884F88ADFB3D44AD4B5 +F4CF7CEB5584EE640ABCFC226BAC4DBB478927FA2AC5C2968E4838C380D8B7FD +054DF20862804848359518F189C62752C284867B8CF9A04E332FE1E3FC91864C +76CA71B1FDC80B13654C7D19B68AC039590937B75EDD0863B62D7D8D123277CD +4C97B1366422359DAD7155A816F0E9001DF0D1970A345E4AFAF3DEF28F81C7CE +868ABB2CE5B2C145266A71E05DFC1FF79005D9116AFCF4F4C0ADCBE7B9600E2C +295EAE977AF481DD81D185FE4A9533DEAFB4A95A91F32A00DDD4807D31B834FD +B1CFE04F46368E939AC6F1CEF3472F2207135CC700F053F52407BA73E7987406 +E615265C624084368AC04A3666B290599F630C25FEAACFB0F42585F644631448 +79A839A9E8FDAAADD135345A7A69EBF2BBE571DCBF16D6E47BCF65059F71742C +75D10900D875F2EFD9CB7A1905B63FA05DA0A0413009976A176B83B4A62D2E21 +0D86ADD86C4E2EC9ACCEAF1C5A0A19A1330CAAF6C223359A96DECB2F7CE50870 +647BACD3241D90E8850AB5E8EEB3DF8F9AA8DDD65CE046B7E8B29C3931350463 +A715A39482E550A7FC99F4F24560FA1B99B62FE4DB22DA4D3AC30955E2CC042A +8F6E3447357622CAC0C961FC4C5EE16CB6BA958EDF66974AA94FE167DE4AEF55 +A59BC805AF7C6F00B8E6A81CC4820762C25577BEDBC24BFC65317D3F95871963 +B1AF96D90E6731FECEAC86368488B4F08FC7A9B4C23D2D9E96FE4DF19825DEA3 +6D9FA6F70A097E55AAC73D3778671B1442F9F81BD8DF5B80344D2F92CEA557D8 +28C5BCEFE5857B9B3A73351B4CA89C172C881B9BA568E9EF1E008A407D9960BC +8056D9BD08BB53DAF2A577EA903F7E07B8E66FA81D37BA9D9967D43D7D411072 +462370676C259CD1C6C99D42170157A5D739CA097F1BAB77D25B11F63BB897C9 +EDD1A897380917EB694B9A9EDDC1BF72DEAD17BBC01475D090685BBE646F5F9F +048EF97BE579CBDDED5ED2343563B24D73998833113FB4BF2780E6219B029041 +B7E508AACF2CF9F3B2D1C85290E5344B5C086678E5C8D33C99D2E13B40EAB5C6 +83C8213FF27BE85494CE767BADDD084CBD56E8CFE8EDC9DD3E22A625B14B1CFE +0F23E0A45165D0B1ECCDB980281D0C39759E46892734067CF3C136CB2985E870 +D3E696D2F3432C4AEDCF7F2C724CB25913949CC417135CE988774B7B21661B02 +BFB37039C04F20403C057EAC33C7AEDA89F66ED53ECEEDCAE68554BE213F01B2 +0FC9D1AC95EA7720921B514EF49F58BC4C8833E7B862DEF57C1F2C7B10FF89AD +4A78404133D02EC9B4C5D772149B516557A94C342BA907C3AE257B98A44A05EB +48496A46C8E86874E1A4B84EB034F4E23403D733E5481F0F235508CD13BF99D8 +BF26939A4CA00F13449A143109A2C0A24EC521CC6C8C79BEEE2D566B487B78D7 +F8B30CAC371067C70D71A0A93AFD0D6EE568C98AB4559E3976271E492C15C678 +F9AD0109EAF8778855213DFBBE42CA18A25AB94E1F4FB86AFECD6F1DBFC023E6 +F525D79A8CAE50A6507512690D2DADCDA47E5317899284C2D0B2E6FF8A211CA4 +7AB9CDE6DBE438C0F0C076CF9FAA7D28B2D46B24358762E9F6B850D6FE2B3878 +FB03C70BB29D852EFC0F928582A49094AE48CA7D0FA0B1D20DA43A9EAEBB4F9B +5043AD9355589F26202AC6C31EACF8C8C8F22F1C73B94C8F5DB698E081FD3BBB +717DA3E5B0CCA33FF975725075C1682F7A6822A9C68241AE8CC93E97C3170476 +B17BCDA45C98B306FEAB6BB8E97833E70C0B5B314518A0433DB6CDDEFFABB2B9 +A221CEE0AD8E101B9FC42700EE65922C82D1831E1747234EFAB63982D92235F6 +0C4DBA8901A60E1BE04516F3A682438E051743524DBFF410B6B784F740B8E0B3 +9CA6C7029DBAA0E681572624406F2331C30251990B7BFE9ADA2061E4BAD72678 +637F632290DC1D987F2D6301399BBF70ADD40456D212A0BCBEBF947FD0D26107 +01D1037BB5AF3A3119D6967592023D483D463EC7E4474E1925905C17E7F7CE62 +7693A52CC38DD1FCCE98B63554379C03E033768C861C4705416C5E583CF3554B +6BA4A6006C37BAA69FAE8E6858DB6E361DE2DAFADFF82EB8FF4C476C316B3500 +1E0BB925D21C33985F00223797F1B109253E41BBC99D9DE28B98301A77F2FED6 +1C09AB94F1A922492271878EE90437FBFD202AB6C3C8B6E66A80B862DDF9D1DF +CBF60DAA668F88A1A624B91FAA8BD574961A4EB0BEDD209376C4174C55681BE7 +D71C0AD813B995508530F30839DCCC26001243A76F96AEAB5E1B45A182D7D3FF +00124EA41F312422029232F71275F1D60FCFB1B6D26A5E09CE796D72791F3E71 +1B075D016C6A2C119FFBA95BE034EEF1EA78B5F520BCF583B284421CC65992B6 +F319DD039753EF833F450332B056A04A8B3356560C55438755D2842A27281C42 +EDED9E7F7FE3373F71E69DEAECC43A5F585D30F4C7DAF77FFFDDB558D6DA9233 +F8A7504E4B80DF76850BBC3B0174D1F45C3F70869957F82B0DC22D42426EDD7B +9943ED5A17BBFD3EAA7AC9349E6FF6DE3B7E88CE522A399556B1DDC660E89BB0 +07458D0D55A51EA83D00ECBEBF007D509D0F9DA7328821D981F854D9733BBFC7 +79DABAEB9B3CC3AC69AB9D187DBCD03AE29F2C43FA4A0C5A4924C6C0A8A1E7A2 +25682D001C1A3BDDDC1FC4385B9F217EBAFBA7746AF6CD52A5DD24980B8591E1 +827F57943538CF2ED56FD9D52C5766B5A3C25B36DE530F532A795A8E464FD9FD +BDB86793EB23221790692E8F6E4C4D5F88FA8C96C9AB9FCE3BAD899CAAFC0D2D +7305885730B68040CABC1DCC1528C2DDDB37B9C9681B7E021E3190F0AF480ED7 +84E624376C43AD688D8E0FE302A310D1CA0CA912941A52336F85F7429FFE4560 +E082A1A12B75FCE9F1AF0B4642F96BCE0E61EA6798E7F8D0F0F4D7CA90F757CC +3009A5D0897B22FCF894E3B0F1163BD490E8AFBD523F10696534A77BF17FB139 +909C1C7A69A48BCA3E8F2274F2C3063F1FDF0905BE8C162C7D790293DF5DBC9F +9CCF48F98817AA69E9E9BDE280283A137162ABC9B27B0163E67EF310B51B51AA +DF31943B3557785D5FFEAB1B34FC368409334D7DFA24CF85833783C7BA801BC8 +A95DFA28402DFADD12EB9D4B1F6C3041DA1C87563585D1BAD8AB65F0FCD4015E +D21569A0AB4FFDF3265E1BF3F7F1A43FB96CBF13B905CD46C3571EEB02A3190A +613B6FA912368F0099F30E8E64FE899411E4C072CB63E2C662AFB6A0EDC2F082 +1009F5681A23D7460BDA4ED4F9389A2FD7EF64DC2FA9B2807F2B307D44062371 +3AD4C8D327120BB9061BEC9A5834899896A9638D2F846ACA0462C9C8279E0AEC +9FF78C7D6BACBC7D6A15A0F3E48A7E1B43265201F1484ED27410A484B38D6465 +9B2A29BA97294CB5DDF0099DA4727B8527F454F37004BF9C4901A378E1A623D5 +33D9B460D8E182691B4D8334E836942B0D34AF6C992540B4E092E6A883337DEE +A359B9492BE06E8306ABCAB5686C26AA3C1FAD4B5A1313CD3C1B4D0EA2CE897A +E1DEF890B729BDA6DB9EB328D1E52B4F999A0FC3ADFB787EC38BF65A3FF04FF4 +5521A909DC11E204408FAB630386252D62CD3F09ACF2FDF1B29B40695F1836F4 +2ACCE65A6266A52353665E65CA65A9585701D3389D23299D61A687A6016C6DA4 +B7E24F5E9F570B480814923A33193261B00BE584F9A35B92BC799B0FA940F4D1 +5A61BAE6E7F6ECFFCEA868A6FCB4B40C0D7F0D43A42DB66A287D2BA92A6C9ABF +891528E30DEE34C8880AEAF2EAB4826A28E9F7097CC376579CDB7000111D2E9B +66AC6207D5DDD92096455E86DE62ECD4C6219401865F11B8A8EF73000B5D3B61 +0F89405A82ACD6A8D675C44920E281514D16C177882518FC4532B2AAD2865270 +B26D955148B48478631B7493D5D68B590DB12BC72EDCC64BA4FD2186787BC161 +CE587F9F3E96607541C180114B16D058ACC89B425DC8C20165B881368F0E5292 +F6DB2F8350080072E258EA2C5E85D6419A72BA782DC01791A4959F08B2D40057 +10711744CF043A4D5E3ED3FDFDB4A5ABE1D842097380AB8693DB90A0BE28DDDA +9C24F9446632F1CDAB75FC2A6234B15FC294D41ADD6C6E95B13FEDFD3BCEBD3E +7BDFBCAE303B6A8BA181EE4B4CFC4C20432C75CE5323525C671AD4042519537C +C934C699D9E00D605AA1F8A3635116C02BA07760B62DFD50D059CA88C69569E7 +194FC05579C53E8D8D9D3E9C0D43364C99401CA56A0E6DB8BE22D595E2D2D4E8 +6A251F9E9812DF3F355DBBFCA7519C53DD3C4B7501E11455E87D9BD6BD9B91A7 +50AB44142B0D01E7AE2548D0F544976E0172A97114927B0C4FBE9043575A730A +3F3FB0A81906945BBC36CFD6573044326EC43B5D42922956EFE60888332A3513 +0B690D4E024A9A12175E39D5E5955790B9E5AEF3451FD1992079290DE16E36E5 +E6C6347F3716CDBBE22D39605A27024E5D441C9EFD849B02A4E43E4DE5425CA9 +6B6BA2C8EF676016432D4AC709BB0452F072D6039F7E33C33B3E8E1ECE0FCEEE +2F6D083786DBF65E62D3A4D31C937351523E4851DAE2B60C7DC91194DDFBC13B +353710E9A471F2830667C837FF0C8119C143144FF8B392C2BEAD2EC5F7AF5EBD +DBEB4C36781BA28CA854128182F8D21760044B97439FFEF7C16A06778455687C +9DB73A44DEB241F1FD9A5F57CA2D810B0DC8D3E0B87C242B916F68DF74B6A46E +BA6622BDE90B6660AB6AEAFAD5D1EF04BE006193194A295B0CBE5C45750C5711 +A338631906FAF7A915B1FDB38BBDD3B4797B96EB4C816B7F13CB803E2B1DC5BC +ED66B603C68CC23E3125FFF102CA544EF9ACB8289C19DF24A9589147392767CE +F2D9B47CBEC2765B6D2E9C40B67534C01B94E07A6991813BA31018E86803440A +C9DB6FC5AC8B0A4C6DF96C7906DC4D3F51F99AB314959EB94E82A1A5B84DFEE4 +D10E438ACFDDAC92486835C46E120824D0B8ABB3224B94091845A22D15600F0E +5AB1B4C440529CF7957FD36BB2C7362251FE12FE59EE41F2FFA52236BB97DF53 +C29F81F4805992518E02D747E802D38B8E689BB503DE7928634D64352ABB3C68 +A073988A52DC63E1D606C18D68A95BB4F3D1D26799EA02101782CE1154478B36 +F4C0F4C72C032526C0F28B0D49ECA060A031D84EA9F5C58E38DD0E5C36F11BEC +C5D9DC341C9161F092C1602E2BA67C1BC76938569701CEB25780E1D346582C2E +716674ADD519D650E158B257D8212B9734BC1777032AA477429750BCA4776719 +82C313594CCA6F1EE1424082A43699F59ABED9D6416920DA4B69DB319E7CB0FE +73E46699B31917C1453FC158262344098378AC2534954D78EF9B6B73B659E07D +94B187D72A93EEADFEBDF1C7236BB2DD4CD70D79A97A92E0327177FE0A36AC5F +5F396F771608D2BB8D90A349833FF2DD24CC8A46E8EB6F36B31D3E51A060FFB8 +FF66AEA579648800CD0C8A9615C8E2D0550523343657D6D509BF7094065EB390 +5643EA96270B1EC6D338602D8C8C72FD323E97319E7E4CE802CCF245DF7B11D6 +917D32B6B7735C3EB089A1071FE012C72D4336EB2B68E2BA85677F919401E5CE +442F3CE48909B6AA122D9E16236284A571A5A3FA0923FAB58EC8DD172B2B29AF +5A5251BCD86FEB0EF87F77281F686C1A14C734F4E49C278CA38ED3A5C0342CAA +19CF6315677DCFF0FC76759A2E08DA2DCE2783D4B1B9284DB4F399A78715243A +2610A4B1D34E3A6D5B0C42D96F19C4392A63186D941FBEFE74A2F20FA4B5D998 +5ADC9CECB760FDF57BE53F057F726F164C9072BF499BDDA065979014B83E7A2D +DB24B70426BD9CA52768218CC89B3CBF387D550669FAE2FBEC1BA690D2D1D104 +F4363412050787C325B900B54483B7EE0B951626422963A54006802FFEC1649D +476A8C4521CA07C68EA0D74150B1840DE5B9A801E7DF3A8EBB194B11A72E8409 +2772084D0C37AA9A158AB21B49EDC3EF581CCE7AD4880F17897CD61511AFDBCC +8ECAE00DE43CF21A4C69194BBACFAD417C93A71A350CF087B77A96BD7EB9A198 +6B01A0929D968BFEA348475803690EC74ED1CA9032F4E201081FD85BBC6789FC +4466A642A99E8F2EF742E5DB88CB2C8E6B1F15A29A2D25FC3B579F6DF6713BD2 +B25CAB08F81350C31E7E0FCD7DB5B9CBF9EE07778AE32322F684834F2F223D56 +62491EC149964AD940491C1FB4A5BDE45B8A81FE990EC816F9C3BB17F1D5EEF1 +FBD54785D787F6544A2429D7468878F210495BEB13F3429B8603CB03D1AC41CC +82A29B3A3E23ACAFE098BE5E60CBAF6651CC765DB907A81A0C9AE730EE3C1170 +3C1CD8B5E4BE68B705502D97329D231AE9C629A3349F3E88270692E476E281AC +92C364493BFA024B5BBF34C6EFA6995735AE972CB8652AE61331704DCB10C42E +3B944C013734CCE07A91A4016AC624B5EDDC2B49E633F6C7F11A8F3503277ED2 +AFF98C4A3868C67A4960C760456420F4EA8C28606690178CF6335FCC01251EA2 +93A337B0CB1A51A1234DA080DC0209519A1D92CCC2100BEF87597BDAD3EA2B74 +27FD9E35ED1CA16FEFC86C087251BE83D80234B6EECC77D19FEC8944D5C344F4 +CD89FF27CE457C066F5104C627D4830CD57DFA3D4B416444F4129DCC2EB064BD +D94E6888F7664817C3332FF17759435AD4E95C1710D0D72D6A7D7CB179D3EE53 +5E86BD4993A87996B4E793AEE530D6382AA59AE08898DCFAB4151CCD6F99AC59 +DBCA039FD79C24234CB479CF85BB7F99B9FD82E8BDF9776F7FD5D5C03EFC90C4 +4E3A016C7E653A1870DEEC325B2A08B0E636F4DB6949DE052FA593F7125B0D4E +177162EB4E6AC264034C82E33A04F9850D6E1DD28E26476D46CDBA5D46F4320B +01D2EC7EF1E108C82D64169243BFA6AA10A6CE9CC9225FFE15F71E1059D7033E +C49B110FDEA14578DC663480A9B753495FDCE6881940D94C0891A907E0E02F48 +F8B2F61DF35D27493CDA6563FCFF9FAD1A2E41CB27E7A1B541C16E5489525A67 +50314E35DA4C6F2F82EE6C482B72537647F88A7A658DA89FB03373735EB1A943 +58765BD68F9C6644A01FE7DC70CFF3D2FDF5C3A009D37EA018D70BC3BFA1433D +064E82206EABCCE150D784C9DB26FB54D3FDE40B8D7002ED0006FBB3A8D6AC76 +90B4362A900AA027782E6E31F0C53CF90516BBF375EFE5D0A40E27DF4A1441BC +878DB3D53886E0746DFCD8B5111FE0AC0C96BCBA37077381E72194163E92C7B9 +7AB1731086258DB9A87F54CD7E58F1156020C7F72BA15A68F0EAADDD80B75523 +5367EE05111189354281E390B4E86198269B954FCD9EF07F9D957AB2EE67FE9B +8C6DB530207753D889DF381D2E4AF823716BF9781DAC4C7548C385A62CAA026C +CA5FCFFEA7FBF09A5A90AD09DE2E96D03C0D17ACB5940F94450B6C6663EDEF8E +1613B93AB0D980F5AD0EBF2158D816E5AEA6262C4CB6EA4A01D1D81713B879A8 +BEEAD737A0A8684C927CAB5AB269EBD1A65109A4DC373149482B82ECCCFA24AA +54D04084C229C625FBC19BAD1CA67EB23A0F9F9F16EF1566F5A29F8BC28366F0 +3C0164C58BDFA577C564BB2AA923DC5EEBC1A48F8C67B6EB6A5787003C691C42 +FA13C71EA7F6ACEAA29E1A6F0E7233FF9DE42D5E79433B5823AF41A99C4FE074 +E669EBACB04C9E7992A3739EBA956EB6F385D20958FFC2FBCA7E91C36DFCFE15 +5B78030D92EB4822E16EA2D5CFAF548F6DF59BD118987A35D67D67429FDCDC16 +A22EF6745D7033896A09F3DFDB36CD5DB2172FE15D4651EF4E871A9960CAECB3 +70E3FC83CBB5E1B22C52A46F1AE96EA361812384C61EF14EB326026ED0B94CA5 +A94C62E9B9817FA83DA4DCB60CE5746EC37F2C235B6F411BEDA030861D10977A +A36E36720694009ED6BE27364F02A28BC7BEA691A5F7FC5F0610665B8B98F183 +1FC074B69C33CA23457F5925174A23B267EB85E9A9DF7FA7C1D3C3C9BAE34053 +455486562EF6CD906707A4D771E19DABB1B057F04D758112B2ADAFA1EDF3C3D9 +2CD2D77D61557E1BCAC2D756DB060E9D2834B41E6DDB87ED4827324D63988C24 +9440A816C9CC7B59EEB52F89863B27068111CFEA00EA162C2C44494E93E2051B +ECB2577F6C3D9F2084C41E12070A8FEA78FE7CFC3B2AE181E1BB177E2F33F061 +9CBB7F4FEF066E63FC6038E43CAE90A4EA7E6122395BA10C730064E67C6CB284 +65567991D64C5BD47025CBA6EA0E5CAA111DD891C383CBD8E688E767CA0EE879 +9D60F259E539595348EFC1BE7D46FC67226F1230B6E16F59A3913ED0634FC1EA +98962C1641177C618E38FB038CE792B06DBCEF5771D19DB5CD047EE9670F4508 +5E8CE0D6D3986F606A77C7BED728D7F8638087E3D5D7F76E1833F241EE14F6A6 +EC3D76588ABDA5CA79668DDE40F014CF285B5888CAD8489873789493DD3D27D0 +0A9299E68D61EEB26EA367F1927A0F8E49977CA12E4C7F04BB77FE3069130B1C +4566B996311AC6FEE5F66561F5D2CFAF31A8ED3AF8897BD1929EBA5D09D03735 +E3A0157E61A48A05B5A4F1CE6916AE4C51F8E81EA6117D663E34E5A7222748E3 +8E46D64D8D458AF7610A00861A66D1D1BD47F9A37CBCC7A0DE20F66B818D0FBA +2C34E6A560216CD2384B5C58D4C2755C8FA2FDB66D0AE9F5AF647B5E0C30430D +9903489714236607C979F2E12994DA64794D4B4F541B1DBC252F782D007638E6 +14DCA8B2738BA9243D707395DACD052340EE41E0D481282AB40C0D42D0185E7F +AF03C64FAACB36CEB3BB8053D3A8AA6C1D5626D27E93CB0CF2EED4A9FBA8B910 +0A315118E3BB6B7EA84A817A728E065624ED0AB9867019A358FF6E55FC6872A7 +33E8611EC84ADA92E51C50427AD3C22684A54526B48B2C58CF7570BDAAA73476 +CC26A3D36302F349F37DC5AD02A967626B10CF4AE6DB99C18C6F71C44446BF4C +A682CBE7658AE83374D43E5CAD63806BEC29DB228AA1FBA0943C135837A515AF +8B55D087F7A6760120FDF314BBF9F52FBBC9D9F013AE5A85212A5EC501096868 +8DFE1958EB6A783BD5E0935B9A1C42EBFBDC86B7915600303514554DC0B5A4AA +6494EB18C2786DC7F6AEE22D1892336DDB607E9EEB8C71CFD02D3194AD1A73AA +C1ABC69F794E128E5FF380BC01F4798FC6992CDFF4F0EA037282DECF99F45C03 +FC8B2B6B55747198A0176E54E532FC832602DC5027B4CD4BC5C5D8ABE25FB019 +789AF90B8A4BD8182F8BEFE13D6F1D5B13B818DC8C2483955914509C54E1743E +A413E005F5F6856D0C1995AF86829BEDC2CDB3A4BBE45910665D9B520A879AB4 +598781138D35584199E7E7F682A847F6CAC2B3F2E05260BC302602A21CCBFE3D +FEBD33B49C3C3B4218BC76FAD312D105EB6E1BC15E3BA0FCE6B6A95E6127B734 +B994C4EE09AC2DA6C958058B564A958EA0BFC04CC552CA28E75FC4D098E6C6D6 +943222CCC51155F2E3BBDB9901D52B4803BA384FFDE04FD20F5DBB5E9A3D40E8 +DCF6D76DACD641A96BAE0E281B88A9EA80D27D441B7AE1D7BE2ADAAC238D5B51 +43DA970337CCDA3E978F99B37CD2F1B6FFAF3BEAA267BDE8DD5E98D1A2A869D3 +01BE851623656E091696920D5BB24F9EC248A8CA28017E58DD9C48E53A9EA7FE +8C70D4CE0A878D3DA52F3C575576C4F0BCC2CB2D35609ED39326320F58DD8E2C +30BDE298B619B1745D518F2B8716880C813B6B1212D3B6BBA5152F9B792B1011 +84725D9C3F784CCE5932042EF5FDB73ADF28F1AD3912D35FC4B67E23BA84C35A +4F1E524A95D7FC381F56163C02736A35DC7277AC5081D74B32CB2D6A34E7D866 +B92405C3C2D4A897120CD143B7874E3CC1B6803328A3D52EED3E92DBF27450F5 +F34ACD9DBF87DAD9F130DB9D487A67EA1D9A222539A412984207F4AB62A5592C +358CC8F8A786E5461354ABFA8B2E746CBA08E266E1E06DF2F4955C1EF281DE39 +6B32FD4A1398E2C59E295A4CEF7A0DD49E135DB7FEB7F7C663970EBE419642F9 +E1FD36D1E5C197E7788235C81C36E6B4C104BFEEDA4F0C1CF0B5CDC6C09CE358 +218A907AA7E47CD1ADC594B4FE2F7FFAA606E0DCFA43CFD3538423E145C6B2DD +38D3FBA074E97F1FCDF24285BD4291DAE16339AD0934A04ACBBA910DECF83895 +AAAA4EB2924C69396409DC474587C310E3CDBCB8CBFC417DE903CEA643F80F04 +9ED88E90E45562291A684D5344DFF82172B1B6AEEFB26A0964D35E33C0C3FCE2 +D979DD4A1C21FD478E3431BD4D440AF24893979008E0AF174C9AC54E6C7031BE +E37A79D234544D94392796A8939B685D931559EFE19465564C18CD2972FBD929 +1829A64F790E76F4215E45AE0F8B0C6CF74E9BD1E15F5D76EA2E13D6346239BA +FC95D4C89459A86BA6226EA3FAE0B1493FF2B1ADEE14926AD908EE0251E0E0CC +F8D88C3AEDFC24DA6713815385F68E05C60444256819CF07964420F1389319AA +44624B53B9CB0C6844A3C2C47635665E45A9DEF0F78EC59CEDC12D9E23F7692B +5F2A04E3E3B0E2295F593BBBA3B811BC4E33878035A0109F9095399854384E27 +448FC4523808CBE1B095B0D21AD1DEB529D7CEAF5B22311B6B1F53B540031889 +3903DF99EFF332330A1E116729E6BB5EB05AD82E6D047C6F53CC7B8C272E1961 +C613DC557A656D87162316A0BEFE30741A69F1DEF72EEE442D6D5141B856C2DF +5B4AB35B6197545473625FF3CCA81C2DB8A4EA622A5AE80C40E7F2379F35C87D +5F0F264DB53AD10DD5209C3741CB50B2C51C50B2CDA647A279E591C6249622F0 +29C4EBF1FE98FFE5C1E5737DEDB9A348A6C66DC34DCAFDD983421E44E63D2804 +3B4286005EDF109F2A306CE74488F13653DBBFF9F10F36205801E217C08BC803 +AF2CF71D4C447A5CE08C1F7C77D61A1D43E6BEF030E69C72BE027512C9309B11 +902793FBE1CB3E990E94898A8D9E896718B029692678C29F326D4053C7EAA2F9 +EEC0DCEB5AE860D49C49E1F2B974E9F268935A428A3E66C9B5E66DC10518B2AF +6B19F339114259019D6B2907559DBE1A8DAD8F6172CAA69C9730 +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l048013t.pfa b/client/shared/lib/fonts/l048013t.pfa new file mode 100755 index 00000000..4c9d0c16 --- /dev/null +++ b/client/shared/lib/fonts/l048013t.pfa @@ -0,0 +1,1233 @@ +%!PS-AdobeFont-1.0: LuxiSans 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Sans Regular) readonly def +/FamilyName (Luxi Sans) readonly def +/Weight (Regular) readonly def +/ItalicAngle 0.0 def +/isFixedPitch false def +/UnderlinePosition -36 def +/UnderlineThickness 72 def +end readonly def +/FontName /LuxiSans def +/PaintType 0 def +/WMode 0 def +/FontBBox {-215 -211 988 993} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078987 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D83F2EBDEFED79F2D9B89C +8EC53816C50F0AE382BCE732EEE6D88D5DBD81066D279225908FE82D1016823B +76A6ECC3AE378CFA8D4858C797172833DBAD7A6E3394F8E694E1492FE4B67412 +7AD6A6ECC7A6ADC95E7AB30E84E5C6EAF70F5ADD2C2325538478BA68B505A016 +4E1EEE2C4BC00D82994B690B0A7F593DECA6BAC94DF9958F8C9D4A1B5E8CB301 +F978E31D098ADAEF1A8B0C49BE16CF963236BC1C98BFABE641EB28E425926D7D +121C3B5ED3F3B331A592397A0118B79F023A1F3427922D646B40F1535AC406FF +9A6639600E9DE05CB8CB72DC1C2315FF3C04432895774FAF2E5BC8C409478E7C +5E14212F16CCB01F40C090BB951FBF5866A7C22C10FC75DB5EF8F207AE4FD07B +10C82861AF1C7831ACC5759E0B603A9D8292CC48BD8720C06CDFAC12C303437D +D3B5D1F4AF514EB57314E27DBDF3FF7C4F1B5DD60244CC8C383F433AC4D74E8A +E0C76F22042BCAF8E576FD489CFE0ABC503C5BCB003992FE159A65392A4AC64F +4E555112A88333D6CF854A48727EF93AA0BB589426AACDC7C06FA3D61049F58C +74416E873A6B6A2198A493F73834D5C19BE517A92C5ACF16093E2F797548DD37 +FF9841B166114296FA9D03CAA6877981EC35D279B3795106CA671228224D0B4F +D4AF3640A59F9E44C59541F7F06DB11535289BE84587C698463286E342038704 +8D9B9A670A0D11A2B5C6C2E2A1E8F4AFDE915A03AE45CE5947909B1FC9A03413 +75AA4857E725120F78BF6CE2ECB35F685371843C3D95512572A7A0E3BD246ADE +AEAE95E62E9775AC24597907A8B56AEB88F46BD4B39018AB8432D9737C5CBE73 +77A82B56AF95293C7D0D847C7A508470CD6762AC896FE223E17730F05C9D3747 +E340F37E7BAF694BDAC9ABDB97BC12ED7B01173D3C713E0A8E68E10DE647BB03 +E4E67DE1972165C1796F5EBACF057A5AD7FEA38443D91ADBE54028CBA31F75EA +0DA41FD14F15496382A0D8C9C27BCE1FDD6A5164F70BFA2C5B334A2D2DEF9AEC +F1C39CC0484EE7F97A39D31A46CE50FC7D2CC52420898E2052896488606A5328 +FB195A9561E9D5A41A4C8117C86EDE60F80B6C70796B90EA9D3BD5BEB05E6656 +A8BD35A2A884BF8677D05A1F8489FAEFED5C645AD23A141ABF3E78C69EBBF48D +14884B29D1A4D7F03A66EEA0D0EAF7476E80EE45A894E706B5D681AEE8B31E58 +935CBE30E790B7A3995331BA9B0FA2F03F9A4D326F249BCAAC590345596F8369 +028CCB95F0D1CE8A44391C0E9526214EE28927FC98B3BF6676B1EF48DCE63F3F +48695A3AC668FAD1ED3B50A1FCD29ECE9E01F8BC3012053AF96B0C7D276749B4 +8CF046E7406621979A92FBEB7B5DD5CBB154ED51C4A9A1C13F6223BB54F6F3BA +326F6EAE74DBD8B370A25A7A1DC320E9A17CA230A868B752FA7FB1065F435BE8 +A3EA5775CCDC33A360DDC25B2891F7D2AC399BCF6F789109CCB37DDD02BF9EB7 +EAED7A9CE82793DF6FA7F68F9D45530A14EC91D71A19A9251BD810FBC9934F19 +FE4FE1BED828FF3BFA6E91244AFBD8B430B53106AD18F41DF767E2DA16F57083 +B8F66A0356F80C30B956C43416BA6E5CB805AC10ABBD18B31F8BEF14757877DF +152D286CB6B478EFD4C88A3DC1745A32A56D845A7E61034C7907A7EE957A4C7D +A6525821611CBEF18947E727A49E0F765D648CFF974273D18A03080EEBB6211C +E96439F86431EFD0BCC4CA2D2D8A4FEFC65C768D28FCE6BBFAB055E0DF961A52 +81ACE5A300787BF4A458016DB1CDB671B4867E5F5103551007BA0F53117D733A +0D3E8802208CE1C54965A28912A03CA12D9C34D7DE9599E6DAB5124713CD716D +916701BE3D6318B19A9E2827E94D4FC3F4D7D5794228DC958B3FB82617CF21EF +D4A5129EF9051745A52DD66EC77E50F35A8793858819131F36413715416D372D +DBEE44AA952C566114C8E3A21EC8BB0669805F48BCB27C92E609905D39C7FB82 +A62A627280ACF84937B0F10E132EF579B69992A1942133DA541F50CD3A51FF2F +C56C10C6ABDA32C83F1DBB4127843928A4F6E714E815E387588478BF941F1F74 +E8632BD28851474673265AF4A18905C07A4EE77865CA41D23069615FD2176AB5 +2595D1E86B86DA9D0C416B67497B6B9FCB3E3F709C3A4E552E9EE130BAFF3810 +C30F41795F68105BB700DE11773B6435AFD59D7815C17D2D0C33C824550CEFC3 +1285EE76EB1E72D6D3BFAF60973919F8FBB4E2904079F53927F7F1FEA66FE0AC +5496A13D446B0FBADA61467346AAB2E5A9F61619E09C929FDE2BB660FF152DAD +AD834A43A906585B1B48E90D2AB718011880AD2A3431E5C9B2AAD5B9E401973B +AA944A69F49810FC10FF7B7FFF0BC5A2FE856D757DA569F34FD03953534315FC +BED3841FCAF428FBF5210F66C961BF468F25A82E0D6868D3E4B93F95F9B04BFB +D9B99488FC520678A862EC1AB774A0CE59CEB043230B6DFDB2309D0FECEFD69D +8D49085ACB83B16034AE0835FE67AD57F38D369F4D9604CE276CBCBADA2F8C0F +3230E3525204E3868B0AA1E8B387DD2567E000CCAB04929BB4F9F5DAA93914E2 +A4C4F6C5E91C51725CC94DB972FD7B8B46C868D6D2FA9B63C84904E9C3EC77ED +FF4ED0FB21A310ABE4C54FC6D6D18CE039B4407F06B95CE7C262F789258D0585 +BEB98AD999A28751FAAC37BF6ABE82331A9428F873E91254E820DA499C11F4FE +85F0CC83DB4763D6B4C6B832D3AE8CFF77C0C883A0B41A21DE36A1D32DC13EF7 +D35F3E86C7EF1D8461B171813160E56FDB2A0232D1BAFAE968A4FB67BEEEF61F +7273B238C3E2371A05B71B15D8E0B460156A5FE5DA20D662247CC36385544C4B +A52BF88B7C20C78AA08BB0FA4835FAB7642F195D29A5EDAEEFD711169ACAEE55 +1350C30E459A4EF0D5E7F7C068D1EA4882230D157A51D639750E2550F96D752F +97B0AC14EA6524AD772E10B6E420584990F0D622598832F519FF9CB6F6A20E79 +6E75AF675E3886621421E2B0DE3AB619E6D0C65AC4B7366BDBA74C76C5F6DDA8 +9E8D11F672D02ACF26766D7CB6185BEF931A4ED03E3745DE92BA86660BAC7865 +61F4A64F959A7B4D825E15FD9567A957B9C672ADADB83070795EE44D7022745A +9E8B7D0C03ADE959A33ADAFD9FC69A0EEE08FEBF24674B0B6F16B31BF3BF0278 +68B511314B4C73FE31D640D6726EA6051A079A7F503C6C886C9DFFB6D03D2E6B +AAC0BAB66F9C06FC11A4D7C165CF97CCF9737899D41F602E326BF02394F6E438 +A579EBA81C049CA9B773C10BC5BE33353775FFE01E3529DB4FDC9467564372CE +1D2976040390CD1F1C0DD3DAC8936854A0E9B5074730AF4736C0E4F040759B69 +5AD6A1C46714E61914180D1F80ECBC33689CDFBE788204DEB11FA4E35DD610C2 +B82E28A25991DC4E55331DB54345E3D11EC304B7B25CFB5F1762444C55AD642B +8095CF31A30BD6C429497BC0904B1F06EE90FD9926125E77FD430AE3852CA235 +92428660C10A19470784FE02E536926779B248650A6315FB8B784DBA9D226B06 +09C6900E5797693983CDDCF08754C3159545042ED401B364A45A9FD7BE0AC6DA +ACD9120E8114EDF40F21D968935F1BF9DE05228EC140AFB1889AF353996B79C2 +E6795E23B5D0CED1E0FB1E6A572C6746958619FAF88C368EBBD742570DB4CB4E +DED4D19E89AFDBF6092D5A0A48372685DD9639A32E4F91ACD9CA3A9E34D64E11 +9AF8E6BDF8674D52F1242D8FE11E19820F26BF1F533C34EA6471A4C96D4D5207 +A9AE99536705F6934CB16165657EE6F6E7CAA7720D4AAFDC6C075346672B3E16 +001BC35A331F03524D28301FE77D9C8B5FAB0BB872D568D5B95B2DEA4322ED4D +0DC15BA4F0C1D1AF924873193FB809B689646A4CF1D97A1660F953C82211E4D2 +A58E370AF2693919EFBD3C1E18BEC7A472B20DECEBC0CF1861AFE3978C993CE2 +3D7E93946083689CD61E6C180B3EFA962E2BFC1D073F7FCFE39EC0F963C51C77 +B2A77F81D20BCAF1F0B5DC1AABD9869D4497CFD90953EEE70993ADE80AB6CE15 +864AC0BA7FA4B666C54EDCA0A0F9F67CFBC21A3BFC4E2303F5849C130B9B7E46 +0A8F60048C57FF89DED4A6D5976635ED1AFB0331370E53EBEF3835107D02FEA6 +5E28A746BA8E0A4AD649E0CC03B6AB56398D922B96133DF7024BF83A46A0EA6B +E4B05CC77A461AA0FDCC59E90FBC96D16DA364C2DC55E618090800BB3E8A2D90 +CD72A4C067A1C107EC6B0A648FDFF3D05C508C4DA9826E7082CE58C2B027C014 +6C001421F42F21B18221E7AAAA092EC197AF592EA3D432175856F58FE7EAFD05 +B81FEDFADCCF38AE807B2DCD8E4260E348E3B561E72112DCD7BB0032120966E5 +5F131F2399D9C89AE65CB33A354903D37A9A5E480EBAAEAA485305462228C88A +16F99457F7FCB1538C2BD86DCAF01F6D6404F02FD91C82562EAB72EE21268867 +CE2C0F3A083719E62205D0090F64F694CEE7F0F38D57D01F3732839933DC0F8E +DF5F9CBB1FED7FB149AEF7A53C644E17A672DF4F8BD4A0ACDBCB32859117ED77 +82ED68468C311C51C8851ADBB6A9212DBBC84EC1B88A4AA31CC6D1F764AD69F5 +CEBBE3F7983C3442FD91D7EBAFA16CA047165BD327BFFDC247F822314F346D2D +D3E28BB4C05C485438E70E62DF3E165DF4AB31B0CF7FE84F420304D3FB7D11D7 +DA73EDB8834AC45479C13BFC5B845AF24C2F1A4711AE4BACE4D60276491D1BCA +E3A3667563FEF12FBE7667F1EA621D0C241E49D68B09BD92D5163246425565BC +FAD5051C5CEDAD508F387E192AD94FFC7184F8BD2530FC7DD585501E34AF3846 +BB1295CF417B218758F11D342792D81C8CEC903D970E51BD263AB1BFD6E9B2C2 +76E1B061522A88930712D2C169877295EE5340A4D1C3F69B9874E5CE3E3C82C3 +E7CC446BB33407B2F2B13722054B9E4286C06EB291D0410964FBF53E079D70C8 +1AEBE7D82ED6C7F95A0F83AE408196F9FA71BCA747448B3D94BDE6B25D9B1B17 +4C55496B3D0480CAF91E053B3FCD02C6140317DD0457EB98BC899CAFA6D274C5 +06FD587285251051CD5DEABD6E5B22A3F42189ED36F3A5DF75F8A1BAA892D296 +13A466A0FD134597DBCB91BBC63400CFFE7B77A8D09367F2252C22EE637A686F +C076ABFC10D88395D376ACE6CC23DB7F05CD6C457ACC83FEB49C6B50BDFA075C +ACF9D01E6DFA07227E28C3F651EB02303A658355BA5176FBAF95414C6A704FB3 +C8025111091F5482A01628F05547A9ACB731A291F1CE05EA8D6574272DC2FC4D +48006EE157BCD0AB293CABF3B6201A4D90350EEE2948A444F59C774847A5F3CE +76E328F3A1AFCB732F339DED374E8FE3BF9B964C9A26B3E1C3524EB27FDA0B4B +EC483B16DB62FAAAB326B862529E0B284283AD28E80F362343BCC66DF8EA0E20 +38AFC2F98F623770538A38698293FDEF0B75E3C5D851094CE5928150C7296240 +1FB139409667CDEE7605B4F16339E2C4A9B94E316D7A6B271182A19CE5DDBE61 +458DA5B24620348E77D1EA20B096050013A299D52E51C07EB68C151F6EC394D0 +26D6AEEA446783C64E15E7C7602522500E789A4D38EDC317AB7CF6765DFC3190 +FF1B84DB7A4A0194A4400DF94AEE615411313DDEBD12786D1720430E0DE1278C +9AB02BF0705A2E75738D65B832DCE7751EFFEFC699B97CF4151AACA2D94623C4 +73748CC15AB6D1A07F5D13178979CE175326C5110B335E47A53F45818FC9E4EB +5F7CB8332E12CB441FCEEACD64AC84BFEF1E858C5CDF1F0E895CF1AC75BF2105 +D2B6B86C14E9145BE2F22792CF68CCFBD007C728E816783AFCA822730EF16766 +2626857E1E7C525793A38955C4F40CFB8E42F86AA9A0CBF0296F9C54626FF1BA +E25D62B530221D6421EDF9E5D7BE7A1311BA3AD0F48771252F4FBE4E55605F4A +0A520DBE08CC94B181952D89633840FBD1F79BFFC71090E918076A9053947120 +70635D5EFCDE3A566101104D54B346DBECEE79FA87EBF54104904756ECF68B32 +2F6F26103CEE3B06A882DFFBB0B08BF9BDAE2C8D9AEF88837235BBC2CCF19C9B +E262B6F8748CD3B0224E2237CE0413A4AB2724B6BB3C3391CFD6E8C45AC32ACA +7249A955656967035944D14823D7EBA0D4FD6F3747ED319A6B133AB8762AF94A +B43B1D03FCD9F63766753EC12609B8CDA51E65875B04A0DEE40F768D91715D29 +A06076D2712CD5BB154CB9E3E77F322008C505F46FAFB3ADAA066285A50F77C5 +8A9695E324B6A24B1D96F4D4197EA627089D71EA7371D0D0348B8893E5261EB3 +F41BCD40EE77A02264BAE486CB345CDEE0C00A98ED7F96A3AC6CE8C534F5CEAB +889F7E3563092DFA96C44A28279AE30DCE4031150E2A4F03AAEA5E2D854D8AE1 +0E2DE62B83B05DD9C7F0BD5ED122FDFB6D4E5DDE5BA1C27E8961CF61119B482C +69055C36E2C3A1DF9165FCD5F24CBB5D6143C9E43A0F93EB260CD66CD4BF54AB +7AD064FD0D7B72E71F51464E7CF407BA9D90368ED4E9A5D11E63EC7F7E2563B6 +1678DB1300C88F3EB77DA3AC104B644C799344A7B93B7925991A065087ABCD6B +4C72F2C60B3AB3E9B1B008DFC201E2F48E47C38ABE247B622A75ADAF193E5E9B +301E0F19B8066429FC8F64E1E5D7822CEBBDF08B83A5E732FB45B211090F0A90 +EFDF2FFC7BB6A847EA398CAE9BD0562F73DBBAEEBF83595E5774C5290373F3B1 +161905296921A55C4C8E9C925AA543338254E7D9855E01803A2EA96B4AD8ACF3 +E4682030B7BA428C6C505C9F6A97567E568029A0FDA0652947ADFCB7FB74BFB6 +F72CAB5267EE86F34D878C62DC81BBF22FFE13CB066760353039995E461AB2D2 +040ED87EA2CFC54F2D5BE13CC99FEBA37333228C7302A34A4F508EE6595797F3 +7BD211BF901C4055641869FEA3546B89D36949EE0FA2CE8DCE71842A52F05DAD +F63829F2B3184CF814FAA64C73B65E4ECE9B0517204981AF9957F1B6FB29BEF6 +8D47E887F8EC987889705FE17BDA506B1C9E521BCA46A10BD728BF9E21551C6F +E233316FB7F5CF3CA15F1DD7B827126C89D4EE7A4AA82FE71026107963523F09 +096FBD47DFD66CA1A69A4D7C076D9A2ABD9D5A87B70DF1016E29C3698AFDF479 +451C57823F7B5250315EC85A8E7B1367C2E9F064E2B716340EECF712EEA14886 +22F560B22B39BC1CF25CE9966AAF766BC606CA93C04ABBB3DCCC7E0BB8F4CF22 +2D37CAF0BCE43B93B2EE318BD72BA502D596EF36562A056E1413DE0700C776A2 +0B4791C90FC8ACA2EDA723CBED95908811C2ACFDB5258CA181AF38EA66E305A8 +046EC71857E31894C750CF59C4FFD7DDF405378FFA7C854A0E0E3C7BCA0AD237 +2023844F8E8D69C15608CBE17D84FE9C0C9404913D68B98A6BC8FB01479E0B60 +E2E624A5B4E64213B4BF4734BD3C8B30B0E691B190B30CF2B49978BEA937BFD3 +A18AB4FE7D77EB75837ECA25ADE86438AB48F6E2A6C7DF2CBA1A3006F4A89AC8 +E9596510EC3FB24B33E24F8819A9129429376CDF5E84D61F79084346EFD83BE4 +55348D8E9BCDA1ED8096A3215600A1EAC278B99AC3FE8AC3BA9AD3B861A492CF +B38BEF7502F608907CD5418B768C795E3A31E7B6971E482FDF8265032FB63F2C +4B9385860945B83E244B19B7769160D3E90CA5E81E39001085FB8AB7D7A855B2 +7F58B5AF4D7A04C214015A5112FF363981AF0C9F3A6E98C391630F839C8529D8 +79B2AD12D38181E9A57642AF6915E8EC894A2592A606753C7C6E67538B22B1A8 +18D836B53E4E775A9D745F4F0C2BDC493A1122F1DCEEC4F7E18445546FBB332F +45A62F4A7D2BDA18491577A7EF07D19F1F48420944A2A8DF92D953AB628D2095 +F02358B542AD8CFDA1E2C739EF10ABDAE3C7C17AFB2F0884175BD4BF29164836 +49A5AE6C7D7438D477D15F74939183B61119367149B32B38C4277EB60EEF82E6 +AF4E94FF0D5DCFD77052C2FADBD0554964066239180611E193CAFED231F7CE82 +381A14BB9D908D842151883AEFA0C5C155184D2A6E82FB943792DF1D1B9ACE7D +3695B87CDA9E22839448241DFE11886518AFA164707842599A964E65A2EABB2B +1118F729EAADCFF6CB3DA1BD784DBC6BC6D41E895EFE4BD8355B65AAE7FCF6FA +0B2E115F67B7F29210611955759DC3C52E6C67FF1AF9B69D0DC3B53867FE8DB5 +E3E9F35BF158340E2E888D3A9DF0160F8150EBCB76D053689128B4DCE663EE5A +DC8526F46AF7DC1629A28BD8200EC03F6A11D2573C68580CC18B0DF7E138A6E2 +9C9022DD9093D3198ED133895B6EB49A5475EB0BB06016E646F3244D76218EB8 +F26F00F8F507ABFD902788EDD8755DDAF9973C40D1B7CFF83E696C2B60AE9E33 +DB98E520A33242F3B367287A519255AE92F2512E3BAA70DFA3D4FAA48B6E16D7 +167CECC79D41D27F714EB1029BF021EFCA5D4D9203062585F1C2EBCE61BDBCB8 +A834CE84A1716F3A4FF8C8F596E5B4C607DF81D25995A76734AEC487BBB1D440 +F1F11D2FC345317BC2928AB4F59091B4B3EED478E821E6A84ECE01C760698BF9 +19163E32D29ABF92C5E2805434C317C05F7B1BE3B47E26AF33FB53A720820B30 +771A2DCE04C0E9914B6E7A2902C4C4A91BC788FCC588C96AC517A2FFAB00889A +AA125ADDC939A6FAE98D809F8DB1DB49B6D1297EAACD08E94EADF3AFF59F8E0D +1EF968E765BCA6FCC3D52B7DF57ACBF89E45D13F001325B796E11A5BD51AAA3C +036C0AFB391EFD7984D3BC6EC248122CE2721DF837E44F58F9CCD0C06C045D2C +5098854D31234CA2AE9C41B901CEE60220E0DEC181BD39A3EC3E3F355CADAEE7 +2BD3A09FFDA632139242B16207428E0578080CA7CD604A186154665B31877131 +4916A2C04C66E01C1B71821C44E5161DF2646899F1923FF90BC203D592B9C371 +58C88945B5D0EBABFE0924D01CF22B547CE7DFD556CB285F0BE5D9CC7AF56DDE +5F61D0C66895199CDB61A39C944664CB438422E7FDFD2F3FC632058E5C8EC998 +673E8BA91DE92E64AC3FF9CDAA34DF107836B121B5259807ADE4324D0CE7B7CD +F2D94F1A5A0D2ADF7A6AFF0DDA5E98F72FC29A34B01ADD8682B57CF97610EA47 +5DAACF94FDB9E61CC14CD2B2CC361C9704EAC1F54E3EFBF743A551FAD5B52174 +486A5448637530218091DE0B4513443C8342CD18B669BFBF241C249BBC8080AB +012361313B220C3943D4F82EB3A66173635047730A44797CD20753F196A19919 +D1F75BB016E796214058908ED982F3C0D9A524C789D7F634759FDEA8C035E715 +190133B34E87347FC6E8C8671F50616030E5B199758E370F4E2BD838BDA6979C +3815FF7625F1BD41B9C4B6BF0C7DE3DE69F1C6C1D3F4D387B9317C530A49A3ED +37989944243F8DF2D60241CC6E4E5285289A7EA597D1DF92640A83360738B5A7 +26EB20D1E52850C829DB87E28B4717B8F2CC3C8942F38694A5DC5A5321DB5725 +89F49CA6D1A2AC555878CD43A023114FDE61FE8B8A08A840ECC2FBBF1041BC54 +FF4681D0B755262384A664C98ED1D1A1A2AF0F1AE96971EE2E4A1EF9E7C0B2D4 +A60B7A6108947C8BCCCEC3946984332F8AFE04AC9345FB60FEC9FD3534DF4E98 +585F371ACA9E10941CB122BB65D9AE82D16F0DDF13ED41D3A14448A83F120F7B +AEE9C6729E8D82DE68CA746554169CE6214842C399AF76CC78415B52508CD330 +0A776680685FEC3BA39A5C4AADFDE2EE53CF53C5569C54A59CB346033EA7FEA2 +3A5BCAF2442B4E18C9609220A1A334E71D0C4F7748F8068C3E42F3BA0D906155 +3EA8CBD989C0C7BEBA367E63C8484A2DF3E8EB27E50E60D09B1D71B8521336E2 +04EE168BD3077E6444266E1506F7D8F1A73254E5422A0FA4E5728712C3217829 +071803C4E65A4FDF9DDA27A2C4220EAA6F7520292FC1374DB4252886600780AB +BB1EB3C5F479E96AA17644BE204357F8073127B57B5058CE06C53475CF82B946 +E7632666847BE56D1E37EF9B4CE247B80E2287B80E7C3DB45C4F90D49E0AD5C0 +BF2B51C79F1D929FC84EC2B8EF66EA213E862A2F06759059D72931822D35695C +82A834F08B21DB8F40C9BDE784C97BA483E15DEAC3552146AD67AE417836A024 +2F388EBB7E877AEB04C226031941BC5E00B62DF4C833303E8D09360345DD3DF2 +7C05793D4B8954D01DDC88C7852B722546691B0DE58D03671CA23B1F8015FE7B +9E50DAD5AA41382C4E9CCB98FCEEF7785BF174171C4D386777DE16A4329C831D +FC04CD5AE48E6F13DEB41337FC48AD7C7B208CEC6587585768C24852122B70F5 +DD3A54A92F38A4201C6D75C8DEB955471638A9EF4B81BC38DF39C4E4E6CEB929 +0B06974A9D40CD5622FF02A7D3CA2F25249A40E4F0B684E8FEE2A839FB365DE4 +50FB988F97B992C9E8AC58B74F840221865C6E48B044E0A1A4201490F74D82D7 +5383AB46CE69ACAD4B4B09F5FCF3C66A637DC529695C9442F19A15C927569161 +6BFEFC8CD1B7A7F3F9C67A445F8B6DCD2EE53FA25F68817012105E420A61D35D +3741FBE996F921C24A4EA47CC5D2099A314183F55F4B098F3CC567E9DA4EB74F +9865A8019106AFFE5C8BD34EC67228540A4F49747678FA79DAF3ECF142A4F3EE +07E5B66F004EAF6FA3CBDE4782480D9541CA6E4BFDB69DAB7C72C607F56630ED +2F3B78B7FCAE17BF13D3FDA9A092B0DCA9D75AD9D6EBB9DD649C3B032AF5A1E0 +E18B31810E6CF3D26702B480D1D2F16D8A6BE47354FE17AA318AC16390AB1C4B +10165DE80EA293822BB63DB8B72D78E94FADA203B0CE078A929C5B9BC681D560 +B20A2DD69CFAC03D8F2EB16FAA431AB0E7EDC77DFC40AE2C8ECFC0CFD4A9E236 +15BF356CB6EAA90F6630801CCC05B577EC4A33463182DB9F40AD504669655370 +11CF974D7536EA8D8BDD56C268F2362E544CBC1D31E25F9E5D6F490D33026575 +E45B367739D77DFB4D079BE7C379235C8095D6D4F52C8FF0FD4C6DFF2D6C7C0B +13DBBAB39AF732C38348A4B170978410668CC1A2189A058A3EDAC1B08C09CD6B +ED16950A2DF3893B96CB35F551D7A8103380F1264FEEDE157C641B4783C6581C +790DD7349D6703D0B61AC8196A0B787A9A1F0BD9C906CB00439FAA0A9C9CF7A2 +0F26A9CA013B8A737C921722C76B167269A8443FB1C894F35F7BD37EE31DA899 +75B4EDE61F409D8539472CE9805623105FD5E67E6FAC734A6E83151BBF93BD01 +EE89EB5D4021777C423461554F2C2406D35FA6F94824EB29F88E20BFD6383C6B +2499DF337517DFE6F01B0CF4E35C4E05EADCF5684E34B7A646F3FCCBF3811790 +EE1B34FCA03BD9E6F65916C15C68D8E7B7D2306FBC705B90341415DB1262D49F +A6BB3BFCDA817AD7668A2528A76CA62AA8CDC02C9671D254B8427AA2F0CC354C +C9F2B673814A0637DEC6A052F3F279C23391148B4C9E761C5B811F89E737969C +79E7666282A91CF9D865F25A1EA923C85660404A914C90C9CA6ED4EA1E552BF2 +F03A64AD507EF630E917ACDAAF2CF94A6DFE99BAFB2309BF05F9B6CC991664E0 +C477E1BE53A422CA0C85ED03933D3B210D6716E50022E0BC0DB4E5D5030A9FDC +4DAE2DF78BF602F524F138F682A21CE9E1B929CAFF0F1006F289A94F5F0C9A68 +A2DBED5009FB809985FB0E9DE0A0CD342366A329B0FB96601624415392B0CA13 +F62538B0B96F27B6E24E8DF136800885C9A3CDD5615B8FA19529073873BC725D +DFB03865A17573CCDEE9572D13FD100ACA9EF2AAA0FDE0A60A3A219778146581 +92B520565791410F4E515A7B088C43D514B8B16BAE2A658E0AEC9E9A6E7849B4 +4051FFBD37916E095F56B93D56DF69B39B3AA423CF3021862F9BF963405DC9BF +2A13467ED56E1EB1A8A874BA6FEB5E9B72ABF43BD10C709CC687482CF96806CF +8BEFA8F7E7AD89186534A4795FA08224116ABF435509E9A6773F88589EF40C87 +7EDE77FE457008692EC223B98E0EF858DB4C8DFB275F6E631FBE611CF31D319E +C3E946180CD64A4D519BF3F311892C1A5462838271D03D5CE7C4960D675EC73B +18D41303945FBA3504E55798D86E174BA38DD8B7B1D4F23109857567256AD067 +AE8BBE62696CE29C95D4326E1BF4A5DCF73BC0C79E972518C558654D7CD8BDDF +67A3E799A95B05426A1072ECAA116CA332E1D611CBA90BBF9D15DA7739FAB50F +E31BB619F7513BC6BC72617923EE35A2999EF78AB74EF7B3DCF32A6286EB096A +920DA01F6DCF0693585165EA80543E74646D2DA147F9615D4914EB9690ABDE16 +92FD179A66FE9A0290AEF99733F5995943C88EAF7FB5F8B7E5CFAC2FA77EF9CC +4F678820742A36D2D0AE01F11652063457DBF0A4C535708D4AF777D37E5A33C1 +C3FBEE96010EB3112FADDE319A17ACC1AB36157CC1A5BA41B291CAFE448380FF +B11C7CE02791D702D70819E83C2ACD8939372B7DDD08E98D0F17940D94F825EF +F759BBF2BD70387DC2467AB0B21A536F5F50F2EE5368542AA42BF43008D17D4C +E9543A490AEA3FCB360B09198D649966BA730A06F8A2441F5408D5A7095B1A0B +545FF0CFC72E831EAE74B4E3656F413CCB92A778D154F74E05BC0C1623EC926A +E86BBDFEBFACAA94B9A6127CB16336EE4A412B32FAF19B7C79942A8A399D9C15 +A621EDED310FC33108673F0D6290FC882CE490FBF3FC65B26BF47A9FD3AF6BBD +13539E842F08928531CDCF19DBE2CEF56C1FE7F6F617099F18CED9AD3B3B7C0B +89DDD37A3CC1AEEB69C54C162ECCB17D73FA18405BD7F58B0E78021BEA22CB81 +1357F69CCACA5E090E658D1B6A826E621482991101CE50C62B343132BCA7E586 +ED3DB34DFD1562D7AC57A088375B145F7ECD54BEFEED6791C53B4C0F475C0B69 +F14A2196A701674C8845397E4BE0F13C66A2E28A98DC42EB96569E06F3D923C2 +18ABED5B8FF7B43DC738B9E2258D1C0F5A242350AFEAC5E95BD80C16F094246F +182C53E12CE7B880D1A252999C8EBC6014AEEF1EC179C1F5175A7AD8163ED9A4 +07BE5B2D3EEDEB61826EFE3D65A9441701A76BFB637E5D5053988903DEF41C28 +EAE257229172CE100FE8D5591BCF99F000C5459559B517D3818A9D65A94922E2 +CD5517C8A5927378B580C048FF5D5E60317B469F4EE7889E4461050F2AA1B20D +D8A2F241D25635F195218A37F29112C2DEAAC7D8A3B1ECD4A68FCE0C24CEC87D +CDE22DBE1A0A73614C3DB14066448681DFAEF8D35598C6AAA8F70AF07A7DF0B6 +100113490C2131D5613ADC8ABC12FAA531B3EF0A45D19C72D77ED225F361BC0F +86B70C9B531F4900C6CBB9500E532C5C50BCD2A1295434F1E763AC95E68D7C75 +2444EDA3C23FB50D2867CDA09A758D32E4E30B01EDBD02F917FED439D2F097FE +0BD6B387FF89CA48E624295F91D96D6370FD42AA6A0BE14666D791E088BECB57 +2A391A8E87F2C6E50D188475B74CFC4F5BD1ED8D1EC22791BD31AAB92EAD4DDD +C7E610667BB1ABF783137436279D93A71E565923296866F9704D97AEF3876367 +5A063F8CD68C9223B621797F7070D5BF6F743EF717E754F94D6EBD201AB0164D +C240049723150C45374BBA15E0BD104091781F7CB67852002D31644B12E590DB +82846375410D004AA8129575F45562C33862250858C46F72044D58FFED513301 +F7881208CAB4E4C4459CE16CFDFC75F768CA513523C6C2AAAAE41C0A219B06C6 +7B4AA98F92C074356298A588B571A0A03B566128C0F62ADC9663E0EA2BB9F686 +609BDF8D6EB178B00E121632620CB7331995A63551F8373A22801915C7BFAAAE +652D11CE7CAD9C7AB1CB646C605C6C4F2E42BCC872D94160024D4C0B2DBECB02 +25650FF58D1ACAE991CBB26FFB229D8355814F5CA8620C9E637F4A77AE88553E +E159519E232749E5D037EB2BD3DE28EFC4615515DE0F44BAABE6916F0FA7D61E +2C56F5B0DD6B387A7C160EE009302BD3D1925D6372BBC8D72344100641B9A87A +647386FC7F4A4F16CDCA462B9215D94E8C9068B760AC18660FA125B352FBF456 +C145C0DDFF3E4F6D2C84937AC82BB53D0DF720BB8E0EF59CA0F1DF1AD8A139C0 +92DAD7B59892303822ABFD24EA1A922B09F5B4344290B3647CAF6E7622583798 +3DAA4155916D90B1142F2745304C46BA7E3F98F1319A3F6500C402133D8CEA89 +A10360935E26ECDE1578D362C34DB7037FE312A5EEDC4054DB2CC52A88D2820D +C2ABA013AFD88CE47E09BAE8B40F7CA321DD86BAE6C82B919884C8B855D7F5E6 +72B791936EE754670A53E92AD0C74843D15445AF39B6C7C2B065ED1B3A29B81F +DFCA2F5D4191212ACB7FD331692C0ECEC8DC4F442A753F60024969BDA7E5A010 +3DB640453B353FCF772678C52781FD6DB32BAB10D6BC7DA3233D0DEF0EFB8B5D +7009EB3F58D77C0B02B2341FB3D485EC340E80C842B6E1EC4DF85052FB2AF512 +A48412CDA18DBBBDB5726EC1DC3D5838FABE8ACC5C3D19414DFCEAC70B857638 +5924531C3803BA645F902CA88F74367B09C70A1E8504F8A850100A5EB21ADE63 +3FB038C571150C9EBD3A75A2F670122E92855F6354919189E36374E91C59886B +22899897F868B8720508F9BD5A161797F61EE40942EFB26C155359D4A6B2314F +CCE8C7059E214534FCC40EC602DDD283B2A931B5CA1E873773637BC9863CF916 +1B7B36B008EC1BB562C4FD883A631598831B1559C5D77136AD03E94DCD9C495F +315470097E005FD022E53DCB7581DAB60FC791B4ED9C636E2DE5F5B22482374F +088736F9E02EDAE88C55C5CEAF21EFD64EE282AB84452A1319AA8DA3695B7806 +0ABECD77CDC40FBF7D9FD09E1ACEF73DE682447FA18F45C93C03E7D8A70135EF +2B18D6F397DD2885206DF5A8C52C89BD54B11B4F61376CA6D6342F44A57FBDFF +171548EB957EB47C62C9B78FD5916FFC8B2D9F9D4B744E3D7B784BE985DC57A6 +92352900DF235A531109372BBD46A8B862298EB6967829DC163E55CE85F0D8B4 +D952851ACA00BDCC981DAF1B15E5D53D29F55FFB46E81327ACC6C147B5627FCE +9989428A788A98DC4DBC9DF0904DBFF8DB4C6F0BA3CDE8FE3248F29EF8003878 +132430F063596E34424CECC9C9FF6985D4DB0786EA1CF7D0DB7099A3C4D5E26A +307080C45892678EA66C0A539C32E688222CA098EA3472814A995A5701E5307E +DAEB7C853A4B7B46F9910158BFC4B206F7E7CD0D9B5A1820773CBC23E6E43CD0 +6A4E88EF6F45285E85651FA56DA663DB16D356FEE528772A506397D9D86B3D18 +645D3FBC57199F8FE75913911FD64E03E24C6D0279718F7BBB0C8C502BBBA59F +9B2CC3C21FACD744CED42569A8841D3867CBEBF2ED3486F5C187583E0E6B5D5E +9441B9F0F659E5BE48A17B05F9D3D96F28D95D757BEF3CB83CDAE0E667F3F8B2 +42F4E6D5AA1511D320A2E1B96C3C7CC96A8737A70B974760159CE08941C3E06C +EF4B1F07AB12EAD4BA26C5C3627A231EDAB2197F8B0EB12584C9817D5BB6B39A +B415D59E2112DFC61B10A06EF9ED5252F9C0FF98FA4A2B49193F09F796BFC431 +38B88C7EC80A1E192DF7B6A0E5BA7EEFED908BB108AC20B5816DC41D57DEB1C3 +37E3BFD817772D44F7C1FC4F82F41685FE711220C8175D68F4C73727A6982190 +2894CBDA32FF2B70656B269657AEE710E75D8BB54659D46025405583BD30A344 +EB026D2DED75300342807E34D661FECA07A39F567E0AC9053B3DE8330E6FA84C +10A47732062EAD6DCFE4982DA630008C33823AAB374797946A17678938259C44 +EE9BD6B2DBB700BD2CE90B2407DD6F7B48A62D3A9DAB971477E50CFD4F4BC72F +5405120220EBCDFBF0034338D21BE2FEC949C90466E14DFDE981A70F2F6F26C6 +5F0A35C1ACDF277E7034066DE11C25984CB5511FBA51CA0EF84C1143F8CCB991 +116A2F8BDB68B1EC45CA2D0B3247F93B2905C146FB10A63104AD5F9C4B82C7A9 +5373F8783913A2F925B09245825E167EB08308B1691DF759C1E90FB2611AD646 +0F73248F56E90C86F99093486FD1B5736D4E0A6F880670C37F1AFBBF142C7865 +C846921E34887D57187F0828675AE07826351005BC73158A2BBA59F5E9614BB5 +B9E72334E760BEBF7E49E74F68525F9A017A34A18A1EF40ADC811DCA5D5835F1 +26132E606874DDC48E181F79D791DAF9B2668DDC6A833969FB573201E745DA5C +8176B641258ADC5990C82F9A9C8E6EDDD446843278A83BFD4300F749EA148A28 +1CEB260198F38A5090427A0052FC91364EE8A2DE0317ECC66F676E2F9CAAF3D3 +BC6E4FDDC0F31F9259EDA5AC75B969257E635391539330BF9AE0AF73738452D2 +6388C2975CD9727BF11E0C4E887511B0975F6813E77A08DD27826D609F0A2F12 +3FD49AAE57298D7D814409C4EF9C66F81A02BDF349FA0F4F8D46683A56165B06 +CACC0EA3D648B47D501AD15F83EA655D5261DBD832A6C7131A73F3A25BFF3193 +B9B37D19D2334F29808FE28BDF612DC38172E9F35CB9616CF9F2248B7159465F +FB90BB57BA61B00B4FC957644729F270FF485252643F9F16244BCF1178C7CA2B +CA532F178D44B8A7A47550BF1D1BD89C0A15AF41BA0735C486F61D5CDC421DAD +17ECEEE048CB89F0CC319D0C3809893E441F85E2635CA10A869BFEE0B753FD0B +C9849370A0CF1631DE406FAA5C4A9C97EA07608ED72BBE10D82C17CEB10BC478 +1EA17F6336A773CCF515287E9646695A6A27E84A3ABE2EDCFC49656008B951E7 +B3C0453409A7003D5E33F3CE248C108AA0553D8EA29F52ED17443716EC967F48 +D3C2E15470F048D317210A67916ABE50E11F6199D769EB5C78E447D9164BFCB9 +FA6565C7B3AEFA07018695F7D3D40868AFE8EE320D6BC24D55F972CA66BA98E5 +1E2149F7D205FBFF2E1C5EB06CB71F2F10A61DB1571726D0FC78F584294508A5 +844449982ABF95005A4DDFBE364DB40D81E573C937402ABC251B64F130BFFD0B +5EEC2B739A109B89895F8EF47F6F180A4423ADCA8738735D1287AE5EE35B0CAD +09086479AC06B5D0861D8EAFF2CB0EA7EFBFF7CA03CF6460DF5DC7FCD5795497 +57CC8EFEAF7AC8CF44670B8519825FA30825057A23DF1469CA1C14E4737FE199 +38064FF83880E04C863D4B16292084505129670B11BC5796C4F551770C2807BC +D5054771387B8FA34AB300BCA9447B952BCEEC98C72B7BA65504BF02BDAFE588 +0DCC68FB6AFAADECA915F572740233D78E6D3E652D6F8817B771B1E1B32BD1A3 +6DC2B632C92E6A2BAFD2ECC15F7316FEAB6229434E0FD979685202408F71CB8B +1201512A065271EAC2BBF1B479798CF2E3A05F05F21E123C5644F701E3113EAE +27B93EEA49A478484B91A844F9325CF0742AC676D55C9187EDEB708B4C8D1B1B +37EF1B96CD3B554458B840A8C384B89A91D53E0C8EB72483BBB08CBD9FDA0BA1 +4E124713C547E137E60B37E88AD35B0FB9DCF2A29B8E191A2D8CA785576AF525 +938D5D856049CAFD10E949CAD5F42A390045D90F2CC97C981D1FC272435374DC +3ED1E0E42C04E0984CA1E12960C2EC6BF263F4D74389F1761A6E87857967A6EA +16BB17A46D36F1AD4D8BCCDB8988795D00C76677DAFC702EE863AE02392A840C +03215E0CC08DC8385354022E7DD2923F419501297A3AB017FDA031D6616CEA5E +888ACFBD83145CB8205DB631E632822AEEA28585015695A4B206D98EBD27BAB2 +DADBEB6FC00C72CCA83AC401B367414306D36291AD777747A3C29E52992A8F25 +D3DE12A79EDBF370AD7E9C4612C665C72E57B612FCC81CA23661FDEB7159CD5C +1F159EB60B49085424F078081DC690399A5123240B698B7625AF0D34BFE324B6 +A24B1D95C4BE19428DCE545E7626705A7CAED84460B44256125B829098D97FF8 +FC319CD72C806D7BD7343ACAFD866D00AD8F5EA111E9089EF7902A56B7FFBE67 +F9BBE8853D1734D146AEC85E28D0903A94163C1BA0F0E5220558F85966B0B787 +3EBE0329D0E243970B7FA61DF295E8493C92B30B2F5019D4E4F2C0C775C25AFF +4F502727BAC48067217E5587EA0C6A24918AB20D6A7C7938380D1A342B76E99E +0F12B4C6F5BB424E447A26CDBE25766DB8A1E7E374BAFB4EA2DD58ECBF0942FB +6A54885EDA3D8CA43D8EB86A1DDC6572F468AFA03E20F0E882958AB7EA7E3ACC +8DE675B4C35F6F9052E7850E7205849E8505FBDB8168C26FD29AB6E849CF6001 +DD4FEA81FC83718F4C2F2BFA6E4C0C4FE66768B54A913D4A29499AE406B343BB +450B3D7029E6C578F523974353DE37D522E8FB091EF6106819675179FD6BDBDA +B6A42B339DCC43717C6C12C56EB5C80EE2A7AA2FFC8097EC905DF5EF9656877C +4CEA6360082D500D23BBB0AF4B4EFDF15A33360DEA36DD2591FB9DB7A1501A18 +6A31927BF5BFBA8FFFA22F9EBE0384939063BB305E307DDC3E595E525780CCC2 +D4CFFFD19EA9BA61E2BD6CBABD1CE52C9B93DBED0F486833E7A252D818EA8040 +94213BFF2DB659ADD126AD0455EE85936D6C02E67A07B163DDC10C11B5A42327 +50348D881F4005572D61CC0DC9510C958A153D6434363A52DB4CB9B9E56FA46A +0ABC1939A1FBD632E18C3D250798B27418403610477C6736004B1FBF6BE7561C +950861BB6013CBAEF7ACC21C7096DCB7B99E8F4E17815C5D40BCF2218248AE02 +086353CD1E8B0856AB31A3C2474326F14D0CA9F6A0C52236D9FB89EC842DC8D4 +4857B0DB7F37131137AB222A517CB80C671CFF8A9A5889C8BB2ADDFCBDCADC06 +CC2BC3540F12169D3C46E579E6185B218228603A4B3FA8AD8E840C3761C61217 +8861458EC8BF163C492B748FFD349E00996B78705D9DD932D6CCB6FE7D7B25C5 +A92DEC2C6B950FECB4ADF57C5A95BF7ED12E431787DD29C6D4414FCF3C4E360A +31E19B37E2722A94BCE47087C5E1845929FEB43E73D3EDA981A0FF9C0F757042 +48F6912DD892E2CF8880A9D1B19FF0A197921A2DC12881E913A4C7858A3B3B96 +E9A4DA7FF3598E74D74B04B5F2545DB3B1D84E86E26AA8396D696E667C2970A0 +DD9978187C583D415AE00359BBDDD7109C15547B9A56F978475531BE02542924 +65D23928DEAC21CC7D0C1E1B1BFF850ACF80E629EA46D71FCA2809061C61F65A +B881D56F270E8C776983E3CE0271E3F502818DB1E3EAF30D0C98BEA340673FBB +23CD34CA17648735CD2A532A8B3A530C3E523CD013151B75FF664463DCB0B388 +BF60CD928E28139A13575635F349BF70C798D0EFD52011E75A7B3A2841FC3D72 +65EF0CBC6286367F1F4B3A7EF9F1F4808954E6D973ADF0CB1893D49B47DBB0BA +AD66EA4E84BBC2F1604FDFC7C9FA0E131718053BA1BF946A6859DE3E452E05A0 +0E179B5F1D03659522BF22518338B6C98397F040F0E93F8E6A463D7D504D3690 +142E26C28172E8DB43E5DC2D45655F7D05D999F32B6BC9A9D0C89041C2031C32 +C54C4ECD75FF3A95B871DA7155A73C3B2FFEDB148FD851AD87437BED46C10E99 +0BAED69E6900AA9F66D77F30873A508C6369C4F898788F8204FB5B5EEEC4068B +2C58510223C6B23B668204B2423FE7146B7C5314969349CF72F100FEE07D4B8E +9AF97E9B7B6EC0894C6E81DE8EFBBDD37641EDDE1D241E4C4440CC91F8E3E3BD +E70703769D9AF7227E7A16BE76336B46DB6573D0A195837471D18666342990BA +4465913A45DCAB6420462C5FFB8BF1E546D0C5B009ED19C8B11F5E5D7A41A3DD +4AA97192A047F29E8C8A195634E4778EA5F16472542D9A0B24C8741F547784B0 +3CB68F42169804AD537C0884BEFC4B5C0953A11F050117C86BAD3F5E151FA668 +D83B462FC0BD10664F0962D62E31E163FBD8FEDFA0C300994421E54A9BDD620C +42ADE78FED182C26595F8CD93190C4CAC7F46D7432B635725038A4FF6DCE92C3 +9385912E24C214AE42D5C72EC74EFE2017D4428F4961D416454F41738A6C3D2B +4B59F8F915D7A5E03B6A6A9B982CD07BEEAE7760872646776324BA25AEDC88A0 +38A730B1FA17BE4BBAC909375FAFF664BC811439F269CE71B92CE5D30FA255EF +5F5CD5ED0393DDFBBCA2C4008A6D58A1E470EED8CA803E56CFFFCD581793CE83 +1D49557CB4F47FAE9CEEDCFDE140E70F70D8AAB8B4A851D01F219538D8185042 +46E442E90954118BC348EB5896BB31B185D659503B9214885CC2600719EF8F58 +F006E2EC11EF22C286B7F058E8F4535D7EF5F3B674FF0F5B476E8D75001ED67F +48029504CD633DDEA56FC7750A9F9D707C9D3416430C210089F60B231526F4F5 +3962D40FD4C549EB4E494EC03DB95DEB23A6CBF25DF58F1327470CE13B9001FD +04467E3C1FA4082DECD79B4CFF71E9284168794F2151C1BAFA164AD43CED97BC +A410DC015AD503B270D81AEBA9A963CDA9031FDAE6B51F0C1F3606A00215719D +477402DA2B221AA885F6351EE8C4B17876409ACB320444E69B0DBDE6C90E4D10 +2F72593F2C36ECEEE2F293DDEEA74CE325E806D825F94B4280E94B8F5803A7A2 +3A47DECA7E1175BF08421112A67C59C1187570DA6B60528565F0AE1F9810AE20 +E9A0990380605E0C186092B7F65E9C0F1602609DD44A8BC80376EFA0D406DE98 +DA5E4D2BC78E67543927C6DB57C5C480CAA6D5D81041432F3EF05420341F369E +499C5245507A621789317DC4C294265DB72AF96C7FE3825DBA6AB5C96773F1EB +203AA5092F63C0DC5C8D47C28F86C5E41B280C77A8501F529B1AFAA5B1C64031 +DE2E70D75D8A471E16EB1660D64F8F1000173206D82C807A7BCBE7C318934315 +EED4B9B8403A58E18C1D4D7250FBD8DC638A3D13D1ACA9CB71D805D4809BDED7 +8F8732ED4C08DA5D6F705DC510892EBC39EB623095D6D7CDAE7FD01A9E4F3A63 +64BC83D0DA24AA2333F473ED023CF9189EAD1BFFF702E0B8E5BC6F6484B6C77F +E79842C4F56244E6A5816F0C76A4210F2B9A81E367A7B02CB683C6A19DF10F98 +DEB661CF23424272183272EDFAF0871EC214A6261A93A7C8F9CD1C08CBACD9A8 +048961430AAEBB34A5EF5C0E321CD6C2B0AF1E3D81A8153CCE16C87CC7A24585 +62BBDB75E14CCC4EC692749432A52FF9827F1CA8ED6F47059CEEBBB945B701F8 +7ADE1DAA3C6FB9F3E95954CBDF0883BEC86A6F63C4A794634F503750B169A642 +3D73762550A657BF8A5B6388E41E7C8136062EE343EAF09C07FDB04A9972A91B +6E9B192EF143F9E8D111CACA0540CFB62346A23938314B9EAADB27D5879E9376 +DF4465948BBD6B1E845C90518802D5389900E1B98B68DF86066A90C7EFBAB98B +58335EB75CF3E0572DE2BBA77E7F6AF3E199842DBBB7060ECAD3045E834E1BD8 +64BDED3FBF9306C2912811E237FF9D6CEEE5278F6613E371AAEC15620C4A2A15 +22150F8B1B0C81F9A18D49B2684640E7ED5CFBC31357A236FB1942982EE96B6C +E3C54F03A25C06968A53CB9D7FC3AE8C5B917BF33C2D4181280A0242E823E2FD +DDE615424F9A3FDCCBAF420542AC90A4D9856BD2C6371F75767A6BEA4F861909 +1444B6A5BB066C63E46B32B55F2D26B97D074661CC54BA96497B226A353CE86B +62D435CC24BAC65985A947BC16218E15579F16FC8DB371582A15D3E510558BC7 +EE6169F2D9D239F40C010AD8EC8EA128CE416E21637174D34F651E4DE30A024E +0FBE8B5FEFB5C89772D5230B3AA652D6778299B048C4CB5D68455E18B66DF0AF +851DF300836E15EAE115DBD03DE42716281E531D5B6994DEBB0897B97D21ADE1 +49F76FB3DF0FD481B322E2F3CBDE64B16BB7FFF8DAE55923757F1A65FCF48F36 +E51BE3D300E0D251BBD18AC914B242D71E491F9CB99AE0909D326AE17D9D94F6 +6F8CBEC8421AE9941069126986D9C26DAAA474928B2BB477D14D7CC7A4B3301C +A9B795626F9FD0BFBDC870275229C5E67451D37BF4BF92090A5571158169BB81 +D3F45B9C6D65E3DB921ACBFF42885AEF73285D3BDB6FB4B9B8C8864BE52156B5 +B2F20F8627BBDC08D8AD002440E47A2C96D79240147936CEA7CFD7B09027FAE2 +60AB5109DBF7059DFF4FA0D8B8EB06DCC73A1D1405FC19CE7D23C18CF6B353F4 +FBAF8AEC7E36B738F6B1CCD05A0B9C9A4C13D060273DCF6D39DF922B3797DCAC +876E0635F4D60C3D5A5DB9715D09CA2C6D0D16B62B747BB8BFA0580D0BFC0469 +3D78A9331EE1C9E7D5FEB03C241B47C60E70AF08FCC5A37CD973B4C6DC83C6B7 +0D4BBA368135DB44092579F9FC257EFBC1CF7D915FFACB222D06C52E4E927178 +80EEA6947B47345342D24FC41FC24A90178BD358759247F8102EACAFB14F4BEB +256AC2EA0E6D3446B1F1DB46922790290C38F16317FEB372898EA0854C333A01 +6A43B3DEE51F5A114B90B421C4CF9F874C8AE2CEA867C7C7A95DB46C30C1AA49 +6FA9F53DA9825F54B6653E509A079F2FF1C3615F0F34D04EC75EB02BF0ABF364 +12FB55935F20A858F30F7C86974A3485927694695DD500607183FCB73F1C3428 +C9C24FDDFB844232A43D2C596605C70C9F0F14DE98F222CD610262EF9CB6AD1A +41FE3C37051B2E591A879AA425118BFDC89B41D42E97EF93FD6E50A82B7F82B3 +267FD63506A2208D35FA855BED185FF6ABD8C5B5BC833D5CACF9C71AA6AB3DB4 +992C5BE71BB6DC0596ABBAA03F89A4FB0D77FEB283CE666DABC4AC06741D8B76 +05E80D80C8D95A5E340B8A23733960DC9283ADCBA0C75B0E78773B198C5A37E1 +27B7470CB6E15CE19E890BA07CA1A419F1F5FCC5C1CB6AFD5B530BA03585568E +11063A0050CA5E8F3DCC804E440845869689478CE1D7388C4EBEF6FDFD245810 +AB2C5860CD320AAB722534AEEB9E3483329BC97B693DCF7D3AF4D29E08E83F0F +A487B723EA2ACBA403B03F3D17F8380B2CCD6C269B6D201E465973BD821ED5AB +BC7AAEB05418DEA87619D40F4B1CD70E951CF7AD151A9B8B1A127871BFEB6997 +8A90798D6D075F8C74E1D3375A932A3B57136131826C83F2B4B4159456BF5DE6 +ADBB4EE690FFD3F2D760310841CB6C21509871DF6CC08409617AB94A32FCC617 +632E3E8C98B5A2B3E7B4169E53C3FE3966CDDB526EA5A18DC4894660EC1C4FBA +25BDA925174892535C368720C92C0EDEB4A245065266674C033D90D52009F5DC +742F7289F36CE321838680EB9F8E667234E802E6EBF61B60E526E154F2BF3A43 +4925FD043EB471476117D86127AF7894C44DA04EDF2BACA67120DA53B1A116B2 +B9BA47A8193D791E951735E33498D8C705E67E2986520D880110D35C0566FD8C +EF860427BF833331A7DF3F7EABEE61E25B667BB6A4584AECF704B45F24587AEB +B6DB1D7B6972FB4B4328B2160A91199CEA30020FD62EF0337A4D4F10AF923EC2 +247660A5AEC4D22E976972C71EBE9FD9CC9988D2E272D8FC20E15C68E9CF2621 +4778CD8C3CD42235F7FB33D3DA71F5D2C5CFA17421AB95587919AC1BA75C85E5 +E459C9AA3DA52A0A8714594BE4F2AC32599DD6C3FA3340DBCCD87B8E7D567595 +14E3D254F660EF2C5EAB9373F33395BD7327777E3DCD4A11B7BFE54CE272439E +E2BCC6F8EF22672F81F20318CA95FBD8ADF3E18ED04A4E73C9B32EA493317B99 +E7680A397A72692D0AB3877CEEB916F8D7D7E7B40D97E449F76BF4B1FDDD08E5 +DE37609896DEBDE25CEE302A509968144061ECBB277142D3512485D11003E3DA +D57C8992A310C2968CDBCB65F3D975EC5E3685F0FB2D24B8E03774CAFA785BCA +F6AB8F5B958FB630B7DB2EFE66EC1C446E5EBF86C0F02EB9A96E582471E48BB8 +68AAB996C02DB531A45FD3AF2696E0A459629041E80D4B25CC6C9F60B5218C9D +2BD697F050E194E664AC1F229082656351C8CBB04F8DE1584411800C19261918 +FE7BA5FB2E4C02AB650D73B4A62E41C15D4A92EE8221C51A7C6998CE99BC505C +DA3F3F384215CE8EBD281393E8EFDB9EF91F03EC00DFFA1B2229D70143981563 +4B52A88FC1378607096431F6B8E1DF869CE2FBF2548B6C1A9D5A4E40821E3FAC +9B15907958C13AB21017A3432D57A0190FCBD86287B5E2AF6DAE27E5F34D9EA3 +1B8DC48F1574D9484951F76BF3411788428D05874F0AF0048192CC05CA43EF70 +E0E1358BF692F8B420358C131E06E33394317AD867CD47F5B91A075F5B72C49B +DF756D282F3702CE9F03BF86CFE4F51FA00D186145C002F25D4F897ECE7986A0 +5308DBB80B40B71FF4B776BB4B3F82782A76EEEBBBFC3278DA716868DCBC097C +D3D3A37B935809D7FEC58B537799E1527E7F0094B11490F9999D23D73C129A0A +7048D4CBF9226064A31B3ADA9C19254A20DD1BFACABAF15B3DDB06C4D7E65591 +3624A68A5559C9BA94E47BC2C08AB8C6FA3E0A2494EC8B40F90E0CBF14E5076A +CB91AABADA49BBA79CE47E70955200256475BE67352A65C75292AA82FC3998D9 +DB4D7E5366138B7C516819F0EDDF92351FE34CF73011FD339B0F8380B52D7C9F +B7EEFBEC433B3CC2EAF0BA105559172088AC7BEBED21F2243E7FA81C59554911 +08E9304C1C252908CA315F95A1A896C0C1F782724D3716D3236DDCB129AC356E +06E4043FC93CA6BE977339C6527B4EA54EB74E89CC4E8D42F3AA2F7AA5BD9D3F +B7FEBDC1F174F5F594BC6AF14C89ACF1760ED6F173759AFA80476759CA2E7E80 +6BD05284C63764047A0AB8A545C67868236411D96751FDFFDD4990324951E071 +7A8E17659FCAAE93DBB7E387569959C4A4AE5F069207A13E1D1C7F40802A2D0B +8B3DA376E109A1AA9A428F23B0F9B99650FDEF28AA801C1F9B7291D47880444E +7EE09C0920ECD434CFF5B851A343BB70E2CFF06854E78A1F92CE831BCD253713 +4A92308D405B22D204FB7139CDBD1B14946F2CCAB6242DE87C5C7565EB1C9D99 +85CCA6865CFCD57DAA7291591A202492CD863A98E17F9AC2CD9867EB827E70D6 +B8B81A6996ACE08112BF38BB07BB78C6C879FCF709F8D94729D06D3BAD9CBCEC +E85E1A08576B1B4192FF26B6F923D08EAAA58EB670D84361F9688229A9F103CB +1D43978B1B067FC31CA0AEA33B5B244D7069C29B6BEF12907A78ED5128D678E1 +67C39DEE6E9BC38E134FC55DD7692F5219ED04924CE8163CC566BF6D6B331456 +4047FA2F3B2C10D95F1BA5E7E527C539144B135D3DA214B88DDD2B024E6F8F7C +D943E64B6097E559B860E235E2CD13395DD7177D7F93070B8C8EBADCB127162C +CFEC2895632A15CF1E55A525D342F96B023648E8C5479C6AA0A9BF9729DF2E70 +DC54A2A26B1DFE7BC7669FE938FFEB7582386FDB2104E6A19042FE6DDA8F9850 +D5AAD74050D5318F0F8D4D750A4492B50C2AA395795CD635C8A914B707B14E35 +844DDE1DF2912ED6B078D2685AFFB987D8C4D86A9DCEADDEAE4DA772B947299F +E5A438058A936C0AF23106FAA82C9D8BB8D414EC5371A2AE978F99513B7DD837 +A6BDFF5551C9467EA26AA91C3900055EE65185DACE0D675A8BD6C9D4BE4B006A +FE0F89713E038B7372A86D4A40532D6AD87D2FE7B62B3D2EC605DD00377A55C4 +E8392D8D3ACCC84664AC3E30C18D8C486E8C502196F4A36226C1538C4AFE302B +846F2A87AF880514CE1CEFC5973FEB9E9A48C4E356EC79D3AC1B714E23B7562F +AE7199C0FA5345D37ECB4F371BA123B67CA068CF67BBDA93268F4E08A5427FD9 +0ECF6B33837F8A4F42B37530FA5AFFF10D8D558C9B55A930CAE49172A6D36079 +3F952690DC1D987F2D63015B3DD6E2642B97D7175E345E299FE57C3AF1E83E02 +B34BD8A4244D95F7CB1AE5D501F358051477C15E534FCFE4C637E316E5701EDA +1009743C789B2FD633798171F4E88DBDC447ABFC9C32701527F34BEE07FFDC36 +003856BFA9325A4F7D1611CC5B36A4D7604484471B74EA3D8D5A28E9DE243332 +D3C6146772D773971E5BB3CA34D8EBD37C8F435B0BB57AC9352DFB3D09BC2C92 +E9081DBA9D8BCBEBE3C2C42066DA13188A5DA5939BFA435FE5D2CD8466EB0EAC +4F735302C75CBF6ECC96969E3AB91593FA24BA117BD0BED4E3F9A51384A5FBB0 +BDCC7A14B31D8833C1B796B8667FAE8348A7589218988BD4C2094B1456099BCE +0E925A5673C13BEF4F1D91A72B00B75524E9F2B6EEE39EDCD8436A239FD6194E +02AF04CE213AF8A4DE0BEBE6103A1CA891C90F1F79E34E8D7217B59F1F8A146D +94017DD36B2610883692D55453BD9300545764CA404E3699548992C65226F772 +19066C8DC53B6CD2E378C0773B10F16FDEE74FFD370EEC6963762A9EE64FCAD0 +D793878A07386CDDC0B00A6E3500D50536E7CEF106105AEB4F7FD391C7825C96 +3D1492F6B4431AA74736462D14F63CBCDA4CA2808E3C55BDFBE668F6B1AE5F01 +4A4B8A8EA303C345CA242F0D9CC02F1BEDE134C6B4FFC0231CB3F16D0F5ED86B +56A2D04CF64925215CC4DF3B51F59F69E99DA91BCE06D02872A60E8756EC89EC +15FDA8D54067FEAC2E07483F66B00E8FBD5BAD31BB3DA45A549B205B2525BB6C +74B4762CC4AD3BAF05C4A1A23B50BB22EB8D88603B7CA3052F83FBFF2D7E49D0 +438F3810F8076865973D1A4D2B06F3FC38498935E6CF0DF4DEEF6335403E4748 +611D63BFA4273A823E027AE5868907BA7124FBDF11C4E30446DBC2346B4595BF +2CE8784006D1AD74432F5A3A1E5A7E6E69498995114830D4C7C9057B0AA4476C +A9F5F44B45861ED13CF485B3CAE0E0DA24D805B5FD78D96064EEECAD82FD881D +6046574FB32545B5B9D65C46C7605925054241013115C1B0D112DABDF00B45EB +11CB82077372FED9B125B9091129BEB6F8F71F093CDCC5F3ECE4A9D33B55803B +33758CB9F82DF01DE13A7E8C800BEDEC6840E37AF32B40A412F6DFE46E9B0469 +F96589AD547D14F75F9B694071F1F6F7A459EB8DB009B26B9DC8744E250A99BA +EA1421504C17BC772862BCE3F07EE747D57487DC8A611FEB526095B872A10902 +6839B37E552D2C798F761EC0F1698AE49FD98B8CCE873259B911D61724EA6C5F +5AFB0E44655BF454D1D35936638684A5FA041CC0E1884E362ACBB04BBE704282 +86E87C674245143F5E35B598F431EA3DCCA443318EFB85242AEFABD64B8F1A21 +CA7B1E372748A25ECCA6DED3A7E81737AEC77561723ED57A7006F96D17B8385D +91BBEA3A651B5644FEF22A577543169056230A6FD1651EFC5140F2FDFDD1B417 +4B458D312D9B58176403D160628EAA9E99CB5CB7658DBB9A2217CFF17A3F5761 +39C720A5924739EABEB75FA12277C5389166FE5891B484C4F3317B2513FF0EEB +18DE6D8CCF1306FD85C5C19D47C1C36BE1BC73957F8291A641E39877F3ECA3F8 +25A539CD09D32741C725A7F7520B288670AE6DB55BD2879005599744CB54B1BF +8759C7EFFDAF992F557C13CC77A95FB0778628713ACA9A1A4F0F9B5304A2E828 +43F6DE633DC423B4AE3AFACE6D08A2CB7BA7CF2A0AE3D52100A3090637B446B5 +3D69CD48477185434B35884FF9A965BC434A6AED30C26537E14D7F5E27438F5C +CE5A8F4B01B0375092137154A9937719C3D6874C9D1136DC203C1F5811BE4C8C +9E10437D27586D4FD8B4A8146B0C96A4F13FF403188A9EFA26D0974C731CBD7C +143B1AF2EDBD2A87304C5FA205D285D324BD21C1B8CACB4F5AABDCF81186B08C +19A8FCE8F94CED88BFEACF2A6E237BACEDECE38B60D581CCB5B5B5D86DB88486 +0123DB51D12D11E49379765CC5994D16666C886D18A8D44DD3EF0235E14156EB +EB767237EC9A93606E034375048396DAACA3D20F55666D0C1357222572E72404 +163C6F5F398A73ED1395AADF530282D61879A6DEA51473A286EA7F6243CADAE4 +BA9342FBF4A5248C1915590189A4616A3C774304B6E88FDF20930552BCC493F5 +0FA5DF80C3C72608D532F4F5933A225DE0F261A1D33D866417E49DD3C5CAA669 +853AFB20D792FC6BA87A46049621030AC1B7176156B1D2F49A8DB24861C14445 +4E528E2653D4E4F41681655CAF55E57A8C1D27B60ACE5AFCFC0EC8839CD99387 +880E8CBAFA86B397E8E4B6B286A8BB53EB55CDEB3F8A238B15A3C1E5BD457450 +E3DA8794F224C8EEE4A09CA8567A4E71FEADD076E0CE221A4834B817A5F5517B +5FAEFA742EB1CA422822BB178B19225EC5B90387929145F7690A2ABF9043E595 +E67E23C9482385C17038DC83B9AD1EA4B0D5E0E0A9BAF8355EA256808B55366E +FA65F8089A406983191238BDCA8F61C732D99E204CEFCB3F344BF39E240B8457 +5A6204C0257753542985E7AABE35B01B991AE9B4B10E87B3FC44BC3A14479902 +CFA8572E0D255269B7ED30FCFA1023B8A614586C5A2722EBAEB9DB53E87BC93B +BDC9CABB3EA3BD4938893D2C8F2A198042744213F419C5571540E96741435FBF +6AA57E260D84DCBE3A214954028AC1ED4DB2C6DE2DBF14A749647E1641A7863D +B91A9801261731B65BDA550A199941158AD9827527B9D37464B8614438AF6008 +2B285CD83AF213BC6AE6198208BE43540B76165A5D5617C01CA772BBC98F9C30 +52E67F6E25F7192D36A130AC18B71E38D20A724E28C109FEBA4A3F1D677C8B67 +42F22120C99FA00FC0122F18ABCC0D24CC32B09CA42D428508AC63E421F9C0C0 +87D277AD58DADEFDC187ABC7D79F8504DC1113D70D7CEA1B4783AFDA128EA7CD +C7860C3ABEA3BB53D7AD6EA3C116756E282C509058D599FC34B98F7022CEE941 +7108B44C0A6AFD98A6E79109F8685FDA6C2AFAE11BE2478FCD4E14BE04A19DE4 +822906ED944EDB5B532DBEA395A09C7156E45505D43215863F63B635C5A30F6F +C7E316DA9650D9B5EB90F6A45E36F2D2B2CC89E18A246FA7D391A7728D51B18A +D4C92D0E97BC88A78D5F3F5107938BAEAFADBE744EA9B9921177C86435A6475D +5CB3F71FFAE0132E0F288BD509993DBF5C35A5C3B87EAEE7D3ED71B73091562E +45B022CC7FF481142E18A8D98EFE703B4AC8904D275B08E51FA0DBA6C6FF4E11 +0D0334639A04311F6AC5ED7E2FD7E81D573B14DC0A7F5A6720D2F2F235554B8E +7697BA92F17ACDD426E107A266D8DE4F774EE90C8FFE38193882015FB1FB1F77 +DF9779C16BEBDCC6696915D5E977BB40BE17CEFDBF4BB2340B35610F2BD333A7 +E0BBB08338C5BF12BB103756EA1BC94566FBC0F1549DE72DB4404D703DE8D566 +693DC9A8BD6D0679D54FE8FB5AC0934D2336600A1B528E0BED9F18B93F6CD0A1 +9363ED941A02704BE7C8EDB90C7CEEAF5FE0DE83DE1AD9398E42411BDBA8C9FF +266FE82D375FF6B6B6B42E3C72F9D310A3CE90D112F7F0BABAA8FCD3DCBA9870 +91AA07E001EDB3C1B8452EAC75169E0A23C108FF9020C4CA9CF2A0E2A20E53E8 +42146154259263EE4BE01DFD078472363B0481B730FFF03E6B2322009818DF2F +5B7BC17D57A70A9D02A1ECFB9CFAC92B4C43DA454E97EE9AB42FB800F397C403 +785B59D0961536165B7D5CE598913155A75310B331E633AF46A818FA0431F7B5 +E408BBAB437A7B9B47BBC875F8B7B14B7B46A421CAA505B3C6FCE2D6B98FEEFA +BFC8DB0B5182FFE040461498573AFE9ACC85EC4AEDA3FA37086CFD35155115E4 +0F5EC7170E19913DC7EE88132663A1B1C04521A0216C73BBE09605D3D76CDEA0 +53C53126DF96298813CBF9FC2074167A41E9FAF05868D80CB78C1C114473667F +52E8DA719E7427A6F688C5736E59FACD7B86856AF7AEAD82AEB9A3F3B76220E0 +1DB2ED0049230607E78DCA5CE38DA174A9CE4FEFA0EC187DE2020D472889E553 +C988AC4A918C3CEF06EF3BB4EF02C2725D1A9EBA406967F8A4969694E929C1F8 +7D85E82A434C5C5E1C5D9F03AAB7FDD6DA21D3E95B0F6709BA6CCA5F37D6A7EC +58CE5BD8C82FC1A5A1F0B90A6E49F14B04D8BDF6243CEE499B4303B9FC35E853 +1FA4804F9514F966FC5263567396E28A9F605235C797ABAEADA1C71646A2FF24 +2753C6D3A5348441F196294860D44C47DAF1E50B004CF0677CEDBB7FB842B7A4 +90E4E31E85314E9031A665CC3EC0B3F0368567E154A4A6CC206CD8AE3CD45061 +AD67FA9594C4B3FD7BB01C6409D9C5E232323C60566E0C254DFEF45282E75676 +5BA6FBFAE1FEB9477BA7931C2C47F3EC2FA506E7DF6E1D4D7C60530F33F4FEF8 +DBDB65507F002E7DA817695508896578D84E2124748EFACDD527F4190E7C8931 +D7D30D8A7FAB5FFB4F55B8DEDFE2CB84230DDE12C54106FA697E84B320E0D508 +ABD664C7FE500549229636138BF213EB55CB325210895024F8F748E9B8A85AD2 +D5B1E888A503C4BCB2C5BEAFD980C202A0C580848AD9B7088A53AAF4AFE7EA35 +D1F3E05C7D1348ED6EDEF9D477987420E79590D1EB76F33043A6D18644FD3F7E +E65597D5C699447573F37B082DF8D4527780A5B77A7A1C337759614B6B926183 +83B7585A16886CEB3A8EE1622BEAFF917B2397FD7FA803AFAF8F0DC99A0E202D +795B4FE27345F3D275D29AE0A13C258C2EBEE48E5332C0064B1E08F82E2D7094 +705BE9F0BA6CE2ED4E7C34FD707F4DC9B586718D2FFA05108ED8F7623B9A11FA +01D3A755250131A5BC85DE837F8F6E4C56721747A00830395E2274B7116C3845 +EEA1DDF51FF498DF2F143DDDF413870FF42CC4F667802695233C8BCBFFB5BB9F +C416A5AD416CA61832DB67A517345F041A85AD1455D7B8580A04CED89CBC40B9 +6BFD0598668F99616579A960061DDBC5E4EE436730C932D645839848A1A0F5B0 +B8DB725B2D83F436E23B81B04B3154F98DC99032AB08C897DA86C933ED50BCE1 +4A728A52FE09F910F7E47BC3F2DAF8C22DC78DF9EC66C2664782FA94B3B9B56E +49481B999BC60526881A7AEE7DA30EAD63A32F65D3FEED5D8D6CF94BCB618A83 +82EBD5CB11DD9DF1527112E4AB18BA84D3006F0A0E2C2696C6730BE9C8056FA5 +22D5215932558B28D2CA5CCF2EF5075E928DB301202FFAFB2578BB25DFA6B1C3 +20077C418C1840245F73F8E9EA4C473E182A46A33C3CAFDBC0BDB2B67442BD6C +77F2EDE389AA66AEA8E1047FD90830FFC5A53C05A9A5F02361953A9A6365F866 +68D2AFB36867724E5F1E4E15DB55CB82332AD2B50D1F4FF598743A5BD27770D2 +E80178E01635596CC17D1625C55E7BE5C9B23FD330B1CD1AFC3B250A359F47F7 +25E6A837C96953EEDC5A4F3249F50435432A4268710DD9375AF252C2B1A90E67 +92545928DDD1FBC28971A075EF7F17AB44C51D4F5628AFC8F53B1EA0E92BB299 +E50CC983132C0AB98BE00FD6E9E432876859B25B9835185DDF9F88BD9D1045B3 +3498F720E9A146FEE51225A5C72758350B48938E63D92D16EA5E700C48EA5C75 +B493C810D5490EA12FEBB381ABBB5AFC1DBBBE50AEDCF797DDA608D4A4412F20 +4C697DECFA4990F5AF13CB7223442714F907D5C3E41A01CAD4744B346327D7CB +2BC0B1CEBD3E711B8E63A7A28A21905488B6AE388BDEDBA2C4D81DB3E8AB4BEC +105FB9C0A25BC6FF47973AAC6AA236B16D6EFE49EF27BFABBB061535970534E0 +04C6851F5129A7453CB74A1E4285B560ADA3D87305E0EA0BC89F0A6EEB2AC5F9 +14520E6F791AB083DE23866A4A84342D751D8494873F1064DD3CE7B7FEAABCAA +EA808E944DC0311ACFB1DF0DE76EA38DE7E33AC71EB7CC7135D94FCE33FCCCEF +AB068A62E2B9D20DFD65B57E7F436DBACB5E308A8E4502C37BA0E4DF7AB021B5 +33C6C93C8AB613AF3D96D7719E56809453BD1E0900E4AA9F01CABB634D972346 +081AF11A1E665F59E4BD86491205F43A6B21EFF8056478293CE34AE045DD7A57 +6C5C33AC194764C0DF930EDBCB162E093452D15A72934141F683498684C951D0 +733DB2FAAA862A3D7A4CB337366F8793A9B865D70EC280CD084E71484805D5C9 +7823ABCAF00585281C5F0934329F3265E38045E64752B28CFBB668C8077C39E7 +53704F2EBF5A95A8F6879E2135374CCF7A50EBB6DE63372975EC7A83770BDB60 +EE4F9DA3CA3DF1E31E5B489AA62E29B92E90C3D95E2C5D9F285CF3800265D8B6 +ED1822CD6F328059DF29C154ADEE3FB10D56D8600055A823E10D9EBFA3778A5C +BBCA59FE3F40EA37F67515E5F947025F64785F172213045E882BDD672F434B3B +2B4BB66EBF9E85934F3F3794B9B320D1ED0AB3C3B68477A595DAC9536B2E4C47 +E6B7057A96359B57E02F7282F35E9BB1A8F7DB62C9809BB21898B6402903487C +2029C7300384B376346424D99E2CBA82126666335FA8DD0B5225823A733457EC +DBEBC89FA3FD249BCCF746F8434B8E60EDE335D0F515A063260D6C6F0B6F5691 +96CF588D856421AD4561C864E0ACF9FCCD4CFDB4EBC60656D66DA3C1DA212A55 +6B4617DEDA813739C6D3D07669EC10F669711A17B460C00AD47359276CB293D4 +79B41F1CA8CD1129A6313A2253A29DA8C2CF46997F71AF365954F5F612141198 +8DB049ED9F3263D3AACA68FACCED6F24BE3E5A9E602F775A79EF90AD4FB00789 +D60896451A39A34648C7CFF8AF04BA351EFD772CD253BD902AE55EADB42E536A +C1E711854932A03A36D7C3863CAEC28E4FDC836265504FF8406675A625644168 +3FC2038FD2F050F8C23233E0481832BEA328A7FC5C45446EA919DA3ED28F8CD2 +D8D93AF013B006C46E1508AAF9D159C348E04AA3E78119E361A34D67958DD040 +DE1781D010C6F15D890C0EA00496E8ACA9E3440860FFF5AC4FD0507983749142 +F92E2DC5B8082A5DFBC0CE442946ACD947E8127AAB82E5A60176735ABADE226E +8A11D6D40F267030B3415603F18A59BF6F546F5C72DCB84B9810DBA500ACB230 +2105356AF679B3AF478E0B0FCF991FE2F2D046280CEB35647F7C63A7D6ADD948 +D22E8714B263952E07716678B4A94B5A5764C69A6F268CD58285A82AA61BDD7F +3CCD2DF266C35605FF93A95A46C44E93514094592EF43425FE5E1F49206F0551 +DD35636F54BCE90746586FFEF34774E43D2DB09BD6A06733DB1D8648487BCCD3 +F1DF35D24638B081A4F04A41DB88609F63CC2B720F96171360D74DE840EACFDD +36E8D3172BDFD986A3F7EE97DF58B1BE6867C306C5DFBC9F625FF2F9F743A884 +16889BC87FC49247FFA31F3234815B6BBC0599A9463E3AEA983346F55DDF8F8C +A19517241D59B502D099BA9A1A254620F087DD37A20AE13AD23123873798DF22 +F94E28ECD0B0BAA8DFD8896ADED992182F78D35FBB5CA8F95A69984FDB9480E1 +3D524CEA820DADCAF0184A565A18AD4B756A287880ED3125581E4F094C6D4AE5 +3B7C7820C12458DA98A99A97DD7F9587E9352F8AF642133C2F9E2A646B97920D +C9033A1E95F5F8A1EDADC9B6E7ABFD29F9CB8DB9365FC60B50BD8C0506A62EBC +EB8A8050C1ED1A9E0A7F975DEB2BB91EE0340BDF44538E03C102627691BEF28C +4243BB73111382D1F4F2C9D328EDF7674C7CA2BFF1570E52C3034B13E805E75A +DC945433E1222B4A711B6508C26A4C3D0EAE6B81A664CC9024907319AA5E3423 +F9BC4A45A2E2A1330D2D6E6D087ABB22BD7F1006C1E8763BE1338E1C993432E1 +654098913C062B102A53F26F4A730E0756BB4A47FE961EED2A60C6638C1EE93F +75FB104D556413B2314375DB036F4225CF86CDCA28662730E5022B980EBCD6E4 +ED29E615CDE69EE00F5DF937096A53CC303CD9A283950CBCE8BA1DC7592035AD +FB215A6E4D2D343FADBA32EF8B9CF34402B89CDC729DC57F526FE3CD4AD46D1F +295BE9B0D53FF0CB06EFF1919E9BA9019446CB33ABE3DF3ACB7EE9F5E02F9795 +BEF2E808CCC7FF21C9EA41C93E9672C035E37B75AEDEFC6384ADFA52A0762E41 +4557321D665719B7F4E43513C997DD56D526C10641CA654C19C2D35AC8CFC0FD +6946C733A51BE65AE583F186BFAA4C8C112F94A24D33B435C8820F99E1D10F4F +BFDB89537ED95354FA009A4ED9F4E3CFBC93D8FCB674F0E1C2C4716A203389E5 +A38E42C10A4C41EF6E63BC0B7D584A97FA508D4677F037CB1005C90816B90E96 +3B8AD64FC8D63E9DB21B4A8DA53C75F4BAC0137BFE9FD710D1B8E5EE3EF21E46 +4C6AF9F5E4676810CC19F9470FEAAB3D30F409AF9BE1BA0D03229F6F5BE5226B +9471585C007D680F356F1F564D723049644039D1D3CB6124ACBE7C6BEFC36597 +6181E15716F691FCE490CB0F05F4E550AD35CC4D345B2BF4E85982D523BD919C +73A974B806A1C8F78507798B5296D48F8A4B5BBB4D7B736C6ADBFD00D2590D3D +924406CD1BB3C89636C55B1C90B69F51861A654D6683A0966FC413C1CED7CAAD +243262B42908A3A16031EABCBCE4FFD02DFEBA01A0831BD1C8171D93635A1F4A +BAB522D93E4E00BB91F7C18B38EE47C5739C6D215E330BA68DDF5A16BB025E6D +EA4094D60332A289053C0380D456924C548588B9A6F0330D351B95E511E00C1E +8D82BA7509A653A4EAFB2002048632D63B9883AF38567E3AC185A82B7DAF3237 +42DA7EE5A95115E5CE652D507D66073850363DF068282134BBB3928551DB1A18 +8FE10A825C388A73C1F3DB270504626154C4D6A61A750578A107F0BA4780246C +6BE6C4B69611B7F01EDB605B19ECBB7A229300893504F5C32E0A3BD998194390 +5FA3CB3FFAEBAAA2175B85DB4B8EB762BDA274FB322FB39CCC73689232CC0A83 +8E1EFA281735FA00FAA4E955348A595240821D120D0C9ACB6CA8CD9ECA4980C5 +4B547873A58BC840A28592C3E66000CB4D7A28CAB1978083EE2847F2B681EEB5 +2D2D892D32904294C8E139B0FA4581782A244742226CA8911F83C1D7C98A2A92 +6025CBF85E82824CECDD6A9E18445BB815FE21E80DB10E2120D14DE94B453274 +E5F65F6BBDB3146690B0B7FE4BDC1C4CC55754304AB6B61420164A88A76E8541 +4722CFFE8AA2664311FB7565B3F4FD6493CA2A30DDEDF03F5749515DF9214E7E +0B219296F094F92637A427C30F9FB712C3E8F11533CF5C1F077E808AF37E3E39 +94D4B0417212312BEBF1F4F03F95A1799E3AA24352B93B2BA891DD6183DD124B +B9833C82F4BA2B41403233DA8ECCD88842625A8DBF00B5E3E83989273A3F7F01 +DC31FADA68CD56C8B95479B21EBC2A295D76B68437B80DFCE037B3BF87CD2170 +8BAFC158730D3B2F695DD6C701C65011720B3376581D6BC79166EAECFEA6F9E0 +40E62651FC8C72F47B47CB2E36A4E7667B95E82C88E20921A52C76EBBCE06CFB +29AB75D051007EF5BA5EAA35FACBF549A85B3B6F37E3D206F7C8D39C2085E3FA +74D3211EF5E61592ADDA9092C0483B9ADEAD2C64B6778AAA14FB6CC8A4FC6EE1 +82999FE543B0F2DEDD7E442E0BCAD4212F38852D6F2183EF8C3DAC77666AF856 +C410454D9F1CDD07DBBEB1547E6718FB9B79D00A9E3F744071CC75C3F48F8BBC +3F09406F816A86BA4CB0D169E473AA3A62D68785283B8C5862E631A9BA78200E +8718AF68C6215B68675C94B43EA901592FB2B8BBD53BFD835356FF45A200AD55 +3075927ECD06924B6DC3F7FD0C4FA9AE61AE9B1C332E2B996612E8D9F49257B7 +10D8C404213210CC338206109F6A0B5C7A1B9AD18E0979A790498C5BB0BBFE1A +3F3249489FAC00A369470B697344E989099D9377DAF483C93EB7E7420DA436BD +0ABA11777ADBB2716927806D95526AA226E1293E84EF76807953C52B515DB505 +7942B890DFB216807468A84788EC815677FBD55C02CACCDB2654585E42DA9A47 +16C0D5DC9D321C43C5E17EAD6E80DC8F3D11D50976FB342E1D16D2BF5C8CD121 +1DFC079858141F3631526ACF733A23E71C187A6E7933715841AADC7CAF7060A9 +CBAC2B04E33B047684487D4BA94B16A4431374A8867504A4EA338E192532476C +D8EAD70E0CC6BD674A8AC75DC18C4E4C2E785FA52F89EFA5F0EFC6F624F30595 +1436CAF9F1682D2FCECD7AD11429EED4F64D82B51F8E8451802D4885418FC253 +41EC5ED0821E7BCAA89BD70A62D281E90938332744896875AA79038971E778D1 +2E350AD149AF542C44DC36C236272FB12BB8690F689C74736C6888E2884BC0C0 +4E105537BCF3C8F0CE8292BC5C044E2C99665F3247AC9330A516A76420D070D9 +0082116A6A43051DA9AC00B71879F1C9C1D43EE163635E87852088A6D3B77A4B +574265A679334DE35F02698EC7884C8140207187933A36E2C577753E168F61C4 +21E2A3AB436CCA9C0BD7E996BACCB156867A89ED2B8F8DCB6DB9CE8FB870DE91 +4D1CDFA268E5BC6A4AFD1B0890998345F2754045257BF43591473F351B62AA97 +D7307BB7AD7C8DB43A73D5EECC987F34CAB192480F570574227E2224A5CD0A07 +3E2BD0287A3C313EDF5781A4D9E1BF2B2B8DF35CAD3DB80E0C5B3972260BF124 +BD3FC3EA966B57D552DE87822AFC04A46291CA66623FE48F0FADB5DD7CB571F6 +F39F0CDD7F541C9503AF6008B389F3B1FA3743AB1774F0C9FD4EF228D1C0F9DE +E10F5839D69560391FC0AA8EFF9D4B83A970FE1351CF6478E4D91ADA69E3240A +B1B09C1F24ABE2B23CF8D74DE43E3301E60F21A12FFF51D03AC00C2B44F552F4 +0503BD7F3EDAE51A89BDE38ED6A4B16481E457517A7E363CCD3FACB112996A75 +771474432AB0F08DB7F5EA12C3036697CE979D321B7AE1E4A0C1323E05C0C4A0 +13C8F18B2F59A4D396182763B94A855CD4CE21E4923B6B9AB3F7A9127F5F5BCD +3C4550F697B4BE1ED870525BC0EA67F994558375C9E6D28D618E9CD9675CBFE0 +BF24A75A1B90B73079E2C7222B866C89D4D0BD9A041EF0FD603AAA9551A64C2F +EB53C41DF2CAC894B78F8C84510C79F11CDF8518D585A2A5018A55CB8EF9E30F +77DE2200F679F9C3642ED792137130083C0F516C98B6EF34758207B799FADD76 +E0939B3C1AB3AA12543AACC2B9BD2642B0FBF48E0427B64ACA02F1BFDC501413 +83E32E59F705BE89284AD702CB6F9BBB88F223ABE70B4256B8511EEE6E21E048 +148E8B4A7945A5A67D9819B632D86D6FA1CA5E0D040994D8165A5DC175245D68 +42FF80A82575AAB2B91C0472F97FDC8B537201F2E551D18CA39669DFCF0A1586 +370AA32695557CDE598771E158B023404861CC76464E098DC4EE83D9EE9B5250 +FAE90B4E0B2D46BC459D99B706E8740DD701F4C5F5D1DFCF365B261405541665 +B1E532AA3F9F03ECFF018E9FC36BFBBE50589308137B120975F70A3965582260 +1D975C394A11304AB7EB5A1448FC02CA062D2DF50D3611C2C00179501089BAF3 +E57DB91CBD6812C695B0CFD658D3AA7C2C32713B18D420AF945D00850EA7A0BE +B98096A00D9AD0ACD656D4319377700D0BCB6FAE93A54BF27B3976B8353A6261 +E25402861065694F507D81D099BC6E4EA8D851277A8273E6318739D74BBD7344 +5EEECC73CFAA72DC0B7EC2A8794A5DB64BA9D4668E3E9F330DFD7F27CB83ED92 +C0A8480A15DCC3A16B7EABC23C594309845A4595164711333B2FBB9F877D8A9B +426130F95F3D645A3336EF17DA63109B5BCCCD0EA1FD390E6F0DA649F81AFD8A +1973EB6C74F7663D0BAEBBDD9B0738DBFAA9B7657E7B291E803D14F1EF7EB1C6 +B9306C771E3A5AA3AADFE2060D2323A9758412BB6E44B95F82DCAFADDFFD1A6A +7F194B3E4F67279EA49410DDCC1F7DED6C0B34515D5E203BCE36F8755EB1C2B4 +8184AE1B1B570817B73D46D498358C4ABBC349C283DAC96B3FB23D2981E47337 +DCAA2F7C1010AF1C4FE80B7C22C534BE4FDCBBFB4731BF99A369E1E3D6231132 +F5AE9D2A1D701CA8B9F7AD88A5E17BB90C305D6604986C41058C6CDB78CDD043 +CBF6FE9D482363293156C6069C0ADBCDCF3710FC904361FA0CCAA012D3879556 +066E179E09FF5B001B52E838735AAAAFA899E71F2928562DA997133756576127 +CD0FEAB3447B5EA57BE6C32701D248813EA8B93E869F2137F65D5C1A0AE5D5E4 +21393E16DA6FA116864D07D17B1C8F08560DA2532990E2FED66D0E0FFEFAEE49 +55418C41DF71AAE21318D1CFFF5B38C90F7763B278DC825CD31CE53CCE9CC805 +C5A11B3CCE9EFCB43928C1E8482302CD6B66A2CF7CBEA7E98294F7F25C490478 +3080E7121F2ECAEC5F3563BA632F2E2019398B584284DF9EB96666FDF10AB2CD +2D348D416D29200EA47B9F3CB5DA356DB357E0682943F0E5FA543987EEA76020 +F633FC4553F3D4E2FA6B8666374200BA14F12E9384A8099712A2E17916C61934 +317D443E56D8C3B5B11B5ACF389C6DF35125D399D19EDAAA53049E119EB110D4 +201901CF7D967B9BFDE6A5ADACE2222CCD624B6889D3574CE6E94F956198ED5A +0245956F031084B7539141D01C5B66F6DEBC3C4F2E90E7756FCA65708F755E61 +71533842008AF59B1A9AA5372FDDB7D0CA18BE1EC8E399B4787CDFAA931DCBBC +2AE9687D973DA7EB4F2F764B8EC359017E1877F4EF5B81A4A7684F87C4F91BA4 +54644E4C2D45F320A4A58592AFEA5731D47A118C814136EA91A00BADC6946669 +5EC507D7854C1C3AFAD477A1D844A520159FCBA8AD708B522B2FF6FBF55D8A0F +6FD97F7BB4C4F61DEA1237DA3B8E42409936DEDD8EACF155766889931C4A1740 +4C3C646904268114676AF5B0E5E614930B0836BCD5292128779645E2D8743D5B +75D8442A911425C3932B61F14C97EAE0D895B97C957B9C0489D47254A4ED52DA +99F6C27F314E03812E6B45B690890743EDA6CB6410952E4AACF4EDB38CC22C89 +2E569D597B91ED013F696F06BBA6E6549C4B74B0D6DA6C7251E744CAF092EA4B +D3ED88A4E5F8873528792A2549133E25C27A77F074142E38D2CAEFA2D83E7409 +83488D979E5EDBA0AF0EC16BD4D5E27E624765A93DCAFC7911604CD2530F754B +C64F3F70591B8E91B2C28DFB8A4DC3534C6C74206D562DE3567DD3C2AF1DC5CA +52C91FDCC57B08E23D47A3F9E55E1CCE984991AA4701210857FD85A8C2171FAE +6B08136B3A5A1D1B738D0627F2FBF722F64ACD86A083CEF02179FECC90E2E6F5 +3567678D46B877850E30000E2061F68102B8B8E92AF0B9183F250AAE6C1B7992 +6AB521E20196EE31A08892167103257B1A9671CA14DE2079CF8770EDB83BAF9F +53DA650828761D27C50DE9FAD629BCAD28805CE37222CEAB505D9508558FB660 +04D5550F42CA25880E37B395583EB95891942B443DF0B3B8187D5715EA366766 +E59E29DD4BB93A7D0876E35CC891EAA996CEE283EDAB491FCE06AE7B04D5A0DF +31CEDEAC4FA7E7FA52A9DA00067A7D3BE15C0AD2166D5588B879E6019504F633 +95E783463A8C8418659F3ACA7DA1EC997D7A04D09F8D83784702EA9ECB3AE69D +C56A063B59A8FCA9762D3DA187DBDF3DF719778F9D2578163CA01DD9B5B78DA0 +B5D9CF241A4B8ECFA244EE22D3B59BF9ABCE7320DEFADA12D442EAC7AECA3B40 +8EE795F3909C603B80DA8F2C1DD9441F84F9A41273ACF33D03F111FD78259500 +9BBBA8C3F021C09AD376B170C1C5FDCE2F8882593219D3955D73C0F9827A0A00 +262B4D50A92969469C1A3399F8580B67BA618D99947CC2D6001749FF6E90B2CC +07617E54B52DC6C952B5CBB975CEFEA8E4FAEA7BC4B019BCEEF05729FA72E585 +001AF774F0F62C33C0D9C085AB8952CD7C05F0C4B63DC1C1C2EB91DCEB7A503F +F0627C145467F95C8E9DD49FF2E8513A3691B4EA94A96F90774B839E6A7150E6 +842331ED976434BDFFA7526B4D3B4204BFC3C550B68F8EC23C735D3C23F97796 +4F07C86CD3E76AB44A4883B21A75A70E7C10404E6EF46719B9D00772E515BB65 +7B28F43986A8BA067C6686E4BD54EFF94038750976D74D74833CF394D6ACCB7B +40173D0B70757EBEF5FB4D30C487AD7839EEF48E78C4550FAE0F1DE33D6A472D +CD3031B2A3DFB0D743BA0FF56F6BE3E0EFF3A7471A74A1F55F4F4C1998BAC995 +3B5B456934344CE6D634E1F2D7D12523D1EA8720A55D5034D99543A80AFFB0C5 +D352E32A35DDD0320956D21442B3A6E82E83D81CAA47043944FD10CE1B505B97 +D6466083F1F5C6DC2B2929783F12658766898848C1442487D0091BF263CCD603 +52F2B00878D567075D442BD8731ABCF5D2C83F36A0F9A1E6513774501213BDB3 +CD17CAA600F19DF66E0CE30233080DC6DC9D554D95FDD1AA2BD681D1C992AC48 +329206615E6CE9EB6DE557FAD1B93BCE7E629962E42E542996231E4F5DBB96F3 +C98983D0F5AA6A21279618F524DB66C8863937BF8ACF9EE54C403A7E4F939388 +76F64E7201FE28C37D3745B817F282D9F85FC68693EC7532EC329DB55D4E69DE +30F7515684E7F0D0EC089DE4784617BAFA338B369BE06ADD099DD7EAA13AE100 +6A36A3E098E41ED121FE71C1958477B1B592B32F9A772BB15A8CBE00C2CEF494 +4984A9C5C590BC158EE52960D641FBE2FC2F8D5D47E753F67C9581811A51E4F9 +9A4EA2F413DF149256CCC0F0F3A31207E8E3129A0E3B26A0775DF6FBD0DEE987 +3D30C1F5186B4E26F574B0CFEB2DCBF60DF97E82AFF543A366F9DD6696851741 +AD6AB8351D633BE824CBEBBA9C5A98AE6F1E23B9587F171AAFB43611DC5BDF76 +2BD293B37EF19137CE825A6B8F6413A22ED5E46BB4C922AD40E2650A6B4D2277 +47281F7265F3ADB31C432B7A6B88489D10331A923B403310BC0BA06B85F48785 +72D3259E3737071BE8A118D9549F3479A928FEC0116DA2B41D12BC958D0918D4 +4A8C9CF30FEA2149B200FDFD03B4D0CB0F148E89C344B90C59936A4E7E290654 +81B2444128E79E3D5C8B8A4A4BEB8921C504050F4177959B25F33FD25744080B +4F05595644171EA0FCBBE047F31BE2976FFC586B38B9982CBF76E2A67C8C50CD +3C594701C91398605EF946D3FBD80B96ECB679CF5894525BFDB39690431FE060 +60689DF26CA49C37041EA77CA90E89EF6E78C4BAD0F4ABF33626ACD029FE4809 +C409AE68C321A594E19A081D4835A538B63FE0B7AF8EE3B68F34E2F7976D4EAB +B865510896B0133C287A3B8FAB4FE04E9A9BAC9865A705EBEAE689D0736D39BC +5181AF6B84701CDCB7176BB0F9107FF547299AA8B8C8E8058D6B7805F084CA22 +CE4FB9F8A520835695A71D733CD28991F6158DCD0C43A09314BF520BC86BBF2D +179F0AAD7E934A586F31A196F2A0718B30983D13F8DEF42C59B7F2FB0F8EB3A1 +F8B519E9B9CD59E18B3D5240F9EFC306BBEC014FC566445BD8B76E5AF0252FEA +372DDD3DAB04E6D574FB30653EF31F7D2CF6B6F3DFE397D84DFAB299B7983BCB +8210FD423D64A0BDB250DADE971A61D08B78EDC48C167C579B8926C60081EA8D +9BE64490D5A6CE67CDABBF06041AB535A21380D43ADACD1B5C62664BA44FAF70 +1CD47EAD956DECAC0115273386EA8F78B268DA881EC845EEE5F3FA5B39B0A258 +E475B58AA506B250DBAA66059F7F420E3686FFD482CC9AEA884CB9DB881B4210 +A41BA3023BE3F62F42744379A82B140130FD6037773E62E4ED9AA6DB831B23D6 +672115DF51AD99C61696594E9750E3F9D73B215345A1EC45FE47F8984C4ED919 +B09A00582B00E72E38D602F5285C7F266D95AD1FC045E63BF653C8E781AE40BE +84271632E81777B0FFE8AC6C53CEA0C785E4440D84216D2EE98D8A589278E06D +FC7B5AD41D3DAD85FB465F63D773899CE58DB1991E71F15FEDE9183743F20933 +3CFC0EAF71B9711022D5AF0030016F28D7D5651975C5ED9EFCC7CEF436464F29 +39332330A92D8F8225475BA5CB2A6FBABBA28930BF747396C2F2DC0542BCBC3B +98ACAE77991DCA7C81A3EE50E03555E9578D516C511FCF7682C5203CA9E83F83 +ABB3D68231F4F3445F8AAA41642C47E1400C48322E4276400D9CAE1A62213F4D +55B854C7C255D24FFE8B20F3C67E796C7E8146330E43167FBC56434E40167A5F +9B8A9273FF702A4F2A48B85874D309DB3B4824692E756981D7E53AFF26A1558F +5D7BE49021311B18D34636D3C2572F3B0859014DEE1519D5FC47642A08FD5B7A +CCB41475ACFA477D496C491739D4F32B6239E220A742EF9479A6C09FDABD580E +E172FE89856018DA055DBE38097073833FDC90D9416B81B3B397C38ECB092D1F +98831F1463319D89E2F978CD9F7554E6074FE7B1712560C5BEF1C7E1EA5816D0 +B10C7309A4D7C13F2F5D88A0786D283975F98A4CB847B51EAA2E65A2E822AE1D +1FF5C49B42711E1BF49ED933E1485717EDB08612C7B86B05DEF387C2B2951610 +626DB79C36F8CB5181768B4C297A5FE8D73EB470594CEE2D0B12659D9249D1C3 +70E9B0E02C5B74D16021F039173A98507B189ECF34E4C17F982738B9B48CF9D2 +2CA18E2405D929A1F0E75094956689D7B9407CE9A8B392E1E4212FDA5810FB81 +E66BD56AC62D271947D981A459D0DA12E0FC520A54C7369AFFC40F698BBAC99D +2128405FAC517E8E273869809965D208642C73531F4C670BCDF69847ADC008FF +087487565C3353749DF7368566850EBB3E06B9C79D27E7792E48ABA5DAD5967C +D3F5FD33DE4A39DBCFB1AFB37DFEC440165A03CD0F9A0B0D72ED78A56A6A6C78 +CF1E06EF1F4416F01576045A26722A346795FD4D4D76AB3A19660018B26C86B0 +F45D403864D6EDBE6231764590EFA528FB31BA9ACE331D3EEBE9871F209336A3 +935E8842954CADAF5386325C4BF2A87969FAB335E9FF3704929E0D0D5BBA1D59 +795A5328AA2CC4FB411C0B5898C092B1911334948BA2109432AA5045264EA67F +5126164BC3FD96EDC09A44809091872EFF39CA0EA66EAAAC6314C61B505141FE +A631F8B5862B04B1A4DE1DCF607286B2A3987922E0CFAC1D88FEEA2D2C027C7A +121F76F9433E5314BC554360874933FD7AED268986B789FFBD6D6535772134A4 +52B2930E0207B273C98BF26A0F6515A4B42F39A4935E10F1BFED78D292DAB6B5 +105A43E5AB00181A6E3F035B28C5C3BAC2B6E9E6B495C08910101E47AF030DE4 +70208324CCE7E0421173166BB245B544B9BD102374B67D02E99FBA474E9C96FA +963CF1B714340AA83F9AD5AF75B468A6DAD13E1F7420ACB51B0096EAB900C4B5 +2AC1D2866B273BF011E2C7C07F6FCBF0AC334A8A389D0F351D3C74D403EF66D9 +39DCB12D7DACA0F5EDC39F2FD220CEEFFF2E1B9617F305CDE3E740C066A0166D +EA8B7E08FD185D048CBAEC8EF574F59FB4F80DC8382AB91F56388F586D7C4B4C +3823847086B9EC3CD99DB118DC89066090B20756EF990678BAEF4498694C0884 +FB309CF7A22CFB79BBE1D4064021A647A957B773052A0CD872AFABF04478516C +97F76772B6F511FC2EB58980103DA0FEB32E61D0C83FED84B967CE31C5F19D85 +A566ED750CEB9C8BC798CDD9F0138BD650943137394BCCFCD97EF2DFC435B337 +4F45AF417F9388037B4C5FB681F5E11F3BAD9450632E1C2DCFB263EA3ECAE66F +AB78AEA057C18ACFC12098E0DD71D16EE1794904252BC427298F69D9FEA435A2 +F00A5BD09DF5C57254EA62FB77B0248873AB68DB7A60413A96F53850EC693B1F +C5D2BBDFB6B197500C2CC5F35597D452A501E812C102F8C235542FB2E78278D0 +E1C1D0C96CAF2628B54C98E3F32DB8D62CBA3441A63945A250EC21C4BB97CBA5 +4A80F71E30CBD8D974EB3FDD3ED45EB008ED54D76BD01766FCAA8F6753402C07 +EF04B9B2308F66D56CEB917E0848C72ED4B1E290BF4A6FE7728CF68A23F6EA17 +3FF37E5F9574645DBED15C540C0DBA3C61E9C02697329BA57C29F3D28B5D76E9 +9EBA8F527DFEC6C96CF090804EFFB25E1458FC5897CB9E269BF2FF6880222F28 +1988909D794620E260521B65CBC1C495DB903F916F50D15F36034506E0838CF1 +D741CA25C5C2B68679A056F03F65C842BD628A2AE8D73203876665372DE0B048 +C2FFC030F600E500B5699A7CF7E9DEA818A5653700143FBEB970F2D51DF32730 +FAA372EFAEA1A4E15E6C2096AAAA5AE7DA3D9C05FB11F83E853763DE89AB47FB +89411C369F036A03D881664AF026D76B52742B74F6DA12469E8D560D3C2E2BDA +3357A562201416BAD3F046BBBF27A5ED52C606C96CF2FBE7236F0D76E10097E3 +03ED4F6A70BACB2E52F00C260C61B66040946AC7A5B4866C61501A883897512E +FAFAA687ED471B7CCFF704B4674CBC082B07179B30F0A78459B6D23A16C49C07 +BEDA6A23F17F25F1166EDEE0B17F43AF8D897DDBD715B9D9FB540949EB3FB4B9 +8B749FB156374E73FD7EBD72EC9C4FBE54E24F17AAEF29B1E846A42C84D3A1CF +27E2E59BE76B3A8828A1EE70887CEA3DF74A7C7DE9A239CCC9E9770740E16E87 +84EDFDEA5B34168384C0F429178B7AACAE1D37A731AE1629F8971811F032A2F7 +A88C26E73311F6BCEC83FFC99B01DE9BC5FF9F34999DBB568199CF8EF8836704 +192CD77B452622002C3DDF0D5BB06FE822B0583E00A425D85A4B29633B1DF56D +9F5F7CCC9AF8C4333AAB65841CC7A4FEFBD07ABF367D0E691E22384362F43AC1 +4EF4FE416F8FB32F29EDB2A20BAC9D285D78F8DC79F7677DCD002E4A30C98DEE +4AD9EA0B00AD161BDA8B6C19922E9840B3C2E96CAC90369FF71A3E5311A4334B +10F53F90109B6C218EE7B8D23A95A766DE4D4541ADFCB4A488D8F913F9D07D35 +2B303F2518E0BE70549BA0F0D8D33EBA0CF23C610FAFE29C1302D7FD008972B0 +D8E9DFD0DA84C8CEAB1B160056C2B69F7EDDDB93B069C8E4378C7777696A7ADE +9DFD45125F9609D8403F72905B73B813F320B6AF2C9D62532328C65FA25FA75B +9B57A65347488BCB948FCE4E3843E9A195F5D6CC1FC91CC9D474AFA91BDB9F0D +457D08F869F21A78800D1744957848AB12982157748ACDB74814C05F40C5C630 +171553B9A547AB9650509B4C8A02740182C0E902120721DDEC1EAB1AF4F9EB81 +2EB8B93EBF9875D368D11696BC7AC7631C0C357E4E90F121B58009626C101972 +BC86C45D2444AECDF6C734A9D14CBF243777B970247A6587AA078EB820DD9131 +2D729B6B7BC569A444460BA522284509F8F5A70BF465F20EA91733A07648AC0E +D7630DB0AF9FCF9FEBD09D8847C8CC6CF63424A784937F00594D311AEC11B55E +8AC43A2FDC85DB70DE025FFE25F1D314CF06847BF2DF90EC2F78116EC8583A3E +52D8B8F0C8EEB01DE18B3F288710FB14DD0E10A8A4E7704662CEB3CE6E856FE8 +21AA289801B84CEDC7FCBF815D2852247C8D06922F8FA940B93421F256CE37F0 +441F8095E1A3481AD60771C65113C61D844E489725EA5B34501709463897CB5F +B01CAAA3BE5109B4A49E +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l048016t.pfa b/client/shared/lib/fonts/l048016t.pfa new file mode 100755 index 00000000..a14e7249 --- /dev/null +++ b/client/shared/lib/fonts/l048016t.pfa @@ -0,0 +1,1269 @@ +%!PS-AdobeFont-1.0: LuxiSans-Bold 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Sans Bold) readonly def +/FamilyName (Luxi Sans) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0.0 def +/isFixedPitch false def +/UnderlinePosition -39 def +/UnderlineThickness 78 def +end readonly def +/FontName /LuxiSans-Bold def +/PaintType 0 def +/WMode 0 def +/FontBBox {-224 -211 989 1012} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078988 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D830D512B6FF3BE2CC450E +1D74C05D938346D8713E75C290B6906D919052118C8C44FE8218A20F8704A3AA +2AFD1790F3C31C39A443F7CB470E4FF7E05E8069552396C1CFACCDDC1C77FED8 +D4E7A947701898A3E50351EFEB35877FA44F29F04D5E5DCD51D55B1166E650E9 +6DD6DDEB0B5A4C018BCCE2D2FB26C42058026C5EDBB9FB634954094EB160B402 +CEF86BE7ABA16B63A88F1FA3A87A267C8AFD876E1910185D01FF64026182F83B +5D30CB5CEE202C27B727DF2E31EEB447AEB941B2FCAA382353FEDF664D72D31C +0C3D1FFEFEC97E0F0DE0352DE4DCD8F4878D9F677F89747B330FC1582796AE19 +B79B28EA2B74ACA2C127E3B4A3ED23A57F4A48260D2A401F4668E48BADD96502 +E7F1239E705F21FBC7C4FEEFA3F9F938850077D029227236D0D4F3E1FA17958F +36E21AF35E8C937E6D0F988233C8438BAB6019020698D80B9C37EF035238364C +E57BC9ADFA77D4084795CFA6A236CF1E0DB7095F4361AC525DAD39DBBD9D3D32 +08AF35AA38CEC79C2BCEC3B3AD52C93D4F14D25535A391290532BCBA80A9EF67 +0387B566C065825FA04BF4998AEA0942AB50727D74038FB6B602BF5B78C4CAF3 +75F946BBBAE55C32E858AAAB72F9BA53CE6725835E5654791953D26F7DC5EFB5 +5064F3DA56BE3C0A7E6BDB57D59843B0AEC11922A53B1243479DB95B43422F05 +95A1515EF0165589E6D74398C0D2C9BEB6E516304A4AFC8F76161A074969107C +48FBDF8EF6BF7EACB8CCBC18D39ADC605A56A048CBAA3828854D358D473A66AA +DAEBB2FA045514C5AA1B99A174B2E8148ACFAA807038B0A8751EC028E89CEC7F +6D30099DDBB811888C900488E09DCA1D60BB398DAC1BB2A39FAD166B6444C182 +8E8993777B38A3EF591FFDAB9BDD2966BAE15327808E560AFEB82941B65E7B3C +49B3C59330E2BA07204301F845E32EB608E12204EB511C09D06AFCC2BACD0654 +8B70A1A15916CD5CF40B633F3626B85366E1DD3545D14D71B21184CED78AAD6D +A7B16AE3BD38FADDDABB38EA2BDA49EDC3926B1526C57D9631A664E872610478 +84D1DD1A3E6CA785B5630C31ED8EF22BBFA07286E8E446F1DBC37FF4A4925A99 +DDAABEB0BAAA3DF5E60C3ABDE27C49F5483FF1C9C3358D3F1A37C2DA1A4A53A9 +F4DE466B3375BCBCAB491663DC09CF549A191B4E53B533D4DCC3D65F0AEC3E95 +15CE5CFED746E12CCA4663FF4B93B36914A7688F13BED3A7A4B62F272199B8D1 +01CC86E75715BEE99940BD3B54DD82F8F3C3BD993723E0F032A89A46E40D4187 +EDCC579654DB07E4ACEAB6C1031B35466250647F37A36B1FD73CDBCD9ED005AE +855D6AC8C5560B7F498FA3DA42D510AB98D922C364410F36D3AC8F27F0CB185D +004AD2B98D3AC972C91E47BBE1C2766F2A3480176645B2F405589F151719DFD3 +7E40DF255EB133FE40C48966D61B175C9C1C422D654DF914AA78E6139E2EB05B +D3F4DB9CCE46D7FB174B210C45D7E60B2DB14145DCAF2B5013C53BC002762DD6 +DC0791C4FB9031CFD24C2236AA61AAAD8AD8BCD9045EADAC9CB6E6DBA94BF817 +C78C0C686A7EBBF7B37BCBD484393F5D53EFC93485C0FBF6331F3A5D0A0AEEBA +23BFE63E49B48245557B7C88B478FCCC333CC083D9D5F0CC2335D5D908413AA4 +8F690E81E40BBB674F7E2E37F37DCF5EF9DC6D7CEA3F7CBA27FE86AB62F65F36 +B2F0996F7F1A33BA903243ECFDCAC2756E95C19E4718AE188CC7384BACBB2200 +ACA8A513F352B241EDB68CCD6A74273F5204CC22D722A00F9930E874515872FF +2244342917B787EAB3341439041E3C83667441D2CC74FB58195E474A55442280 +75BA96B201E789EF394C54AA51D2E55EE43257442880FCE2676A7EF904B01921 +74C50502863BD66DAAE2381309F33A3DC0F055EDCF96B2B6C9ECE80F151708AA +750A0F2BCEBB3ED6E586340D9DB7E78BFA775366070A9E7EDA869815A4AC7B17 +3F139533B2F721832B5E846AEADC4E952C709B3F6DC3185A913D0820EE1933BB +0B4AE2A6AEFD68C99B7AAF6B11D8F012EB816781A8A0A99C2EC174B0B6869F2E +3D373E1CBB2EB3FFCA74B5A3B1667ED301AD1380A02DE73F258D2B99B81D7AD6 +00AA0E604200A17BE9AB1403086BB55B80E6B693B64C48A7AE2217ACB82FBE70 +3EC1F87AC9FB2B637D7D943EF4C4F6A49AF445A76A1BDF21F67493075AB227B1 +F36A743201A64A3797EA6539AA99A864A57DF2B651C3A77915A6BAB4B17E191B +576C80E4023A77559305C25CC0D75E6BDF287298EA30D2E916F97ABF092CCEE4 +FDAAED0926B95AC5090C01ECE24D507ECAAE990D7808F294BDC0DAF5E74341B8 +3B9406A60C3CD4054DE11CBA95BC1C4F57531636628524311AF3018649CEA3D2 +1174EA1EF50985964346A8AAFBB7A38EBC9F01192D741665FB01CAD36BC34457 +B0E2AE912666E96B6E4F61160966AA3E2B051CD61584D9DA998FF702FE01410A +62DAAB390155A045DF241FC47FE824E49A5E96D3BB3D354DEFF8F21498FC4F8B +8906C6A7E3CC692EA39013DEBE53EA53780AB6FF1CEEF8A2D2C2930DDCD31398 +6CE78CBC84EDFF1B9C0C1B6DD756AA5B53B83BBB765E88A8A0ACA6938021139F +881FC91A4FF6F1AE7B2BC81AD0068835D69B465196625EC7F1A5D19141240C95 +F95245DACCB2E0D527B37B8477CA62E9933CDA5FD82BF6BFBFCDEE5D82F07797 +3F2ED2D86C8950A8D4F2769579F25961EB3499A002E40B3385C9628BA50C7556 +693AE13A9FE9921E3C712BAAF060CCB0AA4CE5F70A9C473CA0A5F53CA25E6761 +D269D13235377380380290BF10467C2A726C096D4FC98BF402E498D91F4C2ADA +A0DC3B235BB50BFB85FFD5252A9727C174AC924DD4B086AD6BA76B37FE0C9C0B +C44CF99D67C9DA1F97158C69D689BD6B0D313ABB5F8BC62AED5787B33749C569 +A0FF5A740C6B51371CAE44B9F9A516C06341FD0A530ECCA6BA769D016E3E51BA +016AB1C7E5B4A4C0AECBD0B743C97025C20D021A92E079B6F051138E5945EC72 +AB5CC8435892A5DCD78EBBDE078033E866859BF0F2368FDDBBAB67AF17B943AF +A1D72B7E72AF6D5AF10ABA4350B627464441DDE21D458E1789635D18E3A51A9F +6A97B5F73F7FAB11B0684C33FBE0227A67720F748C99C9FBF849508C9670CD04 +61BEF83CB62342C4215BA40968213B2BC35E4775218EF4843C39EDD64D2DD648 +462A625DEE03561D0688198DFCB24300DAA7348E9A2A3B7C3FF2119F3801BC1C +450B23D9DE355A31FE26641EAC1C24DC1D452FD17A0DF9DE3016EED76ECDA07A +96BBE3DFDB475675473851E0B6FC5784C065C1A49C88B9EABED14DE2329C139D +8E62A5B152AFDD0E5925969881DBD1E11AA9AAA8FFB179789B6086B89FE4BB84 +736F63C2D2544A636A804D2FD6773B6B760E1493D342E1CB9693AEDE902D3ACF +9765253D70A82D40BF2A300C7FC3C90C5A164F5BE083FB587B9910DDB220EE92 +D962E3B41F1D1D4517CDE42A1B31E1EC802220E487556F5DAFB74F7435C6798F +D300019AA3460321482DD5FE5A0E513AB83021809BE7D502FC1CF70A03315BB7 +DFC2D92D57D026180E03E2F93223A2572FACCAC6E115E84341D155B11B15CC8C +91A58C0F13FBB809BCF649BFA631D8F39C3E4930315D11E95241EB5C6D7179F0 +89254794EEC311CE2003EAE64E7AF47565AD3670753FDBA67806B8AEB8342092 +6C4455FE7FCB11CC99DE5747F1AB6C5E53B805BE44AD49B58B71FCE5E406FFA5 +CBDD6049906397B512151A5ADCBF89DCCEECD0BCF2E42EAF31D07147F459F299 +DF8CAE98460EBEBB371D8C04A7EE3D30EB34E73EAD6CEC8E569C344A4DCBADD2 +9BF49F036E25A722A0D94DA58DA12813A4900BC32E5BF7847FBBCFBB7C78E034 +6D5B6D4C951A74639BF257B122C698114A842431D3B7630C585BF5B4B943A83C +09101C02EF689C8D2CD6DFBF459F0DA464320B7D2993EA5F9CDDA1915966D490 +1871C1537EBB120D16F8BEF6ABA64C72FB1DACC1299174432D59368220EB2EC5 +79B2F9F355F77959D5919815A90AA9C4A0BC87D40A06D860BA9B4BCD89708A65 +EFA0063378FC3EFBFD13003BD1E656A697F3C05FC6CE231015DFDAF48378546F +CB5442A206740766A972CA9B08151D29C70702EFDE0EB1187C1B15AAF948E994 +006F532E9227C04AD44EE22FCA8450D745DB2DD5CCA57AADFBDF081D21EEAE5F +6FA39642F58E8E669262630123488394D37C47FB8110D90521CB3F100873E7F3 +BF89A26B6A51122215E1647ED6BC3604A5B8FE349CBCED5D0C98E7E50DD9975D +8214D3D164A3079DC1E702E8B88704ECBB8E015293E7D5AD7EE5F30BE8C79FE8 +C1E98BAC278DC577CDD159DF88DF799B7B5A48FA9672AEBCA7B54935B204873B +3AE4272A4F4A578C85F3B62B45D19F2475D76A7581FCDF7C6046442ADC2E2602 +B456F96C1526CF436E2470D0D8C83FAC1DAED4536304C5975AD70861C56DFFB4 +39D09D5302B0AC6F33FFAB5F43D465A85D4403EF8FDE2ABB552472FC810D8660 +4C88A1A7C7EF6CF3E6B2D843F72873D43716FC3C52CEB6718F0E714B66B83DDB +B8824156A1EB779ABEB6DE745D2AE5615F565F5A1155EA0A8D2FEE3D9D0EF1A1 +07D5FE36091FFBC8B5CC09733D25C1E872925EACB084C30ED44470FA44C3B89C +7255A46BA16DA37F4E1362A200BE49BA9386B8DBB0C54F3DC801351C083C986A +B15AF96A717DFAE03A391DFDD7F812BB6566B6F3A4F663581B76C138E9372D34 +B3A1925EC8B59A3563124CA92456B79DC0B52613EEEDF3A719B8FBD44D873F9A +9A4053F77E37143B2E5822C7971C9D6CE4129C64504D5D857F907ECFE27729FC +3D3D7CCCE919E50E11BB62E3596A247F5377C8BD41BEF51197374ECCAFD3182C +D07F7A931D0D0B17C956D8BAFF218BFEC60997D00207642C52461F48E9B66B41 +2DEDC7D90051CE288CAC0A8382CB3FDCD11C1EC3B74515A7E6CB157F7B2E2CEC +E5A664011AD2D240BACA4496ADBB2351673E0DC78B3F9618AB412D04AA75CC24 +462D5A925799EB85598559B6E4194273BFB2F461FA5FE3165B5D49620E4AE070 +7F45CC85AF3BBC554E9281C99A601789010A990962BD8727D38164A16794E19B +C62AAFB909CBAA7CA55A17080ADA886EDF6E38D09AA4E6418E8111B33CFA14BD +0D71127D8F95D03FF4C8E247FB19BC9D0F33E50B7C1C8F0CAC0AF3A8A62E9521 +E2292ECA00E69D6C6F94FF7564C62382B1A8497560131D9C8377024A8D629BCF +B04005423D59F2494362AC97BE736AFF562A591454207B1AD52B060987E5018D +7A2A17F790C0854F19BA9FB95F04FAA769B954FDB5A1A5783456B42845357E11 +81DE026B170DD8EAB0B9A782A6FF7926DC23910800D83B169D498A8F3F2B9BB6 +5C30054793B82EEE43F9055CB214C8377E94A020B9098842B94BCADC8C921055 +B1B60536E6BD12554FC5A56B1AE7F96F7547837F6F46AD232D7E0BE2A62EBA1A +87C74C44047149CB00ABDEC136FE5CC1A90DE011C80C87C9AA7431C656EAF1C2 +A9CA320D197746BBFE55603A34CD3AD42776139CD1E155EBF3B3BB64AC91EC73 +FC0E23A13DB317753789E3BF98561A21676DD91B6BF3715E88D9ED98A8E5EA32 +E54A7D84390087ADAEEC3BE995D19B43C9635EB8BD6D13A46019762699E5648D +DCD8331CDDA187AE4D917308B7DFD30E6162CF927F3C2AE9666C8DCD8FAFC272 +ED1E75FB3EEF0527935B9C1DFB055F057C998E560B6598F1972A8829E57AE99C +9D3389EDF9A7A8A3A43EE4713357396C62A27401EBBF540AB2A29D50C1DFC3E4 +4012F882A6089D57D97BC2C5DE19A81B1DB98EC4E8D58C547A5D131B84341CD8 +9CEBAEDF1165E8FAF604F0290892B813242B6584BFCCD68BF3F01995BD89BAAB +7C7B8AC166F5F78AA84659A45D1EF4FF658136CAB8627405EB36907CCE200B0E +3A36E0593B40FC3CCE029881B0329ABB1A948F5191750478F46A03C3CACC480F +070ACAE4B6C06A911E88D649D297907DD631916E60603CA49F35A2B3C8D478C6 +9F1C187C315A859AC464ED353F09C964BC171580257A31EFFF445950E2EB6106 +7EC224409386B3CC2BA0819B6CF9C895586B23E740C7EF1A1814A26117C868C9 +FE8A5FE3A8DB9F53165E0C62CCEF9F3735EC18C31E0C7C743B0DBEE893DB723F +D1514A59713B273D4C9395235A126BB9155B14C9F47E20B8FA8880C717D756CF +CEB12CC6C82FA5D3F4CC91A39BA398B920B5CBBA3B55E02359FCD284DCC3DBB1 +63DA4BA07C38E3E9E64BF24E74B62A6DE5F1521D4A1DC6657EA507E56207726E +08C5AF790CC07D908750D852A0916861B8E67D78CF8ADDF16CF9BC6322274AD3 +8101E46FA56CFFC505B3D6C20920F13D8B40CDE364D8FA91E7357E5FB218A3CE +40F84B5E537D90290154C68256015C5B8BBDDB702DCAC1FFB105AE9CCE0A65FB +EF43BE91E7737533349E0F6D227B30E52D41D2E73EA55F52D1A065B1669F97C2 +0B4B1C2184C4161820220A52E85D3A0EDCCB2A5BFA3B406A2F675D0E272E41C4 +E6293BE2CF58E8536B0AD6087E5A89DEDC6C93F981B61AD9E91ABD1E4B2DD4F7 +5F909701A0EBEC140EB7840D69F2428045CD604A590F47821CA8D51DE41E07E6 +C69D97C54D21A64CCF2E914D4AD2C444C129D767B285EDFD21F8A1256CD18D3C +3E5DCD834B3EB61B39FAD0579921459A1D6D52632A7CE0DE74D2FEC0A91E7FB2 +AB4C61CD334B66B27263BF8FA80456825DEC46D7144CE5888A73F545905F5B51 +0AB1C1D8FC967B23741C9139C2497899A500A0F568BB22272D360267AE36BFDC +37022427D27F6A5AB5CA408E2E925339DCF18DD3663A2C088943A59B703F6BCD +B4DFF736DB3EE64B31F93BF8E8E04C51231E453A4264DD5CB3EDE03EFDE84C6E +EA04803556B2323197F4F0EFF3B4CADB6F645DBD3A80E094DF41DA69E7DE2230 +FA155A5731DFB74212F26391BCEF10568C12F3B63ED608555E29356A31DA7E03 +6630A630BA93CA08FA4B2CD93425B6B1B166E64759051117A5CA57375A175B58 +88CAFFF8058A6620717E3FE9B0B3199E201B99E29F709C9A1BF56E775F295EDD +FC347391E56FAF1A620F41FA2954AE8516A8E7FDA373B6B3318FCA7B050474FF +5043E3C1F6C2ED6B6393CCDD3EA31307CE63487EC58B0EBEE57B7FE38A797E32 +FC1D5CEEA4194031848930C172D98526455C6F7C97350B893EF62AA17684E675 +48FE4AF909D9D42CC82B801B19777D99ADD0CD6CF454A42AC60B6D973441E4B2 +EACBFFFA2980779B87FB9DD3FDE5DF16BE1B67AA40A382EE0A5EFB6BEEC313C7 +313CFE4522CA12401C2236D6BEE454693A7AE8275633D580CB578E4EC4B5909F +E549B79860EB0381B8B2C60A8B729F231FF0BE0595747A6934D70274FFD50E31 +ED10F8B9B998956B9B7145313D667336D28C65DE14B92B5DEEB935200390211B +A871FD3910636BFF0F9F3D932C77C412343DBB318F1C1863A71B0321D8C3BAF9 +8C8A851E1B210C3AAB8E4E92A7CB4743FDEBED828B8B40C18588BFA45C4972D7 +E25707F2C8F0F295D08E9D56C6C565467C088FDBEEB4185AC9503A87A3D0203E +6913E3196A1061E4D788BB04A481D513ACBA92D5C024B51F5C974B14198E9C95 +564CB28A446A2D5E9EB79BD08DFF005D23E80C68B59D97B4B8B9D407885FF333 +B19B30DF7582E296838D7D68823896EE44C2E82D136840E72FC34CE6F718A07E +E880A2957A3B516FA90BEEC49AB0BF5626609752BADBBF836E38E066339A2D0E +8392B31B7A0F2B8256311727BDEC7102D7227584CD8F96FB0F218E7AC4B3B407 +61F6D338D99C1F315D53FA5176BE6563437533439020C2D967F0BFA4013DB08D +678445D75A980B2456241EA5E20151D12B5E9E573FFEA0432EE3C55AD16E8C2B +251F17F3AA1916A5F4FB99ECF340AC0770A763927BA3D5A03D777C84596FC8F4 +FEB2C582705B8A4A50E6348522DD166437DDB2BA6B029637DC0A189208FC51DD +1CFFD1409F17A5B6978D776439D702691A79412B6114A9EAD17B2776A791AA89 +9CB426B20F18F45093EE66A86CFE232A2A9B979074D2D77FA0EAD9BE8A7C731A +E38675C5E1D1FBF36AD4440D616817BD48C294E387F171FAE366474924E09855 +9839690F0D2BC32A0FEFF7E0A5D77C22BD692C9EA0557ADA09044AE6069475B8 +9D58EB7041A9C9A4CE8482ADCB3CCE1CDDCF21D842C619813D830ECF67B0CA67 +80E5B5CEAA3219E7D3055663F34D9BC549FBB66B199F36D4C033B74EC374CDBE +6EDB97CF2ECC5FACF8A68D9A8514D49014716D5920A30E85908E232A8D8ADC5E +4306F54550CD95ACD81AD9A997F0D518A14FCAD5997C892B54354CCB94BD7256 +7AA5FCC78175EEA5E30FC5AFB22CC1EDC499303058D767BF038273E6E3FBE028 +D514C87AA9A57EB739DF5C60D943FD5F13BFB6EC3179ACD638F3968CC3DA84B6 +E4F72FCE3DDB95ECB75C272BD790F670B9DE0D38F506CB2554FC55290CD34DC3 +EB2FAAB05A3429EE46DF199219A975BF5A55B7E802445AA7F3722104E7608F84 +D66A70ACACA0B4AE6CF96B4565577031EA3884766458C090D5E088B00D391D1C +DD5F456F17E32A00F259AEA00A6419BC21DF016E538C74CFA23B1739B485A150 +C57FB3C7C4DFF0C2BBC03CB1FCB80AA0A8ECBC1F76A371259ED8AE2B92BECFF4 +573CC1B5B502ED6CDE7A17E20E8CB77C49F47DB74A64F66B43F8DBC1D4E75089 +440C1FFC5CF38A3F498CA3A1D226287CD54C1F5CEA7FBA8DF6D1448D322774EC +3C0218D5DF970A012E1F5D5499F2B9D7C427741B518A7E40C05DE156DDDDE625 +1A0DDBC011601E7ADB83A38B9B988FD3DEB78B0E9189A6CB35DB3E12169BF0D0 +04AD6AA70E2E26DEBFECB88A224DA21AAE268BE352F7B591274F7B85695F5FF4 +5DBFACCE337F2220DA9246138706A0401C7709580F0DB5642F24FA4EEA4982EF +4F221DD7686A0902E70E64DE739819B4A34C34A8F5C68A591B2F169D3F9E57E4 +409EE3FE9A19EE8CC17D6B23F836DFD6D053E43178F72C8CCAC64E90D59C6E7B +F8F2C0F92CCA49109409E471F7D59743BA1F9756C105E2B3A88431E74525029A +5D791598E6757242D6A2BEDCB07568DD3EE55AF3C2FE01BF49BBA42F2D669637 +8FA4AD2CBFC8335BFA14C486A3A80F5682F51719C8C5050E78AE3632B88113AD +AA13AD85403489DDF471079F73F641A4DBDB5F829B69F9591C13E947C8649F20 +F4035BFB5B872781E8DBD33112FE780667F03EF8BCC1130691EC49A4F952BA27 +01CCEAC81C98E1E782F3005DCD160C5F10390470158B11CECE9DA5A140E33000 +801CCE2D780F5624CF5367ECD0F037F7DD4E65C282110204A16E258129615E41 +A8EF65A70DDF685028858C523806517B94B7936B87A6A63E5302981E322C3940 +CC320304D5C861FE2A10675005C9B824F2B23C1F792D79F6C21A79E0AE6EC01B +13196E92DE931E84C4B731427523572F1FEC80B1213F8DD279FA35E6553472C0 +E5DD18DD2179BD5C5C386F8F10180AF0037E0C5DFFC6C542F3F54A1C8012AEE7 +3C5B07953BE7867171FF6CC743D5E470C8D1CEDB8B417EFD8388C510D7036255 +2BCAB7A81F4BCE4457FEBE1B643D11FFF23F57832BAB05A6B5595D1BF1AF736A +7E0BCB97E4CC17771AC4C287F7D9931F87389E6D54864BF991187B4450B8B1D2 +72F78B4BEABCD93F81E5FDDE93594E34A26DD7FBEE4D8EADF932EC3B46684AAB +D88CBEDF312A4079B5FB0D28629C0709C9838D31942BFE7CA23C619038946E3B +59BF1DAD24910B65BA4B93A66BA05C795756D8C6B899381B352A1515F06EEAA0 +668103569EFC81EAF2770EF1F0C275E176683A19BAED35F8C4EB4FC415CEEEEC +EABB976733FB60D260292631B8317D90AD16F149181CFA0F39381233F331F9B5 +5544F44E3B2F2C544EE067A7259C19F49ACDD963E79046E45337C98035097F18 +5E7ED0E33FEF28163473E8F682A2DF99FC6B44E307ABB5C459A0FD18040CFBD1 +8BA0F6583A609C5CAED532EB0CDD21714971E0EAD8248237755CE81C919824CA +D88FB1D0F29A00ECBC76CF62C63857BCBBAB9FB36EDA51C5C69F3B766A8BF388 +8FDFC8BC575DB2FEAF388B75CE1FCD42E192965A2E21326B537DE3EA765022F5 +7CFA5CCB84859396439EC1D6DDDD38AC4E9F06F138663B9D1A4909293CBE7861 +93228D6A7527BEB9D7A06B90A109BECC91EAA1BB23069024AC95C58FD2F0D92F +0C9A23F9F98A8D26B7A1E70E081D564AE0A7A80BB84535D7583983161F4C3801 +DED0939FFFA6B101A9EE4004A6800354267881F0DE62EA5C32B4A107609A863E +E16299310CCFFD62A7EC33A75F7E366B9CCB16A9905C5B965E66AB0A82161CAF +BF3DAEA49CB8689752BB02B67C12095F38A837A702B1A7008B808241CB3E8952 +77367FCC9D8D8020A70FB767B1EA866C8F0A6F1C5CE1BF0BD0369F0BD94883C3 +69243523E0EF6B8BB94FD81FB9FBCDB3F536F6EBDCD64BE81E24BF77A90AB41E +1E682D022993F534F5F084E5AEE10D831D1561C3F05024CC81FA5807ED64420D +479D0B05266B6E93CFB2B2298073C5DDE4DBB1A084D47516D8A59C7D8A3B6FDD +4CC0BB36179162C61AE84F3DED09B5880954A324C3E8FAE9A1A33D38109D8D6B +F9A471E8F90FCD48604E265BC789574CFE5CEC36994951F97CE0BC88CE51FD5D +B44907874A1B286BA978537156E589EF0A1D087F435EC06F1691E51D05B51926 +E78A55C1E9A4039185DF20C68E2E4701C4F7C5E18F045BEE53B3991A3710BF3C +9280A1A369CE41FAEBF3664B056FA83F8DFE4C4000F7136073C49CBE894C1B55 +4BE63B386FA539476FCFAB0E10BE9F82575D59ACAB276C35F800FA1B33646310 +F635AE6153D935E901E0EADBDA92DDAFC6B1471053D6A3ADE4E74045AD693A7A +F3609376CDF493EEB0B2A69449CE541BE697FBAD39D86B27A785BEC81CAEC54F +6BDB34984E435C3DB92D10DB49DC6C135D9D65AA195B9078D6E8944F2031D521 +7264C22CABD2634EB5683DA871696E91670265BEAF792CF81E80383A82459741 +29B9F13C24ECE80432CB09DCCF5C28DC545ED5E356A5416CF586B97ECA91BB27 +B07DE92C1178A0AAA216D4AC235B19AB5A62BFFFD114C4F49F7279C94DA0E6A0 +6C71BABB00469C502207B97A7CF0CB79D68C2F5ECFCBC94EF07D0C37F222FB9F +FCA9B78A445E28D686F36A6A517B88FEDEC5F00D7E83C8571AC06FD325808921 +CC7CBD648E7CE9C1A4ACAB26DF540BCED76950EE004B457F4BDEDA23CA8B7C1E +B4F47CCC42AA81045ECEA93F8170706A15EA93F5FA78B1A47722681A6073AC3C +A2459CAB0D5DC8AD079ADE47271875F6F3FA540CE8F0A5097F12782589577F54 +58EFBA5D8590CAD95A6FC2BC78227994B43DDC151F5D2B7B9AA85CBFB11BF6F6 +A9FF8784909B880F6B06806CC8F830F92E551F363882847E215E147CC4B38EA2 +B29D70A9D6A9558226DC92E57F0B0E78C95CA0A2BEDACA4CD0EE68F753912E6D +D252610CC37FE89078ACBBC215BADCF61A29263E81C2F429E8948B926A877C5E +17E51B64E0D3B325C1E4F29B92B8770C90D1D6A2C809081C612065A3285DD573 +C33DDE2196577F6D463E8D19ECD438F12C339BD3CE6482B33CE6CEDFF0109521 +12D3D79FECC373EDCF9E3E82EB3FCC26178202F42AEEB61DDCAF57CC4F995B32 +56E41B2FC6D6C675FA363D1CA2C2601F311C568C224352EA2B89881C8671CA9B +BC0C5C7548A74D372B009F5997ED4BC5C0A2137DE941588A6AB1000EE9745108 +A64F2F780043F4CE9656E3FC2E8777CA1E3F88A99DA1A69A0E79A40EA2C6FC6E +E0C95F573BAE78791B02449F75E9607887C0EC9B3654233707C6954E07D9F742 +F637D965954D2CE0CE474B3ACD1226E4E9CEEF1B8F73F7CFAF10D83FE9C4723A +37BCE2F2C78054F4EC5DD881815EA4B884C7A88AF6B0A78B100FF7ED33D8842D +6728D98CA0A0E3D211A0638BD2EBC392DAA12E01F76B4B5123A337B5B3885FFB +14DA87DE71AD3A7CFC662C020CA6803F5F1DE8D70283B61CB8A049254EB8627C +C2BFDB41658742FE18D0DE9772B9D592CAFBB761A5A9768B4B02DC6627432260 +5DEC39919A487C019BD77225970F1386B156F85AF55B7B23AEA03957B898B1BA +16515BEA6294D26F5A4722685E7FE08298EC331ECDD7DC824CA60F19B7F03D1E +683899368E18FA8499A2336FA880F6B7983F368886C6DD31F7535691974E47A8 +299D8F4BF4223DEEF07150CF2453C714A0CB5FE7ABD5AF5FE47FCA3792A13977 +C531F2A8F81672564A75DD3BD50622F94DFE38EC8E8540CAEC171D690AB803B3 +01C80A9F4371C59CC0E0011743DD480995D5160986DAC3DF605FD473CE527CDA +CF9C10E819F769132FB73C17399C6AF0692EC445CF768BAB03DC70C1DDD793D2 +CBD3FCAA117F019EDC56D479EC56914CDF19FAB530D0E2118B20E735E4D3898A +A95329E98BDCE9DD94573B27564F8A1B7D075AA0AA6AA6008438A63BBDD174B1 +34BDD06FC334D97670568AEA4E7F762723064BD4B56CF0718C55DC8F435946F8 +9951D65A1333CF4C8DC70792546C46E3AD6353A2CD596FF2173B1CD5EA8903E9 +D1593C8B5DC53A42F76A233237C4E34DD339F1D789E5E8C56E3C8C37F5990732 +47799BBCB3E2C0A246EB34192F226668BBFA48CBA95CCAA6A9BA5C543A10532E +A6CBDBDEE5E662BC1F8DA0D66AAF39CDF436966FA58CB3207070631E8ED917E0 +26489A16182B29AA0313E0ECF6479DB4675FB0576610A3A9D5617DC8807B61DF +5610D4ABA159BC25C3C3F678D52DAEEED03C31F5DBC876952F459609915BB5AF +1C35AF1C7CFD30D8F39E3F0B9072042CA8A2FC564EE23D45181544ECE19C2056 +E6DCED4653F6B1E02B203942CCDB6175463DACF0A1D56568A248F39C3B6BA054 +476489539269FF2E88D0A463FB60D52E0A29086D2F86C650842674E0D4DE274D +941076913905096454C72DFDEEA33F2C7F142364018154475587DF2B766AF169 +D424EFB12A1E04CA32B1ED4F9A844F95EE708F7961D01080E2EF3C2125406FB9 +5F000937A6E5504917A4C2EEB0EDF0EE2C19CE2142E875AD64CFA4219072042F +BFDDA76F6A8933616E2D9C14622C17940B2DFC4CB124E33D1C7FBA5D4DF91230 +95F75B3B2944BD45292226DEA4128D14B094477B804163830CE7A310A7433382 +53D9F5E37DBB6D1EFF6D699585993424ADE9BE7709FF882F7F66CAAB3DCD9D2B +0A1BA066F3A43BAD8D0CF5D608F855E14B252FDBED8C6B944ABB3EA837B2CDF6 +DCF730C7CE1C2A0A63C652DB8D822E74767B95F5D7F20DFF654644F93ADF8FE0 +8B4C393F9815D4980DBA50AF43FB5198246C91D9D1558E1951B790443F4DA185 +B9D71EE244833194B6E9C12238A613015B33668D7300F4EABA5D7749D485B9B1 +1E2D27B5CF779EF39EFB94851A0A7FAB1BB928D05C4E38123934CCA47B88C007 +BA2437937EE3D46D8B469082905C43849D54E873FECE86A7068C32F4698A1EB9 +3097D47D8A14BD46DF02FB5A8D811A3ADC43FB362381634A4A95CEAB4F43A0C1 +DBFA3EE3721629FEBC8565BC17C850FFE3F757D0CBD3FBAC0F4F48AFE89E1941 +60F5B4CB76B8BECA2A734DE84DBDA0F33BCAE440CC5E7124076363E37FA7486B +B3A90F827052429DBE0BF5B94997FDCB3B8E896C0B8786DAC25D2368FDDB7E8D +311D6E2F50DD30639113DA11A915B3E36F450AE6738FE3E93C5726AE8C9CC8E1 +7AE55F17082C00ED68C7A189783E5D955077A2CE3C2854834AF677EAF4749882 +C90B37F66C7578C534C773D7AE8A1F27864541006B747D3B7580E3D808FAC8D7 +47F29252F83B4C4D2855ED5E9C129FB90FD85AB248BDAA33BBF956274EEB9AFB +46A0E155FA1C006A66D408F32BDDDD511EB4F5E9F92231D7F3DB5AAAE0287A16 +688A9BB19C728267E13FCF20C9E635F1721B555C2E08A340503A75D6EFFDC772 +269BBCDC68CFD48AC1772CB37F9AA24DF90494F782DD63EB3EBDA77EAEB2183A +2F2E9C4750CDE2E047A842288A7F430C77C010C0B7E3CC1E02CF51DABBDC9C6B +DDA38147668F56416D782075F98A337F4314518A23F01C37E47244408BAEA44D +BC156F429A9DE240414B25081B956638D2E0AF490E92CF18E44E666D650641A9 +A1E5746E8155519298DEE328297AD4EEC55FCDA7ECAB8C6241F8DD5B0959F9BF +4E1F5B4E7E0CDBA1204D78ED01B95AA34AB90C8B3553693F7B18413E51843D46 +ECE2BFAB532BAF3EE2DD93B2620F96F907EF51215C17297F5A77E058AAE1A5B2 +A564C5C11ACB92D4C58D29EB2543F454700EBF7F350647406B306C2B9CC29B76 +AC75AE82065FEBB75CDF9D216F376215633A4A062191891371C8C165D47371FC +148CCD1BCA39461E5E915C7C5B13F04D5BA7CB3B6BEC4489E527188B13E2C06A +E393DFA9B1BC17A141CBFD2138C7CED07D86C0EBE50A8A6E48A0FFD11F791B3C +E3455ADC6DC8A02EB3CBAC56D879820AFB2557E361A0A208213C0C2461E6CCF3 +576AEA9A46514266E2850B2AAA75A10FE3CE609A591C2DBA9545098FA577D89E +35F48FD4CD0EDB72B9A7FB7873D01D683DB3DD2DB9342C23C8CA0BB681619B52 +0A9C6B27C726D11B382146FA8D54D556FA6EBB117BCE2E4D53089C9292C769A4 +37C573E7C7A00DD95FB351F20BD800A3CA17169BFE80AB0E6E2FF27A78BFC3C6 +9E416A86BD22470F4293C77B0017118639866BBE9D08A44A23C7508271FFBD1A +AB76E5E655BF66E87DC916E0AE1447DD01B8D11F82362BA55B50A4FE5FD7D534 +318EA499A1A4924170C3FD81EF41BBC66090F7F393AC0CFC4ABCBBC4255BCA1F +FFC45010EEEBE12B78C513C1883950E8D3E5429CC5BDBF05B96D1B6C53C7793C +D79A82CA916C9EB160DEFCFE32691B44AAE98BBB3C3E35D3C871BC80C7A4677F +76DD0CB632534F18BBD47F961EB620BB805BA2E5AE46B196E3B907C42F157B68 +6A3FD76F75AB344F438CA0661FA6243064303A7DF12EEE75669151F9E297E812 +78CFFA5ED9DEAECCB330015782093908846B044BD8C7740AF44A0DCC1F9C8197 +B15A30DFE0826454E68C9D80C50F2B1D98848A143134B3D19749F7E1BD5A125F +990811AE2923F0BF502285C55B49BFCA0DC5E1CD13CF5A42E09C764E3CE54AA7 +12957D7B267213BBED74B278B21EE4B16D0C58152EF52C293CE44D5F4332877A +AC8032AA8CAED48B5A2B2CBA52AE827F9260383D84A5C5A565BE1D1C7634FBDC +5F083180351593A272342F08EB1BA76A321BF45DC01F0DC73F81E27B6E4FFAFE +696B3D57CC50D1C05AE1FE053B0A513985B5A0113F1CC0922E3407376E339204 +27F8E293D1E7A4371E60CA2BF0E61ED2B81B12DABF5371D03C19257614E99858 +5B93773F057BE3212BCB115345D43339CE2CCA48ACB413B206BEAEAD638CEAE6 +5ABDFCA4D1E5907C1CC8BDC7ACE59C1A3E27DE3B006EE0DE0E76E72909F3595A +4202696072875B42D51FA59473C75AF17BA7EEF32BD822A5AF4556CA5D88BC53 +2782DC0AEAF8F66B1024D73E07E0A26B90FBB0D583BAD7326C80BDC77E5330C5 +5C854E5A81BC3BC45BF9DF2677B9C89100251AC18CDE331FA79A1536E1019D49 +FACCAB95EEB940BFF44E4ABD1C0BA262C750E8193A38B8774CBB92B873035460 +D75CB085C3FDCCDDA3D04C963690D2F5EAFB3270946F69A65346A6A9EDF973FD +CCAEACDFEAADFE6B2A99D14AF7A210DD834494A4C4D22102042A6213E556CCB7 +F645930874E32F95010393ED42DBF286CE565D56D5C80C96D5C88547C09070E5 +F17A395A3E030362B943B61DDADD60F7D5C4192777D6714F141BFF9F035B205A +DEA3AB2A307B1F9D16E62969C1FEEAE6C5283DF2DC414E904217945AE629C91A +0FCDC9BE4459F5F0448E6B2B8A907E6A000B860BDBB3BFD0F8567D6777415601 +267D05C6C0BCB3FC969A22D34EBD2B3C90EF8FB95E7684004F8805A80EED2F88 +CA8C552887A6972BCEDC0ED9DE66E7A2C8CB7E8A884D1693CBB83B5275429BCD +5D3D846AE8233D5F492D02CB5D63118E647C17F89B3187459A0E4E64738632BD +35C37B9CCD46499B7163FB436BE8D42CAA9CC1F21D12D7F62EDE4A0D88A4E09E +F0CB44634407025ADD949A68633115C3C5569DEE891367A6624833ABFA6961AE +6B34E438E76FB2ED7B65DC1A8515D9C7104587897815128A3A6210E08B55B083 +3EA57ED782299D70FBD8D12534E74F1B7658D61B999E0C6B67FA4DADD78B2769 +430C12161171250BECE14E7CCE85ADB0070ABC240A237AD1C2C3D7E75C23015C +E145454CBE80DADD25B3FAB08B2A2FE0A3A728FA57261FEF8073952090A5892F +B9A64E855D36F775154FFA79FE7ABB4A89D7D581F5762ADE506C2D0270E7D64D +3E8E6F0BB595956B468833842214B25BFFBA2BC8818FADD58EF206D88E32379E +2C8FA4A3A25D51EE8D8ABCB9C3772CF32DFB6E85789F5DFFEBC252CE9CB768A6 +28E09AA133598A0A664A401DB0D19674EA7423E1BCA26BE4BBAF9DDA21454FCB +4C2B509EFE29AFE2A9B01CDFC872A32D175EC93C5EE5BE3469184DA910D449BF +1038F75546A1E37F93169DABD6CB7EAFF6D30DD12975FBC71D755F29DC3C7795 +D150C63563DA4A6282BA626DCFE3D360EE153CC0F7928AA60405AB247E9FD612 +C77688F9B4D84115E797E5924E6B40F23825164AB8B23A0B179CFF6D5A02C500 +8C8AEAE9C9724A17A97B164D0B3CA0899FAD42CCB7FD52ABC3BAF5E91F64ABE5 +70B05D60756664262B7BF4C8AF85F17B4C8F13BBD6420CACA0A324690A307E8F +DF1586DBB5BB4DFC46FB18C9C4DEFCBB8937EE5BED3DFC1C1243A4E6D743B26F +CA9ED9F7402BFBE17B7CC477D4E79883162B4ECB3598FA99C53536EDED81F607 +B677815418063F64CDC05309EC4F50C3B49ECC75D47DD5159D24178277543814 +1E9AB69F495A3D0E03C028E81E74722766E868A74675747BE974D9465D48DDF0 +3F1AF3FAB683559DAB50A977CF47F7C4C1BF43F446ECA5374E2B8E77C23A3F57 +33858E972578A0FCB261E1C889BB8C972AD5081FE67D82BD8B929409DF9ABFFB +BE835C6DE98E32112BBE1883EA92C023A73EBE61FAAB85FDE475DA8531D17184 +82C7914966D4331774027BB2AA9022A0843321C85146A087E617B126A6A17FAC +75174D5854B40C08EBBF562A4C7B04A63C55A2CE2FF89E8E1D715B49A52C0EF5 +88C0ED63610A7268FB0C9F9DF4527E6CDE90D8AD645C54E26B7E7225CBFAD29F +80059EB920AE850C60D68D5C8012B1ED8E7AE12482DAA3B5F674D4E569824126 +ED93DEF05AE9031440E88062F475598B4AFD463C144385359AE4B680B2828CAC +014692B1C29BE6D84F5434A3BE10A6774D1493B466F7623C9371420936B397EA +CCA8221353E6B079468F08130FF0D3619C4CAD9B8F2821986F91511EFECC3B95 +15EFC8A7E9EBC936D3860809CB265367DCE2850A34D673727FFD65D31E2EA8A9 +45E747716B12EB8E7B7859AAACD23E04E9AD85AD1E5E9A8C2EE7D535150A6AB2 +48ECFD5AAF2C9DB97A5E104BCA486DFD432AB386B4B31622161BE0F92983BC15 +50E454658FC2A987E2812B8CA402A618227ADF685169C12A4F0BC371485C6D82 +AFF5509CBA35D2316C6DD808E70FDE08712A1DD141399F925E8447F3EF8FE3DB +11F0333E5CA2FB92CB762E46A1C27CD7EA355F8F17798AFB0BBDB5417E6D3FC0 +4BA77E9914A8D37EC26D6009FBBE4B080CD7D0B4F35DB32D4B7AD26C0C79B130 +D82A5481D024538265AE6F9F6066C3E4D4A4C45BF168F8D8CAC1C703150524EA +62CF558AA34B80090CD22FCFCCA620F671F98E61909014DAAB8C93D36463B6A9 +C07B33058454664347DA527C7756EF50FD865F3D64C8AA8BEEF1354099FDCFAF +3408FE61855CB91FF1C9DC778ED2784B3423B9779308EB908ECEC25D190D5233 +F88C60DA18AFF88C880777D581F369A750C6782001767220A84B0FB874E4FE35 +90063FE863173018BDC7B0E97A1715D74477DF5EE7490202370A838A5F15581E +C98893DE26F75A2832A97920333F97214284F3291D83D41F2BDA3A74EB4724B7 +E5AE936863AE5758D5B6D4E0CCC9703D045931FED54F2D98B039099510BAB2E8 +804FD603E664663862E0AC4E957C7E65CE9A63E72F635570A068C7B696D800B5 +C245BD650BF0627C063678A88085F961B770E8C201418DCFE03ECB74776406D5 +557C37493855E1774F4C87B9C9ECD38BE306FB64016D1A54A848783821512718 +CA1A0BFD0188997081649F6D21A00F341BB0A843B0B598EEC9B18C7002F76150 +7272B91A10148713B64985FF6A00C75C22C708F2265EB223C200190DAC8457BA +89C4FB61D095F6C2FAFD3F13780F75822F0E26080BD7CD13B31B8C82A4A007AE +29D450326D79CC899BF3BA9399AF4012AEB18EFEFCB829B40EB8F2FC97225212 +A7C49B4D9C5E362D2E64A011E9891BB02075321E1315C1FE219E49C2F4D2C8EC +587BBF73C35D13E91F4BDD3C17AA023E0B862BEE477BBE257910369DAA330AE3 +64B05486B6A13D5C3927EC6A591BA7DBF5CD81840841B453AE1832D0ACB35935 +9DDB4E8E88D45175D4D9A88D0F77065B98FE59244DA1B24A0D2F04FB3D11FE59 +C69BD19C9535A0507DA6FD68BBFD9023144D99A71EDB1D00105CB59BAA1EC8E6 +8E3F4D99723D87831482DBB370FF8E4099D6EF49A562C5151B948E529FA84147 +5B80BBE6F9C4F877BEC307667C6868B0384B98763A849B47C889A62E69E833B6 +04A60319B227A40368B11D3B0E92FFCD15009B654B096D4E09AA0896B70F1677 +EE32339A931B387D6476843D91DA00229282D60F04932A644B22795C7E86AE6D +EA7DD4AF07E3D8AB4D585C51E8CCAD2DC043AAD95517E97BD18D688A1DB92A8F +B70CAD704FE4D1CDA3310BC7F3C8245E18094E65C82C9A7277BE922334E410FA +93D5D6087892FE352F03D536AC06EB9C9637859093538BF0BA676208CADBEACE +AF9EFD10C49850701AA500F1600C42D1E635479BBDA49C2812357728BB540683 +90DDD54F4193883F2F8DC8849E90F329A9234F79A731263BEDBFB01F996024DD +A95D5FBDF7A6B4ACA2BC93E3EF299B6010E203B59D24EA8E05DE48906B3E91FD +7629A1045E32639610ED53D78236842B3B44DDD2F36AC347F0238E27182486AF +A6618501CE34112F848598A2D28CE97A18407F9C82F2FE39EC4DA96801E1A23C +F3BFBC09EC9C81086E2A48F388EF5692E9E5D6B5B7440A60D4FAC21316BFB71E +01DE8CA6AA0496097FEC7809922553E6C7DC24136301CF15AE3A07CEB934CEF3 +61ED9A944BCEEA2205773CA1B5134CAB75E5DFAE05B79DF8DE0A30012B50046E +ABFD0F4458746F14AF71EF79283E570B4FACD9A6FF5A309CF795520A812233F3 +3F97621D1603BB7878354C04AE66319A6F00F4ACF41FB459E90ECBDBF375DBBE +B205EC6A89494E4390560C121040E8F4DBF68240E1C77B673269CBF10DBA8E16 +88F18C662CEA332147C7E17F88B126F209D2FC0262D7F1B9C8E42A6D56FBE9F3 +9AC64901CD5DCBC9E120C7FE424C5865768C9CB901EFE55B0EF8C363F0516A05 +EDC6F3195BFAE2338DC6BBFD8AB31FF7D2B63A7EDF197ED12D51B0342AC43791 +AE851C12B9FFCED87A9A0A66490A126293CEBDBB12DF32BB27DE30FD02A961BB +9DA36A32B0E9E51DCA92EA7C9E09C48707728774542CB0B1DD72601E30DD5A6D +22F1081F30A8F5F6ADCBAB5071834CAA362B0A586F93A1E2C08B4961094A6060 +0E767F90D241CAA689FCB364048D09C6E61277E23AE3D3907B5DD935DF1CF941 +ADDAE2D173EABC5C1DD7E13DFE00C4DF73E2CE2EF0E1ED9254513D20C87420AA +690769FCF932DC6075577708714C19769E39B8171A7A771A5619F5CF9CDC8388 +082E54DEA0658E8218B2CEE1F8E39FDBCB057E7A728204F5DFFFA9E7EB0D6F46 +3A6328C32F4DF1BC54BCA3800F83AA77D23F9EA4DC3D78F052EF49C11DC8C3EB +530C3AC4F2AD8C861C09FA96BF6313C7195F634917D2F4DE84F7193A837F9936 +25DED0C42D12DCFD281AC0DD5879CBCD46D17EB87693B269D8ADBD935F66AF0E +8C2FC7412D541218A57F6D9D9763B51315EFD5B1BDAB6685D8F3759A98AC801C +21B89D3575593A0865A4CBB176C9592EFC8FF47BD2DBF34B160EC8FF8842CE94 +F44F9A5DC66152B2980DADFBADFFC915A95F98F9406311732E077E8C0BEEB6DB +6709009FCF541F514CCA4D0427D633DA65800559760771873DEE72E395128FB2 +53C856D3C48F8D8960F3E6281B2B4172734FECC78F09EC23F34CB920EE884D28 +41963A47BF3544912E0AA19A48799D894CDBEA789C44BC355763C5758F0AD638 +38C6D5492238EA2FBDCB43B1214B4E740296E3AF9789773A918A26E09A6167FF +8CA0150EDC52D4BF795C8F294A0E2061C6372716FA0311F8A3017570BE24DE6B +3F59AA1C888C121C4E2DFC2E504B014DCE8D922C7CD1C4DD31A53421883A63C2 +859D73F217F3C2B0EB6881A2B0BA479C5F826BCA1F6FBCFB672FF7CE4557E2E1 +BE07CB81D0D4F772A635905156711F3836A3C5919A833E59502FE32A06650B34 +44042BF4151827589B6093DCFBDBC97626490687FAFC9EE3411B49AE64F650DB +4E9ABB16A6E3A029BA745BBD0E305EE5F3C7F9D83AAB3EB3F549EC62730EA472 +F7C0CFC92C72FCAA1319C6F43B3E523AA831E4419DA26019B5CDE3D14C264BB3 +55DA4D1C9CB74B073EB2C80843D55378C1AC7ADB2BA6B75F4FA7891B605EEF03 +A3D9DEEBA8F029CFBD4343E57D2FB2EFCFD5B8499275B74E39122F00A0283138 +758A19661381D508C36B49D7E1976BAD40690EE2AD29F49C499B66FED017AC75 +9EF5E0DF28EFC831E454F8D0EE9810EB0991A7083A878EEA81B494437D1680F6 +3344196F46A958340C9771BBFD7E9DBFD8DB8B19E15294311BB67CA78ACB89BE +112053F96F97685DB0D0DE8D3772D2699CE60E5CEAC18083300AADF886126D0A +9DD38E90B5A99F2A24EBF47FE8BCEB5E258A4105E7123C4174AABA79C0304B94 +506F89D3C11CE7EA02A7C3D2B32EFC7FC7AD1590B544D8F1F846ED5BC371515D +82E17D0E200D026E05653C983BAA7C4B2E4D0850E3BC5F5BB62BD07D55510C62 +2CA31539137DFEA988AA24AA2B203F0D2256A8DAB677BC1AE4BBD0432491CF43 +346668E6A6D8258747B27898897B3B1D404B2F2473951AFE38A563754ECF4F27 +D9CDB65D357C5678952420C9EDE68EDDACFD9136E06F3CC2505B3E192F20CFB5 +C6AE456E1E8FA86B9E85A21FDA36B349BB98503DCFAC96873471B2AFC43F4574 +02BDDAEBF5ED48B959860BA93570D6389382A085A2924AFACC2D582A5C1C23F4 +4174EB5265F09C78CEE6858ECD88F35687046A178565A249F85F2F12EDE73467 +38CC89DC5A980864C877B4988C862CF44722E5B9C79C79B2D71548D28D50215C +4AC9E316968EB5238484DAF7E28B79F72816DE3233BA1F2F01702AD28564EBDB +FD974DE6E4D29B25E5D6C285257386905BAE46872615256546399CF06B80D0A2 +282D9E10F14F01D977FCE93214725242BD69CB5A7275785410885710D956F242 +A71389EC59A8FA694CC681EDDD984123C10EC191AFBAFD911524352B1E012DEB +EE56767497213386FE17C0F5CADFCAF35AC917F5423C092EA86214C01CF52DB3 +70DD3EA2ABCA0D2C5160BFD7AD66A24B9725BB07F08DF833B26912731540F34F +E7B772A43541E28959397CB23136A205FB14B5D98CDC692A17914E322114098D +B91397B4CB2713BC28A75B846E1CA0FE21F3E936298F63D057BF943E5F6666EC +B62A6E76C2478C480392BD50CD0CFC312250D8DB942A16DF1AAF6360FFF78687 +3B412DE5CAF16348601775E2A6EABED350E16D810C11C56D1365DA81125AA1E3 +6F0F53162D9D1453F2A9D3869FE5CF687E11B14E7B043F8477DE75406360D233 +A105B72CD6B28B49D84E62F148D59B935D4F80F93006D1D43CA1887146266DD1 +CF8CCAAA1460F59D854762BA4DCD2C72EA3B883355010834C167789742D0C886 +0E40FC7E18490AE6501D75479690D7A67ECC65D749B69021F8E6D86E98D0032C +FCA0341852E051A31B948411F8E27AB7E23E0D9F6B376273A97554248424C0BC +4CCEA57AEBB28E61F46FFC12365281A763229B00D86034999AD5ED76E9B7B5F9 +D8EDC6BC419A43C86C2013985EC8CEF1B6F251F6EE1F37E6752B326D01A2F486 +55F4469A4C81594D1133BCE884B1438128BA4592AEC98981ED6DB57046D20AAC +D9F9FB14FF8E3549FE9A43F3F9B0C5ECDF97626EEE5B7A5053BB1E55E7665B40 +85C2AB287067E09BF68B2A97310D6F018D5EAE8FF29514194380729719001045 +BDC12CF32D5B575F04540A4C428D2567CD66F7DA4FE41993EBF6FB032AFEDFF3 +0CADBC79AC90241C71DBACCC99742BB516849F1C8B3A6C60EDB04D290F4C9F47 +4E3C8B45B18BBA98FCE737D05079940E7681C587175E13D94B676C0F29434DF7 +53D0D9757ED0DA610E69AA32B5977ABEE045EF8ECC9D5F9EE464683ADF39F314 +7837ABD6353BE90831A843AAC6D08DBCBCBFE5615F88774F47632799FCEBE8EE +91D0CFA0783234042F66CE7A198017A867BBD6EF6B3077106B98A1CDCAAAAF91 +B5431654A8196FE452818DC97E9B64A48A20968E12A8CA92E434EA61838AAA3C +F0501F1AF7DB5DFBD6A0CF7E1BADA364DFAB8B59E076A66AD0CDB95C13ACE06A +D7CA855048E2BBAA48228BBB6C437CEB366EA93676F8790FBB883BECB832DFB8 +618120164630AE23C2515B6201CC0A637AB5397D3FD8F575230559F633654BF7 +31E0774D2CDE9457262341BDF81E24F69A72351992807EFD05F5331F648571BE +824520CE7537ACA3E919694EE5FD274207130E28D716B144060FCADF613B8379 +693F7BCE8433B319406BAA89D577841E55F73F8DDCD9762875C18C2509D826DB +4ABEB7AECEBA26BF2D06884BDBCD98DCBCCD11047BE8F33A766C5B5C465CA713 +BDC2FEA07B34070354687C2F5F0DA72C50904F37FA17496BA812ED7C556709BA +FAEE9127BAC4E7425EA5584D317F6D4D6287CBE769C21099D2E3075171158BAA +348477A37E790BBFCF9D214CB2EAB7167B7B9672D84C984FAE71FB830B914825 +7E789F50FAF9CB889C12B2D7237B8FA90123695F0111C4965802A7FD73809EE0 +E48BD07721C48D81FFA6FC5FD14994772D3A39E6F91EB962B0BB15471395461A +577684BD8DEC293465B85682221EEEA16A02EB1AC65D43BEA067591E90D49660 +1704167CDB94B046ED3FA8225C15595EE9E3EE4ADF486DA47F269E9415B92403 +49E9CD8929544444B5AFAD300B274FAE8F3F722722BB5EF87E2166F084D0D18F +E29E46A3635D2A9778382490F636E236D70F32841D846518AC83775AFF5913A5 +164E41DDD413728A2A7F67131167822E255A5BA9905B41D33718D506D4ACD872 +9C96A9EA31D639CA5B627839105D27A3FA0487B0453765C5475F2069CB73998F +CE3B287C77637CBBBE181F003418488179A198D7DD76FDA0803CB5189ECC87C1 +373266E75972089432DE229A9837C0DB0C4F4A1C0FC242551112811A94227644 +EC271AC874D9AEF2F0A19C3E52507B601BB51CC4B063D7DB56272D4E064FF026 +77DF024B3EC16BCB3C2C573DC4B55D152A0847080520EC9794590776F8D1159F +CA7D525704CE0773003528B2DA05CE92C37814295742DE3C5B85E72D398FC549 +8C627D97F4B77B17D0A0FA2AEE9B35B4BE1303515C2737EA58EFE3E8C02D9A5E +B4BE134695380B10F9D29995FE9BA0F1B8D725FF40FB65A1B5E4497F6F7EF1F7 +C215E98F2B230FF2C1E77DEB317F405D76399A87858A4431FED2A7E40B444870 +000A2019680A7B179FC7E336ACB8B8050ADFD9256E501D716A64D40D045AD891 +B9BB7A293C0010A3FA8172743F2D84FD3A7BB02EE6BA019FE522761F5D48B06B +82AB108F46B361E1215F4146B9499BA9B67F4CB7BE248C0F452366401C4B1EF7 +6A1FCA84C3806D14E98CFBB5B19A9E9C130D20CBAD9EA9D55A8BAD6BD22DC210 +CE6EE0C806A3707CDE7AFB920F87636526309CCD2F7C71E9F41691618503DDAD +A1AE1FF5800EC16ED9BE08D0CD304939975E8FCD8EB99F8F408C2F9CC6AA0F68 +AECF45C5AF7D99B18BA291EDF4B99E01A7F3FC3271B8B14A6550AA3893C3BD99 +9CB74268CA2076FB23A1C93FF528D2A3E28FBF2B9696622858BB4D6621AD5C74 +83E08BE6C12D20D08105553DC668F32AB7699783EE9C5482F1EAB146CBBF5A4C +7D5DCB7523479EB24CF2FED6A503570C210FE2BBA4370ED880810D952F4D603C +7AF879D265332AED31F96792AE469D8B42B83931DBF557150CE66853B6B999A1 +11CD84C513E2A4F94F67FA8F95DFE5746C704E80920BA0521A48DBFDAA615D27 +8DC65DEABF16F1681C2DFEF912222B76D449F9EFE165428267881523733F8DA5 +C34922EAB8ADBB0ABBDAAC668FCCE4157FC5A41E6897EE4D7C8AB47B0D1F8947 +604FF9BB1034E652A091830B21E3955B49F43EB6BCBC35EDF5CD081CC4786F1B +4FC68F3F95D209CB2B74944CD9FA3F78583063DAEC648AD231BCA52699AB888E +2EC4B31D79F9016BFADDC53CBDD785E931FECFA07CAE66786F15E95A5E68E0DA +CB1F7D2B788C9276446AF1353574A1C31BD1B009A9A4FFBCAAC540D5A728D555 +C19D50D543709AE3063F122F39AA2C1217975E12C08DBD572D242B6668089F50 +9303ACD75A32FB183BABEA1B4982B65C3F7AA3880FE5BD719295393EE246209C +0929F1DC19844EF3556DF49CD11848BE88D84811C6686F56856DB0CCE63FD473 +BB08A721AC03A2275057214675BEDD7DCC0FB1BA4A02E5BCE939392C350DABB4 +4D81DE6629C7713119648A025183CFE5E8BC3FDD518ECE2A3F2BE0314FF8D073 +FED63CB458626ECA9525B2BC255AAB91B9569FCEFADAE921575CF439D4829611 +7E3B020B9223A6C4A622176F1E7C906390D4B436ACCE1B2E8D9C03E31EA0CDF2 +49D6F2B1296716CCECE5CFFEE825B1DBCE083EC16384935A7C1E654B6ED2BC5D +A8A077DC850551C90C75A044BF66713F21EF2E6B963BDA8581797A833B1EEAC7 +BE663EEBBF0AA5779A508DC2CA40830ED8ABF4A05536B56CFE94FC10B3C0056F +607C2F3625130E87C03E7201F293E62C69B5FA6E8AD2E870D20DD70CB689DA1F +A955797C9F6EB85CC96505F409556992CA2A19E9F3835C0C3A77C134C6B716D5 +952AC896207CE3723AF534897740E4696E90C58025E8629895A4ADC0DB1AD6E7 +6A89AF91C2A6E39134434F80D4B50D0FB4BBAF31BCE787D3F42CD0B3C328B6CF +3EB7D5DE10CE8CAC478E3340C549A20843857B65649F842B0402CB0CF0426600 +6C0C7C280B7B23461F4E555A40FBB0750E077EF744EA3A8814EC08C9FFFC4FD1 +2A840A1C6988BF0652F623732EBAA16537D2D88077B5BA6591844B42374A7506 +73B04434912167E8B2FA443BDD2919521E7CBB51EF56851735AE880DFE196687 +BA36E944F2A33C00168D15D83C51C4E500A1938A427CC97B35BC08A0AFFC0252 +A66E0F11C26F03ED84ACA2AD9EB4F4913D7BF8A548B8D395DBC847CFC3ACF59C +A856D945FEFFC9E89BA7C441C85B718B58BB70886BD6AB9430D3DB53C985C8D2 +A59CAA7EC7B63976D36DD9719B373AE58F09030DF86791E4B8FCC2807D30307F +6C83981D93095832EF7B6D7AB9717CD19C1F3929C31356B6CBD7B147464ECBA8 +ECA45DA761FCD20F61E49E496AE4CA1BDB5AC7A5591D0FA9439F19B136D6F9F6 +DA7FA38A69AD6251E5722C47DD6856BF23749DC3F0C339E854B4F84C4301417E +5D7D4A42BBCA6DB6820B70F0432823B5E3A95AA69365DD34330BA317B27B4E9D +9303691BDCA22CC1BA832224188F575678D5E7F95B3A090BA8CF1F57DF504C3F +AE0C8961BF0FAC6CD00E2566DB1D502C8E953FF06049D00AD5C22F695DCEA09E +37EE1B6F55BC691789350E0EC61F699A6E411AE0096B71AEA9A51137C0B1A0F6 +39D8C4B3C85C034057D56D235D68130FC3AE064B6F54723582F06EF00D110B03 +077E6FA25BB5525D5220DE4F8978D3C5BA050BE03B4A715910352EA58E625E4C +E435204F0671AA1F2B58A5CE2BF58EEC8CF7297E8288823C64E9918185B87283 +93F8E3DADD1EA48FB267094948CA0448854729152FE6F9B81F9C734960BC02E3 +F4CD9659A1D7F9F4F2BA9CD7809E1233DB4368752122D756C3DA26E391DC4BFE +4F83FCC871AF08E7CD5ADA72021562B233BF268F6D4B745371D8424019B72A90 +C124F65C29B2C15EE8C0EBA2E70A3DDCD6D9DBE25B3E3B80D3E9FB1D19A182B4 +902AFB63B7D989756462AC1BA9BC6371B5C6E1481E57F797693D19DF869414A9 +D314B0D0842EC99E5D156EFCFD20D07C11B7B5996A4DB5EC85E5830B3655F84A +FD7DF060593758A6E7FCBBE97AA3AC1BA6C358F26F018E292E50E1DBE44FA436 +617AC91F2341E1E4B92F9F8AA179E6791BEC0C5782E283C73C4E9EFEEE734F24 +0BBB7B5CF26F8C6A61D4CA18F8FE8C39D33527879FE08C5BBE9D87C3A3E84FA4 +F61B6EE1CE3AA0B364656AB14533E527A55D89EA59BABEFE2114204CCDA3D247 +A11562DFDEF7E36B939A9341121F4CB1C61D2586AB147C17DCECF23FA58962E1 +11EFED42C6C90A0FC71F87939659CB868BC64C513BBF688C4802DA63D3AF113E +6551D91D8A91461888073F8D4213CCAAC483B43B3AD158C537657F1D4D22E9DA +804369D6308B4AECFC5262B047280C9B40BA4B53FEE769DE9140C5F262521744 +54DEA4B4F639CC891A1576364BE160434B02049C90225454CDFE46FC89CD6F84 +3F7B1E81D38743F469768FD6F17B3BB79764E72BB2BCBD8D9BD966E7ABF7D5A1 +B5816A8DF156E4E9EF48B33C87C03A0F00EE23DEE5D76707C6F123775265ABD3 +D93A901B7407524CC2A850771F4B609B835A62374DDAB77C8EF7B9BEB6867029 +537B4B34FD2354655BF0B16F473130084959670A0311CE512A487EB399253FF9 +03E9024BFDE1099B16943C88627DDC20C7CAD23F5BCB669FD448DC6DB3A6C4EF +D2AD525FC42261D6B25C5DF42FAC5A9A7C034CA3B44F7A67E3AD200F9A8A4154 +A0D85D385D8F07763AB004C0C71E5394B0B509AA237175F5036C1AE4BDCF35D9 +56F7F958D0A600B28B7DBCF127E09FA3A4278AAF163FD9C8E576ACC5E3282A3F +2F9167C68744E6D9ED2E5E76A8EDE76E6324A03DDF92E3E329CFC4E2B3C13D56 +77352C9CD47FC2FA1829C03A97ADB39F86ADC3FA6F8F4D171CD2E69D016ADC20 +7F088462E2A724E833B215EC6DCCA694DB9490F00449A11B83BA6DDBF64F6B9E +4BB753980470E28ECC677DED274DCC0DE847ABED5968EE7E855976820BB417C0 +1072D132D7FB33592CED1661A8D1A476FC179C1636915BE6FCBFAB688EB06742 +424BAE841C7F675E524F376E16FF60489DB9EF1C7D95C50C4BAA18408BE32CB1 +80E85C1BB0F7CCBA1AF6D62EE471EC44EC434C85BCCE76F90C2A9264F9B03983 +CE2BC42A2A22D543398021E7905CE5EFA5E0429B19273C134E0E6629A8616DCE +24C857E518F95FB64383F4D1339EE65AEF89F9798BE6B5807404B44AF398EAC7 +523815316CCEC391026B9759EF0B1696934C55DBE1992D458927AB4119C939D2 +2C186AD0B2B90951D14EB9333224FF343B0F8DC170562B3EF981442CFB4C71B6 +3041B81491BAA4D0C4BE442586D6BE61C78F64AF199737EE5AEA8CBC6F36919B +9103A2FA390B8D1955EB6FAC1B7D4FF549AE12562EF99DFE37AC5021250FBD02 +6F2572F2B26D2F29C2660C5F311BA809E8B3094E8EB21476A72BA4FC2A02765C +98EE0A8AAB56D511B5501F53BAE9EA91EBCE96390CF8C8EE43ACC8704B05540E +DA577F37810B240AF659A9DCEFDDDA2AED43E7F7059F2767CC9F095DF20E9288 +1BB6488991DB85793C046F4BEAB2AAA7DBA69526E83A1628E09760CFC9068321 +087129C318D6B5A7A10A6D5B465FDF366D8E9C7E418DFF90534393FE1D48ECD3 +8460C02B9A7C98B52B2E9010B06DD9C73ABFB7EB8E74EBA05DF5B4CBF72232A0 +5C8349817CDE593F1856A84B2B7692CE5E831D890C325F96234218B9150C3638 +B5342980C1928BB5635C949B9902475E6CE9C7320EDD66442CEEAFE824146C44 +40F95771F064230C2567C747BAFD5934D9871CCAE206C13F8A5722FF06CF0591 +DA9576A35763476C59F4CFA638A5DBBC21B4C01190A58718FCCA959A501A6C83 +3FECDAA23E59D234C372D07DD420DEF9A0B23B4D0D908B907970D32763864973 +1EBD9CC5A7C53C2098D9A380F1CD63E9AAE74948B209B91F77D1C19DDD26CF4C +EC61267D2126AEF60A9496E3AA26A1F2A383F2C854D709A60454B193B3149072 +67938C33E570D5149158FFD40D8D0592C934FF2AC5B6E0FD93BCA7BF26DA95E7 +5A381E94CF9C880D4EC4C8915C60B4430469EA3D6706D2D410C10D9E29A3CC0C +1622FEB7C9F59E949CF40ED21B322985BF448C24D54A7B48A5E10C8CA48F6B18 +A1AD2F09F6788F95D29816A251C19A18953A4EE9ABD49DC93425D90DD80869F6 +858286097FA0CD44AB0B5BDF2A371B02BC8FA4B0A4AC48F111DCE4A32A856EF4 +D10F1B777AE2B9ECF77AA66E3EEB5DC82BA69AB0DB3E536B08E6DD8D32302171 +4F30B69609C9FB9B0F25D26E4E9A8F94785D5D816634697C604E1BAF6C4C67DF +FF0D2C9847A27440D92328561541169C3AD45ED863C8A094ED14D1BCD713790A +5E48CB225DC501AD7AFF378CF8E94B3F5A61F52487B5FF4510C1E7525031D39F +63D9A9F8C81F1A4ECFDB4E3F1942DEBBC6DB124E2B695F6390A2FACEEAEC809B +80D04EC03B4D3110E93F2A2CE88BE76298F3B2E6CA79FA4240154A41EAF28211 +B79DF626D8A4C541199BB9AC1039802917451967BC159176BB6F1E17A02B9E1E +9D8D7AF8310F2F7ECBC22DE47F1B9BEEBE383C8B9730CD61D2392496B7239B6E +3CCE01BAEA37663DDD4EFE1A6FC6D2F053F74FC1FC28D3E8DF2C3929F64DD2F0 +6570C474B0B4BD74CF4AF6B72E5D5B7A079E6B592BEDB76BD3C0584C2ABC4E2B +0ACEFE33940EF69AA41C721F401460581EC1E4A61F665786B6674D2F0044BDD1 +2E2B115EC28A997E0B4DA476C09617B1CEE6A2283FB5064248D096EA5B0FBACA +FB41C2781E2CADA452F82097ED5D12AE2A9DD94CC49E90B12731085364EB162A +E404983B1028EE4FDC7EFEE7A430C715192E6A9FCD67BA58D77B3EC7179418E2 +9F44BD60D81ECD7805566919AC8A1F7EBE5CB882771808F32EDDED24DDF21A93 +EA0A872F229895B9912E65FCCCB6137BCE3E0980FA96AAE4F8040A233C5CF826 +97ED79A163839CE10B23AF1C6C48C37A7BD711DBF61F6CC713E37757D3B63955 +515B692289C3D22EB2D5048BAFF9E63865CC3C4EA26F356A448E4A6D93F153B4 +40DE89E06B98191899E1F9BDC0FFE92AC098637AA564E954937CA4758E3D13E7 +A790C92FC5064818CF1B96F9C6680708E10853F50E012F75A2136874340164F2 +800A9A0F7F7377FCA81760F626DB49D6A9285747A9867F423BF079DCCD22B46B +D730DAE458E3DAEBED7A85EE3899B9D55965464F45FC4D2D99F766C95B9F6980 +307CF7E29C6465DBC4E2ED023334831BBAA961E4493D917DDEB50D0B69B1A615 +AC19FE6143F7294CBCD9B2280B3DD739D9EC30822183F644FB1F53CAFDF3BDC3 +56135C7C5A5365B3B767E6F77FE7BB353BB137B41B3F3258CF9869FBB302377A +B2890B01E41C9197EFCE051C394F2206238886D69714E96FF6308772F7668176 +33A22E84871EF6B37F45ACDB7B19201C2BF5E3C83F74A58D319A9EB523F86F89 +C4ABF2C955D99B3C2F14A84E1A9D170FDC1F324C8B2F3DDB868D47612FE0CF75 +0279425A46062CFE4AA23FAE2A4EAA427191F42176DE3FA5A60A1C3E50723519 +FEAC2098A2955F13DC65B855B65D0879258D9BE45661FC2D1388D6670D5BAD5D +48B8BBE379B90FB24A664A29C66A20BB26C4FA710956765D637B7CAB2F57D4C8 +D1CCBB2C48AC19E1C36E8B5DF12F94766805D0D8886515DA29354B5F4394384D +6D59948D2B028619D130AB81BB38EC2FC7713D4D4F6B29C4B138467F8ED7DE28 +DF41B3746C00266C4DE9AAC4E71CDF8272152DF2310F80BC959107CF21814A73 +6EBB99F07B92CFD4E167F53562B04065401155ADC4BE985FB3F2595E835260CA +797059CBAE17FC381AB62786EA902B5D0AAD92602AF851635A6C61B1D9EA8140 +A93E8BF8E24A688A23B4C1EADFF3CE00109D86DFA84005DB0B4E6B9EC75DFC89 +10E92A9AAFEF65F2ADFE1F47E8AF72E97CDB1AE17C4EBF861A7706A3754A6303 +308192CD292B1B1BCD12D1F69CD6F609480CAEF16A569CC2354D7B725C81F7AC +427AAF42F2CCD1DC6031C0699C60AA4B0CFF2E6257E0FD316A90B9C034B9969E +D1D25EB23C33FC9A083A84E3AF380B6EFA30D5B825A6FE68556F6C517BF5706E +4E3B070D5D8F5DC452608180B6A3A7AD6A009CFC3AA5F2A6DC9BD12785B655F1 +DD5D1D6A3F0544D6EC661B9C1BF7B2D2585C0E74BABAE07E453796044F1B2768 +B08111D0FB75F0CF90C8E3B52665D07D79F99EF0435F805A95EE4ED0D9E88DCC +8D256D7A67A96EF18CB707AB91902DAD348CD514772E0A649B66287D1BF8DDD7 +E1CC998D0B26311CF5F23BE0DE0A7CA089E0259EB4399FFDC4379157BDFD7655 +FC5C2FF95DC94F2FF04C1E465BCBBFB8E3BFE024862D85124974BC6FA083C3FA +6DF2F92D3978A998904B0A16EE9FDF840195F817D6D40A630463D73F544CA551 +15F8784F4E52B0CC03528CA24467E1C3D6E1CA868AD2EC482C85CA111F814D75 +FC2E92124E29406E92DE5205CF02BE28F64902BDBB7AC3D3763FE78159B4F143 +7AEE808329D91B034CD438823E7736AF4135C5B6A38769FD9DA821E328018655 +DF6412118D8832ABBCBA583A55A66C758A908C2F195092D87B6887E9A5E036C9 +CB4BAEB7EBC74466E5410DD289DFF8DDD5C4ED6D478FC4715E8823264E9F861D +9A9C9B99514565CA025360188AEAFD7A42FD1F319C46502AB8D81DEA78A95D05 +457E477EAA201F67BC40979F9B86E086C7807DFBFA7E4A2CC0F90D87B2A3EC2B +753BF0346EF5C28AD1F96E4F5125BE9512886E70A232B8AB45B7D2B8FA190D72 +86A5A4ED1E542D23344CDEE87EB7FDE9B3957929AE3B4ED9E7A407530ED99A1C +F948E2689B7FF456E82D8CBEEA5FA4D4EDF577D37188FE7B22523F5E7DE71480 +46506645ECF7C46862F4ADDAC3D3F0D8B6D6C962236F83DE4F930FB8B23A0B02 +978C3B9DF395C0DDAAC6417E96A3488833CB7E6FF68F0B67C1702EA81BC3D6AC +E883CA0953D4FF48CFC6966AEFD6821E5FC91874CC51BD4B98233BD2164AC5E7 +802DCFC0CCA34E4511C4E68D89E711C0CCAF195E9A0E93217C5AAB30BAA40543 +BAE734612E4B74CD1D6D6DC9C794604C3CC678E04F8252678E18E61B292C3C7D +D02AE8A6E2F0C7939FDBE188151F8F41E58435168E28CB4A3F33CB49F294244B +69C4B5347D7443959F7267F45894165E735D00CDDB1C34980A9922E097795AC3 +1A3F5E45C609F32308310931BA9C18ACD083F8A63723F7E54D018DFB08BAF692 +4F258DFD971BACE3A13A863A9C951826499A814D984AA870A8FC75162E4C860F +7B4E459069DB0E5F331EEF074B3481FC2EEBAB1103B075CAD3200E94D080F3CA +66C9703764BBD33D05558BA4693AD855F67451118798CF236BA060F7539F4FFC +F3B1E8396EC34AE1D06D51FB678E2FFE110223FF341DA23CE45E58097E4E7F6A +99616B1A3AB563B342C5FD9DD9B1DB3B9544D0ABD8771AE0A858B8F827B5E27F +3ADC25B822A6190EDD69346EC9D6460C0BA25D52B906F6E37CF8AE26958653D9 +96E6F4918FEB6DAFC3940E40F692836B8C46169D978D3B6361F720AA33723C22 +B7A4C1BCE4292F85BD581F443813DF12A02C5B460522DB1E7D2D61C79A4064DA +10BF9B9DF9B347381DA932CBD3B152FEC7F3A0F7AB80593232F091CEE23A98B3 +7AE07929FB8D6015A6CD4B61EC26384966FFCD23034CD6820D426ACE6BDC79AC +9C17E5E482D61D203126D5E628027130684D2F26C4986904482D6C1589E1C704 +E42947DA81A5B507C31ABAE6AAB31F5AF65E736BF281EAC3D9E6194342B0AFA6 +186D427BEA12D9AAE1FF0D34D52353030C5E670115A719FE28F830562887FD41 +0A5A3336A51F0D752382B07125BBAB85CF54822B0BE9D926A0DA846DD11CA7D7 +94589C19A6B07D977FCCC211BD35DFC09A4BDF028143FD057C3DCD6F6BC34B28 +99A1B03C506CBDDB4D8345B3FA949B8566F9DAA7F958A7B05744C2D8EB7E980B +6A6A7E92C536995B673E2385F654CDD0A80F1317573730364ABC9463B77E3224 +68E4AAA461806CCE47861E9232A95B6A326B32C429D817AD5A3FDC7B2F5D472C +E8DE7DD2DDE194FBE7859302BC76030576919474A610E545B2E89BFC30416298 +014EBE7808197B3021E6C000A12647EA7E90A7D835C1D1F815E175B944302A3E +014B001CB71EAFD0363E6142082DC0A00B0DC19E740F33EA62BE1F8450AE3C9C +1B184D3C3CE5839A0AF3229D81DADB6D93AC7E7BA27CC3B768A430185172BB97 +EDC7C3EB4B7611858F7658F604C6E411CF05662702124E6DC1A333771B319FAC +9553FCAEED75C50A05E7BAD92538EBFE401FAC35F5CF8982CDED508DAB81CBB5 +2558C3BF59FCAF06D266BCE6B647BAAD2B0A2A2266FB6A97782BD461EAD173CF +884F1370C9AE823C85F5C392EE21A7217E603FF66A87BE77004C67E600AF8BFD +E68BA369C571B42C86C51D15350B9B6ABA774E10FAC7DB98893B62DBD832063C +93CAD111B5177CE7520F95179DB50F512AAB94E321684F9EA35DCE472E607451 +A8DA404B573B4C11CE658C9E7D1A3AC07F0BF8087A36859762904A1803277B45 +20840FB55C7F523246599E4930DECDDDF53961999A25D2A78F3C26E328A8F446 +C415A92A14A46397CC5E1099EBBDE57A5556887137305EE31399E8E928C7FF3F +D24B02233C82EA0F0B52F1B1EA91543BD00C69498E2288CB6CD5E8F4ECC2E314 +D463C085482F6C8F8E601A06F069FBE4FE891E29B73A333A4E48F0A384A59C2D +A01D470DE89DDE5620D6D20F94437CF558D96123D8D451F609CB7023C246A63A +145C16F1812AB2F82F7395A8F966CF3706B9ABF9D5FF13897930E4D7D697CBC5 +77D3D89709B89D5D83814E26619972C241A654B145A9B63E20A7D7394EEDC424 +3A0625F0515C60D54CE2A5B4D0506B130218A9C83C1824576C537A64A9922DF7 +934A40DB1783C98D9FD20E673CAFF7B532647689F1F2A5AA1C28E2005C1B9A82 +1B4A56D2F77C8B71D9945FF9898B85A0AD49C8079EC601FAB664DAACDD78E63B +BAA581FCC59C0B23D601216EE8AA69B63738FB5D3A461DBBD635FB18A4CF5167 +45F612C2498B80CE2F8E3BE11BB0F57CB712C4C0570B54FDCAC81640E6ADA1F7 +0835A1B7E8EB31E9DE3C11E0B1AE5CBDEA7645E764A767421B6682839BA8484D +5130B2F6EE7B997926B1B2600781EE5FEC641DE4F3FD213843FDF14A781D3643 +A267B7ABB5527AC813C367D58DA95380FC828D517AC437603F87EBFA64EA5E08 +3DDCC06BED850CC08EB8C61363F03414F9A23E99BC005124B5C348F422A67BCB +DC6A5D865B2225D085B249B7A483153FAB21F5043FE55024BB5027BADFD52A69 +46BA5647A04940348317990FDC91DB0C1E493E83972F1CD01150E8A2705604C3 +B85B501748327D9FD8D8EB4A878FFD72A0E8ACD033E03C1DFB35B8B1098BD2A6 +E297AA8E65E765A9D92F7F0E46E567B2F0179EEDA2F674EEF2ED7EEDFFD9B922 +29F72D9DA808D81C312E823E83D506F50650F7BA2F94B94C40D58A00BC11FD44 +880CF8918F7C4C3D6949A7CFC770ED162941980EFB918215F6CC80A7941FC467 +FA3D65538B1DF061BB3B5238126E01F319D3937A3241F02D0985326FD56D783B +24123E58FFFF3CDCC50E096A71A944C9E471BAC8F2DE41F430B319DD1F7F3ACA +400DC2C0CF75CD1258E3EB945E42D9870E774D65DC1CB182E9B7D0FAAEAF8668 +84C1077A71E5C95228915EE533BA686504329DE2480D36A0B13501944F900D98 +230D0D0EB3591C23204D9C108C56EE2920D21F4871E5A8824615E3001300C447 +44AF734326CB7C742222FD862729938451DB670697B79CD8AF1B00D9ED7D0002 +3877A35CF39C89B4EDB3BD0BE7D12C0759E8D6A35A241473CA9C9D9F74EDE95C +8D633B7DB65772E00D194276307C10ABF809750D2A8DD375675645E17A36AD91 +1F85F811EF4D5970C2A11397434642D495F67ACDB0B6CCEFDC74ACDD0A59AFDA +9BF9194542EA54C24C9F622525E6D2B8EEBCB8F946EC7906E6163517B957F4E0 +C0C50C8E2989764DF98287DDDF2F211F546387494A2A44C68505D7CEC67E5390 +CCE4D3D6CF672FFA80B2DF81766D1F94747824D7AABAB17667485D17F7EC5A61 +77F04289FDE1CFD903083F5CBBF0869F6E5414C4E20D63B967165C9D7248BC27 +82084BA13896A667728B5C71FCAEA6416951EC753717891D9F90674733A05D50 +D5CEFFAE43BB11B72B8F16C855BA5F0D26BBCFCB694C667E507FF94133927748 +5681BB4DACD9BA08AE6630E7A742D3AF1D1DB04A6C13DEA51063F3437A6E36C6 +00D592F06EFCC6C485758AB22A957C6C2EF0BE8FB16621F54EF9BE7150D45397 +9ACEE4DFDA63D14B71B1ACD42D67B9D862F4464F204A25F337736547C0F3E697 +EEA0459991E492FC28B75B25CD8F0A188BDFDA900480BDFE67F172F61A015292 +405A576326E63C87BD7140E76601956826516AE66730E6D57F5FD43C964055B8 +6BB09EB0DFC93F5B78A15BE0B7C4533518847AFFF483F428F7675E7234A0F66E +D9DC5426BD143982599EC2EC9AD374822E428078E8580837BCED097844C979C5 +9F07E4D5F902944EE1F0A8D339EE814745B4A520794D7F4DD9311AD372559AF2 +D1196F10BF336731499FD3DBA03EF6E49AA0AFE6C99F5DC9C99C8E85B1A972B6 +390176C6B6EDA3DCF0A3334B1971214483D1082789BACA1892A3BD971AC9ADD6 +8817F031AC322E16029C689971D06FF45284C0A6900FF5769B5991F290B2D32D +1C7156FC9401A11290EF37C41B82B902221724AE447DFBB10F85EBDEE66110BD +CEA3DF2351DCA1E65C972C81F2B89D6CAD1FB987C29F02970E41F6F2F317DF6E +CAFD9E7F02D48B5AF58307320C0F95B28A8295C2BC29B689EEFDA81F1FBD52EE +38057FDEF58BE337072D0462A4AE03F0780EC62F6D8AB4A242EC1534FD9C51CD +70C3F94B538B4D9AEF1BD8F7427E647B2B8C5E19ECA1D565761531B52935B095 +A31B00B40D07D4E6963399EB3291F47F63C45C5E5E29518D9759E31FCD861518 +DF0A34C519A18B9475309AE617C8A456A4D6CF01D8D4E6482FF509A5CDDE8BF4 +C2FDC963AFF50E8F81E1F644D11F53051AD7303D15E633A5180114F5704539CF +B8B50E017763CE474CDC35834E5AAD07A931A099948A6C848030ACE5837926D9 +7FD9FAFB25A099832D91047E0BC5C37BDEAE93BA64ABEFC831CB67AD8EC8A1C2 +DCFF7E1C18FC9A6EDF35F7B9642223D82A657245D3204DC8733176E4CD8B28EA +BADB93906825BEF461B8A29EE8F32CB65D18CBAF517BF1E766BAE940F81197D2 +95A97CDEF6439C18716A8DF5DB91EACE95F2CEC2800D9EE93AAA4F12C642D0F5 +78618A3EAABD4A9DBF0295F5F61D1E0A5DC4FCB513BE81DBE23B733994AE4358 +91668A7683C8AA5E74253CB614CB72A002551865155C3B22CC20BBC234977D3B +2264187531CB2AB2AE77044D7669139CC1F1E0258A355F8D7E45DB084F43E5BC +BE11D376F1B040A9F2140904D15AEEA4C65E463AC396DC2F8CF642803FD2CA08 +6106863AD763A5762B413C6098EE985699526C2F10B73D5CF5A5C8FCFB00A75D +8EE04EAAE2B1A1376AC4659C75DB630BC9D8A89EAC3A41DC65486EE0CBEBA09E +E5127EBA7F22FB56E11DE85EA3FCC5EF86C61D035D55F8A211294B66ABDA4735 +370C8909D3AD3FB83EEDA6DDAC31C7211F55DDECCE2A76D518EA3EF7C18F1D74 +E551CC3B9718C023C4399B694CE556071D4EEB4332499744308695D7FCF4007C +6C001EAD49D7726AE17109A8016038E923132F80C75F2B3C850658C69309E653 +F5E803F0F524AF61E8F70E875E79F32A22EF77670993C12431FF2740DA947B41 +6AE7C9D90C7712BE19666080CF3DEC4079B0C05435B1871ECF35ACFE8007113A +BF7C8518CE4A114BC62126EA623E5138FDE2B573B58F30757BCF3B010BAF8A67 +4DACBD96367DEEDFC21731BBE6A28E4EEA2A625AA682979B88D37528DD8D6E64 +56A2530BBA7700DEB84AB34C29A8402F9FB72E4A2F0AF1FDBDAD266E799455D2 +B5D4D3AA9B95BF26D6B2393B876ECEC41011C4636D4F1FD195E95764D627690B +A5236BA4154CADD7F34393FC514B1D46CC5EC334E0CCD0CE153F370CCAD25DC9 +F432BBB12D3101EF5B8131F8BBDEF9306FB49444CE206C0D487576DAA936A65A +4AC472BFD5AE7D4F0DB1DC8BC7AEA924A8ECA1361C26DED2339B427FC6C52A7E +6FB778423F3494CB50E41BF7DB32C1A0DE1621C04A609CE77F62FFB50180E3E6 +ECD85E92CB4D1CE6F5ED9AA0D0A0C3585968559547606EF6966CCBF98E3AF59E +FC505D0FCBA8A575AB0BEBDCDB3053FDBDD987DEB7F5D6D3AF920FC6B27CE0EC +3EFBEF16A5D809F604767C0C07D17F14636ABE98EA17DAE9C9835B780C78583B +FAC4E38B6BB37E203EB776BBADCB416A56D7762B88F78D5DC9BD94044234C492 +10534455972606A286EF42BBD52005BAB1F5985E653A4C1EA3A22E72CD2B2B39 +D42689D41F5F56304423C3E346D82F39EB4AF398A003FFC0EE4CE90D801C5CF2 +85D7F4A894B2D42A2DEABE0A19749EBFDB6D2548AFB150735F33FF200335B427 +ECDAE0800F8549EBD4B6ADA45A4969A58617617F595E10FFEB0FBEF422767A93 +E95CC12E99261389A80BC08965F9315B286EAEC4E543DB7143353332A8124B11 +B0E1A81939228883986EB56A641FCEED024A10C67BB874A379D3AA3988F8926B +A351FFCD2E957A06E74C79E17378CE552CD09483FC8945BBB64D67F8CF39E986 +2D1A5B12F15CA11F9DA9DCEB4966C178AB5B1943E9161DD105E62D41D14F1AEA +EB4999D98815FD9D21013B2689919AD238A66B0B12B4C6F5BB424E44A771484D +E67B57326A207217D6D141E267607D4C66604192A2B0ED182413F04C37F380DD +7550442AE3E0F86563AC34FC580CBAF52D4DE3530FE96B2E2869A2784526CBA2 +279C138C1EC9F3016955D5E0FC2DA6ED47D61F837FC2F50A9EE782541C836539 +1DB89268F6A80455724585AFF4C8617B20EBF9B9664712F5F7235A497AC3AB3C +6917218B2D18E57472F48CCB599C3B4F2892B8157FD93A4B9BD5A719888ABEA4 +914DF3E56D33582504876DB0062FAB1CCA694B9D64A49AFE1EA99A149B6E6932 +5AC364E9095FAE0244E648FAA9A9E1CAA5E94B085671A1C012E267B490B5D2B7 +52379A959E35337FA0C20F589C89C859D37F5502BFA3AE84BB9D81C56E8B6F0E +76908CD8958E3A1CBBA061DD0CCC833BE7C851A09B341ABE106C619714EF14B6 +DEA21DA0F2822D37E783A765F5BDBFCE8FB5BC8F75C56E3FC04AE8FE03F600CE +10DA2C120C1AA9C79DC8D987A87D1B1F7124AD44A44EDB67E785DC2A4FD7B5AB +E6BE85122340D062568D207A8729DA26B92DC7029117D29FF071D8F689F65D62 +7469AD8DD1F5E3CF1EFD2E0157EBA8F41ADC76644E48AC74E202D10DFCA98479 +49BBF66CB748C56FE70202C02B5ECBB1080D6834B8CFC8A8488BE8A502F0C0A3 +DC346A1EC38B172277B244DF4EEC610E50E1FD9C6A45F5099BE894D060160A5E +7481F3AF11BE4A71C49C4E089A12FBBEE7297360CAE36E35E6CDF16D9CAF3A24 +E680AC8CE756D3C945BBDB2139063062C9C4215EFCF77F2E7B2565F0A0ADEDD1 +F8FD0C4D7A4C64704B568B3BB66721D105D3D8A8D814CFFB5844DF2B3DEFEB44 +D3CDDAE7642EE75B59D780D7490EDA093D13833FF102AF7A186EF8F2A8770FD5 +69F98F812B29024DD4BB8F5FD49E0927E8202BACD9F773A1D4EC9E4A2085624D +A7566081270F322B2642CC758E2B5CAF0432E78E331FA5BF0E025B953CC08833 +7E80E535DC3EA12F6D8B0E73E354E3B358633139D5BC3B37102271A2AEF65D8C +DD0100DE27C285D228A4391EBE70428C4974E3BF16237C503BF9F17CAE80B5DE +66630F26D6082728D84EB505452ACE002D3D96A3CE36F0B7DB93B6AE1CDF773F +8EF4EAAAD384E7D28A0C499CC38903F7EE1889AEDFDDB6FF180C2776BA7DBC33 +975B0BEDEE2B02A6E34EF65AF208212A1BC47794823FBCEAB57E1DE0D5B4D132 +D31404C7E4E7B7E8AE1B8A90B078C6565143EDF7C86EA974EB2D84154C293EB1 +7338C5BD8F021D40D29F646CF31DD9AA14BD090680AAC8AE481099F316EC4749 +BCF5BC65E7F9A4F856CAF3E5D3CD9B06CB7B64DFB5C439CD92E4E1D63D829701 +2CED8107B4FB6A80E8DEBED078B3540BB5E055250FA529530B0B035D749AAB59 +B2205E1E405363DA6C0B16BE5D41F5FE3B16289D983B44BC6D3F589C4477F592 +3CD817EBCEAEBBFE6CC9CF1C0C94CA39E7EE2029007893C40CBF694AA88BDCBF +A0499F2A22760B4FF01EA292F9F2BF0060FB72421B5C4F92D132BF2FEFCD5323 +435ADF9299EB3606BBC7F1DCA88068E9A8296C020278C65CCDB5FB0D41433326 +D85B0590D0B4594B3B6897F8F51E56F8882FB8F37DF7BCBD41509233297A11CE +368FD4911BE32552CC2FECC9A98AFAB72B9CF21062B5B56F37E35457E6E27EE6 +9EA25C8B8933E38293FE178BD91D18DE69966E068DFB263CC22392F61D765538 +DA54523707A62EF8DBC323983FE398F8DAF8FD95F26F4032AB1A6E3EC76AFB2E +1279A60B8AEFEF52DFDC605DA9CE091F24491B7BE41177E2872A851B4DD614D9 +5EFD53076DFC5756509CACA9E69EB0380634E586E9F06B786609B625022AB77D +97922B1F2DAB9DD033BE2E11443F24F0FB85EE66A1985DCFF9D8AA93A11D0AF3 +9BF24E33FBCAF72BC85E6B3355F130672F0630B8A1D258718EFE45A51A522F66 +DF6D779B654150041D8F557A9565C39FAF1EB01153A8ABC4D05524A4FD160551 +2E09A4B4E1B446F5C944FFD0B770F7DC166C85886D301AC3483BC21496B09642 +A11915728923B01957241F7FBAB8238E79BA49B49AE2154F71165EC8EEB62298 +578BCD5050EB474A56839BE37A67174549EBC4DA422B4360D50797BEDB115C85 +3C3526FD46B7D1105428B68AC52680A53320AF24AA12D793D1F14E2560635501 +85248DB2F251DD3423D6C6722A1F354FFFDEB5006B599D47C7CFA26CF96FB4B6 +8057F2B1FB82E5119BFEF70384997A19DC261F62CEA0364D93BEF6DBDF85C5C7 +8C515EB0850D909744DE8720060FAFEC8F4035C3CF065BEE291599C5B82410C4 +ECDCA99D957871B1485E028BD5D837EDAE9EE2615F29047407DEAE94C05B3B4B +37EB9B774415CF8E6D759908FC40CED03761329355416C055C21A529F0E89700 +ED9136B16D9971CF1A0299D3703BDE044A8FAB6FA4CA7D6B26F379211AD70C47 +A8280E919091DDE0F9F2C9D4303CCAA9DEC9E6A41799951C6AF62F0DAC1123CA +2E3FD3046438002673938F576A96B2BED3E5B2FD39A969B638C1FC2BED379380 +6B86F68A2B2405A010F02B796F60D10AA97A835C6733C6E969CACDE2194680B8 +D76B78275EA088E01E67DFF1BD081E5F9E7C3DE17AAE4CDFB4E4FF98A22299B8 +BC3DA60C4C02DDE93EE6821A8DB3DD1B17022589A333B7323509CC2AF888BF6D +EF902CCE0D33FEE46BD8A476D27C3DEA65F6FC9799B40391544B8A42AD5591F1 +3E8D87E933AFDFBCC0DB880385A86AFA73365F6DCA9A1A8836579FCAFA0ED18B +7F2A42FFEDFD233767B7247455E6D0CFFE193B5B6FD6EE0273A32DA45DAE7189 +96A2FBBF5049380345BE379B84997C0C7B72E34791FD65E38A44CE1CCFC98ED6 +D1DF926C4455FE7FCB544D687B70CF416A547D94A84C9DF64A61034E43106093 +23A4FB1754E274581CB7D01871A8E00AF352FAA6C1B24FD27343157B5B2709EC +625D8F85192393C682B739EBF65FA47BC8FA5DAB1828F4B0F7699C1EAEC74E55 +2645C3E7FF03710D24901FFAAD7BB14A12003ED61FBE2EF0EABDE9B02FB9FE16 +E0638DF3ED8DB8A0DF8EE978368913D3011BBFCB8DF718FBB78BE8C0443EE4D9 +774F5269CFEF93D57667F09BC73FC37DAB996CAB3CEB19BE1966BF7735F5D8AB +6404B66C3760BB3AD191DCB23AC2ABD884D833DAAC88DAE232218AEB006B40F9 +9C0BE61B420B0EF3111AD76CD972EF61CA05F32C450D30AF955EDC63A3D70EBC +D76C66F83B7E61A149FAC77884C78494D576043E0C44D5161E29D8F482484494 +395202D50B9776B54A9944F80AAAA81E6E3FC8D6FF478923E4975C8B591C9A0E +094F422FF675A1C04E736A827A6B42C8C91AE861B46F490A77118ACD7496C339 +1A2E16CA94E34E2C61245E5D54DDB5A8AFA3B0A0C04F462057BD72FBF9CC85BF +98808D73A036C2EA1DC6DFB3C98239921F322C3C3BB4B05952D9F055466EC977 +648752A0E9F8C126BDCFE2DDCE5A85A5B57685F3F534A6460F8273F385BA690B +FB3EC6F19B4DAE1DDF8E3CED5788350CBBD3832EE84588184C88426D82687614 +42B99AC324BB7D51D716B0771281A3D209AAE3AEB76DCE73093375D4E9740244 +87C7117DF8EA6CC7B99898363B1B407C0B5CC18C597832F1557E154C7D4931BA +79BBBAA593F473218AB0D1798964605C02A2A60682289BA88115781A36E05AFB +213DBA60AD771F9D9C332EE58CE4104B4E3213D6C5571D09F4EBA3D85926989D +A8E96D143CA0364C780556E59E39914E4AFC988A7BC7B1EB352D02F753829F5A +C6EFF13BAAA37AB5A8B62510D0DD373F5C0DA7DCCFEEE724F0D7862BB73092D4 +55C7E0FA43FBA607E4EDE16CE1F875571DB09956D6FD53FDD0AE47A91BDDDF60 +4CA2129A9EA729D41264A039D4B841E207BA5A2E8B81F5E866F7944E2E432C93 +BEF83BEA1276266B1D37C2345FA232203536A880BBDAF573B7CE9855AB7A2574 +0D58567235EDC86C82D073B8AB94BDDF7B8FFA4821791D5E68CC0AF581773F02 +4D27367C2F3CE426E28C2FE6C238BEF5F4277111F624F1FB2C0332D464293AF5 +81765D8A0DC5B50915DB1155A0453F1FEC0D432FC5868F5851B888E4F1B7FB08 +9D12B61C3EB0C8FD63D92725F2D16604E12E3ABBCEEADEEAFE7368EC205B4861 +3896CB2A9CC7CD3F8D345BBE5A0B2A96ADC7D66A8A241A652A247F555BAB37C9 +98CC5C16F7E6C59373C15C4197A03A43609D1DC9E210629140F440FBC85C4E6D +F120EB3E2397A760A08C8825E53A5D5031C3E200CDDE60A29992A76E3D70115B +809445837F16E1F30BBEF48DDAB6900107E371318BC7A96AF47621872ADFE5B6 +01D78A37DD12EEA29FCFD3E9E1DDF86379280062D1D3A542A3210A79618702D0 +5D8A2707395A5D78C698C7FAFB0D1345D977278210E75FA8A9D611242A07CE8C +7F68E96AF1EB5A0A9EA7A73E044638639BD0B1E0F4F2FB669DBF6F0CE59747F4 +CF7DB5F4BF5423900AC729782077F36373EA1815BFAC07B281B4D4460F583887 +5FC0F99FE28826783D5A1080F5C8269A54A9C15D787ADDD9BFA8CA0EE94E292F +4F4DC1320F29C6EE65A2D222C56F468D80F96153D2B57D83FDFA444D34076F2D +6EE3FC065A7428452AF36B19A56DE3ADC2936E1B6F6DAEE66D6B577F1A4B32F7 +4BBA61620953F8457F7AF03011B76AE28940FF69B61DD4BEEA2A98999D335595 +193A8189E521588AD09C7866E86B52AAA822F1C58CCD30A67F2CBECEA8126582 +066967E4DEFED674CF19BCB9C1D72DE685D8618368A1BCB59FF49721A55275F9 +F1F8A6D5C58C232708E56C8040AAD633347378E7F60E30AEEB95D9925EF69524 +AC0348583C29402388491A01138274792A1C728F6ED2ED23491180AD718A2B43 +7F7691C09E7008ED1E8A49229F41AA10719339CA4EFA44FA24C6D1393ECF41EA +7A1CB96A8F4EF84305C9999BDFE0684EEBBB3B3A4A9498D89F3CD588D31FC00C +6AEFB7EB9650C2BE752B819D2B68CE36D79F538FF203748B6C491C51610F04F7 +43BDD86DB26A2B905FB8E0601EEA9F7CA1E2B26B005AA8FF0D451D4F45C3E6C8 +22B79AA3FDE7E7D95B91834C3D01E94356BAA6164229AE7A3F82455D457F2EB1 +DBA0D7FB8F79EC435B59F25EF6F9337C635655EA13A8A04F5073C3B6353A0004 +D9D85D824BE17A94612A3559685A42224CA59A9F55058BBEFDBBDA5CA519451E +DA0077345ADA9205320586AD3B5568DAB951D8C2F998B0BD8C1C01D3270AD982 +2D391EA3C8618293FBC09582F21658C8EE2FDCB9EC7FF8504ABB9D5803483DA8 +A31D985490FC989E75288C5E8EB1A3CFEE35777B2C64918AD3EE6D2FE5F13B50 +9FACA93C0645CD9BE90BD7E48CFE25AD2C6DA42234D7D2E9DA83A0A0271D2110 +00B0A9E149392AE7072ED5D31B088F7C1E4447D3E5423C29B5546A26B0D4C1BA +7B8CBB26BEEB492F6EDA6B03429598B28FCF3F27AFCE1DAF8E7CBAA229CD836B +DF8BB45825DA2858BF9DBC9BCB30CF660C7FD418EB3D7ACA2BF3A38D304A38F2 +127937A9296041925BD54796FB2BB1B01F0E3C7C4E7304C87C0CBAAE4CB713D3 +69A10398CDF5C40E43B301BE17F0094EFF2BB3527F44C1F0ADE74549FE2B290B +E84B679A4B2D5FA09ADBA16C14EAFAFFECDBBF13E9C395AD367EAC66697AA240 +DBCA20F6F84CECFE2742FA6BA9E9597B65ADBE892B4747F4C0C59890DE22391D +469AB1F8DB6B962DCB4F3AE6A8F7BE07DC903D0D6C1C00B1A06B51B12A418720 +8B03C294EB1336319BD0960040AC293459EB6EE4562BA6ADEFE9838BA89305A0 +20E11073F479853A856B3F994F717457416EADE555F569D7F9024CA0D2486BFD +BAF47F3F006B149DFB328E836C3AB71210E42A1269A7588CA3BA2FC80FA64B42 +91B01A1D58CFB9A2125B161988E7DAA519907C73843EC08FFC502022034ED1D1 +3A27F57F94FC6E57F7B24348D66D198C48114E4E936EE6D2456C5D61FD509182 +A18BADCF9F6014823E6915885273D91C173CB58C1962F640668A86EE2454E318 +F5CCA728BA2035EA749CC674E832B90EE789BC9BD0D93959B901C006D4A57642 +36ED92B5AE29D8BF29BC8ED3011D4E2E1A180CDAACD9679D95F3685CC3FB907E +53B1FB857EAEAEAE33E5B87F1B53D7432258055FE02EF80351F8651E169DD121 +14654E913B701564C9DFF335B44EF9E7C34C891E8D5B4DC8AF49F1E8AEF69C2D +181972F3558AC3A9EF3649C5A8F62DDAFF9E15B8540AEB5D665FE8C58A7819D2 +E945305CF8414E4C82475C6C7EC10365322E0D1251AB032D2B53986AFD68F5B0 +C2E9BB2BFEB6A1E1BDFA8DBC4183DD875B6E09D9D7653C97569AF9160FFD0177 +3D23E21C59B0330B6034F8BDB5854B6CC73463DB04BE06AEFC170A9A0E356537 +99877948CA4CF92F1B24267A1BAE1B5EBCC70D92CF76D63CEBB004B77151AE63 +BF957222499C82FB04A976118FED7C15810F7CAA98C17E06CA6712F318405E8F +E40CAF5568AFB6464B10B409178F6C2FC5F2E1659D5370004D8319B76AD4E24A +EFEDA214690C5CD3E0281612E90822632770CBCA36CD5581410F0BA737CE5581 +AE466B3A4DC73EB951818BAEF2718749B834A3A4C7A7EC08C123069FBDA203DB +DFA7B49135B6C7872B51E25F4210F282BC6D6F429C14B26BAB2090EABCEBE2C3 +C2F58AC82C68C557C63CB2B4EE2167F7B52B444F917DD54AC87D21730761ED32 +561165CB25CDFBD83C1A718BAE119AA7331E7C99534DC68AB0996A39AFA5237D +FC1007CFBD84917E667F53A49B1BA38998F29056A0E8972D5E6CF04456F63732 +6B0656B515C865A55E7508BBABD5F5AD3F3FAAE9C2081E2D32E5DDB16C3B4ED9 +AB0F7B3A0929E7775B0FDFE576E15043A3A9D61434FF0A5379C2266BC4A898A2 +A77B5C032629C85724CC1B91608539A0DC2CCF7DFC55021C75350C0EDDC79D50 +0A577F2F2960175A90515EF6F58771CBD2D7DDE0C78AC263AA2FC00F57EF85C1 +50ED7C5513B0E7960D2AF0B83BAE0D9B696DE437ABDE36D128B618B872AF1F6F +959D1871BEC575BBCBE847622031307858B24B041DC8D4221F1C6DAAFF7AFE5E +C7064515A0FC41A267943125A71F300BEA8175B85668632CE8D65D99C75C3C6A +3CE8CF0165461DAE6E57B5C92A2EF499B3B657B887D05F8E8B56759E23F6807B +8B3143BB22299DA9DC600CF907D983E4EFCE3DCB42275C706E1A7A2D47B5A9B0 +F3DC3D3B279ED66EB955E2ED9E64F660050A9C1629646252924412F639616A27 +1A6C4FFF63BE6B0B616751A5A80154B18BF152F53D153FB21A6C269298D54774 +38331BE0DEB93A3D42831ADA931C653006BFAB39162AE1D97574CC0ED7BF5C44 +610F6C618178CD9BDE88E101BAB5F278828B3622EC01DF8D4717BA72F5DDB4A3 +BA3EBB687C866EA3405D8C11BEACC5DCE3076FC8508996D51DD1B2AE89D37B12 +83E11FC3E41AFB8B497F676C5E1D161BAFBF18900D50C03CB6CFEFCFFEB649E4 +198F1453DE0BBD03ABBDCB5A075CF618978072C47C3B4A24043B687BAC3AD657 +3657A9A9B3813C2456D2DBA2D910D7DFC0B55EE4EAAEAEF8BB07204F0F537CED +B8F67C2738B5456BD9F0F22C6E54EAC7CB905375C915D0D662060360ECB10C10 +F30039B9A5606F671E0EE132C5788655E4671F2E79D3AF39118AFB95EE5FC061 +BDB869E0CFE549BD106EEAE8EBB6A6DF727FDCE35F0375E95B27DE211FE1ADC3 +90BB092E442046A7E5DC902CCC3553CBA4912D989ED8261539DE69A871F82C99 +06282FB2E8105107F9B443245FA74FDCD2A47673DE6E2F631D3918374AB6236E +792D5DAE1C76F3FE6A7C73346D1E8CB2944E382E7C31F99F6BD5029DED9C3E54 +984492F4B99F10FE5739F6D5F6F05426991B8495BA4B8B21002CACFA1FF45A51 +6B76D1469AE3874D97517A32B9BD998D2E4590862803544E33330BB869C5E3B3 +60BB9FE9B9756D3FB048C5A01A25B39B8729506D0F392350136C3DF46C9BAC76 +CE450B346A274AE22058339C6DE92E6CDFD584F421756E17ABD5F5DE2BAE2D7F +547DD3CACC6AA10AAA3BEAA1BE9651527E3B7CC5F11737FFFCBC52771819DBFB +4E6D3E71EE6C4A0B24AAE5988F828CB5392821FF2195D3452DBE0408D0B87669 +C6A630B6C1E00D0F1CE10F1000310B9E177F6253BE09247DE827B97FE02F2413 +AC5E94569BAF3635B4C5936BF1434FD7D5971F6286BBBF3102B3CFD68AD25993 +B69BFA3C89F4F4C777BBF3190D1295957F9ABC24BC147E8C95202A6CCE6BCB05 +91B821B1A27A398AEFA3A22ABFBA4227C5D0E0E138FEF04391E39C66870A77DD +5D2CAEBFBAB1C5511BD62849EE9963D536461C0693074DA942864438278C2778 +2A49489EAD7B43340ABCF99A71B9836A696995C6A459740D58DABB5AFCE96C08 +B03B0D403121744ACC6F475E194E79A30AC2B165BF302CEF914D34777FF1CA88 +46EF2376889244CE73C9123542D3759DF83B3AB2F8E5D4865FC242058AC4C337 +96E923EFC4FA1F23800DA6B51D6187EF9F1764D15FC343C5989760998C65C642 +C4201ED35171BADFECDF52AC6CDC58A0CA988E44FEE389A599BC59395969C211 +DDF7969C5922950B0CA4B0D9C960AB1E16A60BDC44B9F90D309EF1BFDEE1949B +87B66449FF949F1B935DCB7B492D4E1E805167B9B5FF1454AC7D5409E2C8BDB6 +13B3DC21A3A3A834A64BB9C9FF803E2754EEDCCC140AB0D8A38A4B04F78B83EA +7BDE25812DBBF98994D414F49D560B38FAA060E1B8B5BF985C04D425CE9914B9 +6EFB14ED4DD7C5F5CCDCA97EC2AA2CD6994A140004D12F7EBE5DCE90183592A2 +7F431A2AB72AF8E4F462C020B3166583C05F3A1363CBBE68DBD024ABB7F99523 +E89696A976C173D373E4EB4B20671F010F1F7A186BFFAE0152A8A38F0E41BAD0 +8543042253DB5F848324A27D0E681FA810AFE80151BB2A7A97594377ADA7CA6F +58EA91BBFDE300C547F762D6D0696A4C1A145191F410B6B784F740B8E0B3B855 +56613610441A509EAE3F7585272FAAA54329831524A5079F6D78093B3EA3FBA3 +12B7691ACDAAC0611499FC658DFB64A1A7B0D048C82050D8912491FA1F5AEE1F +E02E423A89119C25AA0F89EE27882697E60DCC0156A721528E4D449AA5B9AC21 +9F1D343CA479DA22D4DD4DB7EBDD46D7985428D4E799D9240AD52ABF2AA64773 +D4319BAA29ABEC21172CAA7C0761F78756D3C72A0C921EB3AD83A850FBE9A583 +EA1F219428A23FA044BBBC6755F512F7A8996DD7C793CF8BF7FB2277DB8E28DC +BA3CAA878C7BB8D04343B7B9E4079EDD1ABD862B8D65FE1E305BE631D3D03700 +EA13375B58FE76453947CCE3A01890CFD4F91F5ABC705BBB15 +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l048033t.pfa b/client/shared/lib/fonts/l048033t.pfa new file mode 100755 index 00000000..a56b5894 --- /dev/null +++ b/client/shared/lib/fonts/l048033t.pfa @@ -0,0 +1,1267 @@ +%!PS-AdobeFont-1.0: LuxiSans-Oblique 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Sans Oblique) readonly def +/FamilyName (Luxi Sans) readonly def +/Weight (Regular) readonly def +/ItalicAngle -11.3 def +/isFixedPitch false def +/UnderlinePosition -36 def +/UnderlineThickness 72 def +end readonly def +/FontName /LuxiSans-Oblique def +/PaintType 0 def +/WMode 0 def +/FontBBox {-219 -211 1101 993} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078989 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D831E44DCA3B6490FF0789 +636294029DFFA55E327982DD4A2A67A6FFF480E29F5A881EF13E768B43D431AC +37F159650C27EC72157C59E1AA122FF145C863CC787E9A7DC23FA008BE85711A +EFF0F8EAC9648157D8211D40578588623322CC38EA02A3880326DF2645BD3F64 +08412786DCE5E604A2A62FBB694CCA1E173447AABFDD315C766BA891E3D75393 +437A58C7BE654E8B56EB2FCFF72BEEB66DA88A528F948A1278CD8C27422AEC7B +96BE8694A1B33CA185601D99A08AC4905EBBBA42E7751122791E5150EBEC7423 +ECD39B2D6D6A8D2A7B920E68E80ED6BEE52083684530B8484E6475D0646EF488 +BB1BAF858685DDA12D8D63B4D35DB9F9E5C0459001B27DC28E98E154771B08BE +055DE6C18C9DBBF7892717EFE2F18DAE3B714528DF55A9BB6DCE3604435E4E82 +3567F359CACC0DFB39D23489E75D582DE8FCFDFEB6DAE957065CFBC65CD52E90 +ACA6024498AD723DDA921826B6303C7AF6121273B3C87372CFA8D6D7A2F23D4A +3B217CE35D2546E0B4F34A2B53F780AFF950AF527184D475FFA61133B9E1F3B2 +8612DBFEB7D7ADE93A68187E35865E23165C9BA77C899A309DC736CE27DEA6D4 +897D93B9E5FAB92EB8DAFEEA2E1C8A0D4EA9820860F103331EEC52FD564F17B3 +A6998015B9ECBFDCD47C10FE6B1D915FEC61720051C587E36D4D4C4BD30DB959 +8F0D1F67850B7342E41125F0175B287DC0984BBA8870B2EBD237852E12869412 +D864BF76ABAC386ABCF0D8CA91CA842D6D4F8450DEE0D405DD7B5965F69B0B96 +309E02CE3CABFD2038926DB8DFF48618F83DADFE43C6759F21487EE741AE2E56 +ACE575512F6AB199BC9C0098A082D4D4E21BE5F66A54DDEBB6CE8C00DAA5D92D +51C6C0CD9D52E07A2476A92BFAA6DDAB6581E5C5F83BA2385B852FE2367420BE +66C7455A817DA5D1484BD3EE124847B89F1451912F4A759D0AA87D1EB408C340 +D047831847B5DB5C943BD2D5EBBA1D959BF559D2BDFDBB69BA0DAB927E1D428A +C401BF5F2DEBFA016CF35B31F5BD00883043513928144C4A98A745D08D81478B +A5733CF67EC9FCE378C4940303BBBA71CE104B525874E93DDAD5ED06EC4F5E8A +917C2E46A4DABA795E3F72FBBDD96C88817A501BD3E639B0FA4581782A249F1A +C62D58ED43C26BAE32FD2E592631D9336CB4D957105DBFCE2D22586255E4D643 +A0C3BFD1EDDB43B97E8615FCCE2ABFF8EAA14702DD7E5D2795AC181014138B5E +314121F572A72E0EFDE33814F6219DEB0B31AF67F655FA5B1C28DBD78E322B96 +A1DFDD81E3F75EA43A7C1BC923344774F9A06E8323CD1C5A3764C98A95F78290 +C66703AEEA967DD717B6C11E2BFC4CC966D38D7CC05BB9FE5B98A59D0321BA6B +908524F664695D6C4AC6D36DC0650E792993B3C8BF3A5F9BDCF1DEE23469CF3C +9D174083F0666A94DCE183EEF39AED664EA96F369CA87C365BEFB386FA3D1C57 +855BBEF5FB778FA0D16EDF3BB714C5A0085FF924036170096886992647B0506C +19AD3E8183E108F85F22474EEF2FF1C792F900A7DED01E37DD0A0E5659BF98CD +FA278D5DBF3C8BEFC72FA3BC09B646D5C229439C3E3E835CF60BE09EB8DABBC0 +76DDBB693716754E3869C0FFBB425A3B33CC88681849B22F31CD98FC1B7EBE30 +76657F699667B51B1EF8E3B550CABBCA69BBD090C92898AD9834772DF8465C42 +4856D3AAC91A29A3B67206EA3F99A19DDC78433464D8A6315679916C4CC1F66E +F6B43EF15FA032F4BC45336D4119131936FAEF8A440BFDADF0B6F076DF1ABCDD +C3579F02E2C40EB55CF31782D8BB8B070C3BD4F48D0BBFCF331703851266D535 +61FD82D986F1D33C5CF6A9EACAB25D736AF2A1BEEE35A765BED58A75849F0068 +5210A5E110BEF1741A96C2FFC63C3F9D8FB305820203C1B406F3DDB54D869961 +E034946FBFC4D184CB3481693C579145761951F7EFADE27ABB4A0003847AD885 +FE585EA13987B334332EFD1A958CBBE3CB21A4F1C61AA81465BD4F524CD99E79 +35297F71EB9CA7C9701760857CE95295B397976516378EC7A570126DAF1CA3A1 +5095186DEF18373FD55DA596EE7688D86A367E02FCC0A36D564BF7DB6B263546 +79F4E1276EA549927A38DC8383E8FBA16BBB17CFC6B2833C90959FDC6B3F7266 +32F177624A9E26835C7C0E2FBEB1656E246C8BF4EB7803FE4AB0F9DDB77221DB +E4F134C8304EB13D8AD0FB57C4766133AF879DBB7FB52F25A555FA74F145DD3F +65990835245E26480C90E25CE74A249D9B8388A27A4BD2F63D72E383BCFF0E08 +B9EF146B512522DC267836520267ECFD46C68115FEF3ECC655A1FE092B9DBCC5 +412220BD4EF12017FAB9C51F198725E8F225DBBED24F56239C558D545D353632 +415F5688D0A85519E8AC25F27E20A4F7B903F62D9D2EAEEF33ECA60EAC68E55E +2A50DABEBCF97404687089D2B569EF016DE39DD953D7C458F77FCEED17ADD98C +C6AAA67F4F09E24BF7C24968B44D1B489726DC2E2BB3C481C676B3BBF0E623C6 +E649C80370023502121070725DF295DAA8565F5771AD8E8E2C82F96700D896C0 +CEF869F7EEBA4D2DAB7C4E455C10EB229AD97B669781182BDA58DF962823F597 +BC8CD6BDEA739C255CDA232E4B2256815DE91D09CFAC6FDBD8657BD9DCF730C9 +86315332754F25B6B3A913D786A2AED4EF78083F82FA1EA8EA16C0A6CCC6533A +0135BAC54D05B4553EFD04D1B5BEC10B60E1A621050CED2CAF978B057225CF30 +2322C543CE420CCBB0A24988653589B431FB84646945114A37A6780BF1DE812D +31E82FA08B4C0716E17F6831F4DBCF7EEB127855B88494315A98C578B5C5C03E +151EE2E561D90DD354E6697425A49E5B5ED079FA28FB845E4ACF4D447FD0A560 +5BB8D71BCDD40F657184F0005B40C2A51F9C0B3782B8B984D0F5552537C37BC3 +5864EF3457143C4F36B42E59B27AFDB623EE36C82EA73A1DC27B52E544702659 +AA4073FF40AC396F1B2D19E30A4A69A1723A5C2492BA056DC1B7D04BD4331E99 +B921369A7E502808FFF67C468440ABBD4E9379C0FF2893D2B9E96F32F9E2A304 +BBA87F43DB45BFA9B221EEBA8F65E0D97385485A49FE8C259000C6E2D66120E7 +492347BFA4021115140252CDB140EC68E2E404C35FD2BADB2A27D36BA2E11F15 +D300A92DB828646F12CC677EEBC545630FA2A8046E6AB14CAC5A6ED967644D32 +D0D915351D39913CC43E4C2E379C59762DE62C190657A6AB262F4D2CD54EEAAE +6305BDCD3D240FD8CC45CEE4291D905C01C05975FF24F77EF6DC03471E9BB834 +AE38A38225342FBAD3F20E3AEE82799CF60EF345BD46DBB56BA7217C1C887F89 +581B6A9BF199E4EF6B9DB643C2D0089E0AC0DD291D4C2A0752B7944EAE45E0C0 +A3CDCD4D5266C7C8FDA7D5D1F84E6C93348CA767108DC279D961CAEF68F8A496 +492D446DC08D83A60796EC823C1BD78872704B08D9FA16094D274398B4B3CEE5 +15504209BE801FC20D7CA94EF3571938E17168A44B36FB9674ABD86A83306CAE +D9EAB6D8325852DC6B10D798B95E56EB8FA973A2BBA555000D71F7D997142E36 +A93CBC654CF5966B93D599405BB73E5473EEF6B961452F14E0865F44FFBF0797 +C5693895A9E33620B85DFA530C480ECEC3D773DE6AD42EAAAE6ED9DDC951533B +635E40FC95A015974764B7626C71A9FAE2D672B158BB1557EB24EF575ECF5FD5 +3BDAA7AC6D8A5FBC83AA00F45F1007D1BC258AF9A672D9E103A74087C041F4CB +911F8DA6BE3CEBA90F205384E9C509E13D7B2B47286F459789FD24A838DE07FD +ADACC111B894CE32BBDB391242AB4FED699F01D3CD324F1627B6C6734795D322 +D9CF128F25DFD154B79304FCF80893C922859143320D0D9EFA15F2E03465E5C3 +070D93B1B8A13271D90437185C6772A7B3B87B196AA179FA45E7C0806AC25D21 +E5A085A0510B197C7A5207F5D56ABD5601CEB6D079BC26849DB73EBD4E3C802D +8BEAFEAD9DE346E7AB231F70318B1F0238C766D61943F81F94EE771042743947 +77E4A94D282D61965A8C2ED87E8439C080B889BF255B92FF7B61975A1AF63EA7 +DEAA26B4F0E843E7F4A3EA99AB6FCC3D9EAF6160E3BD2F4354605EB04DBE558A +A52FB6D8DCA009DCB6C601B876B742AFC3A23E15974F95967200EACF37191675 +2612AED74EEFF9AED8C10CDAE9EAC4838360EF1CA65674752F40B025A003AEB5 +A5919B705EC58109C2CAAB41D8776E02892099B9092A6D457ADBFDA01E85A140 +703575A7733CB865589CE31B02D11A0C00A947CC9D9AEA8BCB465AED57BC4ADF +061E66BC22D032CFE50538610836FC4AA481441FCC43007AC96BEF93EE9A3A34 +4EF8100E7DEF7C6A000FCDF5AE879D1A8DD4DA585C9A71303E43D48B16FB83F2 +FA5C94590FBC5EAACE4B55291AB239B5DFFD8ED7C872A8A35B0C82EFC57F42E2 +93E4A0A517FB12D9317B6CC10A2627CFCC61D350D5D0DA9E5359D97B7EA1321F +F63B3991C42F2CF06910322C780E5F47AB64AB236225724FE7552B9D20B80758 +0380188728CC0D3CDDDB0EB24112C19122DDB20F74117A55EBF797C1FB3BDF24 +F2008D619DB7C4625A4B057AB3BBFAD0DB7CA7BD269E30E23AF79F55128EB072 +F1230F61B2F2335E4552933EAA4E2FDBA83B68C4B728BE38FF1DE4D3BF0E9E60 +B3B1B5DBB32C20988804C2F8AEC791170AFC72CB1314B80CE56F3F73A4E660CF +A37AC1164AACC6E4FB408F222758ACA11306768B9563D26ABCE6712B5A8D9C52 +DD6B23BC73ABC37DD6FE71959ECC1068CEC2F7932C3097B97660938717DA89FB +7D5D36DBFE675083324354982253BD5397F872299E6E1CE7324A65ED0E36D9D2 +F4D8782C0F73F85442E0363D3E3059AC33E8BC80164D5DA72D5C5A45A02552B2 +EAD050CAE6B0568943DE1A68599EB004B2915CAF6A1CF0C847178CDAA1A1082D +A67CFAC77E43F21E5DE0B4E0C67F59113E98AA0908F7D84B4AB5E52BCBF44D2E +7742591D365B208AE0ACCA84DFF546069D8D3A8A7007B09AEAE51C00248BEDFA +48A4D06B188A51E9FB585694A79377E1F03F685C1E901D1DAB35E37A3E4BC240 +CC1203D603EBE53891ED663DEECA562214DDE8A6FD4145CD70D5C11FFFA2C160 +3E855E6F51F5702C127348920EF8128B32C7F355C491392075143FE94B8B9B9F +9D692E4937B217E4023F20CD7E215EC36AD550FE802D12014374F2B71C66491F +B36A3A167BD8DD66B5AB2209A161E45B377CFB13842198736A301B6032E48B45 +89C83613A7D8EBA90E721C747C3FF4DAE1B0FBDC1832FA1ABA7AB8ACA5AA0AD5 +3EE07D977E8423EF0EE73FD074BBF9BB333107C8CB8EE34C6453A92E8F00D97C +AA32BF9D5C29794B97F94B299F2B256225F83749D1804BE657C1AAF393A517B5 +A299757B0DC2927975118FCA733BA8D1AC62ADF30D850F2F0D15FD7CC86DFC9D +FE51B94E5404FEBA90C39EF938AED93E3D871780657B4B3B2089CA226A6C5BFE +D558B6DFD466A8AB3FB9B1EBF7DE20A58D73F7169F9C3D74162097245072EA76 +57C1E0CD95A52F20A9696CFB3A0C9B5E291AE98EAE099046459FC79DFC035FFA +2226C3484390AD5453CA6AF02EE6EF557D7091197D9D6B4A350268EB383A0E21 +432C9947F0406246D8F092D7B4E66C4F26022F23764C5FD368199A55043ED876 +DB5153DE7AB4517BBAFE8C7E2E5F9A8009953CC190CE2FE17D8A4A9F935B53FD +B0A7E99E95890FED19FD4DBF3037CD343F0DD60D976DC45FFD226BAAA771F8A8 +825BE0896EA5FB4F1630E3E094F4CE48BBB77DF3B3E02A4C87DD3DBCCEFEFDFA +49366A42922C9D6BA8B158D5CA984E39747767D90406F265EB3969458A0EF64D +3068C11E9AD68E9A7CC8D16B9A7D039C771FDFA7A53B57DADDC28A192E855F08 +53C1181C71FB478D99689750BA59720B93D59A6A59BC01E31043E0746B31F184 +4484ED2190B3164E5DC9611F4866ADFD85A70590F1E10D3342210182D774DE19 +69E8B4CF605F9DF4C801305406F5D6FCBB9980D63521C12AF90CDCD2C0A728D1 +FCB6FF4E863DA97B067C95A66DB6CD3793B140F62DD957769B62E5CABCA270F6 +0398DEBF12A0920735A29CA5CCC9E713A772E5F49715EB6940E4A9F06CE317BF +7591CE708F06D58EDC3780472793D31B359ABD417FC8FAA880B39E7957B90312 +0964AA59434BE4D1A758B0AF818B2FDECE8A66A7E8D5330576145B60FB56297B +70365939DA78E35B2B557012568991AFC0C30042E0EF061ECEC5718B473C9D00 +47C519445B354A2A80A161A49E893D787BCD72AF0717C2F77F8AD5883433EE6F +EF9792F7DCE4CDAB9C63E13CF9B5BB241C5EEEA9DE55737F194C2F614E80D0B8 +B52B1972D6FA1B08B00DE7D85FCA62277DA0BEDBBA20788C1C6F30A81392BB8A +1AF5EBBFBE30161C99A168DFAFC67F3A32DC0E31E5E08B89B0E377BD4FE7016D +8F65AA31FEA39019E03A5532DFBE38754B6170E0A1104AF8A31B47254FA38987 +90E53D9688161537F1C6CFBF189C792B2B3E7817CDB7072E1391457DAF548270 +2F91AE044394B948B167AFA7DFE2EE15CEDB3409095D19844E623CFAF4907DDE +965ADA237507174C60EE9869D7E5E8ADDCF44279B0CEB596DABFBE6D2ACE78E2 +46211F05BD34346E31D885FCF6BE36A2A643205944FF48190F448087D93CB30C +3E7FCE736771910C808CF27BC1E5C0960987EE453BF73AABBFA80108154E66F3 +159104B535BE89859557D664DCBDBE24E6A9B9AAE1EC3FE611BECFD8A0BAC2C0 +861A22799746A3F8C75DDCAB438BFC31431CC7113AB6360D19A91A275CD45503 +795765EE75349C2BB62ED8F062810D3795D653D4C3E4FC7AEE0D09A156F4D683 +BC9DAC716398B877BC4F4FE997255B26BD15132E963BFF80D6F74B102160B97C +27EF76D963C6F54668D47D8D28CD4CD8BF8A15E34776D3342BBD5B6331DCF1CF +8C960C7EF6DA0F04E136CE2DE3B338ED4E45C625BC8EE55E30FACE1700323489 +C7DFEBA8382EF6CB5E6A61833D9E92E68C8C3EA2DDAD87A3F2CE295D4A629F88 +70010FAAD335D042BC9D465C0CF51CE964853A3CB5CF28A1959E3C865A074CB0 +37508C4581F632DC9DA0241D0558EA26CA4F1FC705E5D041843E1066695BB5B5 +8255BAA392B820EFA34754C408516E11AAB38CFC02FAE7FD63DD7074A6E184E2 +CC740327F503868E5E520FCD90B8A35C82AA7CC73CB7131DB9884A3A5807A640 +AA44A3DBCEEF922811D110103202903499614AEEE640F3FC59E388063977C9AA +A9F8EFD1011B373B255A97FD7B78ACD5DA909CC4C93A1CB43FE7AC05602460CC +D1C216CB1CAF35CC28EFA959702BD3428F7D632425234F0F576620EE6B1AEF82 +20BE109D25F84EEB9B63E0B73D821DD4E61E6818399CEC44CB0EF3FE1344994D +B1DBC9DB8295A167EF8E5BDC1EDA72F083892ED899985AB0A3E18498A45E2B59 +08866DF7F498C3B2F7E23DF363253F9E98305DEB607409E5D0AEDC7871C40D58 +F23B5BA04228862950727602BD83F688C922D3A68DEB7D232FE494DC1FED59B0 +0D466C25DCCDBE438E03D313E569FBE1B6876622BA9EECC2FD175489A79BD995 +351E2C9CD01347462221D7515DBA4AD2C9C20C266973409876EEB6CF6D6EC08E +2E7A63E48B4A67E5855FECEA3C54F06F726DC0F2ACA724B448F9C4E2BA7C6938 +B6B3C6059DC998EBBFC735C9663F1A247697647E5D26FC8389E4F6FB5F69A18E +38EF7FB2B36238EDA100BB2B2C455247CC08127C60B9A28D024C4DB20C80EE0C +CEB3C166B6008D6A907F24AE05B63C9B85B430E35CE927A6D13715B65F5C67AB +E2CCDE71EEF21AC3FB69357D5916DDAB420EBFE320A253887CE8299F546BDA97 +17F45CFE9FB9B44D66993F40044DA0580276D975D803A05A027FE197C3E69D59 +B0C603D5BE4BE783BF55EB89256353DA6F7DCFAD6C82EB09720475388F813717 +7E2483F98490A0BB7646648F9412A4C4FBC5DE09314824BF6A43D101BCFD9C49 +365EE33D1B763EE47AEDDCACF09E3E6D9641FDC4F9E284FBFF5F294B5D0D7982 +A9E545973B54B2D8C9D6BDE55FD08AB8E694981977C77FCDE79028F32C83957F +26BD8CE3831EFC042B0451DC555F7E9EE0F2D40D2CED487607F48893E8696F8F +82CB5367D9FC51A77ECF7E5DE6B8BB8C626EA7FC74B0244A0BD2EC1FAD94A851 +2539C6AADEF9353DDCF498D9733631464FBFA298E9D23BBD041773D482749836 +38408C5D99794F76C6446C22FAC277F8DDA658D73EFDC46B2554CA6086FE7EBC +34509F5B1207C16727B2BA222684395FA168CB5AFC620533B2F96B75C1775BD0 +441201D19F2A70D8ED17863A5475DF5D6A5AB72770F1A3DD16B39E8144782FF5 +90E791130097DA74E731272EEC9BC60BA75957A5CEEBE835A0D77A4780346A93 +CC984FE0C9C46C069BB51434FF0A79DBCBDD5499F48CBD944693E0B9D18A143E +5441A3A57F34B00B5B8AF59D97B19425795D85109708F66F3A37E88E291BA6AC +5C37B29DACCF16C44FA4D77AA0DD573AB26DCF46D8DD8C33C881776A4FD6B343 +4719258FD5B4718BA8DBC94882C530D8F47B26EAD4E54B19848AF2D897AA7B47 +CFA178A45E213BD3CADA498F7BB93E3C74A3598C62C28C5ACAF0EC172F883BC0 +79376D48F6E7BAF85A6823D839AE7AE15458BB33C33E6FFF63B3BE3D76E02B32 +2A207D6F113E85E66112E81177C3E72A5B7F902B6D1B8B7542D7985D69DDB0E5 +97F03187C939369D10A417C300DA1FD0833F338232A00C85085354794AE9A087 +B8459A999A576151D01F30F45CE06180A55C236C5C3588AFC541DF83F444CDEA +779B7C825B740D7B21897818A5BB90E728A5F1E915D789FD3E8CF619283C1599 +ADB01CFDD7B20F4B9FDE8CA2413C6F1325D5E39A641E638A5F212F32651FC540 +CEF349609A36CD64B144BB229B28B167355EE604084E480453478F271D93EE51 +41D289565FDD80C24047C5DA6F6E63CAEEEB361039CF136F6BB6771CB997F039 +D8011DC0882CB6E07E419E90AD2E1BC3ED4EC481A2437C1E960B86E413C54264 +4B0D655C8BB8C1EF0B2A584AFEFEC63AB229B037AF7FEC78D0C0762B250909F8 +84A3937FE5ED394B22B1A4F7172070CE1BA5EBE02E93389A6451711D2A33172D +8FE716E279CBD94F81AEDBCBE43829536DCB6D816B5348FFAA49A335FFC47016 +40D65A9C2CF70ED6F14D294D7F00F94DD5E918704CE7BCA42214E9607686FF1A +61397C31A3E9D28589472CBED26C2B8E3AB2CC5DDFFC5936D1CF3DA9649A489D +32B719EE6DA53A1FC5A2BCE8CE665D5AE01EE561782FE7B3200A132493AB290E +E77BE8561EEC178552D26E0BAD490BAE7B2B2D1CC2AE29BCC85C3034F43B3BBA +513BC8375DF221D42B25F5558D19E12D70402A1BDA81C56BBFEE60F99D9F152C +6437B8D268FCD49673024BCFD4755E1A0A3436D12D2F6E71CA0BF0C3CCD00D38 +34EC290C7CFFAF3485C8FE848A543DAC0172E025CEBCE2287E958BC91207DDDB +3734DBCF73E7EB9E6ADBDFC35FE75F759EAD1D341C576F047106AA89CE30039B +A9C4155E3EB571E700F8C0F04E24D4841EEB8D99A1BA05E3291925820C28DDCE +34CCCF4CFC655D49295F159733DE276D962A8C5CB859886FB0CF642903F78E07 +FB0995EA336A63EC9CDB5D2EEF6B32C81B13D1848849F07B653887067115F113 +57855931115AE76D7147110B2F3C2ED20D7466B19CF8DED751C15F12C730CC54 +C86124A03673725D1331E75DD9E4A84858EBF5F2DF6AD2B0FD5842DC6372F5DE +F334D21F312501E790CBCFBA0EC9823BDB1BBB32BE5CEF2AC5906A368D6C39E9 +D913191C0DE05C20C24B10048368362E7702CF6E993E6904A85693B520CCE666 +7F7DDF2FDC2195CAC5CA89D230EF1C383403DF6E22B64EDAAF6A1ADE3086DC01 +1849B6865F7ABA165F2895DC703FC7536F3CB306CA6C3375F36CB5C7BAB8C78E +DE37462B465EFAE538C52267E0FD152467BA4EF681512BE295D3FB2D5ED98B37 +9544A30798D1571B8E794A4D3B6D0D0F2F630E2948B45B187EAC18272506E2B0 +8029D9ED7C5C82CFB5713B0FD929DB6B718B8C3A1211C9A9D587DBD58E54E0B0 +E05B89A429FBDD4BF4CF309E9C189A21BD42065D007DEFFF38387A02B90EEEED +CC4C5CF3B8788549D626CC25AA246CC022C8C1CA9703EF945139B8E10936251C +80C21FE36821D75D0BAA1443C3E119BC08FD153CCC20A52074C095D2680AB050 +D203DC0CDE27771081ED74A2C5E0718B93364680F6512BBA43F1357A70839CE9 +C7D010B2B90DA733C74E634BD0FA1D281D40779E4FC55139CD11170ED58E71E4 +A4616EBF68B805122D4AC069B9C30F7F9B8A204D740C17DE428781CABDABAEBB +02F0B018E812F00EB92D5D80D91A5E9755176BFD7625B80223C2E69EA237D8C4 +08E1A8B51CD142F48A760EA85D01BDB66284D61120A61EA87086227DD004CDAE +FEAFD1206700187B602FBB2E3CED6F333E6DB5425EC0E604A7478C017CF376B7 +D7B7548FC9AD882014F7598408E31000BD53B0A7D17A8ED5EB220D9D7C9B0022 +24DB358061C415A4A3DA467579F663357CB97509ACB840EF5C7609B7B8A5E1A1 +14E23BB75597312A45241847AAB21DEB166BB0452821C26063A14EF05B628230 +D63292B46CB3F53B7FEF2070D4C4D613479CCF39888224995D02369F5E3F1DB7 +27390BF482072E7DE300F0425DD301869878946C67DE03E713B69DDC2BED58EB +1E8FA154A787BBD1FA64D76CD35FC1502CF01CD9476B5C1B7A623F221317965C +AD3838AB18F185A9B20DB62391599043F31D1B0AA90C38C23174C7B018EB576C +B1C7D583F723420FEF9AC11898802AA768B4AB70748AFBFACDED99C1789700BC +A662B71CAA1855B83A55CFD1174DCF8DB001BADA69E45340FFDF0202D311006D +996FA17BF67209A51CF06B84BEFC6BEB2C60B8669704BC51BA6AFD0130F37076 +6787C7E5119A7F1B4D1CCAB950A4621C794A128D3971759E71922D9FB2112998 +4C50EEE88291107A0C519F68E411E47AE4EDBC9A269DB4830FA3B2914B53AE1F +A58B33B223C20BB614BF2E63405764A993CC250A728E4D420BB85F5829A862C9 +DD58D417A74FE8A828F62DA4D1D31955E57520CE2F7DB2E4F06B6179E55EBF7A +289335B17E77CAAAC62C6A8FF7CA4CAAC6BFA1326B5FA32FEFB991B0DD0B38D7 +71EE06380478EC47549B91881C3D6E1B0C66258423B3C69C0FAC17A802832D06 +0B9AB3088DEC73B497204E5CC44E434647E320C5D83F8EA2A7E25B5868957E9B +0E5347626A484C986FA5105920F079A5F520F5DE92AE530DA801E329C8592FE5 +5210709E8CF735F74F9CFFD32746E3BFD54A40E4C08AA4EADAA303C66E4417F0 +8D5B75ACEA41CB1A41A6788BB557420A9609400F6062AF8C3BCE7F603B73BACA +35BBB418E0802B22725723E12B92A231E0C35B37A05CA9380CBE911C8895F380 +780EA4E04A8714D90EA911376541A2CAE1A013362634AA04504D98DBCEEEBD8C +6DF498805612B3931FF721E63C8EAC4C74C0AC8128468348A2DB56702FFCFB23 +A6F78B6F7DD08E48D44E4DA7880836CB949BA8E915393E6B62F58F9D34568A49 +2FDF255FB29FFD0DA9878C19F2961BCBBA487A9A578C36476E6A49CB72BF980D +D64D3EFD82077CC0663290BE95C13BAA1C5C07F50B74FD00A1B50788BE98EEC7 +F0CECD0D9612B59E385BC644B0728EB209FB5A0BF334A8F1772A88AA0E4138A2 +518FBCFBA956ACC6F566FA6BCC66AA2CF374F0D457DC7D7A715CF066B08FF1BB +561BC5F6CC3C48E857595F9986829E38C6FC8AA8573EFE7FD6A95CBCDD859778 +AC517A3CAC168CBD3B9BBCE9D00111B3241418BE0B2E690CF4A737C816441862 +E25529374DE12E7361ED23E542BCFEE4D30EB8B746C2D133DFA2A68A8D2FBCC4 +6934E2ADAE482AE22DFD714F77E228F95E934E4C286E428AF5766B5AA22189CF +DFECD70F4D98ECBDA9FE483FC30EB5FC4800D0A5205F23F863C21CE0E4BF6C84 +1EF9E77C68C99AFD3EFB879EB1EBEA8ED7E8C4C7CF7DEC6C2182901EF483B76B +F83AFA9C1827AF5C3F6A29C36723E3A657C0E5DB55C198934FF5A59119DB5536 +F69CDB34DADFB6F596ABD7C5885103CC95068D113C3C17E9CA8C34C0B74E7463 +1D5C83DDB5B45D8EA510C279FAF577840958A13CF2B13741D74BEE4941A1C207 +BDC5EBFADB4CC01FA3F12D22E431BA17527C4BFC940A6A08BDE150C6E47D752A +5FD943C4B7CAE482FFB7AA27371A6C45E2CE4C31EBDC8337A1B853A74B2A17D6 +BC607BA9D38B71D86F586A33D440B616443F58A103521AE1D6A1755E74BE6BA3 +05E45006058BA47601191958463583E8D2F0985D6356D9868E84C538654AE972 +D59C6F48D9D3B929BA4704DE684A35438FDA0CF60B3D2E1610642D87F690A3E0 +7CCE4A5AF8180114A8EE9D360C8F0C6A033F2331C546D34FD1B1E95B9E7C914E +0074C40A105428550886A264C74306F7CC221D78352DD53E39BA99C1AC851E9D +14A3B0B9CCE04806615D7D90F377FA3BA50182DAB42EC6E32475AD56B8B1CBD1 +D265458CEFA79C68853CB11DCE026C339CD3ADBB44259AC7318B39EDDE33FE33 +E542E4BC5C64B36B159D68F59A9B2BC55C0343EDA853A4D9E6E3E53176F46EA7 +3EC1D108D76588C7A80BDB8DE432DE32CA3AC3C74ADFEC515372B0594EF82832 +CD7075AF87CCDFAD82D2A570ACF179B6B6A318AC8EAEEB99B34DCB1A14A52ED2 +E35A0EA8C1A5449D63695FA7E52847B7446C4489751099B0D2103FA57ABBBC30 +A77E6C9682D560D4BD9AF78B0798FD89623126945A09BCDBD5789F6551B679F1 +52EEF0A6603ACEA8F7B9E5B58C25D760BC078943C5502E3230A31539DCA5A7B3 +14562F1283E8FF98361D23CAA48BC78267F46B0255C526AA8E5800D0B570D3FF +C6C79CC39C2CCF320006298AE4085BB7E3C57ED37DB620A2D8B34F1E970E7020 +4C5D676BDF124E2524EB93948ECEB3B53BB3DDDE062293EF03670EAD36FCD0B9 +001D87FC35F0EB90B6CE065AD2040770E4CBB96F020F665E563DF248C12C95FF +C07EB290B8ED0AA843FCD2D04BAFAA0863143FAAEB275FA8321DF73D589DE07C +797027BFA79A5B29C03B560F41C999739CD272B01FAE34C0735820A9A78D75A8 +F89FF3D929D1CBD7B76707BB236ABFAB615FD25F4033EF8A2A9382C58A8C3617 +78CDF0F6B662C3785833F58F71115ABF92195968F87D49762536661699EA32F4 +E8B82036F147A0C8726FA2181EA36EE6D627F2422115A66EFA13A5AEB1DC6743 +0961EBBFE03965204975852DD634AC09B0C3C167F53C34EF7ADA1D0C1A09FE1B +EA96BBE639FDFFE69A5DFB097BE71FBFE695DECA330DC168AA85065345124FEF +E37DE2DB9E927F58DA629D912B31688B51B4BA61D9B8AAD2C552CCFB36274DC6 +9E6CBD67698CD4D16E75D1119A90A32373982E631E5B8DA9D648A5CFE65CA188 +F27778BFF26E6A55DF01A286E8F6376AB5A472FB3B2E779E79D55A41AEE83A00 +5D00E9CAD77F5E6018FB4C59A2F114A65FCC20EAF2C8E026BB97D1B94F9E7686 +B42A7D9A1A1DBD41DB89C4DC7FEBA4BA24613D0FC3931A05E39C4C6BF4D8E92A +11FD40EE366783E9BB2EE55F57B5E2C4B9C62D3217C83E28DA32D9C122149036 +CBA8F707B7D3333517F283612691DB9A335A035A77B5C4EB4B4FD5511346341E +99C55CEAE7FFEA94BB8F326BE2DE4C8D280FDD633CCB813B56F4E85FFFADC926 +EBE5C08265413E93C86D6F3CE187B09B0747EFAA8E25A153167A140E2D49614E +AF270C8B6FCC854DBF52B62DC238E83659B138CFAC77F86DF19FB7D5C3FD4DED +C688799A95A559368A4CECB79B7CC1FF10CCFE9111A74487CBC153A2248A9E66 +C6EE896EC885B43B73C18215CDD7CD8355BF63F81E4C8796502D4CEA494AD600 +49C684E376F5844FB4D02707A1F96A5E942EFBEE3359C77ED930EE904361B0CD +01C86D8DC2C913E7644821E9A30714D18BC6357A5FE23CD8C9866C8E8F5729BA +A16537D2D88077C7143116322F0ABC5C980DAF9FA8F13BCCA75B02E5CACFC475 +801A43107FE42A0CC87AE1A78B0F839197C02F2680F9094779C3A197574B5C76 +8D48F3BD89EAA1A1D98D6B63BCC31CEC0996BAA5F7E0057C2447E72CA708F14B +C458F47D91F356E24D91049EDE3BBDB7D1BBE32C4ED5AC7771CD321C3296D92F +68B6CA333B0060E2A6F5FA71D4A0CFF0453A788C1BA661DAEB4CF87557BBFADC +7BA7D7D2939FD8D63F29D5FACE40BDF71AD0353293E80988D111FEBF46719056 +954162563E759F0314EE7A0BD5367CA6D2DB23B8E33EF0A094B77C89E1DCB645 +8E1B168561D7925778E38208CD5970A2E43CE2A5EBF52E87273D21E7D35A3869 +CE1F1A0E07AFAF4C2CC21B80A443BD9851D8D527C1343E975EEC4512950413B8 +EA9F99D32A13F42A432EE52489EB370AA99FEDD2330B75C47DC86A9106D67FE7 +80192E2109FEC77E00F60F1127501F4BFFFF05167EF94EA7B9CD14049AB7AE80 +2AF55490FD8DA3C80DBF9ED6FEBD0FC03CC5D82194F950F902966279C4E84D83 +A7CF067E1D1F07EA1A31C93B8FEF995E65BD7DC1B3B81181F8B5954C7BC4B62E +19DC9B35C23652C15ADF50C84B968A12CF882D426486C46D3FFD964F5D6CADD5 +BF4500AB9B4CEC2A1AAED512CCB64071CF9FCE7E5357915497ECC259DA2949CD +9CBE29B3F9ADE03E939B636146E8A4E8AA19DCC0F8C7A0DC9BA422BBE4988A37 +6513EB6774F0043EECA9F241E6A827095FE05AA6BAB09E66D08AADD69EA5BB8B +F813CB9DB27C48F68508550BD494EC3F16589333B7E4A1803A5BE00C40F1BBF3 +835682C6242C479843DE30D6EB9088A48F115BBA988EAD5DFA2FBC018400D176 +840CFE498BFE4F06367B74B339B2317362897D6B4134DE01BBF9E9D9F980911C +441EA5D6F6548F4E87835A7B566C8471A03C53136CC7D6A58E77A702EECF4327 +89D008FF5E51A274BDB5A00D3048039287C11B51E458A4DB2A9481679A2C7FD9 +A30D9E8FFA4A7220F36A187D02BC85D76EDB1FF407F33E5E1832AFF2ADB9EC73 +32281F6DDC48EEBA894FCD14741BFB4CE477EA93640F8F7C7E8BD21E257477CA +F7688681DF0D3954A6C6794AD9AED1DA0C570E04CDFC4D3933D7DF89AB3CCDBE +E268AABAE4FE28CC63B84894DEBF941D3F886B0464C111B698856873F05910CA +A413A719611582A91DE699BC47E9C13B7A0F0B3E6FB816D5A03AEEB88A82ABE0 +106DD301196A40FB17E79BA85A6D5D4867E7D057B246BB24DB079BF42D1663F1 +B20A7E4017EA26B390DC39A57CF356C81851FA5775DB347A0DF1F174202CEA7C +E13CA1F2713381D9D9FB3A64AACD69C0B48C18EAFD68C6B6B3C088189E805ADC +D1F58F03E0B1BCFF4229CDE123B1EA5E026AF1B958B9C08ABE3B5D3E2F821ECC +3B92CF0F3AE909D1EE1E5158D1D70E0891D888E385FCDD4AF71CA1EEA06C7BFA +71D584E9A0000D508DBF6C18D30303666B2DFF6EBE81B9EA48D8D794763471FE +5FF36DB90E8C6D2FF2B7897FF64070F8D1982DF106E402426AD09A64B7AC5BCA +1C6DCDE633BC4DE9E8AEABC46E7559E349A0E905322F4B7E395EADFA8F8D959D +F0E28E01DBA51F7BD55163D95412B7E499C9B480B6638F1CFA2278CFB3B99555 +0CFC8821F3E79EE3362947A6406B58C5077A75E2ADC6B61DBDBE9AF3205257DF +8A7D6069D7B2C9721E50488BC754E94D1D8A4FD3747239724BB3C8F5CA2F88D4 +F69CA5F395B8A36141E40954392B5D2E3F3E49936F48E8B51CD931E53AADD3CA +32B241648A3CEAA5E2D53B8B0A8DEE138E3F4BF88D1BAD2988AE342E825889B0 +38B5F9606A6DC3BD767EBDF6DA984E28F9A203F015DC1B17E26CC038DBA71CC4 +6A3D5ECF75802A02182AA4DC7FD34438E59960BA78B9E11755B4314886681B17 +AE05C263496170AB1B642C34226043809F8F8CB80D30A3C3C97F07E9EF849CF5 +FCF99D9797AE8DFE2644F1D597A37BF88FD02891506EB46E3DCF1C4DC905B39A +568ED960C0CCEE30C5A075244E2DDFA8B568133780DCB656A537936924B7BE2D +30D00FCB4A82F0C6CA1E7391B4ECEAC37EF8A32DD4FF229E31D8982D1B876C47 +924D26DED97B91661E126FDB72057412C5DA49D95A2FA3676CAD58E01ED9DE79 +162BB27E9F2005680D82967F953A96A11501ED68DC6157894C3461E1AEBC38C4 +DDF4962D9E09C66323FB6323DC88AC476ED6FD17025A5FEAB7B6C6A1BD4EB30F +97C6527D6D836BA80E4F2A1C046368AE6BFBE132742EE6538DC48C918A1EA445 +A5651759AC5E5ECA97F21EE2DD6EE9B77B406DBAF1EA9BAA64AA075C57DF68B4 +119C681608ABD57E5A6E99251B000CD846F2C72519170A7750E01C1BF79C84E8 +0C24B2F74C73E3939BD161C67D2DDFB5451488B8EF6EB0EBB8C8012D237C9ADE +B04820C893FA30A071C8431E028D33D656ACC12A83675C598C4E5F1F4162F113 +75D9D193D32EB3B3266DCA5B2FC27AE87403191FC06DE4BE6B40950D60CC2483 +E9EDCE3525E6AF91CEDA7A7BFED86C6D2F5ADB3DD0CE502EE2440D6529604ED9 +0CAAF7A0B94495B5E3472B9B4E4E72EAB9C899661AA695F0E1DD191597C35CEC +11286CFD8CCCEDE2D696E60DFEE518FE2332532354EC36D4027B9E54B5C1AC41 +5D9087477E50D0074E93CFC74A8B2B4040C46D926982699A02547C6E5A95515E +C906EADFE24EDC658549171DE19D95CFAC7A3E49590A741E0A872F96766F7171 +619DE1436EFB3E29091DF36087E573ED4C72A81B41ADC7FB681D08CA20ABC35A +51BE69C85474E53D53F684AB7FBA6870930D72B2AC917858348C081334478640 +BFD6781387E5F9884F5B9A2F3F1377AF5FA2CA52EA68406AFAB6C91A888F47A1 +E002AA927D2CC11E2DDBA648960495CF1DBC184F6B4D5A44F1CBD67D8EB6FAC9 +76E386AC7DDC99C1D872500FB355A3A0AC805C1E00947F8B82B918A84B1AD2E0 +3E881C0E82BB047E0275CDB9E09E1580DB2EBF20FECDD095910DF6EE017D79CE +6E4590FE4F14BFE554C625122FCDF115A6C8D9F6FE0E9AE6A29BA1F7B2311716 +E37CCFCD0E972F8CF909939007CD86D2AA045ED816AC1F330DC706C3ADD1D239 +D3FAC4AB5CD5344994EA1978131472A279EB0A8F9B9380333CA610DB402B679A +0773807938FF12E8244ED2F0D75D6C5BF2C9AADEAD23F8D5BE373662C8485AF0 +66A33CF74C47C41995581B77AC05E0165E15173A956E59C6DF4873092C27986D +ECA1916C2E34439E1952CA26E948E90840495B9698C2FD3A729B83DC30A0EBD2 +DF4270B5209BF65B841617AD963AAF85FA87CBED7158A4268F2F9C8A15E9F4F0 +C665FD784CDFD2FB1DC812AAFC7239315E7165A6B09E85D55C23E7A0482A6EE6 +E3F7EF9C479F66538A7F8FC39336E6CB09A3198E701F8D9C1CD3FDA395962097 +DC645A28F27CACABC767CA49D2DC82D41FE90279348184E415ECE21B1A3756B9 +F7E10BE0C2002D2DD040983D479C5E1F8A95DD7EF37E795B7C0DBACEFA209C14 +A295E95EADEE1CDC8A35E72C77ABA8DC344D00E2186091CD6420651F6D67900E +67C6D42D0AECF3906191DE5996D7A9E7B78FBC03D5D7E9974DF81F1B203B6D1B +BA18F089F2A40B72E69C7317D753DE2495E9EEC907D099F22EBB8AEEA6D65B3A +D7EC581B0A8004F4BCA4067A66578D68CB9C0408C0010DCBD5A40D51494A19D1 +E586028EE13A0AE09BF2B52E4CDB383BACCB87914AE039A38A24282DBFAA40AD +76D344F1F86950333AC92AAC28EB2B07DD65C15877AC6268091863E89DCCBF46 +F7796E2668AE126B9A74244BCD97445947031D6AB1C300F271EEFBFCBAD1BF92 +779DAA45BAC4E773C9222E73F14F1EC37AD10E663F836BC3E9C6DD70330233AB +D8771658AAC8C8805D661334ED1DDF293DAF461212E88D95E53D5C23F3086DB6 +BC1BF93B1F0A90C0AD5C3321225F173D0E407D006BE11A963DA4FD5A1F189E1D +04E40C2BF9162ADF3F8B672CE9991EB8C422B504F03C1B253290A000AB95DEFA +6EF50D0F27CCDC324A7D8BAFEB8C5491377809252CFE69536FA3641090BAB758 +8DDF49F33CD14A87245F29349A09DFF54B8F9A743A5C20DA6A8178CB4FCB06CC +EFCBF812158F6169015C38D0003E9D06223D3BC56E4585CD6A74273F5204CC13 +14CA969003A6D705CC923E268760A0A97E36A2A21EBCCA8ADB66C3798C08DC92 +7797F5CD56CB80CC88D00E789A677106F9D612725E5E982DD14E5EE696DC8C11 +12FD5AC302CBD81E03089865560659CFD4B4B770BD3CAD2D8B7A8861E7A625A0 +078977713FF4E8502B21B15AD68CAD7284AE50D0FB611980B82F99CD8882AD82 +6736661B89294B0DB38F4C65603F9EC45A0897400657BB67CDA50A67C94EE235 +33AF76525858D303CDA26C14E355132C92E132EB84B0D6297FA50620E36895DC +B02B2C8562486AAF6D073E80CA875068774037CA16C01C332E799AF99DEB62F1 +2606727A6E4AE8715B98841FA84228DFFA642AE1789F45C86C8245807835C584 +BFE5F7EA749402E94A40AC9C72FFD3AF52510728ED95030C85816A117A6E4A7F +B223430CC9A9AA7CE31278DD472D71E47A2D0265EB47773D14961888020A0259 +64E9E24B35AC6F44EA51D1F55CF7C7F3D7E4BD97877EF6562B49A842F6ED087F +1B51BA1F1EBDF4C6443F4E778ADB0E990E5658A97FC203C6D210C16294C74B54 +104C616A58D1B0551CF94C6A9A0D2AED37A417E7C105D4EB2F45B4F547B814C7 +730342AC615286E4ACEADA9948C237F2F3F268D5DB47AC4663D485C60586245F +E25C0424C4E6F56FF33EFFC35BA38B0EF5A4B2131CA9B516F6586D63D73A13FB +867FF248CF66FBB2074098C05B3B1CBB401496A0D6B0F2487D1FEC7799AF3402 +00402CC895168C4194DCA7DDD0AA150CD2743DDBAA19A0EE9CBBFE6D6FB15C9C +C6EC08DB9DEC8B5D3F1883CE2143843EBFAAD522447809E38C1FFC492B8A7400 +6C8DE288479664226DBBACFA3D29E6A63221BCC6939604DA895617A7FC99E15D +72F4FEBB96EFD77D31B13D7B0494AEB0D286058FBBF013DC8399056C7F222332 +CC93202FF57BA3E51E10A873F20FCC95A776CC7EEFFB46A920E00A5B34FF82D6 +2D85C3A882E187199812BD1AF4C08FA09622A66C1BFF2AC1B7A8E36CC2C0C720 +4BF8DC761F23D8630C51AD13E55035A7AFC0BA10D87123FEE5E51EBABDD9CFEF +4ECFB3530DFF83347533286C93C4C728054785E7A60516EF699351CA4392626F +4697A64B3CE9995C57FE35878AD42BAFF0A4E511E18C94F740689D0C37850727 +4C48333BE8C6DF3E45204A752D791DBB8C972DC6F2293C46F8D4B06DC7B6116F +3AD7A9F944B99A92A603C57BDDA29E77F9419E4E9885280AC3270352A38A84BC +B10821D43020B2FFCA14452F8DB602EEC9201BCA8E538469605F5CEA321C8D43 +59660CC2623E613071B31A51FB9A48DF6238BD2A0625D74F3ADB1B67D51754AC +E5DCAD203DE36E54F93728D88DD3A9684078D04CF9417A79894597921E636C32 +4B18C4C3A15712B9E765D8E53612FD66CC91C6B6EA4D2B93214F57C7BE19428D +CE545E76188AF078C1CEF02D078645039382229BAE21580C5A309B61E2A7CAFE +8A9A5E378FFEC21F36D2DC50674A7DF0F542C1D81198EA7861DB611F93E50E41 +B1844C0E761CDCC7D9A3AA3F11DD2B6524CDEEC67936C578A47918AC9A12221F +6941DCB91587A1BA4D407E4CC7DBF883A4225EC0407B03303841994D254F04BA +A725F0D9061B52D72669FA70D694E843A80BE0D8543DA6DE39C3EEC5FBB145A7 +8A41EE0C62F2F67999F4BFD255D279501AD97B94037E9FABD4997DC02C2ADACF +82BD90C64883F4BEA139B8DA0931CA0C618454A19B639747CFF20B6741FAA7AD +619B8DA6EE7569E6FBD4BC8C48E5E604A1F06C84C492150EB01BACA796F111B1 +4A10F4B95B2148AA66104BF95D064960984BC2A1FA25C6BF7A8B6C9A5A062122 +B0D1D705F4BED1AB70D5609CF5930D48E0292C1F8E07C50411F8B2980E36BC43 +10AC3CE58127BDAA32B0F771119C98F8FEE653B93BA2080CDD5CC2F5A2D96316 +2E40D79486B2C9DC53A6A92F523263C0D789EAF5A2EDBA95F5BCBE2AC4E53B97 +9870800E256D67DF46524B6D09714C3802318C52B7C24C2A37832E2238487362 +BA7DE4301CF1459801F03C5D4D3E83D502BBC21A4B0BE461FF5DD5E3570C8DB6 +6373ECF760002A8D36EA3AFA7B513AA886F44070E6BEA83A65F1103BB33505C4 +A17B2EC8639359548F49F5005107BD2CE0A5FFCEC5C2ED08C9905C5D31C36247 +961A0A1638F3E8553D5BD8CB1E8273A552B2BFA3E0B20024D0D3E2C710BAE20F +58E952611A8937E30E1A3E57DE281897A638B4620E485A3D792D650F07806B12 +EB8803D2C0AC01B3DD975B461BDE462A5063BA108DE6DAE031439764C95C9A28 +84BBDD4AD3A67671883623EC2580ACAA99051C344D3CD418C583044813554C5E +0B27B7F42EECD3D54BB7B57A788CE239F0B076029EAEC2257A5C8EF9B1506B71 +289FEA35762F47EC6D30254499D4C2AE0BC6723E560B0F6C8C137719F68DF348 +73DE963A4F912227AF342F82ED46FA1FE7EDA82B59CEF25EDAF5764C66A899E7 +08B0715CB21C10B318EF66E5454FF1A7B324EF19E226EB1587F8AC0326F55D03 +9290EC6B01A9EE33A1ECE1C3E2FCF4E3B7563D3A77FB4D40BBB8FFED1C858042 +8D4A83EE2DEA47CA2E9A9A59570B0C8448AE0F8C05A4C205BB4C20E37ABB860C +82DE3869F24BB6882E08F045DB9147D6E83D82D0EE5EE7596FC89B23553039F4 +449C6E2629BE1E78BE116A98E435CEE7CEB3D70D98AB93F766468E307E11FD41 +C26FB0E90F6D00455E229C987A128FB36D50BEE7953192FF409E5D72980BD49D +32AB7A064CCA9431BB605E68F5EB862218762F7C3094CCD0206C0383108222AB +EA8129A384294BB9179F412E182ECE777D34269CBF7607555AABAF56159B724B +67EBF49667E47B7988E5C81422540766D26462046894A61EB9F764746062F06A +34C3EE2767798433263E6D3653FCD6E4C43E6A5F0BC762E77D4174F95E7173CE +A03CFF3A204C72773A7F6C301AD3C418A93042A5C479200D13EFC4229BD31602 +9D4ED8CCE127A1A900B5CC3F9B292301DA6CD4AD0D5E1465BCD50C11FF9F4727 +E4BC06013CA5F0FB6B4E26C5636217774935F63584F69D7797E6A871FB51B3A4 +7E3108E160D01C4DA87DF33FF40B452E8A23144649A72A04366B1B3B026C749B +A897D52C40808BA52ED82FAD0A6DAEBF41F24D5B9C705C7F3AFBF38C923DD3CD +1DA764DB623D1E0AFFBAB095E9C6FD5788E91CF697FBF57B1525A0164E536F82 +20F532DDE94CC1C2DEA0AC7A41D75C50E875D605DFAE0FFB07009EB4B627662F +C1A17A5F8AE3DBC794023639D4E4328C55067A8AC921EF54D272E6F6C60EDB41 +AE35943D366D41F12C2BADD1A2BF17429EB871204A309DD6A3375992111D9AC7 +902E0E7A62B85A1BC6FD35E11CC132F37EFA0B96A733FF668EBB8778FBC2B799 +33AEC8E08E1576545B5BF0E1BA5D5766F22E29E51D404C25F3E54B77D6882DA4 +B491536CEF9DFDFE15362DE2FE5221D30D2D6F15158E57CE561C88F277FC975B +616887F1ACBCA8789AE0B854DFD86FB544192E0382BA380B79076A825EEC0315 +35C892FC89E778A71EAD7B9E578F849E10047154FDA362DC45E5FD1865ED2D5B +F701D7AC0A35626A34BE036EC912E4C4C2AF61B55E75B1AE8D8FD27767696AE3 +AFB440007C6F73DAA0AA62C89081D7EF6B02751CDEAB00488A591E8F2E79EF94 +53BD8FEE595A98A986BBD053A3CB86DB5B039B0F732438643EAA64E5DAF3B6F1 +9E6B4EB430B9E7D648E729EE569871AD7DCEEDEE1851238DE9E23BD10E75B7D1 +B7E02CE3F22D27D7E262BA786D74EC0123DD208030553C0C5E1D538604F7F438 +858D3234D566EE22C36C2D09009322AD41D99A5D0F4404A8939E217CA32C5092 +0E72E2FF0991FF7B882C70F56C7B40003C599A8AE5D95B74F523248B1E8A0566 +872871D3003EA4885DA511FF01181DEE541F6795BB2D1F9EF7C3DC229F153A9A +86BAF08D4BEBCC0D2B32833DDB4639226DAE13E120A99C5795083E80643C153B +12744DB8D138E17B3540E971192EEFF244BDD5E799862023C858B885467E9E0C +8D2405D1DCB579AC44CCDEC5AE5254A017C6ABC65E4B072DE80E9683A9A9815A +23A0B829E805F069A98FAD27F3383F45A111AE854D512777FEA721804B019A6E +E16F12CFDF017093A2CF52A4A92683E3B225EB0C99EE5AE97BDFDCCB18C5A674 +F48DB9AB89038911E912DC1190AE495C6BEC4907D0EBCFC1CA4E153480285B87 +E5C03D8742A43382AD893B58CF1CEAB04AE2424164AEA7B3479205A0B2778AF1 +44663E61F1E8B22F2670D11ECB8C8A901557F382A909B274B20725B1562CAB3B +C57C8F857E9B99E033A41979E4EF543FBE70074F85072866D837954AEA7D9317 +3744DA0394C9412457E1C2188728371638DA19CFFA2A642CB0D2DB3A0D56F1DB +CEE646B9407645BAC2A3CC8F14581E7175B1EC76B0BC82EBB69F9A325A6FD630 +BF9FA4967F7A42322E2A568B9B6D9878FD68F2254908EDC36060F474346BF78F +7AF59EDEAF883489CBCEB0671CE77FA180FF7998FDCA6C4635785D8505A45824 +7EEE6F60384BA5AC06D4A19C0B127E15454A1ECC70245CCB99E271E83E42EDA7 +CAB83D34ADE335F91DABF3F0CE8A5DC8D4C0EF7F250391E51CBFD1C52B92C43F +CCA1A3B71AB20E995E5304A031060FB78B663E939470E0F0A9602A56E0352280 +AFE8F87758508DE73CBEE78EC452185854B11B280AA5EF1D2D3BA7553CF54FC8 +1B73EAD7E3FA7FCA7E8558FF72DDF68B6F7E50CBDB1B51D3D50866F1AE4AF193 +BCB3D30C14172FB5F9E8A572F83311F1C8DA3C8FC589D01F32B7F96A794812B3 +E581012FC496FCA018C5E9C35C0C2CB6CC2E03F7BCF993B8B58AE58F3EFF9F18 +C49B86B75F8B33144A1D4DB7CD1C5F7B1A2C362D1C7E2686ED7DEBE396116230 +FEA4B66E13A90CE9C61656BEB535691E3F3536EEF300AF2B7431770DBA738220 +CEA26E86305F960C867A56F6C071F41CD6F5A0B768FEF7B5B29E75FCA8F336F5 +FF0135B4A715CE926A7B78D6441053AA2515C96551A08CB94B77920C8DAB9C72 +08C6A760677CFAF137665CCD19366603811CB5CD52D512FBD763BD62931BD5F7 +DB0BE87955C0AF863D4A7B7150F33222E24FAD730E0D29FF7A88F5BBE2272A3B +69BA5BEB0AD926E9FEE21E8BE08DB110657546284DC9E724BD0C79EC3361C07F +7EE42824DC1CB72ABF5FB3E3DE9CD4EBC1482DC3FB57D84EAFEB307378EF4B16 +7EB0832E5AD1D1AE04CD5590CD3E0042F528EC79E292A67E38EE3EBDA2335B1A +1FE95723571C040F7AF835DC7493AA5B49904EF6F1947D26FEE59628A5331DBB +4EC4A21D07231E85941A435A74F7DF7DE42035FC3146FD7921D02F20767A9797 +881B24164556762476E17D0EF873F17CC4BDE322E3A5241FFECE04EE7170E0B1 +835607C7716AA603FCAD9EA5FD2AB1F718733B58F31233E37A3C22DF2C3F52D3 +4947E041AC29A07EBA98F0261E5C9B5E280B7038568E470DB4D6DDE3ADA5B12A +69F715BD02F4898F9222A0DD58647A31EB890F2592A4AD7DBBFB7485BDE7066C +1EBC43C9873052644138AE98A18D4902960F2B709D194003346B0B6F810A8AD4 +21D63E3142B7589916B3B4B56C62C1C0FCE1713379EFB8E760EE7295AFE5E4AC +2C38425CD1E4056715ED2F9B4E31E0F05AD10E6A52F4CBE25F37377A4E9E08E1 +16131D26CF7432D5F289930BAAED1E3A444E011653ECA7B9076094B5B72571A2 +D29E7BE5B062B0A69F7AF0D20CDB6F156B63DA9CA564F483395A88206EFD6569 +48C59535FB7AA8942518F0E85A8BF56E0E8E30A35F47C948DF5AC6EDF01AF41F +A14D10ABD45895C907DE950927DBE09F79D53EFFC6F5681D715649BC42E8BDB9 +86894BE664314DEDC69FEDF7EDF2347DFCB070CF591CC8F8F14C04D7E665C0D0 +A413590A72D242D6B619A83DBC75754DA87F980106A17B06F299898BBE8C51DF +70A6DBED6264DED8D4977BA25AB7DBA3BCE39AF7ADF8744170E7D4AED20EB63A +EE248A5D3009C47700D73056995596A2DE0C316785F2CD4C12B442A6DECDE45B +9C0F023599FE9F3FC5658CB23EABE96D597812EEAFFE50F9C82CAD33625AE0D5 +FC43ED0B732954F0058942C1BA515120E7D77A61028770A3CA029DB5FA12B06B +DBD4ED00AB9D53A705215898CFB295D53B38E5AAE8589BC0CB1A942D86DE0FB3 +DFA195D7075BC0F01B4EE3A069B115D237DF36E372B650903CBB4EBAD1D6379B +0429886D3ED160743BC13EB1C5F3AEAB78D1C01A27FDEA6F1D977B5F53117326 +2DA2DB70686F72280200176D138796F7730C9B883D56B8CA95A59AF0D7E943E0 +230D25BA4B738DD45E7923E09DA7D53B9E20CECB40247922492A5875D4EE9F33 +01251DC67C2D69895271F9747D0DBAD71C6E1BB31E734AE795042A285AF9574D +63913566B3EB07994867850236FAF20FA42EAB0535D5FA5EC4CF80BB2B13932E +7AB189A5B680852DE51A2417A70AC10DA02549E09CC96FDFBC49E39D1874A93C +2A28AD92F036B9CB36B5563EE2992268B1B02D11E4E51D8F3D6128DE0133BC48 +909E0C6156E527C9D87EF5C577B5E6789D4307F2BDA049B17A489A32DB9BF19A +A181375F10E7AEB96561662DA0F6748D37B99D116357AF029C6A25D761953BC8 +A91C2E06A070AD94688BF7954EB3D084EB4E3EB03E1DBB91AC3F3A14C8718981 +0EBCAD4DB31BFE5ED25382BAED473B29F07E225AC3B45AE131478E544BABF7AB +C5C59D01188347A370F0D0E937D8F4562F2450B77D871C775116DC8B041C0AF8 +FC8C9B67C4474A8723ABA7D4CB318D941BA18DC07373EB74822D41D1C859DAC5 +F14A7B1956C000E545D6F617AAD2BB0D545ED9FF3851C123A32AA012EBEED2CA +D81FF7FFD29174655C42DD6545611BD3B00F47CA4EA2D9D0CE4A01523CDF352D +6A8A2F201EDCE2E6CC5D6DFA6DCDC12775D5261EB120056D88E080E5F5CC03F9 +F17427E7F8A02FE5C8F3B125EB22DDC9E79640EEFC4B643C915734D7684B873D +51940066B31876F5A58A3B7224BC067C7476B81210CBE89E0714449CC7ADC971 +42EA708B18C60A9895B6CF391C57E815D05D8FD40A12B6564C812B371CCE1B9E +B7876C9274B6716C8632F07302483B124CDEFB9E388AED5E330E8DD89BA229DE +33331F6345FA3505FED271BC6DCD0087CDF347DBFFA4F35666BFA5C1FA6DE923 +97A056410CE3055CA869D9C583D801930E1BBA5BF6E6F2863F59ED54DB785010 +9F2AE393AB3C939BF8AAEF7AAFA0BE486855B4CA5E3430F242636DCA37FD0F38 +0315BD038B071C53193CC56934A5D428BFF9AD882BB5C3C639A3FD9693721E3A +7E29412AC40F83C609ECCD2C6B52D93C8F5FDA19E1BBFC88CE8D0867D3A611B5 +A4C86E617E6ECB65C4AC34F7C40444E5891308703A88379BD35EBE3FA6A65EC2 +2A20EF94D793591F1F6EBD5B5AB92BEA002E9FC9C665AA1DC0AA52F4E5FE4E84 +F425217C32B82D8EE65A9D74B74EC359A9F117FF6E8D4E0635512FE4F387C6C7 +9B001E708417A717CD007D758CE443C0992A12FD65D06AFFE668E7A8CC2FEECC +7C06025509E5C8E89D1D889480EEF3ED695FF92E7907860065C632DA306F6F29 +C434C5B6CA2A230F5FA0E33AF207EA5224B8603A554D5B57F1D353AC785FD431 +71A1473AA77E5EDD11FBCA16BAFB0057B12A30E3272164369F36542D813C360E +9E1A3E8523A1723F786F34AA8ED9C5E0E79BC8489E65CC14D444D43EF65E52B3 +9937BB572F745603D59070B19A99B575DB41E09603F7A1F97BD603656E7B8F93 +B5168E3329AF11BFF6DC7163E2FD545BD213668D9BD3503D61961CB6F0CD1280 +CD3C349AEF61C49DE74EAA38502A51A4D5D0397C0F04979399A24C1332BF9236 +DA1A31D9481C13B1263F48A8D06351E2E860E7E7115B1F4FA8AE0E970EFE5CD4 +96DD7332EF2371FA5A2CEBED96A0BC563018CC42F51CE45E06CE5BA442FD31FE +9BBF37A952BD37B78F06858BAD0B5B6625D943690E22A1C3F9DCDFFDD1630992 +A684A77DAFA50EA4D581074765779C4B2A41E3694FB0CD14030B885324120837 +1601DE07811737E429CFC59B8F4B859B2630FBBC2F46A2693DA6D1AC17034F2D +68966A6798BF0B806F6A9A7FE369B501DE71DC9378E2005B5300E7E03693ADE1 +ACFF88AF74F27AB46304727A54EDAFC01D1E80A7E27598DE8D634D80508AD1CB +0A06BBAB366C11D4FE2A15015FE4E85358EFFB71C9ADF211914A23083F71838A +85FB2421C14D308CCD77A13E767AE60383F6967C877B299EE7A8C7413ED80D64 +530FC64CE65979D77348049D3A6F38ADB64E811976069F4CA20C8E39210921A5 +703B878F6C147316E8DD47066AF2D551161196B0C9FAE339104EE8E972932592 +CB04F23576AE3A61727E4E516FF3044724346D639EBA08111F1D18A47EC2B48C +8E71F694412F029C85E990F099CD44D3BA1C5D3F2D8CDE64A3753BDE633EC0DA +8D84255DBB77A07CBD3DD87A3993A5C3FA8C646F36FA02FF808329922028FE03 +1CA83777099D4FE72DDB0A14509865CBB53B44191937440509F542F3EE5DFB1C +C124A4D58C22D8C9CAEE5214E05AFC330B1BD639651644F3C5E45B2BCCDC9AB1 +EAA1F69A5DFFAA62BD117724B278907AE755E2F9D30E4FCA48219D7840B2E799 +7EBBFE7CD2D02132EC89DE5340858DE4A670E931969B808E5FC8E1108EB3EF2E +01C8E758532E78E6AB5E5B1F4C59F974AF1F0AB5F2FE1BE61E70F71920960B09 +1B5668527F343DB865947B284456BBF00A696353047B812834C59A166DBB8BE8 +92CE57146E59E8DD2E1CF1E356614AD29BF34D6474CEECEE1F90D3E776B0DF8F +CEEC8D6F49714CFB6AE2CD7F77168E8977CDA9191C25CFE7A726CF78BC41A535 +09E66A3A97139535AB94B385E5B614EC835DAD2756F4585FF40483C65086AAAF +DBC5F9A5AA28174CF307A4223D27E10720EADA0B5620C3C85D211D00017BC843 +B3F5A207A41199DD72831ECE3CE0F674F5F942AFF93D541651CD027D82E16179 +8ED292C0E2E5D4489471F860C0300E428217BA5121CC668486B35EEC259EBB28 +B0CF1AA02B7ACAF293D22B618C537A873247E4911B2ABA5B784728B4167EB1FD +066712437790A213DA5A370F1896735DF6FEEEE02E2FB0C7D907434932DF650E +65566124FA36D25812192E6B2349FCAB5AB2F78B5DF4CA8706230B78D6E70F9A +3CA5D6CAA0CD72D2269D74A4473D239AE7E68E1DAE8217F890A4889396F86299 +1E1A3AB1C1298DF1C22A1BE1E665C6D4079B94EF89E816F4FC07843FCE5199A7 +20CE6B6D064051B9A98304E3C97EEF2F900C010E06EDD686CAD64F853A1E22CC +CD9E47056A63A4E6CDE247A8903A2309B61EFF86E302858F1D236C5403F6DCA5 +9ACE76A2F51337BAD4A4221FD721387526DE8FE12FA25DC7802A111D96E6D974 +48944AA7A92186241F681392B54CFD91466EC39ADE17F24470C44DEEFAB641EF +C9F4D45E9DD2911E9E50C150186F4D3395C2684C6045DB59FE947DC169D2149C +A591690091C7ADDBC50DCB395A16334F68E73F3E222661838B1F74C4FC2DDC25 +7F06CF877B94E1D859FDC8CA40229A43D03EF76649A6AC920F73D8B3928F161E +168520554BCBBF957883B7112B6DF94E62408E24C89FBEC3ED02561EB664DC8C +3A72E91B03479C2D3CA8311B7F42F13F6E95D772ADCEA91A6A2C710E2CB3E833 +E94D5E817E2A8E440CC6A3D75C78487391F1FD8B85FE14C22C619C1AB4792BA7 +0B96FA5555FA29A0A847202FE1B32287D172430112C0787034AC9733A09391D6 +B5AD1A920951804361C8E8A4E4364C3E7FA0D108D4BEAA2E5370826A919D6C9E +AD7A77D61C8ACB19DD62AE544CE5871FEC9E99A90E7DE5463FB6CE253AE40C78 +3523A3CB5EBB7EA51219537716643CB1B24B73EA26F34A49B52DC14F8441E496 +430DDD5EA1A7762AAF938C3DFFEA1934A6D486F9A9057B0B087FC35B7D97DAC1 +E846E39856B07D81DFF0374175FD94ADFFA6907BAD05820C519120FB80D7F5A8 +C08673F2D168394FDE83063EF080B9D1C52E9CE5DB537ACFC3009B39005F3988 +ED1CB1DC24F9278D1FF0F91D2FD9BBB5C746019B00C77C9C90EB833D42610736 +07AA36C7737ACB0DEB210D9C6DC10CE47005E9519C69D6264CA1160818CF0FE6 +63E9CB5FBC59542DDFA431D192C2C6ABF694013024190FC8422235CE88C200DD +18020DBC11C9E41B12A45D23EB8B56FA7A4BC772B14257D8CFF8806DB05D3F7A +AD6C71709841942300BB018CE63B35400F979AE4F37A787C10B8BF36A41B8FC2 +1E2940FAA7EFE3BA8BF96F5B9650795132B00D9C8DBB52BF0D182A853350467E +EB02FC268F4DFD4FCDAA1BB02C9722E88AAEA3536C837E34B53BE9C2837BF188 +CA19639F2974A3AE40A8421DD5BA1DD903DF9B63E716FAD3E9E03DC6234C3988 +5AC8782612EB6F008DC80D0C758AA75D4A3909765831B2068A170AED234BBBCE +DAA91AA0ECA9AD4C14330A168762D119A3C2AB0D552EBA73196333042B2A2F95 +0DC37909D3E3C38FE9E2BDB8B2CB77A6DEE2D146D777628B35894A538D561983 +55E8F2E37E00E1A182090595C7514EEB78E9D8AD37859077F102AC1496BFA3EA +E1790FEC4B708738C8AD9C3542482D75E5960B92444D69AC6EC2CCCA945D23C5 +25CDFC2DDC08D599746B686A1485F474D151C326CF5C0C62FFFA4ABBF5353E09 +FAC520B165577FCF2AE0B7E623ECD3B44A0E7DBA7B0BA5B4172C502727283D3E +0F4B4EAC070DA76E72B911AE6567411B7D59EF3622B213FD28AFE3645B061065 +ED44E30EC1D81A1BD801EFAB50C2AB27443AE9D256D4CDDC907E852BD0B5C8CF +DF95B90D45EA2262EBD8BC29FAD72D6B1DB7669B2F33A6368FA260A407686AEE +5C622E7BD7E620BD735A5AD6CDFC71EC5CEF80324CF59D53B945F9CE2EA42806 +E4EAEF0D882FF37FAD4D28E4A68D221A735061A5A25AAD9B73B4EAC3455983B5 +B717059B778E47E00698EFCDEEEDA99C754F6C61D56E617DD78352FC39F927F0 +0BAE0683DFFCF55AEA0E7CBEDF278706D147B6BB099950E1D6410A1F70CD056A +C79CF45A2F03B522D95CD9056E31A51B4C71A10591BC5AB0CE178C529CD741BC +0F4C7854BDF9E1930D2D597B444CAF59838AC30533FFC1D39B74D99E82E2DA11 +BF169929A097A4883B7CAB01C37D073E230301F4D58396D428F541354FE82CE0 +B360D5DDD4EAE075395DE968192606584ACB94493670C5DDA0DB8D8500A27786 +FDD7D908CAF14F86971771C604EDEB9337DA9A7C08135CC60D7D5CBA7DC822D8 +81011117F3B156360691A4353C84AEDE652572DEE12790CBD357FDCCB36DBD5E +0052471DA8B89500EE6BD0BB9994FCF9F949E8FC9B92660B8FB66FA182447EB7 +7728AE2A9BF139C9AE75C9327257026A9CBF8AF1F80D0D6E4BE273148B2111DB +5E76643CCE284E79FBE70347AD0D5D8F81E6944BD01AA02C3ABF66C27BD39E78 +5B8A035A17D7A8DCD0D241FB65DDA12357357DC0320C0A1ADBA0E17112A87682 +24A37F48F45D0870441DEF18F885FB7DE5726D545D91ED71DC5744D9B81B4EB5 +6CA17C065FFA80815D513A50C5E6762641EB969C1EFEBFF6F022D95F35AC3A5B +9DE915A45BE37832AF5BCB8FE8ECED6566802185492E24C348D88D7B2AE14D33 +BF71D8E692B0857D1E744E75ED367B1E792F258F7D29F69A2277EF81CEF1C8D3 +D84C989219743476CBD75F8654CB76B137B8249B3A86513AB2374FD12027520E +EF2707F9DB82CC78E312E4C5E1B52D50E6B21C37F796B40E9CF27E98080D3FD0 +F73FCB06B74A82D5C4CCFD484E8BAD2AFBE25A5B8F1CBF25412B160AFFD6E425 +86339EED833E1485508E6ECB2471393636E58ACCF1DA80B0950A3AC134B324CF +F7D80AEF4ADBAB4E02DFFFF5D4EA2F87F667142A6FB5EA8414ECA68B302DF431 +AAB49CA5D8120C95F6C4E82BBB70DAEDC7DE821AD4B5DF4796E23316E5D20606 +DC9567DBE6F5A06182C3B9848DFF54E02EE26B6385A6F7CB9C5EE0DD0CCDE6FC +E6F98D726F64F190DE1C523B1D4472378FFFC6F7281495DE8C36300F2B696308 +B6A69407FF6247830D3E1A6AFEA8C8DFFD63A737CFDE9B9E1780B93EC4244420 +9DE722676A7F64EED5F13BBFB0980BECEF18E55D12A34B13A4FAF0A10F74B88C +59A45F668BA03B900D9F2D1D8220E647132604DBE8B06E0EAD7670A7D7485DF6 +30E8C003AAFCCF7DA4C3672EB8B76E56A9F7F0F5EB631008234A046205C7AE83 +36BEC5CE37BB25861DDBBC4539C38E2D99E6B17A0497C919D5F3309C30E43281 +C714450D9F883CACF058F8DA7B93192F76FEB29EF1BF10E262EEDBC797D85936 +96CD3B3922F727DA98F359DCC2347FA95A7905B5DEF2F0B3ADC90301405974D9 +792BAEBA9EA0070FBA6C842D40497DF039F975F6D85D705D3F8DE8386C8DF996 +39EDA645F3D1F7DA2B87EAB5450F40BDE12B26D8D4A3433668E430988C1F7D34 +0748FB4D4F886762140314F3F2D1D16CC6439A033F8068F048179605C5FE9023 +9BCC22B5D7B4E8E9A1F66A5A9D3A888257394C353C835BADDD00B2BCD94D46B8 +DC3619E4CDD01FE753166022055ACD7ABBA49BE217260A47843D3E7666A90ADB +E3ACA94CF7AB1D73D6230446F4848E5111E03A5C7DCB1CEE340ED84F40660D75 +6FE5D691F5327A3314DE7622BCF2DBB738ED7C7B3BAB9A975CB2E739161DF51A +51B1902F65E6E68D77F2ED65FA45B7338AACBC2D6536BCC67B965C8A2F32B576 +EA583CEBAB347A5BD4CCE61EE80200D886FBE41913390091C747D12372DF4A03 +A2B68A79007FB7A8A87CA0E7247F0B36717C95944C34932B0B5E758ACFCAA071 +4DE4E88E5B97EE25E3503045B366EDB477D362C34978CC1C66D4720DDBED2983 +A2F6B75572F935D08E16FCFCE23A32B9C4E8BD895759B96F64D4B1509E0F50B7 +1F2190A352478EE247BB65E5DC605436F58E7369C2A5ECA8744FA45B251FADED +388F1974505305A520E2B39B9B390DF9170097D17F36BC0A52C59D25BB5D0AD8 +52A9430750B489AD524F7D3AD811617E37F3628FC6BF331B6A8A3C1A874094ED +5C5085554A5B16D60679E9825FE8BD11C4E5552D5AC595745396E0AB8FF21EF9 +6BDF132EFF5804B02FBF46225B2DC521FAB66293B1BCBFEAEC26DE6BC7BB58F8 +746A67BEB786E5BE2642B24D93A46C31EFA288D7D0F3D54FE578F0339123323C +75F1EFFB112F0A4D711CA88946E0CC691EDFC3BEC310AF1354817736D6F2D5AE +D361466EBD8F52F0D4935608FB2F520A49F771A3A19BBE9AADADC4ABB9006844 +7503D94FCEC7DCBA66D258A76E8BADD54DED70AC66F0EBC6F052937A94C13A35 +734578911A9B39487E51B0F5BA48DC09591FD5A1D45ACC368D91C3CD3B4A9BDC +98FF62111F1EA93313568A1162523379CF2BA6A240AC489B3A8963E42D08A8FE +EC22C16D4CACA1B43606A76A9BD512A9DB20A40C3CBC9C35C2784E4BD072C04A +74B267B18ECCA5F59DF84B74A361F5406C582BF99B99F69AC1A4F57839E37DE3 +B8AD9D537AE12C66BBFEEF8E7580273201FD665EDC1B594055B8D312C303AACB +E07365CC0C78B98A9A62032438D806340D1BCF852924854C4E50CE53BCF8562E +F632AC26B18AEF9346E29B019A19A2ABFACDD303AB7630CD91CF68E229F5EC79 +508ECCE0E44B8282523ADA80350D28B3646B62005184736B434FF29472B67D27 +27BF7DF359BF0B7A8CE5BD7B6F49126E8C5B429E57910ABD55CAD54BE35A0F15 +6E50601498CB9F0AF7C88BDF21E6D600638ECDF5F17AA25E25F4ABF98D91E1F2 +2AE15BFC7D8A57924F019506D82083D87A24291B1DD99CCA652ADBA3F08F69C7 +5DE09432CDC283A3F139FD16B3CA7B15106795D5309D918C2D3302548CECD9D1 +2CA6690DB242949D647D835D86C94709BE43333D81F800527DF0EE89CF11EA53 +C5FB7B0E2A5C97477DE8AD164228AD96A646FD9BAA1D497EF07760BCB2CC2C23 +2502F8BE7F8AB201AA730FDF14038E60F137A5BEB60D9A43EF3DE2D9417A4DFD +136EC1709DB3871BA2287FAF13674BCACF09CBD5CC9050A06989740A1F9E76DD +12D8CE4739CA3E15C41EA616D69B1FE079B4A26C45279A105FB53E75E0C49D8F +B84EF948AFA24A920699BB185FBAA8A85282F97710E82AE77AC3F32174B754AE +306DEC0094D9E4A48C9F91C2D6662E68B29C56C9367E7980B1359D3DF33A2D1C +DFE766DB2FF85CDE7E591B991D135BDCFD8CB5EADB07E3519C921C6614D5DFCB +1990A6943CBDD41ACBBD5BBC0B897DB3E0A89DBF059FCD9AA77B2E418A118721 +AADE7767FED3BE2929C192165DEAE40640040910AD1E205A86CA27D586C4A9E5 +001E56960B9D4905F60E8A7298D615FE09DE4218CB463A89908B6DDFB6BE54D3 +745F090F39333A06017CA640FF1CA7F09B563EA8FF89627E679294CD5C727D25 +86A4AB9AB2ABC2F6AE5D0C65EF16CB93C42866DBF5CA86332526483E49651277 +11A5D0F1E6A64BC17A6E76C8767A125FDE537D12FF13B8D274E35A3CBC2A89E3 +9E8C55C2AD70B607A624B0A67E0BB449C56559D23BEFF4C2BD99F67FEF973C1F +90F938CD1981C7DF56AFAB82C7CEA98AC7216E2B4F80A26D68C491116A6BEEE4 +ECC054F7DA563F07C4A18EFCBD45A5FBD566EF722F5E71D5C95E0FA2A33ABDA0 +07EA5CCD03D569DD830BFBEB88C7D5DFB6B301555B2A14F15E565CCB4F12B60D +E6860C297F90F9B8A0D39942888CA8A3B8200D5368DEE25B0C0432377598866A +88201A65C0716A3DA92B2C3D05F20A0143C841E54279AC22DEAA33A6C75ACFBC +E0C803F82F6E79D871FEF0F56D7B018172FD281CAF06D1FA247201FB1CE5081D +3CCAC6629676C1FF1B0E64912311CF8196860048DF27FA097CEFA4C257C426CE +9C61967EA4AD40E78793F4992E30D865257AFBE6E3411547CE3117868C7A0D96 +887582614E2D8A2543F9408B69BFFA44494A9D469722486FA1A8E84881443843 +4CE118ABB689CFFDB6233835669C2640A60C376866A9CC1A4846817CB26A2862 +CA8F4F5DC66174C7C62F853F8704BAF1B8BA8934451B73C9D23F7857F53A845C +E937BFC1DC27451FFFE0C75008FCB9A372D1E4EBD771878BCD05D9B3C598854E +33D19ADB2A50CFE4D82723DD4F94BC6880EE00BA9541069BD5E6A658F0BAB38D +769C47CDD3FD7D664A35F9C0758DC060415B5514A31C6BC5E0038E2B4D5B6B9B +C246FD9A961E7AEB4DE3C4DF0CC1F3D4CB0852EE3AE72CAF18AF005AD96224B6 +7D9462A0C747679B00D81AC906B64C5B8D3A500A8A1577553E25E1A7D91AEEF9 +FF84203A025933E56A0ECE5735436323D6FDED9B4FA26274D650AC3DBE4B0AF0 +4ED960E495203FD67C300619125257836C9DB76F650AE523401EED4E5824898F +A1B77C521C1A070A5D20BB324C90207B01A0B86A6F42DA7ABB1B2BB2F8F99782 +4331894668170332E3894E80A5C43DE08AB3AC4074B1DCAA5B43BB354C54B749 +82D17D9B53CC5B4018CE4467D250B4F98036B0CABC0B149FC7B2172D60FA5188 +512E7801FF83AFD47B0E87ECBB64281E3ECA9728A30A3B98681FFDFC8FB161B7 +D57F511AC4BF30C2D548B9D38371EF4E3845C5726C8A33B20F2013833BB68268 +A326BD1C199E3FE776EAABE066CCB4C80BED3B558BEF58B6EDE92A692A8F90A8 +45D322A2CDE3EA8DAFB316B510CB1835AF292C30F58861B61CC3816DD5953673 +2AC0CEA62E52CAF6F60FEF21B726A41CB42CB7202E3C605DD481BB7072079903 +8F5A0DCF8142A83B2D746ED1E11521356E57C07402843B6F34D5EB212143B5EE +7D49A9CD2ADAEBF0F3203AED4FFC99B05A05D74F8BC7E9A7E0F3CC73CA87CB1D +F734DD7E6DE90680D3DC54739DA1783ECF3DED371BCDE79B86BE61FD0C25C656 +89BC9B059AF6359719A55F1E095558673B2B6BACA8087C729F7CCFB5570631BD +B87A8BCD4B6E1BBE918A44CE8FA4694670DBD43D2D87A8F04722310F2893256F +6C9F2BC39723FC1504FE00753D76554776E370385DD79F72322A8FA32F1052FC +A6D8AC2807EB52000FA90FE1275C8876ACFB3EE0D81589920F00E00588EDAA3D +A6F2C43E8400C13690D6120286A3689F217C6312F8ABCECA44B8E11DF75AD509 +0420FB5AF0E18F7BFC7A69C20C9E3FEFA7D951AD9724F425F38502EC29D32E28 +9407B9E3601773287512DF1D279F0B18B856367996317FE0BF47A30DC0AA3A72 +F1596681512189F0D954A454A16C89F0F109CD95E845CD1C06BB122E8D58D71A +EF61CF589BEDAD6ACF19B30ED3431E93F73C9391D3A31CF94DEB212B4ACF956F +B2A859BC2F96A5B52C6F5DDB104FFD2EE135484C53E4CBF8F4C9208B53E64C88 +68CBD15D46897DF78E2A0915CB550EA70103C6738124A0639FE3498C95A8A1C1 +3BA81BA5D5DDE68DAC731A5F84044D94B22462F47DFD7BB38B6AAF0DBA52DAAC +086434027B5058AF07D1307D6350524029E226525E8FED9835D9D60F301F1D61 +8E458D0E2C7F243508B6ADA892224766897B70B55EB9E6AD6BB39B1B639E6B8B +66B73B761C81CAFEA2EA01E1C3C64BAC284DF366B24415DCA1498377599D9248 +A5335694C94E134BBA10FA0B4B53D2ED32664C8951308966F5BEB37E110E2D99 +EB8752F75839EF2B602BCCBBC7BA8460332BE43327EC7DCC8F0F57CDFE262AFA +EBB720D79DFD9319BB889BB0DE1E2E0D064641764390258215CDF0606855934B +7C8C0BC1AF945AE45B40B970FF4713086769EB30BF30F272585F6EFE48525474 +0C236B1F4710977AFEC9346C8A920D4A8832015D401CC2A44584643DEC473950 +811A3B476B3D42EF845657E45D390B873D3ED65C8D9C3F6B0C189BCEB6B46A11 +E103B9B0A0DF61A899BA5CB68CEFA1297F156CD242BE975326849D2C21DE504E +D4FD3CFFF53A29F671A5B3ECECCD598010C52CCD451620AB99A917C3DA3EE592 +98D726DC6BF96E9D73EEB778961242DFF2442D8791E09E80853A7F16FCD9FDF7 +DDC4186E54C200403DA07294767C219D161ED55B8752793C8FE1810496C3B855 +CD797C653DAB010CA1909584D6F42460ABEB8E04B8A472D177995DED8ECBD456 +99C7A2D42C6A64F8CC8B14FA0B06C98E1573AE19A086556CA062268AD02A3C2B +BFFF7947BF44979A39149E124C564CBF1E782E55B219D13E87B790D90F0AA463 +E2107C5A76CCEEF736A73ECD38C30BCF527AA53CE75B6B9DFD35288143610D4C +4954585EC5AA5F9DA22A5A9F0AF66BB8296283053685AF292FB8C891F0386ABD +2DE33BB1F86D984DE21DB7129D28B06DD6752877F78F04423447A8D65255FAEA +8A6AADA92D06BA150D7F4031639F3DFE149916186BC2FB0B6B616AAFEB7455F8 +78BD9E857EBC914457F1C2927BFED78CBB77401B776C698AE100116920383BBB +598E41582E679E99DEF5E5E50EC75F20089C70209AE12D9A7A1F01DD7B815CEA +11766F2B5B82D13AD78BE0CBD7AC82DAB46575CD90CE59B2FF705F328AAD4BFB +B60839735DA8648F312AAE70AFC24CA58339630E430E417D4469C39328FCA6A1 +9BB91791521E7D43ECC2FD92399E250443C9C0D14AB1DBCE22076F81C286D61B +136A956E57AA9BD12B548474134736DC80138C678A437BDF746F9140D39203B0 +C79F51F3E31F679CD80B1D98159874260DE5A298FF11B5ACC461A567E1F7EC81 +F4232A80CCBBA20F071F0BBD6749CBE8DB8724D14D4DA2DF0676E182B0C165D5 +397252C6DF93F7C2C52FBC3DCC24910929A0272672F1A94C03172994E4FAFB47 +76FDDF661F13DBC3E0D3882B5D576BE48F2C16F5CC10EBEA40CF90BDF4DF4997 +E79D92C92B4D570AA930F0C841144E440AF24893979008E0A8D2DB3FD81AAB59 +426A49E8FD770654C520289B2D48C14B35A069445324E37F66AE20BB0EB1C27D +4C23AA633834A3193129BD9C9FFD8F8C152D9819F852A0522DAAA38BCF1687DB +E22E3EF59EB2D3831261A88106E41C86490C32785858538FB9FFDBCBBE186DFF +3964C03DF7FEB945B1049EEDC856C5F4D51A8C57ABE0F980FFA7E9BDAD21E476 +67976A0DC9AB4D84EDA8E9926FFBB302CAF28CC3FE6C58680C26ADDC361FA10E +42FE75145AB186214E03558CFF881EFF28DFE535D612243C8ECD8C3C2DE54C1D +14DBE7DF5200AB36C47064E7BFB0C554A5F6A03B6406C13FE6D724AABC071504 +F0C55CDC2F963DAAA255BA3F91208DCD272D395273D98D7A0083301D0186A37A +F2D0385CC5B0698C21A197E57145B1D32AA873D851664DBB3B672A84A1EDF6CA +C3EF5EB58023FE876BD25AB9B8AB1D4DC1966CFED8EB3CDE280D81FFF60836F8 +68D3D51813E9BDEB6F54FD448F6C6123615E12514DFD986532530DD65E84986A +5BC1C1E3B0E760D88730E708270924E98890115E3927EFF1D8DC891314EA205C +DB1F328C8000CF7BF21AE594840F6CD56B6CE4DDE05D2FEA79A1C037BE44BA87 +D9B4EEAC6D044464A719D6674B0249E512F4C3BA6E6CD5AA138BC1C1B0C2614E +5CA4E7CE5773FDEF44A0248A47031B2F8D06EAB92BCB2157D4D15C93139A800E +6BC273669BCAA825AC886E8F0B308F3E5E7B6F528D99A1B6858BAE807B162ADC +C02397B3E017260C723ABB24582A414CB1793BB5F4ADD3762366F880936D2906 +5D8D0A3C2EC31C3B23FD7C5A92246E0FB2DB50236084CE103F56B00511CFF8C6 +5C695FB66A1003DEDC5BC43ED31DEF5D2320DF77D2B712C5DC53F32978E14177 +0E95FFD8FD13E8BBBBF030CDA5E4F05BCC50F4A7AFBF5510398A373FC34032F8 +5CD80440C7138DCB9A85A656F0474D070AF48198CE2382E92C855ACC69EABAD5 +CAF94D8A4D76EFB4E49953B8EEFADB557237F495B0DFA5C3F7BADA594348A88B +973E5CFCA5783B20CD3DD05310B24F9539E4C30689F636DDE164861E8702FE25 +2DBED89160E815A617A4E7B1928FD84851B40EC28C8DCF9BD9D95C5DAA4DE46C +EB78E0902B36B389DCD3DDB8C8410D684D003A989A15906A38F2E11F4CF42324 +DF9A1341ED9970A25C4ACBD73F8E68AEC9266C539A920EDD17245EDA202F68DD +42CD0F2E1CF99E2537E4432546DB208EFC3CE2805BD937220A62E692D0B8293F +7831E4E5C580504840B4B5C01B2E73C6BECBA5BF37CC2657A2CBD51A828A1D82 +12E7CEE63847B2A80DDDEB8376EE7E364FE47FE1B6DBF0C2B052D7978FD529D5 +FC880C219D892B1ECC5617D30051860C482B2D6EA24DD5B8959372DFA8D2AEB5 +C06860466A2D22891EC71BB7640449CBA679E67E6C71F44A68AE7739744AA4F6 +D4FB1F74C20B301CC545737F131E0DA3183F976ABF85B68BC4AA63FDC006DD65 +44A1C122539EE0A1C07F29EADB687C7AEBCC92FE2E245C330C10A9B2FBA8C9C1 +0DABBEBEDAC3B91FD3F6D51D653189152897963E8FF5EDBAA5D92381EAC86ED1 +C896B4379433DF5212C843754A3AD3F217863353C76153D102359D803776096F +BA9D4D6DAF5E3F2CD47762468AABE5AAE4387C54C2C142E5A63ECB22AF0914CC +32FAD5435E23F7395871AD8CD2C02873E7EC7900CFCD021446487A9E6820BD63 +EE0EA22F8C82A90D59246E110F696F2FD6314F65E209028CE4B211B7B58A22C7 +C6B82C5D0E0325A92123947FD8305924E2BBFA530C6E2C335268D2442D3EE9A0 +5453B3D87E5BA383071CFC4CFA7131D24004ADBEAA6A80040EE12619B7010973 +627EAA9C69322997E06B8F3E10105B9FB004089344F9604D50E9CB75FF6C1B9E +208347262D01ACFE1A26E6B6A1724FC811A0B602F9C5221BD2359AC1A27D641D +B1824E3EF3C6ED001DEC8328AD41FDF8F8643D5AF1EBA51CDABADC151A16839A +9852BB2A8FEFB5FD0F236A17293DF1391530A9BFDAC288B4BBABA3E8DEBF68EB +61B820678A2C5A844B41DDFC96773AB21207C7403182BDE878BFBDB02AF22416 +7FAD6A039256F0321CC568049E80522250E3BFE9D841E18796C108EFC61049E9 +91890A11488944BC18D63D911B205B8DE16D062052A7C97108CDF5BBA0BDE087 +E0B31781C257679FC8A18C945761528FBC7D8E61ECB9417D0AC43857C0B3055D +F1C3DEFEAB3D9ED3B357926BFCAFD7796994E28799E0CAAC3464A6F8A2203D9D +F006C837C8929EBB2483D13AAA62008D790B81D0CC90CA55DCF1DF78E855849D +170D5F0E11B5ADBD7682CE233E26F95CCCE957E16C55EC3397DEF52AD7301BF7 +B8E6117415E7EBA61B9D64ADB3091AFAD3F969E8D28630538AAB1240EFB4EB66 +84766B4DF14C48DF117072E62AABA7FDD41169E098249DA39E884724F89C427D +F60D85125F31DADA544BE2426690690B8EC4E3F97DA0F2EDC2E1E76F6D28BF17 +A3E1DF62C0AB685A0F22143A5F1BBC26EAC1426CFD4D9DF7F0FFE872E0C9A06A +2816EF89B5D6CFD470F7D6E0897A27CF607EB99099F8883D9E63D7354E8987A1 +B1F995D0C38EB5CD06D62B26E1B4C14C59DB4C3BB22A796C161CCBEEC0BC74B3 +01F218784FAC50F1D8D735F623D8E568F17362F26AC3511DA3177D5E5C18713B +FF1170C0FE3E1D71BF5CB13E09582A51112F5E73C30BFD6D7D40CA7973C4E98E +3B503F6B9B74F48AFD91BE0018F855B449F93BD9D28CF4640191D4F8A2150345 +77C29EB8D6660DED45A25FD769AC5DCEAF43A62DE7FC6144F1AF107997F2BEE9 +0ECFD51B4EA120BD74D0514CF9F704FF7699574144B06A3C9F2485472A79DF7F +9FA68A82D377F7870F2ECE5E0DFD5D0A182F8C5D9BB8280AF6DD3A66DF28988F +C4E7BE36C95DBA103ECE133E869954D87FB2D955B3BCAB1F3D25DF55B1DE1D32 +145D39D8F1AC1B5EFC1F77E4779699E8C8B93A78B78BBB181A279631E163FF0B +EFF6F7B04D4CF8873708AFAB622B2B3613DB434698DA87B8132E1F3E46ACA7E0 +B4C03EC12A51D0E8EDB1FB1F3633042E15E61ED677D4B46C287CFDBB572C8FB0 +64974618F5AB0945CFFFBE67C5EDE351258C528C9633F2C9743C3386ADD552C3 +DEAB08DB72C254EDAEA678C405DA089849720B68AD9FEF4DDB7AED3D21CEAC9D +73553FE788D35A46F322838050C9846F4145C4A2B89072C4B00514779BEB8FAD +CFBBBBC2448F0E9EC25FA43AD956274CB6CCD5A4FF228A61478DD68F50BEC3C1 +B580F32BFA52159F33B554510F29386289EBD7CCB63169C859CEA82A88A3472A +C87FC773C20AA63DCC7C64BD6048A1343439A9B230C05ED126866A54C84FECE3 +87332796F8DA7A91ABDCE5F9FDED03B1E8DC5C61BC139F33D430F0990EC5D092 +B49D10AFE3F993569784F2EEDDAD5FA6E10762D901FBFDCB1997C40EAA885CB0 +52F4CD610296E8C297CE215C7CF23B873E67F6A12B495C415CFC27A0013ACC3C +FCB54D840677F056886F7A0AA5DCAA07DCDCDE4252B9977D3CB3DAB09FEEFF5D +B03FBCA4DD809B161685384599625301CC35166785BA66B1A18A4A9564139D16 +D33BC7C0731F6E0DAA9BE2EE103BB8C39E958C3F89E26C2644128BFE9A3CDD18 +1115429D6317BF9A35E980044E9A2D59DCC544D0B25E4FCA28046B71593423B3 +F9E27BF3239404626C495EDAD4053EDD0A601BA04837549232AF2C54B02D3C95 +2CF348F4FE12AAEE0DC4D545C935C8E0A8294B4CE56E026C5CF2B36EA1F2F904 +AD8D130D6105BEA237207209A1795F3D3A03FF1B16A7C3163B99F40F079D3970 +86E64A758BB2A068FBA3915E75FAD7D7455EE272C6D48DC07138172457213537 +3BCC124302C549A43F501A5E4230F8B0AA54E7FC3A644FCB42E12DA142862EF5 +1315E92F31A29E92B3FC3ED944EDE66685B1782238104FE41A7A039D9793B810 +639256B4E1229C87094C0CA19A16A5C5B6C648E57A4CADB955E162B82889DC72 +FB8B11A00C6885B23C0ADBE5C8FCE24DEF5AD7814BE49D547EC42E312D795D0A +49C06F90CE9F29AFAA258E9BBA47FC2317F45CB73F246A277C0F6F85CD926CEA +8B119C613F7427969A4D7241AA375205EFA30482C5ADF407AD692D5993200D6A +A8A7DABF6F9AC7482F70557CDC7E09C3CAC4EB3FEE98605212D9474193CC151F +43F630ABC8335B4C91E8E64283EDE6A46F92D66F1F25312B41B1254EB6A44BCA +5EA1F881A8CE2756358AC4084C6311A41827D70F224272C5F0B78C8172E05E1B +128DE2205D27D2EDA3CC930783879123520ED5F52D3174477B64ADF595C398EC +6EE39AF98E5EC04CAB0BCC122E5DAB540EB9EA7387F6B3BB208A3281E657A2C0 +F4A215B2B1F5C5F08048A0A357F0B3F4ADE8D0DC91915B78BD6B1666A05C4985 +B3D45367A6B7BCC24D0093AF53D9FE8C91D7CC542C7AAA883A26757FF373EF88 +A79174BFF975687F693BD51DBA40E73FCEB8A18FEBD10E8200A29F475ED47F44 +ABC9F2A6F66D768508FD3FE078AB46ABD69B79A6ADC471AB866D326C4A20D9BE +8A15DE54C80945554AED93AA561465178B6F38D94769D5447D1C267519059101 +F9501BD996B8DDEE625A74673D13A647148A9F11CE99E7C6BDE7D1D507017648 +8173E81909387A04A133CE42C4643F9E5D69BE24E48116B3590E6ADFCF02A21B +88ADFB0F070F666E38F260F7A0F9A99D22433F8F0B436BC169868685E7A144F8 +DD4C3FC1D1A554BE8356A18ADD5626450A29E80101A8164D0A5A106B7313FBB5 +BAAFCE2240A66E18BF06EFC32A055120F7DB77B269C285C27384EB0187A135E5 +8F7E926D9C48A9DD8C2747A5B367CFA686FC1294C0DF48037492C1AC42241469 +CDC137863CFDF8CAF8B9C8FB9A25F4CA4D517AE0707F94E8184386E0138C9098 +CEB7FB05EBA48A2F10D38F62B950EE4DBB2973D23D8F2C36FD315ABA5DDFD03F +BE64C12D18F9EFE17A0FC0CC57599826D09A45D3F5839CEE0FC0BF726CDD0195 +924583C8C4E5BC06FBE89DB34EC1E2A21D09A8D40EE8FD72F352161A25F7DDBC +F4055FBE67201414BC725815A68740C1D73CAF7EDE42D5863AF0EC9F2F29A2D8 +26822706CA8119EC6D0D9468BB812F48F61E0B528F48730F65D755A78330BFCA +B38406E441453361EA517BBF57051C499BFE502049F5B869CBD63A45B26DED44 +F4148C9F523681B5316B33F261D9F854D58F301B04F46631629903B5C6CA7C1F +32165F3BF96494B89614E773E21FF582D2AC54DCC559604378E9C6E87655B3A1 +66D2DF34D531F89942BE2002903071947F9600DDB63772D73C3625C969E86859 +3BB872F0FF0F3102A043302117900DC43A5B295EBFF6E0F098694CEEAAEA8F0E +336A33F31E7FC4836DFF317A8E5C5185B931B49F55288790B903C5F709AAD9EE +7CA77BA4B905F1094126C8C2DB2BEF9D47D9764BA02291B61D6F1111571C48A1 +18D7A3F4C4AD999643E77DCF067D59442553B1933FA1C7ED31486BBA13E38BB1 +A5DB843011ADE62477C8D700039407E4BA7140FA57F0CBF1F592B0FE9B77EF26 +1993A02BC2A06C9E19BD0AB9BC6785DF07AA10C9D23F1F39CAACBAE7A06A9D2A +CDAB181BD867EE80FAF7DF151B46469D39E3B146C90D0EA389635FAB3CEB30C0 +40CB74D4C6F4BA399FB084D3648AF356B956F9CAB3C3F122530AE112CC872B7A +7010A34B1A2ECCF920144672F8315633CC6B50B3D3288A922C8E8C1482FC969E +59060D86217EB3919DD8BDB95241A7B089DC1456965AA6807141F2448C50F8C4 +88BD54017534F9236C4EC812E2F48F13943C8B81273285BCE02FF68033B70CA7 +0F38511329DB041A8D38CB609B93A39CF98470975E9AC50C5910A936722EA880 +E840E82DBFC809DD5EDE3D9D896FF879AA47E89403E5E9078BA9FE3B3A2FC4E2 +C2FE85313B5D53A05DBAE54CFB25BDCE29B4F5D6168549750C2457EEB109CFAA +A14D71A996B2CC1414A8F89DE240EFB5C3B13F216396ED83F09388DEDFBF2CBE +604C08D8ADEC0E3116E33443CF68AFFA4513B1EB0A19D7EBE845D1A0516A9EA9 +03B7CC5D17CBF0E1965CF2A879146049318579081323FA8A13755D51C939FE1E +7774653F6610F5A542E30966220E69A4650B00BC6BBF8A09C13EA3CAFEFCE3D4 +B2C4E1CBBADEAA6DE7BDCEE8795FD31E1297113230F8670CB316B5F39F067043 +E261567E08179748C47D32869A686B20F4BC5B78FDC9BA35D1D4F35987F357D6 +3BD1325EB529B80F88EDD4E0EAAA54F11ADD2CA20640A77D96F627179B39EBA2 +8C3A895D4806568A36CE0B589B2C29A962A8F6B6AAE4FAC50E424B2EEF4E7B47 +ECE15B865381E87FFBF29AD1D3BAB2F6EED94B874ED3A975A0A5FB54E2729CBC +FC079469C3BB4AB361A7257653289BB9E353BFEFF7F8982162CB641F1571D0C8 +9530B1D6252C5FB1DDD8C29EF848D105126703AF7CE5DF4B87488F382426F583 +34021005B87B8938DA00725BB75F548F15E382CA1A57F8A27A81B5A97EE26244 +E739D10A43BB170D5C64BEA9580C3017CA5F53E8C30F129E0A63A5E9C391AF5D +A1C4B5EA0EB4722F6C9D187CCD4BC71A063D85305B14CDDE969D9835906B0486 +5D47D6857E82A3FDF068B81C0A747AA0F3D5C4BC089373FB9E9C54802AA63B82 +DD8C82CF7B941BF0714E80EF038C1B25E0E5D47AB1BF04755F4C29B712D8B668 +0554E90DFDF8D489833CE9317C0EA6F23ED270C8128FC8C95CB187B283A730E6 +32D0A11357ED48C36D5B681777CCA3D56A827C5AD83F35469869A4F774B9F2FA +4C437C95DF2DC13C8F3B69DB53F4DC0A1980762A9B736C4F1E435D92B92E7840 +B382109C02A5DF71DE910533E4925CA4FAC2B146E67817CEE6618F2C3BC9B828 +74DAAE72B6BAA987EC03CE66EDF04462B72104FC3941351EDA8C1D7E5273C8FC +C3E4F2EEB29C2C8FFFE88579C1EC41543A55C6E9D5128FAF3414195A8C7A9352 +0667E7ABA457A75D720A090069B396D062200E5A2311535AA241CD8647D0242A +0EA4B1F527C48F40D79FFCEA636D77DD07ABA26FD3F878DE004B03A2F95FF25A +1BCDC1D87FA05B201A4874325D3FAA4DC787D8C595E3E8D11FDF381B92FF830C +0AA70E4E4F65C7587BC5D6ED535A8E130B46D339CDDA5458BCBEA5D2243E4C18 +0DB006C0DEE0468A24D1DAC167A4D8174C296BCFB00439400D0939C7EFAC5BC5 +F62346A2DAE415684F1FABADCEB476B46D821F5E4A28A1F6F51B67320374379C +5B73458575162583150D0B8BF816CB57E08682A3219B0446AA940D0CF43CC1E3 +7566EFC3BEF49273128E9238B31A9244C2001E38308ADEA60BD86A89E1E3C0ED +D4EEEA31131AFE60827FBCFC1BAA348FD183A5CEEBFB472CEA0800FF18CC2616 +F43B04620E74D3AD95EA13E15B13BE3345409D3321397C77D2E612FF5011B90C +3A51DD8C7CD3A3A46EC0CBC605D1484A9C36FBE3A18AC54DEAA2282F7C037856 +B6511E5C990E421C34FF668EBB8778FBC2FAC1DB3F88282478A52C9ACE31128B +2491C873A3B765A204907B5EC4FC6A94AB9461AC8619AFE24C2F0A4BDEEB9D8F +D8405A05F9EB13EEBD79B32763DF402E0FDDCFFAC142DB65DEA80B5EC6400B9A +00A78E80FD3B9F909E953814958F2A1AAFE51FA01EE54970FBA5E41384903E04 +1440C92E2EFAB3E685D730455846D97C2DC7D25586052401264A31F98382BEFC +CF9049E23208EBD952DF7D4A5F0AD7CB2688D77C2F3496AE263430000D226918 +E3CDC6C5EB23B8611A14747122DCB9E016898F69D4314787EED886123293FA5F +01C3FDE4F205CAC20FD19471E9C8FA721A3AFDE78156DA287E8FF14DBF80315A +B56E9E875CAF0DCD3A622134291B4C42E7921F6AD0FD4940066229B892E57554 +4CACC05DDE1F374CFFD453817EFA9DD7A6ED9079B32EFB148C235EF50F26E479 +6371A267FB33DB00F0766B00F0D43992386062F80B62291F623BD1245357B2AA +FB3B27E7BA6CACF749C32AFCAD322510C8A13449277BDBF7C221D63B96D99311 +93F461C677AB372FE263C5C19D87DF70134CC0AB6B1FBAE2BEF9F847E30932EC +89D7521A16AE1351999AD4D4735149AA2892CEA8519F619DC0653D01992AE7F8 +D0C5635C4BCD35708D454C174CB9863B83FE504314A9FFAE0D7535946F0C146B +9D507E1BFDB6095A5AC18DC2635E1DCBEC393DE1D8D3CCFF7B0258CDD6C00469 +D3B94BB1E9E4397ED49FAE2C83103484C1C24151046952E3B9816101FAEADDF8 +8DD6296AE76BEC4B00B89D319115F5F95C568DC54FDE1E0A07AD3D3620B86C6B +96166C4B9AEC2DA6D2B2D2EDAD08D4F58D193278A99FE28ECC676EDD4FE3A624 +3FE82562852B0EAD2A6FF707789799A1546326EEEA08A5AF24FC99F1A6B15E91 +CB13F53C90FB93669B1D7CD4882F55258CACB374088B0B01886155E2AFB7F3FE +F4DC284C5F2D0C56135ED79D8348CE3C1F8BDD50627589E806E6402A32E69D1C +D7EED5F9DDEB91496AB5DBF0D3698FB728A782073D64B0C4E28967DAB8087ED8 +491C3778FC5916953C235A59BC191B8445B118AFB64C3E7840B3756E02ACBA77 +D1269ECCAD63C3FA7C162F3AE317372686B1FEEAC57C8CC0637236CA01DA6B0B +83C40F977F766962E15349F020BC048136E35C678123B4BDFF5B154E234CD0A1 +70AC976211A99B8CB8E131D85532AD7A72072F577B51010F21C6334006371A3D +AAFBD45E1E76550DCC6060678F94E0C7D54D88D066BAB5BD21C254D9628F9502 +5043E9205ED0FC7025C033558FBB3784D2CED521EC7C9F7D6BB8D62899D0E52A +A0E385ED658B1DC84DB76635FDCF0CECA2BE5919D0E63BA75850596A3CB916D9 +55F856AD3075D5C57686E65AA912F0A6E9E4A778522A630D9D9AD3732629ED47 +BE694C35221FDAC7E8CF5C381CEE23E29AA749B52E68D1CC2554EBF31BDB5CE1 +FBE58C5935D06F09B46B96B94CEBC92981474F77036F0EC33C2149E6D945F147 +44CE2B86399056014CED967E976EE7DCDB4AFA12F1EE4D486549C14FE1052324 +ED70C3A6955BF8CDCDC7EB01499126F0C303E64B4370E83D5687E957DBD1B374 +7600EE0E0DE2C57B37CAE46734FEEC0A2F3863CDEEC17265F1EE104BB143442F +35329A81ABA8D5F1B7F8CAC158E4DBEFAE91C2BFD05389F048B3BCCF5B0F66D2 +4A40EAAA1E7D913DEC4A44A9A382F53EB1EE3966EA18BEB5EBD24C203B95476A +0E0C8568E08C357FF880600C27BCDA5623C8034CA1EA2AE24701DC7F1ADD2302 +100F16EFA05F39A2DB15D091F103259FC3C4CCAE4A858B7F72309ABE6CA45067 +EF46BB3C4738E048C884293EA5882A2E6E3B3B3C100B5FA02EC334DE2B68F4DC +2CD866AB8F83BB0DCAE954BCFF8EE7C3D1CF90CC51B295D02F1130F09B62CD05 +AB930D97F9875B9E65106C4A8719DA2C75A332C038E46F7E82BE4F69DAA8715A +1046DCBAD2DB3086A1CE04C8904988F7A2C9891B3C2BAC759B20CFD5BC8FCDD1 +03FBD0AEA3CF53E7B1896BF003AAD60870BC9AD50F6D257AEE013DC166B0B448 +D56900DA44885BE5FB7F3273C15DFEEDA5D6E895773F4435C3F2A684987FF31C +4DD09CB3B2CB9369704CE85FA266676C25FC30B98D74451CFA0A3C0E99ED6CA9 +D31D34A3566A5BA3EFCA62168217429089E61A231506779BC845BBBF085085D8 +BEBAC6370E595188B74C1CC2D9D15CCFF9220BFA63A2D002E7D7F2F711837671 +64E44FFC9B07E092C2C3BA99354F163FB87655EC865C3B2DF852031A3930A148 +9A1D29BF24604E2E635C9ADB770A13288A488F4FB237FB1CAB2524F7D33DE2C3 +F2C5BCF05F7C438B28296F842E86F8BB4881A3B4F89B4352AD50133E79A70154 +7DE8C607A98C696EE1D254EF8E5BE67ECBB7C1220C5FE367EE2DE9D8AC7B01ED +47AEE18CAD10A639B038972587B10BEF449E7DB2C97F4D97FF55099893616BEF +4DD08E57DD9262ADA201C5034CC56D9D34B34E2E1B6DCB02F3971302060EEF2A +D942D62C270090BE5E74572C751A0A6FA081A6DA4430A4A069499A2ECD39FEF0 +AE78E58ED3A64527A70D5F8801EEC47BAE1ACF720369443A0B3D7AB4543C6830 +098F2E44D895F737B26D090F9706D9ECE37CE444F652A5CA5522B0F836201376 +89A28AB47A1291A96EA418DED49A829E62ECE80A311BDF5D1DCF070D38D9C9C6 +AF40F5D93824E089A7B95E4E4DAA830860F2F9A1E3BBA08E539CA4B54EF6E2D3 +DF247E11690FB99A7784D7105F0B4EE1509D657497BD054FCD0EBF0A9D3B5C39 +6E087FC344F636C26158F742D14A363E2130C0EA0DF4E0DB891ED797B63A42D9 +1FBAEF469B0C79081D2C0031E09A3776F862AB8BCBE8E80FC837AF15661324A2 +7C4CDEAC92310EF54B9A24E44B04B5D265808B3B5639018397EBE66F21829F06 +7D0E6BE0DE08E5961848E93669D607F60C25725B7EE8FA83011A5543EA5CE260 +A4 +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l048036t.pfa b/client/shared/lib/fonts/l048036t.pfa new file mode 100755 index 00000000..4ec846a8 --- /dev/null +++ b/client/shared/lib/fonts/l048036t.pfa @@ -0,0 +1,1260 @@ +%!PS-AdobeFont-1.0: LuxiSans-BoldOblique 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Sans Bold Oblique) readonly def +/FamilyName (Luxi Sans) readonly def +/Weight (Bold) readonly def +/ItalicAngle -11.3 def +/isFixedPitch false def +/UnderlinePosition -39 def +/UnderlineThickness 78 def +end readonly def +/FontName /LuxiSans-BoldOblique def +/PaintType 0 def +/WMode 0 def +/FontBBox {-228 -211 1098 1012} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078990 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D9E671B3988AF5066E3F90 +863D5BB633FB30AE28A6ECF53B5A2F518BA91BAF2EE70FE3F56243BB3F4C04A2 +FC016CC374C654204EC90A7BF559178EE8015AF532372CE4B4B82E2469BD5401 +63B4CC74D7623862E31F62F9CAD70643A7C39877265EAC7B5D71744C4F83BC05 +E893365C941FD0FE135013335FA2213B42226D6B522A41C5A6C11780D38E624A +F8BB54EE866274FBE41FF83840EFDAEB7227809D506507E8322CC5B16FCD97E9 +C441FCD253585347C705C556A3897EE543648265232A49B9D545B6F618870554 +03227116B9F656C288F9C0E3CADE4544BD1E749D80072FC0D0163DB84A4245D0 +41460C3566BDE66E29E0AB39F280C2F229583228198C7BDFD5C07F110E0D5CC1 +BAC768138F8DC9F0974EC7C2BB9F5DC97B5950A1A4E33F2B20061B22196C7FE8 +C82856D93A079270700B11CB7A6396A4E3FE6FC04D6AD49FF13D1A2E1FF8B07D +FC49258896C83AAECC29610440D2BA2C0D19A4E8AE287DC0B8DA956F2B4F5607 +A04F0E366F0A57561CE1E06CF7F3A70E300CBB077F9C918B099FD178493939CA +0D25A808F335DBF82A11AF2D6B2EC8E4456B60DA9F5B713568A34E66F4640C81 +69F5023C211D301FE810A6B6AEC197CEE2B0FFB4CE02B119CAFC5449D8F12416 +989A5A22633105A9750581969100BB65CFB052B5A3FA20A0B4F61A4B497487D5 +BE89F7D45E1A93BB28C6778B39FF708CD041FFFB50B640C93DBF1EFB2FBEF63E +9292124E702138A914432C50435D796B22106A34C1BC3EE1EDF873F60367C580 +7A5D98032EEDED53BAEFEB69414B714E9EFEFF2B1FBA659081577F87DB8BF212 +4C0E77A8605C1C1FE19483320AE88A041EC9B95D10E89CE673E4BDA638184422 +742F4CEF3086B62F5873A1A3F8263EFBA4CEFFDA958521274263467B9C485EE5 +7D8AA17A8C364F517203A2D9A66CB18201897A6223F5EE5F7ACFC3009B39005F +61095364ECA6DDE4113D8C39DA710A4716E179812E79E9B01C3D7B00ED2DC574 +63AE485A2AEA55611672E1AC489C6D09EA559B9E8DAE17DCDA80FD287DB8D742 +D4DCFA54ED2EF42A988D72A491A4FCB9BCD2AD4F225E23932C2779C3B008AFC3 +4D2B158EB9697B6598672BD99C91405B5CF668F3A4F21347549C1150B0FD3EE9 +6EBFFA6F54F44DDD229818D109E7FFFA337D80C83852B12597686E29A0B855D7 +D548EEB2FD8AC5585F458D60F8A18F33CF5CDB9B45FB4A8F61732FC5A2EE6F4C +25C2B903EAFB4A0056764C4FAE4278535DEBF80DB8A9B5C8C471A62755CEB38A +A05D0FC10C4136AAB774FEE2C6CD57CFFB88D9266696C390919F94BE439677E2 +E8AEED7B8B4BC2E422F6C9CD1711B496E57D31637BC0CD4D6001D0E38F54402D +1D6B7ECAF0F454219AD6CBFB857D7165D1217B7F5315DE5EF333AADAC59C0CD8 +290FE129D720FE11B2A16ADF49FD140902FB8D8D33FAD0EF0A79AB30319A9048 +F7C2A38D5E9333A5F0F20D12A73EBAABDCE13D9B38CFBBE20408959E1F506784 +761CB0A7C72A220EEEA74FEDF0158F7F36EFBF9DC5D83AB22C8756F42627A51A +03C6590FEC9DB77B790A5672158CB32C9ED1980C4CB369839DE47BD57CB4183C +EF55A34C70996A7E00740D236550AAC8CC6471BD00D8E3F5BE3727A9029F60AC +8B0C06076ECA4D854E4A1372610EF8FA0FF97D3E637CC8580098961C24735991 +349C2958B4E7C4F67625859390B9567ADCBFB334DC7FF5AB1C0462DBE72CA093 +0D7F43CC5230E57824ABF7857EB2F856841013C9E06D0DF4BC9171A75AFDA802 +4491D89CD7D2D65515CABC474AA8B9BB1177A502E4B94302E1E40D6C8FA974DF +C6496A7C1DC202A79E79FF0D9983E48F8F66415610F0174C5C555DAD5EEEB9E3 +FB5EAE5F9B5307ED89700DB98C7031DAC8F371CEF716BBAB2DE3DA113E69EB18 +EAC7A1756A0340248142E95538BFC1AE4814585AE16E397C3D34736738CA5A26 +6E761DC0F59CC2C3DDC7AE6E801DED28695E7DE6FE9CD1E29FE636391ED78E0F +C450839D27A01CAAF1A56073473A4347098007601698AA2872EBA4F2F32CE6E6 +3A9EACBDC28AF4E8DCBFD8A0ED978058FC9E7FC2A676500E19337917EB0FB8FC +3C37E3903185C96C4225436A42C5495DDD49A9D072D1FFBCB9C2CF51739AA6EE +CC537EC85C9F316B9721F9806F214EA9D10C35645C0A05CC242E668C9B60C2AB +DBF148A8A1E8BB212A272FDD180480BED9988C9AA3C99342EEB70D7EF76C5282 +3D10C8C811418DDF1516660CBEF817DCE1BA41EA0AC8356B1573B9F0272472DB +2112A2D6AD1371128E62FD35068068713F82E2FDDB721C253A378E284175FE68 +8F77FD876230F131878D76D91B43001821A4DAEC5A6C30742864B2F0A1E6B434 +80FB5A969A3C3D6471529E0E1972EBF27FAFA811808D374C5157D8A90F04A4EF +34DF27414E217FF7DEAC000537131429842625464D0FF55BBE51B7048B964D57 +DA20A4F579C86D81B3186CF6C503037C83CDF97349E575F24BDAF5C2B16290D5 +805E88F22B22C59249E9F8CCA25DDC665C2BD937CC6C957442626EF81BFD7640 +78990E9071638880C0AECFEFE1DBC5D86EEBE3E8C181C3DAB690EFECD7C291B3 +882F31F29C281C21DC1C5EBF2975364992B3996E5393CB54C4E4A07EBC183617 +DE1739F62531F36C19404E395389B85C893F5F8BF72AA7CEB5BFF1603C144D69 +25D14B3D1C4565E72E0E64282C5398BB07F45EE86FD19A2C20792F06CB6106A6 +C4EBE8289ACA36D30B57F62A11F90CA64F25A15ED9A187D255E532490F74A885 +9DC77B2D12EF1CB9D5CA120B45A7C05A7945F83F764F5620CB01BFB6C1B68AA3 +FF860DB0A9A811A6D2D6862355A95DC11CA108037E03BFCD8D527A3985546876 +F38487881D7575298C274CFDACF1D190103A9906B08D6415E14857594CC90BDE +9643A556543EABD0412C8BF1974F4A19BC80F638158D5CAB73657BD7395840EA +458E7345E25BF1EEEEBD4CE7687934B5BA62D34E5102E033A9EFE75CCE2EC089 +E62093489C4D0F18F6ED577700D5D2C9A74561848322BDB46828E39618A39D32 +F13F6CB6E9E5CF8F004D6D37C02FCCFE227D75ECD3E4BB1C50440858A3CDA4D3 +66BADC120B31CA9CA8A42FA9853309A1AB649E61F45351E2946D9808BDC97875 +6F08E8C2931B4740800142CD15A25DFFDE8B2EDDB21FEA1F251ED643F08D744F +F7DC5E26064B6A16FB4F5872BE9544E8CEAD0DEF9C52B1E16C7FCFA64CAD2B9E +5AFCE93DD0F8B460BEEAEF3BDCF5660D99A6C9DF1138BC0DF400084540991574 +6F59E90316FF7A74B5979828FB02465D96354BA5757347FA0F92D41C5659196A +FF6E24F615039D949E6FD374243708910E145CE8E2A2461F5A30A5BAE30D5445 +7C10BAC56E08289FB57C1D4C9C7A87CA8D24FE421D4189540B6CE0190281BA4C +9F3CCC4C095B86F076BDF504F24E9B422DB680624D2E452734D17F0416586D80 +B3BAA3C782475811191B857C19D1C4C5192B33997E1368786F9A8D3A3500F7AD +988FAC17371E2A74B1FEC5CC55F9E64649D01230A83D28FE63D1175297818C48 +29697A12F925F189D1A162AD1A71FA29D1706F047540BB4730AFABCB6D3BCED3 +4EC3B8C028AF3E09A9D30AE9BC82D8031D8E00FBC591B1101253809C7A733B37 +4C39CD97E0EB92C5DE19499051EF9FEEDEEA7621C0CE69DE520587D990024BBE +87D6E8E5D59E66502FB01BB368CD92FEF24A618C1A987A898AA3D23CC543D7AF +49C8D30AAE8B9434E491D98E8D4D68DC8D6B741FF66B9AE193AA685864D542BF +3BD2C156D7050190A4D4535D5B840587EAA6AA058317CCB77D0471D83D1D2724 +3FC905BD7F771D0F6D8C3A1D8CDBBA2461A709C004F2953668FC3D0F4B13FE33 +A9AEEC634A3F9A0850D03BA733F6DB834DCE4228883308EC70CD5EE550E51EAC +3D35A3AAF9340E2624683083F75EE493318188E58286F1A4B879C92569DC7960 +538921AD7C6B3C89F4D6C28F650C7C86688FAFA81FF4635EA3EDD855C3CF4DE1 +FE6C8D145BF56105E416F5F9064C4129A0277251A46A054E38E6ECEB327ED45E +1BD5D272182A1CD8A8D0EF92EB46C55AC149D29A4B7000A7ABCEC1EDADFBE735 +213E93C0C251917221DD8926F3BFC5CC9493941B41787936FA077F706E8C48C7 +2430D26CECF90F6086361E3B09D2131963EC4A29FEBEDCDDFE69D56AD538D258 +C3CA85AB0E7CF62E5147038FBED9F0F834940D5DBA99D2E2DC2158BC1898BB3C +57912686C5BC36A015228460F7F1A0BC47BAEBE092D69CA9848E389398997613 +5B5F1F5492A02E35585864CE24860C1647113B53203BE4702C4B09EA377C64C0 +2645A1C416E4551FC9FFD6BAF2427DA4D4853E4B2F9B59E4163FA3D5CF4B1831 +6C51A54BF8040D96BF17EF31A6C832D55AA3E61DCAE57F91DB30BC95A30F8251 +4919068E31C8A678D8FA6423911FF90F48F3225EB2E7CB6A58DDB1DD58AD1272 +6C69DDB5F50DE8718E58126289F883494343DBD4A215FDE54548464E8A6051F5 +6C3DA917300AE09ABA0EF4A4F079A63E1F15030EA41B1EE8EFE18D98D4A88912 +7A790989F9B20E68A81A49CAAC1CD91CFB9401F60C9DFF87F2ED944006432CBC +2CFC078CB5809573CF15721E20D85EA27541FAA4949BC8FA6708810DC205FA64 +28B84176BA868FE351B87361F8832D742A5FC3BE6B0557AA3EA5788239D1FDDB +0EFC4CEBD4D736054C77CAFD5B1453B65FEEDF7FD01311C2C582B6B97EA70687 +8E287CC3A451A190DAE2CDE4708400A48D6F7BE00704CB3F9AE8BD7B4B04A2CE +3C3B8E6D34E3C3C9263122E10F32656166B2BBCB1EDAECD6500C4CA655ED6B8F +037DFD3485443D4B789F3B591B350B9F411FCA0617CA75EA728D0BA4313FBCC6 +B845ECC9E23E497F1F955A15795F01E4A6BB8AE113B2F64DCBD2C7A0F87EFFC8 +994F130004DCC8F2503B56BD9A773C920D3D5A5CD0FAC00763E4E17683455C90 +FA36D8B76DF144C8BA7D2EBBA2E4D5751E7B4E2C675E37714A3ADBB0F17CBEBF +518E3B60DFEFF14230B2FC48080803B9D05B13023B2BEF22311E91C8181355B8 +CA3C3680786B74FD8CE374CFA68A19E7AF2CB998E329A7219859AD23390668A7 +3C833BFA931829782F61C50E2F91A0B9D8EFBD8A6B2C024D5E8E10A4485F922F +06CAF23E970215328465A347A9E283511B92A442D9CBC7B221990D4F679B04AF +112B05FCC1C323CC94A73BB4267655DC61D2E57A0A013DF17D61D3E565AC7732 +23BC046BF8B812CF67AF115A80C8BEEB632B9E87BA2BB8FEE8251B9A4B4971AD +B4982DA27005E24C78E5470F5664BC1F2F48E7D46F660E543BC2C985D2F2B5D1 +8D9C43B976478634A91027F47A5E6F5F89AECBB1C455225528E6A76D4E5E0333 +56C7DBE3A520C8194C27AA32C34AB0AC3F5326EFDC65CAB8F7A63100D0AB11E5 +F3ECFEEC5D9E39760F0B5B3F227B5675F6B782DC03AECDC1C94C16B4CDC1A1A8 +F4341DBC38524D47306D254B37B7CC7CF4E8A2006B7CF3E97B38012CBD63706D +2BA7F279218EF039D9F2F1B1E1A59FEA6DB6EC02DF73061D2CB3C179B3BBFD4E +2CC03CC26F4A4136EEE04F991CEB916FF87E1636740D020721257121F938E0CA +33C265E3C1250D7E62ABF64DE8B4E38D871CB891AB19013334E5D91A744C9EAF +AF9510DFBCC3D2FFE910C4717549E818056DF04A965140B505BDC08AF8A15F4A +4DF3EFF98A4F1FA538B1F121166A5C250029861ACB23F8C619481982F6A6A5B3 +F789B519D504B8D94965217BFFD62719F7E8B8A8A51C6637DE5CBE7A2FF5554B +3D08019194EA5C2BC5CEBDC53ADDEEDA4CE45BFFB9F16A92EFD9C8B224549AF0 +E77131EEAF05BC082EAED8CB6D9DA2A3746510F00F396E66A90C7DD34770F4A3 +A570BB3805F4CECE06731A46151DDD1971731049F57ABF174C5766CFABB72356 +50F03E186424F00A0DD7158429158487223DEB5BFEE53B4990E9DB0E26BEB6E7 +EEEC6CA0A6EE8A8AB949768B21410467A8ADC90E30DA2D8D0E8834B30CD25CD5 +210825E6AFFF42827C99A7E89FD9ED7D11F1795392BBD337320E4075855C5B37 +BEA02800C4F9D24B95E43CDFA3B4B25EF8BF41850C0A0FA8967F94F75627B6EB +FE9751B0A9F14A4454104ACE3ECBC77F62397C7DD731C0D0D754F5D8975A2FAC +2CC33806A516E9FD1DAE386456AD8C5D6D84FAFB2DC08710E285D8BC25FD0BC0 +CE84C436045C9DD14C34768D04D17D62A1CD97BA0DE0622AA0F01979B2FB83D5 +0814DA03FC088A4849EF6F85452629634B0BE5B306BA56DA0D95E8C120DAF5F9 +C880729E8971E16729996CEFC60E980B4BC0F734C1DB840ADE2C735E97CAD49E +CCD3FB38A9764688A52FA164C08C0B9B614771B51AA4E6C95622562ECA3FDCD1 +1C1EC3B74515E9B5303433551B82CD1DAE2FD07DFCB96884BA912A1CA6253747 +28E81A26E46B3169B461943AE9273307E1234636DECE2E32F18CDDB4579C90F3 +48E64E999FC86B7361B8DBC95EB4D1B4B127EB81AEF5B86361FA83085F8F2618 +6AEDEB2345E69557E992535F7B26842B02FEFBC4994E6BE410137AD8CCFCC8AD +76599D96338CC250F9AAE458B6A274EABCBA497DF7ABA3FD0C21DCF14EDC1613 +A0471FA5A3436E83323CD33074ED47C21EFA96B2035DED6D0D012B6306E4DE0B +3CDA126ADCF1F6BA4C2B814A658668B44BFE5C0CA3355D738459FB7ABFDBB0F8 +786B00E61CF93ACF31B60707D674A1A0285AED6E4D640FF94A0B0B02AAF27F13 +5CFB88D3C5E5499A13AA520F4A7889331CA9B35A5D2958683E872AF2E51C1BE1 +7A7DE58700B791FB8FFA6E0F249681FBD10BB62BBF56B6A8B788171F0C72BDD8 +E55CADFA6E7C913BF5644CC759B59609756DBE4BADE6115B6E42A4E15A5D764C +AF80ECFC52EB05FA03D4A87B9E6961F54491FBC6E4573C7A4B960BA6DB2EEDC5 +22742279DBE770E15ED5703D20EEC6E56A61C05D508A64C2DEA63289A8DB4225 +05E16B7D9B915FA7D94CB28426EF0EA683C543D173B22CA22E174A4B3EB88C1F +AE3E3056F4A3173AED92601CE514C957C7E5277070A72169E9A58911678F9EC1 +3F39BB3E1EAD8390126F8587CDB7F8A2FE06B06732EB9FDF9625ADAACEA23A04 +36DC51D828A5FCB1F910DBFC74E1D2B56FD88EDD58B9F2EB0504A2F800FF3CB7 +502C05AEF78B333E4EC076541335C1E3EC95AC70943127B5632954FE3E0F9694 +9147B51E0D75976878FCC4AEEC2661CA4B19BE4F93B07BB7CF0E835FF18FF48F +137AB9AF59CFE1C925CB0D548CEB2FEE5F5B7F25C730E9FF2D757391D1310E4F +EBF025DEFF64DD04D9A06D4B5B84F915CA4810499D3B8F2E3065E5079126C181 +BAAA287430C555E330B53D21FC9C08C1D1822522076A247EC3C322D163FF492C +39D0BBA3DD100EE943FB6E94E4C9686DD0025A04535538D816ED742D70BECF10 +0D6105BEA237207209BD25F7DE0A713B770CD0DCC988952F847BD8816E91CA83 +0BCBA7A48E9925ACC4AD0B1D1C03247DC912BE14909BC7961267BF4DA4DAF6D8 +01A1AAC313F6977BCF8232199DDF4243829130679FEF1431BD6C7BFCF2BCBAA6 +08F6F0D9A4AD5D04C9109CB5AE6013648394C6EB83ECE2E39D46759AFF128924 +004DA587F7A3D6C7EF7A7BDCDD0E1777A0265B1B4954A1F691BC61E2C008CE39 +F4AC7EF840CBE9FFF366A71A1940BC4D7A9AF68000485C49DB2DB1FC400FA036 +71C490F52C175C1315297D147784383759FC1A0029200E7C6BE31462D6D6BBC8 +3F5F67ABF810D460D157E94DB0C1D7965DA58683759800211657E3ED552C586D +4405243E51052A55135B4DE1F10248ED310193E316E18713372DB893ED164232 +85193FF7C88FC96E091B565BEC36CD6A757B6FBA76B54AE14C2EF6B65ECD8420 +3D5BEFDBE6A4F71E52506FC18BA2C02F8AF58DDB285F1677DED6F10A93836A2D +0BD821A5AB069A85D4338FC007AEC8B21FA8CE6792BCB01727990280A57183F3 +6E74CA7520341E95BA611F600D5056CFBBA755B302DA747B08208D21DAF7B7B3 +F2BDC1FA0EB5A05A917FD9E0834F0DA72A9D3AA2AB0A074752737C7A5A6A5312 +CB40DA86B9BC2258EA09B5F6DCF4CB791963D4570D4E89F4CDF0BCE26ECC79A9 +444447D97B32C2C06F48A963135AC0EB1B1D0888BBD1625C11CD4A9F40C1D27C +E6993E6992E1B21CD0FEFC40BFC47AF469563AC79BD433E6FC0419E3564CD4C2 +E3715ED41E6166696E4CC4FF0C89F60E88691AEF06E800DA26151216C0FDDEF9 +F04F5919E3FCD1972F6383A60AE0A56ACDFA018988E01AF9D8AE9A8EE4B401C0 +1867B3CBA3D9E7EA775BBAEFB8FCC0C22F904421B20B640D165747E180C15437 +92F54D2EE73C22A689BD11E70B5A964C1C7DE8BD98C063C9D1348871F5801694 +06844033834CB512388D1CF765AC08824629B541F84E20AD3C5161A3C232CFD6 +07AAA25A6B71B17D0209EBAE3662041FEA4F315A8F8294A4036FE161CED4707B +32D2B2BA3848FB1BD93C6C420F53DD1BA44DF7BEC87659CEF2FEC38BEBBFAE92 +392D2B0671FA00AAA30F06602415C8D67E5252E04E91DF5F62B615E71A46A514 +FD2C5B43DE43DF612C36248B8D27E2D7D390FEA0C56A396F591307CC5BF972D5 +E9D7AA5D65332F178F311A8E08E4911813E3D201B3FF4132C83EF21B5EE08864 +3711EEB51C401B8AF91220AC05FD576D8A1EE80C3891A8AA792699FF784C0953 +94C4E33B8D02D81E2F5E85AA049A89141CCE1140A9CFA4C78153531B1C004549 +8D9DFFD86A271DAF08B85F942D93037BF741258CA94DF4296AED020B131AD485 +DEF39C8DF7451F81ABD667E103E9FAE7F4AAC9D567192AAE7E8EBAE2E46087F0 +A83E7F096FD436AC87978A596AFE55CC09A0C329FAB21A53492A1C23B6ADBED1 +D369010199BFFB00FC6554DF5568F04460311FFDC67DCAECE1E8CA5710B0E8BA +315DFB8C6276B8FB9CB9C14D42A2CF94CD54909E8873FE58D18C274EFFC29D09 +F744357EEE5E12C5A32AD69098A1BE95C6C3713C62A7F86C1874CD274589AC11 +40545D2DA1BF3450680DB402512098A4FD147D47D11D3E9157570586733D24F6 +CDCB0762FB61B16EE2C85564DA2B9A089CE4F12DBCABCF8DF177AF3B1A6F1EED +D9DF8509AA1DE596EAC9AAA062AF4E52BF05E243C9536086565B71E3D9E78CC6 +430105D74B754836513CC837E26AF3423701EA7D6E816FC7E796B56522622D68 +D750972A781FC96854CB962B069377D094C861736699ECD6ACC998C1572775B6 +00E3EF63719E34D4950D1D674548248B7693866A4738F837EE8EBA89B085AD8A +78E2F223F7872AAAB987008CEEFE8A8DC2A6F6C379569696D4B2FE9B174F3BF0 +27D331E30B15762F52F343F1CF85B237838A5AF84AF9BDB7611EE38675D76AB4 +AAE4FA7FBD5CE49A47F5F52F42702905B1B5E3C754EC74DF3F7757E7DBC56742 +318745C387EEF697D14E8013C25763DA1A160A63482F8462F806614957E0A5BB +B32FCCDB28FF2C7C93EECEF415CBEB80B1C0A8DCFF21F6702ACA217E81294879 +AC7E90D9460A39F58D255AEFBC5EC674277B7971B7D272C1F8C1C10AD7B27F55 +90EEDD1F14087D002719742D7CA335853E8641B8AE1FAC60415B83E3160E3A68 +C5B2F117B4503AFEC26D8BCC0EE50750781175FD616AD7A4DDBFE60666F8FDC4 +44BD2FC4C5EC34D1259B578EC11EF75944D0E1A531BFEAF7898965F28306C015 +6D572FD61B31F35904CC6FCD85A598DE1BD812DBCE737DC93FD91079341FF963 +4432EBE341D447F08FBCAFB5C7389833FBA0F47E716E6790DFA1F486CCEABC78 +FAF007EB9686B0C16990AD09DC205662F51BE300E51273C543FB072EF77357F4 +F5AECD3FDB8ED5F316099B380B0335CADD78193F60C7FE5CA9C6695D887E4E89 +123426A47988C2B5F3460CB005C9E139C59E2D377F6F1760911A8FC2E1325B63 +C023F62AE8D2D3AC3474CD637403D341C50A3E380EDFA78FA0C0679DD04F69F1 +3D5F0C33F19D1E670D377652EF5D35F1568D2F3769214B3053005ADAB1C73FFD +EE789CD271A8D8BB800DC4A2460F4F681F3F1735F456D8B9C4B62780D2A9F372 +665352E8D7EC353E7D81A6E29ECAC96F50700D8F1E618918ADEB06337154845C +C1B7EAF769D54A3858D8E4F81C7B201F4E8BB74751B8EE4304BEBD849511368A +D405ED3942A7CAC3E61B49EC8D32E9364BFC20A8072564D427E3892165F7B0C5 +9785EDAC494D590658F226E84B638154DA935AD664B9DDAE7C8344A157C36A57 +5752AD98198DFD97D942C38CC5716A1864270085533519FDE9C7088C7FF9E0B4 +E1511BB6291BA896F40E69E2AB7EEB740778442D57E4DF5D17E7C0F6BEB99666 +4695C52D1A884284177EA3EA6AE6F061542B21C2D3C87714EF5FCD5402E22220 +709E610804FDDFC7C9231D7E85F70CB274F42A6B0D2038613D7649C74BFCB997 +10D96D7E1C26F7E0D58CA6B79C7F709E8893FDF9765F4C53B8A13F28EEC8929C +55164D25AE26C7B978103A593E17E49557CA642F72F529A5504C6381060C3EE2 +181E1ABEBB12B5148649F461C7643E1243A44C8D02711888A8726AC744140B59 +7CE5BE248EA280D802F0F6B7955CB1D4D0FB36CF8960BF0A718B91FD2D357DDB +484739DD257C26E01C539C5BACBD92A8D6C97B56EA6DF85B1E4E384295BC5A82 +4178CC59DCE00C6C75139FF17EF33E4654F806D81698E2C35870EDC52AC05827 +7476C4ECE666C134CF2231EB498555248B1DAB1C4654E4EE3B5455D2C472B36C +958BE6B0D1CC3C87EF568D4D2060C0FBC17DB3B8495660A47423ABA7179EB6C8 +7C746071C267A20E51E231A127874CA2517826A6A980CB51068BC30B7B3937BB +61940B7F361C06644C1B2472EE1C836F9F9B8A4E33ED8CE8ECEE0F5E09AE4CDA +088A34153CC840BC895D6D947A57B76A9A6C8F81339CC12682D4CDD18989F936 +3D00BB0BE992C50DBF82BCF62926ECC17FC680808C5E802258FB9EEDAF8287B8 +6788B4D3C3CA5F3CA6ED288A30902F3304A28F40B92A5A6F987BF98F777FEF94 +CC8AD2F86D76A7475348AD3D07CA6CE80FDB458DD8235B852B90950DE333A444 +0B00C47921B1E201D7033832ABE2ACA0495D0FFD3B22488552F43C8A423428A4 +021471B6109144E03B6FF5148B699DE67FDDE6FA25225C6806650754F82BD446 +40CC9FD2D90E8812A6E08CC935126C8612C71F4CAE97ADC75FD58115E212CD59 +6614F53AAA30D9C8A7DE2A6EA32395EDD26713BF8B6086225970D8B4EEAF71B1 +D3B6150B945878F806BFAC36C33B2344C5233F7C35B8D1264EA12DC081914E60 +78CD9F6AB21585D3297452BA7EA1CA2BCF3F39AB49ECCF8BBAA1A22883C161E2 +699D3A46B51E75E3D80A22ADCF6984B6B67BD11FF7E05C46E0516B434792FBDC +A88DE35EE688D35ABEC1B8945A9A3806C1C214D80D0B60DC31496898B73E46B4 +8EEB7B9D2C3A8829E041663AA48E7378DB18079F4D76863FB08405EE7B8F3D9C +328314A3DDB55BA7C28D4ECC2A4E23A701B88A80D82AA2BD4824FD90F47AA702 +014753CB1E8B020F9A3CFE47F6BFF747D257F48F3507494ADED3BF179FAC674E +2A372DEC39D0DD73AE3F932BC5513947A51671365CB6032F86BF3D3D0F1E8CBC +145782A2D8B27FFE77AC5E07493BF2C423A56A37FEAD71559A149637F8054AB1 +5F76AB661DD116FC5C55ACEC633447343E30C555E0042739B9629D712CBC22ED +1B725451BC0217964F3482250C473C77286326EFF965406FBFDA478FF4E3F4E7 +A53CBEE24C1BB2AB8A79D88BD7BA1A7B86C3650D2D5C7F23119719586BC11C6A +04C0B90489CC46FFBB2C6F6E8993DBBAFF62F63F79EA27C6D2B1FA55AFEAEEC9 +705C0A22B7E0E94CF9306452A854EEB6FB0032E442B5B3A16364BB3ECAE00E77 +2B845CAAB5966A5E78BE8C5440063CA3BC84A4B0A07BE880012DDA7FACE5482C +0DE438ED79516FF924EB0713A68124524D74730A6318E359B27CFAD218DDD03E +5EC4EE23FB7F94D4C88367F6299372BE29B5A4059D1F00C0C2433F79DE287A3E +60A5F5B1C812F1E12809A07F9623ACC0C0DEE78F0981FF701AB187FAC2004BFB +73B0926EC097237B301C311B478FFA455B8B1C1129FD2E4A62D43D2F79BB693F +1E88E5DBD5705480519B874F502197C2CC30D8E716A5DAB4EC24298E7DEBEA5F +095EB5BB78B4D7847B9C25F2D462C86A5033B7EAA136BE3B3993F479B76393FF +757CDC548E9093D916A40045AAB54413B0563FD905451E2D0BD7815FD377E00C +7DBDBCC6476AA2C82C52DFD027134D8154734342BEFE176CE8AC20CB16C173BE +776D5089A4C080D07196A06AE34496F04C5B3945BA8403B2B408EE150BC0269F +CE8A1C1CBDCD996D75705F6CFE6D487025D924208E6304791CBEAA62DF66C80A +9557DF93ADABE4ACDDA1C18DAC4476491A84F8C8D8932E6C02FC22B7ABDC397E +AC155EBDC6F8DBFC3A2064E99252D3122685753C3BB839EC743D7CDF9428CE6D +0DC0CB52F218CF1D9C8412DA2CCF13677FB55F9963BA89A47357DA9957306F70 +59685DAE5D0A70D180949B206D8502489F82D89AD159B969ABFCD08A746B8ACA +538FE5E148F151034B6A69F604AB09431787DD29C6D4414FCF3C4D04090F17C5 +0BB65452A3EBC75DE088201997025F808360A7DCE5C74F04617E9BFE06072F7C +D3EAA6FAF4F5CABF9D87B851CA785CE5A675AE5DAE55C996D5CEB5F760051237 +F47CEDF612D326DF900C771FEF1AB9CF00C5B29558FE329E88C62FDAA94EA598 +FDFB4A27216007C73B14FB5FCD9AF42F39C0879080463A9EFD11614105469C73 +F38A92C4AB2290459238BD513895FD11B0234A17B303A1F55617EADCB41B7501 +0FABA82CE8A8C5E98308B5B655DBD6A63CDB44B3034A2E20BD44947FA1F52217 +01B16A2E6CFD35527363C5981CDECB886331092AE9DBB2403126BA0EA79C7356 +7AD019A16D9957B2617B5F4F9B7F82E75A718BFAE6EA4BE7D8561361DB470A9F +82E7828B10C718536D6DA7155FCC1FDCCC2692BF147027F9DB207E981EBE36C5 +EDFC37B83290541EAF2514891728F4D3D17730396614874BEEA92FC26D1DD076 +0142E42962897F27700D4F34A946571D2AA7F5E9BBED708A9E1D0BB2F9FE0823 +A6D026E3C9D4D92320570B87D428F98BD20A395BD06B600B34E274A9FB42B0BA +4430B56E5DED6D014DD78EE54522C25429E5F6FBEABD61CDADC297ED24758E2D +85021DD2E900864CCA07616BEE37C74B379C279F554C4A20C195176787EAAE66 +1466F8126083FBAACF3E774843202587C09AAA172DFB89E26761A7398E9A9997 +256301DDB5ACF882349D99539BA40C38CD3E69464B76B5839EDA48508A3D7246 +FFA59703562647B680288D2944AA440599D0B9BCBF2E1261F3AD23100219B1CF +3A1FBB617606892DFA5DE1D7C221C4A6C8608566B92C67C3044CCE7FFCBAE2F4 +100445E92F506306C2553EF320325562284B579353168624EDE9FB921A759BFF +29F65445AEA413844E4C9E7448E47E7AC8E934D993EF1DCBD153537282E28104 +DFE7BF8601A2F1544FA971B9FDA521F228BFC95495CF5BB48E4DB9828F64769D +1C7AA777D2F1B79E054C1E6A03D3D27CDAE3594D6F37F8F03572778058A6FE9C +E8E9AE758B7D204A02B5CD228029C1909656F1A784A3120555C2705370C80B6D +6F0F9A0DA15870FC79D8C451FFC98D8BCA3AD6865ECD906B2D8B9AA6F62FD013 +9B7D59E9F9C84976AF2F142B953A76748C078A1B32566CB71C808B4EF5B0360B +60000145951DBA021F16E090FCC1137C613A5C488646FE8DB564D5686D49E0EA +152390D5AED15FA44C71C4A829E250CC5B3E2B708EAFECA4B324FAD72A5FA2D7 +CB9BCF155F04EB6EFEF4CD2E38A6D435E09178D26B9879DE75B7E366DC829DC1 +A7E25E4DBDCC29DF8AB10C7FC617481FFCEF59B60ECD35DBCA03CAE19A9804F1 +758EA342DA058363A1AB7210A73045411EB5EA0C97C64C7D89162861C549778A +F748232138F5BE892143DB15AFECBCC6E16646DDB26C7122D7FDC60D530EEFBF +32F9050BEAE6A683CC7702866FE1E6D543FA8866CBC92D25772C79E823F6BE83 +F1F4F52F8C851F7F92C1E81A3FFAD932BB8A35C263B535B3615DBE8ED8770B4D +84915C479D24345EBEE99B722DC5C169D04A908BCC3D0585BCB6C96DB29A469F +32689E30797076DC2B096E1C92C8012E3134BFB2CDC67E6C389B93018B42D727 +88FAB5CD6F4A4262F4F45D72346645B64A393EB960F6BF1A26CA2FEC965DD763 +1276D5168664E29A51BD7B8A10CB6F8EAADF55C9727DB220749073D3E1FA31EF +9F468511A80615D35F26A05FF01C183480D2AE7E729B9B04A39789730E5529D1 +180942E68402D7407419F2622574E55777A4DAEDB7CC9F6CB605AA428F28CA6F +C859BB79A649578095243268D594212EE8A80BBE4DB720EF6B3695F8A16516D5 +6B6DB2F9D93EB1598E06879AB08ADCAF0DD75C0BD31C9B8F44041415E6EE47BE +4421A95E6B80589BD4CBA6066C1092D76F97EBFB971E38B986762255DAFBF5DC +7F3A28A028DBAF10AE5D8210285FCAF35E22E68A42B3DD8281D41A657DA2DC3A +7107994D7E9FF61934E1F63186B9E28962AF5D783458A85A84A5EA3676AFD039 +F899DFF2319013F517A0D3F36EEE1C42DFA5B1C3B8E41A5BEFDEE21136F64A74 +0B2F3D8F2E64E4F106DB68C3FD4ABE346FD45B90DEC25D1B705EB119B08409FF +3769266F3A94B030B57BE670BE932ABD17800AD8115BC513329CF65557EB4E66 +788C2481A74AAE555DF0B8C1746FCE0349BCCFC76120274B4414F3E860295696 +7A94B5BBCA7F31D3DD01A59E2E2E188A323F1FA8E1B9EC45589B444FC7438731 +F4FDE301422B653FEE01C38E0B68DD30B1B7E2079EAA2332BEEC840AA36BC3E0 +8DF770114A53A01DA1F4F2BC6EECC92160E3EAEB18041E2FE43891778A89A23E +2FFE2A64DE61CC651CF2B1C44EE9677DEB492438756A31C9A3E89678959EAFE1 +B93A0A25B64712253BBE7259844D4988A574FB1219C96915A7BFAF654DAD6BE6 +B1A88AD6CF09027359A681FA82AE364D430AB261668897C5414511B9B31DC31F +FFBF69F5C1EDBC0187EC0C658770EA19697D92D1A35E1A98BF60F6CCFC3BCD51 +EE602EC8A919306705D61579F04CCCF587C6A5ED9B056FFA9FA84FF41AB30EA5 +28D5498ED5207B7244EE46C84FB5BABD2AA6B136559500CB5BA0FD4BAFE45AFE +9E0AD540712C7759078A5C257C1B542BE3DB37BF0CEFD0F18C336D5B4C5BA34C +9E09B8DA0E388BABD69F7D1573A86E1C52AC315719A5179E7D986430BD34CFC3 +6110822B15779B121E917FAAB2510F9F280AE0D24F25D7D6CE64DBE1241C3CC5 +D9E14F5A5B8E3B16957E642784246850E3644C6ECB7954B469C1CD954D0557A6 +6F04BCFBA452A34A6733543D8321405EA12C1658EFE72CD0D2BDB735053D38CB +C72446A5C57FBBA56345C1B00B4E0DC9BF4BD5403B1E1BD0A890A95316BBF90A +C683E7C352E2D61B24E84C477AE559D5BB86BAA35F235AD4F32D7A9C9FADD578 +E3FCCF6BED0F7DF1E412B8A923F7197DB936E27230DF61C370318052ACFF31AF +4709AA521D561A6F1B4C8C425F6638A138EEA6A8CC069559AA3E35C7448A1ADF +7445039449B49621781D2D5E969BBC78A0CE5FDC02A7E0A76828FAD14330416F +B79CD927968771EDC913E875C5D11C2F29CD9DE992F652DEE96685DBA857D0B6 +0A2F410B2B46D779B25BA538E0B0145ECA0B14BAD0927FC63ADBCF8EC10506F8 +282DB2D07172C19617F95235C7AF6E1253C8405F53839B54C55DFF7C46A16202 +BE0F0587471E8D83E8E91A3C9F3BBB82BFDA98811803945EC85607FFE3E94E6F +7E26CEE7A306E4C4409DCDD8DCEA89DD1F08EEA1F0EADDAC133DCB1931255F63 +5A22E592DBB0C8949ABAC62402CE17DC7A18AAF815C6C86BB341E7444F878817 +1590AC436E3CEAB3FB79BCDF5A12F2413A82579DE9E5E36E92B47E465CB3CED4 +554D1E308769F56B2C55CD8029696786C0652D7F042DD0DB7F24AED531753E9D +82F63CC50A1240F87EA74381D61D912C8711F6F6E9C0CD3A302D0F3687EBF024 +C97CC23D4E08514D6BE8394632BBA157A6606DBFFE884CB958E2F876525ABFC0 +F0370C5C9FAE209F10F91614475E9EE4972E95D8880F5714F0D414272F3AEEDB +EA181B2BB43631C15A68C0CAA12A8B9202722EAE1D0897657A1A8C57CCD0DD9B +F97C68EEAE1E098DB56203C994904A400D4750C150ACE554E7B45D4D22563D0D +8879046FD0D8DC9EA5893D5A58C85E81C6B2E13A89C55ED399EC11B5C1F80EA4 +53EC27FAE17E582B3EECF86CF73119A8972F00D946ED58931A10586B6B51D39F +72D17CC529105D5F8D74534C2CCFAE412A516CFD4CE923EE8072950A606224EB +229147A8FECFD224E4158BEA0DACDF53654232A1B946711DC8D20146B4CB7D23 +CE3F199B1E2698D626A28CBB039B073DFB33F29DD00B58875C28C700A985B0C2 +92656881336BF5DFBEBF01FDBBAF1D86EFD6F6ABED59FFF6F6790E94ECC70B88 +B0CFD30EB7D4677AD2E280A65CD9D95A35F7EB0263EF3231AF61A1E81F2D46E3 +D84C94044861630FD92006B7C0AE4667F0D23FAEE1285CC1B9D6541349015E38 +8D57858099E69487015AAA314120CF1D2C23BA28CFB15F11C12ED21EC42D3E73 +80AF786BF3958C30AFC42553C77EDEDF143B6F05BFADB6089FB93B9BAD0EBB87 +8ABEA058ED232D3F24C48359BEB73EFEAFC4DC43C6A1C4ABD12FFEEF73CF2649 +84E08AA367F464A5E009D2BAC23CA90A1B3F8B463B7EB947A25C9294E188BCE5 +512207D22E67150459C694156A6AB56EFC0637C661E3ECCB5D5331BBC268284A +8695461785F63473F18C9BE89D9447CE7EC2CB9AA325BB56A5C7FA6D03D9CBD7 +6520F3D07108DF20136AAE5C1D3B0BE03715C7660F767846D85548C3F6B5FB61 +19E0E43AA7FF6CC70789D3B646F0DE24AD23FF3ED668C6E7E25FF7130859A5F2 +3392D7F16549D755038CABCC821BEFA442C8079A33FBF042FCAE80AF0FBF8C96 +6E759BAF5913D55AFC923B065A752A6E47CDBC6DF8C5E3685D289220CF593255 +E509311E5D26BF43CC8B7BB2A519C274423089C5FAB6033E17625C953E9BE3B7 +FBFD85C879B64DAD56EFB9F0134E5714E8411249B0DED90B9AFAD6E40ACC3C32 +2FD398BD0AF07732302617909BA907AB22062EF8C849CED6C30A392BECF6383D +E6A3FE99D6E928CDC000C08511327BA7A0AC713A78A3D515E07396AAB5147135 +86695C077F211101014466A2E7BD0151B3E752DE0D255EBE1D2D56C5D11F778D +5FB60C8FD628814DA7F9A3B7F95CC77CDAD55477364A8306D2B28CD374926E57 +04887E6BBAAB59107A7B89C36BDB46E5704EA401C4DA6394D3AFC428F45465E8 +9D01140F4D783E3739AED22E0D871D5A4017D9684D2E55A47EE953FE22B75522 +6817F37D12A1EC0976441C94FF787EDFAB1E409FF9AD3201D73D24BE56C7CAE0 +43A73CCED4313542F4C1112C35141808CADC4DE6EC7E832A4AB4A580C4F26B90 +5B37051CD708D6B2D770364C04B7546244474FB9574E5ECE5427FBB29603F543 +3D41C97C021348F027DE6EB0A658750AAFA60737495FA80D6E1F61F1737FBD7B +0007EE164DE9F5877DF68DD8CB10A8F06CDEC0EB86280B3EC29F9DBEB1B91357 +0A51B254E35A72593862247E85053B922581A1840399BB254403D721AF75E774 +70BA7AB160BD5C9CC6EC08DB9DEC937712328EE8811FC9C917B293575A6439C4 +8147D7586ADD5DC23C61D1511DE64AD1F5A93A4BE587A99DB617CC4472B1F984 +24D991FAEB3F6CC28A21ECE4DF9175CC0CF56EBE2D262D431D3E8E7A1D220FA7 +CB18F1493A97CE32DCE1D95149C5FF848ACD3B3B32C433064AC995006AA2B775 +5C4BCE15748227CB3673B7A09B5DCD00631F91CB0A157FF1710A9D56505CF964 +DC1901FBC364BB98385F009C20BB41F96CDCA2021E36C3EE59863D5298497915 +3BA4DA380C705B1D81E07187A3D4B4191E5F22116FCDD21A3EA286C53961ECE6 +BD7D029AC344E7A5A03823B6A13A763C946C41229697DB8EF67007A934F27F7E +07BB63C5C5FD24CD241EE957F854450097D5E6E291812CFB9EAEE923711BB88E +B74E472FB4112EDE27A893B34725C9DA28F91F4A91EBB54168E327C1F9AB7A80 +96FCDCD85BDAB9ED36DF209620395F539FC7184D88BA680389BA9CA51B9A5397 +BD0120BF40DE8B99D6205FECE2E509EDB0C39BD75F29D6D97E514C2E3683CFB8 +FCA479BD47C8E02DCA2AE350529A568F66A7733528CA14CFAF4E792F10A11C3E +CEAA08A97CBD6D43CBB43CBFDC7FAF22E87EE9E008301D60083FB7002697B3BD +EF38EB52049C00F157558B3A8BBE5361C82F049D4566A1466869FF2584F6DA99 +23AB74F19AFDC1B6CE4C4AF0299F6AB4E57AFD2EBE1AF260EAD4B46A79ECF3B1 +BEBA4B9154DC2390AE0061E48D002EEFBF44ED6BD59317E017C6E42B2D8283BD +58B8DB392C511C12C72518A2B1C4D185E1D0E5068ED5F4C73E771A75F0BBEA45 +428E0D31C9083ACD4842EA136FB12094F786DE99956EC2EDE1BC9D3352E68CE3 +4CB3994988DD766F6DE69C5FA907DE7B338F22FB9377E20B7978E2B0BF39561A +F526141AF262AB9C6853BC1A947D79F8A6930232F955C6C88484791460E7AF48 +B235E17AD4507948DCE6A29CEA6778893BA825CD9DB22F9BC36822EF4E98EFA0 +628F8190C1B4985DD9A11F2879AE248E2D4115CB01446379D9FA1820B39A4B39 +9B1FB8E33D9C22EED5CF125B37DF0B7A471A58E7CF6E516DBD5F54C609517F00 +D40B22BA5BD7D3EAD411D4373FE4BA22A93E2DCE3F7666B178BB881AB2138076 +87DC7077CB5EB50F0CCEDB1786E5AE3753C4023E9C6526A57EF2C833CFC36CF1 +C818DA36058631F2E7D76A8573ED0BBCF641034A35E3B7728BBDB3B8CC9B81BA +71CA28E2FABB0714271E3CE86F5762B3975834692C390A3DDD31C7A609F3B850 +FC284EE819E6E6A4A8085A92155D502F95B9A5C7E5D02059D9D0B7D06F9D5ADF +85091858CFE4C7131562507C64F8AC607AC9936C79C87DFDB9E6A4E2284A5BB7 +4F7BAB56A319EC9D70D184F789C5BBFCCF7B7C2B91C2581E8A5CA55C8EAC26F7 +CCB524EABCCDED72C187EBB1F6943A992E63C0D46206251BDC363362A7A37081 +9D58205CB308A33E290AED466DDF02B1FE375669B08B19376CE9DD152E0064DA +EF925DA958D560D86FE710D798941601D996C655C553DF0AE6C0F3A18E54817F +7B30DE1D156861C9529A281DFC897A4B4746FA7AB6A95461BCEE458DB6D05332 +677619D0BD96AAAFAB4EE63912B703029AB349AEB275AD79512DAA4D7212C101 +AE39F00CA8DE02F438686211D567EECE1E42FE13386314A94281F014440D59F2 +6E258D72363746144577C85BE389F65676AE3C3D19CD2CB8BCAA75969712B8F4 +7629698C52DC6001E32736214349690EF8E57A8BF50C9F56A4A0493FD66A919E +9875835511AC63AEBEA6BD1753044BFFC98432A7EEC9E3AC68880974382B1EDA +7E01A7FC78EBA3A38EE6BA20636CEAA56E3FE22FD60542433EE5CD688FF4018D +307D893C2021D03C7F59C9F1387960FB843E1AFBE04A2F6F406C31CD5DB4B24C +20739D6D74C7BC11B20382DDE8EBC1098E0B5521CBC13D346DED4E5C41701B96 +A8F8A382207C21582BEF7D04129B3AFBB97455EC964455C85B3C177C41675699 +77FA7D7C2E62EAD5C151965CF3B4184C3BFDAC859E1F096CB050BEEC459D7317 +A088DDD378A476D46F26C048BC4377CC1BC095F688B7B7CBD3971AC1F050714A +35C81786288D82C54D86F5B00ACB50B0450A2EBB9DF94F0A7AB1B0DE394BDB53 +5C7BF36E6CFD410056591B94C351C1544BCCC77C06EF80A9D02026BE1D6B7889 +212859D0998B0B3E5DB66E75656D69D30104DC613DF83C7CB2C8F9D64646A7DE +372AC87CE3394DDF99D86BD15EAF56B06593F04E47862141D81D66D83AA8806B +47D3B43FBB79E806F9DF2288D9E6A2CDEA497B854C743DD4373017884177AEF0 +B44D4661C0989492EB7F9A5894AB8DDC93D21DA24338E7E12EF3314DF207911D +B84D6CE001EDE032D12416286899FEA12724AB45497E4A0CB868E15FBC144CB5 +ACE3ABC1B5CB2BC13A220F93D9990DD9B4CA9726CA00DEAFBEFC2BA9EEC3D94D +595582174CC45D726E8B961860CAB4C611DE70769926372F11492FE2D4693C05 +9AFECAD80BCCA589D7964DAB00C5E123933F6BF2331091E81E67F0DC0ECF1707 +0BB1C5E2DE5B1C88FADFAE9A6594B5EE9E9706466F750195D2D1539F7C80594B +531DFD2DFC0BA2482D86F2C8C3EE068C3B8596742ED27AB960DDE361827398F1 +CECEE6F2C74F944383CF07C88BC80448AFB946C782FB232CC3FC17A93E7EF7BD +3CE53C6EC2D3D25CF63A3CD27140B8D17CB74BDAA4BF2E76CB2AED491E9E1F70 +800B380CEE1A505E612E1BB47B07CA030F9E22C8E5B559AA42CBBA8C36E4A7B0 +6F1879675332B6EBAEE398CC34ED9E02770A3CE0560818B77EFC03B0DCD583FA +CFA3251AA96C0193B195DE6B37E89F2279603E17036B3152A111C54D0BB8EA57 +32CC5E5EA68254075A7133AF0EEAA153ABDE61032E6B4DF6C057DBFCD5981449 +68F39B3B1FA9EADBD8CED34E625A23BE959347D92158FB083FD351BC4AB0961A +2FDB383CC4AF0F4D841BE9EE98C60AFEDE729630E558D54477D47B41A63ADE7F +BDEDED305CE9A874EB2CAA040DECA194FABDE66EB73F69DDC4B4542F035D26A5 +26ED690F92548CE93CBF174EF853217C93E25A68B7C6E47FDDE19627AEA88A5B +5075A2EB5EBC4F291D8D47BF8B699B4B3617731ECD998002F003AC8F48B22EE6 +2326AB694E4D985154F4AB6F53E2023DF6A2705CB3C6E2122422A866AC481A30 +9B9DDCA04F7F5D3328AD58454FBFC63790F87C1947A987F740B02B8D19C62A7E +AEA6F7F7C7D0B1EF9A4A04094891F1613D3485DF031D4016E52729F0AA3BCFF4 +A5AA7C714B957C6F20EA9DA162785C4F25C37C0EC00CECA092B74C9BB69B3CF4 +272D015F54E607FD3BEBEFF03973BC28EE73685E037CFAB19FB5000E16E05B41 +23DCE6A1B6C3C6426F675912DB1886B8FD8EF3FC186A4E8581267B5289BE404F +1757296E1E0D67DCD01A0BA71E46824F962A5220BFEC6FADC5F3911B1F13829E +41C92272767398BB235DBCC3C192136AFAF90729EE25933F761582FEECD8A2CE +4EEEDD25A50F91DA79309E039FF2D1D8268ECEBAE56DC01E66CFA97039B96FCB +7BC9B91B6349BC9866EAEBD1C3982F5AEA86D38C3690FEDC113DD71B5BAAC063 +72C28280BD462003F9B8BCF16B3221550552720741E85066694CA465044FA504 +2BF11776595CC01926639215CD1258F59C16514BAC7A0E0DFA9BC3E6465F7495 +882A0C8B8E37DF36F890A2C4760D38490C031B61231C3E2D8FF421C3E70F7F95 +82383BA66DA2890FB3B6001C69713E84587537C409674570DC75F041B3232416 +B0C3483A2A724ABDC5AFEC995C1F32722FB685388A162BEABD1EB092D1105EA8 +D7C03E271937FB18A65E259DCE716A5C0878A01ED4A275FEE7DBF6634F3F3BC1 +1364443A9AF6697EE9DEDFA9DD67FC0AC679498D8DB38816D3D51EFB75E9ADFF +6715121DCF5B071661A9BE993CD9BB6E5549E528701702F13B5540AC1A01396D +84BDACC73DA1B07CCA3D213AB57C4D8F1DA01AAAE6C92BF2A197CA39C992F855 +F2938A0C8B6B112FCA85829FC4EA35943B6CE0FDFB766308ECE21566A2E59A23 +449FB9BAD4CF2B6460FAF544FFD5A0304763B6D61D91CBC7BFB91D6FD3559F6B +89C91F3AF46F9B14203D2813472065DE22D07D828FA2677C876652AC40AAF58E +C1838D8A74D192964BC8127255EB00951148CD288E84F960867BC49FA2702E2F +7C8023C3E86F10C63ABFEA6A328F1B9FE422488834E4295AF83BA1604D132A05 +6A68331BE2809C17345746B9341C97B014614B266090D5FC73CF8D2DC45E0F19 +EF046962391AD19DC55334C72E3C131B502A63A8025443F5DF795D0F2E99D749 +DB028C621902C64E72635E9A4CA28C86D59006A24A65A6BBDE8C54B8C433DF38 +9C93E3A0A3F21C223D300167C199FE2293BD5ABDD9F0B4CC092A6151BB6AD061 +D79F12F437EE38F6214A9C009BE720377AF0021AAF5783EA1511004B1238ECCE +C75F2CF0032133C84981A7FE1241C65DB91D449618EDA8FFED39D3066B6BD0FB +7DE0542C491202D694922F4FA4C4BF2AF72E4F74564F2AC3F54A9F72BF693675 +400F251F863683A1ACFD71981FADEEF3650B387ACA8846D7C57A84B5BF5AB913 +38A4BB4FBE788E9A856E366895E36329189BD5802F95DFE821C79B3B8841FBE1 +29DFEB3A465E36E1CED694425C1D700239DAA5723C916FAA77E91E781696C8C3 +E5A4571CEF70DBEC17C494ED46BC095486079ED8443BF0894B26C39D492C4802 +6CE5E89BA641066EE9993E5919207B12BECE4773591EF3B48EE224CF18843DCF +3F346BBDF9DA3B8A85A86C0B8F498AC5D92146BF9C187AAF18E6CFF2420A1816 +57EE974186F63E5A161375A822C588E417746972BB1A31B0FD68B95EB128B7FB +0CC33F2778C6236FF6B588B1A9D24BFE552BF848BFDC9C275F4E6FB1AF090EEF +9483A7AF6A6D7D8C285F535669786F02F0AD230DD9594A351D72950E7633A28B +ACF784F1E2CBD036EFDDC24E9DADD0C67F33D8F5C87E97404F718437D3F768D5 +DD9B9E81D81C0EA3445BACE76BF67DE5801FD0AF3AB7B0C40CA1412631DF8DB9 +34C640F23C28B0F44DBB92FD79C254F768ADFB59567D4341B339F9C9DE47D299 +3444A3E8A1392122F8FCF9B78FF2C2918A3FCD1D4D642BF89D2B12995735096D +A4B65388D6D8E9500674ED399DB7A0E35F7A80DDE50841FFFC19BD7434320230 +4E3EB457EB7724138BD8A53FD10F5DA01176551136B004F4CB535BECC7C79B52 +1DFB022DC76DD3FC3DD114A6A42C89543196FB5B85B6F8B9C9D9EB55752F69CE +2EA3C2230A67A15AE41C93D6904580A26CECAE69E12E7744CA7C1EB558A7F4AC +4243014B5694363770DADDE68740C483F4740C97C861293B2C06D7577E63F5EA +1B3373EA993C1C9BB452988A474D56D40D4B1181DCF2802B4822CF34B0FCB29D +56255A7DF6BD8BA1477F786502F55A31467EA9011A71216B93BCA4032CBCF8D6 +73BFD93A21D8102E4CD8FE5B9039D7AEB01708BC4976A5CCE0C757138E433568 +1DF2E3A2CD93DC5D4A83C60011E7807F206E0C13AABCC4A2351BFCAF4AE66971 +75FAAC7162E84CC0515A448997A20878CD4092777668D3806FA0D28488478110 +CD37E011C61FA9F98F495DDBC5C43B6CCB794771A954FC694EE1CCDB92560F29 +C4EB9F2CB61543667B95173E1A36D50F448187D52AD351FE8635A95AD9461966 +AB6D6FAB28DAB949B79724912E910DD9B78703590C55144DA82BEB8775855C0F +3C8985283167B473B3B2D495BB913B12EDFFA92889E5109C50244F3005DDBF89 +2583BE928EDE0102B0F7A40E4B0EBAC9DC01DE981BFAF286E04ABE3DAFC812F2 +D066DEEBCA2CEC8913338335D6297114655C844254175128C13B0831693ED51D +C834E442ACBA7ED6A2B3887A19C58B113A7BBEC794A909A1B9053BDBCEFA2098 +218CFAD30A617246BDDE096F066A00BF81F8FA0551AF34D98F50A16FFB09533A +E35D98AA6BBA9F845494FF985D83EA8B7888D9B058BA84F801BC9F78800F2CE0 +8FAE86FFC77A085603AE7002E4F6BE5D66DAFDCE2B355086B0FEF5A7E2A87316 +DA9D535BFD88B835C7CBC60220B6C546AF6F8DF890C9A582E47EA590307BB5E7 +A37299C66DA33CCFDCCE4E289E19A4DCD0ECE5CB3445EA37FE23053433FD502D +6CB673425C5D9DB2B0AC5C56D6420AA9E7598381A4BC05733F6479F24A9DF669 +FA4C9CF602ADC5C4BEE77BB61D8A3260ED88823D20A9D779BE6DF977441BBA4E +CE8E15F5AFA9ED9AD93737EB6BABB8B32379AD3BC714A6D1152AF18B4684ED18 +E46BFF0725B90A4886CF93FBD29246F9A79D7B41432F598B54602304E77DF101 +C414CADAD6D520FC84406FF20622E60B45B7BB3E353BDB5D4AA824CE42128847 +C11BB4DCE8A8A0EF76035908D50386546E45A1548124FC24607C397EF14C6ABF +9994ADBE0C74129E63E76BC5BAA44BB4F42B875AE8D756BB8FE5153ADE5244FC +784CB936E7C2FA1FD6E6300E423A4238DB8D658E8F1B17C39F5A1A33C7F44330 +7FFEAC4C1F9B8CED5308BC43E4C128FD8457B89BDC493B9C68DAF7E76B3DB809 +F6D3152B676DC1A1E103C465F33F087BCCB64583733E3773F7D6D4C994BFDB59 +0F7BC03897EB3CCF914C1FA400CA14CD5294B779B7BAED650CB2C8D486718876 +07B60CC3D111FB8E5DA6DADB3951595CF9EFE458EE412082A35EB390C9AEE0E5 +237811A13BCC85F07A245EA22650BDC4A9E8DA0575AB3269A4E40034013BD348 +44424AC74B1F6628A16533D8DB6D14DFF72E1845416611D45CE2BCCE3F34B1FF +86BC076132556E6C65F2248E073825D2B2D0E3DB91EEEF5D33B12B0ADAA304A6 +6291DC109F87E7A92335767B3C711F92F105B0B6AD525A6F8F72FE2644F1E180 +4578CC1C66D4720DDBED3CF91F1A46A96F5619A6D762E012053D14A26A88D6AE +87E37882423056FFB32531C99F2CA89175FBD95EC4A9E678B440D82DD77F9C5D +4B6D97D1BF7B2E24038BF1BF4B8327091EE59491D91DA01D8756B6F83C28F203 +572983E6CDC9C1D5C865B753D9B8820A39858C389CBFA4DAB82E2D35B6C5B332 +66A239F5BA78A4EED07507D2FC075C65DDC391B1A93A051F559C832CF36324B8 +B7909C130D20CBAD9EA9FD1ACD079D7B95401F72A950D81760DBF8895876FBF8 +018587D37FA6ACEF2593364C21F8BDC34A27392145EB2F63ABA3771402316E6A +2A30C48B7EA2096BF6E53DAD2C47CBBBA646816DD1E6EAF631F42B108BB2FC5D +BB808F1BC7A8D3501B2464F8BA83303AF8C43028368E6C814541E17717B397F8 +72034E115CE0AC6EB5983237CE8F604A9549373BDD938187A39F6418A8461705 +A6ED43F775595C7A756D9BC1501A440E6E4ED43B01DE23A206A654E2FEB4A2A6 +4A2DEA86708FA9CF218CF933DBD13044E82A7CE60182F6BA33519BFFF275C2F1 +6B6692E841CE26752200DF632FEA9C93BFE0267D4D5A99566C1AA78DFE8FC63B +2917E6DB430CEC52D19DF490FA7015D9796282C3FC78F9CB2F2D1CA2A1302CA0 +C6A066ABEA6C871D69B5E5EDC514260193C6C29C8D308AC4A6D38C962FB7FC67 +EA268A9395414F7E8DCEEF611D1AD784E9D56A4F71E13FC7B697408C1924AB70 +A62BBC66F38ECEFD60BDDDDF85F849BA956C3F3BAE422F9DA0946100221556D8 +404BA4327E9ADF31B4AA708541C46717385C3F57C3D7220C59AB272AA94C4F1B +62136AFF190C4AE70F287D2336991886EB3F14D2F2CF9451CB55C162F494A261 +1A88690D9308B80A3BFC92EB48FACC0C7975FA1F262D81359C88BFA3B5F91461 +EDF3E9A7764304AD3EA1B51DF695C915530389C7DB27FDF73D37CFA666E6CA37 +389BB54CEEA60324D68423B33B2A03BC00E7C890FE1A276A3741C4E133802C69 +8BC3692FDD7B0F837AA060A0C08F8A77976E0C5695D16CBB07AA95E8E4355831 +5B43B8C5F9D351826A537FBE9B5F89DF32DE754A3763A75CF5DDFC60258C044E +B4AFDA88104390CC2894EEF40DBD766A481C5428592FE68A6530F1E063F013C4 +950A3A30D2F352B6E547EFD81AF86ED43E0BDEB8A0B5B7F61DABC796A21F3990 +94EC45D1E229776B9357F339F6148EDC74A2DB064745749A936E1028C8BED9E5 +5EEC197EC2F23457A690F377A544648A9F151917046F34B672C00C2CA89CB8E3 +26AE54ABE1ABE6C6C697E08B90DDC90F54E32C0982299BAE9A7753C07755A6FC +CD5F7FAF5BBFB9B93032E1C176E568CBF93303F38BE9D78846AA1384A047E530 +E7497DAA12D294DCCB1747411A94EED2F231C5ECB8E8A43851F4840066C25E51 +EAD18EA9A3199BE80429EF8298BF6D473F1407777D857075A3CD41AC7E62060C +54F97F65A8EF5CE6FEBCAAA7223E2FA0C6A2C86AE5D82B0C80A20F16BB8768DD +E778337122FB7DF527B0E9AA47BD792C2484784C8731895528A30F7D1B7429E7 +3AD1E59232438BEBA5D065C8C4FF2E6B0A84233EC5BCB2E2FBD7031F1B74AFE9 +E4301B662DE9B6E27F62BDEEEC1A7C73ED4CC8E4191A473728CC5A0A35D2F3C1 +0F743792A11663F871FDA8582F7EE0B7C4C2CEA0AE1AC74A73314469903488BB +DCF92439A3AEFCF1621488D7BD8BB25318D7196D459EA3ABA44546B649BA0CC1 +9E29B9586D948282EB1D8DB89E4CFD6DFC16A005922A7BFE071819D8CBE15F41 +06217264D10450784FED734EC809C68AC760007A333E4132DA48201C02590D40 +BFC91E614F145502C9B27DD7950C46E6B25D4470CE79CB2DA192336726253512 +CAE6D87ADB60EF451A507CFEA57914F241A8C81DFC8AF788963F2E2EC722F81F +B2E1D28C07CA64D5E9EBE8722707CD91021DD64EF2700953D590A62AD8AFCC85 +30420DEBCD42A684B5C527BC149DDC14C4FFE9B350DB04B850245A1650E749B1 +B0C094644AD43AD83087930CCA240ADDC2975E05397807DBAB4AF30E6CB15F7D +014771BEADB55CA911E29A38D7D2DB1614DCC0FF899BBE9FAAD2513C27BB74BC +A225AEFD85DEF96AFA64F89405572FC5C3A40BB24160D7F274ADC4DBB260EB87 +BCE6390588627BAD6B640100D58212467736FCA465A4EF71821C6D765F3FFE41 +A030BAED3FD7DE667BA4479D5316588484F6317B88B6E91018F3202E8625B837 +49A64AAA69B7B00FE37413D1E632B6404167A439F9F2140975891FECDAE0652A +1FD5FFF18973750883207300E4CFAB59DD7C7394F173D0DF78DA3516B44B4D03 +C6761A6CC49608F0CBDFBD46FBE6FC6E7BC9558F281A8FE32C5AF888F3241AA4 +BDA43506A22A091D67934D138642141EA39CF627A6A2A5520634A9DD05F09165 +C03C0A3CBEE624E4F59BBD2201BD2CE1981F46C53B6F2D91AD7839579FE7E7B9 +A29DF2BD08EB5A218066E77877915B6E1AE372100DA1BB9B8D0B229DE48ECC9A +5404AC224521D9F648DA7E1C1102CD514F4A4F8F8AF5E90BF78A9E2D90C93248 +D39A5560AA0BA4035EC7B45EF7015A9A97E6A0104194E6748C11C5DEE3FA7431 +267CB641D551529E89571B9D701D1FEAA4F1ED1BF17FB532EE6B6EEAEFBB6764 +4CC55E7C8CCC63C7E4B93C9D0BADDE09B1EC8F31477D636F4C2CCA1A817ED12D +7E2A904EA8888C20333019E235870FFC51A17504DC9AF8ED6B6A462B7D3AA186 +CE76A233003D7A5AE162B64BF90AD0B784E1581E5AC17CF6EA2746B4240D05B6 +FC2D4E068ED743E4CFF9ABFCF73D66F2671978C6E8B440B08F0C18514039EFEA +02A14A8839A203C3A921015B5DA8EB9688632EF87CF933F558E466FCA150DB2A +494F6697334380AEAADE71CF8C532CBCBF70172341A0AF65CAA5D39907AB6DB6 +061948AC7487B667FD546F155E09D50252E2B24C7EBE334527851C8D5164D66A +56C0502EFA0884BDE703668BB25449D1AC862C15D434087CC14AB94788C34ED0 +2390D067D9D13D4D6E7B551B1B3D494C77F4B9576213835A221ED022FA6E3D0A +F44A85CBFD09D8E6D68B43BAE4CC2325DD56CB01A93B84FA68336ED8B2CE9473 +4EA7715DF92EA71C434759638A29738C84C814E13D858D0E23645C8FEB660603 +93EB19647F84B481CC71018766552BA16BDA1A94943EA464E99A0230B67E92B9 +4BB6DA4AF80D8C812DFA55CBFF4AE00E2EC16BA3114FE8D39EF537B4A982D893 +7B25BF1366C271B509E1C16E9632A9A64A2BBE64474D9500E94C21D2C0CF9258 +FAE9F7BA3259EB2E279995C2C7802CCB2C3E946B011043A4D7D2067EE56B77B4 +213289CF677C8F7572C95F2A03A6B7EBC64D99BFCC0615963F33B07FDBA894EC +D1F17EDF503D5BF1E5646E2C7995FB3F15168A518AAA7FD3FD05B21EA5292E95 +BF48F0BF9F41820FEDF9F5DF7BA4C396E4C71DAAD3F209CE8EBBCF5F053504ED +407FAD8BE9CD2EC265524575069CD2820E516D133AFA55CF42B3332BF53DC45A +ECBFC8F42F9A34E5663A6694E48B4EE0C5FCECAA33E19A125FA8831BAB9952F3 +51020BF0C27F175DE97ACC64C74929701567E6CD99A0A9F4EEC88509E2B2E93E +16BE159A8AFA0121AFAD45675FDDE7F795CC8EF9D41202CD38B148090FFB520E +530C701D3CC82A19E587BBB5CCA1EEAE2687486E1AF28A20E1C4C959F14868F0 +B411134AD1EBBD9CCAE1B708772CEF727D92FD864712B96F6B295849968F484B +3DB20337EB5386325B127115487425A5D474766075BA04259A6CC75B34D43529 +F41E37D69BCB9A80F8F9B8C4EB2E65CBDF1EFB70844639F347DC5BE018657FBC +F34908D7D2A25766F1EB5209DF5CB00709321B02E05C48E0363F0E778E0864EE +E65A17394FD73435E9F4523FB580DE5333B4EC4E5CB09F53504CEC5289B18B94 +76B8166EB1AA30A0512A56B675C4E9EAEE695D82B2D770DF175CAE19AB19E0E6 +E195CBDAC59C6559CA9C3620632C0CE3A380B6545D58486080AA54FBC5C4A8FF +AE0D6BE9F96C8E489C0E06224FF96E35F16B94EEAD8368D470E5100A0A731B69 +DBD7735712DD3D882420941F5EBEEBFABC28C3086CB238DCB99C0DA005FA85BF +4E5BD9578C0CF27395D29A94FD27584FD96F0ED37169D85D8B85F5BCB5ED8E9F +329D4D1A337BF1EE62628A3D3B81C759AFF5F6DDA0D8742044AA18B93E32665D +80E3DE0D2332FFC076A76F5535592D2ED1AFD60805D10798E03E8E65C17DB19C +425904FF83587A0200B406D3BD3965844289270ABE86A5D7A9BAAD43CB1AA363 +ED87682CBF19B2ABCF8E4C9AA701017F06A4346DCF7A000E40A00BA37AE5601C +AFE7D8E529259D1F57D7B00FCF5F246C902E920AED62751D94FA41FB9EFD25DB +A86F9B85B634562E96B8EF8CA5F5B77FC1CD168EACE9B19CE7D56CD99CE70197 +D80A2508F3F31A5BA5A8AA8F7B833C2481BB9A6CD8826475814F0B74740CD443 +83C3F266BAE4BA683636FA0BFFC57D71F8D13F91F33D368810BFFF77D9710902 +BFD32D9DD2E94C1C06026B3BFBA5F8A71518CFA31220FD245868729B88390774 +EE063923474CE8D18C2D34AA77F9EA37A92F7530DA0F67A05B2C11C3D9942AF4 +386DE7FA1BC11F0028D5EFE8A3474A5ACA8C1744BBD24EEBAC3BF7EFC12DABD1 +C4DB771E7617D4F5C4B759E84F40426E8AEE3BE6E334A378A3C56319FE296114 +047945896F2B8F8F925F86CD4755CAEDB75017A9729187C1941AC6A9725DD547 +197F636F0025E63FDC74ADCFAF0ABCD64DA1F7512442EA2D2E88726BFBBCA2FC +AEF3D4B56DB882F20ADE74063FD0AEEBF62AFA179E5AFCAA443663B3E8594DA5 +F4C4454B08C461F85142AEAE2BD3FF04F9A89C9E2C9519A856C2C32558EE6A1E +63D565CB3746C9FB6C9BF7494099ED1BABAFAA9069BEE833D13F3ADA35B1605D +2368303ABA5179DE23EDD6E2610BA46BE4B3CFBED8D80A0B8FCB27F93287D3A2 +33B9C13577AAB8B77BE80C0466255A693FEA8F2D0FC2DC6951F6431DE0F8FEB6 +659C8E985D3E02378DAFC9DAFDEEF0012FCB5ECAF17AAB951E0C6D213724B6C4 +E5AC05B554F814499271F37A4A0924D4AFC9960045C7E4D7546FA355016D5C2A +74B78E6F4B92BD1A45D430EEF88DC034CB01905E0C26460D401F44772C260759 +8A716908FEBDF9EC4DDA187960DFD111B73587D5B8E84014560A14FE1B46C152 +DBB6B7EE966712F3E8F27DAA9C758355ABBE19F067F140B522DF95ECB66264CE +B2F6B7A1DC8B3CE934F8E8B005DAB5D9CE71ACBEBE51FAE0E689429B3C0048B4 +9DCD4C933F249085B0EC1281A3754456CF4224329151DD2CD391D35ACECCF6EE +B03741D088A36B09AC5100A068F58D71E71050DB62D8029AAE834DBEDDC3C012 +C70D090A3A4F1A77797E73B93779928B824A882974004C16981AEF1FCF6DC7AD +34E68B09E69063B253447D6F461D0FD38C91EDDB5496040787C62161643B0B8A +B40873BD924BD5C3EFDE93964392B2503F5229F91C5B6BEBF6B977FD1DCB5EFC +EE8AF1CAAFA81EA2DC1B77D565C69001DD20295D5C4576F6EF44CBFB13601118 +F55B5763EDDF93C0994720CC32BD01AB5D50CEEC5C3E762F8E60311D2487D143 +940802637DAAE0CC3B892E566BAD6DEAE8A9006D71233C4A1C9E96ACD5EB7056 +DBE34D18C2EEEDFD73C771301B9C2EBF0DDCF269E05464790E36A6C124634374 +CE6B8F5D046497C80FB2F4390AEC41026B593693A6FF9E7196192FAACB98CA5F +BF6F7A10F8C78C07030D3BCBF0DB0CAC4981CF3550077183EA1F6C6C093F3A3D +49215A00FD60254AAE82C26AC7E2B74405CEC4EFC19E5C84595E88817AFD9E5A +B3D21F906F757F037252337BB6552DE24B4ED3665E588CC9C3E916CA1E2DD333 +85DBF273ADB790E1087E8D4994CC038D4F5C203539D1F5B72FD4B2396E175102 +82E544BE1AAF2045777071CB4D0CB8B7999FC2DABC172CB5200D01EE76D90C85 +F5BD6801F07E825D94FE5689C2CBB18727B84C0793F168D0EF39EFA0CE317D63 +AAD99D61D9A953A60FCD905AAC01232ACAC04D0F164E59FB59445F4E9C9206C4 +22BCA0F75FB6EEBB3AC6DD055D4751D6F93424E030CEF9ABC9E9C4792AF2A3DA +1F1D98FE0971C2B6B828004A58FBB2B4808C8BE492F636B13660839C5B6F9B94 +6457A0DB83D0FC4F05A993F6F70FC1ED418F6279DD339790006EC4CA34B34011 +8F4F922033AD1A70D2A3CDE0BDD6A0C0F48ED3BB61727EA6FE093E393C8E1A7E +D4B58BAEDB50B5395BA7D95D8921A98FE44F6D2DA73259560D815C82E435325B +D633FB6161FC6F82B0EBDFEF76337EF416952A7AB4FA74090DB78F02DAE15CBF +A40AF9D8BC81C164C581302E70040581314E8FAD7E0EFCAD384D8A7D21A18C6B +ACEB44932A14F6E5D05CEEF88068FBB44D81F2149ED7C294C583B3A32AB289B1 +C660E734972BB390708A87829D527A1C9608A16F6FEC6BDE309CD440A0197C79 +7682FDDECAD867C49BA02A0CA7652FED17F411F5DBCC61A910C094DD249FBB90 +8D477DC7F10C7D03157D0C2822CD3F3F7353A7FF200F0C20C04A395D66111E6E +A6EF63B509624BBE57A17B0AF22E67F33E32FDC20D24906A5D1A698A675041ED +76EA377C33CE7530C501F1161DE10A006ABADD053F635408C51E91E089A83242 +B55AE77E0C10F6F11B53AFA57A14B7F23BE611EAF1C8C3981AD7261A7AE81F0E +D62976181C4512FDD4A397E375D37E2A127AA5B2856C82AB99D770623F36EF3E +DFA5B73D2F8C134DDA82FAD11F791B3CE3455AF3E4CADA2977F240740D1CEE12 +5E60A4A290A8185645D0F49D05E5A59909EEF7C87D87209468CA51C352845C08 +77B816FEA743C2BF5296DECEDB5569EB87CBBED1E2BDB382C35ED191D451CAAC +7F93A34A219E6752E5ECD3F2CE819CE9D46E5509AE8B5F18D85CE2AB87273C7E +E067165BF75291EF6E744D6F5C7D199AC1758F2FBE9556CF9ED6245A2A9EE591 +E78257E36BDFF553B6E7CE515732C152A436EE59E219FFFD4D0CF148A5919AA8 +9986C04CCBC5D91B180529575BCADB7E34F94E2E1528C7A6B602D4418FDF1265 +9CABAF85FDC831CFCBD1449C8CD48E98DEFAF3BF8DDEBA899CEAC532E30F6D36 +B891F0AC6D74393034D49BA5F96EDB94ED8E1F10EDF985EF757BDEB967959038 +C18C05EBD2F27D6E47F4FB9602679AFA54E5F2810D69DAACF96DB0F277B8CAD9 +6C0E19D9396F94B1025C4DBF871C99D579C9DDD4DEEBC28A01661013CAF907A3 +4FBD2F019EA42FC201957DE80C7240B799FE4B199ADDD3C8078BF40E5F052CEC +01B7D3993E2E61B89DA8E539A09508576574CE014B530D13EF43FC8FFF1EDF3D +BDD344511B2486FA2D4DBEA3D6E57796A6788F396939748A957E51F01BCBCFD2 +DF91CA7FE81A054BB15C1D3E3A1062ACEC7EA6E4089913BEE42E1491DDAB0BEB +1E77A608F72A5D43C10F6B022695448C76BDCA33076A02E5AD60C7C247D2C3DE +85C878805D882F452B782B3D21BFBE54CE2961759F8D71C17F0C952F8D38AD4E +6B6AD1F498A64FA52524E62F37ABAD12E6D5F7649DD796E031BBD951973DA19D +C6DF66F38F0B06783B4DC6DBC15CC689D80C3822D5C3DAE96FABF9C0DAC880A3 +6F38992EF13D0C3AC162C9AB38EF2B8A4F176D8AD645E982CACEEFD28947BC07 +BB233FD9ABC9F4AF612F691F4A52BA5BD67659B8DF5D68894CD3DAE4C724B238 +8314DE16D901F3B63D8D11FC1BED822294527CEC6F31DCA780031F485A906311 +9D81A365928EA38CAEBE7C450BBA19FDD76AE8CD81A1CC6E38312957776A2ED8 +CF258CCAFE221200A03F07627ACF8B979F361C0A160E1E5635D0E30BE18EAC55 +DEE7A21FD8F9B6A53333C8F94DC6C1A1F4DF0518116402255CD84CC302991A20 +789689C51E8FFF3D868C73E1FB042C30C1EF54FDA77E03F04B12781C572DC4C7 +8D60E506C6FFB6422AC0DA6CFB438D0B5687A1FB63C9A96267630CADA9338EAF +B0F4433F014A7D37840496D8F9AA0188F558D87CDCAEF0A7F89F7400AB143F3A +7268A871FBD6010CBCADB1ADEE40104D9BB6DABACC4A7F45F155A352F10C8057 +B025F9435A77DD3BCC4C131B3DFAB32706A46A9ABFAC3E5C30CAD28F3F9D1ADE +4060EBC1F26BB60CFFCB06AB4F752EBE4D00898E99ABC6A77BD31E0C74E34F2D +268555785724E80B9CCC165673D2F4306045720CA41C606E9C33611C8DC681DD +0E8AF0E4BF73D39374BD5D36E1E2A95929647FC82583BD962DD149258510DC76 +6F03DBCC2E142EC8344964C303AC4EDCF7C1821623A24A1DC88AC09B60E1970A +312EEA27B9850401C1FDFCAF3A9BABE622C52268ED778475173E1BA15CC5FD07 +C1CFE4084A5C1374FBB7ADED6B89AC09E9FD125FE728CBBE52BEA25B2B0E0E76 +A4BFC50EE334241924F6A9750731736139FCCC3BBFD99875E2091AA8F9F33109 +7640F7A0CDB5B1783FA24E5C5434D732318A5114BF0080649C1B5CB4A06122E8 +F592101C09864AC1FA6F9DC9DE816B1D6D7785A6422AD5A5CF997E2A5B683CF2 +BFD6B12AECCA317236D4DE5B8E11AB4E0C0A40ED4D7F2F29D9D5D6F97C79A6C4 +3B626C4B917E2E2144D7A9F043B8180E45B433838BF44F86ABF22E29E50C1551 +36D56E3D89ACEC791CB407A7959F66A0272FEF1FF4ED642EBD735CD954FE2C01 +F0DBA979E80EED581BB0E1E643FDB205C86E89C19A149F4F978460C716F38749 +0027EBC1437B8B37FD4F9D7BE0720437E61747D2F16742076773041403D85212 +294402ACDCD82923E24860E0F807FB0D32298F5FE9076E6F07BA9BB380F53F3B +39288A33519FEFCD75F540B597324FA43FE1A8DEE64A756587419F319B8C6F1B +A2F29F17750953CC9DB864DE2CF3B5164C093769F6FDCABAE1F6D9616D8EDA82 +DE6BA7F8D24B227FC4AC0169F80D0B2B1B7BCEE7ECCEE7475E7201164C8B45F5 +31FBD954BB31D060E6E32BDDD035DBDDB5ED89FA955911D8B747AEAEA01327AE +3C2D04BE4DE78B313C4414BDE5F06FC0AE5ECA638911F691A1FC86FD8BAC3956 +C1553875B45A80098F377AB2DDC3549514ED658A557BDB939AB6FB2479F98BF1 +8157AF4D86883A19E9512F87AEE0411C1B08BAF29549F663AD5476C50C96FB5A +356C85B2C52995EBAEAAB8096D21EB470713A567B58D680A37E4DDC3C1A52BED +E01ED7897410EF6334A75217FCA97ED5E299C5FCCAB0F92584FA37A1EF03C7B3 +A2E5A3A278F3ECD40695E55F6072058BE81ADA6E096276E250AC662BCD562763 +863C4E7A7B357FF231E5467E76394FC47B591BBAF322FF9A94B2C3F2975C08C4 +881CDC4D7035E2385615B35556035791A00758F33582153874B3E6B05BAB6D2D +659351CAB34569B8025C7C51F915E30AF7EF8D48F3D42411AC8261AC04216FE6 +B543790196A571B4D28EF60339BB05BDF3208B8F9D1BE9E50F9EBAD04DFCE8C3 +8A39ACD81C40EB4059A9FAAE9B422536D090A4E2F757D3BBD8AD6536F000AADA +EBDC6AF9115E067ABB4269791C40A0C8EA696E851867186DEECDE350E0121003 +60563C43AFAC8315BC7D87DC949D09CC36FB081715E959FC914E931D80D846EC +44C3178C212B132BA2E64043963AD0C20D56175D57D4FD4BCCD30D7944E613A7 +BB863764A6AF5EBCE17C1179D60EB17B9C4E61ED6DE2C7CCCDB6C4493C8CF326 +A53E07C83A01726A19EEFF88D46EAE48FD5FEA1024D229BBE7B48332DA245FCE +F2C1CF78F1D92218BC6967ED2DF365E6F47FBB2BC8E9AA0014155348BDF54A91 +471FD23B5F75C270BD3F654F3815C43C4860AB4B8984829B238C614D7CD7EB6E +6ABAEB392C23196AA2ACEC2331FCF813AC4D6B5A076E6D6F5C98454C78135384 +2DE08F8E66A983B76B526C42C243CF15852CBAB77BB11A7EB644590254C939F5 +CD4FA3151B7E12483C75DCEE22A88D9A1F1E0F53E2579116D3FD82F6A55BFB92 +17E173A2D9A3FA4CD85ECBF1C088D45473630EDDFC84E94C36041E06D68D0184 +DCC03474698ED646CF7C636B2181CF5BD89C8E939AFD0B11A233A1CF2A7320F0 +D8937D68D03579E5C8CACDE90D37123944D7247E4C4440E4D29A1872928D87D7 +6A10AE04ED4053FD0A11DD5F588C4147E3809D071305A3CA695E181948CDA1F5 +A30F95AAD47D95138683452EA8A9867EA220E9597CA78B2F8CA09ECB43E9AF65 +2590E87F1A24AC721A9CA3AA88F0FE23A2263E279DAD980D7E752BFBDD172BBD +162741DF269EBBCABBF7575BB7C9E7B42777DF8F464D85245A5EAFE6E3D10C27 +0FF95542793833E95C8089F4025A8BA1E5E884541F0B33065F93BF1D30FEF287 +D7C73908A027CE521B7D6ED4DC2E77619854E10451D4ECADE3BC7AECB72AE698 +4E4CA0ACEA0836F87CA309901C67ABBC6115110F2B8C7433C4A248052317B283 +DDC1238D40E3D00E4D236112319F872BA3288AAC2BFE2B4C723C0C3239B7F95E +626EDBD4EC068FFDABC261E02A8A0D216D5686B005E243C95360865605316BCC +1A2EE56693C7B54DF2E68E6288C0DEE652E76F3D16791EFE6B7FCD744384311D +31527E20E4E736996C67331CF78A08ECAB6B5A720FA6B8C8FD80314C4793502C +9EDA72FFE0F66F303E84495B00DFD9F8F1748311571A52A1D965EED5B0DD1CB6 +003B902E1FACD61472980C40DAAD23C7D35D0CB00BB80025467A421E36E3FB35 +DA936476C87ED2BDA7F9681BF7050BD883DE8D9798D3F680CF983941FDFA3129 +18D0054964095C068B7A2E520ABC3B88F079A90AEFF5441256CC06D169A6AD8D +84D8D55E99DF4D756771B9EED972ED8A5B858B429216ECF433D4C9901B0AA14B +A55DDF1592764567D919988F21BCAC5F6E2823C374BD6150410F5AE77C3CED4D +5AE61BF4BABC795EAA2816FF42966CB2FFB2BD2CEEC59930FBEC3731C5BDA5AD +32B4A19586248AD9D3422D987321135DD57FB8939EE3D3AA7309FAA01F2474B3 +52722950F1216BE421C280C1CE4F5B6F2931E0D723E8908FE53A955EF5D6A6E9 +4188AE3DB1FC8E98E1946B882F27A4D6D46442DF31221659824FD9A68340452E +2AE390724AF5B78868FD734D7812FAE570EC1254C509153DA4A58AF3B6918F0D +CD439CE41A00234EBDC94B9438C2D541657DC3F840F485B2687BBECAF841C0B6 +C8418D6B0A342FF41CE90BAD8F8BADA85BB5EA094DFCA987AE5269C651A1C4FB +853F5514439C159CF16CAA9FE135AD70E5CB37D76EAFFA880E8B0B860DCF2DC5 +AE4A04FF5C9F3A4188E992DD1C25BC8ED3011D4E2E1A185147DD98127B37330E +DD0091373135082BE8B0AEF51C75BFEF9261D6FEF8B61179CE5DC17D12F1D202 +437E5B60EE9B2189464BA21E4A1F44D82A97242B74B6BDDC0144B44736C20B14 +238F49E81C75FF6585ED339D47FA62D94B6AD30E803BA4BEE3E75B255B2C0FCA +CB72A26D596C70A43C5DC401761FA38BAF249F2B9862A26045C122E4D27C08B9 +1E476E46428080D75CDA97A6FD21CC573F9B20FCDF26D6EF973000928FB4EF6A +2899B87F867C5E588BEEE781E24B670351192E4C479A66DAD5176AA8287CD1B2 +C5E81EF0C515AFCCDDB657FE0B2132C0910954045BA122A58025E616C1B90BEE +3C46C5D48DDD251B4E545271E4BC8133BAE3F601038D5C794EF7710CF561B19F +64426B0789FE6F8A3ACDACF5628E10A1114B447C03E201958404F76ED151258A +1A2FF8B5702C702C01F89DC17F7BF02BBBA8F78DFF03078C892285CA880A0EC4 +D27AA9331C674E04D085508D69B448D1B54298133A680CD67BCB80C334BDDB56 +1904CD441027BEF374ADA8D824F54473B7A090BA6318728E077A84989A4A4C91 +E8E648B51A68A39E16E4A2C5FA61AFD63556158F9DE92107B5ED054E240048A9 +FED04273519548C6773755222059259601C960A8D06AD11AE943D678BBE344B4 +C05CE0EACF18130D7470BEC987BEEF661DB3B5360B822D898EF70E5320E2D8FC +7D1E8B8C4496F2166F30D5D8C607F52FD5F12349593788B09CD9A0F3ECD80683 +956EB208E3B8E1FF7530EF6FFC96701E7FEA61D8765C7D3F1212416166DDBEDD +78DA095B29636A9AE2F854BDEBACBEC7AE41CBDFA15DB3704C46122EDA7F4170 +C26A5F3F26ED74E21A50679B40CC077E2EFBC78F3ECE60727283EEAE9F0C7396 +F318863C392AAAB0A24473B0801AC7ED69DDE14DB1462E4F988CD6143E9BA70F +C2BA50189A83AB577373E2DED9DFAAEBB2494C738B006C40FD81209C09C5D25F +65B94F71E4B12630C2651431F32C7B3D9681FE19089221A15ABD6701A2B9D345 +11915E70E6C18E0AA0C1587F4DFCB904A75CA357C34155CA5C712CF5BAEFC795 +0F95D60D91714ACF79756DF293D5E0557BD076DB63954B714D498E8244195173 +0F59833143EC98BAA06579E7E3015EEC4E40BD440211563971328DDCDC3537A2 +EF85F45EBC83E00B7EAA3272C16341E58E82BB3560E9318B512A5CE362FA098E +30FE2696E03B63B47B9D06A1FE63E336DC7B7FBA04422CE1EE9BCE3EF55FBB09 +4476FAF98151B50828F2E894D83F0A28EB417622AD150C5800671E32326CFBF9 +C7718D18D9E787C0670CFA112671D93A6B1F7BC1DF303A6E40C0A2F409917E91 +4212953AA6E5C67F3C4EB25E1B71A096414CE4C3455EE9A596A52473964E02FF +280A5037244294582F7700C06C5CB5E36CB4C4197DCAE062ABF1FB454E9FB4B7 +8205B1E7EAA27F177FBA6D621B8B75DC81594DA014B3864F4B1DC3E1C3FC1FF7 +F1528F63975D949E5A64479F408B24DD7A46DE3946A51EDFC4AAB046CD2E17C2 +130502B2636A631844D6E659BDF0CF6B180035F01F710F91F1573FEEBF8BB630 +506EFCA96CC5DD19AAE89054E3F29F964E7C6CC48CA3D98590C3C637B4F98FEE +BD75D9141D40DBDDFE318BD5D6BF6EC9A95305A959C34ADF2D9DDAC6FC6A515E +0B23416C1A7FEBFF8BADA0F36FB7E61342A8658E15CC052A94494F60844BB93E +6173C2CD93CEAAD8CAA61F53E70554AAA173868FBDBB7EF226F862C9EC437A48 +853C4F4D9C95F1A5FC1F6B25CED0DC33F616A04AE68BB9C0E869DE7B5A70F781 +E2991EFCE385076FF7ED839E55958D9A687E50ED4D4868B3BF5D92BE8F225F8B +E0DB1AAA3ACB072A1040A66BC457187648E7B668577DAFF15B3C2A71A5FC8786 +5DD8F0B26C0B51B3861B394E31C831107E9DAF2A5B4E54DE859E9D75FCAA59BC +F9DE63491362749EE6048766F2D4E1CA725A1194DD4E53BD0D42E0358930C81A +AD02BCDFACB892D098A345D9FFA8EF971AF3FB0F41FDFA41D9BD847A6303E83B +14B340D14E711CDAE7D42FC7A66A7FFB6DCE8554F607429010E81AFB8A970F34 +D5E1BB28DF0D6B23EDA7370BDE6A30B91E9F87E47663F89D83DB820895552B4F +2B9552C8069D460ABC93DFC88A6BA2495308089BD374207A3DC3A620099FFF24 +9B6A819B6C9063C17C4B37E875A144415E8457E422D1DEDEC11527132A8039BE +C5331ED90CB75732186BC48E8A393DC0AB95A14E84909B8FFF82AC15026D9AE1 +F4D644425E1A4919996E28567CC083AB66E7A1BD2775601C475D4791082AF0D6 +BFF7C28332439B20C50D9227459FFFF3F8A4739175E0D069B6EDB24E45A86D16 +13FBA0DA2C89AB468C17D2AFCE9BB04C4784C1BF76E61F7E934DA7CF4AF3BA24 +8E5CA0D0E393A59AA84FFD072123220D0523D68B3D177AA7B9055B9D08F2DE06 +5B466DA58A134276FD0EADDEBD6D594D62DF588EA65A2330413F7B143C3488E3 +73FF170DFDFB4878E0E8AB55CDEFD1A70873C56B28742A10FB55EB6ADED70A30 +12396A6BB42062A4713E72C4742B2A879A9ED91BEDBFE68DC1A934B2A1DEDC15 +1175DE769C11DE05E6E97F7678988274CE2AE0C2793393D6ECB1E6D64B72EAC4 +F8B487A1CEA2C817BE6E7E5F6979B5CCC836BC0A9D74D67C5E18F35CA43F1903 +F0A5B7C1C9F2FE48269FB582B57DD89768AB8C7B55E96CAC3CC3D090607152DD +89AF7A767AD4CD3266BA6FC0037A5CF9B08DD8747FE3D33F8D99C89123BFFC63 +A514AF6B08F6192F3EC45F62C2FA5D4F3B80E99EABA309BD21DDFB3C46ED8874 +F227278F654ABF4F935473898A36F306DFEFE8876AA51FAA93D43267FFFC9499 +1E1C9385FED5901799078E2FB3563655FABE1933F1BB5B4A876BE25A924777DC +D1D9C96C8D4C7CF260F5375AAB5262DC78E6DDD6CEF9337A3E7985C0C1875C6F +C06F4BE4E96C8ED6D805D235A1177778FFC894400464219584CFFAE7AEA5A184 +BA6ACBCF04C43320D2C7176D3666E28FEDADC2E73B9782597E947127DFFA9ABF +F8C8A42CC74290E30897D999818BEE47E68A4F672A4AA1225879138375EA0804 +C02DF75B8CAAF2971FE31F69155E56746074519505DB3879BCC50F9216CED99C +9430B4983C1039466E8D5A721BEDAF43368611F3E90C3BDB8B954A3F5A825EAF +D393D5E3DFDD0CB757B014B3FA1EA45892775DD3CA8D176697FD9478CD55A436 +8E62A63F84DD5A26271B502E96A74BB52468FF918A5F54249FA552DF3BC1172A +EAF29CAF5FA5E58CE9242BC04A70CB0527F554BB8F3E9D8A189E6D8BFDAF0383 +20B7390C5263D6AC6781A500A9D97DC8BDA3E156F63D3DD8D1344C121EE6FB16 +FB54B5CA0B7F74B32A32D55415AB5FEFC2E43FB4EE8B3D019C3FE29CE0BB3294 +96C9B4AEB0F8B1478AB7C9E4D784C25187A958A6EC1EE1359C3F7D3CE4577904 +CE2B8B18448ED83EABEA54CC0B5B092F234BA2A2908A15BA4A60851C5B1A336D +7387499E62F1AAB27AA9B071B849F35B99E26547B07A943D5F0020D37AF09624 +9552A0BAA86C49FE065A5E7056E100E84555604C9796002BEA168CD516C0A8FA +46A7329C7ABF1BE99191ABA619329AABECD308088D74C8C47F2E0772C1DFA1B2 +391B53A260A1E28BA2BBAE063BB88B2E7F90E6BC03482B23F3DBFE9D1B3A0097 +7CE9FFBFE770740A19A732CE7BF3314A8745D71E9F46002E1D38947D4BDC3A55 +A59D0149B0EF50411166E00111AA63F4A595F24B52DE94BC85F0535192095A0A +A244B0A292D30EBCE2629765155713E19521FC7FC3E10090BFD1385AFE183BC2 +E635EBABEB69C737C1562670D9F815F28B5FF2ADCA13BBCE2E8B719EB85D52A4 +FE27A62B7D8032BCB6E0C43E184C8B864793C272EEC5752A2533404AE5B4A2F3 +A4178CE4C2404C71BADB724657A956B6AA8C7DDCC3411BE0E49362570A2D39E8 +53AB4CEB466C10CAF6C38B3F3C4084F4C9F9197A8625751037EA5C2920B002CD +413F5F9CDA6FE303AFF476E88A14B90538CE1BCAC35BDCC953EADA6C5C36825B +853797CA70C519BF8A3D1A538FE6E16CC84D2AD7B1F6E5E725EB772326C04E48 +5E687A44390A99A50EBFD4A3D81B7442AB1C8D5B311B051C3B973AA2F2A7A28D +8BB32E72117770CA92293C9551E7A210655243F3813206C84C8569EDD9002047 +84AF2A18917F46115EC82BB96FC868A3E7058D7EB655FFFD15899C00346B970B +0BE63FFDA54A50A5A6B0054F2B9D1C9FB94C6878B04DB10A7478E56816725F76 +CB08B9DE852E377DDF83EB4F822026060D5C517F0E62A6EEB9CF13EC90002B9F +C2212C697D91FA63D619E863981E9F27BF5C092004D54E367A8BD3BF15DB2DC5 +927DB805F25E05C0394B7A6A1F6DA3EF3A480A6BFB6CC63A856776C630746D08 +2BA98EDF1C1FD7F7FD05E38D23BBD6F4493AB0C6D69749737620F4EBB458C2B6 +D8DD2E634532AC2F7BA37CB284767DAFF3330B7E69971AC6A3C77D5C515CBF0B +A228FAF9AA6A095011124379C61FAC642AB282E4F190C9E08F0ADB8DEBD3EB71 +3B12241BB3D2684F59DF02CA0F711B83A888080849ACDEF5682EBFBC62A4501A +EB2A59D9EE46F33362C13C15811B46AF95E460E93B3F50BBA029E233BF1809D8 +B845BBFC6AEA5AE7C83755281FD47F0C3B152FD8AE4B27DF7372860C9A09BF4E +6925ED9D6B1AC0533DD715B68C1B27D8B4DDCE201C111E681859B1BDE65CE007 +B3734F7B14FE748B840F53453252149F463F12DA0C87FD03E900DCB2567B453B +BEC6A42CD0C3BE0AC8999DC889576351750B944B49515AD9B3394EAC6B066996 +1FECA134E160D99B36D3ED88FEFA777ED7D0BA66259CC99C60495B6B8A5F19C2 +C957848A8E2C05698748E50A77B32C223C96C7A28AFC92EBEABEAB453AFFAC63 +DDEB754ABFA689697597A4C4FB90286A715CB31C2E59E37E23FB873E2488F413 +38EB42D55521239BCBEB233068CF020DAF179896E55B5609473211E7E9DE50E1 +65F684134614C82F5F7C163D43460A3B19A88FC1A14282E9DD649573B02EDE52 +23B3073A3FFCDE1395C8302146FE37C3B9971C428ED2B48AF8E120D1CBF06F6A +F4143BD5F8E0CFDB333050E13BB931C9F579FB333B177473717627FAAA0D5892 +CA4A59F46CBD2CEFD5A0C7A823139D3C60A2687B1E0EFF201F6114C047D23F17 +DDF63EC251069EB083C9417F07D0C344DDDC8DF928DEB6DEC372102FEC938184 +DAA203C172BC62111AD329BB1BB1A0F44CDDEE22B1A998939333B1A841AB4608 +51DE28FB8FEA0015CC89BD43F3E37C2CB48F1C0BBF3C5B638E6EB2162A10D6CA +1DDA501B6DA15A33D2D141A32F08D43AE66E23AA41BCE9111707B72E3D39DC83 +6BA1B18178F3942E269C12214DD8557EA6499DE01F74BDAEF75E658FA7D38A0D +168DBCBFCBE04FECCDE6147DCF5D8A577B7AC4E812260B86EF88F13C1B2F9D38 +331667BC7598F4B138CA6F295F565302BF393D67220B57881015F28169E12BD2 +43B4752ED6904574F6C80E5E1679748C4697358904D960DBEE2BFA35CBCD8594 +34346B184F1030D6500C5FD4773525A91D4AC22783B61434D417C9F57B848CEF +E90B0B243AC9B9FB37245F4178E6E305FE7A45859DA1EB02C024BA4784F39E08 +C4FE1473828248409CBDF74E42AC80B446B5455E74B75F5FEAFA8055A3F1E01D +FB21C1D9E8BD1BA09C3519AD87B54F27BD9DCDD18E9F7B2BE7B1F7DA396117B2 +821383AD37D76ACC89AB90D24B43AF386308508F14E36702D86A07AB2F0B7E63 +AA0C1A7FCEAF0199FC99CA393FD44CA8AAF7B9A1E820720EC4658EC8C6D68C5F +101FD9B8C0A45AE5C2B4B8682DAAEBEB686674F828AED86A8580E9D4982105A2 +3E91D62A2E9FAFFA2B3AFBCDEC4DEC3491526066E2A75745775567CB84F83127 +76E426BDD8C1EF9B64CB5F3EB256007935A75E63D5A90F5946D9266E07CB4354 +F6D2A89E2D1C332F3B1D9DE24195547DA0A5A674A50D9ECB92BE482630D37061 +A094DF9C31054884D4F2F89651FB8E1BCE6125AD240C7AA38DAAB1EA0C57A681 +E1352460873893488DA2FAF208E4D511FB2E2E44C8E9D7713A805F9AEDD79074 +632756250E9BB42FDF32C989F81373B75758C5A00167C49B5D881ED5B2DAA746 +EAA8DBEBB0AA0883DC30D79D0B99ACA9C47CD0CFC039EAA053EF194F5699397C +0F69920D974EAED369D532F3BF706D35FA463FCCB5C59BD3867A70CB295ECD3A +DED42339E6918F0226FEF5810EE2CE5FE9994CE4957FA626F5A10732AAB59651 +3776FEBE368E3F24BC27DFC528098ECA5DFD3367CECC60F5DBC2993B1740FB4D +A0E7FA89553161167B1617F698DB3DBB6672EF5FB052332FAD4FA5822C96D0EC +03111DFF00E76129690FC5A7C6A5DBF6E1BEA4371BADE2304923EA3C6113DE18 +7353D433DA5A81959828550A30D5894AB3FD05811D2BD0345DDA38DEF30DEE17 +F63DADEEE286E488472BE0E167DB4475E3C3C248E425D6E32B18397247530C48 +FA60846D3E477C0433ADAD9AA0B0A9AB1C258537415E05CF354C6217993F5AF0 +F89996ABE0EE4D948A42EC554FCE412EDCA1C88C4A171AB881DB725483A62B2D +D042621DC2948648D07D8C9AA493CDF26257E0E38CD820417E61F0C955E648E4 +7B884CB722E677D5DD4100EA6F948A10346B904510ABBB6EC7C5D3E194308A2D +E44821460563B65270700BA3ACB5D712CFC2DA9FE3094487502518C1634ACFD4 +700DC4BFCA3155484BA579C2D2F20C147B60F4C7F55C80A8378A241E83D67E2A +037C59D5E7EECC35BE2BAC0121C44B40AF04881A35F6AB7AB17259B027C56182 +61927A1C8F6CDBF4075F725286C4F1BC8401CF8596511352F310A14C790915DC +E503D88685CF1BB91AC27245F9E5D91EC23A8729BA05ABE5D9EE7AC81BD289FE +72A6BF35B6C2AC895F17EBD812D550227C06991271CFC565E149E6487D1499BB +6F4C93FD408FC31C2065CA1D85A2EEC8858B4ABE7836BF784C0040C1BF3E8175 +75FD8812D699F9BA551C6FAE3226DFB5B2F372312F0081B9531DF453A54E3ACD +2FB15B2CF43F2D83E004B2BA9229FD048B63C6A4311E3DF32CF57572DA953BBF +A38593F4B293A0C315888DCBE6F93DAD0980BF5B0F2CE3878A65AF744AEBE350 +22FBED4A11039F57CB7A927382A9C6F625B5C4B96C17D9741A76B422DF68FDFA +13C670B6A53BBAC82EC45BF1157DF3DAF8B766DB30528877BB8DC77D82E16C16 +3DE6523F9E660D2C5A8A9D5ACFB135968C729B68BF04879820B8D69308458421 +6199052857E16C51E8C1FE965C93CCB85A876F1CED2B4D6428EB830E3E63BAE4 +ABF42C9D77855A0A9ACD246033302AB74CB82359BE91FC947F69CC8738209580 +ADE0948982C8D30AEE3034546E087EE180D56AF4FAEF124D5934FF3F2BA88B40 +AF3819D1D9D2EAE8574049BE8F8776A3F7AF6BCD4F999506B072589062154CD6 +AA7CB677A73F201668C5B355BA59499A0F93BB904231FF29486E60473E87E00B +094B51A4790694507237253F121BE0897A1EDB09E37F08C399597A47FD47C0ED +7A4235821F72F021BAF9EDDEF1E15D285802AB6EBF721DDF8E6A85264A5CCF87 +1B5DE9EB24AA3B0A50E0FE2B195CEC0D9F2B9D12D9B68B5E4E5A8732E74D30B7 +3FC9FB783569829545B6984F5B06DC5E2CDB95F409C328A608276D79B7BE5735 +AD90FF4325DE84DE077D4BD77AFF7345B8FC52A8E1BFCE9CB5DB7186717333FC +6BE58A7CE61E4D13266320102AA06589BF00D01E884D9FF87CABDF4E12F62127 +DAA725186B7796A1AE7CB37BB6B164932404F3017E132202B42599798C1FFF82 +236711D98287A426C44F9DBDA9FCCC662690649A6F4D6DD932AAB5759EF6E481 +FF6F40A980DAADC5850E948B8EC0A60101CCC339F93EB829704A843C79686F6F +F23AFC0D04AB902B602B7E1C4A927D6C752B2BAFBEB8D80273CA0395EB9D4312 +A052AFDB82613CB29D8B9A5DCF2BEBE5606F6E32A577DAD1FB9A9903B92C0B84 +13C05ACFE23AEC511CE6FAAC235CCB47B598C11183AD8713091D65D3F9FE4918 +CB4CC13F25A2A6991C9D930DEC24730637487EDBE1634DAF1DF9B9024F38DF1B +2B44FEFBCB4A64756FEF1E2791BAEAC248DB8946DB44A5674171789701FC2393 +E4C2192981845C5E95834E60EB49BA90C3869A8497E99B3E676075C4EDBBA164 +DC9E9B3414443FADEB59F32E39C46439766E1E3ECFC5C197E031E645CCA4F970 +38266A4F21B6B98A581B838DF1077D8C3858FBDEB2A3A16D8F5847BFEAC138DD +D73ECA92B7F1F5A0177A4C2E899ADB7F2218979D6BA217D8E117DFB2BC7E7658 +A81BDBB92AE722C326065EDDB99E2378FE2EB426CE3402F254BAF1C3115E4ED3 +18A05A9F129B61818A54D0EB53536359FEDEA8D409F36E08CFD272EE7E376F13 +16AEBF9AF354D20FCABE9819643878797FDC9B784FE700F35C60BC70CE72F3B7 +D3E1ADCD69123BEA6C6E17174847F62A5867CD674F60D8EBAA41A019429DF304 +57BA5BF34142F11E328DCD3BCE5253074988DB4AA42FEF1C3B5430E44F08E0A0 +DBBBDF4776E2CF9DD65A42188ED02C62520B62A22D0DF2B6C0D819D5ABFD72B5 +C716BA390B682875CF80AD1CDECDE4E9E57204445D71D55EE6DA675FF56B06D5 +8650EAC74044170B3C822D049E295138E0F327C93A829E70BF3F0B5325D8B65D +12B3108C53E594D93339C1CCD5028EAE72C2B755CF3F069BEE7E9A803AA5940A +5D277F7AEEF43E1A175AFE4D95F5DD641724B3BBA43C131145E3AB2A8E324E0B +39CCCF9E30929F711436A1B315BA636F38FFE73D25848A97099450F1DAB3CA99 +783B23590EDEC75A7BFDFA4C1D70D6C48C57BBD08D6E174270C09933473A4682 +8A4F59B3F501D92C730B7C883826F8E24E201475C4F17566E8CF364219BECE93 +268E339B4408ECBC5B415703FF37EB4896007FB7C21F79DDA664E32A0204AADD +DD50769D15DCF9D35A749C7D8672B8B06E2C699D6A378F43675E92E13EE42F5B +AE783261BDB17CE63BB928977EEAD46770570DE46B302487322B089D5AC4FE65 +E826CF4ACB665CF3847596ABC4D1F36958C0C00FB3D4C6B0F130760238DD2649 +0C5A735B0B4DF8E609698700A080A9330CC8BCED0AF170D4E791C64EA44DE301 +9ED5D59F24CA9987034EBFD3FC3F829232D690DEB685BD5C91B4C6A3D1C5DE80 +DB6CD484B4114EDBCCD69CFD20461F6C12CF347E45D9579C9AE4375C1F00877E +D3A2F2B6051D09AB480156C6A9E86A559469AB63C218F51BA72397E7C8BF37AC +A413B505A11123BA8107A2B40E883572A5A41F2FD07D7E8A17656677A6FAEFE2 +A790C3D413670B569716A1248BB0C507C853225308B6AD39DC014EB034CCC13B +315D7544F5B8FEEF1DC4028E89AEBF12137F9FA617BDAA2298D326A4673C4132 +719F7FFA1C065D5EED1AF32FE1399E48E370038504DCE43CD8F45977032322DA +5B7297726BD995D24BDC2E3B0848E688C157877AE0EA411B0EE5284AC6D223ED +82E6AF4E94FF0D5D41BADE24E636384C8F8261B8E9917154067200EAAA09C6E8 +CD4D9103FD27BD24794A012A15B9C5F0EBCC16ABB05E2EF63DC3A126EBEE67B0 +460F384EE0E07514DD75A6B7B17DC6DDA8A2BE32A9D4864EEFE67EF383EB5FCC +8D756A08DA6601C4C4F6D85252A199B29D61690CE7EE89BCD84ADC9B4F067361 +1B837DB712E904CA57A1A3C9A0F18FC457769137434CFA34F64A976D49FB46C2 +A533EF92E525D2C880B17A935D4C34EE30F41D3D78D1BF013421462B2CC74DDA +F16A48920E6D22A59A6B71E65A8E86999635E9C24145EE1C4BCC54B5D0B529CB +084E14058F56337822EC46C77D4A7875E60E1862598C8EA5068206134E978A84 +7891E62D0545B381CF984A445426D0CF7953C32F36C32BEAAC1D9DA343D5716E +308270DBC4F48DA9E32727482434F81452291D8353F974F5F370A5672B2CAEF7 +DAAEE9BC8ACF114D13A44877B44F87D9107FDBAE64AE9241353203C72E41A472 +53347A67B4D7D4D65B384058792AF2C2ABC08B856628F8E732D208E548C4C4BA +2074697982852DEADF2EDB80DA4A396BFE1F1CE044CBF92ED2482799AF9D81B4 +9050957E97437DB07ADDE068E6815DE3684D6BDCEBDB112B450BD160A63A2B8C +4843D232468361F9B15C829B0628E3DB765FFC1EF181991A7A96E0432E09CC96 +6CFC5CA74BC71089 +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l049013t.pfa b/client/shared/lib/fonts/l049013t.pfa new file mode 100755 index 00000000..947a31c5 --- /dev/null +++ b/client/shared/lib/fonts/l049013t.pfa @@ -0,0 +1,1598 @@ +%!PS-AdobeFont-1.0: LuxiSerif 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Serif Regular) readonly def +/FamilyName (Luxi Serif) readonly def +/Weight (Regular) readonly def +/ItalicAngle 0.0 def +/isFixedPitch false def +/UnderlinePosition -30 def +/UnderlineThickness 60 def +end readonly def +/FontName /LuxiSerif def +/PaintType 0 def +/WMode 0 def +/FontBBox {-203 -211 984 993} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078991 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D9E73F44EADD0D9361D465 +3748937F491E18670189FD0D6858CBDFA6C4D794959EF9FD6996B4BFE7447FA1 +0B99FBD717D8407349457E126F430570E461A06CD1D4022BFD31D3140B4F9D44 +873A31C28EA941EC9D76CEDC1A71BF7589E11A6026F35F47E4216D7168D7E0FF +7C75BD48730F67FC517E7539B16B14D61185D9EF8D13F9398E4F3881BDECB05B +CB62672DC2C80ED0A24278927395F6C5D99D9FB3F3A1DAA087C609DDA0583474 +E0C5C9EBB773EA16786FD1FF2BE887147ECAA6B69B261A6A61E8E0DB8AFE70D2 +4069C33DA1AD0763306A2860A870AACF636654291C3BC44893FD9358616A1D47 +B3C79598FD22290D57AF04F3C192DC67611A2C2EEF144F80E0BA04888A5BAE0A +AFF6C484103BE288EF75F74A81B453A4D3B3BA25B37C547091D840C1356E48F1 +80E2FCC0C091515CFFFC446F99945BA70A6F868F4EB9F4ACE8AB07B64CF9B7E1 +4A8D5C16097D4ABD16D3573FDA57A646D3DB6414E5F3EABFFE30F22996D0E4BA +07685D5EFC2E97D9BA4DF8A1262EC2AB3C74A57AFE467C7E8130036360EF8D62 +4A2B6D8C290AA2365EA095EEA4EAA7042F747358A9F6151AA6F82F17F9A48ABE +646A9A3F1DF12E7729658ADF3111E52D08E50998672E884C2AE82B893364675B +9D3CF06B6DADFB13C53452730FD0A61A05A44B1FF1C3B0CA05756677C3D262EC +6A9344B80929A6D456F8708C03D4E0B4AA29320F7E3E9FE420397D103641CACA +87E1F114F525B6AE34F61327595648DF8FFB4FB09DC41C0641CB8EB349595ACE +3A65D4E04735BA31E1D613CDD02337D460780E22CF8B8D7BF1BFA8896C343E85 +5791AF4BB99293E9B4E239A2A1C680099BDDEDC3D68BF9F2986D3E0E51834478 +D808353967F7D861A900DF206C52BE7267F70928102B914F39E001632154BDE8 +6626FA0F69D81F13BA8F561680D2C0645BD17BF5828EB43B6C1C443E8E3CF346 +50C103FA53A029A665987560D17F6959D9FDD46005A1EC53E443D89C7DD4A618 +3A114F733C87251276B35BB3A03FE864E0FFC9AB3C8A1686FC5605F5EF9DDB2E +B9F6D75B1E1BA5710BAF346CA720318F32CFCD405C006E4DDB6FFDC97067C0CA +394C5EEEEF2D27AB9810AD25A421FA7A4095D692F802C83CA5F8B2D6AB83AB6B +45469FB7C8613F9E7DD094F9360435D624C67E7306D19FF80424B75968A3D68E +39215E86F1ED20ACC5FBA87E107785B48411A9F5A8250D0E561FCB1DA12B590B +9F0FAAD50D548FD78020FC3C5EC3B7ECD9CA58E88C81FCB7B2A3C3D114E7F327 +220D436632DA6EFDF722D4C99AB2880E3CA577DAD1FB9A9903C5FCEE69C65D36 +DD56EEF77CEABC3BF495DF819FA518194C03BD88E1DAC75E51F23765797A999F +4405E08AC251FBC7F8C462EDA4768D668C93BCA47E035EF0BD905766ADB2EF24 +EA82B9C97A41552F70B0A1EA5172028A917EABC78B1E8293BCCCC03EA281DA0F +9346FD6688D58DE2B14AEF2954A70B3755CA545F4E0C460AA89E4A9C3D3475E3 +26F5133DC36517157853FA680642587B62E71EBB8422B6C9E1335ADB17040561 +50D94FA4FBDDB86C9FD3812B90EC8A44596F9C683A5119DBC735777DD9D33AA6 +2A33CF98754D16B34D439FD8995E625C8250129701501346727F51096C407615 +F7B96061C2E733045C1C3A427F9B1AD26ECDA119C7B38E682C5BFA7B871AC397 +BC063B129FE54E9CF58C6F329390F8F14172ED0EC22A11B49787751A5E47340C +37814F52C05DED2F8F17A4F53250634B4B54D675F2776A867C1AD96BEDA842C9 +B8077DB381AE4AC283554FEE875B64A37FC3005810B42BD9C1C1422B7B104DE7 +D912C5BF74B5D0B4671983F41ADCFB287E40AF8BF69686E407E2E97D4CC14B6B +172972FA86ED76F43ABD480EDCD3437005670A2E785942CCD45023D1B3B70E9E +C8AD2ECA580EEE06993FC79C3B44CA5841ADBC4378DD68B5A21E570C88EF4016 +CD5A7463F1829F1F761D719F770AED1CA8EAA1FA7D166C86EC3C858D8E76606A +EA4AA03F3D3EA07CFF90CBFAA0E60B26FF57AA395AB4225CC19217920E0CE8E4 +119FDE73501174065D1C0DEF1AE3D6A9F0C9E2558030E8199E99662E767D37B3 +3761220EFC66C81205F64B6ED8EB09865046A89FDAA0275D248179208557E218 +40EF4FFD2B18CD1B46E7DF16B675C3C3093141BCF45BA70F31EDB235DE3DCB24 +2C93BD4C3B6414DC7C57383F35D1033E400DD0FBF57ED73514E1E186F08F8E7B +6F836CC6702047AAE17175CAEB08E20D06ABB02FF72BB9839F34F27CEE5BA199 +D9DA8AD3C6262E0B467F9A85E1D84AFC792C55E00156DF5A50460D259353F33D +505FE3ED16817DB13AE355DE90589F85AB977D09547996E06A8F123F655D4BA5 +E188E9E86CC31AE6B817DE4D90D7055BE09601F7CF4306BA04295148D4D42EB2 +E03F73C682CEEDA8C2862FB309BE14C96C256084D6DA1A0254EF1769877EC2E7 +90D0E6A37EBE7680FC0C6325F6772D2516FBD2F71EA193B0D96BD9303B746FFC +0D9456B7B66E849477F4ABB1565BF0F95D6941C6B8500F9AFB561F08F71CA6EA +0FAF63400979CF3F29EDEDA7041C380A0D3A086CDE2A1212FD6017E8E5A280D5 +73BF391BFCAE1F0CD3E895ABB45C025940C489F30D38B43E5506D57043EB6C90 +9798823F6AD59BF33E75467BDD309210803F24EB57E2BA92BB25200527C66A7A +1D20D092637AEA5FE90C8BAA0A75172470D5C872206450164E702861D50FF618 +748CE14BACFCE06A869720517549082B5FF664D27CCCD7920A5A70724C847F33 +E893F9316FF2CE0C07E55FE095061940D12AA04853F444A664E383DE510AC21F +2EA065FA840618B89166BC69C6BA042714A6DA420C38002841A2BD31C35DCD5D +95D01CF0F4233065B48CA98A9F078EFF2148CC0B6B4601912B93F26F1B2BB509 +A89B6AE424FC9FBC1506D8DF65D85490124FA0B2C19D4AD0FB0BCEFCA1818474 +806028D9362C308A707C001AC9AA9E3D604CF91242901AF68176C70122646FE0 +3489B2D0AB026B5F14FD4E8B6DD4983435F8C1EA647C6EC3A30209332F5D9E81 +6F5F1D827D05995B996C589C6365E5D2EB4922807C996EE7D653AB8E6FDFBF2E +450740A9EAC9D97EC4B05955B35992B8FF98065B126220D2FA9FD5361F00E7D4 +FCCAC7D0131097F55420F2E723779B33AFFD9A439B80D2B5A70CF35D9BD62E5F +EA17E2B6911BC219A7D1D62BCAAACE9FE03A28780D32964E25E5ADDB423B67AF +A377AB0E9E401DDD8CB82BCAC58B26DBCC1174FEA59A311B133F897ABE574040 +4CEDF6110B709AE16E63BAC2ADB18B30918A83160B2D3BB8EA25930548C69864 +DA2A4C23339B35188599EB5668AD8F1D5E43D49471ECED568D45BD02A38006E7 +ED0CFBFF4C9E8A9CD0ED5086E663D880FB388D04E665F154E5E3AA7E658376B2 +C37E52A54EA086300039929FAE313573DE586DC6864B07914088A75241A9B955 +B60FDEF10E7C4CA62F04A0DEE650DFEC8CB0C31832D6ECD00EB8FDD4752F4376 +965F0C7318C152697C688EC0A9DF0709F4D98FE9E8ACED5B47FE2E640C9043BA +535550F55C945805685313E95F02D503DA1F68322938A76262287266376C9430 +34A8A7E9A1E090FC84F0942465BB09AB0E885772BD34D23C38655530F3266C6D +A8B703AA8584D766F3140B468CE856EB0D46A9B7660E9D41FD90DADD603D43BF +3E573959254916573DCEB05BA14B58785817B26AA1FFD03527F11068079EBDFA +2C97B82A7C711113561EEE00C10424F43D5E3A7E6A71BEF9B8173A6C4E26B827 +664ABB5F5882369863CC11AD9F67CB687F1A5D9D554962839BF4DF589A5B0627 +72E49732552AA9886455050A00EFD580BD616A0164000E54A898BC9FB14A296C +17ED96A27D3416956AE0A7B8EB477143FDE8D33BA0C2BE89249DBF625CBE983F +AA6763CD284D0B59099390BFD0193881995A522B5B3E689CD7EAE3E718DA40D1 +C1B6B67463B2B885DE1E9D0ABE0ACCEFBA3D29F7F482D393F988A831FF3A9688 +085108CD2BD75DB01CE94BB7B4CE3674937895D6AF2F6659C4A612EB65F8E81E +B9693701AAB54789B2BC251103528FC0A7E7700CF70B81230B65C0261A8584FC +F19B82615DE07D894AC4CE2CBBEDA4E79CA2438B119A8F0F596D0C605B3BE598 +AA3B1B1F58B6184F0904A73640E466164CFD0D0C1948BA56753520F144F1AE1A +015F1402E25F26B0B462F6C4FF977C7561217862A5E91E1BE2BA5E5B5E045B07 +163CD0DB3279C6D182DDDB43C1E15C6A96F0BDCF32C4FC497837321A05ECDC03 +30943D2E7A81A319C58BD5C78EBF72ABB8931921DF1474A67CA2E635FDD45C19 +1B525141980842058B8F07DDBA38D0FF3F17D95F833AFAC787AF090ECB75DCE6 +155969189C4A05055899D6AB35C9B8F1EA2548B596E799876C8A1A1CF5A2A26D +50AC0F7F93A4816A983F82675AD33D409776ED878420262521C373CA48D01CB5 +BAAD873A8006CD8E74A9CEC86FBE4964497D72D92A2837AE2DD223AB101F8C37 +8E2565A1B6FE12208A05B60BB09082028FC3E1924DFF5A60525064A7B004B75C +40FE50FCBF3CAF6B4E2F487C4778C5E6B105DF2962391EC856785F6ABFB35896 +8C5C7B4D3AF8AFE4E6114D241B943E0ED2129D6BFCFE863AFA58F207A654F9F8 +689E53F795F5A199E91F8F76D4C2495BD307CE3B7669EEA5C46E3BB4CA096420 +D4EDBF4044F0E2C79FF6DB09592C8D29587B536B189DF331336C72EEE5C96FD5 +55E4039799465EF1678063F2AE4CA788C89CBD6EEC9DB3B22BC19680CD130FCF +963F30007CDF0BFB436F34B87D59A807189B1FD4015844DE56B7B5398794412B +1B406C318D5AFA5EA90ED303E3FB726A7F83634341123E5CA48FF30AC16D2B1C +6378EBA79DF54B6989FAAC13F076D88C92B1E485060D5B5703D3FE55255ACF02 +6A94FB7EF322798E945E24BBCBA0052FB611E9451F86BBD9E1BD6A143A98CC89 +A9C82B0993432956E2AD3A243CF7E81E23B770F5B576593EE0089845046259EA +797B171AFFBA8B4A2712175CA836D750B25289872538ACF8C3A51E62F18C5E91 +B6CD6249CA9448C071CF2B9114696EB0A0DFF0019DAEA8399D679D8484823000 +DEFF6B14034B064969CC05E0B5E34FE6F414F876E2809AE3B09F03492B5193B6 +0D358C68DD6A3C48FE6318CBA17BB3FA9265235AE417DCEBB0380C30D04D6E93 +B414575828679719D85B9B4E5B56248E52B4C7841AFE7B7C9D6E844480C7AB80 +5C9412645FBD123919936859F61D815D105249DF52687F31B2701321F8DE91F7 +A88A4E8D5C3926CD47F8CDBF8DED8C5F24C5FACB2138736EF67C5742B33A12D1 +2721A47ADAC6AFE384C2066AFFAD2F79C9FE60FC11A7B71C972B897B12588196 +93C06D7A79AC25F2D9D2BEE654AD27D454D4F28E533A6CAE0C9863692E406A53 +C76344151CA587709CE1BBC845340FCC7B3CBED5C421944652E12506193A5212 +A3E384D7A63F0FC0927B2EF40AB4BA66909D323E6079D9DD5A9F09FD1078E804 +4D6633D71CBBFC5CB1E9B3BD13F9600B1157E28DD3226CDDD358B0878503D954 +0B43CBAC43A14D5034F44722B05D12F6EC8ACC66972E3B9D5DB270988E8D8E88 +4A2F92750ED6979ED5EFFBCE0731FC34213ED99F37BC31D0BFD0DA1D55120C58 +1167AE0D33E8F190A163EC437B1E67DBC254331CA1C77EB1AD6B98CDBE95CDC3 +1C7D04211BF48C8F86E34AF2CBFE411A12BDF382AFBD63ABC1A42BEF2825D07D +1343175C428704AEC8C925ED517CE7CAC954BC556690E61278079241FCF33CA5 +AA04CC20D34B12BF04BE34848FEA0015CCA8192D7B6E166025DE3F12B4FD08A8 +5833375528FEB9A4CC7739AC1C6988B21F3CBAED01DC535A0999B5200FBCD961 +890288CFBF06B0E8B55CFC0D28A3D660B9A79A4A65C2E0F23B54355E41E5133E +42990B4B1F4925AD1DC6176919F37122D5B783BB1A18E8699F8E3F48EA0B9415 +DE9376500F1C31AA51B98E9D5012476EA6F89D93EEAB943DEA72DC6B2734CAB1 +12FF2C8391949455BC5749722D280CF49B8FA5F6FBA1D55B332E0BC935E9B33F +F47FD34619FB0E217E0B5D1026D29A3C8C33CAAC9AA86015B009B153B86215A9 +BD54F753B708FEE773C9A040F23D99C941707CD0200BEA970319E669907017B9 +973BC93F89E7229F4185F95A70537935ACEAD61E7D458C33307560B6D0DA4089 +B40AF5C8E3F428116D5D616E4B0DD6CC7FE203885B32931005D517CD021B75DC +A4EC6FB5F0F8E8C43067DC7CC99B4055E45F38F8D411CCC80514814CBCC8747E +DFE0FDF457428445D64F5E1D0811BCD103E6EB290E363BF1A2964C5FBD63A405 +D0394E066E54774E7B05CF3E250FE7E5E2782B06BECE8D97C5CFA0BEFCBCED02 +08879C6B8F93460D1ADBEDB3CF5EF9469933832A83088D6563EF6982E5F1E704 +B0387D5E746D708B7787B7D7F91BB5D99BB4BB2C6646D5AAF8B1D70E0EBD2054 +492EDE6D5B226E2EEB6B868DFE0DFDAF858D7239520824943413105CEA5AE042 +D9F12A6EC811415A257FF2AFA0FC15F64D7C7F21762238B86EDB5AE4E4CB4FEE +9501350A8EB10809B265D5B52F1C10A89B5F5564C8C077C4109DEBDE36F5456B +F6B4F3889DA1AA3855374A39B9AAEB76E26FEF4683821185A8157B392921ADC3 +5782BF866461D525CFEABD17ED262785013A628A017E50EB70444CB1A9E8DB22 +775040FDC83D38CB5C91064997A88C4DCAAF340D66608C4A28A473EEC0A08785 +C765166D9B6C234AA35ACB7A3E676E756C13A67D80C148A2BAF56432F0AC012E +612851ED8B16B2C0673B11BF65904F7B9718E12179D36023CE784FEC7B79D0AE +8EC3F1244A5D293CD4E67C7B58076A6DC8E4168398D4E3653AA7C0B44649F372 +58A5B2AFCD59AC43796B6971C27EEAD8A4E645B78559FFB90A0D2C4367F25F7D +84EF76B89D09855FA0CAB5BC5088C220E2979FF17AE67491C77E229B4668001F +DEFA0E5B581E24AA93CFD0A21E453FAEFFD82A27D236FD5913132FF54C925EB9 +F59D48E16FC904AA8C498AEE94635D187C7FF354F48771A3B730A994E4085077 +53EB73692AE569A52EC4F1FDE59E793357647277C96A080FBCC9B95044FA71A9 +359225214796A4C58C90C47682EF714B21F8C289E3870EA06BB9DA82227F7ABF +DED110C7307B86772F538A937885873BD0D427966DF81A871F1D5F5A2105F25B +C2BA884C9C3D8342064B7C6979EB116A6077BCAAC52EF21BAABC0AC1BFE8DFE7 +3BF35A96077B78E47551BD07A89A2353366F0E3560D495BC906B40102AC68381 +642ADDE76FAA8AB2466D26B4A322288ABFF4AEA43A5DA09F32F3B6ADF22B0409 +3F16A8CFC70421613B04078A94148E47DD1608F1E262884D8C47D856C1DE30BC +C60933D7BF141A433AB68B81BA42326E2935E37217932DFFB28C9D8580886C3B +DA86AA0795BB69DC249050FB9434C900DD3E97D8C7556834DD3F66EF47347B13 +77E60D03674E47CCA9F3D19B2AFF6660420940EB68A843E93BA89131606835E0 +4EC6CFDD92827C56A07DCB9B7C6FF016D3500D1C6F62ADF954551C2C072B0F7C +86CC8295CC7BBB42CDB70DA78807C2C0CBB3C5369AB2BEA7DF33281A1770A562 +A19C5FB30E616743248AE7D93F8ECDC1B081F96F2F52ACF195A86DAAC8E53D80 +CB8883F37D3BB12CC0908422CE4392CA1014A45C7EB35899A8B7694C2EAFC62E +F69D5179D4B6E893C2CFD762CC388C6356D941E89F1B0A8249E8A701678A86A3 +AFDD4B74C16633087CC14AB94788C32FD74B1F01FBF8C7726DBEE0013E576CE8 +F2D2B7E3CC723BCDE5ADE760D387EAAB664A6F4043A0AB6260755868BE302157 +551883035BC8D73366FE63F7BBCEEDF072224B01DEF7651E0CD9EB85BC58C7BC +01DC0E874147E9A1F9A9116BB60A1FBB7FECE53F802BF95E3A52C4202C89C99E +BCCBC7DDEA17AD7672CF9AEF169B20FB20D7F76B2EFF1696674623E01642598E +A86C5365E4BA709777AAFD328E40D3935660CD986FA959451A5D1AD43161CB67 +5A75934F7EC456F55822EEFE030DB1AB048A2E69AC59A50370763A5AA4E11C4A +DCF9B23C9DD7290E73E1B72B179138E514E99167EF94FBF4A97866EEA33828A4 +275804BD9DA8101E6F7C78541D05C2B9513C7B03A4AEB0F5D5646626E8C81486 +610F1EDD9748BC95F93E9D0C859F270AFB655E2154494FDD83AFAA383389BEAF +70A4458D0D7CCADB3E4310B29A262C084F4D3CE3B0BB63A271B90AFC60EF2EB9 +EE6D7F7AB4ADD46F243D94F83154333ACA2358E4F6D53E633C37993587320978 +F407155D27463A47282D27D50C22B7F38BF34974D60A361BC6F26565D5CE5DD1 +A48B580F5A1379231A8B6E90D0F0F770EED72C9D9D4B397455C59A0687CBDE0D +AF1CD3AE0B83ED3DF977C0DDE3E7537C8D03AFA3114D7AAC6AC5870D0F4F03E0 +06579E9A7308BDEF66E5DD3FADC07D612E6859AA57D08E6A4D118BA7DDD45DCA +2E003472B89169CBFDDF8516C43851451DC5B37C32A111D9D7AD1323C708EEE8 +C500D1E8F5D94BE9E6F3FEA2BD8C5A3EFBE1EF84F5C95BD6CED21C8E2218E513 +46BB8456BFBBB143CC7F0D11F74D53BC996C5D5A0A157B2355768DD153DB21D6 +C2382318562DD4D1745DC04A3941FE0176189D8B041FDB0525A24BF5922A5E78 +420ABD3B2AA5E5410025C9F65FB43D0A68262981DD8952002F7B12FAA9D62011 +3AB3A84C5F720AC7D53671F33477E750EF4F700B2DC3AB8B44587E9BBFA1D67D +276FFE23F32EE806D3DE9C138035E0B4893329A3CFAEE28E6992A3834B016328 +D3B1785119741A71FBD79193EA6EB20EE914A644ED41BB29017A20E534256894 +4D9A5DB399CA943AE5351D842154542016528ABDFF55068BFEC1F2B4A6689CD1 +1E416FE8D5B150FC6A8E68EFA4478BF8931F01E405BE2531B64B4863AD649294 +C0391ACAD1BBCC2627F52FA1E07D77F0A35ADAD416E837963A0E88F67C827C15 +EF55E915BAF4E5F3E4C0CAC6E16654331B3ED0991A7D01C93C60F6961A73E72C +A77434491DD87F8EE1401583D48FC38F63C1E2A35492F93B871ADED0348EF0A8 +437B033AAF2C3C6234A1A451C143CF926992ECDA1F1F3FAEF13C6B1040A202B4 +27C545405D90F77C939C3199FA47F647B482B7DEA16DFB1B36DF0F70446B8CF6 +02B33A96F2E81416ACE4D1B53B6EC5D96C1D9D43E501B989580DB90E83A39CBB +E699A7D49F993EC3ABD780632810CB3CEF816CB7501F38D73106C838BB1C8208 +84382C1DB306315AC4662285984F9D431DCD1F2C854C4AA95CE08C33A99B8B7E +6AA0562D554DA18FEF39DEE068E60469FD2DB23428ED0EFF075A9DF7EF3F92F6 +C73E9CF760FF0523522747F7FA0B9C21B9E4826A900B5D943BDBE82330DFB8C9 +C1F7CAFE80F7F1157EFCD3E6398F77CEE305E39C876D42BAE82F5078E894B112 +3292590F08D820E61B6F0454B47A23C78A5B8F3F34D7DA46735BD26A19EE0327 +E9D27D29AED59C044068387BC305A558A13403C9F713F6C5C2D9C6765F8B824D +5C3DC4222ED8079BF0610C8CCDDD041FCD67684E66682F8434A319E48BBF7F01 +F8BB5FA9FC41902E7285DAD8DDE62B484FA5DB359668E6AE0805B48D864B7C82 +DBC81F4CEBAC5A5108391DA129E11C12138D94EC1A407371F70C6B84023DF9C8 +EA177A087632E3EB4ACBB13815B604140285AD93D1E72D17AA685EAA7886B5B2 +E6C3BF45F83594C841954B58FA051B7A9A94881598929A8C8310671932CEDA2F +6DB1F7F015F8503EF84B19E059E8124E4843D09890DE094EA6EDF792630EB0BA +1486947D0A0B484F4E223DCD215EE78D24C090A3C76C550B065225B957C47C01 +9C7AAF1498157177EF2A68BFBAF50A3D221B4320D71EA261C59A5600B55037A1 +8BF30F7479E036D463341CCCA9E987C3B87CCC44E383BB5FF98BDB2730C840AD +C388CA6480B85A9AB7D42A63F9F4B049B45AF49637E9464A2C9B709A7DE3FE85 +10A6842FBC7B4C56D14F998D6D382D31892F7C066C77A6114185E4A573F9C378 +489CC8551D1102C2052555F93CA134FED3383AA3F28A0E11F5D471819582BA7D +852CCB06FCC3CFF6F99338AA046BE9F96186F288D3951F75449C1DBF650965B3 +3D1030CCDC4817BEBD6216943F2DF5EE8B9FEFE6CE4D38DC52F3CB8A7D29722C +990AFC8CCAA016181A26C3EE67AC35FD6119E23D689EE78E05E2FB7EC3864120 +860E8BD2EA388508327C46EC8F895E24998AD2EC0D8CDE2A333719DC03F57C3A +229EC6CBEE7FD13F538570C2DC2F1031801BE075A473A2A2A7C1E01F74B8500F +DACC782033DEB55C23B08368EA6C6AD8E47AEA7119D76D4B9F80252D66F70D2E +6A498A684FD131AE7B22322009A4870CA2C684C5FA7027E1D98750B6BE292FF3 +0EBAF205FF0EBEF7E1C322DC79971EDA361E0597BDC717668F6B1E66EB93EF2D +62CCCA7BD345104EFDC72D1FCEF328857B84439A811819558DA11DF635606EDE +FA44B2AEA013F1FFA384905F5E32057EEED1FDDC33E3672F42425E8520999004 +51EF287E37D33E8F2A6D33EF933A9A1B1B6472889499D5F24BBD442EC57A6218 +2DE6452AFC09388CE79C10C09562307B117171AADBC4583AC258F3525534C141 +6A85CB591C56BB9310BDBEBBAAFA8270A5A179A368EE401D36A07075F21DEA6D +B1A64E018F87AE259E98401E87FE8A808848DEECCE5B9BC45F44A621301E0D38 +AF6B9042CCD89445F09FC971F94007E7CC558F81080A51B3163B7E6629AC2162 +A410F477E9709541D6B4EEFCEA8D2208427D82F6D46A6DF1E180F621C5B44EBF +D262084531D95974D7BB0F098F279BB04725C16955BCD5CB341F14903C5EA661 +7752778CB6A73908D89835CE1D302733EE233EE7099357A243E77833FE9E9178 +5A025A89882C9677467821A7414D970B9F7C0BEE6E0D3F5EBFA3438640E6630F +916E9523D92112C2FFDAD975FC3D3DB51273AE8A250288AC30F0C63DF9C98DC0 +87EF8A135936A2F060405A4B8E2B597137E9C0B115B91F67A7015CB6D895E688 +45D23AFEFB6434789178094B15F666DB49AB7DC74454933692B36DD82019CBD1 +4EB94D1C042285E9D76F95B80FA4901D85BD16056ECDC82F068E794CB4410D65 +4CAE5E1B495D1D14647B4F3CA8EE5ECE7081693A7AA06646594744FC1AE4723B +49EC675530C977FF95B41B1AF51A84E777F1124602DF8F5684F3225AED18B990 +EF1150946A5D0888BCD0C79975A631B147C627514406FCC022DC0875CCF8B036 +653B15187BA94DD8C5B6127AB5069CFB9892C6CB64848D4637C523AC2A5D4B5B +611CEFBD818A1E06BFBBFDC00EF8B2602BEC466D996811B2B424406A29718C8C +F57418415DD2422065C2CFFD83949467243264B16DA0C1508E597EBC4B18EBE4 +4A4354E8837173AE628FD5DDB5610D35F96CD42386C234A9EB05C71322847C46 +ED113F60A988110CCA6DAAEBDA7155A28BC035B803B81F0FB6A05DB7EDC4A880 +80DED199A41F62EF60D904F55160EBB83F40D7125B66750C881F809F30E5F72B +26748422CA9BD09A8FF4D86F1561C3B8AF623DCE26C85BF643700759324A372A +B2510533A3B8D885472BA12963E9C400B81898E6E116F4977CA724E782834A56 +D45F67C46CE5F9C0C267D39ABCCCCD1BBB002B4F7F2890B868ED1071BF8A5B0B +825DB9EFAE17C7BD9B887D75EFABD94EE0B52FC811A8EF3C94EE93838F4FC793 +D38929D6E0AF3F6D624F4BA160BE513F683E7751FAF422AEEF111463F6B889BA +B264156139AAFF7A1B64790F78A9168AC655FD94FB82FAA0828F1B284CC2D027 +CCA9153FD60BF80891AD0B45F0A356A3F7B90B0D190F1CE69398C1F2C5B8E99C +10A2C2E97C530A8614E9203F424A431220A4F5333DD281FC1CAE2F2C0E6EF57E +CB9074A7C7C0B355A1A567CC2D6CFDFEC64401510F29EDFB0DBDFF88D4FAF643 +8E721BAFBEFB4E1E5B2AAF576027CBB3A2BCB8B26E252CCEDFDAF8740104724D +020CE168B39A12E0AB7F4E3BCD05C30C5419A9DAD1C3510CAC11EE4BA2B74818 +88A1320E5FA1D6BCD4B58877927878D9D3A65C38CF9314FEA0E37EDA580CF121 +FCA5FAD167856A8588BAC41CF25B3F9C0C158A253D40B53AEA357806A3D0D706 +BE64FD7072267DE22936D8CD0E33DEAD240C795750299728D41532FD445692A9 +08D8EF48054B22F12407C5846ED8F14F24CA348FF9760008D2F85FFFC514789B +63E5569E73BF23A6413C4C077A7471E7275107F2C7BABF43696B746ACB2F4D17 +A4194B4660E7C797D3DD3785B92EEC1C7C9702F5ECA5BECC027FAD6731B49E0F +08F0486C25CCE8907B68C18DDAE8B42655B46B19B652670790CE1C9F3C8ECD3B +C88890676121A2C89D464D9F27B3CCCB5C5C014D198B5AF358699B998BB61488 +59DF9D0D706B84D457DE5430E8B5B6BFB5124B16C626E9B3774AEB27B3461E73 +0BD7F788F60264CBE30D39CFAC48FFD28ED12D55C7D0F2CAC21AF25FD25359AB +817F0320B766B414547B565B52DF5702B5957A0FB9D7058DD7F803715D122859 +87517638A22E700783EF621F407FF829E19C6B379AA448407D79FD4F76BEE1DA +71F6295803F0E7F2EEDF22038E3EBD6D56A1F0B72D203AD1A89AA7344ECDC16B +83AECBCF61F07C75B07DC7D0D5824281C08F0372762047B3E745C58CFFDB701D +2D35513F4EE938EA93D7A1FF911C07EBD7AAF2151869CA572A225D305E4D2883 +FD885BDEB7876A89AE4858FD2354FD4E347680E3DE3CBC048751600EE94C8DC4 +A64C4ECC6BCBB494A8B5DA6556724CB090FC00BE670E7D023F843CF23D363BF9 +36960292D6FBA48B69330631A12A871E56D9BC8772897F6492EDD55AD6DA5117 +3937DDF370CC6B366555DA1A22700A876F6E535E07F76C28B864064D5474A8D4 +CB2455AAEE25F2CBD6CD19E9B91D1380B73E79C7F852596B97B3D1CF32064594 +42B96C2FFFB054647CE2318D4EBC68EAD9DFA5029ED858DCAA0D5A972B0F8DA2 +2E080D507304905ACF3943644BE25757DADD2589D77553BFDAE17CD50D3431D5 +1CFAB002AA9A493F305BCA941D8CC78B61AAED56E4771FCA6D29CB0B9DB7F542 +AA16E37E647A3D71D0DEB3F18D9E19DEB7DD26DA826068554445E54144B6FDEA +949D5D03EA3238916260DE4AC2152200977C51E5693616977C581508ABEFA156 +B0767661AED9D47675F71455CD143EA30464077398E8835FE9057C6FCFFD6576 +8EE913496CB05D8E3AAA6478685A5E03093A7F62BA5FCED32040D00680141C48 +01DB98BEC6F83FD2B395A97C0EC0617223F19486003374A38147AD0AD996F6D4 +9E6B70187368A368C84FF0C5C2E143CEFF967C279265FBB2F1C5B94DFCE706CD +702C0792DEB7FF682848529C6B7A40BCEE5F7F2A868452665E00B8140C1369A8 +133B5114A62C9983FC3A13537C4D614DD9E513FC9ECCC001BA6A3287D82E9E17 +FF5D88A373023E0A34CFDE64113A6BE7C365D68A64D44F74205BFC5914D669E9 +06D94DC90890DFA84A169AC8D206ADEFD4A281C59B49F12DCFF9D9A2A4B42049 +1509C1F929D2820803279DE83D0A2B20887FD3026604DB42716F32378F996CC0 +792CE403EB698C865C21D26600E8706BFDFF5267F7D9DE38449AA71FA2C3EF9F +5CC34499FE2CC522142C8C1D55D7E6DF5188F9263F37F51AD78E9279A823433F +5755D9F95094B7FCE2F2224236585967CF767461380E28A674E831DC73F979F8 +935D6816947EF70D41D5F64DB5BCA12C184BFE59EE26334C7C9EFA0DD1C6CE22 +D8315677AA321A9B470F63ECE4DDE11AA3604E8B0E9DCDEF721138EDAF421D7A +09D9D6A74ABD55112FEF6593C062EEC5AF3EEAFC4B9C831C7E8D56B332E9844A +FB85AA1EB94C1708592E5E7F3266A037CA3AF551F3679A0B67029B61E9D20190 +2209D680032D5DB92CCA9BDA51820F2185C5678E879176F4DD7A9D64328F1305 +FADCC214B9BB8D9AD595EFFC79D6CD443C2F0B7DA981FBF696A43D4B74EAC3B7 +0441144EEAC59F52FC83D7CE750E0F9FDAED943D9B67BE023367F920DF5A220D +C18432A6AF622F53D0B240D762AC25137DEEEC12AF276246943C4C804254BB04 +9C2510885398BAC62E2F67961B2D24F00C86053BB14200DBE1AF4B9DE0BE615E +127F1FDAAD1AD4E939C1D3DC71FFAD3B9264AE547CB5F11B4E3D93038A95B4C5 +5B0D4F249B20FF04922A1158DA5A7C9B99971AE16FE252C76C21475165CA356F +1F9612552BBEFD2A020635B7E0159E37847CBF22B9EFE07FF1CB9E9129D1AD19 +E979E52F78207EE4DD64287C0A929FB5BA5AD68D395B61CD12C545C6E88DBDA2 +2224BB1751E82014F2995936B6144509AABB965D9947B5B5D1346C1FD14DEB6D +36A559DBE82A31F2DB8830E260C9069613B8DCDEF6E6A88C7B0421A4B99D4EDE +F22CAEA7D7B519A2D12CED44B4F4DD63E3011779EA4B44DCC803E062DBFB6BA5 +098CA9E78832C1E6C6B7C0AD47350BE81377EF66A93134CDE2CBDF0EA9DCC5ED +E38F663F72B1810DA8C23F287ABE369C496902E3D18B718B650324FF7D7434C8 +6B8FB37E30DC7C5B59DB7B8C982194F148B26914447FA86CD95E9781B3918DF6 +5FF76FEB4C8F0084BABF786C5771ECC6F9033C1528C4F0C5008F19D8608557B3 +9B32BC80BB28CD3C9636A8CBFDC7C3ADEED9BFBA9A59904091E31E7AEAFBCCE5 +2DF80869EFEEC3E3B3A5C20B49720BFE300F8D0C807FE3DC3615DA21501AD3B2 +9F602644E6CFF34AE0E34C8DB132643D7EBB7E485F9EE658D6E5F2474A0929BD +768056CF7A4CF2D42B3ABF73B5F9CDF68BCA4753CE33DCD014F646F02229F9D5 +A207A0CDFC782280B8FA180A8B0D26BA629672E6DA6AC08F523C030747C7DCD1 +2721543837EFD203912078F1C21B4C12E1D3D99CC3D41A1EB4BC7A9C7FF233DC +56251E5951A62BBA5164C4455FB7C420B1544FFEEDBCE126AC7BD5259C877732 +5F434F717210DDD55C655AD55C94A81238FCB7B105DD2B13BD30CDF70CF5190A +6B2C723EDBE8E171EE85CE4BA5010E254C217D8A110710DDA85C1C16858D84AA +6CCE64E98F873104628594126EF0B15489D651D8E9FF1EDE0F7147C3E1EE5852 +629A2851B69CBE14F784805C22AE7C9B2CDC7EBA0661DCF803DDF353E2A1F5F6 +8AA7CAE75B44C6187180B7FF519208887DA1C895BC7B8B1783E7EB487D02D234 +4EF2E529CC10CD2538BE4879ACDB5259E694675BA50DB78A91347A4C0E58573A +055A91E73E3A6AF81E890DACDB9589EB34E061E8936D1DF638B35F22FB3EC97E +DC0FD73913009B9895E4C95CF9D7719D9D63C25678C45372667AB85BFCE4C77B +A37FF8E0E6215A718E1A4CE6DD6756BC93A8C1722288FFB56A4082C530D8F47B +26EABA70B663BB51AE64FC03543E7C3F285A38FA416B20F4A73F1442648EEEC2 +3611E13EE34250A248798A2F0B9D6E3658EB1B97389A66C96C96DF1E41A392DD +F667EC2A88C557F4DA7F708A33692B98A8A75212231B395D6785CDA4297737E5 +13C16F5FC9CCB761CC3618C75B259F46C45926F3BD3E4994E6DBB890997E3FF5 +D0C9185B9D91A54E6B0BAD88018DB6466492608DE79791EC93516E67C7C52977 +F9E27B153910EF29F9F24B0C9DEBA4C3AF8C59098BCA325824016E26EAC228A8 +1126E6D8821B379F140D2ACFA1DEB12D434BD0383E5BD448FF624D8A9FCE8CF7 +D843B625CE6ADF6F89794CE54C5B6049BB95EBFA62A296515688317FD1E7AED9 +97A2E7FAA32A4849114921C752AEC2C52B98C69C57818EE73CBF916A235F34C3 +3E05CDED2956DB5B0CB7D51AE40E56085E5EAFB0BF29DF9B04BD66B030BBFA1E +CE3C041E8A175033AA4B4C592575F28775102F8A45E15E3E2D550ADC06CE6514 +B652105633B5E7876059C81527B9512C40DD586CA25AAD144BEF5E587C97E6A4 +45B9772B8D54C2B75D4A716B83617CE59A1E52889613FBBDF5680E676F430ABA +8D80ED90B8410AD5BEDD7599306A8EBDF90107594F191F927C6D44BC816652BF +95C03DC365DE827A1AE756FE769550AFBC535CD3F92FBA42098B2613302020D2 +15F884D51ACD348FF9A0441F3E4BFC2C02EA7CFFE8B388BC0640ACB468F3AF2A +CC50955F7CE335B7E7C8E16F03A9DF18A31B257B6106C3578A343F16ED459E76 +43FCB7DE1E9F7EB80E5D21B7D4BAD5D628F55E1DE0ED07EA926E73FAA6FD190F +796E75D43954E67F8ABD25A6414F08AEE76CE48B180CB1D3458F563A3EDB63F6 +C9C3D9078D20914B83E7A9DBED2A2CE6F0775D3EE4405148F15A5AB53A4B0626 +E24322A78F87041E956C655601CAFAFDC6F3C75B919B4E5A584E9570B6F06302 +99CFD1B95C575E45AC1EE59C798E726F129643964A47283088298D9ED6788B30 +D48341D03C2C1BEB4F31BD92ED5494A6B4039A88DC8C726E053006F9798E9C5F +BB96B002056FD39A7EF2195335D04E67EEF12E0A16E0FE37FDEB37B925144A7D +DE388DB0B4782BA6D48A2084C5A821427F97D22C1938BADC908C772F1A578179 +4FCDC28D435B6BB443C31C4C9BF6CAED51370E133F64A53D0B56334FF57AC964 +B6CBF0D85791D12C68A7A8BAF82CDA61335057A1B8FF0746F94C93D360F4B0B1 +8FDACF3610C902BD03E23FE6FEA2E5935067D10AE5E83ED6214B0BB2D4A4BB49 +F05E89CF47483357C676989DE740832C4E004FF1F2F3BCA3E34DF760ABCD85C6 +95D97A55885031DE77C16B89F18648AB25F9774E495D4751ABAABE7A25CED555 +60CE44A39581BDA539D4733919B9948E2257DDBC67C14E6CA051AB6A2494A818 +93C567A1DC8030900555C28AE6D1A0CC6513C7B31A3F4EA137EF925CDFF3F5E5 +CC9C88776B12851525A920456464431B9385B6D1508FA472B3DB12979DA517B4 +1568600717B7515DBF20E33240405655B3039B7B8C37BC146967C42C4548CCC2 +50EE136F210442A8754946C8DF57016D0109AC569AE4675E111A7D14CA742BEA +47F0629A7EA56D657BDC06D84E4B248A2628123D100F5ED185DBE2BC67BA6F1E +CB72947E8C47E53D91F3A28C0125374D2D78FF3EC984B3EB47A5B1B0421F2EE5 +4827EA2D74EFEF8427FF88BDF27344A82B622327EA307D805E93ABC2DCE0D457 +46C2463F1F5FAFC898D6C7F64561E385646C8C71CD624F6486D9EBAECF04A0A5 +ABEE1E6495CC0B1554C0702ACDA0CCBB7275703F51EB6F10D955DE95727B279E +9F61F19D9D54A638E0BDD27FD15B7DE67A06C31BECB0C800DBB1AFB099CCC2FB +0BDA829E02EA8EA8CB86E97F9D074A99CA8F0E464762BD1B0F41B444BD6BB73B +916DC811EDAD9F9775890D9FEB5337AA6EAD524C1E293A78ACB15BADA0BB59FF +714C43A89459636515E61E73C2F4C648D2916424B688896567E6B53799A79697 +E9DACC8C43A3DDD425AFA8B542ED9614B482F73DCCFC20C4485A67545E241B9C +CAF58CF1811D639E6C79D013C9CA124565D5D9FDFB2044198A41CBD6ADABE1BC +F1B43683A55E7D67E1E00CC18986F446B1AC2FCC22B2A2F0EB7B78E567C3987F +6619BB27788517FDF9B5603BD8BAAA894CBF354FB6F066144931F91D1D8EFF57 +F75B1ED60F4204CF0EDCEBD9252EA04F29712B3907A7AA75964C8ACF7D216759 +931C517183D319B5218AFEFE28F64471C79447A8C96A02D2974A67778DFD3409 +BC4415F8D17B12773192F7485B93E6CF9C99C281514C1E1BDF3628A5F093520A +9CADA2D9BBAB43139F4D067BA7B1D799BD3ADD62EAD68A70C6CD5249CAD7BD87 +C72EF01DE59557A3C3479E36CC872062034B67BB60D8EE0B703443CE7B982E4C +A6714F3333D6780AA342A9FD1D290225A79536F222F2393C5FD6EDBC1325C4BF +61D3D3E5B0C7FD0643DDAC4181FC223C1CDF89A44E542F2AC67FC46D06881683 +4E611D1993F6353E65086553C9D8C415FC809A289795DC5CBD74FC1199E0EC66 +C984180B57F710E59FC74EBE76A8C2CA96AF6A7774DB9879F9A73958A8DAC26F +BD6C2CBA67E3AE7AAC3AE51CEFD4CAB980AC13FC24683151C15E83B23565214D +39600CA55C611ACB9941F78B5349B51B1C489119A4381912AF6D74508A1194F7 +D825C41B88F8BBA571414C69A085CF400D4F7B88D16DA3D7BF554FB6A96BF754 +238680BFE0D23146EEFA3CAF7ACF4475DC40A446758F5FF8FDC0BCEFFE4C5D23 +6DCFCFB0663B70BE4BA681C5689952A7A26223CFEF28D76DF18E6170399EC32C +14B40821724CDB09EFCEDCCC932EE90CA228D888B76A18AE6D94FD69B7BEF356 +13EB8599508321F0DE786EC7A5CB4D6A218E8A62AC044EED391C8F6D4F657C8F +D9E5E8ED382685556E5FC2A8214F93D1AEE16A49CB6A4FFF2EE61741EB41D56D +282C083DBB24FA25D4C765E336899B10EC68C62358CAF2CE6B21A74F9E554C82 +221E8A0414E5397DBF86F54FB355640CB742DC10CF865E0C2E16EECF709B2A0B +908BABBEE0175F8CAA010031CB98818494E670DAC8DA0ACD46959E51669420D4 +128E38F2251F7E9F20F107A450E23A658F3B6058F63D699B4C5135E348CFACFC +58BA180FB43251958D72F2446C6DB69A17BB2416B5B0975C5F01D4B1C29455BE +538BA23611CD5FF3F06278641AF5458FFBC44181D9DC7D4D6188D8A506D61035 +338C78D5B248F2812B3493F890F397C1EEB051D1AB29050F1E1020DF89E192D0 +930A1EB5E35E0844ED2B7B39C5982CA708A33E5164CF14B10EB890EFD606D80C +D08206B43A60C21ADAFC0A57A392B40CCFC7FE02AFB2111F3A20B18AF2F8D64D +C511FD613492F116AD08D2F6E8193F9685568B83A08395331CF44DA500C405A1 +58D1E63E6F36CF298C02D2271A27C9A454329882EDB15736CFFE070FAC32ADD0 +9CA8FEC258CAB9B80C0E4688322B87D4AE222B574C5C599DBBD24505FC00876F +7ABCD94C089010E6DBFCD033DA2476EC01E7D0EEF82D6C761126C42531CB6880 +7D7D887817FE9B688447A04B38709197A87F4C0DE7D26877E08E53F68354C2C2 +492B3F3C82DE586A5BE477D2EDD5A8FFD23B55D05BBAE7F6D6ED28BAB27092EB +C859930DE9BBB54EB2DB5452302F46AEFEAD89721FADA13D5340C7F8CBE0270C +A8861D53170E8050F5C60D72D85E2767D42E7A9407D6864A2118CC70A16C80AD +18A214550E33B636BDFA811DD05C871E9BD39F80682BE56F0E9D0132D5B92958 +E4DC5F4A27BBE2D2508B6B66322C4D2248F09B1112E63032DE8D750092197808 +262715C12ECAC600AB628B03732E6214AB1E2CC952B4BCAFF89D31D186079AAC +8D18BE05414AC7D3433B95FBAEC5186269E8C4F5D01536331A78A3D405DD8311 +8D46FCF30F6A339CA1E0C12BB42BF4C46612F3BEBA9D5822E3978C7E7F24B019 +3F883DE1D353C6BD609698251802B3BB06AE88AE85CF069C70AE3029A66DC96A +2620389074E61FC3FF708B5B9AEEDF245BAD27A66025636ED25A38A1BBF095FD +74D0A25EDD692B863A29E3F224AFCD67CF5FB9EE9E45C06702CDF81EDD74E000 +653C3CA9A8674A8895FCF6922C77EC3B63115CBDD52E8859A7A2F736C9CAFB22 +5A62C420FF7E6410386290B35DE4384DB00AE1077CD28CB6A27392F0353260B2 +8964096063D8E225240E0B357FFA444FD04EFB5B9555A7AB653C9F81D879E718 +E408609E458BAA7F912B8E8587A14B27D38792CF0B66EA0BF6FF28AB27D2F132 +0C4EA7DD61F4619A5131828FF73B622C8136E2DD8516194FA86B91A1FC11DD19 +315B3BEEF7BE8856F36C5A41ED2B8FAA5A35C46332174ADF029456721D204003 +17CC6CF3DE50601F8DA6A943A1A5FB4EF6263738B2801F5816E171020163C3A7 +4A1EFB474171B8B54A62E29A84B8025C0A486BB5871AD62159C8C2C2739BCB3F +1C22F406E26F311AF6D6E5DCF9394BD6E0F2271E9347150B6DDC8E6EBE12BF4B +4FA1C6D03A1ADFE14053F1DFD4086EA3FF849AA0CBACC03AFB2567F9A4A5E3E2 +4CC1DD4DFA6281350643C771672B4E8141593AB7CC1D684307274E42547239BC +1A66D2F9B88FF19774F77A29DDF1441094DD13FE8B60BE3D172E2F03F5642995 +D3B4EA77D4B8C2A5B95E17FA3F4FF3BDAF29D8FA2A1B269839A961E6D5F05079 +7914FFA78F79641CEFA7C1E7029B45CD3DE6289FEF5AF3294DD287F8243F4816 +6963C42441B459C2E47C48D465B3F73117A58E45F4849F7B84A3F7AABBB67BBE +C04E794FA35C3DCB2EF8689864AB5EF05CAD5839A181E6E558355A212B7858A4 +B91DE81B88ABBA4DD07243F9B7E7616F28A294A7A6BB6A91467ECC40DEC2DD68 +C46482EF44B79EC6726318CDE1748366ED8A46995C1CAC6AC2D95DF400C565D7 +8995FD0D12B5059FA90DC42F97176A89A6B77C06E89DE6AB4647D89733F5CB76 +8CD689C40B2BDB5400914EF8F081423A9865060FAF419E3CA66BA378985F9DD4 +FE2A90B6B7C189BF2B9530D43BD54AE78A4E6F6CF1436B5B09165E501F5D03DC +4921066327922289B1642CC41DCF873219055271129C7A1B573AAE9EA60E0072 +DBB3FF4A4F088408012F3F6AA8C85FD786C1561431014FCFDC04D9EC154B14A5 +3FBD7C31E281C866EC9336B78531071144CDB99FE5D9411EB5A49DD0DE0270A4 +03394B3129890428232C45D40685C9741CB09EE1F1382216B1DCD028FC1E0F5E +AE9E6A1339E911DDAF47D74ED9E46908672F505D44D5B96674EF2943F17710AD +C05FEB120520F8E5AD6293FAF919A49051D2B7B0B87C9926512401D2B45B1F7B +818BDCB0F26A70F48DC1B0DACD6A2E5CD23483F545BC78941F5FE1008B487193 +B59180C93EBA03BC0DE031C43C172F4B2FCD30B2845ADE4C96C662157B1001F2 +69CFC12DE72A3901E825E11F5F7B1B1DC9F8A783B840CA9BD21D082F6A9CD8C5 +3CD6EA5E2E4ABBC4AC276CBD9AA1E73FD66FEB9262B35C637F8392A92B598861 +FDCAEABF130A5C21E646B711566EDB6803F1012CE88E0771F7001B683094629D +04FF9CC28D2268C22F8EE75AAED16D4A2F95851E46B9809CC519DB0E39618DCE +C22BDDD8BC151BF4BCB0F7CA35786F6B68F68E8AEE4032B1BD963A83CB00A249 +1878844DB4DB27B7FA585622248E4FCE609E4521602CC6AAB4713FFC6A39A396 +7C2A1A82EF4D6E814B6914F24C5A5AE2952875EBD6CE5B7429582CAD0D07DEA1 +72E65642AACC1DB37E1C51B920BED00C4C6D597B5920A5861DBBAE3B43BC09A4 +4BA3B4C52B3930423C6D2D39C5249F6C2C0EE21B27534EDEEDCFF791A302E5D6 +2D18005FF18C046714B9938AC93B5B8099CB7DD3C142F3BDAD20CF23D7CEC7AB +C64D591809E95EA1788036BAB68B8E4CDB12A0CEF717BEF6340C9CA1092BF8FC +C30EDBE372B3D640700717F98E9912B814D1668A1169259B529F3E12DF309B92 +E0BBC7B6A9C2D4903BD44C4B0969E9E5DDF3B8CA44B8BD065C77CD2ECD3A946C +AEDA6FF655D5F8C94509F27934B9207534C98CB3361D8767D22360F5C4419E52 +6A3A861A6C56AED8F6871DC5671011DF104E31B3D5DE68F2DE00F49673BDA295 +F03EE38F4F2BF2CBE7274A6A6694DB0AC0A90FEA1714F798096B0B47453B9F9A +6E7A4652CEFDF5755A0C9F17C5574FC5E5623874D5360ADCCACE26CA2393188F +A81CAB8D3F35A3FC81D43D450A073474A391A31D7FC994416AD2DAB64AA6D4D5 +9AD3DE4132A10074BD4A27ECAD779F66C3711BBDD7AC92203583AAF0E70483D6 +FE5C76A25FD50101D6DD76C9898E8A996F6DC34F1F22085EA743F966D1FC36C3 +08A4CD8D337DCC8E1DB190750FBCFF37726FD48D1E3D036F1556B755B3C11974 +9F81BB7C7B6430235FED173EDFD5FE81A1815F1A424E372485321BFD6D92ABE1 +C647E7A18A0CDDF2CBDFBD5BC0A1A57855D4AE646D27063179B2FD6E2A01367D +95D63DEB069446A7AD2346ECD9290472E4D057BB82F5B2F86C8C81FA765FFAF5 +937C8EE96E839472E591378995354261EA890AA0CBA33CE29A7CA6BF1DE2E312 +AEF2DF4F66B742C91BCFF17635416598A0CDA87D2B94E0AF915BE7EADAFCB9B4 +5BA814C81CE08C377E448EDBB082987970203A20B2BFE8B58EC3E6AEBC7F0CE9 +DC5733F5A05CBC25152EDEAB6507B8BAB2736593383FC9FC744EDA54C67726B8 +199A3D9CE9DEA371CF1B47FFB18951D8F350DE7FC5D45BDCBFFF8005B92DC257 +DC098528B4AC8BE791F5FC75068506C2ED97CC77204E2F37248A2BCEC9ED4FED +510A7B9603779B68C57D57A94DB76839004E736177752A2A63BCE0900E00B493 +519AC8820D96F9304034D948C8309E4D199A5BF01052C9F807D27FC0C1C20C55 +1AFDC48CE6A0529E32AD7C316A4D313FA9E28D5D68E4692C48A9A030BB275DFA +004B19FD59F6ABBF58F5D2DF093F0ADE1EE44FABEDA97C775643F4616A0F5262 +076FC11E2C4607EC5AA475B89BBA1117182A9CA235FD5BB9FE9B15798658B285 +6C35315A41D5DD6BB6021219DDF2A30C7A695330AACB6D180F53A2C5AD703A8B +41256DBA79173524A8020675CAB62E557CAE00B396084BA76A734E1E01D46BFC +25AABBA5FB4D48A1654E1BCB76BB5E792B2E73F6E7006B6BBB435979C8218585 +C41DEB66A2B9152FEC7CD454B4EDA06A73F35AEAEE33016A2142CF0623E93969 +F86E81D72CBDB19B4BBAFD70DBF0F8EB16443A9987769C532B2A5053A7B55910 +50E459A1098F5467E8175AFEED1354F1C50326CDE9E761427F585DEC3C9A4D36 +A76A9CF4C0EA0B8712E890F81AA6C2A9A81C8D9B061931F75A257B93723BB6C6 +19CACD8CF81536DF0D2A466463EF195AF59B5207CB52D0902AEEDB39D79EB566 +F647A9138A81F7B3300E8D1CA514B6C481904879AF3C99EDD1D94CAF56C61166 +CF8D8663E452270BEC6324A17F6893F1447BB9A3F086E54FC1C2AA2D7F58F66F +7EDE9BE293ECD25F74AA7B10E3DE10513B13333A4224EDE43414EE9F86978C1F +0ED1C404CD511F243A1632663BA338317DC7B684A84C1D4E022D567821331064 +D16F76253F14F91DF2A50E2DDBCB6750D6A75DCD3356AEF7CB5A9B699DCDC80F +0F530B66BBF4A60F102C402DB836D29BA43941AF05680AD51D4F3EC668E6AFFC +CF0D36B5CDD912A6CAF2082B702EF90E16906596E4BC20CC979080CB78FFF0F5 +C928F5EFA8914DF3E56D33582504840071B2FC38CE433A6DEB63E6CF6E808E87 +9866B05DF8116F0972DD25F2FE5232522057A095E311C247336F669BF10020F9 +45B9B454DAE2423E0E9B432B1A2E3470EBA9CE177EF28091EF444045CAD0EAEA +23A3B620D0903FE4185340014920AACE478E93919FF0C722B77A448424D0DEEB +819B8B686125A6D8CC719711E108C6A3F9EC056C4400CE3B5D209696A45F5CBD +913F3A9AB9A6BFEDACD7C207DC01DE4554EA63400489918123741D1AA8843EAE +14BDDCE827785FC2324CE7689B0B7C2075A87520B253AC1C61AE34F5AE34866F +9B68061D1C1D4E4C5763DD68801ABEAD6967F056B8D934CF84081A6A82DC2B91 +2A0F350A5FEED1C1116E3E94A18427CB4A4D1A6935532FC4CECF43E10497C190 +AD3AC6C300A57715E3FB715AFFACC30D4D4EA325AA52DD9BC29FFFCC3646A7E3 +F97A12FFF8E0E355DCD3CC5E68CBC9FBD67DEF5B5157161BBFF5B61C401AB639 +DCACBA6C3F09E9683F872288ABFA4176CB69B8D5E61AAF135B7019CC8F6AE07F +573B897F7AFC0A5FDE3A922DFA3529B65E62372F2CD8F57B6ACA0FC382C148FF +A6CB30FE9E9891275705FFC71211EBB0E7307B00E629E2CD9F4BE16C072F3247 +51ED89B8B087D69DAE1D6EBC237AB8D3483A8F9D48C2F6B465430E12756CCEBC +1C5E3566359B47A0AC0B5D4A5A1B1712457FA33FA5BADF1E302CDFDF655D5ED0 +FA9C6666022302D1DA091F8A19CEF58923AF8996B4A5AEE228D166812A6BC684 +9C89B9E6F07B71454B91F5EAC87333AA9B29B1E83A3FADFCCE5AA5044FAD8167 +F6511E27E444AF65D09B8A7A0312BF78EB35CC34545F9BB06C88A074EBD5BE87 +763B3EB1EC2A4CADBB704F7A2DDA34B013390F0B63B0A618C6CBC2A7156608CC +332AF4C93466EF7D18E85DE5C5B3D2AE50A44DAD39738274E4B1E8D350FA4ABB +0189273E99A3D9659AFB5C29C68FF969D3681D28B9322EB08214CFF9289B52F0 +74E74ED0F1DDCF8011A5D3BC4AAF6D8EAA4643C347B912544026D328BA2BFB5C +ABF3D683F2A0AA01EAE0DC9760DAC0EDDB432415B1221D35391FC5BC5A30AF20 +79469870D85F59B9BA86B928A0BCE261D4A2296BA7AFFBBE7F1AEAE1108CBE81 +C2E5C9D7F0B64E634268C2510EA92E10C1CF3AA7FD146106513F7C1F63823DB7 +F7CECB5A80ECEDCB41D3E91CB4F3FA9C8FBF3F62A0C488933D55DD2DEDAF0947 +0D067211819598DB2CFCA285E3A8F74E7887265847DFE8353C428B253EFCE70A +766A823759D68B665CFF11BF62071F2F8879D076429DCE282C36ABF335E2DE77 +BB53D459A024B61A5CCE35ED62239410C0E6D2194CE14EC54DEDE8F86BA83FC5 +3EFF391C331C78C5C9C754F81D1FE358D76E84F470BF6DDF6EDD643E62680098 +03840FDDAE498DA27306296B282E76A03EF8D593EF0764AEFD4167C98059FCFF +CBB638E477D6FE42537F6F7BE5957B0EDC591363D434D1C60F46ED853E8E343B +68CC70D92BD90958345DE0CF9F345AB7641CBBDF225AED9BF559F6D2CCEB3D7E +91A0211CB5628CDAD748F37A8E49369425CEAB98C9C4F4F0554F263371D2C9A4 +16466A96356A3EEB31C362478D5D6B849E02F6F1F7095F9A7CDDEBEB00524F2A +3191A5B347CD1C75511FB605579D6D718723D3C1E26862F78B5803AD3E6958FE +6777D6E374B40F799F13514A7DAC43DCC6B68B7A5A0F25A57F540FD87AFFBEFF +3BF2D62098BC62B9F111E663E753347E7B40B2430E89C4056C71FB142DA00204 +6D59F1053CD6A1A030B6EA70302114E4480993E3447C926E208226375ED723D5 +B18698957750DB23498A960066FE6FFDF50B97B7C46960DEA0170CC19568A0E0 +371359569055135B47AC83242238F42B29A460798E246A70185B30A026762C21 +B0F1F1EE8F3F309AE8CD042DADE3E36151B3B7929BA6A14D90D924CBA141D1B9 +8DDE94E46286CB6BC7604D84389890C0AA8B97D329CCA87E5889F695920588B4 +582B88B39CE78B8C35836AE8BC5C66A86DA1267E46BE9F20186DC3BF636FCC29 +141302F57026469542DEC1E8EF2B54814EE534C87A1B4699D58D1CD95EC4B957 +802383A21B8CFBF29FBF643E452898553CD5FF01F7D73E461CBB43186A96C66B +BE5910A0F78C730FB54611E4EAA909096A77574AF9F481E0CB8D15AC003F336F +F8FC934023F37DAB1F5E0FD58575440E3FABEC39851905D14FBE4745D11246AC +2EC21E7E547F4E0620EC4900C327E20248F7F6D60BFD8564FBBEC1D36AA9C27A +5796EC4DAB33961A2493EEC2035BA4C49FE459BE440562DC1AEAAA6330732146 +CD7E01AD940744DBD87AFEB4671A0A0ED5CF115E3F4AC466A741F086DB742965 +3204FEE04DE803F0A0F53D1EFC1A916EE0EACE7476E1C173EBBE0B560E95242C +5CD33B424B8BA6C9A26CAD4B4A3B37C6FCF2EECAD1E8227203686172B25B376B +8B03F6B7C6D6184CFEF80170C1E8B97B77B3E7DAE20A8DD97B04FA0D2B955F92 +8994806F6B43944B520F4DDB8B0B6DEF2A4AA7E427F6524B915FE5145C055915 +D2753FCCBDA11C598DE694011B929475D5A1855934B03118D52ED86419047DAE +CAB3FC969D072D0036319B517B51679755B7E5647543BE8C60387800139D5F8F +1002D480015EA8251624DC1442E7FC84B46356200BACD8C99F1A581DD42F5798 +5B5FBF460CF1F10E3125211B0128586D65B73107E32FDDC354541917310B1467 +D92B15C317576BDADFAA7334C14E32C2D811B22E6ECA84BE80532D5FE222576E +94D6950015F2EACCA793406DC18C427864AB6F4E97EAB9BC634DD0B3179B9EFE +2C496C1AA898C2E821E23B5B16E7C3081360CCA50D42A459FB603475EFCBE5C8 +8610E9D856933CE6328DD3EED0C2EB4497C9D7622259AB0CCC303901051C4136 +4A235BF3CE520FC4A6D4E99937DCDCFB359D15FB1830A434CC01FB8A840D893F +79F38DA3641419DCB90165FAF459070A2C4205E1772ADE564DB3E5AE47045EC8 +83FBCC23CC6D41C71E83A01339C2BB9A4E8FFDF67D3DD149C13B8615EEBE0963 +21F59731B52B83DE23808F86523F88464599EFA1E726D3C080D13752E18AE05B +60CA2052E559B00E9F055C692F1EE98A0C0B734035A21D59FDBAED45C5541A8B +839F9757C6D3041144879185F75952B2E1A19B01CA1665B50B7FFC911C4D9D1D +05B0107D9FE3961A5B4A447C1CB3E8E88836D9096B656FA15CB9EE3D19A5833F +A5899996A26BC047D0F69BB9D243328FDA3E9D9975DA456946070A48E641D10E +676B14F21A2610055B5D7711620A201B465EDC837E661D4633AF96F60CF1808B +D32318CA59537415287AA572AA8CE82E522ACA934B9AB564E1648E3378648C26 +01C8EEFE576BA9A308E2C0EAE7A100F57C0DEB11623C6FBD57AE045048D4D1EE +81622AE08EC95179E21AE1C6D5BC9A0463BADC098E282B18255A0414270E41EC +B98ABF908114CA425B3E4609F5601151B3AC79055A14E1A2CD87ADE46CDC2047 +C4AB59252E633EBAE216F9EAFFA55811772ED0B7A75CF4AFE8A7E59EDD252CC9 +43FC4E60B3E47606760D06E3C22C599856D0C5FDFF00627484E77DA4D6F51460 +5412849807945C28B25A0B684E33D02EC26401708C1DCA683C85FAAF9F3D74BF +66C485F3D5F73B785F0A2CE231538BCC1E9DFB145152768C84E32F33CD0BA1BC +36D0B9383AB4333598627553202A39EF3E696C8BC58B0446D514822245D888CC +F013C52BEB7067214029B943D7E93FD42BDD589FE1FC0AF049E20F60A8B03B41 +5E7D4CE78FC1229D48F7D751407CB8ED28258B6ACE47F74E0EC4BAFBB4D3327A +6EE3977D9643A67CCCED9D34A563CCFE8BE6C57CFA39B90E5BF8AF85BFC30B7D +D6E697AE61FA9633EC1C7806636A916B30073E4C215280F73B6BC10DEDB15202 +827659B00933C6486E67F96D81FB80CABCDB9F159937989AB3E55878D53394C0 +C7D5E16C8EB90551B1F0DA4F06B911CE34423CC2328EE5E43292D03C9A41D13E +871EF89008148EAC9C5CAF24729019609D114CA82FBAB5EA34311D5710EBD6C0 +37F9D4A31AE64CA73B1499B39512ED67B605EBFBA6682D0DD96E23063CE3830E +AAA4CE2F1C6BA52DC2523DF4B3EF1F97298F2523123FEDB43F295D84E9F5AA3D +E6F1D4F813CB884E940A216A0C6658D1E69D28F2CFA4DEDE60059F4E919D2246 +9984DAF8A569DB04FD56E11116BA2296BF63ECD1B65B3391E6D8B8A8A8B95318 +8F9C9B88B7171D73E0921E5C9959186A20D01982D38CFCC5A4F91D31E0FA8503 +E05950007B611CD36D3D714BFD49F6DBF09255535579D0E0E01B540E51FA68EE +EA6362213A0B8572AB83BC8E533B63C6FDC4FF52507C34739F64C528A815B8BB +628BCBFFB3CA3C2F501182B46DD1A72580E91BF85FEF40029BA737438729C51A +BF25EBE3882B8351D0F356A6648ED0F11174EA948F3F140FD7DE1821BED2FDDF +8FBA1DFF2786C0015EC2A8437DF5F02AF89CA383E622570EFCF2895E3CDF60DD +A64B152E2F5B1DA795F50C59D80FD35AA7A2CA4B55C3A1E046C3C84882EB8D86 +AAC4750A3A786948FEC26CCF63395208DB2DC2DDB6310B59817ABDE61C856183 +500C350E58D4847F1FE95FE6068508A834B4882D863691F3DE33A9953000D8E9 +A8AC105E3486CC974E06351B1365D157A6948D49C904B075C195277F943C80F3 +786F1CB9D118766439621C23095FA5749C945E94648E70940DEA20F7BC66AF49 +0D6BC622CE00143F979085824A2A1E850D68204BF44161EACE7F8AB0E8097B9D +C4ACFC76E36776BDBFA4F03424C4E286A6B925B98EDE522B21641C95C0D2910C +6425C3465AED57BC4ADF0633D0AB3716F5C0EA050C493D84AA1E0903A20F0E3E +04F2BE6265DA7D2E5D308337E1B50D361D0BAFB054FF5292C58E12ED0A095870 +D39C50CAC7B0B010DB79001816F7C5EE04AA562E11F87CC6006B9396DBBCD9DE +4D25B032C5419D85D28306FB3543971B4384AAD68824D78C4E30C945B610E315 +013151687496006EB9D8E867B82AD13770535C982DF8F84EECA2E8382D1971FE +8C4D0F28D8CD60B2EBD10550F51B3DA50C7CDAC3553F8530D596558B238FC24E +26EFA58FC455D2308625E4ACB5A954732750A03D25A88207AF626534D73D7086 +F21936FEFC92FB0E1942DF5E43A52DBF41595BEE66DF4C66A769D9C3B316E332 +F1B94E86370C14DCB944486E47A0EC71D4169ECCC072BEEFAF645A4CF3B8AC01 +1543972D34F94639C7CE00CB64F522BE3053BBB55E8E7470680BF1F01BDFDFEC +06C3B76ECF3D8BDF4A150ABA5455ACA30AFB5F63998B277BE7EDF9268C07A751 +9DCC7CAF54B1F615F1D03CF3E58A447C377929CFCE75A6681A7BAE4FCE70281B +7E4B69B0288633D39EDF2F69BA310ABAF715E9B1533EF655986811EBF695DFAE +902D7C4F1FCE16EADC43529513B9DADE8F0F4DA4053549A930D311977C6AAE0B +D5A74E1F269D484A3A209B8F87C9D5A1E4EC5FCB83A2292DA43389FCC2756007 +EE9FC95E4072CCD35BA378DB6CB79CF7B27F017F1C78CDA81D887EAD7A9F3BE6 +53A80FE9B5F6B159E32BB7C927B069B0C94524F061C8D05810481A44A6F12846 +31FDEE232C38AFAAA1C81BC3D6DE2A4563A2656B0978DF8D53936C728C3F78B2 +671E7F22CDB339E25111E66AF44DF414EE12268DBF4409B84130157D861727CC +259A9E95B9BEA0D98F6620001C3912E22C2267D7EDB65E2C20680728C4043D5C +0DD01B294BAB0A5AB7936FEA9879682F48B1C39CD600BB8CFEA75F04D937E654 +80225375EF6F2EF5B77857FD79D050A2B20BDDCD94A9B455A09BBC746CF8D5B7 +93D5CEDE3997B1CC75634E2DA7B19788083B68F6B8ADBE69276F0E1BDD33408F +27497492E0624F96998FCC221F8587D30D45E56E5531A730CB08345B9E792AF6 +4AE3EDD27A5C6D8E0F523AE7C97E8481C775922B48E3C91F09DF62E1D41F26AA +F5C72265B567BE0B283D6981EF0AD941619574C4584CF84D9693E0CECE14F76A +594D849968EEE1F0984C7B2A37544FB2EA102B1ECBC8E48113579EAFB12226A6 +CBF0C0152DADAD834A437A3A59D6672E74DEE4806A820477FD177A8967023B27 +1291B58E507B0F68FBBAF99A963E9F90F4A846F627FAB4A2E11507689C4B5EA2 +D0A79B352E8722EBC3A662C84F6A163B64E3CF96C59AB5FE04201C0DBE426AD8 +9C7775FD046E1F2F4FFD1CF5820338C5353506C34D99D474054EF9BC265A260A +630CDCB706D2BB45C343E8918FCC8F65FFDB3655F565554D1D451B416EA838D6 +59A66763C9515B66E20932B41650E01A27E3A250CDD40ABDE0B7DBF60FD08700 +6885C8A7DE9F14F7E8DD6CD85E4370C2E3BC26AD2AA416A36877507DDDBA6832 +58E0A4BEEE2495BE6DDF7C71066FFEDAB5FAD4ED9B4D6D97B70468AC407A9FAC +EA45B5F501611EBAE7CE46F9FDEF54AF912E238315325F664BD295E53A05F73C +5318EAE8D4A34E472776F142C57F34087277308336A511A3A65B4C4CD419C288 +F6E5206D62CF4364C478E9F4C6B64E51D2457CA950B9125D22ADDA4AE08AC275 +8C2399EBECB69E7A5D0E31726E520DC5CF7492C59076B3AA425383A04C653C50 +34E222AE91DCE83E758C1C6DC3005CA2757CA73102F584CD2E799DA49C77FF12 +4911D74BEE8DB74B1F0298CA0A9EA5BA2459056D6D6CAB0A90A68986D492F5B6 +DB37630B7058B6161926BAA0D62C8511000BB7D2FCB92C5922F0519A1C1B3977 +81329801A5702540D4F84385876DA07CBF5D648BEC2030473C5FFDCC29ECEDAE +C3901C5FA181AC12187415086F68D913CE9993D40411810C505DAA8613C80EC0 +91336623D5686BE49074CF8A39E1EB7BEB212F635ED15C0CD1653E692623437F +91314D34CA09C3F66C6C1F11BBDF5F720CA4787F2441B7B9AA47C7FF9EB113F5 +E4E57EA7040314E093B6729CD3ED11D18FEA94D60E1D976C786EB52475293FD3 +C0DFB12695BED5E1562D3EDF6C9A54120CC23CD025D0D3DC32A37C5BD00D6263 +5D2808D9B2E2666CF4CF92002B9F1BD2D3E12DFDB18D40DD52CB427662ACA883 +1190B5A2F9860B20D521E55129E7333DAFAC54ED4783F40A8A7A69F04D7C286C +A52B8F3F608BCED599DBE28AA6F69A0EA54CED3B0A21D199363622352E8898CC +9B5B0355CBB533E6B179220872212360EB718BA0D9EF404E4FA7439891D2370F +BAF1CAAA2802FBA445687E743200FA6B9E85266EFA88D05E3B2720979A43E724 +64F79B714FBCF388EF35E9CDBA1B8DFCEAB836395907A0EBF22D285883B1B3D1 +772E00B255032ABDA52DFCC0BA366CFBCD081156072DCFC3CCB903C305FEB7A6 +D16B59AADA73E1A06073D20392DD17D1FF43C4E01FA6D5801BF3C61887658A72 +32E319AF638CA3D03BE51F832F9BB24920B4E47D0E3C96FB079D771CA5C310F2 +B8B4183CB714383A50E3948F6977B16F4A368C086B2A0AA57C66B30A895B159D +CB63B0FD7990279EAC00F0146D58282A8EA7367BA2885660ECFF69C64F4EEAA2 +F357FBF8A514D1002CEFD82AF39D461E2BE59543321C7A991B9576778C5A7EE6 +34703E9842983E2580DF60DF6EBC642EDEA4A1F1CC34E754327A02DF2E9415DA +08CE3AA32E1A615A484E69E6BBE4A64C2784E27626E017DC0DE42DD71EAF55C3 +E3D15BF87E9727FFEF3A66512C9458E557517BCCA1A2E92191259D1EF91D6E12 +6454380986B17C55A4E631C6DD20E5F87208D2045BACFB6AAF14129108A5B35F +41B29AA518D795C955EB247BAD1D1F03FEC701BA6CF3261EA985A932834834D7 +DC8C65409644E7315D66109D8F92DF5F42070B97A2DE3B69EA97CFFC71511DC4 +24A903C704479F445BE051E96AEE9E220EDFD0934CE793AC43843D88EA12757D +52C10F73BD34C812C1B306CAE0F18D7D1B095B9F5EE76256605E312AAF795609 +94D3FA76A6984C63809F0EB8741AB3AFF516C3D6F8FCD8B1A43F5912A2D98019 +EEC4DD105E77EE0EFF0D69A6A55370771E21851B58AD57332DE44B5B2B2AC29E +B58FA30709128A9862C3579CFD08D85E8188D26EDBA5901D510B258531395FA1 +7CD5E059CAD028AF5AF313AAC4B8BF60966CA2B53DB31F0659898D105FCF4FD5 +DD2B78C838EFC626CB81B32359CB11C5A3E9F8ADB8B1201240E34009BBD2E23F +C624C1AC532746372CD00EC50C92B576AB3D5F086B64119510DB8294D48DDCE4 +49FFFC05594275C796DCBA291312159CA9EE7BDCF3613EB3D962B6967BFE2BB2 +5A9A441DB81FC861B10F910BCF5E80B77F506EC8A64E6ED10839333BFD7E25B0 +CF6FA7AAEC17251811C44031C7871669C3343CCB0D0921BA8A9546E2C052CAD4 +BF765EA279DC4446F1D31ABCB9E6358A11DC2C1AB1CC71C244E57B4852A9CC36 +8309D3B5C0FD91CC6086DF741237ED81F847897FE5CB939AF97C1B9022CCA3CB +227B7C49BDB2FF6AE381E282B42D22BE5C6326A8602BF364BF81FB7367BCC437 +DC971EDB49E8C1AABB29DB90839A1A70CD20DC53DB0CA61133BA0571D00FB797 +13629C59658360CC0472882E8E6F085057ACA3FADEE34BE0832241EF68242F90 +AB650BD7FA6E8EF0DB539346515580E57D3B08BF7F9846911C6779A481D1B348 +D1D0A1265498F0ABCD04D50581ECCDB89117E4889C4BA30DE7155F6177E3F40E +1E9DE1367427C3A1F17C27AADEA655D59CA7B6C2FF4B833442BE50A87B2D4D1D +DB57A8B5C3201433E00728A9D9511A46C3442C3E29F6D9554402A516796E60D6 +23E6D61F0ACE1B60D45CABED468523416532810C10DF9E7C711F5356970D5FEA +FE5D366722FA3F10E097FD16DAA5B68614E7D29636019C4ADC916AA6F45E592B +C429AB5A668E1795DA4F755D74126B6E230587AA57E3F9630715DD6F224CC236 +A5F67B3668261FB2D2550F16A9700B1D997D2801EBBD0F113C47B8A13960775C +6FB40EDF6D6276916BE3198448E020A46BF782B4F02F3B1C85FCBFB2B2F09578 +F90BE57A53B596E9499F9B3E23DE0BB1E159BCD9828A47B3B1256D305D879517 +E172C1E3725C4771B3C03C9AF0B62EA0C5AF7C0D692F94FD1E554E3E52A0E7F6 +835B95866B7F72514098BA1CCE2C3613FCA568C3594534167648E2AE52BE3F9F +E8207FFDABC084BC74DE49FA0E8C61739C28C78CC994AB707C2C04860F0C3F03 +5929D056CC4CB6FB4BC1DE83D2FDF9B2128667B6A2FCD13626D3889D83683715 +131AADCE22BDFCEC3C9B03E50200BCB5321B42D108DEB519A5C9992B2D3A87AB +4725F5DBD2094F8D9ED8835777C2793FAE8FE40F3EC0DBF4F1362A148F890CA6 +FDE1970FF1CDAB096D9355B755AA0D93E6E11E9D3B1F5EAF537E48C401A75C85 +58AB20685E5C29DAAA6A9F90B066E991968475ADEC1F946C522449C0CA2A38D6 +A8789A6871F96165AA3EFB39089D22EE69BD05B4E0853D3C33CC84FA7ADDD576 +639456DDAB65EA50A3C711F78E8CACD7E112035D5D1633819EC419BF5AF0CE9D +40EB6603A55A7A2BDE2D6E9FE476B1ABBEA673B397F2510066D0D5AA650E3D1D +BCC93BF8585AA04228DEC13A6082A5DB015A70FCD1D3EF72A1CDC6D8A9705E02 +662BF3F0F8B318108CA4C9621C01D02EECE3817F9EEE14D30C34EC262CB9197A +377828142C04BA679630C281AE4A02E65604DC7FF73859163F0F0640316D079B +D42F807A41D0D128E010C3961B8A742908ED989BAA0CE2BC9E9C26DD73DCE3E4 +7E31D958F4DE4E3A1B161B2C5DDDE9D1C693745D146C83F807E5BA7E00057959 +F00E3FB89781B4F084F5B24A42113E4B74933CC32A11877B4499A19272B60985 +9C936AED3AF65C3156C8A705AB51749F99263FB2D2DC4F21F8AAC6C9168F8D28 +414A602824BA3EBC3FBCA1A8D29825680FAAAACB6D9B357B437774E6C6A1BE61 +7D146A9BB073E1903B9BE2CC9CB5DF888C51B73C8C5674B172E4BD5286F80E8C +9718FFF592B56E1BCAF33BAA26F5FD402710D27A0CCB1BCEA92D9BCA09983B1F +56701305AD3830A74CFF0091BEEA6C706C3433977E6F3BEE52E77BD7B09C1D68 +37C3A5ECCF06F8CE25F105CF88FF3239DB905472E10CFBFC4A0FBC8F587B1017 +26A6080B364D6C3D7D8988AB1B4CABF6EA6C5531F8A82F99E5B111C81F9C9412 +0C54828BBC82865316FF0D9E8920BF00E1BAA976FEF21D0A10E8FD9837799623 +E4CD5E216ADBD1D76518815FB49EE4AE73AEF9447255A99CCE4EC068959C8D9F +6FE965ABFC53DD09C063BFC80BC1E6463DAFBFD673262840CD9BB67AB5CBFF2A +383079643499FD42FDE13BE2FFE2615152FD8457A547FCBE2C1CE0691023CE42 +3409A9B2B8FA9C4280856899D1590B36596B93282128E6AA6552B8BA7072E603 +FE13711746B110FCDE142E497CB2B623682A60F888B1514F7CCBBD86150B9DAF +24C9B763172C14BB79AC1F8AE60F9847D9223DB0ED5F3B74362F4AAE3D466311 +79D35B1C81A2C48205028BFDE7BADFE708F104A2C41CD32BF8348E206E251EBE +FA68EEC9738CF3D3462CBE7DBE7F725054F08D6B9F1235C525F8E84287381A20 +10D4AC542CB292EF20A215A3BAD7CB43686DD5675663BF23D89E860D392B6FB4 +6D9021EFA0FAB6E04999DBC8CD3E84D1C751B8D24B4DE92C8A80E23488882F09 +D62FD350C636F73DFF5894861281974195F6BCE45EF55DEFFB318001CA8EF32F +864DD1459613772E6B23AB6B68769846BEABADF07BCF11D78E26CD09E76AA9AA +F5F88F95AD6EA652C8E08D1A7BDB31E60B90F31308E223B6B8262A39DE23BA43 +EDCEC76D6C8D82622F980DF095EAFCC83B79C206A314D4D83624B2617BAACB58 +304274ACC6BDF5D2F0529FCB76E9B5BC43EEDFEB149D61CE36DD4672F80A8659 +331AC6DDC433FAFD85BD5A0E404B878B2A34BDF8EDCC7E9E9147219C37C4CF50 +1D48B7F84E95074412BCBE0C060BB8FF5AFA81D3D8F0509EB8D1B2950F5CEADE +51BF7B714B9784C9A6A91AC635C09CAC5BA326D1F5C52A636F2C6B61BF079DE1 +47815674304950E4D724D68B4CAD2B8E641DF1C7B6F7587D258EFE9CA777E2C5 +CF2DE3D47D6EC50B3094CB30EDDD1B31A58E8915A4D92E89D0550D1630E7D47A +5930E1A7F582DB33E1EAF7B15E665BB214F62D336F4D90C6B8F467460BFD411C +0296ECF5019A05553316BA7286B4B9B4D892AF6906FCE7241AA12A18C50B6168 +F299DB45B7DFD3AE5DE34753A0E497B0D94B0178E66D38B494F850BD820D668E +9F3ABC7142C364D5E26345C6BF93B08B0CE0AAF87838DB65834DC4117B3CBD59 +5D315844A0CC89757EEC0204E2CE0F2A2248B860FF1DB439294E9E107E2560A0 +B804AC0CD639E314BDFC7A689BFD77A81075EB673A7C818FD97009D0BFD4B121 +46FC748FADD2A1CADA10A04566049FB6E00FB8B5C928989FFF0AC4A102D00693 +0FBC36B9EC7098BFCBE62E49F317267F5C8FB541B73DFC277DF4E8A049D09835 +ED628F1736AC2E6F4BFE40AB17554271671A348C4CFE13F58D0A5B2A7C3D83C9 +EF2ADDD7A6B674AC1B96BA31A10BE2276F45BF27344636A19E09D78E56798DE6 +774D7FE7BDD3C18770CA1DEDC5C035E4623BF5317F724BD8EC0324BC1881C437 +4EA69508C35BFD66D768A0AD744D8978DFB3DD210D5629A19D6A70DC8504C49F +CDD35E164B973CFCF36DB986C6C618AAE4C58D32E21188F8C5760DDBFF24C3B4 +F0814E471A0B76950A8BFBE86DBEADD5A2662B56A078DE456FCF8FCD25164140 +694844E5ABF924CE7CEDDBCF7F4492AFBDE34610AA5B54E6E5A44AF50F0E5464 +877D6855416CB8980E1B114B6F6597347C432F2D29E4714A6BD4F3FAE8FEBAB5 +551802BF47867563FEA5290BCE8022DF9D293FA792238B7F00F84E0F99163B06 +744A2EE93224CE855C72E1FDD0E52767A30CF3F0D451081EA69D0A80893FA79A +1D25E6F56DFED691E90393FEB1A97061FC3F2BCD4BEEF1C6F56A0514EDE39BA6 +BA4583B7FCEA404149425F6969123B3119AE25DDFCCA3F2F672B98BFC0C56907 +DA2923A73A30B8FA2377F36620CA0392651CEF036AE31F1E5FA9B2DC87F2E8F3 +B1964898A76BB97DCC8C63101EEED39ADFFAB3BE571AE0210309DCD4E4346868 +DBC33FEE28431EE6FD3D64D570E04C269F6D905DD391D40FF03CBEF98214DBD2 +2BB4638F41793E842B07A9CADCBAC476A6FB9EB23795150785AE1032FB16ECE7 +3DFE9AC0AC961CAF16B492C79B669A9F0FBC7F365BFA02C3981A324E047DF5E1 +41D2E85D6F472A6BA1D1CFC896E3DAD437689296B2DF397E40A6102493D09D29 +06E359254F761F3E1E3E66938270BD46C6DD1EDBDC60CBB35C47D6760B17B782 +76F6F472D584A07146C19846AF187267E7E1635FD04F311B7E70C7A33018C6A1 +943388278E04542E454FF117491AE7B56F3FD5B01A31A89F85ED680173087E8F +CE5365E1CE48CD62DB5AA71F4C2369A09BE3B0C134E550E72AA7C299FD3B26D3 +8D3D744758A87ED77EC946914B8EC92136FE4884E30B545A2CDB474FAD36B557 +509C986F87D992FA39BA7E8D85D5EF322ED08B1EA8D90B9E391D47D3FB2A3B9B +CAF230B61E0F987282BAF6B10CD07A23E3468BBF814EA995AD6224FD4C919D96 +A228947D0F2BCBF4B189F1BB9D2E1D1EF59F20CD6A045251905C39431C548318 +9023A4297D0D21E380F93C9FFADDCE951D0ECC25D8A4967447438DA572CEA724 +6B7743FB7D68783CEF142E50212C166D2983DB08B1EDCC59E426B4D73716B920 +A14805FF0FB04DB3F7AB70A1068CFD39DFE12443ED4E8BB832DF520B0A750139 +57D9A8F4CC6AB8935A3C01858A8ECBD75F740652DFDD752F4FFCCD4278ADBF75 +C27537AE1D759AD75B7BAEB3401925949E4EFEB1C20D441996D671C51D327FD7 +FE05253BAB53DA22FD071BDDF4DC3A9D7BEAABF49958249B5AF68B88D96FC333 +FE7D8781FE9EE147E162B0F0B487272D44522D8FA39842C472F9D527149CACE8 +AB0AB0E6E2D88C03E62AD7F6BAEB6E67C8EBBC94F330EC8DF632A5AD89FA1E9B +D953CE17AC117024A9E4671E5FC05FA194D38BCA2737E73D079881BBA8BB78D6 +0F72C39FF3F87C4161458CD8F6E07FF06312B5FF9F157014B545F6F1F58488F0 +E64494C390A6CEAAA53576A32D53CB5B51563344002931AB82AEDD0BDAA963AD +902B6AF937798843B5DF895CD487402ACD82BCC95D10FFF93F71FC4C93B737B5 +FBDD6DA8BA8AC357620F0395252BF8D626AE942B759F18D26C4667C67BC43ACA +FB4240AD7DCAB1A702E3AD59138A1B958D23DEEDC8F24D46CC0FC6B58037F447 +45A537C7B8CFA4D8494E737358151FF023B729C6BD069F980F33D5DAC4E278F0 +FFD91D253C9AB617CB9546F992615C1647123D25E8DC34B257FAC60B9B04B7AD +AE705AB62C31BB5A17E8CDB319B7A6601E8D3A5D144479AD66ACDF016B351226 +80ED7942FB3E3CE3EA9C19ECD870DB4B1E616B0B8C5DF42551FAF463FEF88527 +0367D3C5C0B8D9CC318324D3722F36E62EA52C1C7340A4756C8F79CF1EAE7A54 +66FB610907CCFA40C9DF6C64D2AF33427AC1E44A843D417C2CE47E768132454C +42BE3CCB830D5BA1D535E0E0A58D1AE992C552D3C0C1A468C79438247FE04119 +7D8217AA8E7BD66DB305893269F99E48A3248DD33444CD317B6B13BC7329F9D8 +50AFC5BBCD7F7E8A625C70ADFF0FCCC913945B53DF83468D72931877B664595D +1189CF5E16CC19A1C4B0C8A1B9861593F722E654DA0D166DC93C7DDFC391F223 +A9AF93757B01526FC9737C7DFE7258614F23E9C3FB8DAFBD8BDAEBB411E6B106 +280A4CFD7371C884D1CE8710704751B639ED78043DFD06B0CE0EE061E7CEAFDC +C442688CA7341531833129B28B6A3F012A60EB39FF5CAEF433C13C60A6F1DE5C +C2E8384E7708B86EAB25E29B10E46350E3A0A01F09F3A1B09E79627A2B66F6C2 +7E5F1C526FCF92AEF1399BC65C6D6C9E53EE1676A7BC66F41F6C97A8507615FF +4DCF870DE5CF27265693C26AEDE7684882F920B5A37C98F5B3963013AC586135 +B5A5FC99B222CF400D777EAED21F3B0B5EB3EA34FA5333EB5478D17AC7AEEFDA +368AB0CADBDA738B602D1186D3CAC6D79ADA72D2E1F2EC7107D607B663A9EABB +ECD6DB66E5EF29F60C54928B28A0BE531AEC484EB6B43237652F9756C8C14B64 +FC229E9CF2CE82018A7F05694FE9234D5886366E342384ADEDB53AFE5CE37222 +F00C4B60A4837F6D2B04798360D2E84ED5EA7A8EAD38DDC0C1A30595FEA4F2A8 +E1EAA5B4AD4C4931B17A971F32A07B9D48DB35C083345DE2F74DC9ACFA988B3B +C909264AD0E95EF95E475AAF7D3681B4298F24854CF9E93915530BBBFBBF715A +0D6E9C83FD5E0189D714E5BC01BEA29FBACF253A0A2C07D5774AA8ED1E837452 +1DCEFCCB4D39FF3B748F1EA2A3A02E3E9562814340CB4D01643745A795FF68B8 +7A49AEAB3F795D2887E1339AB5E58E97CBA70D62BC844EBAE6CB0D9ACCC55D0F +22CAF8510023FC9ED3307A31747B1616A87026AF5E8B7A3882041AA8F98C7FA7 +BD28891EFAB5748F93C9983ECB6EE46C525699FAEEFB24BE1226BE84BFF7C967 +0C2826527B4152ACFBC75CA8AA608C83E650D1915292D51555311AC9AE837E36 +1731A90FC77FDF52CBC5E3941188080B792B57F98317B1FF61E92E6B023F531D +7BE4F036DC3DF11711ED1FD118CEDACA9A550CB846E10C93BA7037676CAA105B +33F600DE469E5CD1768470D8A136B0FF623931A8E0861D3A35EE733B529FBFDD +924A21B496489112F6D210E0E4C98EF989FB07DB5B5FBC228A164358B3F2411E +3C2F24585AF5EFDA32325B466010F0273C2FD0907F87B16BE8039196B28751EB +F6DD29A4F455CA05496521A74E3138987C1C2615E049E3E5AB14B54D6E2359EF +DDC13608EC4B7F0713796C312C08775747D2275EB26FABFA3371F05DD11BFD74 +3512C5FB8E8000D09E05F6871B0860FA88E24A7C5CB61CEA9E3A112C53D117CD +6B89CFE96BD9EF0A6B9A24261A8BED518CAF65F0797D6CA6018BD6D5598ED7E2 +148431FA40639E8725FEB6E10B48DD8B035D57CC0E554877363DA6205FCCFB5C +718323B7CA09015029F7C3253FEE03D11022673319FE9FBF54A2F5261C4DC16D +9ABE661AD52A63710EF6C546A3EE8E0493B7B5808169F2D86CCDD826CD7769C2 +65C9253EBDA76C1DC6A431750B69BD3626CEAD87323BDB20189D09E1740A63D6 +C9F027088E51A5EAA2DFD8733AF1870214AF25EAC63C9F90A55E379BEFC17EEE +61F31ABF17512798EBC9B4F1C96A58B15238D3B5BE2BA97B48D27160110C60DA +40FE2FFD4DDFDD4161A89158BEF42CF9E726D5797C91F9FC76CC90D24AF59CBE +60A97A6494F32B95ACAB0D59F24703A2D1350530678B40D66238B4BC48110DD3 +A880FD437C78AAA94997ED8A49083B9CD843937F4FCA9739F940778EED9413A5 +80BE8A47258282C2337E630F6473CF9022011F683B87A8EA0B02A343AF7C896F +F4B8CDDCD917248E37C0764BB1E1DD0FD406A0D80D9960C6C32A81E209E6478C +ACADC1404FB84BADA418A5F950EFF6FB47B6FE500752E1E5923598A97B96E48E +9417BCBEE2F698FDDB9F5CA45568234525CADE3F3EBCA7D1D36DADCE085F2E12 +B6C6B26E3D70892486676191C73A7035A6E4F8124548332A0354457E2B931A67 +7E15A1DB1C802DF3D27208B0B1C8553ECFCD9B0CE1C2F950E26708CC128CC965 +4420238882E48BE71CC52707EDC8DBFAE2563E66503E74F3B71C0BAF3872592C +AC12D490F998E2198C8859342B3E769281EDA05289F8A3A4C4399E6F427ECD18 +A8C6281497751515282506477A9E0553B6ED1AA8C89F2EC6D244267BD358C8A7 +27725E0D288A0344D21ADBA5E498898A284B3A5F2494E4AD056DBE7461FAC6EE +0332E721A7F7E2058C864E02EA3DB74E476A1094F00BD5CE8D85E0B11E150C9F +95D584C11CF6B285E4EF068C533FD49017A51291CE497F6E336577EEA1C39E67 +A19C2AE6E8EAE3A8658E8174D98289DB1AC6DBA0EF27F2598F35E47D6B94C8DB +059AA1D803A9EF242F88A7993872A141F97D76B3572CBB811F34E066412C948E +7B7B22AF31C9030E333A104DCD5F29E649901D9168E330C8BD4DF7E50141408D +267AE9599099CEBBEB392A28F74CB75802B4AC5DC979A0FCA75EC11F25DAB3FC +67DF1AF2291A93D469B3278A2DA9397B018024125A974FD7D79D149475726085 +02F30E996960097F6CB908C90E5EF127E5D2543871139A7CB94CBB2A5FCDAC6D +755A60F53344570C9846812E6766F1E2C952AFBD260D252129CB7C19821AD057 +2DC1737D49FB047C564C4809EE21B6899F02916D50CF72DC0174BB5A75A3DDA5 +74F578245AE90CEB882AB4EEBD1A4533D922197C400A2F651C1A6C5F4FFC17AC +7AD689F45B1722BECE5F648584C778C96FB1C606DE7E7C6799964BACDFF5B239 +A7D25397BDBCA2DC06B27246728A6A6DF1F5EF6D8677E6DC2459472211A35500 +C8315B238FA5796C2DD19716204C9D6FDC7AF0419A8C3A927250192E85FE3D95 +924C818C60F4234946EB58C7CABDCC0ACF82601468F963C968209AAD57296D8E +92797D765E68C6B64DB292C1AC7A779FE7B671D505343A2D32D0898A1D90E000 +EFAAAAC89A3BBC3A92B7224E831F2132824875BDB04C318B018B49009FB4D0F8 +A41C484ADE005751538675AF75314008C6F45FBB3B6B73E80D223935B9D7107B +3D2B8F2D967D7DFCD9F2F9EC3338844F5D1F36E2507B2AF6F33A495CD6701B1B +76630A10878911FBDA1E8590BB83D5A59A5017A0566974818686187205D6C1E9 +4B8BC41BD5CAAD046F99F989F3FFC38FB507ABE17C03B466E423BE3D38B5B659 +4115B2527B2D3FBDCA1A2944F5C107DFAFA5B3FB0BC6536806F5D9BE46166CF0 +F84D3EA7F0E5A904295F84E63A3A08BC02B75C33507C5F09412242B348EBEDC4 +7DC51DB5D49526AE4344C51EB3CA8CDE0F11F9059E85CA54122ECB587BDC5A3B +7EB1B5E4886F976037B0D1131D9CCFE5656DD9F88D7E5B099D4862F78B30A7C2 +02B3ACA955C31742B0C732D84629D705F3C40ED57FA05C368EF688D075E57718 +6DEE8CFA86CDA31277ACDCC66A23D0656B20BE6445021E16DC406BB68D548F3E +1D2CCDC247B2A9171FA02878C108EC0FA6AAC271A82B8444E714360681676A9E +2E30C41E9A40FFC67C7C9C7FBD10AFA5DA7C228A1697A090F6781F2E75C528DC +56BE079C98DBA4D248DDF9AA7B6C52BABC2B66218AC0DE509F08A4FCA26C646C +9972C2CEF664ECFD1D924B5D5D7566A6B859499F6758CE7B762CF986C0736D80 +0B4A4298E5EE920AC718C5B64D5433FF3F9F631E8715ED604D708556781B1539 +882DD8627E2FDEC4B216C62D4CABBB2F115CAC56A5D93EF98E30D058EE634DD9 +95D5D1AB4C42680B3635639EDF9A52E29B37FD0BB0478E6ACCB4C7DBB5F9C428 +755744092BD250A8DDE731265A110615C300DED7F143D52417377E90B91FF8A5 +BAF6324B3EFE85B2AE0423DE309A36A64E4369353E6C2603E802ED31B56E318A +8F6D19FFCAF6627099C0E3C190CCEC20C4A7DD4B47816D529138E2694EDF54F1 +867F0143A444024E0528325ECC148D779F4C98C06FE9E752C366416044EE3FAC +72D8AD35D89400B4F00286191C16E16979D5EDCBF4FF9EC868D6E3BA7D98A83A +0710CD1AAD878778C0A4F0C9829723572B4DF407490D64B5C49FBC047DB49F33 +E824A4343825D756D894B41EB70093103C35FBC09FF55931B81340666A0B50A2 +7633105B04DFB6386ED196F7D540ECAA058C0B44E89141B68CC41FC21BB2C4B4 +4B13E070FF953B88A70B3880561FDBBF309C68F5C159D90CAB88B04CFEA0F33D +A48D289473545DB928964A1FF97B90FB16C449A27E333B56A1E49386AC738A91 +105C3F6DF518A43C97FDC345F5553842D8BB735C33271A8FC7E3BCB3C662A375 +53B8450229EDEC6156E41584971A159960569DE8AA7A959D328CC8C8ECBC0B11 +DA239FB55CBE641B71150154F8A9A8A128F8B58409791B88AC57AECDCCEC9893 +7B3363B091289345EF59DD66D83982931E090B8F2A8CFE8F46F3978A67E28047 +48A7C711553E9846164FFBBCBCF505F953132F546583ADBB7F0A9EF02A6C3163 +0057C83CE31709A61F2B9B09CDFE58F02211CA00C0672CE30572CA53BF75538A +57C1DFC3E44012F882BD50D4A3ADFF64D8E09ACDC5FB80CABCC56102C59C5B3A +8E7D70F350CEBD556CF6055160C1DBCA6411579F959C873E4149A3FDE8836252 +FEEE3A2F3E8BAABDE53FBD71B074FF5F26AEF5A6663E2117BE561B21DDB5BEF3 +73C1365F9CD57FD44C29C00395B7CB0F5A4BD22AFD390421EB238707C3D18BA6 +C7A1B0B95ED985D208850AD1BB88103E7A7837F707F0B824BD1BA350896BC3A9 +88CE5607050B136104344B3C9E999D4299546B7A107E5254AEA34E3DB09AA599 +CBD028178511FF44D04C530ED6AD10EC5C41178CFDC71DFD30B1F856DC2A4FB0 +CABC0906E7682033B43765B5F59F7604BBB01A7D660C3E5BFA8651CFF42936B6 +22059C2BD479060AB78AE53CA8B618F1DD65DB73F507951738DDB94B1B2898B5 +9724D93F9872A79725B86FD72BD7CC1D53061F8B55D3ED5701D99CB24F3F7469 +5D456C51BE9D32D8F101E50CE4BEBF5A8E97EA0580046639EBAB22BA25A69EF5 +D80A9854ADF2C2F754C35F380F72528D1142EE6CE628942F3F98C26EBF5A75BE +C8F6DDCE438A2BCB35A51DECB444570E36FB2C4AE1AF422C91AC39A18DB9AFAF +BA33B7C945743E2EECDBB82C10510C7D8EE5CBB80AB3036F259FF0053E1CD954 +650C4359157167A10C67372C068DB33982CB1101757966FCEC872B24CCD65E0B +E1CA44F1CDB5B42616DEA1E07FE6038A0FBF4B1C314FCCCF8E2C8B96389BB33F +978440D27041708AFD22E3E2E3D944D152F9A5F2E50A08BBEBADC84A7E0039BB +4651884B79D1AE90EF67AAC2A94BC1EBBF38F7E4B3FFC5A421EE7EEAD34CF658 +C89D114027B859850874A5FA5620D70BE94D480EF1D2069F64C9E70C669496F5 +918606F17D2B02178746BBD22FB088A7354A811836B7AC7CF69964B01F7B6C38 +D97DDCFF7F2A5BAA1D509D5EFDFB82E5EEC29F2F12879510790882D7A6554A0D +35394CD4CAB3E352139B4DCB9EB2AD2CD31E9717FE5EC1A5D0CCD89D2A6D9A55 +B0DE096EAD34A9170CDD32D058DB6DA9DDC7A20FEAC9A351B2144C9CE7CCA732 +7F13742A7F0D9A1736A857D465EF44F316F8B165E30106CC22C5255EFAF1C02E +0AE0B448B88CD712E94BE503D0424B6D2E42CE266D35B246D9C92DB1032E372C +FEF9CEE8853617CCE04505671F6A2F421B8D86C775BA10ED922C06950EC3F162 +888C5E240F3A4E2B8A1F5584EB8A5C86EB099396D209DDDDF6239D612330484A +7D1578FD98F395EF6FACD488B64C4BC127C129260C4577A5FEFE60FC476AD32A +FD26A711ADE1F32F869172C4B770C0CC0456730C5090A39B81CDDF7F43189A41 +A830E3D0875FD39EDE7BE3A37C5DE8BD0D53B2AEC076E977835BCD177D55B487 +ED28D26B3CEB6D86BE909C92C4EE1D7BC27BB10439A27F35C405B76B79C0CF98 +21A58E3E4015E50CE027AB45E1B1892AD44477D37E09AA6CC12065749339D505 +D96A72AFBA6A6E1390A6F01849D607E6DF07B928A490A424017C9E7199573F6A +8CD3D62355CF57FE164D79903F81679B4998AC7A65DBED69184906D6A6AD7618 +A93DC4288D72AD42116CF3A527E6F6958AE02E2AB2820C4C8235DA5F8C161D62 +7796C9FF711917AC9023CFD7BC831AA847281DA84FC40DFB8532AA9A6E24118A +F6F0E95313894F71754ACF52FF8AB3C9E48C811D5D19A0B686B8E1DDB9E3DE55 +7669F0BC5BD721081891536D9FB45D5FC6058F768007EF51315A619EB93AF0D7 +74DA6F7C1F0C419A0B623A2DF8AC5F81AA66CB8EE50B69CF20B7CE88282AC1B9 +6A758573DA78757BE583FC05245BC6457EA6D1073FBD3F3F506139D493E56B05 +EE5897161C99CAB23AF97135F18C72D6B0F9802A339E3576271AFC00F077075A +3724F96F7D1904838BD92DD6787D86763B553822D81E63ACB53EFAD31981B71B +BECEDF7DE2AA12ADBE30A544CFF6883A0869631F70F36D931E1077F8788627D8 +AD4868D51502C35C0C3697C811AF509C526689FB4F8139772964F414C0F5B120 +37C04E77902A09414406E447EF46510D80B5BDD17B712A5137869B813F673C63 +988A772C0B49D04118B5D5E5F8D07FEC3E8000FA1FCF06AAB49BB73791E019AC +148BAC5E4269A39347ED188848E503E0C04E548D4C5E0D1FD132A3EB91A9C92B +9218A29580F6A99352F46C747C29F87EEFFC7912B6A60426BEFEAE7EAED1AF22 +C757AE1D228A336D999E620934AE9D1C124E4190BFD280B24A40E8519854D386 +8A6140A79F2C1621D94FA49B4B869DE236E51FCCBA2600BC7BA951EC067E6759 +C4C616BA9F1AA22C72DB3759A24F77B63DAFF16785F0AD51B92DE05BA3634D4B +941AD4E19379CD165BC655EB7519B58608935196F2DA9F17CC2BC1238781D29B +EAF0FFF3CF529CF48890C17CB1D97CE95AA2BF2827B43B39C8C61FD91E7BFCC3 +85A92AC0528C12123EDBD7E9B1FE798EE0CC8967CE01D19276E8BE4014A06868 +6CE0F5FCDE2256B8D2FD077945BFB2BC23342E4EC323FA864567F8867AAB0196 +3946CFA77BD98C46666D80D4C67808DBD53B407E80CEF7DE3E9120E2AF3B27CC +4F3201027C39A296C1406FB76BCF9E46537DF1D3409812DDA774C146E135BCBD +62E1EBEF09C3472DC0DBB9CE13B31D15516B50280B3C09E9F6EDE5B05B8D0B4E +C7AB274068D129951FFE53FA5F0E85B5F1DC12382F11B5225FEB793A1EEEA45C +458B1EE64C7E2A787674140AAED80C0521469C3469EEC92430A9E3ADBA3A094B +73A71FEF38E2098E4B882D171524BE3B4BAE4A568846BA996347E728580F6AC6 +EB4CB545123E55D0EE933CF9CB63EB60EDBFBD3E972B544477AB4D68826331F0 +4F8AEFC29ABA9E1D6EFE807CE2D7E8BF254F153B3C9BCB6507E89B97158EAD5F +4224068DA7A1686B8DFBAEE60EB405CE71F71B4872D396FCDF472EA4CF3E6E61 +7F35278F1E7B3ABB2714E1723F5472821674C130E7301D598A6D1CB33FD3A94D +35F73E34AE11BFD6070CDA2EA1C994C0AE4304785A70A38622C09D47EA08238F +7E497A635032592C8E28814D114AC8D1B9FA512FE66C692F75E42B67E51E18FB +3F642D14C8DC0DF74FD81A594376BB9B7DBA9B4930AE048E4344476943D31F24 +35FE5CEF1A0BFD45EA5C43BD6700A38796626A1EBB23A3BA4B7C64E1B145FF89 +E1E3CD5F27844E66E9868F13526D31B87FC9DF2676E7ABBF3176CB2CC698BBC6 +23D39533FAEF149531AFB05826F48BD2CF8CEFF48FDA67C72EE1F32E41745A79 +C96B8264CE368E6FD3DAD0CBB224F8A9525C6FD720DEE0FD278EF36886ED076F +EB24D1D8B69C456A9543F4543160B6BC57D0F396BCB5F416EAD863C35BB5DA81 +B218D99B5CE34FA719E6C67CEA1B25DDCE2B019208C1DA5D9C105F47A382797C +A73AAA78B4F33F509E60BA34B4D5D55756639BDF4761C9F221B09866291760F0 +4ED5CC9406061F7FAFB0B6F93796F64BDC05277FDD466DB850B5ADF5C6E293E3 +A6AF3C0CE77608F2027BDEAE4076B776AFD67A7BB7123A1F2F1F95609779BFE2 +9C1E085B68A4C444EAD8ED8E3E7F08CD5F90D12C96005EB144157FD1A85F7176 +3090740FDF72AE20B73733DB0A0A9ABAD612F6133F77DB8FC48DA198D73C1CD8 +797C02A00B9A6343D43D1C0B392047C71EC1D62B5308B76936F64EAEC52FB0AB +A53516E6BF2189E657E6DEDF0C680A81282F877B0DB2EE045919FAD21BD4153F +1E3B07E23F7C13B55B47B85E99E93C6C64D7132245FD325E9FD9C6760C01C8DD +61930D6F4BD6C59F880CF11C3F1588E72E98F80140F43DE93ECA43931919237A +2450397829719ED4E34241D30FB4F5C8A85B1A85FAE2305C47550BBB555EE76B +DCEBA951B61B0D3A7240B105695337170A9A56468EFEAF599FEA0CCF01A2DB84 +25319E635B3EEEB2B1A6ECFE58E2E387FA5996D311B87ADD09AD373BE347B291 +140162A7BAA5CD747ECD0DD86807449609C1B86BC5CE2A087AFBA83091CE4B0C +49E6C7AE1306511A1BD1D4FFE475FD7501461D782745128DEE7C1BE525A3B04E +5208CFC6600196DE9ED2E7A7E20E20E29CAF5019130609E1D3AFF1DB46E12579 +1BCCDCDA2A43E93CF68534225DD7CBEF77AE71AA22565258FA39AB4D9448D462 +326182601922932B23CE0E2567E30BD47772A11D59E2CB15B0BD340C0657B465 +733E5D4BE23D731F0AF280EB827526F9050776DD06C6CFC96318E91F821952E5 +0CE9F613F0C595C55F7351D7D4114D9611AEAE733A45A7F6645166307E210930 +0F1E4F7A64B77EA34F19A5F52445EEC38EE28EA988EF3478F03929AEB7ACFA8B +12AF9CD3778F13FD2ED625B825053F2E8532562AD65B4BF0C2631586E30FC27D +D2B5830E9EB43090370C658E1FC9606BEF5FD9CACF8FF8C051EF770B95C419EB +1E21C8D10456ADA6BDAE7069829B6760DAAB8F4772B7FBCF8A96F691BFE6802E +F9EA5F469758411B191623A09A49B22E042310EB212894282C023852E11D1001 +225FBF626AE3FEB4F127D055FAA2F1D6533FE15F30ACDB50FDFEE0BAFB1D4CD3 +FFC9A8CDDBB834E06F0A2009E96E82EAB4364D42897631C46797394A1745A3A4 +45B2551DC83AEFFAEE4B19C824C88804C8789EDC04A72079561B851853585AE0 +E4DC3FE1515E0751FFCCB8747E05B3BF7DEF41CA3B9D17D8A3452D965E7F1F0D +1770F771EF9B8CEFC746F42EF799828CDF99643D61F02064D472E5CBD1F01AE3 +027615C852F4F2455711D642C5AAFDBDEBB87BF4389897DD96F463964E84BA09 +75778F0201C395B006083E068C1CE5EA1725AF409C9A0C9AB1DE481F85511594 +79A3610A5D62625D9177B7DA0E2345FB16178DB9AA58588732C48BE70A5DA581 +EF630C04C61499312B2C456A5AD7D3EF4B6BA25A17E8990B9351A5232F783D89 +CBACBF1100EB449EA090943C73CBFB94AAC0D8C675D84284B83B4871F7F1F37C +549C0F4194C12B2FC3E52D8F89FF2A8D18EBE7F270B786500B3238D7D8100CC2 +613EA077722458508F6DCFE09A5479D450B795A1100FE3ACD3BE0EF191BC1625 +729369ECF1EE49693310F8A241EA75CAF7E4B2FE14A91E9F0C13955496FB03ED +E8FAC0DDC571FCB38B006A186E9642B6EAB0A7CE39B67112D9F83651A6E9DF2B +9F6B6046744A77788DD927DE5C22FCC918C93C7B42C834391F8D9AC89A2D20A2 +1D979C7D6238D4D8E28946FE336A43402F67BE9FEE64B7AA3F4624358C09EFA6 +99FD5B78AC68D5E3F1854767BBD97701ECFE92107F6E51F00D0245484732150C +C33E963DB666494C895F05BECA73B88B7043828D0637B3986372F28F1DB8D68C +0CB56793D0FB42444AF9F77A634923A09102AA77F2A5A36330E8B946806E57FD +47BC5B0CD1605E564AC173D7F3E1E19870DB668D87CC1A2BAF539925C1BEDC28 +ED5870BF8BB79B0D31DED055AAD85A6D8EB98D1DBE04F10FCD01932867FE787F +1CF53587378BCEBB146135335100E2251577F42387DF4517DECE711E8A65454D +FAF19EFC6EA9CF50A4FE3DA6E4902F895702F860AF0A82D47FC7E7C4F3FDE9B5 +091A7AFE227BA45E85679CD34B38B14BB824C7B499590C9DF82C7C11B36354EA +F2A862100807308908B088EC066B2B20410914056F121CCFF70EAAF9F8C37D31 +9C09832C462EB0315DB838D2E2816528FB8391213B9CB687ACE34E6055512C6A +543284441527EA2AB308D7FBB8BF137D201042117527E548909E3951A68925A8 +1F741254040BC520FE89B7F675EAFBCC1C2EBCC6F55BAA59D211572056ADFDEB +3CEB28BA5B9987C4E5CF15A23D558815AEBA5D4EFF8B04D2B9A07F9EC3195A8C +BC8E5E8422BB1150444C5683471207E26BA7B42F43583DCDB2868337362887F2 +8947C359480DAD443D473C61C4AF2E6BE2F7BAD06C79C102586C325EE523F000 +334B1AD5F85E52486C07D5F2B88CB36D7C5E61B421A67F76F1705CE79FBCF403 +FD73DD06D579EE0891AFA8CCA2002D031A2791B5747BE3FA9B7053DA6CB943A8 +8FB3D8DF855C16A641AF1B9E0FDABD84A5074B583202A8C120405C781F2A591F +F44D17300936BF3C77591752E3F3FDC5C448910A7DD21F2C84F1D44BAD9C7EA0 +2C29193B42734103C2EE5A6A0A6B3F9A668D0E58B7450450290C4DF4AF6BA8A4 +EBCFCBC4363ED8209DE73972FF2DE7872AD38ECF92393023354BF50C918F84FC +8EFAC13B94DF583EB1F6E02ED73D73560DCCA4E2F1CE8A7EFE29988616867139 +FD6636485328F32F2A9C2D1A26306936ABA671225CE1685FC633E98F198AC865 +C0ECDAE559DC639FA8D0D9BD2191C97317C07DDF2BEB1B8E6B0A2F4DB30B11CC +FC7CF4D9EB529CEF39C017E332079C03FDCF16EF57F51CED595ABA70EA35E643 +88C4313F914D6888DBE345B1E5B97DAA93CCA097E330D3CEE75B91B36DB308BC +EB676516AC72507CEE7469A7DCAD6E98000B1E3C77D8A4A4A1AA3C31AA384F2D +2BD50F44E9CBB4B5FFD65C4E7931BA8930920680537920623C80A06AA95EA0A2 +DFC56A91E877CDC9E57A201BB933B4B15710CB4C1BCBB88AD119C273D9238020 +24DA817F6E77BF55F12E9F61A1E0D2A9DBC432E0827AD7F023F1DC6C82984F68 +F6F778AB1DA064EEE453A2C148AC1FEFE43E20392D59BB8898459A11D71F9713 +610A22F0DD1797E87854B0922FF58FADA2AB26FE02E9D6838D4470B8E16DC017 +874787097C64EC851AC4BA343EA6D9D1E0442F0A8AA1D6AC71C79443563B1BAE +B4B159333392763A0D17962080B8243A4A6F11FEA2C8D5F4BBD4482638854019 +DC1BC660974B96EFF9C01DD2797B1E1C8E0CA2905F783B042959701A74AA8023 +CF44AD6A3C0B7414D41BF9E330C0EA9230853322C41F8A40E782AD8F4587E647 +EC3943D77A2ADE03D8FD096408B4085690CCDA8AC71C6C11AF690D8C32036AFA +4ECAB5C1F31B05FDF26CADEE15383EA1BBA59FFFE6819D3155FFF76BDBFDEC24 +5BE59C61F3F0D704DD0862546F77DCDBCBC313B354481A9D529C4228E0E43EBD +1BD15B94876AE370FF835434A588E4E8757025F2B1F82CEBF20AF28ADB8ED79D +2412535DECFFE25B2109229C9BD3AC9A06BD241F9284EE8FC77096DE5EE21BB7 +7A7162D9AB3D2CF6C100D66BB240E43992444151A9ACC99D10B232B4E400DCAC +BD38E0FABA6F475E6FAE28448FF34EC8C1656A1CBD27CD6561F9BFE0FABB1444 +2C25908CB3D14B664B3E9BDA6F0EDC8D933FFFEC2CF1A4074FE4CD3C8E72EFCA +925FB57C53202E5F89D8CF63DCB5EEDC1AA68D11F263359B84A3D7F9AEEBE5F1 +4FF089AC97F1222221437833F33C06166B8CA011A5D2F9DABEF2750CFC00DE12 +9D26BF74021ACAE3AF901CAFEF6BBFBFDF7A496A73BC1F495D0F8AA6979EB23A +0E4936B95B1636788C8937078CEF6AD30F0794115E019D187C11D6DCAA187303 +706FD91D652D41AFB4E012DFC5A0F78F435FCBE98D433CE9C7DC248106C5C763 +AAAC5FD1DF5367B41E004489C01C5FD3AD98B8EA7FCC66E1B552A4B6FF2AB13F +93AFDA81E74C7304650C1CC7E0162AEA22A754E413C55D571349758D8AF0D508 +9324F516E8D4FE7CE7D0C2A574E959AD1DD3CD001E95B429E4FD1A6CB65A6133 +EC9893F1A7F476481D209843208146D10F9A4F0AACF2A6DCD4462CB4FC9D926D +D5AC6B561BC9B0CEBC0CA2707AA010C66299C1DB237B020DED71DD7D80C47732 +9FF3A32D0EF7042C4021585BBC826038D69CB48982BD348946F44D80C39C26F7 +C15EEABA258F8095767AA5447F6A9CE1D43D6BB3A6B205B8B9E8CA81089CF71F +5EDE578C4C244D0E35599CD00FAE11024952E3ADEC2ABDEC90D2FC76F9ECD6AA +A6B40D16DF171738262230DDA062E9154DAB0A506DC761E79DB40C7F389C6E8D +71B5BFBF82B224C4113A8E4580355E0B80D408B1D34F55E3586E9E680C689413 +5D584DBAD8258397EB0EC2EDA157621F90CF742E8F98974C36E2B1DA6DB71C53 +02A1E09A7E162F6E9B23F0CC5CF025CC9D13F55F787B2B565746C2AF129F0F4D +3E304C56F314EE80A250BCBA45112194B4A3D8EDE0985F9067493F095520ED4B +7F1CC08F330EE6F17DB5EE43DDC75AF55B1EDD1B41833FCCE5E842516E49BE84 +611BB71A150B44FF998B5866DA29D7DDE99D9D63F862EEB7C935216E5E60B772 +43800ED5868AFFC2CAE01F16B50902B292C2BEAD2EC5F7AF059BB8EB0CB73C0E +EA8F144F716F3565B3CE4B9597B7C0257BDED508A600D3F1968CDE4E3F773F72 +C1AF5E675E3AFEE289515A32C4A4038E0B01410B58AD63AB537FC501F3470514 +A0AE66FC127777C616379F2DA2307DDEB634C5968C1EF03BF7981D9D90C14E37 +AAA1A0C76CB40A95B77D6ADCD43281E3F680AC687F859ECF4AEB35639E1B04F5 +3C88A52BC559DDF82BDDF076E58368AE6C8072EEBE110683B069FDE3BB0F5E38 +A3EB4E820CC8B98E2716D27925F5351C3B3ADF3D60398813106BFB474617EB33 +12C56B1BB2D743E2950677BB680C01DF42517D0E7C7F035D968938CFABD07E38 +A86BF53ADB0CC8715B052FCF6ABB0ACF56456F4F88C8D0E17220D88C82DC5087 +CD762D2538E309B6BF33C1F9B449BC0EFA035DDB9D4ACDF95B12FCA8BC429A78 +FB6CF03BEA0D047832E23A3A3215225CF76F2C213C92D706AA96182368F64173 +AA1D106CD441938A5BF7218EF0E1B73F2AD3AFF7C87C580B7643BF5994FABEC3 +CB362FBEFE73BD731ECE265093411559A49A5CAA01C4B55BF0E4CD7EAED28FDA +8C264B62682DD64D12C7D9BB5119269DB43239AF2C80AE362D7716B5E49197A7 +F25B759B90DE0A436703CBCE72C472C53D842364D3BF567DD3F7615B29F2D02F +C4A8E4603F76DA39138CF8596733947EA65F1B8A55DC91FCD08425B2DCECD526 +5DEB615E7DEF0155ADA336A523D0974D4D441FA925CD876CBE1A85D644831ACF +705ED79DFEE14D519EC7930E4243D38E86CF01F355E675E9BD24529575FD4A6E +2187DB6C8AAD53613FA7FCCCC6146E9F99DCE7B10815B49659D24880A949E036 +C849783186B13EA91A595FDD1FEB4DBBBE58C512F89537B27A2BDC4B568D1E38 +02916E8B4AF4A537C19453F94710478DCB89743D7EE30E15C165C0CE881CA43A +E18E3E98BCF0423223E37C9407A872A996901E03392F8CE81A928727FBC9BF85 +6DC374D2AA3B2D2A82CA328E4F1A261B3EBEB470E5001274F564115691D01E8C +A7480387E7EC74C5CEE5BDEBC0250108FF13D87C71EFB1BCC9C5B8028D70A79D +0D2161380357E0E96D15597F673722E535F7C459F2650AA6403778C64F74F10B +049AAAC72E6A409ABDAFE7C2778154D6E920D5E2AD710CB4F7CF7B52682EFB68 +FBD7DE55B4B5048A5738A329842AF53128E3A9E89ECEDA65B2B1A634EECEB846 +6D7C0E11933A5278BC377C5A1F50BAD2DF04CA0AEC47908DC12CBBFC367448EB +7FE9D1ED7F2E13E35CA8E6FFC9734CFDD15E5322ED7D476A537FC691DF5B1CB7 +9C8396431356B92F4DFE47212F403D0A60253C0F0E7BD7768B157FA239753729 +CF0C82DC68EF1B83B56573BCD38C5D97A3D3889C650AC889046FABAC4B55856A +858896E794BA81BF7D3917884F4989C120FABD9D82698DBF7ACA6FA03B7DE0B8 +DE93ADC29B8FA9DFC15D5B6578AD6CD89DFA21B2E0AF7F0FFE862D1839882472 +809FC43C5255790B323AB759EAFE0928391A8E87F2C6E50D7A7B87E6464EA553 +A1AD7FD38833956A136AAB9BF20ED42A2972FB4BE9186D48C3759D0FA38DAFB5 +7C4446C3E4D0743817A361984EB4CE36EA8837008484F27750EA45BB0481B07B +CBFCAF075117CEC9C612DCF1F281C265177362A12F586DB66B890BFE45F0A5BF +D0F433D8C3AF860D3423F6D7515192AD9FF0B5DCE2F50074BC2FFF95AB9ED49E +73EF0AE628B503E7EA97A3B3FBAD0FAC2857BB8219ECBB90CCCC74B111A74F84 +2960056DBCB65504628C56B8E5F887912C80D8CFAA2226E23588AA243C14AD88 +BB92D576D161A3C23D065EA003369BB7E2DC0423609C2591D4AF74C86D998620 +B7F6BC6162BB2D98CA81222349BAC8C5E6A3F3170713B188FF08B8C40FFE0B2B +DF51D256BB2A08D1FD0890BF51EE599578E189A99787022E19B8F44E8F0CAF54 +BE711062BBD9A270D1FF131D69F1ECDEFB84CEB2CB1AA8A6B474683911C895B9 +8CB36086B59B54B4CAF966749A2D395FBE6F4DF81F71E37E6A0C5AB70C65DFED +CA21D87FE11CB967AC0E11B70CDD98CE389DAE41F21C429D57482B736EF9CC09 +16AB1D0E877AA92557D24375804161A6C1AB7C8912512BA2E0D0B1288A6C6784 +9EE2F3573B32873DDB0AF81C83B9097C0E4E5A62B6E324A02E19393A2A344DD9 +C6FF7B8D8405A6985F1C82FEB248BAA43FA630661F9708A1EB25A9C8EB93555C +5878D5CBA73FCAE33DCBFB998B289E2204D62B8463AEEEA2DBDB450D6DB0AAA3 +A4EB5562F40D56A252C5D76E71CAC523C34F2A3CF56745A909C79A1A202D64B9 +EF5F98AE02CBC7B9B4D6CA1192930C93E9516C7B8491A38254EE14AFAE4C5E3E +CD9560356BF0E1BC7CA29753C978394A4B06BC0807323267A97E6AEF0EF163B4 +2C92A7610BFD6257188892B55B5BFBC1802B0C648C1968AEC2BE35CE5788F7FC +9FA1A42826378BA3F5142F8C9DD8FE321DB0553838FCC28B2191A5A26154CE54 +AF61C72B0867FBDF822FCCCE8E08E9BD728A7D063E3E9AF29BAAC110B817B34C +A5D9B8A61CBBB74DF4FC0A490BAD78938C4694B26F84DA7A8A241FE91471D2F2 +0F1228907E852BC113205EC367D43A6BC47DC77742A8C0117704A0BFE29C1EB1 +8E35DE45C4FB9B4E48AB4E9EC0FA0F0A33C7197C19B41D2526E74040E6E7E797 +E18A45E86F480DFA98164CE339EAD8533F95274C13F26F1433D7FCAC9E28CA00 +5CDE03DCC7AEECF7FBF442840845EE1E17B58D71E9D58456CEDEE36A57C37EF1 +7159E3841F282ABC7E1C66594051DD8C7A9E7BE73C987E1640F345DF66E42360 +65E4D30006179A3355B7F0C54CED3F577A82D30E99617E52C0CE533016DD5B10 +211A47C3FDA4F9F7B54E61BCD46F7812A26D127EB37C047B67D547E644CDCCC9 +97CB89F6FCD4B80C83F15D5D280999772613A4F08F3620894C7C594C115A5FC4 +A0699C5A13F5D846F2220FBF86F2AB4C209F8703659389AF32991377A3E7A38F +5EF88E603CB754D88E536CA1D071BCB9E9ACE9D737B8430ED73A1642DD094D87 +CB2E636ED90ABB1FA9612DD39C767B3C0169FBA67B3946E1E852E33588B8AFE5 +D593AC0BA2A92D76758BC611F252B7B0C00E0274BE5FBD392EFA86EE49473788 +BB5C80A82FFAF17372F480A08459D6E042361ED54CECF42C88523EEBFCA805E1 +E59A1743234BB6775AFD46BF07C533588E38634FAD480E63002927F24680B547 +6C63D3A937F4830D31E7689E6D422662651CFFCE6EA129C04F632D88FE43EC27 +CBB4BF4D4232D3DDD19599026EBCBBF47DA6C805E38AA6C11F1E1857A5E8F1BD +4CD21F360419A0F3E555DE7EF68DE7E081573FE845402365C846F1F6B58477D3 +1259A60869E4B93EDB66C10D6B0E46D55D0842CC47DA05D21C8FEC6CB299409D +7A1BB8B99EEDEB3C4F10A2699458F19C320F3FAE9CC6350CA383DDE889047279 +0FA91175252A42834BF9BF5D19AB0032B8383AB056BBDA41480F476835457F53 +D1083B641023078AFE58B2CA0FAE3832ABF70567D5E5A0EFC39C3FFEC8A3B2CB +3624002DA2706BE3AD3DB339BD43BDDD9BF9D336F25E572289F105F319A4FEF4 +60E799202F759DA96C6489A228EEB3E975BA1EDFE6BB1A13612BE4A5B690C615 +97445B00FCC75097620CA90F06CA1C58AE637D12186D892295FD5FA126CE1D76 +011AAC13442F1DAE04AEC3E7A5AA6DD27F26ABC69EDCF606C10D34B0F32CB8AE +2B0D21CD02DD3456FA3BD023E4E92233AD9F24146B7EB0C2A68C49FF71A01FC2 +2CEA9C5FA57F09147C6DCD8D3A4A33C1A70000B334527716C12052092B10E905 +9F22B1E3048E68EF2525762163421C33A1CE61D0923C75E738EA9A37DD3271C9 +AF4D55786F5BEAD707EC8AA26DD53D88476BECA54403293E8CDB02A083294545 +D4BD7DCBC7A73C480D4F3A903AC85AE133384CCCFDB357FE6B6B341FE71E4A75 +D283D1511423A2596D7543A293B4A6C26FE21040F0A3E8BBFEACD0152EC3F190 +ECD74D3CEFFE9C3E86402D8B5923CA46C8046AA3C6DA39983B645808F97F4332 +D66EC475C8B93982A7EDA2BDD0792B332A9EF932DCC11191E399900EBC05C3E3 +8AEB4B4CB9539D6D209EC0BD5C49AD675409BFF8EB2DAA5E425D4E65E06A2458 +F0C4149361EBBD54708F4B4EFCEA571DF325AF6835652E7C493DCCD8C8C2F01D +382B800240082986A52D925D6F804BE8F048CBAB7C60DD389F7F3501121E1752 +AC0606E26537356594F6DB786ACC6152D194496812C20C5310970505EB0C3EE9 +73C5AB36FEA992F2ADF54BE9CF51B77D4B1E3E63B9A40E2D701F904C5E0259A3 +14C12EDB20B2F5D534ACC7C3AAB655F58C73659C9A177FBBC40963B6ACCEC0C0 +8BEE4D7EB45D68FD74C3E8AEB3D432CCBED396C3EA5F7EF4E40A8BE9353256A5 +25F88514221445F3373BA7FA3B3D360E533A17FA74D1F63EB847F313EF4FF04E +62E3057E60FDC0DCE1E8DDAB7B45678F68D90680E750DAAA3BB7DB64E938D89C +6246C43EEF4F68B65B0A8704B41882495F83742E12B2EE017B1A74DC8E1F4761 +576DD2027EC0F9C65F94E887C1E82D403879FB4DA7CE46B6B64B03541DDF3788 +6B417F4557B029C1A5CA503ED1379FA986DD2ADFE5D1CEB12F1B9FA0B4404132 +FDCBEDBA2693C41F999E5FED058098745312F520189CFCD89AA7EE42F2BD782A +FB595F059CED0AB8D0BB55F65EBF29D89E023070E8A35964F7D8A8D5511941EC +65C5BB39B27168C392FA68D211056BA38830B5289B399927BF79BE6733395940 +DA32538EC63BC1435F6500BBFE3641B96B52D46D4051E393D302672AA30AD51B +E3E6E133CE80E6E9A7D979C63F324C99B5A6FA7B8555F35891AD9F60942D4085 +68A4D12E945BAE908F2C71993851A616D4E69E27F30441466DA68E16C74BE058 +C8920C64CE03667344F9DD28EDB24C5062BA27BC75B924029E5D86636A0E347E +1B41D41B6556EE350C0BC921F11232DA04D5387176DC11C4CC64E408C164F8D2 +2EA268E517813474172B3787747D4C12DB61804D93F3ECB81A52329B87294C9C +DF2AF75BC8AB538565E066992E8F6C2BA4B89D5DDE0CBBC202396D31227C777D +60D7D5905ACF8E02AA26DA2E49BAF4464701D01081E206291FFAAA45C5087028 +AF59353DA8569D6000ABC1B744CCC4C0A8A391FE1FFC415EB4901F950D0B4E7A +89C6F634E5410DED1B428A87EC74BDE51BB5EB54AEF68C385BDD5ABB283D390C +02BE931669CB603C063191745F913756B28E81DF6B3760804300B01C4AE126BE +C558B85BE08C2787A930A944E9A6F7DFC85E7C243E4BE99B57E2B120190708A7 +60138412969D73387995B15583B8C2B3BF6E14DBE22599859EF551E741B04DFE +36E53F1D04E091C840C1A9D43835A12F4244D4D694D46B6D3376E824FD3C50F0 +D889F2D544096385C982B5004268D199D46E56051B2C46BBE23F0D1A3DDDEA28 +1E1B0A24C80A82C2FAA2732A5B9CE81B6D22EB77ED0EE9E3E1F89E2C07167A86 +839255DEF07653976250EE4839BF800EF371ADB3B19F92C34193399E6C2B005F +5CACCAC594DE4B92EFE30C6E891C622BE799804F691EB54BD12E95F8CB57C618 +8FDEA75A9FB8B65F3AEE065B9B4C545AE70F9A1925A0D7BA9187E559E85C317B +F1FB71EAC15E75E1E93AE8D29A56F4DB65684D6CD4AE9BAA74E1C57914BAE369 +17C403097FC47954DEB81B049B99B80B9B2CB80B709FBAC869077B9E5279888D +987639D5CBC79C8102FB496E5387450808238930AEDC3F2A13558E56C9587723 +4F9FD604CFB9831A34A560E2F24187FD519A3F2DFA87541E4DBF75642A4044BD +B62A47799D79B6A6341B2741018FE8640CB8129AB492355B0CFA3B4C7D0B8794 +E0BC808057F439C71057A5E15C1008793A9733A0007D7C95C408443F851CB1AF +B2D2DE86AE8BDD6234002311C81AA07E10B58AB87784DC665E498DBD1F19C7F1 +7B3278AB45C358DD71821ED3428296EB77771E230F82933E71A99662199DFA5B +2A7988C4060180B916EE8EA9F4896C0975AB0B33928BABAC1D7B08C4C80984F1 +3E1EF19F0B8B61ED8AE5B5325EDB72234C4966B0953C463CA79935C22EE21855 +62C316E3C26BD4CB68482CBFEB2BB05C353F1671EEDE4D30162472879F82BC96 +F9C32CAF2AB2ADE3E14D704A1871E193BFE97F3CF8BF9C5E1806446FA2207B68 +A1ED6B9EC3C914689F2AEF2436792D25A7829C2E7D53ED15ACECAF1E79B589F5 +90D80E0A25DB1F40F6C1302B33DFB91A933B888EBA3F58D267884F0A4A0C675E +5CB0FCE0AD0F58B692344E2A3A20D657035046173A346C1ECA438BF92F75A047 +89AAAFD72B7FCA447146245D10B1508DBAC840FA1D52DC174DF2E64D6792E4B5 +874DD42DA10CF5C2F83EDD54DF2045F1E40F50F529CB7F9375BA7F5A57D0A5FD +D958183A252FD7AB88F9E2C099F587E716C6ADAC29A90619CFEC1E9E6E63046B +F688F7DD7843A1216917A0146C248FC12126E8DD38E27D05E8014C7D5614C661 +F102BB47A24CC223EB05E7F5A7F33C554EE4B5E6D16087884FA939D3E56A0B7D +1E3C9E7F6C3CE95369FA6796F24B5A11CF30FC93160366F5C2EF4FE1D6D1EE9C +E21AF6B09F1FE1D076353801D4799A38DEA9D323E8091F591884D471336F0BAA +8B353ECD3B7E2FC36F5F4C49B6ECA8C08078F857F919BBC14A2B51B239807698 +37764DC6C7BFE510F180C63CD0E1A9B001DE2C50CD99D934B71D9CD633F40341 +4C0E56063100447522DC53346428F562E9F6A2B4CE6644EFF13BC5A1B0C1E75E +659F64B4C5D31E51AA2DEA57882BA22D149145FD316F928DB46E680A269CABDD +196FB35A49DDE6F4CEB9D61654CADB3B9314EC1C0DCF0DF00DCA92A944BB40AC +31F94EA1FEC6993DC4E8203E6C850980DAC682B04D2161AE3F9E22F34A874A5C +3E24B6B0C44CEDC23380752B6EF7601670B58C4C9B25728709C322DD98DFA48B +C965B6A283D7ADABEE1789A8BD54E14E6B2D6FBDBA6E19A7DAF45646E036FAC6 +B761AC1BF621780B92CD97E068E50308D5BD6CA17F8BA70AE30B9C5F07C2E8CD +9D4DCEB6844CE6F2241B1D19BD6A1FC5F28848DB10FEFA1F55BED0283AD14588 +7051A33C3854718059920BA88259032FBF481F0F0A2D1749A867BAE63B0F6E92 +8A4CE00F73742D6D07DC31932D8526B78A806B1F242153AB3F358ED69BCB9A9B +EC008CB67844D943E1BD3512F47A81959D74397B05AA8F412A5DAE4F657B4738 +A8B77333A3FB07ED1BF72DC0BA5CA9BFA3E74AEE58754BBDB7D8A898C9B111E5 +194BCEA1DB2035C3B1F6E012D22785F9BA38FF027B3B622FC8F0F256787FF91D +FC4C9F64020219428302102566BB6A8D572450A2647521DBC714D7C886125239 +1001F1C8D9E928873665E89A043BFC9F4DBC8DEBC04E849B1D52B3A9A108FE6D +09DBF96DEB165F0521B90C4DCB60A8187288C400B85E6013ACA8227AE83A8DFD +351D6C8F863197A4D44798FA3A292FC2B21750B077E9B9670D25E023B2A6C14C +A6DECB08D3C3C61FCECEF890F02B6442D0D7C0D419DA2889E7FDC3AD977C5643 +3E61C6793A2729CD435B3D4CF67A92DDC450CA6F4328F028A962D0783EE0DAB2 +4E9D496FA28ACFB0693355360E997D3177640A354CD8DCB8263F18D621218201 +D1E7F6C31E8F08ABFDA261B7A3512C784931514773B16F92D04FC11B637B8BA9 +BAA804CF55C126CD35839A50A81B00ED35C3D32AA64BE73E2D4587025FF23A5D +ECD93B1298492A4FF326E74042EB1DC3E98B4F041F17F341F4277AE117D6E4AA +BD76023649042985D18C3C28C0FD330D6F0A74778787221B325C4D810D6D87FD +8EC7254D1AF3AF46C2BADE5D292225744945CE0248AD303DF4906E0402159D5D +BFC58DB629CDE8E81B6EA2E0D5B50E1C455E7AF6B3368627BB3FA73C2A72AB31 +627AD18658C8BFABF0D7B2E40A9E1490D03296AB1792E160FCCAF4FEF84B71DF +E284C03E87F17D3A440990652A9503B2C45D48D9C8DADD9776238E22BEA1C4A3 +AB05918672D6EC5426E06F688C42F4755635CB0F5C41694DD9B07C5945F6F7C1 +EBA7277B32C92E6754970F6821B217944E09E89A81F325D78AC5AB6E1F9A1FA3 +358FB78159C333EEF87541D46247902155B6DF41F1241C58197825D3E2F8C1E3 +9029904D5203F7120AACB8C012DEE6460257727E259831BF7CD658197343C8CC +9832FA2C62D730D0867DA1A688C38436D26837794BBF6AD78E3A8820867CF045 +C9182C904A87B9F542F4CD87E315C0ED1DC3A545D043C2F337312B0C70144BC1 +29581023FB0C7E114BF72C0D010B3CADFC79E87F303F0AC7FA0CAEAF0A927D5C +A9672235B9E3F4DD72112C1273C8AADEC3A8ACEEEE81927E3F314DAD0FA7F412 +D32ACF1287D1A500730D8BF20E290B2DBA7DA8A778BB9F206BD31E2989DDE5B5 +D5CD2DB85EF2834448364B7EA6DAF3BA0088D9D9260B6A44B0E4C2D3411E3F64 +A748ABC0A8E9BAAEF164732816DE572EA825D945F4E894D7D2E3CB36961EF8C2 +853D2905F11FA8AF17763C31B7216A8E6EEE28F8F3E8A7E9345D27B52EB6AFC9 +33462FD5A6DC850EED8C4F403626B1381AB6AF3D6E8BA6BC7682095B180043A5 +6DFC2F7D7304C905771279E71D05ED597285452E06928E3183F91589774DFFA0 +7344946AB4081EADDB102E205A17F49FEBC1702E33942F5260D87DDF65473622 +8218C9F68106399E2AF3EBCD07B6B58284CC3F4661CE7FBB21073D7A313CDCAF +A15A05658CB96154F2232CD57F183153BCF0DF1E96F1323D1C45F23D68536C23 +D2B141AF03A36182DCB872B6BE7EBD4423A5C048FEC8A6C6E92434A9E1B79921 +333A249BEC6ECA29FA4FCD627DAE3BA8F6E123D95297A9E2D1FCC426BF7E50CE +4842D85C3E8ABA8CA9241DF6AC71240BF1B73F0DCB13E1E9D2D1F9AA6A081476 +6CCAEB851EF19ADBE584A7A50109007AE42D3C3E29971D04A0F5FF1890ABD460 +C0F9C909685D097583ED09EFC536285F752B16A55E31E6B34402B6160DD97563 +1AD5F56A8F1F76A3EEE62A6108C2FA0CFDC25591D00F8896A8DCEED9864EEF32 +23FA25110F6E78C8F18A55A3EFCCE0922A3C733FB9D4C8E0F5952904DD5410B4 +5857953647FF97355F9CDB187FDEB54E8A6E4EC0ACF4F3C13251BA034F5DBD7D +C0F04E856E49FBE5BE24D220048B7D9AEA6689484EBB50AF1F7A1AC4AB251404 +8F62BD7993ED8AA929A029FA4A33CAB57BD9A54749A796DA9A9370E1355463D5 +4E158E05FB99E2094C3B273787D851D433AEE9AEF73FCA873329ABE21E5CC531 +81E7E9B76F347F43D36E16C10C709FF9E16695EAADE5566476B70906B2F93838 +CFEA62C80D0A5FBA21711D45DFFE3AE3F2CAE050648FB91C87EA39757D7D6885 +B7018BFC81564DE44580290F53FB601701342AA22C825C566961EEB9F886D550 +00079A5FDBEEC5B00293B784C5651C747D93149B22DB752958992E64AE87C919 +D97B0DD0851E105E8D4C9FD1792B94E7EE1566A482A55BEEE5F4782065667E99 +FC0B355020548E10A5D7786D6FE53589D9B711D0DBFDE94205667092766B8351 +0CDB4B715EB701B1BE4862B18FC4A26D3A8A680EEF001C0EF439972FAB7F79D7 +18AC641B6D1DD5A613868D67121C0B67012EB27B920AAB6FEC1B5D067B7DE813 +FF1F3CAD1C279036E0F2B02C91A32339E1AA011CBADBBEC510AC628D85273FC4 +956EFE7F85BFD2BC6D57E9673AA1402B0E145A2ADBF33C3567BC47B9BCE16A5F +A049899A532B554245FB468A6024E7F1D6BFFD3F0C63AACBF8AE866C0504DC23 +266A566F4EA034458C160DCA0D860995C246DCE9B8BC76B742AFC3A23E15853B +242CA55B38B3F1AC192CDA70C873363D4F6912A4B6A9D691A53BD33F9AEDB1A3 +0825DF6D9C57254666105DB69A8CD29522FA2F4016533BAE1B75031836AFD5FC +5ABA92E8588B152AAA2252EB8BCB5F5C5936E6072167405112A10DE09EE454BC +48DAF59774DFB93094631DB0F2C97480EEF0006C18766AE1EB1A16DC6C0B52D9 +9ECCF897B2DB4D0F690749F8068F82ED159207E06CAAC19EAF2FE95CD333DD6A +1DFD3F3C2EDF3C0734B14814BDAE8331BD430C963492FF6E7B0BB14D56613FD2 +C27A6FF7D390C13286DE72F5241AE846120CE1DDCC827D00678A3CF0E49CB7A8 +6B09DB2A8072898C89815C8B01240F8E7AE7E20589959FEEC6470089F8415C7D +1BE0D344166835AF7717016826D627AE4204D914A318AE84C6439E4A9E8F12C1 +9D98A1D5E85D00C536811CDCD56640D44C7EFA03E6FEAB29636210534E406252 +A99D75C077CF99D8AAD43644EA16DCC28C6F885A041E0B43981F09959A603ECB +19F9ADD4D4997A07B6317C731DD429A6F0D1D99CDCBC475FAA8BC888EC263433 +0BEE727E2E0B6FF98F982C1B128D097314AC7C696F84F19DAB10DB5160A59B26 +CA44DDCC9284B843425A302C5B21A829BD261FA33A44F339D51B2F95C949D37B +D75FAD32FFF3E76FFB7713FAA9F15FED09094E476382531DC9639FECFFB3940B +E7DAC4BCFA633EAD07643CB27D9CDE05AF6ED670D74760CECBF7160F46742AA8 +FF962C22E1EB0E492C75929625F6839E6190E81E477914979837A9F165B13B28 +C09125D9659BB596B0E8B165DB17965AEE56EEB46022390513F395C2987742F7 +F141E45BE948632B3272BFF43934C84950649B0AF418E42DBF71B4098FA8079A +5F26F81922D97866F8183783DE8289703D0886A704CA6C2FC9DEF3DD9B116F18 +23A11A448F7D8180E1BFB2369B2DA3E6A09AC65A3B7AE63EBF4E388855F85A7A +23E90FFC6965D9643E9FF8DEF8DF0DFD552126E19B92394D93A492B27E4D49E4 +36CCA1D51783E6A2A2ABC9657D5B8841A2F99E6E89F29C2B1ADD7C4D4340C3F8 +AC3877D3D11C28D6E1252E690B3F94704C9FD6B64BF03A46E1F399830162F5C6 +CA081A12E1592D9AAA6103A2C10BB2CA96A7BB2A141385C5D550EAC392EFF1C7 +FB1708AF908BBA2F807284B87764DB4BED8B26394BC24F07D731790A1775C909 +68B17ADB0F4A37B58F55E514E85BE8FFDE0D1FCB02EB75990A9BF953A88FD966 +801A2428593E86E240CFFD0F5A9481BF3E64AB2B3CF8D8A7C6DA10E5D4F96A05 +7E207E4C6F0CE1FE061BD6235AB57F568A664604D913F35AB9B9F693A4B93EB8 +19A583E1057E77BBB0FE596DA83AD659FCDF9F793417643DF22C12CF0152A76D +E8A1B9C890235D22B81AC5255BC024FF69A8CBD1565CF30778A80B56D31CB253 +0C3A1AFA5B912ABBE79D1E84B68407359F72486A6EB1D5095F8323609F0BFFED +303E9A448C3385521D9C6743DE00ED69C1FA67DDE59FAB55738EA5E48FE3165A +6A64B88D8B1F6E033C6209D2BD3FB040C0523A6D0C266758DB2B43B556A6E3D6 +2384F9ECC1BBF49F0A922FAB1E1934B279C7E8754E1C0ECCC831B3A7BDA34090 +31B9B02B8D514E21AF2EF6A66B248EF1F50CA646FA603F9591D4951C22472018 +B5D4C5822247FC61E4201B55CE9B76C0A79FA05A15B85736B7CB5C8421147314 +499706F303606B3A0F75012CEC4A1AB0F30802CF0B5769172FCCD3E057798E91 +CAB106C3B1A022E93DBB6721A3B1386C8878EB7C342D8ACD5C86A30DECEC22C5 +55C18C1DDFFB5B15D1A81CC9A9C67649B555D5BF07FD1BB5DCC7ACCBCB7E8066 +5635FF4F1DDF308FB2A2FDDACA60FD88387821B10753D7DF0AE56BAC14FAB05C +0A38D450C22F13F00EF31F73701F38BF229EDAFDE8C3F6D41DBD51616114FB8E +631C8D64DB1F5C0C359C1C46AD245ACF45734ED7D22A397333262D7268453D68 +B8AD396C05800C05819BC0794148DD20E6D8727CAA6F167F5888249C44BFD95D +A85B651D7C2732BD1FF349E7DFF7778E28C88516C04AB1C67CCD5CF9144961F5 +93A342144450258D359232F11FB19A4AF79A0C046E845B01FB7B5B5D62622D67 +DE1D52D712E1D1B4ADB8D5DD51309F2DABA84D38C1ADB4B31EFE80FB690605C2 +B63BDF89D1FDBECB2AE4FDFE47EE5C122744875C107954341113B31BA1AC4D07 +2166F69F1386BC784D82F69AD51AAB6C22FC8641F1AB8989307F7643782B3FB6 +FC72CE90B42A92156044413464F8634A5B4FBC48C347E8D2CD8A1A407C44ED27 +677CAB77EC2ECF29BD752544A69F46 +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l049016t.pfa b/client/shared/lib/fonts/l049016t.pfa new file mode 100755 index 00000000..e47d5bb9 --- /dev/null +++ b/client/shared/lib/fonts/l049016t.pfa @@ -0,0 +1,1582 @@ +%!PS-AdobeFont-1.0: LuxiSerif-Bold 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Serif Bold) readonly def +/FamilyName (Luxi Serif) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0.0 def +/isFixedPitch false def +/UnderlinePosition -36 def +/UnderlineThickness 72 def +end readonly def +/FontName /LuxiSerif-Bold def +/PaintType 0 def +/WMode 0 def +/FontBBox {-217 -211 994 1012} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078992 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D9E494BF284EBDC8877C4E +5D28D2A79EA7D5EC25EB01F73826320B565BFED33D55B5D2B4128ACF57097B2E +BA8BD7BC7EDE9E6C636AE6FF86DFEB5E9BCD723BED1C30F8B20C4086BCF5FC74 +44FD8939C7580185BA7BF311E1E56D7C53EE70ED83BC1615501895EED5042083 +A5A0D8CC28978C5DAF869CEC1F15FBEF2A58A11A3417D1527AB511AA9B6746E5 +5798FDBD24006F12521FEFF4284ACEDA2A6FE84D9DD417103B4B1FE7FC2BC351 +2564D903599E253F6F4BD11D7B3BFCD01EA9DA51FAADA5F18B9F5E5DF25FA0D2 +A1BD84D42BAD716CA9303DFECA5DF05B26EC60612FBE0E931112268B223FFC37 +FA3ABE4C7E429354DD82D7F24B6A342F53EACEF4188937778E2F037B002B29F4 +9A4BAA19E878E7B0A6F326E3DC7949DA57D84E1098506B0B4C1BBB57196B597E +310BF7408315F69854ACD0F8E8640A70F20D4EF409AC0F891554643BD8040BAA +6C11008AEE7BE22282A1328C271E30817386EACF45542EF2DC63856FDD867C3A +4408FFC606DD5937B74882832FE9D3C806AB1C6594AD2F95B763919345E37202 +5C3474453ED74E5344ABA7A92101A287E932E8900F7CAD3083D38FE1EF3ED4A7 +E6C2A0A8A19A2DCAA58F823D354994C9BAFF5FAF8BCE6A50B275F8958E9254DB +32D7BFB3A1F3739B650B9704B7AE03378D90E8432A1BEF6EF20F8F49EFD919A6 +C9C90F60822299B0B50C0EAE5243AB66D9573E257E99ED424D4F7B284B779EBA +1B47D49FFB539EF6D3CAA911911E7CDD9E7CCE13F60F2C698A7E4AA8AB3A2B2C +6F3C86B9EC9EB8A8B8687FCB279B9B2B4B5F838FE25EDE772B77407CAE3C5840 +1EC417A4D627AF14F5E8D5D45EBBF564279361B871A0A142962BDB83EB1673F3 +CF7A34044DAA42321ACB120827402D43CB17607D9C8CB2BC726B8D06AEF513E2 +72CAE380EC17A1A2B0F235FC70D479A606B3360E291426B0C651CED104A39B26 +C4B14949E12B160B048969242BDCB760C123FC89DC73D8A628448CF678C9F679 +99EFF5E798EE5E46F41D1B84A38631876EC8CEDCEDEDC21038F7707A1F4CD355 +81003CF5E163C1DF8E76B1C4BADFC4C887A084E94CA74AA5314BDB69CB0C5F79 +B80DBCF17D95CE7B1B0E3C68652158131D8B776C368203356AEBE5DA210EC561 +8B56C1D5BA9001CCFF14D7AF2CE1175AE66FEC8CFA4F1F2D2C2FCD5C00FC62C9 +98F5FF6209542EEB45BA0DD8ED9CD08DBD58FF8A70C7F1578AB22E25136E31E6 +DFC05DC28A66C6C852092E56590199B2394D5B99D466EDE33EEA357806A3D0D7 +06B658A6528AACEC3682044D37A42E960E1B92E7E064AB891AA0006AFDE4D8B4 +0E61B0480EE2879F3C8455785EEFE3E8C02D9A5EB4EAC0AE01C79C44F84195CC +4724AB8ACC2E93B1551E750DB22D707F1BF8FE2E9A751E542F347A7E54C91D69 +25E99CD65F7A348E6234D1933177E5EAD802D3907161E7A19A3AF41378FDC8CF +464A5A87EE4D83218A9CAD27B1F349E55379DA9640739A502427F52C6A16CA7C +FB8E3F19E256918FEB39D16B6C4734B058373BA35A222B58A6421F7FAE124E40 +B11A646757F60DB2ACBB0E8EAC910698C137FE9149DAA39EEB195ED3823F0308 +A8BA9E889E618458ADC62C8F372B4BE51B66FF0E9F9837494E1E04077959E166 +C3654872114BD6A703746FB31E330BE538EC7C440F0473D5983C86714E002205 +7469E7C388E390068A302F16F7CAAAACE00BCBEA71E1C58E3B59C411965F07FF +04C2FDAE9FE2D314E85C035F58440DC004366307A9173BA9342B0CDF58AD1980 +5C38795CD0967F83E13EBBABC37CDD0155A49FCCEB5233B0031BAEB6EDACA49F +E842B25DD5E791DE4908C94E372B2075F9615CEF9275316080AB9F5E678AE30E +CCCA7B2C9E71571B42A5315849B08DADAD9ED58120D77BC16019006704D436C2 +B36A8B3860A5B63B5864383034B6FF0252E29B409D01BFF9752D9A845493EF2D +2F1DA1B6DA9933D24729E8002E4507A15D90E0CBC40FB562E4C0CD70A95B5D7C +E70186CD14657AE2D308DB650768E9B135E24A82212A99EA217EDB93D1EC03CA +2FE7B4ADE5FE28A21225F39722E0C2144536DA5083965642FFF7438AABD30710 +94D3F4B1118179748A71133050E51C94D9928885FADDA8383EF01BA234BDDAB3 +273FAC0D86260001AD472BFD440009C19EBA1C212C581888FCCE590516767F4F +A17C7F5BE71A2262A34673DE3CA11EBFFC1A971EBE827C4A232E4C6CBF65DA34 +A1D231C875BDCD842BF21E1C00E28AD90C73571F040BF095E28B4F4AA5E3833D +D050545E8B5A04A2F67B7C0EE5B49ED30B189F0130D544912E0CBD25D09EAC0C +334B30759FF0ECD7FC05D11830F0ADDFC9F84028706324B903AA963FA4FEB4E5 +12756E76F8A55E130A14866983058A7FA9BF206924C0C7281E7EFDB384F9F1EA +EC120F349CED13B2F2FBDB930D1A66B1AD1C10B9E66E7AE2830B9BB5A51D0DD8 +0A5A0A0729571B9DB76123040AAC7E791137695FDAB0639FD2F994107145E1BD +A539BA84A3DCAFFCED2FA9A1642FD8123D65E24FEA77CBD299D22AB1DED3AB40 +F0DC657EAEC450B1170CECD360093EC0CC14E2F50E141B8F52A3F5B9D7CFCA92 +30D819A34BC303DB080E7919E573B46489BF79691880EEDD6B992CD63374DAD9 +2DDE4B0DA61C03CB953ACAEC3176B7C474A1A5A351B259098FB2425D2522018D +98C0CAF94E047EE130438CC2AEA2AC11AF18F652C53157DFD31F44261103DE0C +4D582D29B23BCC137849306504F3CFE49EAB54D05FC62754A3166AF5CA301F89 +A1016CD076761A415C900AA958F922C6881BE652F32ECD8DCA3059CC335D3D95 +AE5C4F0DD70CE9DE75407AEE7801B9839A56C3E372F126A22A779D949E4111A1 +7F2E1B2D884ECAC744D2E78C1D16A8D3D67A6E818BC347F6E6DFE71ED0A7F45D +F37653BEF6DFC90D98629BD09DDC53EE1E2227CD0553375AAB4A3F10ABFC38D9 +A55A4D376D18148CE67C7D0062AC884CBC6500E646C84DEAB420FBF64E4B4360 +B2F5EB123D42F0BACF232E9F3392FC1704EA390941491BD97D191F198976EA7A +8FE3D14141E1BDBA8010266CF791D0E700C1F1C1FE69709712EBFB2136026E84 +A246F78B6B713D7DDF9E01745AE071B8CB052B54D5545AB56091E3134306A532 +8729EC3FD25AC305D3D39571C2AA50D4FFAEDECF998BA46AE033AC1D5DC3967B +C846E475352E0468C0826A8E040332D9AF6975859E069F70F624E8A646A65DC6 +1852339A3857C96593FDF7F4787E5A7D691C89396F4B5D4DF91A092863709AA8 +F7D8BC7C7739EB060C3BEECA0631CF9F47BE4854248EF5E88B79FCCAD7C19BB0 +1B745E6DCA8034363F4C5CC4B305FF2EE1B2B9A234F394EBE15B82B5F317EA7C +39183B8D590DA62B3277FF00283C5F5DBFE10F29AE99581F6A9227009300BE2C +2B0E509BD87D96AE7C5B198C8FB02DF8E1E5A648EEA044A5AAE0293BBE43D2E9 +33D55B70F8BB33CACEB5DB36CB9A731B3804D859E020E2FF49BF121A7950B984 +7B0913BC2139A8F70FF6DD3C6DC638477E4092F1179D540CD31C349CFB0AE55A +B0E772894CF02BE0637692FD6574D4EB2A76E93070556665128B99C20296C550 +8BF29B1EFECAFF31925ECBFD147490E3898A98D374904CB7BE2E7C752734A359 +FA107535533B4A97691A242FBB82D66C006A19374AE8698647CE8FE951EE2B84 +0E5836F8A3CCFB6F95FC009F8B5D200C0ECFB0BD6692A8644BA7DA5CC2E80DA1 +10ADA3FF7F79A40AEFCA4B98CDC4EA9C29BC1E901CCE1FB466DF65233B889C24 +DFA2E161FB6366CFF3AECE89C404283546D7814B254798EE928D74FB9B72B709 +E965F4369ADAFE799B4510CFDEFC772ED5516D9EDD5F1AF0410F5D82CA9DF5F9 +5134D9B9BA4984B5A8A3D8320AFC0DCD6305CDF582B08E28C28F0D137F73EAE0 +800469768BA91CA121A42D04A606D1722104CAED2731D73C3304F7C4371A1319 +F9ADFA53A1F7A7F8EE4D7B74E3473EE3C11AB66BB43756CE0D57AB36B5278E43 +B860B5A9C51AF0BE85CFEA6C3D114AC0AD68919A9027DA7C80D5C3456FEF5824 +1447D68ACC05CF272C0D0E62548DC9544908B9F50F5804B83C229F5E9B65C3C3 +CBE220648DC64EFC53C40473A421301F19E768D3BAFEA7FEE49FD3B4EC279861 +D9D751F4D49A64C463EF174D0F7672042E22BD2F55AAF7F531809A541D5146CB +FA4D776AD1AB10289B6EE3E01C19B8A8F7A282AD668D5F8B76C45A68D51BF56C +56DDA612D9E4FDA940D2C4B75593834F882AD142E6E39FFC70744CD9F3B7B19A +1FE25627DCC832F20296F2B4608AAC873F5F7D859D5BCC5C0B83DC569264102E +50BE5724F8F64CB35C8FACB12F460A311D57F4E52B7A08A5930BD56951C0C88D +6FFF6A6A18553FA7A2731F001C28093813676C4ECF8FCCAD89D94EFE35996AB1 +776298BF7E1EC9AB0FC95D6475A635B89F7E0EF16EBC188B1FBE3D105942CB47 +0A4BFB9FA132E1AC19D544423081ABFA1AAAFD91165B378D3CDD2734430EAA36 +B070A780F90863631E2C7CA2079B1EEE7666B975FB9BC62C37DB28EBBFF3FC57 +5356BBAC08A908976DDFCFC1664927E69DD7713A47B1A4150EA0762E9D30455B +F840841688DCD60847AECA495F411656D669AD3168F261BF9C31821EE3E8685F +761276952DCA7E4F21C16D9EF197AE2FCE0D1E85263C738E1CD88D4147ECB87F +7C232716CF20C51575BBB0C771FFFCE3C08CE867F426FC4D1DFEFBFA1618ACB8 +ED40168DCA837A254EDA92887905BAC603606E427256D2922D6FD43AC3A18781 +63EAF11A9102411AA6CEB7119688C106E71364A973EB54F1869B419AA6770383 +9D2F9E5C0DFCD9334CAC426FBA2AFD070A0374D65FF2C203516D9E052462993E +DD2C77E9F84B8299B2399045A09E37744EDD3F3DC1599A2B8901C84DD5640936 +8938E43B662ACBEF2279B10F44600CA2C61647B67C8909097119232BB82262D8 +8C55D939A457E84CC03F2DD9215C78CA82EF556DEFE179DDC0D248A933E9F906 +70850D991D72913C554BA1E71E71CB773020D452247B7B482370C8B190A105F2 +6074F9E154E9BB43CDCFF610B2634061614BE281B1809E7FE0B60D308507465E +13F424FA991810117D147A9D68D76170C75502E60E95D19B30081969BDE3747A +1CD185820B4080697411DE70ABBA838BC6AFF19E11AE35B5284B2AC7A96CEE55 +1D9415C7FB88CDDA4958F9C9892C1119B69B5E2B47B2896F31DE83F6476510AA +CCB73E9E3ED534D7269C8FF23B4AD964AC6A920C20F0CA0C469EA85F6D675436 +CF22A3B92B7A4BF502AD1A94D0A575A82E90ED3CDE6E422B73B6B76C23B1CAD7 +7E246CD8C3FD6A40CFE5E955613118FC584DF75CC434F8DFD05181056CCF0CFD +53BDD45E4F8A9424C3092C42FFF19D59AE1C003D3FD837882D6B0B2A00489F23 +518B48040D40CBF9CE77733823CA610735CEE4FA8C907575F0F0CFCBBA4D2E50 +04ADA5DEFC707A82324D7F288302C99D2ED5009D20FB875AA0F861479497643A +0E041E76CB10B898E1EC007BF8F70444474A75D3C005ECB947B8F8DE8356771B +EF4052F1D5CB3B19853804BCA33E0EB27B418E75AC398E79B1A621F85E4F5C26 +1603C789437477357A69A585BDEF24F8F0C9246FBB04F40AB6498FF72BABC3F9 +2C5D9476A87DB82859C374969A1016D0068FEC4AD30EAF10E871DAB9564EB600 +8EA14C41EBA75DC1D4B4EE36AD57CBCEA9E862542627551B530AD763BE607808 +5441ACFAA3AEA5C6DE659B15F522C10F7719A4F868473883B8D1BC1E40F7E525 +3C1196E9850B6D58F7673D6403BEB6FEEDE3105BC4F7CECB15A3BAC37E77D83A +D802F77B9A4B4014C1FEFAB1DED101A0FE0ABD220965367F99DD6E4C34C6F47F +040B8A1924E7889DC4A131408D8BD1AC15B3DD07315C4A30BD30BCB9C03D6C90 +ED4295840906E3AD448FF83F74257F0549BAA5F0D96FEBF943F07941121908E5 +AD6A27A33BC555B602F72F067273270498410D2089C3D1EE95D2C423223CA83D +EDDB1552B6E121D9FD1D0F5BBC1E9E8269C0CD6515B1428D61704FE230AB513C +AFC088CF436E7121630478E115DE2F5157D244B6E081FD74E5539385F6FD056C +5824847358D38BEF8896B93424F40ED6F485CDA0D9AFD896F921750E331ED55C +B58A93CBF1F74F1B11DFE0E35EAA56580E949130C6D670271921C65BF946FA75 +1B9472F92BDFDA5D71DDC5C3D03260B67E2D94773961664EB4FD4D23D49D368D +F2D8ADB7F2D6D41A019E20654EF4B78D35F26A159E48093EDDA1FDABAC484D23 +88EFF39E0A4C2A64953D53B6039BBA748751F4B6C077C9B66AEE9127E646723D +26F7E288365818F30A38071AA011E67F0E9AB64F4A943BEFF67BBDEAB4915B31 +FB6326BA1EC27EC9F525CD183D97015750C17D2944F793407DB6ABBB72AC2F85 +98C449326CEC03227FC767470A3F102A12C2A8122396D00025D84A3778A50869 +FBA49AB1AA1506839DDD675A8AE2DE1E44E83D300CCC1561210A23D1A97CD590 +FC257FB5367BEF1BD15AB855D07CE21771EC8B815094721A1CF7306AFB4EA421 +DED331B92C7481C683785A92B9E213B04A2E07F420ED9B9C025DC23D4FA9DBF0 +B11D6948AC62ED02298B8F1C6B519364B6140AB89B4B53CF1D05FB954FE7C185 +4C63616799FCF3492ECFE06D0D1E00712756862C3F0C1BF21FF08564BE0A3AAF +9364F4E7DAE16D828E7E5A2780BF6A9EF1CFCF680B4A96CBC4EC5DFE7E64E140 +31968BC00CCE67789EF5BB4B1E7A57D5FB53819CCDEBF38A555EC145FE2F607D +C199E3E514EE3012CDEFEE1FD70176F39B5071EFB08DBF3FDC2DB6E89E2CB41E +5F6B9528C7EDCBC41B3C4860CA7EB9C469BE1D5D1A9E590F6E721A956CC53870 +9EDE2D930ED28AFF92DC834913C4284847CA619D27B68CCDDA91E7BEB15F44E6 +DF8B38AFA1C63C6F484F0001247F6C60043DA83C802E0116A1EFF49EB943EAFA +01412A0D518E2E860F61B649D2AC312AC6D84BD5D7DE93A13DAF1C4336105813 +869D47538CD56009E8BCE20243001E87020BB2DA91D83EBC9E9C98171F1BC02D +56CF45AC7DD7358ACBF26590A7894CA6F99AD01351A384540B9615C233ACB22E +519CDEAF5A0A975B8B6E7C711DD98603F684259B9210E8642D955A4F4D977291 +4C9CA4F59C76E598F7E48DCB42A331BDC8D4427A13468B735FF5D2F58296FF65 +180B22485EF5DB6838A5C049B1371571D7257701929CECD5E1A315AEF62E2E98 +2AAA70C380E40C3CDDCA85A71558E3AD0AA1064F840FF75334059B84A026AAC9 +DEDB589213D45C520F8BF067BFF0170BE3120A8F6E3BC29E4D1114DEBCC4626A +96926AA20AC4396734C91808EC5DC632CFD69ED1D517D9ABC261E00815E1F3CF +A4ECC31B5B0348F96BD4AF2EAAA634EC24FD310F86E5C760A122ED44D2962EDF +06104A5DF36138284743DDDABC2EE689499333EB31347F488311A93DF9AC358A +BA157B8898903AFD6CE2FBCC2A558360D174E2A68015A676EF8A3F0A26021B55 +AA27B65B2755F48A46920C0BAFAAE72E051085538F6C60D0A77295754C755BCE +D30F94627DF2AD3311767D183A22D64480ED1E06BE21162BE345CED43DA52047 +3975C8647A025E2411F15A78368A2689E100D692F23E0FC660D321D55ED4AF88 +01532431864B03835099474C36F1C39C71173A04965719A7ED95995AD5AB40F6 +E8A33CC915D25C2E9EAB91107E89DF746FBC96DFD6FB7A9F020B0E3AC7C81150 +C21D9E5D9EFEEAB4BDBEBBDD705BFC0F3F52A77044831A6A0397DDBE135208BF +1E86FE2830A8311768634E62B589921D1B5B1347ADB167FF9B410FE902ABE465 +2E0C320C3B5F7CDE7859749978D7C2C80E5FE38901EB75FC166287F5BBFA6848 +C839C5FF11FB245ACC7B6C8A74720BAA44625D84C721AFFFA310E52EFA782EC6 +96014134479A15A5C6DC7D11D8256DEA0CC645D9F0B0524D7885A8A59A2638AE +9DB5273E3F3302D1C94C96CFC9CA768F3A1F8E41543A272FBB3D40D65D82EDD2 +EA11E127CF93E345E87E41401E2699FF0BE4E92814DD959EBF4FB412D768361A +7CA5399AA68C6153C77FC080273FF4A987EB649C9F5C4FC18BF106E13BEBAE7B +8DD477865BA85C53A797BEF5F177C053ADAA1EA2804CF04692817BDD0DAC9936 +C63088AA328EFB1B4CAC4079C2EFA244605E362EF8058FBBCE41C2774AF399F6 +E9949214D2EF9B899B5CC5F628BAD3FF2054AFDBCEF21A29783732F56C52D19B +12C2301D5C525099662DA96E0E07CECDA9A2137655A3BE6F6F828C85408913DD +8F31D8521A84FF78CF44DE8619B8E922CC7313090F45860C5847A50792518480 +6CD5C1B6471F14D10372AD4C7CE4FF0E6A9B4D2F627A74B52660794691F1789C +BAFA5D38F92E492EDD7A0DB2D7E860250C0812522FC5B912CF0A39620FCFD304 +D67F4F79FBD079FC05E403651A30489B717FD71C42DD2CFE0B970460F7D12C2A +04492DF55C523C5E9C62318FDD451FA5CD0B7325172B5A07287DC2653BC5EE83 +0B78FF312012FB0AE605575EDB52F2A1F16509C12EFBCFBC070A4F9A90E58F27 +30D5CEBDD6DA1D2D740E0EAB4AB226F245C743D2808C3D843722050ABB626744 +652B3D3CCCCB276343C1BAD5C4D307753FE781FA7F47B3D9FAD9088586FECEFC +E0977B68BBEF19034F53FB1BB7868EFCE3F3FBF89A26FBCB3F8FBF55C12017A6 +4743BD2279542A3B824ED697B866609546A4C27D97DB532BDE215CF8AC0C5E97 +059A761A197606B6285D936096EBD2AD7DE53C8CE2B0D0B4F7E50D5E11FCDD0A +2BF4736B7B9848FD1D4ABBD8A6F3903F1EFE48F0034F9C888923EC768D4DC7B5 +EBE32CE269396D9C198BAEC1076F842C503E546705FD1678E7C6B8C3F5F431BA +1C63CC1198893BA77CC79E5829E39B541962F6B110E9CF545B064E46F3539A1A +CD080E98DE474EBAD440ECA7E820C145955BA0B6CC80E7C4109185A3877DAB6D +4886FBA0D66D6C3F619ED6A81B346F5A196D1CCB4D796E02C35E5301E9C34A58 +3BAA4CC1BFCD6B0906FF15F200FA5859E6CA7F2A21872A51B7E75FFBD92C3048 +9297C015A3BEFFC5B5D13A988AAC23AAA4F0DD4F86FB5E6FC8279C43A10D5C2F +624E8CDD2C03794CE1B2246F7BED4DD4564395FEA490A41E5345C6F86D847D0A +7AD58C606ADBD3BAE5E649998FAE5D0257FE2878CADFC7581C22B31CF420A0BA +A3A76624A582909E209E53B462BCA38014162605977B87FDB8ED67757CC363F1 +A50E5DC6A8441B9406D874A756D91B978415651D91E8BAFF5879235B830E8702 +700D5A797B9E1ED4E04123513DD23604951C26C892004DF6B8DCE876430ED7E0 +56BF36ADA204464C0789A18B2C8F9B212BBD5E8C9E2925D40AFA394F8677336A +C406534E239292FED55B20E5A8F986EA761D33B46BEA1A37DB3E76FEC6A5EB04 +BD38F5B8DEDB095993F81BF12936932E610D72CDA00A2D3CC2522793B7887B23 +0FAA526C9D42B6C087A936EB98B776EBC2BE5E2A3301AE9A91044DD21403B2F2 +976BE40E7374CB47148F8CAF85C16D7DE4CF8FFF13470B2E6925099C3C97219F +5F967068A9E82488FD591A964FC3169C38AFD8AA352CFCF35D3E0D6045484475 +4EF4EEE6AA387768FE9767CCD9F81818BBC7046AE0C2B7B42BEA5FF70C65CD66 +2ABB14F1E1FDE651C260129E2235FF02A7F27F1C948CC500657A536FACA3BA8D +8C3FB591601310A2315920555BE054BCBF4668DD8032C562EE12D2C7ACB9C50A +11CC8E3B3EDCCA00A5067ED11C24E5F0037FB82955F242BDBE1524583D2B676E +12BBD3C0FBE80DB47A23D4EECDD1F6545860A415AC6BD2E852A39DDB12EFC723 +D0EA87E1A454B661249959DF54DA9DA50970BFBE0113821F1CE71670827B443E +6544081B2BE1260270A23E9417E4B0155A1302BD9845A5D62FE9EDF7D1172353 +85BDC4F2DB55CF4FCCA18ADE873B53FA4FE0B58EFC867599891A165631064771 +5CA76573ED070A85B135EFC0B619213E0518F0D4A95490C32535F66695C84124 +A1413AD30D918BE68A3335E65C2BEBEBE4E29DA17A0FED672F3B714F809C157F +006AA925F96003CBE7DB7C7FD7BDC5A890B9EFE60E9915EE7AC3B3FB9EDB2CEB +581E71527907A1E43FA1A06A12CABE01979FF0E28EFC4965BD7ED592142D9F82 +47BB2417B528590A116C791E19A006F274035B74C8401A35952844F22DAC9D07 +EB2F28E3C9BC5B8E1373F1538F67686055D1273C565F536E9F35225A67D53E86 +510F371B7E6BEB04027216BC50AC67B2C0E9F528CD55613195C351098FF6F9A8 +D713269EE95CDA3CFC786F8F28DC3BFA23C6E3253E4E5CFDACF097B862636CD3 +B7C78FF990ED9B7BC27AA51DDCCF408F0EBECC40E555250C8077DDA1646D8BA5 +00697705ADBC54DB525A131A1AE59FE8E7C3FA81A913FA5C6BEAF2FC393412D2 +685F1AFB5C1B6208AB5E4900E29036832E8942550F206D721A759E994814974A +11EA5E5A027C3870A06622FED8632C3D125ABE15C71146A7FA4179DCEA8BA117 +E6CE9AB0DA1373933319CD27BDD4C69CE672491B1F15BC249B7126F141FD1AA5 +30121588773D42E0070723427DF6AFE7FAE3DC6B940EE28A8195489F1DEC2811 +A4773B6594A8BBE4F439EF76D5D4025BA7FE822A72C5D7DAEF0F1C88342EB016 +26203272584C62E26D16F6E1A5B37A65C51553F93ED4EB12E95D6F39DA5204EE +62B52BBCE5F29A47D942F247A10446672FF26C6F710244A237C89A7BF6D86F7E +1889103269B8932632BC0F0F89FE477C24133D8F06C1C74325FFBFE82B59923B +06045FFF59B25B50897E71B8D94395A939C9319190F0D891C24BA6186900F8C7 +9824B378C8570583C5303AFECF6D32A4AA96700D915D0DA70DFF8765D44740B8 +518FE4A6A8049E3CAC9589A3C0752F4E0DA6AAB319E1C21D0A760867602A9CF4 +CB372F3F4B7B28712FDEDABA55A6B24B533FB96701728762B2F7FE2DD070CC3E +7FAA0F6214500B495F5D986D13C012310BE12BF864B7928BE4FDD9DB68EE7C9E +21D645094A676809C455F8AEB85E5B5B33F9AA13ECF24E5258D49D2B233E22C6 +F9926353011DA6B75D17AEB6BA6EC8E4A405181F04A656E0CAA13BD463BDA234 +5F4692AE9FFE0C4240B7F260AD199668D27C07ED34E69BA9C3E09AF0F18E5731 +71C576C4431B9DB7E83D645E7FD6D3DDB5AAEE00A9A3C806FBFFE1D8ED8D8A47 +4F69A5BD9747B6BFA7EA057DF540203AA6030B5932896D1E586A8AE9730B32A2 +8F6B27400E4F0773262505F37CAD309D48B02FDBBDE883E0DA5CEE4AC6B28AE1 +7C7663C7B4AF5EACD32EFC8A8910A3BD514B8E19820CB2741BED0C03DF65DDF7 +ADA651E232059D9AD05257A8B271BA34007E8E2D6BE190CCA9992011EC455E7F +1443C4DC5BDF1098C399877B64E02DF566B5CAF6B8BE73CEC6A2651305E32C91 +2670B1D570CB8F2CAC29D30588D7C6D3D810F660F7BF30C18609D72D60FF745D +D879957E4542F5877A05D0A281BE84656D3D9879FFCE5F667854CF00DC01B8B2 +38D2473544E81D8ADFE49FFC6DBA711AF38BE51897A42FAD78DAC2D1D08A3780 +50C9B002A9EA58E0DF5F4FCE96F3405C9BA1F32C91405CD058E9EB51C43457B5 +62755B6FA91CD94C22297FEB48DC03CB78C0EFA09C74D2E7A8FB253ED4F6769A +E54731333C9EDF078829A58AEB8C1D28D1D7C852EC574B0E2ADB99F2A0CDE7B8 +4FCFEC125944835A8E3F1FB0C15FB669E670D2D8DBE24886AED75A9190BC52DB +BBEDC221D68B88FF825E69DD69E61FC2E37459DEBABF7BCEBC179D4082DB17F6 +12408DA590D1F768F630951D7C72A74E5172F71C97624F2F4DFB37E4913BC382 +990F61400A362D5AC3A29D64F1F1BB24E572832C8A1A8983903D086ED747442B +EC2DF2DDE41AD05045AC4BFA77F83342BC1CE856BA2359A66612962A5A2E0635 +806D70FF2F6FA279F639E5C38B0360C33A170362F5EA48E096CFD7BCBC43B49B +CD4801CCD9E9C421F24B6CB3F793D4ECDF9B1713E7C141934D53EB8FF655273D +810ABB04AEAB956AC369DCC11C17D10F08BA7F1BC47A45B3889068A169A22761 +52149F3BBBE409F8C28FB89460B55FCC0A357A14FBC50A396512CA588A4B2324 +E557EC51138CEA0ECC37980259DCD9E01FAC43FB9D7AD36B1D17656A932FE69B +3D224B98F0E562368682150C9D9D4BA2907E4439BDB7A6B8F0D18F8CA351B446 +96CBAE1B9EC0C1BADD2EE20443E01570A39BE38FFF7A2329CEEE5EDF6B2DAA05 +C51F9F75B21E7ADAF05591569AE0DC92F469675588F12A28E84D178699FB76AC +D75E66C0F26F4CFEC9BD0597DF10342033D0A2CDE6DD2576A651DD1855DC61DE +FDD8BF33FE487AB7CB0FBBD811F413BBE9E23F2C832A654B37BA922AB7F6DD9F +689AEFB8B49DE285E7CCA8EA94A0C45B5431732E81F5DD0FE804CCA7C82D5234 +672B3670A16EB11024C31FF89A5B4C03B28B2B582315307C8CE8686557A644F2 +65C8C2A9CF1C9A2862BAFAEE0E94AABD856A183394331992EC764A3B82EE4306 +2B40848D8D95D0CF561911797C9A2C6D9E334D3F6E595D59F54017218A8E6376 +39235EC929904AFA8EA42EFE54D294768DE0B68B4C1907F61662FA6710682673 +AC64FE11B84BFB0BAC6D1F5F90FC91AA5954BE48868AEEC05E19117B682186D9 +A0CFE621311708B56EC668EB0BCCD9E9837CD7E957D72AF5B562E51378E8A9A9 +34947A8BED94C55FC7A429E28DFF9BEDFB3F28E5D1A2536B84DBD1677320B132 +27F8A8DCBD4AA2B971F2F02817DD7753431BBB210216F822CBAED265C55B79BA +D7D5FE873E093D62250A27022D63D7C0823E9FC09209550DD4BA413E50FE2DAA +8D60AD9AB7E6FCE79E1B6CD6FA41F5C723DBBEE00FFDC8F614DE64DF40B45BF2 +84D3B6F96A1375CFE96E446E6757F31F8FD2E34DD88106015037F4F5B5D381C5 +AFA0D5724AFC260CE676DE70C666B34520FE2E2515D2C5194049F89EFB0D1A4D +10D40A12986228BF3CADEE7E8C9564F9F2D61E094C44310FD5295C5AED950A23 +491431F3EE071FC38FA803DFC580A7F0FCCFF19F3D8CBE0D503057E95A2A7D00 +A490CDD1BDE01EC8370310A869793E4DB867496094D4B54B3B9AC440F304906F +AFF32EB87AAE8075149299798E681B83D47935D93FD3A26302E5EAB671BC2C7C +7E87A4C1789A772A9643C5737084462AF596F23DF9F36A8C00488FB78C6ECB64 +60A22C5D2DEBFA17E2A78968EFD029A29CC04B6E231B58ECE47CC6C93074F701 +65B19F77969B4DE3A7272E769CA00D5C481F5791E559F61A68CA64D4FF88D513 +642E82C48019C5BDDCBA0246448BCB765626462BA0CF6DE0E55F5C4090DAE3C5 +15076B25A8673D89A4DB9B5EC5B133EEE44BDB76AAED2A91FA68632997927EF4 +EB93C9581DA7663A24CCB982D1BCE9315F8F719E20C9E388907555FD27ADD8CA +81B8A4C5F4F7614F15F5A6D3A542E3F22215F0DACD6D78E22209AAC0036AF039 +12045C916E9858E2C07B20B13B4715DBD513DB1003D256811D019BF84EA41069 +53731364B773A23EC103ED81FEADFF565BADC9B698819BE95D6386980B13D678 +A33460A92BDCC24FB6EC68FB73A8ABB4D240DA5146F04B1529EA28B8C47B661D +3A27F5E03DFB5C7BEB8B1E6AC63E1CF7236198487663AC00BEB5F59EEFC366AA +C9FBE97F8EF03A80F37DB7F1D98D5994203FC3DAD6EDA29CE5079E09D504E360 +902FAD0E67257EADD77A989756B3F1B866BE530583CA81610AF81D516A78E37B +4AD1D27A2ECBF67AFFA6914F06CA73AFEC79921474F3BFA2D2C169A7666BD668 +821FEE767FB326ECA936FFF52FC87963027983B23751956C9780F1791595C91F +3A5B497D8107667B12CB2D31A64F16F51485CE00F376DC07CEFD4DCFB7A91C27 +CD8F3584B14CEEAEFB824C59FB4852C2F285159BD37CF3E3880F47658D3799CA +E8DCCD4C79144D1503EB5492670440976954FCF0487F54EB23A1CE0A139AE7E6 +3F34594B7F85379745113C0EE8D05E10A6E740A76CF900F5EF056DF772B07258 +A3206320647253786225D4CC14548B1750CD034CBE4FFFDE56CD84B07896D08E +2EBBB9006DEEFE45EAE3688F06806CABACCB255915C695608A6C99DB3AF5A6E2 +DEF0B77D903B0BDBA16C66541905C737FA79CFEC143CC89C4CA56857096E7A07 +B8A0E2E16C778C5C929066AA567449553D2824B68EFBF7D7184E56470080D7C7 +C847A46A9C6556560B86FC1F82B7231742325E718990E81FF7323084267F46E8 +9F4B6BDFBF811CA84296216FEBE788EF20101B48EED478454F1B238C03A1E0F3 +DA386922D1A038EFD0555799B29712FFA294AFF0312793F2349B1DD00E16240A +6AFBDAD7B8AFFD1AC1AC380F35CB7DBE92D517408EE81517C04D9A82E1A6DB84 +EE4A6EB49650B0F94A64500A771CC0788F0CF8EAC76EA80437DA23D05651F9B2 +65C5112FAF87B2AAF4A8E07DB8762229DD3C2D74C364ED6F41E853DB2B6DE3F3 +9AEF626535EF31913165796AFC6989371B04BAE091F9980448315E43B29AD252 +5676CF2B2DEFBB0702007DCF4F8E2BA032714676CA56CC18BB378D138075DE54 +316D7F4D9C73B08A83FBE43DB11606B0520EB9C929BC4BA925680FF37726F65C +2DE1D25B9500C2C2DA7592A5212290DEE61552175001675E3258903873E9F3F3 +C2D5F7F57B1ED253596425E95743F67145FE18B80AD5194096E10EAF1329BAFF +C5666BBEFE818C9F88ED0A728F5A791C297C97B4B398621E921419358666B69A +63D129C875A930087A889420CA64CCBF0152CFF788360BF88A42464C40D03B1A +1A342A89C26CCEB7014C0A5A1669331D918604AA43AC4A0FBEE0A39DB47028C5 +44074EF228719E1C3CB91FE9F053148F3FF3BAD16CB57DDE5E3E863D40632D10 +68E72FA28B258913E38816D9E0A25616A8DADECAF0DD52625FC5BABDA943017A +3B36959C495A114346E805A9793D2F30C5F7AEC8CD082DBE1386640593ED1E97 +63A98310C1EA703BE2AAB203095ECABD48D761E92D614233788E4FF98C154A95 +15B460EF33121AC9EF0BBAC00683346CB2586ED0D18A62CB0D6DCDA7B0500843 +B07D9C149678BE81FEF9AF9BB18D18B5CDD59188DA9FD6A79822A69CBB9F0A9F +731FA4955946D4363710FE1AF278EBC8792158D431B74327017814D69E5ACDE0 +2877824093AD46C7FE256D4615B6A2EC4997310AABAE4F3CBAB629F1522D5B2E +5B43E931917589434F5731D5418AE96EBB0C07573EB153A6E5442202BEDB507B +4D09872458F184159873E21F91F999DAEBD2E29BE8E82C6B796345B715693703 +CD412195D1F170A2B2C9045A4D3451752FC1945F82E92B07F37828F44EF2EA61 +77F614FABF81162CC1ECB0676E8C121CEE5B20F325993CBD2AEC8B7BB1D8B1FF +85D6D33B75BEF89146FFB0BD73DF334DD1A9396861EC67E447477A00A4276652 +F67B8FBB2AFCAFAB9C3A14B0F7BD3F0C54CBD763EBDEC129DCD7A7DD2D6760B0 +460EB2E5EB3414C87365BBD0500C5FD4773525A9455BE7954C616C3BC0D892A9 +AEBA406B14B5D5340785E7EE4C2DFEEED396DB448F20E58725E213DDD11DA1F7 +000EDE41596161C72151B05D902FE2E3203C3C6458F3B462E07FB0C40FB83FF8 +375942B9C7440A0EFCCA65322797DD2401EDB69D308DFC579403609DF855E29C +3E35687C40EEEF2D02A2239181836DD51D99A366D88C31AE289787211A3D5FB3 +0BF10D01299C451C4DD869B8BF132018BCC45077647F72889EF81A5BB63669E1 +66F5EE6FA504C44096F7AEE1031A39EB8CF7902D881F6AEB66CAECA514618719 +2F4F459BF2E7E6E2462318279F15B1B20005AD6137F3A4F2A810A7F08D3E0BCC +4710DB79054C4FBEBE5AE07CB156BECB6316065D24C92272E276EDAD21FDDD29 +E1F4500E0358D8933DEA0609C49DC211A7A592EF2CA1AC5108898F9532311CCA +37C83333689A12AD0B185747D23E12EB86B0753311DEB69F6F471E0F0C99AB14 +CD4FA8E882FD8D6A17FCE3B2301D85F0FC49ADA6A508FB36ABDDD7A8835CE644 +264A62708CE1742A26ABD8CC7DCD1FA60C856B96F84EDE061B534431E012AB5D +93FAC0808CA1629D45817ECEF15B78EE77BA22CFDF620AC795E4FD1965976657 +DC97A3C35B513C8A31723C902D38F27714D3CFE6AC6F107CBD8B2E99FE08AD85 +811F052B6424524B1C049EDD48BA6F8D98B7C71302ADF601C3E5BA4BEDA0C7C8 +C1BF6E4B8079B303D30D0434B7F2E47FDBB7C46906AF947E7B5DE1E6ECE052C2 +9935D2985B98DF860982B3D044D325306A769065576686DA5F2E552C6150F5C9 +25D0AE2009A796D322521BA3329467B6DA1F629CF9AD82F9F9BBB30AFC68CC30 +97440AE12F41C7E4192D740ACEFACDBEEE4EBDC3045AF2E1E188FD6E1DE499C1 +E1B3EE148659DBD3B4EA6215791813BFC674D4CC8C066771F82DFAF4C5328AF0 +6292773E07A15B213126F96A3634CE70FBFA7DF4067D540E0C951F919DE5E0BF +DC2E1B37EDD3B45AC9F009412A6A237E7695AEF028A8D9EF4905EE593FAB2BAD +EAFDC2DC8455D087E72E9AB830108A138EC1D55D38A040C1A81A1E1E8B95F381 +9B44E42D55EE9057010BD0F7E32AA87D636CB9130F4793DB86131B9B2E9068FE +E8CD989A94FC0FCC144CC99B52AFD4976D651C0F855068753303593FEAD53AA1 +2CAD243638618F68068005C923E681D214597570B8C418C5F1B606D33C0D0C54 +3FDA50E8CD52D8ACDBA45C88FA875BAB5E4690F866E154C525BF02DD103A7567 +70A307E5AB1EDB318E5E32B6B40A6995666657136B18F9D45E0BBACAEC4332B8 +606F8473AA0971E2B4654209B2353A94C5E698519567EA54377A533DBE6B0ED8 +FF2D5BC21D0EBD7E1FFA597B59826271C18D582692614A48A433A3ECFDE25400 +C4243D260370C6D23EA8EAEC41B3561AA399C67F1E558A192B13F258945C318C +8B5ACAFF5793CE0FDCF1AF2A05152489398AC405F24C24C4B377F5D44EA10C71 +2D9BFECBC713A9E8CC834E52A5A9D58E9964EDF7BC4F1C0040DECA723C0F5C4F +1287CDBA5314110299A1CCDFC00E55759606AF2C52B2C47BFD3FF62D892723B4 +110D26139780B49E35D77D3C5FCDC51A3B3E2C64AC161ADD295004B271A75823 +D79AAC2D931232623409DBC3224E61CB529DEDCFCD86EA583C4097FCA9DBF18E +19700118D65A186F94C261762E54AC0A6FC47F4877236EBF23B0E497F6138D75 +0E20474E2D11E68F7CCDEFD46C5D62E81E559496AA830960F6DD379BA16BA099 +D13AA5FF5DA079A7ECA28B701CB49297C5F2E75A1F851008A0CB290DD0EF6E27 +5A8E785398374156FCAD3D45E704C6DB247CD56BCF919E836DE2E52C9FC0A8CF +052BAE14101DAE8C43EB766806E26BD91F48FA455C9269721BE8492FC68D8AB3 +01D638D04856E5D203D28CCD8B702B90F32870D104787F8EB6D61648417840B0 +924C38AFC4B7CAED1F08E34E1A3D46A545E86A4A4542ABD6606672C07684CE1E +D5F2CC4049DAFA3304817E05C5945F70A251873D93DB4D5912CC4A3BA082A05E +1BEEE45050212C93EE272E8C33AAC196B201E6345FCEDBF5143940B5D9263C31 +B8DB7ACB464E0C3989A8AB68EB7DFF28AD666AD3BD003C2978DCBF5602107943 +E5060D5CE3E42F27B65F058839099C2CF9B7F045D1927C7168202D39C6DF70D5 +00CBC98EDFF8837D6CED471DFE0E7F84AD5BEEBB25F619D672D9EB812C3B0FAA +9547AD117E6E27D7979151B2512884799AE8B4503308345680D61CE8FA394EE3 +4679989798DEC5B494EAD4C0ABFA713281DA98522810589A2CE473C8C3E448E2 +57BD26EC6DE17D8A9E1847795597413B1D80675B79D0AF56E8D4031300081FDF +1406B9A2952EFC0F2D086443FAA4D96EE5AF3AA562F67F9AF495B0F9FB438043 +4F955599A04824F8BE5CBC825EABF544158D99FEDC664150D66CE9C85C08B720 +7B33BEFAC455833F57C43CF481DCEF552AD267BB90D0EB2662BF6CF1945822A4 +4EB709E8DE26B4858A75CEF9689EDF05F91BC2BFDF73CEE6B9090A001D97ECBC +7CE94ECD059F992B608A19FEFADCE3B5270A8641DE821FDD3EC1FC766F0975BB +8DC349EB7D3179749B16832C7615DD310F815B71717495308C3902CA46C044AE +78FDE58FADFB233DE8DD6CC412CA9091C02B44FAB96133F0F617584DC2D5C51D +CFE828040673A5114DDE42228F73B42E1E7C9296C51BB657773D8F15B0797AFE +E846B26599E20C73E1C9620FBF224446A7FF87ECFE64DDB0D45875B5CDEF1C8D +36D20EA6F90E09F2A3EB423611423370EED5DA83D5E845051C65755A24F7E11C +DEC48C78F1FBAB97F6306FF2982E3B61C3AF46F2CA65BC15EF35803370FB787A +0831506C9FCAEC8299005C68DD453D2107EACFDBFAD9F861BC46FBB3802901BE +1C6D99EE609C7D9712D9756749D7E8E1FAB8231A9897CB4D7C95A19B734D1631 +71532C43E1E247CDBD404F33B080A3202E23B6F7549C7E8A8F0B050E3DB2A89E +1E30428EB2D2476F5F275DDA324CBA55D3772B0C460D711FED6D6ADC43CE821F +683181028981AE66EC16BE2D7FCC2BA13BFF93F3F1BB1BA32DBCCBEDCD9F793C +30C078A839C27CDA29CB694C74A70C86008F4F2B2B8BACA49ACBBAD11B0DF198 +184A6F107BD42D6F129A7DDFF949288AA27C916694D62C9AEFA24BF172F43B68 +930F7E369000656155A593BD360E0DDF160C273A4B3F538955B11F25846146E9 +4CE0A3DB78E8BE770A7B83E0043B3BBBD60C0333AC55BFB8E1503D03A37803BD +841A19848AC9AAAF32AC249E880BBC04CD4396DA8F4CFEB6BE6E9D261A3FE54E +C3BC8A01257D032E916CB34C9BC20263DF0828B5F94FB9006B09A00AF195AD03 +8665CC1E7A772D9968D35B5721163394D221147232ED6682CF081607D82E933C +DEDABB994359350A95AFF6153F29CD96E4C3FA1FF186BAC26D6B41E275D2AACC +68FBD05ADA7BB1C68EF37508607C9A81151D88FB40E78890E76795009CD1410E +FAB3DEDE1A0F2E63B8835743AB5582F45EA40C86469A140B33BF721B936FD1C8 +56D1D571B04E8CF1D856DED27BF608FD3286E827984FABB52D7579BECD5CEC42 +A0880A44C230C6AA718EA897ACFD482E0B79C46E54F6338EA5C58BCA595D735B +4C1D3C851A2CF846E86D685E6667B8A975F38DC802269CF7B1B0626E5E435448 +406913DE4D10772741BD203252280BB13624C2C56E861FDD9F1E2F9522FFFE42 +AC2E18083D916B54CBA60179AE3ED01FF1792A17DEEF47731BDDAD86ACE50673 +1D8330252BB4D8D4CA0D617B0064FC1F13317F799C1A9F368A3E0AEA888E2BFF +07C78C6048718CA2D0D5D1A20686A7C44EE73F6D749A9F0A6B978A4A522D3E18 +C4BCD89CBB1151324182605BFDC24C6C450E79EB69E79A420B2E271CC1F903D2 +8C1BD054304250E41624F1FCFE70F0509EB8C6D0530E1D6BF45604FCA1FB7D44 +FCB548EE92CC85AE335A8DFB27647879D0BA25409E4066B4F708D3B0C1FEF15A +80892005B4CDF4DCCB2B62AFDB72B1E1B1A172C313D7CBF31BC56C897E8D266C +AC8D30CD36BDBC6FDB790FF6FE1658FBD3244B447404E98BE65368F48B349003 +3E50B4F6F048042CDA62AAE7C6722BF80D56F1EDB47B87028D85081289617129 +15B21BB051833AEAA4BD415D04208A562D73F149543DECCC768AB03B0EEB3CC9 +59C09134821939FD322DA9A66B4EBFF6C0D10C0A973DEEF572AD5C92A12AB745 +84B1624E7200D285783930F51ECBF19AD8E48E709893EE0F1AB7CDA6CC7C1864 +F16EC1D3FFB6B4FE4DB7C9FB1620C3C0861F900FDE317599B4F050D465A662F2 +DA6E93495CFF5DD8EDA52514F3F8E6AE745AB86CD729721E7A3CCF64B0F6360B +A4F8158F4B952FA4CD3DAC4F5F81C4C93710BA738F96DD57595D424F45CED71F +6F35820FDCD31533FBCDFB56F354935CA0899CD8581ED5EEE2F85C135F50B43F +3725DC1EDE43BDC851AEA1AAE8520CF9DD760A42C5D0B3754C7B5C44CDC502E4 +E74830EC45840E287ED7DA2E98260742740D9B904E975F3F8E80D7AB57085C76 +5EB2AC9DEAF38B2E1BB7D50CA137D582B954FDC797845B3CF623E1F243E9B65C +87077E67C43FB6258770D604E0DF9FD9710B6FD6AD8985A07820C47F85DEA767 +F55210F70BD45DE7E0F3D335BC978E738F274593DFE14D6489366974AE4B9286 +EEB9A4C1A712D6C2DFEFDFF7921BC6E31631390B8132B6E62D6EBABD4FE38AFD +DE7E0A7B6F783786976EA8402DED90B067E1D85CDBF13C991B4CA2A626A3C8EC +21B13B0902AD8389C71F14B810E40394EA7D41CCFD4D13FFAD46BF4EFCE250CF +B6CD0B203E3CB540390BA8DEEB217755C284C824DC9626F917D119934061656E +6836B119CC894064B51B9FF73B07C559C366CC952531FE858C3B77706BE21A40 +BF0AF668CC376F042E965BD12B020A06D44815327D9F24C8BFE5D4949EA85FFC +21FDA7C58126B3F5CFDAE27A926E2E45DE062650B615568736B10F7CD8EC20E5 +19773FD4B559D45A18B152315D45FBFB4B57A969F81F42FCCDC15AC1C6890F75 +A87877B75A14D38E37CEED9B5AC39D4CB8E0A5ED6BB09A94E32BD33AE9B894B2 +9757CB08A99818058EEE75EC2DBDDA97A2425754D9D31AB87A1D64700D28DE3E +3748BFC11DC5D134090B50864981DD72F2999191AA0111F9A23E62B37C67FB9F +704C3BA150E4227774487A3397141BFDF8F6DDB22AFF40F61E05BBEA998A2A7A +553071533382226D9ACD4748325C9A90663913F9BD84C40C83798985BFF131E7 +8B3F8DD7214DABC6F29D83E336C337F936CC5092B8064031C5C67AF2563C19A1 +99E220085C7675F59AB67800B82C287908180C25229B856AC5B8A63BD0F0342E +E72FEA35B9EE85DF933DD7FF42E7FEA8580ECFF435B8AE058DBDA697D1FDAB45 +50F396FAA4AD315A892691D39ECCE620EFBDAC6FDC6FD387F3F20038680DF50D +9C1B28E5CCAE7CA4F11797B03A39192197F1F89E080270EA3FA549ACC696102E +3D1B1E762A061D6C772E72EF6BF67293A80A290575990CD2A04A2277E23A29B6 +B0936111C343C67998A3D25E726444CC87E187C602074699801FC24ECBDBFD1B +E9DD025C51EB2B93387A27659569A2E0C4DA2A7C3BB16EF63FCE6BC8DE27D058 +A323AC3A394005F31D8900CDECE02D3DADB7C5514A6AB69AA7041D75927C0FA5 +A9D40AF9433D103DE31E080F65D1D3D2AAA482EE9432F3CA84903CC621E1DD58 +72CEC6ECF9C4C4B3F854777B65215D7909A15260D3A39CAE9DCFF36B6B341FE7 +1E4A75C5F8702378CD5926103A2192FED1F469C2794C0B6C0918F2A85F512C69 +4B2388B7F553BBC5606C4CD3A23C34F60C4BA40904CEA9D7A82DED088E2127B7 +5151C37145DFBE0FBAF3EDE7828EB3553DCC7CAC41B4B4FB522E3EF6153B9275 +F71917D930792C63680E93C025775367346E04C4B34FF74022A327AF9349B223 +DEBD0AA515BC86E247AA4D797EC20564D1CF0FFA853C60B0AFF544BBF6E82EF1 +6AEF5CE96D05F66D650B4722569C2E05DD039F91CAAE1473E811005434D8D95D +C6A2071D47EB515DDCC5D9AC58F36ACCF2BAE3D0907CA43FA58DB14AF6D5BA40 +020E8CFF4AF7C80851FC81EF583ABD9B9ECB4D7E8981EB6D4FF6272C7AF2940D +53C6B3FCF4953344C70616BBBE917A295B491CBCBA2CC73992BBB1C037ED48D6 +CF3B80F5E08EC3447D297A8214872A48FE10A4FAB74EC700B71F2F6EFED27FBE +243544882B39F3808092361C9F7050943AA4F6D569B67E3436C004987FEF870D +1CDD98CB5F2ABF72B6E78719A6A6D95E6C918D5BECAA0C23FC99B526C7C8D0C5 +B9E17494C0995785EFAF555907AF23ECB761F47AE1B27ED80E988640D8854294 +5296708C4E9D46B90231DDBA9A15D5F8F2CD7D0E1DAEBB91CD3A6AB60D16024E +A61A84032B1259BB68A3E8CDB78B5C67ABA884FC908F0E0D0B46F297402737F4 +B8B40A13C9E2B987BFA3C1AFDEE7B962BBF7118E8063F83CFD19107A5B28E0E5 +FB38E0E26BE4E46A68BF0CB2515435A3C9D3A9FD61ED73B3CCD70BDEA56768FC +7E90410470B0087F9B123D986006E729CDC571DB1EA3D713AB3CAC52C42472F8 +A7325408C9416DA581B49C709E1E35C3980E9F9D86E292D29C24C169A4035836 +749A9D5475AAB3DEE92D6A0666D176D9D0C2D28183459001348453241F632A9F +E4F5886355B548B13CA7E9766263E70514F495EFAC23DB6F5970325D079F63F9 +852EFB7B135172F5943B51294BC44CF215D7DE2BDAA35FA62F2358A8307D9C1C +7ECEFC0B93842A762AD1F8E6488140331A7DCF8F85A1364390E213FCDECDF652 +803860AF5FF323B7D0314EC85BA7CA22D6E83AFF66C961C21793601F3D030BB8 +16EB9A3E7C97041C6BF0D15CEBFDEE1C2B48AFB25F7F588681F9B3EE2D5C010A +52020C0899CC36A1C032840171BB439D30A9D6B0F739910D8A90E43EA370CC16 +AA8814F65A26CF0F7492D076115E91DAF6A118133AC18779FF3595A42A12BD3E +B61611A23E8631E780B420EA0944BFE9E4E97F5649BD953E8E2981F3D043889D +F06A4C62B5B90F544BD3E98BA2639AE0AA2190693F4247A91FF8B227FE3FA527 +F11EAC34057C446210043E19E2BFA0C695F33B2F6BBF4CDBC07917E433B4F5F9 +CE078FF709CB1A57851D117954315C893AB0A2FBAFE2290E8AA09ECE87887717 +549876185C50621598452F23CF40207BF4B4171B13E7413379748716BC624AFA +BC6C195173052D303AF74F95499180AD2D76360521F090C99C675AD863E46B4E +E7F7E6F0B09B4DDD286C3F9A742C8B909A8545957D3EC324D04E66AF9F8281E7 +6FDE2A7A9E1710B452FF4537C19778A9BB296F4AB176C617A6F1B1F9076E5648 +9AA802B68AF5A81208EC0F7B829039C5C6773EC3B80479FC482F9050079173FD +9AC1F6A89862DD56EDA4A054E7146975EF106222B6267415CDA5EA2E8DCBD1E0 +ABE3A94DA67BB6F11C66FC5AA8EB61E55792C18CCC945D16BE530ABFCB14DE75 +8DE8D5154E6AF9763FCC5ADFFA0D25DBA667BB614A05E3BBF945B294D64D1266 +9579A4BFADAD351F343B529943CE554FD40D52A44A7180CF894B0781E63B8E44 +62117D0F6EE4D4700D903A72676F0E876939DD77B217279327D372BD4E69B367 +68E654E9F1A2D11EEE90AA49B462D517F76AF2660BF7282F4C78E1536AC5C130 +0C7A4C6E0D698D372574EAEAD8F979312D648177DD0C724CA7400B8729B0003B +CA47E02E1CE0B32F3A80AC9399517175C47F26E5FBF6AC5E73D178E7DF67EE79 +5EA60CE56EDBB227694AC21A0E8771B516768CBE2836A00A14D608D9D32A27EE +E2ACC8CBB9D5DE7BE40B680A7FC804F7B9A39AF6E829D112BBF57DCA2D408240 +9D2B89107BDEBE8F4EC1EE8CC6B1F89E78677B8FF2FD7384EBDE659875462F99 +2D4E62D18C0A8ABD3B87D806FC514B0E5700E83D16CAD6EFD00C79D624FE841C +7F98DB4ACC86ACE1776DF5439E425CBC1C85D489E4D542F504D384B09209BFE4 +D3A008E069B0FA3A71CF68D097FDE55712C7E6A5BEF6CE8BE02A4E92EF5231E7 +0D8905EF4FE0D5198E32511F945E1172182CF690D7A769F8C4F76754E5654BD2 +A9F9F23B6C230B10E3AF6CDC745538D174A75B97A3CD3697814180BB1373B296 +203E523EE5B64F1EFA979AEB8ADB60CAC313F117EF8CC53FCACB4883E26B0927 +7897790E4AABF9667F9A91AD32AB1C5CD27C26C5BBA5DB8AAA7E7514A239227C +D798DD6AF110481A99753FB9B3D570366DE14F6C0AB4C31FE068B1876934398C +EC2298CA0A9EA5BA245907DA786D901579C497C3739BCB6A4DCB2E34E21A53F7 +6F673C1131F114C05FD1D3B37BB435B726AC2389DF866200A75A151725788CF5 +69C1BE79FD6FC36625BF73CE46A4FE5F12E5692B47F7C26376DFDEAF5EA847F9 +367997E05255C7EC67832533922B997028AB8018F404ADDBDA81BB0698AD69A2 +B4C217C392BB250B58BC4FB901F2912EE8EB6703DB24AD7C2CBFAC12F8D081D0 +A700C39130316DCECC18E64F3994E2C6F5E0E1ECF2EA4B18FCB424D9B8DDE8E7 +ACE87FA17D11158E96FD6EAD04B12B8917F420BB29F4471326F54C896BF1A475 +3EAD86C7968818F95E632A852601C07CE9AA698FBA3043D86168FA27FF43DECC +C71581DE33FAEF3CEACC93F5D626FE05894F8FC2B8719A92261A215929127FBA +BD9157BCD9D4C5D62D08E7E690F1DEBBED0A839475B1427A7C91E7F42C3CF6E7 +80E8B55B90566E21214A4AB708383F0A3E0406058E26A1C34786B860EC597A56 +2E33F58DE6C6850B71E88A2BAAAA6CCE519055463B468E49B2FB70CD32D84B8A +8EA3077E49E848149B2A46AFF247D80A42CEB44278A9341B4ADA55162F67933A +3BE72A237DEE6B9CB4826D4584623FC93882C543D173B22CA22E6D8D5CCB02D1 +25EDCD56559CDCB126185BF4128C71F228D7CDD7C617EFF12DF100F64925BADF +39E7DD693362ABDD7E17C3B21A74B31D05C9F4F067BCC1D0AECC6C5DF33D4C77 +04DF0394656DF7F564BD7849A6EC8A2A0007E6D32FDA98F7903CD8DB16D85DBA +47416DCB4806AF61E901490C8DF6A42D050C5C07502E7AEC9C15DB70BC015E02 +9696950D94CD0A7E8D46557DF9226B1369975F6276182B92056065B2548F9717 +05D488542B6ED9CBE2898A37C41F3093C8441502585D607CF07E8D1473C48D29 +68D4217BF4B16F8BB279A9E7F4F4CA461A9E9FA912C1BA9355A4261438E9CDD9 +20B0F7E2C324A89BBF23E8973783C2367AB9C59693E1C90D3466130C0154AF7C +008E052A63DD8EE001FDEC48EFEAF1AA7A7FAE4B10D79C74E0586CB3E9809DA8 +E1946A3E2EBF15DCBC950914B860ABE6DCD273FF45D57246F81DEE176B7DDC9D +C5359E1291B5671AE9FCDB06DDC08FF46607E784084547AA7848AC30A32B08B1 +3FBFCF2829821733FB2CDC11AFEA7DFD97B8D278DA3A8258C69532DD625F204C +81ED8DED59753060C83C4FD0B9B4D09E1C6483637F7C8EED13DC01C2F477DE4F +5AB6D45C17BA5B2C6E8219B46960E39695077D2770AE34FC50510067B89736E9 +D172161F0F1E2A7FA79A400F54AE4F20E673A3D91D892C7F88BE4237F1A3CD55 +BE5D1F91FFBA4A88397329E4B62F9170AA553B0E7BF2ADA42C4AAA6920F8AC9B +0EF3425BA25C2EAB8DE2940857712C68A12B5D56B9EBCFB4F19F63075CFA8E03 +4255EC777F9FE32E47905F950BA371B539D7F9F55C21A04F1AC6D9280E8C5780 +014794256AD7B05A69B84AE84337B5C678E43BEE8445C0F79E621DB4AEBA9188 +2410D0E6720380755B4AC748301CEE5A235FD0C1E2D675C147F3C62037708EC8 +0DDB1C349FC6ED24879F0202ACD4C881DFF4BA4116060E65F17F07BCF2CEE0DB +9E8FB76D0F8BBDBEA799071F08AA753BB3129FDDE4D12B32F5D566D8C9D6A35B +4A69C077A6BD909F1BAAC2A2C62A6AC64E722D1985CE4E8771F53170A20D8543 +29D11CB175BBD9B632C89E4A12663C0941091A1532DBD59A65CF6D44AA4B08E9 +7B5BD346182AD70A34A2527E352FAB0C109AD72EF443A5AC713C005564373733 +DAE20E3198295D8DC532ECB3F98551F84AB2BAB805F2EC2669B01F1F5F9538CF +F6D20E05081178581990783705E24E9C25E2E82D45541E5C16A30A72E2E2A168 +129A688F199DBB9575345ABDA993DBCE8CF4DF1128B0E74B6C01666CFF1A17E3 +DFF06C8D3FB42097BEFB1B33A25F4BCC9024C29B4650B43D1CC0B79665D05D1C +751F94FA99175C257EA991E6B704B75714FC7FC9D5A34A1A3019AC5D9EA8AD7F +6A75CE3ED13ACE632532BCC589F8E94B8E08805C56E3D91A6C7CFA23CDDC4767 +BD735DC2A7FEE4AF8FB251174C1015127CB8F7C8BBA872BE416FEA0D359CBE84 +D915D1E8396E1267018CFFE5447CDDEF6726F47E499613589B40A72EEAAE768C +9FBA53FE832BE227F605E4D9E67FDE078120869E5F71E3F05A31CD37A8E48458 +6BF4BF69736DE755C90D6B88D5FEE096ACF50F5FE5523138DBBC095DB9ADF46D +BE0384A02C4ACE11DDFC5FEECD1E0C4F2554BD6F1F235C8F980D87059DEFB98E +411320060518A16DF3DA0DD8313C305E5355FA2131E16FF6A19EBE17619F5773 +8C626D6BD2B7A95CF9FC6996DC514FF0915A585AD3C6746B694CDD7CFAEAD58B +2F842D764F3D0B6AA582D3CB96632C6A1AB14BF49BB4F3CF59612FC40CF63A5E +E1CC3E2FDB2122FB8822F3A85A4AC58683CDDEB72C34E6E346DDC00FBEB75FA1 +3E88EC10B348E8D8DF2053EF2921E8BE24A1CC861268AC66CC4647FED7EF6ADC +287821A9B3AD7191E9733FD34629DE60C47417167ADB5C3B2ED7BAFD2278E698 +6240EE28358460975D3FCEED4C2065CD0FF3AAD547E1C63D37EF2A94BABF9B0C +9525F03D5385CABC6AB58077F2AF1F9FBB419BE35A8980178C27E4A19F30AF35 +A48B18A129B900CE280C100EE5A40C4E6E393542472014F905C266CBFC75ABC4 +FDAC0228A9E73BF3B268D9736A3F8560E78B48A0D7DD43050A0D7757A4BC7C92 +6C066B399F71CFA5BF090EA459CDBBB674E03757179C43CC5B0FDC950D6C801A +F3D07AD30F08A6D299D1E784152103B54ED264156A97D64AE4FBDAF8D5EE20DE +1B80A4E6AFB427A0C18DA8A43ADBDE1BCE9DD46A75C1A1D15995370F792BF843 +02D4672D4493773F5907A814ACB139498953B52390D84EB4474934713976B9F3 +BF26CF310A682FCB955682E4699ED265B520D5D7800F9311C6AAAFCCE8E92435 +E7681D56C537A1C1BBB1C2CFB94AC92D816983C97614E26B062646E2C8808D07 +5E18B87ECCE3A0213EDC73919F7C9D80536F98DE0B9995D8EA4A2633D2E05417 +AF3DB26F9268647AA646C4AD12C3146745A411ADB2502D1ED58E46B7FEEC303D +87065F9B881907F127E02DCD321CCC580C89FA6B3095F607090B2786E5848D7D +273B36207D75A008365C5F1DC4F748E78A6F791ED81631D7EE1E6D79049B8F2F +B7F38FA45B8809B4BC05CE91FA3C2F6F6AC323B3D304E8EFEC54E20045B6AC57 +D08055CB193CAAA5C53454E279BE8F7F38F949EEBF62795AE7B5DD0FCAD1C3D6 +4AE4FBC6186C750F3F2DEA0BF8B65491EACE7DE5635470EF6F42C3395D7BA0F4 +A0DA6BB1A99FEDBD90A551FB217644CEF9973BB90A7FFF3318499582A93468F2 +9E766C2906BC6C4BD7E300E48C997C474C03E2A34D9B969ADA9AEF04843367D9 +AC4A08FD88BB672F2DFAA2CD0B871DF62A43A61AEF77AD88ACFD112850940CB1 +D74CD733FC4DEA77C454A52ABF2BDFEB9EBE3FEEED53CE6D4B1968F0B2BE90C1 +12F96E7AE2CF62F7C2601B589A92D8B024E00D4E8B1F636884803554E9B82005 +8329EDA334D1DF5EC7384418609A8D89909245737689B1D108186F4C53237559 +EF42502050EFD6E7F822F835517FF93411F08B5FDF163CA1A19945FE51C31F9C +9B1EF8AC79EB037F1E704243CA1F33FA130F8DCC3F56219CF6987AD73627FFF6 +1CBE6C8911831A43827D5505C1289A62C7AF94DC668300057993FCC20F752A75 +5E79244AAC3D790CCBA8222CAB05A953BC9BDDCCC59E1AB9F2CFD3480B836B79 +5C74D384C53723CEDC5E42212CE487EEE190F6B067C322610A6C17E0D84A7DD4 +C3171856FFA19470F84E207DC9BEC7B44C3EF2BB5B043929A5E900750D117A20 +EC2297E4E6AECA011F3D08B06593518515B495DF8D64D3312AFB918985A3C4AF +173ABE8C26318ADDCE1C262B03000CAC5B5B4505B26B26A028496703493D3AC7 +E24AEB4F741A6E4A68EEFA0D156E58CEF880E0C41CF6291D0AD20D299026B9B9 +D09BC425FD7D7EE59595CE14CDBB36CB4763AD7AA8841DF5C17FF3A4099BEE95 +CDF6DCB8F9ED7E118BE4F2D2F5B4D67A2781F1E2C1DE8CA03022C964B1337830 +1E20572FEA296D9FBA4FA416056378BAA8A86C165A39EB148B255DE0E7EB6351 +EB53F4AEDD8D411703A3F01159BD148796A1FF52666D962126FA863C9811B3B5 +ED20ADAF32EA3BB018EDE34276FF46A7153235B2E9D778402952F2C73CDB0290 +3C24E2BD7C74A77BC339F7B421983E6146F64718605DAAEA2914F3C4AFF5E078 +63B7DE54810BEE9F140B9F4B0B84521AF90C462914CECAFC07EC0617A189158F +B4EFE2DD47221780D87302E00B139F47239EB174102E7304F6B83B71DB890422 +CFFB05C39ECC0EA883849178EC773C3F0C6413FDFD1E1DEACCAA89FD71FDDA42 +B206A827F434160AF34813CB02BFB13B08ADFD7A0522ECAE1C57F0B35292DD55 +213A2E2D4E7BA5971F46C438332D85976B7D2F15425CF626FADD7F0193C88B8E +365C3724440FE3A2A3C8CCE159F7508D23AEFC92EE92B0F824BD9A5C44FC96D0 +8126FA6E5F23A6207D079E24E4426D0BE4798B9DA83763734EC13292B5FD113D +D5F83379F86FEB25C1ACB394747D34F0913B7BD34FCFF65AEA28FD21BEDAE94F +CA631856987B7413A7F7C5CF8DBE3C900B7ED998A3141702EC5B86BC12FBB132 +24608C6FCCC626F19871A87B5AB45283BBCA5FF6F1A19277D7DEB93EC5EC9977 +4F23995267034A21F92766D7CD17F573E1017AAA96A61DD36C211DD20AF3D34A +340900F1188A9547FB19761E2AD2E0FD506F17F389CF9EE7D8BFC1106195199F +59FE361A39CCB0EE0D9E3C5782AAB7B6E5473B50E81EAC6A46047F110B155079 +9EF8C17A6BC2575A28D2447E3F08742F4BA6205B5C198BD5B9FF54FA07000468 +19A6A54448108F6F80CE1A07F2A6890AAFAD3CC15E8505EA2E2B3A3B35663B5B +FB6F6FB1492DB5DFD395F8703159A8D5EC1E73F859722755453931FFE63B8D1C +7377F5B64B3BA3B854C245569A731BB6C13A7AC4C6A2EF2374CFFAA99CDD3984 +7BC0A101F49D0837B84BBCC374B5FEADBC644FD8A5E66450AC95E28BC68EBBCF +0E594CCB0BE38C6B50D4958B0333E568BEE976DB2E19A8E62EDFB683B7331EED +3D67E0C0015948B07F6529D2620FA14FAA23A898A32360B5BA9E21BC24DF15E8 +669014A32F848EC36E63348B0FCE5C5035DB8C2234E3164DEA3243633046903F +94EB81AABBAE58A1D2A6EBFCD301BD54F49A47670CEA8E13013DCD9026201231 +CE0687971DEBA09310443ADBDA9E637C2FEA83D73048BFADA322E72F3C577C16 +0C751FBB90641C66042E4487DE1954A2448ABBEB51D1C11B312A3D5A7E1C3D71 +521CA8F0996C2143A0685CFE49C8BCDDC0E5403823122076A1A9EE3CFFDFCA31 +BF6A4BC12E03022A8D423A71FE46E17FC03B333A7F09E879F533D9BF149D1CD8 +B7A8265D47F2D63F6C961C003250AE33321BDF8488CBA52E2AE5924CB1A96482 +C5BADBD45C8E2F6794E265FDC9E5D4BECA1748BBAB6A6E1D37A5902238B5676E +32409C3053B8C8F6E6FE3C4CB1F3DBFE8A920AB0D4D5903D877ACCD0B367E912 +C9C00CBA8EF9A3D9F7E042CFC3ADDDF9508895A9B4C61D6BF0B76507013EE065 +82241B0AA5B0EF9E30A2120E154FD9E844FA1ABCFA468D7B3D58A4C97E433B3E +81CBB8C498B11D75A2E818EBC52EFAF545654E2B60207B986EA905F4E16C148B +CBED6CAE4C7DAF3EA41B1FCD32BEE448325DC5DFED2585676CEE3B057004EE9A +1028F7D0488443BFF30384C88FF25886DDC80A155DBFE1DD0A9161F5E9AD8DDB +9C81A53981E6338E822372062488ADE96CF40007E4AFC7F6602BDEFF3B5DB602 +50D1418A90EF6AC7A630EFF91835EF925CAF67C2DA09A1929301938C5DDA0EB5 +4DF4FA31BDB196091A0B171113FB3E293255F76A78195643CF930776D2CFD22A +8E991888FC446ADBD613AC37999EB3E14B860BD70CF6B77538A8512F1EA8876C +F68BA5C67BDE3249C2C46B91D1C86E153D774B9BDE31FE310F24C69857D7ECFF +AAB9BC4A73FD94851CE77417ED982BE376A21AEF2C167D5858534EDA58F06509 +1C21F5D13F23C76B599873E237A9D0F13F4E93342F601331C93FD12EBB6A3A96 +2B6EC380695D00C55DA40F6952F557450E914519BF6441279EF39D7EDBA95112 +F28213BA6CA883E68B59C546484F76BE53CB0B6732DD19DE6065CABC0F9F9627 +75DD538AFDEBCD2363D39D89D0A3778F7FA728CF375CE8029EDFD0A068FB5CFC +A13E5F2732700EC4060B28B7D7C1252A7B9C421AA6CFD0970C4C29596EEAFE13 +E8A8DCB6749EC08D9B25CA464B7A7F94E518B269AF5E5E532A215DA9640B6E04 +0DD104E93D58236D0A2C481EC119FF16FA1E0F8F3349EB6B0D347AB5A8723D45 +348F41971756CCD0BF3FE5F03EEBBF78B974D1D6CA364C5CE160C8FE154B3176 +3ADA41D6A7D2D1F0003489A7DC354ED43CEE9F121BFF9A85F65225CA38C7DE79 +EB9DBFE2471AFF0F8407E5B8C64565BC219C22AB0F1480908E1B5550EC510FFB +62433B1B36B30861E183E5C2EA573B54F35F2512CBBA49B7BE5BA2A7F290ACCE +FC7DF2AA1E5882A8831F9F105776E9DB60DC0DEBBD1D1E8403704E246EAD6286 +454822A957EAECBF31AC200EBAC45E0D340FD8587DB953D3F9086F082487D2DE +771D52AE8CA7416FEC9E91AA0DA73F969498A9A1610DF691AD908917EA3BDAF3 +78D5A705B156A95002AF6FA3BF3360B5DFC67F1BEB4EFE9933562BD01DE2529B +E044F351F50D51EA139828EDDAB0CF0194BB070ED70B68008258150F5CCB185D +92DA71065C20C2807B3CE00CC0FB725440B7BF52D0F9F6FD58AB3B0FD89CEDF0 +1414D83D25F9D2C91A5FB0EAB5DCF3C51902588EACB5ABF77736EF39DBFE403C +D0B13CFDC488D079A86079978DACD3E4E5CF112623DF2AB161E9A8387A523081 +51A836C2240D7FF33E113BB6F72843B7EDADBEB595D3C0EF5C55C5246139EB79 +28E4FEB7C216B4AC7C8189CFAEFCFA919284893684890F17910242704CABB4CC +D805F4C67DED52E59830BD569B19890B527BD916847C951BEE9652E602AB3DC2 +69B1E2972ED868219023805692F80D83DCD99B5B454FF9C52C46AED905140F10 +AB71305333855E1E8DED599F4824BCD118E789BEE6C260C99CEF1EB36A10B13D +7AEF20B6FC8EE0436D3C4344AE5DDC7018237B440867AC459C5A31F9171337AC +5E8807FD64462C64C63A434B82D3C0BD1EBEA855399DC50E7CCFD487097A1561 +62F5F651E527FB70C0E47FE6680E52015FE2399E25F00FD38AEA37B13EB42435 +C4A6084C618A12651AB94A09793B7B5633C350CA69EA9B1CBEB45FD240FA6D24 +58A6AAB28D6F6C97AB6854A0B04230DEB18303C2D77B3B7492D28E632AB60EA4 +DAE6441B7DD6804C47314951870CC30E662E9FD669CF37E4554474A6CC593801 +E8085F0AF185FE7D8CAB69969DA62A37171FB6EA39487D2BD5F689E6C67D1EC9 +4532C8DDACF164CFC7AF6850F19E199FC0EA6AF11078F873719A5A10DF16CD1B +F6968D78666E0A12B0E8AEEBFC7E523C37595A47279F1AACD6D7C832DF6CE944 +2896FF8F09714D92031E48652BED4AAFA55A84F5F06CF37095B37C6EE05CCCA2 +08F3D27C885B89F62B68768BE01AEC18326634C4EAA7BBABC3C9C4DB5CAC46D8 +85A79A180EAC7B74B3DE2F1FAC1C8BCE424886FB22F1F45DABAF374C7EFB8573 +A9E9BBC6F6ED8A720E174CB8FDC75B81663F4B85E472568E5D5B19FC25976FEA +8A26B417EA52D4A79169FD8B9E0DF0AC600642FB694621007248589923F2DCA2 +2265ECF240D063D6A682B7400AEC39B965CF6522EC807897097DEA226DCA64D7 +36C85D0DDB18E290CCE3F7E1301D04E91DD624D2F864CDDCC77CB34ECCF4AB87 +D641AB6901FCA513685515B023100D735733CDB77046B69C08AC0A0F65B65634 +437E9689D09878191F6BD79C0487EA25CB34724EF394FB1053BA4E6201162CF0 +AEAD889FC81C60601F9B53F161DB6C9A8BA9ACAA7BC29E489122667C9A239466 +59CF8981E1CC278C158D7AC2B25B4CAB265EC46477E7E3E69A98B3EAF47E48A8 +DD27803797671AC9F0290BC23AC56649B34EE46C97533DE11E459115149757F7 +C8050300EEB391D6367C048B5B48078265B5F70C57A9B8EDA8D242FD220EB33D +73FCBEB3E29E36C37D59A536945B1F47FF6B9EFA81F230A29403A2932E1D3CBE +DF6EDDCCB02F4C5243B3C43A079F32329BF852C894F7FC9B4786A16CA9583D4D +5ACC28C6441029FEA945FCC358999F6D7CA5418356A4129B98AF5B2066D141F8 +07F7036B51FF49CBF6878E89DF3B9F226A9C019DECE2FC8B7CD2F7491077AA59 +8A30A25BA74134B01F43F282B121498438AFD69D7618C77F6CED9F0A3CE2ED9A +64FAB7C69498548C51B96FD7F3DF274E399577491300D4AF7956C851A8E058A1 +F49AC57A5869A46BD5B51523361AD82CD3252323899058CCA42EC1DEDEDCB53E +24E289D0095E37B4067FD051414E4B06215350F9FEAE5FCE1479E77BFA287857 +9A9AF5F7BD93FC5A96908208949EAD6482366F796A88E9AC15B6F24558C58F14 +565C9CA8EC72373BBF2C54C97C8FFF8442ABC8E25DDB4FFB20EB229A4031C14F +FE32FF67BE4A28EE0BC60A6118EC3A8D0AFAF472323B0065C670CE41FBE92F54 +CFECE8751123AD3D51198E5EF050D8C751345E5AA0E578F4703340A3EC431557 +51FE351A355FAA778F3EAF00223A0BB03A7DAC11F58EC64F89B2A1C249A9F720 +7C373942CE60666CB9A988E8971E31CC706A9516694F1F968FD0D902BD69B6FD +5E04755A10C8DC057E60C71DCF9D6666FFBA80ECA59CE185AE97F8CD64CC7949 +76FF8D9C9A0FD74835A67F2A34A1229A7D9FB0B9252089BE32C320D28F22C93A +358073FF58864EB4E9BA5C83BDB879C67DC64F591F1480445AF304F6CF657265 +06E758177CE96259B3B2AC1429D549E249A8FC90444E6CE1E96D7D57A5272278 +076C2055BD26144686880FE76D0161DA226BE79D781DE33EFF4F9955C928BD6C +55F16E14A5A2B8306164D863C2537CFC05A7F1B9E9221321924D33E29C95321E +D5603A85A3F3F890204BF7745202DD217CEE21BF45514B8BD3D5018DB01FAB56 +E5B85AA57D26C115F349D826D21785FB2B14B16C3A1C3D764300C6AEBCBE66DE +4D8AAC6484D20857694BD65065BF4BFFFE35D86D6C4AE1A29E927861D180A339 +7476FB6DF1817BC6A077CA5BFB568F6CB759FAD1DDD86F07CF9F6D6B8B320E01 +D9DBD04D0315ADA0A2F8010DA572EE6AB906E55CE716AF7969A3F64097210C94 +7623AD3E0748DC9614F27C4E5F614F13770A7C5B49464AB0E6527CC6FBCE4794 +BA32DC1099FB73AFF3EF8DDC33132DAAA7546BC6359DE8A49254AE44963830EF +7A69566BCA08FD8DD4C0982A38625EE58E39BA2762CCF85A27B037D34BE5689B +880D9446476613BD98CD3DE649117FEABF6156BDBD39AD05F360488C3A80BA3F +C764F11DA922383787A8E93F945C8E9D1FD4CA16AD0958B21EB36B84B524A9BD +C8434B908D4CFAB46411E997E75D9F48E140C50ED2B56723BC43069B42554850 +2A73B211D61800ED608891BFF059E8C49C52BA719CBEA6681A9BF720E86FAE4E +04D5BA274046D9B103FF247068EF9B3F51C22F518AC1BE20B9A00CD21F341BC6 +FC8C1FB5072C69466CFD1F1085A92E517883C037F3A73658CA74686F07BF742B +98C121BF9888160E0DFEC324C208409D876B887E4447CFC4416C9A4358D7B1CB +769BE77537BC8E2771F2EA19EE1440468925D41C01ADBF2484D8B5321EE18DD2 +A0B1F570E0BD0F8B0931E1C6DA0E71F1E995487544B22AE91B8C2B9AF65224C4 +BD3E3BB227FA37121E31077601FC205EF5E5B69458333784B42D07CD58AA73DE +8FDCF30351D58B586C9A6116F0CED2298B7E6E088247EBADF24DD85DC2680BAD +D217DAB604987181047F426ED848CDF475A9D19D0F00AB7DCE4E3C73C8B666C5 +37C09106A440E2421E94D699BA881B53D98395F47808FAB1D594561D46E82175 +0FAFBAB8F8197119F14D789B7E798DE37D62D2043EFB8DB3F819B62238D62E8E +ECFCAA92C967CB2FB089A8AAE36AA54C43C8F9AA5A7E8D88B178BB878F4A7073 +1D6BF3309D05856F4AC65191EADBCDB22982431C86745C3E01B0F563B2405AEE +1E56370F1835559BA096C154626D36C090D3F32EC2EEC0B35FF492A08E61DB6E +C234642691A4B214E27FED0D420254C5502AB9797B273B8C6DC49DD29CF1C65C +CA61944460CC2ED03655E713B63DF538209FA69DAE84B4A3BD89F7834BE5AC7B +F3C6CD20E8762AC2E365548F396D32FDF7349DBCE34D93E68C626EEA8DEA1EA9 +A369A6435B000C4568BEE6FB00BFB2553D7AA6923E3A28B131A135920A43F5E3 +D692FE12C30A2FABFD2047DEBDB4D9037D87B7FCAF0DE6EA92596235FF5B16F5 +80D4B99B2F98B51A350D8609C9A65D0E6BB6CAA01AD47912D72A869122A20E76 +8FFC5353BFB61600DB1851169A8B0CA7461240A1EC10351AE38DD223262F5F1D +C00DED1F9AD9F805F8C13E34E878E64D2951DC05C2F95AFD57F8C1F0316FDF5F +61809B7AAAF7CECADFAF70C607B77005EEB7073BA88B7D6FB714C10C313EE3BF +82D1BD536D7271F012ADE21C41D2D4BD9301305BF3FC46323C0F9F58C3229897 +F691DD00E9C538DEB7532019339406CEB61DCA9509DA08B4E5ECB4966369BA10 +739E73F3A6C527D685900E6A592D25D01EE3803EF8A741232C8B48C2798474FF +03CB68F61FE1065A45C00E86E339580EEF6A90545B04EFAC45E57F0B5E9BABCB +E053AA4FA0C593C1704C58858CE462891FDCEA47411714BD9F42CC66714A1947 +5637755E85F7CEB3F85720CDCFC6594FAACE2E49864514B00860123130D91672 +549C4B4A46F3488F41822C30C927430207BCD5BDEDD48366A1336196EE37CB90 +EE3193289796DC165A51E6C01FA7F87E6028A8CA46E90A47154BD95412C803A6 +97F35D80F6FF9FF64053FC3F67E182A3AE7E72F12FE7D85778051CC8BC847FCA +CE8477994CB78628DE7F366A6337AC42372E54F5809693F631910800B854C832 +090D71B89E09D49256B84F5B0A2BC26AEE76CDFCD9D58F4D739B73530AC7FACD +B66DDD8F3E601336999AE1D93AB261E1A101DBE76C7C9C988D4FF999BB480853 +9D366BC1F0CDBAB25214BC5D38D3383C85345662A65E98851321D776D34BB6C0 +F7E3367D7329714A5B8524213DB65B36229AA4794ED1B8B9B735B59CFD4136FA +ED923B234EFC0F1B10E99B4778F1616764E3FF5EA5ED64D7488DBCDBD8D0327D +79E703E5FBB73192658B48A6E3A50D43ED6F9CB14A0E1767C1624258378BAF01 +B4374C36BCCB1EAFBA373538844F5D1F36E25046722DFEA0398FCBB80B1509AD +F76C2C452C2A3668231F46B8A953C722FFA795A9B25F34FA0484CB72DF2A9E3E +AEF724E2A120B9C9D3BDB7BA2F1688C85BC8B4F3AF3137C3B5AD07BDE5E6DBEE +AB93BA821562CEC2F498A406932E1571A1AC323C894256D19B1256FA855DB4E3 +E2B7B1F286B3A376ACB8EE51BC3036838D9C5C6D275E92D92FB3A04EE15DCEA7 +83E772D8F2EABFE039652049758504CF3BB46846C071E1C834578ADF50ED6BEA +4BE184F0DC7D792825F61FB26B06E8133A0FE6A5A50D804FE19E3C58CF1FEF52 +3A44C7DDAC8C9FDE076125A5E69C61D7ECE569901764FB72C9FFAA7AC49358ED +B49A2F27361196F608636480F5F59E7C501D77BBFF424DC90FFB76A98B10676D +5569395477FACA2071053F0C8E233F6D63B5690F30ABEABCFAA4BB42701332CE +B2E3AA23501DD5164738E9C7649E1B3FEC004775BA90902219C5418411CF3E6A +964C79F23EFF5867E97CD07ECE28E017105A493D1DE4A4352FC0E82966F1323A +06719F6C7982E802385193DC4644C80E0F849A9A9435236C9FD97E7E444A8B86 +531F89DAE02563F58C45B8360F38101B5F27536C91D04277C39CCEE90E7D3889 +80AD6E6377672F8C3D9157BC6883CB6CA46F48E2A2C9332647B8C6BAAA0C64B7 +89D2BD9E096B0AADAE3067BD9789A7340C46B398F4CA1944AF01A383875F6365 +63D143B3944E283A23D54AB91459EF2334FADC4D4B967A8B415841DBA74E7437 +0A7E38218C574189FF14954F1CD8B2CB642F017AE7F226A9B5D6B1887864BE11 +B36AA442F8493AB43CCF30CCF818C93FFB2148EC95F4E53FD2B203C9DE6C1335 +08D0CA053B70CD72CDEAA8C808B71B14BEE9B0646CE22C37B1866715238B2E77 +0ADC53682451FDF6D89ECF1C0626E41AAC7E279AE8335140BDA6FB0F617A8E33 +9D480F774DFB91528FAC553BB0948B94DCDC3EC4082EF3549E669A7A49C83FED +98C6C7DD43634C8321CA5A3BAD048442CC9FAF839D7647B744E11FC9DC7ED2B7 +1E2BB9E82308703FF7C7C8C123D8CDA3631FEA47EEA9045D6DE5BDFE87E92B58 +E5404906E06B417F088F9F9F5BBC78FF369CA8D78F3AF16C21C8FC2F38E559F9 +11FA7F88FCA559E319D63A6EF43CAB1C7E2C50736627674ED172BDC507D7770E +706DA40D79895E339D3DE90C2B95AD62E9882D9C306D58F80666A419EDB2A0D6 +0841DC59C6D652343F31BD5FC75CCA2E69C9B8495C9518AB83E95ABCCF6C5475 +94CC30358A8533ABF1D9A550076A6652C0ED47B6B77FCE29B8CBF2A7A9329089 +9F310FFF1F64AD75CD3ECDFE4507AC92C3448EABBF9ED97FE3D9E10B1EF3A0A7 +D692D0698047F685E6401FD72330B7B5736D285A923360C4B6B271B74544F855 +158BC5FA3F971DA2492E6A75F7A2F0C3871FBE4D4B4B326131FA1FFD6360F34B +9853376D4E9AE399DECDDC2BD6D790B59A0090BB748EE0EC0D459F203604741A +3FF6D964B3BF1B72881924F6FCA5C778CE8CC8513B99DBCEA1A8BA6E46DAD45E +9A6EB90AA1B02FE6D857CC50699424F559E976FCC174BD5459884F8A723FBFA9 +9C7DBCE6D0D6E426742F6AFDD4BC603254FC4A4A53E54352A79E74EB198DA28E +72ACAC529BA702956D1ECC0DDA91F64C822F3B1D564BD0EE11D26642E12DDD66 +9B2FE63051C59415F42D597690C369CB8CB64A8E3EB300C5DAF80E6F9DECBD78 +07AAEA84633498558B623AF42FAEACCD8D4FB005180CC5F55CC4DAC3955E222E +AA4CD5BAA529080F195AF80FDFFA970CB01B9AA321274A8DA701C9A381B0F21A +977E59520496E965447F88873026BBDAC1BE01EB7060674A656918AE89D6875A +83A4A71A8E583F09CB7C7146AC9B1CB5866DDFBA9F6E428A2D315F73F9C4049C +32B630F243AA9F62FAF057BA3D8C042E93414867D6DD3DFBBE9FCC4AFF865449 +B3A7AE8B3665B519CDB7E2372BA6DBC0EA2DE31B04C2A16353A29A760D409CC9 +F5DD03E2C11D29E0D545053A6AB7EB57D556E25401306FAF915968EDDB542D62 +E2F2D772CB09B4723DC936C0E08189539972622D8A2007A3DE1972083A902D7F +E50C882272691FA11D0013D6CF4DD34C6D2062C2F7E62FE3467E665D77A40757 +B16C6136E7240CF39704F49E8DDED8A5D60011C24177467763373E93730D04E2 +235768F2FAA0615532EAE537755434F130B1F83CAD5FDF4092FD20A324B3FB30 +80C9F16C617E2F13F315ABC8B2094F8C768277D629E10A6D0A9ECCFA0821ADB3 +D76C8206BD399FB5AC93AF557E2E982777B6C1FB0C4D74993E6084C1D4F50F1D +F0F50BF8B5658FFD4AE0C6C1275C06100D2DEC016F809CD8D9FD3FE7A7EF988F +8F0427880335F024598EFB33405D55C44DCB1DD147C398D0335E22AF9A195D53 +4AF6189CAA57CBDC5F08272D7CF1B5BF92BF3AF8036EF848E437B50688F49D49 +46F11D87415FD9ECDE418F452EE6FE7A3DEED95A0996BA0862DE216DA08858B7 +524A78820B2A5BAB4ADBC1BE71D69B02B149DB5CCE6C859A38A810C901CB845A +F9873F64E986CBFE0B2D2146DAF2366757C8FA62F7DF8959CCFC78EB605EB6CE +4E5B4BCA9C64258570EA229276FB5D417CF1B1B315148693C5EB6996CFD1508E +67DC8BE993EF72542255F7E323CC182EC88B844AADBADD4888A8C6DFC1C39843 +0C19767F9883749D6EC9D065C88DBAC9D87AE9BDE61B8950A51FEE9E531CA3EE +CB14C95B7301CC5A7A1B22FAA9E1E956EFFC9BDC1DA96A8910E733E10CF2EB61 +B7E324653C797D1DA73C2C081D70A14310D0588AA6915B0F05FA2CDEA0FAAC6A +FDDE41FBB23B5CA3D0CBA1CCA54C6C685F12C1DB1B4E8943AD873691186C7A13 +C29C42C86F1E46E1307CE630DBE4332188CAEBFBD604252EEC001BD89FD79563 +D79B17FC27A5506496576A62D3EC8DA2EF2BC0CDCAEF707B3A18978DC99BA0CB +3D6E611BC0E27CF54D8478853EAA6F80B3A698D179E8660CFBBA117EC0694457 +44D6DECED3C1DC219D63D1EAA09BF546A16E28EC76B7EEC8B01C4EA1DD332503 +8FB779A7243A90B4A98201B51D27E02083FA278BEDB9FBFAFFF82C4772F2BD17 +53AC2A75D9101249F2B0C52F0C565E6D084C1C6C50C084EFEEB5E3AABD25FCC1 +339773BEBCD4671779FEC8A1DDEAA73D2FFA456076F4D3EDCF0267A48E72D2FC +F658FEA7563E4B10908358E5FAE253C5A1A1F19631F1821C3C80BD048CE166EE +F77ACBBBE8F2DD4FB7AB2692E8C25BF18EECD4F0FECF677860CE50B10F3E67C0 +39F23CD146E0ACB5B6D2866594E6AD5A482D864B1A94E0CE45D4322AF6F3EDD4 +015504E7AEE530A5283FD5A934524AAC4AE9A2FA647CB578FA7E85016F97C906 +77436277D984277A329961807060D928D2065449D14FB75B6EE088C7496A0718 +0796B05E1C228EE7E1C7C50106CD49AAB88FF7C5B94658E3D2D8713C061B5105 +44DA4C04D051ADB47161510B9BCB4D18542A0EC5EB66611BC9DB1B4EA90995DE +19F86A76565445D112DB35479C7E70EFF4C6BB3E45307CE48BE52A9BFB818387 +9A0D04EFBDBF9EE973CB2808D9E75694E9C77BCB72EE07943096FEC011FE7435 +BA43B5AFD8D0811342DF88D3C50B9D001CAA23DB7F88894D58AB56B74E9D6E45 +9220790C088D3C2FB8304C4032FDD3129C0B52283AC284F36DE8F89E9E4505E8 +0AF4B25B6342B8DDCA18497D1C741BDD00ABCA6161682D75CB20B3D4C6CA560F +BFB97A5268A8912F873AACB40C9D7E6131BD2C2FB99DDC95A104AA4DD69E531E +1F7BEE6A10F0887F6DF15EE64F3B65061146BCF0F46B5EB53A294960E291A552 +0400BEDF61D30D4E937691414B8C14DADF3D4DEF27EC9CDE862922A8F80A0DD8 +2C4CCFDCFCD568EB78EC96FB946CD704BC73C9C07A239DFD8824F52E22C1184A +CD4BBDDB3E2301C142A6C21483E57A9BE8D060D01F5EA23C22178F3EFEACB76B +45C46C034A27953B14D9A2F624C47668B8700B5363F5C86944A8DEC84D382D56 +0C6ABBB75031683E20755612736DF206D313301FC39FAAEAF05D483C1E93E6EE +E1DAB686D64D959EAA5DB319812177546027092595A5002B151F433289AE5B87 +43767F545F3FDC397C02DEDF76AE6462D4A2AB55867241C8A7EC2293B61AE39B +92B8A82B3AFD65A6AF2B4C7928B4022B9B944151FF0936AACF2269FBCDDB31DF +29358B779C7FE59CE4FA452F0987A6026E0710C4DE0DCE081FA2602D01EDE3F1 +6C29CCD38E9D8207504BDA0CFC49517FB02E78BE3C70E4763B58C1CDD2DF9F2F +BACD21EFA95A59D67ED2DF67366B64369B696D1FB2717089B7E7073A6C778127 +2A2C3250B8FC0B5D8575997D6B8AFAA761E8CDBC9473B29C10BCF3E16CD9B555 +18124E11ABFAF29196579325B3F6C1DFC9AFB4B1CF54A40605D7B1A39A337C6F +4B3E724C02BF2C1DE1B5B327AA0F65B9581533015A7834293AE558277F7E78BB +0EB225997B0CF2AC95698AF7CB0F2AE6E297A7176EE56DE77CE18E6DCC988011 +C51C80DCA3A6D6613D517DCDFBDAC2936139030AE78D70A579048E27CC418600 +99CF1DB94EDC280EA97768ED37D5ADDF09F26FA9CD7C71FF71EEF05BB8F7AD59 +EA1600BB67F8D32408617FE38D3F03D23E3A9FC3921EC9C880F0A08E051A337B +72ED695E9B00DC820E7EF062596B651EFCE085DB5023D14713710BC6E2E98C7F +3F674351BC3200F448459590558A0F7D1FC99B33E69F920FEAD378ADC6F2FEEC +542C45A265AA21A7C5408102E0618B0653CF275D78D13DA3866048521F937A45 +8AF2EBEE59DE62B5AA226BFDEDB8C7FA92DA2A277141C1DE3301618DB5DF7EB6 +AC5BD2226122C26E0AF1A02C253D60052BC8768DE3DAF4BF58FDF5E707347558 +9431C7998D3FC3E63482BF8F31AC6E0630B4127E8161FCAA5AFBEA9649390F18 +4C8E16117FB1AD2F5A125A9C24BBC404A2491B8C44062FCF8A6609338052D3FB +840A905FD9E94E54E6D1EAE195C3C635596D9D284CF7776B2BBD7D786A9E77C7 +F868643441E41CBB50E2294A007668954A0B33F47D470D72654FA58D4622B8DD +90C3CDE66C691A4584FF2D93A6360B274E0E3739A12773F497A6FD980DEBDB57 +1B88A8792964708072AC880AB3331E8625C6010FBF9EA04F3572C737AA1E47A0 +8C5A40B1A3CDFDDF7314D1F06978B3FCCF751E0DFB25F830FD684539AEB02DE0 +856D6FBBC4372D76D109B1A52C8AAABBE455CC37982BD728EA964AC19D6D6C87 +6875A653799A383ADE551C3C55C08840D1C4479F1B97CCD8E07201B4E66726AB +B5FC0504C4253CA50C538EE93D952D148C6D7A1F99EFFCE9C9E066BC77F2C85B +5BA9474A49850FDBAC35F97EF5783D647E2F6B238F7D77B8F494D6D04687B8DA +9179A7AF10A1BFBC50141AFD6FAD87BB58FD1510FB6167E2955AC7336F2038B9 +7AA2683A32BE3DB233F3DBA776AF699305686785053DC25682B734C93F2725AE +5C82CD88B68A7C788D774581085BE2E4B467DD5C5C7FA83D3B159CEC68FF0F91 +5ADD33BA8CCDF3D93E96B0F9CFC1F7A2F98585AEF0DD14481CFD1DB73963BBFF +83BA8D9490FA120F6E4E141EEB1D14F29DB08AE5FB636AA1BC7F46EEEA33E8AF +334F22650CFC2F3CF73BFDB769BD34C3A80694278440C8C7B6DE03C101701365 +06ABF17546953891D8EA0F75E8756DDC267027145042C2817910064AD0D2868B +622937ACFE34406BCA089A50BD5D40CAD02F22BBD892189D94D41FFF3AA8F3A7 +DDE098C2A5C23ED877B7D8016709D6D578CAFA069A3A50AA3FC11AAACA58940D +D88505D217BD6F562C8E435F4247AE9AE65BEA57AFB21F13E546040A1A51BE21 +1D2706F228150F97BDAD799A4823C7FCCD8DFFF66DE7AD2AA661B6C1BDE91D8A +2625DDA0C9C2DEB214C9C41DCE148A5A805ECE8229A9F33AE5BA7A99DB32F225 +24E4C3D639EFB9EEAEEFC61E8B36C2092F3BA757882F94FF7DEB36127E272527 +AE79F0F55F9323C046708C4428389058F9C67CBABAA779F84A3EB8540179513C +75BF10AAE036CEFAB476729A8C5BD83B4C212656163F91FBE16384611069E2B1 +AA843715DFB594523904C3135690350EE485893F3A51CF2A72366EB840EF3CD0 +918D839BB55635BF7EF6E9D3CCD2158918CAB7C9FF74AB701C17E07F2F04A19A +F6BC970D90380809A987150EC0C8AE2FA190759B3D669DE4894CF4EF7F32E3A9 +50BDA5A1B083A21A9B0E1BA8A536302EE71A14E8778CF1ECFE0ACB592563EF92 +D2E727BEC93B5198FFE8C0AB9FA44AA3842B6E070CB4BE0F327196A6CF1F2D47 +A7CBAFD8FFACDECAA76F87C26E561DA20B49D2FDB81C42BC36D52A95BFE3F2C8 +4E4644D6560E0B5815DC0751A92610BEB4512A4614D0406AC8B5E5FE05610143 +DE3A38D11BF9A3E8B0E5A76FA18E99B559DB6C216938AE9DB50591E78FF9FB13 +67E89709CA7AAA17D20D820CD1BBD18B904436581FEEB2D9E5C2BC992AEFBBFC +7129948DB03119F6DAD5339CB950EC410B1064F2E8D471972D60514B9037DF21 +6F42C03932DA11BCF6B8896755D2115220E265469B3601EC1079843E0D27C207 +0D0624E118EB64924154EF01FA65BD93331754D469E61BB34DA3401A8AEA17FE +92165E1BCFCD153617DF82582CF27B8E64BBF919E183BD0CB78753813A01CD5E +D3ED931E4670B05C39B66CB35DD93E934B1239899566EAF7D7524E8105DC2BAB +6C43CB4BD23DF98F3CA2E88F0E40A3BB65C1D0A7CE7735F95AE5A86495C3EB27 +8AC9F070FED1E50936B0CE6E9D3DD56FF394F45646F02AD19885072FF5DF07E2 +2E7B8709D23473FE3E62E0150DB7233D69E31E4AC822FC58DB253EE9737B9237 +3000784F4883FD2BC7C7646F48BE10DCED395D7BB6DB8B1AE3ADCBE3FCC23EB0 +E7BC01AE7960B6B18B65A2820E788A4B47177012F5AFA3E5FBB8F593EAD2229B +0CB1474FCC2039FE2DFA57D3DE16C6612658F7B7C27B5F3AD36739DE073DFF2D +17A9351BF25DD24B4434C5D1B6277EB9BBAD895DCC727756DD588B65875304ED +983C5F664FB658E0DF6D79DB3AC1806EF4D5F73FAF9651E738564CDCDA5BEF19 +53AF4498634A841D370BA07863C8B579466D5A329C8160B8695BEF1DF28527A9 +6DF41EA5016705F903D0A0D2268A27965CC888A8BAAABB5D4FE7EC8CC7816732 +2AAB7557AA7AF336BFB6B298299BB7B5CC89797B7A71F4D61F0609822CED2EC4 +85EB4E6FBA0199D538054B212F095A49B77F664E749D0AA899A877151669E89C +EBEAB8A71BBFE65242FD53244194B5763260B87B0857072B0155000E5EBA5DB1 +68C21BED2AA9B60506E6873997A34909F6C8D5F9AC3B241A1496A2CC9B6FBB2A +1D4084500426B3931F25B42B1422DB5444C4CCE842B6FCB545CD0357DFA6B867 +1CF9C7FDEFD67867D748267BFF9AEFAE4BBFEAF3E0F253570F84D5214B24C335 +947CB1E1C56F58B74F48103F1F690C543791BD85B5DF6344EB45EAAD771A4EB3 +1F0C7765F6BCCBF583371F56120579729F58322314C5C5746C2944099D7D38C8 +A03C7D64532B0FE23060EA277C1D71321D257FE0E07592FCC8B23334A92C4646 +E5900FC9EFDFDA95B9E183C582457B032F0878503E61CF24899569B85B194466 +412E10123D6725395A7BA8EA5CC88C8CF69F5386C0E615B7A33ADDE091348CB0 +966F9EC34A7ED43CAB8E50E6C454A36B96DEBBA1F7AF42A21572BDA70407A985 +6A1F582EA78A05DCB2E80D58B526E6473E3688143E8BCEF811D1D02F7565C564 +E8CF7801E98451A7FC541542F9490B5A3AFCAFE0C0C3989B7899045CDF262D24 +7579ACB8348FD249234092028397C92B3CB69AA206A94D70C2B78ED45534A65C +07C396847EF4A6D9FE1590515C29B2A8FAD4E831BD2E4AE07F1E315CF8DCE669 +DE3FCAAA0DB0A2A518753D04F8DDB7129027BB94A0A1EA990F64FFA543F90FFB +63944FDF5F6E29E821EA00A71912C9B1AA9426939A2FD08CCDDC1DE545B5B695 +09DA575BE8A9BA6D51584309687FCDE29128D7BC355CD03A09D1091C156392EC +85393381BA2C006949DD93CC39B7A58BF101E0117E88B3CB4D954B79A86C632F +38F5475C8559229155CD210AADB479F7FA83797FE211E342DBB6CF3060986C92 +9F946E65ADC67950903B99EEDE3E2EFACFF68C4BD90907ACA26C96E4E5A28101 +3517DA551C963D6DBA3B2A0B4432A6D364CB2BB2FD1B3DDFC1F514D4E7771D1B +C4B406372269021E87B66B81D4AFCEA1316B755D65F7DEA5AE2FD2264CAF1B28 +1DD4764FFA33B22D2CCBB7208D7EEFAF36B86C0225535264733E237E055B58C8 +6FE717E4A6613D049D39E64A7F517C14CFDE8CACD53D96908B9DDE9DD88E5BBD +FEA1DD01A0CB0E8C417EF1473183F39EA6FA2B47BB27D37381433050DF7C5F0F +3FF6F2DE3C7BF989F617AB16AFEA89058C5E325FADF9B37E0F8565B433E82EB4 +F949AAFA60BD424FF49115CA76543F9757741A3C10440B4E5F0CD73AAE7F22A1 +13C4DCA7D6A55FDB020D14BAE8DB2600AE6CE26144CA0F83C82DF67C4E89914F +4C4A89DEA5326DACE14766616AFF2E89FD7B25148819141D464E47D178514814 +E14C9A8A796739DC99C1220CA086326231E9136F61962303686CF360E9E5D058 +915AC25E7B8F56CD1C6092252091E4E25406C5F4B60C4AD01482F41B8DD29C91 +015E19D94A0B39836722CC3F19CB46D73930D06BE314583F6DDEA56A2B6A8B5D +1C59BBBF8EF768F9B49B1BBB38B4F828BE4A73EB9315636DDE3AC610D7E0B65E +32A8EEA63B1C734CFD0B52D09B418F6B33F03EE08A886FB6E52405C0403177AB +A63EB20DA2865AA6441957F98CD7D64857ED614D59436450F33DD43EC7AFF4A2 +D3549DD174338FBCB4BE975E8CE41B34BE93C770940575AA1288F87FA400C650 +A4DDD573BF1F45EB97781044691B78BD64C3305FBCA02D9931EE3B8B7667777C +1C0EFDA7E4E247DBD6C5D92737170BB9A86D862C0534A8436B1295861A7A2BD0 +CEE445EBC7F8251E4DEDD7173A82A39B8C3055FBB90FC42B550CB5CACC2D2972 +886E7AD2AE11626F4389AA07995055AED5AAD317FEBD47B498EB52AE15DB8440 +EAB1D16A826CA1ED54F20A990EB564FE9FBB2784EC4920FA479244CD24C7A635 +574DF33C73FCB1D2B6DF0CE6D214B464761B8B9B2EC88387F6E99A64A0B52271 +2E57D454E5B233F41FCE51D65BDC26C6BC18CE1B901048833533CC08AD60FA32 +FF65C5E06A710C206B78D6B9EBA4A81031BBAA88BD3EBCF1E795170EDD69C61E +26AA502B47B8BCB9D9CE8A95D81BE25116B0B84A92BED585B4248CEC62676FB1 +2C6CEE3B2BCB5F7D6EA35A5E5725958DC772DB3E108F3AFA1CDD4586014A1296 +F92D49A8F9E0D19C80824733CDCADD36E8D6BF728A7EB38EC991B3E4F70BEF0B +5F76DEFB25670F3E9F8833C015B2C68AB4C6D5B490C2A295F038E2A8706D243A +1D4B2228CD1A2545EEDE67A85FEA536C9C32747B45CD81D01767FFE9A8F70958 +409C07CFCFA3D102707D1D6AA5EF7A8B25DDB8A7E416610F2D558BD3C9F1D3FC +A3CCAB935FD1F57D42E2D32610A3069A15A31CB0F5357C00419F152AE3EB3CFC +4B3FEA9ACB01F180495297B4A8A60A4D2EFFD3473C1C3AFA2221C67D90DC0DB9 +43EFDC47484D08335438CCE06EE75C7571007AD9E39E31BA5E2CE8DE96405063 +13BF3FEBB2AA0C997F303E056ABAE3F3C14DE8F472D60B6BF7B37A3488717BCB +C6A20858B52045A7CBF4564806C1D71E6422839222C63598B7EE67A4359869FD +C56BCA71E147E87F9F9D241F06EFD688A268CF0189BB9054231AF7764317C10C +B625E4633DCBFA5114EDD89E44AFC560CF0DD1F8ECB356174BFDE7322A3C257F +F6B9089DB9726AA7313D145A249AFE7EA43C3F1CEB9113C568D2162A515BC112 +7AD80BE6EB2ACD39260B65094039B95E1819FACB18A92E98F84E741409AAE641 +AF35BD026EF7140A7563505567E974A43554883949123C29AD3FDF20602B35AD +3100F85FE00E091803D9D14037635C964A1A92390886B6CB72A915CAEAF847B9 +1ED0F1499BBF1BB8A906538E7F709F962DF50143B649BFB2C5A3719F95362BD4 +A892BD6984CBD362BB1261C5F0C1262B57C441B9349AAEA2995C87FFA20CA0F8 +E7C98D842026CFF8DB2258D7DA536B3609028340A0AB13D4371BBBEABDA877B6 +1551058522BAF2F47F34509275D422FBD83F51BEDF0D94EF10E95FD1A8B488A0 +0A81C7998BD9AF86C1A8E2175ED1AB40C96243687BBCDB793A08A5336F911834 +247462D693993386ECB467479997E7995AA90AC96AA68B78F21AC59BA618D886 +ABC7F0EE019F4146755A55BC38BF5461B1422E62E320937D056A62D7AF6D3F0D +B2A2D09BAD44F46E97316A685CA21CC455AA8A061B88E3E64C64DDF93950E236 +B49749CEE474F8C38CA8468E6167C94B3678AA2E5262B69D4C04E5F36CBEC4A5 +029807DF9AB3E4A1B5360406EC39D519504E165D129B978225D2DD7BC4ED5982 +D67B4F1C134DF53B19CA76B00EC04967E7D057B246BB248F4ADCF9D4648E98F4 +4AA48C9112808A0F21F816E481543E5873AE2331E1B5256D027C48602EF09590 +18602EC3843E98554D304B92E5F1A531E61EF00E5809784C16D44E6783230C58 +4487C0B9DAFBEE1362F65E4555987D8810B49CAB8D53DE39DD0D49FC5C3BCE39 +6D4A8461C9F0B0B9B320365C7425D8503690204D0898EC34BFE37FBB5B6C86C7 +60AD9436D9331FE53A444F78DBCE00AF3CE5C80EDCE9A65CA837F948EF672280 +94FFFD6B176B98D66DE818E27E80327866936389AC4845FF059F996B83FBD151 +BADAF79C95CDC5375FFF1211A6C1C490344AD56BF6D9665B2388FD4BABF6EC3F +3F1459DC589A99A7615D64D34FFF122770812E0E1C5FBAAE90B72F8845A996F3 +3E3276D41462DCF43C02D046EB6AF4A9101EF81D357FB21FC15D075F7BD67DE1 +26DF7DE2E6E21D578051967794B28592F27271AD34C9B81034D62FFC442DEF67 +77D174EC4335CA3552D85B0AF9D4A4011808FF1EB140D12491217C9C6D991395 +6581C91545A69417114B70FC4E021FABF564AB6D1DC37E456AFED772A1441E66 +63AB194A8D94A8FAD64CDA23AC28ABD8630D3B19CA93AE46B6D7F229E36254BB +822529D754ECDB3989F803451F30793F0A8C4CD03F8A82185F484CE910334DDF +F3376FC4AB870851E6B7C1C10337DF7865CBBF77B28A1189494313CD8D112C6E +ADA1ECFDA1441E2F107DDE6BDFE74C50B89D6238492005C7B6AB5B77563F3209 +B6D5978E09ADCE0DACE3990764127584879AC061ED974925252983280A596AC8 +A0E581D4FF1446D3E25DEB2602680C4382605AA1CEF04A5231220F54449620D6 +E6705DB2D554A34B4A51B0243DBF506577753611F28C968AE743A7204ADE14B3 +6028881DC1AC19923B6ADE9DC01706ED6E635AD5049DFE52103F4411829E5F25 +B8DBE813719DC80195FE3707181931D1DA3D58F101E34205A9871C9DCE6D486C +FD8A3764D1BDAA95C2788192C956F3514D28F001DEBF20A7802AFC168C1D3F83 +B5CB66DA709C80CB62E5BDD5094AFBC09AC43A6993CB587D79C1CD2ACA5D3904 +683F7AAEE380181F625CBAC1000028727EDD6D1C96A180539B4DB46A11D55FD1 +9BD5A991EEEB3125C8B022A4CBD34D6AEC5F4582731651D4A1C593EE4DC547C1 +9FCA888C406D3C6FEA0C398D91C8D6B56AB56737158C47A90D5B8311178D3170 +4C00D98282FB34C636633DED7A3D8566D647F2B3EE3C095CB0239B48C4A1C1F3 +BBE15C21A63A9E779738FFF6AE49081703B5716939C90AB9EB4E1696444CD60A +4EFB17AD7FCB2610A9E3F903CCF938CEBBAD41DC25590B35F50A2CBEBA8FBEFC +109DA0559B474A79A5DB4209D63D727EDCA5EA257143F90212E7D57BC1CF6EF1 +D1A1954A4F919209447477DA90F87FC1DFB199C117A434BCEC1BA10653A2C9B5 +9599AC25838540B3BBBEDFB597206DBC2A894D077F095C073733C805E045AAAD +9442ACC465300DB1BF50C14F31F80769EEEB8EF1AC8FA42E123B7F98BE4D721F +21AD4A9DAD63D515AF0EE749497EC58E45683BBBA63D7D06B717D9AD0A593B45 +6948F70A99A42B8A6F2B5CC578389A7D971B21C48571BCFFB16061A43215491A +66BE45983EBE2E37BCDC7DCCC507470FB01711105EBF9578664D855434DBE98E +0BAD017F64684E21FC3209CA6A02EA74E6FD7B3710CC09AC0C213E3226C0ADA2 +8EC7F6A960D7D75235A3B6CE240AD4101855F00748363F98A6DEC3D785F99377 +827EC9B43B5B7FDADDDED1C469812A5291F00705AC26BE98C5E9EF813C6E1438 +FEECAAD277718900E4F5A4B8CDE0BFBA1E0AF5E324CA9B4D9C06A2900B7E3029 +9A19D23E58BDEE72438CD10AACF155FFD0BA3A91E18B9FB23585B76A6D4D9873 +3CA358901612B5D7670B1B2B8911BE871853588247A647FB91C3E86A6F642EC4 +528A7A3C63D6C9C59B46A22340A887E9EA8754F3771797BED0A2D2ABC7E87886 +FD5D1850FC4C525A5CB4354C5F600F3DA2015A35A77841A8009796C88197D9C6 +7F4BC939FE15D1F91DD6A62720E90B7153C4D77A13061F9F6D732E05CAEE7E7E +2EAC05082F0756507E7B6CEF9B559A5CC7EF7AD02C54E5DE6418EBED07FEADDE +F28A240D66F004ADBF2B4C9E158F0FCD9950683ED6210ACFA65F2071E6B72AF8 +92E19D97ABACC701B24E7CDC9D4D8C0D17EB4C64A9DF75B765B1058B485A48B5 +3A92C9B0A1D13800EF704824E61C8D13E64ECEFC2321CC2343A9B59E6C8A0244 +E3C1AB84080AE28A51C7034F3EBF2BF8267E293F61AA10128510CD26C0E54C1E +6C2C7BC8FF2F52AB1A603BE177A6EE39A5D5F77E9CB3F37B46DF0A134F0D47C8 +0B67F71B5AD0B206D3E78AC8146BA70ABC216F4F5CFAF55FE1803E4947297D7A +8949E54FDB2A7246349952A2B585AF440FB9BA30C4A85083E5EA80E134A611E9 +E0275460E58C4680CDACD85D38938AD52D1CCD190D2D87241C91C75802ACE899 +2844DF49F6C532D4BE4C5CA2386BFC77A5C3D49A2D691EFD56C5EB2AA830CB8C +03AF9B30D698BD58C43B20BAC134A895FDC42A0FE5C8CDD1110166A36CDA9874 +4FFA0D573A1414F05CA1EB5551FC456486A72A1B7853496B6F162E6A881368C1 +7C968BDA6B9DAE96801E87FB9D987057E4837E7450ED0C41E1AF1A14109C8F9B +F20152D9E0924BD9723F73E23EE66FB01E2013CC83A25AAF37FF923C089E0F46 +EBAD3B42FE036F94EE078C9CD251A150E28578B2DF64720E7BA84F643CF8E500 +2AEF59F860E7EAD664E614E489E9E1DFD76CCE33702F25F5E6D7BD2734B0EF97 +4B13A1B666CDEEC6B1058D8951D00FFDD44D910D5308135B088E5E2B0B44F684 +82AFB0E87F64251CB664A130D6685DA57DFBAD8EE271002476AA8E0895E283ED +970B130C0ACF264D8314E920BF308A44797572AF9B150352EB261DC86A8BEE7C +92E4C5BE76E66476FBD2BB1B6079D4291F03932E92CE53DC37EC79D946DF12EC +19D5E914C67F883C42BC5FC28FF200DE5A10A3B7308983880A5E5E37C457D515 +58921D0ABB91307DEBFC1C157D834C5F8FDD85589F17E28F99CC42E8AB3A7D2F +0965E88C78AFAD9DBC56B76E85B707321D760580252D175DE28F46E2130EED6F +3101D569B0C2745813D1D8F3C6A30AB77610CD50F5C8574DB097FFBEB2EC53D2 +D4887560B23710BC4BE049749C98CE066079D31AC800091119DE5C45673497AC +1E7BB1DF4867C5098454A98863F196A20C74B8CD778F24AE06E92C08BE0A6A58 +EB7CD34A06CBFE6268A01E8360725534A8DF5F3F1074FC4BAA6BFF579DFD1E5A +3C914F718EF07F4A1EDEF0E9B4B0188CDB3BC478C9202632212542C5CA144F71 +E76BC68F3C110742B61D20307AD2A4A0527A3FD8FCD7819B207B9037FCF53E3F +C81BC00D428CD5A5EEC788BA2C974B550533A30A646FCFAAAAEAAA443B09510E +A9D5FBF1E5DCF14BB0A116C91B4E760DCAD201020F63718AC3A8BE519232CF57 +1D2A077A95A5568D12FE61C78D6C1198D523AB1D604D92D0530434E4A5059F6D +DEBB5AB57D473DBBFB3B1D08E4C1795658DE4D6106A746ABC371D90A6D31B36C +6F950EB16996CA13104C356A77B7652471C811893A359E824BEBF8869EA13989 +3133DBEA5CD1A7447093A4B6500EBD5F434B7736D3BC909E6B51489A79F2D8B4 +6F8863EA0560F02557175460037899DFAF5A93871468F56D341680C0B8D2BD21 +709F35B66B57DE6B1446910F4EF5DDA5DDA3A4EF486354F087449F231326E4CE +6E1019BA41FEB775ACFAB6CFB841FD1EBC0BFAA6BAAC3B72605CD8ED100643D6 +6FBAE3DA56F5B6CE1F66A572B71958FCCFA3D1A312FD8199CF30BF0383EB0802 +2824A093336EED72111148C8F94113DA68C6A267153171B00335B0D7927715D0 +7F372D2F946AB65E1B19CA318F04686891B6E09F0536CF77C24A8C8EF7A5FC05 +61127667715E4CD2A547CD92BBCC219C40F4E6537036BB416783D54CB182380E +87F7E8D7DBD023ABF937085F12C81D92D65F97F70C017FD25E7A218D484D6A1C +B490BE23B603F763C260BF5EE4F9D11879421C14801948F4EB0B613219FFB121 +A477496AA5F5C70025E15B198A54C38E32A3E65B5678944138F4D0FF07970A81 +B23DE2CF7B248E8960EA358A3ECD637F779EC73B614B5AAB0B72ED62B1FD5B7E +45B9C587F327D28B042B31045D641D5B258702019FE50AC6A08A8FA828829CAE +573F6084ADCD362C55D539C5ED40AB1468D037F6756E7C004514A07C4A4205F0 +62324119A96F357702B338446F1E338AFFF143B8CCA5ADBF7BE0A2A66C40FEDA +15DA022E7575D9073E10B9F7A5B1A494FDE2826071EC40BA22AF17275874BE93 +7EEA3FEC5253C04B6060189C710FC7C5E2829F53B1746590B30BEB6C8C81CF15 +688A72C2A05B4D68FFA010A74E23B5B0B28C622B1C8D266100ABD3364AE21CCE +1B3701120B83EAE149792C87D4A074C7F8B4EC81156FB9ED3D0246E2A8A8D418 +24308FFFADDD9D20DA7CCDF56093644F425D8399E8A3A06B571D7C80753F840E +BCEA835E4094AFC6DFDE191E9045A115936F50B97DD73580D3B6FE91E48AF6AD +0F1B8708CFCFC76712BE2079AA6140C830523CE0E58148B36AA7827882AB0ADF +F5734E2AD66088AFFA6ED6A8582BDA670D979F8C23042E07502EB4A8506307E7 +B62510C729590B73804DBD2129D7EB17E2164FED0389E458BA053F5B24983019 +20D09AE5948A159990D9B47FBA323F2DFB7B782FC963AFB083EEF4C01F614ABB +5F588236986323FAF367303458401379CD8AC7F7CAF65816FA4B45F98A875F10 +86581706C369911B1AAFC70B1B1E7D30F71C55C030E5FFF4FA5FFCE97E16A269 +7982CF88E407BCFE450DFB0D0D8270C2B5C91B4523899C637CC86D1542F2DC37 +342D6366195297B4A529F853B5F910902BC907BAE83CD5522F5A0F2E4666EB9A +40083B1AB66C9BFB1DCAB26AF910B174AF933326AB131BC080BAE7B4FA30AB1F +422B0C17648AB95E8188B76977DCB7B2D041847C82347BF6D2F729C9174F1230 +E8612F98D9EE77EF7898A449A7DF889D137D1691AA315E9F6F08046BBBB5937C +529EE7FD23AEFB04603287FC991638FFF960D07BB5FB14F5B56ECD782EF84741 +7AED87F9E4D76F6CC4D01FD39D8AD05757C9B5B1C1775410F9A7BBE4D9438994 +BE02A1C81CE0BCAB1B080ADEA7DEC8EB2A9F5F1F2FCE0EDF006A54A6C1FC70A4 +51D3B2EF67FB6AFC68171CA31AFDB5B30C6D86E4B584B885EBE66344D499185C +7265595A54E3AC090BE89424FC6ED53FA7C30A417AE374E46476169C0EF5A04C +4D87EEADB08CEB3CF5C26B376461F8891BA72FB028B2088B81BA74CE27B2C455 +7DEC6A56DEF3406DD71AD214B9529BC80CD0AA95DEC7A074B785DC2192713A0D +85D6A3017133F5820912523878E2CE0614513137B1D6A0E1CA1B31870AE10F48 +3DFA4E6FBE782AE1E7557D157F4AB92226C4DA3F70AD4EF49D3A19FAF0169B7B +9464EAFFB3270787A6F02E86F8E3B56D00863A00C6C68C2AB375F08DC006FC97 +F060316F3385C66A7389B31DB5D3B7A5C5B73FD1C344ED9F40BEDFD82BAFD0F8 +87F6155F34FDD9BB4E928E5264B8AEF216C7D00EDEEA633E543954BE63A7A3D8 +34468AEF3C79DB66776E4C75A9C61C482B695F6384A7F8E8AC68913BCCA20221 +2A013A388798FD878DB9AB8802504236DC8147443D150D3C85F16E443B860C8C +1D9260BA341471BD866790B288D08A643C3A915AF31CB885B10EED89BE07731D +7936A1FF37B92CE6C953A9A6D2070CB9D1F8B4409E25F0D1289F445F2032D470 +A4DF4FDECA4AFE4656AB302CCE0DE4D9B9D665F56DF443DAC8E5A6F011C77811 +8D6075D72FFB6AD2E63FEFE1B8DF761DA09EF42D73EE725003628833E010CA9F +76D69C341933ABA225A1D448D1B02A24C8EF54917559900C31CF4CF96AA1976C +B75D49A191D647CB4062CD5D6591CF232B1FC7A1792787E97BE5F9F8BA3D4586 +5BB1D8ADFDEBA915CFE0D4585B4C7296B0E0B307DD245F8BC357D3700E187D75 +17C6440BCF624C8751D160BF9D351F49E1283AC4280DB84C36E593AEE0AEC473 +0DAA130274B8771D318283ED32165F26C31CA4602BD138DFA717957AB25423D8 +9D454DE676CC9A16C264CEF9B4038834762014B65AFA9841234FF8D6FB6CA9F2 +F719812D43D78077C82FE60B75CBA75B7C7E664BD116A68C1B92DDDD5ADF497C +0E7DB07E3FBF45298FE4B9C994E55803FB965BFAD4C2BD156D34D79B41A950FB +7DE8B2DEEA4440C93E94C9D3369C7DB4F297555AD10B1A8B003DCCCB94AA5232 +CFD2BBB5C223D8CA488EA15317D8284F97AC5E46144400797544EB86C2F7FB1F +B806596973F2C8FFFD6C26E14C13DCBE138C48DE544CBCDBD16ADCF2E28D5319 +0DC91310740BCC46E657C806A1E3DED637C488384E05615E78C96FD0DDE0F5F0 +170A04AD520E0B9BEC13A133DD976794FD9A63FB22F495BBA2DCC7BD11FC8D65 +8A1D80B2CF25666D444FD09DD1650B542D894DB7547A03BB60A9F1C673073A0D +789A66A3B41678579F42B2421878DDE27D4873D4FEC825685E90BBC6E9631A4B +A5F6149B7C16962139338DF54857B590E9A39926B11D0DCEA8388E7336AF455C +F5C39AB40504792DA3193B21BC793A63870CB7F6BAB8D0D51FF8125FD2BC72DE +A210AAD804AFB1D41B2E8ECF2936E74C53532775F21EDA729AA902B3C8B2ACDE +0578353AF3E9177C7906041C9360740841E64440F5815BD40FB1C41DFDF515CD +D47837C9654689CD118714FD6D8E4CF21A02B01AC9AEBDC75341741DC5ED3C73 +1DD0EAFF35BABBCE1CF9C207C1DC79F47EFDF0EC07D6E85D7ACE2FA8F5AAE916 +C80B1010086AC1E91B957A6A61D91113C98F95BCFCECB3255DC548A03C37612D +F9F47139A49B7236758A419D57E42694B0BDFDBB42EAF30E7F49421FB9563F72 +7036DB2C85AC91A83C37CD2EDE94B3EA82C45BFDC7E1696C76D15EF10141BBEB +363C098591B35024AC9D304B348D028F573ADB949327370A0F6EE2B8C9EA50A9 +9BDD725A81BB626CC124E522E9D164E10671A93BC36DFBE6025C34783106052F +142845026D6B18BEF2011E0BD47D03417EBD88F1D31FD36C61781735B5A1EAA5 +8C8E13BB206A6DE4584EDC53D0CEF8B91B59698106B9535D62BD88D80ECC85B6 +1F1CAC049843A88150359315F12D9940FC65DB61D8DBF588C707749E8823A53D +E19F6C060759BEE9A19A7536599754FB587751047B3723001349EE3A23851B68 +C8F5933E766D5CEFC618C0E551069A00BBEF52DFC94A3E5F0E5391FCB97A21AD +CF73E4EDDCF179730BFD8429DA97711A2A0B3853946026E6E8FD8F61C735946A +25E44B958697B722B52F4DD3BCA1358E2AC87A81840F05D76AD90DFF2756E7B8 +79DD5D43F0CBB873F11A9B753EA79F44F62BCBDEE84CFE171AFAE64C236CFA05 +521638B4F8CB880491BBC67B7C84268106D74DEB6A1BD035D9E4359C9417C14B +6EEE4AEBF574172122ECA13C800E178B7045C2D0B1BC92C07A5351C15C50BBDB +E7703FE1BE7E668BC059F62533786F36820D2EC57668C53B7DABFFF06BFCF199 +268B68430F3FF275EC74EF46F991B3EBF9FEF1B86659F81809DAD9F0C00718E3 +7DF1DA8521316FB2333305D58BF90854C5A9AAADF7BBACAF0CDB9B687CBCDDAF +30ED6E7778E4922B9766C461CF3D336B629980C3BD2CBCD246C0B21D0AFEAB5C +B44885D1F82796B6B064715FA3FC41BE38D338ABD15B7C627FC2D067F96151FC +8AF9EE0CFC15F16F4C8B6427926F17E612C2225274248B7B0809E1B08380FA9B +DCADCD2D1B26D1BF6FEDCB13C54489ED3558ABBC9ADC7A6610C411AAAFA94367 +7452F9260211EF5CF2DDCADB27DC0BA52C4EE8E6F5D98CD6B495755A4B52FB65 +67366EB69F16A3530371944BBFA0C82AB9459D718D08F50C60DDDF5DCFA64B1D +71DCCD8AA01FFB9387DD26DEFD30D97D5F9EE03F5DA165DBDB0D2052054DFD60 +DB8AD8A389940BA24F7F44C0307A9A446E3D53FB99A6E51A18B4700DF8F79D96 +1F3996630D3161EE5D119B6C0EBB57A1ED333DC8F18E35E5A715AC887257D37E +EC3BF6DFE165B62401C3BCF3752386166372061F6CDF94689070432C283C2277 +A5652AAFDC83461E0B5960997AB5B7E8F6CEB6BA0E2D9AAD4506ABE0E7CB5379 +77CBB9113727093B1160DA55CB2E6F2727414E53D8F7F66F45F1B7191AE7113F +FA7E11A2D144F27D3681258866A2B8F9C0BC12782CCC83AD847D5976FA7D4468 +78E55ED04B32B63B2324BEE7251FBC9C93223EFADB8946A267486F9863CAE636 +C602E5485628158238D5F6ED59D996E41A563B5641CBA250BAFADF44B4959C03 +838775AFB5CA6755A3C7DC78F1CB1154E63BA7370C4E0279CCED6D2E34695243 +6460A4F88C11842FF7B4BBD73711F2FD06888A02C0C5759C581DE1716C80DD56 +5C2B0223A20C56196D67F7A6D7B5F711743AA31B3D8B1CAFC649E1A3E227E32F +8A7716BB8E919A4F14F2630FBB1662767A1348055E48050DA6547F2B45FCC664 +8771E58CBD281DD1070E045FA81DE783F831C50ADDC4FE239FE4FCB231BE3F4E +2B6B75C719C88E69F8B3B38D25EA42F2B6A71B03FFB204076DEE53EB22812C36 +62A077A6097FF9687732C4B69F686406283AB883A2FDF4C5FE70A5472359E372 +DF28BB7DB8DA88E2399EB61FFEB037E484264561BB7A905DFDD110C5B110FE4A +2FD2FF3A1E3E1FF6CDA888F2B27522FC367999D7DAD58A29DF8EB796F15487B5 +11FBF4A8F7F6C9905C1F4E5E18C9729EF6C6028D5AE027CA67C1DCAA4CCDBE44 +A7D74CA0F6ABEE0BAA08C4A5A3C35FB3CE59EAD3480307132D25522518FC2331 +A46F67B236C4F51C9852562BBABE2705AB619C4D4F52675459F184FDD59AFE95 +30B97EEE211D690643BE8126130F3FF6EAD41FD9B760139FAD1BFB429C8BCD66 +0D504B64A7C502E476FD6237A1BD7CBC187AC7A30CB39614573B795F1EC2AB5B +47953B145DA8FB5990A80B515B4F9BFD32349F8F882E9BFEC8A321E3830A6379 +7595631C3E2E9B6711374532A8708CB0B554648DE5128FDB4D85445661AC950B +ACE8D7EC9CC3D5C756EF7890041957B2F625075DCD762A04442C0C5EB983B820 +22E64D66C3974D031D6789096E7A7A0D2D2A43FD1ADD8BDC80F9D1B381D67E3B +28B421336DD8812030E13FE79CEA71A9195BBC10EA5BCF2A446099ADF23C4310 +A7C0E296A311ABABE65AB2AF49BCAEABFA09CFDFC6C7B001B9CCAF252D6F76D8 +08DE4E08DD78DEA1FC92A5039BED5FEC5C276A1130EA569341765CC3EA94A4B0 +442244D7DFAA37B2DAEB640A4F014015CF54EA13CFD931517E3CBE786A6C4559 +182EA384C2113DE85A3EBF2B9B4E8356AEFB12FC9CDC11615CBAC7258A3D21C9 +F26CC170C3A3E774273032848D24267D0E7699445061B05BD5BBA4EBE4FC22F1 +9F0279CF940C39ABB756CEE674528B1E78D514C6D319F88B02152A425D4D2062 +7E798DDEA2149EB6D4F35D435C3777F9C6257D2A82930F540B119C7C3D0807AB +E383C37AA4E09F708DF1FDFE2CC8A3BCCE624A0E0DFE6F7A8D76CE50CDEBBB1C +6B61F75DBD9E52B8209495D00B7C01568F13AF0B5D812DEF37FF9896F83D7643 +A6A84920820A22BDCDBD9D5CB31A57C2BB67222ED05E71F061D79BF09A2651D8 +FA6ABE2FBB465F4310F1BF1BC5856984F5857398B636D1144F75202A4F9C4022 +0DFE3F18FD6043C381EA81B70DAFE2B776E88FAC1D482775AA6B452B81F5B396 +21A97D7214B5C1A766B62988330ED4CDFCDCAD8CC165CAD046278163046BF696 +BE49C3AFD83A0D6850CBC9FF1751D90433C03F373B89C31A0137EC9428A9C744 +72CE4653AB8B1CD3EC345C90879BCBB7C89B25AFE08A9FD880B78C9F6FD42186 +6103F6FCCC9E0FEFF506D56B5A98AC79F69DD7D60BDE46D29956E47396C7A15A +76887359539D654B899B6C0FC8ED736C5DE7199AC10FDD15B4FECE94E4CFB473 +0422A29427D252C11ADD2778C3777254F58EC33BB24C82F559287F92083CF708 +38A9CCED1E5EAACADA0B4CF23D83F1B257DFBA2F83883496BC1D8766A4FEFD11 +A320AD84F04C029DA40E51DB8E0F82EE343EF7383B29786B90680FA8A108A94F +E1CA201327F0E17C392C706CFB7515873582A090F93C9BA2BE6774B810FECD10 +01CDBFABEA808363A1374672AEDECAE03C783F7E2C85299E40F4B76AB7BF41CD +B01EC583140F30817B5C9B4D22EA6D4233E7EA1AD32629BBC513F79E85A0EBB2 +1AC59E7BAF8EC2FCA88318C1DD72B1E1D899354DBD8AF5C39EF980CAB38141EC +56C01860B90DCED2175947096C6D5AD7B56F4A5D0CF8569CCC1E0EAA454D696F +1652453ADDD38ADC336F2BA06523BF8DE4BC77969135CFC485313118989B90BF +B00E6A34AB57C871767EB52A9B970CD5D70D26164B6617F4D19C5C3DF977989C +687CA9F67509CB0E261E9A8D18FD6F0D7C061212B8BD3CD876CFEFC50BC6569D +5ED1FB4C56B4E0D3B2CC1117A90DB01802D36929E28F84C19ED6C83E65A0782B +F5EB4A9F9AB020A1FAA6B7BA6CBBE0C071BB1FB61B2F9113042C5A8E2E131FA2 +5677554EC8EA45604BF7464C5137EE17634E8434020D90CB88B94A76A100077A +21E031DFF68439EAB3381D1436E31452CD4D2E69914FD2E82E6D9AF2FBEF031B +53AF448C21559598865550488FF2EE2F88E3027F6D1840D52497EBF96AFA6691 +64F0671E2E29C6EFB745ACDBE97709FD452FA6B2BA43E1B21320862B5019F8A9 +52B68BDCD53B35BDA09F1FC4C480CFA3B92719E360BF124D9A9E728BB8D4AD56 +3D1CBF8EA793F509CF59585D2443DD46F15B8C86BA6438272ACA57274895771D +637365F5FB3361631F68CDE33A8E8B5E7FF3CAFAD3344FE57FB79115E2E67678 +B1ABFF4CCFB3540B6F7AD4189088EE0471DE1207E97945B4B74350A71852C0C8 +2EE1BA9E58C467B3234985794B04C91F6A857D5DE23F7B71CAFC182C7153EF1F +E353F897E22851A621E1D60FB5BA7FB0FCFFD4032F714F30B69609C9FB9B1032 +CE7F88EA8C488D55F9ABD713B603273830D45026A5A4D6E8E235E6772B43DC75 +59BA22ADC7382A89D5EC83D516B6B067DC0321FE435AD294787DC7A736CAE106 +FE2DB1162B182B1C9AEBA01BDF7A13934F796F7D5962D53C90084E5C5B0F54B1 +C50BEC8A2B11841E08B0B3E4F57ED0227298F2FC5F7553B0F3D522A1FD5DB5AD +261D7E37FA8AF178BB9F57531D728D266335807E68D6D7BA036804F0CF9D6EF7 +E024A3E3E2CA30911E6F37352A381EBDE15276CC52A168FE21AC6F8078CD9E80 +0E4212AC2AB968B339C7C55BD52AB03A3D0A65A10652149B4B56687105F6B51B +886A944C181310A86C7B824508A4614DA7EED2E942AFCA91C8685D9EFE369883 +021C308CE882836A5CD0A87C8F255ACC770B815F79EEF626A12618EA3AB0BF52 +AA35B2EF24789BDE3C8EF3E282882F3B7256CC2366A131AA8578FD14B369E5AF +B6C94E61BCB7FEEE9AFB30FCFCC9BF85B0444056614F18F99E4D456E50B977BE +E3D9996B9E817010678D3B6F733C4B3C48DB1E6475FA6E0E5C8D6A37517A1F56 +93819C842B090BE09DE6BC7E5D8BD3351DAB8469A27D9F5DFC4227EB534E8750 +695FBBFE39024507D5B7CFF063435E3EBEA0702CFEB563B3130AC0810A3BA1AB +4597EC9A2487D8EF0FC7827474ED4ACCDE5F680CFD17651A21E3EDC15E9FB31A +F9DC51FEB169A884F15732C1BF3948E8B96CC55563AADA8B3606B17218D86349 +470CC300E618135C404A8EEB551A10571A922B920945CCCF0F315D1A75F8C4EE +1A0641A8915BFBCA53162BB40F6AD8E8FFE411E2FBE104EE488385551FB16217 +D7784722697D0891B966CB4019037D0F96A1F57EC50C4B27437BB8763A79A7B8 +F1F01F5F4BCC48F7F642C6EF1CA4AFF92EB674CF99222EA58FE888B737ABF9F9 +2D87CDB282F6A5E8C02DCA4D76A2913CE31272387E21EBDEF0D9E2F24C79A7E3 +EED0A7FBA3A8BBD9B525ADE096B4903D120144B333F0D702E0B166D433E30EE3 +D3B0659FB70A2538DF137545C312665AC28FC49DCE75DF71FA1FCA37C6D0E879 +264C6B9D2B218859507A648A9FE83A8785079FD581CCE122B918DCC74A3A33DD +24589EE13017DC330385064B09E2C9B6E4A0E9D76A2ED29B68A547ED185D23E6 +730A46A85F80674E1F804216C1EFB747B7E9B8703CEB50C0206E0145969EF2CA +22F2604DC3FA86B795FDBEC57D4772AE030923BBDFCEFAC1A516E5CB058DB83A +BF6919BEBBB9B309E5E6263D6837FF36FAADD560BD7F2429CB4A5726923A683C +DECA1F3583E08C77AA81FB8D8623187596489A8894E0A7D562911DD7AB819260 +CDE2C4EA96901F92B2BE7ED14947B9D2A949C547B8A5CF52D9D15C930DDB4E3C +5E3B274198C2C80DD92CF75C28C74CEC39EE946A6047F6C056AB6E029A6E9654 +4A3E162AA204BCAD3B221288ED33DE3DA6095E85675A8105F5CC88CCEF4C85D8 +45F829A7EAF58B6B5D3DFA9FD708B82101C19895ADCD390B6C3723E8B3C42196 +F4AA43A125A1FCAFF10621AD0056B096C21C53D5C9B29D359A568F66C1F65A42 +7B76218410C0D4D47F64B3F625519D5443CAF0ACBCF6E45B59E9D7C4C6DF3545 +6D01216FFC11EACCA0FB29DC997CBA1E6B4408AB95CC3340C7BCAB683B7E62A8 +80D5FEC00070DB68043F8B95CFE064F09E62A2BC0C99138A5069E27C70F7FEF0 +DF3B98DE67070E05C0E3680DC1BFA10025DAF449B5E2FEE824B277DEB9489E63 +C27D82358933C1B103EB95AC38EA9F52F3D437C59DB47AA465DAC7EC07F731E0 +7F72C3868CD58DB46FB7839DE77F8B00B5ED53322DD03CFB2303C2CC1B26C78B +B6F7624596B92939E8D6717F6C75139FCE87D549D311B8EE9A63EEB766D68A26 +689DD5EDBF8A9B8695EA4226437620AF7ABC90A5E19A1BCF9CE1B38F99CC6626 +651ED6388A1CAACD4CF505131B97B27F32F68E2F83882108598140218BE26381 +8C32D7FD29852913C5BFE5C65C0EAD586D801B0E5BBC6310FC50A92E18151EEC +FDDC28F39FD1A323A3B5EB5DC12D263DD1D7D8B9A69B5CC156B041CA460D4055 +6B2F44057BECED5CF64C9DD3E5AF2B13053841C9FF55E28E21EE767EED5E16E9 +A033C6442737BD02C0BFC4E2137951ECD3C21F6CFFE5394D37DB260D5EA02F0F +FE200F25E652110134711CB66547C6E3DEA4684233B3369CB975761CB81F91BF +F6F1E4808276641AEF2F9D0577E8A6D4DE2AA8BD547A0EEF761E2C62DE6EE39D +76CB24479232B1DCD7219BA499225B533791BF358610ED296656A3F95A44D564 +DAE42762CA32419A67501BCAAEB2360BE431E835A00CB7BF1B6E58CE1F6FE01D +191A9117CFDD9AC1ABA5B616FA4CFF94EEBE9F84BC4338F66F86FC04EFC73548 +1F6D884F7A8837011A13127F58AB3F47F7C301F872550F558B462205726683AA +B9AC359D635C6B7733DDB204D23AF4279CE7F5DC8BBB352B4B2F50E9721DC89C +EE6CE994935C74AB296589C3C47F624972B7D92E0D1FFB7F5A30FD52E1B15126 +86D1595E064FACF2BCD55A5391F9AB38C3913B008491D7003782F95668735AB7 +56EFA837275E42856380E3F5B9F29C1F3C2EA94440A8C5399771065EB26DD940 +12C34F5DFE5AA595249CD08EC2B9C2E387DAECDF0E7878B9888D7630DCED1C9F +D341C61C57B47C12CC7DFBC5AD8F2FE583A2378B0E111CFAB1891794FE65E2E2 +3CD1F5DC0A2D57F2B6E4F88B9298234756748DEB13AC2163147EDBFB9D44C614 +9606533420CC766AE517630E0B7BCF01F2B5A092CE86F3B0E69614C2E3867B9A +99E05A128EF55B171C869616A1B4AA03D7EC61BF69D36ECE84BE11D888FEE73E +C91C03CE9A752EE81E21E73E849931FE57D0AC6180D9884E5BBA81EA20B9C879 +31AC7E8B3B26A27D510E69512B9CCCAB31F41ABFA92CBC9972AA3B8612CD5440 +AD0C1FDAB86391E2358F209D7D6EB419D18BBF8EBBF13C7838B40625FB5461B6 +4AC315A975E6687D68504B1CEB3C507CD015A25689614B379F7EECCCB5EA7978 +DA58CE5562A85E0E5FF07FDA3E08088A8A0C8285E8B30A95FE7ED9C5C80B23C0 +F696683A43ADA8F6D1AE93AD9E95E05AA639EA487E19D2BC1377F611FCF62647 +E21F511B70CB659A0B120F64F98CB091B751A55376A60E34041011E5DE6C8ECE +D124DCB9FA45029064DE7CA36F8CCE8FB149A220A29083CE2F7F56A665940958 +1B1384039664D4B1E3EC177CFC6DB6A98E162D89FEA3CE1C35803C4CB7593756 +CCAFFC04F2F41743D684EEFD4DB4B9B2E9C8DA8BD3EE4539405F2B1B2BC5AEEC +F6B303C32892CDAD9E9F7B2B00175F9B45133D3317D87922D268C3CED1CD1C51 +FF4604002D6AEBC8E4784BD4E87979C9C5964962D6AF054DBE2B00FD08419C16 +9F3D7B2C70723BC7B0B5273AAFE83C2D0B1B96D7F0617FEACC78A584DFA8D253 +D71029C6884E70033922D3E2B2DD27231A0B9A9FC83A0D75349FDE08D60B9F6B +76F0BE5614C22C5A3810DD19A8AF131DF61C98D739220243D6136A56B6ED09E1 +49C0CD780134E118D88C5AE22CD15128E00E5E47C27CFCD1E8201AE916F4881D +EA3D220AC1798A571B4BE179A5BBB474508A1BF6C7415C6465602FF73FA78214 +D20E6F79BDB768C2F0AADB39088359DE6A5412885C21837E7B97A20BFCA2364A +1FFCBBFD3FF10936C80448A2E8343247E552A5F082A5B2E44F72DCB3D0074D48 +BAE6C21FF654953B9E0A33AB9B33259044BDE76643833BE8588F50130087356B +19EACBA029A1ACD80CD0DAB61094A8BDCE989D7B6BE57A58698079245DB6857C +ABFFDE2F20116A134E2BFBFCD1A4790FA4B723142BB0745C755CFA493C33EF54 +60EACDC2AA25704B648E7A4D03127D49C68F79A3A6E74294CD7BF78C4003209C +CED18AA524478D46D6286061E69975212175230477A59A6342A684A5955EA108 +98C38DB86533C293B419E2D7E5C4E15DC47BA14478ADF01D466DB7CF41E34196 +4A64 +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l049033t.pfa b/client/shared/lib/fonts/l049033t.pfa new file mode 100755 index 00000000..1c7e2051 --- /dev/null +++ b/client/shared/lib/fonts/l049033t.pfa @@ -0,0 +1,1735 @@ +%!PS-AdobeFont-1.0: LuxiSerif-Oblique 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Serif Oblique) readonly def +/FamilyName (Luxi Serif) readonly def +/Weight (Regular) readonly def +/ItalicAngle -11.3 def +/isFixedPitch false def +/UnderlinePosition -30 def +/UnderlineThickness 60 def +end readonly def +/FontName /LuxiSerif-Oblique def +/PaintType 0 def +/WMode 0 def +/FontBBox {-207 -211 1088 993} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078993 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D9E5A3EA27312D552EF3BA +D64EAC97A2E691AD6D6E5E444CB2AB74100E0BBCD168621F404A2C17DAE2055C +D93986BA853006BC4334F74072DB02FF011FB0F56FA0837770F4DCE07D798EDE +1F4B52091BA76C81A45FBE15DB5A0D68D7A79A8DEA9E4CDC55A047442208C135 +341BDA8FC13603A79D99D9727F1E4DE02E48C52B5CE6F5562616B4BC9B244567 +46D53ED8EFAFD8C44F4FA1999EFB90044F1C32BC1F17875428F1B9282238D5E5 +F13485FC0BB836C0B07591955B070B64DE596BDBA674A31380AAD2387FDA4077 +F0C99DB67BC7E0D2F4A214F0297085D898A0B1B8F87EA37A22039BAA041A168F +9A09FBDEF76C808DAB506A14BE209ECEDD52561A881096E9005665CD1F34B5A8 +CAA535FC82F7C2643B07D7A4DDA492AF2B82FF073FC79FCE68FE8BCA2C899AE9 +FD64352D010C7CEC4853C29EE8E9E1CFA01A58A75D91F09D51BE3D56BA37E8EB +161BB620977C99673D3CD1D0B268F9CE2D8E5B0F95A8091634DE5B63E112F25A +2D794D375AD81A716DFDDAAC5B40E5E127191A098317223EEE90186101A453B8 +4D60C9C1E5FEA43CBCCFA33DBD3AF962D9E9B6963667C49BD729B73F333BE4BB +5009B89754383FAFEFBD007839B81AFCAE0661A3237B01B83ED6DF684272E95B +A01B989947AFEFDD0DCD5E6A67D331EC60BE9B77C6C0586B6C57113D304AF5A5 +07C5766D0B19C4061E59A3EF4041F8E9CA4EFFDE2F48653B5EDBA25DC74FBAC4 +D6736D66890497C37B4DFB51CB2D7B6CDCD1D691548209BF599E149BCA092B1D +2E8D1203CB0851C714FCD6777BCEBB26318D5C5E2E439C5CB17A93EDC9E48E10 +92166DCA43650ACBA389D3A55D38ED21951504CBD551FC7EAF5D3A8BFD48FFAF +DB31CA6E7D0E1DDBA18569A6900A20A11A9B4B8B3383900B369A4A1C9859F828 +DC8BBC1BB653F92C1C78D24EB7D3CB97D6F1D5B63E099E68D065A9ABB7228B1D +B6D17A5C3FC4255972A26B54AF5E9973BAC93A9F5E84220CA34E3C531D23DB43 +50001FC2BF3F62049435BBF3AC2FF0EA43B63EEC52D3AE060018CB3331882A9F +6B05A69332C5DA24457DF7F2AFBA0FC7E512A28BF6C638FACBFFD54B90CF0768 +E5F2180D31C651B7F58EB26B484955D1156CD7F37BF812224950615DA203E923 +E07250619C784672066E8B36423A83E2BD4970F894AF6F52B2F0A6AA1A85137E +056051067F2979EDA3EABF13255A3CE018FB7EDC0D3C7458FA67E63AB44F0E7A +770E2D2A8309285D6B04701A53F44503AE64B9D572560E12B102ABFD762F3988 +AC2B39737A18F9A52A0BD10BE37CF64F5198600DB70B31F6A9DA9FD6B2AE82F0 +C745B5AFD6C2F650D5273516C4130052964AF5349D562BE851E4B604F60789A9 +C673EB95E8873A695BD37549F0C6F1CD390F5DBCD938320A0CBBC22A3CDE08A4 +F8D15B484B34DF6971A54B8F7FB1CF485EE80B16412EEAA55632C6148404D293 +2B574F96BC9405DA846B02C1EF69797A0ACC13E42BAA953827E28F17D57CE611 +683565E3627DC24E3B67D80E2C740E5941431F816F60249DBDE5755BC004157F +7ADBBA7F7ACF01B405A87382189BF6540E6B53E52F772A05B23462D1E6B11F1D +8462B8474CE66638DFA39DDC6BB35E06463312D4858418A49C71EDD693348F23 +E3B6C4BAAE2D228D1B45290A316721673C256B03378E998594847503606EE7C1 +5276590ABC466729F36F907A0B37B5F1BC381A115A65DC2B2C5B8439F85901B1 +BBD6EF263820E813F9E4BD65E9A29FFDD9178D22EA74552E22DE6362E465D698 +3795D8FD2487B2A624D5C535063F1B2BB3DEE07E7BA4A5936BB0DFA4377BA2F1 +FE555D347799403EFE551EFF30BE7468A471E902433EFBF02E4784B583B1C255 +BA90095E37CAEA6CBD0BAD59E3B9A14120190846B8AC02B9A6442B78E68BBC0B +94F8E33387523D672BD366106A4BB62B1CF022364D011CF340BF08021FC70AE1 +D2B4714002FAD60CB843898B731FD401D41C25AC996A864B4848C0DAFFFC7383 +95EA07BCC6A7BD093D1ADB6E3D220AFF5669883F5C01B2820C82E07411488E7F +66CB3CC2F58D0F867D9370FC82B6D231B37E5E6FF413669ADADF2264586D9E25 +AF180F49B79416618FECFA641018806471B0145DA023FFB1FC61A51D03B86C5E +4EBEB9F7F5D5182C3075474B9CCE399CA11C9FA17EE469FE0481C253253FC03F +A4562033ADBC19505B863A444C23F07B048A3DD044E8CD9F0BD77C9459D61FA8 +1AFD906843077AC6F878B099F776C0A4BB5460B3D1F81DC3871F3BD4C8379B08 +8309F47A42D923C153F7581EEC85AB756075CB465CC8F8301AC6D00764992DE9 +E0BF8A4D9C6B4B0EA012216797543DED1CC8AD8D89B277E586B1763F9004583D +CF1EE2BBA82FF768EFD891834C0CED284F56580A4BBE440839A53F8636B1C99D +89D65CEA7FCFFB44F9CAC913A52C81728800031F240A502B588F487AAE219D97 +CED1BCD34096FA682B335FF362F87FA6D8A307CB9D796F1700CDFA3D21C5BB66 +FA221D737EAAD02208240E4B882CE67D19AE089380B0FEDAC4F97E7ED7629A20 +C7F8688BE4D5C0AF3326A66C1403E968E8963F4DDE599143D8C57CCF85B7887E +980D75A2DD2B7AA28202635645D768C7121AC6D6FA7A6DDB06BE3AB1624D36C6 +C0F31E3B9BFED8691709D747DC2550915DE2A2486B7E74DD1665F350D2FFAA8E +81E8671F67776964ED20C46E2FCD2CF7B3E0B559FD8C9A24C39611E930D0EB7F +B28FAA043903F3E4A0E3C1856CF7EDFDA670FA030C2A78A99F4FC80207E17A20 +63C316F77D88676C3FB96B680B1A27180087FAA1FB5CBED05EC3BA0CC5566CBF +496545871367621CC713131BD73F6C37064EF652DB3CF175AE9636ADFFF84259 +25A185AD1F4582845C8D4B095B4F7628F1D44C79FDD16E20638698C2D3AE2797 +04723053FD9ED7D54F2A64C09CA1FC60D3410E42196E42BB914E4C4A04C39599 +51BB33559A9EDDE6FD37E9876659831E92E1FC5FB389E5C89A0D59F792AC9D51 +2A27FD50F713B97D32D83A216241DA10B43928565CFA592C54A4288118B6989C +8BC97A4A1E3C8EF78B1E17C18B4D36F48067C9746CE3109914324B9FFAB62B27 +603ECA751FE7AABFC5E38DE09BDE9E575EA00E8726C3918DB505D2264A510EFD +117D3F834DCD09796193CC5D6911FC7BA69DBC8350468534353B20E8EBC077F0 +9CA9090C11E7FB960DF3596125E52411C38A7E5C36F88313F84FEA1916C5FCC9 +BD772A1B9DDD67BD21B117F9F2F00FB7B1EBA1B5DF9CD89CD46E0BFA65199E62 +FB5C7F1557C60A36D87898E8C2BCDEEF99040B45585C0ACAD8E573901AAD634D +D2F69B4CB22412EDA3C74D5D6098E8BAA1D25A1B78D07FB93A58F84EAB79ADDE +E84D39DAA5C0E94FE8951AD145AF05E9A2A4432B7BB6E853FE441EAD4DECD57D +D8E96957622DBF00DF38825C428ADEE495F1CCB5B25F08CCA276DCB042A63CC8 +D610CF464BB435CF4716ABB81A7166EA48CD9855BAD9046C898390441B7435D2 +FFC98669E81324854E750F49F64FD19D69A10A92328F2A4B11DBC02EB1F7CC46 +54FD66F66A32B02C57488F8BB468D73DAB1B3982DF8405BA4F1CEA9C76D10F54 +F5481A0C3DECCF250DF79F6B614B3E7CDC0571E95FC4478A20CDB3E4D4B83ECD +3C747CE9D175AF8F8E0E435A7D5C498BBD387D9041DBBA0EB62A5035838D7E45 +4B0717C5CC75BEF851558280983D72DEE80A0EC3F685A2467C6D22F4E33C4D6A +494589594DB320011E40993D0942E3D26B507E61BFA17A3FE55157225468E2BC +6C63EF000588FF08D4E0F8D244152FC03B35FA6C5F6BAEC28D34F3FDFDBDFB8F +90DAE0DFD3D284A3E859AA4F79091E373D27C04A82819A2E91AF7736AA070F56 +2429F1077B9F32E7F1700AF99146863A82481D0E78729E9EAEA3C2FFDED364BA +D88A837491D5A6428294F60C608A3483A2BFA25FE5E0FEA30E984C46E25D98B0 +28B708C01494CF33D00C0174E18E52F9B2EA7F921827505A980BCCDD191E1B8C +D6BEDFA50F653B88CB0144871B2AE58835B15F7CE53F731CCBDD056672574ED0 +7BEF33FAC905EBCD9D47B82F749B30D14CED4D0907DCF3DFCF0185BA1CBE722C +49D7186BF7981DFCE6B2679E177569941FCD563FC3B9B75610847279C1A01341 +AD3C35B4752799789DFC7D2A1F5F0DFAF89C498DE1A771DFCBE9816971C5313B +5AA89B10C8C4094049570C394A837B031BE0A8AED0A74123CCBBCE2DE1671841 +397237C7827A5BC42574E2AD0605F84B77261DD7DEF10EDE93BA9D61FF8174BD +3BA0A966728BBBAA807DABFC3108209752FCEAD24BEBC8B22603C9E7B158E86E +8873BB01E6D25A09F5FDFBB6EDD3FAF6C672461644BF76ADFDE82DE718BF11F9 +A75433926E4B37556EF4BE8110D82A385C324DAEC3F37D89434C5EC8CA3286F3 +A0819C04DA7E4E48CEFBA97BCFB6005D3B3DF4A8880D3349FB15EB7A614FCAB6 +806ED53B9BA76C02E89D161E8A880ACE8E4201029C62DF57099634EEFE3FC7C5 +A755374ACCBCA10435F24D5F649EC05D4CBF39150A893984A177ECB0D3956D88 +798954C873DFCE8F57D13D6652CC928E9F80B4B6D47C5CF9B17BF89456C7B91F +4717C990911E19C595B52D19C4E5DD70AB3183C4165A4217ABCE21EBF6115E53 +8A1774E1A998893F0668FDF637A05178F5F1CC675CFE42E67D56C3365A762FE6 +DB7B670A60C81104B9237F5BE835B38184D56DEFCA72130240A2C543035B4418 +384ECD8189CD5B7966663EC5B42A83406D06210A37C65D02F7C6CDC3C499C574 +4A4E719EB0F14EAF5786A385D9BA4A04D3B7EDCF1BB35D3243264DE8AEA06AA7 +28DEBC7B95023FE76C18E9CE32FBF3AB800F3F8C9FB5211BDCF93469DF59BDD0 +662345D4D57D9A56BAB5A145DCBCE29521E30DE7C6637A812E64253584D66BD3 +83BBDB9B8A1AC464FB53009D543B74F07B234B4E1D523DAB41EEFCD319465AE1 +BEFF3DC939164B65A06C6F60AFC0126E093166A842B40F8C39693AEAE9BCDAC9 +758B1163F4AEB042E8AE1385672B62B161D83CEDD0889080CE8F76900B82F82D +B84192D470A0C3C80C5E15C1E3ED8FD582825FC18A055C40FAE681E1EC4B16B6 +53A1723815E7D7E8C65553F97D7577859E4E63FD7EA4508825B75FD8FF0F49D8 +03047786DD59110FB7F422C6C625992E86C719F6932ADBA81CBE1C43C63DD43C +50D79466C8AA5166B8C664D8F6E90F1A807E8EF26A1B69DC6314B72F20A390A2 +98599D640CC42ECD583F6405828CA8408EAEBE5997D15BA79060AD9C8E5FFF57 +8B64D12E6AD37373570EDCD19FFD63951EA8BA780A2D01F1B9670BB636088C3C +4B1A8706556D8EB05F15B34A549905C330004A66083B88D6D6D3B538B93F7090 +4719658F96F98FA64F2D8773ED8BA488CDA55ED6D75AD2B8E9AF47AC86FC2FB8 +29CF1A792379143993D9E20240DCA56D3E7EFEA9466B0138175CDF149DBB6872 +565A8D48C7233A6AE4780373014CC5CD045CA08EB63631A50B8C05AA893A6128 +FAAFFAE38FC5C81D9320B116864DAEA14ECBF347953510B494993E459483D0E7 +7699A329D0EF527230463543C583EDD4D5C05CE0E81D1A51723300EA987314B2 +3352F4D19439CB60D500EBDDE5B3A293D4771A4AA137E76DF5688C50A65258EC +DD90D1060DB86A881F858ED21DE81E407FE74E9904E98BF659282B89D9ED0240 +535995B68AEA47B05601AC9BEF4735CF94BD905324CE61374AA17FC0AB3CE14D +23D28C1DDB70E9EB283ECBF96BC601C7B16810C46D996DEE582A41C995208793 +F88378EA764446F9AF8939AF830CC14D62345B40264362CAC8DA7D59953FC1EA +6DDCF2142D534C0D3C3EA587503BDF46F76C459772A60C5CC4716235B0EE1576 +690C4F6E9D1C6825253BDB9CE0C710D1F0BAD5193878AF0D3EE7D51D54C7E0FA +AFC54104158E7D0B6B9F7F83E7371AF8D278D861B91974135818DB29D89F1501 +A00CE9CCCA2662A93B447E9A5EBA74A719C811598CB09AA94CEE7D9EE8880967 +443D806099915D25D63021B4E57F359AC43911D42E07F6E8E3CBEC19B6C0496A +24C383E14E8CC8B664EDA0248B047951DFAF98D8D8F2FB531FC408FC123606ED +86788DBD7D42DA61B976B263685297224FEE5BBD981C5A45194046016A8B26E6 +F54EE7FD496AC4DEFA514BDA54EABDF41F1619C4E533363C5CF5914B25890331 +9A7F821F784004AEE9D10D4B47F75D0531F80AE71097B4DDE3B8BBD360EE2727 +3892959E0C7480895DDFE0A8999E18302F60979F5B2FC794F5AAEE205BE8FDB8 +84684F7B35DD6F88CF8C5AD2B982E6EFACCBBB7A4700A67CE00998252AD0B287 +E20D5AFA935A49B1ED106E71FA16355F1A54D64E0F8D2545D98FD99690C40B96 +1A9162AD79EBB7B613A015EF486FC56F2EEA41FA772EDA87137606EEBDB64E04 +E24856C6E819063B2CE246F7223C6330A36D624A597707D2385F43CC17D529AE +4997634BA6BC9090AB520E2C45EB729612B12F9D3FD91DC4C9EE74CFC552E56C +4D672D1306407D690974E5B3DE86C7EFE946DC7ACA248718FE3B2F699E01CEF2 +B70DCFB81F24AA2A2C220E14006B8D6E09C5101F6724E9D75BA1F465E211B1D5 +177E9F83AAC3F0DF18EB7454E61F76CB700DD59D8ABB42B1AEE8FD5565F85D70 +240B724E6D3C5935D8F42638DC82D9773CA3B78954ED6533F1D0BBAF1BCACBF8 +E0CDF3032CE880780EE8F56AC2182A46A319798C9C60D398BE16E654490428B5 +A480805FD3E59D75A2E154C1016D210D4DD3E11639E9F2AE510694FE5F7D9733 +F594EBB8A17B5A2A2471C571D481E8C04D072511753927376F97F1E3009D3B31 +ABCD1C6DE64D19D471E39E7FABFD7978ECFA08E611A9932EAB8AFC7A4A1AB516 +6315B8363C62D112A9FCE8489156E6164BE073C1FA98E9D55E975B86ACD9CC87 +03542B3B79EACDDC0F525ADF9922868CF31F3D83D1E392ADF522E46D9E71EDF5 +25C3FF53ACCB292A8604CC32E8B3051AC8BBACD05948612D337DED7C027E4EB8 +F5ED77D4966D1A6B32722613F9BE146E5D7A61ACEEC0B8472E95B4E8266DB146 +8B1991DFEC19482C9E1D4058016E0EE9B2545B07CB4810F564B10D0EA86BD066 +41F027E003DEC79F80D11E9452035B4093FDB920B535C18EF20305534855287F +DCECDAD9A1CBCD79CCADBAB8F3B55B0E59001E587A81B5D02EE45FC1672C411E +FBEB21598F9FFCD05C55AAAA281AACA5193DA116B1F46ACB96F728D40476BD89 +542BD47C984849AB998D6DA2AF989EC1BB9A26F4361C610919969F7DA2771B7B +055F44BF8DED74CDD91CA5609918ED52354ABEFF2DA73C1DE643FA90FE4FF2B3 +830743AB648D2A108FF8CBBEEC1DCB62A71490A6D574AB2C36792CC00CE631D1 +984014A7B9508C3FC71CEEDD417F6E31F5BBC6F1FC0AE55155F9D56A1AA196C3 +A696F91CDEA58317BE9E8B37F112E6076C765B1C25F0CC6F671428C91A57C63A +1A69F5931B1875664D489A65698A2BCD637965FA5001F2AAE617BD5AE2DF9B9D +0E230D097AEBEA7551245B5F6B4D98EBB1DD23C6ACBE887FAB49E9F271051F15 +E6EE147FA3B91FCBB5F0D571D69E1C942BAD057F13E4D44B4C3BCDA1A34B4A1B +FC1B3938C1A20FF5F3C2F479FA651F015C4BB08BC019A692462F15CF9DA72D1B +04DB4C99E145218840246E4337700D009123F528AB89469B888C9DFA38E032B2 +7E2256BFB68648EB06197B1DA3F73AE3DBF313A8C661499CC0693C8D3557F0EE +B9479448E1A85B014F1D178C6BE2B625EE25EB51CDC71B9510793AA5D823CF6D +7328E54584076DF26B858C9836077C4A2381F4A6EE19F4E801772C0DBA42508A +3D92EA34CD0921CDD2C56A1D9ACEC3CEB200626FE3CAF033E24800DBD51E6C82 +FA0F7E37F3DA97A83227358C5B20549859645E819C193B303A957229F66896EB +225922A128B1333C3AC8C616D348C1FE225DE03782E6E5719F13DB747D0846E9 +C3C66728C9099069DEF69A4F254188C46177757DEACB597E8CEDE41658FA405D +921E8F71F91F455C0A11B8B517BEE363690C14FBB31232239F5A095CBFC7941A +95815705868B3BE129F81BEE586F90983A28C04543E049BE4A6CB0EDC3EF4929 +D2499DD08DF2A3BCC55CAF2AEB42695A8016A4A1A52D4688AE0C4867363AFA12 +3EED7AF3200320C1EA166FBE2A42BE3157AB633610FAF827666C239F5E6310EF +BBC01419156AB3022DC29B5C64E8F676150AB1A5CB91AE6E9453A60A5A24607D +AC7F2B5790429364E4E6BC6F3731610769EA645101C3329C77CC30D7E7742FA9 +6E47A1F4A95E5B9A9DF448B03C764390C74B6CE38FD8A43E0FD49B19E5508491 +4A47FDA43F186BDECD6D9FD0F1D592FE384F09D4415EA6FB9AAD57F11465E56B +CC7CF0F78A498F3B63985EE28F4E18557DB38101282E3FF5827569B33DE8510D +9ACB69C2D3F13D791A4E095B77A92081D8943E3027F6A8AE7DF75A8946CBCC5D +D397485BF27B974A5708AB8C06AF9B9C695725B49D670891EB0C87A4B650F117 +381EDC200C8172A35F37542F207FEFE29ED8337427230C2B16536FAC2C89B550 +6F714AC7D8870775AB79A072355DE4A5B4D1B4520FF18D626A8BD3F6BEA2A17A +8EA40E7A82494F7C063830B6B81779212BE325569F482C0239E11CAD51B49207 +012F36787400AEED36BC61A6DA3B497E86D4BE1E849E577C89A72EF77A6E252E +153E83DBBBE61BD4AE74D470F8A729E385628C9B60D12A999C345C19348A0F95 +6EE4379A54C267466537316ED4BC409483351B747C91241C1CF777B72491D418 +8BD37616222529F07681FE0F43B3ADA4847A612C7C56B5B32D8011D13A9DC226 +116C53C017F2E54C5D2EAB0047BC9B01A9A414D2EF9F51D9E9861615CFD729B4 +FCADE9B5C9EEC3D84C9F97B2528CDE18C4B461FD56A5327771C977B13E967091 +B8B375C0E7A63D93681104AA2D00161D1A9FC91457DEAB8114A9EA93EF9AC7CD +B292CA7EB423DF2EA9183A267953D4B431A5C532B26B12A4D2D681804DB2A908 +4E15E30372E42740E3E04E044BB9E97252B95A7BEE944E3840A4E9A327ECD640 +38194D75C20F80497DB572929D7B1DE23C5150A242A5D042988C83F39BB55958 +E3BFAEC4582969F5690715B30A44B6CFBF33DF363400A52191EB2BBCC599F2B2 +F4FABAE2BADBA0731D59F1B2E43C97769BFD3B9CD210018080BB38A06DE7A42B +D717CFA65D48118E5FFB29C2DC85E1D3068261EA15CD6F851C4DE7FBE2D6B4C7 +A6EB8752F6B4BF9C5DFB7C3282D56FD0E1036F3D74C2A96B4D308D91C1D83F93 +E59BB92411EE3CFA1169E5C92A94A32CBAEC1B570CC34F14B1810C1144283402 +F6021537D75F7B98DA7459921CAF5DE5323C1C1400C79B1E9BAFE971F7F21268 +4AC50D4D0DEF6E15F2DCB9541C04FE993AF7982AE5F9C4C6CBCA302B76EA1A6F +DFC4D325A8CBF550FFA5D9298B4DC9D016A66FC44D3ACD5F26C980F61AC2A49E +B738EFA01CFA1ACC7F251E87195F70385CC3B19D3D7701CDF9E4CD52FAB6AC67 +C86FEAA4A793FBA499A7601F95F9F934495FE5AF5EC8CCB8F1C061E9733EC0C4 +845364B1F0A232EAF557C293EE11704617B82DB310FB50B152A711EDAA13182F +6AB5B07064C07CCEBCB7ED57669150C74A2E72E95CB979EB18E439D8C2C55C23 +3A66A30F43B2C40B939592405EACE804CF149A667DD795016439668BF538913D +A46FE03F8A45B348EFB1F5A454BD392390225351099E12068DBD8EFC37365FB2 +899734B4D85E0AD8D98F18EDB76389713CE43C0DD27D4E0AD99BD3CED8359325 +CDFFB957B75D05325AF1FE0532260F41AD9C37E5533019AD8ED57A1D7214A0B7 +FE158F9A5DB18CBDB2CEF1829C6DC6CDE3A14D2E7BE72648EE28C088EE03CD66 +EEE9C566F8380473199F069C73C621C8A8FA0A3E606730A2A6E3B0C72C09B0AF +46803CA2D1134E117D38C827AB65BE4F5F8B1E43F1294E07C38924243796B797 +4F27F3124FFEB4609518D629C0FCCDF235363A523C0F6AC3D37BCEB1DCD10231 +6ED57B4137242BBAD3F625CB0D79AF1A46DFD85232CC90F5EAB36E950CC5D7FC +345A443B7F1CCF0028A6759F37F7356EBEC1B1271FA22BB0A72DE74EED1F8E5C +C9A20D9D2115C7FEA8EC01F15FA28A2F4537A3C21EF9A168017327BC03FB37EE +FA1E0ED6BD673F79CC1DC21B88C26550A14AEEEBDDB1E61CCC504157E461E29C +7BDB3D919A2986B5EC8EB2D732B0B4BFF561DAA1E9618CD256E219C4DE36B69F +4B6DFCF81B78F00D14145F21FFE675850CDDB32D499BDFBC1EC0D35787225CD3 +DEDD89FDAEE89501C4E5850F06BD948E95FAA06BFD2556BDB16259D19086598D +DA982F4D7593DC56130F818CB25DD92F2388520E730C8B3ACA4E03A3CF8CF205 +FFCF113E4278F0B5869E37AF3460C9BD1DE520D277AE1A09F85E276D6F16D7DE +C04E12DA6EB6FEE8F9285E888ECA6B408A8EE929ED51F5A7CAF5FF5F87579604 +889BFC328A4E43D308DF7B6F89C059DBDD4458D521A4FFD66E8339D883E1B7D5 +951E32532F60D1B75845DAE58332BDDE7A72A8FAD548E31202130EE23E730ABE +C9007226F3C24AD929158D6A266A045C715B293A3D7E8447CBE6062BFEBD7956 +9088865031AD88B5329D104969A1FAD918F828208B743B650ABA1F345D9D6227 +5E4AF25448CCBB425DAE77E2CB9B73C73E0247C3DBE67F7BC3401433DBE53E08 +561295690C9F93A07D10093DC2AE953174ACA5358B40F3BA9DCF0710C49976A3 +C482B698FA107B25B246789B91473B63B4C9396997BBE4C8A5821E9F6C48598F +41FBEBA01C031E5B3107A5D20839907D62D51F721ABD116A40692084A06818D6 +19470FE3BF24062BA7E62A27841DDC319496790E027DBCD4EB1B87810F936D5A +D33212E5CD654BDF7E245D04A555640DBD89A6A998A6A2377CA8AC615734035E +44ACD5BCBDAF14DD345D8D6B8A34AE91A6AFA2A7FE4B09761A732DB70692691C +774659E2768D84943091417976A6ABE11095605C8269813BB4811F0F47A8F669 +34E3168FA6A02E4DA5335ECFFC0077F7D3D4573BFDE1D22E5FC066AB27579763 +422F27362794478CA59D87E9B4049F7CCBF47854774BE273A6B6F0638F897E92 +741F3144F7BDAC4010929BD605D3C52234F5EAA239A68FA7C52CE2B184538C06 +E0A90BE79DD5FDAD372D95213E30F9C2A999E21F598BDEAF6315F5C3BCDD6044 +92733C0B012F610C25E146CB6F17AA6CBDCA88116E7B551B3B882179441E0568 +852F3E714BAFDE7ABDB93BBA3F1C04E4FFE87D786B38CDE07FC9797AE301F3BC +70013745A652EA5A8DB0265E846BE240D4A456E3B1953553D1D36781FBF11C50 +90C2236FC2CAECBC91C0FC04FC9F3B86BA31684BE56309027044EDAC9997EC57 +247D28A677AEE4B0844EEC683A2227969EF18F52D1E9C926569AFB482CC0C475 +E0217037378CFF3B701A798074AE248751A7DDA18EC1138BEB5E57FFED63B920 +D9BE59FE503DD1EE2909A7FDE826B40A419CB0089C91D6A134EAC709CAC514CD +DA21620C37994A81709C97314C1A09BA6AF7206122BC143310CF7D9CDE96AFFD +ABF6B7400862212ED910F90C9E9B90BA2F7AE0364472576AE09C193D7F327016 +D9C68AF2F55C13FE4AB71C2B4C7D9A9A58AA097B69447DFCD98219A2998BDA74 +00807ADFFF265B30D1A9A2D967856C911A15D89A147016F70099D7AA84E661A3 +64EE3A3E379ACF29DDE519099453FF94441B19405D7C873F6DDCAB0EA55E8271 +ABF2B29FE36B9D3B2461D01DEDDEA93EE39BA85B6424D70A72AA4B05B19B6D42 +D46298C7D23E94A88FACA6D476DC37E379F537B80454A61678262B39B84E0530 +F21082CD5EA2D11623EBB27340297A0311BC422690758E11E6A2D14668C3FED6 +FF932118DCFBB0E4E8B723A2EB58367A96B16B9E3E466F9ABBD458C866CEB4EB +D326D8BBAC28163105F537220F240FFCDB3CC8D35F60AEF379B3679ACF3F86A3 +C0E32746EA9F67C084B2A80866DC1564CD4118E13D0E3842B623191E849EBD64 +8E89ED9377F700D60B0FB5A4248156A1D5E8400C21A2EF623730FE9530382652 +705E3C9228D9963BE6AA380A98574C52EB657B6F2E142AF3F0250FE04EA1E913 +BF95A78EC7A6A68FFFE15FE8128F3EAEFD692A17CA5F779C705FD1896B1C9BE2 +09E8D23F3BE13C3761DCAC7D89679EB558BFE8BF9A03B30D8790B7247E0C094A +A0E14581C633C41987F33D225F9ABE5E1547310A2F2C755CF580485D7328E451 +95D7C240A674262ADFE530034D164B066204358E87699216995BEDF3C437A77A +6D9DEAA3B088DBE3C510FAF44F92D11A9795B81682F992318675B181532BAD48 +7C30BFF33FFC7B0D756EB2FF171DD0FB853178FDB08A48418A8494C4538D8300 +50A48E926152E47B225932AA491D20754B115C867C40930F85ECF5D82F43FD4A +E1FB09A16485AA8DE8481E2344C8BD2EC4C3EE82BDBD4EF12B793B74454BEB72 +10DE166D7941C0AE41D9822B8B1A5BFF31A411A95321D4B3F81922E711C2C594 +7C8D17D535A289F32F573F5435EF81F7A6E15D2A27E6020CA9602DCE96520A5E +91043C649E41950750AC2B991524FE956D3A5AD964D1313C2EA55D4B5355F7D0 +49C8838BBF2C970A150F272805E66AAE44582A5840D7F0E206D82A411E7BFDCD +8C52A9BE758D312192DDC8FF3C4B3900879307282815E4BF9511AA1810509CF7 +14AA4025436A8E20702E2BBE02E0060C875D1B25FA984A3165B00F5CB82962C6 +6D2C2B594AC551828A416536FB02BCD49090FA6C7AB58AD771D02F6895374768 +4FCFE729D2827DF513E1C60E4716CC859E4D87B049ECC8986B68E7E5C0FD1C04 +AF1DA089D0FB03897D48E7D4F2277B8AEAD3A24147D0936C54D487B434C48B19 +E38A0109C9CB131359FB2FE6DBEBDF180CA8C12C2ABCCB46931C662DB2D3DB5C +0CCBDB6F00EC033C9F923DBBAAAC0BBBF4A35ABA8F2D4AE7F868213721F10D51 +42BABD11720505345566C5E2594867DE91E81DE20709BAC6888CF96B4728E2DA +9CB5032F3FA434B95F6E55F484E1570565C0424087D1FE65A7BA94459FDECB20 +02A522FE8ED23D6EBB943F185E966F7F027C183AB1127A0A7EE43A9EFB4A127B +43FCE7527CA6D3C753626DD9D35137B7BEFB4D0C7A0428D6E12512E63BA0B82A +D8E22C7D40477131568FD5B9E01F4C23022190578DF4B596FCAE21A6CAC7D573 +BAF887E02FD103350C0C6483732E94B507718B8A9A378DF180A41EC67BDA506E +4D8FB98046D97A626284261FF30F456D211D5C384A16887706B8C659B2281B9E +AD07F74DC327C12AD6B828AB0CB757A83BD9D135BD0799B5F8969F5E00DBADE8 +5A8D191228CB014330CF17720C5C2B8564BF78F396B9F518F96A92CE80D9D64A +4DE45FA6DB005EC8CAFC6C997E9F3B1688BAE40F0FA54A7F5E9B7AB6664F2E94 +1A653398F4B3E45854D3EF1789E8F769BA3816D5EF896A997FB64E0A8D06365A +ADF839A43899B0FD2411D851E273B4B0BFB5A1174AD6D0CEB05915F1A8229547 +F9220EF578AA6A561D949B48D1B6185F2058F800BBD758317E4D555869BDE73A +A5B130A31718C787A4302B76297F94C503A442412CD263F5510A39E6F9494664 +724329E58CF259950CD1579297B9956BB9435B6D44801C058E28DA4911C19CB5 +368397D382C4C6BED80E1AC6CB7716E9C83CBACB87173CAF0A7B56A657BBCEE2 +8D252EFC0FF59ADAFC582146D2074BC71A3BC55D2B6694842C0AC9DE6FC0BA58 +C67AA00F8BE31EF69343479C04F1E4718A99EDEF7C54EA07F6FDB1673B515CB7 +90BD510B6915016564A3C69C7DD10D2896C21E1893C441243AC3D3223F878DB3 +D98A58573D71008F7B5A574AE8AFF1D9BE4BDFA755459A0AFA87EB60BA40E9E3 +86ACE3DC9C8C83CB780B705390EF58C22AD86E3AF8AE9EC7B098E3A4CB7A20C2 +364844C91C9B092F3C80E5F0C0875C87CAB85005893837D2A84288F50F595A2A +C6F7524DA556249A48B1D6E407AAECEC725E46A22EB1B0CB8A03D1C853396D14 +8135A883BF18DF240F8B19CB176B064E685B60B93B16C74B6E988AA18E610FC0 +150AE778A8AC1043B75F43D477BD8B5EFF5BEBE679AE42571C7A8974CF07F55D +1FDBE94C2B83D8D50C6B1FB66178051BF1C42EB489C0EBC39DE09549DADFC50C +8140F04C4D065549800E1DCCFE65BF708B09D177C19D3AB5AEC42DD4CB645A7E +C52A360D67920A2F379DF0796DB1D31B2BB681E759279CB093F545262152EF1A +EBC19FAB38F4649CE126E4051AC6258C6C301A2285DEE5605FA2B337356E0B36 +2D927CB3361B895447EE897BADC86B875E28679DAA7A23C71590BA5F59BE94B1 +18670F3934CD9A3402A4C8A154EF6A8C9A0238F2F2BA7C4CC5C8CBB774923CC1 +2F12543FECCB1635680275A48309AA322D43CDA5109EE8E6E7E8472EF199785D +9E84A5D50E433A860494349B55CF38808CB51851F21281959CE4A43781AE9250 +54011F5849FD5B45940616AC942483A87C1165D191B856C9D8479501E9A59E8C +13B9FBF1083FA716AB4D7FC885186C551085354D17684BB7B0F0E9EB9C4A1205 +3383639CED121ED2BDB7A52356806A46954A06C00894DC228F22E704FA3E30B9 +204B85BADD5411B313F7FD01E02FC927682DF3E8EB3BD0EAF002448154C8DAA9 +8B2691D0AF9A6E6DB9DFEF0FAA136AE9A99EEF6F3A9B55EF49C85A083EC02514 +05C8B5D5FE8A273C8FD656ED257F11D49504F91CBA6933DA45AE47F7AA3013CD +23825CD92D445B052A383CCE81EFC50927C94D9C1C29D6EF54E5BE20D876A751 +32339988D4D440EB7561E5B90F4EA7586010566272E81FA73289981CB2166E79 +4FB33F7CA98FD016ED602C78529173B3B976F11A9CA86437F942ED0AA26B5EDD +D089AFCA5E3285B85D390031D1A942BE38B826BA08E36E6A275C87DC5477FC15 +1ACCA330651DD43750D3B0332C55197D91345D491DF96764DE969F55E6612354 +A540402879BE16BB2A08E45EA16DDF58645B86F3884E5A2669DA970E01156162 +D74A3AC0104DCF86C11C4F19236C586FE659844F0200868570BB4BCE1B529C2C +A216F27DD9EC638F671B049CBA7F96D0DC3402478CC833E3CE19D4B42C1FF119 +39268958A932BCAF36DC99B83061149B18C800E4196291DAA2E5D6983353EC41 +966F9303327A7DDA28D041555320E4B3B5DEBAD49CBC043DF4D92C2E5F82F3E8 +5C79AAA7C3B9CAFD96A39F58914D24E1B815EA03B238FF763763DBE885E8AD8A +C58A31E220ED192C61D9E1F3C5C13730744A2343B9BE703EDAEB42C9A53B0CA9 +BE6910779D1F94BB4789D3611A1D51F555448B8661249459CA515AFD0640D3CE +A564907F819B3752DFDD134FC5978398AF0C57B969D5B24A92CF99F2A0DFC447 +751F988B3AC1E5E55382673EDEB9CBCDB9825E7998F332A04EEA0BD207143EFD +BA2A4EDAFB487EACF8B4753A7343915C0EED8E9831BDD37BE699F32F0D09206B +FF1CE2BFEC49DEBD085733DAEB2720E03CC19A8B995FD2FFAE293C720A59DE13 +D7181515582AF67F9B51A1F8531A5B0A63BBCE4BB6146DAA1CD4281CD4166F38 +012F72EBD053D5DB3D2AF3D84EF7B38EC4E6845395395DC12F97526437F7B839 +F6633DC3CBAEC03D5391314E6C2B94B8392B1848527544E28F808A50CFE94745 +B6C2E7BEB710279420E2284F37657B59248DDE57C149E34BD2B9BF6F41207188 +22D28A609D2EFEC2F04B22DA370761E1C8FB04A7A132A157F25593FBF6A62F88 +4697C4E6C2E70B57443D08F5FAD9DB2AB398D2C47B039573C85546FCDBCBB5FB +453B9CC6D93DDA6D58B495099B5D204AC291074CDF0319957383AD958390FD8E +BF768029B92022E9E7CD009620AB491330B8270FB8B94202C94E41397357167F +5BD8BBEA013F3278EA0A1EA4A6CB25527C92F5BF9A2F67A38FF2488B09C89B8E +A5BBAF61E672FECFF5511AA05A3AE001463483D86B60C7E61939FDF6306093C5 +E621F084D993ED0D4ADD7F58F9D0FD05932E2E4DF4C2CEB1B0401F6254DD0899 +B87E41C1CAA87981E7E2E94BEF85F5FF3C260710408B536EDAF78189E816F2FF +2ABA6F132830117F95DFE7C0CFD740E20826E875DAE1F6E7AE8333B1C20ADF8B +B882B45CCEC42A6EA5F2A50F100987D50A1F8E5FA9C00AE132D77740F48B6D3B +E6E12B534A97663A3695491CF4E42E66DA66FB2EC1531AB292E3D8238BDEEBE9 +DBBBABA1498310DCE5B1B7B99464C463637218A766F1B731CCDB17AB17F4FBEF +47E7FF5962EAAF1320C667A645E25FBFEE4D882DDF31C9785628D32988F00F4D +87FF88DBCD2370661F85A16B82125D753CD02688FFF8FCC59D318EDEB5E56010 +16BFB2A8E8A151898F548C6C69BD17857F6427DB8102711103BDB2BD1C0A8F63 +31A1167EFF41E0E5B814AEBD022E941109E8BE0987FD33EDBBDDD203A18A3FAB +2A720481F15233739E1E882A191ACA4B051BF6549A0FE597041B33DFA55BC396 +A3D200D46DEB2071C756FC050132CF58BC768224387C4B53F646EF9972266FDC +210F24A85881F5EFCA127055FB69324B377802CC1CEF29C1A5D1C894337D0ADF +7B5EAB50B40D91D3B0A2C3698D1603FE27CAB713502ECC3BE3A543802BB18627 +1F3148A1F9F31C8905205B6348E39498BE0E24B558ED3D061CC47D7544FB10CA +EE4B5F5FC8161C9A341AC7CDC83F9D506AD6704554A31D20C26DBA17B6F011DD +71232C8BB6C1EC2993160ED28B5C15A330FC1EB37FDB83C2B7FF9857138A1F75 +3D91CEB5BFC8CE44159EC17B0462D274D75C4EA3C7A519067B8B817A9C6E63C0 +33989FAB825455369FA87EB7BBC8E80A9387E0772B22B2AE50A2EBCBD0E087A8 +18026C8BE1110F88E341751A56DE4D00B3EFC3207488097453DA8FCFA4A551E5 +5CC41FF1571C73BC0FD6ABC360E406713DA218331CA552B23B33F5C689DD2356 +17D4A4AB5E0983DBA0287557E477CBEA196CC9D04D7F101AF7D15EB52A3B8F9B +0BAB6EAFE12C85DC36A106DBA34997E9C669DBA7F2FADBE2DA80725736E5D681 +9E03E69A866ECDFB07FF17E0BA3F9270C633C1E8FA8C259DAA9407A9C8EA2208 +E0B22230BF8A84CA23386B55C5DD8E5DF685541A0BF372FB76C9F65835B339A3 +74E10EFDDF2E84872899B3C2ED02BBBD466EF25660E416575F8D01B6A191AFFA +51897804456707B70534647A4C09D849309102336B5D6F66CC544B2A37E1D8A2 +01F71DEDB222D2A42D74C99B14C8E834F831BC6BDD4348A514D35B666CA56ED2 +D93BABAEF353159474732E67F45199411CF000C7D4B1AB7BB569DC5F3F9EB893 +13FF595AD8F1A41B50CDDA27778C68BEFDE28CC79AB8B94377919B318E32F7B4 +7B3850320E1509452AA99F6F65E1C5C79CF67B4753528D07DD8BCAABC5BCCDA4 +76759D0343C3D4566270EC7F2665BB459A9FBB81A85F7343A5E14C7B7D262072 +FC37886F1CCC8F17DC5122F4978DB35E157310E6C355414DF6CC4532BEA621F2 +14426EEF4D7BCA2BD46419AF7E01B659F04F3C663FD10B4F09EF9F9ADB946319 +EF6C61A97667B2898256575DC116363B892DC5509652A1166C3D235A0CFF2135 +60675E209ACC3E057A38BD343EA5C01DAA61AFA53584C3E76C24212FD2DB65E9 +B2D99F97874228101DD2F38D85AB8E394B0C93076AE8310A6370BD12074EED63 +39C6160DFB49AE01E384825CABE01674B9AD61FB7EE61BBEF839C40E0B9E1081 +5F50BF8BDB6244230F2C06C421847031E5378874BC3CEED207DF0DA572FB92A9 +24C312CC4FEBE8AC67117837A6689B9A4C1CF677EE4B74BC60C12C3796FC5D3B +259907D399538B1E207BA2170472980AD2713092513D67D8A475410884883A96 +176D772793DD06855DEDADE128239C387D36CD8DB2E1D3174102BFD70BF8B2E1 +7F68744226293C8CD39C99D939EB6A4E635C19929FBA4D49B3F576B53FCF7257 +EADBA531A9316496118352BFEEAB3862370148E1A20E07D93C7958EA113DC037 +5A99A7C8658CE77F01C1B769618205E86D966F5D0F3A276732CBA6800576B5C5 +F31E739B709D75526F32B6E796E7F659AB80AB86A3986742441EB99B8EA3614D +880F9F37671E5BC3F8CE19B38EA6EE0693CECA57A6D7158EDCEBBECC70E1E429 +C1CBCD515EDC5AD996E877CA88B290E342D82F56ACAD5465790A46DDB20C5D81 +9C70A24BFEAA39A9155532380036451E1CB48ED7B7DBCCB686BF9A32041072F3 +3879D310C2E50A6646271800B2422E0C29974D6A02337B2BE484CA0D266F8F0D +5B5E13C2595509B03FC95C8E37A20BC8FCF0A4B6CB6AD6C1F9FAFA02BA37B969 +2E0E8036EAE531074039D62ADDCB67F7A28B1815C04EB22F8234EAE30E773A54 +5F04842B429034472097D2852282BD77A39101904B505825616B09A9F5BC1377 +678FCBBF4689E4A980A46C83AB17E2AE5C222BE8A967D448AA9492C106D259F4 +17B5AC04797F36B2BBFF569CB8F0E48CE727F7741A1B57A71655E77736CE6D26 +4A6B86E078016BAE886E069F6FD040315C89C3A441EE0A92EBFDB02D81AD44DF +F4F29AEFE0390448CE106B5A23143E9C34DC75C157C759CBCCF87E47CFEC0C03 +3148060FCDFFCD94B034DCB302FE796F06649C209DE276FC313D6A10189862B7 +D1C21075D80C30BA1F21AF907F0A9F38BD87F485F9DF469C8C9A9ADBB85F3679 +9839E5403BD31457AB9DB726DAC9CFF72EE7C3DFB0DA829DD28F50701FFD3B3D +7203F36E2E5142A210B695BFAEE814274CBA880DDEFDEE86FC499D203FD205E5 +6A11E5571369718AD1E56508C161A48A059098E7FF3D2BD0898A17F591635391 +B81544B0FF21B57B5D6507F57EFEB2DEC894970513304FADF02D78747E900164 +56C90030E3E8F2D728128C19410E0D2CC1A34257F371A856D0B5DED3C887DCB9 +76C65ACCEC3089352636F977026767AF681F829435E68124FDC3F4F22C1A18EE +9501478B1627E6E8C9E0F0737107EF242AC54676AB4F632DFB1FD1DE937EC35C +64A0E35DB72A5B524449F65AE9054EEB9315971A43A48A12B82B81258D355979 +F50E3F34B4BF541FB2FE7B31190705BF86D1B7DDE8B8CF9433A6474A0B82CA9F +03ECA76DDE98DCC703EC6ECAA8589374B9B58C648D0B644D652EE872CFA2B9F4 +767DBC4D8DDD8E69172D8FC9E12D4A30380EFDBAF3C0210B881F1069D17456F0 +B6F4A005A1E9F8B5C673A91F52FE95FB8BE9DCCF76465BDC26BC7C29FD2D13D9 +EE86AC85C3F1526FD495A120FBD5AAC5238AB1AD736206128ED0D1755A5F7098 +8B91636223E9666726FB36AAA4B02C3FC1E37CDA969175596B571B7D792EE705 +F72DBC6BB24E6D5E592AAF9B9D6CCC2469C389D25549A1E9FFC3B549C12BB96B +66299ECA3C0E9E2AE6DDD699E07A59593F8DD214897C22214C7300A517F7CD1E +D2144B07851F5E38E70886C9F06AD8CE90C35BBD91334EDE8A627735A4E8AFB4 +843D624A11113B8EBA95B1C55452D5A1D1E37532DFE8004F021A919AC07C5906 +090BB1AE3AD8B590686265C5E73FA528D9DCD44CABC78A392967031A08E12F7D +5E70778013B30559D74E4C6BA2B551500CF1071B722234DE8B4F6EBABA2988E9 +B67E527FFA26B606977B273B6555CD0B9DDDB4913B1D233933B1ACBD74EB59AB +BAD67D6047E712C4C144EC5EDC74F53D94A790806FACBAA02E7E2F3CFA6CDA93 +F337ADE914C9DC9937CE95F823931CCA1DFD7B2BB3B4E057EDEC6373F8B6E3A2 +2F547929D2083E6795A032AC0E892EA1E4DE0F5A97785B067CBF04C86BFB4B1A +911BD9E498A3C3E11BCF09EA0CB1AEB8B966C7504AC1FA2765D172E0A026F215 +4BB374CF5AF876BB152546EA55BAD5E3ED4504AB544200A703EAC71DCEA9F09F +B64AD56380576FE8F72C4147AF39BC522C9B13E8DBC11EEE1B216FA638604D49 +5A5417B6B9BB23A006983E01BF51884024AB44C8A0426FE01A1428E70478DD8F +EEA0EF6474E3F999F3F0BDA5B3C2368A618238706D1B4732E6E24368AEA068E9 +1345142CBD56044541347286877D92CDB2E42426F59D405791E7A17019260769 +0A0BF66417658C49261985D15092EA239DCDBFAB358B37FA22D6C91E34EFAFEF +824D6FECF0BDAA2C2FFB1ED169266318AFCA0509EDDC9F9F41C5ECB18A2C2BFC +824F82D4FECA753CD4A07A11BBF92A19525031F8A01AE2D2DA04611C4DB764B9 +39DF94E9FD03F0074840DD609F1058BC2FD065828FB587D38C8447EFF2FD999A +341E1F3201504B3123E7B19DA117BE5648B03E7964F6652148EBBCBDB3B5F167 +0187A61C00EDBA395538CD1C92D2C0AA9AD68A2BC0881E8F2A025E763B0C0EE2 +3E3E8A9E02DB95BCF2326CF8C9AEB14BDE8288D8992EF921A947970657F605C9 +E0B90DB7C5D16EC535F5830FAE43BE9488203705041635645A2A958A04FBE6AA +47CA6AE7952B5C944734178C9B86015C9D440C6D1A2D45834CDAAC19120EA2C9 +13C2790137B35075012779BE0249EEE679FFB95FBD04030845803CB299080F51 +BFA09748A6708C48964052C7D8502433AB1777EC4328140F7784DE3614C5024B +5351C63AE6DC3C064E126335F968067DE981706B3E907EFA1A73537F0B268E33 +521AF616B2B6EDCFA9B0FAB31B7AE7DC3A870D1968D0D4D1466AA7C923A923C4 +F86B6F4692B6B637322297221C69EEA47E9D7B46E726EE2FB8BD9866153BB505 +C1ADFB6545B6EC4E3ECE12EAD2B0CF05A0EC1CA8188991E90E3BD7151C234F11 +0EE146C0B9383B1FEA8C66D140EF9B4CECDD3B92C3E2633A0F6218D42A60CBB1 +01375E99A55510B06E4C307A91986A70AC40F11BAADABFEFF1E2D11AC9F791C4 +4AAB4546C037AC8200216F73E2626060D3817596C588D86D2E1105C0CF2845FD +8F1E084E431E651B5C90DC97FA78DF49F90AE9F923D889047FC7EFD70399FB5A +3FC6A2F5AC4C6BA217CAC25F0E01C65ED9A88A58429E396C9C0AF8D001EB1E1F +5E7E1CF6C5DCE293F84E96C6D004CB0D19827D5AEADBEB37E818B664381EE6D5 +270A60FFFD4857A695C480F6F2EA24E37A69B4A47B9D62A9E2831999C590E50D +7716AB8BA00DA97889DADDFE6D8AA93668C03CACFB051C8BB9226713D1E9BC75 +86CE9BB8059900D038CD0B31BD8230DEBF34FE8B6C9DEFC531B21D90FE4B6DCA +257C9410BA9CB32711BD79A11EC587921FE57B095DFD07F051F2892A1B6AA72C +34596217E819502427387BAA7E7C324C8C36E0E1EA3F3A3D16BD71486206FD5F +E881F999449812050164148E0776E1E84A1901C49BB4AB89845DC1082EB048C4 +1E8300F8474A3F5BF28C96AADA6A3AE3EDFBCFF9FF44254B41C9AAB0AF34E0B9 +6551C23F6371C135A2F6EC9239D949BFB5C27F3A46C5BF6E214CD9A24FCCE358 +E3DF152004AE936538E4E54B88F1A8D02646DF74CD50E205C68B3587CE090EEA +CB287AE009B551DF09FB77FCFB36973A68383E92575BF05387DEBA273ABD7579 +C772FA8F32B221EFA1A246EEFAE8B9354FE5C5B0583D37FB53B839BE68E80D91 +DA146A6DC4C8BB34D140EBDC678AC25B79B6BBFD37C9D73E57DB38ABF84C9A1B +BFD558468EBC5B96912E91FA3F4205F5ABFD7246D749900436B7C4D9D4C6F78B +7695E53781E9D7976937D21DA26F4A4C4EE02565AD55CC77798F86DC49D6136F +88182A88FD5CF4FC3D0B4ABD7C268C1B90BB850DC034C5B32B3605A07E9371A2 +B750C4F8B3B862221BB0F4AF1DB6AE3E77652F33FE9D95439F536B4EA4D4D226 +2A8E09AE1C980DB20855283DCA5410A62514842388A4127E93D304C350EBB09A +DC693B1D90AE851957DA25E06C795CE6C3090F5AA6AF587CB39405FA90316AAC +F980CE1041C8DCB55786D2A47C499B5CE0947546A588BBCF1149206967B15CDC +355EF3E9B9BF4ABE679EEE80187FBC57B317C194C9DF20BF344859567B8AA537 +B92E5196AD7B7F2C427EABED44C59FCAAEEAE18C3B518A39A1CAD14FEBDC311C +02EF80CCBBB3B023B5708920C91B2A835775D0E7AB0A0DF2E249F2AC0D2435EE +3BAA4A853E37F80C7EFFA56C6DA23BA618C5B259618460923EA12527D779BC05 +D3C20C410AD476F416D04489A2F4C82A4E583B3C5980A33BE766BC84CEEBC1E3 +FF77CBED10B8534A7540522E1D1D92A973700053D51DA6F89B10EB0EFADC289D +EC8B53E81B095B5599E77EB443CBAD4074FDCF7085D7645980894419447EF8E1 +945A692E3721B90B580518ABE6BEACE7BE71B920A6FB704E25321624A8D1A37C +9B01D6BFF2689A65B237ABAB3114112B7BEA16B66AFBC9E9D89F36CD4E638F18 +8926101C2B86A60EE12F6F432AAD3F5CCF22981DA0072DBDB1AB687F6E7ABED9 +84308AAA4662C8B9BC4A630E5FA5389EE050A9E4DF53B35D86C50150FAA3C0BA +465E05FD1CA77AA3E78B19A5DDD60E4CE308C0DD115CA303D7D105D33F9F252B +1D6C5764BDED6609EEF2400557658BD92C650DF037B7733FF5F5639E1B2973E3 +F673AA2E0319B4F0399D9784A25C08EED747CE2FC5AC3A8DCE5397BB03943E50 +866C1BB1FB0AFB847EE73DC3CC6B93BC7342DAC3D88727CFC0284A8FC2AD8B99 +DC7D6397043E8C5340B31E0568861EFADFC08212AF630E015E24C21AAF77F259 +089CF6C8D1E2D0136BA22707D9959981981CDEDEAC3375C1C9CFF0BF91785B8D +44EBCF873DDE5F6A4C590156BDC278B6910087262BC808A4409323E465FC7BE7 +847A33796D20B116B205C2B2888E02957520B5034EA2C4644F2E99CAB4330924 +71D1A7A65290E8D13D37C7A778116F16FD8A2B93F78601EE0E28CEE0B83FAFAD +B52146A221B9F011D167AE9644BE125FFF4F8A2228E21CF447DE42FEC6810352 +6C7DFF028D84DE6BB86C1B62A062A969B5BB1333D3E3BD95DE87E756D7098390 +2AE560996D9557A0C1D19F901A324656E3AFBFA1AB348FC923264E744954CF08 +B799CE46F1487B3188306BAAFB8D16B07B8B4AC37E11A6A5ACA1D5C7CB5FC3C6 +212AA74DF2EFD557BB3664366AF289F88FDBBADA3A6CD43756AB8DF2E30E7704 +DE96DCE521E0F9F23F2C5C299DC1345DBF1E9EB0A50231B02C53230131B67649 +B8422865DC9CE8CD2345FACFD59F8A0A13B4B4752DDA9258232C3BB537F44FFB +A39DE8755B381C88D94A07B561879B3AC97FD8AB89953516769C44CCB5EA2CC3 +68156538A8F8D46EE1DF6E42B31D283868E5716AE0A9DBC518A2D19826032C05 +34A8563294BF6B4A5657CA7440BFCEA23BA55F4DCE15A036B0B30A4CC283CEF9 +056E9F7DDFCFF1BFF0CEE33DDD1BE8640443D2E9A9193A55D17766E6803E6C00 +57646B20920BDA09F080FD41D11B73CA536CE6835BCEE1D7ADE4DD4FCC849CEB +3A4F4C808B2A1EDA914D469BA709AE3663CE715776A3C6893023FD59120FECAC +2BB5E1A0278B4804B8A5A08ADE396027120D4855DF5408B7CFF13FC94981D448 +4EA46332569AA8A6121DFA55FB6310E86C95AE03AF0656317CEE6D8ABE6DED51 +140070B89F8FDA351D7520AEF9331649BC4FD2B96433951290573014594AFF53 +E1D59C2257C38DB5F89C2D84D47F9463F6B79D4FB06F4D994D475EAC02B40590 +A2A6EEE9CE8FF2A05ACC51694AA14E9DE73E688099E5E4297322399284EB456A +0CC3EB28F470193CA13DCB82B8A72BF0DA06843DC95C17AB25512CF75E410B53 +01D4470B5910503400E1FB0088068CC4A753DFD5F725B0883E667185DC04DFA0 +22721F7C43F301155719E4AC651C0E9DC3106AB600C9F34408E6286E265B837F +E977906953BA864E3CEB19BE1E7472CD6C0FEBC2F552A1EC207C1DA42B88E271 +3C76D77C01705EF06D90918E9F02A8619AA10100D32636F4DB188EFE516A3CED +5BA74EC79C63824BC1BC0A8E7914AFD6BD14DE2F5A6FB7F3D0AB1B991D568760 +B056BD18C1967E6042D161C8F4A9E536B8EC49F1AA354437662332203A574906 +2698C5954EA3842D8CA8EA5018C64B49C0CEE3CE8157D1A54037831431073FBB +23BDB5A15B6936D772C5B9E21963BD6FE868BF7174DA2E24FAD983B3C106864D +E7E6540574F1FD6CD5C8442635637676D99986DC0A810709C3D3BF40458DDBFA +456DB2EB44FA75C83AA70566C9F4A95DC1DFD8F820F1161ADBE4FE65CE040E65 +864D5D56F4D93D796493042A5EBDA7BCD6283DAC18DA5A87342C165D69118843 +0E8470A2D7137E4899DF3DAFA8A27D2273BB401A7A5C24A6243D1CE9930B0D3B +4119F0588F822318FA154E5C882B677D8DA3359E0EF21BDAAC9262504C6D4714 +5426139CA31164F05FEDFE85368A8E087D65343C75EC07CEC25DE4F0F95A127C +29C930F7ADFE463D8B64DE535E77F36C4A84DC6C0B158C3B0E1CFA30BAF3D834 +525DD3D8F39D755B95FC306923A9771CC3161B72888FCAE7F62137B030F6DECD +1AE4FDF62A5C586204352359C639C9DF7D1A57482707EB0FDC5C687878329AD9 +1EDBB83D3E373D5812AC6B98DEB87EA382F10CE7E282360236EB97A006967B1F +1BA105A48DD051FEA8E9E9DFC221549E71216EF16A28469BB9A296E6061277E0 +DDA7500023F51C416ADC9AFDC0A45A94D568556E9E25AE3383BB89F311F316F3 +EF7272EF3BE368B0ABF145AE097FFA7BCBCCA46CCF460916FD0F7B4840D36CAB +B47BF1CC0D4E406ECA0C3E349C4D7443855BC48D56F5C7B53F69AC2602F02AA3 +A430E9215121108C6287012D3079969000DE04D0085B7BDC7B3EE1F16D659195 +7E695E20D5AC8F2D32CDD9D88E21B23B5E2E0A776E35F8EB759DD20B01D3DDDE +77B7273192442C270ECE3422DEA9E52EE99542D636AFB83AA225B35DDB5E6384 +8DC6B5FBF7EE518377B4B2A8E01468E568B20DC79F2AE5A178E37FE67719CBF2 +C0C1F12B06F646E97998A5D6A36447BE87C94533E04071DC4C818A46C98482D5 +5F557B92F3B5A592B675F0395CDC05349F49E0B2878A0AD4F2C1473AD30DF752 +1ACA29B9520EC066319191D8B14DAE7685B5DB3C85C10685EA0C5158E049EBDA +B204C1F73E78699268C9C336B8C0D54AB4B6D20E34F5F3CD6AEBB3CCA179689F +8DFC5B4973346B98689E6AB25D251EB83CA6DD6DBF8EEA0AE66D7957B15CC773 +4F9C26A5BD0BCF65D7303AD381963B584E7CDDC6DA9B572BE655B7601BF1482D +CAC527069E33038F77639810D403BAE1ACD1F9CEA544F8CE81F5D78582A24F54 +B1AF188BBE247053D3F09EAB56A65214432AD104E1E588A49DA1D26E5A31E7EF +68625B55F1B366292993E186142FF99862DE9AE40032AB70A053B003D3C19953 +0BEF3A5F6C16F8FDEEF0F2303F004EFE8E3DD7148D0B9D2C393D4226CD841E69 +4E131E7DCB3FE6D2979ED1DAB5BD7A91F97AC79FC4FB82C125B69AA9BABCA9BF +A04AAF364A4AD81E33626B682BEE85A84D882B9C0713FF7CFDACC4BFFB6B3BB0 +E9FC25F52747B88D33935FBAE5712461093EE2BD224FD7A85BC9704F960EF2A1 +60BAE279B5EA1076BEAC60905D07B921A8F001B9D287603B04EB7B02DBFC1E7D +132FA456CD85FE50509DB3549013A8F88949FDA83275150A58C9A6E480D5A8C0 +DC7C88445966C9DE70CE6A910628883102C1A56B386039EEF0549B7A78120649 +5421D166460E4B21BE9415E0AE0BD368BD0B9A90DF4EB85845F26F7A32E2C37F +570F67173339084B317A22FC9157DE2B384AD6363AE9420166D72E7313B10885 +75BA9EB86C588374434557D10D456E6FCE7F024721C4C2F8E4EF9CAAC22F06E5 +013AA1026802276A8F4E1724740943AECD35F6DE0B9B229541A3B56B08F30998 +D4C5AABC03B40DC85B1F5BA7C6F699B3E4891FF8FFF91B77EFE1241A21EDEB42 +408D18E39A3C39604BFD2C5124A79AE7546B176F22BFEC91542D2F83AD5981CB +B02B8C521B5E93236CF74B33F1262E1A504AD22EC8F0D2942121AA8C627DE60F +B8E290A73C446BA83A97BE7ECCAC79CC97F574DE7D15C7424F6D873B367F3C59 +754854D2F0B183A13F28C3EBEC1EF32EFF18930BC635783D011A26D4B3F1764B +05C97B9B681EEAC6B8F3922C700279E12E630497431706790100EA191C81B146 +0B412CFBADE7A563CF37E48DB5C7758CEDEEB96E25B9C7B28E8507361ECB3D08 +FB007AC448D980295DB91A8817557E4CB0E6B614C079FB93062C95470D0A32F6 +D281F0F9C45F0FDAC9539B375C2B9C9B0B5BF6CCB2D9AB8E80E4549C0F8E5A68 +2A0A246C81C9F147F9F21D98F75EDC6A3A293DBA61A8255B3E42999E281FA099 +12062B882543AA988E743EFE5311A7AEB8C51F5E3A13C935B4FD1A371F8FAED1 +7794722BFC34883350A3FB39BEE9C5FA8C6A59D8652BA6C34DD958A9352E7170 +711CDD510350D910B2BE3A9771C191818C3E81582A8F6DE8A01ED72462EBB883 +718E75731C2CEC9BAC03AF799A664D62DE91ABCBC8BDF2B39177D18B5DC26825 +F73562547130271B8C1AACCE769778738EE03B74276984BF67298021478D71E4 +590B9AA09E0C6D2B59468022F86CE4C6ADA15C3543F48F380FB260676B6E8488 +97E9884A3F3682D3E7086E8CD1484DF32C5D3DFCF0FF06B245F44A03BEDB568D +86893E393FCDB7DF54D0DC1F5E628DC9B6FDAC156FF3A8C7097D1F49666E4400 +FF3EF4CDB5BBDE55A39F0A67854518CABE1B1EBDAFAE5FC34D1D45FAEA59D992 +716B91F73AE51DFDB14E1032F68CF751AF805A41C99AB161EF7DB88DA4B01611 +4779DD94D5BE1D8F9554D21649F5E18A5664A5F4638F939FFDEC9D65BEEB097F +F31C13D001DDD0F94C33D2C7BAFF8681874CEF7C44D75A691F15E3D90EE7BF19 +3C9F447B2CE43B95C05D54B0755B676228F094045C56DFD70F70F0B1A04C1807 +3784289A1FDDE55B751AC021A410FB735AF90D1793F98D7EAE87D3330C63A85E +5DCBB8E087B11BE030023BB83AD994D6C54FDF104508235070E96271E643CA72 +25002205BDF49DE412FC2DCECF3D1364090484DDA5290CADE2BE843CE0C726FE +C54419F2DD1307E2742B115F4FA7FD8EA222CCB89B6808763D60EAADF8529B15 +C89061F75917B22B603EDB02AC709D6E705D2F3D84C31B09D08A4C188E1C8A92 +1062A38AC7F4CC83F55B974F1F394362B8D3E8777BE3D244C53856BF373727AC +618C224C5B7CF8D94C9674EAA106C3F30817AEBF0386D3F07D6A9296417867A5 +5B9B9CFEC845A461357685A95AD0630B2C0DC9EE8963128132B4874C861DBA02 +1E1D7BE9259713E343989E16859F5E4275DD3BFAE96F382B8F31247EEF86212F +0D577D0221B9B8965D0C2FC396FF5F38FF95B56D071E432931CD324FB790FBFC +C6CE521D85FF14E8815E9D4425909D6C312C7A2FE077E4B1FD5F8ADEFF72173E +9AEBA065002EEC149758F3016625256F37AD2055AAE3FDCEA074A8DD0311328F +5CBF4CA5D62CBF21C9A5883685B8F7265F10AF6F5D464CFD13C9B40A620FF21B +DA5F4801C8D5357C49D5B401F51DE0923D0D96ED6DBC57C6E77569FB69FA198A +2029DF8A5F3CFABCCE3A5FF87E5A4877D0F8887EF0F4F0FEB51091894A946A18 +84EFAC78A32C7EE6082A51BB01AEAF4FC9066367AE9B5A5B74EB4A4231F1FEAC +B7B76BEF33551AB4893958462B0CACEBBD48CEA3174BDB86322383CE32D8EF35 +BA9E1B7F4994220250359EE3C5AE78C1492833F71701D0C6B0B4B46B8641373F +5193B8FCCDE73F2F56333AD23422273ECB807AC49D9A79DBB88FA987F34B278D +39AE097E8D664414FEF8C2B0EA3F7BD43D38E964AD7709BE0923BA5DE504D56E +7F8256969F12A9149F1C9D7DB5FF20425C47D68C15F0F1F492F0FDB01C1EC138 +4F3DF82B0C1BC7A8FF3CEE5AEE3992586A2B53B425118546D9314170B3877D74 +BCDEB2790C9EB08C21FE6A3FB8D567F39429F2DD066754C18E026539EA88A94D +D643E27E8F8E071AB6EC8A30951504B93FC59CF0E801D3F920509AC2E6823635 +9ECB917546C50906C3A2F61D6BEB4E887C6C9272FAD0AED7ABDF73EE841FBE28 +FB5DE55F4ED965252883CC567C96DE4EDB781EC82E4AF9E04ACCC2160598C2BF +60140942123DAC1D457F947CAE5E0654D38117D261F4EC69ABA52543D215C011 +F72B148E55104DD3A872B9C01B47B02398C0848FB0FF5D4C9F557D51449CD16C +9D7AB623BC300CF38DEE6CDF4596F5B288C577814C19403220C343B11AC0770A +920B257185D738BB7CE4B535EA0EA8F9446D8D7A35F10ED1D98F1DB7771268F4 +4ABBC51CBB2CE7F48FEED3446467A9A04A826AB7688F8525671BB3A5DFED3954 +3BEA36C1301291EC0784D413A324237445E85FABE6565A058A89E19C25CC8359 +3623738C4292091CE48959C0ABC289CD0CA5316AF2756B31B5218091D094331D +CC294D876D57E3D5B36D96C0F444D9270B297149FC8C607DD5AACB8CFEB91704 +3930AE21ABF7C4E3C524BF33F4F4CE4EE4BC1566342BCB5B7C937902D6C4CAF7 +62539819195853646B73E749B06C59109B4EB288FDACC61CC962CD5AAFC24B15 +FEA2E8286298F767ADC5D1CE787B26E7C25B20765DD831363F228099E4125168 +7C3E64BCAB5A40D1D17150A8BC43E66D4D03712C370DA6128784F1E15BB3816C +F38C845066DAA046C038D54A3FCDF3939D0A39123854C93F1E635E0EF053B84B +012B3F64398194A21A5AA2A15CA473EF99F8C67DEBE79C747E5CDEEDB6AF41B9 +511ACAF55ABA8FD1495345148A34869A0F52D647C861D22E0F03EC217227E270 +8FBDA95B4F70519FFE4371F2187A70E9323E5671299F358C02D7CAC76B0C253D +269A43C27FC6F4132E8E8F2C0FCC103143E21A4EE3E5D3E6062FA1E0054E4E49 +3CAC42D8A9B3AF467F9AEB84E0C12AC9E0F529AC18C6EE1D02A29A0D86800884 +AEE0DAAC7890621BB42E531BC53BE80439093EE80A72CEBE746C4D0BEA66A685 +E56FD9378BB056BE0DD465A145A8148C3F5E54E5B9F11F4F9202EA28EF9396C8 +2958636AF404023AD5A9D4A19163A285CBA7D0FCFEE888268D4BF46C9DA49AE6 +DEEBFB4B4B2072CA7B0B8E62A85CE2ECF876610A161B76D43D67A73C67C70124 +6BCE8FFF02272DB067916FF0A5F157BD73BAEC3456CEA84AE21A4936B4983780 +4D7116570CFA46045B4E98E65931DCACE943C83B7BD30A60575C9D34F480A179 +CDAD619F8B084FDE54EBE09D95C0433109202CC0E32BB8AD1EC3CED55DF0E3D3 +4DB701AAFD59F6D4BC29F3A533E34E45E0613A6619BCC9300223380440FBB8B3 +3BD3FFD5C7F76407076E4A791528AFA58926DC581F5C3CB53ADA019813B1FF1C +01C14DF03B1F77458F1D33A59889DFEE4E1C99BA0CF4B04F7B11BA530B154E64 +F5E4C2BF964C12A5ADF102B4EA55D46AECC430C1162DACA9985BDD7910F446C2 +C41DBAC7C809E2058C2CEADEF4CC7BAD936B660A6E6AB17B5F52F2346171B63A +5D642852B7046CBCF7B2E9B8CCCDCBDAEAB267A48E3C8218CFC5129BA1404253 +1B01C19EDAE3092F99BF5864427CAEC6A3F7C00AFC4328D3732EC4CD4A051F2A +FC6E419DAC820B082C7CEDA6F19AB2CE97BDBC45708798DD2E38BC27D4CE044B +85323D6BD9141DE647AD8EFA76D21B899F28896E73AC9C2616F46DDA50B17387 +F5CC63F90FABD2716E5548BDC01BC6D798F7311169AC071B2326D156A66BC649 +7976BA04BF4743442CB5898BA927BDA218070A5D03E543EEFE4C93D1C9503655 +10591B89D07DE1A0A3B57F1651701C5479ECA1D8C9B7FDB02CD351AB975094F5 +D4544D0712690DEB7DDA59998E13B656B38F57816E8E4EF2CEE0D3506A1D8D3C +28AB4918BBC3079DC7436C20600EC9ECFE4A7424BB3299ED0E9E39B977023DFB +4E1FA6007CA8C1D86D7181E078DB2516CE3F18011E15E436940291808FF64806 +8AAEEA70E5FC56A02F87E38C7CF06FE80DF9930F63E633B67EF6093296CEAD28 +0B150EF111A6D20104AF1746CA1CD02BF2DE14546CECB44BF33E239FB7185A9C +738414D921AAF0CAD72B2425B19A0BE3063FAE017C404DB6CD8A2335B62CA1D8 +9A742A632035DB0132EB2463C9CFD4F806FFA93EC90AFFC4F6AD2852F52F0F6F +1FAE527B45679B55EF87934A396B331352920491B04F9FC364C0182E4C693885 +DD52CB9E6F7BBBF49066852F9850B1E071372B6B77D4912B8D0299C314E34638 +C079305798A0F654EE711F28A4917BE210CBD0614329FBA0B638E6CFDD0E10E8 +64EEE1C52F077F43ED14AE2E87FE3163C3DC62BBAFD7DCABABD75F0229858FE6 +29F198374EE6E28A4C729688D7D345D95DF513F85319F7ECC40F6477E8B73EC3 +5437C673F57AADBCC35B08A271288E1DA43287140AD1AFDBBD0F7C5A0A761178 +271F0E587F04C5A2F9D026E0B92F942FE7BB27A9605B6924545EE82090FEE9B7 +DBF60FD0870068A2082B5B22BEC698460E3D452A5F92F0CD727F75317A528635 +F883F3EA161BAD1CC81820A36978666899D28126C1BBCB4C08121E248CD1D0D5 +DDD043B58012277B03F1706E8313BBB4142A10F8F775871B340C83378431849B +E4E8F4A18BD703409EE58DD8618F94D70A57D1D13188A16BE8A5F6383C1EBED1 +6CCDF1B01EC33E4C57ECAAD2E292120F2CB157A3C6BF62EB41B9A8299728BE8A +E03A17183E7C2B3BAF9864C762A60C414F693450F952B48AD049527468A9A8F3 +731DB86A622A3C2E5BF3468B8A3115BBA8170FDA23A6A0F1C38DC1FE1004F7E8 +443EC7E4474E19259072E47AF8771288D76EDF91F8697595B8A8C08AA5C4BA35 +2E581250F1A3610EC9D5991EAFF6938C0EC16ECC43E4CFDBA8BA42A7BAC738A1 +B29563E2D7283D106F4AB176C617A6F1B1F9076E564F67819159F7D3AA4123D3 +B8A7E922AB52D0C63819D6A95ED6A3A63E82A6947098FEB9A2F1221F962DF9DB +5DE56A57214E4B84FA855475BAF474EC9A53501BD5542CECCFE81A4136A78ED7 +12B834881BFAFAE2A890E598EE2E11D1CBD44B6B66DD384DB7F21F30842673F4 +50619BA185CA3925AE1D922430FA6B3EFA985E50A3371A6B8C2D7B907C63FB81 +6FE0CA8233E4620050EA197E05A42930856FE8FC0257C1FF4B6706E4F9BC770B +987BFF7CEA0EADAEA356B750134819B4BD68FA0C36A65681686E5437E8F09282 +E89F8990B705E5A0C215CCED16CA5E663C46D5164AB439F73EE640D6DA70C155 +3F69C1BE1FFA5B6FD443F9336DE031A4C9607C706B7571FFFEEC8D8FCE91FD5A +C999821E81425432805A253C573F614895CE3570A39753B36A357F21759F1498 +A1236B1D1790B12D471D917699C19A963B866FFFFA37EFD74E0B811AB6832346 +ADCF181D963C812F18E141681EBD36482E7D29853D91683B9ACCC3B8055EFC55 +E4DB09030C38C5520E4562932C9E9AC675CEAAF41D8868F7A4E1D38193669EC8 +62E2B2AA3E597455D3FB186205210BCCD1E9B3A3564AF82997E238669AD833A0 +D53B951CB550EC7FF5FDE4A5E7C7499A889EDD8C453D99349FC4F65130849E4E +7D76D3C9A153B8522FCBF0E8C80F6C9BEB419E501A891D9E03A807E5D8C9EC9D +AAAD2A86F0D360DEA694784376800E32EF4DB045B32B78988CF798EA7CBD3351 +CB60C6C775B0E7B4D8C1CBDABF6841618296A94876573E9693A39DF47564C29D +27C0CCEAC55E0339F134B45B1403D2DD491C81BD3F1127164D6DC4DA058EB7C2 +50F8C910A005CFC6990D6C2911656677D26E557AEB420B8FD91DF224F01458C1 +0E8CD85189635A3E237F605F5C8A751AFB0E8FF920B1094166C152C9AD7F4D5E +D3074664ADDC3E807FDDDAC2393FCF48CC76AD84ABFEF4DA6465008499EF0F52 +37B408058365334FFDC0AB15C8988D58E62E7CF50A199481832968BE04CE1301 +75BD2CF84588645A9123982C8E20189D264E1FEBEB22605B20082B37502C7F2A +BFC371277B10FF89AD4A78405E76D1220E38F9F2FA8CBD9115C11B30BB9CA9C7 +4A996AFD108D2A3B860AA8C3E9FF6676597AD9B1F6F9AD92CDAEABBC510E7995 +6BC046674A9EEF946A294F4A1D4F0BF8CF73ECE930DEA3DF887EEEC94B5526B7 +12CF09476D5EE9D7E9F570D29D6D4CE9507F26E7EE794EB9AFEFE7E89EE1E32F +C48959A2FCCD7AC5C5C15C81198235E3C0A216CEEF1E6EC1267B74DC19498B25 +12C869A068D9E94598923D7E63E336BFF1C40025548AC0EA3DD2BCCE0B483631 +6ED3545427FF3E9E9460789BE0D6A9E39ED20F8BEC133EF4E5F4F577FE93FE35 +0BDEF6C35B34D3A3FD2815798BC64B9508A8B86DA0F0424352E872B943B6A8B7 +C0631B9083F57EE7D0D2BA76FD3AF87CD0C0F106180EB8E1C50840EBD968ABD1 +4728D49F9A4531B890E97F8BCA0589248B8E7F60F7B2CC612EF540244E0DBBEA +828F57E5E5BBFFE0E2AA7E46FA16A45484BA795D4862AADB29874C4EA6CA5EF6 +A61306112EB3023047F31E1C16DED2D5600A1A30F7370BC707672CA411F3347D +734D41CC60AB436577659B9C256C56019FBE476CBA18DEFE9DBED04334E9A6CF +AFE56EEC626AD03ED98E488E02ADB02BB677163255DF5D029636C4D077583725 +B60C7DC3F886913B8BC6738C662BE0A74AE9F94286114AEC6A82E824C468570E +C3D2514801ABA14EF94B9470FC684774543F95701FF7C6EEC3233DA5DEBBF56D +9349174E5D0BF48986D549FBD758B3D123E8D694FDFB95BD9B94417BD070CB8F +71992B2BE2AE0C9A36822E4E8D85DD3B337B0A9E13DE07679346C55145F38012 +AB566C38CAD0C63D0491EFAA2CE1CD8FD4938331CAD9C7E87149B8E90E6EC1F3 +55D5DBAF807BF2482A99B02BDC8BF10EFE5309D54FA108D379393BFF8AE59C70 +0409DB0D558A48892A20FC6418F2F9F56CA50878146F222A656B0E9B1C346577 +5E2B5F79094386CF535C145B5459158D74845BECB76E02D53EF9FEE8B23BD8BA +59969C7FAF44CB5E5D217DA9E19634DF2E2A653A50F7D4C564AA875454612BD8 +B01356EF6F620D202612E424A1B0FE9B0B740C344E96F6F9EC0199BF3B3FB4F3 +9330124AA725E21021B82B845B25707A56D25FBCC138EBF0FE757DD1DCA7D3F2 +5285256F32C2BF27FD47D283E44D8BFE63CE9E9E9DE2288E9A1BBFFFCE006201 +187335A534958F32C1999C8D75FFDDA244B5A530390897449A4AC5DC6D64F5F4 +9D32AB0A9376F819356705A799EE20D2196993BAB8A58AAEBD0CFB2D9477B162 +0BE6BC4A665B5AE6E1765CF427F0CEE173BD948D2BCEC5E63BA15DD808AC37E8 +27AFE857EE793FC34C1989560E809FD94A462B0E4A5EB5C655BF6D45BB65EA04 +67ABF18D255B6407510F1D65DE2F93F2349B218DAFABD923C937F1BC70B9DF64 +FDA4CED24854859D721D78E8A21BD565F05E8179E3BEAC804931EE7499BE55D6 +0EEE411DFB1705C1D0D7AA13FDD13235C649506E111045CABC12BD36A7409923 +CB2A2CE48FF0DB470A746348F2F8B5AD886298062D76ABC0365195E6926D123B +414699E9BA9783B6792C284146448D785FC8ABAEF70C59740ABDF18DB7B08203 +8C9684A23C234ED1C7C6315B7F9F517A2241534B1DDFC8B7EBAC878C3FE542A7 +013DA7DE6E70927D5B47F53F90BC5A580E3AC286D1062FD4653F070A070FD397 +7F88828313821C2B1FC062E544E42F0585115A6B19F32C2EADE89E31D279E54F +8544054CA49F7368C94A1939266C344B012EC9800955A89E832F9E59E50DAE60 +AC0364A43C400B8F62815FF6CA864E59327B89A8BFB5435B0F0F5BE4F9F544AE +332C19DC75CC3461F388472A5764ED36FE91F8710FAB141022883091894D45ED +294BEBB897D36694334F3E968FFC4EA6B073493C32827351FC6F323D0FF9380D +804B12F01BE6B926690A68F1F9ED129C390BC240DA061C341F0D09D9210409C4 +3C5E9696A5BDDFD5393AC9D7AB9F82E919F808317679DB70D674F46877F83C95 +52DC2EADDDA7DF9AD79B9BCB28C2BE897C9E9378657B39046A929D23E7ED0AE3 +7925F1B184573115299AE2E11D43FDA75E4A1DFE14F80F05EC57303DA964AA35 +9462759CA36DDFF3B43F3CEDDE73BCE859484AF34F6B1EF90FCBF49D34722571 +A2CC337ADD4F4EDBA0C20B673D68A3150E378BA0DFA81F6ECB97CD9BFBCC13BA +F89762B850DD34A51092D9E4D39D6EAF8E5B401F34F07D2CFEAB932A066F220E +869F2D19EE55663BBA117EE3E13463FFCAB2EE730F840DDDC82C5AC69C64B203 +675F11DBC40186A2E5CD1B346DA37E8D3B3C518D9480201A9C598DEBE0035A14 +355C3D66F06C4A7ED75A72DEC787ABD39FB77D3CC27FA505F8A4865117FEFEB9 +98D774B3268803E7D586FB8F5276B405680841C7EDBD1AB4D055FBA696139B75 +D1839E542902660144559D613D162E217283E112CD4B11C13A3AD04C161B154E +AD5E2EA101FC279B83B8F313F18FEE59B20876FB99AA1587AD45CF9E294CC653 +C0128353B6644F5D01339143F692EE2DA2C640EE0423E0E0C524407387262CA5 +728D9BF533A5DA8B4B24579476FE77B263A611DCCC6C893CDB7FA087820DE632 +A7E72EE945AE53FFB7FABF66C8D7A9E4FE5FC76FAA7B8474C6DFA527032EBD00 +11742B09CF9364FA679CFC5B7751BBEEE7CE5983C32AB245884170697841CA95 +9B781839232EFFC2C7CE51FAE5C3117B6C5A6EBFEB8CD5C17AE1F50F322325ED +2C42751E03BF9C602FFE7651F8EAC796F22AEB025024EA9D3C6839C5D78446E9 +8286E802ED412857CA42FB01A78B15B908F7CE8BE1C419254998C35C790368BD +8B8CC75818C190AA8B52B75F2532630CE54DF5D40C04EA7C764BA3F54657FC55 +390A118C2B74B34CDA77D2B4808F068FF11A3C3DCEBE799FA2CA3D9B7AA54E48 +2306EDDD3809DEE1CB37EBAC8AD6419A27738071492B3E89E32052CD2A3516A1 +E742FAD7E97F019C0A3E6066F6E065ED5152C0C078D314C3BE3F8DE49AEE7D71 +3A53A6D2F528499F10B2D0FEF019FD05C4F57F07C1241AE208DCCA9B74604871 +4C6C13C4CAB543F890259BE362AACDE5B69BDF373E7CFC60FB3DEBD243F2626C +793933011C0125630471B7AAF3839AED975EA581558B53BB330021054A7784EF +0EB98D56C807A4327FDB846E51725AF217563D6BFE0726A3FFDFA377A3635891 +F3A8FB69F1522676D6E01984ABB5C655964B00A05A499EAFED034513085755C3 +F54402B658E24D4A57913C4C4D1CA2335FE0A4F658BA773962F393FF5FEF8BF6 +8D6166014FBEDE0287BFCDD725639BFEDAECD06E57488F5BF30BCC2B3AE9E878 +F2AD3575FD043C6397A82F27D6E5A98B9BBAF8C78279D1A78809FBE9D56FE7D8 +306090DC00DA55AB9624FC4E4A279849AB4D5B7E7E125ED292B125C34FCE6C5B +66ADC813BEBDDC1E91CBA09751DD13ED696B5629234AAA990C467DE668CF1D29 +556A24B3D5EAD78CC38A3282E46C884C802C0C0B010840CA8D454034D3E479FA +F9B9394A89924F66E106AEBE1156337BA80303F111AACD622F9B0C79E463F1B6 +E7ADFCE41A9E7C962A96016418824569861A8B2A426AA86A3BA4AEB5CA11916D +2F6AE0C03BFB90E5B6081BCB7348C8B74A20EF87D04A91B5EAED48B7917240F4 +EF91A3A1F77DBDB81D8D95080E4EC1DC67AE3788ADA00E8CF885A13DA34F525F +9552BFA79FC0967C2AB66E42F9245CB380EB196C927E3279DE96FB8606FA9F13 +1DAC5442B25B461C586203D9ABE024569996131F178B1302624A4E78EF2F82BE +E9A0B83549FE5275E85C176B7D3F44AA19A0025032BBAE7B2BD928270028C866 +3358A8B2058383FF2FF7A41B4D90F4425F40557BBC907D8C8F835412EF0DC6BC +CE6FE967D55770C0EAC8EB190D7B8D355EAD9408050795BAEB5149114CF377E2 +9A6E11C422F51705EB921F95B548C79775525D0C4D6CB5F9101B99F4C712ED50 +ECB12BC53FE3C703B505A12C8824804ECC3F66F8BCFE740E36CACC94C7E76B50 +A8C037E81731F40AA1DEFAFE6673BAD83EED23B4D1829A6343C1FA7118CA9C31 +C08EECF55F2E5682A445561D7EF396239C25C013AB9B0E3CAC0CCA451846E611 +8D17C7ECFFAF85013BA136C056381F4CBFF31FA4A30A19FFA8BC4F29A8C4FEDB +670E4B65C5FC2AFD7B12DB24B6B26E9A2328AE47204D35E8D981B2D90C47F768 +53AF1FE5A271FB05C3258A280676594255E53410299DF24F4574BF72FFDE081B +A1D2DDB7E42C91C7CF3E7AF0A28630BA772057A39265A74CF07790257403623B +755C99198D679FFC403886A1216EF0DB21BC39BA11BA1910C4599641007227FB +07B7BED0F7B334C4409CA8E46414996E89C99A848AAAF1BD80510470BCB2E5F1 +8D2A32099AEB23EACCDB07ED46641500E3577C561F5834F90C353B03A1556DC1 +355AADAF4F16C5BABC1126699459018ABDEE8117A30F1FF0327DDE29E8F679E3 +F44188845CC71A694285A0061030DE452D5EB85B0286D1CB19077EA18FEAA2E2 +493910C0194C37E859CAC47FFCA73FEF03C42FAD09EEEC4E57647B8A1725406E +1686835E81E7F2D621D6B2FF972904B7BC529DB1912C6B788869E3C3578A0B6B +7A15160577F1545F50294D006AE862A89CEB65DB36E68013A3B71D99CD45EF05 +942296CCC7338ADFBE0C14E6E800DAE58873FEB18428B59298C6B6331AD79F1D +6E4B8F925E5497E4760EBC2AA946DEF442FE076F75D96497FEC6E539D7EC13E6 +368AFCCCDC03A73C1AD82B3BF06D294EEC6908FD9C1E2F8935ABE200B3D4EB33 +A76EF754D2359192B75970B235FC6F59CF2E1B99F35FDEC3309C0978F597EED4 +75655F2533DDF000A53E02630DB8CCF0CA83D305F1CA78428B09E181CFAB40DB +AB63E6796CBCDD7CDBCDFF14A6934BC5C02073F0A317DC0A6FB9C607B9B49FE9 +E102DCD3AEFB7ED4805E028AAB641D0E0EC6AE09D7FFF3A4F594098D03139D61 +AC6DBCCED93EA94E3142299CE717CA0D77597801CF5D01ADF5304D52750C4EE8 +66804AFE77229D54649931E1765BB9AAD54DE84E5E8A49A1CCC80E94D009EC63 +F5CB056A88A3E2D0E0C78CF31754EFA654746F33236478BF53B8A56FE0B51A19 +9D1E51E21B92C158069A59F8AE0F11ABAAF2AC3394DE03389F538958CD709639 +26086A53C600E8D4B2A1E9F65A9982D3FD0AEDEA1272126EB2FF08E06C5A14B8 +263561B5192332798EE1FAC70F4FA20E9257A186277D80E2325A8CC9C650F374 +9EE7200AA82D05D7CA5D4C6D7ED6D38462AF2EA35C1F6679B1767EBBA6F62769 +383C4C5D7A3C0924BF850BD0EC1FA16606A973BD45A0F2AF86018A4B57AB4334 +82FFCF17BFD39CA87D25E36D028E7E35B6FC3DD850184BED63C2E3843A6FB26C +65EC1A1F562591747AC1656BE602CAAF7D24E678A5834D33B4F25EE8EA40D88A +C87860F8F6CF38B3AC16E525C7CB7B19183FA62C6941CC8FC771A5C87BD45F2A +BEC03A4FC754608A6CB3AD74F88327B260914E0B325C246057B013E0E8018FD9 +55FC00A741CFFF655AF36098211D7756F1BA8776EB391E73B8AE402814F8824F +571C0255B878A0CEA097CC8732FBDF57F56A3C36A4C792D16875E88A03207B22 +49F60658A2519300C1887A8C3A64BA08603860DF48302E54261ADD2F23FDFFDC +DC8D44DD1D24B7D0C693263AC1CB7793192C5BB7619C3FA526E3D44832676038 +B2AA7E7F80B1F190E83534DDABC07D4A8C312C25080FEE4AA75F17616616E53D +500D0A9EE43DA70ACCB163A463BCF0255826DEF676C383C5137DA065FC1FDBE5 +AAEC7415E6C5309AD238C4B77A809BA02385B03378AD562D1C3227CD0D376CA1 +57818FA2A81DFA677865A17880B66BE988043AFC0B431B238508266BC074B742 +5C2118FEBC282096246631E897ADB907DFECD2C7569293A5EF0DEDA5B8B287E5 +53017E1CB1FF124EB57676EE5CE07467B8CCED2B63B70E303EE474596F3D8450 +C39893423406A654217C1439A7C4000946378A3504AD3F2C820DC818B48CB651 +6921E0A29A0BA2C332690BA7626451E234E4DDBD744DD801E335D9DB4EED3F87 +7C4347F874D7F15882960CEAC7039E1064E7C9A264A1C6D966260754736FFC04 +B3462E87FCB084E2FD1F53FED1E493C298926B26855280C154A17164C32F6079 +046A2CAC71FFF007E7B84DBD42DA2F4E15209CF8194383B5F0B47F47A6E95EDA +A161F214BB90B548F2C1458F1034AE071633A9105C09DD9EA1DB23CC13611B3C +D3B67EF45E4057C865C0A271F974D9615F0AEDE45A4AF7B1623F725A7A60EBF5 +82D0B59987C89D848F6195788ECDA22F9E39400615C8D287E75300A295431ADB +83D0F4ED026C188E6B57C9A90E5655DA0F56A65385A46DE73E7E1F7482BFDD88 +4F4570C318026366791AAED812B4BE31F3D130C46E45A699C843E09C24945C8F +806F3DBF476D3DC8D7261570C54EB79905AC4F4524C9B3100BC5470160BB0587 +BB04E4C7090B090B769E654DE50D771EE270825F28CA00D86B6814DE04D02304 +9742A33ACAD2D718843F882D06755E0FC71B5B92A1AAE92E1167F867E895BCCF +A5BA73AA8CFB9BE0BD2E4A16523198B21B664B1D41E4BC0E18BD709923EEAC97 +501C90138C493F8E1E229481B00A2A1E4940A8002A2401DBDA64C86B61C760EF +DEA4C7A8EF665E03D0FB63939DB9B6D8FC78B20D882FBEC7A9EEFA6A91E0322E +387252FF8770C9A2F5E2A3818EF6CCCCDCC5F5F21B855F489898A13080983705 +977416594B8B0428FEF03A554CF07FB3B59E5F3E027AD38799533C5960C826E9 +95C6F25B15B802D96D975D8621AD10E0DE65C3B8F09CCFD12CEC98F71EAD2E69 +2AB13A9F2183C9B035704EDCC8930860B48DBB68B8E3111E26A8FF216E80D082 +F6CF064967B1233D711C076D2F3680D9586A87694ED8FCD0BEE0A8C338A11728 +D658C224D94045D9528BD888275E17B50F9A72005130EE5149B8FE243B2F428E +81F8F5602D3E3EB89395E590A1253A9C28D4140DB9769A5F986325A29BCFBACC +9ADFBAC34FFA3DDB5859B9DE3311790882EE64EDD02B79E15406D945E6B454CC +9E658F0ACFF0D13B58C75E395E0BEBFF5317C0610DDF07D18900919DF6F7AF17 +7FBC6BDD3488C1E140DA40049190E4F718AAEB9B1990F1F8FEB61FF5EDDF3055 +4A747292CBDE3C33372450568D371D342F8371E7F9DA016B5039810D053F7871 +A211EAC5AE13E808F44711906806FF0284FA51F97934B41B4E320DB211E33E32 +64321927CBB5E97A82274EBDA4D88FB255791A70A0A2E651F141D3CD1DAE553C +94AEC8B6B2F4E337A7074B7E40BAFD0EB0202C9F77EAA4183208D539A15B94E8 +127C767800748416332A9FDFE6DEC86EE0273FEC43152C064B7C6C24A0389ACE +95DC88E06E1ED02B277A4CB3500B6822E969E36F0F0709ECB4A53949965FE907 +6B9E95142869B12750FE639B9B5AEC8C28F70722049617EF0BAA248D559AD505 +29C89B1B14E68E3E47427A636090A417A74B2FD20C209ECCC88C1F93E75568BF +D1D32921C4BF2B1B999C86E331DDF26BE549161C272235EF9A62E2F04BDEE6DA +123C84DAA783A4A9A179C344DE77CEBDE3291006D04DAFBAACE06FC66FED9259 +AC036F7554276923F8CA84952B8524F73786497344A8210D72777A3F0F402461 +DAA6FF1C3918B8690C409A718C3DDC9326D14D27FA35C25CC13FE4955AE7F19E +FA40A395917DC43A1BA33B7A21DB8971D5258BB07B14E587C3B8C0BF6D186719 +BA375629266754D560240F4C642A20DD6540283828B260F7BB04057D9773887F +30E3D0DC8F26CAE5BC74CF2599C55C7D53A866C9E56450A0C9E8F295C3956F04 +62944690147B5098D87C3315972ED1972EB3681E2141CA1AE9D54F1E37EC8EAF +3B7B27D54223C95CBCF3F200694343771860B4C59B2F74BD3EF3C20A3361824B +C178234D9B87F2831726735E054C48B57705C254DE978FD66B8FED99C179E3A6 +CFD55E11231275614024B0CA241EA4618430F62E93D5702AC09472BF682EB92B +F83B7B99EBD3736CD543F7C02E7F42AC083B75F5C28B4D0AF596BDC1BC90D7D2 +58DF44752BD362E7896C8A9C0320F226DFE7400946754A5F518596BF0CB2A307 +00C276C5A4A7DEDAC773F40FED1463FD62CC21CFF7CB7A850DDA434473866023 +0146E94958A21EF632671B71FE474F1915DBEBA6F6521A2A18382144E3B4CD87 +AC655DACF75CCC795C24241C851A05FB942FD8FD05E434EDDA3EF804B1363BE9 +504F346D6E23AF4193A93930B1E605FE73A96BF9C6778BDD25980D671C75FEA4 +700186F9F1F54814C73B69D66FB36B4DDCE39F3E5908B9E73E385EB116C21BCB +2322A225EC338C82C422ADEA0F8605A8F382D115B1243B0A2CA19EFB2ADE474B +6641F564C6003FE42639E7D862F8F3B691F566D454BB781B45EFC163969493D8 +857468480DA8967235BB2DF1E4B1070DFE9FEEF51F3BFD6B6909E0B19DB09F09 +921E9ADF59D3C3ED0B3383A3CF17A4633738A781B55E43C650A79CA2B2297867 +EC4A4C7012615840E816AFE169DE32DCD6C91159E97C0CD550DEFE597596CCC1 +9DC7CA2907DF60E74B7076ECD61345A90993D198B4442B42103C6A0F7BFF05A7 +D927C4452D15A983CFC306A3FB4D19A5A54D581409183CF749F58F64749AA350 +20BD27B2A702F72A98D584DF32984302EB1804B4EB5CD2BAFBB482E3DF8129E4 +8F4F44C221A1F2C862CAB51EA2DABF24AF42D64DB8829E30076385677719564E +B5658DB1086E0052BC1FC562F7F9894B46734DA15B142E7165F3519B36D4FBE9 +4220A60BE1E30FBFFB67FD2DE4286276CC9A341E21558A3BD8B729B667784C8D +97981ED0612FE2DB733F7E46CBADDCC6A3BA7AA53C6CB34B021FC4545C1EB139 +58EDBD8D2E98A9CBFA4B72F52F1C1B72AF8A99BF78CB6E2F19F5458CD4A538DF +17C18A80F62BBCDCD5B789A7DF3544F9C6DA2C22C580C41EEF179A9E9514BBE7 +4F15B7687C5ACEEBCF6D2229238EAAE66AC13027D20DEE7FB7652731200B1E21 +B2D72B3053C47132594A48501C9BFC7DB924B4810299B3581C1DAFF03B0658D5 +BDBC8E7F6C15B26FC872BBE0595D1A0E764C632B766C33D33F5A423AE987ACF7 +974B18F39F85F7A063D99B451B7DDA3C24B0FE4E7FE6FCED2A231B27EC109962 +EB7439AB63D48FD4813CCAE4D3F53B0C3471ACB52A5DB323FF4E1EE8373FABF2 +6D844FC2DD98598B9647BB4DBE12454CE24FE162C3B4583D593E67EEE093EFA3 +B8EA96E3D20B182F8C836B676B1CF4CDA0B5C283E2E2A7992453B9C09684C5D0 +9FF000F41DE580FD799E7663F918E7BCE5CEC8CE05473B660B343C5564BCB7E5 +9F4DA3B7991EC910F0DDE4002D54D459AB33770ECB111C25B0D327194D3DA61C +2CA2BDCC78DDA1F3A51F3D7EFF922D3C9A7D5E88D3F718D4224A0A34A4B91A12 +EC7AFA2472E8977F1C299380AF7D02E2423D880CAE31A610E0158C318DFF3802 +9BAEA372D8168F5D631B7CCA290C93314D3B96CA1EAAEB29D308499CB4AFDCDC +49429DA85225B0429998746B2B2D4A4D45BAA8575416631386AA7B620FB272F4 +69ACE1610BB6F651B154ADEF7F8EA3C51BC62A081F547181A3A18703D01E020A +5DC4C1C934D2AC4A0B67F545B521D9B40F3255E5E9DE9322FA51652337A405E4 +5F0CF9FFD3FDD10AE339AA2D91BB9D3637E72738620E8CB14CD87363AA04D4FB +79B0127EC187E8767D3C06404CCDABF583404809EEBE86DD8365E5A61BFEB1AE +492423B4E5F9CA962357444AFB75AC7AD2F387107AD76171F194606042072B9F +18B341BA7D01A6EDB28297DACDEA900F301D95D33A89248EF42C3264F8A1B47A +5CFA54118803E5B57CE7C0068C6732B60A741E20C981BD7C4BB1717F5774AC58 +92CB5C82DE1D1DF4A9E4B945D7ECF90E9086BBC455244C51E7F6A9AB801CDD0E +7E5BC63515FEAFA4238F4765AC04F3E09F1279FF3943D77A06C0EA2E52EE75FA +834963A8FD2929735CBA89073CF651DFAF18FA8D91BC1022FF345C3E6705899D +13A63FFE22DBF6AF2150887E12D9C7C55FE026F763D3D15D6F5DDE550E21ACD7 +91E9F7937D3F2FFC2438EAD533076BC5003E4CF3CC4A98777B0615A2D20CB825 +93C60EB16B5BBB653C91B8DA49BA774C81C3AE8F12D5E84D49C431055B9442FC +27BAF5F30D341BB3329CFBCCB09CF1A2FBAE92525E9D3CF5E099C0A72E1629F8 +D08CDF8A6B50CBD76FF67250631D13EBE30787D2B912AAC23C6973439C1980A4 +676D23FC0E90644BD0FB6176322D94EC8B2C32DD0A12065019F0E8926A14B7AE +C9D8905D9B79EF23446388D9005CBF63EE7A197BC4C5FD2E3470DA7D46DC2977 +B4C6FE57865E1C0448F393E0AE7D44FE616F129D7A0EB9ED1B78773EE54032ED +1DD3672B6923D188014A61F67ECE29D913F6CE37D014AD2FB1CF07CB8AB70530 +FC5D413407B6E01A3DDE44613B8A7AF8FBA104D0E03DDEE4684F73E97118F4CC +F74A503462C96F866366C2950BE3F19CE061EC7834C0E732FBE592DB5AC2E088 +683CEBB978E109F198E2D39FD2E690C390DF290F7709DEB6EE64F8B88D3993DF +03452F2C314C04807A63AB766F940667FA3B6BBF887EECB96B3E29424B3DA03E +80E7045A2578BD70F50E0F20BB6C3341560A2C9D5241936269C36A9C1D71500B +9C048AB6B9A5E0B50E4D3E0F63B4369B7A0AF6E1DF6C8CF5CA4111DBFFC325C9 +41F28237A7F731F99D5CC15F3AA14E5B4B4E6F7C617AF408275091BE72E98AF6 +456F9A83F05B21CA0429EAA3BA48CC5CD29A087D96B1279B9EF5551794BA809D +6927420E8DBC16CAB46450F1C0D5C8C8B3041C22390F9F6390067EACFC174AF3 +C9782CBEE35675872C4C68D3FBF78C8ADFC284E82C52C64477D228181C8697C9 +5E98D430816AB96DB01299654FB097DC281F0A60D9F03F84C973A6AB85EA5889 +AF3E8C64327D25D06B766F88973D5C75449D258D8F7A8F1976867644EC49D2B2 +AD765695B57D3EF8B8ACF005EC4A6083E30406C4887134314AF75BC66239B2C6 +44D663071AA7858CEA822B1F1DF09F4099D3B0F7A40809E08C0417BC05AC45BA +30776357774331D19C0937E7DA9B93E490CD9E58D68B227579A840563DD0B5FC +A6FF6D2B9DDE5A86AFB467395A2DE7F0F17494907B5658E29B518078C19D6E49 +E9FA0BDBCD3CE2579F20608BB5E9F6FBD30BA9A9A7BBEB411F348F69680DE209 +2D450CAD4AA515EF0744A9AF866BF129E92C57D523DC7FDECB9495F3CB72DA82 +5C3C50BBFA161BF93955972BDE0B44AD8483B519388A72717F6CF2D96F806F5A +204141542454453EA24A95A4B7BB7EC8530CFA497732F57CBC4F6A778EC05F81 +4D479F48F6CEE8E893DDF75B3C6429D1F593659E55267744E046627EF474337A +996F2FD56F2109879BD8A98B4C7EAE060F1770DABFA0973030CCCF297AA2B3A7 +5AE3C82E164304E43212390C4BBDE2606B124AEF5BF5DC9405F39F76C7448574 +589A6074EBC89C5FDE3542D723ADE4ACAF83C617D73BDC4CF4670E414A0F7C17 +7C0EDE2CCB0D5A10F0EED3CDF41CB790BB8EA61CF1AD9FF3EB39CEFA61CB13DB +378DD50F477C9A5FF24448A750699CC73739254AAE0E26886195B1CD7501DE9D +B60CAD2D5539BEABA6FA7BDFEB572CA0FB6A8FE46C6C219834BC23B3E4DE6BD0 +522028E9B7EBC83FF1E17E28A3C9C1BE0227536B3E917E6C2523121B7A6D32E6 +A007CCAFEEBE1633D1B8ED9C0F2C9D6E23141E75707FBA37897E4C0CAD0E1BEA +603DBCDD7747690BEFF6314A18186703C62FE2903C7D782C677AAFA105ADD4CE +C91EB6BCF2D327A3A6406C626A07A18473043F3E1B8038F873048F25B228187D +7226BBA7763E9DC0B43895C088EDA7A6A1E367D905E477F41ED43EF267B86CDA +481C8FBB1BAC6E6E0AA4FD2E979BEB703BC7366ABEDC18F71942D87928155C75 +1C8B4EC74C2CD9ECB7B19D9864271F8A4AA5F57D5B684471F273095A07892C91 +C946F615723E17E8025FBBFBAF16687DF65BDE23B92BA8FEDC894427C91AC4E2 +A3605B5D49E1C13AE8CC26902E92378104577A188B45EBF878875FF1B574F34B +9C2BA7781078F7A9CA7228E781D70A9FEFBAE5AE8319AACDA99A2E368706A2F8 +D068FBEF3A103ED7D71223DDA428F36A07DE9A9B6C26F3728296CFC3272A8E1E +7B372F5D9CA4FB010ADB189075DDEFB7488F481E6BF8490DA0C23DA26E2F582B +1E0433F5F019AEB91C663C7B4BA4FBDCD53CE9FEB02D5261CD78A1C17C30FE54 +EA8455AAC1204908C191698FF7E1CD58B6C766A6DD9E68AFCB0D2EEE7FA1338D +E0D8072E2838DC80FF6A028581CAB8E03A59B1BC7280EF55B97DD4365A28905A +5D0D198E6930333FA1013A152F5DBCD8A36DA7B52CC1BF296D768CDC7079588F +407DB466E7B70BFFBF82FC6751B65347A9523823E992354233DB98E838EC8933 +45C0C3181EA91C8CEFF04937B63D0DFE2B46A421820BA8CA5F5499D481868E51 +CDC4596D648F23F5AD603154996304A2C27EA1CA6E415C2F15BDFC6B01D2FDAB +638DAE9355FDF19780A42ED36A33E9D6A216D455253BC4EA831C1419F5DF7159 +9772F00CF17AC084B10C4F11860E31702C911EE925B93D994F67E2926B73213D +68AB7A0B7B42E150F3CA1E30BA0ACDF4DC74931E6009334B33035201C698F185 +57B132858F43B7A1DA50415E3D883342665118C3CB952B74BFC7BCE4E613A0C2 +E73A167648E282D8235FD84203EDFEB2A8899B4C9818D91483715F894657C032 +A5CBEEBBFC10B7C5AA59F8883FF4E799E0C4728E568F46CEBB4AB0929DA6D001 +A8FA70332C827535F8F05CBDDCCEE7178C007E60CA1AC783741307D5CD9C3199 +E673C480D0BEAE9DA98ECCEF3BC798AE5286FBCD3B9C0D4BCED845E41BE0AEF1 +763D293C78622EE9818DA386CB77A060B5296E06A44661F1B2289B7857C73425 +C28CA50441AEC8DE567D8504355E34ACBFECAD86A95E82F0D5A09C402EFDB239 +2A499DB371B08634CC07C592CF407738A667DF57D8417C4CFA790619309C5179 +82160A93C4841844CEEB8030B65CE23CFFDBBC0E9A48272A53A9DEB47C991A44 +5600168B35F73748C7EBB2460CB56FD313054E15F564254B074C68489BE6EC8A +A4C16F287CADFEC52FB61BDAD3E1AC87518DE6CDD7921A166B800C03E8F1243A +2B094B68EBE2691D726CAA51E554F96B8ADE6D019C24DD75C7A4F038686C45A7 +2268359BC73D4F0154DED87B863937AFC3EDE0C56507256C0230C43213650D07 +93BADABD4A9C066EB2B3D9BD43FA8169D87791C3A9287DAD03CDE950FBB3676F +D3605535B5D7C9BD0118308F5A94C4EB29E842D1FBE49670FD7AF78DC31610E2 +4EF86FF61693FAF103AA56DA7A920A25B394A461423EEE8231A1DD3FC34F927E +26A717BE37CAAD64E883E2E22C1718C1E9A4E69C977DB13411D427AA96569E9B +D7522FF889462400293E2FA2F4100340578D19519CD9ABF77EF8CAC1571FE000 +1080AA77E574DD6BACFEAC54A1FEE5CF9B6F7E1E7429C4E3B20C4F492D8B3B91 +9FFC3B6FAA8AC36FC882AD4BF6171C5147177DA06295A82E24C3AFB404C200E8 +6103733C515894B0FB2AEC498FFEB5A20A8E020D29A807CBB9C3F7FE0CBC7175 +89BBA2230D6013A3C42588DC018714BF4FAADADFA6E31397FBFBA428F91F79C6 +9A757C636CDFD43E3F6214CD4FC2B56F10C542D7C53FE0268D8D30AC95A2AE51 +3A6401231B8D18A9C57571086CD8F58FF109E7AE7BEDAF804A6263A439D4BE3F +94CFAFB9848B4903970B58DD4DE26F629AD2E2A2183CB3054ECC4B9962A89661 +64F15BD83E84AE8AD4958115B00E557FFB569EB78EFE95042FC0D73CF577C624 +ECE57E45F135BC904D5C6722D791040A426C9766C4607CD5CA7AE54298ED38FE +60ACA2735BDD35A88F5B394990BF320D533CBFEEEF0FC0077300E6FB3D808EEA +BE8C4416E964A5D673093480166B503E7C86431DE792F71B0025541659E26667 +BF303598A53CA0400DA9FF896D6114F5293FB6AE8A1481EF79C044AFFD1C3DE4 +8A06216AEE80BD03D1C579767C296C49A9B4434C3317A19268E3FB8162198D56 +3611EC062C551FFC5E17A76DD094B1BF2DC29FB49E08537224389B666D105539 +091F8CAE03B5C33AFCC39F0ED3E0B154005BB452E76C73BFC3C79DD85E11A59C +95289C023A19DB7F061AB2A39BA47E1A9E81547C73796CB226BB8A55AD2268E4 +5564A217DD47C2E21AB9D1D816E47A9D195022251B0D82989D0F4DC19CD954DF +B1B5BDEC1D7DFF81988967A834D6236549F4D4F484A7E173B2400CBD6E5839D8 +B5C5EF5DBFA5717F8A8FD61B0319067B908795C08BE68961161D7B898A80D9AE +9434D738EC57737E9B2DE0A7CD1289629D94F21F872442EF3D0267A4424C1398 +309295B259BCC8F2C37A1894F347478DB2A7D4A4505942CC5F7ECF884C5D885D +ACE1EA5883050D0FB58AD394F96AA583074ED9BE783D6B7C1B12A02DB2CCCFC4 +EEFA4E50C8FA241CF4BB972C19900F5B0FA8E6CE6F2C2B1495C996D5B8D1C4EC +26100C8E5A4338685050DD2D2A8E5395BCAD3D9064805E85AEC31A8B90EE0978 +680998678A2D5522316D7D1F5B2EE30353CB249E7DF0646D07E0202DD1B7BD9A +66B151FA113C809DF13EB798BFF29818C2CE867E32EF3FEB32BE7299DC51157F +CD9F9059E4CA3A87DADFAB36F4881BD781EC929E9A728C9FD2FE76B839E84F35 +4B4353C08F1A95BEDA491F4379235C4DDBCBD70CBB2BC34B563129F506293EBE +C5C516EF82B087695FA0F1DC412C3BEC7142E5D19368D904F8D2EAEF62FD0570 +DA36CA4EA8B866F9B017E7012F4A8AF1A13FEE0F9C568A7D6A92AC54679E9451 +D7BBDA3C9EB65A15BE4EF37F7C60569DA22F0BB241D7CBC4BCE3544C6C78AC67 +49226B987356C108626B7F07169F2B2CB49AF675AEA691D04496E36875C1D8E9 +C4E792D5F617835201531BD533CEF81C26D754A63460AD3927989ADB385BDBEC +347219074B8E68FAF8D5EE8A26635251C6A59D1122C7FFC71C2D459AF4616E82 +23C0FB4FE06DD91ADCB2C8C1CBE7B2E7AA01414F38E93651A889D4379CD4BE45 +F709055A8BC91BEB8345A56ACCA76149A699E21AFA6F6D423A4A715D77DA669C +51884704E172744920533D18E877EB348010C909946A2507E22A3CA3E3041EA4 +60294E8F205528062DDFC3562733BBF0922A87CD2D5F421FF9FC94AA2D380A8A +BDF33CB17415CA97A74009E70B0A7DE15BF1C714C8D63B72EDCB0E8AE1C6986B +208C9AA1D0B6E9453DB51E4054B0E4E4A544F713BCAF55B90FA84E5DDCE1F132 +3FC5DEE7BA419E006677D2ABC0E012385A049C3B9C51841FECEA0ECB262A0CA7 +CEE05A69BD5BBAA0F8EA06D878AC3B81829D3891A456BFE19B0D9B06B5D715FD +1C0BCC3D304FE9F1C830DE89F6D526BDEE9E886621C13BEE2ED59169270F686D +01A7440CB9165022FF6AFC8EC4FA7C17741FDB6D2FBDE95873DA69A4F8252B8F +7978F7314A143F8C0414F532B504F6A6A42ECE5C0F09B9B3FFCCF68EE81CABD8 +0DE789A64AE3F3F7E3293411B15D1BBE264355F096FF90250D0D2D43C3016FFB +2A59F70FFE9636208054ADC08C8D02F9DC2AE567FF26A95D67923343C169CEAF +F14E4CC9FAF053DA5155520CFDEE63169924357A5C3158FC3D43A7A42E4C5E2C +9A641E6E25FB2115C40A03472C5B06AC4D65A1854985F782B387EDC26ABCAF2C +9837E7D331E57EACD575B3349D17706C398A79BC015A0B01A1977459B86ABC6D +BE555CC7776C0C7DE01A158608A0AE3A3E9289A5D8F2CBA9D6C63EFBA892695E +B7534C0453EC26B7743143F2F1002AD757C177F5D7F16436DFF4ED6AD12CECB9 +D9271BDE6ECA276C3B2AC065029563932B5D7E33CB1B71B996C947546900987C +0E4490EDDD6EE78B6DF8D723C19771D36656F3ECCA752ADBD68951ED0E79D35E +D38852D8AB1496E0960D14C1C8A687D31913589A491EAEA3D18696AEC361D483 +4FFEBCA1FB33A8C600EBC456137A7687F4DF40EDFB9A3B080466C4A470457538 +3823E06B9E6DFB287FA7BD7042203D0A6ECB0E47EDEBF97016D831E0569BB60B +F2DFB207C631EA5AB58FEE4D5BDCBBC4B41CF0BB1F4ECA465242E509D145538D +949C0233F71C27407E75B11891045C9F7801A973EA41AFD742DDEAAEB504ED4F +64D6E0B7FB9263BC65823D51D593EC42CFCBC682CA4770C0CED5B238063DA5D2 +716A9205CC862023BAB6937D2A18FF5D618116B45623E06172EC30280C21388E +4D53D077D5EEB77F2B300C57FC3ABAC1E89AD317B46F1883F5F83E7A8AB1891E +8110ABC7FEEBA203BC9F2EE2982D77BEB0F23904EE340D6D6F72B1BBDC76FB3A +8E69F3C5C04F29E2AD924C390DEEC073AFDF3784DC26B85B7F0528E3B61339DD +1E341DF261CE097C3BB1769FA4C6E728D678ED7B928FB44E6BED81890CF233AD +DF4A72B95F85BD95C5645D8A049E89D0F94AE88ABBC66F5ED01EE9141448C37B +D47FF55ECF86E13B47EF1AB27C5CA26F7C2DA5841D47B3E602CDB2125DC345E5 +74A8E293DBF4032168983A6B439B189FCDFA5FCBA97E166C65FF0641E0B1A7D0 +9AF28005F1CAE32F1D95A27BCFF98C139911199AB6CAEAB49728AF2B0A0DB6D3 +7419EAD54E2EC55808C6C176EEC97477FD65C11BF88BFC0CC39BA742BF841FEF +AB317723C3F95445BCCD5A3ECF82C78C262B200894C983AF871912E47342C0F3 +13AE004F1E05CD83125AA4AA5161B1DB9D3F1A960E682EF93123EF53145A9C24 +EBDBD744307F6AE52FF1D6D43C3F667360FF48673C59D04F12C3AD8FD361C4FC +8F2A902193D4EEA3E9DDFAB0D323E2E49CA4B4FB691F9635AF026CE1DC94506C +49D68F5899BFCD1B947C77A77B1598CAEDBB7AF0F13221B59604E91140959F92 +8C49E5AEAE03C019BF6D2FC50B5BEE2BACD955319BC969EE0FA1752BFBDB1380 +042B1C0FD79AC43B5452A1BA2281982E73F681FA76AF1C9C4F4FC38EBBEFD865 +4648D27D218C40BD2C1629E1DD79263FB7FC2005BB3D06C9EBFFB22F67F356C3 +D20EAE1DE1D11ED1DB1D0E6F2F20FE98A28EB737B6F5B3307620A0199A076B49 +05F16F4D4A9C39E1B806BA6ED58B24657C2427AA6C987619D213AEB93B3754F2 +E247612FDADA5F5AFEC1512AC93181F8DCF831DD78271F12D28B0250440AF081 +5C141B11585D8929ACE6C79BC97C804325EC5931EE393A7B964B14B376694460 +9C0858E833FD66D0DE9B7D6BA33AB8FEEC15C99E3E5D329676F0EC2FE5E539B6 +4957002C77505CEE1027AF7F1BA529B45942058EBF4EA22F1F7FE3C5DD93AA1D +9F3A228EC45643CC629AF5EDF9A4A33EBDB7CDC0ACFF4A4326ED51BA05C88118 +ABC356B35D4DFCA057D8BB3D8ED04DA0CA49210F352E589748E63F2B3CDF7281 +6C3E8F46B9C2DF790FEAC41637366274C88DC4C6297F1501436602AC7CF94F17 +17812F8230CBF820885C3BD086289B845ED8F6B8B75015744DAE3981E8A1C691 +93B1D66ED2E41EFD86C74E12276CDE05A3A929E529F7781F1E49550B44A26FBE +DE59A39FCF8CBA8F05862882D6AC13EB83C20D6115D4BF9509F8A506E5ADDAB1 +ECE74497A17AA12D1CFE36672C2D1A4F2DC52DE56E8AE6CD1E72B8A4F850D3B4 +1551EDEDA4FBA36379A26C3B3928AA8AC63B5FF9D24A893EF019E6FF0735FC60 +7E95D2F29AE0ED922BA57F85CABE2AA44498C160656779860006AFBC4BD6685E +ADF006A4936E52637ABCBFDA6C8ADEBE083845A20B9978A2592F98A8E92F2541 +A84F2AD2DC12A81C071C0864A1510CC6BA44226B03E4DEFB70112B4EA34ACEF0 +0FAE9A6A783FD2911ABF67B974FBAAD4CAAB514DDC66C696C003E728262EF4C4 +4AF9AB3E23EC019EB66269B65CA53271B20CB71962FBBF8967293C1A81369021 +E89CBCFE25C124BD7A8A1F7C84DB681A545692C17C5A4C3D036B7E61C7C8976D +A3071BA77FF9F7C9181AC0B09D02DA041981A7FED34879CD2AA43695CF8BF01C +A92100BDF60720C5633E3047655240DFE1E96A85C1F021FC237F51318A9E82A4 +563725D2267D7ACD7C78B228D5A6114D77F9F055B885A279F7198F0993332786 +A3A6459FD9BFFDEDE996C0BEA951C2BFB14F7753C3599F630B00B6A44C46B2D6 +94E02C6E3CEAF82C3F730DA6486A47C2EC4722963ED34D3E982DB93A891A0789 +5CD8EE15405EC998AC29D6374356F8E4D8125EDD844183FE31A2E00102E276A3 +7F138310B428AD8D3BE683B8525524F14E6ED10AFF68127B617167F1CA432732 +081B87D78B6667E92BB1F5794C6A66DD830154311C59A43BF96100AA8A84BBB5 +7F201F4F25DD15E87F6A9BD20A34402E5757ABA204236C00541C68A52B8C6666 +FC3860679EB3C085B647796B424B598E97F6EDD31E1C1FDB740FD735A614B4F2 +93EC1CA3ABB24E4A2FA853AE8688E535FCC99160F55E28D542B2C48644ABF948 +168DA7AFFA42839CC7EBEC5068A78AD0468A6697D0848A6604CD020BD92F5362 +DFA41E55C003B702655FFA0315EEB6D622DEEA18126267998875C2F2CB9D6A0E +4AAACF51EA44074ED7D625572DDCCC20982B43B7BF9488A5CE852CEAD090719B +8C6A97257123E8EAAF13A06DFA4BC20801079D7636DF8B8D5F5B3C75968C441A +F17903004DE8DBD08022CCA7C0CE9E0D784D7F571D4BC3DCE4AD4B4487CD7ED6 +7E4DD4516FEFEE7FF9D7190CFE093423D9FAB6D03D8C7607B9C8491AFFF1333C +C4A5CA33C669A889D0C0F174E9AC7B2B81CA532D70F86D820A8E0BE35B21F16D +C1099AB373DC1EEB63CABB00949B38DECC52B236AC8FF44E0F35858ACD325E14 +4A21CEB8281D10BF798F2B3E460E89E54A8B255A50623743E7C0797644C92832 +60F30A5B104827DDBCF075872DC910E480A48D73118D4541B19AC92B1086E48E +CBDAA0C4BB3600E546D538145C6C449658ED66B292CB2B10431B5517DADC3269 +0652E4287731B70785C23D0A5A7BF2FCECD6481CA92758B74487C3D50FC8FF29 +FB973E1E518130D2662DDCDD6199422FF55521E0715AFD06C43AF2A99999A5F8 +B6EE78F74BFB8F845CA9FE3A03A50218495724850CC8A66C92A3C4827679B4E0 +02B86A7FCF82248A7ED56D5034A349F920FB25112CA8A84E7EBDE228DB05D009 +76B948FE201D9F56E64CF491A7DCE17ECD0EDFFA25E1EBA6A5B5F8B9D811F559 +9A341D65B51A32B2230FB689F0DB5E70967A2F333194FAC528AF2CBE72C31A47 +0902B69CEDB8BAA7BB1381A4D31EE1198324324E2373263CFBF2D56F7841E493 +90DEDC910506EA457385BD968786C753ACB24820E00D74F35BD07195E2959044 +0BB0B53AB9B29D14D0EC5A35ADB896440506D070D0341A5127241D914BD0F82B +A8BE9416B728BA2BE4E0214A4CA7D354E229AA83BC5BBC744C811A5FE4994EED +46C0103C40ACD7C5772F22EE718159A80C6ADE365F84E1327A5E8725D8618176 +7F331D3D3EF56CCE69F36DA9E620197E52CA7B818D4BADF758380F5B10764C7E +C3B3ED839AB620B9555A2EA838CF5D2E9F014B9A3C96BB0EA054081EB07F604A +E2B1A9758C336FD7EC9C7C2A1640725485C5C7B353D58FE00259EE1C709E07CF +FD54165C87CFBACA6E3101C23601BF20C689BDDDB94BD6DEBA876E981CE95C45 +6543A8BCD8BCF2549C97401442E3ADAC213C1885CCDEBE8AAF47A58FEB1B15FF +F2208DE4F031C8415E83CF7A6611464B491EDE2E9AC7D9AA84441F9A6532F44E +3D142F77EBB3E8033F23C93923F0CE6848F5AFCA7AF0EEF8B8DE8FCE52CA1C92 +1BEDCD239C712A1E6CECD22EEF42A99B6640D59C848F9C630F52EB49CC6E881A +0C2104A3ED2DB85AA79874C5072389A73878C01D45AF07B73ECD178FBFDA6EDD +7380E9FD555E929D92876138934B8434B0774E378C1DFC1AA1E65EE9A4C69ECF +0BA16C2B96CCC0F22C8CB492965A8F6AF7322E4142D8A40A9A3B291685B0BA10 +0EAC0E2A92B955B7A115FD3F75B0F081ECBBFC40B4E81B76BDD5F7CD3255E4B3 +2EC25E35718527CE70470C47D4D160871C8F7415F80EC718338E41FACFA607E3 +C29F11193EFDC1C96D24D9ECCDBDBC5A0541FF5ED2915623346D61A71BB2DDE4 +A273CE9CD37FBAF6903058C7FBA3CF4507DD723C983BFA5C2CE4651E2B3ADA8C +28D1525C8A184140BA42C0B1878C5883581826D7F0C02E6753526FC538C0CE33 +CEFA24C86414F785D2F31A5BA161E696782396E117E6B3D21DF1EDCFF6930A8E +4D8AB720D67F93D6F0FAA25894208574DF575EC31451CE3D196319119BD46767 +9E7B1C7E26CCDDB510E19A057209D1F8DDA77F830752735CA95B8B46EE230338 +F37D528BD533640FC7AA6F4CBCDD5F0154EED7625D9BC57ACAA90481BF18ACA4 +4CC17B1FA53AB188F6D4EBE0E89671BF9926B8B87A6EE17F782E1AA5289E1A12 +F791CF64CFA9BD842771237FCF330478A6AFE0D6BF9A80CE2CE48784D0F1FE7F +E36517A0AF2778ADB4913DCBA5CCEA8F423CD59CFBEC56BEDDA8B3E03E048CD7 +4D670F5BEA7A44D309CAF775DF677EF3E6B5131E3F28CEE8F506990446D077C7 +8293B4F57F7FB2D175EE6A12A0E050802017311C15CABA6C5CC5D56F77F93CCB +A25DE6C9DA9C304B98100B26C5BB88542CEC07C1C1AAC21501D933E2B2F74E8B +5153D70756AFD54C0D1CEB3E70CB40270FB03CEA23CA0AB46BD904919A931769 +FDC333FA2B2D55CDD99148CD555C959BB511732A90DB1B986A3EC1F3251925CC +985228C6BABCBEF2C59A590F22E1D1DF16D6654B35FAA7A1BD7ACC0EBB529437 +408628F19838384635676825548558554D6CF471178B8C0CAF16CC278F58AD3E +1524989C16B63834A76133746B1A306E2F89C52A4209999F0E63DD7C85058894 +98C18F65DE1E03297C51BB581EAD46557BDE7155DAEB76F74E3F00A32271F5E2 +E7E909D1826303032047F61130FAF8BAEFC77D524C6D1F8F2DB87D1D36F1FAFF +5030AF4E0BDFE670712B3F01DAEDFB76C93CE59B766295E1C766C1BB0552751D +EFA83B7080B6156FCCF1796A68CD83B6BCD4DAF3353361F6A79DE994F0833A15 +638AE470FC6672593006E47301ED6A1C8727388AB31EEA34613CAE8E8AB07FD7 +6A18E36309FDCC4834F8CEBAE4AA648754D679DD4BDD86513C851A8102399740 +7792F8FF58081A0B4E84058E4C1A2D6BF680CFF926DCBDDC05D73627B7980E94 +D5E410848B1B6FC742315A2ED6F25635EB0D734C82480157DFD2F383E6508EAC +EE70215C509B0B2A4DB87E6ABAF2E1AC115E6E24A55815703E0E054FC445CF86 +C1E0ACEF9AEAE22EB5D627D7E96701F93D080DB33240065D31745331D210830F +DD0DDB83FCC6E4645D54012254EDA717ECDEB5C114D826D8F2E95FFC67948335 +2B0E77D7541876CB99594FA3C629FF182A7BDA378C823826AB0B24006F80406D +5DA1BDD296992542E75B74CD79C2B4386016F415DAD1C183C3330252B1CDEA5E +9129274519705F35769DF987B207CA0C68F3E6247F6119B01802A55CA056AF0D +E8247CD5EE363A61D10855FF3A495861993440F77301477FB4EB0EFFA5D71568 +D708EC717428323DF6942FC660961D005CABA2388F00575F4649F9FCABA1779F +88F964A301A6D5D1FC02B327B55730031CCF60ED2A15E6039471FE70B9C83C32 +A25E93184F3A994CCCBD2EF04491851D59DB819DA46DB076C3ED8230F0AF49C0 +A2224E5CA6ADEC27C15D0642EADB6A63628EEC98F6E941394C71DF59846ECBBA +E7BF50E44E3D78994167B63641F8FB22460867CEB24CA37B08C91E49F0C47D13 +10F05348092FEBA6250C635FBA5C5962AFB24C950DFA5CDEDF063589804173B9 +EC2979D26993378BF16CB04F4EECB360182CCA00094A7E6C9D16630A1089B6C7 +B3E3FC864CFC613F2742065D4A57EF6559FA02C397AC666B8C9C35DBE5ACDC5C +9624EB9A2219385CB8C83DE36D78ACB2B4A8A84D83C4DD8700534E00B4C4AE0C +E431200DBC2C1BB217159174CF4EE41B6AC8746598A999F9F1CB98275D6D4CA0 +16C45FF79EF527AF3DB2FA45CE3BCB2E5D46D6A8CA3B7D81DC5679CC7D949CCE +7D3F61F0FB9313FF41878D6C7058D8B2D3525D65C7FD7770D119E7C4E93898B1 +6844F80F0ADF8E84DD888594153238CA44CD3BB791186B47C66F6DA75F5E8FBC +A623B5AA758C66F72C6E908E5490E95C1E73E674CC58B1ED4B385130382A2C48 +0D815DD704ACD6A68DDF70D5DD361ADCC1FC831C9680C02E77FF1413A025D992 +27C683ECDA0447F1A027DD1A47CCFDBC30AA59D35F731255609B509406D8C22C +CB4A0BCF1654060D52EB4EDF21BE9F53CFEBDF408C5EA49B22A7909193FDD3F8 +DBF9F403B961F6412F2D27D7A1CF7E18F46630A0CA925CAE8CCB10CAAF42A5BD +BF21F7845DDC89B892349BA7B4BAEF3B85593FB06A267075BFEEC3A857CB73F4 +402EDB98A70D15F48C2F61B3CBD7BF277304DE6EE36E9A55D2A1805B37CA9A13 +B37F00DF6FE4F8508305C3FBF257A7884A7C4D95B6A7DA6B2C4BC6465E0B8054 +77160504FC1976456543D6AA5B521E88A74E5B2FE7AE6CE5BEB4BCA8683AF38A +7C6059764A7CF8E688EEBA0CC520F2AB06A61A07CD0222D2270ED4E17CED6C77 +565A18155B38795CD27D7001E06EFF2C41C80404884E878B64E60F13A901CEBD +B0AB679183726D2808497859EE701055276F2F0F36763FD9F58FC1190A59B9A2 +65FFD2E0278ACFD8C6C575339D8B459C4DBDCBC4DD985F45AE1C7AD96FBEDD80 +60AF0F7FF0FB1C8960BB4BEA08B115BBB2B3CF7CA09B56622D59CD9403C2B2A4 +4E6A7E47B8CD864C07648D07AB07E8CE9173BB2B9C349A282AB8BA11076E1201 +69CC0C54AE2E893FA5D95E1A9440D9F991E29CAA259220DE5F3B99AC86DF417C +0F50FC176CE4A0DC9EE549D2FA86D80629225D51F289674963CC78D11F8F7406 +85E67DD88CCC905FD02C0C7125D7F7C2029114E399489DCE1490EEE5DD8BDD16 +BCCF12ABA0D8E5D016874943E64EE48A0CF3B544662F1C107F8E75F32FBCB827 +6B905EC3F579BE9AAE714BCA85FE11E8B6E29DCE0044AB28A9175B0CF183A0F9 +A43D9742DD8E1AF097D3450F83D97855265B9F612D8A1C6165C339F0CE092652 +F3843DF0A898EA13374098110F461C42A17A10F73127ACA85EEBD115225B3FCD +870CCF74E7103E305AD55C8D77B528000001B2593FEFCBE9014AACC6E83581FE +E0B3C455B02970E509EC1C54120688DACB24517BAD30395B4261D3E266C55FC8 +5CA30725C79DA01BA71EAB826745A22DD24AAAA048039BEFC549538CCE9A4F3B +75A50AF2F15BADC785E37D65A772D919482362A3E7A0EF75B61461CFBCD6AE1A +7941F680FF7A0BD04182C21CAEF966A52DD4CCFCC22420CA5433D148A0D88EF6 +32AD0BF5CA6F3E031670EAD28609AB31E3EF73A4DC62C984CB953274C53F4F9F +165ADAFCBACDAC894C0523646AC25509E65DDBC032E798EC31CE2608F1D89B9B +3413911202DF9C0B291BCA78895AC01F4523C7FA4174E2747032E38B32716E23 +00A6F1EC49633898D4EEB694DA03E2E68E607DBEEFA851F685D6EA3F242140B0 +FE1C632CAEE6E741B9AD5D1D51C0D7D6DADEFD3C084E152F8D3341C3ACF52469 +256FE1C5C7ADDA51B355DF0CF42604C9840D6C01EDD1F5022BE5B15E1DB2420F +44DE5B6E7D1CA024F1DA52AAE5F2B3E080B95D6B65914F1A8D7D6B235ACBE85E +61493A5EB7C06CE2C3CE32A42D9508AF914D4ECA8EBFBAE318E6692DDB02C811 +DBD168004760E33BE0DACC8A5E77D7850795B7FBFFDD85A7A12DA088E0D04CE8 +5946CCDCD41C221A1E9729DDD097218CB4783DE0AE30E333EF00A8AD42DA7C06 +BD3BD7716C10EE6F801D3928277AA87225AA33E8141A47FD9BDD64FB6D29C60B +F91DF1B8BBF9154811DE01AA799F5B9B1683A380429550192C09F052F027CCC1 +D42CC5B2E0C4A0FCE424D50AB5B82ACB7A9B1C7838722D3DC7E84A84BCB67061 +B204E8D1715A8EDDAD4EB4EFC2973EB418666C7F57580278514A6C5D0869AF3C +0CB1D99BD5FE72A665380ED04AC4BD8379A1D5B2894B82B8A5EC319302DDF62B +ACDEE383614D564D8FB8A7C6E6D1FC5C5B70C893ECCB540540C23EFCB7BFA574 +10D7C828495FFE4D7FEC9FF1F727F9CB0EFE9536989601F746CAD0EC97778E96 +D62380591A4B2F38CF1CD42A62B1DF45C760753E0E4AFEA5FB90309D412BBBC8 +6A1FE55FAF842BCD90BAD6D491061BCA6D8E589675B9418723FC18D3FAB84CEB +4956C5868435D6DEE4D4F9172BF165C0C22BACE30A0E10B54D49B04AB0FA95C9 +921E11B6F12913966E2488EBD830CCB05F02AEA26A0E87C98ECC85660BA28C1E +F9C2E577F087D8A844537008C8AED065EEF36CC3A5FBDACC6756EEECA8356873 +47EB1F955743F051D9FA4F51AAB900F7A8F656BD967FA52CDAE022EDB5BA2673 +C775BA4A6FAFAA1243CEEEA4414A1B2ECEF3B40BA6262135301CC62A355331FA +1EB4009CFFE5CFC9DF8391D9BC92BF3E666A3B22696C567F6680ED5C4B5829B4 +8A6EF11B93D084AAF2DCE69B39BA46F28131C0B45EFA3BE521822CF75A528640 +661CCAF1B95560682208D24203D6DA466A4C4260AB717BB1656BA8846C4DD7C2 +5E8A48DE389DF43DE66BAA55789B20360D143F7D89F5A7906DCED9F51F8F18F5 +F1C5B170B883F7C389FE4F935D9EBB68F3EA8DF84E501C1F280F8849BC476181 +7950935420C6CB6C7FC4A470966C7762FDAB91FBA0D6DCF03CE97660B3F9E054 +A63216C80E878E319CDAC223EAD23BC143A921C6619B7E522362D6F37F5EEC98 +F7CB040FE694AB48051612955CCF098578AD99B26736D99E3792508507625070 +12881AB347B1ED8F489D4FCA2966944CBE0F62174E2B76E613EE541E940E8C49 +92AE79B2FA6FD6F5B16CA72F10CAB2A322A217C316E4B4CB99E888987BA0658C +358EEDC1D85BA4486B479E2A2E6030786CF13889278949EE21B21D8F023B2CD1 +901FD514EFE94982A0C1AD2BD1C98E19848A4E36F4039EE0F4687FCD9C65EDE0 +5CD331D4BAA14998B24C0ABEB19CCEEB98611BA87F7BC01CCBD1AC749DECD76C +6D3BAE9B89AE22653BE4482ACD59A35DD0DBE43406E57AC36C5307AF81CB00E0 +3E545F943565D0D925513E85041C16651313564518F604AD60C7F24B14DB7C25 +34D8E4C5A0121FA194AC14E86AAA4E14305F6948C6998B3ACF67CA8BF1B12744 +5E7EE111CA04335F78DCFC440E9A99AB34E60F9EFCBB233A9D20458DA9405D56 +57264169160682DDA15B1B19A2C599C1671D0702D3AEF14B2645C6500C07A7C2 +D4B95437F1EE7D8D0DA247F54D4E68399487CB01F031B63760511FCD2858F1BD +AA7DDF5F3D0E4CDACAFBCA0610BF6DFCAF0046DA73542D5AF1E8EA8015D76A07 +7382A7B4F7419DBCE79A551D7A7CD12B1A8AB09174E5A3548BB56C0BCF4A87ED +18B7B5A9B8375AD8535785C2DB59FE934A4BA33E8112C6FAA92CC683CE765D24 +6E6152964086CFD1A6CE9191D1C59521E98CCAAA407F093AF076F250AE02E0A8 +2835EF3FAF19B53EAB419E2677E1A58C742BE93A55D2E6FFB71144BABABA674C +B972E811BF7857D3BDB809C0F23A51FFFF2E9160FBE2ACE2793EC2A381210CA9 +BFB1BA5F1576584EDFA3E904EF4A208350866A1CA232E6521018F245F33A9FBC +BD3B09FACEBAB6CCE610CBDA6170F0D16E477CC664BD4FBEFAC52A887A1FEE93 +C0143336EF77A46748F464F1403791CF0EAE32CD4DDB4F298A17E9EAF1885666 +4E467059DEFEF575A9E0C4AFE7A3BE402CF79B2D02B79C42B06684CE5875A9DB +DB64C03D668BB381B816A6F9813B2F5E2CBC194B93791F3BE0832AAA705D51F8 +1C0AE8829D844D5A1C5B9BE2519C921C6614D5DFF978A762B6D2F974B29AB353 +94166E26F6D86CBA714E47F84FF0A0CDF672271AF9E2AF7E2E8B743D7EE30E15 +C165FA7EE181ABED7981579A2D9999EAA208C7C8B33B9C6F95FD586CBD9354A8 +3B390D280A7D8FF96CE8A5C8F91DF9935F5A684133534C99A5918781F1B26C17 +E2436EE11DB1E3F104F7B3EBACA254B1FCE4B01FDE4183805ACB425FD8B46CC8 +04C1270FB3055101BB95EDF6E1D076A2A7FD3C2F97BC65802962E7EC127FB969 +C07E70F4D2F53AB08970C61BC6795CC95499F1A2C4BF9446FC4B65B123F81A0B +60C6488F593594E6296844C0959E0AB0C386CC76E769C7D325E1BE46926DDDE5 +1EFFCC709F7998ABCF24DD1865D7C60C6527D0B06A4B50725D1C3384EB164111 +70D637D76C3E3EF63D0057B1A0F970EAE0613F3B94B025C1CB733A4BAE995E99 +3C1D5B00419B2AEC1300C1FC9A9E98F5AD5B92F11A90E07D32E8D6BD040E78F1 +48FFE3D337EE827CF632351057B0C568A3413ED28343E0F3029F76DFAC3C738E +90B243F7D6039F6115845EE2EF471336C4D50FC48BC09EE001879FEA9B5BCEC0 +72EEC9FFE66C377390A5651677AEED0E1AE6800C495709B66C7F5FFC9974BF9E +9DABFD11A00F87FC7861180133E09A718D7685953600600A669247AA8F25C483 +0C72735CEEDF3BF9BFA88C178994AF71A16D84630B0FA21369F5AFAF22527409 +3DF33589BC9C61041C8AF4879CEAA373523D99C34801809EF4160416A13F5D38 +14C0B9B4C95B5E7CFE6E70D61A8C847819A9D2AF78C329DC67C123E45E2E81B9 +A0EADF7B66B5D7524E6DC225BFF4364BA9DE24CBDE57667D694D6628D7841AAE +49008D71ED25B845FD19B440E6AF9B5F140558AEFB89546BBF3B434E8ECCD005 +E8311C43B54F523A04B12D9B68400A6433AF4A8BF56A6E9EB36827DD1A5AC4BB +724636815C3149AE97E24C03D9B7DF5F88343F26A7335F47265201ACEB998AD2 +AB922BDCA39EC2036EC2721EC4B4180257C931237635B0C395A73C0441C202DB +9955C439043F04AF3125BB2FD696884E3FED05EDF1F5303D6BD60325CCED537C +0995E73E9F2B962FE6B8816C5A68FCD4D325A6865FC7D57A992EDBD05FB6E92C +C9725682A0CDC3214BD57988D001A5F62FD8A7C180C4F699A6EF7A804DC3863E +DD7A20181CFBE117109A793F1EFBD99392E400F3DDD6C64BE64BA05FF710E605 +7D564C9BB7F666CFAE8076F2E4209DB688CD864BB58965B33CC7AD08A076FDF0 +3CE533959C33732D444D4ABCD35C73B6CDD1CD70CF072BFB175A0B5476B062B5 +3A637FC14D8DFD7C44DCBDC78EA108BCC4C8E094C4EEC35C9A399850BAAEC9C1 +C73E525076AB7EB6F5388ECD2962F7BC6137E78CBABD857C035EC03272BD12EE +46692B841ABA2A1DCFCE4DD3D5E6883917D06659A523E0D3E3227516FCBE9AEB +7F28DFF0707E0AD6BB92A9210EAD45F69A1ECA248D2883FEDFE8C52F75A73B7B +9C7F07C4AA92537A2E9CE45F39FDEEA6C9FF6CA915E3D0AC4FC67BC6F0AFD108 +4810D67B320ADB50D4D37AD0C27A7564F6FAF3E6DB1CFC47CF9DA097AA269A80 +947043CBA10D93FFC7033C60A672C9D3F3999222D57492A97D5A4D10D99E437E +0C0289A1BAA29D449B2C17C24D780E68354D874CEA9EA4E02FE0583A18C0667D +4FEAB0CF5286FE487C95C969ED1CAECDD9F9BF5EC8A36C864190C73473C33162 +20296752CEBD6EB43144764E6FA12F60EA605290CCC3C69994BF0780A0BD9257 +A09FB9A9D3A5272C9FE2DAAB7975A5DCBD78A67E4F981E4EF224986C110F472E +F86E07EEB1B2B8325D4DF7E4751215C7DEB987CC9662B92590889D64EA31A1CA +55701D52590B3BAB4F0EA40D32CE6F98D6193BB6F843FD6FFEDFCD9C2CEA3A18 +917842BE0C2248B22D5AD817421748C36B4A10B6E65BED5686FCF26F4BA1C933 +1ADDBA36F99AD0F880DE81FA0C14AE93074C0D2F32AE2197ED43E3490C0A8FFA +0D747D1622CFA8CCBD48E8DC112A1743AF9C7BCA93E5B5696C46A27A8815B167 +BF2896574824B20D9C1CADF443982E8B8ADF1F705AD3FD030478AA79D12DEA5D +F5E3E9C309D9F3F360525044503A563F06AE33FC380C3DA0E0EACA854B23D030 +11897C208EFB2EFA86EE596420DE71B3ECCFDF3678888606031FDD301429AC82 +92CD38D8DE1C888EEEBAEFF6E5C9AFD6B2F8FB8B283E68EF1E12AEC79FA23D02 +908DDB7755C11E7DD339A1F2AB6AFCC27FBE797D03D01DFBEDB1460274C8BDBB +57A48FF118324F231274183E0C00064893021BC8F3B52C7E784881A31D913F17 +19675260415F19D5CDBE742FA47668A6C3870553E3FA0CFE56CCF589767DDD20 +D4540E734169D2E1E1E979F74369EEFD66777BC54361CFF22291B76CE36FC987 +D78E9A4D17C75B8DB9740B72859A51B65E0985F1280983F224684E7300191D62 +D8248056727303B6FC6CB175EC5C6E372180995A44680EB012A97AF3B770BADB +40FB89E4D1A48C46B1F56250382AFE36A674B92D132A56F5929260CDE410A744 +40E8B4262891CD7EB6CAF8DCBD3C58B46A5F0E9494651A2DF23EA1E3C80A2ABA +0665C9562DE3719F15473F9138C66CC24BE1DD07C961F7F64E638496911F4FAA +84BD95000B76D644EA13B94A73A1C41E1B08ED9A978AFF4BBF6567ECCB823D2F +5FF935156F79A00BB188BCD617B6FB2541339E4CB82D196BA067DCFF9DC6D401 +3114E16A003D4722FAAD466AC7F0F932ACCBA5A7BCD038DF0C39DEE32E0CE33E +16D59F60B06DC9561B40E328F8CFFA55042FE1C52BFD8A3273CBB02044CD01B1 +029A457EB8C8AD1CB1901140CCC5E8389416DCB7639D7D0A608F20ED96CAAC89 +F73DCB332055DBD161936E6A1EFB24CDBEB8AA69BFC7E2C4AA083B55D431235D +21B65636385C41EFA278C440D24743FD2ADA13B62D53E7235A54760771C50DD3 +608ABA221A0724063C839E96306FF87344532D03EE2BC70A223CB6FA74964687 +82CC44EC76EBC8404A42644852197569B1711946ADF595E8A6C7789C7D8720B8 +371059305ED1ADE8B01C494FC1342154916EAEBE3F7732B595A840C7A0363839 +0977D1EB502C15D6FE8A368B398C4BD7977914B072DF30C4BD7DEF9EAB7AB5B7 +0327D5AE95CD10F79DD6844BA1CADED35FDFCB17B8C28D55EBCDF54FB943B39F +0F9E98494B1654B1CA280350A03A9ECA8B00B59BF0D7015EF79C48A13662B7B8 +0547E2E3DAEDC268822F6DE7CD6F14AF71F7E546E12B4E11AFAADC34AEE5BDF7 +1E90DA341B6CD373009C6E774B0916787F637F6EA5AACC162582F1D10187FC56 +39349AB0AF7665252B5403E67686DF0973104F5B193D8CC9F673B3D9176A4B8C +9C31382EBD5C1979493FAE6EF2056A346F656EFA5B31922C434BBFB892EFE8C0 +6230451A3F26B98DD8E62ED4757460B1F0F5C813901F351A93A7E11758798965 +EBDB3A22144A7782238284780A9263B561FF7F1CCAA4D24DD2F37B177FD24EC2 +B372252825D66DBA7941B096D85BAFFA5C2B9F8AA4A31A30AEF5273FCE05F36A +75AC322BBC88C6B7D11CFD48D6D70408C664145D81130A2445D643E7118C6FB8 +48A01EECC93A45D37FAB6680D32FDF09E25481E18C388241D5ED823EE6FFEAA0 +90BA7638DE302486DD4F682CBCB33871FDCE16B67B158816960B52E75A1C28AA +F4C27D521AFD7E74A51CFDE38340A368ACC89DE2FAD37E34F3858A5C2DC7BAFF +F4CE85374EA40E25E959A9B74834DECBBFF9FAE1F39FDD5D0E8863D71D27CF04 +4AF357E77B565F5EA577466FD4138A5516E4624C7214E2BEDF1BB484D3425BD9 +ED34FD792F2F2B9BBB40FEA9D0056FDDBAE1CCC72FC101AC94859A9AAF2E37E2 +39BA606FEB4689E4E04642B70E58DDE5DA6608E318A70E24B6C7B88DD7E5BA52 +8FBE8B99BA85C5444FAFA046574C9160A0A920DB544419993BC4A1E9703A3D85 +A97827D2AF45C8379398A4D2A9DCE175DE7008A138BAE08B4B9A6B52D73D1B24 +6787C31875B04E35112F6A8AF5A2F8AE9155A80C36C6E8EA83642397717383F1 +EA877B01DFBAE379529D16D1E0CCCA4B8C8B94F979251914B958F0713859605E +6DD76A27705012B089059F9490AB4238107EF9AE1A556CFE69360AE47F66AD68 +CB48D08CB5AEE83A3A9D77121D2A599746E7B7C839B4C5CDB41EA0ADF56A1375 +8BB21918F49B70AC01273EF2C388F118806FAE2743E1DB3164F4D5F7893ABA6C +B5C122C9290394F2A216261845738E66B7650C8CEEAD7452BF6AFAF54C8EBDBF +DA5876569BE294EEE5B54F23ABACEE7FD554998C84B6450BDD689A10FC20845D +89F972F368648CB8CF864FF6648AF21FAB210BF101BFDB3B354C6659E761EEEA +31892585C32A18FBE8E4883D9D5CC48D84EA2F9FDB73638E10CAE3F75C3D9E57 +6810FD5239352AF7DC7DDB3704CA7EC8FA4FA3EE75FDBBE9AF058FFA17A32A17 +AA578E1A1708E8CB257CA968EEB34140804C224B2FC49643E5B3A3F7CC5E6C75 +6EA9BFD9FF9067675CF025636875588F8C7CA7E41654D7D3BD7A388B8F517686 +4DD89A12B204251AD96E3FBB73B5BEFAE355E5BA81EA1A1F17DC49647224A9CC +0CA44F3D25CF352E184544A710CF6EEEE3E73DDF1366A99B07F47E452623FF61 +B2D94549A80ED356E864D58BC00DE620D39A41C8CC18B5301CE74AE512F6B8A6 +72CD753E7161956C6BD11D375787797BEC1B061237307B0E1E08BBA7A94F422C +A77335BEED64C6AA2E850801FBF083E1DB91776FE9F7C6EFA3278AE93AD6A58A +193AAE6FDF8B15B529E7A5A543609E3CFF4D7CD3A121E0871CFBF0EF1D6E39CD +552A2C1C3160D13787E0F01B2C405B8D46A802F8026C5CA738AADDA72AC9B78F +5957ADCC3BC0A3C0A201089663D1FD6B68E1D2020E83BB50327141534336F1B0 +9B264841F663B1BFD914522EE29C20E22AB6141AE15090302ABAFF5CDBAB2B26 +84F3BEC919127A72C6E1E35A7D69B367D76481231A33AF2FEB9470F35872DE5C +50F82702B55FB3BFE33CB165015BE9F7CB928769DE116F207DFB5F6E1EAE31FD +000D15ED943A1A30C4B4048AE9E7D91BC1B1CD64EC2C24DAF572BEB3F0785AB0 +0D74341DB2D399B39FD5A6EF44DAFA7933EE532E6D4DF024EE9D4D27C88B25C6 +5CBA87237B30917F6F7D7EEC1BCFE774B4D7E0859EF5E07071B58EC2B074B288 +E0FE19979B84ACA7E6E7FA1889DEA18A119E2509CCFCE53D0AFA66020624CED0 +C55C31392AC12110FCB8C81BD289FE7B6330D7A5F9B07994AB79A494F370A732 +94776A8C2B5E557C2F5CE0CA852092F2181C4EC8ACFB01D197AF975B5DA482AC +59BD5C70267E811E80525111D17BCA8D53EE95A843F1000BE05E93F507113ED5 +751D6970485082915C28A673008B4F9398EEE609E483D001296F181783423B9B +7BD78EBBA0CEC7D10F35C23137BF69AF40DEEA478923AC289D554E6837D380F1 +5C3A29F97B3C2EADE26B9926D2B7F83289B723032C1385AA809D0B23B093D4D1 +A0A9087625FB595C017C1B0C1029511225AEBFE7A52AAB58A9BFB740DEC5AA88 +6F02290D37B03E3EB90A821E4BBDCD96A01A7A23FF3BEA2216A41BCFB63AF555 +8A7B9D2211DD290DCDE2A28BC6E1F96048CB9DF02F0471BB1F9E5EBA85E035B6 +3926CE1E1E97DA841FBA83D8C95717A23664FB840AF1DB06D0C47A989BBD5B9C +3E710BAE7A7C5BFEADE6F96EB056E6E702AE6A84814E0043E61B5A03B7A717E2 +54CE4FABD79B8F2CBFE163F05B717A76BE430F459AB5EC6BE60F6EE1BBDCBA1F +5DFCADAEFF23E029C48C33D5844673334FC54EB282C76357D93593A34E099E27 +0D29C79DC8B927266DC6E71FA8B2804AD0D00FDEC01917E7499F2706F6FE9EF5 +EEF6E24581BA11ED1E6405394C85E81E3ECA373279306298078DA538EBDBB62A +62AD89EB75F19A810E7CA9C745A8910129B1DDF7C70B5853B6395871DF37E468 +73C456D0A83C17DF45B7B242A0FD09D2157EBD8B14D4B852766F11962EFD1B0C +BBCD3C398DBBDDB157F80CDA579478A9689C720C026372B13B363CF23BA8D2F0 +0828BBE088A6DF3EE50886D5D79282B82145D5B1FBA13CCABF9C4E94F66A145D +F1BCCE4FDB0AA925E131B4270A48D25365090B70EF23F92ED72E770744059753 +1AC58E87A3A8B5F75C39DAB382E14AA485194E650C3F268EF6DBA0B1A604DDAE +7A151A21CB7D411E77289EF01A99A4332EEADB57372D43230B804C90FB1C08BF +201C3B7ACECA45D6A1DE107A9E231BA5CEB149F40D71C67F1F7ACE8DE1271368 +FB5B447454BD37B8BC43C65F6E8733323AA43FB5F83C4FAAB164C3C2DB7A678B +6454FF9EB6C0A4CB8186B895D1DBF0B5382BBAFBE484C5580CB354DD40AEF365 +E1DE1638E582CFB5C1E58EFDF0D3636C95BCB4DD9573F00AE7149371E0CB0969 +B3EC075D3D7ADF61E79E29F83144CFFBDDEB68DAA5E05D30508EECFC43B8B625 +5B533DCC9149E8770F4EFE85207CFA8C1E50D8B589E090DC84EBEF2360B5F3E4 +479E68779E5A24BB722A37A311F3AA39BB04530A2BDEEECB3BC9FBC889E66949 +797E3BFB3D1A1CE6A62CBB5CF5DB3CF99954F5D0CB096CEF2F5431994738CF1F +97FF3260AD2D89FD819B16E53D59E9E0FDF6B56BAD6E0AAF557EFB6A48D029D8 +F70BA32DFC0779B353A4D476B86CF02A505D40815E2585FD03C07B32B14D2B58 +13BEB639824A1FC04E7336470DE07DADD4D25A641B430DD1336F3A1D0F1DB6D9 +453006DC947ED4F2D528C00BBA98BEBBF855AC8C133B68DD62E292063FCCDC1C +0E390165DF8B85C94DEC13270D824E029046C892495BE1303C44FBD3BB36745C +63ECE2B67D2B303DFC22E2FDD140E40775A99B1A8D11DB4ED1C625540E3CC640 +269F338D8B04A713CC3063EAC34AEA0AF725D31642877042C6DB4E7950DC8C0B +61A322EA288F55B899F0A08F49E22791A2D55BBF89CBF0F1B97317C04216D616 +FCB5D100126A49DD94338D4DC08EAFBE1F08AB6B1792D358C50CFA58B5A66643 +6B801A2267C9843F9C06FD9F137AF780DE55D83F949F1B8CD025475779471377 +B8CF89B2765C0A9C41C186C586629C36C879F3A29D7A9F4E8B8919425F3B0C98 +45CC7A7AAFD70D88E2DE69200ADF0D263951718B2289DFAC4A38311519C07933 +9627F52FBEEE5B9619DE3BAC9B2791BD888B70AFDB75A1999540A1D16E9D4491 +FF5D3E5CE027E7700F1CC85F0BC64ABE5CADF8059C77CDBA5EB1AAD36B1C14DE +1B30ADFDBEA34650116888C6714B1825E56406C96C06B1D37000AED2840743AF +BC2F6F95E7917B32C3A5C7D36FB9F34626C0E61231599C2EE02EAB2DE0136081 +48A65E57FEDC0664DD2934ED21FC98BD568B4DD7BD55A251D16D2CB99C53C96C +0A44BEB44D9714F33CEE323B0ACE7923AD307A8D3B0CE768240F0E8C15C2693A +70BBBD740B3C410DAEFC933B324A3FFAF31C3D03516A6EEA22D2EAEF4D607FEA +4E865D7F6A47EC9034D23464715127986B704A08EA781C5DC9096EA7A95F611F +AEE6BF59FC2F3F67B20C70C7B187E0ADDC966BAB1258DC4B7C64E317BC97F2AE +B07D61A535F51DB2C0A058174EA194DA4F0E44326A2BE85E31A81A2D1032BD4E +945838B571BC43768226FD5171F01C24AF9654A8846AB32147D9E6F43F03DE47 +2E515D0A300BDE126FCF69A4C19DC8F13641C89A674E5B299DD875DD0CDADEFC +54FDED84A2946C4992B9EFF20C93AB2EE98837456C5BE2D691E5BFAD21A297C6 +9FE7FCF5F91AFE1546DA4F96E0F437460B044CD9BB2CAB9422FB85C5E131866A +B392515816F305001A0BBA51343572CB7B81356A0B45E33BC7BDF0F507F1A316 +BC9F6563A5BE869CEB87DE1051F1BE6AD6F267AC18B6A8289215D968BD467A24 +1F5F5233230CDE952ACF0B776D919520E70DBD5E1D5DF82C89DFAB421F98FB62 +8CCA29D0D223FAB23AA37B3609D1E15ADB7F680CB67097444672C9347E47E230 +B7A8E5D4FBC1C05DACD6CE17006D2150F6D378459E4BEDF9CFF363E564D63353 +C2C609C19DAF27C7DE9A91AF2F0664ECE84CF7A8C288F94EC8033A9176FABB14 +2B41009D02B6DC09CF9DEFE893386E3CD5E7331A35F481E18BE9CBB04951C4FF +7F08F5A49566BD7142D20E1A42C875A0EF12892F404BBB128174F8979852151B +E67D2D84151BF68E9C6427BC362CADFE532EDEAB49BCE2E5009030151BE5D2B3 +CEFE4F215E91DCE7D407FB57BD0FA8BED720E20E65FF4CC5BA32C867A1F9DCB3 +EAD136D0F7767485A604CC97D47A2320560D95E9315D04D72BDF9DA3F9E4836D +1D24ED2D707DF128810F218425FCEA314852DD80D48BD08963976ACFB9C44CD2 +BAC78BEDE35470512463B5C6E877BA3AA4749680D05FA3959A0B2ECE7171F1EA +9B963122A1A72DFC9E6FEC7E699A4C6BD742E3D4D570877231AF25FC17F598B6 +3777595305CAABA3696ECFCC725EB41E222403D84DA710D690C155978D93F389 +0F49E87EF135D19682BD2A2EA6FDF7CD3A2BEB6C087643ECB69252BB8678B21C +33F85002D1C82BC7066BFA02EA5E7D671D6450E5297BC91B2121BF46DF58892B +14D581DBF322E89E6BF24C6532CBA0C3897DC13C907EFA52142A018CA820A079 +52D7541D59D864C597D7ED9B9714A4422BCFE03AEE1EF4B6B565B40FF1EB4BCC +ADD77668A46FA7CFAC18AFD4B92C8F76806F81A818663A4DA845DF15F6A2DA70 +67F165013514D26B51D958A57EEBA06114DA17B3A930FF23B0DEC464C8D2F915 +68700C34E684DECC3639BFAC26B22E277B1AF59112FC783B887F37A730766AD3 +F50CFBAC08E0B4050C1434241EDB33BDB3F97E1CDA67721899E4A7EF1DBB3E3D +4AA90E615D06A805EFD26EB78A6F9FFC12E53D5E0FF49909F41E69D10C308EAE +707F729147F4D375E461690B9DA00A94CCAEF8C039B1F6A911A2AFFDE3C954FF +DA1FDC3C137433AD11A357F011594CCD9D1EEF0B976378F8CAF292E67662EF17 +AB786E90392DA9618E9D8DCF87C6C51C3B7371207C66D0B692FE7C290C0B51C9 +EE8B2670B63946EEB7FB9A7F66CD72EF1F890301173FFCE6B8FFED59895DAC93 +EDF39170D6D906FD2A462A1D2A85C1F19D77EBBC4CBAADAF49CE9462F23E1329 +8CD5B445800973B978A460921E8825014983943BCAA4D1019AB6627925B03E4D +DD70D0A1B8694A0D47DE8DF8B89D079C9C14C6B804058B43B39780847D746616 +52ACC4AAFCF918C3D3135F7B82A38162BFBD112D581157A19DA30ACB74502FE4 +40D7EDC6EBCD9BB458F2668D727CBF2E53A9F0121F62678D113EAAB36C24F3FB +831ED9761D907C5DCED84E6A9B242B041D26BB25A88136470F112DA1459657AC +AF399CE6FF71A7CD29E40A19C2503D08372C2A770118ADFFD821159C067B98AE +1170DBDA9AC3B3C31CEE8F6DC8B20C27295F362B52F1E309146EE975F9B41094 +BF28580EEF0DD850CE543A5D369676D7BB9AF94FBECDE2AE3F09848107BB9A89 +97EF34E79201D422622E36F78FA2B80E678FB154FE84D934FA7C8D9AA1A1AAF3 +33D0A40D2DCE86DE6380BF617ADE6C6E5C97A3F056BB062A9097293FDC0BD70B +987E357AD571971CFF01E913BBC1D05F0A7205F1ABAF516E38C02CF41DBD399C +E4B4648049569DE6DE43170DDF91A4BA23E398F82EB411194147528312F04F35 +9B8A36719E8CB6094DF7E2A14B1632CBDB2B1966B59CA5A778ABBBD66FD53571 +CD8B761D8BA11C0BFFA71C58FEF39ABA40A4D01974403D5076CB826315A24ED7 +3D207C528FAFB65B4861BF8AD2B53C748B0A4B34E57771278FC24E98AD52F34E +04AA492C9815EBE676781D40239B3FB7E462DA782BFE82C1C43BD937D6C260B3 +29D6DF902006EA10A63DC2090C9484C6234AB78A45957087E65F0F8979D5A6DB +C952E8721133F3D88316977789EB8CFCEE5085FA4741AA4090B920CE7849F9CD +4DB2FCC872CAC7AF5FEF0257B4A0AD781B6B4F634F370F7F61DBF8BB66578E34 +4DF73EFC1C23CA11C7A6C336BAF988B37E55C20F4138A7B5D8FBDBFC70BE5D37 +AF6F7E6958E062C6344C14249958E8566571B9C79ECC +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/l049036t.pfa b/client/shared/lib/fonts/l049036t.pfa new file mode 100755 index 00000000..df2250f9 --- /dev/null +++ b/client/shared/lib/fonts/l049036t.pfa @@ -0,0 +1,1613 @@ +%!PS-AdobeFont-1.0: LuxiSerif-BoldOblique 1.1000 +%%CreationDate: Mon Nov 12 2001 +% Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +% Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++. +12 dict begin +/FontInfo 10 dict dup begin +/version (1.1000) readonly def +/Notice (Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/Copyright (Copyright Copyright (c) 2001 by Bigelow & Holmes Inc. Instructions copyright (c) 2001 by URW++.) readonly def +/FullName (Luxi Serif Bold Oblique) readonly def +/FamilyName (Luxi Serif) readonly def +/Weight (Bold) readonly def +/ItalicAngle -11.3 def +/isFixedPitch false def +/UnderlinePosition -36 def +/UnderlineThickness 72 def +end readonly def +/FontName /LuxiSerif-BoldOblique def +/PaintType 0 def +/WMode 0 def +/FontBBox {-221 -211 1138 1012} readonly def +/FontType 1 def +/FontMatrix [0.001 0.0 0.0 0.001 0.0 0.0] readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 198 /AE put +dup 140 /OE put +dup 216 /Oslash put +dup 196 /Adieresis put +dup 193 /Aacute put +dup 192 /Agrave put +dup 194 /Acircumflex put +dup 195 /Atilde put +dup 197 /Aring put +dup 199 /Ccedilla put +dup 208 /Eth put +dup 203 /Edieresis put +dup 201 /Eacute put +dup 200 /Egrave put +dup 202 /Ecircumflex put +dup 207 /Idieresis put +dup 205 /Iacute put +dup 204 /Igrave put +dup 206 /Icircumflex put +dup 209 /Ntilde put +dup 214 /Odieresis put +dup 211 /Oacute put +dup 210 /Ograve put +dup 212 /Ocircumflex put +dup 213 /Otilde put +dup 138 /Scaron put +dup 220 /Udieresis put +dup 218 /Uacute put +dup 217 /Ugrave put +dup 219 /Ucircumflex put +dup 221 /Yacute put +dup 222 /Thorn put +dup 159 /Ydieresis put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 230 /ae put +dup 156 /oe put +dup 248 /oslash put +dup 223 /germandbls put +dup 228 /adieresis put +dup 225 /aacute put +dup 224 /agrave put +dup 226 /acircumflex put +dup 227 /atilde put +dup 229 /aring put +dup 231 /ccedilla put +dup 235 /edieresis put +dup 233 /eacute put +dup 232 /egrave put +dup 234 /ecircumflex put +dup 239 /idieresis put +dup 237 /iacute put +dup 236 /igrave put +dup 238 /icircumflex put +dup 241 /ntilde put +dup 246 /odieresis put +dup 243 /oacute put +dup 242 /ograve put +dup 244 /ocircumflex put +dup 245 /otilde put +dup 154 /scaron put +dup 252 /udieresis put +dup 250 /uacute put +dup 249 /ugrave put +dup 251 /ucircumflex put +dup 253 /yacute put +dup 240 /eth put +dup 254 /thorn put +dup 255 /ydieresis put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 48 /zero put +dup 163 /sterling put +dup 36 /dollar put +dup 162 /cent put +dup 131 /florin put +dup 128 /Euro put +dup 165 /yen put +dup 185 /onesuperior put +dup 178 /twosuperior put +dup 179 /threesuperior put +dup 46 /period put +dup 58 /colon put +dup 133 /ellipsis put +dup 44 /comma put +dup 59 /semicolon put +dup 145 /quoteleft put +dup 148 /quotedblright put +dup 147 /quotedblleft put +dup 132 /quotedblbase put +dup 33 /exclam put +dup 161 /exclamdown put +dup 63 /question put +dup 191 /questiondown put +dup 187 /guillemotright put +dup 171 /guillemotleft put +dup 155 /guilsinglright put +dup 139 /guilsinglleft put +dup 47 /slash put +dup 45 /hyphen put +dup 173 /sfthyphen put +dup 150 /endash put +dup 151 /emdash put +dup 40 /parenleft put +dup 41 /parenright put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 38 /ampersand put +dup 167 /section put +dup 134 /dagger put +dup 135 /daggerdbl put +dup 42 /asterisk put +dup 39 /quotesingle put +dup 34 /quotedbl put +dup 64 /at put +dup 35 /numbersign put +dup 176 /degree put +dup 43 /plus put +dup 215 /multiply put +dup 247 /divide put +dup 61 /equal put +dup 153 /trademark put +dup 182 /paragraph put +dup 164 /currency put +dup 130 /quotesinglbase put +dup 146 /quoteright put +dup 123 /braceleft put +dup 125 /braceright put +dup 170 /ordfeminine put +dup 186 /ordmasculine put +dup 177 /plusminus put +dup 189 /onehalf put +dup 188 /onequarter put +dup 190 /threequarters put +dup 37 /percent put +dup 137 /perthousand put +dup 92 /backslash put +dup 168 /dieresis put +dup 180 /acute put +dup 96 /grave put +dup 136 /circumflex put +dup 152 /tilde put +dup 184 /cedilla put +dup 169 /copyright put +dup 174 /registered put +dup 32 /space put +dup 160 /nbspace put +dup 149 /bullet put +dup 60 /less put +dup 62 /greater put +dup 172 /logicalnot put +dup 94 /asciicircum put +dup 124 /bar put +dup 166 /brokenbar put +dup 95 /underscore put +dup 126 /asciitilde put +dup 181 /mu put +readonly def +/UniqueID 5078994 def +currentdict end +currentfile eexec E98D09D760A3C22CF119F9DC699A22C35B5B35ED6AA23593C76D54CABB5E942B +F7D6DD84F1664B89699C74B472DE9F8E6DF925F6C4F204E9F1C639B4DBA988ED +2AC419FF2B2BDE605B8EE3264EDD66412D4F21C64AC522BDFC7C5502F9C3F3E5 +592B3B2093D33C9BFAEDD2D49E89AABAA832E23F062E91A25032519D1868816E +44B4E0747795003D7930299D6E1E2A5BFE0D595DC97E140989CE81D8D7F852FF +9CDC7A1B1B598C69131DEE005B415805A16D8F1232D9E237CD60D35F0FD179FB +1219B605B80A36CDE0BAAFFA5D97DF370655785FB236544DF1E7A00B7E8AA37F +C23C6BDAB4E3F9BC5EE40602171D028423D88D16F57168C9631090E451FA196B +8B446947EE6233FF652CF41C03ACCD60952FE06298CA4E207FAAA38F192D2D8E +E528AD9B647706997722D73A9203CF7377792AE5780299EB8DBF2C0CBE5E1572 +982D74F81C32E627DF120AE53A1BFC783FAA74AEE3920D208F8AF826AE684F6D +CA41AED94655B6A9E0D60C34C318C7E76F5A52F373693DF3ABC03A72E8DB5E66 +CF5DAD37C9CB9EE42DA592D9DB876C6E62DAC02F1B126C59D1703D3A685C617B +F5A8FD9A630D8746ACEA7B41E9DBD4C47B30163DE05B34AAC3337965660BAA0B +CC2BAFFC0F3446E268C9BB27CE08456549C2DFD8812DAF308024973D7C38E8D1 +30C198D253136F3478334600EBF8C0196ACA6E350182B387FCFEB559F62ADD64 +D9B3C78A9832FA4EB023B07719B4D8A173274C388446C99C63F7C6313DCE4118 +8D2127184AFC17D5651DC1F2B7A763052FDDE142C714658009F5407B20F1D30D +FC978A2FBD8CCE7523A2A62EAF38D6485FD62C13D444DCEC7DBC79CF9258B502 +67CE30E2032F03718CACA3A28F71B941923F52B6FC4EE1731D9BCDEB5F456423 +52BC72B85C92AA0A7EEB5E7BD6470B7FF3C9A68EB479102C6F790F27266B67A8 +59AD2EB5CF5A20B6A39274BAF31E02E1C487F59EA0AD622DD509438C43E7F935 +C21E6FE887846ADF1D3071DB5C1A7868787F92F46D6AB19D56CCC3742B646AEA +2D24DDA6E00C6EC895103BBFB6D67B0C902E176F84AED3A0999C2C99A65F1A64 +A362CFD2DB6885F1EF150D828BA5C685A3A0183963102723AAC166BEBF18CF62 +D0C26D613CA8AF740822182523B26060E255124B1F9C70511B9D338A6AE2D837 +2492D7A67A371CD3E757A8130F8FC9D6B13BFF690257B7D41C012CDEFF5BFCAB +B511D068C9183BC0983E09341008C9717C20DE26E61CF7CA45E59433E58FE1B7 +C6884418C26663988693B995BF1EE3842EFC3E33976C988D6CD724D3B81A942C +2B0BB08F65A08BF768138C8A750A892DDAEF502823D4D6706CCC05451652D896 +38C09DB8EABA368FCF8AAC4E482942DD3D784D9C57675577F107594C0D2E07EA +36553A9785E0FE26534DF886F2B5A906018C48F1A0CFAB7E373476BCF98E7CDD +18A11D8F2FD16699FAEC22754E53EE9C972FF4A3901F94E58E23823A78F40439 +B709D90F48348B8B8E78569C77326B684E4DE7AE9192877076BE05932E8D3FCF +DA09EAADBDDBA35290E3FBC6AF2FDBD178AC051807027BABD733B54DA6E6ADA8 +350D3FF874041333CF88705C96F55CBE46A4D6DB68FFD447996A124603F3E29D +4673137D87A8B33A430F18ECA5DE4ACCF88AA16294BD9A3A98C5081C2112E3A9 +FC7C9FBB704BAD222B07D0D7E9F52BFB316992C7ED6AA618163D2268734D7B22 +3991A8C256CC17087E844BB8FB806A66B9EBA4DCD9FE4DDA936CC61229492253 +2922EDB5B12AEF0F77D693C51D616EA252BF6CF515C5CC737495F33CA41D9F8E +34572232EB422CFDAB03BC194E42DC669948235E0BDA96E50A3B78FD24A8F859 +61B560D847BE4A63E97358DECFA6BE9B86E026176DFDAFB470D57AAD803FBD38 +714DC319655DDAF6BF3E085819C456BCA734BC479A22BB6E8C9FE3E747A5E47E +0FD73B4AF5A80AC230DCB02818AF68A251998462E6DE10AB7FCA5FED041B32A8 +382B480F30400DB936DE1665D9D7592110AACF516FD0F68026AFC371458BACD7 +BB9F0A7C5B399DF9E7B02249526C555137B5A2B8BD3FC2A5055ACF2A983C54FC +5D4862F8867C39DF18824D457F222918FACD5EFE01982CEB5E75643EB7C61F77 +5ACFF22D54B58EB7F0BB14210CBB8A8B562B188E04164F46DCD915E428BA6137 +08420B83F3ABEE130C92EBE3A7C55FE7AAA126F2E9D450350F6331D4FCA8554D +2A0D48865FFB3E0CB9E97847D82F8EA1218B5DF5A9966DF6B7622A0BC06531C2 +54F0589991E10C95A5D1CD2BF64E248D3BFDF25F88A405E95FA254D2E4B70160 +9C8153A5504EE22BFB83C771616044B55E0B9676CB234B0054EB8B3B073AAD22 +B7E7A89C15A80E3344ADCAB949955641E1785EAB2D62B843DDFE4D5974FB03A2 +8E9CD8E6B10A98611126BCACF813843C92AC35DAFB9F14055EEC42E01028431F +2456598FD76BB66F1309B1DA0F7077D86BDCFBC6B628B895011B8D74935F5419 +8902392C6D35EC29225CDC7D49712D1D9FDD66C24C5340C1E05646631902B92C +516F67ECD172F882CDCFE2F957E4F6395D79E9F08E0EF64C7FC0B3118E3BFBA4 +FB752619779BC1645969558BA349F8868B3A3CAB48ACA78FC8BBF33198F03AFF +3862063C0BD73AA486316E28F948E31B89CEA0A0F9F10311483EC0676F597458 +8943317514B3B0D47274A499CBA6F76415D22ABF9AF5AE9A164D3444BD3A3CBA +17682AED8A11DEE04EF6965C07849C06970829560793B5E422DD801B4AD94CCE +AB73562530310B79FCD6F2F93182C05C509C0B2163F9F24A7BD06DED8D50C955 +1C9012158313AA8A548B79D495DAEDFC651D4A6110B98A88047A6893FFFCF00F +03D6848F15412C9200C5AA0525397806CEBF448F92E9EB110EBAF17CB2856DC7 +8C22DA7487B9E55B6DF23F345CB478689FB8522A1FEB34EE58AD8A4805B7CABB +58EA56D1FCCEF7869901EA0229908C74EDE80E2CD07B0E33D17389A434C54E07 +039EC17E27A56847CFE4FA04D65AF20650F8C58D24745FFD76F443843B7ACF94 +01528C2F046C2F8598C36367E9FD009B2B73F52AD9DCB49DF76DF74597AF9AE7 +B43E4988D7CAA34ED694CF0D3F67B9C21680DFD8E925FD4DC6E4458939C1F5A1 +1F0465493E0B8DD3F63034813F557C9B321E9265F4467E1BE3070101675A40E2 +36AF9F1D37162176B4B950A37EB1EFA3642B9E8AE6D5CC77DDBC6E5C0A172BC8 +4EDAD45A7502ACE290A9AB4D56E32245F7AF75D540485611CC79C813CCC61FCE +E7C773F74E26BBCF5EAFC476AB031A04C1BEEEFC881843AC2438988CDDE7CF53 +C18FD1A9E1F1EC264DC2484BDF4867933422A75E0EAAD1AD55A408D81ACF6AC5 +D93D12EED180D56666BFF3479B7EFF185E39D4296C7C87F56A6C1B6B0A99DCCD +F7032FF77585F4A1A22DDF46171A5A0C0601758F64CC10DD4EE4EAB0BCD05753 +76ED93EA50B176B36196DFDF5345E4BC934D9B6CF7ACAAE77A9B0BC66E460402 +87AC5F4CF69ABEC05B6DB517FE1059002B95E4245297272E552E6DFBAE1663E6 +1C37C0C90916037DB040BCE0BC1FCAF881461E0B5960997AB582942DF119F00A +A58EF89B9CA549913721521F259B135EFA1C7E1A5F87550621E31BC7DB07FD3A +85F024F2943F95D66503E8498D4B7038FD7F938950FF22310D1B49E61E395426 +B20B952D57983BF33A707C794895B082DBB035705F8DAE75EDD15A2F75C9DC04 +91A59777B2953CB4A1C8575C4FDC2DECE1737E9ABAF62637B0FB6471378E942F +1141977AFC8032A13866589CDB087995F9F78EFF5713572E6F3F7FE4467E8313 +44D994CA7AE974124CA93BD83C9E8451C956BAF993F279AD7044ABBE7BB826A0 +2757ABB1135A21C9DDD3781A589F9252C51452458CB5C94C4FCD53D3ECCA36EE +263C1ADECAAA22CCF6CE9DB923000BD7FA6B6B12032ED49A469BDE95C5903420 +CF275F03D3637C7A65A872F462F19C6EB25EE8F4E7A49C528806EF56ABF5468E +BDFFAA111A3B5E5DC9C46340DB0563DEC9250C603439F656ECC6F8A5E344BCEC +DAE02EE7F349175C35D8F8CA7715BEEBCD45D2980B707B3B2EE44FFF846C8B8B +8A7C02A56DAF16192B3823283E9876E8079FA3EE07BC1EB30AD14DA63B80DAC8 +D1311AA303A9D56859A4169C20C7F279B7527741D44DC6AB31A2A048C2CCD362 +BAB152807E3F73A621579EAA2FA7EB2BD45AD89E170D4AFFE6ED94A395965E32 +09C600D9AF322B870B34068FB0706EAB341FEEA668275183D38C641A98EC2BB3 +0E6827F3A764DAF871DBF5D27D254FD78E5F99432C405E92178941EE9B1999AC +3BC5E2D10BE76BC555C63167A0408A69A3B37A4D263204F6401A3AFF49398862 +C685EEB99C79D42A7859211B6C447462C894150469429C7E5315F575F8AAA66F +C2DADD013A304894E50EAEE124C86E1AE87AF200C8DEA35027ECD102071F8FD8 +F3EFCE1A14AF5910C6CF5A5A8DC5F09A18285D0384717E4FA0232443D12130C4 +EBAFACCEB4A8AC281F8B4CB5136740A15E7184A2BE166ADD3B307E918D326769 +F99E923C3834EDBFAAA5A2BBA1CE952CC01804000E1BF0A4C80B35E0474FC985 +3F852E8AF570C542ECF37F4CBB940E278FD2AD1249144457ADED44359A90D3BC +9022B23C46F25C74D22A61BA69F1BBDB4C5AEAC64AE8B6AE975822C08E416810 +310EA856B8FF8D17BC79AEB42808ACDDA673BE0BCE980C6A98CD5A0455A1A234 +BDD559C0B31A798D088BA0AD425DCD904E8C3013C388770DC9D03B6249E8A4ED +A49B3A2EB11723B0D6FAC3BDE453E1F8DD6531BA42B6359F47A61B5762AFCDC6 +5AF5130792FE98C5FC024B1DA4887095413C6FBA16EE59F1C8CC43A9FCA40344 +2ED9359597B991AFD2D94BADCE1E96B676A5910BE322CA3BED9120062740AF03 +7DCCF5793E87E7C05D95C4F65466C2D1867518BBD4CA2CEF4F6299E122C2EF6F +9301DE754D842D32BF4FF0C61001FA3929564A3935FF2C291B7E3B4425E9A0B8 +BD326EB5926EA0AC4FAC6D34F2A0715A68D38EAD576CB1FD774C30F0CDF2643B +2DFDBE58F38F0589ADDB6BCA49E1280F5219F45B0FFCD574ECC51BCC8625B1D0 +8A710B796113F13B8115B3EE0267F25C595CDEC16A6E7A016436A5AC93783EBB +443AF8DD342F6BD1F58C315973F9FE0B6D85C50D9BAC10A456CC83D8577032BC +FFEDC71049EBC829D6A419DCC22ED0A3A2E230101CEDC64C67E4F442E36AFEC4 +EFD6AF959D4341CDD27830F364E85DEDEC69E1D375AEEA5805D45B4507275AC3 +95575B9C83CF9529A9050997D5235ACCEB4E79BC37515C7C0205D8C9B827A5F0 +04E21177207379699BDA9805FBC4CF0A9B6AEB09E1E21DCC693E985DDD79C45F +A33322BF56FF7B91ECAED3E0E9C92729CE6894815DB7FF4C61E9F74AEFEBFCF4 +56FAB1681DD80EBE8D418B6B7BAAADF34E87EB5CD4AA2FFDA2E4F238035FC14F +6239B152EF3232277E9AC710AAE11C310DFB02BA392A026C661EBA5669F33C22 +B850CC57351F9EF0D6237C36753FE0A63ABE7C6E11798C9CEB6602D8E33724D6 +CF700E1A9D09D6973C99EB520C3034F8B38EFD43FF71313950C1D44565EBB204 +A614DB50EBC153B59A366BC76F01E5C3E5B8BC09D2B68EA6C154F72D54AA4733 +A4FF05C6A82B0ACE40AC70343FC83133797AE8C6DBF3BE1F6E441D6BF809C71B +D392A0CC32F1625D07869950F857E4E2B3B9979131C4432C44D8F6EFE9D01F80 +86D60FE915A474EAD180B21A24FCE69D511C011A8A6A39DF30F87FB2EFBB376B +7CFB1EDA2447181948D01C49F3795ABCD52344B58ADC8A8DA554849C97E5ED97 +E42F571E5F2D060FFB9E1B012FDD38B53C3AA5172E280B319BB3AC47E4BAF2A1 +4F891DF034AAA2F2AECCCD8C23182B5535DAC76C151F7718C39D549B6610DCE6 +9E154606D564619BE796F85050CBCF8EAB4EABF17FFF4ED07A3BAD022C523621 +DE7FEE8172910DD5448D8F7456637A17ABE96218AA7B1665D361B7FE4427BA75 +8F9193B7B9A52D4AD3405B7DFB1FC79D235DDF354D321B293E5C269616A10E58 +722A50BB356379CE744B3839E7822455300AACB0AD45EC8761F560B8D1073C9A +5BD7ED1BEE741282A92AF285BE80C6C65B2448E0A4A359851945AFFC91C9E578 +2C12D27B51BB4500CFB533051D055E7EE47BCC23D8F8DEE569A1FBE3419539F0 +8FA5CE4D8612AD404EB7E83D4E4A547C2C347D217979AC48E5C081CDE3671319 +7DB36C69C2A31B0F633EBC046CFE969448FF2A253CAC2B4FFDC14FC152BF83E5 +E517DE19FE1BDFFB7A3F276293E761C3B39AD3610E442AA58A7C25BE41C05141 +AC500ECB657643CB128E8AE36F4B37E8EF15CFEB1F8E3D334519A3609CDFAC3D +362933B5A55559CC28DFA89182F89B2FD5013E08A2C583FCFF9CC53A2D5CD13B +1C9786D1F39A02106517DD191D9E5169363FB01ED68C4CC13CD9CC257A2EE802 +C9E40E5C0BE5E65982AA15FBF0F04118EBE9DF64C279AFDFB1197AF62F6E18C2 +3E95A13D6B6737C4579B24E33A0A14DC922EC4C7202A30A06A4596547A791955 +B3902033D6047AD6E44A90FAE4333D0891684A9B1895585D9E91985026F72BE9 +C216009AF01806AB043E51DA494644D61AD7379C7F93F17AD0F164D794DD82B9 +077118A0426BF267C12997090821C5E01202BE01A1BA5CF130557EAF84E2AEC0 +C83C03CBE7F14C63884CDF25E5248C45799F080D281E3F9FD932063E7EEDE22F +0B2F478FF72D54E68FDBF6AF5A8BF8EE06EF6C30A5E061D14A512075A873AE5B +5DF02D81390DD9597AA8E902459BDBE5A6A61BA2E6CEC7C563DEDB2BC950B307 +CF22643E985DE1D7CA84881D19CAE2A205FA5CDE59420353F3EF23FDBF391FB7 +38CE81218276B2960C3923B47EB52A8429A50E28A607D5242312ECA5536916E1 +8624CD1482AF8AD52857F38E4E689F774B55C3946C2012635B911205A760F77C +8093298C200E220697E6F3D210C88B3E46F2B2E931952D42F51FB5426DEDE03A +05004DDA3604F38CD65473D13877822CF615C299308395A213B5D666EE06B0F6 +C1ACC344BC1037B5C95D78BD424522F051CA1C03F9FD11EA355206230ADB90B8 +E274770F8DDCDA7C3910FB07CC477B04205A6434DB34E69F3B69EEA2ED6FBD58 +C6CA944822B44062ED2F5B0AE86AA5F40E0B171D158CA1A57E5C3240A1A721C9 +92AEBF5D4075D78D772E1364F9BB631CBE1086D4EEE58E6B4D6BFDD7581D2075 +EC0FF81EC590A69AB9EA6C38D91A3D763A1A85D9588741BB657A7CE31A9D8C55 +9AA83C9DD8321EAB44CA22827230A11FBC9CB12992204FD936401DCF9A71D190 +C9C7EFF35FA97ED1EA2DA3584CDF3D66C545AE37E2403C3945DFDFC3F08A6C76 +C6E3F7C9238492D7022B904C846CAF40F0D571A39FB05B7F359C869081274F4F +3174CCD65045AFA181235224859AC3B5A708301033D0DD449D0F3315C59EDF26 +94B3AF8F8FCAD728C18B55A9A4283D0A257DE2C36F2066A31EB0E401C34A5861 +1E4DD5C81288469B625BDE1B3734804F726005071BED0BC518D0A1CB8C45CF5E +01E344C48668D815DF1B3087DA5B063E9C6D1232D3337DF90E71D10A306211F8 +A360053722E799E182D22CE80F4B0A7E118806F6D99B4456C539DF049BAF6694 +A9EFC7B847D0C45BF90DEA76CC68BFF4F733D246715976AC5BC56AEEBF3783F1 +15A79B960289C4BE778BB63F8C46237A84D9881B40B9562E460ED08BC770F6B8 +97A739BC2A060A76F1F1280EB07487F42EDC0C9510388CFC618A311A3987F4F3 +B464489A974B2F8C2375351E70C95BE7A7E25777D78FE245195F9920C14688F2 +05F350B893547D619300D36C58A8FA419F310A38AEE84A714BC8D0ADC2166D13 +80BBCA7400C6AF8687E0F9690EE1B71538EA3534E43F035B24532305E07133AA +F43680AAC2EBE60674F991234FCA58A01A4BCD9486599B2AB70FC48E0533CA06 +C2DF386E46617AF45A810EB56C610168AC4AED960EC344187934EAFC3E1FA3EF +F5010ACD71A7A902FF0DD4CC41107189041A71DE11A6BFA37CB035F1C14B8161 +9D70DB95AF381AFB800C99D56A366ABC81B4B463DAB84ADFA5272FFEFB1DC405 +11A92D7CEB4D54CC1C682E3BE2C0C2E671DF073A96B9DBF014588B663BA73768 +A7C3D4D546D8B59BF7447DA941A52D295B8002E5F1C31ACA441F6F55DF69F515 +19212E4BA25B340E9740499986A387E9B379F341B3A2B4C0D0E79379C6A2606F +744E13D2E415FCE686A2DA21195AC7431C9AD3F4165C7635DFAEFE5ECCAE5372 +BF7B107E6363B7C97CABF67A141A2B7ED27B415D2CD730FA62CA1C8900C673EC +373485615ECAA7C4C7A187BA60AE6B4E6200EEBC4F421689E5578A29F16719AB +154C41FAB20E9D262C2BFFC9F6C6394CB841E9AF84A48376BBB637EF6BF45330 +346CAEE1700DCBA3C1E0F2E75340B6FBA1721AB007CA80EBE1E66E785B2C9568 +E570A8101996903075E3E9816741BAD2A30EB96430A5710348109270BA7CE860 +C227023C77730D5CE4D23CE0D48707AA4C314D6E065EF55B5E0A83ED927D68A9 +0421AD3A6BB10F27DCB22DAFA033F15BBD985E2468490DCCBE677EE57061184C +73F22395323818EFB3D0906537F0881FEA258E8ABA6F89758F21A47AB72A79E6 +59C9F0737C23D76F95B80BEF922C62502C533ECD80C618C1814F112EBD7616F5 +D9D42153E5DF0B4F844B66F5985A345E26E93C259D36FED6C9751BFDCC82A233 +6FA4A91926D768AB042278F2142C51997A27CC08DCE7985FDECC2F99C25F5F04 +C48C0C4F532256581490B27931E1A472C7895E90520ACC252E55709DCEB8D255 +45C0B5526F339CACFD8A94A1D58958B239FAB094424412FB699FB5A036BEFBA0 +572D5738B2167771B29D3ACD92667C57B07D7AFC1AB676E600823FEC83003E43 +49F0D3F7CBCA7D7BD764C70247299783EAE00B03C09ED5A6330F1516600BA52D +E1832F3268D38396776D36166E26BCA5252A59D3A9DE42A84969092761BBDACF +6C5E83A69C03B53B10FCF95EF76F91F7A8EDE6E450CE253F373FB9382FC84BC7 +833F464126EFBD42A486308AD1A30680F7C423EBE1597FE234E510FB4F2F0F65 +E6CDCA4D2C5BF86E743A39BBE78D0E4A3D56B04588EB457D96629CE5AE95F268 +87E3B49D66C2BDDDD27E9F1986BBB313E33110F099C9F176D188B7594C965EAF +AA4FEDAFCC7BC9E7BAD2E1C983D596844DFE6F321EE15F109150CAA6DCDA513B +78D6D3B8260041367FA44C058C3EF84A37DDDDDEFFD35AB50664F7DD9C856D37 +D5C6569718DB3A6C869C9DE6257E06ADAFE2FED0A544F5023A4452AF73771AF3 +06B737395348ACCBDC9662EA92616D197226E424520F68D38E80537926DE94CF +13DCCB715204C3DDD69DE77BB00334FD3086F8B961FD7FCE4B565BA524C8EDEA +84EB69E3400A075561A19AC5D2AC8786A68EBFAC2860ADF804AC53BDA205AF27 +37D47F05DF295430915591AFCA00CFC65B428CB41EBD97F229F171C8995887F9 +8F99C0B45CFA0787C9B23EC73EEE85AF1ABCCA5DCADC9124A41671ADD3C33BC4 +2BF955421C3D563B1741C5BEC1F28D2011FC1FFECA792B31C208A9A02C950397 +74ED4874D55F2EC1655102672BF26012D747D46563CAD7C0BCF5D194B0EFBE73 +71C1D68F3AB20B63D083F45945E1C5B21C0FBA4FD11597548062C967CCCDF68F +6578505652468F71B803C9A4DE8093A4D0FE29646D7F8737E565EAA3D9F6846F +5AFAACD20B44F58F143E8CBF9C236938CFEA98EC19AC08DFB881F560A2ABA6C3 +45E6E8499338F1ECC0B7AACA6634485468C0BBED3F99D6A304BB5968EF8345B6 +AC1683C7E9D4EA6BDA3BB7D4EE9E819325D0BD1672B65C0D213DD9B988476936 +7948106DB8A26C2F6A511B771CD57462181CFA3B086CBB508270443C48EF7EEB +7C7F0CAB757FE1A1E62C26C079AD2DF5C2A1DDC919F59D7AFEF92DA0B1B3A34E +9B142C92E8EC6A370DB976E3D112458AB0580EB79E6253D01E59A015278698D6 +38684DCCFE13D476679E1CE55D565D5521684B4BE62D0CFD7FB961989C011660 +E79F7A051AA75872D48629E5A1598D29E8AE353757DACDC027C8408E3E027B8C +2304B2F54CA64306776A2A82017F5C96BAE8DC9D7867857D772DC9F4AB8B45EF +F3CDF3D58B91557E6D39CAEBAA8F3D81023C344B2471128BBB0632FC6F05E9C4 +95D16C636DB9858D1359FB36B301929881F09E5F29B0C2D5D13D4E598E1C086E +70141315351EC33C15AEF4FD6519FFD5352CED5E5A878FBA466F1C0252660F79 +29B1428E9D0467FE26A3E1D22B7B47EE8929F87D906923BCB7192DD94E22DE58 +A49D4BAFF8DEF1078DFC049BB16420F6F968B2F6AE8CF8FFC65DB1AB9A6EE972 +C89FC33EDF480124696DE3FC43BCD111108C9FE08482A3BEC819FF71917C5118 +B38040F48D74E224B495B90667A7A678A9F55DEA4F70953B38F97FB2D3EA9B9A +6E5B19CC035DCCEA31C8FACF62CFFE9DC86DE87815BBF5B7F9D4EC7322C3E658 +BDCE94C84A4D747531AF85676C5405242865E9086E77FD8C51C1A5984C9D8C1C +7B29952094DC47D9062C89BB7AE2279B1B92DE43BFC54C8D236E546D0A3B9B24 +A143F5B47A70FDC724F45AB788E3FD7228D4991B7AB0DAC1588F290FA1884EDD +5A895972F0E76446925A73E616C93E0DA74520929A053B730EE97CAE5FC04749 +18F8E2B87C210C799CB0AB651AD24D9749A2D41DAD03E94DC779312BFB90883E +3628A822946BF8F81023F2C0B3DEF58D73B11493D6482FEB44DB9BAE0FFC52E9 +0BC04A6E50FEEE540E4E8C8BACDEDF32A3F09FADF274150134AB3D62AE0A711B +0B30F3419615E7F6DC430C13E976246B470440E759117045A4CF8CCFDD9F0E2F +E1EF1170FA6B80D192C34F01E472F8CA8978EF531C13D5BC6571F7C3196584E9 +06ED32F98FCF35B50BD2C4DEEC9AF9475B79FFB95024D3ECAB0522B19786E083 +5B86E984FF076AA82F707048BAEF3106EDA9317B42AC8D3CBAF0B9E21D0AB84C +957D20D768C903AC512A947DA6119F151C1247B23CB1B52B7DCB17C5A6A5205C +265B78795B1D00B361778BC7351787B9ABC1CE5E5A58D0B7EA5EEDC3EC71B1B5 +BEE69671010F9F22067E99B01575464E9F34574E1BB7464644968547382BE1B7 +891A84149F9A5F42CC21478EAEDC5567A0D430A296EAB205368B068AE66A1B0A +78A65BD2C23B4039CEEEA7903B1CB11E476C1384A332FFB687F661A368001C71 +722E27B624DA1939FADBB5BC7086FDA5094001B50895C70159DA51BA742D540C +2216A1C5BD55E2FEF4E71561612C02809C69C21A072F46FBEDD83935A9C850D8 +EBDA855336501173E29F765129023E86D29D6CB0F8BFEA01229DE5369B143A5A +090B7315D36169A8E4704BDF62F93B949662CD574211CC8CEB59C02E1A061A44 +0CF5A59A05BF9D4E71F5FE55772FF327119B585635EA460B3AEE5965DE139421 +BF947637683431ED8EA28BF1FD43F8AAAD8FF22669DE5C867E388A30D0677B2A +8168BF8243E3E7D7FE9DEEF929735B1708FD0685C575E96A621EBE96EA15C3BB +888D276E8923D2F7C946B11D5E7AA212219475D90CA4114C879783235D636B29 +02E43A52803BF524F84603DA0D27C8A0EB4B3B84C66A0F270A49A0BF6E5148EC +EF7C6BB67144ED456ADFF8EE21371FD8DEDDEDFA42B0738DB69E1BE864CBD632 +EBED5E9C457FBF80B2D1DADF31A63C86144A1AAE498162AC4DC9E04329792111 +C631C12CDB2281987C5F9E12625B8331C3355490C0139A306F7C0E8D9B3FD198 +D77A0D2980599D64829F5B509C5E88AC242BF2B0D6EABC04E8A25CE812352A6C +8A5EA0335322C561559BD1172211A0A5F5B70A8711B2C277E668A47C1E254047 +298EA350947CB275DBC85B531DEB739A78C504FE2D679AD7D3811237D5349D6B +454A0B44051150C0DDA3728510A321DD25BBFCC7CED07D88298C30225632C5E6 +627DB302E9AC30AE902B82DF0ABC2CDDB55EBE98D1213C397780931F58854D9B +C355F7EE7BC6F526A5EEA043FAE8BD740D2713BCB352811DB18A253291A8D465 +EBD45B9E21447B5670D47815E7D04C00EA15AB089EE92683E6242C8948A3FC16 +50BB0BADA960157D20E3AD217C5DA1563A86FCFDDE2D274692A0EE47D41227C9 +1188D534C7F42858D0087713B9829DB97B31EDC82BD05AFAD4B4CEEB3554CDF5 +56F79FC410FD577693706CEA58F300F8158EAEC1ACDD7B0F2DEC83EFCF850B45 +40A00794BDAD3C43777EC8C9CCAB480D931093495BD55F39BC6D33DFF3ADA062 +EE643B9B84086693BB70A7AC9B290586403B43F4F930894FC0A3A4C9133E84D2 +7A144EE9A60A6EE3AA5076ED1BDE8B56AAB7AC243E8317343FC83ED2AB33D0BC +6A130EE2087C0534521954E77121B2F34D00BD2C6D7B29E6B96D15CB1BE9D144 +6771C1CC311CDE1337E2122076006C84659022B235D597551AE45287BE7CA489 +1B0CCADE0B548A0850D29B6C1F38ECC3E534E37848032818CEB1962A7AD21DFC +F4083B75C000F0A5D0FD565F1737AEFAEA0083F3066B540E93EA4C32BDC0D5C9 +4ACE4E5131877B46D2BAA122680620903552D738E225E3D89D41A391D7F492DE +617FEBB74C31F3193275F2E456E705C0126654C36C9243135BED4ADBE26B01C9 +7366ACD0DF11A3C4DF0771007B319462E4396B8F644D67A5DAD7F747B9FBE502 +02D24645EF82BCFAB980F80933ED035D6E31549503126EC31B8D205EE4EBBF82 +56CC51748F061A4322593ADBFCDA9A704BE5FBEB0E733D025B4BD81056ED0A03 +4EA60DC8B3853A5AA4B3708F0A9786AABE370627C32A82E588C76F8DC6D99CF5 +ADBE29DA22EE31311031FD37408FBB7C160C2F9895DD2F2E40D498D25BB3FD71 +A28B9524619B60E7696833F73B5A20078A6330A62456C15EA5EF488094536156 +4ED0B6A26E6EADAAFE761BB8494E33B4D87820961BB5E38BC45055C5921BFBBA +665611136B7400F3271A865138B1BDD4E6FC6871A4E9AA7E447DA991C4A894B6 +B3D2A552639CCC2EAD55A6367B500F7793F9DA332D5AA3B6A7DDC903B1E5C223 +A5843D031413ABDA79FC810E408C352A0FAD6401F612F78FE6601A45497F67A0 +E4047A1953BD656FBF31FF37789EDB624977D7D7EBD79DFB50EEC4EA3F89CBA1 +B88E2BB110C1BF48EFC58539F2E1B36A5B9CE6891B0DA32BF6CEE62DA5B9DAA9 +B9D6AE4D088A536F7C4AD89D079C9E4866073EEFC46C46C77255420F786D6AE3 +A8F397CA9C3DEE47594C109B794AC7E43001E6CFC374C415E62095C7FB05151D +21675170547234C3B3EE974FE929C1FB4BB2405C28B844C82004F533F4BC6FFE +F62BB9F778F81A3B28C7D26527ED751763B8FCD7EC02F565533433E11C1869A1 +E427023B1041B70252EF1C68758BC8EDC2046266EE0518264C8CA97D6996924C +0EDB3446A9A7CB910CD8A2AEB08B1E35F71F9CE07773F3D2FBACB7D9A4FADEE5 +3B51F1468EFE1E9C7B51DE91BCB86733D77B9D11828F6ADD68F72B405C41CACC +98076A626DB8F7AF19B919834DCE03391B7274D1B1D9838791D8276DF09401F5 +B130C9E744BCDB98D02A68BD1D860A54D8E6564144688C0B43BF0D56917A2AB2 +989EFA8F599520F2B19EF6D8D92138EEB8854546DB669CF14CD5ADC9C8F01DA8 +20F8C5D21D0617FCDC8B1A7D7BF6D880AA2B410A98CCC8F96AB191EE1F64C9E1 +C9AF753B04757489881B2D16459B7EF2F612E658C62C32CE17767209C5FE65DD +38D736E96F29CF8F8B6AB28FE3D6F6F48FC05FDA95BE564B762B456DC4B86575 +014BA2B041B05FFCE349DA27064514CFCE004DB9E05F6C1E516B00A948EAD74C +D2F1CEC1E150F5533B662CFCD8AD232C2666401BFB7679DC7530204AAF2FD7CB +8114E3A2530EAB6F7C75EC5982B8816C7AEE1D69E567C0934EAAEA4B09604564 +B2F5416576945A152EFD7B85B0D1F53D4431524AEF0CCA43EE250C6FB1A6AFE8 +F92C3B67EF9DBD5F8739B064DD4826CDCDA3673FC41C521ABD1DE23EB0700C50 +3D202646191A6B031483AAA52BB73D98F17B361B8DF51B984EAE2FFE0B1F4D5F +DBCA6362C76813086B3296D1AC387BDFAC50164525AD253A46F52792316FB237 +45EE6E4B3B4C56C2420AD3DE65421E5A90D4DA797599905558B336C01856BF9A +F77354104FD93CB2E90B0E5D615A2E2CA4F12C3501D0863396290DD285DAB35E +79A8C8DC6E340A0F32CCBA90FAE28FD3FC95710B0D0C5757D97102EA269A0A10 +652E8B9F9517ACDF09218926563F25B6151D1AA8D79732A403ED88ABFB0E7889 +543FE0D96A0E1245DB8337F8EA21EF2D948C0EE666B4EA53836B33359085AE96 +1709376A742AD8B181DB35FD583EA24A5B43B1294D9A144065767659C9DA490C +29FF12165AE21AB10B49A5FF797E3F079A645648C687ED6F44EFFE79464D5696 +875EEBA4AFB09F3455EC2E0122A7E91DBF828906BC05E6DA2ED9D9BCEE5412C7 +3B6868267C29BE95D732BF9FF6CAF6084159425D3CC6AEDF7E552BAEE821A9CB +1F806C46A138A2C5F6765F015C4C27F6521BAD1A582326333BC11D14F7F5C83D +464109FC2BBA092FD6DB0FFE8C1408856DDA1D6F0A04F831CBBB9BA91D700396 +1F3503C4898EA49E922A556A085B9D50D1493176C9C740FCDDB1A313321B86E1 +E5C5A295BAE5C271D536FBF8B31C95B6F648FAC4DEDA02318904CA443DC63A16 +BFA0CDCA75245A4AE420CD20DD780F2AEA6388F84A8FB42BFF09F9996DCC5844 +FBD0850B5E46824C6C5452E34A39E0A0BFD082E2478E0A0B2AC9253B4326B21A +DF20260F9E9D36004984C074B1419385A1C52B3606B9BFEC246E26EAF79C9964 +C34DA47CFF84D27DD210251C784578B1BEE835AA614695107A4CB67298C47886 +9FE67FEFBEAD028894151095F8D728CBE7AA066B03518E2EF6A0180D050F04FB +12E9E7F3859A223303139EFA0CC71138FB807BD816B8D83AD3AF3B3F42B73F61 +F95A647C354C384BA91BDB1F80B1D756FA5C13BC4AF763EECCA28D2627C81EBE +A34C6BDD97B0F3514F9B1A0E3A30D2B07CABB15EB3EE9E3F530019F5C749D314 +5CA78408F38325F93B97F5856445395F7C3D8B98AB1F11358F2CF97DD723ECB4 +7D9BE2DFC6C0E44AB939F235A1CBC300015BB9DDDF9A0AC9B7EB1EADE2E947DB +BEEA69328ADA6C95EECB9FE886ADF89287461853571EBB307395E2058B2478F4 +703779C0516D8F56B021437EA62B26E57E6A023AEFBC3C263A0DE6F365BD527C +531072303C7E6230266C34FD2C0041839B11D2ECB7274E7C30CC584C8C591F5F +C8950B9A2CC207711B3045796B08C8A43D7E580E8089D0B63E4EFD0F188F26A5 +8EBF298E304C8C104E150950AAC8D6E2EC9F7926921FAD5ECEBC0FBA4E0862DE +4E1E1754BA60C7C98DEFCEB707F12CC44947007D3D645F586A132A3A7228B5AA +79081C76C88638543806730012023A16535D0FF1E28E1DED9989E3BED625BB7C +E4C52162FD31C0540D5D73AA9EC196D29D39192BA969E221FF021DC69F379B3D +06357B828D205E2C4D37DE3B88FECF77B3D533CB93AC8FFC16E8E5822433D678 +931FB87D23452D49ACB5680A3E7C3543D728413168441D4BFAAB9B7833A46023 +D971EAC42B2339992915C854A53C62B68F867122956DE5272FBE60C742B6E5E7 +C8821F723450B4579DAB198FAE97E500ACC86D78FD7248876ABF21B761B9E2A1 +7380FED4EFD79B47D3E1A31A7FE648301DD9F7F4F58784DF0B54AFF457AB34C2 +A493CCF0F735C1C9F3203E59348D53D65FBDB6E24B552DB3CF8509DF3930F641 +E6FCDB4A9F970C1FA4CF1A0F4717338835895255A1E3737A588A5EFFB8FCE73D +7EB9C0908DFFA40F8723A9319A39548E8CA5533794F50F3B6AD6BA01D48A9929 +65261FE523320846602F4FBF5B4375D70D8BDB9A559867CAD2D047A8680B83DB +0DD38FDFBACF3678E77CDAE128A19812625CC1CFA9BACE39E6CAFBE28098C380 +17225012670F963056EBBB2748634B343C0677B09C0ED1D4B33DEA7F07B03E87 +99E229A8364F326D8F80ED4A9095181FCBDE9BC4FA0104B28F9F8CE994F1B6F4 +1316B3B768C81CF7C38BD55AC7820BE48F949730167DE7AB0B62365A9F5A4E0B +2ECFD6F04D3652B9C1BDA8176AF1146B91789BC2BE3664D906134D7723EA4EA5 +6DEBE02A75EE93E24583B1217A61521946F7BB69C2371151D2D44E3888C50FC9 +E49FA7705BD8800AE067630191AEBB2E78C4E3CFD62DE90683910856B7FA74C9 +312EFBC58534DA5656239BBA9E102D33D2E76DD8D170350C83663EFA6D07C076 +451AC8F5F034F69855DF60EC8A88BE7913502E562FB9B64FEDA4447AE1BF6F04 +1F366A5FD382142BA4CBBC451B5470EF3D51B57EAF791499A140BB10FA70A06A +E0B18701CCFCCFA2DCBF92BB59376D462F9D59FE114D3538880F32B7F4140E13 +F386343F0C4074277153D61460AC6A392A0EE67F11C411D68E50C9CD2BC171E2 +E4E73A231FA6311B3D0062FA73B5F5563C0357EE52FA4B5CAA9B5EFB20617661 +9EEC6C742BEF43DB2CC2626A76D03FB70C959A24F269E1FE81AEBE54D4BFCB6F +A56B6B8BDFD3E69788A32BA3072F373DD1AA6787704CB0F7EC710FEB08A82825 +50859DD1DDE613BED2F9F0891F5533816ED8137CBB3D7EE93D723EBBB3EB841D +A4EB010D20B870CC5C2C95E722E77C639B189CD44285870666494C2C00639F56 +D91A6C2A45F4C45D7D904F1799EBC44720410E1A0E32F100FED8D696A7031FEF +CF56C7774E4E568050487F1F78A86C968F82579D9EBEF42C500B23BA00A7099E +275C9BAD491D22755B542FEAC98C1B1C42EABA3A39C1C312767820D264438F67 +1A65E314A633CF3E2FAD7F83DEADCF62117446FF4A4B099A183342916F8BF57F +A3D0BF61D2DC3726FCDD3A4F7C723DAAAA40CA0D68460DC2D990B12C405FF111 +4F5B07278ABC51A7DFE18ED1596AAE6208F189D8CBBB50AB6577E2A635205E16 +F78C97714783DB67D467EDD804B062FA8463BCA130D5A0727BDA392C22FD94A2 +25C674C3B4435BF4436432249C48347B7382CAFFCEF88BEDAA614435269DF406 +B9D5011315265A9525B4919218D9B932F3043B3B2B4287F04F12DE69080CBB54 +A11A3BF8D59EDA74DD90EAC521976C7882CD8571E764B4FC566E3E08B1E7A1C0 +7F16BD8A1C1E4677415E9547DED46BC202BC1FEC8741D71E285B87F8C982EFD5 +C201155719E4AC66CBDC95012913031421A36455AEEAD59F24134B2A78C93812 +12B1826E250AB1987B31C6A20129A2EB557BC85FFCD1DD36C678B5F39388E7C4 +1D4B7BD640ED5EFEFE063C9D91308850548BEC011A487B9DDD5E4F032CE0F094 +D548572784220981B268A932922A79B9B8C16FBE12E6D7EA801EDAE92079407E +00312D7BACBEB5C45B62BE9532A4C81D39658A187E1EA1F4C16624A6AD1A56CE +5077F62EDEF7E3A07084B37731A237C746E6D89167EE41C278D2865055685107 +CF73CE1A574A47AB40792DD4A970204B8498C154CA1CBC5A23F270D44742EB64 +5A7A385B37BE67CC817019EA16BA310A19CC3AA2A5DCA5C010B76D985D4524A6 +3643492A26A249FF85944150DAA4343B30D77D7639F4076350D43D7E33C677CC +8DDC7FC142D1D376E98C8E2AA0310287D51168F29612C4C421293E23C5F120E5 +268BC1932C4F9DD29CBBCC08734EFE71678BCB5CDE4B5BCD8635F3009B631D3B +C2F00A38CF023D09AF6A832A32C7E78F1FB9232FB9AA5FAC477BEB54561F25A4 +BE1C23C41A6B1A8F49D4057050D846A50960E64246361DF2B1F829CAE8A81556 +5DF1055F9DA935D01D8071914AC2A89223C7F14AD4C36512B62BDE4FB699BDD3 +FBDC8628B9430467A2B79C4225F060419087B0CF614464F93AF3165A5366250F +72778A1C0BBEAEA0DB639FD61F5680B6A2903EA8FD9F056F77A68D10B2C7B4B7 +C772FBE5D7E3DA169257F2B6F9E3A1F2ADACBC3A10E1A47E26A58B07101B541C +E72012DEA2E1603BBC157C589791FD069E7EAD5EC41061B8034D22FF0EA7EA79 +87139328F4D74C18721E4773F841DF72B3BD044A7FF1EAC934BFDAB2ACCD0395 +B8635FF543B94CA4151C672719E68D1540047B466EDDA89D3FB44E2D75602F6A +639D9F99EF31C5B04299DB9F3B51A574DDB9346BFF5C978F81246026991D38CA +899CAC9A9E91BE864BAA95C082E6A89C7514FB6518341AAD562C3902A8EA5C9F +413CB578D6712BF142F643FCADEF165E7ADCA15AFEA3A330CEAAECD393DCC91A +75989E3B6D937101C344F859D53534B5CE55BBDE02C4DA5FD1B8350AA76A887A +875ACAF58CFB7B1E755FD2011FEAF1DFE43928AC8E01C09B272503DFBD21F115 +2577A6C990FCFC9A42B020EFDA2E199613B0552B7765928F2EB3C4D7ED2B4D6E +978CB8E88E1DDF4E61A50F34CCACA8DCBCDBB2CB1C747F70071ECFA1F31C9656 +22D28A21D48AA970CA6DB819810006C3037D4637E26B9760F7BB016EB4FE8125 +0B9D841ECE3D5A3704D93F448663998DE3FC8EBFB76CDCB79454DEF45256CD3A +2D180C96F89882EAB95A97E5EE721959642B176298959B934141D00B6C7CF1A3 +B1CB3A19E4BE96C990CF77832C665E6F0828867F3859879D83FF45FC5C4489C2 +00A8FDF187E6723B23F760AFDFBA6A4830611C4755DCCCC43F8DECD983275642 +1BF5B6230D3123380AAD3D3A8A9A60F67DDE88254A13CF536A93B326329A4EB7 +BD5CBCFA582DAFF013E2A4F2A909A6DF1465F8C1DD7649C2222E0DE04BA3FF19 +31A0D71EE85F748F964D6D57EE57DD800F105282409FF2E27A08B059AA17A4B4 +E2D848EBF8C8FC23641E2B517710012ED40350615AEBC5C115D4777117440A73 +C4BE0F4F6D73EF7B35140AD9BBFAFB43FCC0764D82E3AA81F25794DB6ECD7A3A +6B72ADBB483D979591D85D3002AF1B4956F3A7E083BE9D6ACFDF409852500ECD +886D3C4E51169ECECE6297959B78B813586F2075701F256137C9F92399F3E5B1 +82FF6E10B5C4CE5078FA4A71841D9C3C01AD81A4F9D80969AD249DDF63FD9505 +6B152B2AF6D4CFFAE20C111756204BD7BBDDA81A9E3BF3024D31C90D1CBB4B7B +BF83B8C033868615017CFDF7B2FB2DA13A7D65834652CF604DBF9412366D4823 +36486DEB84980FD65C2875281D0AFDFA70EE5011118D1CEFC78FC4D4AE20AD45 +AE7E74346B8897BD97630888CDAB0461B781997541F1C74E240623B1A7FB26FB +C4FE22401B8A4A6239B10D9E897191D185270FC4F2DC7ED13E73F9B0A1F3F0D4 +31C739380EDC495827B4E81D7DCCF8BE6D384ABAEB6447B65FF319284F0DAA6F +5ED58695628330CE770F62CA16248B1E0FB657214115DC760182CF062D97CA40 +BC683C923DF12BF39E725FAC6411359FD71DFB26E8FBDBECA81E03CDAA5FEC26 +07A5A8F6C925582E6C516FEA20488E24CD42A5DFD29DA96E6C9A12EC451D18DD +9464DFE4FD5AB577FC667905D9BF08C7083850C3B3EC67DB8CAA3695DF32C256 +D54ED4483A53AD3AD376590BD1BEC8C5AD3E253B3EC721F4A71CAA6C906742D0 +AB1A043660F7679433F7354CF1A36E59B40ADFF929F87B03B951D1393F50387A +B3E7185DD68CEE7C232EF44B747356D3C81D0A018CA61E48EFCDA4EFC203AEA2 +838B2885F7B626512C631538384A58C478AFCD28F4FEA7FE149D850182A270B8 +D899D8CF3730998BD517CA64AB0A9E40956D4755D455F5A56BE4DE02EBC29B49 +7B800445211A9150A9D09F8C285D67876F5C5925E12BF01A464049BC6BE89F5D +807E9BE5B8EEC3E1EAC7CB602C673D0E2C64F79BAC2E963EFBEEDC5E1C6710DA +290407E7C4B81E3B8BA1D40245A1081FD81E2DEFD90944A67EADAF922C269175 +99CFC6962F9409D9BCF1CB785CFC2B59B8E059CD2A184FAEF63A7E4708F82785 +E75B8EADD1C81D68908B09B9FE30E8EDA5AC37E2257D5C689B1AD942FFC30273 +2327B6A7A6F92B6BA207979CE10AEFA56075103807D6BDBE7397A64E9569C36C +CC6AD742DC9D5E935A8E28101A68DA4AB6224BA4544DB47247A30F98B50D7211 +229703CBF5410F964A91FDA6DD4B0A603361C3EE0B65911A79DD7935BDE86032 +44A74B051ED27B31FBE4B501E20076AD67B32A6908D7614CA95B06DD64B01C93 +14D813CE0EDD0F2FDBCFB731995201F07483A8C5ED79C56CFFA3BA2EB734689B +D0BA4DFE2F46E9325A9E7B6EE2FCA7825AF486E0A4606D4A1E6B8C8439AE7AE2 +347BD7656CC4F48DF8EE3074C98C3777E037E8E26C6369008778C331A0601077 +14EB598297507B9F2ED2BDC03C3E29EECADF0F5FFA1225DC5F27CD8EB7D7199E +F496EAC3998FC12515E0E75A7952C6BB951C8E782145F445E917B19413C1F702 +AD9E0180E4941769351F4DED721C0089ADD66BAF9417F5CBD78BB53F12F14CD4 +71BC0BEDD7FDE799A9306D0885FCD40BF15DE837EAB5A40EBB52CB6B4ED299DB +B12A2D1818F135706AE013BE70F3A60057B5A82D661ABAF018DFBDFE65AA8E47 +AC6C8A798D2F3C772C0BCDEF0A9CFB8BC638AA64F95D41715353D25B2143B4D3 +7BF3852091153F5732DEFAB4D4BE6199E13D1D9258142FAA82F3EA57CDE218C1 +41CBC59F5951625C556F6D38557082F300E341B0EF1AF38FBEC6BBF6EBD87FF5 +921FF53B6C78217355B9C1C17216DD5541FCD35123EA68D57904FB1BD7B9A7E7 +3BDC01113118854E5FD8E88712E1C916ADCB543B264D9573D2E96376A03250D5 +700A0CBDC1143FB85B69CD3455E5CAFD7AAF3D2A2154E2E19E9CC8C233AE6E94 +53A24290D61A03F7CD038D15317FDE765000BCE92199B728DF17AE8D540705FC +237F527B4EE8EFA5A870BBC588090A087B108FB0ACFB705103D027DD942D8F7E +CA2293C9C50DC0CDC960139CC4D6384A6BBAAED1D50EC10A261F22EBAFEB2876 +76BFE0D228A14D6DB2524801192D1F0EF49BFAE7667188B4827008D05406539A +1AFE0979DE52C462D998F769FBF62A45552C6CF1B30059B26F3336DF19093DC8 +2C75A5A9022EA3A6A35C35965A96C673FBFEFEBC0EF188EA9B3B31036CA56634 +F7F89E88C7611B6007BCEE35E423B73A63028078FFA84E73490DF2F564423647 +8ED87859266AE96C56883B6AFA0A46AF1BE64F7A07F9B9A8A69BB47B83E904A3 +A6DB8B582311AA9C2A787CBAC2EB5823F6DA66D4CCF5B5016D179BB50D691517 +130D77A7C3205F27D4A15DDB0D2062C486B59C70D0969CA5F00687A0886CADBB +CC06B136064F97A43BEC08811EA53CA13F190FC6F8F07FC498BFE128EBE6881F +1A4913BD395DD85B683FC2A4290C2EA20125ECA194846444811B0F530D16B29A +6CC24D9A7F3BD5888CEF45FB9BA8598B3F5032ECF39E2A1A3CBE122F100C72C5 +071FC086C9739482C8A19195D2CA3D041EC36C93FEFA520E94E01037567F0A57 +4CF1102DCBF9670740C273E2CCDA3553E267EF8ECBF31F1FAC3B1ED824DA935E +9E52E9586ABBE45F3B5A6409C5E779B6A0768AD6323E76606F20F40F401AE6CD +44F2F88CE5DE95B9CA1711A877EE203769B566E263AFD6360F1312A0AB9CB6AF +2546F112C20A703A01AB255739647E46451EFF522204A0CE985A609083F52A1A +9ABD0B01910B4FA3E4FE3A060791E1986BEF81F9150C2AEB6391AE1F09F1D94D +9BEA9ECB59E7E9B116128DE2205D27D2EDDF96FB50F3E1CB742CED4FDAC545E4 +9F5B5BE0A88FE7B227332D171E14DDF89EC0BCECA370EFA73C40EBB1A20FAE8C +C1B7EAE158B5BE22AA16F12952628B2FE8F086ACBC5F778A18E7B67963975550 +735D4CB5ACA7279379D2381BC97D1F2613F79C32742750006973C036BE035C5A +BA17EA7BDB9A8F098B733DBC954574927A16961C2B7DF2D0ECBCF742FFD781DA +3E0A3A1278178426F4592799264BAFDF16CB96EA4D1ABA4D806C9D264095EF6D +1067FDF90690EFCF0146A1E143798F104534FF17AD762F0355DC69F821234018 +A042CDF7D7379DC718E0865FAA8B0C757D0A19498CEA30513FA12003629455AF +B115BC2DBAC68D4937314FE10CBBB96AF8B3F4CB26CFDBA604A7865584AC0763 +BDA317AFC9906AD0B8DCC5A6A88A0B1ED4C6CBDF5F2BB5A5037C1999CCCF507D +AD3F6E4ACDEA803B4104BD05889027E00B027715C1FFD9DE303C2758CC38AA7E +9CC9AEF43DC69027ACE2AC9CB078FE8290FA53D3F6A2AB73EA241E7A53806998 +8ECC1327E41B13C1F5F79A1C963EB00EBAAC27D716206FE780323CA86495C3CD +7EDE7B2A5753E0FD0E0B62960AA8CFEB2823BE0371EBAB60C6FE9F279133E88B +2F2DC40BB446D7C3E955243C55956B7AA576879BE1EC0F2230796408D654A069 +A93FC77990E9C0D437535FCEB32D61DAD9EFAC776FF20A7110E1F3B3C4D89AC9 +759C25536A1604BBC08D52CD8B893A50C0490691960F833E421739B7BF232BE8 +2C53D766D04FF056E6AAFACA416D25696ED97D10175CD63BAAE9510FD1CCD8BD +06A32D6CA296C24AF84692D043E5515C5C261D8C49306AABF81A6D6977EBE74C +51A79CA47EC3017088019301ACAAB074AC3870BBCF2F7A24760CBD344753DB5D +83C3CAB511E2BE890C2EF39DE85FD5778B70C0CCFB18A7717C794488B1D8D1BD +1B23DA8388227ADCF12A251D7202928644FB9F97A97A48CEC170393E8B261E26 +99635A086A8BDE8DFFF1AB3E25F1A6AC7DFB45723AEC5A0DED5769F9AC15A4FF +A951E7D42EB97247257479E3DEE9E695C3D544785B5C1E6BD0B5F4D1619BA7A1 +623A55DAFC29AA4502274386B438F23EF0A56561EC3DFA3F85A1011338B2E5AE +40F075D94A3EF78CE49D514A237A459E4BEAE702222377581FE3A5A6EA51E701 +CDF405444E9CAAB052DEE3E7834DAC8988EC4558E03CD0D9935DAE536CD28ABD +8BF2392B102D2DA4FC0D219DCC8AFCBEFFD823B324C539E5E8B76E006D596C46 +BD79ED7547ED1DA6E352FE2221170EA158E6717C745BF178252CFE4C75801C86 +95074789408C86526E3E872D606DCB4E37B035482471101D8F75CF415BB55E2B +AD747464B5FDF829AAEE09A6823BAE96F66B1452FD4C25A88934F12F448177AD +135818B74EFD6F812A11CD02561938195F7126DDB92455434EB548A5E1B28511 +DC14E3A398F9D8C08F23B2F89370594F0E6544DA432B9FB693F1265AD432CE20 +8123E5AAE03AC7D2C9D6C129B0C3B39CD79F035754854C2ED206791498E26C52 +79BC4C326BA7053582745DA47D6F8231CEADA2547CBDB6BCC2A0858758D65522 +8180BFA16671793B335DC33670B4C7C99BAB013CEB0913B1AA5D0288ED9D527D +FBF2D7F780292D4EEA768D04580A1BF6D292FC886D00009EA6CEDF31D2D22E89 +4382CA2F0FB37686D30898A9EB923F0A181AC58A4A519DA05A5F8C7151F38709 +0831D20D980FCB1B760C636CA2AF619E226DBC0A68741B659D52635E0D1DCE57 +165B0E2ECE8F37B58AFCB15CEF1E23E0E71CEB8AFB3B5E1A59C886486FAAA210 +71B222001AEE2CE52CA68FC3E8ECD1F4692015206665088B3E52E6C33E31590F +17A4E0FCD13A761752BF155A22AA0E1ED55B70BC00793756AAD810A10CA9C4AC +A3804A9C4D27F10EF567F9592731C95E7AAB6F6CFF2E9413036CC9400E00442E +05EDD9B298BFAD4834737E37910B74063BB1E3D5B0CB4CC774FAFECCAD9ACBEF +EAC03D8EF0141885A587B64C83660E0AC8D9B2BE4BB8FDDE306A625DAAC314B7 +B9C359AA51715B2B0DFA7D7F671B1C5EC2B1BB5624D72B7AC0483F7F2837FF52 +2899193863B63E78A39D926940FC71F00FAEFF9751C0CF42A834F186D3549393 +7A052E9CE214054A6889AC95AC408032D305B1CD6C89083763722860F875F4FF +640556DB2E770A449647988FDBA00083BEE2303682B28C8C7BC163777EB51A97 +A20A3F99A01D5B6F2C183048B5DD93A8D445C5DFD41C909B49D23BE41A60F01C +1D6E704C8C5F9D783C224B70E56009569C54D5F64423D3BFF8DAC962FC050128 +965B9870AC96D51CA8420FA8420FD88F6C7B963822BB292F2B00297C40507A70 +2A32271F34B164F772763415FADDBE6ACF6EF3E791E69EB0557AE5693DB0A20B +1DD6536F9D74BCF1C0265A4A88C31106E169732563B2EC5AAB3C0768AE2DBFA6 +4B2C5F7DC339B4BDBE3704DC48633BDBEA8AB3195E9C4677088C47F074D28ED9 +4ED5F03A635888050524C82BAF1087764A217B1E9585C6C38E41A7A26B355130 +9CD809919F9976192C46D2581F984E71B6BE7E626202B45B414A97BB4963E609 +DAA06B99E772BA4C6FA7DCFBB5E2AE2E8E02358DDDA48EDD8B46AD558C1E98FA +D23EFAA66E98B1C49C08BE57FAF9DF8F246DCF7FF9DF21C48DADCE837A503D55 +BA201BDEEB84553DCE5A0C3E2EF0BED804315BB664EC9B8459E09A203AB28903 +9850DB3898EF211CB25C20ADD50EF5439DD13CBFD14000B15424054E0C2147CD +02098784127BB9411E4C96D30C16706DBA484D3C2AEE11D693ABD7079EAD3AB1 +61EED1BDB6CB6FF66B9FF26D4BD79AFBA78FBC53E7F6AA1E103155B980EEAB9C +ABFAF83A91206CC20932DC36910AD39DEB52E5C0539DC99C056A287AE661B13B +1A2DDE0AEEE340A727006033BC6636C743D310130EDF6383747CFEAF9BEF1D60 +8E851A71F212CB203175FC6A58EFF38A833D588A1AE6457E269045C40E432127 +ACA54E03232ADBE5FF45C23E025665F43DF522F20E776163C6B7D069B0EA8D46 +FBE3A12ABCD9F5C249299B57ADEB9B9AB1444F42837B39B1BC6C4026F788CD51 +93E52D681F719ED741C7C9FFE946F665494F17C17501988A509EC377AEB8C87F +8BB6348134BF9806C11669EC6A43DC9B8FD334416DB537D1AC9311E69417CFBC +1565476D77E4C3A1C96FDF49E1F6D62302B571A6FC3037DB9C2ADA5CFF15A110 +83FEFFFC074621E9ABB9C62CC3969B6C0864C41B757F23E189788F0A0BE16026 +D1187D48AA190E42BA6ADF00B80E44AB5512DDD195C376CBE0825343DCA082CC +411E26E3A71EFB7BCFA1B43BCE6F86720E7A0D2A60DA0ECBC4C3A0BF5FE07553 +16EF96247BD1BEDDF29ADEFFFB4B355ACE88CC5D4A37E7D7817B98B2B1E4A524 +C54434CCC39C7A5869BDE8C5D9E3098CA1B65AC57C9D81D1EAF711423A9FB92E +C20F18C80E22E7731C56F60703C6604EDDEF15F234A46F8659C724595980259D +35AA0847B7E96F0D3B3F4D9D1A82E8742CDD1FA2058770AAC4DDA727C506C700 +9A9F93144600628C46B6E5904B7CA98D21F4E08E6804D920AAF68293C4F0666B +1742FA95AA85FBA95037D9FF7E65F6B503D22180437AAEBF65FA8901C1903EC3 +896B213EA46EF7B5541B74F72EFD07C752BFFD26B8746019D131ED8B94E23794 +A5973768AA9FB961394105930FDE07BF0D08218CB985079BA634D8029FE54CE3 +F758E2C8841D7E2D1D8DED3D2D69E437597B28CA971E8161949BF5B71BC1EC15 +910426E7C2855DC776AE87C7482DCDFB994608C0189B7E24E2F16269068812BB +6F1E98EE8DF82468763810DAD7CE08EB0896F7D5342BDE3609522A4D6670016E +A837BAFE7CA0E712D9C68580B5A30E544C25A956EBA242C73DCC40209CC0E557 +D16ECE17D18FEAD279B4143B5F3C69F7F5087D5CCCC6387CE3745FE9FA4FBF24 +A239EE87218BD2933BF6FDCEE282EEB8C709303B35D6A8D9279917E28FFE2CB7 +7F7843C0D4BC1A5A85818F3417B85B416A3EB78C00CB196CA920155690D58079 +33290BE8EF54AC6653D30FAA959DAE3D153426163119BBE5F4D6636AF877D304 +4E74FE984B62E07CD1BEEBF56A26B5B2CFD7E622EC2211DB6368086807F8CEF2 +259FE58C1AD88A982DA8CC8E3656769F2BEDC9B1A1A26985BC3F4AF421DCA42B +2F70334F378D6ED76EDDB59B3B754EBCFB8B35FA47E9DF5CB209BE0518F9E6C7 +22A2A537A3209892448DF436370F0E5DC5E50EC7691C720B26B5027C2FD0DCF6 +BC303E8D72FAC731E2EDC1E2A70C0E51CA0103E7F97727583E65ED760FD724F9 +D318F10A6F16A98574ED667E810224241CE1E674C20EB3DAF738ED6BBD6360F5 +2BE448328D5279BC25C35F2509B2B77BEAADEB4C8F915C73888C953D40417510 +684D630CC51822F84466E3BD89BBE49D4F01D3A8AB9FA1A4A0095A76E95D6D1C +222FA4123029FC4CF44F1E0BBDC820272D681B7540CB096976F01DB1F8F42B59 +1954DFEF62F91CF5D72849B987118BA52928C213EAC75A50B61A7C1BE41B1AB0 +0EC9DE839CB0657A17D9B40BFB7D1A9E101C359E27168A641AC1821760EDE5B3 +53BC6D9643E68F49F87B75AFF41236A9F59F9929BC6BFBD4344A325F5C6929F4 +B1B977F84ECFAD8F885A3D4CA3C8DA38536BB5B76ACBBDA57F882F372EC4220E +1DE5276AB135BC50ACFE5080E281D2243CBCAB5465F18682B09942C56456A432 +7E6C3BFB691FAD4BD032FA4CEF24C1B06CB560AD996AD5C9DD766FD65D3A9C10 +534B84AF27525C7BB98302D952A4469A17F850AA95AC91962AED0C8FD8632BBF +73D29C76285F9733EC29D5B6C7455ABC96BE7F4A3056364A329158F29A1B69DF +AF0BEF221497937A09FAB0C4870C8EFA15303E8DF5B1451805AA50172FB1A797 +02EA9CAE6D6EF65020201A5A0DF800F80C02FF591D1BC9A4E504BA01F48CDE72 +EC8D0FF70B703E749B60A1589B1D80F9E71E8CDA61E7580C12F7F1410353FC3D +0B1604AC55094DD12433E043D958B66E72B718697A209BEAC588407D4F89430C +DF029CC69D52297D801E441FAD734ED519FB78BBF223A60624740CD10AAB1C38 +56534B7525561DD7776393CF031A5B71344809979D150E08BBEBADC84A7E0036 +870490909D120C9614974B2A06D30ACAB28BF9F812889932DEDD470BF2D1874A +106489BE6CE558BCEAB2B0685EE12F7F8099854ACACC27738BEDC39F1034B1DD +08B9D6A0EFE43CE60FB97E9B4C0A2DC5B9B61944ECCBEEA72915C03FD7E467CB +FCB568DD452C729492D0ADB06452F78E8F619A6D4BE8FAC82B3F3BF301830D6D +2773D4E95DA7FD8C38D69AC9BDE1A779AB5B170120F4B8BCAE745FF4F56266B6 +ED9D14509CBD0CC4DF264613B1B021E8029CC0D22F06074E174B635C4C0DD15B +1C2BB2B53CDE374E4E6520D38D8664E9EF753B1E4D7244E071912547E0275504 +C0266420D5F18027CABF3061B054AE9127C7D13007B03C0A4FF7D71ACB26D732 +FD54BD1227C94BB259D8AC8B246F666D3452BC92CF4264664A28C6A744C13AA5 +11BC7801E7956F4E5113500AA535BD7B5225EB693E8A0A8FA7038F789035EAA7 +B5E227C1CB68C3A4AFBB516DABB82592D5FEB58529BED646E3A0E8C0BAFD87EB +CEF8B46FB294B2EBF7720628A3711AF55CDBE85C92A7B0AB3F1820D6568B0FDD +DDFC91A440CADBC88ED53DA9E7C408BFBF59CC87853203E3FF707C55BB314805 +C0E9695DAE783943C37CCC94C7387974A5C88F1B9FE40CCDC5535A48DA86CBF6 +A6A155F451AA39CDF4C010C66ED11E3F4AC9FF5F78721512E8757B77A301400E +6FDEF7FF640B85EB573BE8D3CF834E45B944B22A01DF1F657DBB58A071584A08 +D6943D1E1A712EB23E749BD181C8FDE4C27CA25B9EEFC1BEDE9E99062D83C20B +8CEF0E7E7A7D40983B8C09871B41CA0B3D414E6B503DFEEBEAFB224D1F129914 +67889FBE3BA7C43423D2851045E70369EF98E0FAA1DAD562894C6C93D76B3A20 +B73E4C54E735613973E6E19700ACFF7ECBBDC340EAD2AF295A2F070AC4433E32 +5678B6F710C5545BF2721D3FF8A895F05F7F5D8BA3FA244CCF3EE68544098667 +EF8DCCFA2BE9DE5342D1FEBB4F074A1DAC4CA2DBC82EF2B85E7C1C3E750AFCCA +1FC22A49350D891C052F46D2C04C50BA7260B0B975C0996820BF66F9DD100B26 +1BF9CAA3DAC323CBE5BD11B75020AD3932499ACE1C5350EFEEACD5334252EAF8 +04B2A70F1027AF7D0CADC3AECD739C9CA5653426CE0104D5A1D5D5893EE0B068 +D5F6AC8F6413214052045D650997D30927FC5283F35F6ABCB5BC05D92A241271 +52E1293BD8720727D530A4B368DF0AC5529CD334BADB1F8677D25593AA974489 +2F9F548874FECC35FC83814651A33BF12C79C53A35108C45AD8B0C1B1EE0333A +61F52F2FD2367D066F3CCB15595B21031EE2C1AA1A76E103978447A34E977FD9 +664B7470201E0B68B4206CF910FB57A357DC43923B0D7E29E7B4B2245097D593 +DCCD25A270E762567ED47BF94B6301D7A996B13CB258872DF5302FDF7F0E7BEE +0BFAB7FB65F0DB0503FBD7C66371305DCF168797BE81DECAC68FF3942C9ED677 +427BC47B7AB628A989B8BE079A81B2CA513D69944B03A21C59E99D1B38E65AFF +392A9E10AE8C6094EFCCA5B4D2CAAACF88B6DD46420FE2858794BAB331A31466 +28D371C206865FE867912F5A7249AB90095B075A2184D676A5C7E257A581F693 +FDD8B34A77CA78F06B674E06E3C4596AE9DBE770A51A2FC5D50DE3744F858F63 +2A810996C917F1DAC470CA7B462684908FA48884514D67ED5BDC043CD53021D5 +9C701A1D62D9791506430BB45CF1362B4E8364A43E7E59EF5F44F78CFF4C2ABC +00CAD79E6C2A9ED58156E27D74959BBBD262EB44271651D95FADCC6993C4F789 +008648C1282411014B9F1EB5EA7F0880A80B3B24860073C2EBFEF40CD1AA93C4 +154CA5BD37CDCCABE50C7EB3E5933124E2B3B5451226CCC20EB0611F509CA7F5 +5B2783812F6F4C1F9119485933D8E441B9CD7B18C88E193114613F1B55BBD2EA +3083766C3123D53F2A968F4E0F4D48D31C3B9DAE4FBCB8CA79C5B53EFA185F2A +12E74835F5DE5CBCF32353991DCAFE8A45336264D7C1DC55EC1249FE846B9998 +2E47E6D855E6C56E18CBBC60B84B0AB44A4028CF9AB16F03740EB584E81491AB +00845F21486A1F903378CBABB122FB199E33C89DAFA54F3AD43EB6A4A3B9759D +454E8E3C14FADB4DEC10C64810D3427F1EB144E47A429C8350A99391C82BB82F +29BA08A51D727FF0FC6E7D0823A4ADB2B40D00A96F00FA7CA1D5C8ABB86B3F25 +5CA86D9C55020908DC2C8371F5BA6D999338C7C9E06B28FC1B1B3E5FEF3AF0AF +FF412A76E841CCE583CAB8B89C0ABFC585D365B7D071E6E35E40002A0F654689 +BD1D5647A800FC5AD97C20F84E9A608F9BB348EE0D3E9A542B4262BF1F424558 +D3E455268D042F048B4760A6C2E6BB9A783C849787F9F02B98C356C1BAD94634 +2485F033A0CA885570C419818C8203CAB7B9FA6290F8A62EF9033713D1257064 +0E305EE5170A4DE71CAD89EE2C0BA62E9E69A9870DE74CF52D0DEAD65DE2A291 +2282FAFEEBC0B936E91595F7C6E0BBD33E79FEB2ECBE04891F1071D631B3C9EC +6305879468CBCA461AF927A3561AE15A463B24461B9960474005F98892057048 +6419A27D3A51461C9BB9A0E8E621ED1F536937FD0BFCA77A3C33C35E11F3C367 +554833F4252C036D579F32DDCD7F4081B4BA73AF51A2488EFD7877D917B2D4D9 +C239AB6DF1638C9BD14BFC9964A0C65963F6B79D40CA9E44A301F437B8E03B73 +0A52683FAA4CB2620D7426916F89BF72052DCC7E24509A893B715C4515E740F4 +55EC935779A22EEF3207C657A6833F73F04206D147F5E427B0414D8F6F3DDCCD +BC895E1FDCD3A7E76D4B21669D5C4C5113959CC62F0B7023F58D771229C2A3A4 +00FA0B6760C8B77E356410A854B23C9BE8F4BAB75482495E621F83045452DD46 +B5F299871544E4E922780FCF0BB6DB666B9EDBCA62703ABD4F3CC69E15728DBB +6C2DF999717533FF7F98ED6934826FC7569A4020DE4B06147865178D420E8CBF +FACACBDA128C17B635329AD9995E6E2033E6CC702D5CEF1F0DE1F25322BF58FD +9041EE0D904200FE87E2D5A672FF0B3C63575D5F7E07F01202FCB8C42EDD0296 +6E657B5D703AF68D26FCA74FBC8076ADBA7F5A4BC58C10D91FCBCB628AA9F313 +71CD61BBAE0B6A6C7B774DE4903676BB3D210F220B413F0B95F43121741523F2 +F65DBBC09B04BE87A030C607A545A9D5791FE4FD8F479BB213662ECA9103027C +01D85141DC897832816392AA1F49056AAE3EFAB417AEA3C79E49E68EE9CBE8B5 +717FB5C3C5E811F51BA685A178DA6DC3DAD589ABB4F8A0A27A5DDCBBB11A5E76 +94B6320110123C630857538E620AF88BD8ED5B5B8A10F1F28A15BE1ADB196F40 +CB04E8A50ED5322AEC3CBF8881D32160209E8FB6F7ECFA70AC58F94CE3810BE5 +8597D5657E39AB15B3E35DDD508F74069DCFBF0CC70A6399C3AF7B04D4975FA9 +31698D10B8E9CEB89DFDEC2989C37FDD417360F39FC6802EEE5E3CFE7DF63361 +758BF4861385D4931323EF38E7348EB98633C83EF9BF627A29219E9F75A1D341 +5C8091A908ACCCFC01395AD91DDB82EB58BD88D5387994A74F35BA04265BC32C +4DF225782658BDAF63E8EC8B5B4DB6CEA66F83961D5B41C8FB62CEBA3DBEDC69 +B6DAF5BC4B541FDCA54825918B9C84E7122D9718D28BF9E9066C8B122072225A +1B79B4A73C235DF52511CCC1E0A3420B35A5598230CBF3C6EBF09AEB6265B481 +304D9325DC8AB8F6853D4111D42724C558761991E953F114019169BD632E6639 +037344F1B767B0DAB524847DCAE3C5CAEB864973F3A3FFC06312A7753F571888 +957ED07CAD5EDC9D04497FCB48446F6C44C6083BE9A31821BFAF1046F89985DA +009025D4AA91058EA366244ED8E64601B374DE230A90463AE4E57D5D995BDC18 +F621E2B31F79439BF5A4984BB6A02833ADFDF4AC0DD58F53BADEF74BB1D4AB88 +90AC403AEB53313D51303384053A941B0AA32C3868582180868D7B6822533E61 +A4C1E26794A2D9F505EA75EA790BA944FCF61B5314DB14FBBB6252495103C7CB +8E355F9193D5ABC556F3E4D5B6CD2B8FCE08570B3B69075E241E06CD9AB790B5 +948176080294D56000A0B7ED21D906169D052EFC220767178ABE60759E148036 +388530AFD262244BFDCC980D432DF470C4243BE84EAE322C4D8EED4C2242F490 +93639E49E5548FAE9DBAA2826176756D46BE3449E33E8C1F4CEB4720D0667DC4 +EF9D390416E580ECB81029054635C6DB6D8A1B7B964CCE4B15B632416804C805 +0BBB666A4AA5038D4ADBA00ECF22EB59FE9E6E4F801CDAFE3E35C44EB6C098D8 +093AF18BF4FAFBC3CF7562B90029D395D58383E75039003351E35057489BB5A1 +6AEBC03506289C918E6AFEF280E437299C2ACA7E6D5D52AA3EA2509A1758EA51 +637645F7CE54EE87093AE38B8FBCAAAEAA2452AC65FE2C68235840BE62B91742 +96AFCBCF4AA8300FDAACB55FAB27B2B29C488628347E9262464EEBC8D13855F4 +56D9775DB23F069E9CF9C84813F0CFF1391D72DB08B0C9A3FE409D8D08C00562 +DAEC5022E11EEF099724E648BDD73DEFF8E1FFBB3F80042554CB0C03158793D8 +CEBB320F8E0A86CC95E5860355F00DBB146380CD6BA35F93F5B8FBAA54280262 +31CB7998DA8B43473EE8D1895D5D85ADB6E5C8D2B5109E57DE3697F541C7B27D +12650F96FC01E3D56F457FFDC3BC2668F8E6FFE82B94D81A648046D7CC71C4F7 +E218F5D5D9F899E5A3A33EEF7EE7C8CBDC9F239BD2C12612519ED9D4E89CA4CF +348C0EA704B46E56FD9EEE336494CF103C93CDADA00AC0CB74DCCBF4737A481A +F330C6969D9925BB1CAAFF8A2D857245B8E4C82A7915D97F7466501EE7195D8D +C35D2B5DFAF50C78686CD5F5717ADC8047B7877FB15E84961F372D03C0679375 +88E4A9A5D2492D28D55FB00ED000E2B8DCF24AB3EB4519CDF68E3FF98B54A1E8 +E4DF661329FC27BDFD47BE63E85A469191E476D0406774727EE99EEE6C2A1C0A +EDCE20F13FD1838EDF3C1E5FD764723276ED5D853E609B0800197BD8E59C1265 +4092D1D76BF60B1FB675B25344D65C0F79C3064CB634970B5ED680EA710FF884 +8078F9E050655644617690A3EA66AF2D9AB40D187B46E22E72001E2A9D3541C3 +5BECA48A812700501568565A8D37A2159A51A89BC59D4ECA20F3328CF48838F2 +B6BB50D0DFF3039160FE2E278D178B673361A3D412BF3ED1554540F1F0A9A1F5 +67C7C4B257B97C6BD1FAC85ABC9E86B175DBA1FD0E9BB7C0DED0D47956AF2389 +64EB6C4CBB3A03A8DA5AEEEA4422F432EEE66860BECFF5BC5752147BBE75D0D4 +BED50695E88D2E9F01FDE0FFB409CCA801EB16F6471181E62EE70AE4AE06B9CE +91079CB5ED83BD82A88C835CA82612A4431EB7979FCF8A7D1ECED31CBD1A2C3F +A586804D66B8A86997A05D349FC01A2796F1892A42979F50B0DB1175B42EFC58 +0B1D3CB8DC992ECF5BA9A6DBD1756C20DBEA6948499F0D245F2CD8D121A8F916 +C0D41F5FD5414C12EA4FFC688344F7EEA2DA6BF2795D4D479851DC004555E3D6 +0AAB1969509FFEE0390AEAA3D631B78EED9370B286B5D2F871EAC4F14FC32B7E +5571510C3C9BE1467125B7EB3C9E161B0254213733C6992062A63C6904575107 +3395A27167787044056BF09BA5BB742AEC0D7546E9D092D2F66D3BF9564F838E +FAB5EBFE6FE458D8FB9BE05800AFFF6924270F06FA0DB61E48F36417F2B84ED6 +27076B8B6EC6F7DECD29DED0DEB9D51DE150938B7E94D09D19F28E3608DE37BA +FEA6BBB3BA06C13F39BFB5268D4BA8D8009E41D5DD8F5C0171FE2859A78C8F16 +8A98E12F32F867DBFB07EB5404B6092C7B04BC47118E3B3FB66F981FF9642C15 +A4A63362DD5D20EC4EBF415D79626385EF9D7ED7B18A41A4C33F3C70553B31A7 +01EC23459FAC1A5B9D320B962D966C43887CF3BEF40D2DC83E843E51C9870C2F +43CB49080C3C477358867A4FE87FB6E9F79C7C7D573B0D65F155B2656F4D33E7 +0C6049E8C46513CC500CC600D7EE5D30D32B9324C89AA10A9D676EAD04C9728F +4A4CEF9925A294F26E6AC63730B4520C43BA5AB4EDD6441DBC3F2B4EF8FC4AFB +1ACA19E714C1CBC4AD114FD0744F84C85F4F3293BBD036EBD4CC29B3B9609F46 +E856F37EC8E33396C89DDEBC43C0A78A3FA67A155E1DCF82148893C418531769 +CB82B1B6357335742E7F712A182C413E8D8192BE6584A907969A48EEBBE5C0F7 +95C7219652F28F3306DE1F83315BFF09D66E3C31CDAB730DABB8ABC1A33C2BCF +046D3FC7E0084877999B7D2A8AA3880006B9D63BFA9F82F26AF0B93372E55EF1 +DBF53C7494E42794097DF15DDBF43180CD643589E2F3A40AF0A1A0D7EAC3373A +B94B1C375A45DF21509C3D094F230B8EF207F4D7EE1B6096FA047D0AEB83D12F +E3AE9ECBDF2C24F3D553DEFFC93ECC63A2479AC22A209FAE85E34D7A6855C386 +C611D60159CBE8A9595DB541849FEDDA99DB09BEEE9499A6CCEE6A0BDB150B11 +6DF9A795156BF845FB89ECD6939D6EBC8615D8FC47911BB34107E71FB3E4507D +215C1A8476E75BDD1B3D87321852AB6A94D21027D35A2199F25DE7F7BDC4C865 +98DD84C89BA03D5498AA3AD62135F0B1390613421D52E2869B87579EA5AEE7BE +6804CDF29BC99A9F7355ABC9E42D21E706B97091AB73D3CB9184013C6D8980B4 +CD5C8D5D13973F342E8FB4467260B23340BF1254E3D9195B1D6AA566976C0CB3 +62B492B2C8D4EC481C5756496FC54DD7A6EF6A209F1E15FE2C3F57821E9E19AD +0A563DD390A89A6722513345EF58F98D65450541A0C5C093E69D749E0759FB1C +DFCA7A4782EDBC030B9D692B3EB1003487863549585E94245D9ED36D5576245E +C189F5E31A033C68BD21D5A477B756ABBD830CEA8D7F0FC73F93352CF95D584C +2593F7389DFFED1A40E6B14BBDEBC5368FE10962FF7A8938227FE9C44AF54602 +3EE2AA0B6D7B4044F906480199E49B3F2AC6ADEAD76C88DC8D22A417C8A4BCEA +D0812F1F513068E700040A9F3B6678B1F51A48592437C79E2BEA709B92669764 +8A058E234468B01F498B5A51E2021BFDC09784C706024DACCA6EC0DF8F9039B9 +02EDE264D7BF8381A66751F4B9FC4734CF608898828B5CC3483C688132FF61EC +E7BA899F45C3530ABDAD48A5B5930DA1BE15ACDA0522A33E87127C559F551896 +40348DF2CA4651C51475B1B611957E11D787F05CA436BBF1655999F1DBE03AF2 +3C83746EF137EE71ACA97CFA6969D1CE5ACBF61900A452D630011FC3E85FE0FF +AB5AFB57483E7ED55221A7735E5F89CB4EC92D5A8C9CD73FFEF46D62F8DE207F +D4DBAD9EEE001DDF0750125FBC59A5E13A921955C6D7CCB1CF8F89F3E00F7B12 +5D358163ECD0CF38A118064862EA04B50B6AC7B95D531C2065BF2CDBBCE887F1 +70650E0772EE5AE10AD67FF178EB51F8AFA0CB0213BBF9757976621EE0058B0C +3AF602DBCC7ABFF5F467B7854904BD7F7E89BD19EEF9A2F7B8E557283AC672B2 +92BD96D87365C681463A6FDF56DADFE485E1B81A7766EDFDAE58F92E33CB12AF +EABC9D80CF4514D8BEBDC6433B990B0AB267D378438D738025AD340FD602C441 +A5A4C63510DED267FEFBF9787BABFDB79804F56C89A602470AFC0E541B46666A +1C167AB82E06BFA1814E22B65355F40813BCA02BFECC086C7E8FCBD845191C28 +7FA8F4BE3F1B4057D192AF55AAE787B0C654468600ECE8A763BF3B5A7324F7F5 +62F7F596204F0A50A5A7E1911418C00849DF24E00AADFBBEBB6D10180E9B5FC7 +BF839E08691661836B5DE3E5041DA4D3B4A458E270B274C82EC58617A98F0341 +C4D379C508B3DA7F2C20A1E7CA5DC9505795944BD83EBF02022F31E50A3FAE52 +7259693253A45AD3AC1D1E40D694D4B33E8A5A09C405B52BEE5EC132C9B27B8F +4C45B3EBA9CF34BAFF627AB8D86755D31472CE8ED453F01E96F74851862DDEB6 +0A8B4C6A0D69783E632065B095924AD3D5B98A8100E52F2058E795639BF91C8C +CF10E8F4DBAC1F9BD167FCB399BCEC1652C81DBAC4B0E37DDAC9998105397E3D +73FC7E53E70028314EFEED71A935C9792CCEAE794608DC13C6D14A069A02FB43 +8A05187E9EE03AC908DBCC7551F1E933B4FCE961926D5B81CC885D8CF3F4CD3F +EEB5DEE1769A5C5D8E86C7DB3E96FA500A2EB89735C55AC3252CC280ECD07AE4 +64EC4F4BF687A866CD8A9806BF96FCB8AD9BA0972F3DBC2971F50CCB4E1A2979 +480341DC01E58273F4086B4FB7C98D4271829AC9255598669F26F5B59F3DE2F8 +9BD2FB9BF3AD79C02B8199C952D7135933BFF1A3B3D04EEE52CA1CB9A15413F2 +158BA8D689AE2F93EF3EE2AA055B2CF2CB6D077AC8F72126FCE95F30471F7AF4 +6267671B6EF1D3F5A932D94B700CF3FD7777FE123129E874DA871CC6F54D69AF +CFB6E499F50025567B58595509CBE1300AB209CD88FC472BBE9C5F8124AEF8D6 +3288921A3932D0374333DF8D0F77881B9012D75EADEBD2F80DA17B5B1CF8DCDC +C71A7E217FBC07ABE2395653552742AD35C5B3A99045B92B320711B18E9580B7 +071C0C1598A58D0CFBA46370CC8111237545DB6353BDFBBA45128109B9311523 +F493DA4EAFC9D6FF5B73A486A8D4E39C582280BE7569C1B272F2942782C52F6E +C26A3904E0EF2926B98038E35113D0D1E6B91A310F30B0BB7971E5EF0D4511D4 +888AC76E95D810A7CF7EAD44883DF3CBD91F1452F901F6448EB8914C3FE434A9 +60166AF573EB5D77DA5A16A33E5ACB089C8E0F8FEACE1F9C48C83F18B685A3B0 +027007A99175E59A6C9609A363748E53C44A1602A39E96776738B54690E9E4EE +A3104B25F24E3F3B77316CED31ED193B4A33C5E8E1CC3B2492319BDE215C1AA1 +DD86D2622627C483F831DC8FF17D9125974521EF53760CEA854F0E8DCEE92856 +7E9364B786F6E7995A3CC87196162C734CED436832DF7F10CBBD7726A1A9FE74 +5AF7E934B5418F210BACAA8C3023598DBEEB4DD2B4C92652B61C76FB1433B9EC +163099EA47869D3BA7C97B1D27503C4C8CA20E2735B650C7A18B57B8E960F8B8 +42E06826FAD393BAF7DE0D21AD910ECCC2D9D5FF7A260F2E88345617B09EB029 +432AB4ABAF89680F39FFF1722917F6EFDA157A5B5158C8A6261CE4FF77D4E971 +D892554EE4D3E1AED976FF227FA98944D159972872D6DBB6E0805F0D7F267D18 +26ACA6D4BB463E6D288CEE66B08BDDB4FC916718B3A497CA632CE6E8FC9AB174 +8EA17C8E6F053F81AFD6D42382AD9AFE8D64B2A4C7D91181A73AC25F06E5DB71 +4506F66FD51B010AE1AE5E82A3ACB0CC3D5BD1224A28B05D2470209C182FA991 +A9F2DBBF7CB018CE87D3EB1D9FF744099C62169EC03A45DF7994D8F42C326A4D +5F320EFB7ADB34F2CF4031455F5D42949CB30B925BD9C5D7F8F0D85877FA7A42 +DC6B98FBBCD08BC4A760453B73CDE333CC60A6A8F2BF2785B457CD11878F84F2 +8FE44CB9E828A5AD27EB965ED94BE35BDD3C6D6FC4027CBB93508F3116A0D4C0 +0E75B6E94219DA65169079555947CF73645A516B0B779D4342A4E65B0C8DE843 +4858368B3EAAA38BA9750EFCD7864D6F931240E80E49A8FB2ACCD96C67282060 +B4751BD16AC3232A53AC9B4DD68839A36615642E76607A784ADF74DB11E2C67B +3966754103EB44767F5DF32FB7BFD4ABD89789E9B5D23E51ACFE4E5ADEE1D4AE +26385ABF6CC8B432096689A9CAC71E086FF2F5A5111EB0F631703C7851538CD0 +D6EB492CD25F666697B3B6C184BC91B05371345FA185AEE6A5AF301128F4B4CD +75597F9ED3B7823282CD05655F3BEB5BD4BFFCD0F0199E2FDB6C9F8FB3818747 +6738C4F7610C3A2F46314B90C0DB9A4ADC56D955FF6AA22574B727D8857F2B24 +8B5D884511ED7190EEA9A71E9708D4AA1B06222D5FE5A4E25314388A959FBDDF +1EA0C85E01169B2AAD698AC73A65400E87B7A9E7EB43E022817C7392CEC3FC67 +D6663DC750D40671F0337A49F2ABDB10AE3EAB8EB746980BDEB2E69D762C19E7 +440F5275C396C3B56C6FE9196ACDE6159F41CB9A554D8320A4D71BE0F7AACC4F +466397A75E981E1A215EEEED4F3A8482A686FA7C695B6D40AE92B4150BD00DE1 +E4FFFA42AAA059FFFC4AC9491C33C05E4D27808B69E9FAE08A86FBD01A35ACCF +46E967E862960EC4FC2704B507FBDF00FB02494D7059E429E80761626678AC74 +0BF0108F8B03A95ED783A10FC5938D9E42D64E914E9A4F04EA06BE4C8D79AF99 +25B19DFCE00972D45CA59A8BA41E349840ACA3124E8F3297C26A6D1BB1B02DE6 +C52F047B55DC672DDB9BC73BE4B39410E9CFEAB0A4B1C55DEA46746AB52CA9FA +761C8C8A2D34944E904879403B0686521C9CFDC8FBC32F4AE659FDA262B41F54 +4D5D69DB0D26B43B68EAFF8C8997A267477ABFCC6FB829632BACD3129BA0127B +1B9164BB9AB6EBFDE99D84FEEC3F04533B07117AF9ECC0BE6845F0854805296C +03C11A27AF920E36D28152A50418A9EDA2F14940BFBD9ABF2F31E84D5D0EE3E1 +94F32CEDFA821CC1FEAFA56758D269643383A613B466305C21A87E58C9296CB5 +DB8DC4EEAEEA89A1E84D5DF6041A12563A0EB66C2A0F59581FA47099D429E615 +1FABC2046BFC23C7E848F53D118239D666F058113C865B01A8D4AEDD8AC89F60 +819C1A3A051AA665A43D3552760D9410843CA004B1F2CD998A3FBED3A7CA2277 +E1FEAA9AD910849B10145FC2E0D6346666DE2FF7C2AF38E2F84CE0DF16D0B90D +03E00EC3C55E5C05AD3A120CB1879E84898995AE5A205721E2AC6F88E5B57FF2 +7CD9D37EAE28F3461181FBBC340BE35601D0CDD0FCAC181EC6E2CCCA00ADEDB3 +6867BA1627D730CA71566C9388C6F0E069BFED8968B67AD465645798D18A49CE +1C34EA0A2DAE4C7D13FBA180C50EEF9827FE456C27BF25FEC28ADD3AD94486D9 +9A697024609611947D03EB461FC8D17B2EED155A46C0825FF872C1AAD02CE9D9 +A2FC62A38F4784B40CC33C298B4E8F7C3E8A3018ED0F497B054DEF36487213C6 +116F39D64454F11B0EBEA532DC3F72A16454A5EFD2A0A702139F6F6647338E06 +773E301EE8FB984CE226025F597DF0B44A73629E50D39DBE28DE1852B0C79E6A +1FBB78BCE132753A07F858898522ED3420F671D4EC657B1363D88433F155911E +991DFCD39AF4523716AB392E40BA705784376CA58F5C5F06C71EAB6734C12F8C +C6E8D698345483D4DC9194204501A98315E44C43B38D7F30C00E01F0D1024052 +D3E0C5FB320D54FF4ED525133C55CE2021F9B06130DAECE83115C5E4CA7A5E60 +78A5AB40B902EA0315651E07B8FA6367F01701B9F5460AEFCC9F591678A12F90 +A8CD4150876FBA33C30AC006B8D168BCB4B4D63259127268C996A5A59D12872B +EA4304B8A5A08ADE39604C14416F9B327ABBF977BA56FF620A97FE4F2D4D4181 +ECC349BF0776276405F54C882128121AEA5A07478E2AD6C10742FF6430EC0EAD +752F3541B1CB283CB24D7E37445D4BF42C8BC632D41C4A168EEBD0B086BDA9FA +3D17F6ADE5D0D70BEDCF0A50B1E16055999018B459146125D16689CF811CDC42 +E1563D331618A22EE81DB417DB13ABDB475396B02F8FDB041DF6B099074AE073 +202B439C5956EA33C15AA8F1F6BB27F0160337203EB289BF55D613ED95A97685 +5F86C5FC55B627453171F5BF641E5B6DCCAA31E67DFD68F968EC79BFA39B178A +D3EA21270631FD29031F64621061E60C7E2269645A51A239A207A51DB86CD07E +3BB35993A95FEAB12FF6BA96EE231F1B2935E979AC69CB0CF2416938F5FAEE48 +E813DFFB95D13BB6A92A7A6E2CC08E3789462092F4E72626279E5C8257EACE5D +B3CDF6D4704A729D020C278BF8BBD6474912424702ED4DD0368F30CAE5977FDB +3541ACD80981D99B54976936DA5AA9975B84F7F2A2B2CAC6EAADC5B2BF652891 +FF8BD1DC5BFE7033D9D2A2C79FCFCBE44D84513D542373A9CC8CC6267A6C8BFE +F2FAAF8AE6C30153EE9F280A063D05A9443DC3B99AF1C9C1F2B0D4BBC6804F99 +5167D5481B434092E61F7F6120C743597D4CC8F7F158622C87E0D7FE7595DEBE +2EE42174102C99FE6092CD19A8E424B6DF432EAFC0046595DD05EA58D034F4FC +FD90B00AA18C3CA05F03445DDD30A6F040B51DAD4F04EBCECB1D5482301978D5 +DFED67774A1C1251F2003FBF6C4E2913B259D99C55B25C3173F41AC40933CA99 +2CE8EB0145F68130A4B2960C2BE2CC89AAAF8AE833982768B321DEC8FC8EAA8F +B64A9868E32D1914C46C8A2EBFA46F7C1CF199D24DE24339661F7272A6E34829 +E62E11A0924988177435DA106D7C524C0C2BC1C2AF99D496859326FA74FABDF3 +83FD82C9144B6F03F082E20EAD92284139E45C994018F889A1FFDA5FA2B19B90 +38B9EF87D2B34A7F46AE27BB95E2195F958798982E96979BF23BC7EAFAD3F1D5 +AE454252A06C5953A6553FD93ED295F86F419D15FC76F05B0C15EECD70D0C784 +21CAD58C34FF8689CA2D0A2C9A204D99C2378421A0F57EE9A3E6C9358F3AEEE4 +E9B6A0CC3AB9DB260D68D35E66376A74B26F925F1578737AE6539575B969F269 +872A97EB9E0181BEA5241F9DB74F212F81249B71B82D547D1C9CB6FCDDCFFA1E +700FF34E08147F6E29F10F0CBEF09CD254EB5F9F8D8099C56D859AE9EBA5D4D8 +256B90DE65747C78D14B4FB8E39A67FB1039914026E0CEB6FEF629E1C024CC37 +037DA8F073991235541F09CCAD292E4F7574ED126C99628F6B208661C2EA782F +C74AE7FF1F486B781D89357F70ECDE3F36FF6580E6A0F43F9CEA95BE57AA3AE9 +D82F4D141B9F92F22466637CA739BF9397BB94F60A6F4197C6DF0C4A9F348C46 +29FDEEB9DB680EF7EA71037C2C42D15A966D378AB2192B56D24E2EFFE4421B53 +1930203249DAC898FCBB90EF4FF10B95B01E4CA59B25CBC1517740BF94243B52 +E8B96AD886C9D9EDEE636A4F8722956674D838F57A2B049E0DAAD8731CA7331E +6D5F3CBE866174B949D87043C4686B226AFAB0BC6878D1693D849CDF52B2D498 +729734641F6F8A63D0FCF3139C55D9ECABB27508613C1997A8D8AFD78C8E789A +D7C30F6C58E84FB564093D7A589F4181EEE55EEBF39F369396ECD59D90D44965 +1E267F20B980A4359B462F692E86E04E0167B965B6D958A52CD880FB69F6C60F +F0F76F5DEABE3B0E21592258BC83BD9AD7C087B9028D3F1941A2873FE5D6911C +7D353B921FEA42816DD49B48450049B8F31D7078D0AE7CD7DB8765A8781D9B75 +0547884A23E8DF7778571C650490A77F1124639AA7554AFE3D8589DDFE5D7141 +43B8AF5E82E9098B95F395C2B9988068260570B288D1882D1EEFEBD9E9B0FFD9 +331503DBF1ACAAE998CF3F3452518B30469A6C72C23D3344C4FC1DF7A8A01148 +73FD5F56F95BC98CB2278B583574471BD2E97E95E8EE1860E74300D302602DCB +74D548F0D7377C0A1887D5FB27534A5560DE1D1211F52963AC6C7523FDA0104E +72121BA9D2CF1D84B299F2826B5105F140B890484CD2D5AE03C69BC056786534 +2BAFBEB8D80273CA0395EBE9A3BF3263C1F46093C5B3F17771D7AC85CD72DFA7 +CD767C726E7BF2196380E57453AC511C99DF297E4A7D01ECB22A095355C30E6D +CAC1B1F0FC955478F0953EF9CF88940D6FBF6D77BE921BEA61F3F1C939EE6351 +C2F6A29D1F1FE4383BFBA53ECC232C6535151EA9E1E81355FA9E72847EBE8B9B +11B229BE65DFE9774B9B2970C8C08431943ED09CD1A09CD6EFF896F43EE81FF8 +69C777498FC421ADBC40DA7AB46E3C65998092017F8B6BF96FADD768770E8219 +71D03657047E0E6E154CA34E4013D724A8F78B53CE623DDD13A5F7B7FBDCB909 +455CD4AB2062AE859FEC2F78116EC8583A2B002C2D9258FE3DF659855CD98E65 +876383D0F67C2BA1DBDDC0F652875EE767025C2EC6FDDF5CDC440577D5F9ED91 +8F6593731D04B25C2868B3356C87A9ACC98AA052932E01C509DA912B44AC538C +DB92D01A4AD932CF0D48E6DC067795416BF0A4E5B9500977DA66E4B346394D3E +D27939A56887239B7FC7F15F564E51116B615A4900CF3A67F33EAED29CF39528 +2BBF2827BDAF3616AA1740B7CF12854CB51175B088CC6A697B5D5462C15B49D5 +D4E58A406B51EFF8CABDBE91FFCB58E9C8101178FFD0833FF612DF7F99891F97 +6E994A80EFC41B863696FE7EB6787E4AEDF21E8BB6D5270927CE9AD669261255 +4D345A92D79F62F15454A661B4470310C0C7F85545806CAA0CC180B957846895 +BA04D4ABDF3D89D321D9B9C7DBAE4C690F4625EEF664CD0BFE548E057E484610 +1839E6F5C8662BA539813EA1011E77B85B859E5C2D30C27E19CE1FD55E2953C0 +6C9D5E733BBF99B3FEF8EA202DCDB64B8588E0F0A5EE6D3F214321FE15C3C9D5 +9DDCFEF830B4A0C458962EDA665A95F4779CB7C6F3A1FE80C8C9EC1542EC2D9E +B583B37FAF62443FBB3E5A7F6BFE6596DF1E9651216FEBF11803FAE1CDDF8756 +A55D19B3B1898C71ACA59364386B4912DC634E04151A443C6B6C307AA2D3BDE3 +7AC16A5B39744FAE7E9BD225E04A466BEB4F9F51959F3188325DECB6CDE15C2D +66F4C612224BA6A9FC70787FF17B7E0E31F556E2E088DF214ABF9F27C39EE495 +1EE163A644106E1C1C7CF6BEF07009B38022CB5B9C33CA4C62E69DA01BA25CF0 +BCA87377622FF3C96C68D4FF09BE24612DC788F0ED2910FBB1AE8C023B7CEBF5 +86196213453251BF1231B5BDCE182503C9B0E06724133CAD069E14C36DEBF9A2 +5661BFE61BE51624F42EB5717CAE7F05DF20A27F0CD37D268BD50286E891311C +D55744A29736BEA554B466A7AEB02C5C0575EF05CCB1F69D37EC144458048245 +01EA846682850F97310FD68190044E4CE798D51699058F03F5B0035A83F96E99 +A5F7112737D436EFE6A7C60627B700D4B539288D2006CCA437D0AD04106AC8BC +9E411030E00CBCDC3F9357ACA9CE3E6A63203DF968AC474F722B889A4EC10DBB +39295354F28BD8A3A770BCE14091561583447E29292174A067DDBC4A7C638A50 +7A0F05863F435AA2C763BA5CFCF6DF8E39189E79A9178E80A305E8F03534999D +532CA867B055AFB2077A0C7B5D1B738DC0494871F707B12D1EF469EE4FFD9C63 +78FE05E1DA7E188E997AD2C03EEB2CCFDAB1019581FA9C57C8F1DA051A60B02B +C76A5F7419B32AEC483D1EE2E7512BA83AB78C796CF06D6A01AF6C1A517F8643 +141D48E3344B15CC483395CE83BB56762A423322A0AE12786626E541F85C5A2A +79DFBBE6DAC3A2754AEAE562523A5788C3B548B6DA59D3DA207E5628017BFDD0 +A9DE4072882788AA1177C695DBF0BB784F480F831C4FD4B67365B15CDBA909D5 +F83B44B360609163287D7F315CF95B8090B2BA45518F9BCD3884CA9641704A05 +37D4CEDBCF7F3208C7580AD987F7424C459333F2C7B11937BC3AD70EE12EA881 +FBAFDCCDB80A1C05D129E0C0DAA23909BC56AFEA730F64F93FF369928C40F0E5 +CBDB410CF2EF47D49B0F04841B268F954E225ADA644566B2E2A7B93A6C6EBEDF +F6CCD83C4BDD1AF12A016D640CA9CF1BCB0FA48213C25E7359294857E16A8326 +400C324F4D6D15FD011EA1D345CC8585B06A5D34A0F2103FEEDECC9D3D5C65D5 +620710092A213AC8E1C8C5AED11E350F0760D1CD7062BC1FA480A15DE733FFEE +5F428FBF94488CDBCE85D4B65593362AFCD83A782A03F80672257A67EEE33940 +89F04CEE35C0B418BF33F65357EFBA4E3839D5CA447BE8D1E7C14C99A1866A13 +115E858073E68F259F48908E980C8335F9ABEF1109A93C20164161EE5DFFCC18 +3B913D65D9ED29CE5688A0078454080BB624DAF959BF30ABD78B1964C0D38D81 +BBEE68F8C31A647B75194980EADAE5AA18609FCCFFFC73D55212DB091A812A65 +1C62893A54B9E9214A6223EF22E663B0076192EAA8338FEBD91498B875DA25C7 +DB83A8D36542F0818F02717973F1FBF55811A03592A5778CCCC941CB636E6C8C +0159AD962BBB6951D36FE9966DF8111AD385EAA574BF225F06DC016443CDEF40 +632709C6ADDA1A90DC99DC0C4AF29CD4722CC759C1E811676F12D58148FE7DE0 +6FE2C004CA06AB171D171B21D3F01BC76C5BF9C95B7BDED1E82C0DABA460AD4C +B434BFB99978D079BB31CE9B6961CDBED6BC7601A99A1F811E5A1384107A9E79 +4CD84EBBA899EEF9F33583490C3767041B9DC600FB7311C8C606F1A3C3A30630 +6C6B2E51637DD48659A31BAAD4CED67A90B9D8FC4B548320CF65C66E5D0B0726 +B2047D77C71A385C3A77DEB598E24CFAEB307185D6CF4DB6985EA47290BB4191 +F5A5700F9070499C56DE417EFCA43AAB5AA92D1620E38D9ED6E01230409EA873 +F16CF19C67466306F8D5A442B9C619D5108E77DCABFB71F3F5222D46DE8B5103 +EA329DC77AB50E9F8C73455354851AB748246C351B313D14292DCF639D80AF65 +2E765CB7C1CD67DCB2B1FFB4C7C16FF06E22229C6CA1B90DF3BC04F43DE4F520 +604F5459B3E77FD1448F38E411CF8890DFA4625A9A70018DB43BE1C83DF0715E +769DA23B17BFAC15285413BAC8B44E0B8ED023B4CC9F65427E922F7AFFD419CA +20F0E82EB61C0EE762F546EDF4F6C3BF91F991CEC5751CE393A8A1B5A740E47E +208BA82AD0AD81FB31FBDF64A44AECE390218F22B94F4912735351875810351D +7DADE83748BC01453FA6CCB00DB1F253694EFA2F906121935E446568F9C36D74 +22518EDB8490CBFC2A03E3F7C143EC67BE7758D7E018B9D17328E842A71A6DB4 +5653AD77807334DA683403FDF3909AB57EE261D12038D277D445B4AD4B9D0943 +9E1787ADA6156861B188646A3A065A2BBD52DD92CCEC0121BB56AC8961E67A21 +C6C56FAD0A430B0EAFBCEE41F8D7EFA3D1CF92A5A26AB7B1ADFCE7B43BE20CED +4721BDDD06BAFF6F0D44EAAACF15D4BEE561E4702B525EC62BCF202D52EAD25C +90F6F53F4F37E45B94C0E707B426F5D598DF95372790BACB881E0C817FB3CE27 +A8E31CBE57FDF91582510DBAF8CED1E042D592C18ED85C646507E39D28C8A6DD +073FA1DE452C4AC40489B68FD3343DC637070716DA198EC36C2A7283604B99B7 +3389D0F2D1F95455105A3B7C18400F55C617A2EB7EA84CA48F770953AF9FFF9A +B00A4C6DC1A5BB278129E7B98E1124B396DF750E2C4470DF3AB074602CF55478 +F2DD0FED01D5989EE6E52B3728E9D5EDFACAD462187C310B04914E2F34580E9F +D2D9939D2E18753A313CEFE1C6C4EC368E199D5569DAC78B62B967E2A01537E9 +6288410DADE218305D5FDC8B96F258964BEA24E3FFC3C092F7FF5A8ED7005939 +CBD7594BFACAECA3A650BB2D2BB41A9146C83BDF84CD8349989B0B7C46264EEE +B0AB0F2EA1D9911B68E9709D2AA3772094EF0A8774A4ED4B93B45EC22B6D8616 +66D1CB9EA64AE4500209113975CBE220A83B6C74EDDAC5FBC11190A44223611E +C2829BD6E3443F5938C20761F9B1EDF84D060FE45B20C86C3CCB8C7B83D74235 +598FADECA175DD7AC9C301C875DDB055AA7950C93DE8D7016A3D5D2BE2A0CF82 +94AF5DFFD81BB8E7A8B0664EF4426A765AD48C168965DBBCB4A5292E99E329E4 +3B68419B564858738F4419D2AC492DA601D7D4FB8082F16E104F507B503BF9CB +7F40A15D1D6B1BCF03D5630E16249ABE6DF0EDDB568CC19FD9F785F3F7417334 +8738B91915C553906EE1B378AFA358CFD6FA3C815F4EF44DD5BA6D26C6E17CEA +0A29B307C857D5D2CD8C3E506660D7950B82F1DE12E141F4740DE728900709C0 +696AF057305E6670C23DA0BBA5C64A111206219FF2C1CF6FE7B0EF257D5D99AB +C60AEC3AED73831760CC5D22E74727BFCBFE6810EDF4F48AB39121A82DD5821F +DE6F8A10AA6CDECFE7D4BD8E2388631D5941C5DA0F61640103E5C68F6CC413A8 +EAA7D2419F2B6A643E8F9A95F66A1ACBCAFCC7443F4E01B62320EE7DE0689EF6 +B8397698925233490BC6C4B90243E9A72770FC68CBD3854821DF66B785087743 +9058E6DE7D1D932ED00A1AB57D21067A5411DD097EB0065B1EABEB209C5B69BE +87F33EA9E280B71D4B8C8CB8C99123B8282AB57848A99699402FFF93B755ACEA +DC15E0383422646F3F80BA0698A6A51AB1A28169E38340B303950B69B881030B +1EF221BD8E44BB2549234CABFC545DE97DCBF12F75655BC523A2371D5E680BBB +82CC1D799C451E8B3C8AFF0AE63EE353520A2EAF5C4E815352BB98ED6162F08F +E2EBE7F408BECA380891A40FE3691F984D498935B11F7F295E98A256E77BD0BB +4492D8CE904D9CFF530B5A26D14A0B49DEDFA9B19DD80FFE4A56CCF3AC87C651 +FBE675846EE0A998B2BA26234849C4F95B0C5DC2D3E84A26961B1175928BCF7A +730B085C42FEB713C58A2E335CCCA1A5DA7A88F6E2BB015961C14848F61AB3DC +DA874008FE811F38B13959D227AE5B3E358F1D2BB8E2D7FEC13DF0CC79DB6D25 +5C7BC76C29CF9A0F688A0ADCF3D902FB7E9269837D1C59976F19012919F67E3A +6094482E0EB91FA4B137FE4F07CBE4557F414E60EF225666F9648AC754A28E43 +629F1F070299834C1309BC28F0659B8FA58C133F403D61BAFE7F40B6E31D6C83 +EB980B5AD4CE3F01D8547DA7FE177C1D230480F771183B302FF5C3683FC2F628 +8A9E6E5DC9C029E7957CFAB8C1C9C4B2B604812854153C683618749FBDD5FB05 +3F743A4FB268B84ACF1D9ED1283A7DB64A31B78636B4574B8A473679C3A881AC +F7858416D29D3EDB3C2A62604C0A666188BF9287118F092485FF10AC343C31B7 +66C761AE8DF4634B448201A9DB85B0BF06A2E8BE1A762ED37127DF2245084B93 +FB078BC50ABD8980CEE021547ECEC6751B2295819D5F39BC3B210560C383D887 +A4B179D0ECE8C1AC8E0A2F97DF032D1EE28F3C835D7BFA2DB9AEE349E65B73D9 +3C9A367A6C655174DC8180663D37E19C6B5C44031067CCBC577B786828DBB23A +C076FD672CD32D1AED09BF9F38834E6B16F1BDA5A34F063C64AB8EB8864E7D5F +C74EE517DC915F0C77A2DD5923A50AD8A4DC39344635AED890A5DF3E461AEE3F +E362DA67E73CD14B200DF449FBF2D92C27FAF4B895C45F370C93AF5F429A4303 +4CD0D65D1FB3EC103BB5A48C04D675928B6FCE127AB32BF205F2EDAC29B327FF +A10489744E27D249753E5661634753915059E6E2702C2F58905DE3AFCF2D4272 +9BA4DA3E6781EC67AA39B77B6DDE3968AFCAF99554580AF408293DD5CA032713 +CA5B5D28AA46606E627F53F27628FA563C4759D84697781600DE99D895B402BA +870E5427BCD0FC02B9090770CD84BC9061B76A051F6CB4921990A0DB13C2E333 +8CA0E378EBF8E9E507E22979D9B694FEC20378CBC11560FADFE040DA63FA4E56 +9D7D12D7005DFFB82D17C87C9EF63CFBA5CA887B88BDAD23B4816CDF4BAEA528 +E269CE1DB32E79840D3569ECF356984326C1E4B7C20B268FE955E9BD3884EE01 +4BD7CD21031F7623DBE183EEF39AED664EE4A94156DD0887D85F19A27C90B834 +4FC4FEC2F39029872023186B6CFCBFE065D9ED6B332D63847E5EA8DC91C8C668 +2026FAD8E24C00B2AED44466AF5BFD3FF9255EB05F7CDD90826D88D6830BE8CF +2AD621CBC121437726CFCE345418CAE44DE21AA3711E4F9DF7AB331C5B074BF7 +3FD41C21F642266E799450F7D0EBA2DBCCB9D9DF3F331602FE0FC18225BAB14E +26D1A7E72290E42B39172B949F58258D96DC335CAE79C3B583BEAF9F36AF6DE1 +67213D403790B505E753A10C277A6FAAD5327B738517D57BC130A486BC8B4746 +1D46DED8FDDB9C917B1E8D1D6E4DE551B412DBA2FFC1E35473DF49D9CBB20666 +9ED63C06DD802CA9A81BA3631F1CD8671744267037EEF17A82CF746591C63A7E +8BA5F822B443BFEEF8BB6C0717AE87D880BAD61A1A478FFF5883C463DD83CA43 +793AE5C407FA4C66A56592862EA0F626822AA8AADC651E6010A652477E63AC80 +0F32336858B94F8D40E9F9FCAC69E8813C76B5491F4CA8B291CE1E7BCD138383 +E02AE5A5C8A8B13569D813A947CC46F321029906C5DEED777724A1B34A684E60 +90F8205B446B5D744D622DE3632F31DA8EA4E412D8E65E45FF964A545CB8CB3E +654A99A1C4E6CBB8D8C61961403D12CF6BD20E99765BB5E239E8357620DA54B2 +61BC00063389228BCB59EE9565B3BB99F1AAF30D296DF5D34D86B543B41308FC +B5E55F4B0DCB6D3D5D5A027BA1E23566997C78B477E67F00A57F67414ACF113C +877AE58946253165E92084BDAA4D40250ECA51BCBD9EBFF9EBFD6369DFF081A2 +2DE96084D718C88C6DF2D167C11805CC839C7CC393C052FD4959399A9B4330EB +88CC19F2B480CF088E338708B643279D35D68C3679A6EC577997A54FEE8086D4 +94BA562BF63777FCE8EA4E0E59068A8433EF8B64BF8ED59CCE16B7916D9F1E57 +322E144D245577C69E99E84DF2367B1865CA3B5FAA34F4B00D059D09FDAF9EE6 +F57C0D4F73F17D9136F873F1A8A7D2880E7319B3188CDF8451B66E5D08E20BAE +C106696379B76C44832F51B7BFA28572850DC31EA2512E1BC3888224F96A75A0 +8B7738C1B2981A3B89D8D5ED4B7F6C3F6995C893D6C174F4E3A38268228FEDFA +A72E14856DA96125C4217DF38DA9DED696C4D62DBF37FA9FC1466A31047A6223 +DDA2F118E90B180B45D0A6D20EB1BEF9FF0C561BA1D870A01349AC1E42A6E9BE +FDA106D48928D65EC46F2CCE64D61019ECF22E75F743E9E1D0FE98FBF5729A93 +86D9AE0309816B8C5DF3E9698D51BED760CC637FDD3D8516E36B036E7D784D69 +E3512F9AD76F7C3BFC32CE40EAF7C0B7A0B1729E986790DEBD13E2DEADF92C41 +528C9DD1E835CF18CB8489B4CAB7E105CE9D16CE645599199F1D2A58BA2AFF59 +AECDF574F7C2944699ED630718FEF049139CA3F4ED5C0C5702A0DBBFAD074AC1 +78C70DD53C12EC599A5F1B2AEE886DC46426B8A21E059D78AA51E4AB57F8B4CE +5CEEB784C7FF980C36B2DE62BCFF37CF378A7017D8144AB88CCE45F3A07680B8 +32101BC312A020F621AAFC524C5F86BBC48BCF4F7C81B4B2E82CF585F06F2481 +2F8EA6A1BC2D580617140EFBC6B8F7EB7D7E323A27BE3D5AD599C6BEFBB2CDA4 +3BA86E0E16D7264833827DD01E7B4FFE6EE2454820E939066B988DD2345D97E1 +88ED2DE120992C40A3A5A073C1371662E3DE05CEAB8B438E47057EC5139AE5F9 +7CC2A859CEE5F0EB7F062946327FDC5BA33A7E1358142DC5E7B5476BD1AA7AD0 +1C024E313D070A8D7A3D62FB6B64A5FD562263B79BC832D87C60489FA0A2C4A8 +BAC86DFB78D38A6EDDB47D21A596969093A36BF8185535D3D5C987160188B6D0 +5719D2FB8C8F0F76A5A0A8562E34E7A4543863874E81CDEE68C57068734270B3 +EA9FEC6514B36D5F2484079464CAAC1E8BC82B9708E7355FA8F78C9271ED294E +146EDCF66FA86CDD1D47D5590B633CDAAC3E559609D270BB7CEB794F48B5DDDB +EF716CDDD85A9E39CC640E1232BA4E057518B0876B3491AB21CBD1ED1BF51F0E +5B171D6DEB1A7C292F2FAA36E3AAE7C21548BA6A5D681407613CE614A81AB209 +198C5F7A36F2EE329A3B3BC98B1DC8A8D30EED1D7D0F62D187225BB3224247FD +67EDFA0A6C417B3411533CA4B6BC54FACFA7D4D8377647AF0C9D562080BA8221 +B1371213B8B1E28C69C6DDB4448B8A5FED0F15656FC6A229715BF71EEDDCCE88 +146243275714C6C27476BB6AF2DDF878F223318B1ECDC0B8FC4D1010C1299A14 +83169C33DB33166F1BBBA3197AEF05A8600891D61947E919A0002297CFABF727 +0204E391480B6C4ECDFB94567478AE392F34CFA124CD2D2637ECD95197F371F4 +92CC9A34BE0FC2EC3E7A05E25D1D76157E0F59734C3969EEE34E164C7BA3829D +EB3404CA60DEDA0EB05C66D78234729EFDC442BCB0878530CAA0B8EFFF57F74B +9D3F8361A24E3ACEC3A1AC34766ED8C043B6FB579E873758C501F81939E79C76 +BA612E0F349E8DC891303776A7702C082D91CB23D2F77E08FB2EC60EE73070C6 +4E033D300A5D26F59C51241BDBBEE8DD113EE54CF6DB8642063EB84ED1CFE531 +D9E90C0A972CFA4674937455B30ED726FB98C786CBFE0CEC95EB60D2AA279F64 +C723DBDD83BFFC077DB57F399F2C6731145390B4DAFBAB65A25E0B41E617C71F +9ADD86B4CC8312E8AEC23ADF1096031DF225F59D890AB7AD5DA0CC8EFE1BC2E1 +A5360CD6799FA342B89290EA741B84A37CA3D64297C8DC6B5ADC401329873763 +E227DD032DBF2164DD14408EB89FE313988FD9335BFF72AE9A5982ADFEE44A08 +D75DD38EB950C579CB6BA4B381FC43354CD9FDCB691C413BA246F07E81764507 +E20F37B02E320E2E086179CC60350B236E249FF196DAFB94242CA7FDA746228E +1EB82BDB89AE60C453081FC2D1D9E546376F4464E9AEFF63E8CB8D6B47A4D499 +6BB3A0A8744679D7D1C05AE44E98D7325A6402228B87AA3A410367E956D24807 +07581F6AD7932EB450EB16449E1A40E7F250A989FEC92E27AC6AF78826FA6885 +ADC87FD6C0697F41BA2C7C79D777B344037BACB220B1A9A657030A5965E025A1 +F953185214804459E96A586BACC62FBEF3CE5954EF1C61467F5514ACE043D448 +5D038438250F1B85463F8A324962144F9D7E1C328816994DD3A9B31231871091 +5552844DF707EFC3F81FDF4169CEC3A1C38E24FF0F0AFACDFEFE7F745CAAEDE4 +04A092E5809AC0EA02C3F06E384B0FD60AF369F9A9EA85667035DF87C5858BF1 +603E9A419D4D8DB73AEF26F7AD52E9E394557E1B2B257F0DF026A431A192ADAD +00BD4836B2C8B54D646E8EF9E52B0FB19C4FA322409D09BF167CAC5ED3A82A48 +C8FF640CFE6D091EB6032DDCBC50F9A593B5FEF9976C67CCF409F64207FBA557 +77340CDBCA6F7380B9E2B3243FE805C4B69A3BA2FE1830139F10A403CAAA7ED0 +BF5386C7D3BC998BCA4ACD968401DF751A7EE9492A690BF0D521932FB4E63761 +DB383CDC362D8E5A563BDC4BD8D2A1DB5D900B8FDFB5329CFB85603967C42502 +0947B3FAA5AB0A96FB08A464817136A4F5BF988080CC0085CEB42879D650466E +1B972B717B18D5CDD21AE47FA495641374CD156A4F726A291D4E7C5CBC042DD6 +3D119BBA7E7163F6AFCDAA9AF22A83569D2FD35969143D992570D905A90F247B +475E253081579D0B75467A329E5B5F124DDCB602D34D12D72ABEB65E41C5C919 +BB9B1638E41165C33D20797C3755AD71F53FBB70A0FCA76D52B33097C3ADD50C +7CE5AEECB9C3378538FCA2D0C5928150FCAD751DE3611F9E84ED2A0C6DFE70FC +4AE33F879129C961929BAB02BE32CF4070F8F4F0BB0158834FB0C605A3CF5490 +4BED0B1E98A2FC5399924C4D554E41E74CB58A21200E6DD2AA0A734679EACF7B +97D1030EECA997D2371712690F8D8CFC9A4EBCBFFBB9F4E4BFD790A0F961B95B +700A2877241797ADB1CEF48AE70DE669C8A8E990F7EF38F24C269734C4E230CC +FA6B080559B635F5D5F78972786469291A062617CC8919F2C8CE94845E955DE1 +F668AAE68051854B3766B7D14962EA3C322845BCD8A00341B20A2A6A90A77DE3 +EB2757A5DF3D6292033C869AFBF5E58F4E4C0819504B93F88E6F116F39200A19 +FBF1236080BF69C9F77C53413323BC8250901D87175E2402926C33726D68FF1F +AC4C38FB4CF0EC80BF1147AEC15B05F580E4C51B2F5F01EAAF8095B02DECB458 +C2B6D8D951BB2E7DE70C31E4FA5A4FDE49AE7E89DD82B217D6579A00EFCBBA91 +14E991022833D0DF8CF05A1BD852C1879779176564B121F6FC64A795666A8920 +24DB2D57D0AC1341F032403EB030CA99BBB31BF216A87FCDD7282C4497A99AF1 +EF9E7DA614FDE80B811D62C995F5178588FFA0DE8C76E18CA223BE296CED4016 +A8B92C2C727C4E5AEC2F0C56E1D4E004FC3414502FD82A29EB4B87D8FEB92155 +F56C4C27BC1EECDDDF5F224F935CC45D2509E4AF6227C89C20C250F7C823911F +0E1CF6B31C793BAE12A61A6BF5C8DAA299201D9514267D54A2D201E4257AFD7A +8BC070BABCBA91F449CB6F546A92F87ACE058EC39AA84EBFD8FAD238EBCE0D63 +0007EB216406BA29C84FD6B9385577D04222C305114F3B59C186604F67C5AC8F +4546B1B55348E1E2CE449D3A28562FE514F36A77F66A71CA91EED86EADEED4D1 +07F36C67AB83B0BC344FB9DF4960D11FE02EECDBB829B0F2AF39FC9D02E75C5C +5D3C1BE00FD913F35AB9B9F693E7C9BE6B315B35D035585ACA19CF2C7CCAE105 +349E30AA4F57A63149D9262028C53EB8129E0F15EDCC7CFC2CDB5FC190B1010D +9F198949F56402888E3C7892E48408B34D9EE3E9418CFF92B8418498297E2449 +E7F92E983348CB30D76BDAA84DD2797D822D6F26A582F8A338B9D4D370581CDD +34D0D334CA8D7616E448C86374B65CC0131010CEF730785F3DD5ED2E26F27011 +CCC7B554FEDB02B6DEDF48CE76591CC110C65FC5CC72E7272FF63F07516AFE39 +11202DC05097DEDBE384E8DAAA2F2A422565FF426715A849EC159220C8CEBF65 +1E4FDE87CED9414AE86D6D2066F8CE0AFD31FE5A839EAF3092C2974FA170835C +31E8F1883E82EDF30AA1BD6AE0C5FD22DB9B1A53F27E404E2B8595E241843B95 +A9B16F40CAE8F8712E1BEC901165E4B64AABEAA93A544682298C5703620E42E5 +F8536D0DACD0274B1B13805CDC0ACFD5A242AACF29B8881EAF29780B65CFD8EE +21524F3F845BE6D7E8D5CF594B0B15C50A9B5A2620907241DF6100DF4AD96AE1 +9BF9254162CA6386079FB93F1F88A94BCFD6E47B1CA020129EA7F34E9A261581 +615C23C8D52AFA37AF575417C814E74D56F08AB575D44B2D0C17274BAA5611BB +8C61D49D7BA9343D8998110796E4E060523BB6B22F1D5DEA9CF8620D29A5CEF8 +5EDC173ED7142A121F0E472BDFDB29E721A825FEC5013E8794B8D132E994D583 +412370CCA2DCB10E3A5B49778AA5B4489AAC9918D4658F0E43F10558EC41D454 +FF56C8261842EB93FF326EE3856FD0A25AEDC72CF966CF6FF46383C39C44836A +22485CE993E3A0578466FC77106CCD2195126567E11E54EFFEAF8F40BC0D1B97 +634F8C121D9B62648DD61752005891596F40EFCF13A2276A4C187CB66F0B7949 +BE95486034B3E66445AEB24A084F8E535C754892FFC156AF7EA8315A1997D3D3 +FDAB4CD7C426F839FCC9BF4506C3A9430F6963AA8215E44D86ACEF423291375F +F6242DDF87980A9A5E55DFB668C74F123656CB625E5E335D2CE989FDBB269F18 +432F91A9E4D62B32E6B9BC8AB5CA32649C98597DDCDE2F343AD7E61F0F54A21B +449DCD1FECBA7CCFFFB5B2090D90251DF0E92CFF6FCB89B5A4FE39F78E9B817B +90FC9CCC283011B96319FA61E5C1BB9E2A633CB9BC346D08ECB3AEC5A4E36A75 +CF8843027E2B411B4410B5C06F3B83A37442D06B4BA57316A7C9DA5956B0AEB1 +C7A221C939DFB559CF0FD174C3E9D917DAAEF97391558C48DD1BB7992B14A8AE +55B1CFB6678C44305C03297D61D45A23A162A71873ACC77FDE7501DEEA302144 +11A8EC2224408B7B4159154C4B1CDE75D5A80FEC50C1E123B6E0ABB523B90F07 +91E363150E451670DF047132CB503719485BA8058750DF7E7961AC02B84FC89E +B8D57BCC582C6D9754CB90691F65EA57AE3D8A7F61B70AB95FD6C05B0E0D107C +7560C1C8AC53A0C5588A14412A264BD84DF2A164B1BC8CA599C58A8C581DF0CD +C9B9719A9CB243B95A41402C29F2F56C71D253FC699BBDC4F2D2FAEAC42AFA75 +DB38A8EE0398BFAB528832A80D3ED42E9E3F3375F7DA493A936EAD1162DB55F8 +79F31A554D8BF98B5E1CD6F1ED1FF319B61F5743E24FD64F42873E0BAAE0754D +13634CDB4BB284979BA95CA517BCD14F2BC5B7ADF3C105B5FEC0C9A9FC25D662 +0237C84F75CD28D122E5BA85BAC7CD5D8A520DF718AF068A62E2B9D20DFD2E16 +B9DB0234564337ED27C69DE8881A6493AF8FDBB5920CCE09D5C1FB480540C2F1 +980A6D87A4105B168D570BF0CB65E2E03860C838011393C9AF6F6D688FC52770 +EA668A2F714A1F61F77AE35A1F55FF065B799C1028ED8A5E0111581FB14E3CD6 +BE1A98601BDB8B3AB76C58D31A1EC0C72EB5965CA5ACE2E42C73DD7DF21F82D0 +1A3331DFA06E332B68858574FE9CAD3E3D720C17A2D92C53EEE6B58B230316A7 +5AA30C60CC672E473ED311E7D38C4EE2809C29F2E76EA3F5A474E6AEBA84862E +7BD677B6D9AB0C2B501BD929354DF6A3CBA66FE0FCA49EDDD22D6E660085C421 +533D735684BA3BDA798AB2CF9E8523B16389BD242E0D19953D83FEEEA8ACB5CE +5EAA4BD530D3F8C8CD72D3EF90DC038E2307A58D51800A5F9C62025039CCA4D3 +07DA0A0A0263FCB71E20C9DDC7F26718A2D1B5882C7BBDD3244701B62D890C48 +5FAF33407E9A5E4EA5D1C6910815BEECBC69FDD837E51154E84FF784896EF91E +DC45F60F9C2FB8C376B5728C7EA835A807DA811A64C3F8C7043FCECD580B0B02 +F0E23F84CF6335F261F030FB1CEA8C261EB1934C750B34039A5799356B79F65B +1CA31F02BE58D8AA229FD20CDD1BDFCF6199B6C5B9FF6D63C3585D3475C58E79 +8FCC21AFEDD5D5CB5ACC9B0F6AE689BEA23DD30F02858CA6806DB4248C837B60 +09D96D24C0E2CD5F4CD2ED50E60D03CC760D996B108017B26563E5E8FB203D96 +15FA47459C2CCF99556D0F91E5E6DE0051FB6914EA99F0016627491BA5176383 +AA37E3A49B58E488F1D6D37CE2EDA15AC652164007171D4BB2E1EC06F7ED225D +71AD96534DC26F8E167179AF8714137383561BD7EC9C5F8ABB64C334F1AF280C +4E70CA3751C2ABF7FBA2821B286A9F6DDA9E769646D5878F8860F02B8FABA6CC +A82EADF9A45A30889AD551894A018B81093344C6CB0D59D09D6DFE91112DFC9B +5F0387D8727D1963415748D482FDD5AFB001FC249FF5B02DCE1D62F011E553B2 +E767E48A1CAB27FA0237E35464C55CBC199F7596FC2F60BD9D853D825498D381 +D52C5FECDED23525AE02234F8AB609EB0339B06A46BE7AD7DC67A08FFF568B3F +25C071294F839F96C2AE03BC57DCE13855AD7400D7BE881DC5E34720F408DD31 +B6B5A33E2BE89889F0F5868C71602B086EFF8DA6554640A822B59D547C1DA709 +E29964B2E321E2E803684C8E5D64384228714509E618BFFCE97B1298203E144E +FD4E16F8C2B37AD390CA7A59E3ABDD281B2B41738C96478DEFF7DFDF45BD60B4 +BFF2C7E57027AD51112808DF8E36F0423391C8328E17AE3D71B3EA2958720539 +5182BF85FB826E5119E4D56BD5C0100647B190B3F2F671012AC37165C85962B6 +E1679413DE6F824482AACAE6301C9311BBCE073B1349BE7A287D9B6486A683C4 +4D4C541CF4667B55EC959511E0FB0DD4BFDE5F7F71341598CDD86CFD646C22C1 +A2919208944AA9C75A62F1DEF2AB80DF12023564EEF49D56B0D6D05FE2757BA8 +66F35AB485083ABE685486B81B68082FFE98C89CF09D0171A1FD0CB866E94AAF +AEEEC73F2AADC9F1B1ACD6545BCDA0CE039891B541FC674F2D6831ABFFF143A6 +8CBB10ACE99ADAC14E99ACDA73CF808B10E87B42DF4AE186BA18FBF828D0BC09 +A4A1C10FE4C47233B57CAB00B6EDD73A38F345609EA860C884E22597A1AF21A2 +4EEA28727C1A92FEF237B84507B38CAA4C66BF72CB2CF1C7F94562029B286AAD +BF01AB7FFA13A1E0D33494802667C5A3EEF5D51BE02AC508A997B5F09B747089 +2D7C3145EE5A9E7C15DB5AEC8304FB776F15122DF7B939265D4FCC43488EB42B +699CE8F68E943B035FA1F378E5621BCC00C810163737632CAB6826161D90448F +3403C32EB1B52D7FB65149EED419A765D56A05FE6A2706D998DBC84125D617A3 +37351C9C547ABB6F1AB4FADEA5A265AF4D9B45BEC4147B6CC5110251A426350E +60F3172C40805292170B850FB347DD98793AFB38E475AD2BF38F8628987E3F50 +651114D1527F030ADA4D61944E677977BB8EEE0C1EF98679246CB1D43403311F +5F09BCB30445487F82ED268577F22479EFE87DD0022D42D3328990B88601C3A0 +D5A8389C4578C3DA01F653EEF9EB5D83A98A6939320FCD6F5B6A5A60FADBBCD7 +E5A7DE5A95D1CC7DCF5A051C652B767FCBC59D61AB9FB5141F393F2028879995 +4AB737BD26D81232CA8D64DAFF989F878537C305BB5C09889235BE3727BDEE32 +EC5A4D06A68746CA33CCED3F1D456DFF0118E993C802AF0C3136FDA8B93BC16C +E22A5C124972517594A82850CDC000F6505A7C5AE9E75800EFEC3815C130EE25 +547A326325271049D9B178E23FC5FDE8880CDA9C903EB4B8A44F85620465FF4A +D097A6D89A8B644E7D9944E180A3E1EC6D2581715EADFBF3C2BE3B330B1D208F +B84C4B98E999C5684E9843E6AA2F932D1813DAF4931D12AF17FD2CB2387751D2 +5D14CEA4C66C48C7E6FD61BA6D09E591188E7CFC0F5C306672481FC77B5C6D84 +F589673C4F4EE90E2D3D1345196A10907A22585E7D55A9620FD7D191956DF340 +4C98AB5A8A3D98798F2581D409FBACC2419A031666DC9967DD10A1A565A98672 +BDCDD345FCEC9BC08698949C887E90EAF94B7CB450A9C45FCCF289DEF3380309 +D7644EF509BCFF5628ED51E056FD7848A2A36E30551E13B2A2921AE2028B2C4D +902F7C901BC54F945AA1AA018EBA00AB9A2FB36159147C74880C06A26092B54C +D3E6DD432A3507FA11384F0C08C68942C26ADD98DBE948D854199B19B0421687 +7FC55F9284AF035C5C9DB4269FE72FB251030F9A5A31A75FBBB0DBB1151EC785 +08F8CD88D6FD5A700AC0F6E0F37536C2F1228052846C3ADF9DDB7D56A57F19C1 +B8382EB996D8FECE8F8B130B89037F9FD4D58426049F99B840F337BE6A9427DE +B68BA69B32A301263F8881F35332FF35ED6BC15FBD4A8915C8CC37839BE3944E +A15701B8FABC6D533FF5D8C96B1D599DF7E2738996520A0702307E3C91A476E5 +C76AA881695D7400238B4EDC669BE334B84A66B9427432A3AB970D55A899DFCC +81F7C68D637F77121B75C0D6C073CD14A7311799CAD07684A5C0F662CB10CF9B +FDC4CB98B6E7892BFE731360E35AD6008F8154E419FE86FCAB0264173127B1C7 +92D6DAC832571CB2771F9EBF2486F61FBA0D94DBF0795D5653EDBA2F7441B683 +C3E77B314D02C049282E7B749B80C326DE8DA52D632A1A9C3C84198785161129 +D527239F456F6FA14CC264ACA06DCDF408278CF105A3786073709E365A85BBA4 +74A20C47CF495A0913CE079F33B71BAAE3928C18D59B2DB6A38E54EAD9FB87B4 +EA6D147D264E48E665A4DFB466A948811DE66770B0774C80BC2C54EB7452017A +52AC312508C6FB6A4DE3570A3DF50EB00540003382B91E06067A3D11E1DDC023 +5EF8787F1F1015152BE7F3D5F88EDE778E946768E4E333288F4DE66D604822A7 +5F2D5069B6CAB613145652E07F608A093645EB6DA6A9B231EB5EB31C097354B4 +AF54E8AF3455011E51ECC74FEB9847FEE3C42DB441DC3E39DC1650E80BB2D530 +823B1246699B391341E7D7BBE42DE15092EE2FACECE3B8290FBFE4567E4E3B09 +973088770EC250F55AB5FB3E7ECC7537909622252E7967AE84368FE204800BC5 +6C51A8DBB2DF121FD04225015DB5A39A1D6241C9874215D115A58D8329E752B4 +D5CE3B1BE30D1703A044BA14B6C71F406733E771E8F9FC662C6DDEE86BAB4F68 +DAFB63D8870938C3149CC07F6660AEC0296885F64905B8BC82B317DE4DD729C9 +5989533686291EE980EA2470794FB3DEBEBE9E41F9BD793CE4DE37D9821D44EF +803651668599D59FA7D44526F67C73C954BBB28BB25BF8606340755D02B23C42 +094CEF3CD30B04B9AE08FCDAC339FC1A9DD2008B0FF3C1F68C328541FDE6FBA9 +98DE24C4C3B3FC7D3B0D86FE89B6716E57BF46CB201F6A5EF73F05444D024D34 +639BA30B6D6F1A25D7CDB89D79FFD826663A3DCE5E9F4C72F06DD6C32A34CD22 +A7A1B7E3CD27707F4F09EAF284ACB3D960A530D4932D08028CFEB3AFC2D59170 +730ECD5D19B4D23108944CB7649AB0F1F3C286863A6A34A964A879D63CE05F1D +FC11C5B69374F1993DCCFFC99D0E597C3BC99DE67E5059FF0672F79938F4CC4E +4C66D6DCB0239444F2E614D09692297C7329411AA1CD5A540F9D61EBE2AF8B58 +DF46F4065672539C326B50BA1CB54DE5603D0799534ED0BE40AD5C72B4EBEF40 +A5EEBD414F1639AB6C955557FF9BAA0B62DBD32895B0DE12FDB66694F3CABABD +7D54F0B29F8EA32CE746B652CC9E44EA64C3F8847053D8E50CE044C990A7BA13 +7B1B0F4B2FA68D08A82C30E800F8B26CC84495B222ABB5E41824953315CE7F22 +6D8FB5AA10A3EAE16A1B5BA8A283854C5A1735D5F628DB64C8DA6E51C727EA1E +C3CF188BBE2473E9112529AA6A8DA151DBABCC26973531DD69B4A14D9783FF33 +FCD1672B629CD4DAB4EF573DFE9C3BC550C446A34940BE4437F43CCD16CFA3C0 +537ECBB7DCE1E76D9FCC2EA5E9E5656F7C7A3FE1611BA6A8AFF0667450A4A8CE +0706CDF854B4DEA79C5FC25A0556F44CA3593E89ED5881ECB5BB3EE6572F8F2D +4D31466C9AC2350898349C3208636F43D1EBF5BB2F01DCF827AD6C205F3B381F +800D5F4B827107AC881BD66BF5CEED3205535C8C3704A02614E6233344667C48 +570C4B5A3326D2F58A6111AC9B0CA7F3A48DEC898FD5AA05929492B8FF061E1C +990E08AADA5E9711658E30F71BA41A7806BEB51BE0949777E1550F54C66B8AFF +DF4129B42B71DE6101C57DAFA63FAA169145C0D6A0D6279658431E874C32250B +AB0B09056CF7A096E7E644B5B629F275194CB0CCEFC7A802F123A587156AB136 +513A7362EFC4C0EC330E11C3E25B9A943D2BDFDC1EA5C19DA64B47E690C2726A +0C0708F7A1DB146B80C6E8B4D30D28F6E8B7A7505EAC296258485AFF374652EF +ED73EFC04C6CFD28890F035DBB7A0CFCECE8AA68FA622390B782E595D4157106 +802499D76B0351617B5CDFF4F7F758DAD993DB5628B346240DF540E821144C5B +D7FAC2C00B22D8DD374C6FED26F619FF150AA2292A9D03AC7F5F6A20B3283890 +C80DB07E6923B6C485819A849BA8A3F18F7B4D309802AB3D489587721417A2DD +0B1A4D9994E3C611E3289465E657939EC06D752330EDD2D475E67F345C3527BF +0175182934D53176D5877D064F6FE1C1D559DC657E4C2CC83FB022A38E6E406F +E8F85B556F9A771F4DDA35AAE7C76DE0CCF5C2A9D9F4AC946C1A836553D792C3 +F2F8FEFF9A6D7DAB2FA5F0C9973FF8E3206680D96ACF9CAF54FB6274B99E3F9D +7E2B64C85EFDE220C15BF9F4AB5CB772197464078AE34FFEA9095DDBE6B0EFE7 +4AFCCEA58D12EB46648093EF927A8E600F0D4E239BCDDE8DD5AB6A651018E932 +746F18584378B3B4899B6E5E7B3C742835BBDE2D9271AA95E1E1C714F51B8D08 +562CFF8AC79F495578993955611AD98303AAD37FEA8CF9AF63543C1B4DC0281E +1269CECEAE77D660AB8800EAF547ADA30278345A189EB7CE9B03B936F3511496 +84E87A395C9012C66EE994141779E4282AE968FFC1E764C45751CCB23049BEED +069E6AC75A8CA8D115B4C269C8E6EB3047E0A17251D46D389F43809423BC2A8D +1730A54F8ED38019DDC4BC752539AA8FE9514EBC42F74FC8B50A850D09829810 +4CF7546878A85B8A9CCCFC866B5C30E1E5295E50D2E05F02B414B04830756970 +09BE8D4898B2CB6D2E95FA6890A620DD863B30C1EC77C08AFA711EF6C0D45878 +2E93BB6E2B4B44A5D24C55C22E6D58E4AE93A566B5545783E1B54B937D68BF21 +45A1CFA44CA87DBCEC8EF7A309015EB883D14BFD9DC89DF814697740C100B0E2 +1A5DD11DEE47681B153C4CFA026451660213253618E16F5C3B2D590363786BF0 +83E23B438E0FE85597F74C40611C5D3BB944108416AE0960432B8E59D8B64197 +81DAC51D615971E976768826B90CE2C563E498B8EE3A2D28546814F3D7E6DA78 +217C56ABD4CD323029CDB3C01B1885A9E12D5F92E773F31B50E2DC680708B37A +F234AB215B75DE93E7912E20DC4937EBE1208B476DD8BCF68F115B72FA76AF8B +B14AAC4AC7097D55B469262970369AC25526BDF3EFA81563066A37A4A71C19C2 +27611CF279C483B6C0CDE8B302C531E8F776CD557D91F348494088D6AC9CBD93 +7D0935EB5CE4C558247EFE669A39C56DC5F683337235E405BDB83CCAC1EA995A +7E437ADB4B9576683D8E6776830D570699D696B0C233BDA475B1909197F57B04 +92A0A6F9D72F4E8A56A71CC7F4729C06A5C4F9915FBA4857276A50D2A4B857D5 +3F20433EB0098D714E526D288CB0F36B88B989FF98EAA2AC2FD44DE6E0159E98 +341459E97C035442EE8974C465ED07924FE76933E6C6B2D0D632EFE2FDCEDF92 +6D1B58D9266F961916E0B21C7EDA8533638DE541728C38225C8EDBA3DF56D9DF +7CEE29D9EF955215974AB20AC024439A3730BA9227B1DBDABAA2D83443CC2F57 +21F0ADCFB8C2AF6FC327F9AB05C646C7BBFF81F3C3DAD7840CB477A2584695AC +45BA0AB785FF4C993900136B6139E4D26B5EABF1BF17A80C6370CC2BC3540A0E +4A4914C8F61A9608DE06BC8DABAB1492482AE665460981F4258B05E8F3A197C5 +30350BEA2DC89BA16224E570290845A6C7096C0C7707DAECFC85F9C853B8D65A +616E3323082033D542C13FCB10BCBDA0BA71445145A511641BD12B35AB5D8E74 +11D5EFEDE88EF9392103EC087932CF217CB44935FC6F99353CEC68F814950518 +EF919470486379FD02265F766244436BD290C65600D964044989C7F6A9672EF7 +803021A9E4AA6818125000EAE5F90D382AAE0908A26FC6083A90B88FEEC0746A +9F008C010CA98EEA7AAEA307037D2CA7200CA9BB68916CCAAB05E57FE7164A7D +C3D820303340D49EB29E6EF22A023F2D42D67A664F38C4FBDFC9A31A28A02145 +E38CC211BC73DF5F661EE9A3CAA076E43EB233583865289F66A7ACBE315AF81B +AFA2CFDE8A20549941EAE2E73E33BD0EB8D075F492724BC444FE8953F5F77B2B +4E7378CE552F79C360EEBA56B64CAA47DF10D14402EBEDFFF7069444AE3EBE3A +E96201E14EF892868F9AA982E738DCFE7E8DBE41C8F43A227EFC9EED795F5D6B +40D3A08D867F363232B20C71CF2E44B884A8CF28D96A028BE7C67DE00765793A +B1C867F0DF3E1D578D96428CF1E66632EB746C4B71314D5D009BEC8CA52A7518 +89B9255BDF988262A4BAF717FAB90525C81C223D4936F0AEE0E40908CC9E0DF3 +17AD71C0F5009CA00E1E6F8CD308501356235F63CB112C6760963857B6B20A94 +7FC16C899A7EA6743267F889D070698554DECE912C6052E04DF59FC85E67561B +3C7345EA3E21DB7206A14EAC4F46F457A83C1E2877B56EC49EF87B9B363F4B77 +BB6F51C3F1454325010AD71E28E935E74924A6ADA4A08C6C723276CBD4DA333E +C3590B7FB914E25828CEAC502704BB4C8C0C64395EED986F91D8C940D3F0ADEF +1F2749400B4D9A8BEA50CF4732DCBE21A6BA4DC17762BABC34DFA16EBF988574 +6B6363A6075CD4784CB799E35D29425D55AF001F51E565FCF4D18E98EF3C94C8 +5B88BC96A9157BED2529803EDE8E42BB57FD504764175EAED257D6E62CF9A17F +3E08727A38A0A43221BD62CBC2818ED5DDABD2E2FA6141D986229528AAEE7C73 +532A8D78FB8FDF433022F0EA43B63EEC52D3829E84AF010A2A19742296D91415 +42F9E632FFB3F0D8457AF426F0CA3B9A1D56DABD0537C9B5A9CA82E42A647CF9 +BA8D38F49445387AC896F16D85708BD8CE4BAA625EA09621EC17FD1A1377807E +DD68854483E84C181532D3B70680773CFE5D580712FD948F5D34354394D4E502 +6AD35AB042519E82177E06284CCAE4AF2C6D918FB32DFF205E9D9C88E31143FC +66DC0572961089CD0F2AD2EF82CF204E8AAB1F0122130232ACE276B134A9BB0E +91FF8020FBF69B32C93F1C10026F6B2E1D40796313D974E066BF799311595012 +59886A161B669C22EFD773802ED9321BE23DFC3240D170BE8499E1735623A130 +054EB5EC958884699867E3C94FFE49CBC9AD6C3C935E56C0712CDEB13BA92E2A +AA843CD9A30BA3C01ECC284DA4AEE6689A1A9E3D7D0F6A144C658F9441E730FC +24831893520FB7D2C69104E56D5D49DD6A86152C9BFE88F6166104AEF80B992D +406205CEA63C31A7B46D6B8C9A1782A0A0A30DD52066642554735406851F863B +BF981B4C8DC4882A03BCB160A06D18D72E61A49A23163BF92D091C35CEE0CB85 +04E3D95F3E98CBCC53B0015AD136FC481078ECF65B62EDD8EA3EF1B938119D10 +36D6D85412D1104BFAD6A4589C17B40EEEC5C3FC90933D9095B49A6956CF9F61 +E54384137A39A509200B0E51C1625CB599A91B287744677E059E6BA039B6146E +791EAE2676D2E233F2659C92A10D32A055935A193D4480B4E7069D3DDEEAC166 +1D24FE041BDD02D1A84CD43C43331AFE821B4ACC22F165DC53890D66606FA10C +B83E2BBA03C826B958FA79C31E081B5396297013A70E1FE82E76C8512402EAE6 +840E5943B19623473FF8F215D6332EC26D1DD0760142E4296287F98A30CB2A82 +8A639137E8BB018AE16F54FFB9100F533587B4812B5A7EBB0C2DD22D20F1B55B +D241DAA8614240F2B528CD48CD2F71496F181A94F181F7E85D07E4180CEFAB87 +57090401893BD680891ED7E7C9218409DD4995F3DF56E77F79CD06B9207328C1 +1427488F5876672E3806D8B8E0BB95AABA421B6629EA9A5A5FC811D43209610B +F729AA30565DC4C4A2CA67721FF1F87A4C4B26BBFB2B68766840DD148024FB21 +F2750EFD0F31FE624CAC5D606B6C14C15B1FD7D4DFF182F436399C19F22C9F57 +F243086E319BFFD7412871031E5226D494B41EB70093103C606ACD02F6B2737A +31C6DC7E3617F617471C37861161C799646C1CF8B60E9A5366C3A9EA785ADFE5 +2AA75D252775300DDF7F463E15FF6EAD513BC042837243F8514AF04586F5E451 +AEAA68E3C96574415497576D010A6D68148DE883083070DAD871E8F151C1C1F2 +2E82F50EEDEE298EE66699BADAA6677586F59AE3DA5038F513FDCFD7978B2829 +794271AD63CA26EA8970DCA4F32B57C09799C9B8D78BFBC50FD36A3F3F254799 +B313915C9640A27AF3530C68FA3053AEF80B2659AD152CAC44BEFDCA211EFD6B +1DC6A25A08183879CDB74DD95EE2779416C0B3EA306720FABA153F3BD94B0DC2 +A429050A7D6B7B5A54C2AF4F45194667C3CF2EC4014444717DC6C7100035C504 +216661A97B632FA32FC1E021AFB75B395ABF844C558122C416F3CAB82B4ED56F +15589E9F34CCB7C0C7F7B5FBBF48169105355F6EFF2F41A212C24A81BB9A466C +598B921E0CF721A525187BC75CB3B2DE6A94205517B2CAA504F351BA0DC5C26A +28CF5AC9DF3C81B888AA3C930DE00DA50DB0422A0D85A00C7E2AE3061E1E17DA +55B3E3C998466DB8337E81059214406CC58CC1C204EB3D435C50B52E14B91905 +CC33F6D9C78342EBDD3033EB6A8D41530105CDB05B2E67606A022D366284CEC8 +6BB9FF090261A42EDE521B2BD2D955050F3BD2EDE7976A68F17F889943C369FD +564CC15CC19D082B2EF4FDCB95E835A0CA799B4F8B68215006ECC332955837F1 +9118D86E07EA5D7815F66D3907EFAC1A2B76845B90B1D385EB08434B5DB96FC0 +59A97A94E4C21015EE22E04BA4A962F5ED4BF157A6 +0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark diff --git a/client/shared/lib/fonts/micro_40_50.qpf b/client/shared/lib/fonts/micro_40_50.qpf new file mode 100755 index 00000000..eae4a5bc Binary files /dev/null and b/client/shared/lib/fonts/micro_40_50.qpf differ diff --git a/client/shared/lib/fonts/unifont_160_50.qpf b/client/shared/lib/fonts/unifont_160_50.qpf new file mode 100755 index 00000000..2288575d Binary files /dev/null and b/client/shared/lib/fonts/unifont_160_50.qpf differ diff --git a/client/shared/lib/grub4dos/badgrub.exe b/client/shared/lib/grub4dos/badgrub.exe new file mode 100644 index 00000000..3cd26a61 Binary files /dev/null and b/client/shared/lib/grub4dos/badgrub.exe differ diff --git a/client/shared/lib/grub4dos/bootlace.com b/client/shared/lib/grub4dos/bootlace.com new file mode 100755 index 00000000..199831f6 Binary files /dev/null and b/client/shared/lib/grub4dos/bootlace.com differ diff --git a/client/shared/lib/grub4dos/config.sys b/client/shared/lib/grub4dos/config.sys new file mode 100644 index 00000000..9aa253ef --- /dev/null +++ b/client/shared/lib/grub4dos/config.sys @@ -0,0 +1,6 @@ +rem load grub.exe before emm386.exe +device=grub.exe --bypass --time-out=5 --config-file="color black/cyan yellow/cyan;timeout 60;default 0;title find and load NTLDR of Windows NT/2K/XP;find --set-root /ntldr;chainloader /ntldr;title find and load CMLDR, the Recovery Console of Windows NT/2K/XP;find --set-root /cmldr;chainloader /cmldr;write 0x7C03 0x63646D63;write 0x7C07 0x00736E6F;title find and load IO.SYS of Windows 9x/Me;find --set-root /io.sys;chainloader /io.sys;title floppy (fd0);chainloader (fd0)+1;rootnoverify (fd0);title find and boot Linux with menu.lst already installed;find --set-root /sbin/init;configfile /boot/grub/menu.lst;title find and boot Mandriva with menu.lst already installed;find --set-root /etc/mandriva-release;configfile /boot/grub/menu.lst;title back to dos;quit;title commandline;commandline;title reboot;reboot;title halt;halt;" + +device=c:\windows\himem.sys +device=c:\windows\emm386.exe + diff --git a/client/shared/lib/grub4dos/default b/client/shared/lib/grub4dos/default new file mode 100644 index 00000000..689c3c8b --- /dev/null +++ b/client/shared/lib/grub4dos/default @@ -0,0 +1,46 @@ + +# +# +# +# +# +# +# +# +# +# +# !!!!!!! The file size is 2048 bytes. Don't change the file size !!!!!!! +# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# WARNING: If you want to edit this file directly, do not remove any line +# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# WARNING: If you want to edit this file directly, do not remove any line +# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# WARNING: If you want to edit this file directly, do not remove any line +# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# WARNING: If you want to edit this file directly, do not remove any line +# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# WARNING: If you want to edit this file directly, do not remove any line +# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# WARNING: If you want to edit this file directly, do not remove any line +# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# WARNING: If you want to edit this file directly, do not remove any line +# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# WARNING: If you want to edit this file directly, do not remove any line +# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# WARNING: If you want to edit this file directly, do not remove any line +# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# WARNING: If you want to edit this file directly, do not remove any line +# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX +# XXXXXXXXXXXXXXXXXXXXX +# !!!!!!! The file size is 2048 bytes. Don't change the file size !!!!!!! +# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX diff --git a/client/shared/lib/grub4dos/grldr b/client/shared/lib/grub4dos/grldr new file mode 100644 index 00000000..a31e27bd Binary files /dev/null and b/client/shared/lib/grub4dos/grldr differ diff --git a/client/shared/lib/grub4dos/grldr.mbr b/client/shared/lib/grub4dos/grldr.mbr new file mode 100644 index 00000000..6130129d Binary files /dev/null and b/client/shared/lib/grub4dos/grldr.mbr differ diff --git a/client/shared/lib/grub4dos/grub.exe b/client/shared/lib/grub4dos/grub.exe new file mode 100644 index 00000000..8df2433f Binary files /dev/null and b/client/shared/lib/grub4dos/grub.exe differ diff --git a/client/shared/lib/grub4dos/grub.pif b/client/shared/lib/grub4dos/grub.pif new file mode 100644 index 00000000..28b43805 Binary files /dev/null and b/client/shared/lib/grub4dos/grub.pif differ diff --git a/client/shared/lib/grub4dos/hmload.com b/client/shared/lib/grub4dos/hmload.com new file mode 100644 index 00000000..04c794c3 Binary files /dev/null and b/client/shared/lib/grub4dos/hmload.com differ diff --git a/client/shared/lib/grub4dos/menu.lst b/client/shared/lib/grub4dos/menu.lst new file mode 100644 index 00000000..e7641534 --- /dev/null +++ b/client/shared/lib/grub4dos/menu.lst @@ -0,0 +1,83 @@ +# This is a sample menu.lst file. You should make some changes to it. +# The old install method of booting via the stage-files has been removed. +# Please install GRLDR boot strap code to MBR with the bootlace.com +# utility under DOS/Win9x or Linux. + +color black/cyan yellow/cyan +timeout 30 +default /default + +title find and load NTLDR of Windows NT/2K/XP +fallback 1 +find --set-root /ntldr +chainloader /ntldr +savedefault --wait=2 + +title find and load CMLDR, the Recovery Console of Windows NT/2K/XP +fallback 2 +find --set-root /cmldr +chainloader /cmldr +##################################################################### +# write string "cmdcons" to memory 0000:7C03 in 2 steps: +##################################################################### +# step 1. Write 4 chars "cmdc" at 0000:7C03 +write 0x7C03 0x63646D63 +# step 2. Write 3 chars "ons" and an ending null at 0000:7C07 +write 0x7C07 0x00736E6F +savedefault --wait=2 + +title find and load IO.SYS of Windows 9x/Me +fallback 3 +find --set-root /io.sys +chainloader /io.sys +savedefault --wait=2 + +title find and boot Mandriva with menu.lst already installed +fallback 4 +find --set-root /etc/mandriva-release +savedefault --wait=2 +configfile /boot/grub/menu.lst + +title find and boot Linux with menu.lst already installed +fallback 5 +find --set-root /sbin/init +savedefault --wait=2 +configfile /boot/grub/menu.lst + +title commandline +savedefault --wait=2 +commandline + +title floppy (fd0) +chainloader (fd0)+1 +rootnoverify (fd0) +savedefault --wait=2 + +title back to dos +savedefault --wait=2 +quit + +title reboot +savedefault --wait=2 +reboot + +title halt +savedefault --wait=2 +halt + +title memdrive duplicated from floppy image file (hd0,0)/sbm.bin +map --mem (hd0,0)/sbm.bin (fd0) +map --hook +chainloader (fd0)+1 +rootnoverify (fd0) +savedefault --wait=2 + +title memdrive based on win98 partition (hd0,6) +map --mem (hd0,6)+1 (hd0) +# map --mem (hd0,0)/win98.gz (hd0) +map --hook +chainloader (hd0)+1 +rootnoverify (hd0) +savedefault --wait=2 + + diff --git a/client/shared/lib/modules/psmouse.ko b/client/shared/lib/modules/psmouse.ko new file mode 100644 index 00000000..f305164d Binary files /dev/null and b/client/shared/lib/modules/psmouse.ko differ diff --git a/client/shared/lib/pci.ids b/client/shared/lib/pci.ids new file mode 100644 index 00000000..3fa895a6 --- /dev/null +++ b/client/shared/lib/pci.ids @@ -0,0 +1,17910 @@ +# +# List of PCI ID's +# +# Version: 2009.09.18 +# Date: 2009-09-18 03:15:01 +# +# Maintained by Martin Mares and other volunteers from the +# PCI ID Project at http://pciids.sf.net/. +# +# New data are always welcome, especially if they are accurate. If you have +# anything to contribute, please follow the instructions at the web site. +# +# This file can be distributed under either the GNU General Public License +# (version 2 or higher) or the 3-clause BSD License. +# + +# Vendors, devices and subsystems. Please keep sorted. + +# Syntax: +# vendor vendor_name +# device device_name <-- single tab +# subvendor subdevice subsystem_name <-- two tabs + +0000 Gammagraphx, Inc. (or missing ID) +0010 Allied Telesis, Inc +# This is a relabelled RTL-8139 + 8139 AT-2500TX V3 Ethernet +001a Ascend Communications, Inc. +001c PEAK-System Technik GmbH + 0001 PCAN-PCI CAN-Bus controller +0033 Paradyne corp. +003d Lockheed Martin-Marietta Corp +# Real TJN ID is e159, but they got it wrong several times --mj +0059 Tiger Jet Network Inc. (Wrong ID) +0070 Hauppauge computer works Inc. + 0003 WinTV PVR-250 + 0009 WinTV PVR-150 + 0801 WinTV PVR-150 + 0807 WinTV PVR-150 + 4000 WinTV PVR-350 + 4001 WinTV PVR-250 (v1) + 4009 WinTV PVR-250 + 4800 WinTV PVR-350 + 4801 WinTV PVR-250 MCE + 4803 WinTV PVR-250 + 7444 WinTV HVR-1600 + 7801 WinTV HVR-1800 MCE + 8003 WinTV PVR-150 + 8801 WinTV PVR-150 + c801 WinTV PVR-150 + e807 WinTV PVR-500 MCE (1st tuner) + e817 WinTV PVR-500 MCE (2nd tuner) +0071 Nebula Electronics Ltd. +0095 Silicon Image, Inc. (Wrong ID) + 0680 Ultra ATA/133 IDE RAID CONTROLLER CARD +# Wrong ID used in subsystem ID of the TELES.S0/PCI 2.x ISDN adapter +00a7 Teles AG (Wrong ID) +00f5 BFG Technologies, Inc. +0100 Ncipher Corp Ltd +0123 General Dynamics +# 018a is not LevelOne but there is a board misprogrammed +018a LevelOne + 0106 FPC-0106TX misprogrammed [RTL81xx] +# 021b is not Compaq but there is a board misprogrammed +021b Compaq Computer Corporation + 8139 HNE-300 (RealTek RTL8139c) [iPaq Networking] +0270 Hauppauge computer works Inc. (Wrong ID) +0291 Davicom Semiconductor, Inc. + 8212 DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40) +# SpeedStream is Efficient Networks, Inc, a Siemens Company +02ac SpeedStream + 1012 1012 PCMCIA 10/100 Ethernet Card [RTL81xx] +02e0 XFX Pine Group Inc +0303 Hewlett-Packard Company (Wrong ID) +0315 SK-Electronics Co., Ltd. +0357 TTTech AG + 000a TTP-Monitoring Card V2.0 +036f Trigem Computer Inc. +0403 Future Technology Devices International Ltd +0432 SCM Microsystems, Inc. + 0001 Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet] +045e Microsoft + 006e MN-510 802.11b wireless USB paddle + 00c2 MN-710 wireless USB paddle +0482 Kyocera +04cf Myson Century, Inc + 8818 CS8818 USB2.0-to-ATAPI Bridge Controller with Embedded PHY +050d Belkin + 001a FSD7000 802.11g PCI Wireless card + 700f F5D7001 - Wireless G Plus Desktop Card + 7050 F5D7050 802.11g Wireless USB Adapter + 705c F5D7050 v4 +058f Alcor Micro Corporation +05a9 OmniVision + 8519 OV519 series +05e3 CyberDoor + 0701 CBD516 +066f Sigmatel Inc. + 3410 SMTP3410 + 3500 SMTP3500 +0675 Dynalink + 1700 IS64PH ISDN Adapter + 1702 IS64PH ISDN Adapter + 1703 ISDN Adapter (PCI Bus, DV, W) + 1704 ISDN Adapter (PCI Bus, D, C) +069d Hughes Network Systems (HNS) +0721 Sapphire, Inc. +0795 Wired Inc. + 6663 Butane II (MPEG2 encoder board) + 6666 MediaPress (MPEG2 encoder board) +07ca AVerMedia Technologies Inc. + a301 AVerTV 301 + b808 AVerTV DVB-T Volar (USB 2.0) +07d0 ITT Space Systems Division +07e2 ELMEG Communication Systems GmbH +0842 NPG, Personal Grand Technology +# Nee Gemplus International, SA +08e6 Gemalto NV +08ff AuthenTec + afe4 [Anchor] AF-S2 FingerLoc Sensor Module +0925 First International Computer, Inc. + 1234 VA-502 Mainboard +093a PixArt Imaging Inc. + 010e Innovage Mini Digital Camera + 010f SDC-300 Webcam + 020f Digital Photo Viewer + 2468 CIF Single Chip + 2600 PAC7311 + 2603 Philips Webcam SPC500NC + 2608 Maxell MaxCam RotaWeb +09c1 Arris + 0704 CM 200E Cable Modem +0a89 BREA Technologies Inc +0ace ZyDAS + 1211 ZD1211 IEEE 802.11b+g USB Adapter +0b0b Rhino Equipment Corp. + 0105 Rhino R1T1 + 0205 Rhino R4FXO + 0206 RCB4FXO 4-channel FXO analog telphony card + 0305 Rhino R4T1 + 0405 Rhino R8FXX + 0406 RCB8FXX 8-channel modular analog telphony card + 0505 Rhino R24FXX + 0506 RCB24FXS 24-Channel FXS analog telphony card + 0605 Rhino R2T1 + 0705 Rhino R24FXS + 0706 RCB24FXO 24-Channel FXO analog telphony card + 0905 R1T3 Single T3 Digital Telephony Card + 0906 RCB24FXX 24-channel modular analog telphony card + 0a06 RCB672FXX 672-channel modular analog telphony card +0b3d Brontes Technologies +0b49 ASCII Corporation + 064f Trance Vibrator +0ccd TerraTec Electronic GmbH + 0038 Cinergy T^2 DVB-T Receiver +0e11 Compaq Computer Corporation + 0001 PCI to EISA Bridge + 0002 PCI to ISA Bridge + 0046 Smart Array 64xx + 0e11 4091 Smart Array 6i + 0e11 409a Smart Array 641 + 0e11 409b Smart Array 642 + 0e11 409c Smart Array 6400 + 0e11 409d Smart Array 6400 EM + 0049 NC7132 Gigabit Upgrade Module + 004a NC6136 Gigabit Server Adapter + 005a Remote Insight II board - Lights-Out + 007c NC7770 1000BaseTX + 007d NC6770 1000BaseTX + 0085 NC7780 1000BaseTX + 00b1 Remote Insight II board - PCI device + 00bb NC7760 + 00ca NC7771 + 00cb NC7781 + 00cf NC7772 + 00d0 NC7782 + 00d1 NC7783 + 00e3 NC7761 + 0508 Netelligent 4/16 Token Ring + 1000 Triflex/Pentium Bridge, Model 1000 + 2000 Triflex/Pentium Bridge, Model 2000 + 3032 QVision 1280/p + 3033 QVision 1280/p + 3034 QVision 1280/p + 4000 4000 [Triflex] + 4040 Integrated Array + 4048 Compaq Raid LC2 + 4050 Smart Array 4200 + 4051 Smart Array 4250ES + 4058 Smart Array 431 + 4070 Smart Array 5300 + 4080 Smart Array 5i + 4082 Smart Array 532 + 4083 Smart Array 5312 + 4091 Smart Array 6i + 409a Smart Array 641 + 409b Smart Array 642 + 409c Smart Array 6400 + 409d Smart Array 6400 EM + 6010 HotPlug PCI Bridge 6010 + 7020 USB Controller + a0ec Fibre Channel Host Controller + a0f0 Advanced System Management Controller + a0f3 Triflex PCI to ISA Bridge + a0f7 PCI Hotplug Controller + 8086 002a PCI Hotplug Controller A + 8086 002b PCI Hotplug Controller B + a0f8 ZFMicro Chipset USB + a0fc FibreChannel HBA Tachyon + ae10 Smart-2/P RAID Controller + 0e11 4030 Smart-2/P Array Controller + 0e11 4031 Smart-2SL Array Controller + 0e11 4032 Smart Array 3200 Controller + 0e11 4033 Smart Array 3100ES Controller + 0e11 4034 Smart Array 221 Controller + ae29 MIS-L + ae2a MPC + ae2b MIS-E + ae31 System Management Controller + ae32 Netelligent 10/100 TX PCI UTP + ae33 Triflex Dual EIDE Controller + ae34 Netelligent 10 T PCI UTP + ae35 Integrated NetFlex-3/P + ae40 Netelligent Dual 10/100 TX PCI UTP + ae43 Netelligent Integrated 10/100 TX UTP + ae69 CETUS-L + ae6c Northstar + ae6d NorthStar CPU to PCI Bridge + b011 Netelligent 10/100 TX Embedded UTP + b012 Netelligent 10 T/2 PCI UTP/Coax + b01e NC3120 Fast Ethernet NIC + b01f NC3122 Fast Ethernet NIC + b02f NC1120 Ethernet NIC + b030 Netelligent 10/100 TX UTP + b04a 10/100 TX PCI Intel WOL UTP Controller + b060 Smart Array 5300 Controller + b0c6 NC3161 Fast Ethernet NIC + b0c7 NC3160 Fast Ethernet NIC + b0d7 NC3121 Fast Ethernet NIC + b0dd NC3131 Fast Ethernet NIC + b0de NC3132 Fast Ethernet Module + b0df NC6132 Gigabit Module + b0e0 NC6133 Gigabit Module + b0e1 NC3133 Fast Ethernet Module + b123 NC6134 Gigabit NIC + b134 NC3163 Fast Ethernet NIC + b13c NC3162 Fast Ethernet NIC + b144 NC3123 Fast Ethernet NIC + b163 NC3134 Fast Ethernet NIC + b164 NC3165 Fast Ethernet Upgrade Module + b178 Smart Array 5i/532 + 0e11 4080 Smart Array 5i + 0e11 4082 Smart Array 532 + 0e11 4083 Smart Array 5312 + b1a4 NC7131 Gigabit Server Adapter + b200 Memory Hot-Plug Controller + b203 Integrated Lights Out Controller + b204 Integrated Lights Out Processor + c000 Remote Insight Lights-Out Edition + f130 NetFlex-3/P ThunderLAN 1.0 + f150 NetFlex-3/P ThunderLAN 2.3 +0e21 Cowon Systems, Inc. +0e55 HaSoTec GmbH +0eac SHF Communication Technologies AG + 0008 Ethernet Powerlink Managing Node 01 +0f62 Acrox Technologies Co., Ltd. +# Formerly NCR +1000 LSI Logic / Symbios Logic + 0001 53c810 + 1000 1000 LSI53C810AE PCI to SCSI I/O Processor + 0002 53c820 + 0003 53c825 + 1000 1000 LSI53C825AE PCI to SCSI I/O Processor (Ultra Wide) + 0004 53c815 + 0005 53c810AP + 0006 53c860 + 1000 1000 LSI53C860E PCI to Ultra SCSI I/O Processor + 000a 53c1510 + 0e11 b143 Integrated Dual Channel Wide Ultra2 SCSI Controller + 1000 1000 LSI53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Nonintelligent mode) + 000b 53C896/897 + 0e11 6004 EOB003 Series SCSI host adapter + 1000 1000 LSI53C896/7 PCI to Dual Channel Ultra2 SCSI Multifunction Controller + 1000 1010 LSI22910 PCI to Dual Channel Ultra2 SCSI host adapter + 1000 1020 LSI21002 PCI to Dual Channel Ultra2 SCSI host adapter + 13e9 1000 6221L-4U (Dual U2W SCSI, dual 10/100TX, graphics) + 000c 53c895 + 1000 1010 LSI8951U PCI to Ultra2 SCSI host adapter + 1000 1020 LSI8952U PCI to Ultra2 SCSI host adapter + 1de1 3906 DC-390U2B SCSI adapter + 1de1 3907 DC-390U2W + 000d 53c885 + 000f 53c875 + 0e11 7004 Embedded Ultra Wide SCSI Controller + 1000 1000 LSI53C876/E PCI to Dual Channel SCSI Controller + 1000 1010 LSI22801 PCI to Dual Channel Ultra SCSI host adapter + 1000 1020 LSI22802 PCI to Dual Channel Ultra SCSI host adapter + 1092 8760 FirePort 40 Dual SCSI Controller + 1775 10d0 V5D Single Board Computer Wide Ultra SCSI + 1775 10d1 V5D Single Board Computer Ultra SCSI + 1de1 3904 DC390F/U Ultra Wide SCSI Adapter + 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard + 4c53 1050 CT7 mainboard + 0010 53C1510 + 0e11 4040 Integrated Smart Array Controller + 0e11 4048 RAID LC2 Controller + 1000 1000 53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Intelligent mode) + 0012 53c895a + 1000 1000 LSI53C895A PCI to Ultra2 SCSI Controller + 0013 53c875a + 1000 1000 LSI53C875A PCI to Ultra SCSI Controller + 0020 53c1010 Ultra3 SCSI Adapter + 1000 1000 LSI53C1010-33 PCI to Dual Channel Ultra160 SCSI Controller + 107b 1040 Server Onboard 53C1010-33 + 1de1 1020 DC-390U3W + 0021 53c1010 66MHz Ultra3 SCSI Adapter + 1000 1000 LSI53C1000/1000R/1010R/1010-66 PCI to Ultra160 SCSI Controller + 1000 1010 Asus TR-DLS onboard 53C1010-66 + 103c 1300 Ultra160 SCSI [AB306A] + 103c 1310 Ultra160 SCSI [A9918A] + 103c 1330 Ultra160 SCSI [A7059A] + 103c 1340 Ultra160 SCSI [A7060A] + 124b 1070 PMC-USCSI3 + 4c53 1080 CT8 mainboard + 4c53 1300 P017 mezzanine (32-bit PMC) + 4c53 1310 P017 mezzanine (64-bit PMC) + 0030 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI + 0e11 00da ProLiant ML 350 + 1028 0123 LSI Logic 1020/1030 + 1028 014a LSI Logic 1020/1030 + 1028 016c PowerEdge 1850 MPT Fusion SCSI/RAID (Perc 4) + 1028 0183 LSI Logic 1020/1030 + 1028 018a PERC 4/IM + 1028 1010 LSI U320 SCSI Controller + 103c 12c5 Ultra320 SCSI [A7173A] + 103c 1323 Core I/O LAN/SCSI Combo [AB314A] + 103c 3108 Single Channel Ultra320 SCSI HBA G2 + 124b 1170 PMC-USCSI320 +# VMware's emulation of this device. Was missing from the list. + 15ad 1976 LSI Logic Parallel SCSI Controller + 1734 1052 PRIMERGY BX/RX/TX S2 series onboard SCSI(IME) + 0031 53c1030ZC PCI-X Fusion-MPT Dual Ultra320 SCSI + 0032 53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI + 1000 1000 LSI53C1020/1030 PCI-X to Ultra320 SCSI Controller + 0033 1030ZC_53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI + 0040 53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI + 1000 0033 MegaRAID SCSI 320-2XR + 1000 0066 MegaRAID SCSI 320-2XRWS + 0041 53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI + 0050 SAS1064 PCI-X Fusion-MPT SAS + 1028 1f04 SAS 5/E + 1028 1f09 SAS 5i/R + 0054 SAS1068 PCI-X Fusion-MPT SAS + 1028 1f04 SAS 5/E Adapter Controller + 1028 1f05 SAS 5/i Adapter Controller + 1028 1f06 SAS 5/i Integrated Controller + 1028 1f07 SAS 5/iR Integrated RAID Controller + 1028 1f08 SAS 5/iR Integrated RAID Controller + 1028 1f09 SAS 5/iR Adapter RAID Controller + 15ad 1976 SAS Controller + 0055 SAS1068 PCI-X Fusion-MPT SAS + 1033 8336 SAS1068 + 0056 SAS1064ET PCI-Express Fusion-MPT SAS + 0057 M1064E MegaRAID SAS + 8086 346c Embedded Software RAID Technology II (ESTRII) + 0058 SAS1068E PCI-Express Fusion-MPT SAS + 1028 021d SAS 6/iR Integrated Workstations RAID Controller + 1028 1f0e SAS 6/iR Adapter RAID Controller + 1028 1f0f SAS 6/iR Integrated Blades RAID Controller + 1028 1f10 SAS 6/iR Integrated RAID Controller + 103c 3229 SC44Ge Host Bus Adapter + 0059 MegaRAID SAS 8208ELP/8208ELP + 005a SAS1066E PCI-Express Fusion-MPT SAS + 005c SAS1064A PCI-X Fusion-MPT SAS + 005e SAS1066 PCI-X Fusion-MPT SAS + 0060 MegaRAID SAS 1078 + 1000 1006 MegaRAID SAS 8888ELP + 1000 100a MegaRAID SAS 8708ELP + 1000 100e MegaRAID SAS 8884E + 1000 100f MegaRAID SAS 8708E + 1000 1010 MegaRAID SATA 350-8ELP + 1000 1011 MegaRAID SATA 350-4ELP + 1000 1012 MegaRAID SAS 8704ELP + 1000 1016 MegaRAID SAS 8880EM2 + 1014 0363 MegaRAID SAS PCI Express ROMB + 1014 0364 SystemX MegaRAID SAS 8808E + 1014 0365 SystemX MegaRAID SAS 8884E + 1014 0379 SystemX MegaRAID SAS 8880EM2 + 1028 1f0a PERC 6/E Adapter RAID Controller + 1028 1f0b PERC 6/i Adapter RAID Controller + 1028 1f0c PERC 6/i Integrated RAID Controller + 1028 1f0d PERC 6/i Integrated RAID Controller + 1028 1f11 CERC 6/i Integrated RAID Controller + 1033 835a MegaRAID SAS PCI Express ROMB + 1043 824d MegaRAID SAS PCI Express ROMB + 1170 002f MegaRAID SAS PCI Express ROMB + 1170 0036 MegaRAID SAS PCI Express ROMB + 15d9 c080 MegaRAID SAS PCI Express ROMB + 17aa 6b7c MegaRAID SAS PCI Express ROMB + 18a1 0003 LSI MegaRAID SAS PCI Express ROMB + 8086 1006 RAID Controller SRCSAS28EP + 8086 100a RAID Controller SRCSAS28EV + 8086 1010 RAID Controller SRCSATA28E + 8086 34cc Integrated RAID Controller SROMBSAS28E + 8086 34cd Integrated RAID Controller SROMBSAS28E + 0062 SAS1078 PCI-Express Fusion-MPT SAS + 1000 0062 SAS1078 PCI-Express Fusion-MPT SAS + 0064 SAS2116 PCI-Express Fusion-MPT SAS-2 [Meteor] + 0065 SAS2116 PCI-Express Fusion-MPT SAS-2 [Meteor] + 0070 SAS2004 PCI-Express Fusion-MPT SAS-2 [Spitfire] + 0072 SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] + 1028 1f1c 6Gbps SAS HBA Adapter + 1028 1f1d PERC H200 Adapter + 1028 1f1e PERC H200 Integrated + 1028 1f1f PERC H200 Modular + 0073 MegaRAID SAS 9240 + 1000 9240 MegaRAID SAS 9240-4i + 0074 SAS2108 PCI-Express Fusion-MPT SAS-2 [Liberator] + 0076 SAS2108 PCI-Express Fusion-MPT SAS-2 [Liberator] + 0077 SAS2108 PCI-Express Fusion-MPT SAS-2 [Liberator] + 0079 LSI MegaSAS 9260 + 1000 9262 MegaRAID SAS 9262-8i + 1000 9263 MegaRAID SAS 9261-8i + 1000 9281 MegaRAID SAS 9281-8E + 1028 1f15 PERC H800 Adapter + 1028 1f16 PERC H700 Adapter + 1028 1f17 PERC H700 Integrated + 1028 1f18 PERC H700 Modular + 1028 1f1a PERC H800 Proto Adapter + 1028 1f1b PERC H700 Integrated + 007c MegaRAID SAS 1078DE + 1014 0395 ServeRAID-AR10is SAS/SATA Controller + 0080 SAS2208 PCI-Express Fusion-MPT SAS-2 + 0081 SAS2208 PCI-Express Fusion-MPT SAS-2 + 0082 SAS2208 PCI-Express Fusion-MPT SAS-2 + 0083 SAS2208 PCI-Express Fusion-MPT SAS-2 + 0084 SAS2208 PCI-Express Fusion-MPT SAS-2 + 0085 SAS2208 PCI-Express Fusion-MPT SAS-2 + 0086 SAS2208 PCI-Express Fusion-MPT SAS-2 + 0087 SAS2208 PCI-Express Fusion-MPT SAS-2 + 008f 53c875J + 1092 8000 FirePort 40 SCSI Controller + 1092 8760 FirePort 40 Dual SCSI Host Adapter + 0407 MegaRAID + 1000 0530 MegaRAID 530 SCSI 320-0X RAID Controller + 1000 0531 MegaRAID 531 SCSI 320-4X RAID Controller + 1000 0532 MegaRAID 532 SCSI 320-2X RAID Controller + 1028 0531 PowerEdge Expandable RAID Controller 4/QC + 1028 0533 PowerEdge Expandable RAID Controller 4/QC + 8086 0530 MegaRAID Intel RAID Controller SRCZCRX + 8086 0532 MegaRAID Intel RAID Controller SRCU42X + 0408 MegaRAID + 1000 0001 MegaRAID SCSI 320-1E RAID Controller + 1000 0002 MegaRAID SCSI 320-2E RAID Controller + 1025 004d MegaRAID ACER ROMB-2E RAID Controller + 1028 0001 PowerEdge RAID Controller PERC4e/SC + 1028 0002 PowerEdge RAID Controller PERC4e/DC + 1028 0012 PowerEdge RAID Controller RAC4 + 1028 0015 PowerEdge RAID Controller PERC5 + 1028 1f03 PowerEdge RAID Controller PERC5 + 1734 1065 FSC MegaRAID PCI Express ROMB + 8086 0002 MegaRAID Intel RAID Controller SRCU42E + 8086 3449 MegaRAID Intel RAID Controller SROMBU + 0409 MegaRAID + 1000 3004 MegaRAID SATA 300-4X RAID Controller + 1000 3008 MegaRAID SATA 300-8X RAID Controller + 8086 3008 MegaRAID RAID Controller SRCS28X + 8086 3431 MegaRAID RAID Controller Alief SROMBU42E + 8086 3499 MegaRAID RAID Controller Harwich SROMBU42E + 0411 MegaRAID SAS + 1000 1001 MegaRAID SAS 8408E + 1000 1002 MegaRAID SAS 8480E + 1000 1003 MegaRAID SAS 8344ELP + 1000 1004 MegaRAID SAS 8308ELP + 1000 1008 MegaRAID SAS 84016E + 1000 100c MegaRAID SATA 300-12E + 1000 100d MegaRAID SATA 300-16E + 1000 2004 MegaRAID SATA 300-8ELP + 1000 2005 MegaRAID SATA 300-4ELP + 1033 8287 MegaRAID SAS PCI Express ROMB + 1054 3016 MegaRAID SAS RoMB Server + 1734 1081 MegaRAID SAS PCI Express ROMB + 1734 10a3 MegaRAID SAS PCI Express ROMB + 8086 1001 RAID Controller SRCSAS18E + 8086 1003 RAID Controller SRCSAS144E + 8086 3500 SROMBSAS18E RAID Controller + 8086 3501 SROMBSAS18E RAID Controller + 8086 3504 SROMBSAS18E RAID Controller + 0413 MegaRAID SAS Verde ZCR + 1000 1005 MegaRAID SAS 8300XLP + 0621 FC909 Fibre Channel Adapter + 0622 FC929 Fibre Channel Adapter + 1000 1020 44929 O Dual Fibre Channel card + 0623 FC929 LAN + 0624 FC919 Fibre Channel Adapter + 0625 FC919 LAN + 0626 FC929X Fibre Channel Adapter + 1000 1010 7202-XP-LC Dual Fibre Channel card + 0627 FC929X LAN + 0628 FC919X Fibre Channel Adapter + 0629 FC919X LAN + 0640 FC949X Fibre Channel Adapter + 0642 FC939X Fibre Channel Adapter + 0646 FC949ES Fibre Channel Adapter + 0701 83C885 NT50 DigitalScape Fast Ethernet + 0702 Yellowfin G-NIC gigabit ethernet + 1318 0000 PEI100X + 0804 SA2010 + 0805 SA2010ZC + 0806 SA2020 + 0807 SA2020ZC + 0901 61C102 + 1000 63C815 + 1960 MegaRAID + 1000 0518 MegaRAID 518 SCSI 320-2 Controller + 1000 0520 MegaRAID 520 SCSI 320-1 Controller + 1000 0522 MegaRAID 522 i4 133 RAID Controller + 1000 0523 MegaRAID SATA 150-6 RAID Controller + 1000 4523 MegaRAID SATA 150-4 RAID Controller + 1000 a520 MegaRAID ZCR SCSI 320-0 Controller + 1028 0518 MegaRAID 518 DELL PERC 4/DC RAID Controller + 1028 0520 MegaRAID 520 DELL PERC 4/SC RAID Controller + 1028 0531 PowerEdge Expandable RAID Controller 4/QC + 1028 0533 PowerEdge Expandable RAID Controller 4/QC + 8086 0520 MegaRAIDRAID Controller SRCU41L + 8086 0523 MegaRAID RAID Controller SRCS16 +1001 Kolter Electronic + 0010 PCI 1616 Measurement card with 32 digital I/O lines + 0011 OPTO-PCI Opto-Isolated digital I/O board + 0012 PCI-AD/DA Analogue I/O board + 0013 PCI-OPTO-RELAIS Digital I/O board with relay outputs + 0014 PCI-Counter/Timer Counter Timer board + 0015 PCI-DAC416 Analogue output board + 0016 PCI-MFB Analogue I/O board + 0017 PROTO-3 PCI Prototyping board + 9100 INI-9100/9100W SCSI Host +1002 ATI Technologies Inc + 3150 M24 1P [Radeon Mobility X600] + 103c 0934 nx8220 + 3151 M24 [FireMV 2400] + 3152 M22 [Radeon Mobility X300] + 3154 M24GL [Mobility FireGL V3200] + 3171 M24 [FireMV 2400] (Secondary) + 3e50 RV380 0x3e50 [Radeon X600] + 3e54 RV380 0x3e54 [FireGL V3200] + 3e70 RV380 [Radeon X600] (Secondary) + 4136 Radeon IGP 320 M + 4137 Radeon IGP330/340/350 + 4144 R300 AD [Radeon 9500 Pro] + 4145 R300 AE [Radeon 9700 Pro] + 4146 R300 AF [Radeon 9700 Pro] + 4147 R300 AG [FireGL Z1/X1] + 4148 R350 AH [Radeon 9800] + 4149 R350 AI [Radeon 9800] + 414a R350 AJ [Radeon 9800] + 414b R350 AK [FireGL X2] + 4150 RV350 AP [Radeon 9600] + 1002 0002 R9600 Pro primary (Asus OEM for HP) + 1002 0003 R9600 Pro secondary (Asus OEM for HP) + 1002 4722 All-in-Wonder 2006 AGP Edition + 1458 4024 Giga-Byte GV-R96128D (Primary) + 148c 2064 PowerColor R96A-C3N + 148c 2066 PowerColor R96A-C3N + 174b 7c19 Sapphire Atlantis Radeon 9600 Pro + 174b 7c29 GC-R9600PRO [Sapphire] (Primary) + 17ee 2002 Radeon 9600 256Mb Primary + 18bc 0101 GC-R9600PRO (Primary) + 4151 RV350 AQ [Radeon 9600] + 1043 c004 A9600SE + 4152 RV350 AR [Radeon 9600] + 1002 0002 Radeon 9600XT + 1002 4772 All-in-Wonder 9600 XT + 1043 c002 Radeon 9600 XT TVD + 1043 c01a A9600XT/TD + 174b 7c29 Sapphire Radeon 9600XT + 1787 4002 Radeon 9600 XT + 4153 RV350 AS [Radeon 9550] + 1043 010c A9550GE/TD + 1462 932c RX9550SE-TD128 (MS-8932) + 4154 RV350 AT [FireGL T2] + 4155 RV350 AU [FireGL T2] + 4156 RV350 AV [FireGL T2] + 4157 RV350 AW [FireGL T2] + 4158 68800AX [Mach32] + 4164 R300 AD [Radeon 9500 Pro] (Secondary) + 4165 R300 AE [Radeon 9700 Pro] (Secondary) + 4166 R300 AF [Radeon 9700 Pro] (Secondary) + 4168 Radeon R350 [Radeon 9800] (Secondary) + 4170 RV350 AP [Radeon 9600] (Secondary) + 1002 0003 R9600 Pro secondary (Asus OEM for HP) + 1002 4723 All-in-Wonder 2006 AGP Edition (Secondary) + 1458 4025 Giga-Byte GV-R96128D (Secondary) + 148c 2067 PowerColor R96A-C3N (Secondary) + 174b 7c28 GC-R9600PRO [Sapphire] (Secondary) + 17ee 2003 Radeon 9600 256Mb (Secondary) + 18bc 0100 GC-R9600PRO (Secondary) + 4171 RV350 AQ [Radeon 9600] (Secondary) + 1043 c005 A9600SE (Secondary) + 4172 RV350 AR [Radeon 9600] (Secondary) + 1002 0003 Radeon 9600XT (Secondary) + 1002 4773 All-in-Wonder 9600 XT (Secondary) + 1043 c003 A9600XT (Secondary) + 1043 c01b A9600XT/TD (Secondary) + 174b 7c28 Sapphire Radeon 9600XT (Secondary) + 1787 4003 Radeon 9600 XT (Secondary) + 4173 RV350 AS [Radeon 9550] (Secondary) + 1043 010d A9550GE/TD (Secondary) + 4237 Radeon 7000 IGP + 4242 R200 BB [Radeon All in Wonder 8500DV] + 1002 02aa Radeon 8500 AIW DV Edition + 4243 R200 BC [Radeon All in Wonder 8500] + 4336 Radeon Mobility U1 + 1002 4336 Pavilion ze4300 ATI Radeon Mobility U1 (IGP 320 M) + 103c 0024 Pavilion ze4400 builtin Video + 161f 2029 eMachines M5312 builtin Video + 4337 Radeon IGP 330M/340M/350M + 1014 053a ThinkPad R40e + 103c 0850 Radeon IGP 345M + 4341 IXP150 AC'97 Audio Controller + 4342 IXP200 3COM 3C920B Ethernet Controller + 4345 EHCI USB Controller + 4347 OHCI USB Controller #1 + 4348 OHCI USB Controller #2 + 4349 Dual Channel Bus Master PCI IDE Controller + 434d IXP AC'97 Modem + 4353 SMBus + 4354 215CT [Mach64 CT] + 4358 210888CX [Mach64 CX] + 4361 IXP SB300 AC'97 Audio Controller + 4363 SMBus + 436e 436E Serial ATA Controller + 4370 IXP SB400 AC'97 Audio Controller + 1025 0079 Aspire 5024WLMMi + 1025 0091 Aspire 5032WXMi + 103c 308b MX6125 + 105b 0c81 Realtek ALC 653 + 107b 0300 MX6421 + 1462 0131 MS-1013 Notebook + 4371 IXP SB400 PCI-PCI Bridge + 103c 308b MX6125 + 1462 7217 Aspire L250 + 4372 IXP SB400 SMBus Controller + 1025 0080 Aspire 5024WLMMi + 103c 308b MX6125 + 1462 0131 MS-1013 Notebook + 1462 7217 Aspire L250 + 4373 IXP SB400 USB2 Host Controller + 1025 0080 Aspire 5024WLMMi + 103c 308b MX6125 + 1462 7217 Aspire L250 + 4374 IXP SB400 USB Host Controller + 103c 308b MX6125 + 1462 7217 Aspire L250 + 4375 IXP SB400 USB Host Controller + 1025 0080 Aspire 5024WLMMi + 103c 308b MX6125 + 1462 7217 Aspire L250 + 4376 IXP SB400 IDE Controller + 1025 0080 Aspire 5024WLMMi + 103c 308b MX6125 + 1462 0131 MS-1013 Notebook + 1462 7217 Aspire L250 + 4377 IXP SB400 PCI-ISA Bridge + 1025 0080 Aspire 5024WLMi + 103c 308b MX6125 + 1462 7217 Aspire L250 + 4378 SB400 AC'97 Modem Controller + 1025 0080 Aspire 5024WLMMi + 103c 308b MX6125 + 1462 0131 MS-1013 Notebook + 4379 IXP SB400 Serial ATA Controller + 1462 7141 Aspire L250 + 437a IXP SB400 Serial ATA Controller + 1002 4379 4379 Serial ATA Controller + 1002 437a 437A Serial ATA Controller + 1462 7141 Aspire L250 + 14f1 8800 Leadtek WinFast TV2000XP Expert + 437b IXP SB4x0 High Definition Audio Controller + 1002 437b IXP SB4x0 High Definition Audio Controller + 10cf 1326 Fujitsu Lifebook A3040 + 1734 10b8 Realtek High Definition Audio + 4380 SB600 Non-Raid-5 SATA + 103c 2813 DC5750 Microtower + 1458 b005 Gigabyte GA-MA69G-S3H Motherboard + 1462 7327 K9AG Neo2 + 17f2 5999 KI690-AM2 Motherboard + 4381 SB600 Raid-5 SATA + 4382 SB600 AC97 Audio + 4383 SBx00 Azalia (Intel HDA) + 103c 280a DC5750 Microtower + 17f2 5000 KI690-AM2 Motherboard + 4384 SBx00 PCI to PCI Bridge + 4385 SBx00 SMBus Controller + 103c 280a DC5750 Microtower + 1462 7368 K9AG Neo2 + 17f2 5000 KI690-AM2 Motherboard + 4386 SB600 USB Controller (EHCI) + 103c 280a DC5750 Microtower + 1462 7368 K9AG Neo2 + 17f2 5000 KI690-AM2 Motherboard + 4387 SB600 USB (OHCI0) + 103c 280a DC5750 Microtower + 1462 7368 K9AG Neo2 + 17f2 5000 KI690-AM2 Motherboard + 4388 SB600 USB (OHCI1) + 103c 280a DC5750 Microtower + 1462 7368 K9AG Neo2 + 17f2 5000 KI690-AM2 Motherboard + 4389 SB600 USB (OHCI2) + 103c 280a DC5750 Microtower + 1462 7368 K9AG Neo2 + 17f2 5000 KI690-AM2 Motherboard + 438a SB600 USB (OHCI3) + 103c 280a DC5750 Microtower + 1462 7368 K9AG Neo2 + 17f2 5000 KI690-AM2 Motherboard + 438b SB600 USB (OHCI4) + 103c 280a DC5750 Microtower + 1462 7368 K9AG Neo2 + 17f2 5000 KI690-AM2 Motherboard + 438c SB600 IDE + 103c 280a DC5750 Microtower + 1458 5002 Gigabyte GA-MA69G-S3H Motherboard + 1462 7368 K9AG Neo2 + 17f2 5000 KI690-AM2 Motherboard + 438d SB600 PCI to LPC Bridge + 103c 280a DC5750 Microtower + 1462 7368 K9AG Neo2 + 17f2 5000 KI690-AM2 Motherboard + 438e SB600 AC97 Modem + 4390 SB700/SB800 SATA Controller [IDE mode] + 1849 4390 Motherboard (one of many) + 4391 SB700/SB800 SATA Controller [AHCI mode] + 4392 SB700/SB800 SATA Controller [Non-RAID5 mode] + 4393 SB700/SB800 SATA Controller [RAID5 mode] + 4394 SB700/SB800 SATA Controller [SATA and FC Enabled] + 4395 SB800 SATA Controller [Storage mode with HyperFlash-PCIE] + 4396 SB700/SB800 USB EHCI Controller + 4397 SB700/SB800 USB OHCI0 Controller + 4398 SB700 USB OHCI1 Controller + 4399 SB700/SB800 USB OHCI2 Controller + 439c SB700/SB800 IDE Controller + 439d SB700/SB800 LPC host controller + 4437 Radeon Mobility 7000 IGP + 4554 210888ET [Mach64 ET] + 4654 Mach64 VT + 4742 3D Rage Pro AGP 1X/2X + 1002 0040 Rage Pro Turbo AGP 2X + 1002 0044 Rage Pro Turbo AGP 2X + 1002 0061 Rage Pro AIW AGP 2X + 1002 0062 Rage Pro AIW AGP 2X + 1002 0063 Rage Pro AIW AGP 2X + 1002 0080 Rage Pro Turbo AGP 2X + 1002 0084 Rage Pro Turbo AGP 2X + 1002 4742 Rage Pro Turbo AGP 2X + 1002 8001 Rage Pro Turbo AGP 2X + 1028 0082 Rage Pro Turbo AGP 2X + 1028 4082 Optiplex GX1 Onboard Display Adapter + 1028 8082 Rage Pro Turbo AGP 2X + 1028 c082 Rage Pro Turbo AGP 2X + 8086 4152 Xpert 98D AGP 2X + 8086 464a Rage Pro Turbo AGP 2X + 4744 3D Rage Pro AGP 1X + 1002 4744 Rage Pro Turbo AGP + 4747 3D Rage Pro + 4749 3D Rage Pro + 1002 0061 Rage Pro AIW + 1002 0062 Rage Pro AIW + 474c Rage XC + 474d Rage XL AGP 2X + 1002 0004 Xpert 98 RXL AGP 2X + 1002 0008 Xpert 98 RXL AGP 2X + 1002 0080 Rage XL AGP 2X + 1002 0084 Xpert 98 AGP 2X + 1002 474d Rage XL AGP + 1033 806a Rage XL AGP + 474e Rage XC AGP + 1002 474e Rage XC AGP + 474f Rage XL + 1002 0008 Rage XL + 1002 474f Rage XL + 4750 3D Rage Pro 215GP + 1002 0040 Rage Pro Turbo + 1002 0044 Rage Pro Turbo + 1002 0080 Rage Pro Turbo + 1002 0084 Rage Pro Turbo + 1002 4750 Rage Pro Turbo + 4751 3D Rage Pro 215GQ + 4752 Rage XL + 0e11 001e Proliant Rage XL + 1002 0008 Rage XL + 1002 4752 Proliant Rage XL + 1002 8008 Rage XL + 1028 00ce PowerEdge 1400 + 1028 00d1 PowerEdge 2550 + 1028 00d9 PowerEdge 2500 + 1028 0134 PowerEdge 600SC + 1028 014a PowerEdge 1750 + 1028 0165 PowerEdge 750 + 103c 10e1 NetServer Rage XL + 107b 6400 6400 Server + 1734 007a PRIMERGY RX/TX series onboard VGA + 8086 3411 SDS2 Mainboard + 8086 3427 S875WP1-E mainboard + 8086 5744 S845WD1-E mainboard + 4753 Rage XC + 1002 4753 Rage XC + 4754 3D Rage I/II 215GT [Mach64 GT] + 4755 3D Rage II+ 215GTB [Mach64 GTB] + 4756 3D Rage IIC 215IIC [Mach64 GT IIC] + 1002 4756 Rage IIC + 4757 3D Rage IIC AGP + 1002 4757 Rage IIC AGP + 1028 0089 Rage 3D IIC + 1028 008e PowerEdge 1300 onboard video + 1028 4082 Rage 3D IIC + 1028 8082 Rage 3D IIC + 1028 c082 Rage 3D IIC + 4758 210888GX [Mach64 GX] + 4759 3D Rage IIC + 475a 3D Rage IIC AGP + 1002 0084 Rage 3D Pro AGP 2x XPERT 98 + 1002 0087 Rage 3D IIC + 1002 475a Rage IIC AGP + 4964 Radeon RV250 Id [Radeon 9000] + 4965 Radeon RV250 Ie [Radeon 9000] + 4966 Radeon RV250 If [Radeon 9000] + 10f1 0002 RV250 If [Tachyon G9000 PRO] + 148c 2039 RV250 If [Radeon 9000 Pro "Evil Commando"] + 1509 9a00 RV250 If [Radeon 9000 "AT009"] + 1681 0040 RV250 If [3D prophet 9000] + 174b 7176 RV250 If [Sapphire Radeon 9000 Pro] + 174b 7192 RV250 If [Radeon 9000 "Atlantis"] + 17af 2005 RV250 If [Excalibur Radeon 9000 Pro] + 17af 2006 RV250 If [Excalibur Radeon 9000] + 4967 Radeon RV250 Ig [Radeon 9000] + 496e Radeon RV250 [Radeon 9000] (Secondary) + 4a48 R420 JH [Radeon X800] + 4a49 R420 JI [Radeon X800PRO] + 4a4a R420 JJ [Radeon X800SE] + 4a4b R420 JK [Radeon X800] + 4a4c R420 JL [Radeon X800] + 4a4d R420 JM [FireGL X3] + 4a4e M18 JN [Radeon Mobility 9800] + 4a4f Radeon X800 SE (R420) (AGP) + 4a50 R420 JP [Radeon X800XT] + 4a54 R420 [Radeon X800 VE] + 4a69 R420 [Radeon X800 PRO/GTO] (Secondary) + 4a6a R420 [Radeon X800] (Secondary) + 4a6b R420 [Radeon X800] (Secondary) + 4a70 R420 [X800XT-PE] (Secondary) + 4a74 R420 [Radeon X800 VE] (Secondary) + 4b48 Radeon X850 Consumer (R481) + 4b49 R480 [Radeon X850XT] + 4b4a Radeon X850 SE (R480) (AGP) + 4b4b R480 [Radeon X850Pro] + 4b4c R481 [Radeon X850XT-PE] + 4b69 R480 [Radeon X850XT] (Secondary) + 4b6b R480 [Radeon X850Pro] (Secondary) + 4b6c R481 [Radeon X850XT-PE] (Secondary) + 4c42 3D Rage LT Pro AGP-133 + 0e11 b0e7 Rage LT Pro (Compaq Presario 5240) + 0e11 b0e8 Rage 3D LT Pro + 0e11 b10e 3D Rage LT Pro (Compaq Armada 1750) + 1002 0040 Rage LT Pro AGP 2X + 1002 0044 Rage LT Pro AGP 2X + 1002 4c42 Rage LT Pro AGP 2X + 1002 8001 Rage LT Pro AGP 2X + 1028 0085 Rage 3D LT Pro + 4c44 3D Rage LT Pro AGP-66 + 4c45 Rage Mobility M3 AGP + 4c46 Rage Mobility M3 AGP 2x + 1002 0155 IBM Thinkpad A22p + 1014 0155 IBM Thinkpad A22p + 1028 00b1 Latitude C600 + 4c47 3D Rage LT-G 215LG + 4c49 3D Rage LT Pro + 1002 0004 Rage LT Pro + 1002 0040 Rage LT Pro + 1002 0044 Rage LT Pro + 1002 4c49 Rage LT Pro + 4c4d Rage Mobility P/M AGP 2x + 0e11 b111 Armada M700 + 0e11 b160 Armada E500 + 1002 0084 Xpert 98 AGP 2X (Mobility) + 1014 0154 ThinkPad A20m/A21m + 1028 00aa Latitude CPt + 1028 00bb Latitude CPx + 1179 ff00 Satellite 1715XCDS laptop + 13bd 1019 PC-AR10 + 4c4e Rage Mobility L AGP 2x + 4c50 3D Rage LT Pro + 1002 4c50 Rage LT Pro + 4c51 3D Rage LT Pro + 4c52 Rage Mobility P/M + 1033 8112 Versa Note VXi + 4c53 Rage Mobility L + 4c54 264LT [Mach64 LT] + 4c57 Radeon Mobility M7 LW [Radeon Mobility 7500] + 1014 0517 ThinkPad T30 + 1014 0530 ThinkPad T42 2373-4WU + 1028 00e6 Radeon Mobility M7 LW (Dell Inspiron 8100) + 1028 012a Latitude C640 + 1043 1622 Mobility Radeon M7 (L3C/S) + 144d c006 Radeon Mobility M7 LW in vpr Matrix 170B4 + 4c58 Radeon RV200 LX [Mobility FireGL 7800 M7] + 4c59 Radeon Mobility M6 LY + 0e11 b111 Evo N600c + 1014 0235 ThinkPad A30/A30p (2652/2653) + 1014 0239 ThinkPad X22/X23/X24 + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 104d 8140 PCG-Z1SP laptop + 1509 1930 Medion MD9703 + 4c5a Radeon Mobility M6 LZ + 4c64 Radeon RV250 Ld [Radeon Mobility 9000 M9] + 4c65 Radeon RV250 Le [Radeon Mobility 9000 M9] + 4c66 Radeon RV250 [Mobility FireGL 9000] + 1014 054d ThinkPad T41 + 4c67 Radeon RV250 Lg [Radeon Mobility 9000 M9] +# Secondary chip to the Lf + 4c6e Radeon RV250 Ln [Radeon Mobility 9000 M9] (Secondary) + 4d46 Rage Mobility M4 AGP + 4d4c Rage Mobility M4 AGP + 4d52 Theater 550 PRO PCI [ATI TV Wonder 550] + 4d53 Theater 550 PRO PCIe + 4e44 Radeon R300 ND [Radeon 9700 Pro] + 1002 515e Radeon ES1000 + 1002 5965 Radeon ES1000 + 4e45 Radeon R300 NE [Radeon 9500 Pro] + 1002 0002 Radeon R300 NE [Radeon 9500 Pro] + 1681 0002 Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] + 4e46 R300 NF [Radeon 9600 TX] + 4e47 Radeon R300 NG [FireGL X1] + 4e48 Radeon R350 [Radeon 9800 Pro] + 4e49 Radeon R350 [Radeon 9800] + 4e4a R360 NJ [Radeon 9800 XT] + 1002 4e4a R360 [Radeon 9800 XT] + 4e4b R350 NK [FireGL X2] + 4e50 RV350 [Mobility Radeon 9600 M10] + 1025 005a TravelMate 290 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 144d c00c P35 notebook + 1462 0311 MSI M510A + 1734 1055 Amilo M1420W + 4e51 M10 NQ [Radeon Mobility 9600] + 4e52 RV350 [Mobility Radeon 9600 M10] + 144d c00c P35 notebook + 4e53 M10 NS [Radeon Mobility 9600] + 4e54 M10 NT [FireGL Mobility T2] + 4e56 M11 NV [FireGL Mobility T2e] + 4e64 Radeon R300 [Radeon 9700 Pro] (Secondary) + 4e65 Radeon R300 [Radeon 9500 Pro] (Secondary) + 1002 0003 Radeon R300 NE [Radeon 9500 Pro] + 1681 0003 Hercules 3D Prophet 9500 PRO [Radeon 9500 Pro] (Secondary) + 4e66 RV350 NF [Radeon 9600] (Secondary) + 4e67 Radeon R300 [FireGL X1] (Secondary) + 4e68 Radeon R350 [Radeon 9800 Pro] (Secondary) + 4e69 Radeon R350 [Radeon 9800] (Secondary) + 4e6a RV350 NJ [Radeon 9800 XT] (Secondary) + 1002 4e6a R360 [Radeon 9800 XT] (Secondary) + 1002 4e71 M10 NQ [Radeon Mobility 9600] + 4e71 M10 NQ [Radeon Mobility 9600] (Secondary) + 4f72 RV250 [Radeon 9000 Series] + 4f73 Radeon RV250 [Radeon 9000 Series] (Secondary) + 5041 Rage 128 PA/PRO + 5042 Rage 128 PB/PRO AGP 2x + 5043 Rage 128 PC/PRO AGP 4x + 5044 Rage 128 PD/PRO TMDS + 1002 0028 Rage 128 AIW + 1002 0029 Rage 128 AIW + 5045 Rage 128 PE/PRO AGP 2x TMDS + 5046 Rage 128 PF/PRO AGP 4x TMDS + 1002 0004 Rage Fury Pro + 1002 0008 Rage Fury Pro/Xpert 2000 Pro + 1002 0014 Rage Fury Pro + 1002 0018 Rage Fury Pro/Xpert 2000 Pro + 1002 0028 Rage 128 Pro AIW AGP + 1002 002a Rage 128 Pro AIW AGP + 1002 0048 Rage Fury Pro + 1002 2000 Rage Fury MAXX AGP 4x (TMDS) (VGA device) + 1002 2001 Rage Fury MAXX AGP 4x (TMDS) (Extra device?!) + 5047 Rage 128 PG/PRO + 5048 Rage 128 PH/PRO AGP 2x + 5049 Rage 128 PI/PRO AGP 4x + 504a Rage 128 PJ/PRO TMDS + 504b Rage 128 PK/PRO AGP 2x TMDS + 504c Rage 128 PL/PRO AGP 4x TMDS + 504d Rage 128 PM/PRO + 504e Rage 128 PN/PRO AGP 2x + 504f Rage 128 PO/PRO AGP 4x + 5050 Rage 128 PP/PRO TMDS [Xpert 128] + 1002 0008 Xpert 128 + 5051 Rage 128 PQ/PRO AGP 2x TMDS + 5052 Rage 128 PR/PRO AGP 4x TMDS + 5053 Rage 128 PS/PRO + 5054 Rage 128 PT/PRO AGP 2x + 5055 Rage 128 PU/PRO AGP 4x + 5056 Rage 128 PV/PRO TMDS + 5057 Rage 128 PW/PRO AGP 2x TMDS + 5058 Rage 128 PX/PRO AGP 4x TMDS + 5144 Radeon R100 QD [Radeon 7200] + 1002 0008 Radeon 7000/Radeon VE + 1002 0009 Radeon 7000/Radeon + 1002 000a Radeon 7000/Radeon + 1002 001a Radeon 7000/Radeon + 1002 0029 Radeon AIW + 1002 0038 Radeon 7000/Radeon + 1002 0039 Radeon 7000/Radeon + 1002 008a Radeon 7000/Radeon + 1002 00ba Radeon 7000/Radeon + 1002 0139 Radeon 7000/Radeon + 1002 028a Radeon 7000/Radeon + 1002 02aa Radeon AIW + 1002 053a Radeon 7000/Radeon + 5145 Radeon R100 QE + 5146 Radeon R100 QF + 5147 Radeon R100 QG + 5148 Radeon R200 QH [Radeon 8500] + 1002 010a FireGL 8800 64Mb + 1002 0152 FireGL 8800 128Mb + 1002 0162 FireGL 8700 32Mb + 1002 0172 FireGL 8700 64Mb + 5149 Radeon R200 QI + 514a Radeon R200 QJ + 514b Radeon R200 QK + 514c Radeon R200 QL [Radeon 8500 LE] + 1002 003a Radeon R200 QL [Radeon 8500 LE] + 1002 013a Radeon 8500 + 148c 2026 R200 QL [Radeon 8500 Evil Master II Multi Display Edition] + 1681 0010 Radeon 8500 [3D Prophet 8500 128Mb] + 174b 7149 Radeon R200 QL [Sapphire Radeon 8500 LE] + 514d Radeon R200 QM [Radeon 9100] + 514e Radeon R200 QN [Radeon 8500LE] + 514f Radeon R200 QO [Radeon 8500LE] + 5154 R200 QT [Radeon 8500] + 5155 R200 QU [Radeon 9100] + 5157 Radeon RV200 QW [Radeon 7500] + 1002 013a Radeon 7500 + 1002 0f2b ALL-IN-WONDER VE PCI + 1002 103a Dell Optiplex GX260 + 1458 4000 RV200 QW [RADEON 7500 PRO MAYA AR] + 148c 2024 RV200 QW [Radeon 7500LE Dual Display] + 148c 2025 RV200 QW [Radeon 7500 Evil Master Multi Display Edition] + 148c 2036 RV200 QW [Radeon 7500 PCI Dual Display] + 174b 7146 RV200 QW [Radeon 7500 LE] + 174b 7147 RV200 QW [Sapphire Radeon 7500LE] + 174b 7161 Radeon RV200 QW [Radeon 7500 LE] + 17af 0202 RV200 QW [Excalibur Radeon 7500LE] + 5158 Radeon RV200 QX [Radeon 7500] + 5159 Radeon RV100 QY [Radeon 7000/VE] + 1002 000a Radeon 7000/Radeon VE + 1002 000b Radeon 7000 + 1002 0038 Radeon 7000/Radeon VE + 1002 003a Radeon 7000/Radeon VE + 1002 00ba Radeon 7000/Radeon VE + 1002 013a Radeon 7000/Radeon VE + 1002 0908 XVR-100 (supplied by Sun) +# The IBM card doubles as an ATI PCI video adapter + 1014 029a Remote Supervisor Adapter II (RSA2) + 1014 02c8 eServer xSeries server mainboard + 1028 016c PowerEdge 1850 Embedded Radeon 7000/VE + 1028 016d PowerEdge 2850 Embedded Radeon 7000-M + 1028 0170 PowerEdge 6850 Embedded Radeon 7000/VE + 1028 019a PowerEdge SC1425 + 103c 1292 Radeon 7000 + 1043 c00a A7000/T/64M + 1458 4002 RV100 QY [RADEON 7000 PRO MAYA AV Series] + 148c 2003 RV100 QY [Radeon 7000 Multi-Display Edition] + 148c 2023 RV100 QY [Radeon 7000 Evil Master Multi-Display] + 174b 0280 Radeon RV100 QY [Radeon 7000/VE] + 174b 7112 RV100 QY [Sapphire Radeon VE 7000] + 174b 7c28 Sapphire Radeon VE 7000 DDR + 1787 0202 RV100 QY [Excalibur Radeon 7000] + 17ee 1001 Radeon 7000 64MB DDR + DVI + 515a Radeon RV100 QZ [Radeon 7000/VE] + 515e ES1000 + 1028 01bb PowerEdge 1955 Embedded ATI ES1000 + 1028 01df PowerEdge SC440 + 1028 01e6 PowerEdge 860 + 1028 01f0 PowerEdge R900 Embedded ATI ES1000 + 1028 0205 PowerEdge 2970 Embedded ATI ES1000 + 1028 020b PowerEdge T605 Embedded ATI ES1000 + 1028 020f PowerEdge R300 Embedded ATI ES1000 + 1028 0210 PowerEdge T300 Embedded ATI ES1000 + 1028 0221 PowerEdge R805 Embedded ATI ES1000 + 1028 0223 PowerEdge R905 Embedded ATI ES1000 + 1028 0225 PowerEdge T105 Embedded ATI ES1000 + 1028 023c PowerEdge R200 Embedded ATI ES1000 + 103c 1304 Integrity iLO2 Advanced KVM VGA [AD307A] + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 S5000PSLSATA Server Board + 515f ES1000 + 5168 Radeon R200 Qh + 5169 Radeon R200 Qi + 516a Radeon R200 Qj + 516b Radeon R200 Qk +# This one is not in ATI documentation, but is in XFree86 source code + 516c Radeon R200 Ql + 5245 Rage 128 RE/SG + 1002 0008 Xpert 128 + 1002 0028 Rage 128 AIW + 1002 0029 Rage 128 AIW + 1002 0068 Rage 128 AIW + 5246 Rage 128 RF/SG AGP + 1002 0004 Magnum/Xpert 128/Xpert 99 + 1002 0008 Magnum/Xpert128/X99/Xpert2000 + 1002 0028 Rage 128 AIW AGP + 1002 0044 Rage Fury/Xpert 128/Xpert 2000 + 1002 0068 Rage 128 AIW AGP + 1002 0448 Rage Fury + 5247 Rage 128 RG + 524b Rage 128 RK/VR + 524c Rage 128 RL/VR AGP + 1002 0008 Xpert 99/Xpert 2000 + 1002 0088 Xpert 99 + 5345 Rage 128 SE/4x + 5346 Rage 128 SF/4x AGP 2x + 1002 0048 RAGE 128 16MB VGA TVOUT AMC PAL + 5347 Rage 128 SG/4x AGP 4x + 5348 Rage 128 SH + 534b Rage 128 SK/4x + 534c Rage 128 SL/4x AGP 2x + 534d Rage 128 SM/4x AGP 4x + 1002 0008 Xpert 99/Xpert 2000 + 1002 0018 Xpert 2000 + 534e Rage 128 4x + 5354 Mach 64 VT + 1002 5654 Mach 64 reference + 5446 Rage 128 Pro Ultra TF + 1002 0004 Rage Fury Pro + 1002 0008 Rage Fury Pro/Xpert 2000 Pro + 1002 0018 Rage Fury Pro/Xpert 2000 Pro + 1002 0028 Rage 128 AIW Pro AGP + 1002 0029 Rage 128 AIW + 1002 002a Rage 128 AIW Pro AGP + 1002 002b Rage 128 AIW + 1002 0048 Xpert 2000 Pro + 544c Rage 128 Pro Ultra TL + 5452 Rage 128 Pro Ultra TR + 1002 001c Rage 128 Pro 4XL + 103c 1279 Rage 128 Pro 4XL + 5453 Rage 128 Pro Ultra TS + 5454 Rage 128 Pro Ultra TT + 5455 Rage 128 Pro Ultra TU + 5460 M22 [Mobility Radeon X300] + 1775 1100 CR11/VR11 Single Board Computer + 5461 M22 [Mobility Radeon X300] + 5462 M24 [Radeon Mobility X600] + 5464 M22 [FireGL GL] + 5548 R423 UH [Radeon X800 (PCIE)] + 5549 R423 UI [Radeon X800PRO (PCIE)] + 554a R423 UJ [Radeon X800LE (PCIE)] + 554b R423 UK [Radeon X800SE (PCIE)] + 554c Radeon X800 XTP (R430) (PCIE) + 554d R430 [Radeon X800 XL] (PCIe) + 1458 2124 GV-R80L256V-B (AGP) + 554e Radeon X800 SE (R430) (PCIE) + 554f R430 [Radeon X800 (PCIE)] + 5550 R423 [FireGL V7100] + 5551 R423 [FireGL V5100 (PCIE)] + 5552 R423 UR [FireGL V5100 (PCIE)] + 5554 R423 UT [FireGL V7100 (PCIE)] + 5555 R430 GL PRO + 5569 R423 UI [Radeon X800PRO (PCIE)] (Secondary) + 556b Radeon R423 UK (PCIE) [X800 SE] (Secondary) + 556d R430 [Radeon X800 XL] (PCIe) (Secondary) + 1458 2125 GV-R80L256V-B (AGP) + 556f R430 [Radeon X800] (PCIE) (Secondary) + 5571 R423GL-SE [FireGL V5100 (PCIE)] (Secondary) + 564a M26 [Mobility FireGL V5000] + 564b M26 [Mobility FireGL V5000] + 564f M26 [Radeon Mobility X700 XL (PCIE)] + 5652 M26 [Radeon Mobility X700] + 5653 Radeon Mobility X700 (PCIE) + 1025 0080 Aspire 5024WLMi + 103c 0940 HP Compaq NW8240 Mobile Workstation + 5654 264VT [Mach64 VT] + 1002 5654 Mach64VT Reference + 5655 264VT3 [Mach64 VT3] + 5656 264VT4 [Mach64 VT4] + 5657 Radeon X550/X700 Series (RV410) + 5830 RS300 Host Bridge + 5831 RS300 Host Bridge + 5832 RS300 Host Bridge + 5833 Radeon 9100 IGP Host Bridge + 5834 Radeon 9100 IGP + 5835 RS300M AGP [Radeon Mobility 9100IGP] + 5838 Radeon 9100 IGP AGP Bridge + 5854 Radeon Xpress Series (RS480) + 5874 Radeon Xpress Series (RS482) + 5940 RV280 [Radeon 9200 PRO] (Secondary) + 17af 2021 Excalibur Radeon 9250 (Secondary) + 5941 RV280 [Radeon 9200] (Secondary) + 1458 4019 Gigabyte Radeon 9200 + 174b 7c12 Sapphire Radeon 9200 + 17af 200d Excalibur Radeon 9200 + 18bc 0050 GeXcube GC-R9200-C3 (Secondary) + 5944 RV280 [Radeon 9200 SE (PCI)] + 5950 RS480 Host Bridge + 1025 0080 Aspire 5024WLMMi + 103c 280a DC5750 Microtower + 103c 308b MX6125 + 1462 0131 MS-1013 Notebook + 1462 7217 Aspire L250 + 5951 Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge + 5952 RD580 [CrossFire Xpress 3200] Chipset Host Bridge + 5954 RS480 [Radeon Xpress 200G Series] + 1002 5954 RV370 [Radeon Xpress 200G Series] + 5955 Radeon XPRESS 200M 5955 (PCIE) + 1002 5955 RS480 0x5955 [Radeon XPRESS 200M 5955 (PCIE)] + 103c 308b MX6125 + 1462 0131 MS-1013 Notebook + 5956 RD790 Northbridge only dual slot PCI-e_GFX and HT3 K8 part + 5957 RX780/RX790 Chipset Host Bridge + 1849 5957 A770CrossFire Motherboard + 5958 RD780 Northbridge only dual slot PCI-e_GFX and HT1 K8 part + 5960 RV280 [Radeon 9200 PRO] + 17af 2020 Excalibur Radeon 9250 + 5961 RV280 [Radeon 9200] + 1002 2f72 All-in-Wonder 9200 Series + 1019 4c30 Radeon 9200 VIVO + 12ab 5961 YUAN SMARTVGA Radeon 9200 + 1458 4018 Gigabyte Radeon 9200 + 174b 7c13 Sapphire Radeon 9200 + 17af 200c Excalibur Radeon 9200 + 18bc 0050 Radeon 9200 Game Buster + 18bc 0051 GeXcube GC-R9200-C3 + 18bc 0053 Radeon 9200 Game Buster VIVO + 5962 RV280 [Radeon 9200] + 5964 RV280 [Radeon 9200 SE] + 1002 5964 Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz + 1043 c006 ASUS Radeon 9200 SE / TD / 128M + 1458 4018 Radeon 9200 SE + 1458 4032 Radeon 9200 SE 128MB + 147b 6191 R9200SE-DT + 148c 2073 CN-AG92E + 174b 7c13 Sapphire Radeon 9200 SE + 1787 5964 Excalibur 9200SE VIVO 128M + 17af 2012 Radeon 9200 SE Excalibur + 18bc 0170 Sapphire Radeon 9200 SE 128MB Game Buster + 18bc 0173 GC-R9200L(SE)-C3H [Radeon 9200 Game Buster] + 5965 RV280 [FireMV 2200 PCI] + 5969 ES1000 + 5974 RS482 [Radeon Xpress 200] + 103c 280a DC5750 Microtower + 1462 7141 Aspire L250 + 5975 RS482 [Radeon Xpress 200M] + 5978 RD790 PCI to PCI bridge (external gfx0 port A) + 1849 5957 A770CrossFire Motherboard + 5979 RD790 PCI to PCI bridge (external gfx0 port B) + 597a RD790 PCI to PCI bridge (PCI express gpp port A) + 597b RD790 PCI to PCI bridge (PCI express gpp port B) + 597c RD790 PCI to PCI bridge (PCI express gpp port C) + 597d RD790 PCI to PCI bridge (PCI express gpp port D) + 597e RD790 PCI to PCI bridge (PCI express gpp port E) + 1849 5957 A770CrossFire Motherboard + 597f RD790 PCI to PCI bridge (PCI express gpp port F) + 1849 5957 A770CrossFire Motherboard + 5980 RD790 PCI to PCI bridge (external gfx1 port A) + 5981 RD790 PCI to PCI bridge (external gfx1 port B) + 5982 RD790 PCI to PCI bridge (NB-SB link) + 5a10 RD890 Northbridge only dual slot (2x16) PCI-e GFX Hydra part + 5a11 RD890 Northbridge only single slot PCI-e GFX Hydra part + 5a12 RD890 Northbridge only dual slot (2x8) PCI-e GFX Hydra part + 5a13 RD890 PCI to PCI bridge (external gfx0 port A) + 5a14 RD890 PCI to PCI bridge (external gfx0 port B) + 5a15 RD890 PCI to PCI bridge (PCI express gpp port A) + 5a16 RD890 PCI to PCI bridge (PCI express gpp port B) + 5a17 RD890 PCI to PCI bridge (PCI express gpp port C) + 5a18 RD890 PCI to PCI bridge (PCI express gpp port D) + 5a19 RD890 PCI to PCI bridge (PCI express gpp port E) + 5a1a RD890 PCI to PCI bridge (PCI express gpp port F) + 5a1b RD890 PCI to PCI bridge (PCI express gpp port G) + 5a1c RD890 PCI to PCI bridge (PCI express gpp port H) + 5a1d RD890 PCI to PCI bridge (external gfx1 port A) + 5a1e RD890 PCI to PCI bridge (external gfx1 port B) + 5a1f RD890 PCI to PCI bridge (NB-SB link) + 5a33 Radeon Xpress 200 Host Bridge + 5a34 RS480 PCI-X Root Port +# Comes in pair with 5a3f + 5a36 RS480 PCI Bridge + 5a37 RS480 PCI Bridge + 5a38 RS480 PCI Bridge +# Comes in pair with 5a38 + 5a39 RS480 PCI Bridge + 5a3f RS480 PCI Bridge + 1462 7217 Aspire L250 + 5a41 RS400 [Radeon Xpress 200] + 5a42 RS400 [Radeon Xpress 200M] + 5a43 Radeon Xpress Series (RS400) + 5a61 RC410 [Radeon Xpress 200] + 5a62 RC410 [Radeon Xpress 200M] + 5a63 Radeon Xpress Series (RC410) + 5b60 RV370 5B60 [Radeon X300 (PCIE)] + 1043 002a Extreme AX300SE-X + 1043 032e Extreme AX300/TD + 1458 2102 GV-RX30S128D (X300SE) + 1462 0400 RX300SE-TD128E (MS-8940 REV:200) + 1462 0402 RX300SE-TD128E (MS-8940) + 174b 0500 Radeon X300 (PCIE) + 196d 1086 X300SE HM + 5b62 RV380 [Radeon X600 (PCIE)] + 5b63 RV370 [Sapphire X550 Silent] + 5b64 RV370 5B64 [FireGL V3100 (PCIE)] + 5b65 RV370 5B65 [FireGL D1100 (PCIE)] + 5b66 RV370X + 5b70 RV370 [Radeon X300SE] + 1462 0403 RX300SE-TD128E (MS-8940) (secondary display) + 174b 0501 Radeon X300SE + 196d 1087 X300SE HM + 5b72 RV380 [Radeon X600] + 5b73 RV370 secondary [Sapphire X550 Silent] + 5b74 RV370 5B64 [FireGL V3100 (PCIE)] (Secondary) + 5b75 RV370 5B75 [FireGL D1100 (PCIE)] (Secondary) + 5c61 M9+ 5C61 [Radeon Mobility 9200 (AGP)] + 5c63 M9+ 5C63 [Radeon Mobility 9200 (AGP)] + 1002 5c63 Apple iBook G4 2004 + 144d c00c P30 notebook + 5d44 RV280 [Radeon 9200 SE] (Secondary) + 1458 4019 Radeon 9200 SE (Secondary) + 1458 4032 Radeon 9200 SE 128MB + 147b 6190 R9200SE-DT (Secondary) + 174b 7c12 Sapphire Radeon 9200 SE (Secondary) + 1787 5965 Excalibur 9200SE VIVO 128M (Secondary) + 17af 2013 Radeon 9200 SE Excalibur (Secondary) + 18bc 0171 Radeon 9200 SE 128MB Game Buster (Secondary) + 18bc 0172 GC-R9200L(SE)-C3H [Radeon 9200 Game Buster] + 5d45 RV280 [FireMV 2200 PCI] (secondary) + 5d48 M28 [Radeon Mobility X800XT] + 5d49 M28 [Mobility FireGL V5100] + 5d4a Mobility Radeon X800 + 5d4c Radeon X850 (PCIE) + 5d4d R480 [Radeon X850XT Platinum (PCIE)] + 5d4e Radeon X850 SE (R480) (PCIE) + 5d4f R480 [Radeon X800 GTO (PCIE)] + 5d50 FireGL V7200 (R480) (PCIE) + 5d51 R480 GL 12P + 5d52 R480 [Radeon X850XT (PCIE)] (Primary) + 1002 0b12 PowerColor X850XT PCIe (Primary) + 1002 0b13 PowerColor X850XT PCIe (Secondary) + 5d57 R423 5F57 [Radeon X800XT (PCIE)] + 5d6d R480 [Radeon X850XT Platinum (PCIE)] (Secondary) + 5d6f R480 [Radeon X800 GTO (PCIE)] (Secondary) + 5d72 R480 [Radeon X850XT (PCIE)] (Secondary) + 5d77 R423 5F57 [Radeon X800XT (PCIE)] (Secondary) + 5e48 RV410 [FireGL V5000] + 5e49 RV410 [FireGL V3300] + 5e4a RV410 [Radeon X700XT] + 5e4b RV410 [Radeon X700 Pro (PCIE)] + 5e4c RV410 [Radeon X700SE] + 5e4d RV410 [Radeon X700 (PCIE)] + 148c 2116 PowerColor Bravo X700 + 5e4f RV410 [Radeon X700] + 5e6b RV410 [Radeon X700 Pro (PCIE)] (Secondary) + 5e6d RV410 [Radeon X700 (PCIE)] (Secondary) + 148c 2117 PowerColor Bravo X700 + 5f57 R423 [Radeon X800XT (PCIE)] + 700f PCI Bridge [IGP 320M] + 7010 PCI Bridge [IGP 340M] + 7100 R520 [Radeon X1800] + 7102 M58 [Radeon Mobility X1800] + 7103 M58 [Mobility FireGL V7200] + 7104 R520GL [FireGL V7200] (Primary) + 7105 R520 [FireGL] + 7106 M58 [Mobility FireGL V7100] + 7108 M58 [Radeon Mobility X1800] + 7109 R520 [Radeon X1800] + 1002 0322 All-in-Wonder X1800XL + 1002 0d02 Radeon X1800 CrossFire Edition + 710a R520 [Radeon X1800] + 710b R520 [Radeon X1800] + 710c R520 [Radeon X1800] + 7120 R520 [Radeon X1800] (Secondary) + 7124 R520GL [FireGL V7200] (Secondary) + 7129 R520 [Radeon X1800] (Secondary) + 1002 0323 All-in-Wonder X1800XL (Secondary) + 1002 0d03 Radeon X1800 CrossFire Edition (Secondary) + 7140 RV515 [Radeon X1600] + 7142 RV515 PRO [Radeon X1300/X1550 Series] + 1002 0322 All-in-Wonder 2006 PCI-E Edition + 1043 0142 EAX1300PRO/TD/256M + 7143 RV505 [Radeon X1550 Series] + 7145 Radeon Mobility X1400 + 17aa 2006 Thinkpad T60 model 2007 + 7146 RV515 [Radeon X1300] + 1002 0322 All-in-Wonder 2006 PCI-E Edition + 1545 1996 Radeon X1300 512MB PCI-e + 7147 RV505 [Radeon X1550 64-bit] + 7149 M52 [Mobility Radeon X1300] + 714a M52 [Mobility Radeon X1300] + 714b M52 [Mobility Radeon X1300] + 714c M52 [Mobility Radeon X1300] + 714d RV515 [Radeon X1300] + 714e RV515LE [Radeon X1300] + 7152 RV515GL [FireGL V3300] (Primary) + 7153 RV515GL [FireGL V3350] + 715e RV515 [Radeon X1300] + 715f RV505 CE [Radeon X1550 64-bit] + 7162 RV515 PRO [Radeon X1300/X1550 Series] (Secondary) + 1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary) + 7163 RV505 [Radeon X1550 Series] (Secondary) + 7166 RV515 [Radeon X1300] (Secondary) + 1002 0323 All-in-Wonder 2006 PCI-E Edition (Secondary) + 1545 1997 Radeon X1300 512MB PCI-e (Secondary) + 716e RV515LE [Radeon X1300] Secondary + 7172 RV515GL [FireGL V3300] (Secondary) + 7173 RV515GL [FireGL V3350] (Secondary) + 7180 RV516 [Radeon X1300/X1550 Series] + 7181 RV516 XT Radeon X1600 Series (Primary) + 7183 RV516 [Radeon X1300/X1550 Series] + 7186 RV515 [Radeon Mobility X1450] + 7187 RV516 [Radeon X1300/X1550 Series] + 7188 M64-S [Mobility Radeon X2300] + 103c 30c1 6910p + 718a Mobility Radeon X2300 + 718c M62CSP64 [Mobility Radeon X1350] + 718d M64CSP128 [Mobility Radeon X1450] + 7193 RV516 [Radeon X1550 Series] + 7196 RV516 [Mobility Radeon X1350] + 719b FireMV 2250 + 719f RV516LE [Radeon X1550 64-bit] + 71a0 RV516 [Radeon X1300/X1550 Series] (Secondary) + 71a1 RV516 XT Radeon X1600 Series (Secondary) + 71a3 RV516 [Radeon X1300 Pro] (Secondary) + 71a7 RV516 [Radeon X1300/X1550 Series] (Secondary) + 71bb FireMV 2250 (Secondary) + 71c0 RV530 [Radeon X1600] + 71c1 Radeon X1650 Pro + 71c2 RV530 [Radeon X1600] + 71c4 M56GL [Mobility FireGL V5200] + 17aa 2007 ThinkPad T60p + 71c5 M56P [Radeon Mobility X1600] + 103c 309f Compaq nx9420 Notebook + 103c 30a3 Compaq NW8440 + 1043 10b2 A6J-Q008 + 106b 0080 MacBook Pro + 71c6 RV530LE [Radeon X1600/X1650 PRO] + 71c7 RV535 [Radeon X1650 Series] + 71ce RV530LE [Radeon X1600] + 71d2 RV530GL [FireGL V3400] + 71d4 M56GL [Mobility FireGL V5250] + 71d5 M66-P [Mobility Radeon X1700] + 71d6 M66-XT [Mobility Radeon X1700] + 71de RV530LE [Radeon X1600] + 71e0 RV530 [Radeon X1600] (Secondary) + 71e1 Radeon X1650 Pro (Secondary) + 71e2 RV530 [Radeon X1600] (Secondary) + 71e6 RV530LE [Radeon X1650 PRO] (Secondary) + 71e7 RV535 [Radeon X1650 Series] + 71f2 RV530GL [FireGL V3400 (Secondary)] + 7210 M71 [Mobility Radeon X2100] + 7211 M71 [Mobility Radeon X2100] (Secondary) + 7240 R580 [Radeon X1900] + 7241 R580 [Radeon X1900] + 7242 R580 [Radeon X1900] + 7243 R580 [Radeon X1900] + 7244 R580 [Radeon X1900] + 7245 R580 [Radeon X1900] + 7246 R580 [Radeon X1900] + 7247 R580 [Radeon X1900] + 7248 R580 [Radeon X1900] + 7249 R580 [Radeon X1900 XT] (Primary) + 724a R580 [Radeon X1900] + 724b R580 [Radeon X1900] + 1002 0b12 Radeon X1900 (Primary) + 1002 0b13 Radeon X1900 (Secondary) + 724c R580 [Radeon X1900] + 724d R580 [Radeon X1900] + 724e R580 [AMD Stream Processor] + 7269 R580 [Radeon X1900 XT] (Secondary) + 726b R580 [Radeon X1900] + 726e R580 [AMD Stream Processor] (Secondary) + 7280 RV570 [Radeon X1950 Pro] + 7288 Radeon X1950 GT + 7291 Radeon X1650 XT (Primary) (PCIE) + 7293 Radeon X1650 Series + 72a0 RV570 [Radeon X1950 Pro] (secondary) + 72a8 Radeon X1950 GT (Secondary) + 72b1 Radeon X1650 XT (Secondary) (PCIE) + 72b3 Radeon X1650 Series (Secondary) + 7833 Radeon 9100 IGP Host Bridge + 7834 Radeon 9100 PRO IGP + 7835 Radeon Mobility 9200 IGP + 7838 Radeon 9100 IGP PCI/AGP Bridge + 7910 RS690 Host Bridge + 17f2 5000 KI690-AM2 Motherboard + 7911 RS690 Host Bridge + 7912 RS690 PCI to PCI Bridge (Internal gfx) + 7913 RS690 PCI to PCI Bridge (PCI Express Graphics Port 0) + 7915 RS690 PCI to PCI Bridge (PCI Express Port 1) + 7916 RS690 PCI to PCI Bridge (PCI Express Port 2) + 7917 RS690 PCI to PCI Bridge (PCI Express Port 3) + 1002 7910 RS690 PCI to PCI Bridge + 7919 Radeon X1200 Series Audio Controller + 17f2 5000 KI690-AM2 Motherboard + 791e RS690 [Radeon X1200 Series] + 1462 7327 K9AG Neo2 + 17f2 5000 KI690-AM2 Motherboard + 791f RS690M [Radeon X1200 Series] + 7930 Radeon Xpress 7930 Host Bridge + 7932 RS7932 PCI Bridge + 7933 RS7933 PCI Bridge + 7936 RS7936 PCI Bridge + 793b RS600 audio device [Radeon Xpress 12xx Series] + 793f RS600 [Radeon Xpress 1200 Series] + 7941 RS600 [Radeon Xpress 1200 Series] + 7942 Radeon Xpress 1250 + 796e Radeon 2100 + 7c37 RV350 AQ [Radeon 9600 SE] + 9400 R600 [Radeon HD 2900 Series] + 1002 3000 Sapphire Radeon HD 2900 XT + 1002 3142 HIS Radeon HD 2900XT 512MB GDDR3 VIVO PCIe + 9403 R600 [Radeon HD 2900 PRO] + 940a R600GL [Fire GL V8650] + 940b R600GL [Fire GL V8600] + 940f R600 [FireGL V7600] + 9440 RV770 [Radeon HD 4870] + 9441 R700 [Radeon HD 4870 X2] + 9442 RV770 [Radeon HD 4850] + 174b e810 Sapphire HD 4850 512MB GDDR3 PCI-E Dual Slot Fansink + 9443 R700 [Radeon HD 4850] + 944a M98L [Mobility Radeon HD 4850] + 944c RV770 LE [Radeon HD 4800 Series] + 9450 RV770 [FireStream 9270] + 9452 RV770 [FireStream 9250] + 945a M98 XT [Mobility Radeon HD 4870] + 9460 RV790 [Radeon HD 4800 Series] + 9480 M96 [Mobility Radeon HD 4650] + 103c 3628 ATI Mobility Radeon HD 4650 [dv6-1190en] + 9489 M96 XT [Mobility FireGL V5725] + 9490 RV730XT [Radeon HD 4670] + 174b e880 Radeon HD 4670 512MB DDR3 + 9491 M96 CSP [ATI RADEON E4690] + 9495 HD 4650 + 1002 9495 RV730 XT [PowerColor Radeon HD4670 AGP 1GB DDR] + 1458 0028 HD4650 + 9498 RV730 PRO [Radeon HD 4650] + 949f RV730 [FirePro V5700] + 94a0 Mobility Radeon HD 4830 [M97] + 94a1 [M97 XT] Mobility Radeon HD 4860 + 94a3 M97 GL [ATI FirePro M7740] + 94b3 Radeon HD 4770 [RV740] + 94b4 RV740 LE [ATI Radeon HD 4700 Series] + 94c1 RV610 [Radeon HD 2400 XT] + 1028 0211 Optiplex 755 + 1028 0d02 Optiplex 755 + 94c3 RV610 video device [Radeon HD 2400 PRO] + 1002 94c3 Radeon HD 2400PRO + 174b e400 Sapphire HD 2400 PRO video device + 18bc 3550 GeCube Radeon HD2400 PRO + 94c4 RV610 LE AGP [Radeon HD 2400 PRO AGP] + 94c8 Radeon HD 2400 XT + 94c9 Mobility Radeon HD 2400 + 1002 94c9 Radeon HD2400 + 94cb Radeon E2400 + 94cc RV 610LE PCI [Radeon HD 2400] + 9501 Radeon HD 3870 + 9504 Mobility Radeon HD 3850 + 9505 RV670PRO [Radeon HD 3850] + 9507 RV670 [Radeon HD 3850] + 9508 M88 XT Mobility Radeon HD 3870] + 950f R680 [Radeon HD 3870 x2] + 9511 RV670 [FireGL 7700] + 9515 RV670 AGP [Radeon HD 3850] + 9519 RV670 [FireStream 9170] + 9540 RV710 [Radeon HD 4550] + 954f RV710 [Radeon HD 4350] + 9552 M92 LP [Mobility Radeon HD 4300 Series] + 9553 M92 [Mobility Radeon HD 4500 Series] + 9555 M93 [Mobility Radeon HD 4500 Series] + 9559 Mobility Radeon HD 3600 Series + 9581 M76 [Radeon Mobility HD 2600 Series] + 9583 M76XT [Mobility Radeon HD 2600 XT] + 9586 RV 630 XT AGP [Radeon HD 2600 XT AGP] + 9587 RV630 PRO AGP [Radeon HD 2600 PRO AGP] + 9588 RV630 [Radeon HD 2600XT] + 1458 216c Radeon HD 2600 XT, 256MB GDDR3, 2x DVI, TV-out, PCIe (GV-RX26T256H) + 9589 RV630 [Radeon HD 2600 Series] + 958c RV630GL [FireGL v5600] + 958d RV630 [FireGL V3600] + 9591 Mobility Radeon HD 3650 + 1002 9591 Mobility Radeon HD 3650 + 9593 Radeon Mobility HD 3670 + 9595 M86GL [Mobility FireGL V5700] + 9596 RV635 PRO AGP [Radeon HD 3650] + 9598 Mobility Radeon HD 3600 Series + 1002 9598 Mobility Radeon HD 3600 + 1043 01d6 EAH3650 Silent + 95c0 Mobility Radeon HD 3470 + 1002 95c0 Mobility Radeon HD 3470 + 95c4 Mobility Radeon HD 3400 Series + 1002 95c4 Mobility Radeon HD 3400 + 95c5 Mobility Radeon HD 3450 + 1002 95c5 Mobility Radeon HD 3450 + 95c6 RV620 LE AGP [Radeon HD 3450] + 95c9 RV620 PCI [Radeon HD 3450] + 95cc RV620 [ATI FireGL V3700] + 95cd RV620 [FireMV 2450] + 95ce RV620 [FirePro 2260] + 95cf RV620 [FirePro 2260] + 960f RS780 Azalia controller + 9610 Radeon HD 3200 Graphics + 1458 d000 GA-MA78GM-S2H Motherboard + 9611 Radeon 3100 Graphics + 9612 RS780M/RS780MN [Radeon HD 3200 Graphics] + 9613 RS780MC [Radeon HD 3100 Graphics] + 9614 Radeon HD 3300 Graphics + 9615 RS780E [AMD 780E] + 9616 760G [Radeon 3000] + aa00 R600 Audio Device [Radeon HD 2900 Series] + aa08 RV630/M76 audio device [Radeon HD 2600 Series] + aa10 RV610 audio device [Radeon HD 2400 PRO] + 174b aa10 Sapphire HD 2400 PRO audio device + 18bc aa10 GeCube Radeon HD 2400 PRO HDCP-capable digital-only audio device + aa18 Radeon HD 3870 Audio device + aa20 RV635 Audio device [Radeon HD 3600 Series] + aa28 RV620 Audio device [Radeon HD 34xx Series] + aa30 HD48x0 audio + 174b aa30 Sapphire HD 4850 512MB GDDR3 PCI-E Dual Slot Fansink + aa38 R700 Audio Device [Radeon HD 4000 Series] + 103c 3628 ATI RV710/730 [dv6-1190en] + 174b aa38 R700 Audio Device [Radeon HD 4000 Series] + ac00 Theater 600 Pro + cab0 AGP Bridge [IGP 320M] + cab2 RS200/RS200M AGP Bridge [IGP 340M] + cab3 R200 AGP Bridge [Mobility Radeon 7000 IGP] + cbb2 RS200/RS200M AGP Bridge [IGP 340M] +1003 ULSI Systems + 0201 US201 +1004 VLSI Technology Inc + 0005 82C592-FC1 + 0006 82C593-FC1 + 0007 82C594-AFC2 + 0008 82C596/7 [Wildcat] + 0009 82C597-AFC2 + 000c 82C541 [Lynx] + 000d 82C543 [Lynx] + 0101 82C532 + 0102 82C534 [Eagle] + 0103 82C538 + 0104 82C535 + 0105 82C147 + 0200 82C975 + 0280 82C925 + 0304 QSound ThunderBird PCI Audio + 1004 0304 QSound ThunderBird PCI Audio + 122d 1206 DSP368 Audio + 1483 5020 XWave Thunder 3D Audio + 0305 QSound ThunderBird PCI Audio Gameport + 1004 0305 QSound ThunderBird PCI Audio Gameport + 122d 1207 DSP368 Audio Gameport + 1483 5021 XWave Thunder 3D Audio Gameport + 0306 QSound ThunderBird PCI Audio Support Registers + 1004 0306 QSound ThunderBird PCI Audio Support Registers + 122d 1208 DSP368 Audio Support Registers + 1483 5022 XWave Thunder 3D Audio Support Registers + 0307 Thunderbird + 0308 Thunderbird + 0702 VAS96011 [Golden Gate II] + 0703 Tollgate +1005 Avance Logic Inc. [ALI] + 2064 ALG2032/2064 + 2128 ALG2364A + 2301 ALG2301 + 2302 ALG2302 + 2364 ALG2364 + 2464 ALG2364A + 2501 ALG2564A/25128A +1006 Reply Group +1007 NetFrame Systems Inc +1008 Epson +100a Phoenix Technologies +100b National Semiconductor Corporation + 0001 DP83810 + 0002 87415/87560 IDE + 000e 87560 Legacy I/O + 000f FireWire Controller + 0011 NS87560 National PCI System I/O + 0012 USB Controller + 0020 DP83815 (MacPhyter) Ethernet Controller + 103c 0024 Pavilion ze4400 builtin Network + 12d9 000c Aculab E1/T1 PMXc cPCI carrier card + 1385 f311 FA311 / FA312 (FA311 with WoL HW) + 0021 PC87200 PCI to ISA Bridge + 0022 DP83820 10/100/1000 Ethernet Controller + 1186 4900 DGE-500T + 1385 621a GA621 + 1385 622a GA622T + 0028 Geode GX2 Host Bridge + 002a CS5535 South Bridge + 002b CS5535 ISA bridge + 002d CS5535 IDE + 002e CS5535 Audio + 002f CS5535 USB + 0030 Geode GX2 Graphics Processor + 0035 DP83065 [Saturn] 10/100/1000 Ethernet Controller + 0500 SCx200 Bridge + 0501 SCx200 SMI + 0502 SCx200, SC1100 IDE controller + 100b 0502 IDE Controller + 0503 SCx200, SC1100 Audio Controller + 100b 0503 XpressAudio controller + 0504 SCx200 Video + 0505 SCx200 XBus + 0510 SC1100 Bridge + 100b 0500 GPIO and LPC support bridge + 0511 SC1100 SMI & ACPI + 100b 0501 SC1100 SMI & ACPI bridge + 0515 SC1100 XBus + 100b 0505 SC1100 PCI to XBus bridge + d001 87410 IDE +100c Tseng Labs Inc + 3202 ET4000/W32p rev A + 3205 ET4000/W32p rev B + 3206 ET4000/W32p rev C + 3207 ET4000/W32p rev D + 3208 ET6000 + 4702 ET6300 +100d AST Research Inc +100e Weitek + 9000 P9000 Viper + 9001 P9000 Viper + 9002 P9000 Viper + 9100 P9100 Viper Pro/SE +1010 Video Logic, Ltd. +1011 Digital Equipment Corporation + 0001 DECchip 21050 + 0002 DECchip 21040 [Tulip] + 0004 DECchip 21030 [TGA] + 0007 NVRAM [Zephyr NVRAM] + 0008 KZPSA [KZPSA] + 0009 DECchip 21140 [FasterNet] + 1025 0310 21140 Fast Ethernet + 10b8 2001 SMC9332BDT EtherPower 10/100 + 10b8 2002 SMC9332BVT EtherPower T4 10/100 + 10b8 2003 SMC9334BDT EtherPower 10/100 (1-port) + 1109 2400 ANA-6944A/TX Fast Ethernet + 1112 2300 RNS2300 Fast Ethernet + 1112 2320 RNS2320 Fast Ethernet + 1112 2340 RNS2340 Fast Ethernet + 1113 1207 EN-1207-TX Fast Ethernet + 1186 1100 DFE-500TX Fast Ethernet + 1186 1112 DFE-570TX Fast Ethernet + 1186 1140 DFE-660 Cardbus Ethernet 10/100 + 1186 1142 DFE-660 Cardbus Ethernet 10/100 + 11f6 0503 Freedomline Fast Ethernet + 1282 9100 AEF-380TXD Fast Ethernet + 1385 1100 FA310TX Fast Ethernet + 2646 0001 KNE100TX Fast Ethernet + 000a 21230 Video Codec + 000d PBXGB [TGA2] + 000f PCI-to-PDQ Interface Chip [PFI] + 1011 def1 FDDI controller (DEFPA) + 103c def1 FDDI controller (3X-DEFPA) + 0014 DECchip 21041 [Tulip Pass 3] + 1186 0100 DE-530+ + 0016 DGLPB [OPPO] + 0017 PV-PCI Graphics Controller (ZLXp-L) + 0018 Memory Channel interface + 0019 DECchip 21142/43 + 1011 500a DE500A Fast Ethernet + 1011 500b DE500B Fast Ethernet + 1014 0001 10/100 EtherJet Cardbus + 1025 0315 ALN315 Fast Ethernet + 1033 800c PC-9821-CS01 100BASE-TX Interface Card + 1033 800d PC-9821NR-B06 100BASE-TX Interface Card + 103c 125a 10/100Base-TX (PCI) [A5506B] + 108d 0016 Rapidfire 2327 10/100 Ethernet + 108d 0017 GoCard 2250 Ethernet 10/100 Cardbus + 10b8 2005 SMC8032DT Extreme Ethernet 10/100 + 10b8 8034 SMC8034 Extreme Ethernet 10/100 + 10ef 8169 Cardbus Fast Ethernet + 1109 2a00 ANA-6911A/TX Fast Ethernet + 1109 2b00 ANA-6911A/TXC Fast Ethernet + 1109 3000 ANA-6922/TX Fast Ethernet + 1113 1207 Cheetah Fast Ethernet + 1113 2220 Cardbus Fast Ethernet + 115d 0002 Cardbus Ethernet 10/100 + 1179 0203 Fast Ethernet + 1179 0204 Cardbus Fast Ethernet + 1186 1100 DFE-500TX Fast Ethernet + 1186 1101 DFE-500TX Fast Ethernet + 1186 1102 DFE-500TX Fast Ethernet + 1186 1112 DFE-570TX Quad Fast Ethernet + 1259 2800 AT-2800Tx Fast Ethernet + 1266 0004 Eagle Fast EtherMAX + 12af 0019 NetFlyer Cardbus Fast Ethernet + 1374 0001 Cardbus Ethernet Card 10/100 + 1374 0002 Cardbus Ethernet Card 10/100 + 1374 0007 Cardbus Ethernet Card 10/100 + 1374 0008 Cardbus Ethernet Card 10/100 + 1385 2100 FA510 + 1395 0001 10/100 Ethernet CardBus PC Card + 13d1 ab01 EtherFast 10/100 Cardbus (PCMPC200) + 1498 000a TPMC880-10 10/100Base-T and 10Base2 PMC Ethernet Adapter + 1498 000b TPMC880-11 Single 10/100Base-T PMC Ethernet Adapter + 1498 000c TPMC880-12 Single 10Base2 PMC Ethernet Adapter + 14cb 0100 LNDL-100N 100Base-TX Ethernet PC Card + 1668 2000 FastNet Pro (PE2000) + 2646 0001 KNE100TX + 2646 0002 KNE-CB4TX + 8086 0001 EtherExpress PRO/100 Mobile CardBus 32 + 001a Farallon PN9000SX Gigabit Ethernet + 0021 DECchip 21052 + 0022 DECchip 21150 + 0023 DECchip 21150 + 0024 DECchip 21152 + 0025 DECchip 21153 + 0026 DECchip 21154 + 0034 56k Modem Cardbus + 1374 0003 56k Modem Cardbus + 0045 DECchip 21553 + 0046 DECchip 21554 + 0e11 4050 Smart Array 4200 Controller + 0e11 4051 Smart Array 4250ES Controller + 0e11 4058 Smart Array 431 Controller + 103c 10c2 NetRAID-4M + 12d9 000a IP Telephony card + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard + 9005 0364 5400S (Mustang) + 9005 0365 5400S (Mustang) + 9005 1364 Dell PowerEdge RAID Controller 2 + 9005 1365 Dell PowerEdge RAID Controller 2 + e4bf 1000 CC8-1-BLUES + 1065 StrongARM DC21285 + 1069 0020 DAC960P / DAC1164P +1012 Micronics Computers Inc +1013 Cirrus Logic + 0038 GD 7548 + 0040 GD 7555 Flat Panel GUI Accelerator + 004c GD 7556 Video/Graphics LCD/CRT Ctrlr + 00a0 GD 5430/40 [Alpine] + 00a2 GD 5432 [Alpine] + 00a4 GD 5434-4 [Alpine] + 00a8 GD 5434-8 [Alpine] + 00ac GD 5436 [Alpine] + 00b0 GD 5440 + 00b8 GD 5446 + 00bc GD 5480 + 1013 00bc CL-GD5480 + 00d0 GD 5462 + 00d2 GD 5462 [Laguna I] + 00d4 GD 5464 [Laguna] + 00d5 GD 5464 BD [Laguna] + 00d6 GD 5465 [Laguna] + 13ce 8031 Barco Metheus 2 Megapixel, Dual Head + 13cf 8031 Barco Metheus 2 Megapixel, Dual Head + 00e8 GD 5436U + 1100 CL 6729 + 1110 PD 6832 PCMCIA/CardBus Ctrlr + 1112 PD 6834 PCMCIA/CardBus Ctrlr + 1113 PD 6833 PCMCIA/CardBus Ctrlr + 1200 GD 7542 [Nordic] + 1202 GD 7543 [Viking] + 1204 GD 7541 [Nordic Light] + 4000 MD 5620 [CLM Data Fax Voice] + 4400 CD 4400 + 6001 CS 4610/11 [CrystalClear SoundFusion Audio Accelerator] + 1014 1010 CS4610 SoundFusion Audio Accelerator + 6003 CS 4614/22/24/30 [CrystalClear SoundFusion Audio Accelerator] + 1013 4280 Crystal SoundFusion PCI Audio Accelerator + 1014 0153 ThinkPad A20m + 153b 112e DMX XFire 1024 + 153b 1136 SiXPack 5.1+ + 1681 0050 Game Theater XP + 1681 a010 Gamesurround Fortissimo II + 1681 a011 Gamesurround Fortissimo III 7.1 + 5053 3357 Santa Cruz + 6004 CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator] + 6005 Crystal CS4281 PCI Audio + 1013 4281 Crystal CS4281 PCI Audio + 10cf 10a8 Crystal CS4281 PCI Audio + 10cf 10a9 Crystal CS4281 PCI Audio + 10cf 10aa Crystal CS4281 PCI Audio + 10cf 10ab Crystal CS4281 PCI Audio + 10cf 10ac Crystal CS4281 PCI Audio + 10cf 10ad Crystal CS4281 PCI Audio + 10cf 10b4 Crystal CS4281 PCI Audio + 1179 0001 Crystal CS4281 PCI Audio + 14c0 000c Crystal CS4281 PCI Audio +1014 IBM + 0002 PCI to MCA Bridge + 0005 Processor to I/O Controller [Alta Lite] + 0007 Processor to I/O Controller [Alta MP] + 000a PCI to ISA Bridge (IBM27-82376) [Fire Coral] + 0017 CPU to PCI Bridge + 0018 TR Auto LANstreamer + 001b GXT-150P + 001c Carrera + 001d SCSI-2 FAST PCI Adapter (82G2675) + 0020 GXT1000 Graphics Adapter + 0022 PCI to PCI Bridge (IBM27-82351) + 002d Processor to I/O Controller [Python] + 002e SCSI RAID Adapter [ServeRAID] + 1014 002e ServeRAID-3x + 1014 022e ServeRAID-4H + 0031 2 Port Serial Adapter +# AS400 iSeries PCI sync serial card + 1014 0031 2721 WAN IOA - 2 Port Sync Serial Adapter + 0036 PCI to 32-bit LocalBus Bridge [Miami] + 0037 PowerPC to PCI Bridge (IBM27-82660) + 003a CPU to PCI Bridge + 003c GXT250P/GXT255P Graphics Adapter + 003e 16/4 Token ring UTP/STP controller + 1014 003e Token-Ring Adapter + 1014 00cd Token-Ring Adapter + Wake-On-LAN + 1014 00ce 16/4 Token-Ring Adapter 2 + 1014 00cf 16/4 Token-Ring Adapter Special + 1014 00e4 High-Speed 100/16/4 Token-Ring Adapter + 1014 00e5 16/4 Token-Ring Adapter 2 + Wake-On-LAN + 1014 016d iSeries 2744 Card + 0045 SSA Adapter + 0046 MPIC interrupt controller + 0047 PCI to PCI Bridge + 0048 PCI to PCI Bridge + 0049 Warhead SCSI Controller + 004e ATM Controller (14104e00) + 004f ATM Controller (14104f00) + 0050 ATM Controller (14105000) + 0053 25 MBit ATM Controller + 0054 GXT500P/GXT550P Graphics Adapter + 0057 MPEG PCI Bridge + 0058 SSA Adapter [Advanced SerialRAID/X] + 005c i82557B 10/100 + 005e GXT800P Graphics Adapter + 007c ATM Controller (14107c00) + 007d 3780IDSP [MWave] + 008b EADS PCI to PCI Bridge + 008e GXT3000P Graphics Adapter + 0090 GXT 3000P + 1014 008e GXT-3000P + 0091 SSA Adapter + 0095 20H2999 PCI Docking Bridge + 0096 Chukar chipset SCSI controller + 1014 0097 iSeries 2778 DASD IOA + 1014 0098 iSeries 2763 DASD IOA + 1014 0099 iSeries 2748 DASD IOA + 009f PCI 4758 Cryptographic Accelerator + 00a5 ATM Controller (1410a500) + 00a6 ATM 155MBPS MM Controller (1410a600) + 00b7 256-bit Graphics Rasterizer [FireGL1] + 1092 00b8 FireGL1 AGP 32Mb + 00b8 GXT2000P Graphics Adapter + 00be ATM 622MBPS Controller (1410be00) + 00dc Advanced Systems Management Adapter (ASMA) + 00fc CPC710 Dual Bridge and Memory Controller (PCI-64) + 0104 Gigabit Ethernet-SX Adapter + 0105 CPC710 Dual Bridge and Memory Controller (PCI-32) + 010f Remote Supervisor Adapter (RSA) + 0142 Yotta Video Compositor Input + 1014 0143 Yotta Input Controller (ytin) + 0144 Yotta Video Compositor Output + 1014 0145 Yotta Output Controller (ytout) + 0156 405GP PLB to PCI Bridge + 015e 622Mbps ATM PCI Adapter + 0160 64bit/66MHz PCI ATM 155 MMF + 016e GXT4000P Graphics Adapter + 0170 GXT6000P Graphics Adapter + 017d GXT300P Graphics Adapter + 0180 Snipe chipset SCSI controller + 1014 0241 iSeries 2757 DASD IOA + 1014 0264 Quad Channel PCI-X U320 SCSI RAID Adapter (2780) + 0188 EADS-X PCI-X to PCI-X Bridge + 01a7 PCI-X to PCI-X Bridge + 01bd ServeRAID Controller + 1014 01bd ServeRAID 4Lx + 1014 01be ServeRAID-4M + 1014 01bf ServeRAID-4L + 1014 0208 ServeRAID-4Mx + 1014 020e ServeRAID-4Lx + 1014 022e ServeRAID-4H + 1014 0258 ServeRAID-5i + 1014 0259 ServeRAID-5i + 01c1 64bit/66MHz PCI ATM 155 UTP + 01e6 Cryptographic Accelerator + 01ef PowerPC 440GP PCI Bridge + 1734 102b PCEAS PCI-X Dual Port ESCON Adapter + 1734 10f8 PCEAT PCI-Express Dual Port ESCON Adapter + 01ff 10/100 Mbps Ethernet + 0219 Multiport Serial Adapter + 1014 021a Dual RVX + 1014 0251 Internal Modem/RVX + 1014 0252 Quad Internal Modem + 021b GXT6500P Graphics Adapter + 021c GXT4500P Graphics Adapter + 0233 GXT135P Graphics Adapter + 0266 PCI-X Dual Channel SCSI + 0268 Gigabit Ethernet-SX Adapter (PCI-X) + 0269 10/100/1000 Base-TX Ethernet Adapter (PCI-X) + 028c Citrine chipset SCSI controller + 1014 028d Dual Channel PCI-X DDR SAS RAID Adapter (572E) + 1014 02be Dual Channel PCI-X DDR U320 SCSI RAID Adapter (571B) + 1014 02c0 Dual Channel PCI-X DDR U320 SCSI Adapter (571A) + 1014 030d PCI-X DDR Auxiliary Cache Adapter (575B) + 02a1 Calgary PCI-X Host Bridge + 02bd Obsidian chipset SCSI controller + 1014 02c1 PCI-X DDR 3Gb SAS Adapter (572A/572C) + 1014 02c2 PCI-X DDR 3Gb SAS RAID Adapter (572B/571D) + 1014 0338 PCI-X DDR Auxiliary Cache Adapter (575C) + 0302 Winnipeg PCI-X Host Bridge + 0308 CalIOC2 PCI-E Root Port + 0314 ZISC 036 Neural accelerator card + 032d Axon - Cell Companion Chip + 1014 03a1 PCIe PowerXCell 8i Cell Accelerator Board + 0339 Obsidian-E PCI-E SCSI controller + 1014 030a PCIe 3Gb SAS RAID Adapter (574E) + 1014 033a PCIe 3Gb SAS Adapter (57B3) + 1014 0360 PCI-E Auxiliary Cache Adapter (57B7) + 033d PCI-E IPR SAS Adapter (FPGA) + 1014 033c PCIe2 1.8GB Cache 6Gb SAS RAID Adapter Tri-port (57B5) + 1014 0356 PCIe2 1.8GB Cache 6Gb SAS RAID & SSD Adapter (574D) + 1014 035f PCIe2 6Gb SAS Adapter Quad-port (57B2) + 034a PCI-E IPR SAS Adapter (ASIC) + 1014 033b PCIe2 6Gb SAS RAID Adapter Quad-port (57B4) + 1014 0355 PCIe2 3.6GB Cache 6Gb SAS RAID Adapter Quad-port (57B1) + 1014 0357 PCIe2 6Gb SAS Adapter Quad-port (57C6) + 1014 035d PCIe2 3.6GB Cache 6Gb SAS RAID & SSD Adapter (575D) + 1014 035e PCIe2 3.6GB Cache 6Gb SAS RAID Adapter Quad-port (57CE) + 3022 QLA3022 Network Adapter + 4022 QLA3022 Network Adapter + ffff MPIC-2 interrupt controller +1015 LSI Logic Corp of Canada +1016 ICL Personal Systems +1017 SPEA Software AG + 5343 SPEA 3D Accelerator +1018 Unisys Systems +1019 Elitegroup Computer Systems +101a AT&T GIS (NCR) + 0005 100VG ethernet + 0007 BYNET BIC4G/2C/2G + 101a 0019 BYNET BIC2C + 101a 001c BYNET BIC2G + 101a 001f BYNET BIC4G + 0009 PQS Memory Controller + 000a BYNET BPCI Adapter + 000b BYNET 4 Port BYA Switch (BYA4P) + 000c BYNET 4 Port BYA Switch (BYA4G) + 0010 NCR AMC Memory Controller + 1dc1 BYNET BIC2M/BIC4M/BYA4M + 101a 0019 BIC2M + 101a 001f BIC4M + 101a 0ece BYA4M + 1fa8 BYNET Multi-port BIC Adapter (XBIC Based) + 101a 00c3 BYNET BIC2SE +101b Vitesse Semiconductor +# Maxim VSC452 Super BMC Controller with Video + 0452 VSC452 [SuperBMC] +101c Western Digital + 0193 33C193A + 0196 33C196A + 0197 33C197A + 0296 33C296A + 3193 7193 + 3197 7197 + 3296 33C296A + 4296 34C296 + 9710 Pipeline 9710 + 9712 Pipeline 9712 + c24a 90C +# ID for Newly Acquired Storage Products from Vitesse +101d Maxim Integrated Products +101e American Megatrends Inc. + 0009 MegaRAID 428 Ultra RAID Controller (rev 03) + 1960 MegaRAID + 101e 0471 MegaRAID 471 Enterprise 1600 RAID Controller + 101e 0475 MegaRAID 475 Express 500/500LC RAID Controller + 101e 0477 MegaRAID 477 Elite 3100 RAID Controller + 101e 0493 MegaRAID 493 Elite 1600 RAID Controller + 101e 0494 MegaRAID 494 Elite 1650 RAID Controller + 101e 0503 MegaRAID 503 Enterprise 1650 RAID Controller + 101e 0511 MegaRAID 511 i4 IDE RAID Controller + 101e 0522 MegaRAID 522 i4133 RAID Controller + 1028 0471 PowerEdge RAID Controller 3/QC + 1028 0475 PowerEdge RAID Controller 3/SC + 1028 0493 PowerEdge RAID Controller 3/DC + 1028 0511 PowerEdge Cost Effective RAID Controller ATA100/4Ch + 103c 60e7 NetRAID-1M + 9010 MegaRAID 428 Ultra RAID Controller + 9030 EIDE Controller + 9031 EIDE Controller + 9032 EIDE & SCSI Controller + 9033 SCSI Controller + 9040 Multimedia card + 9060 MegaRAID 434 Ultra GT RAID Controller + 9063 MegaRAC + 101e 0767 Dell Remote Assistant Card 2 +101f PictureTel +1020 Hitachi Computer Products +1021 OKI Electric Industry Co. Ltd. +1022 Advanced Micro Devices [AMD] + 1100 K8 [Athlon64/Opteron] HyperTransport Technology Configuration + 1101 K8 [Athlon64/Opteron] Address Map + 1102 K8 [Athlon64/Opteron] DRAM Controller + 1103 K8 [Athlon64/Opteron] Miscellaneous Control + 1200 K10 [Opteron, Athlon64, Sempron] HyperTransport Configuration + 1201 K10 [Opteron, Athlon64, Sempron] Address Map + 1202 K10 [Opteron, Athlon64, Sempron] DRAM Controller + 1203 K10 [Opteron, Athlon64, Sempron] Miscellaneous Control + 1204 K10 [Opteron, Athlon64, Sempron] Link Control + 1300 Mobile K10 [Turion X2, Athlon X2, Sempron] HyperTransport Configuration + 1301 Family 11h [Turion X2, Athlon X2, Sempron] Address Map + 1302 Mobile K10 [Turion X2, Athlon X2, Sempron] DRAM Controller + 1303 Mobile K10 [Turion X2, Athlon X2, Sempron] Miscellaneous Control + 1304 Mobile K10 [Turion X2, Athlon X2, Sempron] Link Control + 2000 79c970 [PCnet32 LANCE] + 1014 2000 NetFinity 10/100 Fast Ethernet + 1022 2000 PCnet - Fast 79C971 + 103c 104c Ethernet with LAN remote power Adapter + 103c 1064 Ethernet with LAN remote power Adapter + 103c 1065 Ethernet with LAN remote power Adapter + 103c 106c Ethernet with LAN remote power Adapter + 103c 106e Ethernet with LAN remote power Adapter + 103c 10ea Ethernet with LAN remote power Adapter + 1113 1220 EN1220 10/100 Fast Ethernet + 1259 2450 AT-2450 10/100 Fast Ethernet + 1259 2454 AT-2450v4 10Mb Ethernet Adapter + 1259 2700 AT-2700TX 10/100 Fast Ethernet + 1259 2701 AT-2700FX 100Mb Ethernet + 1259 2702 AT-2700FTX 10/100 Mb Fiber/Copper Fast Ethernet + 1259 2703 AT-2701FX + 1259 2704 AT-2701FTX 10/100 Mb Fiber/Copper Fast Ethernet + 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard + 4c53 1010 CP5/CR6 mainboard + 4c53 1020 VR6 mainboard + 4c53 1030 PC5 mainboard + 4c53 1040 CL7 mainboard + 4c53 1060 PC7 mainboard + 2001 79c978 [HomePNA] + 1092 0a78 Multimedia Home Network Adapter + 1668 0299 ActionLink Home Network Adapter + 2003 Am 1771 MBW [Alchemy] + 2020 53c974 [PCscsi] + 2040 79c974 + 2080 CS5536 [Geode companion] Host Bridge + 2081 Geode LX Video + 2082 Geode LX AES Security Block + 208f CS5536 GeodeLink PCI South Bridge + 2090 CS5536 [Geode companion] ISA + 2091 CS5536 [Geode companion] FLASH + 2093 CS5536 [Geode companion] Audio + 2094 CS5536 [Geode companion] OHC + 2095 CS5536 [Geode companion] EHC + 2096 CS5536 [Geode companion] UDC + 2097 CS5536 [Geode companion] UOC + 209a CS5536 [Geode companion] IDE + 3000 ELanSC520 Microcontroller + 7006 AMD-751 [Irongate] System Controller + 7007 AMD-751 [Irongate] AGP Bridge + 700a AMD-IGR4 AGP Host to PCI Bridge + 700b AMD-IGR4 PCI to PCI Bridge + 700c AMD-760 MP [IGD4-2P] System Controller + 700d AMD-760 MP [IGD4-2P] AGP Bridge + 700e AMD-760 [IGD4-1P] System Controller + 700f AMD-760 [IGD4-1P] AGP Bridge + 7400 AMD-755 [Cobra] ISA + 7401 AMD-755 [Cobra] IDE + 7403 AMD-755 [Cobra] ACPI + 7404 AMD-755 [Cobra] USB + 7408 AMD-756 [Viper] ISA + 7409 AMD-756 [Viper] IDE + 740b AMD-756 [Viper] ACPI + 740c AMD-756 [Viper] USB + 7410 AMD-766 [ViperPlus] ISA + 7411 AMD-766 [ViperPlus] IDE + 7413 AMD-766 [ViperPlus] ACPI + 7414 AMD-766 [ViperPlus] USB + 7440 AMD-768 [Opus] ISA + 1043 8044 A7M-D Mainboard + 7441 AMD-768 [Opus] IDE + 7443 AMD-768 [Opus] ACPI + 1043 8044 A7M-D Mainboard + 7445 AMD-768 [Opus] Audio + 7446 AMD-768 [Opus] MC97 Modem (Smart Link HAMR5600 compatible) + 7448 AMD-768 [Opus] PCI + 7449 AMD-768 [Opus] USB + 7450 AMD-8131 PCI-X Bridge + 7451 AMD-8131 PCI-X IOAPIC + 7454 AMD-8151 System Controller + 7455 AMD-8151 AGP Bridge + 7458 AMD-8132 PCI-X Bridge + 7459 AMD-8132 PCI-X IOAPIC + 7460 AMD-8111 PCI + 161f 3017 HDAMB + 7461 AMD-8111 USB + 7462 AMD-8111 Ethernet + 7464 AMD-8111 USB + 161f 3017 HDAMB + 7468 AMD-8111 LPC + 161f 3017 HDAMB + 7469 AMD-8111 IDE + 1022 2b80 AMD-8111 IDE [Quartet] + 161f 3017 HDAMB + 746a AMD-8111 SMBus 2.0 + 746b AMD-8111 ACPI + 161f 3017 HDAMB + 746d AMD-8111 AC97 Audio + 161f 3017 HDAMB + 746e AMD-8111 MC97 Modem + 756b AMD-8111 ACPI + 9600 RS780 Host Bridge + 9601 RS780 Host Bridge Alternate + 9602 RS780 PCI to PCI bridge (int gfx) + 9603 RS780 PCI to PCI bridge (ext gfx port 0) + 9604 RS780 PCI to PCI bridge (PCIE port 0) + 9605 RS780 PCI to PCI bridge (PCIE port 1) + 9606 RS780 PCI to PCI bridge (PCIE port 2) + 9607 RS780 PCI to PCI bridge (PCIE port 3) + 9608 RS780 PCI to PCI bridge (PCIE port 4) + 9609 RS780 PCI to PCI bridge (PCIE port 5) + 960a RS780 PCI to PCI bridge (NB-SB link) + 960b RS780 PCI to PCI bridge (ext gfx port 1) +1023 Trident Microsystems + 0194 82C194 + 2000 4DWave DX + 2001 4DWave NX + 122d 1400 Trident PCI288-Q3DII (NX) + 2100 CyberBlade XP4m32 + 2200 XGI Volari XP5 + 8400 CyberBlade/i7 + 1023 8400 CyberBlade i7 AGP + 8420 CyberBlade/i7d + 0e11 b15a CyberBlade i7 AGP + 8500 CyberBlade/i1 + 8520 CyberBlade i1 + 0e11 b16e CyberBlade i1 AGP + 1023 8520 CyberBlade i1 AGP + 8620 CyberBlade/i1 + 1014 0502 ThinkPad R30/T30 + 1014 1025 Travelmate 352TE + 8820 CyberBlade XPAi1 + 9320 TGUI 9320 + 9350 GUI Accelerator + 9360 Flat panel GUI Accelerator + 9382 Cyber 9382 [Reference design] + 9383 Cyber 9383 [Reference design] + 9385 Cyber 9385 [Reference design] + 9386 Cyber 9386 + 9388 Cyber 9388 + 9397 Cyber 9397 + 939a Cyber 9397DVD + 9420 TGUI 9420 + 9430 TGUI 9430 + 9440 TGUI 9440 + 9460 TGUI 9460 + 9470 TGUI 9470 + 9520 Cyber 9520 + 9525 Cyber 9525 + 9540 Cyber 9540 + 9660 TGUI 9660/938x/968x + 9680 TGUI 9680 + 9682 TGUI 9682 + 9683 TGUI 9683 + 9685 ProVIDIA 9685 + 9750 3DImage 9750 + 1014 9750 3DImage 9750 + 1023 9750 3DImage 9750 + 9753 TGUI 9753 + 9754 TGUI 9754 + 9759 TGUI 975 + 9783 TGUI 9783 + 9785 TGUI 9785 + 9850 3DImage 9850 + 9880 Blade 3D PCI/AGP + 1023 9880 Blade 3D + 9910 CyberBlade/XP + 9930 CyberBlade/XPm + 9960 CyberBlade XP2 +1024 Zenith Data Systems +1025 Acer Incorporated [ALI] + 1435 M1435 + 1445 M1445 + 1449 M1449 + 1451 M1451 + 1461 M1461 + 1489 M1489 + 1511 M1511 + 1512 ALI M1512 Aladdin + 1513 M1513 + 1521 ALI M1521 Aladdin III CPU Bridge + 10b9 1521 ALI M1521 Aladdin III CPU Bridge + 1523 ALI M1523 ISA Bridge + 10b9 1523 ALI M1523 ISA Bridge + 1531 M1531 Northbridge [Aladdin IV/IV+] + 1533 M1533 PCI-to-ISA Bridge + 10b9 1533 ALI M1533 Aladdin IV/V ISA South Bridge + 1535 M1535 PCI Bridge + Super I/O + FIR + 1541 M1541 Northbridge [Aladdin V] + 10b9 1541 ALI M1541 Aladdin V/V+ AGP+PCI North Bridge + 1542 M1542 Northbridge [Aladdin V] + 1543 M1543 PCI-to-ISA Bridge + Super I/O + FIR + 1561 M1561 Northbridge [Aladdin 7] + 1621 M1621 Northbridge [Aladdin-Pro II] + 1631 M1631 Northbridge+3D Graphics [Aladdin TNT2] + 1641 M1641 Northbridge [Aladdin-Pro IV] + 1647 M1647 [MaGiK1] PCI North Bridge + 1671 M1671 Northbridge [ALADDiN-P4] + 1672 Northbridge [CyberALADDiN-P4] + 3141 M3141 + 3143 M3143 + 3145 M3145 + 3147 M3147 + 3149 M3149 + 3151 M3151 + 3307 M3307 MPEG-I Video Controller + 3309 M3309 MPEG-II Video w/ Software Audio Decoder + 3321 M3321 MPEG-II Audio/Video Decoder + 5212 M4803 + 5215 ALI PCI EIDE Controller + 5217 M5217H + 5219 M5219 + 5225 M5225 + 5229 M5229 + 5235 M5235 + 5237 M5237 PCI USB Host Controller + 5240 EIDE Controller + 5241 PCMCIA Bridge + 5242 General Purpose Controller + 5243 PCI to PCI Bridge Controller + 5244 Floppy Disk Controller + 5247 M1541 PCI to PCI Bridge + 5251 M5251 P1394 Controller + 5427 PCI to AGP Bridge + 5451 M5451 PCI AC-Link Controller Audio Device + 5453 M5453 PCI AC-Link Controller Modem Device + 7101 M7101 PCI PMU Power Management Controller + 10b9 7101 M7101 PCI PMU Power Management Controller +1028 Dell + 0001 PowerEdge Expandable RAID Controller 2/Si + 1028 0001 PowerEdge 2400 + 0002 PowerEdge Expandable RAID Controller 3/Di + 1028 0002 PowerEdge 4400 + 1028 00d1 PERC 3/DiV [Viper] + 1028 00d9 PERC 3/DiL [Lexus] + 0003 PowerEdge Expandable RAID Controller 3/Si + 1028 0003 PowerEdge 2450 +# PowerEdge Codename Iguana + 0004 PowerEdge Expandable RAID Controller 3/Di [Iguana] + 1028 0004 PERC 3/DiF [Iguana] + 0006 PowerEdge Expandable RAID Controller 3/Di + 0007 Remote Access Card III + 0008 Remote Access Card III + 0009 Remote Access Card III: BMC/SMIC device not present + 000a PowerEdge Expandable RAID Controller 3/Di + 1028 0106 PERC 3/DiJ [Jaguar] + 1028 011b PERC 3/DiD [Dagger] + 1028 0121 PERC 3/DiB [Boxster] + 000c Embedded Remote Access or ERA/O + 000d Embedded Remote Access: BMC/SMIC device + 000e PowerEdge Expandable RAID controller 4/Di + 000f PowerEdge Expandable RAID controller 4/Di + 1028 014a PowerEdge 1750 + 0010 Remote Access Card 4 + 0011 Remote Access Card 4 Daughter Card + 0012 Remote Access Card 4 Daughter Card Virtual UART + 0013 PowerEdge Expandable RAID controller 4 + 1028 016c PowerEdge Expandable RAID Controller 4e/Si + 1028 016d PowerEdge Expandable RAID Controller 4e/Di + 1028 016e PowerEdge Expandable RAID Controller 4e/Di + 1028 016f PowerEdge Expandable RAID Controller 4e/Di + 1028 0170 PowerEdge Expandable RAID Controller 4e/Di + 0014 Remote Access Card 4 Daughter Card SMIC interface + 0015 PowerEdge Expandable RAID controller 5 + 1028 1f01 PERC 5/E Adapter RAID Controller + 1028 1f02 PERC 5/i Adapter RAID Controller + 1028 1f03 PERC 5/i Integrated RAID Controller + 0016 PowerEdge Expandable RAID controller S300 + 1028 1f24 PERC S300 Controller +1029 Siemens Nixdorf IS +102a LSI Logic + 0000 HYDRA + 0010 ASPEN + 001f AHA-2940U2/U2W /7890/7891 SCSI Controllers + 9005 000f 2940U2W SCSI Controller + 9005 0106 2940U2W SCSI Controller + 9005 a180 2940U2W SCSI Controller + 00c5 AIC-7899 U160/m SCSI Controller + 1028 00c5 PowerEdge 2550/2650/4600 + 00cf AIC-7899P U160/m + 1028 0106 PowerEdge 4600 + 1028 0121 PowerEdge 2650 +102b Matrox Graphics, Inc. +# DJ: I've a suspicion that 0010 is a duplicate of 0d10. + 0010 MGA-I [Impression?] + 0100 MGA 1064SG [Mystique] + 0518 MGA-II [Athena] + 0519 MGA 2064W [Millennium] + 051a MGA 1064SG [Mystique] + 102b 0100 MGA-1064SG Mystique + 102b 1100 MGA-1084SG Mystique + 102b 1200 MGA-1084SG Mystique + 1100 102b MGA-1084SG Mystique + 110a 0018 Scenic Pro C5 (D1025) + 051b MGA 2164W [Millennium II] + 102b 051b MGA-2164W Millennium II + 102b 1100 MGA-2164W Millennium II + 102b 1200 MGA-2164W Millennium II + 102b 2100 MGA-2164W Millennium II + 051e MGA 1064SG [Mystique] AGP + 051f MGA 2164W [Millennium II] AGP + 0520 MGA G200 + 102b dbc2 G200 Multi-Monitor + 102b dbc8 G200 Multi-Monitor + 102b dbe2 G200 Multi-Monitor + 102b dbe8 G200 Multi-Monitor + 102b ff03 Millennium G200 SD + 102b ff04 Marvel G200 + 0521 MGA G200 AGP + 1014 ff03 Millennium G200 AGP + 102b 48e9 Mystique G200 AGP + 102b 48f8 Millennium G200 SD AGP + 102b 4a60 Millennium G200 LE AGP + 102b 4a64 Millennium G200 AGP + 102b c93c Millennium G200 AGP + 102b c9b0 Millennium G200 AGP + 102b c9bc Millennium G200 AGP + 102b ca60 Millennium G250 LE AGP + 102b ca6c Millennium G250 AGP + 102b dbbc Millennium G200 AGP + 102b dbc2 Millennium G200 MMS (Dual G200) + 102b dbc3 G200 Multi-Monitor + 102b dbc8 Millennium G200 MMS (Dual G200) + 102b dbd2 G200 Multi-Monitor + 102b dbd3 G200 Multi-Monitor + 102b dbd4 G200 Multi-Monitor + 102b dbd5 G200 Multi-Monitor + 102b dbd8 G200 Multi-Monitor + 102b dbd9 G200 Multi-Monitor + 102b dbe2 Millennium G200 MMS (Quad G200) + 102b dbe3 G200 Multi-Monitor + 102b dbe8 Millennium G200 MMS (Quad G200) + 102b dbf2 G200 Multi-Monitor + 102b dbf3 G200 Multi-Monitor + 102b dbf4 G200 Multi-Monitor + 102b dbf5 G200 Multi-Monitor + 102b dbf8 G200 Multi-Monitor + 102b dbf9 G200 Multi-Monitor + 102b f806 Mystique G200 Video AGP + 102b ff00 MGA-G200 AGP + 102b ff02 Mystique G200 AGP + 102b ff03 Millennium G200 AGP + 102b ff04 Marvel G200 AGP + 110a 0032 MGA-G200 AGP + 0522 MGA G200e [Pilot] ServerEngines (SEP1) + 0525 MGA G400/G450 + 0e11 b16f MGA-G400 AGP + 102b 0328 Millennium G400 16Mb SDRAM + 102b 0338 Millennium G400 16Mb SDRAM + 102b 0378 Millennium G400 32Mb SDRAM + 102b 0541 Millennium G450 Dual Head + 102b 0542 Millennium G450 Dual Head LX + 102b 0543 Millennium G450 Single Head LX + 102b 0641 Millennium G450 32Mb SDRAM Dual Head + 102b 0642 Millennium G450 32Mb SDRAM Dual Head LX + 102b 0643 Millennium G450 32Mb SDRAM Single Head LX + 102b 07c0 Millennium G450 Dual Head LE + 102b 07c1 Millennium G450 SDR Dual Head LE + 102b 0d41 Millennium G450 Dual Head PCI + 102b 0d42 Millennium G450 Dual Head LX PCI + 102b 0d43 Millennium G450 32Mb Dual Head PCI + 102b 0e00 Marvel G450 eTV + 102b 0e01 Marvel G450 eTV + 102b 0e02 Marvel G450 eTV + 102b 0e03 Marvel G450 eTV + 102b 0f80 Millennium G450 Low Profile + 102b 0f81 Millennium G450 Low Profile + 102b 0f82 Millennium G450 Low Profile DVI + 102b 0f83 Millennium G450 Low Profile DVI + 102b 19d8 Millennium G400 16Mb SGRAM + 102b 19f8 Millennium G400 32Mb SGRAM + 102b 2159 Millennium G400 Dual Head 16Mb + 102b 2179 Millennium G400 MAX/Dual Head 32Mb + 102b 217d Millennium G400 Dual Head Max + 102b 23c0 Millennium G450 + 102b 23c1 Millennium G450 + 102b 23c2 Millennium G450 DVI + 102b 23c3 Millennium G450 DVI + 102b 2f58 Millennium G400 + 102b 2f78 Millennium G400 + 102b 3693 Marvel G400 AGP + 102b 5dd0 4Sight II + 102b 5f50 4Sight II + 102b 5f51 4Sight II + 102b 5f52 4Sight II + 102b 9010 Millennium G400 Dual Head + 1458 0400 GA-G400 + 1705 0001 Millennium G450 32MB SGRAM + 1705 0002 Millennium G450 16MB SGRAM + 1705 0003 Millennium G450 32MB + 1705 0004 Millennium G450 16MB + 0527 MGA Parhelia AGP + 102b 0840 Parhelia 128Mb + 102b 0850 Parhelia 256MB AGP 4X + 0528 Parhelia 8X + 102b 1020 Parhelia 128MB + 102b 1030 Parhelia 256 MB Dual DVI + 102b 14e1 Parhelia PCI 256MB + 102b 2021 QID Pro + 0530 MGA G200EV + 0532 MGA G200eW WPCM450 + 1028 0235 PowerEdge R710 MGA G200eW WPCM450 + 1028 0236 PowerEdge R610 MGA G200eW WPCM450 + 1028 0237 PowerEdge T610 MGA G200eW WPCM450 + 1028 0287 PowerEdge M610 MGA G200eW WPCM450 + 1028 028c PowerEdge R410 MGA G200eW WPCM450 + 1028 028d PowerEdge T410 MGA G200eW WPCM450 + 1028 029c PowerEdge M710 MGA G200eW WPCM450 + 0540 M91XX + 102b 2080 M9140 LP PCIe x16 + 102b 2100 M9120 PCIe x16 + 102b 2140 M9125 PCIe x16 + 102b 2180 M9120 Plus LP PCIe x16 + 102b 21c0 M9120 Plus LP PCIe x1 + 102b 2240 M9148 LP PCIe x16 + 102b 2241 M9138 LP PCIe x16 + 0d10 MGA Ultima/Impression + 1000 MGA G100 [Productiva] + 102b ff01 Productiva G100 + 102b ff05 Productiva G100 Multi-Monitor + 1001 MGA G100 [Productiva] AGP + 102b 1001 MGA-G100 AGP + 102b ff00 MGA-G100 AGP + 102b ff01 MGA-G100 Productiva AGP + 102b ff03 Millennium G100 AGP + 102b ff04 MGA-G100 AGP + 102b ff05 MGA-G100 Productiva AGP Multi-Monitor + 110a 001e MGA-G100 AGP + 2007 MGA Mistral + 2527 MGA G550 AGP + 102b 0f83 Millennium G550 + 102b 0f84 Millennium G550 Dual Head DDR 32Mb + 102b 1e41 Millennium G550 +# Clearly the device name should not say AGP anymore... + 102b 2300 Millennium G550 LP PCIE + 2537 Millenium P650/P750 + 102b 1820 Millennium P750 64MB + 102b 1830 Millennium P650 64MB + 102b 1c10 QID 128MB + 102b 2811 Millennium P650 Low-profile PCI 64MB + 102b 2c11 QID Low-profile PCI + 2538 Millenium P650 PCIe + 102b 08c7 Millennium P650 PCIe 128MB + 102b 0907 Millennium P650 PCIe 64MB + 102b 0947 Parhelia APVe + 102b 1047 Millennium P650 LP PCIe 128MB + 102b 1087 Millennium P650 LP PCIe 64MB + 102b 2538 Parhelia APVe + 102b 3007 QID Low-profile PCIe + 2539 Millennium P690 + 4536 VIA Framegrabber + 4cdc Morphis Vision System Jpeg2000 + 4fc5 Morphis Vision System + 5e10 Morphis Vision System Aux/IO + 6573 Shark 10/100 Multiport SwitchNIC +102c Chips and Technologies + 00b8 F64310 + 00c0 F69000 HiQVideo + 102c 00c0 F69000 HiQVideo + 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard + 4c53 1010 CP5/CR6 mainboard + 4c53 1020 VR6 mainboard + 4c53 1030 PC5 mainboard + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard + 00d0 F65545 + 00d8 F65545 + 00dc F65548 + 00e0 F65550 + 00e4 F65554 + 00e5 F65555 HiQVPro + 0e11 b049 Armada 1700 Laptop Display Controller + 1179 0001 Satellite Pro/Satellite + 00f0 F68554 + 00f4 F68554 HiQVision + 00f5 F68555 + 0c30 F69030 + 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard + 4c53 1080 CT8 mainboard +102d Wyse Technology Inc. + 50dc 3328 Audio +102e Olivetti Advanced Technology +102f Toshiba America + 0009 r4x00 + 000a TX3927 MIPS RISC PCI Controller + 0020 ATM Meteor 155 + 102f 00f8 ATM Meteor 155 + 0030 TC35815CF PCI 10/100 Mbit Ethernet Controller + 0031 TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL + 0032 TC35815CF PCI 10/100 Mbit Ethernet Controller on TX4939 + 0105 TC86C001 [goku-s] IDE + 0106 TC86C001 [goku-s] USB 1.1 Host + 0107 TC86C001 [goku-s] USB Device Controller + 0108 TC86C001 [goku-s] I2C/SIO/GPIO Controller + 0180 TX4927/38 MIPS RISC PCI Controller + 0181 TX4925 MIPS RISC PCI Controller + 0182 TX4937 MIPS RISC PCI Controller + 01b4 Celleb platform IDE interface + 01b5 SCC USB 2.0 EHCI controller + 01b6 SCC USB 1.1 OHCI controller +1030 TMC Research +1031 Miro Computer Products AG + 5601 DC20 ASIC + 5607 Video I/O & motion JPEG compressor + 5631 Media 3D + 6057 MiroVideo DC10/DC30+ +1032 Compaq +1033 NEC Corporation + 0000 Vr4181A USB Host or Function Control Unit + 0001 PCI to 486-like bus Bridge + 0002 PCI to VL98 Bridge + 0003 ATM Controller + 0004 R4000 PCI Bridge + 0005 PCI to 486-like bus Bridge + 0006 PC-9800 Graphic Accelerator + 0007 PCI to UX-Bus Bridge + 0008 PC-9800 Graphic Accelerator + 0009 PCI to PC9800 Core-Graph Bridge + 0016 PCI to VL Bridge + 001a [Nile II] + 0021 Vrc4373 [Nile I] + 0029 PowerVR PCX1 + 002a PowerVR 3D + 002c Star Alpha 2 + 002d PCI to C-bus Bridge + 0035 USB + 1033 0035 Hama USB 2.0 CardBus + 103c 1293 USB add-in card + 103c 1294 USB 2.0 add-in card + 1179 0001 USB + 12ee 7000 Root Hub + 14c2 0105 PTI-205N USB 2.0 Host Controller + 1799 0001 Root Hub + 1931 000a GlobeTrotter Fusion Quad Lite (PPP data) + 1931 000b GlobeTrotter Fusion Quad Lite (GSM data) + 807d 0035 PCI-USB2 (OHCI subsystem) + 003b PCI to C-bus Bridge + 003e NAPCCARD Cardbus Controller + 0046 PowerVR PCX2 [midas] + 005a Vrc5074 [Nile 4] + 0063 Firewarden + 0067 PowerVR Neon 250 Chipset + 1010 0020 PowerVR Neon 250 AGP 32Mb + 1010 0080 PowerVR Neon 250 AGP 16Mb + 1010 0088 PowerVR Neon 250 16Mb + 1010 0090 PowerVR Neon 250 AGP 16Mb + 1010 0098 PowerVR Neon 250 16Mb + 1010 00a0 PowerVR Neon 250 AGP 32Mb + 1010 00a8 PowerVR Neon 250 32Mb + 1010 0120 PowerVR Neon 250 AGP 32Mb + 0072 uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr + 0074 56k Voice Modem + 1033 8014 RCV56ACF 56k Voice Modem + 009b Vrc5476 + 00a5 VRC4173 + 00a6 VRC5477 AC97 + 00cd IEEE 1394 [OrangeLink] Host Controller + 12ee 8011 Root hub + 00ce IEEE 1394 Host Controller + 00df Vr4131 + 00e0 USB 2.0 + 12ee 7001 Root hub + 14c2 0205 PTI-205N USB 2.0 Host Controller + 1799 0002 Root Hub + 807d 1043 PCI-USB2 (EHCI subsystem) + 00e7 uPD72873 IEEE1394 OHCI 1.1 2-port Host Controller + 00f2 uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr + 00f3 uPD6113x Multimedia Decoder/Processor [EMMA2] + 010c VR7701 + 0125 uPD720400 PCI Express - PCI/PCI-X Bridge + 013a Dual Tuner/MPEG Encoder +1034 Framatome Connectors USA Inc. +1035 Comp. & Comm. Research Lab +1036 Future Domain Corp. + 0000 TMC-18C30 [36C70] +1037 Hitachi Micro Systems +1038 AMP, Inc +1039 Silicon Integrated Systems [SiS] + 0001 Virtual PCI-to-PCI bridge (AGP) + 0002 SG86C202 + 0003 SiS AGP Port (virtual PCI-to-PCI bridge) + 0004 PCI-to-PCI bridge + 0006 85C501/2/3 + 0008 SiS85C503/5513 (LPC Bridge) + 0009 ACPI + 000a PCI-to-PCI bridge + 0016 SiS961/2 SMBus Controller + 0018 SiS85C503/5513 (LPC Bridge) + 0180 RAID bus controller 180 SATA/PATA [SiS] + 0181 SATA + 0182 182 SATA/RAID Controller + 1734 1095 D2030-A1 + 0186 AHCI Controller (0106) + 0190 190 Ethernet Adapter + 0191 191 Gigabit Ethernet Adapter + 0200 5597/5598/6326 VGA + 1039 0000 SiS5597 SVGA (Shared RAM) + 0204 82C204 + 0205 SG86C205 + 0300 300/305 PCI/AGP VGA Display Adapter + 107d 2720 Leadtek WinFast VR300 + 0310 315H PCI/AGP VGA Display Adapter + 0315 315 PCI/AGP VGA Display Adapter + 0325 315PRO PCI/AGP VGA Display Adapter + 0330 330 [Xabre] PCI/AGP VGA Display Adapter + 0406 85C501/2 + 0496 85C496 + 0530 530 Host + 0540 540 Host + 0550 550 Host + 0597 5513C + 0601 85C601 + 0620 620 Host + 0630 630 Host + 0633 633 Host + 0635 635 Host + 0645 SiS645 Host & Memory & AGP Controller + 0646 SiS645DX Host & Memory & AGP Controller + 0648 645xx + 0649 SiS649 Host + 0650 650/M650 Host + 0651 651 Host + 0655 655 Host + 0660 660 Host + 0661 661FX/M661FX/M661MX Host + 0662 662 Host + 0671 671MX + 0730 730 Host + 0733 733 Host + 0735 735 Host + 0740 740 Host + 0741 741/741GX/M741 Host + 0745 745 Host + 0746 746 Host + 0755 755 Host + 0760 760/M760 Host + 0761 761/M761 Host + 1734 1099 D2030-A1 Motherboard + 0900 SiS900 PCI Fast Ethernet + 1019 0a14 K7S5A motherboard + 1039 0900 SiS900 10/100 Ethernet Adapter onboard [Asus P4SC-EA] + 1043 8035 CUSI-FX motherboard + 1043 80a7 Motherboard P4S800D-X + 1462 0900 MS-6701 motherboard + 0961 SiS961 [MuTIOL Media IO] + 0962 SiS962 [MuTIOL Media IO] + 0963 SiS963 [MuTIOL Media IO] + 0964 SiS964 [MuTIOL Media IO] + 0965 SiS965 [MuTIOL Media IO] + 0966 SiS966 [MuTIOL Media IO] + 0968 SiS968 [MuTIOL Media IO] + 1180 SATA Controller / IDE mode + 1182 SATA Controller / RAID mode + 1183 SATA Controller / IDE mode + 1184 AHCI Controller / RAID mode + 1185 AHCI IDE Controller (0106) + 3602 83C602 + 5107 5107 + 5300 SiS540 PCI Display Adapter + 5315 550 PCI/AGP VGA Display Adapter + 5401 486 PCI Chipset + 5511 5511/5512 + 5513 5513 [IDE] + 1019 0970 P6STP-FL motherboard + 1039 5513 SiS5513 EIDE Controller (A,B step) + 1043 8035 CUSI-FX motherboard + 1462 7010 MS-6701 motherboard + 1631 5513 GA-8SIML Rev1.0 Motherboard + 1734 1095 D2030-A1 Motherboard + 5517 5517 + 5571 5571 + 5581 5581 Pentium Chipset + 5582 5582 + 5591 5591/5592 Host + 5596 5596 Pentium Chipset + 5597 5597 [SiS5582] + 5600 5600 Host + 6204 Video decoder & MPEG interface + 6205 VGA Controller + 6236 6236 3D-AGP + 6300 630/730 PCI/AGP VGA Display Adapter + 1019 0970 P6STP-FL motherboard + 1043 8035 CUSI-FX motherboard + 6306 530/620 PCI/AGP VGA Display Adapter + 6325 65x/M650/740 PCI/AGP VGA Display Adapter + 1039 6325 SiS 651 onboard [Asus P4SC-EA] + 1631 1004 SiS 651C onboard [Gigabyte GA-8SIML Rev1.0] + 6326 86C326 5598/6326 + 1039 6326 SiS6326 GUI Accelerator + 1092 0a50 SpeedStar A50 + 1092 0a70 SpeedStar A70 + 1092 4910 SpeedStar A70 + 1092 4920 SpeedStar A70 + 10b0 6326 S6110-B (AGP) + 1569 6326 SiS6326 GUI Accelerator + 6330 661/741/760 PCI/AGP or 662/761Gx PCIE VGA Display Adapter + 1039 6330 [M]661xX/[M]741[GX]/[M]760 PCI/AGP VGA Adapter + 1043 8113 SiS Real 256E (ASUS P5S800-VM motherboard) + 1458 d000 SiS661FX GUI 2D/3D Accelerator + 1734 1099 D2030-A1 + 6350 770/670 PCIE VGA Display Adapter + 6351 771/671 PCIE VGA Display Adapter + 7001 USB 1.1 Controller + 1019 0a14 K7S5A motherboard + 1039 7000 Onboard USB Controller + 1462 5470 ECS K7SOM+ motherboard + 1462 7010 MS-6701 motherboard + 1734 1095 D2030-A1 Motherboard + 7002 USB 2.0 Controller + 1462 5470 K7SOM+ 5.2C Motherboard + 1462 7010 MS-6701 motherboard + 1509 7002 Onboard USB Controller + 1734 1095 D2030-A1 + 7007 FireWire Controller + 1462 701d MS-6701 + 7012 AC'97 Sound Controller + 1039 7012 SiS 7012 onboard [Asus P4SC-EA] AC'97 Sound Controller + 1043 818f A8S-X Motherboard + 13f6 0300 CMI9739(A) on ECS K7SOM+ motherboard + 1462 5850 MSI 648 Max (MS-6585) + 1462 7010 MS-6701 motherboard + 15bd 1001 DFI 661FX motherboard + 1734 109f D2030-A1 Motherboard +# There are may be different modem codecs here (Intel537 compatible and incompatible) + 7013 AC'97 Modem Controller + 7016 SiS7016 PCI Fast Ethernet Adapter + 1039 7016 SiS7016 10/100 Ethernet Adapter + 7018 SiS PCI Audio Accelerator + 1014 01b6 SiS PCI Audio Accelerator + 1014 01b7 SiS PCI Audio Accelerator + 1019 7018 SiS PCI Audio Accelerator + 1025 000e SiS PCI Audio Accelerator + 1025 0018 SiS PCI Audio Accelerator + 1039 7018 SiS PCI Audio Accelerator + 1043 1453 SiS PCI Audio Accelerator + 1043 800b SiS PCI Audio Accelerator + 1054 7018 SiS PCI Audio Accelerator + 107d 5330 SiS PCI Audio Accelerator + 107d 5350 SiS PCI Audio Accelerator + 1170 3209 SiS PCI Audio Accelerator + 1462 400a SiS PCI Audio Accelerator + 14a4 2089 SiS PCI Audio Accelerator + 14cd 2194 SiS PCI Audio Accelerator + 14ff 1100 SiS PCI Audio Accelerator + 152d 8808 SiS PCI Audio Accelerator + 1558 1103 SiS PCI Audio Accelerator + 1558 2200 SiS PCI Audio Accelerator + 1563 7018 SiS PCI Audio Accelerator + 15c5 0111 SiS PCI Audio Accelerator + 270f a171 SiS PCI Audio Accelerator + a0a0 0022 SiS PCI Audio Accelerator + 7019 SiS7019 Audio Accelerator + 7502 Azalia Audio Controller +103a Seiko Epson Corporation +103b Tatung Corp. Of America +103c Hewlett-Packard Company + 002a NX9000 Notebook + 08bc NX5000 Notebook + 1005 A4977A Visualize EG + 1008 Visualize FX + 1028 Tach TL Fibre Channel Host Adapter + 1029 Tach XL2 Fibre Channel Host Adapter + 107e 000f Interphase 5560 Fibre Channel Adapter + 9004 9210 1Gb/2Gb Family Fibre Channel Controller + 9004 9211 1Gb/2Gb Family Fibre Channel Controller + 102a Tach TS Fibre Channel Host Adapter + 107e 000e Interphase 5540/5541 Fibre Channel Adapter + 9004 9110 1Gb/2Gb Family Fibre Channel Controller + 9004 9111 1Gb/2Gb Family Fibre Channel Controller + 1030 J2585A DeskDirect 10/100VG NIC + 1031 J2585B HP 10/100VG PCI LAN Adapter + 103c 1040 J2973A DeskDirect 10BaseT NIC + 103c 1041 J2585B DeskDirect 10/100VG NIC + 103c 1042 J2970A DeskDirect 10BaseT/2 NIC + 1040 J2973A DeskDirect 10BaseT NIC + 1041 J2585B DeskDirect 10/100 NIC + 1042 J2970A DeskDirect 10BaseT/2 NIC + 1048 Diva Serial [GSP] Multiport UART + 103c 1049 Tosca Console + 103c 104a Tosca Secondary + 103c 104b Maestro SP2 + 103c 1223 Superdome Console + 103c 1226 Keystone SP2 + 103c 1227 Powerbar SP2 + 103c 1282 Everest SP2 + 103c 1301 Diva RMP3 + 1054 PCI Local Bus Adapter + 1064 79C970 PCnet Ethernet Controller + 108b Visualize FXe + 10c1 NetServer Smart IRQ Router + 10ed TopTools Remote Control + 10f0 rio System Bus Adapter + 10f1 rio I/O Controller + 1200 82557B 10/100 NIC + 1219 NetServer PCI Hot-Plug Controller + 121a NetServer SMIC Controller + 121b NetServer Legacy COM Port Decoder + 121c NetServer PCI COM Port Decoder + 1229 zx1 System Bus Adapter + 122a zx1 I/O Controller + 122e PCI-X Local Bus Adapter + 127b sx1000 System Bus Adapter + 127c sx1000 I/O Controller + 1290 Auxiliary Diva Serial Port + 103c 1291 Diva SP2 + 1291 Auxiliary Diva Serial Port + 12b4 zx1 QuickSilver AGP8x Local Bus Adapter + 12eb sx2000 System Bus Adapter + 12ec sx2000 I/O Controller + 12ee PCI-X 2.0 Local Bus Adapter + 12f8 Broadcom BCM4306 802.11b/g Wireless LAN + 12fa BCM4306 802.11b/g Wireless LAN Controller + 1302 RMP-3 Shared Memory Driver + 1303 RMP-3 (Remote Management Processor) + 1361 BCM4312 802.11a/b/g WLAN Controller + 1371 Broadcom Corporation BCM4312 802.11a/b/g (rev 02) + 2910 E2910A PCIBus Exerciser + 2925 E2925A 32 Bit, 33 MHzPCI Exerciser & Analyzer + 3080 Pavilion ze2028ea + 3085 Realtek RTL8139/8139C/8139C+ + 30b5 Compaq Presario V3000Z + 31fb DL365 ATI ES1000 VGA controller + 3206 Adaptec Embedded Serial ATA HostRAID + 3220 Smart Array P600 + 103c 3225 3 Gb/s SAS RAID + 3230 Smart Array Controller + 103c 3223 Smart Array P800 + 103c 3234 P400 SAS Controller + 103c 3235 P400i SAS Controller + 103c 3237 E500 SAS Controller + 103c 323d P700m SAS Controller + 3238 Smart Array E200i (SAS Controller) + 323a Smart Array G6 controllers + 103c 3241 Smart Array P212 + 103c 3243 Smart Array P410 + 103c 3245 Smart Array P410i + 103c 3247 Smart Array P411 + 103c 3249 Smart Array P812 + 103c 324a HP Smart Array 712m (Mezzanine RAID controller) + 103c 324b Smart Array P711m (Mezzanine RAID controller) +# Will present virtual install media as mass storage, keyboard/mouse from console session, etc. + 3300 Proliant iLO2 virtual USB controller + 3301 iLO3 Serial Port +# Virtual serial port which is presented on a Java applet + 3302 Proliant iLO2 virtual UART + 3305 Proliant iLO2 [Integrated Lights Out] controller + 3306 iLO3 Slave instrumentation & System support + 3307 iLO3 Management Processor Support and Messaging + 3308 iLO3 MS Watchdog Timer + 402f PCIe Root Port + 4030 zx2 System Bus Adapter + 4031 zx2 I/O Controller + 4037 PCIe Local Bus Adapter + 403b PCIe Root Port + 60e8 NetRAID-2M : ZX1/M (OEM AMI MegaRAID 493) +103e Solliday Engineering +103f Synopsys/Logic Modeling Group +1040 Accelgraphics Inc. +1041 Computrend +1042 Micron + 1000 PC Tech RZ1000 + 1001 PC Tech RZ1001 + 3000 Samurai_0 + 3010 Samurai_1 + 3020 Samurai_IDE +1043 ASUSTeK Computer Inc. + 0675 ISDNLink P-IN100-ST-D + 0675 1704 ISDN Adapter (PCI Bus, D, C) + 0675 1707 ISDN Adapter (PCI Bus, DV, W) + 10cf 105e ISDN Adapter (PCI Bus, DV, W) + 0c11 A7N8X Motherboard nForce2 IDE/USB/SMBus + 4015 v7100 SDRAM [GeForce2 MX] + 4021 v7100 Combo Deluxe [GeForce2 MX + TV tuner] + 4057 v8200 GeForce 3 + 8043 v8240 PAL 128M [P4T] Motherboard + 8047 v8420 Deluxe [GeForce4 Ti4200] + 807b v9280/TD [Geforce4 TI4200 8X With TV-Out and DVI] + 8095 A7N8X Motherboard nForce2 AC97 Audio + 80ac A7N8X Motherboard nForce2 AGP/Memory + 80bb v9180 Magic/T [GeForce4 MX440 AGP 8x 64MB TV-out] + 80c5 nForce3 chipset motherboard [SK8N] + 80df v9520 Magic/T + 815a A8N-SLI Motherboard nForce4 SATA + 8168 Realtek PCI-E Gigabit Ethernet Controller (RTL8111B) + 8187 802.11a/b/g Wireless LAN Card + 8188 Tiger Hybrid TV Capture Device +# Found on ASUS M2V motherboard + 81e7 Realtek ALC-660 6-channel CODEC + 81f4 EN7300TC512/TD/128M/A(C262G) [Graphics Card EN7300TC512] + 82ca G96 GeForce 9500 GT + 82e8 M3N72-D +1044 Adaptec (formerly DPT) + 1012 Domino RAID Engine + a400 SmartCache/Raid I-IV Controller + a500 PCI Bridge + a501 SmartRAID V Controller + 1044 c001 PM1554U2 Ultra2 Single Channel + 1044 c002 PM1654U2 Ultra2 Single Channel + 1044 c003 PM1564U3 Ultra3 Single Channel + 1044 c004 PM1564U3 Ultra3 Dual Channel + 1044 c005 PM1554U2 Ultra2 Single Channel (NON ACPI) + 1044 c00a PM2554U2 Ultra2 Single Channel + 1044 c00b PM2654U2 Ultra2 Single Channel + 1044 c00c PM2664U3 Ultra3 Single Channel + 1044 c00d PM2664U3 Ultra3 Dual Channel + 1044 c00e PM2554U2 Ultra2 Single Channel (NON ACPI) + 1044 c00f PM2654U2 Ultra2 Single Channel (NON ACPI) + 1044 c014 PM3754U2 Ultra2 Single Channel (NON ACPI) + 1044 c015 PM3755U2B Ultra2 Single Channel (NON ACPI) + 1044 c016 PM3755F Fibre Channel (NON ACPI) + 1044 c01e PM3757U2 Ultra2 Single Channel + 1044 c01f PM3757U2 Ultra2 Dual Channel + 1044 c020 PM3767U3 Ultra3 Dual Channel + 1044 c021 PM3767U3 Ultra3 Quad Channel + 1044 c028 PM2865U3 Ultra3 Single Channel + 1044 c029 PM2865U3 Ultra3 Dual Channel + 1044 c02a PM2865F Fibre Channel + 1044 c03c 2000S Ultra3 Single Channel + 1044 c03d 2000S Ultra3 Dual Channel + 1044 c03e 2000F Fibre Channel + 1044 c046 3000S Ultra3 Single Channel + 1044 c047 3000S Ultra3 Dual Channel + 1044 c048 3000F Fibre Channel + 1044 c050 5000S Ultra3 Single Channel + 1044 c051 5000S Ultra3 Dual Channel + 1044 c052 5000F Fibre Channel + 1044 c05a 2400A UDMA Four Channel + 1044 c05b 2400A UDMA Four Channel DAC + 1044 c064 3010S Ultra3 Dual Channel + 1044 c065 3410S Ultra160 Four Channel + 1044 c066 3010S Fibre Channel + a511 SmartRAID V Controller + 1044 c032 ASR-2005S I2O Zero Channel + 1044 c035 ASR-2010S I2O Zero Channel + c066 3010S Ultra3 Dual Channel +1045 OPTi Inc. + a0f8 82C750 [Vendetta] USB Controller + c101 92C264 + c178 92C178 + c556 82X556 [Viper] + c557 82C557 [Viper-M] + c558 82C558 [Viper-M ISA+IDE] + c567 82C750 [Vendetta], device 0 + c568 82C750 [Vendetta], device 1 + c569 82C579 [Viper XPress+ Chipset] + c621 82C621 [Viper-M/N+] + c700 82C700 [FireStar] + c701 82C701 [FireStar Plus] + c814 82C814 [Firebridge 1] + c822 82C822 + c824 82C824 + c825 82C825 [Firebridge 2] + c832 82C832 + c861 82C861 + c895 82C895 + c935 EV1935 ECTIVA MachOne PCIAudio + d568 82C825 [Firebridge 2] + d721 IDE [FireStar] +1046 IPC Corporation, Ltd. +1047 Genoa Systems Corp +1048 Elsa AG + 0c60 Gladiac MX + 0d22 Quadro4 900XGL [ELSA GLoria4 900XGL] + 1000 QuickStep 1000 + 3000 QuickStep 3000 + 8901 Gloria XL + 1048 0935 GLoria XL (Virge) +1049 Fountain Technologies, Inc. +# nee SGS Thomson Microelectronics +104a STMicroelectronics + 0000 STLS2F Host Bridge + 0008 STG 2000X + 0009 STG 1764X + 0010 STG4000 [3D Prophet Kyro Series] + 0201 STPC Vega Northbridge + 0209 STPC Consumer/Industrial North- and Southbridge + 020a STPC Atlas/ConsumerS/Consumer IIA Northbridge + 020b STPC Consumer II ISA Bridge + 0210 STPC Atlas ISA Bridge + 021a STPC Consumer S Southbridge + 021b STPC Consumer IIA Southbridge + 0220 STPC Industrial PCI to PCCard bridge + 0228 STPC Atlas IDE + 0229 STPC Vega IDE + 0230 STPC Atlas/Vega OHCI USB Controller + 0238 STPC Vega LAN + 0500 ST70137 [Unicorn] ADSL DMT Transceiver + 104a 0500 BeWAN ADSL PCI st + 0564 STPC Client Northbridge + 0981 21x4x DEC-Tulip compatible 10/100 Ethernet + 1746 STG 1764X + 2774 21x4x DEC-Tulip compatible 10/100 Ethernet + 3520 MPEG-II decoder card + 55cc STPC Client Southbridge +104b BusLogic + 0140 BT-946C (old) [multimaster 01] + 1040 BT-946C (BA80C30) [MultiMaster 10] + 8130 Flashpoint LT +104c Texas Instruments + 0500 100 MBit LAN Controller + 0508 TMS380C2X Compressor Interface + 1000 Eagle i/f AS + 104c PCI1510 PC card Cardbus Controller + 3d04 TVP4010 [Permedia] + 3d07 TVP4020 [Permedia 2] + 1011 4d10 Comet + 1040 000f AccelStar II + 1040 0011 AccelStar II + 1048 0a31 WINNER 2000 + 1048 0a32 GLoria Synergy + 1048 0a34 GLoria Synergy + 1048 0a35 GLoria Synergy + 1048 0a36 GLoria Synergy + 1048 0a43 GLoria Synergy + 1048 0a44 GLoria Synergy + 107d 2633 WinFast 3D L2300 + 1092 0126 FIRE GL 1000 PRO + 1092 0127 FIRE GL 1000 PRO + 1092 0136 FIRE GL 1000 PRO + 1092 0141 FIRE GL 1000 PRO + 1092 0146 FIRE GL 1000 PRO + 1092 0148 FIRE GL 1000 PRO + 1092 0149 FIRE GL 1000 PRO + 1092 0152 FIRE GL 1000 PRO + 1092 0154 FIRE GL 1000 PRO + 1092 0155 FIRE GL 1000 PRO + 1092 0156 FIRE GL 1000 PRO + 1092 0157 FIRE GL 1000 PRO + 1097 3d01 Jeronimo Pro + 1102 100f Graphics Blaster Extreme + 3d3d 0100 Reference Permedia 2 3D + 8000 PCILynx/PCILynx2 IEEE 1394 Link Layer Controller + 1443 8003 FireBoard200 + e4bf 1010 CF1-1-SNARE + e4bf 1020 CF1-2-SNARE + 8009 TSB12LV22 IEEE-1394 Controller + 104d 8032 8032 OHCI i.LINK (IEEE 1394) Controller + 8017 PCI4410 FireWire Controller + 8019 TSB12LV23 IEEE-1394 Controller + 11bd 000a Studio DV500-1394 + 11bd 000e Studio DV + e4bf 1010 CF2-1-CYMBAL + 8020 TSB12LV26 IEEE-1394 Controller (Link) + 1028 00d8 Precision 530 + 11bd 000f Studio DV500-1394 + 11bd 001c Excalibur 4.1 + 8021 TSB43AA22 IEEE-1394 Controller (PHY/Link Integrated) + 104d 80df Vaio PCG-FX403 + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 8022 TSB43AB22 IEEE-1394a-2000 Controller (PHY/Link) + 104c 8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link) + 8023 TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link) + 103c 088c NC8000 laptop + 1043 808b K8N4-E Mainboard + 1043 815b P5W DH Deluxe Motherboard + 1443 8023 FireCard400 + 8024 TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link) + 107d 6620 Winfast DV2000 FireWire Controller + 1443 8024 FireBoard Blue + 1458 1000 GA-EP45-DS5 Motherboard + 8025 TSB82AA2 IEEE-1394b Link Layer Controller + 1458 1000 GA-K8N Ultra-9 Mainboard + 8026 TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link) + 1025 0035 TravelMate 660 + 1025 003c Aspire 2001WLCi (Compaq CL50 motherboard) + 103c 006a NX9500 + 1043 808d A7V333 mainboard. + 8027 PCI4451 IEEE-1394 Controller + 1028 00e6 PCI4451 IEEE-1394 Controller (Dell Inspiron 8100) + 8029 PCI4510 IEEE-1394 Controller + 1028 0163 Latitude D505 + 1028 0196 Inspiron 5160 + 1071 8160 MIM2900 + 802b PCI7410,7510,7610 OHCI-Lynx Controller + 1028 0139 Latitude D400 + 1028 014e PCI7410,7510,7610 OHCI-Lynx Controller (Latitude D800) + 802e PCI7x20 1394a-2000 OHCI Two-Port PHY/Link-Layer Controller + 1028 018d Inspiron 700m/710m + 8031 PCIxx21/x515 Cardbus Controller + 1025 0080 Aspire 5024WLMi + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 103c 308b MX6125 + 8032 OHCI Compliant IEEE 1394 Host Controller + 1025 0080 Aspire 5024WLMi + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 103c 308b MX6125 + 8033 PCIxx21 Integrated FlashMedia Controller + 1025 0080 Aspire 5024WLMi + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 103c 308b MX6125 + 8034 PCI6411/6421/6611/6621/7411/7421/7611/7621 Secure Digital Controller + 1025 0080 Aspire 5024WLMi + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 103c 308b MX6125 + 8035 PCI6411/6421/6611/6621/7411/7421/7611/7621 Smart Card Controller + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 8036 PCI6515 Cardbus Controller + 8038 PCI6515 SmartCard Controller + 8039 PCIxx12 Cardbus Controller + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 803a PCIxx12 OHCI Compliant IEEE 1394 Host Controller + 103c 309f nx9420 + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 803b 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD) + 103c 309f nx9420 + 103c 30a3 Compaq nw8440 + 803c PCIxx12 SDA Standard Compliant SD Host Controller + 103c 309f nx9420 + 103c 30a3 Compaq nw8440 + 803d PCIxx12 GemCore based SmartCard controller + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 nc8430 + 103c 30aa nc6310 + 8101 TSB43DB42 IEEE-1394a-2000 Controller (PHY/Link) + 8201 PCI1620 Firmware Loading Function + 8204 PCI7410,7510,7610 PCI Firmware Loading Function + 1028 0139 Latitude D400 + 1028 014e Latitude D800 + 8231 XIO2000(A)/XIO2200(A) PCI Express-to-PCI Bridge + 8235 XIO2200(A) IEEE-1394a-2000 Controller (PHY/Link) + 823e XIO2213A PCI Express to PCI Bridge + 823f XIO2213A 1394b OHCI with 3-Port PHY + 1546 803c FWB-PCIE1X11B + 8400 ACX 100 22Mbps Wireless Interface + 1186 3b00 DWL-650+ PC Card cardbus 22Mbs Wireless Adapter [AirPlus] + 1186 3b01 DWL-520+ 22Mbps PCI Wireless Adapter + 1395 2201 WL22-PC + 16ab 8501 WL-8305 IEEE802.11b+ Wireless LAN PCI Adapter + 8401 ACX 100 22Mbps Wireless Interface + 9000 Wireless Interface (of unknown type) + 9065 TMS320DM642 + 9066 ACX 111 54Mbps Wireless Interface + 104c 9066 WL212 Sitecom Wireless Network PCI-Card 100M (Version 1) + 104c 9096 Trendnet TEW-412PC Wireless PCI Adapter (Version A) + 1186 3b04 DWL-G520+ Wireless PCI Adapter + 1186 3b05 DWL-G650+ AirPlusG+ CardBus Wireless LAN + 13d1 aba0 SWLMP-54108 108Mbps Wireless mini PCI card 802.11g+ + 16ec 010d USR5416 802.11g Wireless Turbo PCI Adapter + 1737 0033 WPC54G Ver.2 802.11G PC Card + 17cf 0033 Z-Com XG650 Wireless miniPCI 802.11b/g + a001 TDC1570 + a100 TDC1561 + a102 TNETA1575 HyperSAR Plus w/PCI Host i/f & UTOPIA i/f + a106 TMS320C6414 TMS320C6415 TMS320C6416 + 175c 5000 ASI50xx Audio Adapter + 175c 6400 ASI6400 Cobranet series + 175c 8700 ASI87xx Radio Tuner card + ac10 PCI1050 + ac11 PCI1053 + ac12 PCI1130 + ac13 PCI1031 + ac15 PCI1131 + ac16 PCI1250 + 1014 0092 ThinkPad 600 + ac17 PCI1220 + ac18 PCI1260 + ac19 PCI1221 + ac1a PCI1210 + ac1b PCI1450 + 0e11 b113 Armada M700 + 1014 0130 ThinkPad A21m/T20/T22 + ac1c PCI1225 + 0e11 b121 Armada E500 + 1028 0088 Latitude CPi A400XT + ac1d PCI1251A + ac1e PCI1211 + ac1f PCI1251B + ac20 TI 2030 + ac21 PCI2031 + ac22 PCI2032 PCI Docking Bridge + ac23 PCI2250 PCI-to-PCI Bridge + ac28 PCI2050 PCI-to-PCI Bridge + ac2c PCI2060 PCI-to-PCI Bridge + ac30 PCI1260 PC card Cardbus Controller + ac40 PCI4450 PC card Cardbus Controller + ac41 PCI4410 PC card Cardbus Controller + ac42 PCI4451 PC card Cardbus Controller + 1028 00e6 PCI4451 PC card CardBus Controller (Inspiron 8100) + ac44 PCI4510 PC card Cardbus Controller + 1028 0149 Inspiron 5100 + 1028 0163 Latitude D505 + 1028 0196 Inspiron 5160 + 1071 8160 MIM2000 + ac46 PCI4520 PC card Cardbus Controller + 1014 0552 ThinkPad + ac47 PCI7510 PC card Cardbus Controller + 1028 0139 Latitude D400 + 1028 013f Precision M60 + 1028 014e Latitude D800 + ac48 PCI7610 PC Card Cardbus Controller + ac49 PCI7410 PC Card Cardbus Controller + ac4a PCI7510,7610 PC card Cardbus Controller + 1028 0139 Latitude D400 + 1028 014e Latitude D800 + ac4b PCI7610 SD/MMC controller + ac4c PCI7610 Memory Stick controller + ac50 PCI1410 PC card Cardbus Controller + ac51 PCI1420 PC card Cardbus Controller + 0e11 004e Evo N600c + 1014 0148 ThinkPad A20m + 1014 023b ThinkPad T23 + 1028 00b1 Latitude C600 + 1028 012a Latitude C640 + 1033 80cd Versa Note VXi + 10cf 1095 Lifebook S-4510/C6155 + e4bf 1000 CP2-2-HIPHOP + ac52 PCI1451 PC card Cardbus Controller + ac53 PCI1421 PC card Cardbus Controller + ac54 PCI1620 PC Card Controller + 103c 08b0 tc1100 tablet + ac55 PCI1520 PC card Cardbus Controller + 1014 0512 ThinkPad T30/T40 + ac56 PCI1510 PC card Cardbus Controller + 1014 0512 ThinkPad R50e + 1014 0528 ThinkPad R40e + 17aa 2012 ThinkPad T60/R60 series + ac60 PCI2040 PCI to DSP Bridge Controller + 175c 5100 ASI51xx Audio Adapter + 175c 6100 ASI61xx Audio Adapter + 175c 6200 ASI62xx Audio Adapter + 175c 8800 ASI88xx Audio Adapter + 186f 3001 WR-G303 PCI radio receiver + 186f 3005 WR-G305 PCI radio receiver + 186f 3101 WR-G313 PCI radio receiver + 186f 3105 WR-G315 PCI radio receiver + ac8d PCI 7620 + ac8e PCI7420 CardBus Controller + 1028 018d Inspiron 700m/710m + ac8f PCI7420/7620 Combo CardBus, 1394a-2000 OHCI and SD/MS-Pro Controller + 1028 018d Inspiron 700m/710m + fe00 FireWire Host Controller + fe03 12C01A FireWire Host Controller +104d Sony Corporation + 8004 DTL-H2500 [Playstation development board] + 8009 CXD1947Q i.LINK Controller + 8039 CXD3222 i.LINK Controller + 8056 Rockwell HCF 56K modem + 808a Memory Stick Controller +104e Oak Technology, Inc + 0017 OTI-64017 + 0107 OTI-107 [Spitfire] + 0109 Video Adapter + 0111 OTI-64111 [Spitfire] + 0217 OTI-64217 + 0317 OTI-64317 +104f Co-time Computer Ltd +1050 Winbond Electronics Corp + 0000 NE2000 + 0001 W83769F + 0033 W89C33D 802.11 a/b/g BB/MAC + 0105 W82C105 + 0840 W89C840 + 1050 0001 W89C840 Ethernet Adapter + 1050 0840 W89C840 Ethernet Adapter + 0940 W89C940 + 5a5a W89C940F + 6692 W6692 + 1043 1702 ISDN Adapter (PCI Bus, D, W) + 1043 1703 ISDN Adapter (PCI Bus, DV, W) + 1043 1707 ISDN Adapter (PCI Bus, DV, W) + 144f 1702 ISDN Adapter (PCI Bus, D, W) + 144f 1703 ISDN Adapter (PCI Bus, DV, W) + 144f 1707 ISDN Adapter (PCI Bus, DV, W) + 9921 W99200F MPEG-1 Video Encoder + 9922 W99200F/W9922PF MPEG-1/2 Video Encoder + 9970 W9970CF +1051 Anigma, Inc. +1052 ?Young Micro Systems +1053 Young Micro Systems +1054 Hitachi, Ltd + 3009 2Gbps Fibre Channel to PCI HBA 3009 + 300a 4Gbps Fibre Channel to PCI-X HBA 300a + 300b 4Gbps Fibre Channel to PCI-X HBA 300b + 300f ColdFusion 3 Chipset Processor to I/O Controller + 3010 ColdFusion 3 Chipset Memory Controller Hub + 3011 ColdFusion 3e Chipset Processor to I/O Controller + 3012 ColdFusion 3e Chipset Memory Controller Hub + 3017 Unassigned Hitachi Shared FC Device 3017 + 301d PCIe-to-PCIe Bridge with Virtualization IO Assist Feature + 3020 FIVE-EX based Fibre Channel to PCIe HBA + 3505 SH7751 PCI Controller (PCIC) + 350e SH7751R PCI Controller (PCIC) +1055 Efar Microsystems + 9130 SLC90E66 [Victory66] IDE + 9460 SLC90E66 [Victory66] ISA + 9462 SLC90E66 [Victory66] USB + 9463 SLC90E66 [Victory66] ACPI + e420 LAN9420/LAN9420i +1056 ICL +# Motorola made a mistake and used 1507 instead of 1057 in some chips. Please look at the 1507 entry as well when updating this. +1057 Motorola + 0001 MPC105 [Eagle] + 0002 MPC106 [Grackle] + 0003 MPC8240 [Kahlua] + 0004 MPC107 + 0006 MPC8245 [Unity] + 0008 MPC8540 + 0009 MPC8560 + 0012 MPC8548 [PowerQUICC III] + 0100 MC145575 [HFC-PCI] + 0431 KTI829c 100VG + 1073 Nokia N770 + 1219 Nokia N800 + 1801 DSP56301 Digital Signal Processor + 14fb 0101 Transas Radar Imitator Board [RIM] + 14fb 0102 Transas Radar Imitator Board [RIM-2] + 14fb 0202 Transas Radar Integrator Board [RIB-2] + 14fb 0611 1 channel CAN bus Controller [CanPci-1] + 14fb 0612 2 channels CAN bus Controller [CanPci-2] + 14fb 0613 3 channels CAN bus Controller [CanPci-3] + 14fb 0614 4 channels CAN bus Controller [CanPci-4] + 14fb 0621 1 channel CAN bus Controller [CanPci2-1] + 14fb 0622 2 channels CAN bus Controller [CanPci2-2] + 14fb 0810 Transas VTS Radar Integrator Board [RIB-4] + 175c 4200 ASI4215 Audio Adapter + 175c 4300 ASI43xx Audio Adapter + 175c 4400 ASI4401 Audio Adapter + ecc0 0010 Darla + ecc0 0020 Gina + ecc0 0030 Layla rev.0 + ecc0 0031 Layla rev.1 + ecc0 0040 Darla24 rev.0 + ecc0 0041 Darla24 rev.1 + ecc0 0050 Gina24 rev.0 + ecc0 0051 Gina24 rev.1 + ecc0 0070 Mona rev.0 + ecc0 0071 Mona rev.1 + ecc0 0072 Mona rev.2 + 18c0 MPC8265A/8266/8272 + 18c1 MPC8271/MPC8272 + 3052 SM56 Data Fax Modem + 3055 SM56 Data Fax Modem + 3410 DSP56361 Digital Signal Processor + ecc0 0050 Gina24 rev.0 + ecc0 0051 Gina24 rev.1 + ecc0 0060 Layla24 + ecc0 0070 Mona rev.0 + ecc0 0071 Mona rev.1 + ecc0 0072 Mona rev.2 + ecc0 0080 Mia rev.0 + ecc0 0081 Mia rev.1 + ecc0 0090 Indigo + ecc0 00a0 Indigo IO + ecc0 00b0 Indigo DJ + ecc0 0100 3G + 4801 Raven + 4802 Falcon + 4803 Hawk + 4806 CPX8216 + 4d68 20268 + 5600 SM56 PCI Modem + 1057 0300 SM56 PCI Speakerphone Modem + 1057 0301 SM56 PCI Voice Modem + 1057 0302 SM56 PCI Fax Modem + 1057 5600 SM56 PCI Voice modem + 13d2 0300 SM56 PCI Speakerphone Modem + 13d2 0301 SM56 PCI Voice modem + 13d2 0302 SM56 PCI Fax Modem + 1436 0300 SM56 PCI Speakerphone Modem + 1436 0301 SM56 PCI Voice modem + 1436 0302 SM56 PCI Fax Modem + 144f 100c SM56 PCI Fax Modem + 1494 0300 SM56 PCI Speakerphone Modem + 1494 0301 SM56 PCI Voice modem + 14c8 0300 SM56 PCI Speakerphone Modem + 14c8 0302 SM56 PCI Fax Modem + 1668 0300 SM56 PCI Speakerphone Modem + 1668 0302 SM56 PCI Fax Modem + 5608 Wildcard X100P + 5803 MPC5200 + 5806 MCF54 Coldfire + 5808 MPC8220 + 5809 MPC5200B + 6400 MPC190 Security Processor (S1 family, encryption) + 6405 MPC184 Security Processor (S1 family) +1058 Electronics & Telecommunications RSH +# Formerly: Teknor Industrial Computers Inc +1059 Kontron +105a Promise Technology, Inc. + 0d30 PDC20265 (FastTrak100 Lite/Ultra100) + 1043 8042 AV7266-E South Bridge Promise RAID + 105a 4d33 Ultra100 + 0d38 20263 + 105a 4d39 Fasttrak66 + 1275 20275 + 3318 PDC20318 (SATA150 TX4) + 3319 PDC20319 (FastTrak S150 TX4) + 8086 3427 S875WP1-E mainboard + 3371 PDC20371 (FastTrak S150 TX2plus) + 3373 PDC20378 (FastTrak 378/SATA 378) + 1043 80f5 K8V Deluxe/PC-DL Deluxe motherboard + 1462 590d KT6 Delta-FIS2R (MS-6590) + 1462 702e K8T NEO FIS2R motherboard + 3375 PDC20375 (SATA150 TX2plus) + 3376 PDC20376 (FastTrak 376) + 1043 809e A7V8X motherboard + 3515 PDC40719 [FastTrak TX4300/TX4310] + 3519 PDC40519 (FastTrak TX4200) + 3570 20771 (FastTrak TX2300) + 3571 PDC20571 (FastTrak TX2200) + 3574 PDC20579 SATAII 150 IDE Controller + 3577 PDC40779 (SATA 300 779) + 3d17 PDC40718 (SATA 300 TX4) + 3d18 PDC20518/PDC40518 (SATAII 150 TX4) + 3d73 PDC40775 (SATA 300 TX2plus) + 3d75 PDC20575 (SATAII150 TX2plus) + 3f20 PDC42819 [FastTrak TX2650/TX4650] + 4302 80333 [SuperTrak EX4350] + 4d30 PDC20267 (FastTrak100/Ultra100) + 105a 4d33 Ultra100 + 105a 4d39 FastTrak100 + 8086 5744 S845WD1-E mainboard + 4d33 20246 + 105a 4d33 20246 IDE Controller + 4d38 PDC20262 (FastTrak66/Ultra66) + 105a 4d30 Ultra Device on SuperTrak + 105a 4d33 Ultra66 + 105a 4d39 FastTrak66 + 4d68 PDC20268 (Ultra100 TX2) + 105a 4d68 Ultra100TX2 + 4d69 20269 + 105a 4d68 Ultra133TX2 + 5275 PDC20276 (MBFastTrak133 Lite) + 1043 807e A7V333 motherboard. + 105a 0275 SuperTrak SX6000 IDE + 105a 1275 MBFastTrak133 Lite (tm) Controller (RAID mode) + 1458 b001 MBUltra 133 + 5300 DC5300 + 6268 PDC20270 (FastTrak100 LP/TX2/TX4) + 105a 4d68 FastTrak100 TX2 + 6269 PDC20271 (FastTrak TX2000) + 105a 6269 FastTrak TX2/TX2000 + 6300 PDC81731 [FastTrak SX8300] + 6621 PDC20621 (FastTrak S150 SX4/FastTrak SX4000 lite) + 6622 PDC20621 [SATA150 SX4] 4 Channel IDE RAID Controller + 6624 PDC20621 [FastTrak SX4100] + 6626 PDC20618 (Ultra 618) + 6629 PDC20619 (FastTrak TX4000) + 7275 PDC20277 (SBFastTrak133 Lite) + 8002 SATAII150 SX8 + 8350 80333 [SuperTrak EX8350/EX16350], 80331 [SuperTrak EX8300/EX16300] + 8650 81384 [SuperTrak EX SAS and SATA RAID Controller] + 105a 4600 SuperTrak EX4650A + 105a 4601 SuperTrak EX4650 + 105a 4610 SuperTrak EX4650EL + 105a 8600 SuperTrak EX8650EL + 105a 8601 SuperTrak EX8650A + 105a 8602 SuperTrak EX8654 + 105a 8603 SuperTrak EX8658 + 105a 8604 SuperTrak EX8650 + 105a 8610 SuperTrak EX8650M + 105a a600 SuperTrak EX12650 + 105a b600 SuperTrak EX16650 + 105a b601 SuperTrak EX16654 + 105a b602 SuperTrak EX16658 + 8760 PM8010 [SuperTrak EX SAS and SATA 6G RAID Controller] + c350 80333 [SuperTrak EX12350] + e350 80333 [SuperTrak EX24350] +105b Foxconn International, Inc. + 0c4d SiS AC'97 Sound Controller +105c Wipro Infotech Limited +105d Number 9 Computer Company + 2309 Imagine 128 + 2339 Imagine 128-II + 105d 0000 Imagine 128 series 2 4Mb VRAM + 105d 0001 Imagine 128 series 2 4Mb VRAM + 105d 0002 Imagine 128 series 2 4Mb VRAM + 105d 0003 Imagine 128 series 2 4Mb VRAM + 105d 0004 Imagine 128 series 2 4Mb VRAM + 105d 0005 Imagine 128 series 2 4Mb VRAM + 105d 0006 Imagine 128 series 2 4Mb VRAM + 105d 0007 Imagine 128 series 2 4Mb VRAM + 105d 0008 Imagine 128 series 2e 4Mb DRAM + 105d 0009 Imagine 128 series 2e 4Mb DRAM + 105d 000a Imagine 128 series 2 8Mb VRAM + 105d 000b Imagine 128 series 2 8Mb H-VRAM + 11a4 000a Barco Metheus 5 Megapixel + 13cc 0000 Barco Metheus 5 Megapixel + 13cc 0004 Barco Metheus 5 Megapixel + 13cc 0005 Barco Metheus 5 Megapixel + 13cc 0006 Barco Metheus 5 Megapixel + 13cc 0008 Barco Metheus 5 Megapixel + 13cc 0009 Barco Metheus 5 Megapixel + 13cc 000a Barco Metheus 5 Megapixel + 13cc 000c Barco Metheus 5 Megapixel + 493d Imagine 128 T2R [Ticket to Ride] + 11a4 000a Barco Metheus 5 Megapixel, Dual Head + 11a4 000b Barco Metheus 5 Megapixel, Dual Head + 13cc 0002 Barco Metheus 4 Megapixel, Dual Head + 13cc 0003 Barco Metheus 5 Megapixel, Dual Head + 13cc 0007 Barco Metheus 5 Megapixel, Dual Head + 13cc 0008 Barco Metheus 5 Megapixel, Dual Head + 13cc 0009 Barco Metheus 5 Megapixel, Dual Head + 13cc 000a Barco Metheus 5 Megapixel, Dual Head + 5348 Revolution 4 + 105d 0037 Revolution IV-FP AGP (For SGI 1600SW) + 11a4 0028 PVS5600M + 11a4 0038 PVS5600D +105e Vtech Computers Ltd +105f Infotronic America Inc +1060 United Microelectronics [UMC] + 0001 UM82C881 + 0002 UM82C886 + 0101 UM8673F + 0881 UM8881 + 0886 UM8886F + 0891 UM8891A + 1001 UM886A + 673a UM8886BF + 673b EIDE Master/DMA + 8710 UM8710 + 886a UM8886A + 8881 UM8881F + 8886 UM8886F + 888a UM8886A + 8891 UM8891A + 9017 UM9017F + 9018 UM9018 + 9026 UM9026 + e881 UM8881N + e886 UM8886N + e88a UM8886N + e891 UM8891N +1061 I.I.T. + 0001 AGX016 + 0002 IIT3204/3501 +1062 Maspar Computer Corp +1063 Ocean Office Automation +1064 Alcatel + 1102 Dynamite 2840 (ADSL PCI modem) +1065 Texas Microsystems +1066 PicoPower Technology + 0000 PT80C826 + 0001 PT86C521 [Vesuvius v1] Host Bridge + 0002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Master + 0003 PT86C524 [Nile] PCI-to-PCI Bridge + 0004 PT86C525 [Nile-II] PCI-to-PCI Bridge + 0005 National PC87550 System Controller + 8002 PT86C523 [Vesuvius v3] PCI-ISA Bridge Slave +1067 Mitsubishi Electric + 0301 AccelGraphics AccelECLIPSE + 0304 AccelGALAXY A2100 [OEM Evans & Sutherland] + 0308 Tornado 3000 [OEM Evans & Sutherland] + 1002 VG500 [VolumePro Volume Rendering Accelerator] +1068 Diversified Technology +1069 Mylex Corporation + 0001 DAC960P + 0002 DAC960PD + 0010 DAC960PG + 0020 DAC960LA + 0050 AcceleRAID 352/170/160 support Device + 1069 0050 AcceleRAID 352 support Device + 1069 0052 AcceleRAID 170 support Device + 1069 0054 AcceleRAID 160 support Device + b166 AcceleRAID 600/500/400/Sapphire support Device + 1014 0242 iSeries 2872 DASD IOA + 1014 0266 Dual Channel PCI-X U320 SCSI Adapter + 1014 0278 Dual Channel PCI-X U320 SCSI RAID Adapter + 1014 02d3 Dual Channel PCI-X U320 SCSI Adapter + 1014 02d4 Dual Channel PCI-X U320 SCSI RAID Adapter + 1069 0200 AcceleRAID 400, Single Channel, PCI-X, U320, SCSI RAID + 1069 0202 AcceleRAID Sapphire, Dual Channel, PCI-X, U320, SCSI RAID + 1069 0204 AcceleRAID 500, Dual Channel, Low-Profile, PCI-X, U320, SCSI RAID + 1069 0206 AcceleRAID 600, Dual Channel, PCI-X, U320, SCSI RAID + ba55 eXtremeRAID 1100 support Device + ba56 eXtremeRAID 2000/3000 support Device + 1069 0030 eXtremeRAID 3000 support Device + 1069 0040 eXtremeRAID 2000 support Device + ba57 eXtremeRAID 4000/5000 support Device + 1069 0072 eXtremeRAID 5000 support Device +106a Aten Research Inc +106b Apple Computer Inc. + 0001 Bandit PowerPC host bridge + 0002 Grand Central I/O + 0003 Control Video + 0004 PlanB Video-In + 0007 O'Hare I/O + 000c DOS on Mac + 000e Hydra Mac I/O + 0010 Heathrow Mac I/O + 0017 Paddington Mac I/O + 0018 UniNorth FireWire + 0019 KeyLargo USB + 001e UniNorth Internal PCI + 001f UniNorth PCI + 0020 UniNorth AGP + 0021 UniNorth GMAC (Sun GEM) + 0022 KeyLargo Mac I/O + 0024 UniNorth/Pangea GMAC (Sun GEM) + 0025 KeyLargo/Pangea Mac I/O + 0026 KeyLargo/Pangea USB + 0027 UniNorth/Pangea AGP + 0028 UniNorth/Pangea PCI + 0029 UniNorth/Pangea Internal PCI + 002d UniNorth 1.5 AGP + 002e UniNorth 1.5 PCI + 002f UniNorth 1.5 Internal PCI + 0030 UniNorth/Pangea FireWire + 0031 UniNorth 2 FireWire + 106b 5811 iBook G4 2004 + 0032 UniNorth 2 GMAC (Sun GEM) + 0033 UniNorth 2 ATA/100 + 0034 UniNorth 2 AGP + 0035 UniNorth 2 PCI + 0036 UniNorth 2 Internal PCI + 003b UniNorth/Intrepid ATA/100 + 003e KeyLargo/Intrepid Mac I/O + 003f KeyLargo/Intrepid USB + 0040 K2 KeyLargo USB + 0041 K2 KeyLargo Mac/IO + 0042 K2 FireWire + 0043 K2 ATA/100 + 0045 K2 HT-PCI Bridge + 0046 K2 HT-PCI Bridge + 0047 K2 HT-PCI Bridge + 0048 K2 HT-PCI Bridge + 0049 K2 HT-PCI Bridge + 004a CPC945 HT Bridge + 004b U3 AGP + 004c K2 GMAC (Sun GEM) + 004f Shasta Mac I/O + 0050 Shasta IDE + 0051 Shasta (Sun GEM) + 0052 Shasta Firewire + 0053 Shasta PCI Bridge + 0054 Shasta PCI Bridge + 0055 Shasta PCI Bridge + 0056 U4 PCIe + 0057 U3 HT Bridge + 0058 U3L AGP Bridge + 0059 U3H AGP Bridge + 005b CPC945 PCIe Bridge + 0066 Intrepid2 AGP Bridge + 0067 Intrepid2 PCI Bridge + 0068 Intrepid2 PCI Bridge + 0069 Intrepid2 ATA/100 + 006a Intrepid2 Firewire + 006b Intrepid2 GMAC (Sun GEM) + 0074 U4 HT Bridge + 1645 Tigon3 Gigabit Ethernet NIC (BCM5701) +106c Hynix Semiconductor + 8801 Dual Pentium ISA/PCI Motherboard + 8802 PowerPC ISA/PCI Motherboard + 8803 Dual Window Graphics Accelerator + 8804 LAN Controller + 8805 100-BaseT LAN +106d Sequent Computer Systems +106e DFI, Inc +106f City Gate Development Ltd +1070 Daewoo Telecom Ltd +1071 Mitac + 8160 Mitac 8060B Mobile Platform +1072 GIT Co Ltd +1073 Yamaha Corporation + 0001 3D GUI Accelerator + 0002 YGV615 [RPA3 3D-Graphics Controller] + 0003 YMF-740 + 0004 YMF-724 + 1073 0004 YMF724-Based PCI Audio Adapter + 0005 DS1 Audio + 1073 0005 DS-XG PCI Audio CODEC + 0006 DS1 Audio + 0008 DS1 Audio + 1073 0008 DS-XG PCI Audio CODEC + 000a DS1L Audio + 1073 0004 DS-XG PCI Audio CODEC + 1073 000a DS-XG PCI Audio CODEC + 000c YMF-740C [DS-1L Audio Controller] + 107a 000c DS-XG PCI Audio CODEC + 000d YMF-724F [DS-1 Audio Controller] + 1073 000d DS-XG PCI Audio CODEC + 0010 YMF-744B [DS-1S Audio Controller] + 1073 0006 DS-XG PCI Audio CODEC + 1073 0010 DS-XG PCI Audio CODEC + 0012 YMF-754 [DS-1E Audio Controller] + 1073 0012 DS-XG PCI Audio Codec + 0020 DS-1 Audio + 1000 SW1000XG [XG Factory] + 2000 DS2416 Digital Mixing Card + 1073 2000 DS2416 Digital Mixing Card +1074 NexGen Microsystems + 4e78 82c500/1 +1075 Advanced Integrations Research +1076 Chaintech Computer Co. Ltd +1077 QLogic Corp. + 1016 ISP10160 Single Channel Ultra3 SCSI Processor + 1020 ISP1020 Fast-wide SCSI + 1022 ISP1022 Fast-wide SCSI + 1080 ISP1080 SCSI Host Adapter + 1216 ISP12160 Dual Channel Ultra3 SCSI Processor + 101e 8471 QLA12160 on AMI MegaRAID + 101e 8493 QLA12160 on AMI MegaRAID + 1240 ISP1240 SCSI Host Adapter + 1280 ISP1280 SCSI Host Adapter + 2020 ISP2020A Fast!SCSI Basic Adapter + 2100 QLA2100 64-bit Fibre Channel Adapter + 1077 0001 QLA2100 64-bit Fibre Channel Adapter + 2200 QLA2200 64-bit Fibre Channel Adapter + 1077 0002 QLA2200 + 2300 QLA2300 64-bit Fibre Channel Adapter + 2312 ISP2312-based 2Gb Fibre Channel to PCI-X HBA + 103c 0131 2Gb Fibre Channel - Single port [A7538A] + 103c 12ba 2Gb Fibre Channel - Dual port [A6826A] + 2322 ISP2322-based 2Gb Fibre Channel to PCI-X HBA + 2422 ISP2422-based 4Gb Fibre Channel to PCI-X HBA + 103c 12d7 4Gb Fibre Channel [AB379A] + 103c 12dd 4Gb Fibre Channel [AB429A] + 2432 ISP2432-based 4Gb Fibre Channel to PCI Express HBA + 2532 ISP2532-based 8Gb Fibre Channel to PCI Express HBA + 3022 ISP4022-based Ethernet NIC + 3032 ISP4032-based Ethernet IPv6 NIC + 4010 ISP4010-based iSCSI TOE HBA + 4022 ISP4022-based iSCSI TOE HBA + 4032 ISP4032-based iSCSI TOE IPv6 HBA + 5432 SP232-based 4Gb Fibre Channel to PCI Express HBA + 6312 SP202-based 2Gb Fibre Channel to PCI-X HBA + 6322 SP212-based 2Gb Fibre Channel to PCI-X HBA + 7220 IBA7220 InfiniBand HCA + 7322 IBA7322 QDR InfiniBand HCA + 8000 10GbE Converged Network Adapter (TCP/IP Networking) + 8001 10GbE Converged Network Adapter (FCoE) + 8432 ISP2432M-based 10GbE Converged Network Adapter (CNA) +1078 Cyrix Corporation + 0000 5510 [Grappa] + 0001 PCI Master + 0002 5520 [Cognac] + 0100 5530 Legacy [Kahlua] + 0101 5530 SMI [Kahlua] + 0102 5530 IDE [Kahlua] + 0103 5530 Audio [Kahlua] + 0104 5530 Video [Kahlua] + 0400 ZFMicro PCI Bridge + 0401 ZFMicro Chipset SMI + 0402 ZFMicro Chipset IDE + 0403 ZFMicro Expansion Bus +1079 I-Bus +107a NetWorth +107b Gateway 2000 +107c LG Electronics [Lucky Goldstar Co. Ltd] +107d LeadTek Research Inc. + 0000 P86C850 + 204d [GeForce 7800 GTX] Winfast PX7800 GTX TDH + 2134 WinFast 3D S320 II + 2971 [GeForce FX 5900] WinFast A350 TDH MyViVo + 6609 Winfast TV 2000 XP RM + 6654 Conexant CX23883 [WinFast DTV1800 H] +107e Interphase Corporation + 0001 5515 ATM Adapter [Flipper] + 0002 100 VG AnyLan Controller + 0004 5526 Fibre Channel Host Adapter + 0005 x526 Fibre Channel Host Adapter + 0008 5525/5575 ATM Adapter (155 Mbit) [Atlantic] + 9003 5535-4P-BRI-ST + 9007 5535-4P-BRI-U + 9008 5535-1P-SR + 900c 5535-1P-SR-ST + 900e 5535-1P-SR-U + 9011 5535-1P-PRI + 9013 5535-2P-PRI + 9023 5536-4P-BRI-ST + 9027 5536-4P-BRI-U + 9031 5536-1P-PRI + 9033 5536-2P-PRI +107f Data Technology Corporation + 0802 SL82C105 +1080 Contaq Microsystems + 0600 82C599 + c691 Cypress CY82C691 + c693 82c693 +1081 Supermac Technology + 0d47 Radius PCI to NuBUS Bridge +1082 EFA Corporation of America +1083 Forex Computer Corporation + 0001 FR710 +1084 Parador +1085 Tulip Computers Int.B.V. +1086 J. Bond Computer Systems +1087 Cache Computer +1088 Microcomputer Systems (M) Son +1089 Data General Corporation +# Formerly Bit3 Computer Corp. +108a SBS Technologies + 0001 VME Bridge Model 617 + 0010 VME Bridge Model 618 + 0040 dataBLIZZARD + 3000 VME Bridge Model 2706 +108c Oakleigh Systems Inc. +108d Olicom + 0001 Token-Ring 16/4 PCI Adapter (3136/3137) + 0002 16/4 Token Ring + 0004 RapidFire 3139 Token-Ring 16/4 PCI Adapter + 108d 0004 OC-3139/3140 RapidFire Token-Ring 16/4 Adapter + 0005 GoCard 3250 Token-Ring 16/4 CardBus PC Card + 0006 OC-3530 RapidFire Token-Ring 100 + 0007 RapidFire 3141 Token-Ring 16/4 PCI Fiber Adapter + 108d 0007 OC-3141 RapidFire Token-Ring 16/4 Adapter + 0008 RapidFire 3540 HSTR 100/16/4 PCI Adapter + 108d 0008 OC-3540 RapidFire HSTR 100/16/4 Adapter + 0011 OC-2315 + 0012 OC-2325 + 0013 OC-2183/2185 + 0014 OC-2326 + 0019 OC-2327/2250 10/100 Ethernet Adapter + 108d 0016 OC-2327 Rapidfire 10/100 Ethernet Adapter + 108d 0017 OC-2250 GoCard 10/100 Ethernet Adapter + 0021 OC-6151/6152 [RapidFire ATM 155] + 0022 ATM Adapter +108e Sun Microsystems Computer Corp. + 0001 EBUS + 1000 EBUS + 1001 Happy Meal 10/100 Ethernet [hme] + 1100 RIO EBUS + 108e 1100 RIO EBUS on Blade 100 motherboard +# Correction + 1101 RIO 10/100 Ethernet [eri] + 108e 1101 RIO GEM on Blade 100 motherboard + 1102 RIO 1394 + 108e 1102 RIO 1394 on Blade 100 motherboard + 1103 RIO USB + 108e 1103 RIO USB on Blade 100 motherboard + 1647 Broadcom 570x 10/100/1000 Ethernet [bge] + 1648 Broadcom 570x 10/100/1000 Ethernet [bge] + 16a7 Broadcom 570x 10/100/1000 Ethernet [bge] + 16a8 Broadcom 570x 10/100/1000 Ethernet [bge] + 2bad GEM 10/100/1000 Ethernet [ge] + 5000 Simba Advanced PCI Bridge + 108e 5000 Netra AX1105-500 + 5043 SunPCI Co-processor + 5ca0 Crypto Accelerator 6000 [mca] + 6300 Intel 21554 PCI-PCI bus bridge [db21554] + 6301 Intel 21554 PCI-PCI bus bridge [db21554] + 6302 Intel 21554 PCI-PCI bus bridge [db21554] + 6303 Intel 21554 PCI-PCI bus bridge [db21554] + 6310 Intel 21554 PCI-PCI bus bridge [db21554] + 6311 Intel 21554 PCI-PCI bus bridge [db21554] + 6312 Intel 21554 PCI-PCI bus bridge [db21554] + 6313 Intel 21554 PCI-PCI bus bridge [db21554] + 6320 Intel 21554 PCI-PCI bus bridge [db21554] + 6323 Intel 21554 PCI-PCI bus bridge [db21554] + 6330 Intel 21554 PCI-PCI bus bridge [db21554] + 6331 Intel 21554 PCI-PCI bus bridge [db21554] + 6332 Intel 21554 PCI-PCI bus bridge [db21554] + 6333 Intel 21554 PCI-PCI bus bridge [db21554] + 6340 Intel 21554 PCI-PCI bus bridge [db21554] + 6343 Intel 21554 PCI-PCI bus bridge [db21554] + 6350 Intel 21554 PCI-PCI bus bridge [db21554] + 6353 Intel 21554 PCI-PCI bus bridge [db21554] + 6722 Intel 21554 PCI-PCI bus bridge [db21554] + 676e SunPCiIII + 7063 SunPCiII / SunPCiIIpro + 8000 Psycho PCI Bus Module + 8001 Schizo PCI Bus Module + 8002 Schizo+ PCI Bus Module + 80f0 PCIe switch [px] + 80f8 PCIe switch [px] + 9010 PCIe/PCI bridge switch [pxb_plx] + 9020 PCIe/PCI bridge switch [pxb_plx] + 9102 Davicom Fast Ethernet driver for Davicom DM9102A [dmfe] + a000 Psycho UPA-PCI Bus Module [pcipsy] + a001 Psycho UPA-PCI Bus Module [pcipsy] + 108e a001 Ultra IIe on Blade 100 motherboard + a801 Schizo Fireplane-PCI bus bridge module [pcisch] + abba Cassini 10/100/1000 + abcd Multithreaded 10-Gigabit Ethernet Network Controller + c416 Sun Fire System/System Controller Interface chip [sbbc] +108f Systemsoft +1090 Compro Computer Services, Inc. + 4610 PCI RTOM + 4620 GPIO HSD +1091 Intergraph Corporation + 0020 3D graphics processor + 0021 3D graphics processor w/Texturing + 0040 3D graphics frame buffer + 0041 3D graphics frame buffer + 0060 Proprietary bus bridge + 00e4 Powerstorm 4D50T + 0720 Motion JPEG codec + 0780 Intense3D Wildcat 3410 (MSMT496) + 07a0 Sun Expert3D-Lite Graphics Accelerator + 1091 Sun Expert3D Graphics Accelerator +1092 Diamond Multimedia Systems + 0028 Viper V770 + 1092 4a00 Viper V770 32MB + 00a0 Speedstar Pro SE + 00a8 Speedstar 64 + 0550 Viper V550 + 08d4 Supra 2260 Modem + 094c SupraExpress 56i Pro + 1001 Video Crunch It 1001 capture card + 1092 Viper V330 + 6120 Maximum DVD + 8810 Stealth SE + 8811 Stealth 64/SE + 8880 Stealth + 8881 Stealth + 88b0 Stealth 64 + 88b1 Stealth 64 + 88c0 Stealth 64 + 88c1 Stealth 64 + 88d0 Stealth 64 + 88d1 Stealth 64 + 88f0 Stealth 64 + 88f1 Stealth 64 + 9999 DMD-I0928-1 "Monster sound" sound chip +1093 National Instruments + 0160 PCI-DIO-96 + 0162 PCI-MIO-16XE-50 + 1150 PCI-DIO-32HS High Speed Digital I/O Board + 1170 PCI-MIO-16XE-10 + 1180 PCI-MIO-16E-1 + 1190 PCI-MIO-16E-4 + 1310 PCI-6602 + 1330 PCI-6031E + 1350 PCI-6071E + 14e0 PCI-6110 + 14f0 PCI-6111 + 17d0 PCI-6503 + 1870 PCI-6713 + 1880 PCI-6711 + 18b0 PCI-6052E + 2410 PCI-6733 + 2890 PCI-6036E + 2a60 PCI-6023E + 2a70 PCI-6024E + 2a80 PCI-6025E + 2c80 PCI-6035E + 2ca0 PCI-6034E + 70a9 PCI-6528 (Digital I/O at 60V) + 70b8 PCI-6251 [M Series - High Speed Multifunction DAQ] + 7144 PXI-5124 (12-bit 200 MS/s Digitizer) + b001 IMAQ-PCI-1408 + b011 IMAQ-PXI-1408 + b021 IMAQ-PCI-1424 + b031 IMAQ-PCI-1413 + b041 IMAQ-PCI-1407 + b051 IMAQ-PXI-1407 + b061 IMAQ-PCI-1411 + b071 IMAQ-PCI-1422 + b081 IMAQ-PXI-1422 + b091 IMAQ-PXI-1411 + c801 PCI-GPIB + c831 PCI-GPIB bridge +1094 First International Computers [FIC] +# nee CMD Technology Inc +1095 Silicon Image, Inc. + 0240 Adaptec AAR-1210SA SATA HostRAID Controller + 0640 PCI0640 + 0643 PCI0643 + 0646 PCI0646 + 0647 PCI0647 + 0648 PCI0648 + 1043 8025 CUBX motherboard + 0649 SiI 0649 Ultra ATA/100 PCI to ATA Host Controller + 0e11 005d Integrated Ultra ATA-100 Dual Channel Controller + 0e11 007e Integrated Ultra ATA-100 IDE RAID Controller + 101e 0649 AMI MegaRAID IDE 100 Controller + 0650 PBC0650A + 0670 USB0670 + 1095 0670 USB0670 + 0673 USB0673 + 0680 PCI0680 Ultra ATA-133 Host Controller + 1095 0680 SiI 0680 ATA/133 Controller + 1095 3680 Winic W-680 (Silicon Image 680 based) + 3112 SiI 3112 [SATALink/SATARaid] Serial ATA Controller + 1095 3112 SiI 3112 SATALink Controller + 1095 6112 SiI 3112 SATARaid Controller + 9005 0250 SATAConnect 1205SA Host Controller + 3114 SiI 3114 [SATALink/SATARaid] Serial ATA Controller + 1095 3114 SiI 3114 SATALink Controller + 1095 6114 SiI 3114 SATARaid Controller + 3124 SiI 3124 PCI-X Serial ATA Controller + 1095 3124 SiI 3124 PCI-X Serial ATA Controller + 3132 SiI 3132 Serial ATA Raid II Controller + 3512 SiI 3512 [SATALink/SATARaid] Serial ATA Controller + 1095 3512 SiI 3512 SATALink Controller + 1095 6512 SiI 3512 SATARaid Controller + 3531 Sil 3531 [SATALink/SATARaid] Serial ATA Controller +1096 Alacron +1097 Appian Technology +1098 Quantum Designs (H.K.) Ltd + 0001 QD-8500 + 0002 QD-8580 +1099 Samsung Electronics Co., Ltd +109a Packard Bell +109b Gemlight Computer Ltd. +109c Megachips Corporation +109d Zida Technologies Ltd. +109e Brooktree Corporation + 032e Bt878 Video Capture + 0350 Bt848 Video Capture + 0351 Bt849A Video capture + 0369 Bt878 Video Capture + 1002 0001 TV-Wonder + 1002 0003 TV-Wonder/VE + 036c Bt879(??) Video Capture + 13e9 0070 Win/TV (Video Section) + 036e Bt878 Video Capture + 0070 13eb WinTV Series + 0070 ff01 Viewcast Osprey 200 + 0071 0101 DigiTV PCI + 107d 6606 WinFast TV 2000 + 11bd 0012 PCTV pro (TV + FM stereo receiver) + 11bd 001c PCTV Sat (DBC receiver) + 127a 0001 Bt878 Mediastream Controller NTSC + 127a 0002 Bt878 Mediastream Controller PAL BG + 127a 0003 Bt878a Mediastream Controller PAL BG + 127a 0048 Bt878/832 Mediastream Controller + 144f 3000 MagicTView CPH060 - Video + 1461 0002 TV98 Series (TV/No FM/Remote) + 1461 0003 AverMedia UltraTV PCI 350 + 1461 0004 AVerTV WDM Video Capture + 1461 0761 AverTV DVB-T + 1461 0771 AverMedia AVerTV DVB-T 771 + 14f1 0001 Bt878 Mediastream Controller NTSC + 14f1 0002 Bt878 Mediastream Controller PAL BG + 14f1 0003 Bt878a Mediastream Controller PAL BG + 14f1 0048 Bt878/832 Mediastream Controller + 1822 0001 VisionPlus DVB card + 1851 1850 FlyVideo'98 - Video + 1851 1851 FlyVideo II + 1852 1852 FlyVideo'98 - Video (with FM Tuner) + 18ac d500 DViCO FusionHDTV5 Lite + 270f fc00 Digitop DTT-1000 + bd11 1200 PCTV pro (TV + FM stereo receiver) + 036f Bt879 Video Capture + 127a 0044 Bt879 Video Capture NTSC + 127a 0122 Bt879 Video Capture PAL I + 127a 0144 Bt879 Video Capture NTSC + 127a 0222 Bt879 Video Capture PAL BG + 127a 0244 Bt879a Video Capture NTSC + 127a 0322 Bt879 Video Capture NTSC + 127a 0422 Bt879 Video Capture NTSC + 127a 1122 Bt879 Video Capture PAL I + 127a 1222 Bt879 Video Capture PAL BG + 127a 1322 Bt879 Video Capture NTSC + 127a 1522 Bt879a Video Capture PAL I + 127a 1622 Bt879a Video Capture PAL BG + 127a 1722 Bt879a Video Capture NTSC + 14f1 0044 Bt879 Video Capture NTSC + 14f1 0122 Bt879 Video Capture PAL I + 14f1 0144 Bt879 Video Capture NTSC + 14f1 0222 Bt879 Video Capture PAL BG + 14f1 0244 Bt879a Video Capture NTSC + 14f1 0322 Bt879 Video Capture NTSC + 14f1 0422 Bt879 Video Capture NTSC + 14f1 1122 Bt879 Video Capture PAL I + 14f1 1222 Bt879 Video Capture PAL BG + 14f1 1322 Bt879 Video Capture NTSC + 14f1 1522 Bt879a Video Capture PAL I + 14f1 1622 Bt879a Video Capture PAL BG + 14f1 1722 Bt879a Video Capture NTSC + 1851 1850 FlyVideo'98 - Video + 1851 1851 FlyVideo II + 1852 1852 FlyVideo'98 - Video (with FM Tuner) + 0370 Bt880 Video Capture + 1851 1850 FlyVideo'98 + 1851 1851 FlyVideo'98 EZ - video + 1852 1852 FlyVideo'98 (with FM Tuner) + 0878 Bt878 Audio Capture + 0070 13eb WinTV Series + 0070 ff01 Viewcast Osprey 200 + 0071 0101 DigiTV PCI + 1002 0001 TV-Wonder + 1002 0003 TV-Wonder/VE + 11bd 0012 PCTV pro (TV + FM stereo receiver, audio section) + 11bd 001c PCTV Sat (DBC receiver) + 127a 0001 Bt878 Video Capture (Audio Section) + 127a 0002 Bt878 Video Capture (Audio Section) + 127a 0003 Bt878 Video Capture (Audio Section) + 127a 0048 Bt878 Video Capture (Audio Section) + 13e9 0070 Win/TV (Audio Section) + 144f 3000 MagicTView CPH060 - Audio + 1461 0002 Avermedia PCTV98 Audio Capture + 1461 0003 UltraTV PCI 350 + 1461 0004 AVerTV WDM Audio Capture + 1461 0761 AVerTV DVB-T + 1461 0771 AverMedia AVerTV DVB-T 771 + 14f1 0001 Bt878 Video Capture (Audio Section) + 14f1 0002 Bt878 Video Capture (Audio Section) + 14f1 0003 Bt878 Video Capture (Audio Section) + 14f1 0048 Bt878 Video Capture (Audio Section) + 1822 0001 VisionPlus DVB Card + 18ac d500 DViCO FusionHDTV5 Lite + 270f fc00 Digitop DTT-1000 + bd11 1200 PCTV pro (TV + FM stereo receiver, audio section) + 0879 Bt879 Audio Capture + 127a 0044 Bt879 Video Capture (Audio Section) + 127a 0122 Bt879 Video Capture (Audio Section) + 127a 0144 Bt879 Video Capture (Audio Section) + 127a 0222 Bt879 Video Capture (Audio Section) + 127a 0244 Bt879 Video Capture (Audio Section) + 127a 0322 Bt879 Video Capture (Audio Section) + 127a 0422 Bt879 Video Capture (Audio Section) + 127a 1122 Bt879 Video Capture (Audio Section) + 127a 1222 Bt879 Video Capture (Audio Section) + 127a 1322 Bt879 Video Capture (Audio Section) + 127a 1522 Bt879 Video Capture (Audio Section) + 127a 1622 Bt879 Video Capture (Audio Section) + 127a 1722 Bt879 Video Capture (Audio Section) + 14f1 0044 Bt879 Video Capture (Audio Section) + 14f1 0122 Bt879 Video Capture (Audio Section) + 14f1 0144 Bt879 Video Capture (Audio Section) + 14f1 0222 Bt879 Video Capture (Audio Section) + 14f1 0244 Bt879 Video Capture (Audio Section) + 14f1 0322 Bt879 Video Capture (Audio Section) + 14f1 0422 Bt879 Video Capture (Audio Section) + 14f1 1122 Bt879 Video Capture (Audio Section) + 14f1 1222 Bt879 Video Capture (Audio Section) + 14f1 1322 Bt879 Video Capture (Audio Section) + 14f1 1522 Bt879 Video Capture (Audio Section) + 14f1 1622 Bt879 Video Capture (Audio Section) + 14f1 1722 Bt879 Video Capture (Audio Section) + 0880 Bt880 Audio Capture + 2115 BtV 2115 Mediastream controller + 2125 BtV 2125 Mediastream controller + 2164 BtV 2164 + 2165 BtV 2165 + 8230 Bt8230 ATM Segment/Reassembly Ctrlr (SRC) + 8472 Bt8472 + 8474 Bt8474 +109f Trigem Computer Inc. +10a0 Meidensha Corporation +10a1 Juko Electronics Ind. Co. Ltd +10a2 Quantum Corporation +10a3 Everex Systems Inc +10a4 Globe Manufacturing Sales +10a5 Smart Link Ltd. + 3052 SmartPCI562 56K Modem + 5449 SmartPCI561 modem +10a6 Informtech Industrial Ltd. +10a7 Benchmarq Microelectronics +10a8 Sierra Semiconductor + 0000 STB Horizon 64 +10a9 Silicon Graphics, Inc. + 0001 Crosstalk to PCI Bridge + 0002 Linc I/O controller + 0003 IOC3 I/O controller + 0004 O2 MACE + 0005 RAD Audio + 0006 HPCEX + 0007 RPCEX + 0008 DiVO VIP + 0009 AceNIC Gigabit Ethernet + 10a9 8002 AceNIC Gigabit Ethernet + 0010 AMP Video I/O + 0011 GRIP + 0012 SGH PSHAC GSN + 0208 SSIM1 SAS Adapter + 1001 Magic Carpet + 1002 Lithium + 1003 Dual JPEG 1 + 1004 Dual JPEG 2 + 1005 Dual JPEG 3 + 1006 Dual JPEG 4 + 1007 Dual JPEG 5 + 1008 Cesium + 100a IOC4 I/O controller + 1504 SSIM1 Fibre Channel Adapter + 2001 Fibre Channel + 2002 ASDE + 4001 TIO-CE PCI Express Bridge + 4002 TIO-CE PCI Express Port + 8001 O2 1394 + 8002 G-net NT + 8010 Broadcom e-net [SGI IO9/IO10 BaseIO] + 8018 Broadcom e-net [SGI A330 Server BaseIO] +10aa ACC Microelectronics + 0000 ACCM 2188 + 2051 2051 CPU bridge + 5842 2051 ISA bridge +10ab Digicom +10ac Honeywell IAC +10ad Symphony Labs + 0001 W83769F + 0003 SL82C103 + 0005 SL82C105 + 0103 SL82c103 + 0105 SL82c105 + 0565 W83C553F/W83C554F +10ae Cornerstone Technology +10af Micro Computer Systems Inc +10b0 CardExpert Technology +10b1 Cabletron Systems Inc +10b2 Raytheon Company +10b3 Databook Inc + 3106 DB87144 + b106 DB87144 +10b4 STB Systems Inc + 1b1d Velocity 128 3D + 10b4 237e Velocity 4400 +10b5 PLX Technology, Inc. + 0001 i960 PCI bus interface + 1024 Acromag, Inc. IndustryPack Carrier Card + 1042 Brandywine / jxi2, Inc. - PMC-SyncClock32, IRIG A & B, Nasa 36 + 106a Dual OX16C952 4 port serial adapter [Megawolf Romulus/4] + 1076 VScom 800 8 port serial adaptor + 1077 VScom 400 4 port serial adaptor + 1078 VScom 210 2 port serial and 1 port parallel adaptor + 1103 VScom 200 2 port serial adaptor + 1146 VScom 010 1 port parallel adaptor + 1147 VScom 020 2 port parallel adaptor + 2540 IXXAT CAN-Interface PC-I 04/PCI + 2724 Thales PCSM Security Card + 6140 PCI6140 32-bit 33MHz PCI-to-PCI Bridge + 6150 PCI6150 32-bit 33MHz PCI-to-PCI Bridge + 6152 PCI6152 32-bit 66MHz PCI-to-PCI Bridge + 6154 PCI6154 64-bit 66MHz PCI-to-PCI Bridge + 6254 PCI6254 64-bit 66MHz PCI-to-PCI Bridge + 6466 PCI6466 64-bit 66MHz PCI-to-PCI Bridge + 6520 PCI6520 64-bit 133MHz PCI-X-to-PCI-X Bridge + 6540 PCI6540 64-bit 133MHz PCI-X-to-PCI-X Bridge + 1775 1100 CR11 Single Board Computer + 4c53 10e0 PSL09 PrPMC + 6541 PCI6540/6466 PCI-PCI bridge (non-transparent mode, primary side) + 1775 1100 CR11 Single Board Computer + 4c53 10e0 PSL09 PrPMC + 6542 PCI6540/6466 PCI-PCI bridge (non-transparent mode, secondary side) + 1775 1100 CR11 Single Board Computer + 4c53 10e0 PSL09 PrPMC + 8111 PEX 8111 PCI Express-to-PCI Bridge + 8112 PEX8112 x1 Lane PCI Express-to-PCI Bridge + 8114 PEX 8114 PCI Express-to-PCI/PCI-X Bridge + 8311 PEX8311 x1 Lane PCI Express-to-Generic Local Bus Bridge + 8505 PEX 8505 5-lane, 5-port PCI Express Switch + 8508 PEX 8508 8-lane, 5-port PCI Express Switch + 8509 PEX 8509 8-lane, 8-port PCI Express Switch + 8512 PEX 8512 12-lane, 5-port PCI Express Switch + 8516 PEX 8516 Versatile PCI Express Switch + 8517 PEX 8517 16-lane, 5-port PCI Express Switch + 8518 PEX 8518 16-lane, 5-port PCI Express Switch + 8524 PEX 8524 24-lane, 6-port PCI Express Switch + 8525 PEX 8525 24-lane, 5-port PCI Express Switch + 8532 PEX 8532 Versatile PCI Express Switch + 8533 PEX 8533 32-lane, 6-port PCI Express Switch + 8547 PEX 8547 48-lane, 3-port PCI Express Switch + 8548 PEX 8548 48-lane, 9-port PCI Express Switch + 8647 PEX 8647 48-Lane, 3-Port PCI Express Gen 2 (5.0 GT/s) Switch + 9030 PCI9030 32-bit 33MHz PCI <-> IOBus Bridge + 10b5 2695 Hilscher CIF50-PB Profibus Master Board + 10b5 2862 Alpermann+Velte PCL PCI LV (3V/5V): Timecode Reader Board + 10b5 2906 Alpermann+Velte PCI TS (3V/5V): Time Synchronisation Board + 10b5 2940 Alpermann+Velte PCL PCI D (3V/5V): Timecode Reader Board + 10b5 2977 IXXAT iPC-I XC16/PCI CAN Board + 10b5 2978 SH ARC-PCIu SOHARD ARCNET card + 10b5 3025 Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board + 10b5 3068 Alpermann+Velte PCL PCI HD (3V/5V): Timecode Reader Board + 12fe 0111 CPCI-ASIO4 (ESD 4-port Serial Interface Board) + 1369 9c01 VX222v2 + 1369 9d01 VX222-Mic + 1369 9d02 VX222-Mic + 1369 9e01 PCX924v2 + 1369 9f01 PCX924-Mic + 1369 9f02 PCX924-Mic + 1369 a001 PCX22v2 + 1369 a701 LCM220v2 + 1369 a801 LCM200 + 1397 3136 4xS0-ISDN PCI Adapter + 1397 3137 S2M-E1-ISDN PCI Adapter + 1518 0200 Kontron ThinkIO-C + 15ed 1002 MCCS 8-port Serial Hot Swap + 15ed 1003 MCCS 16-port Serial Hot Swap + 9036 9036 + 9050 PCI <-> IOBus Bridge + 10b5 1067 IXXAT CAN i165 + 10b5 114e Wasco WITIO PCI168extended + 10b5 1169 Wasco OPTOIO32standard 32 digital in, 32 digital out + 10b5 1172 IK220 (Heidenhain) + 10b5 2036 SatPak GPS + 10b5 2221 Alpermann+Velte PCL PCI LV: Timecode Reader Board + 10b5 2273 SH ARC-PCI SOHARD ARCNET card + 10b5 2431 Alpermann+Velte PCL PCI D: Timecode Reader Board + 10b5 2905 Alpermann+Velte PCI TS: Time Synchronisation Board + 10b5 3196 Goramo PLX200SYN sync serial card + 10b5 9050 PCI-I04 PCI Passive PC/CAN Interface + 1369 8901 PCX11+ PCI + 1369 8f01 VX222 + 1369 9401 PCX924 + 1369 9501 PCX22 + 1498 0362 TPMC866 8 Channel Serial Card + 1522 0001 RockForce 4 Port V.90 Data/Fax/Voice Modem + 1522 0002 RockForce 2 Port V.90 Data/Fax/Voice Modem + 1522 0003 RockForce 6 Port V.90 Data/Fax/Voice Modem + 1522 0004 RockForce 8 Port V.90 Data/Fax/Voice Modem + 1522 0010 RockForce2000 4 Port V.90 Data/Fax/Voice Modem + 1522 0020 RockForce2000 2 Port V.90 Data/Fax/Voice Modem + 15ed 1000 Macrolink MCCS 8-port Serial + 15ed 1001 Macrolink MCCS 16-port Serial + 15ed 1002 Macrolink MCCS 8-port Serial Hot Swap + 15ed 1003 Macrolink MCCS 16-port Serial Hot Swap + 5654 2036 OpenSwitch 6 Telephony card + 5654 3132 OpenSwitch 12 Telephony card + 5654 5634 OpenLine4 Telephony Card + d531 c002 PCIntelliCAN 2xSJA1000 CAN bus + d84d 4006 EX-4006 1P + d84d 4008 EX-4008 1P EPP/ECP + d84d 4014 EX-4014 2P + d84d 4018 EX-4018 3P EPP/ECP + d84d 4025 EX-4025 1S(16C550) RS-232 + d84d 4027 EX-4027 1S(16C650) RS-232 + d84d 4028 EX-4028 1S(16C850) RS-232 + d84d 4036 EX-4036 2S(16C650) RS-232 + d84d 4037 EX-4037 2S(16C650) RS-232 + d84d 4038 EX-4038 2S(16C850) RS-232 + d84d 4052 EX-4052 1S(16C550) RS-422/485 + d84d 4053 EX-4053 2S(16C550) RS-422/485 + d84d 4055 EX-4055 4S(16C550) RS-232 + d84d 4058 EX-4055 4S(16C650) RS-232 + d84d 4065 EX-4065 8S(16C550) RS-232 + d84d 4068 EX-4068 8S(16C650) RS-232 + d84d 4078 EX-4078 2S(16C552) RS-232+1P + 9052 PCI9052 PCI <-> IOBus Bridge + 9054 PCI9054 32-bit 33MHz PCI <-> IOBus Bridge + 10b5 2455 Wessex Techology PHIL-PCI + 10b5 2696 Innes Corp AM Radcap card + 10b5 2717 Innes Corp Auricon card + 10b5 2844 Innes Corp TVS Encoder card + 12c7 4001 Intel Dialogic DM/V960-4T1 PCI + 12d9 0002 PCI Prosody Card rev 1.5 + 14b4 d100 Dektec DTA-100 + 14b4 d114 Dektec DTA-120 + 16df 0011 PIKA PrimeNet MM PCI + 16df 0012 PIKA PrimeNet MM cPCI 8 + 16df 0013 PIKA PrimeNet MM cPCI 8 (without CAS Signaling) + 16df 0014 PIKA PrimeNet MM cPCI 4 + 16df 0015 PIKA Daytona MM + 16df 0016 PIKA InLine MM + 9056 PCI9056 32-bit 66MHz PCI <-> IOBus Bridge + 10b5 2979 CellinkBlade 11 - CPCI board VoATM AAL1 + 10b5 3352 Alpermann+Velte PCL PCIe HD: Timecode Reader Board + 10b5 3353 Alpermann+Velte PCL PCIe D: Timecode Reader Board + 10b5 3354 Alpermann+Velte PCL PCIe LV: Timecode Reader Board + 10b5 3355 Alpermann+Velte PCL PCIe L: Timecode Reader Board + 10b5 3415 Alpermann+Velte PCIe TS: Time Synchronisation Board + 1369 c001 LX6464ES + 1369 c201 LX1616ES + 14b4 d140 Dektec DTA-140 + 9060 PCI9060 32-bit 33MHz PCI <-> IOBus Bridge + 906d 9060SD + 125c 0640 Aries 16000P + 906e 9060ES + 9080 PCI9080 32-bit; 33MHz PCI <-> IOBus Bridge + 103c 10eb (Agilent) E2777B 83K Series Optical Communication Interface + 103c 10ec (Agilent) E6978-66442 PCI CIC + 10b5 1123 Sectra KK631 encryption board + 10b5 9080 9080 [real subsystem ID not set] + 12d9 0002 PCI Prosody Card + 12df 4422 4422PCI ["Do-All" Telemetry Data Aquisition System] + 1369 9601 PCX822np + 1369 a102 PCX822v2 + 1369 a201 PCX442 + 1369 a301 LCM440v2 + 1369 a401 VX822 + 1369 a402 VX822v2 + 1369 a901 LCM420 + 1369 aa01 VX820v2 + 1517 000b ECSG-1R3ADC-PMC Clock synthesizer + 9656 PCI9656 PCI <-> IOBus Bridge + 1517 000f ECDR-GC314-PMC Receiver + 1885 0700 Tsunami FPGA PMC with Altera Stratix S40 + 1885 0701 Tsunami FPGA PMC with Altera Stratix S30 + a100 Blackmagic Design DeckLink + bb04 B&B 3PCIOSD1A Isolated PCI Serial + c001 CronyxOmega-PCI (8-port RS232) +10b6 Madge Networks + 0001 Smart 16/4 PCI Ringnode + 0002 Smart 16/4 PCI Ringnode Mk2 + 10b6 0002 Smart 16/4 PCI Ringnode Mk2 + 10b6 0006 16/4 CardBus Adapter + 0003 Smart 16/4 PCI Ringnode Mk3 + 0e11 b0fd Compaq NC4621 PCI, 4/16, WOL + 10b6 0003 Smart 16/4 PCI Ringnode Mk3 + 10b6 0007 Presto PCI Plus Adapter + 0004 Smart 16/4 PCI Ringnode Mk1 + 0006 16/4 Cardbus Adapter + 10b6 0006 16/4 CardBus Adapter + 0007 Presto PCI Adapter + 10b6 0007 Presto PCI + 0009 Smart 100/16/4 PCI-HS Ringnode + 10b6 0009 Smart 100/16/4 PCI-HS Ringnode + 000a Smart 100/16/4 PCI Ringnode + 10b6 000a Smart 100/16/4 PCI Ringnode + 000b 16/4 CardBus Adapter Mk2 + 10b6 0008 16/4 CardBus Adapter Mk2 + 10b6 000b 16/4 Cardbus Adapter Mk2 + 000c RapidFire 3140V2 16/4 TR Adapter + 10b6 000c RapidFire 3140V2 16/4 TR Adapter + 1000 Collage 25/155 ATM Client Adapter + 1001 Collage 155 ATM Server Adapter +10b7 3Com Corporation + 0001 3c985 1000BaseSX (SX/TX) + 0013 AR5212 802.11abg NIC (3CRDAG675) + 10b7 2031 3CRDAG675 11a/b/g Wireless PCI Adapter + 0910 3C910-A01 + 1006 MINI PCI type 3B Data Fax Modem + 1007 Mini PCI 56k Winmodem + 10b7 615b Mini PCI 56K Modem + 10b7 615c Mini PCI 56K Modem + 1201 3c982-TXM 10/100baseTX Dual Port A [Hydra] + 1202 3c982-TXM 10/100baseTX Dual Port B [Hydra] + 1700 3c940 10/100/1000Base-T [Marvell] + 1043 80eb A7V600/P4P800/K8V motherboard + 10b7 0010 3C940 Gigabit LOM Ethernet Adapter + 10b7 0020 3C941 Gigabit LOM Ethernet Adapter + 147b 1407 KV8-MAX3 motherboard + 3390 3c339 TokenLink Velocity + 3590 3c359 TokenLink Velocity XL + 10b7 3590 TokenLink Velocity XL Adapter (3C359/359B) + 4500 3c450 HomePNA [Tornado] + 5055 3c555 Laptop Hurricane + 5057 3c575 Megahertz 10/100 LAN CardBus [Boomerang] + 10b7 5a57 3C575 Megahertz 10/100 LAN Cardbus PC Card + 5157 3cCFE575BT Megahertz 10/100 LAN CardBus [Cyclone] + 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card + 5257 3cCFE575CT CardBus [Cyclone] + 10b7 5c57 FE575C-3Com 10/100 LAN CardBus-Fast Ethernet + 5900 3c590 10BaseT [Vortex] + 5920 3c592 EISA 10mbps Demon/Vortex + 5950 3c595 100BaseTX [Vortex] + 5951 3c595 100BaseT4 [Vortex] + 5952 3c595 100Base-MII [Vortex] + 5970 3c597 EISA Fast Demon/Vortex + 5b57 3c595 Megahertz 10/100 LAN CardBus [Boomerang] + 10b7 5b57 3C575 Megahertz 10/100 LAN Cardbus PC Card + 6000 3CRSHPW796 [OfficeConnect Wireless CardBus] + 6001 3com 3CRWE154G72 [Office Connect Wireless LAN Adapter] + 6055 3c556 Hurricane CardBus [Cyclone] + 6056 3c556B CardBus [Tornado] + 10b7 6556 10/100 Mini PCI Ethernet Adapter + 6560 3cCFE656 CardBus [Cyclone] + 10b7 656a 3CCFEM656 10/100 LAN+56K Modem CardBus + 6561 3cCFEM656 10/100 LAN+56K Modem CardBus + 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus + 6562 3cCFEM656B 10/100 LAN+Winmodem CardBus [Cyclone] + 10b7 656b 3CCFEM656B 10/100 LAN+56K Modem CardBus + 6563 3cCFEM656B 10/100 LAN+56K Modem CardBus + 10b7 656b 3CCFEM656 10/100 LAN+56K Modem CardBus + 6564 3cXFEM656C 10/100 LAN+Winmodem CardBus [Tornado] + 7646 3cSOHO100-TX Hurricane + 7770 3CRWE777 PCI(PLX) Wireless Adaptor [Airconnect] + 7940 3c803 FDDILink UTP Controller + 7980 3c804 FDDILink SAS Controller + 7990 3c805 FDDILink DAS Controller + 80eb 3c940B 10/100/1000Base-T + 8811 Token ring + 9000 3c900 10BaseT [Boomerang] + 9001 3c900 10Mbps Combo [Boomerang] + 9004 3c900B-TPO Etherlink XL [Cyclone] + 10b7 9004 3C900B-TPO Etherlink XL TPO 10Mb + 9005 3c900B-Combo Etherlink XL [Cyclone] + 10b7 9005 3C900B-Combo Etherlink XL Combo + 9006 3c900B-TPC Etherlink XL [Cyclone] + 900a 3c900B-FL 10base-FL [Cyclone] + 9050 3c905 100BaseTX [Boomerang] + 9051 3c905 100BaseT4 [Boomerang] + 9054 3C905B-TX Fast Etherlink XL PCI + 10b7 9054 3C905B-TX Fast Etherlink XL PCI + 9055 3c905B 100BaseTX [Cyclone] + 1028 0080 3C905B Fast Etherlink XL 10/100 + 1028 0081 3C905B Fast Etherlink XL 10/100 + 1028 0082 3C905B Fast Etherlink XL 10/100 + 1028 0083 3C905B Fast Etherlink XL 10/100 + 1028 0084 3C905B Fast Etherlink XL 10/100 + 1028 0085 3C905B Fast Etherlink XL 10/100 + 1028 0086 3C905B Fast Etherlink XL 10/100 + 1028 0087 3C905B Fast Etherlink XL 10/100 + 1028 0088 3C905B Fast Etherlink XL 10/100 + 1028 0089 3C905B Fast Etherlink XL 10/100 + 1028 0090 3C905B Fast Etherlink XL 10/100 + 1028 0091 3C905B Fast Etherlink XL 10/100 + 1028 0092 3C905B Fast Etherlink XL 10/100 + 1028 0093 3C905B Fast Etherlink XL 10/100 + 1028 0094 3C905B Fast Etherlink XL 10/100 + 1028 0095 3C905B Fast Etherlink XL 10/100 + 1028 0096 3C905B Fast Etherlink XL 10/100 + 1028 0097 3C905B Fast Etherlink XL 10/100 + 1028 0098 3C905B Fast Etherlink XL 10/100 + 1028 0099 3C905B Fast Etherlink XL 10/100 + 10b7 9055 3C905B Fast Etherlink XL 10/100 + 9056 3c905B-T4 Fast EtherLink XL [Cyclone] + 9058 3c905B Deluxe Etherlink 10/100/BNC [Cyclone] + 905a 3c905B-FX Fast Etherlink XL FX 100baseFx [Cyclone] + 9200 3c905C-TX/TX-M [Tornado] + 1028 0095 3C920 Integrated Fast Ethernet Controller + 1028 0097 3C920 Integrated Fast Ethernet Controller + 1028 00b4 OptiPlex GX110 + 1028 00d8 Precision 530 + 1028 00fe Optiplex GX240 + 1028 012a 3C920 Integrated Fast Ethernet Controller [Latitude C640] + 10b7 1000 3C905CX-TX/TX-M Fast Etherlink for PC Management NIC + 10b7 7000 10/100 Mini PCI Ethernet Adapter + 10f1 2466 Tiger MPX S2466 (3C920 Integrated Fast Ethernet Controller) + 144d c005 X10 Laptop + 9201 3C920B-EMB Integrated Fast Ethernet Controller [Tornado] + 1043 80ab A7N8X Deluxe onboard 3C920B-EMB Integrated Fast Ethernet Controller + 9202 3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller + 9210 3C920B-EMB-WNM Integrated Fast Ethernet Controller + 9300 3CSOHO100B-TX 910-A01 [tulip] + 9800 3c980-TX Fast Etherlink XL Server Adapter [Cyclone] + 10b7 9800 3c980-TX Fast Etherlink XL Server Adapter + 9805 3c980-C 10/100baseTX NIC [Python-T] + 10b7 1201 EtherLink Server 10/100 Dual Port A + 10b7 1202 EtherLink Server 10/100 Dual Port B + 10b7 9805 3c980 10/100baseTX NIC [Python-T] + 10f1 2462 Thunder K7 S2462 + 9900 3C990-TX [Typhoon] + 9902 3CR990-TX-95 [Typhoon 56-bit] + 9903 3CR990-TX-97 [Typhoon 168-bit] + 9904 3C990B-TX-M/3C990BSVR [Typhoon2] + 10b7 1000 3CR990B-TX-M [Typhoon2] + 10b7 2000 3CR990BSVR [Typhoon2 Server] + 9905 3CR990-FX-95/97/95 [Typhon Fiber] + 10b7 1101 3CR990-FX-95 [Typhoon Fiber 56-bit] + 10b7 1102 3CR990-FX-97 [Typhoon Fiber 168-bit] + 10b7 2101 3CR990-FX-95 Server [Typhoon Fiber 56-bit] + 10b7 2102 3CR990-FX-97 Server [Typhoon Fiber 168-bit] + 9908 3CR990SVR95 [Typhoon Server 56-bit] + 9909 3CR990SVR97 [Typhoon Server 168-bit] + 990a 3C990SVR [Typhoon Server] + 990b 3C990SVR [Typhoon Server] +10b8 Standard Microsystems Corp [SMC] + 0005 83c170 EPIC/100 Fast Ethernet Adapter + 1055 e000 LANEPIC 10/100 [EVB171Q-PCI] + 1055 e002 LANEPIC 10/100 [EVB171G-PCI] + 10b8 a011 EtherPower II 10/100 + 10b8 a014 EtherPower II 10/100 + 10b8 a015 EtherPower II 10/100 + 10b8 a016 EtherPower II 10/100 + 10b8 a017 EtherPower II 10/100 + 0006 83c175 EPIC/100 Fast Ethernet Adapter + 1055 e100 LANEPIC Cardbus Fast Ethernet Adapter + 1055 e102 LANEPIC Cardbus Fast Ethernet Adapter + 1055 e300 LANEPIC Cardbus Fast Ethernet Adapter + 1055 e302 LANEPIC Cardbus Fast Ethernet Adapter + 10b8 a012 LANEPIC Cardbus Fast Ethernet Adapter + 13a2 8002 LANEPIC Cardbus Fast Ethernet Adapter + 13a2 8006 LANEPIC Cardbus Fast Ethernet Adapter + 1000 FDC 37c665 + 1001 FDC 37C922 + 2802 SMC2802W [EZ Connect g] + a011 83C170QF + b106 SMC34C90 +10b9 ALi Corporation + 0101 CMI8338/C3DX PCI Audio Device + 0111 C-Media CMI8738/C3DX Audio Device (OEM) + 10b9 0111 C-Media CMI8738/C3DX Audio Device (OEM) + 0780 Multi-IO Card + 0782 Multi-IO Card + 1435 M1435 + 1445 M1445 + 1449 M1449 + 1451 M1451 + 1461 M1461 + 1489 M1489 + 1511 M1511 [Aladdin] + 1512 M1512 [Aladdin] + 1513 M1513 [Aladdin] + 1521 M1521 [Aladdin III] + 10b9 1521 ALI M1521 Aladdin III CPU Bridge + 1523 M1523 + 10b9 1523 ALI M1523 ISA Bridge + 1531 M1531 [Aladdin IV] + 1533 M1533/M1535/M1543 PCI to ISA Bridge [Aladdin IV/V/V+] + 1014 053b ThinkPad R40e + 10b9 1533 ALi M1533 Aladdin IV/V ISA Bridge + 1541 M1541 + 10b9 1541 ALI M1541 Aladdin V/V+ AGP System Controller + 1543 M1543 + 1563 M1563 HyperTransport South Bridge + 10b9 1563 ASRock 939Dual-SATA2 Motherboard + 1849 1563 ASRock 939Dual-SATA2 Motherboard + 1573 PCI to LPC Controller + 1575 M1575 South Bridge + 1621 M1621 + 1631 ALI M1631 PCI North Bridge Aladdin Pro III + 1632 M1632M Northbridge+Trident + 1641 ALI M1641 PCI North Bridge Aladdin Pro IV + 1644 M1644/M1644T Northbridge+Trident + 1646 M1646 Northbridge+Trident + 1647 M1647 Northbridge [MAGiK 1 / MobileMAGiK 1] + 1651 M1651/M1651T Northbridge [Aladdin-Pro 5/5M,Aladdin-Pro 5T/5TM] + 1671 M1671 Super P4 Northbridge [AGP4X,PCI and SDR/DDR] + 1672 M1672 Northbridge [CyberALADDiN-P4] + 1681 M1681 P4 Northbridge [AGP8X,HyperTransport and SDR/DDR] + 1687 M1687 K8 Northbridge [AGP8X and HyperTransport] + 1689 M1689 K8 Northbridge [Super K8 Single Chip] + 1695 M1695 K8 Northbridge [PCI Express and HyperTransport] + 1697 M1697 HTT Host Bridge + 3141 M3141 + 3143 M3143 + 3145 M3145 + 3147 M3147 + 3149 M3149 + 3151 M3151 + 3307 M3307 + 3309 M3309 + 3323 M3325 Video/Audio Decoder + 5212 M4803 + 5215 MS4803 + 5217 M5217H + 5219 M5219 + 5225 M5225 + 5228 M5228 ALi ATA/RAID Controller + 5229 M5229 IDE + 1014 050f ThinkPad R30 + 1014 053d ThinkPad R40e + 103c 0024 Pavilion ze4400 builtin IDE + 1043 8053 A7A266 Motherboard IDE + 1849 5229 ASRock 939Dual-SATA2 Motherboard IDE (PATA) + 5235 M5225 + 5237 USB 1.1 Controller + 1014 0540 ThinkPad R40e + 103c 0024 Pavilion ze4400 builtin USB + 104d 810f VAIO PCG-U1 USB/OHCI Revision 1.0 + 10b9 5237 ASRock 939Dual-SATA2 Motherboard + 1849 5237 ASRock 939Dual-SATA2 Motherboard + 5239 USB 2.0 Controller + 10b9 5239 ASRock 939Dual-SATA2 Motherboard + 1849 5239 ASRock 939Dual-SATA2 Motherboard + 5243 M1541 PCI to AGP Controller + 5246 AGP8X Controller + 5247 PCI to AGP Controller + 5249 M5249 HTT to PCI Bridge + 524b PCI Express Root Port + 524c PCI Express Root Port + 524d PCI Express Root Port + 524e PCI Express Root Port + 5251 M5251 P1394 OHCI 1.0 Controller + 5253 M5253 P1394 OHCI 1.1 Controller + 5261 M5261 Ethernet Controller + 5263 ULi 1689,1573 integrated ethernet. + 5281 ALi M5281 Serial ATA / RAID Host Controller + 5287 ULi 5287 SATA + 5288 ULi M5288 SATA + 1043 8056 A8R-MVP Mainboard + 5289 ULi 5289 SATA + 5450 Lucent Technologies Soft Modem AMR + 5451 M5451 PCI AC-Link Controller Audio Device + 1014 0506 ThinkPad R30 + 1014 053e ThinkPad R40e + 103c 0024 Pavilion ze4400 builtin Audio + 5453 M5453 PCI AC-Link Controller Modem Device + 5455 M5455 PCI AC-Link Controller Audio Device + 10b9 5455 ASRock 939Dual-SATA2 Motherboard + 1849 0850 ASRock 939Dual-SATA2 Motherboard + 5457 M5457 AC'97 Modem Controller + 1014 0535 ThinkPad R40e + 103c 0024 Pavilion ze4400 builtin Modem Device + 5459 SmartLink SmartPCI561 56K Modem + 545a SmartLink SmartPCI563 56K Modem + 5461 High Definition Audio/AC'97 Host Controller + 5471 M5471 Memory Stick Controller + 5473 M5473 SD-MMC Controller + 7101 M7101 Power Management Controller [PMU] + 1014 0510 ThinkPad R30 + 1014 053c ThinkPad R40e + 103c 0024 Pavilion ze4400 + 1849 7101 ASRock 939Dual-SATA2 Motherboard +10ba Mitsubishi Electric Corp. + 0301 AccelGraphics AccelECLIPSE + 0304 AccelGALAXY A2100 [OEM Evans & Sutherland] + 0308 Tornado 3000 [OEM Evans & Sutherland] + 10dd 0024 Tornado 3000 + 1002 VG500 [VolumePro Volume Rendering Accelerator] +10bb Dapha Electronics Corporation +10bc Advanced Logic Research +10bd Surecom Technology + 0e34 NE-34 +10be Tseng Labs International Co. +10bf Most Inc +10c0 Boca Research Inc. +10c1 ICM Co., Ltd. +10c2 Auspex Systems Inc. +10c3 Samsung Semiconductors, Inc. + 1100 Smartether100 SC1100 LAN Adapter (i82557B) +10c4 Award Software International Inc. +10c5 Xerox Corporation +10c6 Rambus Inc. +10c7 Media Vision +10c8 Neomagic Corporation + 0001 NM2070 [MagicGraph 128] + 0002 NM2090 [MagicGraph 128V] + 0003 NM2093 [MagicGraph 128ZV] + 0004 NM2160 [MagicGraph 128XD] + 1014 00ba MagicGraph 128XD + 1025 1007 MagicGraph 128XD + 1028 0074 MagicGraph 128XD + 1028 0075 MagicGraph 128XD + 1028 007d MagicGraph 128XD + 1028 007e MagicGraph 128XD + 1033 802f MagicGraph 128XD + 104d 801b MagicGraph 128XD + 104d 802f MagicGraph 128XD + 104d 830b MagicGraph 128XD + 10ba 0e00 MagicGraph 128XD + 10c8 0004 MagicGraph 128XD + 10cf 1029 MagicGraph 128XD + 10f7 8308 MagicGraph 128XD + 10f7 8309 MagicGraph 128XD + 10f7 830b MagicGraph 128XD + 10f7 830d MagicGraph 128XD + 10f7 8312 MagicGraph 128XD + 0005 NM2200 [MagicGraph 256AV] + 1014 00dd ThinkPad 570 + 1028 0088 Latitude CPi A + 0006 NM2360 [MagicMedia 256ZX] + 0016 NM2380 [MagicMedia 256XL+] + 10c8 0016 MagicMedia 256XL+ + 0025 NM2230 [MagicGraph 256AV+] + 0083 NM2093 [MagicGraph 128ZV+] + 8005 NM2200 [MagicMedia 256AV Audio] + 0e11 b0d1 MagicMedia 256AV Audio Device on Discovery + 0e11 b126 MagicMedia 256AV Audio Device on Durango + 1014 00dd ThinkPad 390/i1720/i1721 + 1025 1003 MagicMedia 256AV Audio Device on TravelMate 720 + 1028 0088 Latitude CPi A + 1028 008f MagicMedia 256AV Audio Device on Colorado Inspiron + 103c 0007 MagicMedia 256AV Audio Device on Voyager II + 103c 0008 MagicMedia 256AV Audio Device on Voyager III + 103c 000d MagicMedia 256AV Audio Device on Omnibook 900 + 10c8 8005 MagicMedia 256AV Audio Device on FireAnt + 110a 8005 MagicMedia 256AV Audio Device + 14c0 0004 MagicMedia 256AV Audio Device + 8006 NM2360 [MagicMedia 256ZX Audio] + 8016 NM2380 [MagicMedia 256XL+ Audio] +10c9 Dataexpert Corporation +10ca Fujitsu Microelectr., Inc. +10cb Omron Corporation +# nee Mentor ARC Inc +10cc Mai Logic Incorporated + 0660 Articia S Host Bridge + 0661 Articia S PCI Bridge +10cd Advanced System Products, Inc + 1100 ASC1100 + 1200 ASC1200 [(abp940) Fast SCSI-II] + 1300 ABP940-U / ABP960-U + 10cd 1310 ASC1300 SCSI Adapter + 1195 1320 Ultra-SCSI CardBus PC Card REX CB31 + 2300 ABP940-UW + 2500 ABP940-U2W + 2700 ABP3950-U3W +10ce Radius +# nee Citicorp TTI +10cf Fujitsu Limited. + 1414 On-board USB 1.1 companion controller + 1415 On-board USB 2.0 EHCI controller + 1422 E8410 nVidia graphics adapter + 142d HD audio (Realtek ALC262) + 1430 82566MM Intel 1Gb copper LAN interface + 2001 mb86605 + 200c MB86613L IEEE1394 OHCI 1.0 Controller + 2019 MB86295S [CORAL P] + 201e MB86296S [CORAL PA] + 202b MB86297A [Carmine Graphics Controller] +10d1 FuturePlus Systems Corp. +10d2 Molex Incorporated +10d3 Jabil Circuit Inc +10d4 Hualon Microelectronics +10d5 Autologic Inc. +10d6 Cetia +10d7 BCM Advanced Research +10d8 Advanced Peripherals Labs +10d9 Macronix, Inc. [MXIC] + 0431 MX98715 + 0512 MX98713 + 0531 MX987x5 + 1186 1200 DFE-540TX ProFAST 10/100 Adapter + 8625 MX86250 + 8626 Macronix MX86251 + 3Dfx Voodoo Rush + 8888 MX86200 +10da Compaq IPG-Austin + 0508 TC4048 Token Ring 4/16 + 3390 Tl3c3x9 +10db Rohm LSI Systems, Inc. +10dc CERN/ECP/EDU + 0001 STAR/RD24 SCI-PCI (PMC) + 0002 TAR/RD24 SCI-PCI (PMC) + 0021 HIPPI destination + 0022 HIPPI source + 10dc ATT2C15-3 FPGA +10dd Evans & Sutherland + 0100 Lightning 1200 + 10dd 0023 Lightning 1200 15+16M +10de nVidia Corporation + 0008 NV1 [EDGE 3D] + 0009 NV1 [EDGE 3D] + 0010 NV2 [Mutara V08] + 0020 NV4 [RIVA TNT] + 1043 0200 V3400 TNT + 1048 0c18 Erazor II SGRAM + 1048 0c19 Erazor II + 1048 0c1b Erazor II + 1048 0c1c Erazor II + 1092 0550 Viper V550 + 1092 0552 Viper V550 + 1092 4804 Viper V550 + 1092 4808 Viper V550 + 1092 4810 Viper V550 + 1092 4812 Viper V550 + 1092 4815 Viper V550 + 1092 4820 Viper V550 with TV out + 1092 4822 Viper V550 + 1092 4904 Viper V550 + 1092 4914 Viper V550 + 1092 8225 Viper V550 + 10b4 273d Velocity 4400 + 10b4 273e Velocity 4400 + 10b4 2740 Velocity 4400 + 10de 0020 Riva TNT + 1102 1015 Graphics Blaster CT6710 + 1102 1016 Graphics Blaster RIVA TNT + 0028 NV5 [RIVA TNT2/TNT2 Pro] + 1043 0200 AGP-V3800 SGRAM + 1043 0201 AGP-V3800 SDRAM + 1043 0205 PCI-V3800 + 1043 4000 AGP-V3800PRO + 1048 0c21 Synergy II + 1048 0c28 Erazor III + 1048 0c29 Erazor III + 1048 0c2a Erazor III + 1048 0c2b Erazor III + 1048 0c31 Erazor III Pro + 1048 0c32 Erazor III Pro + 1048 0c33 Erazor III Pro + 1048 0c34 Erazor III Pro + 107d 2134 WinFast 3D S320 II + TV-Out + 1092 4804 Viper V770 + 1092 4a00 Viper V770 + 1092 4a02 Viper V770 Ultra + 1092 5a00 RIVA TNT2/TNT2 Pro + 1092 6a02 Viper V770 Ultra + 1092 7a02 Viper V770 Ultra + 10de 0005 RIVA TNT2 Pro + 10de 000f Compaq NVIDIA TNT2 Pro + 1102 1020 3D Blaster RIVA TNT2 + 1102 1026 3D Blaster RIVA TNT2 Digital + 14af 5810 Maxi Gamer Xentor + 0029 NV5 [RIVA TNT2 Ultra] + 1043 0200 AGP-V3800 Deluxe + 1043 0201 AGP-V3800 Ultra SDRAM + 1043 0205 PCI-V3800 Ultra + 1048 0c2e Erazor III Ultra + 1048 0c2f Erazor III Ultra + 1048 0c30 Erazor III Ultra + 1102 1021 3D Blaster RIVA TNT2 Ultra + 1102 1029 3D Blaster RIVA TNT2 Ultra + 1102 102f 3D Blaster RIVA TNT2 Ultra + 14af 5820 Maxi Gamer Xentor 32 + 002a NV5 [Riva TNT2] + 002b NV5 [Riva TNT2] + 002c NV6 [Vanta/Vanta LT] + 1043 0200 AGP-V3800 Combat SDRAM + 1043 0201 AGP-V3800 Combat + 1048 0c20 TNT2 Vanta + 1048 0c21 TNT2 Vanta + 1092 6820 Viper V730 + 1102 1031 CT6938 VANTA 8MB + 1102 1034 CT6894 VANTA 16MB + 14af 5008 Maxi Gamer Phoenix 2 + 002d NV5M64 [RIVA TNT2 Model 64/Model 64 Pro] + 1043 0200 AGP-V3800M + 1043 0201 AGP-V3800M + 1048 0c3a Erazor III LT + 1048 0c3b Erazor III LT + 10de 0006 RIVA TNT2 Model 64/Model 64 Pro + 10de 001e M64 AGP4x + 1102 1023 CT6892 RIVA TNT2 Value + 1102 1024 CT6932 RIVA TNT2 Value 32Mb + 1102 102c CT6931 RIVA TNT2 Value [Jumper] + 1462 8808 MSI-8808 + 1554 1041 Pixelview RIVA TNT2 M64 + 1569 002d Palit Microsystems Daytona TNT2 M64 + 002e NV6 [Vanta] + 002f NV6 [Vanta] + 0034 MCP04 SMBus + 0035 MCP04 IDE + 0036 MCP04 Serial ATA Controller + 0037 MCP04 Ethernet Controller + 0038 MCP04 Ethernet Controller + 003a MCP04 AC'97 Audio Controller + 003b MCP04 USB Controller + 003c MCP04 USB Controller + 003d MCP04 PCI Bridge + 003e MCP04 Serial ATA Controller + 0040 NV40 [GeForce 6800 Ultra] + 0041 NV40 [GeForce 6800] + 1043 817b V9999 Gamer Edition + 0042 NV40.2 [GeForce 6800 LE] + 0043 NV40.3 [GeForce 6800 XE] + 0044 NV40 [GeForce 6800 XT] + 0045 NV40 [GeForce 6800 GT] + 0046 NV45 [GeForce 6800 GT] + 0047 NV40 [GeForce 6800 GS] + 1682 2109 GeForce 6800 GS + 0048 NV40 [GeForce 6800 XT] + 0049 NV40GL + 004d NV40GL [Quadro FX 4000] + 004e NV40GL [Quadro FX 4000] + 0050 CK804 ISA Bridge + 1043 815a K8N4-E or A8N-E Mainboard + 10f1 2865 Tomcat K8E (S2865) + 1458 0c11 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 1565 3402 NF4 AM2L Mainboard + 0051 CK804 ISA Bridge + 1028 0225 PowerEdge T105 ISA Bridge + 0052 CK804 SMBus + 1028 0225 PowerEdge T105 SMBus + 1043 815a K8N4-E or A8N-E Mainboard + 10f1 2865 Tomcat K8E (S2865) + 1458 0c11 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 1565 3402 NF4 AM2L Mainboard + 0053 CK804 IDE + 1043 815a K8N4-E or A8N-E Mainboard + 10f1 2865 Tomcat K8E (S2865) + 1458 5002 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 1565 3402 NF4 AM2L Mainboard + 0054 CK804 Serial ATA Controller + 1028 0225 PowerEdge T105 Serial ATA + 1043 815a A8N-E Mainboard + 10f1 2865 Tomcat K8E (S2865) + 1458 b003 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 1565 5401 NF4 AM2L Mainboard + 0055 CK804 Serial ATA Controller + 1028 0225 PowerEdge T105 Serial ATA + 1043 815a K8N4-E or A8N-E Mainboard + 10f1 2865 Tomcat K8E (S2865) + 1458 b003 GA-K8N Ultra-9 Mainboard + 147b 1c1a KN8-Ultra Mainboard + 1565 5401 NF4 AM2L Mainboard + 0056 CK804 Ethernet Controller + 0057 CK804 Ethernet Controller + 1043 8141 K8N4-E or A8N-E Mainboard + 10de cb84 NF4 Lanparty + 10f1 2865 Tomcat K8E (S2865) + 1458 e000 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 1565 2501 NF4 AM2L Mainboard + 0058 CK804 AC'97 Modem + 0059 CK804 AC'97 Audio Controller + 1043 812a K8N4-E or A8N-E Mainboard + 10f1 2865 Tomcat K8E (S2865) + 147b 1c1a KN8-Ultra Mainboard + 1565 8211 NF4 AM2L Mainboard + 005a CK804 USB Controller + 1028 0225 PowerEdge T105 onboard USB + 1043 815a K8N4-E or A8N-E Mainboard + 10f1 2865 Tomcat K8E (S2865) + 1458 5004 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 1565 3402 NF4 AM2L Mainboard + 005b CK804 USB Controller + 1028 0225 PowerEdge T105 onboard USB + 1043 815a K8N4-E or A8N-E Mainboard + 10f1 2865 Tomcat K8E (S2865) + 1458 5004 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 1565 3402 NF4 AM2L Mainboard + 005c CK804 PCI Bridge + 005d CK804 PCIE Bridge + 005e CK804 Memory Controller + 1028 0225 PowerEdge T105 Memory Controller + 1043 815a A8N-E Mainboard + 10de 005e ECS Elitegroup NFORCE3-A939 motherboard. + 10f1 2865 Tomcat K8E (S2865) + 10f1 2891 Thunder K8SRE Mainboard + 1458 5000 GA-K8N Ultra-9 Mainboard + 1462 7100 MSI K8N Diamond + 147b 1c1a KN8-Ultra Mainboard + 1565 3402 NF4 AM2L Mainboard + 005f CK804 Memory Controller + 0060 nForce2 ISA Bridge + 1043 80ad A7N8X Mainboard + 147b 1c02 NF7-S/NF7 (nVidia-nForce2) 2.X + a0a0 03ba UK79G-1394 motherboard + 0064 nForce2 SMBus (MCP) + 147b 1c02 NF7-S/NF7 (nVidia-nForce2) 2.X + a0a0 03bb UK79G-1394 motherboard + 0065 nForce2 IDE + 10de 0c11 nForce 2 EIDE Controller + a0a0 03b2 UK79G-1394 motherboard + 0066 nForce2 Ethernet Controller + 1043 80a7 A7N8X Mainboard onboard nForce2 Ethernet + 10de 0c11 nForce MCP-T Networking Adapter + a0a0 03b3 UK79G-1394 motherboard + 0067 nForce2 USB Controller + 1043 0c11 A7N8X Mainboard + a0a0 03b4 UK79G-1394 motherboard + 0068 nForce2 USB Controller + 1043 0c11 A7N8X Mainboard + a0a0 03b4 UK79G-1394 motherboard + 006a nForce2 AC97 Audio Controler (MCP) + 1043 8095 nForce2 AC97 Audio Controler (MCP) + a0a0 0304 UK79G-1394 motherboard + 006b nForce Audio Processing Unit + 10de 006b nForce2 MCP Audio Processing Unit + a0a0 0304 UK79G-1394 motherboard + 006c nForce2 External PCI Bridge + 006d nForce2 PCI Bridge + 006e nForce2 FireWire (IEEE 1394) Controller + a0a0 0306 UK79G-1394 motherboard + 0080 MCP2A ISA bridge + 147b 1c09 NV7 Motherboard + 0084 MCP2A SMBus + 147b 1c09 NV7 Motherboard + 0085 MCP2A IDE + 147b 1c09 NV7 Motherboard + 0086 MCP2A Ethernet Controller + 0087 MCP2A USB Controller + 147b 1c09 NV7 Motherboard + 0088 MCP2A USB Controller + 147b 1c09 NV7 Motherboard + 008a MCP2S AC'97 Audio Controller + 147b 1c09 NV7 Motherboard + 008b MCP2A PCI Bridge + 008c MCP2A Ethernet Controller + 008e nForce2 Serial ATA Controller + 0090 G70 [GeForce 7800 GTX] + 0091 G70 [GeForce 7800 GTX] + 0092 G70 [GeForce 7800 GT] + 0093 G70 [GeForce 7800 GS] + 0095 G70 [GeForce 7800 SLI] + 0098 G70 [GeForce Go 7800] + 0099 G70 [GeForce Go 7800 GTX] + 009d G70GL [Quadro FX 4500] + 00a0 NV5 [Aladdin TNT2] + 14af 5810 Maxi Gamer Xentor + 00c0 NV41 [GeForce 6800 GS] + 00c1 NV41.1 [GeForce 6800] + 00c2 NV41.2 [GeForce 6800 LE] + 00c3 NV42 [GeForce 6800 XT] + 00c8 NV41.8 [GeForce Go 6800] + 00c9 NV41.9 [GeForce Go 6800 Ultra] + 00cc NV41 [Quadro FX Go1400] + 00cd NV41 [Quadro FX 3450/4000 SDI] + 10de 029b wx4300 Workstation + 00ce NV41GL [Quadro FX 1400] + 00d0 nForce3 LPC Bridge + 00d1 nForce3 Host Bridge + 00d2 nForce3 AGP Bridge + 00d3 CK804 Memory Controller + 00d4 nForce3 SMBus + 00d5 nForce3 IDE + 00d6 nForce3 Ethernet + 00d7 nForce3 USB 1.1 + 00d8 nForce3 USB 2.0 + 00d9 nForce3 Audio + 00da nForce3 Audio + 00dd nForce3 PCI Bridge + 00df CK8S Ethernet Controller + 1043 80a7 K8N-E + 105b 0c43 Winfast NF3250K8AA + 147b 1c0b NF8 Mainboard + 00e0 nForce3 250Gb LPC Bridge + 1043 813f K8N-E + 10de 0c11 Winfast NF3250K8AA + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 1849 00e0 Motherboard (one of many) + 00e1 nForce3 250Gb Host Bridge + 1043 813f K8N-E + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 1849 00e1 Motherboard (one of many) + 00e2 nForce3 250Gb AGP Host to PCI Bridge + 00e3 nForce3 Serial ATA Controller + 1043 813f K8N-E + 105b 0c43 Winfast NF3250K8AA + 147b 1c0b NF8 Mainboard + 1849 00e3 Motherboard (one of many) + 00e4 nForce 250Gb PCI System Management + 1043 813f K8N-E + 105b 0c43 Winfast NF3250K8AA + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 1849 00e4 Motherboard (one of many) + 00e5 CK8S Parallel ATA Controller (v2.5) + 1043 813f K8N-E + 105b 0c43 Winfast NF3250K8AA + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + f849 00e5 Motherboard (one of many) + 00e6 CK8S Ethernet Controller + 00e7 CK8S USB Controller + 1043 813f K8N-E + 105b 0c43 Winfast NF3250K8AA + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 1849 00e7 Motherboard (one of many) + 00e8 nForce3 EHCI USB 2.0 Controller + 1043 813f K8N-E + 105b 0c43 Winfast NF3250K8AA + 1462 7030 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 1849 00e8 Motherboard (one of many) + 00ea nForce3 250Gb AC'97 Audio Controller + 1043 819d K8N-E + 105b 0c43 Winfast NF3250K8AA + 1462 b010 K8N Neo-FSR v2.0 + 147b 1c0b NF8 Mainboard + 00ed nForce3 250Gb PCI-to-PCI Bridge + 00ee nForce3 Serial ATA Controller 2 + 00f0 NV40 [GeForce 6800 Ultra] + 00f1 NV43 [GeForce 6600 GT] + 1043 81a6 N6600GT TD 128M AGP + 1043 81c6 N6600GT TD 128M AGP + 1458 3150 GV-N66T128VP + 1554 1191 PixelView PV-N43UA (128KD) + 1682 2119 GeForce 6600 GT AGP 128MB DDR3 DUAL DVI TV + 00f2 NV43 [GeForce 6600] + 1554 1194 PixelView PV-N43AT (256KD) + 1682 211c GeForce 6600 256MB DDR DUAL DVI TV + 00f3 NV43 [GeForce 6200] + 00f4 NV43 [GeForce 6600 LE] + 00f5 G70 [GeForce 7800 GS] + 00f6 NV43 [GeForce 6800 GS] + 1682 217e XFX GeForce 6800 XTreme 256MB DDR3 AGP + 00f8 NV45GL [Quadro FX 3400/4400] + 00f9 NV45 [GeForce 6800 GTO] + 10de 00f9 NV40 [GeForce 6800 GT] + 1682 2120 GEFORCE 6800 GT PCI-E + 00fa NV36 [GeForce PCX 5750] + 00fb NV35 [GeForce PCX 5900] + 00fc NV37GL [Quadro FX 330/GeForce PCX 5300] + 00fd NV37GL [Quadro PCI-E Series] + 00fe NV38GL [Quadro FX 1300] + 00ff NV18 [GeForce PCX 4300] + 0100 NV10 [GeForce 256 SDR] + 1043 0200 AGP-V6600 SGRAM + 1043 0201 AGP-V6600 SDRAM + 1043 4008 AGP-V6600 SGRAM + 1043 4009 AGP-V6600 SDRAM + 1048 0c41 Erazor X + 1048 0c43 ERAZOR X PCI + 1048 0c48 Synergy Force + 1102 102d CT6941 GeForce 256 + 14af 5022 3D Prophet SE + 0101 NV10DDR [GeForce 256 DDR] + 1043 0202 AGP-V6800 DDR + 1043 400a AGP-V6800 DDR SGRAM + 1043 400b AGP-V6800 DDR SDRAM + 1048 0c42 Erazor X + 107d 2822 WinFast GeForce 256 + 1102 102e CT6971 GeForce 256 DDR + 14af 5021 3D Prophet DDR-DVI + 0103 NV10GL [Quadro] + 1048 0c40 GLoria II-64 + 1048 0c44 GLoria II + 1048 0c45 GLoria II + 1048 0c4a GLoria II-64 Pro + 1048 0c4b GLoria II-64 Pro DVII + 0110 NV11 [GeForce2 MX/MX 400] + 1043 4015 AGP-V7100 Pro + 1043 4021 V7100 Deluxe Combo + 1043 4031 V7100 Pro with TV output + 1048 0c60 Gladiac MX + 1048 0c61 Gladiac 511PCI + 1048 0c63 Gladiac 511TV-OUT 32MB + 1048 0c64 Gladiac 511TV-OUT 64MB + 1048 0c65 Gladiac 511TWIN + 1048 0c66 Gladiac 311 + 10de 0091 Dell OEM GeForce 2 MX 400 + 10de 00a1 Apple OEM GeForce2 MX + 1462 8817 MSI GeForce2 MX400 Pro32S [MS-8817] + 14af 7102 3D Prophet II MX + 14af 7103 3D Prophet II MX Dual-Display + 1545 0023 Xtasy Rev. B2 + 0111 NV11DDR [GeForce2 MX200] + 0112 NV11 [GeForce2 Go] + 0113 NV11GL [Quadro2 MXR/EX/Go] + 0140 NV43 [GeForce 6600 GT] + 0141 NV43 [GeForce 6600] + 1043 81b0 EN6600 Silencer + 1458 3124 GV-NX66128DP Turbo Force Edition + 0142 NV43 [GeForce 6600 LE] + 0143 NV43 [GeForce 6600 VE] + 0144 NV43 [GeForce Go 6600] + 0145 NV43 [GeForce 6610 XL] + 0146 NV43 [Geforce Go 6600TE/6200TE] + 0147 NV43 [GeForce 6700 XL] + 0148 NV43 [GeForce Go 6600] + 0149 NV43 [GeForce Go 6600 GT] + 014a NV43 [Quadro NVS 440] + 014c NV43 [Quadro FX 540 MXM] + 014d NV43GL [Quadro FX 550] + 014e NV43GL [Quadro FX 540] + 014f NV43 [GeForce 6200] + 0150 NV15 [GeForce2 GTS/Pro] + 1043 4016 V7700 AGP Video Card + 1048 0c50 Gladiac + 1048 0c52 Gladiac-64 + 107d 2840 WinFast GeForce2 GTS with TV output + 107d 2842 WinFast GeForce 2 Pro + 10de 002e GeForce2 GTS + 1462 8831 Creative GeForce2 Pro + 0151 NV15DDR [GeForce2 Ti] + 1043 405f V7700Ti + 1462 5506 Creative 3D Blaster Geforce2 Titanium + 0152 NV15BR [GeForce2 Ultra, Bladerunner] + 1048 0c56 GLADIAC Ultra + 0153 NV15GL [Quadro2 Pro] + 0160 NV44 [GeForce 6500] + 0161 NV44 [GeForce 6200 TurboCache(TM)] + 0162 NV44 [GeForce 6200SE TurboCache (TM)] + 0163 NV44 [GeForce 6200 LE] + 0164 NV44 [GeForce Go 6200] + 0165 NV44 [Quadro NVS 285] + 0166 NV43 [GeForce Go 6400] + 0167 NV43 [GeForce Go 6200/6400] + 0168 NV43 [GeForce Go 6200/6400] + 0169 NV44 [GeForce 6250] + 016a NV44 [GeForce 7100 GS] + 0170 NV17 [GeForce4 MX 460] + 0171 NV17 [GeForce4 MX 440] + 10b0 0002 Gainward Pro/600 TV + 10de 0008 Apple OEM GeForce4 MX 440 + 1462 8661 G4MX440-VTP + 1462 8730 MX440SES-T (MS-8873) + 1462 8852 GeForce4 MX440 PCI + 147b 8f00 Abit Siluro GeForce4MX440 + 0172 NV17 [GeForce4 MX 420] + 0173 NV17 [GeForce4 MX 440-SE] + 0174 NV17 [GeForce4 440 Go] + 0175 NV17 [GeForce4 420 Go] + 0176 NV17 [GeForce4 420 Go 32M] + 103c 08b0 tc1100 tablet + 144d c005 X10 Laptop + 4c53 1090 Cx9 / Vx9 mainboard + 0177 NV17 [GeForce4 460 Go] + 0178 NV17GL [Quadro4 550 XGL] + 0179 NV17 [GeForce4 440 Go 64M] + 10de 0179 GeForce4 MX (Mac) + 017a NV17GL [Quadro NVS] + 017b NV17GL [Quadro4 550 XGL] + 017c NV17GL [Quadro4 500 GoGL] + 017d NV17 [GeForce4 410 Go 16M] + 0181 NV18 [GeForce4 MX 440 AGP 8x] + 1043 8063 GeForce4 MX 440 AGP 8X + 1043 806f V9180 Magic + 1462 8880 MS-StarForce GeForce4 MX 440 with AGP8X + 1462 8900 MS-8890 GeForce 4 MX440 AGP8X + 1462 9350 MSI Geforce4 MX T8X with AGP8X + 147b 8f0d Siluro GF4 MX-8X + 1554 1111 PixelView MVGA-NVG18A + 0182 NV18 [GeForce4 MX 440SE AGP 8x] + 0183 NV18 [GeForce4 MX 420 AGP 8x] + 0184 NV18 [GeForce4 MX] + 0185 NV18 [GeForce4 MX 4000] + 0186 NV18M [GeForce4 448 Go] + 0187 NV18M [GeForce4 488 Go] + 0188 NV18GL [Quadro4 580 XGL] + 0189 NV18 [GeForce4 MX with AGP8X (Mac)] + 018a NV18GL [Quadro NVS 280 SD] + 018b NV18GL [Quadro4 380 XGL] + 018c NV18GL [Quadro NVS 50 PCI] + 018d NV18M [GeForce4 448 Go] + 0191 G80 [GeForce 8800 GTX] + 0193 G80 [GeForce 8800 GTS] + 0194 G80 [GeForce 8800 Ultra] +# Found in GPU server Tesla D870 and S870 + 0197 G80 [Tesla C870] + 019d G80 [Quadro FX 5600] + 019e G80 [Quadro FX 4600] + 01a0 NVCrush11 [GeForce2 MX Integrated Graphics] + 01a4 nForce CPU bridge + 01ab nForce 420 Memory Controller (DDR) + 01ac nForce 220/420 Memory Controller + 01ad nForce 220/420 Memory Controller + 01b0 nForce Audio Processing Unit + 01b1 nForce AC'97 Audio Controller + 01b2 nForce ISA Bridge + 01b4 nForce PCI System Management + 01b7 nForce AGP to PCI Bridge + 01b8 nForce PCI-to-PCI bridge + 01bc nForce IDE + 01c1 nForce AC'97 Modem Controller + 01c2 nForce USB Controller + 01c3 nForce Ethernet Controller + 01d0 G72 [GeForce 7350 LE] + 01d1 G72 [GeForce 7300 LE] + 1462 0345 7300LE PCI Express Graphics Adapter + 01d3 G72 [GeForce 7300 SE/7200 GS] + 01d6 G72M [GeForce Go 7200] + 01d7 G72M [Quadro NVS 110M/GeForce Go 7300] + 01d8 G72M [GeForce Go 7400] + 1028 01d7 XPS M1210 + 01d9 G72M [GeForce Go 7450] + 01da G72M [Quadro NVS 110M] + 01db G72M [Quadro NVS 120M] + 01dc G72GL [Quadro FX 350M] + 01dd G72 [GeForce 7500 LE] + 01de G72GL [Quadro FX 350] + 10de 01dc Quadro FX Go350M + 01df G71 [GeForce 7300 GS] + 01e0 nForce2 IGP2 + 147b 1c09 NV7 Motherboard + 01e8 nForce2 AGP + 01ea nForce2 Memory Controller 0 + a0a0 03b9 UK79G-1394 motherboard + 01eb nForce2 Memory Controller 1 + a0a0 03b9 UK79G-1394 motherboard + 01ec nForce2 Memory Controller 2 + a0a0 03b9 UK79G-1394 motherboard + 01ed nForce2 Memory Controller 3 + a0a0 03b9 UK79G-1394 motherboard + 01ee nForce2 Memory Controller 4 + 10de 01ee MSI Delta-L nForce2 memory controller + a0a0 03b9 UK79G-1394 motherboard + 01ef nForce2 Memory Controller 5 + a0a0 03b9 UK79G-1394 motherboard + 01f0 NV18 [GeForce4 MX - nForce GPU] + a0a0 03b5 UK79G-1394 motherboard + 0200 NV20 [GeForce3] + 1043 402f AGP-V8200 DDR + 1048 0c70 GLADIAC 920 + 0201 NV20 [GeForce3 Ti 200] + 0202 NV20 [GeForce3 Ti 500] + 1043 405b V8200 T5 + 1545 002f Xtasy 6964 + 0203 NV20DCC [Quadro DCC] + 0211 NV48 [GeForce 6800] + 0212 NV48 [GeForce 6800 LE] + 0215 NV48 [GeForce 6800 GT] + 0218 NV48 [GeForce 6800 XT] + 0221 NV44A [GeForce 6200] + 3842 a341 256A8N341DX + 0222 NV44 [GeForce 6200 A-LE] + 0240 C51PV [GeForce 6150] + 1043 81cd A8N-VM CSM + 1462 7207 K8NGM2 series + 0241 C51 [GeForce 6150 LE] + 0242 C51G [GeForce 6100] + 105b 0cad Winfast 6100K8MB + 0243 C51 PCI Express Bridge + 0244 C51 [Geforce Go 6150] + 103c 30b5 Presario V3242AU + 103c 30b7 Presario V6133CL + 10de 0244 GeForce Go 6150 + 0245 C51 [Quadro NVS 210S/GeForce 6150LE] + 0246 C51 PCI Express Bridge + 0247 C51 [GeForce Go 6100] + 1043 1382 MCP51 PCI-X GeForce Go 6100 + 0248 C51 PCI Express Bridge + 0249 C51 PCI Express Bridge + 024a C51 PCI Express Bridge + 024b C51 PCI Express Bridge + 024c C51 PCI Express Bridge + 024d C51 PCI Express Bridge + 024e C51 PCI Express Bridge + 024f C51 PCI Express Bridge + 0250 NV25 [GeForce4 Ti 4600] + 0251 NV25 [GeForce4 Ti 4400] + 1043 8023 v8440 GeForce 4 Ti4400 + 10de 0251 PNY GeForce4 Ti 4400 + 1462 8710 PNY GeForce4 Ti 4400 + 0252 NV25 [GeForce4 Ti] + 0253 NV25 [GeForce4 Ti 4200] + 107d 2896 WinFast A250 LE TD (Dual VGA/TV-out/DVI) + 147b 8f09 Siluro (Dual VGA/TV-out/DVI) + 0258 NV25GL [Quadro4 900 XGL] + 0259 NV25GL [Quadro4 750 XGL] + 025b NV25GL [Quadro4 700 XGL] + 0260 MCP51 LPC Bridge + 103c 30b7 Presario V6133CL + 1043 81bc A8N-VM CSM Mainboard + 1458 5001 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 0261 MCP51 LPC Bridge + 105b 0cad Winfast 6100K8MB + 0262 MCP51 LPC Bridge + 0263 MCP51 LPC Bridge + 0264 MCP51 SMBus + 103c 30b7 Presario V6133CL + 1043 81bc A8N-VM CSM Mainboard + 105b 0cad Winfast 6100K8MB + 1462 7207 K8NGM2 series + 0265 MCP51 IDE + 103c 30b7 Presario V6133CL + 1043 81bc A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series +# Foxconn has used a wrong vendor ID for this one + f05b 0cad Winfast 6100K8MB + 0266 MCP51 Serial ATA Controller + 103c 30b7 Presario V6133CL + 1043 81bc A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 0267 MCP51 Serial ATA Controller + 1043 81bc A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 0268 MCP51 Ethernet Controller + 0269 MCP51 Ethernet Controller + 103c 30b7 Presario V6133CL + 1043 8141 A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 026a MCP51 MCI + 026b MCP51 AC97 Audio Controller + 105b 0cad Winfast 6100K8MB + 026c MCP51 High Definition Audio + 103c 30b5 Presario V3242AU + 103c 30b7 Presario V6133CL + 10de cb84 A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 026d MCP51 USB Controller + 103c 30b7 Presario V6133CL + 1043 81bc A8N-VM CSM Mainboard + 105b 0cad Winfast 6100K8MB + 1462 7207 K8NGM2 series + 026e MCP51 USB Controller + 103c 30b7 Presario V6133CL + 1043 81bc A8N-VM CSM Mainboard + 105b 0cad Winfast 6100K8MB + 1462 7207 K8NGM2 series + 026f MCP51 PCI Bridge + 103c 30b7 Presario V6133CL + 0270 MCP51 Host Bridge + 103c 30b7 Presario V6133CL + 1043 81bc A8N-VM CSM Mainboard + 105b 0cad Winfast 6100K8MB + 1458 5001 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 0271 MCP51 PMU + 103c 30b5 Presario V3242AU + 103c 30b7 Presario V6133CL + 0272 MCP51 Memory Controller 0 + 105b 0cad Winfast 6100K8MB + 027e C51 Memory Controller 2 + 103c 30b7 Presario V6133CL + 1043 81cd A8N-VM CSM Mainboard + 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 027f C51 Memory Controller 3 + 103c 30b7 Presario V6133CL + 1043 81cd A8N-VM CSM Mainboard + 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 0280 NV28 [GeForce4 Ti 4800] + 0281 NV28 [GeForce4 Ti 4200 AGP 8x] + 0282 NV28 [GeForce4 Ti 4800 SE] + 0286 NV28 [GeForce4 Ti 4200 Go AGP 8x] + 0288 NV28GL [Quadro4 980 XGL] + 0289 NV28GL [Quadro4 780 XGL] + 028c NV28GLM [Quadro4 Go700] + 0290 G71 [GeForce 7900 GTX] + 0291 G71 [GeForce 7900 GT/GTO] + 10de 042b NX7900GTO-T2D512E [7900 GTO] + 0292 G71 [GeForce 7900 GS] + 0293 G71 [GeForce 7900 GX2] + 0294 G71 [GeForce 7950 GX2] + 0295 G71 [GeForce 7950 GT] + 1043 8225 GeForce 7950 GT + 107d 2a68 WinFast PX7950GT TDH + 1462 0663 NX7950GT-VT2D512EZ-HD + 0297 G71 [GeForce Go 7950 GTX] + 0298 G71 [GeForce Go 7900 GS] + 0299 G71 [GeForce Go 7900 GTX] + 029a G71 [Quadro FX 2500M] + 029b G71 [Quadro FX 1500M] + 029c G71 [Quadro FX 5500] + 029d G71GL [Quadro FX 3500] + 029e G71 [Quadro FX 1500] + 029f G70 [Quadro FX 4500 X2] +# Xbox Graphics Processing Unit (Integrated). GeForce3 derivative (NV20 < NV2A < NV25). + 02a0 NV2A [XGPU] + 02a5 MCPX CPU Bridge + 02a6 MCPX Memory Controller + 02e0 G73 [GeForce 7600 GT] + 02e0 2249 GF 7600GT 560M 256MB DDR3 DUAL DVI TV + 02e1 G73 [GeForce 7600 GS] + 1682 222b PV-T73K-UAL3 (256MB) + 1682 2247 GF 7600GS 512MB DDR2 + 02e2 G73 [GeForce 7300 GT] + 02e3 G71 [GeForce 7900 GS] + 02e4 G71 [GeForce 7950 GT] + 1682 2271 PV-T71A-YDF7 (512MB) + 02f0 C51 Host Bridge + 103c 30b7 Presario V6133CL + 1043 81cd A8N-VM CSM Mainboard + 1462 7207 K8NGM2 series + 02f1 C51 Host Bridge + 1458 5000 GA-M55plus-S3G + 02f2 C51 Host Bridge + 02f3 C51 Host Bridge + 02f4 C51 Host Bridge + 02f5 C51 Host Bridge + 02f6 C51 Host Bridge + 02f7 C51 Host Bridge + 02f8 C51 Memory Controller 5 + 103c 30b7 Presario V6133CL + 1043 81cd A8N-VM CSM Mainboard + 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 02f9 C51 Memory Controller 4 + 103c 30b7 Presario V6133CL + 1043 81cd A8N-VM CSM Mainboard + 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 02fa C51 Memory Controller 0 + 103c 30b7 Presario V6133CL + 1043 81cd A8N-VM CSM Mainboard + 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 02fb C51 PCI Express Bridge + 02fc C51 PCI Express Bridge + 103c 30b7 Presario V6133CL + 02fd C51 PCI Express Bridge + 103c 30b7 Presario V6133CL + 02fe C51 Memory Controller 1 + 103c 30b7 Presario V6133CL + 1043 81cd A8N-VM CSM Mainboard + 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 02ff C51 Host Bridge + 103c 30b7 Presario V6133CL + 1043 81cd A8N-VM CSM Mainboard + 1458 5000 GA-M55plus-S3G + 1462 7207 K8NGM2 series + 0300 NV30 [GeForce FX] + 0301 NV30 [GeForce FX 5800 Ultra] + 0302 NV30 [GeForce FX 5800] + 0308 NV30GL [Quadro FX 2000] + 0309 NV30GL [Quadro FX 1000] + 0311 NV31 [GeForce FX 5600 Ultra] + 0312 NV31 [GeForce FX 5600] + 0313 NV31 + 0314 NV31 [GeForce FX 5600XT] + 1043 814a V9560XT/TD + 0316 NV31M + 0317 NV31M Pro + 031a NV31M [GeForce FX Go5600] + 031b NV31M [GeForce FX Go5650] + 031c NV31 [Quadro FX Go700] + 031d NV31GLM + 031e NV31GLM Pro + 031f NV31GLM Pro + 0320 NV34 [GeForce FX 5200] + 0321 NV34 [GeForce FX 5200 Ultra] + 0322 NV34 [GeForce FX 5200] + 1043 02fb V9250 Magic + 1043 8180 V9520-X/TD/128M + 1462 9110 MS-8911 (FX5200-TD128) + 1462 9171 MS-8917 (FX5200-T128) + 1462 9360 MS-8936 (FX5200-T128) + 0323 NV34 [GeForce FX 5200LE] + 0324 NV34M [GeForce FX Go5200 64M] + 1028 0196 Inspiron 5160 + 103c 006a Pavillon ZD7000 laptop + 1071 8160 MIM2000 + 0325 NV34M [GeForce FX Go5250] + 0326 NV34 [GeForce FX 5500] + 1458 310d GeForce FX 5500 128 MB + 1682 2034 GeForce 5500 256 MB + 0327 NV34 [GeForce FX 5100] + 0328 NV34M [GeForce FX Go5200 32M/64M] + 0329 NV34M [GeForce FX Go5200] + 10de 0010 Powerbook G4 + 032a NV34GL [Quadro NVS 280 PCI] + 032b NV34GL [Quadro FX 500/600 PCI] + 032c NV34GLM [GeForce FX Go 5300] + 032d NV34 [GeForce FX Go5100] + 032f NV34GL + 0330 NV35 [GeForce FX 5900 Ultra] + 1043 8137 V9950 Ultra / 256 MB + 0331 NV35 [GeForce FX 5900] + 1043 8145 V9950GE + 0332 NV35 [GeForce FX 5900XT] + 0333 NV38 [GeForce FX 5950 Ultra] + 0334 NV35 [GeForce FX 5900ZT] + 1462 9373 FX5900ZT-VTD128 (MS-8937) + 0338 NV35GL [Quadro FX 3000] + 033f NV35GL [Quadro FX 700] + 0341 NV36.1 [GeForce FX 5700 Ultra] + 1462 9380 MS-8938 (FX5700U-TD128) + 0342 NV36.2 [GeForce FX 5700] + 0343 NV36 [GeForce FX 5700LE] + 0344 NV36.4 [GeForce FX 5700VE] + 0345 NV36.5 + 0347 NV36 [GeForce FX Go5700] + 103c 006a NX9500 + 0348 NV36 [GeForce FX Go5700] + 0349 NV36M Pro + 034b NV36MAP + 034c NV36 [Quadro FX Go1000] + 034e NV36GL [Quadro FX 1100] + 034f NV36GL + 0360 MCP55 LPC Bridge + 0361 MCP55 LPC Bridge + 1028 0221 PowerEdge R805 MCP55 LPC Bridge + 0362 MCP55 LPC Bridge + 147b 12c4 KN9-Ultra Mainboard + 0363 MCP55 LPC Bridge + 0364 MCP55 LPC Bridge + 1028 0221 PowerEdge R805 MCP55 LPC Bridge + 0365 MCP55 LPC Bridge + 0366 MCP55 LPC Bridge + 0367 MCP55 LPC Bridge + 0368 MCP55 SMBus + 1028 020c PowerEdge M605 MCP55 SMBus + 1028 0221 PowerEdge R805 MCP55 SMBus + 147b 12c4 KN9-Ultra Mainboard + 0369 MCP55 Memory Controller + 147b 12c4 KN9-Ultra Mainboard + 036a MCP55 Memory Controller + 036b MCP55 SMU + 036c MCP55 USB Controller + 1028 020c PowerEdge M605 MCP55 USB Controller + 1028 0221 PowerEdge R805 MCP55 USB Controller + 147b 12c4 KN9-Ultra Mainboard + 036d MCP55 USB Controller + 1028 020c PowerEdge M605 MCP55 USB Controller + 1028 0221 PowerEdge R805 MCP55 USB Controller + 147b 12c4 KN9-Ultra Mainboard + 036e MCP55 IDE + 147b 12c4 KN9-Ultra Mainboard + 0370 MCP55 PCI bridge + 0371 MCP55 High Definition Audio + 0372 MCP55 Ethernet + 0373 MCP55 Ethernet + 147b 12c4 KN9-Ultra Mainboard + 0374 MCP55 PCI Express bridge + 0375 MCP55 PCI Express bridge + 0376 MCP55 PCI Express bridge + 0377 MCP55 PCI Express bridge + 0378 MCP55 PCI Express bridge + 037a MCP55 Memory Controller + 037e MCP55 SATA Controller + 037f MCP55 SATA Controller + 1028 0221 PowerEdge R805 MCP55 SATA Controller + 147b 12c4 KN9-Ultra Mainboard + 0390 G73 [GeForce 7650 GS] + 0391 G73 [GeForce 7600 GT] + 1458 3427 GV-NX76T128D-RH + 0392 G73 [GeForce 7600 GS] + 1462 0622 NX7600GS-T2D256EH + 0393 G73 [GeForce 7300 GT] + 10de 0412 NX7300GT-TD256EH + 1462 0412 NX7300GT-TD256EH + 0394 G73 [GeForce 7600 LE] + 0395 G73 [GeForce 7300 GT] + 0397 G73 [GeForce Go 7700] + 0398 G73 [GeForce Go 7600] + 1025 006c Acer 9814 WKMI + 0399 G73 [GeForce Go 7600 GT] + 039a G73M [Quadro NVS 300M] + 039b G73 [GeForce Go 7900 SE] + 039c G73 [Quadro FX 550M] + 10de 039c Quadro FX 560M + 039e G73GL [Quadro FX 560] + 03a0 C55 Host Bridge + 03a1 C55 Host Bridge + 03a2 C55 Host Bridge + 03a3 C55 Host Bridge + 03a4 C55 Host Bridge + 03a5 C55 Host Bridge + 03a6 C55 Host Bridge + 03a7 C55 Host Bridge + 03a8 C55 Memory Controller + 03a9 C55 Memory Controller + 03aa C55 Memory Controller + 03ab C55 Memory Controller + 03ac C55 Memory Controller + 03ad C55 Memory Controller + 03ae C55 Memory Controller + 03af C55 Memory Controller + 03b0 C55 Memory Controller + 03b1 C55 Memory Controller + 03b2 C55 Memory Controller + 03b3 C55 Memory Controller + 03b4 C55 Memory Controller + 03b5 C55 Memory Controller + 03b6 C55 Memory Controller + 03b7 C55 PCI Express bridge + 03b8 C55 PCI Express bridge + 03b9 C55 PCI Express bridge + 03ba C55 Memory Controller + 03bb C55 PCI Express bridge + 03bc C55 Memory Controller + 03d0 C61 [GeForce 6150SE nForce 430] + 03d1 C61 [GeForce 6100 nForce 405] + 03d2 C61 [GeForce 6100 nForce 400] + 03d5 C61 [GeForce 6100 nForce 420] + 03d6 C61 [GeForce 7025 / nForce 630a] + 03e0 MCP61 LPC Bridge + 1849 03e0 939NF6G-VSTA Board + 03e1 MCP61 LPC Bridge + 03e2 MCP61 LPC Bridge + 03e3 MCP61 LPC Bridge + 03e4 MCP61 High Definition Audio + 03e5 MCP61 Ethernet + 03e6 MCP61 Ethernet + 03e7 MCP61 SATA Controller + 03e8 MCP61 PCI Express bridge + 1849 03e8 939NF6G-VSTA Board + 03e9 MCP61 PCI Express bridge + 1849 03e9 939NF6G-VSTA Board + 03ea MCP61 Memory Controller + 1849 03ea 939NF6G-VSTA Board + 03eb MCP61 SMBus + 1849 03eb 939NF6G-VSTA Board + 03ec MCP61 IDE + 1849 03ec 939NF6G-VSTA Board + 03ee MCP61 Ethernet + 03ef MCP61 Ethernet + 1849 03ef 939NF6G-VSTA Board + 03f0 MCP61 High Definition Audio + 1849 0888 939NF6G-VSTA Board + 03f1 MCP61 USB Controller + 1849 03f1 939NF6G-VSTA Board + 03f2 MCP61 USB Controller + 1849 03f2 939NF6G-VSTA Board + 03f3 MCP61 PCI bridge + 1849 03f3 939NF6G-VSTA Board + 03f4 MCP61 SMU + 03f5 MCP61 Memory Controller + 1849 03eb 939NF6G-VSTA Board + 03f6 MCP61 SATA Controller + 1849 03f6 939NF6G-VSTA Board + 03f7 MCP61 SATA Controller + 0400 G84 [GeForce 8600 GTS] + 0401 G84 [GeForce 8600GT] + 0402 G84 [GeForce 8600 GT] + 1462 0910 NX8600GT-T2D256EZ + 0403 G84 [GeForce 8600 GS] + 0404 G84 [GeForce 8400 GS] + 1462 1230 NX8400GS-TD256E + 0405 G84 [GeForce 9500M GS] + 0407 G84 [GeForce 8600M GT] + 0408 G84 [GeForce 9650M GS] + 0409 G84 [GeForce 8700M GT] + 040a G84 [Quadro FX 370] + 040b Quadro NVS 320M + 040c Quadro FX 570M + 17aa 20d9 ThinkPad T61p + 040d Quadro FX 1600M + 040e G84 [Quadro FX 570] + 040f G84 [Quadro FX 1700] + 0420 G86 [GeForce 8400 SE] + 0421 G86 [GeForce 8500 GT] + 1462 0960 NX8500GT-TD512EH/M2 + 0422 G86 [GeForce 8400 GS] + 0423 G86 [GeForce 8300 GS] + 0424 G86 [GeForce 8400 GS] + 0425 G86 [GeForce 8600M GS] + 1025 0121 Aspire 5920G + 0426 G86 [GeForce 8400M GT] + 0427 G86 [GeForce 8400M GS] + 0428 G86 [GeForce 8400M G] + 0429 Quadro NVS 140M + 17aa 20d8 ThinkPad T61 + 042a Quadro NVS 130M + 042b Quadro NVS 135M + 042c G86 [GeForce 9400 GT] + 042d Quadro FX 360M + 042e G86 [GeForce 9300M G] + 042f G86 [Quadro NVS 290] + 0440 MCP65 LPC Bridge + 0441 MCP65 LPC Bridge + 0442 MCP65 LPC Bridge + 0443 MCP65 LPC Bridge + 0444 MCP65 Memory Controller + 0445 MCP65 Memory Controller + 0446 MCP65 SMBus + 0447 MCP65 SMU + 0448 MCP65 IDE + 0449 MCP65 PCI bridge + 044a MCP65 High Definition Audio + 044b MCP65 High Definition Audio + 044c MCP65 AHCI Controller + 044d MCP65 AHCI Controller + 044e MCP65 AHCI Controller + 044f MCP65 AHCI Controller + 0450 MCP65 Ethernet + 0451 MCP65 Ethernet + 0452 MCP65 Ethernet + 0453 MCP65 Ethernet + 0454 MCP65 USB Controller + 0455 MCP65 USB Controller + 0456 MCP65 USB Controller + 0457 MCP65 USB Controller + 0458 MCP65 PCI Express bridge + 0459 MCP65 PCI Express bridge + 045a MCP65 PCI Express bridge + 045c MCP65 SATA Controller + 045d MCP65 SATA Controller + 045e MCP65 SATA Controller + 045f MCP65 SATA Controller + 0531 C67 [GeForce 7150M / nForce 630M] + 0533 C67 [GeForce 7000M / nForce 610M] + 053a C68 [GeForce 7050 PV / nForce 630a] + 053b C68 [GeForce 7050 PV / nForce 630a] + 1043 8308 M2N68-AM Motherbord + 053e C68 [GeForce 7025 / nForce 630a] + 0541 MCP67 Memory Controller + 0542 MCP67 SMBus + 1043 8308 M2N68-AM Motherbord + 0543 MCP67 Co-processor + 0547 MCP67 Memory Controller + 1043 8308 M2N68-AM Motherbord + 1849 0547 ALiveNF7G-HDready + 0548 MCP67 ISA Bridge + 1043 8308 M2N68-AM Motherboard + 054c MCP67 Ethernet + 1043 8308 M2N68-AM Motherbord + 1849 054c ALiveNF7G-HDready, MCP67 Gigabit Ethernet + 054d MCP67 Ethernet + 054e MCP67 Ethernet +# forcedeth source code from Nvidi + 054f MCP67 Ethernet + 0550 MCP67 AHCI Controller + 1043 8308 M2N68-AM Motherboard + 0554 MCP67 AHCI Controller + 1043 8308 M2N68-AM Motherboard + 0555 MCP67 SATA Controller + 1043 8308 M2N68-AM Motherboard + 055c MCP67 High Definition Audio + 1043 8290 M2N68-AM Motherboard + 055d MCP67 High Definition Audio + 055e MCP67 OHCI USB 1.1 Controller + 1043 8308 M2N68-AM Motherboard + 055f MCP67 EHCI USB 2.0 Controller + 1043 8308 M2N68-AM Motherboard + 0560 MCP67 IDE Controller + f043 8308 M2N68-AM Motherboard + 0561 MCP67 PCI Bridge + 0562 MCP67 PCI Express Bridge + 1849 0562 ALiveNF7G-HDready + 0563 MCP67 PCI Express Bridge + 0568 MCP78S [GeForce 8200] Memory Controller + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 0568 K10N78FullHD-hSLI R3.0 Memory Controller + 0569 MCP78S [GeForce 8200] PCI Express Bridge + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 0569 K10N78FullHD-hSLI R3.0 PCI Express Bridge + 056a MCP73 [nForce 630i] USB 2.0 Controller (EHCI) + 056c MCP73 IDE + 1afa 7150 JW-IN7150-HD + 056d MCP73 PCI Express bridge + 056e MCP73 PCI Express bridge + 056f MCP73 PCI Express bridge + 05b8 PCI express bridge for GTX 295 + 05be PCI express bridge for Quadro Plex S4 / Tesla S870 / Tesla S1070 + 05e0 GT200b [GeForce GTX 295] + 05e1 GT200 [GeForce GTX 280] +# GT200 [GTX 260] or GT200 [GTX 260-216] or GT200b [GTX 260-216] + 05e2 GT200 [GeForce GTX 260] + 05e3 GT200b [GeForce GTX 285] + 05e6 GT200b [GeForce GTX 275] +# Found in GPU server Tesla S1070 + 05e7 GT200 [Tesla C1060] + 05ed GT200GL [Quadro Plex 2200 D2] + 05f8 GT200GL [Quadro Plex 2200 S4] + 05f9 GT200GL [Quadro CX] + 05fd GT200GL [Quadro FX 5800] + 05fe GT200GL [Quadro FX 4800] + 0600 G92 [GeForce 8800 GTS 512] + 0601 G92 [GeForce 9800 GT] + 0602 G92 [GeForce 8800 GT] + 0604 G92 [GeForce 9800 GX2] + 0605 G92 [GeForce 9800 GT] + 0606 G92 [GeForce 8800 GS] + 0608 G92 [GeForce 9800M GTX] + 0609 G92 [GeForce 8800M GTS] + 060a GT200 [GeForce GTX 280M] + 060b G92 [GeForce 9800M GT] + 060c G92 [GeForce 8800M GTX] + 060d G92 [GeForce 8800 GS] + 0610 G92 [GeForce 9600 GSO] + 1682 2385 GeForce 9600 GSO 768mb + 0611 G92 [GeForce 8800 GT] + 107d 2ab0 Winfast PX8800 GT PCI-E + 19da 1040 ZT-88TES2P-FSP + 0612 G92 [GeForce 9800 GTX] + 0613 G92 [GeForce 9800 GTX+] + 0614 G92 [GeForce 9800 GT] + 107d 2ab3 WinFast PX9800 GT (S-Fanpipe) + 0615 G92 [GeForce GTS 250] + 3842 1150 GeForce GTS 250 P/N 512-P3-1150-TR +# Overclocked + 3842 1151 GeForce GTS 250 P/N 512-P3-1151-TR + 3842 1155 GeForce GTS 250 P/N 01G-P3-1155-TR +# Overclocked + 3842 1156 GeForce GTS 250 P/N 01G-P3-1156-TR + 0617 G92 [GeForce 9800M GTX] + 0618 GT200 [GeForce GTX 260M] + 0619 G92GL [Quadro FX 4700 X2] + 061a G92 [Quadro FX 3700] + 061b G92GL [Quadro VX 200] + 061c G92M [Quadro FX 3600M] + 0622 G94 [GeForce 9600 GT] + 107d 2ac1 WinFast PX9600GT 1024MB + 1458 3481 GV-NX96T512HP + 0623 G94 [GeForce 9600 GS] + 0625 G94 [GeForce 9600 GSO 512] + 0626 G94 [GeForce GT 130] + 0627 G94 [GeForce GT 140] + 0628 G94 [GeForce 9800M GTS] + 062a G94 [GeForce 9700M GTS] + 062b G94 [GeForce 9800M GS] + 062c G94 [GeForce 9800M GTS] + 0631 G94M [GeForce GTS 160M] + 0632 G94M [GeForce GTS 150M] + 0638 G94 [Quadro FX 1800] + 063a G94M [Quadro FX 2700M] + 0640 G96 [GeForce 9500 GT] + 0641 G96 [GeForce 9400 GT] + 0643 G96 [GeForce 9500 GT] + 0644 G96 [GeForce 9500 GS] + 0645 G96 [GeForce 9500 GS] + 0646 G96 [GeForce GT 120] + 0647 G96 [GeForce 9600M GT] + 0648 G96 [GeForce 9600M GS] + 0649 G96 [GeForce 9600M GT] + 064a G96 [GeForce 9700M GT] + 064b G96 [GeForce 9500M G] + 064c G96 [GeForce 9650M GT] + 0651 G96 [GeForce G 110M] + 0652 G96 [GeForce GT 130M] + 0653 G96M [GeForce GT 120M] + 0658 G96 [Quadro FX 380] + 0659 G96 [Quadro FX 580] + 065b G96 [GeForce 9400 GT] + 065c G96M [Quadro FX 770M] + 06e0 G98 [GeForce 9300 GE] + 06e1 G98 [GeForce 9300 GS] + 06e2 G98 [GeForce 8400] + 06e3 G98 [GeForce 8300 GS] + 06e4 G98 [GeForce 8400 GS] + 1458 3475 GV-NX84S256HE [GeForce 8400 GS] + 06e5 G98 [GeForce 9300M GS] + 06e6 G98 [GeForce G100] + 06e7 G98 [GeForce 9300 SE] + 06e8 G98 [GeForce 9200M GS] + 06e9 G98 [GeForce 9300M GS] + 1043 19b2 U6V laptop + 06ea G86M [Quadro NVS 150M] + 06eb G98M [Quadro NVS 160M] + 06ec G98M [GeForce G 105M] + 06ef G98M [GeForce G 103M] + 06f8 G98 [Quadro NVS 420] + 06f9 G98 [Quadro FX 370 LP] + 06fa G98 [Quadro NVS 450] + 0751 MCP78S [GeForce 8200] Memory Controller + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 0751 K10N78FullHD-hSLI R3.0 Memory Controller + 0752 MCP78S [GeForce 8200] SMBus + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 0752 K10N78FullHD-hSLI R3.0 SMBus + 0753 MCP78S [GeForce 8200] Co-Processor + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 0753 K10N78FullHD-hSLI R3.0 Co-Processor + 0754 MCP78S [GeForce 8200] Memory Controller + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 0754 K10N78FullHD-hSLI R3.0 Memory Controller + 0759 MCP78S [GeForce 8200] IDE + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 0759 K10N78FullHD-hSLI R3.0 IDE + 075a MCP78S [GeForce 8200] PCI Bridge + 1043 82e8 M3N72-D + 1849 075a K10N78FullHD-hSLI R3.0 PCI Bridge + 075b MCP78S [GeForce 8200] PCI Express Bridge + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 075b K10N78FullHD-hSLI R3.0 PCI Express Bridge + 075c MCP78S [GeForce 8200] LPC Bridge + 1462 7508 K9N2GM-FIH + 1849 075c K10N78FullHD-hSLI R3.0 LPC Bridge + 075d nForce 750a LPC Bridge + 1043 82e8 M3N72-D + 0760 MCP77 Ethernet + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 0760 K10N78FullHD-hSLI R3.0 Ethernet + 0761 MCP77 Ethernet + 0762 MCP77 Ethernet + 0763 MCP77 Ethernet + 0774 MCP72XE/MCP72P/MCP78U/MCP78S High Definition Audio +# has a Realtek ALC1200 HDAudio Codec + 1043 82fe M3N72-D + 1462 7508 K9N2GM-FIH + 1849 3662 K10N78FullHD-hSLI R3.0 High Definition Audio + 0778 MCP78S [GeForce 8200] PCI Express Bridge + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 0778 K10N78FullHD-hSLI R3.0 PCI Express Bridge + 077a MCP78S [GeForce 8200] PCI Bridge + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 077a K10N78FullHD-hSLI R3.0 PCI Bridge + 077b MCP78S [GeForce 8200] OHCI USB 1.1 Controller + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 077b K10N78FullHD-hSLI R3.0 OHCI USB 1.1 Controller + 077c MCP78S [GeForce 8200] EHCI USB 2.0 Controller + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 077c K10N78FullHD-hSLI R3.0 EHCI USB 2.0 Controller + 077d MCP78S [GeForce 8200] OHCI USB 1.1 Controller + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 077d K10N78FullHD-hSLI R3.0 OHCI USB 1.1 Controller + 077e MCP78S [GeForce 8200] EHCI USB 2.0 Controller + 1043 82e8 M3N72-D + 1462 7508 K9N2GM-FIH + 1849 077e K10N78FullHD-hSLI R3.0 EHCI USB 2.0 Controller + 07c0 MCP73 Host Bridge + 1afa 7150 JW-IN7150-HD + 07c1 MCP73 Host Bridge + 07c2 MCP73 Host Bridge + 07c5 MCP73 Host Bridge + 07c8 MCP73 Memory Controller + 1afa 7150 JW-IN7150-HD + 07cb nForce 630i memory controller + 1afa 7150 JW-IN7150-HD + 07cd nForce 630i memory controller + 1afa 7150 JW-IN7150-HD + 07ce nForce 630i memory controller + 1afa 7150 JW-IN7150-HD + 07cf nForce 630i memory controller + 1afa 7150 JW-IN7150-HD + 07d0 nForce 630i memory controller + 1afa 7150 JW-IN7150-HD + 07d1 nForce 630i memory controller + 1afa 7150 JW-IN7150-HD + 07d2 nForce 630i memory controller + 1afa 7150 JW-IN7150-HD + 07d3 nForce 630i memory controller + 1afa 7150 JW-IN7150-HD + 07d6 nForce 630i memory controller + 1afa 7150 JW-IN7150-HD + 07d7 MCP73 LPC Bridge + 1afa 7150 JW-IN7150-HD + 07d8 MCP73 SMBus + 1afa 7150 JW-IN7150-HD + 07d9 MCP73 Memory Controller + 1afa 7150 JW-IN7150-HD + 07da MCP73 Co-processor + 1afa 7150 JW-IN7150-HD + 07dc MCP73 Ethernet + 07dd MCP73 Ethernet + 07de MCP73 Ethernet + 07df MCP73 Ethernet + 07e0 C73 [GeForce 7150 / nForce 630i] + 1afa 7150 JW-IN7150-HD + 07e1 C73 [GeForce 7100 / nForce 630i] + 07e2 GeForce 7050 / nForce 630i + 07e3 C73 [GeForce 7050 / nForce 610i] + 07e5 C73 [GeForce 7100 / nForce 620i] + 07f0 MCP73 IDE + 07f4 GeForce 7100/nForce 630i SATA + 07f8 MCP73 SATA RAID Controller + 07fc MCP73 High Definition Audio + 10de 07fc MCP73 High Definition Audio + 07fe GeForce 7100/nForce 630i USB + 1afa 7150 JW-IN7150-HD + 0844 C77 [GeForce 9100M G] + 0845 C77 [GeForce 8200M G] + 0847 C78 [GeForce 9100] + 0848 C77 [GeForce 8300] + 0849 C77 [GeForce 8200] + 1462 7508 K9N2GM-FIH + 1849 0849 K10N78FullHD-hSLI R3.0 GeForce 8200 + 084a C77 [nForce 730a] + 084b C77 [GeForce 8200] + 084c C77 [nForce 780a SLI] + 084d C77 [nForce 750a SLI] + 1043 82e8 M3N72-D mGPU + 084f C77 [GeForce 8100 / nForce 720a] + 0860 C79 [GeForce 9300] + 0861 C79 [GeForce 9400] + 0862 C79 [GeForce 9400M G] + 0863 C79 [GeForce 9400M] + 0864 C79 [GeForce 9300] + 0865 C79 [GeForce 9300] + 0866 C79 [GeForce 9400M G] + 0867 C79 [GeForce 9400] + 0868 C79 [nForce 760i SLI] + 086a C79 [GeForce 9400] + 086c C79 [GeForce 9300 / nForce 730i] + 086d C79 [GeForce 9200] + 086e C79 [GeForce 9100M G] + 086f C79 [GeForce 9200M G] + 0870 C79 [GeForce 9400M] + 0871 C79 [GeForce 9200] + 0872 C79 [GeForce G102M] + 0873 C79 [GeForce G102M] + 087a C79 [Quadro FX 470] + 087d ION VGA + 087f C79 [Quadro FX 470M] + 0a20 GT200 [GeForce GT 220] + 0a60 GT200 [GeForce G210] + 0a65 GT200 [GeForce 210] + 0a80 MCP79 Host Bridge + 0a81 MCP79 Host Bridge + 0a82 MCP79 Host Bridge + 0a83 MCP79 Host Bridge + 0a84 MCP79 Host Bridge + 0a85 MCP79 Host Bridge + 0a86 MCP79 Host Bridge + 0a87 MCP79 Host Bridge + 0a88 MCP79 Memory Controller + 0a89 MCP79 Memory Controller + 0aa0 MCP79 PCI Express Bridge + 0aa2 MCP79 SMBus + 0aa3 MCP79 Co-processor + 0aa4 MCP79 Memory Controller + 0aa5 MCP79 OHCI USB 1.1 Controller + 0aa6 MCP79 EHCI USB 2.0 Controller + 0aa7 MCP79 OHCI USB 1.1 Controller + 0aa8 MCP79 OHCI USB 1.1 Controller + 0aa9 MCP79 EHCI USB 2.0 Controller + 0aaa MCP79 EHCI USB 2.0 Controller + 0aab MCP79 PCI Bridge + 0aac MCP79 LPC Bridge + 0aad MCP79 LPC Bridge + 0aae MCP79 LPC Bridge + 0aaf MCP79 LPC Bridge + 0ab0 MCP79 Ethernet + 0ab1 MCP79 Ethernet + 0ab2 MCP79 Ethernet + 0ab3 MCP79 Ethernet + 0ab4 MCP79 SATA Controller + 0ab5 MCP79 SATA Controller + 0ab6 MCP79 SATA Controller + 0ab7 MCP79 SATA Controller + 0ab8 MCP79 AHCI Controller + 0ab9 MCP79 AHCI Controller + 0aba MCP79 AHCI Controller + 0abb MCP79 AHCI Controller + 0abc MCP79 RAID Controller + 0abd MCP79 RAID Controller + 0abe MCP79 RAID Controller + 0abf MCP79 RAID Controller + 0ac0 MCP79 High Definition Audio + 0ac1 MCP79 High Definition Audio + 0ac2 MCP79 High Definition Audio + 0ac3 MCP79 High Definition Audio + 0ac4 MCP79 PCI Express Bridge + 0ac5 MCP79 PCI Express Bridge + 0ac6 MCP79 PCI Express Bridge + 0ac7 MCP79 PCI Express Bridge + 0ac8 MCP79 PCI Express Bridge + 0ad0 MCP78S [GeForce 8200] SATA Controller (non-AHCI mode) + 1462 7508 K9N2GM-FIH + 1849 0ad0 K10N78FullHD-hSLI R3.0 IDE + 0ad4 MCP78S [GeForce 8200] AHCI Controller + 1043 82e8 M3N72-D + 1849 0ad4 K10N78FullHD-hSLI R3.0 AHCI Controller + 0ad8 MCP78S [GeForce 8200] SATA Controller (RAID mode) +10df Emulex Corporation + 1ae5 LP6000 Fibre Channel Host Adapter + e100 Proteus-X: LightPulse IOV Fibre Channel Host Adapter + e180 Proteus-X: LightPulse IOV Fibre Channel Host Adapter + f011 Saturn: LightPulse Fibre Channel Host Adapter + f015 Saturn: LightPulse Fibre Channel Host Adapter + f085 LP850 Fibre Channel Host Adapter + f095 LP952 Fibre Channel Host Adapter + f098 LP982 Fibre Channel Host Adapter + f0a1 Thor LightPulse Fibre Channel Host Adapter + f0a5 Thor LightPulse Fibre Channel Host Adapter + f0b5 Viper LightPulse Fibre Channel Host Adapter + f0d1 Helios LightPulse Fibre Channel Host Adapter + f0d5 Helios LightPulse Fibre Channel Host Adapter + f0e1 Zephyr LightPulse Fibre Channel Host Adapter + f0e5 Zephyr LightPulse Fibre Channel Host Adapter + f0f5 Neptune LightPulse Fibre Channel Host Adapter + f100 Saturn-X: LightPulse Fibre Channel Host Adapter + f111 Saturn-X LightPulse Fibre Channel Host Adapter + f112 Saturn-X LightPulse Fibre Channel Host Adapter + f700 LP7000 Fibre Channel Host Adapter + f701 LP7000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) + f800 LP8000 Fibre Channel Host Adapter + f801 LP8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) + f900 LP9000 Fibre Channel Host Adapter + f901 LP9000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) + f980 LP9802 Fibre Channel Host Adapter + f981 LP9802 Fibre Channel Host Adapter Alternate ID + f982 LP9802 Fibre Channel Host Adapter Alternate ID + fa00 Thor-X LightPulse Fibre Channel Host Adapter + fb00 Viper LightPulse Fibre Channel Host Adapter + fc00 Thor-X LightPulse Fibre Channel Host Adapter + 10df fc00 LP10000 LightPulse Fibre Channel Host Adapter + fc10 Helios-X LightPulse Fibre Channel Host Adapter + fc20 Zephyr-X LightPulse Fibre Channel Host Adapter + fc40 Saturn-X: LightPulse Fibre Channel Host Adapter + fc50 Proteus-X: LightPulse IOV Fibre Channel Host Adapter + fd00 Helios-X LightPulse Fibre Channel Host Adapter + fd11 Helios-X LightPulse Fibre Channel Host Adapter + fd12 Helios-X LightPulse Fibre Channel Host Adapter + fe00 Zephyr-X LightPulse Fibre Channel Host Adapter + fe05 Zephyr-X: LightPulse FCoE Adapter + fe11 Zephyr-X LightPulse Fibre Channel Host Adapter + fe12 Zephyr-X LightPulse FCoE Adapter + ff00 Neptune LightPulse Fibre Channel Host Adapter +10e0 Integrated Micro Solutions Inc. + 5026 IMS5026/27/28 + 5027 IMS5027 + 5028 IMS5028 + 8849 IMS8849 + 8853 IMS8853 + 9128 IMS9128 [Twin turbo 128] +10e1 Tekram Technology Co.,Ltd. + 0391 TRM-S1040 + 10e1 0391 DC-315U SCSI-3 Host Adapter + 690c DC-690c + dc29 DC-290 +10e2 Aptix Corporation +10e3 Tundra Semiconductor Corp. + 0000 CA91C042 [Universe] + 0108 Tsi108 Host Bridge for Single PowerPC + 0148 Tsi148 [Tempe] + 1775 1100 VR11 Single Board Computer + 0860 CA91C860 [QSpan] + 0862 CA91C862A [QSpan-II] + 8260 CA91L8200B [Dual PCI PowerSpan II] + 8261 CA91L8260B [Single PCI PowerSpan II] + a108 Tsi109 Host Bridge for Dual PowerPC +10e4 Tandem Computers + 8029 Realtek 8029 Network Card +10e5 Micro Industries Corporation +10e6 Gainbery Computer Products Inc. +10e7 Vadem +10e8 Applied Micro Circuits Corp. + 1072 INES GPIB-PCI (AMCC5920 based) + 2011 Q-Motion Video Capture/Edit board + 4750 S5930 [Matchmaker] + 5920 S5920 + 8043 LANai4.x [Myrinet LANai interface chip] + 8062 S5933_PARASTATION + 807d S5933 [Matchmaker] + 8088 Kongsberg Spacetec Format Synchronizer + 8089 Kongsberg Spacetec Serial Output Board + 809c S5933_HEPC3 + 80b9 Harmonix Hi-Card P8 (4x active ISDN BRI) + 80d7 PCI-9112 + 80d9 PCI-9118 + 80da PCI-9812 + 80fc APCI1500 Signal processing controller (16 dig. inputs + 16 dig. outputs) + 811a PCI-IEEE1355-DS-DE Interface + 814c Fastcom ESCC-PCI (Commtech, Inc.) + 8170 S5933 [Matchmaker] (Chipset Development Tool) + 81e6 Multimedia video controller + 828d APCI3001 Signal processing controller (up to 16 analog inputs) + 8291 Fastcom 232/8-PCI (Commtech, Inc.) + 82c4 Fastcom 422/4-PCI (Commtech, Inc.) + 82c5 Fastcom 422/2-PCI (Commtech, Inc.) + 82c6 Fastcom IG422/1-PCI (Commtech, Inc.) + 82c7 Fastcom IG232/2-PCI (Commtech, Inc.) + 82ca Fastcom 232/4-PCI (Commtech, Inc.) + 82db AJA HDNTV HD SDI Framestore + 82e2 Fastcom DIO24H-PCI (Commtech, Inc.) + 8406 PCIcanx/PCIcan CAN interface [Kvaser AB] + 8407 PCIcan II CAN interface (A1021, PCB-07, PCB-08) [Kvaser AB] + 8851 S5933 on Innes Corp FM Radio Capture card +10e9 Alps Electric Co., Ltd. +10ea Intergraphics Systems + 1680 IGA-1680 + 1682 IGA-1682 + 1683 IGA-1683 + 2000 CyberPro 2000 + 2010 CyberPro 2000A + 5000 CyberPro 5000 + 5050 CyberPro 5050 + 5202 CyberPro 5202 +# CyberPro5202 Audio Function + 5252 CyberPro5252 +10eb Artists Graphics + 0101 3GA + 8111 Twist3 Frame Grabber +10ec Realtek Semiconductor Co., Ltd. + 0139 Zonet Zen3200 + 0260 Realtek 260 High Definition Audio + 0261 Realtek 261 High Definition Audio + 0262 Realtek 262 High Definition Audio + 0280 Realtek 280 High Definition Audio + 0660 Realtek 660 High Definition Audio + 0662 Realtek 662 High Definition Audio + 0861 Realtek 861 High Definition Audio + 0862 Realtek 862 High Definition Audio + 0880 Realtek 880 High Definition Audio + 0883 Realtek 883 High Definition Audio + 1025 1605 TravelMate 5600 series + 0885 Realtek 885 High Definition Audio + 0888 Realtek 888 High Definition Audio + 8029 RTL-8029(AS) + 10b8 2011 EZ-Card (SMC1208) + 10ec 8029 RTL-8029(AS) + 1113 1208 EN1208 + 1186 0300 DE-528 + 1259 2400 AT-2400 + 1af4 1100 Qemu virtual machine + 8129 RTL-8129 + 10ec 8129 RT8129 Fast Ethernet Adapter + 11ec 8129 RT8129 Fast Ethernet Adapter + 8136 RTL8101E/RTL8102E PCI Express Fast Ethernet controller + 1179 ff64 RTL8102E PCI-E Fast Ethernet NIC + 8138 RT8139 (B/C) Cardbus Fast Ethernet Adapter + 10ec 8138 RT8139 (B/C) Fast Ethernet Adapter + 8139 RTL-8139/8139C/8139C+ + 0357 000a TTP-Monitoring Card V2.0 + 1025 005a TravelMate 290 + 1025 8920 ALN-325 + 1025 8921 ALN-325 + 103c 006a NX9500 + 103c 30d9 Presario C700 + 1043 1045 L8400B or L3C/S notebook + 1043 8109 P5P800-MX Mainboard + 1071 8160 MIM2000 + 10bd 0320 EP-320X-R + 10f7 8338 Panasonic CF-Y5 laptop + 1113 ec01 FNC-0107TX + 1186 1300 DFE-538TX + 1186 1320 SN5200 + 1186 8139 DRN-32TX + 11f6 8139 FN22-3(A) LinxPRO Ethernet Adapter + 1259 2500 AT-2500TX + 1259 2503 AT-2500TX/ACPI + 1385 f31d FA311 v2 + 1395 2100 AMB2100 + 1429 d010 ND010/ND012 + 1432 9130 EN-9130TX + 1436 8139 RT8139 + 144d c00c P30/P35 notebook + 1458 e000 GA-7VM400M/7VT600 Motherboard + 1462 0131 MS-1013 Notebook + 1462 217c Aspire L250 + 1462 788c 865PE Neo2-V Mainboard + 146c 1439 FE-1439TX + 1489 6001 GF100TXRII + 1489 6002 GF100TXRA + 149c 139a LFE-8139ATX + 149c 8139 LFE-8139TX + 14cb 0200 LNR-100 Family 10/100 Base-TX Ethernet + 1565 2300 P4TSV Onboard LAN (RTL8100B) + 1631 7003 Onboard RTL8111 on GA-8SIML Rev1.0 Mainboard + 1695 9001 Onboard RTL8101L 10/100 MBit + 16ec 00ff USR997900A + 1799 5000 F5D5000 PCI Card/Desktop Network PCI Card + 1799 5010 F5D5010 CardBus Notebook Network Card + 187e 3303 FN312 + 1904 8139 RTL8139D Fast Ethernet Adapter + 2646 0001 KNE120TX + 8e2e 7000 KF-230TX + 8e2e 7100 KF-230TX/2 + a0a0 0007 ALN-325C + 8167 RTL-8110SC/8169SC Gigabit Ethernet + 1458 e000 GA-MA69G-S3H Motherboard + 1462 235c P965 Neo MS-7235 mainboard + 1462 236c 945P Neo3-F motherboard + 8168 RTL8111/8168B PCI Express Gigabit Ethernet controller + 1043 11f5 A6J-Q008 + 1043 16d5 U6V laptop + 1043 81aa P5B + 1458 e000 GA-EP45-DS5 Motherboard + 1462 238c Onboard RTL8111b on MSI P965 Platinum Mainboard + 1462 368c K9AG Neo2 + 1775 11cc CC11/CL11 + 1849 8168 Motherboard (one of many) + 8169 RTL-8169 Gigabit Ethernet + 1025 0079 Aspire 5024WLMi + 10bd 3202 EP-320G-TX1 32-bit PCI Gigabit Ethernet Adapter + 1259 c107 CG-LAPCIGT + 1371 434e ProG-2000L + 1385 311a GA311 + 1458 e000 GA-8I915ME-G Mainboard + 1462 030c K8N Neo-FSR v2.0 mainboard + 1462 065c Hetis 865GV-E (MS-7065) + 1462 702c K8T NEO 2 motherboard + 1462 7094 K8T Neo2-F V2.0 + 16ec 011f USR997903 + 1734 1091 D2030-A1 + a0a0 0449 AK86-L motherboard + 8180 RTL8180L 802.11b MAC + 8185 RTL-8185 IEEE 802.11a/b/g Wireless LAN Controller + 8197 SmartLAN56 56K Modem + 8199 RTL8187SE Wireless LAN Controller +10ed Ascii Corporation + 7310 V7310 +10ee Xilinx Corporation + 0001 EUROCOM for PCI (ECOMP) + 0002 Octal E1/T1 for PCI ETP Card + 0205 Wildcard TE205P + 0210 Wildcard TE210P + 0314 Wildcard TE405P/TE410P (1st Gen) + 0405 Wildcard TE405P (2nd Gen) + 0410 Wildcard TE410P (2nd Gen) + 3fc0 RME Digi96 + 3fc1 RME Digi96/8 + 3fc2 RME Digi96/8 Pro + 3fc3 RME Digi96/8 Pad + 3fc4 RME Digi9652 (Hammerfall) + 3fc5 RME Hammerfall DSP + 3fc6 RME Hammerfall DSP MADI + 8380 Ellips ProfiXpress Profibus Master + 8381 Ellips Santos Frame Grabber + d154 Copley Controls CAN card (PCI-CAN-02) +# SED is assigned Xilinx PCI device IDs ebf0 through ebff + ebf0 SED Systems Modulator/Demodulator + ebf1 SED Systems Audio Interface Card + ebf2 SED Systems Common PCI Interface +10ef Racore Computer Products, Inc. + 8154 M815x Token Ring Adapter +10f0 Peritek Corporation +10f1 Tyan Computer + 2865 Tyan Thunder K8E S2865 + 5300 Tyan S5380 Mainboard +10f2 Achme Computer, Inc. +10f3 Alaris, Inc. +10f4 S-MOS Systems, Inc. +10f5 NKK Corporation + a001 NDR4000 [NR4600 Bridge] +10f6 Creative Electronic Systems SA +10f7 Matsushita Electric Industrial Co., Ltd. +10f8 Altos India Ltd +10f9 PC Direct +10fa Truevision + 000c TARGA 1000 +10fb Thesys Gesellschaft fuer Mikroelektronik mbH + 186f TH 6255 +10fc I-O Data Device, Inc. +# What's in the cardbus end of a Sony ACR-A01 card, comes with newer Vaio CD-RW drives + 0003 Cardbus IDE Controller + 0005 Cardbus SCSI CBSC II +10fd Soyo Computer, Inc +10fe Fast Multimedia AG +10ff NCube +1100 Jazz Multimedia +1101 Initio Corporation + 0002 INI-920 Ultra SCSI Adapter + 1060 INI-A100U2W + 1622 INI-1623 PCI SATA-II Controller + 9100 INI-9100/9100W + 9400 INI-940 Fast Wide SCSI Adapter + 9401 INI-935 Fast Wide SCSI Adapter + 9500 INI-950 SCSI Adapter + 9502 INI-950P Ultra Wide SCSI Adapter +1102 Creative Labs + 0002 SB Live! EMU10k1 + 100a 1102 SB Live! 5.1 Digital OEM SB0220 EMU10K1-JFF + 1102 0020 CT4850 SBLive! Value + 1102 0021 CT4620 SBLive! + 1102 002f SBLive! mainboard implementation + 1102 100a SB Live! 5.1 Digital OEM [SB0220] + 1102 4001 E-mu APS + 1102 8022 CT4780 SBLive! Value + 1102 8023 CT4790 SoundBlaster PCI512 + 1102 8024 CT4760 SBLive! + 1102 8025 SBLive! Mainboard Implementation + 1102 8026 CT4830 SBLive! Value + 1102 8027 CT4832 SBLive! Value + 1102 8028 CT4760 SBLive! OEM version + 1102 8031 CT4831 SBLive! Value + 1102 8040 CT4760 SBLive! + 1102 8051 CT4850 SBLive! Value + 1102 8061 SBLive! Player 5.1 + 1102 8064 SBLive! 5.1 Model SB0100 + 1102 8065 SBLive! 5.1 Digital Model SB0220 + 1102 8066 Live! 5.1 Digital [SB0228] + 1102 8067 SBLive! 5.1 eMicro 28028 + 0004 SB Audigy + 1102 0051 SB0090 Audigy Player + 1102 0053 SB0090 Audigy Player/OEM + 1102 0058 SB0090 Audigy Player/OEM + 1102 1002 SB Audigy2 Platinum + 1102 1007 SB0240 Audigy 2 Platinum 6.1 + 1102 1009 SB Audigy2 OEM HP + 1102 2002 SB Audigy 2 ZS (SB0350) + 1102 4001 E-MU 1010 + 0005 SB X-Fi + 1102 0021 X-Fi Platinum + 1102 002c X-Fi XtremeGamer FATAL1TY PRO + 1102 1003 X-Fi XtremeMusic + 0006 [SB Live! Value] EMU10k1X + 0007 CA0106 Soundblaster + 1102 0007 SBLive! 24bit + 1102 1001 SB0310 Audigy LS + 1102 1002 SB0312 Audigy LS + 1102 1006 SB0410 SBLive! 24-bit + 1102 100a SB0570 [SB Audigy SE] + 1102 1012 SB0790 X-Fi XA + 1102 1013 Soundblaster X-Fi Xtreme Audio + 1462 1009 K8N Diamond + 0008 SB0400 Audigy2 Value + 1102 0008 EMU0404 Digital Audio System + 1102 4004 EMU1010 Digital Audio System [MAEM8960] + 0009 [SB X-Fi Xtreme Audio] CA0110-IBG + 1102 0010 [SB X-Fi Xtreme Audio] CA0110-IBG + 1102 0018 SB1040 + 000b X-Fi Titanium series [EMU20k2] + 1102 0041 SB X-Fi Titanium PCI-e [SB0880] + 4001 SB Audigy FireWire Port + 1102 0010 SB Audigy FireWire Port + 7002 SB Live! Game Port + 1102 0020 Gameport Joystick + 7003 SB Audigy Game Port + 1102 0040 SB Audigy Game Port + 1102 0060 SB Audigy2 MIDI/Game Port + 7004 [SB Live! Value] Input device controller + 7005 SB Audigy LS Game Port + 1102 1001 SB0310 Audigy LS MIDI/Game port + 1102 1002 SB0312 Audigy LS MIDI/Game port + 7006 [SB X-Fi Xtreme Audio] CA0110-IBG PCI to PCIe Bridge + 8938 Ectiva EV1938 + 1033 80e5 SlimTower-Jim (NEC) + 1071 7150 Mitac 7150 + 110a 5938 Siemens Scenic Mobile 510PIII + 13bd 100c Ceres-C (Sharp, Intel BX) + 13bd 100d Sharp, Intel Banister + 13bd 100e TwinHead P09S/P09S3 (Sharp) + 13bd f6f1 Marlin (Sharp) + 14ff 0e70 P88TE (TWINHEAD INTERNATIONAL Corp) + 14ff c401 Notebook 9100/9200/2000 (TWINHEAD INTERNATIONAL Corp) + 156d b400 G400 - Geo (AlphaTop (Taiwan)) + 156d b550 G560 (AlphaTop (Taiwan)) + 156d b560 G560 (AlphaTop (Taiwan)) + 156d b700 G700/U700 (AlphaTop (Taiwan)) + 156d b795 G795 (AlphaTop (Taiwan)) + 156d b797 G797 (AlphaTop (Taiwan)) +# nee Triones Technologies, Inc. +1103 HighPoint Technologies, Inc. + 0003 HPT343/345/346/363 + 0004 HPT366/368/370/370A/372/372N + 1103 0001 HPT370A + 1103 0004 HPT366 UDMA66 (r1) / HPT368 UDMA66 (r2) / HPT370 UDMA100 (r3) / HPT370 UDMA100 RAID (r4) + 1103 0005 HPT370 UDMA100 + 1103 0006 HPT302/302N + 0005 HPT372A/372N + 0006 HPT302/302N + 0007 HPT371/371N + 0008 HPT374 + 0009 HPT372N + 1720 RocketRAID 1720 (2x SATA II RAID Controller) + 1740 RocketRAID 1740 + 1742 RocketRAID 1742 + 2300 RocketRAID 230x 4 Port SATA-II Controller + 2310 RocketRAID 2310 4 Port SATA-II Controller + 2320 RocketRAID 2320 SATA-II Controller + 2322 RocketRAID 2322 SATA-II Controller + 2340 RocketRAID 2340 16 Port SATA-II Controller + 2640 RocketRAID 2640 SAS/SATA Controller + 3220 RocketRAID 3220 + 3320 RocketRAID 3320 +1104 RasterOps Corp. +1105 Sigma Designs, Inc. + 1105 REALmagic Xcard MPEG 1/2/3/4 DVD Decoder + 8300 REALmagic Hollywood Plus DVD Decoder + 8400 EM840x REALmagic DVD/MPEG-2 Audio/Video Decoder + 8401 EM8401 REALmagic DVD/MPEG-2 A/V Decoder + 8470 EM8470 REALmagic DVD/MPEG-4 A/V Decoder + 8471 EM8471 REALmagic DVD/MPEG-4 A/V Decoder + 8475 EM8475 REALmagic DVD/MPEG-4 A/V Decoder + 1105 0001 REALmagic X-Card + 8476 EM8476 REALmagic DVD/MPEG-4 A/V Decoder + 127d 0000 CineView II + 8485 EM8485 REALmagic DVD/MPEG-4 A/V Decoder + 8486 EM8486 REALmagic DVD/MPEG-4 A/V Decoder + c622 EM8622L MPEG-4.10 (H.264) and SMPTE 421M (VC-1) A/V Decoder +1106 VIA Technologies, Inc. + 0102 Embedded VIA Ethernet Controller + 0130 VT6305 1394.A Controller + 0198 P4X600 Host Bridge + 0204 K8M800 Host Bridge + 0208 PT890 Host Bridge + 0238 K8T890 Host Bridge + 0258 PT880 Host Bridge + 0259 CN333/CN400/PM880 Host Bridge + 0269 KT880 Host Bridge + 0282 K8T800Pro Host Bridge + 1043 80a3 A8V Deluxe + 0290 K8M890 Host Bridge + 0293 PM896 Host Bridge + 0296 P4M800 Host Bridge + 0305 VT8363/8365 [KT133/KM133] + 1019 0987 K7VZA Mainboard + 1043 8033 A7V Mainboard + 1043 803e A7V-E Mainboard + 1043 8042 A7V133/A7V133-C Mainboard + 147b a401 KT7/KT7-RAID/KT7A/KT7A-RAID Mainboard + 0308 PT880 Ultra/PT894 Host Bridge + 1043 8199 P4V800D-X Mainboard + 0314 CN700/VN800/P4M800CE/Pro Host Bridge + 0324 CX700/VX700 Host Bridge + 0327 P4M890 Host Bridge + 0336 K8M890CE Host Bridge + 0340 PT900 Host Bridge + 0351 K8T890CF Host Bridge + 0353 VX800 Host Bridge + 0364 CN896/VN896/P4M900 Host Bridge + 1043 81ce P5VD2-VM mothervoard + 0391 VT8371 [KX133] + 0409 VX855/VX875 Host Bridge: Host Control + 0415 PATA IDE Host Controller + 0501 VT8501 [Apollo MVP4] + 0505 VT82C505 +# Shares chip with :0576. The VT82C576M has :1571 instead of :0561. + 0561 VT82C576MV + 0571 VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE + 1019 0985 P6VXA Motherboard + 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) + 1043 8052 VT8233A Bus Master ATA100/66/33 IDE + 1043 808c A7V8X / A7V333 motherboard + 1043 80a1 A7V8X-X motherboard rev. 1.01 + 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard + 1106 0571 VT82C586/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE + 1179 0001 Magnia Z310 + 1297 f641 FX41 motherboard + 1458 5002 GA-7VAX Mainboard + 1462 5901 KT6 Delta-FIS2R (MS-6590) + 1462 7020 K8T NEO 2 motherboard + 1462 7094 K8T Neo2-F V2.0 + 1462 7120 KT4AV motherboard + 1462 7181 K8MM3-V mainboard + 147b 1407 KV8-MAX3 motherboard + 1849 0571 K7VT2/K7VT6 motherboard + 0576 VT82C576 3V [Apollo Master] + 0581 CX700/VX700 RAID Controller +# Upgrade bios to get correct ID: 5324 instead of 0581 + 1106 0581 Wrong IDE ID + 0585 VT82C585VP [Apollo VP1/VPX] + 0586 VT82C586/A/B PCI-to-ISA [Apollo VP] + 1106 0000 MVP3 ISA Bridge + 0591 VT8237A SATA 2-Port Controller + 0595 VT82C595 [Apollo VP2] + 0596 VT82C596 ISA [Mobile South] + 1106 0000 VT82C596/A/B PCI to ISA Bridge + 1458 0596 VT82C596/A/B PCI to ISA Bridge + 0597 VT82C597 [Apollo VP3] + 0598 VT82C598 [Apollo MVP3] + 0601 VT8601 [Apollo ProMedia] + 0605 VT8605 [ProSavage PM133] + 103c 1254 D9840-60001 [Brio BA410 Motherboard] + 1043 802c CUV4X mainboard + 0680 VT82C680 [Apollo P6] + 0686 VT82C686 [Apollo Super South] + 1019 0985 P6VXA Motherboard + 103c 1256 D9840-60001 [Brio BA410 Motherboard] + 1043 802c CUV4X mainboard + 1043 8033 A7V Mainboard + 1043 803e A7V-E Mainboard + 1043 8040 A7M266 Mainboard + 1043 8042 A7V133/A7V133-C Mainboard + 1106 0000 VT82C686/A PCI to ISA Bridge + 1106 0686 VT82C686/A PCI to ISA Bridge + 1179 0001 Magnia Z310 + 147b a702 KG7-Lite Mainboard + 0691 VT82C693A/694x [Apollo PRO133x] + 1019 0985 P6VXA Motherboard + 1179 0001 Magnia Z310 + 1458 0691 VT82C691 Apollo Pro System Controller + 0693 VT82C693 [Apollo Pro Plus] + 0698 VT82C693A [Apollo Pro133 AGP] + 0926 VT82C926 [Amazon] + 1000 VT82C570MV + 1106 VT82C570MV + 1122 VX800/VX820 Chrome 9 HC3 Integrated Graphics + 1204 K8M800 Host Bridge + 1208 PT890 Host Bridge + 1238 K8T890 Host Bridge + 1258 PT880 Host Bridge + 1259 CN333/CN400/PM880 Host Bridge + 1269 KT880 Host Bridge + 1282 K8T800Pro Host Bridge + 1290 K8M890 Host Bridge + 1293 PM896 Host Bridge + 1296 P4M800 Host Bridge + 1308 PT894 Host Bridge + 1314 CN700/VN800/P4M800CE/Pro Host Bridge + 1324 CX700/VX700 Host Bridge + 1327 P4M890 Host Bridge + 1336 K8M890CE Host Bridge + 1340 PT900 Host Bridge + 1351 VT3351 Host Bridge + 1353 VX800/VX820 Error Reporting + 1364 CN896/VN896/P4M900 Host Bridge + 1409 VX855/VX875 Error Reporting + 1571 VT82C576M/VT82C586 + 1595 VT82C595/97 [Apollo VP2/97] + 1732 VT1732 [Envy24 II] PCI Multi-Channel Audio Controller + 2106 VIA Rhine Family Fast Ethernet Adapter (VT6105) + 2204 K8M800 Host Bridge + 2208 PT890 Host Bridge + 2238 K8T890 Host Bridge + 2258 PT880 Host Bridge + 2259 CN333/CN400/PM880 CPU Host Bridge + 2269 KT880 Host Bridge + 2282 K8T800Pro Host Bridge + 2290 K8M890 Host Bridge + 2293 PM896 Host Bridge + 2296 P4M800 Host Bridge + 2308 PT894 Host Bridge + 2314 CN700/VN800/P4M800CE/Pro Host Bridge + 2324 CX700/VX700 Host Bridge + 2327 P4M890 Host Bridge + 2336 K8M890CE Host Bridge + 2340 PT900 Host Bridge + 2351 VT3351 Host Bridge + 2353 VX800/VX820 Host Bus Control + 2364 CN896/VN896/P4M900 Host Bridge + 2409 VX855/VX875 Host Bus Control + 287a VT8251 PCI to PCI Bridge + 287b VT8251 Host Bridge + 287c VT8251 PCIE Root Port + 287d VT8251 PCIE Root Port + 287e VT8251 Ultra VLINK Controller + 3022 CLE266 + 3038 VT82xxxxx UHCI USB 1.1 Controller +# possibly Hewlett-Packard D9840-60001 [Brio BA410 Motherboard] + 0925 1234 VA-502 Mainboard + 1019 0985 P6VXA Motherboard + 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) + 1043 8080 A7V333 motherboard + 1043 808c VT6202 USB2.0 4 port controller + 1043 80a1 A7V8X-X motherboard + 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard + 1179 0001 Magnia Z310 + 1458 5004 GA-7VAX Mainboard + 1462 5901 KT6 Delta-FIS2R (MS-6590) + 1462 7020 K8T NEO 2 motherboard + 1462 7094 K8T Neo2-F V2.0 + 1462 7120 KT4AV motherboard + 1462 7181 K8MM3-V mainboard + 147b 1407 KV8-MAX3 motherboard + 182d 201d CN-029 USB2.0 4 port PCI Card + 1849 3038 K7VT6 + 3040 VT82C586B ACPI + 3043 VT86C100A [Rhine] + 10bd 0000 VT86C100A Fast Ethernet Adapter + 1106 0100 VT86C100A Fast Ethernet Adapter + 1186 1400 DFE-530TX rev A + 3044 VT6306 Fire II IEEE 1394 OHCI Link Layer Controller + 0010 0001 IEEE 1394 4port DCST 1394-3+1B + 1025 005a TravelMate 290 + 1043 808a A8V/A8N/P4P800 series motherboard + 1458 1000 GA-7VT600-1394 Motherboard + 1462 207d K8NGM2 series motherboard + 1462 217d Aspire L250 + 1462 590d KT6 Delta-FIS2R (MS-6590) + 1462 702d K8T NEO 2 motherboard + 1462 971d MS-6917 + 3050 VT82C596 Power Management + 3051 VT82C596 Power Management + 3053 VT6105M [Rhine-III] + 3057 VT82C686 [Apollo Super ACPI] + 1019 0985 P6VXA Motherboard + 1019 0987 K7VZA Motherboard + 1043 8033 A7V Mainboard + 1043 803e A7V-E Mainboard + 1043 8040 A7M266 Mainboard + 1043 8042 A7V133/A7V133-C Mainboard + 1179 0001 Magnia Z310 + 3058 VT82C686 AC97 Audio Controller + 0e11 0097 SoundMax Digital Integrated Audio + 0e11 b194 Soundmax integrated digital audio + 1019 0985 P6VXA Motherboard + 1019 0987 K7VZA Motherboard + 103c 1251 D9840-60001 [Brio BA410 Motherboard] + 1043 1106 A7V133/A7V133-C Mainboard + 1106 4511 Onboard Audio on EP7KXA + 1106 aa03 VT1612A AC'97 Audio Controller + 11d4 5348 AD1881A audio + 1458 7600 Onboard Audio + 1462 3091 MS-6309 Onboard Audio + 1462 3092 MS-6309 v2.x Mainboard (VIA VT1611A codec) + 1462 3300 MS-6330 Onboard Audio + 15dd 7609 Onboard Audio + 3059 VT8233/A/8235/8237 AC97 Audio Controller + 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) + 1019 1877 K8M800-M2 (V2.0) onboard audio + 1043 8095 A7V8X Motherboard (Realtek ALC650 codec) + 1043 80a1 A7V8X-X Motherboard + 1043 80b0 A7V600/K8V-X/K8V Deluxe motherboard (ADI AD1980 codec [SoundMAX]) + 1043 810d Asus P5VD1-X (AD1888 codec [SoundMax]) + 1043 812a A8V Deluxe motherboard (Realtek ALC850 codec) + 10ec 8168 High Definition Audio + 1106 3059 L7VMM2 Motherboard + 1106 4161 K7VT2 motherboard + 1106 4170 PCPartner P4M800-8237R Motherboard + 1106 4552 Soyo KT-600 Dragon Plus (Realtek ALC 650) + 1297 c160 FX41 motherboard (Realtek ALC650 codec) + 1413 147b KV8 Pro motherboard onboard audio + 1458 a002 GA-7VAX Onboard Audio (Realtek ALC650) + 1462 0080 K8T NEO 2 motherboard + 1462 3800 KT266 onboard audio + 1462 5901 KT6 Delta-FIS2R (MS-6590) + 1462 7181 K8MM3-V mainboard + 147b 1407 KV8-MAX3 motherboard + 1695 300c EP-8KRA2+ Mainboard + 1849 0850 ASRock 775Dual-880 Pro onboard audio (Realtek ALC850) + 1849 9739 P4VT8 Mainboard (C-Media CMI9739A codec) + 1849 9761 K7VT6 motherboard + 4005 4710 MSI K7T266 Pro2-RU (MSI-6380 v2) onboard audio (Realtek/ALC 200/200P) + a0a0 01b6 AK77-8XN onboard audio + a0a0 0342 AK86-L motherboard + 3065 VT6102 [Rhine-II] + 1043 80a1 A7V8X-X Motherboard + 1043 80ed A7V600-X Motherboard + 1106 0102 VT6102 [Rhine II] Embeded Ethernet Controller on VT8235 + 1186 1400 DFE-530TX rev A + 1186 1401 DFE-530TX rev B + 13b9 1421 LD-10/100AL PCI Fast Ethernet Adapter (rev.B) + 1462 7061 MS-7061 + 1462 7181 K8MM3-V mainboard + 147b 1c09 NV7 Motherboard + 1695 3005 VT6103 + 1695 300c Realtek ALC655 sound chip + 1849 3065 K7VT6 motherboard +# This hosts more than just the Intel 537 codec, it also hosts PCtel (SIL33) and SmartLink (SIL34) codecs + 3068 AC'97 Modem Controller + 1462 309e MS-6309 Saturn Motherboard + 3074 VT8233 PCI to ISA Bridge + 1043 8052 VT8233A + 3091 VT8633 [Apollo Pro266] + 3099 VT8366/A/7 [Apollo KT266/A/333] + 1043 8064 A7V266-E Mainboard + 1043 807f A7V333 Mainboard + 1849 3099 K7VT2 motherboard + 3101 VT8653 Host Bridge + 3102 VT8662 Host Bridge + 3103 VT8615 Host Bridge + 3104 USB 2.0 + 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) + 1043 808c A7V8X motherboard + 1043 80a1 A7V8X-X motherboard rev 1.01 + 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard + 1297 f641 FX41 motherboard + 1458 5004 GA-7VAX Mainboard + 1462 5901 KT6 Delta-FIS2R (MS-6590) + 1462 7020 K8T NEO 2 motherboard + 1462 7094 K8T Neo2-F V2.0 + 1462 7120 KT4AV motherboard + 1462 7181 K8MM3-V mainboard + 147b 1407 KV8-MAX3 motherboard + 182d 201d CN-029 USB 2.0 4 port PCI Card + 1849 3104 K7VT6 motherboard + 3106 VT6105/VT6106S [Rhine-III] + 1106 0105 VT6106S [Rhine-III] + 1186 1403 DFE-530TX rev C + 1186 1406 DFE-530TX+ rev F2 + 1186 1407 DFE-538TX + 3108 K8M800/K8N800/K8N800A [S3 UniChrome Pro] + 3109 VT8233C PCI to ISA Bridge + 3112 VT8361 [KLE133] Host Bridge + 3113 VPX/VPX2 PCI to PCI Bridge Controller + 3116 VT8375 [KM266/KL266] Host Bridge + 1297 f641 FX41 motherboard + 3118 CN400/PM800/PM880/PN800/PN880 [S3 UniChrome Pro] + 3119 VT6120/VT6121/VT6122 Gigabit Ethernet Adapter + 3122 VT8623 [Apollo CLE266] integrated CastleRock graphics + 3123 VT8623 [Apollo CLE266] + 3128 VT8753 [P4X266 AGP] + 3133 VT3133 Host Bridge + 3147 VT8233A ISA Bridge + 1043 808c A7V333 motherboard + 3148 P4M266 Host Bridge + 3149 VIA VT6420 SATA RAID Controller + 1043 80ed A7V600/K8V Deluxe/K8V-X/A8V Deluxe motherboard + 1458 b003 GA-7VM400AM(F) Motherboard + 1462 5901 KT6 Delta-FIS2R (MS-6590) + 1462 7020 K8T Neo 2 Motherboard + 1462 7094 K8T Neo2-F V2.0 + 1462 7181 K8MM3-V mainboard + 147b 1407 KV8-MAX3 motherboard + 147b 1408 KV7 + 1849 3149 K7VT6 motherboard + a0a0 04ad AK86-L motherboard + 3156 P/KN266 Host Bridge + 3157 CX700/VX700 [S3 UniChrome Pro] + 3164 VT6410 ATA133 RAID controller + 1043 80f4 P4P800 Mainboard Deluxe ATX + 1462 7028 915P/G Neo2 + 3168 P4X333/P4X400/PT800 AGP Bridge + 1849 3168 P4VT8 Mainboard + 3177 VT8235 ISA Bridge + 1019 0a81 L7VTA v1.0 Motherboard (KT400-8235) + 1043 808c A7V8X motherboard + 1043 80a1 A7V8X-X motherboard + 1106 0000 KT4AV motherboard + 1297 f641 FX41 motherboard + 1458 5001 GA-7VAX Mainboard + 1849 3177 K7VT2 motherboard + 3178 ProSavageDDR P4N333 Host Bridge + 3188 VT8385 [K8T800 AGP] Host Bridge + 1043 80a3 K8V Deluxe/K8V-X motherboard + 147b 1407 KV8-MAX3 motherboard + 3189 VT8377 [KT400/KT600 AGP] Host Bridge + 1043 807f A7V8X motherboard + 1106 0000 KT4AV motherboard (KT400A) + 1458 5000 GA-7VAX Mainboard + 1849 3189 K7VT6 motherboard + 3204 K8M800 Host Bridge + 3205 VT8378 [KM400/A] Chipset Host Bridge + 1458 5000 GA-7VM400M Motherboard + 3208 PT890 Host Bridge + 3213 VPX/VPX2 PCI to PCI Bridge Controller + 3218 K8T800M Host Bridge + 3227 VT8237 ISA bridge [KT600/K8T800/K8T890 South] + 1043 80ed A7V600/K8V-X/A8V Deluxe motherboard + 1106 3227 DFI KT600-AL / Soltek SL-B9D-FGR Motherboard + 1458 5001 GA-7VT600 Motherboard + 147b 1407 KV8-MAX3 motherboard + 1849 3227 K7VT4 motherboard + 3230 K8M890CE/K8N890CE [Chrome 9] + 3238 K8T890 Host Bridge + 3249 VT6421 IDE RAID Controller + 324a CX700/VX700 PCI to PCI Bridge + 324b CX700/VX700 Host Bridge + 324e CX700/VX700 Internal Module Bus + 3253 VIA VT6655 WiFi Adapter, 802.11a/b/g + 3258 PT880 Host Bridge + 3259 CN333/CN400/PM880 Host Bridge + 3260 VIA Chrome9 HC IGP + 3269 KT880 Host Bridge + 3282 K8T800Pro Host Bridge + 3287 VT8251 PCI to ISA Bridge + 3288 VT1708/A [Azalia HDAC] (VIA High Definition Audio Controller) + 3290 K8M890 Host Bridge + 3296 P4M800 Host Bridge + 3324 CX700/VX700 Host Bridge + 3327 P4M890 Host Bridge + 3336 K8M890CE Host Bridge + 3337 VT8237A PCI to ISA Bridge + 3340 PT900 Host Bridge + 3343 P4M890 [S3 UniChrome Pro] + 3344 CN700/P4M800 Pro/P4M800 CE/VN800 [S3 UniChrome Pro] + 3349 VT8251 AHCI/SATA 4-Port Controller + 3351 VT3351 Host Bridge + 3353 VX800 PCI to PCI Bridge + 3364 CN896/VN896/P4M900 Host Bridge + 3371 CN896/VN896/P4M900 [Chrome 9 HC] + 3372 VT8237S PCI to ISA Bridge + 337a VT8237A PCI to PCI Bridge + 337b VT8237A Host Bridge + 3409 VX855/VX875 DRAM Bus Control + 4149 VIA VT6420 (ATA133) Controller + 4204 K8M800 Host Bridge + 4208 PT890 Host Bridge + 4238 K8T890 Host Bridge + 4258 PT880 Host Bridge + 4259 CN333/CN400/PM880 Host Bridge + 4269 KT880 Host Bridge + 4282 K8T800Pro Host Bridge + 4290 K8M890 Host Bridge + 4293 PM896 Host Bridge + 4296 P4M800 Host Bridge + 4308 PT894 Host Bridge + 4314 CN700/VN800/P4M800CE/Pro Host Bridge + 4324 CX700/VX700 Host Bridge + 4327 P4M890 Host Bridge + 4336 K8M890CE Host Bridge + 4340 PT900 Host Bridge + 4351 VT3351 Host Bridge + 4353 VX800/VX820 Power Management Control + 4364 CN896/VN896/P4M900 Host Bridge + 4409 VX855/VX875 Power Management Control + 5030 VT82C596 ACPI [Apollo PRO] + 5122 VX855/VX875 Chrome 9 HCM Integrated Graphics + 5208 PT890 I/O APIC Interrupt Controller + 5238 K8T890 I/O APIC Interrupt Controller + 5287 VT8251 Serial ATA Controller + 5290 K8M890 I/O APIC Interrupt Controller + 5308 PT894 I/O APIC Interrupt Controller + 5324 VX800 Serial ATA and EIDE Controller + 5327 P4M890 I/O APIC Interrupt Controller + 5336 K8M890CE I/O APIC Interrupt Controller + 5340 PT900 I/O APIC Interrupt Controller + 5351 VT3351 I/O APIC Interrupt Controller + 5353 VX800/VX820 APIC and Central Traffic Control + 5364 CN896/VN896/P4M900 I/O APIC Interrupt Controller + 5409 VX855/VX875 APIC and Central Traffic Control + 6100 VT85C100A [Rhine II] + 6287 SATA RAID Controller + 6327 P4M890 Security Device + 6353 VX800/VX820 Scratch Registers + 6364 CN896/VN896/P4M900 Security Device + 6409 VX855/VX875 Scratch Registers + 7204 K8M800 Host Bridge + 7205 KM400/KN400/P4M800 [S3 UniChrome] + 1458 d000 Gigabyte GA-7VM400(A)M(F) Motherboard + 1462 7061 MS-7061 + 7208 PT890 Host Bridge + 7238 K8T890 Host Bridge + 7258 PT880 Host Bridge + 7259 CN333/CN400/PM880 Host Bridge + 7269 KT880 Host Bridge + 7282 K8T800Pro Host Bridge + 7290 K8M890 Host Bridge + 7293 PM896 Host Bridge + 7296 P4M800 Host Bridge + 7308 PT894 Host Bridge + 7314 CN700/VN800/P4M800CE/Pro Host Bridge + 7324 CX700/VX700 Host Bridge + 7327 P4M890 Host Bridge + 7336 K8M890CE Host Bridge + 7340 PT900 Host Bridge + 7351 VT3351 Host Bridge + 7353 VX800/VX820 North-South Module Interface Control + 7364 CN896/VN896/P4M900 Host Bridge + 7409 VX855/VX875 North-South Module Interface Control + 8231 VT8231 [PCI-to-ISA Bridge] + 8235 VT8235 ACPI + 8305 VT8363/8365 [KT133/KM133 AGP] + 8324 CX700/VX700 PCI to ISA Bridge + 8353 VX800/VX820 Bus Control and Power Management + 8391 VT8371 [KX133 AGP] + 8400 MVP4 + 8409 VX855/VX875 Bus Control and Power Management + 8500 KLE133/PLE133/PLE133T + 8501 VT8501 [Apollo MVP4 AGP] + 8596 VT82C596 [Apollo PRO AGP] + 8597 VT82C597 [Apollo VP3 AGP] + 8598 VT82C598/694x [Apollo MVP3/Pro133x AGP] + 1019 0985 P6VXA Motherboard + 8601 VT8601 [Apollo ProMedia AGP] + 8605 VT8605 [PM133 AGP] + 8691 VT82C691 [Apollo Pro] + 8693 VT82C693 [Apollo Pro Plus] PCI Bridge + 8a25 PL133/PL133T [S3 ProSavage] + 8a26 KL133/KL133A/KM133/KM133A [S3 ProSavage] + 8d01 PN133/PN133T [S3 Twister] + 8d04 KM266/P4M266/P4M266A/P4N266 [S3 ProSavageDDR] + 9530 Secure Digital Memory Card Controller + 95d0 SDIO Host Controller + a208 PT890 PCI to PCI Bridge Controller + a238 K8T890 PCI to PCI Bridge Controller + a327 P4M890 PCI to PCI Bridge Controller + a353 VX8xx South-North Module Interface Control + a364 CN896/VN896/P4M900 PCI to PCI Bridge Controller + a409 VX855/VX875 USB Device Controller + b091 VT8633 [Apollo Pro266 AGP] + b099 VT8366/A/7 [Apollo KT266/A/333 AGP] + b101 VT8653 AGP Bridge + b102 VT8362 AGP Bridge + b103 VT8615 AGP Bridge + b112 VT8361 [KLE133] AGP Bridge + b113 VPX/VPX2 I/O APIC Interrupt Controller + b115 VT8363/8365 [KT133/KM133] PCI Bridge + b168 VT8235 PCI Bridge + b188 VT8237 PCI bridge [K8T800/K8T890 South] + 147b 1407 KV8-MAX3 motherboard + b198 VT8237/VX700 PCI Bridge + b213 VPX/VPX2 I/O APIC Interrupt Controller + b353 VX855/VX875 PCI to PCI Bridge + b999 [K8T890 North / VT8237 South] PCI Bridge + c208 PT890 PCI to PCI Bridge Controller + c238 K8T890 PCI to PCI Bridge Controller + c327 P4M890 PCI to PCI Bridge Controller + c340 PT900 PCI to PCI Bridge Controller + c353 VX800/VX820 PCI Express Root Port + c364 CN896/VN896/P4M900 PCI to PCI Bridge Controller + c409 VX855/VX875 EIDE Controller + d104 VT8237R USB UDCI Controller + d208 PT890 PCI to PCI Bridge Controller + d213 VPX/VPX2 PCI to PCI Bridge Controller + d238 K8T890 PCI to PCI Bridge Controller + d340 PT900 PCI to PCI Bridge Controller + e208 PT890 PCI to PCI Bridge Controller + e238 K8T890 PCI to PCI Bridge Controller + e340 PT900 PCI to PCI Bridge Controller + e353 VX800/VX820 PCI Express Root Port + e721 VT1708B 8-channel High Definition Audio CODEC + f208 PT890 PCI to PCI Bridge Controller + f238 K8T890 PCI to PCI Bridge Controller + f340 PT900 PCI to PCI Bridge Controller + f353 VX800/VX820 PCI Express Root Port +1107 Stratus Computers + 0576 VIA VT82C570MV [Apollo] (Wrong vendor ID!) +1108 Proteon, Inc. + 0100 p1690plus_AA + 0101 p1690plus_AB + 0105 P1690Plus + 0108 P1690Plus + 0138 P1690Plus + 0139 P1690Plus + 013c P1690Plus + 013d P1690Plus +1109 Cogent Data Technologies, Inc. + 1400 EM110TX [EX110TX] +110a Siemens Nixdorf AG + 0002 Pirahna 2-port + 0005 Tulip controller, power management, switch extender + 0006 FSC PINC (I/O-APIC) + 0015 FSC Multiprocessor Interrupt Controller + 001d FSC Copernicus Management Controller + 007b FSC Remote Service Controller, mailbox device + 007c FSC Remote Service Controller, shared memory device + 007d FSC Remote Service Controller, SMIC device + 2101 HST SAPHIR V Primary PCI (ISDN/PMx) +# Superfastcom-PCI (Commtech, Inc.) or DSCC4 WAN Adapter + 2102 DSCC4 PEB/PEF 20534 DMA Supported Serial Communication Controller with 4 Channels + 2104 Eicon Diva 2.02 compatible passive ISDN card + 3141 SIMATIC NET CP 5611 (Profibus Adapter) + 3142 SIMATIC NET CP 5613A1 (Profibus Adapter) + 4021 SIMATIC NET CP 5512 (Profibus and MPI Cardbus Adapter) + 4029 SIMATIC NET CP 5613A2 (Profibus Adapter) + 4942 FPGA I-Bus Tracer for MBD + 6120 SZB6120 +110b Chromatic Research Inc. + 0001 Mpact Media Processor + 0004 Mpact 2 +110c Mini-Max Technology, Inc. +110d Znyx Advanced Systems +110e CPU Technology +110f Ross Technology +1110 Powerhouse Systems + 6037 Firepower Powerized SMP I/O ASIC + 6073 Firepower Powerized SMP I/O ASIC +1111 Santa Cruz Operation +# Also claimed to be RNS or Rockwell International, current PCISIG records list Osicom +1112 Osicom Technologies Inc + 2200 FDDI Adapter + 2300 Fast Ethernet Adapter + 2340 4 Port Fast Ethernet Adapter + 2400 ATM Adapter +1113 Accton Technology Corporation + 1211 SMC2-1211TX + 103c 1207 EN-1207D Fast Ethernet Adapter + 1113 1211 EN-1207D Fast Ethernet Adapter + 1216 EN-1216 Ethernet Adapter + 1113 1216 EN1207F series PCI Fast Ethernet Adapter + 1113 2220 EN2220A Cardbus Fast Ethernet Adapter + 1113 2242 EN2242 10/100 Ethernet Mini-PCI Card + 111a 1020 SpeedStream 1020 PCI 10/100 Ethernet Adaptor [EN-1207F-TX ?] + 1217 EN-1217 Ethernet Adapter + 5105 10Mbps Network card + 9211 EN-1207D Fast Ethernet Adapter + 1113 9211 EN-1207D Fast Ethernet Adapter + 9511 21x4x DEC-Tulip compatible Fast Ethernet + d301 CPWNA100 (Philips wireless PCMCIA) + ec02 SMC 1244TX v3 + ee23 SMCWPCIT-G 108Mbps Wireless PCI adapter +1114 Atmel Corporation + 0506 at76c506 802.11b Wireless Network Adaptor +1115 3D Labs +1116 Data Translation + 0022 DT3001 + 0023 DT3002 + 0024 DT3003 + 0025 DT3004 + 0026 DT3005 + 0027 DT3001-PGL + 0028 DT3003-PGL + 0051 DT322 + 0060 DT340 + 0069 DT332 +1117 Datacube, Inc + 9500 Max-1C SVGA card + 9501 Max-1C image processing +1118 Berg Electronics +1119 ICP Vortex Computersysteme GmbH + 0000 GDT 6000/6020/6050 + 0001 GDT 6000B/6010 + 0002 GDT 6110/6510 + 0003 GDT 6120/6520 + 0004 GDT 6530 + 0005 GDT 6550 + 0006 GDT 6117/6517 + 0007 GDT 6127/6527 + 0008 GDT 6537 + 0009 GDT 6557/6557-ECC + 000a GDT 6115/6515 + 000b GDT 6125/6525 + 000c GDT 6535 + 000d GDT 6555/6555-ECC + 0100 GDT 6117RP/6517RP + 0101 GDT 6127RP/6527RP + 0102 GDT 6537RP + 0103 GDT 6557RP + 0104 GDT 6111RP/6511RP + 0105 GDT 6121RP/6521RP + 0110 GDT 6117RD/6517RD + 0111 GDT 6127RD/6527RD + 0112 GDT 6537RD + 0113 GDT 6557RD + 0114 GDT 6111RD/6511RD + 0115 GDT 6121RD/6521RD + 0118 GDT 6118RD/6518RD/6618RD + 0119 GDT 6128RD/6528RD/6628RD + 011a GDT 6538RD/6638RD + 011b GDT 6558RD/6658RD + 0120 GDT 6117RP2/6517RP2 + 0121 GDT 6127RP2/6527RP2 + 0122 GDT 6537RP2 + 0123 GDT 6557RP2 + 0124 GDT 6111RP2/6511RP2 + 0125 GDT 6121RP2/6521RP2 + 0136 GDT 6113RS/6513RS + 0137 GDT 6123RS/6523RS + 0138 GDT 6118RS/6518RS/6618RS + 0139 GDT 6128RS/6528RS/6628RS + 013a GDT 6538RS/6638RS + 013b GDT 6558RS/6658RS + 013c GDT 6533RS/6633RS + 013d GDT 6543RS/6643RS + 013e GDT 6553RS/6653RS + 013f GDT 6563RS/6663RS + 0166 GDT 7113RN/7513RN/7613RN + 0167 GDT 7123RN/7523RN/7623RN + 0168 GDT 7118RN/7518RN/7518RN + 0169 GDT 7128RN/7528RN/7628RN + 016a GDT 7538RN/7638RN + 016b GDT 7558RN/7658RN + 016c GDT 7533RN/7633RN + 016d GDT 7543RN/7643RN + 016e GDT 7553RN/7653RN + 016f GDT 7563RN/7663RN + 01d6 GDT 4x13RZ + 01d7 GDT 4x23RZ + 01f6 GDT 8x13RZ + 01f7 GDT 8x23RZ + 01fc GDT 8x33RZ + 01fd GDT 8x43RZ + 01fe GDT 8x53RZ + 01ff GDT 8x63RZ + 0210 GDT 6519RD/6619RD + 0211 GDT 6529RD/6629RD + 0260 GDT 7519RN/7619RN + 0261 GDT 7529RN/7629RN + 02ff GDT MAXRP + 0300 GDT NEWRX + 0301 GDT NEWRX2 +111a Efficient Networks, Inc + 0000 155P-MF1 (FPGA) + 0002 155P-MF1 (ASIC) + 0003 ENI-25P ATM + 111a 0000 ENI-25p Miniport ATM Adapter + 0005 SpeedStream (LANAI) + 111a 0001 ENI-3010 ATM + 111a 0009 ENI-3060 ADSL (VPI=0) + 111a 0101 ENI-3010 ATM + 111a 0109 ENI-3060CO ADSL (VPI=0) + 111a 0809 ENI-3060 ADSL (VPI=0 or 8) + 111a 0909 ENI-3060CO ADSL (VPI=0 or 8) + 111a 0a09 ENI-3060 ADSL (VPI=<0..15>) + 0007 SpeedStream ADSL + 111a 1001 ENI-3061 ADSL [ASIC] + 1203 SpeedStream 1023 Wireless PCI Adapter +111b Teledyne Electronic Systems +111c Tricord Systems Inc. + 0001 Powerbis Bridge +111d Integrated Device Technology, Inc. + 0001 IDT77201/77211 155Mbps ATM SAR Controller [NICStAR] + 0003 IDT77222/77252 155Mbps ATM MICRO ABR SAR Controller + 0004 IDT77V252 155Mbps ATM MICRO ABR SAR Controller + 0005 IDT77V222 155Mbps ATM MICRO ABR SAR Controller + 8018 PES12N3A PCI Express Switch + 801c PES24N3A PCI Express Switch + 8028 PES4T4 PCI Express Switch + 802b PES8T5A PCI Express Switch + 802c PES16T4 PCI Express Switch + 802d PES16T7 PCI Express Switch + 802e PES24T6 PCI Express Switch + 802f PES32T8 PCI Express Switch + 8032 PES48T12 PCI Express Switch + 8034 PES16/22/34H16 PCI Express Switch + 8035 PES32H8 PCI Express Switch + 8036 PES48H12 PCI Express Switch + 8037 PES64H16 PCI Express Switch + 8039 PES3T3 PCI Express Switch + 803a PES4T4 PCI Express Switch + 803c PES5T5 PCI Express Switch + 803d PES6T5 PCI Express Switch + 8048 PES8NT2 PCI Express Switch + 8049 PES8NT2 PCI Express Switch + 804a PES8NT2 PCI Express Internal NTB + 804b PES8NT2 PCI Express External NTB + 804c PES16NT2 PCI Express Switch + 804d PES16NT2 PCI Express Switch + 804e PES16NT2 PCI Express Internal NTB + 804f PES16NT2 PCI Express External NTB + 8058 PES12NT3 PCI Express Switch + 8059 PES12NT3 PCI Express Switch + 805a PES12NT3 PCI Express Internal NTB + 805b PES12NT3 PCI Express External NTB + 805c PES24NT3 PCI Express Switch + 805d PES24NT3 PCI Express Switch + 805e PES24NT3 PCI Express Internal NTB + 805f PES24NT3 PCI Express External NTB + 8060 PES16T4G2 PCI Express Gen2 Switch + 8061 PES12T3G2 PCI Express Gen2 Switch + 8068 PES6T6G2 PCI Express Gen2 Switch + 806a PES24T3G2 PCI Express Gen2 Switch + 14c1 000c 10G-PCIE2-8B2 + 806c PES16T4A/4T4G2 PCI Express Gen2 Switch + 806e PES24T6G2 PCI Express Gen2 Switch + 806f HIO524G2 PCI Express Gen2 Switch +111e Eldec +111f Precision Digital Images + 4a47 Precision MX Video engine interface + 5243 Frame capture bus interface +1120 EMC Corporation +1121 Zilog +1122 Multi-tech Systems, Inc. +1123 Excellent Design, Inc. +1124 Leutron Vision AG + 2581 Picport Monochrome +1125 Eurocore +1126 Vigra +1127 FORE Systems Inc + 0200 ForeRunner PCA-200 ATM + 0210 PCA-200PC + 0250 ATM + 0300 ForeRunner PCA-200EPC ATM + 0310 ATM + 0400 ForeRunnerHE ATM Adapter + 1127 0400 ForeRunnerHE ATM +1129 Firmworks +112a Hermes Electronics Company, Ltd. +112b Linotype - Hell AG +112c Zenith Data Systems +112d Ravicad +112e Infomedia Microelectronics Inc. +112f Dalsa Inc. + 0000 MVC IC-PCI + 0001 MVC IM-PCI Video frame grabber/processor + 0008 PC-CamLink PCI framegrabber +1130 Computervision +1131 Philips Semiconductors + 1561 USB 1.1 Host Controller + 1775 c200 C2K onboard USB 1.1 host controller + 1562 USB 2.0 Host Controller + 1775 c200 C2K onboard USB 2.0 host controller + 3400 SmartPCI56(UCB1500) 56K Modem + 5400 TriMedia TM1000/1100 + 12ca 0000 BlueICE + 5402 TriMedia TM1300 + 1244 0f00 Fritz!Card DSL + 15eb 1300 DT1300 + 15eb 1302 DT1302 + 15eb 1304 DT1304 + 15eb 1305 DT1305 + 15eb 1306 PMCDT1306 + 15eb 1308 DT1308 + 15eb 1331 DT1301 with SAA7121 + 15eb 1337 DT1301 with SAA7127 + 15eb 2d3d X3D + 15eb 7022 PTM1300 + 5405 TriMedia TM1500 + 1136 0005 LCP-1500 + 5406 TriMedia TM1700 + 540b PNX1005 Media Processor + 1131 0020 PNXLite PCI Demo Board + 7130 SAA7130 Video Broadcast Decoder + 102b 48d0 Matrox CronosPlus + 1048 226b ELSA EX-VISION 300TV + 107d 6655 WinFast DTV1000S + 1131 2001 10MOONS PCI TV CAPTURE CARD + 1131 2005 Techcom (India) TV Tuner Card (SSD-TV-670) + 1461 050c Nagase Sangyo TransGear 3000TV + 1461 10ff AVerMedia DVD EZMaker + 1461 2108 AverMedia AverTV/305 + 1461 2115 AverMedia AverTV Studio 305 + 153b 1152 Terratec Cinergy 200 TV + 185b c100 Compro VideoMate TV PVR/FM + 185b c901 Videomate DVB-T200 + 5168 0138 LifeView FlyVIDEO2000 + 7133 SAA7131/SAA7133/SAA7135 Video Broadcast Decoder + 0000 4091 Beholder BeholdTV 409 FM +# Deleting vendor name after rereading submit instructions + 0070 6701 WinTV HVR-1110 + 1019 4cb5 Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) + 1043 0210 FlyTV mini Asus Digimatrix + 1043 4843 ASUS TV-FM 7133 + 1043 4845 TV-FM 7135 + 1043 4862 P7131 Dual + 1043 4876 My Cinema-P7131 Hybrid + 1131 0000 KWorld V-Stream Studio TV Terminator + 1131 2001 Proteus Pro [philips reference design] + 1131 2018 Tiger reference design + 1131 4ee9 MonsterTV Mobile + 11bd 002b PCTV Stereo + 11bd 002e PCTV 110i (saa7133) + 12ab 0800 PURPLE TV + 13c2 2804 Technotrend Budget T-3000 Hybrid + 1421 0335 Instant TV DVB-T Cardbus + 1421 1370 Instant TV (saa7135) + 1435 7330 VFG7330 + 1435 7350 VFG7350 + 1461 1044 AVerTVHD MCE A180 + 1461 4836 M10D Hybrid DVBT + 1461 861e M105 PAL/SECAM/NTSC/FM Tuner + 1461 a14b AVerTV Studio 509 + 1461 a836 M115 DVB-T, PAL/SECAM/NTSC Tuner + 1461 f01d DVB-T Super 007 + 1461 f31f Avermedia AVerTV GO 007 FM + 1461 f936 Hybrid+FM PCI (rev A16D) + 1462 6231 TV@nywhere Plus + 1489 0214 LifeView FlyTV Platinum FM + 14c0 1212 LifeView FlyTV Platinum Mini2 + 153b 1160 Cinergy 250 PCI TV + 153b 1162 Terratec Cinergy 400 mobile + 17de 7350 ATSC 110 Digital / Analog HDTV Tuner + 17de 7352 ATSC 115 Digital / Analog HDTV Tuner + 185b c100 VideoMate TV + 185b c900 VideoMate T750 + 5168 0306 LifeView FlyDVB-T DUO + 5168 0319 LifeView FlyDVB Trio + 5168 0502 LifeView FlyDVB-T Duo CardBus + 5168 0520 LifeView FlyDVB Trio CardBus + 5168 1502 LifeView FlyTV CardBus + 5168 2502 LifeView FlyDVB-T CardBus + 5168 2520 LifeView FlyDVB-S Duo CardBus + 5168 3502 LifeView FlyDVB-T Hybrid CardBus + 5168 3520 LifeView FlyDVB Trio N CardBus + 7134 SAA7134/SAA7135HL Video Broadcast Decoder + 1019 4cb4 Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) + 1043 0210 Digimatrix TV + 1043 4840 ASUS TV-FM 7134 + 1043 4842 TV-FM 7134 + 1131 2004 EUROPA V3 reference design + 1131 4e85 SKNet Monster TV + 1131 6752 EMPRESS + 11bd 002b PCTV Stereo + 11bd 002d PCTV 300i DVB-T + PAL + 1461 2c00 AverTV Hybrid+FM PCI + 1461 9715 AVerTV Studio 307 + 1461 a70a Avermedia AVerTV 307 + 1461 a70b AverMedia M156 / Medion 2819 + 1461 d6ee Cardbus TV/Radio (E500) + 1471 b7e9 AVerTV Cardbus plus + 153b 1142 Terratec Cinergy 400 TV + 153b 1143 Terratec Cinergy 600 TV + 153b 1158 Terratec Cinergy 600 TV MK3 + 1540 9524 ProVideo PV952 + 16be 0003 Medion 7134 + 185b c200 Compro VideoMate Gold+ Pal + 185b c900 Videomate DVB-T300 + 1894 a006 KNC One TV-Station DVR + 1894 fe01 KNC One TV-Station RDS / Typhoon TV Tuner RDS + 5168 0138 FLY TV PRIME 34FM + 7145 SAA7145 + 7146 SAA7146 + 110a 0000 Fujitsu/Siemens DVB-C card rev1.5 + 110a ffff Fujitsu/Siemens DVB-C card rev1.5 + 1124 2581 Leutron Vision PicPort + 1131 4f56 KNC1 DVB-S Budget + 1131 4f60 Fujitsu-Siemens Activy DVB-S Budget Rev AL + 1131 4f61 Activy DVB-S Budget Rev GR + 1131 5f61 Activy DVB-T Budget + 114b 2003 DVRaptor Video Edit/Capture Card + 11bd 0006 DV500 Overlay + 11bd 000a DV500 Overlay + 11bd 000f DV500 Overlay + 13c2 0000 Siemens/Technotrend/Hauppauge DVB card rev1.3 or rev1.5 + 13c2 0001 Technotrend/Hauppauge DVB card rev1.3 or rev1.6 + 13c2 0002 Technotrend/Hauppauge DVB card rev2.1 + 13c2 0003 Technotrend/Hauppauge DVB card rev2.1 + 13c2 0004 Technotrend/Hauppauge DVB card rev2.1 + 13c2 0006 Technotrend/Hauppauge DVB card rev1.3 or rev1.6 + 13c2 0008 Technotrend/Hauppauge DVB-T + 13c2 000a Octal/Technotrend DVB-C for iTV + 13c2 000e Technotrend/Hauppauge DVB card rev2.3 + 13c2 1003 Technotrend-Budget/Hauppauge WinTV-NOVA-S DVB card + 13c2 1004 Technotrend-Budget/Hauppauge WinTV-NOVA-C DVB card + 13c2 1005 Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card + 13c2 100c Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card + 13c2 100f Technotrend-Budget/Hauppauge WinTV-NOVA-CI DVB card + 13c2 1011 Technotrend-Budget/Hauppauge WinTV-NOVA-T DVB card + 13c2 1012 DVB T-1500 + 13c2 1013 SATELCO Multimedia DVB + 13c2 1016 WinTV-NOVA-SE DVB card + 13c2 1018 DVB S-1401 + 13c2 1019 S2-3200 + 13c2 1102 Technotrend/Hauppauge DVB card rev2.1 + 153b 1155 Cinergy 1200 DVB-S + 153b 1156 Terratec Cynergy 1200C + 153b 1157 Cinergy 1200 DVB-T + 1894 0020 KNC One DVB-C V1.0 + 1894 0023 TVStation DVB-C plus + 7162 Pinnacle PCTV 3010iX Dual Analog + DVB-T (VT8251 Ultra VLINK Controller) + 9730 SAA9730 Integrated Multimedia and Peripheral Controller + 1131 0000 Integrated Multimedia and Peripheral Controller +1132 Mitel Corp. +1133 Dialogic Corporation + 7701 Eiconcard C90 + 7711 Eiconcard C91 + 7901 EiconCard S90 + 7902 EiconCard S90 + 7911 EiconCard S91 + 7912 EiconCard S91 + 7921 Eiconcard S92 + 7941 EiconCard S94 + 7942 EiconCard S94 + 7943 EiconCard S94 + 7944 EiconCard S94 + 7945 Eiconcard S94 + 7948 Eiconcard S94 64bit/66MHz + 9711 Eiconcard S91 V2 + 9911 Eiconcard S91 V2 + 9941 Eiconcard S94 V2 + 9a41 Eiconcard S94 PCIe + b921 EiconCard P92 + b922 EiconCard P92 + b923 EiconCard P92 + e001 Diva Pro 2.0 S/T + e002 Diva 2.0 S/T PCI + e003 Diva Pro 2.0 U + e004 Diva 2.0 U PCI + e005 Diva 2.01 S/T PCI + e006 Diva CT S/T PCI + e007 Diva CT U PCI + e008 Diva CT Lite S/T PCI + e009 Diva CT Lite U PCI + e00a Diva ISDN+V.90 PCI + e00b Diva ISDN PCI 2.02 + e00c Diva 2.02 PCI U + e00d Diva Pro 3.0 PCI + e00e Diva ISDN+CT S/T PCI Rev 2 + e010 Diva Server BRI-2M PCI + 110a 0021 Fujitsu Siemens ISDN S0 + e011 Diva Server BRI S/T Rev 2 + e012 Diva Server 4BRI-8M PCI + e013 4BRI + 1133 1300 Diva V-4BRI-8 PCI v2 + 1133 e013 Diva 4BRI-8 PCI v2 + e014 Diva Server PRI-30M PCI + e015 Diva PRI PCI v2 + e016 Diva Server Voice 4BRI PCI + e017 Diva Server Voice 4BRI Rev 2 + 1133 e017 Diva Server Voice 4BRI-8M 2.0 PCI + e018 BRI + 1133 1800 Diva V-BRI-2 PCI v2 + 1133 e018 Diva BRI-2 PCI v2 + e019 Diva Server Voice PRI Rev 2 + 1133 e019 Diva Server Voice PRI 2.0 PCI + e01a Diva BRI-2FX PCI v2 + e01b Diva Server Voice BRI-2M 2.0 PCI + 1133 e01b Diva Server Voice BRI-2M 2.0 PCI + e01c PRI + 1133 1c01 Diva PRI/E1/T1-8 PCI v3 + 1133 1c02 Diva PRI/T1-24 PCI(e) v3 + 1133 1c03 Diva PRI/E1-30 PCI(e) v3 + 1133 1c04 Diva PRI/E1/T1-CTI PCI(e) v3 + 1133 1c05 Diva V-PRI/T1-24 PCI(e) v3 + 1133 1c06 Diva V-PRI/E1-30 PCI(e) v3 + 1133 1c07 Diva Server PRI/E1/T1-8 Cornet NQ + 1133 1c08 Diva Server PRI/T1-24 Cornet NQ + 1133 1c09 Diva Server PRI/E1-30 Cornet NQ + 1133 1c0a Diva Server PRI/E1/T1 Cornet NQ + 1133 1c0b Diva Server V-PRI/T1-24 Cornet NQ + 1133 1c0c Diva Server V-PRI/E1-30 Cornet NQ + e01e 2PRI + 1133 1e01 Diva 2PRI/E1/T1-60 PCI v1 + 1133 e01e Diva V-2PRI/E1/T1-60 PCI v1 + e020 4PRI + 1133 2001 Diva 4PRI/E1/T1-120 PCI v1 + 1133 e020 Diva V-4PRI/E1/T1-120 PCI v1 + e022 Analog-2 + 1133 2200 Diva V-Analog-2 PCI v1 + 1133 e022 Diva Analog-2 PCI v1 + e024 Analog-4 + 1133 2400 Diva V-Analog-4 PCI v1 + 1133 e024 Diva Analog-4 PCI v1 + e028 Analog-8 + 1133 2800 Diva V-Analog-8 PCI v1 + 1133 e028 Diva Analog-8 PCI v1 + e02a Diva IPM-300 PCI v1 + e02c Diva IPM-600 PCI v1 + e02e 4BRI + 1133 2e01 Diva V-4BRI-8 PCIe v2 + 1133 e02e Diva 4BRI-8 PCIe v2 + e032 BRI + 1133 3201 Diva V-BRI-2 PCIe v2 + 1133 e032 Diva BRI-2 PCIe v2 + e034 Diva BRI-CTI PCI v2 +1134 Mercury Computer Systems + 0001 Raceway Bridge + 0002 Dual PCI to RapidIO Bridge +1135 Fuji Xerox Co Ltd + 0001 Printer controller +1136 Momentum Data Systems + 0002 PCI-JTAG +1137 Cisco Systems Inc + 0023 81 VIC PCIe Upstream Port + 0040 VIC PCIe Upstream Port + 0041 VIC PCIe Downstream Port + 0043 VIC Ethernet NIC + 1137 0048 M81KR Mezzanine + 0045 VIC FCoE HBA + 1137 0048 M81KR Mezzanine +1138 Ziatech Corporation + 8905 8905 [STD 32 Bridge] +1139 Dynamic Pictures, Inc + 0001 VGA Compatable 3D Graphics +113a FWB Inc +113b Network Computing Devices +113c Cyclone Microsystems, Inc. + 0000 PCI-9060 i960 Bridge + 0001 PCI-SDK [PCI i960 Evaluation Platform] + 0911 PCI-911 [i960Jx-based Intelligent I/O Controller] + 0912 PCI-912 [i960CF-based Intelligent I/O Controller] + 0913 PCI-913 + 0914 PCI-914 [I/O Controller w/ secondary PCI bus] +113d Leading Edge Products Inc +113e Sanyo Electric Co - Computer Engineering Dept +113f Equinox Systems, Inc. + 0808 SST-64P Adapter + 1010 SST-128P Adapter + 80c0 SST-16P DB Adapter + 80c4 SST-16P RJ Adapter + 80c8 SST-16P Adapter + 8888 SST-4P Adapter + 9090 SST-8P Adapter +1140 Intervoice Inc +1141 Crest Microsystem Inc +1142 Alliance Semiconductor Corporation + 3210 AP6410 + 6422 ProVideo 6422 + 6424 ProVideo 6424 + 6425 ProMotion AT25 + 643d ProMotion AT3D +1143 NetPower, Inc +1144 Cincinnati Milacron + 0001 Noservo controller +1145 Workbit Corporation + 8007 NinjaSCSI-32 Workbit + f007 NinjaSCSI-32 KME + f010 NinjaSCSI-32 Workbit + f012 NinjaSCSI-32 Logitec + f013 NinjaSCSI-32 Logitec + f015 NinjaSCSI-32 Melco + f020 NinjaSCSI-32 Sony PCGA-DVD51 + f021 NinjaPATA-32 Delkin Cardbus UDMA + f024 NinjaPATA-32 Delkin Cardbus UDMA + f103 NinjaPATA-32 Delkin Cardbus UDMA +1146 Force Computers +1147 Interface Corp +# Nee Schneider & Koch +1148 SysKonnect + 4000 FDDI Adapter + 0e11 b03b Netelligent 100 FDDI DAS Fibre SC + 0e11 b03c Netelligent 100 FDDI SAS Fibre SC + 0e11 b03d Netelligent 100 FDDI DAS UTP + 0e11 b03e Netelligent 100 FDDI SAS UTP + 0e11 b03f Netelligent 100 FDDI SAS Fibre MIC + 1148 5521 FDDI SK-5521 (SK-NET FDDI-UP) + 1148 5522 FDDI SK-5522 (SK-NET FDDI-UP DAS) + 1148 5541 FDDI SK-5541 (SK-NET FDDI-FP) + 1148 5543 FDDI SK-5543 (SK-NET FDDI-LP) + 1148 5544 FDDI SK-5544 (SK-NET FDDI-LP DAS) + 1148 5821 FDDI SK-5821 (SK-NET FDDI-UP64) + 1148 5822 FDDI SK-5822 (SK-NET FDDI-UP64 DAS) + 1148 5841 FDDI SK-5841 (SK-NET FDDI-FP64) + 1148 5843 FDDI SK-5843 (SK-NET FDDI-LP64) + 1148 5844 FDDI SK-5844 (SK-NET FDDI-LP64 DAS) + 4200 Token Ring adapter + 4300 SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link) + 1148 9821 SK-9821 Gigabit Ethernet Server Adapter (SK-NET GE-T) + 1148 9822 SK-9822 Gigabit Ethernet Server Adapter (SK-NET GE-T dual link) + 1148 9841 SK-9841 Gigabit Ethernet Server Adapter (SK-NET GE-LX) + 1148 9842 SK-9842 Gigabit Ethernet Server Adapter (SK-NET GE-LX dual link) + 1148 9843 SK-9843 Gigabit Ethernet Server Adapter (SK-NET GE-SX) + 1148 9844 SK-9844 Gigabit Ethernet Server Adapter (SK-NET GE-SX dual link) + 1148 9861 SK-9861 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition) + 1148 9862 SK-9862 Gigabit Ethernet Server Adapter (SK-NET GE-SX Volition dual link) + 1148 9871 SK-9871 Gigabit Ethernet Server Adapter (SK-NET GE-ZX) + 1148 9872 SK-9872 Gigabit Ethernet Server Adapter (SK-NET GE-ZX dual link) + 1259 2970 AT-2970SX Gigabit Ethernet Adapter + 1259 2971 AT-2970LX Gigabit Ethernet Adapter + 1259 2972 AT-2970TX Gigabit Ethernet Adapter + 1259 2973 AT-2971SX Gigabit Ethernet Adapter + 1259 2974 AT-2971T Gigabit Ethernet Adapter + 1259 2975 AT-2970SX/2SC Gigabit Ethernet Adapter + 1259 2976 AT-2970LX/2SC Gigabit Ethernet Adapter + 1259 2977 AT-2970TX/2TX Gigabit Ethernet Adapter + 4320 SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter, PCI64, Fiber ZX/SC + 1148 0121 Marvell RDK-8001 Adapter + 1148 0221 Marvell RDK-8002 Adapter + 1148 0321 Marvell RDK-8003 Adapter + 1148 0421 Marvell RDK-8004 Adapter + 1148 0621 Marvell RDK-8006 Adapter + 1148 0721 Marvell RDK-8007 Adapter + 1148 0821 Marvell RDK-8008 Adapter + 1148 0921 Marvell RDK-8009 Adapter + 1148 1121 Marvell RDK-8011 Adapter + 1148 1221 Marvell RDK-8012 Adapter + 1148 3221 SK-9521 V2.0 10/100/1000Base-T Adapter + 1148 5021 SK-9821 V2.0 Gigabit Ethernet 10/100/1000Base-T Adapter + 1148 5041 SK-9841 V2.0 Gigabit Ethernet 1000Base-LX Adapter + 1148 5043 SK-9843 V2.0 Gigabit Ethernet 1000Base-SX Adapter + 1148 5051 SK-9851 V2.0 Gigabit Ethernet 1000Base-SX Adapter + 1148 5061 SK-9861 V2.0 Gigabit Ethernet 1000Base-SX Adapter + 1148 5071 SK-9871 V2.0 Gigabit Ethernet 1000Base-ZX Adapter + 1148 9521 SK-9521 10/100/1000Base-T Adapter + 4400 SK-9Dxx Gigabit Ethernet Adapter + 4500 SK-9Mxx Gigabit Ethernet Adapter + 9000 SK-9S21 10/100/1000Base-T Server Adapter, PCI-X, Copper RJ-45 + 9843 [Fujitsu] Gigabit Ethernet + 9e00 SK-9E21D 10/100/1000Base-T Adapter, Copper RJ-45 + 1148 2100 SK-9E21 Server Adapter + 1148 21d0 SK-9E21D 10/100/1000Base-T Adapter + 1148 2200 SK-9E22 Server Adapter + 1148 8100 SK-9E81 Server Adapter + 1148 8200 SK-9E82 Server Adapter + 1148 9100 SK-9E91 Server Adapter + 1148 9200 SK-9E92 Server Adapter +1149 Win System Corporation +114a VMIC + 5579 VMIPCI-5579 (Reflective Memory Card) + 5587 VMIPCI-5587 (Reflective Memory Card) + 6504 VMIC PCI 7755 FPGA + 7587 VMIVME-7587 +114b Canopus Co., Ltd +114c Annabooks +114d IC Corporation +114e Nikon Systems Inc +114f Digi International + 0002 AccelePort EPC + 0003 RightSwitch SE-6 + 0004 AccelePort Xem + 0005 AccelePort Xr + 0006 AccelePort Xr,C/X + 0009 AccelePort Xr/J + 000a AccelePort EPC/J + 000c DataFirePRIme T1 (1-port) + 000d SyncPort 2-Port (x.25/FR) + 0011 AccelePort 8r EIA-232 (IBM) + 0012 AccelePort 8r EIA-422 + 0013 AccelePort Xr + 0014 AccelePort 8r EIA-422 + 0015 AccelePort Xem + 0016 AccelePort EPC/X + 0017 AccelePort C/X + 001a DataFirePRIme E1 (1-port) + 001b AccelePort C/X (IBM) + 001d DataFire RAS T1/E1/PRI + 114f 0050 DataFire RAS E1 Adapter + 114f 0051 DataFire RAS Dual E1 Adapter + 114f 0052 DataFire RAS T1 Adapter + 114f 0053 DataFire RAS Dual T1 Adapter + 0023 AccelePort RAS + 0024 DataFire RAS B4 ST/U + 114f 0030 DataFire RAS BRI U Adapter + 114f 0031 DataFire RAS BRI S/T Adapter + 0026 AccelePort 4r 920 + 0027 AccelePort Xr 920 + 0028 ClassicBoard 4 + 0029 ClassicBoard 8 + 0034 AccelePort 2r 920 + 0035 DataFire DSP T1/E1/PRI cPCI + 0040 AccelePort Xp + 114f 0042 AccelePort 2p PCI + 114f 0043 AccelePort 4p PCI + 114f 0044 AccelePort 8p PCI + 114f 0045 AccelePort 16p PCI + 114f 004e AccelePort 32p PCI + 0042 AccelePort 2p + 0043 AccelePort 4p + 0044 AccelePort 8p + 0045 AccelePort 16p + 004e AccelePort 32p + 0070 Datafire Micro V IOM2 (Europe) + 0071 Datafire Micro V (Europe) + 0072 Datafire Micro V IOM2 (North America) + 0073 Datafire Micro V (North America) + 00b0 Digi Neo 4 + 00b1 Digi Neo 8 + 00c8 Digi Neo 2 DB9 + 00c9 Digi Neo 2 DB9 PRI + 00ca Digi Neo 2 RJ45 + 00cb Digi Neo 2 RJ45 PRI + 00cc Digi Neo 1 422 + 00cd Digi Neo 1 422 485 + 00ce Digi Neo 2 422 485 + 00d0 ClassicBoard 4 422 + 00d1 ClassicBoard 8 422 + 00f1 Digi Neo PCI-E 4 port + 00f4 Digi Neo 4 (IBM version) + 6001 Avanstar +1150 Thinking Machines Corp +1151 JAE Electronics Inc. +1152 Megatek +1153 Land Win Electronic Corp +1154 Melco Inc +1155 Pine Technology Ltd +1156 Periscope Engineering +1157 Avsys Corporation +1158 Voarx R & D Inc + 3011 Tokenet/vg 1001/10m anylan + 9050 Lanfleet/Truevalue + 9051 Lanfleet/Truevalue +1159 Mutech Corp + 0001 MV-1000 + 0002 MV-1500 +115a Harlequin Ltd +115b Parallax Graphics +115c Photron Ltd. +115d Xircom + 0003 Cardbus Ethernet 10/100 + 1014 0181 10/100 EtherJet Cardbus Adapter + 1014 1181 10/100 EtherJet Cardbus Adapter + 1014 8181 10/100 EtherJet Cardbus Adapter + 1014 9181 10/100 EtherJet Cardbus Adapter + 115d 0181 Cardbus Ethernet 10/100 + 115d 0182 RealPort2 CardBus Ethernet 10/100 (R2BE-100) + 115d 1181 Cardbus Ethernet 10/100 + 1179 0181 Cardbus Ethernet 10/100 + 8086 8181 EtherExpress PRO/100 Mobile CardBus 32 Adapter + 8086 9181 EtherExpress PRO/100 Mobile CardBus 32 Adapter + 0005 Cardbus Ethernet 10/100 + 1014 0182 10/100 EtherJet Cardbus Adapter + 1014 1182 10/100 EtherJet Cardbus Adapter + 115d 0182 Cardbus Ethernet 10/100 + 115d 1182 Cardbus Ethernet 10/100 + 0007 Cardbus Ethernet 10/100 + 1014 0182 10/100 EtherJet Cardbus Adapter + 1014 1182 10/100 EtherJet Cardbus Adapter + 115d 0182 Cardbus Ethernet 10/100 + 115d 1182 Cardbus Ethernet 10/100 + 000b Cardbus Ethernet 10/100 + 1014 0183 10/100 EtherJet Cardbus Adapter + 115d 0183 Cardbus Ethernet 10/100 + 000c Mini-PCI V.90 56k Modem + 000f Cardbus Ethernet 10/100 + 1014 0183 10/100 EtherJet Cardbus Adapter + 115d 0183 Cardbus Ethernet 10/100 + 00d4 Mini-PCI K56Flex Modem + 0101 Cardbus 56k modem + 115d 1081 Cardbus 56k Modem + 0103 Cardbus Ethernet + 56k Modem + 1014 9181 Cardbus 56k Modem + 1115 1181 Cardbus Ethernet 100 + 56k Modem + 115d 1181 CBEM56G-100 Ethernet + 56k Modem + 8086 9181 PRO/100 LAN + Modem56 CardBus +115e Peer Protocols Inc +115f Maxtor Corporation +1160 Megasoft Inc +1161 PFU Limited +1162 OA Laboratory Co Ltd +1163 Rendition + 0001 Verite 1000 + 2000 Verite V2000/V2100/V2200 + 1092 2000 Stealth II S220 +1164 Advanced Peripherals Technologies +1165 Imagraph Corporation + 0001 Motion TPEG Recorder/Player with audio +# nee ServerWorks +1166 Broadcom + 0000 CMIC-LE + 0005 CNB20-LE Host Bridge + 0006 CNB20HE Host Bridge + 0007 CNB20-LE Host Bridge + 0008 CNB20HE Host Bridge + 0009 CNB20LE Host Bridge + 0010 CIOB30 + 0011 CMIC-HE + 0012 CMIC-WS Host Bridge (GC-LE chipset) + 0013 CNB20-HE Host Bridge + 0014 CMIC-LE Host Bridge (GC-LE chipset) + 0015 CMIC-GC Host Bridge + 0016 CMIC-GC Host Bridge + 0017 GCNB-LE Host Bridge + 0031 HT1100 HPX0 HT Host Bridge + 0036 BCM5785 [HT1000] PCI/PCI-X Bridge + 0101 CIOB-X2 PCI-X I/O Bridge + 0103 EPB PCI-Express to PCI-X Bridge + 0104 BCM5785 [HT1000] PCI/PCI-X Bridge + 0110 CIOB-E I/O Bridge with Gigabit Ethernet + 0130 BCM5780 [HT2000] PCI-X bridge + 0132 BCM5780 [HT2000] PCI-Express Bridge + 1166 0132 HT2000 PCI-Express bridge + 0140 HT2100 PCI-Express Bridge + 0141 HT2100 PCI-Express Bridge + 0142 HT2100 PCI-Express Bridge + 0144 HT2100 PCI-Express Bridge + 0200 OSB4 South Bridge + 0201 CSB5 South Bridge + 4c53 1080 CT8 mainboard + 0203 CSB6 South Bridge + 1734 1012 PRIMERGY RX/TX series + 0205 BCM5785 [HT1000] Legacy South Bridge + 0211 OSB4 IDE Controller + 0212 CSB5 IDE Controller + 1028 014a PowerEdge 1750 + 1028 810b PowerEdge 1650/2550 + 4c53 1080 CT8 mainboard + 0213 CSB6 RAID/IDE Controller + 1028 4134 PowerEdge 600SC + 1028 c134 Poweredge SC600 + 1734 1012 PRIMERGY RX/TX series onboard IDE + 0214 BCM5785 [HT1000] IDE + 1028 0205 PowerEdge 2970 HT1000 IDE + 0217 CSB6 IDE Controller + 1028 4134 Poweredge SC600 + 021b HT1100 HD Audio + 0220 OSB4/CSB5 OHCI USB Controller + 4c53 1080 CT8 mainboard + 0221 CSB6 OHCI USB Controller + 1734 1012 PRIMERGY RX/TX series onboard OHCI + 0223 BCM5785 [HT1000] USB + 1028 0205 PowerEdge 2970 HT1000 USB Controller + 1028 020b PowerEdge T605 HT1000 USB Controller + 0225 CSB5 LPC bridge + 1166 0230 Dell PowerEdge 1650/1750 + 0227 GCLE-2 Host Bridge + 1734 1012 PRIMERGY RX/TX series + 0230 CSB5 LPC bridge + 4c53 1080 CT8 mainboard + 0234 BCM5785 [HT1000] LPC + 1028 0205 PowerEdge 2970 HT1000 LPC + 1028 020b PowerEdge T605 HT1000 LPC + 0235 BCM5785 [HT1000] XIOAPIC0-2 + 0238 BCM5785 [HT1000] WDTimer + 0240 K2 SATA + 0241 RAIDCore RC4000 + 0242 RAIDCore BC4000 + 024a BCM5785 [HT1000] SATA (Native SATA Mode) + 1028 020b PowerEdge T605 onboard SATA Controller +# The device starts as 024A, and changes to 024B if set to PATA mode in BIOS + 024b BCM5785 [HT1000] SATA (PATA/IDE Mode) + 1028 0205 PowerEdge 2970 HT1000 SATA controller + 0406 HT1100 PCI-X Bridge + 0408 HT1100 Legacy Device + 040a HT1100 ISA-LPC Bridge + 1028 0223 PowerEdge R905 HT1100 ISA-LPC Bridge + 0410 HT1100 SATA Controller (Native SATA Mode) + 0411 HT1100 SATA Controller (PATA / IDE Mode) + 0412 HT1100 USB OHCI Controller + 0414 HT1100 USB EHCI Controller + 0416 HT1100 USB EHCI Controller (with Debug Port) + 0420 HT1100 PCI-Express Bridge + 0421 HT1100 SAS/SATA Controller + 0422 HT1100 PCI-Express Bridge +1167 Mutoh Industries Inc +1168 Thine Electronics Inc +1169 Centre for Development of Advanced Computing +# nee Polaris Communications +116a Luminex Software, Inc. + 6100 Bus/Tag Channel + 6800 Escon Channel + 7100 Bus/Tag Channel + 7800 Escon Channel +116b Connectware Inc +116c Intelligent Resources Integrated Systems +116d Martin-Marietta +116e Electronics for Imaging +116f Workstation Technology +1170 Inventec Corporation +1171 Loughborough Sound Images Plc +1172 Altera Corporation +1173 Adobe Systems, Inc +1174 Bridgeport Machines +1175 Mitron Computer Inc. +1176 SBE Incorporated +1177 Silicon Engineering +1178 Alfa, Inc. + afa1 Fast Ethernet Adapter +1179 Toshiba America Info Systems + 0102 Extended IDE Controller + 0103 EX-IDE Type-B + 0404 DVD Decoder card + 0406 Tecra Video Capture device + 0407 DVD Decoder card (Version 2) + 0601 CPU to PCI bridge + 1179 0001 Satellite Pro + 0603 ToPIC95 PCI to CardBus Bridge for Notebooks + 060a ToPIC95 + 1179 0001 Satellite Pro + 060f ToPIC97 + 1179 0001 Satellite 4010 + 0617 ToPIC100 PCI to Cardbus Bridge with ZV Support + 0618 CPU to PCI and PCI to ISA bridge + 0701 FIR Port Type-O + 0804 TC6371AF SmartMedia Controller + 0805 SD TypA Controller + 0d01 FIR Port Type-DO + 1179 0001 FIR Port Type-DO +117a A-Trend Technology +117b L G Electronics, Inc. +117c Atto Technology + 002c SAS RAID Adapter + 0030 Ultra320 SCSI Host Adapter + 117c 8013 ExpressPCI UL4D + 117c 8014 ExpressPCI UL4S + 117c 8027 ExpressPCI UL5D + 117c 802f ExpressPCI UL5D Low Profile + 0033 SAS Adapter +117d Becton & Dickinson +117e T/R Systems +117f Integrated Circuit Systems +1180 Ricoh Co Ltd + 0465 RL5c465 + 0466 RL5c466 + 0475 RL5c475 + 144d c006 vpr Matrix 170B4 CardBus bridge + 0476 RL5c476 II + 1014 0185 ThinkPad A/T/X Series + 1014 056c ThinkPad Z60t + 1028 014f Latitude X300 laptop + 1028 0188 Inspiron 6000 laptop + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 1043 1237 A6J-Q008 + 1043 1967 V6800V + 1043 1987 Asus A4K and Z81K notebooks, possibly others ( mid-2005 machines ) + 104d 80df Vaio PCG-FX403 + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 104d 814e VAIO GRZ390Z + 10f7 8338 Panasonic CF-Y5 laptop + 144d c005 X10 Laptop + 144d c00c P30/P35 notebook + 14ef 0220 PCD-RP-220S + 17aa 201c ThinkPad X60s + 17aa 20c4 ThinkPad T61 + 0477 RL5c477 + 0478 RL5c478 + 1014 0184 ThinkPad A30p + 0511 R5C511 + 0522 R5C522 IEEE 1394 Controller + 1014 01cf ThinkPad A30p + 1043 1967 V6800V + 0551 R5C551 IEEE 1394 Controller + 144d c006 vpr Matrix 170B4 + 0552 R5C552 IEEE 1394 Controller + 1014 0511 ThinkPad A/T/X Series + 1028 014f Latitude X300 laptop + 1028 0188 Inspiron 6000 laptop + 1043 1237 A6J-Q008 + 144d c005 X10 Laptop + 144d c00c P30/P35 notebook + 17aa 201e ThinkPad X60s + 0554 R5C554 + 0575 R5C575 SD Bus Host Adapter + 0576 R5C576 SD Bus Host Adapter + 0592 R5C592 Memory Stick Bus Host Adapter + 1025 0121 Aspire 5920G + 1028 01d7 XPS M1210 + 1028 01f3 Inspiron 1420 + 103c 30b5 Presario V3242AU + 103c 30b7 Presario V6133CL + 1043 1237 A6J-Q008 + 1043 1967 V6800V + 144d c018 X20 IV + 17aa 20ca ThinkPad T61 + 0811 R5C811 + 0822 R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter + 1014 0556 ThinkPad X60s / Z60t + 1014 0598 ThinkPad Z60m + 1025 0121 Aspire 5920G + 1028 0188 Inspiron 6000 laptop + 1028 01a2 Inspiron 9200 + 1028 01d7 XPS M1210 + 1028 01f3 Inspiron 1420 + 103c 03b5 Presario V3242AU + 103c 30b7 Presario V6133CL + 103c 30c1 Compaq 6910p + 1043 1237 A6J-Q008 + 1043 1967 ASUS V6800V + 10f7 8338 Panasonic CF-Y5 laptop + 144d c018 X20 IV + 17aa 201d ThinkPad X60s + 17aa 20c7 ThinkPad T61 + 0832 R5C832 IEEE 1394 Controller + 1025 0121 Aspire 5920G + 1028 01d7 XPS M1210 + 1028 01f3 Inspiron 1420 + 103c 30b5 Presario V3242AU + 103c 30b7 Presario V6133CL + 103c 30c1 Compaq 6910p + 0841 R5C841 CardBus/SD/SDIO/MMC/MS/MSPro/xD/IEEE1394 + 0843 R5C843 MMC Host Controller + 1025 0121 Aspire 5920G + 1028 01d7 XPS M1210 + 1028 01f3 Inspiron 1420 + 1028 01f5 Dell Inspiron 1501 + 103c 03b5 Presario V3242AU + 103c 30b7 Presario V6133CL + 1183 0843 Alienware Aurora m9700 + 0852 xD-Picture Card Controller + 1025 0121 Aspire 5920G + 1028 01f3 Inspiron 1420 + 103c 30b5 Presario V3242AU + 103c 30b7 Presario V6133CL + 1043 1967 V6800V + 1180 0852 Pavilion 2410us + 1324 10cf P7120 +1181 Telmatics International +1183 Fujikura Ltd +1184 Forks Inc +1185 Dataworld International Ltd +1186 D-Link System Inc + 0100 DC21041 + 1002 DL10050 Sundance Ethernet + 1186 1002 DFE-550TX/FX + 1186 1012 DFE-580TX + 1025 AirPlus Xtreme G DWL-G650 Adapter + 1026 AirXpert DWL-AG650 Wireless Cardbus Adapter + 1043 AirXpert DWL-AG650 Wireless Cardbus Adapter + 1300 RTL8139 Ethernet + 1186 1300 DFE-538TX 10/100 Ethernet Adapter + 1186 1301 DFE-530TX+ 10/100 Ethernet Adapter + 1186 1303 DFE-528TX 10/100 Fast Ethernet PCI Adapter + 1340 DFE-690TXD CardBus PC Card + 1405 DFE-520TX Fast Ethernet PCI Adapter + 1540 DFE-680TX + 1541 DFE-680TXD CardBus PC Card + 1561 DRP-32TXD Cardbus PC Card + 2027 AirPlus Xtreme G DWL-G520 Adapter + 3203 AirPlus Xtreme G DWL-G520 Adapter + 3300 DWL-510 2.4GHz Wireless PCI Adapter + 3a03 AirPro DWL-A650 Wireless Cardbus Adapter(rev.B) + 3a04 AirPro DWL-AB650 Multimode Wireless Cardbus Adapter + 3a05 AirPro DWL-AB520 Multimode Wireless PCI Adapter + 3a07 AirXpert DWL-AG650 Wireless Cardbus Adapter + 3a08 AirXpert DWL-AG520 Wireless PCI Adapter + 3a10 AirXpert DWL-AG650 Wireless Cardbus Adapter(rev.B) + 3a11 AirXpert DWL-AG520 Wireless PCI Adapter(rev.B) + 3a12 AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C) + 3a13 AirPlus DWL-G520 Wireless PCI Adapter(rev.B) + 3a14 AirPremier DWL-AG530 Wireless PCI Adapter + 3a63 AirXpert DWL-AG660 Wireless Cardbus Adapter + 3a70 DWA-556 Xtreme N PCI Express Desktop Adapter + 3c00 D-link DWL-G650X + 3c09 AirPlus G DWL-G510 + 4000 DL2000-based Gigabit Ethernet + 4001 DGE-550SX PCI-X Gigabit Ethernet Adapter + 4300 DGE-528T Gigabit Ethernet Adapter +# There are at least 3 revisions of this adapter; 4800 is board revision A1 as far as I can tell, revision B1 is 4c00. + 4800 DGE-530T Gigabit Ethernet Adapter (rev 11) + 4b00 DGE-560T PCI Express Gigabit Ethernet Adapter + 4b01 DGE-530T Gigabit Ethernet Adapter (rev 11) + 4b02 DGE-560SX PCI Express Gigabit Ethernet Adapter + 4b03 DGE-550T Gigabit Ethernet Adapter V.B1 + 4c00 Gigabit Ethernet Adapter + 1186 4c00 DGE-530T Gigabit Ethernet Adapter + 8400 D-Link DWL-650+ CardBus PC Card +1187 Advanced Technology Laboratories, Inc. +1188 Shima Seiki Manufacturing Ltd. +1189 Matsushita Electronics Co Ltd +118a Hilevel Technology +118b Hypertec Pty Limited +118c Corollary, Inc + 0014 PCIB [C-bus II to PCI bus host bridge chip] + 1117 Intel 8-way XEON Profusion Chipset [Cache Coherency Filter] +118d BitFlow Inc + 0001 Raptor-PCI framegrabber + 0012 Model 12 Road Runner Frame Grabber + 0014 Model 14 Road Runner Frame Grabber + 0024 Model 24 Road Runner Frame Grabber + 0044 Model 44 Road Runner Frame Grabber + 0112 Model 12 Road Runner Frame Grabber + 0114 Model 14 Road Runner Frame Grabber + 0124 Model 24 Road Runner Frame Grabber + 0144 Model 44 Road Runner Frame Grabber + 0212 Model 12 Road Runner Frame Grabber + 0214 Model 14 Road Runner Frame Grabber + 0224 Model 24 Road Runner Frame Grabber + 0244 Model 44 Road Runner Frame Grabber + 0312 Model 12 Road Runner Frame Grabber + 0314 Model 14 Road Runner Frame Grabber + 0324 Model 24 Road Runner Frame Grabber + 0344 Model 44 Road Runner Frame Grabber +118e Hermstedt GmbH +118f Green Logic +1190 Tripace + c731 TP-910/920/940 PCI Ultra(Wide) SCSI Adapter +1191 Artop Electronic Corp + 0003 SCSI Cache Host Adapter + 0004 ATP8400 + 0005 ATP850UF + 0006 ATP860 NO-BIOS + 0007 ATP860 + 0008 ATP865 NO-ROM + 0009 ATP865 + 000a ATP867-A + 000b ATP867-B + 000d ATP8620 + 000e ATP8620 + 8002 AEC6710 SCSI-2 Host Adapter + 8010 AEC6712UW SCSI + 8020 AEC6712U SCSI + 8030 AEC6712S SCSI + 8040 AEC6712D SCSI + 8050 AEC6712SUW SCSI + 8060 AEC6712 SCSI + 8080 AEC67160 SCSI + 8081 AEC67160S SCSI + 808a AEC67162 2-ch. LVD SCSI +1192 Densan Company Ltd +1193 Zeitnet Inc. + 0001 1221 + 0002 1225 +1194 Toucan Technology +1195 Ratoc System Inc +1196 Hytec Electronics Ltd +1197 Gage Applied Sciences, Inc. + 010c CompuScope 82G 8bit 2GS/s Analog Input Card +1198 Lambda Systems Inc +1199 Attachmate Corporation +119a Mind Share, Inc. +119b Omega Micro Inc. + 1221 82C092G +119c Information Technology Inst. +119d Bug, Inc. Sapporo Japan +119e Fujitsu Microelectronics Ltd. + 0001 FireStream 155 + 0003 FireStream 50 +119f Bull HN Information Systems +11a0 Convex Computer Corporation +11a1 Hamamatsu Photonics K.K. +11a2 Sierra Research and Technology +11a3 Deuretzbacher GmbH & Co. Eng. KG +11a4 Barco Graphics NV +11a5 Microunity Systems Eng. Inc +11a6 Pure Data Ltd. +11a7 Power Computing Corp. +11a8 Systech Corp. +11a9 InnoSys Inc. + 4240 AMCC S933Q Intelligent Serial Card +11aa Actel +# Nee Galileo Technology, Inc. +11ab Marvell Technology Group Ltd. + 0146 GT-64010/64010A System Controller + 0f53 88E6318 Link Street network controller + 11ab MV88SE614x SATA II PCI-E controller + 138f W8300 802.11 Adapter (rev 07) + 1fa6 Marvell W8300 802.11 Adapter + 1fa7 88W8310 and 88W8000G [Libertas] 802.11g client chipset + 1faa 88w8335 [Libertas] 802.11b/g Wireless + 1385 4e00 WG511v2 54 Mbps Wireless PC Card + 1385 6b00 WG311v3 802.11g Wireless PCI Adapter + 2a01 88W8335 [Libertas] 802.11b/g Wireless + 2a02 88W8361 [TopDog] 802.11n Wireless + 4101 OLPC Cafe Controller Secure Digital Controller + 4320 88E8001 Gigabit Ethernet Controller + 1019 0f38 Marvell 88E8001 Gigabit Ethernet Controller (ECS) + 1019 8001 Marvell 88E8001 Gigabit Ethernet Controller (ECS) + 1043 173c Marvell 88E8001 Gigabit Ethernet Controller (Asus) + 1043 811a Marvell 88E8001 Gigabit Ethernet Controller (Asus) + 105b 0c19 Marvell 88E8001 Gigabit Ethernet Controller (Foxconn) + 10b8 b452 EZ Card 1000 (SMC9452TXV.2) + 11ab 0121 Marvell RDK-8001 + 11ab 0321 Marvell RDK-8003 + 11ab 1021 Marvell RDK-8010 + 11ab 4320 Marvell Yukon Gigabit Ethernet 10/100/1000Baset-T Constroller (Asus) + 11ab 5021 Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (64 bit) + 11ab 9521 Marvell Yukon Gigabit Ethernet 10/100/1000Base-T Controller (32 bit) + 1458 e000 Marvell 88E8001 Gigabit Ethernet Controller (Gigabyte) + 147b 1406 Marvell 88E8001 Gigabit Ethernet Controller (Abit) + 15d4 0047 Marvell 88E8001 Gigabit Ethernet Controller (Iwill) + 1695 9025 Marvell 88E8001 Gigabit Ethernet Controller (Epox) + 17f2 1c03 Marvell 88E8001 Gigabit Ethernet Controller (Albatron) + 270f 2803 Marvell 88E8001 Gigabit Ethernet Controller (Chaintech) + 4340 88E8021 PCI-X IPMI Gigabit Ethernet Controller + 4341 88E8022 PCI-X IPMI Gigabit Ethernet Controller + 4342 88E8061 PCI-E IPMI Gigabit Ethernet Controller + 4343 88E8062 PCI-E IPMI Gigabit Ethernet Controller + 4344 88E8021 PCI-X IPMI Gigabit Ethernet Controller + 4345 88E8022 PCI-X IPMI Gigabit Ethernet Controller + 4346 88E8061 PCI-E IPMI Gigabit Ethernet Controller + 4347 88E8062 PCI-E IPMI Gigabit Ethernet Controller + 4c53 10d0 Telum ASLP10 PrAMC Gigabit Ethernet + 4350 88E8035 PCI-E Fast Ethernet Controller + 1179 0001 Marvell 88E8035 Fast Ethernet Controller (Toshiba) + 11ab 3521 Marvell RDK-8035 + 1854 000d Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 000e Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 000f Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 0011 Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 0012 Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 0016 Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 0017 Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 0018 Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 0019 Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 001c Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 001e Marvell 88E8035 Fast Ethernet Controller (LGE) + 1854 0020 Marvell 88E8035 Fast Ethernet Controller (LGE) + 4351 88E8036 PCI-E Fast Ethernet Controller + 107b 4009 Marvell 88E8036 Fast Ethernet Controller (Wistron) + 10f7 8338 Marvell 88E8036 Fast Ethernet Controller (Panasonic) + 1179 0001 Marvell 88E8036 Fast Ethernet Controller (Toshiba) + 1179 ff00 Marvell 88E8036 Fast Ethernet Controller (Compal) + 1179 ff10 Marvell 88E8036 Fast Ethernet Controller (Inventec) + 11ab 3621 Marvell RDK-8036 + 13d1 ac12 Abocom EFE3K - 10/100 Ethernet Expresscard + 161f 203d Marvell 88E8036 Fast Ethernet Controller (Arima) + 1854 000d Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 000e Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 000f Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 0011 Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 0012 Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 0016 Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 0017 Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 0018 Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 0019 Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 001c Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 001e Marvell 88E8036 Fast Ethernet Controller (LGE) + 1854 0020 Marvell 88E8036 Fast Ethernet Controller (LGE) + 4352 88E8038 PCI-E Fast Ethernet Controller + 4353 88E8039 PCI-E Fast Ethernet Controller + 4354 88E8040 PCI-E Fast Ethernet Controller + 4355 88E8040T PCI-E Fast Ethernet Controller + 4356 88EC033 Ethernet Controller + 435a 88E8048 PCI-E Fast Ethernet Controller + 4360 88E8052 PCI-E ASF Gigabit Ethernet Controller + 1043 8134 Marvell 88E8052 Gigabit Ethernet Controller (Asus) + 107b 4009 Marvell 88E8052 Gigabit Ethernet Controller (Wistron) + 11ab 5221 Marvell RDK-8052 + 1458 e000 Marvell 88E8052 Gigabit Ethernet Controller (Gigabyte) + 1462 052c Marvell 88E8052 Gigabit Ethernet Controller (MSI) + 1849 8052 Marvell 88E8052 Gigabit Ethernet Controller (ASRock) + a0a0 0509 Marvell 88E8052 Gigabit Ethernet Controller (Aopen) + 4361 88E8050 PCI-E ASF Gigabit Ethernet Controller + 107b 3015 Marvell 88E8050 Gigabit Ethernet Controller (Gateway) + 11ab 5021 Marvell 88E8050 Gigabit Ethernet Controller (Intel) + 8086 3063 D925XCVLK mainboard + 8086 3439 Marvell 88E8050 Gigabit Ethernet Controller (Intel) + 4362 88E8053 PCI-E Gigabit Ethernet Controller + 103c 2a0d Marvell 88E8053 Gigabit Ethernet Controller (Asus) + 1043 8142 Marvell 88E8053 Gigabit Ethernet controller PCIe (Asus) + 109f 3197 Marvell 88E8053 Gigabit Ethernet Controller (Trigem) + 10f7 8338 Marvell 88E8053 Gigabit Ethernet Controller (Panasonic) + 10fd a430 Marvell 88E8053 Gigabit Ethernet Controller (SOYO) + 1179 0001 Marvell 88E8053 Gigabit Ethernet Controller (Toshiba) + 1179 ff00 Marvell 88E8053 Gigabit Ethernet Controller (Compal) + 1179 ff10 Marvell 88E8053 Gigabit Ethernet Controller (Inventec) + 11ab 5321 Marvell RDK-8053 + 1297 c240 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) + 1297 c241 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) + 1297 c242 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) + 1297 c243 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) + 1297 c244 Marvell 88E8053 Gigabit Ethernet Controller (Shuttle) + 13d1 ac11 EGE5K - Giga Ethernet Expresscard + 1458 e000 Marvell 88E8053 Gigabit Ethernet Controller (Gigabyte) + 1462 058c Marvell 88E8053 Gigabit Ethernet Controller (MSI) + 14c0 0012 Marvell 88E8053 Gigabit Ethernet Controller (Compal) + 1558 04a0 Marvell 88E8053 Gigabit Ethernet Controller (Clevo) + 15bd 1003 Marvell 88E8053 Gigabit Ethernet Controller (DFI) + 161f 203c Marvell 88E8053 Gigabit Ethernet Controller (Arima) + 161f 203d Marvell 88E8053 Gigabit Ethernet Controller (Arima) + 1695 9029 Marvell 88E8053 Gigabit Ethernet Controller (Epox) + 17f2 2c08 Marvell 88E8053 Gigabit Ethernet Controller (Albatron) + 17ff 0585 Marvell 88E8053 Gigabit Ethernet Controller (Quanta) + 1849 8053 Marvell 88E8053 Gigabit Ethernet Controller (ASRock) + 1854 000b Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 000c Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 0010 Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 0013 Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 0014 Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 0015 Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 001a Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 001b Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 001d Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 001f Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 0021 Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 1854 0022 Marvell 88E8053 Gigabit Ethernet Controller (LGE) + 270f 2801 Marvell 88E8053 Gigabit Ethernet Controller (Chaintech) + a0a0 0506 Marvell 88E8053 Gigabit Ethernet Controller (Aopen) + 4363 88E8055 PCI-E Gigabit Ethernet Controller + 4364 88E8056 PCI-E Gigabit Ethernet Controller + 4365 88E8070 based Ethernet Controller + 4366 88EC036 PCI-E Gigabit Ethernet Controller + 4367 88EC032 Ethernet Controller + 4368 88EC034 Ethernet Controller + 4369 88EC042 Ethernet Controller + 436a Marvell Yukon 88E8058 PCI-E Gigabit Ethernet Controller + 436b 88E8071 PCI-E Gigabit Ethernet Controller + 4370 88E8075 PCI-E Gigabit Ethernet Controller + 4611 GT-64115 System Controller + 4620 GT-64120/64120A/64121A System Controller + 4801 GT-48001 + 5005 Belkin F5D5005 Gigabit Desktop Network PCI Card + 5040 MV88SX5040 4-port SATA I PCI-X Controller + 5041 MV88SX5041 4-port SATA I PCI-X Controller + 5080 MV88SX5080 8-port SATA I PCI-X Controller + 5081 MV88SX5081 8-port SATA I PCI-X Controller + 5181 88f5181 [Orion-1] ARM SoC + 5182 88f5182 [Orion-NAS] ARM SoC + 5281 88f5281 [Orion-2] ARM SoC + 6041 MV88SX6041 4-port SATA II PCI-X Controller + 6042 88SX6042 PCI-X 4-Port SATA-II + 6081 MV88SX6081 8-port SATA II PCI-X Controller + 6101 88SE6101 single-port PATA133 interface + 6102 88SE6102 single-port PATA133(IDE) interface + 6111 88SE6111 1-port PATA133(IDE) and 1-port SATA II Controllers + 6121 88SE6121 SATA II Controller + 6141 88SE614x SATA II PCI-E controller + 6145 88SE6145 SATA II PCI-E controller + 6450 64560 System Controller + 6460 MV64360/64361/64362 System Controller + 6480 MV64460/64461/64462 System Controller + 1775 c200 C2K CompactPCI single board computer + 6485 MV64460/64461/64462 System Controller, Revision B + 7042 88SX7042 PCI-e 4-port SATA-II + 16b8 434b Tempo SATA E4P + f003 GT-64010 Primary Image Piranha Image Generator +11ac Canon Information Systems Research Aust. +11ad Lite-On Communications Inc + 0002 LNE100TX + 11ad 0002 LNE100TX + 11ad 0003 LNE100TX + 11ad f003 LNE100TX + 11ad ffff LNE100TX + 1385 f004 FA310TX + 2646 f002 KNE110TX EtheRx Fast Ethernet + c115 LNE100TX [Linksys EtherFast 10/100] + 11ad c001 LNE100TX [ver 2.0] + 2646 000b KNE111TX +11ae Aztech System Ltd +11af Avid Technology Inc. + 0001 Cinema + ee40 Digidesign Audiomedia III +11b0 V3 Semiconductor Inc. + 0002 V300PSC + 0292 V292PBC [Am29030/40 Bridge] + 0960 V96xPBC + c960 V96DPC +11b1 Apricot Computers +11b2 Eastman Kodak +11b3 Barr Systems Inc. +11b4 Leitch Technology International +11b5 Radstone Technology Plc +11b6 United Video Corp +11b7 Motorola +11b8 XPoint Technologies, Inc + 0001 Quad PeerMaster +11b9 Pathlight Technology Inc. + c0ed SSA Controller +11ba Videotron Corp +11bb Pyramid Technology +11bc Network Peripherals Inc + 0001 NP-PCI +11bd Pinnacle Systems Inc. + 002e PCTV 40i + 0040 Royal TS Function 1 + 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Tuner 1 + 11bd 0045 PCTV Dual Sat Pro PCI 4000i Tuner 1 + 0041 RoyalTS Function 2 + 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Tuner 2 + 11bd 0045 PCTV Dual Sat Pro PCI 4000i Tuner 2 + 0042 Royal TS Function 3 + 11bd 0044 PCTV 2000i Dual DVB-T Pro PCI Common + 11bd 0045 PCTV Dual Sat Pro PCI 4000i Common + 0051 PCTV HD 800i + bede AV/DV Studio Capture Card +11be International Microcircuits Inc +11bf Astrodesign, Inc. +11c0 Hewlett Packard +# Nee Lucent Microelectronics +11c1 Agere Systems + 0440 56k WinModem + 1033 8015 LT WinModem 56k Data+Fax+Voice+Dsvd + 1033 8047 LT WinModem 56k Data+Fax+Voice+Dsvd + 1033 804f LT WinModem 56k Data+Fax+Voice+Dsvd + 10cf 102c LB LT Modem V.90 56k + 10cf 104a BIBLO LT Modem 56k + 10cf 105f LB2 LT Modem V.90 56k + 1179 0001 Internal V.90 Modem + 11c1 0440 LT WinModem 56k Data+Fax+Voice+Dsvd + 122d 4101 MDP7800-U Modem + 122d 4102 MDP7800SP-U Modem + 13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd + 13e0 0440 LT WinModem 56k Data+Fax+Voice+Dsvd + 13e0 0441 LT WinModem 56k Data+Fax+Voice+Dsvd + 13e0 0450 LT WinModem 56k Data+Fax+Voice+Dsvd + 13e0 f100 LT WinModem 56k Data+Fax+Voice+Dsvd + 13e0 f101 LT WinModem 56k Data+Fax+Voice+Dsvd + 144d 2101 LT56PV Modem + 149f 0440 LT WinModem 56k Data+Fax+Voice+Dsvd + 0441 56k WinModem + 1033 804d LT WinModem 56k Data+Fax + 1033 8065 LT WinModem 56k Data+Fax + 1092 0440 Supra 56i + 1179 0001 Internal V.90 Modem + 11c1 0440 LT WinModem 56k Data+Fax + 11c1 0441 LT WinModem 56k Data+Fax + 122d 4100 MDP7800-U Modem + 13e0 0040 LT WinModem 56k Data+Fax + 13e0 0100 LT WinModem 56k Data+Fax + 13e0 0410 LT WinModem 56k Data+Fax + 13e0 0420 TelePath Internet 56k WinModem + 13e0 0440 LT WinModem 56k Data+Fax + 13e0 0443 LT WinModem 56k Data+Fax + 13e0 f102 LT WinModem 56k Data+Fax + 1416 9804 CommWave 56k Modem + 141d 0440 LT WinModem 56k Data+Fax + 144f 0441 Lucent 56k V.90 DF Modem + 144f 0449 Lucent 56k V.90 DF Modem + 144f 110d Lucent Win Modem + 1468 0441 Presario 56k V.90 DF Modem + 1668 0440 Lucent Win Modem + 0442 56k WinModem + 11c1 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 11c1 0442 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 13e0 0412 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 13e0 0442 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 13fc 2471 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 144d 2104 LT56PT Modem + 144f 1104 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 149f 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 1668 0440 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 0443 LT WinModem + 0444 LT WinModem + 0445 LT WinModem + 8086 2203 PRO/100+ MiniPCI (probably an Ambit U98.003.C.00 combo card) + 8086 2204 PRO/100+ MiniPCI on Armada E500 + 0446 LT WinModem + 0447 LT WinModem + 0448 WinModem 56k + 1014 0131 Lucent Win Modem + 1033 8066 LT WinModem 56k Data+Fax+Voice+Dsvd + 13e0 0030 56k Voice Modem + 13e0 0040 LT WinModem 56k Data+Fax+Voice+Dsvd +# Actiontech eth+modem card as used by Dell &c. + 1668 2400 LT WinModem 56k (MiniPCI Ethernet+Modem) + 0449 WinModem 56k + 0e11 b14d 56k V.90 Modem + 13e0 0020 LT WinModem 56k Data+Fax + 13e0 0041 TelePath Internet 56k WinModem + 1436 0440 Lucent Win Modem + 144f 0449 Lucent 56k V.90 DFi Modem + 1468 0410 IBM ThinkPad T23 + 1468 0440 Lucent Win Modem + 1468 0449 Presario 56k V.90 DFi Modem + 044a F-1156IV WinModem (V90, 56KFlex) + 10cf 1072 LB Global LT Modem + 13e0 0012 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 13e0 0042 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 144f 1005 LT WinModem 56k Data+Fax+Voice+VoiceView+Dsvd + 044b LT WinModem + 044c LT WinModem + 044d LT WinModem + 044e LT WinModem + 044f V90 WildWire Modem + 0450 LT WinModem + 1033 80a8 Versa Note Vxi + 144f 4005 Magnia SG20 + 1468 0450 Evo N600c + 0451 LT WinModem + 0452 LT WinModem + 0453 LT WinModem + 0454 LT WinModem + 0455 LT WinModem + 0456 LT WinModem + 0457 LT WinModem + 0458 LT WinModem + 0459 LT WinModem + 045a LT WinModem + 045c LT WinModem + 0461 V90 WildWire Modem + 0462 V90 WildWire Modem + 0480 Venus Modem (V90, 56KFlex) + 048c V.92 56K WinModem +# InPorte Home Internal 56k Modem/fax/answering machine/SMS Features + 048f V.92 56k WinModem + 0620 Lucent V.92 Data/Fax Modem + 1040 HDA softmodem + 2600 StarPro26XX family (SP2601, SP2603, SP2612) DSP + 5400 OR3TP12 FPSC + 5656 Agere Systems Venus Modem + 5801 USB + 5802 USS-312 USB Controller + 5803 USS-344S USB Controller + 5811 FW322/323 + 1043 8294 IEEE 1394a Firewire Controller + 8086 524c D865PERL mainboard + dead 0800 FireWire Host Bus Adapter + 5901 FW643 PCI Express1394b Controller (PHY/Link) + 1443 0643 FireBoard800-e V.2 + 1546 0643 FWB-PCIE1X20 + 8110 T8110 H.100/H.110 TDM switch + 12d9 000c E1/T1 PMXc cPCI carrier card + ab10 WL60010 Wireless LAN MAC + ab11 WL60040 Multimode Wireles LAN MAC + 11c1 ab12 WaveLAN 11abg Cardbus card (Model 1102) + 11c1 ab13 WaveLAN 11abg MiniPCI card (Model 0512) + 11c1 ab15 WaveLAN 11abg Cardbus card (Model 1106) + 11c1 ab16 WaveLAN 11abg MiniPCI card (Model 0516) + ab20 ORiNOCO PCI Adapter + ab21 Agere Wireless PCI Adapter + ab30 Hermes2 Mini-PCI WaveLAN a/b/g + 14cd 2012 Hermes2 Mini-PCI WaveLAN a/b/g + ed00 ET-131x PCI-E Ethernet Controller + ed01 ET-131x PCI-E Ethernet Controller +11c2 Sand Microelectronics +11c3 NEC Corporation +11c4 Document Technologies, Inc +11c5 Shiva Corporation +11c6 Dainippon Screen Mfg. Co. Ltd +11c7 D.C.M. Data Systems +11c8 Dolphin Interconnect Solutions AS + 0658 PSB32 SCI-Adapter D31x + d665 PSB64 SCI-Adapter D32x + d667 PSB66 SCI-Adapter D33x +11c9 Magma + 0010 16-line serial port w/- DMA + 0011 4-line serial port w/- DMA +11ca LSI Systems, Inc +11cb Specialix Research Ltd. + 2000 PCI_9050 + 11cb 0200 SX + 11cb b008 I/O8+ + 4000 SUPI_1 + 8000 T225 +11cc Michels & Kleberhoff Computer GmbH +11cd HAL Computer Systems, Inc. +11ce Netaccess +11cf Pioneer Electronic Corporation +11d0 Lockheed Martin Federal Systems-Manassas +11d1 Auravision + 01f7 VxP524 + 01f9 VxP951 +11d2 Intercom Inc. +11d3 Trancell Systems Inc +11d4 Analog Devices + 0078 AD1986HD sound chip + 1535 Blackfin BF535 processor + 1805 SM56 PCI modem + 1889 AD1889 sound chip + 1981 AD1981HD sound chip + 1983 AD1983HD sound chip + 1984 AD1984HD sound chip + 17aa 20bb T61p Notebook + 1986 AD1986A sound chip + 11d4 1986 Lenovo N100 B9G + 198b AD1988B Sound Chip + 5340 AD1881 sound chip +11d5 Ikon Corporation + 0115 10115 + 0117 10117 +11d6 Tekelec Telecom +11d7 Trenton Technology, Inc. +11d8 Image Technologies Development +11d9 TEC Corporation +11da Novell +11db Sega Enterprises Ltd +11dc Questra Corporation +11dd Crosfield Electronics Limited +11de Zoran Corporation + 6017 miroVIDEO DC30 + 6057 ZR36057PQC Video cutting chipset + 1031 7efe DC10 Plus + 1031 fc00 MiroVIDEO DC50, Motion JPEG Capture/CODEC Board + 12f8 8a02 Tekram Video Kit + 13ca 4231 JPEG/TV Card + 6120 ZR36120 + 1328 f001 Cinemaster C DVD Decoder + 13c2 0000 MediaFocus Satellite TV Card + 1de1 9fff Video Kit C210 +11df New Wave PDG +11e0 Cray Communications A/S +11e1 GEC Plessey Semi Inc. +11e2 Samsung Information Systems America +11e3 Quicklogic Corporation + 0001 COM-ON-AIR Dosch&Amand DECT + 0560 QL5064 Companion Design Demo Board + 5030 PC Watchdog + 8417 QL5064 [QuickPCI] PCI v2.2 bridge for SMT417 Dual TMS320C6416T PMC Module +11e4 Second Wave Inc +11e5 IIX Consulting +11e6 Mitsui-Zosen System Research +11e7 Toshiba America, Elec. Company +11e8 Digital Processing Systems Inc. +11e9 Highwater Designs Ltd. +11ea Elsag Bailey +11eb Formation Inc. +11ec Coreco Inc + 000d Oculus-F/64P + 1800 Cobra/C6 +11ed Mediamatics +11ee Dome Imaging Systems Inc +11ef Nicolet Technologies B.V. +11f0 Compu-Shack + 4231 FDDI + 4232 FASTline UTP Quattro + 4233 FASTline FO + 4234 FASTline UTP + 4235 FASTline-II UTP + 4236 FASTline-II FO + 4731 GIGAline +11f1 Symbios Logic Inc +11f2 Picture Tel Japan K.K. +11f3 Keithley Metrabyte + 0011 KPCI-PIO24 +11f4 Kinetic Systems Corporation + 2915 CAMAC controller +11f5 Computing Devices International +11f6 Compex + 0112 ENet100VG4 + 0113 FreedomLine 100 + 1401 ReadyLink 2000 + 2011 RL100-ATX 10/100 + 11f6 2011 RL100-ATX + 2201 ReadyLink 100TX (Winbond W89C840) + 11f6 2011 ReadyLink 100TX + 9881 RL100TX Fast Ethernet +11f7 Scientific Atlanta +11f8 PMC-Sierra Inc. + 7364 PM7364 [FREEDM - 32 Frame Engine & Datalink Mgr] + 7375 PM7375 [LASAR-155 ATM SAR] + 7384 PM7384 [FREEDM - 84P672 Frm Engine & Datalink Mgr] + 8000 PM8000 [SPC - SAS Protocol Controller] +11f9 I-Cube Inc +11fa Kasan Electronics Company, Ltd. +11fb Datel Inc +11fc Silicon Magic +11fd High Street Consultants +11fe Comtrol Corporation + 0001 RocketPort 32 port w/external I/F + 0002 RocketPort 8 port w/external I/F + 0003 RocketPort 16 port w/external I/F + 0004 RocketPort 4 port w/quad cable + 0005 RocketPort 8 port w/octa cable + 0006 RocketPort 8 port w/RJ11 connectors + 0007 RocketPort 4 port w/RJ11 connectors + 0008 RocketPort 8 port w/ DB78 SNI (Siemens) connector + 0009 RocketPort 16 port w/ DB78 SNI (Siemens) connector + 000a RocketPort Plus 4 port + 000b RocketPort Plus 8 port + 000c RocketModem 6 port + 000d RocketModem 4-port + 000e RocketPort Plus 2 port RS232 + 000f RocketPort Plus 2 port RS422 + 0040 RocketPort Infinity Octa, 8port, RJ45 + 0041 RocketPort Infinity 32port, External Interface + 0042 RocketPort Infinity 8port, External Interface + 0043 RocketPort Infinity 16port, External Interface + 0044 RocketPort Infinity Quad, 4port, DB + 0045 RocketPort Infinity Octa, 8port, DB + 0047 RocketPort Infinity 4port, RJ45 + 004f RocketPort Infinity 2port, SMPTE + 0052 RocketPort Infinity Octa, 8port, SMPTE + 0801 RocketPort UPCI 32 port w/external I/F + 0802 RocketPort UPCI 8 port w/external I/F + 0803 RocketPort UPCI 16 port w/external I/F + 0805 RocketPort UPCI 8 port w/octa cable + 080c RocketModem III 8 port + 080d RocketModem III 4 port + 0811 RocketPort UPCI Plus 8 port RS232 + 0812 RocketPort UPCI Plus 8 port RS422 + 0903 RocketPort Compact PCI 16 port w/external I/F + 8015 RocketPort 4-port UART 16954 +11ff Scion Corporation + 0003 AG-5 +1200 CSS Corporation +1201 Vista Controls Corp +1202 Network General Corp. + 4300 Gigabit Ethernet Adapter + 1202 9841 SK-9841 LX + 1202 9842 SK-9841 LX dual link + 1202 9843 SK-9843 SX + 1202 9844 SK-9843 SX dual link +1203 Bayer Corporation, Agfa Division +1204 Lattice Semiconductor Corporation +1205 Array Corporation +1206 Amdahl Corporation +1208 Parsytec GmbH + 4853 HS-Link Device +1209 SCI Systems Inc +120a Synaptel +120b Adaptive Solutions +120c Technical Corp. +120d Compression Labs, Inc. +120e Cyclades Corporation + 0100 Cyclom-Y below first megabyte + 0101 Cyclom-Y above first megabyte + 0102 Cyclom-4Y below first megabyte + 0103 Cyclom-4Y above first megabyte + 0104 Cyclom-8Y below first megabyte + 0105 Cyclom-8Y above first megabyte + 0200 Cyclades-Z below first megabyte + 0201 Cyclades-Z above first megabyte + 0300 PC300/RSV or /X21 (2 ports) + 0301 PC300/RSV or /X21 (1 port) + 0310 PC300/TE (2 ports) + 0311 PC300/TE (1 port) + 0320 PC300/TE-M (2 ports) + 0321 PC300/TE-M (1 port) + 0400 PC400 +120f Essential Communications + 0001 Roadrunner serial HIPPI +1210 Hyperparallel Technologies +1211 Braintech Inc +1212 Kingston Technology Corp. +1213 Applied Intelligent Systems, Inc. +1214 Performance Technologies, Inc. +1215 Interware Co., Ltd +1216 Purup Prepress A/S +1217 O2 Micro, Inc. + 00f7 Firewire (IEEE 1394) + 6729 OZ6729 + 673a OZ6730 + 6832 OZ6832/6833 CardBus Controller + 6836 OZ6836/6860 CardBus Controller + 6872 OZ6812 CardBus Controller + 6925 OZ6922 CardBus Controller + 6933 OZ6933/711E1 CardBus/SmartCardBus Controller + 1025 1016 Travelmate 612 TX + 6972 OZ601/6912/711E0 CardBus/SmartCardBus Controller + 1014 020c ThinkPad R30 + 1179 0001 Magnia Z310 + 7110 OZ711Mx 4-in-1 MemoryCardBus Accelerator + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 1734 106c Amilo A1645 + 7112 OZ711EC1/M1 SmartCardBus/MemoryCardBus Controller + 7113 OZ711EC1 SmartCardBus Controller + 1025 0035 TravelMate 660 + 7114 OZ711M1/MC1 4-in-1 MemoryCardBus Controller + 7120 Integrated MMC/SD Controller + 7130 Integrated MS/xD Controller + 7134 OZ711MP1/MS1 MemoryCardBus Controller + 7135 Cardbus bridge + 7136 OZ711SP1 Memory CardBus Controller + 71e2 OZ711E2 SmartCardBus Controller + 7212 OZ711M2 4-in-1 MemoryCardBus Controller + 7213 OZ6933E CardBus Controller + 7223 OZ711M3/MC3 4-in-1 MemoryCardBus Controller + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 10cf 11c4 Lifebook P5020D Laptop + 7233 OZ711MP3/MS3 4-in-1 MemoryCardBus Controller +1218 Hybricon Corp. +1219 First Virtual Corporation +121a 3Dfx Interactive, Inc. + 0001 Voodoo + 0002 Voodoo 2 + 0003 Voodoo Banshee + 1092 0003 Monster Fusion + 1092 4000 Monster Fusion + 1092 4002 Monster Fusion + 1092 4801 Monster Fusion AGP + 1092 4803 Monster Fusion AGP + 1092 8030 Monster Fusion + 1092 8035 Monster Fusion AGP + 10b0 0001 Dragon 4000 + 1102 1017 3D Blaster Banshee PCI (CT6760) + 1102 1018 3D Blaster Banshee VE + 121a 0001 Voodoo Banshee AGP + 121a 0003 Voodoo Banshee AGP SGRAM + 121a 0004 Voodoo Banshee + 139c 0016 Raven + 139c 0017 Raven + 14af 0002 Maxi Gamer Phoenix + 0004 Voodoo Banshee [Velocity 100] + 0005 Voodoo 3 + 121a 0004 Voodoo3 AGP + 121a 0030 Voodoo3 AGP + 121a 0031 Voodoo3 AGP + 121a 0034 Voodoo3 AGP + 121a 0036 Voodoo3 2000 PCI + 121a 0037 Voodoo3 AGP + 121a 0038 Voodoo3 AGP + 121a 003a Voodoo3 AGP + 121a 0044 Voodoo3 + 121a 004b Velocity 100 + 121a 004c Velocity 200 + 121a 004d Voodoo3 AGP + 121a 004e Voodoo3 AGP + 121a 0051 Voodoo3 AGP + 121a 0052 Voodoo3 AGP + 121a 0057 Voodoo3 3000 PCI + 121a 0060 Voodoo3 3500 TV (NTSC) + 121a 0061 Voodoo3 3500 TV (PAL) + 121a 0062 Voodoo3 3500 TV (SECAM) + 0009 Voodoo 4 / Voodoo 5 + 121a 0003 Voodoo5 PCI 5500 + 121a 0009 Voodoo5 AGP 5500/6000 + 0057 Voodoo 3/3000 [Avenger] +121b Advanced Telecommunications Modules +121c Nippon Texaco., Ltd +121d Lippert Automationstechnik GmbH +121e CSPI + 0201 Myrinet 2000 Scalable Cluster Interconnect +121f Arcus Technology, Inc. +1220 Ariel Corporation + 1220 AMCC 5933 TMS320C80 DSP/Imaging board +1221 Contec Co., Ltd + 9172 PO-64L(PCI)H [Isolated Digital Output Board for PCI] + 91a2 PO-32L(PCI)H [Isolated Digital Output Board for PCI] + 91c3 DA16-16(LPCI)L [Un-insulated highly precise analog output board for Low Profile PCI] + b152 DIO-96D2-LPCI + c103 ADA16-32/2(PCI)F [High-Speed Analog I/O Board for PCI] +1222 Ancor Communications, Inc. +1223 Artesyn Communication Products + 0003 PM/Link + 0004 PM/T1 + 0005 PM/E1 + 0008 PM/SLS + 0009 BajaSpan Resource Target + 000a BajaSpan Section 0 + 000b BajaSpan Section 1 + 000c BajaSpan Section 2 + 000d BajaSpan Section 3 + 000e PM/PPC +1224 Interactive Images +1225 Power I/O, Inc. +1227 Tech-Source + 0006 Raptor GFX 8P + 0023 Raptor GFX [1100T] +1228 Norsk Elektro Optikk A/S +1229 Data Kinesis Inc. +122a Integrated Telecom +122b LG Industrial Systems Co., Ltd +122c Sican GmbH +122d Aztech System Ltd + 1206 368DSP + 1400 Trident PCI288-Q3DII (NX) + 50dc 3328 Audio + 122d 0001 3328 Audio + 80da 3328 Audio + 122d 0001 3328 Audio +122e Xyratex + 7722 Napatech XL1 + 7724 Napatech XL2/XA + 7729 Napatech XD +122f Andrew Corporation +1230 Fishcamp Engineering +1231 Woodward McCoach, Inc. + 04e1 Desktop PCI Telephony 4 + 05e1 Desktop PCI Telephony 5/6 + 0d00 LightParser + 0d02 LightParser 2 + 0d13 Desktop PCI L1/L3 Telephony +1232 GPT Limited +1233 Bus-Tech, Inc. +# Also Bochs uses this for virtual VGA... +1234 Technical Corp. +1235 Risq Modular Systems, Inc. +1236 Sigma Designs Corporation + 0000 RealMagic64/GX + 6401 REALmagic 64/GX (SD 6425) +1237 Alta Technology Corporation +1238 Adtran +1239 3DO Company +123a Visicom Laboratories, Inc. +123b Seeq Technology, Inc. +123c Century Systems, Inc. +123d Engineering Design Team, Inc. + 0000 EasyConnect 8/32 + 0002 EasyConnect 8/64 + 0003 EasyIO +123e Simutech, Inc. +123f C-Cube Microsystems + 00e4 MPEG + 8120 E4? + 11bd 0006 DV500 E4 + 11bd 000a DV500 E4 + 11bd 000f DV500 E4 + 1809 0016 Emuzed MAUI-III PCI PVR FM TV + 8888 Cinemaster C 3.0 DVD Decoder + 1002 0001 Cinemaster C 3.0 DVD Decoder + 1002 0002 Cinemaster C 3.0 DVD Decoder + 1328 0001 Cinemaster C 3.0 DVD Decoder +1240 Marathon Technologies Corp. +1241 DSC Communications +# Formerly Jaycor Networks, Inc. +1242 JNI Corporation + 1560 JNIC-1560 PCI-X Fibre Channel Controller + 1242 6562 FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter + 1242 656a FCX-6562 PCI-X Fibre Channel Adapter + 4643 FCI-1063 Fibre Channel Adapter + 6562 FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter + 656a FCX-6562 PCI-X Fibre Channel Adapter +1243 Delphax +# Audio-Visuelles Marketing und Computersysteme +1244 AVM GmbH + 0700 B1 ISDN + 0800 C4 ISDN + 0a00 A1 ISDN [Fritz] + 1244 0a00 FRITZ!Card ISDN Controller + 0e00 Fritz!PCI v2.0 ISDN + 1100 C2 ISDN + 1200 T1 ISDN + 2700 Fritz!Card DSL SL + 2900 Fritz!Card DSL v2.0 +1245 A.P.D., S.A. +1246 Dipix Technologies, Inc. +1247 Xylon Research, Inc. +1248 Central Data Corporation +1249 Samsung Electronics Co., Ltd. +124a AEG Electrocom GmbH +124b SBS/Greenspring Modular I/O + 0040 PCI-40A or cPCI-200 Quad IndustryPack carrier + 124b 9080 PCI9080 Bridge +124c Solitron Technologies, Inc. +124d Stallion Technologies, Inc. + 0000 EasyConnection 8/32 + 0002 EasyConnection 8/64 + 0003 EasyIO + 0004 EasyConnection/RA +124e Cylink +124f Infortrend Technology, Inc. + 0041 IFT-2000 Series RAID Controller +1250 Hitachi Microcomputer System Ltd +1251 VLSI Solutions Oy +1253 Guzik Technical Enterprises +1254 Linear Systems Ltd. + 0065 DVB Master FD + 007c DVB Master Quad/o +1255 Optibase Ltd + 1110 MPEG Forge + 1210 MPEG Fusion + 2110 VideoPlex + 2120 VideoPlex CC + 2130 VideoQuest +1256 Perceptive Solutions, Inc. + 4201 PCI-2220I + 4401 PCI-2240I + 5201 PCI-2000 +1257 Vertex Networks, Inc. +1258 Gilbarco, Inc. +1259 Allied Telesyn International + 2560 AT-2560 Fast Ethernet Adapter (i82557B) + 2801 AT-2801FX (RTL-8139) + a117 RTL81xx Fast Ethernet + a11e RTL81xx Fast Ethernet + a120 21x4x DEC-Tulip compatible 10/100 Ethernet +125a ABB Power Systems +125b Asix Electronics Corporation + 1400 AX88141 Fast Ethernet Controller + 1186 1100 AX8814X Based PCI Fast Ethernet Adapter +125c Aurora Technologies, Inc. + 0101 Saturn 4520P + 0640 Aries 16000P +125d ESS Technology + 0000 ES336H Fax Modem (Early Model) + 1948 ES1948 Maestro-1 + 1968 ES1968 Maestro 2 + 1028 0085 ES1968 Maestro-2 PCI + 1033 8051 ES1968 Maestro-2 Audiodrive + 1969 ES1969 Solo-1 Audiodrive + 1014 0166 ES1969 SOLO-1 AudioDrive on IBM Aptiva Mainboard + 125d 8888 Solo-1 Audio Adapter + 153b 111b Terratec 128i PCI + 1978 ES1978 Maestro 2E + 0e11 b112 Armada M700/E500 + 1033 803c ES1978 Maestro-2E Audiodrive + 1033 8058 ES1978 Maestro-2E Audiodrive + 1092 4000 Monster Sound MX400 + 1179 0001 ES1978 Maestro-2E Audiodrive + 1988 ES1988 Allegro-1 + 0e11 0098 Evo N600c + 1092 4100 Sonic Impact S100 + 125d 0431 Allegro AudioDrive + 125d 1988 ESS Allegro-1 Audiodrive + 125d 1998 Allegro AudioDrive + 125d 1999 Allegro-1 AudioDrive + 1989 ESS Modem + 125d 1989 ESS Modem + 1998 ES1983S Maestro-3i PCI Audio Accelerator + 1028 00b1 Latitude C600 + 1028 00e6 ES1983S Maestro-3i (Dell Inspiron 8100) + 1999 ES1983S Maestro-3i PCI Modem Accelerator + 199a ES1983S Maestro-3i PCI Audio Accelerator + 199b ES1983S Maestro-3i PCI Modem Accelerator + 2808 ES336H Fax Modem (Later Model) + 2838 ES2838/2839 SuperLink Modem + 2898 ES2898 Modem + 125d 0424 ES56-PI Data Fax Modem + 125d 0425 ES56T-PI Data Fax Modem + 125d 0426 ES56V-PI Data Fax Modem + 125d 0427 VW-PI Data Fax Modem + 125d 0428 ES56ST-PI Data Fax Modem + 125d 0429 ES56SV-PI Data Fax Modem + 147a c001 ES56-PI Data Fax Modem + 148d 1030 HCF WV-PI56 [ESS ES56-PI Data Fax Modem] + 14fe 0428 ES56-PI Data Fax Modem + 14fe 0429 ES56-PI Data Fax Modem +125e Specialvideo Engineering SRL +125f Concurrent Technologies, Inc. +1260 Intersil Corporation + 3872 Prism 2.5 Wavelan chipset + 1468 0202 LAN-Express IEEE 802.11b Wireless LAN + 3873 Prism 2.5 Wavelan chipset + 1186 3501 DWL-520 Wireless PCI Adapter + 1186 3700 DWL-520 Wireless PCI Adapter, Rev E1 + 1385 4105 MA311 802.11b wireless adapter + 1668 0414 HWP01170-01 802.11b PCI Wireless Adapter + 16a5 1601 AIR.mate PC-400 PCI Wireless LAN Adapter + 1737 3874 WMP11 Wireless 802.11b PCI Adapter + 8086 2510 M3AWEB Wireless 802.11b MiniPCI Adapter + 8086 2513 Wireless 802.11b MiniPCI Adapter + 3886 ISL3886 [Prism Javelin/Prism Xbow] + 17cf 0037 XG-901 and clones Wireless Adapter + 3890 ISL3890 [Prism GT/Prism Duette]/ISL3886 [Prism Javelin/Prism Xbow] + 10b8 2802 SMC2802W Wireless PCI Adapter + 10b8 2835 SMC2835W Wireless Cardbus Adapter + 10b8 a835 SMC2835W V2 Wireless Cardbus Adapter + 1113 4203 WN4201B + 1113 8201 T-Com T-Sinus 154pcicard Wireless PCI Adapter + 1113 b301 T-Sinus 154card Cardbus + 1113 ee03 SMC2802W V2 Wireless PCI Adapter [ISL3886] + 1113 ee08 SMC2835W V3 EU Wireless Cardbus Adapter + 1186 3202 DWL-G650 A1 Wireless Adapter + 1259 c104 CG-WLCB54GT Wireless Adapter + 1260 0000 WG511 Wireless Adapter + 1385 4800 WG511 Wireless Adapter + 16a5 1605 ALLNET ALL0271 Wireless PCI Adapter + 17cf 0014 XG-600 and clones Wireless Adapter + 17cf 0020 XG-900 and clones Wireless Adapter + 8130 HMP8130 NTSC/PAL Video Decoder + 8131 HMP8131 NTSC/PAL Video Decoder +# This is probably more likely a HW fault, but I am keeping it for now --mj + ffff ISL3886IK + 1260 0000 Senao 3054MP+ (J) mini-PCI WLAN 802.11g adapter +1261 Matsushita-Kotobuki Electronics Industries, Ltd. +1262 ES Computer Company, Ltd. +1263 Sonic Solutions +1264 Aval Nagasaki Corporation +1265 Casio Computer Co., Ltd. +1266 Microdyne Corporation + 0001 NE10/100 Adapter (i82557B) + 1910 NE2000Plus (RT8029) Ethernet Adapter + 1266 1910 NE2000Plus Ethernet Adapter +1267 S. A. Telecommunications + 5352 PCR2101 + 5a4b Telsat Turbo +1268 Tektronix +1269 Thomson-CSF/TTM +126a Lexmark International, Inc. +126b Adax, Inc. +126c Northern Telecom + 1211 10/100BaseTX [RTL81xx] + 126c 802.11b Wireless Ethernet Adapter +126d Splash Technology, Inc. +126e Sumitomo Metal Industries, Ltd. +126f Silicon Motion, Inc. + 0501 SM501 VoyagerGX Rev. AA + 0510 SM501 VoyagerGX Rev. B + 0710 SM710 LynxEM + 0712 SM712 LynxEM+ + 0720 SM720 Lynx3DM + 0730 SM731 Cougar3DR + 0810 SM810 LynxE + 0811 SM811 LynxE + 0820 SM820 Lynx3D + 0910 SM910 +1270 Olympus Optical Co., Ltd. +1271 GW Instruments +1272 Telematics International +1273 Hughes Network Systems + 0002 DirecPC +1274 Ensoniq + 1171 ES1373 [AudioPCI] (also Creative Labs CT5803) + 1371 ES1371 [AudioPCI-97] + 0e11 0024 AudioPCI on Motherboard Compaq Deskpro + 0e11 b1a7 ES1371, ES1373 AudioPCI + 1033 80ac ES1371, ES1373 AudioPCI + 1042 1854 Tazer + 107b 8054 Tabor2 + 1274 1371 Creative Sound Blaster AudioPCI64V, AudioPCI128 + 1274 8001 CT4751 board + 1462 6470 ES1371, ES1373 AudioPCI On Motherboard MS-6147 1.1A + 1462 6560 ES1371, ES1373 AudioPCI On Motherboard MS-6156 1.10 + 1462 6630 ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 1.0A + 1462 6631 ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 1.0A + 1462 6632 ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 2.0A + 1462 6633 ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 2.0A + 1462 6820 ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00 + 1462 6822 ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00A + 1462 6830 ES1371, ES1373 AudioPCI On Motherboard MS-6183 1.00 + 1462 6880 ES1371, ES1373 AudioPCI On Motherboard MS-6188 1.00 + 1462 6900 ES1371, ES1373 AudioPCI On Motherboard MS-6190 1.00 + 1462 6910 ES1371, ES1373 AudioPCI On Motherboard MS-6191 + 1462 6930 ES1371, ES1373 AudioPCI On Motherboard MS-6193 + 1462 6990 ES1371, ES1373 AudioPCI On Motherboard MS-6199BX 2.0A + 1462 6991 ES1371, ES1373 AudioPCI On Motherboard MS-6199VIA 2.0A + 14a4 2077 ES1371, ES1373 AudioPCI On Motherboard KR639 + 14a4 2105 ES1371, ES1373 AudioPCI On Motherboard MR800 + 14a4 2107 ES1371, ES1373 AudioPCI On Motherboard MR801 + 14a4 2172 ES1371, ES1373 AudioPCI On Motherboard DR739 + 1509 9902 ES1371, ES1373 AudioPCI On Motherboard KW11 + 1509 9903 ES1371, ES1373 AudioPCI On Motherboard KW31 + 1509 9904 ES1371, ES1373 AudioPCI On Motherboard KA11 + 1509 9905 ES1371, ES1373 AudioPCI On Motherboard KC13 + 152d 8801 ES1371, ES1373 AudioPCI On Motherboard CP810E + 152d 8802 ES1371, ES1373 AudioPCI On Motherboard CP810 + 152d 8803 ES1371, ES1373 AudioPCI On Motherboard P3810E + 152d 8804 ES1371, ES1373 AudioPCI On Motherboard P3810-S + 152d 8805 ES1371, ES1373 AudioPCI On Motherboard P3820-S + 270f 2001 ES1371, ES1373 AudioPCI On Motherboard 6CTR + 270f 2200 ES1371, ES1373 AudioPCI On Motherboard 6WTX + 270f 3000 ES1371, ES1373 AudioPCI On Motherboard 6WSV + 270f 3100 ES1371, ES1373 AudioPCI On Motherboard 6WIV2 + 270f 3102 ES1371, ES1373 AudioPCI On Motherboard 6WIV + 270f 7060 ES1371, ES1373 AudioPCI On Motherboard 6ASA2 + 8086 4249 ES1371, ES1373 AudioPCI On Motherboard BI440ZX + 8086 424c ES1371, ES1373 AudioPCI On Motherboard BL440ZX + 8086 425a ES1371, ES1373 AudioPCI On Motherboard BZ440ZX + 8086 4341 ES1371, ES1373 AudioPCI On Motherboard Cayman + 8086 4343 ES1371, ES1373 AudioPCI On Motherboard Cape Cod + 8086 4541 D815EEA Motherboard + 8086 4649 ES1371, ES1373 AudioPCI On Motherboard Fire Island + 8086 464a ES1371, ES1373 AudioPCI On Motherboard FJ440ZX + 8086 4d4f ES1371, ES1373 AudioPCI On Motherboard Montreal + 8086 4f43 ES1371, ES1373 AudioPCI On Motherboard OC440LX + 8086 5243 ES1371, ES1373 AudioPCI On Motherboard RC440BX + 8086 5352 ES1371, ES1373 AudioPCI On Motherboard SunRiver + 8086 5643 ES1371, ES1373 AudioPCI On Motherboard Vancouver + 8086 5753 ES1371, ES1373 AudioPCI On Motherboard WS440BX + 5000 ES1370 [AudioPCI] + 5880 5880B [AudioPCI] + 1274 2000 Creative Sound Blaster AudioPCI128 + 1274 2003 Creative SoundBlaster AudioPCI 128 + 1274 5880 Creative Sound Blaster AudioPCI128 + 1274 8001 Sound Blaster 16PCI 4.1ch + 1458 a000 5880 AudioPCI On Motherboard 6OXET + 1462 6880 5880 AudioPCI On Motherboard MS-6188 1.00 + 270f 2001 5880 AudioPCI On Motherboard 6CTR + 270f 2200 5880 AudioPCI On Motherboard 6WTX + 270f 7040 5880 AudioPCI On Motherboard 6ATA4 + 8001 CT5880 [AudioPCI] + 8002 5880A [AudioPCI] +1275 Network Appliance Corporation +1276 Switched Network Technologies, Inc. +1277 Comstream +1278 Transtech Parallel Systems Ltd. + 0701 TPE3/TM3 PowerPC Node + 0710 TPE5 PowerPC PCI board + 1101 TS-C43 card with 4 ADSP-TS101 processors +1279 Transmeta Corporation + 0060 TM8000 Northbridge + 0061 TM8000 AGP bridge + 0295 Northbridge + 0395 LongRun Northbridge + 0396 SDRAM controller + 0397 BIOS scratchpad +127a Rockwell International + 1002 HCF 56k Data/Fax Modem + 1092 094c SupraExpress 56i PRO [Diamond SUP2380] + 122d 4002 HPG / MDP3858-U + 122d 4005 MDP3858-E + 122d 4007 MDP3858-A/-NZ + 122d 4012 MDP3858-SA + 122d 4017 MDP3858-W + 122d 4018 MDP3858-W + 127a 1002 Rockwell 56K D/F HCF Modem + 1003 HCF 56k Data/Fax Modem + 0e11 b0bc 229-DF Zephyr + 0e11 b114 229-DF Cheetah + 1033 802b 229-DF + 13df 1003 PCI56RX Modem + 13e0 0117 IBM + 13e0 0147 IBM F-1156IV+/R3 Spain V.90 Modem + 13e0 0197 IBM + 13e0 01c7 IBM F-1156IV+/R3 WW V.90 Modem + 13e0 01f7 IBM + 1436 1003 IBM + 1436 1103 IBM 5614PM3G V.90 Modem + 1436 1602 Compaq 229-DF Ducati + 1004 HCF 56k Data/Fax/Voice Modem + 1048 1500 MicroLink 56k Modem + 10cf 1059 Fujitsu 229-DFRT + 1005 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem + 1005 127a AOpen FM56-P + 1033 8029 229-DFSV + 1033 8054 Modem + 10cf 103c Fujitsu + 10cf 1055 Fujitsu 229-DFSV + 10cf 1056 Fujitsu 229-DFSV + 122d 4003 MDP3858SP-U + 122d 4006 Packard Bell MDP3858V-E + 122d 4008 MDP3858SP-A/SP-NZ + 122d 4009 MDP3858SP-E + 122d 4010 MDP3858V-U + 122d 4011 MDP3858SP-SA + 122d 4013 MDP3858V-A/V-NZ + 122d 4015 MDP3858SP-W + 122d 4016 MDP3858V-W + 122d 4019 MDP3858V-SA + 13df 1005 PCI56RVP Modem + 13e0 0187 IBM + 13e0 01a7 IBM + 13e0 01b7 IBM DF-1156IV+/R3 Spain V.90 Modem + 13e0 01d7 IBM DF-1156IV+/R3 WW V.90 Modem + 1436 1005 IBM + 1436 1105 IBM + 1437 1105 IBM 5614PS3G V.90 Modem + 1022 HCF 56k Modem + 1436 1303 M3-5614PM3G V.90 Modem + 1023 HCF 56k Data/Fax Modem + 122d 4020 Packard Bell MDP3858-WE + 122d 4023 MDP3858-UE + 13e0 0247 IBM F-1156IV+/R6 Spain V.90 Modem + 13e0 0297 IBM + 13e0 02c7 IBM F-1156IV+/R6 WW V.90 Modem + 1436 1203 IBM + 1436 1303 IBM + 1024 HCF 56k Data/Fax/Voice Modem + 1025 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem + 10cf 106a Fujitsu 235-DFSV + 122d 4021 Packard Bell MDP3858V-WE + 122d 4022 MDP3858SP-WE + 122d 4024 MDP3858V-UE + 122d 4025 MDP3858SP-UE + 1026 HCF 56k PCI Speakerphone Modem + 1032 HCF 56k Modem + 1033 HCF 56k Modem + 1034 HCF 56k Modem + 1035 HCF 56k PCI Speakerphone Modem + 1036 HCF 56k Modem + 1085 HCF 56k Volcano PCI Modem + 2005 HCF 56k Data/Fax Modem + 104d 8044 229-DFSV + 104d 8045 229-DFSV + 104d 8055 PBE/Aztech 235W-DFSV + 104d 8056 235-DFSV + 104d 805a Modem + 104d 805f Modem + 104d 8074 Modem + 2013 HSF 56k Data/Fax Modem + 1179 0001 Modem + 1179 ff00 Modem + 2014 HSF 56k Data/Fax/Voice Modem + 10cf 1057 Fujitsu Citicorp III + 122d 4050 MSP3880-U + 122d 4055 MSP3880-W + 2015 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem + 10cf 1063 Fujitsu + 10cf 1064 Fujitsu + 1468 2015 Fujitsu + 2016 HSF 56k Data/Fax/Voice/Spkp Modem + 122d 4051 MSP3880V-W + 122d 4052 MSP3880SP-W + 122d 4054 MSP3880V-U + 122d 4056 MSP3880SP-U + 122d 4057 MSP3880SP-A + 4311 Riptide HSF 56k PCI Modem + 127a 4311 Ring Modular? Riptide HSF RT HP Dom + 13e0 0210 HP-GVC + 4320 Riptide PCI Audio Controller + 1235 4320 Riptide PCI Audio Controller + 4321 Riptide HCF 56k PCI Modem + 1235 4321 Hewlett Packard DF + 1235 4324 Hewlett Packard DF + 13e0 0210 Hewlett Packard DF + 144d 2321 Riptide + 4322 Riptide PCI Game Controller + 1235 4322 Riptide PCI Game Controller + 8234 RapidFire 616X ATM155 Adapter + 108d 0022 RapidFire 616X ATM155 Adapter + 108d 0027 RapidFire 616X ATM155 Adapter +127b Pixera Corporation +127c Crosspoint Solutions, Inc. +127d Vela Research +127e Winnov, L.P. + 0010 Videum 1000 Plus +127f Fujifilm +1280 Photoscript Group Ltd. +1281 Yokogawa Electric Corporation +1282 Davicom Semiconductor, Inc. + 6585 DM562P V90 Modem + 9009 Ethernet 100/10 MBit + 9100 21x4x DEC-Tulip compatible 10/100 Ethernet + 9102 21x4x DEC-Tulip compatible 10/100 Ethernet +# Subsystem ID is main ID reveresed. + 0291 8212 DM9102A (DM9102AE, SM9102AF) Ethernet 100/10 MBit + 9132 Ethernet 100/10 MBit +1283 Integrated Technology Express, Inc. + 673a IT8330G + 8152 IT8152F/G Advanced RISC-to-PCI Companion Chip + 8211 ITE 8211F Single Channel UDMA 133 + 1043 8138 P5GD1-VW Mainboard +# PCI version seems to be IT8212, embedded seems to be ITE8212 + 8212 IT/ITE8212 Dual channel ATA RAID controller + 1283 0001 IT/ITE8212 Dual channel ATA RAID controller + 8213 IT8213 IDE Controller + 8330 IT8330G + 8872 IT8874F PCI Dual Serial Port Controller + 8888 IT8888F/G PCI to ISA Bridge with SMB [Golden Gate] + 8889 IT8889F PCI to ISA Bridge + e886 IT8330G +1284 Sahara Networks, Inc. +1285 Platform Technologies, Inc. + 0100 AGOGO sound chip (aka ESS Maestro 1) +1286 Mazet GmbH +1287 M-Pact, Inc. + 001e LS220D DVD Decoder + 001f LS220C DVD Decoder +1288 Timestep Corporation +1289 AVC Technology, Inc. +128a Asante Technologies, Inc. +128b Transwitch Corporation +128c Retix Corporation +128d G2 Networks, Inc. + 0021 ATM155 Adapter +128e Hoontech Corporation/Samho Multi Tech Ltd. + 0008 ST128 WSS/SB + 0009 ST128 SAM9407 + 000a ST128 Game Port + 000b ST128 MPU Port + 000c ST128 Ctrl Port +128f Tateno Dennou, Inc. +1290 Sord Computer Corporation +1291 NCS Computer Italia +1292 Tritech Microelectronics Inc + fc02 Pyramid3D TR25202 +1293 Media Reality Technology +1294 Rhetorex, Inc. +1295 Imagenation Corporation + 0800 PXR800 + 1000 PXD1000 +1296 Kofax Image Products +1297 Holco Enterprise Co, Ltd/Shuttle Computer +1298 Spellcaster Telecommunications Inc. +1299 Knowledge Technology Lab. +129a VMetro, inc. + 0615 PBT-615 PCI-X Bus Analyzer +129b Image Access +129c Jaycor +129d Compcore Multimedia, Inc. +129e Victor Company of Japan, Ltd. +129f OEC Medical Systems, Inc. +12a0 Allen-Bradley Company +12a1 Simpact Associates, Inc. +12a2 Newgen Systems Corporation +12a3 Lucent Technologies + 8105 T8105 H100 Digital Switch +12a4 NTT Electronics Technology Company +12a5 Vision Dynamics Ltd. +12a6 Scalable Networks, Inc. +12a7 AMO GmbH +12a8 News Datacom +12a9 Xiotech Corporation +12aa SDL Communications, Inc. +12ab Yuan Yuan Enterprise Co., Ltd. + 0000 MPG160/Kuroutoshikou ITVC15-STVLP + 0002 AU8830 [Vortex2] Based Sound Card With A3D Support + 2300 Club-3D Zap TV2100 + 3000 MPG-200C PCI DVD Decoder Card + 4789 MPC788 MiniPCI Hybrid TV Tuner + fff3 MPG600/Kuroutoshikou ITVC16-STVLP + ffff MPG600/Kuroutoshikou ITVC16-STVLP +12ac Measurex Corporation +12ad Multidata GmbH +12ae Alteon Networks Inc. + 0001 AceNIC Gigabit Ethernet + 1014 0104 Gigabit Ethernet-SX PCI Adapter + 12ae 0001 Gigabit Ethernet-SX (Universal) + 1410 0104 Gigabit Ethernet-SX PCI Adapter + 0002 AceNIC Gigabit Ethernet (Copper) + 10a9 8002 Acenic Gigabit Ethernet + 12ae 0002 Gigabit Ethernet-T (3C986-T) + 00fa Farallon PN9100-T Gigabit Ethernet +12af TDK USA Corp +12b0 Jorge Scientific Corp +12b1 GammaLink +12b2 General Signal Networks +12b3 Inter-Face Co Ltd +12b4 FutureTel Inc +12b5 Granite Systems Inc. +12b6 Natural Microsystems +12b7 Cognex Modular Vision Systems Div. - Acumen Inc. +12b8 Korg +# Nee US Robotics +12b9 3Com Corp, Modem Division + 1006 WinModem + 12b9 005c USR 56k Internal Voice WinModem (Model 3472) + 12b9 005e USR 56k Internal WinModem (Models 662975) + 12b9 0062 USR 56k Internal Voice WinModem (Model 662978) + 12b9 0068 USR 56k Internal Voice WinModem (Model 5690) + 12b9 007a USR 56k Internal Voice WinModem (Model 662974) + 12b9 007f USR 56k Internal WinModem (Models 5698, 5699) + 12b9 0080 USR 56k Internal WinModem (Models 2975, 3528) + 12b9 0081 USR 56k Internal Voice WinModem (Models 2974, 3529) + 12b9 0091 USR 56k Internal Voice WinModem (Model 2978) + 1007 USR 56k Internal WinModem + 12b9 00a3 USR 56k Internal WinModem (Model 3595) + 12b9 00c4 U.S. Robotics V.92 Voice Faxmodem (2884A/B/C) + 1008 56K FaxModem Model 5610 + 12b9 00a2 USR 56k Internal FAX Modem (Model 2977) + 12b9 00aa USR 56k Internal Voice Modem (Model 2976) + 12b9 00ab USR 56k Internal Voice Modem (Model 5609) + 12b9 00ac USR 56k Internal Voice Modem (Model 3298) + 12b9 00ad USR 56k Internal FAX Modem (Model 5610) + 12b9 00d3 USR 56K Internal V92 FAX Modem (Model 5610) + 12b9 baba USR 56K Internal Voice Modem 3CP3298-DEL (Model 5601) [Hawk] +12ba BittWare, Inc. +12bb Nippon Unisoft Corporation +12bc Array Microsystems +12bd Computerm Corp. +12be Anchor Chips Inc. + 3041 AN3041Q CO-MEM + 3042 AN3042Q CO-MEM Lite + 12be 3042 Anchor Chips Lite Evaluation Board +12bf Fujifilm Microdevices +12c0 Infimed +12c1 GMM Research Corp +12c2 Mentec Limited +12c3 Holtek Microelectronics Inc + 0058 PCI NE2K Ethernet + 5598 PCI NE2K Ethernet +12c4 Connect Tech Inc + 0001 Blue HEAT/PCI 8 (RS232/CL/RJ11) + 0002 Blue HEAT/PCI 4 (RS232) + 0003 Blue HEAT/PCI 2 (RS232) + 0004 Blue HEAT/PCI 8 (UNIV, RS485) + 0005 Blue HEAT/PCI 4+4/6+2 (UNIV, RS232/485) + 0006 Blue HEAT/PCI 4 (OPTO, RS485) + 0007 Blue HEAT/PCI 2+2 (RS232/485) + 0008 Blue HEAT/PCI 2 (OPTO, Tx, RS485) + 0009 Blue HEAT/PCI 2+6 (RS232/485) + 000a Blue HEAT/PCI 8 (Tx, RS485) + 000b Blue HEAT/PCI 4 (Tx, RS485) + 000c Blue HEAT/PCI 2 (20 MHz, RS485) + 000d Blue HEAT/PCI 2 PTM + 0100 NT960/PCI + 0201 cPCI Titan - 2 Port + 0202 cPCI Titan - 4 Port + 0300 CTI PCI UART 2 (RS232) + 0301 CTI PCI UART 4 (RS232) + 0302 CTI PCI UART 8 (RS232) + 0310 CTI PCI UART 1+1 (RS232/485) + 0311 CTI PCI UART 2+2 (RS232/485) + 0312 CTI PCI UART 4+4 (RS232/485) + 0320 CTI PCI UART 2 + 0321 CTI PCI UART 4 + 0322 CTI PCI UART 8 + 0330 CTI PCI UART 2 (RS485) + 0331 CTI PCI UART 4 (RS485) + 0332 CTI PCI UART 8 (RS485) +12c5 Picture Elements Incorporated + 007e Imaging/Scanning Subsystem Engine + 007f Imaging/Scanning Subsystem Engine + 0081 PCIVST [Grayscale Thresholding Engine] + 0085 Video Simulator/Sender + 0086 THR2 Multi-scale Thresholder +12c6 Mitani Corporation +12c7 Dialogic Corp +# 12 Line, 6 port, CT-BUS/SC-BUS, loopstart FXO adaptor. + 0546 Springware D/120JCT-LS +# 24 Channel, 1 Port, CT-BUS/SC-BUS, T1/PRI adaptor. + 0647 Springware D/240JCT-T1 +# 4 Line, 4 port, CT-BUS/SC-BUS, loopstart FXO adaptor. Revision 01 + 0676 Springware D/41JCT-LS +# 48 Channel, 2 Port, CT-BUS/SC-BUS, T1/PRI adaptor. + 0685 Springware D/480JCT-2T1 +12c8 G Force Co, Ltd +12c9 Gigi Operations +12ca Integrated Computing Engines +12cb Antex Electronics Corporation + 0027 SC4 (StudioCard) +12cc Pluto Technologies International +12cd Aims Lab +12ce Netspeed Inc. +12cf Prophet Systems, Inc. +12d0 GDE Systems, Inc. +12d1 PSITech +12d2 NVidia / SGS Thomson (Joint Venture) + 0008 NV1 + 0009 DAC64 + 0018 Riva128 + 1048 0c10 VICTORY Erazor + 107b 8030 STB Velocity 128 + 1092 0350 Viper V330 + 1092 1092 Viper V330 + 10b4 1b1b STB Velocity 128 + 10b4 1b1d STB Velocity 128 + 10b4 1b1e STB Velocity 128, PAL TV-Out + 10b4 1b20 STB Velocity 128 Sapphire + 10b4 1b21 STB Velocity 128 + 10b4 1b22 STB Velocity 128 AGP, NTSC TV-Out + 10b4 1b23 STB Velocity 128 AGP, PAL TV-Out + 10b4 1b27 STB Velocity 128 DVD + 10b4 1b88 MVP Pro 128 + 10b4 222a STB Velocity 128 AGP + 10b4 2230 STB Velocity 128 + 10b4 2232 STB Velocity 128 + 10b4 2235 STB Velocity 128 AGP + 2a15 54a3 3DVision-SAGP / 3DexPlorer 3000 + 0019 Riva128ZX + 0020 TNT + 0028 TNT2 + 0029 UTNT2 + 002c VTNT2 + 00a0 ITNT2 +12d3 Vingmed Sound A/S +12d4 Ulticom (Formerly DGM&S) + 0200 T1 Card +12d5 Equator Technologies Inc + 0003 BSP16 + 1000 BSP15 +12d6 Analogic Corp +12d7 Biotronic SRL +12d8 Pericom Semiconductor + 01a7 PI7C21P100 PCI to PCI Bridge + 71e2 PI7C7300A/PI7C7300D PCI-to-PCI Bridge + 71e3 PI7C7300A/PI7C7300D PCI-to-PCI Bridge (Secondary Bus 2) + 8140 PI7C8140A PCI-to-PCI Bridge + 8148 PI7C8148A/PI7C8148B PCI-to-PCI Bridge + 8150 PCI to PCI Bridge + 8152 PI7C8152A/PI7C8152B/PI7C8152BI PCI-to-PCI Bridge + 8154 PI7C8154A/PI7C8154B/PI7C8154BI PCI-to-PCI Bridge + e110 PI7C9X110 PCI Express to PCI bridge + 1775 11cc CC11/CL11 CompactPCI Bridge + e130 PCI Express to PCI-XPI7C9X130 PCI-X Bridge +12d9 Aculab PLC + 0002 PCI Prosody + 0004 cPCI Prosody + 0005 Aculab E1/T1 PCI card + 1078 Prosody X class e1000 device + 12d9 000d Prosody X PCI + 12d9 000e Prosody X cPCI +12da True Time Inc. +12db Annapolis Micro Systems, Inc +12dc Symicron Computer Communication Ltd. +12dd Management Graphics +12de Rainbow Technologies + 0200 CryptoSwift CS200 +12df SBS Technologies Inc +12e0 Chase Research + 0010 ST16C654 Quad UART + 0020 ST16C654 Quad UART + 0030 ST16C654 Quad UART +12e1 Nintendo Co, Ltd +12e2 Datum Inc. Bancomm-Timing Division +12e3 Imation Corp - Medical Imaging Systems +12e4 Brooktrout Technology Inc +12e5 Apex Semiconductor Inc +12e6 Cirel Systems +12e7 Sunsgroup Corporation +12e8 Crisc Corp +12e9 GE Spacenet +12ea Zuken +12eb Aureal Semiconductor + 0001 Vortex 1 + 104d 8036 AU8820 Vortex Digital Audio Processor + 1092 2000 Sonic Impact A3D + 1092 2100 Sonic Impact A3D + 1092 2110 Sonic Impact A3D + 1092 2200 Sonic Impact A3D + 122d 1002 AU8820 Vortex Digital Audio Processor + 12eb 0001 AU8820 Vortex Digital Audio Processor + 5053 3355 Montego + 0002 Vortex 2 + 104d 8049 AU8830 Vortex 3D Digital Audio Processor + 104d 807b AU8830 Vortex 3D Digital Audio Processor + 1092 3000 Monster Sound II + 1092 3001 Monster Sound II + 1092 3002 Monster Sound II + 1092 3003 Monster Sound II + 1092 3004 Monster Sound II + 12eb 0002 AU8830 Vortex 3D Digital Audio Processor + 12eb 0088 AU8830 Vortex 3D Digital Audio Processor + 144d 3510 AU8830 Vortex 3D Digital Audio Processor + 5053 3356 Montego II + 0003 AU8810 Vortex Digital Audio Processor + 104d 8049 AU8810 Vortex Digital Audio Processor + 104d 8077 AU8810 Vortex Digital Audio Processor + 109f 1000 AU8810 Vortex Digital Audio Processor + 12eb 0003 AU8810 Vortex Digital Audio Processor + 1462 6780 AU8810 Vortex Digital Audio Processor + 14a4 2073 AU8810 Vortex Digital Audio Processor + 14a4 2091 AU8810 Vortex Digital Audio Processor + 14a4 2104 AU8810 Vortex Digital Audio Processor + 14a4 2106 AU8810 Vortex Digital Audio Processor + 8803 Vortex 56k Software Modem + 12eb 8803 Vortex 56k Software Modem +12ec 3A International, Inc. +12ed Optivision Inc. +12ee Orange Micro +12ef Vienna Systems +12f0 Pentek +12f1 Sorenson Vision Inc +12f2 Gammagraphx, Inc. +12f3 Radstone Technology +12f4 Megatel +12f5 Forks +12f6 Dawson France +12f7 Cognex +12f8 Electronic Design GmbH + 0002 VideoMaker +12f9 Four Fold Ltd +12fb Spectrum Signal Processing + 0001 PMC-MAI + 00f5 F5 Dakar + 02ad PMC-2MAI + 2adc ePMC-2ADC + 3100 PRO-3100 + 3500 PRO-3500 + 4d4f Modena + 8120 ePMC-8120 + da62 Daytona C6201 PCI (Hurricane) + db62 Ingliston XBIF + dc62 Ingliston PLX9054 + dd62 Ingliston JTAG/ISP + eddc ePMC-MSDDC + fa01 ePMC-FPGA +12fc Capital Equipment Corp +12fd I2S +12fe ESD Electronic System Design GmbH +12ff Lexicon +1300 Harman International Industries Inc +1302 Computer Sciences Corp +1303 Innovative Integration + 0030 X3-SDF 4-channel XMC acquisition board +1304 Juniper Networks +1305 Netphone, Inc +1306 Duet Technologies +# Nee ComputerBoards +1307 Measurement Computing + 0001 PCI-DAS1602/16 + 000b PCI-DIO48H + 000c PCI-PDISO8 + 000d PCI-PDISO16 + 000f PCI-DAS1200 + 0010 PCI-DAS1602/12 + 0014 PCI-DIO24H + 0015 PCI-DIO24H/CTR3 + 0016 PCI-DIO48H/CTR15 + 0017 PCI-DIO96H + 0018 PCI-CTR05 + 0019 PCI-DAS1200/JR + 001a PCI-DAS1001 + 001b PCI-DAS1002 + 001c PCI-DAS1602JR/16 + 001d PCI-DAS6402/16 + 001e PCI-DAS6402/12 + 001f PCI-DAS16/M1 + 0020 PCI-DDA02/12 + 0021 PCI-DDA04/12 + 0022 PCI-DDA08/12 + 0023 PCI-DDA02/16 + 0024 PCI-DDA04/16 + 0025 PCI-DDA08/16 + 0026 PCI-DAC04/12-HS + 0027 PCI-DAC04/16-HS + 0028 PCI-DIO24 + 0029 PCI-DAS08 + 002c PCI-INT32 + 0033 PCI-DUAL-AC5 + 0034 PCI-DAS-TC + 0035 PCI-DAS64/M1/16 + 0036 PCI-DAS64/M2/16 + 0037 PCI-DAS64/M3/16 + 004c PCI-DAS1000 + 004d PCI-QUAD04 + 0052 PCI-DAS4020/12 + 0053 PCIM-DDA06/16 + 0054 PCI-DIO96 + 005d PCI-DAS6023 + 005e PCI-DAS6025 + 005f PCI-DAS6030 + 0060 PCI-DAS6031 + 0061 PCI-DAS6032 + 0062 PCI-DAS6033 + 0063 PCI-DAS6034 + 0064 PCI-DAS6035 + 0065 PCI-DAS6040 + 0066 PCI-DAS6052 + 0067 PCI-DAS6070 + 0068 PCI-DAS6071 + 006f PCI-DAS6036 + 0078 PCI-DAS6013 + 0079 PCI-DAS6014 +1308 Jato Technologies Inc. + 0001 NetCelerator Adapter + 1308 0001 NetCelerator Adapter +1309 AB Semiconductor Ltd +130a Mitsubishi Electric Microcomputer +130b Colorgraphic Communications Corp +130c Ambex Technologies, Inc +130d Accelerix Inc +130e Yamatake-Honeywell Co. Ltd +130f Advanet Inc +1310 Gespac +1311 Videoserver, Inc +1312 Acuity Imaging, Inc +1313 Yaskawa Electric Co. +1315 Wavesat +1316 Teradyne Inc +1317 ADMtek + 0981 21x4x DEC-Tulip compatible 10/100 Ethernet + 0985 NC100 Network Everywhere Fast Ethernet 10/100 + 1734 100c Scenic N300 ADMtek AN983 10/100 Mbps PCI Adapter + 1985 21x4x DEC-Tulip compatible 10/100 Ethernet + 1385 511a FA511 + 1395 2103 CB100-EZ (4-LED version) + 2850 HSP MicroModem 56 + 5120 ADM5120 OpenGate System-on-Chip + 8201 ADM8211 802.11b Wireless Interface + 10b8 2635 SMC2635W 802.11b (11Mbps) wireless lan pcmcia (cardbus) card + 1317 8201 SMC2635W 802.11b (11mbps) wireless lan pcmcia (cardbus) card + 8211 ADM8211 802.11b Wireless Interface + 9511 21x4x DEC-Tulip compatible 10/100 Ethernet +1318 Packet Engines Inc. + 0911 GNIC-II PCI Gigabit Ethernet [Hamachi] +1319 Fortemedia, Inc + 0801 Xwave QS3000A [FM801] + 1319 1319 FM801 PCI Audio + 0802 Xwave QS3000A [FM801 game port] + 1319 1319 FM801 PCI Joystick + 1000 FM801 PCI Audio + 1001 FM801 PCI Joystick +131a Finisar Corp. +131c Nippon Electro-Sensory Devices Corp +131d Sysmic, Inc. +131e Xinex Networks Inc +131f Siig Inc + 1000 CyberSerial (1-port) 16550 + 1001 CyberSerial (1-port) 16650 + 1002 CyberSerial (1-port) 16850 + 1010 Duet 1S(16550)+1P + 1011 Duet 1S(16650)+1P + 1012 Duet 1S(16850)+1P + 1020 CyberParallel (1-port) + 1021 CyberParallel (2-port) + 1030 CyberSerial (2-port) 16550 + 1031 CyberSerial (2-port) 16650 + 1032 CyberSerial (2-port) 16850 + 1034 Trio 2S(16550)+1P + 1035 Trio 2S(16650)+1P + 1036 Trio 2S(16850)+1P + 1050 CyberSerial (4-port) 16550 + 1051 CyberSerial (4-port) 16650 + 1052 CyberSerial (4-port) 16850 + 2000 CyberSerial (1-port) 16550 + 2001 CyberSerial (1-port) 16650 + 2002 CyberSerial (1-port) 16850 + 2010 Duet 1S(16550)+1P + 2011 Duet 1S(16650)+1P + 2012 Duet 1S(16850)+1P + 2020 CyberParallel (1-port) + 2021 CyberParallel (2-port) + 2030 CyberSerial (2-port) 16550 + 131f 2030 PCI Serial Card + 2031 CyberSerial (2-port) 16650 + 2032 CyberSerial (2-port) 16850 + 2040 Trio 1S(16550)+2P + 2041 Trio 1S(16650)+2P + 2042 Trio 1S(16850)+2P + 2050 CyberSerial (4-port) 16550 + 2051 CyberSerial (4-port) 16650 + 2052 CyberSerial (4-port) 16850 + 2060 Trio 2S(16550)+1P + 2061 Trio 2S(16650)+1P + 2062 Trio 2S(16850)+1P + 2081 CyberSerial (8-port) ST16654 +1320 Crypto AG +1321 Arcobel Graphics BV +1322 MTT Co., Ltd +1323 Dome Inc +1324 Sphere Communications +1325 Salix Technologies, Inc +1326 Seachange international +1327 Voss scientific +1328 quadrant international +1329 Productivity Enhancement +132a Microcom Inc. +132b Broadband Technologies +132c Micrel Inc +132d Integrated Silicon Solution, Inc. +1330 MMC Networks +1331 RadiSys Corporation + 0030 ENP-2611 + 8200 82600 Host Bridge + 8201 82600 IDE + 8202 82600 USB + 8210 82600 PCI Bridge +1332 Micro Memory + 5415 MM-5415CN PCI Memory Module with Battery Backup + 5425 MM-5425CN PCI 64/66 Memory Module with Battery Backup + 6140 MM-6140D +1334 Redcreek Communications, Inc +1335 Videomail, Inc +1337 Third Planet Publishing +1338 BT Electronics +133a Vtel Corp +133b Softcom Microsystems +133c Holontech Corp +133d SS Technologies +133e Virtual Computer Corp +133f SCM Microsystems +1340 Atalla Corp +1341 Kyoto Microcomputer Co +1342 Promax Systems Inc +1343 Phylon Communications Inc +1344 Crucial Technology +1345 Arescom Inc +1347 Odetics +1349 Sumitomo Electric Industries, Ltd. +134a DTC Technology Corp. + 0001 Domex 536 + 0002 Domex DMX3194UP SCSI Adapter +134b ARK Research Corp. +134c Chori Joho System Co. Ltd +134d PCTel Inc + 2189 HSP56 MicroModem + 2486 2304WT V.92 MDC Modem + 7890 HSP MicroModem 56 + 134d 0001 PCT789 adapter + 7891 HSP MicroModem 56 + 134d 0001 HSP MicroModem 56 + 7892 HSP MicroModem 56 + 7893 HSP MicroModem 56 + 7894 HSP MicroModem 56 + 7895 HSP MicroModem 56 + 7896 HSP MicroModem 56 + 7897 HSP MicroModem 56 +134e CSTI +134f Algo System Co Ltd +1350 Systec Co. Ltd +1351 Sonix Inc +1353 Thales Idatys + 0002 Proserver + 0003 PCI-FUT + 0004 PCI-S0 + 0005 PCI-FUT-S0 +1354 Dwave System Inc +1355 Kratos Analytical Ltd +1356 The Logical Co +1359 Prisa Networks +135a Brain Boxes + 0a61 UC-324 [VELOCITY RS422/485] +135b Giganet Inc +135c Quatech Inc + 0010 QSC-100 + 0020 DSC-100 + 0030 DSC-200/300 + 0040 QSC-200/300 + 0050 ESC-100D + 0060 ESC-100M + 00f0 MPAC-100 Syncronous Serial Card (Zilog 85230) + 0170 QSCLP-100 + 0180 DSCLP-100 + 0190 SSCLP-100 + 01a0 QSCLP-200/300 + 01b0 DSCLP-200/300 + 01c0 SSCLP-200/300 + 0258 DSPSX-200/300 +135d ABB Network Partner AB +135e Sealevel Systems Inc + 5101 Route 56.PCI - Multi-Protocol Serial Interface (Zilog Z16C32) + 7101 Single Port RS-232/422/485/530 + 7201 Dual Port RS-232/422/485 Interface + 7202 Dual Port RS-232 Interface + 7401 Four Port RS-232 Interface + 7402 Four Port RS-422/485 Interface + 7801 Eight Port RS-232 Interface + 7804 Eight Port RS-232/422/485 Interface + 8001 8001 Digital I/O Adapter +135f I-Data International A-S +1360 Meinberg Funkuhren + 0101 PCI32 DCF77 Radio Clock + 0102 PCI509 DCF77 Radio Clock + 0103 PCI510 DCF77 Radio Clock + 0104 PCI511 DCF77 Radio Clock + 0105 PEX511 DCF77 Radio Clock (PCI Express) + 0201 GPS167PCI GPS Receiver + 0202 GPS168PCI GPS Receiver + 0203 GPS169PCI GPS Receiver + 0204 GPS170PCI GPS Receiver + 0205 GPS170PEX GPS Receiver (PCI Express) + 0301 TCR510PCI IRIG Timecode Reader + 0302 TCR167PCI IRIG Timecode Reader + 0303 TCR511PCI IRIG Timecode Reader + 0304 TCR511PEX IRIG Timecode Reader (PCI Express) + 0305 TCR170PEX IRIG Timecode Reader (PCI Express) + 0501 PTP270PEX PTP/IEEE1588 slave card (PCI Express) + 0601 FRC511PEX Free Running Clock (PCI Express) +1361 Soliton Systems K.K. +1362 Fujifacom Corporation +1363 Phoenix Technology Ltd +1364 ATM Communications Inc +1365 Hypercope GmbH +1366 Teijin Seiki Co. Ltd +1367 Hitachi Zosen Corporation +1368 Skyware Corporation +1369 Digigram +136a High Soft Tech + 0004 HST Saphir VII mini PCI + 0007 HST Saphir III E MultiLink 4 + 0008 HST Saphir III E MultiLink 8 + 000a HST Saphir III E MultiLink 2 +136b Kawasaki Steel Corporation + ff01 KL5A72002 Motion JPEG +136c Adtek System Science Co Ltd +136d Gigalabs Inc +136f Applied Magic Inc +1370 ATL Products +1371 CNet Technology Inc + 434e GigaCard Network Adapter + 1371 434e N-Way PCI-Bus Giga-Card 1000/100/10Mbps(L) +1373 Silicon Vision Inc +1374 Silicom Ltd. + 0024 Silicom Dual port Giga Ethernet BGE Bypass Server Adapter + 0025 Silicom Quad port Giga Ethernet BGE Bypass Server Adapter + 0026 Silicom Dual port Fiber Giga Ethernet 546 Bypass Server Adapter + 0027 Silicom Dual port Fiber LX Giga Ethernet 546 Bypass Server Adapter + 0029 Silicom Dual port Copper Giga Ethernet 546GB Bypass Server Adapter + 002a Silicom Dual port Fiber Giga Ethernet 546 TAP/Bypass Server Adapter + 002b Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter (PXE2TBI) + 002c Silicom Quad port Copper Giga Ethernet 546GB Bypass Server Adapter (PXG4BPI) + 002d Silicom Quad port Fiber-SX Giga Ethernet 546GB Bypass Server Adapter (PXG4BPFI) + 002e Silicom Quad port Fiber-LX Giga Ethernet 546GB Bypass Server Adapter (PXG4BPFI-LX) + 002f Silicom Dual port Fiber-SX Giga Ethernet 546GB Low profile Bypass Server Adapter (PXG2BPFIL) + 0030 Silicom Dual port Fiber-LX Giga Ethernet 546GB Low profile Bypass Server Adapter + 0031 Silicom Quad port Copper Giga Ethernet PCI-E Bypass Server Adapter + 0032 Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter + 0034 Silicom Dual port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter + 0035 Silicom Quad port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter + 0036 Silicom Dual port Fiber Giga Ethernet PCI-E BGE Bypass Server Adapter + 0037 Silicom Dual port Copper Ethernet PCI-E Intel based Bypass Server Adapter + 0038 Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter + 0039 Silicom Dual port Fiber-SX Ethernet PCI-E Intel based Bypass Server Adapter + 003a Silicom Dual port Fiber-LX Ethernet PCI-E Intel based Bypass Server Adapter + 003b Silicom Dual port Fiber Ethernet PMC Intel based Bypass Server Adapter (PMCX2BPFI) + 003c Silicom Dual port Copper Ethernet PCI-X BGE based Bypass Server Adapter (PXG2BPRB) + 003e Silicom Dual port Fiber Giga Ethernet PCI-E 571 TAP/Bypass Server Adapter (PEG2TBFI) + 003f Silicom Dual port Copper Giga Ethernet PCI-X 546 TAP/Bypass Server Adapter (PXG2TBI) + 0040 Silicom Quad port Fiber-SX Giga Ethernet 571 Bypass Server Adapter (PEG4BPFI) + 0043 Silicom Quad port Fiber-SX Giga Ethernet 546 Bypass Server Adapter (PXG4BPFID) + 0045 Silicom 6 port Copper Giga Ethernet 546 Bypass Server Adapter (PXG6BPI) + 0047 Silicom Dual port Fiber-SX Giga Ethernet 571 Bypass Disconnect Server Adapter (PEG2BPFID) + 004a Silicom Quad port Fiber-LX Giga Ethernet 571 Bypass Server Adapter (PEG4BPFI-LX) +1375 Argosystems Inc +1376 LMC +1377 Electronic Equipment Production & Distribution GmbH +1378 Telemann Co. Ltd +1379 Asahi Kasei Microsystems Co Ltd +137a Mark of the Unicorn Inc + 0001 PCI-324 Audiowire Interface +137b PPT Vision +137c Iwatsu Electric Co Ltd +137d Dynachip Corporation +137e Patriot Scientific Corporation +137f Japan Satellite Systems Inc +1380 Sanritz Automation Co Ltd +1381 Brains Co. Ltd +1382 Marian - Electronic & Software + 0001 ARC88 audio recording card + 2008 Prodif 96 Pro sound system + 2048 Prodif Plus sound system + 2088 Marc 8 Midi sound system + 20c8 Marc A sound system + 4008 Marc 2 sound system + 4010 Marc 2 Pro sound system + 4048 Marc 4 MIDI sound system + 4088 Marc 4 Digi sound system + 4248 Marc X sound system + 4424 TRACE D4 Sound System +1383 Controlnet Inc +1384 Reality Simulation Systems Inc +1385 Netgear + 0013 WG311T 108 Mbps Wireless PCI Adapter + 006b WA301 802.11b Wireless PCI Adapter + 4100 MA301 802.11b Wireless PCI Adapter + 4105 MA311 802.11b Wireless PCI Adapter + 4400 WAG511 802.11a/b/g Dual Band Wireless PC Card + 4600 WAG511 802.11a/b/g Dual Band Wireless PC Card + 4601 WAG511 802.11a/b/g Dual Band Wireless PC Card + 4610 WAG511 802.11a/b/g Dual Band Wireless PC Card + 4800 WG511(v1) 54 Mbps Wireless PC Card + 4900 WG311v1 54 Mbps Wireless PCI Adapter + 4a00 WAG311 802.11a/g Wireless PCI Adapter + 4b00 WG511T 108 Mbps Wireless PC Card + 4c00 WG311v2 54 Mbps Wireless-G PCI Adapter + 4d00 WG311T 108 Mbps Wireless PCI Adapter + 4e00 WG511v2 54 Mbps Wireless PC Card + 4f00 WG511U Double 108 Mbps Wireless PC Card + 5200 GA511 Gigabit PC Card + 620a GA620 Gigabit Ethernet + 630a GA630 Gigabit Ethernet + 6b00 WG311v3 54 Mbps Wireless PCI Adapter + 6d00 WPNT511 RangeMax 240 Mbps Wireless PC Card + 7b00 WN511B RangeMax Next 270 Mbps Wireless PC Card + 7c00 WN511T RangeMax Next 300 Mbps Wireless PC Card + 7d00 WN311B RangeMax Next 270 Mbps Wireless PCI Adapter + 7e00 WN311T RangeMax Next 300 Mbps Wireless PCI Adapter + f004 FA310TX + f312 FA312 REV-A1 Fast Ethernet PCI Adapter +1386 Video Domain Technologies +1387 Systran Corp +1388 Hitachi Information Technology Co Ltd +1389 Applicom International + 0001 PCI1500PFB [Intelligent fieldbus adaptor] +138a Fusion Micromedia Corp +138b Tokimec Inc +138c Silicon Reality +138d Future Techno Designs pte Ltd +138e Basler GmbH +138f Patapsco Designs Inc +1390 Concept Development Inc +1391 Development Concepts Inc +1392 Medialight Inc +1393 Moxa Technologies Co Ltd + 0001 UC7000 Serial + 1020 CP102 (2-port RS-232 PCI) + 1021 CP102UL (2-port RS-232 Universal PCI) + 1022 CP102U (2-port RS-232 Universal PCI) + 1023 CP-102UF + 1040 Smartio C104H/PCI + 1041 CP104U (4-port RS-232 Universal PCI) + 1042 CP104JU (4-port RS-232 Universal PCI) + 1043 CP104EL (4-port RS-232 Smart PCI Express) + 1044 POS104UL (4-port RS-232 Universal PCI) + 1080 CB108 (8-port RS-232 PC/104-plus Module) + 1140 CT-114 series + 1141 Industrio CP-114 + 1142 CB114 (4-port RS-232/422/485 PC/104-plus Module) + 1143 CP-114UL (4-port RS-232/422/485 Smart Universal PCI Serial Board) + 1180 CP118U (8-port RS-232/422/485 Smart Universal PCI) + 1181 CP118EL (8-port RS-232/422/485 Smart PCI Express) + 1320 CP132 (2-port RS-422/485 PCI) + 1321 CP132U (2-Port RS-422/485 Universal PCI) + 1340 CP134U (4-Port RS-422/485 Universal PCI) + 1341 CB134I (4-port RS-422/485 PC/104-plus Module) + 1380 CP138U (8-port RS-232/422/485 Smart Universal PCI) + 1680 Smartio C168H/PCI + 1681 CP-168U V2 Smart Serial Board (8-port RS-232) + 1682 CP168EL (8-port RS-232 Smart PCI Express) + 2040 Intellio CP-204J + 2180 Intellio C218 Turbo PCI + 3200 Intellio C320 Turbo PCI +1394 Level One Communications + 0001 LXT1001 Gigabit Ethernet + 1186 4800 DGE-500SX + 1394 0001 NetCelerator Adapter +1395 Ambicom Inc +1396 Cipher Systems Inc +1397 Cologne Chip Designs GmbH + 08b4 ISDN network Controller [HFC-4S] + 1397 b520 HFC-4S [IOB4ST] + 1397 b540 HFC-4S [Swyx 4xS0 SX2 QuadBri] + 1397 b556 HFC-4S [Junghanns DuoDBRI] + 1397 e888 HFC-4S [OpenVox B200P / B400P] + 16b8 ISDN network Controller [HFC-8S] + 2bd0 ISDN network controller [HFC-PCI] + 0675 1704 ISDN Adapter (PCI Bus, D, C) + 0675 1708 ISDN Adapter (PCI Bus, D, C, ACPI) + 1397 2bd0 ISDN Board + e4bf 1000 CI1-1-Harp + 30b1 ISDN network Controller [HFC-E1] + b700 ISDN network controller PrimuX S0 [HFC-PCI] + f001 GSM Network Controller [HFC-4GSM] +1398 Clarion co. Ltd +1399 Rios systems Co Ltd +139a Alacritech Inc + 0001 Quad Port 10/100 Server Accelerator + 0003 Single Port 10/100 Server Accelerator + 0005 Single Port Gigabit Server Accelerator +139b Mediasonic Multimedia Systems Ltd +139c Quantum 3d Inc +139d EPL limited +139e Media4 +139f Aethra s.r.l. +13a0 Crystal Group Inc +13a1 Kawasaki Heavy Industries Ltd +13a2 Ositech Communications Inc +13a3 Hifn Inc. + 0005 7751 Security Processor + 0006 6500 Public Key Processor + 0007 7811 Security Processor + 0012 7951 Security Processor + 0014 78XX Security Processor + 0016 8065 Security Processor + 0017 8165 Security Processor + 0018 8154 Security Processor + 001d 7956 Security Processor + 001f 7855 Security Processor + 0020 7955 Security Processor + 0026 8155 Security Processor + 002e 9630 Compression Processor + 0037 DS4100 Secure Multi-Gigabit Server Adapter with Compression +13a4 Rascom Inc +13a5 Audio Digital Imaging Inc +13a6 Videonics Inc +13a7 Teles AG +13a8 Exar Corp. + 0152 XR17C/D152 Dual PCI UART + 0154 XR17C154 Quad UART + 0158 XR17C158 Octal UART + 0252 XR17V252 Dual UART PCI controller + 0254 XR17V254 Quad UART PCI controller + 0258 XR17V258 Octal UART PCI controller +13a9 Siemens Medical Systems, Ultrasound Group +13aa Broadband Networks Inc +13ab Arcom Control Systems Ltd +13ac Motion Media Technology Ltd +13ad Nexus Inc +13ae ALD Technology Ltd +13af T.Sqware +13b0 Maxspeed Corp +13b1 Tamura corporation +13b2 Techno Chips Co. Ltd +13b3 Lanart Corporation +13b4 Wellbean Co Inc +13b5 ARM +13b6 Dlog GmbH +13b7 Logic Devices Inc +13b8 Nokia Telecommunications oy +13b9 Elecom Co Ltd +13ba Oxford Instruments +13bb Sanyo Technosound Co Ltd +13bc Bitran Corporation +13bd Sharp corporation +13be Miroku Jyoho Service Co. Ltd +13bf Sharewave Inc +13c0 Microgate Corporation + 0010 SyncLink Adapter v1 + 0020 SyncLink SCC Adapter + 0030 SyncLink Multiport Adapter + 0070 SyncLink GT Adapter + 0080 SyncLink GT4 Adapter + 00a0 SyncLink GT2 Adapter + 0210 SyncLink Adapter v2 +13c1 3ware Inc + 1000 5xxx/6xxx-series PATA-RAID + 1001 7xxx/8xxx-series PATA/SATA-RAID + 13c1 1001 7xxx/8xxx-series PATA/SATA-RAID + 1002 9xxx-series SATA-RAID + 1003 9550SX SATA-II RAID PCI-X + 1004 9650SE SATA-II RAID PCIe + 1005 9690SA SAS/SATA-II RAID PCIe +13c2 Technotrend Systemtechnik GmbH + 000e Technotrend/Hauppauge DVB card rev2.3 + 1019 TTechnoTrend-budget DVB S2-3200 +13c3 Janz Computer AG +13c4 Phase Metrics +13c5 Alphi Technology Corp +13c6 Condor Engineering Inc + 0520 CEI-520 A429 Card + 0620 CEI-620 A429 Card + 0820 CEI-820 A429 Card + 0830 CEI-830 A429 Card + 1004 P-SER Multi-channel PMC to RS-485/422/232 adapter +13c7 Blue Chip Technology Ltd + 0adc PCI-ADC + 0b10 PCI-PIO + 0d10 PCI-DIO + 524c PCI-RLY + 5744 PCI-WDT +13c8 Apptech Inc +13c9 Eaton Corporation +13ca Iomega Corporation +13cb Yano Electric Co Ltd +13cc Metheus Corporation +13cd Compatible Systems Corporation +13ce Cocom A/S +13cf Studio Audio & Video Ltd +13d0 Techsan Electronics Co Ltd + 2103 B2C2 FlexCopII DVB chip / Technisat SkyStar2 DVB card + 2104 B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card (rev 01) + 2200 B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card +13d1 Abocom Systems Inc + ab02 ADMtek Centaur-C rev 17 [D-Link DFE-680TX] CardBus Fast Ethernet Adapter + ab03 21x4x DEC-Tulip compatible 10/100 Ethernet + ab06 RTL8139 [FE2000VX] CardBus Fast Ethernet Attached Port Adapter + ab08 21x4x DEC-Tulip compatible 10/100 Ethernet +13d2 Shark Multimedia Inc +13d3 IMC Networks + 3211 DTV-DVB 704A + 3216 AzureWare AD-TU200 + 3219 DTV-DVB 7049A DVB-T USB Stick +13d4 Graphics Microsystems Inc +13d5 Media 100 Inc +13d6 K.I. Technology Co Ltd +13d7 Toshiba Engineering Corporation +13d8 Phobos corporation +13d9 Apex PC Solutions Inc +13da Intresource Systems pte Ltd +13db Janich & Klass Computertechnik GmbH +13dc Netboost Corporation +13dd Multimedia Bundle Inc +13de ABB Robotics Products AB +13df E-Tech Inc + 0001 PCI56RVP Modem + 13df 0001 PCI56RVP Modem +13e0 GVC Corporation +13e1 Silicom Multimedia Systems Inc +13e2 Dynamics Research Corporation +13e3 Nest Inc +13e4 Calculex Inc +13e5 Telesoft Design Ltd +13e6 Argosy research Inc +13e7 NAC Incorporated +13e8 Chip Express Corporation +13e9 Intraserver Technology Inc +13ea Dallas Semiconductor +13eb Hauppauge Computer Works Inc +13ec Zydacron Inc + 000a NPC-RC01 Remote control receiver +13ed Raytheion E-Systems +13ee Hayes Microcomputer Products Inc +13ef Coppercom Inc +13f0 Sundance Technology Inc / IC Plus Corp + 0200 IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY + 1043 8213 NX1001 + 0201 ST201 Sundance Ethernet + 1021 TC9020 Gigabit Ethernet + 1023 IP1000 Family Gigabit Ethernet + 1043 8180 NX1101 +13f1 Oce' - Technologies B.V. +13f2 Ford Microelectronics Inc +13f3 Mcdata Corporation +13f4 Troika Networks, Inc. + 1401 Zentai Fibre Channel Adapter +13f5 Kansai Electric Co. Ltd +13f6 C-Media Electronics Inc + 0011 CMI8738 + 0100 CM8338A + 13f6 ffff CMI8338/C3DX PCI Audio Device + 0101 CM8338B + 13f6 0101 CMI8338-031 PCI Audio Device + 0111 CM8738 + 1019 0970 P6STP-FL motherboard + 1043 8035 CUSI-FX motherboard + 1043 8077 CMI8738 6-channel audio controller + 1043 80e2 CMI8738 6ch-MX + 13f6 0111 CMI8738/C3DX PCI Audio Device + 13f6 9761 Theatron Agrippa + 153b 1144 Aureon 5.1 + 153b 1170 Aureon 7.1 + 1681 a000 Gamesurround MUSE XL + 270f 1103 CT-7NJS Ultra motherboard + 270f f462 7NJL1 motherboard + 584d 3731 Digital X-Mystique + 584d 3741 X-Plosion 7.1 + 584d 3751 X-Raider 7.1 + 584d 3761 X-Mystique 7.1 LP + 584d 3771 X-Mystique 7.1 LP Value + 7284 8384 Striker 7.1 + 0211 CM8738 + 8788 CMI8788 [Oxygen HD Audio] + 1043 8269 Virtuoso 200 (Xonar D2) + 1043 8275 Virtuoso 100 (Xonar DX) + 1043 82b7 Virtuoso 200 (Xonar D2X) + 1043 8314 Virtuoso 200 (Xonar HDAV1.3) + 1043 8327 Virtuoso 100 (Xonar DX) + 1043 834f Virtuoso 100 (Xonar D1) + 1043 835c Virtuoso 100 (Xonar Essence STX) + 1043 835d Virtuoso 100 (Xonar ST) + 1043 835e Virtuoso 200 (Xonar HDAV1.3 Slim) + 1043 838e Virtuoso 200 (Xonar DS) + 14c3 1710 HIFIER + 1a58 0910 Barracuda AC-1 + 415a 5431 X-Meridian 7.1 + 584d 3781 HDA X-Purity 7.1 Platinum + 7284 9761 CLARO + 7284 9781 CLARO halo + 9880 CM9880 +13f7 Wildfire Communications +13f8 Ad Lib Multimedia Inc +13f9 NTT Advanced Technology Corp. +13fa Pentland Systems Ltd +13fb Aydin Corp +13fc Computer Peripherals International +13fd Micro Science Inc +13fe Advantech Co. Ltd + 1240 PCI-1240 4-channel stepper motor controller card + 1600 PCI-16xx series PCI multiport serial board (function 0) +# This board has two PCI functions, appears as two PCI devices + 1601 0002 PCI-1601 2-port unisolated RS-422/485 +# This board has two PCI functions, appears as two PCI devices + 1602 0002 PCI-1602 2-port isolated RS-422/485 + 1612 0004 PCI-1612 4-port RS-232/422/485 + 1603 PCI-1603 2-port isolated RS-232/current loop + 1604 PCI-1604 2-port RS-232 + 16ff PCI-16xx series PCI multiport serial board (function 1: RX/TX steering CPLD) + 1601 0000 PCI-1601 2-port unisolated RS-422/485 PCI communications card + 1602 0000 PCI-1602 2-port isolated RS-422/485 + 1612 0000 PCI-1612 4-port RS-232/422/485 + 1711 PCI-1711 16-channel data acquisition card 12-bit, 100kS/s + 1733 PCI-1733 32-channel isolated digital input card + 1752 PCI-1752 + 1754 PCI-1754 + 1756 PCI-1756 +13ff Silicon Spice Inc +1400 Artx Inc + 1401 9432 TX +1401 CR-Systems A/S +1402 Meilhaus Electronic GmbH + 0630 ME-630 + 0940 ME-94 + 0950 ME-95 + 0960 ME-96 + 1000 ME-1000 + 100a ME-1000 + 100b ME-1000 + 1400 ME-1400 + 140a ME-1400A + 140b ME-1400B + 140c ME-1400C + 140d ME-1400D + 140e ME-1400E + 14ea ME-1400EA + 14eb ME-1400EB + 1604 ME-1600/4U + 1608 ME-1600/8U + 160c ME-1600/12U + 160f ME-1600/16U + 168f ME-1600/16U8I + 4610 ME-4610 + 4650 ME-4650 + 4660 ME-4660 + 4661 ME-4660I + 4662 ME-4660 + 4663 ME-4660I + 4670 ME-4670 + 4671 ME-4670I + 4672 ME-4670S + 4673 ME-4670IS + 4680 ME-4680 + 4681 ME-4680I + 4682 ME-4680S + 4683 ME-4680IS + 6004 ME-6000/4 + 6008 ME-6000/8 + 600f ME-6000/16 + 6014 ME-6000I/4 + 6018 ME-6000I/8 + 601f ME-6000I/16 + 6034 ME-6000ISLE/4 + 6038 ME-6000ISLE/8 + 603f ME-6000ISLE/16 + 6044 ME-6000/4/DIO + 6048 ME-6000/8/DIO + 604f ME-6000/16/DIO + 6054 ME-6000I/4/DIO + 6058 ME-6000I/8/DIO + 605f ME-6000I/16/DIO + 6074 ME-6000ISLE/4/DIO + 6078 ME-6000ISLE/8/DIO + 607f ME-6000ISLE/16/DIO + 6104 ME-6100/4 + 6108 ME-6100/8 + 610f ME-6100/16 + 6114 ME-6100I/4 + 6118 ME-6100I/8 + 611f ME-6100I/16 + 6134 ME-6100ISLE/4 + 6138 ME-6100ISLE/8 + 613f ME-6100ISLE/16 + 6144 ME-6100/4/DIO + 6148 ME-6100/8/DIO + 614f ME-6100/16/DIO + 6154 ME-6100I/4/DIO + 6158 ME-6100I/8/DIO + 615f ME-6100I/16/DIO + 6174 ME-6100ISLE/4/DIO + 6178 ME-6100ISLE/8/DIO + 617f ME-6100ISLE/16/DIO + 6259 ME-6200I/9/DIO + 6359 ME-6300I/9/DIO + 810a ME-8100A + 810b ME-8100B + 820a ME-8200A + 820b ME-8200B +1403 Ascor Inc +1404 Fundamental Software Inc +1405 Excalibur Systems Inc +1406 Oce' Printing Systems GmbH +1407 Lava Computer mfg Inc + 0100 Lava Dual Serial + 0101 Lava Quatro A + 0102 Lava Quatro B + 0110 Lava DSerial-PCI Port A + 0111 Lava DSerial-PCI Port B + 0120 Quattro-PCI A + 0121 Quattro-PCI B + 0180 Lava Octo A + 0181 Lava Octo B + 0200 Lava Port Plus + 0201 Lava Quad A + 0202 Lava Quad B + 0220 Lava Quattro PCI Ports A/B + 0221 Lava Quattro PCI Ports C/D + 0400 Lava 8255-PIO-PCI + 0500 Lava Single Serial + 0520 Lava RS422-SS-PCI + 0600 Lava Port 650 + 8000 Lava Parallel + 8001 Dual parallel port controller A + 8002 Lava Dual Parallel port A + 8003 Lava Dual Parallel port B + 8800 BOCA Research IOPPAR +1408 Aloka Co. Ltd +1409 Timedia Technology Co Ltd + 7168 PCI2S550 (Dual 16550 UART) + 1409 0002 SER4036A3V (2x RS232 port) + 1409 4027 SER4027A (1x RS232 port) + 1409 4037 SER4037A (2x RS232 port) +# Single DC-37 connector + 1409 4056 SER4056A (4x RS232) + 1409 5027 SER4027D + 1409 5037 SER4037D (2x RS232 port) +# Single DC-62 connector + 1409 5066 SER4066R (8x RS232) +# 4x 8p8c connectors + 1409 6056 SER4056D (4x RS232 port) + 7268 SUN1888 (Dual IEEE1284 parallel port) + 1409 0103 PAR4008A + 1409 0104 PAR4018A +140a DSP Research Inc +140b Ramix Inc +140c Elmic Systems Inc +140d Matsushita Electric Works Ltd +140e Goepel Electronic GmbH +140f Salient Systems Corp +1410 Midas lab Inc +1411 Ikos Systems Inc +# Nee IC Ensemble Inc. +1412 VIA Technologies Inc. + 1712 ICE1712 [Envy24] PCI Multi-Channel I/O Controller + 1412 1712 Hoontech ST Audio DSP 24 + 1412 3632 M-Audio Delta Audiophile 192 + 1412 d630 M-Audio Delta 1010 + 1412 d631 M-Audio Delta DiO + 1412 d632 M-Audio Delta 66 + 1412 d633 M-Audio Delta 44 + 1412 d634 M-Audio Delta Audiophile 2496 + 1412 d635 M-Audio Delta TDIF + 1412 d637 M-Audio Delta RBUS + 1412 d638 M-Audio Delta 410 + 1412 d63b M-Audio Delta 1010LT + 1412 d63c Digigram VX442 + 1416 1712 Hoontech ST Audio DSP 24 Media 7.1 + 153b 1115 EWS88 MT + 153b 1125 EWS88 MT (Master) + 153b 112b EWS88 D + 153b 112c EWS88 D (Master) + 153b 1130 EWX 24/96 + 153b 1138 DMX 6fire 24/96 + 153b 1151 PHASE88 + 16ce 1040 Edirol DA-2496 + 1724 VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller + 1412 1724 Albatron PX865PE 7.1 + 1412 3630 M-Audio Revolution 7.1 + 1412 3631 M-Audio Revolution 5.1 + 153b 1145 Aureon 7.1 Space + 153b 1147 Aureon 5.1 Sky + 153b 1150 PHASE 22 + 153b 1153 Aureon 7.1 Universe + 17ab 1906 PSC 724 [Ultimate Edge] + 270f f641 ZNF3-150 + 270f f645 ZNF3-250 + 3130 4154 MAYA 44 MKII +1413 Addonics +1414 Microsoft Corporation + 0001 MN-120 (ADMtek Centaur-C based) + 0002 MN-130 (ADMtek Centaur-P based) + 5801 XMA Decoder (Xenon) + 5802 SATA Controller - CdRom (Xenon) + 5803 SATA Controller - Disk (Xenon) + 5804 OHCI Controller 0 (Xenon) + 5805 EHCI Controller 0 (Xenon) + 5806 OHCI Controller 1 (Xenon) + 5807 EHCI Controller 1 (Xenon) + 580a Fast Ethernet Adapter (Xenon) + 580b Secure Flash Controller (Xenon) + 580d System Management Controller (Xenon) + 5811 Xenos GPU (Xenon) +1415 Oxford Semiconductor Ltd + 8401 OX9162 Mode 1 (8-bit bus) + 8403 OX9162 Mode 0 (parallel port) + 9500 OX16PCI954 (Quad 16950 UART) function 0 (Disabled) + 9501 OX16PCI954 (Quad 16950 UART) function 0 (Uart) + 12c4 0201 Titan/cPCI (2 port) + 12c4 0202 Titan/cPCI (4 port) + 12c4 0203 Titan/cPCI (8 port) + 12c4 0210 Titan/104-Plus (8 port, p1-4) + 131f 2050 CyberPro (4-port) +# Model IO1085, Part No: JJ-P46012 + 131f 2051 CyberSerial 4S Plus + 15ed 2000 MCCR Serial p0-3 of 8 + 15ed 2001 MCCR Serial p0-3 of 16 + 9505 16950 Compatible (dual) serial controller + 950a EXSYS EX-41092 Dual 16950 Serial adapter + 950b OXCB950 Cardbus 16950 UART + 9510 OX16PCI954 (Quad 16950 UART) function 1 (Disabled) + 12c4 0200 Titan/cPCI (Unused) + 9511 OX16PCI954 (Quad 16950 UART) function 1 (8bit bus) + 12c4 0211 Titan/104-Plus (8 port, p5-8) + 15ed 2000 MCCR Serial p4-7 of 8 + 15ed 2001 MCCR Serial p4-15 of 16 + 9512 OX16PCI954 (Quad 16950 UART) function 1 (32bit bus) + 9513 OX16PCI954 (Quad 16950 UART) function 1 (parallel port) + 9521 OX16PCI952 (Dual 16950 UART) + 9523 OX16PCI952 Integrated Parallel Port +1416 Multiwave Innovation pte Ltd +1417 Convergenet Technologies Inc +1418 Kyushu electronics systems Inc +1419 Excel Switching Corp +141a Apache Micro Peripherals Inc +141b Zoom Telephonics Inc +141d Digitan Systems Inc +141e Fanuc Ltd +141f Visiontech Ltd +1420 Psion Dacom plc + 8002 Gold Card NetGlobal 56k+10/100Mb CardBus (Ethernet part) + 8003 Gold Card NetGlobal 56k+10/100Mb CardBus (Modem part) +1421 Ads Technologies Inc +1422 Ygrec Systems Co Ltd +1423 Custom Technology Corp. +1424 Videoserver Connections +1425 Chelsio Communications Inc + 000b T210 Protocol Engine + 000c T204 Protocol Engine + 0022 10GbE Ethernet Adapter + 0030 T310 10GbE Single Port Adapter + 103c 705e PCIe 10GBase-SR [AD386A] + 0031 T320 10GbE Dual Port Adapter + 0032 T302 1GbE Dual Port Adapter + 0033 T304 1GbE Quad Port Adapter +1426 Storage Technology Corp. +1427 Better On-Line Solutions +1428 Edec Co Ltd +1429 Unex Technology Corp. +142a Kingmax Technology Inc +142b Radiolan +142c Minton Optic Industry Co Ltd +142d Pix stream Inc +142e Vitec Multimedia + 4020 VM2-2 [Video Maker 2] MPEG1/2 Encoder + 4337 VM2-2-C7 [Video Maker 2 rev. C7] MPEG1/2 Encoder +142f Radicom Research Inc +1430 ITT Aerospace/Communications Division +1431 Gilat Satellite Networks +1432 Edimax Computer Co. + 9130 RTL81xx Fast Ethernet +1433 Eltec Elektronik GmbH +# Nee Real Time Devices US Inc. +1435 RTD Embedded Technologies, Inc. + 4520 PCI4520 + 6020 SPM6020 + 6030 SPM6030 + 6420 SPM186420 + 6430 SPM176430 + 6431 SPM176431 + 7520 DM7520 + 7540 SDM7540 + 7820 DM7820 +1436 CIS Technology Inc +1437 Nissin Inc Co +1438 Atmel-dream +1439 Outsource Engineering & Mfg. Inc +143a Stargate Solutions Inc +143b Canon Research Center, America +143c Amlogic Inc +143d Tamarack Microelectronics Inc +143e Jones Futurex Inc +143f Lightwell Co Ltd - Zax Division +1440 ALGOL Corp. +1441 AGIE Ltd +1442 Phoenix Contact GmbH & Co. +1443 Unibrain S.A. +1444 TRW +1445 Logical DO Ltd +1446 Graphin Co Ltd +1447 AIM GmBH +1448 Alesis Studio Electronics +1449 TUT Systems Inc +144a Adlink Technology + 6208 PCI-6208V + 7250 PCI-7250 + 7296 PCI-7296 + 7432 PCI-7432 + 7433 PCI-7433 + 7434 PCI-7434 + 7841 PCI-7841 + 8133 PCI-8133 + 8164 PCI-8164 + 8554 PCI-8554 + 9111 PCI-9111 + 9113 PCI-9113 + 9114 PCI-9114 +# nee Loronix Information Systems Inc. +144b Verint Systems Inc. +144c Catalina Research Inc +144d Samsung Electronics Co Ltd + c00c P35 laptop + c511 R20 Laptop +144e OLITEC +144f Askey Computer Corp. +1450 Octave Communications Ind. +1451 SP3D Chip Design GmBH +1453 MYCOM Inc +1454 Altiga Networks +1455 Logic Plus Plus Inc +1456 Advanced Hardware Architectures +1457 Nuera Communications Inc +1458 Giga-byte Technology + 9001 GC-PTV-TAF Hybrid TV card + e911 GN-WIAG02 +1459 DOOIN Electronics +145a Escalate Networks Inc +145b PRAIM SRL +145c Cryptek +145d Gallant Computer Inc +145e Aashima Technology B.V. +145f Baldor Electric Company + 0001 NextMove PCI +1460 DYNARC INC +1461 Avermedia Technologies Inc + a3ce M179 + a3cf M179 + a836 M115 DVB-T, PAL/SECAM/NTSC Tuner + e836 M115S Hybrid Analog/DVB PAL/SECAM/NTSC Tuner + f436 AVerTV Hybrid+FM +1462 Micro-Star International Co., Ltd. + 5501 nVidia NV15DDR [GeForce2 Ti] + 6819 Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller [MSI CB54G] + 6825 PCI Card wireless 11g [PC54G] + 6834 RaLink RT2500 802.11g [PC54G2] + 7125 MS-7125 [K8N Neo4 Platinum] + 7235 P965 Neo MS-7235 mainboard + 7242 K9AGM RS485 Motherboard + 7250 MS-7250 Motherboard [K9N Platinum SLI/non-SLI] + 7327 K9AGM2-FIH Motherboard + 7650 Hetis 865GV-E (MS-7065) + 8725 NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter + 9000 NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter + 9110 GeFORCE FX5200 + 9119 NVIDIA NV31 [GeForce FX 5600XT] VGA Adapter + 9123 NVIDIA NV31 [GeForce FX 5600] FX5600-VTDR128 [MS-8912] + 9510 Radeon 9600XT + 9511 Radeon 9600XT + 9591 nVidia Corporation NV36 [GeForce FX 5700LE] + b834 Wireless 11g Turbo G PCI card [MSI PC60G] +1463 Fast Corporation +1464 Interactive Circuits & Systems Ltd +1465 GN NETTEST Telecom DIV. +1466 Designpro Inc. +1467 DIGICOM SPA +1468 AMBIT Microsystem Corp. +1469 Cleveland Motion Controls +146a IFR +146b Parascan Technologies Ltd +146c Ruby Tech Corp. + 1430 FE-1430TX Fast Ethernet PCI Adapter +146d Tachyon, INC. +146e Williams Electronics Games, Inc. +146f Multi Dimensional Consulting Inc +1470 Bay Networks +1471 Integrated Telecom Express Inc +1472 DAIKIN Industries, Ltd +1473 ZAPEX Technologies Inc +1474 Doug Carson & Associates +1475 PICAZO Communications +1476 MORTARA Instrument Inc +1477 Net Insight +1478 DIATREND Corporation +1479 TORAY Industries Inc +147a FORMOSA Industrial Computing +147b ABIT Computer Corp. + 1084 IP35 [Dark Raider] +147c AWARE, Inc. +147d Interworks Computer Products +147e Matsushita Graphic Communication Systems, Inc. +147f NIHON UNISYS, Ltd. +1480 SCII Telecom +1481 BIOPAC Systems Inc +1482 ISYTEC - Integrierte Systemtechnik GmBH + 0001 PCI-16 Host Interface for ITC-16 +1483 LABWAY Corporation +1484 Logic Corporation +1485 ERMA - Electronic GmBH +1486 L3 Communications Telemetry & Instrumentation +1487 MARQUETTE Medical Systems +1488 KONTRON Electronik GmBH +1489 KYE Systems Corporation +148a OPTO +148b INNOMEDIALOGIC Inc. +148c C.P. Technology Co. Ltd +148d DIGICOM Systems, Inc. + 1003 HCF 56k Data/Fax Modem +148e OSI Plus Corporation +148f Plant Equipment, Inc. +1490 Stone Microsystems PTY Ltd. +1491 ZEAL Corporation +1492 Time Logic Corporation +1493 MAKER Communications +1494 WINTOP Technology, Inc. +1495 TOKAI Communications Industry Co. Ltd +1496 JOYTECH Computer Co., Ltd. +1497 SMA Regelsysteme GmBH + 1497 SMA Technologie AG +1498 TEWS Technologies GmbH + 0330 TPMC816 2 Channel CAN bus controller. + 035d TPMC861 4-Channel Isolated Serial Interface RS422/RS485 + 0385 TPMC901 Extended CAN bus with 2/4/6 CAN controller + 21cc TCP460 CompactPCI 16 Channel Serial Interface RS232/RS422 + 21cd TCP461 CompactPCI 8 Channel Serial Interface RS232/RS422 + 30c8 TPCI200 +1499 EMTEC CO., Ltd +149a ANDOR Technology Ltd +149b SEIKO Instruments Inc +149c OVISLINK Corp. +149d NEWTEK Inc + 0001 Video Toaster for PC +149e Mapletree Networks Inc. +149f LECTRON Co Ltd +14a0 SOFTING GmBH +14a1 Systembase Co Ltd +14a2 Millennium Engineering Inc +14a3 Maverick Networks +14a4 GVC/BCM Advanced Research +14a5 XIONICS Document Technologies Inc +14a6 INOVA Computers GmBH & Co KG +14a7 MYTHOS Systems Inc +14a8 FEATRON Technologies Corporation +14a9 HIVERTEC Inc +14aa Advanced MOS Technology Inc +14ab Mentor Graphics Corp. +14ac Novaweb Technologies Inc +14ad Time Space Radio AB +14ae CTI, Inc +14af Guillemot Corporation + 7102 3D Prophet II MX +14b0 BST Communication Technology Ltd +14b1 Nextcom K.K. +14b2 ENNOVATE Networks Inc +14b3 XPEED Inc + 0000 DSL NIC +14b4 PHILIPS Business Electronics B.V. +14b5 Creamware GmBH + 0200 Scope + 0300 Pulsar + 0400 PulsarSRB + 0600 Pulsar2 + 0800 DSP-Board + 0900 DSP-Board + 0a00 DSP-Board + 0b00 DSP-Board +14b6 Quantum Data Corp. +14b7 PROXIM Inc + 0001 Symphony 4110 +14b8 Techsoft Technology Co Ltd +14b9 AIRONET Wireless Communications + 0001 PC4800 + 0340 PC4800 + 0350 PC4800 + 4500 PC4500 + 4800 Cisco Aironet 340 802.11b Wireless LAN Adapter/Aironet PC4800 + a504 Cisco Aironet Wireless 802.11b + a505 Cisco Aironet CB20a 802.11a Wireless LAN Adapter + a506 Cisco Aironet Mini PCI b/g +14ba INTERNIX Inc. +# ARCNET interface card based on SMSC COM20022 chip and manufactured for SMSC Japan + 0600 ARC-PCI/22 +14bb SEMTECH Corporation +14bc Globespan Semiconductor Inc. + d002 Pulsar [PCI ADSL Card] + d00f Pulsar [PCI ADSL Card] +14bd CARDIO Control N.V. +14be L3 Communications +14bf SPIDER Communications Inc. +14c0 COMPAL Electronics Inc +14c1 MYRICOM Inc. + 0008 Myri-10G Dual-Protocol NIC + 14c1 0008 10G-PCIE-8A + 14c1 0009 10G-PCIE-8A (MSI-X firmware) + 14c1 000a 10G-PCIE-8B + 14c1 000b 10G-PCIE-8B2 + 14c1 000c 10G-PCIE2-8B2 + 8043 Myrinet 2000 Scalable Cluster Interconnect + 103c 1240 Myrinet M2L-PCI64/2-3.0 LANai 7.4 (HP OEM) +14c2 DTK Computer +14c3 MEDIATEK Corp. +14c4 IWASAKI Information Systems Co Ltd +14c5 Automation Products AB +14c6 Data Race Inc +14c7 Modular Technology Holdings Ltd +14c8 Turbocomm Tech. Inc. +14c9 ODIN Telesystems Inc +14ca PE Logic Corp. +14cb Billionton Systems Inc +14cc NAKAYO Telecommunications Inc +14cd Universal Scientific Ind. +14ce Whistle Communications +14cf TEK Microsystems Inc. +14d0 Ericsson Axe R & D +14d1 Computer Hi-Tech Co Ltd +14d2 Titan Electronics Inc + 8001 VScom 010L 1 port parallel adaptor + 8002 VScom 020L 2 port parallel adaptor + 8010 VScom 100L 1 port serial adaptor + 8011 VScom 110L 1 port serial and 1 port parallel adaptor + 8020 VScom 200L 1 port serial adaptor + 8021 VScom 210L 2 port serial and 1 port parallel adaptor + 8028 VScom 200I/200I-SI 2-port serial adapter + 8040 VScom 400L 4 port serial adaptor + 8043 VScom 430L 4-port serial and 3-port parallel adapter + 8048 VScom 400I 4-port serial adapter + 8080 VScom 800L 8 port serial adaptor + 8088 VScom 800I 8-port serial adapter + a000 VScom 010H 1 port parallel adaptor + a001 VScom 100H 1 port serial adaptor + a003 VScom 400H 4 port serial adaptor + a004 VScom 400HF1 4 port serial adaptor + a005 VScom 200H 2 port serial adaptor + a007 VScom PCI800EH (PCIe) 8-port serial adapter Port 1-4 + a008 VScom PCI800EH (PCIe) 8-port serial adapter Port 5-8 + a009 VScom PCI400EH (PCIe) 4-port serial adapter + e001 VScom 010HV2 1 port parallel adaptor + e010 VScom 100HV2 1 port serial adaptor + e020 VScom 200HV2 2 port serial adaptor +14d3 CIRTECH (UK) Ltd +14d4 Panacom Technology Corp +14d5 Nitsuko Corporation +14d6 Accusys Inc + 6101 ACS-61xxx, PCIe to SAS/SATA RAID HBA + 6201 ACS-62xxx, External PCIe to SAS/SATA RAID controller +14d7 Hirakawa Hewtech Corp +14d8 HOPF Elektronik GmBH +# Formerly SiPackets, Inc., formerly API NetWorks, Inc., formerly Alpha Processor, Inc. +14d9 Alliance Semiconductor Corporation + 0010 AP1011/SP1011 HyperTransport-PCI Bridge [Sturgeon] + 9000 AS90L10204/10208 HyperTransport to PCI-X Bridge +14da National Aerospace Laboratories +14db AFAVLAB Technology Inc + 2120 TK9902 + 2182 AFAVLAB Technology Inc. 8-port serial card +14dc Amplicon Liveline Ltd + 0000 PCI230 + 0001 PCI242 + 0002 PCI244 + 0003 PCI247 + 0004 PCI248 + 0005 PCI249 + 0006 PCI260 + 0007 PCI224 + 0008 PCI234 + 0009 PCI236 + 000a PCI272 + 000b PCI215 +14dd Boulder Design Labs Inc +14de Applied Integration Corporation +14df ASIC Communications Corp +14e1 INVERTEX +14e2 INFOLIBRIA +14e3 AMTELCO +14e4 Broadcom Corporation + 0800 Sentry5 Chipcommon I/O Controller + 0804 Sentry5 PCI Bridge + 0805 Sentry5 MIPS32 CPU + 0806 Sentry5 Ethernet Controller + 080b Sentry5 Crypto Accelerator + 080f Sentry5 DDR/SDR RAM Controller + 0811 Sentry5 External Interface Core + 0816 BCM3302 Sentry5 MIPS32 CPU + 1600 NetXtreme BCM5752 Gigabit Ethernet PCI Express + 1028 01c2 Latitude D620 + 103c 3015 PCIe LAN on Motherboard + 107b 5048 E4500 Onboard + 1601 NetXtreme BCM5752M Gigabit Ethernet PCI Express + 1612 BCM70012 Video Decoder [Crystal HD] + 1639 NetXtreme II BCM5709 Gigabit Ethernet + 1028 0235 PowerEdge R710 BCM5709 Gigabit Ethernet + 1028 0236 PowerEdge R610 BCM5709 Gigabit Ethernet + 1028 0237 PowerEdge T610 BCM5709 Gigabit Ethernet + 103c 7055 NC382i Integrated Quad Port PCI Express Gigabit Server Adapter + 103c 7059 NC382T PCI Express Dual Port Multifunction Gigabit Server Adapter + 10a9 8027 Quad port Gigabit Ethernet Controller + 163a NetXtreme II BCM5709S Gigabit Ethernet + 1028 027b PowerEdge M805 Broadcom NetXtreme II BCM5709S + 1028 029c PowerEdge M710 BCM5709S Gigabit Ethernet + 103c 171d NC382m Dual Port 1GbE Multifunction BL-c Adapter + 103c 7056 NC382i Integrated Quad Port PCI Express Gigabit Server Adapter + 163b NetXtreme II BCM5716 Gigabit Ethernet + 1028 028c PowerEdge R410 BCM5716 Gigabit Ethernet + 1028 028d PowerEdge T410 BCM5716 Gigabit Ethernet + 163c NetXtreme II BCM5716S Gigabit Ethernet + 1644 NetXtreme BCM5700 Gigabit Ethernet + 1014 0277 Broadcom Vigil B5700 1000Base-T + 1028 00d1 Broadcom BCM5700 + 1028 0106 Broadcom BCM5700 + 1028 0109 Broadcom BCM5700 1000Base-T + 1028 010a Broadcom BCM5700 1000BaseTX + 10b7 1000 3C996-T 1000Base-T + 10b7 1001 3C996B-T 1000Base-T + 10b7 1002 3C996C-T 1000Base-T + 10b7 1003 3C997-T 1000Base-T Dual Port + 10b7 1004 3C996-SX 1000Base-SX + 10b7 1005 3C997-SX 1000Base-SX Dual Port + 10b7 1008 3C942 Gigabit LOM (31X31) + 14e4 0002 NetXtreme 1000Base-SX + 14e4 0003 NetXtreme 1000Base-SX + 14e4 0004 NetXtreme 1000Base-T + 14e4 1028 NetXtreme 1000BaseTX + 14e4 1644 BCM5700 1000Base-T + 1645 NetXtreme BCM5701 Gigabit Ethernet + 0e11 007c NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T) + 0e11 007d NC6770 Gigabit Server Adapter (PCI-X, 1000-SX) + 0e11 0085 NC7780 Gigabit Server Adapter (embedded, WOL) + 0e11 0099 NC7780 Gigabit Server Adapter (embedded, WOL) + 0e11 009a NC7770 Gigabit Server Adapter (PCI-X, 10/100/1000-T) + 0e11 00c1 NC6770 Gigabit Server Adapter (PCI-X, 1000-SX) + 1028 0121 Broadcom BCM5701 1000Base-T + 103c 128a BCM5701 1000Base-T (HP, OEM 3COM) + 103c 128b 1000Base-SX (PCI) [A7073A] + 103c 12a4 Core Lan 1000Base-T + 103c 12c1 IOX Core Lan 1000Base-T [A7109AX] + 103c 1300 Core LAN/SCSI Combo [A6794A] + 10a9 8010 IO9/IO10 Gigabit Ethernet (Copper) + 10a9 8011 Gigabit Ethernet (Copper) + 10a9 8012 Gigabit Ethernet (Fiber) + 10b7 1004 3C996-SX 1000Base-SX + 10b7 1006 3C996B-T 1000Base-T + 10b7 1007 3C1000-T 1000Base-T + 10b7 1008 3C940-BR01 1000Base-T + 14e4 0001 BCM5701 1000Base-T + 14e4 0005 BCM5701 1000Base-T + 14e4 0006 BCM5701 1000Base-T + 14e4 0007 BCM5701 1000Base-SX + 14e4 0008 BCM5701 1000Base-T + 14e4 1645 NetXtreme BCM5701 Gigabit Ethernet + 14e4 8008 BCM5701 1000Base-T + 1646 NetXtreme BCM5702 Gigabit Ethernet + 0e11 00bb NC7760 1000BaseTX + 1028 0126 Broadcom BCM5702 1000BaseTX + 14e4 8009 BCM5702 1000BaseTX + 1647 NetXtreme BCM5703 Gigabit Ethernet + 0e11 0099 NC7780 1000BaseTX + 0e11 009a NC7770 1000BaseTX + 10a9 8010 SGI IO9 Gigabit Ethernet (Copper) + 14e4 0009 BCM5703 1000BaseTX + 14e4 000a BCM5703 1000BaseSX + 14e4 000b BCM5703 1000BaseTX + 14e4 8009 BCM5703 1000BaseTX + 14e4 800a BCM5703 1000BaseTX + 1648 NetXtreme BCM5704 Gigabit Ethernet + 0e11 00cf NC7772 Gigabit Server Adapter (PCI-X, 10,100,1000-T) + 0e11 00d0 NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T) + 0e11 00d1 NC7783 Gigabit Server Adapter (PCI-X, 10,100,1000-T) + 1028 014a PowerEdge 1750 + 1028 0170 PowerEdge 6850 Broadcom NetXtreme BCM5704 + 103c 310f NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T) + 10a9 8013 Dual Port Gigabit Ethernet (PCI-X,Copper) + 10a9 8018 Dual Port Gigabit Ethernet (A330) + 10a9 801a Dual Port Gigabit Ethernet (IA-blade) + 10a9 801b Quad Port Gigabit Ethernet (PCI-E,Copper) + 10b7 2000 3C998-T Dual Port 10/100/1000 PCI-X + 10b7 3000 3C999-T Quad Port 10/100/1000 PCI-X + 1166 1648 NetXtreme CIOB-E 1000Base-T + 1734 100b PRIMERGY RX/TX series onboard LAN + 1649 NetXtreme BCM5704S_2 Gigabit Ethernet + 164a NetXtreme II BCM5706 Gigabit Ethernet + 103c 1709 NC371i Integrated PCI-X Multifunction Gigabit Server Adapter + 103c 3070 NC380T PCI Express Dual Port Multifunction Gigabit Server Adapter + 103c 3101 NC370T MultifuNCtion Gigabit Server Adapter + 103c 3106 NC370i Multifunction Gigabit Server Adapter + 164c NetXtreme II BCM5708 Gigabit Ethernet + 1028 01f0 PowerEdge R900 Broadcom NetXtreme II BCM5708 + 1028 0205 PowerEdge 2970 Broadcom NetXtreme II BCM5708 + 1028 020b PowerEdge T605 Broadcom NetXtreme II BCM5708 + 1028 0221 PowerEdge R805 Broadcom NetXtreme II BCM5708 + 1028 0223 PowerEdge R905 Broadcom NetXtreme II BCM5708 + 1028 1f12 PowerEdge R805/R905 Broadcom NetXtreme II BCM5708 + 103c 7037 NC373T PCI Express Multifunction Gigabit Server Adapter + 103c 7038 NC373i Integrated Multifunction Gigabit Server Adapter + 103c 7045 NC374m PCI Express Dual Port Multifunction Gigabit Server Adapter + 164d NetXtreme BCM5702FE Gigabit Ethernet + 164e NetXtreme II BCM57710 10-Gigabit PCIe [Everest] + 103c 171c NC532m Dual Port 10GbE Multifunction BL-C Adapter + 103c 7058 NC532i Dual Port 10GbE Multifunction BL-C Adapter + 164f NetXtreme II BCM57711 10-Gigabit PCIe + 1650 NetXtreme II BCM57711E 10-Gigabit PCIe + 103c 171c NC532m Dual Port 10GbE Multifunction BL-C Adapter + 103c 7058 NC532i Dual Port 10GbE Multifunction BL-C Adapter + 1653 NetXtreme BCM5705 Gigabit Ethernet + 0e11 00e3 NC7761 Gigabit Server Adapter + 1654 NetXtreme BCM5705_2 Gigabit Ethernet + 0e11 00e3 NC7761 Gigabit Server Adapter + 103c 3100 NC1020 ProLiant Gigabit Server Adapter 32 PCI + 103c 3226 NC150T 4-port Gigabit Combo Switch & Adapter + 1658 NetXtreme BCM5720 Gigabit Ethernet + 1659 NetXtreme BCM5721 Gigabit Ethernet PCI Express + 1014 02c6 eServer xSeries server mainboard + 1028 01e6 PowerEdge 860 + 1028 023c PowerEdge R200 Broadcom NetXtreme BCM5721 + 103c 170b NC320m PCI Express Dual Port Gigabit Server Adapter + 103c 7031 NC320T PCIe Gigabit Server Adapter + 103c 7032 NC320i PCIe Gigabit Server Adapter + 1734 1061 PRIMERGY RX/TX S2 series onboard LAN + 165a NetXtreme BCM5722 Gigabit Ethernet PCI Express +# Dual NIC server + 1014 0378 IBM System x3350 (Machine type 4192) + 1028 020f PowerEdge R300 Broadcom NetXtreme 5722 + 1028 0210 PowerEdge T300 Broadcom NetXtreme 5722 + 1028 0225 PowerEdge T105 Broadcom NetXtreme 5722 + 103c 7051 NC105i PCIe Gigabit Server Adapter + 103c 7052 NC105T PCIe Gigabit Server Adapter + 165b NetXtreme BCM5723 Gigabit Ethernet PCIe + 103c 705d NC107i Integrated PCI Express Gigabit Server Adapter + 165d NetXtreme BCM5705M Gigabit Ethernet + 1028 865d Latitude D400 + 14e4 165d Dell Latitude D600 + 165e NetXtreme BCM5705M_2 Gigabit Ethernet + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 099c NX6110/NC6120 + 10cf 1279 LifeBook E8010D + 1668 NetXtreme BCM5714 Gigabit Ethernet + 103c 7039 NC324i PCIe Dual Port Gigabit Server Adapter + 1669 NetXtreme 5714S Gigabit Ethernet + 166a NetXtreme BCM5780 Gigabit Ethernet + 103c 7035 NC325i Integrated Dual port PCIe Express Gigabit Server Adapter + 166b NetXtreme BCM5780S Gigabit Ethernet + 166e 570x 10/100 Integrated Controller + 1672 NetXtreme BCM5754M Gigabit Ethernet PCI Express + 1673 NetXtreme BCM5755M Gigabit Ethernet PCI Express + 1674 NetXtreme BCM5756ME Gigabit Ethernet PCI Express + 1676 NetXtreme BCM5750 Gigabit Ethernet + 1677 NetXtreme BCM5751 Gigabit Ethernet PCI Express + 1028 0176 Dimension XPS Gen 4 + 1028 0177 Dimension 8400 + 1028 0179 Optiplex GX280 + 1028 0182 Latitude D610 + 1028 0187 Precision M70 + 1028 01a8 Precision 380 + 1028 01ad OptiPlex GX620 + 103c 3006 DC7100 SFF(DX878AV) + 1462 028c 915P/G Neo2 + 1734 105d Scenic W620 + 1678 NetXtreme BCM5715 Gigabit Ethernet + 103c 703e NC326i PCIe Dual Port Gigabit Server Adapter + 1679 NetXtreme BCM5715S Gigabit Ethernet + 103c 1707 NC326m PCIe Dual Port Adapter + 103c 170c NC325m PCIe Quad Port Adapter + 103c 703c NC326i PCIe Dual Port Gigabit Server Adapter + 167a NetXtreme BCM5754 Gigabit Ethernet PCI Express + 1028 01da OptiPlex 745 + 1028 01de Precision 390 + 1028 01df PowerEdge SC440 + 1028 0214 Precision T3400 + 167b NetXtreme BCM5755 Gigabit Ethernet PCI Express + 103c 280a DC5750 Microtower + 167c NetXtreme BCM5750M Gigabit Ethernet + 167d NetXtreme BCM5751M Gigabit Ethernet PCI Express + 1014 0577 ThinkPad Z60t + 103c 0940 HP Compaq nw8240 Mobile Workstation + 17aa 2081 ThinkPad R60e + 167e NetXtreme BCM5751F Fast Ethernet PCI Express + 167f NetLink BCM5787F Fast Ethernet PCI Express + 1680 NetXtreme BCM5761e Gigabit Ethernet PCIe + 1681 NetXtreme BCM5761 Gigabit Ethernet PCIe + 1684 NetXtreme BCM5764M Gigabit Ethernet PCIe + 1690 NetXtreme BCM57760 Gigabit Ethernet PCIe + 1691 NetLink BCM57788 Gigabit Ethernet PCIe + 1692 NetLink BCM57780 Gigabit Ethernet PCIe + 1693 NetLink BCM5787M Gigabit Ethernet PCI Express + 1025 0121 Aspire 5920G + 103c 30c0 6710b + 1694 NetLink BCM57790 Gigabit Ethernet PCIe + 1696 NetXtreme BCM5782 Gigabit Ethernet + 103c 12bc d530 CMT (DG746A) + 14e4 000d NetXtreme BCM5782 1000Base-T + 1698 NetLink BCM5784M Gigabit Ethernet PCIe + 1699 NetLink BCM5785 Gigabit Ethernet + 169a NetLink BCM5786 Gigabit Ethernet PCI Express + 169b NetLink BCM5787 Gigabit Ethernet PCI Express + 169c NetXtreme BCM5788 Gigabit Ethernet + 103c 308b MX6125 + 103c 30a1 NC2400 + 144d c018 X20 + 1462 590c KT6 Delta-FIS2R (MS-6590) + 169d NetLink BCM5789 Gigabit Ethernet PCI Express + 16a0 NetLink BCM5785 Fast Ethernet + 16a6 NetXtreme BCM5702X Gigabit Ethernet + 0e11 00bb NC7760 Gigabit Server Adapter (PCI-X, 10/100/1000-T) + 1028 0126 BCM5702 1000Base-T + 14e4 000c BCM5702 1000Base-T + 14e4 8009 BCM5702 1000Base-T + 16a7 NetXtreme BCM5703X Gigabit Ethernet + 0e11 00ca NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T) + 0e11 00cb NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T) + 14e4 0009 NetXtreme BCM5703 1000Base-T + 14e4 000a NetXtreme BCM5703 1000Base-SX + 14e4 000b NetXtreme BCM5703 1000Base-T + 14e4 800a NetXtreme BCM5703 1000Base-T + 16a8 NetXtreme BCM5704S Gigabit Ethernet + 103c 132b PCI-X 1000Mbps Dual-port Built-in + 10a9 8014 Dual Port Gigabit Ethernet (PCI-X,Fiber) + 10a9 801c Quad Port Gigabit Ethernet (PCI-E,Fiber) + 10b7 2001 3C998-SX Dual Port 1000-SX PCI-X + 16aa NetXtreme II BCM5706S Gigabit Ethernet + 103c 3102 NC370F MultifuNCtion Gigabit Server Adapter + 103c 310c NC370i Multifunction Gigabit Server Adapter + 16ac NetXtreme II BCM5708S Gigabit Ethernet + 1014 0304 NetXtreme II BCM5708S Gigabit Ethernet + 1028 01bb PowerEdge 1955 Broadcom NetXtreme II BCM5708S + 1028 020c PowerEdge M605 Broadcom NetXtreme II BCM5708S + 103c 1706 NC373m Multifunction Gigabit Server Adapter + 103c 7038 NC373i PCI Express Multifunction Gigabit Server Adapter + 103c 703b NC373i Integrated Multifunction Gigabit Server Adapter + 103c 703d NC373F PCI Express Multifunction Gigabit Server Adapter + 16c6 NetXtreme BCM5702A3 Gigabit Ethernet + 10b7 1100 3C1000B-T 10/100/1000 PCI + 14e4 000c BCM5702 1000Base-T + 14e4 8009 BCM5702 1000Base-T + 16c7 NetXtreme BCM5703 Gigabit Ethernet + 0e11 00ca NC7771 Gigabit Server Adapter (PCI-X, 10,100,1000-T) + 0e11 00cb NC7781 Gigabit Server Adapter (PCI-X, 10,100,1000-T) + 103c 12c3 Combo FC/GigE-SX [A9782A] + 103c 12ca Combo FC/GigE-T [A9784A] + 103c 1321 Core I/O LAN/SCSI Combo [AB314A] + 14e4 0009 NetXtreme BCM5703 1000Base-T + 14e4 000a NetXtreme BCM5703 1000Base-SX + 16dd NetLink BCM5781 Gigabit Ethernet PCI Express + 16f7 NetXtreme BCM5753 Gigabit Ethernet PCI Express + 16fd NetXtreme BCM5753M Gigabit Ethernet PCI Express + 103c 309f Compaq nx9420 Notebook + 103c 30a3 Compaq nw8440 + 16fe NetXtreme BCM5753F Fast Ethernet PCI Express + 170c BCM4401-B0 100Base-TX + 1028 0188 Inspiron 6000 laptop + 1028 018d Inspiron 700m/710m + 1028 0196 Inspiron 5160 + 1028 01af Inspiron 6400 + 1028 01cd Inspiron 9400 Laptop + 1028 01d7 XPS M1210 + 1028 01d8 Inspiron E1405 + 103c 099c NX6110/NC6120 + 103c 30a2 NX7300 laptop + 14e4 170c HP Compaq 6720t Mobile Thin Client + 170d NetXtreme BCM5901 100Base-TX + 1014 0545 ThinkPad R40e + 170e NetXtreme BCM5901 100Base-TX + 1712 NetLink BCM5906 Fast Ethernet PCI Express + 1713 NetLink BCM5906M Fast Ethernet PCI Express + 1028 01f3 Inspiron 1420 + 1028 0209 XPS M1330 + 103c 30c0 Compaq 6710b + 17aa 3a23 IdeaPad S10e + 3352 BCM3352 + 3360 BCM3360 + 4210 BCM4210 iLine10 HomePNA 2.0 + 4211 BCM4211 iLine10 HomePNA 2.0 + V.90 56k modem + 4212 BCM4212 v.90 56k modem + 4220 802-11b/g Wireless PCI controller, packaged as a Linksys WPC54G ver 1.2 PCMCIA card + 4222 NetXtreme BCM5753M Gigabit Ethernet PCI Express + 4301 BCM4303 802.11b Wireless LAN Controller + 1028 0407 TrueMobile 1180 Onboard WLAN + 1043 0120 WL-103b Wireless LAN PC Card + 4305 BCM4307 V.90 56k Modem + 4306 BCM4307 Ethernet Controller + 4307 BCM4307 802.11b Wireless LAN Controller + 4310 BCM4310 Chipcommon I/OController + 4311 BCM4311 802.11b/g WLAN + 1028 0007 Wireless 1390 WLAN Mini-Card + 1028 0008 Wireless 1390 WLAN ExpressCard + 103c 1363 BCM4311 802.11b/g Wireless LAN Controller + 103c 1364 BCM4311 802.11b/g Wireless LAN Controller + 103c 1365 BCM4311 802.11b/g Wireless LAN Controller + 103c 1374 BCM4311 802.11b/g Wireless LAN Controller + 103c 1375 BCM4311 802.11b/g Wireless LAN Controller + 103c 1376 BCM4311 802.11b/g Wireless LAN Controller + 103c 1377 BCM4311 802.11b/g Wireless LAN Controller + 103c 137f BCM4322 802.11a/b/g/n Wireless LAN Controller + 103c 1380 BCM4322 802.11a/b/g/n Wireless LAN Controller + 14e4 4311 BCM94311MCG + 4312 BCM4312 802.11a/b/g + 1028 0007 Wireless 1490 Dual Band WLAN Mini-Card + 1028 0008 Wireless 1490 Dual Band WLAN ExpressCard + 103c 135a Broadcom 802.11a/b/g WLAN + 103c 135f Broadcom 802.11a/b/g WLAN + 103c 1360 Broadcom 802.11a/b/g WLAN + 103c 1361 Broadcom 802.11a/b/g WLAN + 103c 1362 Broadcom 802.11a/b/g WLAN + 103c 1370 Broadcom 802.11a/b/g WLAN + 103c 1371 Broadcom 802.11a/b/g WLAN + 103c 1372 Broadcom 802.11a/b/g WLAN + 103c 1373 Broadcom 802.11a/b/g WLAN + 103c 30b5 Presario V3242AU + 1371 103c Broadcom 802.11 Multiband-netwerkadapter(6715s) + 4313 BCM4310 Ethernet Controller + 4315 BCM4312 802.11b/g + 1028 000b Wireless 1395 WLAN Mini-Card + 1028 000c Wireless 1397 WLAN Mini-Card + 103c 137c BCM4312 802.11b/g Wireless LAN Controller + 103c 137d BCM4312 802.11b/g Wireless LAN Controller + 4318 BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller + 1028 0005 Wireless 1370 WLAN Mini-PCI Card + 1028 0006 Wireless 1370 WLAN PC Card + 103c 1355 Broadcom 802.11b/g WLAN + 103c 1356 Broadcom 802.11b/g WLAN + 103c 1357 Broadcom 802.11b/g WLAN + 1043 100f WL-138G V2 802.11g WLAN PCI Card + 1043 120f A6U notebook embedded card + 1154 0355 Buffalo WLI2-PCI-G54S High Speed Mode Wireless Adapter + 1468 0311 Aspire 3022WLMi, 5024WLMi, 5020 + 1468 0312 TravelMate 2410 + 14e4 0449 Gateway 7510GX + 14e4 4318 WPC54G version 3 [Wireless-G Notebook Adapter] 802.11g Wireless Lan Controller + 16ec 0119 U.S.Robotics Wireless MAXg PC Card + 1737 0042 WMP54GS version 1.1 [Wireless-G PCI Adapter] 802.11g w/SpeedBooster + 1737 0048 WPC54G-EU version 3 [Wireless-G Notebook Adapter] + 4319 BCM4311 [AirForce 54g] 802.11a/b/g PCI Express Transceiver + 1028 0005 Wireless 1470 Dual Band WLAN Mini-PCI Card + 1028 0006 Wireless 1470 Dual Band WLAN PC Card + 103c 1358 Broadcom 802.11a/b/g WLAN + 103c 1359 Broadcom 802.11a/b/g WLAN + 103c 135a Broadcom 802.11a/b/g WLAN + 4320 BCM4306 802.11b/g Wireless LAN Controller + 1028 0001 TrueMobile 1300 WLAN Mini-PCI Card + 1028 0002 TrueMobile 1300 WLAN PC Card + 1028 0003 Wireless 1350 WLAN Mini-PCI Card + 1028 0004 Wireless 1350 WLAN PC Card + 103c 12f4 Broadcom 802.11b/g WLAN + 103c 12f8 Broadcom 802.11b/g WLAN + 103c 12fa Broadcom 802.11b/g WLAN + 103c 12fb Broadcom 802.11b/g WLAN + 1043 100f WL-100G + 1057 7025 WN825G + 106b 004e AirPort Extreme + 1154 0330 Buffalo WLI2-PCI-G54S High Speed Mode Wireless Desktop Adapter + 144f 7050 eMachines M6805 802.11g Built-in Wireless + 144f 7051 Sonnet Aria Extreme PCI + 14e4 4320 Linksys WMP54G PCI + 1737 4320 WPC54G + 1799 7000 F5D7000uk 54G Wireless Network Card + 1799 7001 Belkin F5D7001 High-Speed Mode Wireless G Network Card + 1799 7010 Belkin F5D7010 54g Wireless Network card + 1799 7011 F5D7011 54g+ Wireless Network card + 185f 1220 TravelMate 290E WLAN Mini-PCI Card + 4321 BCM4306 802.11a Wireless LAN Controller + 4322 BCM4306 UART + 4324 BCM4309 802.11a/b/g + 1028 0001 Truemobile 1400 + 1028 0002 TrueMobile 1400 Dual Band WLAN PC Card + 1028 0003 Truemobile 1450 MiniPCI + 1028 0004 Wireless 1450 Dual Band WLAN PC Card + 103c 12f9 Broadcom 802.11a/b/g WLAN + 103c 12fc Broadcom 802.11a/b/g WLAN + 4325 BCM43xG 802.11b/g + 1414 0003 Wireless Notebook Adapter MN-720 + 1414 0004 Wireless PCI Adapter MN-730 + 4326 BCM4307 Chipcommon I/O Controller? + 4328 BCM4328 802.11a/b/g/n + 1028 0009 Wireless 1500 Draft 802.11n WLAN Mini-Card + 1028 000a Wireless 1500 Draft 802.11n WLAN Mini-card + 103c 1366 BCM4321 802.11a/b/g/n Wireless LAN Controller + 103c 1367 BCM4321 802.11a/b/g/n Wireless LAN Controller + 103c 1368 BCM4321 802.11a/b/g/n Wireless LAN Controller + 103c 1369 BCM4321 802.11a/b/g/n Wireless LAN Controller + 14e4 4328 BCM4328 802.11a/b/g/n + 4329 BCM43XG + 432b BCM4322 802.11a/b/g/n Wireless LAN Controller + 1028 000d Wireless 1510 Wireless-N WLAN Mini-Card + 4344 EDGE/GPRS data and 802.11b/g combo cardbus [GC89] + 4401 BCM4401 100Base-T + 1025 0035 TravelMate 660 + 103c 08b0 tc1100 tablet + 1043 80a8 A7V8X motherboard + 4402 BCM4402 Integrated 10/100BaseT + 4403 BCM4402 V.90 56k Modem + 4410 BCM4413 iLine32 HomePNA 2.0 + 4411 BCM4413 V.90 56k modem + 4412 BCM4412 10/100BaseT + 4430 BCM44xx CardBus iLine32 HomePNA 2.0 + 4432 BCM4432 CardBus 10/100BaseT + 4610 BCM4610 Sentry5 PCI to SB Bridge + 4611 BCM4610 Sentry5 iLine32 HomePNA 1.0 + 4612 BCM4610 Sentry5 V.90 56k Modem + 4613 BCM4610 Sentry5 Ethernet Controller + 4614 BCM4610 Sentry5 External Interface + 4615 BCM4610 Sentry5 USB Controller + 4704 BCM4704 PCI to SB Bridge + 4705 BCM4704 Sentry5 802.11b Wireless LAN Controller + 4706 BCM4704 Sentry5 Ethernet Controller + 4707 BCM4704 Sentry5 USB Controller + 4708 BCM4704 Crypto Accelerator + 4710 BCM4710 Sentry5 PCI to SB Bridge + 4711 BCM47xx Sentry5 iLine32 HomePNA 2.0 + 4712 BCM47xx V.92 56k modem + 4713 Sentry5 Ethernet Controller + 4714 BCM47xx Sentry5 External Interface + 4715 Sentry5 USB Controller + 4716 BCM47xx Sentry5 USB Host Controller + 4717 BCM47xx Sentry5 USB Device Controller + 4718 Sentry5 Crypto Accelerator + 4719 BCM47xx/53xx RoboSwitch Core + 4720 BCM4712 MIPS CPU + 5365 BCM5365P Sentry5 Host Bridge + 5600 BCM5600 StrataSwitch 24+2 Ethernet Switch Controller + 5605 BCM5605 StrataSwitch 24+2 Ethernet Switch Controller + 5615 BCM5615 StrataSwitch 24+2 Ethernet Switch Controller + 5625 BCM5625 StrataSwitch 24+2 Ethernet Switch Controller + 5645 BCM5645 StrataSwitch 24+2 Ethernet Switch Controller + 5670 BCM5670 8-Port 10GE Ethernet Switch Fabric + 5680 BCM5680 G-Switch 8 Port Gigabit Ethernet Switch Controller + 5690 BCM5690 12-port Multi-Layer Gigabit Ethernet Switch + 5691 BCM5691 GE/10GE 8+2 Gigabit Ethernet Switch Controller + 5692 BCM5692 12-port Multi-Layer Gigabit Ethernet Switch + 5695 BCM5695 12-port + HiGig Multi-Layer Gigabit Ethernet Switch + 5698 BCM5698 12-port Multi-Layer Gigabit Ethernet Switch + 5820 BCM5820 Crypto Accelerator + 5821 BCM5821 Crypto Accelerator + 5822 BCM5822 Crypto Accelerator + 5823 BCM5823 Crypto Accelerator + 5824 BCM5824 Crypto Accelerator + 5840 BCM5840 Crypto Accelerator + 5841 BCM5841 Crypto Accelerator + 5850 BCM5850 Crypto Accelerator + b800 BCM56800 StrataXGS 10GE Switch Controller +14e5 Pixelfusion Ltd +14e6 SHINING Technology Inc +14e7 3CX +14e8 RAYCER Inc +14e9 GARNETS System CO Ltd +14ea Planex Communications, Inc + ab06 FNW-3603-TX CardBus Fast Ethernet + ab07 RTL81xx RealTek Ethernet + ab08 FNW-3602-TX CardBus Fast Ethernet +14eb SEIKO EPSON Corp +14ec ACQIRIS +14ed DATAKINETICS Ltd +14ee MASPRO KENKOH Corp +14ef CARRY Computer ENG. CO Ltd +14f0 CANON RESEACH CENTRE FRANCE +14f1 Conexant Systems, Inc. + 1002 HCF 56k Modem + 1003 HCF 56k Modem + 1004 HCF 56k Modem + 1005 HCF 56k Modem + 1006 HCF 56k Modem + 1022 HCF 56k Modem + 1023 HCF 56k Modem + 1024 HCF 56k Modem + 1025 HCF 56k Modem + 1026 HCF 56k Modem + 1032 HCF 56k Modem + 1033 HCF 56k Data/Fax Modem + 1033 8077 NEC + 122d 4027 Dell Zeus - MDP3880-W(B) Data Fax Modem + 122d 4030 Dell Mercury - MDP3880-U(B) Data Fax Modem + 122d 4034 Dell Thor - MDP3880-W(U) Data Fax Modem + 13e0 020d Dell Copper + 13e0 020e Dell Silver + 13e0 0261 IBM + 13e0 0290 Compaq Goldwing + 13e0 02a0 IBM + 13e0 02b0 IBM + 13e0 02c0 Compaq Scooter + 13e0 02d0 IBM + 144f 1500 IBM P85-DF (1) + 144f 1501 IBM P85-DF (2) + 144f 150a IBM P85-DF (3) + 144f 150b IBM P85-DF Low Profile (1) + 144f 1510 IBM P85-DF Low Profile (2) + 1034 HCF 56k Data/Fax/Voice Modem + 1035 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem + 10cf 1098 Fujitsu P85-DFSV + 1036 HCF 56k Data/Fax/Voice/Spkp Modem + 104d 8067 HCF 56k Modem + 122d 4029 MDP3880SP-W + 122d 4031 MDP3880SP-U + 13e0 0209 Dell Titanium + 13e0 020a Dell Graphite + 13e0 0260 Gateway Red Owl + 13e0 0270 Gateway White Horse + 1052 HCF 56k Data/Fax Modem (Worldwide) + 1053 HCF 56k Data/Fax Modem (Worldwide) + 1054 HCF 56k Data/Fax/Voice Modem (Worldwide) + 1055 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide) + 1056 HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide) + 1057 HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide) + 1059 HCF 56k Data/Fax/Voice Modem (Worldwide) + 1063 HCF 56k Data/Fax Modem + 1064 HCF 56k Data/Fax/Voice Modem + 1065 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem + 1066 HCF 56k Data/Fax/Voice/Spkp Modem + 122d 4033 Dell Athena - MDP3900V-U + 1085 HCF V90 56k Data/Fax/Voice/Spkp PCI Modem + 10b6 CX06834-11 HCF V.92 56k Data/Fax/Voice/Spkp Modem + 1433 HCF 56k Data/Fax Modem + 1434 HCF 56k Data/Fax/Voice Modem + 1435 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem + 1436 HCF 56k Data/Fax Modem + 1453 HCF 56k Data/Fax Modem + 13e0 0240 IBM + 13e0 0250 IBM + 144f 1502 IBM P95-DF (1) + 144f 1503 IBM P95-DF (2) + 1454 HCF 56k Data/Fax/Voice Modem + 1455 HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem + 1456 HCF 56k Data/Fax/Voice/Spkp Modem + 122d 4035 Dell Europa - MDP3900V-W + 122d 4302 Dell MP3930V-W(C) MiniPCI + 1610 ADSL AccessRunner PCI Arbitration Device + 1611 AccessRunner PCI ADSL Interface Device + 1620 AccessRunner V2 PCI ADSL Arbitration Device + 1621 AccessRunner V2 PCI ADSL Interface Device + 1622 AccessRunner V2 PCI ADSL Yukon WAN Adapter + 1803 HCF 56k Modem + 0e11 0023 623-LAN Grizzly + 0e11 0043 623-LAN Yogi + 1811 MiniPCI Network Adapter + 1815 HCF 56k Modem + 0e11 0022 Grizzly + 0e11 0042 Yogi + 2003 HSF 56k Data/Fax Modem + 2004 HSF 56k Data/Fax/Voice Modem + 2005 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem + 2006 HSF 56k Data/Fax/Voice/Spkp Modem + 2013 HSF 56k Data/Fax Modem + 0e11 b195 Bear + 0e11 b196 Seminole 1 + 0e11 b1be Seminole 2 + 1025 8013 Acer + 1033 809d NEC + 1033 80bc NEC + 155d 6793 HP + 155d 8850 E Machines + 2014 HSF 56k Data/Fax/Voice Modem + 2015 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem + 2016 HSF 56k Data/Fax/Voice/Spkp Modem + 2043 HSF 56k Data/Fax Modem (WorldW SmartDAA) + 2044 HSF 56k Data/Fax/Voice Modem (WorldW SmartDAA) + 2045 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (WorldW SmartDAA) + 14f1 2045 Generic SoftK56 + 2046 HSF 56k Data/Fax/Voice/Spkp Modem (WorldW SmartDAA) + 2063 HSF 56k Data/Fax Modem (SmartDAA) + 2064 HSF 56k Data/Fax/Voice Modem (SmartDAA) + 2065 HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (SmartDAA) + 2066 HSF 56k Data/Fax/Voice/Spkp Modem (SmartDAA) + 2093 HSF 56k Modem + 155d 2f07 Legend + 2143 HSF 56k Data/Fax/Cell Modem (Mob WorldW SmartDAA) + 2144 HSF 56k Data/Fax/Voice/Cell Modem (Mob WorldW SmartDAA) + 2145 HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob WorldW SmartDAA) + 2146 HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob WorldW SmartDAA) + 2163 HSF 56k Data/Fax/Cell Modem (Mob SmartDAA) + 2164 HSF 56k Data/Fax/Voice/Cell Modem (Mob SmartDAA) + 2165 HSF 56k Data/Fax/Voice/Spkp (w/HS)/Cell Modem (Mob SmartDAA) + 2166 HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mob SmartDAA) + 2343 HSF 56k Data/Fax CardBus Modem (Mob WorldW SmartDAA) + 2344 HSF 56k Data/Fax/Voice CardBus Modem (Mob WorldW SmartDAA) + 2345 HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob WorldW SmartDAA) + 2346 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob WorldW SmartDAA) + 2363 HSF 56k Data/Fax CardBus Modem (Mob SmartDAA) + 2364 HSF 56k Data/Fax/Voice CardBus Modem (Mob SmartDAA) + 2365 HSF 56k Data/Fax/Voice/Spkp (w/HS) CardBus Modem (Mob SmartDAA) + 2366 HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mob SmartDAA) + 2443 HSF 56k Data/Fax Modem (Mob WorldW SmartDAA) + 104d 8075 Modem + 104d 8083 Modem + 104d 8097 Modem + 2444 HSF 56k Data/Fax/Voice Modem (Mob WorldW SmartDAA) + 2445 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob WorldW SmartDAA) + 2446 HSF 56k Data/Fax/Voice/Spkp Modem (Mob WorldW SmartDAA) + 2463 HSF 56k Data/Fax Modem (Mob SmartDAA) + 2464 HSF 56k Data/Fax/Voice Modem (Mob SmartDAA) + 2465 HSF 56k Data/Fax/Voice/Spkp (w/HS) Modem (Mob SmartDAA) + 2466 HSF 56k Data/Fax/Voice/Spkp Modem (Mob SmartDAA) + 2bfa D110 HDAudio Soft Data Fax Modem with SmartCP + 1025 0009 Aspire 5622WLMi + 2f00 HSF 56k HSFi Modem + 13e0 8d84 IBM HSFi V.90 + 13e0 8d85 Compaq Stinger + 14f1 2004 Dynalink 56PMi + 2f02 HSF 56k HSFi Data/Fax + 2f11 HSF 56k HSFi Modem + 2f20 HSF 56k Data/Fax Modem + 14f1 200c Soft Data Fax Modem with SmartCP + 14f1 200f Dimension 3000 + 2f30 SoftV92 SpeakerPhone SoftRing Modem with SmartSP + 14f1 2014 Devolo MikroLink 56K Modem PCI + 2f50 Conexant SoftK56 Data/Fax Modem + 5045 CX20549 (Venice) + 5047 High Definition Audio [Waikiki] + 5051 High Definition Audio (HERMOSA) + 5b7a CX23418 Single-Chip MPEG-2 Encoder with Integrated Analog Video/Broadcast Audio Decoder + 0070 7444 WinTV HVR-1600 + 8234 RS8234 ATM SAR Controller [ServiceSAR Plus] + 8800 CX23880/1/2/3 PCI Video and Audio Decoder + 0070 2801 Hauppauge WinTV 28xxx (Roslyn) models + 0070 3401 Hauppauge WinTV 34xxx models + 0070 6902 WinTV HVR-4000-HD + 0070 7801 WinTV HVR-1800 MCE + 0070 9001 Nova-T DVB-T + 0070 9200 Nova-SE2 DVB-S + 0070 9202 Nova-S-Plus DVB-S + 0070 9402 WinTV-HVR1100 DVB-T/Hybrid + 0070 9600 WinTV 88x Video + 0070 9802 WinTV-HVR1100 DVB-T/Hybrid (Low Profile) + 1002 00f8 ATI TV Wonder Pro + 1002 a101 HDTV Wonder + 1043 4823 ASUS PVR-416 + 107d 6611 Winfast TV 2000XP Expert + 107d 6613 Leadtek Winfast 2000XP Expert + 107d 6620 Leadtek Winfast DV2000 + 107d 663c Leadtek PVR 2000 + 107d 665f WinFast DTV1000-T + 10fc d003 IODATA GV-VCP3/PCI + 10fc d035 IODATA GV/BCTV7E + 1421 0334 Instant TV DVB-T PCI + 1461 000a AVerTV 303 (M126) + 1461 000b AverTV Studio 303 (M126) + 1461 8011 UltraTV Media Center PCI 550 + 1462 8606 MSI TV-@nywhere Master + 14c7 0107 GDI Black Gold + 14f1 0187 Conexant DVB-T reference design + 14f1 0342 Digital-Logic MICROSPACE Entertainment Center (MEC) + 153b 1166 Cinergy 1400 DVB-T + 1540 2580 Provideo PV259 + 1554 4811 PixelView + 1554 4813 Club 3D ZAP1000 MCE Edition + 17de 08a1 KWorld/VStream XPert DVB-T with cx22702 + 17de 08a6 KWorld/VStream XPert DVB-T + 17de 08b2 KWorld DVB-S 100 + 17de a8a6 digitalnow DNTV Live! DVB-T + 1822 0025 digitalnow DNTV Live! DVB-T Pro + 185b e000 VideoMate X500 + 18ac d500 FusionHDTV 5 Gold + 18ac d810 FusionHDTV 3 Gold-Q + 18ac d820 FusionHDTV 3 Gold-T + 18ac db00 FusionHDTV DVB-T1 + 18ac db11 FusionHDTV DVB-T Plus + 18ac db50 FusionHDTV DVB-T Dual Digital + 7063 3000 pcHDTV HD3000 HDTV + 7063 5500 pcHDTV HD-5500 + 8801 CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port] + 0070 2801 Hauppauge WinTV 28xxx (Roslyn) models + 185b e000 VideoMate X500 + 7063 5500 pcHDTV HD-5500 + 8802 CX23880/1/2/3 PCI Video and Audio Decoder [MPEG Port] + 0070 2801 Hauppauge WinTV 28xxx (Roslyn) models + 0070 6902 WinTV HVR-4000-HD + 0070 9002 Nova-T DVB-T Model 909 + 0070 9402 WinTV-HVR1100 DVB-T/Hybrid + 0070 9600 WinTV 88x MPEG Encoder + 1043 4823 ASUS PVR-416 + 107d 663c Leadtek PVR 2000 + 107d 665f WinFast DTV1000-T + 14f1 0187 Conexant DVB-T reference design + 17de 08a1 XPert DVB-T PCI BDA DVBT 23880 Transport Stream Capture + 17de 08a6 KWorld/VStream XPert DVB-T + 18ac d500 DViCO FusionHDTV5 Gold + 18ac d810 DViCO FusionHDTV3 Gold-Q + 18ac d820 DViCO FusionHDTV3 Gold-T + 18ac db00 DVICO FusionHDTV DVB-T1 + 18ac db10 DVICO FusionHDTV DVB-T Plus + 7063 3000 pcHDTV HD3000 HDTV + 7063 5500 pcHDTV HD-5500 + 8804 CX23880/1/2/3 PCI Video and Audio Decoder [IR Port] + 0070 6902 WinTV HVR-4000-HD + 0070 9002 Nova-T DVB-T Model 909 + 0070 9402 WinTV-HVR1100 DVB-T/Hybrid + 7063 5500 pcHDTV HD-5500 + 8811 CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port] + 0070 3401 Hauppauge WinTV 34xxx models + 0070 6902 WinTV HVR-4000-HD + 0070 9402 WinTV-HVR1100 DVB-T/Hybrid + 0070 9600 WinTV 88x Audio + 1462 8606 MSI TV-@nywhere Master + 18ac d500 DViCO FusionHDTV5 Gold + 18ac d810 DViCO FusionHDTV3 Gold-Q + 18ac d820 DViCO FusionHDTV3 Gold-T + 18ac db00 DVICO FusionHDTV DVB-T1 + 8852 CX23885 PCI Video and Audio Decoder + 0070 8010 Hauppauge WinTV HVR-1400 ExpressCard + 1461 c039 AVerTV Hybrid Express (A577) + 18ac db78 FusionHDTV DVB-T Dual Express + 8880 Hauppauge Inc. HDPVR-1250 model 1196 +14f2 MOBILITY Electronics + 0120 EV1000 bridge + 0121 EV1000 Parallel port + 0122 EV1000 Serial port + 0123 EV1000 Keyboard controller + 0124 EV1000 Mouse controller +14f3 BroadLogic + 2030 2030 DVB-S Satellite Receiver + 2035 2035 DVB-S Satellite Receiver + 2050 2050 DVB-T Terrestrial (Cable) Receiver + 2060 2060 ATSC Terrestrial (Cable) Receiver +14f4 TOKYO Electronic Industry CO Ltd +14f5 SOPAC Ltd +14f6 COYOTE Technologies LLC +14f7 WOLF Technology Inc +14f8 AUDIOCODES Inc + 2077 TP-240 dual span E1 VoIP PCI card +14f9 AG COMMUNICATIONS +14fa WANDEL & GOLTERMANN +14fb TRANSAS MARINE (UK) Ltd +14fc Quadrics Ltd + 0000 QsNet Elan3 Network Adapter + 0001 QsNetII Elan4 Network Adapter + 0002 QsNetIII Elan5 Network Adapter +14fd JAPAN Computer Industry Inc +14fe ARCHTEK TELECOM Corp +14ff TWINHEAD INTERNATIONAL Corp +1500 DELTA Electronics, Inc + 1360 RTL81xx RealTek Ethernet +1501 BANKSOFT CANADA Ltd +1502 MITSUBISHI ELECTRIC LOGISTICS SUPPORT Co Ltd +1503 KAWASAKI LSI USA Inc +1504 KAISER Electronics +1505 ITA INGENIEURBURO FUR TESTAUFGABEN GmbH +1506 CHAMELEON Systems Inc +# Should be HTEC Ltd, but there are no known HTEC chips and 1507 is already used by mistake by Motorola (see vendor ID 1057). +1507 Motorola ?? / HTEC + 0001 MPC105 [Eagle] + 0002 MPC106 [Grackle] + 0003 MPC8240 [Kahlua] + 0100 MC145575 [HFC-PCI] + 0431 KTI829c 100VG + 4801 Raven + 4802 Falcon + 4803 Hawk + 4806 CPX8216 +1508 HONDA CONNECTORS/MHOTRONICS Inc +1509 FIRST INTERNATIONAL Computer Inc +150a FORVUS RESEARCH Inc +150b YAMASHITA Systems Corp +150c KYOPAL CO Ltd +150d WARPSPPED Inc +150e C-PORT Corp +150f INTEC GmbH +1510 BEHAVIOR TECH Computer Corp +1511 CENTILLIUM Technology Corp +1512 ROSUN Technologies Inc +1513 Raychem +1514 TFL LAN Inc +1515 Advent design +1516 MYSON Technology Inc + 0800 MTD-8xx 100/10M Ethernet PCI Adapter + 0803 SURECOM EP-320X-S 100/10M Ethernet PCI Adapter + 1320 10bd SURECOM EP-320X-S 100/10M Ethernet PCI Adapter + 0891 MTD-8xx 100/10M Ethernet PCI Adapter +1517 ECHOTEK Corp +# nee PEP MODULAR Computers GmbH +1518 Kontron Modular Computers GmbH +1519 TELEFON AKTIEBOLAGET LM Ericsson +151a Globetek + 1002 PCI-1002 + 1004 PCI-1004 + 1008 PCI-1008 +151b COMBOX Ltd +151c DIGITAL AUDIO LABS Inc + 0003 Prodif T 2496 + 4000 Prodif 88 +151d Fujitsu Computer Products Of America +151e MATRIX Corp +151f TOPIC SEMICONDUCTOR Corp + 0000 TP560 Data/Fax/Voice 56k modem +1520 CHAPLET System Inc +1521 BELL Corp +1522 MainPine Ltd + 0100 PCI <-> IOBus Bridge + 1522 0200 RockForceDUO 2 Port V.92/V.44 Data/Fax/Voice Modem + 1522 0300 RockForceQUATRO 4 Port V.92/V.44 Data/Fax/Voice Modem + 1522 0400 RockForceDUO+ 2 Port V.92/V.44 Data/Fax/Voice Modem + 1522 0500 RockForceQUATRO+ 4 Port V.92/V.44 Data/Fax/Voice Modem + 1522 0600 RockForce+ 2 Port V.90 Data/Fax/Voice Modem + 1522 0700 RockForce+ 4 Port V.90 Data/Fax/Voice Modem + 1522 0800 RockForceOCTO+ 8 Port V.92/V.44 Data/Fax/Voice Modem + 1522 0c00 RockForceDUO+ 2 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem + 1522 0d00 RockForceQUATRO+ 4 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem + 1522 1d00 RockForceOCTO+ 8 Port V.92/V.44 Data, V.34 Super-G3 Fax, Voice Modem + 1522 2000 RockForceD1 1 Port V.90 Data Modem + 1522 2100 RockForceF1 1 Port V.34 Super-G3 Fax Modem + 1522 2200 RockForceD2 2 Port V.90 Data Modem + 1522 2300 RockForceF2 2 Port V.34 Super-G3 Fax Modem + 1522 2400 RockForceD4 4 Port V.90 Data Modem + 1522 2500 RockForceF4 4 Port V.34 Super-G3 Fax Modem + 1522 2600 RockForceD8 8 Port V.90 Data Modem + 1522 2700 RockForceF8 8 Port V.34 Super-G3 Fax Modem + 1522 3000 IQ Express D1 - 1 Port V.92 Data Modem + 1522 3100 IQ Express F1 - 1 Port V.34 Super-G3 Fax Modem + 1522 3200 IQ Express D2 - 2 Port V.92 Data Modem + 1522 3300 IQ Express F2 - 2 Port V.34 Super-G3 Fax Modem + 1522 3400 IQ Express D4 - 4 Port V.92 Data Modem + 1522 3500 IQ Express F4 - 4 Port V.34 Super-G3 Fax Modem + 1522 3c00 IQ Express D8 - 8 Port V.92 Data Modem + 1522 3d00 IQ Express F8 - 8 Port V.34 Super-G3 Fax Modem + 4000 PCI Express UART + 1522 4001 IQ Express 1-port V.34 Super-G3 Fax + 1522 4002 IQ Express 2-port V.34 Super-G3 Fax + 1522 4004 IQ Express 4-port V.34 Super-G3 Fax + 1522 4008 IQ Express 8-port V.34 Super-G3 Fax + 1522 4100 IQ Express SideBand +1523 MUSIC Semiconductors +1524 ENE Technology Inc + 0510 CB710 Memory Card Reader Controller + 103c 006a NX9500 + 0520 FLASH memory: ENE Technology Inc: + 0530 ENE PCI Memory Stick Card Reader Controller + 0550 ENE PCI Secure Digital Card Reader Controller + 0551 SD/MMC Card Reader Controller + 0610 PCI Smart Card Reader Controller + 0720 Memory Stick Card Reader Controller + 0730 ENE PCI Memory Stick Card Reader Controller + 0750 ENE PCI SmartMedia / xD Card Reader Controller + 0751 ENE PCI Secure Digital / MMC Card Reader Controller + 1211 CB1211 Cardbus Controller + 1225 CB1225 Cardbus Controller + 1410 CB1410 Cardbus Controller + 1025 003c CL50 motherboard + 1025 005a TravelMate 290 + 1411 CB-710/2/4 Cardbus Controller + 103c 006a NX9500 + 1412 CB-712/4 Cardbus Controller + 1420 CB1420 Cardbus Controller + 1421 CB-720/2/4 Cardbus Controller + 1422 CB-722/4 Cardbus Controller +1525 IMPACT Technologies +1526 ISS, Inc +1527 SOLECTRON +1528 ACKSYS +1529 AMERICAN MICROSystems Inc +152a QUICKTURN DESIGN Systems +152b FLYTECH Technology CO Ltd +152c MACRAIGOR Systems LLC +152d QUANTA Computer Inc +152e MELEC Inc +152f PHILIPS - CRYPTO +1530 ACQIS Technology Inc +1531 CHRYON Corp +1532 ECHELON Corp + 0020 LonWorks PCLTA-20 PCI LonTalk Adapter +1533 BALTIMORE +1534 ROAD Corp +1535 EVERGREEN Technologies Inc +1536 ACTIS Computer +1537 DATALEX COMMUNCATIONS +1538 ARALION Inc + 0303 ARS106S Ultra ATA 133/100/66 Host Controller +1539 ATELIER INFORMATIQUES et ELECTRONIQUE ETUDES S.A. +153a ONO SOKKI +153b TERRATEC Electronic GmbH + 1144 Aureon 5.1 +# Terratec seems to use several IDs for the same card. + 1147 Aureon 5.1 Sky + 1158 Philips Semiconductors SAA7134 (rev 01) [Terratec Cinergy 600 TV] +153c ANTAL Electronic +153d FILANET Corp +153e TECHWELL Inc +153f MIPS Technologies, Inc. + 0001 SOC-it 101 System Controller +1540 PROVIDEO MULTIMEDIA Co Ltd +1541 MACHONE Communications +1542 Concurrent Computer Corporation + 9260 RCIM-II Real-Time Clock & Interrupt Module +1543 SILICON Laboratories + 3052 Intel 537 [Winmodem] + 3155 Motorola SM56 Speakerphone Modem + 4c22 Si3036 MC'97 DAA +1544 DCM DATA Systems +1545 VISIONTEK +1546 IOI Technology Corp +1547 MITUTOYO Corp +1548 JET PROPULSION Laboratory +1549 INTERCONNECT Systems Solutions +154a MAX Technologies Inc +154b COMPUTEX Co Ltd +154c VISUAL Technology Inc +154d PAN INTERNATIONAL Industrial Corp +154e SERVOTEST Ltd +154f STRATABEAM Technology +1550 OPEN NETWORK Co Ltd +1551 SMART Electronic DEVELOPMENT GmBH +1552 RACAL AIRTECH Ltd +1553 CHICONY Electronics Co Ltd +1554 PROLINK Microsystems Corp +1555 GESYTEC GmBH +1556 PLD APPLICATIONS +1557 MEDIASTAR Co Ltd +1558 CLEVO/KAPOK Computer +1559 SI LOGIC Ltd +155a INNOMEDIA Inc +155b PROTAC INTERNATIONAL Corp +155c Cemax-Icon Inc +155d Mac System Co Ltd +155e LP Elektronik GmbH +155f Perle Systems Ltd +1560 Terayon Communications Systems +1561 Viewgraphics Inc +1562 Symbol Technologies +1563 A-Trend Technology Co Ltd +1564 Yamakatsu Electronics Industry Co Ltd +1565 Biostar Microtech Int'l Corp +1566 Ardent Technologies Inc +1567 Jungsoft +1568 DDK Electronics Inc +1569 Palit Microsystems Inc. +156a Avtec Systems +156b 2wire Inc +156c Vidac Electronics GmbH +156d Alpha-Top Corp +156e Alfa Inc +156f M-Systems Flash Disk Pioneers Ltd +1570 Lecroy Corp +1571 Contemporary Controls + a001 CCSI PCI20-485 ARCnet + a002 CCSI PCI20-485D ARCnet + a003 CCSI PCI20-485X ARCnet + a004 CCSI PCI20-CXB ARCnet + a005 CCSI PCI20-CXS ARCnet + a006 CCSI PCI20-FOG-SMA ARCnet + a007 CCSI PCI20-FOG-ST ARCnet + a008 CCSI PCI20-TB5 ARCnet + a009 CCSI PCI20-5-485 5Mbit ARCnet + a00a CCSI PCI20-5-485D 5Mbit ARCnet + a00b CCSI PCI20-5-485X 5Mbit ARCnet + a00c CCSI PCI20-5-FOG-ST 5Mbit ARCnet + a00d CCSI PCI20-5-FOG-SMA 5Mbit ARCnet + a201 CCSI PCI22-485 10Mbit ARCnet + a202 CCSI PCI22-485D 10Mbit ARCnet + a203 CCSI PCI22-485X 10Mbit ARCnet + a204 CCSI PCI22-CHB 10Mbit ARCnet + a205 CCSI PCI22-FOG_ST 10Mbit ARCnet + a206 CCSI PCI22-THB 10Mbit ARCnet +1572 Otis Elevator Company +1573 Lattice - Vantis +1574 Fairchild Semiconductor +1575 Voltaire Advanced Data Security Ltd +1576 Viewcast COM +1578 HITT + 4d34 VPMK4 [Video Processor Mk IV] + 5615 VPMK3 [Video Processor Mk III] +1579 Dual Technology Corp +157a Japan Elecronics Ind Inc +157b Star Multimedia Corp +157c Eurosoft (UK) + 8001 Fix2000 PCI Y2K Compliance Card +157d Gemflex Networks +157e Transition Networks +157f PX Instruments Technology Ltd +1580 Primex Aerospace Co +1581 SEH Computertechnik GmbH +1582 Cytec Corp +1583 Inet Technologies Inc +1584 Uniwill Computer Corp +1585 Logitron +1586 Lancast Inc +1587 Konica Corp +1588 Solidum Systems Corp +1589 Atlantek Microsystems Pty Ltd + 0008 Leutron Vision PicPortExpress CL + 0009 Leutron Vision PicPortExpress CL Stereo +158a Digalog Systems Inc +158b Allied Data Technologies +158c Hitachi Semiconductor & Devices Sales Co Ltd +158d Point Multimedia Systems +158e Lara Technology Inc +158f Ditect Coop +1590 3PAR Inc. + 0001 Eagle Cluster Manager + 0002 Osprey Cluster Manager + 0003 Harrier Cluster Manager + a01d FC044X Fibre Channel HBA +1591 ARN +1592 Syba Tech Ltd + 0781 Multi-IO Card + 0782 Parallel Port Card 2xEPP + 0783 Multi-IO Card + 0785 Multi-IO Card + 0786 Multi-IO Card + 0787 Multi-IO Card + 0788 Multi-IO Card + 078a Multi-IO Card +1593 Bops Inc +1594 Netgame Ltd +1595 Diva Systems Corp +1596 Folsom Research Inc +1597 Memec Design Services +1598 Granite Microsystems +1599 Delta Electronics Inc +159a General Instrument +159b Faraday Technology Corp +159c Stratus Computer Systems +159d Ningbo Harrison Electronics Co Ltd +159e A-Max Technology Co Ltd +159f Galea Network Security +15a0 Compumaster SRL +15a1 Geocast Network Systems +15a2 Catalyst Enterprises Inc + 0001 TA700 PCI Bus Analyzer/Exerciser +15a3 Italtel +15a4 X-Net OY +15a5 Toyota Macs Inc +15a6 Sunlight Ultrasound Technologies Ltd +15a7 SSE Telecom Inc +15a8 Shanghai Communications Technologies Center +15aa Moreton Bay +15ab Bluesteel Networks Inc +15ac North Atlantic Instruments +15ad VMware + 0405 SVGA II Adapter + 0710 SVGA Adapter + 0720 VMXNET Ethernet Controller + 0740 Virtual Machine Communication Interface + 0770 USB2 EHCI Controller + 0790 PCI bridge + 07a0 PCI Express Root Port + 07b0 VMXNET3 Ethernet Controller + 07c0 PVSCSI SCSI Controller + 0801 Virtual Machine Interface + 15ad 0800 Hypervisor ROM Interface +15ae Amersham Pharmacia Biotech +15b0 Zoltrix International Ltd +15b1 Source Technology Inc +15b2 Mosaid Technologies Inc +15b3 Mellanox Technologies + 0191 MT25408 [ConnectX IB SDR Flash Recovery] + 5274 MT21108 InfiniBridge + 5a44 MT23108 InfiniHost + 5a45 MT23108 [Infinihost HCA Flash Recovery] + 5a46 MT23108 PCI Bridge + 5e8c MT24204 [InfiniHost III Lx HCA] + 5e8d MT25204 [InfiniHost III Lx HCA Flash Recovery] + 6274 MT25204 [InfiniHost III Lx HCA] + 6278 MT25208 InfiniHost III Ex (Tavor compatibility mode) + 6279 MT25208 [InfiniHost III Ex HCA Flash Recovery] + 6282 MT25208 [InfiniHost III Ex] + 6340 MT25408 [ConnectX VPI - IB SDR / 10GigE] + 634a MT25418 [ConnectX VPI PCIe 2.0 2.5GT/s - IB DDR / 10GigE] + 6368 MT25448 [ConnectX EN 10GigE, PCIe 2.0 2.5GT/s] + 6372 MT25408 [ConnectX EN 10GigE 10GBaseT, PCIe 2.0 2.5GT/s] + 6732 MT26418 [ConnectX VPI PCIe 2.0 5GT/s - IB DDR / 10GigE] + 673c MT26428 [ConnectX VPI PCIe 2.0 5GT/s - IB QDR / 10GigE] + 6746 MT25408 [ConnectX EN 40GigE PCIe 2.0 5GT/s] + 6750 MT26448 [ConnectX EN 10GigE, PCIe 2.0 5GT/s] + 675a MT25408 [ConnectX EN 10GigE 10GBaseT, PCIe Gen2 5GT/s] + 6764 MT26468 [ConnectX EN 10GigE, PCIe 2.0 5GT/s] +15b4 CCI/TRIAD +15b5 Cimetrics Inc +15b6 Texas Memory Systems Inc + 0001 XP15 DSP Accelerator + 0002 XP30 DSP Accelerator + 0003 XP00 Data Acquisition Device + 0004 XP35 DSP Accelerator + 0007 XP100 DSP Accelerator [XP100-T0] + 0008 XP100 DSP Accelerator [XP100-T1] + 0009 XP100 DSP Accelerator [XP100-E0] + 000a XP100 DSP Accelerator [XP100-E1] + 000e XP100 DSP Accelerator [XP100-0] + 000f XP100 DSP Accelerator [XP100-1] + 0010 XP100 DSP Accelerator [XP100-P0] + 0011 XP100 DSP Accelerator [XP100-P1] + 0012 XP100 DSP Accelerator [XP100-P2] + 0013 XP100 DSP Accelerator [XP100-P3] + 0014 RamSan Flash SSD + 0015 ZBox +15b7 Sandisk Corp +15b8 ADDI-DATA GmbH + 1003 APCI1032 SP controller (32 digi inputs w/ opto coupler) + 1005 APCI2200 SP controller (8/16 digi outputs (relay)) + 100a APCI1696 SP controller (96 TTL I/Os) + 3001 APCI3501 SP controller (analog output board) + 300f APCI3600 Noise and vibration measurement board + 7001 APCI7420 2-port Serial Controller + 7002 APCI7300 Serial Controller +15b9 Maestro Digital Communications +15ba Impacct Technology Corp +15bb Portwell Inc +15bc Agilent Technologies + 0103 QX4 PCI Express quad 4-gigabit Fibre Channel controller + 0105 Celerity FC-42XS Fibre Channel Adapter + 117c 0022 Celerity FC-42XS Fibre Channel Adapter + 1100 E8001-66442 PCI Express CIC + 2922 64 Bit, 133MHz PCI-X Exerciser & Protocol Checker + 2928 64 Bit, 66MHz PCI Exerciser & Analyzer + 2929 64 Bit, 133MHz PCI-X Analyzer & Exerciser +15bd DFI Inc +15be Sola Electronics +15bf High Tech Computer Corp (HTC) +15c0 BVM Ltd +15c1 Quantel +15c2 Newer Technology Inc +15c3 Taiwan Mycomp Co Ltd +15c4 EVSX Inc +15c5 Procomp Informatics Ltd + 8010 1394b - 1394 Firewire 3-Port Host Adapter Card +15c6 Technical University of Budapest +15c7 Tateyama System Laboratory Co Ltd + 0349 Tateyama C-PCI PLC/NC card Rev.01A +15c8 Penta Media Co Ltd +15c9 Serome Technology Inc +15ca Bitboys OY +15cb AG Electronics Ltd +15cc Hotrail Inc +15cd Dreamtech Co Ltd +15ce Genrad Inc +15cf Hilscher GmbH +15d1 Infineon Technologies AG +15d2 FIC (First International Computer Inc) +15d3 NDS Technologies Israel Ltd +15d4 Iwill Corp +15d5 Tatung Co +15d6 Entridia Corp +15d7 Rockwell-Collins Inc +15d8 Cybernetics Technology Co Ltd +15d9 Super Micro Computer Inc +15da Cyberfirm Inc +15db Applied Computing Systems Inc +15dc Litronic Inc + 0001 Argus 300 PCI Cryptography Module +15dd Sigmatel Inc +15de Malleable Technologies Inc +15df Infinilink Corp +15e0 Cacheflow Inc +15e1 Voice Technologies Group Inc +15e2 Quicknet Technologies Inc + 0500 PhoneJack-PCI +15e3 Networth Technologies Inc +15e4 VSN Systemen BV +15e5 Valley technologies Inc +15e6 Agere Inc +15e7 Get Engineering Corp +15e8 National Datacomm Corp + 0130 Wireless PCI Card + 0131 NCP130A2 Wireless NIC +15e9 Pacific Digital Corp + 1841 ADMA-100 DiscStaQ ATA Controller +15ea Tokyo Denshi Sekei K.K. +15eb DResearch Digital Media Systems GmbH +15ec Beckhoff GmbH + 3101 FC3101 Profibus DP 1 Channel PCI + 5102 FC5102 +15ed Macrolink Inc +15ee In Win Development Inc +15ef Intelligent Paradigm Inc +15f0 B-Tree Systems Inc +15f1 Times N Systems Inc +15f2 Diagnostic Instruments Inc +15f3 Digitmedia Corp +15f4 Valuesoft +15f5 Power Micro Research +15f6 Extreme Packet Device Inc +15f7 Banctec +15f8 Koga Electronics Co +15f9 Zenith Electronics Corp +15fa J.P. Axzam Corp +15fb Zilog Inc +15fc Techsan Electronics Co Ltd +15fd N-CUBED.NET +15fe Kinpo Electronics Inc +15ff Fastpoint Technologies Inc +1600 Northrop Grumman - Canada Ltd +1601 Tenta Technology +1602 Prosys-tec Inc +1603 Nokia Wireless Communications +1604 Central System Research Co Ltd +1605 Pairgain Technologies +1606 Europop AG +1607 Lava Semiconductor Manufacturing Inc +1608 Automated Wagering International +1609 Scimetric Instruments Inc +1612 Telesynergy Research Inc. +1619 FarSite Communications Ltd + 0400 FarSync T2P (2 port X.21/V.35/V.24) + 0440 FarSync T4P (4 port X.21/V.35/V.24) + 0610 FarSync T1U (1 port X.21/V.35/V.24) + 0620 FarSync T2U (2 port X.21/V.35/V.24) + 0640 FarSync T4U (4 port X.21/V.35/V.24) + 1610 FarSync TE1 (T1,E1) + 2610 FarSync DSL-S1 (SHDSL) + 3640 FarSync T4E (4-port X.21/V.35/V.24) + 4620 FarSync T2Ue PCI Express (2-port X.21/V.35/V.24) + 4640 FarSync T4Ue PCI Express (4-port X.21/V.35/V.24) +161f Rioworks +1626 TDK Semiconductor Corp. + 8410 RTL81xx Fast Ethernet +1629 Kongsberg Spacetec AS + 1003 Format synchronizer v3.0 + 1006 Format synchronizer, model 10500 + 1007 Format synchronizer, model 21000 + 2002 Fast Universal Data Output +1631 Packard Bell B.V. +# This seems to occur on their 802.11b Wireless card WMP-11 +1637 Linksys + 3874 Linksys 802.11b WMP11 PCI Wireless card +1638 Standard Microsystems Corp [SMC] + 1100 SMC2602W EZConnect / Addtron AWA-100 / Eumitcom PCI WL11000 +163c Smart Link Ltd. + 3052 SmartLink SmartPCI562 56K Modem + 5449 SmartPCI561 Modem +1641 MKNet Corp. +1657 Brocade Communications Systems, Inc. + 0013 425 4Gb/825 8Gb PCIe Dual port FC HBA + 0014 BR-1020 FC/FCOE 10GB Eth / FC over Eth + 0017 415 4Gb/815 8Gb PCIe FC HBA +# Same Device_ID used for 410 (1port) and 420 (2 port) HBAs. + 0646 Brocade 400 4Gb PCIe FC HBA +165a Epix Inc + c100 PIXCI(R) CL1 Camera Link Video Capture Board [custom QL5232] + d200 PIXCI(R) D2X Digital Video Capture Board [custom QL5232] + d300 PIXCI(R) D3X Digital Video Capture Board [custom QL5232] +165d Hsing Tech. Enterprise Co., Ltd. +165f Linux Media Labs, LLC + 1020 LMLM4 MPEG-4 encoder +1661 Worldspace Corp. +1668 Actiontec Electronics Inc + 0100 Mini-PCI bridge +# Formerly SiByte, Inc. +166d Broadcom Corporation + 0001 SiByte BCM1125/1125H/1250 System-on-a-Chip PCI + 0002 SiByte BCM1125H/1250 System-on-a-Chip HyperTransport + 0012 SiByte BCM1280/BCM1480 System-on-a-Chip PCI-X + 0014 Sibyte BCM1280/BCM1480 System-on-a-Chip HyperTransport +1677 Bernecker + Rainer + 104e 5LS172.6 B&R Dual CAN Interface Card + 12d7 5LS172.61 B&R Dual CAN Interface Card + 20ad 5ACPCI.MFIO-K01 Profibus DP / K-Feldbus / COM +1678 NetEffect + 0100 NE020 10Gb Accelerated Ethernet Adapter (iWARP RNIC) +1679 Tokyo Electron Device Ltd. + 3000 SD Standard host controller [Ellen] +167b ZyDAS Technology Corp. + 2102 ZyDAS ZD1202 + 187e 3406 ZyAIR B-122 CardBus 11Mbs Wireless LAN Card + 2116 ZD1212B Wireless Adapter +167d Samsung Electro-Mechanics Co., Ltd. + a000 IPW2200 miniPCI Wireless +167e ONNTO Corp. +1681 Hercules + 0010 Hercules 3d Prophet II Ultra 64MB (350 MHz NV15BR core) +1682 XFX Pine Group Inc. +1688 CastleNet Technology Inc. + 1170 WLAN 802.11b card +168c Atheros Communications Inc. + 0007 AR5000 802.11a Wireless Adapter + 0011 AR5210 802.11a NIC + 0012 AR5211 802.11ab NIC + 126c 8031 2201 Mobile Adapter + 0013 Atheros AR5001X+ Wireless Network Adapter + 0e11 00e5 NC6000 laptop + 1113 d301 Philips CPWNA100 Wireless CardBus adapter + 1113 ee23 SMCWPCIT-G 108Mbps Wireless PCI adapter + 1186 3202 D-link DWL-G650 (Rev B3,B5) Wireless cardbus adapter + 1186 3203 DWL-G520 Wireless PCI Adapter + 1186 3a12 D-Link AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C) + 1186 3a13 D-Link AirPlus DWL-G520 Wireless PCI Adapter(rev.B) + 1186 3a14 D-Link AirPremier DWL-AG530 Wireless PCI Adapter + 1186 3a17 D-Link AirPremier DWL-G680 Wireless Cardbus Adapter + 1186 3a18 D-Link AirPremier DWL-G550 Wireless PCI Adapter + 1186 3a63 D-Link AirPremier DWL-AG660 Wireless Cardbus Adapter + 1186 3a93 Conceptronic C54I Wireless 801.11g PCI card + 1186 3a94 C54C Wireless 801.11g cardbus + 1186 3ab0 Allnet ALL0281 Wireless PCI Card + 1385 4d00 Netgear WG311T Wireless PCI Adapter + 1458 e911 Gigabyte GN-WIAG02 + 1468 0408 ThinkPad 11b/g Wireless LAN Mini PCI Adapter + 14b7 0a60 8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter + 1668 1026 IBM HighRate 11 a/b/g Wireless CardBus Adapter + 168c 0013 AirPlus XtremeG DWL-G650 Wireless PCMCIA Adapter + 168c 1025 DWL-G650B2 Wireless CardBus Adapter + 168c 1027 Engenius NL-3054CB ARIES b/g CardBus Adapter + 168c 1042 Ubiquiti Networks SuperRange a/b/g Cardbus Adapter + 168c 1051 EZ Connect g 802.11g 108Mbps Wireless PCI Adapter + 168c 2026 Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter + 168c 2041 Engenius 5354MP Plus ARIES2 b/g MiniPCI Adapter + 168c 2042 Engenius 5354MP Plus ARIES2 a/b/g MiniPCI Adapter + 168c 2051 TRENDnet TEW-443PI Wireless PCI Adapter + 16ab 7302 Trust Speedshare Turbo Pro Wireless PCI Adapter + 1737 0017 WPC55AG + 1737 0026 WMP55AG v1.1 + 17cf 0042 Z-COMAX Highpower XG-622H (400mw) 802.11b/g mini-PCI Adapter + 185f 1012 CM9 Wireless a/b/g MiniPCI Adapter + 185f 2012 Wistron NeWeb WLAN a+b+g model CB9 +# the name AR5005G is used for the reference design using AR2413 + 001a AR2413 802.11bg NIC + 1052 168c Sweex Wireless Lan PC Card 54Mbps + 1113 ee20 SMC Wireless CardBus Adapter 802.11g (SMCWCB-G EU) + 1113 ee24 SMC Wireless PCI Card WPCI-G + 1186 3a15 D-Link AirPlus G DWL-G630 Wireless Cardbus Adapter(rev.D) + 1186 3a16 D-Link AirPlus G DWL-G510 Wireless PCI Adapter(rev.B) + 1186 3a1d WDA-1320 Desktop Adapter + 1186 3a23 D-Link AirPlus G DWL-G520+A Wireless PCI Adapter + 1186 3a24 D-Link AirPlus G DWL-G650+A Wireless Cardbus Adapter + 1186 3b08 AirPlus G DWL-G630 + 168c 001a Belkin FD7000 + 168c 1052 TP-Link TL-WN510G Wireless CardBus Adapter + 168c 2052 Compex Wireless 802.11 b/g MiniPCI Adapter, Rev A1 [WLM54G] + 16ec 0122 Wireless PCI Adapter Model 5418 +# the name AR5006X is used for the reference design using AR5413 + 001b AR5413 802.11abg NIC + 1186 3a19 D-Link AirPremier AG DWL-AG660 Wireless Cardbus Adapter + 1186 3a22 D-Link AirPremier AG DWL-AG530 Wireless PCI Adapter + 1458 e901 GN-WI01HT Wireless a/b/g MiniPCI Adapter + 168c 001b Wireless LAN PCI LiteOn + 168c 2062 EnGenius EMP-8602 (400mw) or Compex WLM54AG (SuperAG) + 168c 2063 EnGenius EMP-8602 (400mw) or Compex WLM54AG + 185f 1600 DCMA-82 High Power WLAN 802.11a/b/g mini-PCI Module (Super A/G, eXtended Range, 400mW) + a727 6804 Wireless 11a/b/g PC Card with XJACK(r) Antenna + 001c AR5001 Wireless Network Adapter + 1468 0428 AR5BXB63 802.11bg NIC + 1468 042a AR5007EG 802.11bg NIC + 147b 1033 AirPace Wi-Fi + 168c 001c AR242x 802.11abg NIC (PCI Express) + 168c 3061 AR5006EGS 802.11bg NIC (2.4GHz, PCI Express) + 168c 3062 AR5006EXS 802.11abg NIC (2.4/5.0GHz, PCI Express) + 168c 3063 AR5006EX 802.11abg NIC (2.4/5.0GHz, PCI Express) + 168c 3065 AR5006EG 802.11bg NIC (2.4GHz, PCI Express) + 168c 3067 AR242x 802.11abg Wireless PCI Express Adapter (rev 01) + 1a3b 1026 AR5007EG 802.11bg Wi-Fi mini PCI express card + 001d AR5007G Wireless Network Adapter +# the name AR5005VL is used for some AR5513 based designs + 0020 AR5513 802.11abg Wireless NIC + 0023 AR5008 Wireless Network Adapter + 0024 AR5008 Wireless Network Adapter + 0027 AR9160 802.11abgn Wireless PCI Adapter + 0029 AR922X Wireless Network Adapter + 002a AR928X Wireless Network Adapter (PCI-Express) + 002b AR9285 Wireless Network Adapter (PCI-Express) + 0033 11a/b/g/n Wireless LAN Mini-PCI Express Adapter + 0207 AR5210 + 1014 AR5212 802.11abg NIC + 1014 058a ThinkPad 11a/b/g Wireless LAN Mini Express Adapter (AR5BXB6) + 3b08 D-Link AirPlus G DWL-G630 + ff19 AR5006X Wireless Network Adapter + ff1c AR5008 Wireless Network Adapter + ff1d AR5008 Wireless Network Adapter +1695 EPoX Computer Co., Ltd. +169c Netcell Corporation + 0044 Revolution Storage Processing Card +# The right ID is 196d, but they got it nibble-swapped in 2202. +169d Club-3D VB (Wrong ID) + 3306 ZAP TV 2202 +16a5 Tekram Technology Co.,Ltd. +16ab Global Sun Technology Inc + 1100 GL24110P + 1101 PLX9052 PCMCIA-to-PCI Wireless LAN + 1102 PCMCIA-to-PCI Wireless Network Bridge + 8501 WL-8305 Wireless LAN PCI Adapter +16ae SafeNet Inc + 0001 SafeXcel 1140 + 000a SafeXcel 1841 + 1141 SafeXcel 1141 + 1841 SafeXcel 1842 +16af SparkLAN Communications, Inc. +16b4 Aspex Semiconductor Ltd +16b8 Sonnet Technologies, Inc. +16be Creatix Polymedia GmbH +16c6 Micrel-Kendin + 8695 Centaur KS8695 ARM processor + 8842 KSZ8842-PMQL 2-Port Ethernet Switch +16c8 Octasic Inc. +16c9 EONIC B.V. The Netherlands +16ca CENATEK Inc + 0001 Rocket Drive DL +16cd Densitron Technologies +16ce Roland Corp. +16d5 Acromag, Inc. + 0504 PMC-DX504 Reconfigurable FPGA with LVDS I/O + 0520 PMC520 Serial Communication, 232 Octal + 0521 PMC521 Serial Communication, 422/485 Octal + 1020 PMC-AX1020 Reconfigurable FPGA with A/D & D/A + 1065 PMC-AX1065 Reconfigurable FPGA with A/D & D/A + 2004 PMC-DX2004 Reconfigurable FPGA with LVDS I/O + 2020 PMC-AX2020 Reconfigurable FPGA with A/D & D/A + 2065 PMC-AX2065 Reconfigurable FPGA with A/D & D/A + 3020 PMC-AX3020 Reconfigurable FPGA with A/D & D/A + 3065 PMC-AX3065 Reconfigurable FPGA with A/D & D/A + 4243 PMC424, APC424, AcPC424 Digital I/O and Counter Timer Module + 4248 PMC464, APC464, AcPC464 Digital I/O and Counter Timer Module + 424b PMC-DX2002 Reconfigurable FPGA with Differential I/O + 4253 PMC-DX503 Reconfigurable FPGA with TTL and Differential I/O + 4312 PMC-CX1002 Reconfigurable Conduction-Cooled FPGA Virtex-II with Differential I/O + 4313 PMC-CX1003 Reconfigurable Conduction-Cooled FPGA Virtex-II with CMOS and Differential I/O + 4322 PMC-CX2002 Reconfigurable Conduction-Cooled FPGA Virtex-II with Differential I/O + 4323 PMC-CX2003 Reconfigurable Conduction-Cooled FPGA Virtex-II with CMOS and Differential I/O + 4350 PMC-DX501 Reconfigurable Digital I/O Module + 4353 PMC-DX2003 Reconfigurable FPGA with TTL and Differential I/O + 4357 PMC-DX502 Reconfigurable Differential I/O Module + 4457 PMC730, APC730, AcPC730 Multifunction Module + 464d PMC408 32-Channel Digital Input/Output Module + 4850 PMC220-16 12-Bit Analog Output Module + 4a42 PMC483, APC483, AcPC483 Counter Timer Module + 4a50 PMC484, APC484, AcPC484 Counter Timer Module + 4a56 PMC230 16-Bit Analog Output Module + 4b47 PMC330, APC330, AcPC330 Analog Input Module, 16-bit A/D + 4c40 PMC-LX40 Reconfigurable Virtex-4 FPGA with plug-in I/O + 4c60 PMC-LX60 Reconfigurable Virtex-4 FPGA with plug-in I/O + 4d4d PMC341, APC341, AcPC341 Analog Input Module, Simultaneous Sample & Hold + 4d4e PMC482, APC482, AcPC482 Counter Timer Board + 524d PMC-DX2001 Reconfigurable FPGA with TTL I/O + 5335 PMC-SX35 Reconfigurable Virtex-4 FPGA with plug-in I/O + 5456 PMC470 48-Channel Digital Input/Output Module + 5601 PMC-VLX85 Reconfigurable Virtex-5 FPGA with plug-in I/O + 5602 PMC-VLX110 Reconfigurable Virtex-5 FPGA with plug-in I/O + 5603 PMC-VSX95 Reconfigurable Virtex-5 FPGA with plug-in I/O + 5604 PMC-VLX155 Reconfigurable Virtex-5 FPGA with plug-in I/O + 5605 PMC-VFX70 Reconfigurable Virtex-5 FPGA with plug-in I/O + 5606 PMC-VLX155-1M Reconfigurable Virtex-5 FPGA with plug-in I/O +16da Advantech Co., Ltd. + 0011 INES GPIB-PCI +16df PIKA Technologies Inc. +16e3 European Space Agency + 1e0f LEON2FT Processor +16e5 Intellon Corp. + 6000 INT6000 Ethernet-to-Powerline Bridge [HomePlug AV] + 6300 INT6300 Ethernet-to-Powerline Bridge [HomePlug AV] +16ec U.S. Robotics + 0116 USR997902 10/100/1000 Mbps PCI Network Card + 2f00 USR5660A (USR265660A, USR5660A-BP) 56K PCI Faxmodem + 3685 Wireless Access PCI Adapter Model 022415 + 4320 USR997904 10/100/1000 64-bit NIC (Marvell Yukon) + ab06 USR997901A 10/100 Cardbus NIC +16ed Sycron N. V. + 1001 UMIO communication card +16f3 Jetway Information Co., Ltd. +16f4 Vweb Corp + 8000 VW2010 +16f6 VideoTele.com, Inc. +1702 Internet Machines Corporation (IMC) +1705 Digital First, Inc. +170b NetOctave + 0100 NSP2000-SSL crypto accelerator +170c YottaYotta Inc. +1719 EZChip Technologies +# Seems to be a 2nd ID for Vitesse Semiconductor +1725 Vitesse Semiconductor + 7174 VSC7174 PCI/PCI-X Serial ATA Host Bus Controller +172a Accelerated Encryption + 13c8 AEP SureWare Runner 1000V3 +1734 Fujitsu Technology Solutions + 1078 Amilo Pro v2010 + 1085 Celsius M450 + 1098 Amilo L 1310G +1735 Aten International Co. Ltd. +1737 Linksys + 0013 WMP54G Wireless Pci Card + 0015 WMP54GS Wireless Pci Card + 0029 WPG54G ver. 4 PCI Card + 1032 Gigabit Network Adapter + 1737 0015 EG1032 v2 Instant Gigabit Network Adapter + 1737 0024 EG1032 v3 Instant Gigabit Network Adapter + 1064 Gigabit Network Adapter + 1737 0016 EG1064 v2 Instant Gigabit Network Adapter + ab08 21x4x DEC-Tulip compatible 10/100 Ethernet + ab09 21x4x DEC-Tulip compatible 10/100 Ethernet +173b Altima (nee Broadcom) + 03e8 AC1000 Gigabit Ethernet + 03e9 AC1001 Gigabit Ethernet + 03ea AC9100 Gigabit Ethernet + 173b 0001 AC1002 + 03eb AC1003 Gigabit Ethernet +1743 Peppercon AG + 8139 ROL/F-100 Fast Ethernet Adapter with ROL +1745 ViXS Systems, Inc. + 2020 XCode II Series + 2100 XCode 2100 Series +1749 RLX Technologies +174b PC Partner Limited +174d WellX Telecom SA +175c AudioScience Inc +175e Sanera Systems, Inc. +1760 TEDIA spol. s r. o. +1771 InnoVISION Multimedia Ltd. +# nee SBS Technologies +1775 GE Fanuc Intelligent Platforms +177d Cavium Networks + 0001 Nitrox XL N1 + 0003 Nitrox XL N1 Lite + 0004 Octeon (and older) FIPS + 0005 Octeon CN38XX Network Processor Pass 3.x + 0006 RoHS + 0010 Nitrox XL NPX + 0020 Octeon CN31XX Network Processor + 0030 Octeon CN30XX Network Processor + 0040 Octeon CN58XX Network Processor + 0050 Octeon CN57XX Network Processor (CN54XX/CN55XX/CN56XX) + 0070 Octeon CN50XX Network Processor + 0080 Octeon CN52XX Network Processor +1787 Hightech Information System Ltd. +1789 Ennyah Technologies Corp. +# also used by Struck Innovative Systeme for joint developments +1796 Research Centre Juelich + 0001 SIS1100 [Gigabit link] + 0002 HOTlink + 0003 Counter Timer + 0004 CAMAC Controller + 0005 PROFIBUS + 0006 AMCC HOTlink + 000d Synchronisation Slave + 000e SIS1100-eCMC + 000f TDC (GPX) + 0010 PCIe Counter Timer + 0011 SIS1100-e single link + 0012 SIS1100-e quad link +1797 Techwell Inc. + 6801 TW6802 multimedia video card + 6802 TW6802 multimedia other device +1799 Belkin + 6001 Wireless PCI Card - F5D6001 + 6020 Wireless PCMCIA Card - F5D6020 + 6060 Wireless PDA Card - F5D6060 + 7000 Wireless PCI Card - F5D7000 + 700a Wireless PCI Card - F5D7000UK + 7010 BCM4306 802.11b/g Wireless Lan Controller F5D7010 +179a id Quantique + 0001 Quantis PCI 16Mbps +179c Data Patterns + 0557 DP-PCI-557 [PCI 1553B] + 0566 DP-PCI-566 [Intelligent PCI 1553B] + 1152 DP-cPCI-1152 (8-channel Isolated ADC Module) + 5031 DP-CPCI-5031-Synchro Module +# cPCI Carrier for Mezzanine Modules + 5112 DP-cPCI-5112 [MM-Carrier] + 5121 DP-CPCI-5121-IP Carrier + 5211 DP-CPCI-5211-IP Carrier + 5679 AGE Display Module +17a0 Genesys Logic, Inc + 7163 GL9701 PCIe to PCI Bridge + 8083 GL880 USB 1.1 UHCI controller + 8084 GL880 USB 2.0 EHCI controller +17aa Lenovo + 20b1 ThinkPad T61p +17ab Phillips Components +17af Hightech Information System Ltd. +17b3 Hawking Technologies + ab08 PN672TX 10/100 Ethernet +17b4 Indra Networks, Inc. + 0011 WebEnhance 100 GZIP Compression Card + 0012 WebEnhance 200 GZIP Compression Card + 0015 WebEnhance 300 GZIP Compression Card + 0016 StorCompress 300 GZIP Compression Card + 0017 StorSecure 300 GZIP Compression and AES Encryption Card +17c0 Wistron Corp. +17c2 Newisys, Inc. +17cb Airgo Networks Inc + 0001 AGN100 802.11 a/b/g True MIMO Wireless Card + 0002 AGN300 802.11 a/b/g True MIMO Wireless Card +17cc NetChip Technology, Inc + 2280 USB 2.0 +17cf Z-Com, Inc. +17d3 Areca Technology Corp. + 1110 ARC-1110 4-Port PCI-X to SATA RAID Controller + 1120 ARC-1120 8-Port PCI-X to SATA RAID Controller + 1130 ARC-1130 12-Port PCI-X to SATA RAID Controller + 1160 ARC-1160 16-Port PCI-X to SATA RAID Controller + 1170 ARC-1170 24-Port PCI-X to SATA RAID Controller + 1201 ARC-1200 2-Port PCI-Express to SATA II RAID Controller + 1210 ARC-1210 4-Port PCI-Express to SATA RAID Controller + 1220 ARC-1220 8-Port PCI-Express to SATA RAID Controller + 1230 ARC-1230 12-Port PCI-Express to SATA RAID Controller + 1260 ARC-1260 16-Port PCI-Express to SATA RAID Controller + 1280 ARC-1231 12-Port PCI-Express to SATA RAID Controller + 1680 ARC-1680 8 port PCIe/PCI-X to SAS/SATA II RAID Controller +# Nee S2io Inc. +17d5 Neterion Inc. + 5731 Xframe 10-Gigabit Ethernet PCI-X + 5732 Xframe II 10-Gigabit Ethernet PCI-X 2.0 + 5831 Xframe 10-Gigabit Ethernet PCI-X + 103c 12d5 PCI-X 133MHz 10GbE SR Fiber + 10a9 8020 Single Port 10-Gigabit Ethernet (PCI-X, Fiber) + 10a9 8024 Single Port 10-Gigabit Ethernet (PCI-X, Fiber) + 5832 Xframe II 10-Gigabit Ethernet PCI-X 2.0 + 103c 1337 PCI-X 266MHz 10GigE SR [AD385A] + 10a9 8021 Single Port 10-Gigabit Ethernet II (PCI-X, Fiber) + 17d5 6020 Xframe II SR + 17d5 6021 Xframe II SR, Low Profile + 17d5 6022 Xframe E SR + 17d5 6420 Xframe II LR + 17d5 6421 Xframe II LR, Low Profile + 17d5 6422 Xframe E LR + 17d5 6c20 Xframe II CX4 + 17d5 6c21 Xframe II CX4, Low Profile + 17d5 6c22 Xframe E CX4 + 5833 X3100 Series 10 Gigabit Ethernet PCIe + 17d5 6030 X3110 Single Port SR + 17d5 6031 X3120 Dual Port SR + 17d5 6430 X3110 Single Port LR + 17d5 6431 X3120 Dual Port LR + 17d5 7030 X3110 Single Port LRM + 17d5 7031 X3120 Dual Port LRM + 17d5 7430 X3110 Single Port 10GBase-T + 17d5 7431 X3120 Dual Port 10GBase-T + 17d5 7830 X3110 Single Port 10GBase-CR + 17d5 7831 X3120 Dual Port 10GBase-CR +17db Cray Inc + 0101 XT Series [Seastar] 3D Toroidal Router +17de KWorld Computer Co. Ltd. +17e4 Sectra AB + 0001 KK671 Cardbus encryption board + 0002 KK672 Cardbus encryption board +17e6 Entropic Communications Inc. + 0010 EN2010 [c.Link] MoCA Network Controller (Coax, PCI interface) + 0011 EN2010 [c.Link] MoCA Network Controller (Coax, MPEG interface) + 0021 EN2210 [c.Link] MoCA Network Controller (Coax) + 0025 EN2510 [c.Link] MoCA Network Controller (Coax, PCIe interface) +17ee Connect Components Ltd +17f2 Albatron Corp. +17f3 RDC Semiconductor, Inc. + 1010 R1010 IDE Controller + 6020 R6020 North Bridge + 6021 R6021 Host Bridge + 6030 R6030 ISA Bridge + 6031 R6031 ISA Bridge + 6040 R6040 MAC Controller + 6060 R6060 USB 1.1 Controller + 6061 R6061 USB 2.0 Controller +17f7 Topdek Semiconductor Inc. +17fe Linksys, A Division of Cisco Systems + 2120 WMP11v4 802.11b PCI card + 2220 [AirConn] INPROCOMM IPN 2220 Wireless LAN Adapter (rev 01) + 17fe 2220 WPC54G ver. 4 +17ff Benq Corporation +1803 ProdaSafe GmbH +1805 Euresys S.A. +1809 Lumanate, Inc. +1813 Ambient Technologies Inc + 4000 HaM controllerless modem + 16be 0001 V9x HAM Data Fax Modem + 4100 HaM plus Data Fax Modem + 16be 0002 V9x HAM 1394 +1814 RaLink + 0101 Wireless PCI Adapter RT2400 / RT2460 + 1043 0127 WiFi-b add-on Card + 1462 6828 PC11B2 (MS-6828) Wireless 11b PCI Card + 0200 RT2500 802.11g PCI [PC54G2] + 0201 RT2500 802.11g Cardbus/mini-PCI + 1043 130f WL-130g + 1371 001e CWC-854 Wireless-G CardBus Adapter + 1371 001f CWM-854 Wireless-G Mini PCI Adapter + 1371 0020 CWP-854 Wireless-G PCI Adapter + 1458 e381 GN-WMKG 802.11b/g Wireless CardBus Adapter + 1458 e931 GN-WIKG 802.11b/g mini-PCI Adapter + 1462 6833 Unknown 802.11g mini-PCI Adapter + 1462 6835 Wireless 11G CardBus CB54G2 + 1737 0032 WMP54G 2.0 PCI Adapter + 1799 700a F5D7000 Wireless G Desktop Network Card + 1799 701a F5D7010 Wireless G Notebook Network Card + 185f 22a0 CN-WF513 Wireless Cardbus Adapter + 0300 Wireless Adapter Canyon CN-WF511 + 0301 RT2561/RT61 802.11g PCI + 1186 3c08 DWL-G630 Rev E + 1186 3c09 DWL-G510 Rev C + 13d1 abe3 miniPCI Pluscom 802.11 a/b/g + 1458 e934 GN-WP01GS + 1737 0055 WMP54G ver 4.1 + 1814 2561 EW-7108PCg + 0302 RT2561/RT61 rev B 802.11g + 1186 3c08 DWL-G630 Rev E + 1186 3c09 AirPlus G DWL-G510 Wireless Network Adapter (Rev.C) + 1462 b834 PC54G3 Wireless 11g PCI Card + 0401 RT2600 802.11 MIMO + 0601 RT2800 802.11n PCI + 0681 RT2860 Wireless 802.11n PCIe + 0701 RT2760 Wireless 802.11n 1T/2R Cardbus + 0781 RT2860 + 3090 RT3090 Wireless 802.11n 1T/1R PCIe + 3091 RT3091 Wireless 802.11n 1T/2R PCIe + 3092 RT3092 Wireless 802.11n 2T/2R PCIe + e932 RT2560F 802.11 b/g PCI +1815 Devolo AG +1820 InfiniCon Systems Inc. +1822 Twinhan Technology Co. Ltd + 4e35 Mantis DTV PCI Bridge Controller [Ver 1.0] +182d SiteCom Europe BV +# HFC-based ISDN card + 3069 ISDN PCI DC-105V2 + 9790 WL-121 Wireless Network Adapter 100g+ [Ver.3] +182e Raza Microelectronics, Inc. + 0008 XLR516 Processor +# Strange vendor ID used by BCM5785 when in RAID mode +182f Broadcom +# HT1000 uses 3 IDs 1166:024a (Native SATA Mode), 1166:024b (PATA/IDE Mode), 182f:000b (RAID Mode) depends on SATA BIOS setting + 000b BCM5785 [HT1000] SATA (RAID Mode) +1830 Credence Systems Corporation +183b MikroM GmbH + 08a7 MVC100 DVI + 08a8 MVC101 SDI + 08a9 MVC102 DVI+Audio + 08b0 MVC200-DC +1849 ASRock Incorporation +184a Thales Computers +1851 Microtune, Inc. +1852 Anritsu Corp. +1853 SMSC Automotive Infotainment System Group +1854 LG Electronics, Inc. +185b Compro Technology, Inc. +185f Wistron NeWeb Corp. +1864 SilverBack + 2110 ISNAP 2110 +1867 Topspin Communications + 5a44 MT23108 InfiniHost HCA + 5a45 MT23108 InfiniHost HCA flash recovery + 5a46 MT23108 InfiniHost HCA bridge + 6278 MT25208 InfiniHost III Ex (Tavor compatibility mode) + 6282 MT25208 InfiniHost III Ex +186c Humusoft, s.r.o. + 0612 AD612 Data Acquisition Device + 0614 MF614 Multifunction I/O Card + 0622 AD622 Data Acquisition Device + 0624 MF624 Multifunction I/O Card + 0625 MF625 3-phase Motor Driver +186f WiNRADiO Communications +1876 L-3 Communications + a101 VigraWATCH PCI + a102 VigraWATCH PMC + a103 Vigra I/O +187e ZyXEL Communication Corporation + 3403 ZyAir G-110 802.11g + 340e M-302 802.11g XtremeMIMO +1885 Avvida Systems Inc. +1888 Varisys Ltd + 0301 VMFX1 FPGA PMC module + 0601 VSM2 dual PMC carrier + 0710 VS14x series PowerPC PCI board + 0720 VS24x series PowerPC PCI board +188a Ample Communications, Inc +1890 Egenera, Inc. +1894 KNC One +1896 B&B Electronics Manufacturing Company, Inc. + 4202 MIport 3PCIU2 2-port Serial + 4204 MIport 3PCIU4 4-port Serial + 4208 MIport 3PCIU8 8-port Serial + 4211 MIport 3PCIOU1 1-port Isolated Serial + 4212 MIport 3PCIOU2 2-port Isolated Serial + 4214 MIport 3PCIOU4 4-port Isolated Serial + bb10 3PCI2 2-Port Serial + bb11 3PCIO1 1-Port Isolated Serial +1897 AMtek +18a1 Astute Networks Inc. +18a3 AT&T +18ac DViCO Corporation + d500 FusionHDTV 5 + d800 FusionHDTV 3 Gold + d810 FusionHDTV 3 Gold-Q + d820 FusionHDTV 3 Gold-T + db30 FusionHDTV DVB-T Pro + db40 FusionHDTV DVB-T Hybrid + db78 FusionHDTV DVB-T Dual Express +18b8 Ammasso + b001 AMSO 1100 iWARP/RDMA Gigabit Ethernet Coprocessor +18bc Info-Tek Corp. +18c3 Micronas Semiconductor Holding AG +# Nee Octigabay System +18c8 Cray Inc +18c9 ARVOO Engineering BV +18ca XGI Technology Inc. (eXtreme Graphics Innovation) + 0020 Z7/Z9 (XG20 core) + 0021 Z9s/Z9m (XG21 core) +# duh! Device name, not my name :) + 0027 Z11/Z11M + 0040 Volari V3XT/V5/V8 + 0047 Volari 8300 (chip: XP10, codename: XG47) +18d2 Sitecom +# Sitecom HFC-S based ISDN controller card DC-105v2 + 3069 DC-105v2 ISDN controller +18d8 Dialogue Technology Corp. +18dd Artimi Inc + 4c6f Artimi RTMI-100 UWB adapter +18e6 MPL AG + 0001 OSCI [Octal Serial Communication Interface] +18eb Advance Multimedia Internet Technology, Inc. +18ec Cesnet, z.s.p.o. + 6d05 ML555 + 18ec 0100 NIC (ethernet interfaces) + 18ec 0200 NIC (szedata2) 4x1G + 18ec 0201 NIC (szedata2) 2x10G + 18ec 0300 NIFIC (szedata2) 4x1G + 18ec 0302 NIFIC (szedata2) 2x10G + 18ec 4200 Flexible FlowMon (szedata2) 1x10G + 18ec ff00 Testing design + 18ec ff01 Boot design + c006 COMBO6 + 18ec d001 COMBO-4MTX + 18ec d002 COMBO-4SFP + 18ec d003 COMBO-4SFPRO + 18ec d004 COMBO-2XFP + c032 COMBO-LXT110 + 18ec 0100 NIC (ethernet interfaces) + 18ec 0200 NIC (szedata2) 4x1G + 18ec 0201 NIC (szedata2) 2x10G + 18ec 0300 NIFIC (szedata2) 4x1G + 18ec 0302 NIFIC (szedata2) 2x10G + 18ec 4200 Flexible FlowMon (szedata2) 1x10G + 18ec ff00 Testing design + 18ec ff01 Boot design + c045 COMBO6E + c050 COMBO-PTM + c058 COMBO6X + 18ec d001 COMBO-4MTX + 18ec d002 COMBO-4SFP + 18ec d003 COMBO-4SFPRO + 18ec d004 COMBO-2XFP + c132 COMBO-LXT155 + 18ec 0100 NIC (ethernet interfaces) + 18ec 0200 NIC (szedata2) 4x1G + 18ec 0201 NIC (szedata2) 2x10G + 18ec 0300 NIFIC (szedata2) 4x1G + 18ec 0302 NIFIC (szedata2) 2x10G + 18ec 4200 Flexible FlowMon (szedata2) 1x10G + 18ec ff00 Testing design + 18ec ff01 Boot design + c232 COMBO-FXT100 + 18ec 0100 NIC (ethernet interfaces) + 18ec 0200 NIC (szedata2) 4x1G + 18ec 0201 NIC (szedata2) 2x10G + 18ec 0300 NIFIC (szedata2) 4x1G + 18ec 0302 NIFIC (szedata2) 2x10G + 18ec 4200 Flexible FlowMon (szedata2) 1x10G + 18ec ff00 Testing design + 18ec ff01 Boot design +18ee Chenming Mold Ind. Corp. +18f1 Spectrum GmbH +18f4 Napatech A/S + 0051 NT20-X Capture Card + 0061 NT20E Capture Card + 0071 NT4E Capture Card + 0081 NT4E 8-port Expansion Card + 0091 NT20X Capture Card [New Rev] +18f6 NextIO + 1000 [Nexsis] Switch Virtual P2P PCIe Bridge + 1050 [Nexsis] Switch Virtual P2P PCI Bridge + 2000 [Nexsis] Switch Integrated Mgmt. Endpoint +18f7 Commtech, Inc. + 0001 Fastcom ESCC-PCI-335 + 0002 Fastcom 422/4-PCI-335 + 0003 Fastcom 232/4-1M-PCI + 0004 Fastcom 422/2-PCI-335 + 0005 Fastcom IGESCC-PCI-ISO/1 + 000a Fastcom 232/4-PCI-335 + 000f Fastcom FSCC + 0010 Fastcom GSCC +# Dual Serocco + 0011 Fastcom QSSB + 0014 SuperFSCC + 0015 SuperFSCC-104 + 0016 Fastcom FSCC-232 + 0017 SuperFSCC-104-NOUART +18fb Resilience Corporation +1904 Hangzhou Silan Microelectronics Co., Ltd. + 2031 SC92031 PCI Fast Ethernet Adapter + 8139 RTL8139D [Realtek] PCI 10/100BaseTX ethernet adaptor +1905 Micronas USA, Inc. +1912 Renesas Technology Corp. + 0002 SH7780 PCI Controller (PCIC) +1919 Soltek Computer Inc. +1923 Sangoma Technologies Corp. + 0040 A200/Remora FXO/FXS Analog AFT card + 0100 A104d QUAD T1/E1 AFT card + 0300 A101 single-port T1/E1 + 0400 A104u Quad T1/E1 AFT +# nee Level 5 Networks +1924 Solarflare Communications + 0703 SFC4000 rev A net [Solarstorm] + 10b8 0102 SMC10GPCIe-10BT (A2) [TigerCard] + 10b8 0103 SMC10GPCIe-10BT (A3) [TigerCard] + 10b8 0201 SMC10GPCIe-XFP (A1) [TigerCard] + 1924 0101 SFE4001-A1 + 1924 0102 SFE4001-A2 + 1924 0103 SFE4001-A3 + 1924 0201 SFE4002-A1 + 1924 0301 SFE4003-A1 + 1924 0302 SFE4003-A2 + 1924 0303 SFE4003-A3 + 1924 0304 SFE4003-A4 + 1924 0500 SFE4005-A0 + 0710 SFC4000 rev B [Solarstorm] + 10b8 0103 SMC10GPCIe-10BT (A3) [TigerCard] + 10b8 0201 SMC10GPCIe-XFP (A1) [TigerCard] + 1924 0102 SFE4001-A2 + 1924 0103 SFE4001-A3 + 1924 0201 SFE4002-A1 + 1924 0302 SFE4003-A2 + 1924 0303 SFE4003-A3 + 1924 0304 SFE4003-A4 + 1924 0500 SFE4005-A0 + 1924 5102 SFN4111T-A2 + 1924 5103 SFN4111T-R3 + 1924 5104 SFN4111T-R4 + 1924 5105 SFN4111T-R5 + 1924 5201 SFN4112F-R1 + 1924 5202 SFN4112F-R2 + 0803 SFL9021 [Solarstorm] + 1924 6200 SFN5122F-R0 + 6703 SFC4000 rev A iSCSI/Onload [Solarstorm] + 10b8 0102 SMC10GPCIe-10BT (A2) [TigerCard] + 10b8 0103 SMC10GPCIe-10BT (A3) [TigerCard] + 10b8 0201 SMC10GPCIe-XFP (A1) [TigerCard] + 1924 0101 SFE4001-A1 + 1924 0102 SFE4001-A2 + 1924 0103 SFE4001-A3 + 1924 0201 SFE4002-A1 + 1924 0301 SFE4003-A1 + 1924 0302 SFE4003-A2 + 1924 0303 SFE4003-A3 + 1924 0304 SFE4003-A4 + 1924 0500 SFE4005-A0 + c101 EF1-21022T [EtherFabric] +192e TransDimension +1931 Option N.V. + 000c Qualcomm MSM6275 UMTS chip +1932 DiBcom +193c MAXIM Integrated Products +193f Comtech AHA Corp. + 0001 AHA36x-PCIX + 0363 AHA363-PCIe + 0364 AHA364-PCIe + 0367 AHA367-PCIe +1942 ClearSpeed Technology plc + e511 Advance X620 accelerator card + e521 Advance e620 accelerator card +1947 C-guys, Inc. + 4743 CG200 Dual SD/SDIO Host controller device +194a DapTechnology B.V. + 1111 FireSpy3850 + 1112 FireSpy450b + 1113 FireSpy450bT + 1114 FireSpy850 + 1115 FireSpy850bT +1954 Curtis, Inc. +1957 Freescale Semiconductor Inc + 0012 MPC8548E + 0013 MPC8548 + 0014 MPC8543E + 0015 MPC8543 + 0018 MPC8547E + 0019 MPC8545E + 001a MPC8545 + 0020 MPC8568E + 0021 MPC8568 + 0022 MPC8567E + 0023 MPC8567 + 0030 MPC8533E + 0031 MPC8533 + 0032 MPC8544E + 0033 MPC8544 + 0040 MPC8572E + 0041 MPC8572 + 0050 MPC8536E + 0051 MPC8536 + 0052 MPC8535E + 0053 MPC8535 + 0060 MPC8569 + 0061 MPC8569E + 0070 P2020E + 0071 P2020 + 0080 MPC8349E + 0081 MPC8349 + 0082 MPC8347E TBGA + 0083 MPC8347 TBGA + 0084 MPC8347E PBGA + 0085 MPC8347 PBGA + 0086 MPC8343E + 0087 MPC8343 + 7010 MPC8641 PCI Host Bridge + 7011 MPC8641D PCI Host Bridge + 7018 MPC8610 +1958 Faster Technology, LLC. +1959 PA Semi, Inc + a000 PA6T Core + a001 PWRficient Host Bridge + a002 PWRficient PCI-Express Port + a003 PWRficient SMBus Controller + a004 PWRficient 16550 UART + a005 PWRficient Gigabit Ethernet + a006 PWRficient 10-Gigabit Ethernet + a007 PWRficient DMA Controller + a008 PWRficient LPC/Localbus Interface + a009 PWRficient L2 Cache + a00a PWRficient DDR2 Memory Controller + a00b PWRficient SERDES + a00c PWRficient System/Debug Controller + a00d PWRficient PCI-Express Internal Endpoint +1966 Orad Hi-Tec Systems + 1975 DVG64 family +1969 Attansic Technology Corp. + 1026 Atheros AR8121/AR8113/AR8114 PCI-E Ethernet Controller + 1043 8304 P5KPL-CM Motherboard + 1048 L1 Gigabit Ethernet Adapter + 1043 8226 P5KPL-VM Motherboard + 1062 Atheros AR8132 / L1c Gigabit Ethernet Adapter + 1066 L2c Gigabit Ethernet Adapter + 1067 L1c Gigabit Ethernet Adapter + 2048 L2 100 Mbit Ethernet Adapter +196a Sensory Networks Inc. + 0101 NodalCore C-1000 Content Classification Accelerator + 0102 NodalCore C-2000 Content Classification Accelerator + 0105 NodalCore C-3000 Content Classification Accelerator +196d Club-3D BV +1971 AGEIA Technologies, Inc. + 1011 Physics Processing Unit [PhysX] + 1043 0001 PhysX P1 +1974 TransferZentrum Mikroelektronik +1977 Parsec +197b JMicron Technology Corp. + 0250 JMC250 PCI Express Gigabit Ethernet Controller + 0260 JMC260 PCI Express Fast Ethernet Controller + 2360 JMB360 AHCI Controller + 2361 JMB361 AHCI/IDE + 1462 7235 P965 Neo MS-7235 mainboard + 2363 JMB362/JMB363 AHCI Controller + 1043 81e4 P5B [JMB363] + 1458 b000 GA-EP45-DS5 Motherboard + 1849 2363 Motherboard (one of many) + 2365 JMB365 AHCI/IDE + 2366 JMB366 AHCI/IDE + 2368 JMB368 IDE controller + 2380 IEEE 1394 Host Controller + 2381 Standard SD Host Controller + 2382 SD/MMC Host Controller + 2383 MS Host Controller + 2384 xD Host Controller + 2386 Standard SD Host Controller + 2387 SD/MMC Host Controller + 2388 MS Host Controller + 2389 xD Host Controller +1982 Distant Early Warning Communications Inc + 1600 OX16C954 HOST-A + 16ff OX16C954 HOST-B +1989 Montilio Inc. + 0001 RapidFile Bridge + 8001 RapidFile +198a Nallatech Ltd. +1993 Innominate Security Technologies AG +199a Pulse-LINK, Inc. +199f Auvitek + 8501 AU85X1 PCI REV1.1 +19a2 ServerEngines Corp. + 0200 BladeEngine 10Gb PCI-E iSCSI adapter + 0201 BladeEngine 10Gb PCIe Network Adapter + 0211 BladeEngine2 10Gb Gen2 PCIe Network Adapter + 0212 BladeEngine2 10Gb Gen2 PCIe iSCSI Adapter + 0700 Emulex OneConnect 10Gb NIC + 0702 Emulex OneConnect 10Gb iSCSI Initiator + 0704 Emulex OneConnect 10Gb FCoE Initiator + 0710 Emulex OneConnect 10Gb NIC (be3) + 0712 Emulex OneConnect 10Gb iSCSI Initiator (be3) + 0714 Emulex OneConnect 10Gb FCoE Initiator (be3) +19a8 DAQDATA GmbH +19ac Kasten Chase Applied Research + 0001 ACA2400 Crypto Accelerator +19ae Progeny Systems Corporation + 0520 4135 HFT Interface Controller + 0521 Decimator +19c1 Exegy Inc. +# nee NextNet Wireless +19d1 Motorola Expedience +19d4 Quixant Limited +19da ZOTAC International (MCO) Ltd. +19de Pico Computing +19e2 Vector Informatik GmbH +19e3 DDRdrive LLC + dd52 DDRdrive X1 +19e7 NET (Network Equipment Technologies) + 1001 STIX DSP Card + 1002 STIX - 1 Port T1/E1 Card + 1003 STIX - 2 Port T1/E1 Card + 1004 STIX - 4 Port T1/E1 Card + 1005 STIX - 4 Port FXS Card +19ee Netronome Systems, Inc. +1a03 ASPEED Technology, Inc. + 2000 ASPEED Graphics Family +1a07 Kvaser AB + 0006 CAN interface PC104+ HS/HS + 0007 CAN interface PCIcanx II HS or HS/HS + 0008 CAN interface PCIEcan HS or HS/HS + 0009 CAN interface PCI104 HS/HS +1a08 Sierra semiconductor + 0000 SC15064 +1a0e DekTec Digital Video B.V. + 0069 DTA-105 +1a17 Force10 Networks, Inc. + 8002 PB-10GE-2P 10GbE Security Card +1a1d GFaI e.V. + 1a17 Meta Networks MTP-1G IDPS NIC +1a1e 3Leaf Systems, Inc. +1a22 Ambric Inc. +1a29 Fortinet, Inc. +1a2b Ascom AG + 0000 GESP v1.2 + 0001 GESP v1.3 + 0002 ECOMP v1.3 + 0005 ETP v1.4 + 000a ETP-104 v1.1 + 000e DSLP-104 v1.1 +1a51 Hectronic AB +1a56 Bigfoot Networks, Inc. +1a57 Highly Reliable Systems +1a58 Razer USA Ltd. +1a5d Celoxica +1a5e Aprius Inc. +1a5f System TALKS Inc. +1a68 VirtenSys Limited +1a71 XenSource, Inc. +1a73 Violin Memory, Inc + 0001 Mozart [Memory Appliance 1010] +1a76 Wavesat +1a77 Lightfleet Corporation +1a78 Virident Systems Inc. +1a84 Commex Technologies + 0001 Vulcan SP HT6210 10-Gigabit Ethernet (rev 02) +1a88 MEN Mikro Elektronik + 4d45 Multifunction IP core +1a8c Verigy Pte. Ltd. + 1100 E8001-66443 PCI Express CIC +1a8e DRS Technologies + 2090 Model 2090 PCI Express +1aa8 Ciprico, Inc. + 0009 RAIDCore Controller + 000a RAIDCore Controller +1aae Global Velocity, Inc. +1ab6 CalDigit, Inc. + 6201 RAID Card +1ab9 Espia Srl +1ade Spin Master Ltd. + 1501 Swipetech barcode scanner +1ae0 Google, Inc. +1ae8 Silicon Software GmbH + 0a40 microEnable IV-BASE x1 + 0a41 microEnable IV-FULL x1 + 0a44 microEnable IV-FULL x4 + 0e44 microEnable IV-GigE x4 +1aec Wolfson Microelectronics +1aed Fusion-io + 1003 ioDrive (NAND Flash Storage) + 1005 ioDIMM3 320GB +1aee Caustic Graphics Inc. +1af4 Qumranet, Inc. + 1000 Virtio network device + 1001 Virtio block device + 1002 Virtio memory balloon + 1003 Virtio console +1af5 Netezza Corp. +1afa J & W Electronics Co., Ltd. +1b13 Jaton Corp +1b1a K&F Computing Research Co. + 0e70 GRAPE +1b36 Red Hat, Inc. +1b3e Teradata Corp. + 1fa8 BYNET BIC2SE/X + 1b3e 00a3 BYNET BIC2SX + 1b3e 00c3 BYNET BIC2SE +1b40 Schooner Information Technology, Inc. +1b55 NetUP Inc. + 2a2c Dual DVB-S2-CI card +1c1c Symphony + 0001 82C101 +1d44 DPT + a400 PM2x24/PM3224 +1de1 Tekram Technology Co.,Ltd. + 0391 TRM-S1040 + 2020 DC-390 + 690c 690c + dc29 DC290 +# nee Tumsan Oy +1fc0 Ascom (Finland) Oy + 0300 E2200 Dual E1/Rawpipe Card + 0301 C5400 SHDSL/E1 Card +# nee PathScale, Inc +1fc1 QLogic, Corp. + 000d IBA6110 InfiniBand HCA + 0010 IBA6120 InfiniBand HCA +1fc9 Tehuti Networks Ltd. + 3009 10-Giga TOE SmartNIC + 3010 10-Giga TOE SmartNIC + 3014 10-Giga TOE SmartNIC 2-Port +1fce Cognio Inc. + 0001 Spectrum Analyzer PC Card (SAgE) +1fd4 SUNIX Co., Ltd. + 0001 Matrix multiport serial adapter +2000 Smart Link Ltd. + 2800 SmartPCI2800 V.92 PCI Soft DFT +2001 Temporal Research Ltd +2003 Smart Link Ltd. + 8800 LM-I56N +2004 Smart Link Ltd. +2116 ZyDAS Technology Corp. +21c3 21st Century Computer Corp. +# (Probably only the Mobile Phone Division) +22b8 Motorola, Inc. +2304 Colorgraphic Communications Corp. +2348 Racore + 2010 8142 100VG/AnyLAN +2646 Kingston Technologies +270b Xantel Corporation +270f Chaintech Computer Co. Ltd +2711 AVID Technology Inc. +29b4 82q35 Express MEI Controller +2a15 3D Vision(???) +3000 Hansol Electronics Inc. +3142 Post Impression Systems. +3388 Hint Corp + 0013 HiNT HC4 PCI to ISDN bridge, Multimedia audio controller + 0014 HiNT HC4 PCI to ISDN bridge, Network controller + 0020 HB6 Universal PCI-PCI bridge (transparent mode) + 0021 HB6 Universal PCI-PCI bridge (non-transparent mode) + 1775 c200 C2K CompactPCI interface bridge + 1775 ce90 CE9 + 4c53 1050 CT7 mainboard + 4c53 1080 CT8 mainboard + 4c53 1090 Cx9 mainboard + 4c53 10a0 CA3/CR3 mainboard + 4c53 3010 PPCI mezzanine (32-bit PMC) + 4c53 3011 PPCI mezzanine (64-bit PMC) + 4c53 4000 PMCCARR1 carrier board + 0022 HiNT HB4 PCI-PCI Bridge (PCI6150) + 0026 HB2 PCI-PCI Bridge + 101a E.Band [AudioTrak Inca88] + 101b E.Band [AudioTrak Inca88] + 8011 VXPro II Chipset + 3388 8011 VXPro II Chipset CPU to PCI Bridge + 8012 VXPro II Chipset + 3388 8012 VXPro II Chipset PCI to ISA Bridge + 8013 VXPro II IDE + 3388 8013 VXPro II Chipset EIDE Controller + a103 Blackmagic Design DeckLink HD Pro +3411 Quantum Designs (H.K.) Inc +3442 Bihl+Wiedemann GmbH + 1783 AS-i 3.0 cPCI Master + 1922 AS-i 3.0 PCI Master +3475 Arastra Inc. +3513 ARCOM Control Systems Ltd +3842 eVga.com. Corp. +38ef 4Links +3d3d 3DLabs + 0001 GLINT 300SX + 0002 GLINT 500TX + 0000 0000 GLoria L + 0003 GLINT Delta + 0000 0000 GLoria XL + 0004 Permedia + 0005 Permedia + 0006 GLINT MX + 0000 0000 GLoria XL + 1048 0a42 GLoria XXL + 0007 3D Extreme + 0008 GLINT Gamma G1 + 1048 0a42 GLoria XXL + 0009 Permedia II 2D+3D + 1040 0011 AccelStar II + 1048 0a42 GLoria XXL + 13e9 1000 6221L-4U + 3d3d 0100 AccelStar II 3D Accelerator + 3d3d 0111 Permedia 3:16 + 3d3d 0114 Santa Ana + 3d3d 0116 Oxygen GVX1 + 3d3d 0119 Scirocco + 3d3d 0120 Santa Ana PCL + 3d3d 0125 Oxygen VX1 + 3d3d 0127 Permedia3 Create! + 000a GLINT R3 + 3d3d 0121 Oxygen VX1 + 000c GLINT R3 [Oxygen VX1] + 3d3d 0144 Oxygen VX1-4X AGP [Permedia 4] + 000d GLint R4 rev A + 000e GLINT Gamma G2 + 0011 GLint R4 rev B + 0012 GLint R5 rev A + 0013 GLint R5 rev B + 0020 VP10 visual processor + 0022 VP10 visual processor + 0024 VP9 visual processor + 002c Wildcat Realizm 100/200 + 0030 Wildcat Realizm 800 + 0032 Wildcat Realizm 500 + 0100 Permedia II 2D+3D + 07a1 Wildcat III 6210 + 07a2 Sun XVR-500 Graphics Accelerator + 07a3 Wildcat IV 7210 + 1004 Permedia + 3d04 Permedia + ffff Glint VGA +4005 Avance Logic Inc. + 0300 ALS300 PCI Audio Device + 0308 ALS300+ PCI Audio Device + 0309 PCI Input Controller + 1064 ALG-2064 + 2064 ALG-2064i + 2128 ALG-2364A GUI Accelerator + 2301 ALG-2301 + 2302 ALG-2302 + 2303 AVG-2302 GUI Accelerator + 2364 ALG-2364A + 2464 ALG-2464 + 2501 ALG-2564A/25128A + 4000 ALS4000 Audio Chipset + 4005 4000 ALS4000 Audio Chipset + 4710 ALC200/200P +4033 Addtron Technology Co, Inc. + 1360 RTL8139 Ethernet +4040 NetXen Incorporated + 0001 NXB-10GXSR 10-Gigabit Ethernet PCIe Adapter with SR-XFP optical interface + 103c 7047 NC510F PCIe 10-Gigabit Server Adapter + 0002 NXB-10GCX4 10-Gigabit Ethernet PCIe Adapter with CX4 copper interface + 103c 7048 NC510c PCIe 10-Gigabit Server Adapter + 0003 NXB-4GCU Quad Gigabit Ethernet PCIe Adapter with 1000-BASE-T interface + 0004 BladeCenter-H 10-Gigabit Ethernet High Speed Daughter Card + 0005 NetXen Dual Port 10GbE Multifunction Adapter for c-Class + 103c 170e NC512m Dual Port 10GbE Multifunction BL-C Adapter + 0024 XG Mgmt + 0025 XG Mgmt + 0100 NX3031 Multifunction 1/10-Gigabit Server Adapter + 103c 171b NC522m Dual Port 10GbE Multifunction BL-c Adapter + 103c 3251 NC375i 1G w/NC524SFP 10G Module + 103c 705a NC375i Integrated Quad Port Multifunction Gigabit Server Adapter + 103c 705b NC522SFP Dual Port 10GbE Server Adapter + 152d 896b TG20 Dual Port 10GbE Server/Storage Adapter + 4040 0124 NX3031 Quad Port Gigabit Server Adapter + 4040 0126 Dual Port SFP+ 10GbE Server Adapter +4143 Digital Equipment Corp +4144 Alpha Data + 0044 ADM-XRCIIPro +4150 ONA Electroerosion + 0001 PCI32TLITE FILSTRUP1 PCI to VME Bridge Controller + 0006 PCI32TLITE UART 16550 Opencores + 0007 PCI32TLITE CAN Controller Opencores +415a Auzentech, Inc. +416c Aladdin Knowledge Systems + 0100 AladdinCARD + 0200 CPC +4321 Tata Power Strategic Electronics Division +434e CAST Navigation LLC +4444 Internext Compression Inc + 0016 iTVC16 (CX23416) MPEG-2 Encoder + 0070 0003 WinTV PVR 250 + 0070 0009 WinTV PVR 150 + 0070 0801 WinTV PVR 150 + 0070 0807 WinTV PVR 150 + 0070 4001 WinTV PVR 250 + 0070 4009 WinTV PVR 250 + 0070 4801 WinTV PVR 250 + 0070 4803 WinTV PVR 250 + 0070 8003 WinTV PVR 150 + 0070 8801 WinTV PVR 150 + 0070 c801 WinTV PVR 150 + 0070 e807 WinTV PVR 500 (1st unit) + 0070 e817 WinTV PVR 500 (2nd unit) + 0070 ff92 WiNTV PVR-550 + 0270 0801 WinTV PVR 150 + 104d 013d ENX-26 TV Encoder + 10fc d038 GV-MVP/RX2W (1st unit) + 10fc d039 GV-MVP/RX2W (2nd unit) + 12ab fff3 MPG600 + 12ab ffff MPG600 + 1461 c00a M113 PCI Analog TV (PAL/SECAM, Philips FQ1216MK3 tuner) + 1461 c00b M113 PCI Analog TV (PAL/SECAM+FM, Philips FM1216MK3 tuner) + 1461 c00c M113 PCI Analog TV (NTSC, JAPAN version, Philips FI1286MK2 tuner) + 1461 c010 M113 PCI Analog TV (NTSC, Philips FI1236MK3 tuner) + 1461 c011 M113 PCI Analog TV (NTSC+FM, Philips FM1236MK3 tuner) + 1461 c018 M113 PCI Analog TV (NTSC, Philips FQ1236MK5 tuner) + 1461 c019 UltraTV 1500 MCE, a.k.a. M113 PCI Analog TV (NTSC+FM, Philips FQ1236MK5 tuner) + 1461 c01a M113 PCI Analog TV (PAL/SECAM, Philips FQ1216MK5 tuner) + 1461 c01b M113 PCI Analog TV (PAL/SECAM+FM, Philips FM1216MK5 tuner) + 1461 c030 M113 PCI Analog TV (NTSC-J, Partsnic tuner) + 1461 c031 M113 PCI Analog TV (NTSC-J+FM, Partsnic tuner) + 1461 c032 M113 PCI Analog TV (PAL/SECAM, Partsnic tuner) + 1461 c033 M113 PCI Analog TV (PAL/SECAM+FM, Partsnic tuner) + 1461 c034 M113 PCI Analog TV (NTSC, Partsnic tuner) + 1461 c035 M113 PCI Analog TV (NTSC+FM, Partsnic tuner) + 1461 c03f C115 PCI video capture card (no tuner) + 1461 c136 M104 mini-PCI Analog TV + 1461 c20a M755 AVerTV Video Capture (PAL/SECAM, Philips FQ1216MK3 tuner) + 1461 c218 M755 AVerTV Video Capture (NTSC, Philips FQ1236MK5 tuner) + 1461 c219 M755 AVerTV Video Capture (NTSC+FM, Philips FQ1236MK5 tuner) + 1461 c21a M755 AVerTV Video Capture (PAL/SECAM, Philips FQ1216MK5 tuner) + 1461 c21b M755 AVerTV Video Capture (PAL/SECAM+FM, Philips FM1216MK5 tuner) + 1461 c230 M755 AVerTV Video Capture (NTSC-J, Partsnic tuner) + 1461 c231 M755 AVerTV Video Capture (NTSC-J+FM, Partsnic tuner) + 1461 c232 M755 AVerTV Video Capture (PAL/SECAM, Partsnic tuner) + 1461 c233 M755 AVerTV Video Capture (PAL/SECAM+FM, Partsnic tuner) + 1461 c234 M755 AVerTV Video Capture (NTSC, Partsnic tuner) + 1461 c235 M755 AVerTV Video Capture (NTSC+FM, Partsnic tuner) + 1461 c337 E106 AVerMedia AVerTV Video Capture + 1461 c439 M116 AVerMedia AVerTV MCE 116 Plus (NTSC/PAL/SECAM+FM+REMOTE, Xceive 2028 tuner) + 1461 c5ff C755 AVerTV Video Capture card (no tuner) + 1461 c6ff C115 PCI video capture card (no tuner) + 1461 c739 M785 AVerMedia PCI Analog TV (NTSC/PAL/SECAM+FM, Xceive 2028 tuner) + 9005 0092 VideOh! AVC-2010 + 9005 0093 VideOh! AVC-2410 + 0803 iTVC15 MPEG-2 Encoder + 0070 4000 WinTV PVR-350 + 0070 4001 WinTV PVR-250 + 0070 4800 WinTV PVR-350 (V1) + 12ab 0000 MPG160 + 1461 a3ce M179 + 1461 a3cf M179 +4468 Bridgeport machines +4594 Cogetec Informatique Inc +45fb Baldor Electric Company +4624 Budker Institute of Nuclear Physics + adc1 ADC200ME High speed ADC + de01 DL200ME High resolution delay line PCI based card + de02 DL200ME Middle resolution delay line PCI based card +4680 Umax Computer Corp +4843 Hercules Computer Technology Inc +4916 RedCreek Communications Inc + 1960 RedCreek PCI adapter +4943 Growth Networks +494f ACCES I/O Products, Inc. + 0520 PCI-IDO-48 + 0920 PCI-IDI-48 + 0c50 PCI-DIO-24H + 0c51 PCI-DIO-24D + 0c60 PCI-DIO-48(H) + 0c68 PCI-DIO-72 + 0c70 PCI-DIO-96 + 0c78 PCI-DIO-120 + 0dc8 PCI-IDIO-16 + 0e50 PCI-DIO-24S + 0e51 PCI-DIO-24H(C) + 0e52 PCI-DIO-24D(C) + 0e60 PCI-DIO-48S(H) + 0e61 P104-DIO-24S + 0f00 PCI-IIRO-8 + 0f01 LPCI-IIRO-8 + 0f08 PCI-IIRO-16 + 1050 PCI-422/485-2 + 1058 PCI-COM422/4 + 1059 PCI-COM485/4 + 1068 PCI-COM422/8 + 1069 PCI-COM485/8 + 1088 PCI-COM232/1 + 1090 PCI-COM232/2 + 10a8 P104-COM232-8 + 10c9 PCI-COM-1S + 10d0 PCI-COM2S + 10e8 PCI-COM-8SM + 1148 PCI-ICM-1S + 1150 PCI-ICM-2S + 1158 PCI-ICM422/4 + 1159 PCI-ICM485/4 + 1250 PCI-WDG-2S + 12d0 PCI-WDG-IMPAC + 22c0 PCI-WDG-CSM + 2c50 PCI-DIO-96CT + 2c58 PCI-DIO-96C3 + 5ed0 PCI-DAC + 6c90 PCI-DA12-2 + 6c98 PCI-DA12-4 + 6ca0 PCI-DA12-6 + 6ca8 PCI-DA12-8 + 6ca9 PCI-DA12-8V + 6cb0 PCI-DA12-16 + 6cb1 PCI-DA12-16V + 8ef0 P104-FAS16-16 + aca8 PCI-AI12-16 + aca9 PCI-AI12-16A + eca8 PCI-AIO12-16 + eca9 PCI-A12-16 + ecaa PCI-A12-16A + ece8 PCI-A16-16 +4978 Axil Computer Inc +4a14 NetVin + 5000 NV5000SC + 4a14 5000 RT8029-Based Ethernet Adapter +4b10 Buslogic Inc. +4c48 LUNG HWA Electronics +4c53 SBS Technologies + 0000 PLUSTEST device + 4c53 3000 PLUSTEST card (PC104+) + 4c53 3001 PLUSTEST card (PMC) + 0001 PLUSTEST-MM device + 4c53 3002 PLUSTEST-MM card (PMC) +4ca1 Seanix Technology Inc +4d51 MediaQ Inc. + 0200 MQ-200 +4d54 Microtechnica Co Ltd +4d56 MATRIX VISION GmbH + 0000 [mvHYPERION-CLe/CLb] CameraLink PCI Express x1 Frame Grabber + 0001 [mvHYPERION-CLf/CLm] CameraLink PCI Express x4 Frame Grabber + 0010 [mvHYPERION-16R16/-32R16] 16 Video Channel PCI Express x4 Frame Grabber +4ddc ILC Data Device Corp + 0100 DD-42924I5-300 (ARINC 429 Data Bus) + 0801 BU-65570I1 MIL-STD-1553 Test and Simulation + 0802 BU-65570I2 MIL-STD-1553 Test and Simulation + 0811 BU-65572I1 MIL-STD-1553 Test and Simulation + 0812 BU-65572I2 MIL-STD-1553 Test and Simulation + 0881 BU-65570T1 MIL-STD-1553 Test and Simulation + 0882 BU-65570T2 MIL-STD-1553 Test and Simulation + 0891 BU-65572T1 MIL-STD-1553 Test and Simulation + 0892 BU-65572T2 MIL-STD-1553 Test and Simulation + 0901 BU-65565C1 MIL-STD-1553 Data Bus + 0902 BU-65565C2 MIL-STD-1553 Data Bus + 0903 BU-65565C3 MIL-STD-1553 Data Bus + 0904 BU-65565C4 MIL-STD-1553 Data Bus + 0b01 BU-65569I1 MIL-STD-1553 Data Bus + 0b02 BU-65569I2 MIL-STD-1553 Data Bus + 0b03 BU-65569I3 MIL-STD-1553 Data Bus + 0b04 BU-65569I4 MIL-STD-1553 Data Bus +5045 University of Toronto + 4243 BLASTbus PCI Interface Card v1 +5046 GemTek Technology Corporation + 1001 PCI Radio +5053 Voyetra Technologies + 2010 Daytona Audio Adapter +50b2 TerraTec Electronic GmbH + 1111 Terratec XLerate +5136 S S Technologies +5143 Qualcomm Inc +5145 Ensoniq (Old) + 3031 Concert AudioPCI +5168 Animation Technologies Inc. + 0300 FlyDVB-S + 0301 FlyDVB-T +5301 Alliance Semiconductor Corp. + 0001 ProMotion aT3D +5333 S3 Inc. + 0551 Plato/PX (system) + 5631 86c325 [ViRGE] + 8800 86c866 [Vision 866] + 8801 86c964 [Vision 964] + 8810 86c764_0 [Trio 32 vers 0] + 8811 86c764/765 [Trio32/64/64V+] + 8812 86cM65 [Aurora64V+] + 8813 86c764_3 [Trio 32/64 vers 3] + 8814 86c767 [Trio 64UV+] + 8815 86cM65 [Aurora 128] + 883d 86c988 [ViRGE/VX] + 8870 FireGL + 8880 86c868 [Vision 868 VRAM] vers 0 + 8881 86c868 [Vision 868 VRAM] vers 1 + 8882 86c868 [Vision 868 VRAM] vers 2 + 8883 86c868 [Vision 868 VRAM] vers 3 + 88b0 86c928 [Vision 928 VRAM] vers 0 + 88b1 86c928 [Vision 928 VRAM] vers 1 + 88b2 86c928 [Vision 928 VRAM] vers 2 + 88b3 86c928 [Vision 928 VRAM] vers 3 + 88c0 86c864 [Vision 864 DRAM] vers 0 + 88c1 86c864 [Vision 864 DRAM] vers 1 + 88c2 86c864 [Vision 864-P DRAM] vers 2 + 88c3 86c864 [Vision 864-P DRAM] vers 3 + 88d0 86c964 [Vision 964 VRAM] vers 0 + 88d1 86c964 [Vision 964 VRAM] vers 1 + 88d2 86c964 [Vision 964-P VRAM] vers 2 + 88d3 86c964 [Vision 964-P VRAM] vers 3 + 88f0 86c968 [Vision 968 VRAM] rev 0 + 88f1 86c968 [Vision 968 VRAM] rev 1 + 88f2 86c968 [Vision 968 VRAM] rev 2 + 88f3 86c968 [Vision 968 VRAM] rev 3 + 8900 86c755 [Trio 64V2/DX] + 5333 8900 86C775 Trio64V2/DX + 8901 86c775/86c785 [Trio 64V2/DX or /GX] + 5333 8901 86C775 Trio64V2/DX, 86C785 Trio64V2/GX + 8902 Plato/PX + 8903 Trio 3D business multimedia + 8904 Trio 64 3D + 1014 00db Integrated Trio3D + 4843 314a Terminator 128/3D GLH + 5333 8904 86C365 Trio3D AGP + 8905 Trio 64V+ family + 8906 Trio 64V+ family + 8907 Trio 64V+ family + 8908 Trio 64V+ family + 8909 Trio 64V+ family + 890a Trio 64V+ family + 890b Trio 64V+ family + 890c Trio 64V+ family + 890d Trio 64V+ family + 890e Trio 64V+ family + 890f Trio 64V+ family + 8a01 ViRGE/DX or /GX + 0e11 b032 ViRGE/GX + 10b4 1617 Nitro 3D + 10b4 1717 Nitro 3D + 5333 8a01 ViRGE/DX + 8a10 ViRGE/GX2 + 1092 8a10 Stealth 3D 4000 + 8a13 86c368 [Trio 3D/2X] + 5333 8a13 Trio3D/2X + 8a20 86c794 [Savage 3D] + 5333 8a20 86C391 Savage3D + 8a21 86c390 [Savage 3D/MV] + 5333 8a21 86C390 Savage3D/MV + 8a22 Savage 4 + 1033 8068 Savage 4 + 1033 8069 Savage 4 + 1033 8110 Savage 4 LT + 105d 0018 SR9 8Mb SDRAM + 105d 002a SR9 Pro 16Mb SDRAM + 105d 003a SR9 Pro 32Mb SDRAM + 105d 092f SR9 Pro+ 16Mb SGRAM + 1092 4207 Stealth III S540 + 1092 4800 Stealth III S540 + 1092 4807 SpeedStar A90 + 1092 4808 Stealth III S540 + 1092 4809 Stealth III S540 + 1092 480e Stealth III S540 + 1092 4904 Stealth III S520 + 1092 4905 SpeedStar A200 + 1092 4a09 Stealth III S540 + 1092 4a0b Stealth III S540 Xtreme + 1092 4a0f Stealth III S540 + 1092 4e01 Stealth III S540 + 1102 101d 3d Blaster Savage 4 + 1102 101e 3d Blaster Savage 4 + 5333 8100 86C394-397 Savage4 SDRAM 100 + 5333 8110 86C394-397 Savage4 SDRAM 110 + 5333 8125 86C394-397 Savage4 SDRAM 125 + 5333 8143 86C394-397 Savage4 SDRAM 143 + 5333 8a22 86C394-397 Savage4 + 5333 8a2e 86C394-397 Savage4 32bit + 5333 9125 86C394-397 Savage4 SGRAM 125 + 5333 9143 86C394-397 Savage4 SGRAM 143 + 8a23 Savage 4 + 8a25 ProSavage PM133 + 0303 0303 D9840-60001 [Brio BA410 Motherboard] + 8a26 ProSavage KM133 + 8c00 ViRGE/M3 + 8c01 ViRGE/MX + 1179 0001 ViRGE/MX + 8c02 ViRGE/MX+ + 8c03 ViRGE/MX+MV + 8c10 86C270-294 Savage/MX-MV + 8c11 82C270-294 Savage/MX + 8c12 86C270-294 Savage/IX-MV + 1014 017f ThinkPad T20/T22 + 1179 0001 86C584 SuperSavage/IXC Toshiba + 8c13 86C270-294 Savage/IX + 1179 0001 Magnia Z310 + 8c22 SuperSavage MX/128 + 8c24 SuperSavage MX/64 + 8c26 SuperSavage MX/64C + 8c2a SuperSavage IX/128 SDR + 8c2b SuperSavage IX/128 DDR + 8c2c SuperSavage IX/64 SDR + 8c2d SuperSavage IX/64 DDR + 8c2e SuperSavage IX/C SDR + 1014 01fc ThinkPad T23 + 8c2f SuperSavage IX/C DDR + 8d01 86C380 [ProSavageDDR K4M266] + 8d02 VT8636A [ProSavage KN133] AGP4X VGA Controller (TwisterK) + 8d03 VT8751 [ProSavageDDR P4M266] + 8d04 VT8375 [ProSavage8 KM266/KL266] + 8e48 Chrome S27 PCIE + 5333 0130 Chrome S27 256M DDR2 + 9102 86C410 Savage 2000 + 1092 5932 Viper II Z200 + 1092 5934 Viper II Z200 + 1092 5952 Viper II Z200 + 1092 5954 Viper II Z200 + 1092 5a35 Viper II Z200 + 1092 5a37 Viper II Z200 + 1092 5a55 Viper II Z200 + 1092 5a57 Viper II Z200 + ca00 SonicVibes +544c Teralogic Inc + 0350 TL880-based HDTV/ATSC tuner +5455 Technische University Berlin + 4458 S5933 +5456 GoTView +5519 Cnet Technologies, Inc. +5544 Dunord Technologies + 0001 I-30xx Scanner Interface +5555 Genroco, Inc + 0003 TURBOstor HFP-832 [HiPPI NIC] +5654 VoiceTronix Pty Ltd +5700 Netpower +584d AuzenTech Co., Ltd. +5851 Exacq Technologies +5853 XenSource, Inc. + 0001 Xen Platform Device +5ace Beholder International Ltd. + 5050 BeholdTV 505 FM +631c SmartInfra Ltd + 1652 PXI-1652 Signal Generator + 2504 PXI-2504 Signal Interrogator +6356 UltraStor +6374 c't Magazin fuer Computertechnik + 6773 GPPCI +6409 Logitec Corp. +6549 Teradici Corp. +6666 Decision Computer International Co. + 0001 PCCOM4 + 0002 PCCOM8 + 0004 PCCOM2 + 0101 PCI 8255/8254 I/O Card + 0200 12-bit AD/DA Card + 0201 14-bit AD/DA Card + 1011 Industrial Card + 1021 8 photo couple 8 relay Card + 1022 4 photo couple 4 relay Card + 1025 16 photo couple 16 relay Card + 4000 WatchDog Card +6900 Qumranet +7063 pcHDTV + 2000 HD-2000 + 3000 HD-3000 + 5500 HD5500 HDTV +7284 HT OMEGA Inc. +7604 O.N. Electronic Co Ltd. +7bde MIDAC Corporation +7fed PowerTV +8008 Quancom Electronic GmbH + 0010 WDOG1 [PCI-Watchdog 1] + 0011 PWDOG2 [PCI-Watchdog 2] + 0015 Clock77/PCI & Clock77/PCIe (DCF-77 receiver) +# Wrong ID used in subsystem ID of AsusTek PCI-USB2 PCI card. +807d Asustek Computer, Inc. +8086 Intel Corporation + 0007 82379AB + 0008 Extended Express System Support Controller + 0039 21145 Fast Ethernet + 0040 Clarkdake DRAM Controller + 0041 Clarkdale PCI Express x16 Root Port + 0042 Clarkdale Integrated Graphics Controller + 0043 Clarkdale Secondary PCI Express Root Port + 0044 Arrandale DRAM Controller + 0045 Arrandale PCI Express x16 Root Port + 0046 Arrandale Integrated Graphics Controller + 0047 Arrandale Secondary PCI Express Root Port + 0048 Arrandale/Clarkdale DRAM Controller + 0050 Arrandale/Clarkdale Thermal Management Controller + 0082 WiFi Link 6000 Series + 0083 WiFi Link 100 Series + 0084 WiFi Link 100 Series + 0085 WiFi Link 6000 Series + 0086 WiMAX/WiFi Link 6050 Series + 0087 WiMAX/WiFi Link 6050 Series + 0088 WiMAX/WiFi Link 6050 Series + 0089 WiMAX/WiFi Link 6050 Series + 0122 82437FX + 0309 80303 I/O Processor PCI-to-PCI Bridge + 030d 80312 I/O Companion Chip PCI-to-PCI Bridge + 0326 6700/6702PXH I/OxAPIC Interrupt Controller A + 1775 1100 CR11/VR11 Single Board Computer + 0327 6700PXH I/OxAPIC Interrupt Controller B + 1775 1100 CR11/VR11 Single Board Computer + 0329 6700PXH PCI Express-to-PCI Bridge A + 032a 6700PXH PCI Express-to-PCI Bridge B + 032c 6702PXH PCI Express-to-PCI Bridge A + 0330 80332 [Dobson] I/O processor (A-Segment Bridge) + 0331 80332 [Dobson] I/O processor (A-Segment IOAPIC) + 0332 80332 [Dobson] I/O processor (B-Segment Bridge) + 0333 80332 [Dobson] I/O processor (B-Segment IOAPIC) + 0334 80332 [Dobson] I/O processor (ATU) + 0335 80331 [Lindsay] I/O processor (PCI-X Bridge) + 0336 80331 [Lindsay] I/O processor (ATU) + 0340 41210 [Lanai] Serial to Parallel PCI Bridge (A-Segment Bridge) + 0341 41210 [Lanai] Serial to Parallel PCI Bridge (B-Segment Bridge) + 0370 80333 Segment-A PCI Express-to-PCI Express Bridge + 0371 80333 A-Bus IOAPIC + 0372 80333 Segment-B PCI Express-to-PCI Express Bridge + 0373 80333 B-Bus IOAPIC + 0374 80333 Address Translation Unit + 0482 82375EB/SB PCI to EISA Bridge + 0483 82424TX/ZX [Saturn] CPU to PCI bridge + 0484 82378ZB/IB, 82379AB (SIO, SIO.A) PCI to ISA Bridge + 0486 82425EX/ZX [Aries] PCIset with ISA bridge + 04a3 82434LX/NX [Mercury/Neptune] Processor to PCI bridge + 04d0 82437FX [Triton FX] + 0500 E8870 Processor bus control + 0501 E8870 Memory controller +# and registers common to both SPs + 0502 E8870 Scalability Port 0 +# and global performance monitoring + 0503 E8870 Scalability Port 1 + 0510 E8870IO Hub Interface Port 0 registers (8-bit compatibility port) + 0511 E8870IO Hub Interface Port 1 registers + 0512 E8870IO Hub Interface Port 2 registers + 0513 E8870IO Hub Interface Port 3 registers + 0514 E8870IO Hub Interface Port 4 registers + 0515 E8870IO General SIOH registers + 0516 E8870IO RAS registers + 0530 E8870SP Scalability Port 0 registers + 0531 E8870SP Scalability Port 1 registers + 0532 E8870SP Scalability Port 2 registers + 0533 E8870SP Scalability Port 3 registers + 0534 E8870SP Scalability Port 4 registers + 0535 E8870SP Scalability Port 5 registers +# (bi-interleave 0) and global registers that are neither per-port nor per-interleave + 0536 E8870SP Interleave registers 0 and 1 +# (bi-interleave 1) + 0537 E8870SP Interleave registers 2 and 3 + 0600 RAID Controller + 8086 0136 SRCU31L + 8086 01af SRCZCR + 8086 01c1 ICP Vortex GDT8546RZ + 8086 01f7 SCRU32 +# uninitialized SRCU32 RAID Controller + 061f 80303 I/O Processor + 0960 80960RP (i960RP) Microprocessor/Bridge + 0962 80960RM (i960RM) Bridge + 0964 80960RP (i960RP) Microprocessor/Bridge + 1000 82542 Gigabit Ethernet Controller (Fiber) + 0e11 b0df NC6132 Gigabit Ethernet Adapter (1000-SX) + 0e11 b0e0 NC6133 Gigabit Ethernet Adapter (1000-LX) + 0e11 b123 NC6134 Gigabit Ethernet Adapter (1000-LX) + 1014 0119 Netfinity Gigabit Ethernet SX Adapter + 8086 1000 PRO/1000 Gigabit Server Adapter + 1001 82543GC Gigabit Ethernet Controller (Fiber) + 0e11 004a NC6136 Gigabit Server Adapter + 1014 01ea Netfinity Gigabit Ethernet SX Adapter + 8086 1002 PRO/1000 F Server Adapter + 8086 1003 PRO/1000 F Server Adapter + 1002 Pro 100 LAN+Modem 56 Cardbus II + 8086 200e Pro 100 LAN+Modem 56 Cardbus II + 8086 2013 Pro 100 SR Mobile Combo Adapter + 8086 2017 Pro 100 S Combo Mobile Adapter + 1004 82543GC Gigabit Ethernet Controller (Copper) + 0e11 0049 NC7132 Gigabit Upgrade Module + 0e11 b1a4 NC7131 Gigabit Server Adapter + 1014 10f2 Gigabit Ethernet Server Adapter + 8086 1004 PRO/1000 T Server Adapter + 8086 2004 PRO/1000 T Server Adapter + 1008 82544EI Gigabit Ethernet Controller (Copper) + 1014 0269 iSeries 1000/100/10 Ethernet Adapter + 1028 011b PowerEdge 1650/2550 + 1028 011c PRO/1000 XT Network Connection + 8086 1107 PRO/1000 XT Server Adapter + 8086 2107 PRO/1000 XT Server Adapter + 8086 2110 PRO/1000 XT Desktop Adapter + 8086 3108 PRO/1000 XT Network Connection + 1009 82544EI Gigabit Ethernet Controller (Fiber) + 1014 0268 iSeries Gigabit Ethernet Adapter + 8086 1109 PRO/1000 XF Server Adapter + 8086 2109 PRO/1000 XF Server Adapter + 100a 82540EM Gigabit Ethernet Controller + 100c 82544GC Gigabit Ethernet Controller (Copper) + 8086 1112 PRO/1000 T Desktop Adapter + 8086 2112 PRO/1000 T Desktop Adapter + 100d 82544GC Gigabit Ethernet Controller (LOM) + 1028 0123 PRO/1000 XT Network Connection + 1079 891f 82544GC Based Network Connection + 4c53 1080 CT8 mainboard + 8086 110d 82544GC Based Network Connection + 100e 82540EM Gigabit Ethernet Controller + 1014 0265 PRO/1000 MT Network Connection + 1014 0267 PRO/1000 MT Network Connection + 1014 026a PRO/1000 MT Network Connection + 1028 002e Optiplex GX260 + 1028 0134 PowerEdge 600SC + 1028 0151 Optiplex GX270 + 107b 8920 PRO/1000 MT Desktop Adapter + 8086 001e PRO/1000 MT Desktop Adapter + 8086 002e PRO/1000 MT Desktop Adapter + 8086 1376 PRO/1000 GT Desktop Adapter + 8086 1476 PRO/1000 GT Desktop Adapter + 100f 82545EM Gigabit Ethernet Controller (Copper) + 1014 0269 iSeries 1000/100/10 Ethernet Adapter + 1014 028e PRO/1000 MT Network Connection + 15ad 0750 PRO/1000 MT Single Port Adapter + 8086 1000 PRO/1000 MT Network Connection + 8086 1001 PRO/1000 MT Server Adapter + 1010 82546EB Gigabit Ethernet Controller (Copper) + 0e11 00db NC7170 Gigabit Server Adapter + 1014 027c PRO/1000 MT Dual Port Network Adapter + 15ad 0760 PRO/1000 MT Dual Port Adapter + 18fb 7872 RESlink-X + 1fc1 0026 Niagara 2260 Bypass Card + 4c53 1080 CT8 mainboard + 4c53 10a0 CA3/CR3 mainboard + 8086 1011 PRO/1000 MT Dual Port Server Adapter + 8086 1012 PRO/1000 MT Dual Port Server Adapter + 8086 101a PRO/1000 MT Dual Port Network Connection + 8086 3424 SE7501HG2 Mainboard + 1011 82545EM Gigabit Ethernet Controller (Fiber) + 1014 0268 iSeries Gigabit Ethernet Adapter + 8086 1002 PRO/1000 MF Server Adapter + 8086 1003 PRO/1000 MF Server Adapter (LX) + 1012 82546EB Gigabit Ethernet Controller (Fiber) + 0e11 00dc NC6170 Gigabit Server Adapter + 8086 1012 PRO/1000 MF Dual Port Server Adapter + 1013 82541EI Gigabit Ethernet Controller + 8086 0013 PRO/1000 MT Network Connection + 8086 1013 PRO/1000 MT Network Connection + 8086 1113 PRO/1000 MT Desktop Adapter + 1014 82541ER Gigabit Ethernet Controller + 8086 0014 PRO/1000 MT Desktop Connection + 8086 1014 PRO/1000 MT Network Connection + 1015 82540EM Gigabit Ethernet Controller (LOM) + 8086 1015 PRO/1000 MT Mobile Connection + 1016 82540EP Gigabit Ethernet Controller (Mobile) + 1014 052c PRO/1000 MT Mobile Connection + 1179 0001 PRO/1000 MT Mobile Connection + 8086 1016 PRO/1000 MT Mobile Connection + 1017 82540EP Gigabit Ethernet Controller + 8086 1017 PR0/1000 MT Desktop Connection + 1018 82541EI Gigabit Ethernet Controller + 8086 1018 PRO/1000 MT Mobile Connection + 1019 82547EI Gigabit Ethernet Controller + 1458 1019 GA-8IPE1000 Pro2 motherboard (865PE) + 1458 e000 Intel Gigabit Ethernet (Kenai II) + 8086 1019 ASUS PC-DL Deluxe mainboard (Socket 603) + 8086 301f D865PERL mainboard + 8086 3025 D875PBZ motherboard + 8086 302c Intel 82865G Mainboard (D865GBF) + 8086 3427 S875WP1-E mainboard + 101a 82547EI Gigabit Ethernet Controller (Mobile) + 8086 101a PRO/1000 CT Mobile Connection + 101d 82546EB Gigabit Ethernet Controller + 8086 1000 PRO/1000 MT Quad Port Server Adapter + 101e 82540EP Gigabit Ethernet Controller (Mobile) + 1014 0549 Thinkpad + 1179 0001 PRO/1000 MT Mobile Connection + 8086 101e PRO/1000 MT Mobile Connection + 1026 82545GM Gigabit Ethernet Controller + 1028 0169 Precision 470 + 8086 1000 PRO/1000 MT Server Connection + 8086 1001 PRO/1000 MT Server Adapter + 8086 1002 PRO/1000 MT Server Adapter + 8086 1003 PRO/1000 GT Server Adapter + 8086 1026 PRO/1000 MT Server Connection + 1027 82545GM Gigabit Ethernet Controller + 103c 3103 NC310F PCI-X Gigabit Server Adapter + 8086 1001 PRO/1000 MF Server Adapter(LX) + 8086 1002 PRO/1000 MF Server Adapter(LX) + 8086 1003 PRO/1000 MF Server Adapter(LX) + 8086 1027 PRO/1000 MF Server Adapter + 1028 82545GM Gigabit Ethernet Controller + 8086 1028 PRO/1000 MB Server Connection + 1029 82559 Ethernet Controller + 1030 82559 InBusiness 10/100 + 1031 82801CAM (ICH3) PRO/100 VE (LOM) Ethernet Controller + 1014 0209 ThinkPad A/T/X Series + 104d 80e7 Vaio PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 104d 813c Vaio PCG-GRV616G + 107b 5350 EtherExpress PRO/100 VE + 1179 0001 EtherExpress PRO/100 VE + 144d c000 EtherExpress PRO/100 VE + 144d c001 EtherExpress PRO/100 VE + 144d c003 EtherExpress PRO/100 VE + 144d c006 vpr Matrix 170B4 + 1032 82801CAM (ICH3) PRO/100 VE Ethernet Controller + 1033 82801CAM (ICH3) PRO/100 VM (LOM) Ethernet Controller + 1034 82801CAM (ICH3) PRO/100 VM Ethernet Controller + 1035 82801CAM (ICH3)/82562EH (LOM) Ethernet Controller + 1036 82801CAM (ICH3) 82562EH Ethernet Controller + 1037 82801CAM (ICH3) Chipset Ethernet Controller + 1038 82801CAM (ICH3) PRO/100 VM (KM) Ethernet Controller + 0e11 0098 Evo N600c + 1039 82801DB PRO/100 VE (LOM) Ethernet Controller + 1014 0267 NetVista A30p + 114a 0582 PC8 onboard ethernet ETH1 + 103a 82801DB PRO/100 VE (CNR) Ethernet Controller + 103b 82801DB PRO/100 VM (LOM) Ethernet Controller + 103c 82801DB PRO/100 VM (CNR) Ethernet Controller + 103d 82801DB PRO/100 VE (MOB) Ethernet Controller + 1014 0522 ThinkPad R40 + 8086 103d 82562EZ 10/100 Ethernet Controller + 103e 82801DB PRO/100 VM (MOB) Ethernet Controller + 1040 536EP Data Fax Modem + 16be 1040 V.9X DSP Data Fax Modem + 1043 PRO/Wireless LAN 2100 3B Mini PCI Adapter + 103c 08b0 tc1100 tablet + 8086 2522 Samsung X10/P30 integrated WLAN + 8086 2527 MIM2000/Centrino + 8086 2561 Dell Latitude D800 + 8086 2581 Toshiba Satellite M10 + 1048 82597EX 10GbE Ethernet Controller + 8086 a01f PRO/10GbE LR Server Adapter + 8086 a11f PRO/10GbE LR Server Adapter + 1049 82566MM Gigabit Network Connection + 103c 30c1 Compaq 6910p + 17aa 20b9 ThinkPad T61 + 104a 82566DM Gigabit Network Connection + 104b 82566DC Gigabit Network Connection + 104c 82562V 10/100 Network Connection + 104d 82566MC Gigabit Network Connection + 1050 82562EZ 10/100 Ethernet Controller + 1028 019d Dimension 3000 + 1462 728c 865PE Neo2 (MS-6728) + 1462 758c MS-6758 (875P Neo) + 8086 3020 D865PERL mainboard + 8086 302f Desktop Board D865GBF + 8086 3427 S875WP1-E mainboard + 1051 82801EB/ER (ICH5/ICH5R) integrated LAN Controller + 1052 PRO/100 VM Network Connection + 1053 PRO/100 VM Network Connection + 1054 PRO/100 VE Network Connection + 1055 PRO/100 VM Network Connection + 1056 PRO/100 VE Network Connection + 1057 PRO/100 VE Network Connection + 1059 82551QM Ethernet Controller + 105b 82546GB Gigabit Ethernet Controller (Copper) + 105e 82571EB Gigabit Ethernet Controller + 103c 7044 NC360T PCI Express Dual Port Gigabit Server Adapter + 103c 704e Dual Port 1000Base-T (PCIe) [AD337A] + 1775 1100 CR11/VR11 Single Board Computer + 1775 6003 Telum GE-QT + 8086 005e PRO/1000 PT Dual Port Server Connection + 8086 105e PRO/1000 PT Dual Port Network Connection + 8086 10d5 82571PT Gigabit PT Quad Port Server ExpressModule + 8086 115e PRO/1000 PT Dual Port Server Adapter + 8086 125e PRO/1000 PT Dual Port Server Adapter + 8086 135e PRO/1000 PT Dual Port Server Adapter + 105f 82571EB Gigabit Ethernet Controller + 103c 704f Dual Port 1000Base-SX (PCIe) [AD338A] + 8086 005a PRO/1000 PF Dual Port Server Adapter + 8086 115f PRO/1000 PF Dual Port Server Adapter + 8086 125f PRO/1000 PF Dual Port Server Adapter + 8086 135f PRO/1000 PF Dual Port Server Adapter + 1060 82571EB Gigabit Ethernet Controller + 8086 0060 PRO/1000 PB Dual Port Server Connection + 8086 1060 PRO/1000 PB Dual Port Server Connection + 1064 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller + 1043 80f8 P5GD1-VW Mainboard + 1065 82562ET/EZ/GT/GZ - PRO/100 VE Ethernet Controller + 1066 82562 EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller + 1067 82562 EM/EX/GX - PRO/100 VM Ethernet Controller + 1068 82562ET/EZ/GT/GZ - PRO/100 VE (LOM) Ethernet Controller Mobile + 1069 82562EM/EX/GX - PRO/100 VM (LOM) Ethernet Controller Mobile + 106a 82562G - PRO/100 VE (LOM) Ethernet Controller + 106b 82562G - PRO/100 VE Ethernet Controller Mobile + 1075 82547GI Gigabit Ethernet Controller + 1028 0165 PowerEdge 750 + 8086 0075 PRO/1000 CT Network Connection + 8086 1075 PRO/1000 CT Network Connection + 1076 82541GI Gigabit Ethernet Controller + 1028 0165 PRO/1000 MT Network Connection + 1028 016d PRO/1000 MT Network Connection + 1028 019a PRO/1000 MT Network Connection + 1028 106d PRO/1000 MT Network Connection + 8086 0076 PRO/1000 MT Network Connection + 8086 1076 PRO/1000 MT Network Connection + 8086 1176 PRO/1000 MT Desktop Adapter + 8086 1276 PRO/1000 MT Network Adapter + 1077 82541GI Gigabit Ethernet Controller + 1179 0001 PRO/1000 MT Mobile Connection + 8086 0077 PRO/1000 MT Mobile Connection + 8086 1077 PRO/1000 MT Mobile Connection + 1078 82541ER Gigabit Ethernet Controller + 8086 1078 82541ER-based Network Connection + 1079 82546GB Gigabit Ethernet Controller + 103c 12a6 Dual Port 1000Base-T [A9900A] + 103c 12cf Core Dual Port 1000Base-T [AB352A] + 1775 10d0 V5D Single Board Computer Gigabit Ethernet + 1775 ce90 CE9 + 1fc1 0027 Niagara 2261 Failover NIC + 4c53 1090 Cx9 / Vx9 mainboard + 4c53 10b0 CL9 mainboard + 8086 0079 PRO/1000 MT Dual Port Network Connection + 8086 1079 PRO/1000 MT Dual Port Network Connection + 8086 1179 PRO/1000 MT Dual Port Server Adapter + 8086 117a PRO/1000 MT Dual Port Server Adapter + 107a 82546GB Gigabit Ethernet Controller + 103c 12a8 Dual Port 1000base-SX [A9899A] + 8086 107a PRO/1000 MF Dual Port Server Adapter + 8086 127a PRO/1000 MF Dual Port Server Adapter + 107b 82546GB Gigabit Ethernet Controller + 8086 007b PRO/1000 MB Dual Port Server Connection + 8086 107b PRO/1000 MB Dual Port Server Connection + 107c 82541PI Gigabit Ethernet Controller + 8086 1376 PRO/1000 GT Desktop Adapter + 8086 1476 PRO/1000 GT Desktop Adapter + 107d 82572EI Gigabit Ethernet Controller (Copper) + 8086 1082 PRO/1000 PT Server Adapter + 8086 1084 PRO/1000 PT Server Adapter + 8086 1092 PRO/1000 PT Server Adapter + 107e 82572EI Gigabit Ethernet Controller (Fiber) + 8086 1084 PRO/1000 PF Server Adapter + 8086 1085 PRO/1000 PF Server Adapter + 8086 1094 PRO/1000 PF Server Adapter + 107f 82572EI Gigabit Ethernet Controller + 1080 FA82537EP 56K V.92 Data/Fax Modem PCI + 1081 631xESB/632xESB LAN Controller Copper + 1082 631xESB/632xESB LAN Controller fiber + 1083 631xESB/632xESB LAN Controller SERDES + 1084 631xESB/632xESB IDE Redirection + 1085 631xESB/632xESB Serial Port Redirection + 1086 631xESB/632xESB IPMI/KCS0 + 1087 631xESB/632xESB UHCI Redirection + 1089 631xESB/632xESB BT + 108a 82546GB Gigabit Ethernet Controller + 8086 108a PRO/1000 P Dual Port Server Adapter + 8086 118a PRO/1000 P Dual Port Server Adapter + 108b 82573V Gigabit Ethernet Controller (Copper) + 1462 176c on board on MSI 945P - NEO (MS-7176) + 108c 82573E Gigabit Ethernet Controller (Copper) + 108e 82573E KCS (Active Management) + 108f Active Management Technology - SOL + 1091 PRO/100 VM Network Connection + 1092 PRO/100 VE Network Connection + 1093 PRO/100 VM Network Connection + 1094 PRO/100 VE Network Connection + 1095 PRO/100 VE Network Connection + 1096 80003ES2LAN Gigabit Ethernet Controller (Copper) + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 1097 631xESB/632xESB DPT LAN Controller (Fiber) + 1098 80003ES2LAN Gigabit Ethernet Controller (Serdes) + 1099 82546GB Gigabit Ethernet Controller (Copper) + 8086 1099 PRO/1000 GT Quad Port Server Adapter + 109a 82573L Gigabit Ethernet Controller + 1179 ff10 PRO/1000 PL + 17aa 2001 ThinkPad T60 + 17aa 207e ThinkPad X60s + 8086 109a PRO/1000 PL Network Connection + 8086 309c DeskTop Board D945GTP + 8086 30a5 DeskTop Board D975XBX + 109b 82546GB PRO/1000 GF Quad Port Server Adapter + 109e 82597EX 10GbE Ethernet Controller + 8086 a01f PRO/10GbE CX4 Server Adapter + 8086 a11f PRO/10GbE CX4 Server Adapter + 10a0 82571EB PRO/1000 AT Quad Port Bypass Adapter + 10a1 82571EB PRO/1000 AF Quad Port Bypass Adapter + 10a4 82571EB Gigabit Ethernet Controller + 8086 10a4 PRO/1000 PT Quad Port Server Adapter + 8086 11a4 PRO/1000 PT Quad Port Server Adapter + 10a5 82571EB Gigabit Ethernet Controller (Fiber) + 8086 10a5 PRO/1000 PF Quad Port Server Adapter + 8086 10a6 PRO/1000 PF Quad Port Server Adapter + 10a7 82575EB Gigabit Network Connection + 8086 10a8 82575EB Gigabit Riser Card + 10a9 82575EB Gigabit Backplane Connection + 10b0 82573L PRO/1000 PL Network Connection + 10b2 82573V PRO/1000 PM Network Connection + 10b3 82573E PRO/1000 PM Network Connection + 10b4 82573L PRO/1000 PL Network Connection + 10b5 82546GB Gigabit Ethernet Controller (Copper) + 103c 3109 NC340T PCI-X Quad-port Gigabit Server Adapter + 8086 1099 PRO/1000 GT Quad Port Server Adapter + 8086 1199 PRO/1000 GT Quad Port Server Adapter + 10b6 82598 10GbE PCI-Express Ethernet Controller + 10b9 82572EI Gigabit Ethernet Controller (Copper) + 103c 704a HP 110T PCIe Gigabit Server Adapter + 8086 1083 PRO/1000 PT Desktop Adapter + 8086 1093 PRO/1000 PT Desktop Adapter + 10ba 80003ES2LAN Gigabit Ethernet Controller (Copper) + 10bb 80003ES2LAN Gigabit Ethernet Controller (Serdes) + 10bc 82571EB Gigabit Ethernet Controller (Copper) + 103c 704b NC364T PCI Express Quad Port Gigabit Server Adapter + 108e 11bc x4 PCI-Express Quad Gigabit Ethernet UTP Low Profile Adapter + 8086 10bc PRO/1000 PT Quad Port LP Server Adapter + 8086 11bc PRO/1000 PT Quad Port LP Server Adapter + 10bd 82566DM-2 Gigabit Network Connection + 1028 0211 OptiPlex 755 + 10be 82567 Gigabit Network Connection + 10bf 82567LF Gigabit Network Connection + 10c0 82562V-2 10/100 Network Connection + 10c2 82562G-2 10/100 Network Connection + 10c3 82562GT-2 10/100 Network Connection + 10c4 82562GT 10/100 Network Connection + 10c5 82562G 10/100 Network Connection + 10c6 82598EB 10-Gigabit AF Dual Port Network Connection + 8086 a05f 10-Gigabit XF SR Dual Port Server Adapter + 8086 a15f 10-Gigabit XF SR Dual Port Server Adapter + 10c7 82598EB 10-Gigabit AF Network Connection + 1014 037f 10-Gigabit XF SR Server Adapter + 1014 0380 10-Gigabit XF LR Server Adapter + 8086 a05f 10-Gigabit XF SR Server Adapter + 8086 a15f 10-Gigabit XF SR Server Adapter + 8086 a16f 10-Gigabit XF SR Server Adapter + 10c8 82598EB 10-Gigabit AT Network Connection + 8086 a10c 10-Gigabit AT Server Adapter + 8086 a11c 10-Gigabit AT Server Adapter + 8086 a12c 10-Gigabit AT Server Adapter + 10c9 82576 Gigabit Network Connection + 103c 31ef NC362i Integrated Dual port Gigabit Server Adapter + 103c 323f NC362i Integrated Dual port Gigabit Server Adapter + 10a9 8028 UV-BaseIO dual-port GbE + 13a3 0037 DS4100 Secure Multi-Gigabit Server Adapter with Compression + 8086 a01c Gigabit ET Dual Port Server Adapter + 8086 a03c Gigabit ET Dual Port Server Adapter + 10ca 82576 Virtual Function + 10cb 82567V Gigabit Network Connection + 10cc 82567LM-2 Gigabit Network Connection + 10cd 82567LF-2 Gigabit Network Connection + 10ce 82567V-2 Gigabit Network Connection + 10d3 82574L Gigabit Network Connection + 103c 3250 NC112T PCI Express single Port Gigabit Server Adapter + 8086 a01f Gigabit CT Desktop Adapter + 10d5 82571PT Gigabit PT Quad Port Server ExpressModule + 10d6 82575GB Gigabit Network Connection + 8086 10d6 Gigabit VT Quad Port Server Adapter + 8086 145a Gigabit VT Quad Port Server Adapter + 8086 147a Gigabit VT Quad Port Server Adapter + 10d9 82571EB Dual Port Gigabit Mezzanine Adapter + 103c 1716 NC360m Dual Port 1GbE BL-c Adapter + 10da 82571EB Quad Port Gigabit Mezzanine Adapter + 103c 1717 NC364m Quad Port 1GbE BL-c Adapter + 10db 82598EB 10-Gigabit Dual Port Network Connection + 10dd 82598EB 10-Gigabit AT CX4 Network Connection + 10de 82567LM-3 Gigabit Network Connection + 10df 82567LF-3 Gigabit Network Connection + 10e1 82598EB 10-Gigabit AF Dual Port Network Connection + 8086 a15f 10-Gigabit SR Dual Port Express Module + 10e2 82575GB Gigabit Network Connection + 8086 10e2 Gigabit VT Quad Port Server Adapter + 10e5 82567LM-4 Gigabit Network Connection + 10e6 82576 Gigabit Network Connection + 8086 a01f Gigabit EF Dual Port Server Adapter + 8086 a02f Gigabit EF Dual Port Server Adapter + 10e7 82576 Gigabit Network Connection + 103c 31ff NC362i Integrated Dual Port BL-c Gigabit Server Adapter + 10e8 82576 Gigabit Network Connection + 8086 a02b Gigabit ET Quad Port Server Adapter + 8086 a02c Gigabit ET Quad Port Server Adapter + 10ea 82577LM Gigabit Network Connection + 10eb 82577LC Gigabit Network Connection + 10ec 82598EB 10-Gigabit AT CX4 Network Connection + 8086 a01f 10-Gigabit CX4 Dual Port Server Adapter + 8086 a11f 10-Gigabit CX4 Dual Port Server Adapter + 10ef 82578DM Gigabit Network Connection + 10f0 82578DC Gigabit Network Connection + 10f1 82598EB 10-Gigabit AF Dual Port Network Connection + 8086 a20f 10-Gigabit AF DA Dual Port Server Adapter + 8086 a21f 10-Gigabit AF DA Dual Port Server Adapter + 10f4 82598EB 10-Gigabit AF Network Connection + 8086 106f 10-Gigabit XF LR Server Adapter + 8086 a06f 10-Gigabit XF LR Server Adapter + 10f5 82567LM Gigabit Network Connection + 10f6 82574L Gigabit Network Connection + 10f7 82599EB 10-Gigabit KX4 Network Connection + 8086 000d Ethernet Mezzanine Adapter X520-KX4-2 + 10fb 82599EB 10-Gigabit Network Connection + 108e 7b11 Ethernet Server Adapter X520-2 + 8086 0002 Ethernet Server Adapter X520-DA2 + 8086 0003 Ethernet Server Adapter X520-2 + 8086 0006 Ethernet Server Adapter X520-1 + 8086 000a Ethernet Server Adapter X520-1 + 8086 000c Ethernet Server Adapter X520-2 + 10fc 82599EB 10-Gigabit Dual Port Network Connection + 10fe 82552 10/100 Network Connection + 1107 PRO/1000 MF Server Adapter (LX) + 1130 82815 815 Chipset Host Bridge and Memory Controller Hub + 1025 1016 Travelmate 612 TX + 1043 8027 TUSL2-C Mainboard + 104d 80df Vaio PCG-FX403 + 8086 4532 D815EEA2 mainboard + 8086 4557 D815EGEW Mainboard + 1131 82815 815 Chipset AGP Bridge + 1132 82815 Chipset Graphics Controller (CGC) + 1025 1016 Travelmate 612 TX + 103c 2001 e-pc 40 + 104d 80df Vaio PCG-FX403 + 8086 4532 D815EEA2 Mainboard + 8086 4541 D815EEA Motherboard + 8086 4557 D815EGEW Mainboard + 1161 82806AA PCI64 Hub Advanced Programmable Interrupt Controller + 8086 1161 82806AA PCI64 Hub APIC + 1162 Xscale 80200 Big Endian Companion Chip + 1200 IXP1200 Network Processor + 172a 0000 AEP SSL Accelerator + 1209 8255xER/82551IT Fast Ethernet Controller + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard + 4c53 1070 PC6 mainboard + 1221 82092AA PCI to PCMCIA Bridge + 1222 82092AA IDE Controller + 1223 SAA7116 + 1225 82452KX/GX [Orion] + 1226 82596 PRO/10 PCI + 1227 82865 EtherExpress PRO/100A + 1228 82556 EtherExpress PRO/100 Smart + 1229 82557/8/9/0/1 Ethernet Pro 100 + 0e11 3001 82559 Fast Ethernet LOM with Alert on LAN* + 0e11 3002 82559 Fast Ethernet LOM with Alert on LAN* + 0e11 3003 82559 Fast Ethernet LOM with Alert on LAN* + 0e11 3004 82559 Fast Ethernet LOM with Alert on LAN* + 0e11 3005 82559 Fast Ethernet LOM with Alert on LAN* + 0e11 3006 82559 Fast Ethernet LOM with Alert on LAN* + 0e11 3007 82559 Fast Ethernet LOM with Alert on LAN* + 0e11 b01e NC3120 Fast Ethernet NIC + 0e11 b01f NC3122 Fast Ethernet NIC (dual port) + 0e11 b02f NC1120 Ethernet NIC + 0e11 b04a Netelligent 10/100TX NIC with Wake on LAN + 0e11 b0c6 NC3161 Fast Ethernet NIC (embedded, WOL) + 0e11 b0c7 NC3160 Fast Ethernet NIC (embedded) + 0e11 b0d7 NC3121 Fast Ethernet NIC (WOL) + 0e11 b0dd NC3131 Fast Ethernet NIC (dual port) + 0e11 b0de NC3132 Fast Ethernet Module (dual port) + 0e11 b0e1 NC3133 Fast Ethernet Module (100-FX) + 0e11 b134 NC3163 Fast Ethernet NIC (embedded, WOL) + 0e11 b13c NC3162 Fast Ethernet NIC (embedded) + 0e11 b144 NC3123 Fast Ethernet NIC (WOL) + 0e11 b163 NC3134 Fast Ethernet NIC (dual port) + 0e11 b164 NC3135 Fast Ethernet Upgrade Module (dual port) + 0e11 b1a4 NC7131 Gigabit Server Adapter + 1014 005c 82558B Ethernet Pro 10/100 + 1014 01bc 82559 Fast Ethernet LAN On Motherboard + 1014 01f1 10/100 Ethernet Server Adapter + 1014 01f2 10/100 Ethernet Server Adapter + 1014 0207 Ethernet Pro/100 S + 1014 0232 10/100 Dual Port Server Adapter + 1014 023a ThinkPad R30 + 1014 105c Netfinity 10/100 + 1014 2205 ThinkPad A22p + 1014 305c 10/100 EtherJet Management Adapter + 1014 405c 10/100 EtherJet Adapter with Alert on LAN + 1014 505c 10/100 EtherJet Secure Management Adapter + 1014 605c 10/100 EtherJet Secure Management Adapter + 1014 705c 10/100 Netfinity 10/100 Ethernet Security Adapter + 1014 805c 10/100 Netfinity 10/100 Ethernet Security Adapter + 1028 009b 10/100 Ethernet Server Adapter + 1028 00ce 10/100 Ethernet Server Adapter + 1033 8000 PC-9821X-B06 + 1033 8016 PK-UG-X006 + 1033 801f PK-UG-X006 + 1033 8026 PK-UG-X006 + 1033 8063 82559-based Fast Ethernet Adapter + 1033 8064 82559-based Fast Ethernet Adapter + 103c 10c0 NetServer 10/100TX + 103c 10c3 NetServer 10/100TX + 103c 10ca NetServer 10/100TX + 103c 10cb NetServer 10/100TX + 103c 10e3 NetServer 10/100TX + 103c 10e4 NetServer 10/100TX + 103c 1200 NetServer 10/100TX + 108e 10cf EtherExpress PRO/100(B) + 10c3 1100 SmartEther100 SC1100 + 10cf 1115 8255x-based Ethernet Adapter (10/100) + 10cf 1143 8255x-based Ethernet Adapter (10/100) + 110a 008b 82551QM Fast Ethernet Multifuction PCI/CardBus Controller + 114a 0582 PC8 onboard ethernet ETH2 + 1179 0001 8255x-based Ethernet Adapter (10/100) + 1179 0002 PCI FastEther LAN on Docker + 1179 0003 8255x-based Fast Ethernet + 1259 2560 AT-2560 100 + 1259 2561 AT-2560 100 FX Ethernet Adapter + 1266 0001 NE10/100 Adapter + 13e9 1000 6221L-4U + 144d 2501 SEM-2000 MiniPCI LAN Adapter + 144d 2502 SEM-2100IL MiniPCI LAN Adapter + 1668 1100 EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem) + 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 1080 CT8 mainboard + 4c53 10e0 PSL09 PrPMC + 8086 0001 EtherExpress PRO/100B (TX) + 8086 0002 EtherExpress PRO/100B (T4) + 8086 0003 EtherExpress PRO/10+ + 8086 0004 EtherExpress PRO/100 WfM + 8086 0005 82557 10/100 + 8086 0006 82557 10/100 with Wake on LAN + 8086 0007 82558 10/100 Adapter + 8086 0008 82558 10/100 with Wake on LAN + 8086 0009 82558B PRO/100+ PCI (TP) + 8086 000a EtherExpress PRO/100+ Management Adapter + 8086 000b EtherExpress PRO/100+ + 8086 000c EtherExpress PRO/100+ Management Adapter + 8086 000d EtherExpress PRO/100+ Alert On LAN II* Adapter + 8086 000e EtherExpress PRO/100+ Management Adapter with Alert On LAN* + 8086 000f EtherExpress PRO/100 Desktop Adapter + 8086 0010 EtherExpress PRO/100 S Management Adapter + 8086 0011 EtherExpress PRO/100 S Management Adapter + 8086 0012 EtherExpress PRO/100 S Advanced Management Adapter (D) + 8086 0013 EtherExpress PRO/100 S Advanced Management Adapter (E) + 8086 0030 EtherExpress PRO/100 Management Adapter with Alert On LAN* GC + 8086 0031 EtherExpress PRO/100 Desktop Adapter + 8086 0040 EtherExpress PRO/100 S Desktop Adapter + 8086 0041 EtherExpress PRO/100 S Desktop Adapter + 8086 0042 EtherExpress PRO/100 Desktop Adapter + 8086 0050 EtherExpress PRO/100 S Desktop Adapter + 8086 1009 EtherExpress PRO/100+ Server Adapter + 8086 100c EtherExpress PRO/100+ Server Adapter (PILA8470B) + 8086 1012 EtherExpress PRO/100 S Server Adapter (D) + 8086 1013 EtherExpress PRO/100 S Server Adapter (E) + 8086 1015 EtherExpress PRO/100 S Dual Port Server Adapter + 8086 1017 EtherExpress PRO/100+ Dual Port Server Adapter + 8086 1030 EtherExpress PRO/100+ Management Adapter with Alert On LAN* G Server + 8086 1040 EtherExpress PRO/100 S Server Adapter + 8086 1041 EtherExpress PRO/100 S Server Adapter + 8086 1042 EtherExpress PRO/100 Server Adapter + 8086 1050 EtherExpress PRO/100 S Server Adapter + 8086 1051 EtherExpress PRO/100 Server Adapter + 8086 1052 EtherExpress PRO/100 Server Adapter + 8086 10f0 EtherExpress PRO/100+ Dual Port Adapter + 8086 1229 82557/8/9 [Ethernet Pro 100] + 8086 2009 EtherExpress PRO/100 S Mobile Adapter + 8086 200d EtherExpress PRO/100 Cardbus + 8086 200e EtherExpress PRO/100 LAN+V90 Cardbus Modem + 8086 200f EtherExpress PRO/100 SR Mobile Adapter + 8086 2010 EtherExpress PRO/100 S Mobile Combo Adapter + 8086 2013 EtherExpress PRO/100 SR Mobile Combo Adapter + 8086 2016 EtherExpress PRO/100 S Mobile Adapter + 8086 2017 EtherExpress PRO/100 S Combo Mobile Adapter + 8086 2018 EtherExpress PRO/100 SR Mobile Adapter + 8086 2019 EtherExpress PRO/100 SR Combo Mobile Adapter + 8086 2101 EtherExpress PRO/100 P Mobile Adapter + 8086 2102 EtherExpress PRO/100 SP Mobile Adapter + 8086 2103 EtherExpress PRO/100 SP Mobile Adapter + 8086 2104 EtherExpress PRO/100 SP Mobile Adapter + 8086 2105 EtherExpress PRO/100 SP Mobile Adapter + 8086 2106 EtherExpress PRO/100 P Mobile Adapter + 8086 2107 EtherExpress PRO/100 Network Connection + 8086 2108 EtherExpress PRO/100 Network Connection + 8086 2200 EtherExpress PRO/100 P Mobile Combo Adapter + 8086 2201 EtherExpress PRO/100 P Mobile Combo Adapter + 8086 2202 EtherExpress PRO/100 SP Mobile Combo Adapter + 8086 2203 EtherExpress PRO/100+ MiniPCI + 8086 2204 EtherExpress PRO/100+ MiniPCI + 8086 2205 EtherExpress PRO/100 SP Mobile Combo Adapter + 8086 2206 EtherExpress PRO/100 SP Mobile Combo Adapter + 8086 2207 EtherExpress PRO/100 SP Mobile Combo Adapter + 8086 2208 EtherExpress PRO/100 P Mobile Combo Adapter + 8086 2402 EtherExpress PRO/100+ MiniPCI + 8086 2407 EtherExpress PRO/100+ MiniPCI + 8086 2408 EtherExpress PRO/100+ MiniPCI + 8086 2409 EtherExpress PRO/100+ MiniPCI + 8086 240f EtherExpress PRO/100+ MiniPCI + 8086 2410 EtherExpress PRO/100+ MiniPCI + 8086 2411 EtherExpress PRO/100+ MiniPCI + 8086 2412 EtherExpress PRO/100+ MiniPCI + 8086 2413 EtherExpress PRO/100+ MiniPCI + 8086 3000 82559 Fast Ethernet LAN on Motherboard + 8086 3001 82559 Fast Ethernet LOM with Basic Alert on LAN* + 8086 3002 82559 Fast Ethernet LOM with Alert on LAN II* + 8086 3006 EtherExpress PRO/100 S Network Connection + 8086 3007 EtherExpress PRO/100 S Network Connection + 8086 3008 EtherExpress PRO/100 Network Connection + 8086 3010 EtherExpress PRO/100 S Network Connection + 8086 3011 EtherExpress PRO/100 S Network Connection + 8086 3012 EtherExpress PRO/100 Network Connection + 8086 301a S845WD1-E mainboard + 8086 3411 SDS2 Mainboard + 122d 430FX - 82437FX TSC [Triton I] + 122e 82371FB PIIX ISA [Triton I] + 1230 82371FB PIIX IDE [Triton I] + 1231 DSVD Modem + 1234 430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX) + 1235 430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP) + 1237 440FX - 82441FX PMC [Natoma] + 1af4 1100 Qemu virtual machine + 1239 82371FB PIIX IDE Interface + 123b 82380PB PCI to PCI Docking Bridge + 123c 82380AB (MISA) Mobile PCI-to-ISA Bridge + 123d 683053 Programmable Interrupt Device + 123e 82466GX (IHPC) Integrated Hot-Plug Controller (hidden mode) + 123f 82466GX Integrated Hot-Plug Controller (IHPC) + 1240 82752 (752) AGP Graphics Accelerator + 124b 82380FB (MPCI2) Mobile Docking Controller + 1250 430HX - 82439HX TXC [Triton II] + 1360 82806AA PCI64 Hub PCI Bridge + 1361 82806AA PCI64 Hub Controller (HRes) + 8086 1361 82806AA PCI64 Hub Controller (HRes) + 8086 8000 82806AA PCI64 Hub Controller (HRes) + 1460 82870P2 P64H2 Hub PCI Bridge + 1461 82870P2 P64H2 I/OxAPIC + 15d9 3480 P4DP6 + 4c53 1090 Cx9/Vx9 mainboard + 1462 82870P2 P64H2 Hot Plug Controller + 1508 82598EB Gigabit BX Network Connection + 150a 82576NS Gigabit Network Connection + 150b 82598EB 10-Gigabit AT2 Server Adapter + 8086 a10c 82598EB 10-Gigabit AT2 Server Adapter + 8086 a11c 82598EB 10-Gigabit AT2 Server Adapter + 8086 a12c 82598EB 10-Gigabit AT2 Server Adapter + 150c 82583V Gigabit Network Connection + 150d 82576 Gigabit Backplane Connection + 8086 a10c Gigabit ET Quad Port Mezzanine Card + 1518 82576NS SerDes Gigabit Network Connection + 1960 80960RP (i960RP) Microprocessor + 101e 0431 MegaRAID 431 RAID Controller + 101e 0438 MegaRAID 438 Ultra2 LVD RAID Controller + 101e 0466 MegaRAID 466 Express Plus RAID Controller + 101e 0467 MegaRAID 467 Enterprise 1500 RAID Controller + 101e 0490 MegaRAID 490 Express 300 RAID Controller + 101e 0762 MegaRAID 762 Express RAID Controller + 101e 09a0 PowerEdge Expandable RAID Controller 2/SC + 1028 0467 PowerEdge Expandable RAID Controller 2/DC + 1028 1111 PowerEdge Expandable RAID Controller 2/SC + 103c 03a2 MegaRAID + 103c 10c6 MegaRAID 438, NetRAID-3Si + 103c 10c7 MegaRAID T5, Integrated NetRAID + 103c 10cc MegaRAID, Integrated NetRAID + 103c 10cd NetRAID-1Si + 105a 0000 SuperTrak + 105a 2168 SuperTrak Pro + 105a 5168 SuperTrak66/100 + 1111 1111 MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC + 1111 1112 PowerEdge Expandable RAID Controller 2/SC + 113c 03a2 MegaRAID + e4bf 1010 CG1-RADIO + e4bf 1020 CU2-QUARTET + e4bf 1040 CU1-CHORUS + e4bf 3100 CX1-BAND + 1962 80960RM (i960RM) Microprocessor + 105a 0000 SuperTrak SX6000 I2O CPU + 1a21 82840 840 [Carmel] Chipset Host Bridge (Hub A) + 1a23 82840 840 [Carmel] Chipset AGP Bridge + 1a24 82840 840 [Carmel] Chipset PCI Bridge (Hub B) + 1a30 82845 845 [Brookdale] Chipset Host Bridge + 1028 010e Optiplex GX240 + 15d9 3280 Supermicro P4SBE Mainboard + 1a31 82845 845 [Brookdale] Chipset AGP Bridge + 1a38 5000 Series Chipset DMA Engine + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 1a48 82597EX 10GbE Ethernet Controller + 8086 a01f PRO/10GbE SR Server Adapter + 8086 a11f PRO/10GbE SR Server Adapter + 1b48 82597EX 10GbE Ethernet Controller + 8086 a01f PRO/10GbE LR Server Adapter + 8086 a11f PRO/10GbE LR Server Adapter + 2410 82801AA ISA Bridge (LPC) + 2411 82801AA IDE Controller + 2412 82801AA USB Controller + 2413 82801AA SMBus Controller + 2415 82801AA AC'97 Audio Controller + 1028 0095 Precision Workstation 220 Integrated Digital Audio + 1028 00b4 OptiPlex GX110 + 110a 0051 Activy 2xx + 11d4 0040 SoundMAX Integrated Digital Audio + 11d4 0048 SoundMAX Integrated Digital Audio + 11d4 5340 SoundMAX Integrated Digital Audio + 1734 1025 Activy 3xx + 2416 82801AA AC'97 Modem Controller + 2418 82801AA PCI Bridge + 2420 82801AB ISA Bridge (LPC) + 2421 82801AB IDE Controller + 2422 82801AB USB Controller + 2423 82801AB SMBus Controller + 2425 82801AB AC'97 Audio Controller + 11d4 0040 SoundMAX Integrated Digital Audio + 11d4 0048 SoundMAX Integrated Digital Audio + 2426 82801AB AC'97 Modem Controller + 2428 82801AB PCI Bridge + 2440 82801BA ISA Bridge (LPC) + 8086 5744 S845WD1-E + 2442 82801BA/BAM USB Controller #1 + 1014 01c6 Netvista A40/A40p + 1025 1016 Travelmate 612 TX + 1028 00c7 Dimension 8100 + 1028 00d8 Precision 530 + 1028 010e Optiplex GX240 + 103c 126f e-pc 40 + 1043 8027 TUSL2-C Mainboard + 104d 80df Vaio PCG-FX403 + 147b 0507 TH7II-RAID + 8086 4532 D815EEA2 mainboard + 8086 4557 D815EGEW Mainboard + 8086 5744 S845WD1-E mainboard + 2443 82801BA/BAM SMBus Controller + 1014 01c6 Netvista A40/A40p + 1025 1016 Travelmate 612 TX + 1028 00c7 Dimension 8100 + 1028 00d8 Precision 530 + 1028 010e Optiplex GX240 + 103c 126f e-pc 40 + 1043 8027 TUSL2-C Mainboard + 104d 80df Vaio PCG-FX403 + 147b 0507 TH7II-RAID + 15d9 3280 Supermicro P4SBE Mainboard + 8086 4532 D815EEA2 mainboard + 8086 4557 D815EGEW Mainboard + 8086 5744 S845WD1-E mainboard + 2444 82801BA/BAM USB Controller #1 + 1025 1016 Travelmate 612 TX + 1028 00c7 Dimension 8100 + 1028 00d8 Precision 530 + 1028 010e Optiplex GX240 + 103c 126f e-pc 40 + 1043 8027 TUSL2-C Mainboard + 104d 80df Vaio PCG-FX403 + 147b 0507 TH7II-RAID + 8086 4532 D815EEA2 mainboard + 8086 5744 S845WD1-E mainboard + 2445 82801BA/BAM AC'97 Audio Controller + 0e11 000b Compaq Deskpro EN Audio + 0e11 0088 Evo D500 + 1014 01c6 Netvista A40/A40p + 1025 1016 Travelmate 612 TX + 1028 00d8 Precision 530 + 103c 126f e-pc 40 + 104d 80df Vaio PCG-FX403 + 1462 3370 STAC9721 AC + 147b 0507 TH7II-RAID + 8086 4557 D815EGEW Mainboard + 2446 82801BA/BAM AC'97 Modem Controller + 1025 1016 Travelmate 612 TX + 104d 80df Vaio PCG-FX403 + 2448 82801 Mobile PCI Bridge +# (rev d3) (prog-if (rev d3) (prog-if 01 [Subtractive decode]) + 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 + 103c 309f Compaq nx9420 Notebook + 103c 30a3 Compaq nw8440 + 103c 30c1 Compaq 6910p + 144d c00c P30 notebook + 1734 1055 Amilo M1420 + 17aa 20ae ThinkPad T61 + e4bf cc47 CCG-RUMBA + 2449 82801BA/BAM/CA/CAM Ethernet Controller + 0e11 0012 EtherExpress PRO/100 VM + 0e11 0091 EtherExpress PRO/100 VE + 1014 01ce EtherExpress PRO/100 VE + 1014 01dc EtherExpress PRO/100 VE + 1014 01eb EtherExpress PRO/100 VE + 1014 01ec EtherExpress PRO/100 VE + 1014 0202 EtherExpress PRO/100 VE + 1014 0205 EtherExpress PRO/100 VE + 1014 0217 EtherExpress PRO/100 VE + 1014 0234 EtherExpress PRO/100 VE + 1014 023d EtherExpress PRO/100 VE + 1014 0244 EtherExpress PRO/100 VE + 1014 0245 EtherExpress PRO/100 VE + 1014 0265 PRO/100 VE Desktop Connection + 1014 0267 PRO/100 VE Desktop Connection + 1014 026a PRO/100 VE Desktop Connection + 109f 315d EtherExpress PRO/100 VE + 109f 3181 EtherExpress PRO/100 VE + 1179 ff01 PRO/100 VE Network Connection + 1186 7801 EtherExpress PRO/100 VE + 144d 2602 HomePNA 1M CNR + 8086 3010 EtherExpress PRO/100 VE + 8086 3011 EtherExpress PRO/100 VM + 8086 3012 82562EH based Phoneline + 8086 3013 EtherExpress PRO/100 VE + 8086 3014 EtherExpress PRO/100 VM + 8086 3015 82562EH based Phoneline + 8086 3016 EtherExpress PRO/100 P Mobile Combo + 8086 3017 EtherExpress PRO/100 P Mobile + 8086 3018 EtherExpress PRO/100 + 244a 82801BAM IDE U100 Controller + 1025 1016 Travelmate 612TX + 104d 80df Vaio PCG-FX403 + 244b 82801BA IDE U100 Controller + 1014 01c6 Netvista A40/A40p + 1028 00c7 Dimension 8100 + 1028 00d8 Precision 530 + 1028 010e Optiplex GX240 + 103c 126f e-pc 40 + 1043 8027 TUSL2-C Mainboard + 147b 0507 TH7II-RAID + 15d9 3280 Supermicro P4SBE Mainboard + 8086 4532 D815EEA2 mainboard + 8086 4557 D815EGEW Mainboard + 8086 5744 S845WD1-E mainboard + 244c 82801BAM ISA Bridge (LPC) + 244e 82801 PCI Bridge + 1014 0267 NetVista A30p + 1028 0211 Optiplex 755 + 1458 5000 GA-EP45-DS5 Motherboard + 1775 11cc CC11/CL11 + 2450 82801E ISA Bridge (LPC) + 2452 82801E USB Controller + 2453 82801E SMBus Controller + 2459 82801E Ethernet Controller 0 + 245b 82801E IDE U100 Controller + 245d 82801E Ethernet Controller 1 + 245e 82801E PCI Bridge + 2480 82801CA LPC Interface Controller + 2482 82801CA/CAM USB Controller #1 + 0e11 0030 Evo N600c + 1014 0220 ThinkPad A/T/X Series + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 15d9 3480 P4DP6 + 8086 1958 vpr Matrix 170B4 + 8086 3424 SE7501HG2 Mainboard + 8086 4541 Latitude C640 + 2483 82801CA/CAM SMBus Controller + 1014 0220 ThinkPad A/T/X Series + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 15d9 3480 P4DP6 + 8086 1958 vpr Matrix 170B4 + 2484 82801CA/CAM USB Controller #2 + 0e11 0030 Evo N600c + 1014 0220 ThinkPad A/T/X Series + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 15d9 3480 P4DP6 + 8086 1958 vpr Matrix 170B4 + 2485 82801CA/CAM AC'97 Audio Controller + 1013 5959 Crystal WMD Audio Codec + 1014 0222 ThinkPad A30/A30p/T23 + 1014 0508 ThinkPad T30 + 1014 051c ThinkPad A/T/X Series + 1043 1583 L3C (SPDIF) + 1043 1623 L2B (no SPDIF) + 1043 1643 L3F + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 144d c006 vpr Matrix 170B4 + 2486 82801CA/CAM AC'97 Modem Controller + 1014 0223 ThinkPad A/T/X Series + 1014 0503 ThinkPad R31 + 1014 051a ThinkPad A/T/X Series + 101f 1025 620 Series + 1043 1496 PCtel HSP56 MR + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 134d 4c21 Dell Inspiron 2100 internal modem + 144d 2115 vpr Matrix 170B4 internal modem + 14f1 5421 MD56ORD V.92 MDC Modem + 2487 82801CA/CAM USB Controller #3 + 0e11 0030 Evo N600c + 1014 0220 ThinkPad A/T/X Series + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 15d9 3480 P4DP6 + 8086 1958 vpr Matrix 170B4 + 248a 82801CAM IDE U100 Controller + 0e11 0030 Evo N600c + 1014 0220 ThinkPad A/T/X Series + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 8086 1958 vpr Matrix 170B4 + 8086 4541 Latitude C640 + 248b 82801CA Ultra ATA Storage Controller + 15d9 3480 P4DP6 + 248c 82801CAM ISA Bridge (LPC) + 24c0 82801DB/DBL (ICH4/ICH4-L) LPC Interface Bridge + 1014 0267 NetVista A30p + 1462 5800 845PE Max (MS-6580) + 24c1 82801DBL (ICH4-L) IDE Controller + 24c2 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 + 1014 0267 NetVista A30p + 1014 052d ThinkPad + 1025 005a TravelMate 290 + 1028 0126 Optiplex GX260 + 1028 0163 Latitude D505 + 1028 018d Inspiron 700m/710m + 1028 0196 Inspiron 5160 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1043 8089 P4B533 + 1071 8160 MIM2000 + 114a 0582 PC8 onboard USB 1.x + 144d c005 X10 Laptop + 144d c00c P30/P35 notebook + 1462 5800 845PE Max (MS-6580) + 1509 2990 Averatec 5110H laptop + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 1734 1055 Amilo M1420 + 4c53 1090 Cx9 / Vx9 mainboard + 8086 24c2 Latitude X300 + 8086 4541 Latitude D400 + e4bf 0cc9 CC9-SAMBA + e4bf 0cd2 CD2-BEBOP + 24c3 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller + 1014 0267 NetVista A30p + 1014 052d ThinkPad + 1025 005a TravelMate 290 + 1028 0126 Optiplex GX260 + 1028 014f Latitude X300 + 1028 018d Inspiron 700m/710m + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1071 8160 MIM2000 + 114a 0582 PC8 onboard SMbus + 144d c005 X10 Laptop + 144d c00c P30/P35 notebook + 1458 24c2 GA-8PE667 Ultra + 1462 5800 845PE Max (MS-6580) + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 1734 1055 Amilo M1420 + 4c53 1090 Cx9 / Vx9 mainboard + e4bf 0cc9 CC9-SAMBA + e4bf 0cd2 CD2-BEBOP + 24c4 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 + 1014 0267 NetVista A30p + 1014 052d ThinkPad + 1025 005a TravelMate 290 + 1028 0126 Optiplex GX260 + 1028 0163 Latitude D505 + 1028 018d Inspiron 700m/710m + 1028 0196 Inspiron 5160 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1043 8089 P4B533 + 1071 8160 MIM2000 + 144d c00c P30/P35 notebook + 1462 5800 845PE Max (MS-6580) + 1509 2990 Averatec 5110H + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 4c53 1090 Cx9 / Vx9 mainboard + 8086 24c2 Latitude X300 + 8086 4541 Latitude D400 + e4bf 0cc9 CC9-SAMBA + e4bf 0cd2 CD2-BEBOP + 24c5 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller + 0e11 00b8 Analog Devices Inc. codec [SoundMAX] + 1014 0267 NetVista A30p + 1014 0537 ThinkPad T41 + 1014 055f Thinkpad R50e model 1634 + 1025 005a TravelMate 290 + 1028 0139 Latitude D400 + 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 018d Inspiron 700m/710m [SigmaTel STAC9750,51] + 1028 0196 Inspiron 5160 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1043 1713 M6800N + 1043 80b0 P4B533 + 1071 8160 MIM2000 + 1179 0201 Toshiba Tecra M1 + 144d c005 X10 Laptop + 144d c00c P30/P35 notebook + 1458 a002 GA-8PE667 Ultra + 1462 5800 845PE Max (MS-6580) + 1734 1005 D1451 (SCENIC N300, i845GV) Sigmatel STAC9750T + 1734 1055 Amilo M1420 + 8086 24c5 Dell Dimension 2400 + 24c6 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller + 1014 0524 ThinkPad T41 + 1014 0525 ThinkPad + 1014 0559 ThinkPad R50e + 1025 003c Aspire 2001WLCi (Compal CL50 motherboard) implementation + 1025 005a TravelMate 290 + 1028 0196 Inspiron 5160 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1043 1826 M6800N + 1071 8160 MIM2000 + 144d 2115 X10 Laptop + 144d c00c P30/P35 notebook +# Conexant HSF Softmodem (CXT22) + 14f1 5422 D480 MDC V.9x Modem + 24c7 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 + 1014 0267 NetVista A30p + 1014 052d ThinkPad + 1025 005a TravelMate 290 + 1028 0126 Optiplex GX260 + 1028 0163 Latitude D505 + 1028 018d Inspiron 700m/710m + 1028 0196 Inspiron 5160 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1043 8089 P4B533 + 1071 8160 MIM2000 + 144d c00c P30/P35 notebook + 1462 5800 845PE Max (MS-6580) + 1509 2990 Averatec 5110H + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 4c53 1090 Cx9 / Vx9 mainboard + 8086 24c2 Latitude X300 + 8086 4541 Latitude D400 + e4bf 0cc9 CC9-SAMBA + e4bf 0cd2 CD2-BEBOP + 24ca 82801DBM (ICH4-M) IDE Controller + 1014 052d ThinkPad + 1025 005a TravelMate 290 + 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 018d Inspiron 700m/710m + 1028 0196 Inspiron 5160 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1071 8160 MIM2000 + 144d c005 X10 Laptop + 144d c00c P30/P35 notebook + 1734 1055 Amilo M1420 + 8086 4541 Latitude D400 + 24cb 82801DB (ICH4) IDE Controller + 1014 0267 NetVista A30p + 1028 0126 Optiplex GX260 + 1043 8089 P4B533 + 114a 0582 PC8 onboard IDE + 1458 24c2 GA-8PE667 Ultra + 1462 5800 845PE Max (MS-6580) + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 4c53 1090 Cx9 / Vx9 mainboard + e4bf 0cc9 CC9-SAMBA + e4bf 0cd2 CD2-BEBOP + 24cc 82801DBM (ICH4-M) LPC Interface Bridge + 144d c00c P30 notebook + 1734 1055 Amilo M1420 + 24cd 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller + 1014 0267 NetVista A30p + 1014 052e ThinkPad + 1025 005a TravelMate 290 + 1028 011d Latitude D600 + 1028 0126 Optiplex GX260 + 1028 0139 Latitude D400 + 1028 0163 Latitude D505 + 1028 018d Inspiron 700m/710m + 1028 0196 Inspiron 5160 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 1043 8089 P4B533 + 1071 8160 MIM2000 + 114a 0582 PC8 onboard USB 2.0 + 1179 ff00 Satellite 2430 + 144d c005 X10 Laptop + 144d c00c P30/P35 notebook + 1462 3981 845PE Max (MS-6580) + 1509 1968 Averatec 5110H + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 1734 1055 Amilo M1420 + 4c53 1090 Cx9 / Vx9 mainboard + 8086 24c2 Latitude X300 + e4bf 0cc9 CC9-SAMBA + e4bf 0cd2 CD2-BEBOP + 24d0 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge + 24d1 82801EB (ICH5) SATA Controller + 1028 0169 Precision 470 + 1028 019a PowerEdge SC1425 + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800 series motherboard + 1458 24d1 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 1462 7650 Hetis 865GV-E (MS-7065) + 1565 5200 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 8086 3427 S875WP1-E mainboard + 8086 4246 Desktop Board D865GBF + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24d2 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #1 + 1014 02dd eServer xSeries server mainboard + 1014 02ed eServer xSeries server mainboard + 1028 0169 Precision 470 + 1028 016c PowerEdge 1850 onboard UHCI + 1028 016d PowerEdge 2850 onboard UHCI + 1028 0170 PowerEdge 6850 onboard UHCI + 1028 0183 PowerEdge 1800 + 1028 019a PowerEdge SC1425 + 103c 006a NX9500 + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800/P5P800 series motherboard + 1458 24d2 GA-8IPE1000/8KNXP motherboard + 1462 7280 865PE Neo2 (MS-6728) + 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c PRIMERGY RX/TX series onboard UHCI + 8086 3427 S875WP1-E mainboard + 8086 4246 Desktop Board D865GBF + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24d3 82801EB/ER (ICH5/ICH5R) SMBus Controller + 1014 02dd eServer xSeries server mainboard + 1014 02ed eServer xSeries server mainboard + 1028 0156 Precision 360 + 1028 0169 Precision 470 + 103c 12bc d330 uT + 1043 80a6 P4P800 Mainboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 1462 7650 Hetis 865GV-E (MS-7065) + 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c PRIMERGY RX/TX S2 series SMBus + 8086 3427 S875WP1-E mainboard + 8086 4246 Desktop Board D865GBF + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24d4 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #2 + 1014 02dd eServer xSeries server mainboard + 1014 02ed eServer xSeries server mainboard + 1028 0169 Precision 470 + 1028 016c PowerEdge 1850 onboard UHCI + 1028 016d PowerEdge 2850 onboard UHCI + 1028 0170 PowerEdge 6850 onboard UHCI + 1028 0183 PowerEdge 1800 + 1028 019a PowerEdge SC1425 + 103c 006a NX9500 + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800/P5P800 series motherboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 1462 7650 Hetis 865GV-E (MS-7065) + 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c PRIMERGY RX/TX S2 series onboard UHCI + 8086 3427 S875WP1-E mainboard + 8086 4246 Desktop Board D865GBF + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24d5 82801EB/ER (ICH5/ICH5R) AC'97 Audio Controller + 100a 147b Abit IS7-E motherboard + 1028 0169 Precision 470 + 103c 006a NX9500 + 103c 12bc d330 uT + 1043 80f3 P4P800 Mainboard + 1043 810f P5P800-MX Mainboard + 1458 a002 GA-8IPE1000/8KNXP motherboard + 1462 0080 865PE Neo2-V (MS-6788) Mainboard + 1462 7280 865PE Neo2 (MS-6728) + 1462 7650 Hetis 865GV-E (MS-7065) + 8086 a000 D865PERL mainboard + 8086 e000 D865PERL mainboard + 8086 e001 Desktop Board D865GBF + 8086 e002 SoundMax Intergrated Digital Audio + 24d6 82801EB/ER (ICH5/ICH5R) AC'97 Modem Controller + 103c 006a NX9500 + 24d7 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #3 + 1014 02ed xSeries server mainboard + 1028 0169 Precision 470 + 1028 016c PowerEdge 1850 onboard UHCI + 1028 016d PowerEdge 2850 onboard UHCI + 1028 0170 PowerEdge 6850 onboard UHCI + 1028 0183 PowerEdge 1800 + 103c 006a NX9500 + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800/P5P800 series motherboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 1462 7650 Hetis 865GV-E (MS-7065) + 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c PRIMERGY RX/TX S2 series onboard UHCI + 8086 3427 S875WP1-E mainboard + 8086 4246 Desktop Board D865GBF + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24db 82801EB/ER (ICH5/ICH5R) IDE Controller + 1014 02dd eServer xSeries server mainboard + 1014 02ed eServer xSeries server mainboard + 1028 0169 Precision 470 + 1028 016c PowerEdge 1850 IDE Controller + 1028 016d PowerEdge 2850 IDE Controller + 1028 0170 PowerEdge 6850 IDE Controller + 1028 019a PowerEdge SC1425 + 103c 006a NX9500 + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800/P5P800 series motherboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 1462 7580 MSI 875P + 1462 7650 Hetis 865GV-E (MS-7065) + 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c PRIMERGY RX/TX S2 series onboard IDE + 8086 24db P4C800 Mainboard + 8086 3427 S875WP1-E mainboard + 8086 4246 Desktop Board D865GBF + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24dc 82801EB (ICH5) LPC Interface Bridge + 24dd 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller + 1014 02dd eServer xSeries server mainboard + 1014 02ed eServer xSeries server mainboard + 1028 0169 Precision 470 + 1028 016c PowerEdge 1850 onboard EHCI + 1028 016d PowerEdge 2850 onboard EHCI + 1028 0170 PowerEdge 6850 onboard EHCI + 1028 0183 PowerEdge 1800 + 1028 019a PowerEdge SC1425 + 103c 006a NX9500 + 103c 12bc d530 CMT (DG746A) + 1043 80a6 P4P800/P5P800 series motherboard + 1458 5006 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 1462 7650 Hetis 865GV-E (MS-7065) + 8086 3427 S875WP1-E mainboard + 8086 4246 Desktop Board D865GBF + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24de 82801EB/ER (ICH5/ICH5R) USB UHCI Controller #4 + 1014 02ed xSeries server mainboard + 1028 0169 Precision 470 + 1043 80a6 P4P800/P5P800 series motherboard + 1458 24d2 GA-8IPE1000 Pro2 motherboard (865PE) + 1462 7280 865PE Neo2 (MS-6728) + 1462 7650 Hetis 865GV-E (MS-7065) + 1565 3101 P4TSV Motherboard (865G) + 15d9 4580 P4SCE Mainboard + 1734 101c PRIMERGY RX/TX S2 series onboard UHCI + 8086 3427 S875WP1-E mainboard + 8086 4246 Desktop Board D865GBF + 8086 4c43 Desktop Board D865GLC + 8086 524c D865PERL mainboard + 24df 82801ER (ICH5R) SATA Controller + 2500 82820 820 (Camino) Chipset Host Bridge (MCH) + 1028 0095 Precision Workstation 220 Chipset + 1043 801c P3C-2000 system chipset + 2501 82820 820 (Camino) Chipset Host Bridge (MCH) + 1043 801c P3C-2000 system chipset + 250b 82820 820 (Camino) Chipset Host Bridge + 250f 82820 820 (Camino) Chipset AGP Bridge + 2520 82805AA MTH Memory Translator Hub + 2521 82804AA MRH-S Memory Repeater Hub for SDRAM + 2530 82850 850 (Tehama) Chipset Host Bridge (MCH) + 1028 00c7 Dimension 8100 + 147b 0507 TH7II-RAID + 2531 82860 860 (Wombat) Chipset Host Bridge (MCH) + 1028 00d8 Precision 530 + 2532 82850 850 (Tehama) Chipset AGP Bridge + 2533 82860 860 (Wombat) Chipset AGP Bridge + 2534 82860 860 (Wombat) Chipset PCI Bridge + 2540 E7500 Memory Controller Hub + 15d9 3480 P4DP6 + 2541 E7500/E7501 Host RASUM Controller + 15d9 3480 P4DP6 + 4c53 1090 Cx9 / Vx9 mainboard + 8086 3424 SE7501HG2 Mainboard + 2543 E7500/E7501 Hub Interface B PCI-to-PCI Bridge + 2544 E7500/E7501 Hub Interface B RASUM Controller + 4c53 1090 Cx9 / Vx9 mainboard + 2545 E7500/E7501 Hub Interface C PCI-to-PCI Bridge + 2546 E7500/E7501 Hub Interface C RASUM Controller + 2547 E7500/E7501 Hub Interface D PCI-to-PCI Bridge + 2548 E7500/E7501 Hub Interface D RASUM Controller + 254c E7501 Memory Controller Hub + 4c53 1090 Cx9 / Vx9 mainboard + 8086 3424 SE7501HG2 Mainboard + 2550 E7505 Memory Controller Hub + 2551 E7505/E7205 Series RAS Controller + 2552 E7505/E7205 PCI-to-AGP Bridge + 2553 E7505 Hub Interface B PCI-to-PCI Bridge + 2554 E7505 Hub Interface B PCI-to-PCI Bridge RAS Controller + 255d E7205 Memory Controller Hub + 2560 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface + 1028 0126 Optiplex GX260 + 1458 2560 GA-8PE667 Ultra + 1462 5800 845PE Max (MS-6580) + 2561 82845G/GL[Brookdale-G]/GE/PE Host-to-AGP Bridge + 2562 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device + 0e11 00b9 Evo D510 SFF + 1014 0267 NetVista A30p + 1734 1003 D1521 Mainboard (Fujitsu-Siemens) + 1734 1004 D1451 Mainboard (SCENIC N300, i845GV) + 2570 82865G/PE/P DRAM Controller/Host-Hub Interface + 103c 006a NX9500 + 103c 12bc d330 uT + 1043 80f2 P4P800/P5P800 series motherboard + 1458 2570 GA-8IPE1000 Pro2 motherboard (865PE) + 2571 82865G/PE/P PCI to AGP Controller + 2572 82865G Integrated Graphics Controller + 1028 019d Dimension 3000 + 103c 12bc D530 sff(dc578av) + 1043 80a5 P5P800-MX Mainboard + 1462 7650 Hetis 865GV-E (MS-7065) + 1734 101b Fujitsu-Siemens Scenic E300 i865GV + 8086 4246 Desktop Board D865GBF + 8086 4c43 Desktop Board D865GLC + 2573 82865G/PE/P PCI to CSA Bridge + 2576 82865G/PE/P Processor to I/O Memory Interface + 2578 82875P/E7210 Memory Controller Hub + 1458 2578 GA-8KNXP motherboard (875P) + 1462 7580 MS-6758 (875P Neo) + 15d9 4580 P4SCE Motherboard + 2579 82875P Processor to AGP Controller + 257b 82875P/E7210 Processor to PCI to CSA Bridge + 257e 82875P/E7210 Processor to I/O Memory Interface + 2580 82915G/P/GV/GL/PL/910GL Memory Controller Hub + 1458 2580 GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105b Scenic W620 + 2581 82915G/P/GV/GL/PL/910GL PCI Express Root Port + 2582 82915G/GV/910GL Integrated Graphics Controller + 1028 1079 Optiplex GX280 + 103c 3006 DC7100 SFF(DX878AV) + 1043 2582 P5GD1-VW Mainboard + 1458 2582 GA-8I915ME-G Mainboard + 1734 105b Scenic W620 + 1849 2582 ASRock P4Dual-915GL + 2584 82925X/XE Memory Controller Hub + 1028 0177 Dimension 8400 + 2585 82925X/XE PCI Express Root Port + 2588 E7220/E7221 Memory Controller Hub + 2589 E7220/E7221 PCI Express Root Port + 258a E7221 Integrated Graphics Controller + 2590 Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller + 1014 0575 ThinkPad Z60t + 1028 0182 Dell Latidude C610 + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 104d 81b7 Vaio VGN-S3XP + a304 81b7 Vaio VGN-S3XP + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 2591 Mobile 915GM/PM Express PCI Express Root Port + 103c 0934 HP Compaq nw8240 Mobile Workstation + 2592 Mobile 915GM/GMS/910GML Express Graphics Controller + 103c 099c NX6110/NC6120 + 103c 308a NC6220 + 1043 1881 GMA 900 915GM Integrated Graphics + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 25a1 6300ESB LPC Interface Controller + 25a2 6300ESB PATA Storage Controller + 1775 10d0 V5D Single Board Computer IDE + 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10e0 PSL09 PrPMC + 25a3 6300ESB SATA Storage Controller + 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25a4 6300ESB SMBus Controller + 1775 10d0 V5D Single Board Computer + 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25a6 6300ESB AC'97 Audio Controller + 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 25a7 6300ESB AC'97 Modem Controller + 25a9 6300ESB USB Universal Host Controller + 1775 10d0 V5D Single Board Computer USB + 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25aa 6300ESB USB Universal Host Controller + 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25ab 6300ESB Watchdog Timer + 1775 10d0 V5D Single Board Computer + 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25ac 6300ESB I/O Advanced Programmable Interrupt Controller + 1775 10d0 V5D Single Board Computer + 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25ad 6300ESB USB2 Enhanced Host Controller + 1775 10d0 V5D Single Board Computer USB 2.0 + 1775 1100 CR11/VR11 Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25ae 6300ESB 64-bit PCI-X Bridge + 25b0 6300ESB SATA RAID Controller + 1775 1100 CR11/VR11 Single Board Computer + 4c53 10d0 Telum ASLP10 Processor AMC + 4c53 10e0 PSL09 PrPMC + 25c0 5000X Chipset Memory Controller Hub + 25d0 5000Z Chipset Memory Controller Hub + 25d4 5000V Chipset Memory Controller Hub + 15d9 8680 X7DVL-E-O motherboard + 25d8 5000P Chipset Memory Controller Hub + 8086 3476 Intel S5000PSLSATA Server Board + 25e2 5000 Series Chipset PCI Express x4 Port 2 + 25e3 5000 Series Chipset PCI Express x4 Port 3 + 25e4 5000 Series Chipset PCI Express x4 Port 4 + 25e5 5000 Series Chipset PCI Express x4 Port 5 + 25e6 5000 Series Chipset PCI Express x4 Port 6 + 25e7 5000 Series Chipset PCI Express x4 Port 7 + 25f0 5000 Series Chipset FSB Registers + 1028 01bb PowerEdge 1955 FSB Registers + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 25f1 5000 Series Chipset Reserved Registers + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 25f3 5000 Series Chipset Reserved Registers + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 25f5 5000 Series Chipset FBD Registers + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 25f6 5000 Series Chipset FBD Registers + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 25f7 5000 Series Chipset PCI Express x8 Port 2-3 + 25f8 5000 Series Chipset PCI Express x8 Port 4-5 + 25f9 5000 Series Chipset PCI Express x8 Port 6-7 + 25fa 5000X Chipset PCI Express x16 Port 4-7 + 2600 E8500/E8501 Hub Interface 1.5 + 1028 0170 PowerEdge 6850 Hub Interface + 2601 E8500/E8501 PCI Express x4 Port D + 2602 E8500/E8501 PCI Express x4 Port C0 + 2603 E8500/E8501 PCI Express x4 Port C1 + 2604 E8500/E8501 PCI Express x4 Port B0 + 2605 E8500/E8501 PCI Express x4 Port B1 + 2606 E8500/E8501 PCI Express x4 Port A0 + 2607 E8500/E8501 PCI Express x4 Port A1 + 2608 E8500/E8501 PCI Express x8 Port C + 2609 E8500/E8501 PCI Express x8 Port B + 260a E8500/E8501 PCI Express x8 Port A + 260c E8500/E8501 IMI Registers + 2610 E8500/E8501 FSB Registers + 2611 E8500/E8501 Address Mapping Registers + 2612 E8500/E8501 RAS Registers + 2613 E8500/E8501 Reserved Registers + 2614 E8500/E8501 Reserved Registers + 2615 E8500/E8501 Miscellaneous Registers + 2617 E8500/E8501 Reserved Registers + 2618 E8500/E8501 Reserved Registers + 2619 E8500/E8501 Reserved Registers + 261a E8500/E8501 Reserved Registers + 261b E8500/E8501 Reserved Registers + 261c E8500/E8501 Reserved Registers + 261d E8500/E8501 Reserved Registers + 261e E8500/E8501 Reserved Registers + 2620 E8500/E8501 eXternal Memory Bridge + 1028 0170 PowerEdge 6850 Memory Bridge + 2621 E8500/E8501 XMB Miscellaneous Registers + 1028 0170 PowerEdge 6850 XMB Registers + 2622 E8500/E8501 XMB Memory Interleaving Registers + 1028 0170 PowerEdge 6850 Memory Interleaving Registers + 2623 E8500/E8501 XMB DDR Initialization and Calibration + 1028 0170 PowerEdge 6850 DDR Initialization and Calibration + 2624 E8500/E8501 XMB Reserved Registers + 1028 0170 PowerEdge 6850 Reserved Registers + 2625 E8500/E8501 XMB Reserved Registers + 1028 0170 PowerEdge 6850 Reserved Registers + 2626 E8500/E8501 XMB Reserved Registers + 1028 0170 PowerEdge 6850 Reserved Registers + 2627 E8500/E8501 XMB Reserved Registers + 1028 0170 PowerEdge 6850 Reserved Registers + 2640 82801FB/FR (ICH6/ICH6R) LPC Interface Bridge + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 2641 82801FBM (ICH6M) LPC Interface Bridge + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 2642 82801FW/FRW (ICH6W/ICH6RW) LPC Interface Bridge + 2651 82801FB/FW (ICH6/ICH6W) SATA Controller + 1028 0179 Optiplex GX280 + 1043 2601 P5GD1-VW Mainboard + 1734 105c Scenic W620 + 8086 4147 D915GAG Motherboard + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 2652 82801FR/FRW (ICH6R/ICH6RW) SATA Controller + 1028 0177 Dimension 8400 + 1462 7028 915P/G Neo2 + 2653 82801FBM (ICH6M) SATA Controller + 2658 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 + 1028 0177 Dimension 8400 + 1028 0179 Optiplex GX280 + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 2558 GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 2659 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 + 1028 0177 Dimension 8400 + 1028 0179 Optiplex GX280 + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 2659 GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 265a 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 + 1028 0177 Dimension 8400 + 1028 0179 Optiplex GX280 + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 265a GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 265b 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 + 1028 0177 Dimension 8400 + 1028 0179 Optiplex GX280 + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 265a GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 265c 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller + 1028 0177 Dimension 8400 + 1028 0179 Optiplex GX280 + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 5006 GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 + 8086 265c Dimension 3100 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 2660 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 + 103c 0934 HP Compaq nw8240 Mobile Workstation + 103c 099c NX6110/NC6120 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 2662 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 2 + 103c 0934 HP Compaq nw8240 Mobile Workstation + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 2664 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 3 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 2666 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 4 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 2668 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller + 1014 05b7 ThinkPad Z60t +# based on the PTGD1-LA motherboard + 103c 2a09 PufferM-UL8E + 1043 1173 Asus A6VC + 1043 814e P5GD1-VW Mainboard + 1462 7028 915P/G Neo2 + 266a 82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller + 1028 0177 Dimension 8400 + 1028 0179 Optiplex GX280 + 1043 80a6 P5GD1-VW Mainboard + 1458 266a GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 266c 82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller + 266d 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller + 1025 006a Conexant AC'97 CoDec (in Acer TravelMate 2410 serie laptop) + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 266e 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller + 1025 006a Realtek ALC 655 codec (in Acer TravelMate 2410 serie laptop) + 1028 0177 Dimension 8400 + 1028 0179 Optiplex GX280 + 1028 0182 Latitude D610 Laptop + 1028 0187 Dell Precision M70 Laptop + 1028 0188 Inspiron 6000 laptop + 103c 0934 Compaq nw8240/nx8220 + 103c 0944 Compaq NC6220 + 103c 099c NX6110/NC6120 + 103c 3006 DC7100 SFF(DX878AV) + 1458 a002 GA-8I915ME-G Mainboard + 152d 0745 Packard Bell A8550 Laptop + 1734 105a Scenic W620 + 266f 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller + 1028 0177 Dimension 8400 + 103c 0934 Compaq nw8240/nx8220 + 103c 099c NX6110/NC6120 + 1043 80a6 P5GD1-VW Mainboard + 1458 266f GA-8I915ME-G Mainboard + 1462 7028 915P/G Neo2 + 1734 105c Scenic W620 + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 2670 631xESB/632xESB/3100 Chipset LPC Interface Controller + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 2680 631xESB/632xESB/3100 Chipset SATA IDE Controller + 2681 631xESB/632xESB SATA AHCI Controller + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 2682 631xESB/632xESB SATA RAID Controller + 2683 631xESB/632xESB SATA RAID Controller + 2688 631xESB/632xESB/3100 Chipset UHCI USB Controller #1 + 1028 01bb PowerEdge 1955 onboard USB + 1028 01f0 PowerEdge R900 onboard USB + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 2689 631xESB/632xESB/3100 Chipset UHCI USB Controller #2 + 1028 01bb PowerEdge 1955 onboard USB + 1028 01f0 PowerEdge R900 onboard USB + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 268a 631xESB/632xESB/3100 Chipset UHCI USB Controller #3 + 1028 01f0 PowerEdge R900 onboard USB + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 268b 631xESB/632xESB/3100 Chipset UHCI USB Controller #4 + 1028 01f0 PowerEdge R900 onboard USB + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 268c 631xESB/632xESB/3100 Chipset EHCI USB2 Controller + 1028 01bb PowerEdge 1955 onboard USB + 1028 01f0 PowerEdge R900 onboard USB + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 2690 631xESB/632xESB/3100 Chipset PCI Express Root Port 1 + 2692 631xESB/632xESB/3100 Chipset PCI Express Root Port 2 + 2694 631xESB/632xESB/3100 Chipset PCI Express Root Port 3 + 2696 631xESB/632xESB/3100 Chipset PCI Express Root Port 4 + 2698 631xESB/632xESB AC '97 Audio Controller + 2699 631xESB/632xESB AC '97 Modem Controller + 269a 631xESB/632xESB High Definition Audio Controller + 269b 631xESB/632xESB/3100 Chipset SMBus Controller + 15d9 8680 X7DVL-E-O motherboard + 8086 3476 Intel S5000PSLSATA Server Board + 269e 631xESB/632xESB IDE Controller + 15d9 8680 X7DVL-E-O motherboard + 2770 82945G/GZ/P/PL Memory Controller Hub + 1028 01ad OptiPlex GX620 + 107b 5048 E4500 + 8086 544e DeskTop Board D945GTP + 2771 82945G/GZ/P/PL PCI Express Root Port + 2772 82945G/GZ Integrated Graphics Controller + 8086 544e DeskTop Board D945GTP + 8086 d605 Intel Desktop Board D945GCCR + 2774 82955X Memory Controller Hub + 2775 82955X PCI Express Root Port + 2776 82945G/GZ Integrated Graphics Controller + 2778 E7230/3000/3010 Memory Controller Hub + 1028 01df PowerEdge SC440 + 1028 01e6 PowerEdge 860 + 2779 E7230/3000/3010 PCI Express Root Port + 277a 82975X/3010 PCI Express Root Port + 277c 82975X Memory Controller Hub + 1043 8178 P5WDG2 WS Professional motherboard + 277d 82975X PCI Express Root Port + 2782 82915G Integrated Graphics Controller + 1043 2582 P5GD1-VW Mainboard + 1734 105b Scenic W620 + 2792 Mobile 915GM/GMS/910GML Express Graphics Controller + 103c 099c NX6110/NC6120 + 1043 1881 GMA 900 915GM Integrated Graphics + e4bf 0ccd CCD-CALYPSO + e4bf 0cd3 CD3-JIVE + e4bf 58b1 XB1 + 27a0 Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub + 1025 006c 9814 WKMI + 1028 01d7 XPS M1210 + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 1043 1237 A6J-Q008 + 17aa 2015 ThinkPad T60 + 17aa 2017 ThinkPad T60/R60 series + 27a1 Mobile 945GM/PM/GMS, 943/940GML and 945GT Express PCI Express Root Port + 103c 309f Compaq nx9420 Notebook + 103c 30a3 Compaq nw8440 + 27a2 Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller + 103c 30a1 NC2400 + 17aa 201a ThinkPad T60/R60 series + 9902 1584 CCE MPL-D10H120F + 27a6 Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller + 103c 30a1 NC2400 + 1775 11cc CC11/CL11 integrated graphics (secondary) + 17aa 201a ThinkPad T60/R60 series + 27ac Mobile 945GME Express Memory Controller Hub + 1775 11cc CC11/CL11 + 27ad Mobile 945GME Express PCI Express Root Port + 27ae Mobile 945GME Express Integrated Graphics Controller + 1775 11cc CC11/CL11 integrated graphics (primary) + 27b0 82801GH (ICH7DH) LPC Interface Bridge + 8086 544e DeskTop Board D945GTP + 27b8 82801GB/GR (ICH7 Family) LPC Interface Bridge + 1028 01e6 PowerEdge 860 + 1043 8179 P5KPL-VM Motherboard + 107b 5048 E4500 + 1775 11cc CC11/CL11 + 8086 544e DeskTop Board D945GTP + 27b9 82801GBM (ICH7-M) LPC Interface Bridge + 1028 01d7 XPS M1210 + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 10f7 8338 Panasonic CF-Y5 laptop + 17aa 2009 ThinkPad T60/R60 series + 27bc Tigerpoint LPC Controller + 27bd 82801GHM (ICH7-M DH) LPC Interface Bridge + 1025 006c 9814 WKMI + 27c0 82801GB/GR/GH (ICH7 Family) SATA IDE Controller + 1028 01ad OptiPlex GX620 + 1028 01df PowerEdge SC440 + 1028 01e6 PowerEdge 860 + 1043 8179 P5KPL-VM Motherboard + 107b 5048 E4500 + 1462 2310 MSI Hetis 945 + 1462 7236 945P Neo3-F Rev. 2.2 motherboard + 1775 11cc CC11/CL11 + 8086 544e DeskTop Board D945GTP + 27c1 82801GR/GH (ICH7 Family) SATA AHCI Controller + 1028 01df PowerEdge SC440 + 1775 11cc CC11/CL11 + 8086 5842 DeskTop Board D975XBX + 27c3 82801GR/GH (ICH7 Family) SATA RAID Controller + 1775 11cc CC11/CL11 + 8086 544e DeskTop Board D945GTP + 27c4 82801GBM/GHM (ICH7 Family) SATA IDE Controller + 1025 006c 9814 WKMI + 1028 01d7 XPS M1210 + 17aa 200e Thinkpad T60 model 2007 + 27c5 82801GBM/GHM (ICH7 Family) SATA AHCI Controller + 103c 309f Compaq nx9420 Notebook + 103c 30a3 Compaq nw8440 + 17aa 200d ThinkPad T60/R60 series + 27c6 82801GHM (ICH7-M DH) SATA RAID Controller + 27c8 82801G (ICH7 Family) USB UHCI Controller #1 + 1025 006c 9814 WKMI + 1028 01ad OptiPlex GX620 + 1028 01d7 XPS M1210 + 1028 01df PowerEdge SC440 + 1028 01e6 PowerEdge 860 + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 1043 1237 A6J-Q008 + 1043 8179 P5KPL-VM Motherboard + 107b 5048 E4500 + 1775 11cc CC11/CL11 + 17aa 200a ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP + 27c9 82801G (ICH7 Family) USB UHCI Controller #2 + 1025 006c 9814 WKMI + 1028 01ad OptiPlex GX620 + 1028 01d7 XPS M1210 + 1028 01df PowerEdge SC440 + 1028 01e6 PowerEdge 860 + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 1043 1237 A6J-Q008 + 1043 8179 P5KPL-VM Motherboard + 107b 5048 E4500 + 1775 11cc CC11/CL11 + 17aa 200a ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP + 27ca 82801G (ICH7 Family) USB UHCI Controller #3 + 1025 006c 9814 WKMI + 1028 01ad OptiPlex GX620 + 1028 01d7 XPS M1210 + 1028 01df PowerEdge SC440 + 1028 01e6 PowerEdge 860 + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 1043 1237 A6J-Q008 + 1043 8179 P5KPL-VM Motherboard + 107b 5048 E4500 + 1775 11cc CC11/CL11 + 17aa 200a ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP + 27cb 82801G (ICH7 Family) USB UHCI Controller #4 + 1025 006c 9814 WKMI + 1028 01ad OptiPlex GX620 + 1028 01d7 XPS M1210 + 1028 01df PowerEdge SC440 + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 1043 1237 A6J-Q008 + 1043 8179 P5KPL-VM Motherboard + 107b 5048 E4500 + 1775 11cc CC11/CL11 + 17aa 200a ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP + 27cc 82801G (ICH7 Family) USB2 EHCI Controller + 1025 006c 9814 WKMI + 1028 01ad OptiPlex GX620 + 1028 01d7 XPS M1210 + 1028 01df PowerEdge SC440 + 1028 01e6 PowerEdge 860 + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 1043 1237 A6J-Q008 + 1043 8179 P5KPL-VM Motherboard + 1775 11cc CC11/CL11 + 17aa 200b ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP + 27d0 82801G (ICH7 Family) PCI Express Port 1 + 103c 309f Compaq nx9420 Notebook + 103c 30a3 Compaq nw8440 + 1775 11cc CC11/CL11 + 27d2 82801G (ICH7 Family) PCI Express Port 2 + 103c 309f Compaq nx9420 Notebook + 103c 30a3 Compaq nw8440 + 1775 11cc CC11/CL11 + 27d4 82801G (ICH7 Family) PCI Express Port 3 + 1775 11cc CC11/CL11 + 27d6 82801G (ICH7 Family) PCI Express Port 4 + 103c 30a3 Compaq nw8440 + 1775 11cc CC11/CL11 + 27d8 82801G (ICH7 Family) High Definition Audio Controller + 1025 006c 9814 WKMI + 1028 01d7 XPS M1210 + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 1043 1123 A6J-Q008 + 1043 13c4 Asus G2P + 1043 8290 P5KPL-VM Motherboard + 1043 82ea P5KPL-CM Motherboard + 107b 5048 E4500 + 10f7 8338 Panasonic CF-Y5 laptop + 1179 ff10 Toshiba Satellite A100-796 audio (Realtek ALC861) + 1179 ff31 AC97 Data Fax SoftModem with SmartCP + 1458 a102 GA-8I945PG-RH Mainboard + 152d 0753 Softmodem + 1734 10ad Conexant softmodem SmartCP + 17aa 2010 ThinkPad T60/R60 series + 17aa 3802 Lenovo 3000 C200 audio [Realtek ALC861VD] + 8086 1112 DeskTop Board D945GTP + 8086 27d8 DeskTop Board D945GTP + 27da 82801G (ICH7 Family) SMBus Controller + 1025 006c 9814 WKMI + 1028 01ad OptiPlex GX620 + 1028 01d7 XPS M1210 + 1028 01df PowerEdge SC440 + 1028 01e6 PowerEdge 860 + 1043 8179 P5KPL-VM Motherboard + 10f7 8338 Panasonic CF-Y5 laptop + 1458 5001 GA-8I945PG-RH Mainboard + 1775 11cc CC11/CL11 + 17aa 200f ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP + 8086 5842 DeskTop Board D975XBX + 27dc 82801G (ICH7 Family) LAN Controller + 8086 308d DeskTop Board D945GTP + 27dd 82801G (ICH7 Family) AC'97 Modem Controller + 27de 82801G (ICH7 Family) AC'97 Audio Controller + 1028 01ad OptiPlex GX620 + 1462 7267 Realtek ALC883 Audio Controller + 1775 11cc CC11 integrated audio (AD1981BL codec) + 27df 82801G (ICH7 Family) IDE Controller + 1028 01df PowerEdge SC440 + 1028 01e6 PowerEdge 860 + 103c 309f Compaq nx9420 Notebook + 103c 30a1 NC2400 + 103c 30a3 Compaq nw8440 + 1043 1237 A6J-Q008 + 1043 8179 P5KPL-VM Motherboard + 107b 5048 E4500 + 10f7 8338 Panasonic CF-Y5 laptop + 1775 11cc CC11/CL11 + 17aa 200c ThinkPad T60/R60 series + 8086 544e DeskTop Board D945GTP + 27e0 82801GR/GH/GHM (ICH7 Family) PCI Express Port 5 + 1775 11cc CC11/CL11 + 27e2 82801GR/GH/GHM (ICH7 Family) PCI Express Port 6 + 1775 11cc CC11/CL11 + 2810 82801HB/HR (ICH8/R) LPC Interface Controller + 1043 81ec P5B + 2811 82801HBM (ICH8M-E) LPC Interface Controller + 103c 30c1 Compaq 6910p + 17aa 20b6 T61 + e4bf cc47 CCG-RUMBA + 2812 82801HH (ICH8DH) LPC Interface Controller + 2814 82801HO (ICH8DO) LPC Interface Controller + 2815 82801HEM (ICH8M) LPC Interface Controller + 1025 0121 Aspire 5920G + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b + 103c 30d9 Presario C700 + 104d 9005 Vaio VGN-FZ260E + 2820 82801H (ICH8 Family) 4 port SATA IDE Controller + 1028 01da OptiPlex 745 + 1462 7235 P965 Neo MS-7235 mainboard + 2821 82801HR/HO/HH (ICH8R/DO/DH) 6 port SATA AHCI Controller + 2822 82801 SATA RAID Controller + 2824 82801HB (ICH8) 4 port SATA AHCI Controller + 1043 81ec P5B + 2825 82801H (ICH8 Family) 2 port SATA IDE Controller + 1028 01da OptiPlex 745 + 1462 7235 P965 Neo MS-7235 mainboard + 2828 82801HBM/HEM (ICH8M/ICH8M-E) SATA IDE Controller + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b + e4bf cc47 CCG-RUMBA + 2829 82801HBM/HEM (ICH8M/ICH8M-E) SATA AHCI Controller + 1025 0121 Aspire 5920G + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 103c 30d9 Presario C700 + 104d 9005 Vaio VGN-FZ260E + 17aa 20a7 ThinkPad T61 + 282a Mobile 82801 SATA RAID Controller + 2830 82801H (ICH8 Family) USB UHCI Controller #1 + 1025 0121 Acer Aspire 5920G + 1028 01da OptiPlex 745 + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 103c 30d9 Presario C700 + 1043 81ec P5B + 104d 9005 Vaio VGN-FZ260E + 1462 7235 P965 Neo MS-7235 mainboard + 17aa 20aa ThinkPad T61 + e4bf cc47 CCG-RUMBA + 2831 82801H (ICH8 Family) USB UHCI Controller #2 + 1025 0121 Aspire 5920G + 1028 01da OptiPlex 745 + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b +# Name mistyped on previous submission + 103c 30c1 Compaq 6910p + 103c 30d9 Presario C700 + 1043 81ec P5B + 104d 9005 Vaio VGN-FZ260E + 1462 7235 P965 Neo MS-7235 mainboard + 17aa 20aa ThinkPad T61 + e4bf cc47 CCG-RUMBA + 2832 82801H (ICH8 Family) USB UHCI Controller #3 + 1025 0121 Aspire 5920G + 1028 01da OptiPlex 745 + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 103c 30d9 Presario C700 + 1043 81ec P5B + 104d 9005 Vaio VGN-FZ260E + 17aa 20aa ThinkPad T61 + e4bf cc47 CCG-RUMBA + 2834 82801H (ICH8 Family) USB UHCI Controller #4 + 1025 0121 Aspire 5920G + 1028 01da OptiPlex 745 + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 1043 81ec P5B + 104d 9005 Vaio VGN-FZ260E + 1462 7235 P965 Neo MS-7235 mainboard + 17aa 20aa ThinkPad T61 + e4bf cc47 CCG-RUMBA + 2835 82801H (ICH8 Family) USB UHCI Controller #5 + 1025 0121 Acer Aspire 5920G + 1028 01da OptiPlex 745 + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 1043 81ec P5B + 104d 9005 Vaio VGN-FZ260E + 17aa 20aa ThinkPad T60 + e4bf cc47 CCG-RUMBA + 2836 82801H (ICH8 Family) USB2 EHCI Controller #1 + 1025 0121 Aspire 5920G + 1028 01da OptiPlex 745 + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 103c 30d9 Presario C700 + 1043 81ec P5B + 104d 9005 Vaio VGN-FZ260E + 1462 7235 P965 Neo MS-7235 mainboard + 17aa 20ab ThinkPad T61 + e4bf cc47 CCG-RUMBA + 283a 82801H (ICH8 Family) USB2 EHCI Controller #2 + 1025 0121 Acer Aspire 5920G + 1028 01da OptiPlex 745 + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 1043 81ec P5B + 104d 9005 Vaio VGN-FZ260E + 17aa 20ab ThinkPad T61 + e4bf cc47 CCG-RUMBA + 283e 82801H (ICH8 Family) SMBus Controller + 1025 0121 Aspire 5920G + 1028 01da OptiPlex 745 + 1028 01f3 Inspiron 1420 + 103c 30d9 Presario C700 + 1043 81ec P5B + 104d 9005 Vaio VGN-FZ260E + 1462 7235 P965 Neo MS-7235 mainboard + 17aa 20a9 ThinkPad T61 + e4bf cc47 CCG-RUMBA + 283f 82801H (ICH8 Family) PCI Express Port 1 + 1028 01da OptiPlex 745 + 103c 30c1 Compaq 6910p + 17aa 20ad ThinkPad T61 + 2841 82801H (ICH8 Family) PCI Express Port 2 + 103c 30c1 Compaq 6910p + 17aa 20ad ThinkPad T61 + 2843 82801H (ICH8 Family) PCI Express Port 3 + 17aa 20ad ThinkPad T61 + 2845 82801H (ICH8 Family) PCI Express Port 4 + 17aa 20ad ThinkPad T61 + 2847 82801H (ICH8 Family) PCI Express Port 5 + 1028 01da OptiPlex 745 + 103c 30c1 Compaq 6910p + 17aa 20ad ThinkPad T61 + 2849 82801H (ICH8 Family) PCI Express Port 6 + 284b 82801H (ICH8 Family) HD Audio Controller + 1025 011f Realtek ALC268 audio codec + 1025 0121 Aspire 5920G + 1025 0145 Realtek ALC889 (Aspire 8920G w. Dolby Theather) + 1028 01da OptiPlex 745 + 1028 01f3 Inspiron 1420 + 1028 01f9 Dell Latitude D630 + 1028 01ff Dell Precision M4300 + 1028 0256 Studio 1735 + 103c 2802 HP Compaq dc7700p + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 1043 1339 Asus M51S series + 1043 81ec P5B + 104d 9005 Vaio VGN-FZ260E + 104d 9016 Sony VAIO VGN-AR51M + 14f1 5051 Presario C700 + 17aa 20ac ThinkPad T61 + 8384 7616 Dell Vostro 1400 + 284f 82801H (ICH8 Family) Thermal Reporting Device + 2850 82801HBM/HEM (ICH8M/ICH8M-E) IDE Controller + 1025 0121 Aspire 5920G + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 103c 30d9 Presario C700 + 104d 9005 Vaio VGN-FZ260E + 17aa 20a6 ThinkPad T61 + e4bf cc47 CCG-RUMBA + 2912 82801IH (ICH9DH) LPC Interface Controller + 2914 82801IO (ICH9DO) LPC Interface Controller + 1028 0211 Optiplex 755 + 2916 82801IR (ICH9R) LPC Interface Controller + 2917 ICH9M-E LPC Interface Controller + 2918 82801IB (ICH9) LPC Interface Controller + 1028 0236 PowerEdge R610 82801IB (ICH9) LPC Interface Controller + 2919 ICH9M LPC Interface Controller + 2920 82801IR/IO/IH (ICH9R/DO/DH) 4 port SATA IDE Controller + 1028 020f PowerEdge R300 onboard SATA Controller + 1028 0210 PowerEdge T300 onboard SATA Controller + 1028 0211 Optiplex 755 + 1028 023c PowerEdge R200 onboard SATA Controller + 2921 82801IB (ICH9) 2 port SATA IDE Controller + 1028 0235 PowerEdge R710 SATA IDE Controller + 1028 0236 PowerEdge R610 SATA IDE Controller + 1028 0237 PowerEdge T610 SATA IDE Controller + 2922 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA AHCI Controller + 2923 82801IB (ICH9) 4 port SATA AHCI Controller + 2925 82801IR/IO (ICH9R/DO) SATA RAID Controller + 1734 10e0 System Board D2542 + 8086 2925 System Board D2542 + 2926 82801I (ICH9 Family) 2 port SATA IDE Controller + 1028 020f PowerEdge R300 onboard SATA Controller + 1028 0210 PowerEdge T300 onboard SATA Controller + 1028 0211 Optiplex 755 + 2928 ICH9M/M-E 2 port SATA IDE Controller + 2929 ICH9M/M-E SATA AHCI Controller + 103c 3628 dv6-1190en + 292c ICH9M-E SATA RAID Controller + 292d ICH9M/M-E 2 port SATA IDE Controller + 292e ICH9M SATA IDE Controller + 2930 82801I (ICH9 Family) SMBus Controller + 1028 0211 Optiplex 755 + 103c 3628 dv6-1190en + 2932 82801I (ICH9 Family) Thermal Subsystem + 103c 3628 dv6-1190en + 2934 82801I (ICH9 Family) USB UHCI Controller #1 + 1028 020f PowerEdge R300 onboard UHCI + 1028 0210 PowerEdge T300 onboard UHCI + 1028 0211 Optiplex 755 + 1028 0235 PowerEdge R710 USB UHCI Controller + 1028 0236 PowerEdge R610 USB UHCI Controller + 1028 0237 PowerEdge T610 USB UHCI Controller + 1028 023c PowerEdge R200 onboard UHCI + 1028 0287 PowerEdge M610 onboard UHCI + 1028 029c PowerEdge M710 USB UHCI Controller + 1028 2011 Optiplex 755 + 2935 82801I (ICH9 Family) USB UHCI Controller #2 + 1028 020f PowerEdge R300 onboard UHCI + 1028 0210 PowerEdge T300 onboard UHCI + 1028 0211 Optiplex 755 + 1028 0235 PowerEdge R710 USB UHCI Controller + 1028 0236 PowerEdge R610 USB UHCI Controller + 1028 0237 PowerEdge T610 USB UHCI Controller + 1028 023c PowerEdge R200 onboard UHCI + 1028 0287 PowerEdge M610 onboard UHCI + 1028 029c PowerEdge M710 USB UHCI Controller + 2936 82801I (ICH9 Family) USB UHCI Controller #3 + 1028 020f PowerEdge R300 onboard UHCI + 1028 0210 PowerEdge T300 onboard UHCI + 1028 0211 Optiplex 755 + 1028 0237 PowerEdge T610 USB UHCI Controller + 1028 023c PowerEdge R200 onboard UHCI + 1028 0287 PowerEdge M610 onboard UHCI + 1028 029c PowerEdge M710 USB UHCI Controller + 2937 82801I (ICH9 Family) USB UHCI Controller #4 + 1028 0211 Optiplex 755 + 1028 0235 PowerEdge R710 USB UHCI Controller + 1028 0236 PowerEdge R610 USB UHCI Controller + 1028 0237 PowerEdge T610 USB UHCI Controller + 1028 0287 PowerEdge M610 onboard UHCI + 1028 029c PowerEdge M710 USB UHCI Controller + 1028 2011 Optiplex 755 + 8086 2937 Optiplex 755 + 8086 2942 828011 (ICH9 Family ) USB UHCI Controller + 2938 82801I (ICH9 Family) USB UHCI Controller #5 + 1028 0211 Optiplex 755 + 1028 0235 PowerEdge R710 USB UHCI Controller + 1028 0236 PowerEdge R610 USB UHCI Controller + 1028 0237 PowerEdge T610 USB UHCI Controller + 1028 0287 PowerEdge M610 onboard UHCI + 1028 029c PowerEdge M710 USB UHCI Controller + 8086 2938 Optiplex 755 + 2939 82801I (ICH9 Family) USB UHCI Controller #6 + 1028 0210 PowerEdge T300 onboard UHCI + 1028 0237 PowerEdge T610 USB UHCI Controller + 293a 82801I (ICH9 Family) USB2 EHCI Controller #1 + 1028 020f PowerEdge R300 onboard EHCI + 1028 0210 PowerEdge T300 onboard EHCI + 1028 0211 Optiplex 755 + 1028 0235 PowerEdge R710 USB EHCI Controller + 1028 0236 PowerEdge R610 USB EHCI Controller + 1028 0237 PowerEdge T610 USB EHCI Controller + 1028 023c PowerEdge R200 onboard EHCI + 1028 0287 PowerEdge M610 onboard EHCI + 1028 029c PowerEdge M710 USB EHCI Controller + 293c 82801I (ICH9 Family) USB2 EHCI Controller #2 + 1028 0211 Optiplex 755 + 1028 0235 PowerEdge R710 USB EHCI Controller + 1028 0236 PowerEdge R610 USB EHCI Controller + 1028 0237 PowerEdge T610 USB EHCI Controller + 1028 0287 PowerEdge M610 onboard EHCI + 1028 029c PowerEdge M710 USB EHCI Controller + 8086 293c Optiplex 755 + 293e 82801I (ICH9 Family) HD Audio Controller + 1028 0211 Optiplex 755 + 103c 3628 dv6-1190en + 8086 293e Optiplex 755 + 8086 2940 Optiplex 755 + 2940 82801I (ICH9 Family) PCI Express Port 1 + 1028 0211 Optiplex 755 + 8086 2940 Optiplex 755 + 2942 82801I (ICH9 Family) PCI Express Port 2 + 2944 82801I (ICH9 Family) PCI Express Port 3 + 2946 82801I (ICH9 Family) PCI Express Port 4 + 2948 82801I (ICH9 Family) PCI Express Port 5 + 294a 82801I (ICH9 Family) PCI Express Port 6 + 294c 82566DC-2 Gigabit Network Connection + 17aa 302e 82566DM-2 Gigabit Network Connection + 2970 82946GZ/PL/GL Memory Controller Hub + 2971 82946GZ/PL/GL PCI Express Root Port + 2972 82946GZ/GL Integrated Graphics Controller + 2973 82946GZ/GL Integrated Graphics Controller + 2974 82946GZ/GL HECI Controller + 2975 82946GZ/GL HECI Controller + 2976 82946GZ/GL PT IDER Controller + 2977 82946GZ/GL KT Controller + 2980 82G35 Express DRAM Controller + 2981 82G35 Express PCI Express Root Port + 2982 82G35 Express Integrated Graphics Controller + 2983 82G35 Express Integrated Graphics Controller + 2984 82G35 Express HECI Controller + 2990 82Q963/Q965 Memory Controller Hub + 1028 01da OptiPlex 745 + 2991 82Q963/Q965 PCI Express Root Port + 2992 82Q963/Q965 Integrated Graphics Controller + 2993 82Q963/Q965 Integrated Graphics Controller + 2994 82Q963/Q965 HECI Controller + 2995 82Q963/Q965 HECI Controller + 2996 82Q963/Q965 PT IDER Controller + 2997 82Q963/Q965 KT Controller + 29a0 82P965/G965 Memory Controller Hub + 1043 81ea P5B + 1462 7276 MS-7276 [G965MDH] + 29a1 82P965/G965 PCI Express Root Port + 29a2 82G965 Integrated Graphics Controller + 1462 7276 MS-7276 [G965MDH] + 29a3 82G965 Integrated Graphics Controller + 29a4 82P965/G965 HECI Controller + 29a5 82P965/G965 HECI Controller + 29a6 82P965/G965 PT IDER Controller + 29a7 82P965/G965 KT Controller + 29b0 82Q35 Express DRAM Controller + 1028 0211 OptiPlex 755 + 29b1 82Q35 Express PCI Express Root Port + 1028 0211 OptiPlex 755 + 29b2 82Q35 Express Integrated Graphics Controller + 1028 0211 OptiPlex 755 + 29b3 82Q35 Express Integrated Graphics Controller + 1028 0211 OptiPlex 755 + 29b4 82Q35 Express MEI Controller + 1028 0211 OptiPlex 755 + 29b5 82Q35 Express MEI Controller + 29b6 82Q35 Express PT IDER Controller + 1028 0211 OptiPlex 755 + 29b7 82Q35 Express Serial KT Controller + 1028 0211 OptiPlex 755 + 29c0 82G33/G31/P35/P31 Express DRAM Controller + 1043 82b0 P5KPL-VM Motherboard + 29c1 82G33/G31/P35/P31 Express PCI Express Root Port + 29c2 82G33/G31 Express Integrated Graphics Controller + 1043 82b0 P5KPL-VM Motherboard + 29c3 82G33/G31 Express Integrated Graphics Controller + 1043 82b0 P5KPL-VM Motherboard + 29c4 82G33/G31/P35/P31 Express MEI Controller + 29c5 82G33/G31/P35/P31 Express MEI Controller + 29c6 82G33/G31/P35/P31 Express PT IDER Controller + 29c7 82G33/G31/P35/P31 Express Serial KT Controller + 29cf Virtual HECI Controller + 29d0 82Q33 Express DRAM Controller + 29d1 82Q33 Express PCI Express Root Port + 29d2 82Q33 Express Integrated Graphics Controller + 29d3 82Q33 Express Integrated Graphics Controller + 29d4 82Q33 Express MEI Controller + 29d5 82Q33 Express MEI Controller + 29d6 82Q33 Express PT IDER Controller + 29d7 82Q33 Express Serial KT Controller + 29e0 82X38/X48 Express DRAM Controller + 29e1 82X38/X48 Express Host-Primary PCI Express Bridge + 29e4 82X38/X48 Express MEI Controller + 29e5 82X38/X48 Express MEI Controller + 29e6 82X38/X48 Express PT IDER Controller + 29e7 82X38/X48 Express Serial KT Controller + 29e9 82X38/X48 Express Host-Secondary PCI Express Bridge + 29f0 3200/3210 Chipset DRAM Controller + 29f1 3200/3210 Chipset Host-Primary PCI Express Bridge + 29f4 3200/3210 Chipset MEI Controller + 29f5 3200/3210 Chipset MEI Controller + 29f6 3200/3210 Chipset PT IDER Controller + 29f7 3200/3210 Chipset Serial KT Controller + 29f9 3210 Chipset Host-Secondary PCI Express Bridge + 2a00 Mobile PM965/GM965/GL960 Memory Controller Hub + 1025 0121 Acer Aspire 5920G + 1028 01f3 Inspiron 1420 + 103c 30c0 Compaq 6710b + 103c 30c1 Compaq 6910p + 103c 30d9 Presario C700 + 104d 9005 Vaio VGN-FZ260E + 17aa 20b1 ThinkPad T61 + 17aa 20b3 T61 + e4bf cc47 CCG-RUMBA + 2a01 Mobile PM965/GM965/GL960 PCI Express Root Port + 2a02 Mobile GM965/GL960 Integrated Graphics Controller + 1028 01f3 Inspiron 1420 + 1028 01f9 Latitude D630 + 103c 30c0 Compaq 6710b + 103c 30d9 Presario C700 + 17aa 20b5 T61 + e4bf cc47 CCG-RUMBA + 2a03 Mobile GM965/GL960 Integrated Graphics Controller + 1028 01f3 Dell Inspiron 1420 + 103c 30c0 Compaq 6710b + 103c 30d9 Presario C700 + 17aa 20b5 T61 + e4bf cc47 CCG-RUMBA + 2a04 Mobile PM965/GM965 MEI Controller + 103c 30c1 Compaq 6910p + 2a05 Mobile PM965/GM965 MEI Controller + 2a06 Mobile PM965/GM965 PT IDER Controller + 103c 30c1 Compaq 6910p + 2a07 Mobile PM965/GM965 KT Controller + 103c 30c1 Compaq 6910p + 2a10 Mobile GME965/GLE960 Memory Controller Hub + e4bf cc47 CCG-RUMBA + 2a11 Mobile GME965/GLE960 PCI Express Root Port + 2a12 Mobile GME965/GLE960 Integrated Graphics Controller + e4bf cc47 CCG-RUMBA + 2a13 Mobile GME965/GLE960 Integrated Graphics Controller + e4bf cc47 CCG-RUMBA + 2a14 Mobile GME965/GLE960 MEI Controller + 2a15 Mobile GME965/GLE960 MEI Controller + 2a16 Mobile GME965/GLE960 PT IDER Controller + 2a17 Mobile GME965/GLE960 KT Controller + 2a40 Mobile 4 Series Chipset Memory Controller Hub + 2a41 Mobile 4 Series Chipset PCI Express Graphics Port + 2a42 Mobile 4 Series Chipset Integrated Graphics Controller + 2a43 Mobile 4 Series Chipset Integrated Graphics Controller + 2a44 Mobile 4 Series Chipset MEI Controller + 2a45 Mobile 4 Series Chipset MEI Controller + 2a46 Mobile 4 Series Chipset PT IDER Controller + 2a47 Mobile 4 Series Chipset AMT SOL Redirection + 2a50 Cantiga MEI Controller + 2a51 Cantiga MEI Controller + 2a52 Cantiga PT IDER Controller + 2a53 Cantiga AMT SOL Redirection + 2b00 Nehalem-EX System Configuration Controller 1 + 2b02 Nehalem-EX System Configuration Controller 2 + 2b04 Nehalem-EX Power Controller + 2b08 Nehalem-EX Caching Agent 0 + 2b0c Nehalem-EX Caching Agent 1 + 2b10 Nehalem-EX QPI Home Agent 0 + 2b13 Nehalem-EX Memory Controller 0c + 2b14 Nehalem-EX Memory Controller 0a + 2b16 Nehalem-EX Memory Controller 0b + 2b18 Nehalem-EX QPI Home Agent 1 + 2b1b Nehalem-EX Memory Controller 1c + 2b1c Nehalem-EX Memory Controller 1a + 2b1e Nehalem-EX Memory Controller 1b + 2b20 Nehalem-EX Last Level Cache Coherence Engine 0 + 2b24 Nehalem-EX Last Level Cache Coherence Engine 1 + 2b28 Nehalem-EX Last Level Cache Coherence Engine 2 + 2b2c Nehalem-EX Last Level Cache Coherence Engine 3 + 2b30 Nehalem-EX Last Level Cache Coherence Engine 4 + 2b34 Nehalem-EX Last Level Cache Coherence Engine 5 + 2b38 Nehalem-EX Last Level Cache Coherence Engine 6 + 2b3c Nehalem-EX Last Level Cache Coherence Engine 7 + 2b40 Nehalem-EX QPI Router Port 0-1 + 2b42 Nehalem-EX QPI Router Port 2-3 + 2b44 Nehalem-EX QPI Router Port 4-5 + 2b46 Nehalem-EX QPI Router Port 6-7 + 2b48 Nehalem-EX Test and Debug 0 + 2b4c Nehalem-EX Test and Debug 1 + 2b50 Nehalem-EX QPI Physical Port 0: REUT control/status + 2b52 Nehalem-EX QPI Physical Port 0: Misc. control/status + 2b54 Nehalem-EX QPI Physical Port 1: REUT control/status + 2b56 Nehalem-EX QPI Physical Port 1: Misc. control/status + 2b58 Nehalem-EX QPI Physical Port 2: REUT control/status + 2b5a Nehalem-EX QPI Physical Port 2: Misc. control/status + 2b5c Nehalem-EX QPI Physical Port 3: REUT control/status + 2b5e Nehalem-EX QPI Physical Port 3: Misc. control/status + 2b60 Nehalem-EX SMI Physical Port 0: REUT control/status + 2b62 Nehalem-EX SMI Physical Port 0: Misc control/status + 2b64 Nehalem-EX SMI Physical Port 0: REUT control/status + 2b66 Nehalem-EX SMI Physical Port 1: Misc control/status + 2b68 Nehalem-EX System Configuration Controller 3 + 2b6a Nehalem-EX System Configuration Controller 4 + 2c01 Xeon 5500/Core i7 QuickPath Architecture System Address Decoder + 2c10 Xeon 5500/Core i7 QPI Link 0 + 2c11 Xeon 5500/Core i7 QPI Physical 0 + 2c14 Xeon 5500/Core i7 QPI Link 1 + 2c15 Xeon 5500/Core i7 QPI Physical 1 + 2c18 Xeon 5500/Core i7 Integrated Memory Controller + 2c19 Xeon 5500/Core i7 Integrated Memory Controller Target Address Decoder + 2c1a Xeon 5500/Core i7 Integrated Memory Controller RAS Registers + 2c1c Xeon 5500/Core i7 Integrated Memory Controller Test Registers + 2c20 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Control Registers + 2c21 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Address Registers + 2c22 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Rank Registers + 2c23 Xeon 5500/Core i7 Integrated Memory Controller Channel 0 Thermal Control Registers + 2c28 Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Control Registers + 2c29 Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Address Registers + 2c2a Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Rank Registers + 2c2b Xeon 5500/Core i7 Integrated Memory Controller Channel 1 Thermal Control Registers + 2c30 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Control Registers + 2c31 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Address Registers + 2c32 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Rank Registers + 2c33 Xeon 5500/Core i7 Integrated Memory Controller Channel 2 Thermal Control Registers + 2c40 Xeon 5500/Core i7 QuickPath Architecture Generic Non-Core Registers + 2c41 Xeon 5500/Core i7 QuickPath Architecture Generic Non-Core Registers + 2c50 Core Processor QuickPath Architecture Generic Non-Core Registers + 2c51 Core Processor QuickPath Architecture Generic Non-Core Registers + 2c52 Core Processor QuickPath Architecture Generic Non-Core Registers + 2c53 Core Processor QuickPath Architecture Generic Non-Core Registers + 2c54 Core Processor QuickPath Architecture Generic Non-Core Registers + 2c55 Core Processor QuickPath Architecture Generic Non-Core Registers + 2c56 Core Processor QuickPath Architecture Generic Non-Core Registers + 2c57 Core Processor QuickPath Architecture Generic Non-Core Registers + 2c58 Jasper Forest QPI Generic Non-core Registers + 2c59 Jasper Forest QPI Generic Non-core Registers + 2c5a Jasper Forest QPI Generic Non-core Registers + 2c5b Jasper Forest QPI Generic Non-core Registers + 2c5c Jasper Forest QPI Generic Non-core Registers + 2c5d Jasper Forest QPI Generic Non-core Registers + 2c5e Jasper Forest QPI Generic Non-core Registers + 2c5f Jasper Forest QPI Generic Non-core Registers + 2c62 QuickPath Architecture Generic Non-core Registers + 2c70 QuickPath Architecture Generic Non-core Registers + 2c81 Core Processor QuickPath Architecture System Address Decoder + 2c90 Core Processor QPI Link 0 + 2c91 Core Processor QPI Physical 0 + 2c98 Core Processor Integrated Memory Controller + 2c99 Core Processor Integrated Memory Controller Target Address Decoder + 2c9c Core Processor Integrated Memory Controller Test Registers + 2ca0 Core Processor Integrated Memory Controller Channel 0 Control Registers + 2ca1 Core Processor Integrated Memory Controller Channel 0 Address Registers + 2ca2 Core Processor Integrated Memory Controller Channel 0 Rank Registers + 2ca3 Core Processor Integrated Memory Controller Channel 0 Thermal Control Registers + 2ca8 Core Processor Integrated Memory Controller Channel 1 Control Registers + 2ca9 Core Processor Integrated Memory Controller Channel 1 Address Registers + 2caa Core Processor Integrated Memory Controller Channel 1 Rank Registers + 2cab Core Processor Integrated Memory Controller Channel 1 Thermal Control Registers + 2cc1 Jasper Forest QPI System Address Decoder + 2cd0 Jasper Forest QPI Link 0 + 2cd1 Jasper Forest QPI Physical 0 + 2cd4 Jasper Forest QPI Link 1 + 2cd5 Jasper Forest QPI Physical 1 + 2cd8 Jasper Forest Integrated Memory Controller Registers + 2cd9 Jasper Forest Integrated Memory Controller Target Address Decoder + 2cda Jasper Forest Integrated Memory Controller RAS Registers + 2cdc Jasper Forest Integrated Memory Controller Test Registers + 2ce0 Jasper Forest Integrated Memory Controller Channel 0 Control + 2ce1 Jasper Forest Integrated Memory Controller Channel 0 Address + 2ce2 Jasper Forest Integrated Memory Controller Channel 0 Rank + 2ce3 Jasper Forest Integrated Memory Controller Channel 0 Thermal Control + 2ce8 Jasper Forest Integrated Memory Controller Channel 1 Control + 2ce9 Jasper Forest Integrated Memory Controller Channel 1 Address + 2cea Jasper Forest Integrated Memory Controller Channel 1 Rank + 2ceb Jasper Forest Integrated Memory Controller Channel 1 Thermal Control + 2cf0 Jasper Forest Integrated Memory Controller Channel 2 Control + 2cf1 Jasper Forest Integrated Memory Controller Channel 2 Address + 2cf2 Jasper Forest Integrated Memory Controller Channel 2 Rank + 2cf3 Jasper Forest Integrated Memory Controller Channel 2 Thermal Control + 2d01 QuickPath Architecture System Address Decoder + 2d10 QPI Link 0 + 2d11 QPI Physical 0 + 2d81 QuickPath Architecture System Address Decoder + 2d90 QPI Link 0 + 2d91 QPI Physical 0 + 2d92 Mirror Port Link 0 + 2d93 Mirror Port Link 1 + 2d94 QPI Link 1 + 2d95 QPI Physical 1 + 2d98 Integrated Memory Controller Registers + 2d99 Integrated Memory Controller Target Address Decoder + 2d9a Integrated Memory Controller RAS Registers + 2d9c Integrated Memory Controller Test Registers + 2da0 Integrated Memory Controller Channel 0 Control + 2da1 Integrated Memory Controller Channel 0 Address + 2da2 Integrated Memory Controller Channel 0 Rank + 2da3 Integrated Memory Controller Channel 0 Thermal Control + 2da8 Integrated Memory Controller Channel 1 Control + 2da9 Integrated Memory Controller Channel 1 Address + 2daa Integrated Memory Controller Channel 1 Rank + 2dab Integrated Memory Controller Channel 1 Thermal Control + 2db0 Integrated Memory Controller Channel 2 Control + 2db1 Integrated Memory Controller Channel 2 Address + 2db2 Integrated Memory Controller Channel 2 Rank + 2db3 Integrated Memory Controller Channel 2 Thermal Control + 2e00 4 Series Chipset DRAM Controller + 2e01 4 Series Chipset PCI Express Root Port + 2e02 4 Series Chipset Integrated Graphics Controller + 2e03 4 Series Chipset Integrated Graphics Controller + 2e04 4 Series Chipset HECI Controller + 2e05 4 Series Chipset HECI Controller + 2e06 4 Series Chipset PT IDER Controller + 2e07 4 Series Chipset Serial KT Controller + 2e10 4 Series Chipset DRAM Controller + 2e11 4 Series Chipset PCI Express Root Port + 2e12 4 Series Chipset Integrated Graphics Controller + 2e13 4 Series Chipset Integrated Graphics Controller + 2e14 4 Series Chipset HECI Controller + 2e15 4 Series Chipset HECI Controller + 2e16 4 Series Chipset PT IDER Controller + 2e17 4 Series Chipset Serial KT Controller + 2e20 4 Series Chipset DRAM Controller + 1458 5000 GA-EP45-DS5 Motherboard + 2e21 4 Series Chipset PCI Express Root Port + 1458 5000 GA-EP45-DS5 Motherboard + 2e22 4 Series Chipset Integrated Graphics Controller + 2e23 4 Series Chipset Integrated Graphics Controller + 2e24 4 Series Chipset HECI Controller + 2e25 4 Series Chipset HECI Controller + 2e26 4 Series Chipset PT IDER Controller + 2e27 4 Series Chipset Serial KT Controller + 2e29 4 Series Chipset PCI Express Root Port + 2e30 4 Series Chipset DRAM Controller + 2e31 4 Series Chipset PCI Express Root Port + 2e32 4 Series Chipset Integrated Graphics Controller + 2e33 4 Series Chipset Integrated Graphics Controller + 2e34 4 Series Chipset HECI Controller + 2e35 4 Series Chipset HECI Controller + 2e36 4 Series Chipset PT IDER Controller + 2e37 4 Series Chipset Serial KT Controller + 2e40 4 Series Chipset DRAM Controller + 2e41 4 Series Chipset PCI Express Root Port + 2e42 4 Series Chipset Integrated Graphics Controller + 2e43 4 Series Chipset Integrated Graphics Controller + 2e44 4 Series Chipset HECI Controller + 2e45 4 Series Chipset HECI Controller + 2e46 4 Series Chipset PT IDER Controller + 2e47 4 Series Chipset Serial KT Controller + 2e91 4 Series Chipset PCI Express Root Port + 2e92 4 Series Chipset Integrated Graphics Controller + 2e93 4 Series Chipset Integrated Graphics Controller + 2e94 4 Series Chipset HECI Controller + 2e95 4 Series Chipset HECI Controller + 2e96 4 Series Chipset PT IDER Controller + 3200 GD31244 PCI-X SATA HBA + 1775 c200 C2K onboard SATA host bus adapter + 3313 IOP348 I/O Processor (SL8e) in IOC Mode SAS/SATA + 331b IOP348 I/O Processor (SL8x) in IOC Mode SAS/SATA + 3331 IOC340 I/O Controller (VV8e) SAS/SATA + 3339 IOC340 I/O Controller (VV8x) SAS/SATA + 3340 82855PM Processor to I/O Controller + 1014 0529 Thinkpad T40 series + 1025 005a TravelMate 290 + 103c 088c NC8000 laptop + 103c 0890 NC6000 laptop + 103c 08b0 tc1100 tablet + 144d c005 X10 Laptop + 144d c00c P30/P35 notebook + 3341 82855PM Processor to AGP Controller + 144d c00c P30 notebook + 3363 IOC340 I/O Controller in IOC Mode SAS/SATA + 3382 81342 [Chevelon] I/O Processor (ATUe) + 33c3 IOP348 I/O Processor (SL8De) in IOC Mode SAS/SATA + 33cb IOP348 I/O Processor (SL8Dx) in IOC Mode SAS/SATA + 3400 5520/5500/X58 I/O Hub to ESI Port + 3401 5520/5500/X58 I/O Hub to ESI Port + 3402 5520/5500/X58 I/O Hub to ESI Port + 3403 5500 I/O Hub to ESI Port + 1028 0236 PowerEdge R610 I/O Hub to ESI Port + 1028 0287 PowerEdge M610 I/O Hub to ESI Port + 1028 028c PowerEdge R410 I/O Hub to ESI Port + 1028 028d PowerEdge T410 I/O Hub to ESI Port + 3404 5520/5500/X58 I/O Hub to ESI Port + 3405 X58 I/O Hub to ESI Port + 3406 5520 I/O Hub to ESI Port + 3407 5520/5500/X58 I/O Hub to ESI Port + 3408 5520/5500/X58 I/O Hub PCI Express Root Port 1 + 3409 5520/5500/X58 I/O Hub PCI Express Root Port 2 + 340a 5520/5500/X58 I/O Hub PCI Express Root Port 3 + 340b 5520/X58 I/O Hub PCI Express Root Port 4 + 340c 5520/X58 I/O Hub PCI Express Root Port 5 + 340d 5520/X58 I/O Hub PCI Express Root Port 6 + 340e 5520/5500/X58 I/O Hub PCI Express Root Port 7 + 340f 5520/5500/X58 I/O Hub PCI Express Root Port 8 + 3410 5520/5500/X58 I/O Hub PCI Express Root Port 9 + 3411 5520/5500/X58 I/O Hub PCI Express Root Port 10 + 3418 5520/5500/X58 Physical Layer Port 0 + 3419 5520/5500 Physical Layer Port 1 + 3420 5500 Non-Legacy I/O Hub PCI Express Root Port 0 + 3421 5520 Non-Legacy I/O Hub PCI Express Root Port 0 + 3422 5520/5500/X58 I/O Hub GPIO and Scratch Pad Registers + 3423 5520/5500/X58 I/O Hub Control Status and RAS Registers + 3425 5520/5500/X58 Physical and Link Layer Registers Port 0 + 3426 5520/5500/X58 Routing and Protocol Layer Registers Port 0 + 3427 5520/5500 Physical and Link Layer Registers Port 1 + 3428 5520/5500 Routing & Protocol Layer Register Port 1 + 3429 5520/5500/X58 Chipset QuickData Technology Device + 342a 5520/5500/X58 Chipset QuickData Technology Device + 342b 5520/5500/X58 Chipset QuickData Technology Device + 342c 5520/5500/X58 Chipset QuickData Technology Device + 342d 5520/5500/X58 I/O Hub I/OxAPIC Interrupt Controller + 342e 5520/5500/X58 I/O Hub System Management Registers + 342f 5520/5500/X58 Trusted Execution Technology Registers + 3430 5520/5500/X58 Chipset QuickData Technology Device + 3431 5520/5500/X58 Chipset QuickData Technology Device + 3432 5520/5500/X58 Chipset QuickData Technology Device + 3433 5520/5500/X58 Chipset QuickData Technology Device + 3438 5520/5500/X58 I/O Hub Throttle Registers + 3500 6311ESB/6321ESB PCI Express Upstream Port + 3501 6310ESB PCI Express Upstream Port + 3504 6311ESB/6321ESB I/OxAPIC Interrupt Controller + 3505 6310ESB I/OxAPIC Interrupt Controller + 350c 6311ESB/6321ESB PCI Express to PCI-X Bridge + 350d 6310ESB PCI Express to PCI-X Bridge + 3510 6311ESB/6321ESB PCI Express Downstream Port E1 + 3511 6310ESB PCI Express Downstream Port E1 + 3514 6311ESB/6321ESB PCI Express Downstream Port E2 + 3515 6310ESB PCI Express Downstream Port E2 + 3518 6311ESB/6321ESB PCI Express Downstream Port E3 + 3519 6310ESB PCI Express Downstream Port E3 + 3575 82830 830 Chipset Host Bridge + 0e11 0030 Evo N600c + 1014 021d ThinkPad A/T/X Series + 104d 80e7 VAIO PCG-GR214EP/GR214MP/GR215MP/GR314MP/GR315MP + 3576 82830 830 Chipset AGP Bridge + 3577 82830 CGC [Chipset Graphics Controller] + 1014 0513 ThinkPad A/T/X Series + 3578 82830 830 Chipset Host Bridge + 3580 82852/82855 GM/GME/PM/GMV Processor to I/O Controller + 1014 055c ThinkPad R50e + 1028 0139 Latitude D400 + 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 018d Inspiron 700m/710m + 1028 0196 Inspiron 5160 + 114a 0582 PC8 + 1734 1055 Amilo M1420 + 1775 10d0 V5D Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10e0 PSL09 PrPMC + e4bf 0cc9 CC9-SAMBA + e4bf 0cd2 CD2-BEBOP + 3581 82852/82855 GM/GME/PM/GMV Processor to AGP Controller + 1734 1055 Amilo M1420 + 3582 82852/855GM Integrated Graphics Device + 1014 0562 ThinkPad R50e + 1028 0139 Latitude D400 + 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 018d Inspiron 700m/710m + 114a 0582 PC8 integrated graphics + 1775 10d0 V5D Single Board Computer VGA + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10e0 PSL09 PrPMC + e4bf 0cc9 CC9-SAMBA + e4bf 0cd2 CD2-BEBOP + 3584 82852/82855 GM/GME/PM/GMV Processor to I/O Controller + 1014 055d ThinkPad R50e + 1028 0139 Latitude D400 + 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 018d Inspiron 700m/710m + 1028 0196 Inspiron 5160 + 114a 0582 PC8 + 1734 1055 Amilo M1420 + 1775 10d0 V5D Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10e0 PSL09 PrPMC + 3585 82852/82855 GM/GME/PM/GMV Processor to I/O Controller + 1014 055e ThinkPad R50e + 1028 0139 Latitude D400 + 1028 014f Latitude X300 + 1028 0163 Latitude D505 + 1028 018d Inspiron 700m/710m + 1028 0196 Inspiron 5160 + 114a 0582 PC8 + 1734 1055 Amilo M1420 + 1775 10d0 V5D Single Board Computer + 1775 ce90 CE9 + 4c53 10b0 CL9 mainboard + 4c53 10e0 PSL09 PrPMC + 358c 82854 GMCH + 358e 82854 GMCH Integrated Graphics Device + 3590 E7520 Memory Controller Hub + 1014 02dd eServer xSeries server mainboard + 1028 016c PowerEdge 1850 Memory Controller Hub + 1028 016d PowerEdge 2850 Memory Controller Hub + 1028 019a PowerEdge SC1425 + 1734 103e PRIMERGY RX/TX S2 series + 1775 1100 CR11/VR11 Single Board Computer + 4c53 10d0 Telum ASLP10 Processor AMC + 3591 E7525/E7520 Error Reporting Registers + 1014 02dd eServer xSeries server mainboard + 1028 0169 Precision 470 + 4c53 10d0 Telum ASLP10 Processor AMC + 3592 E7320 Memory Controller Hub + 3593 E7320 Error Reporting Registers + 3594 E7520 DMA Controller + 1775 1100 CR11/VR11 Single Board Computer + 4c53 10d0 Telum ASLP10 Processor AMC + 3595 E7525/E7520/E7320 PCI Express Port A + 1775 1100 CR11/VR11 Single Board Computer + 3596 E7525/E7520/E7320 PCI Express Port A1 + 3597 E7525/E7520 PCI Express Port B + 1775 1100 CR11/VR11 Single Board Computer + 3598 E7520 PCI Express Port B1 + 1775 1100 CR11/VR11 Single Board Computer + 3599 E7520 PCI Express Port C + 1775 1100 CR11/VR11 Single Board Computer + 359a E7520 PCI Express Port C1 + 359b E7525/E7520/E7320 Extended Configuration Registers + 1014 02dd eServer xSeries server mainboard + 359e E7525 Memory Controller Hub + 1028 0169 Precision 470 + 35b0 3100 Chipset Memory I/O Controller Hub + 35b1 3100 DRAM Controller Error Reporting Registers + 35b5 3100 Chipset Enhanced DMA Controller + 35b6 3100 Chipset PCI Express Port A + 35b7 3100 Chipset PCI Express Port A1 + 35c8 3100 Extended Configuration Test Overflow Registers + 3600 7300 Chipset Memory Controller Hub + 3604 7300 Chipset PCI Express Port 1 + 3605 7300 Chipset PCI Express Port 2 + 3606 7300 Chipset PCI Express Port 3 + 3607 7300 Chipset PCI Express Port 4 + 3608 7300 Chipset PCI Express Port 5 + 3609 7300 Chipset PCI Express Port 6 + 360a 7300 Chipset PCI Express Port 7 + 360b 7300 Chipset QuickData Technology Device + 360c 7300 Chipset FSB Registers + 1028 01f0 PowerEdge R900 7300 Chipset FSB Registers + 360d 7300 Chipset Snoop Filter Registers + 360e 7300 Chipset Debug and Miscellaneous Registers + 360f 7300 Chipset FBD Branch 0 Registers + 3610 7300 Chipset FBD Branch 1 Registers + 3700 Jasper Forest DMI + 3701 Jasper Forest DMI + 3702 Jasper Forest DMI + 3703 Jasper Forest DMI + 3704 Jasper Forest DMI + 3705 Jasper Forest DMI + 3706 Jasper Forest DMI + 3707 Jasper Forest DMI + 3708 Jasper Forest DMI + 3709 Jasper Forest DMI + 370a Jasper Forest DMI + 370b Jasper Forest DMI + 370c Jasper Forest DMI + 370d Jasper Forest DMI + 370e Jasper Forest DMI + 370f Jasper Forest DMI + 3710 Jasper Forest CB3 DMA + 3711 Jasper Forest CB3 DMA + 3712 Jasper Forest CB3 DMA + 3713 Jasper Forest CB3 DMA + 3714 Jasper Forest CB3 DMA + 3715 Jasper Forest CB3 DMA + 3716 Jasper Forest CB3 DMA + 3717 Jasper Forest CB3 DMA + 3718 Jasper Forest CB3 DMA + 3719 Jasper Forest CB3 DMA + 371a Jasper Forest QPI Link + 371b Jasper Forest QPI Routing and Protocol + 371d Jasper Forest QPI Routing and Protocol + 3721 Jasper Forest PCI Express Root Port 1 + 3722 Jasper Forest PCI Express Root Port 2 + 3723 Jasper Forest PCI Express Root Port 3 + 3724 Jasper Forest PCI Express Root Port 4 + 3725 Jasper Forest NTB Primary + 3726 Jasper Forest NTB Primary + 3727 Jasper Forest NTB Secondary + 3728 Jasper Forest Core + 3729 Jasper Forest Core + 372a Jasper Forest Core + 372b Jasper Forest Core + 372c Jasper Forest Reserved + 373f Jasper Forest IOxAPIC + 3a00 82801JD/DO (ICH10 Family) 4-port SATA IDE Controller + 3a02 82801JD/DO (ICH10 Family) SATA AHCI Controller + 3a05 82801JD/DO (ICH10 Family) SATA RAID Controller + 3a06 82801JD/DO (ICH10 Family) 2-port SATA IDE Controller + 3a14 82801JDO (ICH10DO) LPC Interface Controller + 3a16 82801JIR (ICH10R) LPC Interface Controller + 1028 028c PowerEdge R410 LPC Interface Controller + 1028 028d PowerEdge T410 LPC Interface Controller + 1458 5001 GA-EP45-DS5 Motherboard + 3a18 82801JIB (ICH10) LPC Interface Controller + 3a1a 82801JD (ICH10D) LPC Interface Controller + 3a20 82801JI (ICH10 Family) 4 port SATA IDE Controller + 1028 028c PowerEdge R410 SATA IDE Controller + 1028 028d PowerEdge T410 SATA IDE Controller + 3a22 82801JI (ICH10 Family) SATA AHCI Controller + 1043 82d4 P5Q Deluxe Motherboard + 1458 b005 GA-EP45-DS5 Motherboard + 3a25 82801JIR (ICH10R) SATA RAID Controller + 1028 028c PERC S100 Controller (PE R410) + 1028 028d PERC S100 Controller (PE T410) + 1028 02f1 PERC S100 Controller (PE R510) + 3a26 82801JI (ICH10 Family) 2 port SATA IDE Controller + 1028 028c PowerEdge R410 SATA IDE Controller + 1028 028d PowerEdge T410 SATA IDE Controller + 3a30 82801JI (ICH10 Family) SMBus Controller + 1458 5001 GA-EP45-DS5 Motherboard + 3a32 82801JI (ICH10 Family) Thermal Subsystem + 3a34 82801JI (ICH10 Family) USB UHCI Controller #1 + 1028 028c PowerEdge R410 USB UHCI Controller + 1028 028d PowerEdge T410 USB UHCI Controller + 1458 5004 GA-EP45-DS5 Motherboard + 3a35 82801JI (ICH10 Family) USB UHCI Controller #2 + 1028 028c PowerEdge R410 USB UHCI Controller + 1028 028d PowerEdge T410 USB UHCI Controller + 1458 5004 GA-EP45-DS5 Motherboard + 3a36 82801JI (ICH10 Family) USB UHCI Controller #3 + 1028 028c PowerEdge R410 USB UHCI Controller + 1028 028d PowerEdge T410 USB UHCI Controller + 1458 5004 GA-EP45-DS5 Motherboard + 3a37 82801JI (ICH10 Family) USB UHCI Controller #4 + 1028 028c PowerEdge R410 USB UHCI Controller + 1028 028d PowerEdge T410 USB UHCI Controller + 1458 5004 GA-EP45-DS5 Motherboard + 3a38 82801JI (ICH10 Family) USB UHCI Controller #5 + 1028 028c PowerEdge R410 USB UHCI Controller + 1028 028d PowerEdge T410 USB UHCI Controller + 1458 5004 GA-EP45-DS5 Motherboard + 3a39 82801JI (ICH10 Family) USB UHCI Controller #6 + 1028 028c PowerEdge R410 USB UHCI Controller + 1028 028d PowerEdge T410 USB UHCI Controller + 1458 5004 GA-EP45-DS5 Motherboard + 3a3a 82801JI (ICH10 Family) USB2 EHCI Controller #1 + 1028 028c PowerEdge R410 USB EHCI Controller + 1028 028d PowerEdge T410 USB EHCI Controller + 1458 5006 GA-EP45-DS5 Motherboard + 3a3c 82801JI (ICH10 Family) USB2 EHCI Controller #2 + 1028 028c PowerEdge R410 USB EHCI Controller + 1028 028d PowerEdge T410 USB EHCI Controller + 1458 5006 GA-EP45-DS5 Motherboard + 3a3e 82801JI (ICH10 Family) HD Audio Controller + 1458 a102 GA-EP45-DS5 Motherboard + 3a40 82801JI (ICH10 Family) PCI Express Port 1 + 1028 028c PowerEdge R410 PCI Express Port 1 + 1028 028d PowerEdge T410 PCI Express Port 1 + 1458 5001 GA-EP45-DS5 Motherboard + 3a42 82801JI (ICH10 Family) PCI Express Port 2 + 3a44 82801JI (ICH10 Family) PCI Express Port 3 + 3a46 82801JI (ICH10 Family) PCI Express Port 4 + 1458 5001 GA-EP45-DS5 Motherboard + 3a48 82801JI (ICH10 Family) PCI Express Port 5 + 1458 5001 GA-EP45-DS5 Motherboard + 3a4a 82801JI (ICH10 Family) PCI Express Port 6 + 1458 5001 GA-EP45-DS5 Motherboard + 3a4c 82801JI (ICH10 Family) Gigabit Ethernet Controller + 3a51 82801JDO (ICH10DO) VECI Controller + 3a55 82801JD/DO (ICH10 Family) Virtual SATA Controller + 3a60 82801JD/DO (ICH10 Family) SMBus Controller + 3a62 82801JD/DO (ICH10 Family) Thermal Subsystem + 3a64 82801JD/DO (ICH10 Family) USB UHCI Controller #1 + 3a65 82801JD/DO (ICH10 Family) USB UHCI Controller #2 + 3a66 82801JD/DO (ICH10 Family) USB UHCI Controller #3 + 3a67 82801JD/DO (ICH10 Family) USB UHCI Controller #4 + 3a68 82801JD/DO (ICH10 Family) USB UHCI Controller #5 + 3a69 82801JD/DO (ICH10 Family) USB UHCI Controller #6 + 3a6a 82801JD/DO (ICH10 Family) USB2 EHCI Controller #1 + 3a6c 82801JD/DO (ICH10 Family) USB2 EHCI Controller #2 + 3a6e 82801JD/DO (ICH10 Family) HD Audio Controller + 3a70 82801JD/DO (ICH10 Family) PCI Express Port 1 + 3a72 82801JD/DO (ICH10 Family) PCI Express Port 2 + 3a74 82801JD/DO (ICH10 Family) PCI Express Port 3 + 3a76 82801JD/DO (ICH10 Family) PCI Express Port 4 + 3a78 82801JD/DO (ICH10 Family) PCI Express Port 5 + 3a7a 82801JD/DO (ICH10 Family) PCI Express Port 6 + 3a7c 82801JD/DO (ICH10 Family) Gigabit Ethernet Controller + 3b00 5 Series/3400 Series Chipset LPC Interface Controller + 3b01 Mobile 5 Series Chipset LPC Interface Controller + 3b02 5 Series Chipset LPC Interface Controller + 3b03 Mobile 5 Series Chipset LPC Interface Controller + 3b04 5 Series Chipset LPC Interface Controller + 3b05 Mobile 5 Series Chipset LPC Interface Controller + 3b06 5 Series Chipset LPC Interface Controller + 3b07 Mobile 5 Series Chipset LPC Interface Controller + 3b08 5 Series Chipset LPC Interface Controller + 3b09 Mobile 5 Series Chipset LPC Interface Controller + 3b0a 5 Series Chipset LPC Interface Controller + 3b0b Mobile 5 Series Chipset LPC Interface Controller + 3b0c 5 Series Chipset LPC Interface Controller + 3b0d 5 Series/3400 Series Chipset LPC Interface Controller + 3b0e 5 Series/3400 Series Chipset LPC Interface Controller + 3b0f 5 Series/3400 Series Chipset LPC Interface Controller + 3b10 5 Series/3400 Series Chipset LPC Interface Controller + 3b11 5 Series/3400 Series Chipset LPC Interface Controller + 3b12 3400 Series Chipset LPC Interface Controller + 3b13 5 Series/3400 Series Chipset LPC Interface Controller + 3b14 3400 Series Chipset LPC Interface Controller + 3b15 5 Series/3400 Series Chipset LPC Interface Controller + 3b16 3400 Series Chipset LPC Interface Controller + 3b17 5 Series/3400 Series Chipset LPC Interface Controller + 3b18 5 Series/3400 Series Chipset LPC Interface Controller + 3b19 5 Series/3400 Series Chipset LPC Interface Controller + 3b1a 5 Series/3400 Series Chipset LPC Interface Controller + 3b1b 5 Series/3400 Series Chipset LPC Interface Controller + 3b1c 5 Series/3400 Series Chipset LPC Interface Controller + 3b1d 5 Series/3400 Series Chipset LPC Interface Controller + 3b1e 5 Series/3400 Series Chipset LPC Interface Controller + 3b1f 5 Series/3400 Series Chipset LPC Interface Controller + 3b20 5 Series/3400 Series Chipset 4 port SATA IDE Controller + 3b21 5 Series/3400 Series Chipset 2 port SATA IDE Controller + 3b22 5 Series/3400 Series Chipset 6 port SATA AHCI Controller + 3b23 5 Series/3400 Series Chipset 4 port SATA AHCI Controller + 3b25 5 Series/3400 Series Chipset SATA RAID Controller + 3b26 5 Series/3400 Series Chipset 2 port SATA IDE Controller + 3b28 5 Series/3400 Series Chipset 4 port SATA IDE Controller + 3b29 5 Series/3400 Series Chipset 4 port SATA AHCI Controller + 3b2c 5 Series/3400 Series Chipset SATA RAID Controller + 3b2d 5 Series/3400 Series Chipset 2 port SATA IDE Controller + 3b2e 5 Series/3400 Series Chipset 4 port SATA IDE Controller + 3b2f 5 Series/3400 Series Chipset 6 port SATA AHCI Controller + 3b30 5 Series/3400 Series Chipset SMBus Controller + 3b32 5 Series/3400 Series Chipset Thermal Subsystem + 3b34 5 Series/3400 Series Chipset USB2 Enhanced Host Controller + 3b36 5 Series/3400 Series Chipset USB Universal Host Controller + 3b37 5 Series/3400 Series Chipset USB Universal Host Controller + 3b38 5 Series/3400 Series Chipset USB Universal Host Controller + 3b39 5 Series/3400 Series Chipset USB Universal Host Controller + 3b3a 5 Series/3400 Series Chipset USB Universal Host Controller + 3b3b 5 Series/3400 Series Chipset USB Universal Host Controller + 3b3c 5 Series/3400 Series Chipset USB2 Enhanced Host Controller + 3b3e 5 Series/3400 Series Chipset USB Universal Host Controller + 3b3f 5 Series/3400 Series Chipset USB Universal Host Controller + 3b40 5 Series/3400 Series Chipset USB Universal Host Controller + 3b41 5 Series/3400 Series Chipset LAN Controller + 3b42 5 Series/3400 Series Chipset PCI Express Root Port 1 + 3b44 5 Series/3400 Series Chipset PCI Express Root Port 2 + 3b46 5 Series/3400 Series Chipset PCI Express Root Port 3 + 3b48 5 Series/3400 Series Chipset PCI Express Root Port 4 + 3b4a 5 Series/3400 Series Chipset PCI Express Root Port 5 + 3b4c 5 Series/3400 Series Chipset PCI Express Root Port 6 + 3b4e 5 Series/3400 Series Chipset PCI Express Root Port 7 + 3b50 5 Series/3400 Series Chipset PCI Express Root Port 8 + 3b53 5 Series/3400 Series Chipset VECI Controller + 3b56 5 Series/3400 Series Chipset High Definition Audio + 3b64 5 Series/3400 Series Chipset HECI Controller + 3b65 5 Series/3400 Series Chipset HECI Controller + 3b66 5 Series/3400 Series Chipset PT IDER Controller + 3b67 5 Series/3400 Series Chipset KT Controller + 4000 5400 Chipset Memory Controller Hub + 4001 5400 Chipset Memory Controller Hub + 4003 5400 Chipset Memory Controller Hub + 4021 5400 Chipset PCI Express Port 1 + 4022 5400 Chipset PCI Express Port 2 + 4023 5400 Chipset PCI Express Port 3 + 4024 5400 Chipset PCI Express Port 4 + 4025 5400 Chipset PCI Express Port 5 + 4026 5400 Chipset PCI Express Port 6 + 4027 5400 Chipset PCI Express Port 7 + 4028 5400 Chipset PCI Express Port 8 + 4029 5400 Chipset PCI Express Port 9 + 402d 5400 Chipset IBIST Registers + 402e 5400 Chipset IBIST Registers + 402f 5400 Chipset QuickData Technology Device + 4030 5400 Chipset FSB Registers + 4031 5400 Chipset CE/SF Registers + 4032 5400 Chipset IOxAPIC + 4035 5400 Chipset FBD Registers + 4036 5400 Chipset FBD Registers + 4220 PRO/Wireless 2200BG [Calexico2] Network Connection + 103c 0934 Compaq nw8240/nx8220 + 103c 12f6 Compaq nw8240/nx8220 + 8086 2712 IBM ThinkPad R50e + 8086 2721 Dell B130 laptop integrated WLAN + 8086 2722 Dell Latitude D600 + 8086 2731 Samsung P35 integrated WLAN + 4222 PRO/Wireless 3945ABG [Golan] Network Connection + 103c 135c Compaq 6710b or nx9420 Notebook + 8086 1000 PRO/Wireless 3945ABG Network Connection + 8086 1001 PRO/Wireless 3945ABG Network Connection + 8086 1005 PRO/Wireless 3945BG Network Connection + 8086 1034 PRO/Wireless 3945BG Network Connection + 8086 1044 PRO/Wireless 3945BG Network Connection + 8086 1c00 PRO/Wireless 3945ABG Network Connection + 4223 PRO/Wireless 2915ABG [Calexico2] Network Connection + 1000 8086 mPCI 3B Americas/Europe ZZA + 1001 8086 mPCI 3B Europe ZZE + 1002 8086 mPCI 3B Japan ZZJ + 1003 8086 mPCI 3B High-Band ZZH + 1351 103c Compaq NC6220 + 4224 PRO/Wireless 2915ABG [Calexico2] Network Connection + 4227 PRO/Wireless 3945ABG [Golan] Network Connection + 8086 1011 ThinkPad R60e/X60s + 8086 1014 PRO/Wireless 3945BG Network Connection + 4229 PRO/Wireless 4965 AG or AGN [Kedron] Network Connection + 422b WiFi Link 6000 Series + 4230 PRO/Wireless 4965 AG or AGN [Kedron] Network Connection + 8086 1110 Lenovo ThinkPad T51 + 8086 1111 Lenovo ThinkPad T61 + 4232 Wireless WiFi Link 5100 + 8086 1205 PRO/Wireless 5100BG Network Connection + 8086 1206 PRO/Wireless 5100ABG Network Connection + 8086 1216 PRO/Wireless 5100ABG Network Connection + 8086 1305 PRO/Wireless 5100BG Network Connection + 8086 1306 PRO/Wireless 5100ABG Network Connection + 8086 1321 Wireless WiFi Link 5100 + 8086 1326 PRO/Wireless 5100ABG Network Connection + 4235 PRO/Wireless 5300 AGN [Shiloh] Network Connection + 4236 Wireless WiFi Link 5300 + 4237 PRO/Wireless 5100 AGN [Shiloh] Network Connection + 4238 WiFi Link 6000 Series + 423a PRO/Wireless 5350 AGN [Echo Peak] Network Connection + 423b PRO/Wireless 5350 AGN [Echo Peak] Network Connection + 423c WiMAX/WiFi Link 5050 Series + 423d WiMAX/WiFi Link 5050 Series + 444e Turbo Memory Controller + 5001 LE80578 + 5002 LE80578 Graphics Processor Unit + 5009 LE80578 Video Display Controller + 500d LE80578 Expansion Bus + 500e LE80578 UART Controller + 500f LE80578 General Purpose IO + 5010 LE80578 I2C Controller + 5012 LE80578 Serial Peripheral Interface Bus + 5020 EP80579 Memory Controller Hub + 5021 EP80579 DRAM Error Reporting Registers + 5023 EP80579 EDMA Controller + 5024 EP80579 PCI Express Port PEA0 + 5025 EP80579 PCI Express Port PEA1 + 5028 EP80579 S-ATA IDE + 5029 EP80579 S-ATA AHCI + 502a EP80579 S-ATA Reserved + 502b EP80579 S-ATA Reserved + 502c EP80579 Integrated Processor ASU + 502d EP80579 Integrated Processor with QuickAssist ASU + 502e EP80579 Reserved + 502f EP80579 Reserved + 5030 EP80579 Reserved + 5031 EP80579 LPC Bus + 5032 EP80579 SMBus Controller + 5033 EP80579 USB 1.1 Controller + 5035 EP80579 USB 2.0 Controller + 5037 EP80579 PCI-PCI Bridge (transparent mode) + 5039 EP80579 Controller Area Network (CAN) interface #1 + 503a EP80579 Controller Area Network (CAN) interface #2 + 503b EP80579 Synchronous Serial Port (SPP) + 503c EP80579 IEEE 1588 Hardware Assist + 503d EP80579 Local Expansion Bus + 503e EP80579 Global Control Unit (GCU) + 503f EP80579 Reserved + 5040 EP80579 Integrated Processor Gigabit Ethernet MAC + 5041 EP80579 Integrated Processor with QuickAssist Gigabit Ethernet MAC + 5042 EP80579 Reserved + 5043 EP80579 Reserved + 5044 EP80579 Integrated Processor Gigabit Ethernet MAC + 5045 EP80579 Integrated Processor with QuickAssist Gigabit Ethernet MAC + 5046 EP80579 Reserved + 5047 EP80579 Reserved + 5048 EP80579 Integrated Processor Gigabit Ethernet MAC + 5049 EP80579 Integrated Processor with QuickAssist Gigabit Ethernet MAC + 504a EP80579 Reserved + 504b EP80579 Reserved + 504c EP80579 Integrated Processor with QuickAssist TDM + 5200 EtherExpress PRO/100 Intelligent Server + 5201 EtherExpress PRO/100 Intelligent Server + 8086 0001 EtherExpress PRO/100 Server Ethernet Adapter + 530d 80310 (IOP) IO Processor + 65c0 5100 Chipset Memory Controller Hub + 65e2 5100 Chipset PCI Express x4 Port 2 + 65e3 5100 Chipset PCI Express x4 Port 3 + 65e4 5100 Chipset PCI Express x4 Port 4 + 65e5 5100 Chipset PCI Express x4 Port 5 + 65e6 5100 Chipset PCI Express x4 Port 6 + 65e7 5100 Chipset PCI Express x4 Port 7 + 65f0 5100 Chipset FSB Registers + 1028 020f PowerEdge R300 + 1028 0210 PowerEdge T300 + 65f1 5100 Chipset Reserved Registers + 1028 0210 PowerEdge T300 + 65f3 5100 Chipset Reserved Registers + 65f5 5100 Chipset DDR Channel 0 Registers + 65f6 5100 Chipset DDR Channel 1 Registers + 65f7 5100 Chipset PCI Express x8 Port 2-3 + 65f8 5100 Chipset PCI Express x8 Port 4-5 + 65f9 5100 Chipset PCI Express x8 Port 6-7 + 65fa 5100 Chipset PCI Express x16 Port 4-7 + 65ff 5100 Chipset DMA Engine + 7000 82371SB PIIX3 ISA [Natoma/Triton II] + 1af4 1100 Qemu virtual machine + 7010 82371SB PIIX3 IDE [Natoma/Triton II] + 1af4 1100 Qemu virtual machine + 7020 82371SB PIIX3 USB [Natoma/Triton II] + 1af4 1100 Qemu virtual machine + 7030 430VX - 82437VX TVX [Triton VX] + 7050 Intercast Video Capture Card + 7051 PB 642365-003 (Business Video Conferencing Card) + 7100 430TX - 82439TX MTXC + 7110 82371AB/EB/MB PIIX4 ISA + 15ad 1976 Virtual Machine Chipset + 7111 82371AB/EB/MB PIIX4 IDE + 15ad 1976 Virtual Machine Chipset + 7112 82371AB/EB/MB PIIX4 USB + 15ad 1976 Virtual Machine Chipset + 7113 82371AB/EB/MB PIIX4 ACPI + 15ad 1976 Virtual Machine Chipset + 1af4 1100 Qemu virtual machine + 7120 82810 GMCH (Graphics Memory Controller Hub) + 4c53 1040 CL7 mainboard + 4c53 1060 PC7 mainboard + 7121 82810 (CGC) Chipset Graphics Controller + 4c53 1040 CL7 mainboard + 4c53 1060 PC7 mainboard + 8086 4341 Cayman (CA810) Mainboard + 7122 82810 DC-100 (GMCH) Graphics Memory Controller Hub + 7123 82810 DC-100 (CGC) Chipset Graphics Controller + 7124 82810E DC-133 (GMCH) Graphics Memory Controller Hub + 1028 00b4 OptiPlex GX110 + 7125 82810E DC-133 (CGC) Chipset Graphics Controller + 1028 00b4 OptiPlex GX110 + 7126 82810 DC-133 System and Graphics Controller + 7128 82810-M DC-100 System and Graphics Controller + 712a 82810-M DC-133 System and Graphics Controller + 7180 440LX/EX - 82443LX/EX Host bridge + 7181 440LX/EX - 82443LX/EX AGP bridge + 7190 440BX/ZX/DX - 82443BX/ZX/DX Host bridge + 0e11 0500 Armada 1750 Laptop System Chipset + 0e11 b110 Armada M700/E500 + 1028 008e PowerEdge 1300 mainboard + 1043 803b CUBX-L/E Mainboard + 1179 0001 Toshiba Tecra 8100 Laptop System Chipset + 15ad 1976 Virtual Machine Chipset + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard + 7191 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge + 1028 008e PowerEdge 1300 mainboard + 7192 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled) + 0e11 0460 Armada 1700 Laptop System Chipset + 1179 0001 Satellite 4010 + 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard + 8086 7190 Dell PowerEdge 350 + 7194 82440MX Host Bridge + 1033 0000 Versa Note Vxi + 4c53 10a0 CA3/CR3 mainboard + 7195 82440MX AC'97 Audio Controller + 1033 80cc Versa Note VXi + 10cf 1099 QSound_SigmaTel Stac97 PCI Audio + 11d4 0040 SoundMAX Integrated Digital Audio + 11d4 0048 SoundMAX Integrated Digital Audio + 7196 82440MX AC'97 Modem Controller + 7198 82440MX ISA Bridge + 7199 82440MX EIDE Controller + 719a 82440MX USB Universal Host Controller + 719b 82440MX Power Management Controller + 71a0 440GX - 82443GX Host bridge + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard + 71a1 440GX - 82443GX AGP bridge + 71a2 440GX - 82443GX Host bridge (AGP disabled) + 4c53 1000 CC7/CR7/CP7/VC7/VP7/VR7 mainboard + 7600 82372FB PIIX5 ISA + 7601 82372FB PIIX5 IDE + 7602 82372FB PIIX5 USB + 7603 82372FB PIIX5 SMBus + 7800 82740 (i740) AGP Graphics Accelerator + 003d 0008 Starfighter AGP + 003d 000b Starfighter AGP + 1092 0100 Stealth II G460 + 10b4 201a Lightspeed 740 + 10b4 202f Lightspeed 740 + 8086 0000 Terminator 2x/i + 8086 0100 Intel740 Graphics Accelerator + 8002 Trusted Execution Technology Registers + 8003 Trusted Execution Technology Registers + 8100 System Controller Hub (SCH Poulsbo) + 8108 System Controller Hub (SCH Poulsbo) Graphics Controller + 8110 System Controller Hub (SCH Poulsbo) PCI Express Port 1 + 8112 System Controller Hub (SCH Poulsbo) PCI Express Port 2 + 8114 System Controller Hub (SCH Poulsbo) USB UHCI #1 + 8115 System Controller Hub (SCH Poulsbo) USB UHCI #2 + 8116 System Controller Hub (SCH Poulsbo) USB UHCI #3 + 8117 System Controller Hub (SCH Poulsbo) USB EHCI #1 + 8118 System Controller Hub (SCH Poulsbo) USB Client Controller + 8119 System Controller Hub (SCH Poulsbo) LPC Bridge + 811a System Controller Hub (SCH Poulsbo) IDE Controller + 811b System Controller Hub (SCH Poulsbo) HD Audio Controller + 811c System Controller Hub (SCH Poulsbo) SDIO Controller #1 + 811d System Controller Hub (SCH Poulsbo) SDIO Controller #2 + 811e System Controller Hub (SCH Poulsbo) SDIO Controller #3 + 84c4 450KX/GX [Orion] - 82454KX/GX PCI bridge + 84c5 450KX/GX [Orion] - 82453KX/GX Memory controller + 84ca 450NX - 82451NX Memory & I/O Controller + 84cb 450NX - 82454NX/84460GX PCI Expander Bridge + 84e0 460GX - 84460GX System Address Controller (SAC) + 84e1 460GX - 84460GX System Data Controller (SDC) + 84e2 460GX - 84460GX AGP Bridge (GXB function 2) + 84e3 460GX - 84460GX Memory Address Controller (MAC) + 84e4 460GX - 84460GX Memory Data Controller (MDC) + 84e6 460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB) + 84ea 460GX - 84460GX AGP Bridge (GXB function 1) + 8500 IXP4XX Network Processor (IXP420/421/422/425/IXC1100) + 1993 0ded mGuard-PCI AV#2 + 1993 0dee mGuard-PCI AV#1 + 1993 0def mGuard-PCI AV#0 + 9000 IXP2000 Family Network Processor + 9001 IXP2400 Network Processor + 9002 IXP2300 Network Processor + 9004 IXP2800 Network Processor + 9621 Integrated RAID + 9622 Integrated RAID + 9641 Integrated RAID + 96a1 Integrated RAID + a000 Pineview DMI Bridge + a001 Pineview Integrated Graphics Controller + a002 Pineview Integrated Graphics Controller + a003 Pineview CHAPS counter + a010 Pineview DMI Bridge + a011 Pineview Integrated Graphics Controller + a012 Pineview Integrated Graphics Controller + a013 Pineview CHAPS counter + a620 6400/6402 Advanced Memory Buffer (AMB) + b152 21152 PCI-to-PCI Bridge + 8086 b152 21152 PCI-to-PCI Bridge +# observed, and documented in Intel revision note; new mask of 1011:0026 + b154 21154 PCI-to-PCI Bridge + b555 21555 Non transparent PCI-to-PCI Bridge + 12c7 5005 SS7HD PCI Adaptor Card + 12c7 5006 SS7HDC cPCI Adaptor Card + 12d9 000a PCI VoIP Gateway + 4c53 1050 CT7 mainboard + 4c53 1051 CE7 mainboard + e4bf 1000 CC8-1-BLUES + d130 Core Processor DMI + d131 Core Processor DMI + d132 Core Processor DMI + d133 Core Processor DMI + d134 Core Processor DMI + d135 Core Processor DMI + d136 Core Processor DMI + d137 Core Processor DMI + d138 Core Processor PCI Express Root Port 1 + d139 Core Processor PCI Express Root Port 2 + d13a Core Processor PCI Express Root Port 3 + d13b Core Processor PCI Express Root Port 4 + d150 Core Processor QPI Link + d151 Core Processor QPI Routing and Protocol Registers + d155 Core Processor System Management Registers + d156 Core Processor Semaphore and Scratchpad Registers + d157 Core Processor System Control and Status Registers + d158 Core Processor Miscellaneous Registers +80ee InnoTek Systemberatung GmbH + beef VirtualBox Graphics Adapter + cafe VirtualBox Guest Service +8322 Sodick America Corp. +8384 SigmaTel + 7618 High Definition Audio Codec + 7634 9250 HD Audio Codec + 7664 High Definition Audio Codec + 7670 9770 High Definition Audio + 7672 9772 High Definition Audio + 7682 IDT High Definition Audio Codec + 7690 9200 HD Audio Codec +8401 TRENDware International Inc. +8686 ScaleMP + 1010 vSMPowered system controller [vSMP CTL] +8800 Trigem Computer Inc. + 2008 Video assistent component +8866 T-Square Design Inc. +8888 Silicon Magic +8912 TRX +# 8c4a is not Winbond but there is a board misprogrammed +8c4a Winbond + 1980 W89C940 misprogrammed [ne2k] +8e0e Computone Corporation +8e2e KTI + 3000 ET32P2 +9004 Adaptec + 0078 AHA-2940U_CN + 1078 AIC-7810 + 1160 AIC-1160 [Family Fibre Channel Adapter] + 2178 AIC-7821 + 3860 AHA-2930CU + 3b78 AHA-4844W/4844UW + 5075 AIC-755x + 5078 AIC-7850 + 9004 7850 AHA-2904/Integrated AIC-7850 + 5175 AIC-755x + 5178 AIC-7851 + 5275 AIC-755x + 5278 AIC-7852 + 5375 AIC-755x + 5378 AIC-7850 + 5475 AIC-755x + 5478 AIC-7850 + 5575 AVA-2930 + 5578 AIC-7855 + 5647 ANA-7711 TCP Offload Engine + 9004 7710 ANA-7711F TCP Offload Engine - Optical + 9004 7711 ANA-7711LP TCP Offload Engine - Copper + 5675 AIC-755x + 5678 AIC-7856 + 5775 AIC-755x + 5778 AIC-7850 + 5800 AIC-5800 + 5900 ANA-5910/5930/5940 ATM155 & 25 LAN Adapter + 5905 ANA-5910A/5930A/5940A ATM Adapter + 6038 AIC-3860 + 6075 AIC-1480 / APA-1480 + 9004 7560 AIC-1480 / APA-1480 Cardbus + 6078 AIC-7860 + 6178 AIC-7861 + 9004 7861 AHA-2940AU Single + 6278 AIC-7860 + 6378 AIC-7860 + 6478 AIC-786x + 6578 AIC-786x + 6678 AIC-786x + 6778 AIC-786x + 6915 ANA620xx/ANA69011A + 9004 0008 ANA69011A/TX 10/100 + 9004 0009 ANA69011A/TX 10/100 + 9004 0010 ANA62022 2-port 10/100 + 9004 0018 ANA62044 4-port 10/100 + 9004 0019 ANA62044 4-port 10/100 + 9004 0020 ANA62022 2-port 10/100 + 9004 0028 ANA69011A/TX 10/100 + 9004 8008 ANA69011A/TX 64 bit 10/100 + 9004 8009 ANA69011A/TX 64 bit 10/100 + 9004 8010 ANA62022 2-port 64 bit 10/100 + 9004 8018 ANA62044 4-port 64 bit 10/100 + 9004 8019 ANA62044 4-port 64 bit 10/100 + 9004 8020 ANA62022 2-port 64 bit 10/100 + 9004 8028 ANA69011A/TX 64 bit 10/100 + 7078 AHA-294x / AIC-7870 + 7178 AHA-2940/2940W / AIC-7871 + 7278 AHA-3940/3940W / AIC-7872 + 7378 AHA-3985 / AIC-7873 + 7478 AHA-2944/2944W / AIC-7874 + 7578 AHA-3944/3944W / AIC-7875 + 7678 AHA-4944W/UW / AIC-7876 + 7710 ANA-7711F Network Accelerator Card (NAC) - Optical + 7711 ANA-7711C Network Accelerator Card (NAC) - Copper + 7778 AIC-787x + 7810 AIC-7810 + 7815 AIC-7815 RAID+Memory Controller IC + 9004 7815 ARO-1130U2 RAID Controller + 9004 7840 AIC-7815 RAID+Memory Controller IC + 7850 AIC-7850 + 7855 AHA-2930 + 7860 AIC-7860 + 7870 AIC-7870 + 7871 AHA-2940 + 7872 AHA-3940 + 7873 AHA-3980 + 7874 AHA-2944 + 7880 AIC-7880P + 7890 AIC-7890 + 7891 AIC-789x + 7892 AIC-789x + 7893 AIC-789x + 7894 AIC-789x + 7895 AHA-2940U/UW / AHA-39xx / AIC-7895 + 9004 7890 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B + 9004 7891 AHA-2940U/2940UW Dual + 9004 7892 AHA-3940AU/AUW/AUWD/UWD + 9004 7894 AHA-3944AUWD + 9004 7895 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B + 9004 7896 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B + 9004 7897 AHA-2940U/2940UW Dual AHA-394xAU/AUW/AUWD AIC-7895B + 7896 AIC-789x + 7897 AIC-789x + 8078 AIC-7880U + 9004 7880 AIC-7880P Ultra/Ultra Wide SCSI Chipset + 8178 AHA-2940U/UW/D / AIC-7881U + 9004 7881 AHA-2940UW SCSI Host Adapter + 8278 AHA-3940U/UW/UWD / AIC-7882U + 8378 AHA-3940U/UW / AIC-7883U + 8478 AHA-2944UW / AIC-7884U + 8578 AHA-3944U/UWD / AIC-7885 + 8678 AHA-4944UW / AIC-7886 + 8778 AHA-2940UW Pro / AIC-788x + 9004 7887 2940UW Pro Ultra-Wide SCSI Controller + 8878 AHA-2930UW / AIC-7888 + 9004 7888 AHA-2930UW SCSI Controller + 8b78 ABA-1030 + ec78 AHA-4944W/UW +9005 Adaptec + 0010 AHA-2940U2/U2W + 9005 2180 AHA-2940U2 SCSI Controller + 9005 8100 AHA-2940U2B SCSI Controller + 9005 a100 AHA-2940U2B SCSI Controller + 9005 a180 AHA-2940U2W SCSI Controller + 9005 e100 AHA-2950U2B SCSI Controller + 0011 AHA-2930U2 + 0013 78902 + 9005 0003 AAA-131U2 Array1000 1 Channel RAID Controller + 9005 000f AIC7890_ARO + 001f AHA-2940U2/U2W / 7890/7891 + 9005 000f 2940U2W SCSI Controller + 9005 a180 2940U2W SCSI Controller + 0020 AIC-7890 + 002f AIC-7890 + 0030 AIC-7890 + 003f AIC-7890 + 0050 AHA-3940U2x/395U2x + 9005 f500 AHA-3950U2B + 9005 ffff AHA-3950U2B + 0051 AHA-3950U2D + 9005 b500 AHA-3950U2D + 0053 AIC-7896 SCSI Controller + 9005 ffff AIC-7896 SCSI Controller mainboard implementation + 005f AIC-7896U2/7897U2 + 0080 AIC-7892A U160/m + 0e11 e2a0 Compaq 64-Bit/66MHz Wide Ultra3 SCSI Adapter + 9005 6220 AHA-29160C + 9005 62a0 29160N Ultra160 SCSI Controller + 9005 e220 29160LP Low Profile Ultra160 SCSI Controller + 9005 e2a0 29160 Ultra160 SCSI Controller + 0081 AIC-7892B U160/m + 9005 62a1 19160 Ultra160 SCSI Controller + 0083 AIC-7892D U160/m + 008f AIC-7892P U160/m + 1179 0001 Magnia Z310 + 15d9 9005 Onboard SCSI Host Adapter + 0092 AVC-2010 [VideoH!] + 0093 AVC-2410 [VideoH!] + 00c0 AHA-3960D / AIC-7899A U160/m + 0e11 f620 Compaq 64-Bit/66MHz Dual Channel Wide Ultra3 SCSI Adapter + 9005 f620 AHA-3960D U160/m + 00c1 AIC-7899B U160/m + 00c3 AIC-7899D U160/m + 00c5 RAID subsystem HBA + 1028 00c5 PowerEdge 2400,2500,2550,4400 + 00cf AIC-7899P U160/m + 1028 00ce PowerEdge 1400 + 1028 00d1 PowerEdge 2550 + 1028 00d9 PowerEdge 2500 + 10f1 2462 Thunder K7 S2462 + 15d9 9005 Onboard SCSI Host Adapter + 8086 3411 SDS2 Mainboard + 0241 Serial ATA II RAID 1420SA + 0242 Serial ATA II RAID 1220SA + 0243 Serial ATA II RAID 1430SA + 0244 eSATA II RAID 1225SA + 0250 ServeRAID Controller + 1014 0279 ServeRAID-xx + 1014 028c ServeRAID-xx + 0279 ServeRAID 6M + 0283 AAC-RAID + 9005 0283 Catapult + 0284 AAC-RAID + 9005 0284 Tomcat + 0285 AAC-RAID + 0e11 0295 SATA 6Ch (Bearcat) + 1014 02f2 ServeRAID 8i + 1028 0287 PowerEdge Expandable RAID Controller 320/DC + 1028 0291 CERC SATA RAID 2 PCI SATA 6ch (DellCorsair) + 103c 3227 AAR-2610SA + 108e 0286 STK RAID INT + 108e 0287 STK RAID EXT + 108e 7aac STK RAID REM + 108e 7aae STK RAID EX + 15d9 02b5 SMC AOC-USAS-S4i + 15d9 02b6 SMC AOC-USAS-S8i + 15d9 02c9 SMC AOC-USAS-S4iR + 15d9 02ca SMC AOC-USAS-S8iR + 15d9 02d2 SMC AOC-USAS-S8i-LP + 15d9 02d3 SMC AOC-USAS-S8iR-LP + 17aa 0286 Legend S220 (Legend Crusader) + 17aa 0287 Legend S230 (Legend Vulcan) + 9005 0285 2200S (Vulcan) + 9005 0286 2120S (Crusader) + 9005 0287 2200S (Vulcan-2m) + 9005 0288 3230S (Harrier) + 9005 0289 3240S (Tornado) +# Some early versions reported 2020S + 9005 028a ASR-2020ZCR +# Some early versions reported 2025S + 9005 028b ASR-2025ZCR (Terminator) + 9005 028e ASR-2020SA (Skyhawk) + 9005 028f ASR-2025SA + 9005 0290 AAR-2410SA PCI SATA 4ch (Jaguar II) + 9005 0292 AAR-2810SA PCI SATA 8ch (Corsair-8) + 9005 0293 AAR-21610SA PCI SATA 16ch (Corsair-16) + 9005 0294 ESD SO-DIMM PCI-X SATA ZCR (Prowler) + 9005 0296 ASR-2240S + 9005 0297 ASR-4005SAS + 9005 0298 ASR-4000 + 9005 0299 ASR-4800SAS + 9005 029a 4805SAS + 9005 02a4 ICP ICP9085LI + 9005 02a5 ICP ICP5085BR + 9005 02b5 ASR5800 + 9005 02b6 ASR5805 + 9005 02b7 ASR5808 + 9005 02b8 ICP5445SL + 9005 02b9 ICP5085SL + 9005 02ba ICP5805SL + 9005 02bb 3405 + 9005 02bc 3805 + 9005 02bd 31205 + 9005 02be 31605 + 9005 02bf ICP ICP5045BL + 9005 02c0 ICP ICP5085BL + 9005 02c1 ICP ICP5125BR + 9005 02c2 ICP ICP5165BR + 9005 02c3 51205 + 9005 02c4 51605 + 9005 02c5 ICP ICP5125SL + 9005 02c6 ICP ICP5165SL + 9005 02c7 3085 + 9005 02c8 ICP5805BL + 9005 02ce 51245 + 9005 02cf 51645 + 9005 02d0 52445 + 9005 02d1 5405 + 9005 02d4 ASR-2045 + 9005 02d5 ASR-2405 + 9005 02d6 ASR-2445 + 9005 02d7 ASR-2805 + 9005 02d8 5405G + 9005 02d9 5445G + 9005 02da 5805G + 9005 02db 5085G + 9005 02dc 51245G + 9005 02dd 51645G + 9005 02de 52445G + 9005 02df ASR-2045G + 9005 02e0 ASR-2405G + 9005 02e1 ASR-2445G + 9005 02e2 ASR-2805G + 0286 AAC-RAID (Rocket) + 1014 034d 8s + 1014 9540 ServeRAID 8k/8k-l4 + 1014 9580 ServeRAID 8k/8k-l8 + 9005 028c ASR-2230S + ASR-2230SLP PCI-X (Lancer) + 9005 028d ASR-2130S + 9005 029b ASR-2820SA + 9005 029c ASR-2620SA + 9005 029d ASR-2420SA + 9005 029e ICP ICP9024R0 + 9005 029f ICP ICP9014R0 + 9005 02a0 ICP ICP9047MA + 9005 02a1 ICP ICP9087MA + 9005 02a2 3800 + 9005 02a3 ICP ICP5445AU + 9005 02a4 ICP ICP9085LI + 9005 02a5 ICP ICP5085BR + 9005 02a6 ICP9067MA + 9005 02a7 3805 + 9005 02a8 3400 + 9005 02a9 ICP ICP5085AU + 9005 02aa ICP ICP5045AU + 9005 02ac 1800 + 9005 02b3 2400 + 9005 02b4 ICP ICP5045AL + 9005 0800 Callisto + 0410 AIC-9410W SAS (Razor HBA RAID) + 9005 0410 ASC-48300(Spirit RAID) + 9005 0411 ASC-58300 (Oakmont RAID) + 0412 AIC-9410W SAS (Razor HBA non-RAID) + 9005 0412 ASC-48300 (Spirit non-RAID) + 9005 0413 ASC-58300 (Oakmont non-RAID) + 0415 ASC-58300 SAS (Razor-External HBA RAID) + 0416 ASC-58300 SAS (Razor-External HBA non-RAID) + 041e AIC-9410W SAS (Razor ASIC non-RAID) + 041f AIC-9410W SAS (Razor ASIC RAID) + 9005 041f AIC-9410W SAS (Razor ASIC RAID) + 042f VSC7250/7251 SAS (Aurora ASIC non-RAID) + 0430 AIC-9405W SAS (Razor-Lite HBA RAID) + 9005 0430 ASC-44300 (Spirit-Lite RAID) + 0432 AIC-9405W SAS (Razor-Lite HBA non-RAID) + 9005 0432 ASC-44300 (Spirit-Lite non-RAID) + 043e AIC-9405W SAS (Razor-Lite ASIC non-RAID) + 043f AIC-9405W SAS (Razor-Lite ASIC RAID) + 0450 ASC-1405 Unified Serial HBA + 0500 Obsidian chipset SCSI controller + 1014 02c1 PCI-X DDR 3Gb SAS Adapter (572A/572C) + 1014 02c2 PCI-X DDR 3Gb SAS RAID Adapter (572B/572D) + 0503 Scamp chipset SCSI controller + 1014 02bf Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571E) + 1014 02c3 PCI-X DDR 3Gb SAS RAID Adapter (572F) + 1014 02d5 Quad Channel PCI-X DDR U320 SCSI RAID Adapter (571F) + 0910 AUA-3100B + 091e AUA-3100B + 8000 ASC-29320A U320 + 800f AIC-7901 U320 + 8010 ASC-39320 U320 + 8011 ASC-39320D + 0e11 00ac ASC-39320D U320 + 9005 0041 ASC-39320D U320 + 8012 ASC-29320 U320 + 8013 ASC-29320B U320 + 8014 ASC-29320LP U320 + 8015 ASC-39320B U320 + 8016 ASC-39320A U320 + 8017 ASC-29320ALP U320 + 9005 0044 ASC-29320ALP PCIx U320 + 9005 0045 ASC-29320LPE PCIe U320 + 801c ASC-39320D U320 + 801d AIC-7902B U320 + 1014 02cc ServeRAID 7e + 801e AIC-7901A U320 + 801f AIC-7902 U320 + 1734 1011 PRIMERGY RX300 onboard SCSI + 8080 ASC-29320A U320 w/HostRAID + 808f AIC-7901 U320 w/HostRAID + 8090 ASC-39320 U320 w/HostRAID + 8091 ASC-39320D U320 w/HostRAID + 8092 ASC-29320 U320 w/HostRAID + 8093 ASC-29320B U320 w/HostRAID + 8094 ASC-29320LP U320 w/HostRAID + 8095 ASC-39320(B) U320 w/HostRAID + 8096 ASC-39320A U320 w/HostRAID + 8097 ASC-29320ALP U320 w/HostRAID + 809c ASC-39320D(B) U320 w/HostRAID + 809d AIC-7902(B) U320 w/HostRAID + 1014 02cc ServeRAID 7e + 809e AIC-7901A U320 w/HostRAID + 809f AIC-7902 U320 w/HostRAID +907f Atronics + 2015 IDE-2015PL +919a Gigapixel Corp +9412 Holtek + 6565 6565 +9699 Omni Media Technology Inc + 6565 6565 +9710 NetMos Technology + 9250 PCI-to-PCI bridge [MCS9250] + 9805 PCI 1 port parallel adapter + 9815 PCI 9815 Multi-I/O Controller + 1000 0020 2P0S (2 port parallel adaptor) + 9820 PCI 9820 Multi-I/O Controller + 9835 PCI 9835 Multi-I/O Controller + 1000 0002 2S (16C550 UART) + 1000 0012 1P2S + 9845 PCI 9845 Multi-I/O Controller +# Serial ports at BAR0-3 + 1000 0004 0P4S (4 port 16550A serial card) + 1000 0006 0P6S (6 port 16550a serial card) +# Serial ports at BAR0-3, Parallel port at BAR4 + 1000 0014 1P4S (1 Parallel / 4 16550A Serial Port Adapter) + 9855 PCI 9855 Multi-I/O Controller +# Parallel port at BAR0. Serial ports at BAR2-5 + 1000 0014 1P4S +# Parallel ports at BAR0,BAR2. Serial ports at BAR4-5 + 1000 0022 2P2S (2 Parallel / 2 16550A Serial Port Adapter) + 9865 PCI 9865 Multi-I/O Controller + 9901 PCIe 9901 Multi-I/O Controller +9902 Stargen Inc. + 0001 SG2010 PCI over Starfabric Bridge + 0002 SG2010 PCI to Starfabric Gateway + 0003 SG1010 Starfabric Switch and PCI Bridge +a0a0 AOPEN Inc. +a0f1 UNISYS Corporation +a200 NEC Corporation +a259 Hewlett Packard +a25b Hewlett Packard GmbH PL24-MKT +a304 Sony +a727 3Com Corporation + 0013 3CRPAG175 Wireless PC Card + 6803 3CRDAG675B Wireless 11a/b/g Adapter +aa42 Scitex Digital Video +aa55 Ncomputing X300 PCI-Engine +aaaa Adnaco Technology Inc. + 0001 H1 PCIe over fiber optic host controller + 0002 R1BP1 PCIe over fiber optic expansion chassis +abcd Vadatech Inc. +ac1e Digital Receiver Technology Inc +ac3d Actuality Systems +ad00 Alta Data Technologies LLC +aecb Adrienne Electronics Corporation + 6250 VITC/LTC Timecode Reader card [PCI-VLTC/RDR] +affe Sirrix AG security technologies + 02e1 PCI2E1 2-port ISDN E1 interface + dead Sirrix.PCI4S0 4-port ISDN S0 interface +# Not registered officially +b10b Uakron PCI Project +b1b3 Shiva Europe Limited +# Pinnacle should be 11bd, but they got it wrong several times --mj +bd11 Pinnacle Systems, Inc. (Wrong ID) +bdbd Blackmagic Design +c001 TSI Telsys +c0a9 Micron/Crucial Technology +c0de Motorola +c0fe Motion Engineering, Inc. +ca50 Varian Australia Pty Ltd +cace CACE Technologies, Inc. + 0001 TurboCap Port A + 0002 TurboCap Port B + 0023 AirPcap N +cafe Chrysalis-ITS + 0003 Luna K3 Hardware Security Module +cccc Catapult Communications +ccec Curtiss-Wright Controls Embedded Computing +cddd Tyzx, Inc. + 0101 DeepSea 1 High Speed Stereo Vision Frame Grabber + 0200 DeepSea 2 High Speed Stereo Vision Frame Grabber +ceba KEBA AG +d161 Digium, Inc. + 0120 Wildcard TE120P single-span T1/E1/J1 card + 0205 Wildcard TE205P/TE207P dual-span T1/E1/J1 card 5.0V + 0210 Wildcard TE210P/TE212P dual-span T1/E1/J1 card 3.3V + 0220 Wildcard TE220 dual-span T1/E1/J1 card 3.3V (PCI-Express) + 0405 Wildcard TE405P/TE407P quad-span T1/E1/J1 card 5.0V + 0410 Wildcard TE410P/TE412P quad-span T1/E1/J1 card 3.3V + 0420 Wildcard TE420P quad-span T1/E1/J1 card 3.3V (PCI-Express) + 0800 Wildcard TDM800P 8-port analog card + 2400 Wildcard TDM2400P 24-port analog card + 3400 Wildcard TC400P transcoder base card + 8000 Wildcard TE121 single-span T1/E1/J1 card (PCI-Express) + 8001 Wildcard TE122 single-span T1/E1/J1 card + 8002 Wildcard AEX800 8-port analog card (PCI-Express) + 8003 Wildcard AEX2400 24-port analog card (PCI-Express) + 8005 Wildcard TDM410 4-port analog card + 8006 Wildcard AEX410 4-port analog card (PCI-Express) + b410 Wildcard B410 quad-BRI card +d4d4 Dy4 Systems Inc + 0601 PCI Mezzanine Card +d531 I+ME ACTIA GmbH +d84d Exsys +db10 Diablo Technologies +dead Indigita Corporation +deaf Middle Digital Inc. + 9050 PC Weasel Virtual VGA + 9051 PC Weasel Serial Port + 9052 PC Weasel Watchdog Timer +deda SoftHard Technology Ltd. +e000 Winbond + e000 W89C940 +e159 Tiger Jet Network Inc. + 0001 Tiger3XX Modem/ISDN interface + 0059 0001 128k ISDN-S/T Adapter + 0059 0003 128k ISDN-U Adapter + 00a7 0001 TELES.S0/PCI 2.x ISDN Adapter + 8086 0003 Digium X100P/X101P analogue PSTN FXO interface + 0002 Tiger100APC ISDN chipset +e4bf EKF Elektronik GmbH +e55e Essence Technology, Inc. +ea01 Eagle Technology + 000a PCI-773 Temperature Card + 0032 PCI-730 & PC104P-30 Card + 003e PCI-762 Opto-Isolator Card + 0041 PCI-763 Reed Relay Card + 0043 PCI-769 Opto-Isolator Reed Relay Combo Card + 0046 PCI-766 Analog Output Card + 0052 PCI-703 Analog I/O Card + 0800 PCI-800 Digital I/O Card +# The main chip of all these devices is by Xilinx -> It could also be a Xilinx ID. +ea60 RME + 9896 Digi32 + 9897 Digi32 Pro + 9898 Digi32/8 +eabb Aashima Technology B.V. +eace Endace Measurement Systems, Ltd + 3100 DAG 3.10 OC-3/OC-12 + 3200 DAG 3.2x OC-3/OC-12 + 320e DAG 3.2E Fast Ethernet + 340e DAG 3.4E Fast Ethernet + 341e DAG 3.41E Fast Ethernet + 3500 DAG 3.5 OC-3/OC-12 + 351c DAG 3.5ECM Fast Ethernet + 360d DAG 3.6D DS3 + 360e DAG 3.6E Fast Ethernet + 368e DAG 3.6E Gig Ethernet + 3707 DAG 3.7T T1/E1/J1 + 370d DAG 3.7D DS3/E3 + 378e DAG 3.7G Gig Ethernet + 3800 DAG 3.8S OC-3/OC-12 + 4100 DAG 4.10 OC-48 + 4110 DAG 4.11 OC-48 + 4220 DAG 4.2 OC-48 + 422e DAG 4.2GE Gig Ethernet + 4230 DAG 4.2S OC-48 + 423e DAG 4.2GE Gig Ethernet + 4300 DAG 4.3S OC-48 + 430e DAG 4.3GE Gig Ethernet + 452e DAG 4.5G2 Gig Ethernet + 454e DAG 4.5G4 Gig Ethernet + 45b8 DAG 4.5Z8 Gig Ethernet + 45be DAG 4.5Z2 Gig Ethernet + 520e DAG 5.2X 10G Ethernet + 521a DAG 5.2SXA 10G Ethernet/OC-192 + 5400 DAG 5.4S-12 OC-3/OC-12 + 5401 DAG 5.4SG-48 Gig Ethernet/OC-3/OC-12/OC-48 + 540a DAG 5.4GA Gig Ethernet + 541a DAG 5.4SA-12 OC-3/OC-12 + 542a DAG 5.4SGA-48 Gig Ethernet/OC-3/OC-12/OC-48 + 6000 DAG 6.0SE 10G Ethernet/OC-192 + 6100 DAG 6.1SE 10G Ethernet/OC-192 + 6200 DAG 6.2SE 10G Ethernet/OC-192 + 7100 DAG 7.1S OC-3/OC-12 + 8100 DAG 8.1X 10G Ethernet + 8101 DAG 8.1SX 10G Ethernet/OC-192 + 8102 DAG 8.1X 10G Ethernet + 820e DAG 8.2X 10G Ethernet + 820f DAG 8.2X 10G Ethernet (2nd bus) + 8400 DAG 8.4I Infiniband x4 SDR +ec80 Belkin Corporation + ec00 F5D6000 +ecc0 Echo Digital Audio Corporation +edd8 ARK Logic Inc + a091 1000PV [Stingray] + a099 2000PV [Stingray] + a0a1 2000MT + a0a9 2000MI +# Found on M2N68-AM Motherboard +f043 ASUSTeK Computer Inc. (Wrong ID) +f05b Foxconn International, Inc. (Wrong ID) +f1d0 AJA Video + c0fe Xena HS/HD-R + c0ff Kona/Xena 2 + cafe Kona SD + cfee Xena LS/SD-22-DA/SD-DA + dcaf Kona HD + dfee Xena HD-DA + efac Xena SD-MM/SD-22-MM + facd Xena HD-MM +f5f5 F5 Networks, Inc. +# Subsystem ID for PATA controller on nForce motherboard +f849 ASRock Incorporation (Wrong ID) +fa57 Interagon AS + 0001 PMC [Pattern Matching Chip] +fab7 Fabric7 Systems, Inc. +febd Ultraview Corp. +# Nee Epigram +feda Broadcom Inc + a0fa BCM4210 iLine10 HomePNA 2.0 + a10e BCM4230 iLine10 HomePNA 2.0 +fede Fedetec Inc. + 0003 TABIC PCI v3 +fffd XenSource, Inc. + 0101 PCI Event Channel Controller +# Used in some old VMWare products before they got a real ID assigned +fffe VMWare Inc (temporary ID) + 0710 Virtual SVGA +ffff Illegal Vendor ID + + +# List of known device classes, subclasses and programming interfaces + +# Syntax: +# C class class_name +# subclass subclass_name <-- single tab +# prog-if prog-if_name <-- two tabs + +C 00 Unclassified device + 00 Non-VGA unclassified device + 01 VGA compatible unclassified device +C 01 Mass storage controller + 00 SCSI storage controller + 01 IDE interface + 02 Floppy disk controller + 03 IPI bus controller + 04 RAID bus controller + 05 ATA controller + 20 ADMA single stepping + 30 ADMA continuous operation + 06 SATA controller + 00 Vendor specific + 01 AHCI 1.0 + 07 Serial Attached SCSI controller + 80 Mass storage controller +C 02 Network controller + 00 Ethernet controller + 01 Token ring network controller + 02 FDDI network controller + 03 ATM network controller + 04 ISDN controller + 05 WorldFip controller + 06 PICMG controller + 80 Network controller +C 03 Display controller + 00 VGA compatible controller + 00 VGA controller + 01 8514 controller + 01 XGA compatible controller + 02 3D controller + 80 Display controller +C 04 Multimedia controller + 00 Multimedia video controller + 01 Multimedia audio controller + 02 Computer telephony device + 03 Audio device + 80 Multimedia controller +C 05 Memory controller + 00 RAM memory + 01 FLASH memory + 80 Memory controller +C 06 Bridge + 00 Host bridge + 01 ISA bridge + 02 EISA bridge + 03 MicroChannel bridge + 04 PCI bridge + 00 Normal decode + 01 Subtractive decode + 05 PCMCIA bridge + 06 NuBus bridge + 07 CardBus bridge + 08 RACEway bridge + 00 Transparent mode + 01 Endpoint mode + 09 Semi-transparent PCI-to-PCI bridge + 40 Primary bus towards host CPU + 80 Secondary bus towards host CPU + 0a InfiniBand to PCI host bridge + 80 Bridge +C 07 Communication controller + 00 Serial controller + 00 8250 + 01 16450 + 02 16550 + 03 16650 + 04 16750 + 05 16850 + 06 16950 + 01 Parallel controller + 00 SPP + 01 BiDir + 02 ECP + 03 IEEE1284 + fe IEEE1284 Target + 02 Multiport serial controller + 03 Modem + 00 Generic + 01 Hayes/16450 + 02 Hayes/16550 + 03 Hayes/16650 + 04 Hayes/16750 + 04 GPIB controller + 05 Smard Card controller + 80 Communication controller +C 08 Generic system peripheral + 00 PIC + 00 8259 + 01 ISA PIC + 02 EISA PIC + 10 IO-APIC + 20 IO(X)-APIC + 01 DMA controller + 00 8237 + 01 ISA DMA + 02 EISA DMA + 02 Timer + 00 8254 + 01 ISA Timer + 02 EISA Timers + 03 RTC + 00 Generic + 01 ISA RTC + 04 PCI Hot-plug controller + 05 SD Host controller + 80 System peripheral +C 09 Input device controller + 00 Keyboard controller + 01 Digitizer Pen + 02 Mouse controller + 03 Scanner controller + 04 Gameport controller + 00 Generic + 10 Extended + 80 Input device controller +C 0a Docking station + 00 Generic Docking Station + 80 Docking Station +C 0b Processor + 00 386 + 01 486 + 02 Pentium + 10 Alpha + 20 Power PC + 30 MIPS + 40 Co-processor +C 0c Serial bus controller + 00 FireWire (IEEE 1394) + 00 Generic + 10 OHCI + 01 ACCESS Bus + 02 SSA + 03 USB Controller + 00 UHCI + 10 OHCI + 20 EHCI + 80 Unspecified + fe USB Device + 04 Fibre Channel + 05 SMBus + 06 InfiniBand + 07 IPMI SMIC interface + 08 SERCOS interface + 09 CANBUS +C 0d Wireless controller + 00 IRDA controller + 01 Consumer IR controller + 10 RF controller + 11 Bluetooth + 12 Broadband + 20 802.1a controller + 21 802.1b controller + 80 Wireless controller +C 0e Intelligent controller + 00 I2O +C 0f Satellite communications controller + 01 Satellite TV controller + 02 Satellite audio communication controller + 03 Satellite voice communication controller + 04 Satellite data communication controller +C 10 Encryption controller + 00 Network and computing encryption device + 10 Entertainment encryption device + 80 Encryption controller +C 11 Signal processing controller + 00 DPIO module + 01 Performance counters + 10 Communication synchronizer + 20 Signal processing management + 80 Signal processing controller diff --git a/client/shared/scripts/README.es.txt b/client/shared/scripts/README.es.txt new file mode 100644 index 00000000..7bfb31ba --- /dev/null +++ b/client/shared/scripts/README.es.txt @@ -0,0 +1,38 @@ +OpenGnSys Client (Scripts) README +==================================== + + +Este directorio contiene algunos scripts de ejemplo que se utilizan +por el cliente de la consola web de administración, para realizar +las operaciones más comunes de gestión de clientes. + +Dichos scripts están desarrollados en BASH y utilizan las funciones +básicas del motor de clonación. + +OpenGnSys Client Cloning Engine incluye un completo conjunto de +funiones para que el administrador pueda personalizar sus scripts +de gestión. Sin embargo, estos ejemplos son completamente +operativos y pueden ser utilizados directamente. + + +Scripts distribuidos: + +- bootLinux arranca un sistema Linux con partición de inicio. +- bootOs arranca un sistema operativo instalado. +- bootWindows arranca un sistema Windows con partición de inicio. +- createImage genera una imagen de un sistema operativo. +- createLogicalPartitions define las particiones primarias del disco. +- createPrimaryPartitions define las particiones lógicas del disco. +- formatFs formatea un sistema de archivos. +- getFsType muestra el tipo (mnemónico) de una partición. +- getIpAddress muestra la IP local del cliente. +- getOsVersion muestra la versión de sistema operativo instalado. +- initCache inicia o define la caché local. +- listHardwareInfo lista los dispoisitivos del cliente. +- listPrimaryPartitions lista las particiones primarias de un disco. +- listSoftwareInfo lista el software de un sistema operativo. +- menuBrowser arranque el Browser con un menú preconfigurado. +- poweroff desmonta los sistemas de archivos y apaga el equipo. +- reboot desmonta los sistemas de archivos y reinicia el equipo. +- restoreImage restaura una imagen de sistema operativo. + diff --git a/client/shared/scripts/bootLinux b/client/shared/scripts/bootLinux new file mode 100755 index 00000000..e20b9489 --- /dev/null +++ b/client/shared/scripts/bootLinux @@ -0,0 +1,35 @@ +#!/bin/bash +# Scirpt de ejemplo para iniciar Linux desde partición de arranque. +# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). + +PROG="$(basename $0)" +if [ $# -ne 2 ]; then + ogRaiseError $OG_ERR_FORMAT "Formato: $PROG ndisco nparticion" + exit $? +fi + +echo "[0] Inicio del proceso de arranque." +PART=$(ogDiskToDev "$1" "$2") || exit $? + +echo "[10] Desmontar todos los sistemas de archivos." +sync +for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do + ogUnmountAll $i 2>/dev/null +done +ETC=$(ogGetPath $1 $2 /etc) +if [ -n "$ETC" ]; then + echo "[30] Asignar nombre Linux \"$NAME\"." + NAME=$(ogGetHostname) + NAME=${NAME:-"pc"} + echo "$NAME" >$ETC/hostname 2>/dev/null + echo "[50] Actaualizar fstab con particion raiz \"$PART\"." + awk -v P="$PART " '{ if ($2=="/") {sub(/^.*$/, P, $1)} + print } ' $ETC/fstab >/tmp/fstab + mv /tmp/fstab $ETC/fstab +fi +echo "[70] Desmontar cache local." +ogUnmountCache + +echo "[90] Arrancar sistema operativo." +ogBoot $1 $2 + diff --git a/client/shared/scripts/bootOs b/client/shared/scripts/bootOs new file mode 100755 index 00000000..71a9fe73 --- /dev/null +++ b/client/shared/scripts/bootOs @@ -0,0 +1,45 @@ +#!/bin/bash +# Scirpt de ejemplo para arancar un sistema operativo instalado. +# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). + +PROG="$(basename $0)" +if [ $# -ne 2 ]; then + ogRaiseError $OG_ERR_FORMAT "Formato: $PROG ndisco nparticion" + exit $? +fi + +echo "[0] Inicio del proceso de arranque." +PART=$(ogDiskToDev "$1" "$2") || exit $? +NAME=$(ogGetHostname) +NAME=${NAME:-"pc"} +OSTYPE=$(ogGetOsType $1 $2) + +echo "[10] Desmontar todos los sistemas de archivos." +sync +for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do + ogUnmountAll $i 2>/dev/null +done +case "$OSTYPE" in + Windows) + echo "[30] Activar particion de Windows $PART." + ogSetPartitionActive $1 $2 + echo "[50] Asignar nombre Windows \"$NAME\" y usuario por defecto." + ogSetWindowsName $1 $2 "$NAME" + ;; + Linux) + echo "[30] Asignar nombre Linux \"$NAME\"." + ETC=$(ogGetPath $1 $2 /etc) + [ -d "$ETC" ] && echo "$NAME" >$ETC/hostname 2>/dev/null + if [ -f "$ETC/fstab" ]; then + echo "[50] Actaualizar fstab con particion raiz \"$PART\"." + awk -v P="$PART " '{ if ($2=="/") {sub(/^.*$/, P, $1)} + print } ' $ETC/fstab >/tmp/fstab + mv /tmp/fstab $ETC/fstab + fi + ;; +esac +echo "[70] Desmontar cache local." +ogUnmountCache +echo "[90] Arrancar sistema operativo." +ogBoot $1 $2 + diff --git a/client/shared/scripts/bootWindows b/client/shared/scripts/bootWindows new file mode 100755 index 00000000..e92e484a --- /dev/null +++ b/client/shared/scripts/bootWindows @@ -0,0 +1,30 @@ +#!/bin/bash +# Scirpt de ejemplo para iniciar Windows con partición de arranque. +# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). + +PROG="$(basename $0)" +if [ $# -ne 2 ]; then + ogRaiseError $OG_ERR_FORMAT "Formato: $PROG ndisco nparticion" + exit $? +fi + +echo "[0] Inicio del proceso de arranque." +PART=$(ogDiskToDev "$1" "$2") || exit $? + +echo "[10] Desmontar todos los sistemas de archivos." +sync +for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do + ogUnmountAll $i 2>/dev/null +done +echo "[30] Activar particion de Windows $PART." +ogSetPartitionActive $1 $2 +echo "[50] Asignar nombre Windows \"$NAME\"." +NAME=$(ogGetHostname) +NAME=${NAME:-"pc"} +ogSetWindowsName $1 $2 "$NAME" +echo "[70] Desmontar cache local." +ogUnmountCache + +echo "[90] Arrancar sistema operativo." +ogBoot $1 $2 + diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster new file mode 100755 index 00000000..a755871f --- /dev/null +++ b/client/shared/scripts/cloneRemoteFromMaster @@ -0,0 +1,215 @@ +#!/bin/bash +# Script para la clonacion de particiones remotas. +# (puede usarse como base para el programa de restauración de imágenes usado por OpenGnSys Admin). +# Versión: 0.9.1, 2009/03/17, - Antonio J. Doblas Viso. Universidad de Malaga. +# Versión: 0.9.2, 2010/07/27, - Antonio J. Doblas Viso. Universidad de Malaga. +# Version: 0.1.0 2011/01/26, - Antonio J. Doblas Viso. Universidad de Malaga. + +TIME1=$SECONDS +PROG="$(basename $0)" +#if [ $# -ne 5 ]; then + # ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG tamaño" +# exit $? +#fi + + +#/** @function cloneremoteFromMaster: @brief Restaura una particion o imagen sobre las particiones de equipos cliente remotos +#@param $1 str_origen admite dirección IP del equipo Master. +#@param $2 str_origen admite int_disk str_REPO|str_CACHE +#@param $3 str_origen admite int partorigen stre_imagen +#@param $4 str_sesion multicast +#@param $5 int_disco_destino +#@param $6 init_particion_destino +#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 1 1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop +#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 REPO /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop +#@param ejemplo: cloneRemoteFromMaster 172.17.36.11 CACHE /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop +#@return la propia de la herramienta de clonacion partimage o ntfsclone +# + + + +FOUNDSOURCE=false +HOSTIP=`ogGetIpAddress` + +SESSIONMCASTSERVER=$4 +SESSIONMCASTCLIENT=`echo $4 | awk -F: '{print $1}'` +DISKTARGET=$5 +PARTTARGET=$6 +TOOLCLONE=$7 +COMPRESOR=$8 + +TIME1=$SECONDS +PROG="$(basename $0)" +if [ $# -lt 1 ]; then + echo "cloneRemoteFromMaster ipmaster disk init session disk part tool comp" + exit 1 +fi + +if [ $# -lt 5 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ TORRENT|UNICAST | MULTICAST:npuerto ]" + exit $? +fi + +#Chequeamos variables-constantes + +# check HOSTIP +if [ -z "$HOSTIP" ] +then + source /tmp/net-eth0.conf + HOSTIP=`ogGetIpAddress` +fi +MODEMASTER=false + + +#Chequeamos parametros. + +# is $1 a valid IP +MASTERIP=$1 + +# contendor origen (disco particion o file) + + +# IP destino: session multicast. +SESSIONMCASTSERVER=$4 +SESSIONMCASTCLIENT=`echo $4 | awk -F: '{print $1}'` + +# contenedor destino (disco particion) +DISKTARGET=$5 +PARTTARGET=$6 + +#herramienta de compresión. +TOOLCLONE=$7 +COMPRESOR=$8 + + +###IMG=$(ogGetPath $2 $3.img) +###echo $IMG + +# Check command in Master (sendFile or sendPartition) +####if [ -n $IMG ] + + +case $MASTERIP in + $HOSTIP) + ogGetPath $2 $3.img + RC=`echo $?` + echo "$RC comenzando control del valor del origen $2 $3" + if [ $RC == "0" ] + then + echo "mode senfile" + IMG=$(ogGetPath $2 $3.img) + MODEMASTER=SENDFILE + else + if [ $(ogDiskToDev $2 $3) ] + then + echo "mode sendpartitons" + DISKSOURCE=$2 + PARTSOURCE=$3 + MODEMASTER=SENDPARTITION + fi + fi + + echo "modo " $MODEMASTER + + if [ "$MODEMASTER" == "false" ] + then + echo "cloneRemote: origen no encontrado" + exit 1 + else + echo "cloneRemote: sistema preparando para un $MODEMASTER" + fi + + case "$MODEMASTER" in + SENDPARTITION) + echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER" + echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE" + ogUnmount $2 $3 || exit + #Obtener tamaño de la partición. + SIZE=$(ogGetPartitionSize $2 $3) + # Reducir el sistema de archvios. + echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" + ogReduceFs $2 $3 || exit 1 + + #echo "salida de ogReduceFS" $? + #if [ $? == 1 ] + #then + # echo "no se ha podido reducir FS" +# exit 1 +# + REDSIZE=$(ogGetFsSize $2 $3) + echo "[20]: Reducido el sistema de archivos a $REDSIZE $DISKSOURCE $PARTSOURCE" + if [ $REDSIZE -lt $SIZE ]; then + echo "[24] Redimensionar partición a $REDSIZE KB." + ogSetPartitionSize $2 $3 $REDSIZE + fi + echo "[25] ofreciendo informacion a los clientes-slaves" + faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & + echo "[30] Enviando multicast " + echo ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR + ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR + if [ $REDSIZE -lt $SIZE ]; then + echo "[85] Redimensionar partición a $SIZE KB." + ogSetPartitionSize $2 $3 $SIZE + echo "[90] Extender sistema de archivos." + ogExtendFs $2 $3 + fi + pkill faucet + ;; + SENDFILE) + echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER" + echo "[10]: Preparando Imagen: $IMG" + TOOLCLONE=$(ogGetImageProgram $2 $3) + COMPRESOR=$(ogGetImageCompressor $2 $3) + REDSIZE=$(ogGetImageSize $2 $3) + echo "[25] ofreciendo informacion a los clientes-slaves: $TOOLCLONE $COMPRESOR $REDSIZE" + faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & + echo "[30] Enviando multicast: ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " + ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER + pkill faucet + ;; + esac + pkill faucet + ;; + *) + echo "[5]: cloneRemoteFromMaster: sistema preparando como CLIENTE modo $MODEMASTER" + ogUnmount $DISKTARGET $PARTTARGET + echo "[24] Cliente intentando conectar con el master $MASTERIP" + echo -n "[25] Buscando informacion extra sobre la clonacion: " + # While para esperar al servidor + while [ -z "$INFOEXTRA" ] + do + INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null` + sleep 10 + echo -n "." + done + TOOLCLONE=$(echo $INFOEXTRA | awk '{print $1}') + COMPRESOR=$(echo $INFOEXTRA | awk '{print $2}') + SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $3}') + echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " + # comprobamos que el tamaño de a imagen es menor que la del cliente. + SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET) + if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ] + then + echo -n "[30] Iniciando CLIENTE MULTICAST: " + echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR + ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" + echo "[90] Extender sistema de archivos" + ogExtendFs $DISKTARGET $PARTTARGET + # Cambiar nombre en sistemas Windows. + if [ "$(ogGetOsType $DISKTARGET $PARTTARGET)" = "Windows" ]; then + HOST=$(ogGetHostname) + HOST=${HOST:-"UNKNOWN"} + echo "[90] Cambiar nombre Windows a \"$HOST\"." + ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST" + fi + else + echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " + echo -n "[26] ERROR tamanio particion= $SIZEPARTTARGET tamanio de la imagen= $SIZEIMAGE" + exit 1 + fi + ;; +esac +TIME=$[SECONDS-TIME1] +echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s" + + diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage new file mode 100755 index 00000000..0fea453a --- /dev/null +++ b/client/shared/scripts/createImage @@ -0,0 +1,59 @@ +#!/bin/bash +# create-image.sh - Scirpt de ejemplo para crear una imagen de un sistema de archivos. +# (puede usarse como base para el programa de creación de imágenes usado por OpenGNSys Admin). + +TIME1=$SECONDS +PROG="$(basename $0)" +if [ $# -ne 4 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE imagen" + exit $? +fi + +# Si el repositorio es CACHE comprobamos que exista +if [ "$3" == "CACHE" -o "$3" == "cache" ]; then + if ! $(ogFindCache >/dev/null); then + ogRaiseError $OG_ERR_NOTFOUND "CACHE" + exit $? + fi +fi + +# Obtener información de los parámetros de entrada. +PART=$(ogDiskToDev "$1" "$2") || exit $? +IMGDIR=$(ogGetParentPath "$3" "/$4") +# Si no existe, crear subdirectorio de la imagen. +if [ $? != 0 ]; then + echo "[5] Crear subdirectorio de la imagen \"$3 $(dirname "$4")." + ogMakeDir "$3" $(dirname "/$4") + IMGDIR=$(ogGetParentPath "$3" "/$4") || exit $? +fi +IMGFILE=$IMGDIR/$(basename "/$4").img +# Renombrar el fichero de imagen si ya existe. +if [ -f "$IMGFILE" ]; then + echo "[10] Renombrar \"$IMGFILE\" por \"$IMGFILE.ant\"." + mv "$IMGFILE" "$IMGFILE.ant" + mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null +fi +# Mostrar información. +echo "[15] $PROG: Origen=$PART, Destino=$IMGFILE" + +# Comprobar consistencia del sistema de archivos. +echo "[20] Comprobar sistema de archivos." +ogCheckFs $1 $2 + +echo "[21] Desmontando particion." +ogUnmount $1 $2 + +echo "[25]: Calculando la reduccion del sistema de archivos DISK:$1 PARTITION:$2" +ogReduceFs $1 $2 || exit 1 + +# Crear la imagen. +echo "[30] Crear imagen. partclone lzop 30% mas rapido que con gzip" +ogCreateImage $1 "$2" $3 $4 partclone lzop || exit $? +#ogCreateImage $1 "$2" $3 $4 || exit $? + +echo "[90] Extender sistema de archivos." +ogExtendFs $1 $2 + +TIME=$[SECONDS-TIME1] +echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" + diff --git a/client/shared/scripts/createLogicalPartitions b/client/shared/scripts/createLogicalPartitions new file mode 100755 index 00000000..7a693aac --- /dev/null +++ b/client/shared/scripts/createLogicalPartitions @@ -0,0 +1,3 @@ +#!/bin/bash + + diff --git a/client/shared/scripts/createPrimaryPartitions b/client/shared/scripts/createPrimaryPartitions new file mode 100755 index 00000000..f69f354d --- /dev/null +++ b/client/shared/scripts/createPrimaryPartitions @@ -0,0 +1,3 @@ +#!/bin/bash +ogCreatePartitions "$@" +exit 0 diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage new file mode 100755 index 00000000..15392ec7 --- /dev/null +++ b/client/shared/scripts/deployImage @@ -0,0 +1,20 @@ +#!/bin/bash + +TIME1=$SECONDS +PROG="$(basename $0)" +if [ $# -lt 4 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" + exit $? +fi + +#controlar param1 REPO + +updateCache REPO $2.img $5 $6 +if [ $? != "0" ] +then + echo "fin del updateCache REPO $2.img $5 $6 con errores" + exit 1 +else + echo "comenzamos con restoreImage CACHE $2 $3 $4" + restoreImage CACHE $2 $3 $4 +fi \ No newline at end of file diff --git a/client/shared/scripts/formatFs b/client/shared/scripts/formatFs new file mode 100755 index 00000000..832592fb --- /dev/null +++ b/client/shared/scripts/formatFs @@ -0,0 +1,19 @@ +#!/bin/bash +# Scirpt de ejemplo para formatear un sistema de archivos. +# (puede usarse como base para el programa de formateo de OpenGnSys Admin). + +TIME1=$SECONDS +PROG="$(basename $0)" +if [ $# -ne 2 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion" + exit $? +fi + +# Desmontar y formatear el sistema de archivos. +echo "[5] Desmontando sistema de archivos" +ogUnmountFs "$@" || exit $? +echo "[20] Formateando sistema de archivos" +ogFormatFs "$@" + +TIME=$[SECONDS-TIME1] +echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s" diff --git a/client/shared/scripts/getFsType b/client/shared/scripts/getFsType new file mode 100755 index 00000000..b3516a4f --- /dev/null +++ b/client/shared/scripts/getFsType @@ -0,0 +1,3 @@ +#!/bin/bash +ogGetFsType "$@" + diff --git a/client/shared/scripts/getIpAddress b/client/shared/scripts/getIpAddress new file mode 100755 index 00000000..e428ebfc --- /dev/null +++ b/client/shared/scripts/getIpAddress @@ -0,0 +1,3 @@ +#!/bin/bash +ogGetIpAddress "$@" + diff --git a/client/shared/scripts/getOsVersion b/client/shared/scripts/getOsVersion new file mode 100755 index 00000000..6e6d91d5 --- /dev/null +++ b/client/shared/scripts/getOsVersion @@ -0,0 +1,3 @@ +#!/bin/bash +ogGetOsVersion "$@" + diff --git a/client/shared/scripts/initCache b/client/shared/scripts/initCache new file mode 100755 index 00000000..69cdc535 --- /dev/null +++ b/client/shared/scripts/initCache @@ -0,0 +1,60 @@ +#!/bin/bash +# Scirpt de iniciación de la caché local de disco. +# (puede usarse como base para el programa de restauración de imágenes usado por OpenGnSys Admin). +# Versión: 0.9.1, 2009/03/17, - Ramón Gómez, Univ. Sevilla - Versión inicial. +# Versión: 0.9.2, 2010/07/27, - Ramón Gómez, Univ. Sevilla - redefinir parámetro. + +TIME1=$SECONDS +PROG="$(basename $0)" +if [ $# -ne 1 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG -1 | 0 | tamaño" + exit $? +fi + +# Si tamaño no es numérico o tamaño<-1, error. +if [ -n "${1//[-0-9]/}" ] || [ $1 -lt -1 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG -1 | 0 | tamaño" + exit $? +fi +# Si tamaño=0, no hacer nada. +if [ $1 -eq 0 ]; then + echo "No modificar la caché local." + exit +fi +# Si tamaño=-1, borrar caché. +if [ $1 -eq -1 ]; then + echo "[10] Trabajar sin caché local." + ogUnmountCache 2>/dev/null + ogDeleteCache +else + # Si tamaño>0, ... + if [ ! $1 -gt 0 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_ERR_FORMAT: !($1>0)" + exit $? + fi + # Si no existe caché o si cambia su tamaño, crearla. + SIZE=$(ogGetCacheSize 2>/dev/null) + if [ "$1" != "$SIZE" ]; then + echo "[10] Crar partición de caché local." + ogUnmountCache 2>/dev/null + ogCreateCache "$1" + fi + # Si caché no montada y no formateada, formatear. + CACHE=$(ogFindCache) || exit $? + if ! ogIsFormated $CACHE; then + echo "[50] Formatear caché local." + ogFormatCache + fi + echo "[70] Montar caché local." + ogMountCache 2>/dev/null + # Si error al montar, chequear sistema de archivos y volver a montar. + if [ $? != 0 ]; then + echo "[80] Comprobar y montar caché local." + ogCheckFs $CACHE + ogMountCache || exit $? + fi +fi +# Duración del proceso. +TIME=$[SECONDS-TIME1] +echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s" + diff --git a/client/shared/scripts/listHardwareInfo b/client/shared/scripts/listHardwareInfo new file mode 100755 index 00000000..c38f35f9 --- /dev/null +++ b/client/shared/scripts/listHardwareInfo @@ -0,0 +1,24 @@ +#!/bin/bash +# Scirpt de ejemplo para almacenear en fichero temporal el listado de hardware. +# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). +# Formato: listHardwareInfo + +PROG="$(basename $0)" +if [ $# -ne 0 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG " + exit $? +fi + +# Directorio del servidor donde se exportan los ficheros de registro. +SERVERLOGDIR=$(mount | awk -v d=$OGLOG ' + BEGIN {FS="[: ]"} + {if ($4==d) dir=$2} + END {print dir}') + +# Fichero de listado: hard-IP +HARDFILE="hard-$(ogGetIpAddress)" +# Redirigir salida al fichero de listado. +ogListHardwareInfo>$OGLOG/$HARDFILE || exit $? +# Salida: camino del fichero de listado en el servidor de repositorio. +#echo $SERVERLOGDIR/$HARDFILE +echo $OGLOG/$HARDFILE diff --git a/client/shared/scripts/listPrimaryPartitions b/client/shared/scripts/listPrimaryPartitions new file mode 100755 index 00000000..d20dd76f --- /dev/null +++ b/client/shared/scripts/listPrimaryPartitions @@ -0,0 +1,3 @@ +#!/bin/bash +ogListPrimaryPartitions "$@" + diff --git a/client/shared/scripts/listSoftwareInfo b/client/shared/scripts/listSoftwareInfo new file mode 100755 index 00000000..e5b0da1c --- /dev/null +++ b/client/shared/scripts/listSoftwareInfo @@ -0,0 +1,30 @@ +#!/bin/bash +# Scirpt de ejemplo para almacenear en fichero temporal el listado de software. +# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). +# Formato: listSoftwareInfo [-r] ndisk npart +# -r listado reducido (sin parches) + +PROG="$(basename $0)" +REDUCED="no" +if [ $# -ne 2 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion" + exit $? +fi + +# Directorio del servidor donde se exportan los ficheros de registro. +SERVERLOGDIR=$(mount | awk -v d=$OGLOG ' + BEGIN {FS="[: ]"} + {if ($4==d) dir=$2} + END {print dir}') +# Fichero de listado: soft-IP-ndisco-npart +SOFTFILE="soft-$(ogGetIpAddress)-$1-$2" +# Redirigir salida al fichero de listado. +if [ "$REDUCED" = "no" ]; then + ogListSoftware "$1" "$2" >$OGLOG/$SOFTFILE || exit $? +else + ogListSoftware "$1" "$2" | egrep -v "\(KB[0-9]{6}\)" >$OGLOG/$SOFTFILE || exit $? +fi +# Salid: camino del fichero de listado en el servidor de repositorio. +#echo $SERVERLOGDIR/$SOFTFILE +echo $OGLOG/$SOFTFILE + diff --git a/client/shared/scripts/menuBrowser b/client/shared/scripts/menuBrowser new file mode 100755 index 00000000..164d5314 --- /dev/null +++ b/client/shared/scripts/menuBrowser @@ -0,0 +1,12 @@ +#!/bin/bash +# Scirpt de ejemplo para iniciar el browser del cliente con un menú predefinido +# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin). + +PROG="$(basename $0)" +if [ $# -ne 1 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG urlmenu" + exit $? +fi + +url="$1" +browser -qws $url diff --git a/client/shared/scripts/ogUpdateBootCache.sh b/client/shared/scripts/ogUpdateBootCache.sh new file mode 100755 index 00000000..af2267a2 --- /dev/null +++ b/client/shared/scripts/ogUpdateBootCache.sh @@ -0,0 +1,7 @@ +#!/bin/bash +OGBTFTP="/opt/og2fs/tftpboot/ogclient/" +ogMountCache || exit 1 +echo $OGCAC +[ -d $OGCAC/boot ] || mkdir -p $OGCAC/boot +[ -f ${OGCAC}/boot/ogvmlinuz ] || cp ${OGBTFTP}ogvmlinuz ${OGCAC}/boot/ogvmlinuz +[ -f ${OGCAC}/boot/oginitrd.img ] || cp ${OGBTFTP}oginitrd.img ${OGCAC}/boot/oginitrd.img \ No newline at end of file diff --git a/client/shared/scripts/poweroff b/client/shared/scripts/poweroff new file mode 100755 index 00000000..bf867467 --- /dev/null +++ b/client/shared/scripts/poweroff @@ -0,0 +1,18 @@ +#!/bin/bash +# Scirpt de ejemplo para apagar un ordenador +# (puede usarse como base para el programa de apagado usado por OpenGNSys Admin). + +PROG="$(basename $0)" + +echo "[10] Desmontar todos los sistemas de archivos." +sync +for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do + ogUnmountAll $i 2>/dev/null +done +echo "[50] Desmontar cache local." +ogUnmountCache +echo "[70] Apagando el equipo." +ethtool -s $DEVICE wol g +(sleep 5 && busybox poweroff) & + + diff --git a/client/shared/scripts/reboot b/client/shared/scripts/reboot new file mode 100755 index 00000000..7b7f3c94 --- /dev/null +++ b/client/shared/scripts/reboot @@ -0,0 +1,17 @@ +#!/bin/bash +# Scirpt de ejemplo para reiniciar un ordenador +# (puede usarse como base para el programa de reinicio usado por OpenGNSys Admin). + +PROG="$(basename $0)" + +echo "[10] Desmontar todos los sistemas de archivos." +sync +for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do + ogUnmountAll $i 2>/dev/null +done +echo "[50] Desmontar cache local." +ogUnmountCache +echo "[90] Reiniciar el equipo." +ethtool -s $DEVICE wol g +(sleep 5 && busybox reboot) & + diff --git a/client/shared/scripts/remoteConsole b/client/shared/scripts/remoteConsole new file mode 100755 index 00000000..dc0fc4bb --- /dev/null +++ b/client/shared/scripts/remoteConsole @@ -0,0 +1,22 @@ +#!/bin/bash +# Script de ejemplo para enviar eco a la consola remota al ejecutar un comando de la shell +# Formato: remoteConsole + +PROG="$(basename $0)" +if [ $# -ne 0 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG " + exit $? +fi + +# Directorio del servidor donde se exportan los ficheros de registro. +SERVERLOGDIR=$(mount | awk -v d=$OGLOG ' + BEGIN {FS="[: ]"} + {if ($4==d) dir=$2} + END {print dir}') + +# Fichero de listado: hard-IP +ECOFILE="eco-$(ogGetIpAddress)" +# Redirigir salida al fichero de listado. +/tmp/_hidrascript_ >$OGLOG/$ECOFILE || exit $? +# Salida: camino del fichero de listado en el servidor de repositorio. +echo $SERVERLOGDIR/$ECOFILE diff --git a/client/shared/scripts/restoreImage b/client/shared/scripts/restoreImage new file mode 100755 index 00000000..a01f1a49 --- /dev/null +++ b/client/shared/scripts/restoreImage @@ -0,0 +1,89 @@ +#!/bin/bash +# Scirpt de ejemplo para restaurar una imagen. +# (puede usarse como base para el programa de restauración de imágenes usado por OpenGNSys Admin). + +TIME1=$SECONDS +PROG="$(basename $0)" +if [ $# -lt 4 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" + exit $? +fi + +# Procesar parámetros de entrada +IMGTYPE="img" +IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") +PROTO=${5:-"UNICAST"} +if [ "$1" == "CACHE" -o "$1" == "cache" ]; then + IMGDIR=$(ogGetParentPath "$1" "$2") + # Si no existe el directorio de la imagen, crearlo. + if [ -z "$IMGDIR" ]; then + echo "[5] Creando directorio de imagen \"$1, ${2%/*}\"." + ogMakeDir "$1" "${2%/*}" || ogRaiseError $OG_ERR_NOTFOUND "$1, ${2%/*}" || exit $? + fi + IMGDIR=$(ogGetParentPath "$1" "$2") || ogRaiseError $OG_ERR_NOTFOUND "$1, ${2%/*}" || exit $? + # Procesar protocolos de transferencia. + case "$PROTO" in + UNICAST|unicast) + # Copiar fichero del repositorio al caché local. + #IMGTYPE=$(ogGetImageType "repo" "$2") + IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") + if [ -z "$IMGFILE" ] || [ $(ogIsNewerFile "repo" "$2.$IMGTYPE" "$IMGFILE") ]; then + echo "[10] Copiando imagen \"$2\" del repositorio a caché local" + ogCopyFile "repo" "$2.$IMGTYPE" "$IMGDIR" + fi + # Comprobar si existe el fichero en caché y no en el repositorio. + if [ -z "$IMGFILE" ]; then + #IMGTYPE=$(ogGetImageType "cache" "$2") + IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") + if [ -z "$IMGFILE" ]; then + ogRaiseError $OG_ERR_NOTFOUND "cache, $2.$IMGTYPE" + exit $? + fi + fi + ;; + MULTICAST|multicast) + if [ -z "$IMGFILE" ]; then + echo "[10] Copiando imagen multicast \"$2\" del repositorio a caché local" + #IMGTYPE=$(ogGetImageType "repo" "$2") + PORTBASE=`echo $6 | cut -f1 -d:` + echo "ogMcastReceiverFile SOURCE:$PORTBASE TARGET:CACHE $2.$IMGTYPE" + ogMcastReceiverFile "$PORTBASE" "CACHE" "$2.$IMGTYPE" || exit $? + IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") + fi + ;; + TORRENT|torrent) + echo "[9] copiando el fichero torrent Unicast \"$2\" del repositorio a caché local" + #IMGTYPE=$(ogGetImageType "repo" "$2") + ogCopyFile "repo" "$2.$IMGTYPE.torrent" "$IMGDIR" || exit $? + echo "[10] descargando imagen torrent($6) \"$2\" del repositorio a caché local" + ogTorrentStart "CACHE" "$2.$IMGTYPE.torrent" "peer:60" || exit $? + IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") + ;; + *) # Protocolo desconocido. + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT opciones ]" + exit $? + esac +fi +if [ -z "$IMGFILE" ]; then + ogRaiseError $OG_ERR_NOTFOUND "$1, $2" + exit $? +fi +PART=$(ogDiskToDev "$3" "$4") || exit $? + +# Restaurar la imagen. +echo "[40] Restaurar imagen en $PART" +ogRestoreImage "$@" || exit $? +# Restaurar tamaño. +echo "[80] Extender sistema de archivos." +ogExtendFs $3 $4 +# Cambiar nombre en sistemas Windows y quitar usuario de acceso por defecto. +if [ "$(ogGetOsType $3 $4)" = "Windows" ]; then + HOST=$(ogGetHostname) + HOST=${HOST:-"pc"} + echo "[90] Cambiar nombre Windows a \"$HOST\" y usuario de acceso." + ogSetWindowsName $3 $4 "$HOST" + #ogSetWinlogonUser $3 $4 " " # Descomentar para cambiar usuario de inicio. +fi +TIME=$[SECONDS-TIME1] +echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" + diff --git a/client/shared/scripts/sendFileMcast b/client/shared/scripts/sendFileMcast new file mode 100755 index 00000000..54e82ac3 --- /dev/null +++ b/client/shared/scripts/sendFileMcast @@ -0,0 +1,56 @@ +#!/bin/bash + + + +#Este scripts llama directamente a la función ogMcastSendFile $1 $2 +#1 path absoluto del fichero. +#2 la session multicast. +# ogMcastSendFile [ str_repo | int_ndisk int_npart ] /Relative_path_file sessionMulticast +#@brief Envía un fichero por multicast ORIGEN(fichero) DESTINO(sessionmulticast) +#@param (2 parámetros) $1 path_aboluto_fichero $2 sesionMcast + + + +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys/client}" + export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + + for i in $OGAPI/*.lib; do + . $i + done + + if [ "$engine" = "testing" ] + then + for i in $OGAPI/*.testing; do + . $i + done + fi + +export PATH=$PATH:/opt/opengnsys/bin + +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + + + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "sendFileMcast /absolute_path_file sesionMcast" \ + "sendFileMcast /opt/opengnsys/images/aula1/hd500.vmx 9000:full-duplex:239.194.17.2:70M:20:300" + exit 0 +fi + +# los demas errores controlados por la funcion ogMcastSendFile + +ogMcastSendFile $1 $2 diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache new file mode 100755 index 00000000..5723c378 --- /dev/null +++ b/client/shared/scripts/updateCache @@ -0,0 +1,96 @@ +#!/bin/bash + +# Scirpt para la actualizacion de datos en la cache. +# Versión: 0.9.1, 2008/03/17, - integracion eac +# Versión: 0.9.2, 2010/07/27, - integracion opengnsys + + + +#1 REPO +#2 nombre del fichero con su extension, tipo /imagen1.img o /ubuntu.iso +#3 Protocolo TORRENT | MULTICAST | UNICAST +#4 opciones protocolo +#5 opciones de update cache + + +PROG="$(basename $0)" +if [ $# -lt 4 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_REPO _str_Relative_Path_OGIMG_with_/ PROTOCOLO OPCIONES_PROTOCOLO OPCIONES_UPDATECACHE" + exit $? +fi + +REPOSITORIO=$1 +PROTOCOLO=$3 +OPTPROTOCOLO=$4 +echo $REPOSITORIO $PROTOCOLO $OPTPROTOCOLO +# Si el repositorio local CACHE no existe salimos. +if ! $(ogFindCache >/dev/null); then + ogRaiseError $OG_ERR_NOTFOUND "CACHE" + exit $? +fi + + +CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`) +FILESIZE=$(ls -sk $(ogGetPath $1 $2) | cut -f1 -d" ") + +if [ "$FILESIZE" -ge "$CACHESIZEFREE" ] +then + echo "el tamanio del fichero $2 = $FILESIZE es mayor que el espacio dispinible en la cache = $CACHESIZEFREE" + exit 1 +fi + +ogUpdateCacheIsNecesary $1 $2 || exit 0 + +ogMountCache + +## Si no existe, crear subdirectorio para el fichero en la cache. +IMGDIR=$(ogGetParentPath "$1" "/$2") +if [ $? != 0 ]; then + echo "[5] Crear subdirectorio del fichero \"$2 $(dirname "$2")." + ogMakeDir "CACHE" $(dirname "/$2") + IMGDIR=$(ogGetParentPath "$1" "/$2") || exit $? +fi + + +echo "ogCopyFile $1 $2.torrent absolute $OGCAC$OGIMG" +ogCopyFile $1 $2.torrent $OGCAC$OGIMG +#TODO: comprobar que el tracker definido en el fichero es correcto. +case "$PROTOCOLO" in + torrent | TORRENT ) + #[ -z $OPTPROTOCOLO ] && OPTPROTOCOL=leecher:10 + echo "ogTorrentStart CACHE $2.torrent $4" + ogTorrentStart CACHE $2.torrent $4 + ;; + multicast | MULTICAST ) + echo "determinando puerto principal y auxiliar." + PORT=$(echo $OPTPROTOCOLO | cut -f1 -d":") + let PORTAUX=$PORT+1 + echo "comprobando que el servidor está activo" + if (nmap -n -sU -p $PORTAUX $repo | grep open) + then + ogMcastReceiverFile $PORT CACHE $2 + else + echo "solicita la apertura: hose $repo 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO"" + hose $repo 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO" + #echo "espero y llamo a: ogMcastReceiverFile $PORT CACHE $2" + sleep 30 + ogMcastReceiverFile $PORT CACHE $2 + fi + ;; + unicast | UNICAST ) + echo "unicast" + ;; +esac + +if ogUpdateCacheIsNecesary $1 $2 +then + echo "algo ha fallado" + exit 1 +else + echo "updateCache ok" + exit 0 +fi + + + +# \ No newline at end of file diff --git a/doc/INSTALL.es.txt b/doc/INSTALL.es.txt index 8c211a12..55df924a 100644 --- a/doc/INSTALL.es.txt +++ b/doc/INSTALL.es.txt @@ -25,14 +25,13 @@ Se realizan los siguientes procesos: * Crear la estructura básica de directorios de OpenGnSys. * Descargar el repositorio de código en un directorio temporal (/tmp/opengnsys_installer). Nota: en versiones futuras este proceso no será necesario. * Compilar e instalar los servicios de OpenGnSys. - * Configuración básica de los serviciios de red DHCP, PXE y NFS a partir de los parámetros de conexión. + * Configuración básica de los serviciios de red DHCP, PXE y NFS/Samba a partir de las plantillas de configuración * Copiar ficheros complementarios de gestión del servidor. * Crear la base de datos y configurar el servidor web de OpenGnSys Web Admin Console. * Copiar los ficheros de las páginas web de Web Console. * Copiar la estructura de directorios de OpenGnSys Client. - * Descargar y generar la imagen inicial Initrd y el Kernel de OpenGnSys Client (llamada al script initrd-generator). - * Descargar los paquetes Udeb de herramientas complementarias para OpenGnSys Client (llamada al script upgrade-clients-udeb.sh). - * Configuración básica de los serviciios de OpenGNsys a partir de los parámetros de red. + * Descargar la imagen inicial de OpenGnSys Client. + * Configuración básica de los serviciios de OpenGnSys a partir de los parámetros de red. Una vez finalizada la ejecución del instalador, puede empezarse a trabajar con el sistema: * Configurar DHCP. diff --git a/installer/INSTALL.es.txt b/installer/INSTALL.es.txt index 5ea029e2..76679026 100644 --- a/installer/INSTALL.es.txt +++ b/installer/INSTALL.es.txt @@ -10,7 +10,7 @@ Descargar una versión completa y desccomprimir el fichero "opengnsys-version.ta cd opengnsys-version/installer O bien, descargar el instalador desde la última reversión del repositorio: - svn export http://www.opengnsys.es/svn/trunk/installer/opengnsys_installer.sh + svn export http://www.opengnsys.es/svn/branches/version1.0/installer/opengnsys_installer.sh Ejecutar el instalador como root: sudo ./opengnsys_installer.sh @@ -26,7 +26,7 @@ Descargar el fichero opengnsys-version.tar.gz y descomprimirlo: cd opengnsys-version/installer O bien, descargar el actualizador desde la última revisión del repositorio: - svn export http://www.opengnsys.es/svn/trunk/installer/opengnsys_update.sh + svn export http://www.opengnsys.es/svn/branches/version1.0/installer/opengnsys_update.sh Ejecutar el programa de actualización como root: sudo ./opengnsys_installer.sh diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 94ded64d..051f448f 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -859,25 +859,19 @@ function openGnsysCopyServerFiles () { local path_opengnsys_base=$1 - local SOURCES=( client/boot/initrd-generator \ - client/boot/upgrade-clients-udeb.sh \ - client/boot/udeblist.conf \ - client/boot/udeblist-jaunty.conf \ - client/boot/udeblist-karmic.conf \ - client/boot/udeblist-lucid.conf \ - client/boot/udeblist-maverick.conf \ - server/tftpboot/pxelinux.cfg \ + # No se copian los ficheros del cliente antiguo: + # - client/boot/initrd-generator ==> /opt/opengnsys/bin + # - client/boot/upgrade-clients-udeb.sh ==> /opt/opengnsys/bin + # - client/boot/udeblist.conf ==> /opt/opengnsys/etc + # - client/boot/udeblist-jaunty.conf ==> /opt/opengnsys/etc + # - client/boot/udeblist-karmic.conf ==> /opt/opengnsys/etc + # - client/boot/udeblist-lucid.conf ==> /opt/opengnsys/etc + # - client/boot/udeblist-maverick.conf ==> /opt/opengnsys/etc + local SOURCES=( server/tftpboot/pxelinux.cfg \ server/bin \ repoman/bin \ doc ) - local TARGETS=( bin/initrd-generator \ - bin/upgrade-clients-udeb.sh \ - etc/udeblist.conf \ - etc/udeblist-jaunty.conf \ - etc/udeblist-karmic.conf \ - etc/udeblist-lucid.conf \ - etc/udeblist-maverick.conf \ - tftpboot/pxelinux.cfg \ + local TARGETS=( tftpboot/pxelinux.cfg \ bin \ bin \ doc ) @@ -944,7 +938,7 @@ function servicesCompilation () # Compilar OpenGnSys Client echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client" pushd $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient - make && mv ogAdmClient ../../../../client/nfsexport/bin + make && mv ogAdmClient ../../../../client/shared/bin if [ $? -ne 0 ]; then echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client" hayErrores=1 @@ -986,7 +980,7 @@ function openGnsysOldClientCreate() local hayErrores=0 echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." - cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client + cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." mkdir -p $INSTALL_TARGET/client/lib/engine/bin @@ -1292,10 +1286,10 @@ fi popd # Crear la estructura del antiguo cliente initrd de OpenGnSys 0.10 -openGnsysOldClientCreate -if [ $? -ne 0 ]; then - errorAndLog "Warning: cannot create old initrd client" -fi +#openGnsysOldClientCreate +#if [ $? -ne 0 ]; then +# errorAndLog "Warning: cannot create old initrd client" +#fi # Crear la estructura del cliente de OpenGnSys 1.0 openGnsysClientCreate if [ $? -ne 0 ]; then diff --git a/installer/opengnsys_uninstall.sh b/installer/opengnsys_uninstall.sh index 74b3c8f5..d9d2d98d 100755 --- a/installer/opengnsys_uninstall.sh +++ b/installer/opengnsys_uninstall.sh @@ -45,9 +45,12 @@ for dir in $OPENGNSYS/*; do fi done rm -f /etc/init.d/opengnsys /etc/default/opengnsys +# Comentar recursos de OpenGnSys en Samba. +perl -pi -e "s/^ *include \= \/etc\/samba\/smb-og.conf/\; include \= \/etc\/samba\/smb-og.conf/" /etc/samba/smb.conf +/etc/init.d/smbd restart # Tareas manuales a realizar después de desinstalar. echo "Manual tasks:" echo "- You may stop or uninstall manually all other services" -echo " (DHCP, PXE, TFTP, NFS, Apache, MySQL)." +echo " (DHCP, PXE, TFTP, NFS/Samba, Apache, MySQL)." echo "- Delete repository directory \"$OPENGNSYS/$OGIMG\"" -- cgit v1.2.3-18-g5258 From c1e00e4d9169a59f4d89f98c62993b8afa10ef8c Mon Sep 17 00:00:00 2001 From: ramon Date: Wed, 2 Mar 2011 18:52:51 +0000 Subject: Rama version1.0: * Corrección algunas erratas en el instalador. * Preparar instalador para ser usado en otras distribuciones además de Ubuntu. * Primeros pasos con el actualizador de la versión 1.0. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1527 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_installer.sh | 28 +++++++----- installer/opengnsys_update.sh | 92 +++++++++++++++++++++++++--------------- 2 files changed, 74 insertions(+), 46 deletions(-) diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 051f448f..db2d319f 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -27,6 +27,16 @@ then exit 1 fi +# Detectar sistema operativo del servidor (debe soportar LSB). +OSDISTRIB=$(lsb_release -is 2>/dev/null) +# Array con las dependencias que deben estar instaladas, según de la distribución detectada. +case "$OSDISTRIB" in + Ubuntu) DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql nfs-kernel-server dhcp3-server bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba unzip netpipes debootstrap schroot squashfs-tools ) + ;; + *) echo "ERROR: Distribution not supported by OpenGnSys." + exit 1 ;; +esac + # Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). PROGRAMDIR=$(readlink -e $(dirname "$0")) if [ -d "$PROGRAMDIR/../installer" ]; then @@ -42,9 +52,6 @@ mkdir -p $WORKDIR INSTALL_TARGET=/opt/opengnsys LOG_FILE=/tmp/opengnsys_installation.log -# Array con las dependencias -DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql nfs-kernel-server dhcp3-server bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba unzip netpipes debootstrap subversion schroot squashfs-tools ) - # Base de datos OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogAdmBD.sql @@ -684,7 +691,7 @@ function smbConfigure() backupFile /etc/samba/smb.conf # Copiar plantailla de recursos para OpenGnSys - sed -e "s/OPENGNSYSDIR/$INSTALL_TARGET/g" \ + sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \ $WORKDIR/opengnsys/server/etc/smb-og.conf.tmpl > /etc/samba/smb-og.conf # Configurar y recargar Samba" perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/; s/^\; *include \=.*$/ include \= \/etc\/samba\/smb-og.conf/" /etc/samba/smb.conf @@ -953,7 +960,7 @@ function servicesCompilation () #################################################################### # Copiar carpeta de Interface -function InterfaceAdm () +function copyInterfaceAdm () { local hayErrores=0 @@ -975,7 +982,7 @@ function InterfaceAdm () # Crear antiguo cliente initrd para OpenGnSys 0.10 function openGnsysOldClientCreate() { - local OSDISTRIB OSCODENAME + local OSCODENAME local hayErrores=0 @@ -991,7 +998,6 @@ function openGnsysOldClientCreate() fi # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). - OSDISTRIB=$(lsb_release -is 2>/dev/null) OSCODENAME=$(lsb_release -cs 2>/dev/null) if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME." @@ -1176,9 +1182,9 @@ if [ $? -ne 0 ]; then fi # Copiar carpeta Interface entre administración y motor de clonación. -InterfaceAdm +copyInterfaceAdm if [ $? -ne 0 ]; then - errorAndLog "Error while copying Interface Administration" + errorAndLog "Error while copying Administration Interface" exit 1 fi @@ -1192,10 +1198,10 @@ if [ $? -ne 0 ]; then exit 1 fi -# Configuración SMB +# Configuración Samba smbConfigure if [ $? -ne 0 ]; then - errorAndLog "Error while configuring nfs server!" + errorAndLog "Error while configuring Samba server!" exit 1 fi diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index adb880cd..2faf3c25 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -6,6 +6,9 @@ #@version 0.9 - basado en opengnsys_installer.sh #@author Ramón Gómez - ETSII Univ. Sevilla #@date 2010/01/27 +#@version 1.0 - adaptación a OpenGnSys 1.0 +#@author Ramón Gómez - ETSII Univ. Sevilla +#@date 2011/03/02 #*/ @@ -18,12 +21,12 @@ fi # Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). PROGRAMDIR=$(readlink -e $(dirname "$0")) -DEPS="rsync gcc ctorrent" +DEPS="build-essential g++-multilib rsync ctorrent samba unzip netpipes debootstrap schroot squashfs-tools" if [ -d "$PROGRAMDIR/../installer" ]; then USESVN=0 else USESVN=1 - SVN_URL=http://www.opengnsys.es/svn/trunk + SVN_URL=http://www.opengnsys.es/svn/branches/version1.0 DEPS="$DEPS subversion" fi @@ -117,22 +120,22 @@ function installDependencies () { if [ $# = 0 ]; then echoAndLog "${FUNCNAME}(): no deps needed." - else - while [ $# -gt 0 ]; do - dpkg -s $1 &>/dev/null | grep Status | grep -qw install - if [ $? -ne 0 ]; then - INSTALLDEPS="$INSTALLDEPS $1" - fi - shift - done - if [ -n "$INSTALLDEPS" ]; then - apt-get update && apt-get install $INSTALLDEPS - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): cannot install some dependencies: $INSTALLDEPS." - return 1 - fi - fi - fi + else + while [ $# -gt 0 ]; do + dpkg -s $1 &>/dev/null | grep Status | grep -qw install + if [ $? -ne 0 ]; then + INSTALLDEPS="$INSTALLDEPS $1" + fi + shift + done + if [ -n "$INSTALLDEPS" ]; then + apt-get update && apt-get install $INSTALLDEPS + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): cannot install some dependencies: $INSTALLDEPS." + return 1 + fi + fi + fi } @@ -213,6 +216,7 @@ function updateWebFiles() rsync --exclude .svn -irplt $WORKDIR/opengnsys/admin/WebConsole $INSTALL_TARGET ERRCODE=$? mv $INSTALL_TARGET/WebConsole $INSTALL_TARGET/www + unzip -o $WORKDIR/opengnsys/admin/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax if [ $ERRCODE != 0 ]; then errorAndLog "${FUNCNAME}(): Error updating web files." exit 1 @@ -292,22 +296,11 @@ function createDirs() # Copia ficheros de configuración y ejecutables genéricos del servidor. function updateServerFiles () { - local SOURCES=( client/boot/initrd-generator \ - client/boot/upgrade-clients-udeb.sh \ - client/boot/udeblist.conf \ - client/boot/udeblist-jaunty.conf \ - client/boot/udeblist-karmic.conf \ - client/boot/udeblist-lucid.conf \ - client/boot/udeblist-maverick.conf \ - repoman/bin \ + # No copiar ficheros del antiguo cliente Initrd + local SOURCES=( repoman/bin \ + server/bin \ doc ) - local TARGETS=( bin/initrd-generator \ - bin/upgrade-clients-udeb.sh \ - etc/udeblist.conf \ - etc/udeblist-jaunty.conf \ - etc/udeblist-karmic.conf \ - etc/udeblist-lucid.conf \ - etc/udeblist-maverick.conf \ + local TARGETS=( bin \ bin \ doc ) @@ -338,7 +331,7 @@ function recompileClient () # Compilar OpenGnSys Client echoAndLog "${FUNCNAME}(): recompiling OpenGnSys Client" pushd $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient - make && mv ogAdmClient ../../../client/nfsexport/bin + make && mv ogAdmClient ../../../client/shared/bin if [ $? -ne 0 ]; then echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Client" hayErrores=1 @@ -353,7 +346,8 @@ function recompileClient () ### Funciones instalacion cliente opengnsys #################################################################### -function updateClient() +# Actualizar antiguo cliente Initrd. +function updateOldClient() { local OSDISTRIB OSCODENAME @@ -409,6 +403,32 @@ function updateClient() return $hayErrores } +# Actualizar nuevo cliente para OpenGnSys 1.0 +function updateClient() +{ + local DOWNLOADURL=http://www.opengnsys.es/downloads + local tmpfile=/tmp/ogclient.tgz + + echoAndLog "${FUNCNAME}(): Loading Client" + # Descargar y descomprimir cliente ogclient + wget $DOWNLOADURL/20 -O $tmpfile + wget $DOWNLOADURL/21 -O - >> $tmpfile + wget $DOWNLOADURL/22 -O - >> $tmpfile + if [ ! -s $tmpfile ]; then + errorAndLog "${FUNCNAME}(): Error loading client files" + return 1 + fi + echoAndLog "${FUNCNAME}(): Extranting Client files" + tar xzvf $tmpfile -C $INSTALL_TARGET/tftpboot + rm -f $tmpfile + # Usar la versión más reciente del Kernel y del Initrd para el cliente. + ln $(ls $INSTALL_TARGET/tftpboot/ogclient/vmlinuz-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz + ln $(ls $INSTALL_TARGET/tftpboot/ogclient/initrd.img-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img + # Establecer los permisos. + chmod -R 755 $INSTALL_TARGET/tftpboot/ogclient + chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/tftpboot/ogclient + echoAndLog "${FUNCNAME}(): Client update successfully" +} ##################################################################### @@ -470,6 +490,8 @@ makeDoxygenFiles # Creando la estructura del cliente recompileClient +# NO se actualiza el antiguo cliente Initrd +#updateOldClient updateClient if [ $? -ne 0 ]; then errorAndLog "Error updating clients" -- cgit v1.2.3-18-g5258 From 9ef89207ae2380064ee9c3786b9a16855b5c089a Mon Sep 17 00:00:00 2001 From: adv Date: Tue, 8 Mar 2011 08:59:45 +0000 Subject: version1.0 opengnsysClientCopyFiles (). copy el directorio shared ticket:313 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1530 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_installer.sh | 58 ++++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index db2d319f..6f077109 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -979,23 +979,57 @@ function copyInterfaceAdm () ### Funciones instalacion cliente opengnsys #################################################################### -# Crear antiguo cliente initrd para OpenGnSys 0.10 -function openGnsysOldClientCreate() +function openGnsysClientCopyFiles() { - local OSCODENAME - local hayErrores=0 echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." - cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client - find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null + cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while copying client estructure" + hayErrores=1 + fi + find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." - mkdir -p $INSTALL_TARGET/client/lib/engine/bin - cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + mkdir -p $INSTALL_TARGET/client/lib/engine/bin + cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while copying engine files" hayErrores=1 fi + + if [ $hayErrores -eq 0 ]; then + echoAndLog "${FUNCNAME}(): client copy files success." + else + errorAndLog "${FUNCNAME}(): client copy files with errors" + fi + + return $hayErrores +} + + + + +# Crear antiguo cliente initrd para OpenGnSys 0.10 +function openGnsysOldClientCreate() +{ + local OSCODENAME + + local hayErrores=0 + +#sustituido en la funcion openGnsysClientCopyFiles + #echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." + # cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client + # find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null + #echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." + # mkdir -p $INSTALL_TARGET/client/lib/engine/bin + # cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + #if [ $? -ne 0 ]; then + # errorAndLog "${FUNCNAME}(): error while copying engine files" + # hayErrores=1 + #fi +# #sustituido en la funcion openGnsysClientCopyFiles # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). OSCODENAME=$(lsb_release -cs 2>/dev/null) @@ -1291,11 +1325,19 @@ fi popd + +# Crear la estructura de los accesos al servidor desde el cliente (shared) +openGnsysClientCopyFiles +if [ $? -ne 0 ]; then + errorAndLog "Error creating client structure" +fi + # Crear la estructura del antiguo cliente initrd de OpenGnSys 0.10 #openGnsysOldClientCreate #if [ $? -ne 0 ]; then # errorAndLog "Warning: cannot create old initrd client" #fi + # Crear la estructura del cliente de OpenGnSys 1.0 openGnsysClientCreate if [ $? -ne 0 ]; then -- cgit v1.2.3-18-g5258 From 7cc6687b7fcb82487a3953e8e0aaa67f60cb3e8e Mon Sep 17 00:00:00 2001 From: adv Date: Tue, 8 Mar 2011 09:02:09 +0000 Subject: version1.0 openGnsysCopyClientFiles() ticket:313 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1531 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_installer.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 6f077109..3642747e 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -979,7 +979,7 @@ function copyInterfaceAdm () ### Funciones instalacion cliente opengnsys #################################################################### -function openGnsysClientCopyFiles() +function openGnsysCopyClientFiles() { local hayErrores=0 @@ -1018,7 +1018,7 @@ function openGnsysOldClientCreate() local hayErrores=0 -#sustituido en la funcion openGnsysClientCopyFiles +#sustituido en la funcion openGnsysCopyClientFiles #echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." # cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client # find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null @@ -1029,7 +1029,7 @@ function openGnsysOldClientCreate() # errorAndLog "${FUNCNAME}(): error while copying engine files" # hayErrores=1 #fi -# #sustituido en la funcion openGnsysClientCopyFiles +# #sustituido en la funcion openGnsysCopyClientFiles # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). OSCODENAME=$(lsb_release -cs 2>/dev/null) @@ -1327,7 +1327,7 @@ popd # Crear la estructura de los accesos al servidor desde el cliente (shared) -openGnsysClientCopyFiles +openGnsysCopyClientFiles if [ $? -ne 0 ]; then errorAndLog "Error creating client structure" fi -- cgit v1.2.3-18-g5258 From efb517d935b18c4d37a839744631a8fcd1aca21a Mon Sep 17 00:00:00 2001 From: adv Date: Tue, 8 Mar 2011 09:54:04 +0000 Subject: version 1.0: ticket:314 plantilla smb compatible con el recurso smb [ogboot] ---> antiguo [tftpboot] git-svn-id: https://opengnsys.es/svn/branches/version1.0@1532 a21b9725-9963-47de-94b9-378ad31fedc9 --- server/etc/smb-og.conf.tmpl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server/etc/smb-og.conf.tmpl b/server/etc/smb-og.conf.tmpl index 6256af7e..b06cc35a 100644 --- a/server/etc/smb-og.conf.tmpl +++ b/server/etc/smb-og.conf.tmpl @@ -1,3 +1,11 @@ +[tftpboot] + comment = el directorio fisico ogclient debe estar como escritura + writeable = no + read only = yes + #locking = no + path = /var/lib/tftpboot + guest ok = no + [ogboot] comment = OpenGnSys Boot writeable = no -- cgit v1.2.3-18-g5258 From d47d38dba8beb01a077c176d95f887738af98c97 Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 8 Mar 2011 10:28:12 +0000 Subject: Rama version1.0: instalador no configura NFS, no duplica el recurso {{{tftpboot}}} en Samba y corrección de erratas. Close #313, #314. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1533 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_installer.sh | 41 +++++++++++++++------------------------- server/etc/smb-og.conf.tmpl | 14 +++++++------- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 3642747e..412dbf97 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -984,16 +984,16 @@ function openGnsysCopyClientFiles() local hayErrores=0 echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." - cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client - if [ $? -ne 0 ]; then + cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client + if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while copying client estructure" hayErrores=1 fi - find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null + find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." - mkdir -p $INSTALL_TARGET/client/lib/engine/bin - cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + mkdir -p $INSTALL_TARGET/client/lib/engine/bin + cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while copying engine files" hayErrores=1 @@ -1018,19 +1018,6 @@ function openGnsysOldClientCreate() local hayErrores=0 -#sustituido en la funcion openGnsysCopyClientFiles - #echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." - # cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client - # find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null - #echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." - # mkdir -p $INSTALL_TARGET/client/lib/engine/bin - # cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin - #if [ $? -ne 0 ]; then - # errorAndLog "${FUNCNAME}(): error while copying engine files" - # hayErrores=1 - #fi -# #sustituido en la funcion openGnsysCopyClientFiles - # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). OSCODENAME=$(lsb_release -cs 2>/dev/null) if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then @@ -1139,9 +1126,9 @@ function installationSummary() echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)" echoAndLog "Installation directory: $INSTALL_TARGET" echoAndLog "Repository directory: $INSTALL_TARGET/images" - echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf" - echoAndLog "TFTP configuracion directory: /var/lib/tftpboot" - echoAndLog "Samba configuracion directory: /etc/samba" + echoAndLog "DHCP configuration file: /etc/dhcp3/dhcpd.conf" + echoAndLog "TFTP configuration directory: /var/lib/tftpboot" + echoAndLog "Samba configuration directory: /etc/samba" echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER" echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD" @@ -1226,11 +1213,12 @@ fi tftpConfigure # Configuración NFS -nfsConfigure -if [ $? -ne 0 ]; then - errorAndLog "Error while configuring nfs server!" - exit 1 -fi +#### (descomentar las siguientes líneas para exportar servicios por NFS) +#nfsConfigure +#if [ $? -ne 0 ]; then +# errorAndLog "Error while configuring nfs server!" +# exit 1 +#fi # Configuración Samba smbConfigure @@ -1333,6 +1321,7 @@ if [ $? -ne 0 ]; then fi # Crear la estructura del antiguo cliente initrd de OpenGnSys 0.10 +#### (descomentar las siguientes líneas para generar cliente initrd) #openGnsysOldClientCreate #if [ $? -ne 0 ]; then # errorAndLog "Warning: cannot create old initrd client" diff --git a/server/etc/smb-og.conf.tmpl b/server/etc/smb-og.conf.tmpl index b06cc35a..1ee7024c 100644 --- a/server/etc/smb-og.conf.tmpl +++ b/server/etc/smb-og.conf.tmpl @@ -6,13 +6,13 @@ path = /var/lib/tftpboot guest ok = no -[ogboot] - comment = OpenGnSys Boot - writeable = no - read only = yes - #locking = no - path = /var/lib/tftpboot - guest ok = no +#[ogboot] +# comment = OpenGnSys Boot +# writeable = no +# read only = yes +# #locking = no +# path = /var/lib/tftpboot +# guest ok = no [ogclient] comment = OpenGnSys Client -- cgit v1.2.3-18-g5258 From 52695928bba5f51b3bc32c8219ee9efa76916073 Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 8 Mar 2011 16:21:37 +0000 Subject: Rama version1.0: Menú de ejemplo para arranque de clientes cumple norma HTML e incluye opciones de apagado (gracias a Mario Fernández, ''mariof ARROBA us.es''). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1534 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/menus/images/linux_peque.png | Bin 0 -> 2828 bytes admin/WebConsole/menus/images/poweroff.png | Bin 0 -> 3477 bytes admin/WebConsole/menus/images/xp_peque.png | Bin 0 -> 4324 bytes admin/WebConsole/menus/menuaula1.html | 37 ------------- admin/WebConsole/menus/menuejemplo.html | 74 ++++++++++++++++++++++++++ 5 files changed, 74 insertions(+), 37 deletions(-) create mode 100644 admin/WebConsole/menus/images/linux_peque.png create mode 100644 admin/WebConsole/menus/images/poweroff.png create mode 100644 admin/WebConsole/menus/images/xp_peque.png delete mode 100644 admin/WebConsole/menus/menuaula1.html create mode 100644 admin/WebConsole/menus/menuejemplo.html diff --git a/admin/WebConsole/menus/images/linux_peque.png b/admin/WebConsole/menus/images/linux_peque.png new file mode 100644 index 00000000..96b6c677 Binary files /dev/null and b/admin/WebConsole/menus/images/linux_peque.png differ diff --git a/admin/WebConsole/menus/images/poweroff.png b/admin/WebConsole/menus/images/poweroff.png new file mode 100644 index 00000000..e494fddb Binary files /dev/null and b/admin/WebConsole/menus/images/poweroff.png differ diff --git a/admin/WebConsole/menus/images/xp_peque.png b/admin/WebConsole/menus/images/xp_peque.png new file mode 100644 index 00000000..9b46e50c Binary files /dev/null and b/admin/WebConsole/menus/images/xp_peque.png differ diff --git a/admin/WebConsole/menus/menuaula1.html b/admin/WebConsole/menus/menuaula1.html deleted file mode 100644 index b24b101f..00000000 --- a/admin/WebConsole/menus/menuaula1.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - -
- - - - - - - -
-

Menú de opciones

- 1.- Arrancar Windows XP - Arranque normal sin modificaciones. -
2.- Reinstalar Windows XP
El proceso de instalación puede tardar unos minutos. -
Durante la instalación se bloquean teclado y ratón.
- - -
- 3.- Arrancar Ubuntu 9.04 - Arranque normal sin modificaciones. -

4.- Reinstalar Ubuntu 9.04
-

El proceso de instalación puede tardar unos minutos. -
Durante la instalación se bloquean teclado y ratón. - - -
- - diff --git a/admin/WebConsole/menus/menuejemplo.html b/admin/WebConsole/menus/menuejemplo.html new file mode 100644 index 00000000..78701260 --- /dev/null +++ b/admin/WebConsole/menus/menuejemplo.html @@ -0,0 +1,74 @@ + + + + + + Menú de inicio de los equipos OpenGnSys + + + + + + + + +

Menú de opciones

+
+
Arrancar Windows.
+
Arranque normal de Windows sin modificaciones.
+
Instalar Windows.
+
El proceso de instalación tardará unos minutos.
+
+ +
+
Arrancar GNU/Linux.
+
Arranque normal de GNU/Linux sin modificaciones.
+
Instalar GNU/Linux.
+
El proceso de instalación tardará unos minutos.
+
+ +
+
Apagar.
+
Apagar el ordenador.
+
Reiniciar.
+
Reiniciar el ordenador.
+
+ + -- cgit v1.2.3-18-g5258 From 62ccd9bd6da61d6d73045e238c68a93ef1efe1e6 Mon Sep 17 00:00:00 2001 From: adv Date: Thu, 10 Mar 2011 00:13:03 +0000 Subject: cloneRemoteFromMaster (engine,asistenteweb) ademas de multicast por unicast ticket:315 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1537 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../asistentes/AsistenteCloneRemotePartition.php | 2 +- .../includes/asistentes/AyudanteFormularios.php | 38 ++++ .../asistentes/formCloneRemotePartition.php | 46 ++--- admin/WebConsole/asistentes/jscripts/asistentes.js | 13 +- client/engine/Protocol.lib | 210 +++++++++++++++++++++ client/shared/scripts/cloneRemoteFromMaster | 71 +++++-- 6 files changed, 324 insertions(+), 56 deletions(-) diff --git a/admin/WebConsole/asistentes/AsistenteCloneRemotePartition.php b/admin/WebConsole/asistentes/AsistenteCloneRemotePartition.php index 839dfb2b..6966d9d7 100644 --- a/admin/WebConsole/asistentes/AsistenteCloneRemotePartition.php +++ b/admin/WebConsole/asistentes/AsistenteCloneRemotePartition.php @@ -93,7 +93,7 @@ switch($ambito){ - + diff --git a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php index d3569aa3..e1164221 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php +++ b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php @@ -86,6 +86,44 @@ return($SelectHtml); } +function htmlForm_unicast($cmd,$ambito,$idambito) +{ + +//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; +if ($ambito == 4) +{ +$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaula=' . $idambito ; +} + +if ($ambito == 8) +{ +$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where grupoid=' . $idambito ; +} +if ($ambito == 16) +{ +$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaula=' . $idambito ; +} + + $SelectHtml=""; + $rs=new Recordset; + $rs->Comando=&$cmd; + + if ($rs->Abrir()){ + $rs->Primero(); + while (!$rs->EOF){ + $ucastclient.= $rs->campos["ip"] . ":" ; + $rs->Siguiente(); + } + $rs->Cerrar(); + } + $SelectHtml.='Puerto Unicast :
'; + $SelectHtml.='Clientes Posibles :
'; + + return($SelectHtml); +} + + + function htmlOPTION_equipos($cmd,$ambito,$idambito) { diff --git a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php index 510d3a55..f7a3d3db 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php @@ -24,46 +24,24 @@ - +
- - - - - +
+ Elige el metodo de transferencia + +
- - - - - - - + + - - - - - + + - - - - - - - - - - - - - - - - diff --git a/admin/WebConsole/asistentes/jscripts/asistentes.js b/admin/WebConsole/asistentes/jscripts/asistentes.js index e2b97903..2ac48d9c 100644 --- a/admin/WebConsole/asistentes/jscripts/asistentes.js +++ b/admin/WebConsole/asistentes/jscripts/asistentes.js @@ -9,7 +9,18 @@ // *********************************************************************************************************** function codeCloneRemotePartition(form){ -form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value; +switch (form.idmetodo.value) +{ + case "MULTICAST": + protocol="MULTICAST " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " "; + break; + case "UNICAST": + protocol="UNICAST " + form.ucastport.value + ":" + form.ucastclient.value + " "; + break; +} +//form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value; +form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + protocol + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value; + } function codeDeployImage(form){ diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib index 149353e1..96073ad2 100755 --- a/client/engine/Protocol.lib +++ b/client/engine/Protocol.lib @@ -8,6 +8,216 @@ #@warning License: GNU GPLv3+ #*/ +#/** +# ogUcastSyntax +#@brief Función para generar la instrucción de ejucucion la transferencia de datos unicast +#@param 1 Tipo de operación [ SENDPARTITION RECEIVERPARTITION SENDFILE RECEIVERFILE ] +#@param 2 Sesion Unicast +#@param 3 Dispositivo (opción PARTITION) o fichero(opción FILE) que será enviado. +#@param 4 Tools de clonación (opcion PARTITION) +#@param 5 Tools de compresion (opcion PARTITION) +#@return instrucción para ser ejecutada. +#@exception OG_ERR_FORMAT formato incorrecto. +#@note Requisitos: mbuffer +#@todo +#@version 1.0 - +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2011/03/09 +#*/ ## +#/** +# + +##################### FUNCIONES UNICAST ################ + +function ogUcastSyntax () +{ + +local PARM SESSION SESSIONPARM MODE PORTBASE PERROR +local ADDRESS +local TOOL LEVEL DEVICE MBUFFER SYNTAXSERVER SYNTAXCLIENT + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" -o "$2" == "help" ]; then + ogHelp "$FUNCNAME SENDPARTITION str_sessionSERVER str_device str_tools str_level" \ + "$FUNCNAME RECEIVERPARTITION str_sessionCLIENT str_device str_tools str_level "\ + "$FUNCNAME SENDFILE str_sessionSERVER str_file "\ + "$FUNCNAME RECEIVERFILE str_sessionCLIENT str_file " \ + "sessionServer syntax: portbase:ipCLIENT-1:ipCLIENT-2:ipCLIENT-N " \ + "sessionServer example: 8000:172.17.36.11:172.17.36.12" \ + "sessionClient syntax: portbase:ipMASTER " \ + "sessionClient example: 8000:172.17.36.249 " + return +fi +PERROR=0 + +#TODO: controlar que mbuffer esta disponible para los clientes. + + +# Error si no se reciben $PARM parámetros. +echo "$1" | grep "PARTITION" > /dev/null && PARM=5 || PARM=3 +[ "$#" -eq "$PARM" ] || ogRaiseError $OG_ERR_FORMAT "sin parametros"|| return $? + + +# 1er param check +ogCheckStringInGroup "$1" "SENDPARTITION sendpartition RECEIVERPARTITION receiverpartition SENDFILE sendfile RECEIVERFILE receiverfile" || ogRaiseError $OG_ERR_FORMAT "1st param: $1" || PERROR=1 #return $? + +# 2º param check +echo "$1" | grep "SEND" > /dev/null && MODE=server || MODE=client + +######### No controlamos el numero de elementos de la session unicast porque en el master es variable en numero +#TODO: diferenciamos los paramatros especificos de la sessión unicast +#SI: controlamos todos los parametros de la sessión unicast. +#[ $MODE == "client" ] && SESSIONPARM=2 || SESSIONPARM=6 +OIFS=$IFS; IFS=':' ; SESSION=($2); IFS=$OIFS + + +#[[ ${#SESSION[*]} == $SESSIONPARM ]] || ogRaiseError $OG_ERR_FORMAT "parametros session multicast no completa" || PERROR=2# return $? + + +#controlamos el PORTBASE de la sesion. Comun.- +PORTBASE=${SESSION[0]} +ogCheckStringInGroup ${SESSION[0]} "8000 8001 8002 8003 8004 8005" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $? + +if [ $MODE == "server" ] +then + SIZEARRAY=${#SESSION[@]} + for (( i = 1 ; i < $SIZEARRAY ; i++ )) + do + ADDRESS="$ADDRESS -O ${SESSION[$i]}:$PORTBASE" + #echo " -O ${SESSION[$i]}:$PORTBASE" + done + +else + ADDRESS=${SESSION[1]}:${PORTBASE} +fi + +#3er param check - que puede ser un dispositvo o un fichero. +#ogGetPath "$3" > /dev/null || ogRaiseError $OG_ERR_NOTFOUND " device or file $3" || PERROR=9 #return $? +DEVICE=$3 + +#4 y 5 param check . solo si es sobre particiones. +if [ "$PARM" == "5" ] +then + # 4 param check + ogCheckStringInGroup "$4" "partclone partimage ntfsclone" || ogRaiseError $OG_ERR_NOTFOUND " herramienta $4 no soportada" || PERROR=10 #return $? + TOOL=$4 + ogCheckStringInGroup "$5" "lzop gzip 0 1" || ogRaiseError $OG_ERR_NOTFOUND " compresor $5 no valido" || PERROR=11 #return $? + LEVEL=$5 +fi + + +[ "$PERROR" -gt "0" ] && return 1 + +# Generamos la instrucción base de unicast -Envio,Recepcion- +SYNTAXSERVER="mbuffer $ADDRESS" +SYNTAXCLIENT="mbuffer -I $ADDRESS " + + +case "$1" in +SENDPARTITION) + PROG1=`ogCreateImageSyntax $DEVICE " " $TOOL $LEVEL | awk -F"|" '{print $1 "|" $3}' | tr -d ">"` + echo "$PROG1 | $SYNTAXSERVER" + ;; + RECEIVERPARTITION) + COMPRESSOR=`ogRestoreImageSyntax " " $DEVICE $TOOL $LEVEL | awk -F\| '{print $1}'` + TOOLS=`ogRestoreImageSyntax " " $DEVICE $TOOL $LEVEL | awk -F\| '{print $NF}'` + echo "$SYNTAXCLIENT | $COMPRESSOR | $TOOLS " + ;; + SENDFILE) + echo "$SYNTAXSERVER --file $3" + ;; + RECEIVERFILE) + echo "$SYNTAXCLIENT --file $3" + ;; + *) + ;; +esac +} + + +#/** +# ogUcastSendPartition +#@brief Función para enviar el contenido de una partición a multiples particiones remotas usando UNICAST. +#@param +#@param +#@param +#@return +#@exception +#@note +#@todo: ogIsLocked siempre devuelve 1. crear ticket +#@version 0.1 - Integración para OpenGNSys. +#@author +#@date +#*/ ## + +ogUcastSendPartition () +{ + +# Variables locales +local PART COMMAND + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart SessionUNICAST-SERVER tools compresor" \ + "$FUNCNAME 1 1 8000:172.17.36.11:172.17.36.12 partclone lzop" + return +fi +# Error si no se reciben 5 parámetros. +[ "$#" == 5 ] || ogRaiseError $OG_ERR_FORMAT || return $? +#chequeamos la particion. +PART=$(ogDiskToDev "$1" "$2") || return $? + +#ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $? +ogUnmount $1 $2 + + +#generamos la instrucción a ejecutar. +COMMAND=`ogUcastSyntax SENDPARTITION "$3" $PART $4 $5` +echo $COMMAND +eval $COMMAND +} + +#/** +# ogUcastReceiverPartition +#@brief Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado por UNICAST. +#@param +#@param +#@param +#@return +#@exception +#@note +#@todo: +#@version 0.1 - Integración para OpenGNSys. +#@author +#@date +#*/ ## +ogUcastReceiverPartition () +{ +# Variables locales +local PART COMMAND + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart SessionMulticastCLIENT tools compresor" \ + "$FUNCNAME 1 1 8000:ipMASTER partclone lzop" + return +fi +# Error si no se reciben 5 parámetros. +[ "$#" == 5 ] || ogRaiseError $OG_ERR_FORMAT || return $? +#chequeamos la particion. +PART=$(ogDiskToDev "$1" "$2") || return $? + +#ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $? +ogUnmount $1 $2 + +#generamos la instrucción a ejecutar. +COMMAND=`ogUcastSyntax RECEIVERPARTITION "$3" $PART $4 $5` +echo $COMMAND +eval $COMMAND +} + + + #/** diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster index a755871f..1a3fd070 100755 --- a/client/shared/scripts/cloneRemoteFromMaster +++ b/client/shared/scripts/cloneRemoteFromMaster @@ -41,12 +41,12 @@ COMPRESOR=$8 TIME1=$SECONDS PROG="$(basename $0)" if [ $# -lt 1 ]; then - echo "cloneRemoteFromMaster ipmaster disk init session disk part tool comp" + echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp" exit 1 fi -if [ $# -lt 5 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ TORRENT|UNICAST | MULTICAST:npuerto ]" +if [ $# -lt 6 ]; then + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ipMaster SOURCE_disco SOURCE_particion [MULTICAT|UNICAST] SESSION TARGER_disck TARGET_partition" exit $? fi @@ -68,26 +68,33 @@ MASTERIP=$1 # contendor origen (disco particion o file) +PROTOCOL=$4 +# Controlamos si multicast o unicast. +case $PROTOCOL in + MULTICAST|multicast) + SESSIONMCASTSERVER=$5 + SESSIONMCASTCLIENT=`echo $5 | awk -F: '{print $1}'` + ;; + UNICAST|unicast) + SESSIONUCASTSERVER=$5 + SESSIONUCASTCLIENT=`echo $5 | awk -F: '{print $1}'`:$MASTERIP + ;; +esac -# IP destino: session multicast. -SESSIONMCASTSERVER=$4 -SESSIONMCASTCLIENT=`echo $4 | awk -F: '{print $1}'` # contenedor destino (disco particion) -DISKTARGET=$5 -PARTTARGET=$6 +DISKTARGET=$6 +PARTTARGET=$7 #herramienta de compresión. -TOOLCLONE=$7 -COMPRESOR=$8 +TOOLCLONE=$8 +COMPRESOR=$9 ###IMG=$(ogGetPath $2 $3.img) ###echo $IMG # Check command in Master (sendFile or sendPartition) -####if [ -n $IMG ] - case $MASTERIP in $HOSTIP) @@ -144,9 +151,20 @@ case $MASTERIP in fi echo "[25] ofreciendo informacion a los clientes-slaves" faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & - echo "[30] Enviando multicast " - echo ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR - ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR + + echo "[30] Enviando $PROTOCOL " + case $PROTOCOL in + MULTICAST|multicast) + echo ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR + ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR + ;; + UNICAST|unicast) + sleep 60 + echo "ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR" + ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR + ;; + esac + if [ $REDSIZE -lt $SIZE ]; then echo "[85] Redimensionar partición a $SIZE KB." ogSetPartitionSize $2 $3 $SIZE @@ -163,8 +181,11 @@ case $MASTERIP in REDSIZE=$(ogGetImageSize $2 $3) echo "[25] ofreciendo informacion a los clientes-slaves: $TOOLCLONE $COMPRESOR $REDSIZE" faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & - echo "[30] Enviando multicast: ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " + + echo "[30] Enviando $PROTOCOL:" + echo "ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER + pkill faucet ;; esac @@ -189,10 +210,20 @@ case $MASTERIP in # comprobamos que el tamaño de a imagen es menor que la del cliente. SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET) if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ] - then - echo -n "[30] Iniciando CLIENTE MULTICAST: " - echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR - ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" + then + echo "[30] Iniciando Cliente $PROTOCOL " + case $PROTOCOL in + MULTICAST|multicast) + echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR + ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" + ;; + UNICAST|unicast) + echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR + ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR + ;; + esac + + echo "[90] Extender sistema de archivos" ogExtendFs $DISKTARGET $PARTTARGET # Cambiar nombre en sistemas Windows. -- cgit v1.2.3-18-g5258 From a25cc03d19177aa7aab44c93c399dfbc6d077f64 Mon Sep 17 00:00:00 2001 From: ramon Date: Thu, 10 Mar 2011 09:28:43 +0000 Subject: Rama version1.0: * Nuevas funciones del motor de clonación {{{ogCreateMbrImage}}} y {{{ogRestoreMbrImage}}}, para clonar el MBR. * Documentación Doxygen de las funciones del motor para gestión de bloqueos de imágenes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1538 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/engine/Image.lib | 237 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 168 insertions(+), 69 deletions(-) diff --git a/client/engine/Image.lib b/client/engine/Image.lib index fcf2f7ce..af1bb474 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -4,66 +4,10 @@ #@brief Librería o clase Image #@class Image #@brief Funciones para creación, restauración y clonación de imágenes de sistemas. -#@version 0.9 +#@version 1.0 #@warning License: GNU GPLv3+ #*/ -# Bloquear imagen para creación. -function ogLockImage () -{ -# Variables locales -local IMGDIR - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ - "$FUNCNAME /opt/opengnsys/images/aula1/winxp.img" \ - "$FUNCNAME REPO /aula1/winxp.img" - return -fi -# Error si no se reciben 1 o 2 parámetros. -[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? -# Comprobar que existe directorio de imagen -IMGDIR=$(ogGetParentPath $@) || return $? -# Crear fichero de bloqueo. -touch $IMGDIR/$(basename "${!#}").lock -} - -# Desbloquear imagen (borrar fichero de bloqueo). -function ogUnlockImage () -{ -# Variables locales -local IMGDIR - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ - "$FUNCNAME /opt/opengnsys/images/aula1/winxp.img" \ - "$FUNCNAME REPO /aula1/winxp.img" - return -fi -# Error si no se reciben 1 o 2 parámetros. -[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? -# Borrar fichero de bloqueo para la imagen. -rm -f $(ogGetPath $@.lock) -} - -# Comprobar si el fichero de bloqueo para una imagen. -function ogIsImageLocked () -{ -# Variables locales -local IMGDIR - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ - "if $FUNCNAME /opt/opengnsys/images/aula1/winxp.img; then ...; fi" \ - "if $FUNCNAME REPO /aula1/winxp.img; then ...; fi" - return -fi -# Comprobar si existe el fichero de bloqueo. -test -n "$(ogGetPath $@.lock)" -} function ogPartcloneSyntax () @@ -360,10 +304,108 @@ return $ERRCODE } +#/** +# ogCreateMbrImage int_ndisk str_repo path_image +#@brief Crea una imagen a partir del sector de arranque de un disco. +#@param int_ndisk nº de orden del disco +#@param str_repo repositorio de imágenes (remoto o caché local) +#@param path_image camino de la imagen (sin extensión) +#@return (nada, por determinar) +#@note repo = { REPO, CACHE } +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#@exception OG_ERR_IMAGE error al crear la imagen del sistema. +#@version 0.9 - Versión en pruebas para OpenGNSys +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010/01/12 +#@version 1.0 - Adaptación a OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011/03/10 +#*/ ## +function ogCreateMbrImage () +{ +# Variables locales +local DISK IMGDIR IMGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk path_dir str_image" \ + "$FUNCNAME 1 REPO /aula1/mbr" + return +fi +# Error si no se reciben 3 parámetros. +[ $# -lt 3 ] && ogRaiseError $OG_ERR_FORMAT && return $? + +DISK=$(ogDiskToDev "$1") || return $? +IMGDIR=$(ogGetParentPath "$2" "$3") +[ -n "$IMGDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$2 $(dirname $3)" || return $? +IMGFILE="$IMGDIR/$(basename "$3").mbr" + +# Crear imagen del MBR. +dd if="$DISK" of="$IMGFILE" bs=512 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IMGFILE" || return $? +} + + +#/** +# ogIsImageLocked [str_repo] path_image +#@brief Comprueba si una imagen está bloqueada para uso exclusivo. +#@param str_repo repositorio de imágenes (opcional) +#@param path_image camino de la imagen (sin extensión) +#@return Código de salida: 0 - sin bloquear, 1 - bloqueada. +#@note repo = { REPO, CACHE } +#@exception OG_ERR_FORMAT formato incorrecto. +#@version 1.0 - Adaptación a OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011/03/10 +#*/ ## +function ogIsImageLocked () +{ +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ + "if $FUNCNAME /opt/opengnsys/images/aula1/winxp.img; then ...; fi" \ + "if $FUNCNAME REPO /aula1/winxp.img; then ...; fi" + return +fi +# Error si no se reciben 1 o 2 parámetros. +[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? +# Comprobar si existe el fichero de bloqueo. +test -n "$(ogGetPath $@.lock)" +} +#/** +# ogLockImage [str_repo] path_image +#@brief Bloquea una imagen para uso exclusivo. +#@param str_repo repositorio de imágenes (opcional) +#@param path_image camino de la imagen (sin extensión) +#@return Nada. +#@note Se genera un fichero con extensión .lock +#@note repo = { REPO, CACHE } +#@exception OG_ERR_FORMAT formato incorrecto. +#@version 1.0 - Adaptación a OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011/03/10 +#*/ ## +function ogLockImage () +{ +# Variables locales +local IMGDIR +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ + "$FUNCNAME /opt/opengnsys/images/aula1/winxp.img" \ + "$FUNCNAME REPO /aula1/winxp.img" + return +fi +# Error si no se reciben 1 o 2 parámetros. +[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? +# Comprobar que existe directorio de imagen +IMGDIR=$(ogGetParentPath $@) || return $? +# Crear fichero de bloqueo. +touch $IMGDIR/$(basename "${!#}").lock +} #/** @@ -446,6 +488,75 @@ return $ERRCODE } +#/** +# ogRestoreMbrImage str_repo path_image int_ndisk +#@brief Restaura la imagen del sector de arranque de un disco. +#@param str_repo repositorio de imágenes o caché local +#@param path_image camino de la imagen +#@param int_ndisk nº de orden del disco +#@return (por determinar) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados. +#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema. +#@version 0.9 - Primera versión en pruebas. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010/01/12 +#@version 1.0 - Adaptación a OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011/03/10 +#*/ ## +function ogRestoreMbrImage () +{ +# Variables locales +local DISK IMGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk" \ + "$FUNCNAME REPO /aula1/mbr 1" + return +fi +# Error si no se reciben 3 parámetros. +[ $# -lt 3 ] && ogRaiseError $OG_ERR_FORMAT && return $? +# Procesar parámetros. +DISK=$(ogDiskToDev "$3") || return $? +IMGFILE=$(ogGetPath "$1" "$2.mbr") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? + +# Restaurar imagen del MBR. +dd if="$IMGFILE" of="$DISK" bs=512 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IMGFILE" || return $? +} + + +#/** +# ogUnlockImage [str_repo] path_image +#@brief Desbloquea una imagen con uso exclusivo. +#@param str_repo repositorio de imágenes (opcional) +#@param path_image camino de la imagen (sin extensión) +#@return Nada. +#@note repo = { REPO, CACHE } +#@note Se elimina el fichero de bloqueo con extensión .lock +#@exception OG_ERR_FORMAT formato incorrecto. +#@version 1.0 - Adaptación a OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011/03/10 +#*/ ## +function ogUnlockImage () +{ +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME [str_repo] path_image" \ + "$FUNCNAME /opt/opengnsys/images/aula1/winxp.img" \ + "$FUNCNAME REPO /aula1/winxp.img" + return +fi +# Error si no se reciben 1 o 2 parámetros. +[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? + +# Borrar fichero de bloqueo para la imagen. +rm -f $(ogGetPath $@.lock) +} + + #/** # ogGetImageInfo filename #@brief muestra información sobre la imagen monolitica. @@ -662,15 +773,3 @@ case "$IMGTYPE" in esac } - -#### PRUEBAS -# Obtener tipo de imagen -function ogGetImageTypeUS () -{ -local IMGFILE IMGTYPE EXT -for EXT in img pgz; do - IMGFILE=$(ogGetPath "$1" "$2.$EXT") - [ -r "$IMGFILE" ] && IMGTYPE="$EXT" -done -echo $IMGTYPE -} -- cgit v1.2.3-18-g5258 From 6b65dfd9b27511209d28cc7fe9bf0df8a55db2e8 Mon Sep 17 00:00:00 2001 From: jcxifre Date: Thu, 10 Mar 2011 11:46:25 +0000 Subject: Corrección error al actualizar según ticket http://www.opengnsys.es/ticket/316 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1539 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_update.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 2faf3c25..3c8be109 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -198,7 +198,7 @@ function getNetworkSettings() function updateServicesStart(){ echoAndLog "${FUNCNAME}(): Updating /etc/init.d/opengnsys ..." - cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys + cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys if [ $? != 0 ]; then errorAndLog "${FUNCNAME}(): Error updating /etc/init.d/opengnsys" exit 1 -- cgit v1.2.3-18-g5258 From 45f1fe807f1396684b784aa2d67d1736ad888b10 Mon Sep 17 00:00:00 2001 From: jcxifre Date: Thu, 10 Mar 2011 12:57:43 +0000 Subject: No actualizaba la documentación del api ni el engine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1540 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_update.sh | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 3c8be109..004c378a 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -206,6 +206,37 @@ function updateServicesStart(){ echoAndLog "${FUNCNAME}(): /etc/init.d/opengnsys updated successfully." } +# Actualizar cliente OpenGnSys +function openGnsysCopyClientFiles() +{ + local hayErrores=0 + + echoAndLog "${FUNCNAME}(): Updating OpenGnSys Client files." + #cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client + rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while updating client structure" + hayErrores=1 + fi + find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null + + echoAndLog "${FUNCNAME}(): Updating OpenGnSys Cloning Engine files." + #mkdir -p $INSTALL_TARGET/client/lib/engine/bin + #cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while updating engine files" + hayErrores=1 + fi + + if [ $hayErrores -eq 0 ]; then + echoAndLog "${FUNCNAME}(): client files update success." + else + errorAndLog "${FUNCNAME}(): client files update with errors" + fi + + return $hayErrores +} # Copiar ficheros del OpenGnSys Web Console. function updateWebFiles() { @@ -259,8 +290,9 @@ function makeDoxygenFiles() errorAndLog "${FUNCNAME}(): unable to create Doxygen web files." return 1 fi + rm -fr "$INSTALL_TARGET/www/api" mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api" - rm -fr $INSTALL_TARGET/www/{man,perlmod,rtf} + rm -fr $INSTALL_TARGET/www/{man,perlmod,rtf} chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api echoAndLog "${FUNCNAME}(): Doxygen web files created successfully." } @@ -479,6 +511,9 @@ if [ $? -ne 0 ]; then exit 1 fi +# Actualizando cliente +openGnsysCopyClientFiles + # Copiando paqinas web updateWebFiles if [ $? -ne 0 ]; then -- cgit v1.2.3-18-g5258 From e4736676531eafffac1dc24bfa70bf20d50a0364 Mon Sep 17 00:00:00 2001 From: jcxifre Date: Thu, 10 Mar 2011 13:28:49 +0000 Subject: Corregidos: - error de cambio de permisos del fichero inexistente /opt/opengnsys/www/comandos/gestores/filescripts - error moviendo ogAdmClient git-svn-id: https://opengnsys.es/svn/branches/version1.0@1541 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_update.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 004c378a..0a3810a8 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -254,11 +254,9 @@ function updateWebFiles() fi restoreFile $INSTALL_TARGET/www/controlacceso.php # Cambiar permisos para ficheros especiales. - chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \ - $INSTALL_TARGET/www/includes \ - $INSTALL_TARGET/www/comandos/gestores/filescripts \ - $INSTALL_TARGET/www/images/iconos + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/includes $INSTALL_TARGET/www/images/iconos echoAndLog "${FUNCNAME}(): Web files updated successfully." + } # Copiar carpeta de Interface @@ -363,7 +361,7 @@ function recompileClient () # Compilar OpenGnSys Client echoAndLog "${FUNCNAME}(): recompiling OpenGnSys Client" pushd $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient - make && mv ogAdmClient ../../../client/shared/bin + make && mv ogAdmClient $INSTALL_TARGET/client/bin if [ $? -ne 0 ]; then echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Client" hayErrores=1 -- cgit v1.2.3-18-g5258 From 6ef9f238a9cd28577e00fe3b2cb2a42d34c99080 Mon Sep 17 00:00:00 2001 From: ramon Date: Thu, 10 Mar 2011 13:31:53 +0000 Subject: Versión 1.0: instalador y actualizador descargan el cliente desde un único fichero. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1542 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_installer.sh | 15 +++++++-------- installer/opengnsys_update.sh | 15 +++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 412dbf97..75941a31 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -1062,20 +1062,19 @@ function openGnsysOldClientCreate() function openGnsysClientCreate() { local DOWNLOADURL=http://www.opengnsys.es/downloads - local tmpfile=/tmp/ogclient.tgz + local FILENAME=ogclient-1.0-lucid-32bit.tar.gz + local TMPFILE=/tmp/$FILENAME echoAndLog "${FUNCNAME}(): Loading Client" # Descargar y descomprimir cliente ogclient - wget $DOWNLOADURL/20 -O $tmpfile - wget $DOWNLOADURL/21 -O - >> $tmpfile - wget $DOWNLOADURL/22 -O - >> $tmpfile - if [ ! -s $tmpfile ]; then - errorAndLog "${FUNCNAME}(): Error loading client files" + wget $DOWNLOADURL/$FILENAME -O $TMPFILE + if [ ! -s $TMPFILE ]; then + errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client" return 1 fi echoAndLog "${FUNCNAME}(): Extranting Client files" - tar xzvf $tmpfile -C $INSTALL_TARGET/tftpboot - rm -f $tmpfile + tar xzvf $TMPFILE -C $INSTALL_TARGET/tftpboot + rm -f $TMPFILE # Usar la versión más reciente del Kernel y del Initrd para el cliente. ln $(ls $INSTALL_TARGET/tftpboot/ogclient/vmlinuz-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz ln $(ls $INSTALL_TARGET/tftpboot/ogclient/initrd.img-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 0a3810a8..d72bc271 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -437,20 +437,19 @@ function updateOldClient() function updateClient() { local DOWNLOADURL=http://www.opengnsys.es/downloads - local tmpfile=/tmp/ogclient.tgz + local FILENAME=ogclient-1.0-lucid-32bit.tar.gz + local TMPFILE=/tmp/$FILENAME echoAndLog "${FUNCNAME}(): Loading Client" # Descargar y descomprimir cliente ogclient - wget $DOWNLOADURL/20 -O $tmpfile - wget $DOWNLOADURL/21 -O - >> $tmpfile - wget $DOWNLOADURL/22 -O - >> $tmpfile - if [ ! -s $tmpfile ]; then - errorAndLog "${FUNCNAME}(): Error loading client files" + wget $DOWNLOADURL/20 -O $TMPFILE + if [ ! -s $TMPFILE ]; then + errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client" return 1 fi echoAndLog "${FUNCNAME}(): Extranting Client files" - tar xzvf $tmpfile -C $INSTALL_TARGET/tftpboot - rm -f $tmpfile + tar xzvf $TMPFILE -C $INSTALL_TARGET/tftpboot + rm -f $TMPFILE # Usar la versión más reciente del Kernel y del Initrd para el cliente. ln $(ls $INSTALL_TARGET/tftpboot/ogclient/vmlinuz-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz ln $(ls $INSTALL_TARGET/tftpboot/ogclient/initrd.img-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img -- cgit v1.2.3-18-g5258 From 03882ae062062040efcf09cd831cc948dd88895d Mon Sep 17 00:00:00 2001 From: jcxifre Date: Tue, 15 Mar 2011 10:04:03 +0000 Subject: Solucionado error no descargaba correctamente el cliente. http://www.opengnsys.es/ticket/335 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1543 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_update.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index d72bc271..91649044 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -442,12 +442,12 @@ function updateClient() echoAndLog "${FUNCNAME}(): Loading Client" # Descargar y descomprimir cliente ogclient - wget $DOWNLOADURL/20 -O $TMPFILE + wget $DOWNLOADURL/$FILENAME -O $TMPFILE if [ ! -s $TMPFILE ]; then errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client" return 1 fi - echoAndLog "${FUNCNAME}(): Extranting Client files" + echoAndLog "${FUNCNAME}(): Extracting Client files" tar xzvf $TMPFILE -C $INSTALL_TARGET/tftpboot rm -f $TMPFILE # Usar la versión más reciente del Kernel y del Initrd para el cliente. -- cgit v1.2.3-18-g5258 From 095d19373edeb95f6a1ed879278bddc5845da092 Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 16 Mar 2011 21:45:34 +0000 Subject: branch uma: gestion de arranque { windows con bootOs, ogclient desde cache, marcas para deteccion automatica de SO pendiente de restaurar } git-svn-id: https://opengnsys.es/svn/branches/version1.0@1546 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/gestores/gestor_pxe_grub4dos.php | 66 ++++++++++++----------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php index cf062095..a82448f7 100755 --- a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php +++ b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php @@ -44,6 +44,8 @@ function ogBootServer($cmd,$optboot,$hostname) global $cmd; global $hostname; global $optboot; +global $retrun; +$return="\n"; $cmd->CreaParametro("@optboot",$optboot,0); $cmd->CreaParametro("@hostname",$hostname,0); $cmd->texto="update ordenadores set arranque=@optboot where nombreordenador=@hostname"; @@ -79,8 +81,8 @@ $rs->Cerrar(); #02.1 obtenemos nombre fichero mac $mac= substr($mac,0,2) . ":" . substr($mac,2,2) . ":" . substr($mac,4,2) . ":" . substr($mac,6,2) . ":" . substr($mac,8,2) . ":" . substr($mac,10,2); - $macfile="01-" . str_replace(":","-",strtolower($mac)); - $nombre_archivo="/var/lib/tftpboot/pxelinux.cfg/" . $macfile; + $macfile="01-" . str_replace(":","-",strtoupper($mac)); + $nombre_archivo="/var/lib/tftpboot/menu.lst/" . $macfile; ########## Escribimos el fichero mac @@ -90,8 +92,8 @@ if (!$gestion=fopen($nombre_archivo, 'w+')) return; } # cuales son los parametros del menu -fwrite($gestion, "DEFAULT syslinux/vesamenu.c32 \n"); -fwrite($gestion, "MENU TITLE Aplicacion OpenGnsys \n"); +fwrite($gestion, "color white/blue black/light-gray \n"); + $cmd->texto="SELECT itemboot.label, itemboot.kernel, itemboot.append, menuboot.timeout, menuboot.prompt, @@ -109,48 +111,48 @@ while (!$rs->EOF) fwrite($gestion, " \n"); fwrite($gestion, "LABEL " . $rs->campos['label'] . " \n"); fwrite($gestion, "MENU LABEL " . $rs->campos['label'] . " \n"); - if ( $rs->campos["default"] == true) - { - fwrite($gestion, "MENU DEFAULT \n"); - } + #if ( $rs->campos["default"] == true) + #{ + # fwrite($gestion, "MENU DEFAULT \n"); + #} # set netmask cird para ogclient - $isnfsroot=substr_count($rs->campos["append"] , "boot=oginit"); - if ($isnfsroot > 0) + $isogclient=substr_count($rs->campos["label"] , "og"); + if ($isogclient > 0) { $netmask=$netmask; + $kernel=$rs->campos["kernel"]; + $append=$rs->campos["append"]; + fwrite($gestion,"keeppxe \n"); + fwrite($gestion, $rs->campos["kernel"] . " " . $infohost . " \n"); + fwrite($gestion, $rs->campos["append"] . " \n"); + fwrite($gestion,"savedefault \n"); + fwrite($gestion,"boot \n"); + + # fwrite($gestion,"APPEND keeppxe --config-file='pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /boot/ogvmlinuz; kernel /boot/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on " . $infohost . " ogprotocol=smb og2nd=sqfs ; initrd /boot/oginitrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz ro boot=oginit vga=788 irqpoll acpi=on " . $infohost . " ogprotocol=smb og2nd=sqfs; initrd (pd)/ogclient/oginitrd.img; boot' \n"); + # keeppxe + # kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true IP=172.17.9.204:172.17.9.249:172.17.9.254:255.255.255.0:cte204:eth0:none repo=172.17.9.249 + # initrd (pd)/ogclient/oginitrd.img + # savedault + # boot + + } else { $netmask=netmask2cidr($netmask); + fwrite($gestion, $rs->campos["kernel"] . $return ); + fwrite($gestion, $rs->campos["append"] . " \n"); + } - $iseac=substr_count($rs->campos["append"] , "boot=oginit"); - $isinitrd=substr_count($rs->campos["append"] , "initrd.gz"); - if ($iseac > 0) - { - $kernel=$rs->campos["kernel"]; - $append=$rs->campos["append"]; - fwrite($gestion,"KERNEL grub.exe \n"); - fwrite($gestion,"APPEND keeppxe --config-file='pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /boot/ogvmlinuz; kernel /boot/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on " . $infohost . " ogprotocol=smb og2nd=sqfs ; initrd /boot/oginitrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz ro boot=oginit vga=788 irqpoll acpi=on " . $infohost . " ogprotocol=smb og2nd=sqfs; initrd (pd)/ogclient/oginitrd.img; boot' \n"); - } - elseif ($isinitrd > 0) - { - fwrite($gestion, $rs->campos["kernel"] . " \n"); - $append=$rs->campos["append"]; - fwrite($gestion, $append . " repo=" . $repo . " \n"); - } - else - { - fwrite($gestion, $rs->campos["kernel"] . " \n"); - fwrite($gestion, $rs->campos["append"] . " \n"); - } + - $prompt=$rs->campos["prompt"]; - $timeout=$rs->campos["timeout"]; + # $prompt=$rs->campos["prompt"]; + # $timeout=$rs->campos["timeout"]; $rs->Siguiente(); } -- cgit v1.2.3-18-g5258 From de87b1a74e877a2a8cc591352b4bd9acabfd838c Mon Sep 17 00:00:00 2001 From: ramon Date: Thu, 17 Mar 2011 12:12:35 +0000 Subject: Rama version1.0: Script para montar repositorio. Refs #334. git-svn-id: https://opengnsys.es/svn/branches/version1.0@1548 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/shared/etc/lang.es_ES.conf | 2 +- client/shared/etc/preinit/mountrepo.sh | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100755 client/shared/etc/preinit/mountrepo.sh diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf index 929c1288..a63da81a 100644 --- a/client/shared/etc/lang.es_ES.conf +++ b/client/shared/etc/lang.es_ES.conf @@ -42,7 +42,7 @@ MSG_LOADAPI="Cargar funciones del motor de clonación." MSG_LOADMODULES="Cargar módulos del kernel." MSG_LOADUDEBS="Cargar paquetes udeb." MSG_MAKELINKS="Crear enlaces simbólicos." -MSG_MOUNTREPO="Montar repositorio en modo %s." +MSG_MOUNTREPO="Montar repositorio por %s en modo %s." MSG_OFFLINEMODE="Modo de arranque sin conexión." MSG_HELP_ogBoot="Arranca un sistema operativo instalado." diff --git a/client/shared/etc/preinit/mountrepo.sh b/client/shared/etc/preinit/mountrepo.sh new file mode 100755 index 00000000..bf81dfe5 --- /dev/null +++ b/client/shared/etc/preinit/mountrepo.sh @@ -0,0 +1,25 @@ +#!/bin/bash +#/** +#@file mountrepo.sh +#@brief Script para montar el repositorio de datos remoto. +#@warning License: GNU GPLv3+ +#@version 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-03-17 +#*/ + +OGIMG=${OGIMG:-/opt/opengnsys/images} + +# TODO Revisar proceso de arranque para no montar 2 veces el repositorio. +if [ $ogactiveadmin == "true" ]; then + export boot=admin + umount $OGIMG 2>/dev/null + + protocol=${potocol:-"smb"} + printf "$MSG_MOUNTREPO\n" "$protocol" "$boot" + case "$protocol" in + nfs) mount.nfs ${ROOTSERVER}:$OGIMG $OGIMG -o rw,nolock ;; + smb) mount.cifs //${ROOTSERVER}/ogimages $OGIMG -o rw,relatime,serverino,acl,username=opengnsys,password=og ;; + esac +fi + -- cgit v1.2.3-18-g5258 From d34384901d1c1313fe2410378792971841dd2864 Mon Sep 17 00:00:00 2001 From: ramon Date: Thu, 17 Mar 2011 15:36:55 +0000 Subject: Rama version1.0: Modificado proceso de arranque de cliente para montar repositorio en escritura para el modo administrador. Close #334. git-svn-id: https://opengnsys.es/svn/branches/version1.0@1554 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/shared/etc/init/default.sh | 19 ++++++------------- client/shared/etc/preinit/defaultTESTING.sh | 12 ++++++------ client/shared/etc/preinit/mountrepo.sh | 2 +- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/client/shared/etc/init/default.sh b/client/shared/etc/init/default.sh index c8285c28..e5e1a34f 100755 --- a/client/shared/etc/init/default.sh +++ b/client/shared/etc/init/default.sh @@ -1,11 +1,11 @@ #!/bin/bash +# TODO Separar esta sección en otro script +# Lanzar servicios complementarios del cliente. echo -ne "og\nog\n" | passwd root - /etc/init.d/ssh restart #setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 - -ethtool -s $DEVICE wol g +ethtool -s $DEVICE wol g 2>/dev/null # Fichero de registro de incidencias (en el servidor; si no, en local). OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} @@ -13,20 +13,13 @@ OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} if ! touch $OGLOGFILE 2>/dev/null; then OGLOGFILE=/var/log/opengnsys.log fi - - - - -if [ $ogactiveadmin == "true" ] -then - export boot=admin -fi - +LOGLEVEL=5 # Arranque de OpenGnSys Client. if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then echo "$MSG_LAUNCHCLIENT" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 + [ $ogactiveadmin == "true" ] && boot=admin + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d $LOGLEVEL fi # Si fallo en cliente y modo "admin", cargar shell; si no, salir. diff --git a/client/shared/etc/preinit/defaultTESTING.sh b/client/shared/etc/preinit/defaultTESTING.sh index 73b75a0a..c825e84c 100755 --- a/client/shared/etc/preinit/defaultTESTING.sh +++ b/client/shared/etc/preinit/defaultTESTING.sh @@ -1,16 +1,16 @@ #!/bin/bash -# Para que no haya problemas con el interprete -#ln -fs /opt/opengnsys/bin/bash /bin/bash - +# Cargar entorno de OpenGnSys set -a - source /opt/opengnsys/etc/preinit/loadenviron.sh -for f in loadmodules.sh; do - $OGETC/preinit/$f +# Scripts de inicio. +for f in loadmodules mountrepo; do + $OGETC/preinit/$f.sh done +unset f +# Cargar cliente. if [ -f $OGETC/init/$OG_IP.sh ]; then $OGETC/init/$OG_IP.sh diff --git a/client/shared/etc/preinit/mountrepo.sh b/client/shared/etc/preinit/mountrepo.sh index bf81dfe5..aa0b9886 100755 --- a/client/shared/etc/preinit/mountrepo.sh +++ b/client/shared/etc/preinit/mountrepo.sh @@ -19,7 +19,7 @@ if [ $ogactiveadmin == "true" ]; then printf "$MSG_MOUNTREPO\n" "$protocol" "$boot" case "$protocol" in nfs) mount.nfs ${ROOTSERVER}:$OGIMG $OGIMG -o rw,nolock ;; - smb) mount.cifs //${ROOTSERVER}/ogimages $OGIMG -o rw,relatime,serverino,acl,username=opengnsys,password=og ;; + smb) mount.cifs //${ROOTSERVER}/ogimages $OGIMG -o rw,serverino,acl,username=opengnsys,password=og ;; esac fi -- cgit v1.2.3-18-g5258 From 6905c2a7fd1346cceda94558b3ce4238ae5780a1 Mon Sep 17 00:00:00 2001 From: ramon Date: Thu, 17 Mar 2011 15:57:25 +0000 Subject: Rama version1.0: Disponible script de interfaz web para cambiar de modo de montaje del repositorio. Refs #291. git-svn-id: https://opengnsys.es/svn/branches/version1.0@1555 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Interface/CambiarAcceso | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100755 admin/Interface/CambiarAcceso diff --git a/admin/Interface/CambiarAcceso b/admin/Interface/CambiarAcceso new file mode 100755 index 00000000..ced882ca --- /dev/null +++ b/admin/Interface/CambiarAcceso @@ -0,0 +1,49 @@ +#!/bin/bash + +#_______________________________________________________________________________________________________________________________ +# +# PARAMETROS RECIBIDOS DESDE EL CLIENTE +# $1 modo (admin, user) +#_______________________________________________________________________________________________________________________________ + +# Error si llamada no se realliza desde OpenGnSys Client. +PROG=$(basename $0) +CALLER=$(ogGetCaller) +if [ "$CALLER" != "CrearImagen" -a "$CALLER" != "ConsolaRemota" ]; then + ogRaiseError $OG_ERR_NOTEXEC "$CALLER -> $PROG" + exit $? +fi + +# Salir si el repositorio est bloquedo (tiene ficheros abiertos). +REPOIP=$(ogGetRepoIp) +if [ -z "$REPOIP" ]; then + ogRaiseError $OG_ERR_NOTFOUND "repo no montado" + exit $? +fi +if ogIsRepoLocked; then + ogRaiseError $OG_ERR_LOCKED "repo $REPOIP" + exit $? +fi + +# Comprobar protocolo y modo de acceso. +protocol=${protocol:-"smb"} +case "$protocol" in + nfs|smb) ;; + *) ogRaiseError $OG_ERR_FORMAT "protocolo desconocido $protocol" + exit $? ;; +esac +case "$1" in + admin) MODE="rw,nolock" ;; + user) MODE="ro,nolock" ;; + *) ogRaiseError $OG_ERR_FORMAT "modo desconocido $1" + exit $? ;; +esac + +# Desmontar repositorio y volver a montarlo con el modo adecuado. +umount $OGIMG +ogEcho info "$PROG: Montar repositorio $REPO por $protocol en modo $1" +case "$protocol" in + nfs) mount -t nfs -o $MODE $REPOIP:$OGIMG $OGIMG ;; + smb) mount -t cifs //${ROOTSERVER}/ogimages $OGIMG -o $MODE,serverino,acl,username=opengnsys,password=og ;; +esac + -- cgit v1.2.3-18-g5258 From 95b340a92fff58118c605bcf1ee6db72b67553b7 Mon Sep 17 00:00:00 2001 From: ramon Date: Thu, 17 Mar 2011 18:38:44 +0000 Subject: Rama version1.0: Variables para valores por defecto en script {{{createImage}}}. git-svn-id: https://opengnsys.es/svn/branches/version1.0@1556 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/shared/scripts/createImage | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage index 0fea453a..8e98113a 100755 --- a/client/shared/scripts/createImage +++ b/client/shared/scripts/createImage @@ -1,6 +1,6 @@ #!/bin/bash -# create-image.sh - Scirpt de ejemplo para crear una imagen de un sistema de archivos. -# (puede usarse como base para el programa de creación de imágenes usado por OpenGNSys Admin). +# createImage - Scirpt de ejemplo para crear una imagen de un sistema de archivos. +# (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin). TIME1=$SECONDS PROG="$(basename $0)" @@ -9,6 +9,11 @@ if [ $# -ne 4 ]; then exit $? fi +# Valores por defecto +IMGPROG="partclone" +IMGCOMP="lzop" +IMGEXT="img" + # Si el repositorio es CACHE comprobamos que exista if [ "$3" == "CACHE" -o "$3" == "cache" ]; then if ! $(ogFindCache >/dev/null); then @@ -26,7 +31,7 @@ if [ $? != 0 ]; then ogMakeDir "$3" $(dirname "/$4") IMGDIR=$(ogGetParentPath "$3" "/$4") || exit $? fi -IMGFILE=$IMGDIR/$(basename "/$4").img +IMGFILE=$IMGDIR/$(basename "/$4").$IMGEXT # Renombrar el fichero de imagen si ya existe. if [ -f "$IMGFILE" ]; then echo "[10] Renombrar \"$IMGFILE\" por \"$IMGFILE.ant\"." @@ -38,17 +43,15 @@ echo "[15] $PROG: Origen=$PART, Destino=$IMGFILE" # Comprobar consistencia del sistema de archivos. echo "[20] Comprobar sistema de archivos." -ogCheckFs $1 $2 - -echo "[21] Desmontando particion." ogUnmount $1 $2 +ogCheckFs $1 $2 -echo "[25]: Calculando la reduccion del sistema de archivos DISK:$1 PARTITION:$2" +echo "[30]: Reducir sistema de archivos." ogReduceFs $1 $2 || exit 1 # Crear la imagen. -echo "[30] Crear imagen. partclone lzop 30% mas rapido que con gzip" -ogCreateImage $1 "$2" $3 $4 partclone lzop || exit $? +echo "[40] Crear imagen." +ogCreateImage $1 "$2" $3 $4 "$IMGPROG" "$IMGCOMP" || exit $? #ogCreateImage $1 "$2" $3 $4 || exit $? echo "[90] Extender sistema de archivos." -- cgit v1.2.3-18-g5258 From c9c86183187905f5ba92377173039de803f40509 Mon Sep 17 00:00:00 2001 From: danigm Date: Thu, 17 Mar 2011 20:58:47 +0000 Subject: Arreglado sqlinjection en la consola web git-svn-id: https://opengnsys.es/svn/branches/version1.0@1557 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/controlpostacceso.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/admin/WebConsole/controlpostacceso.php b/admin/WebConsole/controlpostacceso.php index aa68c1da..777a038c 100644 --- a/admin/WebConsole/controlpostacceso.php +++ b/admin/WebConsole/controlpostacceso.php @@ -16,9 +16,9 @@ include_once("./clases/AdoPhp.php"); $idc=0; $iph=""; // Switch menu cliente - if (isset($_POST["usu"])) $usu=$_POST["usu"]; - if (isset($_POST["pss"])) $pss=$_POST["pss"]; - if (isset($_POST["idcentro"])) $idc=$_POST["idcentro"]; + if (isset($_POST["usu"])) $usu=mysql_escape_string($_POST["usu"]); + if (isset($_POST["pss"])) $pss=mysql_escape_string($_POST["pss"]); + if (isset($_POST["idcentro"])) $idc=mysql_escape_string($_POST["idcentro"]); if (isset($_GET["iph"])) $iph=$_GET["iph"]; //________________________________________________________________________________________________________ -- cgit v1.2.3-18-g5258 From 008349f37090e5cd4fae7c3886d5ab90ee7d6dd6 Mon Sep 17 00:00:00 2001 From: danigm Date: Fri, 18 Mar 2011 07:38:32 +0000 Subject: Validación de propiedades de aulas, añadida validación de velocidad de multicast MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1559 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../javascripts/eng/propiedades_aulas_eng.js | 1 + .../javascripts/esp/propiedades_aulas_esp.js | 1 + admin/WebConsole/jscripts/propiedades_aulas.js | 26 +++++++----- admin/WebConsole/jscripts/validators.js | 49 ++++++++++++++++++++++ admin/WebConsole/propiedades/propiedades_aulas.php | 1 + 5 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 admin/WebConsole/jscripts/validators.js diff --git a/admin/WebConsole/idiomas/javascripts/eng/propiedades_aulas_eng.js b/admin/WebConsole/idiomas/javascripts/eng/propiedades_aulas_eng.js index d49c7db6..fa7b8bfc 100644 --- a/admin/WebConsole/idiomas/javascripts/eng/propiedades_aulas_eng.js +++ b/admin/WebConsole/idiomas/javascripts/eng/propiedades_aulas_eng.js @@ -8,4 +8,5 @@ TbMsg[0]="You must introduce a name for this lab"; TbMsg[1]="You must introduce a number of places for this lab"; TbMsg[2]="WARNING.- This lab contain others groups or labs. If you remove it, you will also remove all these. Are you sure ?"; TbMsg[3]="Time for begining of reserves periode must be smaller than final time"; +TbMsg[4]="Multicast speed is not valid, use numbers only"; diff --git a/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js b/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js index 4c4dcaea..b1d2f93c 100644 --- a/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js +++ b/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js @@ -8,4 +8,5 @@ TbMsg[0]="Debe introducir un nombre para este aula"; TbMsg[1]="Debe introducir un número de puestos para este aula"; TbMsg[2]="ATENCIÓN.- Este aula contiene grupos de ordenadores u ordenadores. Si los elimina, eliminará también éstos. ¿ Está seguro ?"; TbMsg[3]="La hora de comienzo del intervalo de reservas debe ser menor que la hora final"; +TbMsg[4]="La velocidad de multicast no es válida, sólo números"; diff --git a/admin/WebConsole/jscripts/propiedades_aulas.js b/admin/WebConsole/jscripts/propiedades_aulas.js index 0d37ec12..86b13256 100644 --- a/admin/WebConsole/jscripts/propiedades_aulas.js +++ b/admin/WebConsole/jscripts/propiedades_aulas.js @@ -84,24 +84,30 @@ function confirmar(op){ // Comprobar_datos //________________________________________________________________________________________________________ function comprobar_datos(){ - if (document.fdatos.nombreaula.value=="") { - alert(TbMsg[0]); - document.fdatos.nombreaula.focus(); - return(false); - } - if (document.fdatos.puestos.value=="" || document.fdatos.puestos.value=="0") { - alert(TbMsg[1]); - document.fdatos.puestos.focus(); - return(false); + function validate (field, validator, msgi) { + if (!validator (field.value)) { + alert(TbMsg[msgi]); + validation_highlight (field); + return false; + } + return true; } + if (parseInt(document.fdatos.horaresevini.value)>parseInt(document.fdatos.horaresevfin.value)) { alert(TbMsg[3]); - document.fdatos.horaresevini.focus(); + validation_highlight (document.fdatos.horaresevini); + validation_highlight (document.fdatos.horaresevfin); return(false); } + var form = document.fdatos; + return validate (form.nombreaula, validate_notnull, 0) && + validate (form.puestos, validate_notnull, 1) && + validate (form.velmul, validate_number, 4); + return(true); } + //________________________________________________________________________________________________________ function vertabla_horas(ohora){ currentHora=ohora; diff --git a/admin/WebConsole/jscripts/validators.js b/admin/WebConsole/jscripts/validators.js new file mode 100644 index 00000000..d9afb0f0 --- /dev/null +++ b/admin/WebConsole/jscripts/validators.js @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2011 Daniel Garcia + * + * 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 3 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, see . + * + */ + + +function validate_expr(value, epx) { + var expr = new RegExp(epx); + return (value.search(expr) == 0); +} + +function validate_number(value) { + return validate_expr(value, "^\d*$"); +} + +function validate_alphanum(value) { + return validate_expr(value, "^\w*$"); +} + +function validate_notnull(value) { + return validate_expr(value, "^.+$") && !validate_expr(value, "^\s*0\s*$"); +} + +function validate_number_notnull(value) { + return validate_number(value) && validate_notnull(value); +} + +function validate_alphanum_notnull(value) { + return validate_number(value) && validate_notnull(value); +} + +function validation_highlight(field) { + field.focus(); + field.style.border = "1px solid red"; + field.style.background = "#fee"; +} diff --git a/admin/WebConsole/propiedades/propiedades_aulas.php b/admin/WebConsole/propiedades/propiedades_aulas.php index afd914dd..31cfa8df 100644 --- a/admin/WebConsole/propiedades/propiedades_aulas.php +++ b/admin/WebConsole/propiedades/propiedades_aulas.php @@ -47,6 +47,7 @@ else + '?> -- cgit v1.2.3-18-g5258 From 889ae001cacb6e6d9330e5014b6d65488e84ebed Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 18 Mar 2011 09:52:54 +0000 Subject: Version 1.0: Modificada consulta de propiedades de repositorio para mostrar datos cuando no tiene asociado ningún cliente (cerrar #248). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1560 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/propiedades/propiedades_repositorios.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/admin/WebConsole/propiedades/propiedades_repositorios.php b/admin/WebConsole/propiedades/propiedades_repositorios.php index aa25a64a..19d445e4 100644 --- a/admin/WebConsole/propiedades/propiedades_repositorios.php +++ b/admin/WebConsole/propiedades/propiedades_repositorios.php @@ -154,9 +154,14 @@ function TomaPropiedades($cmd,$id){ global $pathpxe; global $ordenadores; + // NOTA: el parámetro "numordenadores" no se está utilizando, por lo que se + // simplifica la consulta, ignorando dicho valor. +/* $cmd->texto="SELECT repositorios.*, count(*) as numordenadores FROM repositorios INNER JOIN ordenadores ON ordenadores.idrepositorio=repositorios.idrepositorio WHERE repositorios.idrepositorio=".$id; +*/ + $cmd->texto="SELECT * FROM repositorios WHERE idrepositorio=$id"; $rs=new Recordset; $rs->Comando=&$cmd; if (!$rs->Abrir()) return(true); // Error al abrir recordset -- cgit v1.2.3-18-g5258 From c3aa312fe40d38d92689cfb20433e45a580a9b9f Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 18 Mar 2011 11:19:31 +0000 Subject: Incluir apagado en las opciones por defecto para clientes sin menú (versiones 0.10 y 1.0), cerrar #339. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1562 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/varios/menucliente.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/admin/WebConsole/varios/menucliente.php b/admin/WebConsole/varios/menucliente.php index 29614a77..a6a9735d 100644 --- a/admin/WebConsole/varios/menucliente.php +++ b/admin/WebConsole/varios/menucliente.php @@ -61,10 +61,14 @@ if(!empty($rsmenu)){ } } else{ - $codeHtml='

'; - $codeHtml.='

- NO SE HA DETECTADO NINGÚN MENÚ PARA ESTE CLIENTE'; - $codeHtml.='

'; + $codeHtml='
'; + $codeHtml.='

'; + $codeHtml.=' NO SE HA DETECTADO NINGÚN MENÚ PARA ESTE CLIENTE'; + $codeHtml.='

'; + $codeHtml.='

'; + $codeHtml.=' Apagar el equipo'; + $codeHtml.='

'; + $codeHtml.='
'; } ?> -- cgit v1.2.3-18-g5258 From c11bfb6dd25f5542542200bcf38b57ba070b5194 Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 18 Mar 2011 13:22:01 +0000 Subject: Corrección en sentencia para eliminar un perfil de software (ramas 0.10 y 1.0), close #258. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1564 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/gestores/relaciones/perfilessoft_eliminacion.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/WebConsole/gestores/relaciones/perfilessoft_eliminacion.php b/admin/WebConsole/gestores/relaciones/perfilessoft_eliminacion.php index 4cb87efe..6ec57f1b 100644 --- a/admin/WebConsole/gestores/relaciones/perfilessoft_eliminacion.php +++ b/admin/WebConsole/gestores/relaciones/perfilessoft_eliminacion.php @@ -27,7 +27,7 @@ function EliminaPerfilessoft($cmd,$identificador,$nombreid,$swid=1){ $cmd->texto="UPDATE imagenes SET idperfilsoft=0 WHERE idperfilsoft=".$rs->campos["idperfilsoft"]; $resul=$cmd->Ejecutar(); if ($resul){ - $cmd->texto="DELETE FROM perfileshard_perfilessoft WHERE idperfilsoft=".$rs->campos["idperfilsoft"]; + $cmd->texto="DELETE FROM perfilessoft_softwares WHERE idperfilsoft=".$rs->campos["idperfilsoft"]; $resul=$cmd->Ejecutar(); } if (!$resul){ -- cgit v1.2.3-18-g5258 From 16cc9b275e980c842a40de480a6e2fe7be9d42c9 Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 18 Mar 2011 13:28:45 +0000 Subject: Corregir mensajes de error en conexión a base de datos (versiones 0.10 y 1.0). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1565 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/clases/AdoPhp.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/admin/WebConsole/clases/AdoPhp.php b/admin/WebConsole/clases/AdoPhp.php index c291a8de..919fba7f 100644 --- a/admin/WebConsole/clases/AdoPhp.php +++ b/admin/WebConsole/clases/AdoPhp.php @@ -287,8 +287,8 @@ class Comando{ "No se ha producido ningn error", "001 : Comando Error - No se ha establecido el texto del comando", "002 : Comando Error - No se ha establecido la conexióndel comando", - "003 : Comando Error - No se ha abierto la conexi�", - "004 : Comando Error - La sentencia SQl del comando no es correcta", + "003 : Comando Error - No se ha abierto la conexion", + "004 : Comando Error - La sentencia SQL del comando no es correcta", "005 : Comando Error - No se ha podido recuperar el valor @@identity de la ltima clave insertada", ); /*--------------------------------------------------------------------------------------------*/ @@ -468,9 +468,9 @@ class Recordset{ "No se ha producido ningn error", "001 : Recordset Error - Comando no establecido", "002 : Recordset Error - No se ha establecido la conexióndel comando", - "003 : Recordset Error - No se ha abierto la conexi�", + "003 : Recordset Error - No se ha abierto la conexion", "004 : Recordset Error - No se pudo abrir la consulta", - "005 : Recordset Error - La sentencia SQl del comando no contiene la clausula SELECT", + "005 : Recordset Error - La sentencia SQL del comando no contiene la clausula SELECT", "006 : Recordset Error - No se puede liberar la consulta", ); /*--------------------------------------------------------------------------------------------*/ -- cgit v1.2.3-18-g5258 From 4cba6d71c5247f80839745813983759d8121e616 Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 18 Mar 2011 17:28:10 +0000 Subject: Revisar y corregir erratas en los mensajes de los formularios web. Close #266, #268. git-svn-id: https://opengnsys.es/svn/branches/version1.0@1569 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/idiomas/php/esp/configuraciones_esp.php | 10 +++++----- .../idiomas/php/esp/informacion_acciones_esp.php | 4 ++-- admin/WebConsole/idiomas/php/esp/menus_esp.php | 2 +- .../WebConsole/idiomas/php/esp/propiedades_aulas_esp.php | 12 ++++++------ .../WebConsole/idiomas/php/esp/propiedades_menus_esp.php | 16 ++++++++-------- .../idiomas/php/esp/propiedades_ordenadores_esp.php | 4 ++-- .../php/esp/propiedades_ordenadorestandar_esp.php | 6 +++--- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php b/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php index a3adb914..06d1b7b9 100644 --- a/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php @@ -13,17 +13,17 @@ $TbMsg[4]="Ordenadores"; $TbMsg[5]="Nombre"; $TbMsg[6]="Ubicación"; -$TbMsg[7]="Canón"; +$TbMsg[7]="Cañón"; $TbMsg[8]="Pizarra"; $TbMsg[9]="Puestos"; -$TbMsg[10]="Url Imagen"; -$TbMsg[11]="Menu"; +$TbMsg[10]="URL Imagen"; +$TbMsg[11]="Menú"; $TbMsg[12]="Comentarios"; $TbMsg[13]="Ordenadores"; $TbMsg[14]="Nombre"; $TbMsg[15]="Dirección IP"; -$TbMsg[16]="Dirección Mac"; +$TbMsg[16]="Dirección MAC"; $TbMsg[17]="Perfil Hardware"; $TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:"; @@ -32,7 +32,7 @@ $TbMsg[19]="Datos a suministrar"; $TbMsg[20]='Partición'; $TbMsg[21]='S.O. Instalado'; $TbMsg[22]='Tamaño'; -$TbMsg[23]='Datos de configuration'; +$TbMsg[23]='Datos de configuración'; $TbMsg[24]='Tipo'; $TbMsg[25]='Imagen'; $TbMsg[26]='Perfil Software'; diff --git a/admin/WebConsole/idiomas/php/esp/informacion_acciones_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_acciones_esp.php index 22a34e9e..04c55a73 100644 --- a/admin/WebConsole/idiomas/php/esp/informacion_acciones_esp.php +++ b/admin/WebConsole/idiomas/php/esp/informacion_acciones_esp.php @@ -7,9 +7,9 @@ $TbMsg=array(); $TbMsg[0]='Acciones'; $TbMsg[1]='Procedimientos'; - $TbMsg[2]='Information sobre Procedimientos'; + $TbMsg[2]='Información sobre Procedimientos'; $TbMsg[3]='Tareas'; - $TbMsg[4]='Information sobre Tareas'; + $TbMsg[4]='Información sobre Tareas'; $TbMsg[5]='Información'; $TbMsg[6]='Sin parámetros'; ?> diff --git a/admin/WebConsole/idiomas/php/esp/menus_esp.php b/admin/WebConsole/idiomas/php/esp/menus_esp.php index a11fc82b..2cd3a78a 100644 --- a/admin/WebConsole/idiomas/php/esp/menus_esp.php +++ b/admin/WebConsole/idiomas/php/esp/menus_esp.php @@ -7,7 +7,7 @@ $TbMsg=array(); $TbMsg[0]='"Nuevo grupo de menús"'; $TbMsg[1]='"Definir nuevo menú"'; - $TbMsg[2]='"Colocar menu"'; + $TbMsg[2]='"Colocar menú"'; $TbMsg[3]='"Renombrar"'; $TbMsg[4]='"Eliminar grupo de menús"'; $TbMsg[5]='"Información Menú"'; diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php index b5340355..65fb75c8 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php @@ -12,23 +12,23 @@ $TbMsg[3]="Eliminar"; $TbMsg[4]="Gestión Aulas"; $TbMsg[5]="Nombre"; $TbMsg[6]="Ubicación"; -$TbMsg[7]="Canón"; +$TbMsg[7]="Cañón"; $TbMsg[8]="Pizarra"; $TbMsg[9]="Puestos"; -$TbMsg[10]="Url Imagen"; -$TbMsg[11]="Menu"; +$TbMsg[10]="URL Imagen"; +$TbMsg[11]="Menú"; $TbMsg[12]="Comentarios"; $TbMsg[13]="Reservas"; $TbMsg[14]="Hora desde:"; $TbMsg[15]="Hora hasta:"; -$TbMsg[16]="Respositorio"; +$TbMsg[16]="Repositorio"; $TbMsg[17]="Perfil Hardware"; $TbMsg[18]="Propiedades aplicables a todos los ordenadores"; -$TbMsg[19]="Tamaño cache"; +$TbMsg[19]="Tamaño caché (KB)"; $TbMsg[20]="Autoexec"; $TbMsg[21]=""; $TbMsg[22]="Modo Multicast"; $TbMsg[23]="IP Multicast"; $TbMsg[24]="Puerto"; $TbMsg[25]="Velocidad"; -?> \ No newline at end of file +?> diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_menus_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_menus_esp.php index d1d1a5b9..d27cb5c9 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_menus_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_menus_esp.php @@ -9,19 +9,19 @@ $TbMsg[0]="Sin Opción"; $TbMsg[1]="Insertar"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gestión Menus"; +$TbMsg[4]="Gestión Menús"; $TbMsg[5]="Nombre del Menú"; $TbMsg[6]="Título"; $TbMsg[7]="Comentarios"; -$TbMsg[8]="Items públicos del Menu"; -$TbMsg[9]="Coordenada x"; -$TbMsg[10]="Coordenada y"; +$TbMsg[8]="Items públicos del Menú"; +$TbMsg[9]="Coordenada X"; +$TbMsg[10]="Coordenada Y"; $TbMsg[11]="Modalidad"; -$TbMsg[12]="Items privados del Menu"; +$TbMsg[12]="Items privados del Menú"; $TbMsg[13]="Menú simple"; $TbMsg[14]="Menú doble"; -$TbMsg[15]="Url menú público"; -$TbMsg[16]="Url menú privado"; +$TbMsg[15]="URL menú público"; +$TbMsg[16]="URL menú privado"; $TbMsg[17]="Resolución de pantalla"; $TbMsg[18]="Imagen de fondo"; -?> \ No newline at end of file +?> diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php index fe29a434..f93586f2 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php @@ -16,6 +16,6 @@ $TbMsg[7]="Dirección MAC"; $TbMsg[8]="Perfil Hardware"; $TbMsg[9]="Autoexec"; $TbMsg[10]="Repositorio"; -$TbMsg[11]="Menu"; -$TbMsg[12]="Tamaño Caché"; +$TbMsg[11]="Menú"; +$TbMsg[12]="Tamaño Caché (KB)"; ?> diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_ordenadorestandar_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_ordenadorestandar_esp.php index e4ab657c..c21e9b5a 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_ordenadorestandar_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_ordenadorestandar_esp.php @@ -11,10 +11,10 @@ $TbMsg[2]="Nombre"; $TbMsg[3]="Dirección IP"; $TbMsg[4]="Dirección MAC"; $TbMsg[5]="Perfil hardware"; -$TbMsg[6]="Servidor Dhcp"; -$TbMsg[7]="Servidor OpenGnsys "; +$TbMsg[6]="Servidor DHCP"; +$TbMsg[7]="Servidor OpenGnSys "; $TbMsg[8]="Ordenadores a insertar"; -$TbMsg[9]='(*) Para modificar un ordenador con cierto dato, in este aula, debe introducir el valor correspondiente y dejar el campo "Ordenadores a insertar" a cero.'; +$TbMsg[9]='(*) Para modificar un ordenador con cierto dato, en esta aula, debe introducir el valor correspondiente y dejar el campo "Ordenadores a insertar" a cero.'; $TbMsg[10]="(**)Si se trata de ordenadores nuevos con una configuración por defecto, pero no quiere modificar los ordenadores ya existentes debe introducir un valor mayor que cero."; $TbMsg[11]="Tamaño Caché"; -- cgit v1.2.3-18-g5258 From 78a248e40b29a334c1f189aa4a7a811317a52c13 Mon Sep 17 00:00:00 2001 From: adv Date: Sun, 20 Mar 2011 13:12:27 +0000 Subject: menu pxe default ( ticket:240 ): opciones [local-default-|ogclient]. timeout 10 segundos. git-svn-id: https://opengnsys.es/svn/branches/version1.0@1573 a21b9725-9963-47de-94b9-378ad31fedc9 --- server/tftpboot/pxelinux.cfg/default | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/server/tftpboot/pxelinux.cfg/default b/server/tftpboot/pxelinux.cfg/default index 80457f07..2b92712a 100644 --- a/server/tftpboot/pxelinux.cfg/default +++ b/server/tftpboot/pxelinux.cfg/default @@ -1,11 +1,16 @@ DEFAULT syslinux/vesamenu.c32 MENU TITLE Aplicacion OpenGnsys + +PROMPT 0 +TIMEOUT 100 -LABEL 1 -MENU LABEL 1 +LABEL Local_Boot +MENU LABEL Local_Boot KERNEL syslinux/chain.c32 APPEND hd0 + -PROMPT 0 -TIMEOUT 10 - +LABEL OpenGnsys_Client +MENU LABEL OpenGnsys_Client +KERNEL ogclient/ogvmlinuz +APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ip=dhcp \ No newline at end of file -- cgit v1.2.3-18-g5258 From 526c95a72b014793fce7a36d5d22d0c347abe4bf Mon Sep 17 00:00:00 2001 From: adv Date: Sun, 20 Mar 2011 13:16:10 +0000 Subject: menu pxe ( ticket:340 ) eliminados ficheros antiguos git-svn-id: https://opengnsys.es/svn/branches/version1.0@1574 a21b9725-9963-47de-94b9-378ad31fedc9 --- server/tftpboot/pxelinux.cfg/adminmode | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 server/tftpboot/pxelinux.cfg/adminmode diff --git a/server/tftpboot/pxelinux.cfg/adminmode b/server/tftpboot/pxelinux.cfg/adminmode deleted file mode 100644 index 2ade1682..00000000 --- a/server/tftpboot/pxelinux.cfg/adminmode +++ /dev/null @@ -1,5 +0,0 @@ -DEFAULT pxe - -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin -- cgit v1.2.3-18-g5258 From 2d5f79c0dcc8b596b8e90ca7673a2de58fd34ca6 Mon Sep 17 00:00:00 2001 From: adv Date: Mon, 21 Mar 2011 07:45:46 +0000 Subject: ticket:342 ogGetImageInfo(), considera las distintas salidas de partclone.info git-svn-id: https://opengnsys.es/svn/branches/version1.0@1586 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/engine/Image.lib | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/engine/Image.lib b/client/engine/Image.lib index af1bb474..2949831c 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -588,7 +588,7 @@ fi #comprobando que el parametro uno es un file. [ -f $1 ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $? -local TOOLS COMPRESSOR IMGFILE FILEHEAD FS SIZE PARTIMAGEINFO PARTCLONEINFO NTFSCLONEINFO IMGDETECT +local TOOLS COMPRESSOR IMGFILE FILEHEAD FS SIZE SIZEFACTOR PARTIMAGEINFO PARTCLONEINFO NTFSCLONEINFO IMGDETECT IMGDETECT="FALSE" IMGFILE=$1 @@ -605,7 +605,8 @@ then then TOOLS=PARTCLONE FS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($8);}') - SIZE=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); printf "%d\n", $11*1024*1024;}') + echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1048576 || SIZEFACTOR=1024 + SIZE=$(echo $PARTCLONEINFO | awk -v FACTOR=$SIZEFACTOR '{gsub(/\: /,"\n"); printf "%d\n", $11*FACTOR;}') IMGDETECT="TRUE" fi fi -- cgit v1.2.3-18-g5258 From b52e65889fb02f593f7198317073ba93b6c74909 Mon Sep 17 00:00:00 2001 From: jcxifre Date: Mon, 21 Mar 2011 11:57:38 +0000 Subject: Creadas funciones ogCreateBootLoaderImage y ogRestoreBootLoaderImage para guardar y restaurar solamente el código del Boot loader del MBR, sin la tabla de particiones. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1590 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/engine/Image.lib | 72 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/client/engine/Image.lib b/client/engine/Image.lib index 2949831c..399e3da1 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -345,6 +345,43 @@ dd if="$DISK" of="$IMGFILE" bs=512 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IM } +#/** +# ogCreateBootLoaderImage int_ndisk str_repo path_image +#@brief Crea una imagen del boot loader a partir del sector de arranque de un disco. +#@param int_ndisk nº de orden del disco +#@param str_repo repositorio de imágenes (remoto o caché local) +#@param path_image camino de la imagen (sin extensión) +#@return (nada, por determinar) +#@note repo = { REPO, CACHE } +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +#@exception OG_ERR_IMAGE error al crear la imagen del sistema. +#@version 1.0 - Adaptacion de ogCreateMbrImage para guardar solo el Boot Loader +#@author Juan Carlos Xifre, SICUZ Universidad de Zaragoza +#@date 2011/03/21 +#*/ ## +function ogCreateBootLoaderImage () +{ +# Variables locales +local DISK IMGDIR IMGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk path_dir str_image" \ + "$FUNCNAME 1 REPO /aula1/mbr" + return +fi +# Error si no se reciben 3 parámetros. +[ $# -lt 3 ] && ogRaiseError $OG_ERR_FORMAT && return $? + +DISK=$(ogDiskToDev "$1") || return $? +IMGDIR=$(ogGetParentPath "$2" "$3") +[ -n "$IMGDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$2 $(dirname $3)" || return $? +IMGFILE="$IMGDIR/$(basename "$3").mbr" + +# Crear imagen del Boot Loader dentro del MBR. +dd if="$DISK" of="$IMGFILE" bs=446 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IMGFILE" || return $? +} + #/** # ogIsImageLocked [str_repo] path_image #@brief Comprueba si una imagen está bloqueada para uso exclusivo. @@ -527,6 +564,41 @@ dd if="$IMGFILE" of="$DISK" bs=512 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IM } +#/** +# ogRestoreBootLoaderImage str_repo path_image int_ndisk +#@brief Restaura la imagen del boot loader del sector de arranque de un disco. +#@param str_repo repositorio de imágenes o caché local +#@param path_image camino de la imagen +#@param int_ndisk nº de orden del disco +#@return (por determinar) +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados. +#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema. +#@version 1.0 - Adaptacion de ogRestoreMbrImage para restaurar solo el Boot Loader +#@author Juan Carlos Xifre, SICUZ Universidad de Zaragoza +#@date 2011/03/21 +#*/ ## +function ogRestoreBootLoaderImage () +{ +# Variables locales +local DISK IMGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk" \ + "$FUNCNAME REPO /aula1/mbr 1" + return +fi +# Error si no se reciben 3 parámetros. +[ $# -lt 3 ] && ogRaiseError $OG_ERR_FORMAT && return $? +# Procesar parámetros. +DISK=$(ogDiskToDev "$3") || return $? +IMGFILE=$(ogGetPath "$1" "$2.mbr") || return $? +[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? + +# Restaurar imagen del MBR. +dd if="$IMGFILE" of="$DISK" bs=446 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IMGFILE" || return $? +} + #/** # ogUnlockImage [str_repo] path_image #@brief Desbloquea una imagen con uso exclusivo. -- cgit v1.2.3-18-g5258 From a895e474cabeb8000d91cc8ed741002caae2770c Mon Sep 17 00:00:00 2001 From: ramon Date: Mon, 21 Mar 2011 13:50:21 +0000 Subject: Rama version1.0: * Adaptado script "runtest" para el cliente versión 1.0. * Modificado arranque del cliente 1.0 para usar BASH como shell por defecto. Modificado #345. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1591 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/shared/bin/runtest | 246 +++++++++++++++++++++++++ client/shared/etc/preinit/defaultTESTING.sh | 2 +- client/shared/etc/preinit/fileslinks.sh | 39 ++++ client/shared/etc/preinit/fileslinks.sh.NoUsed | 38 ---- 4 files changed, 286 insertions(+), 39 deletions(-) create mode 100755 client/shared/bin/runtest create mode 100755 client/shared/etc/preinit/fileslinks.sh delete mode 100755 client/shared/etc/preinit/fileslinks.sh.NoUsed diff --git a/client/shared/bin/runtest b/client/shared/bin/runtest new file mode 100755 index 00000000..2c85307c --- /dev/null +++ b/client/shared/bin/runtest @@ -0,0 +1,246 @@ +#!/usr/bin/env python +from __future__ import print_function + +import os +import subprocess +import doctest +import re + +FIRST_SCRIPT = 'prepare' +LAST_SCRIPT = 'cleanup' + +PRE_EXTENSION = '.pre' +POST_EXTENSION = '.post' + +PYTHON_TEST_EXTENSION = '.pytest' +BASH_TEST_EXTENSION = '.shtest' + + +class RunTest: + '''Runs the tests''' + + def __init__(self): + self.path = os.path.abspath('.') + + # Only no-hide files + self.all_files = [filename for filename in os.listdir(self.path) + if filename[0] != '.' and os.path.isfile(filename)] + + self.all_files = sorted(self.all_files) + + self.python_tests = [] + self.bash_tests = [] + self.script_tests = [] + self.first_script = '' + self.last_script = '' + self.pre_scripts = [] + self.post_scripts = [] + + for filename in self.all_files: + if filename.endswith(PYTHON_TEST_EXTENSION): + self.python_tests.append(filename) + + elif filename.endswith(BASH_TEST_EXTENSION): + self.bash_tests.append(filename) + + elif os.access(filename, os.X_OK): + basename, extension = os.path.splitext(filename) + if basename == FIRST_SCRIPT: + if self.first_script: + raise MoreThanOneFirstScript() + self.first_script = filename + elif basename == LAST_SCRIPT: + if self.last_script: + raise MoreThanOneLastScript() + self.last_script = filename + elif extension == PRE_EXTENSION: + self.pre_scripts.append(filename) + elif extension == POST_EXTENSION: + self.post_scripts.append(filename) + else: + self.script_tests.append(filename) + + self.fails = 0 + + def run_script(self, script): + '''Run a script test''' + path_script = os.path.join(self.path, script) + proc = subprocess.Popen((path_script), shell=True, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + return_value = proc.wait() + if return_value != 0: + self.fails += 1 + stdout, stderr = proc.communicate() + print("*******************************************************") + print("Error %d in %s:" % (return_value, script)) + print(stdout.decode(), end='') + print(stderr.decode(), end='') + + return return_value + + def run_bash_test(self, script): + '''Run bash test''' + #import pdb; pdb.set_trace() + path_script = os.path.join(self.path, script) + errors = 0 + test_no = 0 + + for command, result, line in read_bash_tests(path_script): + test_no += 1 + try: + proc = subprocess.Popen((command.split()), stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, shell=True) + stdout = proc.communicate()[0] + except OSError as exc: + print('File "%s" line %d:' % (script, line)) + print('Failed example:') + print(' ' + command) + print("Exception was raised:") + print(" ", end="") + print(exc) + print("*******************************************************") + errors += 1 + + else: + if result != stdout.decode(): + print('File "%s" line %d:' % (script, line)) + print('Failed example:') + print(' ' + command) + print("Expected:") + for l in result.split('\n')[:-1]: + print(' ' + l) + print("Got:") + for l in stdout.decode().split('\n')[:-1]: + print(' ' + l) + errors += 1 + print("*******************************************************") + + if errors != 0: + print("%d items had failures:" % errors) + print(" %d of %d in %s" % (errors, test_no, script)) + print("***Test failed***") + else: + print("%3d tests PASSED in %s" % (test_no, script)) + + return errors + + + def run_pre_test(self, test): + '''Run the pre-test of a test''' + pre_test = test + PRE_EXTENSION + return_value = 0 + if pre_test in self.pre_scripts: + return_value = self.run_script(pre_test) + if return_value: + print("No running: %s %s" % (test, test + POST_EXTENSION)) + + return return_value + + def run_post_test(self, test): + '''Run the post-test of a test''' + post_test = test + POST_EXTENSION + if post_test in self.post_scripts: + return self.run_script(post_test) + + def run_tests(self): + '''Run the tests in the correct order''' + if self.first_script: + if self.run_script(self.first_script) != 0: + print('*Error in prepare script. Aborting.*') + return self.show_errors() + + all_tests = sorted(self.script_tests + self.python_tests + self.bash_tests) + for test in all_tests: + if self.run_pre_test(test) != 0: + continue + + if test in self.script_tests: + self.run_script(test) + elif test in self.bash_tests: + fails = self.run_bash_test(test) + self.fails += fails + elif test in self.python_tests: + fails, n_tests = doctest.testfile(test, module_relative=False) + self.fails += fails + + self.run_post_test(test) + + if self.last_script: + self.run_script(self.last_script) + + return self.show_errors() + + def show_errors(self): + '''Show the total errors''' + if self.fails: + print("*******************************************************") + print("Total errors: %d" % self.fails) + + return self.fails + +class MoreThanOneFirstScript(Exception): + def __init__(self): + super(MoreThanOneFirstScript, self).__init__( + "More than one %s script" % FIRST_SCRIPT) + +class MoreThanOneLastScript(Exception): + def __init__(self): + super(MoreThanOneLastScript, self).__init__( + "More than one %s script" % LAST_SCRIPT) + + +def read_bash_tests(file_name): + '''Iterator that yields the found tests''' + fd = open(file_name) + command = '' + result = '' + tests = [] + line_no = 0 + command_line = 0 + command_re = re.compile("^\$ (.*)\n") + + for line in fd.readlines(): + line_no += 1 + + match = command_re.match(line) + if match: + # Is it a command? + if command: + # If it is a command but we have a previous command to send + yield (command, result, command_line) + result = '' + + command = match.group(1) + command_line = line_no + + elif command: + # If not a command but we have a previous command + if line != "\n": + # It's a part of the result + if line == "\n": + result += '\n' + else: + result += line + + else: + # Or it's the end of the result, yielding + + yield (command, result, command_line) + command = '' + result = '' + + + else: + # This line is a comment + pass + + if command: + # Cheking if the last command was sent + yield (command, result, command_line) + + fd.close() + + +if __name__ == "__main__": + r = RunTest() + r.run_tests() diff --git a/client/shared/etc/preinit/defaultTESTING.sh b/client/shared/etc/preinit/defaultTESTING.sh index c825e84c..fe0ef952 100755 --- a/client/shared/etc/preinit/defaultTESTING.sh +++ b/client/shared/etc/preinit/defaultTESTING.sh @@ -5,7 +5,7 @@ set -a source /opt/opengnsys/etc/preinit/loadenviron.sh # Scripts de inicio. -for f in loadmodules mountrepo; do +for f in fileslinks loadmodules mountrepo; do $OGETC/preinit/$f.sh done unset f diff --git a/client/shared/etc/preinit/fileslinks.sh b/client/shared/etc/preinit/fileslinks.sh new file mode 100755 index 00000000..feebe893 --- /dev/null +++ b/client/shared/etc/preinit/fileslinks.sh @@ -0,0 +1,39 @@ +#!/bin/bash +#/** +#@file fileslinks.sh +#@brief Script de inicio para copiar ficheros y deinir enlaces simbólicos. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#@version 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-03-21 +#*/ + + +# Si está configurado OpenGnSys ... +if [ -n "$OPENGNSYS" ]; then + echo "$MSG_MAKELINKS" + + # Shell BASH por defecto (para usar "runtest") + ln -fs /bin/bash /bin/sh + + # Crear directorio de bloqueos + mkdir -p /var/lock + + # Directorio de tipos de letras para el browser. + #QTLIBS=$(grep qt_libspath $OGBIN/browser 2>/dev/null | cut -f2 -d=) + #QTVERS="/usr/local/QtEmbedded-4.6.3" + #QTDIR="${QTVERS%-*}" + #mkdir -p $QTDIR + #ln -fs $QTDIR $QTVERS + #mkdir -p $QTDIR/lib + #ln -fs $OGLIB/fonts $QTDIR/lib + +else + # FIXME Error: entorno de OpenGNSys no configurado. + echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje. + exit 1 +fi + diff --git a/client/shared/etc/preinit/fileslinks.sh.NoUsed b/client/shared/etc/preinit/fileslinks.sh.NoUsed deleted file mode 100755 index 07b87399..00000000 --- a/client/shared/etc/preinit/fileslinks.sh.NoUsed +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash -#/** -#@file fileslinks.sh -#@brief Script de inicio para copiar ficheros y deinir enlaces simbólicos. -#@note Desglose del script "loadenviron.sh". -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - - -# Si está configurado OpenGNSys ... -if [ -n "$OPENGNSYS" ]; then - echo "$MSG_MAKELINKS" - # Para tener /bin/bash y no haya problemas - ln -fs $OGBIN/bash /bin/bash - - # Crear directorio de bloqueos - mkdir -p /var/lock - - # Directorio de tipos de letras para el browser. - #QTLIBS=$(grep qt_libspath $OGBIN/browser 2>/dev/null | cut -f2 -d=) - QTVERS="/usr/local/QtEmbedded-4.6.3" - QTDIR="${QTVERS%-*}" - mkdir -p $QTDIR - ln -fs $QTDIR $QTVERS - mkdir -p $QTDIR/lib - ln -fs $OGLIB/fonts $QTDIR/lib - - # Datos de dispositivos PCI en /etc - ln -fs $OGLIB/pci.ids /etc -else - # FIXME Error: entorno de OpenGNSys no configurado. - echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje. - exit 1 -fi - -- cgit v1.2.3-18-g5258 From 3749eaafcd09b62c9815329c3d607c980532f073 Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 22 Mar 2011 09:32:45 +0000 Subject: Terminal del Browser del cliente con letra de espaciado fijo (versiones^C.10 y 1.0). git-svn-id: https://opengnsys.es/svn/branches/version1.0@1599 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/browser/src/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/browser/src/mainwindow.cpp b/client/browser/src/mainwindow.cpp index ee49d42a..2ada2520 100644 --- a/client/browser/src/mainwindow.cpp +++ b/client/browser/src/mainwindow.cpp @@ -295,7 +295,7 @@ void MainWindow::slotCreateTerminal() { QTermWidget* console = new QTermWidget(1,this); QFont font = QApplication::font(); - font.setFamily("Terminus"); + font.setFamily("Courier"); font.setPointSize(12); console->setTerminalFont(font); -- cgit v1.2.3-18-g5258 From d53c4ed3b74c8776ff10bbe1b9274a76bb39e6f2 Mon Sep 17 00:00:00 2001 From: jcxifre Date: Tue, 22 Mar 2011 09:39:53 +0000 Subject: Creaba el repositorio por defecto como "Repositrorio" git-svn-id: https://opengnsys.es/svn/branches/version1.0@1600 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Database/ogAdmBD.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql index 460e6d66..67f9339d 100644 --- a/admin/Database/ogAdmBD.sql +++ b/admin/Database/ogAdmBD.sql @@ -711,7 +711,7 @@ CREATE TABLE IF NOT EXISTS `repositorios` ( ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; INSERT INTO `repositorios` (`idrepositorio`,`nombrerepositorio`,`ip`,`passguor`,`pathrepoconf`,`pathrepod`,`pathpxe`,`idcentro`,`grupoid`,`comentarios`,`puertorepo`) VALUES - (1,'Repositrorio (Default)','SERVERIP','','','/opt/opengnsys/admin','/opt/opengnsys/tftpboot/pxelinux.cfg',1,0,'',2002); + (1,'Repositorio (Default)','SERVERIP','','','/opt/opengnsys/admin','/opt/opengnsys/tftpboot/pxelinux.cfg',1,0,'',2002); -- -------------------------------------------------------- -- cgit v1.2.3-18-g5258 From 1b9eec220edec7ac2a1fd4721ef068d0dddb813c Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 22 Mar 2011 15:49:37 +0000 Subject: Rama version1.0: {{{runtest}}} soporta comandos y funciones con parámetros en pruebas para BASH. Modificado #345. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1602 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/shared/bin/runtest | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/shared/bin/runtest b/client/shared/bin/runtest index 2c85307c..b18778cd 100755 --- a/client/shared/bin/runtest +++ b/client/shared/bin/runtest @@ -88,8 +88,8 @@ class RunTest: for command, result, line in read_bash_tests(path_script): test_no += 1 try: - proc = subprocess.Popen((command.split()), stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, shell=True) + proc = subprocess.Popen(('/bin/bash', '-c', command), + stdout=subprocess.PIPE, stderr=subprocess.STDOUT) stdout = proc.communicate()[0] except OSError as exc: print('File "%s" line %d:' % (script, line)) -- cgit v1.2.3-18-g5258 From 555d057cb50db2cc7cb2596851fb6614f79a1cbc Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 22 Mar 2011 18:36:10 +0000 Subject: * Rama trunk: Corregida errata en base datos. * Rama version1.0: elección de tipo de letra DejaVu Sans Mono en terminal shell del Browser del cliente, modificado #243. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1604 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/browser/src/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/browser/src/mainwindow.cpp b/client/browser/src/mainwindow.cpp index 2ada2520..e99181df 100644 --- a/client/browser/src/mainwindow.cpp +++ b/client/browser/src/mainwindow.cpp @@ -295,7 +295,7 @@ void MainWindow::slotCreateTerminal() { QTermWidget* console = new QTermWidget(1,this); QFont font = QApplication::font(); - font.setFamily("Courier"); + font.setFamily("DejaVu Sans Mono"); font.setPointSize(12); console->setTerminalFont(font); -- cgit v1.2.3-18-g5258 From cc77393f67f6f22b7a4abbcfea9f294b9bc845c0 Mon Sep 17 00:00:00 2001 From: ramon Date: Wed, 23 Mar 2011 12:01:37 +0000 Subject: Modificado código fuente del Browser para mostrar salidas y barra de estado en UTF-8 (versiones 0.10 y 1.0). Modificado #243. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1608 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/browser/src/main.cpp | 4 ++++ client/browser/src/mainwindow.cpp | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/client/browser/src/main.cpp b/client/browser/src/main.cpp index 0ae6ac6a..99c13812 100644 --- a/client/browser/src/main.cpp +++ b/client/browser/src/main.cpp @@ -9,6 +9,10 @@ int main(int argc, char *argv[]) printf("Usage: %s http://siteweb.com/\n",argv[0]); return -1; } + // Codificación UTF-8. + QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); + QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); + QApplication a(argc, argv); MainWindow w; w.show(); diff --git a/client/browser/src/mainwindow.cpp b/client/browser/src/mainwindow.cpp index e99181df..f49b6510 100644 --- a/client/browser/src/mainwindow.cpp +++ b/client/browser/src/mainwindow.cpp @@ -237,8 +237,8 @@ void MainWindow::slotProcessOutput() char buf[BUFFERSIZE]; while((m_process->readLine(buf,BUFFERSIZE) > 0)) { - print(tr("Proc. Output: ")+buf); QString s(buf); + print(tr("Proc. Output: ")+s); captureOutputForStatusBar(s); } } @@ -249,7 +249,8 @@ void MainWindow::slotProcessErrorOutput() char buf[BUFFERSIZE]; while((m_process->readLine(buf,BUFFERSIZE) > 0)) { - print(tr("Proc. Error: ")+buf); + QString s(buf); + print(tr("Proc. Error: ")+s); } } -- cgit v1.2.3-18-g5258 From 7403c46fe5d11cd9d01f8ccda7f62bc86a8fac81 Mon Sep 17 00:00:00 2001 From: adv Date: Thu, 24 Mar 2011 09:38:34 +0000 Subject: version 1.0: (ticket:349) vista gestor de arranque boton aceptar git-svn-id: https://opengnsys.es/svn/branches/version1.0@1614 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/principal/boot.php | 2 +- admin/WebConsole/principal/ubicarordenadores.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/admin/WebConsole/principal/boot.php b/admin/WebConsole/principal/boot.php index 39e01c9d..8fda145d 100644 --- a/admin/WebConsole/principal/boot.php +++ b/admin/WebConsole/principal/boot.php @@ -123,7 +123,7 @@ switch($litambito){

Gestión Arranque Avanzado
-

+

diff --git a/admin/WebConsole/principal/ubicarordenadores.php b/admin/WebConsole/principal/ubicarordenadores.php index ff02c987..f5efb099 100644 --- a/admin/WebConsole/principal/ubicarordenadores.php +++ b/admin/WebConsole/principal/ubicarordenadores.php @@ -148,7 +148,7 @@ switch($ambito){

Ubicador Ordenadores
-

+

-- cgit v1.2.3-18-g5258 From 74e4526be1930fd7af70eb5c4285245e8081800f Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 25 Mar 2011 10:04:52 +0000 Subject: Versióon 1.0: Mensaje de confirmación en Browser del cliente. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1627 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/browser/src/main.cpp | 1 + client/browser/src/mainwindow.cpp | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/client/browser/src/main.cpp b/client/browser/src/main.cpp index 99c13812..942d2cf4 100644 --- a/client/browser/src/main.cpp +++ b/client/browser/src/main.cpp @@ -12,6 +12,7 @@ int main(int argc, char *argv[]) // Codificación UTF-8. QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); + QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); QApplication a(argc, argv); MainWindow w; diff --git a/client/browser/src/mainwindow.cpp b/client/browser/src/mainwindow.cpp index f49b6510..4ca3fa3e 100644 --- a/client/browser/src/mainwindow.cpp +++ b/client/browser/src/mainwindow.cpp @@ -30,7 +30,7 @@ MainWindow::MainWindow(QWidget *parent) // Graphic showFullScreen(); - setWindowTitle(tr("OpenGNSys Browser")); + setWindowTitle(tr("OpenGnSys Browser")); setCentralWidget(m_web); @@ -164,8 +164,8 @@ void MainWindow::slotLinkHandle(const QUrl &url) else if(urlString.startsWith(COMMAND_WITH_CONFIRMATION)) { QMessageBox msgBox; - msgBox.setText(tr("La siguiente accin puede tardar varios minutos. Mientras se realiza no podr usar el ordenador.")); - msgBox.setInformativeText(tr("Ests seguro de que quieres continuar?")); + msgBox.setText(tr("ATENCIN! La siguiente accin puede modificar datos o tardar varios minutos. El equipo no podr ser utilizado durante su ejecucin.")); + msgBox.setInformativeText(tr("Continuar?")); msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Ok); if (msgBox.exec() == QMessageBox::Ok) -- cgit v1.2.3-18-g5258 From f6c1d2b90d67bb8469675bcb28c1555d3d3ff3b1 Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 25 Mar 2011 10:07:10 +0000 Subject: Versión 1.0: Modificado script de interfaz web para crear imagen desde cliente en modo no administrador. Modificado #291. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1628 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Interface/CrearImagen | 48 ++++++++++++++++++++++------------------ installer/opengnsys_installer.sh | 2 ++ installer/opengnsys_update.sh | 2 ++ 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/admin/Interface/CrearImagen b/admin/Interface/CrearImagen index c5ac4a5b..cbaf9c4d 100755 --- a/admin/Interface/CrearImagen +++ b/admin/Interface/CrearImagen @@ -1,32 +1,38 @@ #!/bin/bash -#_______________________________________________________________________________________________________________________________ +#___________________________________________________ # # PARAMETROS RECIBIDOS DESDE EL CLIENTE: -# $1 disco -# $2 par=N�mero de particion -# $3 Nombre can�nico de la imagen -# $4 Direcci�n del repositorio -#_______________________________________________________________________________________________________________________________ -echo $* >> $OGLOGFILE +# $1 Número de disco +# $2 Número de particion +# $3 Nombre canónico de la imagen (sin extensión) +# $4 Dirección del repositorio (REPO, por defecto) +#___________________________________________________ -umount /opt/opengnsys/images +# Registro de ejecución +echo $* >> $OGLOGFILE -if [ "$ogprotocol" == "nfs" ] -then - mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock -fi - -if [ "$ogprotocol" == "smb" ] -then - echo "montando smb" - mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og +# Solo ejecutable por OpenGnSys Client. +PATH=$PATH:$(dirname $0) +PROG=$(basename $0) +CALLER=$(ogGetCaller) +if [ "$CALLER" != "ogAdmClient" ]; then + ogRaiseError $OG_ERR_NOTEXEC "$CALLER -> $PROG" + exit $? fi -if [ -f createImage$ogengine ] -then - createImage$ogengine "$1" "$2" "REPO" "$3" &>> $OGLOGFILE || exit $? +# Valor por defecto para el repositorio. +REPO=${4:-"repo"} + +# Si cleinte no está en modo "admin"; activar repositorio para escritura, +# crear imagen y activar para lectura. +[ "$boot" != "admin" ] && CambiarAcceso admin +if [ -f createImage$ogengine ]; then + createImage$ogengine "$1" "$2" "$REPO" "$3" &>> $OGLOGFILE else - createImage "$1" "$2" "REPO" "$3" &>> $OGLOGFILE || exit $? + createImage "$1" "$2" "$REPO" "$3" &>> $OGLOGFILE fi +RETVAL=$? +[ "$boot" != "admin" ] && CambiarAcceso user +exit $RETVAL diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 75941a31..a7cfbfb4 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -971,6 +971,8 @@ function copyInterfaceAdm () echoAndLog "${FUNCNAME}(): error while copying Administration Interface Folder" hayErrores=1 fi + chown root:root $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso + chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso return $hayErrores } diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 91649044..65693b70 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -275,6 +275,8 @@ function updateInterfaceAdm () exit 1 fi chmod -R +x $INSTALL_TARGET/client/interfaceAdm + chown root:root $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso + chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso echoAndLog "${FUNCNAME}(): Admin interface updated successfully." } -- cgit v1.2.3-18-g5258 From ebbbfc01d5da45a96034eafcb96f81c4eb49543c Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 25 Mar 2011 11:23:28 +0000 Subject: Instalación automática de paquetes en script de actualización (versiones 0.10 y 1.0). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1629 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_update.sh | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 65693b70..5640be8c 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -83,7 +83,7 @@ function backupFile() return 1 fi - echoAndLog "${FUNCNAME}(): Making $fichero back-up" + echoAndLog "${FUNCNAME}(): Making $fichero back-up" # realiza una copia de la última configuración como last cp -p $fichero "${fichero}-LAST" @@ -104,7 +104,7 @@ function restoreFile() local fichero=$1 - echoAndLog "${FUNCNAME}(): restoring $fichero file" + echoAndLog "${FUNCNAME}(): restoring file $fichero" if [ -f "${fichero}-LAST" ]; then cp -p "$fichero-LAST" "$fichero" fi @@ -122,14 +122,14 @@ function installDependencies () echoAndLog "${FUNCNAME}(): no deps needed." else while [ $# -gt 0 ]; do - dpkg -s $1 &>/dev/null | grep Status | grep -qw install + dpkg -s $1 2>/dev/null | grep -q "Status: install ok" if [ $? -ne 0 ]; then INSTALLDEPS="$INSTALLDEPS $1" fi shift done if [ -n "$INSTALLDEPS" ]; then - apt-get update && apt-get install $INSTALLDEPS + apt-get update && apt-get -y install --force-yes $INSTALLDEPS if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): cannot install some dependencies: $INSTALLDEPS." return 1 @@ -212,7 +212,6 @@ function openGnsysCopyClientFiles() local hayErrores=0 echoAndLog "${FUNCNAME}(): Updating OpenGnSys Client files." - #cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while updating client structure" @@ -221,8 +220,6 @@ function openGnsysCopyClientFiles() find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null echoAndLog "${FUNCNAME}(): Updating OpenGnSys Cloning Engine files." - #mkdir -p $INSTALL_TARGET/client/lib/engine/bin - #cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while updating engine files" @@ -254,7 +251,7 @@ function updateWebFiles() fi restoreFile $INSTALL_TARGET/www/controlacceso.php # Cambiar permisos para ficheros especiales. - chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/includes $INSTALL_TARGET/www/images/iconos + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/includes $INSTALL_TARGET/www/images/iconos echoAndLog "${FUNCNAME}(): Web files updated successfully." } @@ -537,9 +534,8 @@ updateInterfaceAdm updateServicesStart # Eliminamos el fichero de estado del tracker porque es incompatible entre los distintos paquetes -if [ -r /tmp/dstate ] -then - rm /tmp/dstate +if [ -f /tmp/dstate ]; then + rm -f /tmp/dstate fi #rm -rf $WORKDIR -- cgit v1.2.3-18-g5258 From 16ac86e1917e2878479e2952415c9ccb56313f22 Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 25 Mar 2011 13:50:29 +0000 Subject: Versión 1.0: Scripts para interfaz web soporte inicial de crear imágenes en modo no administrador. Modificado #291. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1631 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Interface/CrearImagen | 4 +++- client/engine/System.lib | 6 ++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/admin/Interface/CrearImagen b/admin/Interface/CrearImagen index cbaf9c4d..7625ab80 100755 --- a/admin/Interface/CrearImagen +++ b/admin/Interface/CrearImagen @@ -22,7 +22,9 @@ if [ "$CALLER" != "ogAdmClient" ]; then fi # Valor por defecto para el repositorio. -REPO=${4:-"repo"} +REPO=${4:-"REPO"} +[ "$REPO" == "$(ogGetRepoIp)" ] && REPO="REPO" +[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE" # Si cleinte no está en modo "admin"; activar repositorio para escritura, # crear imagen y activar para lectura. diff --git a/client/engine/System.lib b/client/engine/System.lib index 1acb9364..9973b596 100755 --- a/client/engine/System.lib +++ b/client/engine/System.lib @@ -95,10 +95,8 @@ return $CODE function ogGetCaller () { # Obtener el nombre del programa o del script que ha llamado al proceso actual. -basename $(ps | grep $PPID | \ - awk -v P=$PPID '{if ($1==P) { - if ($5~/bash/ && $6!="") print $6 - else print $5; } }') +basename $(ps hlp $PPID | awk '{if ($13~/bash/ && $14!="") print $14; + else print $13;}') } -- cgit v1.2.3-18-g5258 From aeb0e7d74ae051bee323f52228e4e1da0431f362 Mon Sep 17 00:00:00 2001 From: adv Date: Sun, 27 Mar 2011 18:26:41 +0000 Subject: v1.0: ticket:350 Activación del programador de tareas ogAdmAgent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1634 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Sources/Services/opengnsys.default | 1 + admin/Sources/Services/opengnsys.init | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/admin/Sources/Services/opengnsys.default b/admin/Sources/Services/opengnsys.default index b8d4f00d..24d24265 100644 --- a/admin/Sources/Services/opengnsys.default +++ b/admin/Sources/Services/opengnsys.default @@ -4,5 +4,6 @@ # RUN_BTSEEDER starts seeding of selected torrent files RUN_OGADMSERVER="yes" RUN_OGADMREPO="yes" +RUN_OGADMAGENT="yes" RUN_BTTRACKER="yes" RUN_BTSEEDER="yes" diff --git a/admin/Sources/Services/opengnsys.init b/admin/Sources/Services/opengnsys.init index c28f3736..a195301e 100755 --- a/admin/Sources/Services/opengnsys.init +++ b/admin/Sources/Services/opengnsys.init @@ -45,6 +45,16 @@ REPOAUXNAME=ogAdmRepoAux REPOAUXDAEMON=$BASEDIR/sbin/$REPOAUXNAME REPOAUXPORT=$((`cat $SERVERCFG | grep PUERTO | cut -f2 -d"="` + 1)) ############## ADV + +# +# Servidor de tareas programadas +# +AGENTNAME=ogAdmAgent +AGENTDAEMON=$BASEDIR/sbin/$AGENTNAME +AGENTCFG=$BASEDIR/etc/$AGENTNAME.cfg +AGENTLOG=$BASEDIR/log/$AGENTNAME.log +AGENTDAEMON_OPTIONS="-f $AGENTCFG -l $AGENTLOG" + # # Opciones Bittorrent # @@ -93,6 +103,12 @@ arranca_demonios() { echo "." ############ ADV fi + if [ $RUN_OGADMAGENT = "yes" ] + then + echo -n "Iniciando demonio: "$AGENTNAME $AGENTDAEMON + start-stop-daemon --start --quiet --background --exec $AGENTDAEMON -- $AGENTDAEMON_OPTIONS + echo "." + fi if [ $RUN_BTTRACKER = "yes" ] then echo -n "Iniciando demonio: "$BTTRACK @@ -122,7 +138,10 @@ para_demonios() { start-stop-daemon --stop --quiet --oknodo --pidfile $BTTRACKPID echo "." rm $BTTRACKPID > /dev/null - fi + fi + echo -n "Parando demonio: "$AGENTNAME + start-stop-daemon --stop --quiet --oknodo --name $AGENTNAME + echo "." echo -n "Parando demonio: "$REPONAME start-stop-daemon --stop --quiet --oknodo --name $REPONAME echo "." -- cgit v1.2.3-18-g5258 From 5bcb6d1c67d271326bf5740e2de3d0af3ac1375f Mon Sep 17 00:00:00 2001 From: adv Date: Mon, 28 Mar 2011 08:47:16 +0000 Subject: branch uma ticket:65 gestion de updateBootCache en la rama uma git-svn-id: https://opengnsys.es/svn/branches/version1.0@1639 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/shared/scripts/ogUpdateBootCache.sh | 7 ------- 1 file changed, 7 deletions(-) delete mode 100755 client/shared/scripts/ogUpdateBootCache.sh diff --git a/client/shared/scripts/ogUpdateBootCache.sh b/client/shared/scripts/ogUpdateBootCache.sh deleted file mode 100755 index af2267a2..00000000 --- a/client/shared/scripts/ogUpdateBootCache.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -OGBTFTP="/opt/og2fs/tftpboot/ogclient/" -ogMountCache || exit 1 -echo $OGCAC -[ -d $OGCAC/boot ] || mkdir -p $OGCAC/boot -[ -f ${OGCAC}/boot/ogvmlinuz ] || cp ${OGBTFTP}ogvmlinuz ${OGCAC}/boot/ogvmlinuz -[ -f ${OGCAC}/boot/oginitrd.img ] || cp ${OGBTFTP}oginitrd.img ${OGCAC}/boot/oginitrd.img \ No newline at end of file -- cgit v1.2.3-18-g5258 From a7125bfb2ca911a2a13d0b33d3a2edc45691e7e5 Mon Sep 17 00:00:00 2001 From: danigm Date: Mon, 28 Mar 2011 09:14:47 +0000 Subject: Arregladas expresiones regulares en la validación MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1640 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/jscripts/validators.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/admin/WebConsole/jscripts/validators.js b/admin/WebConsole/jscripts/validators.js index d9afb0f0..f99f9ff7 100644 --- a/admin/WebConsole/jscripts/validators.js +++ b/admin/WebConsole/jscripts/validators.js @@ -23,15 +23,15 @@ function validate_expr(value, epx) { } function validate_number(value) { - return validate_expr(value, "^\d*$"); + return validate_expr(value, "^\\d*$"); } function validate_alphanum(value) { - return validate_expr(value, "^\w*$"); + return validate_expr(value, "^\\w*$"); } function validate_notnull(value) { - return validate_expr(value, "^.+$") && !validate_expr(value, "^\s*0\s*$"); + return validate_expr(value, "^.+$") && !validate_expr(value, "^\\s*0\\s*$"); } function validate_number_notnull(value) { -- cgit v1.2.3-18-g5258 From 16919efaa7abc641db49592795a6476bd36ac988 Mon Sep 17 00:00:00 2001 From: ramon Date: Mon, 28 Mar 2011 12:24:04 +0000 Subject: Version 1.0: Creación de imágenes desde la consola en cliente no administrador. * Corrección en funciones {{{ogGetRepoIp}}} y {{{ogGetServerIp}}}. * Corrección de errata en script de interfaz web para cambiar modo de montaje del repositorio. * Modificación de permisos de instalación. Modificado #291. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1642 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Interface/CambiarAcceso | 12 ++++++------ client/engine/Net.lib | 29 ++++++++++++----------------- installer/opengnsys_installer.sh | 2 +- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/admin/Interface/CambiarAcceso b/admin/Interface/CambiarAcceso index ced882ca..b8d5645b 100755 --- a/admin/Interface/CambiarAcceso +++ b/admin/Interface/CambiarAcceso @@ -26,10 +26,10 @@ if ogIsRepoLocked; then fi # Comprobar protocolo y modo de acceso. -protocol=${protocol:-"smb"} -case "$protocol" in +PROTO=${ogprotocol:-"smb"} +case "$PROTO" in nfs|smb) ;; - *) ogRaiseError $OG_ERR_FORMAT "protocolo desconocido $protocol" + *) ogRaiseError $OG_ERR_FORMAT "protocolo desconocido $PROTO" exit $? ;; esac case "$1" in @@ -42,8 +42,8 @@ esac # Desmontar repositorio y volver a montarlo con el modo adecuado. umount $OGIMG ogEcho info "$PROG: Montar repositorio $REPO por $protocol en modo $1" -case "$protocol" in - nfs) mount -t nfs -o $MODE $REPOIP:$OGIMG $OGIMG ;; - smb) mount -t cifs //${ROOTSERVER}/ogimages $OGIMG -o $MODE,serverino,acl,username=opengnsys,password=og ;; +case "$PROTO" in + nfs) mount -t nfs $REPOIP:$OGIMG $OGIMG -o $MODE ;; + smb) mount -t cifs //$REPOIP/ogimages $OGIMG -o $MODE,serverino,acl,username=opengnsys,password=og ;; esac diff --git a/client/engine/Net.lib b/client/engine/Net.lib index f1f1422c..6ac5a94a 100755 --- a/client/engine/Net.lib +++ b/client/engine/Net.lib @@ -112,14 +112,12 @@ echo ${MAC%% *} function ogGetRepoIp () { # Obtener direcciones IP, segun el protocolo de montaje -case $ogprotocol in - nfs) - [ -n "$OGIMG" ] && mount | grep " $OGIMG .* nfs " | cut -f1 -d: - ;; - smb) - [ -n "$OGIMG" ] && mount | grep ogimages | awk -F"addr=" '{print $2}' | cut -f1 -d"," - ;; -esac +if [ -n "$OGIMG" ]; then + case "$ogprotocol" in + nfs) mount | grep " on $OGIMG " | cut -f1 -d: ;; + smb) mount | grep " on $OGIMG " | cut -f3 -d/ ;; + esac +fi } @@ -138,14 +136,11 @@ esac function ogGetServerIp () { # Obtener direcciones IP. -case $ogprotocol in - nfs) - [ -n "$OPENGNSYS" ] && mount | grep " $OPENGNSYS .* nfs " | cut -f1 -d: - ;; - smb) - [ -n "$OGIMG" ] && mount | grep ogclient | awk -F"addr=" '{print $2}' | cut -f1 -d"," - ;; -esac +if [ -n "$PENGNSYS" ]; then + case "$ogprotocol" in + nfs) mount | grep " on $OPENGNSYS " | cut -f1 -d: ;; + smb) mount | grep " on $OPENGNSYS " | cut -f3 -d/ ;; + esac +fi } - diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index a7cfbfb4..552bc0f6 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -971,7 +971,7 @@ function copyInterfaceAdm () echoAndLog "${FUNCNAME}(): error while copying Administration Interface Folder" hayErrores=1 fi - chown root:root $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso + chown $OPENGNSYS_CLIENT_USER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso return $hayErrores -- cgit v1.2.3-18-g5258 From c6087b939797b453beb8b7b28c9bcd7cd39475c2 Mon Sep 17 00:00:00 2001 From: adv Date: Tue, 29 Mar 2011 12:40:05 +0000 Subject: version1.0 ticket:351 ogCreatePartitions() ogUpdatePartitionTable() git-svn-id: https://opengnsys.es/svn/branches/version1.0@1652 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/engine/Disk.lib | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index 9b361eb9..e2826714 100755 --- a/client/engine/Disk.lib +++ b/client/engine/Disk.lib @@ -124,7 +124,7 @@ ogUnmountAll $ND 2>/dev/null # Si la tabla de particiones no es valida, volver a generarla. [ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w" # Definir particiones y notificar al kernel. -sfdisk -f $DISK < $tmpsfdisk 2>/dev/null && partprobe +sfdisk -f $DISK < $tmpsfdisk 2>/dev/null && partprobe $DISK rm -f $tmpsfdisk [ -n "$CACHESIZE" ] && ogMountCache 2>/dev/null } @@ -609,9 +609,10 @@ partprobe 2>/dev/null function ogUpdatePartitionTable () { -echo "Forzando al kernel la lectura de la tabla de particiones" -list=`partprobe -s | cut -f1 -d: ` 2>/dev/null -echo $list > /tmp/disk +for i in `ogDiskToDev` +do + partprobe $i +done } -- cgit v1.2.3-18-g5258 From 1fc14827b8f824ce50a591c917c9c24a0c8331ae Mon Sep 17 00:00:00 2001 From: adelcastillo Date: Tue, 29 Mar 2011 14:32:19 +0000 Subject: Changing the way the browser was launched git-svn-id: https://opengnsys.es/svn/branches/version1.0@1658 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/shared/bin/ogAdmClient | Bin 646145 -> 687449 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/client/shared/bin/ogAdmClient b/client/shared/bin/ogAdmClient index 27bdd1aa..2690d974 100755 Binary files a/client/shared/bin/ogAdmClient and b/client/shared/bin/ogAdmClient differ -- cgit v1.2.3-18-g5258 From 140b7c954f70de6eea9a4f56ef12b804c35e89e2 Mon Sep 17 00:00:00 2001 From: irina Date: Thu, 31 Mar 2011 08:43:03 +0000 Subject: test de particiones y bloqueos git-svn-id: https://opengnsys.es/svn/branches/version1.0@1683 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../shared/lib/engine/tests/NoModify/Lock1.shtest | 85 +++++++++++ client/shared/lib/engine/tests/README | 6 + client/shared/lib/engine/tests/crearTestDisk1 | 157 +++++++++++++++++++++ 3 files changed, 248 insertions(+) create mode 100644 client/shared/lib/engine/tests/NoModify/Lock1.shtest create mode 100644 client/shared/lib/engine/tests/README create mode 100755 client/shared/lib/engine/tests/crearTestDisk1 diff --git a/client/shared/lib/engine/tests/NoModify/Lock1.shtest b/client/shared/lib/engine/tests/NoModify/Lock1.shtest new file mode 100644 index 00000000..39bac3eb --- /dev/null +++ b/client/shared/lib/engine/tests/NoModify/Lock1.shtest @@ -0,0 +1,85 @@ +€jemplo de test de funciones de bloqueo de particiones e imagenes +================================================================= +# Funciones de bloqueo + +$ ogLock 1 1 +$ ls /var/lock/lock-dev-sda1 +/var/lock/lock-dev-sda1 + +$ if ogIsLocked 1 1; then echo si; else echo no; fi +si + +$ ls /var/lock/lock-dev-sda1 +/var/lock/lock-dev-sda1 + +$ ogUnlock 1 1 +$ if ogIsLocked 1 1; then echo si; else echo no; fi +no + +$ ogLockPartition 1 1 +$ if ogIsLocked 1 1; then echo si; else echo no; fi +si + +$ ogUnlockPartition 1 1 +$ if ogIsLocked 1 1; then echo si; else echo no; fi +no + + + + +# Es necesario desmontar para probar ogCheck +$ ogUnmount 1 1 >/dev/null 2>&1 + +$ ogLock 1 1 + +$ ogCheckFs 1 1 +OpenGnSys error: ogCheckFs: "1 1" + +$ ogUnlock 1 1 + +$ ogCheckFs 1 1 >/dev/null 2>&1; echo $? +0 + + +# Bloqueo del repositorio + +$ ogIsRepoLocked; echo $? +1 + +# FALTA: test bloqueo repo cuando esta bloqueado + +# bloqueo de imagenes + + + +# Creo una imagen ficticia +$ touch $OGIMG/_test_.img + +$ ogLockImage REPO _test_ +$ ls $OGIMG/_test_.lock +/opt/opengnsys/images/_test_.lock + +$ if ogIsImageLocked REPO _test_ ; then echo si; else echo no; fi +si + +$ ogUnlockImage REPO _test_ +$ if ogIsImageLocked REPO _test_ ; then echo si; else echo no; fi +no + +$ rm $OGIMG/_test_.* + +# Comprobando los errores (FALTA) +$ ogLock +OpenGnSys error: ogLockPartition: "" + + +$ ogLock 1 10 +OpenGnSys error: ogDiskToDev: "" + + +$ ogIsLocked +OpenGnSys error: ogIsLocked: "" + +$ ogIsLocked 1 10 +OpenGnSys error: ogDiskToDev: "" + diff --git a/client/shared/lib/engine/tests/README b/client/shared/lib/engine/tests/README new file mode 100644 index 00000000..f3190973 --- /dev/null +++ b/client/shared/lib/engine/tests/README @@ -0,0 +1,6 @@ +Separamos los test que no modifican el cliente y los que sí lo hacen (pueden modificar la partitiones, imagenes, etc) en dos directorios distintos. + +Ademas los numeramos diferentes por si los queremos mover de sitio: + Los test acabados en 1x no modifican nada + Los test acabados en 2x modifican el cliente + diff --git a/client/shared/lib/engine/tests/crearTestDisk1 b/client/shared/lib/engine/tests/crearTestDisk1 new file mode 100755 index 00000000..95d51802 --- /dev/null +++ b/client/shared/lib/engine/tests/crearTestDisk1 @@ -0,0 +1,157 @@ +#!/bin/bash +# Descripcion: Crea un test no destructivo de la libreria Disk.lib conficurandolo +# para un cliente concreto. +# Se ejecuta en el servidor y el test creado se utiliza en el cliente +# Los datos los toma de la base de administración. +# Uso: creaTestDisk1 NombreCliente +# +# Falta: la bd no tiene información de las particiones lógicas (el script sí esta preparado para ellas) +# la bd no tiene datos del tamaño del disco + + +# Variables. +PROG=$(basename $0) +OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} +SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg +TESTDIR="$OPENGNSYS/client/lib/engine/tests/NoModify" +TESTFILE="$TESTDIR/Disk1-$1.shtest " +# Control básico de errores. +if [ $# -ne 1 ]; then + echo "$PROG: Error de ejecución" + echo "Formato: $PROG NOMBRE_PC" + exit 1 +fi + +# Obtener datos de acceso a la Base de datos. +source $SERVERCONF + +# Comprobar si se recibe nombre de aula o de equipo. +PARTICIONES=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \ + "SELECT ordenadores_particiones.numpar, tipospar.tipopar, ordenadores_particiones.tamano + FROM tipospar INNER JOIN ordenadores_particiones INNER JOIN ordenadores + WHERE tipospar.codpar=ordenadores_particiones.codpar + AND ordenadores.idordenador=ordenadores_particiones.idordenador + AND nombreordenador='$1' + ORDER By ordenadores_particiones.numpar;") +# Si la cadena esta vacia, error +if [ -z "$PARTICIONES" ]; then + echo "El equipo $1 no existe en la base de datos" + exit 2 +fi + +# Ejemplo para añadir partitiones lógicas +#PARTICIONES="$PARTICIONES 5 LINUX-SWAP 1999999" +PRI=$( echo ${PARTICIONES%%\ 5\ *}|awk '{print $2"_"$3" "$5"_"$6" "$8"_"$9" "$11"_"$12}' |sed s/\ _//g |sed s/\ //g) + +if $(echo $PARTICIONES |grep " 5 " >/dev/null); then + LOG=$( echo ${PARTICIONES##*\ 5\ }|awk '{print $1"_"$2" "$4"_"$5" "$7"_"$8" "$10"_"$11" "}' |sed s/\ _//g |sed s/\ //g) +else + LOG="" +fi +AUX=$(echo $PARTICIONES| wc -w) +let NUMPART=AUX/3 +P1SIZE=$(echo $PARTICIONES|cut -d\ -f3) +P1TYPE=$(echo $PARTICIONES|cut -d\ -f2) +case "$P1TYPE" in + EMPTY) P1ID=0 ;; + FAT12) P1ID=1 ;; + EXTENDED) P1ID=5 ;; + FAT16) P1ID=6 ;; + NTFS|EXFAT) P1ID=7 ;; + FAT32) P1ID=b ;; + HFAT12) P1ID=11 ;; + HFAT16) P1ID=16 ;; + HNTFS) P1ID=17 ;; + HFAT32) P1ID=1b ;; + LINUX-SWAP) P1ID=82 ;; + EXT[234]|REISERFS|REISER4|XFS|JFS) + P1ID=83 ;; + LINUX-LVM) P1ID=8e ;; + SOLARIS) P1ID=bf ;; + CACHE) P1ID=ca ;; + LINUX-RAP1ID) P1ID=fd ;; + *) P1ID="" ;; +esac + +cat > $TESTFILE << EOF +Ejemplo de test funciones de particionado no destrutivo +======================================================= + +# Desmontamos antes de empezar +$ ogUnmountAll 1 2>/dev/null + +$ ogUnmountCache 2>/dev/null + +# Cambio de formato + +$ ogDevToDisk /dev/sda +1 + +$ ogDevToDisk /dev/sda1 +1 1 + +$ ogDiskToDev +/dev/sda + +$ ogDiskToDev 1 +/dev/sda + +$ ogDiskToDev 1 1 +/dev/sda1 + +$ ogFsToId NTFS +7 + +$ ogFsToId EXT4 +83 + + +# Tamaño de disco (cuando haya informacion en la base de datos) + +#$ ogGetDiskSize 1 +#312571224 + +# Tamaño de la particion + +$ ogGetPartitionSize 1 1 +$P1SIZE + +# Información de las particiones +$ ogListPartitions 1 | tr : _ | sed s/EXT[234]/LINUX/g | sed s/\ //g +$PRI$LOG +$ ogListPrimaryPartitions 1 | tr : _ | sed s/EXT[234]/LINUX/g | sed s/\ //g +$PRI + +$ ogListLogicalPartitions 1 | tr : _ | sed s/EXT[234]/LINUX/g +$LOG + +$ ogGetPartitionsNumber +$NUMPART + +# Partición activa + +$ ogSetPartitionActive 1 2 >/dev/null +$ ogGetPartitionActive 1 +2 + +$ ogSetPartitionActive 1 1 >/dev/null +$ ogGetPartitionActive 1 +1 + + +# Tipo de particiones + +$ ogGetPartitionId 1 1 +$P1ID + + +# Montamos la cache al final +$ ogMountCache >/dev/null 2>&1 + + +EOF + + + +echo "Test creado en $TESTFILE" +echo "Las particiones logicas hay que incluirlas a mano, porque no hay información de las mismas en la base de datos." -- cgit v1.2.3-18-g5258 From 51db584da70c254099dfedb1cbb259a88c862cbf Mon Sep 17 00:00:00 2001 From: irina Date: Fri, 1 Apr 2011 16:01:26 +0000 Subject: test de cache y bloqueos git-svn-id: https://opengnsys.es/svn/branches/version1.0@1686 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/shared/lib/engine/tests/Modify/Cache.shtest | 93 ++++++++++++++++++++++ client/shared/lib/engine/tests/crearTestLock2 | 82 +++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100644 client/shared/lib/engine/tests/Modify/Cache.shtest create mode 100755 client/shared/lib/engine/tests/crearTestLock2 diff --git a/client/shared/lib/engine/tests/Modify/Cache.shtest b/client/shared/lib/engine/tests/Modify/Cache.shtest new file mode 100644 index 00000000..b449a80c --- /dev/null +++ b/client/shared/lib/engine/tests/Modify/Cache.shtest @@ -0,0 +1,93 @@ +Test de comprobacion de la librería Cache.lib y los script relacionados +======================================================================= +Este test destruye la cache +Necesita que las particiones sean tres como máximo +================================================= + +$ ogUnmountCache 2>/dev/null ; df|grep cache + + +$ ogCreateCache 10000000 1>/dev/null 2>&1 + +$ AUX=$(ogListPartitions 1) ; echo ${AUX##*CACHE:} | sed s/\ .*\$//g +10000000 + +# Comprobamos que no esta formateada +$ ogCheckFs 1 4 +OpenGnSys error: ogCheckFs: "1, 4, CACHE" + +$ ogFormatCache|tail -1 +ReiserFS is successfully created on /dev/sda4. + +$ ogMountCache +/opt/opengnsys/cache + +$ echo $OGCAC +/opt/opengnsys/cache + +$ touch $OGCAC$OGIMG/lll +$ ls $OGCAC$OGIMG +lll + +$ rm $OGCAC$OGIMG/lll + +$ ogFindCache +1 4 + +$ ogGetCacheSize +10000000 + + +$ ogDeleteCache >/dev/null 2>&1 +$ ogFindCache + +$ initCache 2000000 1>/dev/null 2>&1 +$ touch $OGCAC$OGIMG/lll +$ ls $OGCAC$OGIMG +lll + +$ rm $OGCAC$OGIMG/lll + +#################################################33 +# No permite unicast +#################################################33 +#$ echo ooo > $OGCAC$OGIMG/_test_.img +#$ echo jjjjjjjjjjjjjjjjjjjjjjjjjjjjjj > $OGIMG/_test_.img +#$ touch $OGIMG/_test_.torrent +#$ updateCache REPO _test_ UNICAST + + +Comprobamos los errores de las entradas de datos +================================================ +$ ogCreateCache +OpenGnSys error: ogCreateCache: "" + +$ ogCreateCache -1 +OpenGnSys error: ogCreateCache: "-1" + +$ ogCreateCache 0 +OpenGnSys error: ogCreateCache: "0" + +# cuando se está usando la cuarta partitión no debe crearse la cache +#$ ogCreatePartition 1 NTFS:200000 EXT3:2000000 EXT3:2000000 NTFS:30000000 +#$ ogListPartitions 1 +#NTFS:200000 EXT3:2000000 EXT3:2000000 EXTENDED:20000000 LINUX-SWAP:199999 +#$ ogCreateCache 1000000 +#$ ogFindCache + + +# si hay cache no podemos +$ ogDeleteCache 1>/dev/null 2>&1 +$ ogCreatePartitions 1 NTFS:200000 EXT3:2000000 EXT3:2000000 1>/dev/null 2>&1 +$ ogCreateCache 1000000 1>/dev/null 2>&1 +$ ogCreatePartitions 1 NTFS:200000 EXT2:2000000 EXT2:2000000 LINUX-SWAP:200000 1>/dev/null 2>&1; echo $? +1 + +FALTA +==== +ogGetCacheSpace +updateCache + +Error +===== +Al crear la cache no se comprueba si existe una cuarta particion. La machaca diff --git a/client/shared/lib/engine/tests/crearTestLock2 b/client/shared/lib/engine/tests/crearTestLock2 new file mode 100755 index 00000000..49e3604d --- /dev/null +++ b/client/shared/lib/engine/tests/crearTestLock2 @@ -0,0 +1,82 @@ +#!/bin/bash +# Descripcion: Crea un test DESTRUCTIVO de los bloqueos de particiones y de imagenes +# Se ejecuta en el servidor y el test creado se utiliza en el cliente +# La imagen de prueba puede sufrir daños +# Uso: creaTestLock2 NombreImagen + +# Variables. +PROG=$(basename $0) +OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} +SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg +TESTDIR="$OPENGNSYS/client/lib/engine/tests/Modify" +TESTFILE="$TESTDIR/Lock2-img$1.shtest " +# Control básico de errores. +if [ $# -ne 1 ]; then + echo "$PROG: Error de ejecución" + echo "Formato: $PROG NOMBRE_IMAGEN" + echo " La imagen de prueba puede sufrir daños" + exit 1 +fi + +IMG=$1 + +cat > $TESTFILE << EOF +Test de bloqueos Destructivos +============================================================================= +# Bloqueo de particiones +$ ogUnmountAll 1 2>/dev/null + +$ ogLock 1 1 + +$ ogExtendFs 1 1 +OpenGnSys error: ogExtendFs: "1 1" + + +$ ogFormatFs 1 1 +OpenGnSys error: ogFormatFs: "1 1" + +############################################################################# +# Los dos comandos siguientes dan error. Los comentamos por ahora +############################################################################# +#$ ogMount 1 1 + +#$ ogUnmount 1 1; df|grep sda1 + +$ ogUnlock 1 1 + +$ ogExtendFs 1 1 >/dev/null 2>&1; echo $? +0 + +$ ogFormatFs 1 1 >/dev/null 2>&1; echo $? +0 + +$ ogMount 1 1 +/mnt/sda1 + +$ ogUnmount 1 1; df|grep sda1 + +# Bloqueo de imagenes +############################################################################# +# Los tres comandos siguientes dan error. Los comentamos por ahora +############################################################################# +#$ ogLockImage REPO $IMG + +#$ ogRestoreImage REPO $IMG 1 1 >/dev/null 2>&1; echo $? + +#$ ogCreateImage 1 1 REPO $IMG >/dev/null 2>&1; echo $? + + +$ ogUnlockImage REPO $IMG + +# Lo mismo con la imagen desbloqueada. + +$ ogRestoreImage REPO $IMG 1 1 >/dev/null 2>&1; echo $? +0 + +$ ogCreateImage 1 1 REPO $IMG >/dev/null 2>&1; echo $? +0 +EOF + +echo "Test creado en $TESTFILE" +echo " La imagen de $IMG prueba puede quedar dañada despues de realizar el test" +echo " Hay cinco comandos comentados porque por ahora dan error" -- cgit v1.2.3-18-g5258 From 1222e988c047463b2863ec1eb0f755d8b652f1cf Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 5 Apr 2011 14:32:28 +0000 Subject: Versión 1.0: carga bien el ficheros de idiomas cuando la variable {{{$LANG}}} incluye referencia a moneda. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1702 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Interface/CambiarAcceso | 2 +- client/shared/etc/preinit/loadenviron.sh | 17 +++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/admin/Interface/CambiarAcceso b/admin/Interface/CambiarAcceso index b8d5645b..ddd67666 100755 --- a/admin/Interface/CambiarAcceso +++ b/admin/Interface/CambiarAcceso @@ -41,7 +41,7 @@ esac # Desmontar repositorio y volver a montarlo con el modo adecuado. umount $OGIMG -ogEcho info "$PROG: Montar repositorio $REPO por $protocol en modo $1" +ogEcho info "$PROG: Montar repositorio $REPO por $PROTO en modo $1" case "$PROTO" in nfs) mount -t nfs $REPOIP:$OGIMG $OGIMG -o $MODE ;; smb) mount -t cifs //$REPOIP/ogimages $OGIMG -o $MODE,serverino,acl,username=opengnsys,password=og ;; diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh index 83b9b9a9..c3dae813 100755 --- a/client/shared/etc/preinit/loadenviron.sh +++ b/client/shared/etc/preinit/loadenviron.sh @@ -23,18 +23,16 @@ if [ -d $OPENGNSYS ]; then export OGCAC=$OPENGNSYS/cache export OGLOG=$OPENGNSYS/log - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done + # Exportar parámetros del kernel. + for i in $(cat /proc/cmdline); do + echo $i | grep -q "=" && export $i + done - # Cargar fichero de idioma. - LANGFILE=$OGETC/lang.$LANG.conf + LANGFILE=$OGETC/lang.${LANG%@*}.conf if [ -f $LANGFILE ]; then source $LANGFILE for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do @@ -59,7 +57,7 @@ if [ -d $OPENGNSYS ]; then if [ -n "$ogengine" ] then for i in $OGAPI/*.$ogengine; do - [ -f $i ] && source $i + [ -f $i ] && source $i done fi @@ -80,4 +78,3 @@ export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. export OG_ERR_NOTOS=6 # Sin sistema operativo. export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. - -- cgit v1.2.3-18-g5258 From 2af97381a271428e72ab95b9f52618bb7439d361 Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 5 Apr 2011 14:39:26 +0000 Subject: Version 1.0: Eliminar mensajes de error redundantes en función {{{ogMountFs}}}. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1703 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/engine/FileSystem.lib | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib index 61fa9092..17391e19 100755 --- a/client/engine/FileSystem.lib +++ b/client/engine/FileSystem.lib @@ -353,7 +353,7 @@ fi # Obtener partición. PART="$(ogDiskToDev $1 $2)" || return $? -echo $(mount | awk -v P=$PART '{if ($1==P) {print $3}}') +mount | awk -v P=$PART '{if ($1==P) {print $3}}' } @@ -571,12 +571,14 @@ if [ -z "$MNTDIR" ]; then return $OG_ERR_PARTITION ;; esac - $MOUNT $PARAMS $PART $MNTDIR || $MOUNT $PARAMS $PART $MNTDIR -o force,remove_hiberfile || ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE" || return $? - # linea temporal durante desarrollo para poder usar el cliente completo nfs y testeas nuevas herramientas. + $MOUNT $PARAMS $PART $MNTDIR 2>/dev/null || \ + $MOUNT $PARAMS $PART $MNTDIR -o force,remove_hiberfile 2>/dev/null || \ + ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE" || return $? + # linea temporal durante desarrollo para poder usar el cliente completo nfs y testeas nuevas herramientas. if grep -q nfsroot /proc/cmdline; then - echo "$PART $MNTDIR" >> /etc/mtab - fi - # fin linea temporal. + echo "$PART $MNTDIR" >> /etc/mtab + fi + # fin linea temporal. fi echo $MNTDIR } -- cgit v1.2.3-18-g5258 From 52fa3da44e4d3990482c38a9c3a937f0aa0e83e3 Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 5 Apr 2011 15:08:32 +0000 Subject: Version 1.0: funciones {{{ogMountFs}}} y {{{ogUnmountFs}}} controlan si la partición está bloqueada. Modificado #353. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1704 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/engine/FileSystem.lib | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib index 17391e19..1d6d76fb 100755 --- a/client/engine/FileSystem.lib +++ b/client/engine/FileSystem.lib @@ -543,7 +543,10 @@ MNTDIR="$(ogGetMountPoint $1 $2)" # Si no, montarla en un directorio de sistema if [ -z "$MNTDIR" ]; then # Error si la particion esta bloqueada. - ogIsLocked $1 $2 && ogRaiseError $OG_ERR_LOCKED "$1 $2" && return $? + if ogIsLocked $1 $2; then + ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION, $1 $2" + return $? + fi # Crear punto de montaje o enlace símbolico para Caché local. MNTDIR=${PART/dev/mnt} TYPE="$(ogGetFsType $1 $2)" || return $? @@ -823,15 +826,18 @@ MNTDIR="$(ogGetMountPoint $1 $2)" # Si está montada, desmontarla. if [ -n "$MNTDIR" ]; then # Error si la particion está bloqueada. - ogIsLocked $1 $2 && ogRaiseError $OG_ERR_LOCKED "$1 $2" && return $? + if ogIsLocked $1 $2; then + ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $1, $2" + return $? + fi # Desmontar y borrar punto de montaje. - umount $PART 2>/dev/null || ogEcho warning "$FUNCNAME: $MSG_DONTUNMOUNT: \"$1,$2\"" + umount $PART 2>/dev/null || ogEcho warning "$FUNCNAME: $MSG_DONTUNMOUNT: \"$1, $2\"" rmdir $MNTDIR 2>/dev/null || rm -f $MNTDIR 2>/dev/null - # linea temporal durante desarrollo para testear nuevas herramientas con el cliente completo nfs + # linea temporal durante desarrollo para testear nuevas herramientas con el cliente completo nfs if grep -q nfsroot /proc/cmdline; then - cat /etc/mtab | grep -v $PART > /var/tmp/mtab.temporal && cp /var/tmp/mtab.temporal /var/tmp/mtab && rm /var/tmp/mtab.temporal - fi - # fin linea temporal. + grep -v $PART /etc/mtab > /var/tmp/mtab.temporal && cp /var/tmp/mtab.temporal /var/tmp/mtab && rm /var/tmp/mtab.temporal + fi + # fin linea temporal. else ogEcho warning "$MSG_DONTMOUNT: \"$1,$2\"" fi -- cgit v1.2.3-18-g5258 From 8971dc86b03ff6044479697572d436d9a90af2ae Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 5 Apr 2011 15:59:04 +0000 Subject: Version 1.0: * Corregir mensaje de error en función {{{ogSetPartitionId}}}. * Función {{{ogGetFsType}}} devuelve Ext3 como tipo por defecto para partición de tipo Linux, corrige errores de detección en funciones {{{ogListPartitions}}}, {{{ogFormatFs}}}, {{{ogCheckFs}}}, etc. (cerrar #355). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1705 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/engine/Disk.lib | 2 +- client/engine/FileSystem.lib | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index e2826714..0609b38e 100755 --- a/client/engine/Disk.lib +++ b/client/engine/Disk.lib @@ -728,7 +728,7 @@ PART=`ogDiskToDev $1 $2` || return $? # Elección del tipo de partición. ID=$(ogFsToId "$3") -[ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$TYPE" || return $? +[ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$3" || return $? echo -ne "t\n$2\n${ID}\nw\n" | fdisk $DISK 1>/dev/null 2>&1 } diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib index 1d6d76fb..b54854b3 100755 --- a/client/engine/FileSystem.lib +++ b/client/engine/FileSystem.lib @@ -311,7 +311,12 @@ case "$ID" in 82) TYPE="LINUX-SWAP" ;; 83) TYPE="$(parted -sm $DISK print 2>/dev/null | \ awk -F: -v fs=$2 '{if ($1==fs) {print toupper($5)}}')" - TYPE=${TYPE:-"EXT3"} + # Si el tipo no es válido para partición Linux, Ext3 por defecto. + case "$TYPE" in + EXT[234]|REISERFS|REISER4|BTRFS|JFS|XFS) + ;; + *) TYPE="EXT3" ;; + esac ;; 8e) TYPE="LINUX-LVM" ;; a7) TYPE="CACHE" ;; # (compatibilidad con Brutalix) -- cgit v1.2.3-18-g5258 From 6539ab9d0b4c32ed5c280b443c7ac7855ff60f23 Mon Sep 17 00:00:00 2001 From: ramon Date: Wed, 6 Apr 2011 12:24:28 +0000 Subject: Versión 1.0: Eliminar herramientas de la versión 0.10 que se han quedado obsoletas. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1723 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/initrd-tools/README.es.txt | 22 -- client/initrd-tools/initrd-generator | 314 -------------------------- client/initrd-tools/ogClientNfs-generator.lib | 139 ------------ client/initrd-tools/udeblist-jaunty.conf | 22 -- client/initrd-tools/udeblist-karmic.conf | 22 -- client/initrd-tools/udeblist-lucid.conf | 31 --- client/initrd-tools/udeblist-maverick.conf | 28 --- client/initrd-tools/udeblist.conf | 1 - client/initrd-tools/upgrade-clients-udeb.sh | 50 ---- 9 files changed, 629 deletions(-) delete mode 100644 client/initrd-tools/README.es.txt delete mode 100755 client/initrd-tools/initrd-generator delete mode 100755 client/initrd-tools/ogClientNfs-generator.lib delete mode 100644 client/initrd-tools/udeblist-jaunty.conf delete mode 100644 client/initrd-tools/udeblist-karmic.conf delete mode 100644 client/initrd-tools/udeblist-lucid.conf delete mode 100644 client/initrd-tools/udeblist-maverick.conf delete mode 120000 client/initrd-tools/udeblist.conf delete mode 100755 client/initrd-tools/upgrade-clients-udeb.sh diff --git a/client/initrd-tools/README.es.txt b/client/initrd-tools/README.es.txt deleted file mode 100644 index ea332621..00000000 --- a/client/initrd-tools/README.es.txt +++ /dev/null @@ -1,22 +0,0 @@ -OpenGNSys Client Boot README -============================== - -En este directorio se incluyen los scripts y ficheros, ejecutables -directamente desde el servidor de OpenGNSys, y que son necesarios -para configurar los procesos de arranque de los clientes. - - -initrd-generator (copiar en /opt/opengnsys/bin) - Script de generación de los básicos de arranque del cliente - (initrd y kernel). - -upgrade-clients-udeb.sh (copiar en /opt/opengnsys/bin) - Script de descarga de paquetes udeb, que serán incluidos en - el directorio de librerías importadas por los clientes. - -udeblist.conf (copiar en /opt/opengnsys/etc) - Fichero de configuración que incluye la lista de paquetes - udeb que deben ser descargados o eliminados. - El formato de las líneas del fichero es: - install:paquete - remove:paquete diff --git a/client/initrd-tools/initrd-generator b/client/initrd-tools/initrd-generator deleted file mode 100755 index 7ec1be9d..00000000 --- a/client/initrd-tools/initrd-generator +++ /dev/null @@ -1,314 +0,0 @@ -#!/bin/bash -# Generador de ficheros "kernel" e "initrd.gz" para arranque de cliente OpenGnSys - -test "$(lsb_release -is 2>/dev/null)" == "Ubuntu" && DIST="$(lsb_release -cs)" -DIST=${DIST:-"lucid"} # Si no se detecta, distribución Ubuntu por defecto. -ARCH=$(arch) # Arquitectura del sistema: i386 (32 bits), amd64 (64 bits). -ARCH=${ARCH:-"$(uname -m)"} # Corrección para Ubuntu Jaunty. -ARCH=${ARCH/i[4-6]86/i386} -ARCH=${ARCH/x86_64/amd64} -URL=http://archive.ubuntu.com/ubuntu/dists/$DIST-updates/main/installer-$ARCH/current/images/netboot/ubuntu-installer/$ARCH -if [ "$TMP" = "" ] ; then TMP=/tmp ; fi -TMPINITRD=$TMP/initrd -NEWROOT=$TMPINITRD/newroot -ANTERIORPWD=$PWD -DEST=$PWD -LINUX=1 -CHROOTINITSCRIPT=/oginit -INITSCRIPT=$NEWROOT$CHROOTINITSCRIPT - -# Comprueba los argumentos pasados para modificar los valores por defecto -function parsearParametros -{ - while [ $# -ne 0 ];do - case $1 in - ("-d") - shift - #URL=http://people.debian.org/~joeyh/d-i/images/daily/netboot/debian-installer/i386/ - URL=http://ftp.nl.debian.org/debian/dists/testing/main/installer-$ARCH/current/images/netboot/debian-installer/$ARCH/ - ;; - ("-v") - shift - if [ $# -eq 0 ];then - echo "Error en los argumentos" - return -1 - else - DIST=$1 - URL=http://archive.ubuntu.com/ubuntu/dists/$DIST-updates/main/installer-$ARCH/current/images/netboot/ubuntu-installer/$ARCH - shift - fi - ;; - ("-l") - shift - ;; - ("-t") - shift - if [ $# -eq 0 ];then - echo "Error en los argumentos" - return -1 - else - DEST=$1 - shift - fi - ;; - esac - done -} - -function descargar -{ - # Borramos si existe el directorio temporal - if [ -d $TMPINITRD ]; then - rm -r $TMPINITRD - fi - # Creamos directorio temporal y nos vamos alli - mkdir -p $TMPINITRD - cd $TMPINITRD - - # Ficheros a descargar: Initrd y Kernel (si está habilitado). - FILES="initrd.gz" - [ $LINUX ] && FILES="$FILES linux" - - for f in $FILES; do - # Borrar fichero anterior - [ -f "$f" ] && rm -f $f - # Descargar fichero (intentar primero actualizaciones). - wget $URL/$f || wget ${URL/-updates/}/$f - if [ $? != 0 ]; then - echo "Error no se ha podido descargar el fichero $f" - exit 1 - fi - done -} - -# Descomprimimos el initrd -function descomprimir -{ - if [ ! -f $TMPINITRD/initrd.gz ]; then - echo No se encuentra el initrd.gz - exit -1 - fi - - if [ -f $NEWROOT ];then - rm -rf $NEWROOT - fi - - mkdir -p $NEWROOT - cd $NEWROOT - - gzip -dc $TMPINITRD/initrd.gz | cpio -id -} - -# Borrar todos los scripts del directorio actual -function borrarScripts -{ - # Primero los hacemos con los enlaces para que no se produzcan errores si borramos a lo que apunta primero - for i in `ls -F -1 | grep @ | awk -F @ '{print $1}'`; do - if [ $(file $i -L | grep "shell script" | wc -l) -gt 0 ]; then - rm $i - fi - done - - # Ahora lo hacemos con todos los ejecutables - for i in `ls`; do - if [ $(file $i | grep "shell script" | wc -l) -gt 0 ]; then - rm $i - fi - done -} - -# Borra todos los ejecutables que enlacen con la libreria debian-installer -function borrarEjecutablesDebinstall -{ - # Primero lo hacemos con los enlaces para que no se produzcan errores si borramos a lo que apunta primero - for i in `ls -F -1 | grep @ | awk -F @ '{print $1}'`; do - if [ $(ldd $i | grep -e libdebian-installer -e libdebconf | wc -l) -gt 0 ]; then - rm $i - fi - done - - # Ahora lo hacemos con todos los ejecutables - for i in `ls`; do - if [ $(ldd $i | grep -e libdebian-installer -e libdebconf | wc -l) -gt 0 ]; then - rm $i - fi - done -} - -# Elimina todos los fichero innecesarios del initrd -function purgarFicherosDebian -{ - mkdir -p $NEWROOT - cd $NEWROOT - - rm init - - # Pasamos por todos los directorios y vamos borrando lo innecesario - cd bin/ - borrarScripts - borrarEjecutablesDebinstall - - cd ../etc/ - rm -rf cdebconf.conf default-release lsb-release preseed_aliases udebs-source - - cd ../lib/ - rm -rf chroot-setup.sh debian-installer* kickseed main-menu.d preseed libdebian-installer* - - cd ../sbin/ - borrarScripts - borrarEjecutablesDebinstall - - cd ../usr/bin/ - borrarScripts - borrarEjecutablesDebinstall - - cd ../lib/ - rm -rf base-installer.d debian-installer finish-install.d libdebconfclient* cdebconf fetch-url net-retriever post-base-installer.d - - # Solo queda un enlace simbolico que ya no apunta a nada - cd ../sbin/ - rm -rf * - - cd ../share/ - rm -rf debconf keyrings save-logs - - cd ../../var/ - rm -rf cache/anna/ spool/kickseed/ - - cd lib/ - rm -rf apt-install cdebconf dpkg - - cd ../.. -} - -# Le agrega los archivos necesarios para que arranque de otra manera -function agregarNuevoArranque -{ - cd $NEWROOT - - cd etc/ - # Script de arranque de OpenGnSys Client. - perl -i -p -e "s/\/sbin\/debian-installer\$/${CHROOTINITSCRIPT//\//\/}/" inittab - # Impedir usar shell en terminales 2 y 3 - # (NOTA: comentar la siguiente línea para sistemas en pruebas). - #perl -n -i -e "print unless /^tty[23]/" inittab - - # Script inicial que ejecuta el resto de scripts de /etc/rcS.d/ - #echo "#! /bin/sh" >> rc - #echo "for script in /etc/rcS.d/S[0-9][0-9]*; do if [ -x $script ]; then $script fi done" >> rc - #chmod +x rc - - # Agregamos para que ejecute el script anterior lo primero - #echo "::sysinit:/etc/init.d/rc" > inittab - # Que ejecute el fichero /init cuando se reinicio el proceso init - #echo "::restart:/sbin/init" >> inittab - # Que funciona el control alt supr - #echo "::ctrlaltdel:/sbin/reboot" >> inittab - - # Cosas que hacer si se apaga - #echo "::shutdown:/bin/umount -a -r" >> inittab - #echo "::shutdown:/sbin/swapoff -a" >> inittab - - # Primero ejecutamos el dhcp - VERSION=$(cat /opt/opengnsys/doc/VERSION.txt 2>/dev/null) - VERSION=${VERSION:-"OpenGnSys"} - cat << FIN > $INITSCRIPT -#! /bin/sh -echo -echo "Arranque cliente $VERSION" -echo -set -e -# Exportando variables -for i in \$(cat /proc/cmdline); -do - echo \$i | grep -q "=" && export \$i -done -# Configurar la red -if [ "\$ip" == "dhcp" ]; then - echo "Configurando red por DHCP" - mkdir -p /var/state/dhcp - /sbin/dhclient 2>/dev/null -fi -# Modo de trabajo del cliente: on-line/off-line -status="\${status:-online}" -echo "Comprobando modo de trabajo \$status" -case "\$status" in - online) - if [ -z "\$repo" ] - then - SERVERIP=\$(grep -h dhcp-server-identifier /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1) - else - SERVERIP="\$repo" - fi - echo "Preparando conexión con el Repositorio \$SERVERIP" - # determinar el paramtro de boot para los permisos de los montajes de imagenes. - BOOTMODE=\${boot:-"user"} - case "\$BOOTMODE" in - admin) MOUNTOPTS="rw" ;; - user) MOUNTOPTS="ro" ;; - *) echo "Aviso: Modo de arranque desconocido." - BOOTMODE="user" - MOUNTOPTS="ro" ;; - esac - # Montamos el resto de cosas necesarias - echo "Montar repo en modo \$BOOTMODE" - mkdir -p /opt/opengnsys - DEFAULTOPTS="nolock,proto=tcp" - if \$(mount | grep -q " /opt/opengnsys "); then - DEFAULTOPTS="remount,\$DEFAULTOPTS" - fi - mount -t nfs -o "\$DEFAULTOPTS,ro" \$SERVERIP:/opt/opengnsys/client /opt/opengnsys - mount -t nfs -o "\$DEFAULTOPTS,rw" \$SERVERIP:/opt/opengnsys/log/clients /opt/opengnsys/log - mount -t nfs -o "\$DEFAULTOPTS,\$MOUNTOPTS" \$SERVERIP:/opt/opengnsys/images /opt/opengnsys/images - ;; - offline) - echo "Off-line mode." - ;; -esac -/opt/opengnsys/etc/preinit/default.sh -FIN - chmod +x $INITSCRIPT -} - -# Función para corregir problemas detectados con módulos del kernel. -function configurarModulos -{ - cd $NEWROOT/lib/modules/* - - case "$DIST" in - lucid) # Corregir problema de frame-buffer en Lucid. - perl -p -i -e 's/vga16fb/vesafb/g' modules.alias ;; - *) ;; - esac -} - -function comprimir -{ - cd $NEWROOT - - if [ $? = 1 ] ; then - exit -1 - fi - - find ./ | cpio -H newc -o > $TMPINITRD/new-initrd - cd $TMPINITRD - gzip -9 new-initrd -} - -function finalizar -{ - cd $ANTERIORPWD - mv $TMPINITRD/new-initrd.gz $DEST/initrd.gz - if [ $LINUX ] ; then - mv $TMPINITRD/linux $DEST/linux - fi -} - -parsearParametros $@ -descargar -descomprimir -#purgarFicherosDebian -agregarNuevoArranque -configurarModulos -comprimir -finalizar diff --git a/client/initrd-tools/ogClientNfs-generator.lib b/client/initrd-tools/ogClientNfs-generator.lib deleted file mode 100755 index a077f4cb..00000000 --- a/client/initrd-tools/ogClientNfs-generator.lib +++ /dev/null @@ -1,139 +0,0 @@ - -function BuildOSBase() { -#/** @function BuildOSBase: @brief instala los componentes base de los opengnsys OS y muestra aquellos que hay que compilar. -#@param $1 str_versionLinux -#@param ejemplo BuildEACOSBase ubuntu904 -#@return -#@warning Salidas de errores no determinada -#@attention -#@version 0.1 Date: 02/05/2009 Author Antonio J. Doblas Viso. Universidad de Malaga -#@note version importada desde EAC para su adaptación a opengnsys. No testeada -#*/ -# -if [ $# = 0 ] -then - echo"InstallEACOSBase instala los componentes base de los EAC OS." - echo "sintaxis: InstallEACOSBASE strVersionLinux --- Ejemplo: InstallEACOSBase ubuntu0904 " - return -fi -if [ $# = 1 ] -then - case $1 in - "ubuntu0904") - cp -ra /etc/udev/rules.d /etc/udev/rules.d-old - rm /etc/udev/rules.d/70-persistent-net.rules - echo "###########START Especificos EAC############ " >> /etc/apt/sources.list - echo "deb http://free.nchc.org.tw/ubuntu jaunty-security main restricted universe multiverse" >> /etc/apt/sources.list - echo "deb http://free.nchc.org.tw/drbl-core drbl stable" >> /etc/apt/sources.list - echo "deb http://www.geekconnection.org/remastersys/repository ubuntu/" >> /etc/apt/sources.list - echo "###########END Especificos EAC############ " >> /etc/apt/sources.list - apt-get update - #apt-get install xorg-dev xorg lxde qingy roxterm - #apt-get install firefox links midbrowser scite - #apt-get install build-essential cmake m4 autoconf gettext libbz2-dev - apt-get install nfs-common nfs-kernel-server openssh-server sshfs - apt-get install reiser4progs hfsplus curl - apt-get install fusesmb smbnetfs smbfs subversion - apt-get install gkrellm saidar htop iptraf vnstat ethstatus darkstat ncdu xdiskusage iotop lshw lshw-gtk conky - apt-get install dcfldd ddrescue di disktype dmraid hdparm sdparm hexedit lftp lsscsi lshw mc myrescue testdisk hwinfo - apt-get install partimage ntfsprogs partclone mysql-client php5 php5-cli php5-cgi php5-mysql registry-tools sysv-rc-conf kexec-tools gparted parted parted-doc gnu-fdisk fatresize gparted - apt-get install lzop ethtool etherwake remastersys bfr fbgrab fbset ksh registry-tools netpipes - apt-get install drbl-partimage drbl-chntpw drbl-ntfsprogs drbl-lzop - # desactivamos por si acaso alguno servicios, que en la distribucion base no son necesarios - #/etc/init.d/apache2 stop && update-rc.d -f apache2 remove - #update-rc.d -f gdm remove - #apt-get install lighttpd - #/etc/init.d/lighttpd stop && update-rc.d -f lighttpd remove - ;; - esac -fi - -if [ $# = 1 ] -then - - echo "creando la estrucutra de datos" - mkdir -p /opt/opengnsys/{bin,etc,log,lib/{engine/bin,modules},images,init} - cd /root/ && svn co svn://www.informatica.us.es:3690/eac-hidra -fi - - -if [ $# = 1 ] -then - read -p "pausa para configurar el framebuffer: abre una nueva consola y segue estas intrucciones, luego pulsa enter" - echo "Activar el framebuffer: abre una consola y realiza estas operaciones" - echo "/etc/modprobe.d/blacklist-framebuffer => le comentamos las lineas de vesafb, vga16fb y radeonfb" - echo "/etc/initramfs-tools/modules => agregamos en una linea cada una de estas fbcon vesafb vga16b" - echo "actualizamos con # update-initramfs -u" - echo "acivadmos el framebuffer en /boot/grub/menu.lst y en el kernel que deseemos a�adimos vga=791" -fi - -if [ $# = 1 ] -then - read -p "pausa para configurar el framebuffer: abre una nueva consola y segue estas intrucciones, luego pulsa enter" - echo "configurar el lighttd" - read -p "press enter" -fi - -if [ $# = 1 ] -then - importclient=/opt/opengnsys - echo "configurar el /etc/bash.bashrc" - echo "####### EAC ##########" >> /etc/bash.bashrc - echo "importclient=/opt/opengnsys" >> /etc/bash.bashrc - echo "export PATH=$PATH:/sbin/:/bin/:/opt/:/usr/local/sbin/:/usr/local/bin/:/usr/bin/:/usr/sbin/:/opt/opengnsys/" >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/Settings.lib >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/ATA.lib >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/Boot.lib >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/Deploy.lib >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/FileSystem.lib >> /etc/bash.bashrc - echo source ${importclient}/lib/engine/PostConf.lib >> /etc/bash.bashrc -fi - -if [ $# = 1 ] -then - read -p "pausa para compilar los programas necesarios: abre una nueva consola y segue estas intrucciones, luego pulsa enter" - echo "estos hay que compilarlos estan dentro de source" - echo "partition saving http://partition-saving.com" - echo "mbuffer (http://www.maier-komor.de/mbuffer.html) requiere ksh" - echo "udp-cast 2008-09-14 http://udpcast.linux.lu/" - echo "ctorrent 3.3.2 http://www.rahul.net/dholmes/ctorrent/" - echo "wmi-client: https://launchpad.net/ubuntu/jaunty/+source/wmi/1:0.1.12-1" - echo "ms-sys http://ms-sys.sourceforge.net/" - echo "EACInterfaces copiar el binario a /usr/sbin" - echo NameCompany copiar a /usr/sbin" - echo NameNtpServer a /usr/sbin" -fi -} - - -function BuildOgClientNfs () { -#/** @function BuildOgClientNfs: @brief Genera una copia del sistema actual para convertirlo posteriormente en arranque pxe EAC. -#@param $1 str_DirectorioDestino -#@param $2 str_metodo (debootstrap o myfilsystem) -#@param ejemplo: BuildOgClientNfs /opt/opengnsys/tftpboot/ogClinent/ogClientNfs debootstrap -#@return: no definida -#@warning No controla que el el directorio destino debe estar montado en una particion distinta al sistema raiz. -#@attention -#@version 0.1 Date: 03/06/2009 Author Antonio J. Doblas Viso. Universidad de Malaga -#@note falta la creacion del kernel y el initrd -#*/ -if [ $# = 0 ] -then - echo"BuildOgClientNfs" - echo "sintaxis: BuildOfClientNfs str_path_contenedor str_metodo" - return -fi -if [ $# = 2 ] -then - if [ $2 = "myfilesystem" ] - then - cd / - cp -rav /. $1/. - cp -rav -/dev/. $1/dev/. - fi - if [ $2 = "debootstrap" ] - then - echo "debo" - fi -fi -} \ No newline at end of file diff --git a/client/initrd-tools/udeblist-jaunty.conf b/client/initrd-tools/udeblist-jaunty.conf deleted file mode 100644 index d5858518..00000000 --- a/client/initrd-tools/udeblist-jaunty.conf +++ /dev/null @@ -1,22 +0,0 @@ -install:cryptsetup-udeb -install:dmraid-udeb -install:dmsetup-udeb -install:e2fsprogs-udeb -install:fbset-udeb -install:fdisk-udeb -install:fuse-utils-udeb -install:jfsutils-udeb -install:kbd-udeb -install:lvm2-udeb -install:mdadm-udeb -install:mkreiserfs-udeb -install:ntfs-3g-udeb -install:ntfsprogs-udeb -install:openssh-client-udeb -install:openssh-server-udeb -install:parted-udeb -install:reiserfsprogs-udeb -install:xfsprogs-udeb -install:fs-core-modules-2.6.28-11-generic-di -install:mouse-modules-2.6.28-11-generic-di -remove:kernel-image-2.6.28-11-generic-di diff --git a/client/initrd-tools/udeblist-karmic.conf b/client/initrd-tools/udeblist-karmic.conf deleted file mode 100644 index 9ca151df..00000000 --- a/client/initrd-tools/udeblist-karmic.conf +++ /dev/null @@ -1,22 +0,0 @@ -install:cryptsetup-udeb -install:dmraid-udeb -install:dmsetup-udeb -install:e2fsprogs-udeb -install:fbset-udeb -install:fdisk-udeb -install:fuse-utils-udeb -install:jfsutils-udeb -install:kbd-udeb -install:lvm2-udeb -install:mdadm-udeb -install:mkreiserfs-udeb -install:ntfs-3g-udeb -install:ntfsprogs-udeb -install:openssh-client-udeb -install:openssh-server-udeb -install:parted-udeb -install:reiserfsprogs-udeb -install:xfsprogs-udeb -install:fs-core-modules-2.6.31-14-generic-di -install:mouse-modules-2.6.31-14-generic-di -remove:kernel-image-2.6.31-14-generic-di diff --git a/client/initrd-tools/udeblist-lucid.conf b/client/initrd-tools/udeblist-lucid.conf deleted file mode 100644 index dfb35622..00000000 --- a/client/initrd-tools/udeblist-lucid.conf +++ /dev/null @@ -1,31 +0,0 @@ -install:cryptsetup-udeb -install:dmidecode-udeb -install:dmraid-udeb -install:dmsetup-udeb -install:e2fsprogs-udeb -install:fbset-udeb -install:fdisk-udeb -install:fuse-utils-udeb -install:jfsutils-udeb -install:kbd-udeb -install:lvm2-udeb -install:lsb-release-udeb -install:mdadm-udeb -install:mkreiser4-udeb -install:mkreiserfs-udeb -install:ntfs-3g-udeb -install:ntfsprogs-udeb -install:openssh-client-udeb -install:openssh-server-udeb -install:parted-udeb -install:reiser4progs-udeb -install:reiserfsprogs-udeb -install:util-linux-udeb -install:xfsprogs-udeb -install:fs-core-modules-KERNELVERS-di -install:fs-secondary-modules-KERNELVERS-di -install:mouse-modules-KERNELVERS-di -install:pata-modules-KERNELVERS-di -install:sata-modules-KERNELVERS-di -install:scsi-modules-KERNELVERS-di -remove:kernel-image-KERNELVERS-di diff --git a/client/initrd-tools/udeblist-maverick.conf b/client/initrd-tools/udeblist-maverick.conf deleted file mode 100644 index d340ec65..00000000 --- a/client/initrd-tools/udeblist-maverick.conf +++ /dev/null @@ -1,28 +0,0 @@ -install:cryptsetup-udeb -install:dmraid-udeb -install:dmsetup-udeb -install:e2fsprogs-udeb -install:fbset-udeb -install:fdisk-udeb -install:fuse-utils-udeb -install:jfsutils-udeb -install:kbd-udeb -install:lvm2-udeb -install:lsb-release-udeb -install:mdadm-udeb -install:mkreiserfs-udeb -install:ntfs-3g-udeb -install:ntfsprogs-udeb -install:openssh-client-udeb -install:openssh-server-udeb -install:parted-udeb -install:reiserfsprogs-udeb -install:util-linux-udeb -install:xfsprogs-udeb -install:fs-core-modules-2.6.35-22-generic-di -install:fs-secondary-modules-2.6.35-22-generic-di -install:mouse-modules-2.6.35-22-generic-di -install:pata-modules-2.6.35-22-generic-di -install:sata-modules-2.6.35-22-generic-di -install:scsi-modules-2.6.35-22-generic-di -remove:kernel-image-2.6.35-22-generic-di diff --git a/client/initrd-tools/udeblist.conf b/client/initrd-tools/udeblist.conf deleted file mode 120000 index 4ab23c79..00000000 --- a/client/initrd-tools/udeblist.conf +++ /dev/null @@ -1 +0,0 @@ -udeblist-jaunty.conf \ No newline at end of file diff --git a/client/initrd-tools/upgrade-clients-udeb.sh b/client/initrd-tools/upgrade-clients-udeb.sh deleted file mode 100755 index afc5229e..00000000 --- a/client/initrd-tools/upgrade-clients-udeb.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -#@file upgrade-clients-udeb.sh -#@brief Actualiza los paquetes udeb que deben ser exportados a los clientes. -#@arg \c distrib - nombre de la distribución de Ubuntu (karmic, jaunty, ...). -#@note El script debe ser copiado a \c opengnsys/bin y el fichero de configuración a \c opengnsys/etc -#@note Formato del fichero \c udeb.list : {install|remove}:paquete - - -# Variables -PROG="$(basename $0)" -OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} -test "$(lsb_release -is 2>/dev/null)" == "Ubuntu" && DEFDISTRIB="$(lsb_release -cs)" -DEFDISTRIB=${DEFDISTRIB:-"lucid"} -DISTRIB=${1:-"$DEFDISTRIB"} # Si no se indica, usar distribución por defecto. -CFGFILE="$OPENGNSYS/etc/udeblist-$DISTRIB.conf" -OGUDEB="$OPENGNSYS/client/lib/udeb" -TMPUDEB="/tmp/udeb" -UDEBLIST="/etc/apt/sources.list.d/udeb.list" -KERNELVERS=$(strings $OPENGNSYS/tftpboot/linux | awk '/2.6.*generic/ {print $1}') - -# Comprobar fichero de configuración. -if [ ! -f "$CFGFILE" ]; then - echo "$PROG: No existe el fichero de configuración \"$CFGFILE\"" >&2 - exit 1 -fi -PACKAGES_INSTALL=$(awk -F: '$1~/install/ {print $2}' $CFGFILE) -PACKAGES_INSTALL=${PACKAGES_INSTALL//KERNELVERS/$KERNELVERS} -PACKAGES_REMOVE=$(awk -F: '$1~/remove/ {print $2}' $CFGFILE) -PACKAGES_REMOVE=${PACKAGES_REMOVE//KERNELVERS/$KERNELVERS} -if [ -z "$PACKAGES_INSTALL" ]; then - echo "$PROG: No hay paquetes para descargar." >&2 - exit 2 -fi - -# Crear configuración para apt-get -echo "deb http://archive.ubuntu.com/ubuntu/ $DISTRIB main/debian-installer universe/debian-installer" >$UDEBLIST -echo "deb http://archive.ubuntu.com/ubuntu/ $DISTRIB-updates main/debian-installer universe/debian-installer" >>$UDEBLIST -mkdir -p $TMPUDEB/partial -rm -f $TMPUDEB/*.udeb - -# Descargar paquetes udeb, borrar los descartables y moverlos al NFS. -apt-get update -apt-get install -y -o dir::cache::archives=$TMPUDEB -d $PACKAGES_INSTALL -for i in $PACKAGES_REMOVE; do - rm -f $TMPUDEB/${i}_*.udeb -done -rm -f $OGUDEB/*.udeb -mv $TMPUDEB/*.udeb $OGUDEB -rm -f $UDEBLIST - -- cgit v1.2.3-18-g5258 From 642da21e1c81c629e8ab157e2226c50035c02689 Mon Sep 17 00:00:00 2001 From: ramon Date: Wed, 6 Apr 2011 12:38:40 +0000 Subject: Versión 1.0: quitar permiso innecesario de ejecutación a ficheros de tipos de letra. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1724 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/LICENSE | 674 --------------------- client/LICENSE.en.txt | 674 +++++++++++++++++++++ client/README.es.txt | 1 - client/shared/lib/fonts/DejaVuSans-Bold.ttf | Bin client/shared/lib/fonts/DejaVuSans-BoldOblique.ttf | Bin client/shared/lib/fonts/DejaVuSans-Oblique.ttf | Bin client/shared/lib/fonts/DejaVuSans.ttf | Bin client/shared/lib/fonts/DejaVuSansMono-Bold.ttf | Bin .../lib/fonts/DejaVuSansMono-BoldOblique.ttf | Bin client/shared/lib/fonts/DejaVuSansMono-Oblique.ttf | Bin client/shared/lib/fonts/DejaVuSansMono.ttf | Bin client/shared/lib/fonts/DejaVuSerif-Bold.ttf | Bin .../shared/lib/fonts/DejaVuSerif-BoldOblique.ttf | Bin client/shared/lib/fonts/DejaVuSerif-Oblique.ttf | Bin client/shared/lib/fonts/DejaVuSerif.ttf | Bin client/shared/lib/fonts/README | 0 client/shared/lib/fonts/UTBI____.pfa | 0 client/shared/lib/fonts/UTB_____.pfa | 0 client/shared/lib/fonts/UTI_____.pfa | 0 client/shared/lib/fonts/UTRG____.pfa | 0 client/shared/lib/fonts/Vera.ttf | Bin client/shared/lib/fonts/VeraBI.ttf | Bin client/shared/lib/fonts/VeraBd.ttf | Bin client/shared/lib/fonts/VeraIt.ttf | Bin client/shared/lib/fonts/VeraMoBI.ttf | Bin client/shared/lib/fonts/VeraMoBd.ttf | Bin client/shared/lib/fonts/VeraMoIt.ttf | Bin client/shared/lib/fonts/VeraMono.ttf | Bin client/shared/lib/fonts/VeraSe.ttf | Bin client/shared/lib/fonts/VeraSeBd.ttf | Bin client/shared/lib/fonts/c0419bt_.pfb | Bin client/shared/lib/fonts/c0582bt_.pfb | Bin client/shared/lib/fonts/c0583bt_.pfb | Bin client/shared/lib/fonts/c0611bt_.pfb | Bin client/shared/lib/fonts/c0632bt_.pfb | Bin client/shared/lib/fonts/c0633bt_.pfb | Bin client/shared/lib/fonts/c0648bt_.pfb | Bin client/shared/lib/fonts/c0649bt_.pfb | Bin client/shared/lib/fonts/cour.pfa | 0 client/shared/lib/fonts/courb.pfa | 0 client/shared/lib/fonts/courbi.pfa | 0 client/shared/lib/fonts/couri.pfa | 0 client/shared/lib/fonts/cursor.pfa | 0 client/shared/lib/fonts/fixed_120_50.qpf | Bin client/shared/lib/fonts/fixed_70_50.qpf | Bin client/shared/lib/fonts/helvetica_100_50.qpf | Bin client/shared/lib/fonts/helvetica_100_50i.qpf | Bin client/shared/lib/fonts/helvetica_100_75.qpf | Bin client/shared/lib/fonts/helvetica_100_75i.qpf | Bin client/shared/lib/fonts/helvetica_120_50.qpf | Bin client/shared/lib/fonts/helvetica_120_50i.qpf | Bin client/shared/lib/fonts/helvetica_120_75.qpf | Bin client/shared/lib/fonts/helvetica_120_75i.qpf | Bin client/shared/lib/fonts/helvetica_140_50.qpf | Bin client/shared/lib/fonts/helvetica_140_50i.qpf | Bin client/shared/lib/fonts/helvetica_140_75.qpf | Bin client/shared/lib/fonts/helvetica_140_75i.qpf | Bin client/shared/lib/fonts/helvetica_180_50.qpf | Bin client/shared/lib/fonts/helvetica_180_50i.qpf | Bin client/shared/lib/fonts/helvetica_180_75.qpf | Bin client/shared/lib/fonts/helvetica_180_75i.qpf | Bin client/shared/lib/fonts/helvetica_240_50.qpf | Bin client/shared/lib/fonts/helvetica_240_50i.qpf | Bin client/shared/lib/fonts/helvetica_240_75.qpf | Bin client/shared/lib/fonts/helvetica_240_75i.qpf | Bin client/shared/lib/fonts/helvetica_80_50.qpf | Bin client/shared/lib/fonts/helvetica_80_50i.qpf | Bin client/shared/lib/fonts/helvetica_80_75.qpf | Bin client/shared/lib/fonts/helvetica_80_75i.qpf | Bin client/shared/lib/fonts/japanese_230_50.qpf | Bin client/shared/lib/fonts/l047013t.pfa | 0 client/shared/lib/fonts/l047016t.pfa | 0 client/shared/lib/fonts/l047033t.pfa | 0 client/shared/lib/fonts/l047036t.pfa | 0 client/shared/lib/fonts/l048013t.pfa | 0 client/shared/lib/fonts/l048016t.pfa | 0 client/shared/lib/fonts/l048033t.pfa | 0 client/shared/lib/fonts/l048036t.pfa | 0 client/shared/lib/fonts/l049013t.pfa | 0 client/shared/lib/fonts/l049016t.pfa | 0 client/shared/lib/fonts/l049033t.pfa | 0 client/shared/lib/fonts/l049036t.pfa | 0 client/shared/lib/fonts/micro_40_50.qpf | Bin client/shared/lib/fonts/unifont_160_50.qpf | Bin 84 files changed, 674 insertions(+), 675 deletions(-) delete mode 100644 client/LICENSE create mode 100644 client/LICENSE.en.txt mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSans-Bold.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSans-BoldOblique.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSans-Oblique.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSans.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSansMono-Bold.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSansMono-BoldOblique.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSansMono-Oblique.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSansMono.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSerif-Bold.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSerif-BoldOblique.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSerif-Oblique.ttf mode change 100755 => 100644 client/shared/lib/fonts/DejaVuSerif.ttf mode change 100755 => 100644 client/shared/lib/fonts/README mode change 100755 => 100644 client/shared/lib/fonts/UTBI____.pfa mode change 100755 => 100644 client/shared/lib/fonts/UTB_____.pfa mode change 100755 => 100644 client/shared/lib/fonts/UTI_____.pfa mode change 100755 => 100644 client/shared/lib/fonts/UTRG____.pfa mode change 100755 => 100644 client/shared/lib/fonts/Vera.ttf mode change 100755 => 100644 client/shared/lib/fonts/VeraBI.ttf mode change 100755 => 100644 client/shared/lib/fonts/VeraBd.ttf mode change 100755 => 100644 client/shared/lib/fonts/VeraIt.ttf mode change 100755 => 100644 client/shared/lib/fonts/VeraMoBI.ttf mode change 100755 => 100644 client/shared/lib/fonts/VeraMoBd.ttf mode change 100755 => 100644 client/shared/lib/fonts/VeraMoIt.ttf mode change 100755 => 100644 client/shared/lib/fonts/VeraMono.ttf mode change 100755 => 100644 client/shared/lib/fonts/VeraSe.ttf mode change 100755 => 100644 client/shared/lib/fonts/VeraSeBd.ttf mode change 100755 => 100644 client/shared/lib/fonts/c0419bt_.pfb mode change 100755 => 100644 client/shared/lib/fonts/c0582bt_.pfb mode change 100755 => 100644 client/shared/lib/fonts/c0583bt_.pfb mode change 100755 => 100644 client/shared/lib/fonts/c0611bt_.pfb mode change 100755 => 100644 client/shared/lib/fonts/c0632bt_.pfb mode change 100755 => 100644 client/shared/lib/fonts/c0633bt_.pfb mode change 100755 => 100644 client/shared/lib/fonts/c0648bt_.pfb mode change 100755 => 100644 client/shared/lib/fonts/c0649bt_.pfb mode change 100755 => 100644 client/shared/lib/fonts/cour.pfa mode change 100755 => 100644 client/shared/lib/fonts/courb.pfa mode change 100755 => 100644 client/shared/lib/fonts/courbi.pfa mode change 100755 => 100644 client/shared/lib/fonts/couri.pfa mode change 100755 => 100644 client/shared/lib/fonts/cursor.pfa mode change 100755 => 100644 client/shared/lib/fonts/fixed_120_50.qpf mode change 100755 => 100644 client/shared/lib/fonts/fixed_70_50.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_100_50.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_100_50i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_100_75.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_100_75i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_120_50.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_120_50i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_120_75.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_120_75i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_140_50.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_140_50i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_140_75.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_140_75i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_180_50.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_180_50i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_180_75.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_180_75i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_240_50.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_240_50i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_240_75.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_240_75i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_80_50.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_80_50i.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_80_75.qpf mode change 100755 => 100644 client/shared/lib/fonts/helvetica_80_75i.qpf mode change 100755 => 100644 client/shared/lib/fonts/japanese_230_50.qpf mode change 100755 => 100644 client/shared/lib/fonts/l047013t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l047016t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l047033t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l047036t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l048013t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l048016t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l048033t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l048036t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l049013t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l049016t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l049033t.pfa mode change 100755 => 100644 client/shared/lib/fonts/l049036t.pfa mode change 100755 => 100644 client/shared/lib/fonts/micro_40_50.qpf mode change 100755 => 100644 client/shared/lib/fonts/unifont_160_50.qpf diff --git a/client/LICENSE b/client/LICENSE deleted file mode 100644 index 94a9ed02..00000000 --- a/client/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 3 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, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/client/LICENSE.en.txt b/client/LICENSE.en.txt new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/client/LICENSE.en.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 3 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/client/README.es.txt b/client/README.es.txt index 2fbe423e..cb6a5e14 100644 --- a/client/README.es.txt +++ b/client/README.es.txt @@ -4,7 +4,6 @@ OpenGnSys Client README Este directorio contiene la estructura de datos del cliente OpenGNSys. -- initrd-tools herramientas de eneración del cliente Initrd antiguo - browser código fuente del cliente gráfico OpenGNSys Browser. - engine funciones del motor (se instalará en el servidor en /opt/opengneys/client/lib/engine). diff --git a/client/shared/lib/fonts/DejaVuSans-Bold.ttf b/client/shared/lib/fonts/DejaVuSans-Bold.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSans-BoldOblique.ttf b/client/shared/lib/fonts/DejaVuSans-BoldOblique.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSans-Oblique.ttf b/client/shared/lib/fonts/DejaVuSans-Oblique.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSans.ttf b/client/shared/lib/fonts/DejaVuSans.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSansMono-Bold.ttf b/client/shared/lib/fonts/DejaVuSansMono-Bold.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSansMono-BoldOblique.ttf b/client/shared/lib/fonts/DejaVuSansMono-BoldOblique.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSansMono-Oblique.ttf b/client/shared/lib/fonts/DejaVuSansMono-Oblique.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSansMono.ttf b/client/shared/lib/fonts/DejaVuSansMono.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSerif-Bold.ttf b/client/shared/lib/fonts/DejaVuSerif-Bold.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSerif-BoldOblique.ttf b/client/shared/lib/fonts/DejaVuSerif-BoldOblique.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSerif-Oblique.ttf b/client/shared/lib/fonts/DejaVuSerif-Oblique.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/DejaVuSerif.ttf b/client/shared/lib/fonts/DejaVuSerif.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/README b/client/shared/lib/fonts/README old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/UTBI____.pfa b/client/shared/lib/fonts/UTBI____.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/UTB_____.pfa b/client/shared/lib/fonts/UTB_____.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/UTI_____.pfa b/client/shared/lib/fonts/UTI_____.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/UTRG____.pfa b/client/shared/lib/fonts/UTRG____.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/Vera.ttf b/client/shared/lib/fonts/Vera.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/VeraBI.ttf b/client/shared/lib/fonts/VeraBI.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/VeraBd.ttf b/client/shared/lib/fonts/VeraBd.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/VeraIt.ttf b/client/shared/lib/fonts/VeraIt.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/VeraMoBI.ttf b/client/shared/lib/fonts/VeraMoBI.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/VeraMoBd.ttf b/client/shared/lib/fonts/VeraMoBd.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/VeraMoIt.ttf b/client/shared/lib/fonts/VeraMoIt.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/VeraMono.ttf b/client/shared/lib/fonts/VeraMono.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/VeraSe.ttf b/client/shared/lib/fonts/VeraSe.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/VeraSeBd.ttf b/client/shared/lib/fonts/VeraSeBd.ttf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/c0419bt_.pfb b/client/shared/lib/fonts/c0419bt_.pfb old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/c0582bt_.pfb b/client/shared/lib/fonts/c0582bt_.pfb old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/c0583bt_.pfb b/client/shared/lib/fonts/c0583bt_.pfb old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/c0611bt_.pfb b/client/shared/lib/fonts/c0611bt_.pfb old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/c0632bt_.pfb b/client/shared/lib/fonts/c0632bt_.pfb old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/c0633bt_.pfb b/client/shared/lib/fonts/c0633bt_.pfb old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/c0648bt_.pfb b/client/shared/lib/fonts/c0648bt_.pfb old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/c0649bt_.pfb b/client/shared/lib/fonts/c0649bt_.pfb old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/cour.pfa b/client/shared/lib/fonts/cour.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/courb.pfa b/client/shared/lib/fonts/courb.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/courbi.pfa b/client/shared/lib/fonts/courbi.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/couri.pfa b/client/shared/lib/fonts/couri.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/cursor.pfa b/client/shared/lib/fonts/cursor.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/fixed_120_50.qpf b/client/shared/lib/fonts/fixed_120_50.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/fixed_70_50.qpf b/client/shared/lib/fonts/fixed_70_50.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_100_50.qpf b/client/shared/lib/fonts/helvetica_100_50.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_100_50i.qpf b/client/shared/lib/fonts/helvetica_100_50i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_100_75.qpf b/client/shared/lib/fonts/helvetica_100_75.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_100_75i.qpf b/client/shared/lib/fonts/helvetica_100_75i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_120_50.qpf b/client/shared/lib/fonts/helvetica_120_50.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_120_50i.qpf b/client/shared/lib/fonts/helvetica_120_50i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_120_75.qpf b/client/shared/lib/fonts/helvetica_120_75.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_120_75i.qpf b/client/shared/lib/fonts/helvetica_120_75i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_140_50.qpf b/client/shared/lib/fonts/helvetica_140_50.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_140_50i.qpf b/client/shared/lib/fonts/helvetica_140_50i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_140_75.qpf b/client/shared/lib/fonts/helvetica_140_75.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_140_75i.qpf b/client/shared/lib/fonts/helvetica_140_75i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_180_50.qpf b/client/shared/lib/fonts/helvetica_180_50.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_180_50i.qpf b/client/shared/lib/fonts/helvetica_180_50i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_180_75.qpf b/client/shared/lib/fonts/helvetica_180_75.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_180_75i.qpf b/client/shared/lib/fonts/helvetica_180_75i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_240_50.qpf b/client/shared/lib/fonts/helvetica_240_50.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_240_50i.qpf b/client/shared/lib/fonts/helvetica_240_50i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_240_75.qpf b/client/shared/lib/fonts/helvetica_240_75.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_240_75i.qpf b/client/shared/lib/fonts/helvetica_240_75i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_80_50.qpf b/client/shared/lib/fonts/helvetica_80_50.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_80_50i.qpf b/client/shared/lib/fonts/helvetica_80_50i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_80_75.qpf b/client/shared/lib/fonts/helvetica_80_75.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/helvetica_80_75i.qpf b/client/shared/lib/fonts/helvetica_80_75i.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/japanese_230_50.qpf b/client/shared/lib/fonts/japanese_230_50.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l047013t.pfa b/client/shared/lib/fonts/l047013t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l047016t.pfa b/client/shared/lib/fonts/l047016t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l047033t.pfa b/client/shared/lib/fonts/l047033t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l047036t.pfa b/client/shared/lib/fonts/l047036t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l048013t.pfa b/client/shared/lib/fonts/l048013t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l048016t.pfa b/client/shared/lib/fonts/l048016t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l048033t.pfa b/client/shared/lib/fonts/l048033t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l048036t.pfa b/client/shared/lib/fonts/l048036t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l049013t.pfa b/client/shared/lib/fonts/l049013t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l049016t.pfa b/client/shared/lib/fonts/l049016t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l049033t.pfa b/client/shared/lib/fonts/l049033t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/l049036t.pfa b/client/shared/lib/fonts/l049036t.pfa old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/micro_40_50.qpf b/client/shared/lib/fonts/micro_40_50.qpf old mode 100755 new mode 100644 diff --git a/client/shared/lib/fonts/unifont_160_50.qpf b/client/shared/lib/fonts/unifont_160_50.qpf old mode 100755 new mode 100644 -- cgit v1.2.3-18-g5258 From a80bf335e67b8ba3d2975675fef81873124bcd9b Mon Sep 17 00:00:00 2001 From: irina Date: Thu, 7 Apr 2011 12:31:12 +0000 Subject: test de File.lib y Net.lib git-svn-id: https://opengnsys.es/svn/branches/version1.0@1737 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../shared/lib/engine/tests/NoModify/File1.shtest | 80 ++++++++++++++++++++++ .../shared/lib/engine/tests/NoModify/Net1.shtest | 21 ++++++ 2 files changed, 101 insertions(+) create mode 100644 client/shared/lib/engine/tests/NoModify/File1.shtest create mode 100644 client/shared/lib/engine/tests/NoModify/Net1.shtest diff --git a/client/shared/lib/engine/tests/NoModify/File1.shtest b/client/shared/lib/engine/tests/NoModify/File1.shtest new file mode 100644 index 00000000..c5ed051c --- /dev/null +++ b/client/shared/lib/engine/tests/NoModify/File1.shtest @@ -0,0 +1,80 @@ +Test de compribación de la libreria File No modifica nada +======================================== +Este test NECESITA LA CACHE + +Comprobamos que existe CACHE +$ ls -d $OGCAC$OGIMG # Este test NECESITA LA CACHE ############################## +/opt/opengnsys/cache/opt/opengnsys/images + + +$ ogMakeDir CACHE prueba +$ ls -d $OGCAC$OGIMG/prueba +/opt/opengnsys/cache/opt/opengnsys/images/prueba + +$ touch $OGCAC$OGIMG/fichero_prueba +$ ogCopyFile CACHE fichero_prueba CACHE prueba +$ ls $OGCAC$OGIMG/prueba +fichero_prueba + +$ ogGetPath CACHE fichero_prueba +/opt/opengnsys/cache/opt/opengnsys/images/fichero_prueba + +# Si no existe el fichero +$ ogGetPath CACHE fichero_prueba3; echo $? +1 + +$ ogGetParentPath CACHE fichero_prueba +/opt/opengnsys/cache/opt/opengnsys/images + +# si el fichero no existe +$ ogGetParentPath CACHE prueba/fichero_prueba3q23 +/opt/opengnsys/cache/opt/opengnsys/images/prueba + +# Si dir padre no existe +$ ogGetParentPath CACHE pruebaNO/fichero_prueba3; echo $? +1 + +$ AUX=$(ogCalculateChecksum $OGCAC$OGIMG/fichero_prueba); AUX2=$(md5sum $OGCAC$OGIMG/fichero_prueba| cut -f1 -d\ ); if [ "$AUX" == "$AUX2" ]; then echo si; else echo no; fi +si + +$ ogCompareChecksumFiles CACHE fichero_prueba CACHE prueba/fichero_prueba; echo $? +0 + +$ echo 333 >> $OGCAC$OGIMG/fichero_prueba2 +$ ogMakeChecksumFile CACHE fichero_prueba2 +$ ls $OGCAC$OGIMG/fichero_prueba2.sum +/opt/opengnsys/cache/opt/opengnsys/images/fichero_prueba2.sum + +$ ogMakeChecksumFile CACHE prueba/fichero_prueba +$ ogCompareChecksumFiles CACHE fichero_prueba2 CACHE prueba/fichero_prueba; echo $? +1 + +$ ogIsNewerFile CACHE fichero_prueba2 CACHE prueba/fichero_prueba; echo $? +0 + +$ ogIsNewerFile CACHE prueba/fichero_prueba CACHE fichero_prueba2; echo $? +1 + +$ ogIsNewerFile CACHE fichero_prueba CACHE prueba/fichero_prueba; echo $? +1 + +$ ogNewPath CACHE prueba2 +/opt/opengnsys/cache//opt/opengnsys/images/prueba2 +$ ls -d $OGCAC$OGIMG/prueba2 +/opt/opengnsys/cache/opt/opengnsys/images/prueba2 + +$ ogDeleteTree CACHE prueba +$ ls -d $OGCAC$OGIMG/prueba +ls: cannot access /opt/opengnsys/cache/opt/opengnsys/images/prueba: No such file or directory + +$ ogDeleteFile CACHE fichero_prueba +$ ls $OGCAC$OGIMG/fichero_prueba +ls: cannot access /opt/opengnsys/cache/opt/opengnsys/images/fichero_prueba: No such file or directory + +# Limpiamos el directorio +$ rm -rf $OGCAC$OGIMG/fichero_prueba2* $OGCAC$OGIMG/prueba2 + + +MEJORAS +======= +ogCompareChecksumFiles -> si no existen los ficheros de Checksum da verdadero. Deberia dar falso diff --git a/client/shared/lib/engine/tests/NoModify/Net1.shtest b/client/shared/lib/engine/tests/NoModify/Net1.shtest new file mode 100644 index 00000000..977b00d6 --- /dev/null +++ b/client/shared/lib/engine/tests/NoModify/Net1.shtest @@ -0,0 +1,21 @@ +Test para la librería Net.lib No modifica +========================================= +$ if [ "$(ogGetHostname)" == "$(hostname)" ] ; then echo si; else echo no; fi +si + +$ if [ "$(ogGetNetInterface)" == "$(ifconfig|head -1|cut -d\ -f1 )" ]; then echo si; else echo no; fi +si + +$ AUX=$(ifconfig eth0|grep 'inet addr'|cut -dB -f1|sed s/\ //g); if [ "$(ogGetIpAddress)" == "${AUX#*:}" ]; then echo si; else echo no; fi +si + +$ AUX=$(ifconfig |head -1|sed s/\ //g| tr '[a-z]' '[A-Z]'); if [ "$(ogGetMacAddress)" == "${AUX##*HWADDR}" ]; then echo si; else echo no; fi +si + +$ AUX=$(df|grep $OGIMG); if [ "//$(ogGetRepoIp)" == "${AUX%/ogimages*}" ]; then echo si; else echo no; fi +si + +$ AUX=$(df|grep $OGIMG); if [ "//$(ogGetServerIp)" == "${AUX%/ogimages*}" ]; then echo si; else echo no; fi +si + + -- cgit v1.2.3-18-g5258 From a7b62997241b90e291752dc8e42729cc606e8b2b Mon Sep 17 00:00:00 2001 From: ramon Date: Thu, 7 Apr 2011 12:34:50 +0000 Subject: Versión 1.0: Corregir fallo en compilación del Browser; mensaje de aceptación para ejecutar acción más elegante; añadir enlace simbólico para nuevo Browser. Modificado #243. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1738 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/browser/src/main.cpp | 1 + client/browser/src/mainwindow.cpp | 10 ++++++---- client/shared/etc/preinit/fileslinks.sh | 10 +++------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/client/browser/src/main.cpp b/client/browser/src/main.cpp index 942d2cf4..dd3ac6ed 100644 --- a/client/browser/src/main.cpp +++ b/client/browser/src/main.cpp @@ -1,6 +1,7 @@ #include #include #include "mainwindow.h" +#include int main(int argc, char *argv[]) { diff --git a/client/browser/src/mainwindow.cpp b/client/browser/src/mainwindow.cpp index 4ca3fa3e..6e7254d9 100644 --- a/client/browser/src/mainwindow.cpp +++ b/client/browser/src/mainwindow.cpp @@ -164,8 +164,10 @@ void MainWindow::slotLinkHandle(const QUrl &url) else if(urlString.startsWith(COMMAND_WITH_CONFIRMATION)) { QMessageBox msgBox; - msgBox.setText(tr("ATENCIN! La siguiente accin puede modificar datos o tardar varios minutos. El equipo no podr ser utilizado durante su ejecucin.")); - msgBox.setInformativeText(tr("Continuar?")); + msgBox.setIcon(QMessageBox::Question); + msgBox.setWindowTitle(tr("AVISO")); + msgBox.setTextFormat(Qt::RichText); + msgBox.setText(tr("La siguiente acción puede modificar datos o tardar varios minutos. El equipo no podrá ser utilizado durante su ejecución.")); msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Ok); if (msgBox.exec() == QMessageBox::Ok) @@ -238,7 +240,7 @@ void MainWindow::slotProcessOutput() while((m_process->readLine(buf,BUFFERSIZE) > 0)) { QString s(buf); - print(tr("Proc. Output: ")+s); + print(tr("Proc. stdout: ")+s); captureOutputForStatusBar(s); } } @@ -250,7 +252,7 @@ void MainWindow::slotProcessErrorOutput() while((m_process->readLine(buf,BUFFERSIZE) > 0)) { QString s(buf); - print(tr("Proc. Error: ")+s); + print(tr("Proc. stderr: ")+s); } } diff --git a/client/shared/etc/preinit/fileslinks.sh b/client/shared/etc/preinit/fileslinks.sh index feebe893..93281aad 100755 --- a/client/shared/etc/preinit/fileslinks.sh +++ b/client/shared/etc/preinit/fileslinks.sh @@ -23,13 +23,9 @@ if [ -n "$OPENGNSYS" ]; then mkdir -p /var/lock # Directorio de tipos de letras para el browser. - #QTLIBS=$(grep qt_libspath $OGBIN/browser 2>/dev/null | cut -f2 -d=) - #QTVERS="/usr/local/QtEmbedded-4.6.3" - #QTDIR="${QTVERS%-*}" - #mkdir -p $QTDIR - #ln -fs $QTDIR $QTVERS - #mkdir -p $QTDIR/lib - #ln -fs $OGLIB/fonts $QTDIR/lib + QTDIR="/usr/local" + mkdir -p $QTDIR/lib + ln -fs $OGLIB/fonts $QTDIR/lib else # FIXME Error: entorno de OpenGNSys no configurado. -- cgit v1.2.3-18-g5258 From 81291cedbfb948ede9f583252cd17f6764769d32 Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 8 Apr 2011 09:02:32 +0000 Subject: Versión 1.0: Traducidos mensajes del Browser y añadido códigos de color para la pestaña de salida de procesos. Modificado #243. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1746 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/browser/src/mainwindow.cpp | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/client/browser/src/mainwindow.cpp b/client/browser/src/mainwindow.cpp index 6e7254d9..646bacf9 100644 --- a/client/browser/src/mainwindow.cpp +++ b/client/browser/src/mainwindow.cpp @@ -156,27 +156,31 @@ void MainWindow::slotLinkHandle(const QUrl &url) } QString urlString = url.toString(); - // Si es un link del tipo COMMAND lo ejecutamos if(urlString.startsWith(COMMAND)) { + // Si es link de tipo COMMAND, ejecutar. executeCommand(urlString.remove(0,QString(COMMAND).length())); } else if(urlString.startsWith(COMMAND_WITH_CONFIRMATION)) { + // Si es link de tipo COMMAND_WITH_CONFIRMATION, pedir confirmacin de ejecutar. QMessageBox msgBox; msgBox.setIcon(QMessageBox::Question); msgBox.setWindowTitle(tr("AVISO")); msgBox.setTextFormat(Qt::RichText); msgBox.setText(tr("La siguiente acción puede modificar datos o tardar varios minutos. El equipo no podrá ser utilizado durante su ejecución.")); - msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); - msgBox.setDefaultButton(QMessageBox::Ok); - if (msgBox.exec() == QMessageBox::Ok) + QPushButton *execButton = msgBox.addButton(tr("Ejecutar"), QMessageBox::ActionRole); + msgBox.addButton(tr("Cancelar"), QMessageBox::RejectRole); + msgBox.setDefaultButton(execButton); + msgBox.exec(); + if (msgBox.clickedButton() == execButton) { executeCommand(urlString.remove(0,QString(COMMAND_WITH_CONFIRMATION).length())); } } else { + // Si es otro link, cargar pgina web. m_web->load(url); } } @@ -200,10 +204,13 @@ void MainWindow::slotWebLoadFinished(bool ok) if(ok == false) { QMessageBox msgBox; - msgBox.setText(tr("La pagina web no pudo ser cargada. Qu quieres hacer?")); + msgBox.setIcon(QMessageBox::Question); + msgBox.setWindowTitle(tr("AVISO")); + msgBox.setTextFormat(Qt::RichText); + msgBox.setText(tr("La página no se puede cargar.")); QPushButton *reloadButton = msgBox.addButton(tr("Recargar"), QMessageBox::ActionRole); - msgBox.addButton(QMessageBox::Abort); + msgBox.addButton(tr("Abortar"), QMessageBox::Abort); msgBox.exec(); @@ -252,7 +259,10 @@ void MainWindow::slotProcessErrorOutput() while((m_process->readLine(buf,BUFFERSIZE) > 0)) { QString s(buf); - print(tr("Proc. stderr: ")+s); + m_output->insertPlainText(tr("Proc. stderr: ")); + m_output->setTextColor(QColor(Qt::darkBlue)); + print(s); + m_output->setTextColor(QColor(Qt::black)); } } @@ -264,23 +274,24 @@ void MainWindow::slotProcessFinished(int code,QProcess::ExitStatus status) } else { - print(tr("El proceso fall inesperadamente. Output: "+code)); + print(tr("El proceso ha fallado inesperadamente. Salida: "+code)); } finishProgressBar(); } void MainWindow::slotProcessError(QProcess::ProcessError error) { + m_output->setTextColor(QColor(Qt::darkRed)); switch(error) { case QProcess::FailedToStart: print(tr("Imposible lanzar el proceso.")); break; case QProcess::WriteError: - print(tr("Write error happened in the process.")); + print(tr("Error de escritura en el proceso.")); break; case QProcess::ReadError: - print(tr("Read error happened in the process.")); + print(tr("Error de lectura del proceso.")); break; // No capturo crashed porque la pillo por finished case QProcess::Crashed: @@ -288,10 +299,11 @@ void MainWindow::slotProcessError(QProcess::ProcessError error) break; case QProcess::UnknownError: default: - print(tr("Unknown error.")); + print(tr("Error desconocido.")); break; } finishProgressBar(); + m_output->setTextColor(QColor(Qt::black)); } void MainWindow::slotCreateTerminal() @@ -414,6 +426,9 @@ void MainWindow::executeCommand(QString &string) // Le ponemos el mismo entorno que tiene el browser ahora mismo m_process->setEnvironment(QProcess::systemEnvironment()); m_process->start(program,list); - print(tr("Lanzando el comando: ")+program+" "+list.join(" ")+"."); + m_output->insertPlainText(tr("Lanzando el comando: ")); + m_output->setTextColor(QColor(Qt::darkGreen)); + print(program+" "+list.join(" ")); + m_output->setTextColor(QColor(Qt::black)); startProgressBar(); } -- cgit v1.2.3-18-g5258 From c0ee9e29c65c9cdc432bddab842550e5014f47d6 Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 8 Apr 2011 09:07:21 +0000 Subject: Version 1.0: corregir errata. git-svn-id: https://opengnsys.es/svn/branches/version1.0@1747 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/browser/src/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/browser/src/mainwindow.cpp b/client/browser/src/mainwindow.cpp index 646bacf9..40a02ab5 100644 --- a/client/browser/src/mainwindow.cpp +++ b/client/browser/src/mainwindow.cpp @@ -210,7 +210,7 @@ void MainWindow::slotWebLoadFinished(bool ok) msgBox.setText(tr("La página no se puede cargar.")); QPushButton *reloadButton = msgBox.addButton(tr("Recargar"), QMessageBox::ActionRole); - msgBox.addButton(tr("Abortar"), QMessageBox::Abort); + msgBox.addButton(tr("Abortar"), QMessageBox::RejectRole); msgBox.exec(); -- cgit v1.2.3-18-g5258 From 489537290b960ac4e9f3b57b2e15480720aa78d9 Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 8 Apr 2011 09:52:50 +0000 Subject: Versión 1.0: Compilado Browser del cliente con los siguientes cambios: * Letra de espaciado fijo en pestaña de terminal. * Mensajes en castellano con letra UTF-8. * Letras en colores descriptivos en pestaña de salida de comandos. * Reducción de tamaño del ejecutable. Cerrado #243. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1748 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/shared/bin/browser | Bin 25407040 -> 23763136 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/client/shared/bin/browser b/client/shared/bin/browser index 08b77dbd..def911e7 100755 Binary files a/client/shared/bin/browser and b/client/shared/bin/browser differ -- cgit v1.2.3-18-g5258 From fe86970a00c5913b0706ddf66c8ee461315f89ec Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:04:06 +0000 Subject: version1.0 eliminandos pruebas de asistentes dentro de estructura comandos #359 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1752 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../comandos/AsistenteCloneRemotePartition.php | 112 ------- admin/WebConsole/comandos/AsistenteDeployImage.php | 138 --------- .../WebConsole/comandos/AsistenteParticionado.php | 131 -------- admin/WebConsole/comandos/AsistenteUpdateCache.php | 138 --------- .../includes/asistentes/AyudanteFormularios.php | 337 --------------------- .../asistentes/formCloneRemotePartition.php | 72 ----- .../includes/asistentes/formDeployImage.php | 48 --- .../includes/asistentes/formParticionado.php | 75 ----- admin/WebConsole/comandos/jscripts/asistentes.js | 83 ----- admin/WebConsole/comandos/xajax.common.php | 7 - admin/WebConsole/comandos/xajax.server.php | 91 ------ 11 files changed, 1232 deletions(-) delete mode 100644 admin/WebConsole/comandos/AsistenteCloneRemotePartition.php delete mode 100644 admin/WebConsole/comandos/AsistenteDeployImage.php delete mode 100644 admin/WebConsole/comandos/AsistenteParticionado.php delete mode 100644 admin/WebConsole/comandos/AsistenteUpdateCache.php delete mode 100644 admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php delete mode 100644 admin/WebConsole/comandos/includes/asistentes/formCloneRemotePartition.php delete mode 100644 admin/WebConsole/comandos/includes/asistentes/formDeployImage.php delete mode 100644 admin/WebConsole/comandos/includes/asistentes/formParticionado.php delete mode 100644 admin/WebConsole/comandos/jscripts/asistentes.js delete mode 100644 admin/WebConsole/comandos/xajax.common.php delete mode 100644 admin/WebConsole/comandos/xajax.server.php diff --git a/admin/WebConsole/comandos/AsistenteCloneRemotePartition.php b/admin/WebConsole/comandos/AsistenteCloneRemotePartition.php deleted file mode 100644 index 839dfb2b..00000000 --- a/admin/WebConsole/comandos/AsistenteCloneRemotePartition.php +++ /dev/null @@ -1,112 +0,0 @@ - - - - - Administración web de aulas - - - - - - '?> - '?> -printJavascript('../xajax/'); -?> - - - - -'.$descricomando.' 
'; - echo '   - '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; - ?> - - -
- - - - - - - - - - - - -
-
- - - - - - \ No newline at end of file diff --git a/admin/WebConsole/comandos/AsistenteDeployImage.php b/admin/WebConsole/comandos/AsistenteDeployImage.php deleted file mode 100644 index d7dfc695..00000000 --- a/admin/WebConsole/comandos/AsistenteDeployImage.php +++ /dev/null @@ -1,138 +0,0 @@ - - - - - Administración web de aulas - - - - - - '?> - '?> - - -printJavascript('../xajax/'); -?> - - - - -aulas 16->ordenadores -# idambito: id de los elementos en su correspondiente tabla-ambito (aulas, ordenadores...) -# nombreambito: nombre del elemento. - -switch($ambito){ - case $AMBITO_CENTROS : - $urlimg='../images/iconos/centros.gif'; - $textambito=$TbMsg[0]; - break; - case $AMBITO_GRUPOSAULAS : - $urlimg='../images/iconos/carpeta.gif'; - $textambito=$TbMsg[1]; - break; - case $AMBITO_AULAS : - $urlimg='../images/iconos/aula.gif'; - $textambito=$TbMsg[2]; - if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; - if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; - break; - case $AMBITO_GRUPOSORDENADORES : - $urlimg='../images/iconos/carpeta.gif'; - $textambito=$TbMsg[3]; - break; - case $AMBITO_ORDENADORES : - $urlimg='../images/iconos/ordenador.gif'; - $textambito=$TbMsg[4]; - if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; - if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; - break; - } - echo '

'.$descricomando.' 
'; - echo '   - '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; - - $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil; - pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false); - - ?> - - -
- - - - - - - - - - -
-
- - - - - - \ No newline at end of file diff --git a/admin/WebConsole/comandos/AsistenteParticionado.php b/admin/WebConsole/comandos/AsistenteParticionado.php deleted file mode 100644 index b48e0cf5..00000000 --- a/admin/WebConsole/comandos/AsistenteParticionado.php +++ /dev/null @@ -1,131 +0,0 @@ - - - - - Administración web de aulas - - - - - - '?> - '?> - - -printJavascript('../xajax/'); -?> - - - - -'.$descricomando.' 
'; - echo '   - '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; - - $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil; - pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false); - - ?> - - -
- - - - - - - - - - -
-
- - - - - - \ No newline at end of file diff --git a/admin/WebConsole/comandos/AsistenteUpdateCache.php b/admin/WebConsole/comandos/AsistenteUpdateCache.php deleted file mode 100644 index 7e06210f..00000000 --- a/admin/WebConsole/comandos/AsistenteUpdateCache.php +++ /dev/null @@ -1,138 +0,0 @@ - - - - - Administración web de aulas - - - - - - '?> - '?> - - -printJavascript('../xajax/'); -?> - - - - -aulas 16->ordenadores -# idambito: id de los elementos en su correspondiente tabla-ambito (aulas, ordenadores...) -# nombreambito: nombre del elemento. - -switch($ambito){ - case $AMBITO_CENTROS : - $urlimg='../images/iconos/centros.gif'; - $textambito=$TbMsg[0]; - break; - case $AMBITO_GRUPOSAULAS : - $urlimg='../images/iconos/carpeta.gif'; - $textambito=$TbMsg[1]; - break; - case $AMBITO_AULAS : - $urlimg='../images/iconos/aula.gif'; - $textambito=$TbMsg[2]; - if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; - if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; - break; - case $AMBITO_GRUPOSORDENADORES : - $urlimg='../images/iconos/carpeta.gif'; - $textambito=$TbMsg[3]; - break; - case $AMBITO_ORDENADORES : - $urlimg='../images/iconos/ordenador.gif'; - $textambito=$TbMsg[4]; - if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; - if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; - break; - } - echo '

'.$descricomando.' 
'; - echo '   - '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; - - $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil; - pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false); - - ?> - - -
- - - - - - - - - - -
-
- - - - - - diff --git a/admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php b/admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php deleted file mode 100644 index d3569aa3..00000000 --- a/admin/WebConsole/comandos/includes/asistentes/AyudanteFormularios.php +++ /dev/null @@ -1,337 +0,0 @@ -texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas where aulas.idaula=' . $idambito ; -} - -if ($ambito == 8) -{ -$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula where gruposordenadores.idgrupo=' . $idambito ; -} - -if ($ambito == 16) -{ -$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ; -} - - $rs=new Recordset; - $rs->Comando=&$cmd; -if ($rs->Abrir()){ - $rs->Primero(); - $SelectHtml.='puerto :
'; - $rs->Siguiente(); - $SelectHtml.='direccion Mcast :
'; - $rs->Siguiente(); - switch ($rs->campos["modomul"]) - { - case 1: - $modomulticast="half-duplex"; - break; - default: - $modomulticast="full-duplex"; - break; - } - $SelectHtml.='modo :
'; - $rs->Siguiente(); - $SelectHtml.='velocidad :
'; - - $rs->Cerrar(); - } - $SelectHtml.='nº Max. clientes :
'; - $SelectHtml.='Tiempo(seg) Max. Espera :
'; - - return($SelectHtml); -} - - -#devuelve los elementos [texto] p2p para un formulario. -#$ambito (aula=4 y ordenadores=16) -function htmlForm_p2p($cmd,$ambito,$idambito) -{ -//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; -if ($ambito == 4) -{ -$cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas where aulas.idaula=' . $idambito ; -} -if ($ambito == 8) -{ -$cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula where gruposordenadores.idgrupo=' . $idambito ; -} - - -if ($ambito == 16) -{ -$cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ; -} - - $rs=new Recordset; - $rs->Comando=&$cmd; -if ($rs->Abrir()){ - $rs->Primero(); - $SelectHtml.='modo :
'; - $rs->Siguiente(); - $SelectHtml.='tiempo de semilla :
'; - $rs->Siguiente(); - $rs->Cerrar(); - } - -return($SelectHtml); -} - - -function htmlOPTION_equipos($cmd,$ambito,$idambito) -{ - -//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; -if ($ambito == 4) -{ -$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaula=' . $idambito ; -} - -if ($ambito == 8) -{ -$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where grupoid=' . $idambito ; -} -if ($ambito == 16) -{ -$cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaula=' . $idambito ; -} - - $SelectHtml=""; - $rs=new Recordset; - $rs->Comando=&$cmd; - - if ($rs->Abrir()){ - $rs->Primero(); - while (!$rs->EOF){ - $SelectHtml.=''; - $rs->Siguiente(); - } - $rs->Cerrar(); - } - //$SelectHtml.= ''; - return($SelectHtml); -} - - - - - - -function htmlOPTION_images($cmd) -{ - $SelectHtml=""; - $cmd->texto="SELECT *,repositorios.ip as iprepositorio FROM imagenes - INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio"; - $rs=new Recordset; - $rs->Comando=&$cmd; - - if ($rs->Abrir()){ - $rs->Primero(); - while (!$rs->EOF){ - $SelectHtml.=''; - $rs->Siguiente(); - } - $rs->Cerrar(); - } - return($SelectHtml); -} - - - -function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw) -{ - $SelectHtml=""; - $cmd->texto="SELECT *,repositorios.ip as iprepositorio FROM imagenes - INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio"; - if($sw) // Imágenes con el mismo tipo de partición - $cmd->texto.= " WHERE imagenes.codpar=".$codpar; - else - $cmd->texto.= " WHERE imagenes.codpar<>".$codpar; - - $cmd->texto.=" AND imagenes.numpar>0 AND imagenes.codpar>0 AND imagenes.idrepositorio>0"; // La imagene debe existir y estar creada - $rs=new Recordset; - $rs->Comando=&$cmd; - if($sw) $des=1; else $des=0; - $SelectHtml.= ''; - return($SelectHtml); -} - - - -function htmlOPTION_typepartnotcache($cmd) -{ - $SelectHtml=""; - $cmd->texto='SELECT tipopar FROM tipospar WHERE NOT tipopar = "CACHE"'; - $rs=new Recordset; - $rs->Comando=&$cmd; - //$SelectHtml.= ''; - return($SelectHtml); -} - - -function htmlForm_typepart($cmd,$numpar) -{ - $SelectHtml=""; - $cmd->texto='SELECT DISTINCT tipopar FROM tipospar JOIN ordenadores_particiones ON ordenadores_particiones.codpar = tipospar.codpar WHERE numpar = ' .$numpar; - $rs=new Recordset; - $rs->Comando=&$cmd; - - if ($rs->Abrir()){ - $rs->Primero(); - while (!$rs->EOF){ - if ( $rs->campos["tipopar"] == "LINUX" ) - { - $valor="EXT4"; - $valormostrar="LINUX:EXT[2:3:4]"; - } - else - { - $valor=$rs->campos["tipopar"]; - $valormostrar=$rs->campos["tipopar"]; - } - $SelectHtml.=''; -$SelectHtml.=''; -$SelectHtml.=''; -$SelectHtml.=''; -#$SelectHtml.=''; -#$SelectHtml.=''; -$SelectHtml.=''; -$SelectHtml.=''; -$SelectHtml.=''; -$SelectHtml.=''; -$SelectHtml.=''; -$SelectHtml.=''; -$SelectHtml.=''; -$SelectHtml.=''; -return($SelectHtml); -} - - -function htmlForm_sizepart($cmd,$numpar) -{ - $SelectHtml=""; - $cmd->texto='SELECT DISTINCT tamano FROM ordenadores_particiones WHERE numpar = ' .$numpar . ' AND NOT tamano = 0'; - $rs=new Recordset; - $rs->Comando=&$cmd; - - if ($rs->Abrir()){ - $rs->Primero(); - while (!$rs->EOF){ - $SelectHtml.=''; - $rs->Siguiente(); - } - $rs->Cerrar(); - } - return($SelectHtml); -} - -function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) -{ - global $tbKeys; // Tabla contenedora de claves de configuración - global $conKeys; // Contador de claves de configuración - global $TbMsg; - - $colums=7; - echo ''; - echo ' '.$TbMsg[20].' '; // Número de partición - echo ' '.$TbMsg[24].' '; // Tipo de partición - echo ' '.$TbMsg[27].' '; // Sistema de ficheros - echo ' '.$TbMsg[21].' '; // Sistema Operativo Instalado - echo ' '.$TbMsg[22].' '; // Tamaño - echo ' '.$TbMsg[25].' '; // Imagen instalada - echo ' '.$TbMsg[26].' '; // Perfil software - echo ''; - - $auxCfg=split("@",$configuraciones); // Crea lista de particiones - for($i=0;$i'.chr(13); - echo' '.$tbKeys[$k]["numpar"].' '.chr(13); - echo' '.$tbKeys[$k]["tipopar"].' '.chr(13); - - //echo' '.$tbKeys[$k]["sistemafichero"].' '.chr(13); - echo' '.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); - - //echo ' '.$tbKeys[$k]["nombreso"].' '.chr(13); - echo ' '.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); - - //echo' '.formatomiles($tbKeys[$k]["tamano"]).' '.chr(13); - echo' '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); - - //echo' '.$tbKeys[$k]["imagen"].' '.chr(13); - echo' '.tomaImagenes($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); - - //echo' '.$tbKeys[$k]["perfilsoft"].' '.chr(13); - echo' '.tomaPerfiles($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); - - echo''.chr(13); - break; - } - } - } - echo ' '; -} - -?> \ No newline at end of file diff --git a/admin/WebConsole/comandos/includes/asistentes/formCloneRemotePartition.php b/admin/WebConsole/comandos/includes/asistentes/formCloneRemotePartition.php deleted file mode 100644 index 510d3a55..00000000 --- a/admin/WebConsole/comandos/includes/asistentes/formCloneRemotePartition.php +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - Elige equipo MASTER: - -
- - Elige particion del Master a enviar -
-
- Elige herramienta de clonacion: - -
- Elige compresor para la herramienta de clonacion: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/admin/WebConsole/comandos/includes/asistentes/formDeployImage.php b/admin/WebConsole/comandos/includes/asistentes/formDeployImage.php deleted file mode 100644 index 2ee0920c..00000000 --- a/admin/WebConsole/comandos/includes/asistentes/formDeployImage.php +++ /dev/null @@ -1,48 +0,0 @@ - - - opciones basicas opciones multicast opciones torrent opciones unicast - - - - Elige la particion del disco donde se restaurar la imagen: - - - -
- Elige la imagen a distribuir: - -
- -
- Elige el metodo de transferencia - -
- - - - - - - - - - - - - - - - - - diff --git a/admin/WebConsole/comandos/includes/asistentes/formParticionado.php b/admin/WebConsole/comandos/includes/asistentes/formParticionado.php deleted file mode 100644 index dba79047..00000000 --- a/admin/WebConsole/comandos/includes/asistentes/formParticionado.php +++ /dev/null @@ -1,75 +0,0 @@ - - - - Particion - Tipo - Tamano - - - -
Particion 1 - - -
- - - -
- - - -
Particion 2 - -
- - - -
- - - - -
Particion 3 - -
- - - -
- - - - - -
Particion 4 - - - - \ No newline at end of file diff --git a/admin/WebConsole/comandos/jscripts/asistentes.js b/admin/WebConsole/comandos/jscripts/asistentes.js deleted file mode 100644 index e2b97903..00000000 --- a/admin/WebConsole/comandos/jscripts/asistentes.js +++ /dev/null @@ -1,83 +0,0 @@ -// *********************************************************************************************************** -// Libreria de scripts de Javascript -// Autor: -// Fecha Creación: 2011 -// Fecha Última modificación: enero-2011 -// Nombre del fichero: asistentes.js -// Descripción : -// Este fichero implementa las funciones javascript del fichero AsistentesEjecutarScripts.php (Comandos) -// *********************************************************************************************************** - -function codeCloneRemotePartition(form){ -form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value; -} - -function codeDeployImage(form){ -switch (form.idmetodo.value) -{ - case "MULTICAST": - protocol="MULTICAST " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " "; - break; - case "TORRENT": - protocol=" TORRENT " + form.modp2p.value + ":" + form.timep2p.value; - break; -} -//form.codigo.value="deployImage REPO /"; -form.codigo.value="deployImage REPO /" + form.idimagen.value + " 1 " + form.idparticion.value + " " + protocol ; -} - -function codeParticionado(form){ -var value1; -var value2; -var value3; -var precache; -if (form.check1.checked) { - if (form.part1.value == "CUSTOM" ) {value1 = form.part1custom.value} - else {value1 = form.part1.value}; - if (form.size1.value == "CUSTOM") {value1 += ":" + form.size1custom.value} - else {value1 += ":" + form.size1.value}; -} -else -{ - value1 = "EMPTY:1" -} -if (form.check2.checked) { - if (form.part2.value == "CUSTOM" ) {value2 = form.part2custom.value} - else {value2 = form.part2.value}; - if (form.size2.value == "CUSTOM") {value2 += ":" + form.size2custom.value} - else {value2 += ":" + form.size2.value}; -} -else -{ - value2 = "EMPTY:1" -} -if (form.check3.checked) { - if (form.part3.value == "CUSTOM" ) {value3 = form.part3custom.value} - else {value3 = form.part3.value}; - if (form.size3.value == "CUSTOM") {value3 += ":" + form.size3custom.value} - else {value3 += ":" + form.size3.value}; -} -else -{ - value3 = "EMPTY:1" -} - -if (form.size4.value == "0") { -precache="ogUnmountCache \n ogUnmountAll 1 \n sizecache=`ogGetPartitionSize 1 4` \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache $sizecache "; -//alert(precache); -} -else -{ -precache="ogUnmountCache \n ogUnmountAll 1 \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache " + form.size4.value + " "; -//alert(precache); -} - - -form.codigo.value="\ -" + precache + " \n \ -ogListPartitions 1 \n \ -ogCreatePartitions 1 " + value1 + " " + value2 + " " + value3 + " \n \ -ogSetPartitionActive 1 1 \n \ -ogUpdatePartitionTable 1 \n \ -ogListPartitions 1 \n"; -} diff --git a/admin/WebConsole/comandos/xajax.common.php b/admin/WebConsole/comandos/xajax.common.php deleted file mode 100644 index f35e9a44..00000000 --- a/admin/WebConsole/comandos/xajax.common.php +++ /dev/null @@ -1,7 +0,0 @@ -registerFunction("ListarParticionesXip"); -?> \ No newline at end of file diff --git a/admin/WebConsole/comandos/xajax.server.php b/admin/WebConsole/comandos/xajax.server.php deleted file mode 100644 index 5d378a7b..00000000 --- a/admin/WebConsole/comandos/xajax.server.php +++ /dev/null @@ -1,91 +0,0 @@ -alert("Este equipo tiene ".$cantRegistros." particiones clonables."); - //ISO-8859-1 significa que los caracteres latinos como la ñ y los acentos seran tomados en cuenta - //$sql=sprintf('select xxxxxx where id=%d',$ip); - //$sql='SELECT ordenadores_particiones.numpar,nombresos.nombreso FROM ordenadores_particiones INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar INNER JOIN nombresos ON ordenadores_particiones.idnombreso=nombresos.idnombreso WHERE ordenadores_particiones.idordenador=' .$ip . ' AND tipospar.clonable>0 AND ordenadores_particiones.idnombreso>0 ORDER BY ordenadores_particiones.numpar'; - - $sql='SELECT ordenadores_particiones.numpar,nombresos.nombreso - FROM ordenadores_particiones INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar - INNER JOIN nombresos ON ordenadores_particiones.idnombreso=nombresos.idnombreso - INNER JOIN ordenadores ON ordenadores_particiones.idordenador=ordenadores.idordenador - WHERE ordenadores.ip="' .$ip . '" - AND tipospar.clonable>0 - AND ordenadores_particiones.idnombreso>0 - ORDER BY ordenadores_particiones.numpar'; - //$objResponse->alert("Consulta ".$sql." ."); - - - $element=" "; - //$rs=new Recordset; - //$rs->Comando=&$cmd; - - - - - - //$element=''; - //} - - - $rsParticiones=mysql_query($sql); -$cantRegistros=mysql_num_rows($rsParticiones); - - $element=''; //variable donde guardaremos el elemento del formulario que luego se mostrara mediante AJAX - // - if($cantRegistros>0){ // Si existen registros entonces armamos la cabecera de los elementos del formulario - $element=''; - } - //asignando el contenido de la varabiale $element al div que esta en la paquina inicial - //innerHTML reemplaza el contenido HTML por otro - $objResponse->assign("divListado","innerHTML",$element); - //mostramos un alert -//$objResponse->alert("Este equipo tiene ".$cantRegistros." particiones clonables."); - return $objResponse; //retornamos la respuesta AJAX -} - -$xajax->processRequest(); //procesando cualquier petición AJAX -?> \ No newline at end of file -- cgit v1.2.3-18-g5258 From 78b52d2e551e7c2f9940f5512c1f5dbaa67fa36e Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:06:26 +0000 Subject: version1.0 limpiando asistentes, ficheros de pruebas basados en comandos. #359 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1753 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/asistentes/Apagar.php | 72 ------ admin/WebConsole/asistentes/Arrancar.php | 71 ------ admin/WebConsole/asistentes/Comando.php | 72 ------ admin/WebConsole/asistentes/Configurar.php | 260 -------------------- admin/WebConsole/asistentes/CrearImagen.php | 212 ---------------- admin/WebConsole/asistentes/EjecutarScripts.php | 81 ------- admin/WebConsole/asistentes/IniciarSesion.php | 154 ------------ admin/WebConsole/asistentes/InventarioHardware.php | 72 ------ admin/WebConsole/asistentes/InventarioSoftware.php | 122 ---------- admin/WebConsole/asistentes/Reiniciar.php | 71 ------ admin/WebConsole/asistentes/RestaurarImagen.php | 269 --------------------- 11 files changed, 1456 deletions(-) delete mode 100644 admin/WebConsole/asistentes/Apagar.php delete mode 100644 admin/WebConsole/asistentes/Arrancar.php delete mode 100644 admin/WebConsole/asistentes/Comando.php delete mode 100644 admin/WebConsole/asistentes/Configurar.php delete mode 100644 admin/WebConsole/asistentes/CrearImagen.php delete mode 100644 admin/WebConsole/asistentes/EjecutarScripts.php delete mode 100644 admin/WebConsole/asistentes/IniciarSesion.php delete mode 100644 admin/WebConsole/asistentes/InventarioHardware.php delete mode 100644 admin/WebConsole/asistentes/InventarioSoftware.php delete mode 100644 admin/WebConsole/asistentes/Reiniciar.php delete mode 100644 admin/WebConsole/asistentes/RestaurarImagen.php diff --git a/admin/WebConsole/asistentes/Apagar.php b/admin/WebConsole/asistentes/Apagar.php deleted file mode 100644 index 3ddb8f1a..00000000 --- a/admin/WebConsole/asistentes/Apagar.php +++ /dev/null @@ -1,72 +0,0 @@ - - -Administración web de aulas - - - - - - '?> - - -'.$TbMsg[5].' 
'; - echo '   - '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; - //________________________________________________________________________________________________________ - include_once("./includes/formularioacciones.php"); - //________________________________________________________________________________________________________ - //________________________________________________________________________________________________________ - include_once("./includes/opcionesacciones.php"); - //________________________________________________________________________________________________________ -?> - - - diff --git a/admin/WebConsole/asistentes/Arrancar.php b/admin/WebConsole/asistentes/Arrancar.php deleted file mode 100644 index 68489a20..00000000 --- a/admin/WebConsole/asistentes/Arrancar.php +++ /dev/null @@ -1,71 +0,0 @@ - - -Administración web de aulas - - - - - - - '?> - - -'.$TbMsg[5].' 
'; - echo '  '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; - //________________________________________________________________________________________________________ - include_once("./includes/formularioacciones.php"); - //________________________________________________________________________________________________________ - include_once("./includes/opcionesacciones.php"); - //________________________________________________________________________________________________________ -?> - - - diff --git a/admin/WebConsole/asistentes/Comando.php b/admin/WebConsole/asistentes/Comando.php deleted file mode 100644 index 50a1e28c..00000000 --- a/admin/WebConsole/asistentes/Comando.php +++ /dev/null @@ -1,72 +0,0 @@ - - -Administración web de aulas - - - - - - '?> - - -'.$descricomando.' 
'; - echo '   - '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; - //________________________________________________________________________________________________________ - include_once("./includes/formularioacciones.php"); - //________________________________________________________________________________________________________ - //________________________________________________________________________________________________________ - include_once("./includes/opcionesacciones.php"); - //________________________________________________________________________________________________________ -?> - - - diff --git a/admin/WebConsole/asistentes/Configurar.php b/admin/WebConsole/asistentes/Configurar.php deleted file mode 100644 index a5e645b8..00000000 --- a/admin/WebConsole/asistentes/Configurar.php +++ /dev/null @@ -1,260 +0,0 @@ - - -Administración web de aulas - - - - - - - - -'?> -'?> - - -'.$TbMsg[5].'
'; // Cabecera - echo '   - '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; // Subcebecera - echo '

'.$TbMsg[19].'

'; - if($ambito!=$AMBITO_ORDENADORES){ - $cadenaid=""; - $cadenaip=""; - $cadenamac=""; - RecopilaIpesMacs($cmd,$ambito,$idambito); - - ?> -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
> > > 
 
- -
-
-'; - echo ''; - echo ''.HTMLSELECT_particiones(0).''; - echo ''.HTMLSELECT_tipospar($cmd,0).''; - echo ''.HTMLSELECT_sistemasficheros($cmd,0).''; - echo ''; - echo ' '; - echo ''.HTMLSELECT_operaciones().''; - //________________________________________________________________________________________________________ - include_once("./includes/formularioacciones.php"); - //________________________________________________________________________________________________________ - $swb=true; // Este switch hace que se muestren o se oculten los botonotes de confirmación - //________________________________________________________________________________________________________ - include_once("./includes/opcionesacciones.php"); - //________________________________________________________________________________________________________ -?> - - -'; - echo ''; - echo ' '.$TbMsg[8].' '; - echo ' '.$TbMsg[24].' '; - echo ' '.$TbMsg[27].' '; - echo ' '.$TbMsg[22].' '; - echo ' '.$TbMsg[21].' '; - echo ' '.$TbMsg[12].' '; - echo ''; - - $auxCfg=split("@",$configuraciones); // Crea lista de particiones - for($i=0;$i'; - echo ''; - - echo ''.HTMLSELECT_particiones($tbKeys[$k]["numpar"]).''; - echo ''.HTMLSELECT_tipospar($cmd,$tbKeys[$k]["codpar"]).''; - - $sf=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,true); - echo''.HTMLSELECT_sistemasficheros($cmd,$sf).''; - - $tm=tomaTamano($tbKeys[$k]["numpar"],$idordenadores); - echo''; - - echo ''.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).''; - - echo ''.HTMLSELECT_operaciones().''; - echo ''; - } - } - } - /* Botones de añadir y confirmar */ - echo ' '; - echo ''; - echo ' - -          - - - '; -} -/*________________________________________________________________________________________________________ - Crea la etiqueta html de las operaciones -________________________________________________________________________________________________________*/ -function HTMLSELECT_operaciones() -{ - global $TbMsg; - - $SelectHtml=""; - $opciones="1=".$TbMsg[14]."".chr(13); - $opciones.="2=".$TbMsg[15]."".chr(13); - $opciones.="3=".$TbMsg[16].""; - $SelectHtml.=HTMLCTESELECT($opciones,"operaciones","estilodesple",$TbMsg[13],0,100,""); - return($SelectHtml); -} -/*________________________________________________________________________________________________________ - Crea la etiqueta html de los sistemas de ficheros -________________________________________________________________________________________________________*/ -function HTMLSELECT_sistemasficheros($cmd,$idsistemafichero) -{ - return(HTMLSELECT($cmd,0,"sistemasficheros",$idsistemafichero,"idsistemafichero","descripcion",150,"","formulariodatos")); -} -?> diff --git a/admin/WebConsole/asistentes/CrearImagen.php b/admin/WebConsole/asistentes/CrearImagen.php deleted file mode 100644 index 00e404b5..00000000 --- a/admin/WebConsole/asistentes/CrearImagen.php +++ /dev/null @@ -1,212 +0,0 @@ - - -Administración web de aulas - - - - - -'?> -'?> - - - -'.$TbMsg[0].' 
'; - echo '   - '.$TbMsg[14].': '.$textambito.','.$nombreambito.'  

'; -?> -

- -
- - - - - - - - -
           -    -
-
- - - - -texto="SELECT nombreordenador,ip,mac,idperfilhard,idrepositorio FROM ordenadores WHERE idordenador='".$ido."'"; - $rs->Comando=&$cmd; - if (!$rs->Abrir()) return(false); // Error al abrir recordset - $rs->Primero(); - if (!$rs->EOF){ - $nombreordenador=$rs->campos["nombreordenador"]; - $ip=$rs->campos["ip"]; - $mac=$rs->campos["mac"]; - $idperfilhard=$rs->campos["idperfilhard"]; - $idrepositorio=$rs->campos["idrepositorio"]; - $rs->Cerrar(); - return(true); - } - else - return(false); -} -/*________________________________________________________________________________________________________ - Crea la etiqueta html '; - $SelectHtml.= ' '; - if ($rs->Abrir()){ - $rs->Primero(); - while (!$rs->EOF){ - $SelectHtml.=''; - $rs->Siguiente(); - } - $rs->Cerrar(); - } - $SelectHtml.= ''; - return($SelectHtml); -} -/*________________________________________________________________________________________________________ - Crea la etiqueta html '; - $rs->Primero(); - while (!$rs->EOF){ - $SelectHtml.=''; - $rs->Siguiente(); - } - $SelectHtml.= ''; - $rs->Cerrar(); - return($SelectHtml); -} -/*________________________________________________________________________________________________________ - Crea la tabla de configuraciones y perfiles a crear -________________________________________________________________________________________________________*/ -function tablaConfiguraciones($cmd,$idordenador,$idrepositorio) -{ - global $idcentro; - global $TbMsg; - $tablaHtml=""; - $rs=new Recordset; - $cmd->texto="SELECT ordenadores_particiones.numpar,ordenadores_particiones.codpar,ordenadores_particiones.tamano, - ordenadores_particiones.idnombreso,nombresos.nombreso,tipospar.tipopar,tipospar.clonable, - imagenes.nombreca,imagenes.descripcion as imagen,perfilessoft.idperfilsoft, - perfilessoft.descripcion as perfilsoft,sistemasficheros.descripcion as sistemafichero - FROM ordenadores - INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador - LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar - LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen - LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft - LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero - WHERE ordenadores.idordenador=$idordenador ORDER BY ordenadores_particiones.numpar"; - //echo $cmd->texto; - $rs->Comando=&$cmd; - $rs=new Recordset; - $rs->Comando=&$cmd; - if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset - $rs->Primero(); - while (!$rs->EOF){ - $swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]); - $swc=$rs->campos["idperfilsoft"]>0; // Una partición es clonable si posee un identificador de perfil software - $swccc=$swcc && $swcc; - $tablaHtml.=''.chr(13); - if($swccc){ - $tablaHtml.='campos["codpar"].'">'.chr(13); - $tablaHtml.=' '.$rs->campos["numpar"].' '.chr(13); - $tablaHtml.=' '.$rs->campos["tipopar"].' '.chr(13); - if(empty($rs->campos["nombreso"]) && !empty($rs->campos["idnombreso"])) // Si el identificador del S.O. no es nulo pero no hay descripción - $tablaHtml.=' '.''.$TbMsg[12].''.chr(13); - else - $tablaHtml.=' '.$rs->campos["nombreso"].' '.chr(13); - $tablaHtml.=''.HTMLSELECT_imagenes($cmd,$rs->campos["idperfilsoft"],$rs->campos["numpar"]).''; - $tablaHtml.=''.HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$rs->campos["numpar"]).''; - $tablaHtml.=' '; - } - $tablaHtml.=''.chr(13); - $rs->Siguiente(); - } - $rs->Cerrar(); - return($tablaHtml); -} -?> diff --git a/admin/WebConsole/asistentes/EjecutarScripts.php b/admin/WebConsole/asistentes/EjecutarScripts.php deleted file mode 100644 index b256daf9..00000000 --- a/admin/WebConsole/asistentes/EjecutarScripts.php +++ /dev/null @@ -1,81 +0,0 @@ - - -Administración web de aulas - - - - - - '?> - '?> - - -'.$descricomando.' 
'; - echo '   - '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; - ?> -
- - - - -
  
-
- - - diff --git a/admin/WebConsole/asistentes/IniciarSesion.php b/admin/WebConsole/asistentes/IniciarSesion.php deleted file mode 100644 index 09862d4f..00000000 --- a/admin/WebConsole/asistentes/IniciarSesion.php +++ /dev/null @@ -1,154 +0,0 @@ - - -Administración web de aulas - - - - - -'?> -'?> - - - -'.$TbMsg[5].' 
'; - echo '  '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; -?> -

- -
-

- - - - - - - -
      
-
- - - -texto="SELECT nombreordenador,ip,mac,idperfilhard FROM ordenadores WHERE idordenador='".$idordenador."'"; - $rs->Comando=&$cmd; - if (!$rs->Abrir()) return(false); // Error al abrir recordset - $rs->Primero(); - if (!$rs->EOF){ - $nombreordenador=$rs->campos["nombreordenador"]; - $ip=$rs->campos["ip"]; - $mac=$rs->campos["mac"]; - $idperfilhard=$rs->campos["idperfilhard"]; - $rs->Cerrar(); - return(true); - } - else - return(false); -} -/*________________________________________________________________________________________________________ - Crea la tabla de configuraciones y perfiles a crear -________________________________________________________________________________________________________*/ -function tabla_configuraciones($cmd,$idordenador){ - global $idcentro; - $tablaHtml=""; - $cmd->texto="SELECT ordenadores_particiones.idnombreso,ordenadores_particiones.numpar,ordenadores_particiones.tamano,nombresos.nombreso,tipospar.tipopar, - imagenes.descripcion as imagen,perfilessoft.descripcion as perfilsoft,sistemasficheros.descripcion as sistemafichero - FROM ordenadores - INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador - LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar - LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen - LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft - LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero - WHERE ordenadores.idordenador=".$idordenador." AND tipospar.clonable=1 ORDER BY ordenadores_particiones.numpar"; - - $rs->Comando=&$cmd; - $rs=new Recordset; - $rs->Comando=&$cmd; - if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset - $rs->Primero(); - while (!$rs->EOF){ - if(!empty($rs->campos["idnombreso"])){ - $tablaHtml.=''.chr(13); - $tablaHtml.=''.chr(13); - $tablaHtml.=' '.$rs->campos["numpar"].' '.chr(13); - $tablaHtml.=' '.$rs->campos["nombreso"].' '.chr(13); - $tablaHtml.=''.chr(13); - } - $rs->Siguiente(); - } - $rs->Cerrar(); - return($tablaHtml); -} -?> diff --git a/admin/WebConsole/asistentes/InventarioHardware.php b/admin/WebConsole/asistentes/InventarioHardware.php deleted file mode 100644 index 64e896d9..00000000 --- a/admin/WebConsole/asistentes/InventarioHardware.php +++ /dev/null @@ -1,72 +0,0 @@ - - -Administración web de aulas - - - - - - - '?> - - -'.$TbMsg[5].' 
'; - echo '  '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; - //________________________________________________________________________________________________________ - include_once("./includes/formularioacciones.php"); - //________________________________________________________________________________________________________ - //________________________________________________________________________________________________________ - include_once("./includes/opcionesacciones.php"); - //________________________________________________________________________________________________________ -?> - - - diff --git a/admin/WebConsole/asistentes/InventarioSoftware.php b/admin/WebConsole/asistentes/InventarioSoftware.php deleted file mode 100644 index 35772002..00000000 --- a/admin/WebConsole/asistentes/InventarioSoftware.php +++ /dev/null @@ -1,122 +0,0 @@ - - -Administración web de aulas - - - - - - -'?> - '?> - - -'.$TbMsg[5].' 
'; - echo '  '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; -?> - -

- -
- - - - - - - -
      
- -
- - - -texto="SELECT ordenadores_particiones.numpar,nombresos.nombreso - FROM ordenadores_particiones - INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar - INNER JOIN nombresos ON ordenadores_particiones.idnombreso=nombresos.idnombreso - WHERE ordenadores_particiones.idordenador=$idordenador - AND tipospar.clonable>0 AND ordenadores_particiones.idnombreso>0 - ORDER BY ordenadores_particiones.numpar"; - $rs->Comando=&$cmd; - $rs=new Recordset; - $rs->Comando=&$cmd; - if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset - $rs->Primero(); - while (!$rs->EOF){ - $tablaHtml.=''.chr(13); - $tablaHtml.=''.chr(13); - $tablaHtml.=' '.$rs->campos["numpar"].' '.chr(13); - $tablaHtml.=' '.$rs->campos["nombreso"].' '.chr(13); - $tablaHtml.=''.chr(13); - $rs->Siguiente(); - } - $rs->Cerrar(); - return($tablaHtml); -} -?> diff --git a/admin/WebConsole/asistentes/Reiniciar.php b/admin/WebConsole/asistentes/Reiniciar.php deleted file mode 100644 index 4c95ef52..00000000 --- a/admin/WebConsole/asistentes/Reiniciar.php +++ /dev/null @@ -1,71 +0,0 @@ - - -Administración web de aulas - - - - - - '?> - - -'.$TbMsg[5].' 
'; - echo '  '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; - //________________________________________________________________________________________________________ - include_once("./includes/formularioacciones.php"); - //________________________________________________________________________________________________________ - //________________________________________________________________________________________________________ - include_once("./includes/opcionesacciones.php"); - //________________________________________________________________________________________________________ -?> - - - diff --git a/admin/WebConsole/asistentes/RestaurarImagen.php b/admin/WebConsole/asistentes/RestaurarImagen.php deleted file mode 100644 index 580302d7..00000000 --- a/admin/WebConsole/asistentes/RestaurarImagen.php +++ /dev/null @@ -1,269 +0,0 @@ - - -Administración web de aulas - - - - - - - - -'?> -'?> - - -'.$TbMsg[5].'
'; // Cabecera - echo '   - '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; // Subcebecera - echo '

'.$TbMsg[19].'

'; - if($ambito!=$AMBITO_ORDENADORES){ - $cadenaid=""; - $cadenaip=""; - $cadenamac=""; - RecopilaIpesMacs($cmd,$ambito,$idambito); - ?> -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
> > > 
 
- -
-
- - - -'; - echo '  '; - echo ' '.$TbMsg[8].' '; - echo ' '.$TbMsg[24].' '; - echo ' '.$TbMsg[31].' '; - echo ' '.$TbMsg[27].' '; - echo ' '.$TbMsg[22].' '; - echo ' '.$TbMsg[10].' '; - echo ' '.$TbMsg[11].' '; - echo ' '.$TbMsg[9].' '; - echo ''; - - $auxCfg=split("@",$configuraciones); // Crea lista de particiones - for($i=0;$i'.chr(13); - if($swcc){ - $icp=$cc."_".$tbKeys[$k]["numpar"]; // Identificador de la configuración-partición - echo ''.chr(13); - echo ' '.$tbKeys[$k]["numpar"].' '.chr(13); - echo ' '.$tbKeys[$k]["tipopar"].' '.chr(13); - - //echo ' '.$tbKeys[$k]["nombreso"].' '.chr(13); - echo ' '.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); - - //echo' '.$tbKeys[$k]["sistemafichero"].' '.chr(13); - echo' '.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); - - //echo' '.formatomiles($tbKeys[$k]["tamano"]).' '.chr(13); - echo' '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).' '.chr(13); - - echo ''.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true).''; - echo ''.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,false).''; - //Clonación - $metodos="1=UNICAST".chr(13); - $metodos.="2=MULTICAST".chr(13); - $metodos.="3=TORRENT"; - - $TBmetodos["UNICAST"]=1; - $TBmetodos["MULTICAST"]=2; - $TBmetodos["TORRENT"]=3; - $idxc=$_SESSION["protclonacion"]; - echo ''.HTMLCTESELECT($metodos,"protoclonacion_".$icp,"estilodesple","",$TBmetodos[$idxc],100).''; - } - echo ''.chr(13); - } - } - } - echo ' '; -} -/*________________________________________________________________________________________________________ - Crea la etiqueta html '; - $SelectHtml.= ' '; - - if ($rs->Abrir()){ - $rs->Primero(); - while (!$rs->EOF){ - $SelectHtml.=''; - $rs->Siguiente(); - } - $rs->Cerrar(); - } - $SelectHtml.= ''; - return($SelectHtml); -} -/*________________________________________________________________________________________________________ - Crea la etiqueta html '; - $rs->Primero(); - while (!$rs->EOF){ - $SelectHtml.=''; - $rs->Siguiente(); - } - $SelectHtml.= ''; - $rs->Cerrar(); - return($SelectHtml); -} -?> -- cgit v1.2.3-18-g5258 From 55850cae269424fc9889e80031927e58fa11cbec Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:20:57 +0000 Subject: version1.0 readonly con valor default=0 -no modificar- en etiqueta chache de propiedades aulas #359 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1754 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/propiedades/propiedades_aulas.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/WebConsole/propiedades/propiedades_aulas.php b/admin/WebConsole/propiedades/propiedades_aulas.php index 31cfa8df..e96676b4 100644 --- a/admin/WebConsole/propiedades/propiedades_aulas.php +++ b/admin/WebConsole/propiedades/propiedades_aulas.php @@ -329,7 +329,7 @@ else if ($opcion==$op_eliminacion) echo ''.$cache.''; else - echo ''; + echo ''; ?> -- cgit v1.2.3-18-g5258 From f9bd401b27ae38e0613984178d247c9a26691ff9 Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:22:40 +0000 Subject: version1.0 modificacion bd - asistentes - comando configurar particiones #359 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1755 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Database/alterbd.sql | 103 ++------------------------------------------- admin/Database/ogAdmBD.sql | 14 +++--- 2 files changed, 11 insertions(+), 106 deletions(-) diff --git a/admin/Database/alterbd.sql b/admin/Database/alterbd.sql index 2beb15bd..5ef410d1 100644 --- a/admin/Database/alterbd.sql +++ b/admin/Database/alterbd.sql @@ -4,108 +4,13 @@ SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- Base de datos: `ogBDAdmin` -- -ALTER TABLE `ordenadores`ADD `arranque` VARCHAR( 30 ) NOT NULL DEFAULT '1', -ADD `netiface` enum('eth0','eth1','eth2') DEFAULT 'eth0', -ADD `netdriver` VARCHAR( 30 ) NOT NULL DEFAULT 'generic'; +UPDATE `ogAdmBD`.`comandos` SET `activo` = '0' WHERE `comandos`.`idcomando` =10; - -ALTER TABLE `aulas` ADD `router` VARCHAR( 30 ), -ADD `netmask` VARCHAR( 30 ), -ADD `dns` VARCHAR (30), -ADD `modp2p` enum('seeder','peer','leecher') DEFAULT 'seeder', -ADD `timep2p` INT(11) NOT NULL DEFAULT '60'; - - - - - - -CREATE TABLE IF NOT EXISTS `itemboot` ( - `label` varchar(50) collate utf8_spanish_ci NOT NULL, - `kernel` varchar(100) collate utf8_spanish_ci NOT NULL, - `append` varchar(500) collate utf8_spanish_ci NOT NULL, - PRIMARY KEY (`label`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci; - - - -INSERT INTO `itemboot` (`label`, `kernel`, `append`) VALUES -('1', 'KERNEL syslinux/chain.c32', 'APPEND hd0'), -('1_localboot', 'LOCALBOOT 0', ' '), -('11', 'KERNEL syslinux/chain.c32', 'APPEND hd0 1'), -('12', 'KERNEL syslinux/chain.c32', 'APPEND hd0 2'), -('ogClientUser', 'KERNEL ogclient/ogvmlinuz', 'APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false'), -('ogClientAdmin', 'KERNEL ogclient/ogvmlinuz', 'APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true'), -('ogInitrdUser', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=user '), -('ogInitrdAdmin', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin '); - - - - -CREATE TABLE IF NOT EXISTS `menuboot` ( - `label` varchar(50) collate utf8_spanish_ci NOT NULL, - `prompt` int(11) NOT NULL, - `timeout` int(30) default NULL, - `description` varchar(50) collate utf8_spanish_ci NOT NULL, - PRIMARY KEY (`label`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci; - - - -INSERT INTO `menuboot` (`label`, `prompt`, `timeout`, `description`) VALUES -('1', 0, 10, 'mbr 1hd'), -('11', 0, 10, '1hd 1particion'), -('12', 0, 10, '1hd 2particion'), -('pxe', 0, 10, 'og client - user'), -('pxeADMIN', 0, 10, 'OgClient - admin'); - - -CREATE TABLE IF NOT EXISTS `menuboot_itemboot` ( - `labelmenu` varchar(100) NOT NULL, - `labelitem` varchar(100) NOT NULL, - `default` tinyint(10) NOT NULL -) ENGINE=MyISAM DEFAULT CHARSET=latin1; - - -INSERT INTO `menuboot_itemboot` (`labelmenu`, `labelitem`, `default`) VALUES -('0', '0', 0), -('11', '11', 0), -('12', '12', 0), -('1', '1', 0), -('pxe', 'ogClientUser', 0), -('pxeADMIN', 'ogClientAdmin', 0); - - - --- --- Estructura de tabla para la tabla `asistentes` --- - -CREATE TABLE IF NOT EXISTS `asistentes` ( - `idcomando` int(11) NOT NULL AUTO_INCREMENT, - `descripcion` varchar(250) NOT NULL DEFAULT '', - `pagina` varchar(256) NOT NULL, - `gestor` varchar(256) NOT NULL, - `funcion` varchar(64) NOT NULL, - `urlimg` varchar(250) DEFAULT NULL, - `aplicambito` tinyint(4) DEFAULT NULL, - `visuparametros` varchar(250) DEFAULT NULL, - `parametros` varchar(250) DEFAULT NULL, - `comentarios` text, - `activo` tinyint(1) NOT NULL, - PRIMARY KEY (`idcomando`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ; - - -INSERT INTO `asistentes` (`idcomando`, `descripcion`, `pagina`, `gestor`, `funcion`, `urlimg`, `aplicambito`, `visuparametros`, `parametros`, `comentarios`, `activo`) VALUES -('1', 'Asistente Clonacion Particiones Remotas', '../asistentes/AsistenteCloneRemotePartition.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), -('2', 'Asistente "Deploy" de Imagenes', '../asistentes/AsistenteDeployImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), -('3', 'Asistente "UpdateCache" con Imagenes', '../asistentes/AsistenteUpdateCache.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), -('4', 'Asistente Restauracion de Imagenes', '../asistentes/AsistenteRestoreImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), -('5', 'Asistente Particionado', '../asistentes/AsistenteParticionado.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'); - +ALTER TABLE `asistentes` DROP PRIMARY KEY , +ADD PRIMARY KEY ( `idcomando` , `descripcion` ) ; +UPDATE `ogAdmBD`.`asistentes` SET `idcomando` = '8' ; \ No newline at end of file diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql index 67f9339d..15464fff 100644 --- a/admin/Database/ogAdmBD.sql +++ b/admin/Database/ogAdmBD.sql @@ -126,16 +126,16 @@ CREATE TABLE IF NOT EXISTS `asistentes` ( `parametros` varchar(250) DEFAULT NULL, `comentarios` text, `activo` tinyint(1) NOT NULL, - PRIMARY KEY (`idcomando`) + PRIMARY KEY ( `idcomando` , `descripcion` ) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ; INSERT INTO `asistentes` (`idcomando`, `descripcion`, `pagina`, `gestor`, `funcion`, `urlimg`, `aplicambito`, `visuparametros`, `parametros`, `comentarios`, `activo`) VALUES -('1', 'Asistente Clonacion Particiones Remotas', '../asistentes/AsistenteCloneRemotePartition.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), -('2', 'Asistente "Deploy" de Imagenes', '../asistentes/AsistenteDeployImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), -('3', 'Asistente "UpdateCache" con Imagenes', '../asistentes/AsistenteUpdateCache.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), -('4', 'Asistente Restauracion de Imagenes', '../asistentes/AsistenteRestoreImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), -('5', 'Asistente Particionado', '../asistentes/AsistenteParticionado.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'); +('8', 'Asistente Clonacion Particiones Remotas', '../asistentes/AsistenteCloneRemotePartition.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), +('8', 'Asistente "Deploy" de Imagenes', '../asistentes/AsistenteDeployImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'), +('8', 'Asistente "UpdateCache" con Imagenes', '../asistentes/AsistenteUpdateCache.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), +('8', 'Asistente Restauracion de Imagenes', '../asistentes/AsistenteRestoreImage.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '0'), +('8', 'Asistente Particionado', '../asistentes/AsistenteParticionado.php', '../asistentes/gestores/gestor_Comandos.php', 'EjecutarScript', ' ', '31', 'iph;tis;dcr;dsp', 'nfn;iph;tis;dcr;scp', ' ', '1'); @@ -217,7 +217,7 @@ INSERT INTO `comandos` (`idcomando`, `descripcion`, `pagina`, `gestor`, `funcion (7, 'Inventario Software', '../comandos/InventarioSoftware.php', '../comandos/gestores/gestor_Comandos.php', 'InventarioSoftware', '', 16, 'par', 'nfn;iph;mac;par', '', 1), (8, 'Ejecutar Script', '../comandos/EjecutarScripts.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1), (9, 'Iniciar Sesion', '../comandos/IniciarSesion.php', '../comandos/gestores/gestor_Comandos.php', 'IniciarSesion', '', 31, 'par', 'nfn;iph;par', '', 1), -(10, 'Particionar y Formatear', '../comandos/Configurar.php', '../comandos/gestores/gestor_Comandos.php', 'Configurar', '', 28, 'dsk;cfg;', 'nfn;iph;mac;dsk;cfg;par;cpt;sfi;tam;ope', '', 1); +(10, 'Particionar y Formatear', '../comandos/Configurar.php', '../comandos/gestores/gestor_Comandos.php', 'Configurar', '', 28, 'dsk;cfg;', 'nfn;iph;mac;dsk;cfg;par;cpt;sfi;tam;ope', '', 0); -- cgit v1.2.3-18-g5258 From 54169f1084bac775820533d6702960a1181c0ac0 Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:24:50 +0000 Subject: version1.0 fichero sql para actualizacion de 1.0pre-1.0 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1756 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Database/alterbd.sql | 16 ---------------- admin/Database/ogAdmBD-1.0pre-1.0.sql | 16 ++++++++++++++++ doc/VERSION.txt | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) delete mode 100644 admin/Database/alterbd.sql create mode 100644 admin/Database/ogAdmBD-1.0pre-1.0.sql diff --git a/admin/Database/alterbd.sql b/admin/Database/alterbd.sql deleted file mode 100644 index 5ef410d1..00000000 --- a/admin/Database/alterbd.sql +++ /dev/null @@ -1,16 +0,0 @@ -SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; - --- --- Base de datos: `ogBDAdmin` --- - - -UPDATE `ogAdmBD`.`comandos` SET `activo` = '0' WHERE `comandos`.`idcomando` =10; - - - -ALTER TABLE `asistentes` DROP PRIMARY KEY , -ADD PRIMARY KEY ( `idcomando` , `descripcion` ) ; - - -UPDATE `ogAdmBD`.`asistentes` SET `idcomando` = '8' ; \ No newline at end of file diff --git a/admin/Database/ogAdmBD-1.0pre-1.0.sql b/admin/Database/ogAdmBD-1.0pre-1.0.sql new file mode 100644 index 00000000..5ef410d1 --- /dev/null +++ b/admin/Database/ogAdmBD-1.0pre-1.0.sql @@ -0,0 +1,16 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- +-- Base de datos: `ogBDAdmin` +-- + + +UPDATE `ogAdmBD`.`comandos` SET `activo` = '0' WHERE `comandos`.`idcomando` =10; + + + +ALTER TABLE `asistentes` DROP PRIMARY KEY , +ADD PRIMARY KEY ( `idcomando` , `descripcion` ) ; + + +UPDATE `ogAdmBD`.`asistentes` SET `idcomando` = '8' ; \ No newline at end of file diff --git a/doc/VERSION.txt b/doc/VERSION.txt index 20234723..79c512fa 100644 --- a/doc/VERSION.txt +++ b/doc/VERSION.txt @@ -1 +1 @@ -OpenGnSys 1.0pre +OpenGnSys 1.0 -- cgit v1.2.3-18-g5258 From 1ce344f7c728b495f146a3c0b8a4f8ea04e311a1 Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:41:57 +0000 Subject: version1.0 integrando ogclient git-svn-id: https://opengnsys.es/svn/branches/version1.0@1757 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/ogClient/INSTALL.es.txt | 46 + .../clientstructure/etc/apt/sources.list.debian | 4 + .../clientstructure/etc/apt/sources.list.ubuntu | 56 ++ client/ogClient/clientstructure/etc/environment | 4 + client/ogClient/clientstructure/etc/fstab | 13 + .../etc/initramfs-tools/hooks/oghooks | 58 ++ .../clientstructure/etc/initramfs-tools/modules | 14 + .../etc/initramfs-tools/scripts/ogfunctions | 436 ++++++++++ .../etc/initramfs-tools/scripts/oginit | 111 +++ client/ogClient/clientstructure/etc/inittab | 14 + .../etc/modprobe.d/blacklist-framebuffer.conf | 30 + client/ogClient/clientstructure/etc/mtab | 0 .../clientstructure/etc/network/interfaces | 4 + .../clientstructure/etc/profile.d/loadenviron.sh | 84 ++ client/ogClient/clientstructure/etc/ssh/ssh_config | 56 ++ .../ogClient/clientstructure/etc/ssh/sshd_config | 86 ++ .../clientstructure/root/CompileSoftware.sh | 30 + client/ogClient/clientstructure/root/ConfFS.sh | 24 + .../clientstructure/root/GenerateInitrd.generic.sh | 16 + .../clientstructure/root/InstallSoftware.sh | 62 ++ .../clientstructure/root/ReconfigureLocales.sh | 4 + .../clientstructure/root/generateSshKeysClient.sh | 23 + .../ogClient/clientstructure/root/importSshKeys.sh | 17 + client/ogClient/clientstructure/root/qemu.sh | 9 + .../var/lib/locales/supported.d/local | 5 + client/ogClient/kernelParameterOG.es.txt | 29 + client/ogClient/ogClientGeneratorV2.sh | 166 ++++ client/ogClient/ogClientManager.lib | 608 +++++++++++++ client/ogClient/ogInstaller.lib | 958 +++++++++++++++++++++ .../old/ModificacionesNecesiariasENGINE/Net.lib | 77 ++ .../old/ModificacionesNecesiariasENGINE/readme | 27 + client/ogClient/old/Net.lib | 77 ++ client/ogClient/old/boot/default.sh | 23 + client/ogClient/old/boot/load2fs.sh | 19 + client/ogClient/old/conframfs.sh | 34 + .../usr/lib/initramfs-tools/bin/busybox | Bin 0 -> 1269432 bytes .../usr/lib/initramfs-tools/busybox | Bin 0 -> 223548 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 0 -> 9688 bytes .../usr/share/initramfs-tools/hook-functions | 461 ++++++++++ .../usr/share/initramfs-tools/hooks/compcache | 95 ++ .../usr/share/initramfs-tools/hooks/console_setup | 50 ++ .../usr/share/initramfs-tools/hooks/dmsetup | 23 + .../usr/share/initramfs-tools/hooks/fixrtc | 26 + .../usr/share/initramfs-tools/hooks/framebuffer | 41 + .../usr/share/initramfs-tools/hooks/fuse_utils | 15 + .../usr/share/initramfs-tools/hooks/kbd | 23 + .../usr/share/initramfs-tools/hooks/lvm2 | 43 + .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 + .../usr/share/initramfs-tools/hooks/plymouth | 69 ++ .../usr/share/initramfs-tools/hooks/thermal | 46 + .../usr/share/initramfs-tools/hooks/udev | 52 ++ .../usr/share/initramfs-tools/hooks/watershed | 25 + .../usr/share/initramfs-tools/init | 272 ++++++ .../usr/share/initramfs-tools/modules | 10 + .../usr/share/initramfs-tools/scripts/functions | 420 +++++++++ .../initramfs-tools/scripts/init-bottom/plymouth | 21 + .../share/initramfs-tools/scripts/init-bottom/udev | 24 + .../initramfs-tools/scripts/init-premount/lvm2 | 41 + .../scripts/init-top/all_generic_ide | 18 + .../initramfs-tools/scripts/init-top/blacklist | 34 + .../initramfs-tools/scripts/init-top/console_setup | 83 ++ .../initramfs-tools/scripts/init-top/framebuffer | 104 +++ .../share/initramfs-tools/scripts/init-top/keymap | 28 + .../initramfs-tools/scripts/init-top/plymouth | 20 + .../share/initramfs-tools/scripts/init-top/udev | 30 + .../usr/share/initramfs-tools/scripts/local | 131 +++ .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 + .../initramfs-tools/scripts/local-premount/fixrtc | 64 ++ .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 + .../initramfs-tools/scripts/local-premount/resume | 75 ++ .../usr/share/initramfs-tools/scripts/nfs | 83 ++ .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 + .../initramfs-tools/scripts/panic/console_setup | 82 ++ .../usr/share/initramfs-tools/scripts/panic/keymap | 27 + .../share/initramfs-tools/scripts/panic/plymouth | 18 + .../ogClient/old/initramfs-tools-OG/conf.d/mdadm | 18 + .../ogClient/old/initramfs-tools-OG/conf.d/resume | 1 + .../ogClient/old/initramfs-tools-OG/hooks/oghooks | 40 + .../ogClient/old/initramfs-tools-OG/initramfs.conf | 72 ++ client/ogClient/old/initramfs-tools-OG/modules | 13 + client/ogClient/old/initramfs-tools-OG/scripts/og | 140 +++ .../old/initramfs-tools-OG/update-initramfs.conf | 20 + client/ogClient/old/ogClientFunctions | 255 ++++++ client/ogClient/old/ogClientGenerator.sh | 306 +++++++ .../ModificacionesNecesiariasENGINE/Net.lib | 77 ++ .../ModificacionesNecesiariasENGINE/readme | 20 + client/ogClient/old/ogFSHlnk/boot/default.sh | 23 + client/ogClient/old/ogFSHlnk/boot/load2fs.sh | 19 + .../old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh | 395 +++++++++ .../initramfs-tools-OG-unionfs/antonio/rcog | 137 +++ .../etc/initramfs-tools-OG/conf.d/resume | 1 + .../etc/initramfs-tools-OG/hooks/oghooks | 43 + .../etc/initramfs-tools-OG/initramfs.conf | 72 ++ .../etc/initramfs-tools-OG/modules | 14 + .../etc/initramfs-tools-OG/scripts/og | 194 +++++ .../etc/initramfs-tools-OG/update-initramfs.conf | 20 + .../initramfs-tools-OG-unionfs/etc/inittab | 14 + .../etc/modprobe.d/blacklist-framebuffer.conf | 30 + .../usr/lib/initramfs-tools/bin/busybox | Bin 0 -> 1269432 bytes .../usr/lib/initramfs-tools/busybox | Bin 0 -> 223548 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 0 -> 9688 bytes .../usr/share/initramfs-tools/hook-functions | 461 ++++++++++ .../usr/share/initramfs-tools/hooks/compcache | 95 ++ .../usr/share/initramfs-tools/hooks/console_setup | 50 ++ .../usr/share/initramfs-tools/hooks/dmsetup | 23 + .../usr/share/initramfs-tools/hooks/fixrtc | 26 + .../usr/share/initramfs-tools/hooks/framebuffer | 41 + .../usr/share/initramfs-tools/hooks/fuse_utils | 15 + .../usr/share/initramfs-tools/hooks/kbd | 23 + .../usr/share/initramfs-tools/hooks/lvm2 | 43 + .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 + .../usr/share/initramfs-tools/hooks/plymouth | 69 ++ .../usr/share/initramfs-tools/hooks/thermal | 46 + .../usr/share/initramfs-tools/hooks/udev | 52 ++ .../usr/share/initramfs-tools/hooks/watershed | 25 + .../usr/share/initramfs-tools/init | 272 ++++++ .../usr/share/initramfs-tools/modules | 10 + .../usr/share/initramfs-tools/scripts/functions | 420 +++++++++ .../initramfs-tools/scripts/init-bottom/plymouth | 21 + .../share/initramfs-tools/scripts/init-bottom/udev | 24 + .../initramfs-tools/scripts/init-premount/lvm2 | 41 + .../scripts/init-top/all_generic_ide | 18 + .../initramfs-tools/scripts/init-top/blacklist | 34 + .../initramfs-tools/scripts/init-top/console_setup | 83 ++ .../initramfs-tools/scripts/init-top/framebuffer | 104 +++ .../share/initramfs-tools/scripts/init-top/keymap | 28 + .../initramfs-tools/scripts/init-top/plymouth | 20 + .../share/initramfs-tools/scripts/init-top/udev | 30 + .../usr/share/initramfs-tools/scripts/local | 131 +++ .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 + .../initramfs-tools/scripts/local-premount/fixrtc | 64 ++ .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 + .../initramfs-tools/scripts/local-premount/resume | 75 ++ .../usr/share/initramfs-tools/scripts/nfs | 83 ++ .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 + .../initramfs-tools/scripts/panic/console_setup | 82 ++ .../usr/share/initramfs-tools/scripts/panic/keymap | 27 + .../share/initramfs-tools/scripts/panic/plymouth | 18 + .../ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm | 18 + .../ogFSHlnk/old/initramfs-tools-OG/conf.d/resume | 1 + .../ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks | 40 + .../ogFSHlnk/old/initramfs-tools-OG/initramfs.conf | 72 ++ .../old/ogFSHlnk/old/initramfs-tools-OG/modules | 13 + .../old/ogFSHlnk/old/initramfs-tools-OG/scripts/og | 140 +++ .../old/initramfs-tools-OG/update-initramfs.conf | 20 + .../ogClient/old/serverstructure/etc/exports.txt | 1 + .../old/serverstructure/etc/samba/smb.conf.txt | 29 + .../old/serverstructure/init/defaultTESTING.sh | 46 + .../old/serverstructure/preinit/defaultTESTING.sh | 27 + .../serverstructure/preinit/loadenvironTESTING.sh | 95 ++ .../serverstructure/preinit/loadmodulesTESTING.sh | 28 + .../serverstructure/var/lib/tftpboot/defaultFULL | 18 + 152 files changed, 10962 insertions(+) create mode 100644 client/ogClient/INSTALL.es.txt create mode 100644 client/ogClient/clientstructure/etc/apt/sources.list.debian create mode 100644 client/ogClient/clientstructure/etc/apt/sources.list.ubuntu create mode 100644 client/ogClient/clientstructure/etc/environment create mode 100644 client/ogClient/clientstructure/etc/fstab create mode 100755 client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks create mode 100644 client/ogClient/clientstructure/etc/initramfs-tools/modules create mode 100644 client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions create mode 100755 client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit create mode 100644 client/ogClient/clientstructure/etc/inittab create mode 100644 client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf create mode 100644 client/ogClient/clientstructure/etc/mtab create mode 100644 client/ogClient/clientstructure/etc/network/interfaces create mode 100755 client/ogClient/clientstructure/etc/profile.d/loadenviron.sh create mode 100644 client/ogClient/clientstructure/etc/ssh/ssh_config create mode 100644 client/ogClient/clientstructure/etc/ssh/sshd_config create mode 100755 client/ogClient/clientstructure/root/CompileSoftware.sh create mode 100755 client/ogClient/clientstructure/root/ConfFS.sh create mode 100755 client/ogClient/clientstructure/root/GenerateInitrd.generic.sh create mode 100644 client/ogClient/clientstructure/root/InstallSoftware.sh create mode 100755 client/ogClient/clientstructure/root/ReconfigureLocales.sh create mode 100644 client/ogClient/clientstructure/root/generateSshKeysClient.sh create mode 100755 client/ogClient/clientstructure/root/importSshKeys.sh create mode 100755 client/ogClient/clientstructure/root/qemu.sh create mode 100644 client/ogClient/clientstructure/var/lib/locales/supported.d/local create mode 100644 client/ogClient/kernelParameterOG.es.txt create mode 100755 client/ogClient/ogClientGeneratorV2.sh create mode 100644 client/ogClient/ogClientManager.lib create mode 100644 client/ogClient/ogInstaller.lib create mode 100755 client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib create mode 100644 client/ogClient/old/ModificacionesNecesiariasENGINE/readme create mode 100755 client/ogClient/old/Net.lib create mode 100755 client/ogClient/old/boot/default.sh create mode 100644 client/ogClient/old/boot/load2fs.sh create mode 100644 client/ogClient/old/conframfs.sh create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth create mode 100644 client/ogClient/old/initramfs-tools-OG/conf.d/mdadm create mode 100644 client/ogClient/old/initramfs-tools-OG/conf.d/resume create mode 100755 client/ogClient/old/initramfs-tools-OG/hooks/oghooks create mode 100644 client/ogClient/old/initramfs-tools-OG/initramfs.conf create mode 100644 client/ogClient/old/initramfs-tools-OG/modules create mode 100755 client/ogClient/old/initramfs-tools-OG/scripts/og create mode 100644 client/ogClient/old/initramfs-tools-OG/update-initramfs.conf create mode 100755 client/ogClient/old/ogClientFunctions create mode 100755 client/ogClient/old/ogClientGenerator.sh create mode 100755 client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib create mode 100644 client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme create mode 100755 client/ogClient/old/ogFSHlnk/boot/default.sh create mode 100644 client/ogClient/old/ogFSHlnk/boot/load2fs.sh create mode 100755 client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth create mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm create mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume create mode 100755 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks create mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf create mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules create mode 100755 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og create mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf create mode 100644 client/ogClient/old/serverstructure/etc/exports.txt create mode 100644 client/ogClient/old/serverstructure/etc/samba/smb.conf.txt create mode 100755 client/ogClient/old/serverstructure/init/defaultTESTING.sh create mode 100755 client/ogClient/old/serverstructure/preinit/defaultTESTING.sh create mode 100755 client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh create mode 100755 client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh create mode 100644 client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL diff --git a/client/ogClient/INSTALL.es.txt b/client/ogClient/INSTALL.es.txt new file mode 100644 index 00000000..b357595b --- /dev/null +++ b/client/ogClient/INSTALL.es.txt @@ -0,0 +1,46 @@ +########## INSTALACION ################################## + +### NOTA principal: utilizar el usuario root para este proceso #### +1. Comprobar la conexión a internet, sobre todo si usas proxy. El hecho de que te funcione apt-get no significa que tengas el proxy configurado. +1. Descargar del subversion la estrucutura del cliente. + +# reubicacion al trunk/client/boot + +Proceso: +0. Si ya tenemos un /var/lib/tftpboot/ogclient lo renombramos por si acaso. +1. Descargar del subversion la rama ogClient. +3. Ejecutar el instalador: + +mv /opt/opengnsys/tftpboot/ogclient/ /opt/opengnsys/tftpboot/ogclientTrunk; +svn checkout http://www.opengnsys.es/svn/branches/ogClient /tmp/opengnsys_installer/opengnsys/installer/ogClient; +svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/shared/ /tmp/opengnsys_installer/opengnsys/client/shared; +svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/engine/ /tmp/opengnsys_installer/opengnsys/client/engine; +find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null; +/tmp/opengnsys_installer/opengnsys/installer/ogClient/ogClientGeneratorV2.sh; + + + +NOTA: el proceso tardará un buen rato, dependiendo de nuestras circustancias. +NOTA: crea un kernel, initrd, ogclient.img en /var/lib/tftpboot/ogclient +NOTA: el ogclient.img es el Segundo sistema de archivos en formato fichero bloques emulando a disco con partición primaria. +NOTA: el ogclient.sqfs es el Segundo sistema de archivos (partición primaria del img) en formato squashfs. Se usará con el parámetro og2nd=sqfs +NOTA: los logs de instalación estarán en /tmp/opengnsys_installation.log + + + NOTA A RECORDAR: + NOTA ACLARATORIA: $OGSCRITPS(reboot,poweroff) antes de /sbin/{reboot,poweroff} + + ################## Descripcion de la estrucutra de ogClient. + los directorios old y serverstrucutre son antiguos, pero no borrarlos. + INSTALL.es.txt : este mismo archivo. + ogInstaller.lib : son todas las funciones de instalacion del instalador oficial de opengnys. Algunas de ellas son utilizadas. Crear ticket para separar las funciones de iinstalacion del proceso de instalacion. + ogClientManager.lib: son las funicones especificas para la instalacion del ogclient. estan escritas en orden de que son llamadas por el instalador, (ogClientGeneratorV2.sh) + ogClientGeneratorV2.sh. Es el guión de ejecución del isntalador. + + + + ############ ERROR PRINCIPAL 2 ####### + necesita que en el equipo donde se ejecuta el scripts, disponga de la estrucutra /opt/opengnsys/client + sobre todo los lib/fonts, el lib/pci.ids el bin/browser y el bin/ogAdmClient + + diff --git a/client/ogClient/clientstructure/etc/apt/sources.list.debian b/client/ogClient/clientstructure/etc/apt/sources.list.debian new file mode 100644 index 00000000..495e48d4 --- /dev/null +++ b/client/ogClient/clientstructure/etc/apt/sources.list.debian @@ -0,0 +1,4 @@ +deb http://ftp.us.debian.org/debian lenny main contrib non-free + +deb http://security.debian.org/ lenny/updates main contrib non-free +deb-src http://security.debian.org/ lenny/updates main contrib non-free diff --git a/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu b/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu new file mode 100644 index 00000000..29348ccc --- /dev/null +++ b/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu @@ -0,0 +1,56 @@ +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted +## Major bug fix updates produced after the final release of the +## distribution. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team. Also, please note that software in universe WILL NOT receive any +## review or updates from the Ubuntu security team. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team, and may not be under a free licence. Please satisfy yourself as to +## your rights to use the software. Also, please note that software in +## multiverse WILL NOT receive any review or updates from the Ubuntu +## security team. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse + +## Uncomment the following two lines to add software from the 'backports' +## repository. +## N.B. software from this repository may not have been tested as +## extensively as that contained in the main release, although it includes +## newer versions of some applications which may provide useful features. +## Also, please note that software in backports WILL NOT receive any review +## or updates from the Ubuntu security team. +# deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse +# deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse + +## Uncomment the following two lines to add software from Canonical's +## 'partner' repository. +## This software is not part of Ubuntu, but is offered by Canonical and the +## respective vendors as a service to Ubuntu users. +# deb http://archive.canonical.com/ubuntu OSCODENAME partner +# deb-src http://archive.canonical.com/ubuntu OSCODENAME partner + + +deb http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted +deb http://security.ubuntu.com/ubuntu OSCODENAME-security universe +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security universe +deb http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse + + +deb http://archive.ubuntu.com/ubuntu OSCODENAME main +deb http://free.nchc.org.tw/drbl-core drbl stable +deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe multiverse +deb http://ppa.launchpad.net/freenx-team/ubuntu/ OSCODENAME main +deb http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main +deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main diff --git a/client/ogClient/clientstructure/etc/environment b/client/ogClient/clientstructure/etc/environment new file mode 100644 index 00000000..bb529d99 --- /dev/null +++ b/client/ogClient/clientstructure/etc/environment @@ -0,0 +1,4 @@ +LC_TYPE=es_ES@euro +LC_ALL=es_ES@euro +LANG=es_ES@euro +LANGUAGE=es_ES@euro \ No newline at end of file diff --git a/client/ogClient/clientstructure/etc/fstab b/client/ogClient/clientstructure/etc/fstab new file mode 100644 index 00000000..d7473df4 --- /dev/null +++ b/client/ogClient/clientstructure/etc/fstab @@ -0,0 +1,13 @@ +# /etc/fstab: static file system information. +# +# Use 'blkid -o value -s UUID' to print the universally unique identifier +# for a device; this may be used with UUID= as a more robust way to name +# devices that works even if disks are added and removed. See fstab(5). +# +# +proc /proc proc 0 0 +/dev/sda1 ext3 errors=remount-ro 0 1 + + + + diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks b/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks new file mode 100755 index 00000000..15fd01cc --- /dev/null +++ b/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks @@ -0,0 +1,58 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + +#@file oghooks +#@brief configuración initrd para OpenGnSys +#@warning +#@version 0.9 - estrucura opengnsys, bash-static, unionfs, atheros +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; +mkdir -p ${DESTDIR}/ogboot; +mkdir -p ${DESTDIR}/boot; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash +copy_exec /usr/bin/unionfs-fuse +copy_exec /sbin/mount.cifs + + +# Insert OpenGnsys Engine +#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + +rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl* +manual_add_modules cifs +manual_add_modules smbfs +manual_add_modules atl1e +manual_add_modules squashfs + + diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/modules b/client/ogClient/clientstructure/etc/initramfs-tools/modules new file mode 100644 index 00000000..8bac1d4b --- /dev/null +++ b/client/ogClient/clientstructure/etc/initramfs-tools/modules @@ -0,0 +1,14 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +vga16b +vesafb +fbcon + diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions new file mode 100644 index 00000000..adce44fd --- /dev/null +++ b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions @@ -0,0 +1,436 @@ +#@file ogfunctions.lib +#@brief Librería o clase para la generación del 1erFS +#@class client +#@brief Funciones para la generación del primers sistema (initrd) +#@version 0.91 +#@warning License: GNU GPLv3+ + + + + +ogExportKernelParameters () +{ + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done +return 0 +} + +ogExportVarEnvironment () +{ + #puntos de accesos al servidor ogprotocol=nfs + export NFSROOTBOOT="/var/lib/tftpboot" + export NFSCLIENTDIR="/opt/opengnsys/client" + export NFSLOGDIR="/opt/opengnsys/log/clients" + export NFSIMGDIR="/opt/opengnsys/images" + #puntos de accesos al servidor ogprotocol=smb + export SMBROOTBOOT="tftpboot" + export SMBCLIENTDIR="ogclient" + export SMBLOGDIR="oglog" + export SMBIMGDIR="ogimages" + + #puntos de montaje local ram o cache + export LOCALCLIENTDIR="/opt/opengnsys" + export LOCALLOGDIR="/opt/opengnsys/log" + export LOCALIMGDIR="/opt/opengnsys/images" + export LOCALROOTBOOT="/opt/og2fs/tftpboot" #punto de montaje del contendor tftpboot + export LOCALROOTIMG="/opt/og2fs/2ndfs" #punto de montaje donde se accede al 2nd FS mediante loop + export LOCALROOTRAM="/opt/og2fs/1stfs" #punto de montaje para unionfs + export LOCALROOTUNION="/opt/og2fs/unionfs" #punto de union entreo LOCALROOTIMG y LOCALROOTRAM + ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES. + #ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd. + #IPV4DDR + #IPV4BROADCAST + #IPV4NETMASK + #IPV4GATEWAY + #DNS0 DNS1 + #HOSTNAME + #ROOTSERVER #ip del servidor pxe que ha servido el kernel + #REPOSERVER=ogrepo -> ogConectROOTSERVER() ip del servidor de images para separar serviicios. + return 0 +} + +ogConfigureRamfs () +{ + mkdir -p $LOCALROOTBOOT + mkdir -p $LOCALROOTIMG + mkdir -p $LOCALROOTRAM + mkdir -p $LOCALROOTUNION +} + +ogLoadNetModule () +{ + #cargando netmodule + if [ -n "$ognetmodule" ] + then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` + fi +} + + +ogPostConfigureFS() +{ + # configuramos el /etc/hostname. + echo $HOSTNAME > /etc/hostname + + #configuramos el /etc/hosts + echo "127.0.0.1 localhost" > /etc/hosts + echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts + + #configuramos el host.conf + echo "order hosts,bind" > /etc/host.conf + echo "multi on" >> /etc/host.conf + + # configuramos el /etc/networks + #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}') + NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ") + echo "default 0.0.0.0" > /etc/networks + echo "loopback 127.0.0.0" >> /etc/networks + echo "link-local 169.254.0.0" >> /etc/networks + echo "localnet $NETIP" >> /etc/networks + #route +} + + + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +return 0 +} + +ogConectROOTSERVER () +{ +local OPTIONS +#params a detectar +if [ $ogrepo ] +then + # Validar si la ip es correcta + ROOTREPO=$ogrepo +else + ROOTREPO=$ROOTSERVER +fi + +case "$ogprotocol" in + cdrom) + echo "blkid /dev/s*" + blkid /dev/s* + echo " mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT " + mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT + ;; + httfs) + echo "protocolo httfs aun no soportado" + ;; + sshfs) + echo "protocolo sshfs aun no soportado" + ;; + smb) + echo Preparando conexión con el Repositorio $ROOTSERVER $ogprotocol + OPTIONS=" -o user=opengnsys,pass=og" + mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS + #&& echo "mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS "; + mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS + #&& echo "mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS " ; + mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS + #&& echo "mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS "; + mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro + #&& echo " mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro "; + ;; + nfs) + echo Preparando conexión con el Repositorio $ROOTSERVER $ogprotocol + nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR && echo "nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR "; + nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR && echo "nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR "; + nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT && echo "nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT "; + nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR && echo "nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR "; + + #mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + #mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m + ;; +esac +} + +ogMerge2ndFile() +{ +if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ] +then + cat /proc/mounts > /tmp/mtab.preunion + if [ "$og2nd" == "img" ] + then + #para acceder al img + losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256 + mount /dev/loop0 $LOCALROOTIMG + else + ## para acceder al squashfs + mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop + fi + for i in etc var lib bin sbin usr root boot; do + unionmount $i + done + cat /tmp/mtab.preunion > /etc/mtab +else + echo "ficher imagen del cliente no encontrado" + return 1 +fi +} + + +unionmount() +{ + tmpdir=/$1 #dir + FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" + UNION_OPT="-o cow -o noinitgroups" + UBIN="unionfs-fuse" + #UPATH="/unionfs" + #LOCALROOTIMG="/opt/og2fs/2ndfs" + #LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs + #LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM + #mkdir -p $LOCALROOTRAM #/unionfs/host + #mkdir -p $LOCALROOTUNION #/unionfs/union + mkdir -p $LOCALROOTRAM$tmpdir + #mount --bind /$tmpdir $LOCALROOTRAM$tmpdir + U1STDIR="${LOCALROOTRAM}${tmpdir}=RW" + U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO" + UNIONDIR=$LOCALROOTUNION$tmpdir + mkdir -p $UNIONDIR + $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR + mount --bind $UNIONDIR $tmpdir +} + + +unionmountOLD() +{ + FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" + UNION_OPT="-o cow -o noinitgroups" + UPATH="/unionfs" + UBIN="unionfs-fuse" + mkdir -p /unionfs/host + mkdir -p /unionfs/union + dir=$1 + mkdir -p /unionfs/host/$dir + #mount --bind /$dir /unionfs/host/$dir + mkdir -p /unionfs/union/$dir + host="/unionfs/host/${dir}=RW" + common="/opt/og2fs/${dir}=RO" + $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir + mount --bind /unionfs/union/$dir /$dir +} +ogconfigure_lo() +{ +# for the portmapper we need localhost +ifconfig lo 127.0.0.1 +#/etc/init.d/portmap start +} + +ogconfigure_networking() +{ +IP=$IPOPTS +# http://paste.ubuntu.com/427631/ Paste from yofel at Tue, 4 May 2010 13:49:56 +0000 + if [ -n "${BOOTIF}" ]; then + # pxelinux sets BOOTIF to a value based on the mac address of the + # network card used to PXE boot, so use this value for DEVICE rather + # than a hard-coded device name from initramfs.conf. this facilitates + # network booting when machines may have multiple network cards. + # pxelinux sets BOOTIF to 01-$mac_address + + # strip off the leading "01-", which isn't part of the mac + # address + temp_mac=${BOOTIF#*-} + + # convert to typical mac address format by replacing "-" with ":" + bootif_mac="" + IFS='-' + for x in $temp_mac ; do + if [ -z "$bootif_mac" ]; then + bootif_mac="$x" + else + bootif_mac="$x:$bootif_mac" + fi + done + unset IFS + + # look for devices with matching mac address, and set DEVICE to + # appropriate value if match is found. + for device in /sys/class/net/* ; do + if [ -f "$device/address" ]; then + current_mac=$(cat "$device/address") + if [ "$bootif_mac" = "$current_mac" ]; then + DEVICE=${device##*/} + break + fi + fi + done + fi + + # networking already configured thus bail out + [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 + + # support ip options see linux sources + # Documentation/filesystems/nfsroot.txt + # Documentation/frv/booting.txt + + for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do + + # The NIC is to be configured if this file does not exist. + # Ip-Config tries to create this file and when it succeds + # creating the file, ipconfig is not run again. + if [ -e /tmp/net-"${DEVICE}".conf ]; then + break; + fi + + case ${IP} in + none|off) + # Do nothing + ;; + ""|on|any) + # Bring up device + echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " + ipconfig -t ${ROUNDTTT} ${DEVICE} + ;; + dhcp|bootp|rarp|both) + echo "Setting $DEVICE with (dhcp) kernel params $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " + ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} + ;; + *) + echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} -d $IP " + ipconfig -t ${ROUNDTTT} -d $IP + + # grab device entry from ip option + NEW_DEVICE=${IP#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IP}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac + done + + # source ipconfig output + if [ -n "${DEVICE}" ]; then + # source specific bootdevice + . /tmp/net-${DEVICE}.conf + else + # source any interface as not exaclty specified + . /tmp/net-*.conf + fi +} + + ##################################################################### +# Ask yesno question. +# +# Usage: yesno OPTIONS QUESTION +# +# Options: +# --timeout N Timeout if no input seen in N seconds. +# --default ANS Use ANS as the default answer on timeout or +# if an empty answer is provided. +# +# Exit status is the answer. 0=yes 1=no + +ogYesNo() +{ + local ans + local ok=0 + local timeout=0 + local default + local t + + while [[ "$1" ]] + do + case "$1" in + --default) + shift + default=$1 + if [[ ! "$default" ]]; then error "Missing default value"; fi + t=$(echo $default | tr '[:upper:]' '[:lower:]') + + if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then + error "Illegal default answer: $default" + fi + default=$t + shift + ;; + + --timeout) + shift + timeout=$1 + if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi + #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi + shift + ;; + + -*) + error "Unrecognized option: $1" + ;; + + *) + break + ;; + esac + done + + if [[ $timeout -ne 0 && ! "$default" ]]; then + error "Non-zero timeout requires a default answer" + fi + + if [[ ! "$*" ]]; then error "Missing question"; fi + + while [[ $ok -eq 0 ]] + do + if [[ $timeout -ne 0 ]]; then + if ! read -t $timeout -p "$*" ans; then + ans=$default + else + # Turn off timeout if answer entered. + timeout=0 + if [[ ! "$ans" ]]; then ans=$default; fi + fi + else + read -p "$*" ans + if [[ ! "$ans" ]]; then + ans=$default + else + ans=$(echo $ans | tr '[:upper:]' '[:lower:]') + fi + fi + + if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then + ok=1 + fi + + if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi + done + [[ "$ans" = "y" || "$ans" == "yes" ]] +} + + diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit new file mode 100755 index 00000000..a6c05d5e --- /dev/null +++ b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit @@ -0,0 +1,111 @@ +# OpenGnsys oginit -*- shell-script -*- + +#@file oginit +#@brief Guion modificador inicio initrd para OpenGnSys +#@warning +#@version 0.1 - basado en ROOTfs +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2009/00/00 +#@version 0.2 - basado en el instalador de ubunto +#@author Alejandro Castillo +#@author Ramón Gómez +#@author Irina +#@author Antonio Doblas +#@date 2010/00/00 +#@version 0.7 - Generación limpia con mkinitrd, busybox +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/05/24 +#@version 0.8 - Integración con FileSystem externo +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/06/24 +#@version 0.8.1 - UnionFS + squasfs +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/06/29 + +#*/ + + + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + . /scripts/functions + . /scripts/ogfunctions + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N " + [ $? == 0 ] && sh || echo " " + + set -a + log_success_msg "Checking kernel parameters" + ogExportKernelParameters + log_success_msg "Checking Opengnys Environmnet" + ogExportVarEnvironment + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N " + [ $? == 0 ] && sh || echo " " + ogConfigureRamfs + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N " + [ $? == 0 ] && sh || echo " " + ogLoadNetModule + + #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + #run_scripts /scripts/og-premount + #[ "$quiet" != "y" ] && log_end_msg + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N " + [ $? == 0 ] && sh || echo " " + ogconfigure_networking + log_success_msg "config networking" + ogconfigure_lo + log_success_msg "config loopback" + + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N " + [ $? == 0 ] && sh || echo " " + ogGetROOTSERVER && log_success_msg "Get Info from pxe server" + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before conect with og Services : y/N " + [ $? == 0 ] && sh || echo " " + ogConectROOTSERVER && log_success_msg "Conecting with og services" || sh + # ogConectROOTMEDIA + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before merge the Second File System with initrd (First File System) : y/N " + [ $? == 0 ] && sh || echo " " + ogMerge2ndFile && log_success_msg "Merge onto Second File System" + + + #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + #run_scripts /scripts/og-bottom + #[ "$quiet" != "y" ] && log_end_msg + + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N " + [ $? == 0 ] && sh || echo " " + ogPostConfigureFS + setupcon -k + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N " + [ $? == 0 ] && sh || echo " " + +if [ "$oginit" ] +then + exec $oginit +else + exec init +fi + + + + + +} diff --git a/client/ogClient/clientstructure/etc/inittab b/client/ogClient/clientstructure/etc/inittab new file mode 100644 index 00000000..94c30028 --- /dev/null +++ b/client/ogClient/clientstructure/etc/inittab @@ -0,0 +1,14 @@ +# This is run first except when booting in single-user mode +# +#::sysinit:/opt/opengnsys/etc/preinit/defaultTESTING.sh +# /bin/sh invocations on selected ttys +# +# Start an "askfirst" shell on the console (whatever that may be) +#::askfirst:/bin/sh +# Start an "askfirst" shell on /dev/tty2-4 +#tty1::respawn:/sbin/getty 38400 tty1 +tty1::respawn:/opt/opengnsys/etc/preinit/defaultTESTING.sh +tty2::respawn:/sbin/getty 38400 tty2 +tty3::respawn:/sbin/getty 38400 tty3 +tty4::respawn:/sbin/getty 38400 tty4 +tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf b/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf new file mode 100644 index 00000000..8b047e4e --- /dev/null +++ b/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf @@ -0,0 +1,30 @@ +# Framebuffer drivers are generally buggy and poorly-supported, and cause +# suspend failures, kernel panics and general mayhem. For this reason we +# never load them automatically. +blacklist aty128fb +blacklist atyfb +#blacklist radeonfb +blacklist cirrusfb +blacklist cyber2000fb +blacklist cyblafb +blacklist gx1fb +blacklist hgafb +blacklist i810fb +blacklist intelfb +blacklist kyrofb +blacklist lxfb +blacklist matroxfb_base +blacklist neofb +blacklist nvidiafb +blacklist pm2fb +blacklist rivafb +blacklist s1d13xxxfb +blacklist savagefb +blacklist sisfb +blacklist sstfb +blacklist tdfxfb +blacklist tridentfb +#blacklist vesafb +blacklist vfb +blacklist viafb +blacklist vt8623fb diff --git a/client/ogClient/clientstructure/etc/mtab b/client/ogClient/clientstructure/etc/mtab new file mode 100644 index 00000000..e69de29b diff --git a/client/ogClient/clientstructure/etc/network/interfaces b/client/ogClient/clientstructure/etc/network/interfaces new file mode 100644 index 00000000..dbe43582 --- /dev/null +++ b/client/ogClient/clientstructure/etc/network/interfaces @@ -0,0 +1,4 @@ +auto lo +iface lo inet loopback +auto eth0 +iface eth0 inet dhcp \ No newline at end of file diff --git a/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh b/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh new file mode 100755 index 00000000..0bf46a3e --- /dev/null +++ b/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh @@ -0,0 +1,84 @@ +#!/bin/bash +#/** +#@file loadenviron.sh +#@brief Script de carga de la API de funciones de OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + +# FIXME Temporal +export LANG="${LANG:-es_ES}" + +#/// Directorios del projecto OpenGNSys. +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" +if [ -d $OPENGNSYS ]; then + export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + +# export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH + # export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH + + #/// Cargar fichero de idioma. + LANGFILE=$OGETC/lang.$LANG.conf + if [ -f $LANGFILE ]; then + source $LANGFILE + #for i in $(grep "^[a-zA-Z].*=" $LANGFILE | cut -f1 -d=); do + for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do + export $i + done + fi + #/// Cargar API de funciones. + echo "$MSG_LOADAPI" + for i in $OGAPI/*.lib; do + source $i + done + for i in $(typeset -F | cut -f3 -d" "); do + export -f $i + done + # Carga de las API testing + if [ "$engine" = "testing" ] + then + for i in $OGAPI/*.testing; do + source $i + done + fi + # Añadir dependencia de arquitectura + ARCH=$(ogGetArch) + if [ -n "$ARCH" ]; then + # export PATH=$OGBIN/$ARCH:$PATH + # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH + fi + # Fichero de registros. + export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + # FIXME Pruebas para grupos de ordenadores + #export OGGROUP=$(ogGetGroup) + export OGGROUP=aula3 +fi + +#/// Declaración de códigos de error. +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + + diff --git a/client/ogClient/clientstructure/etc/ssh/ssh_config b/client/ogClient/clientstructure/etc/ssh/ssh_config new file mode 100644 index 00000000..7f9319dc --- /dev/null +++ b/client/ogClient/clientstructure/etc/ssh/ssh_config @@ -0,0 +1,56 @@ + +# This is the ssh client system-wide configuration file. See +# ssh_config(5) for more information. This file provides defaults for +# users, and the values can be changed in per-user configuration files +# or on the command line. + +# Configuration data is parsed as follows: +# 1. command line options +# 2. user-specific file +# 3. system-wide file +# Any configuration value is only changed the first time it is set. +# Thus, host-specific definitions should be at the beginning of the +# configuration file, and defaults at the end. + +# Site-wide defaults for some commonly used options. For a comprehensive +# list of available options, their meanings and defaults, please see the +# ssh_config(5) man page. + +Host * +# ForwardAgent no +# ForwardX11 no +# ForwardX11Trusted yes +# RhostsRSAAuthentication no +# RSAAuthentication yes +# PasswordAuthentication yes + HostbasedAuthentication no +# GSSAPIAuthentication no +# GSSAPIDelegateCredentials no +# GSSAPIKeyExchange no +# GSSAPITrustDNS no +# BatchMode no +# CheckHostIP yes +# AddressFamily any +# ConnectTimeout 0 +# StrictHostKeyChecking ask +# IdentityFile ~/.ssh/identity +# IdentityFile ~/.ssh/id_rsa +# IdentityFile ~/.ssh/id_dsa +# Port 22 +# Protocol 2,1 +# Cipher 3des +# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc +# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 +# EscapeChar ~ +# Tunnel no +# TunnelDevice any:any +# PermitLocalCommand no +# VisualHostKey no + SendEnv LANG LC_* +# HashKnownHosts yes + GSSAPIAuthentication yes + GSSAPIDelegateCredentials no + + StrictHostKeyChecking no + UserKnownHostsFile=/dev/null + diff --git a/client/ogClient/clientstructure/etc/ssh/sshd_config b/client/ogClient/clientstructure/etc/ssh/sshd_config new file mode 100644 index 00000000..ea0303b3 --- /dev/null +++ b/client/ogClient/clientstructure/etc/ssh/sshd_config @@ -0,0 +1,86 @@ +# Package generated configuration file +# See the sshd_config(5) manpage for details + +# What ports, IPs and protocols we listen for +Port 22 +# Use these options to restrict which interfaces/protocols sshd will bind to +#ListenAddress :: +#ListenAddress 0.0.0.0 +Protocol 2 +# HostKeys for protocol version 2 +HostKey /etc/ssh/ssh_host_rsa_key +HostKey /etc/ssh/ssh_host_dsa_key +#Privilege Separation is turned on for security +UsePrivilegeSeparation yes + +# Lifetime and size of ephemeral version 1 server key +KeyRegenerationInterval 3600 +ServerKeyBits 768 + +# Logging +SyslogFacility AUTH +LogLevel INFO + +# Authentication: +LoginGraceTime 120 +PermitRootLogin yes +StrictModes yes + +RSAAuthentication yes +PubkeyAuthentication yes +#AuthorizedKeysFile %h/.ssh/authorized_keys + +# Don't read the user's ~/.rhosts and ~/.shosts files +IgnoreRhosts yes +# For this to work you will also need host keys in /etc/ssh_known_hosts +RhostsRSAAuthentication no +# similar for protocol version 2 +HostbasedAuthentication no +# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication +#IgnoreUserKnownHosts yes + +# To enable empty passwords, change to yes (NOT RECOMMENDED) +PermitEmptyPasswords no + +# Change to yes to enable challenge-response passwords (beware issues with +# some PAM modules and threads) +ChallengeResponseAuthentication no + +# Change to no to disable tunnelled clear text passwords +#PasswordAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosGetAFSToken no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +X11Forwarding yes +X11DisplayOffset 10 +PrintMotd no +PrintLastLog yes +TCPKeepAlive yes +#UseLogin no + +#MaxStartups 10:30:60 +#Banner /etc/issue.net + +# Allow client to pass locale environment variables +AcceptEnv LANG LC_* + +Subsystem sftp /usr/lib/openssh/sftp-server + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +UsePAM yes diff --git a/client/ogClient/clientstructure/root/CompileSoftware.sh b/client/ogClient/clientstructure/root/CompileSoftware.sh new file mode 100755 index 00000000..1a9b854a --- /dev/null +++ b/client/ogClient/clientstructure/root/CompileSoftware.sh @@ -0,0 +1,30 @@ +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + +#dpkg-divert --local --rename --add /sbin/initctl +#ln -s /bin/true /sbin/initctl + +apt-get -y update +# software to compile code +apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk + +source /opt/opengnsys/lib/engine/bin/ToolsGNU.c + +ctorrent install +udpcast install +#ntfs-3g install +ms-sys install + +wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh +gdebi -n partclone_0.2.16_i386.deb + + cd /tmp + wget http://damien.guibouret.free.fr/savepart.zip + unzip savepart.zip -d /sbin/ + + diff --git a/client/ogClient/clientstructure/root/ConfFS.sh b/client/ogClient/clientstructure/root/ConfFS.sh new file mode 100755 index 00000000..3e0f4b5c --- /dev/null +++ b/client/ogClient/clientstructure/root/ConfFS.sh @@ -0,0 +1,24 @@ +#!/bin/bash +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl +#mv /etc/fstab /etc/fstab.original 2>/dev/null +#mv /etc/mtab /etc/mtab.original 2>/dev/null + +#TODO: fichero etc/hosts +#TODO: fichero etc/resolv.conf +echo "ogClient" > /etc/hostname + +#export PASSROOT=og +#dpkg-reconfigure passwd +#echo "root:$PASSROOT" | chpasswd + + +#for i in pts/0 pts/1 pts/2 pts/3 do +# +# +#done +#TODO: introducir mas consoluas para el acceso como root. +echo "pts/0" >> /etc/securetty +echo "pts/1" >> /etc/securetty +echo "pts/2" >> /etc/securetty +echo "pts/3" >> /etc/securetty \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh b/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh new file mode 100755 index 00000000..eaeb475b --- /dev/null +++ b/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh @@ -0,0 +1,16 @@ +#!/bin/bash +export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null +#OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null +export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') +export OSRELEASE=$(uname -a | awk '{print $3}') +uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 +export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + + + +cd /usr/lib/initramfs-tools/bin/ +rm * +cp /bin/busybox ./ +cd /tmp/ +mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE +cp /boot/vmlinuz-$OSRELEASE /tmp \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/InstallSoftware.sh b/client/ogClient/clientstructure/root/InstallSoftware.sh new file mode 100644 index 00000000..1d316eec --- /dev/null +++ b/client/ogClient/clientstructure/root/InstallSoftware.sh @@ -0,0 +1,62 @@ +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + + +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl + +apt-get clean +apt-get -y update + + +# software system +apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE wget dialog man-db htop fbset gdebi-core busybox-static + +apt-get -y --force-yes install console-data locales + +# sofware networking +apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 unionfs-fuse open-iscsi nmap tcpdump arping dnsutils + +apt-get clean +# software services +apt-get -y --force-yes install openssh-server bittornado trickle iptraf screen schroot grub + +# software disk and filesystem +apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted ntfs-3g dosfstools +apt-get -y --force-yes install dmraid dmsetup lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools +apt-get -y --force-yes install btrfs-tools hfsplus hfsprogs hfsutils + +# software cloning +apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools +apt-get -y --force-yes install mbuffer + + +apt-get clean +## software postconf +apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk + +# software compressor +apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop pigz pbzip2 lbzip2 rzip p7zip-full unzip + +apt-get -y --force-yes remove busybox +apt-get -y --force-yes install busybox-static bash-static +apt-get clean +#apt-get -y --force-yes xorg-dev xorg lxde roxterm +# +#################################################################### +###################### Reconfigurando paquetes ###################### +################################################################### + + +#dpkg-reconfigure console-data +#dpkg-reconfigure console-setup +#dpkg-reconfigure locales +apt-get clean +##TODO################# Borrar algunos binarios del mkinitramfs + + diff --git a/client/ogClient/clientstructure/root/ReconfigureLocales.sh b/client/ogClient/clientstructure/root/ReconfigureLocales.sh new file mode 100755 index 00000000..5480d141 --- /dev/null +++ b/client/ogClient/clientstructure/root/ReconfigureLocales.sh @@ -0,0 +1,4 @@ +#!/bin/bash +dpkg-reconfigure console-data +dpkg-reconfigure console-setup +dpkg-reconfigure locales \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/generateSshKeysClient.sh b/client/ogClient/clientstructure/root/generateSshKeysClient.sh new file mode 100644 index 00000000..9857ad40 --- /dev/null +++ b/client/ogClient/clientstructure/root/generateSshKeysClient.sh @@ -0,0 +1,23 @@ +#!/bin/bash +echo "comprobando directorio .ssh del root" +if [ ! -d /root/.ssh ] +then + echo "creando directorio .ssh 600" + mkdir -p /root/.ssh + chmod 700 /root/.ssh +fi + + +echo "comprobando el fichero authorized_keys .ssh del root" +if [ ! -f /root/.ssh/authorized_keys ] +then + echo "creando el fichero authorized_keys" + touch /root/.ssh/authorized_keys + chmod 600 /root/.ssh/authorized_keys +fi + +ssh-keygen -q -f /root/.ssh/id_rsa -N "" +cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys + +## TODO: exportamos la publica a los repos +cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/importSshKeys.sh b/client/ogClient/clientstructure/root/importSshKeys.sh new file mode 100755 index 00000000..17a797f8 --- /dev/null +++ b/client/ogClient/clientstructure/root/importSshKeys.sh @@ -0,0 +1,17 @@ +#!/bin/bash +echo "comprobando directorio .ssh del root" +if [ ! -d /root/.ssh ] +then + echo "creando directorio .ssh 600" + mkdir -p /root/.ssh + chmod 700 /root/.ssh +fi +echo "creando el fichero authorized_keys" +touch /root/.ssh/authorized_keys +chmod 600 /root/.ssh/authorized_keys + +echo "importando la clave publica del servidor OG" +cat /tmp/id_rsa.pub + +[ -f /tmp/id_rsa.pub ] && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys || echo "no key publica og" + \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/qemu.sh b/client/ogClient/clientstructure/root/qemu.sh new file mode 100755 index 00000000..c5a93cd9 --- /dev/null +++ b/client/ogClient/clientstructure/root/qemu.sh @@ -0,0 +1,9 @@ +#/bin/bash + +mount -o rw,remount / +mount proc /proc -t proc +export PATH=$PATH dpkg -i *.deb +modprobe 8139too +modprobe 8139cp +dhclient +/etc/init.d/ssh restart \ No newline at end of file diff --git a/client/ogClient/clientstructure/var/lib/locales/supported.d/local b/client/ogClient/clientstructure/var/lib/locales/supported.d/local new file mode 100644 index 00000000..be3f2a41 --- /dev/null +++ b/client/ogClient/clientstructure/var/lib/locales/supported.d/local @@ -0,0 +1,5 @@ +es_ES ISO-8859-1 +es_ES@euro ISO-8859-15 +es_ES.UTF-8 UTF-8 +es_ES.UTF-8@euro UTF-8 +en_US.UTF-8 UTF-8 \ No newline at end of file diff --git a/client/ogClient/kernelParameterOG.es.txt b/client/ogClient/kernelParameterOG.es.txt new file mode 100644 index 00000000..890652b4 --- /dev/null +++ b/client/ogClient/kernelParameterOG.es.txt @@ -0,0 +1,29 @@ + +KERNEL ogclient/ogvmlinuz +initrd=ogclient/oginitrd.img + + + boot=oginit + + oginit=init|/bin/bash + + + ogrepo=ip del repositorio + + og2nd=sqfs|img + ogprotocol=smb|nfs + ogactiveadmin=true|false + ogdebug=true|false + + vga=788 + irqpoll + acpi=on + + +FIXME: en la version actual +repo=iprepoman +IP + +TODO: en la proxima version +ogrepo +ip \ No newline at end of file diff --git a/client/ogClient/ogClientGeneratorV2.sh b/client/ogClient/ogClientGeneratorV2.sh new file mode 100755 index 00000000..21449267 --- /dev/null +++ b/client/ogClient/ogClientGeneratorV2.sh @@ -0,0 +1,166 @@ +#!/bin/bash +#@file ogClientGenerator.sh +#@brief Script generación del cliente OpenGnSys +#@warning +#@version 0.9 - +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + + +#$1 OSCONENAME lucid karmic +#if [ $# -ne 1 ]; then +# echo ": invalid number of parameters" +# echo " host | lucid | karmic | jaunty | lenny | squeeze " +# exit 1 +#fi +TYPECLIENT=host + +# Solo ejecutable por usuario root +if [ "$(whoami)" != 'root' ] +then + echo "ERROR: this program must run under root privileges!!" + exit 1 +fi + + + +#FIXME: variables del instalador oficial. +WORKDIR=/tmp/opengnsys_installer +INSTALL_TARGET=/opt/opengnsys +LOG_FILE=/tmp/opengnsys_installation.log +PROGRAMDIR=$(readlink -e $(dirname "$0")) + + +#funciones especificas del cliente. +source $PROGRAMDIR/ogClientManager.lib +#funciones incluidas dentro del scritps general de instalacion. +source $PROGRAMDIR/ogInstaller.lib + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" +########################################################################## +## FASE 1 - Instalación de software adicional. +##TO DO Integrar en el instaldor. Actualizar repositorios +# Datos para la generación del cliente. +DEPENDENCIES=( debootstrap subversion schroot squashfs-tools) +apt-get update +# Instalación de dependencias (paquetes de sistema operativo). +declare -a notinstalled +checkDependencies DEPENDENCIES notinstalled +if [ $? -ne 0 ]; then + installDependencies notinstalled + if [ $? -ne 0 ]; then + echoAndLog "Error while installing some dependeces, please verify your server installation before continue" + exit 1 + fi +fi +############## FIN DEL TO DO +############################################## FIN FASE 1 + + + + + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + +############## FASE 2 - Asignación de variables +#obtenemos las variables necesarias. +ogClientVar +#obtenemos la información del host. +ogClientOsInfo +######################## FIN fase 2 + +############# FASE 3: Segundo Sistema archivos (img) Creación. +#TODO comprobacion de que el fichero esta creado. +file $OGCLIENTFILE | grep "partition 1: ID=0x83" +if [ $? == 1 ] +then + ##3.1 creación y formateo del disco virtual. generamos el dispositivo loop. + ogClient2ndFile || exit 1 +fi + + +#3.2 generamos el Sistema de archivos con debootstrap +# Comprobamos que ya tenemos alguno. +schroot -p -c IMGogclient -- touch /tmp/ogclientOK +if [ -f /tmp/ogclientOK ] +then + rm /tmp/ogclientOK +else + ogClient2ndFs $TYPECLIENT || exit +fi + + +############### FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot +cat /etc/schroot/schroot.conf | grep ogclient || ogClientSchrootConf + + +############### FASE 5: Configuración del Segundo Sistema de archivos (img) con la estructura especial de OpenGnsys +ogClient2ndSVN $TYPECLIENT || exit + + + + +############# FASE6: Ejecutamos los scripts de personalización del 2º sistema de archivos (img) desde la jaula schroot +### 6.1 instalacion de software con apt-get +schroot -p -c IMGogclient -- /root/InstallSoftware.sh +echo "saltando" + if [ $? -ne 0 ]; then + errorAndLog "Instalando sofware adicional OG : ERROR" + exit +else + echoAndLog "Instalando sofware adicional OG: OK" +fi +#### 6.2 compilación de software. +cd / +schroot -p -c IMGogclient -- /root/CompileSoftware.sh +cd - + +### 6.3 configuracion hostname passroot securety +cd / +schroot -c IMGogclient -- /root/ConfFS.sh +cd - +#schroot -c IMGogclient -- echo -ne "og1\nog1\n" | passwd root +# schroot -c IMGogclient -- passwd root | echo "root" + + +### 6.4 incorporamos la clave publica del servidor +cd / +ssh-keygen -q -f /root/.ssh/id_rsa -N "" +cp /root/.ssh/id_rsa.pub /tmp +schroot -p -c IMGogclient -- /root/importSshKeys.sh +cd - +############ y la del propio cliente. +schroot -c IMGogclient -- /root/generateSshKeysClient.sh + +## configuramos los locales. +schroot -c IMGogclient -- /root/ReconfigureLocales.sh + + +################## FIN fase 6. Fin de comfiguración del segundo sistema de archivos (img) + +################## FASE 7. Generamos el 1er sistema de archivos. INITRD +#nota el parametro es el "tipo" de linux generado en debootstrap. usar solo "host", es decir version,kernel ... del propio host +#nota: hace un schroot, al 2fs (img), ejecuta el fichero generateinitrd. +#nota: deja en el directorio tmp del host el nuevo initrd, y lo copia al tftpboot +ogClientInitrd $TYPECLIENT + + +################## FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) +# generamos el 2sistema de archivos en squashfs +ogClient2ndSqfs +################## FIN FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) + + +##################### FASE 9. algunos detallas del pxe +#dejamos ficheros de ejemplo para el pxe y el nfs +ogClientConfpxe +##################### FIN FASE 9. algunos detallas del pxe + + +# Mostrar sumario de la instalación e instrucciones de post-instalación. +installationSummary + +echoAndLog "OpenGnSys installation finished at $(date)" \ No newline at end of file diff --git a/client/ogClient/ogClientManager.lib b/client/ogClient/ogClientManager.lib new file mode 100644 index 00000000..b19afefe --- /dev/null +++ b/client/ogClient/ogClientManager.lib @@ -0,0 +1,608 @@ + +ogClientVar() +{ +export SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/installer/ogClient +export SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared +export SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine + +export OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ +export OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img +export OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount +# tamaño maximo limitado por schroot 2GB +export OGCLIENTSIZEMB=1900 +#export OGCLIENTSIZEMB=1000 +# export OGCLIENTSIZEKB=500 +export OGCLIENTLABEL=ogClient +#export OGLIB=/opt/opengnsys/client/lib +} + + + +function ogClientOsInfo () +{ +#TODO según host, un OSHHTP u otro OSARCH + #1 OSCODENAME jaunty|karmic|lucid + #devuelve OSDISTRIB(ubuntu,debian),OSCODENAME(lucid,karmic,squeeze):OGRELEASE:httpAPT + case $1 in + host | HOST) + export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') + export OSRELEASE=$(uname -a | awk '{print $3}') + uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + ;; + jaunty|JAUNTY) + export OSDISTRIB=ubuntu + export OSCODENAME=jaunty + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + ;; + lenny|LENNY) + export OSDISTRIB=debian + export OSCODENAME=lenny + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + squeeze|SQUEEZE) + export OSDISTRIB=debian + export OSCODENAME=squeeze + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + karmic|KARMIC) + export OSDISTRIB=ubuntu + export OSCODENAME=karmic + export OSRELEASE="2.6.31-14-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + lucid|LUCID) + export OSDISTRIB=ubuntu + export OSCODENAME=lucid + export OSRELEASE="2.6.32-21-generic-pae" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + *) + return 1 + ;; + esac + echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP +} + +#creación y formateo del disco virtual. +ogClient2ndFile () +{ +local RERROR DISKLOOP PARTLOOP #return code error +echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $OGCLIENTSIZEMB MB " +#Desmontamos por si acaso el dispositivo virtual +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $OGCLIENTMOUNT" +mkdir -p $OGCLIENTMOUNT +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Creando directorio $OGCLIENTMOUNT : ERROR" + return 1 +fi +echo "$FUNCNAME(): Creando el disco virtual que almacenará el FS del cliente $OGCLIENTSIZEMB MB de datos físicos" +dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB +#qemu-img create $OGCLIENTFILE 3G +#dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Creando el disco virtual: ERROR" + return 1 +fi + +DISKLOOP=$(losetup -f) +losetup $DISKLOOP $OGCLIENTFILE +echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria" +echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP +#echo $? +# da error, porque no puede actualizar el kernel. +#if [ $? -ne 0 ] +#then +# errorAndLog "$FUNCNAME(): Particionando el disco virutal: ERROR" +# return 1 +#fi + +echoAndLog "$FUNCNAME(): Desmontando $DISKLOOP despues del particionado " +losetup -d $DISKLOOP + +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR" + return 1 +fi + + +#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 +#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 +PARTLOOP=$(losetup -f) +echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP" +losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext3 -b 4096 -L $OGCLIENTLABEL $PARTLOOP +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR" + return 1 +fi +echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo " +losetup -d $PARTLOOP +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR" + return 1 +else + echoAndLog "$FUNCNAME(): $OGCLIENTFILE $OGCLIENTSIZEMB MB : OK" +fi +} + + + + + +ogClient2ndFs () +{ +ogClientOsInfo $1 +echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos " +#Montamos el dispositivo virtual en su punto de montaje. +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + +mount | grep $OGCLIENTMOUNT && echoAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 : FAILURE " + +#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} +debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} + + +if [ $? -ne 0 ]; then + errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP + : ha fallado!" + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + return 1 +else + echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP + : ok" + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + return 0 +fi + sleep 5 + +##preubas revisar OSRELEASE +#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +} + + + + +########## configura el segundo sistema de archivos +########### parametro: "host" +function ogClient2ndSVN() +{ +ogClientOsInfo $1 +#1 la salida de ogClientOsInfo +local LERROR +LERROR=TRUE +echoAndLog "$FUNCNAME: Iniciando la personalización con datos del SVN " +# comprobar que está montado $OGCLIENTMOUNT +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + +# parseamos del apt.source +sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Parseando el apt.sources sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list + : ERROR" + return 1 +fi + +#parseamos el scripts de generación del initrd. +sed -e "s/OSRELEASE/$OSRELEASE/g" ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.sh +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Parseando el /root/GenerateInitrd.sh: ERROR" + return 1 +fi + +#damos permiso al directorio de scripts +chmod 775 ${SVNCLIENTDIR}/clientstructure/root/* + +# los copiamos +cp -prv ${SVNCLIENTDIR}/clientstructure/* $OGCLIENTMOUNT +mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/ +cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/ +cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/ + +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): copiando los datos del svn a $OGCLIENTMOUNT: ERROR" + return 1 +fi + +# copiamos algunas cosas del nfsexport + +# A ####################### para el browser +mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/ + +cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts +cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts +cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/fonts + +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Linking fonts for browser1 $OGLIB : ERROR" + return 1 +fi + +# B ######################################################## +cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Coping pci.ids : ERROR" + return 1 +fi + +cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Coping browser : ERROR" + return 1 +fi + +cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Coping ogAdmClient : ERROR" + return 1 +else + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + echoAndLog "$FUNCNAME: Finalizado: OK " + return 0 +fi +} + + +ogClientSchrootConf() +{ +echoAndLog "$FUNCNAME: Iniciando la configuración del schroot " +cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` +cat << EOF > /etc/schroot/schroot.conf +[IMGogclient] +type=loopback +file=/var/lib/tftpboot/ogclient/ogclient.img +description=ogclient ubuntu luc IMGi +priority=1 +users=root +groups=root +root-groups=root +mount-options=-o offset=32256 +root-users=root +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF +cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime` +cat << EOF > /etc/schroot/mount-defaults +# mount.defaults: static file system information for chroots. +# Note that the mount point will be prefixed by the chroot path +# (CHROOT_PATH) +# +# +proc /proc proc defaults 0 0 +#procbususb /proc/bus/usb usbfs defaults 0 0 +#/dev /dev none rw,bind 0 0 +/dev/pts /dev/pts none rw,bind 0 0 +/dev/shm /dev/shm none rw,bind 0 0 +#/home /home none rw,bind 0 0 +/tmp /tmp none rw,bind 0 0 +EOF + +echoAndLog "$FUNCNAME: Finalizado: OK " +return 0 +} + + + +########### param1 "host" +ogClientInitrd() +{ +ogClientVar +cd / +ogClientOsInfo $1 +schroot -c IMGogclient -- /root/GenerateInitrd.generic.sh +echo "cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR" +cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR +cp /tmp/initrd.img-${OSRELEASE} ${OGCLIENTBASEDIR}/oginitrd.img +cp /tmp/vmlinuz-${OSRELEASE} ${OGCLIENTBASEDIR}/ogvmlinuz +cd - +} + + +ogClient2ndSqfs() +{ +ogClientVar +echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs " +# si ya existe un sqfs lo renombramos +[ -f $OGCLIENTBASEDIR/ogclient.sqfs ] && mv $OGCLIENTBASEDIR/ogclient.sqfs $OGCLIENTBASEDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S` +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 +mksquashfs $OGCLIENTMOUNT $OGCLIENTBASEDIR/ogclient.sqfs +chmod 744 $OGCLIENTBASEDIR/ogclient.sqfs +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +} + + + + +ogClientSshkeys() +{ +echo comprobamos clave rsa en el host REPO OG. +if [ ! -f /root/.ssh/id_rsa.pub ] +then + echo "creando claves rsa" + ssh-keygen -q -f /root/.ssh/id_dsa -t dsa -N "opengnsys" +else + echo "la claves ya estan creadas" +fi +echo "copiamos la clave publica a /tmp" +cp /root/.ssh/id_dsa.pub /tmp + +cat /tmp/id_dsa.pub + +echo "schroot con instrucciones." +schroot -c IMGogclient -- /root/importSshKeys.sh + +echo "limpiando" +rm /tmp/id_dsa.pub + +## copiamos ssh rsa del host al guest como authorized-key2 +##rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +##cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +##mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT +} + + +ogClientConfpxe() +{ +################## DEJAMOS FICHERO DE EJEMPLOS PARA: +#default +cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient +LABEL pxe-${OGRELEASE} +KERNEL ogclient/vmlinuz-$OGRELEASE +APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= +LABEL pxe-2.6.32-21-generic-pae +KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs +LABEL cache +KERNEL grub.exe +APPEND --config-file="find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img" +LABEL net +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae" +LABEL IfNOTcacheGOnet +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot" +#LABEL pxe-2.6.32-21-generic-pae +#KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +#APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=172.17.32.242 +#LABEL grub +#KERNEL grub.exe +#APPEND keeppxe +FIN +#/etc/hosts +echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient +/etc/init.d/nfs-kernel-server restart +##################################################################### +} + + + +############### No usados en el instalador, solo en actualizaciones. +#/** +# ogClientMount [str_program] +#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones +#@return Si no hay parametros: login de acceso. +#@return con un parametro: La salida del programa ejecutado +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## +function ogClientMount () +{ + #TODO comprobar que OGFILE y OGFILEMOUNT existe. + mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc + mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys + mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp + mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev + mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts + + + [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`) + [ $# = 1 ] && chroot $OGCLIENTMOUNT $1 + +} + +#/** +# ogClientUnmount +#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys +#@param +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientUnmount () +{ + cd /tmp + echo "desmontando cliente espere" + sleep 5 + mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount + mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount + mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount + mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount + mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount + mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount + #-d -f -l + +} + + +############################ hasta el final del archivo antiguos +############################# ANTIGUOS +function ogClientGetRelease () +{ + #1 OSCODENAME jaunty|karmic|lucid + case $1 in + jaunty|JAUNTY) + OSCODENAME=jaunty + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + lenny|LENNY) + OSCODENAME=lenny + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + squeeze|SQUEEZE) + OSCODENAME=squeeze + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + karmic|KARMIC) + OSCODENAME=karmic + OGRELEASE="2.6.31-14-generic" + echo $OGRELEASE + ;; + lucid|LUCID) + OSCODENAME=lucid + OGRELEASE="2.6.32-21-generic-pae" + echo $OGRELEASE + ;; + *) + return 1 + ;; + esac + +} + + +#/** +# ogClientGenerator str_versionUbuntu str_release +#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Versión de ubuntu a generar, jaunty karmic +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientGeneratorDebootstrap () +{ + if [ $# != 2 ] + then + echo Debes introducir como argumento1: jaunty karmic lucid + echo Debes introducir como argumento2: la release + echo utiliza como entrada ogClientCheckVersion + return + fi + OSCODENAME=$1 + OGRELEASE=$2 + + # instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema + #apt-get install gdebi-core + #wget $LASTDEBOOTSTRAP + #gdebi -n debootstrap_1.0.20_all.deb + + #Desmontamos por si acaso el dispositivo virtual + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + + #Creamos el directorio donde montaremos el disco virtual + mkdir -p $OGCLIENTMOUNT + + #Creamos el disco virtual con el filesystem del cliente. + dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB + #qemu-img create $OGCLIENTFILE 3G + #dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB + + + #particionamos el disco virtual + losetup /dev/loop0 $OGCLIENTFILE + echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk /dev/loop0 + losetup -d /dev/loop0 + + + #formateamos la particion principal. + losetup -o 32256 /dev/loop1 $OGCLIENTFILE + mkfs.ext3 -b 4096 -L $OGCLIENTLABEL /dev/loop1 + #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 + #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 + losetup -d /dev/loop1 + + #Montamos el dispositivo virtual en su punto de montaje. + mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + + #TODO Comprobar arquitectura + #Iniciamos la creación del sistema en el directorio de clientes. + #echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + debootstrap --include=linux-image-${OGRELEASE},linux-headers-${OGRELEASE} --arch=i386 --components=main,universe $OSCODENAME $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + ##preubas + #debootstrap --include=linux-image-${OGRELEASE} --arch=i386 --variant=minbase $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + #debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + + if [ $? -ne 0 ]; then + errorAndLog "ogClientGeneratorDebootstrap(): ha fallado!" + return 1 + else + echoAndLog "ogClientGeneratorDebootstrap(): ok" + return 0 + fi + sleep 5 + +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTFILE + +cat << EOF > /etc/schroot/schroot.conf +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF +} + + + + + diff --git a/client/ogClient/ogInstaller.lib b/client/ogClient/ogInstaller.lib new file mode 100644 index 00000000..af0f18df --- /dev/null +++ b/client/ogClient/ogInstaller.lib @@ -0,0 +1,958 @@ +#!/bin/bash + + +##################################################################### +####### Algunas funciones útiles de propósito general: +##################################################################### +function getDateTime() +{ + echo `date +%Y%m%d-%H%M%S` +} + +# Escribe a fichero y muestra por pantalla +function echoAndLog() +{ + echo $1 + FECHAHORA=`getDateTime` + echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE +} + +function errorAndLog() +{ + echo "ERROR: $1" + FECHAHORA=`getDateTime` + echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE +} + +# comprueba si el elemento pasado en $2 esta en el array $1 +function isInArray() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + echoAndLog "${FUNCNAME}(): checking if $2 is in $1" + local deps + eval "deps=( \"\${$1[@]}\" )" + elemento=$2 + + local is_in_array=1 + # copia local del array del parametro 1 + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + if [ "${deps[$i]}" = "${elemento}" ]; then + echoAndLog "isInArray(): $elemento found in array" + is_in_array=0 + fi + done + + if [ $is_in_array -ne 0 ]; then + echoAndLog "${FUNCNAME}(): $elemento NOT found in array" + fi + + return $is_in_array + +} + +##################################################################### +####### Funciones de manejo de paquetes Debian +##################################################################### + +function checkPackage() +{ + package=$1 + if [ -z $package ]; then + errorAndLog "checkPackage(): parameter required" + exit 1 + fi + echoAndLog "checkPackage(): checking if package $package exists" + dpkg -s $package | grep Status | grep -qw install &>/dev/null + if [ $? -eq 0 ]; then + echoAndLog "checkPackage(): package $package exists" + return 0 + else + echoAndLog "checkPackage(): package $package doesn't exists" + return 1 + fi +} + +# recibe array con dependencias +# por referencia deja un array con las dependencias no resueltas +# devuelve 1 si hay alguna dependencia no resuelta +function checkDependencies() +{ + if [ $# -ne 2 ]; then + errorAndLog "checkDependencies(): invalid number of parameters" + exit 1 + fi + + echoAndLog "checkDependencies(): checking dependences" + uncompletedeps=0 + + # copia local del array del parametro 1 + local deps + eval "deps=( \"\${$1[@]}\" )" + + declare -a local_notinstalled + + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + checkPackage ${deps[$i]} + if [ $? -ne 0 ]; then + local_notinstalled[$uncompletedeps]=$package + let uncompletedeps=uncompletedeps+1 + fi + done + + # relleno el array especificado en $2 por referencia + for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ )) + do + eval "${2}[$i]=${local_notinstalled[$i]}" + done + + # retorna el numero de paquetes no resueltos + echoAndLog "checkDependencies(): dependencies uncompleted: $uncompletedeps" + return $uncompletedeps +} + +# Recibe un array con las dependencias y lo instala +function installDependencies() +{ + if [ $# -ne 1 ]; then + errorAndLog "installDependencies(): invalid number of parameters" + exit 1 + fi + echoAndLog "installDependencies(): installing uncompleted dependencies" + + # copia local del array del parametro 1 + local deps + eval "deps=( \"\${$1[@]}\" )" + + local string_deps="" + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + string_deps="$string_deps ${deps[$i]}" + done + + if [ -z "${string_deps}" ]; then + errorAndLog "installDependencies(): array of dependeces is empty" + exit 1 + fi + + OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND + export DEBIAN_FRONTEND=noninteractive + + echoAndLog "installDependencies(): now ${string_deps} will be installed" + apt-get -y install --force-yes ${string_deps} + if [ $? -ne 0 ]; then + errorAndLog "installDependencies(): error installing dependencies" + return 1 + fi + + DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND + echoAndLog "installDependencies(): dependencies installed" +} + +# Hace un backup del fichero pasado por parámetro +# deja un -last y uno para el día +function backupFile() +{ + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local fichero=$1 + local fecha=`date +%Y%m%d` + + if [ ! -f $fichero ]; then + errorAndLog "${FUNCNAME}(): file $fichero doesn't exists" + return 1 + fi + + echoAndLog "${FUNCNAME}(): realizando backup de $fichero" + + # realiza una copia de la última configuración como last + cp -p $fichero "${fichero}-LAST" + + # si para el día no hay backup lo hace, sino no + if [ ! -f "${fichero}-${fecha}" ]; then + cp -p $fichero "${fichero}-${fecha}" + fi + + echoAndLog "${FUNCNAME}(): backup realizado" +} + +##################################################################### +####### Funciones para el manejo de bases de datos +##################################################################### + +# This function set password to root +function mysqlSetRootPassword() +{ + if [ $# -ne 1 ]; then + errorAndLog "mysqlSetRootPassword(): invalid number of parameters" + exit 1 + fi + + local root_mysql=$1 + echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server" + /usr/bin/mysqladmin -u root password ${root_mysql} + if [ $? -ne 0 ]; then + errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server" + return 1 + fi + echoAndLog "mysqlSetRootPassword(): root password saved!" + return 0 +} + +# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente +function mysqlGetRootPassword(){ + local pass_mysql + local pass_mysql2 + # Comprobar si MySQL está instalado con la clave de root por defecto. + if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then + echoAndLog "${FUNCNAME}(): Using default mysql root password." + else + stty -echo + echo "Existe un servicio mysql ya instalado" + read -p "Insertar clave de root de Mysql: " pass_mysql + echo "" + read -p "Confirmar clave:" pass_mysql2 + echo "" + stty echo + if [ "$pass_mysql" == "$pass_mysql2" ] ;then + MYSQL_ROOT_PASSWORD=$pass_mysql + echo "La clave es: ${MYSQL_ROOT_PASSWORD}" + return 0 + else + echo "Las claves no coinciden no se configura la clave del servidor de base de datos." + echo "las operaciones con la base de datos daran error" + return 1 + fi + fi +} + +# comprueba si puede conectar con mysql con el usuario root +function mysqlTestConnection() +{ + if [ $# -ne 1 ]; then + errorAndLog "mysqlTestConnection(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + echoAndLog "mysqlTestConnection(): checking connection to mysql..." + echo "" | mysql -uroot -p"${root_password}" + if [ $? -ne 0 ]; then + errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!" + return 1 + else + echoAndLog "mysqlTestConnection(): connection success" + return 0 + fi +} + +# comprueba si la base de datos existe +function mysqlDbExists() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlDbExists(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + echoAndLog "mysqlDbExists(): checking if $database exists..." + echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$" + if [ $? -ne 0 ]; then + echoAndLog "mysqlDbExists():database $database doesn't exists" + return 1 + else + echoAndLog "mysqlDbExists():database $database exists" + return 0 + fi +} + +function mysqlCheckDbIsEmpty() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..." + num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l` + if [ $? -ne 0 ]; then + errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password" + exit 1 + fi + + if [ $num_tablas -eq 0 ]; then + echoAndLog "mysqlCheckDbIsEmpty():database $database is empty" + return 0 + else + echoAndLog "mysqlCheckDbIsEmpty():database $database has tables" + return 1 + fi + +} + + +function mysqlImportSqlFileToDb() +{ + if [ $# -ne 3 ]; then + errorAndLog "${FNCNAME}(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + local sqlfile=$3 + + if [ ! -f $sqlfile ]; then + errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!" + return 1 + fi + + echoAndLog "${FUNCNAME}(): importing sql file to ${database}..." + perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DEFAULTUSER/$OPENGNSYS_DB_DEFAULTUSER/g; s/DEFAULTPASSWD/$OPENGNSYS_DB_DEFAULTPASSWD/g" $sqlfile + mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $sqlfile + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database" + return 1 + fi + echoAndLog "${FUNCNAME}(): file imported to database $database" + return 0 +} + +# Crea la base de datos +function mysqlCreateDb() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + + echoAndLog "${FUNCNAME}(): creating database..." + mysqladmin -u root --password="${root_password}" create $database + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while creating database $database" + return 1 + fi + echoAndLog "${FUNCNAME}(): database $database created" + return 0 +} + + +function mysqlCheckUserExists() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlCheckUserExists(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local userdb=$2 + + echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..." + echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user + if [ $? -ne 0 ]; then + echoAndLog "mysqlCheckUserExists(): user doesn't exists" + return 1 + else + echoAndLog "mysqlCheckUserExists(): user already exists" + return 0 + fi + +} + +# Crea un usuario administrativo para la base de datos +function mysqlCreateAdminUserToDb() +{ + if [ $# -ne 4 ]; then + errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters" + exit 1 + fi + + local root_password=$1 + local database=$2 + local userdb=$3 + local passdb=$4 + + echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}" + + cat > $WORKDIR/create_${database}.sql < ${basetftp}/pxelinux.cfg/default < /dev/null + if [ $? -eq 0 ]; then + echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting" + return 0 + fi + + cadenaexport="${export}" + for parametro in $* + do + if [ $contador -gt 0 ] + then + host=`echo $parametro | awk -F: '{print $1}'` + options=`echo $parametro | awk -F: '{print $2}'` + if [ "${host}" == "" ]; then + errorAndLog "${FUNCNAME}(): host can't be empty" + return 1 + fi + cadenaexport="${cadenaexport}\t${host}" + + if [ "${options}" != "" ]; then + cadenaexport="${cadenaexport}(${options})" + fi + fi + let contador=contador+1 + done + + echo -en "$cadenaexport\n" >> /etc/exports + + echoAndLog "${FUNCNAME}(): add $export to /etc/exports" + + return 0 +} + +######################################################################## +## Configuracion servicio DHCP +######################################################################## + +function dhcpConfigure() +{ + echoAndLog "${FUNCNAME}(): Sample DHCP Configuration." + + backupFile /etc/dhcp3/dhcpd.conf + + sed -e "s/SERVERIP/$SERVERIP/g" \ + -e "s/NETIP/$NETIP/g" \ + -e "s/NETMASK/$NETMASK/g" \ + -e "s/NETBROAD/$NETBROAD/g" \ + -e "s/ROUTERIP/$ROUTERIP/g" \ + -e "s/DNSIP/$DNSIP/g" \ + $WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while configuring dhcp server" + return 1 + fi + + /etc/init.d/dhcp3-server restart + echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"." + return 0 +} + + +##################################################################### +####### Funciones específicas de la instalación de Opengnsys +##################################################################### + +# Copiar ficheros del OpenGnSys Web Console. +function installWebFiles() +{ + echoAndLog "${FUNCNAME}(): Installing web files..." + cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para doxigen + if [ $? != 0 ]; then + errorAndLog "${FUNCNAME}(): Error copying web files." + exit 1 + fi + find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null + # Cambiar permisos para ficheros especiales. + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \ + $INSTALL_TARGET/www/includes \ + $INSTALL_TARGET/www/comandos/gestores/filescripts \ + $INSTALL_TARGET/www/images/iconos + echoAndLog "${FUNCNAME}(): Web files installed successfully." +} + +# Configuración específica de Apache. +function openGnsysInstallWebConsoleApacheConf() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + local path_apache2_confd=$2 + local path_web_console=${path_opengnsys_base}/www + + if [ ! -d $path_apache2_confd ]; then + errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation" + return 1 + fi + + mkdir -p $path_apache2_confd/{sites-available,sites-enabled} + + echoAndLog "${FUNCNAME}(): creating apache2 config file.." + + + # genera configuración + cat > $path_opengnsys_base/etc/apache.conf < + Options -Indexes FollowSymLinks + DirectoryIndex acceso.php + +EOF + + ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf + ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation" + return 1 + else + echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon" + /etc/init.d/apache2 restart + return 0 + fi +} + +# Crear documentación Doxygen para la consola web. +function makeDoxygenFiles() +{ + echoAndLog "${FUNCNAME}(): Making Doxygen web files..." + $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \ + $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www + if [ ! -d "$INSTALL_TARGET/www/html" ]; then + errorAndLog "${FUNCNAME}(): unable to create Doxygen web files." + return 1 + fi + mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api" + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api + echoAndLog "${FUNCNAME}(): Doxygen web files created successfully." +} + + +# Crea la estructura base de la instalación de opengnsys +function openGnsysInstallCreateDirs() +{ + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + + echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base" + + mkdir -p $path_opengnsys_base + mkdir -p $path_opengnsys_base/admin/{autoexec,comandos,menus,usuarios} + mkdir -p $path_opengnsys_base/bin + mkdir -p $path_opengnsys_base/client + mkdir -p $path_opengnsys_base/doc + mkdir -p $path_opengnsys_base/etc + mkdir -p $path_opengnsys_base/lib + mkdir -p $path_opengnsys_base/log/clients + mkdir -p $path_opengnsys_base/sbin + mkdir -p $path_opengnsys_base/www + mkdir -p $path_opengnsys_base/images + ln -fs /var/lib/tftpboot $path_opengnsys_base + ln -fs $path_opengnsys_base/log /var/log/opengnsys + + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" + return 1 + fi + + echoAndLog "${FUNCNAME}(): directory paths created" + return 0 +} + +# Copia ficheros de configuración y ejecutables genéricos del servidor. +function openGnsysCopyServerFiles () { + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + + local SOURCES=( client/boot/initrd-generator \ + client/boot/upgrade-clients-udeb.sh \ + client/boot/udeblist.conf \ + client/boot/udeblist-jaunty.conf \ + client/boot/udeblist-karmic.conf \ + client/boot/udeblist-lucid.conf \ + server/PXE/pxelinux.cfg/default \ + doc ) + local TARGETS=( bin/initrd-generator \ + bin/upgrade-clients-udeb.sh \ + etc/udeblist.conf \ + etc/udeblist-jaunty.conf \ + etc/udeblist-karmic.conf \ + etc/udeblist-lucid.conf \ + tftpboot/pxelinux.cfg/default \ + doc ) + + if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then + errorAndLog "${FUNCNAME}(): inconsistent number of array items" + exit 1 + fi + + echoAndLog "${FUNCNAME}(): copying files to server directories" + + pushd $WORKDIR/opengnsys + local i + for (( i = 0; i < ${#SOURCES[@]}; i++ )); do + if [ -f "${SOURCES[$i]}" ]; then + echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + cp -p "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}" + elif [ -d "${SOURCES[$i]}" ]; then + echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}" + else + echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + fi + done + popd +} + +#################################################################### +### Funciones de compilación de códifo fuente de servicios +#################################################################### + +# Compilar los servicios de OpenGNsys +function servicesCompilation () +{ + local hayErrores=0 + + # Compilar OpenGnSys Server + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmServer + make && make install + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Repository Manager + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmRepo + make && make install + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Client + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient + make && mv ogAdmClient ../../../client/nfsexport/bin + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client" + hayErrores=1 + fi + popd + + return $hayErrores +} + + +#################################################################### +### Funciones instalacion cliente opengnsys +#################################################################### + +function openGnsysClientCreate() +{ + local OSDISTRIB OSCODENAME + + local hayErrores=0 + + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." + cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client + find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." + mkdir -p $INSTALL_TARGET/client/lib/engine/bin + cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while copying engine files" + hayErrores=1 + fi + + # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). + OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then + echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME." + $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME" + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" + hayErrores=1 + fi + echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME." + $INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME" + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" + hayErrores=1 + fi + else + echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files." + $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/ + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" + hayErrores=1 + fi + echoAndLog "${FUNCNAME}(): Loading default udeb files." + $INSTALL_TARGET/bin/upgrade-clients-udeb.sh + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" + hayErrores=1 + fi + fi + + if [ $hayErrores -eq 0 ]; then + echoAndLog "${FUNCNAME}(): Client generation success." + else + errorAndLog "${FUNCNAME}(): Client generation with errors" + fi + + return $hayErrores +} + + +# Configuración básica de servicios de OpenGnSys +function openGnsysConfigure() +{ + echoAndLog "openGnsysConfigure(): Copying init files." + cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys + cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.default /etc/default/opengnsys + update-rc.d opengnsys defaults + echoAndLog "openGnsysConfigure(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"." + perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmServer.cfg + perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg + echoAndLog "${FUNCNAME}(): Creating Web Console config file" + OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys" + perl -pi -e "s/SERVERIP/$SERVERIP/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php + sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Services/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg + echoAndLog "openGnsysConfiguration(): Starting OpenGnSys services." + /etc/init.d/opengnsys start +} + + +##################################################################### +####### Función de resumen informativo de la instalación +##################################################################### + +function installationSummary(){ + echo + echoAndLog "OpenGnSys Installation Summary" + echo "==============================" + echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)" + echoAndLog "Installation directory: $INSTALL_TARGET" + echoAndLog "Repository directory: $INSTALL_TARGET/images" + echoAndLog "TFTP configuracion directory: /var/lib/tftpboot" + echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf" + echoAndLog "NFS configuracion file: /etc/exports" + echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" + echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER" + echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD" + echoAndLog "Web Console default user: $OPENGNSYS_DB_DEFAULTUSER" + echoAndLog "Web Console default password: $OPENGNSYS_DB_DEFAULTPASSWD" + echo + echoAndLog "Post-Installation Instructions:" + echo "===============================" + echoAndLog "Review or edit all configuration files." + echoAndLog "Insert DHCP configuration data and restart service." + echoAndLog "Log-in as Web Console admin user." + echoAndLog " - Review default Organization data and default user." + echoAndLog "Log-in as Web Console organization user." + echoAndLog " - Insert OpenGnSys data (rooms, computers, etc)." +echo +} + diff --git a/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib b/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib new file mode 100755 index 00000000..14806b7e --- /dev/null +++ b/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib @@ -0,0 +1,77 @@ +#!/bin/bash +#/** +#@file Net.lib +#@brief Librería o clase Net +#@class Net +#@brief Funciones básicas de red. +#@version 1.0 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogGetHostname +#@brief Muestra el nombre del cliente. +#@return str_host - nombre de máquina +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetHostname () +{ +local HOST NETFILE +# Tomar nombre de la variable HOSTNAME +HOST="$HOSTNAME" + +# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) +[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} + END {print host} + ' /var/lib/dhcp3/dhclient.leases) +# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ +[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} + $1~/hostname/ {print $2}' /proc/cmdline) + +[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" +echo $HOST +} + + +#/** +# ogGetIpAddress +#@brief Muestra la dirección IP del sistema +#@return str_ip - Dirección IP +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetIpAddress () +{ +local IP +#Version og2ndFS +NETFILE="/tmp/net-eth0.conf" +[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) + +# Obtener direcciones IP. /* (comentario para Doxygen) +[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') +# Mostrar sólo la primera. (comentario para Doxygen) */ +echo ${IP%% *} +} + + +#/** +# ogGetMacAddress +#@brief Muestra la dirección Ethernet del cliente. +#@return str_ether - Dirección Ethernet +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetMacAddress () +{ +local MAC +# Obtener direcciones Ethernet. +MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') +# Mostrar sólo la primera. +echo ${MAC%% *} +} + diff --git a/client/ogClient/old/ModificacionesNecesiariasENGINE/readme b/client/ogClient/old/ModificacionesNecesiariasENGINE/readme new file mode 100644 index 00000000..9078de1b --- /dev/null +++ b/client/ogClient/old/ModificacionesNecesiariasENGINE/readme @@ -0,0 +1,27 @@ +Moverse al etc del cliente. +cd /opt/opengnsys/client/etc + +preinit/default + modificamos el sha-bang a /bin/bash + eliminamos enlace del bash + Ejecute solo el loadmodules del for + +preinit/loaenviron + comentamos el LD_PATH + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/opt/drbl/sbin + + +dejar en bin solo el browser y el ogadmcliente + +/var/lib/tftboot/pxelinux.cfg/default +DEFAULT pxe2 +LABEL pxe +KERNEL linux +APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin +LABEL pxe2 +KERNEL vmlinuz-2.6.32-21-generic-pae +APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 + + +parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN +temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/ogClient/old/Net.lib b/client/ogClient/old/Net.lib new file mode 100755 index 00000000..14806b7e --- /dev/null +++ b/client/ogClient/old/Net.lib @@ -0,0 +1,77 @@ +#!/bin/bash +#/** +#@file Net.lib +#@brief Librería o clase Net +#@class Net +#@brief Funciones básicas de red. +#@version 1.0 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogGetHostname +#@brief Muestra el nombre del cliente. +#@return str_host - nombre de máquina +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetHostname () +{ +local HOST NETFILE +# Tomar nombre de la variable HOSTNAME +HOST="$HOSTNAME" + +# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) +[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} + END {print host} + ' /var/lib/dhcp3/dhclient.leases) +# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ +[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} + $1~/hostname/ {print $2}' /proc/cmdline) + +[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" +echo $HOST +} + + +#/** +# ogGetIpAddress +#@brief Muestra la dirección IP del sistema +#@return str_ip - Dirección IP +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetIpAddress () +{ +local IP +#Version og2ndFS +NETFILE="/tmp/net-eth0.conf" +[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) + +# Obtener direcciones IP. /* (comentario para Doxygen) +[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') +# Mostrar sólo la primera. (comentario para Doxygen) */ +echo ${IP%% *} +} + + +#/** +# ogGetMacAddress +#@brief Muestra la dirección Ethernet del cliente. +#@return str_ether - Dirección Ethernet +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetMacAddress () +{ +local MAC +# Obtener direcciones Ethernet. +MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') +# Mostrar sólo la primera. +echo ${MAC%% *} +} + diff --git a/client/ogClient/old/boot/default.sh b/client/ogClient/old/boot/default.sh new file mode 100755 index 00000000..e8c5b5d2 --- /dev/null +++ b/client/ogClient/old/boot/default.sh @@ -0,0 +1,23 @@ +#!/opt/opengnsys/bin/bash + +set -a + +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} +#### FIXME EN PRUEBAS +OGLOGFILE=/var/log/opengnsys.log + +/opt/opengnsys/etc/init/load2fs.sh +source /opt/opengnsys/etc/preinit/loadenviron.sh +export PATH=/opt/og2fs/bin:$PATH +export PATH=/opt/og2fs/sbin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + echo "$MSG_LAUNCHCLIENT" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE +fi + +bash +# FIXME Arranque Browser +#browser -qws $OGSTARTPAGE diff --git a/client/ogClient/old/boot/load2fs.sh b/client/ogClient/old/boot/load2fs.sh new file mode 100644 index 00000000..ca3e3be7 --- /dev/null +++ b/client/ogClient/old/boot/load2fs.sh @@ -0,0 +1,19 @@ +#!/bin/bash +#/** +#@file load2fs.sh +#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Antonio J. Doblas Viso, Unviersidad de Malaga. +#@date 2010-02-15 +#*/ +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro +cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +export PATH=/opt/og2fs/sbin:$PATH +export PATH=/opt/og2fs/bin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/ogClient/old/conframfs.sh b/client/ogClient/old/conframfs.sh new file mode 100644 index 00000000..851928d5 --- /dev/null +++ b/client/ogClient/old/conframfs.sh @@ -0,0 +1,34 @@ +#!/bin/bash +#/** +#@file conframfs.sh +#@brief Script de inicio para configurar el 2º FileSystem linkado. +#@version 1.0 +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2010-06-02 +#*/ +#sustituido por la funcion ogPostConfigureFS + +MSG_LOADMODULES=${MSG_CONFRAMFS:-"."} +echo "$MSG_CONFRAMFS" + +# configuramos el /etc/hostname. +HOSTNAME=$(ogGetHostname) +echo $HOSTNAME > /etc/hostname + + +#configuramos el /etc/hosts +IP=$(ogGetIpAddress) +echo "127.0.0.1 localhost" > /etc/hosts +echo "$IP $HOSTNAME" >> /etc/hosts + +### conft net +echo "auto lo " > /etc/network/interfaces +echo "iface lo inet loopback" >> /etc/network/interfaces + + +mkdir -p /var/run/network +cd /var/run/network +touch ifstate + +/etc/init.d/networking restart +ifup lo diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox new file mode 100755 index 00000000..da2dc637 Binary files /dev/null and b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox new file mode 100755 index 00000000..d04890f6 Binary files /dev/null and b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root new file mode 100755 index 00000000..aecb5e32 Binary files /dev/null and b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions new file mode 100644 index 00000000..2610f79a --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions @@ -0,0 +1,461 @@ +# -*- shell-script -*- + +catenate_cpiogz() { + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 + return + fi + + cat "${1}" >>"${__TMPCPIOGZ}" +} + +force_load() +{ + manual_add_modules ${@} + echo "${@}" >>"${DESTDIR}/conf/modules" +} + +# Takes a file containing a list of modules to be added as an +# argument, figures out dependancies, and adds them. +# +# Input file syntax: +# +# # comment +# modprobe_module_name [args ...] +# [...] +# +add_modules_from_file() +{ + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 + return + fi + + sed -e '/^#/d' ${1} | while read module rest; do + force_load "${module}" "${rest}" + done +} + +# Is this module available? +have_module() +{ + modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" >/dev/null 2>&1 +} + +# Add dependent modules + eventual firmware +manual_add_modules() +{ + local mam_x firmwares firmware + + for mam_x in $(modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do + # Prune duplicates + if [ -e "${DESTDIR}/${mam_x}" ]; then + continue + fi + + mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" + ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" + if [ "${verbose}" = "y" ]; then + echo "Adding module ${mam_x}" + fi + + # Add firmware files if necessary + firmwares=$(modinfo -F firmware "${mam_x}") + if [ -z "${firmwares}" ]; then + continue + fi + for firmware in $firmwares; do + if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ + || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then + continue + fi + + # Only print warning for missing fw of loaded module + # or forced loaded module + if [ ! -e "/lib/firmware/${firmware}" ] \ + && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then + if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ + /proc/modules \ + || grep -q "^$(basename "${mam_x}" .ko)" \ + "${CONFDIR}/modules"; then + echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 + fi + continue + fi + + if [ -e "/lib/firmware/${version}/${firmware}" ]; then + copy_exec "/lib/firmware/${version}/${firmware}" + else + copy_exec "/lib/firmware/${firmware}" + fi + if [ "${verbose}" = "y" ]; then + echo "Adding firmware ${firmware}" + fi + done + done +} + +# $1 is the source path (e.g. /usr/bin/time) +# $2 is the relative destination (e.g. /usr or /usr/time) +# +# The destination is interpreted in the same way "cp" would, meaning +# (assuming /bin is a directory): +# +# "copy_exec /usr/bin/time /bin" -> /bin/time +# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime +# +# If $2 is left out, the same destination path as for the source arg will +# be used and directories will be created as needed, so: +# +# "copy_exec /usr/bin/time" -> /usr/bin/time +# +copy_exec() { + local source target destination final_destination x nonoptlib + local libname dirname + + source="${1}" + if [ -n "${2}" ]; then + target="${2}" + else + if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then + mkdir -p "${DESTDIR}/$(dirname "${1}")" + fi + target="${1}" + fi + + if [ -d "${DESTDIR}/${target}" ]; then + destination="${target}/$(basename "${source}")" + else + destination="${target}" + fi + final_destination="${DESTDIR}/${destination}" + + if [ -L "$final_destination" ]; then + if [ $(readlink "${final_destination}") != "${source}" ]; then + echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 + return + fi + else + ln -s ${source} ${DESTDIR}/${destination} + if [ "${verbose}" = "y" ]; then + echo "Adding binary ${source}" + fi + fi + + # Copy the dependant libraries + for x in $(ldd ${source} 2>/dev/null | sed -e ' + /\//!d; + /linux-gate/d; + /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; + s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do + + # Try to use non-optimised libraries where possible. + # We assume that all HWCAP libraries will be in tls, + # sse2, vfp or neon + nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') + + if [ -e "${nonoptlib}" ]; then + x="${nonoptlib}" + fi + + libname=$(basename "${x}") + dirname=$(dirname "${x}") + + mkdir -p "${DESTDIR}/${dirname}" + if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then + ln -s "${x}" "${DESTDIR}/${dirname}" + if [ "${verbose}" = "y" ]; then + echo "Adding library ${x}" + fi + fi + done +} + +# Copy entire subtrees to the initramfs +copy_modules_dir() +{ + local x_mod + + if ! [ -d "${MODULESDIR}/${1}" ]; then + return; + fi + if [ "${verbose}" = "y" ]; then + echo "Copying module directory ${1}" + fi + for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do + manual_add_modules $(basename ${x_mod} .ko) + done +} + +# walk /sys for relevant modules +sys_walk_mod_add() +{ + local driver_path module + device_path="$1" + + while [ "${device_path}" != "/sys" ]; do + driver_path="$(readlink -f ${device_path}/driver)" + if [ -e "$driver_path" ]; then + module="$(basename $(readlink -f $driver_path))" + if [ -n "${module}" ]; then + force_load "${module}" + fi + fi + device_path="$(dirname ${device_path})" + done +} + +# walk /sys for relevant modalias +sys_walk_modalias() +{ + local device_path modalias + + device_path="$(dirname "${1}")" + device_path="$(dirname "${device_path}")" + if [ -e "${device_path}/modalias" ]; then + modalias=$(cat "${device_path}/modalias") + fi + + if [ -n "${modalias}" ]; then + force_load "${modalias}" + fi +} + +# find and only copy root relevant modules +dep_add_modules() +{ + local block minor root FSTYPE root_dev_path x + + # findout root block device + fstype + eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" + if [ "${root}" = "/dev/root" ] ; then + root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null + fi + root="$(readlink -f ${root})" + + # find out real rootfs on auto type + if [ "${FSTYPE}" = "auto" ]; then + eval "$(/usr/lib/klibc/bin/fstype ${root})" + fi + + # check that fstype rootfs recognition + if [ "${FSTYPE}" = "unknown" ]; then + echo "mkinitramfs: unknown fstype on root ${root}" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report bug on initramfs-tools" + exit 1 + fi + + # Add rootfs + manual_add_modules "${FSTYPE}" + + # lvm luks root + if [ "${root#/dev/mapper/}" != "${root}" ]; then + minor=$((0x$(stat --format "%T" ${root}) % 256)) + block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) + if [ "${block#dm-}" != "${block}" ]; then + block=$(ls -1 /sys/block/${block}/slaves | head -n 1) + fi + block=${block%%[0-9]*} + # md root new naming scheme /dev/md/X + elif [ "${root#/dev/md/}" != "${root}" ]; then + root=${root#/dev/md/} + block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # md root /dev/mdX + elif [ "${root#/dev/md}" != "${root}" ]; then + root=${root#/dev/} + block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # mmc always uses numbering in the devicename (mmcblk[0-9]) + elif [ "${root#/dev/mmc}" != "${root}" ]; then + block=${root#/dev/} + block=${block%%p[0-9]*} + # classical root device + else + block=${root#/dev/} + block=${block%%[0-9]*} + fi + + # Error out if /sys lack block dev + if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then + echo "mkinitramfs: missing ${block} root ${root} /sys entry" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report the bug" + exit 1 + fi + + # sys walk ATA + root_dev_path=$(readlink -f /sys/block/${block}/device) + sys_walk_mod_add ${root_dev_path} + + # catch old-style IDE + if [ -e /sys/bus/ide/devices/ ]; then + sys_walk_modalias ${root_dev_path} + manual_add_modules ide-disk + manual_add_modules ide-cd + fi + + if [ -e /sys/bus/scsi/devices/ ]; then + manual_add_modules sd_mod + fi + + if [ -e /sys/bus/i2o/devices/ ]; then + force_load i2o_block + force_load i2o_config + fi + + if [ -e /sys/bus/ps3_system_bus/ ]; then + for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do + manual_add_modules "${x}" + done + fi + + if [ -e /sys/bus/vio/ ]; then + for x in sunvnet sunvdc; do + manual_add_modules "${x}" + done + fi +} + + +# The modules "most" classes added per default to the initramfs +auto_add_modules() +{ + case "$1" in + base) + for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ + hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ + hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ + hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ + hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ + ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ + virtio_pci vfat nls_cp437 nls_iso8859-1; do + manual_add_modules "${x}" + done + ;; + net) + for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ + cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ + ep93xx_eth eql fealnx famachi forcedeth gelic_net \ + hp100 igb ipg mace mv643xx_eth myri10ge \ + natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ + r8169 s2io sis900 skge sky2 slhc smc911x starfire \ + sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ + de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ + typhon via-rhine via-velocity virtio_net yellowfin; do + manual_add_modules "${x}" + done + ;; + ide) + copy_modules_dir kernel/drivers/ide + ;; + scsi) + copy_modules_dir kernel/drivers/scsi + for x in mptfc mptsas mptscsih mptspi; do + manual_add_modules "${x}" + done + ;; + ata) + copy_modules_dir kernel/drivers/ata + ;; + block) + copy_modules_dir kernel/drivers/block + copy_modules_dir kernel/drivers/usb/storage + ;; + # FIXME: can be removed after Lenny release + ieee1394) + for x in ohci1394 sbp2; do + manual_add_modules "${x}" + done + ;; + firewire) + for x in firewire-ohci firewire-sbp2; do + manual_add_modules "${x}" + done + ;; + i2o) + for x in i2o_block; do + manual_add_modules "${x}" + done + ;; + dasd) + for x in dasd_eckd_mod dasd_fba_mod; do + manual_add_modules "${x}" + done + ;; + *) + auto_add_modules base + auto_add_modules net + auto_add_modules ide + auto_add_modules scsi + auto_add_modules block + auto_add_modules ata + auto_add_modules i2o + auto_add_modules dasd + auto_add_modules ieee1394 + auto_add_modules firewire + ;; + esac +} + +usage() +{ + cat >&2 << EOF + +Usage: ${0} [OPTION]... <-o outfile> [version] + +Options: + -d confdir Specify an alternative configuration directory. + -k Keep temporary directory used to make the image. + -o outfile Write to outfile. + -r root Override ROOT setting in mkinitrd.conf. + +See mkinitramfs(8) for further details. +EOF + exit 1 + +} + +# minimal supported kernel version +check_minkver() +{ + local curversion initdir DPKG_ARCH minversion cm_x tmp + + curversion="${1}" + initdir="${2}" + if [ -z "${initdir}" ]; then + DPKG_ARCH=$(dpkg --print-architecture) + case ${DPKG_ARCH} in + ia64|hppa) + minversion="2.6.15" + ;; + *) + minversion="2.6.12" + ;; + esac + if dpkg --compare-versions "${curversion}" lt "${minversion}"; then + echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + return 0 + fi + set_initlist + for cm_x in ${initlist}; do + # sed: keep last line starting with MINKVER=, + # remove MINKVER= and trailing space + minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") + if [ -z "${tmp}" ]; then + continue + elif dpkg --compare-versions "${curversion}" lt "${minver}"; then + echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + done +} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache new file mode 100755 index 00000000..37fdd22e --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache @@ -0,0 +1,95 @@ +#!/bin/sh +set -e + +if [ "$1" = prereqs ]; then + exit 0 +fi + +. /usr/share/initramfs-tools/hook-functions + +number= +suffix= +eval $(printf "%s" "$COMPCACHE_SIZE" | \ + sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') + +if [ -z "$number" ] || [ -z "$suffix" ]; then + exit 0 +fi + +if have_module ramzswap; then + name=ramzswap + manual_add_modules ramzswap +elif have_module compcache; then + name=compcache + manual_add_modules compcache +else + exit 0 +fi + +copy_exec /sbin/swapon + +mkdir -p "$DESTDIR"/etc/udev/rules.d +cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." + +# Note that this only becomes /dev on the real filesystem if udev's scripts +# are used; which they will be, but it's worth pointing out +if ! mount -t devtmpfs -o mode=0755 none /dev; then + mount -t tmpfs -o mode=0755 none /dev + mknod -m 0600 /dev/console c 5 1 + mknod /dev/null c 1 3 +fi +mkdir /dev/pts +mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true +> /dev/.initramfs-tools +mkdir /dev/.initramfs + +# Export the dpkg architecture +export DPKG_ARCH= +. /conf/arch.conf + +# Set modprobe env +export MODPROBE_OPTIONS="-qb" + +# Export relevant variables +export ROOT= +export ROOTDELAY= +export ROOTFLAGS= +export ROOTFSTYPE= +export IPOPTS= +export HWADDR= +export break= +export init=/sbin/init +export quiet=n +export readonly=y +export rootmnt=/root +export debug= +export panic= +export blacklist= +export resume_offset= + +# Bring in the main config +. /conf/initramfs.conf +for conf in conf/conf.d/*; do + [ -f ${conf} ] && . ${conf} +done +. /scripts/functions + +# Parse command line options +for x in $(cat /proc/cmdline); do + case $x in + init=*) + init=${x#init=} + ;; + root=*) + ROOT=${x#root=} + case $ROOT in + LABEL=*) + ROOT="${ROOT#LABEL=}" + + # support / in LABEL= paths (escape to \x2f) + case "${ROOT}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" + else + if [ "${ROOT}" != "${ROOT#/}" ]; then + ROOT="\x2f${ROOT#/}" + fi + if [ "${ROOT}" != "${ROOT%/}" ]; then + ROOT="${ROOT%/}\x2f" + fi + IFS='/' + newroot= + for s in $ROOT; do + if [ -z "${newroot}" ]; then + newroot="${s}" + else + newroot="${newroot}\\x2f${s}" + fi + done + unset IFS + ROOT="${newroot}" + fi + esac + ROOT="/dev/disk/by-label/${ROOT}" + ;; + UUID=*) + ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" + ;; + /dev/nfs) + [ -z "${BOOT}" ] && BOOT=nfs + ;; + esac + ;; + rootflags=*) + ROOTFLAGS="-o ${x#rootflags=}" + ;; + rootfstype=*) + ROOTFSTYPE="${x#rootfstype=}" + ;; + rootdelay=*) + ROOTDELAY="${x#rootdelay=}" + case ${ROOTDELAY} in + *[![:digit:].]*) + ROOTDELAY= + ;; + esac + ;; + resumedelay=*) + RESUMEDELAY="${x#resumedelay=}" + ;; + loop=*) + LOOP="${x#loop=}" + ;; + loopflags=*) + LOOPFLAGS="-o ${x#loopflags=}" + ;; + loopfstype=*) + LOOPFSTYPE="${x#loopfstype=}" + ;; + cryptopts=*) + cryptopts="${x#cryptopts=}" + ;; + nfsroot=*) + NFSROOT="${x#nfsroot=}" + ;; + netboot=*) + NETBOOT="${x#netboot=}" + ;; + ip=*) + IPOPTS="${x#ip=}" + ;; + hwaddr=*) + HWADDR="${x#hwaddr=}" + ;; + boot=*) + BOOT=${x#boot=} + ;; + resume=*) + RESUME="${x#resume=}" + ;; + resume_offset=*) + resume_offset="${x#resume_offset=}" + ;; + noresume) + noresume=y + ;; + panic=*) + panic="${x#panic=}" + case ${panic} in + *[![:digit:].]*) + panic= + ;; + esac + ;; + quiet) + quiet=y + ;; + ro) + readonly=y + ;; + rw) + readonly=n + ;; + debug) + debug=y + quiet=n + exec >/dev/.initramfs/initramfs.debug 2>&1 + set -x + ;; + debug=*) + debug=y + quiet=n + set -x + ;; + break=*) + break=${x#break=} + ;; + break) + break=premount + ;; + blacklist=*) + blacklist=${x#blacklist=} + ;; + netconsole=*) + netconsole=${x#netconsole=} + ;; + esac +done + +if [ -z "${noresume}" ]; then + export resume=${RESUME} +else + export noresume +fi + +[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} + +maybe_break top + +# export BOOT variable value for compcache, +# so we know if we run from casper +export BOOT + +# Don't do log messages here to avoid confusing usplash +run_scripts /scripts/init-top + +maybe_break modules +log_begin_msg "Loading essential drivers..." +load_modules +log_end_msg + +maybe_break premount +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" +run_scripts /scripts/init-premount +[ "$quiet" != "y" ] && log_end_msg + +maybe_break mount +log_begin_msg "Mounting root file system..." +. /scripts/${BOOT} +parse_numeric ${ROOT} +mountroot +log_end_msg + +maybe_break bottom +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" +run_scripts /scripts/init-bottom +[ "$quiet" != "y" ] && log_end_msg + +# Move virtual filesystems over to the real filesystem +mount -n -o move /sys ${rootmnt}/sys +mount -n -o move /proc ${rootmnt}/proc + +# Check init bootarg +if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then + echo "Target filesystem doesn't have ${init}." + init= +fi + +# Search for valid init +if [ -z "${init}" ] ; then + for init in /sbin/init /etc/init /bin/init /bin/sh; do + if [ ! -x "${rootmnt}${init}" ]; then + continue + fi + break + done +fi + +# No init on rootmount +if [ ! -x "${rootmnt}${init}" ]; then + panic "No init found. Try passing init= bootarg." +fi + +# Confuses /etc/init.d/rc +if [ -n ${debug} ]; then + unset debug +fi + +# Chain to real filesystem +maybe_break init +exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 +panic "Could not execute run-init." diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules new file mode 100644 index 00000000..9aa46468 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules @@ -0,0 +1,10 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions new file mode 100644 index 00000000..3bea0c97 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions @@ -0,0 +1,420 @@ +# -*- shell-script -*- + +_log_msg() +{ + if [ "$quiet" = "y" ]; then return; fi + echo "$@" +} + +log_success_msg() +{ + _log_msg "Success: $@" +} + +log_failure_msg() +{ + _log_msg "Failure: $@" +} + +log_warning_msg() +{ + _log_msg "Warning: $@" +} + +log_begin_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TEXT $@" + fi + _log_msg "Begin: $@ ..." +} + +log_end_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "SUCCESS ok" + fi + _log_msg "Done." +} + +# Add failure hook +add_mountroot_fail_hook() +{ + mkdir -p /tmp/mountroot-fail-hooks.d + ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" +} + +# Run failure hooks. +# When a failure hook exits "1", it has not done anything to correct the +# system. Exiting "0" means that something has been attempted to resolve +# the lack of a root filesystem. +# Hooks are run in lexigraphical order, and are responsible for removing +# themselves if they should not re-run in a later cycle. When one exits +# "0", the stack is stopped, so the caller can return to the main rootfs +# wait loop. +try_failure_hooks() +{ + local hook + + # Disable usplash so text from hooks can be seen + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + for hook in /tmp/mountroot-fail-hooks.d/*; do + if [ -x ${hook} ] && ${hook} mountfail; then + return 0 + fi + done + return 1 +} + +panic() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + # Disallow console access + if [ -n "${panic}" ]; then + sleep ${panic} + reboot + fi + + modprobe i8042 + modprobe atkbd + + run_scripts /scripts/panic + + echo $@ + PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 +} + +maybe_break() +{ + if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then + panic "Spawning shell within the initramfs" + fi +} + +render() +{ + eval "echo -n \${$@}" +} + +set_initlist() +{ + unset initlist + for si_x in ${initdir}/*; do + # skip empty dirs without warning + [ "${si_x}" = "${initdir}/*" ] && return + + # only allow variable name chars + case ${si_x#${initdir}/} in + *[![:alnum:]_]*) + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not alphanumeric or '_' file" + continue + ;; + esac + + # skip non executable scripts + if [ ! -x ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not executable" + continue + fi + + # skip directories + if [ -d ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: a directory" + continue + fi + + initlist="${initlist} ${si_x#${initdir}/}" + done +} + +reduce_satisfied() +{ + deplist="$(render array_${1})" + unset tmpdeplist + for rs_y in ${deplist}; do + # check if there are alternatives + case ${rs_y} in + *\|*) + OLD_IFS="$IFS" + IFS="|" + for rs_z in ${rs_y}; do + IFS="$OLD_IFS" + # only allow variable name chars + case ${rs_z} in + *[![:alnum:]_]*) + IFS="|" + continue + ;; + esac + # skip non executable scripts + if [ ! -x ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + # skip directories + if [ -d ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + tmpdeplist="${tmpdeplist} ${rs_z}" + break + done + IFS="$OLD_IFS" + ;; + *) + case ${rs_y} in + *[![:alnum:]_]*) + continue + ;; + esac + if [ ! -x ${initdir}/${rs_y} ]; then + continue + fi + if [ -d ${initdir}/${rs_y} ]; then + continue + fi + tmpdeplist="${tmpdeplist} ${rs_y}" + ;; + esac + done + deplist=${tmpdeplist} + for rs_x in ${runlist}; do + pop_list_item ${rs_x} ${deplist} + deplist=${tmppop} + done + eval array_${1}=\"${deplist}\" +} + +get_prereqs() +{ + set_initlist + for gp_x in ${initlist}; do + tmp=$(${initdir}/${gp_x} prereqs) + eval array_${gp_x}=\"${tmp}\" + done +} + +count_unsatisfied() +{ + set -- ${@} + return ${#} +} + +# Removes $1 from initlist +pop_list_item() +{ + item=${1} + shift + set -- ${@} + unset tmppop + # Iterate + for pop in ${@}; do + if [ ${pop} = ${item} ]; then + continue + fi + tmppop="${tmppop} ${pop}" + done + +} + +# This function generates the runlist, so we clear it first. +reduce_prereqs() +{ + unset runlist + set -- ${initlist} + i=$# + # Loop until there's no more in the queue to loop through + while [ ${i} -ne 0 ]; do + oldi=${i} + for rp_x in ${initlist}; do + reduce_satisfied ${rp_x} + count_unsatisfied $(render array_${rp_x}) + cnt=${?} + if [ ${cnt} -eq 0 ]; then + runlist="${runlist} ${rp_x}" + pop_list_item ${rp_x} ${initlist} + initlist=${tmppop} + i=$((${i} - 1)) + fi + done + if [ ${i} -eq ${oldi} ]; then + panic "PANIC: Circular dependancy. Exiting." + fi + done +} + +get_prereq_pairs() +{ + set_initlist + for gp_x in ${initlist}; do + echo ${gp_x} ${gp_x} + prereqs=$(${initdir}/${gp_x} prereqs) + for prereq in ${prereqs}; do + echo ${prereq} ${gp_x} + done + done +} + +call_scripts() +{ + for cs_x in ${runlist}; do + [ -f ${initdir}/${cs_x} ] || continue + if [ x"$1" = "xoptional" ]; then + option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") + [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue + fi + + # mkinitramfs verbose output + if [ "${verbose}" = "y" ]; then + echo "Calling hook ${cs_x}" + fi + ${initdir}/${cs_x} + # allow boot scripts to modify exported boot paramaters + if [ -e /conf/param.conf ]; then + . /conf/param.conf + fi + done +} + +run_scripts() +{ + initdir=${1} + [ ! -d ${initdir} ] && return + + if [ -f ${initdir}/ORDER ]; then + . ${initdir}/ORDER + elif [ -x /usr/bin/tsort ]; then + runlist=$(get_prereq_pairs | tsort) + call_scripts $2 + else + get_prereqs + reduce_prereqs + call_scripts $2 + fi +} + +cache_run_scripts() +{ + DESTDIR=${1} + scriptdir=${2} + initdir=${DESTDIR}${scriptdir} + [ ! -d ${initdir} ] && return + + runlist=$(get_prereq_pairs | tsort) + for crs_x in ${runlist}; do + [ -f ${initdir}/${crs_x} ] || continue + echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER + echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER + done +} + +# Load custom modules first +load_modules() +{ + if [ -e /conf/modules ]; then + cat /conf/modules | while read m; do + # Skip empty lines + if [ -z "$m" ]; then + continue + fi + # Skip comments - d?ash removes whitespace prefix + com=$(printf "%.1s" "${m}") + if [ "$com" = "#" ]; then + continue + fi + modprobe $m + done + fi +} + +# lilo compatibility +parse_numeric() { + case $1 in + "") + return + ;; + /*) + return + ;; + *:*) + minor=${1#*:} + major=${1%:*} + ;; + *) + value=$(( 0x${1} )) + minor=$(( ${value} % 256 )) + major=$(( ${value} / 256 )) + ;; + esac + + mknod -m 600 /dev/root b ${major} ${minor} + ROOT=/dev/root +} + +configure_networking() +{ + # networking already configured thus bail out + [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 + + if [ "${HWADDR}" ]; then + # select interface by MAC address + HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" + local iface + for iface in /sys/class/net/*; do + [ -f "$iface/address" ] || continue + if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then + DEVICE="${iface#/sys/class/net/}" + fi + done + fi + + # support ip options see linux sources + # Documentation/filesystems/nfsroot.txt + case ${IPOPTS} in + none|off) + # Do nothing + ;; + ""|on|any) + # Bring up device + ipconfig -t 60 ${DEVICE} + ;; + dhcp|bootp|rarp|both) + ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} + ;; + *) + ipconfig -t 60 -d $IPOPTS + + # grab device entry from ip option + NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac + + # source ipconfig output + if [ -n "${DEVICE}" ]; then + # source specific bootdevice + . /tmp/net-${DEVICE}.conf + else + # source any interface as not exaclty specified + . /tmp/net-*.conf + fi +} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth new file mode 100755 index 00000000..8b1e7c8a --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth @@ -0,0 +1,21 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] +then + /bin/plymouth update-root-fs --new-root-dir=${rootmnt} +fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev new file mode 100755 index 00000000..f9d2ce9d --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev @@ -0,0 +1,24 @@ +#!/bin/sh -e +# initramfs init-bottom script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Stop udevd, we'll miss a few events while we run init, but we catch up +pkill udevd + +# Move /dev to the real filesystem +mount -n -o move /dev ${rootmnt}/dev diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 new file mode 100755 index 00000000..e5bc78f1 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 @@ -0,0 +1,41 @@ +#!/bin/sh + +# init-premount script for lvm2. + +PREREQS="udev mdadm" +prereqs() +{ + echo $PREREQS +} + +mountroot_fail() +{ + if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then + cat </dev/null; then + modprobe ata_generic all_generic_ide=1 +fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist new file mode 100755 index 00000000..5e6b3c1e --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist @@ -0,0 +1,34 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +# blacklist vga16fb when vga= or video= given +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*|video=*) + echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs + ;; + esac +done + +# sanity check +[ -z "${blacklist}" ] && exit 0 + +# write blacklist to modprobe.d +IFS=',' +for b in ${blacklist}; do + echo "blacklist $b" >> /etc/modprobe.d/initramfs +done diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup new file mode 100755 index 00000000..df767bb4 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup @@ -0,0 +1,83 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +OPTION=FRAMEBUFFER +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer new file mode 100755 index 00000000..bb59aadf --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer @@ -0,0 +1,104 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + + +# The options part of the kernel "video=" argument (i.e. everyting +# after "video=:") has very inconsistent rules. +# +# Generally the following applies: +# 1) options are comma-separated +# 2) options can be in either of these three forms: +# =, :, . +# 3) the "mode" option has the form x[M][R][-][@][i][m] +# and may or may not start with "mode=" +# +# When the options are used with modules, they need to be space-separated +# and the following conversions are needed: +# : -> = +# -> =1 +# -> mode= +parse_video_opts() +{ + local OPTS="$1" + local IFS="," + + # Must be a line like video=:,[opt2]... + if [ "${OPTS}" = "${OPTS%%:*}" ]; then + return + fi + OPTS="${OPTS#*:}" + for opt in ${OPTS}; do + # Already in the "=" form + if [ "${opt}" != "${opt#*=}" ]; then + echo -n "$opt " + # In the ":" form + elif [ "${opt}" != "${opt#*:}" ]; then + echo -n "${opt%:*}=${opt#*:} " + # Presumably a modevalue without the "mode=" prefix + elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then + echo -n "mode=$opt " + # Presumably a boolean + else + echo -n "${opt}=1 " + fi + done +} + +FB="" +OPTS="" + +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*) + FB="vesafb"; + OPTS=""; + ;; + video=*) + FB=${x#*=} + FB="${FB%%:*}" + OPTS="$(parse_video_opts "${x}")" + esac +done + +# Map command line name to module name +case ${FB} in +matroxfb) + FB=matroxfb_base + ;; +esac + +if [ -n "${FB}" ]; then + # Some framebuffer devices need character devices :-/ + udevadm settle + MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} + # Wait for the framebuffer devices to be ready + udevadm settle +else + # If we have no graphics devices yet, wait for udev to settle + [ -d /sys/class/graphics/fbcon ] || udevadm settle + [ -d /sys/class/graphics/fb0 ] || udevadm settle + [ -d /sys/class/drm/card0 ] || udevadm settle +fi + +# Force fb mode via /sys interface +for x in $(cat /proc/cmdline); do + case ${x} in + fbmode=*) + MODE=${x#*=} + echo "$MODE" > /sys/class/graphics/fb0/mode + ;; + esac +done diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap new file mode 100755 index 00000000..cb67aa96 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap @@ -0,0 +1,28 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth new file mode 100755 index 00000000..813b6b4c --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth @@ -0,0 +1,20 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="framebuffer console_setup brltty" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +printf '\033[?25l' > /dev/tty7 +/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid +/bin/plymouth show-splash diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev new file mode 100755 index 00000000..cd2fa564 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev @@ -0,0 +1,30 @@ +#!/bin/sh -e +# initramfs init-top script for udev + +PREREQ="all_generic_ide blacklist" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# It's all over netlink now +echo "" > /proc/sys/kernel/hotplug + +# Start the udev daemon to process events +/sbin/udevd --daemon --resolve-names=never + +# Iterate sysfs and fire off everything; if we include a rule for it then +# it'll get handled; otherwise it'll get handled later when we do this again +# in the main boot sequence. +( /sbin/udevadm trigger --subsystem-match=block; \ + /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local new file mode 100644 index 00000000..865572b5 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local @@ -0,0 +1,131 @@ +# Local filesystem mounting -*- shell-script -*- + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" + run_scripts /scripts/local-top + [ "$quiet" != "y" ] && log_end_msg + + while [ -z "${FSTYPE}" ]; do + FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) + + # Run failure hooks, hoping one of them can fix up the system + # and we can restart the wait loop. If they all fail, abort + # and move on to the panic handler and shell. + if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then + break + fi + done + + # We've given up, but we'll let the user fix matters if they can + while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do + # give hint about renamed root + case "${ROOT}" in + /dev/hd*) + suffix="${ROOT#/dev/hd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/sd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" + fi + ;; + /dev/sd*) + suffix="${ROOT#/dev/sd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/hd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" + fi + ;; + esac + echo "Gave up waiting for root device. Common problems:" + echo " - Boot args (cat /proc/cmdline)" + echo " - Check rootdelay= (did the system wait long enough?)" + echo " - Check root= (did the system wait for the right device?)" + echo " - Missing modules (cat /proc/modules; ls /dev)" + panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" + done + + # Get the root filesystem type if not set + if [ -z "${ROOTFSTYPE}" ]; then + [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") + ROOTFSTYPE="${FSTYPE}" + else + FSTYPE="${ROOTFSTYPE}" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" + run_scripts /scripts/local-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ] && \ + [ -z "$LOOP" ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} + + # FIXME This has no error checking + # Mount root + mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} + mountroot_status="$?" + if [ "$LOOP" ]; then + if [ "$mountroot_status" != 0 ]; then + if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then + panic " +Could not mount the partition ${ROOT}. +This could also happen if the file system is not clean because of an operating +system crash, an interrupted boot process, an improper shutdown, or unplugging +of a removable device without first unmounting or ejecting it. To fix this, +simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then +gracefully shut down and reboot back into Windows. After this you should be +able to reboot again and resume the installation. +(filesystem = ${FSTYPE}, error code = $mountroot_status) +" + fi + fi + + mkdir -p /host + mount -o move ${rootmnt} /host + + while [ ! -e "/host/${LOOP#/}" ]; do + panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" + done + + # Get the loop filesystem type if not set + if [ -z "${LOOPFSTYPE}" ]; then + eval $(fstype < "/host/${LOOP#/}") + else + FSTYPE="${LOOPFSTYPE}" + fi + if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then + FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") + [ -z "$FSTYPE" ] && FSTYPE="unknown" + fi + + if [ ${readonly} = y ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + modprobe loop + modprobe ${FSTYPE} + + # FIXME This has no error checking + mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} + + if [ -d ${rootmnt}/host ]; then + mount -o move /host ${rootmnt}/host + fi + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" + run_scripts /scripts/local-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g new file mode 100755 index 00000000..335ef95e --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g @@ -0,0 +1,16 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + mkdir -p /dev/.initramfs/varrun + pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit + pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit +fi + +exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc new file mode 100755 index 00000000..c9fbc369 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc @@ -0,0 +1,64 @@ +#!/bin/sh -e +# initramfs local-premount script for fixrtc + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +# use the fixrtc cmdline option in your bootloader to +# automatically set the hardware clock to the date of +# the last mount of your root filesystem to avoid fsck +# to get confused by the superblock being in the future + +BROKEN_CLOCK="" +ROOTDEV="" + +for x in $(cat /proc/cmdline); do + case ${x} in + root=*) + value=${x#*=} + + # Find the device node path depending on the form of root= : + + case ${value} in + UUID=*) + ROOTDEV=/dev/disk/by-uuid/${value#UUID=} + ;; + LABEL=*) + ROOTDEV=/dev/disk/by-label/${value#LABEL=} + ;; + *) + ROOTDEV=${value} + ;; + esac + ;; + fixrtc) + BROKEN_CLOCK=1 + ;; + esac +done + +if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then + ROOTDISK=$(readlink -f "$ROOTDEV") && + + TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && + TIME=${TIMESTR#*:} && + + date --set="${TIME} 1 minute" >/dev/null 2>&1 +fi + +# This script is best-effort. If we couldn't fudge the clock as desired, +# just try to carry on boot anyway: +# It will probably fail, but we won't have made the situation any worse. +exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g new file mode 100755 index 00000000..57e7f8ba --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g @@ -0,0 +1,14 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + modprobe fuse +fi + +exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume new file mode 100755 index 00000000..46535936 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume @@ -0,0 +1,75 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +. ./scripts/functions + +if [ -z "${resume}" ]; then + exit 0 +fi + +case $resume in +LABEL=*) + resume="${resume#LABEL=}" + + # support any / in LABEL= path (escape to \x2f) + case "${resume}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + resume="$(echo ${resume} | sed 's,/,\\x2f,g')" + else + if [ "${resume}" != "${resume#/}" ]; then + resume="\x2f${resume#/}" + fi + if [ "${resume}" != "${resume%/}" ]; then + resume="${resume%/}\x2f" + fi + IFS='/' + newresume= + for s in $resume; do + if [ -z "${newresume}" ]; then + newresume="${s}" + else + newresume="${newresume}\\x2f${s}" + fi + done + unset IFS + resume="${newresume}" + fi + esac + resume="/dev/disk/by-label/${resume}" + ;; +UUID=*) + resume="/dev/disk/by-uuid/${resume#UUID=}" + ;; +esac + +SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) + +case "${SWAPTYPE}" in + swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) + if [ -x /bin/plymouth ] && plymouth --ping; then + plymouth message --text="Resuming from $resume" + fi + + # hardcode path, uswsusp ships an resume binary too + if [ -n "${resume_offset}" ]; then + /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 + else + /bin/resume ${resume} >/dev/null 2>&1 + fi + ;; +esac diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs new file mode 100644 index 00000000..b9c2522d --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs @@ -0,0 +1,83 @@ +# NFS filesystem mounting -*- shell-script -*- + +# FIXME This needs error checking + +retry_nr=0 + +# parse nfs bootargs and mount nfs +do_nfsmount() +{ + + configure_networking + + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + + if [ -z "${NFSOPTS}" ]; then + NFSOPTS="-o retrans=10" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" + run_scripts /scripts/nfs-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ]; then + roflag="-o ro" + else + roflag="-o rw" + fi + + nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} +} + +# NFS root mounting +mountroot() +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" + run_scripts /scripts/nfs-top + [ "$quiet" != "y" ] && log_end_msg + + modprobe nfs + # For DHCP + modprobe af_packet + + # Default delay is around 180s + # FIXME: add usplash_write info + if [ -z "${ROOTDELAY}" ]; then + delay=180 + else + delay=${ROOTDELAY} + fi + + # loop until nfsmount succeds + while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do + [ ${retry_nr} -gt 0 ] && \ + [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" + do_nfsmount + retry_nr=$(( ${retry_nr} + 1 )) + [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 + [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg + done + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" + run_scripts /scripts/nfs-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev new file mode 100755 index 00000000..980e496f --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev @@ -0,0 +1,27 @@ +#!/bin/sh -e +# initramfs nfs-top script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Each call to udevsettle can take up to three minutes +if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TIMEOUT 360" + trap "/sbin/usplash_write 'TIMEOUT 15'" 0 +fi + +# We need to wait for the network card drivers to be loaded +/sbin/udevadm settle diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup new file mode 100755 index 00000000..5e97f65e --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup @@ -0,0 +1,82 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap new file mode 100644 index 00000000..f011abf5 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap @@ -0,0 +1,27 @@ +#!/bin/sh + +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth new file mode 100755 index 00000000..2da5a6b5 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth @@ -0,0 +1,18 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +/bin/plymouth quit diff --git a/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm b/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm new file mode 100644 index 00000000..11d27f8c --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm @@ -0,0 +1,18 @@ +# mdadm boot_degraded configuration +# +# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if +# you want. You can also change the values here and changes will be preserved. +# Do note that only the values are preserved; the rest of the file is +# rewritten. +# +# BOOT_DEGRADED: +# Do you want to boot your system if a RAID providing your root filesystem +# becomes degraded? +# +# Running a system with a degraded RAID could result in permanent data loss +# if it suffers another hardware fault. +# +# However, you might answer "yes" if this system is a server, expected to +# tolerate hardware faults and boot unattended. + +BOOT_DEGRADED=false diff --git a/client/ogClient/old/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/initramfs-tools-OG/conf.d/resume new file mode 100644 index 00000000..34fdc4a5 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/conf.d/resume @@ -0,0 +1 @@ +RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/ogClient/old/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/initramfs-tools-OG/hooks/oghooks new file mode 100755 index 00000000..3d9b04b8 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/hooks/oghooks @@ -0,0 +1,40 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash + + +# Insert OpenGnsys Engine +mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + diff --git a/client/ogClient/old/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/initramfs-tools-OG/initramfs.conf new file mode 100644 index 00000000..754e2bea --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/initramfs.conf @@ -0,0 +1,72 @@ +# +# initramfs.conf +# Configuration file for mkinitramfs(8). See initramfs.conf(5). +# + +# +# MODULES: [ most | netboot | dep | list ] +# +# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. +# +# dep - Try and guess which modules to load. +# +# netboot - Add the base modules, network modules, but skip block devices. +# +# list - Only include modules from the 'additional modules' list +# + +MODULES=most + +# +# BUSYBOX: [ y | n ] +# +# Use busybox if available. +# + +BUSYBOX=y + +# +# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] +# +# Amount of RAM to use for RAM-based compressed swap space. +# +# An empty value - compcache isn't used, or added to the initramfs at all. +# An integer and K (e.g. 65536 K) - use a number of kilobytes. +# An integer and M (e.g. 256 M) - use a number of megabytes. +# An integer and G (e.g. 1 G) - use a number of gigabytes. +# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. +# +# You can optionally install the compcache package to configure this setting +# via debconf and have userspace scripts to load and unload compcache. +# + +COMPCACHE_SIZE="" + +# +# NFS Section of the config. +# + +# +# BOOT: [ local | nfs ] +# +# local - Boot off of local media (harddrive, USB stick). +# +# nfs - Boot using an NFS drive as the root of the drive. +# + +BOOT=local + +# +# DEVICE: ... +# +# Specify the network interface, like eth0 +# + +DEVICE=eth0 + +# +# NFSROOT: [ auto | HOST:MOUNT ] +# + +NFSROOT=auto + diff --git a/client/ogClient/old/initramfs-tools-OG/modules b/client/ogClient/old/initramfs-tools-OG/modules new file mode 100644 index 00000000..484ef718 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/modules @@ -0,0 +1,13 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +fbcon +vesafb +vga16b diff --git a/client/ogClient/old/initramfs-tools-OG/scripts/og b/client/ogClient/old/initramfs-tools-OG/scripts/og new file mode 100755 index 00000000..6408eda7 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/scripts/og @@ -0,0 +1,140 @@ +# OpenGnsys Local filesystem mounting -*- shell-script -*- + +ogLinkBusybox () +{ +for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do + ln -f /bin/busybox /bin/$n +done +ln -f /bin/busybox /bin/sh +} + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + + mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +configure_networking +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + +set -a +trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 +/opt/opengnsys/etc/preinit/default.sh + + + + + + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + run_scripts /scripts/og-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf new file mode 100644 index 00000000..3c27473b --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf @@ -0,0 +1,20 @@ +# +# Configuration file for update-initramfs(8) +# + +# +# update_initramfs [ yes | all | no ] +# +# Default is yes +# If set to all update-initramfs will update all initramfs +# If set to no disables any update to initramfs beside kernel upgrade + +update_initramfs=yes + +# +# backup_initramfs [ yes | no ] +# +# Default is no +# If set to no leaves no .bak backup files. + +backup_initramfs=no diff --git a/client/ogClient/old/ogClientFunctions b/client/ogClient/old/ogClientFunctions new file mode 100755 index 00000000..8311cf3a --- /dev/null +++ b/client/ogClient/old/ogClientFunctions @@ -0,0 +1,255 @@ +#!/bin/bash +#Definicion de variables +# TODO: Pendiente Definir directorio base del 2FS +OGBASEDIR=/var/lib/tftpboot/ogclient/ +OGFSFILE=${OGBASEDIR}ogclient.img +OGFSMOUNT=${OGBASEDIR}ogclientmount +OGLIB=/opt/opengnsys/client/lib +FSCLIENTSIZEMB=1000 +PASSROOT=og +SCRIPT=/root/configure.sh +RUNME=$OGFSMOUNT$SCRIPT +LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb +OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" +OGFSLABEL=ogClient + + + + +#/** +# ogClientMount [str_program] +#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones +#@return Si no hay parametros: login de acceso. +#@return con un parametro: La salida del programa ejecutado +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## +function ogClientMount () +{ +#TODO comprobar que OGFILE y OGFILEMOUNT existe. +mount $OGFSFILE $OGFSMOUNT -o loop +mount --bind /proc $OGFSMOUNT/proc +mount --bind /sys $OGFSMOUNT/sys +mount --bind /tmp $OGFSMOUNT/tmp +mount --bind /dev $OGFSMOUNT/dev +mount --bind /dev/pts $OGFSMOUNT/dev/pts +[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) +[ $# = 1 ] && chroot $OGFSMOUNT $1 +} + +#/** +# ogClientUnmount +#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys +#@param +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientUnmount () +{ +cd /tmp +umount -d -f -l $OGFSMOUNT/proc +umount -d -f -l $OGFSMOUNT/sys +umount -d -f -l $OGFSMOUNT/tmp +umount -d -f -l $OGFSMOUNT/dev +umount -d -f -l $OGFSMOUNT/dev/pts +umount -d -f -l $OGFSMOUNT +} + +function ogClientCheckVersion () +{ +#TODO: configurar la version lucid +#TODO: introducir un nuevo case para la vesion +case $1 in + jaunty|JAUNTY) + export OGVERSION=jaunty + exort OGRELEASE=2.6.28-11-generic + ;; + karmic|KARMIC) + export OGVERSION=karmic + export OGRELEASE=2.6.31-14-generic + ;; + lucid|LUCID) + export OGVERSION=lucid + export OGRELEASE=2.6.32-21-generic-pae + ;; +esac +echo $OGVERSION $OGRELEASE +} + + +#/** +# ogClientGenerator str_versionUbuntu str_release +#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Versión de ubuntu a generar, jaunty karmic +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientGeneratorDebootstrap () +{ + +if [ $# != 2 ] +then +echo Debes introducir como argumento1: jaunty karmic lucid +echo Debes introducir como argumento2: la release +echo utiliza como entrada ogClientCheckVersion +return +fi + +OGVERSION=`echo $1` +OGRELEASE=`echo $2` +echo $OGVERSION $OGRELEASE +pause + +# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema +apt-get install gdebi-core +wget $LASTDEBOOTSTRAP +gdebi -n debootstrap_1.0.20_all.deb + + +#Creamos el directorio donde montaremos el disco virtual +mkdir -p $OGFSMOUNT + +#Creamos el disco virtual con el filesystem del cliente. +dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB +mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F + +#Montamos el dispositivo virtual en su punto de montaje. +mount $OGFSFILE $OGFSMOUNT -o loop + +#TODO Comprobar arquitectura +#Iniciamos la creación del sistema en el directorio de clientes. +echo debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ +debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ + + + +} + + +###### Funciones para los clientes offline +function agregarOG { +cd $NEWROOT +mkdir -p opt/opengnsys +cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys +echo "agregando OG al newinitrd" +} + +function finalizarISO +{ + cd $ANTERIORPWD + mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz + if [ $LINUX ] ; then + mv $TMPINITRD/linux $DEST/linuxISO + fi +} + + +function CrearISO { +mkdir -p tmp/iso/isolinux +#cd tmp/iso/ +cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ +cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ +cp -prv /tmp/linux tmp/iso/isolinux/linuxISO +cp -prv /tmp/initrd.gz tmp/iso/isolinux/ +cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ + + +cat << FIN > tmp/iso/isolinux/isolinux.cfg +DEFAULT menu.c32 +PROMPT 0 +ALLOWOPTIONS 1 + +MENU TITLE FuTuR3 Live Collection + +LABEL gpxe +MENU LABEL gpxe +KERNEL /clonezilla/live/vmlinuz1 +APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia + + +#default 0 +#prompt 1 +#timeout 100 + +#display mensaje.txt + +LABEL 0 +MENU LABEL ogClient +KERNEL linuxISO +APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline + +LABEL 1 +MENU LABEL ogClient1 sin vga +KERNEL linuxISO +APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline + +LABEL 2 +MENU LABEL ogClient2 sin irqpoll +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline + +LABEL 3 +MENU LABEL ogClient3 acpi=off +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline + + +#LABEL ogclient +#KERNEL /ogclient/linuxISO +#APPEND initrd=/ogclient/initrdISO.img + +#KERNEL linuxISO +#APPEND initrd=initrdISO.img + +LABEL 4 +MENU LABEL local +localboot 0x80 +append - + + +label 5 +MENU LABEL Network boot via gPXE lkrn +KERNEL gpxe.lkrn + +label 5 +MENU LABEL Network boot via gPXE usb +KERNEL gpxe.usb + +label 5 +MENU LABEL Network boot via gPXE pxe +KERNEL gpxe.pxe + +label 5 +MENU LABEL Network boot via gPXE iso +KERNEL gpxe.iso +FIN +#### /tmp/iso# +mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso + +} + +function probarISO { +#/tmp/iso +qemu -m 256 -boot d -cdrom ogClient.iso +} + + + + diff --git a/client/ogClient/old/ogClientGenerator.sh b/client/ogClient/old/ogClientGenerator.sh new file mode 100755 index 00000000..c7c654ae --- /dev/null +++ b/client/ogClient/old/ogClientGenerator.sh @@ -0,0 +1,306 @@ +#!/bin/bash +#@file ogClientGenerator.sh +#@brief Script generación del cliente OpenGnSys +#@warning +#@version 0.9 - +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + + + +if [ $# -ne 1 ]; then + echo ": invalid number of parameters" + echo " host | lucid | karmic | jaunty | lenny | squeeze " + exit 1 +fi + + + +# Soo ejecutable por usuario root +if [ "$(whoami)" != 'root' ] +then + echo "ERROR: this program must run under root privileges!!" + exit 1 +fi + +# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). +PROGRAMDIR=$(readlink -e $(dirname "$0")) +if [ -d "$PROGRAMDIR/../installer" ]; then + USESVN=0 +else + USESVN=1 + SVN_URL=svn://www.informatica.us.es:3690/opengnsys/branches/ogClient + #directorio donde se almacenará el codigo temporalmente. + SVN_DIR="./opengnsys/installer/ogClient" +fi + +WORKDIR=/tmp/opengnsys_installer +mkdir -p $WORKDIR +INSTALL_TARGET=/opt/opengnsys +LOG_FILE=/tmp/opengnsys_installation.log + +############################################### +pushd $WORKDIR + + +source `dirname $0`/ogInstaller.lib + + +if [ "$1" == "host" ] +then + OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') + OGRELEASE=$(uname -a | awk '{print $3}') +else + OSCODENAME=`echo $1` + OGRELEASE=`ogClientGetRelease $OSCODENAME` +fi + + + +OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ +OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img +OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount + +OGLIB=/opt/opengnsys/client/lib + + + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + + +# Datos para la generación del cliente. +DEPENDENCIES=( debootstrap subversion schroot) + +## Actualizar repositorios +apt-get update +# Instalación de dependencias (paquetes de sistema operativo). +declare -a notinstalled +checkDependencies DEPENDENCIES notinstalled +if [ $? -ne 0 ]; then + installDependencies notinstalled + if [ $? -ne 0 ]; then + echoAndLog "Error while installing some dependeces, please verify your server installation before continue" + exit 1 + fi +fi + + + +# Si es necesario, descarga el repositorio especifico de la instalación del cliente +if [ $USESVN -eq 1 ]; then + #svnExportCode $SVN_URL + echo svn export "$SVN_URL" $SVN_DIR + #svn export "$SVN_URL" $SVN_DIR + #####debug boorrar el cp + #mkdir -p $SVN_DIR + #cp -prv /home/administrador/workspace/opengnsys/branches/ogClient/* $SVN_DIR + find $SVN_DIR/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null + ###TODO si ya esta descargado da error ??? + ###if [ $? -ne 0 ]; then + ### errorAndLog "Error while getting code from svn" + ### exit 1 + ###fi +else + ln -fs "$(dirname $PROGRAMDIR)" opengnsys +fi + +#### Parseo de ficheros descargados del svn. +# parseamos del apt.source +if [ "$1" == host ] +then + cp /etc/apt/sources.list ${SVN_DIR}/clientstructure/etc/apt/sources.list +else + sed -e "s/OGVERSION/$OGVERSION/g" ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic > ${SVN_DIR}/clientstructure/etc/apt/sources.list + #rm ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic +fi +if [ $? -ne 0 ]; then + errorAndLog "parseando el fichero apt.source: ERROR" +else + echoAndLog "parseando el fichero apt.source: OK" +fi + +#parseamos el scripts de generación del initrd. +sed -e "s/OGRELEASE/$OGRELEASE/g" ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVN_DIR}/clientstructure/root/GenerateInitrd.sh +#rm ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh +if [ $? -ne 0 ]; then + errorAndLog "parseando el fichero de cliente GenerateInitrd: ERROR" +else + echoAndLog "parseando el fichero de cliente GenerateInitrd: OK" +fi + + + +#damos permiso al directorio de scripts +chmod 775 ${SVN_DIR}/clientstructure/root/* +if [ $? -ne 0 ]; then + errorAndLog "Dando permisos de escritura al directorio de scrips para el cliente: ERROR" +else + echoAndLog "Dando permisos de escritura al directorio de scrips para el cliente: OK" +fi + + +#####PASO 1. Generamos el 2º sistema de archivos. +echo "generamos el sistema base con debootstrap" +if [ "$1" == host ] +then + echo ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE +# ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE +else + echo ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE + ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE +fi +if [ $? -ne 0 ]; then + errorAndLog "Generando 2nd FileSystem: ERROR" +else + echoAndLog "Generando 2nd FileSystem: OK" +fi + +########################################## + +cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` +cat << EOF > /etc/schroot/schroot.conf +[IMGogclient] +type=loopback +file=/var/lib/tftpboot/ogclient/ogclient.img +description=ogclient ubuntu luc IMGi +priority=1 +users=root +groups=root +root-groups=root +mount-options=-o offset=32256 +root-users=root +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF + + + +####PASO 2 Insertamos datos en el 2º sistema de archivos +#2.1 montamos para insertar los ficheros necesarios. +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 +if [ $? -ne 0 ]; then + errorAndLog "Montando 2nd FileSystem Para Añadir elementos OG: ERROR" + exit 1 +else + echoAndLog "Montando 2nd FileSystem Para Añadir elementos OG: OK" +fi + +#2.2 copiamos la estrucutra descargada al fichero imagen. +echo "cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT " +cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT +if [ $? -ne 0 ]; then + errorAndLog "Copiando los elementos del cliente svn: ERROR" + exit 1 +else + echoAndLog "Copiando los elementos del cliente svn: OK" +fi + +#2.3 Copiamos algunas cosas del actual sistema - ver de que manera integrar los lib +# copiamos algunas cosas del nfsexport +echo "Linking fonts for browser1 $OGLIB" +mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ +cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts +echo "Linking fonts for browser2 $OGLIB" +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ +cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts +echo "Coping pci.ids" +cp -pr $OGLIB/pci.ids $OGCLIENTMOUNT/etc +#copiamos el browser y el ogADMcline al bin +cp /opt/opengnsys/client/bin/browser $OGCLIENTMOUNT/bin +cp /opt/opengnsys/client/bin/ogAdmClient $OGCLIENTMOUNT/bin +if [ $? -ne 0 ]; then + errorAndLog "Copiando qt pci.ids fonts: ERROR" + exit 1 +else + echoAndLog "Copiando qt pci.ids fonts: OK" +fi + + +## final desmontamos. +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +if [ $? -ne 0 ]; then + errorAndLog "Desmontando cliente : ERROR" + exit 1 +else + echoAndLog "desmontando cliente: OK" +fi + +################## Fin paso 2 + +popd + +######## instalamos software adicional. +#ogClientMount /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` +cd / +schroot -c IMGogclient -- /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` + +if [ $? -ne 0 ]; then + errorAndLog "Instalando sofware adicional OG : ERROR" + #exit 1 +else + echoAndLog "Instalando sofware adicional OG: OK" +fi +cd - + +#cd / +#schroot -c IMGogclient -- /root/CompileSoftware.sh +#cd - + +### configuracion hostname passroot securety +cd / +schroot -c IMGogclient -- /root/ConfFS.sh +cd - + +##2.4 claves ssh +sshkeys() +{ +##montamos +mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 +##comprobamos clave rsa en el host,. +if [ ! -f /root/.ssh/id_rsa.pub ] +then + ssh-keygen -q -f /root/.ssh/id_rsa -N "" +fi +## copiamos ssh rsa del host al guest como authorized-key2 +rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT +} + +### Generamos el 1er sistema de archivos. +cd / +schroot -c IMGogclient -- /root/GenerateInitrd.sh +cp /tmp/*-${OGRELEASE} $OGCLIENTBASEDIR +cd - + + + +################## DEJAMOS FICHERO DE EJEMPLOS PARA: +#default +cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient +LABEL pxe-${OGRELEASE} +KERNEL ogclient/vmlinuz-$OGRELEASE +APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= +FIN +#/etc/hosts +echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient +/etc/init.d/nfs-kernel-server restart +##################################################################### + +# Mostrar sumario de la instalación e instrucciones de post-instalación. +installationSummary + +#rm -rf $WORKDIR +echoAndLog "OpenGnSys installation finished at $(date)" + diff --git a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib new file mode 100755 index 00000000..14806b7e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib @@ -0,0 +1,77 @@ +#!/bin/bash +#/** +#@file Net.lib +#@brief Librería o clase Net +#@class Net +#@brief Funciones básicas de red. +#@version 1.0 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogGetHostname +#@brief Muestra el nombre del cliente. +#@return str_host - nombre de máquina +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetHostname () +{ +local HOST NETFILE +# Tomar nombre de la variable HOSTNAME +HOST="$HOSTNAME" + +# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) +[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} + END {print host} + ' /var/lib/dhcp3/dhclient.leases) +# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ +[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} + $1~/hostname/ {print $2}' /proc/cmdline) + +[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" +echo $HOST +} + + +#/** +# ogGetIpAddress +#@brief Muestra la dirección IP del sistema +#@return str_ip - Dirección IP +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetIpAddress () +{ +local IP +#Version og2ndFS +NETFILE="/tmp/net-eth0.conf" +[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) + +# Obtener direcciones IP. /* (comentario para Doxygen) +[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') +# Mostrar sólo la primera. (comentario para Doxygen) */ +echo ${IP%% *} +} + + +#/** +# ogGetMacAddress +#@brief Muestra la dirección Ethernet del cliente. +#@return str_ether - Dirección Ethernet +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetMacAddress () +{ +local MAC +# Obtener direcciones Ethernet. +MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') +# Mostrar sólo la primera. +echo ${MAC%% *} +} + diff --git a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme new file mode 100644 index 00000000..853e37f5 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme @@ -0,0 +1,20 @@ +preinit/default + eliminamos enlace del bash + Ejecute solo el loadmodules del for + +preinit/loaenviron + comentamos el LD_PATH + + +/var/lib/tftboot/pxelinux.cfg/default +DEFAULT pxe2 +LABEL pxe +KERNEL linux +APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin +LABEL pxe2 +KERNEL vmlinuz-2.6.32-21-generic-pae +APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 + + +parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN +temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/ogClient/old/ogFSHlnk/boot/default.sh b/client/ogClient/old/ogFSHlnk/boot/default.sh new file mode 100755 index 00000000..e8c5b5d2 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/boot/default.sh @@ -0,0 +1,23 @@ +#!/opt/opengnsys/bin/bash + +set -a + +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} +#### FIXME EN PRUEBAS +OGLOGFILE=/var/log/opengnsys.log + +/opt/opengnsys/etc/init/load2fs.sh +source /opt/opengnsys/etc/preinit/loadenviron.sh +export PATH=/opt/og2fs/bin:$PATH +export PATH=/opt/og2fs/sbin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + echo "$MSG_LAUNCHCLIENT" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE +fi + +bash +# FIXME Arranque Browser +#browser -qws $OGSTARTPAGE diff --git a/client/ogClient/old/ogFSHlnk/boot/load2fs.sh b/client/ogClient/old/ogFSHlnk/boot/load2fs.sh new file mode 100644 index 00000000..ca3e3be7 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/boot/load2fs.sh @@ -0,0 +1,19 @@ +#!/bin/bash +#/** +#@file load2fs.sh +#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Antonio J. Doblas Viso, Unviersidad de Malaga. +#@date 2010-02-15 +#*/ +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro +cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +export PATH=/opt/og2fs/sbin:$PATH +export PATH=/opt/og2fs/bin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh b/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh new file mode 100755 index 00000000..e3505aa6 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh @@ -0,0 +1,395 @@ +#!/bin/bash +#Definicion de variables +# TODO: Pendiente Definir directorio base del 2FS +OGBASEDIR=/opt/opengnsys/client/ +OGFSFILE=${OGBASEDIR}og2ndFS +OGFSMOUNT=${OGBASEDIR}ogfsmount +OGLIB=/opt/opengnsys/client/lib + + + + + +#/** +# ogFSHMount [str_program] +#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones +#@return Si no hay parametros: login de acceso. +#@return con un parametro: La salida del programa ejecutado +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## +function ogFSHMount () +{ +mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop +mount --bind /proc $OGFSMOUNT/proc +mount --bind /sys $OGFSMOUNT/sys +mount --bind /tmp $OGFSMOUNT/tmp +mount --bind /dev $OGFSMOUNT/dev +mount --bind /dev/pts $OGFSMOUNT/dev/pts +[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) +[ $# = 1 ] && chroot $OGFSMOUNT $1 +} + +#/** +# ogFSHUnmount +#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys +#@param +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogFSHUnmount () +{ +cd /tmp +umount -d -f -l $OGFSMOUNT/proc +umount -d -f -l $OGFSMOUNT/sys +umount -d -f -l $OGFSMOUNT/tmp +umount -d -f -l $OGFSMOUNT/dev +umount -d -f -l $OGFSMOUNT/dev/pts +umount -d -f -l $OGFSMOUNT +} + + +#/** +# ogFSHCreate str_versionUbuntu +#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Versión de ubuntu a generar, jaunty karmic +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogFSHCreate () +{ +#Definicion de variables. +local SCRIPT RUNME FSCLIENTSIZEMB PASSROOT LASTDEBOOTSTRAP OGMUSTCOMPILE OGFSLABEL +FSCLIENTSIZEMB=1000 +PASSROOT=og +SCRIPT=/root/configure.sh +RUNME=$OGFSMOUNT$SCRIPT +LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb +OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" +OGFSLABEL=og2FS +#TODO comprobar la compatibilidad del SO host + +if [ $# != 1 ] +then +echo Debes introducir como argumento: jaunty karmic lucid +return +fi + +#TODO: configurar la version lucid +#TODO: introducir un nuevo case para la vesion +case $1 in + jaunty|JAUNTY) + VERSION=jaunty + RELEASE=2.6.28-11-generic + ;; + karmic|KARMIC) + VERSION=karmic + RELEASE=2.6.31-14-generic + ;; + lucid|LUCID) + VERSION=lucid + #RELEASE=2.6.32-19-generic + RELEASE=2.6.32-21-generic-pae + ;; +esac + +# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema +apt-get install gdebi-core +wget $LASTDEBOOTSTRAP +gdebi -n debootstrap_1.0.20_all.deb + +#Creamos el disco virtual con el filesystem del cliente. +dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB +mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F +#Creamos el directorio donde montaremos el disco virtual +mkdir -p $OGFSMOUNT +#Montamos el dispositivo virtual en su punto de montaje. +mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop + +#TODO Comprobar arquitectura +#Iniciamos la creación del sistema en el directorio de clientes. +echo debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ +debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ + +# preparamos el etc.sources. +cat << FIN > ${OGFSMOUNT}/etc/apt/sources.list +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted +## Major bug fix updates produced after the final release of the +## distribution. +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team. Also, please note that software in universe WILL NOT receive any +## review or updates from the Ubuntu security team. +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION universe +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION universe +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team, and may not be under a free licence. Please satisfy yourself as to +## your rights to use the software. Also, please note that software in +## multiverse WILL NOT receive any review or updates from the Ubuntu +## security team. +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse + +## Uncomment the following two lines to add software from the 'backports' +## repository. +## N.B. software from this repository may not have been tested as +## extensively as that contained in the main release, although it includes +## newer versions of some applications which may provide useful features. +## Also, please note that software in backports WILL NOT receive any review +## or updates from the Ubuntu security team. +# deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse +# deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse + +## Uncomment the following two lines to add software from Canonical's +## 'partner' repository. +## This software is not part of Ubuntu, but is offered by Canonical and the +## respective vendors as a service to Ubuntu users. +# deb http://archive.canonical.com/ubuntu $VERSION partner +# deb-src http://archive.canonical.com/ubuntu $VERSION partner + + +deb http://security.ubuntu.com/ubuntu $VERSION-security main restricted +deb-src http://security.ubuntu.com/ubuntu $VERSION-security main restricted +deb http://security.ubuntu.com/ubuntu $VERSION-security universe +deb-src http://security.ubuntu.com/ubuntu $VERSION-security universe +deb http://security.ubuntu.com/ubuntu $VERSION-security multiverse +deb-src http://security.ubuntu.com/ubuntu $VERSION-security multiverse + + +deb http://archive.ubuntu.com/ubuntu $VERSION main +deb http://free.nchc.org.tw/drbl-core drbl stable +deb http://free.nchc.org.tw/ubuntu $VERSION-security main restricted universe multiverse +deb http://ppa.launchpad.net/freenx-team/ubuntu/ $VERSION main +deb http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main +deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main +FIN + +#TODO: fichero etc/hosts +#TODO: fichero etc/resolv.conf +echo "2ndFSHclient" > ${OGFSMOUNT}/etc/hostname +#TODO: introducir mas consoluas para el acceso como root. +echo "pts/0" >> ${OGFSMOUNT}/etc/securetty +echo "pts/1" >> ${OGFSMOUNT}/etc/securetty +echo "pts/2" >> ${OGFSMOUNT}/etc/securetty +echo "pts/3" >> ${OGFSMOUNT}/etc/securetty + +# copiamos algunas cosas del nfsexport +echo "Linking fonts for browser1 $OGLIB" +mkdir -p $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ +cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts + +echo "Linking fonts for browser2 $OGLIB" +mkdir -p $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/ +cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts + +echo "Coping pci.ids" +cp -pr $OGLIB/pci.ids $OGFSMOUNT/etc + +# Guión de ejecución y personalización final. +cat << FIN > $RUNME +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl + + +apt-get -y update + +# software system +apt-get -y --force-yes install linux-image-$RELEASE wget dialog man-db htop +# +# software to compile code +apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk +wget $OGMUSTCOMPILE +source /root/ToolsGNU.c +# +# sofware networking +apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 +ctorrent install +udpcast install +# +# software services +apt-get -y --force-yes install openssh-server bittornado trickle +# +# software disk and filesystem +apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted +apt-get -y --force-yes install dmraid dmsetup mdadm lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools +ntfs-3g install +# +# software cloning +apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools +wget -O partclone_0.2.8_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.8/partclone_0.2.8_i386.deb?use_mirror=ovh +gdebi -n partclone_0.2.8_i386.deb +mbuffer install +# +## software postconf +apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk +ms-sys install +# +# software compressor +apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop + +apt-get -y --force-yes remove busybox +apt-get -y --force-yes install busybox-static bash-static +# +#################################################################### +###################### Preparando el entorno ###################### +################################################################### +mkdir -p /var/lock +dpkg-reconfigure passwd +echo "root:$PASSROOT" | chpasswd +mv /etc/fstab /etc/fstab.original 2>/dev/null +mv /etc/mtab /etc/mtab.original 2>/dev/null +FIN + +chmod +x $RUNME + +#chroot hacia el punto de montaje. +ogFSHMount $SCRIPT +### Desmontamos y salimos. +ogFSHUnmount 2>/dev/null +ogFSHUnmount 2>/dev/null +ogFSHUnmount 2>/dev/null +} + + +###### Funciones para los clientes offline +function agregarOG { +cd $NEWROOT +mkdir -p opt/opengnsys +cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys +echo "agregando OG al newinitrd" +} + +function finalizarISO +{ + cd $ANTERIORPWD + mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz + if [ $LINUX ] ; then + mv $TMPINITRD/linux $DEST/linuxISO + fi +} + + +function CrearISO { +mkdir -p tmp/iso/isolinux +#cd tmp/iso/ +cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ +cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ +cp -prv /tmp/linux tmp/iso/isolinux/linuxISO +cp -prv /tmp/initrd.gz tmp/iso/isolinux/ +cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ + + +cat << FIN > tmp/iso/isolinux/isolinux.cfg +DEFAULT menu.c32 +PROMPT 0 +ALLOWOPTIONS 1 + +MENU TITLE FuTuR3 Live Collection + +LABEL gpxe +MENU LABEL gpxe +KERNEL /clonezilla/live/vmlinuz1 +APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia + + +#default 0 +#prompt 1 +#timeout 100 + +#display mensaje.txt + +LABEL 0 +MENU LABEL ogClient +KERNEL linuxISO +APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline + +LABEL 1 +MENU LABEL ogClient1 sin vga +KERNEL linuxISO +APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline + +LABEL 2 +MENU LABEL ogClient2 sin irqpoll +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline + +LABEL 3 +MENU LABEL ogClient3 acpi=off +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline + + +#LABEL ogclient +#KERNEL /ogclient/linuxISO +#APPEND initrd=/ogclient/initrdISO.img + +#KERNEL linuxISO +#APPEND initrd=initrdISO.img + +LABEL 4 +MENU LABEL local +localboot 0x80 +append - + + +label 5 +MENU LABEL Network boot via gPXE lkrn +KERNEL gpxe.lkrn + +label 5 +MENU LABEL Network boot via gPXE usb +KERNEL gpxe.usb + +label 5 +MENU LABEL Network boot via gPXE pxe +KERNEL gpxe.pxe + +label 5 +MENU LABEL Network boot via gPXE iso +KERNEL gpxe.iso +FIN +#### /tmp/iso# +mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso + +} + +function probarISO { +#/tmp/iso +qemu -m 256 -boot d -cdrom ogClient.iso +} + + + + diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog new file mode 100644 index 00000000..d93f0b42 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog @@ -0,0 +1,137 @@ +#/bin/sh + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + + #mount -t nfs -onolock,ro + nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + #mount -t nfs -o nolock + nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +. /scripts/functions +configure_networking +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + + +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro +cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +mount /opt/og2fs/bin /bin +mount /opt/og2fs/sbin /sbin +unset PATH +export PATH=/opt/og2fs/sbin +export PATH=/opt/og2fs/bin:$PATH +export PATH=/opt/og2fs/sbin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin +} +mountroot diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume new file mode 100644 index 00000000..e4c89d1a --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume @@ -0,0 +1 @@ +RESUME=UUID=e8ea296e-815a-44d5-be24-b51d6b6fce4d diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks new file mode 100755 index 00000000..d495d156 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks @@ -0,0 +1,43 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash +copy_exec /usr/bin/unionfs-fuse + + + +# Insert OpenGnsys Engine +#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + + diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf new file mode 100644 index 00000000..754e2bea --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf @@ -0,0 +1,72 @@ +# +# initramfs.conf +# Configuration file for mkinitramfs(8). See initramfs.conf(5). +# + +# +# MODULES: [ most | netboot | dep | list ] +# +# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. +# +# dep - Try and guess which modules to load. +# +# netboot - Add the base modules, network modules, but skip block devices. +# +# list - Only include modules from the 'additional modules' list +# + +MODULES=most + +# +# BUSYBOX: [ y | n ] +# +# Use busybox if available. +# + +BUSYBOX=y + +# +# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] +# +# Amount of RAM to use for RAM-based compressed swap space. +# +# An empty value - compcache isn't used, or added to the initramfs at all. +# An integer and K (e.g. 65536 K) - use a number of kilobytes. +# An integer and M (e.g. 256 M) - use a number of megabytes. +# An integer and G (e.g. 1 G) - use a number of gigabytes. +# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. +# +# You can optionally install the compcache package to configure this setting +# via debconf and have userspace scripts to load and unload compcache. +# + +COMPCACHE_SIZE="" + +# +# NFS Section of the config. +# + +# +# BOOT: [ local | nfs ] +# +# local - Boot off of local media (harddrive, USB stick). +# +# nfs - Boot using an NFS drive as the root of the drive. +# + +BOOT=local + +# +# DEVICE: ... +# +# Specify the network interface, like eth0 +# + +DEVICE=eth0 + +# +# NFSROOT: [ auto | HOST:MOUNT ] +# + +NFSROOT=auto + diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules new file mode 100644 index 00000000..8bac1d4b --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules @@ -0,0 +1,14 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +vga16b +vesafb +fbcon + diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og new file mode 100755 index 00000000..12c39a59 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og @@ -0,0 +1,194 @@ +# OpenGnsys Local filesystem mounting -*- shell-script -*- + + +ogLinkBusybox () +{ +for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do + ln -f /bin/busybox /bin/$n +done +ln -f /bin/busybox /bin/sh +} + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + #mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + +unionmount() +{ +FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" +UNION_OPT="-o cow -o noinitgroups" +UPATH="/unionfs" +UBIN="unionfs-fuse" +mkdir -p /unionfs/host +mkdir -p /unionfs/union + dir=$1 + #echo "creando mkdir -p /unionfs/host/$dir" + mkdir -p /unionfs/host/$dir + #echo "montando mount --bind /$dir /unionfs/host/$dir " + mount --bind /$dir /unionfs/host/$dir + ##########echo "creando mkdir -p /unionfs/union/$dir" + mkdir -p /unionfs/union/$dir + host="/unionfs/host/${dir}=RW" + common="/opt/og2fs/${dir}=RO" + #####echo " ejecuantdo $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir " + $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir + + mount --bind /unionfs/union/$dir /$dir +} + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +. /scripts/functions +configure_networking + +# for the portmapper we need localhost +ifconfig lo 127.0.0.1 +/etc/init.d/portmap start + +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + + +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro + +#mount -t tmpfs -o size=8192 tmpfs /unionfs +for i in etc; do + unionmount $i +done +# root var lib bin sbin usr +cat /proc/mounts > /etc/mtab + +#cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +mount /opt/og2fs/bin /bin +mount /opt/og2fs/sbin /sbin +#export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin +#chmod 777 /etc/rcog +##unset PATH +##export PATH=$PATH:/opt/og2fs/sbin +##export PATH=/opt/og2fs/bin:$PATH +##export PATH=/opt/og2fs/sbin:$PATH + + + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + run_scripts /scripts/og-bottom + [ "$quiet" != "y" ] && log_end_msg + + +#set -a +#trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 + +#/opt/opengnsys/etc/preinit/default.sh +echo "llamando a init desde scritps og" +exec init +} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf new file mode 100644 index 00000000..3c27473b --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf @@ -0,0 +1,20 @@ +# +# Configuration file for update-initramfs(8) +# + +# +# update_initramfs [ yes | all | no ] +# +# Default is yes +# If set to all update-initramfs will update all initramfs +# If set to no disables any update to initramfs beside kernel upgrade + +update_initramfs=yes + +# +# backup_initramfs [ yes | no ] +# +# Default is no +# If set to no leaves no .bak backup files. + +backup_initramfs=no diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab new file mode 100644 index 00000000..03e0c06a --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab @@ -0,0 +1,14 @@ +# This is run first except when booting in single-user mode +# +#::sysinit:/opt/opengnsys/etc/preinit/default.sh +# /bin/sh invocations on selected ttys +# +# Start an "askfirst" shell on the console (whatever that may be) +#::askfirst:/bin/sh +# Start an "askfirst" shell on /dev/tty2-4 +#tty1::respawn:/sbin/getty 38400 tty1 +tty1::respawn:/opt/opengnsys/etc/preinit/default.sh +tty2::respawn:/sbin/getty 38400 tty2 +tty3::respawn:/sbin/getty 38400 tty3 +tty4::respawn:/sbin/getty 38400 tty4 +tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf new file mode 100644 index 00000000..8b047e4e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf @@ -0,0 +1,30 @@ +# Framebuffer drivers are generally buggy and poorly-supported, and cause +# suspend failures, kernel panics and general mayhem. For this reason we +# never load them automatically. +blacklist aty128fb +blacklist atyfb +#blacklist radeonfb +blacklist cirrusfb +blacklist cyber2000fb +blacklist cyblafb +blacklist gx1fb +blacklist hgafb +blacklist i810fb +blacklist intelfb +blacklist kyrofb +blacklist lxfb +blacklist matroxfb_base +blacklist neofb +blacklist nvidiafb +blacklist pm2fb +blacklist rivafb +blacklist s1d13xxxfb +blacklist savagefb +blacklist sisfb +blacklist sstfb +blacklist tdfxfb +blacklist tridentfb +#blacklist vesafb +blacklist vfb +blacklist viafb +blacklist vt8623fb diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox new file mode 100755 index 00000000..da2dc637 Binary files /dev/null and b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox new file mode 100755 index 00000000..d04890f6 Binary files /dev/null and b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root new file mode 100755 index 00000000..aecb5e32 Binary files /dev/null and b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions new file mode 100644 index 00000000..2610f79a --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions @@ -0,0 +1,461 @@ +# -*- shell-script -*- + +catenate_cpiogz() { + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 + return + fi + + cat "${1}" >>"${__TMPCPIOGZ}" +} + +force_load() +{ + manual_add_modules ${@} + echo "${@}" >>"${DESTDIR}/conf/modules" +} + +# Takes a file containing a list of modules to be added as an +# argument, figures out dependancies, and adds them. +# +# Input file syntax: +# +# # comment +# modprobe_module_name [args ...] +# [...] +# +add_modules_from_file() +{ + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 + return + fi + + sed -e '/^#/d' ${1} | while read module rest; do + force_load "${module}" "${rest}" + done +} + +# Is this module available? +have_module() +{ + modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" >/dev/null 2>&1 +} + +# Add dependent modules + eventual firmware +manual_add_modules() +{ + local mam_x firmwares firmware + + for mam_x in $(modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do + # Prune duplicates + if [ -e "${DESTDIR}/${mam_x}" ]; then + continue + fi + + mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" + ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" + if [ "${verbose}" = "y" ]; then + echo "Adding module ${mam_x}" + fi + + # Add firmware files if necessary + firmwares=$(modinfo -F firmware "${mam_x}") + if [ -z "${firmwares}" ]; then + continue + fi + for firmware in $firmwares; do + if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ + || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then + continue + fi + + # Only print warning for missing fw of loaded module + # or forced loaded module + if [ ! -e "/lib/firmware/${firmware}" ] \ + && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then + if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ + /proc/modules \ + || grep -q "^$(basename "${mam_x}" .ko)" \ + "${CONFDIR}/modules"; then + echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 + fi + continue + fi + + if [ -e "/lib/firmware/${version}/${firmware}" ]; then + copy_exec "/lib/firmware/${version}/${firmware}" + else + copy_exec "/lib/firmware/${firmware}" + fi + if [ "${verbose}" = "y" ]; then + echo "Adding firmware ${firmware}" + fi + done + done +} + +# $1 is the source path (e.g. /usr/bin/time) +# $2 is the relative destination (e.g. /usr or /usr/time) +# +# The destination is interpreted in the same way "cp" would, meaning +# (assuming /bin is a directory): +# +# "copy_exec /usr/bin/time /bin" -> /bin/time +# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime +# +# If $2 is left out, the same destination path as for the source arg will +# be used and directories will be created as needed, so: +# +# "copy_exec /usr/bin/time" -> /usr/bin/time +# +copy_exec() { + local source target destination final_destination x nonoptlib + local libname dirname + + source="${1}" + if [ -n "${2}" ]; then + target="${2}" + else + if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then + mkdir -p "${DESTDIR}/$(dirname "${1}")" + fi + target="${1}" + fi + + if [ -d "${DESTDIR}/${target}" ]; then + destination="${target}/$(basename "${source}")" + else + destination="${target}" + fi + final_destination="${DESTDIR}/${destination}" + + if [ -L "$final_destination" ]; then + if [ $(readlink "${final_destination}") != "${source}" ]; then + echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 + return + fi + else + ln -s ${source} ${DESTDIR}/${destination} + if [ "${verbose}" = "y" ]; then + echo "Adding binary ${source}" + fi + fi + + # Copy the dependant libraries + for x in $(ldd ${source} 2>/dev/null | sed -e ' + /\//!d; + /linux-gate/d; + /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; + s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do + + # Try to use non-optimised libraries where possible. + # We assume that all HWCAP libraries will be in tls, + # sse2, vfp or neon + nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') + + if [ -e "${nonoptlib}" ]; then + x="${nonoptlib}" + fi + + libname=$(basename "${x}") + dirname=$(dirname "${x}") + + mkdir -p "${DESTDIR}/${dirname}" + if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then + ln -s "${x}" "${DESTDIR}/${dirname}" + if [ "${verbose}" = "y" ]; then + echo "Adding library ${x}" + fi + fi + done +} + +# Copy entire subtrees to the initramfs +copy_modules_dir() +{ + local x_mod + + if ! [ -d "${MODULESDIR}/${1}" ]; then + return; + fi + if [ "${verbose}" = "y" ]; then + echo "Copying module directory ${1}" + fi + for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do + manual_add_modules $(basename ${x_mod} .ko) + done +} + +# walk /sys for relevant modules +sys_walk_mod_add() +{ + local driver_path module + device_path="$1" + + while [ "${device_path}" != "/sys" ]; do + driver_path="$(readlink -f ${device_path}/driver)" + if [ -e "$driver_path" ]; then + module="$(basename $(readlink -f $driver_path))" + if [ -n "${module}" ]; then + force_load "${module}" + fi + fi + device_path="$(dirname ${device_path})" + done +} + +# walk /sys for relevant modalias +sys_walk_modalias() +{ + local device_path modalias + + device_path="$(dirname "${1}")" + device_path="$(dirname "${device_path}")" + if [ -e "${device_path}/modalias" ]; then + modalias=$(cat "${device_path}/modalias") + fi + + if [ -n "${modalias}" ]; then + force_load "${modalias}" + fi +} + +# find and only copy root relevant modules +dep_add_modules() +{ + local block minor root FSTYPE root_dev_path x + + # findout root block device + fstype + eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" + if [ "${root}" = "/dev/root" ] ; then + root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null + fi + root="$(readlink -f ${root})" + + # find out real rootfs on auto type + if [ "${FSTYPE}" = "auto" ]; then + eval "$(/usr/lib/klibc/bin/fstype ${root})" + fi + + # check that fstype rootfs recognition + if [ "${FSTYPE}" = "unknown" ]; then + echo "mkinitramfs: unknown fstype on root ${root}" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report bug on initramfs-tools" + exit 1 + fi + + # Add rootfs + manual_add_modules "${FSTYPE}" + + # lvm luks root + if [ "${root#/dev/mapper/}" != "${root}" ]; then + minor=$((0x$(stat --format "%T" ${root}) % 256)) + block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) + if [ "${block#dm-}" != "${block}" ]; then + block=$(ls -1 /sys/block/${block}/slaves | head -n 1) + fi + block=${block%%[0-9]*} + # md root new naming scheme /dev/md/X + elif [ "${root#/dev/md/}" != "${root}" ]; then + root=${root#/dev/md/} + block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # md root /dev/mdX + elif [ "${root#/dev/md}" != "${root}" ]; then + root=${root#/dev/} + block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # mmc always uses numbering in the devicename (mmcblk[0-9]) + elif [ "${root#/dev/mmc}" != "${root}" ]; then + block=${root#/dev/} + block=${block%%p[0-9]*} + # classical root device + else + block=${root#/dev/} + block=${block%%[0-9]*} + fi + + # Error out if /sys lack block dev + if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then + echo "mkinitramfs: missing ${block} root ${root} /sys entry" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report the bug" + exit 1 + fi + + # sys walk ATA + root_dev_path=$(readlink -f /sys/block/${block}/device) + sys_walk_mod_add ${root_dev_path} + + # catch old-style IDE + if [ -e /sys/bus/ide/devices/ ]; then + sys_walk_modalias ${root_dev_path} + manual_add_modules ide-disk + manual_add_modules ide-cd + fi + + if [ -e /sys/bus/scsi/devices/ ]; then + manual_add_modules sd_mod + fi + + if [ -e /sys/bus/i2o/devices/ ]; then + force_load i2o_block + force_load i2o_config + fi + + if [ -e /sys/bus/ps3_system_bus/ ]; then + for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do + manual_add_modules "${x}" + done + fi + + if [ -e /sys/bus/vio/ ]; then + for x in sunvnet sunvdc; do + manual_add_modules "${x}" + done + fi +} + + +# The modules "most" classes added per default to the initramfs +auto_add_modules() +{ + case "$1" in + base) + for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ + hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ + hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ + hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ + hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ + ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ + virtio_pci vfat nls_cp437 nls_iso8859-1; do + manual_add_modules "${x}" + done + ;; + net) + for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ + cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ + ep93xx_eth eql fealnx famachi forcedeth gelic_net \ + hp100 igb ipg mace mv643xx_eth myri10ge \ + natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ + r8169 s2io sis900 skge sky2 slhc smc911x starfire \ + sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ + de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ + typhon via-rhine via-velocity virtio_net yellowfin; do + manual_add_modules "${x}" + done + ;; + ide) + copy_modules_dir kernel/drivers/ide + ;; + scsi) + copy_modules_dir kernel/drivers/scsi + for x in mptfc mptsas mptscsih mptspi; do + manual_add_modules "${x}" + done + ;; + ata) + copy_modules_dir kernel/drivers/ata + ;; + block) + copy_modules_dir kernel/drivers/block + copy_modules_dir kernel/drivers/usb/storage + ;; + # FIXME: can be removed after Lenny release + ieee1394) + for x in ohci1394 sbp2; do + manual_add_modules "${x}" + done + ;; + firewire) + for x in firewire-ohci firewire-sbp2; do + manual_add_modules "${x}" + done + ;; + i2o) + for x in i2o_block; do + manual_add_modules "${x}" + done + ;; + dasd) + for x in dasd_eckd_mod dasd_fba_mod; do + manual_add_modules "${x}" + done + ;; + *) + auto_add_modules base + auto_add_modules net + auto_add_modules ide + auto_add_modules scsi + auto_add_modules block + auto_add_modules ata + auto_add_modules i2o + auto_add_modules dasd + auto_add_modules ieee1394 + auto_add_modules firewire + ;; + esac +} + +usage() +{ + cat >&2 << EOF + +Usage: ${0} [OPTION]... <-o outfile> [version] + +Options: + -d confdir Specify an alternative configuration directory. + -k Keep temporary directory used to make the image. + -o outfile Write to outfile. + -r root Override ROOT setting in mkinitrd.conf. + +See mkinitramfs(8) for further details. +EOF + exit 1 + +} + +# minimal supported kernel version +check_minkver() +{ + local curversion initdir DPKG_ARCH minversion cm_x tmp + + curversion="${1}" + initdir="${2}" + if [ -z "${initdir}" ]; then + DPKG_ARCH=$(dpkg --print-architecture) + case ${DPKG_ARCH} in + ia64|hppa) + minversion="2.6.15" + ;; + *) + minversion="2.6.12" + ;; + esac + if dpkg --compare-versions "${curversion}" lt "${minversion}"; then + echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + return 0 + fi + set_initlist + for cm_x in ${initlist}; do + # sed: keep last line starting with MINKVER=, + # remove MINKVER= and trailing space + minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") + if [ -z "${tmp}" ]; then + continue + elif dpkg --compare-versions "${curversion}" lt "${minver}"; then + echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + done +} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache new file mode 100755 index 00000000..37fdd22e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache @@ -0,0 +1,95 @@ +#!/bin/sh +set -e + +if [ "$1" = prereqs ]; then + exit 0 +fi + +. /usr/share/initramfs-tools/hook-functions + +number= +suffix= +eval $(printf "%s" "$COMPCACHE_SIZE" | \ + sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') + +if [ -z "$number" ] || [ -z "$suffix" ]; then + exit 0 +fi + +if have_module ramzswap; then + name=ramzswap + manual_add_modules ramzswap +elif have_module compcache; then + name=compcache + manual_add_modules compcache +else + exit 0 +fi + +copy_exec /sbin/swapon + +mkdir -p "$DESTDIR"/etc/udev/rules.d +cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." + +# Note that this only becomes /dev on the real filesystem if udev's scripts +# are used; which they will be, but it's worth pointing out +if ! mount -t devtmpfs -o mode=0755 none /dev; then + mount -t tmpfs -o mode=0755 none /dev + mknod -m 0600 /dev/console c 5 1 + mknod /dev/null c 1 3 +fi +mkdir /dev/pts +mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true +> /dev/.initramfs-tools +mkdir /dev/.initramfs + +# Export the dpkg architecture +export DPKG_ARCH= +. /conf/arch.conf + +# Set modprobe env +export MODPROBE_OPTIONS="-qb" + +# Export relevant variables +export ROOT= +export ROOTDELAY= +export ROOTFLAGS= +export ROOTFSTYPE= +export IPOPTS= +export HWADDR= +export break= +export init=/sbin/init +export quiet=n +export readonly=y +export rootmnt=/root +export debug= +export panic= +export blacklist= +export resume_offset= + +# Bring in the main config +. /conf/initramfs.conf +for conf in conf/conf.d/*; do + [ -f ${conf} ] && . ${conf} +done +. /scripts/functions + +# Parse command line options +for x in $(cat /proc/cmdline); do + case $x in + init=*) + init=${x#init=} + ;; + root=*) + ROOT=${x#root=} + case $ROOT in + LABEL=*) + ROOT="${ROOT#LABEL=}" + + # support / in LABEL= paths (escape to \x2f) + case "${ROOT}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" + else + if [ "${ROOT}" != "${ROOT#/}" ]; then + ROOT="\x2f${ROOT#/}" + fi + if [ "${ROOT}" != "${ROOT%/}" ]; then + ROOT="${ROOT%/}\x2f" + fi + IFS='/' + newroot= + for s in $ROOT; do + if [ -z "${newroot}" ]; then + newroot="${s}" + else + newroot="${newroot}\\x2f${s}" + fi + done + unset IFS + ROOT="${newroot}" + fi + esac + ROOT="/dev/disk/by-label/${ROOT}" + ;; + UUID=*) + ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" + ;; + /dev/nfs) + [ -z "${BOOT}" ] && BOOT=nfs + ;; + esac + ;; + rootflags=*) + ROOTFLAGS="-o ${x#rootflags=}" + ;; + rootfstype=*) + ROOTFSTYPE="${x#rootfstype=}" + ;; + rootdelay=*) + ROOTDELAY="${x#rootdelay=}" + case ${ROOTDELAY} in + *[![:digit:].]*) + ROOTDELAY= + ;; + esac + ;; + resumedelay=*) + RESUMEDELAY="${x#resumedelay=}" + ;; + loop=*) + LOOP="${x#loop=}" + ;; + loopflags=*) + LOOPFLAGS="-o ${x#loopflags=}" + ;; + loopfstype=*) + LOOPFSTYPE="${x#loopfstype=}" + ;; + cryptopts=*) + cryptopts="${x#cryptopts=}" + ;; + nfsroot=*) + NFSROOT="${x#nfsroot=}" + ;; + netboot=*) + NETBOOT="${x#netboot=}" + ;; + ip=*) + IPOPTS="${x#ip=}" + ;; + hwaddr=*) + HWADDR="${x#hwaddr=}" + ;; + boot=*) + BOOT=${x#boot=} + ;; + resume=*) + RESUME="${x#resume=}" + ;; + resume_offset=*) + resume_offset="${x#resume_offset=}" + ;; + noresume) + noresume=y + ;; + panic=*) + panic="${x#panic=}" + case ${panic} in + *[![:digit:].]*) + panic= + ;; + esac + ;; + quiet) + quiet=y + ;; + ro) + readonly=y + ;; + rw) + readonly=n + ;; + debug) + debug=y + quiet=n + exec >/dev/.initramfs/initramfs.debug 2>&1 + set -x + ;; + debug=*) + debug=y + quiet=n + set -x + ;; + break=*) + break=${x#break=} + ;; + break) + break=premount + ;; + blacklist=*) + blacklist=${x#blacklist=} + ;; + netconsole=*) + netconsole=${x#netconsole=} + ;; + esac +done + +if [ -z "${noresume}" ]; then + export resume=${RESUME} +else + export noresume +fi + +[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} + +maybe_break top + +# export BOOT variable value for compcache, +# so we know if we run from casper +export BOOT + +# Don't do log messages here to avoid confusing usplash +run_scripts /scripts/init-top + +maybe_break modules +log_begin_msg "Loading essential drivers..." +load_modules +log_end_msg + +maybe_break premount +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" +run_scripts /scripts/init-premount +[ "$quiet" != "y" ] && log_end_msg + +maybe_break mount +log_begin_msg "Mounting root file system..." +. /scripts/${BOOT} +parse_numeric ${ROOT} +mountroot +log_end_msg + +maybe_break bottom +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" +run_scripts /scripts/init-bottom +[ "$quiet" != "y" ] && log_end_msg + +# Move virtual filesystems over to the real filesystem +mount -n -o move /sys ${rootmnt}/sys +mount -n -o move /proc ${rootmnt}/proc + +# Check init bootarg +if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then + echo "Target filesystem doesn't have ${init}." + init= +fi + +# Search for valid init +if [ -z "${init}" ] ; then + for init in /sbin/init /etc/init /bin/init /bin/sh; do + if [ ! -x "${rootmnt}${init}" ]; then + continue + fi + break + done +fi + +# No init on rootmount +if [ ! -x "${rootmnt}${init}" ]; then + panic "No init found. Try passing init= bootarg." +fi + +# Confuses /etc/init.d/rc +if [ -n ${debug} ]; then + unset debug +fi + +# Chain to real filesystem +maybe_break init +exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 +panic "Could not execute run-init." diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules new file mode 100644 index 00000000..9aa46468 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules @@ -0,0 +1,10 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions new file mode 100644 index 00000000..3bea0c97 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions @@ -0,0 +1,420 @@ +# -*- shell-script -*- + +_log_msg() +{ + if [ "$quiet" = "y" ]; then return; fi + echo "$@" +} + +log_success_msg() +{ + _log_msg "Success: $@" +} + +log_failure_msg() +{ + _log_msg "Failure: $@" +} + +log_warning_msg() +{ + _log_msg "Warning: $@" +} + +log_begin_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TEXT $@" + fi + _log_msg "Begin: $@ ..." +} + +log_end_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "SUCCESS ok" + fi + _log_msg "Done." +} + +# Add failure hook +add_mountroot_fail_hook() +{ + mkdir -p /tmp/mountroot-fail-hooks.d + ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" +} + +# Run failure hooks. +# When a failure hook exits "1", it has not done anything to correct the +# system. Exiting "0" means that something has been attempted to resolve +# the lack of a root filesystem. +# Hooks are run in lexigraphical order, and are responsible for removing +# themselves if they should not re-run in a later cycle. When one exits +# "0", the stack is stopped, so the caller can return to the main rootfs +# wait loop. +try_failure_hooks() +{ + local hook + + # Disable usplash so text from hooks can be seen + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + for hook in /tmp/mountroot-fail-hooks.d/*; do + if [ -x ${hook} ] && ${hook} mountfail; then + return 0 + fi + done + return 1 +} + +panic() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + # Disallow console access + if [ -n "${panic}" ]; then + sleep ${panic} + reboot + fi + + modprobe i8042 + modprobe atkbd + + run_scripts /scripts/panic + + echo $@ + PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 +} + +maybe_break() +{ + if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then + panic "Spawning shell within the initramfs" + fi +} + +render() +{ + eval "echo -n \${$@}" +} + +set_initlist() +{ + unset initlist + for si_x in ${initdir}/*; do + # skip empty dirs without warning + [ "${si_x}" = "${initdir}/*" ] && return + + # only allow variable name chars + case ${si_x#${initdir}/} in + *[![:alnum:]_]*) + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not alphanumeric or '_' file" + continue + ;; + esac + + # skip non executable scripts + if [ ! -x ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not executable" + continue + fi + + # skip directories + if [ -d ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: a directory" + continue + fi + + initlist="${initlist} ${si_x#${initdir}/}" + done +} + +reduce_satisfied() +{ + deplist="$(render array_${1})" + unset tmpdeplist + for rs_y in ${deplist}; do + # check if there are alternatives + case ${rs_y} in + *\|*) + OLD_IFS="$IFS" + IFS="|" + for rs_z in ${rs_y}; do + IFS="$OLD_IFS" + # only allow variable name chars + case ${rs_z} in + *[![:alnum:]_]*) + IFS="|" + continue + ;; + esac + # skip non executable scripts + if [ ! -x ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + # skip directories + if [ -d ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + tmpdeplist="${tmpdeplist} ${rs_z}" + break + done + IFS="$OLD_IFS" + ;; + *) + case ${rs_y} in + *[![:alnum:]_]*) + continue + ;; + esac + if [ ! -x ${initdir}/${rs_y} ]; then + continue + fi + if [ -d ${initdir}/${rs_y} ]; then + continue + fi + tmpdeplist="${tmpdeplist} ${rs_y}" + ;; + esac + done + deplist=${tmpdeplist} + for rs_x in ${runlist}; do + pop_list_item ${rs_x} ${deplist} + deplist=${tmppop} + done + eval array_${1}=\"${deplist}\" +} + +get_prereqs() +{ + set_initlist + for gp_x in ${initlist}; do + tmp=$(${initdir}/${gp_x} prereqs) + eval array_${gp_x}=\"${tmp}\" + done +} + +count_unsatisfied() +{ + set -- ${@} + return ${#} +} + +# Removes $1 from initlist +pop_list_item() +{ + item=${1} + shift + set -- ${@} + unset tmppop + # Iterate + for pop in ${@}; do + if [ ${pop} = ${item} ]; then + continue + fi + tmppop="${tmppop} ${pop}" + done + +} + +# This function generates the runlist, so we clear it first. +reduce_prereqs() +{ + unset runlist + set -- ${initlist} + i=$# + # Loop until there's no more in the queue to loop through + while [ ${i} -ne 0 ]; do + oldi=${i} + for rp_x in ${initlist}; do + reduce_satisfied ${rp_x} + count_unsatisfied $(render array_${rp_x}) + cnt=${?} + if [ ${cnt} -eq 0 ]; then + runlist="${runlist} ${rp_x}" + pop_list_item ${rp_x} ${initlist} + initlist=${tmppop} + i=$((${i} - 1)) + fi + done + if [ ${i} -eq ${oldi} ]; then + panic "PANIC: Circular dependancy. Exiting." + fi + done +} + +get_prereq_pairs() +{ + set_initlist + for gp_x in ${initlist}; do + echo ${gp_x} ${gp_x} + prereqs=$(${initdir}/${gp_x} prereqs) + for prereq in ${prereqs}; do + echo ${prereq} ${gp_x} + done + done +} + +call_scripts() +{ + for cs_x in ${runlist}; do + [ -f ${initdir}/${cs_x} ] || continue + if [ x"$1" = "xoptional" ]; then + option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") + [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue + fi + + # mkinitramfs verbose output + if [ "${verbose}" = "y" ]; then + echo "Calling hook ${cs_x}" + fi + ${initdir}/${cs_x} + # allow boot scripts to modify exported boot paramaters + if [ -e /conf/param.conf ]; then + . /conf/param.conf + fi + done +} + +run_scripts() +{ + initdir=${1} + [ ! -d ${initdir} ] && return + + if [ -f ${initdir}/ORDER ]; then + . ${initdir}/ORDER + elif [ -x /usr/bin/tsort ]; then + runlist=$(get_prereq_pairs | tsort) + call_scripts $2 + else + get_prereqs + reduce_prereqs + call_scripts $2 + fi +} + +cache_run_scripts() +{ + DESTDIR=${1} + scriptdir=${2} + initdir=${DESTDIR}${scriptdir} + [ ! -d ${initdir} ] && return + + runlist=$(get_prereq_pairs | tsort) + for crs_x in ${runlist}; do + [ -f ${initdir}/${crs_x} ] || continue + echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER + echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER + done +} + +# Load custom modules first +load_modules() +{ + if [ -e /conf/modules ]; then + cat /conf/modules | while read m; do + # Skip empty lines + if [ -z "$m" ]; then + continue + fi + # Skip comments - d?ash removes whitespace prefix + com=$(printf "%.1s" "${m}") + if [ "$com" = "#" ]; then + continue + fi + modprobe $m + done + fi +} + +# lilo compatibility +parse_numeric() { + case $1 in + "") + return + ;; + /*) + return + ;; + *:*) + minor=${1#*:} + major=${1%:*} + ;; + *) + value=$(( 0x${1} )) + minor=$(( ${value} % 256 )) + major=$(( ${value} / 256 )) + ;; + esac + + mknod -m 600 /dev/root b ${major} ${minor} + ROOT=/dev/root +} + +configure_networking() +{ + # networking already configured thus bail out + [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 + + if [ "${HWADDR}" ]; then + # select interface by MAC address + HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" + local iface + for iface in /sys/class/net/*; do + [ -f "$iface/address" ] || continue + if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then + DEVICE="${iface#/sys/class/net/}" + fi + done + fi + + # support ip options see linux sources + # Documentation/filesystems/nfsroot.txt + case ${IPOPTS} in + none|off) + # Do nothing + ;; + ""|on|any) + # Bring up device + ipconfig -t 60 ${DEVICE} + ;; + dhcp|bootp|rarp|both) + ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} + ;; + *) + ipconfig -t 60 -d $IPOPTS + + # grab device entry from ip option + NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac + + # source ipconfig output + if [ -n "${DEVICE}" ]; then + # source specific bootdevice + . /tmp/net-${DEVICE}.conf + else + # source any interface as not exaclty specified + . /tmp/net-*.conf + fi +} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth new file mode 100755 index 00000000..8b1e7c8a --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth @@ -0,0 +1,21 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] +then + /bin/plymouth update-root-fs --new-root-dir=${rootmnt} +fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev new file mode 100755 index 00000000..f9d2ce9d --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev @@ -0,0 +1,24 @@ +#!/bin/sh -e +# initramfs init-bottom script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Stop udevd, we'll miss a few events while we run init, but we catch up +pkill udevd + +# Move /dev to the real filesystem +mount -n -o move /dev ${rootmnt}/dev diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 new file mode 100755 index 00000000..e5bc78f1 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 @@ -0,0 +1,41 @@ +#!/bin/sh + +# init-premount script for lvm2. + +PREREQS="udev mdadm" +prereqs() +{ + echo $PREREQS +} + +mountroot_fail() +{ + if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then + cat </dev/null; then + modprobe ata_generic all_generic_ide=1 +fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist new file mode 100755 index 00000000..5e6b3c1e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist @@ -0,0 +1,34 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +# blacklist vga16fb when vga= or video= given +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*|video=*) + echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs + ;; + esac +done + +# sanity check +[ -z "${blacklist}" ] && exit 0 + +# write blacklist to modprobe.d +IFS=',' +for b in ${blacklist}; do + echo "blacklist $b" >> /etc/modprobe.d/initramfs +done diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup new file mode 100755 index 00000000..df767bb4 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup @@ -0,0 +1,83 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +OPTION=FRAMEBUFFER +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer new file mode 100755 index 00000000..bb59aadf --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer @@ -0,0 +1,104 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + + +# The options part of the kernel "video=" argument (i.e. everyting +# after "video=:") has very inconsistent rules. +# +# Generally the following applies: +# 1) options are comma-separated +# 2) options can be in either of these three forms: +# =, :, . +# 3) the "mode" option has the form x[M][R][-][@][i][m] +# and may or may not start with "mode=" +# +# When the options are used with modules, they need to be space-separated +# and the following conversions are needed: +# : -> = +# -> =1 +# -> mode= +parse_video_opts() +{ + local OPTS="$1" + local IFS="," + + # Must be a line like video=:,[opt2]... + if [ "${OPTS}" = "${OPTS%%:*}" ]; then + return + fi + OPTS="${OPTS#*:}" + for opt in ${OPTS}; do + # Already in the "=" form + if [ "${opt}" != "${opt#*=}" ]; then + echo -n "$opt " + # In the ":" form + elif [ "${opt}" != "${opt#*:}" ]; then + echo -n "${opt%:*}=${opt#*:} " + # Presumably a modevalue without the "mode=" prefix + elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then + echo -n "mode=$opt " + # Presumably a boolean + else + echo -n "${opt}=1 " + fi + done +} + +FB="" +OPTS="" + +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*) + FB="vesafb"; + OPTS=""; + ;; + video=*) + FB=${x#*=} + FB="${FB%%:*}" + OPTS="$(parse_video_opts "${x}")" + esac +done + +# Map command line name to module name +case ${FB} in +matroxfb) + FB=matroxfb_base + ;; +esac + +if [ -n "${FB}" ]; then + # Some framebuffer devices need character devices :-/ + udevadm settle + MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} + # Wait for the framebuffer devices to be ready + udevadm settle +else + # If we have no graphics devices yet, wait for udev to settle + [ -d /sys/class/graphics/fbcon ] || udevadm settle + [ -d /sys/class/graphics/fb0 ] || udevadm settle + [ -d /sys/class/drm/card0 ] || udevadm settle +fi + +# Force fb mode via /sys interface +for x in $(cat /proc/cmdline); do + case ${x} in + fbmode=*) + MODE=${x#*=} + echo "$MODE" > /sys/class/graphics/fb0/mode + ;; + esac +done diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap new file mode 100755 index 00000000..cb67aa96 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap @@ -0,0 +1,28 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth new file mode 100755 index 00000000..813b6b4c --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth @@ -0,0 +1,20 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="framebuffer console_setup brltty" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +printf '\033[?25l' > /dev/tty7 +/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid +/bin/plymouth show-splash diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev new file mode 100755 index 00000000..cd2fa564 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev @@ -0,0 +1,30 @@ +#!/bin/sh -e +# initramfs init-top script for udev + +PREREQ="all_generic_ide blacklist" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# It's all over netlink now +echo "" > /proc/sys/kernel/hotplug + +# Start the udev daemon to process events +/sbin/udevd --daemon --resolve-names=never + +# Iterate sysfs and fire off everything; if we include a rule for it then +# it'll get handled; otherwise it'll get handled later when we do this again +# in the main boot sequence. +( /sbin/udevadm trigger --subsystem-match=block; \ + /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local new file mode 100644 index 00000000..865572b5 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local @@ -0,0 +1,131 @@ +# Local filesystem mounting -*- shell-script -*- + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" + run_scripts /scripts/local-top + [ "$quiet" != "y" ] && log_end_msg + + while [ -z "${FSTYPE}" ]; do + FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) + + # Run failure hooks, hoping one of them can fix up the system + # and we can restart the wait loop. If they all fail, abort + # and move on to the panic handler and shell. + if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then + break + fi + done + + # We've given up, but we'll let the user fix matters if they can + while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do + # give hint about renamed root + case "${ROOT}" in + /dev/hd*) + suffix="${ROOT#/dev/hd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/sd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" + fi + ;; + /dev/sd*) + suffix="${ROOT#/dev/sd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/hd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" + fi + ;; + esac + echo "Gave up waiting for root device. Common problems:" + echo " - Boot args (cat /proc/cmdline)" + echo " - Check rootdelay= (did the system wait long enough?)" + echo " - Check root= (did the system wait for the right device?)" + echo " - Missing modules (cat /proc/modules; ls /dev)" + panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" + done + + # Get the root filesystem type if not set + if [ -z "${ROOTFSTYPE}" ]; then + [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") + ROOTFSTYPE="${FSTYPE}" + else + FSTYPE="${ROOTFSTYPE}" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" + run_scripts /scripts/local-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ] && \ + [ -z "$LOOP" ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} + + # FIXME This has no error checking + # Mount root + mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} + mountroot_status="$?" + if [ "$LOOP" ]; then + if [ "$mountroot_status" != 0 ]; then + if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then + panic " +Could not mount the partition ${ROOT}. +This could also happen if the file system is not clean because of an operating +system crash, an interrupted boot process, an improper shutdown, or unplugging +of a removable device without first unmounting or ejecting it. To fix this, +simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then +gracefully shut down and reboot back into Windows. After this you should be +able to reboot again and resume the installation. +(filesystem = ${FSTYPE}, error code = $mountroot_status) +" + fi + fi + + mkdir -p /host + mount -o move ${rootmnt} /host + + while [ ! -e "/host/${LOOP#/}" ]; do + panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" + done + + # Get the loop filesystem type if not set + if [ -z "${LOOPFSTYPE}" ]; then + eval $(fstype < "/host/${LOOP#/}") + else + FSTYPE="${LOOPFSTYPE}" + fi + if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then + FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") + [ -z "$FSTYPE" ] && FSTYPE="unknown" + fi + + if [ ${readonly} = y ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + modprobe loop + modprobe ${FSTYPE} + + # FIXME This has no error checking + mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} + + if [ -d ${rootmnt}/host ]; then + mount -o move /host ${rootmnt}/host + fi + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" + run_scripts /scripts/local-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g new file mode 100755 index 00000000..335ef95e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g @@ -0,0 +1,16 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + mkdir -p /dev/.initramfs/varrun + pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit + pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit +fi + +exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc new file mode 100755 index 00000000..c9fbc369 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc @@ -0,0 +1,64 @@ +#!/bin/sh -e +# initramfs local-premount script for fixrtc + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +# use the fixrtc cmdline option in your bootloader to +# automatically set the hardware clock to the date of +# the last mount of your root filesystem to avoid fsck +# to get confused by the superblock being in the future + +BROKEN_CLOCK="" +ROOTDEV="" + +for x in $(cat /proc/cmdline); do + case ${x} in + root=*) + value=${x#*=} + + # Find the device node path depending on the form of root= : + + case ${value} in + UUID=*) + ROOTDEV=/dev/disk/by-uuid/${value#UUID=} + ;; + LABEL=*) + ROOTDEV=/dev/disk/by-label/${value#LABEL=} + ;; + *) + ROOTDEV=${value} + ;; + esac + ;; + fixrtc) + BROKEN_CLOCK=1 + ;; + esac +done + +if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then + ROOTDISK=$(readlink -f "$ROOTDEV") && + + TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && + TIME=${TIMESTR#*:} && + + date --set="${TIME} 1 minute" >/dev/null 2>&1 +fi + +# This script is best-effort. If we couldn't fudge the clock as desired, +# just try to carry on boot anyway: +# It will probably fail, but we won't have made the situation any worse. +exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g new file mode 100755 index 00000000..57e7f8ba --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g @@ -0,0 +1,14 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + modprobe fuse +fi + +exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume new file mode 100755 index 00000000..46535936 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume @@ -0,0 +1,75 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +. ./scripts/functions + +if [ -z "${resume}" ]; then + exit 0 +fi + +case $resume in +LABEL=*) + resume="${resume#LABEL=}" + + # support any / in LABEL= path (escape to \x2f) + case "${resume}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + resume="$(echo ${resume} | sed 's,/,\\x2f,g')" + else + if [ "${resume}" != "${resume#/}" ]; then + resume="\x2f${resume#/}" + fi + if [ "${resume}" != "${resume%/}" ]; then + resume="${resume%/}\x2f" + fi + IFS='/' + newresume= + for s in $resume; do + if [ -z "${newresume}" ]; then + newresume="${s}" + else + newresume="${newresume}\\x2f${s}" + fi + done + unset IFS + resume="${newresume}" + fi + esac + resume="/dev/disk/by-label/${resume}" + ;; +UUID=*) + resume="/dev/disk/by-uuid/${resume#UUID=}" + ;; +esac + +SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) + +case "${SWAPTYPE}" in + swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) + if [ -x /bin/plymouth ] && plymouth --ping; then + plymouth message --text="Resuming from $resume" + fi + + # hardcode path, uswsusp ships an resume binary too + if [ -n "${resume_offset}" ]; then + /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 + else + /bin/resume ${resume} >/dev/null 2>&1 + fi + ;; +esac diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs new file mode 100644 index 00000000..b9c2522d --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs @@ -0,0 +1,83 @@ +# NFS filesystem mounting -*- shell-script -*- + +# FIXME This needs error checking + +retry_nr=0 + +# parse nfs bootargs and mount nfs +do_nfsmount() +{ + + configure_networking + + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + + if [ -z "${NFSOPTS}" ]; then + NFSOPTS="-o retrans=10" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" + run_scripts /scripts/nfs-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ]; then + roflag="-o ro" + else + roflag="-o rw" + fi + + nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} +} + +# NFS root mounting +mountroot() +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" + run_scripts /scripts/nfs-top + [ "$quiet" != "y" ] && log_end_msg + + modprobe nfs + # For DHCP + modprobe af_packet + + # Default delay is around 180s + # FIXME: add usplash_write info + if [ -z "${ROOTDELAY}" ]; then + delay=180 + else + delay=${ROOTDELAY} + fi + + # loop until nfsmount succeds + while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do + [ ${retry_nr} -gt 0 ] && \ + [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" + do_nfsmount + retry_nr=$(( ${retry_nr} + 1 )) + [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 + [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg + done + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" + run_scripts /scripts/nfs-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev new file mode 100755 index 00000000..980e496f --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev @@ -0,0 +1,27 @@ +#!/bin/sh -e +# initramfs nfs-top script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Each call to udevsettle can take up to three minutes +if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TIMEOUT 360" + trap "/sbin/usplash_write 'TIMEOUT 15'" 0 +fi + +# We need to wait for the network card drivers to be loaded +/sbin/udevadm settle diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup new file mode 100755 index 00000000..5e97f65e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup @@ -0,0 +1,82 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap new file mode 100644 index 00000000..f011abf5 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap @@ -0,0 +1,27 @@ +#!/bin/sh + +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth new file mode 100755 index 00000000..2da5a6b5 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth @@ -0,0 +1,18 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +/bin/plymouth quit diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm new file mode 100644 index 00000000..11d27f8c --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm @@ -0,0 +1,18 @@ +# mdadm boot_degraded configuration +# +# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if +# you want. You can also change the values here and changes will be preserved. +# Do note that only the values are preserved; the rest of the file is +# rewritten. +# +# BOOT_DEGRADED: +# Do you want to boot your system if a RAID providing your root filesystem +# becomes degraded? +# +# Running a system with a degraded RAID could result in permanent data loss +# if it suffers another hardware fault. +# +# However, you might answer "yes" if this system is a server, expected to +# tolerate hardware faults and boot unattended. + +BOOT_DEGRADED=false diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume new file mode 100644 index 00000000..34fdc4a5 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume @@ -0,0 +1 @@ +RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks new file mode 100755 index 00000000..3d9b04b8 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks @@ -0,0 +1,40 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash + + +# Insert OpenGnsys Engine +mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf new file mode 100644 index 00000000..754e2bea --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf @@ -0,0 +1,72 @@ +# +# initramfs.conf +# Configuration file for mkinitramfs(8). See initramfs.conf(5). +# + +# +# MODULES: [ most | netboot | dep | list ] +# +# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. +# +# dep - Try and guess which modules to load. +# +# netboot - Add the base modules, network modules, but skip block devices. +# +# list - Only include modules from the 'additional modules' list +# + +MODULES=most + +# +# BUSYBOX: [ y | n ] +# +# Use busybox if available. +# + +BUSYBOX=y + +# +# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] +# +# Amount of RAM to use for RAM-based compressed swap space. +# +# An empty value - compcache isn't used, or added to the initramfs at all. +# An integer and K (e.g. 65536 K) - use a number of kilobytes. +# An integer and M (e.g. 256 M) - use a number of megabytes. +# An integer and G (e.g. 1 G) - use a number of gigabytes. +# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. +# +# You can optionally install the compcache package to configure this setting +# via debconf and have userspace scripts to load and unload compcache. +# + +COMPCACHE_SIZE="" + +# +# NFS Section of the config. +# + +# +# BOOT: [ local | nfs ] +# +# local - Boot off of local media (harddrive, USB stick). +# +# nfs - Boot using an NFS drive as the root of the drive. +# + +BOOT=local + +# +# DEVICE: ... +# +# Specify the network interface, like eth0 +# + +DEVICE=eth0 + +# +# NFSROOT: [ auto | HOST:MOUNT ] +# + +NFSROOT=auto + diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules new file mode 100644 index 00000000..484ef718 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules @@ -0,0 +1,13 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +fbcon +vesafb +vga16b diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og new file mode 100755 index 00000000..6408eda7 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og @@ -0,0 +1,140 @@ +# OpenGnsys Local filesystem mounting -*- shell-script -*- + +ogLinkBusybox () +{ +for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do + ln -f /bin/busybox /bin/$n +done +ln -f /bin/busybox /bin/sh +} + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + + mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +configure_networking +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + +set -a +trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 +/opt/opengnsys/etc/preinit/default.sh + + + + + + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + run_scripts /scripts/og-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf new file mode 100644 index 00000000..3c27473b --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf @@ -0,0 +1,20 @@ +# +# Configuration file for update-initramfs(8) +# + +# +# update_initramfs [ yes | all | no ] +# +# Default is yes +# If set to all update-initramfs will update all initramfs +# If set to no disables any update to initramfs beside kernel upgrade + +update_initramfs=yes + +# +# backup_initramfs [ yes | no ] +# +# Default is no +# If set to no leaves no .bak backup files. + +backup_initramfs=no diff --git a/client/ogClient/old/serverstructure/etc/exports.txt b/client/ogClient/old/serverstructure/etc/exports.txt new file mode 100644 index 00000000..d5053530 --- /dev/null +++ b/client/ogClient/old/serverstructure/etc/exports.txt @@ -0,0 +1 @@ +/var/lib/tftpboot/ *(ro,no_subtree_check,no_root_squash,sync) diff --git a/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt b/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt new file mode 100644 index 00000000..e47df3d8 --- /dev/null +++ b/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt @@ -0,0 +1,29 @@ +[tftpboot] + comment = el directorio fisico ogclient debe estar como escritura + writeable = no + read only = yes + #locking = no + path = /var/lib/tftpboot + guest ok = no + +[ogclient] + comment = client + read only = yes + locking = no + path = /opt/opengnsys/client + guest ok = no + +[oglog] + comment = log + read only = yes + locking = no + path = /opt/opengnsys/log/clients + guest ok = no + +[ogimages] + comment = images + read only = no + writeable = yes + locking = no + path = /opt/opengnsys/images + guest ok = no \ No newline at end of file diff --git a/client/ogClient/old/serverstructure/init/defaultTESTING.sh b/client/ogClient/old/serverstructure/init/defaultTESTING.sh new file mode 100755 index 00000000..07c10bcb --- /dev/null +++ b/client/ogClient/old/serverstructure/init/defaultTESTING.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +/etc/init.d/ssh restart +#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 + + +# Fichero de registro de incidencias (en el servidor; si no, en local). +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} +if ! touch $OGLOGFILE 2>/dev/null; then + OGLOGFILE=/var/log/opengnsys.log +fi + + +#TODO => activacion de modo escritura en REPO +ActiveAdmin=true +if [ $ActiveAdmin == "true" ] +then + export boot=admin + umount /opt/opengnsys/images + + if [ "$ogprotocol" == "nfs" ] + then + mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock + fi + + if [ "$ogprotocol" == "smb" ] + then + echo "montando smb" + mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og + echo mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og + + fi +fi +# Arranque de OpenGnSys Client. +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + + + echo "$MSG_LAUNCHCLIENT modo cliente full" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 +fi + +# Si fallo en cliente y modo "admin", cargar shell; si no, salir. +#if [ "$boot" == "admin" ]; then + bash +#fi diff --git a/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh b/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh new file mode 100755 index 00000000..3d291cc5 --- /dev/null +++ b/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Para que no haya problemas con el interprete +#ln -fs /opt/opengnsys/bin/bash /bin/bash + +set -a + +#source /opt/opengnsys/etc/preinit/loadenviron.sh +source /opt/opengnsys/etc/preinit/loadenvironTESTING.sh +#for f in fileslinks.sh loadudeb.sh loadmodules.sh metadevs.sh; do +for f in loadmodulesTESTING.sh; do + $OGETC/preinit/$f +done + +if [ -f $OGETC/init/$OG_IP.sh ]; then + $OGETC/init/$OG_IP.sh + +elif [ -f $OGETC/init/$OGGROUP.sh ]; then + $OGETC/init/$OGGROUP.sh + +elif [ -f $OGETC/init/defaultTESTING.sh ]; then + $OGETC/init/defaultTESTING.sh + +else + echo "No se ha encontrado script de inicio" + halt +fi diff --git a/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh b/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh new file mode 100755 index 00000000..1273db7f --- /dev/null +++ b/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh @@ -0,0 +1,95 @@ +#!/bin/bash +#/** +#@file loadenviron.sh +#@brief Script de carga de la API de funciones de OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + +# Idioma por defecto. +export LANG="${LANG:-es_ES}" + +# Directorios del projecto OpenGnSys. +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" +if [ -d $OPENGNSYS ]; then + export OGBIN=$OPENGNSYS/bin/testing + #export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + + #export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH + #export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH + + # Cargar fichero de idioma. + LANGFILE=$OGETC/lang.$LANG.conf + if [ -f $LANGFILE ]; then + source $LANGFILE + for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do + export $i + done + fi + echo "$MSG_LOADAPI" + # Cargar mapa de teclado. + loadkeys ${LANG%_*} >/dev/null + # Cargar API de funciones. + for i in $OGAPI/*.lib; do + source $i + done + for i in $(typeset -F | cut -f3 -d" "); do + export -f $i + done + + # Añadir dependencia de arquitectura + ARCH=$(ogGetArch) +# if [ -n "$ARCH" ]; then + # export PATH=$OGBIN/$ARCH:$PATH + # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH + # fi + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + # Carga de las API testing + if [ "$engine" = "testing" ] + then + for i in $OGAPI/*.testing; do + source $i + done + #export PATH=$PATH:$OGBIN/$ARCH-testing + fi + + # Fichero de registros. + export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + # FIXME Pruebas para grupos de ordenadores + #export OGGROUP=$(ogGetGroup) + export OGGROUP="$group" +fi + +# Declaración de códigos de error. +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + diff --git a/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh b/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh new file mode 100755 index 00000000..cea7d53a --- /dev/null +++ b/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh @@ -0,0 +1,28 @@ +#!/bin/bash +#/** +#@file loadmodules.sh +#@brief Script de inicio para cargar módulos complementarios del kernel. +#@version 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-01-26 +#*/ + + +MSG_LOADMODULES=${MSG_LOADMODULES:-"."} +echo "$MSG_LOADMODULES para cliente full" + +# Directorio principal de módulos del kernel. +MODULESDIR=/lib/modules/$(uname -r)/kernel + +# Módulo del ratón. +insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null +# Módulos de discos. +#for m in $MODULESDIR/drivers/ata/*.ko; do + # insmod $m 2>/dev/null +#done +# Módulos de sistemas de archivos. +#for f in reiserfs jfs xfs hfs hfsplus; do +#for f in reiserfs xfs hfs hfsplus; do +# insmod $MODULESDIR/fs/$f/$f.ko 2>/dev/null +#done + diff --git a/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL b/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL new file mode 100644 index 00000000..b7f81d0a --- /dev/null +++ b/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL @@ -0,0 +1,18 @@ +DEFAULT pxe-2.6.32-21-generic-pae + +LABEL pxe +KERNEL linux +APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin + +LABEL pxe-2.6.32-21-generic-pae +KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=nfs engine=testing + + +#NOTA: parametro boot: reservado para oginit INCOMPATIBLE CON BOOT=ADMIN +#NOTA: reposerver=$IPREPO correspondería a tu servidor Repositorio OG +#ogrepo=172.17.32.242 +#ip: +#og2nd=sqfs =>sqfs, img +#ogprotocol=nfs => nfs, smb +#engine=testing => activa las libreias testing de cada universidad. -- cgit v1.2.3-18-g5258 From ec42c34cdea55d8f3e18100272db25107dd8d8f2 Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:43:03 +0000 Subject: version1.0 client/ogClient eliminando directorio old git-svn-id: https://opengnsys.es/svn/branches/version1.0@1758 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../old/ModificacionesNecesiariasENGINE/Net.lib | 77 ---- .../old/ModificacionesNecesiariasENGINE/readme | 27 -- client/ogClient/old/Net.lib | 77 ---- client/ogClient/old/boot/default.sh | 23 - client/ogClient/old/boot/load2fs.sh | 19 - client/ogClient/old/conframfs.sh | 34 -- .../usr/lib/initramfs-tools/bin/busybox | Bin 1269432 -> 0 bytes .../usr/lib/initramfs-tools/busybox | Bin 223548 -> 0 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 9688 -> 0 bytes .../usr/share/initramfs-tools/hook-functions | 461 --------------------- .../usr/share/initramfs-tools/hooks/compcache | 95 ----- .../usr/share/initramfs-tools/hooks/console_setup | 50 --- .../usr/share/initramfs-tools/hooks/dmsetup | 23 - .../usr/share/initramfs-tools/hooks/fixrtc | 26 -- .../usr/share/initramfs-tools/hooks/framebuffer | 41 -- .../usr/share/initramfs-tools/hooks/fuse_utils | 15 - .../usr/share/initramfs-tools/hooks/kbd | 23 - .../usr/share/initramfs-tools/hooks/lvm2 | 43 -- .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 - .../usr/share/initramfs-tools/hooks/plymouth | 69 --- .../usr/share/initramfs-tools/hooks/thermal | 46 -- .../usr/share/initramfs-tools/hooks/udev | 52 --- .../usr/share/initramfs-tools/hooks/watershed | 25 -- .../usr/share/initramfs-tools/init | 272 ------------ .../usr/share/initramfs-tools/modules | 10 - .../usr/share/initramfs-tools/scripts/functions | 420 ------------------- .../initramfs-tools/scripts/init-bottom/plymouth | 21 - .../share/initramfs-tools/scripts/init-bottom/udev | 24 -- .../initramfs-tools/scripts/init-premount/lvm2 | 41 -- .../scripts/init-top/all_generic_ide | 18 - .../initramfs-tools/scripts/init-top/blacklist | 34 -- .../initramfs-tools/scripts/init-top/console_setup | 83 ---- .../initramfs-tools/scripts/init-top/framebuffer | 104 ----- .../share/initramfs-tools/scripts/init-top/keymap | 28 -- .../initramfs-tools/scripts/init-top/plymouth | 20 - .../share/initramfs-tools/scripts/init-top/udev | 30 -- .../usr/share/initramfs-tools/scripts/local | 131 ------ .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 - .../initramfs-tools/scripts/local-premount/fixrtc | 64 --- .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 - .../initramfs-tools/scripts/local-premount/resume | 75 ---- .../usr/share/initramfs-tools/scripts/nfs | 83 ---- .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 -- .../initramfs-tools/scripts/panic/console_setup | 82 ---- .../usr/share/initramfs-tools/scripts/panic/keymap | 27 -- .../share/initramfs-tools/scripts/panic/plymouth | 18 - .../ogClient/old/initramfs-tools-OG/conf.d/mdadm | 18 - .../ogClient/old/initramfs-tools-OG/conf.d/resume | 1 - .../ogClient/old/initramfs-tools-OG/hooks/oghooks | 40 -- .../ogClient/old/initramfs-tools-OG/initramfs.conf | 72 ---- client/ogClient/old/initramfs-tools-OG/modules | 13 - client/ogClient/old/initramfs-tools-OG/scripts/og | 140 ------- .../old/initramfs-tools-OG/update-initramfs.conf | 20 - client/ogClient/old/ogClientFunctions | 255 ------------ client/ogClient/old/ogClientGenerator.sh | 306 -------------- .../ModificacionesNecesiariasENGINE/Net.lib | 77 ---- .../ModificacionesNecesiariasENGINE/readme | 20 - client/ogClient/old/ogFSHlnk/boot/default.sh | 23 - client/ogClient/old/ogFSHlnk/boot/load2fs.sh | 19 - .../old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh | 395 ------------------ .../initramfs-tools-OG-unionfs/antonio/rcog | 137 ------ .../etc/initramfs-tools-OG/conf.d/resume | 1 - .../etc/initramfs-tools-OG/hooks/oghooks | 43 -- .../etc/initramfs-tools-OG/initramfs.conf | 72 ---- .../etc/initramfs-tools-OG/modules | 14 - .../etc/initramfs-tools-OG/scripts/og | 194 --------- .../etc/initramfs-tools-OG/update-initramfs.conf | 20 - .../initramfs-tools-OG-unionfs/etc/inittab | 14 - .../etc/modprobe.d/blacklist-framebuffer.conf | 30 -- .../usr/lib/initramfs-tools/bin/busybox | Bin 1269432 -> 0 bytes .../usr/lib/initramfs-tools/busybox | Bin 223548 -> 0 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 9688 -> 0 bytes .../usr/share/initramfs-tools/hook-functions | 461 --------------------- .../usr/share/initramfs-tools/hooks/compcache | 95 ----- .../usr/share/initramfs-tools/hooks/console_setup | 50 --- .../usr/share/initramfs-tools/hooks/dmsetup | 23 - .../usr/share/initramfs-tools/hooks/fixrtc | 26 -- .../usr/share/initramfs-tools/hooks/framebuffer | 41 -- .../usr/share/initramfs-tools/hooks/fuse_utils | 15 - .../usr/share/initramfs-tools/hooks/kbd | 23 - .../usr/share/initramfs-tools/hooks/lvm2 | 43 -- .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 - .../usr/share/initramfs-tools/hooks/plymouth | 69 --- .../usr/share/initramfs-tools/hooks/thermal | 46 -- .../usr/share/initramfs-tools/hooks/udev | 52 --- .../usr/share/initramfs-tools/hooks/watershed | 25 -- .../usr/share/initramfs-tools/init | 272 ------------ .../usr/share/initramfs-tools/modules | 10 - .../usr/share/initramfs-tools/scripts/functions | 420 ------------------- .../initramfs-tools/scripts/init-bottom/plymouth | 21 - .../share/initramfs-tools/scripts/init-bottom/udev | 24 -- .../initramfs-tools/scripts/init-premount/lvm2 | 41 -- .../scripts/init-top/all_generic_ide | 18 - .../initramfs-tools/scripts/init-top/blacklist | 34 -- .../initramfs-tools/scripts/init-top/console_setup | 83 ---- .../initramfs-tools/scripts/init-top/framebuffer | 104 ----- .../share/initramfs-tools/scripts/init-top/keymap | 28 -- .../initramfs-tools/scripts/init-top/plymouth | 20 - .../share/initramfs-tools/scripts/init-top/udev | 30 -- .../usr/share/initramfs-tools/scripts/local | 131 ------ .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 - .../initramfs-tools/scripts/local-premount/fixrtc | 64 --- .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 - .../initramfs-tools/scripts/local-premount/resume | 75 ---- .../usr/share/initramfs-tools/scripts/nfs | 83 ---- .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 -- .../initramfs-tools/scripts/panic/console_setup | 82 ---- .../usr/share/initramfs-tools/scripts/panic/keymap | 27 -- .../share/initramfs-tools/scripts/panic/plymouth | 18 - .../ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm | 18 - .../ogFSHlnk/old/initramfs-tools-OG/conf.d/resume | 1 - .../ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks | 40 -- .../ogFSHlnk/old/initramfs-tools-OG/initramfs.conf | 72 ---- .../old/ogFSHlnk/old/initramfs-tools-OG/modules | 13 - .../old/ogFSHlnk/old/initramfs-tools-OG/scripts/og | 140 ------- .../old/initramfs-tools-OG/update-initramfs.conf | 20 - .../ogClient/old/serverstructure/etc/exports.txt | 1 - .../old/serverstructure/etc/samba/smb.conf.txt | 29 -- .../old/serverstructure/init/defaultTESTING.sh | 46 -- .../old/serverstructure/preinit/defaultTESTING.sh | 27 -- .../serverstructure/preinit/loadenvironTESTING.sh | 95 ----- .../serverstructure/preinit/loadmodulesTESTING.sh | 28 -- .../serverstructure/var/lib/tftpboot/defaultFULL | 18 - 123 files changed, 7995 deletions(-) delete mode 100755 client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib delete mode 100644 client/ogClient/old/ModificacionesNecesiariasENGINE/readme delete mode 100755 client/ogClient/old/Net.lib delete mode 100755 client/ogClient/old/boot/default.sh delete mode 100644 client/ogClient/old/boot/load2fs.sh delete mode 100644 client/ogClient/old/conframfs.sh delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth delete mode 100644 client/ogClient/old/initramfs-tools-OG/conf.d/mdadm delete mode 100644 client/ogClient/old/initramfs-tools-OG/conf.d/resume delete mode 100755 client/ogClient/old/initramfs-tools-OG/hooks/oghooks delete mode 100644 client/ogClient/old/initramfs-tools-OG/initramfs.conf delete mode 100644 client/ogClient/old/initramfs-tools-OG/modules delete mode 100755 client/ogClient/old/initramfs-tools-OG/scripts/og delete mode 100644 client/ogClient/old/initramfs-tools-OG/update-initramfs.conf delete mode 100755 client/ogClient/old/ogClientFunctions delete mode 100755 client/ogClient/old/ogClientGenerator.sh delete mode 100755 client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib delete mode 100644 client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme delete mode 100755 client/ogClient/old/ogFSHlnk/boot/default.sh delete mode 100644 client/ogClient/old/ogFSHlnk/boot/load2fs.sh delete mode 100755 client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth delete mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm delete mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume delete mode 100755 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks delete mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf delete mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules delete mode 100755 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og delete mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf delete mode 100644 client/ogClient/old/serverstructure/etc/exports.txt delete mode 100644 client/ogClient/old/serverstructure/etc/samba/smb.conf.txt delete mode 100755 client/ogClient/old/serverstructure/init/defaultTESTING.sh delete mode 100755 client/ogClient/old/serverstructure/preinit/defaultTESTING.sh delete mode 100755 client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh delete mode 100755 client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh delete mode 100644 client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL diff --git a/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib b/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib deleted file mode 100755 index 14806b7e..00000000 --- a/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -#/** -#@file Net.lib -#@brief Librería o clase Net -#@class Net -#@brief Funciones básicas de red. -#@version 1.0 -#@warning License: GNU GPLv3+ -#*/ - - -#/** -# ogGetHostname -#@brief Muestra el nombre del cliente. -#@return str_host - nombre de máquina -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetHostname () -{ -local HOST NETFILE -# Tomar nombre de la variable HOSTNAME -HOST="$HOSTNAME" - -# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) -[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} - END {print host} - ' /var/lib/dhcp3/dhclient.leases) -# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ -[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} - $1~/hostname/ {print $2}' /proc/cmdline) - -[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" -echo $HOST -} - - -#/** -# ogGetIpAddress -#@brief Muestra la dirección IP del sistema -#@return str_ip - Dirección IP -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetIpAddress () -{ -local IP -#Version og2ndFS -NETFILE="/tmp/net-eth0.conf" -[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) - -# Obtener direcciones IP. /* (comentario para Doxygen) -[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') -# Mostrar sólo la primera. (comentario para Doxygen) */ -echo ${IP%% *} -} - - -#/** -# ogGetMacAddress -#@brief Muestra la dirección Ethernet del cliente. -#@return str_ether - Dirección Ethernet -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetMacAddress () -{ -local MAC -# Obtener direcciones Ethernet. -MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') -# Mostrar sólo la primera. -echo ${MAC%% *} -} - diff --git a/client/ogClient/old/ModificacionesNecesiariasENGINE/readme b/client/ogClient/old/ModificacionesNecesiariasENGINE/readme deleted file mode 100644 index 9078de1b..00000000 --- a/client/ogClient/old/ModificacionesNecesiariasENGINE/readme +++ /dev/null @@ -1,27 +0,0 @@ -Moverse al etc del cliente. -cd /opt/opengnsys/client/etc - -preinit/default - modificamos el sha-bang a /bin/bash - eliminamos enlace del bash - Ejecute solo el loadmodules del for - -preinit/loaenviron - comentamos el LD_PATH - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/opt/drbl/sbin - - -dejar en bin solo el browser y el ogadmcliente - -/var/lib/tftboot/pxelinux.cfg/default -DEFAULT pxe2 -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin -LABEL pxe2 -KERNEL vmlinuz-2.6.32-21-generic-pae -APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 - - -parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN -temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/ogClient/old/Net.lib b/client/ogClient/old/Net.lib deleted file mode 100755 index 14806b7e..00000000 --- a/client/ogClient/old/Net.lib +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -#/** -#@file Net.lib -#@brief Librería o clase Net -#@class Net -#@brief Funciones básicas de red. -#@version 1.0 -#@warning License: GNU GPLv3+ -#*/ - - -#/** -# ogGetHostname -#@brief Muestra el nombre del cliente. -#@return str_host - nombre de máquina -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetHostname () -{ -local HOST NETFILE -# Tomar nombre de la variable HOSTNAME -HOST="$HOSTNAME" - -# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) -[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} - END {print host} - ' /var/lib/dhcp3/dhclient.leases) -# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ -[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} - $1~/hostname/ {print $2}' /proc/cmdline) - -[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" -echo $HOST -} - - -#/** -# ogGetIpAddress -#@brief Muestra la dirección IP del sistema -#@return str_ip - Dirección IP -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetIpAddress () -{ -local IP -#Version og2ndFS -NETFILE="/tmp/net-eth0.conf" -[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) - -# Obtener direcciones IP. /* (comentario para Doxygen) -[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') -# Mostrar sólo la primera. (comentario para Doxygen) */ -echo ${IP%% *} -} - - -#/** -# ogGetMacAddress -#@brief Muestra la dirección Ethernet del cliente. -#@return str_ether - Dirección Ethernet -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetMacAddress () -{ -local MAC -# Obtener direcciones Ethernet. -MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') -# Mostrar sólo la primera. -echo ${MAC%% *} -} - diff --git a/client/ogClient/old/boot/default.sh b/client/ogClient/old/boot/default.sh deleted file mode 100755 index e8c5b5d2..00000000 --- a/client/ogClient/old/boot/default.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/opt/opengnsys/bin/bash - -set -a - -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} -#### FIXME EN PRUEBAS -OGLOGFILE=/var/log/opengnsys.log - -/opt/opengnsys/etc/init/load2fs.sh -source /opt/opengnsys/etc/preinit/loadenviron.sh -export PATH=/opt/og2fs/bin:$PATH -export PATH=/opt/og2fs/sbin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - echo "$MSG_LAUNCHCLIENT" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -fi - -bash -# FIXME Arranque Browser -#browser -qws $OGSTARTPAGE diff --git a/client/ogClient/old/boot/load2fs.sh b/client/ogClient/old/boot/load2fs.sh deleted file mode 100644 index ca3e3be7..00000000 --- a/client/ogClient/old/boot/load2fs.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -#/** -#@file load2fs.sh -#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Antonio J. Doblas Viso, Unviersidad de Malaga. -#@date 2010-02-15 -#*/ -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro -cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -export PATH=/opt/og2fs/sbin:$PATH -export PATH=/opt/og2fs/bin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/ogClient/old/conframfs.sh b/client/ogClient/old/conframfs.sh deleted file mode 100644 index 851928d5..00000000 --- a/client/ogClient/old/conframfs.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -#/** -#@file conframfs.sh -#@brief Script de inicio para configurar el 2º FileSystem linkado. -#@version 1.0 -#@author Antonio J. Doblas Viso. Universidad de Málaga -#@date 2010-06-02 -#*/ -#sustituido por la funcion ogPostConfigureFS - -MSG_LOADMODULES=${MSG_CONFRAMFS:-"."} -echo "$MSG_CONFRAMFS" - -# configuramos el /etc/hostname. -HOSTNAME=$(ogGetHostname) -echo $HOSTNAME > /etc/hostname - - -#configuramos el /etc/hosts -IP=$(ogGetIpAddress) -echo "127.0.0.1 localhost" > /etc/hosts -echo "$IP $HOSTNAME" >> /etc/hosts - -### conft net -echo "auto lo " > /etc/network/interfaces -echo "iface lo inet loopback" >> /etc/network/interfaces - - -mkdir -p /var/run/network -cd /var/run/network -touch ifstate - -/etc/init.d/networking restart -ifup lo diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox deleted file mode 100755 index da2dc637..00000000 Binary files a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox and /dev/null differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox deleted file mode 100755 index d04890f6..00000000 Binary files a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox and /dev/null differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root deleted file mode 100755 index aecb5e32..00000000 Binary files a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root and /dev/null differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions deleted file mode 100644 index 2610f79a..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions +++ /dev/null @@ -1,461 +0,0 @@ -# -*- shell-script -*- - -catenate_cpiogz() { - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 - return - fi - - cat "${1}" >>"${__TMPCPIOGZ}" -} - -force_load() -{ - manual_add_modules ${@} - echo "${@}" >>"${DESTDIR}/conf/modules" -} - -# Takes a file containing a list of modules to be added as an -# argument, figures out dependancies, and adds them. -# -# Input file syntax: -# -# # comment -# modprobe_module_name [args ...] -# [...] -# -add_modules_from_file() -{ - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 - return - fi - - sed -e '/^#/d' ${1} | while read module rest; do - force_load "${module}" "${rest}" - done -} - -# Is this module available? -have_module() -{ - modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" >/dev/null 2>&1 -} - -# Add dependent modules + eventual firmware -manual_add_modules() -{ - local mam_x firmwares firmware - - for mam_x in $(modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do - # Prune duplicates - if [ -e "${DESTDIR}/${mam_x}" ]; then - continue - fi - - mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" - ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" - if [ "${verbose}" = "y" ]; then - echo "Adding module ${mam_x}" - fi - - # Add firmware files if necessary - firmwares=$(modinfo -F firmware "${mam_x}") - if [ -z "${firmwares}" ]; then - continue - fi - for firmware in $firmwares; do - if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ - || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then - continue - fi - - # Only print warning for missing fw of loaded module - # or forced loaded module - if [ ! -e "/lib/firmware/${firmware}" ] \ - && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then - if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ - /proc/modules \ - || grep -q "^$(basename "${mam_x}" .ko)" \ - "${CONFDIR}/modules"; then - echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 - fi - continue - fi - - if [ -e "/lib/firmware/${version}/${firmware}" ]; then - copy_exec "/lib/firmware/${version}/${firmware}" - else - copy_exec "/lib/firmware/${firmware}" - fi - if [ "${verbose}" = "y" ]; then - echo "Adding firmware ${firmware}" - fi - done - done -} - -# $1 is the source path (e.g. /usr/bin/time) -# $2 is the relative destination (e.g. /usr or /usr/time) -# -# The destination is interpreted in the same way "cp" would, meaning -# (assuming /bin is a directory): -# -# "copy_exec /usr/bin/time /bin" -> /bin/time -# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime -# -# If $2 is left out, the same destination path as for the source arg will -# be used and directories will be created as needed, so: -# -# "copy_exec /usr/bin/time" -> /usr/bin/time -# -copy_exec() { - local source target destination final_destination x nonoptlib - local libname dirname - - source="${1}" - if [ -n "${2}" ]; then - target="${2}" - else - if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then - mkdir -p "${DESTDIR}/$(dirname "${1}")" - fi - target="${1}" - fi - - if [ -d "${DESTDIR}/${target}" ]; then - destination="${target}/$(basename "${source}")" - else - destination="${target}" - fi - final_destination="${DESTDIR}/${destination}" - - if [ -L "$final_destination" ]; then - if [ $(readlink "${final_destination}") != "${source}" ]; then - echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 - return - fi - else - ln -s ${source} ${DESTDIR}/${destination} - if [ "${verbose}" = "y" ]; then - echo "Adding binary ${source}" - fi - fi - - # Copy the dependant libraries - for x in $(ldd ${source} 2>/dev/null | sed -e ' - /\//!d; - /linux-gate/d; - /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; - s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do - - # Try to use non-optimised libraries where possible. - # We assume that all HWCAP libraries will be in tls, - # sse2, vfp or neon - nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') - - if [ -e "${nonoptlib}" ]; then - x="${nonoptlib}" - fi - - libname=$(basename "${x}") - dirname=$(dirname "${x}") - - mkdir -p "${DESTDIR}/${dirname}" - if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then - ln -s "${x}" "${DESTDIR}/${dirname}" - if [ "${verbose}" = "y" ]; then - echo "Adding library ${x}" - fi - fi - done -} - -# Copy entire subtrees to the initramfs -copy_modules_dir() -{ - local x_mod - - if ! [ -d "${MODULESDIR}/${1}" ]; then - return; - fi - if [ "${verbose}" = "y" ]; then - echo "Copying module directory ${1}" - fi - for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do - manual_add_modules $(basename ${x_mod} .ko) - done -} - -# walk /sys for relevant modules -sys_walk_mod_add() -{ - local driver_path module - device_path="$1" - - while [ "${device_path}" != "/sys" ]; do - driver_path="$(readlink -f ${device_path}/driver)" - if [ -e "$driver_path" ]; then - module="$(basename $(readlink -f $driver_path))" - if [ -n "${module}" ]; then - force_load "${module}" - fi - fi - device_path="$(dirname ${device_path})" - done -} - -# walk /sys for relevant modalias -sys_walk_modalias() -{ - local device_path modalias - - device_path="$(dirname "${1}")" - device_path="$(dirname "${device_path}")" - if [ -e "${device_path}/modalias" ]; then - modalias=$(cat "${device_path}/modalias") - fi - - if [ -n "${modalias}" ]; then - force_load "${modalias}" - fi -} - -# find and only copy root relevant modules -dep_add_modules() -{ - local block minor root FSTYPE root_dev_path x - - # findout root block device + fstype - eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" - if [ "${root}" = "/dev/root" ] ; then - root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null - fi - root="$(readlink -f ${root})" - - # find out real rootfs on auto type - if [ "${FSTYPE}" = "auto" ]; then - eval "$(/usr/lib/klibc/bin/fstype ${root})" - fi - - # check that fstype rootfs recognition - if [ "${FSTYPE}" = "unknown" ]; then - echo "mkinitramfs: unknown fstype on root ${root}" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report bug on initramfs-tools" - exit 1 - fi - - # Add rootfs - manual_add_modules "${FSTYPE}" - - # lvm luks root - if [ "${root#/dev/mapper/}" != "${root}" ]; then - minor=$((0x$(stat --format "%T" ${root}) % 256)) - block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) - if [ "${block#dm-}" != "${block}" ]; then - block=$(ls -1 /sys/block/${block}/slaves | head -n 1) - fi - block=${block%%[0-9]*} - # md root new naming scheme /dev/md/X - elif [ "${root#/dev/md/}" != "${root}" ]; then - root=${root#/dev/md/} - block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # md root /dev/mdX - elif [ "${root#/dev/md}" != "${root}" ]; then - root=${root#/dev/} - block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # mmc always uses numbering in the devicename (mmcblk[0-9]) - elif [ "${root#/dev/mmc}" != "${root}" ]; then - block=${root#/dev/} - block=${block%%p[0-9]*} - # classical root device - else - block=${root#/dev/} - block=${block%%[0-9]*} - fi - - # Error out if /sys lack block dev - if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then - echo "mkinitramfs: missing ${block} root ${root} /sys entry" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report the bug" - exit 1 - fi - - # sys walk ATA - root_dev_path=$(readlink -f /sys/block/${block}/device) - sys_walk_mod_add ${root_dev_path} - - # catch old-style IDE - if [ -e /sys/bus/ide/devices/ ]; then - sys_walk_modalias ${root_dev_path} - manual_add_modules ide-disk - manual_add_modules ide-cd - fi - - if [ -e /sys/bus/scsi/devices/ ]; then - manual_add_modules sd_mod - fi - - if [ -e /sys/bus/i2o/devices/ ]; then - force_load i2o_block - force_load i2o_config - fi - - if [ -e /sys/bus/ps3_system_bus/ ]; then - for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do - manual_add_modules "${x}" - done - fi - - if [ -e /sys/bus/vio/ ]; then - for x in sunvnet sunvdc; do - manual_add_modules "${x}" - done - fi -} - - -# The modules "most" classes added per default to the initramfs -auto_add_modules() -{ - case "$1" in - base) - for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ - hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ - hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ - hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ - hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ - ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ - virtio_pci vfat nls_cp437 nls_iso8859-1; do - manual_add_modules "${x}" - done - ;; - net) - for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ - cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ - ep93xx_eth eql fealnx famachi forcedeth gelic_net \ - hp100 igb ipg mace mv643xx_eth myri10ge \ - natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ - r8169 s2io sis900 skge sky2 slhc smc911x starfire \ - sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ - de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ - typhon via-rhine via-velocity virtio_net yellowfin; do - manual_add_modules "${x}" - done - ;; - ide) - copy_modules_dir kernel/drivers/ide - ;; - scsi) - copy_modules_dir kernel/drivers/scsi - for x in mptfc mptsas mptscsih mptspi; do - manual_add_modules "${x}" - done - ;; - ata) - copy_modules_dir kernel/drivers/ata - ;; - block) - copy_modules_dir kernel/drivers/block - copy_modules_dir kernel/drivers/usb/storage - ;; - # FIXME: can be removed after Lenny release - ieee1394) - for x in ohci1394 sbp2; do - manual_add_modules "${x}" - done - ;; - firewire) - for x in firewire-ohci firewire-sbp2; do - manual_add_modules "${x}" - done - ;; - i2o) - for x in i2o_block; do - manual_add_modules "${x}" - done - ;; - dasd) - for x in dasd_eckd_mod dasd_fba_mod; do - manual_add_modules "${x}" - done - ;; - *) - auto_add_modules base - auto_add_modules net - auto_add_modules ide - auto_add_modules scsi - auto_add_modules block - auto_add_modules ata - auto_add_modules i2o - auto_add_modules dasd - auto_add_modules ieee1394 - auto_add_modules firewire - ;; - esac -} - -usage() -{ - cat >&2 << EOF - -Usage: ${0} [OPTION]... <-o outfile> [version] - -Options: - -d confdir Specify an alternative configuration directory. - -k Keep temporary directory used to make the image. - -o outfile Write to outfile. - -r root Override ROOT setting in mkinitrd.conf. - -See mkinitramfs(8) for further details. -EOF - exit 1 - -} - -# minimal supported kernel version -check_minkver() -{ - local curversion initdir DPKG_ARCH minversion cm_x tmp - - curversion="${1}" - initdir="${2}" - if [ -z "${initdir}" ]; then - DPKG_ARCH=$(dpkg --print-architecture) - case ${DPKG_ARCH} in - ia64|hppa) - minversion="2.6.15" - ;; - *) - minversion="2.6.12" - ;; - esac - if dpkg --compare-versions "${curversion}" lt "${minversion}"; then - echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - return 0 - fi - set_initlist - for cm_x in ${initlist}; do - # sed: keep last line starting with MINKVER=, - # remove MINKVER= and trailing space - minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") - if [ -z "${tmp}" ]; then - continue - elif dpkg --compare-versions "${curversion}" lt "${minver}"; then - echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - done -} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache deleted file mode 100755 index 37fdd22e..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -set -e - -if [ "$1" = prereqs ]; then - exit 0 -fi - -. /usr/share/initramfs-tools/hook-functions - -number= -suffix= -eval $(printf "%s" "$COMPCACHE_SIZE" | \ - sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') - -if [ -z "$number" ] || [ -z "$suffix" ]; then - exit 0 -fi - -if have_module ramzswap; then - name=ramzswap - manual_add_modules ramzswap -elif have_module compcache; then - name=compcache - manual_add_modules compcache -else - exit 0 -fi - -copy_exec /sbin/swapon - -mkdir -p "$DESTDIR"/etc/udev/rules.d -cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." - -# Note that this only becomes /dev on the real filesystem if udev's scripts -# are used; which they will be, but it's worth pointing out -if ! mount -t devtmpfs -o mode=0755 none /dev; then - mount -t tmpfs -o mode=0755 none /dev - mknod -m 0600 /dev/console c 5 1 - mknod /dev/null c 1 3 -fi -mkdir /dev/pts -mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true -> /dev/.initramfs-tools -mkdir /dev/.initramfs - -# Export the dpkg architecture -export DPKG_ARCH= -. /conf/arch.conf - -# Set modprobe env -export MODPROBE_OPTIONS="-qb" - -# Export relevant variables -export ROOT= -export ROOTDELAY= -export ROOTFLAGS= -export ROOTFSTYPE= -export IPOPTS= -export HWADDR= -export break= -export init=/sbin/init -export quiet=n -export readonly=y -export rootmnt=/root -export debug= -export panic= -export blacklist= -export resume_offset= - -# Bring in the main config -. /conf/initramfs.conf -for conf in conf/conf.d/*; do - [ -f ${conf} ] && . ${conf} -done -. /scripts/functions - -# Parse command line options -for x in $(cat /proc/cmdline); do - case $x in - init=*) - init=${x#init=} - ;; - root=*) - ROOT=${x#root=} - case $ROOT in - LABEL=*) - ROOT="${ROOT#LABEL=}" - - # support / in LABEL= paths (escape to \x2f) - case "${ROOT}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" - else - if [ "${ROOT}" != "${ROOT#/}" ]; then - ROOT="\x2f${ROOT#/}" - fi - if [ "${ROOT}" != "${ROOT%/}" ]; then - ROOT="${ROOT%/}\x2f" - fi - IFS='/' - newroot= - for s in $ROOT; do - if [ -z "${newroot}" ]; then - newroot="${s}" - else - newroot="${newroot}\\x2f${s}" - fi - done - unset IFS - ROOT="${newroot}" - fi - esac - ROOT="/dev/disk/by-label/${ROOT}" - ;; - UUID=*) - ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" - ;; - /dev/nfs) - [ -z "${BOOT}" ] && BOOT=nfs - ;; - esac - ;; - rootflags=*) - ROOTFLAGS="-o ${x#rootflags=}" - ;; - rootfstype=*) - ROOTFSTYPE="${x#rootfstype=}" - ;; - rootdelay=*) - ROOTDELAY="${x#rootdelay=}" - case ${ROOTDELAY} in - *[![:digit:].]*) - ROOTDELAY= - ;; - esac - ;; - resumedelay=*) - RESUMEDELAY="${x#resumedelay=}" - ;; - loop=*) - LOOP="${x#loop=}" - ;; - loopflags=*) - LOOPFLAGS="-o ${x#loopflags=}" - ;; - loopfstype=*) - LOOPFSTYPE="${x#loopfstype=}" - ;; - cryptopts=*) - cryptopts="${x#cryptopts=}" - ;; - nfsroot=*) - NFSROOT="${x#nfsroot=}" - ;; - netboot=*) - NETBOOT="${x#netboot=}" - ;; - ip=*) - IPOPTS="${x#ip=}" - ;; - hwaddr=*) - HWADDR="${x#hwaddr=}" - ;; - boot=*) - BOOT=${x#boot=} - ;; - resume=*) - RESUME="${x#resume=}" - ;; - resume_offset=*) - resume_offset="${x#resume_offset=}" - ;; - noresume) - noresume=y - ;; - panic=*) - panic="${x#panic=}" - case ${panic} in - *[![:digit:].]*) - panic= - ;; - esac - ;; - quiet) - quiet=y - ;; - ro) - readonly=y - ;; - rw) - readonly=n - ;; - debug) - debug=y - quiet=n - exec >/dev/.initramfs/initramfs.debug 2>&1 - set -x - ;; - debug=*) - debug=y - quiet=n - set -x - ;; - break=*) - break=${x#break=} - ;; - break) - break=premount - ;; - blacklist=*) - blacklist=${x#blacklist=} - ;; - netconsole=*) - netconsole=${x#netconsole=} - ;; - esac -done - -if [ -z "${noresume}" ]; then - export resume=${RESUME} -else - export noresume -fi - -[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} - -maybe_break top - -# export BOOT variable value for compcache, -# so we know if we run from casper -export BOOT - -# Don't do log messages here to avoid confusing usplash -run_scripts /scripts/init-top - -maybe_break modules -log_begin_msg "Loading essential drivers..." -load_modules -log_end_msg - -maybe_break premount -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" -run_scripts /scripts/init-premount -[ "$quiet" != "y" ] && log_end_msg - -maybe_break mount -log_begin_msg "Mounting root file system..." -. /scripts/${BOOT} -parse_numeric ${ROOT} -mountroot -log_end_msg - -maybe_break bottom -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" -run_scripts /scripts/init-bottom -[ "$quiet" != "y" ] && log_end_msg - -# Move virtual filesystems over to the real filesystem -mount -n -o move /sys ${rootmnt}/sys -mount -n -o move /proc ${rootmnt}/proc - -# Check init bootarg -if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then - echo "Target filesystem doesn't have ${init}." - init= -fi - -# Search for valid init -if [ -z "${init}" ] ; then - for init in /sbin/init /etc/init /bin/init /bin/sh; do - if [ ! -x "${rootmnt}${init}" ]; then - continue - fi - break - done -fi - -# No init on rootmount -if [ ! -x "${rootmnt}${init}" ]; then - panic "No init found. Try passing init= bootarg." -fi - -# Confuses /etc/init.d/rc -if [ -n ${debug} ]; then - unset debug -fi - -# Chain to real filesystem -maybe_break init -exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 -panic "Could not execute run-init." diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules deleted file mode 100644 index 9aa46468..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules +++ /dev/null @@ -1,10 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions deleted file mode 100644 index 3bea0c97..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions +++ /dev/null @@ -1,420 +0,0 @@ -# -*- shell-script -*- - -_log_msg() -{ - if [ "$quiet" = "y" ]; then return; fi - echo "$@" -} - -log_success_msg() -{ - _log_msg "Success: $@" -} - -log_failure_msg() -{ - _log_msg "Failure: $@" -} - -log_warning_msg() -{ - _log_msg "Warning: $@" -} - -log_begin_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TEXT $@" - fi - _log_msg "Begin: $@ ..." -} - -log_end_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "SUCCESS ok" - fi - _log_msg "Done." -} - -# Add failure hook -add_mountroot_fail_hook() -{ - mkdir -p /tmp/mountroot-fail-hooks.d - ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" -} - -# Run failure hooks. -# When a failure hook exits "1", it has not done anything to correct the -# system. Exiting "0" means that something has been attempted to resolve -# the lack of a root filesystem. -# Hooks are run in lexigraphical order, and are responsible for removing -# themselves if they should not re-run in a later cycle. When one exits -# "0", the stack is stopped, so the caller can return to the main rootfs -# wait loop. -try_failure_hooks() -{ - local hook - - # Disable usplash so text from hooks can be seen - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - for hook in /tmp/mountroot-fail-hooks.d/*; do - if [ -x ${hook} ] && ${hook} mountfail; then - return 0 - fi - done - return 1 -} - -panic() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - # Disallow console access - if [ -n "${panic}" ]; then - sleep ${panic} - reboot - fi - - modprobe i8042 - modprobe atkbd - - run_scripts /scripts/panic - - echo $@ - PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 -} - -maybe_break() -{ - if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then - panic "Spawning shell within the initramfs" - fi -} - -render() -{ - eval "echo -n \${$@}" -} - -set_initlist() -{ - unset initlist - for si_x in ${initdir}/*; do - # skip empty dirs without warning - [ "${si_x}" = "${initdir}/*" ] && return - - # only allow variable name chars - case ${si_x#${initdir}/} in - *[![:alnum:]_]*) - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not alphanumeric or '_' file" - continue - ;; - esac - - # skip non executable scripts - if [ ! -x ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not executable" - continue - fi - - # skip directories - if [ -d ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: a directory" - continue - fi - - initlist="${initlist} ${si_x#${initdir}/}" - done -} - -reduce_satisfied() -{ - deplist="$(render array_${1})" - unset tmpdeplist - for rs_y in ${deplist}; do - # check if there are alternatives - case ${rs_y} in - *\|*) - OLD_IFS="$IFS" - IFS="|" - for rs_z in ${rs_y}; do - IFS="$OLD_IFS" - # only allow variable name chars - case ${rs_z} in - *[![:alnum:]_]*) - IFS="|" - continue - ;; - esac - # skip non executable scripts - if [ ! -x ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - # skip directories - if [ -d ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - tmpdeplist="${tmpdeplist} ${rs_z}" - break - done - IFS="$OLD_IFS" - ;; - *) - case ${rs_y} in - *[![:alnum:]_]*) - continue - ;; - esac - if [ ! -x ${initdir}/${rs_y} ]; then - continue - fi - if [ -d ${initdir}/${rs_y} ]; then - continue - fi - tmpdeplist="${tmpdeplist} ${rs_y}" - ;; - esac - done - deplist=${tmpdeplist} - for rs_x in ${runlist}; do - pop_list_item ${rs_x} ${deplist} - deplist=${tmppop} - done - eval array_${1}=\"${deplist}\" -} - -get_prereqs() -{ - set_initlist - for gp_x in ${initlist}; do - tmp=$(${initdir}/${gp_x} prereqs) - eval array_${gp_x}=\"${tmp}\" - done -} - -count_unsatisfied() -{ - set -- ${@} - return ${#} -} - -# Removes $1 from initlist -pop_list_item() -{ - item=${1} - shift - set -- ${@} - unset tmppop - # Iterate - for pop in ${@}; do - if [ ${pop} = ${item} ]; then - continue - fi - tmppop="${tmppop} ${pop}" - done - -} - -# This function generates the runlist, so we clear it first. -reduce_prereqs() -{ - unset runlist - set -- ${initlist} - i=$# - # Loop until there's no more in the queue to loop through - while [ ${i} -ne 0 ]; do - oldi=${i} - for rp_x in ${initlist}; do - reduce_satisfied ${rp_x} - count_unsatisfied $(render array_${rp_x}) - cnt=${?} - if [ ${cnt} -eq 0 ]; then - runlist="${runlist} ${rp_x}" - pop_list_item ${rp_x} ${initlist} - initlist=${tmppop} - i=$((${i} - 1)) - fi - done - if [ ${i} -eq ${oldi} ]; then - panic "PANIC: Circular dependancy. Exiting." - fi - done -} - -get_prereq_pairs() -{ - set_initlist - for gp_x in ${initlist}; do - echo ${gp_x} ${gp_x} - prereqs=$(${initdir}/${gp_x} prereqs) - for prereq in ${prereqs}; do - echo ${prereq} ${gp_x} - done - done -} - -call_scripts() -{ - for cs_x in ${runlist}; do - [ -f ${initdir}/${cs_x} ] || continue - if [ x"$1" = "xoptional" ]; then - option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") - [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue - fi - - # mkinitramfs verbose output - if [ "${verbose}" = "y" ]; then - echo "Calling hook ${cs_x}" - fi - ${initdir}/${cs_x} - # allow boot scripts to modify exported boot paramaters - if [ -e /conf/param.conf ]; then - . /conf/param.conf - fi - done -} - -run_scripts() -{ - initdir=${1} - [ ! -d ${initdir} ] && return - - if [ -f ${initdir}/ORDER ]; then - . ${initdir}/ORDER - elif [ -x /usr/bin/tsort ]; then - runlist=$(get_prereq_pairs | tsort) - call_scripts $2 - else - get_prereqs - reduce_prereqs - call_scripts $2 - fi -} - -cache_run_scripts() -{ - DESTDIR=${1} - scriptdir=${2} - initdir=${DESTDIR}${scriptdir} - [ ! -d ${initdir} ] && return - - runlist=$(get_prereq_pairs | tsort) - for crs_x in ${runlist}; do - [ -f ${initdir}/${crs_x} ] || continue - echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER - echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER - done -} - -# Load custom modules first -load_modules() -{ - if [ -e /conf/modules ]; then - cat /conf/modules | while read m; do - # Skip empty lines - if [ -z "$m" ]; then - continue - fi - # Skip comments - d?ash removes whitespace prefix - com=$(printf "%.1s" "${m}") - if [ "$com" = "#" ]; then - continue - fi - modprobe $m - done - fi -} - -# lilo compatibility -parse_numeric() { - case $1 in - "") - return - ;; - /*) - return - ;; - *:*) - minor=${1#*:} - major=${1%:*} - ;; - *) - value=$(( 0x${1} )) - minor=$(( ${value} % 256 )) - major=$(( ${value} / 256 )) - ;; - esac - - mknod -m 600 /dev/root b ${major} ${minor} - ROOT=/dev/root -} - -configure_networking() -{ - # networking already configured thus bail out - [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 - - if [ "${HWADDR}" ]; then - # select interface by MAC address - HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" - local iface - for iface in /sys/class/net/*; do - [ -f "$iface/address" ] || continue - if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then - DEVICE="${iface#/sys/class/net/}" - fi - done - fi - - # support ip options see linux sources - # Documentation/filesystems/nfsroot.txt - case ${IPOPTS} in - none|off) - # Do nothing - ;; - ""|on|any) - # Bring up device - ipconfig -t 60 ${DEVICE} - ;; - dhcp|bootp|rarp|both) - ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} - ;; - *) - ipconfig -t 60 -d $IPOPTS - - # grab device entry from ip option - NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} - if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then - NEW_DEVICE=${NEW_DEVICE%:*} - else - # wrong parse, possibly only a partial string - NEW_DEVICE= - fi - if [ -n "${NEW_DEVICE}" ]; then - DEVICE="${NEW_DEVICE}" - fi - ;; - esac - - # source ipconfig output - if [ -n "${DEVICE}" ]; then - # source specific bootdevice - . /tmp/net-${DEVICE}.conf - else - # source any interface as not exaclty specified - . /tmp/net-*.conf - fi -} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth deleted file mode 100755 index 8b1e7c8a..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] -then - /bin/plymouth update-root-fs --new-root-dir=${rootmnt} -fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev deleted file mode 100755 index f9d2ce9d..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -e -# initramfs init-bottom script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Stop udevd, we'll miss a few events while we run init, but we catch up -pkill udevd - -# Move /dev to the real filesystem -mount -n -o move /dev ${rootmnt}/dev diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 deleted file mode 100755 index e5bc78f1..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -# init-premount script for lvm2. - -PREREQS="udev mdadm" -prereqs() -{ - echo $PREREQS -} - -mountroot_fail() -{ - if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then - cat </dev/null; then - modprobe ata_generic all_generic_ide=1 -fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist deleted file mode 100755 index 5e6b3c1e..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -# blacklist vga16fb when vga= or video= given -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*|video=*) - echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs - ;; - esac -done - -# sanity check -[ -z "${blacklist}" ] && exit 0 - -# write blacklist to modprobe.d -IFS=',' -for b in ${blacklist}; do - echo "blacklist $b" >> /etc/modprobe.d/initramfs -done diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup deleted file mode 100755 index df767bb4..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup +++ /dev/null @@ -1,83 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -OPTION=FRAMEBUFFER -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer deleted file mode 100755 index bb59aadf..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - - -# The options part of the kernel "video=" argument (i.e. everyting -# after "video=:") has very inconsistent rules. -# -# Generally the following applies: -# 1) options are comma-separated -# 2) options can be in either of these three forms: -# =, :, . -# 3) the "mode" option has the form x[M][R][-][@][i][m] -# and may or may not start with "mode=" -# -# When the options are used with modules, they need to be space-separated -# and the following conversions are needed: -# : -> = -# -> =1 -# -> mode= -parse_video_opts() -{ - local OPTS="$1" - local IFS="," - - # Must be a line like video=:,[opt2]... - if [ "${OPTS}" = "${OPTS%%:*}" ]; then - return - fi - OPTS="${OPTS#*:}" - for opt in ${OPTS}; do - # Already in the "=" form - if [ "${opt}" != "${opt#*=}" ]; then - echo -n "$opt " - # In the ":" form - elif [ "${opt}" != "${opt#*:}" ]; then - echo -n "${opt%:*}=${opt#*:} " - # Presumably a modevalue without the "mode=" prefix - elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then - echo -n "mode=$opt " - # Presumably a boolean - else - echo -n "${opt}=1 " - fi - done -} - -FB="" -OPTS="" - -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*) - FB="vesafb"; - OPTS=""; - ;; - video=*) - FB=${x#*=} - FB="${FB%%:*}" - OPTS="$(parse_video_opts "${x}")" - esac -done - -# Map command line name to module name -case ${FB} in -matroxfb) - FB=matroxfb_base - ;; -esac - -if [ -n "${FB}" ]; then - # Some framebuffer devices need character devices :-/ - udevadm settle - MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} - # Wait for the framebuffer devices to be ready - udevadm settle -else - # If we have no graphics devices yet, wait for udev to settle - [ -d /sys/class/graphics/fbcon ] || udevadm settle - [ -d /sys/class/graphics/fb0 ] || udevadm settle - [ -d /sys/class/drm/card0 ] || udevadm settle -fi - -# Force fb mode via /sys interface -for x in $(cat /proc/cmdline); do - case ${x} in - fbmode=*) - MODE=${x#*=} - echo "$MODE" > /sys/class/graphics/fb0/mode - ;; - esac -done diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap deleted file mode 100755 index cb67aa96..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth deleted file mode 100755 index 813b6b4c..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="framebuffer console_setup brltty" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -printf '\033[?25l' > /dev/tty7 -/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid -/bin/plymouth show-splash diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev deleted file mode 100755 index cd2fa564..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -e -# initramfs init-top script for udev - -PREREQ="all_generic_ide blacklist" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# It's all over netlink now -echo "" > /proc/sys/kernel/hotplug - -# Start the udev daemon to process events -/sbin/udevd --daemon --resolve-names=never - -# Iterate sysfs and fire off everything; if we include a rule for it then -# it'll get handled; otherwise it'll get handled later when we do this again -# in the main boot sequence. -( /sbin/udevadm trigger --subsystem-match=block; \ - /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local deleted file mode 100644 index 865572b5..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local +++ /dev/null @@ -1,131 +0,0 @@ -# Local filesystem mounting -*- shell-script -*- - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" - run_scripts /scripts/local-top - [ "$quiet" != "y" ] && log_end_msg - - while [ -z "${FSTYPE}" ]; do - FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) - - # Run failure hooks, hoping one of them can fix up the system - # and we can restart the wait loop. If they all fail, abort - # and move on to the panic handler and shell. - if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then - break - fi - done - - # We've given up, but we'll let the user fix matters if they can - while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do - # give hint about renamed root - case "${ROOT}" in - /dev/hd*) - suffix="${ROOT#/dev/hd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/sd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" - fi - ;; - /dev/sd*) - suffix="${ROOT#/dev/sd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/hd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" - fi - ;; - esac - echo "Gave up waiting for root device. Common problems:" - echo " - Boot args (cat /proc/cmdline)" - echo " - Check rootdelay= (did the system wait long enough?)" - echo " - Check root= (did the system wait for the right device?)" - echo " - Missing modules (cat /proc/modules; ls /dev)" - panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" - done - - # Get the root filesystem type if not set - if [ -z "${ROOTFSTYPE}" ]; then - [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") - ROOTFSTYPE="${FSTYPE}" - else - FSTYPE="${ROOTFSTYPE}" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" - run_scripts /scripts/local-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ] && \ - [ -z "$LOOP" ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} - - # FIXME This has no error checking - # Mount root - mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} - mountroot_status="$?" - if [ "$LOOP" ]; then - if [ "$mountroot_status" != 0 ]; then - if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then - panic " -Could not mount the partition ${ROOT}. -This could also happen if the file system is not clean because of an operating -system crash, an interrupted boot process, an improper shutdown, or unplugging -of a removable device without first unmounting or ejecting it. To fix this, -simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then -gracefully shut down and reboot back into Windows. After this you should be -able to reboot again and resume the installation. -(filesystem = ${FSTYPE}, error code = $mountroot_status) -" - fi - fi - - mkdir -p /host - mount -o move ${rootmnt} /host - - while [ ! -e "/host/${LOOP#/}" ]; do - panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" - done - - # Get the loop filesystem type if not set - if [ -z "${LOOPFSTYPE}" ]; then - eval $(fstype < "/host/${LOOP#/}") - else - FSTYPE="${LOOPFSTYPE}" - fi - if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then - FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") - [ -z "$FSTYPE" ] && FSTYPE="unknown" - fi - - if [ ${readonly} = y ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - modprobe loop - modprobe ${FSTYPE} - - # FIXME This has no error checking - mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} - - if [ -d ${rootmnt}/host ]; then - mount -o move /host ${rootmnt}/host - fi - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" - run_scripts /scripts/local-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g deleted file mode 100755 index 335ef95e..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g +++ /dev/null @@ -1,16 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - mkdir -p /dev/.initramfs/varrun - pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit - pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit -fi - -exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc deleted file mode 100755 index c9fbc369..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/sh -e -# initramfs local-premount script for fixrtc - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - -# use the fixrtc cmdline option in your bootloader to -# automatically set the hardware clock to the date of -# the last mount of your root filesystem to avoid fsck -# to get confused by the superblock being in the future - -BROKEN_CLOCK="" -ROOTDEV="" - -for x in $(cat /proc/cmdline); do - case ${x} in - root=*) - value=${x#*=} - - # Find the device node path depending on the form of root= : - - case ${value} in - UUID=*) - ROOTDEV=/dev/disk/by-uuid/${value#UUID=} - ;; - LABEL=*) - ROOTDEV=/dev/disk/by-label/${value#LABEL=} - ;; - *) - ROOTDEV=${value} - ;; - esac - ;; - fixrtc) - BROKEN_CLOCK=1 - ;; - esac -done - -if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then - ROOTDISK=$(readlink -f "$ROOTDEV") && - - TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && - TIME=${TIMESTR#*:} && - - date --set="${TIME} 1 minute" >/dev/null 2>&1 -fi - -# This script is best-effort. If we couldn't fudge the clock as desired, -# just try to carry on boot anyway: -# It will probably fail, but we won't have made the situation any worse. -exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g deleted file mode 100755 index 57e7f8ba..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - modprobe fuse -fi - -exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume deleted file mode 100755 index 46535936..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -. ./scripts/functions - -if [ -z "${resume}" ]; then - exit 0 -fi - -case $resume in -LABEL=*) - resume="${resume#LABEL=}" - - # support any / in LABEL= path (escape to \x2f) - case "${resume}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - resume="$(echo ${resume} | sed 's,/,\\x2f,g')" - else - if [ "${resume}" != "${resume#/}" ]; then - resume="\x2f${resume#/}" - fi - if [ "${resume}" != "${resume%/}" ]; then - resume="${resume%/}\x2f" - fi - IFS='/' - newresume= - for s in $resume; do - if [ -z "${newresume}" ]; then - newresume="${s}" - else - newresume="${newresume}\\x2f${s}" - fi - done - unset IFS - resume="${newresume}" - fi - esac - resume="/dev/disk/by-label/${resume}" - ;; -UUID=*) - resume="/dev/disk/by-uuid/${resume#UUID=}" - ;; -esac - -SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) - -case "${SWAPTYPE}" in - swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) - if [ -x /bin/plymouth ] && plymouth --ping; then - plymouth message --text="Resuming from $resume" - fi - - # hardcode path, uswsusp ships an resume binary too - if [ -n "${resume_offset}" ]; then - /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 - else - /bin/resume ${resume} >/dev/null 2>&1 - fi - ;; -esac diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs deleted file mode 100644 index b9c2522d..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs +++ /dev/null @@ -1,83 +0,0 @@ -# NFS filesystem mounting -*- shell-script -*- - -# FIXME This needs error checking - -retry_nr=0 - -# parse nfs bootargs and mount nfs -do_nfsmount() -{ - - configure_networking - - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - - if [ -z "${NFSOPTS}" ]; then - NFSOPTS="-o retrans=10" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" - run_scripts /scripts/nfs-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ]; then - roflag="-o ro" - else - roflag="-o rw" - fi - - nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} -} - -# NFS root mounting -mountroot() -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" - run_scripts /scripts/nfs-top - [ "$quiet" != "y" ] && log_end_msg - - modprobe nfs - # For DHCP - modprobe af_packet - - # Default delay is around 180s - # FIXME: add usplash_write info - if [ -z "${ROOTDELAY}" ]; then - delay=180 - else - delay=${ROOTDELAY} - fi - - # loop until nfsmount succeds - while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do - [ ${retry_nr} -gt 0 ] && \ - [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" - do_nfsmount - retry_nr=$(( ${retry_nr} + 1 )) - [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 - [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg - done - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" - run_scripts /scripts/nfs-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev deleted file mode 100755 index 980e496f..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -e -# initramfs nfs-top script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Each call to udevsettle can take up to three minutes -if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TIMEOUT 360" - trap "/sbin/usplash_write 'TIMEOUT 15'" 0 -fi - -# We need to wait for the network card drivers to be loaded -/sbin/udevadm settle diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup deleted file mode 100755 index 5e97f65e..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup +++ /dev/null @@ -1,82 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap deleted file mode 100644 index f011abf5..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth deleted file mode 100755 index 2da5a6b5..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -/bin/plymouth quit diff --git a/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm b/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm deleted file mode 100644 index 11d27f8c..00000000 --- a/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm +++ /dev/null @@ -1,18 +0,0 @@ -# mdadm boot_degraded configuration -# -# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if -# you want. You can also change the values here and changes will be preserved. -# Do note that only the values are preserved; the rest of the file is -# rewritten. -# -# BOOT_DEGRADED: -# Do you want to boot your system if a RAID providing your root filesystem -# becomes degraded? -# -# Running a system with a degraded RAID could result in permanent data loss -# if it suffers another hardware fault. -# -# However, you might answer "yes" if this system is a server, expected to -# tolerate hardware faults and boot unattended. - -BOOT_DEGRADED=false diff --git a/client/ogClient/old/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/initramfs-tools-OG/conf.d/resume deleted file mode 100644 index 34fdc4a5..00000000 --- a/client/ogClient/old/initramfs-tools-OG/conf.d/resume +++ /dev/null @@ -1 +0,0 @@ -RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/ogClient/old/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/initramfs-tools-OG/hooks/oghooks deleted file mode 100755 index 3d9b04b8..00000000 --- a/client/ogClient/old/initramfs-tools-OG/hooks/oghooks +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash - - -# Insert OpenGnsys Engine -mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - diff --git a/client/ogClient/old/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/initramfs-tools-OG/initramfs.conf deleted file mode 100644 index 754e2bea..00000000 --- a/client/ogClient/old/initramfs-tools-OG/initramfs.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# initramfs.conf -# Configuration file for mkinitramfs(8). See initramfs.conf(5). -# - -# -# MODULES: [ most | netboot | dep | list ] -# -# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. -# -# dep - Try and guess which modules to load. -# -# netboot - Add the base modules, network modules, but skip block devices. -# -# list - Only include modules from the 'additional modules' list -# - -MODULES=most - -# -# BUSYBOX: [ y | n ] -# -# Use busybox if available. -# - -BUSYBOX=y - -# -# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] -# -# Amount of RAM to use for RAM-based compressed swap space. -# -# An empty value - compcache isn't used, or added to the initramfs at all. -# An integer and K (e.g. 65536 K) - use a number of kilobytes. -# An integer and M (e.g. 256 M) - use a number of megabytes. -# An integer and G (e.g. 1 G) - use a number of gigabytes. -# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. -# -# You can optionally install the compcache package to configure this setting -# via debconf and have userspace scripts to load and unload compcache. -# - -COMPCACHE_SIZE="" - -# -# NFS Section of the config. -# - -# -# BOOT: [ local | nfs ] -# -# local - Boot off of local media (harddrive, USB stick). -# -# nfs - Boot using an NFS drive as the root of the drive. -# - -BOOT=local - -# -# DEVICE: ... -# -# Specify the network interface, like eth0 -# - -DEVICE=eth0 - -# -# NFSROOT: [ auto | HOST:MOUNT ] -# - -NFSROOT=auto - diff --git a/client/ogClient/old/initramfs-tools-OG/modules b/client/ogClient/old/initramfs-tools-OG/modules deleted file mode 100644 index 484ef718..00000000 --- a/client/ogClient/old/initramfs-tools-OG/modules +++ /dev/null @@ -1,13 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -fbcon -vesafb -vga16b diff --git a/client/ogClient/old/initramfs-tools-OG/scripts/og b/client/ogClient/old/initramfs-tools-OG/scripts/og deleted file mode 100755 index 6408eda7..00000000 --- a/client/ogClient/old/initramfs-tools-OG/scripts/og +++ /dev/null @@ -1,140 +0,0 @@ -# OpenGnsys Local filesystem mounting -*- shell-script -*- - -ogLinkBusybox () -{ -for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do - ln -f /bin/busybox /bin/$n -done -ln -f /bin/busybox /bin/sh -} - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - - mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -configure_networking -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - -set -a -trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 -/opt/opengnsys/etc/preinit/default.sh - - - - - - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - run_scripts /scripts/og-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf deleted file mode 100644 index 3c27473b..00000000 --- a/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf +++ /dev/null @@ -1,20 +0,0 @@ -# -# Configuration file for update-initramfs(8) -# - -# -# update_initramfs [ yes | all | no ] -# -# Default is yes -# If set to all update-initramfs will update all initramfs -# If set to no disables any update to initramfs beside kernel upgrade - -update_initramfs=yes - -# -# backup_initramfs [ yes | no ] -# -# Default is no -# If set to no leaves no .bak backup files. - -backup_initramfs=no diff --git a/client/ogClient/old/ogClientFunctions b/client/ogClient/old/ogClientFunctions deleted file mode 100755 index 8311cf3a..00000000 --- a/client/ogClient/old/ogClientFunctions +++ /dev/null @@ -1,255 +0,0 @@ -#!/bin/bash -#Definicion de variables -# TODO: Pendiente Definir directorio base del 2FS -OGBASEDIR=/var/lib/tftpboot/ogclient/ -OGFSFILE=${OGBASEDIR}ogclient.img -OGFSMOUNT=${OGBASEDIR}ogclientmount -OGLIB=/opt/opengnsys/client/lib -FSCLIENTSIZEMB=1000 -PASSROOT=og -SCRIPT=/root/configure.sh -RUNME=$OGFSMOUNT$SCRIPT -LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb -OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" -OGFSLABEL=ogClient - - - - -#/** -# ogClientMount [str_program] -#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones -#@return Si no hay parametros: login de acceso. -#@return con un parametro: La salida del programa ejecutado -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## -function ogClientMount () -{ -#TODO comprobar que OGFILE y OGFILEMOUNT existe. -mount $OGFSFILE $OGFSMOUNT -o loop -mount --bind /proc $OGFSMOUNT/proc -mount --bind /sys $OGFSMOUNT/sys -mount --bind /tmp $OGFSMOUNT/tmp -mount --bind /dev $OGFSMOUNT/dev -mount --bind /dev/pts $OGFSMOUNT/dev/pts -[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) -[ $# = 1 ] && chroot $OGFSMOUNT $1 -} - -#/** -# ogClientUnmount -#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys -#@param -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientUnmount () -{ -cd /tmp -umount -d -f -l $OGFSMOUNT/proc -umount -d -f -l $OGFSMOUNT/sys -umount -d -f -l $OGFSMOUNT/tmp -umount -d -f -l $OGFSMOUNT/dev -umount -d -f -l $OGFSMOUNT/dev/pts -umount -d -f -l $OGFSMOUNT -} - -function ogClientCheckVersion () -{ -#TODO: configurar la version lucid -#TODO: introducir un nuevo case para la vesion -case $1 in - jaunty|JAUNTY) - export OGVERSION=jaunty - exort OGRELEASE=2.6.28-11-generic - ;; - karmic|KARMIC) - export OGVERSION=karmic - export OGRELEASE=2.6.31-14-generic - ;; - lucid|LUCID) - export OGVERSION=lucid - export OGRELEASE=2.6.32-21-generic-pae - ;; -esac -echo $OGVERSION $OGRELEASE -} - - -#/** -# ogClientGenerator str_versionUbuntu str_release -#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Versión de ubuntu a generar, jaunty karmic -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientGeneratorDebootstrap () -{ - -if [ $# != 2 ] -then -echo Debes introducir como argumento1: jaunty karmic lucid -echo Debes introducir como argumento2: la release -echo utiliza como entrada ogClientCheckVersion -return -fi - -OGVERSION=`echo $1` -OGRELEASE=`echo $2` -echo $OGVERSION $OGRELEASE -pause - -# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema -apt-get install gdebi-core -wget $LASTDEBOOTSTRAP -gdebi -n debootstrap_1.0.20_all.deb - - -#Creamos el directorio donde montaremos el disco virtual -mkdir -p $OGFSMOUNT - -#Creamos el disco virtual con el filesystem del cliente. -dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB -mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F - -#Montamos el dispositivo virtual en su punto de montaje. -mount $OGFSFILE $OGFSMOUNT -o loop - -#TODO Comprobar arquitectura -#Iniciamos la creación del sistema en el directorio de clientes. -echo debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ -debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ - - - -} - - -###### Funciones para los clientes offline -function agregarOG { -cd $NEWROOT -mkdir -p opt/opengnsys -cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys -echo "agregando OG al newinitrd" -} - -function finalizarISO -{ - cd $ANTERIORPWD - mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz - if [ $LINUX ] ; then - mv $TMPINITRD/linux $DEST/linuxISO - fi -} - - -function CrearISO { -mkdir -p tmp/iso/isolinux -#cd tmp/iso/ -cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ -cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ -cp -prv /tmp/linux tmp/iso/isolinux/linuxISO -cp -prv /tmp/initrd.gz tmp/iso/isolinux/ -cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ - - -cat << FIN > tmp/iso/isolinux/isolinux.cfg -DEFAULT menu.c32 -PROMPT 0 -ALLOWOPTIONS 1 - -MENU TITLE FuTuR3 Live Collection - -LABEL gpxe -MENU LABEL gpxe -KERNEL /clonezilla/live/vmlinuz1 -APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia - - -#default 0 -#prompt 1 -#timeout 100 - -#display mensaje.txt - -LABEL 0 -MENU LABEL ogClient -KERNEL linuxISO -APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline - -LABEL 1 -MENU LABEL ogClient1 sin vga -KERNEL linuxISO -APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline - -LABEL 2 -MENU LABEL ogClient2 sin irqpoll -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline - -LABEL 3 -MENU LABEL ogClient3 acpi=off -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline - - -#LABEL ogclient -#KERNEL /ogclient/linuxISO -#APPEND initrd=/ogclient/initrdISO.img - -#KERNEL linuxISO -#APPEND initrd=initrdISO.img - -LABEL 4 -MENU LABEL local -localboot 0x80 -append - - - -label 5 -MENU LABEL Network boot via gPXE lkrn -KERNEL gpxe.lkrn - -label 5 -MENU LABEL Network boot via gPXE usb -KERNEL gpxe.usb - -label 5 -MENU LABEL Network boot via gPXE pxe -KERNEL gpxe.pxe - -label 5 -MENU LABEL Network boot via gPXE iso -KERNEL gpxe.iso -FIN -#### /tmp/iso# -mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso - -} - -function probarISO { -#/tmp/iso -qemu -m 256 -boot d -cdrom ogClient.iso -} - - - - diff --git a/client/ogClient/old/ogClientGenerator.sh b/client/ogClient/old/ogClientGenerator.sh deleted file mode 100755 index c7c654ae..00000000 --- a/client/ogClient/old/ogClientGenerator.sh +++ /dev/null @@ -1,306 +0,0 @@ -#!/bin/bash -#@file ogClientGenerator.sh -#@brief Script generación del cliente OpenGnSys -#@warning -#@version 0.9 - -#@author Antonio J. Doblas Viso. -#@date 2010/05/24 -#*/ - - - -if [ $# -ne 1 ]; then - echo ": invalid number of parameters" - echo " host | lucid | karmic | jaunty | lenny | squeeze " - exit 1 -fi - - - -# Soo ejecutable por usuario root -if [ "$(whoami)" != 'root' ] -then - echo "ERROR: this program must run under root privileges!!" - exit 1 -fi - -# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). -PROGRAMDIR=$(readlink -e $(dirname "$0")) -if [ -d "$PROGRAMDIR/../installer" ]; then - USESVN=0 -else - USESVN=1 - SVN_URL=svn://www.informatica.us.es:3690/opengnsys/branches/ogClient - #directorio donde se almacenará el codigo temporalmente. - SVN_DIR="./opengnsys/installer/ogClient" -fi - -WORKDIR=/tmp/opengnsys_installer -mkdir -p $WORKDIR -INSTALL_TARGET=/opt/opengnsys -LOG_FILE=/tmp/opengnsys_installation.log - -############################################### -pushd $WORKDIR - - -source `dirname $0`/ogInstaller.lib - - -if [ "$1" == "host" ] -then - OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') - OGRELEASE=$(uname -a | awk '{print $3}') -else - OSCODENAME=`echo $1` - OGRELEASE=`ogClientGetRelease $OSCODENAME` -fi - - - -OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ -OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img -OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount - -OGLIB=/opt/opengnsys/client/lib - - - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" - - -# Datos para la generación del cliente. -DEPENDENCIES=( debootstrap subversion schroot) - -## Actualizar repositorios -apt-get update -# Instalación de dependencias (paquetes de sistema operativo). -declare -a notinstalled -checkDependencies DEPENDENCIES notinstalled -if [ $? -ne 0 ]; then - installDependencies notinstalled - if [ $? -ne 0 ]; then - echoAndLog "Error while installing some dependeces, please verify your server installation before continue" - exit 1 - fi -fi - - - -# Si es necesario, descarga el repositorio especifico de la instalación del cliente -if [ $USESVN -eq 1 ]; then - #svnExportCode $SVN_URL - echo svn export "$SVN_URL" $SVN_DIR - #svn export "$SVN_URL" $SVN_DIR - #####debug boorrar el cp - #mkdir -p $SVN_DIR - #cp -prv /home/administrador/workspace/opengnsys/branches/ogClient/* $SVN_DIR - find $SVN_DIR/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null - ###TODO si ya esta descargado da error ??? - ###if [ $? -ne 0 ]; then - ### errorAndLog "Error while getting code from svn" - ### exit 1 - ###fi -else - ln -fs "$(dirname $PROGRAMDIR)" opengnsys -fi - -#### Parseo de ficheros descargados del svn. -# parseamos del apt.source -if [ "$1" == host ] -then - cp /etc/apt/sources.list ${SVN_DIR}/clientstructure/etc/apt/sources.list -else - sed -e "s/OGVERSION/$OGVERSION/g" ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic > ${SVN_DIR}/clientstructure/etc/apt/sources.list - #rm ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic -fi -if [ $? -ne 0 ]; then - errorAndLog "parseando el fichero apt.source: ERROR" -else - echoAndLog "parseando el fichero apt.source: OK" -fi - -#parseamos el scripts de generación del initrd. -sed -e "s/OGRELEASE/$OGRELEASE/g" ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVN_DIR}/clientstructure/root/GenerateInitrd.sh -#rm ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh -if [ $? -ne 0 ]; then - errorAndLog "parseando el fichero de cliente GenerateInitrd: ERROR" -else - echoAndLog "parseando el fichero de cliente GenerateInitrd: OK" -fi - - - -#damos permiso al directorio de scripts -chmod 775 ${SVN_DIR}/clientstructure/root/* -if [ $? -ne 0 ]; then - errorAndLog "Dando permisos de escritura al directorio de scrips para el cliente: ERROR" -else - echoAndLog "Dando permisos de escritura al directorio de scrips para el cliente: OK" -fi - - -#####PASO 1. Generamos el 2º sistema de archivos. -echo "generamos el sistema base con debootstrap" -if [ "$1" == host ] -then - echo ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE -# ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE -else - echo ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE - ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE -fi -if [ $? -ne 0 ]; then - errorAndLog "Generando 2nd FileSystem: ERROR" -else - echoAndLog "Generando 2nd FileSystem: OK" -fi - -########################################## - -cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` -cat << EOF > /etc/schroot/schroot.conf -[IMGogclient] -type=loopback -file=/var/lib/tftpboot/ogclient/ogclient.img -description=ogclient ubuntu luc IMGi -priority=1 -users=root -groups=root -root-groups=root -mount-options=-o offset=32256 -root-users=root -[DIRogclient] -type=directory -directory=/var/lib/tftpboot/ogclient/ogclientmount -description=ogclient ubuntu lucid DIR -priority=2 -users=root -groups=root -root-groups=root -root-users=root -EOF - - - -####PASO 2 Insertamos datos en el 2º sistema de archivos -#2.1 montamos para insertar los ficheros necesarios. -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 -if [ $? -ne 0 ]; then - errorAndLog "Montando 2nd FileSystem Para Añadir elementos OG: ERROR" - exit 1 -else - echoAndLog "Montando 2nd FileSystem Para Añadir elementos OG: OK" -fi - -#2.2 copiamos la estrucutra descargada al fichero imagen. -echo "cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT " -cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT -if [ $? -ne 0 ]; then - errorAndLog "Copiando los elementos del cliente svn: ERROR" - exit 1 -else - echoAndLog "Copiando los elementos del cliente svn: OK" -fi - -#2.3 Copiamos algunas cosas del actual sistema - ver de que manera integrar los lib -# copiamos algunas cosas del nfsexport -echo "Linking fonts for browser1 $OGLIB" -mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ -cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts -echo "Linking fonts for browser2 $OGLIB" -mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ -cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts -echo "Coping pci.ids" -cp -pr $OGLIB/pci.ids $OGCLIENTMOUNT/etc -#copiamos el browser y el ogADMcline al bin -cp /opt/opengnsys/client/bin/browser $OGCLIENTMOUNT/bin -cp /opt/opengnsys/client/bin/ogAdmClient $OGCLIENTMOUNT/bin -if [ $? -ne 0 ]; then - errorAndLog "Copiando qt pci.ids fonts: ERROR" - exit 1 -else - echoAndLog "Copiando qt pci.ids fonts: OK" -fi - - -## final desmontamos. -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -if [ $? -ne 0 ]; then - errorAndLog "Desmontando cliente : ERROR" - exit 1 -else - echoAndLog "desmontando cliente: OK" -fi - -################## Fin paso 2 - -popd - -######## instalamos software adicional. -#ogClientMount /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` -cd / -schroot -c IMGogclient -- /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` - -if [ $? -ne 0 ]; then - errorAndLog "Instalando sofware adicional OG : ERROR" - #exit 1 -else - echoAndLog "Instalando sofware adicional OG: OK" -fi -cd - - -#cd / -#schroot -c IMGogclient -- /root/CompileSoftware.sh -#cd - - -### configuracion hostname passroot securety -cd / -schroot -c IMGogclient -- /root/ConfFS.sh -cd - - -##2.4 claves ssh -sshkeys() -{ -##montamos -mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 -##comprobamos clave rsa en el host,. -if [ ! -f /root/.ssh/id_rsa.pub ] -then - ssh-keygen -q -f /root/.ssh/id_rsa -N "" -fi -## copiamos ssh rsa del host al guest como authorized-key2 -rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT -} - -### Generamos el 1er sistema de archivos. -cd / -schroot -c IMGogclient -- /root/GenerateInitrd.sh -cp /tmp/*-${OGRELEASE} $OGCLIENTBASEDIR -cd - - - - -################## DEJAMOS FICHERO DE EJEMPLOS PARA: -#default -cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient -LABEL pxe-${OGRELEASE} -KERNEL ogclient/vmlinuz-$OGRELEASE -APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= -FIN -#/etc/hosts -echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient -/etc/init.d/nfs-kernel-server restart -##################################################################### - -# Mostrar sumario de la instalación e instrucciones de post-instalación. -installationSummary - -#rm -rf $WORKDIR -echoAndLog "OpenGnSys installation finished at $(date)" - diff --git a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib deleted file mode 100755 index 14806b7e..00000000 --- a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -#/** -#@file Net.lib -#@brief Librería o clase Net -#@class Net -#@brief Funciones básicas de red. -#@version 1.0 -#@warning License: GNU GPLv3+ -#*/ - - -#/** -# ogGetHostname -#@brief Muestra el nombre del cliente. -#@return str_host - nombre de máquina -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetHostname () -{ -local HOST NETFILE -# Tomar nombre de la variable HOSTNAME -HOST="$HOSTNAME" - -# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) -[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} - END {print host} - ' /var/lib/dhcp3/dhclient.leases) -# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ -[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} - $1~/hostname/ {print $2}' /proc/cmdline) - -[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" -echo $HOST -} - - -#/** -# ogGetIpAddress -#@brief Muestra la dirección IP del sistema -#@return str_ip - Dirección IP -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetIpAddress () -{ -local IP -#Version og2ndFS -NETFILE="/tmp/net-eth0.conf" -[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) - -# Obtener direcciones IP. /* (comentario para Doxygen) -[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') -# Mostrar sólo la primera. (comentario para Doxygen) */ -echo ${IP%% *} -} - - -#/** -# ogGetMacAddress -#@brief Muestra la dirección Ethernet del cliente. -#@return str_ether - Dirección Ethernet -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetMacAddress () -{ -local MAC -# Obtener direcciones Ethernet. -MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') -# Mostrar sólo la primera. -echo ${MAC%% *} -} - diff --git a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme deleted file mode 100644 index 853e37f5..00000000 --- a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme +++ /dev/null @@ -1,20 +0,0 @@ -preinit/default - eliminamos enlace del bash - Ejecute solo el loadmodules del for - -preinit/loaenviron - comentamos el LD_PATH - - -/var/lib/tftboot/pxelinux.cfg/default -DEFAULT pxe2 -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin -LABEL pxe2 -KERNEL vmlinuz-2.6.32-21-generic-pae -APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 - - -parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN -temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/ogClient/old/ogFSHlnk/boot/default.sh b/client/ogClient/old/ogFSHlnk/boot/default.sh deleted file mode 100755 index e8c5b5d2..00000000 --- a/client/ogClient/old/ogFSHlnk/boot/default.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/opt/opengnsys/bin/bash - -set -a - -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} -#### FIXME EN PRUEBAS -OGLOGFILE=/var/log/opengnsys.log - -/opt/opengnsys/etc/init/load2fs.sh -source /opt/opengnsys/etc/preinit/loadenviron.sh -export PATH=/opt/og2fs/bin:$PATH -export PATH=/opt/og2fs/sbin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - echo "$MSG_LAUNCHCLIENT" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -fi - -bash -# FIXME Arranque Browser -#browser -qws $OGSTARTPAGE diff --git a/client/ogClient/old/ogFSHlnk/boot/load2fs.sh b/client/ogClient/old/ogFSHlnk/boot/load2fs.sh deleted file mode 100644 index ca3e3be7..00000000 --- a/client/ogClient/old/ogFSHlnk/boot/load2fs.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -#/** -#@file load2fs.sh -#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Antonio J. Doblas Viso, Unviersidad de Malaga. -#@date 2010-02-15 -#*/ -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro -cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -export PATH=/opt/og2fs/sbin:$PATH -export PATH=/opt/og2fs/bin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh b/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh deleted file mode 100755 index e3505aa6..00000000 --- a/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh +++ /dev/null @@ -1,395 +0,0 @@ -#!/bin/bash -#Definicion de variables -# TODO: Pendiente Definir directorio base del 2FS -OGBASEDIR=/opt/opengnsys/client/ -OGFSFILE=${OGBASEDIR}og2ndFS -OGFSMOUNT=${OGBASEDIR}ogfsmount -OGLIB=/opt/opengnsys/client/lib - - - - - -#/** -# ogFSHMount [str_program] -#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones -#@return Si no hay parametros: login de acceso. -#@return con un parametro: La salida del programa ejecutado -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## -function ogFSHMount () -{ -mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop -mount --bind /proc $OGFSMOUNT/proc -mount --bind /sys $OGFSMOUNT/sys -mount --bind /tmp $OGFSMOUNT/tmp -mount --bind /dev $OGFSMOUNT/dev -mount --bind /dev/pts $OGFSMOUNT/dev/pts -[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) -[ $# = 1 ] && chroot $OGFSMOUNT $1 -} - -#/** -# ogFSHUnmount -#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys -#@param -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogFSHUnmount () -{ -cd /tmp -umount -d -f -l $OGFSMOUNT/proc -umount -d -f -l $OGFSMOUNT/sys -umount -d -f -l $OGFSMOUNT/tmp -umount -d -f -l $OGFSMOUNT/dev -umount -d -f -l $OGFSMOUNT/dev/pts -umount -d -f -l $OGFSMOUNT -} - - -#/** -# ogFSHCreate str_versionUbuntu -#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Versión de ubuntu a generar, jaunty karmic -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogFSHCreate () -{ -#Definicion de variables. -local SCRIPT RUNME FSCLIENTSIZEMB PASSROOT LASTDEBOOTSTRAP OGMUSTCOMPILE OGFSLABEL -FSCLIENTSIZEMB=1000 -PASSROOT=og -SCRIPT=/root/configure.sh -RUNME=$OGFSMOUNT$SCRIPT -LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb -OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" -OGFSLABEL=og2FS -#TODO comprobar la compatibilidad del SO host - -if [ $# != 1 ] -then -echo Debes introducir como argumento: jaunty karmic lucid -return -fi - -#TODO: configurar la version lucid -#TODO: introducir un nuevo case para la vesion -case $1 in - jaunty|JAUNTY) - VERSION=jaunty - RELEASE=2.6.28-11-generic - ;; - karmic|KARMIC) - VERSION=karmic - RELEASE=2.6.31-14-generic - ;; - lucid|LUCID) - VERSION=lucid - #RELEASE=2.6.32-19-generic - RELEASE=2.6.32-21-generic-pae - ;; -esac - -# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema -apt-get install gdebi-core -wget $LASTDEBOOTSTRAP -gdebi -n debootstrap_1.0.20_all.deb - -#Creamos el disco virtual con el filesystem del cliente. -dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB -mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F -#Creamos el directorio donde montaremos el disco virtual -mkdir -p $OGFSMOUNT -#Montamos el dispositivo virtual en su punto de montaje. -mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop - -#TODO Comprobar arquitectura -#Iniciamos la creación del sistema en el directorio de clientes. -echo debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ -debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ - -# preparamos el etc.sources. -cat << FIN > ${OGFSMOUNT}/etc/apt/sources.list -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted -## Major bug fix updates produced after the final release of the -## distribution. -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team. Also, please note that software in universe WILL NOT receive any -## review or updates from the Ubuntu security team. -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION universe -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION universe -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe - -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team, and may not be under a free licence. Please satisfy yourself as to -## your rights to use the software. Also, please note that software in -## multiverse WILL NOT receive any review or updates from the Ubuntu -## security team. -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse - -## Uncomment the following two lines to add software from the 'backports' -## repository. -## N.B. software from this repository may not have been tested as -## extensively as that contained in the main release, although it includes -## newer versions of some applications which may provide useful features. -## Also, please note that software in backports WILL NOT receive any review -## or updates from the Ubuntu security team. -# deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse -# deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse - -## Uncomment the following two lines to add software from Canonical's -## 'partner' repository. -## This software is not part of Ubuntu, but is offered by Canonical and the -## respective vendors as a service to Ubuntu users. -# deb http://archive.canonical.com/ubuntu $VERSION partner -# deb-src http://archive.canonical.com/ubuntu $VERSION partner - - -deb http://security.ubuntu.com/ubuntu $VERSION-security main restricted -deb-src http://security.ubuntu.com/ubuntu $VERSION-security main restricted -deb http://security.ubuntu.com/ubuntu $VERSION-security universe -deb-src http://security.ubuntu.com/ubuntu $VERSION-security universe -deb http://security.ubuntu.com/ubuntu $VERSION-security multiverse -deb-src http://security.ubuntu.com/ubuntu $VERSION-security multiverse - - -deb http://archive.ubuntu.com/ubuntu $VERSION main -deb http://free.nchc.org.tw/drbl-core drbl stable -deb http://free.nchc.org.tw/ubuntu $VERSION-security main restricted universe multiverse -deb http://ppa.launchpad.net/freenx-team/ubuntu/ $VERSION main -deb http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main -deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main -FIN - -#TODO: fichero etc/hosts -#TODO: fichero etc/resolv.conf -echo "2ndFSHclient" > ${OGFSMOUNT}/etc/hostname -#TODO: introducir mas consoluas para el acceso como root. -echo "pts/0" >> ${OGFSMOUNT}/etc/securetty -echo "pts/1" >> ${OGFSMOUNT}/etc/securetty -echo "pts/2" >> ${OGFSMOUNT}/etc/securetty -echo "pts/3" >> ${OGFSMOUNT}/etc/securetty - -# copiamos algunas cosas del nfsexport -echo "Linking fonts for browser1 $OGLIB" -mkdir -p $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ -cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts - -echo "Linking fonts for browser2 $OGLIB" -mkdir -p $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/ -cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts - -echo "Coping pci.ids" -cp -pr $OGLIB/pci.ids $OGFSMOUNT/etc - -# Guión de ejecución y personalización final. -cat << FIN > $RUNME -#!/bin/bash -################################################################ -##################### SOFTWARE ##################### -################################################################ -export LANGUAGE=C -export LC_ALL=C -export LANG=C - -dpkg-divert --local --rename --add /sbin/initctl -ln -s /bin/true /sbin/initctl - - -apt-get -y update - -# software system -apt-get -y --force-yes install linux-image-$RELEASE wget dialog man-db htop -# -# software to compile code -apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk -wget $OGMUSTCOMPILE -source /root/ToolsGNU.c -# -# sofware networking -apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 -ctorrent install -udpcast install -# -# software services -apt-get -y --force-yes install openssh-server bittornado trickle -# -# software disk and filesystem -apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted -apt-get -y --force-yes install dmraid dmsetup mdadm lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools -ntfs-3g install -# -# software cloning -apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools -wget -O partclone_0.2.8_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.8/partclone_0.2.8_i386.deb?use_mirror=ovh -gdebi -n partclone_0.2.8_i386.deb -mbuffer install -# -## software postconf -apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk -ms-sys install -# -# software compressor -apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop - -apt-get -y --force-yes remove busybox -apt-get -y --force-yes install busybox-static bash-static -# -#################################################################### -###################### Preparando el entorno ###################### -################################################################### -mkdir -p /var/lock -dpkg-reconfigure passwd -echo "root:$PASSROOT" | chpasswd -mv /etc/fstab /etc/fstab.original 2>/dev/null -mv /etc/mtab /etc/mtab.original 2>/dev/null -FIN - -chmod +x $RUNME - -#chroot hacia el punto de montaje. -ogFSHMount $SCRIPT -### Desmontamos y salimos. -ogFSHUnmount 2>/dev/null -ogFSHUnmount 2>/dev/null -ogFSHUnmount 2>/dev/null -} - - -###### Funciones para los clientes offline -function agregarOG { -cd $NEWROOT -mkdir -p opt/opengnsys -cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys -echo "agregando OG al newinitrd" -} - -function finalizarISO -{ - cd $ANTERIORPWD - mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz - if [ $LINUX ] ; then - mv $TMPINITRD/linux $DEST/linuxISO - fi -} - - -function CrearISO { -mkdir -p tmp/iso/isolinux -#cd tmp/iso/ -cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ -cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ -cp -prv /tmp/linux tmp/iso/isolinux/linuxISO -cp -prv /tmp/initrd.gz tmp/iso/isolinux/ -cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ - - -cat << FIN > tmp/iso/isolinux/isolinux.cfg -DEFAULT menu.c32 -PROMPT 0 -ALLOWOPTIONS 1 - -MENU TITLE FuTuR3 Live Collection - -LABEL gpxe -MENU LABEL gpxe -KERNEL /clonezilla/live/vmlinuz1 -APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia - - -#default 0 -#prompt 1 -#timeout 100 - -#display mensaje.txt - -LABEL 0 -MENU LABEL ogClient -KERNEL linuxISO -APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline - -LABEL 1 -MENU LABEL ogClient1 sin vga -KERNEL linuxISO -APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline - -LABEL 2 -MENU LABEL ogClient2 sin irqpoll -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline - -LABEL 3 -MENU LABEL ogClient3 acpi=off -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline - - -#LABEL ogclient -#KERNEL /ogclient/linuxISO -#APPEND initrd=/ogclient/initrdISO.img - -#KERNEL linuxISO -#APPEND initrd=initrdISO.img - -LABEL 4 -MENU LABEL local -localboot 0x80 -append - - - -label 5 -MENU LABEL Network boot via gPXE lkrn -KERNEL gpxe.lkrn - -label 5 -MENU LABEL Network boot via gPXE usb -KERNEL gpxe.usb - -label 5 -MENU LABEL Network boot via gPXE pxe -KERNEL gpxe.pxe - -label 5 -MENU LABEL Network boot via gPXE iso -KERNEL gpxe.iso -FIN -#### /tmp/iso# -mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso - -} - -function probarISO { -#/tmp/iso -qemu -m 256 -boot d -cdrom ogClient.iso -} - - - - diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog deleted file mode 100644 index d93f0b42..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog +++ /dev/null @@ -1,137 +0,0 @@ -#/bin/sh - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - - #mount -t nfs -onolock,ro - nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - #mount -t nfs -o nolock - nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -. /scripts/functions -configure_networking -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - - -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro -cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -mount /opt/og2fs/bin /bin -mount /opt/og2fs/sbin /sbin -unset PATH -export PATH=/opt/og2fs/sbin -export PATH=/opt/og2fs/bin:$PATH -export PATH=/opt/og2fs/sbin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin -} -mountroot diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume deleted file mode 100644 index e4c89d1a..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume +++ /dev/null @@ -1 +0,0 @@ -RESUME=UUID=e8ea296e-815a-44d5-be24-b51d6b6fce4d diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks deleted file mode 100755 index d495d156..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash -copy_exec /usr/bin/unionfs-fuse - - - -# Insert OpenGnsys Engine -#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - - diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf deleted file mode 100644 index 754e2bea..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# initramfs.conf -# Configuration file for mkinitramfs(8). See initramfs.conf(5). -# - -# -# MODULES: [ most | netboot | dep | list ] -# -# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. -# -# dep - Try and guess which modules to load. -# -# netboot - Add the base modules, network modules, but skip block devices. -# -# list - Only include modules from the 'additional modules' list -# - -MODULES=most - -# -# BUSYBOX: [ y | n ] -# -# Use busybox if available. -# - -BUSYBOX=y - -# -# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] -# -# Amount of RAM to use for RAM-based compressed swap space. -# -# An empty value - compcache isn't used, or added to the initramfs at all. -# An integer and K (e.g. 65536 K) - use a number of kilobytes. -# An integer and M (e.g. 256 M) - use a number of megabytes. -# An integer and G (e.g. 1 G) - use a number of gigabytes. -# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. -# -# You can optionally install the compcache package to configure this setting -# via debconf and have userspace scripts to load and unload compcache. -# - -COMPCACHE_SIZE="" - -# -# NFS Section of the config. -# - -# -# BOOT: [ local | nfs ] -# -# local - Boot off of local media (harddrive, USB stick). -# -# nfs - Boot using an NFS drive as the root of the drive. -# - -BOOT=local - -# -# DEVICE: ... -# -# Specify the network interface, like eth0 -# - -DEVICE=eth0 - -# -# NFSROOT: [ auto | HOST:MOUNT ] -# - -NFSROOT=auto - diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules deleted file mode 100644 index 8bac1d4b..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules +++ /dev/null @@ -1,14 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -vga16b -vesafb -fbcon - diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og deleted file mode 100755 index 12c39a59..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og +++ /dev/null @@ -1,194 +0,0 @@ -# OpenGnsys Local filesystem mounting -*- shell-script -*- - - -ogLinkBusybox () -{ -for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do - ln -f /bin/busybox /bin/$n -done -ln -f /bin/busybox /bin/sh -} - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - #mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - -unionmount() -{ -FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" -UNION_OPT="-o cow -o noinitgroups" -UPATH="/unionfs" -UBIN="unionfs-fuse" -mkdir -p /unionfs/host -mkdir -p /unionfs/union - dir=$1 - #echo "creando mkdir -p /unionfs/host/$dir" - mkdir -p /unionfs/host/$dir - #echo "montando mount --bind /$dir /unionfs/host/$dir " - mount --bind /$dir /unionfs/host/$dir - ##########echo "creando mkdir -p /unionfs/union/$dir" - mkdir -p /unionfs/union/$dir - host="/unionfs/host/${dir}=RW" - common="/opt/og2fs/${dir}=RO" - #####echo " ejecuantdo $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir " - $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir - - mount --bind /unionfs/union/$dir /$dir -} - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -. /scripts/functions -configure_networking - -# for the portmapper we need localhost -ifconfig lo 127.0.0.1 -/etc/init.d/portmap start - -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - - -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro - -#mount -t tmpfs -o size=8192 tmpfs /unionfs -for i in etc; do - unionmount $i -done -# root var lib bin sbin usr -cat /proc/mounts > /etc/mtab - -#cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -mount /opt/og2fs/bin /bin -mount /opt/og2fs/sbin /sbin -#export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin -#chmod 777 /etc/rcog -##unset PATH -##export PATH=$PATH:/opt/og2fs/sbin -##export PATH=/opt/og2fs/bin:$PATH -##export PATH=/opt/og2fs/sbin:$PATH - - - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - run_scripts /scripts/og-bottom - [ "$quiet" != "y" ] && log_end_msg - - -#set -a -#trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 - -#/opt/opengnsys/etc/preinit/default.sh -echo "llamando a init desde scritps og" -exec init -} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf deleted file mode 100644 index 3c27473b..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf +++ /dev/null @@ -1,20 +0,0 @@ -# -# Configuration file for update-initramfs(8) -# - -# -# update_initramfs [ yes | all | no ] -# -# Default is yes -# If set to all update-initramfs will update all initramfs -# If set to no disables any update to initramfs beside kernel upgrade - -update_initramfs=yes - -# -# backup_initramfs [ yes | no ] -# -# Default is no -# If set to no leaves no .bak backup files. - -backup_initramfs=no diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab deleted file mode 100644 index 03e0c06a..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab +++ /dev/null @@ -1,14 +0,0 @@ -# This is run first except when booting in single-user mode -# -#::sysinit:/opt/opengnsys/etc/preinit/default.sh -# /bin/sh invocations on selected ttys -# -# Start an "askfirst" shell on the console (whatever that may be) -#::askfirst:/bin/sh -# Start an "askfirst" shell on /dev/tty2-4 -#tty1::respawn:/sbin/getty 38400 tty1 -tty1::respawn:/opt/opengnsys/etc/preinit/default.sh -tty2::respawn:/sbin/getty 38400 tty2 -tty3::respawn:/sbin/getty 38400 tty3 -tty4::respawn:/sbin/getty 38400 tty4 -tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf deleted file mode 100644 index 8b047e4e..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf +++ /dev/null @@ -1,30 +0,0 @@ -# Framebuffer drivers are generally buggy and poorly-supported, and cause -# suspend failures, kernel panics and general mayhem. For this reason we -# never load them automatically. -blacklist aty128fb -blacklist atyfb -#blacklist radeonfb -blacklist cirrusfb -blacklist cyber2000fb -blacklist cyblafb -blacklist gx1fb -blacklist hgafb -blacklist i810fb -blacklist intelfb -blacklist kyrofb -blacklist lxfb -blacklist matroxfb_base -blacklist neofb -blacklist nvidiafb -blacklist pm2fb -blacklist rivafb -blacklist s1d13xxxfb -blacklist savagefb -blacklist sisfb -blacklist sstfb -blacklist tdfxfb -blacklist tridentfb -#blacklist vesafb -blacklist vfb -blacklist viafb -blacklist vt8623fb diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox deleted file mode 100755 index da2dc637..00000000 Binary files a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox and /dev/null differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox deleted file mode 100755 index d04890f6..00000000 Binary files a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox and /dev/null differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root deleted file mode 100755 index aecb5e32..00000000 Binary files a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root and /dev/null differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions deleted file mode 100644 index 2610f79a..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions +++ /dev/null @@ -1,461 +0,0 @@ -# -*- shell-script -*- - -catenate_cpiogz() { - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 - return - fi - - cat "${1}" >>"${__TMPCPIOGZ}" -} - -force_load() -{ - manual_add_modules ${@} - echo "${@}" >>"${DESTDIR}/conf/modules" -} - -# Takes a file containing a list of modules to be added as an -# argument, figures out dependancies, and adds them. -# -# Input file syntax: -# -# # comment -# modprobe_module_name [args ...] -# [...] -# -add_modules_from_file() -{ - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 - return - fi - - sed -e '/^#/d' ${1} | while read module rest; do - force_load "${module}" "${rest}" - done -} - -# Is this module available? -have_module() -{ - modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" >/dev/null 2>&1 -} - -# Add dependent modules + eventual firmware -manual_add_modules() -{ - local mam_x firmwares firmware - - for mam_x in $(modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do - # Prune duplicates - if [ -e "${DESTDIR}/${mam_x}" ]; then - continue - fi - - mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" - ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" - if [ "${verbose}" = "y" ]; then - echo "Adding module ${mam_x}" - fi - - # Add firmware files if necessary - firmwares=$(modinfo -F firmware "${mam_x}") - if [ -z "${firmwares}" ]; then - continue - fi - for firmware in $firmwares; do - if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ - || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then - continue - fi - - # Only print warning for missing fw of loaded module - # or forced loaded module - if [ ! -e "/lib/firmware/${firmware}" ] \ - && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then - if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ - /proc/modules \ - || grep -q "^$(basename "${mam_x}" .ko)" \ - "${CONFDIR}/modules"; then - echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 - fi - continue - fi - - if [ -e "/lib/firmware/${version}/${firmware}" ]; then - copy_exec "/lib/firmware/${version}/${firmware}" - else - copy_exec "/lib/firmware/${firmware}" - fi - if [ "${verbose}" = "y" ]; then - echo "Adding firmware ${firmware}" - fi - done - done -} - -# $1 is the source path (e.g. /usr/bin/time) -# $2 is the relative destination (e.g. /usr or /usr/time) -# -# The destination is interpreted in the same way "cp" would, meaning -# (assuming /bin is a directory): -# -# "copy_exec /usr/bin/time /bin" -> /bin/time -# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime -# -# If $2 is left out, the same destination path as for the source arg will -# be used and directories will be created as needed, so: -# -# "copy_exec /usr/bin/time" -> /usr/bin/time -# -copy_exec() { - local source target destination final_destination x nonoptlib - local libname dirname - - source="${1}" - if [ -n "${2}" ]; then - target="${2}" - else - if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then - mkdir -p "${DESTDIR}/$(dirname "${1}")" - fi - target="${1}" - fi - - if [ -d "${DESTDIR}/${target}" ]; then - destination="${target}/$(basename "${source}")" - else - destination="${target}" - fi - final_destination="${DESTDIR}/${destination}" - - if [ -L "$final_destination" ]; then - if [ $(readlink "${final_destination}") != "${source}" ]; then - echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 - return - fi - else - ln -s ${source} ${DESTDIR}/${destination} - if [ "${verbose}" = "y" ]; then - echo "Adding binary ${source}" - fi - fi - - # Copy the dependant libraries - for x in $(ldd ${source} 2>/dev/null | sed -e ' - /\//!d; - /linux-gate/d; - /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; - s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do - - # Try to use non-optimised libraries where possible. - # We assume that all HWCAP libraries will be in tls, - # sse2, vfp or neon - nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') - - if [ -e "${nonoptlib}" ]; then - x="${nonoptlib}" - fi - - libname=$(basename "${x}") - dirname=$(dirname "${x}") - - mkdir -p "${DESTDIR}/${dirname}" - if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then - ln -s "${x}" "${DESTDIR}/${dirname}" - if [ "${verbose}" = "y" ]; then - echo "Adding library ${x}" - fi - fi - done -} - -# Copy entire subtrees to the initramfs -copy_modules_dir() -{ - local x_mod - - if ! [ -d "${MODULESDIR}/${1}" ]; then - return; - fi - if [ "${verbose}" = "y" ]; then - echo "Copying module directory ${1}" - fi - for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do - manual_add_modules $(basename ${x_mod} .ko) - done -} - -# walk /sys for relevant modules -sys_walk_mod_add() -{ - local driver_path module - device_path="$1" - - while [ "${device_path}" != "/sys" ]; do - driver_path="$(readlink -f ${device_path}/driver)" - if [ -e "$driver_path" ]; then - module="$(basename $(readlink -f $driver_path))" - if [ -n "${module}" ]; then - force_load "${module}" - fi - fi - device_path="$(dirname ${device_path})" - done -} - -# walk /sys for relevant modalias -sys_walk_modalias() -{ - local device_path modalias - - device_path="$(dirname "${1}")" - device_path="$(dirname "${device_path}")" - if [ -e "${device_path}/modalias" ]; then - modalias=$(cat "${device_path}/modalias") - fi - - if [ -n "${modalias}" ]; then - force_load "${modalias}" - fi -} - -# find and only copy root relevant modules -dep_add_modules() -{ - local block minor root FSTYPE root_dev_path x - - # findout root block device + fstype - eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" - if [ "${root}" = "/dev/root" ] ; then - root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null - fi - root="$(readlink -f ${root})" - - # find out real rootfs on auto type - if [ "${FSTYPE}" = "auto" ]; then - eval "$(/usr/lib/klibc/bin/fstype ${root})" - fi - - # check that fstype rootfs recognition - if [ "${FSTYPE}" = "unknown" ]; then - echo "mkinitramfs: unknown fstype on root ${root}" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report bug on initramfs-tools" - exit 1 - fi - - # Add rootfs - manual_add_modules "${FSTYPE}" - - # lvm luks root - if [ "${root#/dev/mapper/}" != "${root}" ]; then - minor=$((0x$(stat --format "%T" ${root}) % 256)) - block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) - if [ "${block#dm-}" != "${block}" ]; then - block=$(ls -1 /sys/block/${block}/slaves | head -n 1) - fi - block=${block%%[0-9]*} - # md root new naming scheme /dev/md/X - elif [ "${root#/dev/md/}" != "${root}" ]; then - root=${root#/dev/md/} - block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # md root /dev/mdX - elif [ "${root#/dev/md}" != "${root}" ]; then - root=${root#/dev/} - block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # mmc always uses numbering in the devicename (mmcblk[0-9]) - elif [ "${root#/dev/mmc}" != "${root}" ]; then - block=${root#/dev/} - block=${block%%p[0-9]*} - # classical root device - else - block=${root#/dev/} - block=${block%%[0-9]*} - fi - - # Error out if /sys lack block dev - if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then - echo "mkinitramfs: missing ${block} root ${root} /sys entry" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report the bug" - exit 1 - fi - - # sys walk ATA - root_dev_path=$(readlink -f /sys/block/${block}/device) - sys_walk_mod_add ${root_dev_path} - - # catch old-style IDE - if [ -e /sys/bus/ide/devices/ ]; then - sys_walk_modalias ${root_dev_path} - manual_add_modules ide-disk - manual_add_modules ide-cd - fi - - if [ -e /sys/bus/scsi/devices/ ]; then - manual_add_modules sd_mod - fi - - if [ -e /sys/bus/i2o/devices/ ]; then - force_load i2o_block - force_load i2o_config - fi - - if [ -e /sys/bus/ps3_system_bus/ ]; then - for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do - manual_add_modules "${x}" - done - fi - - if [ -e /sys/bus/vio/ ]; then - for x in sunvnet sunvdc; do - manual_add_modules "${x}" - done - fi -} - - -# The modules "most" classes added per default to the initramfs -auto_add_modules() -{ - case "$1" in - base) - for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ - hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ - hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ - hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ - hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ - ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ - virtio_pci vfat nls_cp437 nls_iso8859-1; do - manual_add_modules "${x}" - done - ;; - net) - for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ - cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ - ep93xx_eth eql fealnx famachi forcedeth gelic_net \ - hp100 igb ipg mace mv643xx_eth myri10ge \ - natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ - r8169 s2io sis900 skge sky2 slhc smc911x starfire \ - sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ - de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ - typhon via-rhine via-velocity virtio_net yellowfin; do - manual_add_modules "${x}" - done - ;; - ide) - copy_modules_dir kernel/drivers/ide - ;; - scsi) - copy_modules_dir kernel/drivers/scsi - for x in mptfc mptsas mptscsih mptspi; do - manual_add_modules "${x}" - done - ;; - ata) - copy_modules_dir kernel/drivers/ata - ;; - block) - copy_modules_dir kernel/drivers/block - copy_modules_dir kernel/drivers/usb/storage - ;; - # FIXME: can be removed after Lenny release - ieee1394) - for x in ohci1394 sbp2; do - manual_add_modules "${x}" - done - ;; - firewire) - for x in firewire-ohci firewire-sbp2; do - manual_add_modules "${x}" - done - ;; - i2o) - for x in i2o_block; do - manual_add_modules "${x}" - done - ;; - dasd) - for x in dasd_eckd_mod dasd_fba_mod; do - manual_add_modules "${x}" - done - ;; - *) - auto_add_modules base - auto_add_modules net - auto_add_modules ide - auto_add_modules scsi - auto_add_modules block - auto_add_modules ata - auto_add_modules i2o - auto_add_modules dasd - auto_add_modules ieee1394 - auto_add_modules firewire - ;; - esac -} - -usage() -{ - cat >&2 << EOF - -Usage: ${0} [OPTION]... <-o outfile> [version] - -Options: - -d confdir Specify an alternative configuration directory. - -k Keep temporary directory used to make the image. - -o outfile Write to outfile. - -r root Override ROOT setting in mkinitrd.conf. - -See mkinitramfs(8) for further details. -EOF - exit 1 - -} - -# minimal supported kernel version -check_minkver() -{ - local curversion initdir DPKG_ARCH minversion cm_x tmp - - curversion="${1}" - initdir="${2}" - if [ -z "${initdir}" ]; then - DPKG_ARCH=$(dpkg --print-architecture) - case ${DPKG_ARCH} in - ia64|hppa) - minversion="2.6.15" - ;; - *) - minversion="2.6.12" - ;; - esac - if dpkg --compare-versions "${curversion}" lt "${minversion}"; then - echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - return 0 - fi - set_initlist - for cm_x in ${initlist}; do - # sed: keep last line starting with MINKVER=, - # remove MINKVER= and trailing space - minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") - if [ -z "${tmp}" ]; then - continue - elif dpkg --compare-versions "${curversion}" lt "${minver}"; then - echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - done -} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache deleted file mode 100755 index 37fdd22e..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -set -e - -if [ "$1" = prereqs ]; then - exit 0 -fi - -. /usr/share/initramfs-tools/hook-functions - -number= -suffix= -eval $(printf "%s" "$COMPCACHE_SIZE" | \ - sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') - -if [ -z "$number" ] || [ -z "$suffix" ]; then - exit 0 -fi - -if have_module ramzswap; then - name=ramzswap - manual_add_modules ramzswap -elif have_module compcache; then - name=compcache - manual_add_modules compcache -else - exit 0 -fi - -copy_exec /sbin/swapon - -mkdir -p "$DESTDIR"/etc/udev/rules.d -cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." - -# Note that this only becomes /dev on the real filesystem if udev's scripts -# are used; which they will be, but it's worth pointing out -if ! mount -t devtmpfs -o mode=0755 none /dev; then - mount -t tmpfs -o mode=0755 none /dev - mknod -m 0600 /dev/console c 5 1 - mknod /dev/null c 1 3 -fi -mkdir /dev/pts -mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true -> /dev/.initramfs-tools -mkdir /dev/.initramfs - -# Export the dpkg architecture -export DPKG_ARCH= -. /conf/arch.conf - -# Set modprobe env -export MODPROBE_OPTIONS="-qb" - -# Export relevant variables -export ROOT= -export ROOTDELAY= -export ROOTFLAGS= -export ROOTFSTYPE= -export IPOPTS= -export HWADDR= -export break= -export init=/sbin/init -export quiet=n -export readonly=y -export rootmnt=/root -export debug= -export panic= -export blacklist= -export resume_offset= - -# Bring in the main config -. /conf/initramfs.conf -for conf in conf/conf.d/*; do - [ -f ${conf} ] && . ${conf} -done -. /scripts/functions - -# Parse command line options -for x in $(cat /proc/cmdline); do - case $x in - init=*) - init=${x#init=} - ;; - root=*) - ROOT=${x#root=} - case $ROOT in - LABEL=*) - ROOT="${ROOT#LABEL=}" - - # support / in LABEL= paths (escape to \x2f) - case "${ROOT}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" - else - if [ "${ROOT}" != "${ROOT#/}" ]; then - ROOT="\x2f${ROOT#/}" - fi - if [ "${ROOT}" != "${ROOT%/}" ]; then - ROOT="${ROOT%/}\x2f" - fi - IFS='/' - newroot= - for s in $ROOT; do - if [ -z "${newroot}" ]; then - newroot="${s}" - else - newroot="${newroot}\\x2f${s}" - fi - done - unset IFS - ROOT="${newroot}" - fi - esac - ROOT="/dev/disk/by-label/${ROOT}" - ;; - UUID=*) - ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" - ;; - /dev/nfs) - [ -z "${BOOT}" ] && BOOT=nfs - ;; - esac - ;; - rootflags=*) - ROOTFLAGS="-o ${x#rootflags=}" - ;; - rootfstype=*) - ROOTFSTYPE="${x#rootfstype=}" - ;; - rootdelay=*) - ROOTDELAY="${x#rootdelay=}" - case ${ROOTDELAY} in - *[![:digit:].]*) - ROOTDELAY= - ;; - esac - ;; - resumedelay=*) - RESUMEDELAY="${x#resumedelay=}" - ;; - loop=*) - LOOP="${x#loop=}" - ;; - loopflags=*) - LOOPFLAGS="-o ${x#loopflags=}" - ;; - loopfstype=*) - LOOPFSTYPE="${x#loopfstype=}" - ;; - cryptopts=*) - cryptopts="${x#cryptopts=}" - ;; - nfsroot=*) - NFSROOT="${x#nfsroot=}" - ;; - netboot=*) - NETBOOT="${x#netboot=}" - ;; - ip=*) - IPOPTS="${x#ip=}" - ;; - hwaddr=*) - HWADDR="${x#hwaddr=}" - ;; - boot=*) - BOOT=${x#boot=} - ;; - resume=*) - RESUME="${x#resume=}" - ;; - resume_offset=*) - resume_offset="${x#resume_offset=}" - ;; - noresume) - noresume=y - ;; - panic=*) - panic="${x#panic=}" - case ${panic} in - *[![:digit:].]*) - panic= - ;; - esac - ;; - quiet) - quiet=y - ;; - ro) - readonly=y - ;; - rw) - readonly=n - ;; - debug) - debug=y - quiet=n - exec >/dev/.initramfs/initramfs.debug 2>&1 - set -x - ;; - debug=*) - debug=y - quiet=n - set -x - ;; - break=*) - break=${x#break=} - ;; - break) - break=premount - ;; - blacklist=*) - blacklist=${x#blacklist=} - ;; - netconsole=*) - netconsole=${x#netconsole=} - ;; - esac -done - -if [ -z "${noresume}" ]; then - export resume=${RESUME} -else - export noresume -fi - -[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} - -maybe_break top - -# export BOOT variable value for compcache, -# so we know if we run from casper -export BOOT - -# Don't do log messages here to avoid confusing usplash -run_scripts /scripts/init-top - -maybe_break modules -log_begin_msg "Loading essential drivers..." -load_modules -log_end_msg - -maybe_break premount -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" -run_scripts /scripts/init-premount -[ "$quiet" != "y" ] && log_end_msg - -maybe_break mount -log_begin_msg "Mounting root file system..." -. /scripts/${BOOT} -parse_numeric ${ROOT} -mountroot -log_end_msg - -maybe_break bottom -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" -run_scripts /scripts/init-bottom -[ "$quiet" != "y" ] && log_end_msg - -# Move virtual filesystems over to the real filesystem -mount -n -o move /sys ${rootmnt}/sys -mount -n -o move /proc ${rootmnt}/proc - -# Check init bootarg -if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then - echo "Target filesystem doesn't have ${init}." - init= -fi - -# Search for valid init -if [ -z "${init}" ] ; then - for init in /sbin/init /etc/init /bin/init /bin/sh; do - if [ ! -x "${rootmnt}${init}" ]; then - continue - fi - break - done -fi - -# No init on rootmount -if [ ! -x "${rootmnt}${init}" ]; then - panic "No init found. Try passing init= bootarg." -fi - -# Confuses /etc/init.d/rc -if [ -n ${debug} ]; then - unset debug -fi - -# Chain to real filesystem -maybe_break init -exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 -panic "Could not execute run-init." diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules deleted file mode 100644 index 9aa46468..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules +++ /dev/null @@ -1,10 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions deleted file mode 100644 index 3bea0c97..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions +++ /dev/null @@ -1,420 +0,0 @@ -# -*- shell-script -*- - -_log_msg() -{ - if [ "$quiet" = "y" ]; then return; fi - echo "$@" -} - -log_success_msg() -{ - _log_msg "Success: $@" -} - -log_failure_msg() -{ - _log_msg "Failure: $@" -} - -log_warning_msg() -{ - _log_msg "Warning: $@" -} - -log_begin_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TEXT $@" - fi - _log_msg "Begin: $@ ..." -} - -log_end_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "SUCCESS ok" - fi - _log_msg "Done." -} - -# Add failure hook -add_mountroot_fail_hook() -{ - mkdir -p /tmp/mountroot-fail-hooks.d - ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" -} - -# Run failure hooks. -# When a failure hook exits "1", it has not done anything to correct the -# system. Exiting "0" means that something has been attempted to resolve -# the lack of a root filesystem. -# Hooks are run in lexigraphical order, and are responsible for removing -# themselves if they should not re-run in a later cycle. When one exits -# "0", the stack is stopped, so the caller can return to the main rootfs -# wait loop. -try_failure_hooks() -{ - local hook - - # Disable usplash so text from hooks can be seen - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - for hook in /tmp/mountroot-fail-hooks.d/*; do - if [ -x ${hook} ] && ${hook} mountfail; then - return 0 - fi - done - return 1 -} - -panic() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - # Disallow console access - if [ -n "${panic}" ]; then - sleep ${panic} - reboot - fi - - modprobe i8042 - modprobe atkbd - - run_scripts /scripts/panic - - echo $@ - PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 -} - -maybe_break() -{ - if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then - panic "Spawning shell within the initramfs" - fi -} - -render() -{ - eval "echo -n \${$@}" -} - -set_initlist() -{ - unset initlist - for si_x in ${initdir}/*; do - # skip empty dirs without warning - [ "${si_x}" = "${initdir}/*" ] && return - - # only allow variable name chars - case ${si_x#${initdir}/} in - *[![:alnum:]_]*) - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not alphanumeric or '_' file" - continue - ;; - esac - - # skip non executable scripts - if [ ! -x ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not executable" - continue - fi - - # skip directories - if [ -d ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: a directory" - continue - fi - - initlist="${initlist} ${si_x#${initdir}/}" - done -} - -reduce_satisfied() -{ - deplist="$(render array_${1})" - unset tmpdeplist - for rs_y in ${deplist}; do - # check if there are alternatives - case ${rs_y} in - *\|*) - OLD_IFS="$IFS" - IFS="|" - for rs_z in ${rs_y}; do - IFS="$OLD_IFS" - # only allow variable name chars - case ${rs_z} in - *[![:alnum:]_]*) - IFS="|" - continue - ;; - esac - # skip non executable scripts - if [ ! -x ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - # skip directories - if [ -d ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - tmpdeplist="${tmpdeplist} ${rs_z}" - break - done - IFS="$OLD_IFS" - ;; - *) - case ${rs_y} in - *[![:alnum:]_]*) - continue - ;; - esac - if [ ! -x ${initdir}/${rs_y} ]; then - continue - fi - if [ -d ${initdir}/${rs_y} ]; then - continue - fi - tmpdeplist="${tmpdeplist} ${rs_y}" - ;; - esac - done - deplist=${tmpdeplist} - for rs_x in ${runlist}; do - pop_list_item ${rs_x} ${deplist} - deplist=${tmppop} - done - eval array_${1}=\"${deplist}\" -} - -get_prereqs() -{ - set_initlist - for gp_x in ${initlist}; do - tmp=$(${initdir}/${gp_x} prereqs) - eval array_${gp_x}=\"${tmp}\" - done -} - -count_unsatisfied() -{ - set -- ${@} - return ${#} -} - -# Removes $1 from initlist -pop_list_item() -{ - item=${1} - shift - set -- ${@} - unset tmppop - # Iterate - for pop in ${@}; do - if [ ${pop} = ${item} ]; then - continue - fi - tmppop="${tmppop} ${pop}" - done - -} - -# This function generates the runlist, so we clear it first. -reduce_prereqs() -{ - unset runlist - set -- ${initlist} - i=$# - # Loop until there's no more in the queue to loop through - while [ ${i} -ne 0 ]; do - oldi=${i} - for rp_x in ${initlist}; do - reduce_satisfied ${rp_x} - count_unsatisfied $(render array_${rp_x}) - cnt=${?} - if [ ${cnt} -eq 0 ]; then - runlist="${runlist} ${rp_x}" - pop_list_item ${rp_x} ${initlist} - initlist=${tmppop} - i=$((${i} - 1)) - fi - done - if [ ${i} -eq ${oldi} ]; then - panic "PANIC: Circular dependancy. Exiting." - fi - done -} - -get_prereq_pairs() -{ - set_initlist - for gp_x in ${initlist}; do - echo ${gp_x} ${gp_x} - prereqs=$(${initdir}/${gp_x} prereqs) - for prereq in ${prereqs}; do - echo ${prereq} ${gp_x} - done - done -} - -call_scripts() -{ - for cs_x in ${runlist}; do - [ -f ${initdir}/${cs_x} ] || continue - if [ x"$1" = "xoptional" ]; then - option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") - [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue - fi - - # mkinitramfs verbose output - if [ "${verbose}" = "y" ]; then - echo "Calling hook ${cs_x}" - fi - ${initdir}/${cs_x} - # allow boot scripts to modify exported boot paramaters - if [ -e /conf/param.conf ]; then - . /conf/param.conf - fi - done -} - -run_scripts() -{ - initdir=${1} - [ ! -d ${initdir} ] && return - - if [ -f ${initdir}/ORDER ]; then - . ${initdir}/ORDER - elif [ -x /usr/bin/tsort ]; then - runlist=$(get_prereq_pairs | tsort) - call_scripts $2 - else - get_prereqs - reduce_prereqs - call_scripts $2 - fi -} - -cache_run_scripts() -{ - DESTDIR=${1} - scriptdir=${2} - initdir=${DESTDIR}${scriptdir} - [ ! -d ${initdir} ] && return - - runlist=$(get_prereq_pairs | tsort) - for crs_x in ${runlist}; do - [ -f ${initdir}/${crs_x} ] || continue - echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER - echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER - done -} - -# Load custom modules first -load_modules() -{ - if [ -e /conf/modules ]; then - cat /conf/modules | while read m; do - # Skip empty lines - if [ -z "$m" ]; then - continue - fi - # Skip comments - d?ash removes whitespace prefix - com=$(printf "%.1s" "${m}") - if [ "$com" = "#" ]; then - continue - fi - modprobe $m - done - fi -} - -# lilo compatibility -parse_numeric() { - case $1 in - "") - return - ;; - /*) - return - ;; - *:*) - minor=${1#*:} - major=${1%:*} - ;; - *) - value=$(( 0x${1} )) - minor=$(( ${value} % 256 )) - major=$(( ${value} / 256 )) - ;; - esac - - mknod -m 600 /dev/root b ${major} ${minor} - ROOT=/dev/root -} - -configure_networking() -{ - # networking already configured thus bail out - [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 - - if [ "${HWADDR}" ]; then - # select interface by MAC address - HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" - local iface - for iface in /sys/class/net/*; do - [ -f "$iface/address" ] || continue - if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then - DEVICE="${iface#/sys/class/net/}" - fi - done - fi - - # support ip options see linux sources - # Documentation/filesystems/nfsroot.txt - case ${IPOPTS} in - none|off) - # Do nothing - ;; - ""|on|any) - # Bring up device - ipconfig -t 60 ${DEVICE} - ;; - dhcp|bootp|rarp|both) - ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} - ;; - *) - ipconfig -t 60 -d $IPOPTS - - # grab device entry from ip option - NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} - if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then - NEW_DEVICE=${NEW_DEVICE%:*} - else - # wrong parse, possibly only a partial string - NEW_DEVICE= - fi - if [ -n "${NEW_DEVICE}" ]; then - DEVICE="${NEW_DEVICE}" - fi - ;; - esac - - # source ipconfig output - if [ -n "${DEVICE}" ]; then - # source specific bootdevice - . /tmp/net-${DEVICE}.conf - else - # source any interface as not exaclty specified - . /tmp/net-*.conf - fi -} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth deleted file mode 100755 index 8b1e7c8a..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] -then - /bin/plymouth update-root-fs --new-root-dir=${rootmnt} -fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev deleted file mode 100755 index f9d2ce9d..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -e -# initramfs init-bottom script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Stop udevd, we'll miss a few events while we run init, but we catch up -pkill udevd - -# Move /dev to the real filesystem -mount -n -o move /dev ${rootmnt}/dev diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 deleted file mode 100755 index e5bc78f1..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -# init-premount script for lvm2. - -PREREQS="udev mdadm" -prereqs() -{ - echo $PREREQS -} - -mountroot_fail() -{ - if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then - cat </dev/null; then - modprobe ata_generic all_generic_ide=1 -fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist deleted file mode 100755 index 5e6b3c1e..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -# blacklist vga16fb when vga= or video= given -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*|video=*) - echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs - ;; - esac -done - -# sanity check -[ -z "${blacklist}" ] && exit 0 - -# write blacklist to modprobe.d -IFS=',' -for b in ${blacklist}; do - echo "blacklist $b" >> /etc/modprobe.d/initramfs -done diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup deleted file mode 100755 index df767bb4..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup +++ /dev/null @@ -1,83 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -OPTION=FRAMEBUFFER -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer deleted file mode 100755 index bb59aadf..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - - -# The options part of the kernel "video=" argument (i.e. everyting -# after "video=:") has very inconsistent rules. -# -# Generally the following applies: -# 1) options are comma-separated -# 2) options can be in either of these three forms: -# =, :, . -# 3) the "mode" option has the form x[M][R][-][@][i][m] -# and may or may not start with "mode=" -# -# When the options are used with modules, they need to be space-separated -# and the following conversions are needed: -# : -> = -# -> =1 -# -> mode= -parse_video_opts() -{ - local OPTS="$1" - local IFS="," - - # Must be a line like video=:,[opt2]... - if [ "${OPTS}" = "${OPTS%%:*}" ]; then - return - fi - OPTS="${OPTS#*:}" - for opt in ${OPTS}; do - # Already in the "=" form - if [ "${opt}" != "${opt#*=}" ]; then - echo -n "$opt " - # In the ":" form - elif [ "${opt}" != "${opt#*:}" ]; then - echo -n "${opt%:*}=${opt#*:} " - # Presumably a modevalue without the "mode=" prefix - elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then - echo -n "mode=$opt " - # Presumably a boolean - else - echo -n "${opt}=1 " - fi - done -} - -FB="" -OPTS="" - -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*) - FB="vesafb"; - OPTS=""; - ;; - video=*) - FB=${x#*=} - FB="${FB%%:*}" - OPTS="$(parse_video_opts "${x}")" - esac -done - -# Map command line name to module name -case ${FB} in -matroxfb) - FB=matroxfb_base - ;; -esac - -if [ -n "${FB}" ]; then - # Some framebuffer devices need character devices :-/ - udevadm settle - MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} - # Wait for the framebuffer devices to be ready - udevadm settle -else - # If we have no graphics devices yet, wait for udev to settle - [ -d /sys/class/graphics/fbcon ] || udevadm settle - [ -d /sys/class/graphics/fb0 ] || udevadm settle - [ -d /sys/class/drm/card0 ] || udevadm settle -fi - -# Force fb mode via /sys interface -for x in $(cat /proc/cmdline); do - case ${x} in - fbmode=*) - MODE=${x#*=} - echo "$MODE" > /sys/class/graphics/fb0/mode - ;; - esac -done diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap deleted file mode 100755 index cb67aa96..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth deleted file mode 100755 index 813b6b4c..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="framebuffer console_setup brltty" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -printf '\033[?25l' > /dev/tty7 -/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid -/bin/plymouth show-splash diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev deleted file mode 100755 index cd2fa564..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -e -# initramfs init-top script for udev - -PREREQ="all_generic_ide blacklist" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# It's all over netlink now -echo "" > /proc/sys/kernel/hotplug - -# Start the udev daemon to process events -/sbin/udevd --daemon --resolve-names=never - -# Iterate sysfs and fire off everything; if we include a rule for it then -# it'll get handled; otherwise it'll get handled later when we do this again -# in the main boot sequence. -( /sbin/udevadm trigger --subsystem-match=block; \ - /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local deleted file mode 100644 index 865572b5..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local +++ /dev/null @@ -1,131 +0,0 @@ -# Local filesystem mounting -*- shell-script -*- - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" - run_scripts /scripts/local-top - [ "$quiet" != "y" ] && log_end_msg - - while [ -z "${FSTYPE}" ]; do - FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) - - # Run failure hooks, hoping one of them can fix up the system - # and we can restart the wait loop. If they all fail, abort - # and move on to the panic handler and shell. - if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then - break - fi - done - - # We've given up, but we'll let the user fix matters if they can - while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do - # give hint about renamed root - case "${ROOT}" in - /dev/hd*) - suffix="${ROOT#/dev/hd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/sd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" - fi - ;; - /dev/sd*) - suffix="${ROOT#/dev/sd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/hd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" - fi - ;; - esac - echo "Gave up waiting for root device. Common problems:" - echo " - Boot args (cat /proc/cmdline)" - echo " - Check rootdelay= (did the system wait long enough?)" - echo " - Check root= (did the system wait for the right device?)" - echo " - Missing modules (cat /proc/modules; ls /dev)" - panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" - done - - # Get the root filesystem type if not set - if [ -z "${ROOTFSTYPE}" ]; then - [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") - ROOTFSTYPE="${FSTYPE}" - else - FSTYPE="${ROOTFSTYPE}" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" - run_scripts /scripts/local-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ] && \ - [ -z "$LOOP" ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} - - # FIXME This has no error checking - # Mount root - mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} - mountroot_status="$?" - if [ "$LOOP" ]; then - if [ "$mountroot_status" != 0 ]; then - if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then - panic " -Could not mount the partition ${ROOT}. -This could also happen if the file system is not clean because of an operating -system crash, an interrupted boot process, an improper shutdown, or unplugging -of a removable device without first unmounting or ejecting it. To fix this, -simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then -gracefully shut down and reboot back into Windows. After this you should be -able to reboot again and resume the installation. -(filesystem = ${FSTYPE}, error code = $mountroot_status) -" - fi - fi - - mkdir -p /host - mount -o move ${rootmnt} /host - - while [ ! -e "/host/${LOOP#/}" ]; do - panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" - done - - # Get the loop filesystem type if not set - if [ -z "${LOOPFSTYPE}" ]; then - eval $(fstype < "/host/${LOOP#/}") - else - FSTYPE="${LOOPFSTYPE}" - fi - if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then - FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") - [ -z "$FSTYPE" ] && FSTYPE="unknown" - fi - - if [ ${readonly} = y ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - modprobe loop - modprobe ${FSTYPE} - - # FIXME This has no error checking - mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} - - if [ -d ${rootmnt}/host ]; then - mount -o move /host ${rootmnt}/host - fi - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" - run_scripts /scripts/local-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g deleted file mode 100755 index 335ef95e..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g +++ /dev/null @@ -1,16 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - mkdir -p /dev/.initramfs/varrun - pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit - pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit -fi - -exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc deleted file mode 100755 index c9fbc369..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/sh -e -# initramfs local-premount script for fixrtc - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - -# use the fixrtc cmdline option in your bootloader to -# automatically set the hardware clock to the date of -# the last mount of your root filesystem to avoid fsck -# to get confused by the superblock being in the future - -BROKEN_CLOCK="" -ROOTDEV="" - -for x in $(cat /proc/cmdline); do - case ${x} in - root=*) - value=${x#*=} - - # Find the device node path depending on the form of root= : - - case ${value} in - UUID=*) - ROOTDEV=/dev/disk/by-uuid/${value#UUID=} - ;; - LABEL=*) - ROOTDEV=/dev/disk/by-label/${value#LABEL=} - ;; - *) - ROOTDEV=${value} - ;; - esac - ;; - fixrtc) - BROKEN_CLOCK=1 - ;; - esac -done - -if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then - ROOTDISK=$(readlink -f "$ROOTDEV") && - - TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && - TIME=${TIMESTR#*:} && - - date --set="${TIME} 1 minute" >/dev/null 2>&1 -fi - -# This script is best-effort. If we couldn't fudge the clock as desired, -# just try to carry on boot anyway: -# It will probably fail, but we won't have made the situation any worse. -exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g deleted file mode 100755 index 57e7f8ba..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - modprobe fuse -fi - -exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume deleted file mode 100755 index 46535936..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -. ./scripts/functions - -if [ -z "${resume}" ]; then - exit 0 -fi - -case $resume in -LABEL=*) - resume="${resume#LABEL=}" - - # support any / in LABEL= path (escape to \x2f) - case "${resume}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - resume="$(echo ${resume} | sed 's,/,\\x2f,g')" - else - if [ "${resume}" != "${resume#/}" ]; then - resume="\x2f${resume#/}" - fi - if [ "${resume}" != "${resume%/}" ]; then - resume="${resume%/}\x2f" - fi - IFS='/' - newresume= - for s in $resume; do - if [ -z "${newresume}" ]; then - newresume="${s}" - else - newresume="${newresume}\\x2f${s}" - fi - done - unset IFS - resume="${newresume}" - fi - esac - resume="/dev/disk/by-label/${resume}" - ;; -UUID=*) - resume="/dev/disk/by-uuid/${resume#UUID=}" - ;; -esac - -SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) - -case "${SWAPTYPE}" in - swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) - if [ -x /bin/plymouth ] && plymouth --ping; then - plymouth message --text="Resuming from $resume" - fi - - # hardcode path, uswsusp ships an resume binary too - if [ -n "${resume_offset}" ]; then - /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 - else - /bin/resume ${resume} >/dev/null 2>&1 - fi - ;; -esac diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs deleted file mode 100644 index b9c2522d..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs +++ /dev/null @@ -1,83 +0,0 @@ -# NFS filesystem mounting -*- shell-script -*- - -# FIXME This needs error checking - -retry_nr=0 - -# parse nfs bootargs and mount nfs -do_nfsmount() -{ - - configure_networking - - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - - if [ -z "${NFSOPTS}" ]; then - NFSOPTS="-o retrans=10" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" - run_scripts /scripts/nfs-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ]; then - roflag="-o ro" - else - roflag="-o rw" - fi - - nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} -} - -# NFS root mounting -mountroot() -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" - run_scripts /scripts/nfs-top - [ "$quiet" != "y" ] && log_end_msg - - modprobe nfs - # For DHCP - modprobe af_packet - - # Default delay is around 180s - # FIXME: add usplash_write info - if [ -z "${ROOTDELAY}" ]; then - delay=180 - else - delay=${ROOTDELAY} - fi - - # loop until nfsmount succeds - while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do - [ ${retry_nr} -gt 0 ] && \ - [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" - do_nfsmount - retry_nr=$(( ${retry_nr} + 1 )) - [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 - [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg - done - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" - run_scripts /scripts/nfs-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev deleted file mode 100755 index 980e496f..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -e -# initramfs nfs-top script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Each call to udevsettle can take up to three minutes -if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TIMEOUT 360" - trap "/sbin/usplash_write 'TIMEOUT 15'" 0 -fi - -# We need to wait for the network card drivers to be loaded -/sbin/udevadm settle diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup deleted file mode 100755 index 5e97f65e..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup +++ /dev/null @@ -1,82 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap deleted file mode 100644 index f011abf5..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth deleted file mode 100755 index 2da5a6b5..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -/bin/plymouth quit diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm deleted file mode 100644 index 11d27f8c..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm +++ /dev/null @@ -1,18 +0,0 @@ -# mdadm boot_degraded configuration -# -# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if -# you want. You can also change the values here and changes will be preserved. -# Do note that only the values are preserved; the rest of the file is -# rewritten. -# -# BOOT_DEGRADED: -# Do you want to boot your system if a RAID providing your root filesystem -# becomes degraded? -# -# Running a system with a degraded RAID could result in permanent data loss -# if it suffers another hardware fault. -# -# However, you might answer "yes" if this system is a server, expected to -# tolerate hardware faults and boot unattended. - -BOOT_DEGRADED=false diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume deleted file mode 100644 index 34fdc4a5..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume +++ /dev/null @@ -1 +0,0 @@ -RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks deleted file mode 100755 index 3d9b04b8..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash - - -# Insert OpenGnsys Engine -mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf deleted file mode 100644 index 754e2bea..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# initramfs.conf -# Configuration file for mkinitramfs(8). See initramfs.conf(5). -# - -# -# MODULES: [ most | netboot | dep | list ] -# -# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. -# -# dep - Try and guess which modules to load. -# -# netboot - Add the base modules, network modules, but skip block devices. -# -# list - Only include modules from the 'additional modules' list -# - -MODULES=most - -# -# BUSYBOX: [ y | n ] -# -# Use busybox if available. -# - -BUSYBOX=y - -# -# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] -# -# Amount of RAM to use for RAM-based compressed swap space. -# -# An empty value - compcache isn't used, or added to the initramfs at all. -# An integer and K (e.g. 65536 K) - use a number of kilobytes. -# An integer and M (e.g. 256 M) - use a number of megabytes. -# An integer and G (e.g. 1 G) - use a number of gigabytes. -# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. -# -# You can optionally install the compcache package to configure this setting -# via debconf and have userspace scripts to load and unload compcache. -# - -COMPCACHE_SIZE="" - -# -# NFS Section of the config. -# - -# -# BOOT: [ local | nfs ] -# -# local - Boot off of local media (harddrive, USB stick). -# -# nfs - Boot using an NFS drive as the root of the drive. -# - -BOOT=local - -# -# DEVICE: ... -# -# Specify the network interface, like eth0 -# - -DEVICE=eth0 - -# -# NFSROOT: [ auto | HOST:MOUNT ] -# - -NFSROOT=auto - diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules deleted file mode 100644 index 484ef718..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules +++ /dev/null @@ -1,13 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -fbcon -vesafb -vga16b diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og deleted file mode 100755 index 6408eda7..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og +++ /dev/null @@ -1,140 +0,0 @@ -# OpenGnsys Local filesystem mounting -*- shell-script -*- - -ogLinkBusybox () -{ -for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do - ln -f /bin/busybox /bin/$n -done -ln -f /bin/busybox /bin/sh -} - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - - mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -configure_networking -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - -set -a -trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 -/opt/opengnsys/etc/preinit/default.sh - - - - - - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - run_scripts /scripts/og-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf deleted file mode 100644 index 3c27473b..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf +++ /dev/null @@ -1,20 +0,0 @@ -# -# Configuration file for update-initramfs(8) -# - -# -# update_initramfs [ yes | all | no ] -# -# Default is yes -# If set to all update-initramfs will update all initramfs -# If set to no disables any update to initramfs beside kernel upgrade - -update_initramfs=yes - -# -# backup_initramfs [ yes | no ] -# -# Default is no -# If set to no leaves no .bak backup files. - -backup_initramfs=no diff --git a/client/ogClient/old/serverstructure/etc/exports.txt b/client/ogClient/old/serverstructure/etc/exports.txt deleted file mode 100644 index d5053530..00000000 --- a/client/ogClient/old/serverstructure/etc/exports.txt +++ /dev/null @@ -1 +0,0 @@ -/var/lib/tftpboot/ *(ro,no_subtree_check,no_root_squash,sync) diff --git a/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt b/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt deleted file mode 100644 index e47df3d8..00000000 --- a/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt +++ /dev/null @@ -1,29 +0,0 @@ -[tftpboot] - comment = el directorio fisico ogclient debe estar como escritura - writeable = no - read only = yes - #locking = no - path = /var/lib/tftpboot - guest ok = no - -[ogclient] - comment = client - read only = yes - locking = no - path = /opt/opengnsys/client - guest ok = no - -[oglog] - comment = log - read only = yes - locking = no - path = /opt/opengnsys/log/clients - guest ok = no - -[ogimages] - comment = images - read only = no - writeable = yes - locking = no - path = /opt/opengnsys/images - guest ok = no \ No newline at end of file diff --git a/client/ogClient/old/serverstructure/init/defaultTESTING.sh b/client/ogClient/old/serverstructure/init/defaultTESTING.sh deleted file mode 100755 index 07c10bcb..00000000 --- a/client/ogClient/old/serverstructure/init/defaultTESTING.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -/etc/init.d/ssh restart -#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 - - -# Fichero de registro de incidencias (en el servidor; si no, en local). -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} -if ! touch $OGLOGFILE 2>/dev/null; then - OGLOGFILE=/var/log/opengnsys.log -fi - - -#TODO => activacion de modo escritura en REPO -ActiveAdmin=true -if [ $ActiveAdmin == "true" ] -then - export boot=admin - umount /opt/opengnsys/images - - if [ "$ogprotocol" == "nfs" ] - then - mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock - fi - - if [ "$ogprotocol" == "smb" ] - then - echo "montando smb" - mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og - echo mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og - - fi -fi -# Arranque de OpenGnSys Client. -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - - - echo "$MSG_LAUNCHCLIENT modo cliente full" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 -fi - -# Si fallo en cliente y modo "admin", cargar shell; si no, salir. -#if [ "$boot" == "admin" ]; then - bash -#fi diff --git a/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh b/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh deleted file mode 100755 index 3d291cc5..00000000 --- a/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -# Para que no haya problemas con el interprete -#ln -fs /opt/opengnsys/bin/bash /bin/bash - -set -a - -#source /opt/opengnsys/etc/preinit/loadenviron.sh -source /opt/opengnsys/etc/preinit/loadenvironTESTING.sh -#for f in fileslinks.sh loadudeb.sh loadmodules.sh metadevs.sh; do -for f in loadmodulesTESTING.sh; do - $OGETC/preinit/$f -done - -if [ -f $OGETC/init/$OG_IP.sh ]; then - $OGETC/init/$OG_IP.sh - -elif [ -f $OGETC/init/$OGGROUP.sh ]; then - $OGETC/init/$OGGROUP.sh - -elif [ -f $OGETC/init/defaultTESTING.sh ]; then - $OGETC/init/defaultTESTING.sh - -else - echo "No se ha encontrado script de inicio" - halt -fi diff --git a/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh b/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh deleted file mode 100755 index 1273db7f..00000000 --- a/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -#/** -#@file loadenviron.sh -#@brief Script de carga de la API de funciones de OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - -# Idioma por defecto. -export LANG="${LANG:-es_ES}" - -# Directorios del projecto OpenGnSys. -export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" -if [ -d $OPENGNSYS ]; then - export OGBIN=$OPENGNSYS/bin/testing - #export OGBIN=$OPENGNSYS/bin - export OGETC=$OPENGNSYS/etc - export OGLIB=$OPENGNSYS/lib - export OGAPI=$OGLIB/engine/bin - export OGSCRIPTS=$OPENGNSYS/scripts - export OGIMG=$OPENGNSYS/images - export OGCAC=$OPENGNSYS/cache - export OGLOG=$OPENGNSYS/log - - #export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH - #export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH - - # Cargar fichero de idioma. - LANGFILE=$OGETC/lang.$LANG.conf - if [ -f $LANGFILE ]; then - source $LANGFILE - for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do - export $i - done - fi - echo "$MSG_LOADAPI" - # Cargar mapa de teclado. - loadkeys ${LANG%_*} >/dev/null - # Cargar API de funciones. - for i in $OGAPI/*.lib; do - source $i - done - for i in $(typeset -F | cut -f3 -d" "); do - export -f $i - done - - # Añadir dependencia de arquitectura - ARCH=$(ogGetArch) -# if [ -n "$ARCH" ]; then - # export PATH=$OGBIN/$ARCH:$PATH - # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH - # fi - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin - export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - - # Carga de las API testing - if [ "$engine" = "testing" ] - then - for i in $OGAPI/*.testing; do - source $i - done - #export PATH=$PATH:$OGBIN/$ARCH-testing - fi - - # Fichero de registros. - export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" - # FIXME Pruebas para grupos de ordenadores - #export OGGROUP=$(ogGetGroup) - export OGGROUP="$group" -fi - -# Declaración de códigos de error. -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. - diff --git a/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh b/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh deleted file mode 100755 index cea7d53a..00000000 --- a/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -#/** -#@file loadmodules.sh -#@brief Script de inicio para cargar módulos complementarios del kernel. -#@version 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-01-26 -#*/ - - -MSG_LOADMODULES=${MSG_LOADMODULES:-"."} -echo "$MSG_LOADMODULES para cliente full" - -# Directorio principal de módulos del kernel. -MODULESDIR=/lib/modules/$(uname -r)/kernel - -# Módulo del ratón. -insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null -# Módulos de discos. -#for m in $MODULESDIR/drivers/ata/*.ko; do - # insmod $m 2>/dev/null -#done -# Módulos de sistemas de archivos. -#for f in reiserfs jfs xfs hfs hfsplus; do -#for f in reiserfs xfs hfs hfsplus; do -# insmod $MODULESDIR/fs/$f/$f.ko 2>/dev/null -#done - diff --git a/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL b/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL deleted file mode 100644 index b7f81d0a..00000000 --- a/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL +++ /dev/null @@ -1,18 +0,0 @@ -DEFAULT pxe-2.6.32-21-generic-pae - -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin - -LABEL pxe-2.6.32-21-generic-pae -KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae -APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=nfs engine=testing - - -#NOTA: parametro boot: reservado para oginit INCOMPATIBLE CON BOOT=ADMIN -#NOTA: reposerver=$IPREPO correspondería a tu servidor Repositorio OG -#ogrepo=172.17.32.242 -#ip: -#og2nd=sqfs =>sqfs, img -#ogprotocol=nfs => nfs, smb -#engine=testing => activa las libreias testing de cada universidad. -- cgit v1.2.3-18-g5258 From 0176a459d7df62d6cb07c2df6457dfbc974a5dbc Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:45:43 +0000 Subject: version1.0 renombrando ogclient boot-tools git-svn-id: https://opengnsys.es/svn/branches/version1.0@1759 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/boot-tools/INSTALL.es.txt | 46 ++ client/boot-tools/kernelParameterOG.es.txt | 29 + client/boot-tools/ogClientGeneratorV2.sh | 166 +++++ client/boot-tools/ogClientManager.lib | 608 ++++++++++++++++++ client/boot-tools/ogInstaller.lib | 958 +++++++++++++++++++++++++++++ client/ogClient/INSTALL.es.txt | 46 -- client/ogClient/kernelParameterOG.es.txt | 29 - client/ogClient/ogClientGeneratorV2.sh | 166 ----- client/ogClient/ogClientManager.lib | 608 ------------------ client/ogClient/ogInstaller.lib | 958 ----------------------------- 10 files changed, 1807 insertions(+), 1807 deletions(-) create mode 100644 client/boot-tools/INSTALL.es.txt create mode 100644 client/boot-tools/kernelParameterOG.es.txt create mode 100755 client/boot-tools/ogClientGeneratorV2.sh create mode 100644 client/boot-tools/ogClientManager.lib create mode 100644 client/boot-tools/ogInstaller.lib delete mode 100644 client/ogClient/INSTALL.es.txt delete mode 100644 client/ogClient/kernelParameterOG.es.txt delete mode 100755 client/ogClient/ogClientGeneratorV2.sh delete mode 100644 client/ogClient/ogClientManager.lib delete mode 100644 client/ogClient/ogInstaller.lib diff --git a/client/boot-tools/INSTALL.es.txt b/client/boot-tools/INSTALL.es.txt new file mode 100644 index 00000000..b357595b --- /dev/null +++ b/client/boot-tools/INSTALL.es.txt @@ -0,0 +1,46 @@ +########## INSTALACION ################################## + +### NOTA principal: utilizar el usuario root para este proceso #### +1. Comprobar la conexión a internet, sobre todo si usas proxy. El hecho de que te funcione apt-get no significa que tengas el proxy configurado. +1. Descargar del subversion la estrucutura del cliente. + +# reubicacion al trunk/client/boot + +Proceso: +0. Si ya tenemos un /var/lib/tftpboot/ogclient lo renombramos por si acaso. +1. Descargar del subversion la rama ogClient. +3. Ejecutar el instalador: + +mv /opt/opengnsys/tftpboot/ogclient/ /opt/opengnsys/tftpboot/ogclientTrunk; +svn checkout http://www.opengnsys.es/svn/branches/ogClient /tmp/opengnsys_installer/opengnsys/installer/ogClient; +svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/shared/ /tmp/opengnsys_installer/opengnsys/client/shared; +svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/engine/ /tmp/opengnsys_installer/opengnsys/client/engine; +find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null; +/tmp/opengnsys_installer/opengnsys/installer/ogClient/ogClientGeneratorV2.sh; + + + +NOTA: el proceso tardará un buen rato, dependiendo de nuestras circustancias. +NOTA: crea un kernel, initrd, ogclient.img en /var/lib/tftpboot/ogclient +NOTA: el ogclient.img es el Segundo sistema de archivos en formato fichero bloques emulando a disco con partición primaria. +NOTA: el ogclient.sqfs es el Segundo sistema de archivos (partición primaria del img) en formato squashfs. Se usará con el parámetro og2nd=sqfs +NOTA: los logs de instalación estarán en /tmp/opengnsys_installation.log + + + NOTA A RECORDAR: + NOTA ACLARATORIA: $OGSCRITPS(reboot,poweroff) antes de /sbin/{reboot,poweroff} + + ################## Descripcion de la estrucutra de ogClient. + los directorios old y serverstrucutre son antiguos, pero no borrarlos. + INSTALL.es.txt : este mismo archivo. + ogInstaller.lib : son todas las funciones de instalacion del instalador oficial de opengnys. Algunas de ellas son utilizadas. Crear ticket para separar las funciones de iinstalacion del proceso de instalacion. + ogClientManager.lib: son las funicones especificas para la instalacion del ogclient. estan escritas en orden de que son llamadas por el instalador, (ogClientGeneratorV2.sh) + ogClientGeneratorV2.sh. Es el guión de ejecución del isntalador. + + + + ############ ERROR PRINCIPAL 2 ####### + necesita que en el equipo donde se ejecuta el scripts, disponga de la estrucutra /opt/opengnsys/client + sobre todo los lib/fonts, el lib/pci.ids el bin/browser y el bin/ogAdmClient + + diff --git a/client/boot-tools/kernelParameterOG.es.txt b/client/boot-tools/kernelParameterOG.es.txt new file mode 100644 index 00000000..890652b4 --- /dev/null +++ b/client/boot-tools/kernelParameterOG.es.txt @@ -0,0 +1,29 @@ + +KERNEL ogclient/ogvmlinuz +initrd=ogclient/oginitrd.img + + + boot=oginit + + oginit=init|/bin/bash + + + ogrepo=ip del repositorio + + og2nd=sqfs|img + ogprotocol=smb|nfs + ogactiveadmin=true|false + ogdebug=true|false + + vga=788 + irqpoll + acpi=on + + +FIXME: en la version actual +repo=iprepoman +IP + +TODO: en la proxima version +ogrepo +ip \ No newline at end of file diff --git a/client/boot-tools/ogClientGeneratorV2.sh b/client/boot-tools/ogClientGeneratorV2.sh new file mode 100755 index 00000000..21449267 --- /dev/null +++ b/client/boot-tools/ogClientGeneratorV2.sh @@ -0,0 +1,166 @@ +#!/bin/bash +#@file ogClientGenerator.sh +#@brief Script generación del cliente OpenGnSys +#@warning +#@version 0.9 - +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + + +#$1 OSCONENAME lucid karmic +#if [ $# -ne 1 ]; then +# echo ": invalid number of parameters" +# echo " host | lucid | karmic | jaunty | lenny | squeeze " +# exit 1 +#fi +TYPECLIENT=host + +# Solo ejecutable por usuario root +if [ "$(whoami)" != 'root' ] +then + echo "ERROR: this program must run under root privileges!!" + exit 1 +fi + + + +#FIXME: variables del instalador oficial. +WORKDIR=/tmp/opengnsys_installer +INSTALL_TARGET=/opt/opengnsys +LOG_FILE=/tmp/opengnsys_installation.log +PROGRAMDIR=$(readlink -e $(dirname "$0")) + + +#funciones especificas del cliente. +source $PROGRAMDIR/ogClientManager.lib +#funciones incluidas dentro del scritps general de instalacion. +source $PROGRAMDIR/ogInstaller.lib + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" +########################################################################## +## FASE 1 - Instalación de software adicional. +##TO DO Integrar en el instaldor. Actualizar repositorios +# Datos para la generación del cliente. +DEPENDENCIES=( debootstrap subversion schroot squashfs-tools) +apt-get update +# Instalación de dependencias (paquetes de sistema operativo). +declare -a notinstalled +checkDependencies DEPENDENCIES notinstalled +if [ $? -ne 0 ]; then + installDependencies notinstalled + if [ $? -ne 0 ]; then + echoAndLog "Error while installing some dependeces, please verify your server installation before continue" + exit 1 + fi +fi +############## FIN DEL TO DO +############################################## FIN FASE 1 + + + + + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + +############## FASE 2 - Asignación de variables +#obtenemos las variables necesarias. +ogClientVar +#obtenemos la información del host. +ogClientOsInfo +######################## FIN fase 2 + +############# FASE 3: Segundo Sistema archivos (img) Creación. +#TODO comprobacion de que el fichero esta creado. +file $OGCLIENTFILE | grep "partition 1: ID=0x83" +if [ $? == 1 ] +then + ##3.1 creación y formateo del disco virtual. generamos el dispositivo loop. + ogClient2ndFile || exit 1 +fi + + +#3.2 generamos el Sistema de archivos con debootstrap +# Comprobamos que ya tenemos alguno. +schroot -p -c IMGogclient -- touch /tmp/ogclientOK +if [ -f /tmp/ogclientOK ] +then + rm /tmp/ogclientOK +else + ogClient2ndFs $TYPECLIENT || exit +fi + + +############### FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot +cat /etc/schroot/schroot.conf | grep ogclient || ogClientSchrootConf + + +############### FASE 5: Configuración del Segundo Sistema de archivos (img) con la estructura especial de OpenGnsys +ogClient2ndSVN $TYPECLIENT || exit + + + + +############# FASE6: Ejecutamos los scripts de personalización del 2º sistema de archivos (img) desde la jaula schroot +### 6.1 instalacion de software con apt-get +schroot -p -c IMGogclient -- /root/InstallSoftware.sh +echo "saltando" + if [ $? -ne 0 ]; then + errorAndLog "Instalando sofware adicional OG : ERROR" + exit +else + echoAndLog "Instalando sofware adicional OG: OK" +fi +#### 6.2 compilación de software. +cd / +schroot -p -c IMGogclient -- /root/CompileSoftware.sh +cd - + +### 6.3 configuracion hostname passroot securety +cd / +schroot -c IMGogclient -- /root/ConfFS.sh +cd - +#schroot -c IMGogclient -- echo -ne "og1\nog1\n" | passwd root +# schroot -c IMGogclient -- passwd root | echo "root" + + +### 6.4 incorporamos la clave publica del servidor +cd / +ssh-keygen -q -f /root/.ssh/id_rsa -N "" +cp /root/.ssh/id_rsa.pub /tmp +schroot -p -c IMGogclient -- /root/importSshKeys.sh +cd - +############ y la del propio cliente. +schroot -c IMGogclient -- /root/generateSshKeysClient.sh + +## configuramos los locales. +schroot -c IMGogclient -- /root/ReconfigureLocales.sh + + +################## FIN fase 6. Fin de comfiguración del segundo sistema de archivos (img) + +################## FASE 7. Generamos el 1er sistema de archivos. INITRD +#nota el parametro es el "tipo" de linux generado en debootstrap. usar solo "host", es decir version,kernel ... del propio host +#nota: hace un schroot, al 2fs (img), ejecuta el fichero generateinitrd. +#nota: deja en el directorio tmp del host el nuevo initrd, y lo copia al tftpboot +ogClientInitrd $TYPECLIENT + + +################## FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) +# generamos el 2sistema de archivos en squashfs +ogClient2ndSqfs +################## FIN FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) + + +##################### FASE 9. algunos detallas del pxe +#dejamos ficheros de ejemplo para el pxe y el nfs +ogClientConfpxe +##################### FIN FASE 9. algunos detallas del pxe + + +# Mostrar sumario de la instalación e instrucciones de post-instalación. +installationSummary + +echoAndLog "OpenGnSys installation finished at $(date)" \ No newline at end of file diff --git a/client/boot-tools/ogClientManager.lib b/client/boot-tools/ogClientManager.lib new file mode 100644 index 00000000..b19afefe --- /dev/null +++ b/client/boot-tools/ogClientManager.lib @@ -0,0 +1,608 @@ + +ogClientVar() +{ +export SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/installer/ogClient +export SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared +export SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine + +export OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ +export OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img +export OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount +# tamaño maximo limitado por schroot 2GB +export OGCLIENTSIZEMB=1900 +#export OGCLIENTSIZEMB=1000 +# export OGCLIENTSIZEKB=500 +export OGCLIENTLABEL=ogClient +#export OGLIB=/opt/opengnsys/client/lib +} + + + +function ogClientOsInfo () +{ +#TODO según host, un OSHHTP u otro OSARCH + #1 OSCODENAME jaunty|karmic|lucid + #devuelve OSDISTRIB(ubuntu,debian),OSCODENAME(lucid,karmic,squeeze):OGRELEASE:httpAPT + case $1 in + host | HOST) + export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') + export OSRELEASE=$(uname -a | awk '{print $3}') + uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + ;; + jaunty|JAUNTY) + export OSDISTRIB=ubuntu + export OSCODENAME=jaunty + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + ;; + lenny|LENNY) + export OSDISTRIB=debian + export OSCODENAME=lenny + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + squeeze|SQUEEZE) + export OSDISTRIB=debian + export OSCODENAME=squeeze + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + karmic|KARMIC) + export OSDISTRIB=ubuntu + export OSCODENAME=karmic + export OSRELEASE="2.6.31-14-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + lucid|LUCID) + export OSDISTRIB=ubuntu + export OSCODENAME=lucid + export OSRELEASE="2.6.32-21-generic-pae" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + *) + return 1 + ;; + esac + echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP +} + +#creación y formateo del disco virtual. +ogClient2ndFile () +{ +local RERROR DISKLOOP PARTLOOP #return code error +echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $OGCLIENTSIZEMB MB " +#Desmontamos por si acaso el dispositivo virtual +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $OGCLIENTMOUNT" +mkdir -p $OGCLIENTMOUNT +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Creando directorio $OGCLIENTMOUNT : ERROR" + return 1 +fi +echo "$FUNCNAME(): Creando el disco virtual que almacenará el FS del cliente $OGCLIENTSIZEMB MB de datos físicos" +dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB +#qemu-img create $OGCLIENTFILE 3G +#dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Creando el disco virtual: ERROR" + return 1 +fi + +DISKLOOP=$(losetup -f) +losetup $DISKLOOP $OGCLIENTFILE +echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria" +echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP +#echo $? +# da error, porque no puede actualizar el kernel. +#if [ $? -ne 0 ] +#then +# errorAndLog "$FUNCNAME(): Particionando el disco virutal: ERROR" +# return 1 +#fi + +echoAndLog "$FUNCNAME(): Desmontando $DISKLOOP despues del particionado " +losetup -d $DISKLOOP + +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR" + return 1 +fi + + +#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 +#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 +PARTLOOP=$(losetup -f) +echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP" +losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext3 -b 4096 -L $OGCLIENTLABEL $PARTLOOP +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR" + return 1 +fi +echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo " +losetup -d $PARTLOOP +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR" + return 1 +else + echoAndLog "$FUNCNAME(): $OGCLIENTFILE $OGCLIENTSIZEMB MB : OK" +fi +} + + + + + +ogClient2ndFs () +{ +ogClientOsInfo $1 +echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos " +#Montamos el dispositivo virtual en su punto de montaje. +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + +mount | grep $OGCLIENTMOUNT && echoAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 : FAILURE " + +#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} +debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} + + +if [ $? -ne 0 ]; then + errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP + : ha fallado!" + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + return 1 +else + echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP + : ok" + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + return 0 +fi + sleep 5 + +##preubas revisar OSRELEASE +#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +} + + + + +########## configura el segundo sistema de archivos +########### parametro: "host" +function ogClient2ndSVN() +{ +ogClientOsInfo $1 +#1 la salida de ogClientOsInfo +local LERROR +LERROR=TRUE +echoAndLog "$FUNCNAME: Iniciando la personalización con datos del SVN " +# comprobar que está montado $OGCLIENTMOUNT +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + +# parseamos del apt.source +sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Parseando el apt.sources sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list + : ERROR" + return 1 +fi + +#parseamos el scripts de generación del initrd. +sed -e "s/OSRELEASE/$OSRELEASE/g" ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.sh +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Parseando el /root/GenerateInitrd.sh: ERROR" + return 1 +fi + +#damos permiso al directorio de scripts +chmod 775 ${SVNCLIENTDIR}/clientstructure/root/* + +# los copiamos +cp -prv ${SVNCLIENTDIR}/clientstructure/* $OGCLIENTMOUNT +mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/ +cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/ +cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/ + +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): copiando los datos del svn a $OGCLIENTMOUNT: ERROR" + return 1 +fi + +# copiamos algunas cosas del nfsexport + +# A ####################### para el browser +mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/ + +cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts +cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts +cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/fonts + +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Linking fonts for browser1 $OGLIB : ERROR" + return 1 +fi + +# B ######################################################## +cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Coping pci.ids : ERROR" + return 1 +fi + +cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Coping browser : ERROR" + return 1 +fi + +cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Coping ogAdmClient : ERROR" + return 1 +else + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + echoAndLog "$FUNCNAME: Finalizado: OK " + return 0 +fi +} + + +ogClientSchrootConf() +{ +echoAndLog "$FUNCNAME: Iniciando la configuración del schroot " +cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` +cat << EOF > /etc/schroot/schroot.conf +[IMGogclient] +type=loopback +file=/var/lib/tftpboot/ogclient/ogclient.img +description=ogclient ubuntu luc IMGi +priority=1 +users=root +groups=root +root-groups=root +mount-options=-o offset=32256 +root-users=root +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF +cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime` +cat << EOF > /etc/schroot/mount-defaults +# mount.defaults: static file system information for chroots. +# Note that the mount point will be prefixed by the chroot path +# (CHROOT_PATH) +# +# +proc /proc proc defaults 0 0 +#procbususb /proc/bus/usb usbfs defaults 0 0 +#/dev /dev none rw,bind 0 0 +/dev/pts /dev/pts none rw,bind 0 0 +/dev/shm /dev/shm none rw,bind 0 0 +#/home /home none rw,bind 0 0 +/tmp /tmp none rw,bind 0 0 +EOF + +echoAndLog "$FUNCNAME: Finalizado: OK " +return 0 +} + + + +########### param1 "host" +ogClientInitrd() +{ +ogClientVar +cd / +ogClientOsInfo $1 +schroot -c IMGogclient -- /root/GenerateInitrd.generic.sh +echo "cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR" +cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR +cp /tmp/initrd.img-${OSRELEASE} ${OGCLIENTBASEDIR}/oginitrd.img +cp /tmp/vmlinuz-${OSRELEASE} ${OGCLIENTBASEDIR}/ogvmlinuz +cd - +} + + +ogClient2ndSqfs() +{ +ogClientVar +echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs " +# si ya existe un sqfs lo renombramos +[ -f $OGCLIENTBASEDIR/ogclient.sqfs ] && mv $OGCLIENTBASEDIR/ogclient.sqfs $OGCLIENTBASEDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S` +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 +mksquashfs $OGCLIENTMOUNT $OGCLIENTBASEDIR/ogclient.sqfs +chmod 744 $OGCLIENTBASEDIR/ogclient.sqfs +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +} + + + + +ogClientSshkeys() +{ +echo comprobamos clave rsa en el host REPO OG. +if [ ! -f /root/.ssh/id_rsa.pub ] +then + echo "creando claves rsa" + ssh-keygen -q -f /root/.ssh/id_dsa -t dsa -N "opengnsys" +else + echo "la claves ya estan creadas" +fi +echo "copiamos la clave publica a /tmp" +cp /root/.ssh/id_dsa.pub /tmp + +cat /tmp/id_dsa.pub + +echo "schroot con instrucciones." +schroot -c IMGogclient -- /root/importSshKeys.sh + +echo "limpiando" +rm /tmp/id_dsa.pub + +## copiamos ssh rsa del host al guest como authorized-key2 +##rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +##cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +##mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT +} + + +ogClientConfpxe() +{ +################## DEJAMOS FICHERO DE EJEMPLOS PARA: +#default +cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient +LABEL pxe-${OGRELEASE} +KERNEL ogclient/vmlinuz-$OGRELEASE +APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= +LABEL pxe-2.6.32-21-generic-pae +KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs +LABEL cache +KERNEL grub.exe +APPEND --config-file="find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img" +LABEL net +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae" +LABEL IfNOTcacheGOnet +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot" +#LABEL pxe-2.6.32-21-generic-pae +#KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +#APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=172.17.32.242 +#LABEL grub +#KERNEL grub.exe +#APPEND keeppxe +FIN +#/etc/hosts +echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient +/etc/init.d/nfs-kernel-server restart +##################################################################### +} + + + +############### No usados en el instalador, solo en actualizaciones. +#/** +# ogClientMount [str_program] +#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones +#@return Si no hay parametros: login de acceso. +#@return con un parametro: La salida del programa ejecutado +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## +function ogClientMount () +{ + #TODO comprobar que OGFILE y OGFILEMOUNT existe. + mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc + mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys + mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp + mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev + mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts + + + [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`) + [ $# = 1 ] && chroot $OGCLIENTMOUNT $1 + +} + +#/** +# ogClientUnmount +#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys +#@param +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientUnmount () +{ + cd /tmp + echo "desmontando cliente espere" + sleep 5 + mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount + mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount + mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount + mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount + mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount + mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount + #-d -f -l + +} + + +############################ hasta el final del archivo antiguos +############################# ANTIGUOS +function ogClientGetRelease () +{ + #1 OSCODENAME jaunty|karmic|lucid + case $1 in + jaunty|JAUNTY) + OSCODENAME=jaunty + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + lenny|LENNY) + OSCODENAME=lenny + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + squeeze|SQUEEZE) + OSCODENAME=squeeze + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + karmic|KARMIC) + OSCODENAME=karmic + OGRELEASE="2.6.31-14-generic" + echo $OGRELEASE + ;; + lucid|LUCID) + OSCODENAME=lucid + OGRELEASE="2.6.32-21-generic-pae" + echo $OGRELEASE + ;; + *) + return 1 + ;; + esac + +} + + +#/** +# ogClientGenerator str_versionUbuntu str_release +#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Versión de ubuntu a generar, jaunty karmic +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientGeneratorDebootstrap () +{ + if [ $# != 2 ] + then + echo Debes introducir como argumento1: jaunty karmic lucid + echo Debes introducir como argumento2: la release + echo utiliza como entrada ogClientCheckVersion + return + fi + OSCODENAME=$1 + OGRELEASE=$2 + + # instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema + #apt-get install gdebi-core + #wget $LASTDEBOOTSTRAP + #gdebi -n debootstrap_1.0.20_all.deb + + #Desmontamos por si acaso el dispositivo virtual + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + + #Creamos el directorio donde montaremos el disco virtual + mkdir -p $OGCLIENTMOUNT + + #Creamos el disco virtual con el filesystem del cliente. + dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB + #qemu-img create $OGCLIENTFILE 3G + #dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB + + + #particionamos el disco virtual + losetup /dev/loop0 $OGCLIENTFILE + echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk /dev/loop0 + losetup -d /dev/loop0 + + + #formateamos la particion principal. + losetup -o 32256 /dev/loop1 $OGCLIENTFILE + mkfs.ext3 -b 4096 -L $OGCLIENTLABEL /dev/loop1 + #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 + #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 + losetup -d /dev/loop1 + + #Montamos el dispositivo virtual en su punto de montaje. + mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + + #TODO Comprobar arquitectura + #Iniciamos la creación del sistema en el directorio de clientes. + #echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + debootstrap --include=linux-image-${OGRELEASE},linux-headers-${OGRELEASE} --arch=i386 --components=main,universe $OSCODENAME $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + ##preubas + #debootstrap --include=linux-image-${OGRELEASE} --arch=i386 --variant=minbase $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + #debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + + if [ $? -ne 0 ]; then + errorAndLog "ogClientGeneratorDebootstrap(): ha fallado!" + return 1 + else + echoAndLog "ogClientGeneratorDebootstrap(): ok" + return 0 + fi + sleep 5 + +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTFILE + +cat << EOF > /etc/schroot/schroot.conf +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF +} + + + + + diff --git a/client/boot-tools/ogInstaller.lib b/client/boot-tools/ogInstaller.lib new file mode 100644 index 00000000..af0f18df --- /dev/null +++ b/client/boot-tools/ogInstaller.lib @@ -0,0 +1,958 @@ +#!/bin/bash + + +##################################################################### +####### Algunas funciones útiles de propósito general: +##################################################################### +function getDateTime() +{ + echo `date +%Y%m%d-%H%M%S` +} + +# Escribe a fichero y muestra por pantalla +function echoAndLog() +{ + echo $1 + FECHAHORA=`getDateTime` + echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE +} + +function errorAndLog() +{ + echo "ERROR: $1" + FECHAHORA=`getDateTime` + echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE +} + +# comprueba si el elemento pasado en $2 esta en el array $1 +function isInArray() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + echoAndLog "${FUNCNAME}(): checking if $2 is in $1" + local deps + eval "deps=( \"\${$1[@]}\" )" + elemento=$2 + + local is_in_array=1 + # copia local del array del parametro 1 + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + if [ "${deps[$i]}" = "${elemento}" ]; then + echoAndLog "isInArray(): $elemento found in array" + is_in_array=0 + fi + done + + if [ $is_in_array -ne 0 ]; then + echoAndLog "${FUNCNAME}(): $elemento NOT found in array" + fi + + return $is_in_array + +} + +##################################################################### +####### Funciones de manejo de paquetes Debian +##################################################################### + +function checkPackage() +{ + package=$1 + if [ -z $package ]; then + errorAndLog "checkPackage(): parameter required" + exit 1 + fi + echoAndLog "checkPackage(): checking if package $package exists" + dpkg -s $package | grep Status | grep -qw install &>/dev/null + if [ $? -eq 0 ]; then + echoAndLog "checkPackage(): package $package exists" + return 0 + else + echoAndLog "checkPackage(): package $package doesn't exists" + return 1 + fi +} + +# recibe array con dependencias +# por referencia deja un array con las dependencias no resueltas +# devuelve 1 si hay alguna dependencia no resuelta +function checkDependencies() +{ + if [ $# -ne 2 ]; then + errorAndLog "checkDependencies(): invalid number of parameters" + exit 1 + fi + + echoAndLog "checkDependencies(): checking dependences" + uncompletedeps=0 + + # copia local del array del parametro 1 + local deps + eval "deps=( \"\${$1[@]}\" )" + + declare -a local_notinstalled + + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + checkPackage ${deps[$i]} + if [ $? -ne 0 ]; then + local_notinstalled[$uncompletedeps]=$package + let uncompletedeps=uncompletedeps+1 + fi + done + + # relleno el array especificado en $2 por referencia + for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ )) + do + eval "${2}[$i]=${local_notinstalled[$i]}" + done + + # retorna el numero de paquetes no resueltos + echoAndLog "checkDependencies(): dependencies uncompleted: $uncompletedeps" + return $uncompletedeps +} + +# Recibe un array con las dependencias y lo instala +function installDependencies() +{ + if [ $# -ne 1 ]; then + errorAndLog "installDependencies(): invalid number of parameters" + exit 1 + fi + echoAndLog "installDependencies(): installing uncompleted dependencies" + + # copia local del array del parametro 1 + local deps + eval "deps=( \"\${$1[@]}\" )" + + local string_deps="" + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + string_deps="$string_deps ${deps[$i]}" + done + + if [ -z "${string_deps}" ]; then + errorAndLog "installDependencies(): array of dependeces is empty" + exit 1 + fi + + OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND + export DEBIAN_FRONTEND=noninteractive + + echoAndLog "installDependencies(): now ${string_deps} will be installed" + apt-get -y install --force-yes ${string_deps} + if [ $? -ne 0 ]; then + errorAndLog "installDependencies(): error installing dependencies" + return 1 + fi + + DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND + echoAndLog "installDependencies(): dependencies installed" +} + +# Hace un backup del fichero pasado por parámetro +# deja un -last y uno para el día +function backupFile() +{ + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local fichero=$1 + local fecha=`date +%Y%m%d` + + if [ ! -f $fichero ]; then + errorAndLog "${FUNCNAME}(): file $fichero doesn't exists" + return 1 + fi + + echoAndLog "${FUNCNAME}(): realizando backup de $fichero" + + # realiza una copia de la última configuración como last + cp -p $fichero "${fichero}-LAST" + + # si para el día no hay backup lo hace, sino no + if [ ! -f "${fichero}-${fecha}" ]; then + cp -p $fichero "${fichero}-${fecha}" + fi + + echoAndLog "${FUNCNAME}(): backup realizado" +} + +##################################################################### +####### Funciones para el manejo de bases de datos +##################################################################### + +# This function set password to root +function mysqlSetRootPassword() +{ + if [ $# -ne 1 ]; then + errorAndLog "mysqlSetRootPassword(): invalid number of parameters" + exit 1 + fi + + local root_mysql=$1 + echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server" + /usr/bin/mysqladmin -u root password ${root_mysql} + if [ $? -ne 0 ]; then + errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server" + return 1 + fi + echoAndLog "mysqlSetRootPassword(): root password saved!" + return 0 +} + +# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente +function mysqlGetRootPassword(){ + local pass_mysql + local pass_mysql2 + # Comprobar si MySQL está instalado con la clave de root por defecto. + if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then + echoAndLog "${FUNCNAME}(): Using default mysql root password." + else + stty -echo + echo "Existe un servicio mysql ya instalado" + read -p "Insertar clave de root de Mysql: " pass_mysql + echo "" + read -p "Confirmar clave:" pass_mysql2 + echo "" + stty echo + if [ "$pass_mysql" == "$pass_mysql2" ] ;then + MYSQL_ROOT_PASSWORD=$pass_mysql + echo "La clave es: ${MYSQL_ROOT_PASSWORD}" + return 0 + else + echo "Las claves no coinciden no se configura la clave del servidor de base de datos." + echo "las operaciones con la base de datos daran error" + return 1 + fi + fi +} + +# comprueba si puede conectar con mysql con el usuario root +function mysqlTestConnection() +{ + if [ $# -ne 1 ]; then + errorAndLog "mysqlTestConnection(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + echoAndLog "mysqlTestConnection(): checking connection to mysql..." + echo "" | mysql -uroot -p"${root_password}" + if [ $? -ne 0 ]; then + errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!" + return 1 + else + echoAndLog "mysqlTestConnection(): connection success" + return 0 + fi +} + +# comprueba si la base de datos existe +function mysqlDbExists() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlDbExists(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + echoAndLog "mysqlDbExists(): checking if $database exists..." + echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$" + if [ $? -ne 0 ]; then + echoAndLog "mysqlDbExists():database $database doesn't exists" + return 1 + else + echoAndLog "mysqlDbExists():database $database exists" + return 0 + fi +} + +function mysqlCheckDbIsEmpty() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..." + num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l` + if [ $? -ne 0 ]; then + errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password" + exit 1 + fi + + if [ $num_tablas -eq 0 ]; then + echoAndLog "mysqlCheckDbIsEmpty():database $database is empty" + return 0 + else + echoAndLog "mysqlCheckDbIsEmpty():database $database has tables" + return 1 + fi + +} + + +function mysqlImportSqlFileToDb() +{ + if [ $# -ne 3 ]; then + errorAndLog "${FNCNAME}(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + local sqlfile=$3 + + if [ ! -f $sqlfile ]; then + errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!" + return 1 + fi + + echoAndLog "${FUNCNAME}(): importing sql file to ${database}..." + perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DEFAULTUSER/$OPENGNSYS_DB_DEFAULTUSER/g; s/DEFAULTPASSWD/$OPENGNSYS_DB_DEFAULTPASSWD/g" $sqlfile + mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $sqlfile + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database" + return 1 + fi + echoAndLog "${FUNCNAME}(): file imported to database $database" + return 0 +} + +# Crea la base de datos +function mysqlCreateDb() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + + echoAndLog "${FUNCNAME}(): creating database..." + mysqladmin -u root --password="${root_password}" create $database + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while creating database $database" + return 1 + fi + echoAndLog "${FUNCNAME}(): database $database created" + return 0 +} + + +function mysqlCheckUserExists() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlCheckUserExists(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local userdb=$2 + + echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..." + echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user + if [ $? -ne 0 ]; then + echoAndLog "mysqlCheckUserExists(): user doesn't exists" + return 1 + else + echoAndLog "mysqlCheckUserExists(): user already exists" + return 0 + fi + +} + +# Crea un usuario administrativo para la base de datos +function mysqlCreateAdminUserToDb() +{ + if [ $# -ne 4 ]; then + errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters" + exit 1 + fi + + local root_password=$1 + local database=$2 + local userdb=$3 + local passdb=$4 + + echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}" + + cat > $WORKDIR/create_${database}.sql < ${basetftp}/pxelinux.cfg/default < /dev/null + if [ $? -eq 0 ]; then + echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting" + return 0 + fi + + cadenaexport="${export}" + for parametro in $* + do + if [ $contador -gt 0 ] + then + host=`echo $parametro | awk -F: '{print $1}'` + options=`echo $parametro | awk -F: '{print $2}'` + if [ "${host}" == "" ]; then + errorAndLog "${FUNCNAME}(): host can't be empty" + return 1 + fi + cadenaexport="${cadenaexport}\t${host}" + + if [ "${options}" != "" ]; then + cadenaexport="${cadenaexport}(${options})" + fi + fi + let contador=contador+1 + done + + echo -en "$cadenaexport\n" >> /etc/exports + + echoAndLog "${FUNCNAME}(): add $export to /etc/exports" + + return 0 +} + +######################################################################## +## Configuracion servicio DHCP +######################################################################## + +function dhcpConfigure() +{ + echoAndLog "${FUNCNAME}(): Sample DHCP Configuration." + + backupFile /etc/dhcp3/dhcpd.conf + + sed -e "s/SERVERIP/$SERVERIP/g" \ + -e "s/NETIP/$NETIP/g" \ + -e "s/NETMASK/$NETMASK/g" \ + -e "s/NETBROAD/$NETBROAD/g" \ + -e "s/ROUTERIP/$ROUTERIP/g" \ + -e "s/DNSIP/$DNSIP/g" \ + $WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while configuring dhcp server" + return 1 + fi + + /etc/init.d/dhcp3-server restart + echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"." + return 0 +} + + +##################################################################### +####### Funciones específicas de la instalación de Opengnsys +##################################################################### + +# Copiar ficheros del OpenGnSys Web Console. +function installWebFiles() +{ + echoAndLog "${FUNCNAME}(): Installing web files..." + cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para doxigen + if [ $? != 0 ]; then + errorAndLog "${FUNCNAME}(): Error copying web files." + exit 1 + fi + find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null + # Cambiar permisos para ficheros especiales. + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \ + $INSTALL_TARGET/www/includes \ + $INSTALL_TARGET/www/comandos/gestores/filescripts \ + $INSTALL_TARGET/www/images/iconos + echoAndLog "${FUNCNAME}(): Web files installed successfully." +} + +# Configuración específica de Apache. +function openGnsysInstallWebConsoleApacheConf() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + local path_apache2_confd=$2 + local path_web_console=${path_opengnsys_base}/www + + if [ ! -d $path_apache2_confd ]; then + errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation" + return 1 + fi + + mkdir -p $path_apache2_confd/{sites-available,sites-enabled} + + echoAndLog "${FUNCNAME}(): creating apache2 config file.." + + + # genera configuración + cat > $path_opengnsys_base/etc/apache.conf < + Options -Indexes FollowSymLinks + DirectoryIndex acceso.php + +EOF + + ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf + ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation" + return 1 + else + echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon" + /etc/init.d/apache2 restart + return 0 + fi +} + +# Crear documentación Doxygen para la consola web. +function makeDoxygenFiles() +{ + echoAndLog "${FUNCNAME}(): Making Doxygen web files..." + $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \ + $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www + if [ ! -d "$INSTALL_TARGET/www/html" ]; then + errorAndLog "${FUNCNAME}(): unable to create Doxygen web files." + return 1 + fi + mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api" + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api + echoAndLog "${FUNCNAME}(): Doxygen web files created successfully." +} + + +# Crea la estructura base de la instalación de opengnsys +function openGnsysInstallCreateDirs() +{ + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + + echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base" + + mkdir -p $path_opengnsys_base + mkdir -p $path_opengnsys_base/admin/{autoexec,comandos,menus,usuarios} + mkdir -p $path_opengnsys_base/bin + mkdir -p $path_opengnsys_base/client + mkdir -p $path_opengnsys_base/doc + mkdir -p $path_opengnsys_base/etc + mkdir -p $path_opengnsys_base/lib + mkdir -p $path_opengnsys_base/log/clients + mkdir -p $path_opengnsys_base/sbin + mkdir -p $path_opengnsys_base/www + mkdir -p $path_opengnsys_base/images + ln -fs /var/lib/tftpboot $path_opengnsys_base + ln -fs $path_opengnsys_base/log /var/log/opengnsys + + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" + return 1 + fi + + echoAndLog "${FUNCNAME}(): directory paths created" + return 0 +} + +# Copia ficheros de configuración y ejecutables genéricos del servidor. +function openGnsysCopyServerFiles () { + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + + local SOURCES=( client/boot/initrd-generator \ + client/boot/upgrade-clients-udeb.sh \ + client/boot/udeblist.conf \ + client/boot/udeblist-jaunty.conf \ + client/boot/udeblist-karmic.conf \ + client/boot/udeblist-lucid.conf \ + server/PXE/pxelinux.cfg/default \ + doc ) + local TARGETS=( bin/initrd-generator \ + bin/upgrade-clients-udeb.sh \ + etc/udeblist.conf \ + etc/udeblist-jaunty.conf \ + etc/udeblist-karmic.conf \ + etc/udeblist-lucid.conf \ + tftpboot/pxelinux.cfg/default \ + doc ) + + if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then + errorAndLog "${FUNCNAME}(): inconsistent number of array items" + exit 1 + fi + + echoAndLog "${FUNCNAME}(): copying files to server directories" + + pushd $WORKDIR/opengnsys + local i + for (( i = 0; i < ${#SOURCES[@]}; i++ )); do + if [ -f "${SOURCES[$i]}" ]; then + echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + cp -p "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}" + elif [ -d "${SOURCES[$i]}" ]; then + echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}" + else + echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + fi + done + popd +} + +#################################################################### +### Funciones de compilación de códifo fuente de servicios +#################################################################### + +# Compilar los servicios de OpenGNsys +function servicesCompilation () +{ + local hayErrores=0 + + # Compilar OpenGnSys Server + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmServer + make && make install + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Repository Manager + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmRepo + make && make install + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Client + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient + make && mv ogAdmClient ../../../client/nfsexport/bin + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client" + hayErrores=1 + fi + popd + + return $hayErrores +} + + +#################################################################### +### Funciones instalacion cliente opengnsys +#################################################################### + +function openGnsysClientCreate() +{ + local OSDISTRIB OSCODENAME + + local hayErrores=0 + + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." + cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client + find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." + mkdir -p $INSTALL_TARGET/client/lib/engine/bin + cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while copying engine files" + hayErrores=1 + fi + + # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). + OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then + echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME." + $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME" + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" + hayErrores=1 + fi + echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME." + $INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME" + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" + hayErrores=1 + fi + else + echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files." + $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/ + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" + hayErrores=1 + fi + echoAndLog "${FUNCNAME}(): Loading default udeb files." + $INSTALL_TARGET/bin/upgrade-clients-udeb.sh + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" + hayErrores=1 + fi + fi + + if [ $hayErrores -eq 0 ]; then + echoAndLog "${FUNCNAME}(): Client generation success." + else + errorAndLog "${FUNCNAME}(): Client generation with errors" + fi + + return $hayErrores +} + + +# Configuración básica de servicios de OpenGnSys +function openGnsysConfigure() +{ + echoAndLog "openGnsysConfigure(): Copying init files." + cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys + cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.default /etc/default/opengnsys + update-rc.d opengnsys defaults + echoAndLog "openGnsysConfigure(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"." + perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmServer.cfg + perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg + echoAndLog "${FUNCNAME}(): Creating Web Console config file" + OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys" + perl -pi -e "s/SERVERIP/$SERVERIP/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php + sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Services/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg + echoAndLog "openGnsysConfiguration(): Starting OpenGnSys services." + /etc/init.d/opengnsys start +} + + +##################################################################### +####### Función de resumen informativo de la instalación +##################################################################### + +function installationSummary(){ + echo + echoAndLog "OpenGnSys Installation Summary" + echo "==============================" + echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)" + echoAndLog "Installation directory: $INSTALL_TARGET" + echoAndLog "Repository directory: $INSTALL_TARGET/images" + echoAndLog "TFTP configuracion directory: /var/lib/tftpboot" + echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf" + echoAndLog "NFS configuracion file: /etc/exports" + echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" + echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER" + echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD" + echoAndLog "Web Console default user: $OPENGNSYS_DB_DEFAULTUSER" + echoAndLog "Web Console default password: $OPENGNSYS_DB_DEFAULTPASSWD" + echo + echoAndLog "Post-Installation Instructions:" + echo "===============================" + echoAndLog "Review or edit all configuration files." + echoAndLog "Insert DHCP configuration data and restart service." + echoAndLog "Log-in as Web Console admin user." + echoAndLog " - Review default Organization data and default user." + echoAndLog "Log-in as Web Console organization user." + echoAndLog " - Insert OpenGnSys data (rooms, computers, etc)." +echo +} + diff --git a/client/ogClient/INSTALL.es.txt b/client/ogClient/INSTALL.es.txt deleted file mode 100644 index b357595b..00000000 --- a/client/ogClient/INSTALL.es.txt +++ /dev/null @@ -1,46 +0,0 @@ -########## INSTALACION ################################## - -### NOTA principal: utilizar el usuario root para este proceso #### -1. Comprobar la conexión a internet, sobre todo si usas proxy. El hecho de que te funcione apt-get no significa que tengas el proxy configurado. -1. Descargar del subversion la estrucutura del cliente. - -# reubicacion al trunk/client/boot - -Proceso: -0. Si ya tenemos un /var/lib/tftpboot/ogclient lo renombramos por si acaso. -1. Descargar del subversion la rama ogClient. -3. Ejecutar el instalador: - -mv /opt/opengnsys/tftpboot/ogclient/ /opt/opengnsys/tftpboot/ogclientTrunk; -svn checkout http://www.opengnsys.es/svn/branches/ogClient /tmp/opengnsys_installer/opengnsys/installer/ogClient; -svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/shared/ /tmp/opengnsys_installer/opengnsys/client/shared; -svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/engine/ /tmp/opengnsys_installer/opengnsys/client/engine; -find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null; -/tmp/opengnsys_installer/opengnsys/installer/ogClient/ogClientGeneratorV2.sh; - - - -NOTA: el proceso tardará un buen rato, dependiendo de nuestras circustancias. -NOTA: crea un kernel, initrd, ogclient.img en /var/lib/tftpboot/ogclient -NOTA: el ogclient.img es el Segundo sistema de archivos en formato fichero bloques emulando a disco con partición primaria. -NOTA: el ogclient.sqfs es el Segundo sistema de archivos (partición primaria del img) en formato squashfs. Se usará con el parámetro og2nd=sqfs -NOTA: los logs de instalación estarán en /tmp/opengnsys_installation.log - - - NOTA A RECORDAR: - NOTA ACLARATORIA: $OGSCRITPS(reboot,poweroff) antes de /sbin/{reboot,poweroff} - - ################## Descripcion de la estrucutra de ogClient. - los directorios old y serverstrucutre son antiguos, pero no borrarlos. - INSTALL.es.txt : este mismo archivo. - ogInstaller.lib : son todas las funciones de instalacion del instalador oficial de opengnys. Algunas de ellas son utilizadas. Crear ticket para separar las funciones de iinstalacion del proceso de instalacion. - ogClientManager.lib: son las funicones especificas para la instalacion del ogclient. estan escritas en orden de que son llamadas por el instalador, (ogClientGeneratorV2.sh) - ogClientGeneratorV2.sh. Es el guión de ejecución del isntalador. - - - - ############ ERROR PRINCIPAL 2 ####### - necesita que en el equipo donde se ejecuta el scripts, disponga de la estrucutra /opt/opengnsys/client - sobre todo los lib/fonts, el lib/pci.ids el bin/browser y el bin/ogAdmClient - - diff --git a/client/ogClient/kernelParameterOG.es.txt b/client/ogClient/kernelParameterOG.es.txt deleted file mode 100644 index 890652b4..00000000 --- a/client/ogClient/kernelParameterOG.es.txt +++ /dev/null @@ -1,29 +0,0 @@ - -KERNEL ogclient/ogvmlinuz -initrd=ogclient/oginitrd.img - - - boot=oginit - - oginit=init|/bin/bash - - - ogrepo=ip del repositorio - - og2nd=sqfs|img - ogprotocol=smb|nfs - ogactiveadmin=true|false - ogdebug=true|false - - vga=788 - irqpoll - acpi=on - - -FIXME: en la version actual -repo=iprepoman -IP - -TODO: en la proxima version -ogrepo -ip \ No newline at end of file diff --git a/client/ogClient/ogClientGeneratorV2.sh b/client/ogClient/ogClientGeneratorV2.sh deleted file mode 100755 index 21449267..00000000 --- a/client/ogClient/ogClientGeneratorV2.sh +++ /dev/null @@ -1,166 +0,0 @@ -#!/bin/bash -#@file ogClientGenerator.sh -#@brief Script generación del cliente OpenGnSys -#@warning -#@version 0.9 - -#@author Antonio J. Doblas Viso. -#@date 2010/05/24 -#*/ - - -#$1 OSCONENAME lucid karmic -#if [ $# -ne 1 ]; then -# echo ": invalid number of parameters" -# echo " host | lucid | karmic | jaunty | lenny | squeeze " -# exit 1 -#fi -TYPECLIENT=host - -# Solo ejecutable por usuario root -if [ "$(whoami)" != 'root' ] -then - echo "ERROR: this program must run under root privileges!!" - exit 1 -fi - - - -#FIXME: variables del instalador oficial. -WORKDIR=/tmp/opengnsys_installer -INSTALL_TARGET=/opt/opengnsys -LOG_FILE=/tmp/opengnsys_installation.log -PROGRAMDIR=$(readlink -e $(dirname "$0")) - - -#funciones especificas del cliente. -source $PROGRAMDIR/ogClientManager.lib -#funciones incluidas dentro del scritps general de instalacion. -source $PROGRAMDIR/ogInstaller.lib - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" -########################################################################## -## FASE 1 - Instalación de software adicional. -##TO DO Integrar en el instaldor. Actualizar repositorios -# Datos para la generación del cliente. -DEPENDENCIES=( debootstrap subversion schroot squashfs-tools) -apt-get update -# Instalación de dependencias (paquetes de sistema operativo). -declare -a notinstalled -checkDependencies DEPENDENCIES notinstalled -if [ $? -ne 0 ]; then - installDependencies notinstalled - if [ $? -ne 0 ]; then - echoAndLog "Error while installing some dependeces, please verify your server installation before continue" - exit 1 - fi -fi -############## FIN DEL TO DO -############################################## FIN FASE 1 - - - - - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" - -############## FASE 2 - Asignación de variables -#obtenemos las variables necesarias. -ogClientVar -#obtenemos la información del host. -ogClientOsInfo -######################## FIN fase 2 - -############# FASE 3: Segundo Sistema archivos (img) Creación. -#TODO comprobacion de que el fichero esta creado. -file $OGCLIENTFILE | grep "partition 1: ID=0x83" -if [ $? == 1 ] -then - ##3.1 creación y formateo del disco virtual. generamos el dispositivo loop. - ogClient2ndFile || exit 1 -fi - - -#3.2 generamos el Sistema de archivos con debootstrap -# Comprobamos que ya tenemos alguno. -schroot -p -c IMGogclient -- touch /tmp/ogclientOK -if [ -f /tmp/ogclientOK ] -then - rm /tmp/ogclientOK -else - ogClient2ndFs $TYPECLIENT || exit -fi - - -############### FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot -cat /etc/schroot/schroot.conf | grep ogclient || ogClientSchrootConf - - -############### FASE 5: Configuración del Segundo Sistema de archivos (img) con la estructura especial de OpenGnsys -ogClient2ndSVN $TYPECLIENT || exit - - - - -############# FASE6: Ejecutamos los scripts de personalización del 2º sistema de archivos (img) desde la jaula schroot -### 6.1 instalacion de software con apt-get -schroot -p -c IMGogclient -- /root/InstallSoftware.sh -echo "saltando" - if [ $? -ne 0 ]; then - errorAndLog "Instalando sofware adicional OG : ERROR" - exit -else - echoAndLog "Instalando sofware adicional OG: OK" -fi -#### 6.2 compilación de software. -cd / -schroot -p -c IMGogclient -- /root/CompileSoftware.sh -cd - - -### 6.3 configuracion hostname passroot securety -cd / -schroot -c IMGogclient -- /root/ConfFS.sh -cd - -#schroot -c IMGogclient -- echo -ne "og1\nog1\n" | passwd root -# schroot -c IMGogclient -- passwd root | echo "root" - - -### 6.4 incorporamos la clave publica del servidor -cd / -ssh-keygen -q -f /root/.ssh/id_rsa -N "" -cp /root/.ssh/id_rsa.pub /tmp -schroot -p -c IMGogclient -- /root/importSshKeys.sh -cd - -############ y la del propio cliente. -schroot -c IMGogclient -- /root/generateSshKeysClient.sh - -## configuramos los locales. -schroot -c IMGogclient -- /root/ReconfigureLocales.sh - - -################## FIN fase 6. Fin de comfiguración del segundo sistema de archivos (img) - -################## FASE 7. Generamos el 1er sistema de archivos. INITRD -#nota el parametro es el "tipo" de linux generado en debootstrap. usar solo "host", es decir version,kernel ... del propio host -#nota: hace un schroot, al 2fs (img), ejecuta el fichero generateinitrd. -#nota: deja en el directorio tmp del host el nuevo initrd, y lo copia al tftpboot -ogClientInitrd $TYPECLIENT - - -################## FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) -# generamos el 2sistema de archivos en squashfs -ogClient2ndSqfs -################## FIN FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) - - -##################### FASE 9. algunos detallas del pxe -#dejamos ficheros de ejemplo para el pxe y el nfs -ogClientConfpxe -##################### FIN FASE 9. algunos detallas del pxe - - -# Mostrar sumario de la instalación e instrucciones de post-instalación. -installationSummary - -echoAndLog "OpenGnSys installation finished at $(date)" \ No newline at end of file diff --git a/client/ogClient/ogClientManager.lib b/client/ogClient/ogClientManager.lib deleted file mode 100644 index b19afefe..00000000 --- a/client/ogClient/ogClientManager.lib +++ /dev/null @@ -1,608 +0,0 @@ - -ogClientVar() -{ -export SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/installer/ogClient -export SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared -export SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine - -export OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ -export OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img -export OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount -# tamaño maximo limitado por schroot 2GB -export OGCLIENTSIZEMB=1900 -#export OGCLIENTSIZEMB=1000 -# export OGCLIENTSIZEKB=500 -export OGCLIENTLABEL=ogClient -#export OGLIB=/opt/opengnsys/client/lib -} - - - -function ogClientOsInfo () -{ -#TODO según host, un OSHHTP u otro OSARCH - #1 OSCODENAME jaunty|karmic|lucid - #devuelve OSDISTRIB(ubuntu,debian),OSCODENAME(lucid,karmic,squeeze):OGRELEASE:httpAPT - case $1 in - host | HOST) - export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') - export OSRELEASE=$(uname -a | awk '{print $3}') - uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" - ;; - jaunty|JAUNTY) - export OSDISTRIB=ubuntu - export OSCODENAME=jaunty - export OSRELEASE="2.6.28-11-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" - ;; - lenny|LENNY) - export OSDISTRIB=debian - export OSCODENAME=lenny - export OSRELEASE="2.6.28-11-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - squeeze|SQUEEZE) - export OSDISTRIB=debian - export OSCODENAME=squeeze - export OSRELEASE="2.6.28-11-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - karmic|KARMIC) - export OSDISTRIB=ubuntu - export OSCODENAME=karmic - export OSRELEASE="2.6.31-14-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - lucid|LUCID) - export OSDISTRIB=ubuntu - export OSCODENAME=lucid - export OSRELEASE="2.6.32-21-generic-pae" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - *) - return 1 - ;; - esac - echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP -} - -#creación y formateo del disco virtual. -ogClient2ndFile () -{ -local RERROR DISKLOOP PARTLOOP #return code error -echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $OGCLIENTSIZEMB MB " -#Desmontamos por si acaso el dispositivo virtual -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $OGCLIENTMOUNT" -mkdir -p $OGCLIENTMOUNT -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Creando directorio $OGCLIENTMOUNT : ERROR" - return 1 -fi -echo "$FUNCNAME(): Creando el disco virtual que almacenará el FS del cliente $OGCLIENTSIZEMB MB de datos físicos" -dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB -#qemu-img create $OGCLIENTFILE 3G -#dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Creando el disco virtual: ERROR" - return 1 -fi - -DISKLOOP=$(losetup -f) -losetup $DISKLOOP $OGCLIENTFILE -echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria" -echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP -#echo $? -# da error, porque no puede actualizar el kernel. -#if [ $? -ne 0 ] -#then -# errorAndLog "$FUNCNAME(): Particionando el disco virutal: ERROR" -# return 1 -#fi - -echoAndLog "$FUNCNAME(): Desmontando $DISKLOOP despues del particionado " -losetup -d $DISKLOOP - -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR" - return 1 -fi - - -#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 -#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 -PARTLOOP=$(losetup -f) -echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP" -losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext3 -b 4096 -L $OGCLIENTLABEL $PARTLOOP -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR" - return 1 -fi -echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo " -losetup -d $PARTLOOP -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR" - return 1 -else - echoAndLog "$FUNCNAME(): $OGCLIENTFILE $OGCLIENTSIZEMB MB : OK" -fi -} - - - - - -ogClient2ndFs () -{ -ogClientOsInfo $1 -echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos " -#Montamos el dispositivo virtual en su punto de montaje. -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - -mount | grep $OGCLIENTMOUNT && echoAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 : FAILURE " - -#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} -debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} - - -if [ $? -ne 0 ]; then - errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP - : ha fallado!" - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - return 1 -else - echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP - : ok" - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - return 0 -fi - sleep 5 - -##preubas revisar OSRELEASE -#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ -#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ -#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ -} - - - - -########## configura el segundo sistema de archivos -########### parametro: "host" -function ogClient2ndSVN() -{ -ogClientOsInfo $1 -#1 la salida de ogClientOsInfo -local LERROR -LERROR=TRUE -echoAndLog "$FUNCNAME: Iniciando la personalización con datos del SVN " -# comprobar que está montado $OGCLIENTMOUNT -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - -# parseamos del apt.source -sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Parseando el apt.sources sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list - : ERROR" - return 1 -fi - -#parseamos el scripts de generación del initrd. -sed -e "s/OSRELEASE/$OSRELEASE/g" ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.sh -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Parseando el /root/GenerateInitrd.sh: ERROR" - return 1 -fi - -#damos permiso al directorio de scripts -chmod 775 ${SVNCLIENTDIR}/clientstructure/root/* - -# los copiamos -cp -prv ${SVNCLIENTDIR}/clientstructure/* $OGCLIENTMOUNT -mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/ -cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/ -cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/ - -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): copiando los datos del svn a $OGCLIENTMOUNT: ERROR" - return 1 -fi - -# copiamos algunas cosas del nfsexport - -# A ####################### para el browser -mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ -mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ -mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/ - -cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts -cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts -cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/fonts - -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Linking fonts for browser1 $OGLIB : ERROR" - return 1 -fi - -# B ######################################################## -cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Coping pci.ids : ERROR" - return 1 -fi - -cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Coping browser : ERROR" - return 1 -fi - -cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Coping ogAdmClient : ERROR" - return 1 -else - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - echoAndLog "$FUNCNAME: Finalizado: OK " - return 0 -fi -} - - -ogClientSchrootConf() -{ -echoAndLog "$FUNCNAME: Iniciando la configuración del schroot " -cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` -cat << EOF > /etc/schroot/schroot.conf -[IMGogclient] -type=loopback -file=/var/lib/tftpboot/ogclient/ogclient.img -description=ogclient ubuntu luc IMGi -priority=1 -users=root -groups=root -root-groups=root -mount-options=-o offset=32256 -root-users=root -[DIRogclient] -type=directory -directory=/var/lib/tftpboot/ogclient/ogclientmount -description=ogclient ubuntu lucid DIR -priority=2 -users=root -groups=root -root-groups=root -root-users=root -EOF -cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime` -cat << EOF > /etc/schroot/mount-defaults -# mount.defaults: static file system information for chroots. -# Note that the mount point will be prefixed by the chroot path -# (CHROOT_PATH) -# -# -proc /proc proc defaults 0 0 -#procbususb /proc/bus/usb usbfs defaults 0 0 -#/dev /dev none rw,bind 0 0 -/dev/pts /dev/pts none rw,bind 0 0 -/dev/shm /dev/shm none rw,bind 0 0 -#/home /home none rw,bind 0 0 -/tmp /tmp none rw,bind 0 0 -EOF - -echoAndLog "$FUNCNAME: Finalizado: OK " -return 0 -} - - - -########### param1 "host" -ogClientInitrd() -{ -ogClientVar -cd / -ogClientOsInfo $1 -schroot -c IMGogclient -- /root/GenerateInitrd.generic.sh -echo "cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR" -cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR -cp /tmp/initrd.img-${OSRELEASE} ${OGCLIENTBASEDIR}/oginitrd.img -cp /tmp/vmlinuz-${OSRELEASE} ${OGCLIENTBASEDIR}/ogvmlinuz -cd - -} - - -ogClient2ndSqfs() -{ -ogClientVar -echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs " -# si ya existe un sqfs lo renombramos -[ -f $OGCLIENTBASEDIR/ogclient.sqfs ] && mv $OGCLIENTBASEDIR/ogclient.sqfs $OGCLIENTBASEDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S` -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 -mksquashfs $OGCLIENTMOUNT $OGCLIENTBASEDIR/ogclient.sqfs -chmod 744 $OGCLIENTBASEDIR/ogclient.sqfs -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -} - - - - -ogClientSshkeys() -{ -echo comprobamos clave rsa en el host REPO OG. -if [ ! -f /root/.ssh/id_rsa.pub ] -then - echo "creando claves rsa" - ssh-keygen -q -f /root/.ssh/id_dsa -t dsa -N "opengnsys" -else - echo "la claves ya estan creadas" -fi -echo "copiamos la clave publica a /tmp" -cp /root/.ssh/id_dsa.pub /tmp - -cat /tmp/id_dsa.pub - -echo "schroot con instrucciones." -schroot -c IMGogclient -- /root/importSshKeys.sh - -echo "limpiando" -rm /tmp/id_dsa.pub - -## copiamos ssh rsa del host al guest como authorized-key2 -##rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -##cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -##mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT -} - - -ogClientConfpxe() -{ -################## DEJAMOS FICHERO DE EJEMPLOS PARA: -#default -cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient -LABEL pxe-${OGRELEASE} -KERNEL ogclient/vmlinuz-$OGRELEASE -APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= -LABEL pxe-2.6.32-21-generic-pae -KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae -APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs -LABEL cache -KERNEL grub.exe -APPEND --config-file="find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img" -LABEL net -KERNEL grub.exe -APPEND keeppxe --config-file="pxe detect; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae" -LABEL IfNOTcacheGOnet -KERNEL grub.exe -APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot" -#LABEL pxe-2.6.32-21-generic-pae -#KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae -#APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=172.17.32.242 -#LABEL grub -#KERNEL grub.exe -#APPEND keeppxe -FIN -#/etc/hosts -echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient -/etc/init.d/nfs-kernel-server restart -##################################################################### -} - - - -############### No usados en el instalador, solo en actualizaciones. -#/** -# ogClientMount [str_program] -#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones -#@return Si no hay parametros: login de acceso. -#@return con un parametro: La salida del programa ejecutado -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## -function ogClientMount () -{ - #TODO comprobar que OGFILE y OGFILEMOUNT existe. - mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc - mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys - mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp - mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev - mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts - - - [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`) - [ $# = 1 ] && chroot $OGCLIENTMOUNT $1 - -} - -#/** -# ogClientUnmount -#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys -#@param -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientUnmount () -{ - cd /tmp - echo "desmontando cliente espere" - sleep 5 - mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount - mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount - mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount - mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount - mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount - mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount - #-d -f -l - -} - - -############################ hasta el final del archivo antiguos -############################# ANTIGUOS -function ogClientGetRelease () -{ - #1 OSCODENAME jaunty|karmic|lucid - case $1 in - jaunty|JAUNTY) - OSCODENAME=jaunty - OGRELEASE="2.6.28-11-generic" - echo $OGRELEASE - ;; - lenny|LENNY) - OSCODENAME=lenny - OGRELEASE="2.6.28-11-generic" - echo $OGRELEASE - ;; - squeeze|SQUEEZE) - OSCODENAME=squeeze - OGRELEASE="2.6.28-11-generic" - echo $OGRELEASE - ;; - karmic|KARMIC) - OSCODENAME=karmic - OGRELEASE="2.6.31-14-generic" - echo $OGRELEASE - ;; - lucid|LUCID) - OSCODENAME=lucid - OGRELEASE="2.6.32-21-generic-pae" - echo $OGRELEASE - ;; - *) - return 1 - ;; - esac - -} - - -#/** -# ogClientGenerator str_versionUbuntu str_release -#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Versión de ubuntu a generar, jaunty karmic -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientGeneratorDebootstrap () -{ - if [ $# != 2 ] - then - echo Debes introducir como argumento1: jaunty karmic lucid - echo Debes introducir como argumento2: la release - echo utiliza como entrada ogClientCheckVersion - return - fi - OSCODENAME=$1 - OGRELEASE=$2 - - # instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema - #apt-get install gdebi-core - #wget $LASTDEBOOTSTRAP - #gdebi -n debootstrap_1.0.20_all.deb - - #Desmontamos por si acaso el dispositivo virtual - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - - #Creamos el directorio donde montaremos el disco virtual - mkdir -p $OGCLIENTMOUNT - - #Creamos el disco virtual con el filesystem del cliente. - dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB - #qemu-img create $OGCLIENTFILE 3G - #dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB - - - #particionamos el disco virtual - losetup /dev/loop0 $OGCLIENTFILE - echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk /dev/loop0 - losetup -d /dev/loop0 - - - #formateamos la particion principal. - losetup -o 32256 /dev/loop1 $OGCLIENTFILE - mkfs.ext3 -b 4096 -L $OGCLIENTLABEL /dev/loop1 - #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 - #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 - losetup -d /dev/loop1 - - #Montamos el dispositivo virtual en su punto de montaje. - mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - - #TODO Comprobar arquitectura - #Iniciamos la creación del sistema en el directorio de clientes. - #echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - debootstrap --include=linux-image-${OGRELEASE},linux-headers-${OGRELEASE} --arch=i386 --components=main,universe $OSCODENAME $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - ##preubas - #debootstrap --include=linux-image-${OGRELEASE} --arch=i386 --variant=minbase $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - #debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - - if [ $? -ne 0 ]; then - errorAndLog "ogClientGeneratorDebootstrap(): ha fallado!" - return 1 - else - echoAndLog "ogClientGeneratorDebootstrap(): ok" - return 0 - fi - sleep 5 - -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTFILE - -cat << EOF > /etc/schroot/schroot.conf -[DIRogclient] -type=directory -directory=/var/lib/tftpboot/ogclient/ogclientmount -description=ogclient ubuntu lucid DIR -priority=2 -users=root -groups=root -root-groups=root -root-users=root -EOF -} - - - - - diff --git a/client/ogClient/ogInstaller.lib b/client/ogClient/ogInstaller.lib deleted file mode 100644 index af0f18df..00000000 --- a/client/ogClient/ogInstaller.lib +++ /dev/null @@ -1,958 +0,0 @@ -#!/bin/bash - - -##################################################################### -####### Algunas funciones útiles de propósito general: -##################################################################### -function getDateTime() -{ - echo `date +%Y%m%d-%H%M%S` -} - -# Escribe a fichero y muestra por pantalla -function echoAndLog() -{ - echo $1 - FECHAHORA=`getDateTime` - echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE -} - -function errorAndLog() -{ - echo "ERROR: $1" - FECHAHORA=`getDateTime` - echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE -} - -# comprueba si el elemento pasado en $2 esta en el array $1 -function isInArray() -{ - if [ $# -ne 2 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - echoAndLog "${FUNCNAME}(): checking if $2 is in $1" - local deps - eval "deps=( \"\${$1[@]}\" )" - elemento=$2 - - local is_in_array=1 - # copia local del array del parametro 1 - for (( i = 0 ; i < ${#deps[@]} ; i++ )) - do - if [ "${deps[$i]}" = "${elemento}" ]; then - echoAndLog "isInArray(): $elemento found in array" - is_in_array=0 - fi - done - - if [ $is_in_array -ne 0 ]; then - echoAndLog "${FUNCNAME}(): $elemento NOT found in array" - fi - - return $is_in_array - -} - -##################################################################### -####### Funciones de manejo de paquetes Debian -##################################################################### - -function checkPackage() -{ - package=$1 - if [ -z $package ]; then - errorAndLog "checkPackage(): parameter required" - exit 1 - fi - echoAndLog "checkPackage(): checking if package $package exists" - dpkg -s $package | grep Status | grep -qw install &>/dev/null - if [ $? -eq 0 ]; then - echoAndLog "checkPackage(): package $package exists" - return 0 - else - echoAndLog "checkPackage(): package $package doesn't exists" - return 1 - fi -} - -# recibe array con dependencias -# por referencia deja un array con las dependencias no resueltas -# devuelve 1 si hay alguna dependencia no resuelta -function checkDependencies() -{ - if [ $# -ne 2 ]; then - errorAndLog "checkDependencies(): invalid number of parameters" - exit 1 - fi - - echoAndLog "checkDependencies(): checking dependences" - uncompletedeps=0 - - # copia local del array del parametro 1 - local deps - eval "deps=( \"\${$1[@]}\" )" - - declare -a local_notinstalled - - for (( i = 0 ; i < ${#deps[@]} ; i++ )) - do - checkPackage ${deps[$i]} - if [ $? -ne 0 ]; then - local_notinstalled[$uncompletedeps]=$package - let uncompletedeps=uncompletedeps+1 - fi - done - - # relleno el array especificado en $2 por referencia - for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ )) - do - eval "${2}[$i]=${local_notinstalled[$i]}" - done - - # retorna el numero de paquetes no resueltos - echoAndLog "checkDependencies(): dependencies uncompleted: $uncompletedeps" - return $uncompletedeps -} - -# Recibe un array con las dependencias y lo instala -function installDependencies() -{ - if [ $# -ne 1 ]; then - errorAndLog "installDependencies(): invalid number of parameters" - exit 1 - fi - echoAndLog "installDependencies(): installing uncompleted dependencies" - - # copia local del array del parametro 1 - local deps - eval "deps=( \"\${$1[@]}\" )" - - local string_deps="" - for (( i = 0 ; i < ${#deps[@]} ; i++ )) - do - string_deps="$string_deps ${deps[$i]}" - done - - if [ -z "${string_deps}" ]; then - errorAndLog "installDependencies(): array of dependeces is empty" - exit 1 - fi - - OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND - export DEBIAN_FRONTEND=noninteractive - - echoAndLog "installDependencies(): now ${string_deps} will be installed" - apt-get -y install --force-yes ${string_deps} - if [ $? -ne 0 ]; then - errorAndLog "installDependencies(): error installing dependencies" - return 1 - fi - - DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND - echoAndLog "installDependencies(): dependencies installed" -} - -# Hace un backup del fichero pasado por parámetro -# deja un -last y uno para el día -function backupFile() -{ - if [ $# -ne 1 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local fichero=$1 - local fecha=`date +%Y%m%d` - - if [ ! -f $fichero ]; then - errorAndLog "${FUNCNAME}(): file $fichero doesn't exists" - return 1 - fi - - echoAndLog "${FUNCNAME}(): realizando backup de $fichero" - - # realiza una copia de la última configuración como last - cp -p $fichero "${fichero}-LAST" - - # si para el día no hay backup lo hace, sino no - if [ ! -f "${fichero}-${fecha}" ]; then - cp -p $fichero "${fichero}-${fecha}" - fi - - echoAndLog "${FUNCNAME}(): backup realizado" -} - -##################################################################### -####### Funciones para el manejo de bases de datos -##################################################################### - -# This function set password to root -function mysqlSetRootPassword() -{ - if [ $# -ne 1 ]; then - errorAndLog "mysqlSetRootPassword(): invalid number of parameters" - exit 1 - fi - - local root_mysql=$1 - echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server" - /usr/bin/mysqladmin -u root password ${root_mysql} - if [ $? -ne 0 ]; then - errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server" - return 1 - fi - echoAndLog "mysqlSetRootPassword(): root password saved!" - return 0 -} - -# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente -function mysqlGetRootPassword(){ - local pass_mysql - local pass_mysql2 - # Comprobar si MySQL está instalado con la clave de root por defecto. - if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then - echoAndLog "${FUNCNAME}(): Using default mysql root password." - else - stty -echo - echo "Existe un servicio mysql ya instalado" - read -p "Insertar clave de root de Mysql: " pass_mysql - echo "" - read -p "Confirmar clave:" pass_mysql2 - echo "" - stty echo - if [ "$pass_mysql" == "$pass_mysql2" ] ;then - MYSQL_ROOT_PASSWORD=$pass_mysql - echo "La clave es: ${MYSQL_ROOT_PASSWORD}" - return 0 - else - echo "Las claves no coinciden no se configura la clave del servidor de base de datos." - echo "las operaciones con la base de datos daran error" - return 1 - fi - fi -} - -# comprueba si puede conectar con mysql con el usuario root -function mysqlTestConnection() -{ - if [ $# -ne 1 ]; then - errorAndLog "mysqlTestConnection(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - echoAndLog "mysqlTestConnection(): checking connection to mysql..." - echo "" | mysql -uroot -p"${root_password}" - if [ $? -ne 0 ]; then - errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!" - return 1 - else - echoAndLog "mysqlTestConnection(): connection success" - return 0 - fi -} - -# comprueba si la base de datos existe -function mysqlDbExists() -{ - if [ $# -ne 2 ]; then - errorAndLog "mysqlDbExists(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - echoAndLog "mysqlDbExists(): checking if $database exists..." - echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$" - if [ $? -ne 0 ]; then - echoAndLog "mysqlDbExists():database $database doesn't exists" - return 1 - else - echoAndLog "mysqlDbExists():database $database exists" - return 0 - fi -} - -function mysqlCheckDbIsEmpty() -{ - if [ $# -ne 2 ]; then - errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..." - num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l` - if [ $? -ne 0 ]; then - errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password" - exit 1 - fi - - if [ $num_tablas -eq 0 ]; then - echoAndLog "mysqlCheckDbIsEmpty():database $database is empty" - return 0 - else - echoAndLog "mysqlCheckDbIsEmpty():database $database has tables" - return 1 - fi - -} - - -function mysqlImportSqlFileToDb() -{ - if [ $# -ne 3 ]; then - errorAndLog "${FNCNAME}(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - local sqlfile=$3 - - if [ ! -f $sqlfile ]; then - errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!" - return 1 - fi - - echoAndLog "${FUNCNAME}(): importing sql file to ${database}..." - perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DEFAULTUSER/$OPENGNSYS_DB_DEFAULTUSER/g; s/DEFAULTPASSWD/$OPENGNSYS_DB_DEFAULTPASSWD/g" $sqlfile - mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $sqlfile - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database" - return 1 - fi - echoAndLog "${FUNCNAME}(): file imported to database $database" - return 0 -} - -# Crea la base de datos -function mysqlCreateDb() -{ - if [ $# -ne 2 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - - echoAndLog "${FUNCNAME}(): creating database..." - mysqladmin -u root --password="${root_password}" create $database - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while creating database $database" - return 1 - fi - echoAndLog "${FUNCNAME}(): database $database created" - return 0 -} - - -function mysqlCheckUserExists() -{ - if [ $# -ne 2 ]; then - errorAndLog "mysqlCheckUserExists(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local userdb=$2 - - echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..." - echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user - if [ $? -ne 0 ]; then - echoAndLog "mysqlCheckUserExists(): user doesn't exists" - return 1 - else - echoAndLog "mysqlCheckUserExists(): user already exists" - return 0 - fi - -} - -# Crea un usuario administrativo para la base de datos -function mysqlCreateAdminUserToDb() -{ - if [ $# -ne 4 ]; then - errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters" - exit 1 - fi - - local root_password=$1 - local database=$2 - local userdb=$3 - local passdb=$4 - - echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}" - - cat > $WORKDIR/create_${database}.sql < ${basetftp}/pxelinux.cfg/default < /dev/null - if [ $? -eq 0 ]; then - echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting" - return 0 - fi - - cadenaexport="${export}" - for parametro in $* - do - if [ $contador -gt 0 ] - then - host=`echo $parametro | awk -F: '{print $1}'` - options=`echo $parametro | awk -F: '{print $2}'` - if [ "${host}" == "" ]; then - errorAndLog "${FUNCNAME}(): host can't be empty" - return 1 - fi - cadenaexport="${cadenaexport}\t${host}" - - if [ "${options}" != "" ]; then - cadenaexport="${cadenaexport}(${options})" - fi - fi - let contador=contador+1 - done - - echo -en "$cadenaexport\n" >> /etc/exports - - echoAndLog "${FUNCNAME}(): add $export to /etc/exports" - - return 0 -} - -######################################################################## -## Configuracion servicio DHCP -######################################################################## - -function dhcpConfigure() -{ - echoAndLog "${FUNCNAME}(): Sample DHCP Configuration." - - backupFile /etc/dhcp3/dhcpd.conf - - sed -e "s/SERVERIP/$SERVERIP/g" \ - -e "s/NETIP/$NETIP/g" \ - -e "s/NETMASK/$NETMASK/g" \ - -e "s/NETBROAD/$NETBROAD/g" \ - -e "s/ROUTERIP/$ROUTERIP/g" \ - -e "s/DNSIP/$DNSIP/g" \ - $WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while configuring dhcp server" - return 1 - fi - - /etc/init.d/dhcp3-server restart - echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"." - return 0 -} - - -##################################################################### -####### Funciones específicas de la instalación de Opengnsys -##################################################################### - -# Copiar ficheros del OpenGnSys Web Console. -function installWebFiles() -{ - echoAndLog "${FUNCNAME}(): Installing web files..." - cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para doxigen - if [ $? != 0 ]; then - errorAndLog "${FUNCNAME}(): Error copying web files." - exit 1 - fi - find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null - # Cambiar permisos para ficheros especiales. - chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \ - $INSTALL_TARGET/www/includes \ - $INSTALL_TARGET/www/comandos/gestores/filescripts \ - $INSTALL_TARGET/www/images/iconos - echoAndLog "${FUNCNAME}(): Web files installed successfully." -} - -# Configuración específica de Apache. -function openGnsysInstallWebConsoleApacheConf() -{ - if [ $# -ne 2 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local path_opengnsys_base=$1 - local path_apache2_confd=$2 - local path_web_console=${path_opengnsys_base}/www - - if [ ! -d $path_apache2_confd ]; then - errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation" - return 1 - fi - - mkdir -p $path_apache2_confd/{sites-available,sites-enabled} - - echoAndLog "${FUNCNAME}(): creating apache2 config file.." - - - # genera configuración - cat > $path_opengnsys_base/etc/apache.conf < - Options -Indexes FollowSymLinks - DirectoryIndex acceso.php - -EOF - - ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf - ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation" - return 1 - else - echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon" - /etc/init.d/apache2 restart - return 0 - fi -} - -# Crear documentación Doxygen para la consola web. -function makeDoxygenFiles() -{ - echoAndLog "${FUNCNAME}(): Making Doxygen web files..." - $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \ - $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www - if [ ! -d "$INSTALL_TARGET/www/html" ]; then - errorAndLog "${FUNCNAME}(): unable to create Doxygen web files." - return 1 - fi - mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api" - chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api - echoAndLog "${FUNCNAME}(): Doxygen web files created successfully." -} - - -# Crea la estructura base de la instalación de opengnsys -function openGnsysInstallCreateDirs() -{ - if [ $# -ne 1 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local path_opengnsys_base=$1 - - echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base" - - mkdir -p $path_opengnsys_base - mkdir -p $path_opengnsys_base/admin/{autoexec,comandos,menus,usuarios} - mkdir -p $path_opengnsys_base/bin - mkdir -p $path_opengnsys_base/client - mkdir -p $path_opengnsys_base/doc - mkdir -p $path_opengnsys_base/etc - mkdir -p $path_opengnsys_base/lib - mkdir -p $path_opengnsys_base/log/clients - mkdir -p $path_opengnsys_base/sbin - mkdir -p $path_opengnsys_base/www - mkdir -p $path_opengnsys_base/images - ln -fs /var/lib/tftpboot $path_opengnsys_base - ln -fs $path_opengnsys_base/log /var/log/opengnsys - - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" - return 1 - fi - - echoAndLog "${FUNCNAME}(): directory paths created" - return 0 -} - -# Copia ficheros de configuración y ejecutables genéricos del servidor. -function openGnsysCopyServerFiles () { - if [ $# -ne 1 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local path_opengnsys_base=$1 - - local SOURCES=( client/boot/initrd-generator \ - client/boot/upgrade-clients-udeb.sh \ - client/boot/udeblist.conf \ - client/boot/udeblist-jaunty.conf \ - client/boot/udeblist-karmic.conf \ - client/boot/udeblist-lucid.conf \ - server/PXE/pxelinux.cfg/default \ - doc ) - local TARGETS=( bin/initrd-generator \ - bin/upgrade-clients-udeb.sh \ - etc/udeblist.conf \ - etc/udeblist-jaunty.conf \ - etc/udeblist-karmic.conf \ - etc/udeblist-lucid.conf \ - tftpboot/pxelinux.cfg/default \ - doc ) - - if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then - errorAndLog "${FUNCNAME}(): inconsistent number of array items" - exit 1 - fi - - echoAndLog "${FUNCNAME}(): copying files to server directories" - - pushd $WORKDIR/opengnsys - local i - for (( i = 0; i < ${#SOURCES[@]}; i++ )); do - if [ -f "${SOURCES[$i]}" ]; then - echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" - cp -p "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}" - elif [ -d "${SOURCES[$i]}" ]; then - echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" - cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}" - else - echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" - fi - done - popd -} - -#################################################################### -### Funciones de compilación de códifo fuente de servicios -#################################################################### - -# Compilar los servicios de OpenGNsys -function servicesCompilation () -{ - local hayErrores=0 - - # Compilar OpenGnSys Server - echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server" - pushd $WORKDIR/opengnsys/admin/Services/ogAdmServer - make && make install - if [ $? -ne 0 ]; then - echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server" - hayErrores=1 - fi - popd - # Compilar OpenGnSys Repository Manager - echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager" - pushd $WORKDIR/opengnsys/admin/Services/ogAdmRepo - make && make install - if [ $? -ne 0 ]; then - echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager" - hayErrores=1 - fi - popd - # Compilar OpenGnSys Client - echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client" - pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient - make && mv ogAdmClient ../../../client/nfsexport/bin - if [ $? -ne 0 ]; then - echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client" - hayErrores=1 - fi - popd - - return $hayErrores -} - - -#################################################################### -### Funciones instalacion cliente opengnsys -#################################################################### - -function openGnsysClientCreate() -{ - local OSDISTRIB OSCODENAME - - local hayErrores=0 - - echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." - cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client - find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null - echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." - mkdir -p $INSTALL_TARGET/client/lib/engine/bin - cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while copying engine files" - hayErrores=1 - fi - - # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). - OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then - echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME." - $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME" - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" - hayErrores=1 - fi - echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME." - $INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME" - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" - hayErrores=1 - fi - else - echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files." - $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/ - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" - hayErrores=1 - fi - echoAndLog "${FUNCNAME}(): Loading default udeb files." - $INSTALL_TARGET/bin/upgrade-clients-udeb.sh - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" - hayErrores=1 - fi - fi - - if [ $hayErrores -eq 0 ]; then - echoAndLog "${FUNCNAME}(): Client generation success." - else - errorAndLog "${FUNCNAME}(): Client generation with errors" - fi - - return $hayErrores -} - - -# Configuración básica de servicios de OpenGnSys -function openGnsysConfigure() -{ - echoAndLog "openGnsysConfigure(): Copying init files." - cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys - cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.default /etc/default/opengnsys - update-rc.d opengnsys defaults - echoAndLog "openGnsysConfigure(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"." - perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmServer.cfg - perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg - echoAndLog "${FUNCNAME}(): Creating Web Console config file" - OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys" - perl -pi -e "s/SERVERIP/$SERVERIP/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php - sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Services/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg - echoAndLog "openGnsysConfiguration(): Starting OpenGnSys services." - /etc/init.d/opengnsys start -} - - -##################################################################### -####### Función de resumen informativo de la instalación -##################################################################### - -function installationSummary(){ - echo - echoAndLog "OpenGnSys Installation Summary" - echo "==============================" - echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)" - echoAndLog "Installation directory: $INSTALL_TARGET" - echoAndLog "Repository directory: $INSTALL_TARGET/images" - echoAndLog "TFTP configuracion directory: /var/lib/tftpboot" - echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf" - echoAndLog "NFS configuracion file: /etc/exports" - echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" - echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER" - echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD" - echoAndLog "Web Console default user: $OPENGNSYS_DB_DEFAULTUSER" - echoAndLog "Web Console default password: $OPENGNSYS_DB_DEFAULTPASSWD" - echo - echoAndLog "Post-Installation Instructions:" - echo "===============================" - echoAndLog "Review or edit all configuration files." - echoAndLog "Insert DHCP configuration data and restart service." - echoAndLog "Log-in as Web Console admin user." - echoAndLog " - Review default Organization data and default user." - echoAndLog "Log-in as Web Console organization user." - echoAndLog " - Insert OpenGnSys data (rooms, computers, etc)." -echo -} - -- cgit v1.2.3-18-g5258 From f3d6aeb4d9e4fcfae7cc4bf0a408d9e7286d4c87 Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:46:32 +0000 Subject: version1.0 renombrando ogclient boot-tools git-svn-id: https://opengnsys.es/svn/branches/version1.0@1760 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../clientstructure/etc/apt/sources.list.debian | 4 + .../clientstructure/etc/apt/sources.list.ubuntu | 56 +++ client/boot-tools/clientstructure/etc/environment | 4 + client/boot-tools/clientstructure/etc/fstab | 13 + .../etc/initramfs-tools/hooks/oghooks | 58 +++ .../clientstructure/etc/initramfs-tools/modules | 14 + .../etc/initramfs-tools/scripts/ogfunctions | 436 +++++++++++++++++++++ .../etc/initramfs-tools/scripts/oginit | 111 ++++++ client/boot-tools/clientstructure/etc/inittab | 14 + .../etc/modprobe.d/blacklist-framebuffer.conf | 30 ++ client/boot-tools/clientstructure/etc/mtab | 0 .../clientstructure/etc/network/interfaces | 4 + .../clientstructure/etc/profile.d/loadenviron.sh | 84 ++++ .../boot-tools/clientstructure/etc/ssh/ssh_config | 56 +++ .../boot-tools/clientstructure/etc/ssh/sshd_config | 86 ++++ .../clientstructure/root/CompileSoftware.sh | 30 ++ client/boot-tools/clientstructure/root/ConfFS.sh | 24 ++ .../clientstructure/root/GenerateInitrd.generic.sh | 16 + .../clientstructure/root/InstallSoftware.sh | 62 +++ .../clientstructure/root/ReconfigureLocales.sh | 4 + .../clientstructure/root/generateSshKeysClient.sh | 23 ++ .../clientstructure/root/importSshKeys.sh | 17 + client/boot-tools/clientstructure/root/qemu.sh | 9 + .../var/lib/locales/supported.d/local | 5 + 24 files changed, 1160 insertions(+) create mode 100644 client/boot-tools/clientstructure/etc/apt/sources.list.debian create mode 100644 client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu create mode 100644 client/boot-tools/clientstructure/etc/environment create mode 100644 client/boot-tools/clientstructure/etc/fstab create mode 100755 client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks create mode 100644 client/boot-tools/clientstructure/etc/initramfs-tools/modules create mode 100644 client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions create mode 100755 client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit create mode 100644 client/boot-tools/clientstructure/etc/inittab create mode 100644 client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf create mode 100644 client/boot-tools/clientstructure/etc/mtab create mode 100644 client/boot-tools/clientstructure/etc/network/interfaces create mode 100755 client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh create mode 100644 client/boot-tools/clientstructure/etc/ssh/ssh_config create mode 100644 client/boot-tools/clientstructure/etc/ssh/sshd_config create mode 100755 client/boot-tools/clientstructure/root/CompileSoftware.sh create mode 100755 client/boot-tools/clientstructure/root/ConfFS.sh create mode 100755 client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh create mode 100644 client/boot-tools/clientstructure/root/InstallSoftware.sh create mode 100755 client/boot-tools/clientstructure/root/ReconfigureLocales.sh create mode 100644 client/boot-tools/clientstructure/root/generateSshKeysClient.sh create mode 100755 client/boot-tools/clientstructure/root/importSshKeys.sh create mode 100755 client/boot-tools/clientstructure/root/qemu.sh create mode 100644 client/boot-tools/clientstructure/var/lib/locales/supported.d/local diff --git a/client/boot-tools/clientstructure/etc/apt/sources.list.debian b/client/boot-tools/clientstructure/etc/apt/sources.list.debian new file mode 100644 index 00000000..495e48d4 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/apt/sources.list.debian @@ -0,0 +1,4 @@ +deb http://ftp.us.debian.org/debian lenny main contrib non-free + +deb http://security.debian.org/ lenny/updates main contrib non-free +deb-src http://security.debian.org/ lenny/updates main contrib non-free diff --git a/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu b/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu new file mode 100644 index 00000000..29348ccc --- /dev/null +++ b/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu @@ -0,0 +1,56 @@ +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted +## Major bug fix updates produced after the final release of the +## distribution. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team. Also, please note that software in universe WILL NOT receive any +## review or updates from the Ubuntu security team. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team, and may not be under a free licence. Please satisfy yourself as to +## your rights to use the software. Also, please note that software in +## multiverse WILL NOT receive any review or updates from the Ubuntu +## security team. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse + +## Uncomment the following two lines to add software from the 'backports' +## repository. +## N.B. software from this repository may not have been tested as +## extensively as that contained in the main release, although it includes +## newer versions of some applications which may provide useful features. +## Also, please note that software in backports WILL NOT receive any review +## or updates from the Ubuntu security team. +# deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse +# deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse + +## Uncomment the following two lines to add software from Canonical's +## 'partner' repository. +## This software is not part of Ubuntu, but is offered by Canonical and the +## respective vendors as a service to Ubuntu users. +# deb http://archive.canonical.com/ubuntu OSCODENAME partner +# deb-src http://archive.canonical.com/ubuntu OSCODENAME partner + + +deb http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted +deb http://security.ubuntu.com/ubuntu OSCODENAME-security universe +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security universe +deb http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse + + +deb http://archive.ubuntu.com/ubuntu OSCODENAME main +deb http://free.nchc.org.tw/drbl-core drbl stable +deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe multiverse +deb http://ppa.launchpad.net/freenx-team/ubuntu/ OSCODENAME main +deb http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main +deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main diff --git a/client/boot-tools/clientstructure/etc/environment b/client/boot-tools/clientstructure/etc/environment new file mode 100644 index 00000000..bb529d99 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/environment @@ -0,0 +1,4 @@ +LC_TYPE=es_ES@euro +LC_ALL=es_ES@euro +LANG=es_ES@euro +LANGUAGE=es_ES@euro \ No newline at end of file diff --git a/client/boot-tools/clientstructure/etc/fstab b/client/boot-tools/clientstructure/etc/fstab new file mode 100644 index 00000000..d7473df4 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/fstab @@ -0,0 +1,13 @@ +# /etc/fstab: static file system information. +# +# Use 'blkid -o value -s UUID' to print the universally unique identifier +# for a device; this may be used with UUID= as a more robust way to name +# devices that works even if disks are added and removed. See fstab(5). +# +# +proc /proc proc 0 0 +/dev/sda1 ext3 errors=remount-ro 0 1 + + + + diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks b/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks new file mode 100755 index 00000000..15fd01cc --- /dev/null +++ b/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks @@ -0,0 +1,58 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + +#@file oghooks +#@brief configuración initrd para OpenGnSys +#@warning +#@version 0.9 - estrucura opengnsys, bash-static, unionfs, atheros +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; +mkdir -p ${DESTDIR}/ogboot; +mkdir -p ${DESTDIR}/boot; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash +copy_exec /usr/bin/unionfs-fuse +copy_exec /sbin/mount.cifs + + +# Insert OpenGnsys Engine +#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + +rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl* +manual_add_modules cifs +manual_add_modules smbfs +manual_add_modules atl1e +manual_add_modules squashfs + + diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/modules b/client/boot-tools/clientstructure/etc/initramfs-tools/modules new file mode 100644 index 00000000..8bac1d4b --- /dev/null +++ b/client/boot-tools/clientstructure/etc/initramfs-tools/modules @@ -0,0 +1,14 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +vga16b +vesafb +fbcon + diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions new file mode 100644 index 00000000..adce44fd --- /dev/null +++ b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions @@ -0,0 +1,436 @@ +#@file ogfunctions.lib +#@brief Librería o clase para la generación del 1erFS +#@class client +#@brief Funciones para la generación del primers sistema (initrd) +#@version 0.91 +#@warning License: GNU GPLv3+ + + + + +ogExportKernelParameters () +{ + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done +return 0 +} + +ogExportVarEnvironment () +{ + #puntos de accesos al servidor ogprotocol=nfs + export NFSROOTBOOT="/var/lib/tftpboot" + export NFSCLIENTDIR="/opt/opengnsys/client" + export NFSLOGDIR="/opt/opengnsys/log/clients" + export NFSIMGDIR="/opt/opengnsys/images" + #puntos de accesos al servidor ogprotocol=smb + export SMBROOTBOOT="tftpboot" + export SMBCLIENTDIR="ogclient" + export SMBLOGDIR="oglog" + export SMBIMGDIR="ogimages" + + #puntos de montaje local ram o cache + export LOCALCLIENTDIR="/opt/opengnsys" + export LOCALLOGDIR="/opt/opengnsys/log" + export LOCALIMGDIR="/opt/opengnsys/images" + export LOCALROOTBOOT="/opt/og2fs/tftpboot" #punto de montaje del contendor tftpboot + export LOCALROOTIMG="/opt/og2fs/2ndfs" #punto de montaje donde se accede al 2nd FS mediante loop + export LOCALROOTRAM="/opt/og2fs/1stfs" #punto de montaje para unionfs + export LOCALROOTUNION="/opt/og2fs/unionfs" #punto de union entreo LOCALROOTIMG y LOCALROOTRAM + ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES. + #ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd. + #IPV4DDR + #IPV4BROADCAST + #IPV4NETMASK + #IPV4GATEWAY + #DNS0 DNS1 + #HOSTNAME + #ROOTSERVER #ip del servidor pxe que ha servido el kernel + #REPOSERVER=ogrepo -> ogConectROOTSERVER() ip del servidor de images para separar serviicios. + return 0 +} + +ogConfigureRamfs () +{ + mkdir -p $LOCALROOTBOOT + mkdir -p $LOCALROOTIMG + mkdir -p $LOCALROOTRAM + mkdir -p $LOCALROOTUNION +} + +ogLoadNetModule () +{ + #cargando netmodule + if [ -n "$ognetmodule" ] + then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` + fi +} + + +ogPostConfigureFS() +{ + # configuramos el /etc/hostname. + echo $HOSTNAME > /etc/hostname + + #configuramos el /etc/hosts + echo "127.0.0.1 localhost" > /etc/hosts + echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts + + #configuramos el host.conf + echo "order hosts,bind" > /etc/host.conf + echo "multi on" >> /etc/host.conf + + # configuramos el /etc/networks + #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}') + NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ") + echo "default 0.0.0.0" > /etc/networks + echo "loopback 127.0.0.0" >> /etc/networks + echo "link-local 169.254.0.0" >> /etc/networks + echo "localnet $NETIP" >> /etc/networks + #route +} + + + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +return 0 +} + +ogConectROOTSERVER () +{ +local OPTIONS +#params a detectar +if [ $ogrepo ] +then + # Validar si la ip es correcta + ROOTREPO=$ogrepo +else + ROOTREPO=$ROOTSERVER +fi + +case "$ogprotocol" in + cdrom) + echo "blkid /dev/s*" + blkid /dev/s* + echo " mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT " + mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT + ;; + httfs) + echo "protocolo httfs aun no soportado" + ;; + sshfs) + echo "protocolo sshfs aun no soportado" + ;; + smb) + echo Preparando conexión con el Repositorio $ROOTSERVER $ogprotocol + OPTIONS=" -o user=opengnsys,pass=og" + mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS + #&& echo "mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS "; + mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS + #&& echo "mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS " ; + mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS + #&& echo "mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS "; + mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro + #&& echo " mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro "; + ;; + nfs) + echo Preparando conexión con el Repositorio $ROOTSERVER $ogprotocol + nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR && echo "nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR "; + nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR && echo "nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR "; + nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT && echo "nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT "; + nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR && echo "nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR "; + + #mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + #mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m + ;; +esac +} + +ogMerge2ndFile() +{ +if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ] +then + cat /proc/mounts > /tmp/mtab.preunion + if [ "$og2nd" == "img" ] + then + #para acceder al img + losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256 + mount /dev/loop0 $LOCALROOTIMG + else + ## para acceder al squashfs + mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop + fi + for i in etc var lib bin sbin usr root boot; do + unionmount $i + done + cat /tmp/mtab.preunion > /etc/mtab +else + echo "ficher imagen del cliente no encontrado" + return 1 +fi +} + + +unionmount() +{ + tmpdir=/$1 #dir + FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" + UNION_OPT="-o cow -o noinitgroups" + UBIN="unionfs-fuse" + #UPATH="/unionfs" + #LOCALROOTIMG="/opt/og2fs/2ndfs" + #LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs + #LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM + #mkdir -p $LOCALROOTRAM #/unionfs/host + #mkdir -p $LOCALROOTUNION #/unionfs/union + mkdir -p $LOCALROOTRAM$tmpdir + #mount --bind /$tmpdir $LOCALROOTRAM$tmpdir + U1STDIR="${LOCALROOTRAM}${tmpdir}=RW" + U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO" + UNIONDIR=$LOCALROOTUNION$tmpdir + mkdir -p $UNIONDIR + $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR + mount --bind $UNIONDIR $tmpdir +} + + +unionmountOLD() +{ + FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" + UNION_OPT="-o cow -o noinitgroups" + UPATH="/unionfs" + UBIN="unionfs-fuse" + mkdir -p /unionfs/host + mkdir -p /unionfs/union + dir=$1 + mkdir -p /unionfs/host/$dir + #mount --bind /$dir /unionfs/host/$dir + mkdir -p /unionfs/union/$dir + host="/unionfs/host/${dir}=RW" + common="/opt/og2fs/${dir}=RO" + $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir + mount --bind /unionfs/union/$dir /$dir +} +ogconfigure_lo() +{ +# for the portmapper we need localhost +ifconfig lo 127.0.0.1 +#/etc/init.d/portmap start +} + +ogconfigure_networking() +{ +IP=$IPOPTS +# http://paste.ubuntu.com/427631/ Paste from yofel at Tue, 4 May 2010 13:49:56 +0000 + if [ -n "${BOOTIF}" ]; then + # pxelinux sets BOOTIF to a value based on the mac address of the + # network card used to PXE boot, so use this value for DEVICE rather + # than a hard-coded device name from initramfs.conf. this facilitates + # network booting when machines may have multiple network cards. + # pxelinux sets BOOTIF to 01-$mac_address + + # strip off the leading "01-", which isn't part of the mac + # address + temp_mac=${BOOTIF#*-} + + # convert to typical mac address format by replacing "-" with ":" + bootif_mac="" + IFS='-' + for x in $temp_mac ; do + if [ -z "$bootif_mac" ]; then + bootif_mac="$x" + else + bootif_mac="$x:$bootif_mac" + fi + done + unset IFS + + # look for devices with matching mac address, and set DEVICE to + # appropriate value if match is found. + for device in /sys/class/net/* ; do + if [ -f "$device/address" ]; then + current_mac=$(cat "$device/address") + if [ "$bootif_mac" = "$current_mac" ]; then + DEVICE=${device##*/} + break + fi + fi + done + fi + + # networking already configured thus bail out + [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 + + # support ip options see linux sources + # Documentation/filesystems/nfsroot.txt + # Documentation/frv/booting.txt + + for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do + + # The NIC is to be configured if this file does not exist. + # Ip-Config tries to create this file and when it succeds + # creating the file, ipconfig is not run again. + if [ -e /tmp/net-"${DEVICE}".conf ]; then + break; + fi + + case ${IP} in + none|off) + # Do nothing + ;; + ""|on|any) + # Bring up device + echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " + ipconfig -t ${ROUNDTTT} ${DEVICE} + ;; + dhcp|bootp|rarp|both) + echo "Setting $DEVICE with (dhcp) kernel params $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " + ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} + ;; + *) + echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} -d $IP " + ipconfig -t ${ROUNDTTT} -d $IP + + # grab device entry from ip option + NEW_DEVICE=${IP#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IP}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac + done + + # source ipconfig output + if [ -n "${DEVICE}" ]; then + # source specific bootdevice + . /tmp/net-${DEVICE}.conf + else + # source any interface as not exaclty specified + . /tmp/net-*.conf + fi +} + + ##################################################################### +# Ask yesno question. +# +# Usage: yesno OPTIONS QUESTION +# +# Options: +# --timeout N Timeout if no input seen in N seconds. +# --default ANS Use ANS as the default answer on timeout or +# if an empty answer is provided. +# +# Exit status is the answer. 0=yes 1=no + +ogYesNo() +{ + local ans + local ok=0 + local timeout=0 + local default + local t + + while [[ "$1" ]] + do + case "$1" in + --default) + shift + default=$1 + if [[ ! "$default" ]]; then error "Missing default value"; fi + t=$(echo $default | tr '[:upper:]' '[:lower:]') + + if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then + error "Illegal default answer: $default" + fi + default=$t + shift + ;; + + --timeout) + shift + timeout=$1 + if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi + #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi + shift + ;; + + -*) + error "Unrecognized option: $1" + ;; + + *) + break + ;; + esac + done + + if [[ $timeout -ne 0 && ! "$default" ]]; then + error "Non-zero timeout requires a default answer" + fi + + if [[ ! "$*" ]]; then error "Missing question"; fi + + while [[ $ok -eq 0 ]] + do + if [[ $timeout -ne 0 ]]; then + if ! read -t $timeout -p "$*" ans; then + ans=$default + else + # Turn off timeout if answer entered. + timeout=0 + if [[ ! "$ans" ]]; then ans=$default; fi + fi + else + read -p "$*" ans + if [[ ! "$ans" ]]; then + ans=$default + else + ans=$(echo $ans | tr '[:upper:]' '[:lower:]') + fi + fi + + if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then + ok=1 + fi + + if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi + done + [[ "$ans" = "y" || "$ans" == "yes" ]] +} + + diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit new file mode 100755 index 00000000..a6c05d5e --- /dev/null +++ b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit @@ -0,0 +1,111 @@ +# OpenGnsys oginit -*- shell-script -*- + +#@file oginit +#@brief Guion modificador inicio initrd para OpenGnSys +#@warning +#@version 0.1 - basado en ROOTfs +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2009/00/00 +#@version 0.2 - basado en el instalador de ubunto +#@author Alejandro Castillo +#@author Ramón Gómez +#@author Irina +#@author Antonio Doblas +#@date 2010/00/00 +#@version 0.7 - Generación limpia con mkinitrd, busybox +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/05/24 +#@version 0.8 - Integración con FileSystem externo +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/06/24 +#@version 0.8.1 - UnionFS + squasfs +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/06/29 + +#*/ + + + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + . /scripts/functions + . /scripts/ogfunctions + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N " + [ $? == 0 ] && sh || echo " " + + set -a + log_success_msg "Checking kernel parameters" + ogExportKernelParameters + log_success_msg "Checking Opengnys Environmnet" + ogExportVarEnvironment + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N " + [ $? == 0 ] && sh || echo " " + ogConfigureRamfs + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N " + [ $? == 0 ] && sh || echo " " + ogLoadNetModule + + #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + #run_scripts /scripts/og-premount + #[ "$quiet" != "y" ] && log_end_msg + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N " + [ $? == 0 ] && sh || echo " " + ogconfigure_networking + log_success_msg "config networking" + ogconfigure_lo + log_success_msg "config loopback" + + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N " + [ $? == 0 ] && sh || echo " " + ogGetROOTSERVER && log_success_msg "Get Info from pxe server" + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before conect with og Services : y/N " + [ $? == 0 ] && sh || echo " " + ogConectROOTSERVER && log_success_msg "Conecting with og services" || sh + # ogConectROOTMEDIA + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before merge the Second File System with initrd (First File System) : y/N " + [ $? == 0 ] && sh || echo " " + ogMerge2ndFile && log_success_msg "Merge onto Second File System" + + + #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + #run_scripts /scripts/og-bottom + #[ "$quiet" != "y" ] && log_end_msg + + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N " + [ $? == 0 ] && sh || echo " " + ogPostConfigureFS + setupcon -k + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N " + [ $? == 0 ] && sh || echo " " + +if [ "$oginit" ] +then + exec $oginit +else + exec init +fi + + + + + +} diff --git a/client/boot-tools/clientstructure/etc/inittab b/client/boot-tools/clientstructure/etc/inittab new file mode 100644 index 00000000..94c30028 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/inittab @@ -0,0 +1,14 @@ +# This is run first except when booting in single-user mode +# +#::sysinit:/opt/opengnsys/etc/preinit/defaultTESTING.sh +# /bin/sh invocations on selected ttys +# +# Start an "askfirst" shell on the console (whatever that may be) +#::askfirst:/bin/sh +# Start an "askfirst" shell on /dev/tty2-4 +#tty1::respawn:/sbin/getty 38400 tty1 +tty1::respawn:/opt/opengnsys/etc/preinit/defaultTESTING.sh +tty2::respawn:/sbin/getty 38400 tty2 +tty3::respawn:/sbin/getty 38400 tty3 +tty4::respawn:/sbin/getty 38400 tty4 +tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf b/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf new file mode 100644 index 00000000..8b047e4e --- /dev/null +++ b/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf @@ -0,0 +1,30 @@ +# Framebuffer drivers are generally buggy and poorly-supported, and cause +# suspend failures, kernel panics and general mayhem. For this reason we +# never load them automatically. +blacklist aty128fb +blacklist atyfb +#blacklist radeonfb +blacklist cirrusfb +blacklist cyber2000fb +blacklist cyblafb +blacklist gx1fb +blacklist hgafb +blacklist i810fb +blacklist intelfb +blacklist kyrofb +blacklist lxfb +blacklist matroxfb_base +blacklist neofb +blacklist nvidiafb +blacklist pm2fb +blacklist rivafb +blacklist s1d13xxxfb +blacklist savagefb +blacklist sisfb +blacklist sstfb +blacklist tdfxfb +blacklist tridentfb +#blacklist vesafb +blacklist vfb +blacklist viafb +blacklist vt8623fb diff --git a/client/boot-tools/clientstructure/etc/mtab b/client/boot-tools/clientstructure/etc/mtab new file mode 100644 index 00000000..e69de29b diff --git a/client/boot-tools/clientstructure/etc/network/interfaces b/client/boot-tools/clientstructure/etc/network/interfaces new file mode 100644 index 00000000..dbe43582 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/network/interfaces @@ -0,0 +1,4 @@ +auto lo +iface lo inet loopback +auto eth0 +iface eth0 inet dhcp \ No newline at end of file diff --git a/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh b/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh new file mode 100755 index 00000000..0bf46a3e --- /dev/null +++ b/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh @@ -0,0 +1,84 @@ +#!/bin/bash +#/** +#@file loadenviron.sh +#@brief Script de carga de la API de funciones de OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + +# FIXME Temporal +export LANG="${LANG:-es_ES}" + +#/// Directorios del projecto OpenGNSys. +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" +if [ -d $OPENGNSYS ]; then + export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + +# export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH + # export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH + + #/// Cargar fichero de idioma. + LANGFILE=$OGETC/lang.$LANG.conf + if [ -f $LANGFILE ]; then + source $LANGFILE + #for i in $(grep "^[a-zA-Z].*=" $LANGFILE | cut -f1 -d=); do + for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do + export $i + done + fi + #/// Cargar API de funciones. + echo "$MSG_LOADAPI" + for i in $OGAPI/*.lib; do + source $i + done + for i in $(typeset -F | cut -f3 -d" "); do + export -f $i + done + # Carga de las API testing + if [ "$engine" = "testing" ] + then + for i in $OGAPI/*.testing; do + source $i + done + fi + # Añadir dependencia de arquitectura + ARCH=$(ogGetArch) + if [ -n "$ARCH" ]; then + # export PATH=$OGBIN/$ARCH:$PATH + # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH + fi + # Fichero de registros. + export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + # FIXME Pruebas para grupos de ordenadores + #export OGGROUP=$(ogGetGroup) + export OGGROUP=aula3 +fi + +#/// Declaración de códigos de error. +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + + diff --git a/client/boot-tools/clientstructure/etc/ssh/ssh_config b/client/boot-tools/clientstructure/etc/ssh/ssh_config new file mode 100644 index 00000000..7f9319dc --- /dev/null +++ b/client/boot-tools/clientstructure/etc/ssh/ssh_config @@ -0,0 +1,56 @@ + +# This is the ssh client system-wide configuration file. See +# ssh_config(5) for more information. This file provides defaults for +# users, and the values can be changed in per-user configuration files +# or on the command line. + +# Configuration data is parsed as follows: +# 1. command line options +# 2. user-specific file +# 3. system-wide file +# Any configuration value is only changed the first time it is set. +# Thus, host-specific definitions should be at the beginning of the +# configuration file, and defaults at the end. + +# Site-wide defaults for some commonly used options. For a comprehensive +# list of available options, their meanings and defaults, please see the +# ssh_config(5) man page. + +Host * +# ForwardAgent no +# ForwardX11 no +# ForwardX11Trusted yes +# RhostsRSAAuthentication no +# RSAAuthentication yes +# PasswordAuthentication yes + HostbasedAuthentication no +# GSSAPIAuthentication no +# GSSAPIDelegateCredentials no +# GSSAPIKeyExchange no +# GSSAPITrustDNS no +# BatchMode no +# CheckHostIP yes +# AddressFamily any +# ConnectTimeout 0 +# StrictHostKeyChecking ask +# IdentityFile ~/.ssh/identity +# IdentityFile ~/.ssh/id_rsa +# IdentityFile ~/.ssh/id_dsa +# Port 22 +# Protocol 2,1 +# Cipher 3des +# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc +# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 +# EscapeChar ~ +# Tunnel no +# TunnelDevice any:any +# PermitLocalCommand no +# VisualHostKey no + SendEnv LANG LC_* +# HashKnownHosts yes + GSSAPIAuthentication yes + GSSAPIDelegateCredentials no + + StrictHostKeyChecking no + UserKnownHostsFile=/dev/null + diff --git a/client/boot-tools/clientstructure/etc/ssh/sshd_config b/client/boot-tools/clientstructure/etc/ssh/sshd_config new file mode 100644 index 00000000..ea0303b3 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/ssh/sshd_config @@ -0,0 +1,86 @@ +# Package generated configuration file +# See the sshd_config(5) manpage for details + +# What ports, IPs and protocols we listen for +Port 22 +# Use these options to restrict which interfaces/protocols sshd will bind to +#ListenAddress :: +#ListenAddress 0.0.0.0 +Protocol 2 +# HostKeys for protocol version 2 +HostKey /etc/ssh/ssh_host_rsa_key +HostKey /etc/ssh/ssh_host_dsa_key +#Privilege Separation is turned on for security +UsePrivilegeSeparation yes + +# Lifetime and size of ephemeral version 1 server key +KeyRegenerationInterval 3600 +ServerKeyBits 768 + +# Logging +SyslogFacility AUTH +LogLevel INFO + +# Authentication: +LoginGraceTime 120 +PermitRootLogin yes +StrictModes yes + +RSAAuthentication yes +PubkeyAuthentication yes +#AuthorizedKeysFile %h/.ssh/authorized_keys + +# Don't read the user's ~/.rhosts and ~/.shosts files +IgnoreRhosts yes +# For this to work you will also need host keys in /etc/ssh_known_hosts +RhostsRSAAuthentication no +# similar for protocol version 2 +HostbasedAuthentication no +# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication +#IgnoreUserKnownHosts yes + +# To enable empty passwords, change to yes (NOT RECOMMENDED) +PermitEmptyPasswords no + +# Change to yes to enable challenge-response passwords (beware issues with +# some PAM modules and threads) +ChallengeResponseAuthentication no + +# Change to no to disable tunnelled clear text passwords +#PasswordAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosGetAFSToken no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +X11Forwarding yes +X11DisplayOffset 10 +PrintMotd no +PrintLastLog yes +TCPKeepAlive yes +#UseLogin no + +#MaxStartups 10:30:60 +#Banner /etc/issue.net + +# Allow client to pass locale environment variables +AcceptEnv LANG LC_* + +Subsystem sftp /usr/lib/openssh/sftp-server + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +UsePAM yes diff --git a/client/boot-tools/clientstructure/root/CompileSoftware.sh b/client/boot-tools/clientstructure/root/CompileSoftware.sh new file mode 100755 index 00000000..1a9b854a --- /dev/null +++ b/client/boot-tools/clientstructure/root/CompileSoftware.sh @@ -0,0 +1,30 @@ +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + +#dpkg-divert --local --rename --add /sbin/initctl +#ln -s /bin/true /sbin/initctl + +apt-get -y update +# software to compile code +apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk + +source /opt/opengnsys/lib/engine/bin/ToolsGNU.c + +ctorrent install +udpcast install +#ntfs-3g install +ms-sys install + +wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh +gdebi -n partclone_0.2.16_i386.deb + + cd /tmp + wget http://damien.guibouret.free.fr/savepart.zip + unzip savepart.zip -d /sbin/ + + diff --git a/client/boot-tools/clientstructure/root/ConfFS.sh b/client/boot-tools/clientstructure/root/ConfFS.sh new file mode 100755 index 00000000..3e0f4b5c --- /dev/null +++ b/client/boot-tools/clientstructure/root/ConfFS.sh @@ -0,0 +1,24 @@ +#!/bin/bash +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl +#mv /etc/fstab /etc/fstab.original 2>/dev/null +#mv /etc/mtab /etc/mtab.original 2>/dev/null + +#TODO: fichero etc/hosts +#TODO: fichero etc/resolv.conf +echo "ogClient" > /etc/hostname + +#export PASSROOT=og +#dpkg-reconfigure passwd +#echo "root:$PASSROOT" | chpasswd + + +#for i in pts/0 pts/1 pts/2 pts/3 do +# +# +#done +#TODO: introducir mas consoluas para el acceso como root. +echo "pts/0" >> /etc/securetty +echo "pts/1" >> /etc/securetty +echo "pts/2" >> /etc/securetty +echo "pts/3" >> /etc/securetty \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh b/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh new file mode 100755 index 00000000..eaeb475b --- /dev/null +++ b/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh @@ -0,0 +1,16 @@ +#!/bin/bash +export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null +#OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null +export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') +export OSRELEASE=$(uname -a | awk '{print $3}') +uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 +export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + + + +cd /usr/lib/initramfs-tools/bin/ +rm * +cp /bin/busybox ./ +cd /tmp/ +mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE +cp /boot/vmlinuz-$OSRELEASE /tmp \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/InstallSoftware.sh b/client/boot-tools/clientstructure/root/InstallSoftware.sh new file mode 100644 index 00000000..1d316eec --- /dev/null +++ b/client/boot-tools/clientstructure/root/InstallSoftware.sh @@ -0,0 +1,62 @@ +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + + +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl + +apt-get clean +apt-get -y update + + +# software system +apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE wget dialog man-db htop fbset gdebi-core busybox-static + +apt-get -y --force-yes install console-data locales + +# sofware networking +apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 unionfs-fuse open-iscsi nmap tcpdump arping dnsutils + +apt-get clean +# software services +apt-get -y --force-yes install openssh-server bittornado trickle iptraf screen schroot grub + +# software disk and filesystem +apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted ntfs-3g dosfstools +apt-get -y --force-yes install dmraid dmsetup lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools +apt-get -y --force-yes install btrfs-tools hfsplus hfsprogs hfsutils + +# software cloning +apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools +apt-get -y --force-yes install mbuffer + + +apt-get clean +## software postconf +apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk + +# software compressor +apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop pigz pbzip2 lbzip2 rzip p7zip-full unzip + +apt-get -y --force-yes remove busybox +apt-get -y --force-yes install busybox-static bash-static +apt-get clean +#apt-get -y --force-yes xorg-dev xorg lxde roxterm +# +#################################################################### +###################### Reconfigurando paquetes ###################### +################################################################### + + +#dpkg-reconfigure console-data +#dpkg-reconfigure console-setup +#dpkg-reconfigure locales +apt-get clean +##TODO################# Borrar algunos binarios del mkinitramfs + + diff --git a/client/boot-tools/clientstructure/root/ReconfigureLocales.sh b/client/boot-tools/clientstructure/root/ReconfigureLocales.sh new file mode 100755 index 00000000..5480d141 --- /dev/null +++ b/client/boot-tools/clientstructure/root/ReconfigureLocales.sh @@ -0,0 +1,4 @@ +#!/bin/bash +dpkg-reconfigure console-data +dpkg-reconfigure console-setup +dpkg-reconfigure locales \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/generateSshKeysClient.sh b/client/boot-tools/clientstructure/root/generateSshKeysClient.sh new file mode 100644 index 00000000..9857ad40 --- /dev/null +++ b/client/boot-tools/clientstructure/root/generateSshKeysClient.sh @@ -0,0 +1,23 @@ +#!/bin/bash +echo "comprobando directorio .ssh del root" +if [ ! -d /root/.ssh ] +then + echo "creando directorio .ssh 600" + mkdir -p /root/.ssh + chmod 700 /root/.ssh +fi + + +echo "comprobando el fichero authorized_keys .ssh del root" +if [ ! -f /root/.ssh/authorized_keys ] +then + echo "creando el fichero authorized_keys" + touch /root/.ssh/authorized_keys + chmod 600 /root/.ssh/authorized_keys +fi + +ssh-keygen -q -f /root/.ssh/id_rsa -N "" +cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys + +## TODO: exportamos la publica a los repos +cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/importSshKeys.sh b/client/boot-tools/clientstructure/root/importSshKeys.sh new file mode 100755 index 00000000..17a797f8 --- /dev/null +++ b/client/boot-tools/clientstructure/root/importSshKeys.sh @@ -0,0 +1,17 @@ +#!/bin/bash +echo "comprobando directorio .ssh del root" +if [ ! -d /root/.ssh ] +then + echo "creando directorio .ssh 600" + mkdir -p /root/.ssh + chmod 700 /root/.ssh +fi +echo "creando el fichero authorized_keys" +touch /root/.ssh/authorized_keys +chmod 600 /root/.ssh/authorized_keys + +echo "importando la clave publica del servidor OG" +cat /tmp/id_rsa.pub + +[ -f /tmp/id_rsa.pub ] && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys || echo "no key publica og" + \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/qemu.sh b/client/boot-tools/clientstructure/root/qemu.sh new file mode 100755 index 00000000..c5a93cd9 --- /dev/null +++ b/client/boot-tools/clientstructure/root/qemu.sh @@ -0,0 +1,9 @@ +#/bin/bash + +mount -o rw,remount / +mount proc /proc -t proc +export PATH=$PATH dpkg -i *.deb +modprobe 8139too +modprobe 8139cp +dhclient +/etc/init.d/ssh restart \ No newline at end of file diff --git a/client/boot-tools/clientstructure/var/lib/locales/supported.d/local b/client/boot-tools/clientstructure/var/lib/locales/supported.d/local new file mode 100644 index 00000000..be3f2a41 --- /dev/null +++ b/client/boot-tools/clientstructure/var/lib/locales/supported.d/local @@ -0,0 +1,5 @@ +es_ES ISO-8859-1 +es_ES@euro ISO-8859-15 +es_ES.UTF-8 UTF-8 +es_ES.UTF-8@euro UTF-8 +en_US.UTF-8 UTF-8 \ No newline at end of file -- cgit v1.2.3-18-g5258 From 2edde4ffe9013442c380b970c24bd739425765cc Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:55:03 +0000 Subject: git-svn-id: https://opengnsys.es/svn/branches/version1.0@1761 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../clientstructure/etc/apt/sources.list.debian | 4 - .../clientstructure/etc/apt/sources.list.ubuntu | 56 --- client/ogClient/clientstructure/etc/environment | 4 - client/ogClient/clientstructure/etc/fstab | 13 - .../etc/initramfs-tools/hooks/oghooks | 58 --- .../clientstructure/etc/initramfs-tools/modules | 14 - .../etc/initramfs-tools/scripts/ogfunctions | 436 --------------------- .../etc/initramfs-tools/scripts/oginit | 111 ------ client/ogClient/clientstructure/etc/inittab | 14 - .../etc/modprobe.d/blacklist-framebuffer.conf | 30 -- client/ogClient/clientstructure/etc/mtab | 0 .../clientstructure/etc/network/interfaces | 4 - .../clientstructure/etc/profile.d/loadenviron.sh | 84 ---- client/ogClient/clientstructure/etc/ssh/ssh_config | 56 --- .../ogClient/clientstructure/etc/ssh/sshd_config | 86 ---- .../clientstructure/root/CompileSoftware.sh | 30 -- client/ogClient/clientstructure/root/ConfFS.sh | 24 -- .../clientstructure/root/GenerateInitrd.generic.sh | 16 - .../clientstructure/root/InstallSoftware.sh | 62 --- .../clientstructure/root/ReconfigureLocales.sh | 4 - .../clientstructure/root/generateSshKeysClient.sh | 23 -- .../ogClient/clientstructure/root/importSshKeys.sh | 17 - client/ogClient/clientstructure/root/qemu.sh | 9 - .../var/lib/locales/supported.d/local | 5 - 24 files changed, 1160 deletions(-) delete mode 100644 client/ogClient/clientstructure/etc/apt/sources.list.debian delete mode 100644 client/ogClient/clientstructure/etc/apt/sources.list.ubuntu delete mode 100644 client/ogClient/clientstructure/etc/environment delete mode 100644 client/ogClient/clientstructure/etc/fstab delete mode 100755 client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks delete mode 100644 client/ogClient/clientstructure/etc/initramfs-tools/modules delete mode 100644 client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions delete mode 100755 client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit delete mode 100644 client/ogClient/clientstructure/etc/inittab delete mode 100644 client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf delete mode 100644 client/ogClient/clientstructure/etc/mtab delete mode 100644 client/ogClient/clientstructure/etc/network/interfaces delete mode 100755 client/ogClient/clientstructure/etc/profile.d/loadenviron.sh delete mode 100644 client/ogClient/clientstructure/etc/ssh/ssh_config delete mode 100644 client/ogClient/clientstructure/etc/ssh/sshd_config delete mode 100755 client/ogClient/clientstructure/root/CompileSoftware.sh delete mode 100755 client/ogClient/clientstructure/root/ConfFS.sh delete mode 100755 client/ogClient/clientstructure/root/GenerateInitrd.generic.sh delete mode 100644 client/ogClient/clientstructure/root/InstallSoftware.sh delete mode 100755 client/ogClient/clientstructure/root/ReconfigureLocales.sh delete mode 100644 client/ogClient/clientstructure/root/generateSshKeysClient.sh delete mode 100755 client/ogClient/clientstructure/root/importSshKeys.sh delete mode 100755 client/ogClient/clientstructure/root/qemu.sh delete mode 100644 client/ogClient/clientstructure/var/lib/locales/supported.d/local diff --git a/client/ogClient/clientstructure/etc/apt/sources.list.debian b/client/ogClient/clientstructure/etc/apt/sources.list.debian deleted file mode 100644 index 495e48d4..00000000 --- a/client/ogClient/clientstructure/etc/apt/sources.list.debian +++ /dev/null @@ -1,4 +0,0 @@ -deb http://ftp.us.debian.org/debian lenny main contrib non-free - -deb http://security.debian.org/ lenny/updates main contrib non-free -deb-src http://security.debian.org/ lenny/updates main contrib non-free diff --git a/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu b/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu deleted file mode 100644 index 29348ccc..00000000 --- a/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu +++ /dev/null @@ -1,56 +0,0 @@ -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted -## Major bug fix updates produced after the final release of the -## distribution. -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team. Also, please note that software in universe WILL NOT receive any -## review or updates from the Ubuntu security team. -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe - -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team, and may not be under a free licence. Please satisfy yourself as to -## your rights to use the software. Also, please note that software in -## multiverse WILL NOT receive any review or updates from the Ubuntu -## security team. -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse - -## Uncomment the following two lines to add software from the 'backports' -## repository. -## N.B. software from this repository may not have been tested as -## extensively as that contained in the main release, although it includes -## newer versions of some applications which may provide useful features. -## Also, please note that software in backports WILL NOT receive any review -## or updates from the Ubuntu security team. -# deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse -# deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse - -## Uncomment the following two lines to add software from Canonical's -## 'partner' repository. -## This software is not part of Ubuntu, but is offered by Canonical and the -## respective vendors as a service to Ubuntu users. -# deb http://archive.canonical.com/ubuntu OSCODENAME partner -# deb-src http://archive.canonical.com/ubuntu OSCODENAME partner - - -deb http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted -deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted -deb http://security.ubuntu.com/ubuntu OSCODENAME-security universe -deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security universe -deb http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse -deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse - - -deb http://archive.ubuntu.com/ubuntu OSCODENAME main -deb http://free.nchc.org.tw/drbl-core drbl stable -deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe multiverse -deb http://ppa.launchpad.net/freenx-team/ubuntu/ OSCODENAME main -deb http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main -deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main diff --git a/client/ogClient/clientstructure/etc/environment b/client/ogClient/clientstructure/etc/environment deleted file mode 100644 index bb529d99..00000000 --- a/client/ogClient/clientstructure/etc/environment +++ /dev/null @@ -1,4 +0,0 @@ -LC_TYPE=es_ES@euro -LC_ALL=es_ES@euro -LANG=es_ES@euro -LANGUAGE=es_ES@euro \ No newline at end of file diff --git a/client/ogClient/clientstructure/etc/fstab b/client/ogClient/clientstructure/etc/fstab deleted file mode 100644 index d7473df4..00000000 --- a/client/ogClient/clientstructure/etc/fstab +++ /dev/null @@ -1,13 +0,0 @@ -# /etc/fstab: static file system information. -# -# Use 'blkid -o value -s UUID' to print the universally unique identifier -# for a device; this may be used with UUID= as a more robust way to name -# devices that works even if disks are added and removed. See fstab(5). -# -# -proc /proc proc 0 0 -/dev/sda1 ext3 errors=remount-ro 0 1 - - - - diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks b/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks deleted file mode 100755 index 15fd01cc..00000000 --- a/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - -#@file oghooks -#@brief configuración initrd para OpenGnSys -#@warning -#@version 0.9 - estrucura opengnsys, bash-static, unionfs, atheros -#@author Antonio J. Doblas Viso. -#@date 2010/05/24 -#*/ - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; -mkdir -p ${DESTDIR}/ogboot; -mkdir -p ${DESTDIR}/boot; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash -copy_exec /usr/bin/unionfs-fuse -copy_exec /sbin/mount.cifs - - -# Insert OpenGnsys Engine -#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - -rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl* -manual_add_modules cifs -manual_add_modules smbfs -manual_add_modules atl1e -manual_add_modules squashfs - - diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/modules b/client/ogClient/clientstructure/etc/initramfs-tools/modules deleted file mode 100644 index 8bac1d4b..00000000 --- a/client/ogClient/clientstructure/etc/initramfs-tools/modules +++ /dev/null @@ -1,14 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -vga16b -vesafb -fbcon - diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions deleted file mode 100644 index adce44fd..00000000 --- a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions +++ /dev/null @@ -1,436 +0,0 @@ -#@file ogfunctions.lib -#@brief Librería o clase para la generación del 1erFS -#@class client -#@brief Funciones para la generación del primers sistema (initrd) -#@version 0.91 -#@warning License: GNU GPLv3+ - - - - -ogExportKernelParameters () -{ - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done -return 0 -} - -ogExportVarEnvironment () -{ - #puntos de accesos al servidor ogprotocol=nfs - export NFSROOTBOOT="/var/lib/tftpboot" - export NFSCLIENTDIR="/opt/opengnsys/client" - export NFSLOGDIR="/opt/opengnsys/log/clients" - export NFSIMGDIR="/opt/opengnsys/images" - #puntos de accesos al servidor ogprotocol=smb - export SMBROOTBOOT="tftpboot" - export SMBCLIENTDIR="ogclient" - export SMBLOGDIR="oglog" - export SMBIMGDIR="ogimages" - - #puntos de montaje local ram o cache - export LOCALCLIENTDIR="/opt/opengnsys" - export LOCALLOGDIR="/opt/opengnsys/log" - export LOCALIMGDIR="/opt/opengnsys/images" - export LOCALROOTBOOT="/opt/og2fs/tftpboot" #punto de montaje del contendor tftpboot - export LOCALROOTIMG="/opt/og2fs/2ndfs" #punto de montaje donde se accede al 2nd FS mediante loop - export LOCALROOTRAM="/opt/og2fs/1stfs" #punto de montaje para unionfs - export LOCALROOTUNION="/opt/og2fs/unionfs" #punto de union entreo LOCALROOTIMG y LOCALROOTRAM - ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES. - #ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd. - #IPV4DDR - #IPV4BROADCAST - #IPV4NETMASK - #IPV4GATEWAY - #DNS0 DNS1 - #HOSTNAME - #ROOTSERVER #ip del servidor pxe que ha servido el kernel - #REPOSERVER=ogrepo -> ogConectROOTSERVER() ip del servidor de images para separar serviicios. - return 0 -} - -ogConfigureRamfs () -{ - mkdir -p $LOCALROOTBOOT - mkdir -p $LOCALROOTIMG - mkdir -p $LOCALROOTRAM - mkdir -p $LOCALROOTUNION -} - -ogLoadNetModule () -{ - #cargando netmodule - if [ -n "$ognetmodule" ] - then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` - fi -} - - -ogPostConfigureFS() -{ - # configuramos el /etc/hostname. - echo $HOSTNAME > /etc/hostname - - #configuramos el /etc/hosts - echo "127.0.0.1 localhost" > /etc/hosts - echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts - - #configuramos el host.conf - echo "order hosts,bind" > /etc/host.conf - echo "multi on" >> /etc/host.conf - - # configuramos el /etc/networks - #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}') - NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ") - echo "default 0.0.0.0" > /etc/networks - echo "loopback 127.0.0.0" >> /etc/networks - echo "link-local 169.254.0.0" >> /etc/networks - echo "localnet $NETIP" >> /etc/networks - #route -} - - - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -return 0 -} - -ogConectROOTSERVER () -{ -local OPTIONS -#params a detectar -if [ $ogrepo ] -then - # Validar si la ip es correcta - ROOTREPO=$ogrepo -else - ROOTREPO=$ROOTSERVER -fi - -case "$ogprotocol" in - cdrom) - echo "blkid /dev/s*" - blkid /dev/s* - echo " mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT " - mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT - ;; - httfs) - echo "protocolo httfs aun no soportado" - ;; - sshfs) - echo "protocolo sshfs aun no soportado" - ;; - smb) - echo Preparando conexión con el Repositorio $ROOTSERVER $ogprotocol - OPTIONS=" -o user=opengnsys,pass=og" - mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS - #&& echo "mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS "; - mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS - #&& echo "mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS " ; - mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS - #&& echo "mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS "; - mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro - #&& echo " mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro "; - ;; - nfs) - echo Preparando conexión con el Repositorio $ROOTSERVER $ogprotocol - nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR && echo "nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR "; - nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR && echo "nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR "; - nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT && echo "nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT "; - nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR && echo "nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR "; - - #mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - #mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m - ;; -esac -} - -ogMerge2ndFile() -{ -if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ] -then - cat /proc/mounts > /tmp/mtab.preunion - if [ "$og2nd" == "img" ] - then - #para acceder al img - losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256 - mount /dev/loop0 $LOCALROOTIMG - else - ## para acceder al squashfs - mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop - fi - for i in etc var lib bin sbin usr root boot; do - unionmount $i - done - cat /tmp/mtab.preunion > /etc/mtab -else - echo "ficher imagen del cliente no encontrado" - return 1 -fi -} - - -unionmount() -{ - tmpdir=/$1 #dir - FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" - UNION_OPT="-o cow -o noinitgroups" - UBIN="unionfs-fuse" - #UPATH="/unionfs" - #LOCALROOTIMG="/opt/og2fs/2ndfs" - #LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs - #LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM - #mkdir -p $LOCALROOTRAM #/unionfs/host - #mkdir -p $LOCALROOTUNION #/unionfs/union - mkdir -p $LOCALROOTRAM$tmpdir - #mount --bind /$tmpdir $LOCALROOTRAM$tmpdir - U1STDIR="${LOCALROOTRAM}${tmpdir}=RW" - U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO" - UNIONDIR=$LOCALROOTUNION$tmpdir - mkdir -p $UNIONDIR - $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR - mount --bind $UNIONDIR $tmpdir -} - - -unionmountOLD() -{ - FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" - UNION_OPT="-o cow -o noinitgroups" - UPATH="/unionfs" - UBIN="unionfs-fuse" - mkdir -p /unionfs/host - mkdir -p /unionfs/union - dir=$1 - mkdir -p /unionfs/host/$dir - #mount --bind /$dir /unionfs/host/$dir - mkdir -p /unionfs/union/$dir - host="/unionfs/host/${dir}=RW" - common="/opt/og2fs/${dir}=RO" - $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir - mount --bind /unionfs/union/$dir /$dir -} -ogconfigure_lo() -{ -# for the portmapper we need localhost -ifconfig lo 127.0.0.1 -#/etc/init.d/portmap start -} - -ogconfigure_networking() -{ -IP=$IPOPTS -# http://paste.ubuntu.com/427631/ Paste from yofel at Tue, 4 May 2010 13:49:56 +0000 - if [ -n "${BOOTIF}" ]; then - # pxelinux sets BOOTIF to a value based on the mac address of the - # network card used to PXE boot, so use this value for DEVICE rather - # than a hard-coded device name from initramfs.conf. this facilitates - # network booting when machines may have multiple network cards. - # pxelinux sets BOOTIF to 01-$mac_address - - # strip off the leading "01-", which isn't part of the mac - # address - temp_mac=${BOOTIF#*-} - - # convert to typical mac address format by replacing "-" with ":" - bootif_mac="" - IFS='-' - for x in $temp_mac ; do - if [ -z "$bootif_mac" ]; then - bootif_mac="$x" - else - bootif_mac="$x:$bootif_mac" - fi - done - unset IFS - - # look for devices with matching mac address, and set DEVICE to - # appropriate value if match is found. - for device in /sys/class/net/* ; do - if [ -f "$device/address" ]; then - current_mac=$(cat "$device/address") - if [ "$bootif_mac" = "$current_mac" ]; then - DEVICE=${device##*/} - break - fi - fi - done - fi - - # networking already configured thus bail out - [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 - - # support ip options see linux sources - # Documentation/filesystems/nfsroot.txt - # Documentation/frv/booting.txt - - for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do - - # The NIC is to be configured if this file does not exist. - # Ip-Config tries to create this file and when it succeds - # creating the file, ipconfig is not run again. - if [ -e /tmp/net-"${DEVICE}".conf ]; then - break; - fi - - case ${IP} in - none|off) - # Do nothing - ;; - ""|on|any) - # Bring up device - echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " - ipconfig -t ${ROUNDTTT} ${DEVICE} - ;; - dhcp|bootp|rarp|both) - echo "Setting $DEVICE with (dhcp) kernel params $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " - ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} - ;; - *) - echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} -d $IP " - ipconfig -t ${ROUNDTTT} -d $IP - - # grab device entry from ip option - NEW_DEVICE=${IP#*:*:*:*:*:*} - if [ "${NEW_DEVICE}" != "${IP}" ]; then - NEW_DEVICE=${NEW_DEVICE%:*} - else - # wrong parse, possibly only a partial string - NEW_DEVICE= - fi - if [ -n "${NEW_DEVICE}" ]; then - DEVICE="${NEW_DEVICE}" - fi - ;; - esac - done - - # source ipconfig output - if [ -n "${DEVICE}" ]; then - # source specific bootdevice - . /tmp/net-${DEVICE}.conf - else - # source any interface as not exaclty specified - . /tmp/net-*.conf - fi -} - - ##################################################################### -# Ask yesno question. -# -# Usage: yesno OPTIONS QUESTION -# -# Options: -# --timeout N Timeout if no input seen in N seconds. -# --default ANS Use ANS as the default answer on timeout or -# if an empty answer is provided. -# -# Exit status is the answer. 0=yes 1=no - -ogYesNo() -{ - local ans - local ok=0 - local timeout=0 - local default - local t - - while [[ "$1" ]] - do - case "$1" in - --default) - shift - default=$1 - if [[ ! "$default" ]]; then error "Missing default value"; fi - t=$(echo $default | tr '[:upper:]' '[:lower:]') - - if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then - error "Illegal default answer: $default" - fi - default=$t - shift - ;; - - --timeout) - shift - timeout=$1 - if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi - #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi - shift - ;; - - -*) - error "Unrecognized option: $1" - ;; - - *) - break - ;; - esac - done - - if [[ $timeout -ne 0 && ! "$default" ]]; then - error "Non-zero timeout requires a default answer" - fi - - if [[ ! "$*" ]]; then error "Missing question"; fi - - while [[ $ok -eq 0 ]] - do - if [[ $timeout -ne 0 ]]; then - if ! read -t $timeout -p "$*" ans; then - ans=$default - else - # Turn off timeout if answer entered. - timeout=0 - if [[ ! "$ans" ]]; then ans=$default; fi - fi - else - read -p "$*" ans - if [[ ! "$ans" ]]; then - ans=$default - else - ans=$(echo $ans | tr '[:upper:]' '[:lower:]') - fi - fi - - if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then - ok=1 - fi - - if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi - done - [[ "$ans" = "y" || "$ans" == "yes" ]] -} - - diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit deleted file mode 100755 index a6c05d5e..00000000 --- a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit +++ /dev/null @@ -1,111 +0,0 @@ -# OpenGnsys oginit -*- shell-script -*- - -#@file oginit -#@brief Guion modificador inicio initrd para OpenGnSys -#@warning -#@version 0.1 - basado en ROOTfs -#@author Antonio J. Doblas Viso. Universidad de Málaga -#@date 2009/00/00 -#@version 0.2 - basado en el instalador de ubunto -#@author Alejandro Castillo -#@author Ramón Gómez -#@author Irina -#@author Antonio Doblas -#@date 2010/00/00 -#@version 0.7 - Generación limpia con mkinitrd, busybox -#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. -#@date 2010/05/24 -#@version 0.8 - Integración con FileSystem externo -#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. -#@date 2010/06/24 -#@version 0.8.1 - UnionFS + squasfs -#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. -#@date 2010/06/29 - -#*/ - - - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - . /scripts/functions - . /scripts/ogfunctions - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N " - [ $? == 0 ] && sh || echo " " - - set -a - log_success_msg "Checking kernel parameters" - ogExportKernelParameters - log_success_msg "Checking Opengnys Environmnet" - ogExportVarEnvironment - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N " - [ $? == 0 ] && sh || echo " " - ogConfigureRamfs - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N " - [ $? == 0 ] && sh || echo " " - ogLoadNetModule - - #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - #run_scripts /scripts/og-premount - #[ "$quiet" != "y" ] && log_end_msg - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N " - [ $? == 0 ] && sh || echo " " - ogconfigure_networking - log_success_msg "config networking" - ogconfigure_lo - log_success_msg "config loopback" - - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N " - [ $? == 0 ] && sh || echo " " - ogGetROOTSERVER && log_success_msg "Get Info from pxe server" - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before conect with og Services : y/N " - [ $? == 0 ] && sh || echo " " - ogConectROOTSERVER && log_success_msg "Conecting with og services" || sh - # ogConectROOTMEDIA - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before merge the Second File System with initrd (First File System) : y/N " - [ $? == 0 ] && sh || echo " " - ogMerge2ndFile && log_success_msg "Merge onto Second File System" - - - #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - #run_scripts /scripts/og-bottom - #[ "$quiet" != "y" ] && log_end_msg - - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N " - [ $? == 0 ] && sh || echo " " - ogPostConfigureFS - setupcon -k - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N " - [ $? == 0 ] && sh || echo " " - -if [ "$oginit" ] -then - exec $oginit -else - exec init -fi - - - - - -} diff --git a/client/ogClient/clientstructure/etc/inittab b/client/ogClient/clientstructure/etc/inittab deleted file mode 100644 index 94c30028..00000000 --- a/client/ogClient/clientstructure/etc/inittab +++ /dev/null @@ -1,14 +0,0 @@ -# This is run first except when booting in single-user mode -# -#::sysinit:/opt/opengnsys/etc/preinit/defaultTESTING.sh -# /bin/sh invocations on selected ttys -# -# Start an "askfirst" shell on the console (whatever that may be) -#::askfirst:/bin/sh -# Start an "askfirst" shell on /dev/tty2-4 -#tty1::respawn:/sbin/getty 38400 tty1 -tty1::respawn:/opt/opengnsys/etc/preinit/defaultTESTING.sh -tty2::respawn:/sbin/getty 38400 tty2 -tty3::respawn:/sbin/getty 38400 tty3 -tty4::respawn:/sbin/getty 38400 tty4 -tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf b/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf deleted file mode 100644 index 8b047e4e..00000000 --- a/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf +++ /dev/null @@ -1,30 +0,0 @@ -# Framebuffer drivers are generally buggy and poorly-supported, and cause -# suspend failures, kernel panics and general mayhem. For this reason we -# never load them automatically. -blacklist aty128fb -blacklist atyfb -#blacklist radeonfb -blacklist cirrusfb -blacklist cyber2000fb -blacklist cyblafb -blacklist gx1fb -blacklist hgafb -blacklist i810fb -blacklist intelfb -blacklist kyrofb -blacklist lxfb -blacklist matroxfb_base -blacklist neofb -blacklist nvidiafb -blacklist pm2fb -blacklist rivafb -blacklist s1d13xxxfb -blacklist savagefb -blacklist sisfb -blacklist sstfb -blacklist tdfxfb -blacklist tridentfb -#blacklist vesafb -blacklist vfb -blacklist viafb -blacklist vt8623fb diff --git a/client/ogClient/clientstructure/etc/mtab b/client/ogClient/clientstructure/etc/mtab deleted file mode 100644 index e69de29b..00000000 diff --git a/client/ogClient/clientstructure/etc/network/interfaces b/client/ogClient/clientstructure/etc/network/interfaces deleted file mode 100644 index dbe43582..00000000 --- a/client/ogClient/clientstructure/etc/network/interfaces +++ /dev/null @@ -1,4 +0,0 @@ -auto lo -iface lo inet loopback -auto eth0 -iface eth0 inet dhcp \ No newline at end of file diff --git a/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh b/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh deleted file mode 100755 index 0bf46a3e..00000000 --- a/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash -#/** -#@file loadenviron.sh -#@brief Script de carga de la API de funciones de OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - -# FIXME Temporal -export LANG="${LANG:-es_ES}" - -#/// Directorios del projecto OpenGNSys. -export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" -if [ -d $OPENGNSYS ]; then - export OGBIN=$OPENGNSYS/bin - export OGETC=$OPENGNSYS/etc - export OGLIB=$OPENGNSYS/lib - export OGAPI=$OGLIB/engine/bin - export OGSCRIPTS=$OPENGNSYS/scripts - export OGIMG=$OPENGNSYS/images - export OGCAC=$OPENGNSYS/cache - export OGLOG=$OPENGNSYS/log - -# export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH - # export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH - - #/// Cargar fichero de idioma. - LANGFILE=$OGETC/lang.$LANG.conf - if [ -f $LANGFILE ]; then - source $LANGFILE - #for i in $(grep "^[a-zA-Z].*=" $LANGFILE | cut -f1 -d=); do - for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do - export $i - done - fi - #/// Cargar API de funciones. - echo "$MSG_LOADAPI" - for i in $OGAPI/*.lib; do - source $i - done - for i in $(typeset -F | cut -f3 -d" "); do - export -f $i - done - # Carga de las API testing - if [ "$engine" = "testing" ] - then - for i in $OGAPI/*.testing; do - source $i - done - fi - # Añadir dependencia de arquitectura - ARCH=$(ogGetArch) - if [ -n "$ARCH" ]; then - # export PATH=$OGBIN/$ARCH:$PATH - # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin - export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH - fi - # Fichero de registros. - export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" - # FIXME Pruebas para grupos de ordenadores - #export OGGROUP=$(ogGetGroup) - export OGGROUP=aula3 -fi - -#/// Declaración de códigos de error. -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. - - diff --git a/client/ogClient/clientstructure/etc/ssh/ssh_config b/client/ogClient/clientstructure/etc/ssh/ssh_config deleted file mode 100644 index 7f9319dc..00000000 --- a/client/ogClient/clientstructure/etc/ssh/ssh_config +++ /dev/null @@ -1,56 +0,0 @@ - -# This is the ssh client system-wide configuration file. See -# ssh_config(5) for more information. This file provides defaults for -# users, and the values can be changed in per-user configuration files -# or on the command line. - -# Configuration data is parsed as follows: -# 1. command line options -# 2. user-specific file -# 3. system-wide file -# Any configuration value is only changed the first time it is set. -# Thus, host-specific definitions should be at the beginning of the -# configuration file, and defaults at the end. - -# Site-wide defaults for some commonly used options. For a comprehensive -# list of available options, their meanings and defaults, please see the -# ssh_config(5) man page. - -Host * -# ForwardAgent no -# ForwardX11 no -# ForwardX11Trusted yes -# RhostsRSAAuthentication no -# RSAAuthentication yes -# PasswordAuthentication yes - HostbasedAuthentication no -# GSSAPIAuthentication no -# GSSAPIDelegateCredentials no -# GSSAPIKeyExchange no -# GSSAPITrustDNS no -# BatchMode no -# CheckHostIP yes -# AddressFamily any -# ConnectTimeout 0 -# StrictHostKeyChecking ask -# IdentityFile ~/.ssh/identity -# IdentityFile ~/.ssh/id_rsa -# IdentityFile ~/.ssh/id_dsa -# Port 22 -# Protocol 2,1 -# Cipher 3des -# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc -# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 -# EscapeChar ~ -# Tunnel no -# TunnelDevice any:any -# PermitLocalCommand no -# VisualHostKey no - SendEnv LANG LC_* -# HashKnownHosts yes - GSSAPIAuthentication yes - GSSAPIDelegateCredentials no - - StrictHostKeyChecking no - UserKnownHostsFile=/dev/null - diff --git a/client/ogClient/clientstructure/etc/ssh/sshd_config b/client/ogClient/clientstructure/etc/ssh/sshd_config deleted file mode 100644 index ea0303b3..00000000 --- a/client/ogClient/clientstructure/etc/ssh/sshd_config +++ /dev/null @@ -1,86 +0,0 @@ -# Package generated configuration file -# See the sshd_config(5) manpage for details - -# What ports, IPs and protocols we listen for -Port 22 -# Use these options to restrict which interfaces/protocols sshd will bind to -#ListenAddress :: -#ListenAddress 0.0.0.0 -Protocol 2 -# HostKeys for protocol version 2 -HostKey /etc/ssh/ssh_host_rsa_key -HostKey /etc/ssh/ssh_host_dsa_key -#Privilege Separation is turned on for security -UsePrivilegeSeparation yes - -# Lifetime and size of ephemeral version 1 server key -KeyRegenerationInterval 3600 -ServerKeyBits 768 - -# Logging -SyslogFacility AUTH -LogLevel INFO - -# Authentication: -LoginGraceTime 120 -PermitRootLogin yes -StrictModes yes - -RSAAuthentication yes -PubkeyAuthentication yes -#AuthorizedKeysFile %h/.ssh/authorized_keys - -# Don't read the user's ~/.rhosts and ~/.shosts files -IgnoreRhosts yes -# For this to work you will also need host keys in /etc/ssh_known_hosts -RhostsRSAAuthentication no -# similar for protocol version 2 -HostbasedAuthentication no -# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication -#IgnoreUserKnownHosts yes - -# To enable empty passwords, change to yes (NOT RECOMMENDED) -PermitEmptyPasswords no - -# Change to yes to enable challenge-response passwords (beware issues with -# some PAM modules and threads) -ChallengeResponseAuthentication no - -# Change to no to disable tunnelled clear text passwords -#PasswordAuthentication yes - -# Kerberos options -#KerberosAuthentication no -#KerberosGetAFSToken no -#KerberosOrLocalPasswd yes -#KerberosTicketCleanup yes - -# GSSAPI options -#GSSAPIAuthentication no -#GSSAPICleanupCredentials yes - -X11Forwarding yes -X11DisplayOffset 10 -PrintMotd no -PrintLastLog yes -TCPKeepAlive yes -#UseLogin no - -#MaxStartups 10:30:60 -#Banner /etc/issue.net - -# Allow client to pass locale environment variables -AcceptEnv LANG LC_* - -Subsystem sftp /usr/lib/openssh/sftp-server - -# Set this to 'yes' to enable PAM authentication, account processing, -# and session processing. If this is enabled, PAM authentication will -# be allowed through the ChallengeResponseAuthentication and -# PasswordAuthentication. Depending on your PAM configuration, -# PAM authentication via ChallengeResponseAuthentication may bypass -# the setting of "PermitRootLogin without-password". -# If you just want the PAM account and session checks to run without -# PAM authentication, then enable this but set PasswordAuthentication -# and ChallengeResponseAuthentication to 'no'. -UsePAM yes diff --git a/client/ogClient/clientstructure/root/CompileSoftware.sh b/client/ogClient/clientstructure/root/CompileSoftware.sh deleted file mode 100755 index 1a9b854a..00000000 --- a/client/ogClient/clientstructure/root/CompileSoftware.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -################################################################ -##################### SOFTWARE ##################### -################################################################ -export LANGUAGE=C -export LC_ALL=C -export LANG=C - -#dpkg-divert --local --rename --add /sbin/initctl -#ln -s /bin/true /sbin/initctl - -apt-get -y update -# software to compile code -apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk - -source /opt/opengnsys/lib/engine/bin/ToolsGNU.c - -ctorrent install -udpcast install -#ntfs-3g install -ms-sys install - -wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh -gdebi -n partclone_0.2.16_i386.deb - - cd /tmp - wget http://damien.guibouret.free.fr/savepart.zip - unzip savepart.zip -d /sbin/ - - diff --git a/client/ogClient/clientstructure/root/ConfFS.sh b/client/ogClient/clientstructure/root/ConfFS.sh deleted file mode 100755 index 3e0f4b5c..00000000 --- a/client/ogClient/clientstructure/root/ConfFS.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -dpkg-divert --local --rename --add /sbin/initctl -ln -s /bin/true /sbin/initctl -#mv /etc/fstab /etc/fstab.original 2>/dev/null -#mv /etc/mtab /etc/mtab.original 2>/dev/null - -#TODO: fichero etc/hosts -#TODO: fichero etc/resolv.conf -echo "ogClient" > /etc/hostname - -#export PASSROOT=og -#dpkg-reconfigure passwd -#echo "root:$PASSROOT" | chpasswd - - -#for i in pts/0 pts/1 pts/2 pts/3 do -# -# -#done -#TODO: introducir mas consoluas para el acceso como root. -echo "pts/0" >> /etc/securetty -echo "pts/1" >> /etc/securetty -echo "pts/2" >> /etc/securetty -echo "pts/3" >> /etc/securetty \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh b/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh deleted file mode 100755 index eaeb475b..00000000 --- a/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null -#OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null -export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') -export OSRELEASE=$(uname -a | awk '{print $3}') -uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 -export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" - - - -cd /usr/lib/initramfs-tools/bin/ -rm * -cp /bin/busybox ./ -cd /tmp/ -mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE -cp /boot/vmlinuz-$OSRELEASE /tmp \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/InstallSoftware.sh b/client/ogClient/clientstructure/root/InstallSoftware.sh deleted file mode 100644 index 1d316eec..00000000 --- a/client/ogClient/clientstructure/root/InstallSoftware.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -################################################################ -##################### SOFTWARE ##################### -################################################################ -export LANGUAGE=C -export LC_ALL=C -export LANG=C - - -dpkg-divert --local --rename --add /sbin/initctl -ln -s /bin/true /sbin/initctl - -apt-get clean -apt-get -y update - - -# software system -apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE wget dialog man-db htop fbset gdebi-core busybox-static - -apt-get -y --force-yes install console-data locales - -# sofware networking -apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 unionfs-fuse open-iscsi nmap tcpdump arping dnsutils - -apt-get clean -# software services -apt-get -y --force-yes install openssh-server bittornado trickle iptraf screen schroot grub - -# software disk and filesystem -apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted ntfs-3g dosfstools -apt-get -y --force-yes install dmraid dmsetup lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools -apt-get -y --force-yes install btrfs-tools hfsplus hfsprogs hfsutils - -# software cloning -apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools -apt-get -y --force-yes install mbuffer - - -apt-get clean -## software postconf -apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk - -# software compressor -apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop pigz pbzip2 lbzip2 rzip p7zip-full unzip - -apt-get -y --force-yes remove busybox -apt-get -y --force-yes install busybox-static bash-static -apt-get clean -#apt-get -y --force-yes xorg-dev xorg lxde roxterm -# -#################################################################### -###################### Reconfigurando paquetes ###################### -################################################################### - - -#dpkg-reconfigure console-data -#dpkg-reconfigure console-setup -#dpkg-reconfigure locales -apt-get clean -##TODO################# Borrar algunos binarios del mkinitramfs - - diff --git a/client/ogClient/clientstructure/root/ReconfigureLocales.sh b/client/ogClient/clientstructure/root/ReconfigureLocales.sh deleted file mode 100755 index 5480d141..00000000 --- a/client/ogClient/clientstructure/root/ReconfigureLocales.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -dpkg-reconfigure console-data -dpkg-reconfigure console-setup -dpkg-reconfigure locales \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/generateSshKeysClient.sh b/client/ogClient/clientstructure/root/generateSshKeysClient.sh deleted file mode 100644 index 9857ad40..00000000 --- a/client/ogClient/clientstructure/root/generateSshKeysClient.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -echo "comprobando directorio .ssh del root" -if [ ! -d /root/.ssh ] -then - echo "creando directorio .ssh 600" - mkdir -p /root/.ssh - chmod 700 /root/.ssh -fi - - -echo "comprobando el fichero authorized_keys .ssh del root" -if [ ! -f /root/.ssh/authorized_keys ] -then - echo "creando el fichero authorized_keys" - touch /root/.ssh/authorized_keys - chmod 600 /root/.ssh/authorized_keys -fi - -ssh-keygen -q -f /root/.ssh/id_rsa -N "" -cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys - -## TODO: exportamos la publica a los repos -cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/importSshKeys.sh b/client/ogClient/clientstructure/root/importSshKeys.sh deleted file mode 100755 index 17a797f8..00000000 --- a/client/ogClient/clientstructure/root/importSshKeys.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -echo "comprobando directorio .ssh del root" -if [ ! -d /root/.ssh ] -then - echo "creando directorio .ssh 600" - mkdir -p /root/.ssh - chmod 700 /root/.ssh -fi -echo "creando el fichero authorized_keys" -touch /root/.ssh/authorized_keys -chmod 600 /root/.ssh/authorized_keys - -echo "importando la clave publica del servidor OG" -cat /tmp/id_rsa.pub - -[ -f /tmp/id_rsa.pub ] && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys || echo "no key publica og" - \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/qemu.sh b/client/ogClient/clientstructure/root/qemu.sh deleted file mode 100755 index c5a93cd9..00000000 --- a/client/ogClient/clientstructure/root/qemu.sh +++ /dev/null @@ -1,9 +0,0 @@ -#/bin/bash - -mount -o rw,remount / -mount proc /proc -t proc -export PATH=$PATH dpkg -i *.deb -modprobe 8139too -modprobe 8139cp -dhclient -/etc/init.d/ssh restart \ No newline at end of file diff --git a/client/ogClient/clientstructure/var/lib/locales/supported.d/local b/client/ogClient/clientstructure/var/lib/locales/supported.d/local deleted file mode 100644 index be3f2a41..00000000 --- a/client/ogClient/clientstructure/var/lib/locales/supported.d/local +++ /dev/null @@ -1,5 +0,0 @@ -es_ES ISO-8859-1 -es_ES@euro ISO-8859-15 -es_ES.UTF-8 UTF-8 -es_ES.UTF-8@euro UTF-8 -en_US.UTF-8 UTF-8 \ No newline at end of file -- cgit v1.2.3-18-g5258 From 931b78d12ebb98bf85e6577e637b813ee661a30c Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:55:34 +0000 Subject: git-svn-id: https://opengnsys.es/svn/branches/version1.0@1762 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/boot-tools/INSTALL.es.txt | 46 - .../clientstructure/etc/apt/sources.list.debian | 4 - .../clientstructure/etc/apt/sources.list.ubuntu | 56 -- client/boot-tools/clientstructure/etc/environment | 4 - client/boot-tools/clientstructure/etc/fstab | 13 - .../etc/initramfs-tools/hooks/oghooks | 58 -- .../clientstructure/etc/initramfs-tools/modules | 14 - .../etc/initramfs-tools/scripts/ogfunctions | 436 ---------- .../etc/initramfs-tools/scripts/oginit | 111 --- client/boot-tools/clientstructure/etc/inittab | 14 - .../etc/modprobe.d/blacklist-framebuffer.conf | 30 - client/boot-tools/clientstructure/etc/mtab | 0 .../clientstructure/etc/network/interfaces | 4 - .../clientstructure/etc/profile.d/loadenviron.sh | 84 -- .../boot-tools/clientstructure/etc/ssh/ssh_config | 56 -- .../boot-tools/clientstructure/etc/ssh/sshd_config | 86 -- .../clientstructure/root/CompileSoftware.sh | 30 - client/boot-tools/clientstructure/root/ConfFS.sh | 24 - .../clientstructure/root/GenerateInitrd.generic.sh | 16 - .../clientstructure/root/InstallSoftware.sh | 62 -- .../clientstructure/root/ReconfigureLocales.sh | 4 - .../clientstructure/root/generateSshKeysClient.sh | 23 - .../clientstructure/root/importSshKeys.sh | 17 - client/boot-tools/clientstructure/root/qemu.sh | 9 - .../var/lib/locales/supported.d/local | 5 - client/boot-tools/kernelParameterOG.es.txt | 29 - client/boot-tools/ogClientGeneratorV2.sh | 166 ---- client/boot-tools/ogClientManager.lib | 608 ------------- client/boot-tools/ogInstaller.lib | 958 --------------------- 29 files changed, 2967 deletions(-) delete mode 100644 client/boot-tools/INSTALL.es.txt delete mode 100644 client/boot-tools/clientstructure/etc/apt/sources.list.debian delete mode 100644 client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu delete mode 100644 client/boot-tools/clientstructure/etc/environment delete mode 100644 client/boot-tools/clientstructure/etc/fstab delete mode 100755 client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks delete mode 100644 client/boot-tools/clientstructure/etc/initramfs-tools/modules delete mode 100644 client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions delete mode 100755 client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit delete mode 100644 client/boot-tools/clientstructure/etc/inittab delete mode 100644 client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf delete mode 100644 client/boot-tools/clientstructure/etc/mtab delete mode 100644 client/boot-tools/clientstructure/etc/network/interfaces delete mode 100755 client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh delete mode 100644 client/boot-tools/clientstructure/etc/ssh/ssh_config delete mode 100644 client/boot-tools/clientstructure/etc/ssh/sshd_config delete mode 100755 client/boot-tools/clientstructure/root/CompileSoftware.sh delete mode 100755 client/boot-tools/clientstructure/root/ConfFS.sh delete mode 100755 client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh delete mode 100644 client/boot-tools/clientstructure/root/InstallSoftware.sh delete mode 100755 client/boot-tools/clientstructure/root/ReconfigureLocales.sh delete mode 100644 client/boot-tools/clientstructure/root/generateSshKeysClient.sh delete mode 100755 client/boot-tools/clientstructure/root/importSshKeys.sh delete mode 100755 client/boot-tools/clientstructure/root/qemu.sh delete mode 100644 client/boot-tools/clientstructure/var/lib/locales/supported.d/local delete mode 100644 client/boot-tools/kernelParameterOG.es.txt delete mode 100755 client/boot-tools/ogClientGeneratorV2.sh delete mode 100644 client/boot-tools/ogClientManager.lib delete mode 100644 client/boot-tools/ogInstaller.lib diff --git a/client/boot-tools/INSTALL.es.txt b/client/boot-tools/INSTALL.es.txt deleted file mode 100644 index b357595b..00000000 --- a/client/boot-tools/INSTALL.es.txt +++ /dev/null @@ -1,46 +0,0 @@ -########## INSTALACION ################################## - -### NOTA principal: utilizar el usuario root para este proceso #### -1. Comprobar la conexión a internet, sobre todo si usas proxy. El hecho de que te funcione apt-get no significa que tengas el proxy configurado. -1. Descargar del subversion la estrucutura del cliente. - -# reubicacion al trunk/client/boot - -Proceso: -0. Si ya tenemos un /var/lib/tftpboot/ogclient lo renombramos por si acaso. -1. Descargar del subversion la rama ogClient. -3. Ejecutar el instalador: - -mv /opt/opengnsys/tftpboot/ogclient/ /opt/opengnsys/tftpboot/ogclientTrunk; -svn checkout http://www.opengnsys.es/svn/branches/ogClient /tmp/opengnsys_installer/opengnsys/installer/ogClient; -svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/shared/ /tmp/opengnsys_installer/opengnsys/client/shared; -svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/engine/ /tmp/opengnsys_installer/opengnsys/client/engine; -find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null; -/tmp/opengnsys_installer/opengnsys/installer/ogClient/ogClientGeneratorV2.sh; - - - -NOTA: el proceso tardará un buen rato, dependiendo de nuestras circustancias. -NOTA: crea un kernel, initrd, ogclient.img en /var/lib/tftpboot/ogclient -NOTA: el ogclient.img es el Segundo sistema de archivos en formato fichero bloques emulando a disco con partición primaria. -NOTA: el ogclient.sqfs es el Segundo sistema de archivos (partición primaria del img) en formato squashfs. Se usará con el parámetro og2nd=sqfs -NOTA: los logs de instalación estarán en /tmp/opengnsys_installation.log - - - NOTA A RECORDAR: - NOTA ACLARATORIA: $OGSCRITPS(reboot,poweroff) antes de /sbin/{reboot,poweroff} - - ################## Descripcion de la estrucutra de ogClient. - los directorios old y serverstrucutre son antiguos, pero no borrarlos. - INSTALL.es.txt : este mismo archivo. - ogInstaller.lib : son todas las funciones de instalacion del instalador oficial de opengnys. Algunas de ellas son utilizadas. Crear ticket para separar las funciones de iinstalacion del proceso de instalacion. - ogClientManager.lib: son las funicones especificas para la instalacion del ogclient. estan escritas en orden de que son llamadas por el instalador, (ogClientGeneratorV2.sh) - ogClientGeneratorV2.sh. Es el guión de ejecución del isntalador. - - - - ############ ERROR PRINCIPAL 2 ####### - necesita que en el equipo donde se ejecuta el scripts, disponga de la estrucutra /opt/opengnsys/client - sobre todo los lib/fonts, el lib/pci.ids el bin/browser y el bin/ogAdmClient - - diff --git a/client/boot-tools/clientstructure/etc/apt/sources.list.debian b/client/boot-tools/clientstructure/etc/apt/sources.list.debian deleted file mode 100644 index 495e48d4..00000000 --- a/client/boot-tools/clientstructure/etc/apt/sources.list.debian +++ /dev/null @@ -1,4 +0,0 @@ -deb http://ftp.us.debian.org/debian lenny main contrib non-free - -deb http://security.debian.org/ lenny/updates main contrib non-free -deb-src http://security.debian.org/ lenny/updates main contrib non-free diff --git a/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu b/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu deleted file mode 100644 index 29348ccc..00000000 --- a/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu +++ /dev/null @@ -1,56 +0,0 @@ -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted -## Major bug fix updates produced after the final release of the -## distribution. -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team. Also, please note that software in universe WILL NOT receive any -## review or updates from the Ubuntu security team. -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe - -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team, and may not be under a free licence. Please satisfy yourself as to -## your rights to use the software. Also, please note that software in -## multiverse WILL NOT receive any review or updates from the Ubuntu -## security team. -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse - -## Uncomment the following two lines to add software from the 'backports' -## repository. -## N.B. software from this repository may not have been tested as -## extensively as that contained in the main release, although it includes -## newer versions of some applications which may provide useful features. -## Also, please note that software in backports WILL NOT receive any review -## or updates from the Ubuntu security team. -# deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse -# deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse - -## Uncomment the following two lines to add software from Canonical's -## 'partner' repository. -## This software is not part of Ubuntu, but is offered by Canonical and the -## respective vendors as a service to Ubuntu users. -# deb http://archive.canonical.com/ubuntu OSCODENAME partner -# deb-src http://archive.canonical.com/ubuntu OSCODENAME partner - - -deb http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted -deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted -deb http://security.ubuntu.com/ubuntu OSCODENAME-security universe -deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security universe -deb http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse -deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse - - -deb http://archive.ubuntu.com/ubuntu OSCODENAME main -deb http://free.nchc.org.tw/drbl-core drbl stable -deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe multiverse -deb http://ppa.launchpad.net/freenx-team/ubuntu/ OSCODENAME main -deb http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main -deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main diff --git a/client/boot-tools/clientstructure/etc/environment b/client/boot-tools/clientstructure/etc/environment deleted file mode 100644 index bb529d99..00000000 --- a/client/boot-tools/clientstructure/etc/environment +++ /dev/null @@ -1,4 +0,0 @@ -LC_TYPE=es_ES@euro -LC_ALL=es_ES@euro -LANG=es_ES@euro -LANGUAGE=es_ES@euro \ No newline at end of file diff --git a/client/boot-tools/clientstructure/etc/fstab b/client/boot-tools/clientstructure/etc/fstab deleted file mode 100644 index d7473df4..00000000 --- a/client/boot-tools/clientstructure/etc/fstab +++ /dev/null @@ -1,13 +0,0 @@ -# /etc/fstab: static file system information. -# -# Use 'blkid -o value -s UUID' to print the universally unique identifier -# for a device; this may be used with UUID= as a more robust way to name -# devices that works even if disks are added and removed. See fstab(5). -# -# -proc /proc proc 0 0 -/dev/sda1 ext3 errors=remount-ro 0 1 - - - - diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks b/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks deleted file mode 100755 index 15fd01cc..00000000 --- a/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - -#@file oghooks -#@brief configuración initrd para OpenGnSys -#@warning -#@version 0.9 - estrucura opengnsys, bash-static, unionfs, atheros -#@author Antonio J. Doblas Viso. -#@date 2010/05/24 -#*/ - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; -mkdir -p ${DESTDIR}/ogboot; -mkdir -p ${DESTDIR}/boot; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash -copy_exec /usr/bin/unionfs-fuse -copy_exec /sbin/mount.cifs - - -# Insert OpenGnsys Engine -#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - -rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl* -manual_add_modules cifs -manual_add_modules smbfs -manual_add_modules atl1e -manual_add_modules squashfs - - diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/modules b/client/boot-tools/clientstructure/etc/initramfs-tools/modules deleted file mode 100644 index 8bac1d4b..00000000 --- a/client/boot-tools/clientstructure/etc/initramfs-tools/modules +++ /dev/null @@ -1,14 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -vga16b -vesafb -fbcon - diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions deleted file mode 100644 index adce44fd..00000000 --- a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions +++ /dev/null @@ -1,436 +0,0 @@ -#@file ogfunctions.lib -#@brief Librería o clase para la generación del 1erFS -#@class client -#@brief Funciones para la generación del primers sistema (initrd) -#@version 0.91 -#@warning License: GNU GPLv3+ - - - - -ogExportKernelParameters () -{ - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done -return 0 -} - -ogExportVarEnvironment () -{ - #puntos de accesos al servidor ogprotocol=nfs - export NFSROOTBOOT="/var/lib/tftpboot" - export NFSCLIENTDIR="/opt/opengnsys/client" - export NFSLOGDIR="/opt/opengnsys/log/clients" - export NFSIMGDIR="/opt/opengnsys/images" - #puntos de accesos al servidor ogprotocol=smb - export SMBROOTBOOT="tftpboot" - export SMBCLIENTDIR="ogclient" - export SMBLOGDIR="oglog" - export SMBIMGDIR="ogimages" - - #puntos de montaje local ram o cache - export LOCALCLIENTDIR="/opt/opengnsys" - export LOCALLOGDIR="/opt/opengnsys/log" - export LOCALIMGDIR="/opt/opengnsys/images" - export LOCALROOTBOOT="/opt/og2fs/tftpboot" #punto de montaje del contendor tftpboot - export LOCALROOTIMG="/opt/og2fs/2ndfs" #punto de montaje donde se accede al 2nd FS mediante loop - export LOCALROOTRAM="/opt/og2fs/1stfs" #punto de montaje para unionfs - export LOCALROOTUNION="/opt/og2fs/unionfs" #punto de union entreo LOCALROOTIMG y LOCALROOTRAM - ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES. - #ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd. - #IPV4DDR - #IPV4BROADCAST - #IPV4NETMASK - #IPV4GATEWAY - #DNS0 DNS1 - #HOSTNAME - #ROOTSERVER #ip del servidor pxe que ha servido el kernel - #REPOSERVER=ogrepo -> ogConectROOTSERVER() ip del servidor de images para separar serviicios. - return 0 -} - -ogConfigureRamfs () -{ - mkdir -p $LOCALROOTBOOT - mkdir -p $LOCALROOTIMG - mkdir -p $LOCALROOTRAM - mkdir -p $LOCALROOTUNION -} - -ogLoadNetModule () -{ - #cargando netmodule - if [ -n "$ognetmodule" ] - then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` - fi -} - - -ogPostConfigureFS() -{ - # configuramos el /etc/hostname. - echo $HOSTNAME > /etc/hostname - - #configuramos el /etc/hosts - echo "127.0.0.1 localhost" > /etc/hosts - echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts - - #configuramos el host.conf - echo "order hosts,bind" > /etc/host.conf - echo "multi on" >> /etc/host.conf - - # configuramos el /etc/networks - #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}') - NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ") - echo "default 0.0.0.0" > /etc/networks - echo "loopback 127.0.0.0" >> /etc/networks - echo "link-local 169.254.0.0" >> /etc/networks - echo "localnet $NETIP" >> /etc/networks - #route -} - - - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -return 0 -} - -ogConectROOTSERVER () -{ -local OPTIONS -#params a detectar -if [ $ogrepo ] -then - # Validar si la ip es correcta - ROOTREPO=$ogrepo -else - ROOTREPO=$ROOTSERVER -fi - -case "$ogprotocol" in - cdrom) - echo "blkid /dev/s*" - blkid /dev/s* - echo " mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT " - mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT - ;; - httfs) - echo "protocolo httfs aun no soportado" - ;; - sshfs) - echo "protocolo sshfs aun no soportado" - ;; - smb) - echo Preparando conexión con el Repositorio $ROOTSERVER $ogprotocol - OPTIONS=" -o user=opengnsys,pass=og" - mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS - #&& echo "mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS "; - mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS - #&& echo "mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS " ; - mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS - #&& echo "mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS "; - mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro - #&& echo " mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro "; - ;; - nfs) - echo Preparando conexión con el Repositorio $ROOTSERVER $ogprotocol - nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR && echo "nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR "; - nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR && echo "nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR "; - nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT && echo "nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT "; - nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR && echo "nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR "; - - #mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - #mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m - ;; -esac -} - -ogMerge2ndFile() -{ -if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ] -then - cat /proc/mounts > /tmp/mtab.preunion - if [ "$og2nd" == "img" ] - then - #para acceder al img - losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256 - mount /dev/loop0 $LOCALROOTIMG - else - ## para acceder al squashfs - mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop - fi - for i in etc var lib bin sbin usr root boot; do - unionmount $i - done - cat /tmp/mtab.preunion > /etc/mtab -else - echo "ficher imagen del cliente no encontrado" - return 1 -fi -} - - -unionmount() -{ - tmpdir=/$1 #dir - FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" - UNION_OPT="-o cow -o noinitgroups" - UBIN="unionfs-fuse" - #UPATH="/unionfs" - #LOCALROOTIMG="/opt/og2fs/2ndfs" - #LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs - #LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM - #mkdir -p $LOCALROOTRAM #/unionfs/host - #mkdir -p $LOCALROOTUNION #/unionfs/union - mkdir -p $LOCALROOTRAM$tmpdir - #mount --bind /$tmpdir $LOCALROOTRAM$tmpdir - U1STDIR="${LOCALROOTRAM}${tmpdir}=RW" - U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO" - UNIONDIR=$LOCALROOTUNION$tmpdir - mkdir -p $UNIONDIR - $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR - mount --bind $UNIONDIR $tmpdir -} - - -unionmountOLD() -{ - FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" - UNION_OPT="-o cow -o noinitgroups" - UPATH="/unionfs" - UBIN="unionfs-fuse" - mkdir -p /unionfs/host - mkdir -p /unionfs/union - dir=$1 - mkdir -p /unionfs/host/$dir - #mount --bind /$dir /unionfs/host/$dir - mkdir -p /unionfs/union/$dir - host="/unionfs/host/${dir}=RW" - common="/opt/og2fs/${dir}=RO" - $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir - mount --bind /unionfs/union/$dir /$dir -} -ogconfigure_lo() -{ -# for the portmapper we need localhost -ifconfig lo 127.0.0.1 -#/etc/init.d/portmap start -} - -ogconfigure_networking() -{ -IP=$IPOPTS -# http://paste.ubuntu.com/427631/ Paste from yofel at Tue, 4 May 2010 13:49:56 +0000 - if [ -n "${BOOTIF}" ]; then - # pxelinux sets BOOTIF to a value based on the mac address of the - # network card used to PXE boot, so use this value for DEVICE rather - # than a hard-coded device name from initramfs.conf. this facilitates - # network booting when machines may have multiple network cards. - # pxelinux sets BOOTIF to 01-$mac_address - - # strip off the leading "01-", which isn't part of the mac - # address - temp_mac=${BOOTIF#*-} - - # convert to typical mac address format by replacing "-" with ":" - bootif_mac="" - IFS='-' - for x in $temp_mac ; do - if [ -z "$bootif_mac" ]; then - bootif_mac="$x" - else - bootif_mac="$x:$bootif_mac" - fi - done - unset IFS - - # look for devices with matching mac address, and set DEVICE to - # appropriate value if match is found. - for device in /sys/class/net/* ; do - if [ -f "$device/address" ]; then - current_mac=$(cat "$device/address") - if [ "$bootif_mac" = "$current_mac" ]; then - DEVICE=${device##*/} - break - fi - fi - done - fi - - # networking already configured thus bail out - [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 - - # support ip options see linux sources - # Documentation/filesystems/nfsroot.txt - # Documentation/frv/booting.txt - - for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do - - # The NIC is to be configured if this file does not exist. - # Ip-Config tries to create this file and when it succeds - # creating the file, ipconfig is not run again. - if [ -e /tmp/net-"${DEVICE}".conf ]; then - break; - fi - - case ${IP} in - none|off) - # Do nothing - ;; - ""|on|any) - # Bring up device - echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " - ipconfig -t ${ROUNDTTT} ${DEVICE} - ;; - dhcp|bootp|rarp|both) - echo "Setting $DEVICE with (dhcp) kernel params $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " - ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} - ;; - *) - echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} -d $IP " - ipconfig -t ${ROUNDTTT} -d $IP - - # grab device entry from ip option - NEW_DEVICE=${IP#*:*:*:*:*:*} - if [ "${NEW_DEVICE}" != "${IP}" ]; then - NEW_DEVICE=${NEW_DEVICE%:*} - else - # wrong parse, possibly only a partial string - NEW_DEVICE= - fi - if [ -n "${NEW_DEVICE}" ]; then - DEVICE="${NEW_DEVICE}" - fi - ;; - esac - done - - # source ipconfig output - if [ -n "${DEVICE}" ]; then - # source specific bootdevice - . /tmp/net-${DEVICE}.conf - else - # source any interface as not exaclty specified - . /tmp/net-*.conf - fi -} - - ##################################################################### -# Ask yesno question. -# -# Usage: yesno OPTIONS QUESTION -# -# Options: -# --timeout N Timeout if no input seen in N seconds. -# --default ANS Use ANS as the default answer on timeout or -# if an empty answer is provided. -# -# Exit status is the answer. 0=yes 1=no - -ogYesNo() -{ - local ans - local ok=0 - local timeout=0 - local default - local t - - while [[ "$1" ]] - do - case "$1" in - --default) - shift - default=$1 - if [[ ! "$default" ]]; then error "Missing default value"; fi - t=$(echo $default | tr '[:upper:]' '[:lower:]') - - if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then - error "Illegal default answer: $default" - fi - default=$t - shift - ;; - - --timeout) - shift - timeout=$1 - if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi - #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi - shift - ;; - - -*) - error "Unrecognized option: $1" - ;; - - *) - break - ;; - esac - done - - if [[ $timeout -ne 0 && ! "$default" ]]; then - error "Non-zero timeout requires a default answer" - fi - - if [[ ! "$*" ]]; then error "Missing question"; fi - - while [[ $ok -eq 0 ]] - do - if [[ $timeout -ne 0 ]]; then - if ! read -t $timeout -p "$*" ans; then - ans=$default - else - # Turn off timeout if answer entered. - timeout=0 - if [[ ! "$ans" ]]; then ans=$default; fi - fi - else - read -p "$*" ans - if [[ ! "$ans" ]]; then - ans=$default - else - ans=$(echo $ans | tr '[:upper:]' '[:lower:]') - fi - fi - - if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then - ok=1 - fi - - if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi - done - [[ "$ans" = "y" || "$ans" == "yes" ]] -} - - diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit deleted file mode 100755 index a6c05d5e..00000000 --- a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit +++ /dev/null @@ -1,111 +0,0 @@ -# OpenGnsys oginit -*- shell-script -*- - -#@file oginit -#@brief Guion modificador inicio initrd para OpenGnSys -#@warning -#@version 0.1 - basado en ROOTfs -#@author Antonio J. Doblas Viso. Universidad de Málaga -#@date 2009/00/00 -#@version 0.2 - basado en el instalador de ubunto -#@author Alejandro Castillo -#@author Ramón Gómez -#@author Irina -#@author Antonio Doblas -#@date 2010/00/00 -#@version 0.7 - Generación limpia con mkinitrd, busybox -#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. -#@date 2010/05/24 -#@version 0.8 - Integración con FileSystem externo -#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. -#@date 2010/06/24 -#@version 0.8.1 - UnionFS + squasfs -#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. -#@date 2010/06/29 - -#*/ - - - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - . /scripts/functions - . /scripts/ogfunctions - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N " - [ $? == 0 ] && sh || echo " " - - set -a - log_success_msg "Checking kernel parameters" - ogExportKernelParameters - log_success_msg "Checking Opengnys Environmnet" - ogExportVarEnvironment - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N " - [ $? == 0 ] && sh || echo " " - ogConfigureRamfs - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N " - [ $? == 0 ] && sh || echo " " - ogLoadNetModule - - #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - #run_scripts /scripts/og-premount - #[ "$quiet" != "y" ] && log_end_msg - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N " - [ $? == 0 ] && sh || echo " " - ogconfigure_networking - log_success_msg "config networking" - ogconfigure_lo - log_success_msg "config loopback" - - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N " - [ $? == 0 ] && sh || echo " " - ogGetROOTSERVER && log_success_msg "Get Info from pxe server" - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before conect with og Services : y/N " - [ $? == 0 ] && sh || echo " " - ogConectROOTSERVER && log_success_msg "Conecting with og services" || sh - # ogConectROOTMEDIA - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before merge the Second File System with initrd (First File System) : y/N " - [ $? == 0 ] && sh || echo " " - ogMerge2ndFile && log_success_msg "Merge onto Second File System" - - - #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - #run_scripts /scripts/og-bottom - #[ "$quiet" != "y" ] && log_end_msg - - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N " - [ $? == 0 ] && sh || echo " " - ogPostConfigureFS - setupcon -k - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N " - [ $? == 0 ] && sh || echo " " - -if [ "$oginit" ] -then - exec $oginit -else - exec init -fi - - - - - -} diff --git a/client/boot-tools/clientstructure/etc/inittab b/client/boot-tools/clientstructure/etc/inittab deleted file mode 100644 index 94c30028..00000000 --- a/client/boot-tools/clientstructure/etc/inittab +++ /dev/null @@ -1,14 +0,0 @@ -# This is run first except when booting in single-user mode -# -#::sysinit:/opt/opengnsys/etc/preinit/defaultTESTING.sh -# /bin/sh invocations on selected ttys -# -# Start an "askfirst" shell on the console (whatever that may be) -#::askfirst:/bin/sh -# Start an "askfirst" shell on /dev/tty2-4 -#tty1::respawn:/sbin/getty 38400 tty1 -tty1::respawn:/opt/opengnsys/etc/preinit/defaultTESTING.sh -tty2::respawn:/sbin/getty 38400 tty2 -tty3::respawn:/sbin/getty 38400 tty3 -tty4::respawn:/sbin/getty 38400 tty4 -tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf b/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf deleted file mode 100644 index 8b047e4e..00000000 --- a/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf +++ /dev/null @@ -1,30 +0,0 @@ -# Framebuffer drivers are generally buggy and poorly-supported, and cause -# suspend failures, kernel panics and general mayhem. For this reason we -# never load them automatically. -blacklist aty128fb -blacklist atyfb -#blacklist radeonfb -blacklist cirrusfb -blacklist cyber2000fb -blacklist cyblafb -blacklist gx1fb -blacklist hgafb -blacklist i810fb -blacklist intelfb -blacklist kyrofb -blacklist lxfb -blacklist matroxfb_base -blacklist neofb -blacklist nvidiafb -blacklist pm2fb -blacklist rivafb -blacklist s1d13xxxfb -blacklist savagefb -blacklist sisfb -blacklist sstfb -blacklist tdfxfb -blacklist tridentfb -#blacklist vesafb -blacklist vfb -blacklist viafb -blacklist vt8623fb diff --git a/client/boot-tools/clientstructure/etc/mtab b/client/boot-tools/clientstructure/etc/mtab deleted file mode 100644 index e69de29b..00000000 diff --git a/client/boot-tools/clientstructure/etc/network/interfaces b/client/boot-tools/clientstructure/etc/network/interfaces deleted file mode 100644 index dbe43582..00000000 --- a/client/boot-tools/clientstructure/etc/network/interfaces +++ /dev/null @@ -1,4 +0,0 @@ -auto lo -iface lo inet loopback -auto eth0 -iface eth0 inet dhcp \ No newline at end of file diff --git a/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh b/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh deleted file mode 100755 index 0bf46a3e..00000000 --- a/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash -#/** -#@file loadenviron.sh -#@brief Script de carga de la API de funciones de OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - -# FIXME Temporal -export LANG="${LANG:-es_ES}" - -#/// Directorios del projecto OpenGNSys. -export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" -if [ -d $OPENGNSYS ]; then - export OGBIN=$OPENGNSYS/bin - export OGETC=$OPENGNSYS/etc - export OGLIB=$OPENGNSYS/lib - export OGAPI=$OGLIB/engine/bin - export OGSCRIPTS=$OPENGNSYS/scripts - export OGIMG=$OPENGNSYS/images - export OGCAC=$OPENGNSYS/cache - export OGLOG=$OPENGNSYS/log - -# export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH - # export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH - - #/// Cargar fichero de idioma. - LANGFILE=$OGETC/lang.$LANG.conf - if [ -f $LANGFILE ]; then - source $LANGFILE - #for i in $(grep "^[a-zA-Z].*=" $LANGFILE | cut -f1 -d=); do - for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do - export $i - done - fi - #/// Cargar API de funciones. - echo "$MSG_LOADAPI" - for i in $OGAPI/*.lib; do - source $i - done - for i in $(typeset -F | cut -f3 -d" "); do - export -f $i - done - # Carga de las API testing - if [ "$engine" = "testing" ] - then - for i in $OGAPI/*.testing; do - source $i - done - fi - # Añadir dependencia de arquitectura - ARCH=$(ogGetArch) - if [ -n "$ARCH" ]; then - # export PATH=$OGBIN/$ARCH:$PATH - # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin - export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH - fi - # Fichero de registros. - export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" - # FIXME Pruebas para grupos de ordenadores - #export OGGROUP=$(ogGetGroup) - export OGGROUP=aula3 -fi - -#/// Declaración de códigos de error. -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. - - diff --git a/client/boot-tools/clientstructure/etc/ssh/ssh_config b/client/boot-tools/clientstructure/etc/ssh/ssh_config deleted file mode 100644 index 7f9319dc..00000000 --- a/client/boot-tools/clientstructure/etc/ssh/ssh_config +++ /dev/null @@ -1,56 +0,0 @@ - -# This is the ssh client system-wide configuration file. See -# ssh_config(5) for more information. This file provides defaults for -# users, and the values can be changed in per-user configuration files -# or on the command line. - -# Configuration data is parsed as follows: -# 1. command line options -# 2. user-specific file -# 3. system-wide file -# Any configuration value is only changed the first time it is set. -# Thus, host-specific definitions should be at the beginning of the -# configuration file, and defaults at the end. - -# Site-wide defaults for some commonly used options. For a comprehensive -# list of available options, their meanings and defaults, please see the -# ssh_config(5) man page. - -Host * -# ForwardAgent no -# ForwardX11 no -# ForwardX11Trusted yes -# RhostsRSAAuthentication no -# RSAAuthentication yes -# PasswordAuthentication yes - HostbasedAuthentication no -# GSSAPIAuthentication no -# GSSAPIDelegateCredentials no -# GSSAPIKeyExchange no -# GSSAPITrustDNS no -# BatchMode no -# CheckHostIP yes -# AddressFamily any -# ConnectTimeout 0 -# StrictHostKeyChecking ask -# IdentityFile ~/.ssh/identity -# IdentityFile ~/.ssh/id_rsa -# IdentityFile ~/.ssh/id_dsa -# Port 22 -# Protocol 2,1 -# Cipher 3des -# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc -# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 -# EscapeChar ~ -# Tunnel no -# TunnelDevice any:any -# PermitLocalCommand no -# VisualHostKey no - SendEnv LANG LC_* -# HashKnownHosts yes - GSSAPIAuthentication yes - GSSAPIDelegateCredentials no - - StrictHostKeyChecking no - UserKnownHostsFile=/dev/null - diff --git a/client/boot-tools/clientstructure/etc/ssh/sshd_config b/client/boot-tools/clientstructure/etc/ssh/sshd_config deleted file mode 100644 index ea0303b3..00000000 --- a/client/boot-tools/clientstructure/etc/ssh/sshd_config +++ /dev/null @@ -1,86 +0,0 @@ -# Package generated configuration file -# See the sshd_config(5) manpage for details - -# What ports, IPs and protocols we listen for -Port 22 -# Use these options to restrict which interfaces/protocols sshd will bind to -#ListenAddress :: -#ListenAddress 0.0.0.0 -Protocol 2 -# HostKeys for protocol version 2 -HostKey /etc/ssh/ssh_host_rsa_key -HostKey /etc/ssh/ssh_host_dsa_key -#Privilege Separation is turned on for security -UsePrivilegeSeparation yes - -# Lifetime and size of ephemeral version 1 server key -KeyRegenerationInterval 3600 -ServerKeyBits 768 - -# Logging -SyslogFacility AUTH -LogLevel INFO - -# Authentication: -LoginGraceTime 120 -PermitRootLogin yes -StrictModes yes - -RSAAuthentication yes -PubkeyAuthentication yes -#AuthorizedKeysFile %h/.ssh/authorized_keys - -# Don't read the user's ~/.rhosts and ~/.shosts files -IgnoreRhosts yes -# For this to work you will also need host keys in /etc/ssh_known_hosts -RhostsRSAAuthentication no -# similar for protocol version 2 -HostbasedAuthentication no -# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication -#IgnoreUserKnownHosts yes - -# To enable empty passwords, change to yes (NOT RECOMMENDED) -PermitEmptyPasswords no - -# Change to yes to enable challenge-response passwords (beware issues with -# some PAM modules and threads) -ChallengeResponseAuthentication no - -# Change to no to disable tunnelled clear text passwords -#PasswordAuthentication yes - -# Kerberos options -#KerberosAuthentication no -#KerberosGetAFSToken no -#KerberosOrLocalPasswd yes -#KerberosTicketCleanup yes - -# GSSAPI options -#GSSAPIAuthentication no -#GSSAPICleanupCredentials yes - -X11Forwarding yes -X11DisplayOffset 10 -PrintMotd no -PrintLastLog yes -TCPKeepAlive yes -#UseLogin no - -#MaxStartups 10:30:60 -#Banner /etc/issue.net - -# Allow client to pass locale environment variables -AcceptEnv LANG LC_* - -Subsystem sftp /usr/lib/openssh/sftp-server - -# Set this to 'yes' to enable PAM authentication, account processing, -# and session processing. If this is enabled, PAM authentication will -# be allowed through the ChallengeResponseAuthentication and -# PasswordAuthentication. Depending on your PAM configuration, -# PAM authentication via ChallengeResponseAuthentication may bypass -# the setting of "PermitRootLogin without-password". -# If you just want the PAM account and session checks to run without -# PAM authentication, then enable this but set PasswordAuthentication -# and ChallengeResponseAuthentication to 'no'. -UsePAM yes diff --git a/client/boot-tools/clientstructure/root/CompileSoftware.sh b/client/boot-tools/clientstructure/root/CompileSoftware.sh deleted file mode 100755 index 1a9b854a..00000000 --- a/client/boot-tools/clientstructure/root/CompileSoftware.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -################################################################ -##################### SOFTWARE ##################### -################################################################ -export LANGUAGE=C -export LC_ALL=C -export LANG=C - -#dpkg-divert --local --rename --add /sbin/initctl -#ln -s /bin/true /sbin/initctl - -apt-get -y update -# software to compile code -apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk - -source /opt/opengnsys/lib/engine/bin/ToolsGNU.c - -ctorrent install -udpcast install -#ntfs-3g install -ms-sys install - -wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh -gdebi -n partclone_0.2.16_i386.deb - - cd /tmp - wget http://damien.guibouret.free.fr/savepart.zip - unzip savepart.zip -d /sbin/ - - diff --git a/client/boot-tools/clientstructure/root/ConfFS.sh b/client/boot-tools/clientstructure/root/ConfFS.sh deleted file mode 100755 index 3e0f4b5c..00000000 --- a/client/boot-tools/clientstructure/root/ConfFS.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -dpkg-divert --local --rename --add /sbin/initctl -ln -s /bin/true /sbin/initctl -#mv /etc/fstab /etc/fstab.original 2>/dev/null -#mv /etc/mtab /etc/mtab.original 2>/dev/null - -#TODO: fichero etc/hosts -#TODO: fichero etc/resolv.conf -echo "ogClient" > /etc/hostname - -#export PASSROOT=og -#dpkg-reconfigure passwd -#echo "root:$PASSROOT" | chpasswd - - -#for i in pts/0 pts/1 pts/2 pts/3 do -# -# -#done -#TODO: introducir mas consoluas para el acceso como root. -echo "pts/0" >> /etc/securetty -echo "pts/1" >> /etc/securetty -echo "pts/2" >> /etc/securetty -echo "pts/3" >> /etc/securetty \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh b/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh deleted file mode 100755 index eaeb475b..00000000 --- a/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null -#OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null -export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') -export OSRELEASE=$(uname -a | awk '{print $3}') -uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 -export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" - - - -cd /usr/lib/initramfs-tools/bin/ -rm * -cp /bin/busybox ./ -cd /tmp/ -mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE -cp /boot/vmlinuz-$OSRELEASE /tmp \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/InstallSoftware.sh b/client/boot-tools/clientstructure/root/InstallSoftware.sh deleted file mode 100644 index 1d316eec..00000000 --- a/client/boot-tools/clientstructure/root/InstallSoftware.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -################################################################ -##################### SOFTWARE ##################### -################################################################ -export LANGUAGE=C -export LC_ALL=C -export LANG=C - - -dpkg-divert --local --rename --add /sbin/initctl -ln -s /bin/true /sbin/initctl - -apt-get clean -apt-get -y update - - -# software system -apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE wget dialog man-db htop fbset gdebi-core busybox-static - -apt-get -y --force-yes install console-data locales - -# sofware networking -apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 unionfs-fuse open-iscsi nmap tcpdump arping dnsutils - -apt-get clean -# software services -apt-get -y --force-yes install openssh-server bittornado trickle iptraf screen schroot grub - -# software disk and filesystem -apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted ntfs-3g dosfstools -apt-get -y --force-yes install dmraid dmsetup lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools -apt-get -y --force-yes install btrfs-tools hfsplus hfsprogs hfsutils - -# software cloning -apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools -apt-get -y --force-yes install mbuffer - - -apt-get clean -## software postconf -apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk - -# software compressor -apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop pigz pbzip2 lbzip2 rzip p7zip-full unzip - -apt-get -y --force-yes remove busybox -apt-get -y --force-yes install busybox-static bash-static -apt-get clean -#apt-get -y --force-yes xorg-dev xorg lxde roxterm -# -#################################################################### -###################### Reconfigurando paquetes ###################### -################################################################### - - -#dpkg-reconfigure console-data -#dpkg-reconfigure console-setup -#dpkg-reconfigure locales -apt-get clean -##TODO################# Borrar algunos binarios del mkinitramfs - - diff --git a/client/boot-tools/clientstructure/root/ReconfigureLocales.sh b/client/boot-tools/clientstructure/root/ReconfigureLocales.sh deleted file mode 100755 index 5480d141..00000000 --- a/client/boot-tools/clientstructure/root/ReconfigureLocales.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -dpkg-reconfigure console-data -dpkg-reconfigure console-setup -dpkg-reconfigure locales \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/generateSshKeysClient.sh b/client/boot-tools/clientstructure/root/generateSshKeysClient.sh deleted file mode 100644 index 9857ad40..00000000 --- a/client/boot-tools/clientstructure/root/generateSshKeysClient.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -echo "comprobando directorio .ssh del root" -if [ ! -d /root/.ssh ] -then - echo "creando directorio .ssh 600" - mkdir -p /root/.ssh - chmod 700 /root/.ssh -fi - - -echo "comprobando el fichero authorized_keys .ssh del root" -if [ ! -f /root/.ssh/authorized_keys ] -then - echo "creando el fichero authorized_keys" - touch /root/.ssh/authorized_keys - chmod 600 /root/.ssh/authorized_keys -fi - -ssh-keygen -q -f /root/.ssh/id_rsa -N "" -cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys - -## TODO: exportamos la publica a los repos -cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/importSshKeys.sh b/client/boot-tools/clientstructure/root/importSshKeys.sh deleted file mode 100755 index 17a797f8..00000000 --- a/client/boot-tools/clientstructure/root/importSshKeys.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -echo "comprobando directorio .ssh del root" -if [ ! -d /root/.ssh ] -then - echo "creando directorio .ssh 600" - mkdir -p /root/.ssh - chmod 700 /root/.ssh -fi -echo "creando el fichero authorized_keys" -touch /root/.ssh/authorized_keys -chmod 600 /root/.ssh/authorized_keys - -echo "importando la clave publica del servidor OG" -cat /tmp/id_rsa.pub - -[ -f /tmp/id_rsa.pub ] && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys || echo "no key publica og" - \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/qemu.sh b/client/boot-tools/clientstructure/root/qemu.sh deleted file mode 100755 index c5a93cd9..00000000 --- a/client/boot-tools/clientstructure/root/qemu.sh +++ /dev/null @@ -1,9 +0,0 @@ -#/bin/bash - -mount -o rw,remount / -mount proc /proc -t proc -export PATH=$PATH dpkg -i *.deb -modprobe 8139too -modprobe 8139cp -dhclient -/etc/init.d/ssh restart \ No newline at end of file diff --git a/client/boot-tools/clientstructure/var/lib/locales/supported.d/local b/client/boot-tools/clientstructure/var/lib/locales/supported.d/local deleted file mode 100644 index be3f2a41..00000000 --- a/client/boot-tools/clientstructure/var/lib/locales/supported.d/local +++ /dev/null @@ -1,5 +0,0 @@ -es_ES ISO-8859-1 -es_ES@euro ISO-8859-15 -es_ES.UTF-8 UTF-8 -es_ES.UTF-8@euro UTF-8 -en_US.UTF-8 UTF-8 \ No newline at end of file diff --git a/client/boot-tools/kernelParameterOG.es.txt b/client/boot-tools/kernelParameterOG.es.txt deleted file mode 100644 index 890652b4..00000000 --- a/client/boot-tools/kernelParameterOG.es.txt +++ /dev/null @@ -1,29 +0,0 @@ - -KERNEL ogclient/ogvmlinuz -initrd=ogclient/oginitrd.img - - - boot=oginit - - oginit=init|/bin/bash - - - ogrepo=ip del repositorio - - og2nd=sqfs|img - ogprotocol=smb|nfs - ogactiveadmin=true|false - ogdebug=true|false - - vga=788 - irqpoll - acpi=on - - -FIXME: en la version actual -repo=iprepoman -IP - -TODO: en la proxima version -ogrepo -ip \ No newline at end of file diff --git a/client/boot-tools/ogClientGeneratorV2.sh b/client/boot-tools/ogClientGeneratorV2.sh deleted file mode 100755 index 21449267..00000000 --- a/client/boot-tools/ogClientGeneratorV2.sh +++ /dev/null @@ -1,166 +0,0 @@ -#!/bin/bash -#@file ogClientGenerator.sh -#@brief Script generación del cliente OpenGnSys -#@warning -#@version 0.9 - -#@author Antonio J. Doblas Viso. -#@date 2010/05/24 -#*/ - - -#$1 OSCONENAME lucid karmic -#if [ $# -ne 1 ]; then -# echo ": invalid number of parameters" -# echo " host | lucid | karmic | jaunty | lenny | squeeze " -# exit 1 -#fi -TYPECLIENT=host - -# Solo ejecutable por usuario root -if [ "$(whoami)" != 'root' ] -then - echo "ERROR: this program must run under root privileges!!" - exit 1 -fi - - - -#FIXME: variables del instalador oficial. -WORKDIR=/tmp/opengnsys_installer -INSTALL_TARGET=/opt/opengnsys -LOG_FILE=/tmp/opengnsys_installation.log -PROGRAMDIR=$(readlink -e $(dirname "$0")) - - -#funciones especificas del cliente. -source $PROGRAMDIR/ogClientManager.lib -#funciones incluidas dentro del scritps general de instalacion. -source $PROGRAMDIR/ogInstaller.lib - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" -########################################################################## -## FASE 1 - Instalación de software adicional. -##TO DO Integrar en el instaldor. Actualizar repositorios -# Datos para la generación del cliente. -DEPENDENCIES=( debootstrap subversion schroot squashfs-tools) -apt-get update -# Instalación de dependencias (paquetes de sistema operativo). -declare -a notinstalled -checkDependencies DEPENDENCIES notinstalled -if [ $? -ne 0 ]; then - installDependencies notinstalled - if [ $? -ne 0 ]; then - echoAndLog "Error while installing some dependeces, please verify your server installation before continue" - exit 1 - fi -fi -############## FIN DEL TO DO -############################################## FIN FASE 1 - - - - - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" - -############## FASE 2 - Asignación de variables -#obtenemos las variables necesarias. -ogClientVar -#obtenemos la información del host. -ogClientOsInfo -######################## FIN fase 2 - -############# FASE 3: Segundo Sistema archivos (img) Creación. -#TODO comprobacion de que el fichero esta creado. -file $OGCLIENTFILE | grep "partition 1: ID=0x83" -if [ $? == 1 ] -then - ##3.1 creación y formateo del disco virtual. generamos el dispositivo loop. - ogClient2ndFile || exit 1 -fi - - -#3.2 generamos el Sistema de archivos con debootstrap -# Comprobamos que ya tenemos alguno. -schroot -p -c IMGogclient -- touch /tmp/ogclientOK -if [ -f /tmp/ogclientOK ] -then - rm /tmp/ogclientOK -else - ogClient2ndFs $TYPECLIENT || exit -fi - - -############### FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot -cat /etc/schroot/schroot.conf | grep ogclient || ogClientSchrootConf - - -############### FASE 5: Configuración del Segundo Sistema de archivos (img) con la estructura especial de OpenGnsys -ogClient2ndSVN $TYPECLIENT || exit - - - - -############# FASE6: Ejecutamos los scripts de personalización del 2º sistema de archivos (img) desde la jaula schroot -### 6.1 instalacion de software con apt-get -schroot -p -c IMGogclient -- /root/InstallSoftware.sh -echo "saltando" - if [ $? -ne 0 ]; then - errorAndLog "Instalando sofware adicional OG : ERROR" - exit -else - echoAndLog "Instalando sofware adicional OG: OK" -fi -#### 6.2 compilación de software. -cd / -schroot -p -c IMGogclient -- /root/CompileSoftware.sh -cd - - -### 6.3 configuracion hostname passroot securety -cd / -schroot -c IMGogclient -- /root/ConfFS.sh -cd - -#schroot -c IMGogclient -- echo -ne "og1\nog1\n" | passwd root -# schroot -c IMGogclient -- passwd root | echo "root" - - -### 6.4 incorporamos la clave publica del servidor -cd / -ssh-keygen -q -f /root/.ssh/id_rsa -N "" -cp /root/.ssh/id_rsa.pub /tmp -schroot -p -c IMGogclient -- /root/importSshKeys.sh -cd - -############ y la del propio cliente. -schroot -c IMGogclient -- /root/generateSshKeysClient.sh - -## configuramos los locales. -schroot -c IMGogclient -- /root/ReconfigureLocales.sh - - -################## FIN fase 6. Fin de comfiguración del segundo sistema de archivos (img) - -################## FASE 7. Generamos el 1er sistema de archivos. INITRD -#nota el parametro es el "tipo" de linux generado en debootstrap. usar solo "host", es decir version,kernel ... del propio host -#nota: hace un schroot, al 2fs (img), ejecuta el fichero generateinitrd. -#nota: deja en el directorio tmp del host el nuevo initrd, y lo copia al tftpboot -ogClientInitrd $TYPECLIENT - - -################## FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) -# generamos el 2sistema de archivos en squashfs -ogClient2ndSqfs -################## FIN FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) - - -##################### FASE 9. algunos detallas del pxe -#dejamos ficheros de ejemplo para el pxe y el nfs -ogClientConfpxe -##################### FIN FASE 9. algunos detallas del pxe - - -# Mostrar sumario de la instalación e instrucciones de post-instalación. -installationSummary - -echoAndLog "OpenGnSys installation finished at $(date)" \ No newline at end of file diff --git a/client/boot-tools/ogClientManager.lib b/client/boot-tools/ogClientManager.lib deleted file mode 100644 index b19afefe..00000000 --- a/client/boot-tools/ogClientManager.lib +++ /dev/null @@ -1,608 +0,0 @@ - -ogClientVar() -{ -export SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/installer/ogClient -export SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared -export SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine - -export OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ -export OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img -export OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount -# tamaño maximo limitado por schroot 2GB -export OGCLIENTSIZEMB=1900 -#export OGCLIENTSIZEMB=1000 -# export OGCLIENTSIZEKB=500 -export OGCLIENTLABEL=ogClient -#export OGLIB=/opt/opengnsys/client/lib -} - - - -function ogClientOsInfo () -{ -#TODO según host, un OSHHTP u otro OSARCH - #1 OSCODENAME jaunty|karmic|lucid - #devuelve OSDISTRIB(ubuntu,debian),OSCODENAME(lucid,karmic,squeeze):OGRELEASE:httpAPT - case $1 in - host | HOST) - export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') - export OSRELEASE=$(uname -a | awk '{print $3}') - uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" - ;; - jaunty|JAUNTY) - export OSDISTRIB=ubuntu - export OSCODENAME=jaunty - export OSRELEASE="2.6.28-11-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" - ;; - lenny|LENNY) - export OSDISTRIB=debian - export OSCODENAME=lenny - export OSRELEASE="2.6.28-11-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - squeeze|SQUEEZE) - export OSDISTRIB=debian - export OSCODENAME=squeeze - export OSRELEASE="2.6.28-11-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - karmic|KARMIC) - export OSDISTRIB=ubuntu - export OSCODENAME=karmic - export OSRELEASE="2.6.31-14-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - lucid|LUCID) - export OSDISTRIB=ubuntu - export OSCODENAME=lucid - export OSRELEASE="2.6.32-21-generic-pae" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - *) - return 1 - ;; - esac - echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP -} - -#creación y formateo del disco virtual. -ogClient2ndFile () -{ -local RERROR DISKLOOP PARTLOOP #return code error -echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $OGCLIENTSIZEMB MB " -#Desmontamos por si acaso el dispositivo virtual -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $OGCLIENTMOUNT" -mkdir -p $OGCLIENTMOUNT -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Creando directorio $OGCLIENTMOUNT : ERROR" - return 1 -fi -echo "$FUNCNAME(): Creando el disco virtual que almacenará el FS del cliente $OGCLIENTSIZEMB MB de datos físicos" -dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB -#qemu-img create $OGCLIENTFILE 3G -#dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Creando el disco virtual: ERROR" - return 1 -fi - -DISKLOOP=$(losetup -f) -losetup $DISKLOOP $OGCLIENTFILE -echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria" -echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP -#echo $? -# da error, porque no puede actualizar el kernel. -#if [ $? -ne 0 ] -#then -# errorAndLog "$FUNCNAME(): Particionando el disco virutal: ERROR" -# return 1 -#fi - -echoAndLog "$FUNCNAME(): Desmontando $DISKLOOP despues del particionado " -losetup -d $DISKLOOP - -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR" - return 1 -fi - - -#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 -#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 -PARTLOOP=$(losetup -f) -echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP" -losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext3 -b 4096 -L $OGCLIENTLABEL $PARTLOOP -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR" - return 1 -fi -echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo " -losetup -d $PARTLOOP -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR" - return 1 -else - echoAndLog "$FUNCNAME(): $OGCLIENTFILE $OGCLIENTSIZEMB MB : OK" -fi -} - - - - - -ogClient2ndFs () -{ -ogClientOsInfo $1 -echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos " -#Montamos el dispositivo virtual en su punto de montaje. -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - -mount | grep $OGCLIENTMOUNT && echoAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 : FAILURE " - -#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} -debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} - - -if [ $? -ne 0 ]; then - errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP - : ha fallado!" - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - return 1 -else - echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP - : ok" - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - return 0 -fi - sleep 5 - -##preubas revisar OSRELEASE -#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ -#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ -#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ -} - - - - -########## configura el segundo sistema de archivos -########### parametro: "host" -function ogClient2ndSVN() -{ -ogClientOsInfo $1 -#1 la salida de ogClientOsInfo -local LERROR -LERROR=TRUE -echoAndLog "$FUNCNAME: Iniciando la personalización con datos del SVN " -# comprobar que está montado $OGCLIENTMOUNT -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - -# parseamos del apt.source -sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Parseando el apt.sources sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list - : ERROR" - return 1 -fi - -#parseamos el scripts de generación del initrd. -sed -e "s/OSRELEASE/$OSRELEASE/g" ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.sh -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Parseando el /root/GenerateInitrd.sh: ERROR" - return 1 -fi - -#damos permiso al directorio de scripts -chmod 775 ${SVNCLIENTDIR}/clientstructure/root/* - -# los copiamos -cp -prv ${SVNCLIENTDIR}/clientstructure/* $OGCLIENTMOUNT -mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/ -cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/ -cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/ - -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): copiando los datos del svn a $OGCLIENTMOUNT: ERROR" - return 1 -fi - -# copiamos algunas cosas del nfsexport - -# A ####################### para el browser -mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ -mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ -mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/ - -cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts -cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts -cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/fonts - -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Linking fonts for browser1 $OGLIB : ERROR" - return 1 -fi - -# B ######################################################## -cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Coping pci.ids : ERROR" - return 1 -fi - -cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Coping browser : ERROR" - return 1 -fi - -cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Coping ogAdmClient : ERROR" - return 1 -else - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - echoAndLog "$FUNCNAME: Finalizado: OK " - return 0 -fi -} - - -ogClientSchrootConf() -{ -echoAndLog "$FUNCNAME: Iniciando la configuración del schroot " -cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` -cat << EOF > /etc/schroot/schroot.conf -[IMGogclient] -type=loopback -file=/var/lib/tftpboot/ogclient/ogclient.img -description=ogclient ubuntu luc IMGi -priority=1 -users=root -groups=root -root-groups=root -mount-options=-o offset=32256 -root-users=root -[DIRogclient] -type=directory -directory=/var/lib/tftpboot/ogclient/ogclientmount -description=ogclient ubuntu lucid DIR -priority=2 -users=root -groups=root -root-groups=root -root-users=root -EOF -cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime` -cat << EOF > /etc/schroot/mount-defaults -# mount.defaults: static file system information for chroots. -# Note that the mount point will be prefixed by the chroot path -# (CHROOT_PATH) -# -# -proc /proc proc defaults 0 0 -#procbususb /proc/bus/usb usbfs defaults 0 0 -#/dev /dev none rw,bind 0 0 -/dev/pts /dev/pts none rw,bind 0 0 -/dev/shm /dev/shm none rw,bind 0 0 -#/home /home none rw,bind 0 0 -/tmp /tmp none rw,bind 0 0 -EOF - -echoAndLog "$FUNCNAME: Finalizado: OK " -return 0 -} - - - -########### param1 "host" -ogClientInitrd() -{ -ogClientVar -cd / -ogClientOsInfo $1 -schroot -c IMGogclient -- /root/GenerateInitrd.generic.sh -echo "cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR" -cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR -cp /tmp/initrd.img-${OSRELEASE} ${OGCLIENTBASEDIR}/oginitrd.img -cp /tmp/vmlinuz-${OSRELEASE} ${OGCLIENTBASEDIR}/ogvmlinuz -cd - -} - - -ogClient2ndSqfs() -{ -ogClientVar -echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs " -# si ya existe un sqfs lo renombramos -[ -f $OGCLIENTBASEDIR/ogclient.sqfs ] && mv $OGCLIENTBASEDIR/ogclient.sqfs $OGCLIENTBASEDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S` -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 -mksquashfs $OGCLIENTMOUNT $OGCLIENTBASEDIR/ogclient.sqfs -chmod 744 $OGCLIENTBASEDIR/ogclient.sqfs -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -} - - - - -ogClientSshkeys() -{ -echo comprobamos clave rsa en el host REPO OG. -if [ ! -f /root/.ssh/id_rsa.pub ] -then - echo "creando claves rsa" - ssh-keygen -q -f /root/.ssh/id_dsa -t dsa -N "opengnsys" -else - echo "la claves ya estan creadas" -fi -echo "copiamos la clave publica a /tmp" -cp /root/.ssh/id_dsa.pub /tmp - -cat /tmp/id_dsa.pub - -echo "schroot con instrucciones." -schroot -c IMGogclient -- /root/importSshKeys.sh - -echo "limpiando" -rm /tmp/id_dsa.pub - -## copiamos ssh rsa del host al guest como authorized-key2 -##rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -##cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -##mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT -} - - -ogClientConfpxe() -{ -################## DEJAMOS FICHERO DE EJEMPLOS PARA: -#default -cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient -LABEL pxe-${OGRELEASE} -KERNEL ogclient/vmlinuz-$OGRELEASE -APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= -LABEL pxe-2.6.32-21-generic-pae -KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae -APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs -LABEL cache -KERNEL grub.exe -APPEND --config-file="find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img" -LABEL net -KERNEL grub.exe -APPEND keeppxe --config-file="pxe detect; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae" -LABEL IfNOTcacheGOnet -KERNEL grub.exe -APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot" -#LABEL pxe-2.6.32-21-generic-pae -#KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae -#APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=172.17.32.242 -#LABEL grub -#KERNEL grub.exe -#APPEND keeppxe -FIN -#/etc/hosts -echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient -/etc/init.d/nfs-kernel-server restart -##################################################################### -} - - - -############### No usados en el instalador, solo en actualizaciones. -#/** -# ogClientMount [str_program] -#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones -#@return Si no hay parametros: login de acceso. -#@return con un parametro: La salida del programa ejecutado -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## -function ogClientMount () -{ - #TODO comprobar que OGFILE y OGFILEMOUNT existe. - mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc - mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys - mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp - mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev - mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts - - - [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`) - [ $# = 1 ] && chroot $OGCLIENTMOUNT $1 - -} - -#/** -# ogClientUnmount -#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys -#@param -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientUnmount () -{ - cd /tmp - echo "desmontando cliente espere" - sleep 5 - mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount - mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount - mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount - mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount - mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount - mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount - #-d -f -l - -} - - -############################ hasta el final del archivo antiguos -############################# ANTIGUOS -function ogClientGetRelease () -{ - #1 OSCODENAME jaunty|karmic|lucid - case $1 in - jaunty|JAUNTY) - OSCODENAME=jaunty - OGRELEASE="2.6.28-11-generic" - echo $OGRELEASE - ;; - lenny|LENNY) - OSCODENAME=lenny - OGRELEASE="2.6.28-11-generic" - echo $OGRELEASE - ;; - squeeze|SQUEEZE) - OSCODENAME=squeeze - OGRELEASE="2.6.28-11-generic" - echo $OGRELEASE - ;; - karmic|KARMIC) - OSCODENAME=karmic - OGRELEASE="2.6.31-14-generic" - echo $OGRELEASE - ;; - lucid|LUCID) - OSCODENAME=lucid - OGRELEASE="2.6.32-21-generic-pae" - echo $OGRELEASE - ;; - *) - return 1 - ;; - esac - -} - - -#/** -# ogClientGenerator str_versionUbuntu str_release -#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Versión de ubuntu a generar, jaunty karmic -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientGeneratorDebootstrap () -{ - if [ $# != 2 ] - then - echo Debes introducir como argumento1: jaunty karmic lucid - echo Debes introducir como argumento2: la release - echo utiliza como entrada ogClientCheckVersion - return - fi - OSCODENAME=$1 - OGRELEASE=$2 - - # instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema - #apt-get install gdebi-core - #wget $LASTDEBOOTSTRAP - #gdebi -n debootstrap_1.0.20_all.deb - - #Desmontamos por si acaso el dispositivo virtual - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - - #Creamos el directorio donde montaremos el disco virtual - mkdir -p $OGCLIENTMOUNT - - #Creamos el disco virtual con el filesystem del cliente. - dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB - #qemu-img create $OGCLIENTFILE 3G - #dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB - - - #particionamos el disco virtual - losetup /dev/loop0 $OGCLIENTFILE - echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk /dev/loop0 - losetup -d /dev/loop0 - - - #formateamos la particion principal. - losetup -o 32256 /dev/loop1 $OGCLIENTFILE - mkfs.ext3 -b 4096 -L $OGCLIENTLABEL /dev/loop1 - #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 - #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 - losetup -d /dev/loop1 - - #Montamos el dispositivo virtual en su punto de montaje. - mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - - #TODO Comprobar arquitectura - #Iniciamos la creación del sistema en el directorio de clientes. - #echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - debootstrap --include=linux-image-${OGRELEASE},linux-headers-${OGRELEASE} --arch=i386 --components=main,universe $OSCODENAME $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - ##preubas - #debootstrap --include=linux-image-${OGRELEASE} --arch=i386 --variant=minbase $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - #debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - - if [ $? -ne 0 ]; then - errorAndLog "ogClientGeneratorDebootstrap(): ha fallado!" - return 1 - else - echoAndLog "ogClientGeneratorDebootstrap(): ok" - return 0 - fi - sleep 5 - -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTFILE - -cat << EOF > /etc/schroot/schroot.conf -[DIRogclient] -type=directory -directory=/var/lib/tftpboot/ogclient/ogclientmount -description=ogclient ubuntu lucid DIR -priority=2 -users=root -groups=root -root-groups=root -root-users=root -EOF -} - - - - - diff --git a/client/boot-tools/ogInstaller.lib b/client/boot-tools/ogInstaller.lib deleted file mode 100644 index af0f18df..00000000 --- a/client/boot-tools/ogInstaller.lib +++ /dev/null @@ -1,958 +0,0 @@ -#!/bin/bash - - -##################################################################### -####### Algunas funciones útiles de propósito general: -##################################################################### -function getDateTime() -{ - echo `date +%Y%m%d-%H%M%S` -} - -# Escribe a fichero y muestra por pantalla -function echoAndLog() -{ - echo $1 - FECHAHORA=`getDateTime` - echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE -} - -function errorAndLog() -{ - echo "ERROR: $1" - FECHAHORA=`getDateTime` - echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE -} - -# comprueba si el elemento pasado en $2 esta en el array $1 -function isInArray() -{ - if [ $# -ne 2 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - echoAndLog "${FUNCNAME}(): checking if $2 is in $1" - local deps - eval "deps=( \"\${$1[@]}\" )" - elemento=$2 - - local is_in_array=1 - # copia local del array del parametro 1 - for (( i = 0 ; i < ${#deps[@]} ; i++ )) - do - if [ "${deps[$i]}" = "${elemento}" ]; then - echoAndLog "isInArray(): $elemento found in array" - is_in_array=0 - fi - done - - if [ $is_in_array -ne 0 ]; then - echoAndLog "${FUNCNAME}(): $elemento NOT found in array" - fi - - return $is_in_array - -} - -##################################################################### -####### Funciones de manejo de paquetes Debian -##################################################################### - -function checkPackage() -{ - package=$1 - if [ -z $package ]; then - errorAndLog "checkPackage(): parameter required" - exit 1 - fi - echoAndLog "checkPackage(): checking if package $package exists" - dpkg -s $package | grep Status | grep -qw install &>/dev/null - if [ $? -eq 0 ]; then - echoAndLog "checkPackage(): package $package exists" - return 0 - else - echoAndLog "checkPackage(): package $package doesn't exists" - return 1 - fi -} - -# recibe array con dependencias -# por referencia deja un array con las dependencias no resueltas -# devuelve 1 si hay alguna dependencia no resuelta -function checkDependencies() -{ - if [ $# -ne 2 ]; then - errorAndLog "checkDependencies(): invalid number of parameters" - exit 1 - fi - - echoAndLog "checkDependencies(): checking dependences" - uncompletedeps=0 - - # copia local del array del parametro 1 - local deps - eval "deps=( \"\${$1[@]}\" )" - - declare -a local_notinstalled - - for (( i = 0 ; i < ${#deps[@]} ; i++ )) - do - checkPackage ${deps[$i]} - if [ $? -ne 0 ]; then - local_notinstalled[$uncompletedeps]=$package - let uncompletedeps=uncompletedeps+1 - fi - done - - # relleno el array especificado en $2 por referencia - for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ )) - do - eval "${2}[$i]=${local_notinstalled[$i]}" - done - - # retorna el numero de paquetes no resueltos - echoAndLog "checkDependencies(): dependencies uncompleted: $uncompletedeps" - return $uncompletedeps -} - -# Recibe un array con las dependencias y lo instala -function installDependencies() -{ - if [ $# -ne 1 ]; then - errorAndLog "installDependencies(): invalid number of parameters" - exit 1 - fi - echoAndLog "installDependencies(): installing uncompleted dependencies" - - # copia local del array del parametro 1 - local deps - eval "deps=( \"\${$1[@]}\" )" - - local string_deps="" - for (( i = 0 ; i < ${#deps[@]} ; i++ )) - do - string_deps="$string_deps ${deps[$i]}" - done - - if [ -z "${string_deps}" ]; then - errorAndLog "installDependencies(): array of dependeces is empty" - exit 1 - fi - - OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND - export DEBIAN_FRONTEND=noninteractive - - echoAndLog "installDependencies(): now ${string_deps} will be installed" - apt-get -y install --force-yes ${string_deps} - if [ $? -ne 0 ]; then - errorAndLog "installDependencies(): error installing dependencies" - return 1 - fi - - DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND - echoAndLog "installDependencies(): dependencies installed" -} - -# Hace un backup del fichero pasado por parámetro -# deja un -last y uno para el día -function backupFile() -{ - if [ $# -ne 1 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local fichero=$1 - local fecha=`date +%Y%m%d` - - if [ ! -f $fichero ]; then - errorAndLog "${FUNCNAME}(): file $fichero doesn't exists" - return 1 - fi - - echoAndLog "${FUNCNAME}(): realizando backup de $fichero" - - # realiza una copia de la última configuración como last - cp -p $fichero "${fichero}-LAST" - - # si para el día no hay backup lo hace, sino no - if [ ! -f "${fichero}-${fecha}" ]; then - cp -p $fichero "${fichero}-${fecha}" - fi - - echoAndLog "${FUNCNAME}(): backup realizado" -} - -##################################################################### -####### Funciones para el manejo de bases de datos -##################################################################### - -# This function set password to root -function mysqlSetRootPassword() -{ - if [ $# -ne 1 ]; then - errorAndLog "mysqlSetRootPassword(): invalid number of parameters" - exit 1 - fi - - local root_mysql=$1 - echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server" - /usr/bin/mysqladmin -u root password ${root_mysql} - if [ $? -ne 0 ]; then - errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server" - return 1 - fi - echoAndLog "mysqlSetRootPassword(): root password saved!" - return 0 -} - -# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente -function mysqlGetRootPassword(){ - local pass_mysql - local pass_mysql2 - # Comprobar si MySQL está instalado con la clave de root por defecto. - if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then - echoAndLog "${FUNCNAME}(): Using default mysql root password." - else - stty -echo - echo "Existe un servicio mysql ya instalado" - read -p "Insertar clave de root de Mysql: " pass_mysql - echo "" - read -p "Confirmar clave:" pass_mysql2 - echo "" - stty echo - if [ "$pass_mysql" == "$pass_mysql2" ] ;then - MYSQL_ROOT_PASSWORD=$pass_mysql - echo "La clave es: ${MYSQL_ROOT_PASSWORD}" - return 0 - else - echo "Las claves no coinciden no se configura la clave del servidor de base de datos." - echo "las operaciones con la base de datos daran error" - return 1 - fi - fi -} - -# comprueba si puede conectar con mysql con el usuario root -function mysqlTestConnection() -{ - if [ $# -ne 1 ]; then - errorAndLog "mysqlTestConnection(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - echoAndLog "mysqlTestConnection(): checking connection to mysql..." - echo "" | mysql -uroot -p"${root_password}" - if [ $? -ne 0 ]; then - errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!" - return 1 - else - echoAndLog "mysqlTestConnection(): connection success" - return 0 - fi -} - -# comprueba si la base de datos existe -function mysqlDbExists() -{ - if [ $# -ne 2 ]; then - errorAndLog "mysqlDbExists(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - echoAndLog "mysqlDbExists(): checking if $database exists..." - echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$" - if [ $? -ne 0 ]; then - echoAndLog "mysqlDbExists():database $database doesn't exists" - return 1 - else - echoAndLog "mysqlDbExists():database $database exists" - return 0 - fi -} - -function mysqlCheckDbIsEmpty() -{ - if [ $# -ne 2 ]; then - errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..." - num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l` - if [ $? -ne 0 ]; then - errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password" - exit 1 - fi - - if [ $num_tablas -eq 0 ]; then - echoAndLog "mysqlCheckDbIsEmpty():database $database is empty" - return 0 - else - echoAndLog "mysqlCheckDbIsEmpty():database $database has tables" - return 1 - fi - -} - - -function mysqlImportSqlFileToDb() -{ - if [ $# -ne 3 ]; then - errorAndLog "${FNCNAME}(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - local sqlfile=$3 - - if [ ! -f $sqlfile ]; then - errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!" - return 1 - fi - - echoAndLog "${FUNCNAME}(): importing sql file to ${database}..." - perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DEFAULTUSER/$OPENGNSYS_DB_DEFAULTUSER/g; s/DEFAULTPASSWD/$OPENGNSYS_DB_DEFAULTPASSWD/g" $sqlfile - mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $sqlfile - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database" - return 1 - fi - echoAndLog "${FUNCNAME}(): file imported to database $database" - return 0 -} - -# Crea la base de datos -function mysqlCreateDb() -{ - if [ $# -ne 2 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - - echoAndLog "${FUNCNAME}(): creating database..." - mysqladmin -u root --password="${root_password}" create $database - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while creating database $database" - return 1 - fi - echoAndLog "${FUNCNAME}(): database $database created" - return 0 -} - - -function mysqlCheckUserExists() -{ - if [ $# -ne 2 ]; then - errorAndLog "mysqlCheckUserExists(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local userdb=$2 - - echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..." - echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user - if [ $? -ne 0 ]; then - echoAndLog "mysqlCheckUserExists(): user doesn't exists" - return 1 - else - echoAndLog "mysqlCheckUserExists(): user already exists" - return 0 - fi - -} - -# Crea un usuario administrativo para la base de datos -function mysqlCreateAdminUserToDb() -{ - if [ $# -ne 4 ]; then - errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters" - exit 1 - fi - - local root_password=$1 - local database=$2 - local userdb=$3 - local passdb=$4 - - echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}" - - cat > $WORKDIR/create_${database}.sql < ${basetftp}/pxelinux.cfg/default < /dev/null - if [ $? -eq 0 ]; then - echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting" - return 0 - fi - - cadenaexport="${export}" - for parametro in $* - do - if [ $contador -gt 0 ] - then - host=`echo $parametro | awk -F: '{print $1}'` - options=`echo $parametro | awk -F: '{print $2}'` - if [ "${host}" == "" ]; then - errorAndLog "${FUNCNAME}(): host can't be empty" - return 1 - fi - cadenaexport="${cadenaexport}\t${host}" - - if [ "${options}" != "" ]; then - cadenaexport="${cadenaexport}(${options})" - fi - fi - let contador=contador+1 - done - - echo -en "$cadenaexport\n" >> /etc/exports - - echoAndLog "${FUNCNAME}(): add $export to /etc/exports" - - return 0 -} - -######################################################################## -## Configuracion servicio DHCP -######################################################################## - -function dhcpConfigure() -{ - echoAndLog "${FUNCNAME}(): Sample DHCP Configuration." - - backupFile /etc/dhcp3/dhcpd.conf - - sed -e "s/SERVERIP/$SERVERIP/g" \ - -e "s/NETIP/$NETIP/g" \ - -e "s/NETMASK/$NETMASK/g" \ - -e "s/NETBROAD/$NETBROAD/g" \ - -e "s/ROUTERIP/$ROUTERIP/g" \ - -e "s/DNSIP/$DNSIP/g" \ - $WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while configuring dhcp server" - return 1 - fi - - /etc/init.d/dhcp3-server restart - echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"." - return 0 -} - - -##################################################################### -####### Funciones específicas de la instalación de Opengnsys -##################################################################### - -# Copiar ficheros del OpenGnSys Web Console. -function installWebFiles() -{ - echoAndLog "${FUNCNAME}(): Installing web files..." - cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para doxigen - if [ $? != 0 ]; then - errorAndLog "${FUNCNAME}(): Error copying web files." - exit 1 - fi - find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null - # Cambiar permisos para ficheros especiales. - chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \ - $INSTALL_TARGET/www/includes \ - $INSTALL_TARGET/www/comandos/gestores/filescripts \ - $INSTALL_TARGET/www/images/iconos - echoAndLog "${FUNCNAME}(): Web files installed successfully." -} - -# Configuración específica de Apache. -function openGnsysInstallWebConsoleApacheConf() -{ - if [ $# -ne 2 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local path_opengnsys_base=$1 - local path_apache2_confd=$2 - local path_web_console=${path_opengnsys_base}/www - - if [ ! -d $path_apache2_confd ]; then - errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation" - return 1 - fi - - mkdir -p $path_apache2_confd/{sites-available,sites-enabled} - - echoAndLog "${FUNCNAME}(): creating apache2 config file.." - - - # genera configuración - cat > $path_opengnsys_base/etc/apache.conf < - Options -Indexes FollowSymLinks - DirectoryIndex acceso.php - -EOF - - ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf - ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation" - return 1 - else - echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon" - /etc/init.d/apache2 restart - return 0 - fi -} - -# Crear documentación Doxygen para la consola web. -function makeDoxygenFiles() -{ - echoAndLog "${FUNCNAME}(): Making Doxygen web files..." - $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \ - $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www - if [ ! -d "$INSTALL_TARGET/www/html" ]; then - errorAndLog "${FUNCNAME}(): unable to create Doxygen web files." - return 1 - fi - mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api" - chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api - echoAndLog "${FUNCNAME}(): Doxygen web files created successfully." -} - - -# Crea la estructura base de la instalación de opengnsys -function openGnsysInstallCreateDirs() -{ - if [ $# -ne 1 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local path_opengnsys_base=$1 - - echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base" - - mkdir -p $path_opengnsys_base - mkdir -p $path_opengnsys_base/admin/{autoexec,comandos,menus,usuarios} - mkdir -p $path_opengnsys_base/bin - mkdir -p $path_opengnsys_base/client - mkdir -p $path_opengnsys_base/doc - mkdir -p $path_opengnsys_base/etc - mkdir -p $path_opengnsys_base/lib - mkdir -p $path_opengnsys_base/log/clients - mkdir -p $path_opengnsys_base/sbin - mkdir -p $path_opengnsys_base/www - mkdir -p $path_opengnsys_base/images - ln -fs /var/lib/tftpboot $path_opengnsys_base - ln -fs $path_opengnsys_base/log /var/log/opengnsys - - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" - return 1 - fi - - echoAndLog "${FUNCNAME}(): directory paths created" - return 0 -} - -# Copia ficheros de configuración y ejecutables genéricos del servidor. -function openGnsysCopyServerFiles () { - if [ $# -ne 1 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local path_opengnsys_base=$1 - - local SOURCES=( client/boot/initrd-generator \ - client/boot/upgrade-clients-udeb.sh \ - client/boot/udeblist.conf \ - client/boot/udeblist-jaunty.conf \ - client/boot/udeblist-karmic.conf \ - client/boot/udeblist-lucid.conf \ - server/PXE/pxelinux.cfg/default \ - doc ) - local TARGETS=( bin/initrd-generator \ - bin/upgrade-clients-udeb.sh \ - etc/udeblist.conf \ - etc/udeblist-jaunty.conf \ - etc/udeblist-karmic.conf \ - etc/udeblist-lucid.conf \ - tftpboot/pxelinux.cfg/default \ - doc ) - - if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then - errorAndLog "${FUNCNAME}(): inconsistent number of array items" - exit 1 - fi - - echoAndLog "${FUNCNAME}(): copying files to server directories" - - pushd $WORKDIR/opengnsys - local i - for (( i = 0; i < ${#SOURCES[@]}; i++ )); do - if [ -f "${SOURCES[$i]}" ]; then - echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" - cp -p "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}" - elif [ -d "${SOURCES[$i]}" ]; then - echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" - cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}" - else - echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" - fi - done - popd -} - -#################################################################### -### Funciones de compilación de códifo fuente de servicios -#################################################################### - -# Compilar los servicios de OpenGNsys -function servicesCompilation () -{ - local hayErrores=0 - - # Compilar OpenGnSys Server - echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server" - pushd $WORKDIR/opengnsys/admin/Services/ogAdmServer - make && make install - if [ $? -ne 0 ]; then - echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server" - hayErrores=1 - fi - popd - # Compilar OpenGnSys Repository Manager - echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager" - pushd $WORKDIR/opengnsys/admin/Services/ogAdmRepo - make && make install - if [ $? -ne 0 ]; then - echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager" - hayErrores=1 - fi - popd - # Compilar OpenGnSys Client - echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client" - pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient - make && mv ogAdmClient ../../../client/nfsexport/bin - if [ $? -ne 0 ]; then - echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client" - hayErrores=1 - fi - popd - - return $hayErrores -} - - -#################################################################### -### Funciones instalacion cliente opengnsys -#################################################################### - -function openGnsysClientCreate() -{ - local OSDISTRIB OSCODENAME - - local hayErrores=0 - - echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." - cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client - find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null - echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." - mkdir -p $INSTALL_TARGET/client/lib/engine/bin - cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while copying engine files" - hayErrores=1 - fi - - # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). - OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then - echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME." - $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME" - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" - hayErrores=1 - fi - echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME." - $INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME" - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" - hayErrores=1 - fi - else - echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files." - $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/ - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" - hayErrores=1 - fi - echoAndLog "${FUNCNAME}(): Loading default udeb files." - $INSTALL_TARGET/bin/upgrade-clients-udeb.sh - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" - hayErrores=1 - fi - fi - - if [ $hayErrores -eq 0 ]; then - echoAndLog "${FUNCNAME}(): Client generation success." - else - errorAndLog "${FUNCNAME}(): Client generation with errors" - fi - - return $hayErrores -} - - -# Configuración básica de servicios de OpenGnSys -function openGnsysConfigure() -{ - echoAndLog "openGnsysConfigure(): Copying init files." - cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys - cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.default /etc/default/opengnsys - update-rc.d opengnsys defaults - echoAndLog "openGnsysConfigure(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"." - perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmServer.cfg - perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg - echoAndLog "${FUNCNAME}(): Creating Web Console config file" - OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys" - perl -pi -e "s/SERVERIP/$SERVERIP/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php - sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Services/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg - echoAndLog "openGnsysConfiguration(): Starting OpenGnSys services." - /etc/init.d/opengnsys start -} - - -##################################################################### -####### Función de resumen informativo de la instalación -##################################################################### - -function installationSummary(){ - echo - echoAndLog "OpenGnSys Installation Summary" - echo "==============================" - echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)" - echoAndLog "Installation directory: $INSTALL_TARGET" - echoAndLog "Repository directory: $INSTALL_TARGET/images" - echoAndLog "TFTP configuracion directory: /var/lib/tftpboot" - echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf" - echoAndLog "NFS configuracion file: /etc/exports" - echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" - echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER" - echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD" - echoAndLog "Web Console default user: $OPENGNSYS_DB_DEFAULTUSER" - echoAndLog "Web Console default password: $OPENGNSYS_DB_DEFAULTPASSWD" - echo - echoAndLog "Post-Installation Instructions:" - echo "===============================" - echoAndLog "Review or edit all configuration files." - echoAndLog "Insert DHCP configuration data and restart service." - echoAndLog "Log-in as Web Console admin user." - echoAndLog " - Review default Organization data and default user." - echoAndLog "Log-in as Web Console organization user." - echoAndLog " - Insert OpenGnSys data (rooms, computers, etc)." -echo -} - -- cgit v1.2.3-18-g5258 From 58828de3313e571cf3559716e832f61e246383ac Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 13:56:46 +0000 Subject: git-svn-id: https://opengnsys.es/svn/branches/version1.0@1763 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/ogClient/INSTALL.es.txt | 46 + .../clientstructure/etc/apt/sources.list.debian | 4 + .../clientstructure/etc/apt/sources.list.ubuntu | 56 ++ client/ogClient/clientstructure/etc/environment | 4 + client/ogClient/clientstructure/etc/fstab | 13 + .../etc/initramfs-tools/hooks/oghooks | 58 ++ .../clientstructure/etc/initramfs-tools/modules | 14 + .../etc/initramfs-tools/scripts/ogfunctions | 427 +++++++++ .../etc/initramfs-tools/scripts/oginit | 111 +++ client/ogClient/clientstructure/etc/inittab | 14 + .../etc/modprobe.d/blacklist-framebuffer.conf | 30 + client/ogClient/clientstructure/etc/mtab | 0 .../clientstructure/etc/network/interfaces | 4 + .../clientstructure/etc/profile.d/loadenviron.sh | 84 ++ client/ogClient/clientstructure/etc/ssh/ssh_config | 56 ++ .../ogClient/clientstructure/etc/ssh/sshd_config | 86 ++ .../clientstructure/root/CompileSoftware.sh | 30 + client/ogClient/clientstructure/root/ConfFS.sh | 24 + .../clientstructure/root/GenerateInitrd.generic.sh | 16 + .../clientstructure/root/InstallSoftware.sh | 62 ++ .../clientstructure/root/ReconfigureLocales.sh | 4 + .../clientstructure/root/generateSshKeysClient.sh | 23 + .../ogClient/clientstructure/root/importSshKeys.sh | 17 + client/ogClient/clientstructure/root/qemu.sh | 9 + .../var/lib/locales/supported.d/local | 5 + client/ogClient/kernelParameterOG.es.txt | 29 + client/ogClient/ogClientGeneratorV2.sh | 166 ++++ client/ogClient/ogClientManager.lib | 607 +++++++++++++ client/ogClient/ogInstaller.lib | 958 +++++++++++++++++++++ .../old/ModificacionesNecesiariasENGINE/Net.lib | 77 ++ .../old/ModificacionesNecesiariasENGINE/readme | 27 + client/ogClient/old/Net.lib | 77 ++ client/ogClient/old/boot/default.sh | 23 + client/ogClient/old/boot/load2fs.sh | 19 + client/ogClient/old/conframfs.sh | 34 + .../usr/lib/initramfs-tools/bin/busybox | Bin 0 -> 1269432 bytes .../usr/lib/initramfs-tools/busybox | Bin 0 -> 223548 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 0 -> 9688 bytes .../usr/share/initramfs-tools/hook-functions | 461 ++++++++++ .../usr/share/initramfs-tools/hooks/compcache | 95 ++ .../usr/share/initramfs-tools/hooks/console_setup | 50 ++ .../usr/share/initramfs-tools/hooks/dmsetup | 23 + .../usr/share/initramfs-tools/hooks/fixrtc | 26 + .../usr/share/initramfs-tools/hooks/framebuffer | 41 + .../usr/share/initramfs-tools/hooks/fuse_utils | 15 + .../usr/share/initramfs-tools/hooks/kbd | 23 + .../usr/share/initramfs-tools/hooks/lvm2 | 43 + .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 + .../usr/share/initramfs-tools/hooks/plymouth | 69 ++ .../usr/share/initramfs-tools/hooks/thermal | 46 + .../usr/share/initramfs-tools/hooks/udev | 52 ++ .../usr/share/initramfs-tools/hooks/watershed | 25 + .../usr/share/initramfs-tools/init | 272 ++++++ .../usr/share/initramfs-tools/modules | 10 + .../usr/share/initramfs-tools/scripts/functions | 420 +++++++++ .../initramfs-tools/scripts/init-bottom/plymouth | 21 + .../share/initramfs-tools/scripts/init-bottom/udev | 24 + .../initramfs-tools/scripts/init-premount/lvm2 | 41 + .../scripts/init-top/all_generic_ide | 18 + .../initramfs-tools/scripts/init-top/blacklist | 34 + .../initramfs-tools/scripts/init-top/console_setup | 83 ++ .../initramfs-tools/scripts/init-top/framebuffer | 104 +++ .../share/initramfs-tools/scripts/init-top/keymap | 28 + .../initramfs-tools/scripts/init-top/plymouth | 20 + .../share/initramfs-tools/scripts/init-top/udev | 30 + .../usr/share/initramfs-tools/scripts/local | 131 +++ .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 + .../initramfs-tools/scripts/local-premount/fixrtc | 64 ++ .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 + .../initramfs-tools/scripts/local-premount/resume | 75 ++ .../usr/share/initramfs-tools/scripts/nfs | 83 ++ .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 + .../initramfs-tools/scripts/panic/console_setup | 82 ++ .../usr/share/initramfs-tools/scripts/panic/keymap | 27 + .../share/initramfs-tools/scripts/panic/plymouth | 18 + .../ogClient/old/initramfs-tools-OG/conf.d/mdadm | 18 + .../ogClient/old/initramfs-tools-OG/conf.d/resume | 1 + .../ogClient/old/initramfs-tools-OG/hooks/oghooks | 40 + .../ogClient/old/initramfs-tools-OG/initramfs.conf | 72 ++ client/ogClient/old/initramfs-tools-OG/modules | 13 + client/ogClient/old/initramfs-tools-OG/scripts/og | 140 +++ .../old/initramfs-tools-OG/update-initramfs.conf | 20 + client/ogClient/old/ogClientFunctions | 255 ++++++ client/ogClient/old/ogClientGenerator.sh | 306 +++++++ .../ModificacionesNecesiariasENGINE/Net.lib | 77 ++ .../ModificacionesNecesiariasENGINE/readme | 20 + client/ogClient/old/ogFSHlnk/boot/default.sh | 23 + client/ogClient/old/ogFSHlnk/boot/load2fs.sh | 19 + .../old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh | 395 +++++++++ .../initramfs-tools-OG-unionfs/antonio/rcog | 137 +++ .../etc/initramfs-tools-OG/conf.d/resume | 1 + .../etc/initramfs-tools-OG/hooks/oghooks | 43 + .../etc/initramfs-tools-OG/initramfs.conf | 72 ++ .../etc/initramfs-tools-OG/modules | 14 + .../etc/initramfs-tools-OG/scripts/og | 194 +++++ .../etc/initramfs-tools-OG/update-initramfs.conf | 20 + .../initramfs-tools-OG-unionfs/etc/inittab | 14 + .../etc/modprobe.d/blacklist-framebuffer.conf | 30 + .../usr/lib/initramfs-tools/bin/busybox | Bin 0 -> 1269432 bytes .../usr/lib/initramfs-tools/busybox | Bin 0 -> 223548 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 0 -> 9688 bytes .../usr/share/initramfs-tools/hook-functions | 461 ++++++++++ .../usr/share/initramfs-tools/hooks/compcache | 95 ++ .../usr/share/initramfs-tools/hooks/console_setup | 50 ++ .../usr/share/initramfs-tools/hooks/dmsetup | 23 + .../usr/share/initramfs-tools/hooks/fixrtc | 26 + .../usr/share/initramfs-tools/hooks/framebuffer | 41 + .../usr/share/initramfs-tools/hooks/fuse_utils | 15 + .../usr/share/initramfs-tools/hooks/kbd | 23 + .../usr/share/initramfs-tools/hooks/lvm2 | 43 + .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 + .../usr/share/initramfs-tools/hooks/plymouth | 69 ++ .../usr/share/initramfs-tools/hooks/thermal | 46 + .../usr/share/initramfs-tools/hooks/udev | 52 ++ .../usr/share/initramfs-tools/hooks/watershed | 25 + .../usr/share/initramfs-tools/init | 272 ++++++ .../usr/share/initramfs-tools/modules | 10 + .../usr/share/initramfs-tools/scripts/functions | 420 +++++++++ .../initramfs-tools/scripts/init-bottom/plymouth | 21 + .../share/initramfs-tools/scripts/init-bottom/udev | 24 + .../initramfs-tools/scripts/init-premount/lvm2 | 41 + .../scripts/init-top/all_generic_ide | 18 + .../initramfs-tools/scripts/init-top/blacklist | 34 + .../initramfs-tools/scripts/init-top/console_setup | 83 ++ .../initramfs-tools/scripts/init-top/framebuffer | 104 +++ .../share/initramfs-tools/scripts/init-top/keymap | 28 + .../initramfs-tools/scripts/init-top/plymouth | 20 + .../share/initramfs-tools/scripts/init-top/udev | 30 + .../usr/share/initramfs-tools/scripts/local | 131 +++ .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 + .../initramfs-tools/scripts/local-premount/fixrtc | 64 ++ .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 + .../initramfs-tools/scripts/local-premount/resume | 75 ++ .../usr/share/initramfs-tools/scripts/nfs | 83 ++ .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 + .../initramfs-tools/scripts/panic/console_setup | 82 ++ .../usr/share/initramfs-tools/scripts/panic/keymap | 27 + .../share/initramfs-tools/scripts/panic/plymouth | 18 + .../ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm | 18 + .../ogFSHlnk/old/initramfs-tools-OG/conf.d/resume | 1 + .../ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks | 40 + .../ogFSHlnk/old/initramfs-tools-OG/initramfs.conf | 72 ++ .../old/ogFSHlnk/old/initramfs-tools-OG/modules | 13 + .../old/ogFSHlnk/old/initramfs-tools-OG/scripts/og | 140 +++ .../old/initramfs-tools-OG/update-initramfs.conf | 20 + .../ogClient/old/serverstructure/etc/exports.txt | 1 + .../old/serverstructure/etc/samba/smb.conf.txt | 29 + .../old/serverstructure/init/defaultTESTING.sh | 46 + .../old/serverstructure/preinit/defaultTESTING.sh | 27 + .../serverstructure/preinit/loadenvironTESTING.sh | 95 ++ .../serverstructure/preinit/loadmodulesTESTING.sh | 28 + .../serverstructure/var/lib/tftpboot/defaultFULL | 18 + 152 files changed, 10952 insertions(+) create mode 100644 client/ogClient/INSTALL.es.txt create mode 100644 client/ogClient/clientstructure/etc/apt/sources.list.debian create mode 100644 client/ogClient/clientstructure/etc/apt/sources.list.ubuntu create mode 100644 client/ogClient/clientstructure/etc/environment create mode 100644 client/ogClient/clientstructure/etc/fstab create mode 100755 client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks create mode 100644 client/ogClient/clientstructure/etc/initramfs-tools/modules create mode 100644 client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions create mode 100755 client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit create mode 100644 client/ogClient/clientstructure/etc/inittab create mode 100644 client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf create mode 100644 client/ogClient/clientstructure/etc/mtab create mode 100644 client/ogClient/clientstructure/etc/network/interfaces create mode 100755 client/ogClient/clientstructure/etc/profile.d/loadenviron.sh create mode 100644 client/ogClient/clientstructure/etc/ssh/ssh_config create mode 100644 client/ogClient/clientstructure/etc/ssh/sshd_config create mode 100755 client/ogClient/clientstructure/root/CompileSoftware.sh create mode 100755 client/ogClient/clientstructure/root/ConfFS.sh create mode 100755 client/ogClient/clientstructure/root/GenerateInitrd.generic.sh create mode 100755 client/ogClient/clientstructure/root/InstallSoftware.sh create mode 100755 client/ogClient/clientstructure/root/ReconfigureLocales.sh create mode 100755 client/ogClient/clientstructure/root/generateSshKeysClient.sh create mode 100755 client/ogClient/clientstructure/root/importSshKeys.sh create mode 100755 client/ogClient/clientstructure/root/qemu.sh create mode 100644 client/ogClient/clientstructure/var/lib/locales/supported.d/local create mode 100644 client/ogClient/kernelParameterOG.es.txt create mode 100755 client/ogClient/ogClientGeneratorV2.sh create mode 100644 client/ogClient/ogClientManager.lib create mode 100644 client/ogClient/ogInstaller.lib create mode 100755 client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib create mode 100644 client/ogClient/old/ModificacionesNecesiariasENGINE/readme create mode 100755 client/ogClient/old/Net.lib create mode 100755 client/ogClient/old/boot/default.sh create mode 100644 client/ogClient/old/boot/load2fs.sh create mode 100644 client/ogClient/old/conframfs.sh create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup create mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap create mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth create mode 100644 client/ogClient/old/initramfs-tools-OG/conf.d/mdadm create mode 100644 client/ogClient/old/initramfs-tools-OG/conf.d/resume create mode 100755 client/ogClient/old/initramfs-tools-OG/hooks/oghooks create mode 100644 client/ogClient/old/initramfs-tools-OG/initramfs.conf create mode 100644 client/ogClient/old/initramfs-tools-OG/modules create mode 100755 client/ogClient/old/initramfs-tools-OG/scripts/og create mode 100644 client/ogClient/old/initramfs-tools-OG/update-initramfs.conf create mode 100755 client/ogClient/old/ogClientFunctions create mode 100755 client/ogClient/old/ogClientGenerator.sh create mode 100755 client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib create mode 100644 client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme create mode 100755 client/ogClient/old/ogFSHlnk/boot/default.sh create mode 100644 client/ogClient/old/ogFSHlnk/boot/load2fs.sh create mode 100755 client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup create mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap create mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth create mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm create mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume create mode 100755 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks create mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf create mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules create mode 100755 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og create mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf create mode 100644 client/ogClient/old/serverstructure/etc/exports.txt create mode 100644 client/ogClient/old/serverstructure/etc/samba/smb.conf.txt create mode 100755 client/ogClient/old/serverstructure/init/defaultTESTING.sh create mode 100755 client/ogClient/old/serverstructure/preinit/defaultTESTING.sh create mode 100755 client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh create mode 100755 client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh create mode 100644 client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL diff --git a/client/ogClient/INSTALL.es.txt b/client/ogClient/INSTALL.es.txt new file mode 100644 index 00000000..b357595b --- /dev/null +++ b/client/ogClient/INSTALL.es.txt @@ -0,0 +1,46 @@ +########## INSTALACION ################################## + +### NOTA principal: utilizar el usuario root para este proceso #### +1. Comprobar la conexión a internet, sobre todo si usas proxy. El hecho de que te funcione apt-get no significa que tengas el proxy configurado. +1. Descargar del subversion la estrucutura del cliente. + +# reubicacion al trunk/client/boot + +Proceso: +0. Si ya tenemos un /var/lib/tftpboot/ogclient lo renombramos por si acaso. +1. Descargar del subversion la rama ogClient. +3. Ejecutar el instalador: + +mv /opt/opengnsys/tftpboot/ogclient/ /opt/opengnsys/tftpboot/ogclientTrunk; +svn checkout http://www.opengnsys.es/svn/branches/ogClient /tmp/opengnsys_installer/opengnsys/installer/ogClient; +svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/shared/ /tmp/opengnsys_installer/opengnsys/client/shared; +svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/engine/ /tmp/opengnsys_installer/opengnsys/client/engine; +find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null; +/tmp/opengnsys_installer/opengnsys/installer/ogClient/ogClientGeneratorV2.sh; + + + +NOTA: el proceso tardará un buen rato, dependiendo de nuestras circustancias. +NOTA: crea un kernel, initrd, ogclient.img en /var/lib/tftpboot/ogclient +NOTA: el ogclient.img es el Segundo sistema de archivos en formato fichero bloques emulando a disco con partición primaria. +NOTA: el ogclient.sqfs es el Segundo sistema de archivos (partición primaria del img) en formato squashfs. Se usará con el parámetro og2nd=sqfs +NOTA: los logs de instalación estarán en /tmp/opengnsys_installation.log + + + NOTA A RECORDAR: + NOTA ACLARATORIA: $OGSCRITPS(reboot,poweroff) antes de /sbin/{reboot,poweroff} + + ################## Descripcion de la estrucutra de ogClient. + los directorios old y serverstrucutre son antiguos, pero no borrarlos. + INSTALL.es.txt : este mismo archivo. + ogInstaller.lib : son todas las funciones de instalacion del instalador oficial de opengnys. Algunas de ellas son utilizadas. Crear ticket para separar las funciones de iinstalacion del proceso de instalacion. + ogClientManager.lib: son las funicones especificas para la instalacion del ogclient. estan escritas en orden de que son llamadas por el instalador, (ogClientGeneratorV2.sh) + ogClientGeneratorV2.sh. Es el guión de ejecución del isntalador. + + + + ############ ERROR PRINCIPAL 2 ####### + necesita que en el equipo donde se ejecuta el scripts, disponga de la estrucutra /opt/opengnsys/client + sobre todo los lib/fonts, el lib/pci.ids el bin/browser y el bin/ogAdmClient + + diff --git a/client/ogClient/clientstructure/etc/apt/sources.list.debian b/client/ogClient/clientstructure/etc/apt/sources.list.debian new file mode 100644 index 00000000..495e48d4 --- /dev/null +++ b/client/ogClient/clientstructure/etc/apt/sources.list.debian @@ -0,0 +1,4 @@ +deb http://ftp.us.debian.org/debian lenny main contrib non-free + +deb http://security.debian.org/ lenny/updates main contrib non-free +deb-src http://security.debian.org/ lenny/updates main contrib non-free diff --git a/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu b/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu new file mode 100644 index 00000000..29348ccc --- /dev/null +++ b/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu @@ -0,0 +1,56 @@ +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted +## Major bug fix updates produced after the final release of the +## distribution. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team. Also, please note that software in universe WILL NOT receive any +## review or updates from the Ubuntu security team. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team, and may not be under a free licence. Please satisfy yourself as to +## your rights to use the software. Also, please note that software in +## multiverse WILL NOT receive any review or updates from the Ubuntu +## security team. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse + +## Uncomment the following two lines to add software from the 'backports' +## repository. +## N.B. software from this repository may not have been tested as +## extensively as that contained in the main release, although it includes +## newer versions of some applications which may provide useful features. +## Also, please note that software in backports WILL NOT receive any review +## or updates from the Ubuntu security team. +# deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse +# deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse + +## Uncomment the following two lines to add software from Canonical's +## 'partner' repository. +## This software is not part of Ubuntu, but is offered by Canonical and the +## respective vendors as a service to Ubuntu users. +# deb http://archive.canonical.com/ubuntu OSCODENAME partner +# deb-src http://archive.canonical.com/ubuntu OSCODENAME partner + + +deb http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted +deb http://security.ubuntu.com/ubuntu OSCODENAME-security universe +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security universe +deb http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse + + +deb http://archive.ubuntu.com/ubuntu OSCODENAME main +deb http://free.nchc.org.tw/drbl-core drbl stable +deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe multiverse +deb http://ppa.launchpad.net/freenx-team/ubuntu/ OSCODENAME main +deb http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main +deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main diff --git a/client/ogClient/clientstructure/etc/environment b/client/ogClient/clientstructure/etc/environment new file mode 100644 index 00000000..bb529d99 --- /dev/null +++ b/client/ogClient/clientstructure/etc/environment @@ -0,0 +1,4 @@ +LC_TYPE=es_ES@euro +LC_ALL=es_ES@euro +LANG=es_ES@euro +LANGUAGE=es_ES@euro \ No newline at end of file diff --git a/client/ogClient/clientstructure/etc/fstab b/client/ogClient/clientstructure/etc/fstab new file mode 100644 index 00000000..d7473df4 --- /dev/null +++ b/client/ogClient/clientstructure/etc/fstab @@ -0,0 +1,13 @@ +# /etc/fstab: static file system information. +# +# Use 'blkid -o value -s UUID' to print the universally unique identifier +# for a device; this may be used with UUID= as a more robust way to name +# devices that works even if disks are added and removed. See fstab(5). +# +# +proc /proc proc 0 0 +/dev/sda1 ext3 errors=remount-ro 0 1 + + + + diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks b/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks new file mode 100755 index 00000000..15fd01cc --- /dev/null +++ b/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks @@ -0,0 +1,58 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + +#@file oghooks +#@brief configuración initrd para OpenGnSys +#@warning +#@version 0.9 - estrucura opengnsys, bash-static, unionfs, atheros +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; +mkdir -p ${DESTDIR}/ogboot; +mkdir -p ${DESTDIR}/boot; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash +copy_exec /usr/bin/unionfs-fuse +copy_exec /sbin/mount.cifs + + +# Insert OpenGnsys Engine +#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + +rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl* +manual_add_modules cifs +manual_add_modules smbfs +manual_add_modules atl1e +manual_add_modules squashfs + + diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/modules b/client/ogClient/clientstructure/etc/initramfs-tools/modules new file mode 100644 index 00000000..8bac1d4b --- /dev/null +++ b/client/ogClient/clientstructure/etc/initramfs-tools/modules @@ -0,0 +1,14 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +vga16b +vesafb +fbcon + diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions new file mode 100644 index 00000000..ce2716db --- /dev/null +++ b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions @@ -0,0 +1,427 @@ +#@file ogfunctions.lib +#@brief Librería o clase para la generación del 1erFS +#@class client +#@brief Funciones para la generación del primers sistema (initrd) +#@version 0.91 +#@warning License: GNU GPLv3+ + + + + +ogExportKernelParameters () +{ + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done +return 0 +} + +ogExportVarEnvironment () +{ + #puntos de accesos al servidor ogprotocol=nfs + export NFSROOTBOOT="/var/lib/tftpboot" + export NFSCLIENTDIR="/opt/opengnsys/client" + export NFSLOGDIR="/opt/opengnsys/log/clients" + export NFSIMGDIR="/opt/opengnsys/images" + #puntos de accesos al servidor ogprotocol=smb + export SMBROOTBOOT="tftpboot" + export SMBCLIENTDIR="ogclient" + export SMBLOGDIR="oglog" + export SMBIMGDIR="ogimages" + + #puntos de montaje local ram o cache + export LOCALCLIENTDIR="/opt/opengnsys" + export LOCALLOGDIR="/opt/opengnsys/log" + export LOCALIMGDIR="/opt/opengnsys/images" + export LOCALROOTBOOT="/opt/og2fs/tftpboot" #punto de montaje del contendor tftpboot + export LOCALROOTIMG="/opt/og2fs/2ndfs" #punto de montaje donde se accede al 2nd FS mediante loop + export LOCALROOTRAM="/opt/og2fs/1stfs" #punto de montaje para unionfs + export LOCALROOTUNION="/opt/og2fs/unionfs" #punto de union entreo LOCALROOTIMG y LOCALROOTRAM + ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES. + #ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd. + #IPV4DDR + #IPV4BROADCAST + #IPV4NETMASK + #IPV4GATEWAY + #DNS0 DNS1 + #HOSTNAME + #ROOTSERVER #ip del servidor pxe que ha servido el kernel + #REPOSERVER=ogrepo -> ogConectROOTSERVER() ip del servidor de images para separar serviicios. + return 0 +} + +ogConfigureRamfs () +{ + mkdir -p $LOCALROOTBOOT + mkdir -p $LOCALROOTIMG + mkdir -p $LOCALROOTRAM + mkdir -p $LOCALROOTUNION +} + +ogLoadNetModule () +{ + #cargando netmodule + if [ -n "$ognetmodule" ] + then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` + fi +} + + +ogPostConfigureFS() +{ + # configuramos el /etc/hostname. + echo $HOSTNAME > /etc/hostname + + #configuramos el /etc/hosts + echo "127.0.0.1 localhost" > /etc/hosts + echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts + + #configuramos el host.conf + echo "order hosts,bind" > /etc/host.conf + echo "multi on" >> /etc/host.conf + + # configuramos el /etc/networks + #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}') + NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ") + echo "default 0.0.0.0" > /etc/networks + echo "loopback 127.0.0.0" >> /etc/networks + echo "link-local 169.254.0.0" >> /etc/networks + echo "localnet $NETIP" >> /etc/networks + #route +} + + + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +return 0 +} + +ogConectROOTSERVER () +{ +local OPTIONS +#params a detectar +if [ $ogrepo ] +then + # Validar si la ip es correcta + ROOTREPO=$ogrepo +else + ROOTREPO=$ROOTSERVER +fi + +case "$ogprotocol" in + cdrom) + echo "Montar imagen de CD-ROM" + blkid /dev/s* + mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT + ;; + httfs) + echo "protocolo httfs aun no soportado" + ;; + sshfs) + echo "protocolo sshfs aun no soportado" + ;; + smb) + echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol" + OPTIONS=" -o user=opengnsys,pass=og" + mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS + mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS + mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS + mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro + ;; + nfs) + echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol" + nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR + nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR + nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT + nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR + ;; +esac +} + +ogMerge2ndFile() +{ +if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ] +then + cat /proc/mounts > /tmp/mtab.preunion + if [ "$og2nd" == "img" ] + then + #para acceder al img + losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256 + mount /dev/loop0 $LOCALROOTIMG + else + ## para acceder al squashfs + mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop + fi + for i in etc var lib bin sbin usr root boot; do + unionmount $i + done + cat /tmp/mtab.preunion > /etc/mtab +else + echo "Fichero imagen del cliente no encontrado" + return 1 +fi +} + + +unionmount() +{ + tmpdir=/$1 #dir + FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" + UNION_OPT="-o cow -o noinitgroups" + UBIN="unionfs-fuse" + #UPATH="/unionfs" + #LOCALROOTIMG="/opt/og2fs/2ndfs" + #LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs + #LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM + #mkdir -p $LOCALROOTRAM #/unionfs/host + #mkdir -p $LOCALROOTUNION #/unionfs/union + mkdir -p $LOCALROOTRAM$tmpdir + #mount --bind /$tmpdir $LOCALROOTRAM$tmpdir + U1STDIR="${LOCALROOTRAM}${tmpdir}=RW" + U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO" + UNIONDIR=$LOCALROOTUNION$tmpdir + mkdir -p $UNIONDIR + $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR + mount --bind $UNIONDIR $tmpdir +} + + +unionmountOLD() +{ + FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" + UNION_OPT="-o cow -o noinitgroups" + UPATH="/unionfs" + UBIN="unionfs-fuse" + mkdir -p /unionfs/host + mkdir -p /unionfs/union + dir=$1 + mkdir -p /unionfs/host/$dir + #mount --bind /$dir /unionfs/host/$dir + mkdir -p /unionfs/union/$dir + host="/unionfs/host/${dir}=RW" + common="/opt/og2fs/${dir}=RO" + $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir + mount --bind /unionfs/union/$dir /$dir +} + +ogconfigure_lo() +{ +# for the portmapper we need localhost +ifconfig lo 127.0.0.1 +#/etc/init.d/portmap start +} + +ogconfigure_networking() +{ +IP=$IPOPTS +# http://paste.ubuntu.com/427631/ Paste from yofel at Tue, 4 May 2010 13:49:56 +0000 + if [ -n "${BOOTIF}" ]; then + # pxelinux sets BOOTIF to a value based on the mac address of the + # network card used to PXE boot, so use this value for DEVICE rather + # than a hard-coded device name from initramfs.conf. this facilitates + # network booting when machines may have multiple network cards. + # pxelinux sets BOOTIF to 01-$mac_address + + # strip off the leading "01-", which isn't part of the mac + # address + temp_mac=${BOOTIF#*-} + + # convert to typical mac address format by replacing "-" with ":" + bootif_mac="" + IFS='-' + for x in $temp_mac ; do + if [ -z "$bootif_mac" ]; then + bootif_mac="$x" + else + bootif_mac="$x:$bootif_mac" + fi + done + unset IFS + + # look for devices with matching mac address, and set DEVICE to + # appropriate value if match is found. + for device in /sys/class/net/* ; do + if [ -f "$device/address" ]; then + current_mac=$(cat "$device/address") + if [ "$bootif_mac" = "$current_mac" ]; then + DEVICE=${device##*/} + break + fi + fi + done + fi + + # networking already configured thus bail out + [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 + + # support ip options see linux sources + # Documentation/filesystems/nfsroot.txt + # Documentation/frv/booting.txt + + for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do + + # The NIC is to be configured if this file does not exist. + # Ip-Config tries to create this file and when it succeds + # creating the file, ipconfig is not run again. + if [ -e /tmp/net-"${DEVICE}".conf ]; then + break; + fi + + case ${IP} in + none|off) + # Do nothing + ;; + ""|on|any) + # Bring up device + echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " + ipconfig -t ${ROUNDTTT} ${DEVICE} + ;; + dhcp|bootp|rarp|both) + echo "Setting $DEVICE with (dhcp) kernel params $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " + ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} + ;; + *) + echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} -d $IP " + ipconfig -t ${ROUNDTTT} -d $IP + + # grab device entry from ip option + NEW_DEVICE=${IP#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IP}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac + done + + # source ipconfig output + if [ -n "${DEVICE}" ]; then + # source specific bootdevice + . /tmp/net-${DEVICE}.conf + else + # source any interface as not exaclty specified + . /tmp/net-*.conf + fi +} + + ##################################################################### +# Ask yesno question. +# +# Usage: yesno OPTIONS QUESTION +# +# Options: +# --timeout N Timeout if no input seen in N seconds. +# --default ANS Use ANS as the default answer on timeout or +# if an empty answer is provided. +# +# Exit status is the answer. 0=yes 1=no + +ogYesNo() +{ + local ans + local ok=0 + local timeout=0 + local default + local t + + while [[ "$1" ]] + do + case "$1" in + --default) + shift + default=$1 + if [[ ! "$default" ]]; then error "Missing default value"; fi + t=$(echo $default | tr '[:upper:]' '[:lower:]') + + if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then + error "Illegal default answer: $default" + fi + default=$t + shift + ;; + + --timeout) + shift + timeout=$1 + if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi + #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi + shift + ;; + + -*) + error "Unrecognized option: $1" + ;; + + *) + break + ;; + esac + done + + if [[ $timeout -ne 0 && ! "$default" ]]; then + error "Non-zero timeout requires a default answer" + fi + + if [[ ! "$*" ]]; then error "Missing question"; fi + + while [[ $ok -eq 0 ]] + do + if [[ $timeout -ne 0 ]]; then + if ! read -t $timeout -p "$*" ans; then + ans=$default + else + # Turn off timeout if answer entered. + timeout=0 + if [[ ! "$ans" ]]; then ans=$default; fi + fi + else + read -p "$*" ans + if [[ ! "$ans" ]]; then + ans=$default + else + ans=$(echo $ans | tr '[:upper:]' '[:lower:]') + fi + fi + + if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then + ok=1 + fi + + if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi + done + [[ "$ans" = "y" || "$ans" == "yes" ]] +} + + diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit new file mode 100755 index 00000000..a6c05d5e --- /dev/null +++ b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit @@ -0,0 +1,111 @@ +# OpenGnsys oginit -*- shell-script -*- + +#@file oginit +#@brief Guion modificador inicio initrd para OpenGnSys +#@warning +#@version 0.1 - basado en ROOTfs +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2009/00/00 +#@version 0.2 - basado en el instalador de ubunto +#@author Alejandro Castillo +#@author Ramón Gómez +#@author Irina +#@author Antonio Doblas +#@date 2010/00/00 +#@version 0.7 - Generación limpia con mkinitrd, busybox +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/05/24 +#@version 0.8 - Integración con FileSystem externo +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/06/24 +#@version 0.8.1 - UnionFS + squasfs +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/06/29 + +#*/ + + + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + . /scripts/functions + . /scripts/ogfunctions + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N " + [ $? == 0 ] && sh || echo " " + + set -a + log_success_msg "Checking kernel parameters" + ogExportKernelParameters + log_success_msg "Checking Opengnys Environmnet" + ogExportVarEnvironment + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N " + [ $? == 0 ] && sh || echo " " + ogConfigureRamfs + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N " + [ $? == 0 ] && sh || echo " " + ogLoadNetModule + + #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + #run_scripts /scripts/og-premount + #[ "$quiet" != "y" ] && log_end_msg + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N " + [ $? == 0 ] && sh || echo " " + ogconfigure_networking + log_success_msg "config networking" + ogconfigure_lo + log_success_msg "config loopback" + + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N " + [ $? == 0 ] && sh || echo " " + ogGetROOTSERVER && log_success_msg "Get Info from pxe server" + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before conect with og Services : y/N " + [ $? == 0 ] && sh || echo " " + ogConectROOTSERVER && log_success_msg "Conecting with og services" || sh + # ogConectROOTMEDIA + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before merge the Second File System with initrd (First File System) : y/N " + [ $? == 0 ] && sh || echo " " + ogMerge2ndFile && log_success_msg "Merge onto Second File System" + + + #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + #run_scripts /scripts/og-bottom + #[ "$quiet" != "y" ] && log_end_msg + + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N " + [ $? == 0 ] && sh || echo " " + ogPostConfigureFS + setupcon -k + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N " + [ $? == 0 ] && sh || echo " " + +if [ "$oginit" ] +then + exec $oginit +else + exec init +fi + + + + + +} diff --git a/client/ogClient/clientstructure/etc/inittab b/client/ogClient/clientstructure/etc/inittab new file mode 100644 index 00000000..94c30028 --- /dev/null +++ b/client/ogClient/clientstructure/etc/inittab @@ -0,0 +1,14 @@ +# This is run first except when booting in single-user mode +# +#::sysinit:/opt/opengnsys/etc/preinit/defaultTESTING.sh +# /bin/sh invocations on selected ttys +# +# Start an "askfirst" shell on the console (whatever that may be) +#::askfirst:/bin/sh +# Start an "askfirst" shell on /dev/tty2-4 +#tty1::respawn:/sbin/getty 38400 tty1 +tty1::respawn:/opt/opengnsys/etc/preinit/defaultTESTING.sh +tty2::respawn:/sbin/getty 38400 tty2 +tty3::respawn:/sbin/getty 38400 tty3 +tty4::respawn:/sbin/getty 38400 tty4 +tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf b/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf new file mode 100644 index 00000000..8b047e4e --- /dev/null +++ b/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf @@ -0,0 +1,30 @@ +# Framebuffer drivers are generally buggy and poorly-supported, and cause +# suspend failures, kernel panics and general mayhem. For this reason we +# never load them automatically. +blacklist aty128fb +blacklist atyfb +#blacklist radeonfb +blacklist cirrusfb +blacklist cyber2000fb +blacklist cyblafb +blacklist gx1fb +blacklist hgafb +blacklist i810fb +blacklist intelfb +blacklist kyrofb +blacklist lxfb +blacklist matroxfb_base +blacklist neofb +blacklist nvidiafb +blacklist pm2fb +blacklist rivafb +blacklist s1d13xxxfb +blacklist savagefb +blacklist sisfb +blacklist sstfb +blacklist tdfxfb +blacklist tridentfb +#blacklist vesafb +blacklist vfb +blacklist viafb +blacklist vt8623fb diff --git a/client/ogClient/clientstructure/etc/mtab b/client/ogClient/clientstructure/etc/mtab new file mode 100644 index 00000000..e69de29b diff --git a/client/ogClient/clientstructure/etc/network/interfaces b/client/ogClient/clientstructure/etc/network/interfaces new file mode 100644 index 00000000..dbe43582 --- /dev/null +++ b/client/ogClient/clientstructure/etc/network/interfaces @@ -0,0 +1,4 @@ +auto lo +iface lo inet loopback +auto eth0 +iface eth0 inet dhcp \ No newline at end of file diff --git a/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh b/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh new file mode 100755 index 00000000..0bf46a3e --- /dev/null +++ b/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh @@ -0,0 +1,84 @@ +#!/bin/bash +#/** +#@file loadenviron.sh +#@brief Script de carga de la API de funciones de OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + +# FIXME Temporal +export LANG="${LANG:-es_ES}" + +#/// Directorios del projecto OpenGNSys. +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" +if [ -d $OPENGNSYS ]; then + export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + +# export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH + # export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH + + #/// Cargar fichero de idioma. + LANGFILE=$OGETC/lang.$LANG.conf + if [ -f $LANGFILE ]; then + source $LANGFILE + #for i in $(grep "^[a-zA-Z].*=" $LANGFILE | cut -f1 -d=); do + for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do + export $i + done + fi + #/// Cargar API de funciones. + echo "$MSG_LOADAPI" + for i in $OGAPI/*.lib; do + source $i + done + for i in $(typeset -F | cut -f3 -d" "); do + export -f $i + done + # Carga de las API testing + if [ "$engine" = "testing" ] + then + for i in $OGAPI/*.testing; do + source $i + done + fi + # Añadir dependencia de arquitectura + ARCH=$(ogGetArch) + if [ -n "$ARCH" ]; then + # export PATH=$OGBIN/$ARCH:$PATH + # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH + fi + # Fichero de registros. + export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + # FIXME Pruebas para grupos de ordenadores + #export OGGROUP=$(ogGetGroup) + export OGGROUP=aula3 +fi + +#/// Declaración de códigos de error. +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + + diff --git a/client/ogClient/clientstructure/etc/ssh/ssh_config b/client/ogClient/clientstructure/etc/ssh/ssh_config new file mode 100644 index 00000000..7f9319dc --- /dev/null +++ b/client/ogClient/clientstructure/etc/ssh/ssh_config @@ -0,0 +1,56 @@ + +# This is the ssh client system-wide configuration file. See +# ssh_config(5) for more information. This file provides defaults for +# users, and the values can be changed in per-user configuration files +# or on the command line. + +# Configuration data is parsed as follows: +# 1. command line options +# 2. user-specific file +# 3. system-wide file +# Any configuration value is only changed the first time it is set. +# Thus, host-specific definitions should be at the beginning of the +# configuration file, and defaults at the end. + +# Site-wide defaults for some commonly used options. For a comprehensive +# list of available options, their meanings and defaults, please see the +# ssh_config(5) man page. + +Host * +# ForwardAgent no +# ForwardX11 no +# ForwardX11Trusted yes +# RhostsRSAAuthentication no +# RSAAuthentication yes +# PasswordAuthentication yes + HostbasedAuthentication no +# GSSAPIAuthentication no +# GSSAPIDelegateCredentials no +# GSSAPIKeyExchange no +# GSSAPITrustDNS no +# BatchMode no +# CheckHostIP yes +# AddressFamily any +# ConnectTimeout 0 +# StrictHostKeyChecking ask +# IdentityFile ~/.ssh/identity +# IdentityFile ~/.ssh/id_rsa +# IdentityFile ~/.ssh/id_dsa +# Port 22 +# Protocol 2,1 +# Cipher 3des +# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc +# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 +# EscapeChar ~ +# Tunnel no +# TunnelDevice any:any +# PermitLocalCommand no +# VisualHostKey no + SendEnv LANG LC_* +# HashKnownHosts yes + GSSAPIAuthentication yes + GSSAPIDelegateCredentials no + + StrictHostKeyChecking no + UserKnownHostsFile=/dev/null + diff --git a/client/ogClient/clientstructure/etc/ssh/sshd_config b/client/ogClient/clientstructure/etc/ssh/sshd_config new file mode 100644 index 00000000..ea0303b3 --- /dev/null +++ b/client/ogClient/clientstructure/etc/ssh/sshd_config @@ -0,0 +1,86 @@ +# Package generated configuration file +# See the sshd_config(5) manpage for details + +# What ports, IPs and protocols we listen for +Port 22 +# Use these options to restrict which interfaces/protocols sshd will bind to +#ListenAddress :: +#ListenAddress 0.0.0.0 +Protocol 2 +# HostKeys for protocol version 2 +HostKey /etc/ssh/ssh_host_rsa_key +HostKey /etc/ssh/ssh_host_dsa_key +#Privilege Separation is turned on for security +UsePrivilegeSeparation yes + +# Lifetime and size of ephemeral version 1 server key +KeyRegenerationInterval 3600 +ServerKeyBits 768 + +# Logging +SyslogFacility AUTH +LogLevel INFO + +# Authentication: +LoginGraceTime 120 +PermitRootLogin yes +StrictModes yes + +RSAAuthentication yes +PubkeyAuthentication yes +#AuthorizedKeysFile %h/.ssh/authorized_keys + +# Don't read the user's ~/.rhosts and ~/.shosts files +IgnoreRhosts yes +# For this to work you will also need host keys in /etc/ssh_known_hosts +RhostsRSAAuthentication no +# similar for protocol version 2 +HostbasedAuthentication no +# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication +#IgnoreUserKnownHosts yes + +# To enable empty passwords, change to yes (NOT RECOMMENDED) +PermitEmptyPasswords no + +# Change to yes to enable challenge-response passwords (beware issues with +# some PAM modules and threads) +ChallengeResponseAuthentication no + +# Change to no to disable tunnelled clear text passwords +#PasswordAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosGetAFSToken no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +X11Forwarding yes +X11DisplayOffset 10 +PrintMotd no +PrintLastLog yes +TCPKeepAlive yes +#UseLogin no + +#MaxStartups 10:30:60 +#Banner /etc/issue.net + +# Allow client to pass locale environment variables +AcceptEnv LANG LC_* + +Subsystem sftp /usr/lib/openssh/sftp-server + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +UsePAM yes diff --git a/client/ogClient/clientstructure/root/CompileSoftware.sh b/client/ogClient/clientstructure/root/CompileSoftware.sh new file mode 100755 index 00000000..1a9b854a --- /dev/null +++ b/client/ogClient/clientstructure/root/CompileSoftware.sh @@ -0,0 +1,30 @@ +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + +#dpkg-divert --local --rename --add /sbin/initctl +#ln -s /bin/true /sbin/initctl + +apt-get -y update +# software to compile code +apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk + +source /opt/opengnsys/lib/engine/bin/ToolsGNU.c + +ctorrent install +udpcast install +#ntfs-3g install +ms-sys install + +wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh +gdebi -n partclone_0.2.16_i386.deb + + cd /tmp + wget http://damien.guibouret.free.fr/savepart.zip + unzip savepart.zip -d /sbin/ + + diff --git a/client/ogClient/clientstructure/root/ConfFS.sh b/client/ogClient/clientstructure/root/ConfFS.sh new file mode 100755 index 00000000..3e0f4b5c --- /dev/null +++ b/client/ogClient/clientstructure/root/ConfFS.sh @@ -0,0 +1,24 @@ +#!/bin/bash +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl +#mv /etc/fstab /etc/fstab.original 2>/dev/null +#mv /etc/mtab /etc/mtab.original 2>/dev/null + +#TODO: fichero etc/hosts +#TODO: fichero etc/resolv.conf +echo "ogClient" > /etc/hostname + +#export PASSROOT=og +#dpkg-reconfigure passwd +#echo "root:$PASSROOT" | chpasswd + + +#for i in pts/0 pts/1 pts/2 pts/3 do +# +# +#done +#TODO: introducir mas consoluas para el acceso como root. +echo "pts/0" >> /etc/securetty +echo "pts/1" >> /etc/securetty +echo "pts/2" >> /etc/securetty +echo "pts/3" >> /etc/securetty \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh b/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh new file mode 100755 index 00000000..eaeb475b --- /dev/null +++ b/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh @@ -0,0 +1,16 @@ +#!/bin/bash +export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null +#OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null +export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') +export OSRELEASE=$(uname -a | awk '{print $3}') +uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 +export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + + + +cd /usr/lib/initramfs-tools/bin/ +rm * +cp /bin/busybox ./ +cd /tmp/ +mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE +cp /boot/vmlinuz-$OSRELEASE /tmp \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/InstallSoftware.sh b/client/ogClient/clientstructure/root/InstallSoftware.sh new file mode 100755 index 00000000..da8d8d06 --- /dev/null +++ b/client/ogClient/clientstructure/root/InstallSoftware.sh @@ -0,0 +1,62 @@ +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + + +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl + +apt-get clean +apt-get -y update + + +# software system +apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE wget dialog man-db htop fbset gdebi-core busybox-static + +apt-get -y --force-yes install console-data locales + +# sofware networking +apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 unionfs-fuse open-iscsi nmap tcpdump arping dnsutils + +apt-get clean +# software services +apt-get -y --force-yes install openssh-server bittornado trickle iptraf screen schroot grub + +# software disk and filesystem +apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted ntfs-3g dosfstools +apt-get -y --force-yes install dmraid dmsetup lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools +apt-get -y --force-yes install btrfs-tools hfsplus hfsprogs hfsutils nilfs-tools reiser4progs ufsutils + +# software cloning +apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools +apt-get -y --force-yes install mbuffer + + +apt-get clean +## software postconf +apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk + +# software compressor +apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop pigz pbzip2 lbzip2 rzip p7zip-full unzip + +apt-get -y --force-yes remove busybox +apt-get -y --force-yes install busybox-static bash-static +apt-get clean +#apt-get -y --force-yes xorg-dev xorg lxde roxterm +# +#################################################################### +###################### Reconfigurando paquetes ###################### +################################################################### + + +#dpkg-reconfigure console-data +#dpkg-reconfigure console-setup +#dpkg-reconfigure locales +apt-get clean +##TODO################# Borrar algunos binarios del mkinitramfs + + diff --git a/client/ogClient/clientstructure/root/ReconfigureLocales.sh b/client/ogClient/clientstructure/root/ReconfigureLocales.sh new file mode 100755 index 00000000..5480d141 --- /dev/null +++ b/client/ogClient/clientstructure/root/ReconfigureLocales.sh @@ -0,0 +1,4 @@ +#!/bin/bash +dpkg-reconfigure console-data +dpkg-reconfigure console-setup +dpkg-reconfigure locales \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/generateSshKeysClient.sh b/client/ogClient/clientstructure/root/generateSshKeysClient.sh new file mode 100755 index 00000000..9857ad40 --- /dev/null +++ b/client/ogClient/clientstructure/root/generateSshKeysClient.sh @@ -0,0 +1,23 @@ +#!/bin/bash +echo "comprobando directorio .ssh del root" +if [ ! -d /root/.ssh ] +then + echo "creando directorio .ssh 600" + mkdir -p /root/.ssh + chmod 700 /root/.ssh +fi + + +echo "comprobando el fichero authorized_keys .ssh del root" +if [ ! -f /root/.ssh/authorized_keys ] +then + echo "creando el fichero authorized_keys" + touch /root/.ssh/authorized_keys + chmod 600 /root/.ssh/authorized_keys +fi + +ssh-keygen -q -f /root/.ssh/id_rsa -N "" +cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys + +## TODO: exportamos la publica a los repos +cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/importSshKeys.sh b/client/ogClient/clientstructure/root/importSshKeys.sh new file mode 100755 index 00000000..17a797f8 --- /dev/null +++ b/client/ogClient/clientstructure/root/importSshKeys.sh @@ -0,0 +1,17 @@ +#!/bin/bash +echo "comprobando directorio .ssh del root" +if [ ! -d /root/.ssh ] +then + echo "creando directorio .ssh 600" + mkdir -p /root/.ssh + chmod 700 /root/.ssh +fi +echo "creando el fichero authorized_keys" +touch /root/.ssh/authorized_keys +chmod 600 /root/.ssh/authorized_keys + +echo "importando la clave publica del servidor OG" +cat /tmp/id_rsa.pub + +[ -f /tmp/id_rsa.pub ] && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys || echo "no key publica og" + \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/qemu.sh b/client/ogClient/clientstructure/root/qemu.sh new file mode 100755 index 00000000..c5a93cd9 --- /dev/null +++ b/client/ogClient/clientstructure/root/qemu.sh @@ -0,0 +1,9 @@ +#/bin/bash + +mount -o rw,remount / +mount proc /proc -t proc +export PATH=$PATH dpkg -i *.deb +modprobe 8139too +modprobe 8139cp +dhclient +/etc/init.d/ssh restart \ No newline at end of file diff --git a/client/ogClient/clientstructure/var/lib/locales/supported.d/local b/client/ogClient/clientstructure/var/lib/locales/supported.d/local new file mode 100644 index 00000000..be3f2a41 --- /dev/null +++ b/client/ogClient/clientstructure/var/lib/locales/supported.d/local @@ -0,0 +1,5 @@ +es_ES ISO-8859-1 +es_ES@euro ISO-8859-15 +es_ES.UTF-8 UTF-8 +es_ES.UTF-8@euro UTF-8 +en_US.UTF-8 UTF-8 \ No newline at end of file diff --git a/client/ogClient/kernelParameterOG.es.txt b/client/ogClient/kernelParameterOG.es.txt new file mode 100644 index 00000000..890652b4 --- /dev/null +++ b/client/ogClient/kernelParameterOG.es.txt @@ -0,0 +1,29 @@ + +KERNEL ogclient/ogvmlinuz +initrd=ogclient/oginitrd.img + + + boot=oginit + + oginit=init|/bin/bash + + + ogrepo=ip del repositorio + + og2nd=sqfs|img + ogprotocol=smb|nfs + ogactiveadmin=true|false + ogdebug=true|false + + vga=788 + irqpoll + acpi=on + + +FIXME: en la version actual +repo=iprepoman +IP + +TODO: en la proxima version +ogrepo +ip \ No newline at end of file diff --git a/client/ogClient/ogClientGeneratorV2.sh b/client/ogClient/ogClientGeneratorV2.sh new file mode 100755 index 00000000..21449267 --- /dev/null +++ b/client/ogClient/ogClientGeneratorV2.sh @@ -0,0 +1,166 @@ +#!/bin/bash +#@file ogClientGenerator.sh +#@brief Script generación del cliente OpenGnSys +#@warning +#@version 0.9 - +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + + +#$1 OSCONENAME lucid karmic +#if [ $# -ne 1 ]; then +# echo ": invalid number of parameters" +# echo " host | lucid | karmic | jaunty | lenny | squeeze " +# exit 1 +#fi +TYPECLIENT=host + +# Solo ejecutable por usuario root +if [ "$(whoami)" != 'root' ] +then + echo "ERROR: this program must run under root privileges!!" + exit 1 +fi + + + +#FIXME: variables del instalador oficial. +WORKDIR=/tmp/opengnsys_installer +INSTALL_TARGET=/opt/opengnsys +LOG_FILE=/tmp/opengnsys_installation.log +PROGRAMDIR=$(readlink -e $(dirname "$0")) + + +#funciones especificas del cliente. +source $PROGRAMDIR/ogClientManager.lib +#funciones incluidas dentro del scritps general de instalacion. +source $PROGRAMDIR/ogInstaller.lib + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" +########################################################################## +## FASE 1 - Instalación de software adicional. +##TO DO Integrar en el instaldor. Actualizar repositorios +# Datos para la generación del cliente. +DEPENDENCIES=( debootstrap subversion schroot squashfs-tools) +apt-get update +# Instalación de dependencias (paquetes de sistema operativo). +declare -a notinstalled +checkDependencies DEPENDENCIES notinstalled +if [ $? -ne 0 ]; then + installDependencies notinstalled + if [ $? -ne 0 ]; then + echoAndLog "Error while installing some dependeces, please verify your server installation before continue" + exit 1 + fi +fi +############## FIN DEL TO DO +############################################## FIN FASE 1 + + + + + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + +############## FASE 2 - Asignación de variables +#obtenemos las variables necesarias. +ogClientVar +#obtenemos la información del host. +ogClientOsInfo +######################## FIN fase 2 + +############# FASE 3: Segundo Sistema archivos (img) Creación. +#TODO comprobacion de que el fichero esta creado. +file $OGCLIENTFILE | grep "partition 1: ID=0x83" +if [ $? == 1 ] +then + ##3.1 creación y formateo del disco virtual. generamos el dispositivo loop. + ogClient2ndFile || exit 1 +fi + + +#3.2 generamos el Sistema de archivos con debootstrap +# Comprobamos que ya tenemos alguno. +schroot -p -c IMGogclient -- touch /tmp/ogclientOK +if [ -f /tmp/ogclientOK ] +then + rm /tmp/ogclientOK +else + ogClient2ndFs $TYPECLIENT || exit +fi + + +############### FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot +cat /etc/schroot/schroot.conf | grep ogclient || ogClientSchrootConf + + +############### FASE 5: Configuración del Segundo Sistema de archivos (img) con la estructura especial de OpenGnsys +ogClient2ndSVN $TYPECLIENT || exit + + + + +############# FASE6: Ejecutamos los scripts de personalización del 2º sistema de archivos (img) desde la jaula schroot +### 6.1 instalacion de software con apt-get +schroot -p -c IMGogclient -- /root/InstallSoftware.sh +echo "saltando" + if [ $? -ne 0 ]; then + errorAndLog "Instalando sofware adicional OG : ERROR" + exit +else + echoAndLog "Instalando sofware adicional OG: OK" +fi +#### 6.2 compilación de software. +cd / +schroot -p -c IMGogclient -- /root/CompileSoftware.sh +cd - + +### 6.3 configuracion hostname passroot securety +cd / +schroot -c IMGogclient -- /root/ConfFS.sh +cd - +#schroot -c IMGogclient -- echo -ne "og1\nog1\n" | passwd root +# schroot -c IMGogclient -- passwd root | echo "root" + + +### 6.4 incorporamos la clave publica del servidor +cd / +ssh-keygen -q -f /root/.ssh/id_rsa -N "" +cp /root/.ssh/id_rsa.pub /tmp +schroot -p -c IMGogclient -- /root/importSshKeys.sh +cd - +############ y la del propio cliente. +schroot -c IMGogclient -- /root/generateSshKeysClient.sh + +## configuramos los locales. +schroot -c IMGogclient -- /root/ReconfigureLocales.sh + + +################## FIN fase 6. Fin de comfiguración del segundo sistema de archivos (img) + +################## FASE 7. Generamos el 1er sistema de archivos. INITRD +#nota el parametro es el "tipo" de linux generado en debootstrap. usar solo "host", es decir version,kernel ... del propio host +#nota: hace un schroot, al 2fs (img), ejecuta el fichero generateinitrd. +#nota: deja en el directorio tmp del host el nuevo initrd, y lo copia al tftpboot +ogClientInitrd $TYPECLIENT + + +################## FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) +# generamos el 2sistema de archivos en squashfs +ogClient2ndSqfs +################## FIN FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) + + +##################### FASE 9. algunos detallas del pxe +#dejamos ficheros de ejemplo para el pxe y el nfs +ogClientConfpxe +##################### FIN FASE 9. algunos detallas del pxe + + +# Mostrar sumario de la instalación e instrucciones de post-instalación. +installationSummary + +echoAndLog "OpenGnSys installation finished at $(date)" \ No newline at end of file diff --git a/client/ogClient/ogClientManager.lib b/client/ogClient/ogClientManager.lib new file mode 100644 index 00000000..85cd868f --- /dev/null +++ b/client/ogClient/ogClientManager.lib @@ -0,0 +1,607 @@ + +ogClientVar() +{ +export SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/installer/ogClient +export SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared +export SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine + +export OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ +export OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img +export OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount +# tamaño maximo limitado por schroot 2GB +export OGCLIENTSIZEMB=1900 +#export OGCLIENTSIZEMB=1000 +# export OGCLIENTSIZEKB=500 +export OGCLIENTLABEL=ogClient +#export OGLIB=/opt/opengnsys/client/lib +} + + + +function ogClientOsInfo () +{ +#TODO según host, un OSHHTP u otro OSARCH + #1 OSCODENAME jaunty|karmic|lucid + #devuelve OSDISTRIB(ubuntu,debian),OSCODENAME(lucid,karmic,squeeze):OGRELEASE:httpAPT + case $1 in + host | HOST) + export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') + export OSRELEASE=$(uname -a | awk '{print $3}') + uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + ;; + jaunty|JAUNTY) + export OSDISTRIB=ubuntu + export OSCODENAME=jaunty + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + ;; + lenny|LENNY) + export OSDISTRIB=debian + export OSCODENAME=lenny + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + squeeze|SQUEEZE) + export OSDISTRIB=debian + export OSCODENAME=squeeze + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + karmic|KARMIC) + export OSDISTRIB=ubuntu + export OSCODENAME=karmic + export OSRELEASE="2.6.31-14-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + lucid|LUCID) + export OSDISTRIB=ubuntu + export OSCODENAME=lucid + export OSRELEASE="2.6.32-21-generic-pae" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + *) + return 1 + ;; + esac + echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP +} + +#creación y formateo del disco virtual. +ogClient2ndFile () +{ +local RERROR DISKLOOP PARTLOOP #return code error +echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $OGCLIENTSIZEMB MB " +#Desmontamos por si acaso el dispositivo virtual +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $OGCLIENTMOUNT" +mkdir -p $OGCLIENTMOUNT +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Creando directorio $OGCLIENTMOUNT : ERROR" + return 1 +fi +echo "$FUNCNAME(): Creando el disco virtual que almacenará el FS del cliente $OGCLIENTSIZEMB MB de datos físicos" +dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB +#qemu-img create $OGCLIENTFILE 3G +#dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Creando el disco virtual: ERROR" + return 1 +fi + +DISKLOOP=$(losetup -f) +losetup $DISKLOOP $OGCLIENTFILE +echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria" +echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP +#echo $? +# da error, porque no puede actualizar el kernel. +#if [ $? -ne 0 ] +#then +# errorAndLog "$FUNCNAME(): Particionando el disco virutal: ERROR" +# return 1 +#fi + +echoAndLog "$FUNCNAME(): Desmontando $DISKLOOP despues del particionado " +losetup -d $DISKLOOP + +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR" + return 1 +fi + + +#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 +#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 +PARTLOOP=$(losetup -f) +echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP" +losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext3 -b 4096 -L $OGCLIENTLABEL $PARTLOOP +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR" + return 1 +fi +echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo " +losetup -d $PARTLOOP +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR" + return 1 +else + echoAndLog "$FUNCNAME(): $OGCLIENTFILE $OGCLIENTSIZEMB MB : OK" +fi +} + + + + + +ogClient2ndFs () +{ +ogClientOsInfo $1 +echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos " +#Montamos el dispositivo virtual en su punto de montaje. +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + +mount | grep $OGCLIENTMOUNT && echoAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 : FAILURE " + +#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} +debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} + + +if [ $? -ne 0 ]; then + errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP + : ha fallado!" + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + return 1 +else + echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP + : ok" + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + return 0 +fi + sleep 5 + +##preubas revisar OSRELEASE +#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +} + + + + +########## configura el segundo sistema de archivos +########### parametro: "host" +function ogClient2ndSVN() +{ +ogClientOsInfo $1 +#1 la salida de ogClientOsInfo +local LERROR +LERROR=TRUE +echoAndLog "$FUNCNAME: Iniciando la personalización con datos del SVN " +# comprobar que está montado $OGCLIENTMOUNT +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + +# parseamos del apt.source +sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Parsing apt.sources : ERROR" + return 1 +fi + +#parseamos el script de generación del initrd. +sed -e "s/OSRELEASE/$OSRELEASE/g" ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.sh +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Parsing GenerateInitrd.sh : ERROR" + return 1 +fi + +#damos permiso al directorio de scripts +chmod 775 ${SVNCLIENTDIR}/clientstructure/root/* + +# los copiamos +cp -prv ${SVNCLIENTDIR}/clientstructure/* $OGCLIENTMOUNT +mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/ +cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/ +cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/ + +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Copying client data : ERROR" + return 1 +fi + +# copiamos algunas cosas del nfsexport + +#### Tipos de letra para el Browser. +cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/lib/fonts +#### Crear enlaces para compatibilidad con las distintas versiones del Browser. +mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/ +ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts +ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/QtEmbedded-4.6.2/lib/fonts +ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/QtEmbedded-4.6.3/lib/fonts +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Linking Browser fonts : ERROR" + return 1 +fi + +# B ######################################################## +cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Copying pci.ids : ERROR" + return 1 +fi + +cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Copying Browser : ERROR" + return 1 +fi + +cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Copying ogAdmClient : ERROR" + return 1 +else + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + echoAndLog "$FUNCNAME: Finalizado: OK " + return 0 +fi +} + + +ogClientSchrootConf() +{ +echoAndLog "$FUNCNAME: Iniciando la configuración del schroot " +cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` +cat << EOF > /etc/schroot/schroot.conf +[IMGogclient] +type=loopback +file=/var/lib/tftpboot/ogclient/ogclient.img +description=ogclient ubuntu luc IMGi +priority=1 +users=root +groups=root +root-groups=root +mount-options=-o offset=32256 +root-users=root +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF +cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime` +cat << EOF > /etc/schroot/mount-defaults +# mount.defaults: static file system information for chroots. +# Note that the mount point will be prefixed by the chroot path +# (CHROOT_PATH) +# +# +proc /proc proc defaults 0 0 +#procbususb /proc/bus/usb usbfs defaults 0 0 +#/dev /dev none rw,bind 0 0 +/dev/pts /dev/pts none rw,bind 0 0 +/dev/shm /dev/shm none rw,bind 0 0 +#/home /home none rw,bind 0 0 +/tmp /tmp none rw,bind 0 0 +EOF + +echoAndLog "$FUNCNAME: Finalizado: OK " +return 0 +} + + + +########### param1 "host" +ogClientInitrd() +{ +ogClientVar +cd / +ogClientOsInfo $1 +schroot -c IMGogclient -- /root/GenerateInitrd.generic.sh +echo "cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR" +cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR +cp /tmp/initrd.img-${OSRELEASE} ${OGCLIENTBASEDIR}/oginitrd.img +cp /tmp/vmlinuz-${OSRELEASE} ${OGCLIENTBASEDIR}/ogvmlinuz +cd - +} + + +ogClient2ndSqfs() +{ +ogClientVar +echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs " +# si ya existe un sqfs lo renombramos +[ -f $OGCLIENTBASEDIR/ogclient.sqfs ] && mv $OGCLIENTBASEDIR/ogclient.sqfs $OGCLIENTBASEDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S` +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 +mksquashfs $OGCLIENTMOUNT $OGCLIENTBASEDIR/ogclient.sqfs +chmod 744 $OGCLIENTBASEDIR/ogclient.sqfs +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +} + + + + +ogClientSshkeys() +{ +echo comprobamos clave rsa en el host REPO OG. +if [ ! -f /root/.ssh/id_rsa.pub ] +then + echo "creando claves rsa" + ssh-keygen -q -f /root/.ssh/id_dsa -t dsa -N "opengnsys" +else + echo "la claves ya estan creadas" +fi +echo "copiamos la clave publica a /tmp" +cp /root/.ssh/id_dsa.pub /tmp + +cat /tmp/id_dsa.pub + +echo "schroot con instrucciones." +schroot -c IMGogclient -- /root/importSshKeys.sh + +echo "limpiando" +rm /tmp/id_dsa.pub + +## copiamos ssh rsa del host al guest como authorized-key2 +##rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +##cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +##mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT +} + + +ogClientConfpxe() +{ +################## DEJAMOS FICHERO DE EJEMPLOS PARA: +#default +cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient +LABEL pxe-${OGRELEASE} +KERNEL ogclient/vmlinuz-$OGRELEASE +APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= +LABEL pxe-2.6.32-21-generic-pae +KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs +LABEL cache +KERNEL grub.exe +APPEND --config-file="find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img" +LABEL net +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae" +LABEL IfNOTcacheGOnet +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot" +#LABEL pxe-2.6.32-21-generic-pae +#KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +#APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=172.17.32.242 +#LABEL grub +#KERNEL grub.exe +#APPEND keeppxe +FIN +#/etc/hosts +echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient +/etc/init.d/nfs-kernel-server restart +##################################################################### +} + + + +############### No usados en el instalador, solo en actualizaciones. +#/** +# ogClientMount [str_program] +#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones +#@return Si no hay parametros: login de acceso. +#@return con un parametro: La salida del programa ejecutado +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## +function ogClientMount () +{ + #TODO comprobar que OGFILE y OGFILEMOUNT existe. + mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc + mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys + mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp + mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev + mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts + + + [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`) + [ $# = 1 ] && chroot $OGCLIENTMOUNT $1 + +} + +#/** +# ogClientUnmount +#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys +#@param +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientUnmount () +{ + cd /tmp + echo "desmontando cliente espere" + sleep 5 + mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount + mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount + mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount + mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount + mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount + mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount + #-d -f -l + +} + + +############################ hasta el final del archivo antiguos +############################# ANTIGUOS +function ogClientGetRelease () +{ + #1 OSCODENAME jaunty|karmic|lucid + case $1 in + jaunty|JAUNTY) + OSCODENAME=jaunty + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + lenny|LENNY) + OSCODENAME=lenny + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + squeeze|SQUEEZE) + OSCODENAME=squeeze + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + karmic|KARMIC) + OSCODENAME=karmic + OGRELEASE="2.6.31-14-generic" + echo $OGRELEASE + ;; + lucid|LUCID) + OSCODENAME=lucid + OGRELEASE="2.6.32-21-generic-pae" + echo $OGRELEASE + ;; + *) + return 1 + ;; + esac + +} + + +#/** +# ogClientGenerator str_versionUbuntu str_release +#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Versión de ubuntu a generar, jaunty karmic +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientGeneratorDebootstrap () +{ + if [ $# != 2 ] + then + echo Debes introducir como argumento1: jaunty karmic lucid + echo Debes introducir como argumento2: la release + echo utiliza como entrada ogClientCheckVersion + return + fi + OSCODENAME=$1 + OGRELEASE=$2 + + # instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema + #apt-get install gdebi-core + #wget $LASTDEBOOTSTRAP + #gdebi -n debootstrap_1.0.20_all.deb + + #Desmontamos por si acaso el dispositivo virtual + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + + #Creamos el directorio donde montaremos el disco virtual + mkdir -p $OGCLIENTMOUNT + + #Creamos el disco virtual con el filesystem del cliente. + dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB + #qemu-img create $OGCLIENTFILE 3G + #dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB + + + #particionamos el disco virtual + losetup /dev/loop0 $OGCLIENTFILE + echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk /dev/loop0 + losetup -d /dev/loop0 + + + #formateamos la particion principal. + losetup -o 32256 /dev/loop1 $OGCLIENTFILE + mkfs.ext3 -b 4096 -L $OGCLIENTLABEL /dev/loop1 + #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 + #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 + losetup -d /dev/loop1 + + #Montamos el dispositivo virtual en su punto de montaje. + mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + + #TODO Comprobar arquitectura + #Iniciamos la creación del sistema en el directorio de clientes. + #echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + debootstrap --include=linux-image-${OGRELEASE},linux-headers-${OGRELEASE} --arch=i386 --components=main,universe $OSCODENAME $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + ##preubas + #debootstrap --include=linux-image-${OGRELEASE} --arch=i386 --variant=minbase $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + #debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + + if [ $? -ne 0 ]; then + errorAndLog "ogClientGeneratorDebootstrap(): ha fallado!" + return 1 + else + echoAndLog "ogClientGeneratorDebootstrap(): ok" + return 0 + fi + sleep 5 + +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTFILE + +cat << EOF > /etc/schroot/schroot.conf +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF +} + + + + + diff --git a/client/ogClient/ogInstaller.lib b/client/ogClient/ogInstaller.lib new file mode 100644 index 00000000..af0f18df --- /dev/null +++ b/client/ogClient/ogInstaller.lib @@ -0,0 +1,958 @@ +#!/bin/bash + + +##################################################################### +####### Algunas funciones útiles de propósito general: +##################################################################### +function getDateTime() +{ + echo `date +%Y%m%d-%H%M%S` +} + +# Escribe a fichero y muestra por pantalla +function echoAndLog() +{ + echo $1 + FECHAHORA=`getDateTime` + echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE +} + +function errorAndLog() +{ + echo "ERROR: $1" + FECHAHORA=`getDateTime` + echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE +} + +# comprueba si el elemento pasado en $2 esta en el array $1 +function isInArray() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + echoAndLog "${FUNCNAME}(): checking if $2 is in $1" + local deps + eval "deps=( \"\${$1[@]}\" )" + elemento=$2 + + local is_in_array=1 + # copia local del array del parametro 1 + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + if [ "${deps[$i]}" = "${elemento}" ]; then + echoAndLog "isInArray(): $elemento found in array" + is_in_array=0 + fi + done + + if [ $is_in_array -ne 0 ]; then + echoAndLog "${FUNCNAME}(): $elemento NOT found in array" + fi + + return $is_in_array + +} + +##################################################################### +####### Funciones de manejo de paquetes Debian +##################################################################### + +function checkPackage() +{ + package=$1 + if [ -z $package ]; then + errorAndLog "checkPackage(): parameter required" + exit 1 + fi + echoAndLog "checkPackage(): checking if package $package exists" + dpkg -s $package | grep Status | grep -qw install &>/dev/null + if [ $? -eq 0 ]; then + echoAndLog "checkPackage(): package $package exists" + return 0 + else + echoAndLog "checkPackage(): package $package doesn't exists" + return 1 + fi +} + +# recibe array con dependencias +# por referencia deja un array con las dependencias no resueltas +# devuelve 1 si hay alguna dependencia no resuelta +function checkDependencies() +{ + if [ $# -ne 2 ]; then + errorAndLog "checkDependencies(): invalid number of parameters" + exit 1 + fi + + echoAndLog "checkDependencies(): checking dependences" + uncompletedeps=0 + + # copia local del array del parametro 1 + local deps + eval "deps=( \"\${$1[@]}\" )" + + declare -a local_notinstalled + + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + checkPackage ${deps[$i]} + if [ $? -ne 0 ]; then + local_notinstalled[$uncompletedeps]=$package + let uncompletedeps=uncompletedeps+1 + fi + done + + # relleno el array especificado en $2 por referencia + for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ )) + do + eval "${2}[$i]=${local_notinstalled[$i]}" + done + + # retorna el numero de paquetes no resueltos + echoAndLog "checkDependencies(): dependencies uncompleted: $uncompletedeps" + return $uncompletedeps +} + +# Recibe un array con las dependencias y lo instala +function installDependencies() +{ + if [ $# -ne 1 ]; then + errorAndLog "installDependencies(): invalid number of parameters" + exit 1 + fi + echoAndLog "installDependencies(): installing uncompleted dependencies" + + # copia local del array del parametro 1 + local deps + eval "deps=( \"\${$1[@]}\" )" + + local string_deps="" + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + string_deps="$string_deps ${deps[$i]}" + done + + if [ -z "${string_deps}" ]; then + errorAndLog "installDependencies(): array of dependeces is empty" + exit 1 + fi + + OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND + export DEBIAN_FRONTEND=noninteractive + + echoAndLog "installDependencies(): now ${string_deps} will be installed" + apt-get -y install --force-yes ${string_deps} + if [ $? -ne 0 ]; then + errorAndLog "installDependencies(): error installing dependencies" + return 1 + fi + + DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND + echoAndLog "installDependencies(): dependencies installed" +} + +# Hace un backup del fichero pasado por parámetro +# deja un -last y uno para el día +function backupFile() +{ + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local fichero=$1 + local fecha=`date +%Y%m%d` + + if [ ! -f $fichero ]; then + errorAndLog "${FUNCNAME}(): file $fichero doesn't exists" + return 1 + fi + + echoAndLog "${FUNCNAME}(): realizando backup de $fichero" + + # realiza una copia de la última configuración como last + cp -p $fichero "${fichero}-LAST" + + # si para el día no hay backup lo hace, sino no + if [ ! -f "${fichero}-${fecha}" ]; then + cp -p $fichero "${fichero}-${fecha}" + fi + + echoAndLog "${FUNCNAME}(): backup realizado" +} + +##################################################################### +####### Funciones para el manejo de bases de datos +##################################################################### + +# This function set password to root +function mysqlSetRootPassword() +{ + if [ $# -ne 1 ]; then + errorAndLog "mysqlSetRootPassword(): invalid number of parameters" + exit 1 + fi + + local root_mysql=$1 + echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server" + /usr/bin/mysqladmin -u root password ${root_mysql} + if [ $? -ne 0 ]; then + errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server" + return 1 + fi + echoAndLog "mysqlSetRootPassword(): root password saved!" + return 0 +} + +# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente +function mysqlGetRootPassword(){ + local pass_mysql + local pass_mysql2 + # Comprobar si MySQL está instalado con la clave de root por defecto. + if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then + echoAndLog "${FUNCNAME}(): Using default mysql root password." + else + stty -echo + echo "Existe un servicio mysql ya instalado" + read -p "Insertar clave de root de Mysql: " pass_mysql + echo "" + read -p "Confirmar clave:" pass_mysql2 + echo "" + stty echo + if [ "$pass_mysql" == "$pass_mysql2" ] ;then + MYSQL_ROOT_PASSWORD=$pass_mysql + echo "La clave es: ${MYSQL_ROOT_PASSWORD}" + return 0 + else + echo "Las claves no coinciden no se configura la clave del servidor de base de datos." + echo "las operaciones con la base de datos daran error" + return 1 + fi + fi +} + +# comprueba si puede conectar con mysql con el usuario root +function mysqlTestConnection() +{ + if [ $# -ne 1 ]; then + errorAndLog "mysqlTestConnection(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + echoAndLog "mysqlTestConnection(): checking connection to mysql..." + echo "" | mysql -uroot -p"${root_password}" + if [ $? -ne 0 ]; then + errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!" + return 1 + else + echoAndLog "mysqlTestConnection(): connection success" + return 0 + fi +} + +# comprueba si la base de datos existe +function mysqlDbExists() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlDbExists(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + echoAndLog "mysqlDbExists(): checking if $database exists..." + echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$" + if [ $? -ne 0 ]; then + echoAndLog "mysqlDbExists():database $database doesn't exists" + return 1 + else + echoAndLog "mysqlDbExists():database $database exists" + return 0 + fi +} + +function mysqlCheckDbIsEmpty() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..." + num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l` + if [ $? -ne 0 ]; then + errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password" + exit 1 + fi + + if [ $num_tablas -eq 0 ]; then + echoAndLog "mysqlCheckDbIsEmpty():database $database is empty" + return 0 + else + echoAndLog "mysqlCheckDbIsEmpty():database $database has tables" + return 1 + fi + +} + + +function mysqlImportSqlFileToDb() +{ + if [ $# -ne 3 ]; then + errorAndLog "${FNCNAME}(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + local sqlfile=$3 + + if [ ! -f $sqlfile ]; then + errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!" + return 1 + fi + + echoAndLog "${FUNCNAME}(): importing sql file to ${database}..." + perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DEFAULTUSER/$OPENGNSYS_DB_DEFAULTUSER/g; s/DEFAULTPASSWD/$OPENGNSYS_DB_DEFAULTPASSWD/g" $sqlfile + mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $sqlfile + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database" + return 1 + fi + echoAndLog "${FUNCNAME}(): file imported to database $database" + return 0 +} + +# Crea la base de datos +function mysqlCreateDb() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + + echoAndLog "${FUNCNAME}(): creating database..." + mysqladmin -u root --password="${root_password}" create $database + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while creating database $database" + return 1 + fi + echoAndLog "${FUNCNAME}(): database $database created" + return 0 +} + + +function mysqlCheckUserExists() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlCheckUserExists(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local userdb=$2 + + echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..." + echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user + if [ $? -ne 0 ]; then + echoAndLog "mysqlCheckUserExists(): user doesn't exists" + return 1 + else + echoAndLog "mysqlCheckUserExists(): user already exists" + return 0 + fi + +} + +# Crea un usuario administrativo para la base de datos +function mysqlCreateAdminUserToDb() +{ + if [ $# -ne 4 ]; then + errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters" + exit 1 + fi + + local root_password=$1 + local database=$2 + local userdb=$3 + local passdb=$4 + + echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}" + + cat > $WORKDIR/create_${database}.sql < ${basetftp}/pxelinux.cfg/default < /dev/null + if [ $? -eq 0 ]; then + echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting" + return 0 + fi + + cadenaexport="${export}" + for parametro in $* + do + if [ $contador -gt 0 ] + then + host=`echo $parametro | awk -F: '{print $1}'` + options=`echo $parametro | awk -F: '{print $2}'` + if [ "${host}" == "" ]; then + errorAndLog "${FUNCNAME}(): host can't be empty" + return 1 + fi + cadenaexport="${cadenaexport}\t${host}" + + if [ "${options}" != "" ]; then + cadenaexport="${cadenaexport}(${options})" + fi + fi + let contador=contador+1 + done + + echo -en "$cadenaexport\n" >> /etc/exports + + echoAndLog "${FUNCNAME}(): add $export to /etc/exports" + + return 0 +} + +######################################################################## +## Configuracion servicio DHCP +######################################################################## + +function dhcpConfigure() +{ + echoAndLog "${FUNCNAME}(): Sample DHCP Configuration." + + backupFile /etc/dhcp3/dhcpd.conf + + sed -e "s/SERVERIP/$SERVERIP/g" \ + -e "s/NETIP/$NETIP/g" \ + -e "s/NETMASK/$NETMASK/g" \ + -e "s/NETBROAD/$NETBROAD/g" \ + -e "s/ROUTERIP/$ROUTERIP/g" \ + -e "s/DNSIP/$DNSIP/g" \ + $WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while configuring dhcp server" + return 1 + fi + + /etc/init.d/dhcp3-server restart + echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"." + return 0 +} + + +##################################################################### +####### Funciones específicas de la instalación de Opengnsys +##################################################################### + +# Copiar ficheros del OpenGnSys Web Console. +function installWebFiles() +{ + echoAndLog "${FUNCNAME}(): Installing web files..." + cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para doxigen + if [ $? != 0 ]; then + errorAndLog "${FUNCNAME}(): Error copying web files." + exit 1 + fi + find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null + # Cambiar permisos para ficheros especiales. + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \ + $INSTALL_TARGET/www/includes \ + $INSTALL_TARGET/www/comandos/gestores/filescripts \ + $INSTALL_TARGET/www/images/iconos + echoAndLog "${FUNCNAME}(): Web files installed successfully." +} + +# Configuración específica de Apache. +function openGnsysInstallWebConsoleApacheConf() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + local path_apache2_confd=$2 + local path_web_console=${path_opengnsys_base}/www + + if [ ! -d $path_apache2_confd ]; then + errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation" + return 1 + fi + + mkdir -p $path_apache2_confd/{sites-available,sites-enabled} + + echoAndLog "${FUNCNAME}(): creating apache2 config file.." + + + # genera configuración + cat > $path_opengnsys_base/etc/apache.conf < + Options -Indexes FollowSymLinks + DirectoryIndex acceso.php + +EOF + + ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf + ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation" + return 1 + else + echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon" + /etc/init.d/apache2 restart + return 0 + fi +} + +# Crear documentación Doxygen para la consola web. +function makeDoxygenFiles() +{ + echoAndLog "${FUNCNAME}(): Making Doxygen web files..." + $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \ + $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www + if [ ! -d "$INSTALL_TARGET/www/html" ]; then + errorAndLog "${FUNCNAME}(): unable to create Doxygen web files." + return 1 + fi + mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api" + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api + echoAndLog "${FUNCNAME}(): Doxygen web files created successfully." +} + + +# Crea la estructura base de la instalación de opengnsys +function openGnsysInstallCreateDirs() +{ + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + + echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base" + + mkdir -p $path_opengnsys_base + mkdir -p $path_opengnsys_base/admin/{autoexec,comandos,menus,usuarios} + mkdir -p $path_opengnsys_base/bin + mkdir -p $path_opengnsys_base/client + mkdir -p $path_opengnsys_base/doc + mkdir -p $path_opengnsys_base/etc + mkdir -p $path_opengnsys_base/lib + mkdir -p $path_opengnsys_base/log/clients + mkdir -p $path_opengnsys_base/sbin + mkdir -p $path_opengnsys_base/www + mkdir -p $path_opengnsys_base/images + ln -fs /var/lib/tftpboot $path_opengnsys_base + ln -fs $path_opengnsys_base/log /var/log/opengnsys + + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" + return 1 + fi + + echoAndLog "${FUNCNAME}(): directory paths created" + return 0 +} + +# Copia ficheros de configuración y ejecutables genéricos del servidor. +function openGnsysCopyServerFiles () { + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + + local SOURCES=( client/boot/initrd-generator \ + client/boot/upgrade-clients-udeb.sh \ + client/boot/udeblist.conf \ + client/boot/udeblist-jaunty.conf \ + client/boot/udeblist-karmic.conf \ + client/boot/udeblist-lucid.conf \ + server/PXE/pxelinux.cfg/default \ + doc ) + local TARGETS=( bin/initrd-generator \ + bin/upgrade-clients-udeb.sh \ + etc/udeblist.conf \ + etc/udeblist-jaunty.conf \ + etc/udeblist-karmic.conf \ + etc/udeblist-lucid.conf \ + tftpboot/pxelinux.cfg/default \ + doc ) + + if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then + errorAndLog "${FUNCNAME}(): inconsistent number of array items" + exit 1 + fi + + echoAndLog "${FUNCNAME}(): copying files to server directories" + + pushd $WORKDIR/opengnsys + local i + for (( i = 0; i < ${#SOURCES[@]}; i++ )); do + if [ -f "${SOURCES[$i]}" ]; then + echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + cp -p "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}" + elif [ -d "${SOURCES[$i]}" ]; then + echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}" + else + echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + fi + done + popd +} + +#################################################################### +### Funciones de compilación de códifo fuente de servicios +#################################################################### + +# Compilar los servicios de OpenGNsys +function servicesCompilation () +{ + local hayErrores=0 + + # Compilar OpenGnSys Server + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmServer + make && make install + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Repository Manager + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmRepo + make && make install + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Client + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient + make && mv ogAdmClient ../../../client/nfsexport/bin + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client" + hayErrores=1 + fi + popd + + return $hayErrores +} + + +#################################################################### +### Funciones instalacion cliente opengnsys +#################################################################### + +function openGnsysClientCreate() +{ + local OSDISTRIB OSCODENAME + + local hayErrores=0 + + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." + cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client + find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." + mkdir -p $INSTALL_TARGET/client/lib/engine/bin + cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while copying engine files" + hayErrores=1 + fi + + # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). + OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then + echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME." + $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME" + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" + hayErrores=1 + fi + echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME." + $INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME" + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" + hayErrores=1 + fi + else + echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files." + $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/ + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" + hayErrores=1 + fi + echoAndLog "${FUNCNAME}(): Loading default udeb files." + $INSTALL_TARGET/bin/upgrade-clients-udeb.sh + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" + hayErrores=1 + fi + fi + + if [ $hayErrores -eq 0 ]; then + echoAndLog "${FUNCNAME}(): Client generation success." + else + errorAndLog "${FUNCNAME}(): Client generation with errors" + fi + + return $hayErrores +} + + +# Configuración básica de servicios de OpenGnSys +function openGnsysConfigure() +{ + echoAndLog "openGnsysConfigure(): Copying init files." + cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys + cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.default /etc/default/opengnsys + update-rc.d opengnsys defaults + echoAndLog "openGnsysConfigure(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"." + perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmServer.cfg + perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg + echoAndLog "${FUNCNAME}(): Creating Web Console config file" + OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys" + perl -pi -e "s/SERVERIP/$SERVERIP/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php + sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Services/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg + echoAndLog "openGnsysConfiguration(): Starting OpenGnSys services." + /etc/init.d/opengnsys start +} + + +##################################################################### +####### Función de resumen informativo de la instalación +##################################################################### + +function installationSummary(){ + echo + echoAndLog "OpenGnSys Installation Summary" + echo "==============================" + echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)" + echoAndLog "Installation directory: $INSTALL_TARGET" + echoAndLog "Repository directory: $INSTALL_TARGET/images" + echoAndLog "TFTP configuracion directory: /var/lib/tftpboot" + echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf" + echoAndLog "NFS configuracion file: /etc/exports" + echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" + echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER" + echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD" + echoAndLog "Web Console default user: $OPENGNSYS_DB_DEFAULTUSER" + echoAndLog "Web Console default password: $OPENGNSYS_DB_DEFAULTPASSWD" + echo + echoAndLog "Post-Installation Instructions:" + echo "===============================" + echoAndLog "Review or edit all configuration files." + echoAndLog "Insert DHCP configuration data and restart service." + echoAndLog "Log-in as Web Console admin user." + echoAndLog " - Review default Organization data and default user." + echoAndLog "Log-in as Web Console organization user." + echoAndLog " - Insert OpenGnSys data (rooms, computers, etc)." +echo +} + diff --git a/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib b/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib new file mode 100755 index 00000000..14806b7e --- /dev/null +++ b/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib @@ -0,0 +1,77 @@ +#!/bin/bash +#/** +#@file Net.lib +#@brief Librería o clase Net +#@class Net +#@brief Funciones básicas de red. +#@version 1.0 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogGetHostname +#@brief Muestra el nombre del cliente. +#@return str_host - nombre de máquina +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetHostname () +{ +local HOST NETFILE +# Tomar nombre de la variable HOSTNAME +HOST="$HOSTNAME" + +# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) +[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} + END {print host} + ' /var/lib/dhcp3/dhclient.leases) +# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ +[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} + $1~/hostname/ {print $2}' /proc/cmdline) + +[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" +echo $HOST +} + + +#/** +# ogGetIpAddress +#@brief Muestra la dirección IP del sistema +#@return str_ip - Dirección IP +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetIpAddress () +{ +local IP +#Version og2ndFS +NETFILE="/tmp/net-eth0.conf" +[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) + +# Obtener direcciones IP. /* (comentario para Doxygen) +[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') +# Mostrar sólo la primera. (comentario para Doxygen) */ +echo ${IP%% *} +} + + +#/** +# ogGetMacAddress +#@brief Muestra la dirección Ethernet del cliente. +#@return str_ether - Dirección Ethernet +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetMacAddress () +{ +local MAC +# Obtener direcciones Ethernet. +MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') +# Mostrar sólo la primera. +echo ${MAC%% *} +} + diff --git a/client/ogClient/old/ModificacionesNecesiariasENGINE/readme b/client/ogClient/old/ModificacionesNecesiariasENGINE/readme new file mode 100644 index 00000000..9078de1b --- /dev/null +++ b/client/ogClient/old/ModificacionesNecesiariasENGINE/readme @@ -0,0 +1,27 @@ +Moverse al etc del cliente. +cd /opt/opengnsys/client/etc + +preinit/default + modificamos el sha-bang a /bin/bash + eliminamos enlace del bash + Ejecute solo el loadmodules del for + +preinit/loaenviron + comentamos el LD_PATH + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/opt/drbl/sbin + + +dejar en bin solo el browser y el ogadmcliente + +/var/lib/tftboot/pxelinux.cfg/default +DEFAULT pxe2 +LABEL pxe +KERNEL linux +APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin +LABEL pxe2 +KERNEL vmlinuz-2.6.32-21-generic-pae +APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 + + +parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN +temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/ogClient/old/Net.lib b/client/ogClient/old/Net.lib new file mode 100755 index 00000000..14806b7e --- /dev/null +++ b/client/ogClient/old/Net.lib @@ -0,0 +1,77 @@ +#!/bin/bash +#/** +#@file Net.lib +#@brief Librería o clase Net +#@class Net +#@brief Funciones básicas de red. +#@version 1.0 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogGetHostname +#@brief Muestra el nombre del cliente. +#@return str_host - nombre de máquina +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetHostname () +{ +local HOST NETFILE +# Tomar nombre de la variable HOSTNAME +HOST="$HOSTNAME" + +# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) +[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} + END {print host} + ' /var/lib/dhcp3/dhclient.leases) +# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ +[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} + $1~/hostname/ {print $2}' /proc/cmdline) + +[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" +echo $HOST +} + + +#/** +# ogGetIpAddress +#@brief Muestra la dirección IP del sistema +#@return str_ip - Dirección IP +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetIpAddress () +{ +local IP +#Version og2ndFS +NETFILE="/tmp/net-eth0.conf" +[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) + +# Obtener direcciones IP. /* (comentario para Doxygen) +[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') +# Mostrar sólo la primera. (comentario para Doxygen) */ +echo ${IP%% *} +} + + +#/** +# ogGetMacAddress +#@brief Muestra la dirección Ethernet del cliente. +#@return str_ether - Dirección Ethernet +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetMacAddress () +{ +local MAC +# Obtener direcciones Ethernet. +MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') +# Mostrar sólo la primera. +echo ${MAC%% *} +} + diff --git a/client/ogClient/old/boot/default.sh b/client/ogClient/old/boot/default.sh new file mode 100755 index 00000000..e8c5b5d2 --- /dev/null +++ b/client/ogClient/old/boot/default.sh @@ -0,0 +1,23 @@ +#!/opt/opengnsys/bin/bash + +set -a + +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} +#### FIXME EN PRUEBAS +OGLOGFILE=/var/log/opengnsys.log + +/opt/opengnsys/etc/init/load2fs.sh +source /opt/opengnsys/etc/preinit/loadenviron.sh +export PATH=/opt/og2fs/bin:$PATH +export PATH=/opt/og2fs/sbin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + echo "$MSG_LAUNCHCLIENT" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE +fi + +bash +# FIXME Arranque Browser +#browser -qws $OGSTARTPAGE diff --git a/client/ogClient/old/boot/load2fs.sh b/client/ogClient/old/boot/load2fs.sh new file mode 100644 index 00000000..ca3e3be7 --- /dev/null +++ b/client/ogClient/old/boot/load2fs.sh @@ -0,0 +1,19 @@ +#!/bin/bash +#/** +#@file load2fs.sh +#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Antonio J. Doblas Viso, Unviersidad de Malaga. +#@date 2010-02-15 +#*/ +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro +cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +export PATH=/opt/og2fs/sbin:$PATH +export PATH=/opt/og2fs/bin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/ogClient/old/conframfs.sh b/client/ogClient/old/conframfs.sh new file mode 100644 index 00000000..851928d5 --- /dev/null +++ b/client/ogClient/old/conframfs.sh @@ -0,0 +1,34 @@ +#!/bin/bash +#/** +#@file conframfs.sh +#@brief Script de inicio para configurar el 2º FileSystem linkado. +#@version 1.0 +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2010-06-02 +#*/ +#sustituido por la funcion ogPostConfigureFS + +MSG_LOADMODULES=${MSG_CONFRAMFS:-"."} +echo "$MSG_CONFRAMFS" + +# configuramos el /etc/hostname. +HOSTNAME=$(ogGetHostname) +echo $HOSTNAME > /etc/hostname + + +#configuramos el /etc/hosts +IP=$(ogGetIpAddress) +echo "127.0.0.1 localhost" > /etc/hosts +echo "$IP $HOSTNAME" >> /etc/hosts + +### conft net +echo "auto lo " > /etc/network/interfaces +echo "iface lo inet loopback" >> /etc/network/interfaces + + +mkdir -p /var/run/network +cd /var/run/network +touch ifstate + +/etc/init.d/networking restart +ifup lo diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox new file mode 100755 index 00000000..da2dc637 Binary files /dev/null and b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox new file mode 100755 index 00000000..d04890f6 Binary files /dev/null and b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root new file mode 100755 index 00000000..aecb5e32 Binary files /dev/null and b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions new file mode 100644 index 00000000..2610f79a --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions @@ -0,0 +1,461 @@ +# -*- shell-script -*- + +catenate_cpiogz() { + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 + return + fi + + cat "${1}" >>"${__TMPCPIOGZ}" +} + +force_load() +{ + manual_add_modules ${@} + echo "${@}" >>"${DESTDIR}/conf/modules" +} + +# Takes a file containing a list of modules to be added as an +# argument, figures out dependancies, and adds them. +# +# Input file syntax: +# +# # comment +# modprobe_module_name [args ...] +# [...] +# +add_modules_from_file() +{ + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 + return + fi + + sed -e '/^#/d' ${1} | while read module rest; do + force_load "${module}" "${rest}" + done +} + +# Is this module available? +have_module() +{ + modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" >/dev/null 2>&1 +} + +# Add dependent modules + eventual firmware +manual_add_modules() +{ + local mam_x firmwares firmware + + for mam_x in $(modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do + # Prune duplicates + if [ -e "${DESTDIR}/${mam_x}" ]; then + continue + fi + + mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" + ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" + if [ "${verbose}" = "y" ]; then + echo "Adding module ${mam_x}" + fi + + # Add firmware files if necessary + firmwares=$(modinfo -F firmware "${mam_x}") + if [ -z "${firmwares}" ]; then + continue + fi + for firmware in $firmwares; do + if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ + || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then + continue + fi + + # Only print warning for missing fw of loaded module + # or forced loaded module + if [ ! -e "/lib/firmware/${firmware}" ] \ + && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then + if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ + /proc/modules \ + || grep -q "^$(basename "${mam_x}" .ko)" \ + "${CONFDIR}/modules"; then + echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 + fi + continue + fi + + if [ -e "/lib/firmware/${version}/${firmware}" ]; then + copy_exec "/lib/firmware/${version}/${firmware}" + else + copy_exec "/lib/firmware/${firmware}" + fi + if [ "${verbose}" = "y" ]; then + echo "Adding firmware ${firmware}" + fi + done + done +} + +# $1 is the source path (e.g. /usr/bin/time) +# $2 is the relative destination (e.g. /usr or /usr/time) +# +# The destination is interpreted in the same way "cp" would, meaning +# (assuming /bin is a directory): +# +# "copy_exec /usr/bin/time /bin" -> /bin/time +# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime +# +# If $2 is left out, the same destination path as for the source arg will +# be used and directories will be created as needed, so: +# +# "copy_exec /usr/bin/time" -> /usr/bin/time +# +copy_exec() { + local source target destination final_destination x nonoptlib + local libname dirname + + source="${1}" + if [ -n "${2}" ]; then + target="${2}" + else + if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then + mkdir -p "${DESTDIR}/$(dirname "${1}")" + fi + target="${1}" + fi + + if [ -d "${DESTDIR}/${target}" ]; then + destination="${target}/$(basename "${source}")" + else + destination="${target}" + fi + final_destination="${DESTDIR}/${destination}" + + if [ -L "$final_destination" ]; then + if [ $(readlink "${final_destination}") != "${source}" ]; then + echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 + return + fi + else + ln -s ${source} ${DESTDIR}/${destination} + if [ "${verbose}" = "y" ]; then + echo "Adding binary ${source}" + fi + fi + + # Copy the dependant libraries + for x in $(ldd ${source} 2>/dev/null | sed -e ' + /\//!d; + /linux-gate/d; + /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; + s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do + + # Try to use non-optimised libraries where possible. + # We assume that all HWCAP libraries will be in tls, + # sse2, vfp or neon + nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') + + if [ -e "${nonoptlib}" ]; then + x="${nonoptlib}" + fi + + libname=$(basename "${x}") + dirname=$(dirname "${x}") + + mkdir -p "${DESTDIR}/${dirname}" + if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then + ln -s "${x}" "${DESTDIR}/${dirname}" + if [ "${verbose}" = "y" ]; then + echo "Adding library ${x}" + fi + fi + done +} + +# Copy entire subtrees to the initramfs +copy_modules_dir() +{ + local x_mod + + if ! [ -d "${MODULESDIR}/${1}" ]; then + return; + fi + if [ "${verbose}" = "y" ]; then + echo "Copying module directory ${1}" + fi + for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do + manual_add_modules $(basename ${x_mod} .ko) + done +} + +# walk /sys for relevant modules +sys_walk_mod_add() +{ + local driver_path module + device_path="$1" + + while [ "${device_path}" != "/sys" ]; do + driver_path="$(readlink -f ${device_path}/driver)" + if [ -e "$driver_path" ]; then + module="$(basename $(readlink -f $driver_path))" + if [ -n "${module}" ]; then + force_load "${module}" + fi + fi + device_path="$(dirname ${device_path})" + done +} + +# walk /sys for relevant modalias +sys_walk_modalias() +{ + local device_path modalias + + device_path="$(dirname "${1}")" + device_path="$(dirname "${device_path}")" + if [ -e "${device_path}/modalias" ]; then + modalias=$(cat "${device_path}/modalias") + fi + + if [ -n "${modalias}" ]; then + force_load "${modalias}" + fi +} + +# find and only copy root relevant modules +dep_add_modules() +{ + local block minor root FSTYPE root_dev_path x + + # findout root block device + fstype + eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" + if [ "${root}" = "/dev/root" ] ; then + root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null + fi + root="$(readlink -f ${root})" + + # find out real rootfs on auto type + if [ "${FSTYPE}" = "auto" ]; then + eval "$(/usr/lib/klibc/bin/fstype ${root})" + fi + + # check that fstype rootfs recognition + if [ "${FSTYPE}" = "unknown" ]; then + echo "mkinitramfs: unknown fstype on root ${root}" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report bug on initramfs-tools" + exit 1 + fi + + # Add rootfs + manual_add_modules "${FSTYPE}" + + # lvm luks root + if [ "${root#/dev/mapper/}" != "${root}" ]; then + minor=$((0x$(stat --format "%T" ${root}) % 256)) + block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) + if [ "${block#dm-}" != "${block}" ]; then + block=$(ls -1 /sys/block/${block}/slaves | head -n 1) + fi + block=${block%%[0-9]*} + # md root new naming scheme /dev/md/X + elif [ "${root#/dev/md/}" != "${root}" ]; then + root=${root#/dev/md/} + block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # md root /dev/mdX + elif [ "${root#/dev/md}" != "${root}" ]; then + root=${root#/dev/} + block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # mmc always uses numbering in the devicename (mmcblk[0-9]) + elif [ "${root#/dev/mmc}" != "${root}" ]; then + block=${root#/dev/} + block=${block%%p[0-9]*} + # classical root device + else + block=${root#/dev/} + block=${block%%[0-9]*} + fi + + # Error out if /sys lack block dev + if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then + echo "mkinitramfs: missing ${block} root ${root} /sys entry" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report the bug" + exit 1 + fi + + # sys walk ATA + root_dev_path=$(readlink -f /sys/block/${block}/device) + sys_walk_mod_add ${root_dev_path} + + # catch old-style IDE + if [ -e /sys/bus/ide/devices/ ]; then + sys_walk_modalias ${root_dev_path} + manual_add_modules ide-disk + manual_add_modules ide-cd + fi + + if [ -e /sys/bus/scsi/devices/ ]; then + manual_add_modules sd_mod + fi + + if [ -e /sys/bus/i2o/devices/ ]; then + force_load i2o_block + force_load i2o_config + fi + + if [ -e /sys/bus/ps3_system_bus/ ]; then + for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do + manual_add_modules "${x}" + done + fi + + if [ -e /sys/bus/vio/ ]; then + for x in sunvnet sunvdc; do + manual_add_modules "${x}" + done + fi +} + + +# The modules "most" classes added per default to the initramfs +auto_add_modules() +{ + case "$1" in + base) + for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ + hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ + hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ + hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ + hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ + ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ + virtio_pci vfat nls_cp437 nls_iso8859-1; do + manual_add_modules "${x}" + done + ;; + net) + for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ + cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ + ep93xx_eth eql fealnx famachi forcedeth gelic_net \ + hp100 igb ipg mace mv643xx_eth myri10ge \ + natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ + r8169 s2io sis900 skge sky2 slhc smc911x starfire \ + sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ + de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ + typhon via-rhine via-velocity virtio_net yellowfin; do + manual_add_modules "${x}" + done + ;; + ide) + copy_modules_dir kernel/drivers/ide + ;; + scsi) + copy_modules_dir kernel/drivers/scsi + for x in mptfc mptsas mptscsih mptspi; do + manual_add_modules "${x}" + done + ;; + ata) + copy_modules_dir kernel/drivers/ata + ;; + block) + copy_modules_dir kernel/drivers/block + copy_modules_dir kernel/drivers/usb/storage + ;; + # FIXME: can be removed after Lenny release + ieee1394) + for x in ohci1394 sbp2; do + manual_add_modules "${x}" + done + ;; + firewire) + for x in firewire-ohci firewire-sbp2; do + manual_add_modules "${x}" + done + ;; + i2o) + for x in i2o_block; do + manual_add_modules "${x}" + done + ;; + dasd) + for x in dasd_eckd_mod dasd_fba_mod; do + manual_add_modules "${x}" + done + ;; + *) + auto_add_modules base + auto_add_modules net + auto_add_modules ide + auto_add_modules scsi + auto_add_modules block + auto_add_modules ata + auto_add_modules i2o + auto_add_modules dasd + auto_add_modules ieee1394 + auto_add_modules firewire + ;; + esac +} + +usage() +{ + cat >&2 << EOF + +Usage: ${0} [OPTION]... <-o outfile> [version] + +Options: + -d confdir Specify an alternative configuration directory. + -k Keep temporary directory used to make the image. + -o outfile Write to outfile. + -r root Override ROOT setting in mkinitrd.conf. + +See mkinitramfs(8) for further details. +EOF + exit 1 + +} + +# minimal supported kernel version +check_minkver() +{ + local curversion initdir DPKG_ARCH minversion cm_x tmp + + curversion="${1}" + initdir="${2}" + if [ -z "${initdir}" ]; then + DPKG_ARCH=$(dpkg --print-architecture) + case ${DPKG_ARCH} in + ia64|hppa) + minversion="2.6.15" + ;; + *) + minversion="2.6.12" + ;; + esac + if dpkg --compare-versions "${curversion}" lt "${minversion}"; then + echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + return 0 + fi + set_initlist + for cm_x in ${initlist}; do + # sed: keep last line starting with MINKVER=, + # remove MINKVER= and trailing space + minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") + if [ -z "${tmp}" ]; then + continue + elif dpkg --compare-versions "${curversion}" lt "${minver}"; then + echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + done +} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache new file mode 100755 index 00000000..37fdd22e --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache @@ -0,0 +1,95 @@ +#!/bin/sh +set -e + +if [ "$1" = prereqs ]; then + exit 0 +fi + +. /usr/share/initramfs-tools/hook-functions + +number= +suffix= +eval $(printf "%s" "$COMPCACHE_SIZE" | \ + sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') + +if [ -z "$number" ] || [ -z "$suffix" ]; then + exit 0 +fi + +if have_module ramzswap; then + name=ramzswap + manual_add_modules ramzswap +elif have_module compcache; then + name=compcache + manual_add_modules compcache +else + exit 0 +fi + +copy_exec /sbin/swapon + +mkdir -p "$DESTDIR"/etc/udev/rules.d +cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." + +# Note that this only becomes /dev on the real filesystem if udev's scripts +# are used; which they will be, but it's worth pointing out +if ! mount -t devtmpfs -o mode=0755 none /dev; then + mount -t tmpfs -o mode=0755 none /dev + mknod -m 0600 /dev/console c 5 1 + mknod /dev/null c 1 3 +fi +mkdir /dev/pts +mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true +> /dev/.initramfs-tools +mkdir /dev/.initramfs + +# Export the dpkg architecture +export DPKG_ARCH= +. /conf/arch.conf + +# Set modprobe env +export MODPROBE_OPTIONS="-qb" + +# Export relevant variables +export ROOT= +export ROOTDELAY= +export ROOTFLAGS= +export ROOTFSTYPE= +export IPOPTS= +export HWADDR= +export break= +export init=/sbin/init +export quiet=n +export readonly=y +export rootmnt=/root +export debug= +export panic= +export blacklist= +export resume_offset= + +# Bring in the main config +. /conf/initramfs.conf +for conf in conf/conf.d/*; do + [ -f ${conf} ] && . ${conf} +done +. /scripts/functions + +# Parse command line options +for x in $(cat /proc/cmdline); do + case $x in + init=*) + init=${x#init=} + ;; + root=*) + ROOT=${x#root=} + case $ROOT in + LABEL=*) + ROOT="${ROOT#LABEL=}" + + # support / in LABEL= paths (escape to \x2f) + case "${ROOT}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" + else + if [ "${ROOT}" != "${ROOT#/}" ]; then + ROOT="\x2f${ROOT#/}" + fi + if [ "${ROOT}" != "${ROOT%/}" ]; then + ROOT="${ROOT%/}\x2f" + fi + IFS='/' + newroot= + for s in $ROOT; do + if [ -z "${newroot}" ]; then + newroot="${s}" + else + newroot="${newroot}\\x2f${s}" + fi + done + unset IFS + ROOT="${newroot}" + fi + esac + ROOT="/dev/disk/by-label/${ROOT}" + ;; + UUID=*) + ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" + ;; + /dev/nfs) + [ -z "${BOOT}" ] && BOOT=nfs + ;; + esac + ;; + rootflags=*) + ROOTFLAGS="-o ${x#rootflags=}" + ;; + rootfstype=*) + ROOTFSTYPE="${x#rootfstype=}" + ;; + rootdelay=*) + ROOTDELAY="${x#rootdelay=}" + case ${ROOTDELAY} in + *[![:digit:].]*) + ROOTDELAY= + ;; + esac + ;; + resumedelay=*) + RESUMEDELAY="${x#resumedelay=}" + ;; + loop=*) + LOOP="${x#loop=}" + ;; + loopflags=*) + LOOPFLAGS="-o ${x#loopflags=}" + ;; + loopfstype=*) + LOOPFSTYPE="${x#loopfstype=}" + ;; + cryptopts=*) + cryptopts="${x#cryptopts=}" + ;; + nfsroot=*) + NFSROOT="${x#nfsroot=}" + ;; + netboot=*) + NETBOOT="${x#netboot=}" + ;; + ip=*) + IPOPTS="${x#ip=}" + ;; + hwaddr=*) + HWADDR="${x#hwaddr=}" + ;; + boot=*) + BOOT=${x#boot=} + ;; + resume=*) + RESUME="${x#resume=}" + ;; + resume_offset=*) + resume_offset="${x#resume_offset=}" + ;; + noresume) + noresume=y + ;; + panic=*) + panic="${x#panic=}" + case ${panic} in + *[![:digit:].]*) + panic= + ;; + esac + ;; + quiet) + quiet=y + ;; + ro) + readonly=y + ;; + rw) + readonly=n + ;; + debug) + debug=y + quiet=n + exec >/dev/.initramfs/initramfs.debug 2>&1 + set -x + ;; + debug=*) + debug=y + quiet=n + set -x + ;; + break=*) + break=${x#break=} + ;; + break) + break=premount + ;; + blacklist=*) + blacklist=${x#blacklist=} + ;; + netconsole=*) + netconsole=${x#netconsole=} + ;; + esac +done + +if [ -z "${noresume}" ]; then + export resume=${RESUME} +else + export noresume +fi + +[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} + +maybe_break top + +# export BOOT variable value for compcache, +# so we know if we run from casper +export BOOT + +# Don't do log messages here to avoid confusing usplash +run_scripts /scripts/init-top + +maybe_break modules +log_begin_msg "Loading essential drivers..." +load_modules +log_end_msg + +maybe_break premount +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" +run_scripts /scripts/init-premount +[ "$quiet" != "y" ] && log_end_msg + +maybe_break mount +log_begin_msg "Mounting root file system..." +. /scripts/${BOOT} +parse_numeric ${ROOT} +mountroot +log_end_msg + +maybe_break bottom +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" +run_scripts /scripts/init-bottom +[ "$quiet" != "y" ] && log_end_msg + +# Move virtual filesystems over to the real filesystem +mount -n -o move /sys ${rootmnt}/sys +mount -n -o move /proc ${rootmnt}/proc + +# Check init bootarg +if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then + echo "Target filesystem doesn't have ${init}." + init= +fi + +# Search for valid init +if [ -z "${init}" ] ; then + for init in /sbin/init /etc/init /bin/init /bin/sh; do + if [ ! -x "${rootmnt}${init}" ]; then + continue + fi + break + done +fi + +# No init on rootmount +if [ ! -x "${rootmnt}${init}" ]; then + panic "No init found. Try passing init= bootarg." +fi + +# Confuses /etc/init.d/rc +if [ -n ${debug} ]; then + unset debug +fi + +# Chain to real filesystem +maybe_break init +exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 +panic "Could not execute run-init." diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules new file mode 100644 index 00000000..9aa46468 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules @@ -0,0 +1,10 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions new file mode 100644 index 00000000..3bea0c97 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions @@ -0,0 +1,420 @@ +# -*- shell-script -*- + +_log_msg() +{ + if [ "$quiet" = "y" ]; then return; fi + echo "$@" +} + +log_success_msg() +{ + _log_msg "Success: $@" +} + +log_failure_msg() +{ + _log_msg "Failure: $@" +} + +log_warning_msg() +{ + _log_msg "Warning: $@" +} + +log_begin_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TEXT $@" + fi + _log_msg "Begin: $@ ..." +} + +log_end_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "SUCCESS ok" + fi + _log_msg "Done." +} + +# Add failure hook +add_mountroot_fail_hook() +{ + mkdir -p /tmp/mountroot-fail-hooks.d + ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" +} + +# Run failure hooks. +# When a failure hook exits "1", it has not done anything to correct the +# system. Exiting "0" means that something has been attempted to resolve +# the lack of a root filesystem. +# Hooks are run in lexigraphical order, and are responsible for removing +# themselves if they should not re-run in a later cycle. When one exits +# "0", the stack is stopped, so the caller can return to the main rootfs +# wait loop. +try_failure_hooks() +{ + local hook + + # Disable usplash so text from hooks can be seen + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + for hook in /tmp/mountroot-fail-hooks.d/*; do + if [ -x ${hook} ] && ${hook} mountfail; then + return 0 + fi + done + return 1 +} + +panic() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + # Disallow console access + if [ -n "${panic}" ]; then + sleep ${panic} + reboot + fi + + modprobe i8042 + modprobe atkbd + + run_scripts /scripts/panic + + echo $@ + PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 +} + +maybe_break() +{ + if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then + panic "Spawning shell within the initramfs" + fi +} + +render() +{ + eval "echo -n \${$@}" +} + +set_initlist() +{ + unset initlist + for si_x in ${initdir}/*; do + # skip empty dirs without warning + [ "${si_x}" = "${initdir}/*" ] && return + + # only allow variable name chars + case ${si_x#${initdir}/} in + *[![:alnum:]_]*) + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not alphanumeric or '_' file" + continue + ;; + esac + + # skip non executable scripts + if [ ! -x ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not executable" + continue + fi + + # skip directories + if [ -d ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: a directory" + continue + fi + + initlist="${initlist} ${si_x#${initdir}/}" + done +} + +reduce_satisfied() +{ + deplist="$(render array_${1})" + unset tmpdeplist + for rs_y in ${deplist}; do + # check if there are alternatives + case ${rs_y} in + *\|*) + OLD_IFS="$IFS" + IFS="|" + for rs_z in ${rs_y}; do + IFS="$OLD_IFS" + # only allow variable name chars + case ${rs_z} in + *[![:alnum:]_]*) + IFS="|" + continue + ;; + esac + # skip non executable scripts + if [ ! -x ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + # skip directories + if [ -d ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + tmpdeplist="${tmpdeplist} ${rs_z}" + break + done + IFS="$OLD_IFS" + ;; + *) + case ${rs_y} in + *[![:alnum:]_]*) + continue + ;; + esac + if [ ! -x ${initdir}/${rs_y} ]; then + continue + fi + if [ -d ${initdir}/${rs_y} ]; then + continue + fi + tmpdeplist="${tmpdeplist} ${rs_y}" + ;; + esac + done + deplist=${tmpdeplist} + for rs_x in ${runlist}; do + pop_list_item ${rs_x} ${deplist} + deplist=${tmppop} + done + eval array_${1}=\"${deplist}\" +} + +get_prereqs() +{ + set_initlist + for gp_x in ${initlist}; do + tmp=$(${initdir}/${gp_x} prereqs) + eval array_${gp_x}=\"${tmp}\" + done +} + +count_unsatisfied() +{ + set -- ${@} + return ${#} +} + +# Removes $1 from initlist +pop_list_item() +{ + item=${1} + shift + set -- ${@} + unset tmppop + # Iterate + for pop in ${@}; do + if [ ${pop} = ${item} ]; then + continue + fi + tmppop="${tmppop} ${pop}" + done + +} + +# This function generates the runlist, so we clear it first. +reduce_prereqs() +{ + unset runlist + set -- ${initlist} + i=$# + # Loop until there's no more in the queue to loop through + while [ ${i} -ne 0 ]; do + oldi=${i} + for rp_x in ${initlist}; do + reduce_satisfied ${rp_x} + count_unsatisfied $(render array_${rp_x}) + cnt=${?} + if [ ${cnt} -eq 0 ]; then + runlist="${runlist} ${rp_x}" + pop_list_item ${rp_x} ${initlist} + initlist=${tmppop} + i=$((${i} - 1)) + fi + done + if [ ${i} -eq ${oldi} ]; then + panic "PANIC: Circular dependancy. Exiting." + fi + done +} + +get_prereq_pairs() +{ + set_initlist + for gp_x in ${initlist}; do + echo ${gp_x} ${gp_x} + prereqs=$(${initdir}/${gp_x} prereqs) + for prereq in ${prereqs}; do + echo ${prereq} ${gp_x} + done + done +} + +call_scripts() +{ + for cs_x in ${runlist}; do + [ -f ${initdir}/${cs_x} ] || continue + if [ x"$1" = "xoptional" ]; then + option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") + [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue + fi + + # mkinitramfs verbose output + if [ "${verbose}" = "y" ]; then + echo "Calling hook ${cs_x}" + fi + ${initdir}/${cs_x} + # allow boot scripts to modify exported boot paramaters + if [ -e /conf/param.conf ]; then + . /conf/param.conf + fi + done +} + +run_scripts() +{ + initdir=${1} + [ ! -d ${initdir} ] && return + + if [ -f ${initdir}/ORDER ]; then + . ${initdir}/ORDER + elif [ -x /usr/bin/tsort ]; then + runlist=$(get_prereq_pairs | tsort) + call_scripts $2 + else + get_prereqs + reduce_prereqs + call_scripts $2 + fi +} + +cache_run_scripts() +{ + DESTDIR=${1} + scriptdir=${2} + initdir=${DESTDIR}${scriptdir} + [ ! -d ${initdir} ] && return + + runlist=$(get_prereq_pairs | tsort) + for crs_x in ${runlist}; do + [ -f ${initdir}/${crs_x} ] || continue + echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER + echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER + done +} + +# Load custom modules first +load_modules() +{ + if [ -e /conf/modules ]; then + cat /conf/modules | while read m; do + # Skip empty lines + if [ -z "$m" ]; then + continue + fi + # Skip comments - d?ash removes whitespace prefix + com=$(printf "%.1s" "${m}") + if [ "$com" = "#" ]; then + continue + fi + modprobe $m + done + fi +} + +# lilo compatibility +parse_numeric() { + case $1 in + "") + return + ;; + /*) + return + ;; + *:*) + minor=${1#*:} + major=${1%:*} + ;; + *) + value=$(( 0x${1} )) + minor=$(( ${value} % 256 )) + major=$(( ${value} / 256 )) + ;; + esac + + mknod -m 600 /dev/root b ${major} ${minor} + ROOT=/dev/root +} + +configure_networking() +{ + # networking already configured thus bail out + [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 + + if [ "${HWADDR}" ]; then + # select interface by MAC address + HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" + local iface + for iface in /sys/class/net/*; do + [ -f "$iface/address" ] || continue + if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then + DEVICE="${iface#/sys/class/net/}" + fi + done + fi + + # support ip options see linux sources + # Documentation/filesystems/nfsroot.txt + case ${IPOPTS} in + none|off) + # Do nothing + ;; + ""|on|any) + # Bring up device + ipconfig -t 60 ${DEVICE} + ;; + dhcp|bootp|rarp|both) + ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} + ;; + *) + ipconfig -t 60 -d $IPOPTS + + # grab device entry from ip option + NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac + + # source ipconfig output + if [ -n "${DEVICE}" ]; then + # source specific bootdevice + . /tmp/net-${DEVICE}.conf + else + # source any interface as not exaclty specified + . /tmp/net-*.conf + fi +} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth new file mode 100755 index 00000000..8b1e7c8a --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth @@ -0,0 +1,21 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] +then + /bin/plymouth update-root-fs --new-root-dir=${rootmnt} +fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev new file mode 100755 index 00000000..f9d2ce9d --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev @@ -0,0 +1,24 @@ +#!/bin/sh -e +# initramfs init-bottom script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Stop udevd, we'll miss a few events while we run init, but we catch up +pkill udevd + +# Move /dev to the real filesystem +mount -n -o move /dev ${rootmnt}/dev diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 new file mode 100755 index 00000000..e5bc78f1 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 @@ -0,0 +1,41 @@ +#!/bin/sh + +# init-premount script for lvm2. + +PREREQS="udev mdadm" +prereqs() +{ + echo $PREREQS +} + +mountroot_fail() +{ + if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then + cat </dev/null; then + modprobe ata_generic all_generic_ide=1 +fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist new file mode 100755 index 00000000..5e6b3c1e --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist @@ -0,0 +1,34 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +# blacklist vga16fb when vga= or video= given +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*|video=*) + echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs + ;; + esac +done + +# sanity check +[ -z "${blacklist}" ] && exit 0 + +# write blacklist to modprobe.d +IFS=',' +for b in ${blacklist}; do + echo "blacklist $b" >> /etc/modprobe.d/initramfs +done diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup new file mode 100755 index 00000000..df767bb4 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup @@ -0,0 +1,83 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +OPTION=FRAMEBUFFER +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer new file mode 100755 index 00000000..bb59aadf --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer @@ -0,0 +1,104 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + + +# The options part of the kernel "video=" argument (i.e. everyting +# after "video=:") has very inconsistent rules. +# +# Generally the following applies: +# 1) options are comma-separated +# 2) options can be in either of these three forms: +# =, :, . +# 3) the "mode" option has the form x[M][R][-][@][i][m] +# and may or may not start with "mode=" +# +# When the options are used with modules, they need to be space-separated +# and the following conversions are needed: +# : -> = +# -> =1 +# -> mode= +parse_video_opts() +{ + local OPTS="$1" + local IFS="," + + # Must be a line like video=:,[opt2]... + if [ "${OPTS}" = "${OPTS%%:*}" ]; then + return + fi + OPTS="${OPTS#*:}" + for opt in ${OPTS}; do + # Already in the "=" form + if [ "${opt}" != "${opt#*=}" ]; then + echo -n "$opt " + # In the ":" form + elif [ "${opt}" != "${opt#*:}" ]; then + echo -n "${opt%:*}=${opt#*:} " + # Presumably a modevalue without the "mode=" prefix + elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then + echo -n "mode=$opt " + # Presumably a boolean + else + echo -n "${opt}=1 " + fi + done +} + +FB="" +OPTS="" + +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*) + FB="vesafb"; + OPTS=""; + ;; + video=*) + FB=${x#*=} + FB="${FB%%:*}" + OPTS="$(parse_video_opts "${x}")" + esac +done + +# Map command line name to module name +case ${FB} in +matroxfb) + FB=matroxfb_base + ;; +esac + +if [ -n "${FB}" ]; then + # Some framebuffer devices need character devices :-/ + udevadm settle + MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} + # Wait for the framebuffer devices to be ready + udevadm settle +else + # If we have no graphics devices yet, wait for udev to settle + [ -d /sys/class/graphics/fbcon ] || udevadm settle + [ -d /sys/class/graphics/fb0 ] || udevadm settle + [ -d /sys/class/drm/card0 ] || udevadm settle +fi + +# Force fb mode via /sys interface +for x in $(cat /proc/cmdline); do + case ${x} in + fbmode=*) + MODE=${x#*=} + echo "$MODE" > /sys/class/graphics/fb0/mode + ;; + esac +done diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap new file mode 100755 index 00000000..cb67aa96 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap @@ -0,0 +1,28 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth new file mode 100755 index 00000000..813b6b4c --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth @@ -0,0 +1,20 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="framebuffer console_setup brltty" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +printf '\033[?25l' > /dev/tty7 +/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid +/bin/plymouth show-splash diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev new file mode 100755 index 00000000..cd2fa564 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev @@ -0,0 +1,30 @@ +#!/bin/sh -e +# initramfs init-top script for udev + +PREREQ="all_generic_ide blacklist" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# It's all over netlink now +echo "" > /proc/sys/kernel/hotplug + +# Start the udev daemon to process events +/sbin/udevd --daemon --resolve-names=never + +# Iterate sysfs and fire off everything; if we include a rule for it then +# it'll get handled; otherwise it'll get handled later when we do this again +# in the main boot sequence. +( /sbin/udevadm trigger --subsystem-match=block; \ + /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local new file mode 100644 index 00000000..865572b5 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local @@ -0,0 +1,131 @@ +# Local filesystem mounting -*- shell-script -*- + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" + run_scripts /scripts/local-top + [ "$quiet" != "y" ] && log_end_msg + + while [ -z "${FSTYPE}" ]; do + FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) + + # Run failure hooks, hoping one of them can fix up the system + # and we can restart the wait loop. If they all fail, abort + # and move on to the panic handler and shell. + if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then + break + fi + done + + # We've given up, but we'll let the user fix matters if they can + while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do + # give hint about renamed root + case "${ROOT}" in + /dev/hd*) + suffix="${ROOT#/dev/hd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/sd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" + fi + ;; + /dev/sd*) + suffix="${ROOT#/dev/sd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/hd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" + fi + ;; + esac + echo "Gave up waiting for root device. Common problems:" + echo " - Boot args (cat /proc/cmdline)" + echo " - Check rootdelay= (did the system wait long enough?)" + echo " - Check root= (did the system wait for the right device?)" + echo " - Missing modules (cat /proc/modules; ls /dev)" + panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" + done + + # Get the root filesystem type if not set + if [ -z "${ROOTFSTYPE}" ]; then + [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") + ROOTFSTYPE="${FSTYPE}" + else + FSTYPE="${ROOTFSTYPE}" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" + run_scripts /scripts/local-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ] && \ + [ -z "$LOOP" ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} + + # FIXME This has no error checking + # Mount root + mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} + mountroot_status="$?" + if [ "$LOOP" ]; then + if [ "$mountroot_status" != 0 ]; then + if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then + panic " +Could not mount the partition ${ROOT}. +This could also happen if the file system is not clean because of an operating +system crash, an interrupted boot process, an improper shutdown, or unplugging +of a removable device without first unmounting or ejecting it. To fix this, +simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then +gracefully shut down and reboot back into Windows. After this you should be +able to reboot again and resume the installation. +(filesystem = ${FSTYPE}, error code = $mountroot_status) +" + fi + fi + + mkdir -p /host + mount -o move ${rootmnt} /host + + while [ ! -e "/host/${LOOP#/}" ]; do + panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" + done + + # Get the loop filesystem type if not set + if [ -z "${LOOPFSTYPE}" ]; then + eval $(fstype < "/host/${LOOP#/}") + else + FSTYPE="${LOOPFSTYPE}" + fi + if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then + FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") + [ -z "$FSTYPE" ] && FSTYPE="unknown" + fi + + if [ ${readonly} = y ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + modprobe loop + modprobe ${FSTYPE} + + # FIXME This has no error checking + mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} + + if [ -d ${rootmnt}/host ]; then + mount -o move /host ${rootmnt}/host + fi + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" + run_scripts /scripts/local-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g new file mode 100755 index 00000000..335ef95e --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g @@ -0,0 +1,16 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + mkdir -p /dev/.initramfs/varrun + pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit + pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit +fi + +exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc new file mode 100755 index 00000000..c9fbc369 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc @@ -0,0 +1,64 @@ +#!/bin/sh -e +# initramfs local-premount script for fixrtc + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +# use the fixrtc cmdline option in your bootloader to +# automatically set the hardware clock to the date of +# the last mount of your root filesystem to avoid fsck +# to get confused by the superblock being in the future + +BROKEN_CLOCK="" +ROOTDEV="" + +for x in $(cat /proc/cmdline); do + case ${x} in + root=*) + value=${x#*=} + + # Find the device node path depending on the form of root= : + + case ${value} in + UUID=*) + ROOTDEV=/dev/disk/by-uuid/${value#UUID=} + ;; + LABEL=*) + ROOTDEV=/dev/disk/by-label/${value#LABEL=} + ;; + *) + ROOTDEV=${value} + ;; + esac + ;; + fixrtc) + BROKEN_CLOCK=1 + ;; + esac +done + +if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then + ROOTDISK=$(readlink -f "$ROOTDEV") && + + TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && + TIME=${TIMESTR#*:} && + + date --set="${TIME} 1 minute" >/dev/null 2>&1 +fi + +# This script is best-effort. If we couldn't fudge the clock as desired, +# just try to carry on boot anyway: +# It will probably fail, but we won't have made the situation any worse. +exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g new file mode 100755 index 00000000..57e7f8ba --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g @@ -0,0 +1,14 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + modprobe fuse +fi + +exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume new file mode 100755 index 00000000..46535936 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume @@ -0,0 +1,75 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +. ./scripts/functions + +if [ -z "${resume}" ]; then + exit 0 +fi + +case $resume in +LABEL=*) + resume="${resume#LABEL=}" + + # support any / in LABEL= path (escape to \x2f) + case "${resume}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + resume="$(echo ${resume} | sed 's,/,\\x2f,g')" + else + if [ "${resume}" != "${resume#/}" ]; then + resume="\x2f${resume#/}" + fi + if [ "${resume}" != "${resume%/}" ]; then + resume="${resume%/}\x2f" + fi + IFS='/' + newresume= + for s in $resume; do + if [ -z "${newresume}" ]; then + newresume="${s}" + else + newresume="${newresume}\\x2f${s}" + fi + done + unset IFS + resume="${newresume}" + fi + esac + resume="/dev/disk/by-label/${resume}" + ;; +UUID=*) + resume="/dev/disk/by-uuid/${resume#UUID=}" + ;; +esac + +SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) + +case "${SWAPTYPE}" in + swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) + if [ -x /bin/plymouth ] && plymouth --ping; then + plymouth message --text="Resuming from $resume" + fi + + # hardcode path, uswsusp ships an resume binary too + if [ -n "${resume_offset}" ]; then + /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 + else + /bin/resume ${resume} >/dev/null 2>&1 + fi + ;; +esac diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs new file mode 100644 index 00000000..b9c2522d --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs @@ -0,0 +1,83 @@ +# NFS filesystem mounting -*- shell-script -*- + +# FIXME This needs error checking + +retry_nr=0 + +# parse nfs bootargs and mount nfs +do_nfsmount() +{ + + configure_networking + + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + + if [ -z "${NFSOPTS}" ]; then + NFSOPTS="-o retrans=10" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" + run_scripts /scripts/nfs-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ]; then + roflag="-o ro" + else + roflag="-o rw" + fi + + nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} +} + +# NFS root mounting +mountroot() +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" + run_scripts /scripts/nfs-top + [ "$quiet" != "y" ] && log_end_msg + + modprobe nfs + # For DHCP + modprobe af_packet + + # Default delay is around 180s + # FIXME: add usplash_write info + if [ -z "${ROOTDELAY}" ]; then + delay=180 + else + delay=${ROOTDELAY} + fi + + # loop until nfsmount succeds + while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do + [ ${retry_nr} -gt 0 ] && \ + [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" + do_nfsmount + retry_nr=$(( ${retry_nr} + 1 )) + [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 + [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg + done + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" + run_scripts /scripts/nfs-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev new file mode 100755 index 00000000..980e496f --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev @@ -0,0 +1,27 @@ +#!/bin/sh -e +# initramfs nfs-top script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Each call to udevsettle can take up to three minutes +if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TIMEOUT 360" + trap "/sbin/usplash_write 'TIMEOUT 15'" 0 +fi + +# We need to wait for the network card drivers to be loaded +/sbin/udevadm settle diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup new file mode 100755 index 00000000..5e97f65e --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup @@ -0,0 +1,82 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap new file mode 100644 index 00000000..f011abf5 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap @@ -0,0 +1,27 @@ +#!/bin/sh + +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth new file mode 100755 index 00000000..2da5a6b5 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth @@ -0,0 +1,18 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +/bin/plymouth quit diff --git a/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm b/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm new file mode 100644 index 00000000..11d27f8c --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm @@ -0,0 +1,18 @@ +# mdadm boot_degraded configuration +# +# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if +# you want. You can also change the values here and changes will be preserved. +# Do note that only the values are preserved; the rest of the file is +# rewritten. +# +# BOOT_DEGRADED: +# Do you want to boot your system if a RAID providing your root filesystem +# becomes degraded? +# +# Running a system with a degraded RAID could result in permanent data loss +# if it suffers another hardware fault. +# +# However, you might answer "yes" if this system is a server, expected to +# tolerate hardware faults and boot unattended. + +BOOT_DEGRADED=false diff --git a/client/ogClient/old/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/initramfs-tools-OG/conf.d/resume new file mode 100644 index 00000000..34fdc4a5 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/conf.d/resume @@ -0,0 +1 @@ +RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/ogClient/old/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/initramfs-tools-OG/hooks/oghooks new file mode 100755 index 00000000..3d9b04b8 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/hooks/oghooks @@ -0,0 +1,40 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash + + +# Insert OpenGnsys Engine +mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + diff --git a/client/ogClient/old/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/initramfs-tools-OG/initramfs.conf new file mode 100644 index 00000000..754e2bea --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/initramfs.conf @@ -0,0 +1,72 @@ +# +# initramfs.conf +# Configuration file for mkinitramfs(8). See initramfs.conf(5). +# + +# +# MODULES: [ most | netboot | dep | list ] +# +# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. +# +# dep - Try and guess which modules to load. +# +# netboot - Add the base modules, network modules, but skip block devices. +# +# list - Only include modules from the 'additional modules' list +# + +MODULES=most + +# +# BUSYBOX: [ y | n ] +# +# Use busybox if available. +# + +BUSYBOX=y + +# +# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] +# +# Amount of RAM to use for RAM-based compressed swap space. +# +# An empty value - compcache isn't used, or added to the initramfs at all. +# An integer and K (e.g. 65536 K) - use a number of kilobytes. +# An integer and M (e.g. 256 M) - use a number of megabytes. +# An integer and G (e.g. 1 G) - use a number of gigabytes. +# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. +# +# You can optionally install the compcache package to configure this setting +# via debconf and have userspace scripts to load and unload compcache. +# + +COMPCACHE_SIZE="" + +# +# NFS Section of the config. +# + +# +# BOOT: [ local | nfs ] +# +# local - Boot off of local media (harddrive, USB stick). +# +# nfs - Boot using an NFS drive as the root of the drive. +# + +BOOT=local + +# +# DEVICE: ... +# +# Specify the network interface, like eth0 +# + +DEVICE=eth0 + +# +# NFSROOT: [ auto | HOST:MOUNT ] +# + +NFSROOT=auto + diff --git a/client/ogClient/old/initramfs-tools-OG/modules b/client/ogClient/old/initramfs-tools-OG/modules new file mode 100644 index 00000000..484ef718 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/modules @@ -0,0 +1,13 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +fbcon +vesafb +vga16b diff --git a/client/ogClient/old/initramfs-tools-OG/scripts/og b/client/ogClient/old/initramfs-tools-OG/scripts/og new file mode 100755 index 00000000..6408eda7 --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/scripts/og @@ -0,0 +1,140 @@ +# OpenGnsys Local filesystem mounting -*- shell-script -*- + +ogLinkBusybox () +{ +for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do + ln -f /bin/busybox /bin/$n +done +ln -f /bin/busybox /bin/sh +} + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + + mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +configure_networking +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + +set -a +trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 +/opt/opengnsys/etc/preinit/default.sh + + + + + + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + run_scripts /scripts/og-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf new file mode 100644 index 00000000..3c27473b --- /dev/null +++ b/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf @@ -0,0 +1,20 @@ +# +# Configuration file for update-initramfs(8) +# + +# +# update_initramfs [ yes | all | no ] +# +# Default is yes +# If set to all update-initramfs will update all initramfs +# If set to no disables any update to initramfs beside kernel upgrade + +update_initramfs=yes + +# +# backup_initramfs [ yes | no ] +# +# Default is no +# If set to no leaves no .bak backup files. + +backup_initramfs=no diff --git a/client/ogClient/old/ogClientFunctions b/client/ogClient/old/ogClientFunctions new file mode 100755 index 00000000..8311cf3a --- /dev/null +++ b/client/ogClient/old/ogClientFunctions @@ -0,0 +1,255 @@ +#!/bin/bash +#Definicion de variables +# TODO: Pendiente Definir directorio base del 2FS +OGBASEDIR=/var/lib/tftpboot/ogclient/ +OGFSFILE=${OGBASEDIR}ogclient.img +OGFSMOUNT=${OGBASEDIR}ogclientmount +OGLIB=/opt/opengnsys/client/lib +FSCLIENTSIZEMB=1000 +PASSROOT=og +SCRIPT=/root/configure.sh +RUNME=$OGFSMOUNT$SCRIPT +LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb +OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" +OGFSLABEL=ogClient + + + + +#/** +# ogClientMount [str_program] +#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones +#@return Si no hay parametros: login de acceso. +#@return con un parametro: La salida del programa ejecutado +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## +function ogClientMount () +{ +#TODO comprobar que OGFILE y OGFILEMOUNT existe. +mount $OGFSFILE $OGFSMOUNT -o loop +mount --bind /proc $OGFSMOUNT/proc +mount --bind /sys $OGFSMOUNT/sys +mount --bind /tmp $OGFSMOUNT/tmp +mount --bind /dev $OGFSMOUNT/dev +mount --bind /dev/pts $OGFSMOUNT/dev/pts +[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) +[ $# = 1 ] && chroot $OGFSMOUNT $1 +} + +#/** +# ogClientUnmount +#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys +#@param +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientUnmount () +{ +cd /tmp +umount -d -f -l $OGFSMOUNT/proc +umount -d -f -l $OGFSMOUNT/sys +umount -d -f -l $OGFSMOUNT/tmp +umount -d -f -l $OGFSMOUNT/dev +umount -d -f -l $OGFSMOUNT/dev/pts +umount -d -f -l $OGFSMOUNT +} + +function ogClientCheckVersion () +{ +#TODO: configurar la version lucid +#TODO: introducir un nuevo case para la vesion +case $1 in + jaunty|JAUNTY) + export OGVERSION=jaunty + exort OGRELEASE=2.6.28-11-generic + ;; + karmic|KARMIC) + export OGVERSION=karmic + export OGRELEASE=2.6.31-14-generic + ;; + lucid|LUCID) + export OGVERSION=lucid + export OGRELEASE=2.6.32-21-generic-pae + ;; +esac +echo $OGVERSION $OGRELEASE +} + + +#/** +# ogClientGenerator str_versionUbuntu str_release +#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Versión de ubuntu a generar, jaunty karmic +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientGeneratorDebootstrap () +{ + +if [ $# != 2 ] +then +echo Debes introducir como argumento1: jaunty karmic lucid +echo Debes introducir como argumento2: la release +echo utiliza como entrada ogClientCheckVersion +return +fi + +OGVERSION=`echo $1` +OGRELEASE=`echo $2` +echo $OGVERSION $OGRELEASE +pause + +# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema +apt-get install gdebi-core +wget $LASTDEBOOTSTRAP +gdebi -n debootstrap_1.0.20_all.deb + + +#Creamos el directorio donde montaremos el disco virtual +mkdir -p $OGFSMOUNT + +#Creamos el disco virtual con el filesystem del cliente. +dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB +mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F + +#Montamos el dispositivo virtual en su punto de montaje. +mount $OGFSFILE $OGFSMOUNT -o loop + +#TODO Comprobar arquitectura +#Iniciamos la creación del sistema en el directorio de clientes. +echo debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ +debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ + + + +} + + +###### Funciones para los clientes offline +function agregarOG { +cd $NEWROOT +mkdir -p opt/opengnsys +cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys +echo "agregando OG al newinitrd" +} + +function finalizarISO +{ + cd $ANTERIORPWD + mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz + if [ $LINUX ] ; then + mv $TMPINITRD/linux $DEST/linuxISO + fi +} + + +function CrearISO { +mkdir -p tmp/iso/isolinux +#cd tmp/iso/ +cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ +cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ +cp -prv /tmp/linux tmp/iso/isolinux/linuxISO +cp -prv /tmp/initrd.gz tmp/iso/isolinux/ +cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ + + +cat << FIN > tmp/iso/isolinux/isolinux.cfg +DEFAULT menu.c32 +PROMPT 0 +ALLOWOPTIONS 1 + +MENU TITLE FuTuR3 Live Collection + +LABEL gpxe +MENU LABEL gpxe +KERNEL /clonezilla/live/vmlinuz1 +APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia + + +#default 0 +#prompt 1 +#timeout 100 + +#display mensaje.txt + +LABEL 0 +MENU LABEL ogClient +KERNEL linuxISO +APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline + +LABEL 1 +MENU LABEL ogClient1 sin vga +KERNEL linuxISO +APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline + +LABEL 2 +MENU LABEL ogClient2 sin irqpoll +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline + +LABEL 3 +MENU LABEL ogClient3 acpi=off +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline + + +#LABEL ogclient +#KERNEL /ogclient/linuxISO +#APPEND initrd=/ogclient/initrdISO.img + +#KERNEL linuxISO +#APPEND initrd=initrdISO.img + +LABEL 4 +MENU LABEL local +localboot 0x80 +append - + + +label 5 +MENU LABEL Network boot via gPXE lkrn +KERNEL gpxe.lkrn + +label 5 +MENU LABEL Network boot via gPXE usb +KERNEL gpxe.usb + +label 5 +MENU LABEL Network boot via gPXE pxe +KERNEL gpxe.pxe + +label 5 +MENU LABEL Network boot via gPXE iso +KERNEL gpxe.iso +FIN +#### /tmp/iso# +mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso + +} + +function probarISO { +#/tmp/iso +qemu -m 256 -boot d -cdrom ogClient.iso +} + + + + diff --git a/client/ogClient/old/ogClientGenerator.sh b/client/ogClient/old/ogClientGenerator.sh new file mode 100755 index 00000000..c7c654ae --- /dev/null +++ b/client/ogClient/old/ogClientGenerator.sh @@ -0,0 +1,306 @@ +#!/bin/bash +#@file ogClientGenerator.sh +#@brief Script generación del cliente OpenGnSys +#@warning +#@version 0.9 - +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + + + +if [ $# -ne 1 ]; then + echo ": invalid number of parameters" + echo " host | lucid | karmic | jaunty | lenny | squeeze " + exit 1 +fi + + + +# Soo ejecutable por usuario root +if [ "$(whoami)" != 'root' ] +then + echo "ERROR: this program must run under root privileges!!" + exit 1 +fi + +# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). +PROGRAMDIR=$(readlink -e $(dirname "$0")) +if [ -d "$PROGRAMDIR/../installer" ]; then + USESVN=0 +else + USESVN=1 + SVN_URL=svn://www.informatica.us.es:3690/opengnsys/branches/ogClient + #directorio donde se almacenará el codigo temporalmente. + SVN_DIR="./opengnsys/installer/ogClient" +fi + +WORKDIR=/tmp/opengnsys_installer +mkdir -p $WORKDIR +INSTALL_TARGET=/opt/opengnsys +LOG_FILE=/tmp/opengnsys_installation.log + +############################################### +pushd $WORKDIR + + +source `dirname $0`/ogInstaller.lib + + +if [ "$1" == "host" ] +then + OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') + OGRELEASE=$(uname -a | awk '{print $3}') +else + OSCODENAME=`echo $1` + OGRELEASE=`ogClientGetRelease $OSCODENAME` +fi + + + +OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ +OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img +OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount + +OGLIB=/opt/opengnsys/client/lib + + + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + + +# Datos para la generación del cliente. +DEPENDENCIES=( debootstrap subversion schroot) + +## Actualizar repositorios +apt-get update +# Instalación de dependencias (paquetes de sistema operativo). +declare -a notinstalled +checkDependencies DEPENDENCIES notinstalled +if [ $? -ne 0 ]; then + installDependencies notinstalled + if [ $? -ne 0 ]; then + echoAndLog "Error while installing some dependeces, please verify your server installation before continue" + exit 1 + fi +fi + + + +# Si es necesario, descarga el repositorio especifico de la instalación del cliente +if [ $USESVN -eq 1 ]; then + #svnExportCode $SVN_URL + echo svn export "$SVN_URL" $SVN_DIR + #svn export "$SVN_URL" $SVN_DIR + #####debug boorrar el cp + #mkdir -p $SVN_DIR + #cp -prv /home/administrador/workspace/opengnsys/branches/ogClient/* $SVN_DIR + find $SVN_DIR/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null + ###TODO si ya esta descargado da error ??? + ###if [ $? -ne 0 ]; then + ### errorAndLog "Error while getting code from svn" + ### exit 1 + ###fi +else + ln -fs "$(dirname $PROGRAMDIR)" opengnsys +fi + +#### Parseo de ficheros descargados del svn. +# parseamos del apt.source +if [ "$1" == host ] +then + cp /etc/apt/sources.list ${SVN_DIR}/clientstructure/etc/apt/sources.list +else + sed -e "s/OGVERSION/$OGVERSION/g" ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic > ${SVN_DIR}/clientstructure/etc/apt/sources.list + #rm ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic +fi +if [ $? -ne 0 ]; then + errorAndLog "parseando el fichero apt.source: ERROR" +else + echoAndLog "parseando el fichero apt.source: OK" +fi + +#parseamos el scripts de generación del initrd. +sed -e "s/OGRELEASE/$OGRELEASE/g" ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVN_DIR}/clientstructure/root/GenerateInitrd.sh +#rm ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh +if [ $? -ne 0 ]; then + errorAndLog "parseando el fichero de cliente GenerateInitrd: ERROR" +else + echoAndLog "parseando el fichero de cliente GenerateInitrd: OK" +fi + + + +#damos permiso al directorio de scripts +chmod 775 ${SVN_DIR}/clientstructure/root/* +if [ $? -ne 0 ]; then + errorAndLog "Dando permisos de escritura al directorio de scrips para el cliente: ERROR" +else + echoAndLog "Dando permisos de escritura al directorio de scrips para el cliente: OK" +fi + + +#####PASO 1. Generamos el 2º sistema de archivos. +echo "generamos el sistema base con debootstrap" +if [ "$1" == host ] +then + echo ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE +# ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE +else + echo ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE + ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE +fi +if [ $? -ne 0 ]; then + errorAndLog "Generando 2nd FileSystem: ERROR" +else + echoAndLog "Generando 2nd FileSystem: OK" +fi + +########################################## + +cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` +cat << EOF > /etc/schroot/schroot.conf +[IMGogclient] +type=loopback +file=/var/lib/tftpboot/ogclient/ogclient.img +description=ogclient ubuntu luc IMGi +priority=1 +users=root +groups=root +root-groups=root +mount-options=-o offset=32256 +root-users=root +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF + + + +####PASO 2 Insertamos datos en el 2º sistema de archivos +#2.1 montamos para insertar los ficheros necesarios. +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 +if [ $? -ne 0 ]; then + errorAndLog "Montando 2nd FileSystem Para Añadir elementos OG: ERROR" + exit 1 +else + echoAndLog "Montando 2nd FileSystem Para Añadir elementos OG: OK" +fi + +#2.2 copiamos la estrucutra descargada al fichero imagen. +echo "cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT " +cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT +if [ $? -ne 0 ]; then + errorAndLog "Copiando los elementos del cliente svn: ERROR" + exit 1 +else + echoAndLog "Copiando los elementos del cliente svn: OK" +fi + +#2.3 Copiamos algunas cosas del actual sistema - ver de que manera integrar los lib +# copiamos algunas cosas del nfsexport +echo "Linking fonts for browser1 $OGLIB" +mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ +cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts +echo "Linking fonts for browser2 $OGLIB" +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ +cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts +echo "Coping pci.ids" +cp -pr $OGLIB/pci.ids $OGCLIENTMOUNT/etc +#copiamos el browser y el ogADMcline al bin +cp /opt/opengnsys/client/bin/browser $OGCLIENTMOUNT/bin +cp /opt/opengnsys/client/bin/ogAdmClient $OGCLIENTMOUNT/bin +if [ $? -ne 0 ]; then + errorAndLog "Copiando qt pci.ids fonts: ERROR" + exit 1 +else + echoAndLog "Copiando qt pci.ids fonts: OK" +fi + + +## final desmontamos. +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +if [ $? -ne 0 ]; then + errorAndLog "Desmontando cliente : ERROR" + exit 1 +else + echoAndLog "desmontando cliente: OK" +fi + +################## Fin paso 2 + +popd + +######## instalamos software adicional. +#ogClientMount /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` +cd / +schroot -c IMGogclient -- /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` + +if [ $? -ne 0 ]; then + errorAndLog "Instalando sofware adicional OG : ERROR" + #exit 1 +else + echoAndLog "Instalando sofware adicional OG: OK" +fi +cd - + +#cd / +#schroot -c IMGogclient -- /root/CompileSoftware.sh +#cd - + +### configuracion hostname passroot securety +cd / +schroot -c IMGogclient -- /root/ConfFS.sh +cd - + +##2.4 claves ssh +sshkeys() +{ +##montamos +mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 +##comprobamos clave rsa en el host,. +if [ ! -f /root/.ssh/id_rsa.pub ] +then + ssh-keygen -q -f /root/.ssh/id_rsa -N "" +fi +## copiamos ssh rsa del host al guest como authorized-key2 +rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT +} + +### Generamos el 1er sistema de archivos. +cd / +schroot -c IMGogclient -- /root/GenerateInitrd.sh +cp /tmp/*-${OGRELEASE} $OGCLIENTBASEDIR +cd - + + + +################## DEJAMOS FICHERO DE EJEMPLOS PARA: +#default +cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient +LABEL pxe-${OGRELEASE} +KERNEL ogclient/vmlinuz-$OGRELEASE +APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= +FIN +#/etc/hosts +echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient +/etc/init.d/nfs-kernel-server restart +##################################################################### + +# Mostrar sumario de la instalación e instrucciones de post-instalación. +installationSummary + +#rm -rf $WORKDIR +echoAndLog "OpenGnSys installation finished at $(date)" + diff --git a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib new file mode 100755 index 00000000..14806b7e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib @@ -0,0 +1,77 @@ +#!/bin/bash +#/** +#@file Net.lib +#@brief Librería o clase Net +#@class Net +#@brief Funciones básicas de red. +#@version 1.0 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogGetHostname +#@brief Muestra el nombre del cliente. +#@return str_host - nombre de máquina +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetHostname () +{ +local HOST NETFILE +# Tomar nombre de la variable HOSTNAME +HOST="$HOSTNAME" + +# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) +[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} + END {print host} + ' /var/lib/dhcp3/dhclient.leases) +# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ +[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} + $1~/hostname/ {print $2}' /proc/cmdline) + +[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" +echo $HOST +} + + +#/** +# ogGetIpAddress +#@brief Muestra la dirección IP del sistema +#@return str_ip - Dirección IP +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetIpAddress () +{ +local IP +#Version og2ndFS +NETFILE="/tmp/net-eth0.conf" +[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) + +# Obtener direcciones IP. /* (comentario para Doxygen) +[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') +# Mostrar sólo la primera. (comentario para Doxygen) */ +echo ${IP%% *} +} + + +#/** +# ogGetMacAddress +#@brief Muestra la dirección Ethernet del cliente. +#@return str_ether - Dirección Ethernet +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetMacAddress () +{ +local MAC +# Obtener direcciones Ethernet. +MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') +# Mostrar sólo la primera. +echo ${MAC%% *} +} + diff --git a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme new file mode 100644 index 00000000..853e37f5 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme @@ -0,0 +1,20 @@ +preinit/default + eliminamos enlace del bash + Ejecute solo el loadmodules del for + +preinit/loaenviron + comentamos el LD_PATH + + +/var/lib/tftboot/pxelinux.cfg/default +DEFAULT pxe2 +LABEL pxe +KERNEL linux +APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin +LABEL pxe2 +KERNEL vmlinuz-2.6.32-21-generic-pae +APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 + + +parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN +temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/ogClient/old/ogFSHlnk/boot/default.sh b/client/ogClient/old/ogFSHlnk/boot/default.sh new file mode 100755 index 00000000..e8c5b5d2 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/boot/default.sh @@ -0,0 +1,23 @@ +#!/opt/opengnsys/bin/bash + +set -a + +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} +#### FIXME EN PRUEBAS +OGLOGFILE=/var/log/opengnsys.log + +/opt/opengnsys/etc/init/load2fs.sh +source /opt/opengnsys/etc/preinit/loadenviron.sh +export PATH=/opt/og2fs/bin:$PATH +export PATH=/opt/og2fs/sbin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + echo "$MSG_LAUNCHCLIENT" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE +fi + +bash +# FIXME Arranque Browser +#browser -qws $OGSTARTPAGE diff --git a/client/ogClient/old/ogFSHlnk/boot/load2fs.sh b/client/ogClient/old/ogFSHlnk/boot/load2fs.sh new file mode 100644 index 00000000..ca3e3be7 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/boot/load2fs.sh @@ -0,0 +1,19 @@ +#!/bin/bash +#/** +#@file load2fs.sh +#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Antonio J. Doblas Viso, Unviersidad de Malaga. +#@date 2010-02-15 +#*/ +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro +cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +export PATH=/opt/og2fs/sbin:$PATH +export PATH=/opt/og2fs/bin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh b/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh new file mode 100755 index 00000000..e3505aa6 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh @@ -0,0 +1,395 @@ +#!/bin/bash +#Definicion de variables +# TODO: Pendiente Definir directorio base del 2FS +OGBASEDIR=/opt/opengnsys/client/ +OGFSFILE=${OGBASEDIR}og2ndFS +OGFSMOUNT=${OGBASEDIR}ogfsmount +OGLIB=/opt/opengnsys/client/lib + + + + + +#/** +# ogFSHMount [str_program] +#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones +#@return Si no hay parametros: login de acceso. +#@return con un parametro: La salida del programa ejecutado +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## +function ogFSHMount () +{ +mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop +mount --bind /proc $OGFSMOUNT/proc +mount --bind /sys $OGFSMOUNT/sys +mount --bind /tmp $OGFSMOUNT/tmp +mount --bind /dev $OGFSMOUNT/dev +mount --bind /dev/pts $OGFSMOUNT/dev/pts +[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) +[ $# = 1 ] && chroot $OGFSMOUNT $1 +} + +#/** +# ogFSHUnmount +#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys +#@param +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogFSHUnmount () +{ +cd /tmp +umount -d -f -l $OGFSMOUNT/proc +umount -d -f -l $OGFSMOUNT/sys +umount -d -f -l $OGFSMOUNT/tmp +umount -d -f -l $OGFSMOUNT/dev +umount -d -f -l $OGFSMOUNT/dev/pts +umount -d -f -l $OGFSMOUNT +} + + +#/** +# ogFSHCreate str_versionUbuntu +#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Versión de ubuntu a generar, jaunty karmic +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogFSHCreate () +{ +#Definicion de variables. +local SCRIPT RUNME FSCLIENTSIZEMB PASSROOT LASTDEBOOTSTRAP OGMUSTCOMPILE OGFSLABEL +FSCLIENTSIZEMB=1000 +PASSROOT=og +SCRIPT=/root/configure.sh +RUNME=$OGFSMOUNT$SCRIPT +LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb +OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" +OGFSLABEL=og2FS +#TODO comprobar la compatibilidad del SO host + +if [ $# != 1 ] +then +echo Debes introducir como argumento: jaunty karmic lucid +return +fi + +#TODO: configurar la version lucid +#TODO: introducir un nuevo case para la vesion +case $1 in + jaunty|JAUNTY) + VERSION=jaunty + RELEASE=2.6.28-11-generic + ;; + karmic|KARMIC) + VERSION=karmic + RELEASE=2.6.31-14-generic + ;; + lucid|LUCID) + VERSION=lucid + #RELEASE=2.6.32-19-generic + RELEASE=2.6.32-21-generic-pae + ;; +esac + +# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema +apt-get install gdebi-core +wget $LASTDEBOOTSTRAP +gdebi -n debootstrap_1.0.20_all.deb + +#Creamos el disco virtual con el filesystem del cliente. +dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB +mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F +#Creamos el directorio donde montaremos el disco virtual +mkdir -p $OGFSMOUNT +#Montamos el dispositivo virtual en su punto de montaje. +mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop + +#TODO Comprobar arquitectura +#Iniciamos la creación del sistema en el directorio de clientes. +echo debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ +debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ + +# preparamos el etc.sources. +cat << FIN > ${OGFSMOUNT}/etc/apt/sources.list +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted +## Major bug fix updates produced after the final release of the +## distribution. +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team. Also, please note that software in universe WILL NOT receive any +## review or updates from the Ubuntu security team. +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION universe +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION universe +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team, and may not be under a free licence. Please satisfy yourself as to +## your rights to use the software. Also, please note that software in +## multiverse WILL NOT receive any review or updates from the Ubuntu +## security team. +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse + +## Uncomment the following two lines to add software from the 'backports' +## repository. +## N.B. software from this repository may not have been tested as +## extensively as that contained in the main release, although it includes +## newer versions of some applications which may provide useful features. +## Also, please note that software in backports WILL NOT receive any review +## or updates from the Ubuntu security team. +# deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse +# deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse + +## Uncomment the following two lines to add software from Canonical's +## 'partner' repository. +## This software is not part of Ubuntu, but is offered by Canonical and the +## respective vendors as a service to Ubuntu users. +# deb http://archive.canonical.com/ubuntu $VERSION partner +# deb-src http://archive.canonical.com/ubuntu $VERSION partner + + +deb http://security.ubuntu.com/ubuntu $VERSION-security main restricted +deb-src http://security.ubuntu.com/ubuntu $VERSION-security main restricted +deb http://security.ubuntu.com/ubuntu $VERSION-security universe +deb-src http://security.ubuntu.com/ubuntu $VERSION-security universe +deb http://security.ubuntu.com/ubuntu $VERSION-security multiverse +deb-src http://security.ubuntu.com/ubuntu $VERSION-security multiverse + + +deb http://archive.ubuntu.com/ubuntu $VERSION main +deb http://free.nchc.org.tw/drbl-core drbl stable +deb http://free.nchc.org.tw/ubuntu $VERSION-security main restricted universe multiverse +deb http://ppa.launchpad.net/freenx-team/ubuntu/ $VERSION main +deb http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main +deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main +FIN + +#TODO: fichero etc/hosts +#TODO: fichero etc/resolv.conf +echo "2ndFSHclient" > ${OGFSMOUNT}/etc/hostname +#TODO: introducir mas consoluas para el acceso como root. +echo "pts/0" >> ${OGFSMOUNT}/etc/securetty +echo "pts/1" >> ${OGFSMOUNT}/etc/securetty +echo "pts/2" >> ${OGFSMOUNT}/etc/securetty +echo "pts/3" >> ${OGFSMOUNT}/etc/securetty + +# copiamos algunas cosas del nfsexport +echo "Linking fonts for browser1 $OGLIB" +mkdir -p $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ +cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts + +echo "Linking fonts for browser2 $OGLIB" +mkdir -p $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/ +cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts + +echo "Coping pci.ids" +cp -pr $OGLIB/pci.ids $OGFSMOUNT/etc + +# Guión de ejecución y personalización final. +cat << FIN > $RUNME +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl + + +apt-get -y update + +# software system +apt-get -y --force-yes install linux-image-$RELEASE wget dialog man-db htop +# +# software to compile code +apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk +wget $OGMUSTCOMPILE +source /root/ToolsGNU.c +# +# sofware networking +apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 +ctorrent install +udpcast install +# +# software services +apt-get -y --force-yes install openssh-server bittornado trickle +# +# software disk and filesystem +apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted +apt-get -y --force-yes install dmraid dmsetup mdadm lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools +ntfs-3g install +# +# software cloning +apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools +wget -O partclone_0.2.8_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.8/partclone_0.2.8_i386.deb?use_mirror=ovh +gdebi -n partclone_0.2.8_i386.deb +mbuffer install +# +## software postconf +apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk +ms-sys install +# +# software compressor +apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop + +apt-get -y --force-yes remove busybox +apt-get -y --force-yes install busybox-static bash-static +# +#################################################################### +###################### Preparando el entorno ###################### +################################################################### +mkdir -p /var/lock +dpkg-reconfigure passwd +echo "root:$PASSROOT" | chpasswd +mv /etc/fstab /etc/fstab.original 2>/dev/null +mv /etc/mtab /etc/mtab.original 2>/dev/null +FIN + +chmod +x $RUNME + +#chroot hacia el punto de montaje. +ogFSHMount $SCRIPT +### Desmontamos y salimos. +ogFSHUnmount 2>/dev/null +ogFSHUnmount 2>/dev/null +ogFSHUnmount 2>/dev/null +} + + +###### Funciones para los clientes offline +function agregarOG { +cd $NEWROOT +mkdir -p opt/opengnsys +cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys +echo "agregando OG al newinitrd" +} + +function finalizarISO +{ + cd $ANTERIORPWD + mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz + if [ $LINUX ] ; then + mv $TMPINITRD/linux $DEST/linuxISO + fi +} + + +function CrearISO { +mkdir -p tmp/iso/isolinux +#cd tmp/iso/ +cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ +cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ +cp -prv /tmp/linux tmp/iso/isolinux/linuxISO +cp -prv /tmp/initrd.gz tmp/iso/isolinux/ +cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ + + +cat << FIN > tmp/iso/isolinux/isolinux.cfg +DEFAULT menu.c32 +PROMPT 0 +ALLOWOPTIONS 1 + +MENU TITLE FuTuR3 Live Collection + +LABEL gpxe +MENU LABEL gpxe +KERNEL /clonezilla/live/vmlinuz1 +APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia + + +#default 0 +#prompt 1 +#timeout 100 + +#display mensaje.txt + +LABEL 0 +MENU LABEL ogClient +KERNEL linuxISO +APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline + +LABEL 1 +MENU LABEL ogClient1 sin vga +KERNEL linuxISO +APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline + +LABEL 2 +MENU LABEL ogClient2 sin irqpoll +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline + +LABEL 3 +MENU LABEL ogClient3 acpi=off +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline + + +#LABEL ogclient +#KERNEL /ogclient/linuxISO +#APPEND initrd=/ogclient/initrdISO.img + +#KERNEL linuxISO +#APPEND initrd=initrdISO.img + +LABEL 4 +MENU LABEL local +localboot 0x80 +append - + + +label 5 +MENU LABEL Network boot via gPXE lkrn +KERNEL gpxe.lkrn + +label 5 +MENU LABEL Network boot via gPXE usb +KERNEL gpxe.usb + +label 5 +MENU LABEL Network boot via gPXE pxe +KERNEL gpxe.pxe + +label 5 +MENU LABEL Network boot via gPXE iso +KERNEL gpxe.iso +FIN +#### /tmp/iso# +mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso + +} + +function probarISO { +#/tmp/iso +qemu -m 256 -boot d -cdrom ogClient.iso +} + + + + diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog new file mode 100644 index 00000000..d93f0b42 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog @@ -0,0 +1,137 @@ +#/bin/sh + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + + #mount -t nfs -onolock,ro + nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + #mount -t nfs -o nolock + nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +. /scripts/functions +configure_networking +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + + +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro +cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +mount /opt/og2fs/bin /bin +mount /opt/og2fs/sbin /sbin +unset PATH +export PATH=/opt/og2fs/sbin +export PATH=/opt/og2fs/bin:$PATH +export PATH=/opt/og2fs/sbin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin +} +mountroot diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume new file mode 100644 index 00000000..e4c89d1a --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume @@ -0,0 +1 @@ +RESUME=UUID=e8ea296e-815a-44d5-be24-b51d6b6fce4d diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks new file mode 100755 index 00000000..d495d156 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks @@ -0,0 +1,43 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash +copy_exec /usr/bin/unionfs-fuse + + + +# Insert OpenGnsys Engine +#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + + diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf new file mode 100644 index 00000000..754e2bea --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf @@ -0,0 +1,72 @@ +# +# initramfs.conf +# Configuration file for mkinitramfs(8). See initramfs.conf(5). +# + +# +# MODULES: [ most | netboot | dep | list ] +# +# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. +# +# dep - Try and guess which modules to load. +# +# netboot - Add the base modules, network modules, but skip block devices. +# +# list - Only include modules from the 'additional modules' list +# + +MODULES=most + +# +# BUSYBOX: [ y | n ] +# +# Use busybox if available. +# + +BUSYBOX=y + +# +# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] +# +# Amount of RAM to use for RAM-based compressed swap space. +# +# An empty value - compcache isn't used, or added to the initramfs at all. +# An integer and K (e.g. 65536 K) - use a number of kilobytes. +# An integer and M (e.g. 256 M) - use a number of megabytes. +# An integer and G (e.g. 1 G) - use a number of gigabytes. +# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. +# +# You can optionally install the compcache package to configure this setting +# via debconf and have userspace scripts to load and unload compcache. +# + +COMPCACHE_SIZE="" + +# +# NFS Section of the config. +# + +# +# BOOT: [ local | nfs ] +# +# local - Boot off of local media (harddrive, USB stick). +# +# nfs - Boot using an NFS drive as the root of the drive. +# + +BOOT=local + +# +# DEVICE: ... +# +# Specify the network interface, like eth0 +# + +DEVICE=eth0 + +# +# NFSROOT: [ auto | HOST:MOUNT ] +# + +NFSROOT=auto + diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules new file mode 100644 index 00000000..8bac1d4b --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules @@ -0,0 +1,14 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +vga16b +vesafb +fbcon + diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og new file mode 100755 index 00000000..12c39a59 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og @@ -0,0 +1,194 @@ +# OpenGnsys Local filesystem mounting -*- shell-script -*- + + +ogLinkBusybox () +{ +for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do + ln -f /bin/busybox /bin/$n +done +ln -f /bin/busybox /bin/sh +} + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + #mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + +unionmount() +{ +FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" +UNION_OPT="-o cow -o noinitgroups" +UPATH="/unionfs" +UBIN="unionfs-fuse" +mkdir -p /unionfs/host +mkdir -p /unionfs/union + dir=$1 + #echo "creando mkdir -p /unionfs/host/$dir" + mkdir -p /unionfs/host/$dir + #echo "montando mount --bind /$dir /unionfs/host/$dir " + mount --bind /$dir /unionfs/host/$dir + ##########echo "creando mkdir -p /unionfs/union/$dir" + mkdir -p /unionfs/union/$dir + host="/unionfs/host/${dir}=RW" + common="/opt/og2fs/${dir}=RO" + #####echo " ejecuantdo $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir " + $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir + + mount --bind /unionfs/union/$dir /$dir +} + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +. /scripts/functions +configure_networking + +# for the portmapper we need localhost +ifconfig lo 127.0.0.1 +/etc/init.d/portmap start + +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + + +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro + +#mount -t tmpfs -o size=8192 tmpfs /unionfs +for i in etc; do + unionmount $i +done +# root var lib bin sbin usr +cat /proc/mounts > /etc/mtab + +#cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +mount /opt/og2fs/bin /bin +mount /opt/og2fs/sbin /sbin +#export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin +#chmod 777 /etc/rcog +##unset PATH +##export PATH=$PATH:/opt/og2fs/sbin +##export PATH=/opt/og2fs/bin:$PATH +##export PATH=/opt/og2fs/sbin:$PATH + + + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + run_scripts /scripts/og-bottom + [ "$quiet" != "y" ] && log_end_msg + + +#set -a +#trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 + +#/opt/opengnsys/etc/preinit/default.sh +echo "llamando a init desde scritps og" +exec init +} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf new file mode 100644 index 00000000..3c27473b --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf @@ -0,0 +1,20 @@ +# +# Configuration file for update-initramfs(8) +# + +# +# update_initramfs [ yes | all | no ] +# +# Default is yes +# If set to all update-initramfs will update all initramfs +# If set to no disables any update to initramfs beside kernel upgrade + +update_initramfs=yes + +# +# backup_initramfs [ yes | no ] +# +# Default is no +# If set to no leaves no .bak backup files. + +backup_initramfs=no diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab new file mode 100644 index 00000000..03e0c06a --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab @@ -0,0 +1,14 @@ +# This is run first except when booting in single-user mode +# +#::sysinit:/opt/opengnsys/etc/preinit/default.sh +# /bin/sh invocations on selected ttys +# +# Start an "askfirst" shell on the console (whatever that may be) +#::askfirst:/bin/sh +# Start an "askfirst" shell on /dev/tty2-4 +#tty1::respawn:/sbin/getty 38400 tty1 +tty1::respawn:/opt/opengnsys/etc/preinit/default.sh +tty2::respawn:/sbin/getty 38400 tty2 +tty3::respawn:/sbin/getty 38400 tty3 +tty4::respawn:/sbin/getty 38400 tty4 +tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf new file mode 100644 index 00000000..8b047e4e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf @@ -0,0 +1,30 @@ +# Framebuffer drivers are generally buggy and poorly-supported, and cause +# suspend failures, kernel panics and general mayhem. For this reason we +# never load them automatically. +blacklist aty128fb +blacklist atyfb +#blacklist radeonfb +blacklist cirrusfb +blacklist cyber2000fb +blacklist cyblafb +blacklist gx1fb +blacklist hgafb +blacklist i810fb +blacklist intelfb +blacklist kyrofb +blacklist lxfb +blacklist matroxfb_base +blacklist neofb +blacklist nvidiafb +blacklist pm2fb +blacklist rivafb +blacklist s1d13xxxfb +blacklist savagefb +blacklist sisfb +blacklist sstfb +blacklist tdfxfb +blacklist tridentfb +#blacklist vesafb +blacklist vfb +blacklist viafb +blacklist vt8623fb diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox new file mode 100755 index 00000000..da2dc637 Binary files /dev/null and b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox new file mode 100755 index 00000000..d04890f6 Binary files /dev/null and b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root new file mode 100755 index 00000000..aecb5e32 Binary files /dev/null and b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions new file mode 100644 index 00000000..2610f79a --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions @@ -0,0 +1,461 @@ +# -*- shell-script -*- + +catenate_cpiogz() { + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 + return + fi + + cat "${1}" >>"${__TMPCPIOGZ}" +} + +force_load() +{ + manual_add_modules ${@} + echo "${@}" >>"${DESTDIR}/conf/modules" +} + +# Takes a file containing a list of modules to be added as an +# argument, figures out dependancies, and adds them. +# +# Input file syntax: +# +# # comment +# modprobe_module_name [args ...] +# [...] +# +add_modules_from_file() +{ + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 + return + fi + + sed -e '/^#/d' ${1} | while read module rest; do + force_load "${module}" "${rest}" + done +} + +# Is this module available? +have_module() +{ + modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" >/dev/null 2>&1 +} + +# Add dependent modules + eventual firmware +manual_add_modules() +{ + local mam_x firmwares firmware + + for mam_x in $(modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do + # Prune duplicates + if [ -e "${DESTDIR}/${mam_x}" ]; then + continue + fi + + mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" + ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" + if [ "${verbose}" = "y" ]; then + echo "Adding module ${mam_x}" + fi + + # Add firmware files if necessary + firmwares=$(modinfo -F firmware "${mam_x}") + if [ -z "${firmwares}" ]; then + continue + fi + for firmware in $firmwares; do + if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ + || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then + continue + fi + + # Only print warning for missing fw of loaded module + # or forced loaded module + if [ ! -e "/lib/firmware/${firmware}" ] \ + && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then + if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ + /proc/modules \ + || grep -q "^$(basename "${mam_x}" .ko)" \ + "${CONFDIR}/modules"; then + echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 + fi + continue + fi + + if [ -e "/lib/firmware/${version}/${firmware}" ]; then + copy_exec "/lib/firmware/${version}/${firmware}" + else + copy_exec "/lib/firmware/${firmware}" + fi + if [ "${verbose}" = "y" ]; then + echo "Adding firmware ${firmware}" + fi + done + done +} + +# $1 is the source path (e.g. /usr/bin/time) +# $2 is the relative destination (e.g. /usr or /usr/time) +# +# The destination is interpreted in the same way "cp" would, meaning +# (assuming /bin is a directory): +# +# "copy_exec /usr/bin/time /bin" -> /bin/time +# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime +# +# If $2 is left out, the same destination path as for the source arg will +# be used and directories will be created as needed, so: +# +# "copy_exec /usr/bin/time" -> /usr/bin/time +# +copy_exec() { + local source target destination final_destination x nonoptlib + local libname dirname + + source="${1}" + if [ -n "${2}" ]; then + target="${2}" + else + if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then + mkdir -p "${DESTDIR}/$(dirname "${1}")" + fi + target="${1}" + fi + + if [ -d "${DESTDIR}/${target}" ]; then + destination="${target}/$(basename "${source}")" + else + destination="${target}" + fi + final_destination="${DESTDIR}/${destination}" + + if [ -L "$final_destination" ]; then + if [ $(readlink "${final_destination}") != "${source}" ]; then + echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 + return + fi + else + ln -s ${source} ${DESTDIR}/${destination} + if [ "${verbose}" = "y" ]; then + echo "Adding binary ${source}" + fi + fi + + # Copy the dependant libraries + for x in $(ldd ${source} 2>/dev/null | sed -e ' + /\//!d; + /linux-gate/d; + /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; + s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do + + # Try to use non-optimised libraries where possible. + # We assume that all HWCAP libraries will be in tls, + # sse2, vfp or neon + nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') + + if [ -e "${nonoptlib}" ]; then + x="${nonoptlib}" + fi + + libname=$(basename "${x}") + dirname=$(dirname "${x}") + + mkdir -p "${DESTDIR}/${dirname}" + if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then + ln -s "${x}" "${DESTDIR}/${dirname}" + if [ "${verbose}" = "y" ]; then + echo "Adding library ${x}" + fi + fi + done +} + +# Copy entire subtrees to the initramfs +copy_modules_dir() +{ + local x_mod + + if ! [ -d "${MODULESDIR}/${1}" ]; then + return; + fi + if [ "${verbose}" = "y" ]; then + echo "Copying module directory ${1}" + fi + for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do + manual_add_modules $(basename ${x_mod} .ko) + done +} + +# walk /sys for relevant modules +sys_walk_mod_add() +{ + local driver_path module + device_path="$1" + + while [ "${device_path}" != "/sys" ]; do + driver_path="$(readlink -f ${device_path}/driver)" + if [ -e "$driver_path" ]; then + module="$(basename $(readlink -f $driver_path))" + if [ -n "${module}" ]; then + force_load "${module}" + fi + fi + device_path="$(dirname ${device_path})" + done +} + +# walk /sys for relevant modalias +sys_walk_modalias() +{ + local device_path modalias + + device_path="$(dirname "${1}")" + device_path="$(dirname "${device_path}")" + if [ -e "${device_path}/modalias" ]; then + modalias=$(cat "${device_path}/modalias") + fi + + if [ -n "${modalias}" ]; then + force_load "${modalias}" + fi +} + +# find and only copy root relevant modules +dep_add_modules() +{ + local block minor root FSTYPE root_dev_path x + + # findout root block device + fstype + eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" + if [ "${root}" = "/dev/root" ] ; then + root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null + fi + root="$(readlink -f ${root})" + + # find out real rootfs on auto type + if [ "${FSTYPE}" = "auto" ]; then + eval "$(/usr/lib/klibc/bin/fstype ${root})" + fi + + # check that fstype rootfs recognition + if [ "${FSTYPE}" = "unknown" ]; then + echo "mkinitramfs: unknown fstype on root ${root}" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report bug on initramfs-tools" + exit 1 + fi + + # Add rootfs + manual_add_modules "${FSTYPE}" + + # lvm luks root + if [ "${root#/dev/mapper/}" != "${root}" ]; then + minor=$((0x$(stat --format "%T" ${root}) % 256)) + block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) + if [ "${block#dm-}" != "${block}" ]; then + block=$(ls -1 /sys/block/${block}/slaves | head -n 1) + fi + block=${block%%[0-9]*} + # md root new naming scheme /dev/md/X + elif [ "${root#/dev/md/}" != "${root}" ]; then + root=${root#/dev/md/} + block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # md root /dev/mdX + elif [ "${root#/dev/md}" != "${root}" ]; then + root=${root#/dev/} + block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # mmc always uses numbering in the devicename (mmcblk[0-9]) + elif [ "${root#/dev/mmc}" != "${root}" ]; then + block=${root#/dev/} + block=${block%%p[0-9]*} + # classical root device + else + block=${root#/dev/} + block=${block%%[0-9]*} + fi + + # Error out if /sys lack block dev + if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then + echo "mkinitramfs: missing ${block} root ${root} /sys entry" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report the bug" + exit 1 + fi + + # sys walk ATA + root_dev_path=$(readlink -f /sys/block/${block}/device) + sys_walk_mod_add ${root_dev_path} + + # catch old-style IDE + if [ -e /sys/bus/ide/devices/ ]; then + sys_walk_modalias ${root_dev_path} + manual_add_modules ide-disk + manual_add_modules ide-cd + fi + + if [ -e /sys/bus/scsi/devices/ ]; then + manual_add_modules sd_mod + fi + + if [ -e /sys/bus/i2o/devices/ ]; then + force_load i2o_block + force_load i2o_config + fi + + if [ -e /sys/bus/ps3_system_bus/ ]; then + for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do + manual_add_modules "${x}" + done + fi + + if [ -e /sys/bus/vio/ ]; then + for x in sunvnet sunvdc; do + manual_add_modules "${x}" + done + fi +} + + +# The modules "most" classes added per default to the initramfs +auto_add_modules() +{ + case "$1" in + base) + for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ + hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ + hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ + hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ + hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ + ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ + virtio_pci vfat nls_cp437 nls_iso8859-1; do + manual_add_modules "${x}" + done + ;; + net) + for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ + cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ + ep93xx_eth eql fealnx famachi forcedeth gelic_net \ + hp100 igb ipg mace mv643xx_eth myri10ge \ + natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ + r8169 s2io sis900 skge sky2 slhc smc911x starfire \ + sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ + de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ + typhon via-rhine via-velocity virtio_net yellowfin; do + manual_add_modules "${x}" + done + ;; + ide) + copy_modules_dir kernel/drivers/ide + ;; + scsi) + copy_modules_dir kernel/drivers/scsi + for x in mptfc mptsas mptscsih mptspi; do + manual_add_modules "${x}" + done + ;; + ata) + copy_modules_dir kernel/drivers/ata + ;; + block) + copy_modules_dir kernel/drivers/block + copy_modules_dir kernel/drivers/usb/storage + ;; + # FIXME: can be removed after Lenny release + ieee1394) + for x in ohci1394 sbp2; do + manual_add_modules "${x}" + done + ;; + firewire) + for x in firewire-ohci firewire-sbp2; do + manual_add_modules "${x}" + done + ;; + i2o) + for x in i2o_block; do + manual_add_modules "${x}" + done + ;; + dasd) + for x in dasd_eckd_mod dasd_fba_mod; do + manual_add_modules "${x}" + done + ;; + *) + auto_add_modules base + auto_add_modules net + auto_add_modules ide + auto_add_modules scsi + auto_add_modules block + auto_add_modules ata + auto_add_modules i2o + auto_add_modules dasd + auto_add_modules ieee1394 + auto_add_modules firewire + ;; + esac +} + +usage() +{ + cat >&2 << EOF + +Usage: ${0} [OPTION]... <-o outfile> [version] + +Options: + -d confdir Specify an alternative configuration directory. + -k Keep temporary directory used to make the image. + -o outfile Write to outfile. + -r root Override ROOT setting in mkinitrd.conf. + +See mkinitramfs(8) for further details. +EOF + exit 1 + +} + +# minimal supported kernel version +check_minkver() +{ + local curversion initdir DPKG_ARCH minversion cm_x tmp + + curversion="${1}" + initdir="${2}" + if [ -z "${initdir}" ]; then + DPKG_ARCH=$(dpkg --print-architecture) + case ${DPKG_ARCH} in + ia64|hppa) + minversion="2.6.15" + ;; + *) + minversion="2.6.12" + ;; + esac + if dpkg --compare-versions "${curversion}" lt "${minversion}"; then + echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + return 0 + fi + set_initlist + for cm_x in ${initlist}; do + # sed: keep last line starting with MINKVER=, + # remove MINKVER= and trailing space + minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") + if [ -z "${tmp}" ]; then + continue + elif dpkg --compare-versions "${curversion}" lt "${minver}"; then + echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + done +} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache new file mode 100755 index 00000000..37fdd22e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache @@ -0,0 +1,95 @@ +#!/bin/sh +set -e + +if [ "$1" = prereqs ]; then + exit 0 +fi + +. /usr/share/initramfs-tools/hook-functions + +number= +suffix= +eval $(printf "%s" "$COMPCACHE_SIZE" | \ + sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') + +if [ -z "$number" ] || [ -z "$suffix" ]; then + exit 0 +fi + +if have_module ramzswap; then + name=ramzswap + manual_add_modules ramzswap +elif have_module compcache; then + name=compcache + manual_add_modules compcache +else + exit 0 +fi + +copy_exec /sbin/swapon + +mkdir -p "$DESTDIR"/etc/udev/rules.d +cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." + +# Note that this only becomes /dev on the real filesystem if udev's scripts +# are used; which they will be, but it's worth pointing out +if ! mount -t devtmpfs -o mode=0755 none /dev; then + mount -t tmpfs -o mode=0755 none /dev + mknod -m 0600 /dev/console c 5 1 + mknod /dev/null c 1 3 +fi +mkdir /dev/pts +mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true +> /dev/.initramfs-tools +mkdir /dev/.initramfs + +# Export the dpkg architecture +export DPKG_ARCH= +. /conf/arch.conf + +# Set modprobe env +export MODPROBE_OPTIONS="-qb" + +# Export relevant variables +export ROOT= +export ROOTDELAY= +export ROOTFLAGS= +export ROOTFSTYPE= +export IPOPTS= +export HWADDR= +export break= +export init=/sbin/init +export quiet=n +export readonly=y +export rootmnt=/root +export debug= +export panic= +export blacklist= +export resume_offset= + +# Bring in the main config +. /conf/initramfs.conf +for conf in conf/conf.d/*; do + [ -f ${conf} ] && . ${conf} +done +. /scripts/functions + +# Parse command line options +for x in $(cat /proc/cmdline); do + case $x in + init=*) + init=${x#init=} + ;; + root=*) + ROOT=${x#root=} + case $ROOT in + LABEL=*) + ROOT="${ROOT#LABEL=}" + + # support / in LABEL= paths (escape to \x2f) + case "${ROOT}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" + else + if [ "${ROOT}" != "${ROOT#/}" ]; then + ROOT="\x2f${ROOT#/}" + fi + if [ "${ROOT}" != "${ROOT%/}" ]; then + ROOT="${ROOT%/}\x2f" + fi + IFS='/' + newroot= + for s in $ROOT; do + if [ -z "${newroot}" ]; then + newroot="${s}" + else + newroot="${newroot}\\x2f${s}" + fi + done + unset IFS + ROOT="${newroot}" + fi + esac + ROOT="/dev/disk/by-label/${ROOT}" + ;; + UUID=*) + ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" + ;; + /dev/nfs) + [ -z "${BOOT}" ] && BOOT=nfs + ;; + esac + ;; + rootflags=*) + ROOTFLAGS="-o ${x#rootflags=}" + ;; + rootfstype=*) + ROOTFSTYPE="${x#rootfstype=}" + ;; + rootdelay=*) + ROOTDELAY="${x#rootdelay=}" + case ${ROOTDELAY} in + *[![:digit:].]*) + ROOTDELAY= + ;; + esac + ;; + resumedelay=*) + RESUMEDELAY="${x#resumedelay=}" + ;; + loop=*) + LOOP="${x#loop=}" + ;; + loopflags=*) + LOOPFLAGS="-o ${x#loopflags=}" + ;; + loopfstype=*) + LOOPFSTYPE="${x#loopfstype=}" + ;; + cryptopts=*) + cryptopts="${x#cryptopts=}" + ;; + nfsroot=*) + NFSROOT="${x#nfsroot=}" + ;; + netboot=*) + NETBOOT="${x#netboot=}" + ;; + ip=*) + IPOPTS="${x#ip=}" + ;; + hwaddr=*) + HWADDR="${x#hwaddr=}" + ;; + boot=*) + BOOT=${x#boot=} + ;; + resume=*) + RESUME="${x#resume=}" + ;; + resume_offset=*) + resume_offset="${x#resume_offset=}" + ;; + noresume) + noresume=y + ;; + panic=*) + panic="${x#panic=}" + case ${panic} in + *[![:digit:].]*) + panic= + ;; + esac + ;; + quiet) + quiet=y + ;; + ro) + readonly=y + ;; + rw) + readonly=n + ;; + debug) + debug=y + quiet=n + exec >/dev/.initramfs/initramfs.debug 2>&1 + set -x + ;; + debug=*) + debug=y + quiet=n + set -x + ;; + break=*) + break=${x#break=} + ;; + break) + break=premount + ;; + blacklist=*) + blacklist=${x#blacklist=} + ;; + netconsole=*) + netconsole=${x#netconsole=} + ;; + esac +done + +if [ -z "${noresume}" ]; then + export resume=${RESUME} +else + export noresume +fi + +[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} + +maybe_break top + +# export BOOT variable value for compcache, +# so we know if we run from casper +export BOOT + +# Don't do log messages here to avoid confusing usplash +run_scripts /scripts/init-top + +maybe_break modules +log_begin_msg "Loading essential drivers..." +load_modules +log_end_msg + +maybe_break premount +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" +run_scripts /scripts/init-premount +[ "$quiet" != "y" ] && log_end_msg + +maybe_break mount +log_begin_msg "Mounting root file system..." +. /scripts/${BOOT} +parse_numeric ${ROOT} +mountroot +log_end_msg + +maybe_break bottom +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" +run_scripts /scripts/init-bottom +[ "$quiet" != "y" ] && log_end_msg + +# Move virtual filesystems over to the real filesystem +mount -n -o move /sys ${rootmnt}/sys +mount -n -o move /proc ${rootmnt}/proc + +# Check init bootarg +if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then + echo "Target filesystem doesn't have ${init}." + init= +fi + +# Search for valid init +if [ -z "${init}" ] ; then + for init in /sbin/init /etc/init /bin/init /bin/sh; do + if [ ! -x "${rootmnt}${init}" ]; then + continue + fi + break + done +fi + +# No init on rootmount +if [ ! -x "${rootmnt}${init}" ]; then + panic "No init found. Try passing init= bootarg." +fi + +# Confuses /etc/init.d/rc +if [ -n ${debug} ]; then + unset debug +fi + +# Chain to real filesystem +maybe_break init +exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 +panic "Could not execute run-init." diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules new file mode 100644 index 00000000..9aa46468 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules @@ -0,0 +1,10 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions new file mode 100644 index 00000000..3bea0c97 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions @@ -0,0 +1,420 @@ +# -*- shell-script -*- + +_log_msg() +{ + if [ "$quiet" = "y" ]; then return; fi + echo "$@" +} + +log_success_msg() +{ + _log_msg "Success: $@" +} + +log_failure_msg() +{ + _log_msg "Failure: $@" +} + +log_warning_msg() +{ + _log_msg "Warning: $@" +} + +log_begin_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TEXT $@" + fi + _log_msg "Begin: $@ ..." +} + +log_end_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "SUCCESS ok" + fi + _log_msg "Done." +} + +# Add failure hook +add_mountroot_fail_hook() +{ + mkdir -p /tmp/mountroot-fail-hooks.d + ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" +} + +# Run failure hooks. +# When a failure hook exits "1", it has not done anything to correct the +# system. Exiting "0" means that something has been attempted to resolve +# the lack of a root filesystem. +# Hooks are run in lexigraphical order, and are responsible for removing +# themselves if they should not re-run in a later cycle. When one exits +# "0", the stack is stopped, so the caller can return to the main rootfs +# wait loop. +try_failure_hooks() +{ + local hook + + # Disable usplash so text from hooks can be seen + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + for hook in /tmp/mountroot-fail-hooks.d/*; do + if [ -x ${hook} ] && ${hook} mountfail; then + return 0 + fi + done + return 1 +} + +panic() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + # Disallow console access + if [ -n "${panic}" ]; then + sleep ${panic} + reboot + fi + + modprobe i8042 + modprobe atkbd + + run_scripts /scripts/panic + + echo $@ + PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 +} + +maybe_break() +{ + if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then + panic "Spawning shell within the initramfs" + fi +} + +render() +{ + eval "echo -n \${$@}" +} + +set_initlist() +{ + unset initlist + for si_x in ${initdir}/*; do + # skip empty dirs without warning + [ "${si_x}" = "${initdir}/*" ] && return + + # only allow variable name chars + case ${si_x#${initdir}/} in + *[![:alnum:]_]*) + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not alphanumeric or '_' file" + continue + ;; + esac + + # skip non executable scripts + if [ ! -x ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not executable" + continue + fi + + # skip directories + if [ -d ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: a directory" + continue + fi + + initlist="${initlist} ${si_x#${initdir}/}" + done +} + +reduce_satisfied() +{ + deplist="$(render array_${1})" + unset tmpdeplist + for rs_y in ${deplist}; do + # check if there are alternatives + case ${rs_y} in + *\|*) + OLD_IFS="$IFS" + IFS="|" + for rs_z in ${rs_y}; do + IFS="$OLD_IFS" + # only allow variable name chars + case ${rs_z} in + *[![:alnum:]_]*) + IFS="|" + continue + ;; + esac + # skip non executable scripts + if [ ! -x ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + # skip directories + if [ -d ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + tmpdeplist="${tmpdeplist} ${rs_z}" + break + done + IFS="$OLD_IFS" + ;; + *) + case ${rs_y} in + *[![:alnum:]_]*) + continue + ;; + esac + if [ ! -x ${initdir}/${rs_y} ]; then + continue + fi + if [ -d ${initdir}/${rs_y} ]; then + continue + fi + tmpdeplist="${tmpdeplist} ${rs_y}" + ;; + esac + done + deplist=${tmpdeplist} + for rs_x in ${runlist}; do + pop_list_item ${rs_x} ${deplist} + deplist=${tmppop} + done + eval array_${1}=\"${deplist}\" +} + +get_prereqs() +{ + set_initlist + for gp_x in ${initlist}; do + tmp=$(${initdir}/${gp_x} prereqs) + eval array_${gp_x}=\"${tmp}\" + done +} + +count_unsatisfied() +{ + set -- ${@} + return ${#} +} + +# Removes $1 from initlist +pop_list_item() +{ + item=${1} + shift + set -- ${@} + unset tmppop + # Iterate + for pop in ${@}; do + if [ ${pop} = ${item} ]; then + continue + fi + tmppop="${tmppop} ${pop}" + done + +} + +# This function generates the runlist, so we clear it first. +reduce_prereqs() +{ + unset runlist + set -- ${initlist} + i=$# + # Loop until there's no more in the queue to loop through + while [ ${i} -ne 0 ]; do + oldi=${i} + for rp_x in ${initlist}; do + reduce_satisfied ${rp_x} + count_unsatisfied $(render array_${rp_x}) + cnt=${?} + if [ ${cnt} -eq 0 ]; then + runlist="${runlist} ${rp_x}" + pop_list_item ${rp_x} ${initlist} + initlist=${tmppop} + i=$((${i} - 1)) + fi + done + if [ ${i} -eq ${oldi} ]; then + panic "PANIC: Circular dependancy. Exiting." + fi + done +} + +get_prereq_pairs() +{ + set_initlist + for gp_x in ${initlist}; do + echo ${gp_x} ${gp_x} + prereqs=$(${initdir}/${gp_x} prereqs) + for prereq in ${prereqs}; do + echo ${prereq} ${gp_x} + done + done +} + +call_scripts() +{ + for cs_x in ${runlist}; do + [ -f ${initdir}/${cs_x} ] || continue + if [ x"$1" = "xoptional" ]; then + option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") + [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue + fi + + # mkinitramfs verbose output + if [ "${verbose}" = "y" ]; then + echo "Calling hook ${cs_x}" + fi + ${initdir}/${cs_x} + # allow boot scripts to modify exported boot paramaters + if [ -e /conf/param.conf ]; then + . /conf/param.conf + fi + done +} + +run_scripts() +{ + initdir=${1} + [ ! -d ${initdir} ] && return + + if [ -f ${initdir}/ORDER ]; then + . ${initdir}/ORDER + elif [ -x /usr/bin/tsort ]; then + runlist=$(get_prereq_pairs | tsort) + call_scripts $2 + else + get_prereqs + reduce_prereqs + call_scripts $2 + fi +} + +cache_run_scripts() +{ + DESTDIR=${1} + scriptdir=${2} + initdir=${DESTDIR}${scriptdir} + [ ! -d ${initdir} ] && return + + runlist=$(get_prereq_pairs | tsort) + for crs_x in ${runlist}; do + [ -f ${initdir}/${crs_x} ] || continue + echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER + echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER + done +} + +# Load custom modules first +load_modules() +{ + if [ -e /conf/modules ]; then + cat /conf/modules | while read m; do + # Skip empty lines + if [ -z "$m" ]; then + continue + fi + # Skip comments - d?ash removes whitespace prefix + com=$(printf "%.1s" "${m}") + if [ "$com" = "#" ]; then + continue + fi + modprobe $m + done + fi +} + +# lilo compatibility +parse_numeric() { + case $1 in + "") + return + ;; + /*) + return + ;; + *:*) + minor=${1#*:} + major=${1%:*} + ;; + *) + value=$(( 0x${1} )) + minor=$(( ${value} % 256 )) + major=$(( ${value} / 256 )) + ;; + esac + + mknod -m 600 /dev/root b ${major} ${minor} + ROOT=/dev/root +} + +configure_networking() +{ + # networking already configured thus bail out + [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 + + if [ "${HWADDR}" ]; then + # select interface by MAC address + HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" + local iface + for iface in /sys/class/net/*; do + [ -f "$iface/address" ] || continue + if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then + DEVICE="${iface#/sys/class/net/}" + fi + done + fi + + # support ip options see linux sources + # Documentation/filesystems/nfsroot.txt + case ${IPOPTS} in + none|off) + # Do nothing + ;; + ""|on|any) + # Bring up device + ipconfig -t 60 ${DEVICE} + ;; + dhcp|bootp|rarp|both) + ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} + ;; + *) + ipconfig -t 60 -d $IPOPTS + + # grab device entry from ip option + NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac + + # source ipconfig output + if [ -n "${DEVICE}" ]; then + # source specific bootdevice + . /tmp/net-${DEVICE}.conf + else + # source any interface as not exaclty specified + . /tmp/net-*.conf + fi +} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth new file mode 100755 index 00000000..8b1e7c8a --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth @@ -0,0 +1,21 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] +then + /bin/plymouth update-root-fs --new-root-dir=${rootmnt} +fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev new file mode 100755 index 00000000..f9d2ce9d --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev @@ -0,0 +1,24 @@ +#!/bin/sh -e +# initramfs init-bottom script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Stop udevd, we'll miss a few events while we run init, but we catch up +pkill udevd + +# Move /dev to the real filesystem +mount -n -o move /dev ${rootmnt}/dev diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 new file mode 100755 index 00000000..e5bc78f1 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 @@ -0,0 +1,41 @@ +#!/bin/sh + +# init-premount script for lvm2. + +PREREQS="udev mdadm" +prereqs() +{ + echo $PREREQS +} + +mountroot_fail() +{ + if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then + cat </dev/null; then + modprobe ata_generic all_generic_ide=1 +fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist new file mode 100755 index 00000000..5e6b3c1e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist @@ -0,0 +1,34 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +# blacklist vga16fb when vga= or video= given +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*|video=*) + echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs + ;; + esac +done + +# sanity check +[ -z "${blacklist}" ] && exit 0 + +# write blacklist to modprobe.d +IFS=',' +for b in ${blacklist}; do + echo "blacklist $b" >> /etc/modprobe.d/initramfs +done diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup new file mode 100755 index 00000000..df767bb4 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup @@ -0,0 +1,83 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +OPTION=FRAMEBUFFER +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer new file mode 100755 index 00000000..bb59aadf --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer @@ -0,0 +1,104 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + + +# The options part of the kernel "video=" argument (i.e. everyting +# after "video=:") has very inconsistent rules. +# +# Generally the following applies: +# 1) options are comma-separated +# 2) options can be in either of these three forms: +# =, :, . +# 3) the "mode" option has the form x[M][R][-][@][i][m] +# and may or may not start with "mode=" +# +# When the options are used with modules, they need to be space-separated +# and the following conversions are needed: +# : -> = +# -> =1 +# -> mode= +parse_video_opts() +{ + local OPTS="$1" + local IFS="," + + # Must be a line like video=:,[opt2]... + if [ "${OPTS}" = "${OPTS%%:*}" ]; then + return + fi + OPTS="${OPTS#*:}" + for opt in ${OPTS}; do + # Already in the "=" form + if [ "${opt}" != "${opt#*=}" ]; then + echo -n "$opt " + # In the ":" form + elif [ "${opt}" != "${opt#*:}" ]; then + echo -n "${opt%:*}=${opt#*:} " + # Presumably a modevalue without the "mode=" prefix + elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then + echo -n "mode=$opt " + # Presumably a boolean + else + echo -n "${opt}=1 " + fi + done +} + +FB="" +OPTS="" + +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*) + FB="vesafb"; + OPTS=""; + ;; + video=*) + FB=${x#*=} + FB="${FB%%:*}" + OPTS="$(parse_video_opts "${x}")" + esac +done + +# Map command line name to module name +case ${FB} in +matroxfb) + FB=matroxfb_base + ;; +esac + +if [ -n "${FB}" ]; then + # Some framebuffer devices need character devices :-/ + udevadm settle + MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} + # Wait for the framebuffer devices to be ready + udevadm settle +else + # If we have no graphics devices yet, wait for udev to settle + [ -d /sys/class/graphics/fbcon ] || udevadm settle + [ -d /sys/class/graphics/fb0 ] || udevadm settle + [ -d /sys/class/drm/card0 ] || udevadm settle +fi + +# Force fb mode via /sys interface +for x in $(cat /proc/cmdline); do + case ${x} in + fbmode=*) + MODE=${x#*=} + echo "$MODE" > /sys/class/graphics/fb0/mode + ;; + esac +done diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap new file mode 100755 index 00000000..cb67aa96 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap @@ -0,0 +1,28 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth new file mode 100755 index 00000000..813b6b4c --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth @@ -0,0 +1,20 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="framebuffer console_setup brltty" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +printf '\033[?25l' > /dev/tty7 +/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid +/bin/plymouth show-splash diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev new file mode 100755 index 00000000..cd2fa564 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev @@ -0,0 +1,30 @@ +#!/bin/sh -e +# initramfs init-top script for udev + +PREREQ="all_generic_ide blacklist" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# It's all over netlink now +echo "" > /proc/sys/kernel/hotplug + +# Start the udev daemon to process events +/sbin/udevd --daemon --resolve-names=never + +# Iterate sysfs and fire off everything; if we include a rule for it then +# it'll get handled; otherwise it'll get handled later when we do this again +# in the main boot sequence. +( /sbin/udevadm trigger --subsystem-match=block; \ + /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local new file mode 100644 index 00000000..865572b5 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local @@ -0,0 +1,131 @@ +# Local filesystem mounting -*- shell-script -*- + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" + run_scripts /scripts/local-top + [ "$quiet" != "y" ] && log_end_msg + + while [ -z "${FSTYPE}" ]; do + FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) + + # Run failure hooks, hoping one of them can fix up the system + # and we can restart the wait loop. If they all fail, abort + # and move on to the panic handler and shell. + if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then + break + fi + done + + # We've given up, but we'll let the user fix matters if they can + while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do + # give hint about renamed root + case "${ROOT}" in + /dev/hd*) + suffix="${ROOT#/dev/hd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/sd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" + fi + ;; + /dev/sd*) + suffix="${ROOT#/dev/sd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/hd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" + fi + ;; + esac + echo "Gave up waiting for root device. Common problems:" + echo " - Boot args (cat /proc/cmdline)" + echo " - Check rootdelay= (did the system wait long enough?)" + echo " - Check root= (did the system wait for the right device?)" + echo " - Missing modules (cat /proc/modules; ls /dev)" + panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" + done + + # Get the root filesystem type if not set + if [ -z "${ROOTFSTYPE}" ]; then + [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") + ROOTFSTYPE="${FSTYPE}" + else + FSTYPE="${ROOTFSTYPE}" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" + run_scripts /scripts/local-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ] && \ + [ -z "$LOOP" ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} + + # FIXME This has no error checking + # Mount root + mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} + mountroot_status="$?" + if [ "$LOOP" ]; then + if [ "$mountroot_status" != 0 ]; then + if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then + panic " +Could not mount the partition ${ROOT}. +This could also happen if the file system is not clean because of an operating +system crash, an interrupted boot process, an improper shutdown, or unplugging +of a removable device without first unmounting or ejecting it. To fix this, +simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then +gracefully shut down and reboot back into Windows. After this you should be +able to reboot again and resume the installation. +(filesystem = ${FSTYPE}, error code = $mountroot_status) +" + fi + fi + + mkdir -p /host + mount -o move ${rootmnt} /host + + while [ ! -e "/host/${LOOP#/}" ]; do + panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" + done + + # Get the loop filesystem type if not set + if [ -z "${LOOPFSTYPE}" ]; then + eval $(fstype < "/host/${LOOP#/}") + else + FSTYPE="${LOOPFSTYPE}" + fi + if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then + FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") + [ -z "$FSTYPE" ] && FSTYPE="unknown" + fi + + if [ ${readonly} = y ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + modprobe loop + modprobe ${FSTYPE} + + # FIXME This has no error checking + mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} + + if [ -d ${rootmnt}/host ]; then + mount -o move /host ${rootmnt}/host + fi + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" + run_scripts /scripts/local-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g new file mode 100755 index 00000000..335ef95e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g @@ -0,0 +1,16 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + mkdir -p /dev/.initramfs/varrun + pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit + pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit +fi + +exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc new file mode 100755 index 00000000..c9fbc369 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc @@ -0,0 +1,64 @@ +#!/bin/sh -e +# initramfs local-premount script for fixrtc + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +# use the fixrtc cmdline option in your bootloader to +# automatically set the hardware clock to the date of +# the last mount of your root filesystem to avoid fsck +# to get confused by the superblock being in the future + +BROKEN_CLOCK="" +ROOTDEV="" + +for x in $(cat /proc/cmdline); do + case ${x} in + root=*) + value=${x#*=} + + # Find the device node path depending on the form of root= : + + case ${value} in + UUID=*) + ROOTDEV=/dev/disk/by-uuid/${value#UUID=} + ;; + LABEL=*) + ROOTDEV=/dev/disk/by-label/${value#LABEL=} + ;; + *) + ROOTDEV=${value} + ;; + esac + ;; + fixrtc) + BROKEN_CLOCK=1 + ;; + esac +done + +if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then + ROOTDISK=$(readlink -f "$ROOTDEV") && + + TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && + TIME=${TIMESTR#*:} && + + date --set="${TIME} 1 minute" >/dev/null 2>&1 +fi + +# This script is best-effort. If we couldn't fudge the clock as desired, +# just try to carry on boot anyway: +# It will probably fail, but we won't have made the situation any worse. +exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g new file mode 100755 index 00000000..57e7f8ba --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g @@ -0,0 +1,14 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + modprobe fuse +fi + +exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume new file mode 100755 index 00000000..46535936 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume @@ -0,0 +1,75 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +. ./scripts/functions + +if [ -z "${resume}" ]; then + exit 0 +fi + +case $resume in +LABEL=*) + resume="${resume#LABEL=}" + + # support any / in LABEL= path (escape to \x2f) + case "${resume}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + resume="$(echo ${resume} | sed 's,/,\\x2f,g')" + else + if [ "${resume}" != "${resume#/}" ]; then + resume="\x2f${resume#/}" + fi + if [ "${resume}" != "${resume%/}" ]; then + resume="${resume%/}\x2f" + fi + IFS='/' + newresume= + for s in $resume; do + if [ -z "${newresume}" ]; then + newresume="${s}" + else + newresume="${newresume}\\x2f${s}" + fi + done + unset IFS + resume="${newresume}" + fi + esac + resume="/dev/disk/by-label/${resume}" + ;; +UUID=*) + resume="/dev/disk/by-uuid/${resume#UUID=}" + ;; +esac + +SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) + +case "${SWAPTYPE}" in + swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) + if [ -x /bin/plymouth ] && plymouth --ping; then + plymouth message --text="Resuming from $resume" + fi + + # hardcode path, uswsusp ships an resume binary too + if [ -n "${resume_offset}" ]; then + /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 + else + /bin/resume ${resume} >/dev/null 2>&1 + fi + ;; +esac diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs new file mode 100644 index 00000000..b9c2522d --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs @@ -0,0 +1,83 @@ +# NFS filesystem mounting -*- shell-script -*- + +# FIXME This needs error checking + +retry_nr=0 + +# parse nfs bootargs and mount nfs +do_nfsmount() +{ + + configure_networking + + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + + if [ -z "${NFSOPTS}" ]; then + NFSOPTS="-o retrans=10" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" + run_scripts /scripts/nfs-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ]; then + roflag="-o ro" + else + roflag="-o rw" + fi + + nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} +} + +# NFS root mounting +mountroot() +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" + run_scripts /scripts/nfs-top + [ "$quiet" != "y" ] && log_end_msg + + modprobe nfs + # For DHCP + modprobe af_packet + + # Default delay is around 180s + # FIXME: add usplash_write info + if [ -z "${ROOTDELAY}" ]; then + delay=180 + else + delay=${ROOTDELAY} + fi + + # loop until nfsmount succeds + while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do + [ ${retry_nr} -gt 0 ] && \ + [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" + do_nfsmount + retry_nr=$(( ${retry_nr} + 1 )) + [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 + [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg + done + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" + run_scripts /scripts/nfs-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev new file mode 100755 index 00000000..980e496f --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev @@ -0,0 +1,27 @@ +#!/bin/sh -e +# initramfs nfs-top script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Each call to udevsettle can take up to three minutes +if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TIMEOUT 360" + trap "/sbin/usplash_write 'TIMEOUT 15'" 0 +fi + +# We need to wait for the network card drivers to be loaded +/sbin/udevadm settle diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup new file mode 100755 index 00000000..5e97f65e --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup @@ -0,0 +1,82 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap new file mode 100644 index 00000000..f011abf5 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap @@ -0,0 +1,27 @@ +#!/bin/sh + +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth new file mode 100755 index 00000000..2da5a6b5 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth @@ -0,0 +1,18 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +/bin/plymouth quit diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm new file mode 100644 index 00000000..11d27f8c --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm @@ -0,0 +1,18 @@ +# mdadm boot_degraded configuration +# +# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if +# you want. You can also change the values here and changes will be preserved. +# Do note that only the values are preserved; the rest of the file is +# rewritten. +# +# BOOT_DEGRADED: +# Do you want to boot your system if a RAID providing your root filesystem +# becomes degraded? +# +# Running a system with a degraded RAID could result in permanent data loss +# if it suffers another hardware fault. +# +# However, you might answer "yes" if this system is a server, expected to +# tolerate hardware faults and boot unattended. + +BOOT_DEGRADED=false diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume new file mode 100644 index 00000000..34fdc4a5 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume @@ -0,0 +1 @@ +RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks new file mode 100755 index 00000000..3d9b04b8 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks @@ -0,0 +1,40 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash + + +# Insert OpenGnsys Engine +mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf new file mode 100644 index 00000000..754e2bea --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf @@ -0,0 +1,72 @@ +# +# initramfs.conf +# Configuration file for mkinitramfs(8). See initramfs.conf(5). +# + +# +# MODULES: [ most | netboot | dep | list ] +# +# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. +# +# dep - Try and guess which modules to load. +# +# netboot - Add the base modules, network modules, but skip block devices. +# +# list - Only include modules from the 'additional modules' list +# + +MODULES=most + +# +# BUSYBOX: [ y | n ] +# +# Use busybox if available. +# + +BUSYBOX=y + +# +# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] +# +# Amount of RAM to use for RAM-based compressed swap space. +# +# An empty value - compcache isn't used, or added to the initramfs at all. +# An integer and K (e.g. 65536 K) - use a number of kilobytes. +# An integer and M (e.g. 256 M) - use a number of megabytes. +# An integer and G (e.g. 1 G) - use a number of gigabytes. +# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. +# +# You can optionally install the compcache package to configure this setting +# via debconf and have userspace scripts to load and unload compcache. +# + +COMPCACHE_SIZE="" + +# +# NFS Section of the config. +# + +# +# BOOT: [ local | nfs ] +# +# local - Boot off of local media (harddrive, USB stick). +# +# nfs - Boot using an NFS drive as the root of the drive. +# + +BOOT=local + +# +# DEVICE: ... +# +# Specify the network interface, like eth0 +# + +DEVICE=eth0 + +# +# NFSROOT: [ auto | HOST:MOUNT ] +# + +NFSROOT=auto + diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules new file mode 100644 index 00000000..484ef718 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules @@ -0,0 +1,13 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +fbcon +vesafb +vga16b diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og new file mode 100755 index 00000000..6408eda7 --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og @@ -0,0 +1,140 @@ +# OpenGnsys Local filesystem mounting -*- shell-script -*- + +ogLinkBusybox () +{ +for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do + ln -f /bin/busybox /bin/$n +done +ln -f /bin/busybox /bin/sh +} + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + + mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +configure_networking +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + +set -a +trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 +/opt/opengnsys/etc/preinit/default.sh + + + + + + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + run_scripts /scripts/og-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf new file mode 100644 index 00000000..3c27473b --- /dev/null +++ b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf @@ -0,0 +1,20 @@ +# +# Configuration file for update-initramfs(8) +# + +# +# update_initramfs [ yes | all | no ] +# +# Default is yes +# If set to all update-initramfs will update all initramfs +# If set to no disables any update to initramfs beside kernel upgrade + +update_initramfs=yes + +# +# backup_initramfs [ yes | no ] +# +# Default is no +# If set to no leaves no .bak backup files. + +backup_initramfs=no diff --git a/client/ogClient/old/serverstructure/etc/exports.txt b/client/ogClient/old/serverstructure/etc/exports.txt new file mode 100644 index 00000000..d5053530 --- /dev/null +++ b/client/ogClient/old/serverstructure/etc/exports.txt @@ -0,0 +1 @@ +/var/lib/tftpboot/ *(ro,no_subtree_check,no_root_squash,sync) diff --git a/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt b/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt new file mode 100644 index 00000000..e47df3d8 --- /dev/null +++ b/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt @@ -0,0 +1,29 @@ +[tftpboot] + comment = el directorio fisico ogclient debe estar como escritura + writeable = no + read only = yes + #locking = no + path = /var/lib/tftpboot + guest ok = no + +[ogclient] + comment = client + read only = yes + locking = no + path = /opt/opengnsys/client + guest ok = no + +[oglog] + comment = log + read only = yes + locking = no + path = /opt/opengnsys/log/clients + guest ok = no + +[ogimages] + comment = images + read only = no + writeable = yes + locking = no + path = /opt/opengnsys/images + guest ok = no \ No newline at end of file diff --git a/client/ogClient/old/serverstructure/init/defaultTESTING.sh b/client/ogClient/old/serverstructure/init/defaultTESTING.sh new file mode 100755 index 00000000..07c10bcb --- /dev/null +++ b/client/ogClient/old/serverstructure/init/defaultTESTING.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +/etc/init.d/ssh restart +#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 + + +# Fichero de registro de incidencias (en el servidor; si no, en local). +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} +if ! touch $OGLOGFILE 2>/dev/null; then + OGLOGFILE=/var/log/opengnsys.log +fi + + +#TODO => activacion de modo escritura en REPO +ActiveAdmin=true +if [ $ActiveAdmin == "true" ] +then + export boot=admin + umount /opt/opengnsys/images + + if [ "$ogprotocol" == "nfs" ] + then + mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock + fi + + if [ "$ogprotocol" == "smb" ] + then + echo "montando smb" + mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og + echo mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og + + fi +fi +# Arranque de OpenGnSys Client. +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + + + echo "$MSG_LAUNCHCLIENT modo cliente full" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 +fi + +# Si fallo en cliente y modo "admin", cargar shell; si no, salir. +#if [ "$boot" == "admin" ]; then + bash +#fi diff --git a/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh b/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh new file mode 100755 index 00000000..3d291cc5 --- /dev/null +++ b/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Para que no haya problemas con el interprete +#ln -fs /opt/opengnsys/bin/bash /bin/bash + +set -a + +#source /opt/opengnsys/etc/preinit/loadenviron.sh +source /opt/opengnsys/etc/preinit/loadenvironTESTING.sh +#for f in fileslinks.sh loadudeb.sh loadmodules.sh metadevs.sh; do +for f in loadmodulesTESTING.sh; do + $OGETC/preinit/$f +done + +if [ -f $OGETC/init/$OG_IP.sh ]; then + $OGETC/init/$OG_IP.sh + +elif [ -f $OGETC/init/$OGGROUP.sh ]; then + $OGETC/init/$OGGROUP.sh + +elif [ -f $OGETC/init/defaultTESTING.sh ]; then + $OGETC/init/defaultTESTING.sh + +else + echo "No se ha encontrado script de inicio" + halt +fi diff --git a/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh b/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh new file mode 100755 index 00000000..1273db7f --- /dev/null +++ b/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh @@ -0,0 +1,95 @@ +#!/bin/bash +#/** +#@file loadenviron.sh +#@brief Script de carga de la API de funciones de OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + +# Idioma por defecto. +export LANG="${LANG:-es_ES}" + +# Directorios del projecto OpenGnSys. +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" +if [ -d $OPENGNSYS ]; then + export OGBIN=$OPENGNSYS/bin/testing + #export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + + #export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH + #export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH + + # Cargar fichero de idioma. + LANGFILE=$OGETC/lang.$LANG.conf + if [ -f $LANGFILE ]; then + source $LANGFILE + for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do + export $i + done + fi + echo "$MSG_LOADAPI" + # Cargar mapa de teclado. + loadkeys ${LANG%_*} >/dev/null + # Cargar API de funciones. + for i in $OGAPI/*.lib; do + source $i + done + for i in $(typeset -F | cut -f3 -d" "); do + export -f $i + done + + # Añadir dependencia de arquitectura + ARCH=$(ogGetArch) +# if [ -n "$ARCH" ]; then + # export PATH=$OGBIN/$ARCH:$PATH + # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH + # fi + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + # Carga de las API testing + if [ "$engine" = "testing" ] + then + for i in $OGAPI/*.testing; do + source $i + done + #export PATH=$PATH:$OGBIN/$ARCH-testing + fi + + # Fichero de registros. + export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + # FIXME Pruebas para grupos de ordenadores + #export OGGROUP=$(ogGetGroup) + export OGGROUP="$group" +fi + +# Declaración de códigos de error. +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + diff --git a/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh b/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh new file mode 100755 index 00000000..cea7d53a --- /dev/null +++ b/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh @@ -0,0 +1,28 @@ +#!/bin/bash +#/** +#@file loadmodules.sh +#@brief Script de inicio para cargar módulos complementarios del kernel. +#@version 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-01-26 +#*/ + + +MSG_LOADMODULES=${MSG_LOADMODULES:-"."} +echo "$MSG_LOADMODULES para cliente full" + +# Directorio principal de módulos del kernel. +MODULESDIR=/lib/modules/$(uname -r)/kernel + +# Módulo del ratón. +insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null +# Módulos de discos. +#for m in $MODULESDIR/drivers/ata/*.ko; do + # insmod $m 2>/dev/null +#done +# Módulos de sistemas de archivos. +#for f in reiserfs jfs xfs hfs hfsplus; do +#for f in reiserfs xfs hfs hfsplus; do +# insmod $MODULESDIR/fs/$f/$f.ko 2>/dev/null +#done + diff --git a/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL b/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL new file mode 100644 index 00000000..b7f81d0a --- /dev/null +++ b/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL @@ -0,0 +1,18 @@ +DEFAULT pxe-2.6.32-21-generic-pae + +LABEL pxe +KERNEL linux +APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin + +LABEL pxe-2.6.32-21-generic-pae +KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=nfs engine=testing + + +#NOTA: parametro boot: reservado para oginit INCOMPATIBLE CON BOOT=ADMIN +#NOTA: reposerver=$IPREPO correspondería a tu servidor Repositorio OG +#ogrepo=172.17.32.242 +#ip: +#og2nd=sqfs =>sqfs, img +#ogprotocol=nfs => nfs, smb +#engine=testing => activa las libreias testing de cada universidad. -- cgit v1.2.3-18-g5258 From b1ccf9b2968d3f0fe0f159b7fd75fa84454d3854 Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 14:01:38 +0000 Subject: version1.0 renombrando ogclient boot-tools git-svn-id: https://opengnsys.es/svn/branches/version1.0@1764 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/boot-tools/INSTALL.es.txt | 46 + .../clientstructure/etc/apt/sources.list.debian | 4 + .../clientstructure/etc/apt/sources.list.ubuntu | 56 ++ client/boot-tools/clientstructure/etc/environment | 4 + client/boot-tools/clientstructure/etc/fstab | 13 + .../etc/initramfs-tools/hooks/oghooks | 58 ++ .../clientstructure/etc/initramfs-tools/modules | 14 + .../etc/initramfs-tools/scripts/ogfunctions | 427 +++++++++ .../etc/initramfs-tools/scripts/oginit | 111 +++ client/boot-tools/clientstructure/etc/inittab | 14 + .../etc/modprobe.d/blacklist-framebuffer.conf | 30 + client/boot-tools/clientstructure/etc/mtab | 0 .../clientstructure/etc/network/interfaces | 4 + .../clientstructure/etc/profile.d/loadenviron.sh | 84 ++ .../boot-tools/clientstructure/etc/ssh/ssh_config | 56 ++ .../boot-tools/clientstructure/etc/ssh/sshd_config | 86 ++ .../clientstructure/root/CompileSoftware.sh | 30 + client/boot-tools/clientstructure/root/ConfFS.sh | 24 + .../clientstructure/root/GenerateInitrd.generic.sh | 16 + .../clientstructure/root/InstallSoftware.sh | 62 ++ .../clientstructure/root/ReconfigureLocales.sh | 4 + .../clientstructure/root/generateSshKeysClient.sh | 23 + .../clientstructure/root/importSshKeys.sh | 17 + client/boot-tools/clientstructure/root/qemu.sh | 9 + .../var/lib/locales/supported.d/local | 5 + client/boot-tools/kernelParameterOG.es.txt | 29 + client/boot-tools/ogClientGeneratorV2.sh | 166 ++++ client/boot-tools/ogClientManager.lib | 607 +++++++++++++ client/boot-tools/ogInstaller.lib | 958 +++++++++++++++++++++ .../old/ModificacionesNecesiariasENGINE/Net.lib | 77 ++ .../old/ModificacionesNecesiariasENGINE/readme | 27 + client/boot-tools/old/Net.lib | 77 ++ client/boot-tools/old/boot/default.sh | 23 + client/boot-tools/old/boot/load2fs.sh | 19 + client/boot-tools/old/conframfs.sh | 34 + .../usr/lib/initramfs-tools/bin/busybox | Bin 0 -> 1269432 bytes .../usr/lib/initramfs-tools/busybox | Bin 0 -> 223548 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 0 -> 9688 bytes .../usr/share/initramfs-tools/hook-functions | 461 ++++++++++ .../usr/share/initramfs-tools/hooks/compcache | 95 ++ .../usr/share/initramfs-tools/hooks/console_setup | 50 ++ .../usr/share/initramfs-tools/hooks/dmsetup | 23 + .../usr/share/initramfs-tools/hooks/fixrtc | 26 + .../usr/share/initramfs-tools/hooks/framebuffer | 41 + .../usr/share/initramfs-tools/hooks/fuse_utils | 15 + .../usr/share/initramfs-tools/hooks/kbd | 23 + .../usr/share/initramfs-tools/hooks/lvm2 | 43 + .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 + .../usr/share/initramfs-tools/hooks/plymouth | 69 ++ .../usr/share/initramfs-tools/hooks/thermal | 46 + .../usr/share/initramfs-tools/hooks/udev | 52 ++ .../usr/share/initramfs-tools/hooks/watershed | 25 + .../usr/share/initramfs-tools/init | 272 ++++++ .../usr/share/initramfs-tools/modules | 10 + .../usr/share/initramfs-tools/scripts/functions | 420 +++++++++ .../initramfs-tools/scripts/init-bottom/plymouth | 21 + .../share/initramfs-tools/scripts/init-bottom/udev | 24 + .../initramfs-tools/scripts/init-premount/lvm2 | 41 + .../scripts/init-top/all_generic_ide | 18 + .../initramfs-tools/scripts/init-top/blacklist | 34 + .../initramfs-tools/scripts/init-top/console_setup | 83 ++ .../initramfs-tools/scripts/init-top/framebuffer | 104 +++ .../share/initramfs-tools/scripts/init-top/keymap | 28 + .../initramfs-tools/scripts/init-top/plymouth | 20 + .../share/initramfs-tools/scripts/init-top/udev | 30 + .../usr/share/initramfs-tools/scripts/local | 131 +++ .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 + .../initramfs-tools/scripts/local-premount/fixrtc | 64 ++ .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 + .../initramfs-tools/scripts/local-premount/resume | 75 ++ .../usr/share/initramfs-tools/scripts/nfs | 83 ++ .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 + .../initramfs-tools/scripts/panic/console_setup | 82 ++ .../usr/share/initramfs-tools/scripts/panic/keymap | 27 + .../share/initramfs-tools/scripts/panic/plymouth | 18 + .../boot-tools/old/initramfs-tools-OG/conf.d/mdadm | 18 + .../old/initramfs-tools-OG/conf.d/resume | 1 + .../old/initramfs-tools-OG/hooks/oghooks | 40 + .../old/initramfs-tools-OG/initramfs.conf | 72 ++ client/boot-tools/old/initramfs-tools-OG/modules | 13 + .../boot-tools/old/initramfs-tools-OG/scripts/og | 140 +++ .../old/initramfs-tools-OG/update-initramfs.conf | 20 + client/boot-tools/old/ogClientFunctions | 255 ++++++ client/boot-tools/old/ogClientGenerator.sh | 306 +++++++ .../ModificacionesNecesiariasENGINE/Net.lib | 77 ++ .../ModificacionesNecesiariasENGINE/readme | 20 + client/boot-tools/old/ogFSHlnk/boot/default.sh | 23 + client/boot-tools/old/ogFSHlnk/boot/load2fs.sh | 19 + .../old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh | 395 +++++++++ .../initramfs-tools-OG-unionfs/antonio/rcog | 137 +++ .../etc/initramfs-tools-OG/conf.d/resume | 1 + .../etc/initramfs-tools-OG/hooks/oghooks | 43 + .../etc/initramfs-tools-OG/initramfs.conf | 72 ++ .../etc/initramfs-tools-OG/modules | 14 + .../etc/initramfs-tools-OG/scripts/og | 194 +++++ .../etc/initramfs-tools-OG/update-initramfs.conf | 20 + .../initramfs-tools-OG-unionfs/etc/inittab | 14 + .../etc/modprobe.d/blacklist-framebuffer.conf | 30 + .../usr/lib/initramfs-tools/bin/busybox | Bin 0 -> 1269432 bytes .../usr/lib/initramfs-tools/busybox | Bin 0 -> 223548 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 0 -> 9688 bytes .../usr/share/initramfs-tools/hook-functions | 461 ++++++++++ .../usr/share/initramfs-tools/hooks/compcache | 95 ++ .../usr/share/initramfs-tools/hooks/console_setup | 50 ++ .../usr/share/initramfs-tools/hooks/dmsetup | 23 + .../usr/share/initramfs-tools/hooks/fixrtc | 26 + .../usr/share/initramfs-tools/hooks/framebuffer | 41 + .../usr/share/initramfs-tools/hooks/fuse_utils | 15 + .../usr/share/initramfs-tools/hooks/kbd | 23 + .../usr/share/initramfs-tools/hooks/lvm2 | 43 + .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 + .../usr/share/initramfs-tools/hooks/plymouth | 69 ++ .../usr/share/initramfs-tools/hooks/thermal | 46 + .../usr/share/initramfs-tools/hooks/udev | 52 ++ .../usr/share/initramfs-tools/hooks/watershed | 25 + .../usr/share/initramfs-tools/init | 272 ++++++ .../usr/share/initramfs-tools/modules | 10 + .../usr/share/initramfs-tools/scripts/functions | 420 +++++++++ .../initramfs-tools/scripts/init-bottom/plymouth | 21 + .../share/initramfs-tools/scripts/init-bottom/udev | 24 + .../initramfs-tools/scripts/init-premount/lvm2 | 41 + .../scripts/init-top/all_generic_ide | 18 + .../initramfs-tools/scripts/init-top/blacklist | 34 + .../initramfs-tools/scripts/init-top/console_setup | 83 ++ .../initramfs-tools/scripts/init-top/framebuffer | 104 +++ .../share/initramfs-tools/scripts/init-top/keymap | 28 + .../initramfs-tools/scripts/init-top/plymouth | 20 + .../share/initramfs-tools/scripts/init-top/udev | 30 + .../usr/share/initramfs-tools/scripts/local | 131 +++ .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 + .../initramfs-tools/scripts/local-premount/fixrtc | 64 ++ .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 + .../initramfs-tools/scripts/local-premount/resume | 75 ++ .../usr/share/initramfs-tools/scripts/nfs | 83 ++ .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 + .../initramfs-tools/scripts/panic/console_setup | 82 ++ .../usr/share/initramfs-tools/scripts/panic/keymap | 27 + .../share/initramfs-tools/scripts/panic/plymouth | 18 + .../ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm | 18 + .../ogFSHlnk/old/initramfs-tools-OG/conf.d/resume | 1 + .../ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks | 40 + .../ogFSHlnk/old/initramfs-tools-OG/initramfs.conf | 72 ++ .../old/ogFSHlnk/old/initramfs-tools-OG/modules | 13 + .../old/ogFSHlnk/old/initramfs-tools-OG/scripts/og | 140 +++ .../old/initramfs-tools-OG/update-initramfs.conf | 20 + .../boot-tools/old/serverstructure/etc/exports.txt | 1 + .../old/serverstructure/etc/samba/smb.conf.txt | 29 + .../old/serverstructure/init/defaultTESTING.sh | 46 + .../old/serverstructure/preinit/defaultTESTING.sh | 27 + .../serverstructure/preinit/loadenvironTESTING.sh | 95 ++ .../serverstructure/preinit/loadmodulesTESTING.sh | 28 + .../serverstructure/var/lib/tftpboot/defaultFULL | 18 + client/ogClient/INSTALL.es.txt | 46 - .../clientstructure/etc/apt/sources.list.debian | 4 - .../clientstructure/etc/apt/sources.list.ubuntu | 56 -- client/ogClient/clientstructure/etc/environment | 4 - client/ogClient/clientstructure/etc/fstab | 13 - .../etc/initramfs-tools/hooks/oghooks | 58 -- .../clientstructure/etc/initramfs-tools/modules | 14 - .../etc/initramfs-tools/scripts/ogfunctions | 427 --------- .../etc/initramfs-tools/scripts/oginit | 111 --- client/ogClient/clientstructure/etc/inittab | 14 - .../etc/modprobe.d/blacklist-framebuffer.conf | 30 - client/ogClient/clientstructure/etc/mtab | 0 .../clientstructure/etc/network/interfaces | 4 - .../clientstructure/etc/profile.d/loadenviron.sh | 84 -- client/ogClient/clientstructure/etc/ssh/ssh_config | 56 -- .../ogClient/clientstructure/etc/ssh/sshd_config | 86 -- .../clientstructure/root/CompileSoftware.sh | 30 - client/ogClient/clientstructure/root/ConfFS.sh | 24 - .../clientstructure/root/GenerateInitrd.generic.sh | 16 - .../clientstructure/root/InstallSoftware.sh | 62 -- .../clientstructure/root/ReconfigureLocales.sh | 4 - .../clientstructure/root/generateSshKeysClient.sh | 23 - .../ogClient/clientstructure/root/importSshKeys.sh | 17 - client/ogClient/clientstructure/root/qemu.sh | 9 - .../var/lib/locales/supported.d/local | 5 - client/ogClient/kernelParameterOG.es.txt | 29 - client/ogClient/ogClientGeneratorV2.sh | 166 ---- client/ogClient/ogClientManager.lib | 607 ------------- client/ogClient/ogInstaller.lib | 958 --------------------- .../old/ModificacionesNecesiariasENGINE/Net.lib | 77 -- .../old/ModificacionesNecesiariasENGINE/readme | 27 - client/ogClient/old/Net.lib | 77 -- client/ogClient/old/boot/default.sh | 23 - client/ogClient/old/boot/load2fs.sh | 19 - client/ogClient/old/conframfs.sh | 34 - .../usr/lib/initramfs-tools/bin/busybox | Bin 1269432 -> 0 bytes .../usr/lib/initramfs-tools/busybox | Bin 223548 -> 0 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 9688 -> 0 bytes .../usr/share/initramfs-tools/hook-functions | 461 ---------- .../usr/share/initramfs-tools/hooks/compcache | 95 -- .../usr/share/initramfs-tools/hooks/console_setup | 50 -- .../usr/share/initramfs-tools/hooks/dmsetup | 23 - .../usr/share/initramfs-tools/hooks/fixrtc | 26 - .../usr/share/initramfs-tools/hooks/framebuffer | 41 - .../usr/share/initramfs-tools/hooks/fuse_utils | 15 - .../usr/share/initramfs-tools/hooks/kbd | 23 - .../usr/share/initramfs-tools/hooks/lvm2 | 43 - .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 - .../usr/share/initramfs-tools/hooks/plymouth | 69 -- .../usr/share/initramfs-tools/hooks/thermal | 46 - .../usr/share/initramfs-tools/hooks/udev | 52 -- .../usr/share/initramfs-tools/hooks/watershed | 25 - .../usr/share/initramfs-tools/init | 272 ------ .../usr/share/initramfs-tools/modules | 10 - .../usr/share/initramfs-tools/scripts/functions | 420 --------- .../initramfs-tools/scripts/init-bottom/plymouth | 21 - .../share/initramfs-tools/scripts/init-bottom/udev | 24 - .../initramfs-tools/scripts/init-premount/lvm2 | 41 - .../scripts/init-top/all_generic_ide | 18 - .../initramfs-tools/scripts/init-top/blacklist | 34 - .../initramfs-tools/scripts/init-top/console_setup | 83 -- .../initramfs-tools/scripts/init-top/framebuffer | 104 --- .../share/initramfs-tools/scripts/init-top/keymap | 28 - .../initramfs-tools/scripts/init-top/plymouth | 20 - .../share/initramfs-tools/scripts/init-top/udev | 30 - .../usr/share/initramfs-tools/scripts/local | 131 --- .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 - .../initramfs-tools/scripts/local-premount/fixrtc | 64 -- .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 - .../initramfs-tools/scripts/local-premount/resume | 75 -- .../usr/share/initramfs-tools/scripts/nfs | 83 -- .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 - .../initramfs-tools/scripts/panic/console_setup | 82 -- .../usr/share/initramfs-tools/scripts/panic/keymap | 27 - .../share/initramfs-tools/scripts/panic/plymouth | 18 - .../ogClient/old/initramfs-tools-OG/conf.d/mdadm | 18 - .../ogClient/old/initramfs-tools-OG/conf.d/resume | 1 - .../ogClient/old/initramfs-tools-OG/hooks/oghooks | 40 - .../ogClient/old/initramfs-tools-OG/initramfs.conf | 72 -- client/ogClient/old/initramfs-tools-OG/modules | 13 - client/ogClient/old/initramfs-tools-OG/scripts/og | 140 --- .../old/initramfs-tools-OG/update-initramfs.conf | 20 - client/ogClient/old/ogClientFunctions | 255 ------ client/ogClient/old/ogClientGenerator.sh | 306 ------- .../ModificacionesNecesiariasENGINE/Net.lib | 77 -- .../ModificacionesNecesiariasENGINE/readme | 20 - client/ogClient/old/ogFSHlnk/boot/default.sh | 23 - client/ogClient/old/ogFSHlnk/boot/load2fs.sh | 19 - .../old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh | 395 --------- .../initramfs-tools-OG-unionfs/antonio/rcog | 137 --- .../etc/initramfs-tools-OG/conf.d/resume | 1 - .../etc/initramfs-tools-OG/hooks/oghooks | 43 - .../etc/initramfs-tools-OG/initramfs.conf | 72 -- .../etc/initramfs-tools-OG/modules | 14 - .../etc/initramfs-tools-OG/scripts/og | 194 ----- .../etc/initramfs-tools-OG/update-initramfs.conf | 20 - .../initramfs-tools-OG-unionfs/etc/inittab | 14 - .../etc/modprobe.d/blacklist-framebuffer.conf | 30 - .../usr/lib/initramfs-tools/bin/busybox | Bin 1269432 -> 0 bytes .../usr/lib/initramfs-tools/busybox | Bin 223548 -> 0 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 9688 -> 0 bytes .../usr/share/initramfs-tools/hook-functions | 461 ---------- .../usr/share/initramfs-tools/hooks/compcache | 95 -- .../usr/share/initramfs-tools/hooks/console_setup | 50 -- .../usr/share/initramfs-tools/hooks/dmsetup | 23 - .../usr/share/initramfs-tools/hooks/fixrtc | 26 - .../usr/share/initramfs-tools/hooks/framebuffer | 41 - .../usr/share/initramfs-tools/hooks/fuse_utils | 15 - .../usr/share/initramfs-tools/hooks/kbd | 23 - .../usr/share/initramfs-tools/hooks/lvm2 | 43 - .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 - .../usr/share/initramfs-tools/hooks/plymouth | 69 -- .../usr/share/initramfs-tools/hooks/thermal | 46 - .../usr/share/initramfs-tools/hooks/udev | 52 -- .../usr/share/initramfs-tools/hooks/watershed | 25 - .../usr/share/initramfs-tools/init | 272 ------ .../usr/share/initramfs-tools/modules | 10 - .../usr/share/initramfs-tools/scripts/functions | 420 --------- .../initramfs-tools/scripts/init-bottom/plymouth | 21 - .../share/initramfs-tools/scripts/init-bottom/udev | 24 - .../initramfs-tools/scripts/init-premount/lvm2 | 41 - .../scripts/init-top/all_generic_ide | 18 - .../initramfs-tools/scripts/init-top/blacklist | 34 - .../initramfs-tools/scripts/init-top/console_setup | 83 -- .../initramfs-tools/scripts/init-top/framebuffer | 104 --- .../share/initramfs-tools/scripts/init-top/keymap | 28 - .../initramfs-tools/scripts/init-top/plymouth | 20 - .../share/initramfs-tools/scripts/init-top/udev | 30 - .../usr/share/initramfs-tools/scripts/local | 131 --- .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 - .../initramfs-tools/scripts/local-premount/fixrtc | 64 -- .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 - .../initramfs-tools/scripts/local-premount/resume | 75 -- .../usr/share/initramfs-tools/scripts/nfs | 83 -- .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 - .../initramfs-tools/scripts/panic/console_setup | 82 -- .../usr/share/initramfs-tools/scripts/panic/keymap | 27 - .../share/initramfs-tools/scripts/panic/plymouth | 18 - .../ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm | 18 - .../ogFSHlnk/old/initramfs-tools-OG/conf.d/resume | 1 - .../ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks | 40 - .../ogFSHlnk/old/initramfs-tools-OG/initramfs.conf | 72 -- .../old/ogFSHlnk/old/initramfs-tools-OG/modules | 13 - .../old/ogFSHlnk/old/initramfs-tools-OG/scripts/og | 140 --- .../old/initramfs-tools-OG/update-initramfs.conf | 20 - .../ogClient/old/serverstructure/etc/exports.txt | 1 - .../old/serverstructure/etc/samba/smb.conf.txt | 29 - .../old/serverstructure/init/defaultTESTING.sh | 46 - .../old/serverstructure/preinit/defaultTESTING.sh | 27 - .../serverstructure/preinit/loadenvironTESTING.sh | 95 -- .../serverstructure/preinit/loadmodulesTESTING.sh | 28 - .../serverstructure/var/lib/tftpboot/defaultFULL | 18 - 304 files changed, 10952 insertions(+), 10952 deletions(-) create mode 100644 client/boot-tools/INSTALL.es.txt create mode 100644 client/boot-tools/clientstructure/etc/apt/sources.list.debian create mode 100644 client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu create mode 100644 client/boot-tools/clientstructure/etc/environment create mode 100644 client/boot-tools/clientstructure/etc/fstab create mode 100755 client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks create mode 100644 client/boot-tools/clientstructure/etc/initramfs-tools/modules create mode 100644 client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions create mode 100755 client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit create mode 100644 client/boot-tools/clientstructure/etc/inittab create mode 100644 client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf create mode 100644 client/boot-tools/clientstructure/etc/mtab create mode 100644 client/boot-tools/clientstructure/etc/network/interfaces create mode 100755 client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh create mode 100644 client/boot-tools/clientstructure/etc/ssh/ssh_config create mode 100644 client/boot-tools/clientstructure/etc/ssh/sshd_config create mode 100755 client/boot-tools/clientstructure/root/CompileSoftware.sh create mode 100755 client/boot-tools/clientstructure/root/ConfFS.sh create mode 100755 client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh create mode 100755 client/boot-tools/clientstructure/root/InstallSoftware.sh create mode 100755 client/boot-tools/clientstructure/root/ReconfigureLocales.sh create mode 100755 client/boot-tools/clientstructure/root/generateSshKeysClient.sh create mode 100755 client/boot-tools/clientstructure/root/importSshKeys.sh create mode 100755 client/boot-tools/clientstructure/root/qemu.sh create mode 100644 client/boot-tools/clientstructure/var/lib/locales/supported.d/local create mode 100644 client/boot-tools/kernelParameterOG.es.txt create mode 100755 client/boot-tools/ogClientGeneratorV2.sh create mode 100644 client/boot-tools/ogClientManager.lib create mode 100644 client/boot-tools/ogInstaller.lib create mode 100755 client/boot-tools/old/ModificacionesNecesiariasENGINE/Net.lib create mode 100644 client/boot-tools/old/ModificacionesNecesiariasENGINE/readme create mode 100755 client/boot-tools/old/Net.lib create mode 100755 client/boot-tools/old/boot/default.sh create mode 100644 client/boot-tools/old/boot/load2fs.sh create mode 100644 client/boot-tools/old/conframfs.sh create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root create mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init create mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules create mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev create mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume create mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup create mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap create mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth create mode 100644 client/boot-tools/old/initramfs-tools-OG/conf.d/mdadm create mode 100644 client/boot-tools/old/initramfs-tools-OG/conf.d/resume create mode 100755 client/boot-tools/old/initramfs-tools-OG/hooks/oghooks create mode 100644 client/boot-tools/old/initramfs-tools-OG/initramfs.conf create mode 100644 client/boot-tools/old/initramfs-tools-OG/modules create mode 100755 client/boot-tools/old/initramfs-tools-OG/scripts/og create mode 100644 client/boot-tools/old/initramfs-tools-OG/update-initramfs.conf create mode 100755 client/boot-tools/old/ogClientFunctions create mode 100755 client/boot-tools/old/ogClientGenerator.sh create mode 100755 client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib create mode 100644 client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme create mode 100755 client/boot-tools/old/ogFSHlnk/boot/default.sh create mode 100644 client/boot-tools/old/ogFSHlnk/boot/load2fs.sh create mode 100755 client/boot-tools/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup create mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap create mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth create mode 100644 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm create mode 100644 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume create mode 100755 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks create mode 100644 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf create mode 100644 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/modules create mode 100755 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og create mode 100644 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf create mode 100644 client/boot-tools/old/serverstructure/etc/exports.txt create mode 100644 client/boot-tools/old/serverstructure/etc/samba/smb.conf.txt create mode 100755 client/boot-tools/old/serverstructure/init/defaultTESTING.sh create mode 100755 client/boot-tools/old/serverstructure/preinit/defaultTESTING.sh create mode 100755 client/boot-tools/old/serverstructure/preinit/loadenvironTESTING.sh create mode 100755 client/boot-tools/old/serverstructure/preinit/loadmodulesTESTING.sh create mode 100644 client/boot-tools/old/serverstructure/var/lib/tftpboot/defaultFULL delete mode 100644 client/ogClient/INSTALL.es.txt delete mode 100644 client/ogClient/clientstructure/etc/apt/sources.list.debian delete mode 100644 client/ogClient/clientstructure/etc/apt/sources.list.ubuntu delete mode 100644 client/ogClient/clientstructure/etc/environment delete mode 100644 client/ogClient/clientstructure/etc/fstab delete mode 100755 client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks delete mode 100644 client/ogClient/clientstructure/etc/initramfs-tools/modules delete mode 100644 client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions delete mode 100755 client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit delete mode 100644 client/ogClient/clientstructure/etc/inittab delete mode 100644 client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf delete mode 100644 client/ogClient/clientstructure/etc/mtab delete mode 100644 client/ogClient/clientstructure/etc/network/interfaces delete mode 100755 client/ogClient/clientstructure/etc/profile.d/loadenviron.sh delete mode 100644 client/ogClient/clientstructure/etc/ssh/ssh_config delete mode 100644 client/ogClient/clientstructure/etc/ssh/sshd_config delete mode 100755 client/ogClient/clientstructure/root/CompileSoftware.sh delete mode 100755 client/ogClient/clientstructure/root/ConfFS.sh delete mode 100755 client/ogClient/clientstructure/root/GenerateInitrd.generic.sh delete mode 100755 client/ogClient/clientstructure/root/InstallSoftware.sh delete mode 100755 client/ogClient/clientstructure/root/ReconfigureLocales.sh delete mode 100755 client/ogClient/clientstructure/root/generateSshKeysClient.sh delete mode 100755 client/ogClient/clientstructure/root/importSshKeys.sh delete mode 100755 client/ogClient/clientstructure/root/qemu.sh delete mode 100644 client/ogClient/clientstructure/var/lib/locales/supported.d/local delete mode 100644 client/ogClient/kernelParameterOG.es.txt delete mode 100755 client/ogClient/ogClientGeneratorV2.sh delete mode 100644 client/ogClient/ogClientManager.lib delete mode 100644 client/ogClient/ogInstaller.lib delete mode 100755 client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib delete mode 100644 client/ogClient/old/ModificacionesNecesiariasENGINE/readme delete mode 100755 client/ogClient/old/Net.lib delete mode 100755 client/ogClient/old/boot/default.sh delete mode 100644 client/ogClient/old/boot/load2fs.sh delete mode 100644 client/ogClient/old/conframfs.sh delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup delete mode 100644 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap delete mode 100755 client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth delete mode 100644 client/ogClient/old/initramfs-tools-OG/conf.d/mdadm delete mode 100644 client/ogClient/old/initramfs-tools-OG/conf.d/resume delete mode 100755 client/ogClient/old/initramfs-tools-OG/hooks/oghooks delete mode 100644 client/ogClient/old/initramfs-tools-OG/initramfs.conf delete mode 100644 client/ogClient/old/initramfs-tools-OG/modules delete mode 100755 client/ogClient/old/initramfs-tools-OG/scripts/og delete mode 100644 client/ogClient/old/initramfs-tools-OG/update-initramfs.conf delete mode 100755 client/ogClient/old/ogClientFunctions delete mode 100755 client/ogClient/old/ogClientGenerator.sh delete mode 100755 client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib delete mode 100644 client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme delete mode 100755 client/ogClient/old/ogFSHlnk/boot/default.sh delete mode 100644 client/ogClient/old/ogFSHlnk/boot/load2fs.sh delete mode 100755 client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup delete mode 100644 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap delete mode 100755 client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth delete mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm delete mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume delete mode 100755 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks delete mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf delete mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules delete mode 100755 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og delete mode 100644 client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf delete mode 100644 client/ogClient/old/serverstructure/etc/exports.txt delete mode 100644 client/ogClient/old/serverstructure/etc/samba/smb.conf.txt delete mode 100755 client/ogClient/old/serverstructure/init/defaultTESTING.sh delete mode 100755 client/ogClient/old/serverstructure/preinit/defaultTESTING.sh delete mode 100755 client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh delete mode 100755 client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh delete mode 100644 client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL diff --git a/client/boot-tools/INSTALL.es.txt b/client/boot-tools/INSTALL.es.txt new file mode 100644 index 00000000..b357595b --- /dev/null +++ b/client/boot-tools/INSTALL.es.txt @@ -0,0 +1,46 @@ +########## INSTALACION ################################## + +### NOTA principal: utilizar el usuario root para este proceso #### +1. Comprobar la conexión a internet, sobre todo si usas proxy. El hecho de que te funcione apt-get no significa que tengas el proxy configurado. +1. Descargar del subversion la estrucutura del cliente. + +# reubicacion al trunk/client/boot + +Proceso: +0. Si ya tenemos un /var/lib/tftpboot/ogclient lo renombramos por si acaso. +1. Descargar del subversion la rama ogClient. +3. Ejecutar el instalador: + +mv /opt/opengnsys/tftpboot/ogclient/ /opt/opengnsys/tftpboot/ogclientTrunk; +svn checkout http://www.opengnsys.es/svn/branches/ogClient /tmp/opengnsys_installer/opengnsys/installer/ogClient; +svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/shared/ /tmp/opengnsys_installer/opengnsys/client/shared; +svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/engine/ /tmp/opengnsys_installer/opengnsys/client/engine; +find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null; +/tmp/opengnsys_installer/opengnsys/installer/ogClient/ogClientGeneratorV2.sh; + + + +NOTA: el proceso tardará un buen rato, dependiendo de nuestras circustancias. +NOTA: crea un kernel, initrd, ogclient.img en /var/lib/tftpboot/ogclient +NOTA: el ogclient.img es el Segundo sistema de archivos en formato fichero bloques emulando a disco con partición primaria. +NOTA: el ogclient.sqfs es el Segundo sistema de archivos (partición primaria del img) en formato squashfs. Se usará con el parámetro og2nd=sqfs +NOTA: los logs de instalación estarán en /tmp/opengnsys_installation.log + + + NOTA A RECORDAR: + NOTA ACLARATORIA: $OGSCRITPS(reboot,poweroff) antes de /sbin/{reboot,poweroff} + + ################## Descripcion de la estrucutra de ogClient. + los directorios old y serverstrucutre son antiguos, pero no borrarlos. + INSTALL.es.txt : este mismo archivo. + ogInstaller.lib : son todas las funciones de instalacion del instalador oficial de opengnys. Algunas de ellas son utilizadas. Crear ticket para separar las funciones de iinstalacion del proceso de instalacion. + ogClientManager.lib: son las funicones especificas para la instalacion del ogclient. estan escritas en orden de que son llamadas por el instalador, (ogClientGeneratorV2.sh) + ogClientGeneratorV2.sh. Es el guión de ejecución del isntalador. + + + + ############ ERROR PRINCIPAL 2 ####### + necesita que en el equipo donde se ejecuta el scripts, disponga de la estrucutra /opt/opengnsys/client + sobre todo los lib/fonts, el lib/pci.ids el bin/browser y el bin/ogAdmClient + + diff --git a/client/boot-tools/clientstructure/etc/apt/sources.list.debian b/client/boot-tools/clientstructure/etc/apt/sources.list.debian new file mode 100644 index 00000000..495e48d4 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/apt/sources.list.debian @@ -0,0 +1,4 @@ +deb http://ftp.us.debian.org/debian lenny main contrib non-free + +deb http://security.debian.org/ lenny/updates main contrib non-free +deb-src http://security.debian.org/ lenny/updates main contrib non-free diff --git a/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu b/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu new file mode 100644 index 00000000..29348ccc --- /dev/null +++ b/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu @@ -0,0 +1,56 @@ +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted +## Major bug fix updates produced after the final release of the +## distribution. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team. Also, please note that software in universe WILL NOT receive any +## review or updates from the Ubuntu security team. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team, and may not be under a free licence. Please satisfy yourself as to +## your rights to use the software. Also, please note that software in +## multiverse WILL NOT receive any review or updates from the Ubuntu +## security team. +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse +deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse + +## Uncomment the following two lines to add software from the 'backports' +## repository. +## N.B. software from this repository may not have been tested as +## extensively as that contained in the main release, although it includes +## newer versions of some applications which may provide useful features. +## Also, please note that software in backports WILL NOT receive any review +## or updates from the Ubuntu security team. +# deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse +# deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse + +## Uncomment the following two lines to add software from Canonical's +## 'partner' repository. +## This software is not part of Ubuntu, but is offered by Canonical and the +## respective vendors as a service to Ubuntu users. +# deb http://archive.canonical.com/ubuntu OSCODENAME partner +# deb-src http://archive.canonical.com/ubuntu OSCODENAME partner + + +deb http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted +deb http://security.ubuntu.com/ubuntu OSCODENAME-security universe +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security universe +deb http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse +deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse + + +deb http://archive.ubuntu.com/ubuntu OSCODENAME main +deb http://free.nchc.org.tw/drbl-core drbl stable +deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe multiverse +deb http://ppa.launchpad.net/freenx-team/ubuntu/ OSCODENAME main +deb http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main +deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main diff --git a/client/boot-tools/clientstructure/etc/environment b/client/boot-tools/clientstructure/etc/environment new file mode 100644 index 00000000..bb529d99 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/environment @@ -0,0 +1,4 @@ +LC_TYPE=es_ES@euro +LC_ALL=es_ES@euro +LANG=es_ES@euro +LANGUAGE=es_ES@euro \ No newline at end of file diff --git a/client/boot-tools/clientstructure/etc/fstab b/client/boot-tools/clientstructure/etc/fstab new file mode 100644 index 00000000..d7473df4 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/fstab @@ -0,0 +1,13 @@ +# /etc/fstab: static file system information. +# +# Use 'blkid -o value -s UUID' to print the universally unique identifier +# for a device; this may be used with UUID= as a more robust way to name +# devices that works even if disks are added and removed. See fstab(5). +# +# +proc /proc proc 0 0 +/dev/sda1 ext3 errors=remount-ro 0 1 + + + + diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks b/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks new file mode 100755 index 00000000..15fd01cc --- /dev/null +++ b/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks @@ -0,0 +1,58 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + +#@file oghooks +#@brief configuración initrd para OpenGnSys +#@warning +#@version 0.9 - estrucura opengnsys, bash-static, unionfs, atheros +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; +mkdir -p ${DESTDIR}/ogboot; +mkdir -p ${DESTDIR}/boot; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash +copy_exec /usr/bin/unionfs-fuse +copy_exec /sbin/mount.cifs + + +# Insert OpenGnsys Engine +#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + +rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl* +manual_add_modules cifs +manual_add_modules smbfs +manual_add_modules atl1e +manual_add_modules squashfs + + diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/modules b/client/boot-tools/clientstructure/etc/initramfs-tools/modules new file mode 100644 index 00000000..8bac1d4b --- /dev/null +++ b/client/boot-tools/clientstructure/etc/initramfs-tools/modules @@ -0,0 +1,14 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +vga16b +vesafb +fbcon + diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions new file mode 100644 index 00000000..ce2716db --- /dev/null +++ b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions @@ -0,0 +1,427 @@ +#@file ogfunctions.lib +#@brief Librería o clase para la generación del 1erFS +#@class client +#@brief Funciones para la generación del primers sistema (initrd) +#@version 0.91 +#@warning License: GNU GPLv3+ + + + + +ogExportKernelParameters () +{ + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done +return 0 +} + +ogExportVarEnvironment () +{ + #puntos de accesos al servidor ogprotocol=nfs + export NFSROOTBOOT="/var/lib/tftpboot" + export NFSCLIENTDIR="/opt/opengnsys/client" + export NFSLOGDIR="/opt/opengnsys/log/clients" + export NFSIMGDIR="/opt/opengnsys/images" + #puntos de accesos al servidor ogprotocol=smb + export SMBROOTBOOT="tftpboot" + export SMBCLIENTDIR="ogclient" + export SMBLOGDIR="oglog" + export SMBIMGDIR="ogimages" + + #puntos de montaje local ram o cache + export LOCALCLIENTDIR="/opt/opengnsys" + export LOCALLOGDIR="/opt/opengnsys/log" + export LOCALIMGDIR="/opt/opengnsys/images" + export LOCALROOTBOOT="/opt/og2fs/tftpboot" #punto de montaje del contendor tftpboot + export LOCALROOTIMG="/opt/og2fs/2ndfs" #punto de montaje donde se accede al 2nd FS mediante loop + export LOCALROOTRAM="/opt/og2fs/1stfs" #punto de montaje para unionfs + export LOCALROOTUNION="/opt/og2fs/unionfs" #punto de union entreo LOCALROOTIMG y LOCALROOTRAM + ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES. + #ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd. + #IPV4DDR + #IPV4BROADCAST + #IPV4NETMASK + #IPV4GATEWAY + #DNS0 DNS1 + #HOSTNAME + #ROOTSERVER #ip del servidor pxe que ha servido el kernel + #REPOSERVER=ogrepo -> ogConectROOTSERVER() ip del servidor de images para separar serviicios. + return 0 +} + +ogConfigureRamfs () +{ + mkdir -p $LOCALROOTBOOT + mkdir -p $LOCALROOTIMG + mkdir -p $LOCALROOTRAM + mkdir -p $LOCALROOTUNION +} + +ogLoadNetModule () +{ + #cargando netmodule + if [ -n "$ognetmodule" ] + then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` + fi +} + + +ogPostConfigureFS() +{ + # configuramos el /etc/hostname. + echo $HOSTNAME > /etc/hostname + + #configuramos el /etc/hosts + echo "127.0.0.1 localhost" > /etc/hosts + echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts + + #configuramos el host.conf + echo "order hosts,bind" > /etc/host.conf + echo "multi on" >> /etc/host.conf + + # configuramos el /etc/networks + #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}') + NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ") + echo "default 0.0.0.0" > /etc/networks + echo "loopback 127.0.0.0" >> /etc/networks + echo "link-local 169.254.0.0" >> /etc/networks + echo "localnet $NETIP" >> /etc/networks + #route +} + + + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +return 0 +} + +ogConectROOTSERVER () +{ +local OPTIONS +#params a detectar +if [ $ogrepo ] +then + # Validar si la ip es correcta + ROOTREPO=$ogrepo +else + ROOTREPO=$ROOTSERVER +fi + +case "$ogprotocol" in + cdrom) + echo "Montar imagen de CD-ROM" + blkid /dev/s* + mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT + ;; + httfs) + echo "protocolo httfs aun no soportado" + ;; + sshfs) + echo "protocolo sshfs aun no soportado" + ;; + smb) + echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol" + OPTIONS=" -o user=opengnsys,pass=og" + mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS + mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS + mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS + mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro + ;; + nfs) + echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol" + nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR + nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR + nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT + nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR + ;; +esac +} + +ogMerge2ndFile() +{ +if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ] +then + cat /proc/mounts > /tmp/mtab.preunion + if [ "$og2nd" == "img" ] + then + #para acceder al img + losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256 + mount /dev/loop0 $LOCALROOTIMG + else + ## para acceder al squashfs + mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop + fi + for i in etc var lib bin sbin usr root boot; do + unionmount $i + done + cat /tmp/mtab.preunion > /etc/mtab +else + echo "Fichero imagen del cliente no encontrado" + return 1 +fi +} + + +unionmount() +{ + tmpdir=/$1 #dir + FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" + UNION_OPT="-o cow -o noinitgroups" + UBIN="unionfs-fuse" + #UPATH="/unionfs" + #LOCALROOTIMG="/opt/og2fs/2ndfs" + #LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs + #LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM + #mkdir -p $LOCALROOTRAM #/unionfs/host + #mkdir -p $LOCALROOTUNION #/unionfs/union + mkdir -p $LOCALROOTRAM$tmpdir + #mount --bind /$tmpdir $LOCALROOTRAM$tmpdir + U1STDIR="${LOCALROOTRAM}${tmpdir}=RW" + U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO" + UNIONDIR=$LOCALROOTUNION$tmpdir + mkdir -p $UNIONDIR + $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR + mount --bind $UNIONDIR $tmpdir +} + + +unionmountOLD() +{ + FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" + UNION_OPT="-o cow -o noinitgroups" + UPATH="/unionfs" + UBIN="unionfs-fuse" + mkdir -p /unionfs/host + mkdir -p /unionfs/union + dir=$1 + mkdir -p /unionfs/host/$dir + #mount --bind /$dir /unionfs/host/$dir + mkdir -p /unionfs/union/$dir + host="/unionfs/host/${dir}=RW" + common="/opt/og2fs/${dir}=RO" + $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir + mount --bind /unionfs/union/$dir /$dir +} + +ogconfigure_lo() +{ +# for the portmapper we need localhost +ifconfig lo 127.0.0.1 +#/etc/init.d/portmap start +} + +ogconfigure_networking() +{ +IP=$IPOPTS +# http://paste.ubuntu.com/427631/ Paste from yofel at Tue, 4 May 2010 13:49:56 +0000 + if [ -n "${BOOTIF}" ]; then + # pxelinux sets BOOTIF to a value based on the mac address of the + # network card used to PXE boot, so use this value for DEVICE rather + # than a hard-coded device name from initramfs.conf. this facilitates + # network booting when machines may have multiple network cards. + # pxelinux sets BOOTIF to 01-$mac_address + + # strip off the leading "01-", which isn't part of the mac + # address + temp_mac=${BOOTIF#*-} + + # convert to typical mac address format by replacing "-" with ":" + bootif_mac="" + IFS='-' + for x in $temp_mac ; do + if [ -z "$bootif_mac" ]; then + bootif_mac="$x" + else + bootif_mac="$x:$bootif_mac" + fi + done + unset IFS + + # look for devices with matching mac address, and set DEVICE to + # appropriate value if match is found. + for device in /sys/class/net/* ; do + if [ -f "$device/address" ]; then + current_mac=$(cat "$device/address") + if [ "$bootif_mac" = "$current_mac" ]; then + DEVICE=${device##*/} + break + fi + fi + done + fi + + # networking already configured thus bail out + [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 + + # support ip options see linux sources + # Documentation/filesystems/nfsroot.txt + # Documentation/frv/booting.txt + + for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do + + # The NIC is to be configured if this file does not exist. + # Ip-Config tries to create this file and when it succeds + # creating the file, ipconfig is not run again. + if [ -e /tmp/net-"${DEVICE}".conf ]; then + break; + fi + + case ${IP} in + none|off) + # Do nothing + ;; + ""|on|any) + # Bring up device + echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " + ipconfig -t ${ROUNDTTT} ${DEVICE} + ;; + dhcp|bootp|rarp|both) + echo "Setting $DEVICE with (dhcp) kernel params $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " + ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} + ;; + *) + echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} -d $IP " + ipconfig -t ${ROUNDTTT} -d $IP + + # grab device entry from ip option + NEW_DEVICE=${IP#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IP}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac + done + + # source ipconfig output + if [ -n "${DEVICE}" ]; then + # source specific bootdevice + . /tmp/net-${DEVICE}.conf + else + # source any interface as not exaclty specified + . /tmp/net-*.conf + fi +} + + ##################################################################### +# Ask yesno question. +# +# Usage: yesno OPTIONS QUESTION +# +# Options: +# --timeout N Timeout if no input seen in N seconds. +# --default ANS Use ANS as the default answer on timeout or +# if an empty answer is provided. +# +# Exit status is the answer. 0=yes 1=no + +ogYesNo() +{ + local ans + local ok=0 + local timeout=0 + local default + local t + + while [[ "$1" ]] + do + case "$1" in + --default) + shift + default=$1 + if [[ ! "$default" ]]; then error "Missing default value"; fi + t=$(echo $default | tr '[:upper:]' '[:lower:]') + + if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then + error "Illegal default answer: $default" + fi + default=$t + shift + ;; + + --timeout) + shift + timeout=$1 + if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi + #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi + shift + ;; + + -*) + error "Unrecognized option: $1" + ;; + + *) + break + ;; + esac + done + + if [[ $timeout -ne 0 && ! "$default" ]]; then + error "Non-zero timeout requires a default answer" + fi + + if [[ ! "$*" ]]; then error "Missing question"; fi + + while [[ $ok -eq 0 ]] + do + if [[ $timeout -ne 0 ]]; then + if ! read -t $timeout -p "$*" ans; then + ans=$default + else + # Turn off timeout if answer entered. + timeout=0 + if [[ ! "$ans" ]]; then ans=$default; fi + fi + else + read -p "$*" ans + if [[ ! "$ans" ]]; then + ans=$default + else + ans=$(echo $ans | tr '[:upper:]' '[:lower:]') + fi + fi + + if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then + ok=1 + fi + + if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi + done + [[ "$ans" = "y" || "$ans" == "yes" ]] +} + + diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit new file mode 100755 index 00000000..a6c05d5e --- /dev/null +++ b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit @@ -0,0 +1,111 @@ +# OpenGnsys oginit -*- shell-script -*- + +#@file oginit +#@brief Guion modificador inicio initrd para OpenGnSys +#@warning +#@version 0.1 - basado en ROOTfs +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2009/00/00 +#@version 0.2 - basado en el instalador de ubunto +#@author Alejandro Castillo +#@author Ramón Gómez +#@author Irina +#@author Antonio Doblas +#@date 2010/00/00 +#@version 0.7 - Generación limpia con mkinitrd, busybox +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/05/24 +#@version 0.8 - Integración con FileSystem externo +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/06/24 +#@version 0.8.1 - UnionFS + squasfs +#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. +#@date 2010/06/29 + +#*/ + + + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + . /scripts/functions + . /scripts/ogfunctions + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N " + [ $? == 0 ] && sh || echo " " + + set -a + log_success_msg "Checking kernel parameters" + ogExportKernelParameters + log_success_msg "Checking Opengnys Environmnet" + ogExportVarEnvironment + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N " + [ $? == 0 ] && sh || echo " " + ogConfigureRamfs + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N " + [ $? == 0 ] && sh || echo " " + ogLoadNetModule + + #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + #run_scripts /scripts/og-premount + #[ "$quiet" != "y" ] && log_end_msg + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N " + [ $? == 0 ] && sh || echo " " + ogconfigure_networking + log_success_msg "config networking" + ogconfigure_lo + log_success_msg "config loopback" + + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N " + [ $? == 0 ] && sh || echo " " + ogGetROOTSERVER && log_success_msg "Get Info from pxe server" + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before conect with og Services : y/N " + [ $? == 0 ] && sh || echo " " + ogConectROOTSERVER && log_success_msg "Conecting with og services" || sh + # ogConectROOTMEDIA + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before merge the Second File System with initrd (First File System) : y/N " + [ $? == 0 ] && sh || echo " " + ogMerge2ndFile && log_success_msg "Merge onto Second File System" + + + #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + #run_scripts /scripts/og-bottom + #[ "$quiet" != "y" ] && log_end_msg + + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N " + [ $? == 0 ] && sh || echo " " + ogPostConfigureFS + setupcon -k + + [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N " + [ $? == 0 ] && sh || echo " " + +if [ "$oginit" ] +then + exec $oginit +else + exec init +fi + + + + + +} diff --git a/client/boot-tools/clientstructure/etc/inittab b/client/boot-tools/clientstructure/etc/inittab new file mode 100644 index 00000000..94c30028 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/inittab @@ -0,0 +1,14 @@ +# This is run first except when booting in single-user mode +# +#::sysinit:/opt/opengnsys/etc/preinit/defaultTESTING.sh +# /bin/sh invocations on selected ttys +# +# Start an "askfirst" shell on the console (whatever that may be) +#::askfirst:/bin/sh +# Start an "askfirst" shell on /dev/tty2-4 +#tty1::respawn:/sbin/getty 38400 tty1 +tty1::respawn:/opt/opengnsys/etc/preinit/defaultTESTING.sh +tty2::respawn:/sbin/getty 38400 tty2 +tty3::respawn:/sbin/getty 38400 tty3 +tty4::respawn:/sbin/getty 38400 tty4 +tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf b/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf new file mode 100644 index 00000000..8b047e4e --- /dev/null +++ b/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf @@ -0,0 +1,30 @@ +# Framebuffer drivers are generally buggy and poorly-supported, and cause +# suspend failures, kernel panics and general mayhem. For this reason we +# never load them automatically. +blacklist aty128fb +blacklist atyfb +#blacklist radeonfb +blacklist cirrusfb +blacklist cyber2000fb +blacklist cyblafb +blacklist gx1fb +blacklist hgafb +blacklist i810fb +blacklist intelfb +blacklist kyrofb +blacklist lxfb +blacklist matroxfb_base +blacklist neofb +blacklist nvidiafb +blacklist pm2fb +blacklist rivafb +blacklist s1d13xxxfb +blacklist savagefb +blacklist sisfb +blacklist sstfb +blacklist tdfxfb +blacklist tridentfb +#blacklist vesafb +blacklist vfb +blacklist viafb +blacklist vt8623fb diff --git a/client/boot-tools/clientstructure/etc/mtab b/client/boot-tools/clientstructure/etc/mtab new file mode 100644 index 00000000..e69de29b diff --git a/client/boot-tools/clientstructure/etc/network/interfaces b/client/boot-tools/clientstructure/etc/network/interfaces new file mode 100644 index 00000000..dbe43582 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/network/interfaces @@ -0,0 +1,4 @@ +auto lo +iface lo inet loopback +auto eth0 +iface eth0 inet dhcp \ No newline at end of file diff --git a/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh b/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh new file mode 100755 index 00000000..0bf46a3e --- /dev/null +++ b/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh @@ -0,0 +1,84 @@ +#!/bin/bash +#/** +#@file loadenviron.sh +#@brief Script de carga de la API de funciones de OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + +# FIXME Temporal +export LANG="${LANG:-es_ES}" + +#/// Directorios del projecto OpenGNSys. +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" +if [ -d $OPENGNSYS ]; then + export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + +# export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH + # export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH + + #/// Cargar fichero de idioma. + LANGFILE=$OGETC/lang.$LANG.conf + if [ -f $LANGFILE ]; then + source $LANGFILE + #for i in $(grep "^[a-zA-Z].*=" $LANGFILE | cut -f1 -d=); do + for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do + export $i + done + fi + #/// Cargar API de funciones. + echo "$MSG_LOADAPI" + for i in $OGAPI/*.lib; do + source $i + done + for i in $(typeset -F | cut -f3 -d" "); do + export -f $i + done + # Carga de las API testing + if [ "$engine" = "testing" ] + then + for i in $OGAPI/*.testing; do + source $i + done + fi + # Añadir dependencia de arquitectura + ARCH=$(ogGetArch) + if [ -n "$ARCH" ]; then + # export PATH=$OGBIN/$ARCH:$PATH + # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH + fi + # Fichero de registros. + export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + # FIXME Pruebas para grupos de ordenadores + #export OGGROUP=$(ogGetGroup) + export OGGROUP=aula3 +fi + +#/// Declaración de códigos de error. +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + + diff --git a/client/boot-tools/clientstructure/etc/ssh/ssh_config b/client/boot-tools/clientstructure/etc/ssh/ssh_config new file mode 100644 index 00000000..7f9319dc --- /dev/null +++ b/client/boot-tools/clientstructure/etc/ssh/ssh_config @@ -0,0 +1,56 @@ + +# This is the ssh client system-wide configuration file. See +# ssh_config(5) for more information. This file provides defaults for +# users, and the values can be changed in per-user configuration files +# or on the command line. + +# Configuration data is parsed as follows: +# 1. command line options +# 2. user-specific file +# 3. system-wide file +# Any configuration value is only changed the first time it is set. +# Thus, host-specific definitions should be at the beginning of the +# configuration file, and defaults at the end. + +# Site-wide defaults for some commonly used options. For a comprehensive +# list of available options, their meanings and defaults, please see the +# ssh_config(5) man page. + +Host * +# ForwardAgent no +# ForwardX11 no +# ForwardX11Trusted yes +# RhostsRSAAuthentication no +# RSAAuthentication yes +# PasswordAuthentication yes + HostbasedAuthentication no +# GSSAPIAuthentication no +# GSSAPIDelegateCredentials no +# GSSAPIKeyExchange no +# GSSAPITrustDNS no +# BatchMode no +# CheckHostIP yes +# AddressFamily any +# ConnectTimeout 0 +# StrictHostKeyChecking ask +# IdentityFile ~/.ssh/identity +# IdentityFile ~/.ssh/id_rsa +# IdentityFile ~/.ssh/id_dsa +# Port 22 +# Protocol 2,1 +# Cipher 3des +# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc +# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 +# EscapeChar ~ +# Tunnel no +# TunnelDevice any:any +# PermitLocalCommand no +# VisualHostKey no + SendEnv LANG LC_* +# HashKnownHosts yes + GSSAPIAuthentication yes + GSSAPIDelegateCredentials no + + StrictHostKeyChecking no + UserKnownHostsFile=/dev/null + diff --git a/client/boot-tools/clientstructure/etc/ssh/sshd_config b/client/boot-tools/clientstructure/etc/ssh/sshd_config new file mode 100644 index 00000000..ea0303b3 --- /dev/null +++ b/client/boot-tools/clientstructure/etc/ssh/sshd_config @@ -0,0 +1,86 @@ +# Package generated configuration file +# See the sshd_config(5) manpage for details + +# What ports, IPs and protocols we listen for +Port 22 +# Use these options to restrict which interfaces/protocols sshd will bind to +#ListenAddress :: +#ListenAddress 0.0.0.0 +Protocol 2 +# HostKeys for protocol version 2 +HostKey /etc/ssh/ssh_host_rsa_key +HostKey /etc/ssh/ssh_host_dsa_key +#Privilege Separation is turned on for security +UsePrivilegeSeparation yes + +# Lifetime and size of ephemeral version 1 server key +KeyRegenerationInterval 3600 +ServerKeyBits 768 + +# Logging +SyslogFacility AUTH +LogLevel INFO + +# Authentication: +LoginGraceTime 120 +PermitRootLogin yes +StrictModes yes + +RSAAuthentication yes +PubkeyAuthentication yes +#AuthorizedKeysFile %h/.ssh/authorized_keys + +# Don't read the user's ~/.rhosts and ~/.shosts files +IgnoreRhosts yes +# For this to work you will also need host keys in /etc/ssh_known_hosts +RhostsRSAAuthentication no +# similar for protocol version 2 +HostbasedAuthentication no +# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication +#IgnoreUserKnownHosts yes + +# To enable empty passwords, change to yes (NOT RECOMMENDED) +PermitEmptyPasswords no + +# Change to yes to enable challenge-response passwords (beware issues with +# some PAM modules and threads) +ChallengeResponseAuthentication no + +# Change to no to disable tunnelled clear text passwords +#PasswordAuthentication yes + +# Kerberos options +#KerberosAuthentication no +#KerberosGetAFSToken no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes + +X11Forwarding yes +X11DisplayOffset 10 +PrintMotd no +PrintLastLog yes +TCPKeepAlive yes +#UseLogin no + +#MaxStartups 10:30:60 +#Banner /etc/issue.net + +# Allow client to pass locale environment variables +AcceptEnv LANG LC_* + +Subsystem sftp /usr/lib/openssh/sftp-server + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the ChallengeResponseAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via ChallengeResponseAuthentication may bypass +# the setting of "PermitRootLogin without-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and ChallengeResponseAuthentication to 'no'. +UsePAM yes diff --git a/client/boot-tools/clientstructure/root/CompileSoftware.sh b/client/boot-tools/clientstructure/root/CompileSoftware.sh new file mode 100755 index 00000000..1a9b854a --- /dev/null +++ b/client/boot-tools/clientstructure/root/CompileSoftware.sh @@ -0,0 +1,30 @@ +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + +#dpkg-divert --local --rename --add /sbin/initctl +#ln -s /bin/true /sbin/initctl + +apt-get -y update +# software to compile code +apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk + +source /opt/opengnsys/lib/engine/bin/ToolsGNU.c + +ctorrent install +udpcast install +#ntfs-3g install +ms-sys install + +wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh +gdebi -n partclone_0.2.16_i386.deb + + cd /tmp + wget http://damien.guibouret.free.fr/savepart.zip + unzip savepart.zip -d /sbin/ + + diff --git a/client/boot-tools/clientstructure/root/ConfFS.sh b/client/boot-tools/clientstructure/root/ConfFS.sh new file mode 100755 index 00000000..3e0f4b5c --- /dev/null +++ b/client/boot-tools/clientstructure/root/ConfFS.sh @@ -0,0 +1,24 @@ +#!/bin/bash +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl +#mv /etc/fstab /etc/fstab.original 2>/dev/null +#mv /etc/mtab /etc/mtab.original 2>/dev/null + +#TODO: fichero etc/hosts +#TODO: fichero etc/resolv.conf +echo "ogClient" > /etc/hostname + +#export PASSROOT=og +#dpkg-reconfigure passwd +#echo "root:$PASSROOT" | chpasswd + + +#for i in pts/0 pts/1 pts/2 pts/3 do +# +# +#done +#TODO: introducir mas consoluas para el acceso como root. +echo "pts/0" >> /etc/securetty +echo "pts/1" >> /etc/securetty +echo "pts/2" >> /etc/securetty +echo "pts/3" >> /etc/securetty \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh b/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh new file mode 100755 index 00000000..eaeb475b --- /dev/null +++ b/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh @@ -0,0 +1,16 @@ +#!/bin/bash +export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null +#OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null +export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') +export OSRELEASE=$(uname -a | awk '{print $3}') +uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 +export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + + + +cd /usr/lib/initramfs-tools/bin/ +rm * +cp /bin/busybox ./ +cd /tmp/ +mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE +cp /boot/vmlinuz-$OSRELEASE /tmp \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/InstallSoftware.sh b/client/boot-tools/clientstructure/root/InstallSoftware.sh new file mode 100755 index 00000000..da8d8d06 --- /dev/null +++ b/client/boot-tools/clientstructure/root/InstallSoftware.sh @@ -0,0 +1,62 @@ +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + + +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl + +apt-get clean +apt-get -y update + + +# software system +apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE wget dialog man-db htop fbset gdebi-core busybox-static + +apt-get -y --force-yes install console-data locales + +# sofware networking +apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 unionfs-fuse open-iscsi nmap tcpdump arping dnsutils + +apt-get clean +# software services +apt-get -y --force-yes install openssh-server bittornado trickle iptraf screen schroot grub + +# software disk and filesystem +apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted ntfs-3g dosfstools +apt-get -y --force-yes install dmraid dmsetup lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools +apt-get -y --force-yes install btrfs-tools hfsplus hfsprogs hfsutils nilfs-tools reiser4progs ufsutils + +# software cloning +apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools +apt-get -y --force-yes install mbuffer + + +apt-get clean +## software postconf +apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk + +# software compressor +apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop pigz pbzip2 lbzip2 rzip p7zip-full unzip + +apt-get -y --force-yes remove busybox +apt-get -y --force-yes install busybox-static bash-static +apt-get clean +#apt-get -y --force-yes xorg-dev xorg lxde roxterm +# +#################################################################### +###################### Reconfigurando paquetes ###################### +################################################################### + + +#dpkg-reconfigure console-data +#dpkg-reconfigure console-setup +#dpkg-reconfigure locales +apt-get clean +##TODO################# Borrar algunos binarios del mkinitramfs + + diff --git a/client/boot-tools/clientstructure/root/ReconfigureLocales.sh b/client/boot-tools/clientstructure/root/ReconfigureLocales.sh new file mode 100755 index 00000000..5480d141 --- /dev/null +++ b/client/boot-tools/clientstructure/root/ReconfigureLocales.sh @@ -0,0 +1,4 @@ +#!/bin/bash +dpkg-reconfigure console-data +dpkg-reconfigure console-setup +dpkg-reconfigure locales \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/generateSshKeysClient.sh b/client/boot-tools/clientstructure/root/generateSshKeysClient.sh new file mode 100755 index 00000000..9857ad40 --- /dev/null +++ b/client/boot-tools/clientstructure/root/generateSshKeysClient.sh @@ -0,0 +1,23 @@ +#!/bin/bash +echo "comprobando directorio .ssh del root" +if [ ! -d /root/.ssh ] +then + echo "creando directorio .ssh 600" + mkdir -p /root/.ssh + chmod 700 /root/.ssh +fi + + +echo "comprobando el fichero authorized_keys .ssh del root" +if [ ! -f /root/.ssh/authorized_keys ] +then + echo "creando el fichero authorized_keys" + touch /root/.ssh/authorized_keys + chmod 600 /root/.ssh/authorized_keys +fi + +ssh-keygen -q -f /root/.ssh/id_rsa -N "" +cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys + +## TODO: exportamos la publica a los repos +cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/importSshKeys.sh b/client/boot-tools/clientstructure/root/importSshKeys.sh new file mode 100755 index 00000000..17a797f8 --- /dev/null +++ b/client/boot-tools/clientstructure/root/importSshKeys.sh @@ -0,0 +1,17 @@ +#!/bin/bash +echo "comprobando directorio .ssh del root" +if [ ! -d /root/.ssh ] +then + echo "creando directorio .ssh 600" + mkdir -p /root/.ssh + chmod 700 /root/.ssh +fi +echo "creando el fichero authorized_keys" +touch /root/.ssh/authorized_keys +chmod 600 /root/.ssh/authorized_keys + +echo "importando la clave publica del servidor OG" +cat /tmp/id_rsa.pub + +[ -f /tmp/id_rsa.pub ] && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys || echo "no key publica og" + \ No newline at end of file diff --git a/client/boot-tools/clientstructure/root/qemu.sh b/client/boot-tools/clientstructure/root/qemu.sh new file mode 100755 index 00000000..c5a93cd9 --- /dev/null +++ b/client/boot-tools/clientstructure/root/qemu.sh @@ -0,0 +1,9 @@ +#/bin/bash + +mount -o rw,remount / +mount proc /proc -t proc +export PATH=$PATH dpkg -i *.deb +modprobe 8139too +modprobe 8139cp +dhclient +/etc/init.d/ssh restart \ No newline at end of file diff --git a/client/boot-tools/clientstructure/var/lib/locales/supported.d/local b/client/boot-tools/clientstructure/var/lib/locales/supported.d/local new file mode 100644 index 00000000..be3f2a41 --- /dev/null +++ b/client/boot-tools/clientstructure/var/lib/locales/supported.d/local @@ -0,0 +1,5 @@ +es_ES ISO-8859-1 +es_ES@euro ISO-8859-15 +es_ES.UTF-8 UTF-8 +es_ES.UTF-8@euro UTF-8 +en_US.UTF-8 UTF-8 \ No newline at end of file diff --git a/client/boot-tools/kernelParameterOG.es.txt b/client/boot-tools/kernelParameterOG.es.txt new file mode 100644 index 00000000..890652b4 --- /dev/null +++ b/client/boot-tools/kernelParameterOG.es.txt @@ -0,0 +1,29 @@ + +KERNEL ogclient/ogvmlinuz +initrd=ogclient/oginitrd.img + + + boot=oginit + + oginit=init|/bin/bash + + + ogrepo=ip del repositorio + + og2nd=sqfs|img + ogprotocol=smb|nfs + ogactiveadmin=true|false + ogdebug=true|false + + vga=788 + irqpoll + acpi=on + + +FIXME: en la version actual +repo=iprepoman +IP + +TODO: en la proxima version +ogrepo +ip \ No newline at end of file diff --git a/client/boot-tools/ogClientGeneratorV2.sh b/client/boot-tools/ogClientGeneratorV2.sh new file mode 100755 index 00000000..21449267 --- /dev/null +++ b/client/boot-tools/ogClientGeneratorV2.sh @@ -0,0 +1,166 @@ +#!/bin/bash +#@file ogClientGenerator.sh +#@brief Script generación del cliente OpenGnSys +#@warning +#@version 0.9 - +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + + +#$1 OSCONENAME lucid karmic +#if [ $# -ne 1 ]; then +# echo ": invalid number of parameters" +# echo " host | lucid | karmic | jaunty | lenny | squeeze " +# exit 1 +#fi +TYPECLIENT=host + +# Solo ejecutable por usuario root +if [ "$(whoami)" != 'root' ] +then + echo "ERROR: this program must run under root privileges!!" + exit 1 +fi + + + +#FIXME: variables del instalador oficial. +WORKDIR=/tmp/opengnsys_installer +INSTALL_TARGET=/opt/opengnsys +LOG_FILE=/tmp/opengnsys_installation.log +PROGRAMDIR=$(readlink -e $(dirname "$0")) + + +#funciones especificas del cliente. +source $PROGRAMDIR/ogClientManager.lib +#funciones incluidas dentro del scritps general de instalacion. +source $PROGRAMDIR/ogInstaller.lib + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" +########################################################################## +## FASE 1 - Instalación de software adicional. +##TO DO Integrar en el instaldor. Actualizar repositorios +# Datos para la generación del cliente. +DEPENDENCIES=( debootstrap subversion schroot squashfs-tools) +apt-get update +# Instalación de dependencias (paquetes de sistema operativo). +declare -a notinstalled +checkDependencies DEPENDENCIES notinstalled +if [ $? -ne 0 ]; then + installDependencies notinstalled + if [ $? -ne 0 ]; then + echoAndLog "Error while installing some dependeces, please verify your server installation before continue" + exit 1 + fi +fi +############## FIN DEL TO DO +############################################## FIN FASE 1 + + + + + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + +############## FASE 2 - Asignación de variables +#obtenemos las variables necesarias. +ogClientVar +#obtenemos la información del host. +ogClientOsInfo +######################## FIN fase 2 + +############# FASE 3: Segundo Sistema archivos (img) Creación. +#TODO comprobacion de que el fichero esta creado. +file $OGCLIENTFILE | grep "partition 1: ID=0x83" +if [ $? == 1 ] +then + ##3.1 creación y formateo del disco virtual. generamos el dispositivo loop. + ogClient2ndFile || exit 1 +fi + + +#3.2 generamos el Sistema de archivos con debootstrap +# Comprobamos que ya tenemos alguno. +schroot -p -c IMGogclient -- touch /tmp/ogclientOK +if [ -f /tmp/ogclientOK ] +then + rm /tmp/ogclientOK +else + ogClient2ndFs $TYPECLIENT || exit +fi + + +############### FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot +cat /etc/schroot/schroot.conf | grep ogclient || ogClientSchrootConf + + +############### FASE 5: Configuración del Segundo Sistema de archivos (img) con la estructura especial de OpenGnsys +ogClient2ndSVN $TYPECLIENT || exit + + + + +############# FASE6: Ejecutamos los scripts de personalización del 2º sistema de archivos (img) desde la jaula schroot +### 6.1 instalacion de software con apt-get +schroot -p -c IMGogclient -- /root/InstallSoftware.sh +echo "saltando" + if [ $? -ne 0 ]; then + errorAndLog "Instalando sofware adicional OG : ERROR" + exit +else + echoAndLog "Instalando sofware adicional OG: OK" +fi +#### 6.2 compilación de software. +cd / +schroot -p -c IMGogclient -- /root/CompileSoftware.sh +cd - + +### 6.3 configuracion hostname passroot securety +cd / +schroot -c IMGogclient -- /root/ConfFS.sh +cd - +#schroot -c IMGogclient -- echo -ne "og1\nog1\n" | passwd root +# schroot -c IMGogclient -- passwd root | echo "root" + + +### 6.4 incorporamos la clave publica del servidor +cd / +ssh-keygen -q -f /root/.ssh/id_rsa -N "" +cp /root/.ssh/id_rsa.pub /tmp +schroot -p -c IMGogclient -- /root/importSshKeys.sh +cd - +############ y la del propio cliente. +schroot -c IMGogclient -- /root/generateSshKeysClient.sh + +## configuramos los locales. +schroot -c IMGogclient -- /root/ReconfigureLocales.sh + + +################## FIN fase 6. Fin de comfiguración del segundo sistema de archivos (img) + +################## FASE 7. Generamos el 1er sistema de archivos. INITRD +#nota el parametro es el "tipo" de linux generado en debootstrap. usar solo "host", es decir version,kernel ... del propio host +#nota: hace un schroot, al 2fs (img), ejecuta el fichero generateinitrd. +#nota: deja en el directorio tmp del host el nuevo initrd, y lo copia al tftpboot +ogClientInitrd $TYPECLIENT + + +################## FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) +# generamos el 2sistema de archivos en squashfs +ogClient2ndSqfs +################## FIN FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) + + +##################### FASE 9. algunos detallas del pxe +#dejamos ficheros de ejemplo para el pxe y el nfs +ogClientConfpxe +##################### FIN FASE 9. algunos detallas del pxe + + +# Mostrar sumario de la instalación e instrucciones de post-instalación. +installationSummary + +echoAndLog "OpenGnSys installation finished at $(date)" \ No newline at end of file diff --git a/client/boot-tools/ogClientManager.lib b/client/boot-tools/ogClientManager.lib new file mode 100644 index 00000000..85cd868f --- /dev/null +++ b/client/boot-tools/ogClientManager.lib @@ -0,0 +1,607 @@ + +ogClientVar() +{ +export SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/installer/ogClient +export SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared +export SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine + +export OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ +export OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img +export OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount +# tamaño maximo limitado por schroot 2GB +export OGCLIENTSIZEMB=1900 +#export OGCLIENTSIZEMB=1000 +# export OGCLIENTSIZEKB=500 +export OGCLIENTLABEL=ogClient +#export OGLIB=/opt/opengnsys/client/lib +} + + + +function ogClientOsInfo () +{ +#TODO según host, un OSHHTP u otro OSARCH + #1 OSCODENAME jaunty|karmic|lucid + #devuelve OSDISTRIB(ubuntu,debian),OSCODENAME(lucid,karmic,squeeze):OGRELEASE:httpAPT + case $1 in + host | HOST) + export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') + export OSRELEASE=$(uname -a | awk '{print $3}') + uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + ;; + jaunty|JAUNTY) + export OSDISTRIB=ubuntu + export OSCODENAME=jaunty + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" + ;; + lenny|LENNY) + export OSDISTRIB=debian + export OSCODENAME=lenny + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + squeeze|SQUEEZE) + export OSDISTRIB=debian + export OSCODENAME=squeeze + export OSRELEASE="2.6.28-11-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + karmic|KARMIC) + export OSDISTRIB=ubuntu + export OSCODENAME=karmic + export OSRELEASE="2.6.31-14-generic" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + lucid|LUCID) + export OSDISTRIB=ubuntu + export OSCODENAME=lucid + export OSRELEASE="2.6.32-21-generic-pae" + export OSARCH=i386 + export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " + ;; + *) + return 1 + ;; + esac + echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP +} + +#creación y formateo del disco virtual. +ogClient2ndFile () +{ +local RERROR DISKLOOP PARTLOOP #return code error +echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $OGCLIENTSIZEMB MB " +#Desmontamos por si acaso el dispositivo virtual +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $OGCLIENTMOUNT" +mkdir -p $OGCLIENTMOUNT +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Creando directorio $OGCLIENTMOUNT : ERROR" + return 1 +fi +echo "$FUNCNAME(): Creando el disco virtual que almacenará el FS del cliente $OGCLIENTSIZEMB MB de datos físicos" +dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB +#qemu-img create $OGCLIENTFILE 3G +#dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Creando el disco virtual: ERROR" + return 1 +fi + +DISKLOOP=$(losetup -f) +losetup $DISKLOOP $OGCLIENTFILE +echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria" +echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP +#echo $? +# da error, porque no puede actualizar el kernel. +#if [ $? -ne 0 ] +#then +# errorAndLog "$FUNCNAME(): Particionando el disco virutal: ERROR" +# return 1 +#fi + +echoAndLog "$FUNCNAME(): Desmontando $DISKLOOP despues del particionado " +losetup -d $DISKLOOP + +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR" + return 1 +fi + + +#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 +#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 +PARTLOOP=$(losetup -f) +echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP" +losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext3 -b 4096 -L $OGCLIENTLABEL $PARTLOOP +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR" + return 1 +fi +echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo " +losetup -d $PARTLOOP +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR" + return 1 +else + echoAndLog "$FUNCNAME(): $OGCLIENTFILE $OGCLIENTSIZEMB MB : OK" +fi +} + + + + + +ogClient2ndFs () +{ +ogClientOsInfo $1 +echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos " +#Montamos el dispositivo virtual en su punto de montaje. +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + +mount | grep $OGCLIENTMOUNT && echoAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 : FAILURE " + +#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} +debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} + + +if [ $? -ne 0 ]; then + errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP + : ha fallado!" + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + return 1 +else + echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP + : ok" + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + return 0 +fi + sleep 5 + +##preubas revisar OSRELEASE +#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ +} + + + + +########## configura el segundo sistema de archivos +########### parametro: "host" +function ogClient2ndSVN() +{ +ogClientOsInfo $1 +#1 la salida de ogClientOsInfo +local LERROR +LERROR=TRUE +echoAndLog "$FUNCNAME: Iniciando la personalización con datos del SVN " +# comprobar que está montado $OGCLIENTMOUNT +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + +# parseamos del apt.source +sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Parsing apt.sources : ERROR" + return 1 +fi + +#parseamos el script de generación del initrd. +sed -e "s/OSRELEASE/$OSRELEASE/g" ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.sh +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Parsing GenerateInitrd.sh : ERROR" + return 1 +fi + +#damos permiso al directorio de scripts +chmod 775 ${SVNCLIENTDIR}/clientstructure/root/* + +# los copiamos +cp -prv ${SVNCLIENTDIR}/clientstructure/* $OGCLIENTMOUNT +mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/ +cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/ +cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/ + +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Copying client data : ERROR" + return 1 +fi + +# copiamos algunas cosas del nfsexport + +#### Tipos de letra para el Browser. +cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/lib/fonts +#### Crear enlaces para compatibilidad con las distintas versiones del Browser. +mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/ +ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts +ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/QtEmbedded-4.6.2/lib/fonts +ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/QtEmbedded-4.6.3/lib/fonts +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Linking Browser fonts : ERROR" + return 1 +fi + +# B ######################################################## +cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Copying pci.ids : ERROR" + return 1 +fi + +cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Copying Browser : ERROR" + return 1 +fi + +cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin +if [ $? -ne 0 ] +then + errorAndLog "$FUNCNAME(): Copying ogAdmClient : ERROR" + return 1 +else + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + echoAndLog "$FUNCNAME: Finalizado: OK " + return 0 +fi +} + + +ogClientSchrootConf() +{ +echoAndLog "$FUNCNAME: Iniciando la configuración del schroot " +cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` +cat << EOF > /etc/schroot/schroot.conf +[IMGogclient] +type=loopback +file=/var/lib/tftpboot/ogclient/ogclient.img +description=ogclient ubuntu luc IMGi +priority=1 +users=root +groups=root +root-groups=root +mount-options=-o offset=32256 +root-users=root +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF +cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime` +cat << EOF > /etc/schroot/mount-defaults +# mount.defaults: static file system information for chroots. +# Note that the mount point will be prefixed by the chroot path +# (CHROOT_PATH) +# +# +proc /proc proc defaults 0 0 +#procbususb /proc/bus/usb usbfs defaults 0 0 +#/dev /dev none rw,bind 0 0 +/dev/pts /dev/pts none rw,bind 0 0 +/dev/shm /dev/shm none rw,bind 0 0 +#/home /home none rw,bind 0 0 +/tmp /tmp none rw,bind 0 0 +EOF + +echoAndLog "$FUNCNAME: Finalizado: OK " +return 0 +} + + + +########### param1 "host" +ogClientInitrd() +{ +ogClientVar +cd / +ogClientOsInfo $1 +schroot -c IMGogclient -- /root/GenerateInitrd.generic.sh +echo "cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR" +cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR +cp /tmp/initrd.img-${OSRELEASE} ${OGCLIENTBASEDIR}/oginitrd.img +cp /tmp/vmlinuz-${OSRELEASE} ${OGCLIENTBASEDIR}/ogvmlinuz +cd - +} + + +ogClient2ndSqfs() +{ +ogClientVar +echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs " +# si ya existe un sqfs lo renombramos +[ -f $OGCLIENTBASEDIR/ogclient.sqfs ] && mv $OGCLIENTBASEDIR/ogclient.sqfs $OGCLIENTBASEDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S` +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 +mksquashfs $OGCLIENTMOUNT $OGCLIENTBASEDIR/ogclient.sqfs +chmod 744 $OGCLIENTBASEDIR/ogclient.sqfs +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +} + + + + +ogClientSshkeys() +{ +echo comprobamos clave rsa en el host REPO OG. +if [ ! -f /root/.ssh/id_rsa.pub ] +then + echo "creando claves rsa" + ssh-keygen -q -f /root/.ssh/id_dsa -t dsa -N "opengnsys" +else + echo "la claves ya estan creadas" +fi +echo "copiamos la clave publica a /tmp" +cp /root/.ssh/id_dsa.pub /tmp + +cat /tmp/id_dsa.pub + +echo "schroot con instrucciones." +schroot -c IMGogclient -- /root/importSshKeys.sh + +echo "limpiando" +rm /tmp/id_dsa.pub + +## copiamos ssh rsa del host al guest como authorized-key2 +##rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +##cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +##mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT +} + + +ogClientConfpxe() +{ +################## DEJAMOS FICHERO DE EJEMPLOS PARA: +#default +cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient +LABEL pxe-${OGRELEASE} +KERNEL ogclient/vmlinuz-$OGRELEASE +APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= +LABEL pxe-2.6.32-21-generic-pae +KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs +LABEL cache +KERNEL grub.exe +APPEND --config-file="find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img" +LABEL net +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae" +LABEL IfNOTcacheGOnet +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot" +#LABEL pxe-2.6.32-21-generic-pae +#KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +#APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=172.17.32.242 +#LABEL grub +#KERNEL grub.exe +#APPEND keeppxe +FIN +#/etc/hosts +echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient +/etc/init.d/nfs-kernel-server restart +##################################################################### +} + + + +############### No usados en el instalador, solo en actualizaciones. +#/** +# ogClientMount [str_program] +#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones +#@return Si no hay parametros: login de acceso. +#@return con un parametro: La salida del programa ejecutado +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## +function ogClientMount () +{ + #TODO comprobar que OGFILE y OGFILEMOUNT existe. + mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc + mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys + mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp + mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev + mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts + + + [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`) + [ $# = 1 ] && chroot $OGCLIENTMOUNT $1 + +} + +#/** +# ogClientUnmount +#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys +#@param +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientUnmount () +{ + cd /tmp + echo "desmontando cliente espere" + sleep 5 + mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount + mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount + mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount + mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount + mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount + mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount + #-d -f -l + +} + + +############################ hasta el final del archivo antiguos +############################# ANTIGUOS +function ogClientGetRelease () +{ + #1 OSCODENAME jaunty|karmic|lucid + case $1 in + jaunty|JAUNTY) + OSCODENAME=jaunty + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + lenny|LENNY) + OSCODENAME=lenny + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + squeeze|SQUEEZE) + OSCODENAME=squeeze + OGRELEASE="2.6.28-11-generic" + echo $OGRELEASE + ;; + karmic|KARMIC) + OSCODENAME=karmic + OGRELEASE="2.6.31-14-generic" + echo $OGRELEASE + ;; + lucid|LUCID) + OSCODENAME=lucid + OGRELEASE="2.6.32-21-generic-pae" + echo $OGRELEASE + ;; + *) + return 1 + ;; + esac + +} + + +#/** +# ogClientGenerator str_versionUbuntu str_release +#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Versión de ubuntu a generar, jaunty karmic +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientGeneratorDebootstrap () +{ + if [ $# != 2 ] + then + echo Debes introducir como argumento1: jaunty karmic lucid + echo Debes introducir como argumento2: la release + echo utiliza como entrada ogClientCheckVersion + return + fi + OSCODENAME=$1 + OGRELEASE=$2 + + # instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema + #apt-get install gdebi-core + #wget $LASTDEBOOTSTRAP + #gdebi -n debootstrap_1.0.20_all.deb + + #Desmontamos por si acaso el dispositivo virtual + mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT + + #Creamos el directorio donde montaremos el disco virtual + mkdir -p $OGCLIENTMOUNT + + #Creamos el disco virtual con el filesystem del cliente. + dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB + #qemu-img create $OGCLIENTFILE 3G + #dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB + + + #particionamos el disco virtual + losetup /dev/loop0 $OGCLIENTFILE + echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk /dev/loop0 + losetup -d /dev/loop0 + + + #formateamos la particion principal. + losetup -o 32256 /dev/loop1 $OGCLIENTFILE + mkfs.ext3 -b 4096 -L $OGCLIENTLABEL /dev/loop1 + #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 + #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 + losetup -d /dev/loop1 + + #Montamos el dispositivo virtual en su punto de montaje. + mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 + + #TODO Comprobar arquitectura + #Iniciamos la creación del sistema en el directorio de clientes. + #echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + debootstrap --include=linux-image-${OGRELEASE},linux-headers-${OGRELEASE} --arch=i386 --components=main,universe $OSCODENAME $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + ##preubas + #debootstrap --include=linux-image-${OGRELEASE} --arch=i386 --variant=minbase $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + #debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ + + if [ $? -ne 0 ]; then + errorAndLog "ogClientGeneratorDebootstrap(): ha fallado!" + return 1 + else + echoAndLog "ogClientGeneratorDebootstrap(): ok" + return 0 + fi + sleep 5 + +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTFILE + +cat << EOF > /etc/schroot/schroot.conf +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF +} + + + + + diff --git a/client/boot-tools/ogInstaller.lib b/client/boot-tools/ogInstaller.lib new file mode 100644 index 00000000..af0f18df --- /dev/null +++ b/client/boot-tools/ogInstaller.lib @@ -0,0 +1,958 @@ +#!/bin/bash + + +##################################################################### +####### Algunas funciones útiles de propósito general: +##################################################################### +function getDateTime() +{ + echo `date +%Y%m%d-%H%M%S` +} + +# Escribe a fichero y muestra por pantalla +function echoAndLog() +{ + echo $1 + FECHAHORA=`getDateTime` + echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE +} + +function errorAndLog() +{ + echo "ERROR: $1" + FECHAHORA=`getDateTime` + echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE +} + +# comprueba si el elemento pasado en $2 esta en el array $1 +function isInArray() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + echoAndLog "${FUNCNAME}(): checking if $2 is in $1" + local deps + eval "deps=( \"\${$1[@]}\" )" + elemento=$2 + + local is_in_array=1 + # copia local del array del parametro 1 + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + if [ "${deps[$i]}" = "${elemento}" ]; then + echoAndLog "isInArray(): $elemento found in array" + is_in_array=0 + fi + done + + if [ $is_in_array -ne 0 ]; then + echoAndLog "${FUNCNAME}(): $elemento NOT found in array" + fi + + return $is_in_array + +} + +##################################################################### +####### Funciones de manejo de paquetes Debian +##################################################################### + +function checkPackage() +{ + package=$1 + if [ -z $package ]; then + errorAndLog "checkPackage(): parameter required" + exit 1 + fi + echoAndLog "checkPackage(): checking if package $package exists" + dpkg -s $package | grep Status | grep -qw install &>/dev/null + if [ $? -eq 0 ]; then + echoAndLog "checkPackage(): package $package exists" + return 0 + else + echoAndLog "checkPackage(): package $package doesn't exists" + return 1 + fi +} + +# recibe array con dependencias +# por referencia deja un array con las dependencias no resueltas +# devuelve 1 si hay alguna dependencia no resuelta +function checkDependencies() +{ + if [ $# -ne 2 ]; then + errorAndLog "checkDependencies(): invalid number of parameters" + exit 1 + fi + + echoAndLog "checkDependencies(): checking dependences" + uncompletedeps=0 + + # copia local del array del parametro 1 + local deps + eval "deps=( \"\${$1[@]}\" )" + + declare -a local_notinstalled + + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + checkPackage ${deps[$i]} + if [ $? -ne 0 ]; then + local_notinstalled[$uncompletedeps]=$package + let uncompletedeps=uncompletedeps+1 + fi + done + + # relleno el array especificado en $2 por referencia + for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ )) + do + eval "${2}[$i]=${local_notinstalled[$i]}" + done + + # retorna el numero de paquetes no resueltos + echoAndLog "checkDependencies(): dependencies uncompleted: $uncompletedeps" + return $uncompletedeps +} + +# Recibe un array con las dependencias y lo instala +function installDependencies() +{ + if [ $# -ne 1 ]; then + errorAndLog "installDependencies(): invalid number of parameters" + exit 1 + fi + echoAndLog "installDependencies(): installing uncompleted dependencies" + + # copia local del array del parametro 1 + local deps + eval "deps=( \"\${$1[@]}\" )" + + local string_deps="" + for (( i = 0 ; i < ${#deps[@]} ; i++ )) + do + string_deps="$string_deps ${deps[$i]}" + done + + if [ -z "${string_deps}" ]; then + errorAndLog "installDependencies(): array of dependeces is empty" + exit 1 + fi + + OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND + export DEBIAN_FRONTEND=noninteractive + + echoAndLog "installDependencies(): now ${string_deps} will be installed" + apt-get -y install --force-yes ${string_deps} + if [ $? -ne 0 ]; then + errorAndLog "installDependencies(): error installing dependencies" + return 1 + fi + + DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND + echoAndLog "installDependencies(): dependencies installed" +} + +# Hace un backup del fichero pasado por parámetro +# deja un -last y uno para el día +function backupFile() +{ + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local fichero=$1 + local fecha=`date +%Y%m%d` + + if [ ! -f $fichero ]; then + errorAndLog "${FUNCNAME}(): file $fichero doesn't exists" + return 1 + fi + + echoAndLog "${FUNCNAME}(): realizando backup de $fichero" + + # realiza una copia de la última configuración como last + cp -p $fichero "${fichero}-LAST" + + # si para el día no hay backup lo hace, sino no + if [ ! -f "${fichero}-${fecha}" ]; then + cp -p $fichero "${fichero}-${fecha}" + fi + + echoAndLog "${FUNCNAME}(): backup realizado" +} + +##################################################################### +####### Funciones para el manejo de bases de datos +##################################################################### + +# This function set password to root +function mysqlSetRootPassword() +{ + if [ $# -ne 1 ]; then + errorAndLog "mysqlSetRootPassword(): invalid number of parameters" + exit 1 + fi + + local root_mysql=$1 + echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server" + /usr/bin/mysqladmin -u root password ${root_mysql} + if [ $? -ne 0 ]; then + errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server" + return 1 + fi + echoAndLog "mysqlSetRootPassword(): root password saved!" + return 0 +} + +# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente +function mysqlGetRootPassword(){ + local pass_mysql + local pass_mysql2 + # Comprobar si MySQL está instalado con la clave de root por defecto. + if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then + echoAndLog "${FUNCNAME}(): Using default mysql root password." + else + stty -echo + echo "Existe un servicio mysql ya instalado" + read -p "Insertar clave de root de Mysql: " pass_mysql + echo "" + read -p "Confirmar clave:" pass_mysql2 + echo "" + stty echo + if [ "$pass_mysql" == "$pass_mysql2" ] ;then + MYSQL_ROOT_PASSWORD=$pass_mysql + echo "La clave es: ${MYSQL_ROOT_PASSWORD}" + return 0 + else + echo "Las claves no coinciden no se configura la clave del servidor de base de datos." + echo "las operaciones con la base de datos daran error" + return 1 + fi + fi +} + +# comprueba si puede conectar con mysql con el usuario root +function mysqlTestConnection() +{ + if [ $# -ne 1 ]; then + errorAndLog "mysqlTestConnection(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + echoAndLog "mysqlTestConnection(): checking connection to mysql..." + echo "" | mysql -uroot -p"${root_password}" + if [ $? -ne 0 ]; then + errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!" + return 1 + else + echoAndLog "mysqlTestConnection(): connection success" + return 0 + fi +} + +# comprueba si la base de datos existe +function mysqlDbExists() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlDbExists(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + echoAndLog "mysqlDbExists(): checking if $database exists..." + echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$" + if [ $? -ne 0 ]; then + echoAndLog "mysqlDbExists():database $database doesn't exists" + return 1 + else + echoAndLog "mysqlDbExists():database $database exists" + return 0 + fi +} + +function mysqlCheckDbIsEmpty() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..." + num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l` + if [ $? -ne 0 ]; then + errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password" + exit 1 + fi + + if [ $num_tablas -eq 0 ]; then + echoAndLog "mysqlCheckDbIsEmpty():database $database is empty" + return 0 + else + echoAndLog "mysqlCheckDbIsEmpty():database $database has tables" + return 1 + fi + +} + + +function mysqlImportSqlFileToDb() +{ + if [ $# -ne 3 ]; then + errorAndLog "${FNCNAME}(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + local sqlfile=$3 + + if [ ! -f $sqlfile ]; then + errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!" + return 1 + fi + + echoAndLog "${FUNCNAME}(): importing sql file to ${database}..." + perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DEFAULTUSER/$OPENGNSYS_DB_DEFAULTUSER/g; s/DEFAULTPASSWD/$OPENGNSYS_DB_DEFAULTPASSWD/g" $sqlfile + mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $sqlfile + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database" + return 1 + fi + echoAndLog "${FUNCNAME}(): file imported to database $database" + return 0 +} + +# Crea la base de datos +function mysqlCreateDb() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local database=$2 + + echoAndLog "${FUNCNAME}(): creating database..." + mysqladmin -u root --password="${root_password}" create $database + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while creating database $database" + return 1 + fi + echoAndLog "${FUNCNAME}(): database $database created" + return 0 +} + + +function mysqlCheckUserExists() +{ + if [ $# -ne 2 ]; then + errorAndLog "mysqlCheckUserExists(): invalid number of parameters" + exit 1 + fi + + local root_password="${1}" + local userdb=$2 + + echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..." + echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user + if [ $? -ne 0 ]; then + echoAndLog "mysqlCheckUserExists(): user doesn't exists" + return 1 + else + echoAndLog "mysqlCheckUserExists(): user already exists" + return 0 + fi + +} + +# Crea un usuario administrativo para la base de datos +function mysqlCreateAdminUserToDb() +{ + if [ $# -ne 4 ]; then + errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters" + exit 1 + fi + + local root_password=$1 + local database=$2 + local userdb=$3 + local passdb=$4 + + echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}" + + cat > $WORKDIR/create_${database}.sql < ${basetftp}/pxelinux.cfg/default < /dev/null + if [ $? -eq 0 ]; then + echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting" + return 0 + fi + + cadenaexport="${export}" + for parametro in $* + do + if [ $contador -gt 0 ] + then + host=`echo $parametro | awk -F: '{print $1}'` + options=`echo $parametro | awk -F: '{print $2}'` + if [ "${host}" == "" ]; then + errorAndLog "${FUNCNAME}(): host can't be empty" + return 1 + fi + cadenaexport="${cadenaexport}\t${host}" + + if [ "${options}" != "" ]; then + cadenaexport="${cadenaexport}(${options})" + fi + fi + let contador=contador+1 + done + + echo -en "$cadenaexport\n" >> /etc/exports + + echoAndLog "${FUNCNAME}(): add $export to /etc/exports" + + return 0 +} + +######################################################################## +## Configuracion servicio DHCP +######################################################################## + +function dhcpConfigure() +{ + echoAndLog "${FUNCNAME}(): Sample DHCP Configuration." + + backupFile /etc/dhcp3/dhcpd.conf + + sed -e "s/SERVERIP/$SERVERIP/g" \ + -e "s/NETIP/$NETIP/g" \ + -e "s/NETMASK/$NETMASK/g" \ + -e "s/NETBROAD/$NETBROAD/g" \ + -e "s/ROUTERIP/$ROUTERIP/g" \ + -e "s/DNSIP/$DNSIP/g" \ + $WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while configuring dhcp server" + return 1 + fi + + /etc/init.d/dhcp3-server restart + echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"." + return 0 +} + + +##################################################################### +####### Funciones específicas de la instalación de Opengnsys +##################################################################### + +# Copiar ficheros del OpenGnSys Web Console. +function installWebFiles() +{ + echoAndLog "${FUNCNAME}(): Installing web files..." + cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para doxigen + if [ $? != 0 ]; then + errorAndLog "${FUNCNAME}(): Error copying web files." + exit 1 + fi + find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null + # Cambiar permisos para ficheros especiales. + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \ + $INSTALL_TARGET/www/includes \ + $INSTALL_TARGET/www/comandos/gestores/filescripts \ + $INSTALL_TARGET/www/images/iconos + echoAndLog "${FUNCNAME}(): Web files installed successfully." +} + +# Configuración específica de Apache. +function openGnsysInstallWebConsoleApacheConf() +{ + if [ $# -ne 2 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + local path_apache2_confd=$2 + local path_web_console=${path_opengnsys_base}/www + + if [ ! -d $path_apache2_confd ]; then + errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation" + return 1 + fi + + mkdir -p $path_apache2_confd/{sites-available,sites-enabled} + + echoAndLog "${FUNCNAME}(): creating apache2 config file.." + + + # genera configuración + cat > $path_opengnsys_base/etc/apache.conf < + Options -Indexes FollowSymLinks + DirectoryIndex acceso.php + +EOF + + ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf + ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation" + return 1 + else + echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon" + /etc/init.d/apache2 restart + return 0 + fi +} + +# Crear documentación Doxygen para la consola web. +function makeDoxygenFiles() +{ + echoAndLog "${FUNCNAME}(): Making Doxygen web files..." + $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \ + $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www + if [ ! -d "$INSTALL_TARGET/www/html" ]; then + errorAndLog "${FUNCNAME}(): unable to create Doxygen web files." + return 1 + fi + mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api" + chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api + echoAndLog "${FUNCNAME}(): Doxygen web files created successfully." +} + + +# Crea la estructura base de la instalación de opengnsys +function openGnsysInstallCreateDirs() +{ + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + + echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base" + + mkdir -p $path_opengnsys_base + mkdir -p $path_opengnsys_base/admin/{autoexec,comandos,menus,usuarios} + mkdir -p $path_opengnsys_base/bin + mkdir -p $path_opengnsys_base/client + mkdir -p $path_opengnsys_base/doc + mkdir -p $path_opengnsys_base/etc + mkdir -p $path_opengnsys_base/lib + mkdir -p $path_opengnsys_base/log/clients + mkdir -p $path_opengnsys_base/sbin + mkdir -p $path_opengnsys_base/www + mkdir -p $path_opengnsys_base/images + ln -fs /var/lib/tftpboot $path_opengnsys_base + ln -fs $path_opengnsys_base/log /var/log/opengnsys + + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" + return 1 + fi + + echoAndLog "${FUNCNAME}(): directory paths created" + return 0 +} + +# Copia ficheros de configuración y ejecutables genéricos del servidor. +function openGnsysCopyServerFiles () { + if [ $# -ne 1 ]; then + errorAndLog "${FUNCNAME}(): invalid number of parameters" + exit 1 + fi + + local path_opengnsys_base=$1 + + local SOURCES=( client/boot/initrd-generator \ + client/boot/upgrade-clients-udeb.sh \ + client/boot/udeblist.conf \ + client/boot/udeblist-jaunty.conf \ + client/boot/udeblist-karmic.conf \ + client/boot/udeblist-lucid.conf \ + server/PXE/pxelinux.cfg/default \ + doc ) + local TARGETS=( bin/initrd-generator \ + bin/upgrade-clients-udeb.sh \ + etc/udeblist.conf \ + etc/udeblist-jaunty.conf \ + etc/udeblist-karmic.conf \ + etc/udeblist-lucid.conf \ + tftpboot/pxelinux.cfg/default \ + doc ) + + if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then + errorAndLog "${FUNCNAME}(): inconsistent number of array items" + exit 1 + fi + + echoAndLog "${FUNCNAME}(): copying files to server directories" + + pushd $WORKDIR/opengnsys + local i + for (( i = 0; i < ${#SOURCES[@]}; i++ )); do + if [ -f "${SOURCES[$i]}" ]; then + echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + cp -p "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}" + elif [ -d "${SOURCES[$i]}" ]; then + echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}" + else + echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" + fi + done + popd +} + +#################################################################### +### Funciones de compilación de códifo fuente de servicios +#################################################################### + +# Compilar los servicios de OpenGNsys +function servicesCompilation () +{ + local hayErrores=0 + + # Compilar OpenGnSys Server + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmServer + make && make install + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Repository Manager + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmRepo + make && make install + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Client + echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client" + pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient + make && mv ogAdmClient ../../../client/nfsexport/bin + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client" + hayErrores=1 + fi + popd + + return $hayErrores +} + + +#################################################################### +### Funciones instalacion cliente opengnsys +#################################################################### + +function openGnsysClientCreate() +{ + local OSDISTRIB OSCODENAME + + local hayErrores=0 + + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." + cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client + find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null + echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." + mkdir -p $INSTALL_TARGET/client/lib/engine/bin + cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while copying engine files" + hayErrores=1 + fi + + # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). + OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then + echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME." + $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME" + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" + hayErrores=1 + fi + echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME." + $INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME" + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" + hayErrores=1 + fi + else + echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files." + $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/ + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" + hayErrores=1 + fi + echoAndLog "${FUNCNAME}(): Loading default udeb files." + $INSTALL_TARGET/bin/upgrade-clients-udeb.sh + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" + hayErrores=1 + fi + fi + + if [ $hayErrores -eq 0 ]; then + echoAndLog "${FUNCNAME}(): Client generation success." + else + errorAndLog "${FUNCNAME}(): Client generation with errors" + fi + + return $hayErrores +} + + +# Configuración básica de servicios de OpenGnSys +function openGnsysConfigure() +{ + echoAndLog "openGnsysConfigure(): Copying init files." + cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys + cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.default /etc/default/opengnsys + update-rc.d opengnsys defaults + echoAndLog "openGnsysConfigure(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"." + perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmServer.cfg + perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg + echoAndLog "${FUNCNAME}(): Creating Web Console config file" + OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys" + perl -pi -e "s/SERVERIP/$SERVERIP/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php + sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Services/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg + echoAndLog "openGnsysConfiguration(): Starting OpenGnSys services." + /etc/init.d/opengnsys start +} + + +##################################################################### +####### Función de resumen informativo de la instalación +##################################################################### + +function installationSummary(){ + echo + echoAndLog "OpenGnSys Installation Summary" + echo "==============================" + echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)" + echoAndLog "Installation directory: $INSTALL_TARGET" + echoAndLog "Repository directory: $INSTALL_TARGET/images" + echoAndLog "TFTP configuracion directory: /var/lib/tftpboot" + echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf" + echoAndLog "NFS configuracion file: /etc/exports" + echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" + echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER" + echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD" + echoAndLog "Web Console default user: $OPENGNSYS_DB_DEFAULTUSER" + echoAndLog "Web Console default password: $OPENGNSYS_DB_DEFAULTPASSWD" + echo + echoAndLog "Post-Installation Instructions:" + echo "===============================" + echoAndLog "Review or edit all configuration files." + echoAndLog "Insert DHCP configuration data and restart service." + echoAndLog "Log-in as Web Console admin user." + echoAndLog " - Review default Organization data and default user." + echoAndLog "Log-in as Web Console organization user." + echoAndLog " - Insert OpenGnSys data (rooms, computers, etc)." +echo +} + diff --git a/client/boot-tools/old/ModificacionesNecesiariasENGINE/Net.lib b/client/boot-tools/old/ModificacionesNecesiariasENGINE/Net.lib new file mode 100755 index 00000000..14806b7e --- /dev/null +++ b/client/boot-tools/old/ModificacionesNecesiariasENGINE/Net.lib @@ -0,0 +1,77 @@ +#!/bin/bash +#/** +#@file Net.lib +#@brief Librería o clase Net +#@class Net +#@brief Funciones básicas de red. +#@version 1.0 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogGetHostname +#@brief Muestra el nombre del cliente. +#@return str_host - nombre de máquina +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetHostname () +{ +local HOST NETFILE +# Tomar nombre de la variable HOSTNAME +HOST="$HOSTNAME" + +# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) +[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} + END {print host} + ' /var/lib/dhcp3/dhclient.leases) +# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ +[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} + $1~/hostname/ {print $2}' /proc/cmdline) + +[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" +echo $HOST +} + + +#/** +# ogGetIpAddress +#@brief Muestra la dirección IP del sistema +#@return str_ip - Dirección IP +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetIpAddress () +{ +local IP +#Version og2ndFS +NETFILE="/tmp/net-eth0.conf" +[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) + +# Obtener direcciones IP. /* (comentario para Doxygen) +[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') +# Mostrar sólo la primera. (comentario para Doxygen) */ +echo ${IP%% *} +} + + +#/** +# ogGetMacAddress +#@brief Muestra la dirección Ethernet del cliente. +#@return str_ether - Dirección Ethernet +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetMacAddress () +{ +local MAC +# Obtener direcciones Ethernet. +MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') +# Mostrar sólo la primera. +echo ${MAC%% *} +} + diff --git a/client/boot-tools/old/ModificacionesNecesiariasENGINE/readme b/client/boot-tools/old/ModificacionesNecesiariasENGINE/readme new file mode 100644 index 00000000..9078de1b --- /dev/null +++ b/client/boot-tools/old/ModificacionesNecesiariasENGINE/readme @@ -0,0 +1,27 @@ +Moverse al etc del cliente. +cd /opt/opengnsys/client/etc + +preinit/default + modificamos el sha-bang a /bin/bash + eliminamos enlace del bash + Ejecute solo el loadmodules del for + +preinit/loaenviron + comentamos el LD_PATH + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/opt/drbl/sbin + + +dejar en bin solo el browser y el ogadmcliente + +/var/lib/tftboot/pxelinux.cfg/default +DEFAULT pxe2 +LABEL pxe +KERNEL linux +APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin +LABEL pxe2 +KERNEL vmlinuz-2.6.32-21-generic-pae +APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 + + +parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN +temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/boot-tools/old/Net.lib b/client/boot-tools/old/Net.lib new file mode 100755 index 00000000..14806b7e --- /dev/null +++ b/client/boot-tools/old/Net.lib @@ -0,0 +1,77 @@ +#!/bin/bash +#/** +#@file Net.lib +#@brief Librería o clase Net +#@class Net +#@brief Funciones básicas de red. +#@version 1.0 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogGetHostname +#@brief Muestra el nombre del cliente. +#@return str_host - nombre de máquina +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetHostname () +{ +local HOST NETFILE +# Tomar nombre de la variable HOSTNAME +HOST="$HOSTNAME" + +# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) +[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} + END {print host} + ' /var/lib/dhcp3/dhclient.leases) +# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ +[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} + $1~/hostname/ {print $2}' /proc/cmdline) + +[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" +echo $HOST +} + + +#/** +# ogGetIpAddress +#@brief Muestra la dirección IP del sistema +#@return str_ip - Dirección IP +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetIpAddress () +{ +local IP +#Version og2ndFS +NETFILE="/tmp/net-eth0.conf" +[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) + +# Obtener direcciones IP. /* (comentario para Doxygen) +[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') +# Mostrar sólo la primera. (comentario para Doxygen) */ +echo ${IP%% *} +} + + +#/** +# ogGetMacAddress +#@brief Muestra la dirección Ethernet del cliente. +#@return str_ether - Dirección Ethernet +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetMacAddress () +{ +local MAC +# Obtener direcciones Ethernet. +MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') +# Mostrar sólo la primera. +echo ${MAC%% *} +} + diff --git a/client/boot-tools/old/boot/default.sh b/client/boot-tools/old/boot/default.sh new file mode 100755 index 00000000..e8c5b5d2 --- /dev/null +++ b/client/boot-tools/old/boot/default.sh @@ -0,0 +1,23 @@ +#!/opt/opengnsys/bin/bash + +set -a + +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} +#### FIXME EN PRUEBAS +OGLOGFILE=/var/log/opengnsys.log + +/opt/opengnsys/etc/init/load2fs.sh +source /opt/opengnsys/etc/preinit/loadenviron.sh +export PATH=/opt/og2fs/bin:$PATH +export PATH=/opt/og2fs/sbin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + echo "$MSG_LAUNCHCLIENT" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE +fi + +bash +# FIXME Arranque Browser +#browser -qws $OGSTARTPAGE diff --git a/client/boot-tools/old/boot/load2fs.sh b/client/boot-tools/old/boot/load2fs.sh new file mode 100644 index 00000000..ca3e3be7 --- /dev/null +++ b/client/boot-tools/old/boot/load2fs.sh @@ -0,0 +1,19 @@ +#!/bin/bash +#/** +#@file load2fs.sh +#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Antonio J. Doblas Viso, Unviersidad de Malaga. +#@date 2010-02-15 +#*/ +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro +cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +export PATH=/opt/og2fs/sbin:$PATH +export PATH=/opt/og2fs/bin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/boot-tools/old/conframfs.sh b/client/boot-tools/old/conframfs.sh new file mode 100644 index 00000000..851928d5 --- /dev/null +++ b/client/boot-tools/old/conframfs.sh @@ -0,0 +1,34 @@ +#!/bin/bash +#/** +#@file conframfs.sh +#@brief Script de inicio para configurar el 2º FileSystem linkado. +#@version 1.0 +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2010-06-02 +#*/ +#sustituido por la funcion ogPostConfigureFS + +MSG_LOADMODULES=${MSG_CONFRAMFS:-"."} +echo "$MSG_CONFRAMFS" + +# configuramos el /etc/hostname. +HOSTNAME=$(ogGetHostname) +echo $HOSTNAME > /etc/hostname + + +#configuramos el /etc/hosts +IP=$(ogGetIpAddress) +echo "127.0.0.1 localhost" > /etc/hosts +echo "$IP $HOSTNAME" >> /etc/hosts + +### conft net +echo "auto lo " > /etc/network/interfaces +echo "iface lo inet loopback" >> /etc/network/interfaces + + +mkdir -p /var/run/network +cd /var/run/network +touch ifstate + +/etc/init.d/networking restart +ifup lo diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox new file mode 100755 index 00000000..da2dc637 Binary files /dev/null and b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox differ diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox new file mode 100755 index 00000000..d04890f6 Binary files /dev/null and b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox differ diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root new file mode 100755 index 00000000..aecb5e32 Binary files /dev/null and b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root differ diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions new file mode 100644 index 00000000..2610f79a --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions @@ -0,0 +1,461 @@ +# -*- shell-script -*- + +catenate_cpiogz() { + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 + return + fi + + cat "${1}" >>"${__TMPCPIOGZ}" +} + +force_load() +{ + manual_add_modules ${@} + echo "${@}" >>"${DESTDIR}/conf/modules" +} + +# Takes a file containing a list of modules to be added as an +# argument, figures out dependancies, and adds them. +# +# Input file syntax: +# +# # comment +# modprobe_module_name [args ...] +# [...] +# +add_modules_from_file() +{ + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 + return + fi + + sed -e '/^#/d' ${1} | while read module rest; do + force_load "${module}" "${rest}" + done +} + +# Is this module available? +have_module() +{ + modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" >/dev/null 2>&1 +} + +# Add dependent modules + eventual firmware +manual_add_modules() +{ + local mam_x firmwares firmware + + for mam_x in $(modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do + # Prune duplicates + if [ -e "${DESTDIR}/${mam_x}" ]; then + continue + fi + + mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" + ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" + if [ "${verbose}" = "y" ]; then + echo "Adding module ${mam_x}" + fi + + # Add firmware files if necessary + firmwares=$(modinfo -F firmware "${mam_x}") + if [ -z "${firmwares}" ]; then + continue + fi + for firmware in $firmwares; do + if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ + || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then + continue + fi + + # Only print warning for missing fw of loaded module + # or forced loaded module + if [ ! -e "/lib/firmware/${firmware}" ] \ + && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then + if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ + /proc/modules \ + || grep -q "^$(basename "${mam_x}" .ko)" \ + "${CONFDIR}/modules"; then + echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 + fi + continue + fi + + if [ -e "/lib/firmware/${version}/${firmware}" ]; then + copy_exec "/lib/firmware/${version}/${firmware}" + else + copy_exec "/lib/firmware/${firmware}" + fi + if [ "${verbose}" = "y" ]; then + echo "Adding firmware ${firmware}" + fi + done + done +} + +# $1 is the source path (e.g. /usr/bin/time) +# $2 is the relative destination (e.g. /usr or /usr/time) +# +# The destination is interpreted in the same way "cp" would, meaning +# (assuming /bin is a directory): +# +# "copy_exec /usr/bin/time /bin" -> /bin/time +# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime +# +# If $2 is left out, the same destination path as for the source arg will +# be used and directories will be created as needed, so: +# +# "copy_exec /usr/bin/time" -> /usr/bin/time +# +copy_exec() { + local source target destination final_destination x nonoptlib + local libname dirname + + source="${1}" + if [ -n "${2}" ]; then + target="${2}" + else + if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then + mkdir -p "${DESTDIR}/$(dirname "${1}")" + fi + target="${1}" + fi + + if [ -d "${DESTDIR}/${target}" ]; then + destination="${target}/$(basename "${source}")" + else + destination="${target}" + fi + final_destination="${DESTDIR}/${destination}" + + if [ -L "$final_destination" ]; then + if [ $(readlink "${final_destination}") != "${source}" ]; then + echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 + return + fi + else + ln -s ${source} ${DESTDIR}/${destination} + if [ "${verbose}" = "y" ]; then + echo "Adding binary ${source}" + fi + fi + + # Copy the dependant libraries + for x in $(ldd ${source} 2>/dev/null | sed -e ' + /\//!d; + /linux-gate/d; + /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; + s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do + + # Try to use non-optimised libraries where possible. + # We assume that all HWCAP libraries will be in tls, + # sse2, vfp or neon + nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') + + if [ -e "${nonoptlib}" ]; then + x="${nonoptlib}" + fi + + libname=$(basename "${x}") + dirname=$(dirname "${x}") + + mkdir -p "${DESTDIR}/${dirname}" + if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then + ln -s "${x}" "${DESTDIR}/${dirname}" + if [ "${verbose}" = "y" ]; then + echo "Adding library ${x}" + fi + fi + done +} + +# Copy entire subtrees to the initramfs +copy_modules_dir() +{ + local x_mod + + if ! [ -d "${MODULESDIR}/${1}" ]; then + return; + fi + if [ "${verbose}" = "y" ]; then + echo "Copying module directory ${1}" + fi + for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do + manual_add_modules $(basename ${x_mod} .ko) + done +} + +# walk /sys for relevant modules +sys_walk_mod_add() +{ + local driver_path module + device_path="$1" + + while [ "${device_path}" != "/sys" ]; do + driver_path="$(readlink -f ${device_path}/driver)" + if [ -e "$driver_path" ]; then + module="$(basename $(readlink -f $driver_path))" + if [ -n "${module}" ]; then + force_load "${module}" + fi + fi + device_path="$(dirname ${device_path})" + done +} + +# walk /sys for relevant modalias +sys_walk_modalias() +{ + local device_path modalias + + device_path="$(dirname "${1}")" + device_path="$(dirname "${device_path}")" + if [ -e "${device_path}/modalias" ]; then + modalias=$(cat "${device_path}/modalias") + fi + + if [ -n "${modalias}" ]; then + force_load "${modalias}" + fi +} + +# find and only copy root relevant modules +dep_add_modules() +{ + local block minor root FSTYPE root_dev_path x + + # findout root block device + fstype + eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" + if [ "${root}" = "/dev/root" ] ; then + root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null + fi + root="$(readlink -f ${root})" + + # find out real rootfs on auto type + if [ "${FSTYPE}" = "auto" ]; then + eval "$(/usr/lib/klibc/bin/fstype ${root})" + fi + + # check that fstype rootfs recognition + if [ "${FSTYPE}" = "unknown" ]; then + echo "mkinitramfs: unknown fstype on root ${root}" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report bug on initramfs-tools" + exit 1 + fi + + # Add rootfs + manual_add_modules "${FSTYPE}" + + # lvm luks root + if [ "${root#/dev/mapper/}" != "${root}" ]; then + minor=$((0x$(stat --format "%T" ${root}) % 256)) + block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) + if [ "${block#dm-}" != "${block}" ]; then + block=$(ls -1 /sys/block/${block}/slaves | head -n 1) + fi + block=${block%%[0-9]*} + # md root new naming scheme /dev/md/X + elif [ "${root#/dev/md/}" != "${root}" ]; then + root=${root#/dev/md/} + block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # md root /dev/mdX + elif [ "${root#/dev/md}" != "${root}" ]; then + root=${root#/dev/} + block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # mmc always uses numbering in the devicename (mmcblk[0-9]) + elif [ "${root#/dev/mmc}" != "${root}" ]; then + block=${root#/dev/} + block=${block%%p[0-9]*} + # classical root device + else + block=${root#/dev/} + block=${block%%[0-9]*} + fi + + # Error out if /sys lack block dev + if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then + echo "mkinitramfs: missing ${block} root ${root} /sys entry" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report the bug" + exit 1 + fi + + # sys walk ATA + root_dev_path=$(readlink -f /sys/block/${block}/device) + sys_walk_mod_add ${root_dev_path} + + # catch old-style IDE + if [ -e /sys/bus/ide/devices/ ]; then + sys_walk_modalias ${root_dev_path} + manual_add_modules ide-disk + manual_add_modules ide-cd + fi + + if [ -e /sys/bus/scsi/devices/ ]; then + manual_add_modules sd_mod + fi + + if [ -e /sys/bus/i2o/devices/ ]; then + force_load i2o_block + force_load i2o_config + fi + + if [ -e /sys/bus/ps3_system_bus/ ]; then + for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do + manual_add_modules "${x}" + done + fi + + if [ -e /sys/bus/vio/ ]; then + for x in sunvnet sunvdc; do + manual_add_modules "${x}" + done + fi +} + + +# The modules "most" classes added per default to the initramfs +auto_add_modules() +{ + case "$1" in + base) + for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ + hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ + hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ + hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ + hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ + ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ + virtio_pci vfat nls_cp437 nls_iso8859-1; do + manual_add_modules "${x}" + done + ;; + net) + for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ + cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ + ep93xx_eth eql fealnx famachi forcedeth gelic_net \ + hp100 igb ipg mace mv643xx_eth myri10ge \ + natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ + r8169 s2io sis900 skge sky2 slhc smc911x starfire \ + sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ + de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ + typhon via-rhine via-velocity virtio_net yellowfin; do + manual_add_modules "${x}" + done + ;; + ide) + copy_modules_dir kernel/drivers/ide + ;; + scsi) + copy_modules_dir kernel/drivers/scsi + for x in mptfc mptsas mptscsih mptspi; do + manual_add_modules "${x}" + done + ;; + ata) + copy_modules_dir kernel/drivers/ata + ;; + block) + copy_modules_dir kernel/drivers/block + copy_modules_dir kernel/drivers/usb/storage + ;; + # FIXME: can be removed after Lenny release + ieee1394) + for x in ohci1394 sbp2; do + manual_add_modules "${x}" + done + ;; + firewire) + for x in firewire-ohci firewire-sbp2; do + manual_add_modules "${x}" + done + ;; + i2o) + for x in i2o_block; do + manual_add_modules "${x}" + done + ;; + dasd) + for x in dasd_eckd_mod dasd_fba_mod; do + manual_add_modules "${x}" + done + ;; + *) + auto_add_modules base + auto_add_modules net + auto_add_modules ide + auto_add_modules scsi + auto_add_modules block + auto_add_modules ata + auto_add_modules i2o + auto_add_modules dasd + auto_add_modules ieee1394 + auto_add_modules firewire + ;; + esac +} + +usage() +{ + cat >&2 << EOF + +Usage: ${0} [OPTION]... <-o outfile> [version] + +Options: + -d confdir Specify an alternative configuration directory. + -k Keep temporary directory used to make the image. + -o outfile Write to outfile. + -r root Override ROOT setting in mkinitrd.conf. + +See mkinitramfs(8) for further details. +EOF + exit 1 + +} + +# minimal supported kernel version +check_minkver() +{ + local curversion initdir DPKG_ARCH minversion cm_x tmp + + curversion="${1}" + initdir="${2}" + if [ -z "${initdir}" ]; then + DPKG_ARCH=$(dpkg --print-architecture) + case ${DPKG_ARCH} in + ia64|hppa) + minversion="2.6.15" + ;; + *) + minversion="2.6.12" + ;; + esac + if dpkg --compare-versions "${curversion}" lt "${minversion}"; then + echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + return 0 + fi + set_initlist + for cm_x in ${initlist}; do + # sed: keep last line starting with MINKVER=, + # remove MINKVER= and trailing space + minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") + if [ -z "${tmp}" ]; then + continue + elif dpkg --compare-versions "${curversion}" lt "${minver}"; then + echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + done +} diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache new file mode 100755 index 00000000..37fdd22e --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache @@ -0,0 +1,95 @@ +#!/bin/sh +set -e + +if [ "$1" = prereqs ]; then + exit 0 +fi + +. /usr/share/initramfs-tools/hook-functions + +number= +suffix= +eval $(printf "%s" "$COMPCACHE_SIZE" | \ + sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') + +if [ -z "$number" ] || [ -z "$suffix" ]; then + exit 0 +fi + +if have_module ramzswap; then + name=ramzswap + manual_add_modules ramzswap +elif have_module compcache; then + name=compcache + manual_add_modules compcache +else + exit 0 +fi + +copy_exec /sbin/swapon + +mkdir -p "$DESTDIR"/etc/udev/rules.d +cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." + +# Note that this only becomes /dev on the real filesystem if udev's scripts +# are used; which they will be, but it's worth pointing out +if ! mount -t devtmpfs -o mode=0755 none /dev; then + mount -t tmpfs -o mode=0755 none /dev + mknod -m 0600 /dev/console c 5 1 + mknod /dev/null c 1 3 +fi +mkdir /dev/pts +mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true +> /dev/.initramfs-tools +mkdir /dev/.initramfs + +# Export the dpkg architecture +export DPKG_ARCH= +. /conf/arch.conf + +# Set modprobe env +export MODPROBE_OPTIONS="-qb" + +# Export relevant variables +export ROOT= +export ROOTDELAY= +export ROOTFLAGS= +export ROOTFSTYPE= +export IPOPTS= +export HWADDR= +export break= +export init=/sbin/init +export quiet=n +export readonly=y +export rootmnt=/root +export debug= +export panic= +export blacklist= +export resume_offset= + +# Bring in the main config +. /conf/initramfs.conf +for conf in conf/conf.d/*; do + [ -f ${conf} ] && . ${conf} +done +. /scripts/functions + +# Parse command line options +for x in $(cat /proc/cmdline); do + case $x in + init=*) + init=${x#init=} + ;; + root=*) + ROOT=${x#root=} + case $ROOT in + LABEL=*) + ROOT="${ROOT#LABEL=}" + + # support / in LABEL= paths (escape to \x2f) + case "${ROOT}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" + else + if [ "${ROOT}" != "${ROOT#/}" ]; then + ROOT="\x2f${ROOT#/}" + fi + if [ "${ROOT}" != "${ROOT%/}" ]; then + ROOT="${ROOT%/}\x2f" + fi + IFS='/' + newroot= + for s in $ROOT; do + if [ -z "${newroot}" ]; then + newroot="${s}" + else + newroot="${newroot}\\x2f${s}" + fi + done + unset IFS + ROOT="${newroot}" + fi + esac + ROOT="/dev/disk/by-label/${ROOT}" + ;; + UUID=*) + ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" + ;; + /dev/nfs) + [ -z "${BOOT}" ] && BOOT=nfs + ;; + esac + ;; + rootflags=*) + ROOTFLAGS="-o ${x#rootflags=}" + ;; + rootfstype=*) + ROOTFSTYPE="${x#rootfstype=}" + ;; + rootdelay=*) + ROOTDELAY="${x#rootdelay=}" + case ${ROOTDELAY} in + *[![:digit:].]*) + ROOTDELAY= + ;; + esac + ;; + resumedelay=*) + RESUMEDELAY="${x#resumedelay=}" + ;; + loop=*) + LOOP="${x#loop=}" + ;; + loopflags=*) + LOOPFLAGS="-o ${x#loopflags=}" + ;; + loopfstype=*) + LOOPFSTYPE="${x#loopfstype=}" + ;; + cryptopts=*) + cryptopts="${x#cryptopts=}" + ;; + nfsroot=*) + NFSROOT="${x#nfsroot=}" + ;; + netboot=*) + NETBOOT="${x#netboot=}" + ;; + ip=*) + IPOPTS="${x#ip=}" + ;; + hwaddr=*) + HWADDR="${x#hwaddr=}" + ;; + boot=*) + BOOT=${x#boot=} + ;; + resume=*) + RESUME="${x#resume=}" + ;; + resume_offset=*) + resume_offset="${x#resume_offset=}" + ;; + noresume) + noresume=y + ;; + panic=*) + panic="${x#panic=}" + case ${panic} in + *[![:digit:].]*) + panic= + ;; + esac + ;; + quiet) + quiet=y + ;; + ro) + readonly=y + ;; + rw) + readonly=n + ;; + debug) + debug=y + quiet=n + exec >/dev/.initramfs/initramfs.debug 2>&1 + set -x + ;; + debug=*) + debug=y + quiet=n + set -x + ;; + break=*) + break=${x#break=} + ;; + break) + break=premount + ;; + blacklist=*) + blacklist=${x#blacklist=} + ;; + netconsole=*) + netconsole=${x#netconsole=} + ;; + esac +done + +if [ -z "${noresume}" ]; then + export resume=${RESUME} +else + export noresume +fi + +[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} + +maybe_break top + +# export BOOT variable value for compcache, +# so we know if we run from casper +export BOOT + +# Don't do log messages here to avoid confusing usplash +run_scripts /scripts/init-top + +maybe_break modules +log_begin_msg "Loading essential drivers..." +load_modules +log_end_msg + +maybe_break premount +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" +run_scripts /scripts/init-premount +[ "$quiet" != "y" ] && log_end_msg + +maybe_break mount +log_begin_msg "Mounting root file system..." +. /scripts/${BOOT} +parse_numeric ${ROOT} +mountroot +log_end_msg + +maybe_break bottom +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" +run_scripts /scripts/init-bottom +[ "$quiet" != "y" ] && log_end_msg + +# Move virtual filesystems over to the real filesystem +mount -n -o move /sys ${rootmnt}/sys +mount -n -o move /proc ${rootmnt}/proc + +# Check init bootarg +if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then + echo "Target filesystem doesn't have ${init}." + init= +fi + +# Search for valid init +if [ -z "${init}" ] ; then + for init in /sbin/init /etc/init /bin/init /bin/sh; do + if [ ! -x "${rootmnt}${init}" ]; then + continue + fi + break + done +fi + +# No init on rootmount +if [ ! -x "${rootmnt}${init}" ]; then + panic "No init found. Try passing init= bootarg." +fi + +# Confuses /etc/init.d/rc +if [ -n ${debug} ]; then + unset debug +fi + +# Chain to real filesystem +maybe_break init +exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 +panic "Could not execute run-init." diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules new file mode 100644 index 00000000..9aa46468 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules @@ -0,0 +1,10 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions new file mode 100644 index 00000000..3bea0c97 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions @@ -0,0 +1,420 @@ +# -*- shell-script -*- + +_log_msg() +{ + if [ "$quiet" = "y" ]; then return; fi + echo "$@" +} + +log_success_msg() +{ + _log_msg "Success: $@" +} + +log_failure_msg() +{ + _log_msg "Failure: $@" +} + +log_warning_msg() +{ + _log_msg "Warning: $@" +} + +log_begin_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TEXT $@" + fi + _log_msg "Begin: $@ ..." +} + +log_end_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "SUCCESS ok" + fi + _log_msg "Done." +} + +# Add failure hook +add_mountroot_fail_hook() +{ + mkdir -p /tmp/mountroot-fail-hooks.d + ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" +} + +# Run failure hooks. +# When a failure hook exits "1", it has not done anything to correct the +# system. Exiting "0" means that something has been attempted to resolve +# the lack of a root filesystem. +# Hooks are run in lexigraphical order, and are responsible for removing +# themselves if they should not re-run in a later cycle. When one exits +# "0", the stack is stopped, so the caller can return to the main rootfs +# wait loop. +try_failure_hooks() +{ + local hook + + # Disable usplash so text from hooks can be seen + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + for hook in /tmp/mountroot-fail-hooks.d/*; do + if [ -x ${hook} ] && ${hook} mountfail; then + return 0 + fi + done + return 1 +} + +panic() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + # Disallow console access + if [ -n "${panic}" ]; then + sleep ${panic} + reboot + fi + + modprobe i8042 + modprobe atkbd + + run_scripts /scripts/panic + + echo $@ + PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 +} + +maybe_break() +{ + if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then + panic "Spawning shell within the initramfs" + fi +} + +render() +{ + eval "echo -n \${$@}" +} + +set_initlist() +{ + unset initlist + for si_x in ${initdir}/*; do + # skip empty dirs without warning + [ "${si_x}" = "${initdir}/*" ] && return + + # only allow variable name chars + case ${si_x#${initdir}/} in + *[![:alnum:]_]*) + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not alphanumeric or '_' file" + continue + ;; + esac + + # skip non executable scripts + if [ ! -x ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not executable" + continue + fi + + # skip directories + if [ -d ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: a directory" + continue + fi + + initlist="${initlist} ${si_x#${initdir}/}" + done +} + +reduce_satisfied() +{ + deplist="$(render array_${1})" + unset tmpdeplist + for rs_y in ${deplist}; do + # check if there are alternatives + case ${rs_y} in + *\|*) + OLD_IFS="$IFS" + IFS="|" + for rs_z in ${rs_y}; do + IFS="$OLD_IFS" + # only allow variable name chars + case ${rs_z} in + *[![:alnum:]_]*) + IFS="|" + continue + ;; + esac + # skip non executable scripts + if [ ! -x ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + # skip directories + if [ -d ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + tmpdeplist="${tmpdeplist} ${rs_z}" + break + done + IFS="$OLD_IFS" + ;; + *) + case ${rs_y} in + *[![:alnum:]_]*) + continue + ;; + esac + if [ ! -x ${initdir}/${rs_y} ]; then + continue + fi + if [ -d ${initdir}/${rs_y} ]; then + continue + fi + tmpdeplist="${tmpdeplist} ${rs_y}" + ;; + esac + done + deplist=${tmpdeplist} + for rs_x in ${runlist}; do + pop_list_item ${rs_x} ${deplist} + deplist=${tmppop} + done + eval array_${1}=\"${deplist}\" +} + +get_prereqs() +{ + set_initlist + for gp_x in ${initlist}; do + tmp=$(${initdir}/${gp_x} prereqs) + eval array_${gp_x}=\"${tmp}\" + done +} + +count_unsatisfied() +{ + set -- ${@} + return ${#} +} + +# Removes $1 from initlist +pop_list_item() +{ + item=${1} + shift + set -- ${@} + unset tmppop + # Iterate + for pop in ${@}; do + if [ ${pop} = ${item} ]; then + continue + fi + tmppop="${tmppop} ${pop}" + done + +} + +# This function generates the runlist, so we clear it first. +reduce_prereqs() +{ + unset runlist + set -- ${initlist} + i=$# + # Loop until there's no more in the queue to loop through + while [ ${i} -ne 0 ]; do + oldi=${i} + for rp_x in ${initlist}; do + reduce_satisfied ${rp_x} + count_unsatisfied $(render array_${rp_x}) + cnt=${?} + if [ ${cnt} -eq 0 ]; then + runlist="${runlist} ${rp_x}" + pop_list_item ${rp_x} ${initlist} + initlist=${tmppop} + i=$((${i} - 1)) + fi + done + if [ ${i} -eq ${oldi} ]; then + panic "PANIC: Circular dependancy. Exiting." + fi + done +} + +get_prereq_pairs() +{ + set_initlist + for gp_x in ${initlist}; do + echo ${gp_x} ${gp_x} + prereqs=$(${initdir}/${gp_x} prereqs) + for prereq in ${prereqs}; do + echo ${prereq} ${gp_x} + done + done +} + +call_scripts() +{ + for cs_x in ${runlist}; do + [ -f ${initdir}/${cs_x} ] || continue + if [ x"$1" = "xoptional" ]; then + option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") + [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue + fi + + # mkinitramfs verbose output + if [ "${verbose}" = "y" ]; then + echo "Calling hook ${cs_x}" + fi + ${initdir}/${cs_x} + # allow boot scripts to modify exported boot paramaters + if [ -e /conf/param.conf ]; then + . /conf/param.conf + fi + done +} + +run_scripts() +{ + initdir=${1} + [ ! -d ${initdir} ] && return + + if [ -f ${initdir}/ORDER ]; then + . ${initdir}/ORDER + elif [ -x /usr/bin/tsort ]; then + runlist=$(get_prereq_pairs | tsort) + call_scripts $2 + else + get_prereqs + reduce_prereqs + call_scripts $2 + fi +} + +cache_run_scripts() +{ + DESTDIR=${1} + scriptdir=${2} + initdir=${DESTDIR}${scriptdir} + [ ! -d ${initdir} ] && return + + runlist=$(get_prereq_pairs | tsort) + for crs_x in ${runlist}; do + [ -f ${initdir}/${crs_x} ] || continue + echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER + echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER + done +} + +# Load custom modules first +load_modules() +{ + if [ -e /conf/modules ]; then + cat /conf/modules | while read m; do + # Skip empty lines + if [ -z "$m" ]; then + continue + fi + # Skip comments - d?ash removes whitespace prefix + com=$(printf "%.1s" "${m}") + if [ "$com" = "#" ]; then + continue + fi + modprobe $m + done + fi +} + +# lilo compatibility +parse_numeric() { + case $1 in + "") + return + ;; + /*) + return + ;; + *:*) + minor=${1#*:} + major=${1%:*} + ;; + *) + value=$(( 0x${1} )) + minor=$(( ${value} % 256 )) + major=$(( ${value} / 256 )) + ;; + esac + + mknod -m 600 /dev/root b ${major} ${minor} + ROOT=/dev/root +} + +configure_networking() +{ + # networking already configured thus bail out + [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 + + if [ "${HWADDR}" ]; then + # select interface by MAC address + HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" + local iface + for iface in /sys/class/net/*; do + [ -f "$iface/address" ] || continue + if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then + DEVICE="${iface#/sys/class/net/}" + fi + done + fi + + # support ip options see linux sources + # Documentation/filesystems/nfsroot.txt + case ${IPOPTS} in + none|off) + # Do nothing + ;; + ""|on|any) + # Bring up device + ipconfig -t 60 ${DEVICE} + ;; + dhcp|bootp|rarp|both) + ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} + ;; + *) + ipconfig -t 60 -d $IPOPTS + + # grab device entry from ip option + NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac + + # source ipconfig output + if [ -n "${DEVICE}" ]; then + # source specific bootdevice + . /tmp/net-${DEVICE}.conf + else + # source any interface as not exaclty specified + . /tmp/net-*.conf + fi +} diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth new file mode 100755 index 00000000..8b1e7c8a --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth @@ -0,0 +1,21 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] +then + /bin/plymouth update-root-fs --new-root-dir=${rootmnt} +fi diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev new file mode 100755 index 00000000..f9d2ce9d --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev @@ -0,0 +1,24 @@ +#!/bin/sh -e +# initramfs init-bottom script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Stop udevd, we'll miss a few events while we run init, but we catch up +pkill udevd + +# Move /dev to the real filesystem +mount -n -o move /dev ${rootmnt}/dev diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 new file mode 100755 index 00000000..e5bc78f1 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 @@ -0,0 +1,41 @@ +#!/bin/sh + +# init-premount script for lvm2. + +PREREQS="udev mdadm" +prereqs() +{ + echo $PREREQS +} + +mountroot_fail() +{ + if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then + cat </dev/null; then + modprobe ata_generic all_generic_ide=1 +fi diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist new file mode 100755 index 00000000..5e6b3c1e --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist @@ -0,0 +1,34 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +# blacklist vga16fb when vga= or video= given +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*|video=*) + echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs + ;; + esac +done + +# sanity check +[ -z "${blacklist}" ] && exit 0 + +# write blacklist to modprobe.d +IFS=',' +for b in ${blacklist}; do + echo "blacklist $b" >> /etc/modprobe.d/initramfs +done diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup new file mode 100755 index 00000000..df767bb4 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup @@ -0,0 +1,83 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +OPTION=FRAMEBUFFER +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer new file mode 100755 index 00000000..bb59aadf --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer @@ -0,0 +1,104 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + + +# The options part of the kernel "video=" argument (i.e. everyting +# after "video=:") has very inconsistent rules. +# +# Generally the following applies: +# 1) options are comma-separated +# 2) options can be in either of these three forms: +# =, :, . +# 3) the "mode" option has the form x[M][R][-][@][i][m] +# and may or may not start with "mode=" +# +# When the options are used with modules, they need to be space-separated +# and the following conversions are needed: +# : -> = +# -> =1 +# -> mode= +parse_video_opts() +{ + local OPTS="$1" + local IFS="," + + # Must be a line like video=:,[opt2]... + if [ "${OPTS}" = "${OPTS%%:*}" ]; then + return + fi + OPTS="${OPTS#*:}" + for opt in ${OPTS}; do + # Already in the "=" form + if [ "${opt}" != "${opt#*=}" ]; then + echo -n "$opt " + # In the ":" form + elif [ "${opt}" != "${opt#*:}" ]; then + echo -n "${opt%:*}=${opt#*:} " + # Presumably a modevalue without the "mode=" prefix + elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then + echo -n "mode=$opt " + # Presumably a boolean + else + echo -n "${opt}=1 " + fi + done +} + +FB="" +OPTS="" + +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*) + FB="vesafb"; + OPTS=""; + ;; + video=*) + FB=${x#*=} + FB="${FB%%:*}" + OPTS="$(parse_video_opts "${x}")" + esac +done + +# Map command line name to module name +case ${FB} in +matroxfb) + FB=matroxfb_base + ;; +esac + +if [ -n "${FB}" ]; then + # Some framebuffer devices need character devices :-/ + udevadm settle + MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} + # Wait for the framebuffer devices to be ready + udevadm settle +else + # If we have no graphics devices yet, wait for udev to settle + [ -d /sys/class/graphics/fbcon ] || udevadm settle + [ -d /sys/class/graphics/fb0 ] || udevadm settle + [ -d /sys/class/drm/card0 ] || udevadm settle +fi + +# Force fb mode via /sys interface +for x in $(cat /proc/cmdline); do + case ${x} in + fbmode=*) + MODE=${x#*=} + echo "$MODE" > /sys/class/graphics/fb0/mode + ;; + esac +done diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap new file mode 100755 index 00000000..cb67aa96 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap @@ -0,0 +1,28 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth new file mode 100755 index 00000000..813b6b4c --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth @@ -0,0 +1,20 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="framebuffer console_setup brltty" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +printf '\033[?25l' > /dev/tty7 +/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid +/bin/plymouth show-splash diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev new file mode 100755 index 00000000..cd2fa564 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev @@ -0,0 +1,30 @@ +#!/bin/sh -e +# initramfs init-top script for udev + +PREREQ="all_generic_ide blacklist" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# It's all over netlink now +echo "" > /proc/sys/kernel/hotplug + +# Start the udev daemon to process events +/sbin/udevd --daemon --resolve-names=never + +# Iterate sysfs and fire off everything; if we include a rule for it then +# it'll get handled; otherwise it'll get handled later when we do this again +# in the main boot sequence. +( /sbin/udevadm trigger --subsystem-match=block; \ + /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local new file mode 100644 index 00000000..865572b5 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local @@ -0,0 +1,131 @@ +# Local filesystem mounting -*- shell-script -*- + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" + run_scripts /scripts/local-top + [ "$quiet" != "y" ] && log_end_msg + + while [ -z "${FSTYPE}" ]; do + FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) + + # Run failure hooks, hoping one of them can fix up the system + # and we can restart the wait loop. If they all fail, abort + # and move on to the panic handler and shell. + if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then + break + fi + done + + # We've given up, but we'll let the user fix matters if they can + while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do + # give hint about renamed root + case "${ROOT}" in + /dev/hd*) + suffix="${ROOT#/dev/hd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/sd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" + fi + ;; + /dev/sd*) + suffix="${ROOT#/dev/sd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/hd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" + fi + ;; + esac + echo "Gave up waiting for root device. Common problems:" + echo " - Boot args (cat /proc/cmdline)" + echo " - Check rootdelay= (did the system wait long enough?)" + echo " - Check root= (did the system wait for the right device?)" + echo " - Missing modules (cat /proc/modules; ls /dev)" + panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" + done + + # Get the root filesystem type if not set + if [ -z "${ROOTFSTYPE}" ]; then + [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") + ROOTFSTYPE="${FSTYPE}" + else + FSTYPE="${ROOTFSTYPE}" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" + run_scripts /scripts/local-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ] && \ + [ -z "$LOOP" ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} + + # FIXME This has no error checking + # Mount root + mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} + mountroot_status="$?" + if [ "$LOOP" ]; then + if [ "$mountroot_status" != 0 ]; then + if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then + panic " +Could not mount the partition ${ROOT}. +This could also happen if the file system is not clean because of an operating +system crash, an interrupted boot process, an improper shutdown, or unplugging +of a removable device without first unmounting or ejecting it. To fix this, +simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then +gracefully shut down and reboot back into Windows. After this you should be +able to reboot again and resume the installation. +(filesystem = ${FSTYPE}, error code = $mountroot_status) +" + fi + fi + + mkdir -p /host + mount -o move ${rootmnt} /host + + while [ ! -e "/host/${LOOP#/}" ]; do + panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" + done + + # Get the loop filesystem type if not set + if [ -z "${LOOPFSTYPE}" ]; then + eval $(fstype < "/host/${LOOP#/}") + else + FSTYPE="${LOOPFSTYPE}" + fi + if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then + FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") + [ -z "$FSTYPE" ] && FSTYPE="unknown" + fi + + if [ ${readonly} = y ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + modprobe loop + modprobe ${FSTYPE} + + # FIXME This has no error checking + mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} + + if [ -d ${rootmnt}/host ]; then + mount -o move /host ${rootmnt}/host + fi + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" + run_scripts /scripts/local-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g new file mode 100755 index 00000000..335ef95e --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g @@ -0,0 +1,16 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + mkdir -p /dev/.initramfs/varrun + pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit + pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit +fi + +exit 0 diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc new file mode 100755 index 00000000..c9fbc369 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc @@ -0,0 +1,64 @@ +#!/bin/sh -e +# initramfs local-premount script for fixrtc + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +# use the fixrtc cmdline option in your bootloader to +# automatically set the hardware clock to the date of +# the last mount of your root filesystem to avoid fsck +# to get confused by the superblock being in the future + +BROKEN_CLOCK="" +ROOTDEV="" + +for x in $(cat /proc/cmdline); do + case ${x} in + root=*) + value=${x#*=} + + # Find the device node path depending on the form of root= : + + case ${value} in + UUID=*) + ROOTDEV=/dev/disk/by-uuid/${value#UUID=} + ;; + LABEL=*) + ROOTDEV=/dev/disk/by-label/${value#LABEL=} + ;; + *) + ROOTDEV=${value} + ;; + esac + ;; + fixrtc) + BROKEN_CLOCK=1 + ;; + esac +done + +if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then + ROOTDISK=$(readlink -f "$ROOTDEV") && + + TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && + TIME=${TIMESTR#*:} && + + date --set="${TIME} 1 minute" >/dev/null 2>&1 +fi + +# This script is best-effort. If we couldn't fudge the clock as desired, +# just try to carry on boot anyway: +# It will probably fail, but we won't have made the situation any worse. +exit 0 diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g new file mode 100755 index 00000000..57e7f8ba --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g @@ -0,0 +1,14 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + modprobe fuse +fi + +exit 0 diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume new file mode 100755 index 00000000..46535936 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume @@ -0,0 +1,75 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +. ./scripts/functions + +if [ -z "${resume}" ]; then + exit 0 +fi + +case $resume in +LABEL=*) + resume="${resume#LABEL=}" + + # support any / in LABEL= path (escape to \x2f) + case "${resume}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + resume="$(echo ${resume} | sed 's,/,\\x2f,g')" + else + if [ "${resume}" != "${resume#/}" ]; then + resume="\x2f${resume#/}" + fi + if [ "${resume}" != "${resume%/}" ]; then + resume="${resume%/}\x2f" + fi + IFS='/' + newresume= + for s in $resume; do + if [ -z "${newresume}" ]; then + newresume="${s}" + else + newresume="${newresume}\\x2f${s}" + fi + done + unset IFS + resume="${newresume}" + fi + esac + resume="/dev/disk/by-label/${resume}" + ;; +UUID=*) + resume="/dev/disk/by-uuid/${resume#UUID=}" + ;; +esac + +SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) + +case "${SWAPTYPE}" in + swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) + if [ -x /bin/plymouth ] && plymouth --ping; then + plymouth message --text="Resuming from $resume" + fi + + # hardcode path, uswsusp ships an resume binary too + if [ -n "${resume_offset}" ]; then + /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 + else + /bin/resume ${resume} >/dev/null 2>&1 + fi + ;; +esac diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs new file mode 100644 index 00000000..b9c2522d --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs @@ -0,0 +1,83 @@ +# NFS filesystem mounting -*- shell-script -*- + +# FIXME This needs error checking + +retry_nr=0 + +# parse nfs bootargs and mount nfs +do_nfsmount() +{ + + configure_networking + + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + + if [ -z "${NFSOPTS}" ]; then + NFSOPTS="-o retrans=10" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" + run_scripts /scripts/nfs-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ]; then + roflag="-o ro" + else + roflag="-o rw" + fi + + nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} +} + +# NFS root mounting +mountroot() +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" + run_scripts /scripts/nfs-top + [ "$quiet" != "y" ] && log_end_msg + + modprobe nfs + # For DHCP + modprobe af_packet + + # Default delay is around 180s + # FIXME: add usplash_write info + if [ -z "${ROOTDELAY}" ]; then + delay=180 + else + delay=${ROOTDELAY} + fi + + # loop until nfsmount succeds + while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do + [ ${retry_nr} -gt 0 ] && \ + [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" + do_nfsmount + retry_nr=$(( ${retry_nr} + 1 )) + [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 + [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg + done + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" + run_scripts /scripts/nfs-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev new file mode 100755 index 00000000..980e496f --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev @@ -0,0 +1,27 @@ +#!/bin/sh -e +# initramfs nfs-top script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Each call to udevsettle can take up to three minutes +if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TIMEOUT 360" + trap "/sbin/usplash_write 'TIMEOUT 15'" 0 +fi + +# We need to wait for the network card drivers to be loaded +/sbin/udevadm settle diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup new file mode 100755 index 00000000..5e97f65e --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup @@ -0,0 +1,82 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap new file mode 100644 index 00000000..f011abf5 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap @@ -0,0 +1,27 @@ +#!/bin/sh + +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth new file mode 100755 index 00000000..2da5a6b5 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth @@ -0,0 +1,18 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +/bin/plymouth quit diff --git a/client/boot-tools/old/initramfs-tools-OG/conf.d/mdadm b/client/boot-tools/old/initramfs-tools-OG/conf.d/mdadm new file mode 100644 index 00000000..11d27f8c --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG/conf.d/mdadm @@ -0,0 +1,18 @@ +# mdadm boot_degraded configuration +# +# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if +# you want. You can also change the values here and changes will be preserved. +# Do note that only the values are preserved; the rest of the file is +# rewritten. +# +# BOOT_DEGRADED: +# Do you want to boot your system if a RAID providing your root filesystem +# becomes degraded? +# +# Running a system with a degraded RAID could result in permanent data loss +# if it suffers another hardware fault. +# +# However, you might answer "yes" if this system is a server, expected to +# tolerate hardware faults and boot unattended. + +BOOT_DEGRADED=false diff --git a/client/boot-tools/old/initramfs-tools-OG/conf.d/resume b/client/boot-tools/old/initramfs-tools-OG/conf.d/resume new file mode 100644 index 00000000..34fdc4a5 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG/conf.d/resume @@ -0,0 +1 @@ +RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/boot-tools/old/initramfs-tools-OG/hooks/oghooks b/client/boot-tools/old/initramfs-tools-OG/hooks/oghooks new file mode 100755 index 00000000..3d9b04b8 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG/hooks/oghooks @@ -0,0 +1,40 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash + + +# Insert OpenGnsys Engine +mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + diff --git a/client/boot-tools/old/initramfs-tools-OG/initramfs.conf b/client/boot-tools/old/initramfs-tools-OG/initramfs.conf new file mode 100644 index 00000000..754e2bea --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG/initramfs.conf @@ -0,0 +1,72 @@ +# +# initramfs.conf +# Configuration file for mkinitramfs(8). See initramfs.conf(5). +# + +# +# MODULES: [ most | netboot | dep | list ] +# +# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. +# +# dep - Try and guess which modules to load. +# +# netboot - Add the base modules, network modules, but skip block devices. +# +# list - Only include modules from the 'additional modules' list +# + +MODULES=most + +# +# BUSYBOX: [ y | n ] +# +# Use busybox if available. +# + +BUSYBOX=y + +# +# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] +# +# Amount of RAM to use for RAM-based compressed swap space. +# +# An empty value - compcache isn't used, or added to the initramfs at all. +# An integer and K (e.g. 65536 K) - use a number of kilobytes. +# An integer and M (e.g. 256 M) - use a number of megabytes. +# An integer and G (e.g. 1 G) - use a number of gigabytes. +# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. +# +# You can optionally install the compcache package to configure this setting +# via debconf and have userspace scripts to load and unload compcache. +# + +COMPCACHE_SIZE="" + +# +# NFS Section of the config. +# + +# +# BOOT: [ local | nfs ] +# +# local - Boot off of local media (harddrive, USB stick). +# +# nfs - Boot using an NFS drive as the root of the drive. +# + +BOOT=local + +# +# DEVICE: ... +# +# Specify the network interface, like eth0 +# + +DEVICE=eth0 + +# +# NFSROOT: [ auto | HOST:MOUNT ] +# + +NFSROOT=auto + diff --git a/client/boot-tools/old/initramfs-tools-OG/modules b/client/boot-tools/old/initramfs-tools-OG/modules new file mode 100644 index 00000000..484ef718 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG/modules @@ -0,0 +1,13 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +fbcon +vesafb +vga16b diff --git a/client/boot-tools/old/initramfs-tools-OG/scripts/og b/client/boot-tools/old/initramfs-tools-OG/scripts/og new file mode 100755 index 00000000..6408eda7 --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG/scripts/og @@ -0,0 +1,140 @@ +# OpenGnsys Local filesystem mounting -*- shell-script -*- + +ogLinkBusybox () +{ +for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do + ln -f /bin/busybox /bin/$n +done +ln -f /bin/busybox /bin/sh +} + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + + mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +configure_networking +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + +set -a +trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 +/opt/opengnsys/etc/preinit/default.sh + + + + + + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + run_scripts /scripts/og-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/boot-tools/old/initramfs-tools-OG/update-initramfs.conf b/client/boot-tools/old/initramfs-tools-OG/update-initramfs.conf new file mode 100644 index 00000000..3c27473b --- /dev/null +++ b/client/boot-tools/old/initramfs-tools-OG/update-initramfs.conf @@ -0,0 +1,20 @@ +# +# Configuration file for update-initramfs(8) +# + +# +# update_initramfs [ yes | all | no ] +# +# Default is yes +# If set to all update-initramfs will update all initramfs +# If set to no disables any update to initramfs beside kernel upgrade + +update_initramfs=yes + +# +# backup_initramfs [ yes | no ] +# +# Default is no +# If set to no leaves no .bak backup files. + +backup_initramfs=no diff --git a/client/boot-tools/old/ogClientFunctions b/client/boot-tools/old/ogClientFunctions new file mode 100755 index 00000000..8311cf3a --- /dev/null +++ b/client/boot-tools/old/ogClientFunctions @@ -0,0 +1,255 @@ +#!/bin/bash +#Definicion de variables +# TODO: Pendiente Definir directorio base del 2FS +OGBASEDIR=/var/lib/tftpboot/ogclient/ +OGFSFILE=${OGBASEDIR}ogclient.img +OGFSMOUNT=${OGBASEDIR}ogclientmount +OGLIB=/opt/opengnsys/client/lib +FSCLIENTSIZEMB=1000 +PASSROOT=og +SCRIPT=/root/configure.sh +RUNME=$OGFSMOUNT$SCRIPT +LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb +OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" +OGFSLABEL=ogClient + + + + +#/** +# ogClientMount [str_program] +#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones +#@return Si no hay parametros: login de acceso. +#@return con un parametro: La salida del programa ejecutado +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## +function ogClientMount () +{ +#TODO comprobar que OGFILE y OGFILEMOUNT existe. +mount $OGFSFILE $OGFSMOUNT -o loop +mount --bind /proc $OGFSMOUNT/proc +mount --bind /sys $OGFSMOUNT/sys +mount --bind /tmp $OGFSMOUNT/tmp +mount --bind /dev $OGFSMOUNT/dev +mount --bind /dev/pts $OGFSMOUNT/dev/pts +[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) +[ $# = 1 ] && chroot $OGFSMOUNT $1 +} + +#/** +# ogClientUnmount +#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys +#@param +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientUnmount () +{ +cd /tmp +umount -d -f -l $OGFSMOUNT/proc +umount -d -f -l $OGFSMOUNT/sys +umount -d -f -l $OGFSMOUNT/tmp +umount -d -f -l $OGFSMOUNT/dev +umount -d -f -l $OGFSMOUNT/dev/pts +umount -d -f -l $OGFSMOUNT +} + +function ogClientCheckVersion () +{ +#TODO: configurar la version lucid +#TODO: introducir un nuevo case para la vesion +case $1 in + jaunty|JAUNTY) + export OGVERSION=jaunty + exort OGRELEASE=2.6.28-11-generic + ;; + karmic|KARMIC) + export OGVERSION=karmic + export OGRELEASE=2.6.31-14-generic + ;; + lucid|LUCID) + export OGVERSION=lucid + export OGRELEASE=2.6.32-21-generic-pae + ;; +esac +echo $OGVERSION $OGRELEASE +} + + +#/** +# ogClientGenerator str_versionUbuntu str_release +#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Versión de ubuntu a generar, jaunty karmic +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogClientGeneratorDebootstrap () +{ + +if [ $# != 2 ] +then +echo Debes introducir como argumento1: jaunty karmic lucid +echo Debes introducir como argumento2: la release +echo utiliza como entrada ogClientCheckVersion +return +fi + +OGVERSION=`echo $1` +OGRELEASE=`echo $2` +echo $OGVERSION $OGRELEASE +pause + +# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema +apt-get install gdebi-core +wget $LASTDEBOOTSTRAP +gdebi -n debootstrap_1.0.20_all.deb + + +#Creamos el directorio donde montaremos el disco virtual +mkdir -p $OGFSMOUNT + +#Creamos el disco virtual con el filesystem del cliente. +dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB +mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F + +#Montamos el dispositivo virtual en su punto de montaje. +mount $OGFSFILE $OGFSMOUNT -o loop + +#TODO Comprobar arquitectura +#Iniciamos la creación del sistema en el directorio de clientes. +echo debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ +debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ + + + +} + + +###### Funciones para los clientes offline +function agregarOG { +cd $NEWROOT +mkdir -p opt/opengnsys +cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys +echo "agregando OG al newinitrd" +} + +function finalizarISO +{ + cd $ANTERIORPWD + mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz + if [ $LINUX ] ; then + mv $TMPINITRD/linux $DEST/linuxISO + fi +} + + +function CrearISO { +mkdir -p tmp/iso/isolinux +#cd tmp/iso/ +cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ +cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ +cp -prv /tmp/linux tmp/iso/isolinux/linuxISO +cp -prv /tmp/initrd.gz tmp/iso/isolinux/ +cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ + + +cat << FIN > tmp/iso/isolinux/isolinux.cfg +DEFAULT menu.c32 +PROMPT 0 +ALLOWOPTIONS 1 + +MENU TITLE FuTuR3 Live Collection + +LABEL gpxe +MENU LABEL gpxe +KERNEL /clonezilla/live/vmlinuz1 +APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia + + +#default 0 +#prompt 1 +#timeout 100 + +#display mensaje.txt + +LABEL 0 +MENU LABEL ogClient +KERNEL linuxISO +APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline + +LABEL 1 +MENU LABEL ogClient1 sin vga +KERNEL linuxISO +APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline + +LABEL 2 +MENU LABEL ogClient2 sin irqpoll +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline + +LABEL 3 +MENU LABEL ogClient3 acpi=off +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline + + +#LABEL ogclient +#KERNEL /ogclient/linuxISO +#APPEND initrd=/ogclient/initrdISO.img + +#KERNEL linuxISO +#APPEND initrd=initrdISO.img + +LABEL 4 +MENU LABEL local +localboot 0x80 +append - + + +label 5 +MENU LABEL Network boot via gPXE lkrn +KERNEL gpxe.lkrn + +label 5 +MENU LABEL Network boot via gPXE usb +KERNEL gpxe.usb + +label 5 +MENU LABEL Network boot via gPXE pxe +KERNEL gpxe.pxe + +label 5 +MENU LABEL Network boot via gPXE iso +KERNEL gpxe.iso +FIN +#### /tmp/iso# +mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso + +} + +function probarISO { +#/tmp/iso +qemu -m 256 -boot d -cdrom ogClient.iso +} + + + + diff --git a/client/boot-tools/old/ogClientGenerator.sh b/client/boot-tools/old/ogClientGenerator.sh new file mode 100755 index 00000000..c7c654ae --- /dev/null +++ b/client/boot-tools/old/ogClientGenerator.sh @@ -0,0 +1,306 @@ +#!/bin/bash +#@file ogClientGenerator.sh +#@brief Script generación del cliente OpenGnSys +#@warning +#@version 0.9 - +#@author Antonio J. Doblas Viso. +#@date 2010/05/24 +#*/ + + + +if [ $# -ne 1 ]; then + echo ": invalid number of parameters" + echo " host | lucid | karmic | jaunty | lenny | squeeze " + exit 1 +fi + + + +# Soo ejecutable por usuario root +if [ "$(whoami)" != 'root' ] +then + echo "ERROR: this program must run under root privileges!!" + exit 1 +fi + +# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). +PROGRAMDIR=$(readlink -e $(dirname "$0")) +if [ -d "$PROGRAMDIR/../installer" ]; then + USESVN=0 +else + USESVN=1 + SVN_URL=svn://www.informatica.us.es:3690/opengnsys/branches/ogClient + #directorio donde se almacenará el codigo temporalmente. + SVN_DIR="./opengnsys/installer/ogClient" +fi + +WORKDIR=/tmp/opengnsys_installer +mkdir -p $WORKDIR +INSTALL_TARGET=/opt/opengnsys +LOG_FILE=/tmp/opengnsys_installation.log + +############################################### +pushd $WORKDIR + + +source `dirname $0`/ogInstaller.lib + + +if [ "$1" == "host" ] +then + OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null + OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') + OGRELEASE=$(uname -a | awk '{print $3}') +else + OSCODENAME=`echo $1` + OGRELEASE=`ogClientGetRelease $OSCODENAME` +fi + + + +OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ +OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img +OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount + +OGLIB=/opt/opengnsys/client/lib + + + +echoAndLog "OpenGnSys CLIENT installation begins at $(date)" + + +# Datos para la generación del cliente. +DEPENDENCIES=( debootstrap subversion schroot) + +## Actualizar repositorios +apt-get update +# Instalación de dependencias (paquetes de sistema operativo). +declare -a notinstalled +checkDependencies DEPENDENCIES notinstalled +if [ $? -ne 0 ]; then + installDependencies notinstalled + if [ $? -ne 0 ]; then + echoAndLog "Error while installing some dependeces, please verify your server installation before continue" + exit 1 + fi +fi + + + +# Si es necesario, descarga el repositorio especifico de la instalación del cliente +if [ $USESVN -eq 1 ]; then + #svnExportCode $SVN_URL + echo svn export "$SVN_URL" $SVN_DIR + #svn export "$SVN_URL" $SVN_DIR + #####debug boorrar el cp + #mkdir -p $SVN_DIR + #cp -prv /home/administrador/workspace/opengnsys/branches/ogClient/* $SVN_DIR + find $SVN_DIR/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null + ###TODO si ya esta descargado da error ??? + ###if [ $? -ne 0 ]; then + ### errorAndLog "Error while getting code from svn" + ### exit 1 + ###fi +else + ln -fs "$(dirname $PROGRAMDIR)" opengnsys +fi + +#### Parseo de ficheros descargados del svn. +# parseamos del apt.source +if [ "$1" == host ] +then + cp /etc/apt/sources.list ${SVN_DIR}/clientstructure/etc/apt/sources.list +else + sed -e "s/OGVERSION/$OGVERSION/g" ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic > ${SVN_DIR}/clientstructure/etc/apt/sources.list + #rm ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic +fi +if [ $? -ne 0 ]; then + errorAndLog "parseando el fichero apt.source: ERROR" +else + echoAndLog "parseando el fichero apt.source: OK" +fi + +#parseamos el scripts de generación del initrd. +sed -e "s/OGRELEASE/$OGRELEASE/g" ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVN_DIR}/clientstructure/root/GenerateInitrd.sh +#rm ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh +if [ $? -ne 0 ]; then + errorAndLog "parseando el fichero de cliente GenerateInitrd: ERROR" +else + echoAndLog "parseando el fichero de cliente GenerateInitrd: OK" +fi + + + +#damos permiso al directorio de scripts +chmod 775 ${SVN_DIR}/clientstructure/root/* +if [ $? -ne 0 ]; then + errorAndLog "Dando permisos de escritura al directorio de scrips para el cliente: ERROR" +else + echoAndLog "Dando permisos de escritura al directorio de scrips para el cliente: OK" +fi + + +#####PASO 1. Generamos el 2º sistema de archivos. +echo "generamos el sistema base con debootstrap" +if [ "$1" == host ] +then + echo ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE +# ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE +else + echo ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE + ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE +fi +if [ $? -ne 0 ]; then + errorAndLog "Generando 2nd FileSystem: ERROR" +else + echoAndLog "Generando 2nd FileSystem: OK" +fi + +########################################## + +cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` +cat << EOF > /etc/schroot/schroot.conf +[IMGogclient] +type=loopback +file=/var/lib/tftpboot/ogclient/ogclient.img +description=ogclient ubuntu luc IMGi +priority=1 +users=root +groups=root +root-groups=root +mount-options=-o offset=32256 +root-users=root +[DIRogclient] +type=directory +directory=/var/lib/tftpboot/ogclient/ogclientmount +description=ogclient ubuntu lucid DIR +priority=2 +users=root +groups=root +root-groups=root +root-users=root +EOF + + + +####PASO 2 Insertamos datos en el 2º sistema de archivos +#2.1 montamos para insertar los ficheros necesarios. +mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 +if [ $? -ne 0 ]; then + errorAndLog "Montando 2nd FileSystem Para Añadir elementos OG: ERROR" + exit 1 +else + echoAndLog "Montando 2nd FileSystem Para Añadir elementos OG: OK" +fi + +#2.2 copiamos la estrucutra descargada al fichero imagen. +echo "cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT " +cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT +if [ $? -ne 0 ]; then + errorAndLog "Copiando los elementos del cliente svn: ERROR" + exit 1 +else + echoAndLog "Copiando los elementos del cliente svn: OK" +fi + +#2.3 Copiamos algunas cosas del actual sistema - ver de que manera integrar los lib +# copiamos algunas cosas del nfsexport +echo "Linking fonts for browser1 $OGLIB" +mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ +cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts +echo "Linking fonts for browser2 $OGLIB" +mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ +cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts +echo "Coping pci.ids" +cp -pr $OGLIB/pci.ids $OGCLIENTMOUNT/etc +#copiamos el browser y el ogADMcline al bin +cp /opt/opengnsys/client/bin/browser $OGCLIENTMOUNT/bin +cp /opt/opengnsys/client/bin/ogAdmClient $OGCLIENTMOUNT/bin +if [ $? -ne 0 ]; then + errorAndLog "Copiando qt pci.ids fonts: ERROR" + exit 1 +else + echoAndLog "Copiando qt pci.ids fonts: OK" +fi + + +## final desmontamos. +mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT +if [ $? -ne 0 ]; then + errorAndLog "Desmontando cliente : ERROR" + exit 1 +else + echoAndLog "desmontando cliente: OK" +fi + +################## Fin paso 2 + +popd + +######## instalamos software adicional. +#ogClientMount /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` +cd / +schroot -c IMGogclient -- /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` + +if [ $? -ne 0 ]; then + errorAndLog "Instalando sofware adicional OG : ERROR" + #exit 1 +else + echoAndLog "Instalando sofware adicional OG: OK" +fi +cd - + +#cd / +#schroot -c IMGogclient -- /root/CompileSoftware.sh +#cd - + +### configuracion hostname passroot securety +cd / +schroot -c IMGogclient -- /root/ConfFS.sh +cd - + +##2.4 claves ssh +sshkeys() +{ +##montamos +mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 +##comprobamos clave rsa en el host,. +if [ ! -f /root/.ssh/id_rsa.pub ] +then + ssh-keygen -q -f /root/.ssh/id_rsa -N "" +fi +## copiamos ssh rsa del host al guest como authorized-key2 +rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 +mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT +} + +### Generamos el 1er sistema de archivos. +cd / +schroot -c IMGogclient -- /root/GenerateInitrd.sh +cp /tmp/*-${OGRELEASE} $OGCLIENTBASEDIR +cd - + + + +################## DEJAMOS FICHERO DE EJEMPLOS PARA: +#default +cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient +LABEL pxe-${OGRELEASE} +KERNEL ogclient/vmlinuz-$OGRELEASE +APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= +FIN +#/etc/hosts +echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient +/etc/init.d/nfs-kernel-server restart +##################################################################### + +# Mostrar sumario de la instalación e instrucciones de post-instalación. +installationSummary + +#rm -rf $WORKDIR +echoAndLog "OpenGnSys installation finished at $(date)" + diff --git a/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib b/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib new file mode 100755 index 00000000..14806b7e --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib @@ -0,0 +1,77 @@ +#!/bin/bash +#/** +#@file Net.lib +#@brief Librería o clase Net +#@class Net +#@brief Funciones básicas de red. +#@version 1.0 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogGetHostname +#@brief Muestra el nombre del cliente. +#@return str_host - nombre de máquina +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetHostname () +{ +local HOST NETFILE +# Tomar nombre de la variable HOSTNAME +HOST="$HOSTNAME" + +# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) +[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} + END {print host} + ' /var/lib/dhcp3/dhclient.leases) +# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ +[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} + $1~/hostname/ {print $2}' /proc/cmdline) + +[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" +echo $HOST +} + + +#/** +# ogGetIpAddress +#@brief Muestra la dirección IP del sistema +#@return str_ip - Dirección IP +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetIpAddress () +{ +local IP +#Version og2ndFS +NETFILE="/tmp/net-eth0.conf" +[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) + +# Obtener direcciones IP. /* (comentario para Doxygen) +[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') +# Mostrar sólo la primera. (comentario para Doxygen) */ +echo ${IP%% *} +} + + +#/** +# ogGetMacAddress +#@brief Muestra la dirección Ethernet del cliente. +#@return str_ether - Dirección Ethernet +#@version 1.0 - Integración en OpenGnSys 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-02-11 +#*/ ## +function ogGetMacAddress () +{ +local MAC +# Obtener direcciones Ethernet. +MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') +# Mostrar sólo la primera. +echo ${MAC%% *} +} + diff --git a/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme b/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme new file mode 100644 index 00000000..853e37f5 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme @@ -0,0 +1,20 @@ +preinit/default + eliminamos enlace del bash + Ejecute solo el loadmodules del for + +preinit/loaenviron + comentamos el LD_PATH + + +/var/lib/tftboot/pxelinux.cfg/default +DEFAULT pxe2 +LABEL pxe +KERNEL linux +APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin +LABEL pxe2 +KERNEL vmlinuz-2.6.32-21-generic-pae +APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 + + +parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN +temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/boot-tools/old/ogFSHlnk/boot/default.sh b/client/boot-tools/old/ogFSHlnk/boot/default.sh new file mode 100755 index 00000000..e8c5b5d2 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/boot/default.sh @@ -0,0 +1,23 @@ +#!/opt/opengnsys/bin/bash + +set -a + +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} +#### FIXME EN PRUEBAS +OGLOGFILE=/var/log/opengnsys.log + +/opt/opengnsys/etc/init/load2fs.sh +source /opt/opengnsys/etc/preinit/loadenviron.sh +export PATH=/opt/og2fs/bin:$PATH +export PATH=/opt/og2fs/sbin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + echo "$MSG_LAUNCHCLIENT" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE +fi + +bash +# FIXME Arranque Browser +#browser -qws $OGSTARTPAGE diff --git a/client/boot-tools/old/ogFSHlnk/boot/load2fs.sh b/client/boot-tools/old/ogFSHlnk/boot/load2fs.sh new file mode 100644 index 00000000..ca3e3be7 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/boot/load2fs.sh @@ -0,0 +1,19 @@ +#!/bin/bash +#/** +#@file load2fs.sh +#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Antonio J. Doblas Viso, Unviersidad de Malaga. +#@date 2010-02-15 +#*/ +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro +cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +export PATH=/opt/og2fs/sbin:$PATH +export PATH=/opt/og2fs/bin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/boot-tools/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh b/client/boot-tools/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh new file mode 100755 index 00000000..e3505aa6 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh @@ -0,0 +1,395 @@ +#!/bin/bash +#Definicion de variables +# TODO: Pendiente Definir directorio base del 2FS +OGBASEDIR=/opt/opengnsys/client/ +OGFSFILE=${OGBASEDIR}og2ndFS +OGFSMOUNT=${OGBASEDIR}ogfsmount +OGLIB=/opt/opengnsys/client/lib + + + + + +#/** +# ogFSHMount [str_program] +#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones +#@return Si no hay parametros: login de acceso. +#@return con un parametro: La salida del programa ejecutado +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## +function ogFSHMount () +{ +mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop +mount --bind /proc $OGFSMOUNT/proc +mount --bind /sys $OGFSMOUNT/sys +mount --bind /tmp $OGFSMOUNT/tmp +mount --bind /dev $OGFSMOUNT/dev +mount --bind /dev/pts $OGFSMOUNT/dev/pts +[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) +[ $# = 1 ] && chroot $OGFSMOUNT $1 +} + +#/** +# ogFSHUnmount +#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys +#@param +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogFSHUnmount () +{ +cd /tmp +umount -d -f -l $OGFSMOUNT/proc +umount -d -f -l $OGFSMOUNT/sys +umount -d -f -l $OGFSMOUNT/tmp +umount -d -f -l $OGFSMOUNT/dev +umount -d -f -l $OGFSMOUNT/dev/pts +umount -d -f -l $OGFSMOUNT +} + + +#/** +# ogFSHCreate str_versionUbuntu +#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys +#@param 1 Versión de ubuntu a generar, jaunty karmic +#@return +#@exception +#@note +#@todo +#@version 0.9 - Primera versión para OpenGnSys +#@author Antonio J. Doblas Viso, Universidad de Málaga +#@date 2010/02/15 +#*/ ## + +function ogFSHCreate () +{ +#Definicion de variables. +local SCRIPT RUNME FSCLIENTSIZEMB PASSROOT LASTDEBOOTSTRAP OGMUSTCOMPILE OGFSLABEL +FSCLIENTSIZEMB=1000 +PASSROOT=og +SCRIPT=/root/configure.sh +RUNME=$OGFSMOUNT$SCRIPT +LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb +OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" +OGFSLABEL=og2FS +#TODO comprobar la compatibilidad del SO host + +if [ $# != 1 ] +then +echo Debes introducir como argumento: jaunty karmic lucid +return +fi + +#TODO: configurar la version lucid +#TODO: introducir un nuevo case para la vesion +case $1 in + jaunty|JAUNTY) + VERSION=jaunty + RELEASE=2.6.28-11-generic + ;; + karmic|KARMIC) + VERSION=karmic + RELEASE=2.6.31-14-generic + ;; + lucid|LUCID) + VERSION=lucid + #RELEASE=2.6.32-19-generic + RELEASE=2.6.32-21-generic-pae + ;; +esac + +# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema +apt-get install gdebi-core +wget $LASTDEBOOTSTRAP +gdebi -n debootstrap_1.0.20_all.deb + +#Creamos el disco virtual con el filesystem del cliente. +dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB +mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F +#Creamos el directorio donde montaremos el disco virtual +mkdir -p $OGFSMOUNT +#Montamos el dispositivo virtual en su punto de montaje. +mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop + +#TODO Comprobar arquitectura +#Iniciamos la creación del sistema en el directorio de clientes. +echo debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ +debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ + +# preparamos el etc.sources. +cat << FIN > ${OGFSMOUNT}/etc/apt/sources.list +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted +## Major bug fix updates produced after the final release of the +## distribution. +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team. Also, please note that software in universe WILL NOT receive any +## review or updates from the Ubuntu security team. +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION universe +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION universe +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe + +## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu +## team, and may not be under a free licence. Please satisfy yourself as to +## your rights to use the software. Also, please note that software in +## multiverse WILL NOT receive any review or updates from the Ubuntu +## security team. +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse +deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse +deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse + +## Uncomment the following two lines to add software from the 'backports' +## repository. +## N.B. software from this repository may not have been tested as +## extensively as that contained in the main release, although it includes +## newer versions of some applications which may provide useful features. +## Also, please note that software in backports WILL NOT receive any review +## or updates from the Ubuntu security team. +# deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse +# deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse + +## Uncomment the following two lines to add software from Canonical's +## 'partner' repository. +## This software is not part of Ubuntu, but is offered by Canonical and the +## respective vendors as a service to Ubuntu users. +# deb http://archive.canonical.com/ubuntu $VERSION partner +# deb-src http://archive.canonical.com/ubuntu $VERSION partner + + +deb http://security.ubuntu.com/ubuntu $VERSION-security main restricted +deb-src http://security.ubuntu.com/ubuntu $VERSION-security main restricted +deb http://security.ubuntu.com/ubuntu $VERSION-security universe +deb-src http://security.ubuntu.com/ubuntu $VERSION-security universe +deb http://security.ubuntu.com/ubuntu $VERSION-security multiverse +deb-src http://security.ubuntu.com/ubuntu $VERSION-security multiverse + + +deb http://archive.ubuntu.com/ubuntu $VERSION main +deb http://free.nchc.org.tw/drbl-core drbl stable +deb http://free.nchc.org.tw/ubuntu $VERSION-security main restricted universe multiverse +deb http://ppa.launchpad.net/freenx-team/ubuntu/ $VERSION main +deb http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main +deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main +FIN + +#TODO: fichero etc/hosts +#TODO: fichero etc/resolv.conf +echo "2ndFSHclient" > ${OGFSMOUNT}/etc/hostname +#TODO: introducir mas consoluas para el acceso como root. +echo "pts/0" >> ${OGFSMOUNT}/etc/securetty +echo "pts/1" >> ${OGFSMOUNT}/etc/securetty +echo "pts/2" >> ${OGFSMOUNT}/etc/securetty +echo "pts/3" >> ${OGFSMOUNT}/etc/securetty + +# copiamos algunas cosas del nfsexport +echo "Linking fonts for browser1 $OGLIB" +mkdir -p $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ +cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts + +echo "Linking fonts for browser2 $OGLIB" +mkdir -p $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/ +cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts + +echo "Coping pci.ids" +cp -pr $OGLIB/pci.ids $OGFSMOUNT/etc + +# Guión de ejecución y personalización final. +cat << FIN > $RUNME +#!/bin/bash +################################################################ +##################### SOFTWARE ##################### +################################################################ +export LANGUAGE=C +export LC_ALL=C +export LANG=C + +dpkg-divert --local --rename --add /sbin/initctl +ln -s /bin/true /sbin/initctl + + +apt-get -y update + +# software system +apt-get -y --force-yes install linux-image-$RELEASE wget dialog man-db htop +# +# software to compile code +apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk +wget $OGMUSTCOMPILE +source /root/ToolsGNU.c +# +# sofware networking +apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 +ctorrent install +udpcast install +# +# software services +apt-get -y --force-yes install openssh-server bittornado trickle +# +# software disk and filesystem +apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted +apt-get -y --force-yes install dmraid dmsetup mdadm lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools +ntfs-3g install +# +# software cloning +apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools +wget -O partclone_0.2.8_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.8/partclone_0.2.8_i386.deb?use_mirror=ovh +gdebi -n partclone_0.2.8_i386.deb +mbuffer install +# +## software postconf +apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk +ms-sys install +# +# software compressor +apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop + +apt-get -y --force-yes remove busybox +apt-get -y --force-yes install busybox-static bash-static +# +#################################################################### +###################### Preparando el entorno ###################### +################################################################### +mkdir -p /var/lock +dpkg-reconfigure passwd +echo "root:$PASSROOT" | chpasswd +mv /etc/fstab /etc/fstab.original 2>/dev/null +mv /etc/mtab /etc/mtab.original 2>/dev/null +FIN + +chmod +x $RUNME + +#chroot hacia el punto de montaje. +ogFSHMount $SCRIPT +### Desmontamos y salimos. +ogFSHUnmount 2>/dev/null +ogFSHUnmount 2>/dev/null +ogFSHUnmount 2>/dev/null +} + + +###### Funciones para los clientes offline +function agregarOG { +cd $NEWROOT +mkdir -p opt/opengnsys +cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys +echo "agregando OG al newinitrd" +} + +function finalizarISO +{ + cd $ANTERIORPWD + mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz + if [ $LINUX ] ; then + mv $TMPINITRD/linux $DEST/linuxISO + fi +} + + +function CrearISO { +mkdir -p tmp/iso/isolinux +#cd tmp/iso/ +cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ +cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ +cp -prv /tmp/linux tmp/iso/isolinux/linuxISO +cp -prv /tmp/initrd.gz tmp/iso/isolinux/ +cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ + + +cat << FIN > tmp/iso/isolinux/isolinux.cfg +DEFAULT menu.c32 +PROMPT 0 +ALLOWOPTIONS 1 + +MENU TITLE FuTuR3 Live Collection + +LABEL gpxe +MENU LABEL gpxe +KERNEL /clonezilla/live/vmlinuz1 +APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia + + +#default 0 +#prompt 1 +#timeout 100 + +#display mensaje.txt + +LABEL 0 +MENU LABEL ogClient +KERNEL linuxISO +APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline + +LABEL 1 +MENU LABEL ogClient1 sin vga +KERNEL linuxISO +APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline + +LABEL 2 +MENU LABEL ogClient2 sin irqpoll +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline + +LABEL 3 +MENU LABEL ogClient3 acpi=off +KERNEL linuxISO +APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline + + +#LABEL ogclient +#KERNEL /ogclient/linuxISO +#APPEND initrd=/ogclient/initrdISO.img + +#KERNEL linuxISO +#APPEND initrd=initrdISO.img + +LABEL 4 +MENU LABEL local +localboot 0x80 +append - + + +label 5 +MENU LABEL Network boot via gPXE lkrn +KERNEL gpxe.lkrn + +label 5 +MENU LABEL Network boot via gPXE usb +KERNEL gpxe.usb + +label 5 +MENU LABEL Network boot via gPXE pxe +KERNEL gpxe.pxe + +label 5 +MENU LABEL Network boot via gPXE iso +KERNEL gpxe.iso +FIN +#### /tmp/iso# +mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso + +} + +function probarISO { +#/tmp/iso +qemu -m 256 -boot d -cdrom ogClient.iso +} + + + + diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog new file mode 100644 index 00000000..d93f0b42 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog @@ -0,0 +1,137 @@ +#/bin/sh + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + + #mount -t nfs -onolock,ro + nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + #mount -t nfs -o nolock + nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +. /scripts/functions +configure_networking +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + + +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro +cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +mount /opt/og2fs/bin /bin +mount /opt/og2fs/sbin /sbin +unset PATH +export PATH=/opt/og2fs/sbin +export PATH=/opt/og2fs/bin:$PATH +export PATH=/opt/og2fs/sbin:$PATH +export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin +} +mountroot diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume new file mode 100644 index 00000000..e4c89d1a --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume @@ -0,0 +1 @@ +RESUME=UUID=e8ea296e-815a-44d5-be24-b51d6b6fce4d diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks new file mode 100755 index 00000000..d495d156 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks @@ -0,0 +1,43 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash +copy_exec /usr/bin/unionfs-fuse + + + +# Insert OpenGnsys Engine +#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + + diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf new file mode 100644 index 00000000..754e2bea --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf @@ -0,0 +1,72 @@ +# +# initramfs.conf +# Configuration file for mkinitramfs(8). See initramfs.conf(5). +# + +# +# MODULES: [ most | netboot | dep | list ] +# +# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. +# +# dep - Try and guess which modules to load. +# +# netboot - Add the base modules, network modules, but skip block devices. +# +# list - Only include modules from the 'additional modules' list +# + +MODULES=most + +# +# BUSYBOX: [ y | n ] +# +# Use busybox if available. +# + +BUSYBOX=y + +# +# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] +# +# Amount of RAM to use for RAM-based compressed swap space. +# +# An empty value - compcache isn't used, or added to the initramfs at all. +# An integer and K (e.g. 65536 K) - use a number of kilobytes. +# An integer and M (e.g. 256 M) - use a number of megabytes. +# An integer and G (e.g. 1 G) - use a number of gigabytes. +# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. +# +# You can optionally install the compcache package to configure this setting +# via debconf and have userspace scripts to load and unload compcache. +# + +COMPCACHE_SIZE="" + +# +# NFS Section of the config. +# + +# +# BOOT: [ local | nfs ] +# +# local - Boot off of local media (harddrive, USB stick). +# +# nfs - Boot using an NFS drive as the root of the drive. +# + +BOOT=local + +# +# DEVICE: ... +# +# Specify the network interface, like eth0 +# + +DEVICE=eth0 + +# +# NFSROOT: [ auto | HOST:MOUNT ] +# + +NFSROOT=auto + diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules new file mode 100644 index 00000000..8bac1d4b --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules @@ -0,0 +1,14 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +vga16b +vesafb +fbcon + diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og new file mode 100755 index 00000000..12c39a59 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og @@ -0,0 +1,194 @@ +# OpenGnsys Local filesystem mounting -*- shell-script -*- + + +ogLinkBusybox () +{ +for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do + ln -f /bin/busybox /bin/$n +done +ln -f /bin/busybox /bin/sh +} + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + #mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + +unionmount() +{ +FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" +UNION_OPT="-o cow -o noinitgroups" +UPATH="/unionfs" +UBIN="unionfs-fuse" +mkdir -p /unionfs/host +mkdir -p /unionfs/union + dir=$1 + #echo "creando mkdir -p /unionfs/host/$dir" + mkdir -p /unionfs/host/$dir + #echo "montando mount --bind /$dir /unionfs/host/$dir " + mount --bind /$dir /unionfs/host/$dir + ##########echo "creando mkdir -p /unionfs/union/$dir" + mkdir -p /unionfs/union/$dir + host="/unionfs/host/${dir}=RW" + common="/opt/og2fs/${dir}=RO" + #####echo " ejecuantdo $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir " + $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir + + mount --bind /unionfs/union/$dir /$dir +} + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +. /scripts/functions +configure_networking + +# for the portmapper we need localhost +ifconfig lo 127.0.0.1 +/etc/init.d/portmap start + +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + + +mkdir -p /opt/og2fs +mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro + +#mount -t tmpfs -o size=8192 tmpfs /unionfs +for i in etc; do + unionmount $i +done +# root var lib bin sbin usr +cat /proc/mounts > /etc/mtab + +#cp -R /opt/og2fs/etc/* /etc/ # */ +mount /opt/og2fs/usr /usr +mount /opt/og2fs/lib /lib +mount /opt/og2fs/bin /bin +mount /opt/og2fs/sbin /sbin +#export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin +#chmod 777 /etc/rcog +##unset PATH +##export PATH=$PATH:/opt/og2fs/sbin +##export PATH=/opt/og2fs/bin:$PATH +##export PATH=/opt/og2fs/sbin:$PATH + + + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + run_scripts /scripts/og-bottom + [ "$quiet" != "y" ] && log_end_msg + + +#set -a +#trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 + +#/opt/opengnsys/etc/preinit/default.sh +echo "llamando a init desde scritps og" +exec init +} diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf new file mode 100644 index 00000000..3c27473b --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf @@ -0,0 +1,20 @@ +# +# Configuration file for update-initramfs(8) +# + +# +# update_initramfs [ yes | all | no ] +# +# Default is yes +# If set to all update-initramfs will update all initramfs +# If set to no disables any update to initramfs beside kernel upgrade + +update_initramfs=yes + +# +# backup_initramfs [ yes | no ] +# +# Default is no +# If set to no leaves no .bak backup files. + +backup_initramfs=no diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab new file mode 100644 index 00000000..03e0c06a --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab @@ -0,0 +1,14 @@ +# This is run first except when booting in single-user mode +# +#::sysinit:/opt/opengnsys/etc/preinit/default.sh +# /bin/sh invocations on selected ttys +# +# Start an "askfirst" shell on the console (whatever that may be) +#::askfirst:/bin/sh +# Start an "askfirst" shell on /dev/tty2-4 +#tty1::respawn:/sbin/getty 38400 tty1 +tty1::respawn:/opt/opengnsys/etc/preinit/default.sh +tty2::respawn:/sbin/getty 38400 tty2 +tty3::respawn:/sbin/getty 38400 tty3 +tty4::respawn:/sbin/getty 38400 tty4 +tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf new file mode 100644 index 00000000..8b047e4e --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf @@ -0,0 +1,30 @@ +# Framebuffer drivers are generally buggy and poorly-supported, and cause +# suspend failures, kernel panics and general mayhem. For this reason we +# never load them automatically. +blacklist aty128fb +blacklist atyfb +#blacklist radeonfb +blacklist cirrusfb +blacklist cyber2000fb +blacklist cyblafb +blacklist gx1fb +blacklist hgafb +blacklist i810fb +blacklist intelfb +blacklist kyrofb +blacklist lxfb +blacklist matroxfb_base +blacklist neofb +blacklist nvidiafb +blacklist pm2fb +blacklist rivafb +blacklist s1d13xxxfb +blacklist savagefb +blacklist sisfb +blacklist sstfb +blacklist tdfxfb +blacklist tridentfb +#blacklist vesafb +blacklist vfb +blacklist viafb +blacklist vt8623fb diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox new file mode 100755 index 00000000..da2dc637 Binary files /dev/null and b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox differ diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox new file mode 100755 index 00000000..d04890f6 Binary files /dev/null and b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox differ diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root new file mode 100755 index 00000000..aecb5e32 Binary files /dev/null and b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root differ diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions new file mode 100644 index 00000000..2610f79a --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions @@ -0,0 +1,461 @@ +# -*- shell-script -*- + +catenate_cpiogz() { + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 + return + fi + + cat "${1}" >>"${__TMPCPIOGZ}" +} + +force_load() +{ + manual_add_modules ${@} + echo "${@}" >>"${DESTDIR}/conf/modules" +} + +# Takes a file containing a list of modules to be added as an +# argument, figures out dependancies, and adds them. +# +# Input file syntax: +# +# # comment +# modprobe_module_name [args ...] +# [...] +# +add_modules_from_file() +{ + # Sanity check + if [ ! -e "${1}" ]; then + echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 + return + fi + + sed -e '/^#/d' ${1} | while read module rest; do + force_load "${module}" "${rest}" + done +} + +# Is this module available? +have_module() +{ + modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" >/dev/null 2>&1 +} + +# Add dependent modules + eventual firmware +manual_add_modules() +{ + local mam_x firmwares firmware + + for mam_x in $(modprobe --set-version="${version}" --ignore-install \ + --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do + # Prune duplicates + if [ -e "${DESTDIR}/${mam_x}" ]; then + continue + fi + + mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" + ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" + if [ "${verbose}" = "y" ]; then + echo "Adding module ${mam_x}" + fi + + # Add firmware files if necessary + firmwares=$(modinfo -F firmware "${mam_x}") + if [ -z "${firmwares}" ]; then + continue + fi + for firmware in $firmwares; do + if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ + || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then + continue + fi + + # Only print warning for missing fw of loaded module + # or forced loaded module + if [ ! -e "/lib/firmware/${firmware}" ] \ + && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then + if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ + /proc/modules \ + || grep -q "^$(basename "${mam_x}" .ko)" \ + "${CONFDIR}/modules"; then + echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 + fi + continue + fi + + if [ -e "/lib/firmware/${version}/${firmware}" ]; then + copy_exec "/lib/firmware/${version}/${firmware}" + else + copy_exec "/lib/firmware/${firmware}" + fi + if [ "${verbose}" = "y" ]; then + echo "Adding firmware ${firmware}" + fi + done + done +} + +# $1 is the source path (e.g. /usr/bin/time) +# $2 is the relative destination (e.g. /usr or /usr/time) +# +# The destination is interpreted in the same way "cp" would, meaning +# (assuming /bin is a directory): +# +# "copy_exec /usr/bin/time /bin" -> /bin/time +# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime +# +# If $2 is left out, the same destination path as for the source arg will +# be used and directories will be created as needed, so: +# +# "copy_exec /usr/bin/time" -> /usr/bin/time +# +copy_exec() { + local source target destination final_destination x nonoptlib + local libname dirname + + source="${1}" + if [ -n "${2}" ]; then + target="${2}" + else + if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then + mkdir -p "${DESTDIR}/$(dirname "${1}")" + fi + target="${1}" + fi + + if [ -d "${DESTDIR}/${target}" ]; then + destination="${target}/$(basename "${source}")" + else + destination="${target}" + fi + final_destination="${DESTDIR}/${destination}" + + if [ -L "$final_destination" ]; then + if [ $(readlink "${final_destination}") != "${source}" ]; then + echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 + return + fi + else + ln -s ${source} ${DESTDIR}/${destination} + if [ "${verbose}" = "y" ]; then + echo "Adding binary ${source}" + fi + fi + + # Copy the dependant libraries + for x in $(ldd ${source} 2>/dev/null | sed -e ' + /\//!d; + /linux-gate/d; + /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; + s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do + + # Try to use non-optimised libraries where possible. + # We assume that all HWCAP libraries will be in tls, + # sse2, vfp or neon + nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') + + if [ -e "${nonoptlib}" ]; then + x="${nonoptlib}" + fi + + libname=$(basename "${x}") + dirname=$(dirname "${x}") + + mkdir -p "${DESTDIR}/${dirname}" + if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then + ln -s "${x}" "${DESTDIR}/${dirname}" + if [ "${verbose}" = "y" ]; then + echo "Adding library ${x}" + fi + fi + done +} + +# Copy entire subtrees to the initramfs +copy_modules_dir() +{ + local x_mod + + if ! [ -d "${MODULESDIR}/${1}" ]; then + return; + fi + if [ "${verbose}" = "y" ]; then + echo "Copying module directory ${1}" + fi + for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do + manual_add_modules $(basename ${x_mod} .ko) + done +} + +# walk /sys for relevant modules +sys_walk_mod_add() +{ + local driver_path module + device_path="$1" + + while [ "${device_path}" != "/sys" ]; do + driver_path="$(readlink -f ${device_path}/driver)" + if [ -e "$driver_path" ]; then + module="$(basename $(readlink -f $driver_path))" + if [ -n "${module}" ]; then + force_load "${module}" + fi + fi + device_path="$(dirname ${device_path})" + done +} + +# walk /sys for relevant modalias +sys_walk_modalias() +{ + local device_path modalias + + device_path="$(dirname "${1}")" + device_path="$(dirname "${device_path}")" + if [ -e "${device_path}/modalias" ]; then + modalias=$(cat "${device_path}/modalias") + fi + + if [ -n "${modalias}" ]; then + force_load "${modalias}" + fi +} + +# find and only copy root relevant modules +dep_add_modules() +{ + local block minor root FSTYPE root_dev_path x + + # findout root block device + fstype + eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" + if [ "${root}" = "/dev/root" ] ; then + root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null + fi + root="$(readlink -f ${root})" + + # find out real rootfs on auto type + if [ "${FSTYPE}" = "auto" ]; then + eval "$(/usr/lib/klibc/bin/fstype ${root})" + fi + + # check that fstype rootfs recognition + if [ "${FSTYPE}" = "unknown" ]; then + echo "mkinitramfs: unknown fstype on root ${root}" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report bug on initramfs-tools" + exit 1 + fi + + # Add rootfs + manual_add_modules "${FSTYPE}" + + # lvm luks root + if [ "${root#/dev/mapper/}" != "${root}" ]; then + minor=$((0x$(stat --format "%T" ${root}) % 256)) + block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) + if [ "${block#dm-}" != "${block}" ]; then + block=$(ls -1 /sys/block/${block}/slaves | head -n 1) + fi + block=${block%%[0-9]*} + # md root new naming scheme /dev/md/X + elif [ "${root#/dev/md/}" != "${root}" ]; then + root=${root#/dev/md/} + block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # md root /dev/mdX + elif [ "${root#/dev/md}" != "${root}" ]; then + root=${root#/dev/} + block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ + /proc/mdstat) + # mmc always uses numbering in the devicename (mmcblk[0-9]) + elif [ "${root#/dev/mmc}" != "${root}" ]; then + block=${root#/dev/} + block=${block%%p[0-9]*} + # classical root device + else + block=${root#/dev/} + block=${block%%[0-9]*} + fi + + # Error out if /sys lack block dev + if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then + echo "mkinitramfs: missing ${block} root ${root} /sys entry" + echo "mkinitramfs: workaround is MODULES=most" + echo "mkinitramfs: Error please report the bug" + exit 1 + fi + + # sys walk ATA + root_dev_path=$(readlink -f /sys/block/${block}/device) + sys_walk_mod_add ${root_dev_path} + + # catch old-style IDE + if [ -e /sys/bus/ide/devices/ ]; then + sys_walk_modalias ${root_dev_path} + manual_add_modules ide-disk + manual_add_modules ide-cd + fi + + if [ -e /sys/bus/scsi/devices/ ]; then + manual_add_modules sd_mod + fi + + if [ -e /sys/bus/i2o/devices/ ]; then + force_load i2o_block + force_load i2o_config + fi + + if [ -e /sys/bus/ps3_system_bus/ ]; then + for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do + manual_add_modules "${x}" + done + fi + + if [ -e /sys/bus/vio/ ]; then + for x in sunvnet sunvdc; do + manual_add_modules "${x}" + done + fi +} + + +# The modules "most" classes added per default to the initramfs +auto_add_modules() +{ + case "$1" in + base) + for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ + hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ + hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ + hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ + hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ + ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ + virtio_pci vfat nls_cp437 nls_iso8859-1; do + manual_add_modules "${x}" + done + ;; + net) + for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ + cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ + ep93xx_eth eql fealnx famachi forcedeth gelic_net \ + hp100 igb ipg mace mv643xx_eth myri10ge \ + natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ + r8169 s2io sis900 skge sky2 slhc smc911x starfire \ + sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ + de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ + typhon via-rhine via-velocity virtio_net yellowfin; do + manual_add_modules "${x}" + done + ;; + ide) + copy_modules_dir kernel/drivers/ide + ;; + scsi) + copy_modules_dir kernel/drivers/scsi + for x in mptfc mptsas mptscsih mptspi; do + manual_add_modules "${x}" + done + ;; + ata) + copy_modules_dir kernel/drivers/ata + ;; + block) + copy_modules_dir kernel/drivers/block + copy_modules_dir kernel/drivers/usb/storage + ;; + # FIXME: can be removed after Lenny release + ieee1394) + for x in ohci1394 sbp2; do + manual_add_modules "${x}" + done + ;; + firewire) + for x in firewire-ohci firewire-sbp2; do + manual_add_modules "${x}" + done + ;; + i2o) + for x in i2o_block; do + manual_add_modules "${x}" + done + ;; + dasd) + for x in dasd_eckd_mod dasd_fba_mod; do + manual_add_modules "${x}" + done + ;; + *) + auto_add_modules base + auto_add_modules net + auto_add_modules ide + auto_add_modules scsi + auto_add_modules block + auto_add_modules ata + auto_add_modules i2o + auto_add_modules dasd + auto_add_modules ieee1394 + auto_add_modules firewire + ;; + esac +} + +usage() +{ + cat >&2 << EOF + +Usage: ${0} [OPTION]... <-o outfile> [version] + +Options: + -d confdir Specify an alternative configuration directory. + -k Keep temporary directory used to make the image. + -o outfile Write to outfile. + -r root Override ROOT setting in mkinitrd.conf. + +See mkinitramfs(8) for further details. +EOF + exit 1 + +} + +# minimal supported kernel version +check_minkver() +{ + local curversion initdir DPKG_ARCH minversion cm_x tmp + + curversion="${1}" + initdir="${2}" + if [ -z "${initdir}" ]; then + DPKG_ARCH=$(dpkg --print-architecture) + case ${DPKG_ARCH} in + ia64|hppa) + minversion="2.6.15" + ;; + *) + minversion="2.6.12" + ;; + esac + if dpkg --compare-versions "${curversion}" lt "${minversion}"; then + echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + return 0 + fi + set_initlist + for cm_x in ${initlist}; do + # sed: keep last line starting with MINKVER=, + # remove MINKVER= and trailing space + minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") + if [ -z "${tmp}" ]; then + continue + elif dpkg --compare-versions "${curversion}" lt "${minver}"; then + echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 + echo "W: not generating requested initramfs for kernel ${curversion}" >&2 + exit 2 + fi + done +} diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache new file mode 100755 index 00000000..37fdd22e --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache @@ -0,0 +1,95 @@ +#!/bin/sh +set -e + +if [ "$1" = prereqs ]; then + exit 0 +fi + +. /usr/share/initramfs-tools/hook-functions + +number= +suffix= +eval $(printf "%s" "$COMPCACHE_SIZE" | \ + sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') + +if [ -z "$number" ] || [ -z "$suffix" ]; then + exit 0 +fi + +if have_module ramzswap; then + name=ramzswap + manual_add_modules ramzswap +elif have_module compcache; then + name=compcache + manual_add_modules compcache +else + exit 0 +fi + +copy_exec /sbin/swapon + +mkdir -p "$DESTDIR"/etc/udev/rules.d +cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." + +# Note that this only becomes /dev on the real filesystem if udev's scripts +# are used; which they will be, but it's worth pointing out +if ! mount -t devtmpfs -o mode=0755 none /dev; then + mount -t tmpfs -o mode=0755 none /dev + mknod -m 0600 /dev/console c 5 1 + mknod /dev/null c 1 3 +fi +mkdir /dev/pts +mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true +> /dev/.initramfs-tools +mkdir /dev/.initramfs + +# Export the dpkg architecture +export DPKG_ARCH= +. /conf/arch.conf + +# Set modprobe env +export MODPROBE_OPTIONS="-qb" + +# Export relevant variables +export ROOT= +export ROOTDELAY= +export ROOTFLAGS= +export ROOTFSTYPE= +export IPOPTS= +export HWADDR= +export break= +export init=/sbin/init +export quiet=n +export readonly=y +export rootmnt=/root +export debug= +export panic= +export blacklist= +export resume_offset= + +# Bring in the main config +. /conf/initramfs.conf +for conf in conf/conf.d/*; do + [ -f ${conf} ] && . ${conf} +done +. /scripts/functions + +# Parse command line options +for x in $(cat /proc/cmdline); do + case $x in + init=*) + init=${x#init=} + ;; + root=*) + ROOT=${x#root=} + case $ROOT in + LABEL=*) + ROOT="${ROOT#LABEL=}" + + # support / in LABEL= paths (escape to \x2f) + case "${ROOT}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" + else + if [ "${ROOT}" != "${ROOT#/}" ]; then + ROOT="\x2f${ROOT#/}" + fi + if [ "${ROOT}" != "${ROOT%/}" ]; then + ROOT="${ROOT%/}\x2f" + fi + IFS='/' + newroot= + for s in $ROOT; do + if [ -z "${newroot}" ]; then + newroot="${s}" + else + newroot="${newroot}\\x2f${s}" + fi + done + unset IFS + ROOT="${newroot}" + fi + esac + ROOT="/dev/disk/by-label/${ROOT}" + ;; + UUID=*) + ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" + ;; + /dev/nfs) + [ -z "${BOOT}" ] && BOOT=nfs + ;; + esac + ;; + rootflags=*) + ROOTFLAGS="-o ${x#rootflags=}" + ;; + rootfstype=*) + ROOTFSTYPE="${x#rootfstype=}" + ;; + rootdelay=*) + ROOTDELAY="${x#rootdelay=}" + case ${ROOTDELAY} in + *[![:digit:].]*) + ROOTDELAY= + ;; + esac + ;; + resumedelay=*) + RESUMEDELAY="${x#resumedelay=}" + ;; + loop=*) + LOOP="${x#loop=}" + ;; + loopflags=*) + LOOPFLAGS="-o ${x#loopflags=}" + ;; + loopfstype=*) + LOOPFSTYPE="${x#loopfstype=}" + ;; + cryptopts=*) + cryptopts="${x#cryptopts=}" + ;; + nfsroot=*) + NFSROOT="${x#nfsroot=}" + ;; + netboot=*) + NETBOOT="${x#netboot=}" + ;; + ip=*) + IPOPTS="${x#ip=}" + ;; + hwaddr=*) + HWADDR="${x#hwaddr=}" + ;; + boot=*) + BOOT=${x#boot=} + ;; + resume=*) + RESUME="${x#resume=}" + ;; + resume_offset=*) + resume_offset="${x#resume_offset=}" + ;; + noresume) + noresume=y + ;; + panic=*) + panic="${x#panic=}" + case ${panic} in + *[![:digit:].]*) + panic= + ;; + esac + ;; + quiet) + quiet=y + ;; + ro) + readonly=y + ;; + rw) + readonly=n + ;; + debug) + debug=y + quiet=n + exec >/dev/.initramfs/initramfs.debug 2>&1 + set -x + ;; + debug=*) + debug=y + quiet=n + set -x + ;; + break=*) + break=${x#break=} + ;; + break) + break=premount + ;; + blacklist=*) + blacklist=${x#blacklist=} + ;; + netconsole=*) + netconsole=${x#netconsole=} + ;; + esac +done + +if [ -z "${noresume}" ]; then + export resume=${RESUME} +else + export noresume +fi + +[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} + +maybe_break top + +# export BOOT variable value for compcache, +# so we know if we run from casper +export BOOT + +# Don't do log messages here to avoid confusing usplash +run_scripts /scripts/init-top + +maybe_break modules +log_begin_msg "Loading essential drivers..." +load_modules +log_end_msg + +maybe_break premount +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" +run_scripts /scripts/init-premount +[ "$quiet" != "y" ] && log_end_msg + +maybe_break mount +log_begin_msg "Mounting root file system..." +. /scripts/${BOOT} +parse_numeric ${ROOT} +mountroot +log_end_msg + +maybe_break bottom +[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" +run_scripts /scripts/init-bottom +[ "$quiet" != "y" ] && log_end_msg + +# Move virtual filesystems over to the real filesystem +mount -n -o move /sys ${rootmnt}/sys +mount -n -o move /proc ${rootmnt}/proc + +# Check init bootarg +if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then + echo "Target filesystem doesn't have ${init}." + init= +fi + +# Search for valid init +if [ -z "${init}" ] ; then + for init in /sbin/init /etc/init /bin/init /bin/sh; do + if [ ! -x "${rootmnt}${init}" ]; then + continue + fi + break + done +fi + +# No init on rootmount +if [ ! -x "${rootmnt}${init}" ]; then + panic "No init found. Try passing init= bootarg." +fi + +# Confuses /etc/init.d/rc +if [ -n ${debug} ]; then + unset debug +fi + +# Chain to real filesystem +maybe_break init +exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 +panic "Could not execute run-init." diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules new file mode 100644 index 00000000..9aa46468 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules @@ -0,0 +1,10 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions new file mode 100644 index 00000000..3bea0c97 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions @@ -0,0 +1,420 @@ +# -*- shell-script -*- + +_log_msg() +{ + if [ "$quiet" = "y" ]; then return; fi + echo "$@" +} + +log_success_msg() +{ + _log_msg "Success: $@" +} + +log_failure_msg() +{ + _log_msg "Failure: $@" +} + +log_warning_msg() +{ + _log_msg "Warning: $@" +} + +log_begin_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TEXT $@" + fi + _log_msg "Begin: $@ ..." +} + +log_end_msg() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "SUCCESS ok" + fi + _log_msg "Done." +} + +# Add failure hook +add_mountroot_fail_hook() +{ + mkdir -p /tmp/mountroot-fail-hooks.d + ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" +} + +# Run failure hooks. +# When a failure hook exits "1", it has not done anything to correct the +# system. Exiting "0" means that something has been attempted to resolve +# the lack of a root filesystem. +# Hooks are run in lexigraphical order, and are responsible for removing +# themselves if they should not re-run in a later cycle. When one exits +# "0", the stack is stopped, so the caller can return to the main rootfs +# wait loop. +try_failure_hooks() +{ + local hook + + # Disable usplash so text from hooks can be seen + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + for hook in /tmp/mountroot-fail-hooks.d/*; do + if [ -x ${hook} ] && ${hook} mountfail; then + return 0 + fi + done + return 1 +} + +panic() +{ + if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "QUIT" + fi + chvt 1 + + # Disallow console access + if [ -n "${panic}" ]; then + sleep ${panic} + reboot + fi + + modprobe i8042 + modprobe atkbd + + run_scripts /scripts/panic + + echo $@ + PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 +} + +maybe_break() +{ + if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then + panic "Spawning shell within the initramfs" + fi +} + +render() +{ + eval "echo -n \${$@}" +} + +set_initlist() +{ + unset initlist + for si_x in ${initdir}/*; do + # skip empty dirs without warning + [ "${si_x}" = "${initdir}/*" ] && return + + # only allow variable name chars + case ${si_x#${initdir}/} in + *[![:alnum:]_]*) + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not alphanumeric or '_' file" + continue + ;; + esac + + # skip non executable scripts + if [ ! -x ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: not executable" + continue + fi + + # skip directories + if [ -d ${si_x} ]; then + [ "${verbose}" = "y" ] \ + && echo "$si_x ignored: a directory" + continue + fi + + initlist="${initlist} ${si_x#${initdir}/}" + done +} + +reduce_satisfied() +{ + deplist="$(render array_${1})" + unset tmpdeplist + for rs_y in ${deplist}; do + # check if there are alternatives + case ${rs_y} in + *\|*) + OLD_IFS="$IFS" + IFS="|" + for rs_z in ${rs_y}; do + IFS="$OLD_IFS" + # only allow variable name chars + case ${rs_z} in + *[![:alnum:]_]*) + IFS="|" + continue + ;; + esac + # skip non executable scripts + if [ ! -x ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + # skip directories + if [ -d ${initdir}/${rs_z} ]; then + IFS="|" + continue + fi + tmpdeplist="${tmpdeplist} ${rs_z}" + break + done + IFS="$OLD_IFS" + ;; + *) + case ${rs_y} in + *[![:alnum:]_]*) + continue + ;; + esac + if [ ! -x ${initdir}/${rs_y} ]; then + continue + fi + if [ -d ${initdir}/${rs_y} ]; then + continue + fi + tmpdeplist="${tmpdeplist} ${rs_y}" + ;; + esac + done + deplist=${tmpdeplist} + for rs_x in ${runlist}; do + pop_list_item ${rs_x} ${deplist} + deplist=${tmppop} + done + eval array_${1}=\"${deplist}\" +} + +get_prereqs() +{ + set_initlist + for gp_x in ${initlist}; do + tmp=$(${initdir}/${gp_x} prereqs) + eval array_${gp_x}=\"${tmp}\" + done +} + +count_unsatisfied() +{ + set -- ${@} + return ${#} +} + +# Removes $1 from initlist +pop_list_item() +{ + item=${1} + shift + set -- ${@} + unset tmppop + # Iterate + for pop in ${@}; do + if [ ${pop} = ${item} ]; then + continue + fi + tmppop="${tmppop} ${pop}" + done + +} + +# This function generates the runlist, so we clear it first. +reduce_prereqs() +{ + unset runlist + set -- ${initlist} + i=$# + # Loop until there's no more in the queue to loop through + while [ ${i} -ne 0 ]; do + oldi=${i} + for rp_x in ${initlist}; do + reduce_satisfied ${rp_x} + count_unsatisfied $(render array_${rp_x}) + cnt=${?} + if [ ${cnt} -eq 0 ]; then + runlist="${runlist} ${rp_x}" + pop_list_item ${rp_x} ${initlist} + initlist=${tmppop} + i=$((${i} - 1)) + fi + done + if [ ${i} -eq ${oldi} ]; then + panic "PANIC: Circular dependancy. Exiting." + fi + done +} + +get_prereq_pairs() +{ + set_initlist + for gp_x in ${initlist}; do + echo ${gp_x} ${gp_x} + prereqs=$(${initdir}/${gp_x} prereqs) + for prereq in ${prereqs}; do + echo ${prereq} ${gp_x} + done + done +} + +call_scripts() +{ + for cs_x in ${runlist}; do + [ -f ${initdir}/${cs_x} ] || continue + if [ x"$1" = "xoptional" ]; then + option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") + [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue + fi + + # mkinitramfs verbose output + if [ "${verbose}" = "y" ]; then + echo "Calling hook ${cs_x}" + fi + ${initdir}/${cs_x} + # allow boot scripts to modify exported boot paramaters + if [ -e /conf/param.conf ]; then + . /conf/param.conf + fi + done +} + +run_scripts() +{ + initdir=${1} + [ ! -d ${initdir} ] && return + + if [ -f ${initdir}/ORDER ]; then + . ${initdir}/ORDER + elif [ -x /usr/bin/tsort ]; then + runlist=$(get_prereq_pairs | tsort) + call_scripts $2 + else + get_prereqs + reduce_prereqs + call_scripts $2 + fi +} + +cache_run_scripts() +{ + DESTDIR=${1} + scriptdir=${2} + initdir=${DESTDIR}${scriptdir} + [ ! -d ${initdir} ] && return + + runlist=$(get_prereq_pairs | tsort) + for crs_x in ${runlist}; do + [ -f ${initdir}/${crs_x} ] || continue + echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER + echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER + done +} + +# Load custom modules first +load_modules() +{ + if [ -e /conf/modules ]; then + cat /conf/modules | while read m; do + # Skip empty lines + if [ -z "$m" ]; then + continue + fi + # Skip comments - d?ash removes whitespace prefix + com=$(printf "%.1s" "${m}") + if [ "$com" = "#" ]; then + continue + fi + modprobe $m + done + fi +} + +# lilo compatibility +parse_numeric() { + case $1 in + "") + return + ;; + /*) + return + ;; + *:*) + minor=${1#*:} + major=${1%:*} + ;; + *) + value=$(( 0x${1} )) + minor=$(( ${value} % 256 )) + major=$(( ${value} / 256 )) + ;; + esac + + mknod -m 600 /dev/root b ${major} ${minor} + ROOT=/dev/root +} + +configure_networking() +{ + # networking already configured thus bail out + [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 + + if [ "${HWADDR}" ]; then + # select interface by MAC address + HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" + local iface + for iface in /sys/class/net/*; do + [ -f "$iface/address" ] || continue + if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then + DEVICE="${iface#/sys/class/net/}" + fi + done + fi + + # support ip options see linux sources + # Documentation/filesystems/nfsroot.txt + case ${IPOPTS} in + none|off) + # Do nothing + ;; + ""|on|any) + # Bring up device + ipconfig -t 60 ${DEVICE} + ;; + dhcp|bootp|rarp|both) + ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} + ;; + *) + ipconfig -t 60 -d $IPOPTS + + # grab device entry from ip option + NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} + if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then + NEW_DEVICE=${NEW_DEVICE%:*} + else + # wrong parse, possibly only a partial string + NEW_DEVICE= + fi + if [ -n "${NEW_DEVICE}" ]; then + DEVICE="${NEW_DEVICE}" + fi + ;; + esac + + # source ipconfig output + if [ -n "${DEVICE}" ]; then + # source specific bootdevice + . /tmp/net-${DEVICE}.conf + else + # source any interface as not exaclty specified + . /tmp/net-*.conf + fi +} diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth new file mode 100755 index 00000000..8b1e7c8a --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth @@ -0,0 +1,21 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] +then + /bin/plymouth update-root-fs --new-root-dir=${rootmnt} +fi diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev new file mode 100755 index 00000000..f9d2ce9d --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev @@ -0,0 +1,24 @@ +#!/bin/sh -e +# initramfs init-bottom script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Stop udevd, we'll miss a few events while we run init, but we catch up +pkill udevd + +# Move /dev to the real filesystem +mount -n -o move /dev ${rootmnt}/dev diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 new file mode 100755 index 00000000..e5bc78f1 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 @@ -0,0 +1,41 @@ +#!/bin/sh + +# init-premount script for lvm2. + +PREREQS="udev mdadm" +prereqs() +{ + echo $PREREQS +} + +mountroot_fail() +{ + if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then + cat </dev/null; then + modprobe ata_generic all_generic_ide=1 +fi diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist new file mode 100755 index 00000000..5e6b3c1e --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist @@ -0,0 +1,34 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +# blacklist vga16fb when vga= or video= given +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*|video=*) + echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs + ;; + esac +done + +# sanity check +[ -z "${blacklist}" ] && exit 0 + +# write blacklist to modprobe.d +IFS=',' +for b in ${blacklist}; do + echo "blacklist $b" >> /etc/modprobe.d/initramfs +done diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup new file mode 100755 index 00000000..df767bb4 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup @@ -0,0 +1,83 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +OPTION=FRAMEBUFFER +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer new file mode 100755 index 00000000..bb59aadf --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer @@ -0,0 +1,104 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + + +# The options part of the kernel "video=" argument (i.e. everyting +# after "video=:") has very inconsistent rules. +# +# Generally the following applies: +# 1) options are comma-separated +# 2) options can be in either of these three forms: +# =, :, . +# 3) the "mode" option has the form x[M][R][-][@][i][m] +# and may or may not start with "mode=" +# +# When the options are used with modules, they need to be space-separated +# and the following conversions are needed: +# : -> = +# -> =1 +# -> mode= +parse_video_opts() +{ + local OPTS="$1" + local IFS="," + + # Must be a line like video=:,[opt2]... + if [ "${OPTS}" = "${OPTS%%:*}" ]; then + return + fi + OPTS="${OPTS#*:}" + for opt in ${OPTS}; do + # Already in the "=" form + if [ "${opt}" != "${opt#*=}" ]; then + echo -n "$opt " + # In the ":" form + elif [ "${opt}" != "${opt#*:}" ]; then + echo -n "${opt%:*}=${opt#*:} " + # Presumably a modevalue without the "mode=" prefix + elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then + echo -n "mode=$opt " + # Presumably a boolean + else + echo -n "${opt}=1 " + fi + done +} + +FB="" +OPTS="" + +for x in $(cat /proc/cmdline); do + case ${x} in + vga=*) + FB="vesafb"; + OPTS=""; + ;; + video=*) + FB=${x#*=} + FB="${FB%%:*}" + OPTS="$(parse_video_opts "${x}")" + esac +done + +# Map command line name to module name +case ${FB} in +matroxfb) + FB=matroxfb_base + ;; +esac + +if [ -n "${FB}" ]; then + # Some framebuffer devices need character devices :-/ + udevadm settle + MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} + # Wait for the framebuffer devices to be ready + udevadm settle +else + # If we have no graphics devices yet, wait for udev to settle + [ -d /sys/class/graphics/fbcon ] || udevadm settle + [ -d /sys/class/graphics/fb0 ] || udevadm settle + [ -d /sys/class/drm/card0 ] || udevadm settle +fi + +# Force fb mode via /sys interface +for x in $(cat /proc/cmdline); do + case ${x} in + fbmode=*) + MODE=${x#*=} + echo "$MODE" > /sys/class/graphics/fb0/mode + ;; + esac +done diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap new file mode 100755 index 00000000..cb67aa96 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap @@ -0,0 +1,28 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth new file mode 100755 index 00000000..813b6b4c --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth @@ -0,0 +1,20 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="framebuffer console_setup brltty" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +printf '\033[?25l' > /dev/tty7 +/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid +/bin/plymouth show-splash diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev new file mode 100755 index 00000000..cd2fa564 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev @@ -0,0 +1,30 @@ +#!/bin/sh -e +# initramfs init-top script for udev + +PREREQ="all_generic_ide blacklist" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# It's all over netlink now +echo "" > /proc/sys/kernel/hotplug + +# Start the udev daemon to process events +/sbin/udevd --daemon --resolve-names=never + +# Iterate sysfs and fire off everything; if we include a rule for it then +# it'll get handled; otherwise it'll get handled later when we do this again +# in the main boot sequence. +( /sbin/udevadm trigger --subsystem-match=block; \ + /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local new file mode 100644 index 00000000..865572b5 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local @@ -0,0 +1,131 @@ +# Local filesystem mounting -*- shell-script -*- + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" + run_scripts /scripts/local-top + [ "$quiet" != "y" ] && log_end_msg + + while [ -z "${FSTYPE}" ]; do + FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) + + # Run failure hooks, hoping one of them can fix up the system + # and we can restart the wait loop. If they all fail, abort + # and move on to the panic handler and shell. + if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then + break + fi + done + + # We've given up, but we'll let the user fix matters if they can + while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do + # give hint about renamed root + case "${ROOT}" in + /dev/hd*) + suffix="${ROOT#/dev/hd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/sd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" + fi + ;; + /dev/sd*) + suffix="${ROOT#/dev/sd}" + major="${suffix%[[:digit:]]}" + major="${major%[[:digit:]]}" + if [ -d "/sys/block/hd${major}" ]; then + echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" + fi + ;; + esac + echo "Gave up waiting for root device. Common problems:" + echo " - Boot args (cat /proc/cmdline)" + echo " - Check rootdelay= (did the system wait long enough?)" + echo " - Check root= (did the system wait for the right device?)" + echo " - Missing modules (cat /proc/modules; ls /dev)" + panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" + done + + # Get the root filesystem type if not set + if [ -z "${ROOTFSTYPE}" ]; then + [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") + ROOTFSTYPE="${FSTYPE}" + else + FSTYPE="${ROOTFSTYPE}" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" + run_scripts /scripts/local-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ] && \ + [ -z "$LOOP" ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} + + # FIXME This has no error checking + # Mount root + mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} + mountroot_status="$?" + if [ "$LOOP" ]; then + if [ "$mountroot_status" != 0 ]; then + if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then + panic " +Could not mount the partition ${ROOT}. +This could also happen if the file system is not clean because of an operating +system crash, an interrupted boot process, an improper shutdown, or unplugging +of a removable device without first unmounting or ejecting it. To fix this, +simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then +gracefully shut down and reboot back into Windows. After this you should be +able to reboot again and resume the installation. +(filesystem = ${FSTYPE}, error code = $mountroot_status) +" + fi + fi + + mkdir -p /host + mount -o move ${rootmnt} /host + + while [ ! -e "/host/${LOOP#/}" ]; do + panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" + done + + # Get the loop filesystem type if not set + if [ -z "${LOOPFSTYPE}" ]; then + eval $(fstype < "/host/${LOOP#/}") + else + FSTYPE="${LOOPFSTYPE}" + fi + if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then + FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") + [ -z "$FSTYPE" ] && FSTYPE="unknown" + fi + + if [ ${readonly} = y ]; then + roflag=-r + else + roflag=-w + fi + + # FIXME This has no error checking + modprobe loop + modprobe ${FSTYPE} + + # FIXME This has no error checking + mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} + + if [ -d ${rootmnt}/host ]; then + mount -o move /host ${rootmnt}/host + fi + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" + run_scripts /scripts/local-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g new file mode 100755 index 00000000..335ef95e --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g @@ -0,0 +1,16 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + mkdir -p /dev/.initramfs/varrun + pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit + pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit +fi + +exit 0 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc new file mode 100755 index 00000000..c9fbc369 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc @@ -0,0 +1,64 @@ +#!/bin/sh -e +# initramfs local-premount script for fixrtc + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +# use the fixrtc cmdline option in your bootloader to +# automatically set the hardware clock to the date of +# the last mount of your root filesystem to avoid fsck +# to get confused by the superblock being in the future + +BROKEN_CLOCK="" +ROOTDEV="" + +for x in $(cat /proc/cmdline); do + case ${x} in + root=*) + value=${x#*=} + + # Find the device node path depending on the form of root= : + + case ${value} in + UUID=*) + ROOTDEV=/dev/disk/by-uuid/${value#UUID=} + ;; + LABEL=*) + ROOTDEV=/dev/disk/by-label/${value#LABEL=} + ;; + *) + ROOTDEV=${value} + ;; + esac + ;; + fixrtc) + BROKEN_CLOCK=1 + ;; + esac +done + +if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then + ROOTDISK=$(readlink -f "$ROOTDEV") && + + TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && + TIME=${TIMESTR#*:} && + + date --set="${TIME} 1 minute" >/dev/null 2>&1 +fi + +# This script is best-effort. If we couldn't fudge the clock as desired, +# just try to carry on boot anyway: +# It will probably fail, but we won't have made the situation any worse. +exit 0 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g new file mode 100755 index 00000000..57e7f8ba --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g @@ -0,0 +1,14 @@ +#! /bin/sh + +case $1 in +prereqs) + exit 0 + ;; +esac + +if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ + [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then + modprobe fuse +fi + +exit 0 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume new file mode 100755 index 00000000..46535936 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume @@ -0,0 +1,75 @@ +#!/bin/sh + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +. ./scripts/functions + +if [ -z "${resume}" ]; then + exit 0 +fi + +case $resume in +LABEL=*) + resume="${resume#LABEL=}" + + # support any / in LABEL= path (escape to \x2f) + case "${resume}" in + *[/]*) + if [ -x "$(command -v sed)" ]; then + resume="$(echo ${resume} | sed 's,/,\\x2f,g')" + else + if [ "${resume}" != "${resume#/}" ]; then + resume="\x2f${resume#/}" + fi + if [ "${resume}" != "${resume%/}" ]; then + resume="${resume%/}\x2f" + fi + IFS='/' + newresume= + for s in $resume; do + if [ -z "${newresume}" ]; then + newresume="${s}" + else + newresume="${newresume}\\x2f${s}" + fi + done + unset IFS + resume="${newresume}" + fi + esac + resume="/dev/disk/by-label/${resume}" + ;; +UUID=*) + resume="/dev/disk/by-uuid/${resume#UUID=}" + ;; +esac + +SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) + +case "${SWAPTYPE}" in + swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) + if [ -x /bin/plymouth ] && plymouth --ping; then + plymouth message --text="Resuming from $resume" + fi + + # hardcode path, uswsusp ships an resume binary too + if [ -n "${resume_offset}" ]; then + /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 + else + /bin/resume ${resume} >/dev/null 2>&1 + fi + ;; +esac diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs new file mode 100644 index 00000000..b9c2522d --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs @@ -0,0 +1,83 @@ +# NFS filesystem mounting -*- shell-script -*- + +# FIXME This needs error checking + +retry_nr=0 + +# parse nfs bootargs and mount nfs +do_nfsmount() +{ + + configure_networking + + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + + if [ -z "${NFSOPTS}" ]; then + NFSOPTS="-o retrans=10" + fi + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" + run_scripts /scripts/nfs-premount + [ "$quiet" != "y" ] && log_end_msg + + if [ ${readonly} = y ]; then + roflag="-o ro" + else + roflag="-o rw" + fi + + nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} +} + +# NFS root mounting +mountroot() +{ + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" + run_scripts /scripts/nfs-top + [ "$quiet" != "y" ] && log_end_msg + + modprobe nfs + # For DHCP + modprobe af_packet + + # Default delay is around 180s + # FIXME: add usplash_write info + if [ -z "${ROOTDELAY}" ]; then + delay=180 + else + delay=${ROOTDELAY} + fi + + # loop until nfsmount succeds + while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do + [ ${retry_nr} -gt 0 ] && \ + [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" + do_nfsmount + retry_nr=$(( ${retry_nr} + 1 )) + [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 + [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg + done + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" + run_scripts /scripts/nfs-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev new file mode 100755 index 00000000..980e496f --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev @@ -0,0 +1,27 @@ +#!/bin/sh -e +# initramfs nfs-top script for udev + +PREREQ="" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +# Each call to udevsettle can take up to three minutes +if [ -x /sbin/usplash_write ]; then + /sbin/usplash_write "TIMEOUT 360" + trap "/sbin/usplash_write 'TIMEOUT 15'" 0 +fi + +# We need to wait for the network card drivers to be loaded +/sbin/udevadm settle diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup new file mode 100755 index 00000000..5e97f65e --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup @@ -0,0 +1,82 @@ +#! /bin/sh +# A crude much-simplified clone of setupcon for use in the initramfs. + +PREREQ="framebuffer" + +prereqs () { + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +. /etc/default/console-setup + +[ "$ACTIVE_CONSOLES" ] || exit 0 + +if [ "$VERBOSE_OUTPUT" = yes ]; then + verbose= +else + verbose='>/dev/null 2>&1' +fi + +for i in 1 2 3 4 5 6; do + [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i +done + +for console in $ACTIVE_CONSOLES; do + [ -w $console ] || continue + + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then + printf '\033%%G' >$console + else + printf '\033%%@' >$console + fi + + if [ "$FONT" ]; then + FONT="/etc/console-setup/${FONT##*/}" + FONT="${FONT%.gz}" + else + FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" + fi + if [ -f "$FONT" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console -f "$FONT" $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C $console "$FONT" $verbose + fi + fi + + if [ "$ACM" ]; then + ACM="/etc/console-setup/${ACM##*/}" + ACM="${ACM%.gz}" + else + ACM="/etc/console-setup/$CHARMAP.acm" + fi + if [ -f "$ACM" ]; then + if type consolechars >/dev/null 2>&1; then + eval consolechars -v --tty=$console --acm "$ACM" \ + $verbose + elif type setfont >/dev/null 2>&1; then + eval setfont -v -C "$console" -m "$ACM" $verbose + fi + fi + + if type kbd_mode >/dev/null 2>&1; then + if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then + kbd_mode -u <$console + else + kbd_mode -a <$console + fi + fi +done + +if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then + eval loadkeys /etc/console-setup/cached.kmap.gz $verbose +fi + +exit 0 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap new file mode 100644 index 00000000..f011abf5 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap @@ -0,0 +1,27 @@ +#!/bin/sh + +PREREQ="" +prereqs() +{ + echo "$PREREQ" +} +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +OPTS="-q" + +# Should terminal be in UTF8 mode? +if [ -x /bin/kbd_mode ]; then + /bin/kbd_mode -u + OPTS="${OPTS} -u" +fi + +# Load custom keymap +if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then + loadkeys ${OPTS} /etc/boottime.kmap.gz +fi diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth new file mode 100755 index 00000000..2da5a6b5 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth @@ -0,0 +1,18 @@ +#!/bin/sh + +OPTION=FRAMEBUFFER +PREREQ="udev" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +prereqs) + prereqs + exit 0 + ;; +esac + +/bin/plymouth quit diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm new file mode 100644 index 00000000..11d27f8c --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm @@ -0,0 +1,18 @@ +# mdadm boot_degraded configuration +# +# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if +# you want. You can also change the values here and changes will be preserved. +# Do note that only the values are preserved; the rest of the file is +# rewritten. +# +# BOOT_DEGRADED: +# Do you want to boot your system if a RAID providing your root filesystem +# becomes degraded? +# +# Running a system with a degraded RAID could result in permanent data loss +# if it suffers another hardware fault. +# +# However, you might answer "yes" if this system is a server, expected to +# tolerate hardware faults and boot unattended. + +BOOT_DEGRADED=false diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume new file mode 100644 index 00000000..34fdc4a5 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume @@ -0,0 +1 @@ +RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks new file mode 100755 index 00000000..3d9b04b8 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks @@ -0,0 +1,40 @@ +#!/bin/sh -e +# initramfs hook for OpenGnsys + + +PREREQ="og" + +# Output pre-requisites +prereqs() +{ + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + + +. /usr/share/initramfs-tools/hook-functions + +mkdir -p ${DESTDIR}/scripts/og-top +mkdir -p ${DESTDIR}/scripts/og-premount +mkdir -p ${DESTDIR}/scripts/og-bottom +mkdir -p ${DESTDIR}/mnt/ +mkdir -p ${DESTDIR}/net/ +mkdir -p ${DESTDIR}/usr +mkdir -p ${DESTDIR}/var/lock +mkdir -p ${DESTDIR}/var/log +mkdir -p ${DESTDIR}/opt/opengnsys; + +# Insert basic binaries +copy_exec /bin/bash-static /bin/bash + + +# Insert OpenGnsys Engine +mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine +cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine + diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf new file mode 100644 index 00000000..754e2bea --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf @@ -0,0 +1,72 @@ +# +# initramfs.conf +# Configuration file for mkinitramfs(8). See initramfs.conf(5). +# + +# +# MODULES: [ most | netboot | dep | list ] +# +# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. +# +# dep - Try and guess which modules to load. +# +# netboot - Add the base modules, network modules, but skip block devices. +# +# list - Only include modules from the 'additional modules' list +# + +MODULES=most + +# +# BUSYBOX: [ y | n ] +# +# Use busybox if available. +# + +BUSYBOX=y + +# +# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] +# +# Amount of RAM to use for RAM-based compressed swap space. +# +# An empty value - compcache isn't used, or added to the initramfs at all. +# An integer and K (e.g. 65536 K) - use a number of kilobytes. +# An integer and M (e.g. 256 M) - use a number of megabytes. +# An integer and G (e.g. 1 G) - use a number of gigabytes. +# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. +# +# You can optionally install the compcache package to configure this setting +# via debconf and have userspace scripts to load and unload compcache. +# + +COMPCACHE_SIZE="" + +# +# NFS Section of the config. +# + +# +# BOOT: [ local | nfs ] +# +# local - Boot off of local media (harddrive, USB stick). +# +# nfs - Boot using an NFS drive as the root of the drive. +# + +BOOT=local + +# +# DEVICE: ... +# +# Specify the network interface, like eth0 +# + +DEVICE=eth0 + +# +# NFSROOT: [ auto | HOST:MOUNT ] +# + +NFSROOT=auto + diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/modules b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/modules new file mode 100644 index 00000000..484ef718 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/modules @@ -0,0 +1,13 @@ +# List of modules that you want to include in your initramfs. +# +# Syntax: module_name [args ...] +# +# You must run update-initramfs(8) to effect this change. +# +# Examples: +# +# raid1 +# sd_mod +fbcon +vesafb +vga16b diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og new file mode 100755 index 00000000..6408eda7 --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og @@ -0,0 +1,140 @@ +# OpenGnsys Local filesystem mounting -*- shell-script -*- + +ogLinkBusybox () +{ +for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do + ln -f /bin/busybox /bin/$n +done +ln -f /bin/busybox /bin/sh +} + +ogConfigureRamfs () +{ +mkdir -p /tmp/og2ndFStmp/ +touch /tmp/og2ndFStmp/modules.dep.temp +touch /tmp/og2ndFStmp/modules.dep +} + + +ogExportKernelParameters () +{ +GLOBAL="cat /proc/cmdline" +for i in `${GLOBAL}` +do + echo $i | grep "=" > /dev/null && export $i +done +} + +ogCheckPointBreak () +{ +# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd +if [ "$firstshell" = "0" ] +then + echo "entrando en sh antes de configurar la red" + sh +fi + + if [ "$firstshell" = "1" ] +then + echo "entrando en sh despues de configurar la red" + sh +fi +# firstrunt=sh Arranque en modo depuracion para el cliente intrd +if [ "$firstrun" = "9" ] +then + sh +fi + +} + +ogLoadNetModule () +{ +#cargando netmodule +if [ -n "$netmodule" ] +then + echo "Cargando modulo de red $netmodule" + insmod `find /lib/modules/ -name ${netmodule}*` +fi +} + + +ogGetROOTSERVER () +{ + # get nfs root from dhcp + if [ "x${NFSROOT}" = "xauto" ]; then + # check if server ip is part of dhcp root-path + if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then + NFSROOT=${ROOTSERVER}:${ROOTPATH} + else + NFSROOT=${ROOTPATH} + fi + + # nfsroot=[:][,] + elif [ -n "${NFSROOT}" ]; then + # nfs options are an optional arg + if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then + NFSOPTS="-o ${NFSROOT#*,}" + fi + NFSROOT=${NFSROOT%%,*} + if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then + NFSROOT=${ROOTSERVER}:${NFSROOT} + fi + fi + export ROOTSERVER +} + +ogConectROOTSERVER () +{ +echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS + ## Montamos el resto de cosas necesarias + #printf "$MSG_MOUNTREPO\n" $BOOTMODE; + + mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; + mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; + #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; + #mount -t tmpfs none /opt/opengnsys/images -o size=5m +} + + + +# Parameter: Where to mount the filesystem +mountroot () +{ + [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" + run_scripts /scripts/og-top + [ "$quiet" != "y" ] && log_end_msg + + # If the root device hasn't shown up yet, give it a little while + # to deal with removable devices + + +ogConfigureRamfs +ogExportKernelParameters +ogCheckPointBreak +ogLoadNetModule + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" + run_scripts /scripts/og-premount + [ "$quiet" != "y" ] && log_end_msg + +configure_networking +ogGetROOTSERVER +ogCheckPointBreak + +ogConectROOTSERVER +# ogConectROOTMEDIA +ogCheckPointBreak + +set -a +trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 +/opt/opengnsys/etc/preinit/default.sh + + + + + + + [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" + run_scripts /scripts/og-bottom + [ "$quiet" != "y" ] && log_end_msg +} diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf new file mode 100644 index 00000000..3c27473b --- /dev/null +++ b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf @@ -0,0 +1,20 @@ +# +# Configuration file for update-initramfs(8) +# + +# +# update_initramfs [ yes | all | no ] +# +# Default is yes +# If set to all update-initramfs will update all initramfs +# If set to no disables any update to initramfs beside kernel upgrade + +update_initramfs=yes + +# +# backup_initramfs [ yes | no ] +# +# Default is no +# If set to no leaves no .bak backup files. + +backup_initramfs=no diff --git a/client/boot-tools/old/serverstructure/etc/exports.txt b/client/boot-tools/old/serverstructure/etc/exports.txt new file mode 100644 index 00000000..d5053530 --- /dev/null +++ b/client/boot-tools/old/serverstructure/etc/exports.txt @@ -0,0 +1 @@ +/var/lib/tftpboot/ *(ro,no_subtree_check,no_root_squash,sync) diff --git a/client/boot-tools/old/serverstructure/etc/samba/smb.conf.txt b/client/boot-tools/old/serverstructure/etc/samba/smb.conf.txt new file mode 100644 index 00000000..e47df3d8 --- /dev/null +++ b/client/boot-tools/old/serverstructure/etc/samba/smb.conf.txt @@ -0,0 +1,29 @@ +[tftpboot] + comment = el directorio fisico ogclient debe estar como escritura + writeable = no + read only = yes + #locking = no + path = /var/lib/tftpboot + guest ok = no + +[ogclient] + comment = client + read only = yes + locking = no + path = /opt/opengnsys/client + guest ok = no + +[oglog] + comment = log + read only = yes + locking = no + path = /opt/opengnsys/log/clients + guest ok = no + +[ogimages] + comment = images + read only = no + writeable = yes + locking = no + path = /opt/opengnsys/images + guest ok = no \ No newline at end of file diff --git a/client/boot-tools/old/serverstructure/init/defaultTESTING.sh b/client/boot-tools/old/serverstructure/init/defaultTESTING.sh new file mode 100755 index 00000000..07c10bcb --- /dev/null +++ b/client/boot-tools/old/serverstructure/init/defaultTESTING.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +/etc/init.d/ssh restart +#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 + + +# Fichero de registro de incidencias (en el servidor; si no, en local). +OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} +OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} +if ! touch $OGLOGFILE 2>/dev/null; then + OGLOGFILE=/var/log/opengnsys.log +fi + + +#TODO => activacion de modo escritura en REPO +ActiveAdmin=true +if [ $ActiveAdmin == "true" ] +then + export boot=admin + umount /opt/opengnsys/images + + if [ "$ogprotocol" == "nfs" ] + then + mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock + fi + + if [ "$ogprotocol" == "smb" ] + then + echo "montando smb" + mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og + echo mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og + + fi +fi +# Arranque de OpenGnSys Client. +if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then + + + echo "$MSG_LAUNCHCLIENT modo cliente full" + $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 +fi + +# Si fallo en cliente y modo "admin", cargar shell; si no, salir. +#if [ "$boot" == "admin" ]; then + bash +#fi diff --git a/client/boot-tools/old/serverstructure/preinit/defaultTESTING.sh b/client/boot-tools/old/serverstructure/preinit/defaultTESTING.sh new file mode 100755 index 00000000..3d291cc5 --- /dev/null +++ b/client/boot-tools/old/serverstructure/preinit/defaultTESTING.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Para que no haya problemas con el interprete +#ln -fs /opt/opengnsys/bin/bash /bin/bash + +set -a + +#source /opt/opengnsys/etc/preinit/loadenviron.sh +source /opt/opengnsys/etc/preinit/loadenvironTESTING.sh +#for f in fileslinks.sh loadudeb.sh loadmodules.sh metadevs.sh; do +for f in loadmodulesTESTING.sh; do + $OGETC/preinit/$f +done + +if [ -f $OGETC/init/$OG_IP.sh ]; then + $OGETC/init/$OG_IP.sh + +elif [ -f $OGETC/init/$OGGROUP.sh ]; then + $OGETC/init/$OGGROUP.sh + +elif [ -f $OGETC/init/defaultTESTING.sh ]; then + $OGETC/init/defaultTESTING.sh + +else + echo "No se ha encontrado script de inicio" + halt +fi diff --git a/client/boot-tools/old/serverstructure/preinit/loadenvironTESTING.sh b/client/boot-tools/old/serverstructure/preinit/loadenvironTESTING.sh new file mode 100755 index 00000000..1273db7f --- /dev/null +++ b/client/boot-tools/old/serverstructure/preinit/loadenvironTESTING.sh @@ -0,0 +1,95 @@ +#!/bin/bash +#/** +#@file loadenviron.sh +#@brief Script de carga de la API de funciones de OpenGNSys. +#@warning License: GNU GPLv3+ +#@version 0.9 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-10-10 +#*/ + +# Idioma por defecto. +export LANG="${LANG:-es_ES}" + +# Directorios del projecto OpenGnSys. +export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" +if [ -d $OPENGNSYS ]; then + export OGBIN=$OPENGNSYS/bin/testing + #export OGBIN=$OPENGNSYS/bin + export OGETC=$OPENGNSYS/etc + export OGLIB=$OPENGNSYS/lib + export OGAPI=$OGLIB/engine/bin + export OGSCRIPTS=$OPENGNSYS/scripts + export OGIMG=$OPENGNSYS/images + export OGCAC=$OPENGNSYS/cache + export OGLOG=$OPENGNSYS/log + + #export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH + #export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH + + # Cargar fichero de idioma. + LANGFILE=$OGETC/lang.$LANG.conf + if [ -f $LANGFILE ]; then + source $LANGFILE + for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do + export $i + done + fi + echo "$MSG_LOADAPI" + # Cargar mapa de teclado. + loadkeys ${LANG%_*} >/dev/null + # Cargar API de funciones. + for i in $OGAPI/*.lib; do + source $i + done + for i in $(typeset -F | cut -f3 -d" "); do + export -f $i + done + + # Añadir dependencia de arquitectura + ARCH=$(ogGetArch) +# if [ -n "$ARCH" ]; then + # export PATH=$OGBIN/$ARCH:$PATH + # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH + # fi + export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin + export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + GLOBAL="cat /proc/cmdline" + for i in `${GLOBAL}` + do + echo $i | grep "=" > /dev/null && export $i + done + + + # Carga de las API testing + if [ "$engine" = "testing" ] + then + for i in $OGAPI/*.testing; do + source $i + done + #export PATH=$PATH:$OGBIN/$ARCH-testing + fi + + # Fichero de registros. + export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" + # FIXME Pruebas para grupos de ordenadores + #export OGGROUP=$(ogGetGroup) + export OGGROUP="$group" +fi + +# Declaración de códigos de error. +export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. +export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. +export OG_ERR_PARTITION=3 # Error en partición de disco. +export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. +export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. +export OG_ERR_NOTOS=6 # Sin sistema operativo. +export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. + diff --git a/client/boot-tools/old/serverstructure/preinit/loadmodulesTESTING.sh b/client/boot-tools/old/serverstructure/preinit/loadmodulesTESTING.sh new file mode 100755 index 00000000..cea7d53a --- /dev/null +++ b/client/boot-tools/old/serverstructure/preinit/loadmodulesTESTING.sh @@ -0,0 +1,28 @@ +#!/bin/bash +#/** +#@file loadmodules.sh +#@brief Script de inicio para cargar módulos complementarios del kernel. +#@version 1.0 +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2010-01-26 +#*/ + + +MSG_LOADMODULES=${MSG_LOADMODULES:-"."} +echo "$MSG_LOADMODULES para cliente full" + +# Directorio principal de módulos del kernel. +MODULESDIR=/lib/modules/$(uname -r)/kernel + +# Módulo del ratón. +insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null +# Módulos de discos. +#for m in $MODULESDIR/drivers/ata/*.ko; do + # insmod $m 2>/dev/null +#done +# Módulos de sistemas de archivos. +#for f in reiserfs jfs xfs hfs hfsplus; do +#for f in reiserfs xfs hfs hfsplus; do +# insmod $MODULESDIR/fs/$f/$f.ko 2>/dev/null +#done + diff --git a/client/boot-tools/old/serverstructure/var/lib/tftpboot/defaultFULL b/client/boot-tools/old/serverstructure/var/lib/tftpboot/defaultFULL new file mode 100644 index 00000000..b7f81d0a --- /dev/null +++ b/client/boot-tools/old/serverstructure/var/lib/tftpboot/defaultFULL @@ -0,0 +1,18 @@ +DEFAULT pxe-2.6.32-21-generic-pae + +LABEL pxe +KERNEL linux +APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin + +LABEL pxe-2.6.32-21-generic-pae +KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=nfs engine=testing + + +#NOTA: parametro boot: reservado para oginit INCOMPATIBLE CON BOOT=ADMIN +#NOTA: reposerver=$IPREPO correspondería a tu servidor Repositorio OG +#ogrepo=172.17.32.242 +#ip: +#og2nd=sqfs =>sqfs, img +#ogprotocol=nfs => nfs, smb +#engine=testing => activa las libreias testing de cada universidad. diff --git a/client/ogClient/INSTALL.es.txt b/client/ogClient/INSTALL.es.txt deleted file mode 100644 index b357595b..00000000 --- a/client/ogClient/INSTALL.es.txt +++ /dev/null @@ -1,46 +0,0 @@ -########## INSTALACION ################################## - -### NOTA principal: utilizar el usuario root para este proceso #### -1. Comprobar la conexión a internet, sobre todo si usas proxy. El hecho de que te funcione apt-get no significa que tengas el proxy configurado. -1. Descargar del subversion la estrucutura del cliente. - -# reubicacion al trunk/client/boot - -Proceso: -0. Si ya tenemos un /var/lib/tftpboot/ogclient lo renombramos por si acaso. -1. Descargar del subversion la rama ogClient. -3. Ejecutar el instalador: - -mv /opt/opengnsys/tftpboot/ogclient/ /opt/opengnsys/tftpboot/ogclientTrunk; -svn checkout http://www.opengnsys.es/svn/branches/ogClient /tmp/opengnsys_installer/opengnsys/installer/ogClient; -svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/shared/ /tmp/opengnsys_installer/opengnsys/client/shared; -svn checkout http://www.opengnsys.es/svn/branches/version1.0/client/engine/ /tmp/opengnsys_installer/opengnsys/client/engine; -find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null; -/tmp/opengnsys_installer/opengnsys/installer/ogClient/ogClientGeneratorV2.sh; - - - -NOTA: el proceso tardará un buen rato, dependiendo de nuestras circustancias. -NOTA: crea un kernel, initrd, ogclient.img en /var/lib/tftpboot/ogclient -NOTA: el ogclient.img es el Segundo sistema de archivos en formato fichero bloques emulando a disco con partición primaria. -NOTA: el ogclient.sqfs es el Segundo sistema de archivos (partición primaria del img) en formato squashfs. Se usará con el parámetro og2nd=sqfs -NOTA: los logs de instalación estarán en /tmp/opengnsys_installation.log - - - NOTA A RECORDAR: - NOTA ACLARATORIA: $OGSCRITPS(reboot,poweroff) antes de /sbin/{reboot,poweroff} - - ################## Descripcion de la estrucutra de ogClient. - los directorios old y serverstrucutre son antiguos, pero no borrarlos. - INSTALL.es.txt : este mismo archivo. - ogInstaller.lib : son todas las funciones de instalacion del instalador oficial de opengnys. Algunas de ellas son utilizadas. Crear ticket para separar las funciones de iinstalacion del proceso de instalacion. - ogClientManager.lib: son las funicones especificas para la instalacion del ogclient. estan escritas en orden de que son llamadas por el instalador, (ogClientGeneratorV2.sh) - ogClientGeneratorV2.sh. Es el guión de ejecución del isntalador. - - - - ############ ERROR PRINCIPAL 2 ####### - necesita que en el equipo donde se ejecuta el scripts, disponga de la estrucutra /opt/opengnsys/client - sobre todo los lib/fonts, el lib/pci.ids el bin/browser y el bin/ogAdmClient - - diff --git a/client/ogClient/clientstructure/etc/apt/sources.list.debian b/client/ogClient/clientstructure/etc/apt/sources.list.debian deleted file mode 100644 index 495e48d4..00000000 --- a/client/ogClient/clientstructure/etc/apt/sources.list.debian +++ /dev/null @@ -1,4 +0,0 @@ -deb http://ftp.us.debian.org/debian lenny main contrib non-free - -deb http://security.debian.org/ lenny/updates main contrib non-free -deb-src http://security.debian.org/ lenny/updates main contrib non-free diff --git a/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu b/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu deleted file mode 100644 index 29348ccc..00000000 --- a/client/ogClient/clientstructure/etc/apt/sources.list.ubuntu +++ /dev/null @@ -1,56 +0,0 @@ -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted -## Major bug fix updates produced after the final release of the -## distribution. -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team. Also, please note that software in universe WILL NOT receive any -## review or updates from the Ubuntu security team. -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe - -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team, and may not be under a free licence. Please satisfy yourself as to -## your rights to use the software. Also, please note that software in -## multiverse WILL NOT receive any review or updates from the Ubuntu -## security team. -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse -deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse - -## Uncomment the following two lines to add software from the 'backports' -## repository. -## N.B. software from this repository may not have been tested as -## extensively as that contained in the main release, although it includes -## newer versions of some applications which may provide useful features. -## Also, please note that software in backports WILL NOT receive any review -## or updates from the Ubuntu security team. -# deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse -# deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse - -## Uncomment the following two lines to add software from Canonical's -## 'partner' repository. -## This software is not part of Ubuntu, but is offered by Canonical and the -## respective vendors as a service to Ubuntu users. -# deb http://archive.canonical.com/ubuntu OSCODENAME partner -# deb-src http://archive.canonical.com/ubuntu OSCODENAME partner - - -deb http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted -deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted -deb http://security.ubuntu.com/ubuntu OSCODENAME-security universe -deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security universe -deb http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse -deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse - - -deb http://archive.ubuntu.com/ubuntu OSCODENAME main -deb http://free.nchc.org.tw/drbl-core drbl stable -deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe multiverse -deb http://ppa.launchpad.net/freenx-team/ubuntu/ OSCODENAME main -deb http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main -deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main diff --git a/client/ogClient/clientstructure/etc/environment b/client/ogClient/clientstructure/etc/environment deleted file mode 100644 index bb529d99..00000000 --- a/client/ogClient/clientstructure/etc/environment +++ /dev/null @@ -1,4 +0,0 @@ -LC_TYPE=es_ES@euro -LC_ALL=es_ES@euro -LANG=es_ES@euro -LANGUAGE=es_ES@euro \ No newline at end of file diff --git a/client/ogClient/clientstructure/etc/fstab b/client/ogClient/clientstructure/etc/fstab deleted file mode 100644 index d7473df4..00000000 --- a/client/ogClient/clientstructure/etc/fstab +++ /dev/null @@ -1,13 +0,0 @@ -# /etc/fstab: static file system information. -# -# Use 'blkid -o value -s UUID' to print the universally unique identifier -# for a device; this may be used with UUID= as a more robust way to name -# devices that works even if disks are added and removed. See fstab(5). -# -# -proc /proc proc 0 0 -/dev/sda1 ext3 errors=remount-ro 0 1 - - - - diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks b/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks deleted file mode 100755 index 15fd01cc..00000000 --- a/client/ogClient/clientstructure/etc/initramfs-tools/hooks/oghooks +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - -#@file oghooks -#@brief configuración initrd para OpenGnSys -#@warning -#@version 0.9 - estrucura opengnsys, bash-static, unionfs, atheros -#@author Antonio J. Doblas Viso. -#@date 2010/05/24 -#*/ - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; -mkdir -p ${DESTDIR}/ogboot; -mkdir -p ${DESTDIR}/boot; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash -copy_exec /usr/bin/unionfs-fuse -copy_exec /sbin/mount.cifs - - -# Insert OpenGnsys Engine -#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - -rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl* -manual_add_modules cifs -manual_add_modules smbfs -manual_add_modules atl1e -manual_add_modules squashfs - - diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/modules b/client/ogClient/clientstructure/etc/initramfs-tools/modules deleted file mode 100644 index 8bac1d4b..00000000 --- a/client/ogClient/clientstructure/etc/initramfs-tools/modules +++ /dev/null @@ -1,14 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -vga16b -vesafb -fbcon - diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions deleted file mode 100644 index ce2716db..00000000 --- a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/ogfunctions +++ /dev/null @@ -1,427 +0,0 @@ -#@file ogfunctions.lib -#@brief Librería o clase para la generación del 1erFS -#@class client -#@brief Funciones para la generación del primers sistema (initrd) -#@version 0.91 -#@warning License: GNU GPLv3+ - - - - -ogExportKernelParameters () -{ - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done -return 0 -} - -ogExportVarEnvironment () -{ - #puntos de accesos al servidor ogprotocol=nfs - export NFSROOTBOOT="/var/lib/tftpboot" - export NFSCLIENTDIR="/opt/opengnsys/client" - export NFSLOGDIR="/opt/opengnsys/log/clients" - export NFSIMGDIR="/opt/opengnsys/images" - #puntos de accesos al servidor ogprotocol=smb - export SMBROOTBOOT="tftpboot" - export SMBCLIENTDIR="ogclient" - export SMBLOGDIR="oglog" - export SMBIMGDIR="ogimages" - - #puntos de montaje local ram o cache - export LOCALCLIENTDIR="/opt/opengnsys" - export LOCALLOGDIR="/opt/opengnsys/log" - export LOCALIMGDIR="/opt/opengnsys/images" - export LOCALROOTBOOT="/opt/og2fs/tftpboot" #punto de montaje del contendor tftpboot - export LOCALROOTIMG="/opt/og2fs/2ndfs" #punto de montaje donde se accede al 2nd FS mediante loop - export LOCALROOTRAM="/opt/og2fs/1stfs" #punto de montaje para unionfs - export LOCALROOTUNION="/opt/og2fs/unionfs" #punto de union entreo LOCALROOTIMG y LOCALROOTRAM - ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES. - #ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd. - #IPV4DDR - #IPV4BROADCAST - #IPV4NETMASK - #IPV4GATEWAY - #DNS0 DNS1 - #HOSTNAME - #ROOTSERVER #ip del servidor pxe que ha servido el kernel - #REPOSERVER=ogrepo -> ogConectROOTSERVER() ip del servidor de images para separar serviicios. - return 0 -} - -ogConfigureRamfs () -{ - mkdir -p $LOCALROOTBOOT - mkdir -p $LOCALROOTIMG - mkdir -p $LOCALROOTRAM - mkdir -p $LOCALROOTUNION -} - -ogLoadNetModule () -{ - #cargando netmodule - if [ -n "$ognetmodule" ] - then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` - fi -} - - -ogPostConfigureFS() -{ - # configuramos el /etc/hostname. - echo $HOSTNAME > /etc/hostname - - #configuramos el /etc/hosts - echo "127.0.0.1 localhost" > /etc/hosts - echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts - - #configuramos el host.conf - echo "order hosts,bind" > /etc/host.conf - echo "multi on" >> /etc/host.conf - - # configuramos el /etc/networks - #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}') - NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ") - echo "default 0.0.0.0" > /etc/networks - echo "loopback 127.0.0.0" >> /etc/networks - echo "link-local 169.254.0.0" >> /etc/networks - echo "localnet $NETIP" >> /etc/networks - #route -} - - - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -return 0 -} - -ogConectROOTSERVER () -{ -local OPTIONS -#params a detectar -if [ $ogrepo ] -then - # Validar si la ip es correcta - ROOTREPO=$ogrepo -else - ROOTREPO=$ROOTSERVER -fi - -case "$ogprotocol" in - cdrom) - echo "Montar imagen de CD-ROM" - blkid /dev/s* - mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT - ;; - httfs) - echo "protocolo httfs aun no soportado" - ;; - sshfs) - echo "protocolo sshfs aun no soportado" - ;; - smb) - echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol" - OPTIONS=" -o user=opengnsys,pass=og" - mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS - mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS - mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS - mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro - ;; - nfs) - echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol" - nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR - nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR - nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT - nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR - ;; -esac -} - -ogMerge2ndFile() -{ -if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ] -then - cat /proc/mounts > /tmp/mtab.preunion - if [ "$og2nd" == "img" ] - then - #para acceder al img - losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256 - mount /dev/loop0 $LOCALROOTIMG - else - ## para acceder al squashfs - mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop - fi - for i in etc var lib bin sbin usr root boot; do - unionmount $i - done - cat /tmp/mtab.preunion > /etc/mtab -else - echo "Fichero imagen del cliente no encontrado" - return 1 -fi -} - - -unionmount() -{ - tmpdir=/$1 #dir - FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" - UNION_OPT="-o cow -o noinitgroups" - UBIN="unionfs-fuse" - #UPATH="/unionfs" - #LOCALROOTIMG="/opt/og2fs/2ndfs" - #LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs - #LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM - #mkdir -p $LOCALROOTRAM #/unionfs/host - #mkdir -p $LOCALROOTUNION #/unionfs/union - mkdir -p $LOCALROOTRAM$tmpdir - #mount --bind /$tmpdir $LOCALROOTRAM$tmpdir - U1STDIR="${LOCALROOTRAM}${tmpdir}=RW" - U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO" - UNIONDIR=$LOCALROOTUNION$tmpdir - mkdir -p $UNIONDIR - $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR - mount --bind $UNIONDIR $tmpdir -} - - -unionmountOLD() -{ - FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" - UNION_OPT="-o cow -o noinitgroups" - UPATH="/unionfs" - UBIN="unionfs-fuse" - mkdir -p /unionfs/host - mkdir -p /unionfs/union - dir=$1 - mkdir -p /unionfs/host/$dir - #mount --bind /$dir /unionfs/host/$dir - mkdir -p /unionfs/union/$dir - host="/unionfs/host/${dir}=RW" - common="/opt/og2fs/${dir}=RO" - $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir - mount --bind /unionfs/union/$dir /$dir -} - -ogconfigure_lo() -{ -# for the portmapper we need localhost -ifconfig lo 127.0.0.1 -#/etc/init.d/portmap start -} - -ogconfigure_networking() -{ -IP=$IPOPTS -# http://paste.ubuntu.com/427631/ Paste from yofel at Tue, 4 May 2010 13:49:56 +0000 - if [ -n "${BOOTIF}" ]; then - # pxelinux sets BOOTIF to a value based on the mac address of the - # network card used to PXE boot, so use this value for DEVICE rather - # than a hard-coded device name from initramfs.conf. this facilitates - # network booting when machines may have multiple network cards. - # pxelinux sets BOOTIF to 01-$mac_address - - # strip off the leading "01-", which isn't part of the mac - # address - temp_mac=${BOOTIF#*-} - - # convert to typical mac address format by replacing "-" with ":" - bootif_mac="" - IFS='-' - for x in $temp_mac ; do - if [ -z "$bootif_mac" ]; then - bootif_mac="$x" - else - bootif_mac="$x:$bootif_mac" - fi - done - unset IFS - - # look for devices with matching mac address, and set DEVICE to - # appropriate value if match is found. - for device in /sys/class/net/* ; do - if [ -f "$device/address" ]; then - current_mac=$(cat "$device/address") - if [ "$bootif_mac" = "$current_mac" ]; then - DEVICE=${device##*/} - break - fi - fi - done - fi - - # networking already configured thus bail out - [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 - - # support ip options see linux sources - # Documentation/filesystems/nfsroot.txt - # Documentation/frv/booting.txt - - for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do - - # The NIC is to be configured if this file does not exist. - # Ip-Config tries to create this file and when it succeds - # creating the file, ipconfig is not run again. - if [ -e /tmp/net-"${DEVICE}".conf ]; then - break; - fi - - case ${IP} in - none|off) - # Do nothing - ;; - ""|on|any) - # Bring up device - echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " - ipconfig -t ${ROUNDTTT} ${DEVICE} - ;; - dhcp|bootp|rarp|both) - echo "Setting $DEVICE with (dhcp) kernel params $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " - ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} - ;; - *) - echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} -d $IP " - ipconfig -t ${ROUNDTTT} -d $IP - - # grab device entry from ip option - NEW_DEVICE=${IP#*:*:*:*:*:*} - if [ "${NEW_DEVICE}" != "${IP}" ]; then - NEW_DEVICE=${NEW_DEVICE%:*} - else - # wrong parse, possibly only a partial string - NEW_DEVICE= - fi - if [ -n "${NEW_DEVICE}" ]; then - DEVICE="${NEW_DEVICE}" - fi - ;; - esac - done - - # source ipconfig output - if [ -n "${DEVICE}" ]; then - # source specific bootdevice - . /tmp/net-${DEVICE}.conf - else - # source any interface as not exaclty specified - . /tmp/net-*.conf - fi -} - - ##################################################################### -# Ask yesno question. -# -# Usage: yesno OPTIONS QUESTION -# -# Options: -# --timeout N Timeout if no input seen in N seconds. -# --default ANS Use ANS as the default answer on timeout or -# if an empty answer is provided. -# -# Exit status is the answer. 0=yes 1=no - -ogYesNo() -{ - local ans - local ok=0 - local timeout=0 - local default - local t - - while [[ "$1" ]] - do - case "$1" in - --default) - shift - default=$1 - if [[ ! "$default" ]]; then error "Missing default value"; fi - t=$(echo $default | tr '[:upper:]' '[:lower:]') - - if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then - error "Illegal default answer: $default" - fi - default=$t - shift - ;; - - --timeout) - shift - timeout=$1 - if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi - #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi - shift - ;; - - -*) - error "Unrecognized option: $1" - ;; - - *) - break - ;; - esac - done - - if [[ $timeout -ne 0 && ! "$default" ]]; then - error "Non-zero timeout requires a default answer" - fi - - if [[ ! "$*" ]]; then error "Missing question"; fi - - while [[ $ok -eq 0 ]] - do - if [[ $timeout -ne 0 ]]; then - if ! read -t $timeout -p "$*" ans; then - ans=$default - else - # Turn off timeout if answer entered. - timeout=0 - if [[ ! "$ans" ]]; then ans=$default; fi - fi - else - read -p "$*" ans - if [[ ! "$ans" ]]; then - ans=$default - else - ans=$(echo $ans | tr '[:upper:]' '[:lower:]') - fi - fi - - if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then - ok=1 - fi - - if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi - done - [[ "$ans" = "y" || "$ans" == "yes" ]] -} - - diff --git a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit b/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit deleted file mode 100755 index a6c05d5e..00000000 --- a/client/ogClient/clientstructure/etc/initramfs-tools/scripts/oginit +++ /dev/null @@ -1,111 +0,0 @@ -# OpenGnsys oginit -*- shell-script -*- - -#@file oginit -#@brief Guion modificador inicio initrd para OpenGnSys -#@warning -#@version 0.1 - basado en ROOTfs -#@author Antonio J. Doblas Viso. Universidad de Málaga -#@date 2009/00/00 -#@version 0.2 - basado en el instalador de ubunto -#@author Alejandro Castillo -#@author Ramón Gómez -#@author Irina -#@author Antonio Doblas -#@date 2010/00/00 -#@version 0.7 - Generación limpia con mkinitrd, busybox -#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. -#@date 2010/05/24 -#@version 0.8 - Integración con FileSystem externo -#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. -#@date 2010/06/24 -#@version 0.8.1 - UnionFS + squasfs -#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT. -#@date 2010/06/29 - -#*/ - - - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - . /scripts/functions - . /scripts/ogfunctions - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N " - [ $? == 0 ] && sh || echo " " - - set -a - log_success_msg "Checking kernel parameters" - ogExportKernelParameters - log_success_msg "Checking Opengnys Environmnet" - ogExportVarEnvironment - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N " - [ $? == 0 ] && sh || echo " " - ogConfigureRamfs - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N " - [ $? == 0 ] && sh || echo " " - ogLoadNetModule - - #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - #run_scripts /scripts/og-premount - #[ "$quiet" != "y" ] && log_end_msg - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N " - [ $? == 0 ] && sh || echo " " - ogconfigure_networking - log_success_msg "config networking" - ogconfigure_lo - log_success_msg "config loopback" - - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N " - [ $? == 0 ] && sh || echo " " - ogGetROOTSERVER && log_success_msg "Get Info from pxe server" - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before conect with og Services : y/N " - [ $? == 0 ] && sh || echo " " - ogConectROOTSERVER && log_success_msg "Conecting with og services" || sh - # ogConectROOTMEDIA - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before merge the Second File System with initrd (First File System) : y/N " - [ $? == 0 ] && sh || echo " " - ogMerge2ndFile && log_success_msg "Merge onto Second File System" - - - #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - #run_scripts /scripts/og-bottom - #[ "$quiet" != "y" ] && log_end_msg - - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N " - [ $? == 0 ] && sh || echo " " - ogPostConfigureFS - setupcon -k - - [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N " - [ $? == 0 ] && sh || echo " " - -if [ "$oginit" ] -then - exec $oginit -else - exec init -fi - - - - - -} diff --git a/client/ogClient/clientstructure/etc/inittab b/client/ogClient/clientstructure/etc/inittab deleted file mode 100644 index 94c30028..00000000 --- a/client/ogClient/clientstructure/etc/inittab +++ /dev/null @@ -1,14 +0,0 @@ -# This is run first except when booting in single-user mode -# -#::sysinit:/opt/opengnsys/etc/preinit/defaultTESTING.sh -# /bin/sh invocations on selected ttys -# -# Start an "askfirst" shell on the console (whatever that may be) -#::askfirst:/bin/sh -# Start an "askfirst" shell on /dev/tty2-4 -#tty1::respawn:/sbin/getty 38400 tty1 -tty1::respawn:/opt/opengnsys/etc/preinit/defaultTESTING.sh -tty2::respawn:/sbin/getty 38400 tty2 -tty3::respawn:/sbin/getty 38400 tty3 -tty4::respawn:/sbin/getty 38400 tty4 -tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf b/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf deleted file mode 100644 index 8b047e4e..00000000 --- a/client/ogClient/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf +++ /dev/null @@ -1,30 +0,0 @@ -# Framebuffer drivers are generally buggy and poorly-supported, and cause -# suspend failures, kernel panics and general mayhem. For this reason we -# never load them automatically. -blacklist aty128fb -blacklist atyfb -#blacklist radeonfb -blacklist cirrusfb -blacklist cyber2000fb -blacklist cyblafb -blacklist gx1fb -blacklist hgafb -blacklist i810fb -blacklist intelfb -blacklist kyrofb -blacklist lxfb -blacklist matroxfb_base -blacklist neofb -blacklist nvidiafb -blacklist pm2fb -blacklist rivafb -blacklist s1d13xxxfb -blacklist savagefb -blacklist sisfb -blacklist sstfb -blacklist tdfxfb -blacklist tridentfb -#blacklist vesafb -blacklist vfb -blacklist viafb -blacklist vt8623fb diff --git a/client/ogClient/clientstructure/etc/mtab b/client/ogClient/clientstructure/etc/mtab deleted file mode 100644 index e69de29b..00000000 diff --git a/client/ogClient/clientstructure/etc/network/interfaces b/client/ogClient/clientstructure/etc/network/interfaces deleted file mode 100644 index dbe43582..00000000 --- a/client/ogClient/clientstructure/etc/network/interfaces +++ /dev/null @@ -1,4 +0,0 @@ -auto lo -iface lo inet loopback -auto eth0 -iface eth0 inet dhcp \ No newline at end of file diff --git a/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh b/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh deleted file mode 100755 index 0bf46a3e..00000000 --- a/client/ogClient/clientstructure/etc/profile.d/loadenviron.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash -#/** -#@file loadenviron.sh -#@brief Script de carga de la API de funciones de OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - -# FIXME Temporal -export LANG="${LANG:-es_ES}" - -#/// Directorios del projecto OpenGNSys. -export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" -if [ -d $OPENGNSYS ]; then - export OGBIN=$OPENGNSYS/bin - export OGETC=$OPENGNSYS/etc - export OGLIB=$OPENGNSYS/lib - export OGAPI=$OGLIB/engine/bin - export OGSCRIPTS=$OPENGNSYS/scripts - export OGIMG=$OPENGNSYS/images - export OGCAC=$OPENGNSYS/cache - export OGLOG=$OPENGNSYS/log - -# export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH - # export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH - - #/// Cargar fichero de idioma. - LANGFILE=$OGETC/lang.$LANG.conf - if [ -f $LANGFILE ]; then - source $LANGFILE - #for i in $(grep "^[a-zA-Z].*=" $LANGFILE | cut -f1 -d=); do - for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do - export $i - done - fi - #/// Cargar API de funciones. - echo "$MSG_LOADAPI" - for i in $OGAPI/*.lib; do - source $i - done - for i in $(typeset -F | cut -f3 -d" "); do - export -f $i - done - # Carga de las API testing - if [ "$engine" = "testing" ] - then - for i in $OGAPI/*.testing; do - source $i - done - fi - # Añadir dependencia de arquitectura - ARCH=$(ogGetArch) - if [ -n "$ARCH" ]; then - # export PATH=$OGBIN/$ARCH:$PATH - # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin - export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH - fi - # Fichero de registros. - export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" - # FIXME Pruebas para grupos de ordenadores - #export OGGROUP=$(ogGetGroup) - export OGGROUP=aula3 -fi - -#/// Declaración de códigos de error. -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. - - diff --git a/client/ogClient/clientstructure/etc/ssh/ssh_config b/client/ogClient/clientstructure/etc/ssh/ssh_config deleted file mode 100644 index 7f9319dc..00000000 --- a/client/ogClient/clientstructure/etc/ssh/ssh_config +++ /dev/null @@ -1,56 +0,0 @@ - -# This is the ssh client system-wide configuration file. See -# ssh_config(5) for more information. This file provides defaults for -# users, and the values can be changed in per-user configuration files -# or on the command line. - -# Configuration data is parsed as follows: -# 1. command line options -# 2. user-specific file -# 3. system-wide file -# Any configuration value is only changed the first time it is set. -# Thus, host-specific definitions should be at the beginning of the -# configuration file, and defaults at the end. - -# Site-wide defaults for some commonly used options. For a comprehensive -# list of available options, their meanings and defaults, please see the -# ssh_config(5) man page. - -Host * -# ForwardAgent no -# ForwardX11 no -# ForwardX11Trusted yes -# RhostsRSAAuthentication no -# RSAAuthentication yes -# PasswordAuthentication yes - HostbasedAuthentication no -# GSSAPIAuthentication no -# GSSAPIDelegateCredentials no -# GSSAPIKeyExchange no -# GSSAPITrustDNS no -# BatchMode no -# CheckHostIP yes -# AddressFamily any -# ConnectTimeout 0 -# StrictHostKeyChecking ask -# IdentityFile ~/.ssh/identity -# IdentityFile ~/.ssh/id_rsa -# IdentityFile ~/.ssh/id_dsa -# Port 22 -# Protocol 2,1 -# Cipher 3des -# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc -# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 -# EscapeChar ~ -# Tunnel no -# TunnelDevice any:any -# PermitLocalCommand no -# VisualHostKey no - SendEnv LANG LC_* -# HashKnownHosts yes - GSSAPIAuthentication yes - GSSAPIDelegateCredentials no - - StrictHostKeyChecking no - UserKnownHostsFile=/dev/null - diff --git a/client/ogClient/clientstructure/etc/ssh/sshd_config b/client/ogClient/clientstructure/etc/ssh/sshd_config deleted file mode 100644 index ea0303b3..00000000 --- a/client/ogClient/clientstructure/etc/ssh/sshd_config +++ /dev/null @@ -1,86 +0,0 @@ -# Package generated configuration file -# See the sshd_config(5) manpage for details - -# What ports, IPs and protocols we listen for -Port 22 -# Use these options to restrict which interfaces/protocols sshd will bind to -#ListenAddress :: -#ListenAddress 0.0.0.0 -Protocol 2 -# HostKeys for protocol version 2 -HostKey /etc/ssh/ssh_host_rsa_key -HostKey /etc/ssh/ssh_host_dsa_key -#Privilege Separation is turned on for security -UsePrivilegeSeparation yes - -# Lifetime and size of ephemeral version 1 server key -KeyRegenerationInterval 3600 -ServerKeyBits 768 - -# Logging -SyslogFacility AUTH -LogLevel INFO - -# Authentication: -LoginGraceTime 120 -PermitRootLogin yes -StrictModes yes - -RSAAuthentication yes -PubkeyAuthentication yes -#AuthorizedKeysFile %h/.ssh/authorized_keys - -# Don't read the user's ~/.rhosts and ~/.shosts files -IgnoreRhosts yes -# For this to work you will also need host keys in /etc/ssh_known_hosts -RhostsRSAAuthentication no -# similar for protocol version 2 -HostbasedAuthentication no -# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication -#IgnoreUserKnownHosts yes - -# To enable empty passwords, change to yes (NOT RECOMMENDED) -PermitEmptyPasswords no - -# Change to yes to enable challenge-response passwords (beware issues with -# some PAM modules and threads) -ChallengeResponseAuthentication no - -# Change to no to disable tunnelled clear text passwords -#PasswordAuthentication yes - -# Kerberos options -#KerberosAuthentication no -#KerberosGetAFSToken no -#KerberosOrLocalPasswd yes -#KerberosTicketCleanup yes - -# GSSAPI options -#GSSAPIAuthentication no -#GSSAPICleanupCredentials yes - -X11Forwarding yes -X11DisplayOffset 10 -PrintMotd no -PrintLastLog yes -TCPKeepAlive yes -#UseLogin no - -#MaxStartups 10:30:60 -#Banner /etc/issue.net - -# Allow client to pass locale environment variables -AcceptEnv LANG LC_* - -Subsystem sftp /usr/lib/openssh/sftp-server - -# Set this to 'yes' to enable PAM authentication, account processing, -# and session processing. If this is enabled, PAM authentication will -# be allowed through the ChallengeResponseAuthentication and -# PasswordAuthentication. Depending on your PAM configuration, -# PAM authentication via ChallengeResponseAuthentication may bypass -# the setting of "PermitRootLogin without-password". -# If you just want the PAM account and session checks to run without -# PAM authentication, then enable this but set PasswordAuthentication -# and ChallengeResponseAuthentication to 'no'. -UsePAM yes diff --git a/client/ogClient/clientstructure/root/CompileSoftware.sh b/client/ogClient/clientstructure/root/CompileSoftware.sh deleted file mode 100755 index 1a9b854a..00000000 --- a/client/ogClient/clientstructure/root/CompileSoftware.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -################################################################ -##################### SOFTWARE ##################### -################################################################ -export LANGUAGE=C -export LC_ALL=C -export LANG=C - -#dpkg-divert --local --rename --add /sbin/initctl -#ln -s /bin/true /sbin/initctl - -apt-get -y update -# software to compile code -apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk - -source /opt/opengnsys/lib/engine/bin/ToolsGNU.c - -ctorrent install -udpcast install -#ntfs-3g install -ms-sys install - -wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh -gdebi -n partclone_0.2.16_i386.deb - - cd /tmp - wget http://damien.guibouret.free.fr/savepart.zip - unzip savepart.zip -d /sbin/ - - diff --git a/client/ogClient/clientstructure/root/ConfFS.sh b/client/ogClient/clientstructure/root/ConfFS.sh deleted file mode 100755 index 3e0f4b5c..00000000 --- a/client/ogClient/clientstructure/root/ConfFS.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -dpkg-divert --local --rename --add /sbin/initctl -ln -s /bin/true /sbin/initctl -#mv /etc/fstab /etc/fstab.original 2>/dev/null -#mv /etc/mtab /etc/mtab.original 2>/dev/null - -#TODO: fichero etc/hosts -#TODO: fichero etc/resolv.conf -echo "ogClient" > /etc/hostname - -#export PASSROOT=og -#dpkg-reconfigure passwd -#echo "root:$PASSROOT" | chpasswd - - -#for i in pts/0 pts/1 pts/2 pts/3 do -# -# -#done -#TODO: introducir mas consoluas para el acceso como root. -echo "pts/0" >> /etc/securetty -echo "pts/1" >> /etc/securetty -echo "pts/2" >> /etc/securetty -echo "pts/3" >> /etc/securetty \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh b/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh deleted file mode 100755 index eaeb475b..00000000 --- a/client/ogClient/clientstructure/root/GenerateInitrd.generic.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null -#OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null -export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') -export OSRELEASE=$(uname -a | awk '{print $3}') -uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 -export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" - - - -cd /usr/lib/initramfs-tools/bin/ -rm * -cp /bin/busybox ./ -cd /tmp/ -mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE -cp /boot/vmlinuz-$OSRELEASE /tmp \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/InstallSoftware.sh b/client/ogClient/clientstructure/root/InstallSoftware.sh deleted file mode 100755 index da8d8d06..00000000 --- a/client/ogClient/clientstructure/root/InstallSoftware.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -################################################################ -##################### SOFTWARE ##################### -################################################################ -export LANGUAGE=C -export LC_ALL=C -export LANG=C - - -dpkg-divert --local --rename --add /sbin/initctl -ln -s /bin/true /sbin/initctl - -apt-get clean -apt-get -y update - - -# software system -apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE wget dialog man-db htop fbset gdebi-core busybox-static - -apt-get -y --force-yes install console-data locales - -# sofware networking -apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 unionfs-fuse open-iscsi nmap tcpdump arping dnsutils - -apt-get clean -# software services -apt-get -y --force-yes install openssh-server bittornado trickle iptraf screen schroot grub - -# software disk and filesystem -apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted ntfs-3g dosfstools -apt-get -y --force-yes install dmraid dmsetup lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools -apt-get -y --force-yes install btrfs-tools hfsplus hfsprogs hfsutils nilfs-tools reiser4progs ufsutils - -# software cloning -apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools -apt-get -y --force-yes install mbuffer - - -apt-get clean -## software postconf -apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk - -# software compressor -apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop pigz pbzip2 lbzip2 rzip p7zip-full unzip - -apt-get -y --force-yes remove busybox -apt-get -y --force-yes install busybox-static bash-static -apt-get clean -#apt-get -y --force-yes xorg-dev xorg lxde roxterm -# -#################################################################### -###################### Reconfigurando paquetes ###################### -################################################################### - - -#dpkg-reconfigure console-data -#dpkg-reconfigure console-setup -#dpkg-reconfigure locales -apt-get clean -##TODO################# Borrar algunos binarios del mkinitramfs - - diff --git a/client/ogClient/clientstructure/root/ReconfigureLocales.sh b/client/ogClient/clientstructure/root/ReconfigureLocales.sh deleted file mode 100755 index 5480d141..00000000 --- a/client/ogClient/clientstructure/root/ReconfigureLocales.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -dpkg-reconfigure console-data -dpkg-reconfigure console-setup -dpkg-reconfigure locales \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/generateSshKeysClient.sh b/client/ogClient/clientstructure/root/generateSshKeysClient.sh deleted file mode 100755 index 9857ad40..00000000 --- a/client/ogClient/clientstructure/root/generateSshKeysClient.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -echo "comprobando directorio .ssh del root" -if [ ! -d /root/.ssh ] -then - echo "creando directorio .ssh 600" - mkdir -p /root/.ssh - chmod 700 /root/.ssh -fi - - -echo "comprobando el fichero authorized_keys .ssh del root" -if [ ! -f /root/.ssh/authorized_keys ] -then - echo "creando el fichero authorized_keys" - touch /root/.ssh/authorized_keys - chmod 600 /root/.ssh/authorized_keys -fi - -ssh-keygen -q -f /root/.ssh/id_rsa -N "" -cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys - -## TODO: exportamos la publica a los repos -cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/importSshKeys.sh b/client/ogClient/clientstructure/root/importSshKeys.sh deleted file mode 100755 index 17a797f8..00000000 --- a/client/ogClient/clientstructure/root/importSshKeys.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -echo "comprobando directorio .ssh del root" -if [ ! -d /root/.ssh ] -then - echo "creando directorio .ssh 600" - mkdir -p /root/.ssh - chmod 700 /root/.ssh -fi -echo "creando el fichero authorized_keys" -touch /root/.ssh/authorized_keys -chmod 600 /root/.ssh/authorized_keys - -echo "importando la clave publica del servidor OG" -cat /tmp/id_rsa.pub - -[ -f /tmp/id_rsa.pub ] && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys || echo "no key publica og" - \ No newline at end of file diff --git a/client/ogClient/clientstructure/root/qemu.sh b/client/ogClient/clientstructure/root/qemu.sh deleted file mode 100755 index c5a93cd9..00000000 --- a/client/ogClient/clientstructure/root/qemu.sh +++ /dev/null @@ -1,9 +0,0 @@ -#/bin/bash - -mount -o rw,remount / -mount proc /proc -t proc -export PATH=$PATH dpkg -i *.deb -modprobe 8139too -modprobe 8139cp -dhclient -/etc/init.d/ssh restart \ No newline at end of file diff --git a/client/ogClient/clientstructure/var/lib/locales/supported.d/local b/client/ogClient/clientstructure/var/lib/locales/supported.d/local deleted file mode 100644 index be3f2a41..00000000 --- a/client/ogClient/clientstructure/var/lib/locales/supported.d/local +++ /dev/null @@ -1,5 +0,0 @@ -es_ES ISO-8859-1 -es_ES@euro ISO-8859-15 -es_ES.UTF-8 UTF-8 -es_ES.UTF-8@euro UTF-8 -en_US.UTF-8 UTF-8 \ No newline at end of file diff --git a/client/ogClient/kernelParameterOG.es.txt b/client/ogClient/kernelParameterOG.es.txt deleted file mode 100644 index 890652b4..00000000 --- a/client/ogClient/kernelParameterOG.es.txt +++ /dev/null @@ -1,29 +0,0 @@ - -KERNEL ogclient/ogvmlinuz -initrd=ogclient/oginitrd.img - - - boot=oginit - - oginit=init|/bin/bash - - - ogrepo=ip del repositorio - - og2nd=sqfs|img - ogprotocol=smb|nfs - ogactiveadmin=true|false - ogdebug=true|false - - vga=788 - irqpoll - acpi=on - - -FIXME: en la version actual -repo=iprepoman -IP - -TODO: en la proxima version -ogrepo -ip \ No newline at end of file diff --git a/client/ogClient/ogClientGeneratorV2.sh b/client/ogClient/ogClientGeneratorV2.sh deleted file mode 100755 index 21449267..00000000 --- a/client/ogClient/ogClientGeneratorV2.sh +++ /dev/null @@ -1,166 +0,0 @@ -#!/bin/bash -#@file ogClientGenerator.sh -#@brief Script generación del cliente OpenGnSys -#@warning -#@version 0.9 - -#@author Antonio J. Doblas Viso. -#@date 2010/05/24 -#*/ - - -#$1 OSCONENAME lucid karmic -#if [ $# -ne 1 ]; then -# echo ": invalid number of parameters" -# echo " host | lucid | karmic | jaunty | lenny | squeeze " -# exit 1 -#fi -TYPECLIENT=host - -# Solo ejecutable por usuario root -if [ "$(whoami)" != 'root' ] -then - echo "ERROR: this program must run under root privileges!!" - exit 1 -fi - - - -#FIXME: variables del instalador oficial. -WORKDIR=/tmp/opengnsys_installer -INSTALL_TARGET=/opt/opengnsys -LOG_FILE=/tmp/opengnsys_installation.log -PROGRAMDIR=$(readlink -e $(dirname "$0")) - - -#funciones especificas del cliente. -source $PROGRAMDIR/ogClientManager.lib -#funciones incluidas dentro del scritps general de instalacion. -source $PROGRAMDIR/ogInstaller.lib - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" -########################################################################## -## FASE 1 - Instalación de software adicional. -##TO DO Integrar en el instaldor. Actualizar repositorios -# Datos para la generación del cliente. -DEPENDENCIES=( debootstrap subversion schroot squashfs-tools) -apt-get update -# Instalación de dependencias (paquetes de sistema operativo). -declare -a notinstalled -checkDependencies DEPENDENCIES notinstalled -if [ $? -ne 0 ]; then - installDependencies notinstalled - if [ $? -ne 0 ]; then - echoAndLog "Error while installing some dependeces, please verify your server installation before continue" - exit 1 - fi -fi -############## FIN DEL TO DO -############################################## FIN FASE 1 - - - - - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" - -############## FASE 2 - Asignación de variables -#obtenemos las variables necesarias. -ogClientVar -#obtenemos la información del host. -ogClientOsInfo -######################## FIN fase 2 - -############# FASE 3: Segundo Sistema archivos (img) Creación. -#TODO comprobacion de que el fichero esta creado. -file $OGCLIENTFILE | grep "partition 1: ID=0x83" -if [ $? == 1 ] -then - ##3.1 creación y formateo del disco virtual. generamos el dispositivo loop. - ogClient2ndFile || exit 1 -fi - - -#3.2 generamos el Sistema de archivos con debootstrap -# Comprobamos que ya tenemos alguno. -schroot -p -c IMGogclient -- touch /tmp/ogclientOK -if [ -f /tmp/ogclientOK ] -then - rm /tmp/ogclientOK -else - ogClient2ndFs $TYPECLIENT || exit -fi - - -############### FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot -cat /etc/schroot/schroot.conf | grep ogclient || ogClientSchrootConf - - -############### FASE 5: Configuración del Segundo Sistema de archivos (img) con la estructura especial de OpenGnsys -ogClient2ndSVN $TYPECLIENT || exit - - - - -############# FASE6: Ejecutamos los scripts de personalización del 2º sistema de archivos (img) desde la jaula schroot -### 6.1 instalacion de software con apt-get -schroot -p -c IMGogclient -- /root/InstallSoftware.sh -echo "saltando" - if [ $? -ne 0 ]; then - errorAndLog "Instalando sofware adicional OG : ERROR" - exit -else - echoAndLog "Instalando sofware adicional OG: OK" -fi -#### 6.2 compilación de software. -cd / -schroot -p -c IMGogclient -- /root/CompileSoftware.sh -cd - - -### 6.3 configuracion hostname passroot securety -cd / -schroot -c IMGogclient -- /root/ConfFS.sh -cd - -#schroot -c IMGogclient -- echo -ne "og1\nog1\n" | passwd root -# schroot -c IMGogclient -- passwd root | echo "root" - - -### 6.4 incorporamos la clave publica del servidor -cd / -ssh-keygen -q -f /root/.ssh/id_rsa -N "" -cp /root/.ssh/id_rsa.pub /tmp -schroot -p -c IMGogclient -- /root/importSshKeys.sh -cd - -############ y la del propio cliente. -schroot -c IMGogclient -- /root/generateSshKeysClient.sh - -## configuramos los locales. -schroot -c IMGogclient -- /root/ReconfigureLocales.sh - - -################## FIN fase 6. Fin de comfiguración del segundo sistema de archivos (img) - -################## FASE 7. Generamos el 1er sistema de archivos. INITRD -#nota el parametro es el "tipo" de linux generado en debootstrap. usar solo "host", es decir version,kernel ... del propio host -#nota: hace un schroot, al 2fs (img), ejecuta el fichero generateinitrd. -#nota: deja en el directorio tmp del host el nuevo initrd, y lo copia al tftpboot -ogClientInitrd $TYPECLIENT - - -################## FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) -# generamos el 2sistema de archivos en squashfs -ogClient2ndSqfs -################## FIN FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs) - - -##################### FASE 9. algunos detallas del pxe -#dejamos ficheros de ejemplo para el pxe y el nfs -ogClientConfpxe -##################### FIN FASE 9. algunos detallas del pxe - - -# Mostrar sumario de la instalación e instrucciones de post-instalación. -installationSummary - -echoAndLog "OpenGnSys installation finished at $(date)" \ No newline at end of file diff --git a/client/ogClient/ogClientManager.lib b/client/ogClient/ogClientManager.lib deleted file mode 100644 index 85cd868f..00000000 --- a/client/ogClient/ogClientManager.lib +++ /dev/null @@ -1,607 +0,0 @@ - -ogClientVar() -{ -export SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/installer/ogClient -export SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared -export SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine - -export OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ -export OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img -export OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount -# tamaño maximo limitado por schroot 2GB -export OGCLIENTSIZEMB=1900 -#export OGCLIENTSIZEMB=1000 -# export OGCLIENTSIZEKB=500 -export OGCLIENTLABEL=ogClient -#export OGLIB=/opt/opengnsys/client/lib -} - - - -function ogClientOsInfo () -{ -#TODO según host, un OSHHTP u otro OSARCH - #1 OSCODENAME jaunty|karmic|lucid - #devuelve OSDISTRIB(ubuntu,debian),OSCODENAME(lucid,karmic,squeeze):OGRELEASE:httpAPT - case $1 in - host | HOST) - export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') - export OSRELEASE=$(uname -a | awk '{print $3}') - uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" - ;; - jaunty|JAUNTY) - export OSDISTRIB=ubuntu - export OSCODENAME=jaunty - export OSRELEASE="2.6.28-11-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" - ;; - lenny|LENNY) - export OSDISTRIB=debian - export OSCODENAME=lenny - export OSRELEASE="2.6.28-11-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - squeeze|SQUEEZE) - export OSDISTRIB=debian - export OSCODENAME=squeeze - export OSRELEASE="2.6.28-11-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - karmic|KARMIC) - export OSDISTRIB=ubuntu - export OSCODENAME=karmic - export OSRELEASE="2.6.31-14-generic" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - lucid|LUCID) - export OSDISTRIB=ubuntu - export OSCODENAME=lucid - export OSRELEASE="2.6.32-21-generic-pae" - export OSARCH=i386 - export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ " - ;; - *) - return 1 - ;; - esac - echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP -} - -#creación y formateo del disco virtual. -ogClient2ndFile () -{ -local RERROR DISKLOOP PARTLOOP #return code error -echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $OGCLIENTSIZEMB MB " -#Desmontamos por si acaso el dispositivo virtual -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $OGCLIENTMOUNT" -mkdir -p $OGCLIENTMOUNT -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Creando directorio $OGCLIENTMOUNT : ERROR" - return 1 -fi -echo "$FUNCNAME(): Creando el disco virtual que almacenará el FS del cliente $OGCLIENTSIZEMB MB de datos físicos" -dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB -#qemu-img create $OGCLIENTFILE 3G -#dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Creando el disco virtual: ERROR" - return 1 -fi - -DISKLOOP=$(losetup -f) -losetup $DISKLOOP $OGCLIENTFILE -echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria" -echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP -#echo $? -# da error, porque no puede actualizar el kernel. -#if [ $? -ne 0 ] -#then -# errorAndLog "$FUNCNAME(): Particionando el disco virutal: ERROR" -# return 1 -#fi - -echoAndLog "$FUNCNAME(): Desmontando $DISKLOOP despues del particionado " -losetup -d $DISKLOOP - -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR" - return 1 -fi - - -#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 -#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 -PARTLOOP=$(losetup -f) -echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP" -losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext3 -b 4096 -L $OGCLIENTLABEL $PARTLOOP -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR" - return 1 -fi -echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo " -losetup -d $PARTLOOP -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR" - return 1 -else - echoAndLog "$FUNCNAME(): $OGCLIENTFILE $OGCLIENTSIZEMB MB : OK" -fi -} - - - - - -ogClient2ndFs () -{ -ogClientOsInfo $1 -echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos " -#Montamos el dispositivo virtual en su punto de montaje. -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - -mount | grep $OGCLIENTMOUNT && echoAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 : FAILURE " - -#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} -debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} - - -if [ $? -ne 0 ]; then - errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP - : ha fallado!" - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - return 1 -else - echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP - : ok" - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - return 0 -fi - sleep 5 - -##preubas revisar OSRELEASE -#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ -#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ -#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ -} - - - - -########## configura el segundo sistema de archivos -########### parametro: "host" -function ogClient2ndSVN() -{ -ogClientOsInfo $1 -#1 la salida de ogClientOsInfo -local LERROR -LERROR=TRUE -echoAndLog "$FUNCNAME: Iniciando la personalización con datos del SVN " -# comprobar que está montado $OGCLIENTMOUNT -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - -# parseamos del apt.source -sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Parsing apt.sources : ERROR" - return 1 -fi - -#parseamos el script de generación del initrd. -sed -e "s/OSRELEASE/$OSRELEASE/g" ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.sh -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Parsing GenerateInitrd.sh : ERROR" - return 1 -fi - -#damos permiso al directorio de scripts -chmod 775 ${SVNCLIENTDIR}/clientstructure/root/* - -# los copiamos -cp -prv ${SVNCLIENTDIR}/clientstructure/* $OGCLIENTMOUNT -mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/ -cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/ -cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/ - -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Copying client data : ERROR" - return 1 -fi - -# copiamos algunas cosas del nfsexport - -#### Tipos de letra para el Browser. -cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/lib/fonts -#### Crear enlaces para compatibilidad con las distintas versiones del Browser. -mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ -mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ -mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/ -ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts -ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/QtEmbedded-4.6.2/lib/fonts -ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/QtEmbedded-4.6.3/lib/fonts -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Linking Browser fonts : ERROR" - return 1 -fi - -# B ######################################################## -cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Copying pci.ids : ERROR" - return 1 -fi - -cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Copying Browser : ERROR" - return 1 -fi - -cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin -if [ $? -ne 0 ] -then - errorAndLog "$FUNCNAME(): Copying ogAdmClient : ERROR" - return 1 -else - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - echoAndLog "$FUNCNAME: Finalizado: OK " - return 0 -fi -} - - -ogClientSchrootConf() -{ -echoAndLog "$FUNCNAME: Iniciando la configuración del schroot " -cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` -cat << EOF > /etc/schroot/schroot.conf -[IMGogclient] -type=loopback -file=/var/lib/tftpboot/ogclient/ogclient.img -description=ogclient ubuntu luc IMGi -priority=1 -users=root -groups=root -root-groups=root -mount-options=-o offset=32256 -root-users=root -[DIRogclient] -type=directory -directory=/var/lib/tftpboot/ogclient/ogclientmount -description=ogclient ubuntu lucid DIR -priority=2 -users=root -groups=root -root-groups=root -root-users=root -EOF -cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime` -cat << EOF > /etc/schroot/mount-defaults -# mount.defaults: static file system information for chroots. -# Note that the mount point will be prefixed by the chroot path -# (CHROOT_PATH) -# -# -proc /proc proc defaults 0 0 -#procbususb /proc/bus/usb usbfs defaults 0 0 -#/dev /dev none rw,bind 0 0 -/dev/pts /dev/pts none rw,bind 0 0 -/dev/shm /dev/shm none rw,bind 0 0 -#/home /home none rw,bind 0 0 -/tmp /tmp none rw,bind 0 0 -EOF - -echoAndLog "$FUNCNAME: Finalizado: OK " -return 0 -} - - - -########### param1 "host" -ogClientInitrd() -{ -ogClientVar -cd / -ogClientOsInfo $1 -schroot -c IMGogclient -- /root/GenerateInitrd.generic.sh -echo "cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR" -cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR -cp /tmp/initrd.img-${OSRELEASE} ${OGCLIENTBASEDIR}/oginitrd.img -cp /tmp/vmlinuz-${OSRELEASE} ${OGCLIENTBASEDIR}/ogvmlinuz -cd - -} - - -ogClient2ndSqfs() -{ -ogClientVar -echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs " -# si ya existe un sqfs lo renombramos -[ -f $OGCLIENTBASEDIR/ogclient.sqfs ] && mv $OGCLIENTBASEDIR/ogclient.sqfs $OGCLIENTBASEDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S` -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 -mksquashfs $OGCLIENTMOUNT $OGCLIENTBASEDIR/ogclient.sqfs -chmod 744 $OGCLIENTBASEDIR/ogclient.sqfs -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -} - - - - -ogClientSshkeys() -{ -echo comprobamos clave rsa en el host REPO OG. -if [ ! -f /root/.ssh/id_rsa.pub ] -then - echo "creando claves rsa" - ssh-keygen -q -f /root/.ssh/id_dsa -t dsa -N "opengnsys" -else - echo "la claves ya estan creadas" -fi -echo "copiamos la clave publica a /tmp" -cp /root/.ssh/id_dsa.pub /tmp - -cat /tmp/id_dsa.pub - -echo "schroot con instrucciones." -schroot -c IMGogclient -- /root/importSshKeys.sh - -echo "limpiando" -rm /tmp/id_dsa.pub - -## copiamos ssh rsa del host al guest como authorized-key2 -##rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -##cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -##mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT -} - - -ogClientConfpxe() -{ -################## DEJAMOS FICHERO DE EJEMPLOS PARA: -#default -cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient -LABEL pxe-${OGRELEASE} -KERNEL ogclient/vmlinuz-$OGRELEASE -APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= -LABEL pxe-2.6.32-21-generic-pae -KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae -APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs -LABEL cache -KERNEL grub.exe -APPEND --config-file="find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img" -LABEL net -KERNEL grub.exe -APPEND keeppxe --config-file="pxe detect; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae" -LABEL IfNOTcacheGOnet -KERNEL grub.exe -APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot" -#LABEL pxe-2.6.32-21-generic-pae -#KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae -#APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=172.17.32.242 -#LABEL grub -#KERNEL grub.exe -#APPEND keeppxe -FIN -#/etc/hosts -echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient -/etc/init.d/nfs-kernel-server restart -##################################################################### -} - - - -############### No usados en el instalador, solo en actualizaciones. -#/** -# ogClientMount [str_program] -#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones -#@return Si no hay parametros: login de acceso. -#@return con un parametro: La salida del programa ejecutado -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## -function ogClientMount () -{ - #TODO comprobar que OGFILE y OGFILEMOUNT existe. - mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc - mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys - mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp - mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev - mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts - - - [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`) - [ $# = 1 ] && chroot $OGCLIENTMOUNT $1 - -} - -#/** -# ogClientUnmount -#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys -#@param -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientUnmount () -{ - cd /tmp - echo "desmontando cliente espere" - sleep 5 - mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount - mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount - mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount - mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount - mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount - mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount - #-d -f -l - -} - - -############################ hasta el final del archivo antiguos -############################# ANTIGUOS -function ogClientGetRelease () -{ - #1 OSCODENAME jaunty|karmic|lucid - case $1 in - jaunty|JAUNTY) - OSCODENAME=jaunty - OGRELEASE="2.6.28-11-generic" - echo $OGRELEASE - ;; - lenny|LENNY) - OSCODENAME=lenny - OGRELEASE="2.6.28-11-generic" - echo $OGRELEASE - ;; - squeeze|SQUEEZE) - OSCODENAME=squeeze - OGRELEASE="2.6.28-11-generic" - echo $OGRELEASE - ;; - karmic|KARMIC) - OSCODENAME=karmic - OGRELEASE="2.6.31-14-generic" - echo $OGRELEASE - ;; - lucid|LUCID) - OSCODENAME=lucid - OGRELEASE="2.6.32-21-generic-pae" - echo $OGRELEASE - ;; - *) - return 1 - ;; - esac - -} - - -#/** -# ogClientGenerator str_versionUbuntu str_release -#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Versión de ubuntu a generar, jaunty karmic -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientGeneratorDebootstrap () -{ - if [ $# != 2 ] - then - echo Debes introducir como argumento1: jaunty karmic lucid - echo Debes introducir como argumento2: la release - echo utiliza como entrada ogClientCheckVersion - return - fi - OSCODENAME=$1 - OGRELEASE=$2 - - # instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema - #apt-get install gdebi-core - #wget $LASTDEBOOTSTRAP - #gdebi -n debootstrap_1.0.20_all.deb - - #Desmontamos por si acaso el dispositivo virtual - mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT - - #Creamos el directorio donde montaremos el disco virtual - mkdir -p $OGCLIENTMOUNT - - #Creamos el disco virtual con el filesystem del cliente. - dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB - #qemu-img create $OGCLIENTFILE 3G - #dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB - - - #particionamos el disco virtual - losetup /dev/loop0 $OGCLIENTFILE - echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk /dev/loop0 - losetup -d /dev/loop0 - - - #formateamos la particion principal. - losetup -o 32256 /dev/loop1 $OGCLIENTFILE - mkfs.ext3 -b 4096 -L $OGCLIENTLABEL /dev/loop1 - #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 - #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1 - losetup -d /dev/loop1 - - #Montamos el dispositivo virtual en su punto de montaje. - mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 - - #TODO Comprobar arquitectura - #Iniciamos la creación del sistema en el directorio de clientes. - #echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - debootstrap --include=linux-image-${OGRELEASE},linux-headers-${OGRELEASE} --arch=i386 --components=main,universe $OSCODENAME $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - ##preubas - #debootstrap --include=linux-image-${OGRELEASE} --arch=i386 --variant=minbase $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - #debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ - - if [ $? -ne 0 ]; then - errorAndLog "ogClientGeneratorDebootstrap(): ha fallado!" - return 1 - else - echoAndLog "ogClientGeneratorDebootstrap(): ok" - return 0 - fi - sleep 5 - -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTFILE - -cat << EOF > /etc/schroot/schroot.conf -[DIRogclient] -type=directory -directory=/var/lib/tftpboot/ogclient/ogclientmount -description=ogclient ubuntu lucid DIR -priority=2 -users=root -groups=root -root-groups=root -root-users=root -EOF -} - - - - - diff --git a/client/ogClient/ogInstaller.lib b/client/ogClient/ogInstaller.lib deleted file mode 100644 index af0f18df..00000000 --- a/client/ogClient/ogInstaller.lib +++ /dev/null @@ -1,958 +0,0 @@ -#!/bin/bash - - -##################################################################### -####### Algunas funciones útiles de propósito general: -##################################################################### -function getDateTime() -{ - echo `date +%Y%m%d-%H%M%S` -} - -# Escribe a fichero y muestra por pantalla -function echoAndLog() -{ - echo $1 - FECHAHORA=`getDateTime` - echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE -} - -function errorAndLog() -{ - echo "ERROR: $1" - FECHAHORA=`getDateTime` - echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE -} - -# comprueba si el elemento pasado en $2 esta en el array $1 -function isInArray() -{ - if [ $# -ne 2 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - echoAndLog "${FUNCNAME}(): checking if $2 is in $1" - local deps - eval "deps=( \"\${$1[@]}\" )" - elemento=$2 - - local is_in_array=1 - # copia local del array del parametro 1 - for (( i = 0 ; i < ${#deps[@]} ; i++ )) - do - if [ "${deps[$i]}" = "${elemento}" ]; then - echoAndLog "isInArray(): $elemento found in array" - is_in_array=0 - fi - done - - if [ $is_in_array -ne 0 ]; then - echoAndLog "${FUNCNAME}(): $elemento NOT found in array" - fi - - return $is_in_array - -} - -##################################################################### -####### Funciones de manejo de paquetes Debian -##################################################################### - -function checkPackage() -{ - package=$1 - if [ -z $package ]; then - errorAndLog "checkPackage(): parameter required" - exit 1 - fi - echoAndLog "checkPackage(): checking if package $package exists" - dpkg -s $package | grep Status | grep -qw install &>/dev/null - if [ $? -eq 0 ]; then - echoAndLog "checkPackage(): package $package exists" - return 0 - else - echoAndLog "checkPackage(): package $package doesn't exists" - return 1 - fi -} - -# recibe array con dependencias -# por referencia deja un array con las dependencias no resueltas -# devuelve 1 si hay alguna dependencia no resuelta -function checkDependencies() -{ - if [ $# -ne 2 ]; then - errorAndLog "checkDependencies(): invalid number of parameters" - exit 1 - fi - - echoAndLog "checkDependencies(): checking dependences" - uncompletedeps=0 - - # copia local del array del parametro 1 - local deps - eval "deps=( \"\${$1[@]}\" )" - - declare -a local_notinstalled - - for (( i = 0 ; i < ${#deps[@]} ; i++ )) - do - checkPackage ${deps[$i]} - if [ $? -ne 0 ]; then - local_notinstalled[$uncompletedeps]=$package - let uncompletedeps=uncompletedeps+1 - fi - done - - # relleno el array especificado en $2 por referencia - for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ )) - do - eval "${2}[$i]=${local_notinstalled[$i]}" - done - - # retorna el numero de paquetes no resueltos - echoAndLog "checkDependencies(): dependencies uncompleted: $uncompletedeps" - return $uncompletedeps -} - -# Recibe un array con las dependencias y lo instala -function installDependencies() -{ - if [ $# -ne 1 ]; then - errorAndLog "installDependencies(): invalid number of parameters" - exit 1 - fi - echoAndLog "installDependencies(): installing uncompleted dependencies" - - # copia local del array del parametro 1 - local deps - eval "deps=( \"\${$1[@]}\" )" - - local string_deps="" - for (( i = 0 ; i < ${#deps[@]} ; i++ )) - do - string_deps="$string_deps ${deps[$i]}" - done - - if [ -z "${string_deps}" ]; then - errorAndLog "installDependencies(): array of dependeces is empty" - exit 1 - fi - - OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND - export DEBIAN_FRONTEND=noninteractive - - echoAndLog "installDependencies(): now ${string_deps} will be installed" - apt-get -y install --force-yes ${string_deps} - if [ $? -ne 0 ]; then - errorAndLog "installDependencies(): error installing dependencies" - return 1 - fi - - DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND - echoAndLog "installDependencies(): dependencies installed" -} - -# Hace un backup del fichero pasado por parámetro -# deja un -last y uno para el día -function backupFile() -{ - if [ $# -ne 1 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local fichero=$1 - local fecha=`date +%Y%m%d` - - if [ ! -f $fichero ]; then - errorAndLog "${FUNCNAME}(): file $fichero doesn't exists" - return 1 - fi - - echoAndLog "${FUNCNAME}(): realizando backup de $fichero" - - # realiza una copia de la última configuración como last - cp -p $fichero "${fichero}-LAST" - - # si para el día no hay backup lo hace, sino no - if [ ! -f "${fichero}-${fecha}" ]; then - cp -p $fichero "${fichero}-${fecha}" - fi - - echoAndLog "${FUNCNAME}(): backup realizado" -} - -##################################################################### -####### Funciones para el manejo de bases de datos -##################################################################### - -# This function set password to root -function mysqlSetRootPassword() -{ - if [ $# -ne 1 ]; then - errorAndLog "mysqlSetRootPassword(): invalid number of parameters" - exit 1 - fi - - local root_mysql=$1 - echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server" - /usr/bin/mysqladmin -u root password ${root_mysql} - if [ $? -ne 0 ]; then - errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server" - return 1 - fi - echoAndLog "mysqlSetRootPassword(): root password saved!" - return 0 -} - -# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente -function mysqlGetRootPassword(){ - local pass_mysql - local pass_mysql2 - # Comprobar si MySQL está instalado con la clave de root por defecto. - if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then - echoAndLog "${FUNCNAME}(): Using default mysql root password." - else - stty -echo - echo "Existe un servicio mysql ya instalado" - read -p "Insertar clave de root de Mysql: " pass_mysql - echo "" - read -p "Confirmar clave:" pass_mysql2 - echo "" - stty echo - if [ "$pass_mysql" == "$pass_mysql2" ] ;then - MYSQL_ROOT_PASSWORD=$pass_mysql - echo "La clave es: ${MYSQL_ROOT_PASSWORD}" - return 0 - else - echo "Las claves no coinciden no se configura la clave del servidor de base de datos." - echo "las operaciones con la base de datos daran error" - return 1 - fi - fi -} - -# comprueba si puede conectar con mysql con el usuario root -function mysqlTestConnection() -{ - if [ $# -ne 1 ]; then - errorAndLog "mysqlTestConnection(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - echoAndLog "mysqlTestConnection(): checking connection to mysql..." - echo "" | mysql -uroot -p"${root_password}" - if [ $? -ne 0 ]; then - errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!" - return 1 - else - echoAndLog "mysqlTestConnection(): connection success" - return 0 - fi -} - -# comprueba si la base de datos existe -function mysqlDbExists() -{ - if [ $# -ne 2 ]; then - errorAndLog "mysqlDbExists(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - echoAndLog "mysqlDbExists(): checking if $database exists..." - echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$" - if [ $? -ne 0 ]; then - echoAndLog "mysqlDbExists():database $database doesn't exists" - return 1 - else - echoAndLog "mysqlDbExists():database $database exists" - return 0 - fi -} - -function mysqlCheckDbIsEmpty() -{ - if [ $# -ne 2 ]; then - errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..." - num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l` - if [ $? -ne 0 ]; then - errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password" - exit 1 - fi - - if [ $num_tablas -eq 0 ]; then - echoAndLog "mysqlCheckDbIsEmpty():database $database is empty" - return 0 - else - echoAndLog "mysqlCheckDbIsEmpty():database $database has tables" - return 1 - fi - -} - - -function mysqlImportSqlFileToDb() -{ - if [ $# -ne 3 ]; then - errorAndLog "${FNCNAME}(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - local sqlfile=$3 - - if [ ! -f $sqlfile ]; then - errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!" - return 1 - fi - - echoAndLog "${FUNCNAME}(): importing sql file to ${database}..." - perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DEFAULTUSER/$OPENGNSYS_DB_DEFAULTUSER/g; s/DEFAULTPASSWD/$OPENGNSYS_DB_DEFAULTPASSWD/g" $sqlfile - mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $sqlfile - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database" - return 1 - fi - echoAndLog "${FUNCNAME}(): file imported to database $database" - return 0 -} - -# Crea la base de datos -function mysqlCreateDb() -{ - if [ $# -ne 2 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local database=$2 - - echoAndLog "${FUNCNAME}(): creating database..." - mysqladmin -u root --password="${root_password}" create $database - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while creating database $database" - return 1 - fi - echoAndLog "${FUNCNAME}(): database $database created" - return 0 -} - - -function mysqlCheckUserExists() -{ - if [ $# -ne 2 ]; then - errorAndLog "mysqlCheckUserExists(): invalid number of parameters" - exit 1 - fi - - local root_password="${1}" - local userdb=$2 - - echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..." - echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user - if [ $? -ne 0 ]; then - echoAndLog "mysqlCheckUserExists(): user doesn't exists" - return 1 - else - echoAndLog "mysqlCheckUserExists(): user already exists" - return 0 - fi - -} - -# Crea un usuario administrativo para la base de datos -function mysqlCreateAdminUserToDb() -{ - if [ $# -ne 4 ]; then - errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters" - exit 1 - fi - - local root_password=$1 - local database=$2 - local userdb=$3 - local passdb=$4 - - echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}" - - cat > $WORKDIR/create_${database}.sql < ${basetftp}/pxelinux.cfg/default < /dev/null - if [ $? -eq 0 ]; then - echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting" - return 0 - fi - - cadenaexport="${export}" - for parametro in $* - do - if [ $contador -gt 0 ] - then - host=`echo $parametro | awk -F: '{print $1}'` - options=`echo $parametro | awk -F: '{print $2}'` - if [ "${host}" == "" ]; then - errorAndLog "${FUNCNAME}(): host can't be empty" - return 1 - fi - cadenaexport="${cadenaexport}\t${host}" - - if [ "${options}" != "" ]; then - cadenaexport="${cadenaexport}(${options})" - fi - fi - let contador=contador+1 - done - - echo -en "$cadenaexport\n" >> /etc/exports - - echoAndLog "${FUNCNAME}(): add $export to /etc/exports" - - return 0 -} - -######################################################################## -## Configuracion servicio DHCP -######################################################################## - -function dhcpConfigure() -{ - echoAndLog "${FUNCNAME}(): Sample DHCP Configuration." - - backupFile /etc/dhcp3/dhcpd.conf - - sed -e "s/SERVERIP/$SERVERIP/g" \ - -e "s/NETIP/$NETIP/g" \ - -e "s/NETMASK/$NETMASK/g" \ - -e "s/NETBROAD/$NETBROAD/g" \ - -e "s/ROUTERIP/$ROUTERIP/g" \ - -e "s/DNSIP/$DNSIP/g" \ - $WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while configuring dhcp server" - return 1 - fi - - /etc/init.d/dhcp3-server restart - echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"." - return 0 -} - - -##################################################################### -####### Funciones específicas de la instalación de Opengnsys -##################################################################### - -# Copiar ficheros del OpenGnSys Web Console. -function installWebFiles() -{ - echoAndLog "${FUNCNAME}(): Installing web files..." - cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para doxigen - if [ $? != 0 ]; then - errorAndLog "${FUNCNAME}(): Error copying web files." - exit 1 - fi - find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null - # Cambiar permisos para ficheros especiales. - chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \ - $INSTALL_TARGET/www/includes \ - $INSTALL_TARGET/www/comandos/gestores/filescripts \ - $INSTALL_TARGET/www/images/iconos - echoAndLog "${FUNCNAME}(): Web files installed successfully." -} - -# Configuración específica de Apache. -function openGnsysInstallWebConsoleApacheConf() -{ - if [ $# -ne 2 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local path_opengnsys_base=$1 - local path_apache2_confd=$2 - local path_web_console=${path_opengnsys_base}/www - - if [ ! -d $path_apache2_confd ]; then - errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation" - return 1 - fi - - mkdir -p $path_apache2_confd/{sites-available,sites-enabled} - - echoAndLog "${FUNCNAME}(): creating apache2 config file.." - - - # genera configuración - cat > $path_opengnsys_base/etc/apache.conf < - Options -Indexes FollowSymLinks - DirectoryIndex acceso.php - -EOF - - ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf - ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation" - return 1 - else - echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon" - /etc/init.d/apache2 restart - return 0 - fi -} - -# Crear documentación Doxygen para la consola web. -function makeDoxygenFiles() -{ - echoAndLog "${FUNCNAME}(): Making Doxygen web files..." - $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \ - $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www - if [ ! -d "$INSTALL_TARGET/www/html" ]; then - errorAndLog "${FUNCNAME}(): unable to create Doxygen web files." - return 1 - fi - mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api" - chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api - echoAndLog "${FUNCNAME}(): Doxygen web files created successfully." -} - - -# Crea la estructura base de la instalación de opengnsys -function openGnsysInstallCreateDirs() -{ - if [ $# -ne 1 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local path_opengnsys_base=$1 - - echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base" - - mkdir -p $path_opengnsys_base - mkdir -p $path_opengnsys_base/admin/{autoexec,comandos,menus,usuarios} - mkdir -p $path_opengnsys_base/bin - mkdir -p $path_opengnsys_base/client - mkdir -p $path_opengnsys_base/doc - mkdir -p $path_opengnsys_base/etc - mkdir -p $path_opengnsys_base/lib - mkdir -p $path_opengnsys_base/log/clients - mkdir -p $path_opengnsys_base/sbin - mkdir -p $path_opengnsys_base/www - mkdir -p $path_opengnsys_base/images - ln -fs /var/lib/tftpboot $path_opengnsys_base - ln -fs $path_opengnsys_base/log /var/log/opengnsys - - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" - return 1 - fi - - echoAndLog "${FUNCNAME}(): directory paths created" - return 0 -} - -# Copia ficheros de configuración y ejecutables genéricos del servidor. -function openGnsysCopyServerFiles () { - if [ $# -ne 1 ]; then - errorAndLog "${FUNCNAME}(): invalid number of parameters" - exit 1 - fi - - local path_opengnsys_base=$1 - - local SOURCES=( client/boot/initrd-generator \ - client/boot/upgrade-clients-udeb.sh \ - client/boot/udeblist.conf \ - client/boot/udeblist-jaunty.conf \ - client/boot/udeblist-karmic.conf \ - client/boot/udeblist-lucid.conf \ - server/PXE/pxelinux.cfg/default \ - doc ) - local TARGETS=( bin/initrd-generator \ - bin/upgrade-clients-udeb.sh \ - etc/udeblist.conf \ - etc/udeblist-jaunty.conf \ - etc/udeblist-karmic.conf \ - etc/udeblist-lucid.conf \ - tftpboot/pxelinux.cfg/default \ - doc ) - - if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then - errorAndLog "${FUNCNAME}(): inconsistent number of array items" - exit 1 - fi - - echoAndLog "${FUNCNAME}(): copying files to server directories" - - pushd $WORKDIR/opengnsys - local i - for (( i = 0; i < ${#SOURCES[@]}; i++ )); do - if [ -f "${SOURCES[$i]}" ]; then - echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" - cp -p "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}" - elif [ -d "${SOURCES[$i]}" ]; then - echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" - cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}" - else - echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}" - fi - done - popd -} - -#################################################################### -### Funciones de compilación de códifo fuente de servicios -#################################################################### - -# Compilar los servicios de OpenGNsys -function servicesCompilation () -{ - local hayErrores=0 - - # Compilar OpenGnSys Server - echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server" - pushd $WORKDIR/opengnsys/admin/Services/ogAdmServer - make && make install - if [ $? -ne 0 ]; then - echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server" - hayErrores=1 - fi - popd - # Compilar OpenGnSys Repository Manager - echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager" - pushd $WORKDIR/opengnsys/admin/Services/ogAdmRepo - make && make install - if [ $? -ne 0 ]; then - echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager" - hayErrores=1 - fi - popd - # Compilar OpenGnSys Client - echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client" - pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient - make && mv ogAdmClient ../../../client/nfsexport/bin - if [ $? -ne 0 ]; then - echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client" - hayErrores=1 - fi - popd - - return $hayErrores -} - - -#################################################################### -### Funciones instalacion cliente opengnsys -#################################################################### - -function openGnsysClientCreate() -{ - local OSDISTRIB OSCODENAME - - local hayErrores=0 - - echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." - cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client - find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null - echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." - mkdir -p $INSTALL_TARGET/client/lib/engine/bin - cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while copying engine files" - hayErrores=1 - fi - - # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). - OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then - echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME." - $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME" - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" - hayErrores=1 - fi - echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME." - $INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME" - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" - hayErrores=1 - fi - else - echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files." - $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/ - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" - hayErrores=1 - fi - echoAndLog "${FUNCNAME}(): Loading default udeb files." - $INSTALL_TARGET/bin/upgrade-clients-udeb.sh - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" - hayErrores=1 - fi - fi - - if [ $hayErrores -eq 0 ]; then - echoAndLog "${FUNCNAME}(): Client generation success." - else - errorAndLog "${FUNCNAME}(): Client generation with errors" - fi - - return $hayErrores -} - - -# Configuración básica de servicios de OpenGnSys -function openGnsysConfigure() -{ - echoAndLog "openGnsysConfigure(): Copying init files." - cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys - cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.default /etc/default/opengnsys - update-rc.d opengnsys defaults - echoAndLog "openGnsysConfigure(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"." - perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmServer.cfg - perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg - echoAndLog "${FUNCNAME}(): Creating Web Console config file" - OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys" - perl -pi -e "s/SERVERIP/$SERVERIP/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php - sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Services/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg - echoAndLog "openGnsysConfiguration(): Starting OpenGnSys services." - /etc/init.d/opengnsys start -} - - -##################################################################### -####### Función de resumen informativo de la instalación -##################################################################### - -function installationSummary(){ - echo - echoAndLog "OpenGnSys Installation Summary" - echo "==============================" - echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)" - echoAndLog "Installation directory: $INSTALL_TARGET" - echoAndLog "Repository directory: $INSTALL_TARGET/images" - echoAndLog "TFTP configuracion directory: /var/lib/tftpboot" - echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf" - echoAndLog "NFS configuracion file: /etc/exports" - echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" - echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER" - echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD" - echoAndLog "Web Console default user: $OPENGNSYS_DB_DEFAULTUSER" - echoAndLog "Web Console default password: $OPENGNSYS_DB_DEFAULTPASSWD" - echo - echoAndLog "Post-Installation Instructions:" - echo "===============================" - echoAndLog "Review or edit all configuration files." - echoAndLog "Insert DHCP configuration data and restart service." - echoAndLog "Log-in as Web Console admin user." - echoAndLog " - Review default Organization data and default user." - echoAndLog "Log-in as Web Console organization user." - echoAndLog " - Insert OpenGnSys data (rooms, computers, etc)." -echo -} - diff --git a/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib b/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib deleted file mode 100755 index 14806b7e..00000000 --- a/client/ogClient/old/ModificacionesNecesiariasENGINE/Net.lib +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -#/** -#@file Net.lib -#@brief Librería o clase Net -#@class Net -#@brief Funciones básicas de red. -#@version 1.0 -#@warning License: GNU GPLv3+ -#*/ - - -#/** -# ogGetHostname -#@brief Muestra el nombre del cliente. -#@return str_host - nombre de máquina -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetHostname () -{ -local HOST NETFILE -# Tomar nombre de la variable HOSTNAME -HOST="$HOSTNAME" - -# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) -[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} - END {print host} - ' /var/lib/dhcp3/dhclient.leases) -# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ -[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} - $1~/hostname/ {print $2}' /proc/cmdline) - -[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" -echo $HOST -} - - -#/** -# ogGetIpAddress -#@brief Muestra la dirección IP del sistema -#@return str_ip - Dirección IP -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetIpAddress () -{ -local IP -#Version og2ndFS -NETFILE="/tmp/net-eth0.conf" -[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) - -# Obtener direcciones IP. /* (comentario para Doxygen) -[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') -# Mostrar sólo la primera. (comentario para Doxygen) */ -echo ${IP%% *} -} - - -#/** -# ogGetMacAddress -#@brief Muestra la dirección Ethernet del cliente. -#@return str_ether - Dirección Ethernet -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetMacAddress () -{ -local MAC -# Obtener direcciones Ethernet. -MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') -# Mostrar sólo la primera. -echo ${MAC%% *} -} - diff --git a/client/ogClient/old/ModificacionesNecesiariasENGINE/readme b/client/ogClient/old/ModificacionesNecesiariasENGINE/readme deleted file mode 100644 index 9078de1b..00000000 --- a/client/ogClient/old/ModificacionesNecesiariasENGINE/readme +++ /dev/null @@ -1,27 +0,0 @@ -Moverse al etc del cliente. -cd /opt/opengnsys/client/etc - -preinit/default - modificamos el sha-bang a /bin/bash - eliminamos enlace del bash - Ejecute solo el loadmodules del for - -preinit/loaenviron - comentamos el LD_PATH - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/opt/drbl/sbin - - -dejar en bin solo el browser y el ogadmcliente - -/var/lib/tftboot/pxelinux.cfg/default -DEFAULT pxe2 -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin -LABEL pxe2 -KERNEL vmlinuz-2.6.32-21-generic-pae -APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 - - -parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN -temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/ogClient/old/Net.lib b/client/ogClient/old/Net.lib deleted file mode 100755 index 14806b7e..00000000 --- a/client/ogClient/old/Net.lib +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -#/** -#@file Net.lib -#@brief Librería o clase Net -#@class Net -#@brief Funciones básicas de red. -#@version 1.0 -#@warning License: GNU GPLv3+ -#*/ - - -#/** -# ogGetHostname -#@brief Muestra el nombre del cliente. -#@return str_host - nombre de máquina -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetHostname () -{ -local HOST NETFILE -# Tomar nombre de la variable HOSTNAME -HOST="$HOSTNAME" - -# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) -[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} - END {print host} - ' /var/lib/dhcp3/dhclient.leases) -# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ -[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} - $1~/hostname/ {print $2}' /proc/cmdline) - -[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" -echo $HOST -} - - -#/** -# ogGetIpAddress -#@brief Muestra la dirección IP del sistema -#@return str_ip - Dirección IP -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetIpAddress () -{ -local IP -#Version og2ndFS -NETFILE="/tmp/net-eth0.conf" -[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) - -# Obtener direcciones IP. /* (comentario para Doxygen) -[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') -# Mostrar sólo la primera. (comentario para Doxygen) */ -echo ${IP%% *} -} - - -#/** -# ogGetMacAddress -#@brief Muestra la dirección Ethernet del cliente. -#@return str_ether - Dirección Ethernet -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetMacAddress () -{ -local MAC -# Obtener direcciones Ethernet. -MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') -# Mostrar sólo la primera. -echo ${MAC%% *} -} - diff --git a/client/ogClient/old/boot/default.sh b/client/ogClient/old/boot/default.sh deleted file mode 100755 index e8c5b5d2..00000000 --- a/client/ogClient/old/boot/default.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/opt/opengnsys/bin/bash - -set -a - -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} -#### FIXME EN PRUEBAS -OGLOGFILE=/var/log/opengnsys.log - -/opt/opengnsys/etc/init/load2fs.sh -source /opt/opengnsys/etc/preinit/loadenviron.sh -export PATH=/opt/og2fs/bin:$PATH -export PATH=/opt/og2fs/sbin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - echo "$MSG_LAUNCHCLIENT" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -fi - -bash -# FIXME Arranque Browser -#browser -qws $OGSTARTPAGE diff --git a/client/ogClient/old/boot/load2fs.sh b/client/ogClient/old/boot/load2fs.sh deleted file mode 100644 index ca3e3be7..00000000 --- a/client/ogClient/old/boot/load2fs.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -#/** -#@file load2fs.sh -#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Antonio J. Doblas Viso, Unviersidad de Malaga. -#@date 2010-02-15 -#*/ -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro -cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -export PATH=/opt/og2fs/sbin:$PATH -export PATH=/opt/og2fs/bin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/ogClient/old/conframfs.sh b/client/ogClient/old/conframfs.sh deleted file mode 100644 index 851928d5..00000000 --- a/client/ogClient/old/conframfs.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -#/** -#@file conframfs.sh -#@brief Script de inicio para configurar el 2º FileSystem linkado. -#@version 1.0 -#@author Antonio J. Doblas Viso. Universidad de Málaga -#@date 2010-06-02 -#*/ -#sustituido por la funcion ogPostConfigureFS - -MSG_LOADMODULES=${MSG_CONFRAMFS:-"."} -echo "$MSG_CONFRAMFS" - -# configuramos el /etc/hostname. -HOSTNAME=$(ogGetHostname) -echo $HOSTNAME > /etc/hostname - - -#configuramos el /etc/hosts -IP=$(ogGetIpAddress) -echo "127.0.0.1 localhost" > /etc/hosts -echo "$IP $HOSTNAME" >> /etc/hosts - -### conft net -echo "auto lo " > /etc/network/interfaces -echo "iface lo inet loopback" >> /etc/network/interfaces - - -mkdir -p /var/run/network -cd /var/run/network -touch ifstate - -/etc/init.d/networking restart -ifup lo diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox deleted file mode 100755 index da2dc637..00000000 Binary files a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox and /dev/null differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox deleted file mode 100755 index d04890f6..00000000 Binary files a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox and /dev/null differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root deleted file mode 100755 index aecb5e32..00000000 Binary files a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root and /dev/null differ diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions deleted file mode 100644 index 2610f79a..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions +++ /dev/null @@ -1,461 +0,0 @@ -# -*- shell-script -*- - -catenate_cpiogz() { - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 - return - fi - - cat "${1}" >>"${__TMPCPIOGZ}" -} - -force_load() -{ - manual_add_modules ${@} - echo "${@}" >>"${DESTDIR}/conf/modules" -} - -# Takes a file containing a list of modules to be added as an -# argument, figures out dependancies, and adds them. -# -# Input file syntax: -# -# # comment -# modprobe_module_name [args ...] -# [...] -# -add_modules_from_file() -{ - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 - return - fi - - sed -e '/^#/d' ${1} | while read module rest; do - force_load "${module}" "${rest}" - done -} - -# Is this module available? -have_module() -{ - modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" >/dev/null 2>&1 -} - -# Add dependent modules + eventual firmware -manual_add_modules() -{ - local mam_x firmwares firmware - - for mam_x in $(modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do - # Prune duplicates - if [ -e "${DESTDIR}/${mam_x}" ]; then - continue - fi - - mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" - ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" - if [ "${verbose}" = "y" ]; then - echo "Adding module ${mam_x}" - fi - - # Add firmware files if necessary - firmwares=$(modinfo -F firmware "${mam_x}") - if [ -z "${firmwares}" ]; then - continue - fi - for firmware in $firmwares; do - if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ - || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then - continue - fi - - # Only print warning for missing fw of loaded module - # or forced loaded module - if [ ! -e "/lib/firmware/${firmware}" ] \ - && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then - if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ - /proc/modules \ - || grep -q "^$(basename "${mam_x}" .ko)" \ - "${CONFDIR}/modules"; then - echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 - fi - continue - fi - - if [ -e "/lib/firmware/${version}/${firmware}" ]; then - copy_exec "/lib/firmware/${version}/${firmware}" - else - copy_exec "/lib/firmware/${firmware}" - fi - if [ "${verbose}" = "y" ]; then - echo "Adding firmware ${firmware}" - fi - done - done -} - -# $1 is the source path (e.g. /usr/bin/time) -# $2 is the relative destination (e.g. /usr or /usr/time) -# -# The destination is interpreted in the same way "cp" would, meaning -# (assuming /bin is a directory): -# -# "copy_exec /usr/bin/time /bin" -> /bin/time -# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime -# -# If $2 is left out, the same destination path as for the source arg will -# be used and directories will be created as needed, so: -# -# "copy_exec /usr/bin/time" -> /usr/bin/time -# -copy_exec() { - local source target destination final_destination x nonoptlib - local libname dirname - - source="${1}" - if [ -n "${2}" ]; then - target="${2}" - else - if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then - mkdir -p "${DESTDIR}/$(dirname "${1}")" - fi - target="${1}" - fi - - if [ -d "${DESTDIR}/${target}" ]; then - destination="${target}/$(basename "${source}")" - else - destination="${target}" - fi - final_destination="${DESTDIR}/${destination}" - - if [ -L "$final_destination" ]; then - if [ $(readlink "${final_destination}") != "${source}" ]; then - echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 - return - fi - else - ln -s ${source} ${DESTDIR}/${destination} - if [ "${verbose}" = "y" ]; then - echo "Adding binary ${source}" - fi - fi - - # Copy the dependant libraries - for x in $(ldd ${source} 2>/dev/null | sed -e ' - /\//!d; - /linux-gate/d; - /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; - s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do - - # Try to use non-optimised libraries where possible. - # We assume that all HWCAP libraries will be in tls, - # sse2, vfp or neon - nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') - - if [ -e "${nonoptlib}" ]; then - x="${nonoptlib}" - fi - - libname=$(basename "${x}") - dirname=$(dirname "${x}") - - mkdir -p "${DESTDIR}/${dirname}" - if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then - ln -s "${x}" "${DESTDIR}/${dirname}" - if [ "${verbose}" = "y" ]; then - echo "Adding library ${x}" - fi - fi - done -} - -# Copy entire subtrees to the initramfs -copy_modules_dir() -{ - local x_mod - - if ! [ -d "${MODULESDIR}/${1}" ]; then - return; - fi - if [ "${verbose}" = "y" ]; then - echo "Copying module directory ${1}" - fi - for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do - manual_add_modules $(basename ${x_mod} .ko) - done -} - -# walk /sys for relevant modules -sys_walk_mod_add() -{ - local driver_path module - device_path="$1" - - while [ "${device_path}" != "/sys" ]; do - driver_path="$(readlink -f ${device_path}/driver)" - if [ -e "$driver_path" ]; then - module="$(basename $(readlink -f $driver_path))" - if [ -n "${module}" ]; then - force_load "${module}" - fi - fi - device_path="$(dirname ${device_path})" - done -} - -# walk /sys for relevant modalias -sys_walk_modalias() -{ - local device_path modalias - - device_path="$(dirname "${1}")" - device_path="$(dirname "${device_path}")" - if [ -e "${device_path}/modalias" ]; then - modalias=$(cat "${device_path}/modalias") - fi - - if [ -n "${modalias}" ]; then - force_load "${modalias}" - fi -} - -# find and only copy root relevant modules -dep_add_modules() -{ - local block minor root FSTYPE root_dev_path x - - # findout root block device + fstype - eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" - if [ "${root}" = "/dev/root" ] ; then - root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null - fi - root="$(readlink -f ${root})" - - # find out real rootfs on auto type - if [ "${FSTYPE}" = "auto" ]; then - eval "$(/usr/lib/klibc/bin/fstype ${root})" - fi - - # check that fstype rootfs recognition - if [ "${FSTYPE}" = "unknown" ]; then - echo "mkinitramfs: unknown fstype on root ${root}" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report bug on initramfs-tools" - exit 1 - fi - - # Add rootfs - manual_add_modules "${FSTYPE}" - - # lvm luks root - if [ "${root#/dev/mapper/}" != "${root}" ]; then - minor=$((0x$(stat --format "%T" ${root}) % 256)) - block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) - if [ "${block#dm-}" != "${block}" ]; then - block=$(ls -1 /sys/block/${block}/slaves | head -n 1) - fi - block=${block%%[0-9]*} - # md root new naming scheme /dev/md/X - elif [ "${root#/dev/md/}" != "${root}" ]; then - root=${root#/dev/md/} - block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # md root /dev/mdX - elif [ "${root#/dev/md}" != "${root}" ]; then - root=${root#/dev/} - block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # mmc always uses numbering in the devicename (mmcblk[0-9]) - elif [ "${root#/dev/mmc}" != "${root}" ]; then - block=${root#/dev/} - block=${block%%p[0-9]*} - # classical root device - else - block=${root#/dev/} - block=${block%%[0-9]*} - fi - - # Error out if /sys lack block dev - if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then - echo "mkinitramfs: missing ${block} root ${root} /sys entry" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report the bug" - exit 1 - fi - - # sys walk ATA - root_dev_path=$(readlink -f /sys/block/${block}/device) - sys_walk_mod_add ${root_dev_path} - - # catch old-style IDE - if [ -e /sys/bus/ide/devices/ ]; then - sys_walk_modalias ${root_dev_path} - manual_add_modules ide-disk - manual_add_modules ide-cd - fi - - if [ -e /sys/bus/scsi/devices/ ]; then - manual_add_modules sd_mod - fi - - if [ -e /sys/bus/i2o/devices/ ]; then - force_load i2o_block - force_load i2o_config - fi - - if [ -e /sys/bus/ps3_system_bus/ ]; then - for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do - manual_add_modules "${x}" - done - fi - - if [ -e /sys/bus/vio/ ]; then - for x in sunvnet sunvdc; do - manual_add_modules "${x}" - done - fi -} - - -# The modules "most" classes added per default to the initramfs -auto_add_modules() -{ - case "$1" in - base) - for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ - hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ - hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ - hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ - hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ - ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ - virtio_pci vfat nls_cp437 nls_iso8859-1; do - manual_add_modules "${x}" - done - ;; - net) - for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ - cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ - ep93xx_eth eql fealnx famachi forcedeth gelic_net \ - hp100 igb ipg mace mv643xx_eth myri10ge \ - natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ - r8169 s2io sis900 skge sky2 slhc smc911x starfire \ - sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ - de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ - typhon via-rhine via-velocity virtio_net yellowfin; do - manual_add_modules "${x}" - done - ;; - ide) - copy_modules_dir kernel/drivers/ide - ;; - scsi) - copy_modules_dir kernel/drivers/scsi - for x in mptfc mptsas mptscsih mptspi; do - manual_add_modules "${x}" - done - ;; - ata) - copy_modules_dir kernel/drivers/ata - ;; - block) - copy_modules_dir kernel/drivers/block - copy_modules_dir kernel/drivers/usb/storage - ;; - # FIXME: can be removed after Lenny release - ieee1394) - for x in ohci1394 sbp2; do - manual_add_modules "${x}" - done - ;; - firewire) - for x in firewire-ohci firewire-sbp2; do - manual_add_modules "${x}" - done - ;; - i2o) - for x in i2o_block; do - manual_add_modules "${x}" - done - ;; - dasd) - for x in dasd_eckd_mod dasd_fba_mod; do - manual_add_modules "${x}" - done - ;; - *) - auto_add_modules base - auto_add_modules net - auto_add_modules ide - auto_add_modules scsi - auto_add_modules block - auto_add_modules ata - auto_add_modules i2o - auto_add_modules dasd - auto_add_modules ieee1394 - auto_add_modules firewire - ;; - esac -} - -usage() -{ - cat >&2 << EOF - -Usage: ${0} [OPTION]... <-o outfile> [version] - -Options: - -d confdir Specify an alternative configuration directory. - -k Keep temporary directory used to make the image. - -o outfile Write to outfile. - -r root Override ROOT setting in mkinitrd.conf. - -See mkinitramfs(8) for further details. -EOF - exit 1 - -} - -# minimal supported kernel version -check_minkver() -{ - local curversion initdir DPKG_ARCH minversion cm_x tmp - - curversion="${1}" - initdir="${2}" - if [ -z "${initdir}" ]; then - DPKG_ARCH=$(dpkg --print-architecture) - case ${DPKG_ARCH} in - ia64|hppa) - minversion="2.6.15" - ;; - *) - minversion="2.6.12" - ;; - esac - if dpkg --compare-versions "${curversion}" lt "${minversion}"; then - echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - return 0 - fi - set_initlist - for cm_x in ${initlist}; do - # sed: keep last line starting with MINKVER=, - # remove MINKVER= and trailing space - minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") - if [ -z "${tmp}" ]; then - continue - elif dpkg --compare-versions "${curversion}" lt "${minver}"; then - echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - done -} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache deleted file mode 100755 index 37fdd22e..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -set -e - -if [ "$1" = prereqs ]; then - exit 0 -fi - -. /usr/share/initramfs-tools/hook-functions - -number= -suffix= -eval $(printf "%s" "$COMPCACHE_SIZE" | \ - sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') - -if [ -z "$number" ] || [ -z "$suffix" ]; then - exit 0 -fi - -if have_module ramzswap; then - name=ramzswap - manual_add_modules ramzswap -elif have_module compcache; then - name=compcache - manual_add_modules compcache -else - exit 0 -fi - -copy_exec /sbin/swapon - -mkdir -p "$DESTDIR"/etc/udev/rules.d -cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." - -# Note that this only becomes /dev on the real filesystem if udev's scripts -# are used; which they will be, but it's worth pointing out -if ! mount -t devtmpfs -o mode=0755 none /dev; then - mount -t tmpfs -o mode=0755 none /dev - mknod -m 0600 /dev/console c 5 1 - mknod /dev/null c 1 3 -fi -mkdir /dev/pts -mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true -> /dev/.initramfs-tools -mkdir /dev/.initramfs - -# Export the dpkg architecture -export DPKG_ARCH= -. /conf/arch.conf - -# Set modprobe env -export MODPROBE_OPTIONS="-qb" - -# Export relevant variables -export ROOT= -export ROOTDELAY= -export ROOTFLAGS= -export ROOTFSTYPE= -export IPOPTS= -export HWADDR= -export break= -export init=/sbin/init -export quiet=n -export readonly=y -export rootmnt=/root -export debug= -export panic= -export blacklist= -export resume_offset= - -# Bring in the main config -. /conf/initramfs.conf -for conf in conf/conf.d/*; do - [ -f ${conf} ] && . ${conf} -done -. /scripts/functions - -# Parse command line options -for x in $(cat /proc/cmdline); do - case $x in - init=*) - init=${x#init=} - ;; - root=*) - ROOT=${x#root=} - case $ROOT in - LABEL=*) - ROOT="${ROOT#LABEL=}" - - # support / in LABEL= paths (escape to \x2f) - case "${ROOT}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" - else - if [ "${ROOT}" != "${ROOT#/}" ]; then - ROOT="\x2f${ROOT#/}" - fi - if [ "${ROOT}" != "${ROOT%/}" ]; then - ROOT="${ROOT%/}\x2f" - fi - IFS='/' - newroot= - for s in $ROOT; do - if [ -z "${newroot}" ]; then - newroot="${s}" - else - newroot="${newroot}\\x2f${s}" - fi - done - unset IFS - ROOT="${newroot}" - fi - esac - ROOT="/dev/disk/by-label/${ROOT}" - ;; - UUID=*) - ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" - ;; - /dev/nfs) - [ -z "${BOOT}" ] && BOOT=nfs - ;; - esac - ;; - rootflags=*) - ROOTFLAGS="-o ${x#rootflags=}" - ;; - rootfstype=*) - ROOTFSTYPE="${x#rootfstype=}" - ;; - rootdelay=*) - ROOTDELAY="${x#rootdelay=}" - case ${ROOTDELAY} in - *[![:digit:].]*) - ROOTDELAY= - ;; - esac - ;; - resumedelay=*) - RESUMEDELAY="${x#resumedelay=}" - ;; - loop=*) - LOOP="${x#loop=}" - ;; - loopflags=*) - LOOPFLAGS="-o ${x#loopflags=}" - ;; - loopfstype=*) - LOOPFSTYPE="${x#loopfstype=}" - ;; - cryptopts=*) - cryptopts="${x#cryptopts=}" - ;; - nfsroot=*) - NFSROOT="${x#nfsroot=}" - ;; - netboot=*) - NETBOOT="${x#netboot=}" - ;; - ip=*) - IPOPTS="${x#ip=}" - ;; - hwaddr=*) - HWADDR="${x#hwaddr=}" - ;; - boot=*) - BOOT=${x#boot=} - ;; - resume=*) - RESUME="${x#resume=}" - ;; - resume_offset=*) - resume_offset="${x#resume_offset=}" - ;; - noresume) - noresume=y - ;; - panic=*) - panic="${x#panic=}" - case ${panic} in - *[![:digit:].]*) - panic= - ;; - esac - ;; - quiet) - quiet=y - ;; - ro) - readonly=y - ;; - rw) - readonly=n - ;; - debug) - debug=y - quiet=n - exec >/dev/.initramfs/initramfs.debug 2>&1 - set -x - ;; - debug=*) - debug=y - quiet=n - set -x - ;; - break=*) - break=${x#break=} - ;; - break) - break=premount - ;; - blacklist=*) - blacklist=${x#blacklist=} - ;; - netconsole=*) - netconsole=${x#netconsole=} - ;; - esac -done - -if [ -z "${noresume}" ]; then - export resume=${RESUME} -else - export noresume -fi - -[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} - -maybe_break top - -# export BOOT variable value for compcache, -# so we know if we run from casper -export BOOT - -# Don't do log messages here to avoid confusing usplash -run_scripts /scripts/init-top - -maybe_break modules -log_begin_msg "Loading essential drivers..." -load_modules -log_end_msg - -maybe_break premount -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" -run_scripts /scripts/init-premount -[ "$quiet" != "y" ] && log_end_msg - -maybe_break mount -log_begin_msg "Mounting root file system..." -. /scripts/${BOOT} -parse_numeric ${ROOT} -mountroot -log_end_msg - -maybe_break bottom -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" -run_scripts /scripts/init-bottom -[ "$quiet" != "y" ] && log_end_msg - -# Move virtual filesystems over to the real filesystem -mount -n -o move /sys ${rootmnt}/sys -mount -n -o move /proc ${rootmnt}/proc - -# Check init bootarg -if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then - echo "Target filesystem doesn't have ${init}." - init= -fi - -# Search for valid init -if [ -z "${init}" ] ; then - for init in /sbin/init /etc/init /bin/init /bin/sh; do - if [ ! -x "${rootmnt}${init}" ]; then - continue - fi - break - done -fi - -# No init on rootmount -if [ ! -x "${rootmnt}${init}" ]; then - panic "No init found. Try passing init= bootarg." -fi - -# Confuses /etc/init.d/rc -if [ -n ${debug} ]; then - unset debug -fi - -# Chain to real filesystem -maybe_break init -exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 -panic "Could not execute run-init." diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules deleted file mode 100644 index 9aa46468..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules +++ /dev/null @@ -1,10 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions deleted file mode 100644 index 3bea0c97..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions +++ /dev/null @@ -1,420 +0,0 @@ -# -*- shell-script -*- - -_log_msg() -{ - if [ "$quiet" = "y" ]; then return; fi - echo "$@" -} - -log_success_msg() -{ - _log_msg "Success: $@" -} - -log_failure_msg() -{ - _log_msg "Failure: $@" -} - -log_warning_msg() -{ - _log_msg "Warning: $@" -} - -log_begin_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TEXT $@" - fi - _log_msg "Begin: $@ ..." -} - -log_end_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "SUCCESS ok" - fi - _log_msg "Done." -} - -# Add failure hook -add_mountroot_fail_hook() -{ - mkdir -p /tmp/mountroot-fail-hooks.d - ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" -} - -# Run failure hooks. -# When a failure hook exits "1", it has not done anything to correct the -# system. Exiting "0" means that something has been attempted to resolve -# the lack of a root filesystem. -# Hooks are run in lexigraphical order, and are responsible for removing -# themselves if they should not re-run in a later cycle. When one exits -# "0", the stack is stopped, so the caller can return to the main rootfs -# wait loop. -try_failure_hooks() -{ - local hook - - # Disable usplash so text from hooks can be seen - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - for hook in /tmp/mountroot-fail-hooks.d/*; do - if [ -x ${hook} ] && ${hook} mountfail; then - return 0 - fi - done - return 1 -} - -panic() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - # Disallow console access - if [ -n "${panic}" ]; then - sleep ${panic} - reboot - fi - - modprobe i8042 - modprobe atkbd - - run_scripts /scripts/panic - - echo $@ - PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 -} - -maybe_break() -{ - if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then - panic "Spawning shell within the initramfs" - fi -} - -render() -{ - eval "echo -n \${$@}" -} - -set_initlist() -{ - unset initlist - for si_x in ${initdir}/*; do - # skip empty dirs without warning - [ "${si_x}" = "${initdir}/*" ] && return - - # only allow variable name chars - case ${si_x#${initdir}/} in - *[![:alnum:]_]*) - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not alphanumeric or '_' file" - continue - ;; - esac - - # skip non executable scripts - if [ ! -x ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not executable" - continue - fi - - # skip directories - if [ -d ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: a directory" - continue - fi - - initlist="${initlist} ${si_x#${initdir}/}" - done -} - -reduce_satisfied() -{ - deplist="$(render array_${1})" - unset tmpdeplist - for rs_y in ${deplist}; do - # check if there are alternatives - case ${rs_y} in - *\|*) - OLD_IFS="$IFS" - IFS="|" - for rs_z in ${rs_y}; do - IFS="$OLD_IFS" - # only allow variable name chars - case ${rs_z} in - *[![:alnum:]_]*) - IFS="|" - continue - ;; - esac - # skip non executable scripts - if [ ! -x ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - # skip directories - if [ -d ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - tmpdeplist="${tmpdeplist} ${rs_z}" - break - done - IFS="$OLD_IFS" - ;; - *) - case ${rs_y} in - *[![:alnum:]_]*) - continue - ;; - esac - if [ ! -x ${initdir}/${rs_y} ]; then - continue - fi - if [ -d ${initdir}/${rs_y} ]; then - continue - fi - tmpdeplist="${tmpdeplist} ${rs_y}" - ;; - esac - done - deplist=${tmpdeplist} - for rs_x in ${runlist}; do - pop_list_item ${rs_x} ${deplist} - deplist=${tmppop} - done - eval array_${1}=\"${deplist}\" -} - -get_prereqs() -{ - set_initlist - for gp_x in ${initlist}; do - tmp=$(${initdir}/${gp_x} prereqs) - eval array_${gp_x}=\"${tmp}\" - done -} - -count_unsatisfied() -{ - set -- ${@} - return ${#} -} - -# Removes $1 from initlist -pop_list_item() -{ - item=${1} - shift - set -- ${@} - unset tmppop - # Iterate - for pop in ${@}; do - if [ ${pop} = ${item} ]; then - continue - fi - tmppop="${tmppop} ${pop}" - done - -} - -# This function generates the runlist, so we clear it first. -reduce_prereqs() -{ - unset runlist - set -- ${initlist} - i=$# - # Loop until there's no more in the queue to loop through - while [ ${i} -ne 0 ]; do - oldi=${i} - for rp_x in ${initlist}; do - reduce_satisfied ${rp_x} - count_unsatisfied $(render array_${rp_x}) - cnt=${?} - if [ ${cnt} -eq 0 ]; then - runlist="${runlist} ${rp_x}" - pop_list_item ${rp_x} ${initlist} - initlist=${tmppop} - i=$((${i} - 1)) - fi - done - if [ ${i} -eq ${oldi} ]; then - panic "PANIC: Circular dependancy. Exiting." - fi - done -} - -get_prereq_pairs() -{ - set_initlist - for gp_x in ${initlist}; do - echo ${gp_x} ${gp_x} - prereqs=$(${initdir}/${gp_x} prereqs) - for prereq in ${prereqs}; do - echo ${prereq} ${gp_x} - done - done -} - -call_scripts() -{ - for cs_x in ${runlist}; do - [ -f ${initdir}/${cs_x} ] || continue - if [ x"$1" = "xoptional" ]; then - option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") - [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue - fi - - # mkinitramfs verbose output - if [ "${verbose}" = "y" ]; then - echo "Calling hook ${cs_x}" - fi - ${initdir}/${cs_x} - # allow boot scripts to modify exported boot paramaters - if [ -e /conf/param.conf ]; then - . /conf/param.conf - fi - done -} - -run_scripts() -{ - initdir=${1} - [ ! -d ${initdir} ] && return - - if [ -f ${initdir}/ORDER ]; then - . ${initdir}/ORDER - elif [ -x /usr/bin/tsort ]; then - runlist=$(get_prereq_pairs | tsort) - call_scripts $2 - else - get_prereqs - reduce_prereqs - call_scripts $2 - fi -} - -cache_run_scripts() -{ - DESTDIR=${1} - scriptdir=${2} - initdir=${DESTDIR}${scriptdir} - [ ! -d ${initdir} ] && return - - runlist=$(get_prereq_pairs | tsort) - for crs_x in ${runlist}; do - [ -f ${initdir}/${crs_x} ] || continue - echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER - echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER - done -} - -# Load custom modules first -load_modules() -{ - if [ -e /conf/modules ]; then - cat /conf/modules | while read m; do - # Skip empty lines - if [ -z "$m" ]; then - continue - fi - # Skip comments - d?ash removes whitespace prefix - com=$(printf "%.1s" "${m}") - if [ "$com" = "#" ]; then - continue - fi - modprobe $m - done - fi -} - -# lilo compatibility -parse_numeric() { - case $1 in - "") - return - ;; - /*) - return - ;; - *:*) - minor=${1#*:} - major=${1%:*} - ;; - *) - value=$(( 0x${1} )) - minor=$(( ${value} % 256 )) - major=$(( ${value} / 256 )) - ;; - esac - - mknod -m 600 /dev/root b ${major} ${minor} - ROOT=/dev/root -} - -configure_networking() -{ - # networking already configured thus bail out - [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 - - if [ "${HWADDR}" ]; then - # select interface by MAC address - HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" - local iface - for iface in /sys/class/net/*; do - [ -f "$iface/address" ] || continue - if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then - DEVICE="${iface#/sys/class/net/}" - fi - done - fi - - # support ip options see linux sources - # Documentation/filesystems/nfsroot.txt - case ${IPOPTS} in - none|off) - # Do nothing - ;; - ""|on|any) - # Bring up device - ipconfig -t 60 ${DEVICE} - ;; - dhcp|bootp|rarp|both) - ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} - ;; - *) - ipconfig -t 60 -d $IPOPTS - - # grab device entry from ip option - NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} - if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then - NEW_DEVICE=${NEW_DEVICE%:*} - else - # wrong parse, possibly only a partial string - NEW_DEVICE= - fi - if [ -n "${NEW_DEVICE}" ]; then - DEVICE="${NEW_DEVICE}" - fi - ;; - esac - - # source ipconfig output - if [ -n "${DEVICE}" ]; then - # source specific bootdevice - . /tmp/net-${DEVICE}.conf - else - # source any interface as not exaclty specified - . /tmp/net-*.conf - fi -} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth deleted file mode 100755 index 8b1e7c8a..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] -then - /bin/plymouth update-root-fs --new-root-dir=${rootmnt} -fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev deleted file mode 100755 index f9d2ce9d..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -e -# initramfs init-bottom script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Stop udevd, we'll miss a few events while we run init, but we catch up -pkill udevd - -# Move /dev to the real filesystem -mount -n -o move /dev ${rootmnt}/dev diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 deleted file mode 100755 index e5bc78f1..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -# init-premount script for lvm2. - -PREREQS="udev mdadm" -prereqs() -{ - echo $PREREQS -} - -mountroot_fail() -{ - if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then - cat </dev/null; then - modprobe ata_generic all_generic_ide=1 -fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist deleted file mode 100755 index 5e6b3c1e..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -# blacklist vga16fb when vga= or video= given -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*|video=*) - echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs - ;; - esac -done - -# sanity check -[ -z "${blacklist}" ] && exit 0 - -# write blacklist to modprobe.d -IFS=',' -for b in ${blacklist}; do - echo "blacklist $b" >> /etc/modprobe.d/initramfs -done diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup deleted file mode 100755 index df767bb4..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup +++ /dev/null @@ -1,83 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -OPTION=FRAMEBUFFER -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer deleted file mode 100755 index bb59aadf..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - - -# The options part of the kernel "video=" argument (i.e. everyting -# after "video=:") has very inconsistent rules. -# -# Generally the following applies: -# 1) options are comma-separated -# 2) options can be in either of these three forms: -# =, :, . -# 3) the "mode" option has the form x[M][R][-][@][i][m] -# and may or may not start with "mode=" -# -# When the options are used with modules, they need to be space-separated -# and the following conversions are needed: -# : -> = -# -> =1 -# -> mode= -parse_video_opts() -{ - local OPTS="$1" - local IFS="," - - # Must be a line like video=:,[opt2]... - if [ "${OPTS}" = "${OPTS%%:*}" ]; then - return - fi - OPTS="${OPTS#*:}" - for opt in ${OPTS}; do - # Already in the "=" form - if [ "${opt}" != "${opt#*=}" ]; then - echo -n "$opt " - # In the ":" form - elif [ "${opt}" != "${opt#*:}" ]; then - echo -n "${opt%:*}=${opt#*:} " - # Presumably a modevalue without the "mode=" prefix - elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then - echo -n "mode=$opt " - # Presumably a boolean - else - echo -n "${opt}=1 " - fi - done -} - -FB="" -OPTS="" - -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*) - FB="vesafb"; - OPTS=""; - ;; - video=*) - FB=${x#*=} - FB="${FB%%:*}" - OPTS="$(parse_video_opts "${x}")" - esac -done - -# Map command line name to module name -case ${FB} in -matroxfb) - FB=matroxfb_base - ;; -esac - -if [ -n "${FB}" ]; then - # Some framebuffer devices need character devices :-/ - udevadm settle - MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} - # Wait for the framebuffer devices to be ready - udevadm settle -else - # If we have no graphics devices yet, wait for udev to settle - [ -d /sys/class/graphics/fbcon ] || udevadm settle - [ -d /sys/class/graphics/fb0 ] || udevadm settle - [ -d /sys/class/drm/card0 ] || udevadm settle -fi - -# Force fb mode via /sys interface -for x in $(cat /proc/cmdline); do - case ${x} in - fbmode=*) - MODE=${x#*=} - echo "$MODE" > /sys/class/graphics/fb0/mode - ;; - esac -done diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap deleted file mode 100755 index cb67aa96..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth deleted file mode 100755 index 813b6b4c..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="framebuffer console_setup brltty" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -printf '\033[?25l' > /dev/tty7 -/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid -/bin/plymouth show-splash diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev deleted file mode 100755 index cd2fa564..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -e -# initramfs init-top script for udev - -PREREQ="all_generic_ide blacklist" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# It's all over netlink now -echo "" > /proc/sys/kernel/hotplug - -# Start the udev daemon to process events -/sbin/udevd --daemon --resolve-names=never - -# Iterate sysfs and fire off everything; if we include a rule for it then -# it'll get handled; otherwise it'll get handled later when we do this again -# in the main boot sequence. -( /sbin/udevadm trigger --subsystem-match=block; \ - /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local deleted file mode 100644 index 865572b5..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local +++ /dev/null @@ -1,131 +0,0 @@ -# Local filesystem mounting -*- shell-script -*- - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" - run_scripts /scripts/local-top - [ "$quiet" != "y" ] && log_end_msg - - while [ -z "${FSTYPE}" ]; do - FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) - - # Run failure hooks, hoping one of them can fix up the system - # and we can restart the wait loop. If they all fail, abort - # and move on to the panic handler and shell. - if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then - break - fi - done - - # We've given up, but we'll let the user fix matters if they can - while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do - # give hint about renamed root - case "${ROOT}" in - /dev/hd*) - suffix="${ROOT#/dev/hd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/sd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" - fi - ;; - /dev/sd*) - suffix="${ROOT#/dev/sd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/hd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" - fi - ;; - esac - echo "Gave up waiting for root device. Common problems:" - echo " - Boot args (cat /proc/cmdline)" - echo " - Check rootdelay= (did the system wait long enough?)" - echo " - Check root= (did the system wait for the right device?)" - echo " - Missing modules (cat /proc/modules; ls /dev)" - panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" - done - - # Get the root filesystem type if not set - if [ -z "${ROOTFSTYPE}" ]; then - [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") - ROOTFSTYPE="${FSTYPE}" - else - FSTYPE="${ROOTFSTYPE}" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" - run_scripts /scripts/local-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ] && \ - [ -z "$LOOP" ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} - - # FIXME This has no error checking - # Mount root - mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} - mountroot_status="$?" - if [ "$LOOP" ]; then - if [ "$mountroot_status" != 0 ]; then - if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then - panic " -Could not mount the partition ${ROOT}. -This could also happen if the file system is not clean because of an operating -system crash, an interrupted boot process, an improper shutdown, or unplugging -of a removable device without first unmounting or ejecting it. To fix this, -simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then -gracefully shut down and reboot back into Windows. After this you should be -able to reboot again and resume the installation. -(filesystem = ${FSTYPE}, error code = $mountroot_status) -" - fi - fi - - mkdir -p /host - mount -o move ${rootmnt} /host - - while [ ! -e "/host/${LOOP#/}" ]; do - panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" - done - - # Get the loop filesystem type if not set - if [ -z "${LOOPFSTYPE}" ]; then - eval $(fstype < "/host/${LOOP#/}") - else - FSTYPE="${LOOPFSTYPE}" - fi - if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then - FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") - [ -z "$FSTYPE" ] && FSTYPE="unknown" - fi - - if [ ${readonly} = y ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - modprobe loop - modprobe ${FSTYPE} - - # FIXME This has no error checking - mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} - - if [ -d ${rootmnt}/host ]; then - mount -o move /host ${rootmnt}/host - fi - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" - run_scripts /scripts/local-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g deleted file mode 100755 index 335ef95e..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g +++ /dev/null @@ -1,16 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - mkdir -p /dev/.initramfs/varrun - pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit - pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit -fi - -exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc deleted file mode 100755 index c9fbc369..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/sh -e -# initramfs local-premount script for fixrtc - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - -# use the fixrtc cmdline option in your bootloader to -# automatically set the hardware clock to the date of -# the last mount of your root filesystem to avoid fsck -# to get confused by the superblock being in the future - -BROKEN_CLOCK="" -ROOTDEV="" - -for x in $(cat /proc/cmdline); do - case ${x} in - root=*) - value=${x#*=} - - # Find the device node path depending on the form of root= : - - case ${value} in - UUID=*) - ROOTDEV=/dev/disk/by-uuid/${value#UUID=} - ;; - LABEL=*) - ROOTDEV=/dev/disk/by-label/${value#LABEL=} - ;; - *) - ROOTDEV=${value} - ;; - esac - ;; - fixrtc) - BROKEN_CLOCK=1 - ;; - esac -done - -if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then - ROOTDISK=$(readlink -f "$ROOTDEV") && - - TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && - TIME=${TIMESTR#*:} && - - date --set="${TIME} 1 minute" >/dev/null 2>&1 -fi - -# This script is best-effort. If we couldn't fudge the clock as desired, -# just try to carry on boot anyway: -# It will probably fail, but we won't have made the situation any worse. -exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g deleted file mode 100755 index 57e7f8ba..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - modprobe fuse -fi - -exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume deleted file mode 100755 index 46535936..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -. ./scripts/functions - -if [ -z "${resume}" ]; then - exit 0 -fi - -case $resume in -LABEL=*) - resume="${resume#LABEL=}" - - # support any / in LABEL= path (escape to \x2f) - case "${resume}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - resume="$(echo ${resume} | sed 's,/,\\x2f,g')" - else - if [ "${resume}" != "${resume#/}" ]; then - resume="\x2f${resume#/}" - fi - if [ "${resume}" != "${resume%/}" ]; then - resume="${resume%/}\x2f" - fi - IFS='/' - newresume= - for s in $resume; do - if [ -z "${newresume}" ]; then - newresume="${s}" - else - newresume="${newresume}\\x2f${s}" - fi - done - unset IFS - resume="${newresume}" - fi - esac - resume="/dev/disk/by-label/${resume}" - ;; -UUID=*) - resume="/dev/disk/by-uuid/${resume#UUID=}" - ;; -esac - -SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) - -case "${SWAPTYPE}" in - swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) - if [ -x /bin/plymouth ] && plymouth --ping; then - plymouth message --text="Resuming from $resume" - fi - - # hardcode path, uswsusp ships an resume binary too - if [ -n "${resume_offset}" ]; then - /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 - else - /bin/resume ${resume} >/dev/null 2>&1 - fi - ;; -esac diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs deleted file mode 100644 index b9c2522d..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs +++ /dev/null @@ -1,83 +0,0 @@ -# NFS filesystem mounting -*- shell-script -*- - -# FIXME This needs error checking - -retry_nr=0 - -# parse nfs bootargs and mount nfs -do_nfsmount() -{ - - configure_networking - - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - - if [ -z "${NFSOPTS}" ]; then - NFSOPTS="-o retrans=10" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" - run_scripts /scripts/nfs-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ]; then - roflag="-o ro" - else - roflag="-o rw" - fi - - nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} -} - -# NFS root mounting -mountroot() -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" - run_scripts /scripts/nfs-top - [ "$quiet" != "y" ] && log_end_msg - - modprobe nfs - # For DHCP - modprobe af_packet - - # Default delay is around 180s - # FIXME: add usplash_write info - if [ -z "${ROOTDELAY}" ]; then - delay=180 - else - delay=${ROOTDELAY} - fi - - # loop until nfsmount succeds - while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do - [ ${retry_nr} -gt 0 ] && \ - [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" - do_nfsmount - retry_nr=$(( ${retry_nr} + 1 )) - [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 - [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg - done - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" - run_scripts /scripts/nfs-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev deleted file mode 100755 index 980e496f..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -e -# initramfs nfs-top script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Each call to udevsettle can take up to three minutes -if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TIMEOUT 360" - trap "/sbin/usplash_write 'TIMEOUT 15'" 0 -fi - -# We need to wait for the network card drivers to be loaded -/sbin/udevadm settle diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup deleted file mode 100755 index 5e97f65e..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup +++ /dev/null @@ -1,82 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap deleted file mode 100644 index f011abf5..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth deleted file mode 100755 index 2da5a6b5..00000000 --- a/client/ogClient/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -/bin/plymouth quit diff --git a/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm b/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm deleted file mode 100644 index 11d27f8c..00000000 --- a/client/ogClient/old/initramfs-tools-OG/conf.d/mdadm +++ /dev/null @@ -1,18 +0,0 @@ -# mdadm boot_degraded configuration -# -# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if -# you want. You can also change the values here and changes will be preserved. -# Do note that only the values are preserved; the rest of the file is -# rewritten. -# -# BOOT_DEGRADED: -# Do you want to boot your system if a RAID providing your root filesystem -# becomes degraded? -# -# Running a system with a degraded RAID could result in permanent data loss -# if it suffers another hardware fault. -# -# However, you might answer "yes" if this system is a server, expected to -# tolerate hardware faults and boot unattended. - -BOOT_DEGRADED=false diff --git a/client/ogClient/old/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/initramfs-tools-OG/conf.d/resume deleted file mode 100644 index 34fdc4a5..00000000 --- a/client/ogClient/old/initramfs-tools-OG/conf.d/resume +++ /dev/null @@ -1 +0,0 @@ -RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/ogClient/old/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/initramfs-tools-OG/hooks/oghooks deleted file mode 100755 index 3d9b04b8..00000000 --- a/client/ogClient/old/initramfs-tools-OG/hooks/oghooks +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash - - -# Insert OpenGnsys Engine -mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - diff --git a/client/ogClient/old/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/initramfs-tools-OG/initramfs.conf deleted file mode 100644 index 754e2bea..00000000 --- a/client/ogClient/old/initramfs-tools-OG/initramfs.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# initramfs.conf -# Configuration file for mkinitramfs(8). See initramfs.conf(5). -# - -# -# MODULES: [ most | netboot | dep | list ] -# -# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. -# -# dep - Try and guess which modules to load. -# -# netboot - Add the base modules, network modules, but skip block devices. -# -# list - Only include modules from the 'additional modules' list -# - -MODULES=most - -# -# BUSYBOX: [ y | n ] -# -# Use busybox if available. -# - -BUSYBOX=y - -# -# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] -# -# Amount of RAM to use for RAM-based compressed swap space. -# -# An empty value - compcache isn't used, or added to the initramfs at all. -# An integer and K (e.g. 65536 K) - use a number of kilobytes. -# An integer and M (e.g. 256 M) - use a number of megabytes. -# An integer and G (e.g. 1 G) - use a number of gigabytes. -# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. -# -# You can optionally install the compcache package to configure this setting -# via debconf and have userspace scripts to load and unload compcache. -# - -COMPCACHE_SIZE="" - -# -# NFS Section of the config. -# - -# -# BOOT: [ local | nfs ] -# -# local - Boot off of local media (harddrive, USB stick). -# -# nfs - Boot using an NFS drive as the root of the drive. -# - -BOOT=local - -# -# DEVICE: ... -# -# Specify the network interface, like eth0 -# - -DEVICE=eth0 - -# -# NFSROOT: [ auto | HOST:MOUNT ] -# - -NFSROOT=auto - diff --git a/client/ogClient/old/initramfs-tools-OG/modules b/client/ogClient/old/initramfs-tools-OG/modules deleted file mode 100644 index 484ef718..00000000 --- a/client/ogClient/old/initramfs-tools-OG/modules +++ /dev/null @@ -1,13 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -fbcon -vesafb -vga16b diff --git a/client/ogClient/old/initramfs-tools-OG/scripts/og b/client/ogClient/old/initramfs-tools-OG/scripts/og deleted file mode 100755 index 6408eda7..00000000 --- a/client/ogClient/old/initramfs-tools-OG/scripts/og +++ /dev/null @@ -1,140 +0,0 @@ -# OpenGnsys Local filesystem mounting -*- shell-script -*- - -ogLinkBusybox () -{ -for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do - ln -f /bin/busybox /bin/$n -done -ln -f /bin/busybox /bin/sh -} - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - - mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -configure_networking -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - -set -a -trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 -/opt/opengnsys/etc/preinit/default.sh - - - - - - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - run_scripts /scripts/og-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf deleted file mode 100644 index 3c27473b..00000000 --- a/client/ogClient/old/initramfs-tools-OG/update-initramfs.conf +++ /dev/null @@ -1,20 +0,0 @@ -# -# Configuration file for update-initramfs(8) -# - -# -# update_initramfs [ yes | all | no ] -# -# Default is yes -# If set to all update-initramfs will update all initramfs -# If set to no disables any update to initramfs beside kernel upgrade - -update_initramfs=yes - -# -# backup_initramfs [ yes | no ] -# -# Default is no -# If set to no leaves no .bak backup files. - -backup_initramfs=no diff --git a/client/ogClient/old/ogClientFunctions b/client/ogClient/old/ogClientFunctions deleted file mode 100755 index 8311cf3a..00000000 --- a/client/ogClient/old/ogClientFunctions +++ /dev/null @@ -1,255 +0,0 @@ -#!/bin/bash -#Definicion de variables -# TODO: Pendiente Definir directorio base del 2FS -OGBASEDIR=/var/lib/tftpboot/ogclient/ -OGFSFILE=${OGBASEDIR}ogclient.img -OGFSMOUNT=${OGBASEDIR}ogclientmount -OGLIB=/opt/opengnsys/client/lib -FSCLIENTSIZEMB=1000 -PASSROOT=og -SCRIPT=/root/configure.sh -RUNME=$OGFSMOUNT$SCRIPT -LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb -OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" -OGFSLABEL=ogClient - - - - -#/** -# ogClientMount [str_program] -#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones -#@return Si no hay parametros: login de acceso. -#@return con un parametro: La salida del programa ejecutado -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## -function ogClientMount () -{ -#TODO comprobar que OGFILE y OGFILEMOUNT existe. -mount $OGFSFILE $OGFSMOUNT -o loop -mount --bind /proc $OGFSMOUNT/proc -mount --bind /sys $OGFSMOUNT/sys -mount --bind /tmp $OGFSMOUNT/tmp -mount --bind /dev $OGFSMOUNT/dev -mount --bind /dev/pts $OGFSMOUNT/dev/pts -[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) -[ $# = 1 ] && chroot $OGFSMOUNT $1 -} - -#/** -# ogClientUnmount -#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys -#@param -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientUnmount () -{ -cd /tmp -umount -d -f -l $OGFSMOUNT/proc -umount -d -f -l $OGFSMOUNT/sys -umount -d -f -l $OGFSMOUNT/tmp -umount -d -f -l $OGFSMOUNT/dev -umount -d -f -l $OGFSMOUNT/dev/pts -umount -d -f -l $OGFSMOUNT -} - -function ogClientCheckVersion () -{ -#TODO: configurar la version lucid -#TODO: introducir un nuevo case para la vesion -case $1 in - jaunty|JAUNTY) - export OGVERSION=jaunty - exort OGRELEASE=2.6.28-11-generic - ;; - karmic|KARMIC) - export OGVERSION=karmic - export OGRELEASE=2.6.31-14-generic - ;; - lucid|LUCID) - export OGVERSION=lucid - export OGRELEASE=2.6.32-21-generic-pae - ;; -esac -echo $OGVERSION $OGRELEASE -} - - -#/** -# ogClientGenerator str_versionUbuntu str_release -#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Versión de ubuntu a generar, jaunty karmic -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientGeneratorDebootstrap () -{ - -if [ $# != 2 ] -then -echo Debes introducir como argumento1: jaunty karmic lucid -echo Debes introducir como argumento2: la release -echo utiliza como entrada ogClientCheckVersion -return -fi - -OGVERSION=`echo $1` -OGRELEASE=`echo $2` -echo $OGVERSION $OGRELEASE -pause - -# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema -apt-get install gdebi-core -wget $LASTDEBOOTSTRAP -gdebi -n debootstrap_1.0.20_all.deb - - -#Creamos el directorio donde montaremos el disco virtual -mkdir -p $OGFSMOUNT - -#Creamos el disco virtual con el filesystem del cliente. -dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB -mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F - -#Montamos el dispositivo virtual en su punto de montaje. -mount $OGFSFILE $OGFSMOUNT -o loop - -#TODO Comprobar arquitectura -#Iniciamos la creación del sistema en el directorio de clientes. -echo debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ -debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ - - - -} - - -###### Funciones para los clientes offline -function agregarOG { -cd $NEWROOT -mkdir -p opt/opengnsys -cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys -echo "agregando OG al newinitrd" -} - -function finalizarISO -{ - cd $ANTERIORPWD - mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz - if [ $LINUX ] ; then - mv $TMPINITRD/linux $DEST/linuxISO - fi -} - - -function CrearISO { -mkdir -p tmp/iso/isolinux -#cd tmp/iso/ -cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ -cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ -cp -prv /tmp/linux tmp/iso/isolinux/linuxISO -cp -prv /tmp/initrd.gz tmp/iso/isolinux/ -cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ - - -cat << FIN > tmp/iso/isolinux/isolinux.cfg -DEFAULT menu.c32 -PROMPT 0 -ALLOWOPTIONS 1 - -MENU TITLE FuTuR3 Live Collection - -LABEL gpxe -MENU LABEL gpxe -KERNEL /clonezilla/live/vmlinuz1 -APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia - - -#default 0 -#prompt 1 -#timeout 100 - -#display mensaje.txt - -LABEL 0 -MENU LABEL ogClient -KERNEL linuxISO -APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline - -LABEL 1 -MENU LABEL ogClient1 sin vga -KERNEL linuxISO -APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline - -LABEL 2 -MENU LABEL ogClient2 sin irqpoll -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline - -LABEL 3 -MENU LABEL ogClient3 acpi=off -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline - - -#LABEL ogclient -#KERNEL /ogclient/linuxISO -#APPEND initrd=/ogclient/initrdISO.img - -#KERNEL linuxISO -#APPEND initrd=initrdISO.img - -LABEL 4 -MENU LABEL local -localboot 0x80 -append - - - -label 5 -MENU LABEL Network boot via gPXE lkrn -KERNEL gpxe.lkrn - -label 5 -MENU LABEL Network boot via gPXE usb -KERNEL gpxe.usb - -label 5 -MENU LABEL Network boot via gPXE pxe -KERNEL gpxe.pxe - -label 5 -MENU LABEL Network boot via gPXE iso -KERNEL gpxe.iso -FIN -#### /tmp/iso# -mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso - -} - -function probarISO { -#/tmp/iso -qemu -m 256 -boot d -cdrom ogClient.iso -} - - - - diff --git a/client/ogClient/old/ogClientGenerator.sh b/client/ogClient/old/ogClientGenerator.sh deleted file mode 100755 index c7c654ae..00000000 --- a/client/ogClient/old/ogClientGenerator.sh +++ /dev/null @@ -1,306 +0,0 @@ -#!/bin/bash -#@file ogClientGenerator.sh -#@brief Script generación del cliente OpenGnSys -#@warning -#@version 0.9 - -#@author Antonio J. Doblas Viso. -#@date 2010/05/24 -#*/ - - - -if [ $# -ne 1 ]; then - echo ": invalid number of parameters" - echo " host | lucid | karmic | jaunty | lenny | squeeze " - exit 1 -fi - - - -# Soo ejecutable por usuario root -if [ "$(whoami)" != 'root' ] -then - echo "ERROR: this program must run under root privileges!!" - exit 1 -fi - -# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). -PROGRAMDIR=$(readlink -e $(dirname "$0")) -if [ -d "$PROGRAMDIR/../installer" ]; then - USESVN=0 -else - USESVN=1 - SVN_URL=svn://www.informatica.us.es:3690/opengnsys/branches/ogClient - #directorio donde se almacenará el codigo temporalmente. - SVN_DIR="./opengnsys/installer/ogClient" -fi - -WORKDIR=/tmp/opengnsys_installer -mkdir -p $WORKDIR -INSTALL_TARGET=/opt/opengnsys -LOG_FILE=/tmp/opengnsys_installation.log - -############################################### -pushd $WORKDIR - - -source `dirname $0`/ogInstaller.lib - - -if [ "$1" == "host" ] -then - OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') - OGRELEASE=$(uname -a | awk '{print $3}') -else - OSCODENAME=`echo $1` - OGRELEASE=`ogClientGetRelease $OSCODENAME` -fi - - - -OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ -OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img -OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount - -OGLIB=/opt/opengnsys/client/lib - - - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" - - -# Datos para la generación del cliente. -DEPENDENCIES=( debootstrap subversion schroot) - -## Actualizar repositorios -apt-get update -# Instalación de dependencias (paquetes de sistema operativo). -declare -a notinstalled -checkDependencies DEPENDENCIES notinstalled -if [ $? -ne 0 ]; then - installDependencies notinstalled - if [ $? -ne 0 ]; then - echoAndLog "Error while installing some dependeces, please verify your server installation before continue" - exit 1 - fi -fi - - - -# Si es necesario, descarga el repositorio especifico de la instalación del cliente -if [ $USESVN -eq 1 ]; then - #svnExportCode $SVN_URL - echo svn export "$SVN_URL" $SVN_DIR - #svn export "$SVN_URL" $SVN_DIR - #####debug boorrar el cp - #mkdir -p $SVN_DIR - #cp -prv /home/administrador/workspace/opengnsys/branches/ogClient/* $SVN_DIR - find $SVN_DIR/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null - ###TODO si ya esta descargado da error ??? - ###if [ $? -ne 0 ]; then - ### errorAndLog "Error while getting code from svn" - ### exit 1 - ###fi -else - ln -fs "$(dirname $PROGRAMDIR)" opengnsys -fi - -#### Parseo de ficheros descargados del svn. -# parseamos del apt.source -if [ "$1" == host ] -then - cp /etc/apt/sources.list ${SVN_DIR}/clientstructure/etc/apt/sources.list -else - sed -e "s/OGVERSION/$OGVERSION/g" ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic > ${SVN_DIR}/clientstructure/etc/apt/sources.list - #rm ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic -fi -if [ $? -ne 0 ]; then - errorAndLog "parseando el fichero apt.source: ERROR" -else - echoAndLog "parseando el fichero apt.source: OK" -fi - -#parseamos el scripts de generación del initrd. -sed -e "s/OGRELEASE/$OGRELEASE/g" ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVN_DIR}/clientstructure/root/GenerateInitrd.sh -#rm ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh -if [ $? -ne 0 ]; then - errorAndLog "parseando el fichero de cliente GenerateInitrd: ERROR" -else - echoAndLog "parseando el fichero de cliente GenerateInitrd: OK" -fi - - - -#damos permiso al directorio de scripts -chmod 775 ${SVN_DIR}/clientstructure/root/* -if [ $? -ne 0 ]; then - errorAndLog "Dando permisos de escritura al directorio de scrips para el cliente: ERROR" -else - echoAndLog "Dando permisos de escritura al directorio de scrips para el cliente: OK" -fi - - -#####PASO 1. Generamos el 2º sistema de archivos. -echo "generamos el sistema base con debootstrap" -if [ "$1" == host ] -then - echo ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE -# ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE -else - echo ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE - ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE -fi -if [ $? -ne 0 ]; then - errorAndLog "Generando 2nd FileSystem: ERROR" -else - echoAndLog "Generando 2nd FileSystem: OK" -fi - -########################################## - -cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` -cat << EOF > /etc/schroot/schroot.conf -[IMGogclient] -type=loopback -file=/var/lib/tftpboot/ogclient/ogclient.img -description=ogclient ubuntu luc IMGi -priority=1 -users=root -groups=root -root-groups=root -mount-options=-o offset=32256 -root-users=root -[DIRogclient] -type=directory -directory=/var/lib/tftpboot/ogclient/ogclientmount -description=ogclient ubuntu lucid DIR -priority=2 -users=root -groups=root -root-groups=root -root-users=root -EOF - - - -####PASO 2 Insertamos datos en el 2º sistema de archivos -#2.1 montamos para insertar los ficheros necesarios. -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 -if [ $? -ne 0 ]; then - errorAndLog "Montando 2nd FileSystem Para Añadir elementos OG: ERROR" - exit 1 -else - echoAndLog "Montando 2nd FileSystem Para Añadir elementos OG: OK" -fi - -#2.2 copiamos la estrucutra descargada al fichero imagen. -echo "cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT " -cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT -if [ $? -ne 0 ]; then - errorAndLog "Copiando los elementos del cliente svn: ERROR" - exit 1 -else - echoAndLog "Copiando los elementos del cliente svn: OK" -fi - -#2.3 Copiamos algunas cosas del actual sistema - ver de que manera integrar los lib -# copiamos algunas cosas del nfsexport -echo "Linking fonts for browser1 $OGLIB" -mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ -cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts -echo "Linking fonts for browser2 $OGLIB" -mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ -cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts -echo "Coping pci.ids" -cp -pr $OGLIB/pci.ids $OGCLIENTMOUNT/etc -#copiamos el browser y el ogADMcline al bin -cp /opt/opengnsys/client/bin/browser $OGCLIENTMOUNT/bin -cp /opt/opengnsys/client/bin/ogAdmClient $OGCLIENTMOUNT/bin -if [ $? -ne 0 ]; then - errorAndLog "Copiando qt pci.ids fonts: ERROR" - exit 1 -else - echoAndLog "Copiando qt pci.ids fonts: OK" -fi - - -## final desmontamos. -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -if [ $? -ne 0 ]; then - errorAndLog "Desmontando cliente : ERROR" - exit 1 -else - echoAndLog "desmontando cliente: OK" -fi - -################## Fin paso 2 - -popd - -######## instalamos software adicional. -#ogClientMount /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` -cd / -schroot -c IMGogclient -- /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` - -if [ $? -ne 0 ]; then - errorAndLog "Instalando sofware adicional OG : ERROR" - #exit 1 -else - echoAndLog "Instalando sofware adicional OG: OK" -fi -cd - - -#cd / -#schroot -c IMGogclient -- /root/CompileSoftware.sh -#cd - - -### configuracion hostname passroot securety -cd / -schroot -c IMGogclient -- /root/ConfFS.sh -cd - - -##2.4 claves ssh -sshkeys() -{ -##montamos -mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 -##comprobamos clave rsa en el host,. -if [ ! -f /root/.ssh/id_rsa.pub ] -then - ssh-keygen -q -f /root/.ssh/id_rsa -N "" -fi -## copiamos ssh rsa del host al guest como authorized-key2 -rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT -} - -### Generamos el 1er sistema de archivos. -cd / -schroot -c IMGogclient -- /root/GenerateInitrd.sh -cp /tmp/*-${OGRELEASE} $OGCLIENTBASEDIR -cd - - - - -################## DEJAMOS FICHERO DE EJEMPLOS PARA: -#default -cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient -LABEL pxe-${OGRELEASE} -KERNEL ogclient/vmlinuz-$OGRELEASE -APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= -FIN -#/etc/hosts -echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient -/etc/init.d/nfs-kernel-server restart -##################################################################### - -# Mostrar sumario de la instalación e instrucciones de post-instalación. -installationSummary - -#rm -rf $WORKDIR -echoAndLog "OpenGnSys installation finished at $(date)" - diff --git a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib deleted file mode 100755 index 14806b7e..00000000 --- a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -#/** -#@file Net.lib -#@brief Librería o clase Net -#@class Net -#@brief Funciones básicas de red. -#@version 1.0 -#@warning License: GNU GPLv3+ -#*/ - - -#/** -# ogGetHostname -#@brief Muestra el nombre del cliente. -#@return str_host - nombre de máquina -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetHostname () -{ -local HOST NETFILE -# Tomar nombre de la variable HOSTNAME -HOST="$HOSTNAME" - -# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) -[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} - END {print host} - ' /var/lib/dhcp3/dhclient.leases) -# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ -[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} - $1~/hostname/ {print $2}' /proc/cmdline) - -[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" -echo $HOST -} - - -#/** -# ogGetIpAddress -#@brief Muestra la dirección IP del sistema -#@return str_ip - Dirección IP -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetIpAddress () -{ -local IP -#Version og2ndFS -NETFILE="/tmp/net-eth0.conf" -[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) - -# Obtener direcciones IP. /* (comentario para Doxygen) -[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') -# Mostrar sólo la primera. (comentario para Doxygen) */ -echo ${IP%% *} -} - - -#/** -# ogGetMacAddress -#@brief Muestra la dirección Ethernet del cliente. -#@return str_ether - Dirección Ethernet -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetMacAddress () -{ -local MAC -# Obtener direcciones Ethernet. -MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') -# Mostrar sólo la primera. -echo ${MAC%% *} -} - diff --git a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme b/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme deleted file mode 100644 index 853e37f5..00000000 --- a/client/ogClient/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme +++ /dev/null @@ -1,20 +0,0 @@ -preinit/default - eliminamos enlace del bash - Ejecute solo el loadmodules del for - -preinit/loaenviron - comentamos el LD_PATH - - -/var/lib/tftboot/pxelinux.cfg/default -DEFAULT pxe2 -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin -LABEL pxe2 -KERNEL vmlinuz-2.6.32-21-generic-pae -APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 - - -parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN -temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/ogClient/old/ogFSHlnk/boot/default.sh b/client/ogClient/old/ogFSHlnk/boot/default.sh deleted file mode 100755 index e8c5b5d2..00000000 --- a/client/ogClient/old/ogFSHlnk/boot/default.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/opt/opengnsys/bin/bash - -set -a - -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} -#### FIXME EN PRUEBAS -OGLOGFILE=/var/log/opengnsys.log - -/opt/opengnsys/etc/init/load2fs.sh -source /opt/opengnsys/etc/preinit/loadenviron.sh -export PATH=/opt/og2fs/bin:$PATH -export PATH=/opt/og2fs/sbin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - echo "$MSG_LAUNCHCLIENT" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -fi - -bash -# FIXME Arranque Browser -#browser -qws $OGSTARTPAGE diff --git a/client/ogClient/old/ogFSHlnk/boot/load2fs.sh b/client/ogClient/old/ogFSHlnk/boot/load2fs.sh deleted file mode 100644 index ca3e3be7..00000000 --- a/client/ogClient/old/ogFSHlnk/boot/load2fs.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -#/** -#@file load2fs.sh -#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Antonio J. Doblas Viso, Unviersidad de Malaga. -#@date 2010-02-15 -#*/ -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro -cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -export PATH=/opt/og2fs/sbin:$PATH -export PATH=/opt/og2fs/bin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh b/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh deleted file mode 100755 index e3505aa6..00000000 --- a/client/ogClient/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh +++ /dev/null @@ -1,395 +0,0 @@ -#!/bin/bash -#Definicion de variables -# TODO: Pendiente Definir directorio base del 2FS -OGBASEDIR=/opt/opengnsys/client/ -OGFSFILE=${OGBASEDIR}og2ndFS -OGFSMOUNT=${OGBASEDIR}ogfsmount -OGLIB=/opt/opengnsys/client/lib - - - - - -#/** -# ogFSHMount [str_program] -#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones -#@return Si no hay parametros: login de acceso. -#@return con un parametro: La salida del programa ejecutado -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## -function ogFSHMount () -{ -mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop -mount --bind /proc $OGFSMOUNT/proc -mount --bind /sys $OGFSMOUNT/sys -mount --bind /tmp $OGFSMOUNT/tmp -mount --bind /dev $OGFSMOUNT/dev -mount --bind /dev/pts $OGFSMOUNT/dev/pts -[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) -[ $# = 1 ] && chroot $OGFSMOUNT $1 -} - -#/** -# ogFSHUnmount -#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys -#@param -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogFSHUnmount () -{ -cd /tmp -umount -d -f -l $OGFSMOUNT/proc -umount -d -f -l $OGFSMOUNT/sys -umount -d -f -l $OGFSMOUNT/tmp -umount -d -f -l $OGFSMOUNT/dev -umount -d -f -l $OGFSMOUNT/dev/pts -umount -d -f -l $OGFSMOUNT -} - - -#/** -# ogFSHCreate str_versionUbuntu -#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Versión de ubuntu a generar, jaunty karmic -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogFSHCreate () -{ -#Definicion de variables. -local SCRIPT RUNME FSCLIENTSIZEMB PASSROOT LASTDEBOOTSTRAP OGMUSTCOMPILE OGFSLABEL -FSCLIENTSIZEMB=1000 -PASSROOT=og -SCRIPT=/root/configure.sh -RUNME=$OGFSMOUNT$SCRIPT -LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb -OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" -OGFSLABEL=og2FS -#TODO comprobar la compatibilidad del SO host - -if [ $# != 1 ] -then -echo Debes introducir como argumento: jaunty karmic lucid -return -fi - -#TODO: configurar la version lucid -#TODO: introducir un nuevo case para la vesion -case $1 in - jaunty|JAUNTY) - VERSION=jaunty - RELEASE=2.6.28-11-generic - ;; - karmic|KARMIC) - VERSION=karmic - RELEASE=2.6.31-14-generic - ;; - lucid|LUCID) - VERSION=lucid - #RELEASE=2.6.32-19-generic - RELEASE=2.6.32-21-generic-pae - ;; -esac - -# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema -apt-get install gdebi-core -wget $LASTDEBOOTSTRAP -gdebi -n debootstrap_1.0.20_all.deb - -#Creamos el disco virtual con el filesystem del cliente. -dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB -mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F -#Creamos el directorio donde montaremos el disco virtual -mkdir -p $OGFSMOUNT -#Montamos el dispositivo virtual en su punto de montaje. -mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop - -#TODO Comprobar arquitectura -#Iniciamos la creación del sistema en el directorio de clientes. -echo debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ -debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ - -# preparamos el etc.sources. -cat << FIN > ${OGFSMOUNT}/etc/apt/sources.list -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted -## Major bug fix updates produced after the final release of the -## distribution. -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team. Also, please note that software in universe WILL NOT receive any -## review or updates from the Ubuntu security team. -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION universe -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION universe -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe - -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team, and may not be under a free licence. Please satisfy yourself as to -## your rights to use the software. Also, please note that software in -## multiverse WILL NOT receive any review or updates from the Ubuntu -## security team. -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse - -## Uncomment the following two lines to add software from the 'backports' -## repository. -## N.B. software from this repository may not have been tested as -## extensively as that contained in the main release, although it includes -## newer versions of some applications which may provide useful features. -## Also, please note that software in backports WILL NOT receive any review -## or updates from the Ubuntu security team. -# deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse -# deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse - -## Uncomment the following two lines to add software from Canonical's -## 'partner' repository. -## This software is not part of Ubuntu, but is offered by Canonical and the -## respective vendors as a service to Ubuntu users. -# deb http://archive.canonical.com/ubuntu $VERSION partner -# deb-src http://archive.canonical.com/ubuntu $VERSION partner - - -deb http://security.ubuntu.com/ubuntu $VERSION-security main restricted -deb-src http://security.ubuntu.com/ubuntu $VERSION-security main restricted -deb http://security.ubuntu.com/ubuntu $VERSION-security universe -deb-src http://security.ubuntu.com/ubuntu $VERSION-security universe -deb http://security.ubuntu.com/ubuntu $VERSION-security multiverse -deb-src http://security.ubuntu.com/ubuntu $VERSION-security multiverse - - -deb http://archive.ubuntu.com/ubuntu $VERSION main -deb http://free.nchc.org.tw/drbl-core drbl stable -deb http://free.nchc.org.tw/ubuntu $VERSION-security main restricted universe multiverse -deb http://ppa.launchpad.net/freenx-team/ubuntu/ $VERSION main -deb http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main -deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main -FIN - -#TODO: fichero etc/hosts -#TODO: fichero etc/resolv.conf -echo "2ndFSHclient" > ${OGFSMOUNT}/etc/hostname -#TODO: introducir mas consoluas para el acceso como root. -echo "pts/0" >> ${OGFSMOUNT}/etc/securetty -echo "pts/1" >> ${OGFSMOUNT}/etc/securetty -echo "pts/2" >> ${OGFSMOUNT}/etc/securetty -echo "pts/3" >> ${OGFSMOUNT}/etc/securetty - -# copiamos algunas cosas del nfsexport -echo "Linking fonts for browser1 $OGLIB" -mkdir -p $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ -cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts - -echo "Linking fonts for browser2 $OGLIB" -mkdir -p $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/ -cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts - -echo "Coping pci.ids" -cp -pr $OGLIB/pci.ids $OGFSMOUNT/etc - -# Guión de ejecución y personalización final. -cat << FIN > $RUNME -#!/bin/bash -################################################################ -##################### SOFTWARE ##################### -################################################################ -export LANGUAGE=C -export LC_ALL=C -export LANG=C - -dpkg-divert --local --rename --add /sbin/initctl -ln -s /bin/true /sbin/initctl - - -apt-get -y update - -# software system -apt-get -y --force-yes install linux-image-$RELEASE wget dialog man-db htop -# -# software to compile code -apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk -wget $OGMUSTCOMPILE -source /root/ToolsGNU.c -# -# sofware networking -apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 -ctorrent install -udpcast install -# -# software services -apt-get -y --force-yes install openssh-server bittornado trickle -# -# software disk and filesystem -apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted -apt-get -y --force-yes install dmraid dmsetup mdadm lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools -ntfs-3g install -# -# software cloning -apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools -wget -O partclone_0.2.8_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.8/partclone_0.2.8_i386.deb?use_mirror=ovh -gdebi -n partclone_0.2.8_i386.deb -mbuffer install -# -## software postconf -apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk -ms-sys install -# -# software compressor -apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop - -apt-get -y --force-yes remove busybox -apt-get -y --force-yes install busybox-static bash-static -# -#################################################################### -###################### Preparando el entorno ###################### -################################################################### -mkdir -p /var/lock -dpkg-reconfigure passwd -echo "root:$PASSROOT" | chpasswd -mv /etc/fstab /etc/fstab.original 2>/dev/null -mv /etc/mtab /etc/mtab.original 2>/dev/null -FIN - -chmod +x $RUNME - -#chroot hacia el punto de montaje. -ogFSHMount $SCRIPT -### Desmontamos y salimos. -ogFSHUnmount 2>/dev/null -ogFSHUnmount 2>/dev/null -ogFSHUnmount 2>/dev/null -} - - -###### Funciones para los clientes offline -function agregarOG { -cd $NEWROOT -mkdir -p opt/opengnsys -cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys -echo "agregando OG al newinitrd" -} - -function finalizarISO -{ - cd $ANTERIORPWD - mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz - if [ $LINUX ] ; then - mv $TMPINITRD/linux $DEST/linuxISO - fi -} - - -function CrearISO { -mkdir -p tmp/iso/isolinux -#cd tmp/iso/ -cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ -cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ -cp -prv /tmp/linux tmp/iso/isolinux/linuxISO -cp -prv /tmp/initrd.gz tmp/iso/isolinux/ -cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ - - -cat << FIN > tmp/iso/isolinux/isolinux.cfg -DEFAULT menu.c32 -PROMPT 0 -ALLOWOPTIONS 1 - -MENU TITLE FuTuR3 Live Collection - -LABEL gpxe -MENU LABEL gpxe -KERNEL /clonezilla/live/vmlinuz1 -APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia - - -#default 0 -#prompt 1 -#timeout 100 - -#display mensaje.txt - -LABEL 0 -MENU LABEL ogClient -KERNEL linuxISO -APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline - -LABEL 1 -MENU LABEL ogClient1 sin vga -KERNEL linuxISO -APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline - -LABEL 2 -MENU LABEL ogClient2 sin irqpoll -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline - -LABEL 3 -MENU LABEL ogClient3 acpi=off -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline - - -#LABEL ogclient -#KERNEL /ogclient/linuxISO -#APPEND initrd=/ogclient/initrdISO.img - -#KERNEL linuxISO -#APPEND initrd=initrdISO.img - -LABEL 4 -MENU LABEL local -localboot 0x80 -append - - - -label 5 -MENU LABEL Network boot via gPXE lkrn -KERNEL gpxe.lkrn - -label 5 -MENU LABEL Network boot via gPXE usb -KERNEL gpxe.usb - -label 5 -MENU LABEL Network boot via gPXE pxe -KERNEL gpxe.pxe - -label 5 -MENU LABEL Network boot via gPXE iso -KERNEL gpxe.iso -FIN -#### /tmp/iso# -mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso - -} - -function probarISO { -#/tmp/iso -qemu -m 256 -boot d -cdrom ogClient.iso -} - - - - diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog deleted file mode 100644 index d93f0b42..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog +++ /dev/null @@ -1,137 +0,0 @@ -#/bin/sh - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - - #mount -t nfs -onolock,ro - nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - #mount -t nfs -o nolock - nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -. /scripts/functions -configure_networking -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - - -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro -cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -mount /opt/og2fs/bin /bin -mount /opt/og2fs/sbin /sbin -unset PATH -export PATH=/opt/og2fs/sbin -export PATH=/opt/og2fs/bin:$PATH -export PATH=/opt/og2fs/sbin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin -} -mountroot diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume deleted file mode 100644 index e4c89d1a..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume +++ /dev/null @@ -1 +0,0 @@ -RESUME=UUID=e8ea296e-815a-44d5-be24-b51d6b6fce4d diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks deleted file mode 100755 index d495d156..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash -copy_exec /usr/bin/unionfs-fuse - - - -# Insert OpenGnsys Engine -#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - - diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf deleted file mode 100644 index 754e2bea..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# initramfs.conf -# Configuration file for mkinitramfs(8). See initramfs.conf(5). -# - -# -# MODULES: [ most | netboot | dep | list ] -# -# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. -# -# dep - Try and guess which modules to load. -# -# netboot - Add the base modules, network modules, but skip block devices. -# -# list - Only include modules from the 'additional modules' list -# - -MODULES=most - -# -# BUSYBOX: [ y | n ] -# -# Use busybox if available. -# - -BUSYBOX=y - -# -# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] -# -# Amount of RAM to use for RAM-based compressed swap space. -# -# An empty value - compcache isn't used, or added to the initramfs at all. -# An integer and K (e.g. 65536 K) - use a number of kilobytes. -# An integer and M (e.g. 256 M) - use a number of megabytes. -# An integer and G (e.g. 1 G) - use a number of gigabytes. -# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. -# -# You can optionally install the compcache package to configure this setting -# via debconf and have userspace scripts to load and unload compcache. -# - -COMPCACHE_SIZE="" - -# -# NFS Section of the config. -# - -# -# BOOT: [ local | nfs ] -# -# local - Boot off of local media (harddrive, USB stick). -# -# nfs - Boot using an NFS drive as the root of the drive. -# - -BOOT=local - -# -# DEVICE: ... -# -# Specify the network interface, like eth0 -# - -DEVICE=eth0 - -# -# NFSROOT: [ auto | HOST:MOUNT ] -# - -NFSROOT=auto - diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules deleted file mode 100644 index 8bac1d4b..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules +++ /dev/null @@ -1,14 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -vga16b -vesafb -fbcon - diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og deleted file mode 100755 index 12c39a59..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og +++ /dev/null @@ -1,194 +0,0 @@ -# OpenGnsys Local filesystem mounting -*- shell-script -*- - - -ogLinkBusybox () -{ -for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do - ln -f /bin/busybox /bin/$n -done -ln -f /bin/busybox /bin/sh -} - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - #mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - -unionmount() -{ -FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" -UNION_OPT="-o cow -o noinitgroups" -UPATH="/unionfs" -UBIN="unionfs-fuse" -mkdir -p /unionfs/host -mkdir -p /unionfs/union - dir=$1 - #echo "creando mkdir -p /unionfs/host/$dir" - mkdir -p /unionfs/host/$dir - #echo "montando mount --bind /$dir /unionfs/host/$dir " - mount --bind /$dir /unionfs/host/$dir - ##########echo "creando mkdir -p /unionfs/union/$dir" - mkdir -p /unionfs/union/$dir - host="/unionfs/host/${dir}=RW" - common="/opt/og2fs/${dir}=RO" - #####echo " ejecuantdo $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir " - $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir - - mount --bind /unionfs/union/$dir /$dir -} - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -. /scripts/functions -configure_networking - -# for the portmapper we need localhost -ifconfig lo 127.0.0.1 -/etc/init.d/portmap start - -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - - -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro - -#mount -t tmpfs -o size=8192 tmpfs /unionfs -for i in etc; do - unionmount $i -done -# root var lib bin sbin usr -cat /proc/mounts > /etc/mtab - -#cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -mount /opt/og2fs/bin /bin -mount /opt/og2fs/sbin /sbin -#export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin -#chmod 777 /etc/rcog -##unset PATH -##export PATH=$PATH:/opt/og2fs/sbin -##export PATH=/opt/og2fs/bin:$PATH -##export PATH=/opt/og2fs/sbin:$PATH - - - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - run_scripts /scripts/og-bottom - [ "$quiet" != "y" ] && log_end_msg - - -#set -a -#trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 - -#/opt/opengnsys/etc/preinit/default.sh -echo "llamando a init desde scritps og" -exec init -} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf deleted file mode 100644 index 3c27473b..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf +++ /dev/null @@ -1,20 +0,0 @@ -# -# Configuration file for update-initramfs(8) -# - -# -# update_initramfs [ yes | all | no ] -# -# Default is yes -# If set to all update-initramfs will update all initramfs -# If set to no disables any update to initramfs beside kernel upgrade - -update_initramfs=yes - -# -# backup_initramfs [ yes | no ] -# -# Default is no -# If set to no leaves no .bak backup files. - -backup_initramfs=no diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab deleted file mode 100644 index 03e0c06a..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab +++ /dev/null @@ -1,14 +0,0 @@ -# This is run first except when booting in single-user mode -# -#::sysinit:/opt/opengnsys/etc/preinit/default.sh -# /bin/sh invocations on selected ttys -# -# Start an "askfirst" shell on the console (whatever that may be) -#::askfirst:/bin/sh -# Start an "askfirst" shell on /dev/tty2-4 -#tty1::respawn:/sbin/getty 38400 tty1 -tty1::respawn:/opt/opengnsys/etc/preinit/default.sh -tty2::respawn:/sbin/getty 38400 tty2 -tty3::respawn:/sbin/getty 38400 tty3 -tty4::respawn:/sbin/getty 38400 tty4 -tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf deleted file mode 100644 index 8b047e4e..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf +++ /dev/null @@ -1,30 +0,0 @@ -# Framebuffer drivers are generally buggy and poorly-supported, and cause -# suspend failures, kernel panics and general mayhem. For this reason we -# never load them automatically. -blacklist aty128fb -blacklist atyfb -#blacklist radeonfb -blacklist cirrusfb -blacklist cyber2000fb -blacklist cyblafb -blacklist gx1fb -blacklist hgafb -blacklist i810fb -blacklist intelfb -blacklist kyrofb -blacklist lxfb -blacklist matroxfb_base -blacklist neofb -blacklist nvidiafb -blacklist pm2fb -blacklist rivafb -blacklist s1d13xxxfb -blacklist savagefb -blacklist sisfb -blacklist sstfb -blacklist tdfxfb -blacklist tridentfb -#blacklist vesafb -blacklist vfb -blacklist viafb -blacklist vt8623fb diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox deleted file mode 100755 index da2dc637..00000000 Binary files a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox and /dev/null differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox deleted file mode 100755 index d04890f6..00000000 Binary files a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox and /dev/null differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root deleted file mode 100755 index aecb5e32..00000000 Binary files a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root and /dev/null differ diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions deleted file mode 100644 index 2610f79a..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions +++ /dev/null @@ -1,461 +0,0 @@ -# -*- shell-script -*- - -catenate_cpiogz() { - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 - return - fi - - cat "${1}" >>"${__TMPCPIOGZ}" -} - -force_load() -{ - manual_add_modules ${@} - echo "${@}" >>"${DESTDIR}/conf/modules" -} - -# Takes a file containing a list of modules to be added as an -# argument, figures out dependancies, and adds them. -# -# Input file syntax: -# -# # comment -# modprobe_module_name [args ...] -# [...] -# -add_modules_from_file() -{ - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 - return - fi - - sed -e '/^#/d' ${1} | while read module rest; do - force_load "${module}" "${rest}" - done -} - -# Is this module available? -have_module() -{ - modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" >/dev/null 2>&1 -} - -# Add dependent modules + eventual firmware -manual_add_modules() -{ - local mam_x firmwares firmware - - for mam_x in $(modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do - # Prune duplicates - if [ -e "${DESTDIR}/${mam_x}" ]; then - continue - fi - - mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" - ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" - if [ "${verbose}" = "y" ]; then - echo "Adding module ${mam_x}" - fi - - # Add firmware files if necessary - firmwares=$(modinfo -F firmware "${mam_x}") - if [ -z "${firmwares}" ]; then - continue - fi - for firmware in $firmwares; do - if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ - || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then - continue - fi - - # Only print warning for missing fw of loaded module - # or forced loaded module - if [ ! -e "/lib/firmware/${firmware}" ] \ - && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then - if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ - /proc/modules \ - || grep -q "^$(basename "${mam_x}" .ko)" \ - "${CONFDIR}/modules"; then - echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 - fi - continue - fi - - if [ -e "/lib/firmware/${version}/${firmware}" ]; then - copy_exec "/lib/firmware/${version}/${firmware}" - else - copy_exec "/lib/firmware/${firmware}" - fi - if [ "${verbose}" = "y" ]; then - echo "Adding firmware ${firmware}" - fi - done - done -} - -# $1 is the source path (e.g. /usr/bin/time) -# $2 is the relative destination (e.g. /usr or /usr/time) -# -# The destination is interpreted in the same way "cp" would, meaning -# (assuming /bin is a directory): -# -# "copy_exec /usr/bin/time /bin" -> /bin/time -# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime -# -# If $2 is left out, the same destination path as for the source arg will -# be used and directories will be created as needed, so: -# -# "copy_exec /usr/bin/time" -> /usr/bin/time -# -copy_exec() { - local source target destination final_destination x nonoptlib - local libname dirname - - source="${1}" - if [ -n "${2}" ]; then - target="${2}" - else - if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then - mkdir -p "${DESTDIR}/$(dirname "${1}")" - fi - target="${1}" - fi - - if [ -d "${DESTDIR}/${target}" ]; then - destination="${target}/$(basename "${source}")" - else - destination="${target}" - fi - final_destination="${DESTDIR}/${destination}" - - if [ -L "$final_destination" ]; then - if [ $(readlink "${final_destination}") != "${source}" ]; then - echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 - return - fi - else - ln -s ${source} ${DESTDIR}/${destination} - if [ "${verbose}" = "y" ]; then - echo "Adding binary ${source}" - fi - fi - - # Copy the dependant libraries - for x in $(ldd ${source} 2>/dev/null | sed -e ' - /\//!d; - /linux-gate/d; - /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; - s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do - - # Try to use non-optimised libraries where possible. - # We assume that all HWCAP libraries will be in tls, - # sse2, vfp or neon - nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') - - if [ -e "${nonoptlib}" ]; then - x="${nonoptlib}" - fi - - libname=$(basename "${x}") - dirname=$(dirname "${x}") - - mkdir -p "${DESTDIR}/${dirname}" - if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then - ln -s "${x}" "${DESTDIR}/${dirname}" - if [ "${verbose}" = "y" ]; then - echo "Adding library ${x}" - fi - fi - done -} - -# Copy entire subtrees to the initramfs -copy_modules_dir() -{ - local x_mod - - if ! [ -d "${MODULESDIR}/${1}" ]; then - return; - fi - if [ "${verbose}" = "y" ]; then - echo "Copying module directory ${1}" - fi - for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do - manual_add_modules $(basename ${x_mod} .ko) - done -} - -# walk /sys for relevant modules -sys_walk_mod_add() -{ - local driver_path module - device_path="$1" - - while [ "${device_path}" != "/sys" ]; do - driver_path="$(readlink -f ${device_path}/driver)" - if [ -e "$driver_path" ]; then - module="$(basename $(readlink -f $driver_path))" - if [ -n "${module}" ]; then - force_load "${module}" - fi - fi - device_path="$(dirname ${device_path})" - done -} - -# walk /sys for relevant modalias -sys_walk_modalias() -{ - local device_path modalias - - device_path="$(dirname "${1}")" - device_path="$(dirname "${device_path}")" - if [ -e "${device_path}/modalias" ]; then - modalias=$(cat "${device_path}/modalias") - fi - - if [ -n "${modalias}" ]; then - force_load "${modalias}" - fi -} - -# find and only copy root relevant modules -dep_add_modules() -{ - local block minor root FSTYPE root_dev_path x - - # findout root block device + fstype - eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" - if [ "${root}" = "/dev/root" ] ; then - root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null - fi - root="$(readlink -f ${root})" - - # find out real rootfs on auto type - if [ "${FSTYPE}" = "auto" ]; then - eval "$(/usr/lib/klibc/bin/fstype ${root})" - fi - - # check that fstype rootfs recognition - if [ "${FSTYPE}" = "unknown" ]; then - echo "mkinitramfs: unknown fstype on root ${root}" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report bug on initramfs-tools" - exit 1 - fi - - # Add rootfs - manual_add_modules "${FSTYPE}" - - # lvm luks root - if [ "${root#/dev/mapper/}" != "${root}" ]; then - minor=$((0x$(stat --format "%T" ${root}) % 256)) - block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) - if [ "${block#dm-}" != "${block}" ]; then - block=$(ls -1 /sys/block/${block}/slaves | head -n 1) - fi - block=${block%%[0-9]*} - # md root new naming scheme /dev/md/X - elif [ "${root#/dev/md/}" != "${root}" ]; then - root=${root#/dev/md/} - block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # md root /dev/mdX - elif [ "${root#/dev/md}" != "${root}" ]; then - root=${root#/dev/} - block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # mmc always uses numbering in the devicename (mmcblk[0-9]) - elif [ "${root#/dev/mmc}" != "${root}" ]; then - block=${root#/dev/} - block=${block%%p[0-9]*} - # classical root device - else - block=${root#/dev/} - block=${block%%[0-9]*} - fi - - # Error out if /sys lack block dev - if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then - echo "mkinitramfs: missing ${block} root ${root} /sys entry" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report the bug" - exit 1 - fi - - # sys walk ATA - root_dev_path=$(readlink -f /sys/block/${block}/device) - sys_walk_mod_add ${root_dev_path} - - # catch old-style IDE - if [ -e /sys/bus/ide/devices/ ]; then - sys_walk_modalias ${root_dev_path} - manual_add_modules ide-disk - manual_add_modules ide-cd - fi - - if [ -e /sys/bus/scsi/devices/ ]; then - manual_add_modules sd_mod - fi - - if [ -e /sys/bus/i2o/devices/ ]; then - force_load i2o_block - force_load i2o_config - fi - - if [ -e /sys/bus/ps3_system_bus/ ]; then - for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do - manual_add_modules "${x}" - done - fi - - if [ -e /sys/bus/vio/ ]; then - for x in sunvnet sunvdc; do - manual_add_modules "${x}" - done - fi -} - - -# The modules "most" classes added per default to the initramfs -auto_add_modules() -{ - case "$1" in - base) - for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ - hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ - hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ - hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ - hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ - ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ - virtio_pci vfat nls_cp437 nls_iso8859-1; do - manual_add_modules "${x}" - done - ;; - net) - for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ - cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ - ep93xx_eth eql fealnx famachi forcedeth gelic_net \ - hp100 igb ipg mace mv643xx_eth myri10ge \ - natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ - r8169 s2io sis900 skge sky2 slhc smc911x starfire \ - sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ - de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ - typhon via-rhine via-velocity virtio_net yellowfin; do - manual_add_modules "${x}" - done - ;; - ide) - copy_modules_dir kernel/drivers/ide - ;; - scsi) - copy_modules_dir kernel/drivers/scsi - for x in mptfc mptsas mptscsih mptspi; do - manual_add_modules "${x}" - done - ;; - ata) - copy_modules_dir kernel/drivers/ata - ;; - block) - copy_modules_dir kernel/drivers/block - copy_modules_dir kernel/drivers/usb/storage - ;; - # FIXME: can be removed after Lenny release - ieee1394) - for x in ohci1394 sbp2; do - manual_add_modules "${x}" - done - ;; - firewire) - for x in firewire-ohci firewire-sbp2; do - manual_add_modules "${x}" - done - ;; - i2o) - for x in i2o_block; do - manual_add_modules "${x}" - done - ;; - dasd) - for x in dasd_eckd_mod dasd_fba_mod; do - manual_add_modules "${x}" - done - ;; - *) - auto_add_modules base - auto_add_modules net - auto_add_modules ide - auto_add_modules scsi - auto_add_modules block - auto_add_modules ata - auto_add_modules i2o - auto_add_modules dasd - auto_add_modules ieee1394 - auto_add_modules firewire - ;; - esac -} - -usage() -{ - cat >&2 << EOF - -Usage: ${0} [OPTION]... <-o outfile> [version] - -Options: - -d confdir Specify an alternative configuration directory. - -k Keep temporary directory used to make the image. - -o outfile Write to outfile. - -r root Override ROOT setting in mkinitrd.conf. - -See mkinitramfs(8) for further details. -EOF - exit 1 - -} - -# minimal supported kernel version -check_minkver() -{ - local curversion initdir DPKG_ARCH minversion cm_x tmp - - curversion="${1}" - initdir="${2}" - if [ -z "${initdir}" ]; then - DPKG_ARCH=$(dpkg --print-architecture) - case ${DPKG_ARCH} in - ia64|hppa) - minversion="2.6.15" - ;; - *) - minversion="2.6.12" - ;; - esac - if dpkg --compare-versions "${curversion}" lt "${minversion}"; then - echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - return 0 - fi - set_initlist - for cm_x in ${initlist}; do - # sed: keep last line starting with MINKVER=, - # remove MINKVER= and trailing space - minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") - if [ -z "${tmp}" ]; then - continue - elif dpkg --compare-versions "${curversion}" lt "${minver}"; then - echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - done -} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache deleted file mode 100755 index 37fdd22e..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -set -e - -if [ "$1" = prereqs ]; then - exit 0 -fi - -. /usr/share/initramfs-tools/hook-functions - -number= -suffix= -eval $(printf "%s" "$COMPCACHE_SIZE" | \ - sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') - -if [ -z "$number" ] || [ -z "$suffix" ]; then - exit 0 -fi - -if have_module ramzswap; then - name=ramzswap - manual_add_modules ramzswap -elif have_module compcache; then - name=compcache - manual_add_modules compcache -else - exit 0 -fi - -copy_exec /sbin/swapon - -mkdir -p "$DESTDIR"/etc/udev/rules.d -cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." - -# Note that this only becomes /dev on the real filesystem if udev's scripts -# are used; which they will be, but it's worth pointing out -if ! mount -t devtmpfs -o mode=0755 none /dev; then - mount -t tmpfs -o mode=0755 none /dev - mknod -m 0600 /dev/console c 5 1 - mknod /dev/null c 1 3 -fi -mkdir /dev/pts -mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true -> /dev/.initramfs-tools -mkdir /dev/.initramfs - -# Export the dpkg architecture -export DPKG_ARCH= -. /conf/arch.conf - -# Set modprobe env -export MODPROBE_OPTIONS="-qb" - -# Export relevant variables -export ROOT= -export ROOTDELAY= -export ROOTFLAGS= -export ROOTFSTYPE= -export IPOPTS= -export HWADDR= -export break= -export init=/sbin/init -export quiet=n -export readonly=y -export rootmnt=/root -export debug= -export panic= -export blacklist= -export resume_offset= - -# Bring in the main config -. /conf/initramfs.conf -for conf in conf/conf.d/*; do - [ -f ${conf} ] && . ${conf} -done -. /scripts/functions - -# Parse command line options -for x in $(cat /proc/cmdline); do - case $x in - init=*) - init=${x#init=} - ;; - root=*) - ROOT=${x#root=} - case $ROOT in - LABEL=*) - ROOT="${ROOT#LABEL=}" - - # support / in LABEL= paths (escape to \x2f) - case "${ROOT}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" - else - if [ "${ROOT}" != "${ROOT#/}" ]; then - ROOT="\x2f${ROOT#/}" - fi - if [ "${ROOT}" != "${ROOT%/}" ]; then - ROOT="${ROOT%/}\x2f" - fi - IFS='/' - newroot= - for s in $ROOT; do - if [ -z "${newroot}" ]; then - newroot="${s}" - else - newroot="${newroot}\\x2f${s}" - fi - done - unset IFS - ROOT="${newroot}" - fi - esac - ROOT="/dev/disk/by-label/${ROOT}" - ;; - UUID=*) - ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" - ;; - /dev/nfs) - [ -z "${BOOT}" ] && BOOT=nfs - ;; - esac - ;; - rootflags=*) - ROOTFLAGS="-o ${x#rootflags=}" - ;; - rootfstype=*) - ROOTFSTYPE="${x#rootfstype=}" - ;; - rootdelay=*) - ROOTDELAY="${x#rootdelay=}" - case ${ROOTDELAY} in - *[![:digit:].]*) - ROOTDELAY= - ;; - esac - ;; - resumedelay=*) - RESUMEDELAY="${x#resumedelay=}" - ;; - loop=*) - LOOP="${x#loop=}" - ;; - loopflags=*) - LOOPFLAGS="-o ${x#loopflags=}" - ;; - loopfstype=*) - LOOPFSTYPE="${x#loopfstype=}" - ;; - cryptopts=*) - cryptopts="${x#cryptopts=}" - ;; - nfsroot=*) - NFSROOT="${x#nfsroot=}" - ;; - netboot=*) - NETBOOT="${x#netboot=}" - ;; - ip=*) - IPOPTS="${x#ip=}" - ;; - hwaddr=*) - HWADDR="${x#hwaddr=}" - ;; - boot=*) - BOOT=${x#boot=} - ;; - resume=*) - RESUME="${x#resume=}" - ;; - resume_offset=*) - resume_offset="${x#resume_offset=}" - ;; - noresume) - noresume=y - ;; - panic=*) - panic="${x#panic=}" - case ${panic} in - *[![:digit:].]*) - panic= - ;; - esac - ;; - quiet) - quiet=y - ;; - ro) - readonly=y - ;; - rw) - readonly=n - ;; - debug) - debug=y - quiet=n - exec >/dev/.initramfs/initramfs.debug 2>&1 - set -x - ;; - debug=*) - debug=y - quiet=n - set -x - ;; - break=*) - break=${x#break=} - ;; - break) - break=premount - ;; - blacklist=*) - blacklist=${x#blacklist=} - ;; - netconsole=*) - netconsole=${x#netconsole=} - ;; - esac -done - -if [ -z "${noresume}" ]; then - export resume=${RESUME} -else - export noresume -fi - -[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} - -maybe_break top - -# export BOOT variable value for compcache, -# so we know if we run from casper -export BOOT - -# Don't do log messages here to avoid confusing usplash -run_scripts /scripts/init-top - -maybe_break modules -log_begin_msg "Loading essential drivers..." -load_modules -log_end_msg - -maybe_break premount -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" -run_scripts /scripts/init-premount -[ "$quiet" != "y" ] && log_end_msg - -maybe_break mount -log_begin_msg "Mounting root file system..." -. /scripts/${BOOT} -parse_numeric ${ROOT} -mountroot -log_end_msg - -maybe_break bottom -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" -run_scripts /scripts/init-bottom -[ "$quiet" != "y" ] && log_end_msg - -# Move virtual filesystems over to the real filesystem -mount -n -o move /sys ${rootmnt}/sys -mount -n -o move /proc ${rootmnt}/proc - -# Check init bootarg -if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then - echo "Target filesystem doesn't have ${init}." - init= -fi - -# Search for valid init -if [ -z "${init}" ] ; then - for init in /sbin/init /etc/init /bin/init /bin/sh; do - if [ ! -x "${rootmnt}${init}" ]; then - continue - fi - break - done -fi - -# No init on rootmount -if [ ! -x "${rootmnt}${init}" ]; then - panic "No init found. Try passing init= bootarg." -fi - -# Confuses /etc/init.d/rc -if [ -n ${debug} ]; then - unset debug -fi - -# Chain to real filesystem -maybe_break init -exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 -panic "Could not execute run-init." diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules deleted file mode 100644 index 9aa46468..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules +++ /dev/null @@ -1,10 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions deleted file mode 100644 index 3bea0c97..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions +++ /dev/null @@ -1,420 +0,0 @@ -# -*- shell-script -*- - -_log_msg() -{ - if [ "$quiet" = "y" ]; then return; fi - echo "$@" -} - -log_success_msg() -{ - _log_msg "Success: $@" -} - -log_failure_msg() -{ - _log_msg "Failure: $@" -} - -log_warning_msg() -{ - _log_msg "Warning: $@" -} - -log_begin_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TEXT $@" - fi - _log_msg "Begin: $@ ..." -} - -log_end_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "SUCCESS ok" - fi - _log_msg "Done." -} - -# Add failure hook -add_mountroot_fail_hook() -{ - mkdir -p /tmp/mountroot-fail-hooks.d - ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" -} - -# Run failure hooks. -# When a failure hook exits "1", it has not done anything to correct the -# system. Exiting "0" means that something has been attempted to resolve -# the lack of a root filesystem. -# Hooks are run in lexigraphical order, and are responsible for removing -# themselves if they should not re-run in a later cycle. When one exits -# "0", the stack is stopped, so the caller can return to the main rootfs -# wait loop. -try_failure_hooks() -{ - local hook - - # Disable usplash so text from hooks can be seen - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - for hook in /tmp/mountroot-fail-hooks.d/*; do - if [ -x ${hook} ] && ${hook} mountfail; then - return 0 - fi - done - return 1 -} - -panic() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - # Disallow console access - if [ -n "${panic}" ]; then - sleep ${panic} - reboot - fi - - modprobe i8042 - modprobe atkbd - - run_scripts /scripts/panic - - echo $@ - PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 -} - -maybe_break() -{ - if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then - panic "Spawning shell within the initramfs" - fi -} - -render() -{ - eval "echo -n \${$@}" -} - -set_initlist() -{ - unset initlist - for si_x in ${initdir}/*; do - # skip empty dirs without warning - [ "${si_x}" = "${initdir}/*" ] && return - - # only allow variable name chars - case ${si_x#${initdir}/} in - *[![:alnum:]_]*) - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not alphanumeric or '_' file" - continue - ;; - esac - - # skip non executable scripts - if [ ! -x ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not executable" - continue - fi - - # skip directories - if [ -d ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: a directory" - continue - fi - - initlist="${initlist} ${si_x#${initdir}/}" - done -} - -reduce_satisfied() -{ - deplist="$(render array_${1})" - unset tmpdeplist - for rs_y in ${deplist}; do - # check if there are alternatives - case ${rs_y} in - *\|*) - OLD_IFS="$IFS" - IFS="|" - for rs_z in ${rs_y}; do - IFS="$OLD_IFS" - # only allow variable name chars - case ${rs_z} in - *[![:alnum:]_]*) - IFS="|" - continue - ;; - esac - # skip non executable scripts - if [ ! -x ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - # skip directories - if [ -d ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - tmpdeplist="${tmpdeplist} ${rs_z}" - break - done - IFS="$OLD_IFS" - ;; - *) - case ${rs_y} in - *[![:alnum:]_]*) - continue - ;; - esac - if [ ! -x ${initdir}/${rs_y} ]; then - continue - fi - if [ -d ${initdir}/${rs_y} ]; then - continue - fi - tmpdeplist="${tmpdeplist} ${rs_y}" - ;; - esac - done - deplist=${tmpdeplist} - for rs_x in ${runlist}; do - pop_list_item ${rs_x} ${deplist} - deplist=${tmppop} - done - eval array_${1}=\"${deplist}\" -} - -get_prereqs() -{ - set_initlist - for gp_x in ${initlist}; do - tmp=$(${initdir}/${gp_x} prereqs) - eval array_${gp_x}=\"${tmp}\" - done -} - -count_unsatisfied() -{ - set -- ${@} - return ${#} -} - -# Removes $1 from initlist -pop_list_item() -{ - item=${1} - shift - set -- ${@} - unset tmppop - # Iterate - for pop in ${@}; do - if [ ${pop} = ${item} ]; then - continue - fi - tmppop="${tmppop} ${pop}" - done - -} - -# This function generates the runlist, so we clear it first. -reduce_prereqs() -{ - unset runlist - set -- ${initlist} - i=$# - # Loop until there's no more in the queue to loop through - while [ ${i} -ne 0 ]; do - oldi=${i} - for rp_x in ${initlist}; do - reduce_satisfied ${rp_x} - count_unsatisfied $(render array_${rp_x}) - cnt=${?} - if [ ${cnt} -eq 0 ]; then - runlist="${runlist} ${rp_x}" - pop_list_item ${rp_x} ${initlist} - initlist=${tmppop} - i=$((${i} - 1)) - fi - done - if [ ${i} -eq ${oldi} ]; then - panic "PANIC: Circular dependancy. Exiting." - fi - done -} - -get_prereq_pairs() -{ - set_initlist - for gp_x in ${initlist}; do - echo ${gp_x} ${gp_x} - prereqs=$(${initdir}/${gp_x} prereqs) - for prereq in ${prereqs}; do - echo ${prereq} ${gp_x} - done - done -} - -call_scripts() -{ - for cs_x in ${runlist}; do - [ -f ${initdir}/${cs_x} ] || continue - if [ x"$1" = "xoptional" ]; then - option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") - [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue - fi - - # mkinitramfs verbose output - if [ "${verbose}" = "y" ]; then - echo "Calling hook ${cs_x}" - fi - ${initdir}/${cs_x} - # allow boot scripts to modify exported boot paramaters - if [ -e /conf/param.conf ]; then - . /conf/param.conf - fi - done -} - -run_scripts() -{ - initdir=${1} - [ ! -d ${initdir} ] && return - - if [ -f ${initdir}/ORDER ]; then - . ${initdir}/ORDER - elif [ -x /usr/bin/tsort ]; then - runlist=$(get_prereq_pairs | tsort) - call_scripts $2 - else - get_prereqs - reduce_prereqs - call_scripts $2 - fi -} - -cache_run_scripts() -{ - DESTDIR=${1} - scriptdir=${2} - initdir=${DESTDIR}${scriptdir} - [ ! -d ${initdir} ] && return - - runlist=$(get_prereq_pairs | tsort) - for crs_x in ${runlist}; do - [ -f ${initdir}/${crs_x} ] || continue - echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER - echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER - done -} - -# Load custom modules first -load_modules() -{ - if [ -e /conf/modules ]; then - cat /conf/modules | while read m; do - # Skip empty lines - if [ -z "$m" ]; then - continue - fi - # Skip comments - d?ash removes whitespace prefix - com=$(printf "%.1s" "${m}") - if [ "$com" = "#" ]; then - continue - fi - modprobe $m - done - fi -} - -# lilo compatibility -parse_numeric() { - case $1 in - "") - return - ;; - /*) - return - ;; - *:*) - minor=${1#*:} - major=${1%:*} - ;; - *) - value=$(( 0x${1} )) - minor=$(( ${value} % 256 )) - major=$(( ${value} / 256 )) - ;; - esac - - mknod -m 600 /dev/root b ${major} ${minor} - ROOT=/dev/root -} - -configure_networking() -{ - # networking already configured thus bail out - [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 - - if [ "${HWADDR}" ]; then - # select interface by MAC address - HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" - local iface - for iface in /sys/class/net/*; do - [ -f "$iface/address" ] || continue - if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then - DEVICE="${iface#/sys/class/net/}" - fi - done - fi - - # support ip options see linux sources - # Documentation/filesystems/nfsroot.txt - case ${IPOPTS} in - none|off) - # Do nothing - ;; - ""|on|any) - # Bring up device - ipconfig -t 60 ${DEVICE} - ;; - dhcp|bootp|rarp|both) - ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} - ;; - *) - ipconfig -t 60 -d $IPOPTS - - # grab device entry from ip option - NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} - if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then - NEW_DEVICE=${NEW_DEVICE%:*} - else - # wrong parse, possibly only a partial string - NEW_DEVICE= - fi - if [ -n "${NEW_DEVICE}" ]; then - DEVICE="${NEW_DEVICE}" - fi - ;; - esac - - # source ipconfig output - if [ -n "${DEVICE}" ]; then - # source specific bootdevice - . /tmp/net-${DEVICE}.conf - else - # source any interface as not exaclty specified - . /tmp/net-*.conf - fi -} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth deleted file mode 100755 index 8b1e7c8a..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] -then - /bin/plymouth update-root-fs --new-root-dir=${rootmnt} -fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev deleted file mode 100755 index f9d2ce9d..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -e -# initramfs init-bottom script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Stop udevd, we'll miss a few events while we run init, but we catch up -pkill udevd - -# Move /dev to the real filesystem -mount -n -o move /dev ${rootmnt}/dev diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 deleted file mode 100755 index e5bc78f1..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -# init-premount script for lvm2. - -PREREQS="udev mdadm" -prereqs() -{ - echo $PREREQS -} - -mountroot_fail() -{ - if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then - cat </dev/null; then - modprobe ata_generic all_generic_ide=1 -fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist deleted file mode 100755 index 5e6b3c1e..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -# blacklist vga16fb when vga= or video= given -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*|video=*) - echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs - ;; - esac -done - -# sanity check -[ -z "${blacklist}" ] && exit 0 - -# write blacklist to modprobe.d -IFS=',' -for b in ${blacklist}; do - echo "blacklist $b" >> /etc/modprobe.d/initramfs -done diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup deleted file mode 100755 index df767bb4..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup +++ /dev/null @@ -1,83 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -OPTION=FRAMEBUFFER -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer deleted file mode 100755 index bb59aadf..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - - -# The options part of the kernel "video=" argument (i.e. everyting -# after "video=:") has very inconsistent rules. -# -# Generally the following applies: -# 1) options are comma-separated -# 2) options can be in either of these three forms: -# =, :, . -# 3) the "mode" option has the form x[M][R][-][@][i][m] -# and may or may not start with "mode=" -# -# When the options are used with modules, they need to be space-separated -# and the following conversions are needed: -# : -> = -# -> =1 -# -> mode= -parse_video_opts() -{ - local OPTS="$1" - local IFS="," - - # Must be a line like video=:,[opt2]... - if [ "${OPTS}" = "${OPTS%%:*}" ]; then - return - fi - OPTS="${OPTS#*:}" - for opt in ${OPTS}; do - # Already in the "=" form - if [ "${opt}" != "${opt#*=}" ]; then - echo -n "$opt " - # In the ":" form - elif [ "${opt}" != "${opt#*:}" ]; then - echo -n "${opt%:*}=${opt#*:} " - # Presumably a modevalue without the "mode=" prefix - elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then - echo -n "mode=$opt " - # Presumably a boolean - else - echo -n "${opt}=1 " - fi - done -} - -FB="" -OPTS="" - -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*) - FB="vesafb"; - OPTS=""; - ;; - video=*) - FB=${x#*=} - FB="${FB%%:*}" - OPTS="$(parse_video_opts "${x}")" - esac -done - -# Map command line name to module name -case ${FB} in -matroxfb) - FB=matroxfb_base - ;; -esac - -if [ -n "${FB}" ]; then - # Some framebuffer devices need character devices :-/ - udevadm settle - MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} - # Wait for the framebuffer devices to be ready - udevadm settle -else - # If we have no graphics devices yet, wait for udev to settle - [ -d /sys/class/graphics/fbcon ] || udevadm settle - [ -d /sys/class/graphics/fb0 ] || udevadm settle - [ -d /sys/class/drm/card0 ] || udevadm settle -fi - -# Force fb mode via /sys interface -for x in $(cat /proc/cmdline); do - case ${x} in - fbmode=*) - MODE=${x#*=} - echo "$MODE" > /sys/class/graphics/fb0/mode - ;; - esac -done diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap deleted file mode 100755 index cb67aa96..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth deleted file mode 100755 index 813b6b4c..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="framebuffer console_setup brltty" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -printf '\033[?25l' > /dev/tty7 -/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid -/bin/plymouth show-splash diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev deleted file mode 100755 index cd2fa564..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -e -# initramfs init-top script for udev - -PREREQ="all_generic_ide blacklist" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# It's all over netlink now -echo "" > /proc/sys/kernel/hotplug - -# Start the udev daemon to process events -/sbin/udevd --daemon --resolve-names=never - -# Iterate sysfs and fire off everything; if we include a rule for it then -# it'll get handled; otherwise it'll get handled later when we do this again -# in the main boot sequence. -( /sbin/udevadm trigger --subsystem-match=block; \ - /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local deleted file mode 100644 index 865572b5..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local +++ /dev/null @@ -1,131 +0,0 @@ -# Local filesystem mounting -*- shell-script -*- - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" - run_scripts /scripts/local-top - [ "$quiet" != "y" ] && log_end_msg - - while [ -z "${FSTYPE}" ]; do - FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) - - # Run failure hooks, hoping one of them can fix up the system - # and we can restart the wait loop. If they all fail, abort - # and move on to the panic handler and shell. - if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then - break - fi - done - - # We've given up, but we'll let the user fix matters if they can - while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do - # give hint about renamed root - case "${ROOT}" in - /dev/hd*) - suffix="${ROOT#/dev/hd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/sd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" - fi - ;; - /dev/sd*) - suffix="${ROOT#/dev/sd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/hd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" - fi - ;; - esac - echo "Gave up waiting for root device. Common problems:" - echo " - Boot args (cat /proc/cmdline)" - echo " - Check rootdelay= (did the system wait long enough?)" - echo " - Check root= (did the system wait for the right device?)" - echo " - Missing modules (cat /proc/modules; ls /dev)" - panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" - done - - # Get the root filesystem type if not set - if [ -z "${ROOTFSTYPE}" ]; then - [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") - ROOTFSTYPE="${FSTYPE}" - else - FSTYPE="${ROOTFSTYPE}" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" - run_scripts /scripts/local-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ] && \ - [ -z "$LOOP" ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} - - # FIXME This has no error checking - # Mount root - mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} - mountroot_status="$?" - if [ "$LOOP" ]; then - if [ "$mountroot_status" != 0 ]; then - if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then - panic " -Could not mount the partition ${ROOT}. -This could also happen if the file system is not clean because of an operating -system crash, an interrupted boot process, an improper shutdown, or unplugging -of a removable device without first unmounting or ejecting it. To fix this, -simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then -gracefully shut down and reboot back into Windows. After this you should be -able to reboot again and resume the installation. -(filesystem = ${FSTYPE}, error code = $mountroot_status) -" - fi - fi - - mkdir -p /host - mount -o move ${rootmnt} /host - - while [ ! -e "/host/${LOOP#/}" ]; do - panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" - done - - # Get the loop filesystem type if not set - if [ -z "${LOOPFSTYPE}" ]; then - eval $(fstype < "/host/${LOOP#/}") - else - FSTYPE="${LOOPFSTYPE}" - fi - if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then - FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") - [ -z "$FSTYPE" ] && FSTYPE="unknown" - fi - - if [ ${readonly} = y ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - modprobe loop - modprobe ${FSTYPE} - - # FIXME This has no error checking - mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} - - if [ -d ${rootmnt}/host ]; then - mount -o move /host ${rootmnt}/host - fi - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" - run_scripts /scripts/local-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g deleted file mode 100755 index 335ef95e..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g +++ /dev/null @@ -1,16 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - mkdir -p /dev/.initramfs/varrun - pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit - pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit -fi - -exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc deleted file mode 100755 index c9fbc369..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/sh -e -# initramfs local-premount script for fixrtc - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - -# use the fixrtc cmdline option in your bootloader to -# automatically set the hardware clock to the date of -# the last mount of your root filesystem to avoid fsck -# to get confused by the superblock being in the future - -BROKEN_CLOCK="" -ROOTDEV="" - -for x in $(cat /proc/cmdline); do - case ${x} in - root=*) - value=${x#*=} - - # Find the device node path depending on the form of root= : - - case ${value} in - UUID=*) - ROOTDEV=/dev/disk/by-uuid/${value#UUID=} - ;; - LABEL=*) - ROOTDEV=/dev/disk/by-label/${value#LABEL=} - ;; - *) - ROOTDEV=${value} - ;; - esac - ;; - fixrtc) - BROKEN_CLOCK=1 - ;; - esac -done - -if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then - ROOTDISK=$(readlink -f "$ROOTDEV") && - - TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && - TIME=${TIMESTR#*:} && - - date --set="${TIME} 1 minute" >/dev/null 2>&1 -fi - -# This script is best-effort. If we couldn't fudge the clock as desired, -# just try to carry on boot anyway: -# It will probably fail, but we won't have made the situation any worse. -exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g deleted file mode 100755 index 57e7f8ba..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - modprobe fuse -fi - -exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume deleted file mode 100755 index 46535936..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -. ./scripts/functions - -if [ -z "${resume}" ]; then - exit 0 -fi - -case $resume in -LABEL=*) - resume="${resume#LABEL=}" - - # support any / in LABEL= path (escape to \x2f) - case "${resume}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - resume="$(echo ${resume} | sed 's,/,\\x2f,g')" - else - if [ "${resume}" != "${resume#/}" ]; then - resume="\x2f${resume#/}" - fi - if [ "${resume}" != "${resume%/}" ]; then - resume="${resume%/}\x2f" - fi - IFS='/' - newresume= - for s in $resume; do - if [ -z "${newresume}" ]; then - newresume="${s}" - else - newresume="${newresume}\\x2f${s}" - fi - done - unset IFS - resume="${newresume}" - fi - esac - resume="/dev/disk/by-label/${resume}" - ;; -UUID=*) - resume="/dev/disk/by-uuid/${resume#UUID=}" - ;; -esac - -SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) - -case "${SWAPTYPE}" in - swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) - if [ -x /bin/plymouth ] && plymouth --ping; then - plymouth message --text="Resuming from $resume" - fi - - # hardcode path, uswsusp ships an resume binary too - if [ -n "${resume_offset}" ]; then - /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 - else - /bin/resume ${resume} >/dev/null 2>&1 - fi - ;; -esac diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs deleted file mode 100644 index b9c2522d..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs +++ /dev/null @@ -1,83 +0,0 @@ -# NFS filesystem mounting -*- shell-script -*- - -# FIXME This needs error checking - -retry_nr=0 - -# parse nfs bootargs and mount nfs -do_nfsmount() -{ - - configure_networking - - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - - if [ -z "${NFSOPTS}" ]; then - NFSOPTS="-o retrans=10" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" - run_scripts /scripts/nfs-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ]; then - roflag="-o ro" - else - roflag="-o rw" - fi - - nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} -} - -# NFS root mounting -mountroot() -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" - run_scripts /scripts/nfs-top - [ "$quiet" != "y" ] && log_end_msg - - modprobe nfs - # For DHCP - modprobe af_packet - - # Default delay is around 180s - # FIXME: add usplash_write info - if [ -z "${ROOTDELAY}" ]; then - delay=180 - else - delay=${ROOTDELAY} - fi - - # loop until nfsmount succeds - while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do - [ ${retry_nr} -gt 0 ] && \ - [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" - do_nfsmount - retry_nr=$(( ${retry_nr} + 1 )) - [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 - [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg - done - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" - run_scripts /scripts/nfs-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev deleted file mode 100755 index 980e496f..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -e -# initramfs nfs-top script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Each call to udevsettle can take up to three minutes -if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TIMEOUT 360" - trap "/sbin/usplash_write 'TIMEOUT 15'" 0 -fi - -# We need to wait for the network card drivers to be loaded -/sbin/udevadm settle diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup deleted file mode 100755 index 5e97f65e..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup +++ /dev/null @@ -1,82 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap deleted file mode 100644 index f011abf5..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth deleted file mode 100755 index 2da5a6b5..00000000 --- a/client/ogClient/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -/bin/plymouth quit diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm deleted file mode 100644 index 11d27f8c..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm +++ /dev/null @@ -1,18 +0,0 @@ -# mdadm boot_degraded configuration -# -# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if -# you want. You can also change the values here and changes will be preserved. -# Do note that only the values are preserved; the rest of the file is -# rewritten. -# -# BOOT_DEGRADED: -# Do you want to boot your system if a RAID providing your root filesystem -# becomes degraded? -# -# Running a system with a degraded RAID could result in permanent data loss -# if it suffers another hardware fault. -# -# However, you might answer "yes" if this system is a server, expected to -# tolerate hardware faults and boot unattended. - -BOOT_DEGRADED=false diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume deleted file mode 100644 index 34fdc4a5..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume +++ /dev/null @@ -1 +0,0 @@ -RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks deleted file mode 100755 index 3d9b04b8..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash - - -# Insert OpenGnsys Engine -mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf deleted file mode 100644 index 754e2bea..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# initramfs.conf -# Configuration file for mkinitramfs(8). See initramfs.conf(5). -# - -# -# MODULES: [ most | netboot | dep | list ] -# -# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. -# -# dep - Try and guess which modules to load. -# -# netboot - Add the base modules, network modules, but skip block devices. -# -# list - Only include modules from the 'additional modules' list -# - -MODULES=most - -# -# BUSYBOX: [ y | n ] -# -# Use busybox if available. -# - -BUSYBOX=y - -# -# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] -# -# Amount of RAM to use for RAM-based compressed swap space. -# -# An empty value - compcache isn't used, or added to the initramfs at all. -# An integer and K (e.g. 65536 K) - use a number of kilobytes. -# An integer and M (e.g. 256 M) - use a number of megabytes. -# An integer and G (e.g. 1 G) - use a number of gigabytes. -# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. -# -# You can optionally install the compcache package to configure this setting -# via debconf and have userspace scripts to load and unload compcache. -# - -COMPCACHE_SIZE="" - -# -# NFS Section of the config. -# - -# -# BOOT: [ local | nfs ] -# -# local - Boot off of local media (harddrive, USB stick). -# -# nfs - Boot using an NFS drive as the root of the drive. -# - -BOOT=local - -# -# DEVICE: ... -# -# Specify the network interface, like eth0 -# - -DEVICE=eth0 - -# -# NFSROOT: [ auto | HOST:MOUNT ] -# - -NFSROOT=auto - diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules deleted file mode 100644 index 484ef718..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/modules +++ /dev/null @@ -1,13 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -fbcon -vesafb -vga16b diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og deleted file mode 100755 index 6408eda7..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og +++ /dev/null @@ -1,140 +0,0 @@ -# OpenGnsys Local filesystem mounting -*- shell-script -*- - -ogLinkBusybox () -{ -for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do - ln -f /bin/busybox /bin/$n -done -ln -f /bin/busybox /bin/sh -} - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - - mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -configure_networking -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - -set -a -trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 -/opt/opengnsys/etc/preinit/default.sh - - - - - - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - run_scripts /scripts/og-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf b/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf deleted file mode 100644 index 3c27473b..00000000 --- a/client/ogClient/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf +++ /dev/null @@ -1,20 +0,0 @@ -# -# Configuration file for update-initramfs(8) -# - -# -# update_initramfs [ yes | all | no ] -# -# Default is yes -# If set to all update-initramfs will update all initramfs -# If set to no disables any update to initramfs beside kernel upgrade - -update_initramfs=yes - -# -# backup_initramfs [ yes | no ] -# -# Default is no -# If set to no leaves no .bak backup files. - -backup_initramfs=no diff --git a/client/ogClient/old/serverstructure/etc/exports.txt b/client/ogClient/old/serverstructure/etc/exports.txt deleted file mode 100644 index d5053530..00000000 --- a/client/ogClient/old/serverstructure/etc/exports.txt +++ /dev/null @@ -1 +0,0 @@ -/var/lib/tftpboot/ *(ro,no_subtree_check,no_root_squash,sync) diff --git a/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt b/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt deleted file mode 100644 index e47df3d8..00000000 --- a/client/ogClient/old/serverstructure/etc/samba/smb.conf.txt +++ /dev/null @@ -1,29 +0,0 @@ -[tftpboot] - comment = el directorio fisico ogclient debe estar como escritura - writeable = no - read only = yes - #locking = no - path = /var/lib/tftpboot - guest ok = no - -[ogclient] - comment = client - read only = yes - locking = no - path = /opt/opengnsys/client - guest ok = no - -[oglog] - comment = log - read only = yes - locking = no - path = /opt/opengnsys/log/clients - guest ok = no - -[ogimages] - comment = images - read only = no - writeable = yes - locking = no - path = /opt/opengnsys/images - guest ok = no \ No newline at end of file diff --git a/client/ogClient/old/serverstructure/init/defaultTESTING.sh b/client/ogClient/old/serverstructure/init/defaultTESTING.sh deleted file mode 100755 index 07c10bcb..00000000 --- a/client/ogClient/old/serverstructure/init/defaultTESTING.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -/etc/init.d/ssh restart -#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 - - -# Fichero de registro de incidencias (en el servidor; si no, en local). -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} -if ! touch $OGLOGFILE 2>/dev/null; then - OGLOGFILE=/var/log/opengnsys.log -fi - - -#TODO => activacion de modo escritura en REPO -ActiveAdmin=true -if [ $ActiveAdmin == "true" ] -then - export boot=admin - umount /opt/opengnsys/images - - if [ "$ogprotocol" == "nfs" ] - then - mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock - fi - - if [ "$ogprotocol" == "smb" ] - then - echo "montando smb" - mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og - echo mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og - - fi -fi -# Arranque de OpenGnSys Client. -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - - - echo "$MSG_LAUNCHCLIENT modo cliente full" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 -fi - -# Si fallo en cliente y modo "admin", cargar shell; si no, salir. -#if [ "$boot" == "admin" ]; then - bash -#fi diff --git a/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh b/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh deleted file mode 100755 index 3d291cc5..00000000 --- a/client/ogClient/old/serverstructure/preinit/defaultTESTING.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -# Para que no haya problemas con el interprete -#ln -fs /opt/opengnsys/bin/bash /bin/bash - -set -a - -#source /opt/opengnsys/etc/preinit/loadenviron.sh -source /opt/opengnsys/etc/preinit/loadenvironTESTING.sh -#for f in fileslinks.sh loadudeb.sh loadmodules.sh metadevs.sh; do -for f in loadmodulesTESTING.sh; do - $OGETC/preinit/$f -done - -if [ -f $OGETC/init/$OG_IP.sh ]; then - $OGETC/init/$OG_IP.sh - -elif [ -f $OGETC/init/$OGGROUP.sh ]; then - $OGETC/init/$OGGROUP.sh - -elif [ -f $OGETC/init/defaultTESTING.sh ]; then - $OGETC/init/defaultTESTING.sh - -else - echo "No se ha encontrado script de inicio" - halt -fi diff --git a/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh b/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh deleted file mode 100755 index 1273db7f..00000000 --- a/client/ogClient/old/serverstructure/preinit/loadenvironTESTING.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -#/** -#@file loadenviron.sh -#@brief Script de carga de la API de funciones de OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - -# Idioma por defecto. -export LANG="${LANG:-es_ES}" - -# Directorios del projecto OpenGnSys. -export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" -if [ -d $OPENGNSYS ]; then - export OGBIN=$OPENGNSYS/bin/testing - #export OGBIN=$OPENGNSYS/bin - export OGETC=$OPENGNSYS/etc - export OGLIB=$OPENGNSYS/lib - export OGAPI=$OGLIB/engine/bin - export OGSCRIPTS=$OPENGNSYS/scripts - export OGIMG=$OPENGNSYS/images - export OGCAC=$OPENGNSYS/cache - export OGLOG=$OPENGNSYS/log - - #export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH - #export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH - - # Cargar fichero de idioma. - LANGFILE=$OGETC/lang.$LANG.conf - if [ -f $LANGFILE ]; then - source $LANGFILE - for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do - export $i - done - fi - echo "$MSG_LOADAPI" - # Cargar mapa de teclado. - loadkeys ${LANG%_*} >/dev/null - # Cargar API de funciones. - for i in $OGAPI/*.lib; do - source $i - done - for i in $(typeset -F | cut -f3 -d" "); do - export -f $i - done - - # Añadir dependencia de arquitectura - ARCH=$(ogGetArch) -# if [ -n "$ARCH" ]; then - # export PATH=$OGBIN/$ARCH:$PATH - # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH - # fi - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin - export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - - # Carga de las API testing - if [ "$engine" = "testing" ] - then - for i in $OGAPI/*.testing; do - source $i - done - #export PATH=$PATH:$OGBIN/$ARCH-testing - fi - - # Fichero de registros. - export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" - # FIXME Pruebas para grupos de ordenadores - #export OGGROUP=$(ogGetGroup) - export OGGROUP="$group" -fi - -# Declaración de códigos de error. -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. - diff --git a/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh b/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh deleted file mode 100755 index cea7d53a..00000000 --- a/client/ogClient/old/serverstructure/preinit/loadmodulesTESTING.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -#/** -#@file loadmodules.sh -#@brief Script de inicio para cargar módulos complementarios del kernel. -#@version 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-01-26 -#*/ - - -MSG_LOADMODULES=${MSG_LOADMODULES:-"."} -echo "$MSG_LOADMODULES para cliente full" - -# Directorio principal de módulos del kernel. -MODULESDIR=/lib/modules/$(uname -r)/kernel - -# Módulo del ratón. -insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null -# Módulos de discos. -#for m in $MODULESDIR/drivers/ata/*.ko; do - # insmod $m 2>/dev/null -#done -# Módulos de sistemas de archivos. -#for f in reiserfs jfs xfs hfs hfsplus; do -#for f in reiserfs xfs hfs hfsplus; do -# insmod $MODULESDIR/fs/$f/$f.ko 2>/dev/null -#done - diff --git a/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL b/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL deleted file mode 100644 index b7f81d0a..00000000 --- a/client/ogClient/old/serverstructure/var/lib/tftpboot/defaultFULL +++ /dev/null @@ -1,18 +0,0 @@ -DEFAULT pxe-2.6.32-21-generic-pae - -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin - -LABEL pxe-2.6.32-21-generic-pae -KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae -APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=nfs engine=testing - - -#NOTA: parametro boot: reservado para oginit INCOMPATIBLE CON BOOT=ADMIN -#NOTA: reposerver=$IPREPO correspondería a tu servidor Repositorio OG -#ogrepo=172.17.32.242 -#ip: -#og2nd=sqfs =>sqfs, img -#ogprotocol=nfs => nfs, smb -#engine=testing => activa las libreias testing de cada universidad. -- cgit v1.2.3-18-g5258 From 345354b6adcebdc4a127610119c97e6c1000098c Mon Sep 17 00:00:00 2001 From: adv Date: Fri, 8 Apr 2011 14:02:15 +0000 Subject: version1.0 limpiando boot-tools git-svn-id: https://opengnsys.es/svn/branches/version1.0@1765 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../old/ModificacionesNecesiariasENGINE/Net.lib | 77 ---- .../old/ModificacionesNecesiariasENGINE/readme | 27 -- client/boot-tools/old/Net.lib | 77 ---- client/boot-tools/old/boot/default.sh | 23 - client/boot-tools/old/boot/load2fs.sh | 19 - client/boot-tools/old/conframfs.sh | 34 -- .../usr/lib/initramfs-tools/bin/busybox | Bin 1269432 -> 0 bytes .../usr/lib/initramfs-tools/busybox | Bin 223548 -> 0 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 9688 -> 0 bytes .../usr/share/initramfs-tools/hook-functions | 461 --------------------- .../usr/share/initramfs-tools/hooks/compcache | 95 ----- .../usr/share/initramfs-tools/hooks/console_setup | 50 --- .../usr/share/initramfs-tools/hooks/dmsetup | 23 - .../usr/share/initramfs-tools/hooks/fixrtc | 26 -- .../usr/share/initramfs-tools/hooks/framebuffer | 41 -- .../usr/share/initramfs-tools/hooks/fuse_utils | 15 - .../usr/share/initramfs-tools/hooks/kbd | 23 - .../usr/share/initramfs-tools/hooks/lvm2 | 43 -- .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 - .../usr/share/initramfs-tools/hooks/plymouth | 69 --- .../usr/share/initramfs-tools/hooks/thermal | 46 -- .../usr/share/initramfs-tools/hooks/udev | 52 --- .../usr/share/initramfs-tools/hooks/watershed | 25 -- .../usr/share/initramfs-tools/init | 272 ------------ .../usr/share/initramfs-tools/modules | 10 - .../usr/share/initramfs-tools/scripts/functions | 420 ------------------- .../initramfs-tools/scripts/init-bottom/plymouth | 21 - .../share/initramfs-tools/scripts/init-bottom/udev | 24 -- .../initramfs-tools/scripts/init-premount/lvm2 | 41 -- .../scripts/init-top/all_generic_ide | 18 - .../initramfs-tools/scripts/init-top/blacklist | 34 -- .../initramfs-tools/scripts/init-top/console_setup | 83 ---- .../initramfs-tools/scripts/init-top/framebuffer | 104 ----- .../share/initramfs-tools/scripts/init-top/keymap | 28 -- .../initramfs-tools/scripts/init-top/plymouth | 20 - .../share/initramfs-tools/scripts/init-top/udev | 30 -- .../usr/share/initramfs-tools/scripts/local | 131 ------ .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 - .../initramfs-tools/scripts/local-premount/fixrtc | 64 --- .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 - .../initramfs-tools/scripts/local-premount/resume | 75 ---- .../usr/share/initramfs-tools/scripts/nfs | 83 ---- .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 -- .../initramfs-tools/scripts/panic/console_setup | 82 ---- .../usr/share/initramfs-tools/scripts/panic/keymap | 27 -- .../share/initramfs-tools/scripts/panic/plymouth | 18 - .../boot-tools/old/initramfs-tools-OG/conf.d/mdadm | 18 - .../old/initramfs-tools-OG/conf.d/resume | 1 - .../old/initramfs-tools-OG/hooks/oghooks | 40 -- .../old/initramfs-tools-OG/initramfs.conf | 72 ---- client/boot-tools/old/initramfs-tools-OG/modules | 13 - .../boot-tools/old/initramfs-tools-OG/scripts/og | 140 ------- .../old/initramfs-tools-OG/update-initramfs.conf | 20 - client/boot-tools/old/ogClientFunctions | 255 ------------ client/boot-tools/old/ogClientGenerator.sh | 306 -------------- .../ModificacionesNecesiariasENGINE/Net.lib | 77 ---- .../ModificacionesNecesiariasENGINE/readme | 20 - client/boot-tools/old/ogFSHlnk/boot/default.sh | 23 - client/boot-tools/old/ogFSHlnk/boot/load2fs.sh | 19 - .../old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh | 395 ------------------ .../initramfs-tools-OG-unionfs/antonio/rcog | 137 ------ .../etc/initramfs-tools-OG/conf.d/resume | 1 - .../etc/initramfs-tools-OG/hooks/oghooks | 43 -- .../etc/initramfs-tools-OG/initramfs.conf | 72 ---- .../etc/initramfs-tools-OG/modules | 14 - .../etc/initramfs-tools-OG/scripts/og | 194 --------- .../etc/initramfs-tools-OG/update-initramfs.conf | 20 - .../initramfs-tools-OG-unionfs/etc/inittab | 14 - .../etc/modprobe.d/blacklist-framebuffer.conf | 30 -- .../usr/lib/initramfs-tools/bin/busybox | Bin 1269432 -> 0 bytes .../usr/lib/initramfs-tools/busybox | Bin 223548 -> 0 bytes .../usr/lib/initramfs-tools/wait-for-root | Bin 9688 -> 0 bytes .../usr/share/initramfs-tools/hook-functions | 461 --------------------- .../usr/share/initramfs-tools/hooks/compcache | 95 ----- .../usr/share/initramfs-tools/hooks/console_setup | 50 --- .../usr/share/initramfs-tools/hooks/dmsetup | 23 - .../usr/share/initramfs-tools/hooks/fixrtc | 26 -- .../usr/share/initramfs-tools/hooks/framebuffer | 41 -- .../usr/share/initramfs-tools/hooks/fuse_utils | 15 - .../usr/share/initramfs-tools/hooks/kbd | 23 - .../usr/share/initramfs-tools/hooks/lvm2 | 43 -- .../usr/share/initramfs-tools/hooks/ntfs_3g | 22 - .../usr/share/initramfs-tools/hooks/plymouth | 69 --- .../usr/share/initramfs-tools/hooks/thermal | 46 -- .../usr/share/initramfs-tools/hooks/udev | 52 --- .../usr/share/initramfs-tools/hooks/watershed | 25 -- .../usr/share/initramfs-tools/init | 272 ------------ .../usr/share/initramfs-tools/modules | 10 - .../usr/share/initramfs-tools/scripts/functions | 420 ------------------- .../initramfs-tools/scripts/init-bottom/plymouth | 21 - .../share/initramfs-tools/scripts/init-bottom/udev | 24 -- .../initramfs-tools/scripts/init-premount/lvm2 | 41 -- .../scripts/init-top/all_generic_ide | 18 - .../initramfs-tools/scripts/init-top/blacklist | 34 -- .../initramfs-tools/scripts/init-top/console_setup | 83 ---- .../initramfs-tools/scripts/init-top/framebuffer | 104 ----- .../share/initramfs-tools/scripts/init-top/keymap | 28 -- .../initramfs-tools/scripts/init-top/plymouth | 20 - .../share/initramfs-tools/scripts/init-top/udev | 30 -- .../usr/share/initramfs-tools/scripts/local | 131 ------ .../initramfs-tools/scripts/local-bottom/ntfs_3g | 16 - .../initramfs-tools/scripts/local-premount/fixrtc | 64 --- .../initramfs-tools/scripts/local-premount/ntfs_3g | 14 - .../initramfs-tools/scripts/local-premount/resume | 75 ---- .../usr/share/initramfs-tools/scripts/nfs | 83 ---- .../usr/share/initramfs-tools/scripts/nfs-top/udev | 27 -- .../initramfs-tools/scripts/panic/console_setup | 82 ---- .../usr/share/initramfs-tools/scripts/panic/keymap | 27 -- .../share/initramfs-tools/scripts/panic/plymouth | 18 - .../ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm | 18 - .../ogFSHlnk/old/initramfs-tools-OG/conf.d/resume | 1 - .../ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks | 40 -- .../ogFSHlnk/old/initramfs-tools-OG/initramfs.conf | 72 ---- .../old/ogFSHlnk/old/initramfs-tools-OG/modules | 13 - .../old/ogFSHlnk/old/initramfs-tools-OG/scripts/og | 140 ------- .../old/initramfs-tools-OG/update-initramfs.conf | 20 - .../boot-tools/old/serverstructure/etc/exports.txt | 1 - .../old/serverstructure/etc/samba/smb.conf.txt | 29 -- .../old/serverstructure/init/defaultTESTING.sh | 46 -- .../old/serverstructure/preinit/defaultTESTING.sh | 27 -- .../serverstructure/preinit/loadenvironTESTING.sh | 95 ----- .../serverstructure/preinit/loadmodulesTESTING.sh | 28 -- .../serverstructure/var/lib/tftpboot/defaultFULL | 18 - 123 files changed, 7995 deletions(-) delete mode 100755 client/boot-tools/old/ModificacionesNecesiariasENGINE/Net.lib delete mode 100644 client/boot-tools/old/ModificacionesNecesiariasENGINE/readme delete mode 100755 client/boot-tools/old/Net.lib delete mode 100755 client/boot-tools/old/boot/default.sh delete mode 100644 client/boot-tools/old/boot/load2fs.sh delete mode 100644 client/boot-tools/old/conframfs.sh delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root delete mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init delete mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules delete mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev delete mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume delete mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup delete mode 100644 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap delete mode 100755 client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth delete mode 100644 client/boot-tools/old/initramfs-tools-OG/conf.d/mdadm delete mode 100644 client/boot-tools/old/initramfs-tools-OG/conf.d/resume delete mode 100755 client/boot-tools/old/initramfs-tools-OG/hooks/oghooks delete mode 100644 client/boot-tools/old/initramfs-tools-OG/initramfs.conf delete mode 100644 client/boot-tools/old/initramfs-tools-OG/modules delete mode 100755 client/boot-tools/old/initramfs-tools-OG/scripts/og delete mode 100644 client/boot-tools/old/initramfs-tools-OG/update-initramfs.conf delete mode 100755 client/boot-tools/old/ogClientFunctions delete mode 100755 client/boot-tools/old/ogClientGenerator.sh delete mode 100755 client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib delete mode 100644 client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme delete mode 100755 client/boot-tools/old/ogFSHlnk/boot/default.sh delete mode 100644 client/boot-tools/old/ogFSHlnk/boot/load2fs.sh delete mode 100755 client/boot-tools/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/console_setup delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/dmsetup delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fixrtc delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/framebuffer delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/fuse_utils delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/kbd delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/lvm2 delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/ntfs_3g delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/plymouth delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/thermal delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/udev delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/watershed delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/init delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/all_generic_ide delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup delete mode 100644 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap delete mode 100755 client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth delete mode 100644 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm delete mode 100644 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume delete mode 100755 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks delete mode 100644 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf delete mode 100644 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/modules delete mode 100755 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og delete mode 100644 client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf delete mode 100644 client/boot-tools/old/serverstructure/etc/exports.txt delete mode 100644 client/boot-tools/old/serverstructure/etc/samba/smb.conf.txt delete mode 100755 client/boot-tools/old/serverstructure/init/defaultTESTING.sh delete mode 100755 client/boot-tools/old/serverstructure/preinit/defaultTESTING.sh delete mode 100755 client/boot-tools/old/serverstructure/preinit/loadenvironTESTING.sh delete mode 100755 client/boot-tools/old/serverstructure/preinit/loadmodulesTESTING.sh delete mode 100644 client/boot-tools/old/serverstructure/var/lib/tftpboot/defaultFULL diff --git a/client/boot-tools/old/ModificacionesNecesiariasENGINE/Net.lib b/client/boot-tools/old/ModificacionesNecesiariasENGINE/Net.lib deleted file mode 100755 index 14806b7e..00000000 --- a/client/boot-tools/old/ModificacionesNecesiariasENGINE/Net.lib +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -#/** -#@file Net.lib -#@brief Librería o clase Net -#@class Net -#@brief Funciones básicas de red. -#@version 1.0 -#@warning License: GNU GPLv3+ -#*/ - - -#/** -# ogGetHostname -#@brief Muestra el nombre del cliente. -#@return str_host - nombre de máquina -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetHostname () -{ -local HOST NETFILE -# Tomar nombre de la variable HOSTNAME -HOST="$HOSTNAME" - -# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) -[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} - END {print host} - ' /var/lib/dhcp3/dhclient.leases) -# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ -[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} - $1~/hostname/ {print $2}' /proc/cmdline) - -[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" -echo $HOST -} - - -#/** -# ogGetIpAddress -#@brief Muestra la dirección IP del sistema -#@return str_ip - Dirección IP -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetIpAddress () -{ -local IP -#Version og2ndFS -NETFILE="/tmp/net-eth0.conf" -[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) - -# Obtener direcciones IP. /* (comentario para Doxygen) -[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') -# Mostrar sólo la primera. (comentario para Doxygen) */ -echo ${IP%% *} -} - - -#/** -# ogGetMacAddress -#@brief Muestra la dirección Ethernet del cliente. -#@return str_ether - Dirección Ethernet -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetMacAddress () -{ -local MAC -# Obtener direcciones Ethernet. -MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') -# Mostrar sólo la primera. -echo ${MAC%% *} -} - diff --git a/client/boot-tools/old/ModificacionesNecesiariasENGINE/readme b/client/boot-tools/old/ModificacionesNecesiariasENGINE/readme deleted file mode 100644 index 9078de1b..00000000 --- a/client/boot-tools/old/ModificacionesNecesiariasENGINE/readme +++ /dev/null @@ -1,27 +0,0 @@ -Moverse al etc del cliente. -cd /opt/opengnsys/client/etc - -preinit/default - modificamos el sha-bang a /bin/bash - eliminamos enlace del bash - Ejecute solo el loadmodules del for - -preinit/loaenviron - comentamos el LD_PATH - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/opt/drbl/sbin - - -dejar en bin solo el browser y el ogadmcliente - -/var/lib/tftboot/pxelinux.cfg/default -DEFAULT pxe2 -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin -LABEL pxe2 -KERNEL vmlinuz-2.6.32-21-generic-pae -APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 - - -parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN -temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/boot-tools/old/Net.lib b/client/boot-tools/old/Net.lib deleted file mode 100755 index 14806b7e..00000000 --- a/client/boot-tools/old/Net.lib +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -#/** -#@file Net.lib -#@brief Librería o clase Net -#@class Net -#@brief Funciones básicas de red. -#@version 1.0 -#@warning License: GNU GPLv3+ -#*/ - - -#/** -# ogGetHostname -#@brief Muestra el nombre del cliente. -#@return str_host - nombre de máquina -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetHostname () -{ -local HOST NETFILE -# Tomar nombre de la variable HOSTNAME -HOST="$HOSTNAME" - -# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) -[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} - END {print host} - ' /var/lib/dhcp3/dhclient.leases) -# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ -[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} - $1~/hostname/ {print $2}' /proc/cmdline) - -[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" -echo $HOST -} - - -#/** -# ogGetIpAddress -#@brief Muestra la dirección IP del sistema -#@return str_ip - Dirección IP -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetIpAddress () -{ -local IP -#Version og2ndFS -NETFILE="/tmp/net-eth0.conf" -[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) - -# Obtener direcciones IP. /* (comentario para Doxygen) -[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') -# Mostrar sólo la primera. (comentario para Doxygen) */ -echo ${IP%% *} -} - - -#/** -# ogGetMacAddress -#@brief Muestra la dirección Ethernet del cliente. -#@return str_ether - Dirección Ethernet -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetMacAddress () -{ -local MAC -# Obtener direcciones Ethernet. -MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') -# Mostrar sólo la primera. -echo ${MAC%% *} -} - diff --git a/client/boot-tools/old/boot/default.sh b/client/boot-tools/old/boot/default.sh deleted file mode 100755 index e8c5b5d2..00000000 --- a/client/boot-tools/old/boot/default.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/opt/opengnsys/bin/bash - -set -a - -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} -#### FIXME EN PRUEBAS -OGLOGFILE=/var/log/opengnsys.log - -/opt/opengnsys/etc/init/load2fs.sh -source /opt/opengnsys/etc/preinit/loadenviron.sh -export PATH=/opt/og2fs/bin:$PATH -export PATH=/opt/og2fs/sbin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - echo "$MSG_LAUNCHCLIENT" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -fi - -bash -# FIXME Arranque Browser -#browser -qws $OGSTARTPAGE diff --git a/client/boot-tools/old/boot/load2fs.sh b/client/boot-tools/old/boot/load2fs.sh deleted file mode 100644 index ca3e3be7..00000000 --- a/client/boot-tools/old/boot/load2fs.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -#/** -#@file load2fs.sh -#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Antonio J. Doblas Viso, Unviersidad de Malaga. -#@date 2010-02-15 -#*/ -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro -cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -export PATH=/opt/og2fs/sbin:$PATH -export PATH=/opt/og2fs/bin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/boot-tools/old/conframfs.sh b/client/boot-tools/old/conframfs.sh deleted file mode 100644 index 851928d5..00000000 --- a/client/boot-tools/old/conframfs.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -#/** -#@file conframfs.sh -#@brief Script de inicio para configurar el 2º FileSystem linkado. -#@version 1.0 -#@author Antonio J. Doblas Viso. Universidad de Málaga -#@date 2010-06-02 -#*/ -#sustituido por la funcion ogPostConfigureFS - -MSG_LOADMODULES=${MSG_CONFRAMFS:-"."} -echo "$MSG_CONFRAMFS" - -# configuramos el /etc/hostname. -HOSTNAME=$(ogGetHostname) -echo $HOSTNAME > /etc/hostname - - -#configuramos el /etc/hosts -IP=$(ogGetIpAddress) -echo "127.0.0.1 localhost" > /etc/hosts -echo "$IP $HOSTNAME" >> /etc/hosts - -### conft net -echo "auto lo " > /etc/network/interfaces -echo "iface lo inet loopback" >> /etc/network/interfaces - - -mkdir -p /var/run/network -cd /var/run/network -touch ifstate - -/etc/init.d/networking restart -ifup lo diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox deleted file mode 100755 index da2dc637..00000000 Binary files a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox and /dev/null differ diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox deleted file mode 100755 index d04890f6..00000000 Binary files a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox and /dev/null differ diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root deleted file mode 100755 index aecb5e32..00000000 Binary files a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root and /dev/null differ diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions deleted file mode 100644 index 2610f79a..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions +++ /dev/null @@ -1,461 +0,0 @@ -# -*- shell-script -*- - -catenate_cpiogz() { - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 - return - fi - - cat "${1}" >>"${__TMPCPIOGZ}" -} - -force_load() -{ - manual_add_modules ${@} - echo "${@}" >>"${DESTDIR}/conf/modules" -} - -# Takes a file containing a list of modules to be added as an -# argument, figures out dependancies, and adds them. -# -# Input file syntax: -# -# # comment -# modprobe_module_name [args ...] -# [...] -# -add_modules_from_file() -{ - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 - return - fi - - sed -e '/^#/d' ${1} | while read module rest; do - force_load "${module}" "${rest}" - done -} - -# Is this module available? -have_module() -{ - modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" >/dev/null 2>&1 -} - -# Add dependent modules + eventual firmware -manual_add_modules() -{ - local mam_x firmwares firmware - - for mam_x in $(modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do - # Prune duplicates - if [ -e "${DESTDIR}/${mam_x}" ]; then - continue - fi - - mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" - ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" - if [ "${verbose}" = "y" ]; then - echo "Adding module ${mam_x}" - fi - - # Add firmware files if necessary - firmwares=$(modinfo -F firmware "${mam_x}") - if [ -z "${firmwares}" ]; then - continue - fi - for firmware in $firmwares; do - if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ - || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then - continue - fi - - # Only print warning for missing fw of loaded module - # or forced loaded module - if [ ! -e "/lib/firmware/${firmware}" ] \ - && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then - if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ - /proc/modules \ - || grep -q "^$(basename "${mam_x}" .ko)" \ - "${CONFDIR}/modules"; then - echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 - fi - continue - fi - - if [ -e "/lib/firmware/${version}/${firmware}" ]; then - copy_exec "/lib/firmware/${version}/${firmware}" - else - copy_exec "/lib/firmware/${firmware}" - fi - if [ "${verbose}" = "y" ]; then - echo "Adding firmware ${firmware}" - fi - done - done -} - -# $1 is the source path (e.g. /usr/bin/time) -# $2 is the relative destination (e.g. /usr or /usr/time) -# -# The destination is interpreted in the same way "cp" would, meaning -# (assuming /bin is a directory): -# -# "copy_exec /usr/bin/time /bin" -> /bin/time -# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime -# -# If $2 is left out, the same destination path as for the source arg will -# be used and directories will be created as needed, so: -# -# "copy_exec /usr/bin/time" -> /usr/bin/time -# -copy_exec() { - local source target destination final_destination x nonoptlib - local libname dirname - - source="${1}" - if [ -n "${2}" ]; then - target="${2}" - else - if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then - mkdir -p "${DESTDIR}/$(dirname "${1}")" - fi - target="${1}" - fi - - if [ -d "${DESTDIR}/${target}" ]; then - destination="${target}/$(basename "${source}")" - else - destination="${target}" - fi - final_destination="${DESTDIR}/${destination}" - - if [ -L "$final_destination" ]; then - if [ $(readlink "${final_destination}") != "${source}" ]; then - echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 - return - fi - else - ln -s ${source} ${DESTDIR}/${destination} - if [ "${verbose}" = "y" ]; then - echo "Adding binary ${source}" - fi - fi - - # Copy the dependant libraries - for x in $(ldd ${source} 2>/dev/null | sed -e ' - /\//!d; - /linux-gate/d; - /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; - s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do - - # Try to use non-optimised libraries where possible. - # We assume that all HWCAP libraries will be in tls, - # sse2, vfp or neon - nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') - - if [ -e "${nonoptlib}" ]; then - x="${nonoptlib}" - fi - - libname=$(basename "${x}") - dirname=$(dirname "${x}") - - mkdir -p "${DESTDIR}/${dirname}" - if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then - ln -s "${x}" "${DESTDIR}/${dirname}" - if [ "${verbose}" = "y" ]; then - echo "Adding library ${x}" - fi - fi - done -} - -# Copy entire subtrees to the initramfs -copy_modules_dir() -{ - local x_mod - - if ! [ -d "${MODULESDIR}/${1}" ]; then - return; - fi - if [ "${verbose}" = "y" ]; then - echo "Copying module directory ${1}" - fi - for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do - manual_add_modules $(basename ${x_mod} .ko) - done -} - -# walk /sys for relevant modules -sys_walk_mod_add() -{ - local driver_path module - device_path="$1" - - while [ "${device_path}" != "/sys" ]; do - driver_path="$(readlink -f ${device_path}/driver)" - if [ -e "$driver_path" ]; then - module="$(basename $(readlink -f $driver_path))" - if [ -n "${module}" ]; then - force_load "${module}" - fi - fi - device_path="$(dirname ${device_path})" - done -} - -# walk /sys for relevant modalias -sys_walk_modalias() -{ - local device_path modalias - - device_path="$(dirname "${1}")" - device_path="$(dirname "${device_path}")" - if [ -e "${device_path}/modalias" ]; then - modalias=$(cat "${device_path}/modalias") - fi - - if [ -n "${modalias}" ]; then - force_load "${modalias}" - fi -} - -# find and only copy root relevant modules -dep_add_modules() -{ - local block minor root FSTYPE root_dev_path x - - # findout root block device + fstype - eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" - if [ "${root}" = "/dev/root" ] ; then - root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null - fi - root="$(readlink -f ${root})" - - # find out real rootfs on auto type - if [ "${FSTYPE}" = "auto" ]; then - eval "$(/usr/lib/klibc/bin/fstype ${root})" - fi - - # check that fstype rootfs recognition - if [ "${FSTYPE}" = "unknown" ]; then - echo "mkinitramfs: unknown fstype on root ${root}" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report bug on initramfs-tools" - exit 1 - fi - - # Add rootfs - manual_add_modules "${FSTYPE}" - - # lvm luks root - if [ "${root#/dev/mapper/}" != "${root}" ]; then - minor=$((0x$(stat --format "%T" ${root}) % 256)) - block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) - if [ "${block#dm-}" != "${block}" ]; then - block=$(ls -1 /sys/block/${block}/slaves | head -n 1) - fi - block=${block%%[0-9]*} - # md root new naming scheme /dev/md/X - elif [ "${root#/dev/md/}" != "${root}" ]; then - root=${root#/dev/md/} - block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # md root /dev/mdX - elif [ "${root#/dev/md}" != "${root}" ]; then - root=${root#/dev/} - block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # mmc always uses numbering in the devicename (mmcblk[0-9]) - elif [ "${root#/dev/mmc}" != "${root}" ]; then - block=${root#/dev/} - block=${block%%p[0-9]*} - # classical root device - else - block=${root#/dev/} - block=${block%%[0-9]*} - fi - - # Error out if /sys lack block dev - if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then - echo "mkinitramfs: missing ${block} root ${root} /sys entry" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report the bug" - exit 1 - fi - - # sys walk ATA - root_dev_path=$(readlink -f /sys/block/${block}/device) - sys_walk_mod_add ${root_dev_path} - - # catch old-style IDE - if [ -e /sys/bus/ide/devices/ ]; then - sys_walk_modalias ${root_dev_path} - manual_add_modules ide-disk - manual_add_modules ide-cd - fi - - if [ -e /sys/bus/scsi/devices/ ]; then - manual_add_modules sd_mod - fi - - if [ -e /sys/bus/i2o/devices/ ]; then - force_load i2o_block - force_load i2o_config - fi - - if [ -e /sys/bus/ps3_system_bus/ ]; then - for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do - manual_add_modules "${x}" - done - fi - - if [ -e /sys/bus/vio/ ]; then - for x in sunvnet sunvdc; do - manual_add_modules "${x}" - done - fi -} - - -# The modules "most" classes added per default to the initramfs -auto_add_modules() -{ - case "$1" in - base) - for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ - hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ - hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ - hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ - hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ - ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ - virtio_pci vfat nls_cp437 nls_iso8859-1; do - manual_add_modules "${x}" - done - ;; - net) - for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ - cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ - ep93xx_eth eql fealnx famachi forcedeth gelic_net \ - hp100 igb ipg mace mv643xx_eth myri10ge \ - natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ - r8169 s2io sis900 skge sky2 slhc smc911x starfire \ - sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ - de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ - typhon via-rhine via-velocity virtio_net yellowfin; do - manual_add_modules "${x}" - done - ;; - ide) - copy_modules_dir kernel/drivers/ide - ;; - scsi) - copy_modules_dir kernel/drivers/scsi - for x in mptfc mptsas mptscsih mptspi; do - manual_add_modules "${x}" - done - ;; - ata) - copy_modules_dir kernel/drivers/ata - ;; - block) - copy_modules_dir kernel/drivers/block - copy_modules_dir kernel/drivers/usb/storage - ;; - # FIXME: can be removed after Lenny release - ieee1394) - for x in ohci1394 sbp2; do - manual_add_modules "${x}" - done - ;; - firewire) - for x in firewire-ohci firewire-sbp2; do - manual_add_modules "${x}" - done - ;; - i2o) - for x in i2o_block; do - manual_add_modules "${x}" - done - ;; - dasd) - for x in dasd_eckd_mod dasd_fba_mod; do - manual_add_modules "${x}" - done - ;; - *) - auto_add_modules base - auto_add_modules net - auto_add_modules ide - auto_add_modules scsi - auto_add_modules block - auto_add_modules ata - auto_add_modules i2o - auto_add_modules dasd - auto_add_modules ieee1394 - auto_add_modules firewire - ;; - esac -} - -usage() -{ - cat >&2 << EOF - -Usage: ${0} [OPTION]... <-o outfile> [version] - -Options: - -d confdir Specify an alternative configuration directory. - -k Keep temporary directory used to make the image. - -o outfile Write to outfile. - -r root Override ROOT setting in mkinitrd.conf. - -See mkinitramfs(8) for further details. -EOF - exit 1 - -} - -# minimal supported kernel version -check_minkver() -{ - local curversion initdir DPKG_ARCH minversion cm_x tmp - - curversion="${1}" - initdir="${2}" - if [ -z "${initdir}" ]; then - DPKG_ARCH=$(dpkg --print-architecture) - case ${DPKG_ARCH} in - ia64|hppa) - minversion="2.6.15" - ;; - *) - minversion="2.6.12" - ;; - esac - if dpkg --compare-versions "${curversion}" lt "${minversion}"; then - echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - return 0 - fi - set_initlist - for cm_x in ${initlist}; do - # sed: keep last line starting with MINKVER=, - # remove MINKVER= and trailing space - minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") - if [ -z "${tmp}" ]; then - continue - elif dpkg --compare-versions "${curversion}" lt "${minver}"; then - echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - done -} diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache deleted file mode 100755 index 37fdd22e..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -set -e - -if [ "$1" = prereqs ]; then - exit 0 -fi - -. /usr/share/initramfs-tools/hook-functions - -number= -suffix= -eval $(printf "%s" "$COMPCACHE_SIZE" | \ - sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') - -if [ -z "$number" ] || [ -z "$suffix" ]; then - exit 0 -fi - -if have_module ramzswap; then - name=ramzswap - manual_add_modules ramzswap -elif have_module compcache; then - name=compcache - manual_add_modules compcache -else - exit 0 -fi - -copy_exec /sbin/swapon - -mkdir -p "$DESTDIR"/etc/udev/rules.d -cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." - -# Note that this only becomes /dev on the real filesystem if udev's scripts -# are used; which they will be, but it's worth pointing out -if ! mount -t devtmpfs -o mode=0755 none /dev; then - mount -t tmpfs -o mode=0755 none /dev - mknod -m 0600 /dev/console c 5 1 - mknod /dev/null c 1 3 -fi -mkdir /dev/pts -mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true -> /dev/.initramfs-tools -mkdir /dev/.initramfs - -# Export the dpkg architecture -export DPKG_ARCH= -. /conf/arch.conf - -# Set modprobe env -export MODPROBE_OPTIONS="-qb" - -# Export relevant variables -export ROOT= -export ROOTDELAY= -export ROOTFLAGS= -export ROOTFSTYPE= -export IPOPTS= -export HWADDR= -export break= -export init=/sbin/init -export quiet=n -export readonly=y -export rootmnt=/root -export debug= -export panic= -export blacklist= -export resume_offset= - -# Bring in the main config -. /conf/initramfs.conf -for conf in conf/conf.d/*; do - [ -f ${conf} ] && . ${conf} -done -. /scripts/functions - -# Parse command line options -for x in $(cat /proc/cmdline); do - case $x in - init=*) - init=${x#init=} - ;; - root=*) - ROOT=${x#root=} - case $ROOT in - LABEL=*) - ROOT="${ROOT#LABEL=}" - - # support / in LABEL= paths (escape to \x2f) - case "${ROOT}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" - else - if [ "${ROOT}" != "${ROOT#/}" ]; then - ROOT="\x2f${ROOT#/}" - fi - if [ "${ROOT}" != "${ROOT%/}" ]; then - ROOT="${ROOT%/}\x2f" - fi - IFS='/' - newroot= - for s in $ROOT; do - if [ -z "${newroot}" ]; then - newroot="${s}" - else - newroot="${newroot}\\x2f${s}" - fi - done - unset IFS - ROOT="${newroot}" - fi - esac - ROOT="/dev/disk/by-label/${ROOT}" - ;; - UUID=*) - ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" - ;; - /dev/nfs) - [ -z "${BOOT}" ] && BOOT=nfs - ;; - esac - ;; - rootflags=*) - ROOTFLAGS="-o ${x#rootflags=}" - ;; - rootfstype=*) - ROOTFSTYPE="${x#rootfstype=}" - ;; - rootdelay=*) - ROOTDELAY="${x#rootdelay=}" - case ${ROOTDELAY} in - *[![:digit:].]*) - ROOTDELAY= - ;; - esac - ;; - resumedelay=*) - RESUMEDELAY="${x#resumedelay=}" - ;; - loop=*) - LOOP="${x#loop=}" - ;; - loopflags=*) - LOOPFLAGS="-o ${x#loopflags=}" - ;; - loopfstype=*) - LOOPFSTYPE="${x#loopfstype=}" - ;; - cryptopts=*) - cryptopts="${x#cryptopts=}" - ;; - nfsroot=*) - NFSROOT="${x#nfsroot=}" - ;; - netboot=*) - NETBOOT="${x#netboot=}" - ;; - ip=*) - IPOPTS="${x#ip=}" - ;; - hwaddr=*) - HWADDR="${x#hwaddr=}" - ;; - boot=*) - BOOT=${x#boot=} - ;; - resume=*) - RESUME="${x#resume=}" - ;; - resume_offset=*) - resume_offset="${x#resume_offset=}" - ;; - noresume) - noresume=y - ;; - panic=*) - panic="${x#panic=}" - case ${panic} in - *[![:digit:].]*) - panic= - ;; - esac - ;; - quiet) - quiet=y - ;; - ro) - readonly=y - ;; - rw) - readonly=n - ;; - debug) - debug=y - quiet=n - exec >/dev/.initramfs/initramfs.debug 2>&1 - set -x - ;; - debug=*) - debug=y - quiet=n - set -x - ;; - break=*) - break=${x#break=} - ;; - break) - break=premount - ;; - blacklist=*) - blacklist=${x#blacklist=} - ;; - netconsole=*) - netconsole=${x#netconsole=} - ;; - esac -done - -if [ -z "${noresume}" ]; then - export resume=${RESUME} -else - export noresume -fi - -[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} - -maybe_break top - -# export BOOT variable value for compcache, -# so we know if we run from casper -export BOOT - -# Don't do log messages here to avoid confusing usplash -run_scripts /scripts/init-top - -maybe_break modules -log_begin_msg "Loading essential drivers..." -load_modules -log_end_msg - -maybe_break premount -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" -run_scripts /scripts/init-premount -[ "$quiet" != "y" ] && log_end_msg - -maybe_break mount -log_begin_msg "Mounting root file system..." -. /scripts/${BOOT} -parse_numeric ${ROOT} -mountroot -log_end_msg - -maybe_break bottom -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" -run_scripts /scripts/init-bottom -[ "$quiet" != "y" ] && log_end_msg - -# Move virtual filesystems over to the real filesystem -mount -n -o move /sys ${rootmnt}/sys -mount -n -o move /proc ${rootmnt}/proc - -# Check init bootarg -if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then - echo "Target filesystem doesn't have ${init}." - init= -fi - -# Search for valid init -if [ -z "${init}" ] ; then - for init in /sbin/init /etc/init /bin/init /bin/sh; do - if [ ! -x "${rootmnt}${init}" ]; then - continue - fi - break - done -fi - -# No init on rootmount -if [ ! -x "${rootmnt}${init}" ]; then - panic "No init found. Try passing init= bootarg." -fi - -# Confuses /etc/init.d/rc -if [ -n ${debug} ]; then - unset debug -fi - -# Chain to real filesystem -maybe_break init -exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 -panic "Could not execute run-init." diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules deleted file mode 100644 index 9aa46468..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules +++ /dev/null @@ -1,10 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions deleted file mode 100644 index 3bea0c97..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions +++ /dev/null @@ -1,420 +0,0 @@ -# -*- shell-script -*- - -_log_msg() -{ - if [ "$quiet" = "y" ]; then return; fi - echo "$@" -} - -log_success_msg() -{ - _log_msg "Success: $@" -} - -log_failure_msg() -{ - _log_msg "Failure: $@" -} - -log_warning_msg() -{ - _log_msg "Warning: $@" -} - -log_begin_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TEXT $@" - fi - _log_msg "Begin: $@ ..." -} - -log_end_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "SUCCESS ok" - fi - _log_msg "Done." -} - -# Add failure hook -add_mountroot_fail_hook() -{ - mkdir -p /tmp/mountroot-fail-hooks.d - ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" -} - -# Run failure hooks. -# When a failure hook exits "1", it has not done anything to correct the -# system. Exiting "0" means that something has been attempted to resolve -# the lack of a root filesystem. -# Hooks are run in lexigraphical order, and are responsible for removing -# themselves if they should not re-run in a later cycle. When one exits -# "0", the stack is stopped, so the caller can return to the main rootfs -# wait loop. -try_failure_hooks() -{ - local hook - - # Disable usplash so text from hooks can be seen - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - for hook in /tmp/mountroot-fail-hooks.d/*; do - if [ -x ${hook} ] && ${hook} mountfail; then - return 0 - fi - done - return 1 -} - -panic() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - # Disallow console access - if [ -n "${panic}" ]; then - sleep ${panic} - reboot - fi - - modprobe i8042 - modprobe atkbd - - run_scripts /scripts/panic - - echo $@ - PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 -} - -maybe_break() -{ - if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then - panic "Spawning shell within the initramfs" - fi -} - -render() -{ - eval "echo -n \${$@}" -} - -set_initlist() -{ - unset initlist - for si_x in ${initdir}/*; do - # skip empty dirs without warning - [ "${si_x}" = "${initdir}/*" ] && return - - # only allow variable name chars - case ${si_x#${initdir}/} in - *[![:alnum:]_]*) - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not alphanumeric or '_' file" - continue - ;; - esac - - # skip non executable scripts - if [ ! -x ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not executable" - continue - fi - - # skip directories - if [ -d ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: a directory" - continue - fi - - initlist="${initlist} ${si_x#${initdir}/}" - done -} - -reduce_satisfied() -{ - deplist="$(render array_${1})" - unset tmpdeplist - for rs_y in ${deplist}; do - # check if there are alternatives - case ${rs_y} in - *\|*) - OLD_IFS="$IFS" - IFS="|" - for rs_z in ${rs_y}; do - IFS="$OLD_IFS" - # only allow variable name chars - case ${rs_z} in - *[![:alnum:]_]*) - IFS="|" - continue - ;; - esac - # skip non executable scripts - if [ ! -x ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - # skip directories - if [ -d ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - tmpdeplist="${tmpdeplist} ${rs_z}" - break - done - IFS="$OLD_IFS" - ;; - *) - case ${rs_y} in - *[![:alnum:]_]*) - continue - ;; - esac - if [ ! -x ${initdir}/${rs_y} ]; then - continue - fi - if [ -d ${initdir}/${rs_y} ]; then - continue - fi - tmpdeplist="${tmpdeplist} ${rs_y}" - ;; - esac - done - deplist=${tmpdeplist} - for rs_x in ${runlist}; do - pop_list_item ${rs_x} ${deplist} - deplist=${tmppop} - done - eval array_${1}=\"${deplist}\" -} - -get_prereqs() -{ - set_initlist - for gp_x in ${initlist}; do - tmp=$(${initdir}/${gp_x} prereqs) - eval array_${gp_x}=\"${tmp}\" - done -} - -count_unsatisfied() -{ - set -- ${@} - return ${#} -} - -# Removes $1 from initlist -pop_list_item() -{ - item=${1} - shift - set -- ${@} - unset tmppop - # Iterate - for pop in ${@}; do - if [ ${pop} = ${item} ]; then - continue - fi - tmppop="${tmppop} ${pop}" - done - -} - -# This function generates the runlist, so we clear it first. -reduce_prereqs() -{ - unset runlist - set -- ${initlist} - i=$# - # Loop until there's no more in the queue to loop through - while [ ${i} -ne 0 ]; do - oldi=${i} - for rp_x in ${initlist}; do - reduce_satisfied ${rp_x} - count_unsatisfied $(render array_${rp_x}) - cnt=${?} - if [ ${cnt} -eq 0 ]; then - runlist="${runlist} ${rp_x}" - pop_list_item ${rp_x} ${initlist} - initlist=${tmppop} - i=$((${i} - 1)) - fi - done - if [ ${i} -eq ${oldi} ]; then - panic "PANIC: Circular dependancy. Exiting." - fi - done -} - -get_prereq_pairs() -{ - set_initlist - for gp_x in ${initlist}; do - echo ${gp_x} ${gp_x} - prereqs=$(${initdir}/${gp_x} prereqs) - for prereq in ${prereqs}; do - echo ${prereq} ${gp_x} - done - done -} - -call_scripts() -{ - for cs_x in ${runlist}; do - [ -f ${initdir}/${cs_x} ] || continue - if [ x"$1" = "xoptional" ]; then - option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") - [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue - fi - - # mkinitramfs verbose output - if [ "${verbose}" = "y" ]; then - echo "Calling hook ${cs_x}" - fi - ${initdir}/${cs_x} - # allow boot scripts to modify exported boot paramaters - if [ -e /conf/param.conf ]; then - . /conf/param.conf - fi - done -} - -run_scripts() -{ - initdir=${1} - [ ! -d ${initdir} ] && return - - if [ -f ${initdir}/ORDER ]; then - . ${initdir}/ORDER - elif [ -x /usr/bin/tsort ]; then - runlist=$(get_prereq_pairs | tsort) - call_scripts $2 - else - get_prereqs - reduce_prereqs - call_scripts $2 - fi -} - -cache_run_scripts() -{ - DESTDIR=${1} - scriptdir=${2} - initdir=${DESTDIR}${scriptdir} - [ ! -d ${initdir} ] && return - - runlist=$(get_prereq_pairs | tsort) - for crs_x in ${runlist}; do - [ -f ${initdir}/${crs_x} ] || continue - echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER - echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER - done -} - -# Load custom modules first -load_modules() -{ - if [ -e /conf/modules ]; then - cat /conf/modules | while read m; do - # Skip empty lines - if [ -z "$m" ]; then - continue - fi - # Skip comments - d?ash removes whitespace prefix - com=$(printf "%.1s" "${m}") - if [ "$com" = "#" ]; then - continue - fi - modprobe $m - done - fi -} - -# lilo compatibility -parse_numeric() { - case $1 in - "") - return - ;; - /*) - return - ;; - *:*) - minor=${1#*:} - major=${1%:*} - ;; - *) - value=$(( 0x${1} )) - minor=$(( ${value} % 256 )) - major=$(( ${value} / 256 )) - ;; - esac - - mknod -m 600 /dev/root b ${major} ${minor} - ROOT=/dev/root -} - -configure_networking() -{ - # networking already configured thus bail out - [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 - - if [ "${HWADDR}" ]; then - # select interface by MAC address - HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" - local iface - for iface in /sys/class/net/*; do - [ -f "$iface/address" ] || continue - if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then - DEVICE="${iface#/sys/class/net/}" - fi - done - fi - - # support ip options see linux sources - # Documentation/filesystems/nfsroot.txt - case ${IPOPTS} in - none|off) - # Do nothing - ;; - ""|on|any) - # Bring up device - ipconfig -t 60 ${DEVICE} - ;; - dhcp|bootp|rarp|both) - ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} - ;; - *) - ipconfig -t 60 -d $IPOPTS - - # grab device entry from ip option - NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} - if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then - NEW_DEVICE=${NEW_DEVICE%:*} - else - # wrong parse, possibly only a partial string - NEW_DEVICE= - fi - if [ -n "${NEW_DEVICE}" ]; then - DEVICE="${NEW_DEVICE}" - fi - ;; - esac - - # source ipconfig output - if [ -n "${DEVICE}" ]; then - # source specific bootdevice - . /tmp/net-${DEVICE}.conf - else - # source any interface as not exaclty specified - . /tmp/net-*.conf - fi -} diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth deleted file mode 100755 index 8b1e7c8a..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] -then - /bin/plymouth update-root-fs --new-root-dir=${rootmnt} -fi diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev deleted file mode 100755 index f9d2ce9d..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -e -# initramfs init-bottom script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Stop udevd, we'll miss a few events while we run init, but we catch up -pkill udevd - -# Move /dev to the real filesystem -mount -n -o move /dev ${rootmnt}/dev diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 deleted file mode 100755 index e5bc78f1..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -# init-premount script for lvm2. - -PREREQS="udev mdadm" -prereqs() -{ - echo $PREREQS -} - -mountroot_fail() -{ - if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then - cat </dev/null; then - modprobe ata_generic all_generic_ide=1 -fi diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist deleted file mode 100755 index 5e6b3c1e..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -# blacklist vga16fb when vga= or video= given -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*|video=*) - echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs - ;; - esac -done - -# sanity check -[ -z "${blacklist}" ] && exit 0 - -# write blacklist to modprobe.d -IFS=',' -for b in ${blacklist}; do - echo "blacklist $b" >> /etc/modprobe.d/initramfs -done diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup deleted file mode 100755 index df767bb4..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup +++ /dev/null @@ -1,83 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -OPTION=FRAMEBUFFER -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer deleted file mode 100755 index bb59aadf..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - - -# The options part of the kernel "video=" argument (i.e. everyting -# after "video=:") has very inconsistent rules. -# -# Generally the following applies: -# 1) options are comma-separated -# 2) options can be in either of these three forms: -# =, :, . -# 3) the "mode" option has the form x[M][R][-][@][i][m] -# and may or may not start with "mode=" -# -# When the options are used with modules, they need to be space-separated -# and the following conversions are needed: -# : -> = -# -> =1 -# -> mode= -parse_video_opts() -{ - local OPTS="$1" - local IFS="," - - # Must be a line like video=:,[opt2]... - if [ "${OPTS}" = "${OPTS%%:*}" ]; then - return - fi - OPTS="${OPTS#*:}" - for opt in ${OPTS}; do - # Already in the "=" form - if [ "${opt}" != "${opt#*=}" ]; then - echo -n "$opt " - # In the ":" form - elif [ "${opt}" != "${opt#*:}" ]; then - echo -n "${opt%:*}=${opt#*:} " - # Presumably a modevalue without the "mode=" prefix - elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then - echo -n "mode=$opt " - # Presumably a boolean - else - echo -n "${opt}=1 " - fi - done -} - -FB="" -OPTS="" - -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*) - FB="vesafb"; - OPTS=""; - ;; - video=*) - FB=${x#*=} - FB="${FB%%:*}" - OPTS="$(parse_video_opts "${x}")" - esac -done - -# Map command line name to module name -case ${FB} in -matroxfb) - FB=matroxfb_base - ;; -esac - -if [ -n "${FB}" ]; then - # Some framebuffer devices need character devices :-/ - udevadm settle - MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} - # Wait for the framebuffer devices to be ready - udevadm settle -else - # If we have no graphics devices yet, wait for udev to settle - [ -d /sys/class/graphics/fbcon ] || udevadm settle - [ -d /sys/class/graphics/fb0 ] || udevadm settle - [ -d /sys/class/drm/card0 ] || udevadm settle -fi - -# Force fb mode via /sys interface -for x in $(cat /proc/cmdline); do - case ${x} in - fbmode=*) - MODE=${x#*=} - echo "$MODE" > /sys/class/graphics/fb0/mode - ;; - esac -done diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap deleted file mode 100755 index cb67aa96..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth deleted file mode 100755 index 813b6b4c..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="framebuffer console_setup brltty" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -printf '\033[?25l' > /dev/tty7 -/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid -/bin/plymouth show-splash diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev deleted file mode 100755 index cd2fa564..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -e -# initramfs init-top script for udev - -PREREQ="all_generic_ide blacklist" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# It's all over netlink now -echo "" > /proc/sys/kernel/hotplug - -# Start the udev daemon to process events -/sbin/udevd --daemon --resolve-names=never - -# Iterate sysfs and fire off everything; if we include a rule for it then -# it'll get handled; otherwise it'll get handled later when we do this again -# in the main boot sequence. -( /sbin/udevadm trigger --subsystem-match=block; \ - /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local deleted file mode 100644 index 865572b5..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local +++ /dev/null @@ -1,131 +0,0 @@ -# Local filesystem mounting -*- shell-script -*- - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" - run_scripts /scripts/local-top - [ "$quiet" != "y" ] && log_end_msg - - while [ -z "${FSTYPE}" ]; do - FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) - - # Run failure hooks, hoping one of them can fix up the system - # and we can restart the wait loop. If they all fail, abort - # and move on to the panic handler and shell. - if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then - break - fi - done - - # We've given up, but we'll let the user fix matters if they can - while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do - # give hint about renamed root - case "${ROOT}" in - /dev/hd*) - suffix="${ROOT#/dev/hd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/sd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" - fi - ;; - /dev/sd*) - suffix="${ROOT#/dev/sd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/hd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" - fi - ;; - esac - echo "Gave up waiting for root device. Common problems:" - echo " - Boot args (cat /proc/cmdline)" - echo " - Check rootdelay= (did the system wait long enough?)" - echo " - Check root= (did the system wait for the right device?)" - echo " - Missing modules (cat /proc/modules; ls /dev)" - panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" - done - - # Get the root filesystem type if not set - if [ -z "${ROOTFSTYPE}" ]; then - [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") - ROOTFSTYPE="${FSTYPE}" - else - FSTYPE="${ROOTFSTYPE}" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" - run_scripts /scripts/local-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ] && \ - [ -z "$LOOP" ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} - - # FIXME This has no error checking - # Mount root - mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} - mountroot_status="$?" - if [ "$LOOP" ]; then - if [ "$mountroot_status" != 0 ]; then - if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then - panic " -Could not mount the partition ${ROOT}. -This could also happen if the file system is not clean because of an operating -system crash, an interrupted boot process, an improper shutdown, or unplugging -of a removable device without first unmounting or ejecting it. To fix this, -simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then -gracefully shut down and reboot back into Windows. After this you should be -able to reboot again and resume the installation. -(filesystem = ${FSTYPE}, error code = $mountroot_status) -" - fi - fi - - mkdir -p /host - mount -o move ${rootmnt} /host - - while [ ! -e "/host/${LOOP#/}" ]; do - panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" - done - - # Get the loop filesystem type if not set - if [ -z "${LOOPFSTYPE}" ]; then - eval $(fstype < "/host/${LOOP#/}") - else - FSTYPE="${LOOPFSTYPE}" - fi - if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then - FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") - [ -z "$FSTYPE" ] && FSTYPE="unknown" - fi - - if [ ${readonly} = y ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - modprobe loop - modprobe ${FSTYPE} - - # FIXME This has no error checking - mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} - - if [ -d ${rootmnt}/host ]; then - mount -o move /host ${rootmnt}/host - fi - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" - run_scripts /scripts/local-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g deleted file mode 100755 index 335ef95e..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g +++ /dev/null @@ -1,16 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - mkdir -p /dev/.initramfs/varrun - pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit - pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit -fi - -exit 0 diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc deleted file mode 100755 index c9fbc369..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/sh -e -# initramfs local-premount script for fixrtc - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - -# use the fixrtc cmdline option in your bootloader to -# automatically set the hardware clock to the date of -# the last mount of your root filesystem to avoid fsck -# to get confused by the superblock being in the future - -BROKEN_CLOCK="" -ROOTDEV="" - -for x in $(cat /proc/cmdline); do - case ${x} in - root=*) - value=${x#*=} - - # Find the device node path depending on the form of root= : - - case ${value} in - UUID=*) - ROOTDEV=/dev/disk/by-uuid/${value#UUID=} - ;; - LABEL=*) - ROOTDEV=/dev/disk/by-label/${value#LABEL=} - ;; - *) - ROOTDEV=${value} - ;; - esac - ;; - fixrtc) - BROKEN_CLOCK=1 - ;; - esac -done - -if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then - ROOTDISK=$(readlink -f "$ROOTDEV") && - - TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && - TIME=${TIMESTR#*:} && - - date --set="${TIME} 1 minute" >/dev/null 2>&1 -fi - -# This script is best-effort. If we couldn't fudge the clock as desired, -# just try to carry on boot anyway: -# It will probably fail, but we won't have made the situation any worse. -exit 0 diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g deleted file mode 100755 index 57e7f8ba..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - modprobe fuse -fi - -exit 0 diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume deleted file mode 100755 index 46535936..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -. ./scripts/functions - -if [ -z "${resume}" ]; then - exit 0 -fi - -case $resume in -LABEL=*) - resume="${resume#LABEL=}" - - # support any / in LABEL= path (escape to \x2f) - case "${resume}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - resume="$(echo ${resume} | sed 's,/,\\x2f,g')" - else - if [ "${resume}" != "${resume#/}" ]; then - resume="\x2f${resume#/}" - fi - if [ "${resume}" != "${resume%/}" ]; then - resume="${resume%/}\x2f" - fi - IFS='/' - newresume= - for s in $resume; do - if [ -z "${newresume}" ]; then - newresume="${s}" - else - newresume="${newresume}\\x2f${s}" - fi - done - unset IFS - resume="${newresume}" - fi - esac - resume="/dev/disk/by-label/${resume}" - ;; -UUID=*) - resume="/dev/disk/by-uuid/${resume#UUID=}" - ;; -esac - -SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) - -case "${SWAPTYPE}" in - swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) - if [ -x /bin/plymouth ] && plymouth --ping; then - plymouth message --text="Resuming from $resume" - fi - - # hardcode path, uswsusp ships an resume binary too - if [ -n "${resume_offset}" ]; then - /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 - else - /bin/resume ${resume} >/dev/null 2>&1 - fi - ;; -esac diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs deleted file mode 100644 index b9c2522d..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs +++ /dev/null @@ -1,83 +0,0 @@ -# NFS filesystem mounting -*- shell-script -*- - -# FIXME This needs error checking - -retry_nr=0 - -# parse nfs bootargs and mount nfs -do_nfsmount() -{ - - configure_networking - - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - - if [ -z "${NFSOPTS}" ]; then - NFSOPTS="-o retrans=10" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" - run_scripts /scripts/nfs-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ]; then - roflag="-o ro" - else - roflag="-o rw" - fi - - nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} -} - -# NFS root mounting -mountroot() -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" - run_scripts /scripts/nfs-top - [ "$quiet" != "y" ] && log_end_msg - - modprobe nfs - # For DHCP - modprobe af_packet - - # Default delay is around 180s - # FIXME: add usplash_write info - if [ -z "${ROOTDELAY}" ]; then - delay=180 - else - delay=${ROOTDELAY} - fi - - # loop until nfsmount succeds - while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do - [ ${retry_nr} -gt 0 ] && \ - [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" - do_nfsmount - retry_nr=$(( ${retry_nr} + 1 )) - [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 - [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg - done - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" - run_scripts /scripts/nfs-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev deleted file mode 100755 index 980e496f..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -e -# initramfs nfs-top script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Each call to udevsettle can take up to three minutes -if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TIMEOUT 360" - trap "/sbin/usplash_write 'TIMEOUT 15'" 0 -fi - -# We need to wait for the network card drivers to be loaded -/sbin/udevadm settle diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup deleted file mode 100755 index 5e97f65e..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup +++ /dev/null @@ -1,82 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap deleted file mode 100644 index f011abf5..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth deleted file mode 100755 index 2da5a6b5..00000000 --- a/client/boot-tools/old/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -/bin/plymouth quit diff --git a/client/boot-tools/old/initramfs-tools-OG/conf.d/mdadm b/client/boot-tools/old/initramfs-tools-OG/conf.d/mdadm deleted file mode 100644 index 11d27f8c..00000000 --- a/client/boot-tools/old/initramfs-tools-OG/conf.d/mdadm +++ /dev/null @@ -1,18 +0,0 @@ -# mdadm boot_degraded configuration -# -# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if -# you want. You can also change the values here and changes will be preserved. -# Do note that only the values are preserved; the rest of the file is -# rewritten. -# -# BOOT_DEGRADED: -# Do you want to boot your system if a RAID providing your root filesystem -# becomes degraded? -# -# Running a system with a degraded RAID could result in permanent data loss -# if it suffers another hardware fault. -# -# However, you might answer "yes" if this system is a server, expected to -# tolerate hardware faults and boot unattended. - -BOOT_DEGRADED=false diff --git a/client/boot-tools/old/initramfs-tools-OG/conf.d/resume b/client/boot-tools/old/initramfs-tools-OG/conf.d/resume deleted file mode 100644 index 34fdc4a5..00000000 --- a/client/boot-tools/old/initramfs-tools-OG/conf.d/resume +++ /dev/null @@ -1 +0,0 @@ -RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/boot-tools/old/initramfs-tools-OG/hooks/oghooks b/client/boot-tools/old/initramfs-tools-OG/hooks/oghooks deleted file mode 100755 index 3d9b04b8..00000000 --- a/client/boot-tools/old/initramfs-tools-OG/hooks/oghooks +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash - - -# Insert OpenGnsys Engine -mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - diff --git a/client/boot-tools/old/initramfs-tools-OG/initramfs.conf b/client/boot-tools/old/initramfs-tools-OG/initramfs.conf deleted file mode 100644 index 754e2bea..00000000 --- a/client/boot-tools/old/initramfs-tools-OG/initramfs.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# initramfs.conf -# Configuration file for mkinitramfs(8). See initramfs.conf(5). -# - -# -# MODULES: [ most | netboot | dep | list ] -# -# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. -# -# dep - Try and guess which modules to load. -# -# netboot - Add the base modules, network modules, but skip block devices. -# -# list - Only include modules from the 'additional modules' list -# - -MODULES=most - -# -# BUSYBOX: [ y | n ] -# -# Use busybox if available. -# - -BUSYBOX=y - -# -# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] -# -# Amount of RAM to use for RAM-based compressed swap space. -# -# An empty value - compcache isn't used, or added to the initramfs at all. -# An integer and K (e.g. 65536 K) - use a number of kilobytes. -# An integer and M (e.g. 256 M) - use a number of megabytes. -# An integer and G (e.g. 1 G) - use a number of gigabytes. -# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. -# -# You can optionally install the compcache package to configure this setting -# via debconf and have userspace scripts to load and unload compcache. -# - -COMPCACHE_SIZE="" - -# -# NFS Section of the config. -# - -# -# BOOT: [ local | nfs ] -# -# local - Boot off of local media (harddrive, USB stick). -# -# nfs - Boot using an NFS drive as the root of the drive. -# - -BOOT=local - -# -# DEVICE: ... -# -# Specify the network interface, like eth0 -# - -DEVICE=eth0 - -# -# NFSROOT: [ auto | HOST:MOUNT ] -# - -NFSROOT=auto - diff --git a/client/boot-tools/old/initramfs-tools-OG/modules b/client/boot-tools/old/initramfs-tools-OG/modules deleted file mode 100644 index 484ef718..00000000 --- a/client/boot-tools/old/initramfs-tools-OG/modules +++ /dev/null @@ -1,13 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -fbcon -vesafb -vga16b diff --git a/client/boot-tools/old/initramfs-tools-OG/scripts/og b/client/boot-tools/old/initramfs-tools-OG/scripts/og deleted file mode 100755 index 6408eda7..00000000 --- a/client/boot-tools/old/initramfs-tools-OG/scripts/og +++ /dev/null @@ -1,140 +0,0 @@ -# OpenGnsys Local filesystem mounting -*- shell-script -*- - -ogLinkBusybox () -{ -for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do - ln -f /bin/busybox /bin/$n -done -ln -f /bin/busybox /bin/sh -} - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - - mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -configure_networking -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - -set -a -trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 -/opt/opengnsys/etc/preinit/default.sh - - - - - - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - run_scripts /scripts/og-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/boot-tools/old/initramfs-tools-OG/update-initramfs.conf b/client/boot-tools/old/initramfs-tools-OG/update-initramfs.conf deleted file mode 100644 index 3c27473b..00000000 --- a/client/boot-tools/old/initramfs-tools-OG/update-initramfs.conf +++ /dev/null @@ -1,20 +0,0 @@ -# -# Configuration file for update-initramfs(8) -# - -# -# update_initramfs [ yes | all | no ] -# -# Default is yes -# If set to all update-initramfs will update all initramfs -# If set to no disables any update to initramfs beside kernel upgrade - -update_initramfs=yes - -# -# backup_initramfs [ yes | no ] -# -# Default is no -# If set to no leaves no .bak backup files. - -backup_initramfs=no diff --git a/client/boot-tools/old/ogClientFunctions b/client/boot-tools/old/ogClientFunctions deleted file mode 100755 index 8311cf3a..00000000 --- a/client/boot-tools/old/ogClientFunctions +++ /dev/null @@ -1,255 +0,0 @@ -#!/bin/bash -#Definicion de variables -# TODO: Pendiente Definir directorio base del 2FS -OGBASEDIR=/var/lib/tftpboot/ogclient/ -OGFSFILE=${OGBASEDIR}ogclient.img -OGFSMOUNT=${OGBASEDIR}ogclientmount -OGLIB=/opt/opengnsys/client/lib -FSCLIENTSIZEMB=1000 -PASSROOT=og -SCRIPT=/root/configure.sh -RUNME=$OGFSMOUNT$SCRIPT -LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb -OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" -OGFSLABEL=ogClient - - - - -#/** -# ogClientMount [str_program] -#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones -#@return Si no hay parametros: login de acceso. -#@return con un parametro: La salida del programa ejecutado -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## -function ogClientMount () -{ -#TODO comprobar que OGFILE y OGFILEMOUNT existe. -mount $OGFSFILE $OGFSMOUNT -o loop -mount --bind /proc $OGFSMOUNT/proc -mount --bind /sys $OGFSMOUNT/sys -mount --bind /tmp $OGFSMOUNT/tmp -mount --bind /dev $OGFSMOUNT/dev -mount --bind /dev/pts $OGFSMOUNT/dev/pts -[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) -[ $# = 1 ] && chroot $OGFSMOUNT $1 -} - -#/** -# ogClientUnmount -#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys -#@param -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientUnmount () -{ -cd /tmp -umount -d -f -l $OGFSMOUNT/proc -umount -d -f -l $OGFSMOUNT/sys -umount -d -f -l $OGFSMOUNT/tmp -umount -d -f -l $OGFSMOUNT/dev -umount -d -f -l $OGFSMOUNT/dev/pts -umount -d -f -l $OGFSMOUNT -} - -function ogClientCheckVersion () -{ -#TODO: configurar la version lucid -#TODO: introducir un nuevo case para la vesion -case $1 in - jaunty|JAUNTY) - export OGVERSION=jaunty - exort OGRELEASE=2.6.28-11-generic - ;; - karmic|KARMIC) - export OGVERSION=karmic - export OGRELEASE=2.6.31-14-generic - ;; - lucid|LUCID) - export OGVERSION=lucid - export OGRELEASE=2.6.32-21-generic-pae - ;; -esac -echo $OGVERSION $OGRELEASE -} - - -#/** -# ogClientGenerator str_versionUbuntu str_release -#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Versión de ubuntu a generar, jaunty karmic -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogClientGeneratorDebootstrap () -{ - -if [ $# != 2 ] -then -echo Debes introducir como argumento1: jaunty karmic lucid -echo Debes introducir como argumento2: la release -echo utiliza como entrada ogClientCheckVersion -return -fi - -OGVERSION=`echo $1` -OGRELEASE=`echo $2` -echo $OGVERSION $OGRELEASE -pause - -# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema -apt-get install gdebi-core -wget $LASTDEBOOTSTRAP -gdebi -n debootstrap_1.0.20_all.deb - - -#Creamos el directorio donde montaremos el disco virtual -mkdir -p $OGFSMOUNT - -#Creamos el disco virtual con el filesystem del cliente. -dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB -mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F - -#Montamos el dispositivo virtual en su punto de montaje. -mount $OGFSFILE $OGFSMOUNT -o loop - -#TODO Comprobar arquitectura -#Iniciamos la creación del sistema en el directorio de clientes. -echo debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ -debootstrap --include=linux-image-$OGRELEASE --arch=i386 --components=main,universe $OGVERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ - - - -} - - -###### Funciones para los clientes offline -function agregarOG { -cd $NEWROOT -mkdir -p opt/opengnsys -cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys -echo "agregando OG al newinitrd" -} - -function finalizarISO -{ - cd $ANTERIORPWD - mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz - if [ $LINUX ] ; then - mv $TMPINITRD/linux $DEST/linuxISO - fi -} - - -function CrearISO { -mkdir -p tmp/iso/isolinux -#cd tmp/iso/ -cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ -cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ -cp -prv /tmp/linux tmp/iso/isolinux/linuxISO -cp -prv /tmp/initrd.gz tmp/iso/isolinux/ -cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ - - -cat << FIN > tmp/iso/isolinux/isolinux.cfg -DEFAULT menu.c32 -PROMPT 0 -ALLOWOPTIONS 1 - -MENU TITLE FuTuR3 Live Collection - -LABEL gpxe -MENU LABEL gpxe -KERNEL /clonezilla/live/vmlinuz1 -APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia - - -#default 0 -#prompt 1 -#timeout 100 - -#display mensaje.txt - -LABEL 0 -MENU LABEL ogClient -KERNEL linuxISO -APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline - -LABEL 1 -MENU LABEL ogClient1 sin vga -KERNEL linuxISO -APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline - -LABEL 2 -MENU LABEL ogClient2 sin irqpoll -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline - -LABEL 3 -MENU LABEL ogClient3 acpi=off -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline - - -#LABEL ogclient -#KERNEL /ogclient/linuxISO -#APPEND initrd=/ogclient/initrdISO.img - -#KERNEL linuxISO -#APPEND initrd=initrdISO.img - -LABEL 4 -MENU LABEL local -localboot 0x80 -append - - - -label 5 -MENU LABEL Network boot via gPXE lkrn -KERNEL gpxe.lkrn - -label 5 -MENU LABEL Network boot via gPXE usb -KERNEL gpxe.usb - -label 5 -MENU LABEL Network boot via gPXE pxe -KERNEL gpxe.pxe - -label 5 -MENU LABEL Network boot via gPXE iso -KERNEL gpxe.iso -FIN -#### /tmp/iso# -mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso - -} - -function probarISO { -#/tmp/iso -qemu -m 256 -boot d -cdrom ogClient.iso -} - - - - diff --git a/client/boot-tools/old/ogClientGenerator.sh b/client/boot-tools/old/ogClientGenerator.sh deleted file mode 100755 index c7c654ae..00000000 --- a/client/boot-tools/old/ogClientGenerator.sh +++ /dev/null @@ -1,306 +0,0 @@ -#!/bin/bash -#@file ogClientGenerator.sh -#@brief Script generación del cliente OpenGnSys -#@warning -#@version 0.9 - -#@author Antonio J. Doblas Viso. -#@date 2010/05/24 -#*/ - - - -if [ $# -ne 1 ]; then - echo ": invalid number of parameters" - echo " host | lucid | karmic | jaunty | lenny | squeeze " - exit 1 -fi - - - -# Soo ejecutable por usuario root -if [ "$(whoami)" != 'root' ] -then - echo "ERROR: this program must run under root privileges!!" - exit 1 -fi - -# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). -PROGRAMDIR=$(readlink -e $(dirname "$0")) -if [ -d "$PROGRAMDIR/../installer" ]; then - USESVN=0 -else - USESVN=1 - SVN_URL=svn://www.informatica.us.es:3690/opengnsys/branches/ogClient - #directorio donde se almacenará el codigo temporalmente. - SVN_DIR="./opengnsys/installer/ogClient" -fi - -WORKDIR=/tmp/opengnsys_installer -mkdir -p $WORKDIR -INSTALL_TARGET=/opt/opengnsys -LOG_FILE=/tmp/opengnsys_installation.log - -############################################### -pushd $WORKDIR - - -source `dirname $0`/ogInstaller.lib - - -if [ "$1" == "host" ] -then - OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - #OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null - OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}') - OGRELEASE=$(uname -a | awk '{print $3}') -else - OSCODENAME=`echo $1` - OGRELEASE=`ogClientGetRelease $OSCODENAME` -fi - - - -OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/ -OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img -OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount - -OGLIB=/opt/opengnsys/client/lib - - - -echoAndLog "OpenGnSys CLIENT installation begins at $(date)" - - -# Datos para la generación del cliente. -DEPENDENCIES=( debootstrap subversion schroot) - -## Actualizar repositorios -apt-get update -# Instalación de dependencias (paquetes de sistema operativo). -declare -a notinstalled -checkDependencies DEPENDENCIES notinstalled -if [ $? -ne 0 ]; then - installDependencies notinstalled - if [ $? -ne 0 ]; then - echoAndLog "Error while installing some dependeces, please verify your server installation before continue" - exit 1 - fi -fi - - - -# Si es necesario, descarga el repositorio especifico de la instalación del cliente -if [ $USESVN -eq 1 ]; then - #svnExportCode $SVN_URL - echo svn export "$SVN_URL" $SVN_DIR - #svn export "$SVN_URL" $SVN_DIR - #####debug boorrar el cp - #mkdir -p $SVN_DIR - #cp -prv /home/administrador/workspace/opengnsys/branches/ogClient/* $SVN_DIR - find $SVN_DIR/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null - ###TODO si ya esta descargado da error ??? - ###if [ $? -ne 0 ]; then - ### errorAndLog "Error while getting code from svn" - ### exit 1 - ###fi -else - ln -fs "$(dirname $PROGRAMDIR)" opengnsys -fi - -#### Parseo de ficheros descargados del svn. -# parseamos del apt.source -if [ "$1" == host ] -then - cp /etc/apt/sources.list ${SVN_DIR}/clientstructure/etc/apt/sources.list -else - sed -e "s/OGVERSION/$OGVERSION/g" ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic > ${SVN_DIR}/clientstructure/etc/apt/sources.list - #rm ${SVN_DIR}/clientstructure/etc/apt/sources.list.generic -fi -if [ $? -ne 0 ]; then - errorAndLog "parseando el fichero apt.source: ERROR" -else - echoAndLog "parseando el fichero apt.source: OK" -fi - -#parseamos el scripts de generación del initrd. -sed -e "s/OGRELEASE/$OGRELEASE/g" ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVN_DIR}/clientstructure/root/GenerateInitrd.sh -#rm ${SVN_DIR}/clientstructure/root/GenerateInitrd.generic.sh -if [ $? -ne 0 ]; then - errorAndLog "parseando el fichero de cliente GenerateInitrd: ERROR" -else - echoAndLog "parseando el fichero de cliente GenerateInitrd: OK" -fi - - - -#damos permiso al directorio de scripts -chmod 775 ${SVN_DIR}/clientstructure/root/* -if [ $? -ne 0 ]; then - errorAndLog "Dando permisos de escritura al directorio de scrips para el cliente: ERROR" -else - echoAndLog "Dando permisos de escritura al directorio de scrips para el cliente: OK" -fi - - -#####PASO 1. Generamos el 2º sistema de archivos. -echo "generamos el sistema base con debootstrap" -if [ "$1" == host ] -then - echo ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE -# ogClientGeneratorDebootstrap $OSCODENAME $OGRELEASE 2>&1 | tee -a $LOG_FILE -else - echo ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE - ogClientGeneratorDebootstrap $OSCODENAME $(ogClientGetRelease $OGVERSION) 2>&1 | tee -a $LOG_FILE -fi -if [ $? -ne 0 ]; then - errorAndLog "Generando 2nd FileSystem: ERROR" -else - echoAndLog "Generando 2nd FileSystem: OK" -fi - -########################################## - -cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` -cat << EOF > /etc/schroot/schroot.conf -[IMGogclient] -type=loopback -file=/var/lib/tftpboot/ogclient/ogclient.img -description=ogclient ubuntu luc IMGi -priority=1 -users=root -groups=root -root-groups=root -mount-options=-o offset=32256 -root-users=root -[DIRogclient] -type=directory -directory=/var/lib/tftpboot/ogclient/ogclientmount -description=ogclient ubuntu lucid DIR -priority=2 -users=root -groups=root -root-groups=root -root-users=root -EOF - - - -####PASO 2 Insertamos datos en el 2º sistema de archivos -#2.1 montamos para insertar los ficheros necesarios. -mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 -if [ $? -ne 0 ]; then - errorAndLog "Montando 2nd FileSystem Para Añadir elementos OG: ERROR" - exit 1 -else - echoAndLog "Montando 2nd FileSystem Para Añadir elementos OG: OK" -fi - -#2.2 copiamos la estrucutra descargada al fichero imagen. -echo "cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT " -cp -prv ${SVN_DIR}/clientstructure/* $OGCLIENTMOUNT -if [ $? -ne 0 ]; then - errorAndLog "Copiando los elementos del cliente svn: ERROR" - exit 1 -else - echoAndLog "Copiando los elementos del cliente svn: OK" -fi - -#2.3 Copiamos algunas cosas del actual sistema - ver de que manera integrar los lib -# copiamos algunas cosas del nfsexport -echo "Linking fonts for browser1 $OGLIB" -mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ -cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts -echo "Linking fonts for browser2 $OGLIB" -mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/ -cp -pr $OGLIB/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts -echo "Coping pci.ids" -cp -pr $OGLIB/pci.ids $OGCLIENTMOUNT/etc -#copiamos el browser y el ogADMcline al bin -cp /opt/opengnsys/client/bin/browser $OGCLIENTMOUNT/bin -cp /opt/opengnsys/client/bin/ogAdmClient $OGCLIENTMOUNT/bin -if [ $? -ne 0 ]; then - errorAndLog "Copiando qt pci.ids fonts: ERROR" - exit 1 -else - echoAndLog "Copiando qt pci.ids fonts: OK" -fi - - -## final desmontamos. -mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT -if [ $? -ne 0 ]; then - errorAndLog "Desmontando cliente : ERROR" - exit 1 -else - echoAndLog "desmontando cliente: OK" -fi - -################## Fin paso 2 - -popd - -######## instalamos software adicional. -#ogClientMount /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` -cd / -schroot -c IMGogclient -- /root/InstallSoftware.sh 2>&1 | tee -a `echo $LOG_FILE` - -if [ $? -ne 0 ]; then - errorAndLog "Instalando sofware adicional OG : ERROR" - #exit 1 -else - echoAndLog "Instalando sofware adicional OG: OK" -fi -cd - - -#cd / -#schroot -c IMGogclient -- /root/CompileSoftware.sh -#cd - - -### configuracion hostname passroot securety -cd / -schroot -c IMGogclient -- /root/ConfFS.sh -cd - - -##2.4 claves ssh -sshkeys() -{ -##montamos -mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 -##comprobamos clave rsa en el host,. -if [ ! -f /root/.ssh/id_rsa.pub ] -then - ssh-keygen -q -f /root/.ssh/id_rsa -N "" -fi -## copiamos ssh rsa del host al guest como authorized-key2 -rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2 -mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT -} - -### Generamos el 1er sistema de archivos. -cd / -schroot -c IMGogclient -- /root/GenerateInitrd.sh -cp /tmp/*-${OGRELEASE} $OGCLIENTBASEDIR -cd - - - - -################## DEJAMOS FICHERO DE EJEMPLOS PARA: -#default -cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient -LABEL pxe-${OGRELEASE} -KERNEL ogclient/vmlinuz-$OGRELEASE -APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver= -FIN -#/etc/hosts -echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient -/etc/init.d/nfs-kernel-server restart -##################################################################### - -# Mostrar sumario de la instalación e instrucciones de post-instalación. -installationSummary - -#rm -rf $WORKDIR -echoAndLog "OpenGnSys installation finished at $(date)" - diff --git a/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib b/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib deleted file mode 100755 index 14806b7e..00000000 --- a/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/Net.lib +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -#/** -#@file Net.lib -#@brief Librería o clase Net -#@class Net -#@brief Funciones básicas de red. -#@version 1.0 -#@warning License: GNU GPLv3+ -#*/ - - -#/** -# ogGetHostname -#@brief Muestra el nombre del cliente. -#@return str_host - nombre de máquina -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetHostname () -{ -local HOST NETFILE -# Tomar nombre de la variable HOSTNAME -HOST="$HOSTNAME" - -# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen) -[ -z "$HOST" ] && HOST=$(awk -F\" '/option host-name/ {gsub(/;/,""); host=$2} - END {print host} - ' /var/lib/dhcp3/dhclient.leases) -# Si no, leer el parámetro del kernel hostname (comentario para Doxygen) */ -[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="} - $1~/hostname/ {print $2}' /proc/cmdline) - -[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST" -echo $HOST -} - - -#/** -# ogGetIpAddress -#@brief Muestra la dirección IP del sistema -#@return str_ip - Dirección IP -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetIpAddress () -{ -local IP -#Version og2ndFS -NETFILE="/tmp/net-eth0.conf" -[ -f "$NETFILE" ] && IP=$(cat $NETFILE | grep IPV4ADDR | cut -f2 -d=) - -# Obtener direcciones IP. /* (comentario para Doxygen) -[ -z "$IP" ] && IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}') -# Mostrar sólo la primera. (comentario para Doxygen) */ -echo ${IP%% *} -} - - -#/** -# ogGetMacAddress -#@brief Muestra la dirección Ethernet del cliente. -#@return str_ether - Dirección Ethernet -#@version 1.0 - Integración en OpenGnSys 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-02-11 -#*/ ## -function ogGetMacAddress () -{ -local MAC -# Obtener direcciones Ethernet. -MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}') -# Mostrar sólo la primera. -echo ${MAC%% *} -} - diff --git a/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme b/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme deleted file mode 100644 index 853e37f5..00000000 --- a/client/boot-tools/old/ogFSHlnk/ModificacionesNecesiariasENGINE/readme +++ /dev/null @@ -1,20 +0,0 @@ -preinit/default - eliminamos enlace del bash - Ejecute solo el loadmodules del for - -preinit/loaenviron - comentamos el LD_PATH - - -/var/lib/tftboot/pxelinux.cfg/default -DEFAULT pxe2 -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin -LABEL pxe2 -KERNEL vmlinuz-2.6.32-21-generic-pae -APPEND initrd=initrd-2.6.32-21-generic-pae ip=dhcp rootdelay=0 boot=og engine=testing rootmnt=/opt/og2fs vga=788 - - -parametro boot: reservado INCOMPATIBLE CON BOOT=ADMIN -temporalmente: init/default.sh => export boot=admin \ No newline at end of file diff --git a/client/boot-tools/old/ogFSHlnk/boot/default.sh b/client/boot-tools/old/ogFSHlnk/boot/default.sh deleted file mode 100755 index e8c5b5d2..00000000 --- a/client/boot-tools/old/ogFSHlnk/boot/default.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/opt/opengnsys/bin/bash - -set -a - -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-/var/log/opengnsys.log} -#### FIXME EN PRUEBAS -OGLOGFILE=/var/log/opengnsys.log - -/opt/opengnsys/etc/init/load2fs.sh -source /opt/opengnsys/etc/preinit/loadenviron.sh -export PATH=/opt/og2fs/bin:$PATH -export PATH=/opt/og2fs/sbin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - echo "$MSG_LAUNCHCLIENT" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -fi - -bash -# FIXME Arranque Browser -#browser -qws $OGSTARTPAGE diff --git a/client/boot-tools/old/ogFSHlnk/boot/load2fs.sh b/client/boot-tools/old/ogFSHlnk/boot/load2fs.sh deleted file mode 100644 index ca3e3be7..00000000 --- a/client/boot-tools/old/ogFSHlnk/boot/load2fs.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -#/** -#@file load2fs.sh -#@brief Script de carga del 2nd Sistema de Archivos para el cliente OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Antonio J. Doblas Viso, Unviersidad de Malaga. -#@date 2010-02-15 -#*/ -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -t ext3 -o loop -o ro -cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -export PATH=/opt/og2fs/sbin:$PATH -export PATH=/opt/og2fs/bin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin - -# meter aqui el reboot del Boot.lib \ No newline at end of file diff --git a/client/boot-tools/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh b/client/boot-tools/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh deleted file mode 100755 index e3505aa6..00000000 --- a/client/boot-tools/old/ogFSHlnk/boot/ogFSHlnk-generatorV2.sh +++ /dev/null @@ -1,395 +0,0 @@ -#!/bin/bash -#Definicion de variables -# TODO: Pendiente Definir directorio base del 2FS -OGBASEDIR=/opt/opengnsys/client/ -OGFSFILE=${OGBASEDIR}og2ndFS -OGFSMOUNT=${OGBASEDIR}ogfsmount -OGLIB=/opt/opengnsys/client/lib - - - - - -#/** -# ogFSHMount [str_program] -#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones -#@return Si no hay parametros: login de acceso. -#@return con un parametro: La salida del programa ejecutado -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## -function ogFSHMount () -{ -mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop -mount --bind /proc $OGFSMOUNT/proc -mount --bind /sys $OGFSMOUNT/sys -mount --bind /tmp $OGFSMOUNT/tmp -mount --bind /dev $OGFSMOUNT/dev -mount --bind /dev/pts $OGFSMOUNT/dev/pts -[ $# = 0 ] && $(chroot $OGFSMOUNT /sbin/getty 38400 `tty`) -[ $# = 1 ] && chroot $OGFSMOUNT $1 -} - -#/** -# ogFSHUnmount -#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys -#@param -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogFSHUnmount () -{ -cd /tmp -umount -d -f -l $OGFSMOUNT/proc -umount -d -f -l $OGFSMOUNT/sys -umount -d -f -l $OGFSMOUNT/tmp -umount -d -f -l $OGFSMOUNT/dev -umount -d -f -l $OGFSMOUNT/dev/pts -umount -d -f -l $OGFSMOUNT -} - - -#/** -# ogFSHCreate str_versionUbuntu -#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys -#@param 1 Versión de ubuntu a generar, jaunty karmic -#@return -#@exception -#@note -#@todo -#@version 0.9 - Primera versión para OpenGnSys -#@author Antonio J. Doblas Viso, Universidad de Málaga -#@date 2010/02/15 -#*/ ## - -function ogFSHCreate () -{ -#Definicion de variables. -local SCRIPT RUNME FSCLIENTSIZEMB PASSROOT LASTDEBOOTSTRAP OGMUSTCOMPILE OGFSLABEL -FSCLIENTSIZEMB=1000 -PASSROOT=og -SCRIPT=/root/configure.sh -RUNME=$OGFSMOUNT$SCRIPT -LASTDEBOOTSTRAP=http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/debootstrap_1.0.20_all.deb -OGMUSTCOMPILE="http://www.informatica.us.es:8080/opengnsys/browser/trunk/client/engine/ToolsGNU.c?format=txt -O /root/ToolsGNU.c" -OGFSLABEL=og2FS -#TODO comprobar la compatibilidad del SO host - -if [ $# != 1 ] -then -echo Debes introducir como argumento: jaunty karmic lucid -return -fi - -#TODO: configurar la version lucid -#TODO: introducir un nuevo case para la vesion -case $1 in - jaunty|JAUNTY) - VERSION=jaunty - RELEASE=2.6.28-11-generic - ;; - karmic|KARMIC) - VERSION=karmic - RELEASE=2.6.31-14-generic - ;; - lucid|LUCID) - VERSION=lucid - #RELEASE=2.6.32-19-generic - RELEASE=2.6.32-21-generic-pae - ;; -esac - -# instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema -apt-get install gdebi-core -wget $LASTDEBOOTSTRAP -gdebi -n debootstrap_1.0.20_all.deb - -#Creamos el disco virtual con el filesystem del cliente. -dd if=/dev/zero of=$OGFSFILE bs=1048576 count=$FSCLIENTSIZEMB -mkfs.ext3 -b 4096 -L $OGFSLABEL $OGFSFILE -F -#Creamos el directorio donde montaremos el disco virtual -mkdir -p $OGFSMOUNT -#Montamos el dispositivo virtual en su punto de montaje. -mount $OGFSFILE $OGFSMOUNT -t ext3 -o loop - -#TODO Comprobar arquitectura -#Iniciamos la creación del sistema en el directorio de clientes. -echo debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ -debootstrap --include=linux-image-$RELEASE --arch=i386 --components=main,universe $VERSION $OGFSMOUNT http://es.archive.ubuntu.com/ubuntu/ - -# preparamos el etc.sources. -cat << FIN > ${OGFSMOUNT}/etc/apt/sources.list -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION main restricted -## Major bug fix updates produced after the final release of the -## distribution. -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates main restricted -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team. Also, please note that software in universe WILL NOT receive any -## review or updates from the Ubuntu security team. -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION universe -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION universe -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates universe - -## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu -## team, and may not be under a free licence. Please satisfy yourself as to -## your rights to use the software. Also, please note that software in -## multiverse WILL NOT receive any review or updates from the Ubuntu -## security team. -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION multiverse -deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse -deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-updates multiverse - -## Uncomment the following two lines to add software from the 'backports' -## repository. -## N.B. software from this repository may not have been tested as -## extensively as that contained in the main release, although it includes -## newer versions of some applications which may provide useful features. -## Also, please note that software in backports WILL NOT receive any review -## or updates from the Ubuntu security team. -# deb http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse -# deb-src http://es.archive.ubuntu.com/ubuntu/ $VERSION-backports main restricted universe multiverse - -## Uncomment the following two lines to add software from Canonical's -## 'partner' repository. -## This software is not part of Ubuntu, but is offered by Canonical and the -## respective vendors as a service to Ubuntu users. -# deb http://archive.canonical.com/ubuntu $VERSION partner -# deb-src http://archive.canonical.com/ubuntu $VERSION partner - - -deb http://security.ubuntu.com/ubuntu $VERSION-security main restricted -deb-src http://security.ubuntu.com/ubuntu $VERSION-security main restricted -deb http://security.ubuntu.com/ubuntu $VERSION-security universe -deb-src http://security.ubuntu.com/ubuntu $VERSION-security universe -deb http://security.ubuntu.com/ubuntu $VERSION-security multiverse -deb-src http://security.ubuntu.com/ubuntu $VERSION-security multiverse - - -deb http://archive.ubuntu.com/ubuntu $VERSION main -deb http://free.nchc.org.tw/drbl-core drbl stable -deb http://free.nchc.org.tw/ubuntu $VERSION-security main restricted universe multiverse -deb http://ppa.launchpad.net/freenx-team/ubuntu/ $VERSION main -deb http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main -deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu $VERSION main -FIN - -#TODO: fichero etc/hosts -#TODO: fichero etc/resolv.conf -echo "2ndFSHclient" > ${OGFSMOUNT}/etc/hostname -#TODO: introducir mas consoluas para el acceso como root. -echo "pts/0" >> ${OGFSMOUNT}/etc/securetty -echo "pts/1" >> ${OGFSMOUNT}/etc/securetty -echo "pts/2" >> ${OGFSMOUNT}/etc/securetty -echo "pts/3" >> ${OGFSMOUNT}/etc/securetty - -# copiamos algunas cosas del nfsexport -echo "Linking fonts for browser1 $OGLIB" -mkdir -p $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/ -cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts - -echo "Linking fonts for browser2 $OGLIB" -mkdir -p $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/ -cp -pr $OGLIB/fonts $OGFSMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts - -echo "Coping pci.ids" -cp -pr $OGLIB/pci.ids $OGFSMOUNT/etc - -# Guión de ejecución y personalización final. -cat << FIN > $RUNME -#!/bin/bash -################################################################ -##################### SOFTWARE ##################### -################################################################ -export LANGUAGE=C -export LC_ALL=C -export LANG=C - -dpkg-divert --local --rename --add /sbin/initctl -ln -s /bin/true /sbin/initctl - - -apt-get -y update - -# software system -apt-get -y --force-yes install linux-image-$RELEASE wget dialog man-db htop -# -# software to compile code -apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk -wget $OGMUSTCOMPILE -source /root/ToolsGNU.c -# -# sofware networking -apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 -ctorrent install -udpcast install -# -# software services -apt-get -y --force-yes install openssh-server bittornado trickle -# -# software disk and filesystem -apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted -apt-get -y --force-yes install dmraid dmsetup mdadm lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools -ntfs-3g install -# -# software cloning -apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools -wget -O partclone_0.2.8_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.8/partclone_0.2.8_i386.deb?use_mirror=ovh -gdebi -n partclone_0.2.8_i386.deb -mbuffer install -# -## software postconf -apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk -ms-sys install -# -# software compressor -apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop - -apt-get -y --force-yes remove busybox -apt-get -y --force-yes install busybox-static bash-static -# -#################################################################### -###################### Preparando el entorno ###################### -################################################################### -mkdir -p /var/lock -dpkg-reconfigure passwd -echo "root:$PASSROOT" | chpasswd -mv /etc/fstab /etc/fstab.original 2>/dev/null -mv /etc/mtab /etc/mtab.original 2>/dev/null -FIN - -chmod +x $RUNME - -#chroot hacia el punto de montaje. -ogFSHMount $SCRIPT -### Desmontamos y salimos. -ogFSHUnmount 2>/dev/null -ogFSHUnmount 2>/dev/null -ogFSHUnmount 2>/dev/null -} - - -###### Funciones para los clientes offline -function agregarOG { -cd $NEWROOT -mkdir -p opt/opengnsys -cp -prv /opt/opengnsys/client/* $NEWROOT/opt/opengnsys -echo "agregando OG al newinitrd" -} - -function finalizarISO -{ - cd $ANTERIORPWD - mv $TMPINITRD/new-initrd.gz $DEST/initrdISO.gz - if [ $LINUX ] ; then - mv $TMPINITRD/linux $DEST/linuxISO - fi -} - - -function CrearISO { -mkdir -p tmp/iso/isolinux -#cd tmp/iso/ -cp -prv /usr/lib/syslinux/* tmp/iso/isolinux/ -cp -prv /usr/share/gpxe/* tmp/iso/isolinux/ -cp -prv /tmp/linux tmp/iso/isolinux/linuxISO -cp -prv /tmp/initrd.gz tmp/iso/isolinux/ -cp -prv /opt/opengnsys/client/og2ndFS tmp/iso/isolinux/ - - -cat << FIN > tmp/iso/isolinux/isolinux.cfg -DEFAULT menu.c32 -PROMPT 0 -ALLOWOPTIONS 1 - -MENU TITLE FuTuR3 Live Collection - -LABEL gpxe -MENU LABEL gpxe -KERNEL /clonezilla/live/vmlinuz1 -APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia - - -#default 0 -#prompt 1 -#timeout 100 - -#display mensaje.txt - -LABEL 0 -MENU LABEL ogClient -KERNEL linuxISO -APPEND initrd=initrd.gz ro vga=788 irqpoll acpi=on boot=admin status=offline - -LABEL 1 -MENU LABEL ogClient1 sin vga -KERNEL linuxISO -APPEND initrd=initrd.gz ro irqpoll acpi=on boot=admin status=offline - -LABEL 2 -MENU LABEL ogClient2 sin irqpoll -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=on boot=admin status=offline - -LABEL 3 -MENU LABEL ogClient3 acpi=off -KERNEL linuxISO -APPEND initrd=initrd.gz ro acpi=off boot=admin status=offline - - -#LABEL ogclient -#KERNEL /ogclient/linuxISO -#APPEND initrd=/ogclient/initrdISO.img - -#KERNEL linuxISO -#APPEND initrd=initrdISO.img - -LABEL 4 -MENU LABEL local -localboot 0x80 -append - - - -label 5 -MENU LABEL Network boot via gPXE lkrn -KERNEL gpxe.lkrn - -label 5 -MENU LABEL Network boot via gPXE usb -KERNEL gpxe.usb - -label 5 -MENU LABEL Network boot via gPXE pxe -KERNEL gpxe.pxe - -label 5 -MENU LABEL Network boot via gPXE iso -KERNEL gpxe.iso -FIN -#### /tmp/iso# -mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso - -} - -function probarISO { -#/tmp/iso -qemu -m 256 -boot d -cdrom ogClient.iso -} - - - - diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog deleted file mode 100644 index d93f0b42..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/antonio/rcog +++ /dev/null @@ -1,137 +0,0 @@ -#/bin/sh - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - - #mount -t nfs -onolock,ro - nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - #mount -t nfs -o nolock - nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -. /scripts/functions -configure_networking -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - - -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro -cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -mount /opt/og2fs/bin /bin -mount /opt/og2fs/sbin /sbin -unset PATH -export PATH=/opt/og2fs/sbin -export PATH=/opt/og2fs/bin:$PATH -export PATH=/opt/og2fs/sbin:$PATH -export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin -} -mountroot diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume deleted file mode 100644 index e4c89d1a..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/conf.d/resume +++ /dev/null @@ -1 +0,0 @@ -RESUME=UUID=e8ea296e-815a-44d5-be24-b51d6b6fce4d diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks deleted file mode 100755 index d495d156..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/hooks/oghooks +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash -copy_exec /usr/bin/unionfs-fuse - - - -# Insert OpenGnsys Engine -#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - - diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf deleted file mode 100644 index 754e2bea..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/initramfs.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# initramfs.conf -# Configuration file for mkinitramfs(8). See initramfs.conf(5). -# - -# -# MODULES: [ most | netboot | dep | list ] -# -# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. -# -# dep - Try and guess which modules to load. -# -# netboot - Add the base modules, network modules, but skip block devices. -# -# list - Only include modules from the 'additional modules' list -# - -MODULES=most - -# -# BUSYBOX: [ y | n ] -# -# Use busybox if available. -# - -BUSYBOX=y - -# -# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] -# -# Amount of RAM to use for RAM-based compressed swap space. -# -# An empty value - compcache isn't used, or added to the initramfs at all. -# An integer and K (e.g. 65536 K) - use a number of kilobytes. -# An integer and M (e.g. 256 M) - use a number of megabytes. -# An integer and G (e.g. 1 G) - use a number of gigabytes. -# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. -# -# You can optionally install the compcache package to configure this setting -# via debconf and have userspace scripts to load and unload compcache. -# - -COMPCACHE_SIZE="" - -# -# NFS Section of the config. -# - -# -# BOOT: [ local | nfs ] -# -# local - Boot off of local media (harddrive, USB stick). -# -# nfs - Boot using an NFS drive as the root of the drive. -# - -BOOT=local - -# -# DEVICE: ... -# -# Specify the network interface, like eth0 -# - -DEVICE=eth0 - -# -# NFSROOT: [ auto | HOST:MOUNT ] -# - -NFSROOT=auto - diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules deleted file mode 100644 index 8bac1d4b..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/modules +++ /dev/null @@ -1,14 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -vga16b -vesafb -fbcon - diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og deleted file mode 100755 index 12c39a59..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/scripts/og +++ /dev/null @@ -1,194 +0,0 @@ -# OpenGnsys Local filesystem mounting -*- shell-script -*- - - -ogLinkBusybox () -{ -for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do - ln -f /bin/busybox /bin/$n -done -ln -f /bin/busybox /bin/sh -} - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - nfsmount -o nolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - #mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - nfsmount -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - -unionmount() -{ -FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid" -UNION_OPT="-o cow -o noinitgroups" -UPATH="/unionfs" -UBIN="unionfs-fuse" -mkdir -p /unionfs/host -mkdir -p /unionfs/union - dir=$1 - #echo "creando mkdir -p /unionfs/host/$dir" - mkdir -p /unionfs/host/$dir - #echo "montando mount --bind /$dir /unionfs/host/$dir " - mount --bind /$dir /unionfs/host/$dir - ##########echo "creando mkdir -p /unionfs/union/$dir" - mkdir -p /unionfs/union/$dir - host="/unionfs/host/${dir}=RW" - common="/opt/og2fs/${dir}=RO" - #####echo " ejecuantdo $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir " - $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir - - mount --bind /unionfs/union/$dir /$dir -} - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -. /scripts/functions -configure_networking - -# for the portmapper we need localhost -ifconfig lo 127.0.0.1 -/etc/init.d/portmap start - -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - - -mkdir -p /opt/og2fs -mount /opt/opengnsys/og2ndFS /opt/og2fs -o loop -o ro - -#mount -t tmpfs -o size=8192 tmpfs /unionfs -for i in etc; do - unionmount $i -done -# root var lib bin sbin usr -cat /proc/mounts > /etc/mtab - -#cp -R /opt/og2fs/etc/* /etc/ # */ -mount /opt/og2fs/usr /usr -mount /opt/og2fs/lib /lib -mount /opt/og2fs/bin /bin -mount /opt/og2fs/sbin /sbin -#export PATH=$PATH:/opt/og2fs/opt/drbl/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin -#chmod 777 /etc/rcog -##unset PATH -##export PATH=$PATH:/opt/og2fs/sbin -##export PATH=/opt/og2fs/bin:$PATH -##export PATH=/opt/og2fs/sbin:$PATH - - - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - run_scripts /scripts/og-bottom - [ "$quiet" != "y" ] && log_end_msg - - -#set -a -#trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 - -#/opt/opengnsys/etc/preinit/default.sh -echo "llamando a init desde scritps og" -exec init -} diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf deleted file mode 100644 index 3c27473b..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/initramfs-tools-OG/update-initramfs.conf +++ /dev/null @@ -1,20 +0,0 @@ -# -# Configuration file for update-initramfs(8) -# - -# -# update_initramfs [ yes | all | no ] -# -# Default is yes -# If set to all update-initramfs will update all initramfs -# If set to no disables any update to initramfs beside kernel upgrade - -update_initramfs=yes - -# -# backup_initramfs [ yes | no ] -# -# Default is no -# If set to no leaves no .bak backup files. - -backup_initramfs=no diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab deleted file mode 100644 index 03e0c06a..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/inittab +++ /dev/null @@ -1,14 +0,0 @@ -# This is run first except when booting in single-user mode -# -#::sysinit:/opt/opengnsys/etc/preinit/default.sh -# /bin/sh invocations on selected ttys -# -# Start an "askfirst" shell on the console (whatever that may be) -#::askfirst:/bin/sh -# Start an "askfirst" shell on /dev/tty2-4 -#tty1::respawn:/sbin/getty 38400 tty1 -tty1::respawn:/opt/opengnsys/etc/preinit/default.sh -tty2::respawn:/sbin/getty 38400 tty2 -tty3::respawn:/sbin/getty 38400 tty3 -tty4::respawn:/sbin/getty 38400 tty4 -tty5::respawn:/sbin/getty 38400 tty5 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf deleted file mode 100644 index 8b047e4e..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/etc/modprobe.d/blacklist-framebuffer.conf +++ /dev/null @@ -1,30 +0,0 @@ -# Framebuffer drivers are generally buggy and poorly-supported, and cause -# suspend failures, kernel panics and general mayhem. For this reason we -# never load them automatically. -blacklist aty128fb -blacklist atyfb -#blacklist radeonfb -blacklist cirrusfb -blacklist cyber2000fb -blacklist cyblafb -blacklist gx1fb -blacklist hgafb -blacklist i810fb -blacklist intelfb -blacklist kyrofb -blacklist lxfb -blacklist matroxfb_base -blacklist neofb -blacklist nvidiafb -blacklist pm2fb -blacklist rivafb -blacklist s1d13xxxfb -blacklist savagefb -blacklist sisfb -blacklist sstfb -blacklist tdfxfb -blacklist tridentfb -#blacklist vesafb -blacklist vfb -blacklist viafb -blacklist vt8623fb diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox deleted file mode 100755 index da2dc637..00000000 Binary files a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/bin/busybox and /dev/null differ diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox deleted file mode 100755 index d04890f6..00000000 Binary files a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/busybox and /dev/null differ diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root deleted file mode 100755 index aecb5e32..00000000 Binary files a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/lib/initramfs-tools/wait-for-root and /dev/null differ diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions deleted file mode 100644 index 2610f79a..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hook-functions +++ /dev/null @@ -1,461 +0,0 @@ -# -*- shell-script -*- - -catenate_cpiogz() { - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 - return - fi - - cat "${1}" >>"${__TMPCPIOGZ}" -} - -force_load() -{ - manual_add_modules ${@} - echo "${@}" >>"${DESTDIR}/conf/modules" -} - -# Takes a file containing a list of modules to be added as an -# argument, figures out dependancies, and adds them. -# -# Input file syntax: -# -# # comment -# modprobe_module_name [args ...] -# [...] -# -add_modules_from_file() -{ - # Sanity check - if [ ! -e "${1}" ]; then - echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 - return - fi - - sed -e '/^#/d' ${1} | while read module rest; do - force_load "${module}" "${rest}" - done -} - -# Is this module available? -have_module() -{ - modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" >/dev/null 2>&1 -} - -# Add dependent modules + eventual firmware -manual_add_modules() -{ - local mam_x firmwares firmware - - for mam_x in $(modprobe --set-version="${version}" --ignore-install \ - --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do - # Prune duplicates - if [ -e "${DESTDIR}/${mam_x}" ]; then - continue - fi - - mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" - ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" - if [ "${verbose}" = "y" ]; then - echo "Adding module ${mam_x}" - fi - - # Add firmware files if necessary - firmwares=$(modinfo -F firmware "${mam_x}") - if [ -z "${firmwares}" ]; then - continue - fi - for firmware in $firmwares; do - if [ -e "${DESTDIR}/lib/firmware/${firmware}" ] \ - || [ -e "${DESTDIR}/lib/firmware/${version}/${firmware}" ]; then - continue - fi - - # Only print warning for missing fw of loaded module - # or forced loaded module - if [ ! -e "/lib/firmware/${firmware}" ] \ - && [ ! -e "/lib/firmware/${version}/${firmware}" ]; then - if grep -q "^$(basename "${mam_x}" .ko)[[:space:]]" \ - /proc/modules \ - || grep -q "^$(basename "${mam_x}" .ko)" \ - "${CONFDIR}/modules"; then - echo "W: Possible missing firmware /lib/firmware/${firmware} for module $(basename ${mam_x} .ko)" >&2 - fi - continue - fi - - if [ -e "/lib/firmware/${version}/${firmware}" ]; then - copy_exec "/lib/firmware/${version}/${firmware}" - else - copy_exec "/lib/firmware/${firmware}" - fi - if [ "${verbose}" = "y" ]; then - echo "Adding firmware ${firmware}" - fi - done - done -} - -# $1 is the source path (e.g. /usr/bin/time) -# $2 is the relative destination (e.g. /usr or /usr/time) -# -# The destination is interpreted in the same way "cp" would, meaning -# (assuming /bin is a directory): -# -# "copy_exec /usr/bin/time /bin" -> /bin/time -# "copy_exec /usr/bin/time /bin/mytime" -> /bin/mytime -# -# If $2 is left out, the same destination path as for the source arg will -# be used and directories will be created as needed, so: -# -# "copy_exec /usr/bin/time" -> /usr/bin/time -# -copy_exec() { - local source target destination final_destination x nonoptlib - local libname dirname - - source="${1}" - if [ -n "${2}" ]; then - target="${2}" - else - if [ ! -e "${DESTDIR}/$(dirname "${1}")" ]; then - mkdir -p "${DESTDIR}/$(dirname "${1}")" - fi - target="${1}" - fi - - if [ -d "${DESTDIR}/${target}" ]; then - destination="${target}/$(basename "${source}")" - else - destination="${target}" - fi - final_destination="${DESTDIR}/${destination}" - - if [ -L "$final_destination" ]; then - if [ $(readlink "${final_destination}") != "${source}" ]; then - echo "W:copy_exec: Not copying ${source} to \$DESTDIR${destination}, which is already a copy of $(readlink ${final_destination})" >&2 - return - fi - else - ln -s ${source} ${DESTDIR}/${destination} - if [ "${verbose}" = "y" ]; then - echo "Adding binary ${source}" - fi - fi - - # Copy the dependant libraries - for x in $(ldd ${source} 2>/dev/null | sed -e ' - /\//!d; - /linux-gate/d; - /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; - s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do - - # Try to use non-optimised libraries where possible. - # We assume that all HWCAP libraries will be in tls, - # sse2, vfp or neon - nonoptlib=$(echo "${x}" | sed -e 's#/lib/\(tls\|i686\|sse2\|neon\|vfp\).*/\(lib.*\)#/lib/\2#') - - if [ -e "${nonoptlib}" ]; then - x="${nonoptlib}" - fi - - libname=$(basename "${x}") - dirname=$(dirname "${x}") - - mkdir -p "${DESTDIR}/${dirname}" - if [ ! -e "${DESTDIR}/${dirname}/${libname}" ]; then - ln -s "${x}" "${DESTDIR}/${dirname}" - if [ "${verbose}" = "y" ]; then - echo "Adding library ${x}" - fi - fi - done -} - -# Copy entire subtrees to the initramfs -copy_modules_dir() -{ - local x_mod - - if ! [ -d "${MODULESDIR}/${1}" ]; then - return; - fi - if [ "${verbose}" = "y" ]; then - echo "Copying module directory ${1}" - fi - for x_mod in $(find "${MODULESDIR}/${1}" -name '*.ko' -print); do - manual_add_modules $(basename ${x_mod} .ko) - done -} - -# walk /sys for relevant modules -sys_walk_mod_add() -{ - local driver_path module - device_path="$1" - - while [ "${device_path}" != "/sys" ]; do - driver_path="$(readlink -f ${device_path}/driver)" - if [ -e "$driver_path" ]; then - module="$(basename $(readlink -f $driver_path))" - if [ -n "${module}" ]; then - force_load "${module}" - fi - fi - device_path="$(dirname ${device_path})" - done -} - -# walk /sys for relevant modalias -sys_walk_modalias() -{ - local device_path modalias - - device_path="$(dirname "${1}")" - device_path="$(dirname "${device_path}")" - if [ -e "${device_path}/modalias" ]; then - modalias=$(cat "${device_path}/modalias") - fi - - if [ -n "${modalias}" ]; then - force_load "${modalias}" - fi -} - -# find and only copy root relevant modules -dep_add_modules() -{ - local block minor root FSTYPE root_dev_path x - - # findout root block device + fstype - eval "$(mount | awk '/\/dev\// {if ($3 == "/") {print "root=" $1 "\nFSTYPE=" $5; exit}}')" - if [ "${root}" = "/dev/root" ] ; then - root="/dev/disk/by-uuid/"$(/sbin/blkid -s UUID -o value ${root}) 2>/dev/null - fi - root="$(readlink -f ${root})" - - # find out real rootfs on auto type - if [ "${FSTYPE}" = "auto" ]; then - eval "$(/usr/lib/klibc/bin/fstype ${root})" - fi - - # check that fstype rootfs recognition - if [ "${FSTYPE}" = "unknown" ]; then - echo "mkinitramfs: unknown fstype on root ${root}" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report bug on initramfs-tools" - exit 1 - fi - - # Add rootfs - manual_add_modules "${FSTYPE}" - - # lvm luks root - if [ "${root#/dev/mapper/}" != "${root}" ]; then - minor=$((0x$(stat --format "%T" ${root}) % 256)) - block=$(ls -1 /sys/block/dm-${minor}/slaves | head -n 1) - if [ "${block#dm-}" != "${block}" ]; then - block=$(ls -1 /sys/block/${block}/slaves | head -n 1) - fi - block=${block%%[0-9]*} - # md root new naming scheme /dev/md/X - elif [ "${root#/dev/md/}" != "${root}" ]; then - root=${root#/dev/md/} - block=$(awk "/^md${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # md root /dev/mdX - elif [ "${root#/dev/md}" != "${root}" ]; then - root=${root#/dev/} - block=$(awk "/^${root}/{print substr(\$5, 1, 3); exit}" \ - /proc/mdstat) - # mmc always uses numbering in the devicename (mmcblk[0-9]) - elif [ "${root#/dev/mmc}" != "${root}" ]; then - block=${root#/dev/} - block=${block%%p[0-9]*} - # classical root device - else - block=${root#/dev/} - block=${block%%[0-9]*} - fi - - # Error out if /sys lack block dev - if [ -z "${block}" ] || [ ! -e /sys/block/${block} ]; then - echo "mkinitramfs: missing ${block} root ${root} /sys entry" - echo "mkinitramfs: workaround is MODULES=most" - echo "mkinitramfs: Error please report the bug" - exit 1 - fi - - # sys walk ATA - root_dev_path=$(readlink -f /sys/block/${block}/device) - sys_walk_mod_add ${root_dev_path} - - # catch old-style IDE - if [ -e /sys/bus/ide/devices/ ]; then - sys_walk_modalias ${root_dev_path} - manual_add_modules ide-disk - manual_add_modules ide-cd - fi - - if [ -e /sys/bus/scsi/devices/ ]; then - manual_add_modules sd_mod - fi - - if [ -e /sys/bus/i2o/devices/ ]; then - force_load i2o_block - force_load i2o_config - fi - - if [ -e /sys/bus/ps3_system_bus/ ]; then - for x in ps3disk ps3rom ps3-gelic ps3_sys_manager; do - manual_add_modules "${x}" - done - fi - - if [ -e /sys/bus/vio/ ]; then - for x in sunvnet sunvdc; do - manual_add_modules "${x}" - done - fi -} - - -# The modules "most" classes added per default to the initramfs -auto_add_modules() -{ - case "$1" in - base) - for x in ehci-hcd ohci-hcd uhci-hcd usbhid hid_a4tech \ - hid_apple hid_belkin hid_bright hid_cherry hid_chicony \ - hid_cypress hid_dell hid_ezkey hid_gyration hid_logitech \ - hid_microsoft hid_monterey hid_petalynx hid_pl hid_samsung \ - hid_sony hid_sunplus hid_tmff hid_zpff usb-storage ext2 \ - ext3 ext4 isofs jfs nfs reiserfs udf xfs af_packet atkbd i8042 \ - virtio_pci vfat nls_cp437 nls_iso8859-1; do - manual_add_modules "${x}" - done - ;; - net) - for x in 3c59x 8139cp 8139too 8390 atl1 atl1e b44 bmac \ - cxgb3 defxx dl2k e100 e1000 e1000e ehea epic100 \ - ep93xx_eth eql fealnx famachi forcedeth gelic_net \ - hp100 igb ipg mace mv643xx_eth myri10ge \ - natsemi ne2k-pci netconsole niu ns83820 pcnet32 qla3xxx \ - r8169 s2io sis900 skge sky2 slhc smc911x starfire \ - sundance sungem sungem_phy sunhme sunvnet tg3 tlan de2104x \ - de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ - typhon via-rhine via-velocity virtio_net yellowfin; do - manual_add_modules "${x}" - done - ;; - ide) - copy_modules_dir kernel/drivers/ide - ;; - scsi) - copy_modules_dir kernel/drivers/scsi - for x in mptfc mptsas mptscsih mptspi; do - manual_add_modules "${x}" - done - ;; - ata) - copy_modules_dir kernel/drivers/ata - ;; - block) - copy_modules_dir kernel/drivers/block - copy_modules_dir kernel/drivers/usb/storage - ;; - # FIXME: can be removed after Lenny release - ieee1394) - for x in ohci1394 sbp2; do - manual_add_modules "${x}" - done - ;; - firewire) - for x in firewire-ohci firewire-sbp2; do - manual_add_modules "${x}" - done - ;; - i2o) - for x in i2o_block; do - manual_add_modules "${x}" - done - ;; - dasd) - for x in dasd_eckd_mod dasd_fba_mod; do - manual_add_modules "${x}" - done - ;; - *) - auto_add_modules base - auto_add_modules net - auto_add_modules ide - auto_add_modules scsi - auto_add_modules block - auto_add_modules ata - auto_add_modules i2o - auto_add_modules dasd - auto_add_modules ieee1394 - auto_add_modules firewire - ;; - esac -} - -usage() -{ - cat >&2 << EOF - -Usage: ${0} [OPTION]... <-o outfile> [version] - -Options: - -d confdir Specify an alternative configuration directory. - -k Keep temporary directory used to make the image. - -o outfile Write to outfile. - -r root Override ROOT setting in mkinitrd.conf. - -See mkinitramfs(8) for further details. -EOF - exit 1 - -} - -# minimal supported kernel version -check_minkver() -{ - local curversion initdir DPKG_ARCH minversion cm_x tmp - - curversion="${1}" - initdir="${2}" - if [ -z "${initdir}" ]; then - DPKG_ARCH=$(dpkg --print-architecture) - case ${DPKG_ARCH} in - ia64|hppa) - minversion="2.6.15" - ;; - *) - minversion="2.6.12" - ;; - esac - if dpkg --compare-versions "${curversion}" lt "${minversion}"; then - echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - return 0 - fi - set_initlist - for cm_x in ${initlist}; do - # sed: keep last line starting with MINKVER=, - # remove MINKVER= and trailing space - minver=$(sed '/^MINKVER=/!d;$!d;s/^MINKVER=//;s/[[:space:]]*$//' "${initdir}/${cm_x}") - if [ -z "${tmp}" ]; then - continue - elif dpkg --compare-versions "${curversion}" lt "${minver}"; then - echo "W: ${cm_x} hook script requires at least kernel version ${minver}" >&2 - echo "W: not generating requested initramfs for kernel ${curversion}" >&2 - exit 2 - fi - done -} diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache deleted file mode 100755 index 37fdd22e..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/hooks/compcache +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/sh -set -e - -if [ "$1" = prereqs ]; then - exit 0 -fi - -. /usr/share/initramfs-tools/hook-functions - -number= -suffix= -eval $(printf "%s" "$COMPCACHE_SIZE" | \ - sed -nre 's/^ *([1-9][0-9]*) *([%KMGT]) *$/number="\1"; suffix="\2";/p') - -if [ -z "$number" ] || [ -z "$suffix" ]; then - exit 0 -fi - -if have_module ramzswap; then - name=ramzswap - manual_add_modules ramzswap -elif have_module compcache; then - name=compcache - manual_add_modules compcache -else - exit 0 -fi - -copy_exec /sbin/swapon - -mkdir -p "$DESTDIR"/etc/udev/rules.d -cat >"$DESTDIR"/etc/udev/rules.d/80-compcache.rules <"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <>"$DESTDIR"/scripts/init-top/compcache <' /proc/cmdline || echo "Loading, please wait..." - -# Note that this only becomes /dev on the real filesystem if udev's scripts -# are used; which they will be, but it's worth pointing out -if ! mount -t devtmpfs -o mode=0755 none /dev; then - mount -t tmpfs -o mode=0755 none /dev - mknod -m 0600 /dev/console c 5 1 - mknod /dev/null c 1 3 -fi -mkdir /dev/pts -mount -t devpts -o noexec,nosuid,gid=5,mode=0620 none /dev/pts || true -> /dev/.initramfs-tools -mkdir /dev/.initramfs - -# Export the dpkg architecture -export DPKG_ARCH= -. /conf/arch.conf - -# Set modprobe env -export MODPROBE_OPTIONS="-qb" - -# Export relevant variables -export ROOT= -export ROOTDELAY= -export ROOTFLAGS= -export ROOTFSTYPE= -export IPOPTS= -export HWADDR= -export break= -export init=/sbin/init -export quiet=n -export readonly=y -export rootmnt=/root -export debug= -export panic= -export blacklist= -export resume_offset= - -# Bring in the main config -. /conf/initramfs.conf -for conf in conf/conf.d/*; do - [ -f ${conf} ] && . ${conf} -done -. /scripts/functions - -# Parse command line options -for x in $(cat /proc/cmdline); do - case $x in - init=*) - init=${x#init=} - ;; - root=*) - ROOT=${x#root=} - case $ROOT in - LABEL=*) - ROOT="${ROOT#LABEL=}" - - # support / in LABEL= paths (escape to \x2f) - case "${ROOT}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')" - else - if [ "${ROOT}" != "${ROOT#/}" ]; then - ROOT="\x2f${ROOT#/}" - fi - if [ "${ROOT}" != "${ROOT%/}" ]; then - ROOT="${ROOT%/}\x2f" - fi - IFS='/' - newroot= - for s in $ROOT; do - if [ -z "${newroot}" ]; then - newroot="${s}" - else - newroot="${newroot}\\x2f${s}" - fi - done - unset IFS - ROOT="${newroot}" - fi - esac - ROOT="/dev/disk/by-label/${ROOT}" - ;; - UUID=*) - ROOT="/dev/disk/by-uuid/${ROOT#UUID=}" - ;; - /dev/nfs) - [ -z "${BOOT}" ] && BOOT=nfs - ;; - esac - ;; - rootflags=*) - ROOTFLAGS="-o ${x#rootflags=}" - ;; - rootfstype=*) - ROOTFSTYPE="${x#rootfstype=}" - ;; - rootdelay=*) - ROOTDELAY="${x#rootdelay=}" - case ${ROOTDELAY} in - *[![:digit:].]*) - ROOTDELAY= - ;; - esac - ;; - resumedelay=*) - RESUMEDELAY="${x#resumedelay=}" - ;; - loop=*) - LOOP="${x#loop=}" - ;; - loopflags=*) - LOOPFLAGS="-o ${x#loopflags=}" - ;; - loopfstype=*) - LOOPFSTYPE="${x#loopfstype=}" - ;; - cryptopts=*) - cryptopts="${x#cryptopts=}" - ;; - nfsroot=*) - NFSROOT="${x#nfsroot=}" - ;; - netboot=*) - NETBOOT="${x#netboot=}" - ;; - ip=*) - IPOPTS="${x#ip=}" - ;; - hwaddr=*) - HWADDR="${x#hwaddr=}" - ;; - boot=*) - BOOT=${x#boot=} - ;; - resume=*) - RESUME="${x#resume=}" - ;; - resume_offset=*) - resume_offset="${x#resume_offset=}" - ;; - noresume) - noresume=y - ;; - panic=*) - panic="${x#panic=}" - case ${panic} in - *[![:digit:].]*) - panic= - ;; - esac - ;; - quiet) - quiet=y - ;; - ro) - readonly=y - ;; - rw) - readonly=n - ;; - debug) - debug=y - quiet=n - exec >/dev/.initramfs/initramfs.debug 2>&1 - set -x - ;; - debug=*) - debug=y - quiet=n - set -x - ;; - break=*) - break=${x#break=} - ;; - break) - break=premount - ;; - blacklist=*) - blacklist=${x#blacklist=} - ;; - netconsole=*) - netconsole=${x#netconsole=} - ;; - esac -done - -if [ -z "${noresume}" ]; then - export resume=${RESUME} -else - export noresume -fi - -[ -n "${netconsole}" ] && modprobe netconsole netconsole=${netconsole} - -maybe_break top - -# export BOOT variable value for compcache, -# so we know if we run from casper -export BOOT - -# Don't do log messages here to avoid confusing usplash -run_scripts /scripts/init-top - -maybe_break modules -log_begin_msg "Loading essential drivers..." -load_modules -log_end_msg - -maybe_break premount -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount" -run_scripts /scripts/init-premount -[ "$quiet" != "y" ] && log_end_msg - -maybe_break mount -log_begin_msg "Mounting root file system..." -. /scripts/${BOOT} -parse_numeric ${ROOT} -mountroot -log_end_msg - -maybe_break bottom -[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom" -run_scripts /scripts/init-bottom -[ "$quiet" != "y" ] && log_end_msg - -# Move virtual filesystems over to the real filesystem -mount -n -o move /sys ${rootmnt}/sys -mount -n -o move /proc ${rootmnt}/proc - -# Check init bootarg -if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then - echo "Target filesystem doesn't have ${init}." - init= -fi - -# Search for valid init -if [ -z "${init}" ] ; then - for init in /sbin/init /etc/init /bin/init /bin/sh; do - if [ ! -x "${rootmnt}${init}" ]; then - continue - fi - break - done -fi - -# No init on rootmount -if [ ! -x "${rootmnt}${init}" ]; then - panic "No init found. Try passing init= bootarg." -fi - -# Confuses /etc/init.d/rc -if [ -n ${debug} ]; then - unset debug -fi - -# Chain to real filesystem -maybe_break init -exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1 -panic "Could not execute run-init." diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules deleted file mode 100644 index 9aa46468..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/modules +++ /dev/null @@ -1,10 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions deleted file mode 100644 index 3bea0c97..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/functions +++ /dev/null @@ -1,420 +0,0 @@ -# -*- shell-script -*- - -_log_msg() -{ - if [ "$quiet" = "y" ]; then return; fi - echo "$@" -} - -log_success_msg() -{ - _log_msg "Success: $@" -} - -log_failure_msg() -{ - _log_msg "Failure: $@" -} - -log_warning_msg() -{ - _log_msg "Warning: $@" -} - -log_begin_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TEXT $@" - fi - _log_msg "Begin: $@ ..." -} - -log_end_msg() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "SUCCESS ok" - fi - _log_msg "Done." -} - -# Add failure hook -add_mountroot_fail_hook() -{ - mkdir -p /tmp/mountroot-fail-hooks.d - ln -s "$0" /tmp/mountroot-fail-hooks.d/"$1" -} - -# Run failure hooks. -# When a failure hook exits "1", it has not done anything to correct the -# system. Exiting "0" means that something has been attempted to resolve -# the lack of a root filesystem. -# Hooks are run in lexigraphical order, and are responsible for removing -# themselves if they should not re-run in a later cycle. When one exits -# "0", the stack is stopped, so the caller can return to the main rootfs -# wait loop. -try_failure_hooks() -{ - local hook - - # Disable usplash so text from hooks can be seen - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - for hook in /tmp/mountroot-fail-hooks.d/*; do - if [ -x ${hook} ] && ${hook} mountfail; then - return 0 - fi - done - return 1 -} - -panic() -{ - if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "QUIT" - fi - chvt 1 - - # Disallow console access - if [ -n "${panic}" ]; then - sleep ${panic} - reboot - fi - - modprobe i8042 - modprobe atkbd - - run_scripts /scripts/panic - - echo $@ - PS1='(initramfs) ' /bin/sh -i /dev/console 2>&1 -} - -maybe_break() -{ - if echo "${break}" | egrep -q "(,|^)$1(,|$)"; then - panic "Spawning shell within the initramfs" - fi -} - -render() -{ - eval "echo -n \${$@}" -} - -set_initlist() -{ - unset initlist - for si_x in ${initdir}/*; do - # skip empty dirs without warning - [ "${si_x}" = "${initdir}/*" ] && return - - # only allow variable name chars - case ${si_x#${initdir}/} in - *[![:alnum:]_]*) - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not alphanumeric or '_' file" - continue - ;; - esac - - # skip non executable scripts - if [ ! -x ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: not executable" - continue - fi - - # skip directories - if [ -d ${si_x} ]; then - [ "${verbose}" = "y" ] \ - && echo "$si_x ignored: a directory" - continue - fi - - initlist="${initlist} ${si_x#${initdir}/}" - done -} - -reduce_satisfied() -{ - deplist="$(render array_${1})" - unset tmpdeplist - for rs_y in ${deplist}; do - # check if there are alternatives - case ${rs_y} in - *\|*) - OLD_IFS="$IFS" - IFS="|" - for rs_z in ${rs_y}; do - IFS="$OLD_IFS" - # only allow variable name chars - case ${rs_z} in - *[![:alnum:]_]*) - IFS="|" - continue - ;; - esac - # skip non executable scripts - if [ ! -x ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - # skip directories - if [ -d ${initdir}/${rs_z} ]; then - IFS="|" - continue - fi - tmpdeplist="${tmpdeplist} ${rs_z}" - break - done - IFS="$OLD_IFS" - ;; - *) - case ${rs_y} in - *[![:alnum:]_]*) - continue - ;; - esac - if [ ! -x ${initdir}/${rs_y} ]; then - continue - fi - if [ -d ${initdir}/${rs_y} ]; then - continue - fi - tmpdeplist="${tmpdeplist} ${rs_y}" - ;; - esac - done - deplist=${tmpdeplist} - for rs_x in ${runlist}; do - pop_list_item ${rs_x} ${deplist} - deplist=${tmppop} - done - eval array_${1}=\"${deplist}\" -} - -get_prereqs() -{ - set_initlist - for gp_x in ${initlist}; do - tmp=$(${initdir}/${gp_x} prereqs) - eval array_${gp_x}=\"${tmp}\" - done -} - -count_unsatisfied() -{ - set -- ${@} - return ${#} -} - -# Removes $1 from initlist -pop_list_item() -{ - item=${1} - shift - set -- ${@} - unset tmppop - # Iterate - for pop in ${@}; do - if [ ${pop} = ${item} ]; then - continue - fi - tmppop="${tmppop} ${pop}" - done - -} - -# This function generates the runlist, so we clear it first. -reduce_prereqs() -{ - unset runlist - set -- ${initlist} - i=$# - # Loop until there's no more in the queue to loop through - while [ ${i} -ne 0 ]; do - oldi=${i} - for rp_x in ${initlist}; do - reduce_satisfied ${rp_x} - count_unsatisfied $(render array_${rp_x}) - cnt=${?} - if [ ${cnt} -eq 0 ]; then - runlist="${runlist} ${rp_x}" - pop_list_item ${rp_x} ${initlist} - initlist=${tmppop} - i=$((${i} - 1)) - fi - done - if [ ${i} -eq ${oldi} ]; then - panic "PANIC: Circular dependancy. Exiting." - fi - done -} - -get_prereq_pairs() -{ - set_initlist - for gp_x in ${initlist}; do - echo ${gp_x} ${gp_x} - prereqs=$(${initdir}/${gp_x} prereqs) - for prereq in ${prereqs}; do - echo ${prereq} ${gp_x} - done - done -} - -call_scripts() -{ - for cs_x in ${runlist}; do - [ -f ${initdir}/${cs_x} ] || continue - if [ x"$1" = "xoptional" ]; then - option=$(sed '/^OPTION=/!d;$d;s/^OPTION=//;s/[[:space:]]*$//' "${initdir}/${cs_x}") - [ -z "${option}" ] || eval test -n \"\${$option}\" -a \"\${$option}\" != \"n\" || continue - fi - - # mkinitramfs verbose output - if [ "${verbose}" = "y" ]; then - echo "Calling hook ${cs_x}" - fi - ${initdir}/${cs_x} - # allow boot scripts to modify exported boot paramaters - if [ -e /conf/param.conf ]; then - . /conf/param.conf - fi - done -} - -run_scripts() -{ - initdir=${1} - [ ! -d ${initdir} ] && return - - if [ -f ${initdir}/ORDER ]; then - . ${initdir}/ORDER - elif [ -x /usr/bin/tsort ]; then - runlist=$(get_prereq_pairs | tsort) - call_scripts $2 - else - get_prereqs - reduce_prereqs - call_scripts $2 - fi -} - -cache_run_scripts() -{ - DESTDIR=${1} - scriptdir=${2} - initdir=${DESTDIR}${scriptdir} - [ ! -d ${initdir} ] && return - - runlist=$(get_prereq_pairs | tsort) - for crs_x in ${runlist}; do - [ -f ${initdir}/${crs_x} ] || continue - echo "${scriptdir}/${crs_x}" >> ${initdir}/ORDER - echo "[ -e /conf/param.conf ] && . /conf/param.conf" >> ${initdir}/ORDER - done -} - -# Load custom modules first -load_modules() -{ - if [ -e /conf/modules ]; then - cat /conf/modules | while read m; do - # Skip empty lines - if [ -z "$m" ]; then - continue - fi - # Skip comments - d?ash removes whitespace prefix - com=$(printf "%.1s" "${m}") - if [ "$com" = "#" ]; then - continue - fi - modprobe $m - done - fi -} - -# lilo compatibility -parse_numeric() { - case $1 in - "") - return - ;; - /*) - return - ;; - *:*) - minor=${1#*:} - major=${1%:*} - ;; - *) - value=$(( 0x${1} )) - minor=$(( ${value} % 256 )) - major=$(( ${value} / 256 )) - ;; - esac - - mknod -m 600 /dev/root b ${major} ${minor} - ROOT=/dev/root -} - -configure_networking() -{ - # networking already configured thus bail out - [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 - - if [ "${HWADDR}" ]; then - # select interface by MAC address - HWADDR="$(echo "${HWADDR}" | tr A-Z- a-z:)" - local iface - for iface in /sys/class/net/*; do - [ -f "$iface/address" ] || continue - if [ "$(cat "$iface/address")" = "${HWADDR}" ]; then - DEVICE="${iface#/sys/class/net/}" - fi - done - fi - - # support ip options see linux sources - # Documentation/filesystems/nfsroot.txt - case ${IPOPTS} in - none|off) - # Do nothing - ;; - ""|on|any) - # Bring up device - ipconfig -t 60 ${DEVICE} - ;; - dhcp|bootp|rarp|both) - ipconfig -t 60 -c ${IPOPTS} -d ${DEVICE} - ;; - *) - ipconfig -t 60 -d $IPOPTS - - # grab device entry from ip option - NEW_DEVICE=${IPOPTS#*:*:*:*:*:*} - if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then - NEW_DEVICE=${NEW_DEVICE%:*} - else - # wrong parse, possibly only a partial string - NEW_DEVICE= - fi - if [ -n "${NEW_DEVICE}" ]; then - DEVICE="${NEW_DEVICE}" - fi - ;; - esac - - # source ipconfig output - if [ -n "${DEVICE}" ]; then - # source specific bootdevice - . /tmp/net-${DEVICE}.conf - else - # source any interface as not exaclty specified - . /tmp/net-*.conf - fi -} diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth deleted file mode 100755 index 8b1e7c8a..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/plymouth +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -if [ -f ${rootmnt}/dev/.initramfs/plymouth.pid ] -then - /bin/plymouth update-root-fs --new-root-dir=${rootmnt} -fi diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev deleted file mode 100755 index f9d2ce9d..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-bottom/udev +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -e -# initramfs init-bottom script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Stop udevd, we'll miss a few events while we run init, but we catch up -pkill udevd - -# Move /dev to the real filesystem -mount -n -o move /dev ${rootmnt}/dev diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 deleted file mode 100755 index e5bc78f1..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-premount/lvm2 +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -# init-premount script for lvm2. - -PREREQS="udev mdadm" -prereqs() -{ - echo $PREREQS -} - -mountroot_fail() -{ - if ! /sbin/lvm vgscan >/dev/null 2>&1 ; then - cat </dev/null; then - modprobe ata_generic all_generic_ide=1 -fi diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist deleted file mode 100755 index 5e6b3c1e..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/blacklist +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -# blacklist vga16fb when vga= or video= given -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*|video=*) - echo "blacklist vga16fb" >> /etc/modprobe.d/initramfs - ;; - esac -done - -# sanity check -[ -z "${blacklist}" ] && exit 0 - -# write blacklist to modprobe.d -IFS=',' -for b in ${blacklist}; do - echo "blacklist $b" >> /etc/modprobe.d/initramfs -done diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup deleted file mode 100755 index df767bb4..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/console_setup +++ /dev/null @@ -1,83 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -OPTION=FRAMEBUFFER -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer deleted file mode 100755 index bb59aadf..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/framebuffer +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - - -# The options part of the kernel "video=" argument (i.e. everyting -# after "video=:") has very inconsistent rules. -# -# Generally the following applies: -# 1) options are comma-separated -# 2) options can be in either of these three forms: -# =, :, . -# 3) the "mode" option has the form x[M][R][-][@][i][m] -# and may or may not start with "mode=" -# -# When the options are used with modules, they need to be space-separated -# and the following conversions are needed: -# : -> = -# -> =1 -# -> mode= -parse_video_opts() -{ - local OPTS="$1" - local IFS="," - - # Must be a line like video=:,[opt2]... - if [ "${OPTS}" = "${OPTS%%:*}" ]; then - return - fi - OPTS="${OPTS#*:}" - for opt in ${OPTS}; do - # Already in the "=" form - if [ "${opt}" != "${opt#*=}" ]; then - echo -n "$opt " - # In the ":" form - elif [ "${opt}" != "${opt#*:}" ]; then - echo -n "${opt%:*}=${opt#*:} " - # Presumably a modevalue without the "mode=" prefix - elif [ "${opt}" != "${opt#[0-9]*x[0-9]}" ]; then - echo -n "mode=$opt " - # Presumably a boolean - else - echo -n "${opt}=1 " - fi - done -} - -FB="" -OPTS="" - -for x in $(cat /proc/cmdline); do - case ${x} in - vga=*) - FB="vesafb"; - OPTS=""; - ;; - video=*) - FB=${x#*=} - FB="${FB%%:*}" - OPTS="$(parse_video_opts "${x}")" - esac -done - -# Map command line name to module name -case ${FB} in -matroxfb) - FB=matroxfb_base - ;; -esac - -if [ -n "${FB}" ]; then - # Some framebuffer devices need character devices :-/ - udevadm settle - MODPROBE_OPTIONS=-q modprobe ${FB} ${OPTS} - # Wait for the framebuffer devices to be ready - udevadm settle -else - # If we have no graphics devices yet, wait for udev to settle - [ -d /sys/class/graphics/fbcon ] || udevadm settle - [ -d /sys/class/graphics/fb0 ] || udevadm settle - [ -d /sys/class/drm/card0 ] || udevadm settle -fi - -# Force fb mode via /sys interface -for x in $(cat /proc/cmdline); do - case ${x} in - fbmode=*) - MODE=${x#*=} - echo "$MODE" > /sys/class/graphics/fb0/mode - ;; - esac -done diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap deleted file mode 100755 index cb67aa96..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/keymap +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth deleted file mode 100755 index 813b6b4c..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/plymouth +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="framebuffer console_setup brltty" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -printf '\033[?25l' > /dev/tty7 -/sbin/plymouthd --mode=boot --attach-to-session --pid-file=/dev/.initramfs/plymouth.pid -/bin/plymouth show-splash diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev deleted file mode 100755 index cd2fa564..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/init-top/udev +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -e -# initramfs init-top script for udev - -PREREQ="all_generic_ide blacklist" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# It's all over netlink now -echo "" > /proc/sys/kernel/hotplug - -# Start the udev daemon to process events -/sbin/udevd --daemon --resolve-names=never - -# Iterate sysfs and fire off everything; if we include a rule for it then -# it'll get handled; otherwise it'll get handled later when we do this again -# in the main boot sequence. -( /sbin/udevadm trigger --subsystem-match=block; \ - /sbin/udevadm trigger --subsystem-nomatch=block; ) & diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local deleted file mode 100644 index 865572b5..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local +++ /dev/null @@ -1,131 +0,0 @@ -# Local filesystem mounting -*- shell-script -*- - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" - run_scripts /scripts/local-top - [ "$quiet" != "y" ] && log_end_msg - - while [ -z "${FSTYPE}" ]; do - FSTYPE=$(wait-for-root "${ROOT}" ${ROOTDELAY:-30}) - - # Run failure hooks, hoping one of them can fix up the system - # and we can restart the wait loop. If they all fail, abort - # and move on to the panic handler and shell. - if [ -z "${FSTYPE}" ] && ! try_failure_hooks; then - break - fi - done - - # We've given up, but we'll let the user fix matters if they can - while [ -z "${FSTYPE}" -a ! -e "${ROOT}" ]; do - # give hint about renamed root - case "${ROOT}" in - /dev/hd*) - suffix="${ROOT#/dev/hd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/sd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}" - fi - ;; - /dev/sd*) - suffix="${ROOT#/dev/sd}" - major="${suffix%[[:digit:]]}" - major="${major%[[:digit:]]}" - if [ -d "/sys/block/hd${major}" ]; then - echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}" - fi - ;; - esac - echo "Gave up waiting for root device. Common problems:" - echo " - Boot args (cat /proc/cmdline)" - echo " - Check rootdelay= (did the system wait long enough?)" - echo " - Check root= (did the system wait for the right device?)" - echo " - Missing modules (cat /proc/modules; ls /dev)" - panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" - done - - # Get the root filesystem type if not set - if [ -z "${ROOTFSTYPE}" ]; then - [ -n "${FSTYPE}" ] || FSTYPE=$(/sbin/blkid -s TYPE -o value "${ROOT}") - ROOTFSTYPE="${FSTYPE}" - else - FSTYPE="${ROOTFSTYPE}" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" - run_scripts /scripts/local-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ] && \ - [ -z "$LOOP" ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - [ -n "${FSTYPE}" ] && modprobe ${FSTYPE} - - # FIXME This has no error checking - # Mount root - mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt} - mountroot_status="$?" - if [ "$LOOP" ]; then - if [ "$mountroot_status" != 0 ]; then - if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then - panic " -Could not mount the partition ${ROOT}. -This could also happen if the file system is not clean because of an operating -system crash, an interrupted boot process, an improper shutdown, or unplugging -of a removable device without first unmounting or ejecting it. To fix this, -simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then -gracefully shut down and reboot back into Windows. After this you should be -able to reboot again and resume the installation. -(filesystem = ${FSTYPE}, error code = $mountroot_status) -" - fi - fi - - mkdir -p /host - mount -o move ${rootmnt} /host - - while [ ! -e "/host/${LOOP#/}" ]; do - panic "ALERT! /host/${LOOP#/} does not exist. Dropping to a shell!" - done - - # Get the loop filesystem type if not set - if [ -z "${LOOPFSTYPE}" ]; then - eval $(fstype < "/host/${LOOP#/}") - else - FSTYPE="${LOOPFSTYPE}" - fi - if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then - FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}") - [ -z "$FSTYPE" ] && FSTYPE="unknown" - fi - - if [ ${readonly} = y ]; then - roflag=-r - else - roflag=-w - fi - - # FIXME This has no error checking - modprobe loop - modprobe ${FSTYPE} - - # FIXME This has no error checking - mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt} - - if [ -d ${rootmnt}/host ]; then - mount -o move /host ${rootmnt}/host - fi - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom" - run_scripts /scripts/local-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g deleted file mode 100755 index 335ef95e..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g +++ /dev/null @@ -1,16 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - mkdir -p /dev/.initramfs/varrun - pidof mount.ntfs >> /dev/.initramfs/varrun/sendsigs.omit - pidof mount.ntfs-3g >> /dev/.initramfs/varrun/sendsigs.omit -fi - -exit 0 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc deleted file mode 100755 index c9fbc369..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/fixrtc +++ /dev/null @@ -1,64 +0,0 @@ -#!/bin/sh -e -# initramfs local-premount script for fixrtc - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - -# use the fixrtc cmdline option in your bootloader to -# automatically set the hardware clock to the date of -# the last mount of your root filesystem to avoid fsck -# to get confused by the superblock being in the future - -BROKEN_CLOCK="" -ROOTDEV="" - -for x in $(cat /proc/cmdline); do - case ${x} in - root=*) - value=${x#*=} - - # Find the device node path depending on the form of root= : - - case ${value} in - UUID=*) - ROOTDEV=/dev/disk/by-uuid/${value#UUID=} - ;; - LABEL=*) - ROOTDEV=/dev/disk/by-label/${value#LABEL=} - ;; - *) - ROOTDEV=${value} - ;; - esac - ;; - fixrtc) - BROKEN_CLOCK=1 - ;; - esac -done - -if [ -n "$BROKEN_CLOCK" -a -n "$ROOTDEV" ];then - ROOTDISK=$(readlink -f "$ROOTDEV") && - - TIMESTR=$(dumpe2fs -h "$ROOTDISK" 2>/dev/null|grep "Last mount time") && - TIME=${TIMESTR#*:} && - - date --set="${TIME} 1 minute" >/dev/null 2>&1 -fi - -# This script is best-effort. If we couldn't fudge the clock as desired, -# just try to carry on boot anyway: -# It will probably fail, but we won't have made the situation any worse. -exit 0 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g deleted file mode 100755 index 57e7f8ba..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/ntfs_3g +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/sh - -case $1 in -prereqs) - exit 0 - ;; -esac - -if [ "$ROOTFSTYPE" = ntfs ] || [ "$ROOTFSTYPE" = ntfs-3g ] || \ - [ "$LOOPFSTYPE" = ntfs ] || [ "$LOOPFSTYPE" = ntfs-3g ]; then - modprobe fuse -fi - -exit 0 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume deleted file mode 100755 index 46535936..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/local-premount/resume +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/sh - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -. ./scripts/functions - -if [ -z "${resume}" ]; then - exit 0 -fi - -case $resume in -LABEL=*) - resume="${resume#LABEL=}" - - # support any / in LABEL= path (escape to \x2f) - case "${resume}" in - *[/]*) - if [ -x "$(command -v sed)" ]; then - resume="$(echo ${resume} | sed 's,/,\\x2f,g')" - else - if [ "${resume}" != "${resume#/}" ]; then - resume="\x2f${resume#/}" - fi - if [ "${resume}" != "${resume%/}" ]; then - resume="${resume%/}\x2f" - fi - IFS='/' - newresume= - for s in $resume; do - if [ -z "${newresume}" ]; then - newresume="${s}" - else - newresume="${newresume}\\x2f${s}" - fi - done - unset IFS - resume="${newresume}" - fi - esac - resume="/dev/disk/by-label/${resume}" - ;; -UUID=*) - resume="/dev/disk/by-uuid/${resume#UUID=}" - ;; -esac - -SWAPTYPE=$(wait-for-root "${resume}" ${RESUMEDELAY:-5}) - -case "${SWAPTYPE}" in - swsuspend|s1suspend|s2suspend|ulsuspend|tuxonice) - if [ -x /bin/plymouth ] && plymouth --ping; then - plymouth message --text="Resuming from $resume" - fi - - # hardcode path, uswsusp ships an resume binary too - if [ -n "${resume_offset}" ]; then - /bin/resume ${resume} ${resume_offset} >/dev/null 2>&1 - else - /bin/resume ${resume} >/dev/null 2>&1 - fi - ;; -esac diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs deleted file mode 100644 index b9c2522d..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs +++ /dev/null @@ -1,83 +0,0 @@ -# NFS filesystem mounting -*- shell-script -*- - -# FIXME This needs error checking - -retry_nr=0 - -# parse nfs bootargs and mount nfs -do_nfsmount() -{ - - configure_networking - - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - - if [ -z "${NFSOPTS}" ]; then - NFSOPTS="-o retrans=10" - fi - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-premount" - run_scripts /scripts/nfs-premount - [ "$quiet" != "y" ] && log_end_msg - - if [ ${readonly} = y ]; then - roflag="-o ro" - else - roflag="-o rw" - fi - - nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt} -} - -# NFS root mounting -mountroot() -{ - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-top" - run_scripts /scripts/nfs-top - [ "$quiet" != "y" ] && log_end_msg - - modprobe nfs - # For DHCP - modprobe af_packet - - # Default delay is around 180s - # FIXME: add usplash_write info - if [ -z "${ROOTDELAY}" ]; then - delay=180 - else - delay=${ROOTDELAY} - fi - - # loop until nfsmount succeds - while [ ${retry_nr} -lt ${delay} ] && [ ! -e ${rootmnt}${init} ]; do - [ ${retry_nr} -gt 0 ] && \ - [ "$quiet" != "y" ] && log_begin_msg "Retrying nfs mount" - do_nfsmount - retry_nr=$(( ${retry_nr} + 1 )) - [ ! -e ${rootmnt}${init} ] && /bin/sleep 1 - [ ${retry_nr} -gt 0 ] && [ "$quiet" != "y" ] && log_end_msg - done - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/nfs-bottom" - run_scripts /scripts/nfs-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev deleted file mode 100755 index 980e496f..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/nfs-top/udev +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -e -# initramfs nfs-top script for udev - -PREREQ="" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -# Each call to udevsettle can take up to three minutes -if [ -x /sbin/usplash_write ]; then - /sbin/usplash_write "TIMEOUT 360" - trap "/sbin/usplash_write 'TIMEOUT 15'" 0 -fi - -# We need to wait for the network card drivers to be loaded -/sbin/udevadm settle diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup deleted file mode 100755 index 5e97f65e..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/console_setup +++ /dev/null @@ -1,82 +0,0 @@ -#! /bin/sh -# A crude much-simplified clone of setupcon for use in the initramfs. - -PREREQ="framebuffer" - -prereqs () { - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -. /etc/default/console-setup - -[ "$ACTIVE_CONSOLES" ] || exit 0 - -if [ "$VERBOSE_OUTPUT" = yes ]; then - verbose= -else - verbose='>/dev/null 2>&1' -fi - -for i in 1 2 3 4 5 6; do - [ -c /dev/tty$i ] || mknod /dev/tty$i c 4 $i -done - -for console in $ACTIVE_CONSOLES; do - [ -w $console ] || continue - - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM$CHARMAP" ]; then - printf '\033%%G' >$console - else - printf '\033%%@' >$console - fi - - if [ "$FONT" ]; then - FONT="/etc/console-setup/${FONT##*/}" - FONT="${FONT%.gz}" - else - FONT="/etc/console-setup/$CODESET-$FONTFACE$FONTSIZE.psf" - fi - if [ -f "$FONT" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console -f "$FONT" $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C $console "$FONT" $verbose - fi - fi - - if [ "$ACM" ]; then - ACM="/etc/console-setup/${ACM##*/}" - ACM="${ACM%.gz}" - else - ACM="/etc/console-setup/$CHARMAP.acm" - fi - if [ -f "$ACM" ]; then - if type consolechars >/dev/null 2>&1; then - eval consolechars -v --tty=$console --acm "$ACM" \ - $verbose - elif type setfont >/dev/null 2>&1; then - eval setfont -v -C "$console" -m "$ACM" $verbose - fi - fi - - if type kbd_mode >/dev/null 2>&1; then - if [ "$CHARMAP" = UTF-8 ] || [ -z "$ACM" ]; then - kbd_mode -u <$console - else - kbd_mode -a <$console - fi - fi -done - -if [ -f /etc/console-setup/cached.kmap.gz ] && type loadkeys >/dev/null; then - eval loadkeys /etc/console-setup/cached.kmap.gz $verbose -fi - -exit 0 diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap deleted file mode 100644 index f011abf5..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/keymap +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -PREREQ="" -prereqs() -{ - echo "$PREREQ" -} -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -OPTS="-q" - -# Should terminal be in UTF8 mode? -if [ -x /bin/kbd_mode ]; then - /bin/kbd_mode -u - OPTS="${OPTS} -u" -fi - -# Load custom keymap -if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then - loadkeys ${OPTS} /etc/boottime.kmap.gz -fi diff --git a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth b/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth deleted file mode 100755 index 2da5a6b5..00000000 --- a/client/boot-tools/old/ogFSHlnk/initramfs-tools-OG-unionfs/usr/share/initramfs-tools/scripts/panic/plymouth +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -OPTION=FRAMEBUFFER -PREREQ="udev" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -prereqs) - prereqs - exit 0 - ;; -esac - -/bin/plymouth quit diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm deleted file mode 100644 index 11d27f8c..00000000 --- a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/mdadm +++ /dev/null @@ -1,18 +0,0 @@ -# mdadm boot_degraded configuration -# -# You can run 'dpkg-reconfigure mdadm' to modify the values in this file, if -# you want. You can also change the values here and changes will be preserved. -# Do note that only the values are preserved; the rest of the file is -# rewritten. -# -# BOOT_DEGRADED: -# Do you want to boot your system if a RAID providing your root filesystem -# becomes degraded? -# -# Running a system with a degraded RAID could result in permanent data loss -# if it suffers another hardware fault. -# -# However, you might answer "yes" if this system is a server, expected to -# tolerate hardware faults and boot unattended. - -BOOT_DEGRADED=false diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume deleted file mode 100644 index 34fdc4a5..00000000 --- a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/conf.d/resume +++ /dev/null @@ -1 +0,0 @@ -RESUME=UUID=99eb2782-3766-452a-8e1e-0bc26b426b12 diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks deleted file mode 100755 index 3d9b04b8..00000000 --- a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/hooks/oghooks +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/sh -e -# initramfs hook for OpenGnsys - - -PREREQ="og" - -# Output pre-requisites -prereqs() -{ - echo "$PREREQ" -} - -case "$1" in - prereqs) - prereqs - exit 0 - ;; -esac - - -. /usr/share/initramfs-tools/hook-functions - -mkdir -p ${DESTDIR}/scripts/og-top -mkdir -p ${DESTDIR}/scripts/og-premount -mkdir -p ${DESTDIR}/scripts/og-bottom -mkdir -p ${DESTDIR}/mnt/ -mkdir -p ${DESTDIR}/net/ -mkdir -p ${DESTDIR}/usr -mkdir -p ${DESTDIR}/var/lock -mkdir -p ${DESTDIR}/var/log -mkdir -p ${DESTDIR}/opt/opengnsys; - -# Insert basic binaries -copy_exec /bin/bash-static /bin/bash - - -# Insert OpenGnsys Engine -mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine -cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine - diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf deleted file mode 100644 index 754e2bea..00000000 --- a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/initramfs.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# initramfs.conf -# Configuration file for mkinitramfs(8). See initramfs.conf(5). -# - -# -# MODULES: [ most | netboot | dep | list ] -# -# most - Add all framebuffer, acpi, filesystem, and harddrive drivers. -# -# dep - Try and guess which modules to load. -# -# netboot - Add the base modules, network modules, but skip block devices. -# -# list - Only include modules from the 'additional modules' list -# - -MODULES=most - -# -# BUSYBOX: [ y | n ] -# -# Use busybox if available. -# - -BUSYBOX=y - -# -# COMPCACHE_SIZE: [ "x K" | "x M" | "x G" | "x %" ] -# -# Amount of RAM to use for RAM-based compressed swap space. -# -# An empty value - compcache isn't used, or added to the initramfs at all. -# An integer and K (e.g. 65536 K) - use a number of kilobytes. -# An integer and M (e.g. 256 M) - use a number of megabytes. -# An integer and G (e.g. 1 G) - use a number of gigabytes. -# An integer and % (e.g. 50 %) - use a percentage of the amount of RAM. -# -# You can optionally install the compcache package to configure this setting -# via debconf and have userspace scripts to load and unload compcache. -# - -COMPCACHE_SIZE="" - -# -# NFS Section of the config. -# - -# -# BOOT: [ local | nfs ] -# -# local - Boot off of local media (harddrive, USB stick). -# -# nfs - Boot using an NFS drive as the root of the drive. -# - -BOOT=local - -# -# DEVICE: ... -# -# Specify the network interface, like eth0 -# - -DEVICE=eth0 - -# -# NFSROOT: [ auto | HOST:MOUNT ] -# - -NFSROOT=auto - diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/modules b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/modules deleted file mode 100644 index 484ef718..00000000 --- a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/modules +++ /dev/null @@ -1,13 +0,0 @@ -# List of modules that you want to include in your initramfs. -# -# Syntax: module_name [args ...] -# -# You must run update-initramfs(8) to effect this change. -# -# Examples: -# -# raid1 -# sd_mod -fbcon -vesafb -vga16b diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og deleted file mode 100755 index 6408eda7..00000000 --- a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/scripts/og +++ /dev/null @@ -1,140 +0,0 @@ -# OpenGnsys Local filesystem mounting -*- shell-script -*- - -ogLinkBusybox () -{ -for n in `busybox | tail -19 | tr "," "\\n" | sed -e "s/ \|\t//"|grep .` ; do - ln -f /bin/busybox /bin/$n -done -ln -f /bin/busybox /bin/sh -} - -ogConfigureRamfs () -{ -mkdir -p /tmp/og2ndFStmp/ -touch /tmp/og2ndFStmp/modules.dep.temp -touch /tmp/og2ndFStmp/modules.dep -} - - -ogExportKernelParameters () -{ -GLOBAL="cat /proc/cmdline" -for i in `${GLOBAL}` -do - echo $i | grep "=" > /dev/null && export $i -done -} - -ogCheckPointBreak () -{ -# firstshell=0 SH para Arranque en modo depuracion para el cliente intrd -if [ "$firstshell" = "0" ] -then - echo "entrando en sh antes de configurar la red" - sh -fi - - if [ "$firstshell" = "1" ] -then - echo "entrando en sh despues de configurar la red" - sh -fi -# firstrunt=sh Arranque en modo depuracion para el cliente intrd -if [ "$firstrun" = "9" ] -then - sh -fi - -} - -ogLoadNetModule () -{ -#cargando netmodule -if [ -n "$netmodule" ] -then - echo "Cargando modulo de red $netmodule" - insmod `find /lib/modules/ -name ${netmodule}*` -fi -} - - -ogGetROOTSERVER () -{ - # get nfs root from dhcp - if [ "x${NFSROOT}" = "xauto" ]; then - # check if server ip is part of dhcp root-path - if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then - NFSROOT=${ROOTSERVER}:${ROOTPATH} - else - NFSROOT=${ROOTPATH} - fi - - # nfsroot=[:][,] - elif [ -n "${NFSROOT}" ]; then - # nfs options are an optional arg - if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then - NFSOPTS="-o ${NFSROOT#*,}" - fi - NFSROOT=${NFSROOT%%,*} - if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then - NFSROOT=${ROOTSERVER}:${NFSROOT} - fi - fi - export ROOTSERVER -} - -ogConectROOTSERVER () -{ -echo Preparando conexión con el Repositorio \$ROOTSERVER \$BOOTMODE \$MOUNTOPTS - ## Montamos el resto de cosas necesarias - #printf "$MSG_MOUNTREPO\n" $BOOTMODE; - - mount -t nfs -onolock,ro $ROOTSERVER:/opt/opengnsys/client /opt/opengnsys; - mount -t nfs -o nolock $ROOTSERVER:/opt/opengnsys/log/clients /opt/opengnsys/log; - #mount -t nfs -o "\$MOUNTOPTS" \$SERVERNFS:/opt/opengnsys/images /opt/opengnsys/images; - #mount -t tmpfs none /opt/opengnsys/images -o size=5m -} - - - -# Parameter: Where to mount the filesystem -mountroot () -{ - [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top" - run_scripts /scripts/og-top - [ "$quiet" != "y" ] && log_end_msg - - # If the root device hasn't shown up yet, give it a little while - # to deal with removable devices - - -ogConfigureRamfs -ogExportKernelParameters -ogCheckPointBreak -ogLoadNetModule - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount" - run_scripts /scripts/og-premount - [ "$quiet" != "y" ] && log_end_msg - -configure_networking -ogGetROOTSERVER -ogCheckPointBreak - -ogConectROOTSERVER -# ogConectROOTMEDIA -ogCheckPointBreak - -set -a -trap "mount | grep loop && /opt/og2fs/bin/bash" 1 2 3 9 15 -/opt/opengnsys/etc/preinit/default.sh - - - - - - - [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom" - run_scripts /scripts/og-bottom - [ "$quiet" != "y" ] && log_end_msg -} diff --git a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf b/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf deleted file mode 100644 index 3c27473b..00000000 --- a/client/boot-tools/old/ogFSHlnk/old/initramfs-tools-OG/update-initramfs.conf +++ /dev/null @@ -1,20 +0,0 @@ -# -# Configuration file for update-initramfs(8) -# - -# -# update_initramfs [ yes | all | no ] -# -# Default is yes -# If set to all update-initramfs will update all initramfs -# If set to no disables any update to initramfs beside kernel upgrade - -update_initramfs=yes - -# -# backup_initramfs [ yes | no ] -# -# Default is no -# If set to no leaves no .bak backup files. - -backup_initramfs=no diff --git a/client/boot-tools/old/serverstructure/etc/exports.txt b/client/boot-tools/old/serverstructure/etc/exports.txt deleted file mode 100644 index d5053530..00000000 --- a/client/boot-tools/old/serverstructure/etc/exports.txt +++ /dev/null @@ -1 +0,0 @@ -/var/lib/tftpboot/ *(ro,no_subtree_check,no_root_squash,sync) diff --git a/client/boot-tools/old/serverstructure/etc/samba/smb.conf.txt b/client/boot-tools/old/serverstructure/etc/samba/smb.conf.txt deleted file mode 100644 index e47df3d8..00000000 --- a/client/boot-tools/old/serverstructure/etc/samba/smb.conf.txt +++ /dev/null @@ -1,29 +0,0 @@ -[tftpboot] - comment = el directorio fisico ogclient debe estar como escritura - writeable = no - read only = yes - #locking = no - path = /var/lib/tftpboot - guest ok = no - -[ogclient] - comment = client - read only = yes - locking = no - path = /opt/opengnsys/client - guest ok = no - -[oglog] - comment = log - read only = yes - locking = no - path = /opt/opengnsys/log/clients - guest ok = no - -[ogimages] - comment = images - read only = no - writeable = yes - locking = no - path = /opt/opengnsys/images - guest ok = no \ No newline at end of file diff --git a/client/boot-tools/old/serverstructure/init/defaultTESTING.sh b/client/boot-tools/old/serverstructure/init/defaultTESTING.sh deleted file mode 100755 index 07c10bcb..00000000 --- a/client/boot-tools/old/serverstructure/init/defaultTESTING.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash - -/etc/init.d/ssh restart -#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 - - -# Fichero de registro de incidencias (en el servidor; si no, en local). -OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} -OGLOGFILE=${OGLOGFILE:-$OPENGNSYS/log/${ogGetIpAdderss},log} -if ! touch $OGLOGFILE 2>/dev/null; then - OGLOGFILE=/var/log/opengnsys.log -fi - - -#TODO => activacion de modo escritura en REPO -ActiveAdmin=true -if [ $ActiveAdmin == "true" ] -then - export boot=admin - umount /opt/opengnsys/images - - if [ "$ogprotocol" == "nfs" ] - then - mount.nfs ${ROOTSERVER}:/opt/opengnsys/images /opt/opengnsys/images -o nolock - fi - - if [ "$ogprotocol" == "smb" ] - then - echo "montando smb" - mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og - echo mount.cifs //${ROOTSERVER}/ogimages /opt/opengnsys/images -o user=opengnsys,pass=og - - fi -fi -# Arranque de OpenGnSys Client. -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - - - echo "$MSG_LAUNCHCLIENT modo cliente full" - $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d 5 -fi - -# Si fallo en cliente y modo "admin", cargar shell; si no, salir. -#if [ "$boot" == "admin" ]; then - bash -#fi diff --git a/client/boot-tools/old/serverstructure/preinit/defaultTESTING.sh b/client/boot-tools/old/serverstructure/preinit/defaultTESTING.sh deleted file mode 100755 index 3d291cc5..00000000 --- a/client/boot-tools/old/serverstructure/preinit/defaultTESTING.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -# Para que no haya problemas con el interprete -#ln -fs /opt/opengnsys/bin/bash /bin/bash - -set -a - -#source /opt/opengnsys/etc/preinit/loadenviron.sh -source /opt/opengnsys/etc/preinit/loadenvironTESTING.sh -#for f in fileslinks.sh loadudeb.sh loadmodules.sh metadevs.sh; do -for f in loadmodulesTESTING.sh; do - $OGETC/preinit/$f -done - -if [ -f $OGETC/init/$OG_IP.sh ]; then - $OGETC/init/$OG_IP.sh - -elif [ -f $OGETC/init/$OGGROUP.sh ]; then - $OGETC/init/$OGGROUP.sh - -elif [ -f $OGETC/init/defaultTESTING.sh ]; then - $OGETC/init/defaultTESTING.sh - -else - echo "No se ha encontrado script de inicio" - halt -fi diff --git a/client/boot-tools/old/serverstructure/preinit/loadenvironTESTING.sh b/client/boot-tools/old/serverstructure/preinit/loadenvironTESTING.sh deleted file mode 100755 index 1273db7f..00000000 --- a/client/boot-tools/old/serverstructure/preinit/loadenvironTESTING.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -#/** -#@file loadenviron.sh -#@brief Script de carga de la API de funciones de OpenGNSys. -#@warning License: GNU GPLv3+ -#@version 0.9 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-10-10 -#*/ - -# Idioma por defecto. -export LANG="${LANG:-es_ES}" - -# Directorios del projecto OpenGnSys. -export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}" -if [ -d $OPENGNSYS ]; then - export OGBIN=$OPENGNSYS/bin/testing - #export OGBIN=$OPENGNSYS/bin - export OGETC=$OPENGNSYS/etc - export OGLIB=$OPENGNSYS/lib - export OGAPI=$OGLIB/engine/bin - export OGSCRIPTS=$OPENGNSYS/scripts - export OGIMG=$OPENGNSYS/images - export OGCAC=$OPENGNSYS/cache - export OGLOG=$OPENGNSYS/log - - #export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH - #export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH - - # Cargar fichero de idioma. - LANGFILE=$OGETC/lang.$LANG.conf - if [ -f $LANGFILE ]; then - source $LANGFILE - for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do - export $i - done - fi - echo "$MSG_LOADAPI" - # Cargar mapa de teclado. - loadkeys ${LANG%_*} >/dev/null - # Cargar API de funciones. - for i in $OGAPI/*.lib; do - source $i - done - for i in $(typeset -F | cut -f3 -d" "); do - export -f $i - done - - # Añadir dependencia de arquitectura - ARCH=$(ogGetArch) -# if [ -n "$ARCH" ]; then - # export PATH=$OGBIN/$ARCH:$PATH - # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH - # fi - export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin - export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - - GLOBAL="cat /proc/cmdline" - for i in `${GLOBAL}` - do - echo $i | grep "=" > /dev/null && export $i - done - - - # Carga de las API testing - if [ "$engine" = "testing" ] - then - for i in $OGAPI/*.testing; do - source $i - done - #export PATH=$PATH:$OGBIN/$ARCH-testing - fi - - # Fichero de registros. - export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log" - # FIXME Pruebas para grupos de ordenadores - #export OGGROUP=$(ogGetGroup) - export OGGROUP="$group" -fi - -# Declaración de códigos de error. -export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto. -export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado. -export OG_ERR_PARTITION=3 # Error en partición de disco. -export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. -export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. -export OG_ERR_NOTOS=6 # Sin sistema operativo. -export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. - diff --git a/client/boot-tools/old/serverstructure/preinit/loadmodulesTESTING.sh b/client/boot-tools/old/serverstructure/preinit/loadmodulesTESTING.sh deleted file mode 100755 index cea7d53a..00000000 --- a/client/boot-tools/old/serverstructure/preinit/loadmodulesTESTING.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -#/** -#@file loadmodules.sh -#@brief Script de inicio para cargar módulos complementarios del kernel. -#@version 1.0 -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010-01-26 -#*/ - - -MSG_LOADMODULES=${MSG_LOADMODULES:-"."} -echo "$MSG_LOADMODULES para cliente full" - -# Directorio principal de módulos del kernel. -MODULESDIR=/lib/modules/$(uname -r)/kernel - -# Módulo del ratón. -insmod $MODULESDIR/drivers/input/mouse/psmouse.ko 2>/dev/null -# Módulos de discos. -#for m in $MODULESDIR/drivers/ata/*.ko; do - # insmod $m 2>/dev/null -#done -# Módulos de sistemas de archivos. -#for f in reiserfs jfs xfs hfs hfsplus; do -#for f in reiserfs xfs hfs hfsplus; do -# insmod $MODULESDIR/fs/$f/$f.ko 2>/dev/null -#done - diff --git a/client/boot-tools/old/serverstructure/var/lib/tftpboot/defaultFULL b/client/boot-tools/old/serverstructure/var/lib/tftpboot/defaultFULL deleted file mode 100644 index b7f81d0a..00000000 --- a/client/boot-tools/old/serverstructure/var/lib/tftpboot/defaultFULL +++ /dev/null @@ -1,18 +0,0 @@ -DEFAULT pxe-2.6.32-21-generic-pae - -LABEL pxe -KERNEL linux -APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin - -LABEL pxe-2.6.32-21-generic-pae -KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae -APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=nfs engine=testing - - -#NOTA: parametro boot: reservado para oginit INCOMPATIBLE CON BOOT=ADMIN -#NOTA: reposerver=$IPREPO correspondería a tu servidor Repositorio OG -#ogrepo=172.17.32.242 -#ip: -#og2nd=sqfs =>sqfs, img -#ogprotocol=nfs => nfs, smb -#engine=testing => activa las libreias testing de cada universidad. -- cgit v1.2.3-18-g5258 -- cgit v1.2.3-18-g5258 From fb7908adcbd7267a58c2a722213c39b7aee1ef0f Mon Sep 17 00:00:00 2001 From: ramon Date: Fri, 8 Apr 2011 17:00:15 +0000 Subject: Versión 1.0: actualizar documentación. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1768 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/README.es.txt | 5 ++- doc/CHANGELOG.es.txt | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++- doc/INSTALL.es.txt | 4 +- doc/filetree.es.txt | 38 +++++++++--------- 4 files changed, 128 insertions(+), 25 deletions(-) diff --git a/client/README.es.txt b/client/README.es.txt index cb6a5e14..fc35d4b7 100644 --- a/client/README.es.txt +++ b/client/README.es.txt @@ -2,9 +2,10 @@ OpenGnSys Client README ========================= -Este directorio contiene la estructura de datos del cliente OpenGNSys. +Este directorio contiene la estructura de datos del cliente OpenGnSys. -- browser código fuente del cliente gráfico OpenGNSys Browser. +- boot-tools herramientas para generar la distribución de OpenGnSys Client. +- browser código fuente del cliente gráfico OpenGnSys Browser. - engine funciones del motor (se instalará en el servidor en /opt/opengneys/client/lib/engine). - shared estructura principal del cliente exportado por NFS o Samba diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt index a6ad970a..6e8bc42d 100644 --- a/doc/CHANGELOG.es.txt +++ b/doc/CHANGELOG.es.txt @@ -2,11 +2,113 @@ LISTA DE CAMBIOS CHANGELOG.es.ext ======================================== -Lista de cambios que serán incluidos en OpenGnSys 0.10 ------------------------------------------------------- +Lista de cambios incluidos en OpenGnSys 1.0 +------------------------------------------- + +Tickets resueltos en módulo OpenGnSys Cloning Engine: +#291 Creación de imagenes desde el modo user +#298 Tratamientos de bloqueos de imágenes para solucionar problemas de concurrencia +#305 Integración engine version 1.0 +#309 Integración create/restoreImage Trunk y Testing: .img +#337 Scripts cliente: reboot|poweroff sleep antes de llamar a Busybox (no se resolverá) +#342 ogGetImageInfo() Partclone size MB GB +#353 Bloqueos: fallos en la detección en ogCreateImage, ogRestoreImage, etc +#354 Bloqueos mejoras: funciones repetidas (no se resolverá) +#355 Error al cambiar partición de NTFS a EXT[234] +#358 ogCreateCache e initCache: No comprueba si se está usando la cuarta partición (no se resolverá) + +Tickets resueltos en módulo OpenGnSys Client: +#131 Generar paquetes deb para el cliente (no se resolverá) +#163 Incluir en el cliente la clave autorizada rsa ssh del servidor +#243 Browser incluye terminal con letra monospace y barra de estado en UTF-8 (mejora) +#303 Integracion proceso arranque cliente versión 1.0 +#304 Integracion interface adm versión 1.0 +#314 smb punto acceso 2nd FileSystem del cliente [tftpboot] [ogboot] +#345 Importar "runtest" para la versión 1.0 (mejora) +#334 OgClient - admin problemas al escribir en el repo +#336 Regenerar el cliente ogclient-1.0-lucid-32bit.tar.gz + +Tickets resueltos en módulo OpenGnSys Server: +#350 ogAdmAgent no se inicia + +Tickets resueltos en módulo OpenGnSys Repository Server: +#188 Al restaurar por torrent el BitFile no se crea siempre +#300 integracion bin del repo + +Tickets resueltos en módulo OpenGnSys Web Admin Console: +#126 Integración de consola Web con bittorent (mejora) +#138 Configurar parámetros de red en cliente +#185 Aproximación a la gestión log de los clientes (mejora) +#248 La consola web no muestra datos del repositorio hasta que no se asigna +#258 Consola Web: Error al eliminar un perfil de software +#266 Consola web: Información unidades de la caché +#268 Consola Web: error texto de formularios +#301 Integracion modulos web versión 1.0 +#302 Integracion base de datos version 1.0 +#310 Instalar: no genera las propiedades del repositorio por defecto en la consola (duplicado de #248) +#338 Validación de formularios de la consola web +#339 Añadir opción de apagado en cliente sin menú asociado (mejora) +#349 Boton de confirmacion en gestor de arranque + +Tickets resueltos en módulo OpenGnSys Installer: +#299 Instalador para la versión 1.0 +#312 instalador: torrent-tracker no se se instala +#313 Instalador: no genera la estrucutra para el cliente +#316 Error en opengnsys_update.sh al copiar archivos de servicios +#335 Error en opengnsys_update.sh al descomprimir cliente + +Tickets genéricos resueltos: + + +Lista de cambios incluidos en OpenGnSys 0.10 +-------------------------------------------- + +Tickets resueltos en módulo OpenGnSys Cloning Engine: +#182 Clonación remota partición a partición +#257 ogCreatePartitions: Al crear o modificar las particiones desaparece la cache +#261 restoreImage de un XP cambia usuario inicio sesión a HOSTNAME +#269 No crea correctamente la imagen con Partclone en Pentium IV +#271 Multicast ttl enrutadores Cisco +#276 Error de CRC al restaurar imágenes con Partclone +#292 Error de CRC al restaurar o crear imagen (duplicado de #276) +#290 ogReduceFs en Ext[234] +#293 createImageTesting incluye el redimensionado de la particion origen pero luego no la expande +#297 Error al detectar tipo de partición Linux marcada como activa + +Tickets resueltos en módulo OpenGnSys Client: +#112 Problema al arrancar Windows en discos SATA2 +#237 Sustituir Partimage +#250 En ocasiones el cliente no arranca el browser gráfico +#255 ogClient: Si falla alguna comprobación inicial, se para el ogClient +#267 Cliente no arranca con CD en la primera unidad óptica (no se resolverá) +#275 Generador de cliente Initrd no detecta versión de Ubuntu + +Tickets resueltos en módulo OpenGnSys Server: +#260 Gestionar plantillas PXE mediante scripts + +Tickets resueltos en módulo OpenGnSys Repository Server: +#184 tracker no gestiona el enjambre + +Tickets resueltos en módulo OpenGnSys Web Admin Console: +#177 Consola web: No se pueden borrar usuarios +#190 Error en incorporarordenadores.php +#241 El cliente no responde en local con la nueva consola web +#247 La consola web muestra la cadena SERVERIP en el repositorio por defecto +#251 El cliente no carga su menú personalizado definido en la consola web +#254 Consola Web: particionar y formatear +#259 Consola Web: información de un repositorio +#282 Gestión web de log +#283 Gestor de activacion/desactivacion modulos web +#284 Modulo web: propiedades aula/equipos combo box para elementos netboot +#285 Modulo web: propiedades aula/equipos combo box para elementos netboot Tickets resueltos en módulo OpenGnSys Installer: #240 Error instalación limpia rev. 1326 +#242 Completar instalación por defecto basada en Ubuntu 10.04 Lucid +#246 El instalador debe proteger ficheros de configuración +#249 Desinstalador borra contenido repositorio por defecto +#253 El instalador debe parchear los ficheros de configuración para configurar acceso a base datos +#262 Error de ejecución del instalador en 2ª instalación consecutiva mediante Subversion Lista de cambios incluidos en OpenGnSys 0.9.2 diff --git a/doc/INSTALL.es.txt b/doc/INSTALL.es.txt index 55df924a..97501061 100644 --- a/doc/INSTALL.es.txt +++ b/doc/INSTALL.es.txt @@ -3,7 +3,7 @@ Instalación de OpenGnSys Server v 0.9 Notas iniciales -Se presupone que el servidor de OpenGnSys va a ser instalado en un sistema operativo Ubuntu 9.04 Server de 32 bits. +Se presupone que el servidor de OpenGnSys va a ser instalado en una distribución del sistema operativo Ubuntu Linux a partir de la versión 9.04. La instalación de OpenGnSys se realiza ejecutando el script de instalación opengnsys_installer.sh, el cual puede descargarse directamente de la dirección: http://www.opengnsys.es/browser/trunk/installer/opengnsys_installer.sh?format=txt @@ -28,7 +28,7 @@ Se realizan los siguientes procesos: * Configuración básica de los serviciios de red DHCP, PXE y NFS/Samba a partir de las plantillas de configuración * Copiar ficheros complementarios de gestión del servidor. * Crear la base de datos y configurar el servidor web de OpenGnSys Web Admin Console. - * Copiar los ficheros de las páginas web de Web Console. + * Copiar los ficheros de las páginas de Web Admin Console. * Copiar la estructura de directorios de OpenGnSys Client. * Descargar la imagen inicial de OpenGnSys Client. * Configuración básica de los serviciios de OpenGnSys a partir de los parámetros de red. diff --git a/doc/filetree.es.txt b/doc/filetree.es.txt index a714e5a5..037ae19a 100644 --- a/doc/filetree.es.txt +++ b/doc/filetree.es.txt @@ -1,63 +1,63 @@ -Estructura de Ficheros de OpenGNSys -=================================== +Estructura de Ficheros de OpenGnSys 1.0 +======================================= -Estructura de directorios de OpenGNSys Client +Estructura de directorios de OpenGnSys Client --------------------------------------------- /opt/opengnsys bin (ro) - utilidades asociadas. - cache (rw) - directorio donde esta montado la particion de cache + cache (rw) - directorio donde se monta el sistema de archivos de caché. etc (ro) - configuración. preinit (ro) - scripts de carga del sistema. init (ro) - scripts de arranque. - startpages (ro) - paginas webs de inicio - images (normal=ro, admin=rw) - imágenes de arranque. + images (user=ro, admin=rw) - repositorio de imágenes. lib (ro) - librerías de las utilidades. engine/bin (ro) - librerías de funciones del motor de clonación. modules (ro) - módulos extra del kernel. - log (rw) - registros de incidencias (enlazado en /var/log/opengnsys). + log (rw) - ficheros de registro de incidencias. -Servicios de OpenGNSys Server: +Servicios de OpenGnSys Server: ------------------------------ - Syslog - gestión de logs de servidores y clientes. -- NFS - DHCP - PXE - TFTP +- Samba - Base de datos - Servidor de órdenes -Estructura de directorios de OpenGNSys Server: +Estructura de directorios de OpenGnSys Server: ---------------------------------------------- /opt/opengnsys bin - binarios del servidor. - client - exporta por NFS la estructura de directorios del cliente. - etc - configuración (enlazado en /etc/opengnsys). + client - exporta en remoto la estructura de directorios del cliente. + etc - ficheros de configuración. lib - librerías de las utilidades. - log - registros de incidencias (enlazado en /var/log/opengnsys). - tftpboot - enlace simbólico a /var/lib/tftpboot (o donde corresponda). + log - ficheros de registro de incidencias. + tftpboot - arranque remoto de clientes (enlace a /var/lib/tftpboot). NOTA: páginas de manuales y documentación se copian a los directorios estándares del sistema operativo. -Estructura de directorios de OpenGNSys Repository Manager +Estructura de directorios de OpenGnSys Repository Manager --------------------------------------------------------- /opt/opengnsys bin - binarios del servidor. - etc - configuración (enlazado en /etc/opengnsys). + etc - ficheros de configuración. images - imágenes de sistemas de archivos. - log - registros de incidencias (enlazado en /var/log/opengnsys). + log - ficheros de registro de incidencias. -Relación NFS ------------- +Relación de sistemas de ficheros en red +--------------------------------------- + Server: exporta /opt/opengnsys/client -> Client: importa /opt/opengnsys Server: exporta /opt/opengnsys/log/client -> Client: importa /opt/opengnsys/log RepoMan: exporta /opt/opengnsys/images -> Client: importa /opt/opengnsys/images -- cgit v1.2.3-18-g5258 From 36b1c4de92b3472adc270be9ccec4a4c9d826628 Mon Sep 17 00:00:00 2001 From: adv Date: Mon, 11 Apr 2011 08:57:49 +0000 Subject: version1.0 ticket:311 #311 validando formulario aulas git-svn-id: https://opengnsys.es/svn/branches/version1.0@1778 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../javascripts/esp/propiedades_aulas_esp.js | 9 +++++++- .../idiomas/php/cat/propietats_aules_cat.txt | 24 +++++++++++++++++----- .../idiomas/php/eng/propiedades_aulas_eng.php | 16 ++++++++++++++- .../idiomas/php/esp/propiedades_aulas_esp.php | 10 +++++++-- admin/WebConsole/jscripts/propiedades_aulas.js | 11 ++++++++-- admin/WebConsole/jscripts/validators.js | 11 ++++++++++ admin/WebConsole/propiedades/propiedades_aulas.php | 20 +++++++++--------- 7 files changed, 80 insertions(+), 21 deletions(-) diff --git a/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js b/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js index b1d2f93c..8f510866 100644 --- a/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js +++ b/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js @@ -8,5 +8,12 @@ TbMsg[0]="Debe introducir un nombre para este aula"; TbMsg[1]="Debe introducir un número de puestos para este aula"; TbMsg[2]="ATENCIÓN.- Este aula contiene grupos de ordenadores u ordenadores. Si los elimina, eliminará también éstos. ¿ Está seguro ?"; TbMsg[3]="La hora de comienzo del intervalo de reservas debe ser menor que la hora final"; -TbMsg[4]="La velocidad de multicast no es válida, sólo números"; +TbMsg[4]="La direccion del router no es valida"; +TbMsg[5]="La mascara de red no es valida"; +TbMsg[6]="El modo de p2p no es valido"; +TbMsg[7]="El tiempo (segundos ) de semillero despues de la descarga p2p no es valida"; +TbMsg[8]="Modo multicast no es valido"; +TbMsg[9]="La dirección multicast no es valida"; +TbMsg[10]="El puerto de multicast no es valida"; +TbMsg[11]="La velocidad de multicast no es válida, sólo números"; diff --git a/admin/WebConsole/idiomas/php/cat/propietats_aules_cat.txt b/admin/WebConsole/idiomas/php/cat/propietats_aules_cat.txt index 85c5a06b..a996ec18 100644 --- a/admin/WebConsole/idiomas/php/cat/propietats_aules_cat.txt +++ b/admin/WebConsole/idiomas/php/cat/propietats_aules_cat.txt @@ -2,17 +2,17 @@ //________________________________________________________________________________________________________ // // Fitxer d'idiomes php: propiedades_aulas_esp.php -// Idioma: Catal +// Idioma: Catala //________________________________________________________________________________________________________ $TbMsg=array(); -$TbMsg[0]="Sense Opci"; +$TbMsg[0]="Sense Opcio"; $TbMsg[1]="Insertar"; $TbMsg[2]="Modificar"; $TbMsg[3]="Eliminar"; -$TbMsg[4]="Gesti Aules"; +$TbMsg[4]="Gestio Aules"; $TbMsg[5]="Nom"; -$TbMsg[6]="Ubicaci"; -$TbMsg[7]="Cann"; +$TbMsg[6]="Ubicacio"; +$TbMsg[7]="Canon"; $TbMsg[8]="Pissarra"; $TbMsg[9]="Puestos"; $TbMsg[10]="Url Imatge"; @@ -21,4 +21,18 @@ $TbMsg[12]="Comentaris"; $TbMsg[13]="Intervals"; $TbMsg[14]="Hora desde:"; $TbMsg[15]="Hora fins:"; +$TbMsg[16]="Repositorio"; +$TbMsg[17]="Perfil Hardware"; +$TbMsg[18]="Propietat pert tot els ordinadors"; +$TbMsg[19]="Tamaño caché (KB)"; +$TbMsg[20]="Autoexec"; +$TbMsg[21]=""; +$TbMsg[22]="Modo Multicast"; +$TbMsg[23]="IP Multicast"; +$TbMsg[24]="Port Multicast"; +$TbMsg[25]="Velocidat Multicast"; +$TbMsg[26]="Modo P2P -semillero durante la descarga-"; +$TbMsg[27]="Temp P2P -semillero despres de descarga-"; +$TbMsg[28]="adresa gateway del aule"; +$TbMsg[29]="Mascara de la xarxa del aule"; ?> \ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php b/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php index 795578ba..1a82032c 100644 --- a/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php +++ b/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php @@ -2,7 +2,7 @@ //________________________________________________________________________________________________________ // // Fichero de idiomas php: propiedades_aulas_eng.php -// Idioma: Ings +// Idioma: Ing�s //________________________________________________________________________________________________________ $TbMsg=array(); $TbMsg[0]="No Option"; @@ -21,5 +21,19 @@ $TbMsg[12]="Comments"; $TbMsg[13]="Intervals"; $TbMsg[14]="Begin reserves"; $TbMsg[15]="End reserves"; +$TbMsg[16]="Repository"; +$TbMsg[17]="Hardware profile"; +$TbMsg[18]="Properties for all computers in this class"; +$TbMsg[19]="Cache Size (KB)"; +$TbMsg[20]="Autoexec"; +$TbMsg[21]=""; +$TbMsg[22]="Multicast mode"; +$TbMsg[23]="Multicast IP address"; +$TbMsg[24]="Multicast port"; +$TbMsg[25]="Multicast bandwith"; +$TbMsg[26]="P2P mode -seeder while downloading"; +$TbMsg[27]="P2P time -seeder time(s) after download-"; +$TbMsg[28]="Gateway"; +$TbMsg[29]="Netmask"; ?> \ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php index 65fb75c8..f9e9778f 100644 --- a/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php +++ b/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php @@ -29,6 +29,12 @@ $TbMsg[20]="Autoexec"; $TbMsg[21]=""; $TbMsg[22]="Modo Multicast"; $TbMsg[23]="IP Multicast"; -$TbMsg[24]="Puerto"; -$TbMsg[25]="Velocidad"; +$TbMsg[24]="Puerto Multicast"; +$TbMsg[25]="Velocidad Multicast"; +$TbMsg[26]="Modo P2P -semillero durante la descarga-"; +$TbMsg[27]="Tiempo P2P -semillero despues de descarga-"; +$TbMsg[28]="Direccion gateway del aula"; +$TbMsg[29]="Mascara de red del aula"; + + ?> diff --git a/admin/WebConsole/jscripts/propiedades_aulas.js b/admin/WebConsole/jscripts/propiedades_aulas.js index 86b13256..61126a6f 100644 --- a/admin/WebConsole/jscripts/propiedades_aulas.js +++ b/admin/WebConsole/jscripts/propiedades_aulas.js @@ -102,8 +102,15 @@ function comprobar_datos(){ var form = document.fdatos; return validate (form.nombreaula, validate_notnull, 0) && - validate (form.puestos, validate_notnull, 1) && - validate (form.velmul, validate_number, 4); + validate (form.puestos, validate_number_notnull, 1) && + validate (form.router, validate_ipadress_notnull, 4) && + validate (form.netmask, validate_ipadress_notnull, 5) && + validate (form.modp2p, validate_notnull, 6) && + validate (form.timep2p, validate_number_notnull, 7) && + validate (form.modomul, validate_notnull, 8) && + validate (form.ipmul, validate_ipadress_notnull, 9) && + validate (form.pormul, validate_notnull, 10) && + validate (form.velmul, validate_number_notnull, 11); return(true); } diff --git a/admin/WebConsole/jscripts/validators.js b/admin/WebConsole/jscripts/validators.js index f99f9ff7..4fc91c75 100644 --- a/admin/WebConsole/jscripts/validators.js +++ b/admin/WebConsole/jscripts/validators.js @@ -42,6 +42,17 @@ function validate_alphanum_notnull(value) { return validate_number(value) && validate_notnull(value); } + +function validate_ipadress(value) { + return validate_expr(value, "^\\d+\\.\\d+\.\\d+\\.\\d+$"); +} + +function validate_ipadress_notnull(value) { + return validate_ipadress(value) && validate_notnull(value); +} + + + function validation_highlight(field) { field.focus(); field.style.border = "1px solid red"; diff --git a/admin/WebConsole/propiedades/propiedades_aulas.php b/admin/WebConsole/propiedades/propiedades_aulas.php index e96676b4..c55c7abf 100644 --- a/admin/WebConsole/propiedades/propiedades_aulas.php +++ b/admin/WebConsole/propiedades/propiedades_aulas.php @@ -168,9 +168,9 @@ else ?> - + - Router   +   '.$router.''; @@ -178,9 +178,9 @@ else echo ''; ?> - + - Netmask   +   '.$netmask.''; @@ -190,25 +190,25 @@ else - + - P2P Modo:   +   '.$modp2p.''; else echo ''; - $p2pmetodos="seeder=seeder".chr(13); + $p2pmetodos="peer=peer".chr(13); $p2pmetodos.="leecher=leecher".chr(13); - $p2pmetodos.="peer=peer"; + $p2pmetodos.="seeder=seeder"; echo HTMLCTESELECT($p2pmetodos,"modp2p","estilodesple","",$modp2p,100).''; ?> - + - P2P tiempo (seg) para semilla:   +   '.$timep2p.''; -- cgit v1.2.3-18-g5258 From b1fd551816b5e5c6a1685c562fcbf740ea35617b Mon Sep 17 00:00:00 2001 From: adv Date: Mon, 11 Apr 2011 09:08:54 +0000 Subject: version 1.0 ticket:311 #311 dando valores por defecto a la tabla BD aulas git-svn-id: https://opengnsys.es/svn/branches/version1.0@1779 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/Database/ogAdmBD-1.0pre-1.0.sql | 9 +++++++-- admin/Database/ogAdmBD.sql | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/admin/Database/ogAdmBD-1.0pre-1.0.sql b/admin/Database/ogAdmBD-1.0pre-1.0.sql index 5ef410d1..4fd30bbb 100644 --- a/admin/Database/ogAdmBD-1.0pre-1.0.sql +++ b/admin/Database/ogAdmBD-1.0pre-1.0.sql @@ -5,12 +5,17 @@ SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -UPDATE `ogAdmBD`.`comandos` SET `activo` = '0' WHERE `comandos`.`idcomando` =10; +ALTER TABLE `aulas` CHANGE `modp2p` `modp2p` ENUM( 'seeder', 'peer', 'leecher' ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'peer'; + +ALTER TABLE `aulas` CHANGE `velmul` `velmul` SMALLINT( 6 ) NOT NULL DEFAULT '70'; + + ALTER TABLE `asistentes` DROP PRIMARY KEY , ADD PRIMARY KEY ( `idcomando` , `descripcion` ) ; +UPDATE `ogAdmBD`.`comandos` SET `activo` = '0' WHERE `comandos`.`idcomando` =10; -UPDATE `ogAdmBD`.`asistentes` SET `idcomando` = '8' ; \ No newline at end of file +UPDATE `ogAdmBD`.`asistentes` SET `idcomando` = '8' ; diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql index 15464fff..cfcd2987 100644 --- a/admin/Database/ogAdmBD.sql +++ b/admin/Database/ogAdmBD.sql @@ -99,11 +99,11 @@ CREATE TABLE IF NOT EXISTS `aulas` ( `modomul` tinyint(4) NOT NULL, `ipmul` varchar(16) NOT NULL, `pormul` int(11) NOT NULL, - `velmul` smallint(6) NOT NULL, + `velmul` smallint(6) NOT NULL DEFAULT '70', `router` VARCHAR( 30 ), `netmask` VARCHAR( 30 ), `dns` VARCHAR (30), - `modp2p` enum('seeder','peer','leecher') DEFAULT 'seeder', + `modp2p` enum('seeder','peer','leecher') DEFAULT 'peer', `timep2p` INT(11) NOT NULL DEFAULT '60', PRIMARY KEY (`idaula`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- cgit v1.2.3-18-g5258 From 034f607ded4bf4d1cf22593762db52d52ad14705 Mon Sep 17 00:00:00 2001 From: ramon Date: Mon, 11 Apr 2011 14:51:55 +0000 Subject: Versión 1.0: Mejoras en el script de actualización: * Actualización de la estructura de la base de datos. * Actualizar correctamente los ficheros del servidor. * Secuencia correcta del proceso de actualización. Modificado #361, #359. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1804 a21b9725-9963-47de-94b9-378ad31fedc9 --- doc/CHANGELOG.es.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt index 6e8bc42d..1f539bfc 100644 --- a/doc/CHANGELOG.es.txt +++ b/doc/CHANGELOG.es.txt @@ -27,6 +27,7 @@ Tickets resueltos en módulo OpenGnSys Client: #345 Importar "runtest" para la versión 1.0 (mejora) #334 OgClient - admin problemas al escribir en el repo #336 Regenerar el cliente ogclient-1.0-lucid-32bit.tar.gz +#360 Importar herramientas de generación del cliente desde la rama ogClient (mejora) Tickets resueltos en módulo OpenGnSys Server: #350 ogAdmAgent no se inicia @@ -56,8 +57,7 @@ Tickets resueltos en módulo OpenGnSys Installer: #313 Instalador: no genera la estrucutra para el cliente #316 Error en opengnsys_update.sh al copiar archivos de servicios #335 Error en opengnsys_update.sh al descomprimir cliente - -Tickets genéricos resueltos: +#361 Actualizador debe aplicar cambios en la estructura de base de datos Lista de cambios incluidos en OpenGnSys 0.10 -- cgit v1.2.3-18-g5258 From 295b4abd4dd67c98cdda47f87d2d4c8d900dfa55 Mon Sep 17 00:00:00 2001 From: ramon Date: Mon, 11 Apr 2011 14:52:38 +0000 Subject: Versión 1.0: Mejoras en el script de actualización: * Actualización de la estructura de la base de datos. * Actualizar correctamente los ficheros del servidor. * Secuencia correcta del proceso de actualización. Modificado #361, #359. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1809 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_installer.sh | 6 +-- installer/opengnsys_update.sh | 85 ++++++++++++++++++++++++++++++++++------ 2 files changed, 76 insertions(+), 15 deletions(-) diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 552bc0f6..944f9c84 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -1291,10 +1291,10 @@ else # Si existe fichero ogBDAdmin-VersLocal-VersRepo.sql; aplicar cambios. INSTVERSION=$(awk '{print $2}' $INSTALL_TARGET/doc/VERSION.txt) REPOVERSION=$(awk '{print $2}' $WORKDIR/opengnsys/doc/VERSION.txt) - OPENGNSYS_DB_UPDADE_FILE="opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql" - if [ -f $WORKDIR/$OPENGNSYS_DB_UPDADE_FILE ]; then + OPENGNSYS_DB_UPDATE_FILE="opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql" + if [ -f $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE ]; then echoAndLog "Updating tables from version $INSTVERSION to $REPOVERSION" - mysqlImportSqlFileToDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_UPDADE_FILE + mysqlImportSqlFileToDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE else echoAndLog "Database unchanged." fi diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 5640be8c..7e4e72bd 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -12,6 +12,15 @@ #*/ +#### AVISO: Editar configuración de acceso por defecto a la Base de Datos. +OPENGNSYS_DATABASE="ogAdmBD" # Nombre de la base datos +OPENGNSYS_DBUSER="usuog" # Usuario de acceso +OPENGNSYS_DBPASSWORD="passusuog" # Clave del usuario + +#### AVISO: NO Editar variables de acceso desde el cliente +OPENGNSYS_CLIENTUSER="opengnsys" # Usuario Samba + + # Sólo ejecutable por usuario root if [ "$(whoami)" != 'root' ] then @@ -41,9 +50,10 @@ LOG_FILE=/tmp/opengnsys_update.log ##################################################################### ####### Algunas funciones útiles de propósito general: ##################################################################### + function getDateTime() { - echo `date +%Y%m%d-%H%M%S` + date "+%Y%m%d-%H%M%S" } # Escribe a fichero y muestra por pantalla @@ -111,6 +121,46 @@ function restoreFile() } +##################################################################### +####### Funciones de acceso a base de datos +##################################################################### + +# Actualizar la base datos +function importSqlFile() +{ + if [ $# -ne 4 ]; then + errorAndLog "${FNCNAME}(): invalid number of parameters" + exit 1 + fi + + local dbuser="$1" + local dbpassword="$2" + local database="$3" + local sqlfile="$4" + local tmpfile=$(mktemp) + local status + + if [ ! -r $sqlfile ]; then + errorAndLog "${FUNCNAME}(): Unable to read $sqlfile!!" + return 1 + fi + + echoAndLog "${FUNCNAME}(): importing SQL file to ${database}..." + chmod 600 $tmpfile + sed -e "s/SERVERIP/$SERVERIP/g" -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \ + -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" $sqlfile > $tmpfile + mysql -u$dbuser -p"$dbpassword" --default-character-set=utf8 "$database" < $tmpfile + status=$? + rm -f $tmpfile + if [ $status -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error importing $sqlfile in database $database" + return 1 + fi + echoAndLog "${FUNCNAME}(): file imported to database $database" + return 0 +} + + ##################################################################### ####### Funciones de instalación de paquetes ##################################################################### @@ -207,7 +257,7 @@ function updateServicesStart(){ } # Actualizar cliente OpenGnSys -function openGnsysCopyClientFiles() +function updateClientFiles() { local hayErrores=0 @@ -272,7 +322,7 @@ function updateInterfaceAdm () exit 1 fi chmod -R +x $INSTALL_TARGET/client/interfaceAdm - chown root:root $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso + chown :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso echoAndLog "${FUNCNAME}(): Admin interface updated successfully." } @@ -342,7 +392,7 @@ function updateServerFiles () { pushd $WORKDIR/opengnsys >/dev/null local i for (( i = 0; i < ${#SOURCES[@]}; i++ )); do - rsync --exclude .svn -irplt "${SOURCES[$i]}" "${INSTALL_TARGET}/${TARGETS[$i]}" + rsync --exclude .svn -irplt "${SOURCES[$i]}" $(dirname "${INSTALL_TARGET}/${TARGETS[$i]}") done popd >/dev/null echoAndLog "${FUNCNAME}(): updating cron files" @@ -450,11 +500,11 @@ function updateClient() tar xzvf $TMPFILE -C $INSTALL_TARGET/tftpboot rm -f $TMPFILE # Usar la versión más reciente del Kernel y del Initrd para el cliente. - ln $(ls $INSTALL_TARGET/tftpboot/ogclient/vmlinuz-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz - ln $(ls $INSTALL_TARGET/tftpboot/ogclient/initrd.img-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img + ln -f $(ls $INSTALL_TARGET/tftpboot/ogclient/vmlinuz-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz + ln -f $(ls $INSTALL_TARGET/tftpboot/ogclient/initrd.img-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img # Establecer los permisos. chmod -R 755 $INSTALL_TARGET/tftpboot/ogclient - chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/tftpboot/ogclient + chown -R :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/tftpboot/ogclient echoAndLog "${FUNCNAME}(): Client update successfully" } @@ -500,17 +550,29 @@ else ln -fs "$(dirname $PROGRAMDIR)" opengnsys fi -# Copiando ficheros complementarios del servidor +# Si existe fichero de actualización de la base de datos; aplicar cambios. +INSTVERSION=$(awk '{print $2}' $INSTALL_TARGET/doc/VERSION.txt) +REPOVERSION=$(awk '{print $2}' $WORKDIR/opengnsys/doc/VERSION.txt) +OPENGNSYS_DBUPDATEFILE="$WORKDIR/opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql" +if [ -f $OPENGNSYS_DBUPDATEFILE ]; then + echoAndLog "Updating tables from version $INSTVERSION to $REPOVERSION" + importSqlFile $OPENGNSYS_DBUSER $OPENGNSYS_DBPASSWORD $OPENGNSYS_DATABASE $OPENGNSYS_DBUPDATEFILE +else + echoAndLog "Database unchanged." +fi + +# Actualizar ficheros complementarios del servidor updateServerFiles if [ $? -ne 0 ]; then errorAndLog "Error updating OpenGnSys Server files" exit 1 fi -# Actualizando cliente -openGnsysCopyClientFiles +# Actualizar ficheros del cliente +updateClientFiles +updateInterfaceAdm -# Copiando paqinas web +# Actualizar páqinas web updateWebFiles if [ $? -ne 0 ]; then errorAndLog "Error updating OpenGnSys Web Admin files" @@ -528,7 +590,6 @@ if [ $? -ne 0 ]; then errorAndLog "Error updating clients" exit 1 fi -updateInterfaceAdm # Actualizamos el fichero que arranca los servicios de OpenGnSys updateServicesStart -- cgit v1.2.3-18-g5258 From b735f11c285461630b27cc1c9f91550488ccf533 Mon Sep 17 00:00:00 2001 From: ramon Date: Mon, 11 Apr 2011 16:32:50 +0000 Subject: Versión 1.0: Tamaño de caché no editable en formulario de propiedades de ordenador (cerrar #359). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1810 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/propiedades/propiedades_ordenadores.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/WebConsole/propiedades/propiedades_ordenadores.php b/admin/WebConsole/propiedades/propiedades_ordenadores.php index 9ae4c1e7..69f44b4c 100644 --- a/admin/WebConsole/propiedades/propiedades_ordenadores.php +++ b/admin/WebConsole/propiedades/propiedades_ordenadores.php @@ -149,7 +149,7 @@ if ($opcion!=$op_alta){ if ($opcion==$op_eliminacion) echo ''.$cache.''; else - echo ''; + echo ''; ?> -- cgit v1.2.3-18-g5258 From 81f49456fba672b8f79c93713591332ba487419a Mon Sep 17 00:00:00 2001 From: adv Date: Mon, 11 Apr 2011 16:56:35 +0000 Subject: version1.0 asistente->CloneRemote usando clase adophp #306 git-svn-id: https://opengnsys.es/svn/branches/version1.0@1811 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../asistentes/formCloneRemotePartition.php | 2 +- admin/WebConsole/asistentes/xajax.common.php | 4 +- admin/WebConsole/asistentes/xajax.server.php | 115 +++++++++------------ 3 files changed, 50 insertions(+), 71 deletions(-) diff --git a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php index f7a3d3db..819edd1d 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php @@ -4,7 +4,7 @@ Elige equipo MASTER: - diff --git a/admin/WebConsole/asistentes/xajax.common.php b/admin/WebConsole/asistentes/xajax.common.php index f35e9a44..7a97f2e8 100644 --- a/admin/WebConsole/asistentes/xajax.common.php +++ b/admin/WebConsole/asistentes/xajax.common.php @@ -2,6 +2,6 @@ //importando las librerias XAJAX require ("/opt/opengnsys/www/xajax/xajax_core/xajax.inc.php"); $xajax = new xajax("xajax.server.php"); -//asociamos la funcin creada en index.server.php al objeto XAJAX -$xajax->registerFunction("ListarParticionesXip"); +//asociamos la funci�n creada en index.server.php al objeto XAJAX +$xajax->registerFunction("ListarOrigenMaster"); ?> \ No newline at end of file diff --git a/admin/WebConsole/asistentes/xajax.server.php b/admin/WebConsole/asistentes/xajax.server.php index 5d378a7b..e931f9e1 100644 --- a/admin/WebConsole/asistentes/xajax.server.php +++ b/admin/WebConsole/asistentes/xajax.server.php @@ -3,38 +3,24 @@ require ("xajax.common.php"); +//función que lista las Particiones segun la IP elegida +function ListarOrigenMaster($ip){ -//función que lista las Particiones segun la IP elegida -function ListarParticionesXip($ip){ -include_once("../includes/ctrlacc.php"); -include_once("../clases/AdoPhp.php"); -include_once("../includes/constantes.php"); -include_once("../includes/comunes.php"); -include_once("../includes/CreaComando.php"); -include_once("../includes/HTMLSELECT.php"); -include_once("../idiomas/php/".$idioma."/comandos/ejecutarscripts_".$idioma.".php"); - - - -$cmd=CreaComando($cadenaconexion); -define ("SQL_HOST", "localhost"); -define("SQL_HOST_LOCAL", "localhost"); -define ("SQL_USER", "usuog"); -define ("SQL_PASS", "passusuog"); -define ("DATABASE", "ogAdmBD"); -$conexion=mysql_connect(SQL_HOST, SQL_USER, SQL_PASS) or die ('no se ha podido conectar con mysql'); -mysql_select_db(DATABASE, $conexion); - + include_once("../includes/ctrlacc.php"); + include_once("../clases/AdoPhp.php"); + include_once("../includes/constantes.php"); + include_once("../includes/comunes.php"); + include_once("../includes/CreaComando.php"); + include_once("../includes/HTMLSELECT.php"); - $objResponse = new xajaxResponse(); - //instanciamos el objeto para la respuesta AJAX - //$objResponse->alert("Este equipo tiene ".$cantRegistros." particiones clonables."); - //ISO-8859-1 significa que los caracteres latinos como la ñ y los acentos seran tomados en cuenta - //$sql=sprintf('select xxxxxx where id=%d',$ip); - //$sql='SELECT ordenadores_particiones.numpar,nombresos.nombreso FROM ordenadores_particiones INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar INNER JOIN nombresos ON ordenadores_particiones.idnombreso=nombresos.idnombreso WHERE ordenadores_particiones.idordenador=' .$ip . ' AND tipospar.clonable>0 AND ordenadores_particiones.idnombreso>0 ORDER BY ordenadores_particiones.numpar'; + //instanciamos el objeto para la respuesta AJAX + $objResponse = new xajaxResponse(); - $sql='SELECT ordenadores_particiones.numpar,nombresos.nombreso + $SelectHtml=" "; + $cmd=CreaComando($cadenaconexion); + + $cmd->texto='SELECT ordenadores_particiones.numpar as PART,nombresos.nombreso as OS FROM ordenadores_particiones INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar INNER JOIN nombresos ON ordenadores_particiones.idnombreso=nombresos.idnombreso INNER JOIN ordenadores ON ordenadores_particiones.idordenador=ordenadores.idordenador @@ -42,50 +28,43 @@ mysql_select_db(DATABASE, $conexion); AND tipospar.clonable>0 AND ordenadores_particiones.idnombreso>0 ORDER BY ordenadores_particiones.numpar'; - //$objResponse->alert("Consulta ".$sql." ."); - - - $element=" "; - //$rs=new Recordset; - //$rs->Comando=&$cmd; - - - - - - //$element=''; - //} - + + $rs=new Recordset; + $rs->Comando=&$cmd; - $rsParticiones=mysql_query($sql); -$cantRegistros=mysql_num_rows($rsParticiones); + - $element=''; //variable donde guardaremos el elemento del formulario que luego se mostrara mediante AJAX - // - if($cantRegistros>0){ // Si existen registros entonces armamos la cabecera de los elementos del formulario - $element=' '; + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.=''; + $rs->Siguiente(); + } } - $element.=''; - } - //asignando el contenido de la varabiale $element al div que esta en la paquina inicial - //innerHTML reemplaza el contenido HTML por otro - $objResponse->assign("divListado","innerHTML",$element); - //mostramos un alert -//$objResponse->alert("Este equipo tiene ".$cantRegistros." particiones clonables."); + else + { + $objResponse->alert("Este equipo No tiene particiones clonables."); + } + $rs->Cerrar(); + } + $SelectHtml.= ''; + + + //asignando el contenido de la varabiale $SelectHTML al div que esta en la paquina inicial + $objResponse->assign("divListado","innerHTML",$SelectHtml); + + return $objResponse; //retornamos la respuesta AJAX } -$xajax->processRequest(); //procesando cualquier petición AJAX +$xajax->processRequest(); //procesando cualquier petición AJAX + + + + ?> \ No newline at end of file -- cgit v1.2.3-18-g5258 From 1ec9b7a756d2b67a9e38b9a16a9ed43cc31632a5 Mon Sep 17 00:00:00 2001 From: adv Date: Mon, 11 Apr 2011 19:08:06 +0000 Subject: version1.0 asistente particionado: ticket:363 #363 tamanio cache modificable git-svn-id: https://opengnsys.es/svn/branches/version1.0@1818 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/asistentes/AsistenteParticionado.php | 17 +++++++++++------ .../asistentes/includes/asistentes/formParticionado.php | 10 ++++++---- admin/WebConsole/asistentes/jscripts/asistentes.js | 12 ++++++++++-- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/admin/WebConsole/asistentes/AsistenteParticionado.php b/admin/WebConsole/asistentes/AsistenteParticionado.php index b48e0cf5..de1b5f72 100644 --- a/admin/WebConsole/asistentes/AsistenteParticionado.php +++ b/admin/WebConsole/asistentes/AsistenteParticionado.php @@ -20,9 +20,7 @@ include_once("../includes/comunes.php"); include_once("../includes/CreaComando.php"); include_once("../includes/HTMLSELECT.php"); include_once("../idiomas/php/".$idioma."/comandos/ejecutarscripts_".$idioma.".php"); - - - +include_once("../idiomas/php/".$idioma."/configuraciones_".$idioma.".php"); include_once("../includes/HTMLCTESELECT.php"); include_once("../includes/TomaDato.php"); include_once("../includes/ConfiguracionesParticiones.php"); @@ -86,9 +84,16 @@ switch($ambito){ $textambito=$TbMsg[4]; break; } - echo '

'.$descricomando.' 
'; - echo '   - '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + + //echo '

'.$descricomando.' 
'; + //echo '   + // '.$TbMsg[6].': '.$textambito.','.$nombreambito.'  

'; + + if(!$swp){ + echo '

'.$descricomando.' 
'; + echo '  '.$TbMsg[1].' + : '.$textambito.'  

'; + } $sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil; pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false); diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php index dba79047..f2f08bac 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php @@ -3,7 +3,7 @@ Particion Tipo - Tamano + Tamano KB @@ -67,9 +67,11 @@
Particion 4 - - + + - +
+ \ No newline at end of file diff --git a/admin/WebConsole/asistentes/jscripts/asistentes.js b/admin/WebConsole/asistentes/jscripts/asistentes.js index 2ac48d9c..5c5f9c40 100644 --- a/admin/WebConsole/asistentes/jscripts/asistentes.js +++ b/admin/WebConsole/asistentes/jscripts/asistentes.js @@ -79,8 +79,16 @@ precache="ogUnmountCache \n ogUnmountAll 1 \n sizecache=`ogGetPartitionSize 1 4` } else { -precache="ogUnmountCache \n ogUnmountAll 1 \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache " + form.size4.value + " "; -//alert(precache); + if (form.size4.value == "CUSTOM") + { + cachesize = form.size4custom.value; + } + else + { + cachesize = form.size4.value; + } + precache="ogUnmountCache \n ogUnmountAll 1 \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache " + cachesize + " "; + //alert(precache); } -- cgit v1.2.3-18-g5258 From f1de548fac705acc3f6da4620482d5f47ea69c6d Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 12 Apr 2011 07:54:43 +0000 Subject: Versión 1.0: Asistente particionado marca partición vacía de tamaño 0 y corregidos algunos mensjaes (modificado #364). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1819 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../includes/asistentes/formParticionado.php | 22 +++++++++++----------- admin/WebConsole/asistentes/jscripts/asistentes.js | 6 +++--- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php index f2f08bac..cbeb642b 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php @@ -1,13 +1,13 @@ - Particion + Partición Tipo - Tamano KB + Tamaño KB -
Particion 1 +
Partición 1
- + -
Particion 2 +
Partición 2
- + -
Particion 3 +
Partición 3
- + -
Particion 4 +
Partición 4
- \ No newline at end of file + diff --git a/admin/WebConsole/asistentes/jscripts/asistentes.js b/admin/WebConsole/asistentes/jscripts/asistentes.js index 5c5f9c40..3dd08014 100644 --- a/admin/WebConsole/asistentes/jscripts/asistentes.js +++ b/admin/WebConsole/asistentes/jscripts/asistentes.js @@ -50,7 +50,7 @@ if (form.check1.checked) { } else { - value1 = "EMPTY:1" + value1 = "EMPTY:0" } if (form.check2.checked) { if (form.part2.value == "CUSTOM" ) {value2 = form.part2custom.value} @@ -60,7 +60,7 @@ if (form.check2.checked) { } else { - value2 = "EMPTY:1" + value2 = "EMPTY:0" } if (form.check3.checked) { if (form.part3.value == "CUSTOM" ) {value3 = form.part3custom.value} @@ -70,7 +70,7 @@ if (form.check3.checked) { } else { - value3 = "EMPTY:1" + value3 = "EMPTY:0" } if (form.size4.value == "0") { -- cgit v1.2.3-18-g5258 From 42ac964a79e461f8f97f7fa426b06820112076ae Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 12 Apr 2011 09:18:50 +0000 Subject: Versión 1.0: modificado formulario del asistente de particionado para recuperar valores por defecto (cerrar #364). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1823 a21b9725-9963-47de-94b9-378ad31fedc9 --- .../includes/asistentes/formParticionado.php | 26 +++++++++++----------- doc/CHANGELOG.es.txt | 24 ++++++++++++-------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php index cbeb642b..48476243 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php @@ -7,9 +7,9 @@ -
Partición 1 +
Partición 1 - @@ -18,7 +18,7 @@ - @@ -26,8 +26,9 @@ -
Partición 2 -
Partición 2 + @@ -36,7 +37,7 @@ - @@ -44,9 +45,9 @@ - -
Partición 3 -
Partición 3 + @@ -55,7 +56,7 @@ - @@ -64,10 +65,9 @@ - -
Partición 4 +
Partición 4 - diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt index 1f539bfc..6f0ac21a 100644 --- a/doc/CHANGELOG.es.txt +++ b/doc/CHANGELOG.es.txt @@ -23,9 +23,9 @@ Tickets resueltos en módulo OpenGnSys Client: #243 Browser incluye terminal con letra monospace y barra de estado en UTF-8 (mejora) #303 Integracion proceso arranque cliente versión 1.0 #304 Integracion interface adm versión 1.0 -#314 smb punto acceso 2nd FileSystem del cliente [tftpboot] [ogboot] +#314 SMB punto acceso 2nd FileSystem del cliente [tftpboot] [ogboot] #345 Importar "runtest" para la versión 1.0 (mejora) -#334 OgClient - admin problemas al escribir en el repo +#334 OgClient en modo admin: problemas al escribir en el repo #336 Regenerar el cliente ogclient-1.0-lucid-32bit.tar.gz #360 Importar herramientas de generación del cliente desde la rama ogClient (mejora) @@ -34,22 +34,26 @@ Tickets resueltos en módulo OpenGnSys Server: Tickets resueltos en módulo OpenGnSys Repository Server: #188 Al restaurar por torrent el BitFile no se crea siempre -#300 integracion bin del repo +#300 Integración binarios del repo Tickets resueltos en módulo OpenGnSys Web Admin Console: #126 Integración de consola Web con bittorent (mejora) #138 Configurar parámetros de red en cliente #185 Aproximación a la gestión log de los clientes (mejora) #248 La consola web no muestra datos del repositorio hasta que no se asigna -#258 Consola Web: Error al eliminar un perfil de software -#266 Consola web: Información unidades de la caché -#268 Consola Web: error texto de formularios -#301 Integracion modulos web versión 1.0 -#302 Integracion base de datos version 1.0 +#258 Error al eliminar un perfil de software +#266 Información unidades en tamaño de la caché +#268 Erratas en texto de formularios +#301 Integración modulos web versión 1.0 +#302 Integración base de datos version 1.0 +#306 Asistente Clonacion Particiones Remotas: no genera codigo #310 Instalar: no genera las propiedades del repositorio por defecto en la consola (duplicado de #248) #338 Validación de formularios de la consola web #339 Añadir opción de apagado en cliente sin menú asociado (mejora) -#349 Boton de confirmacion en gestor de arranque +#349 Botón de confirmación en gestor de arranque +#359 Ocultar los comandos inacabados en la consola web +#363 Asistente particionado no permite valores personalizados para la caché +#364 Asistente particionado no recupera valores iniciales si se pulsa en personalizar Tickets resueltos en módulo OpenGnSys Installer: #299 Instalador para la versión 1.0 @@ -59,6 +63,8 @@ Tickets resueltos en módulo OpenGnSys Installer: #335 Error en opengnsys_update.sh al descomprimir cliente #361 Actualizador debe aplicar cambios en la estructura de base de datos +Tickets genéricos resueltos: + Lista de cambios incluidos en OpenGnSys 0.10 -------------------------------------------- -- cgit v1.2.3-18-g5258 From db5a53558d9c6e04b450bc3e0f0f2cbae57d1422 Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 12 Apr 2011 15:25:59 +0000 Subject: Versión 1.0: Actaulizado fichero CHANGELOG.es.txt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1826 a21b9725-9963-47de-94b9-378ad31fedc9 --- doc/CHANGELOG.es.txt | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt index 6f0ac21a..c88aa12c 100644 --- a/doc/CHANGELOG.es.txt +++ b/doc/CHANGELOG.es.txt @@ -6,10 +6,13 @@ Lista de cambios incluidos en OpenGnSys 1.0 ------------------------------------------- Tickets resueltos en módulo OpenGnSys Cloning Engine: +#64 Selección de aplicaciones de clonación +#264 Error al crear la caché +#286 Parámetro debug para el engine #291 Creación de imagenes desde el modo user -#298 Tratamientos de bloqueos de imágenes para solucionar problemas de concurrencia +#298 Tratamientos de bloqueos de imágenes para solucionar problemas de concurrencia (mejora) #305 Integración engine version 1.0 -#309 Integración create/restoreImage Trunk y Testing: .img +#309 Integración create/restoreImage Trunk y Testing: extensión .img #337 Scripts cliente: reboot|poweroff sleep antes de llamar a Busybox (no se resolverá) #342 ogGetImageInfo() Partclone size MB GB #353 Bloqueos: fallos en la detección en ogCreateImage, ogRestoreImage, etc @@ -18,11 +21,16 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine: #358 ogCreateCache e initCache: No comprueba si se está usando la cuarta partición (no se resolverá) Tickets resueltos en módulo OpenGnSys Client: +#93 Gestionar una estructura de directorios Linux debootstrap para enlazarlo al Initrd #131 Generar paquetes deb para el cliente (no se resolverá) +#162 Optimizar el uso del fichero-disco con particiones para su uso en entorno virtualizado (mejora) #163 Incluir en el cliente la clave autorizada rsa ssh del servidor +#189 Añadir las variables de entorno y Engine en las consolas tty2-tty7 y remotas #243 Browser incluye terminal con letra monospace y barra de estado en UTF-8 (mejora) -#303 Integracion proceso arranque cliente versión 1.0 -#304 Integracion interface adm versión 1.0 +#288 Integración modulo netboot +#294 Integración activacion wol del cliente +#303 Integración proceso arranque cliente versión 1.0 +#304 Integración interface adm versión 1.0 #314 SMB punto acceso 2nd FileSystem del cliente [tftpboot] [ogboot] #345 Importar "runtest" para la versión 1.0 (mejora) #334 OgClient en modo admin: problemas al escribir en el repo @@ -46,7 +54,8 @@ Tickets resueltos en módulo OpenGnSys Web Admin Console: #268 Erratas en texto de formularios #301 Integración modulos web versión 1.0 #302 Integración base de datos version 1.0 -#306 Asistente Clonacion Particiones Remotas: no genera codigo +#306 Asistente Clonacion Particiones Remotas no genera código +#307 Asistente Deploy de Imagenes no muestra nombres de imágenes #310 Instalar: no genera las propiedades del repositorio por defecto en la consola (duplicado de #248) #338 Validación de formularios de la consola web #339 Añadir opción de apagado en cliente sin menú asociado (mejora) @@ -96,6 +105,7 @@ Tickets resueltos en módulo OpenGnSys Repository Server: #184 tracker no gestiona el enjambre Tickets resueltos en módulo OpenGnSys Web Admin Console: +#91 Incorporar equipos desde fichero dhcp.conf #177 Consola web: No se pueden borrar usuarios #190 Error en incorporarordenadores.php #241 El cliente no responde en local con la nueva consola web -- cgit v1.2.3-18-g5258 From 42e31fd63a9edf304b6cefb86a3c78b85dd6bc13 Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 12 Apr 2011 16:42:40 +0000 Subject: Versión 1.0: función {{{ogCreatePartitions}}} soporta tamaño 0 y controla mejor los errores en parámetros. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1829 a21b9725-9963-47de-94b9-378ad31fedc9 --- client/engine/Disk.lib | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index 0609b38e..8f7fd0d7 100755 --- a/client/engine/Disk.lib +++ b/client/engine/Disk.lib @@ -75,14 +75,13 @@ while [ $# -gt 0 ]; do fi # Leer formato de cada parámetro - Tipo:Tamaño TYPE="${1%%:*}" - [ "$TYPE" != "CACHE" ] || ogRaiseError $OG_ERR_FORMAT "$TYPE" || return $? SIZE="${1#*:}" - # Convertir en sectores de 512 B. - SIZE=$(echo $SIZE|awk '{print $0*2}') # (solución error de sintaxis) - [ $SIZE -ne 0 ] || ogRaiseError $OG_ERR_FORMAT "$SIZE" || return $? - # Obtener identificador de tipo de partición. + # Obtener identificador de tipo de partición válido. ID=$(ogFsToId "$TYPE") - [ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$TYPE" || return $? + [ "$TYPE" != "CACHE" -a -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$TYPE" || return $? + # Comprobar tamaño numérico y convertir en sectores de 512 B. + [[ "$SIZE" == *([0-9]) ]] || ogRaiseError $OG_ERR_FORMAT "$SIZE" || return $? + SIZE=$[SIZE*2] # Comprobar si la partición es extendida. if [ $ID = 5 ]; then [ $PART -gt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? -- cgit v1.2.3-18-g5258 From 07c3a59dc8d1e46f6f1a865cb3fd33074ed669c5 Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 12 Apr 2011 18:13:54 +0000 Subject: Versión 1.0: Detectar conectividad de red en instalador y actualizador (modificar #365). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1832 a21b9725-9963-47de-94b9-378ad31fedc9 --- doc/CHANGELOG.es.txt | 1 + installer/opengnsys_installer.sh | 21 +++++++++++++++++++-- installer/opengnsys_update.sh | 23 ++++++++++++++++++++--- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt index c88aa12c..d365c23e 100644 --- a/doc/CHANGELOG.es.txt +++ b/doc/CHANGELOG.es.txt @@ -71,6 +71,7 @@ Tickets resueltos en módulo OpenGnSys Installer: #316 Error en opengnsys_update.sh al copiar archivos de servicios #335 Error en opengnsys_update.sh al descomprimir cliente #361 Actualizador debe aplicar cambios en la estructura de base de datos +#365 Comprobar conectividad http y svn en el instalador Tickets genéricos resueltos: diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 944f9c84..2e74c8ec 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -39,11 +39,12 @@ esac # Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). PROGRAMDIR=$(readlink -e $(dirname "$0")) +OPENGNSYS_SERVER="www.opengnsys.es" if [ -d "$PROGRAMDIR/../installer" ]; then USESVN=0 else USESVN=1 - SVN_URL=http://www.opengnsys.es/svn/branches/version1.0 + SVN_URL=http://$OPENGNSYS_SERVER/svn/branches/version1.0 fi WORKDIR=/tmp/opengnsys_installer @@ -496,6 +497,14 @@ function svnExportCode() ### Detectar red ############################################################ +# Comprobar si existe conexión. +function checkNetworkConnection() +{ + OPENGNSYS_SERVER=${OPENGNSYS_SERVER:-"www.opengnsys.es"} + wget --spider -q $OPENGNSYS_SERVER +} + +# Obtener los parámetros de red de la interfaz por defecto. function getNetworkSettings() { # Variables globales definidas: @@ -1157,7 +1166,15 @@ pushd $WORKDIR # Detener servicios de OpenGnSys, si están activos previamente. [ -f /etc/init.d/opengnsys ] && /etc/init.d/opengnsys stop -# Detectar parámetros de red por defecto +# Comprobar si hay conexión y detectar parámetros de red por defecto. +checkNetworkConnection +if [ $? -ne 0 ]; then + errorAndLog "Error connecting to server. Causes:" + errorAndLog " - Network is unreachable, review devices parameters." + errorAndLog " - You are inside a private network, configure the proxy service." + errorAndLog " - Server is temporally down, try agian later." + exit 1 +fi getNetworkSettings if [ $? -ne 0 ]; then errorAndLog "Error reading default network settings." diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 7e4e72bd..121ab7dd 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -31,11 +31,12 @@ fi # Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). PROGRAMDIR=$(readlink -e $(dirname "$0")) DEPS="build-essential g++-multilib rsync ctorrent samba unzip netpipes debootstrap schroot squashfs-tools" +OPENGNSYS_SERVER="www.opengnsys.es" if [ -d "$PROGRAMDIR/../installer" ]; then USESVN=0 else USESVN=1 - SVN_URL=http://www.opengnsys.es/svn/branches/version1.0 + SVN_URL=http://$OPENGNSYS_SERVER/svn/branches/version1.0 DEPS="$DEPS subversion" fi @@ -218,11 +219,19 @@ function svnExportCode() ### Detectar red ############################################################ +# Comprobar si existe conexión. +function checkNetworkConnection() +{ + OPENGNSYS_SERVER=${OPENGNSYS_SERVER:-"www.opengnsys.es"} + wget --spider -q $OPENGNSYS_SERVER +} + +# Obtener los parámetros de red de la interfaz por defecto. function getNetworkSettings() { local MAINDEV - echoAndLog "getNetworkSettings(): Detecting default network parameters." + echoAndLog "$FUNCNAME(): Detecting default network parameters." MAINDEV=$(ip -o link show up | awk '!/loopback/ {d=d$2} END {sub(/:.*/,"",d); print d}') if [ -z "$MAINDEV" ]; then errorAndLog "${FUNCNAME}(): Network device not detected." @@ -525,7 +534,15 @@ fi pushd $WORKDIR -# Detectar parámetros de red por defecto +# Comprobar si hay conexión y detectar parámetros de red por defecto. +checkNetworkConnection +if [ $? -ne 0 ]; then + errorAndLog "Error connecting to server. Causes:" + errorAndLog " - Network is unreachable, review devices parameters." + errorAndLog " - You are inside a private network, configure the proxy service." + errorAndLog " - Server is temporally down, try agian later." + exit 1 +fi getNetworkSettings if [ $? -ne 0 ]; then errorAndLog "Error reading default network settings." -- cgit v1.2.3-18-g5258 From b6f17266c4a55805d0875415120589bf50fa9e5b Mon Sep 17 00:00:00 2001 From: ramon Date: Tue, 12 Apr 2011 18:32:46 +0000 Subject: Versión 1.0: Instalador y actualizador crean los permisos correctos para el script de interfaz web {{{CambiarAcceso}}} (cerrar #366). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://opengnsys.es/svn/branches/version1.0@1833 a21b9725-9963-47de-94b9-378ad31fedc9 --- installer/opengnsys_installer.sh | 2 +- installer/opengnsys_update.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 2e74c8ec..9d3eb6b9 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -980,7 +980,7 @@ function copyInterfaceAdm () echoAndLog "${FUNCNAME}(): error while copying Administration Interface Folder" hayErrores=1 fi - chown $OPENGNSYS_CLIENT_USER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso + chown $OPENGNSYS_CLIENT_USER:$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso return $hayErrores diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index 121ab7dd..1eb31858 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -331,7 +331,7 @@ function updateInterfaceAdm () exit 1 fi chmod -R +x $INSTALL_TARGET/client/interfaceAdm - chown :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso + chown $OPENGNSYS_CLIENTUSER:$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso chmod 700 $INSTALL_TARGET/client/interfaceAdm/CambiarAcceso echoAndLog "${FUNCNAME}(): Admin interface updated successfully." } -- cgit v1.2.3-18-g5258 From 245332448f25ea197ad18a8c731cbeb38ba80447 Mon Sep 17 00:00:00 2001 From: adv Date: Wed, 13 Apr 2011 13:00:50 +0000 Subject: version1.0 #357 correccion consulta en clone remote git-svn-id: https://opengnsys.es/svn/branches/version1.0@1843 a21b9725-9963-47de-94b9-378ad31fedc9 --- admin/WebConsole/asistentes/xajax.server.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/WebConsole/asistentes/xajax.server.php b/admin/WebConsole/asistentes/xajax.server.php index e931f9e1..9e0fafa6 100644 --- a/admin/WebConsole/asistentes/xajax.server.php +++ b/admin/WebConsole/asistentes/xajax.server.php @@ -40,7 +40,7 @@ function ListarOrigenMaster($ip){ $SelectHtml='