office/texlive: Updated for version 20110705.

Signed-off-by: Niels Horn <niels.horn@slackbuilds.org>
This commit is contained in:
Robby Workman 2011-08-03 22:21:54 -03:00 committed by Niels Horn
parent 7cd2c64739
commit a0ae03b0d3
8 changed files with 180 additions and 147 deletions

View File

@ -1,6 +1,5 @@
.TH EPSTOPDF 1 "30 November 2009"
.\" $Id: epstopdf.1 16245 2009-11-30 01:37:26Z karl $
.\" man page originally by Jim Van Zandt
.TH EPSTOPDF 1 "18 March 2010"
.\" $Id: epstopdf.1 18160 2010-05-09 00:02:00Z karl $
.SH NAME
epstopdf, repstopdf \- convert an EPS file to PDF
.SH SYNOPSIS
@ -16,9 +15,10 @@ result is piped to Ghostscript and a PDF version written.
If the bounding box is not right, of course, there are problems.
.SH OPTIONS
.IP "\fB--outfile\fP=\fIfile\fP"
write result to \fIfile\fP; the default is to construct the output file
name by replacing any extension in the input file with \fI.pdf\fP. If
\fB--nogs\fP or \fB--filter\fP is specified, write to standard output.
write result to \fIfile\fP. If this option is not given, and
\fB--nogs\fP or \fB--filter\fP is specified, write to standard output;
otherwise, the default is to construct the output file name by replacing
any extension in the input file with \fI.pdf\fP.
.IP "\fB--\fP[\fBno\fP]\fBcompress\fP"
use compression (default: on).
.IP "\fB--\fP[\fBno\fP]\fBdebug\fP"
@ -28,9 +28,12 @@ embed fonts (default: on).
.IP "\fB--\fP[\fBno\fP]\fBexact\fP"
scan ExactBoundingBox (default: off).
.IP "\fB--\fP[\fBno\fP]\fBfilter\fP"
read standard input (default: off).
read standard input and (unless \fB--outfile\fP is given) write standard
output(default: off).
.IP "\fB--\fP[\fBno\fP]\fBgs\fP"
run ghostscript (default: on).
run Ghostscript (default: on). With \fB--nogs\fP, output (to standard
output by default) the PostScript that would normally be converted; that
is, the input PostScript as modified by \fBepstopdf\fP.
.IP "\fB--\fP[\fBno\fP]\fBhires\fP"
scan HiresBoundingBox (default: off).
.IP "\fB--gscmd\fP=\fIval\fP"
@ -41,42 +44,45 @@ set image resolution (default: [use gs default])
set AutoRotatePages (default: None); recognized \fIval\fP choices:
None, All, PageByPage. For EPS files, PageByPage is equivalent to All.
.IP "\fB--restricted\fP=\fIval\fP"
turn on restricted mode (default: [on for resptopdf, else off]);
this restricts the values accepted by \fB--gscmd\fP and impose restrictions
on the output file name similar to web2c's openout_any=p.
turn on restricted mode (default: [on for repstopdf, else off]);
this forbids the use of \fB--gscmd\fP and imposes restrictions on the input and
output file names according to the values of openin_any and openout_any (see
the Web2c manual, http://tug.org/web2c).
.IP "\fB--help\fP
display help message and exit
.IP "\fB--version\fP
display version information and exit
.SH EXAMPLES
Examples for producing "test.pdf":
Examples which produce "test.pdf":
.nf
epstopdf test.eps
produce postscript | epstopdf --filter >test.pdf
produce postscript | epstopdf -f -d -o=test.pdf
.fi
Example: look for HiresBoundingBox and produce corrected PostScript:
.nf
epstopdf -d --nogs --hires test.ps >testcorr.ps
.fi
.SH BUGS
The case of "%%BoundingBox: (atend)"
when input is not seekable (e.g., from a pipe) is not supported.
The case of "%%BoundingBox: (atend)" when input is not seekable (e.g.,
from a pipe) is not supported.
.PP
When reporting bugs, please include an input file and command line
options so the problem can be reproduced. Report bugs in
the program or this man page to tex-k@tug.org.
Report bugs in the program or this man page to tex-k@tug.org. When
reporting bugs, please include an input file and the command line
options specified, so the problem can be reproduced.
.SH SEE ALSO
\fBgs\fP(1),
\fBpdfcrop\fP(1).
.PP
The epstopdf LaTeX package, part of the oberdiek bundle, which automates
running this script on the fly under TeX: http://ctan.org/pkg/epstopdf-pkg.
.SH AUTHOR
The script was originally written by Sebastian Rahtz, for Elsevier
Science, with subsequent contributions from Gerben Wierda and many
others. Currently maintained by Karl Berry.
Science, with subsequent contributions from Thomas Esser, Gerben Wierda
and many others. Currently maintained by Karl Berry.
.PP
Man page originally written by Jim Van Zandt.
.PP
epstopdf home page: http://tug.org/epstopdf/
epstopdf home page: http://tug.org/epstopdf.
.PP
You may freely use, modify and/or distribute this file.

Binary file not shown.

Binary file not shown.

View File

@ -2,7 +2,7 @@ eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $
if 0;
use strict;
# $Id: epstopdf.pl 16244 2009-11-30 01:36:08Z karl $
# $Id: epstopdf.pl 18319 2010-05-17 16:34:21Z karl $
# (Copyright lines below.)
#
# Redistribution and use in source and binary forms, with or without
@ -39,14 +39,30 @@ use strict;
# c) the result is piped to Ghostscript and a PDF version written.
#
# It needs a Level 2 PS interpreter.
# If the bounding box is not right, of course, there will be problems.
# If the input bounding box is not right, of course there will be problems.
#
# One thing not allowed for is the case of
# One thing not allowed for: the case of
# "%%BoundingBox: (atend)" when input is not seekable (e.g., from a pipe),
# which is more complicated.
#
# emacs-page
# History
# 2010/05/09 v2.16 (Karl Berry)
# * make --nogs dump edited PostScript to stdout by default
# (report from Reinhard Kotucha).
# 2010/03/19 v2.15 (Karl Berry)
# * let --outfile override --filter again.
# * recognize MSWin64 as well as MSWin32, just in case.
# 2010/03/08 v2.14 (Manuel P\'egouri\'e-Gonnard)
# * In restricted mode, forbid --gscmd (all platforms) and call GS with full
# path relative to self location (Windows).
# 2010/02/26 v2.13 (Karl Berry)
# * New release.
# 2010/02/23 (Manuel P\'egouri\'e-Gonnard)
# * Use kpsewhich for filename validation in restricted mode, both input and
# output. Requires kpathsea 5.1.0 (TL2010), rejects the name with earlier
# versions of kpsewhich.
# * Call external programs with full path on win32 in order to avoid obvious
# attacks with rogue versions of these programs in the current directory.
# 2009/11/27 v2.12 (Karl Berry)
# * Make --filter work again
# 2009/11/25 (Manuel P\'egouri\'e-Gonnard)
@ -133,9 +149,9 @@ use strict;
### program identification
my $program = "epstopdf";
my $ident = '($Id: epstopdf.pl 16244 2009-11-30 01:36:08Z karl $) 2.12';
my $ident = '($Id: epstopdf.pl 18319 2010-05-17 16:34:21Z karl $) 2.16';
my $copyright = <<END_COPYRIGHT ;
Copyright 2009 Karl Berry et al.
Copyright 2009-2010 Karl Berry et al.
Copyright 2002-2009 Gerben Wierda et al.
Copyright 1998-2001 Sebastian Rahtz et al.
License RBSD: Revised BSD <http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5>
@ -144,26 +160,28 @@ There is NO WARRANTY, to the extent permitted by law.
END_COPYRIGHT
my $title = "$program $ident\n";
my $on_windows = $^O =~ /^MSWin/;
my $on_windows_or_cygwin = $on_windows || $^O eq "cygwin";
### ghostscript command name
my $GS = "gs";
$GS = "gswin32c" if $^O eq 'MSWin32';
my $GS = $on_windows ? "gswin32c" : "gs";
### restricted mode
my $restricted = 0;
$restricted = 1 if $0 =~ /repstopdf/;
### options
$::opt_outfile="";
$::opt_autorotate = "None";
$::opt_compress = 1;
$::opt_debug = 0;
$::opt_embed = 1;
$::opt_exact = 0;
$::opt_filter = 0;
$::opt_gs = 1;
$::opt_hires=0;
$::opt_gscmd = "";
$::opt_hires = 0;
$::opt_outfile = "";
$::opt_res = 0;
$::opt_autorotate="None";
### usage
my @bool = ("false", "true");
@ -193,7 +211,7 @@ Options:
For EPS files, PageByPage is equivalent to All
--restricted use restricted mode (default: $bool[$restricted])
Examples for producing 'test.pdf':
Examples producing test.pdf:
* $program test.eps
* produce postscript | $program --filter >test.pdf
* produce postscript | $program -f -d -o=test.pdf
@ -211,40 +229,57 @@ END_OF_USAGE
### process options
use Getopt::Long;
GetOptions (
"help",
"version",
"outfile=s", # \ref{openout_any}
"autorotate=s", # \ref{val_autorotate}
"compress!",
"debug!",
"embed!",
"exact!",
"filter!",
"gs!",
"hires!",
"gscmd=s", # \ref{val_gscmd}
"res=i", # validated by Getopt ('i' specifier)
"autorotate=s", # \ref{val_autorotate}
"help",
"hires!",
"outfile=s", # \ref{openout_any}
"res=i", # validated by getopt ('i' specifier)
"restricted",
"version",
) or die $usage;
### help functions
sub debug {
print STDERR "* @_\n" if $::opt_debug;
}
sub warning {
print STDERR "==> Warning: @_\n";
}
sub error {
die "$title!!! Error: @_\n";
}
sub errorUsage {
die "$usage\n!!! Error: @_\n";
}
sub debug { print STDERR "* @_\n" if $::opt_debug; }
sub warning { print STDERR "==> Warning: @_\n"; }
sub error { die "$title!!! Error: @_\n"; }
sub errorUsage { die "Error: @_ (try --help for more information)\n"; }
### restricted option
$restricted = 1 if $::opt_restricted;
debug "Restricted mode activated" if $restricted;
### safer external commands for Windows in restricted mode
my $kpsewhich = 'kpsewhich';
if ($restricted && $on_windows) {
use File::Basename;
my $mydirname = dirname $0;
# $mydirname is the location of the Perl script
$kpsewhich = "$mydirname/../../../bin/win32/$kpsewhich";
$GS = "$mydirname/../../../tlpkg/tlgs/bin/$GS";
}
debug "kpsewhich command: $kpsewhich";
### check if a name is "safe" according to kpse's open(in|out)_any
# return true if name is ok, false otherwise
sub safe_name
{
my ($mode, $name) = @_;
my $option = "";
$option = '-safe-in-name' if $mode eq 'in';
$option = '-safe-out-name' if $mode eq 'out';
error "Unknown check mode in safe_name(): $mode" unless $option;
my @args = ($kpsewhich, '-progname', 'repstopdf', $option, $name);
my $bad = system {$args[0]} @args;
return ! $bad;
}
### help, version options.
if ($::opt_help) {
print $usage;
@ -257,29 +292,28 @@ if ($::opt_version) {
exit (0);
}
### get input filename
### get input filename (\ref{openin_any} for validation)
my $InputFilename = "";
if ($::opt_filter) {
@ARGV == 0 or
die errorUsage "Input file cannot be used with filter option";
errorUsage "Input file cannot be used with filter option";
debug "Filtering: will read standard input";
} else {
@ARGV > 0 or die errorUsage "Input filename missing";
@ARGV < 2 or die errorUsage "Unknown option or too many input files";
@ARGV > 0 or errorUsage "Input filename missing";
@ARGV < 2 or errorUsage "Unknown option or too many input files";
$InputFilename = $ARGV[0];
#-r $InputFilename or error "\"$InputFilename\" not readable";
debug "Input filename:", $InputFilename;
}
### emacs-page
### option gscmd
if ($::opt_gscmd) {
if ($restricted) { # \label{val_gscmd}
error "Option forbidden in restricted mode: --gscmd";
} else {
debug "Switching from $GS to $::opt_gscmd";
$GS = $::opt_gscmd;
# validate GS \label{val_gscmd}
if ($restricted) {
$GS =~ /^(gs|mgs|gswin32c|gs386|gsos2)\z/
or $GS =~ /^gs[\-_]?(\d|\d[\.-_]?\d\d)c?\z/
or die error "Value of gscmd '$GS' not allowed in restricted mode.";
}
}
@ -289,24 +323,24 @@ push @GS, qw(-q -dNOPAUSE -dSAFER -sDEVICE=pdfwrite);
### option outfile
my $OutputFilename = $::opt_outfile;
if ($OutputFilename eq "") {
if (! $OutputFilename) {
if ($::opt_gs) {
$OutputFilename = $InputFilename;
if (!$::opt_filter) {
my $ds = ($^O eq "MSWin32" || $^O eq "cygwin") ? '\\/' : '/';
$OutputFilename =~ s/\.[^\.$ds]*$//;
$OutputFilename .= ".pdf";
}
} else {
$OutputFilename = "-"; # no ghostscript, write to standard output
}
}
if ($::opt_filter) {
debug "Filtering: will write standard output";
$OutputFilename = "-";
} else {
debug "Output filename:", $OutputFilename;
# Ghostscript, no filter: replace input extension with .pdf.
$OutputFilename = $InputFilename;
my $ds = $on_windows_or_cygwin ? '\\/' : '/';
$OutputFilename =~ s/\.[^\.$ds]*$//;
$OutputFilename .= ".pdf";
}
} else {
debug "No Ghostscript: will write standard output";
$OutputFilename = "-";
}
}
debug "Output filename:", $OutputFilename;
push @GS, "-sOutputFile=$OutputFilename";
### options compress, embed, res, autorotate
@ -321,7 +355,7 @@ $rotmsg = $::opt_autorotate ? $::opt_autorotate : "[use gs default]";
error "Invalid value for autorotate: '$::opt_autorotate' "
. "(use 'All', 'None' or 'PageByPage')."
if ($::opt_autorotate and
not $::opt_autorotate =~ /^(None|All|PageByPage)\z/);
not $::opt_autorotate =~ /^(None|All|PageByPage)$/);
### option BoundingBox types
my $BBName = "%%BoundingBox:";
@ -331,31 +365,15 @@ $BBName = "%%HiResBoundingBox:" if $::opt_hires;
$BBName = "%%ExactBoundingBox:" if $::opt_exact;
debug "BoundingBox comment:", $BBName;
### validate input file name in restricted mode \label{openin_any}
if ($restricted and not $::opt_filter
and not safe_name('in', $InputFilename)) {
error "Input filename '$InputFilename' not allowed in restricted mode.";
}
### validate output file name in restricted mode \label{openout_any}
use File::Spec::Functions qw(splitpath file_name_is_absolute);
if ($restricted) {
# use the equivalent of openout_any = p
# (see opennameok() web2c/lib/texmfmp.c)
# Well, for now, be even more paranoid: don't allow absolute path at all
my $ok = 1;
# disallow opening dot-files on Unix
unless ($^O eq "MSWin32") {
my ($drive, $path, $basename) = splitpath($OutputFilename);
$ok = 0 if $basename =~ /^\./;
}
# disallow absolute path
$ok = 0 if file_name_is_absolute($OutputFilename);
# disallow colon on Windows. It could be used either after a drive
# (like "a:dir\file") or for an alternate data stream (like
# "file:ads").
if ($^O eq "MSWin32" || $^O eq "cygwin") {
$ok = 0 if $OutputFilename =~ /:/;
}
# disallow going to parent directory
my $ds = ($^O eq "MSWin32" || $^O eq "cygwin") ? qr([\\/]) : qr(/);
$ok = 0 if $OutputFilename =~ /^\.\.$ds|$ds\.\.$ds/;
# we passed all tests
die error "Output filename '$OutputFilename' not allowed in restricted mode." unless $ok;
if ($restricted and not safe_name('out', $OutputFilename)) {
error "Output filename '$OutputFilename' not allowed in restricted mode.";
}
### option gs
@ -382,7 +400,7 @@ my $tmp_filename; # temporary file for windows
my $OUT; # filehandle for output (GS pipe or temporary file)
use File::Temp 'tempfile';
if ($::opt_gs) {
unless ($^O eq 'MSWin32' || $^O eq 'cygwin') { # list piped open works
if (! $on_windows_or_cygwin) { # list piped open works
push @GS, qw(- -c quit);
debug "Ghostscript pipe:", join(' ', @GS);
open($OUT, '|-', @GS) or error "Cannot open Ghostscript for piped input";
@ -393,9 +411,15 @@ if ($::opt_gs) {
$outname = $GS;
}
else {
open($OUT, '>', $OutputFilename) or error "Cannot write \"$OutputFilename\"";
debug "No Ghostscript: opening $OutputFilename";
if ($OutputFilename eq "-") {
$OUT = *STDOUT;
} else {
open($OUT, '>', $OutputFilename)
|| error ("Cannot write \"$OutputFilename\": $!");
$outname = $OutputFilename;
}
}
binmode $OUT;
# reading a cr-eol file on a lf-eol system makes it impossible to parse
@ -584,3 +608,5 @@ if ($? & 127) {
warning "BoundingBox not found" unless $BBCorrected;
debug "Done.";
# vim: ts=8 sw=2 expandtab:

View File

@ -1,12 +1,12 @@
diff -Nur texlive-20100722-source.orig//texk/kpathsea/texmf.cnf texlive-20100722-source/texk/kpathsea/texmf.cnf
--- texlive-20100722-source.orig//texk/kpathsea/texmf.cnf 2010-05-30 16:52:39.000000000 -0500
+++ texlive-20100722-source/texk/kpathsea/texmf.cnf 2011-01-24 14:38:46.317199461 -0600
@@ -61,7 +61,7 @@
% A place for local additions to a "standard" texmf tree.
% This tree is not used for local configuration maintained by
% texconfig, it uses TEXMFCONFIG below.
-TEXMFLOCAL = $SELFAUTOPARENT/../texmf-local
+TEXMFLOCAL = $SELFAUTOPARENT/texmf-local
diff -Nur texlive-20110705-source.orig//texk/kpathsea/texmf.cnf texlive-20110705-source/texk/kpathsea/texmf.cnf
--- texlive-20110705-source.orig//texk/kpathsea/texmf.cnf 2011-06-18 17:10:46.000000000 -0500
+++ texlive-20110705-source/texk/kpathsea/texmf.cnf 2011-07-22 21:30:42.459806437 -0500
@@ -59,7 +59,7 @@
TEXMFDIST = $TEXMFROOT/texmf-dist
% TEXMFSYSVAR, where texconfig-sys stores variable runtime data.
% With teTeX-3.0 or later, this must be set.
% Local additions to the distribution trees.
-TEXMFLOCAL = $TEXMFROOT/../texmf-local
+TEXMFLOCAL = $TEXMFROOT/texmf-local
% TEXMFSYSVAR, where *-sys store cached runtime data.
TEXMFSYSVAR = $TEXMFROOT/texmf-var

View File

@ -1,11 +1,12 @@
--- texlive-20100722-texmf.orig/texmf/web2c/texmf.cnf 2011-01-24 18:04:35.406411913 -0600
+++ texlive-20100722-texmf/texmf/web2c/texmf.cnf 2011-01-24 18:04:45.709266445 -0600
@@ -61,7 +61,7 @@
% A place for local additions to a "standard" texmf tree.
% This tree is not used for local configuration maintained by
% texconfig, it uses TEXMFCONFIG below.
-TEXMFLOCAL = $SELFAUTOPARENT/../texmf-local
+TEXMFLOCAL = $SELFAUTOPARENT/texmf-local
diff -Nur texlive-20110705-texmf.orig//texmf/web2c/texmf.cnf texlive-20110705-texmf/texmf/web2c/texmf.cnf
--- texlive-20110705-texmf.orig//texmf/web2c/texmf.cnf 2011-06-18 17:10:46.000000000 -0500
+++ texlive-20110705-texmf/texmf/web2c/texmf.cnf 2011-07-22 21:42:11.710930405 -0500
@@ -59,7 +59,7 @@
TEXMFDIST = $TEXMFROOT/texmf-dist
% TEXMFSYSVAR, where texconfig-sys stores variable runtime data.
% With teTeX-3.0 or later, this must be set.
% Local additions to the distribution trees.
-TEXMFLOCAL = $TEXMFROOT/../texmf-local
+TEXMFLOCAL = $TEXMFROOT/texmf-local
% TEXMFSYSVAR, where *-sys store cached runtime data.
TEXMFSYSVAR = $TEXMFROOT/texmf-var

View File

@ -26,15 +26,15 @@
# URL: ftp://tug.org/historic/systems/texlive/2010/
PRGNAM=texlive
VERSION=20100722
BUILD=${BUILD:-3}
VERSION=20110705
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
SOURCE_VERS=$VERSION
TEXMF_VERS=$VERSION
EXTRA_VERS=20100826
EXTRA_VERS=$VERSION
TEXI2HTML=1.82 # texi2html version - http://www.nongnu.org/texi2html/
TEXI2HTML=5.0 # texi2html version - http://www.nongnu.org/texi2html/
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
@ -93,7 +93,7 @@ patch -p1 < $CWD/patches/source-fixup_texmf-local_tree_in_texmf_cnf.diff
TL_BUILD_ENV="CFLAGS=\"$SLKCFLAGS\" CXXFLAGS=\"$SLKCFLAGS\"" \
TL_CONFIGURE_ARGS="\
--enable-multiplatform \
--with-tex-banner='TeX Live 2010/Slackware (unofficial)' \
--with-tex-banner='TeX Live 2011/Slackware (SBo)' \
--disable-native-texlive-build \
--disable-static \
--enable-ipc \
@ -182,14 +182,14 @@ make
make install DESTDIR=$PKG
mkdir -p $PKG/usr/doc/texlive-$VERSION/texi2html-$TEXI2HTML
cp -a \
AUTHORS COPYING NEWS README TODO \
AUTHORS COPYING ChangeLog NEWS README TODO \
$PKG/usr/doc/texlive-$VERSION/texi2html-$TEXI2HTML
# Now add epstopdf
mkdir -p $PKG/usr/doc/texlive-$VERSION/eps2pdf
cat $CWD/epstopdf/epstopdf.pl > $PKG/usr/share/texmf/bin/epstopdf
cat $CWD/epstopdf/epstopdf.1 > $PKG/usr/share/texmf/doc/man/man1/epstopdf.1
cat $CWD/epstopdf/epstopdf.pdf > $PKG/usr/doc/texlive-$VERSION/eps2pdf/epstopdf.pdf
cat $CWD/epstopdf/epstopdf.man1.pdf > $PKG/usr/doc/texlive-$VERSION/eps2pdf/epstopdf.man1.pdf
cat $CWD/epstopdf/README > $PKG/usr/doc/texlive-$VERSION/eps2pdf/README
chmod 0755 $PKG/usr/share/texmf/bin/epstopdf

View File

@ -1,16 +1,16 @@
PRGNAM="texlive"
VERSION="20100722"
VERSION="20110705"
HOMEPAGE="http://tug.org/texlive/"
DOWNLOAD="ftp://tug.org/historic/systems/texlive/2010/texlive-20100722-source.tar.xz \
ftp://tug.org/historic/systems/texlive/2010/texlive-20100722-texmf.tar.xz \
ftp://tug.org/historic/systems/texlive/2010/texlive-20100826-extra.tar.xz \
http://savannah.nongnu.org/download/texi2html/texi2html-1.82.tar.bz2"
MD5SUM="156fa34c56acb901fdc687b8d9860f1f \
12dec3a323c4eb75b98a3160c62dc865 \
d268c292605117d9de895d21db3a2e86 \
a8a9193c0ac1bec2f3ca7be40a5a82eb"
DOWNLOAD="ftp://tug.org/historic/systems/texlive/2011/texlive-20110705-source.tar.xz \
ftp://tug.org/historic/systems/texlive/2011/texlive-20110705-texmf.tar.xz \
ftp://tug.org/historic/systems/texlive/2011/texlive-20110705-extra.tar.xz \
http://download.savannah.gnu.org/releases/texi2html/texi2html-5.0.tar.bz2"
MD5SUM="968d238949e8a34a1fd74c374ddfe6f1 \
ed7b558be35adf00a6c2e69609cd679a \
6b554b0534f58ad7e7f0b0dc6d072a2c \
f15ac876fcdc8be865b16535f480aa54"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
MAINTAINER="Robby Workman"
EMAIL="rw@rlworkman.net"
APPROVED="dsomero"
APPROVED="Niels Horn"